From 58a1a89a4365046383f8f38b8cdbdcef3edf2d85 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 21 May 2021 07:16:35 -0500 Subject: [PATCH 001/873] Correct the interface used by the RHS operators to pull boundary data in disc init. --- mirgecom/initializers.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 9e1c0470a..60e52a9e8 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -727,14 +727,12 @@ def __init__( self._e = e self._dim = dim - def __call__(self, x_vec, *, eos=None, time=0, **kwargs): + def __call__(self, x_vec, *, eos=None, **kwargs): """ Create a uniform flow solution at locations *x_vec*. Parameters ---------- - time: float - Current time at which the solution is desired (unused) x_vec: numpy.ndarray Nodal coordinates eos: :class:`mirgecom.eos.IdealSingleGas` @@ -939,7 +937,7 @@ def __init__( if self._xdir >= self._dim: self._xdir = self._dim - 1 - def __call__(self, x_vec, eos, *, t=0.0): + def __call__(self, x_vec, eos, *, time=0.0): """ Create the mixture state at locations *x_vec*. @@ -952,9 +950,9 @@ def __call__(self, x_vec, eos, *, t=0.0): these functions: `eos.get_density` `eos.get_internal_energy` - t: float - Time at which solution is desired. - The location is (optionally) dependent on time + time: float + Time at which solution is desired. The location is (optionally) + dependent on time """ if x_vec.shape != (self._dim,): raise ValueError(f"Position vector has unexpected dimensionality," @@ -965,7 +963,7 @@ def __call__(self, x_vec, eos, *, t=0.0): if isinstance(self._disc_location, Number): x0 = self._disc_location else: - x0 = self._disc_location(t) + x0 = self._disc_location(time) xtanh = 1.0/self._sigma*(x0 - x) weight = 0.5*(1.0 - actx.np.tanh(xtanh)) From 3432f8a45fb87530b598852a23c03a2d20ba995e Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 21 May 2021 07:53:32 -0500 Subject: [PATCH 002/873] Update initializers.py --- mirgecom/initializers.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index f11278666..1209c20ce 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -1005,8 +1005,9 @@ def __init__( specifies the number of dimensions for the solution normal_dir: int specifies the direction (plane) the discontinuity is applied in - disc_location: float or Function[float] - location of discontinuity (in time) + disc_location: float or Callable + fixed location of discontinuity or optionally a function that + returns the time-dependent location. nspecies: int specifies the number of mixture species pressure_left: float From 839fef4aaedd0ecc6de85479a0da65753686c02d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 21 May 2021 07:58:04 -0500 Subject: [PATCH 003/873] Placate flake8 --- mirgecom/initializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 1209c20ce..85e81eb7b 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -1006,7 +1006,7 @@ def __init__( normal_dir: int specifies the direction (plane) the discontinuity is applied in disc_location: float or Callable - fixed location of discontinuity or optionally a function that + fixed location of discontinuity or optionally a function that returns the time-dependent location. nspecies: int specifies the number of mixture species From 347c61db1cdb486974e7547ea107615ebcb27f9f Mon Sep 17 00:00:00 2001 From: w-hagen <26756513+w-hagen@users.noreply.github.com> Date: Sat, 22 May 2021 00:27:19 -0500 Subject: [PATCH 004/873] Fix loss of bc grad function in inits (#352) --- mirgecom/boundary.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 5d9b59508..8737e5a6e 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -353,7 +353,8 @@ class AdiabaticSlipBoundary(PrescribedInviscidBoundary): def __init__(self): """Initialize AdiabaticSlipBoundary.""" PrescribedInviscidBoundary.__init__( - self, boundary_pair_func=self.adiabatic_slip_pair + self, boundary_pair_func=self.adiabatic_slip_pair, + fluid_solution_gradient_func=self.exterior_grad_q ) def adiabatic_slip_pair(self, discr, q, btag, **kwargs): @@ -425,7 +426,8 @@ class AdiabaticNoslipMovingBoundary(PrescribedInviscidBoundary): def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" PrescribedInviscidBoundary.__init__( - self, boundary_pair_func=self.adiabatic_noslip_pair + self, boundary_pair_func=self.adiabatic_noslip_pair, + fluid_solution_gradient_func=self.exterior_grad_q ) # Check wall_velocity (assumes dim is correct) if wall_velocity is None: From e7df3d952a75634c629426098cca0d959b36173a Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sun, 23 May 2021 14:44:35 -0500 Subject: [PATCH 005/873] Install PyYAML as a pip package. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index b60e76ad2..b0654c66a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,6 +7,7 @@ pymetis importlib-resources psutil gmsh +PyYAML # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic From d31875bccfa130948d9b6705bb2a13ea2014e7e5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 23 May 2021 15:26:43 -0500 Subject: [PATCH 006/873] Add YAML file reader cc(@anderson2981) --- mirgecom/io.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mirgecom/io.py b/mirgecom/io.py index a894c8ea5..d2b35f6b2 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -3,6 +3,7 @@ .. autofunction:: make_status_message .. autofunction:: make_rank_fname .. autofunction:: make_par_fname +.. autofunction:: read_and_distribute_yaml_data """ __copyright__ = """ @@ -74,3 +75,16 @@ def make_rank_fname(basename, rank=0, step=0, t=0): def make_par_fname(basename, step=0, t=0): r"""Make parallel visualization filename.""" return f"{basename}-{step:06d}.pvtu" + + +def read_and_distribute_yaml_data(mpi_comm, file_path): + """Read a YAML file on one rank, broadcast result to world.""" + import yaml + rank = mpi_comm.Get_rank() + if rank == 0: + with open(file_path) as f: + input_data = yaml.load(f, Loader=yaml.FullLoader) + else: + input_data = None + mpi_comm.bcast(input_data, root=0) + return input_data From 2cc8a7f50f33bf272540614870bf0ed531bcd693 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Thu, 27 May 2021 07:09:54 -0700 Subject: [PATCH 007/873] Add parameters stuff --- mirgecom/simutil.py | 23 ++++++++++++++++ test/test_util.py | 66 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 test/test_util.py diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index fe7f4feb4..ee68cfcf4 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -41,6 +41,29 @@ logger = logging.getLogger(__name__) +class MIRGEComParameters: + """Simple parameters object.""" + def __init__(self, **kwargs): + self._parameters = kwargs + + @property + def parameters(self): + """Grab the parameters.""" + return self._parameters + + def update(self, **kwargs): + """Update parameters with new or replacement parameters or values.""" + self._parameters.update(kwargs) + + def read(self, file_path): + """Read new or replacement values from a file at system path *file_path*.""" + import importlib.util + spec = importlib.util.spec_from_file_location("user_parameters", file_path) + foo = importlib.util.module_from_spec(spec) + spec.loader.exec_module(foo) + self._parameters.update(foo.mirgecom_parameters.parameters) + + def check_step(step, interval): """ Check step number against a user-specified interval. diff --git a/test/test_util.py b/test/test_util.py new file mode 100644 index 000000000..b77cab475 --- /dev/null +++ b/test/test_util.py @@ -0,0 +1,66 @@ +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import logging +from mirgecom.simutil import MIRGEComParameters + +logger = logging.getLogger(__name__) + + +def test_mirgecom_parameters(): + """Quick test of MIRGE-Com parameters container.""" + test_params = MIRGEComParameters(dim=2, order=3, casename="hello") + my_params = test_params.parameters + print(f"{test_params.parameters}") + assert len(my_params) == 3 + assert my_params["dim"] == 2 + assert my_params["order"] == 3 + assert my_params["casename"] == "hello" + + test_params.update(order=4, casename="goodbye", hello="hello") + my_params = test_params.parameters + assert len(my_params) == 4 + assert my_params["order"] == 4 + assert my_params["dim"] == 2 + assert my_params["casename"] == "goodbye" + assert my_params["hello"] == "hello" + + params_string = ( + f"from mirgecom.simutil import MIRGEComParameters" + f"\nmirgecom_parameters = MIRGEComParameters(" + f"\ndim=5, newparam=\"string\")" + ) + + file1 = open("test_params_fjsfjksd.py", "a") + file1.write(params_string) + file1.close() + test_params.read("test_params_fjsfjksd.py") + my_params = test_params.parameters + assert len(my_params) == 5 + assert my_params["dim"] == 5 + assert my_params["newparam"] == "string" + import os + os.remove("test_params_fjsfjksd.py") + + From 7be62ebfa779aaa70930736a127082292ec610b2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 May 2021 11:45:29 -0500 Subject: [PATCH 008/873] Re-enable timestep and CFL routines after new world grudge provided geometrical helpers. --- mirgecom/inviscid.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 4b1dba945..9c5986524 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -82,21 +82,26 @@ def get_inviscid_timestep(discr, eos, cfl, q): Currently, it's a hack waiting for the geometric_factor helpers port from grudge. """ + from mpi4py import MPI dim = discr.dim - mesh = discr.mesh order = max([grp.order for grp in discr.discr_from_dd("vol").groups]) - nelements = mesh.nelements - nel_1d = nelements ** (1.0 / (1.0 * dim)) - - # This roughly reproduces the timestep AK used in wave toy - dt = (1.0 - 0.25 * (dim - 1)) / (nel_1d * order ** 2) - return cfl * dt - -# dt_ngf = dt_non_geometric_factor(discr.mesh) -# dt_gf = dt_geometric_factor(discr.mesh) -# wavespeeds = compute_wavespeed(w,eos=eos) -# max_v = clmath.max(wavespeeds) -# return c*dt_ngf*dt_gf/max_v + cv = split_conserved(dim, q) + + import grudge.op as op + h_min_local = op.h_min_from_volume(discr) / (order * order) + from mirgecom.fluid import compute_wavespeed + local_wavespeeds = compute_wavespeed(dim, eos, cv) + max_wavespeed_local = op.nodal_max(discr, "vol", local_wavespeeds) + + mpi_comm = discr.get_comm() + if mpi_comm is None: + max_wavespeed_global = max_wavespeed_local + h_min_global = h_min_local + else: + h_min_global = mpi_comm.allreduce(h_min_local, op=MPI.MIN) + max_wavespeed_global = mpi_comm.allreduce(max_wavespeed_local, op=MPI.MAX) + + return cfl * h_min_global / max_wavespeed_global def get_inviscid_cfl(discr, eos, dt, q): From 7531492b61a086f570ff92a95a17b06038d8decd Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 May 2021 11:47:39 -0500 Subject: [PATCH 009/873] Use mpi comm from discr. --- mirgecom/inviscid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 9c5986524..bf8bbce57 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -93,7 +93,7 @@ def get_inviscid_timestep(discr, eos, cfl, q): local_wavespeeds = compute_wavespeed(dim, eos, cv) max_wavespeed_local = op.nodal_max(discr, "vol", local_wavespeeds) - mpi_comm = discr.get_comm() + mpi_comm = discr.mpi_communicator if mpi_comm is None: max_wavespeed_global = max_wavespeed_local h_min_global = h_min_local From 3d9e74267c9f6ef22cc9fa3efac25173e268c053 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 May 2021 11:57:08 -0500 Subject: [PATCH 010/873] Apply simplication from (live) @thomasgibson review. --- mirgecom/inviscid.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index bf8bbce57..3bef6fd2c 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -95,11 +95,10 @@ def get_inviscid_timestep(discr, eos, cfl, q): mpi_comm = discr.mpi_communicator if mpi_comm is None: - max_wavespeed_global = max_wavespeed_local - h_min_global = h_min_local - else: - h_min_global = mpi_comm.allreduce(h_min_local, op=MPI.MIN) - max_wavespeed_global = mpi_comm.allreduce(max_wavespeed_local, op=MPI.MAX) + return cfl * h_min_local / max_wavespeed_local + + h_min_global = mpi_comm.allreduce(h_min_local, op=MPI.MIN) + max_wavespeed_global = mpi_comm.allreduce(max_wavespeed_local, op=MPI.MAX) return cfl * h_min_global / max_wavespeed_global From e729ebd2667123abf1fa1663cb73ef1753e35ae4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 1 Jun 2021 07:45:18 -0500 Subject: [PATCH 011/873] Fix up params imp and test (soon to be removed) --- mirgecom/simutil.py | 2 ++ test/test_util.py | 8 +++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ee68cfcf4..3b6f7c5d8 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -43,7 +43,9 @@ class MIRGEComParameters: """Simple parameters object.""" + def __init__(self, **kwargs): + """Initialize parameters object.""" self._parameters = kwargs @property diff --git a/test/test_util.py b/test/test_util.py index b77cab475..822c3cd7e 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -47,9 +47,9 @@ def test_mirgecom_parameters(): assert my_params["hello"] == "hello" params_string = ( - f"from mirgecom.simutil import MIRGEComParameters" - f"\nmirgecom_parameters = MIRGEComParameters(" - f"\ndim=5, newparam=\"string\")" + "from mirgecom.simutil import MIRGEComParameters" + "\nmirgecom_parameters = MIRGEComParameters(" + "\ndim=5, newparam='string')" ) file1 = open("test_params_fjsfjksd.py", "a") @@ -62,5 +62,3 @@ def test_mirgecom_parameters(): assert my_params["newparam"] == "string" import os os.remove("test_params_fjsfjksd.py") - - From 5fac3cb3d47213ab6e1b3dad2f9cdaaec522ebd0 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 3 Jun 2021 11:31:21 -0500 Subject: [PATCH 012/873] Use grudge dt finding utils (#371) --- examples/vortex-mpi.py | 7 ++++++- mirgecom/inviscid.py | 26 +++++++++++++++++--------- requirements.txt | 2 +- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index bbe9035ea..0f4c20d02 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -52,6 +52,7 @@ from mirgecom.boundary import PrescribedBoundary from mirgecom.initializers import Vortex2D from mirgecom.eos import IdealSingleGas +from mirgecom.inviscid import get_inviscid_cfl from logpyle import IntervalTimer from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -172,11 +173,15 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): + cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) + viz_fields = [ + ("cfl", cfl) + ] return sim_checkpoint(discr, visualizer, eos, q=state, exact_soln=initializer, vizname=casename, step=step, t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm, - vis_timer=vis_timer) + vis_timer=vis_timer, viz_fields=viz_fields) try: (current_step, current_t, current_state) = \ diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 3bef6fd2c..07642bba6 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -84,23 +84,31 @@ def get_inviscid_timestep(discr, eos, cfl, q): """ from mpi4py import MPI dim = discr.dim - order = max([grp.order for grp in discr.discr_from_dd("vol").groups]) cv = split_conserved(dim, q) - import grudge.op as op - h_min_local = op.h_min_from_volume(discr) / (order * order) + from grudge.dt_utils import (dt_non_geometric_factor, + dt_geometric_factor) + + dt_factor = ( + dt_non_geometric_factor(discr) * dt_geometric_factor(discr) + ) + + from grudge.op import nodal_min from mirgecom.fluid import compute_wavespeed - local_wavespeeds = compute_wavespeed(dim, eos, cv) - max_wavespeed_local = op.nodal_max(discr, "vol", local_wavespeeds) + cell_dts = dt_factor / compute_wavespeed(dim, eos, cv) + dt_min_local = nodal_min(discr, "vol", cell_dts) mpi_comm = discr.mpi_communicator if mpi_comm is None: - return cfl * h_min_local / max_wavespeed_local + dt_min_global = dt_min_local + else: + dt_min_global = mpi_comm.allreduce(dt_min_local, op=MPI.MIN) - h_min_global = mpi_comm.allreduce(h_min_local, op=MPI.MIN) - max_wavespeed_global = mpi_comm.allreduce(max_wavespeed_local, op=MPI.MAX) + # this routine is collective - so this error should be ok + # if dt_min_global < 0: + # raise ValueError("Negative timstep detected.") - return cfl * h_min_global / max_wavespeed_global + return cfl * dt_min_global def get_inviscid_cfl(discr, eos, dt, q): diff --git a/requirements.txt b/requirements.txt index 5a5d4b277..f8210f3c5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ psutil --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge +--editable git+https://github.com/inducer/grudge.git@dt_utils#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 711995a76927ba68f773c4ad599f772750298dbc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 3 Jun 2021 12:54:14 -0500 Subject: [PATCH 013/873] Correct for built-in grudge geofacs, local cfl viz in selected examples. --- examples/autoignition-mpi.py | 7 +++++-- examples/lump-mpi.py | 7 ++++++- examples/vortex-mpi.py | 4 ++-- mirgecom/inviscid.py | 22 ++++------------------ mirgecom/simutil.py | 11 +++++++++-- 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 078ebec9c..95ae662c7 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -52,7 +52,8 @@ from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture -from mirgecom.euler import split_conserved +from mirgecom.fluid import split_conserved +from mirgecom.inviscid import get_inviscid_cfl import cantera import pyrometheus as pyro @@ -228,7 +229,9 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): cv = split_conserved(dim, state) reaction_rates = eos.get_production_rates(cv) - viz_fields = [("reaction_rates", reaction_rates)] + local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) + viz_fields = [("reaction_rates", reaction_rates), + ("cfl", local_cfl)] return sim_checkpoint(discr, visualizer, eos, q=state, vizname=casename, step=step, t=t, dt=dt, nstatus=nstatus, nviz=nviz, diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 75d2fdb01..a9d70ee67 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -51,6 +51,7 @@ from mirgecom.boundary import PrescribedBoundary from mirgecom.initializers import Lump from mirgecom.eos import IdealSingleGas +from mirgecom.inviscid import get_inviscid_cfl logger = logging.getLogger(__name__) @@ -127,7 +128,11 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - return sim_checkpoint(discr, visualizer, eos, q=state, + local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) + viz_fields = [ + ("cfl", local_cfl) + ] + return sim_checkpoint(discr, visualizer, eos, q=state, viz_fields=viz_fields, exact_soln=initializer, vizname=casename, step=step, t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 0f4c20d02..ac07a5f44 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -173,9 +173,9 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) + local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) viz_fields = [ - ("cfl", cfl) + ("cfl", local_cfl) ] return sim_checkpoint(discr, visualizer, eos, q=state, exact_soln=initializer, vizname=casename, step=step, diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 07642bba6..c4ff5ae3d 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -77,12 +77,11 @@ def inviscid_flux(discr, eos, q): def get_inviscid_timestep(discr, eos, cfl, q): - """Routine (will) return the (local) maximum stable inviscid timestep. + """Routine returns the cell-local maximum stable inviscid timestep. Currently, it's a hack waiting for the geometric_factor helpers port from grudge. """ - from mpi4py import MPI dim = discr.dim cv = split_conserved(dim, q) @@ -93,25 +92,12 @@ def get_inviscid_timestep(discr, eos, cfl, q): dt_non_geometric_factor(discr) * dt_geometric_factor(discr) ) - from grudge.op import nodal_min from mirgecom.fluid import compute_wavespeed - cell_dts = dt_factor / compute_wavespeed(dim, eos, cv) - dt_min_local = nodal_min(discr, "vol", cell_dts) + inviscid_dt = cfl * dt_factor / compute_wavespeed(dim, eos, cv) - mpi_comm = discr.mpi_communicator - if mpi_comm is None: - dt_min_global = dt_min_local - else: - dt_min_global = mpi_comm.allreduce(dt_min_local, op=MPI.MIN) - - # this routine is collective - so this error should be ok - # if dt_min_global < 0: - # raise ValueError("Negative timstep detected.") - - return cfl * dt_min_global + return inviscid_dt def get_inviscid_cfl(discr, eos, dt, q): """Calculate and return CFL based on current state and timestep.""" - wanted_dt = get_inviscid_timestep(discr, eos=eos, cfl=1.0, q=q) - return dt / wanted_dt + return dt / get_inviscid_timestep(discr, eos=eos, cfl=1.0, q=1) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index bdc72d653..29cae8dfe 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -66,9 +66,16 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, t_final, constant_cfl=False): """Return the maximum stable dt.""" mydt = dt + dt_left = t_final - t + if dt_left < 0: + return 0.0 if constant_cfl is True: - mydt = get_inviscid_timestep(discr=discr, q=state, - cfl=cfl, eos=eos) + from grudge.op import nodal_min + mydt = nodal_min( + discr, "vol", + get_inviscid_timestep(discr=discr, q=state, + cfl=cfl, eos=eos) + ) if (t + mydt) > t_final: mydt = t_final - t return mydt From bf0dcb693f39190bafe1cf3ec4f137bdfb50fde6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 3 Jun 2021 13:18:03 -0500 Subject: [PATCH 014/873] Report CFL in status msg. --- examples/autoignition-mpi.py | 4 +++- examples/lump-mpi.py | 4 +++- examples/vortex-mpi.py | 4 +++- mirgecom/inviscid.py | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 95ae662c7..d7eb1124b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -232,8 +232,10 @@ def my_checkpoint(step, t, dt, state): local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) viz_fields = [("reaction_rates", reaction_rates), ("cfl", local_cfl)] + from grudge.op import nodal_max + max_cfl = nodal_max(discr, "vol", local_cfl) return sim_checkpoint(discr, visualizer, eos, q=state, - vizname=casename, step=step, + vizname=casename, step=step, cfl=max_cfl, t=t, dt=dt, nstatus=nstatus, nviz=nviz, constant_cfl=constant_cfl, comm=comm, viz_fields=viz_fields) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index a9d70ee67..3b568adea 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -132,9 +132,11 @@ def my_checkpoint(step, t, dt, state): viz_fields = [ ("cfl", local_cfl) ] + from grudge.op import nodal_max + max_cfl = nodal_max(discr, "vol", local_cfl) return sim_checkpoint(discr, visualizer, eos, q=state, viz_fields=viz_fields, exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, cfl=max_cfl, exittol=exittol, constant_cfl=constant_cfl, comm=comm) try: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index ac07a5f44..ef9af8e2c 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -177,7 +177,9 @@ def my_checkpoint(step, t, dt, state): viz_fields = [ ("cfl", local_cfl) ] - return sim_checkpoint(discr, visualizer, eos, q=state, + from grudge.op import nodal_max + max_cfl = nodal_max(discr, "vol", local_cfl) + return sim_checkpoint(discr, visualizer, eos, q=state, cfl=max_cfl, exact_soln=initializer, vizname=casename, step=step, t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm, diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index c4ff5ae3d..3ef65b895 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -100,4 +100,4 @@ def get_inviscid_timestep(discr, eos, cfl, q): def get_inviscid_cfl(discr, eos, dt, q): """Calculate and return CFL based on current state and timestep.""" - return dt / get_inviscid_timestep(discr, eos=eos, cfl=1.0, q=1) + return dt / get_inviscid_timestep(discr, eos=eos, cfl=1.0, q=q) From f2f4777a9edf820453fd609df91bb9cd5a2056c0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 3 Jun 2021 23:06:13 -0500 Subject: [PATCH 015/873] Update to new dt_geometric_factors interface. --- mirgecom/inviscid.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 3ef65b895..daa2d7406 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -77,23 +77,19 @@ def inviscid_flux(discr, eos, q): def get_inviscid_timestep(discr, eos, cfl, q): - """Routine returns the cell-local maximum stable inviscid timestep. - - Currently, it's a hack waiting for the geometric_factor helpers port - from grudge. - """ + """Routine returns the cell-local maximum stable inviscid timestep.""" dim = discr.dim cv = split_conserved(dim, q) from grudge.dt_utils import (dt_non_geometric_factor, - dt_geometric_factor) + dt_geometric_factors) - dt_factor = ( - dt_non_geometric_factor(discr) * dt_geometric_factor(discr) + dt_factors = ( + dt_non_geometric_factor(discr) * dt_geometric_factors(discr) ) from mirgecom.fluid import compute_wavespeed - inviscid_dt = cfl * dt_factor / compute_wavespeed(dim, eos, cv) + inviscid_dt = cfl * dt_factors / compute_wavespeed(dim, eos, cv) return inviscid_dt From 00e55f5bb1bd4b0f2712d1ab44c61cc772f0a4f5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 3 Jun 2021 23:13:39 -0500 Subject: [PATCH 016/873] Clean up the inviscid dt routines a bit, evict reductions. --- mirgecom/inviscid.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index daa2d7406..09a908ebc 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -83,15 +83,12 @@ def get_inviscid_timestep(discr, eos, cfl, q): from grudge.dt_utils import (dt_non_geometric_factor, dt_geometric_factors) - - dt_factors = ( - dt_non_geometric_factor(discr) * dt_geometric_factors(discr) - ) - from mirgecom.fluid import compute_wavespeed - inviscid_dt = cfl * dt_factors / compute_wavespeed(dim, eos, cv) - return inviscid_dt + return ( + cfl * dt_non_geometric_factor(discr) * dt_geometric_factors(discr) + / compute_wavespeed(dim, eos, cv) + ) def get_inviscid_cfl(discr, eos, dt, q): From 2a3f29937cc2d6edc8ac68c628b6077842ad030e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 3 Jun 2021 23:20:38 -0500 Subject: [PATCH 017/873] Clean up the sim util dt routine a bit, add reductions. --- mirgecom/simutil.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 29cae8dfe..5aa2a3971 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -76,9 +76,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, get_inviscid_timestep(discr=discr, q=state, cfl=cfl, eos=eos) ) - if (t + mydt) > t_final: - mydt = t_final - t - return mydt + return min(mydt, dt_left) class ExactSolutionMismatch(Exception): From 1b3e3d8000d5514fc313bb838f35c14b8d31ae2a Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sat, 5 Jun 2021 00:30:24 -0500 Subject: [PATCH 018/873] Switch back to grudge main. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f8210f3c5..5a5d4b277 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ psutil --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git@dt_utils#egg=grudge +--editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 80d8087aa2a5602ca14c65722d13cfbba2c550b4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 5 Jun 2021 19:25:33 -0500 Subject: [PATCH 019/873] Sharpen the documentation, and the interface. --- mirgecom/inviscid.py | 58 ++++++++++++++++++++++++++++++++++++++------ mirgecom/simutil.py | 5 ++-- test/test_euler.py | 4 +-- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 09a908ebc..69a85ecc1 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -76,21 +76,63 @@ def inviscid_flux(discr, eos, q): (mom / cv.mass) * cv.species_mass.reshape(-1, 1))) -def get_inviscid_timestep(discr, eos, cfl, q): - """Routine returns the cell-local maximum stable inviscid timestep.""" - dim = discr.dim - cv = split_conserved(dim, q) - +def get_inviscid_timestep(discr, eos, q): + """Routine returns the node-local maximum stable inviscid timestep. + + Parameters + ---------- + discr: grudge.eager.EagerDGDiscretization + the discretization to use + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + q + State array which expects at least the canonical conserved quantities + (mass, energy, momentum) for the fluid at each point. For multi-component + fluids, the conserved quantities should include + (mass, energy, momentum, species_mass), where *species_mass* is a vector + of species masses. + + Returns + ------- + class:`~grudge.dof_array.DOFArray` + The maximum stable timestep at each node. + """ from grudge.dt_utils import (dt_non_geometric_factor, dt_geometric_factors) from mirgecom.fluid import compute_wavespeed + dim = discr.dim + cv = split_conserved(dim, q) + return ( - cfl * dt_non_geometric_factor(discr) * dt_geometric_factors(discr) + dt_non_geometric_factor(discr) * dt_geometric_factors(discr) / compute_wavespeed(dim, eos, cv) ) def get_inviscid_cfl(discr, eos, dt, q): - """Calculate and return CFL based on current state and timestep.""" - return dt / get_inviscid_timestep(discr, eos=eos, cfl=1.0, q=q) + """Calculate and return node-local CFL based on current state and timestep. + + Parameters + ---------- + discr: grudge.eager.EagerDGDiscretization + the discretization to use + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + dt: float or class:`~grudge.dof_array.DOFArray` + A constant scalar dt or node-local dt + q + State array which expects at least the canonical conserved quantities + (mass, energy, momentum) for the fluid at each point. For multi-component + fluids, the conserved quantities should include + (mass, energy, momentum, species_mass), where *species_mass* is a vector + of species masses. + + Returns + ------- + class:`grudge.dof_array.DOFArray` + The CFL at each node. + """ + return dt / get_inviscid_timestep(discr, eos=eos, q=q) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 5aa2a3971..ab9f5e8c9 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -71,10 +71,9 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, return 0.0 if constant_cfl is True: from grudge.op import nodal_min - mydt = nodal_min( + mydt = cfl * nodal_min( discr, "vol", - get_inviscid_timestep(discr=discr, q=state, - cfl=cfl, eos=eos) + get_inviscid_timestep(discr=discr, eos=eos, q=state) ) return min(mydt, dt_left) diff --git a/test/test_euler.py b/test/test_euler.py index 5211fdd2c..7144cc802 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -760,7 +760,7 @@ def _euler_flow_stepper(actx, parameters): discr = EagerDGDiscretization(actx, mesh, order=order) nodes = thaw(actx, discr.nodes()) fields = initializer(nodes) - sdt = get_inviscid_timestep(discr, eos=eos, cfl=cfl, q=fields) + sdt = cfl * get_inviscid_timestep(discr, eos=eos, q=fields) initname = initializer.__class__.__name__ eosname = eos.__class__.__name__ @@ -840,7 +840,7 @@ def rhs(t, q): t += dt istep += 1 - sdt = get_inviscid_timestep(discr, eos=eos, cfl=cfl, q=fields) + sdt = cfl * get_inviscid_timestep(discr, eos=eos, q=fields) if nstepstatus > 0: logger.info("Writing final dump.") From 5377759a42364f80c1fda60a2d6753bb0ee4bd69 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 5 Jun 2021 19:46:19 -0500 Subject: [PATCH 020/873] Documutation --- mirgecom/inviscid.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 69a85ecc1..d004a4eb8 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -86,7 +86,7 @@ def get_inviscid_timestep(discr, eos, q): eos: mirgecom.eos.GasEOS Implementing the pressure and temperature functions for returning pressure and temperature as a function of the state q. - q + q: numpy.ndarray State array which expects at least the canonical conserved quantities (mass, energy, momentum) for the fluid at each point. For multi-component fluids, the conserved quantities should include @@ -95,7 +95,7 @@ def get_inviscid_timestep(discr, eos, q): Returns ------- - class:`~grudge.dof_array.DOFArray` + class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ from grudge.dt_utils import (dt_non_geometric_factor, @@ -116,14 +116,14 @@ def get_inviscid_cfl(discr, eos, dt, q): Parameters ---------- - discr: grudge.eager.EagerDGDiscretization + discr: :class:`grudge.eager.EagerDGDiscretization` the discretization to use eos: mirgecom.eos.GasEOS Implementing the pressure and temperature functions for returning pressure and temperature as a function of the state q. - dt: float or class:`~grudge.dof_array.DOFArray` + dt: float or :class:`~meshmode.dof_array.DOFArray` A constant scalar dt or node-local dt - q + q: numpy.ndarray State array which expects at least the canonical conserved quantities (mass, energy, momentum) for the fluid at each point. For multi-component fluids, the conserved quantities should include @@ -132,7 +132,7 @@ def get_inviscid_cfl(discr, eos, dt, q): Returns ------- - class:`grudge.dof_array.DOFArray` + :class:`meshmode.dof_array.DOFArray` The CFL at each node. """ return dt / get_inviscid_timestep(discr, eos=eos, q=q) From 856821c58a74b5feedcae0f06fec5aa2ea32295e Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 28 May 2021 13:45:07 -0500 Subject: [PATCH 021/873] Add pre/post callback function args to advance_state --- mirgecom/steppers.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 95e605dce..e8074b9db 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -32,8 +32,11 @@ from mirgecom.logging_quantities import set_sim_state -def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, - state, t_final, t=0.0, istep=0, logmgr=None, eos=None, dim=None): +def advance_state(rhs, timestepper, get_timestep, + state, t_final, t=0.0, istep=0, + pre_step_callback=None, + post_step_callback=None, + logmgr=None, eos=None, dim=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -44,12 +47,7 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, a call with signature ``rhs(t, state)``. timestepper Function that advances the state from t=time to t=(time+dt), and - returns the advanced state. Has a call with signature - ``timestepper(state, t, dt, rhs)``. - checkpoint - Function is user-defined and can be used to preform simulation status - reporting, viz, and restart i/o. A non-zero return code from this function - indicates that this function should stop gracefully. + returns the advanced state. get_timestep Function that should return dt for the next step. This interface allows user-defined adaptive timestepping. A negative return value indicated that @@ -63,6 +61,17 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, Time at which to start istep: int Step number from which to start + pre_step_callback + An optional user-defined function to be called before the timestepper + is called for that particular step. A non-zero return code from this + function indicates that this function should stop gracefully. + Examples of such functions include visualization, io, or restart + checkpoints. + post_step_callback + An optional user-defined function to be called after the timestepper + is called for that particular step. A non-zero return code from this + function indicates that this function should stop gracefully. + Examples of such functions include applying modal filtering or limiters. Returns ------- @@ -84,11 +93,16 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, if dt < 0: return istep, t, state - checkpoint(state=state, step=istep, t=t, dt=dt) + if pre_step_callback is not None: + pre_step_callback(state=state, step=istep, t=t, dt=dt) state = timestepper(state=state, t=t, dt=dt, rhs=rhs) t += dt + + if post_step_callback is not None: + post_step_callback(state=state, step=istep, t=t, dt=dt) + istep += 1 if logmgr: From 72ceaf609344dd00abd363dae904716bd2d916e4 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 28 May 2021 13:46:02 -0500 Subject: [PATCH 022/873] Pass checkpoint functions as pre-step callbacks --- examples/autoignition-mpi.py | 6 +++--- examples/lump-mpi.py | 6 +++--- examples/mixture-mpi.py | 6 +++--- examples/pulse-mpi.py | 6 +++--- examples/scalar-lump-mpi.py | 6 +++--- examples/sod-mpi.py | 6 +++--- examples/vortex-mpi.py | 8 ++++---- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index caaef9821..a9f9983e5 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -242,9 +242,9 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: error_state = True current_step = ex.step diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index e0272c57f..134214722 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -139,9 +139,9 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: current_step = ex.step current_t = ex.t diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index b2d834c15..14b814b1b 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -162,9 +162,9 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: error_state = 1 current_step = ex.step diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index f6ef9f649..33a53ecbf 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -162,9 +162,9 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: current_step = ex.step current_t = ex.t diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 4ae61c2dd..90d387c29 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -149,9 +149,9 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: current_step = ex.step current_t = ex.t diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 13d564b39..f8f61c186 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -138,9 +138,9 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: current_step = ex.step current_t = ex.t diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 2149c4d5f..447f8b57c 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -186,10 +186,10 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, logmgr=logmgr, - eos=eos, dim=dim) + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, logmgr=logmgr, eos=eos, + dim=dim) except ExactSolutionMismatch as ex: current_step = ex.step current_t = ex.t From 28148262b99139c7ddfbbc49fe55e846e8996a54 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 28 May 2021 16:08:16 -0500 Subject: [PATCH 023/873] Add healthcheck callback and exceptions --- doc/support/tools.rst | 2 +- mirgecom/exceptions.py | 78 ++++++++++++++++++++++++++++++++++++++++++ mirgecom/simutil.py | 53 +++++++++++++++++++--------- 3 files changed, 116 insertions(+), 17 deletions(-) create mode 100644 mirgecom/exceptions.py diff --git a/doc/support/tools.rst b/doc/support/tools.rst index a046e118a..f8e0b7c07 100644 --- a/doc/support/tools.rst +++ b/doc/support/tools.rst @@ -1,6 +1,6 @@ Random Pile'o'Tools =================== +.. automodule:: mirgecom.exceptions .. automodule:: mirgecom.simutil - .. automodule:: mirgecom.utils diff --git a/mirgecom/exceptions.py b/mirgecom/exceptions.py new file mode 100644 index 000000000..fb85af0e5 --- /dev/null +++ b/mirgecom/exceptions.py @@ -0,0 +1,78 @@ +"""Provide custom exceptions for use in callback routines. + +.. autoexception:: MirgecomException +.. autoexception:: ExactSolutionMismatch +.. autoexception:: SimulationHealthError +""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + + +class MirgecomException(Exception): + """Exception base class for mirgecom exceptions. + + .. attribute:: step + + A :class:`int` denoting the simulation step when the exception + was raised. + + .. attribute:: t + + A :class:`float` denoting the simulation time when the + exception was raised. + + .. attribute:: state + + The simulation state when the exception was raised. + + .. attribute:: message + + A :class:`str` describing the message for the exception. + """ + + def __init__(self, step, t, state, message): + """Record the simulation state on creation.""" + self.step = step + self.t = t + self.state = state + self.message = message + super().__init__(self.message) + + +class ExactSolutionMismatch(MirgecomException): + """Exception class for solution mismatch.""" + + def __init__(self, step, t, state): + super().__init__( + step, t, state, + message="Solution doesn't agree with analytic result." + ) + + +class SimulationHealthError(MirgecomException): + """Exception class for an unphysical simulation.""" + + def __init__(self, step, t, state, message): + super().__init__(step, t, state, message) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index bdc72d653..41cf51e8b 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -2,8 +2,8 @@ .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep -.. autoexception:: ExactSolutionMismatch .. autofunction:: sim_checkpoint +.. autofunction:: sim_healthcheck .. autofunction:: generate_and_distribute_mesh """ @@ -37,6 +37,7 @@ from meshmode.dof_array import thaw from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? +from mirgecom.exceptions import ExactSolutionMismatch, SimulationHealthError logger = logging.getLogger(__name__) @@ -74,21 +75,6 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, return mydt -class ExactSolutionMismatch(Exception): - """Exception class for solution mismatch. - - .. attribute:: step - .. attribute:: t - .. attribute:: state - """ - - def __init__(self, step, t, state): - """Record the simulation state on creation.""" - self.step = step - self.t = t - self.state = state - - def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, step=0, t=0, dt=0, cfl=1.0, nstatus=-1, nviz=-1, exittol=1e-16, constant_cfl=False, comm=None, viz_fields=None, overwrite=False, @@ -162,6 +148,41 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, raise ExactSolutionMismatch(step, t=t, state=q) +def sim_healthcheck(discr, eos, q, conserved_vars, step=0, t=0): + """Checks the health of the simulation by checking for unphysical values. + """ + import grudge.op as op + + # NOTE: Derived quantities are functions of the conserved variables. + # Therefore is it sufficient to check for unphysical values of + # temperature and pressure. + dependent_vars = eos.dependent_vars(conserved_vars) + + # Check for NaN + if (np.isnan(op.nodal_sum(discr, "vol", dependent_vars.pressure)) + or np.isnan(op.nodal_sum(discr, "vol", dependent_vars.temperature))): + raise SimulationHealthError( + step, t=t, state=q, + message="Detected a NaN." + ) + + # Check for non-positivity + if (op.nodal_min(discr, "vol", dependent_vars.pressure) < 0 + or op.nodal_min(discr, "vol", dependent_vars.temperature) < 0): + raise SimulationHealthError( + step, t=t, state=q, + message="Found non-positive values for pressure or temperature." + ) + + # Check for blow-up + if (op.norm(discr, dependent_vars.pressure, np.inf) == np.inf + or op.norm(discr, dependent_vars.temperature, np.inf) == np.inf): + raise SimulationHealthError( + step, t=t, state=q, + message="Infinity-norm of derived quantities is not finite." + ) + + def generate_and_distribute_mesh(comm, generate_mesh): """Generate a mesh and distribute it among all ranks in *comm*. From 25dd51c961f18e8aaec72ab69bb411dd726cf5e7 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 28 May 2021 16:08:42 -0500 Subject: [PATCH 024/873] Use healthcheck callbacks in examples --- examples/autoignition-mpi.py | 15 +++++++++++---- examples/lump-mpi.py | 13 ++++++++++--- examples/mixture-mpi.py | 13 ++++++++++--- examples/pulse-mpi.py | 13 ++++++++++--- examples/scalar-lump-mpi.py | 14 +++++++++++--- examples/sod-mpi.py | 14 +++++++++++--- examples/vortex-mpi.py | 14 +++++++++++--- 7 files changed, 74 insertions(+), 22 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index a9f9983e5..43980ded1 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -40,10 +40,12 @@ from mirgecom.simutil import ( inviscid_sim_timestep, sim_checkpoint, + sim_healthcheck, check_step, - generate_and_distribute_mesh, - ExactSolutionMismatch + generate_and_distribute_mesh ) +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -52,7 +54,7 @@ from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture -from mirgecom.euler import split_conserved + import cantera import pyrometheus as pyro @@ -239,13 +241,18 @@ def my_checkpoint(step, t, dt, state): constant_cfl=constant_cfl, comm=comm, viz_fields=viz_fields) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final) - except ExactSolutionMismatch as ex: + except MirgecomException as ex: error_state = True current_step = ex.step current_t = ex.t diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 134214722..0ce1d85e7 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -40,9 +40,11 @@ from mirgecom.simutil import ( inviscid_sim_timestep, sim_checkpoint, - generate_and_distribute_mesh, - ExactSolutionMismatch + sim_healthcheck, + generate_and_distribute_mesh ) +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -136,13 +138,18 @@ def my_checkpoint(step, t, dt, state): t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final) - except ExactSolutionMismatch as ex: + except MirgecomException as ex: current_step = ex.step current_t = ex.t current_state = ex.state diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 14b814b1b..d61209f0d 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -40,9 +40,11 @@ from mirgecom.simutil import ( inviscid_sim_timestep, sim_checkpoint, - generate_and_distribute_mesh, - ExactSolutionMismatch + sim_healthcheck, + generate_and_distribute_mesh ) +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -159,13 +161,18 @@ def my_checkpoint(step, t, dt, state): t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final) - except ExactSolutionMismatch as ex: + except MirgecomException as ex: error_state = 1 current_step = ex.step current_t = ex.t diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 33a53ecbf..6620ef918 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -42,9 +42,10 @@ inviscid_sim_timestep, generate_and_distribute_mesh, sim_checkpoint, - ExactSolutionMismatch, + sim_healthcheck ) - +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -159,13 +160,19 @@ def my_checkpoint(step, t, dt, state): t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final) - except ExactSolutionMismatch as ex: + + except MirgecomException as ex: current_step = ex.step current_t = ex.t current_state = ex.state diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 90d387c29..1f4c70b03 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -41,9 +41,11 @@ from mirgecom.simutil import ( inviscid_sim_timestep, sim_checkpoint, - generate_and_distribute_mesh, - ExactSolutionMismatch + sim_healthcheck, + generate_and_distribute_mesh ) +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -146,13 +148,19 @@ def my_checkpoint(step, t, dt, state): t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final) - except ExactSolutionMismatch as ex: + + except MirgecomException as ex: current_step = ex.step current_t = ex.t current_state = ex.state diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index f8f61c186..3b4547f20 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -39,9 +39,11 @@ from mirgecom.simutil import ( inviscid_sim_timestep, sim_checkpoint, - generate_and_distribute_mesh, - ExactSolutionMismatch, + sim_healthcheck, + generate_and_distribute_mesh ) +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -135,13 +137,19 @@ def my_checkpoint(step, t, dt, state): t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final) - except ExactSolutionMismatch as ex: + + except MirgecomException as ex: current_step = ex.step current_t = ex.t current_state = ex.state diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 447f8b57c..af3240d51 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -41,9 +41,11 @@ from mirgecom.simutil import ( inviscid_sim_timestep, sim_checkpoint, - generate_and_distribute_mesh, - ExactSolutionMismatch, + sim_healthcheck, + generate_and_distribute_mesh ) +from mirgecom.exceptions import MirgecomException +from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -183,14 +185,20 @@ def my_checkpoint(step, t, dt, state): exittol=exittol, constant_cfl=constant_cfl, comm=comm, vis_timer=vis_timer) + def my_simhealthcheck(state, step, t, dt): + cv = split_conserved(discr.dim, state) + sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=my_simhealthcheck, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, logmgr=logmgr, eos=eos, dim=dim) - except ExactSolutionMismatch as ex: + + except MirgecomException as ex: current_step = ex.step current_t = ex.t current_state = ex.state From 7ee673c092b912651b6f68eee5d4bac73f48b0bf Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 28 May 2021 16:15:01 -0500 Subject: [PATCH 025/873] Fix docstring for sim_healthcheck --- mirgecom/simutil.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 41cf51e8b..5d5bc4b0f 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -149,8 +149,7 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, def sim_healthcheck(discr, eos, q, conserved_vars, step=0, t=0): - """Checks the health of the simulation by checking for unphysical values. - """ + """Check the health of the simulation by checking for unphysical values.""" import grudge.op as op # NOTE: Derived quantities are functions of the conserved variables. From 9dba4ff1a5a63fd5170f0f25c3e0524a2ea7c292 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 4 Jun 2021 11:45:22 -0500 Subject: [PATCH 026/873] Document callback signature and return state --- examples/autoignition-mpi.py | 4 ++- examples/lump-mpi.py | 4 ++- examples/mixture-mpi.py | 4 ++- examples/pulse-mpi.py | 4 ++- examples/scalar-lump-mpi.py | 4 ++- examples/sod-mpi.py | 4 ++- examples/vortex-mpi.py | 4 ++- mirgecom/simutil.py | 6 ++++- mirgecom/steppers.py | 46 ++++++++++++++++++++++++++--------- test/test_time_integrators.py | 8 +++--- 10 files changed, 64 insertions(+), 24 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 43980ded1..8b8fadaa1 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -243,7 +243,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 0ce1d85e7..dab984d07 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -140,7 +140,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index d61209f0d..80ddc93c3 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -163,7 +163,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 6620ef918..6b42aa16e 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -162,7 +162,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 1f4c70b03..faae596b5 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -150,7 +150,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 3b4547f20..5df71bb97 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -139,7 +139,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index af3240d51..9ee849062 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -187,7 +187,9 @@ def my_checkpoint(step, t, dt, state): def my_simhealthcheck(state, step, t, dt): cv = split_conserved(discr.dim, state) - sim_healthcheck(discr, eos, q=state, conserved_vars=cv, step=step, t=t) + return sim_healthcheck(discr, eos, q=state, + conserved_vars=cv, + step=step, t=t) try: (current_step, current_t, current_state) = \ diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 5d5bc4b0f..99e57c6b9 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -83,7 +83,7 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, do_viz = check_step(step=step, interval=nviz) do_status = check_step(step=step, interval=nstatus) if do_viz is False and do_status is False: - return 0 + return q from mirgecom.fluid import split_conserved cv = split_conserved(discr.dim, q) @@ -147,6 +147,8 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, if maxerr > exittol: raise ExactSolutionMismatch(step, t=t, state=q) + return q + def sim_healthcheck(discr, eos, q, conserved_vars, step=0, t=0): """Check the health of the simulation by checking for unphysical values.""" @@ -181,6 +183,8 @@ def sim_healthcheck(discr, eos, q, conserved_vars, step=0, t=0): message="Infinity-norm of derived quantities is not finite." ) + return q + def generate_and_distribute_mesh(comm, generate_mesh): """Generate a mesh and distribute it among all ranks in *comm*. diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index e8074b9db..0ca3af0b6 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -62,16 +62,13 @@ def advance_state(rhs, timestepper, get_timestep, istep: int Step number from which to start pre_step_callback - An optional user-defined function to be called before the timestepper - is called for that particular step. A non-zero return code from this - function indicates that this function should stop gracefully. - Examples of such functions include visualization, io, or restart - checkpoints. + An optional user-defined function, with signature: + ``state = pre_step_callback(state, step, t, dt)``, + to be called before the timestepper is called for that particular step. post_step_callback - An optional user-defined function to be called after the timestepper - is called for that particular step. A non-zero return code from this - function indicates that this function should stop gracefully. - Examples of such functions include applying modal filtering or limiters. + An optional user-defined function, with signature: + ``state = post_step_callback(state, step, t, dt)``, + to be called after the timestepper is called for that particular step. Returns ------- @@ -94,14 +91,14 @@ def advance_state(rhs, timestepper, get_timestep, return istep, t, state if pre_step_callback is not None: - pre_step_callback(state=state, step=istep, t=t, dt=dt) + state = pre_step_callback(state=state, step=istep, t=t, dt=dt) state = timestepper(state=state, t=t, dt=dt, rhs=rhs) t += dt if post_step_callback is not None: - post_step_callback(state=state, step=istep, t=t, dt=dt) + state = post_step_callback(state=state, step=istep, t=t, dt=dt) istep += 1 @@ -145,6 +142,14 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, Time at which to start istep: int Step number from which to start + pre_step_callback + An optional user-defined function, with signature: + ``state = pre_step_callback(state, step, t, dt)``, + to be called before the timestepper is called for that particular step. + post_step_callback + An optional user-defined function, with signature: + ``state = post_step_callback(state, step, t, dt)``, + to be called after the timestepper is called for that particular step. Returns ------- @@ -170,13 +175,22 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, if dt < 0: return istep, t, state - checkpoint(state=state, step=istep, t=t, dt=dt) + if pre_step_callback is not None: + state = pre_step_callback(state=state, + step=istep, + t=t, dt=dt) # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): state = event.state_component t += dt + + if post_step_callback is not None: + state = post_step_callback(state=state, + step=istep, + t=t, dt=dt) + istep += 1 if logmgr: set_dt(logmgr, dt) @@ -263,6 +277,14 @@ def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, Time at which to start istep: int Step number from which to start + pre_step_callback + An optional user-defined function, with signature: + ``state = pre_step_callback(state, step, t, dt)``, + to be called before the timestepper is called for that particular step. + post_step_callback + An optional user-defined function, with signature: + ``state = post_step_callback(state, step, t, dt)``, + to be called after the timestepper is called for that particular step. Returns ------- diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index fe69d7514..cc55ceeca 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -128,13 +128,13 @@ def get_timestep(state): return dt def my_checkpoint(state, step, t, dt): - return 0 + return state (step, t, state) = \ advance_state(rhs=rhs, timestepper=method, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, component_id="y") + get_timestep=get_timestep, state=state, + t=t, t_final=t_final, component_id="y", + post_step_callback=my_checkpoint) error = np.abs(state - exact_soln(t)) / exact_soln(t) integrator_eoc.add_data_point(dt, error) From f1b3e4f3289a5d9f6837f9772e25d9649cf62b0a Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 4 Jun 2021 12:37:20 -0500 Subject: [PATCH 027/873] Test the basic healthcheck callback --- test/test_callbacks.py | 100 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 test/test_callbacks.py diff --git a/test/test_callbacks.py b/test/test_callbacks.py new file mode 100644 index 000000000..fb05c445e --- /dev/null +++ b/test/test_callbacks.py @@ -0,0 +1,100 @@ +"""Test built-in callback routines.""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np +import pytest + +from arraycontext import ( # noqa + thaw, + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests +) + +from mirgecom.fluid import join_conserved, split_conserved +from mirgecom.eos import IdealSingleGas + +from grudge.eager import EagerDGDiscretization + + +def test_basic_healthcheck(actx_factory): + from mirgecom.simutil import sim_healthcheck + + actx = actx_factory() + nel_1d = 4 + dim = 2 + + from meshmode.mesh.generation import generate_regular_rect_mesh + + mesh = generate_regular_rect_mesh( + a=(1.0,) * dim, b=(2.0,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + order = 3 + discr = EagerDGDiscretization(actx, mesh, order=order) + nodes = thaw(discr.nodes(), actx) + zeros = discr.zeros(actx) + ones = zeros + 1.0 + + # Let's make a very bad state (negative mass) + mass = -1*ones + energy = zeros + 2.5 + velocity = 2 * nodes + mom = mass * velocity + + eos = IdealSingleGas() + q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + cv = split_conserved(dim, q) + + from mirgecom.exceptions import SimulationHealthError + + with pytest.raises(SimulationHealthError): + sim_healthcheck(discr, eos, q, cv) + + # Let's make another very bad state (nans) + mass = 1*ones + energy = zeros + 2.5 + velocity = np.nan * nodes + mom = mass * velocity + + eos = IdealSingleGas() + q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + cv = split_conserved(dim, q) + + with pytest.raises(SimulationHealthError): + sim_healthcheck(discr, eos, q, cv) + + # Let's make one last very bad state (inf) + mass = 1*ones + energy = np.inf * ones + velocity = 2 * nodes + mom = mass * velocity + + eos = IdealSingleGas() + q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + cv = split_conserved(dim, q) + + with pytest.raises(SimulationHealthError): + sim_healthcheck(discr, eos, q, cv) From faba167c3930c6798243c75176d5fb6cd29a26de Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 4 Jun 2021 12:43:30 -0500 Subject: [PATCH 028/873] Remove EOS copy-pasta --- test/test_callbacks.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/test_callbacks.py b/test/test_callbacks.py index fb05c445e..ebdf12aa6 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -79,7 +79,6 @@ def test_basic_healthcheck(actx_factory): velocity = np.nan * nodes mom = mass * velocity - eos = IdealSingleGas() q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) cv = split_conserved(dim, q) @@ -92,7 +91,6 @@ def test_basic_healthcheck(actx_factory): velocity = 2 * nodes mom = mass * velocity - eos = IdealSingleGas() q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) cv = split_conserved(dim, q) From 0b6df95ef9df205115d65947fd40bee6da505ee4 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sat, 5 Jun 2021 10:41:20 -0500 Subject: [PATCH 029/873] Minor refactoring and allow callbacks to terminate the simulation --- examples/autoignition-mpi.py | 71 +++++++------- examples/lump-mpi.py | 63 +++++++------ examples/mixture-mpi.py | 70 +++++++------- examples/pulse-mpi.py | 66 +++++++------ examples/scalar-lump-mpi.py | 64 +++++++------ examples/sod-mpi.py | 64 +++++++------ examples/vortex-mpi.py | 68 +++++++------ mirgecom/exceptions.py | 40 +------- mirgecom/simutil.py | 178 +++++++++++++++++++++++------------ test/test_callbacks.py | 15 ++- 10 files changed, 377 insertions(+), 322 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 8b8fadaa1..5881651ea 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -39,12 +39,13 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, + sim_visualization, sim_checkpoint, - sim_healthcheck, + sim_cfd_healthcheck, check_step, generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException +from mirgecom.exceptions import StepperCrashError from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -84,6 +85,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 5 + ncheck = 1 rank = 0 checkpoint_t = current_t current_step = 0 @@ -94,7 +96,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): timestepper = rk4_step box_ll = -0.005 box_ur = 0.005 - error_state = False debug = False from mpi4py import MPI @@ -232,33 +233,37 @@ def my_rhs(t, state): + eos.get_species_source_terms(cv)) def my_checkpoint(step, t, dt, state): - cv = split_conserved(dim, state) - reaction_rates = eos.get_production_rates(cv) - viz_fields = [("reaction_rates", reaction_rates)] - return sim_checkpoint(discr, visualizer, eos, q=state, - vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - constant_cfl=constant_cfl, comm=comm, - viz_fields=viz_fields) - - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) - except MirgecomException as ex: - error_state = True - current_step = ex.step - current_t = ex.t - current_state = ex.state + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, eos=eos, dim=dim) if not check_step(current_step, nviz): # If final step not an output step if rank == 0: @@ -267,12 +272,6 @@ def my_simhealthcheck(state, step, t, dt): dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - error_state = True - - if error_state: - raise ValueError("Simulation did not complete successfully.") - if __name__ == "__main__": logging.basicConfig(level=logging.INFO) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index dab984d07..44130fa1c 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -39,12 +39,12 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, + sim_visualization, sim_checkpoint, - sim_healthcheck, + sim_cfd_healthcheck, generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException -from mirgecom.fluid import split_conserved +from mirgecom.exceptions import StepperCrashError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -84,6 +84,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 + ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -133,28 +134,37 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - return sim_checkpoint(discr, visualizer, eos, q=state, - exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm) - - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) - except MirgecomException as ex: - current_step = ex.step - current_t = ex.t - current_state = ex.state + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, exittol=exittol, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, eos=eos, dim=dim) # if current_t != checkpoint_t: if rank == 0: @@ -163,9 +173,6 @@ def my_simhealthcheck(state, step, t, dt): dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - raise ValueError("Simulation exited abnormally") - if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 80ddc93c3..3b5bc921e 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -39,12 +39,12 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, + sim_visualization, sim_checkpoint, - sim_healthcheck, + sim_cfd_healthcheck, generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException -from mirgecom.fluid import split_conserved +from mirgecom.exceptions import StepperCrashError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -81,6 +81,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 + ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -91,7 +92,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): timestepper = rk4_step box_ll = -5.0 box_ur = 5.0 - error_state = 0 from mpi4py import MPI comm = MPI.COMM_WORLD @@ -154,31 +154,37 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - global checkpoint_t - checkpoint_t = t - return sim_checkpoint(discr, visualizer, eos, q=state, - exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm) - - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) - except MirgecomException as ex: - error_state = 1 - current_step = ex.step - current_t = ex.t - current_state = ex.state + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, exittol=exittol, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, eos=eos, dim=dim) if current_t != checkpoint_t: # This check because !overwrite if rank == 0: @@ -187,12 +193,6 @@ def my_simhealthcheck(state, step, t, dt): dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - error_state = 1 - - if error_state: - raise ValueError("Simulation did not complete successfully.") - if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 6b42aa16e..74f1e0366 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -40,12 +40,12 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - generate_and_distribute_mesh, + sim_visualization, sim_checkpoint, - sim_healthcheck + sim_cfd_healthcheck, + generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException -from mirgecom.fluid import split_conserved +from mirgecom.exceptions import StepperCrashError from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -92,6 +92,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 10 nviz = 10 + ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -155,29 +156,37 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - return sim_checkpoint(discr, visualizer, eos, q=state, - vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm) - - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) - - except MirgecomException as ex: - current_step = ex.step - current_t = ex.t - current_state = ex.state + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, exittol=exittol, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, eos=eos, dim=dim) # if current_t != checkpoint_t: if rank == 0: @@ -186,9 +195,6 @@ def my_simhealthcheck(state, step, t, dt): dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - raise ValueError("Simulation exited abnormally") - if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index faae596b5..a8dc1696b 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -40,12 +40,12 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, + sim_visualization, sim_checkpoint, - sim_healthcheck, + sim_cfd_healthcheck, generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException -from mirgecom.fluid import split_conserved +from mirgecom.exceptions import StepperCrashError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -78,6 +78,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 + ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -143,29 +144,37 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - return sim_checkpoint(discr, visualizer, eos, q=state, - exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm) - - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) - - except MirgecomException as ex: - current_step = ex.step - current_t = ex.t - current_state = ex.state + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, exittol=exittol, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, eos=eos, dim=dim) # if current_t != checkpoint_t: if rank == 0: @@ -174,9 +183,6 @@ def my_simhealthcheck(state, step, t, dt): dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - raise ValueError("Simulation exited abnormally") - if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 5df71bb97..84fb47a4d 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -38,12 +38,12 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, + sim_visualization, sim_checkpoint, - sim_healthcheck, + sim_cfd_healthcheck, generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException -from mirgecom.fluid import split_conserved +from mirgecom.exceptions import StepperCrashError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -81,6 +81,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 10 nviz = 10 + ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -132,29 +133,37 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - return sim_checkpoint(discr, visualizer, eos, q=state, - exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm) - - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) - - except MirgecomException as ex: - current_step = ex.step - current_t = ex.t - current_state = ex.state + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, exittol=exittol, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, eos=eos, dim=dim) # if current_t != checkpoint_t: if rank == 0: @@ -163,9 +172,6 @@ def my_simhealthcheck(state, step, t, dt): dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - raise ValueError("Simulation exited abnormally") - if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 9ee849062..5014582c2 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -40,12 +40,12 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, + sim_visualization, sim_checkpoint, - sim_healthcheck, + sim_cfd_healthcheck, generate_and_distribute_mesh ) -from mirgecom.exceptions import MirgecomException -from mirgecom.fluid import split_conserved +from mirgecom.exceptions import StepperCrashError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -106,6 +106,7 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal constant_cfl = False nstatus = 10 nviz = 10 + ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -179,42 +180,47 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - return sim_checkpoint(discr, visualizer, eos, q=state, - exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm, + try: + # Check the health of the simulation + sim_cfd_healthcheck(discr, eos, q=state, + ncheck=ncheck, step=step, t=t) + # Perform checkpointing + sim_checkpoint(discr, eos, q=state, + exact_soln=initializer, + step=step, t=t, dt=dt, + nstatus=nstatus, exittol=exittol, + constant_cfl=constant_cfl) + # Visualize + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=nviz, + vis_timer=vis_timer) + except StepperCrashError as err: + # Log crash error message + if rank == 0: + logger.info(str(err)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, state, eos, + visualizer, vizname=casename, + step=step, t=t, nviz=1, vis_timer=vis_timer) + raise err + return state + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_checkpoint, + get_timestep=get_timestep, state=current_state, + t=current_t, t_final=t_final, + logmgr=logmgr, eos=eos, dim=dim) - def my_simhealthcheck(state, step, t, dt): - cv = split_conserved(discr.dim, state) - return sim_healthcheck(discr, eos, q=state, - conserved_vars=cv, - step=step, t=t) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=my_simhealthcheck, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, logmgr=logmgr, eos=eos, - dim=dim) - - except MirgecomException as ex: - current_step = ex.step - current_t = ex.t - current_state = ex.state - - # if current_t != checkpoint_t: if rank == 0: logger.info("Checkpointing final state ...") my_checkpoint(current_step, t=current_t, dt=(current_t - checkpoint_t), state=current_state) - if current_t - t_final < 0: - raise ValueError("Simulation exited abnormally") - if logmgr: logmgr.close() elif use_profiling: diff --git a/mirgecom/exceptions.py b/mirgecom/exceptions.py index fb85af0e5..e53560b00 100644 --- a/mirgecom/exceptions.py +++ b/mirgecom/exceptions.py @@ -1,7 +1,6 @@ """Provide custom exceptions for use in callback routines. .. autoexception:: MirgecomException -.. autoexception:: ExactSolutionMismatch .. autoexception:: SimulationHealthError """ @@ -30,49 +29,18 @@ """ -class MirgecomException(Exception): - """Exception base class for mirgecom exceptions. - - .. attribute:: step - - A :class:`int` denoting the simulation step when the exception - was raised. - - .. attribute:: t - - A :class:`float` denoting the simulation time when the - exception was raised. - - .. attribute:: state - - The simulation state when the exception was raised. +class StepperCrashError(Exception): + """Exception base class for simulation exceptions. .. attribute:: message A :class:`str` describing the message for the exception. """ - def __init__(self, step, t, state, message): - """Record the simulation state on creation.""" - self.step = step - self.t = t - self.state = state + def __init__(self, message): self.message = message super().__init__(self.message) -class ExactSolutionMismatch(MirgecomException): - """Exception class for solution mismatch.""" - - def __init__(self, step, t, state): - super().__init__( - step, t, state, - message="Solution doesn't agree with analytic result." - ) - - -class SimulationHealthError(MirgecomException): +class SimulationHealthError(StepperCrashError): """Exception class for an unphysical simulation.""" - - def __init__(self, step, t, state, message): - super().__init__(step, t, state, message) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 99e57c6b9..7b36b7ed7 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -2,8 +2,9 @@ .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep +.. autofunction:: sim_visualization .. autofunction:: sim_checkpoint -.. autofunction:: sim_healthcheck +.. autofunction:: sim_cfd_healthcheck .. autofunction:: generate_and_distribute_mesh """ @@ -37,7 +38,7 @@ from meshmode.dof_array import thaw from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? -from mirgecom.exceptions import ExactSolutionMismatch, SimulationHealthError +from mirgecom.exceptions import SimulationHealthError logger = logging.getLogger(__name__) @@ -75,24 +76,72 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, return mydt -def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, - step=0, t=0, dt=0, cfl=1.0, nstatus=-1, nviz=-1, exittol=1e-16, - constant_cfl=False, comm=None, viz_fields=None, overwrite=False, - vis_timer=None): - """Check simulation health, status, viz dumps, and restart.""" - do_viz = check_step(step=step, interval=nviz) - do_status = check_step(step=step, interval=nstatus) - if do_viz is False and do_status is False: - return q - +def sim_visualization(discr, state, eos, visualizer, vizname, + step=0, t=0, nviz=-1, + exact_soln=None, viz_fields=None, + overwrite=False, vis_timer=None): + """Visualize the simulation fields.""" + from contextlib import nullcontext from mirgecom.fluid import split_conserved - cv = split_conserved(discr.dim, q) + from mirgecom.io import make_rank_fname, make_par_fname + + if not check_step(step=step, interval=nviz): + return + + cv = split_conserved(discr.dim, state) dependent_vars = eos.dependent_vars(cv) + io_fields = [ + ("cv", cv), + ("dv", dependent_vars) + ] + if exact_soln is not None: + actx = cv.mass.array_context + nodes = thaw(actx, discr.nodes()) + expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) + exact_list = [ + ("exact_soln", expected_state), + ] + io_fields.extend(exact_list) + + if viz_fields is not None: + io_fields.extend(viz_fields) + + comm = discr.mpi_communicator rank = 0 if comm is not None: rank = comm.Get_rank() + rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) + + if vis_timer: + ctm = vis_timer.start_sub_timer() + else: + ctm = nullcontext() + + with ctm: + visualizer.write_parallel_vtk_file( + comm, rank_fn, io_fields, + overwrite=overwrite, + par_manifest_filename=make_par_fname( + basename=vizname, step=step, t=t + ) + ) + + +def sim_checkpoint(discr, eos, q, exact_soln=None, + step=0, t=0, dt=0, cfl=1.0, nstatus=-1, exittol=1e-16, + constant_cfl=False): + """Check simulation status, and restart.""" + from mirgecom.fluid import split_conserved + + do_status = check_step(step=step, interval=nstatus) + if do_status is False: + return + + cv = split_conserved(discr.dim, q) + dependent_vars = eos.dependent_vars(cv) + maxerr = 0.0 if exact_soln is not None: actx = cv.mass.array_context @@ -102,33 +151,10 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, err_norms = [discr.norm(v, np.inf) for v in exp_resid] maxerr = max(err_norms) - if do_viz: - io_fields = [ - ("cv", cv), - ("dv", dependent_vars) - ] - if exact_soln is not None: - exact_list = [ - ("exact_soln", expected_state), - ] - io_fields.extend(exact_list) - if viz_fields is not None: - io_fields.extend(viz_fields) - - from mirgecom.io import make_rank_fname, make_par_fname - rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) - - from contextlib import nullcontext - - if vis_timer: - ctm = vis_timer.start_sub_timer() - else: - ctm = nullcontext() - - with ctm: - visualizer.write_parallel_vtk_file(comm, rank_fn, io_fields, - overwrite=overwrite, par_manifest_filename=make_par_fname( - basename=vizname, step=step, t=t)) + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() if do_status is True: # if constant_cfl is False: @@ -145,46 +171,80 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, logger.info(statusmesg) if maxerr > exittol: - raise ExactSolutionMismatch(step, t=t, state=q) + raise SimulationHealthError( + message=( + "Simulation exited abnormally; " + "solution doesn't agree with analytic result." + ) + ) + - return q +def sim_cfd_healthcheck(discr, eos, q, ncheck=-1, step=0, t=0): + """Check the global health of the fluids state *q. + Determine the health of a state by inspecting for unphyiscal + values of pressure and temperature. -def sim_healthcheck(discr, eos, q, conserved_vars, step=0, t=0): - """Check the health of the simulation by checking for unphysical values.""" + Parameters + ---------- + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + q + State array which expects at least the conserved quantities + (mass, energy, momentum) for the fluid at each point. For multi-component + fluids, the conserved quantities should include + (mass, energy, momentum, species_mass), where *species_mass* is a vector + of species masses. + ncheck: int + An integer denoting the frequency interval. + + Returns + ------- + None + """ + from mirgecom.fluid import split_conserved import grudge.op as op + if not check_step(step=step, interval=ncheck): + return + + cv = split_conserved(discr.dim, q) + # NOTE: Derived quantities are functions of the conserved variables. # Therefore is it sufficient to check for unphysical values of # temperature and pressure. - dependent_vars = eos.dependent_vars(conserved_vars) + dependent_vars = eos.dependent_vars(cv) # Check for NaN - if (np.isnan(op.nodal_sum(discr, "vol", dependent_vars.pressure)) - or np.isnan(op.nodal_sum(discr, "vol", dependent_vars.temperature))): + if (np.isnan(op.nodal_sum_loc(discr, "vol", dependent_vars.pressure)) + or np.isnan(op.nodal_sum_loc(discr, "vol", dependent_vars.temperature))): raise SimulationHealthError( - step, t=t, state=q, - message="Detected a NaN." + message=( + "Simulation exited abnormally; detected a NaN." + ) ) # Check for non-positivity - if (op.nodal_min(discr, "vol", dependent_vars.pressure) < 0 - or op.nodal_min(discr, "vol", dependent_vars.temperature) < 0): + if (op.nodal_min_loc(discr, "vol", dependent_vars.pressure) < 0 + or op.nodal_min_loc(discr, "vol", dependent_vars.temperature) < 0): raise SimulationHealthError( - step, t=t, state=q, - message="Found non-positive values for pressure or temperature." + message=( + "Simulation exited abnormally; " + "found non-positive values for pressure or temperature." + ) ) # Check for blow-up - if (op.norm(discr, dependent_vars.pressure, np.inf) == np.inf - or op.norm(discr, dependent_vars.temperature, np.inf) == np.inf): + if (op.nodal_sum_loc(discr, "vol", dependent_vars.pressure) == np.inf + or op.nodal_sum_loc(discr, "vol", dependent_vars.temperature) == np.inf): raise SimulationHealthError( - step, t=t, state=q, - message="Infinity-norm of derived quantities is not finite." + message=( + "Simulation exited abnormally; " + "derived quantities are not finite." + ) ) - return q - def generate_and_distribute_mesh(comm, generate_mesh): """Generate a mesh and distribute it among all ranks in *comm*. diff --git a/test/test_callbacks.py b/test/test_callbacks.py index ebdf12aa6..72d9ff82a 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -33,14 +33,14 @@ as pytest_generate_tests ) -from mirgecom.fluid import join_conserved, split_conserved +from mirgecom.fluid import join_conserved from mirgecom.eos import IdealSingleGas from grudge.eager import EagerDGDiscretization -def test_basic_healthcheck(actx_factory): - from mirgecom.simutil import sim_healthcheck +def test_basic_cfd_healthcheck(actx_factory): + from mirgecom.simutil import sim_cfd_healthcheck actx = actx_factory() nel_1d = 4 @@ -66,12 +66,11 @@ def test_basic_healthcheck(actx_factory): eos = IdealSingleGas() q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) - cv = split_conserved(dim, q) from mirgecom.exceptions import SimulationHealthError with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q, cv) + sim_cfd_healthcheck(discr, eos, q, ncheck=1) # Let's make another very bad state (nans) mass = 1*ones @@ -80,10 +79,9 @@ def test_basic_healthcheck(actx_factory): mom = mass * velocity q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) - cv = split_conserved(dim, q) with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q, cv) + sim_cfd_healthcheck(discr, eos, q, ncheck=1) # Let's make one last very bad state (inf) mass = 1*ones @@ -92,7 +90,6 @@ def test_basic_healthcheck(actx_factory): mom = mass * velocity q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) - cv = split_conserved(dim, q) with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q, cv) + sim_cfd_healthcheck(discr, eos, q, ncheck=1) From b6560793ba4dd23ac3395322d5aaf50beed29256 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sat, 5 Jun 2021 10:58:22 -0500 Subject: [PATCH 030/873] Fix exception docs --- mirgecom/exceptions.py | 5 ++--- mirgecom/simutil.py | 6 +----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/mirgecom/exceptions.py b/mirgecom/exceptions.py index e53560b00..fc1f1d363 100644 --- a/mirgecom/exceptions.py +++ b/mirgecom/exceptions.py @@ -1,6 +1,6 @@ """Provide custom exceptions for use in callback routines. -.. autoexception:: MirgecomException +.. autoexception:: StepperCrashError .. autoexception:: SimulationHealthError """ @@ -38,8 +38,7 @@ class StepperCrashError(Exception): """ def __init__(self, message): - self.message = message - super().__init__(self.message) + super().__init__(message) class SimulationHealthError(StepperCrashError): diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 7b36b7ed7..108a1d588 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -180,7 +180,7 @@ def sim_checkpoint(discr, eos, q, exact_soln=None, def sim_cfd_healthcheck(discr, eos, q, ncheck=-1, step=0, t=0): - """Check the global health of the fluids state *q. + """Check the global health of the fluids state *q*. Determine the health of a state by inspecting for unphyiscal values of pressure and temperature. @@ -198,10 +198,6 @@ def sim_cfd_healthcheck(discr, eos, q, ncheck=-1, step=0, t=0): of species masses. ncheck: int An integer denoting the frequency interval. - - Returns - ------- - None """ from mirgecom.fluid import split_conserved import grudge.op as op From 2acdf7377238bee3b25d6dbf45b892cae5ad5b58 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sat, 5 Jun 2021 11:37:07 -0500 Subject: [PATCH 031/873] Expand documentation of callbacks --- mirgecom/simutil.py | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 108a1d588..3aafadbe4 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -80,7 +80,28 @@ def sim_visualization(discr, state, eos, visualizer, vizname, step=0, t=0, nviz=-1, exact_soln=None, viz_fields=None, overwrite=False, vis_timer=None): - """Visualize the simulation fields.""" + """Visualize the simulation fields. + + Write VTK output of the conserved state and and specified derived + quantities *viz_fields*. + + Parameters + ---------- + state + State array which expects at least the conserved quantities + (mass, energy, momentum) for the fluid at each point. For multi-component + fluids, the conserved quantities should include + (mass, energy, momentum, species_mass), where *species_mass* is a vector + of species masses. + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + visualizer: + A :class:`meshmode.discretization.visualization.Visualizer` + VTK output object. + nviz: int + An integer denoting the frequency interval. + """ from contextlib import nullcontext from mirgecom.fluid import split_conserved from mirgecom.io import make_rank_fname, make_par_fname @@ -132,7 +153,25 @@ def sim_visualization(discr, state, eos, visualizer, vizname, def sim_checkpoint(discr, eos, q, exact_soln=None, step=0, t=0, dt=0, cfl=1.0, nstatus=-1, exittol=1e-16, constant_cfl=False): - """Check simulation status, and restart.""" + """Checkpoint the simulation status. + + Checkpoints the simulation status by reporting relevant diagnostic + quantities, such as pressure/temperature. + + Parameters + ---------- + q + State array which expects at least the conserved quantities + (mass, energy, momentum) for the fluid at each point. For multi-component + fluids, the conserved quantities should include + (mass, energy, momentum, species_mass), where *species_mass* is a vector + of species masses. + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + nstatus: int + An integer denoting the frequency interval. + """ from mirgecom.fluid import split_conserved do_status = check_step(step=step, interval=nstatus) From 54056043484661dc0d70173400c4c34c41b8298d Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sat, 5 Jun 2021 16:34:32 -0500 Subject: [PATCH 032/873] Simplify sim_checkpoint and modularize callbacks --- examples/autoignition-mpi.py | 25 +-- examples/lump-mpi.py | 26 +-- examples/mixture-mpi.py | 26 +-- examples/pulse-mpi.py | 26 +-- examples/scalar-lump-mpi.py | 26 +-- examples/sod-mpi.py | 26 +-- examples/vortex-mpi.py | 28 ++-- mirgecom/simutil.py | 310 ++++++++++++++++++++--------------- test/test_callbacks.py | 8 +- 9 files changed, 282 insertions(+), 219 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5881651ea..67d10a5cc 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -41,7 +41,7 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, check_step, generate_and_distribute_mesh ) @@ -233,29 +233,32 @@ def my_rhs(t, state): + eos.get_species_source_terms(cv)) def my_checkpoint(step, t, dt, state): + cv = split_conserved(dim, state) + reaction_rates = eos.get_production_rates(cv) + viz_fields = [("reaction_rates", reaction_rates)] try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz) + step=step, t=t, freq=nviz, + viz_fields=viz_fields) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1) + step=step, t=t, freq=1, + viz_fields=viz_fields) raise err return state diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 44130fa1c..7b24287f9 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -41,7 +41,8 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, + compare_with_analytic_solution, generate_and_distribute_mesh ) from mirgecom.exceptions import StepperCrashError @@ -136,27 +137,30 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, exittol=exittol, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) + # Compare with analytic result + compare_with_analytic_solution(discr, eos, state, + exact_soln=initializer, + step=step, t=t, freq=nstatus, + exittol=exittol) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz) + step=step, t=t, freq=nviz) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1) + step=step, t=t, freq=1) raise err return state diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 3b5bc921e..33e3c2374 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -41,7 +41,8 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, + compare_with_analytic_solution, generate_and_distribute_mesh ) from mirgecom.exceptions import StepperCrashError @@ -156,27 +157,30 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, exittol=exittol, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) + # Compare with analytic result + compare_with_analytic_solution(discr, eos, state, + exact_soln=initializer, + step=step, t=t, freq=nstatus, + exittol=exittol) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz) + step=step, t=t, freq=nviz) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1) + step=step, t=t, freq=1) raise err return state diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 74f1e0366..114dce3c4 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -42,7 +42,8 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, + compare_with_analytic_solution, generate_and_distribute_mesh ) from mirgecom.exceptions import StepperCrashError @@ -158,27 +159,30 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, exittol=exittol, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) + # Compare with analytic result + compare_with_analytic_solution(discr, eos, state, + exact_soln=initializer, + step=step, t=t, freq=nstatus, + exittol=exittol) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz) + step=step, t=t, freq=nviz) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1) + step=step, t=t, freq=1) raise err return state diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index a8dc1696b..2fb8bac61 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -42,7 +42,8 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, + compare_with_analytic_solution, generate_and_distribute_mesh ) from mirgecom.exceptions import StepperCrashError @@ -146,27 +147,30 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, exittol=exittol, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) + # Compare with analytic result + compare_with_analytic_solution(discr, eos, state, + exact_soln=initializer, + step=step, t=t, freq=nstatus, + exittol=exittol) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz) + step=step, t=t, freq=nviz) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1) + step=step, t=t, freq=1) raise err return state diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 84fb47a4d..3cd2e8273 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -40,7 +40,8 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, + compare_with_analytic_solution, generate_and_distribute_mesh ) from mirgecom.exceptions import StepperCrashError @@ -135,27 +136,30 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, exittol=exittol, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) + # Compare with analytic result + compare_with_analytic_solution(discr, eos, state, + exact_soln=initializer, + step=step, t=t, freq=nstatus, + exittol=exittol) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz) + step=step, t=t, freq=nviz) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1) + step=step, t=t, freq=1) raise err return state diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 5014582c2..a6da18065 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -42,7 +42,8 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - sim_cfd_healthcheck, + cfd_healthcheck, + compare_with_analytic_solution, generate_and_distribute_mesh ) from mirgecom.exceptions import StepperCrashError @@ -182,29 +183,30 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - sim_cfd_healthcheck(discr, eos, q=state, - ncheck=ncheck, step=step, t=t) + cfd_healthcheck(discr, eos, state, + step=step, t=t, freq=ncheck) # Perform checkpointing - sim_checkpoint(discr, eos, q=state, - exact_soln=initializer, - step=step, t=t, dt=dt, - nstatus=nstatus, exittol=exittol, + sim_checkpoint(discr, eos, state, + step=step, t=t, dt=dt, freq=nstatus, constant_cfl=constant_cfl) + # Compare with analytic result + compare_with_analytic_solution(discr, eos, state, + exact_soln=initializer, + step=step, t=t, freq=nstatus, + exittol=exittol) # Visualize - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=nviz, - vis_timer=vis_timer) + step=step, t=t, freq=nviz) except StepperCrashError as err: # Log crash error message if rank == 0: logger.info(str(err)) logger.info("Visualizing crashed state ...") # Write out crashed field - sim_visualization(discr, state, eos, + sim_visualization(discr, eos, state, visualizer, vizname=casename, - step=step, t=t, nviz=1, - vis_timer=vis_timer) + step=step, t=t, freq=1) raise err return state diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 3aafadbe4..18c69df8d 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -1,10 +1,22 @@ """Provide some utilities for building simulation applications. +General utilities +----------------- + .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep + +Diagnostic callbacks +-------------------- + .. autofunction:: sim_visualization .. autofunction:: sim_checkpoint -.. autofunction:: sim_cfd_healthcheck +.. autofunction:: cfd_healthcheck +.. autofunction:: compare_with_analytic_solution + +Mesh utilities +-------------- + .. autofunction:: generate_and_distribute_mesh """ @@ -76,8 +88,8 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, return mydt -def sim_visualization(discr, state, eos, visualizer, vizname, - step=0, t=0, nviz=-1, +def sim_visualization(discr, eos, state, visualizer, vizname, + step=0, t=0, freq=-1, exact_soln=None, viz_fields=None, overwrite=False, vis_timer=None): """Visualize the simulation fields. @@ -87,72 +99,70 @@ def sim_visualization(discr, state, eos, visualizer, vizname, Parameters ---------- + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state. state State array which expects at least the conserved quantities (mass, energy, momentum) for the fluid at each point. For multi-component fluids, the conserved quantities should include (mass, energy, momentum, species_mass), where *species_mass* is a vector of species masses. - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. visualizer: A :class:`meshmode.discretization.visualization.Visualizer` VTK output object. - nviz: int - An integer denoting the frequency interval. + freq: int + An integer denoting the step frequency. """ - from contextlib import nullcontext - from mirgecom.fluid import split_conserved - from mirgecom.io import make_rank_fname, make_par_fname - - if not check_step(step=step, interval=nviz): - return - - cv = split_conserved(discr.dim, state) - dependent_vars = eos.dependent_vars(cv) - - io_fields = [ - ("cv", cv), - ("dv", dependent_vars) - ] - if exact_soln is not None: - actx = cv.mass.array_context - nodes = thaw(actx, discr.nodes()) - expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) - exact_list = [ - ("exact_soln", expected_state), - ] - io_fields.extend(exact_list) + if check_step(step=step, interval=freq): - if viz_fields is not None: - io_fields.extend(viz_fields) + from contextlib import nullcontext + from mirgecom.fluid import split_conserved + from mirgecom.io import make_rank_fname, make_par_fname - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() + cv = split_conserved(discr.dim, state) + dependent_vars = eos.dependent_vars(cv) - rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) - - if vis_timer: - ctm = vis_timer.start_sub_timer() - else: - ctm = nullcontext() - - with ctm: - visualizer.write_parallel_vtk_file( - comm, rank_fn, io_fields, - overwrite=overwrite, - par_manifest_filename=make_par_fname( - basename=vizname, step=step, t=t + io_fields = [ + ("cv", cv), + ("dv", dependent_vars) + ] + if exact_soln is not None: + actx = cv.mass.array_context + nodes = thaw(actx, discr.nodes()) + expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) + exact_list = [ + ("exact_soln", expected_state), + ] + io_fields.extend(exact_list) + + if viz_fields is not None: + io_fields.extend(viz_fields) + + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() + + rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) + + if vis_timer: + ctm = vis_timer.start_sub_timer() + else: + ctm = nullcontext() + + with ctm: + visualizer.write_parallel_vtk_file( + comm, rank_fn, io_fields, + overwrite=overwrite, + par_manifest_filename=make_par_fname( + basename=vizname, step=step, t=t + ) ) - ) -def sim_checkpoint(discr, eos, q, exact_soln=None, - step=0, t=0, dt=0, cfl=1.0, nstatus=-1, exittol=1e-16, - constant_cfl=False): +def sim_checkpoint(discr, eos, state, step=0, t=0, dt=0, + cfl=1.0, freq=-1, constant_cfl=False): """Checkpoint the simulation status. Checkpoints the simulation status by reporting relevant diagnostic @@ -160,66 +170,42 @@ def sim_checkpoint(discr, eos, q, exact_soln=None, Parameters ---------- - q + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state. + state State array which expects at least the conserved quantities (mass, energy, momentum) for the fluid at each point. For multi-component fluids, the conserved quantities should include (mass, energy, momentum, species_mass), where *species_mass* is a vector of species masses. - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. - nstatus: int - An integer denoting the frequency interval. + freq: int + An integer denoting the step frequency. """ - from mirgecom.fluid import split_conserved - - do_status = check_step(step=step, interval=nstatus) - if do_status is False: - return + if check_step(step=step, interval=freq): - cv = split_conserved(discr.dim, q) - dependent_vars = eos.dependent_vars(cv) + from mirgecom.fluid import split_conserved - maxerr = 0.0 - if exact_soln is not None: - actx = cv.mass.array_context - nodes = thaw(actx, discr.nodes()) - expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) - exp_resid = q - expected_state - err_norms = [discr.norm(v, np.inf) for v in exp_resid] - maxerr = max(err_norms) - - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() - - if do_status is True: # if constant_cfl is False: - # current_cfl = get_inviscid_cfl(discr=discr, q=q, + # current_cfl = get_inviscid_cfl(discr=discr, q=state, # eos=eos, dt=dt) - statusmesg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=cfl, dependent_vars=dependent_vars) - if exact_soln is not None: - statusmesg += ( - "\n------- errors=" - + ", ".join("%.3g" % en for en in err_norms)) - if rank == 0: - logger.info(statusmesg) + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() - if maxerr > exittol: - raise SimulationHealthError( - message=( - "Simulation exited abnormally; " - "solution doesn't agree with analytic result." - ) - ) + cv = split_conserved(discr.dim, state) + dependent_vars = eos.dependent_vars(cv) + msg = make_status_message(discr=discr, + t=t, step=step, dt=dt, cfl=cfl, + dependent_vars=dependent_vars) + if rank == 0: + logger.info(msg) -def sim_cfd_healthcheck(discr, eos, q, ncheck=-1, step=0, t=0): - """Check the global health of the fluids state *q*. +def cfd_healthcheck(discr, eos, state, step=0, t=0, freq=-1): + """Check the global health of the fluids state. Determine the health of a state by inspecting for unphyiscal values of pressure and temperature. @@ -228,57 +214,109 @@ def sim_cfd_healthcheck(discr, eos, q, ncheck=-1, step=0, t=0): ---------- eos: mirgecom.eos.GasEOS Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. - q + returning pressure and temperature as a function of the state. + state State array which expects at least the conserved quantities (mass, energy, momentum) for the fluid at each point. For multi-component fluids, the conserved quantities should include (mass, energy, momentum, species_mass), where *species_mass* is a vector of species masses. - ncheck: int - An integer denoting the frequency interval. + freq: int + An integer denoting the step frequency. """ - from mirgecom.fluid import split_conserved - import grudge.op as op + if check_step(step=step, interval=freq): + + from mirgecom.fluid import split_conserved + import grudge.op as op + + # NOTE: Derived quantities are functions of the conserved variables. + # Therefore is it sufficient to check for unphysical values of + # temperature and pressure. + cv = split_conserved(discr.dim, state) + dependent_vars = eos.dependent_vars(cv) + pressure = dependent_vars.pressure + temperature = dependent_vars.temperature + + # Check for NaN + if (np.isnan(op.nodal_sum_loc(discr, "vol", pressure)) + or np.isnan(op.nodal_sum_loc(discr, "vol", temperature))): + raise SimulationHealthError( + message=("Simulation exited abnormally; detected a NaN.") + ) - if not check_step(step=step, interval=ncheck): - return + # Check for non-positivity + if (op.nodal_min_loc(discr, "vol", pressure) < 0 + or op.nodal_min_loc(discr, "vol", temperature) < 0): + raise SimulationHealthError( + message=("Simulation exited abnormally; " + "found non-positive values for pressure or temperature.") + ) - cv = split_conserved(discr.dim, q) + # Check for blow-up + if (op.nodal_sum_loc(discr, "vol", pressure) == np.inf + or op.nodal_sum_loc(discr, "vol", temperature) == np.inf): + raise SimulationHealthError( + message=("Simulation exited abnormally; " + "derived quantities are not finite.") + ) - # NOTE: Derived quantities are functions of the conserved variables. - # Therefore is it sufficient to check for unphysical values of - # temperature and pressure. - dependent_vars = eos.dependent_vars(cv) - # Check for NaN - if (np.isnan(op.nodal_sum_loc(discr, "vol", dependent_vars.pressure)) - or np.isnan(op.nodal_sum_loc(discr, "vol", dependent_vars.temperature))): - raise SimulationHealthError( - message=( - "Simulation exited abnormally; detected a NaN." - ) - ) +def compare_with_analytic_solution(discr, eos, state, exact_soln, + step=0, t=0, freq=-1, exittol=None): + """Compute the infinite norm of the problem residual. - # Check for non-positivity - if (op.nodal_min_loc(discr, "vol", dependent_vars.pressure) < 0 - or op.nodal_min_loc(discr, "vol", dependent_vars.temperature) < 0): - raise SimulationHealthError( - message=( - "Simulation exited abnormally; " - "found non-positive values for pressure or temperature." - ) + Computes the infinite norm of the residual with respect to a specified + exact solution *exact_soln*. If the error is larger than *exittol*, + raises a :class:`mirgecom.exceptions.SimulationHealthError`. + + Parameters + ---------- + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state. + state + State array which expects at least the conserved quantities + (mass, energy, momentum) for the fluid at each point. For multi-component + fluids, the conserved quantities should include + (mass, energy, momentum, species_mass), where *species_mass* is a vector + of species masses. + exact_soln: + A callable for the exact solution with signature: + ``exact_soln(x_vec, t, eos)`` where `x_vec` are the nodes, + `t` is time, and `eos` is a :class:`mirgecom.eos.GasEOS`. + freq: int + An integer denoting the step frequency. + """ + if check_step(step=step, interval=freq): + + if exittol is None: + exittol = 1e-16 + + actx = discr._setup_actx + nodes = thaw(actx, discr.nodes()) + expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) + exp_resid = state - expected_state + norms = [discr.norm(v, np.inf) for v in exp_resid] + + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() + + statusmesg = ( + f"Errors: {step=} {t=}\n" + f"------- errors = " + + ", ".join("%.3g" % err_norm for err_norm in norms) ) - # Check for blow-up - if (op.nodal_sum_loc(discr, "vol", dependent_vars.pressure) == np.inf - or op.nodal_sum_loc(discr, "vol", dependent_vars.temperature) == np.inf): - raise SimulationHealthError( - message=( - "Simulation exited abnormally; " - "derived quantities are not finite." + if rank == 0: + logger.info(statusmesg) + + if max(norms) > exittol: + raise SimulationHealthError( + message=("Simulation exited abnormally; " + "solution doesn't agree with analytic result.") ) - ) def generate_and_distribute_mesh(comm, generate_mesh): diff --git a/test/test_callbacks.py b/test/test_callbacks.py index 72d9ff82a..caad9542b 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -40,7 +40,7 @@ def test_basic_cfd_healthcheck(actx_factory): - from mirgecom.simutil import sim_cfd_healthcheck + from mirgecom.simutil import cfd_healthcheck actx = actx_factory() nel_1d = 4 @@ -70,7 +70,7 @@ def test_basic_cfd_healthcheck(actx_factory): from mirgecom.exceptions import SimulationHealthError with pytest.raises(SimulationHealthError): - sim_cfd_healthcheck(discr, eos, q, ncheck=1) + cfd_healthcheck(discr, eos, q, freq=1) # Let's make another very bad state (nans) mass = 1*ones @@ -81,7 +81,7 @@ def test_basic_cfd_healthcheck(actx_factory): q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) with pytest.raises(SimulationHealthError): - sim_cfd_healthcheck(discr, eos, q, ncheck=1) + cfd_healthcheck(discr, eos, q, freq=1) # Let's make one last very bad state (inf) mass = 1*ones @@ -92,4 +92,4 @@ def test_basic_cfd_healthcheck(actx_factory): q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) with pytest.raises(SimulationHealthError): - sim_cfd_healthcheck(discr, eos, q, ncheck=1) + cfd_healthcheck(discr, eos, q, freq=1) From ca7c37b608679dbca6f25ce3cde362e8880f69a7 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 6 Jun 2021 00:07:59 -0500 Subject: [PATCH 033/873] Update steppers --- mirgecom/steppers.py | 72 +++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 0ca3af0b6..b069f38e5 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -5,7 +5,7 @@ """ __copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees +Copyright (C) 2020-21 University of Illinois Board of Trustees """ __license__ = """ @@ -32,11 +32,12 @@ from mirgecom.logging_quantities import set_sim_state -def advance_state(rhs, timestepper, get_timestep, - state, t_final, t=0.0, istep=0, - pre_step_callback=None, - post_step_callback=None, - logmgr=None, eos=None, dim=None): +def _advance_state_stepper_func(rhs, timestepper, get_timestep, + state, t_final, + t=0.0, istep=0, + pre_step_callback=None, + post_step_callback=None, + logmgr=None, eos=None, dim=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -47,7 +48,8 @@ def advance_state(rhs, timestepper, get_timestep, a call with signature ``rhs(t, state)``. timestepper Function that advances the state from t=time to t=(time+dt), and - returns the advanced state. + returns the advanced state. Has a call with signature + ``timestepper(state, t, dt, rhs)``. get_timestep Function that should return dt for the next step. This interface allows user-defined adaptive timestepping. A negative return value indicated that @@ -110,9 +112,13 @@ def advance_state(rhs, timestepper, get_timestep, return istep, t, state -def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, - state, t_final, component_id="state", t=0.0, istep=0, - logmgr=None, eos=None, dim=None): +def _advance_state_leap(rhs, timestepper, get_timestep, + state, t_final, + component_id="state", + t=0.0, istep=0, + pre_step_callback=None, + post_step_callback=None, + logmgr=None, eos=None, dim=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. Parameters @@ -123,10 +129,6 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, a call with signature ``rhs(t, state)``. timestepper An instance of :class:`leap.MethodBuilder`. - checkpoint - Function is user-defined and can be used to preform simulation status - reporting, viz, and restart i/o. A non-zero return code from this function - indicates that this function should stop gracefully. get_timestep Function that should return dt for the next step. This interface allows user-defined adaptive timestepping. A negative return value indicated that @@ -192,6 +194,7 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, t=t, dt=dt) istep += 1 + if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) @@ -239,9 +242,12 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, - component_id="state", t=0.0, istep=0, logmgr=None, - eos=None, dim=None): +def advance_state(rhs, timestepper, get_timestep, state, t_final, + component_id="state", + t=0.0, istep=0, + pre_step_callback=None, + post_step_callback=None, + logmgr=None, eos=None, dim=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -258,10 +264,6 @@ def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, responsible for generating timestepper code from the method instructions before using it, as well as providing context in the form of the state to be integrated, the initial time and timestep, and the RHS function. - checkpoint - Function is user-defined and can be used to preform simulation status - reporting, viz, and restart i/o. A non-zero return code from this function - indicates that this function should stop gracefully. component_id State id (required input for leap method generation) get_timestep @@ -308,17 +310,25 @@ def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, if leap_timestepper: (current_step, current_t, current_state) = \ - _advance_state_leap(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, component_id=component_id, - istep=istep, logmgr=logmgr, eos=eos, dim=dim) + _advance_state_leap( + rhs=rhs, timestepper=timestepper, + get_timestep=get_timestep, state=state, + t=t, t_final=t_final, + pre_step_callback=pre_step_callback, + post_step_callback=post_step_callback, + component_id=component_id, + istep=istep, logmgr=logmgr, eos=eos, dim=dim + ) else: (current_step, current_t, current_state) = \ - _advance_state_stepper_func(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, istep=istep, - logmgr=logmgr, eos=eos, dim=dim) + _advance_state_stepper_func( + rhs=rhs, timestepper=timestepper, + get_timestep=get_timestep, state=state, + t=t, t_final=t_final, + pre_step_callback=pre_step_callback, + post_step_callback=post_step_callback, + istep=istep, + logmgr=logmgr, eos=eos, dim=dim + ) return current_step, current_t, current_state From da65cd2e277209f6da18fb54286a650c25d294dc Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 6 Jun 2021 00:27:03 -0500 Subject: [PATCH 034/873] Write short test for comparison callback --- test/test_callbacks.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/test_callbacks.py b/test/test_callbacks.py index caad9542b..49db3eb63 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -93,3 +93,36 @@ def test_basic_cfd_healthcheck(actx_factory): with pytest.raises(SimulationHealthError): cfd_healthcheck(discr, eos, q, freq=1) + + +def test_analytic_comparison(actx_factory): + from mirgecom.initializers import Vortex2D + from mirgecom.simutil import compare_with_analytic_solution + + actx = actx_factory() + nel_1d = 4 + dim = 2 + + from meshmode.mesh.generation import generate_regular_rect_mesh + + mesh = generate_regular_rect_mesh( + a=(1.0,) * dim, b=(2.0,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + order = 2 + discr = EagerDGDiscretization(actx, mesh, order=order) + nodes = thaw(discr.nodes(), actx) + zeros = discr.zeros(actx) + ones = zeros + 1.0 + eos = IdealSingleGas() + mass = ones + energy = ones + velocity = 2 * nodes + mom = mass * velocity + + q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + + from mirgecom.exceptions import SimulationHealthError + + with pytest.raises(SimulationHealthError): + compare_with_analytic_solution(discr, eos, q, Vortex2D(), freq=1) From 63c9a8068e0c152cf8fafdae3af2083cbb5d8972 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 7 Jun 2021 10:23:04 -0500 Subject: [PATCH 035/873] Update to new dt API since merge with #368 --- examples/nsmix-mpi.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 7797bceaa..08b223287 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -238,8 +238,9 @@ def get_timestep(state): next_dt = current_dt t_end = t_final if constant_cfl is True: - inviscid_dt = get_inviscid_timestep(discr=discr, eos=eos, - cfl=current_cfl, q=state) + inviscid_dt = ( + current_cfl * get_inviscid_timestep(discr=discr, eos=eos, q=state) + ) viscous_dt = get_viscous_timestep(discr=discr, eos=eos, transport_model=transport_model, cfl=current_cfl, q=state) From ebb3f9d27a007da05f017e09898d8ce719f0e86a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 7 Jun 2021 11:20:22 -0500 Subject: [PATCH 036/873] Fix "indento" that makes doublemach hang at the end! --- examples/doublemach-mpi.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 901bbadd1..df513336d 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -250,12 +250,13 @@ def my_checkpoint(step, t, dt, state): # if current_t != checkpoint_t: if rank == 0: logger.info("Checkpointing final state ...") - my_checkpoint( - current_step, - t=current_t, - dt=(current_t - checkpoint_t), - state=current_state, - ) + + my_checkpoint( + current_step, + t=current_t, + dt=(current_t - checkpoint_t), + state=current_state, + ) if current_t - t_final < 0: raise ValueError("Simulation exited abnormally") From 2523fbdfa581c0c86f0e4d21691aa345a64d185b Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Mon, 7 Jun 2021 16:47:37 -0500 Subject: [PATCH 037/873] Renaming: {cfd_healthcheck,StepperCrashError} -> {sim_healthcheck,SynchronizedError} --- examples/autoignition-mpi.py | 8 ++++---- examples/lump-mpi.py | 8 ++++---- examples/mixture-mpi.py | 8 ++++---- examples/pulse-mpi.py | 8 ++++---- examples/scalar-lump-mpi.py | 8 ++++---- examples/sod-mpi.py | 8 ++++---- examples/vortex-mpi.py | 8 ++++---- mirgecom/exceptions.py | 10 +++++----- mirgecom/simutil.py | 4 ++-- test/test_callbacks.py | 8 ++++---- 10 files changed, 39 insertions(+), 39 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 67d10a5cc..6c65d28ba 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -41,11 +41,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, check_step, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -238,7 +238,7 @@ def my_checkpoint(step, t, dt, state): viz_fields = [("reaction_rates", reaction_rates)] try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -249,7 +249,7 @@ def my_checkpoint(step, t, dt, state): visualizer, vizname=casename, step=step, t=t, freq=nviz, viz_fields=viz_fields) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 7b24287f9..2e1e9cb88 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -41,11 +41,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -137,7 +137,7 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -152,7 +152,7 @@ def my_checkpoint(step, t, dt, state): sim_visualization(discr, eos, state, visualizer, vizname=casename, step=step, t=t, freq=nviz) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 33e3c2374..871897c53 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -41,11 +41,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -157,7 +157,7 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -172,7 +172,7 @@ def my_checkpoint(step, t, dt, state): sim_visualization(discr, eos, state, visualizer, vizname=casename, step=step, t=t, freq=nviz) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 114dce3c4..54012c178 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -42,11 +42,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -159,7 +159,7 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -174,7 +174,7 @@ def my_checkpoint(step, t, dt, state): sim_visualization(discr, eos, state, visualizer, vizname=casename, step=step, t=t, freq=nviz) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 2fb8bac61..be0586937 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -42,11 +42,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -147,7 +147,7 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -162,7 +162,7 @@ def my_checkpoint(step, t, dt, state): sim_visualization(discr, eos, state, visualizer, vizname=casename, step=step, t=t, freq=nviz) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 3cd2e8273..59d2415e4 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -40,11 +40,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -136,7 +136,7 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -151,7 +151,7 @@ def my_checkpoint(step, t, dt, state): sim_visualization(discr, eos, state, visualizer, vizname=casename, step=step, t=t, freq=nviz) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index a6da18065..9fbe01a7a 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -42,11 +42,11 @@ inviscid_sim_timestep, sim_visualization, sim_checkpoint, - cfd_healthcheck, + sim_healthcheck, compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import StepperCrashError +from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -183,7 +183,7 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): try: # Check the health of the simulation - cfd_healthcheck(discr, eos, state, + sim_healthcheck(discr, eos, state, step=step, t=t, freq=ncheck) # Perform checkpointing sim_checkpoint(discr, eos, state, @@ -198,7 +198,7 @@ def my_checkpoint(step, t, dt, state): sim_visualization(discr, eos, state, visualizer, vizname=casename, step=step, t=t, freq=nviz) - except StepperCrashError as err: + except SynchronizedError as err: # Log crash error message if rank == 0: logger.info(str(err)) diff --git a/mirgecom/exceptions.py b/mirgecom/exceptions.py index fc1f1d363..8d43c81a1 100644 --- a/mirgecom/exceptions.py +++ b/mirgecom/exceptions.py @@ -1,6 +1,6 @@ """Provide custom exceptions for use in callback routines. -.. autoexception:: StepperCrashError +.. autoexception:: SynchronizedError .. autoexception:: SimulationHealthError """ @@ -29,17 +29,17 @@ """ -class StepperCrashError(Exception): - """Exception base class for simulation exceptions. +class SynchronizedError(Exception): + """Exception base class which must be globally synchronized. .. attribute:: message - A :class:`str` describing the message for the exception. + A :class:`str` describing the message for the global exception. """ def __init__(self, message): super().__init__(message) -class SimulationHealthError(StepperCrashError): +class SimulationHealthError(SynchronizedError): """Exception class for an unphysical simulation.""" diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 18c69df8d..7e5d52dbb 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -11,7 +11,7 @@ .. autofunction:: sim_visualization .. autofunction:: sim_checkpoint -.. autofunction:: cfd_healthcheck +.. autofunction:: sim_healthcheck .. autofunction:: compare_with_analytic_solution Mesh utilities @@ -204,7 +204,7 @@ def sim_checkpoint(discr, eos, state, step=0, t=0, dt=0, logger.info(msg) -def cfd_healthcheck(discr, eos, state, step=0, t=0, freq=-1): +def sim_healthcheck(discr, eos, state, step=0, t=0, freq=-1): """Check the global health of the fluids state. Determine the health of a state by inspecting for unphyiscal diff --git a/test/test_callbacks.py b/test/test_callbacks.py index 49db3eb63..ffbb43182 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -40,7 +40,7 @@ def test_basic_cfd_healthcheck(actx_factory): - from mirgecom.simutil import cfd_healthcheck + from mirgecom.simutil import sim_healthcheck actx = actx_factory() nel_1d = 4 @@ -70,7 +70,7 @@ def test_basic_cfd_healthcheck(actx_factory): from mirgecom.exceptions import SimulationHealthError with pytest.raises(SimulationHealthError): - cfd_healthcheck(discr, eos, q, freq=1) + sim_healthcheck(discr, eos, q, freq=1) # Let's make another very bad state (nans) mass = 1*ones @@ -81,7 +81,7 @@ def test_basic_cfd_healthcheck(actx_factory): q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) with pytest.raises(SimulationHealthError): - cfd_healthcheck(discr, eos, q, freq=1) + sim_healthcheck(discr, eos, q, freq=1) # Let's make one last very bad state (inf) mass = 1*ones @@ -92,7 +92,7 @@ def test_basic_cfd_healthcheck(actx_factory): q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) with pytest.raises(SimulationHealthError): - cfd_healthcheck(discr, eos, q, freq=1) + sim_healthcheck(discr, eos, q, freq=1) def test_analytic_comparison(actx_factory): From 8284d8aadb2cd6685618649f56513c0a6a5adc36 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Mon, 7 Jun 2021 18:05:33 -0500 Subject: [PATCH 038/873] Simplify drivers; move exception handling into sim_checkpoint --- examples/autoignition-mpi.py | 34 +--- examples/lump-mpi.py | 36 +---- examples/mixture-mpi.py | 36 +---- examples/pulse-mpi.py | 36 +---- examples/scalar-lump-mpi.py | 36 +---- examples/sod-mpi.py | 36 +---- examples/vortex-mpi.py | 36 +---- mirgecom/simutil.py | 304 ++++++++++++++++++++--------------- 8 files changed, 201 insertions(+), 353 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 6c65d28ba..2a6a00ffe 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -39,13 +39,10 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, check_step, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.fluid import split_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -85,7 +82,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 5 - ncheck = 1 rank = 0 checkpoint_t = current_t current_step = 0 @@ -236,30 +232,12 @@ def my_checkpoint(step, t, dt, state): cv = split_conserved(dim, state) reaction_rates = eos.get_production_rates(cv) viz_fields = [("reaction_rates", reaction_rates)] - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz, - viz_fields=viz_fields) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1, - viz_fields=viz_fields) - raise err + # Perform status checkpointing + sim_checkpoint(discr, visualizer, eos, q=state, + vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + constant_cfl=constant_cfl, + viz_fields=viz_fields) return state current_step, current_t, current_state = \ diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 2e1e9cb88..54229eaab 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -39,13 +39,9 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, - compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -85,7 +81,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 - ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -135,33 +130,10 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Compare with analytic result - compare_with_analytic_solution(discr, eos, state, - exact_soln=initializer, - step=step, t=t, freq=nstatus, - exittol=exittol) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1) - raise err + sim_checkpoint(discr, visualizer, eos, q=state, + exact_soln=initializer, vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + exittol=exittol, constant_cfl=constant_cfl) return state current_step, current_t, current_state = \ diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 871897c53..28ee4033b 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -39,13 +39,9 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, - compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -82,7 +78,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 - ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -155,33 +150,10 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Compare with analytic result - compare_with_analytic_solution(discr, eos, state, - exact_soln=initializer, - step=step, t=t, freq=nstatus, - exittol=exittol) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1) - raise err + sim_checkpoint(discr, visualizer, eos, q=state, + exact_soln=initializer, vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + exittol=exittol, constant_cfl=constant_cfl) return state current_step, current_t, current_state = \ diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 54012c178..1335a092e 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -40,13 +40,9 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, - compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -93,7 +89,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 10 nviz = 10 - ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -157,33 +152,10 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Compare with analytic result - compare_with_analytic_solution(discr, eos, state, - exact_soln=initializer, - step=step, t=t, freq=nstatus, - exittol=exittol) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1) - raise err + sim_checkpoint(discr, visualizer, eos, q=state, + exact_soln=initializer, vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + exittol=exittol, constant_cfl=constant_cfl) return state current_step, current_t, current_state = \ diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index be0586937..38aab0011 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -40,13 +40,9 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, - compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -79,7 +75,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 - ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -145,33 +140,10 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Compare with analytic result - compare_with_analytic_solution(discr, eos, state, - exact_soln=initializer, - step=step, t=t, freq=nstatus, - exittol=exittol) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1) - raise err + sim_checkpoint(discr, visualizer, eos, q=state, + exact_soln=initializer, vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + exittol=exittol, constant_cfl=constant_cfl) return state current_step, current_t, current_state = \ diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 59d2415e4..deee0677f 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -38,13 +38,9 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, - compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -82,7 +78,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 10 nviz = 10 - ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -134,33 +129,10 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Compare with analytic result - compare_with_analytic_solution(discr, eos, state, - exact_soln=initializer, - step=step, t=t, freq=nstatus, - exittol=exittol) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1) - raise err + sim_checkpoint(discr, visualizer, eos, q=state, + exact_soln=initializer, vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + exittol=exittol, constant_cfl=constant_cfl) return state current_step, current_t, current_state = \ diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 9fbe01a7a..0a6de787a 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -40,13 +40,9 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_visualization, sim_checkpoint, - sim_healthcheck, - compare_with_analytic_solution, generate_and_distribute_mesh ) -from mirgecom.exceptions import SynchronizedError from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -107,7 +103,6 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal constant_cfl = False nstatus = 10 nviz = 10 - ncheck = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -181,33 +176,10 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - try: - # Check the health of the simulation - sim_healthcheck(discr, eos, state, - step=step, t=t, freq=ncheck) - # Perform checkpointing - sim_checkpoint(discr, eos, state, - step=step, t=t, dt=dt, freq=nstatus, - constant_cfl=constant_cfl) - # Compare with analytic result - compare_with_analytic_solution(discr, eos, state, - exact_soln=initializer, - step=step, t=t, freq=nstatus, - exittol=exittol) - # Visualize - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=nviz) - except SynchronizedError as err: - # Log crash error message - if rank == 0: - logger.info(str(err)) - logger.info("Visualizing crashed state ...") - # Write out crashed field - sim_visualization(discr, eos, state, - visualizer, vizname=casename, - step=step, t=t, freq=1) - raise err + sim_checkpoint(discr, visualizer, eos, q=state, + exact_soln=initializer, vizname=casename, step=step, + t=t, dt=dt, nstatus=nstatus, nviz=nviz, + exittol=exittol, constant_cfl=constant_cfl) return state current_step, current_t, current_state = \ diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 7e5d52dbb..d88fcc9cd 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -50,7 +50,7 @@ from meshmode.dof_array import thaw from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? -from mirgecom.exceptions import SimulationHealthError +from mirgecom.exceptions import SynchronizedError, SimulationHealthError logger = logging.getLogger(__name__) @@ -89,7 +89,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, def sim_visualization(discr, eos, state, visualizer, vizname, - step=0, t=0, freq=-1, + step=0, t=0, exact_soln=None, viz_fields=None, overwrite=False, vis_timer=None): """Visualize the simulation fields. @@ -111,100 +111,146 @@ def sim_visualization(discr, eos, state, visualizer, vizname, visualizer: A :class:`meshmode.discretization.visualization.Visualizer` VTK output object. - freq: int - An integer denoting the step frequency. """ - if check_step(step=step, interval=freq): + from contextlib import nullcontext + from mirgecom.fluid import split_conserved + from mirgecom.io import make_rank_fname, make_par_fname + + cv = split_conserved(discr.dim, state) + dependent_vars = eos.dependent_vars(cv) + + io_fields = [ + ("cv", cv), + ("dv", dependent_vars) + ] + if exact_soln is not None: + actx = cv.mass.array_context + nodes = thaw(actx, discr.nodes()) + expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) + exact_list = [ + ("exact_soln", expected_state), + ] + io_fields.extend(exact_list) - from contextlib import nullcontext - from mirgecom.fluid import split_conserved - from mirgecom.io import make_rank_fname, make_par_fname + if viz_fields is not None: + io_fields.extend(viz_fields) - cv = split_conserved(discr.dim, state) - dependent_vars = eos.dependent_vars(cv) + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() - io_fields = [ - ("cv", cv), - ("dv", dependent_vars) - ] - if exact_soln is not None: - actx = cv.mass.array_context - nodes = thaw(actx, discr.nodes()) - expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) - exact_list = [ - ("exact_soln", expected_state), - ] - io_fields.extend(exact_list) - - if viz_fields is not None: - io_fields.extend(viz_fields) - - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() - - rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) - - if vis_timer: - ctm = vis_timer.start_sub_timer() - else: - ctm = nullcontext() - - with ctm: - visualizer.write_parallel_vtk_file( - comm, rank_fn, io_fields, - overwrite=overwrite, - par_manifest_filename=make_par_fname( - basename=vizname, step=step, t=t - ) + rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) + + if vis_timer: + ctm = vis_timer.start_sub_timer() + else: + ctm = nullcontext() + + with ctm: + visualizer.write_parallel_vtk_file( + comm, rank_fn, io_fields, + overwrite=overwrite, + par_manifest_filename=make_par_fname( + basename=vizname, step=step, t=t ) + ) -def sim_checkpoint(discr, eos, state, step=0, t=0, dt=0, - cfl=1.0, freq=-1, constant_cfl=False): +def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, + step=0, t=0, dt=0, cfl=1.0, nstatus=-1, nviz=-1, exittol=1e-16, + constant_cfl=False, viz_fields=None, overwrite=False, + vis_timer=None): """Checkpoint the simulation status. Checkpoints the simulation status by reporting relevant diagnostic - quantities, such as pressure/temperature. + quantities, such as pressure/temperature, and visualization. Parameters ---------- eos: mirgecom.eos.GasEOS Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state. - state + returning pressure and temperature as a function of the state *q*. + q State array which expects at least the conserved quantities (mass, energy, momentum) for the fluid at each point. For multi-component fluids, the conserved quantities should include (mass, energy, momentum, species_mass), where *species_mass* is a vector of species masses. - freq: int - An integer denoting the step frequency. + freq: nstatus + An integer denoting the step frequency for performing status checks. + freq: nviz + An integer denoting the step frequency for writing vtk output. """ - if check_step(step=step, interval=freq): + exception = None + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() + + try: + # Status checks + if check_step(step=step, interval=nstatus): + from mirgecom.fluid import split_conserved + + # if constant_cfl is False: + # current_cfl = get_inviscid_cfl(discr=discr, q=q, + # eos=eos, dt=dt) + + cv = split_conserved(discr.dim, q) + dependent_vars = eos.dependent_vars(cv) + msg = make_status_message(discr=discr, + t=t, step=step, dt=dt, cfl=cfl, + dependent_vars=dependent_vars) + if rank == 0: + logger.info(msg) + + # Check the health of the simulation + sim_healthcheck(discr, eos, q, step=step, t=t) + + # Compare with exact solution, if provided + if exact_soln is not None: + compare_with_analytic_solution( + discr, eos, q, exact_soln, + step=step, t=t, exittol=exittol + ) + + # Visualization + if check_step(step=step, interval=nviz): + sim_visualization( + discr, eos, q, visualizer, vizname, + step=step, t=t, + exact_soln=exact_soln, viz_fields=viz_fields, + overwrite=overwrite, vis_timer=vis_timer + ) + except SynchronizedError as err: + exception = err + + terminate = True if exception is not None else False - from mirgecom.fluid import split_conserved + if comm is None: + if terminate: + raise exception + return - # if constant_cfl is False: - # current_cfl = get_inviscid_cfl(discr=discr, q=state, - # eos=eos, dt=dt) + from mpi4py import MPI - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() + terminate = comm.allreduce(terminate, MPI.LOR) - cv = split_conserved(discr.dim, state) - dependent_vars = eos.dependent_vars(cv) - msg = make_status_message(discr=discr, - t=t, step=step, dt=dt, cfl=cfl, - dependent_vars=dependent_vars) + if terminate: + # Log crash error message if rank == 0: - logger.info(msg) + logger.info(str(exception)) + logger.info("Visualizing crashed state ...") + # Write out crashed field + sim_visualization(discr, eos, q, + visualizer, vizname=vizname, + step=step, t=t, + viz_fields=viz_fields) + raise exception -def sim_healthcheck(discr, eos, state, step=0, t=0, freq=-1): +def sim_healthcheck(discr, eos, state, step=0, t=0): """Check the global health of the fluids state. Determine the health of a state by inspecting for unphyiscal @@ -221,48 +267,44 @@ def sim_healthcheck(discr, eos, state, step=0, t=0, freq=-1): fluids, the conserved quantities should include (mass, energy, momentum, species_mass), where *species_mass* is a vector of species masses. - freq: int - An integer denoting the step frequency. """ - if check_step(step=step, interval=freq): - - from mirgecom.fluid import split_conserved - import grudge.op as op - - # NOTE: Derived quantities are functions of the conserved variables. - # Therefore is it sufficient to check for unphysical values of - # temperature and pressure. - cv = split_conserved(discr.dim, state) - dependent_vars = eos.dependent_vars(cv) - pressure = dependent_vars.pressure - temperature = dependent_vars.temperature - - # Check for NaN - if (np.isnan(op.nodal_sum_loc(discr, "vol", pressure)) - or np.isnan(op.nodal_sum_loc(discr, "vol", temperature))): - raise SimulationHealthError( - message=("Simulation exited abnormally; detected a NaN.") - ) + from mirgecom.fluid import split_conserved + import grudge.op as op + + # NOTE: Derived quantities are functions of the conserved variables. + # Therefore is it sufficient to check for unphysical values of + # temperature and pressure. + cv = split_conserved(discr.dim, state) + dependent_vars = eos.dependent_vars(cv) + pressure = dependent_vars.pressure + temperature = dependent_vars.temperature + + # Check for NaN + if (np.isnan(op.nodal_sum_loc(discr, "vol", pressure)) + or np.isnan(op.nodal_sum_loc(discr, "vol", temperature))): + raise SimulationHealthError( + message=("Simulation exited abnormally; detected a NaN.") + ) - # Check for non-positivity - if (op.nodal_min_loc(discr, "vol", pressure) < 0 - or op.nodal_min_loc(discr, "vol", temperature) < 0): - raise SimulationHealthError( - message=("Simulation exited abnormally; " - "found non-positive values for pressure or temperature.") - ) + # Check for non-positivity + if (op.nodal_min_loc(discr, "vol", pressure) < 0 + or op.nodal_min_loc(discr, "vol", temperature) < 0): + raise SimulationHealthError( + message=("Simulation exited abnormally; " + "found non-positive values for pressure or temperature.") + ) - # Check for blow-up - if (op.nodal_sum_loc(discr, "vol", pressure) == np.inf - or op.nodal_sum_loc(discr, "vol", temperature) == np.inf): - raise SimulationHealthError( - message=("Simulation exited abnormally; " - "derived quantities are not finite.") - ) + # Check for blow-up + if (op.nodal_sum_loc(discr, "vol", pressure) == np.inf + or op.nodal_sum_loc(discr, "vol", temperature) == np.inf): + raise SimulationHealthError( + message=("Simulation exited abnormally; " + "derived quantities are not finite.") + ) def compare_with_analytic_solution(discr, eos, state, exact_soln, - step=0, t=0, freq=-1, exittol=None): + step=0, t=0, exittol=None): """Compute the infinite norm of the problem residual. Computes the infinite norm of the residual with respect to a specified @@ -284,40 +326,36 @@ def compare_with_analytic_solution(discr, eos, state, exact_soln, A callable for the exact solution with signature: ``exact_soln(x_vec, t, eos)`` where `x_vec` are the nodes, `t` is time, and `eos` is a :class:`mirgecom.eos.GasEOS`. - freq: int - An integer denoting the step frequency. """ - if check_step(step=step, interval=freq): + if exittol is None: + exittol = 1e-16 + + actx = discr._setup_actx + nodes = thaw(actx, discr.nodes()) + expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) + exp_resid = state - expected_state + norms = [discr.norm(v, np.inf) for v in exp_resid] + + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() + + statusmesg = ( + f"Errors: {step=} {t=}\n" + f"------- errors = " + + ", ".join("%.3g" % err_norm for err_norm in norms) + ) - if exittol is None: - exittol = 1e-16 + if rank == 0: + logger.info(statusmesg) - actx = discr._setup_actx - nodes = thaw(actx, discr.nodes()) - expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) - exp_resid = state - expected_state - norms = [discr.norm(v, np.inf) for v in exp_resid] - - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() - - statusmesg = ( - f"Errors: {step=} {t=}\n" - f"------- errors = " - + ", ".join("%.3g" % err_norm for err_norm in norms) + if max(norms) > exittol: + raise SimulationHealthError( + message=("Simulation exited abnormally; " + "solution doesn't agree with analytic result.") ) - if rank == 0: - logger.info(statusmesg) - - if max(norms) > exittol: - raise SimulationHealthError( - message=("Simulation exited abnormally; " - "solution doesn't agree with analytic result.") - ) - def generate_and_distribute_mesh(comm, generate_mesh): """Generate a mesh and distribute it among all ranks in *comm*. From cba127b9a2dd999394099bfab138d692637f9eba Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Mon, 7 Jun 2021 19:18:30 -0500 Subject: [PATCH 039/873] Fix callback tests --- test/test_callbacks.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_callbacks.py b/test/test_callbacks.py index ffbb43182..7ed1b9663 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -70,7 +70,7 @@ def test_basic_cfd_healthcheck(actx_factory): from mirgecom.exceptions import SimulationHealthError with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q, freq=1) + sim_healthcheck(discr, eos, q) # Let's make another very bad state (nans) mass = 1*ones @@ -81,7 +81,7 @@ def test_basic_cfd_healthcheck(actx_factory): q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q, freq=1) + sim_healthcheck(discr, eos, q) # Let's make one last very bad state (inf) mass = 1*ones @@ -92,7 +92,7 @@ def test_basic_cfd_healthcheck(actx_factory): q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q, freq=1) + sim_healthcheck(discr, eos, q) def test_analytic_comparison(actx_factory): @@ -125,4 +125,4 @@ def test_analytic_comparison(actx_factory): from mirgecom.exceptions import SimulationHealthError with pytest.raises(SimulationHealthError): - compare_with_analytic_solution(discr, eos, q, Vortex2D(), freq=1) + compare_with_analytic_solution(discr, eos, q, Vortex2D()) From b58594c1b18f501faa687f7b5a31014670b95a10 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 7 Jun 2021 23:03:48 -0500 Subject: [PATCH 040/873] Use better dt_utils function. --- mirgecom/inviscid.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index d004a4eb8..74c4510b3 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -98,17 +98,12 @@ def get_inviscid_timestep(discr, eos, q): class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ - from grudge.dt_utils import (dt_non_geometric_factor, - dt_geometric_factors) + from grudge.dt_utils import estimate_local_timestep from mirgecom.fluid import compute_wavespeed dim = discr.dim cv = split_conserved(dim, q) - - return ( - dt_non_geometric_factor(discr) * dt_geometric_factors(discr) - / compute_wavespeed(dim, eos, cv) - ) + return estimate_local_timestep(discr, compute_wavespeed(dim, eos, cv)) def get_inviscid_cfl(discr, eos, dt, q): From e2dc67b2a1dbbf61096b1e4c643244f040804c7f Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 8 Jun 2021 00:03:50 -0500 Subject: [PATCH 041/873] Use grudge@nongeo-factors-per-group util inducer/grudge/#121 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5a5d4b277..8a73fd734 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ psutil --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge +--editable git+https://github.com/inducer/grudge.git@nongeo-factors-per-group#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 4c938fa2cb2eef71d83aff54792fc14ad20b86f5 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Tue, 8 Jun 2021 13:45:27 -0500 Subject: [PATCH 042/873] Clean up sim_checkpoint function --- mirgecom/simutil.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d88fcc9cd..c5222576a 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -177,9 +177,9 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, fluids, the conserved quantities should include (mass, energy, momentum, species_mass), where *species_mass* is a vector of species masses. - freq: nstatus + nstatus: int An integer denoting the step frequency for performing status checks. - freq: nviz + nviz: int An integer denoting the step frequency for writing vtk output. """ exception = None @@ -228,20 +228,15 @@ def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, terminate = True if exception is not None else False - if comm is None: - if terminate: - raise exception - return - - from mpi4py import MPI + if comm is not None: + from mpi4py import MPI - terminate = comm.allreduce(terminate, MPI.LOR) + terminate = comm.allreduce(terminate, MPI.LOR) if terminate: - # Log crash error message if rank == 0: - logger.info(str(exception)) logger.info("Visualizing crashed state ...") + # Write out crashed field sim_visualization(discr, eos, q, visualizer, vizname=vizname, From 964859749295e8cc73742ff461fe930048b6a15a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Jun 2021 07:03:50 -0500 Subject: [PATCH 043/873] Remove unneeded dim var --- mirgecom/inviscid.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 32d9d18bf..5059125dc 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -90,23 +90,19 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): "all_faces"; remaining instead on the boundary restriction. """ actx = cv_tpair.int.array_context - dim = discr.dim flux_tpair = TracePair(cv_tpair.dd, interior=inviscid_flux(discr, eos, cv_tpair.int), exterior=inviscid_flux(discr, eos, cv_tpair.ext)) lam = actx.np.maximum( - compute_wavespeed(dim, eos=eos, cv=cv_tpair.int), - compute_wavespeed(dim, eos=eos, cv=cv_tpair.ext) + compute_wavespeed(eos=eos, cv=cv_tpair.int), + compute_wavespeed(eos=eos, cv=cv_tpair.ext) ) normal = thaw(actx, discr.normal(cv_tpair.dd)) # todo: user-supplied flux routine - # flux_weak = make_conserved( - # dim, q=lfr_flux(cv_tpair, flux_tpair, normal=normal, lam=lam) - # ) flux_weak = lfr_flux(cv_tpair, flux_tpair, normal=normal, lam=lam) if local is False: From aa1ea7dc36c38de37741073a728eb4b79dc5c15e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Jun 2021 07:16:00 -0500 Subject: [PATCH 044/873] Correct inviscid_timestep call in vortex example --- examples/vortex-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 4221a5b7d..76650ea3d 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -180,7 +180,7 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, q=state) + local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, cv=state) viz_fields = [ ("cfl", local_cfl) ] From 3cff6410e752cf843eb8afceed3e68d66a1816e4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Jun 2021 08:29:10 -0500 Subject: [PATCH 045/873] Wriggle into place with the new shiny data structure --- examples/doublemach-mpi.py | 6 +++--- mirgecom/boundary.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index e46f5ebcb..e093054f8 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -50,7 +50,7 @@ ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point - +from mirgecom.fluid import make_conserved from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( @@ -207,10 +207,10 @@ def main(ctx_factory=cl.create_some_context): def my_rhs(t, state): return ns_operator( discr, cv=state, t=t, boundaries=boundaries, eos=eos - ) + av_operator( + ) + make_conserved(dim, q=av_operator( discr, q=state.join(), boundaries=boundaries, boundary_kwargs={"time": t, "eos": eos}, alpha=alpha, - s0=s0, kappa=kappa + s0=s0, kappa=kappa) ) def my_checkpoint(step, t, dt, state): diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 522bb8daa..86563fd7c 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -216,7 +216,7 @@ def soln_gradient_flux(self, discr, btag, soln, **kwargs): def s_boundary_flux(self, discr, btag, grad_cv, **kwargs): r"""Get $\nabla\mathbf{Q}$ flux across the boundary faces.""" - actx = grad_cv.array_context + actx = grad_cv.mass[0].array_context boundary_discr = discr.discr_from_dd(btag) nodes = thaw(actx, boundary_discr.nodes()) nhat = thaw(actx, discr.normal(btag)) @@ -450,9 +450,9 @@ def exterior_soln(self, discr, cv, btag, **kwargs): return make_conserved(dim=dim, mass=int_cv.mass, energy=int_cv.energy, momentum=ext_mom) - def exterior_grad_q(self, nodes, nhat, grad_q, **kwargs): + def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): """Get the exterior solution on the boundary.""" - return(-grad_q) + return(-grad_cv) class IsothermalNoSlipBoundary(PrescribedInviscidBoundary): From b1eb999e9d2f3b13ce0521876e8ee2a48121b4e7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Jun 2021 13:53:34 -0500 Subject: [PATCH 046/873] Update to latest (and greatest) API from grudge --- mirgecom/inviscid.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 74c4510b3..8a86d08ff 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -98,12 +98,14 @@ def get_inviscid_timestep(discr, eos, q): class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ - from grudge.dt_utils import estimate_local_timestep + from grudge.dt_utils import characteristic_length_scales from mirgecom.fluid import compute_wavespeed dim = discr.dim cv = split_conserved(dim, q) - return estimate_local_timestep(discr, compute_wavespeed(dim, eos, cv)) + return ( + characteristic_length_scales(discr)/compute_wavespeed(discr, eos, cv) + ) def get_inviscid_cfl(discr, eos, dt, q): From 6ef0f0557fda7635550f59bf491b43d258dcc6d1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Jun 2021 14:15:58 -0500 Subject: [PATCH 047/873] Fix transcribo on grudge dt utils func name --- mirgecom/inviscid.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 8a86d08ff..43a89347f 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -98,13 +98,13 @@ def get_inviscid_timestep(discr, eos, q): class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ - from grudge.dt_utils import characteristic_length_scales + from grudge.dt_utils import characteristic_lengthscales from mirgecom.fluid import compute_wavespeed dim = discr.dim cv = split_conserved(dim, q) return ( - characteristic_length_scales(discr)/compute_wavespeed(discr, eos, cv) + characteristic_lengthscales(discr)/compute_wavespeed(discr, eos, cv) ) From 0c2e986abd136b9bdbe6a93de7c6b44df67eba2a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 10 Jun 2021 23:17:47 -0500 Subject: [PATCH 048/873] Update simutils/health/checkpoint - move most to driver, simplify --- examples/mixture-mpi.py | 58 +++++- mirgecom/simutil.py | 406 +++++++++++++++++++--------------------- 2 files changed, 242 insertions(+), 222 deletions(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 28ee4033b..f9197f164 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -39,7 +39,6 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - sim_checkpoint, generate_and_distribute_mesh ) from mirgecom.io import make_init_message @@ -77,6 +76,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): current_t = 0 constant_cfl = False nstatus = 1 + nhealth = 1 nviz = 1 rank = 0 checkpoint_t = current_t @@ -150,10 +150,58 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - sim_checkpoint(discr, visualizer, eos, q=state, - exact_soln=initializer, vizname=casename, step=step, - t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl) + from mirgecom.simutils import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + from mirgecom.simutil import compare_fluid_solutions + dv = eos.dependent_vars(state) + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + component_errors = compare_fluid_solutions(state, exact_mix) + resid = state - exact_mix + io_fields = [ + ("cv", state), + ("dv", dv), + ("exact_mix", exact_mix), + ("resid", resid) + ] + + if do_status: # This is bad, logging already completely replaces this + from mirgecom.io import make_status_message + status_msg = make_status_message(discr, t=t, step=step, dt=dt, + cfl=current_cfl, dependent_vars=dv) + status_msg += ( + "\n------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + if do_health: + from mirgecom.simutils import check_naninf_local, check_negative_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_negative_local(discr, "vol", dv.pressure): + errors = 1 + message = "Invalid pressure data found.\n" + if np.max(component_errors) > exittol: + errors = errors + 1 + message += "Solution errors exceed tolerance.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutils import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + return state current_step, current_t, current_state = \ diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c5222576a..9fd01add0 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -47,10 +47,11 @@ import logging import numpy as np -from meshmode.dof_array import thaw -from mirgecom.io import make_status_message +# from meshmode.dof_array import thaw +# from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? -from mirgecom.exceptions import SynchronizedError, SimulationHealthError +from mirgecom.exceptions import SimulationHealthError +import grudge.op as op logger = logging.getLogger(__name__) @@ -88,52 +89,35 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, return mydt -def sim_visualization(discr, eos, state, visualizer, vizname, - step=0, t=0, - exact_soln=None, viz_fields=None, - overwrite=False, vis_timer=None): +def sim_visualization(discr, io_fields, visualizer, vizname, + step=0, t=0, overwrite=False, vis_timer=None): """Visualize the simulation fields. - Write VTK output of the conserved state and and specified derived - quantities *viz_fields*. + Write VTK output for the specified fields. Parameters ---------- - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state. - state - State array which expects at least the conserved quantities - (mass, energy, momentum) for the fluid at each point. For multi-component - fluids, the conserved quantities should include - (mass, energy, momentum, species_mass), where *species_mass* is a vector - of species masses. visualizer: A :class:`meshmode.discretization.visualization.Visualizer` VTK output object. + io_fields: + List of tuples indicating the (name, data) for each field to write. """ from contextlib import nullcontext - from mirgecom.fluid import split_conserved from mirgecom.io import make_rank_fname, make_par_fname - cv = split_conserved(discr.dim, state) - dependent_vars = eos.dependent_vars(cv) - - io_fields = [ - ("cv", cv), - ("dv", dependent_vars) - ] - if exact_soln is not None: - actx = cv.mass.array_context - nodes = thaw(actx, discr.nodes()) - expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) - exact_list = [ - ("exact_soln", expected_state), - ] - io_fields.extend(exact_list) - - if viz_fields is not None: - io_fields.extend(viz_fields) + # io_fields = [ + # ("cv", cv), + # ("dv", dependent_vars) + # ] + # if exact_soln is not None: + # exact_list = [ + # ("exact_soln", exact_soln), + # ] + # io_fields.extend(exact_list) + + # if viz_fields is not None: + # io_fields.extend(viz_fields) comm = discr.mpi_communicator rank = 0 @@ -157,95 +141,106 @@ def sim_visualization(discr, eos, state, visualizer, vizname, ) -def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, - step=0, t=0, dt=0, cfl=1.0, nstatus=-1, nviz=-1, exittol=1e-16, - constant_cfl=False, viz_fields=None, overwrite=False, - vis_timer=None): - """Checkpoint the simulation status. - - Checkpoints the simulation status by reporting relevant diagnostic - quantities, such as pressure/temperature, and visualization. - - Parameters - ---------- - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state *q*. - q - State array which expects at least the conserved quantities - (mass, energy, momentum) for the fluid at each point. For multi-component - fluids, the conserved quantities should include - (mass, energy, momentum, species_mass), where *species_mass* is a vector - of species masses. - nstatus: int - An integer denoting the step frequency for performing status checks. - nviz: int - An integer denoting the step frequency for writing vtk output. - """ - exception = None - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() - - try: - # Status checks - if check_step(step=step, interval=nstatus): - from mirgecom.fluid import split_conserved - - # if constant_cfl is False: - # current_cfl = get_inviscid_cfl(discr=discr, q=q, - # eos=eos, dt=dt) - - cv = split_conserved(discr.dim, q) - dependent_vars = eos.dependent_vars(cv) - msg = make_status_message(discr=discr, - t=t, step=step, dt=dt, cfl=cfl, - dependent_vars=dependent_vars) - if rank == 0: - logger.info(msg) - - # Check the health of the simulation - sim_healthcheck(discr, eos, q, step=step, t=t) - - # Compare with exact solution, if provided - if exact_soln is not None: - compare_with_analytic_solution( - discr, eos, q, exact_soln, - step=step, t=t, exittol=exittol - ) - - # Visualization - if check_step(step=step, interval=nviz): - sim_visualization( - discr, eos, q, visualizer, vizname, - step=step, t=t, - exact_soln=exact_soln, viz_fields=viz_fields, - overwrite=overwrite, vis_timer=vis_timer - ) - except SynchronizedError as err: - exception = err - - terminate = True if exception is not None else False - - if comm is not None: - from mpi4py import MPI - - terminate = comm.allreduce(terminate, MPI.LOR) - - if terminate: - if rank == 0: - logger.info("Visualizing crashed state ...") - - # Write out crashed field - sim_visualization(discr, eos, q, - visualizer, vizname=vizname, - step=step, t=t, - viz_fields=viz_fields) - raise exception - - -def sim_healthcheck(discr, eos, state, step=0, t=0): +# def sim_checkpoint(discr, visualizer, eos, q, vizname, exact_soln=None, +# step=0, t=0, dt=0, cfl=1.0, nstatus=-1, nviz=-1, exittol=1e-16, +# constant_cfl=False, viz_fields=None, overwrite=False, +# vis_timer=None): +# """Checkpoint the simulation status. +# +# Checkpoints the simulation status by reporting relevant diagnostic +# quantities, such as pressure/temperature, and visualization. +# +# Parameters +# ---------- +# eos: mirgecom.eos.GasEOS +# Implementing the pressure and temperature functions for +# returning pressure and temperature as a function of the state *q*. +# q +# State array which expects at least the conserved quantities +# (mass, energy, momentum) for the fluid at each point. For multi-component +# fluids, the conserved quantities should include +# (mass, energy, momentum, species_mass), where *species_mass* is a vector +# of species masses. +# nstatus: int +# An integer denoting the step frequency for performing status checks. +# nviz: int +# An integer denoting the step frequency for writing vtk output. +# """ +# exception = None +# comm = discr.mpi_communicator +# rank = 0 +# if comm is not None: +# rank = comm.Get_rank() +# +# try: +# # Status checks +# if check_step(step=step, interval=nstatus): +# from mirgecom.fluid import split_conserved +# +# # if constant_cfl is False: +# # current_cfl = get_inviscid_cfl(discr=discr, q=q, +# # eos=eos, dt=dt) +# +# cv = split_conserved(discr.dim, q) +# dependent_vars = eos.dependent_vars(cv) +# msg = make_status_message(discr=discr, +# # t=t, step=step, dt=dt, cfl=cfl, +# dependent_vars=dependent_vars) +# if rank == 0: +# logger.info(msg) +# +# # Check the health of the simulation +# sim_healthcheck(discr, eos, q, step=step, t=t) +# +# # Compare with exact solution, if provided +# if exact_soln is not None: +# compare_with_analytic_solution( +# discr, eos, q, exact_soln, +# step=step, t=t, exittol=exittol +# ) +# +# # Visualization +# if check_step(step=step, interval=nviz): +# sim_visualization( +# discr, eos, q, visualizer, vizname, +# step=step, t=t, +# exact_soln=exact_soln, viz_fields=viz_fields, +# overwrite=overwrite, vis_timer=vis_timer +# ) +# except SynchronizedError as err: +# exception = err +# +# terminate = True if exception is not None else False +# +# if comm is not None: +# from mpi4py import MPI +# +# terminate = comm.allreduce(terminate, MPI.LOR) +# +# if terminate: +# if rank == 0: +# logger.info("Visualizing crashed state ...") +# +# # Write out crashed field +# sim_visualization(discr, eos, q, +# visualizer, vizname=vizname, +# step=step, t=t, +# viz_fields=viz_fields) +# raise exception + + +def check_negative_local(discr, dd, field): + """Check for any negative values.""" + return op.nodal_min_loc(discr, dd, field) < 0 + + +def check_naninf_local(discr, dd, field): + """Check for any NANs or Infs in the field.""" + s = op.nodal_sum_local(discr, dd, field) + return np.isnan(s) or (s == np.inf) + + +def sim_healthcheck(discr, eos, cv): """Check the global health of the fluids state. Determine the health of a state by inspecting for unphyiscal @@ -256,100 +251,77 @@ def sim_healthcheck(discr, eos, state, step=0, t=0): eos: mirgecom.eos.GasEOS Implementing the pressure and temperature functions for returning pressure and temperature as a function of the state. - state - State array which expects at least the conserved quantities - (mass, energy, momentum) for the fluid at each point. For multi-component - fluids, the conserved quantities should include - (mass, energy, momentum, species_mass), where *species_mass* is a vector - of species masses. + cv: :class:`~mirgecom.fluid.ConservedVars` + The fluid conserved variables """ - from mirgecom.fluid import split_conserved - import grudge.op as op - # NOTE: Derived quantities are functions of the conserved variables. # Therefore is it sufficient to check for unphysical values of - # temperature and pressure. - cv = split_conserved(discr.dim, state) - dependent_vars = eos.dependent_vars(cv) - pressure = dependent_vars.pressure - temperature = dependent_vars.temperature - - # Check for NaN - if (np.isnan(op.nodal_sum_loc(discr, "vol", pressure)) - or np.isnan(op.nodal_sum_loc(discr, "vol", temperature))): - raise SimulationHealthError( - message=("Simulation exited abnormally; detected a NaN.") - ) - - # Check for non-positivity - if (op.nodal_min_loc(discr, "vol", pressure) < 0 - or op.nodal_min_loc(discr, "vol", temperature) < 0): - raise SimulationHealthError( - message=("Simulation exited abnormally; " - "found non-positive values for pressure or temperature.") - ) - - # Check for blow-up - if (op.nodal_sum_loc(discr, "vol", pressure) == np.inf - or op.nodal_sum_loc(discr, "vol", temperature) == np.inf): - raise SimulationHealthError( - message=("Simulation exited abnormally; " - "derived quantities are not finite.") - ) - - -def compare_with_analytic_solution(discr, eos, state, exact_soln, - step=0, t=0, exittol=None): - """Compute the infinite norm of the problem residual. - - Computes the infinite norm of the residual with respect to a specified - exact solution *exact_soln*. If the error is larger than *exittol*, - raises a :class:`mirgecom.exceptions.SimulationHealthError`. - - Parameters - ---------- - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state. - state - State array which expects at least the conserved quantities - (mass, energy, momentum) for the fluid at each point. For multi-component - fluids, the conserved quantities should include - (mass, energy, momentum, species_mass), where *species_mass* is a vector - of species masses. - exact_soln: - A callable for the exact solution with signature: - ``exact_soln(x_vec, t, eos)`` where `x_vec` are the nodes, - `t` is time, and `eos` is a :class:`mirgecom.eos.GasEOS`. - """ - if exittol is None: - exittol = 1e-16 - - actx = discr._setup_actx - nodes = thaw(actx, discr.nodes()) - expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) - exp_resid = state - expected_state - norms = [discr.norm(v, np.inf) for v in exp_resid] - - comm = discr.mpi_communicator - rank = 0 - if comm is not None: - rank = comm.Get_rank() - - statusmesg = ( - f"Errors: {step=} {t=}\n" - f"------- errors = " - + ", ".join("%.3g" % err_norm for err_norm in norms) - ) - - if rank == 0: - logger.info(statusmesg) - - if max(norms) > exittol: - raise SimulationHealthError( - message=("Simulation exited abnormally; " - "solution doesn't agree with analytic result.") - ) + # pressure. Temperature is not needed. + from mpi4py import MPI + errors = 0 + pressure = eos.pressure(cv) + if check_naninf_local(discr, "vol", pressure) \ + or check_negative_local(discr, "vol", pressure): + errors = 1 + message = "Invalid data found in dependent variables." + if discr.mpi_communicator.allreduce(errors, op=MPI.SUM) > 0: + raise SimulationHealthError(message=message) + + +def compare_fluid_solutions(discr, red_state, blue_state): + """Return inf norm of (*red_state* - *blue_state*) for each component.""" + resid = red_state - blue_state + return [discr.norm(v, np.inf) for v in resid.join()] + + +# def compare_with_analytic_solution(discr, eos, state, exact_soln, +# step=0, t=0, exittol=None): +# """Compute the infinite norm of the problem residual. +# +# Computes the infinite norm of the residual with respect to a specified +# exact solution *exact_soln*. If the error is larger than *exittol*, +# raises a :class:`mirgecom.exceptions.SimulationHealthError`. +# +# Parameters +# ---------- +# eos: mirgecom.eos.GasEOS +# Implementing the pressure and temperature functions for +# returning pressure and temperature as a function of the state. +# state: :class:`ConservedVars` +# Fluid solution +# exact_soln: +# A callable for the exact solution with signature: +# ``exact_soln(x_vec, eos, t)`` where `x_vec` are the nodes, +# `t` is time, and `eos` is a :class:`mirgecom.eos.GasEOS`. +# """ +# if exittol is None: +# exittol = 1e-16 + +# actx = discr._setup_actx +# nodes = thaw(actx, discr.nodes()) +# expected_state = exact_soln(x_vec=nodes, t=t, eos=eos) +# exp_resid = state - expected_state +# norms = [discr.norm(v, np.inf) for v in exp_resid] + +# comm = discr.mpi_communicator +# rank = 0 +# if comm is not None: +# rank = comm.Get_rank() + +# statusmesg = ( +# f"Errors: {step=} {t=}\n" +# f"------- errors = " +# + ", ".join("%.3g" % err_norm for err_norm in norms) +# ) + +# if rank == 0: +# logger.info(statusmesg) + +# if max(norms) > exittol: +# raise SimulationHealthError( +# message=("Simulation exited abnormally; " +# "solution doesn't agree with analytic result.") +# ) def generate_and_distribute_mesh(comm, generate_mesh): From 15bdf3d7eb9e542865c8167f3e85b8b22b0aea40 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 01:24:46 -0500 Subject: [PATCH 049/873] Port examples into place, slight adjustment/cleanup/corrections for simutils interfaces. --- examples/autoignition-mpi.py | 56 +++++++++++++++++++++++++++---- examples/lump-mpi.py | 64 +++++++++++++++++++++++++++++++++--- examples/mixture-mpi.py | 13 ++++---- examples/pulse-mpi.py | 45 ++++++++++++++++++++++++- examples/scalar-lump-mpi.py | 54 ++++++++++++++++++++++++++++++ examples/sod-mpi.py | 55 +++++++++++++++++++++++++++++++ examples/vortex-mpi.py | 54 ++++++++++++++++++++++++++++-- mirgecom/simutil.py | 16 ++++----- 8 files changed, 328 insertions(+), 29 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 148cef495..3f033339b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -80,6 +80,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 5 + nhealth = 1 rank = 0 checkpoint_t = current_t current_step = 0 @@ -221,15 +222,56 @@ def my_rhs(t, state): + eos.get_species_source_terms(state)) def my_checkpoint(step, t, dt, state): - reaction_rates = eos.get_production_rates(state) - viz_fields = [("reaction_rates", reaction_rates)] - print(f"{viz_fields=}") - - (current_step, current_t, current_state) = \ + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + dv = eos.dependent_vars(state) + reaction_rates = eos.get_production_rates(state) + io_fields = [ + ("cv", state), + ("dv", dv), + ("reaction_rates", reaction_rates) + ] + + if do_status: # This is bad, logging already completely replaces this + from mirgecom.io import make_status_message + status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, + cfl=current_cfl, dependent_vars=dv) + if rank == 0: + logger.info(status_msg) + + errors = 0 + if do_health: + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure): + errors = 1 + message = "Invalid pressure data found.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutil import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + + return state + + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, + pre_step_callback=my_checkpoint, get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + t=current_t, t_final=t_final, eos=eos, dim=dim) if not check_step(current_step, nviz): # If final step not an output step if rank == 0: diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index da60d46a8..231b9b2fe 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -79,6 +79,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} constant_cfl = False nstatus = 1 + nhealth = 1 nviz = 1 rank = 0 checkpoint_t = current_t @@ -129,13 +130,66 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - print(f"{step=}") - - (current_step, current_t, current_state) = \ + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + from mirgecom.simutil import compare_fluid_solutions + dv = eos.dependent_vars(state) + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + component_errors = compare_fluid_solutions(discr, state, exact_mix) + resid = state - exact_mix + io_fields = [ + ("cv", state), + ("dv", dv), + ("exact_mix", exact_mix), + ("resid", resid) + ] + + if do_status: # This is bad, logging already completely replaces this + from mirgecom.io import make_status_message + status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, + cfl=current_cfl, dependent_vars=dv) + status_msg += ( + "\n------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + errors = 0 + if do_health: + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure): + errors = 1 + message = "Invalid pressure data found.\n" + if np.max(component_errors) > exittol: + errors = errors + 1 + message += "Solution errors exceed tolerance.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutil import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + + return state + + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, + pre_step_callback=my_checkpoint, get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + t=current_t, t_final=t_final, eos=eos, dim=dim) # if current_t != checkpoint_t: if rank == 0: diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index c19751907..a3480fffc 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -150,7 +150,7 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): - from mirgecom.simutils import check_step + from mirgecom.simutil import check_step do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) do_health = check_step(step=step, interval=nhealth) @@ -159,7 +159,7 @@ def my_checkpoint(step, t, dt, state): from mirgecom.simutil import compare_fluid_solutions dv = eos.dependent_vars(state) exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - component_errors = compare_fluid_solutions(state, exact_mix) + component_errors = compare_fluid_solutions(discr, state, exact_mix) resid = state - exact_mix io_fields = [ ("cv", state), @@ -170,7 +170,7 @@ def my_checkpoint(step, t, dt, state): if do_status: # This is bad, logging already completely replaces this from mirgecom.io import make_status_message - status_msg = make_status_message(discr, t=t, step=step, dt=dt, + status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, cfl=current_cfl, dependent_vars=dv) status_msg += ( "\n------- errors=" @@ -178,10 +178,11 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) + errors = 0 if do_health: - from mirgecom.simutils import check_naninf_local, check_negative_local + from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_negative_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure): errors = 1 message = "Invalid pressure data found.\n" if np.max(component_errors) > exittol: @@ -194,7 +195,7 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errors > 0: - from mirgecom.simutils import sim_visualization + from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index b5f3e41a4..49c82163a 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -84,8 +84,9 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): wall = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: wall} constant_cfl = False - nstatus = 10 + nstatus = 1 nviz = 10 + nhealth = 1 rank = 0 checkpoint_t = current_t current_step = 0 @@ -149,6 +150,48 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + pressure = eos.pressure(state) + io_fields = [ + ("cv", state), + ("pressure", pressure) + ] + + if do_status: # This is bad, logging already completely replaces this + from mirgecom.io import make_status_message + dv = eos.dependent_vars(state) + status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, + cfl=current_cfl, dependent_vars=dv) + if rank == 0: + logger.info(status_msg) + + errors = 0 + if do_health: + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure): + errors = 1 + message = "Invalid pressure data found.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutil import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + return state current_step, current_t, current_state = \ diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 03744e541..0bc82a453 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -74,6 +74,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 1 + nhealth = 1 rank = 0 checkpoint_t = current_t current_step = 0 @@ -139,6 +140,59 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + from mirgecom.simutil import compare_fluid_solutions + dv = eos.dependent_vars(state) + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + component_errors = compare_fluid_solutions(discr, state, exact_mix) + resid = state - exact_mix + io_fields = [ + ("cv", state), + ("dv", dv), + ("exact_mix", exact_mix), + ("resid", resid) + ] + + if do_status: # This is bad, logging already completely replaces this + from mirgecom.io import make_status_message + status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, + cfl=current_cfl, dependent_vars=dv) + status_msg += ( + "\n------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + errors = 0 + if do_health: + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure): + errors = 1 + message = "Invalid pressure data found.\n" + if np.max(component_errors) > exittol: + errors = errors + 1 + message += "Solution errors exceed tolerance.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutil import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + return state current_step, current_t, current_state = \ diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 6f74545a6..205afaeeb 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -24,6 +24,7 @@ THE SOFTWARE. """ import logging +import numpy as np import pyopencl as cl import pyopencl.tools as cl_tools from functools import partial @@ -77,6 +78,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 10 nviz = 10 + nhealth = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -128,6 +130,59 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + from mirgecom.simutil import compare_fluid_solutions + dv = eos.dependent_vars(state) + sod_exact = initializer(x_vec=nodes, eos=eos, t=t) + component_errors = compare_fluid_solutions(discr, state, sod_exact) + resid = state - sod_exact + io_fields = [ + ("cv", state), + ("dv", dv), + ("sod_exact", sod_exact), + ("resid", resid) + ] + + if do_status: # This is bad, logging already completely replaces this + from mirgecom.io import make_status_message + status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, + cfl=current_cfl, dependent_vars=dv) + status_msg += ( + "\n------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + errors = 0 + if do_health: + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure): + errors = 1 + message = "Invalid pressure data found.\n" + if np.max(component_errors) > exittol: + errors = errors + 1 + message += "Solution errors exceed tolerance.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutil import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + return state current_step, current_t, current_state = \ diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index a973ecf3a..4438bbf52 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -102,6 +102,7 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal constant_cfl = False nstatus = 10 nviz = 10 + nhealth = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -175,14 +176,63 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): + from mirgecom.simutil import check_step + do_status = check_step(step=step, interval=nstatus) + do_viz = check_step(step=step, interval=nviz) + do_health = check_step(step=step, interval=nhealth) + + if do_status or do_viz or do_health: + from mirgecom.simutil import compare_fluid_solutions + dv = eos.dependent_vars(state) + vortex_exact = initializer(x_vec=nodes, eos=eos, t=t) + component_errors = compare_fluid_solutions(discr, state, vortex_exact) + resid = state - vortex_exact + io_fields = [ + ("cv", state), + ("dv", dv), + ("vortex_exact", vortex_exact), + ("resid", resid) + ] + + if do_status: + status_msg = ( + "\n------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + errors = 0 + if do_health: + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure): + errors = 1 + message = "Invalid pressure data found.\n" + if np.max(component_errors) > exittol: + errors = errors + 1 + message += "Solution errors exceed tolerance.\n" + errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) + if errors > 0: + if rank == 0: + logger.info("Fluid solution failed health check.") + logger.info(message) # do this on all ranks + + if do_viz or errors > 0: + from mirgecom.simutil import sim_visualization + sim_visualization(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + if errors > 0: + a = 1/0 + print(f"{a=}") + return state current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, - logmgr=logmgr, eos=eos, dim=dim) + t=current_t, t_final=t_final, eos=eos, dim=dim) if rank == 0: logger.info("Checkpointing final state ...") diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index b253e1ce8..6df9088c3 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -5,12 +5,14 @@ .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep +.. autofunction:: sim_visualization -Diagnostic callbacks +Diagnostic utilities -------------------- -.. autofunction:: sim_visualization -.. autofunction:: compare_with_analytic_solution +.. autofunction:: compare_fluid_solutions +.. autofunction:: check_naninf_local +.. autofunction:: check_range_local Mesh utilities -------------- @@ -45,8 +47,6 @@ import logging import numpy as np -# from meshmode.dof_array import thaw -# from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? import grudge.op as op @@ -128,14 +128,14 @@ def sim_visualization(discr, io_fields, visualizer, vizname, def check_range_local(discr, dd, field, min_value=0, max_value=np.inf): """Check for any negative values.""" return ( - op.nodal_min_local(discr, dd, field) < min_value - or op.nodal_max_local(discr, dd, field) > max_value + op.nodal_min_loc(discr, dd, field) < min_value + or op.nodal_max_loc(discr, dd, field) > max_value ) def check_naninf_local(discr, dd, field): """Check for any NANs or Infs in the field.""" - s = op.nodal_sum_local(discr, dd, field) + s = op.nodal_sum_loc(discr, dd, field) return np.isnan(s) or (s == np.inf) From 68302b4b3018b3810d29efc7e0e4466aab454cb1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 01:56:20 -0500 Subject: [PATCH 050/873] Update tests to match the facilities. --- test/{test_callbacks.py => test_simutil.py} | 53 +++++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) rename test/{test_callbacks.py => test_simutil.py} (66%) diff --git a/test/test_callbacks.py b/test/test_simutil.py similarity index 66% rename from test/test_callbacks.py rename to test/test_simutil.py index 7ed1b9663..23ea148ea 100644 --- a/test/test_callbacks.py +++ b/test/test_simutil.py @@ -25,7 +25,7 @@ """ import numpy as np -import pytest +import pytest # noqa from arraycontext import ( # noqa thaw, @@ -33,15 +33,14 @@ as pytest_generate_tests ) -from mirgecom.fluid import join_conserved +from mirgecom.fluid import make_conserved from mirgecom.eos import IdealSingleGas from grudge.eager import EagerDGDiscretization def test_basic_cfd_healthcheck(actx_factory): - from mirgecom.simutil import sim_healthcheck - + """Quick test of some health checking utilities.""" actx = actx_factory() nel_1d = 4 dim = 2 @@ -65,12 +64,10 @@ def test_basic_cfd_healthcheck(actx_factory): mom = mass * velocity eos = IdealSingleGas() - q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) - - from mirgecom.exceptions import SimulationHealthError + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) - with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q) + from mirgecom.simutil import check_range_local + assert check_range_local(discr, "vol", mass) # Let's make another very bad state (nans) mass = 1*ones @@ -78,10 +75,11 @@ def test_basic_cfd_healthcheck(actx_factory): velocity = np.nan * nodes mom = mass * velocity - q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + pressure = eos.pressure(cv) - with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q) + from mirgecom.simutil import check_naninf_local + assert check_naninf_local(discr, "vol", pressure) # Let's make one last very bad state (inf) mass = 1*ones @@ -89,15 +87,24 @@ def test_basic_cfd_healthcheck(actx_factory): velocity = 2 * nodes mom = mass * velocity - q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + pressure = eos.pressure(cv) + + assert check_naninf_local(discr, "vol", pressure) - with pytest.raises(SimulationHealthError): - sim_healthcheck(discr, eos, q) + # What the hey, test a good one + energy = 2.5 + .5*np.dot(mom, mom) + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + pressure = eos.pressure(cv) + + assert not check_naninf_local(discr, "vol", pressure) + assert not check_range_local(discr, "vol", pressure) def test_analytic_comparison(actx_factory): + """Quick test of state comparison routine.""" from mirgecom.initializers import Vortex2D - from mirgecom.simutil import compare_with_analytic_solution + from mirgecom.simutil import compare_fluid_solutions actx = actx_factory() nel_1d = 4 @@ -114,15 +121,19 @@ def test_analytic_comparison(actx_factory): nodes = thaw(discr.nodes(), actx) zeros = discr.zeros(actx) ones = zeros + 1.0 - eos = IdealSingleGas() mass = ones energy = ones velocity = 2 * nodes mom = mass * velocity + vortex_init = Vortex2D() + vortex_soln = vortex_init(x_vec=nodes, eos=IdealSingleGas()) - q = join_conserved(dim, mass=mass, energy=energy, momentum=mom) + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + resid = vortex_soln - cv + expected_errors = [discr.norm(v, np.inf) for v in resid.join()] - from mirgecom.exceptions import SimulationHealthError + errors = compare_fluid_solutions(discr, cv, cv) + assert max(errors) == 0 - with pytest.raises(SimulationHealthError): - compare_with_analytic_solution(discr, eos, q, Vortex2D()) + errors = compare_fluid_solutions(discr, cv, vortex_soln) + assert errors == expected_errors From 8b506e166232506971525a53b33b4945fb769914 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 03:01:02 -0500 Subject: [PATCH 051/873] Twiddle to test both pressure and mass for first bad state. --- test/test_simutil.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test_simutil.py b/test/test_simutil.py index 23ea148ea..572504bf2 100644 --- a/test/test_simutil.py +++ b/test/test_simutil.py @@ -59,15 +59,17 @@ def test_basic_cfd_healthcheck(actx_factory): # Let's make a very bad state (negative mass) mass = -1*ones - energy = zeros + 2.5 velocity = 2 * nodes mom = mass * velocity + energy = zeros + .5*np.dot(mom, mom)/mass eos = IdealSingleGas() cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + pressure = eos.pressure(cv) from mirgecom.simutil import check_range_local assert check_range_local(discr, "vol", mass) + assert check_range_local(discr, "vol", pressure, min_value=1e-6) # Let's make another very bad state (nans) mass = 1*ones From 51ade9b1e6f6561c46097e03b56ee2cf1ea71e3a Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 11 Jun 2021 13:50:09 -0500 Subject: [PATCH 052/873] Sharpen the error sync. Co-authored-by: Thomas H. Gibson --- examples/autoignition-mpi.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 3f033339b..714855909 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -243,15 +243,17 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + comm = discr.mpi_communicator + if comm is not None: + errored = comm.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks From 68339029d48c879a3df883c27959a03657bde0a8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 13:52:42 -0500 Subject: [PATCH 053/873] Update error handling to match review suggestion by @thomasgibson. --- examples/autoignition-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 714855909..3f6f089a5 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -258,12 +258,12 @@ def my_checkpoint(step, t, dt, state): logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: + if errored: a = 1/0 print(f"{a=}") From 080513e5c324bf88a0d4aa09c0fc4bc7ae29bfaf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 15:43:35 -0500 Subject: [PATCH 054/873] Udpate error handling per @thomasgibson review. --- examples/autoignition-mpi.py | 3 +-- examples/lump-mpi.py | 25 +++++++++++++------------ examples/mixture-mpi.py | 21 ++++++++++----------- examples/pulse-mpi.py | 18 ++++++++++-------- examples/scalar-lump-mpi.py | 19 +++++++++---------- examples/sod-mpi.py | 17 ++++++++--------- examples/vortex-mpi.py | 17 ++++++++--------- 7 files changed, 59 insertions(+), 61 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 3f6f089a5..bb42bc3fc 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -264,8 +264,7 @@ def my_checkpoint(step, t, dt, state): step=step, t=t, overwrite=True) if errored: - a = 1/0 - print(f"{a=}") + raise RuntimeError("Error detected by user checkpoint, exiting.") return state diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 231b9b2fe..cbc6f2b08 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -65,7 +65,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): dim = 3 nel_1d = 16 order = 3 - exittol = .09 t_final = 0.01 current_cfl = 1.0 vel = np.zeros(shape=(dim,)) @@ -158,30 +157,32 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" - if np.max(component_errors) > exittol: - errors = errors + 1 - message += "Solution errors exceed tolerance.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + exittol = .09 + if max(component_errors) > exittol: + errored = True + message += "Solution diverged from exact_mix.\n" + comm = discr.mpi_communicator + if comm is not None: + errored = comm.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored > 0: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: - a = 1/0 - print(f"{a=}") + if errored: + raise RuntimeError("Error detected by user checkpoint, exiting.") return state diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index a3480fffc..5d31c7efc 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -178,30 +178,29 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" - if np.max(component_errors) > exittol: - errors = errors + 1 - message += "Solution errors exceed tolerance.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + if max(component_errors) > exittol: + errored = True + message += "Solution diverged from exact_mix.\n" + errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: - a = 1/0 - print(f"{a=}") + if errored: + raise RuntimeError("Error detected by user checkpoint, exiting.") return state diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 49c82163a..bca955766 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -165,32 +165,34 @@ def my_checkpoint(step, t, dt, state): if do_status: # This is bad, logging already completely replaces this from mirgecom.io import make_status_message dv = eos.dependent_vars(state) + # this is also bad - no option for user customization, field selection status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, cfl=current_cfl, dependent_vars=dv) if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure) \ or check_range_local(discr, "vol", pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + comm = discr.mpi_communicator + if comm is not None: + errored = comm.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: - a = 1/0 - print(f"{a=}") + if errored: + raise RuntimeError("Error detected by user checkpoint, exiting.") return state diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 0bc82a453..07dcab149 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -168,30 +168,29 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" - if np.max(component_errors) > exittol: - errors = errors + 1 + if max(component_errors) > exittol: + errored = True message += "Solution errors exceed tolerance.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: - a = 1/0 - print(f"{a=}") + if errored: + raise RuntimeError("Error detected by user checkpoint, exiting.") return state diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 205afaeeb..f2dd8763d 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -158,30 +158,29 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" if np.max(component_errors) > exittol: - errors = errors + 1 + errored = True message += "Solution errors exceed tolerance.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: - a = 1/0 - print(f"{a=}") + if errored: + raise RuntimeError("Error detected by user checkpoint, exiting.") return state diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 4438bbf52..8cae0411e 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -201,30 +201,29 @@ def my_checkpoint(step, t, dt, state): if rank == 0: logger.info(status_msg) - errors = 0 + errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): - errors = 1 + errored = True message = "Invalid pressure data found.\n" if np.max(component_errors) > exittol: - errors = errors + 1 + errored = True message += "Solution errors exceed tolerance.\n" - errors = discr.mpi_communicator.allreduce(errors, op=MPI.SUM) - if errors > 0: + errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) + if errored: if rank == 0: logger.info("Fluid solution failed health check.") logger.info(message) # do this on all ranks - if do_viz or errors > 0: + if do_viz or errored: from mirgecom.simutil import sim_visualization sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - if errors > 0: - a = 1/0 - print(f"{a=}") + if errored: + raise RuntimeError("Error detected by user checkpoint, exiting.") return state From 355a2516a2e587a3cb9652564ed0987e24a425a4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 17:04:52 -0500 Subject: [PATCH 055/873] Update API per updated grudge --- mirgecom/inviscid.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 08f963fcb..bbcd85726 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -86,7 +86,8 @@ def get_inviscid_timestep(discr, eos, cv): from grudge.dt_utils import characteristic_lengthscales from mirgecom.fluid import compute_wavespeed return ( - characteristic_lengthscales(discr)/compute_wavespeed(discr, eos, cv) + characteristic_lengthscales(cv.array_context, discr) + / compute_wavespeed(discr, eos, cv) ) From df41a5ded2c33a2b3ead04b28b5df06eca24ac1c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 17:05:27 -0500 Subject: [PATCH 056/873] Switch back to grudge proper. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8a73fd734..5a5d4b277 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ psutil --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git@nongeo-factors-per-group#egg=grudge +--editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 382462799abde2b21eb993c20f57781791a01e7c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 17:25:05 -0500 Subject: [PATCH 057/873] Update timestep API per CV array container --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 8eb55bc58..16be6749d 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -73,7 +73,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, from grudge.op import nodal_min mydt = cfl * nodal_min( discr, "vol", - get_inviscid_timestep(discr=discr, eos=eos, q=state) + get_inviscid_timestep(discr=discr, eos=eos, cv=state) ) return min(mydt, dt_left) From 2bce12c83fc3135328143df1912fc4c41b25847b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 18:46:43 -0500 Subject: [PATCH 058/873] Adjust to main merge --- mirgecom/boundary.py | 9 --------- mirgecom/fluid.py | 10 +++------- mirgecom/initializers.py | 2 -- mirgecom/inviscid.py | 8 -------- test/test_init.py | 9 +++------ 5 files changed, 6 insertions(+), 32 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 24a1e1350..fa80c735c 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -51,7 +51,6 @@ from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair from mirgecom.inviscid import inviscid_facial_flux -from mirgecom.fluid import make_conserved from abc import ABCMeta, abstractmethod @@ -632,11 +631,3 @@ def viscous_boundary_flux(self, discr, btag, eos, cv, grad_cv, grad_t, **kwargs) return viscous_facial_flux(discr, eos, cv_tpair=cv_tpair, grad_cv_tpair=s_tpair, t_tpair=t_tpair, grad_t_tpair=grad_t_tpair) -======= - bndry_cv = make_conserved(dim=dim, mass=int_cv.mass, - energy=int_cv.energy, - momentum=ext_mom, - species_mass=int_cv.species_mass) - - return TracePair(btag, interior=int_cv, exterior=bndry_cv) ->>>>>>> main diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 19b43829d..089e1878d 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -380,14 +380,11 @@ def velocity_gradient(discr, cv, grad_cv): velocity = cv.momentum / cv.mass obj_ary = (1/cv.mass)*make_obj_array([grad_cv.momentum[i] - velocity[i]*grad_cv.mass - for i in range(discr.dim)]) - grad_v = np.empty(shape=(discr.dim, cv.dim), dtype=object) + for i in range(cv.dim)]) + grad_v = np.empty(shape=(cv.dim, cv.dim), dtype=object) for idx, v in enumerate(obj_ary): grad_v[idx] = v return grad_v -======= - for i in range(cv.dim)]) ->>>>>>> main def species_mass_fraction_gradient(discr, cv, grad_cv): @@ -423,7 +420,7 @@ def species_mass_fraction_gradient(discr, cv, grad_cv): obj_ary = (1/cv.mass)*make_obj_array([grad_cv.species_mass[i] - y[i]*grad_cv.mass for i in range(nspecies)]) - grad_y = np.empty(shape=(nspecies, discr.dim), dtype=object) + grad_y = np.empty(shape=(nspecies, cv.dim), dtype=object) for idx, v in enumerate(obj_ary): grad_y[idx] = v return grad_y @@ -441,6 +438,5 @@ def compute_wavespeed(dim, eos, cv: ConservedVars): where $\mathbf{v}$ is the flow velocity and c is the speed of sound in the fluid. """ actx = cv.array_context - v = cv.momentum / cv.mass return actx.np.sqrt(np.dot(v, v)) + eos.sound_speed(cv) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 07e7c76c0..a3ba07046 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -988,6 +988,4 @@ def __call__(self, x_vec, eos, *, time=0.0): energy = mass * (internal_energy + kinetic_energy) return make_conserved(dim=self._dim, mass=mass, energy=energy, -======= ->>>>>>> main momentum=mom, species_mass=specmass) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index e7ae063e0..37c9552bb 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -113,8 +113,6 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): return discr.project(cv_tpair.dd, "all_faces", flux_weak) return flux_weak -======= ->>>>>>> main def get_inviscid_timestep(discr, eos, cfl, cv): @@ -133,12 +131,6 @@ def get_inviscid_timestep(discr, eos, cfl, cv): dt = (1.0 - 0.25 * (dim - 1)) / (nel_1d * order ** 2) return cfl * dt -# dt_ngf = dt_non_geometric_factor(discr.mesh) -# dt_gf = dt_geometric_factor(discr.mesh) -# wavespeeds = compute_wavespeed(w,eos=eos) -# max_v = clmath.max(wavespeeds) -# return c*dt_ngf*dt_gf/max_v - def get_inviscid_cfl(discr, eos, dt, cv): """Calculate and return CFL based on current state and timestep.""" diff --git a/test/test_init.py b/test/test_init.py index ed883fe75..d2d85af99 100644 --- a/test/test_init.py +++ b/test/test_init.py @@ -39,8 +39,6 @@ from mirgecom.initializers import Lump from mirgecom.initializers import MulticomponentLump -from mirgecom.fluid import get_num_species - from mirgecom.initializers import SodShock1D from mirgecom.eos import IdealSingleGas @@ -259,7 +257,7 @@ def test_uniform(ctx_factory, dim): assert discr.norm(initsoln.mass - 1.0, np.inf) < tol assert discr.norm(initsoln.energy - 2.5, np.inf) < tol - print(f"Uniform Soln:{cv}") + print(f"Uniform Soln:{initsoln}") eos = IdealSingleGas() p = eos.pressure(initsoln) print(f"Press:{p}") @@ -369,16 +367,15 @@ def test_multilump(ctx_factory, dim): spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes) cv = lump(nodes) - numcvspec = get_num_species(dim, cv.join()) + numcvspec = len(cv.species_mass) print(f"get_num_species = {numcvspec}") - assert get_num_species(dim, cv.join()) == nspecies + assert numcvspec == nspecies assert discr.norm(cv.mass - rho0) == 0.0 p = 0.4 * (cv.energy - 0.5 * np.dot(cv.momentum, cv.momentum) / cv.mass) exp_p = 1.0 errmax = discr.norm(p - exp_p, np.inf) - assert len(cv.species_mass) == nspecies species_mass = cv.species_mass spec_r = make_obj_array([nodes - centers[i] for i in range(nspecies)]) From 70ff6dc6302db3a8a5d1251b8fcbfd0806b0ea0e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 11 Jun 2021 20:24:57 -0500 Subject: [PATCH 059/873] Sharpen the handling of post-stepping (exceptional) io per @majosm. --- examples/autoignition-mpi.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index bb42bc3fc..0ad089b17 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -40,7 +40,8 @@ from mirgecom.simutil import ( inviscid_sim_timestep, check_step, - generate_and_distribute_mesh + generate_and_distribute_mesh, + sim_visualization ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -221,20 +222,15 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) + eos.get_species_source_terms(state)) - def my_checkpoint(step, t, dt, state): + def my_checkpoint(step, t, dt, state, force=False): from mirgecom.simutil import check_step - do_status = check_step(step=step, interval=nstatus) - do_viz = check_step(step=step, interval=nviz) - do_health = check_step(step=step, interval=nhealth) + do_status = force or check_step(step=step, interval=nstatus) + do_viz = force or check_step(step=step, interval=nviz) + do_health = force or check_step(step=step, interval=nhealth) if do_status or do_viz or do_health: dv = eos.dependent_vars(state) reaction_rates = eos.get_production_rates(state) - io_fields = [ - ("cv", state), - ("dv", dv), - ("reaction_rates", reaction_rates) - ] if do_status: # This is bad, logging already completely replaces this from mirgecom.io import make_status_message @@ -245,21 +241,27 @@ def my_checkpoint(step, t, dt, state): errored = False if do_health: + health_message = "" from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure): errored = True - message = "Invalid pressure data found.\n" + health_message += "Invalid pressure data found.\n" comm = discr.mpi_communicator if comm is not None: errored = comm.allreduce(errored, op=MPI.LOR) if errored: if rank == 0: logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks + logger.info(health_message) # do this on all ranks to capture all if do_viz or errored: - from mirgecom.simutil import sim_visualization + reaction_rates = eos.get_production_rates(state) + io_fields = [ + ("cv", state), + ("dv", dv), + ("reaction_rates", reaction_rates) + ] sim_visualization(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -275,11 +277,11 @@ def my_checkpoint(step, t, dt, state): t=current_t, t_final=t_final, eos=eos, dim=dim) if not check_step(current_step, nviz): # If final step not an output step - if rank == 0: + if rank == 0: # Then likely something went wrong logger.info("Checkpointing final state ...") my_checkpoint(current_step, t=current_t, dt=(current_t - checkpoint_t), - state=current_state) + state=current_state, force=True) if __name__ == "__main__": From cccff7f79efe151cdd6552c9d71991296443bd73 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 12:38:59 -0500 Subject: [PATCH 060/873] Sharpen the valid ranges specific to each example, and remove default values in range check --- examples/autoignition-mpi.py | 8 ++++++-- examples/lump-mpi.py | 2 +- examples/mixture-mpi.py | 2 +- examples/pulse-mpi.py | 3 ++- examples/scalar-lump-mpi.py | 3 ++- examples/sod-mpi.py | 2 +- examples/vortex-mpi.py | 8 ++++---- mirgecom/simutil.py | 2 +- test/test_simutil.py | 11 +++++++---- 9 files changed, 25 insertions(+), 16 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 0ad089b17..78155904c 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -244,16 +244,20 @@ def my_checkpoint(step, t, dt, state, force=False): health_message = "" from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure, 1e5, 2.4e5): errored = True health_message += "Invalid pressure data found.\n" + if check_range_local(discr, "vol", dv.temperature, 1.4e3, 3.3e3): + errored = True + health_message += "Temperature data exceeded healthy range.\n" comm = discr.mpi_communicator if comm is not None: errored = comm.allreduce(errored, op=MPI.LOR) if errored: if rank == 0: logger.info("Fluid solution failed health check.") - logger.info(health_message) # do this on all ranks to capture all + if health_message: # capture any rank's health message + logger.info(f"{rank=}:{health_message}") if do_viz or errored: reaction_rates = eos.get_production_rates(state) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index cbc6f2b08..9d5a3cd76 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -161,7 +161,7 @@ def my_checkpoint(step, t, dt, state): if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure, .9, 1.1): errored = True message = "Invalid pressure data found.\n" exittol = .09 diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 5d31c7efc..828adfe6e 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -182,7 +182,7 @@ def my_checkpoint(step, t, dt, state): if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure, 1e5, 1.1e5): errored = True message = "Invalid pressure data found.\n" if max(component_errors) > exittol: diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index bca955766..97a6921dc 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -175,7 +175,8 @@ def my_checkpoint(step, t, dt, state): if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure) \ - or check_range_local(discr, "vol", pressure): + or check_range_local(discr, "vol", pressure, min_value=.8, + max_value=1.5): errored = True message = "Invalid pressure data found.\n" comm = discr.mpi_communicator diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 07dcab149..7b053dbaa 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -172,7 +172,8 @@ def my_checkpoint(step, t, dt, state): if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure, min_value=.9, + max_value=1.1): errored = True message = "Invalid pressure data found.\n" if max(component_errors) > exittol: diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index f2dd8763d..fbf62e87f 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -162,7 +162,7 @@ def my_checkpoint(step, t, dt, state): if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure, .09, 1.1): errored = True message = "Invalid pressure data found.\n" if np.max(component_errors) > exittol: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 8cae0411e..6a7536ca8 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -139,8 +139,8 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) - logmgr.add_watches(["step.max", "t_step.max", "t_log.max", - "min_temperature", "L2_norm_momentum1"]) + logmgr.add_watches(["step.max", "t_step.max", + "min_pressure", "max_pressure"]) try: logmgr.add_watches(["memory_usage_python.max", "memory_usage_gpu.max"]) @@ -205,7 +205,7 @@ def my_checkpoint(step, t, dt, state): if do_health: from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure): + or check_range_local(discr, "vol", dv.pressure, .2, 1.02): errored = True message = "Invalid pressure data found.\n" if np.max(component_errors) > exittol: @@ -229,7 +229,7 @@ def my_checkpoint(step, t, dt, state): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, + pre_step_callback=my_checkpoint, logmgr=logmgr, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 6df9088c3..cc0ed2594 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -125,7 +125,7 @@ def sim_visualization(discr, io_fields, visualizer, vizname, ) -def check_range_local(discr, dd, field, min_value=0, max_value=np.inf): +def check_range_local(discr, dd, field, min_value, max_value): """Check for any negative values.""" return ( op.nodal_min_loc(discr, dd, field) < min_value diff --git a/test/test_simutil.py b/test/test_simutil.py index 572504bf2..63b8990e3 100644 --- a/test/test_simutil.py +++ b/test/test_simutil.py @@ -68,8 +68,9 @@ def test_basic_cfd_healthcheck(actx_factory): pressure = eos.pressure(cv) from mirgecom.simutil import check_range_local - assert check_range_local(discr, "vol", mass) - assert check_range_local(discr, "vol", pressure, min_value=1e-6) + assert check_range_local(discr, "vol", mass, min_value=0, max_value=np.inf) + assert check_range_local(discr, "vol", pressure, min_value=1e-6, + max_value=np.inf) # Let's make another very bad state (nans) mass = 1*ones @@ -99,8 +100,10 @@ def test_basic_cfd_healthcheck(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) pressure = eos.pressure(cv) - assert not check_naninf_local(discr, "vol", pressure) - assert not check_range_local(discr, "vol", pressure) + assert not check_naninf_local(discr, "vol", pressure, min_value=0, + max_value=np.inf) + assert not check_range_local(discr, "vol", pressure, min_value=0, + max_value=np.inf) def test_analytic_comparison(actx_factory): From 1772b86732ce9d5ad9a5b349b09b41e5e33747d0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 13:33:04 -0500 Subject: [PATCH 061/873] Correct call to naninf in test. --- test/test_simutil.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/test_simutil.py b/test/test_simutil.py index 63b8990e3..9f78062db 100644 --- a/test/test_simutil.py +++ b/test/test_simutil.py @@ -100,8 +100,7 @@ def test_basic_cfd_healthcheck(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) pressure = eos.pressure(cv) - assert not check_naninf_local(discr, "vol", pressure, min_value=0, - max_value=np.inf) + assert not check_naninf_local(discr, "vol", pressure) assert not check_range_local(discr, "vol", pressure, min_value=0, max_value=np.inf) From c3518686a3faf3a3ce37c9c4d0975c963f449a54 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 15:22:07 -0500 Subject: [PATCH 062/873] Tweak into place after merge with main. --- mirgecom/boundary.py | 1 - mirgecom/euler.py | 28 +--------------------------- mirgecom/flux.py | 1 - mirgecom/inviscid.py | 7 +++---- mirgecom/simutil.py | 2 +- test/test_init.py | 2 +- 6 files changed, 6 insertions(+), 35 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 2abdc13d1..86563fd7c 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -306,7 +306,6 @@ def __init__(self, userfunc): least one parameter that specifies the coordinates at which to prescribe the solution. """ - from warnings import warn warn("Do not use PrescribedBoundary; use PrescribedInvscidBoundary. This" "boundary type will disappear soon.", DeprecationWarning, stacklevel=2) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 147fb5e13..548b70a8b 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -114,31 +114,6 @@ def euler_operator(discr, eos, boundaries, cv, t=0.0): ) q = -dg_div(discr, inviscid_flux_vol.join(), inviscid_flux_bnd.join()) return make_conserved(discr.dim, q=q) -======= - vol_weak = discr.weak_div(inviscid_flux(discr=discr, eos=eos, cv=cv).join()) - - boundary_flux = ( - _facial_flux(discr=discr, eos=eos, cv_tpair=interior_trace_pair(discr, cv)) - + sum( - _facial_flux( - discr, eos=eos, - cv_tpair=TracePair( - part_pair.dd, - interior=split_conserved(discr.dim, part_pair.int), - exterior=split_conserved(discr.dim, part_pair.ext))) - for part_pair in cross_rank_trace_pairs(discr, cv.join())) - + sum( - _facial_flux( - discr=discr, eos=eos, - cv_tpair=boundaries[btag].boundary_pair( - discr, eos=eos, btag=btag, t=t, cv=cv) - ) - for btag in boundaries) - ).join() - - return split_conserved( - discr.dim, discr.inverse_mass(vol_weak - discr.face_mass(boundary_flux)) - ) def inviscid_operator(discr, eos, boundaries, q, t=0.0): @@ -146,8 +121,7 @@ def inviscid_operator(discr, eos, boundaries, q, t=0.0): from warnings import warn warn("Do not call inviscid_operator; it is now called euler_operator. This" "function will disappear August 1, 2021", DeprecationWarning, stacklevel=2) - return euler_operator(discr, eos, boundaries, split_conserved(discr.dim, q), t) ->>>>>>> main + return euler_operator(discr, eos, boundaries, make_conserved(discr.dim, q=q), t) # By default, run unitless diff --git a/mirgecom/flux.py b/mirgecom/flux.py index b736ae062..c6af9551f 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -122,7 +122,6 @@ def central_vector_flux(trace_pair, normal): def lfr_flux(cv_tpair, f_tpair, normal, lam): - r"""Compute Lax-Friedrichs/Rusanov flux after [Hesthaven_2008]_, Section 6.6. The Lax-Friedrichs/Rusanov flux is calculated as: diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 3033d054b..81e3bd2d7 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -121,19 +121,18 @@ def get_inviscid_timestep(discr, eos, cv): eos: mirgecom.eos.GasEOS Implementing the pressure and temperature functions for returning pressure and temperature as a function of the state q. - cv: :class:`ConservedVars` + cv: :class:`~mirgecom.fluid.ConservedVars` Fluid solution Returns ------- class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ - from grudge.dt_utils import (dt_non_geometric_factor, - dt_geometric_factors) + from grudge.dt_utils import characteristic_length_scales from mirgecom.fluid import compute_wavespeed return ( - dt_non_geometric_factor(discr) * dt_geometric_factors(discr) + characteristic_length_scales(cv.array_context, discr) / compute_wavespeed(eos, cv) ) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ad2941f5a..bd3fa9aa5 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -141,7 +141,7 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, expected_state = exact_soln(x_vec=nodes, eos=eos, time=t) exp_resid = cv - expected_state err_norms = [discr.norm(v, np.inf) for v in exp_resid.join()] - maxerr = discr.norm(ex_resid.join(), np.inf()) + maxerr = discr.norm(exp_resid.join(), np.inf()) if do_viz: io_fields = [ diff --git a/test/test_init.py b/test/test_init.py index ed883fe75..18f03152b 100644 --- a/test/test_init.py +++ b/test/test_init.py @@ -259,7 +259,7 @@ def test_uniform(ctx_factory, dim): assert discr.norm(initsoln.mass - 1.0, np.inf) < tol assert discr.norm(initsoln.energy - 2.5, np.inf) < tol - print(f"Uniform Soln:{cv}") + print(f"Uniform Soln:{initsoln}") eos = IdealSingleGas() p = eos.pressure(initsoln) print(f"Press:{p}") From c93c20d6f8d2f16857c6290216cf72ceb5ec57bf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 15:29:03 -0500 Subject: [PATCH 063/873] Tweak into place after merging disc-init --- examples/doublemach-mpi.py | 1 - mirgecom/inviscid.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 33ee4ccaa..e093054f8 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -37,7 +37,6 @@ from grudge.shortcuts import make_visualizer -from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator from mirgecom.artificial_viscosity import ( av_operator, diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 1996f4879..91dc66f18 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -135,6 +135,7 @@ def get_inviscid_timestep(discr, eos, cv): / compute_wavespeed(eos, cv) ) + def get_inviscid_cfl(discr, eos, dt, cv): """Calculate and return node-local CFL based on current state and timestep. From ed16c58f57d4806447541c893010ddbe20bc7d19 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 15:49:11 -0500 Subject: [PATCH 064/873] Tweak into place after big new merge --- mirgecom/inviscid.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 91dc66f18..9164c902c 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -128,10 +128,10 @@ def get_inviscid_timestep(discr, eos, cv): class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ - from grudge.dt_utils import characteristic_length_scales + from grudge.dt_utils import characteristic_lengthscales from mirgecom.fluid import compute_wavespeed return ( - characteristic_length_scales(cv.array_context, discr) + characteristic_lengthscales(cv.array_context, discr) / compute_wavespeed(eos, cv) ) From a9b799037b97e132b356da5a940de400f370087d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 18:57:22 -0500 Subject: [PATCH 065/873] Use verbs for function names. --- mirgecom/simutil.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index cc0ed2594..d88bae91e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -5,7 +5,7 @@ .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep -.. autofunction:: sim_visualization +.. autofunction:: write_visfile Diagnostic utilities -------------------- @@ -86,11 +86,9 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, return mydt -def sim_visualization(discr, io_fields, visualizer, vizname, - step=0, t=0, overwrite=False, vis_timer=None): - """Visualize the simulation fields. - - Write VTK output for the specified fields. +def write_visfile(discr, io_fields, visualizer, vizname, + step=0, t=0, overwrite=False, vis_timer=None): + """Write VTK output for the fields specified in *io_fields*. Parameters ---------- From 100df7741cd1d89a9b6bb26057918623137b9ce6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Jun 2021 21:42:39 -0500 Subject: [PATCH 066/873] Use new name for visfile util, switch autoignition and vortex over to not use built-in status message --- examples/autoignition-mpi.py | 90 ++++++++++++++++++++++++++++-------- examples/lump-mpi.py | 6 +-- examples/mixture-mpi.py | 4 +- examples/pulse-mpi.py | 6 +-- examples/scalar-lump-mpi.py | 6 +-- examples/sod-mpi.py | 6 +-- examples/vortex-mpi.py | 43 +++++++++++------ mirgecom/steppers.py | 12 +---- 8 files changed, 116 insertions(+), 57 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 78155904c..31d82ffe4 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -30,18 +30,23 @@ from functools import partial from meshmode.array_context import PyOpenCLArrayContext + from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.profiling import PyOpenCLProfilingArrayContext + from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, check_step, generate_and_distribute_mesh, - sim_visualization + write_visfile ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -52,6 +57,14 @@ from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + import cantera import pyrometheus as pyro @@ -59,11 +72,30 @@ @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, use_logmgr=False, + use_leap=False, use_profiling=False, casename=None): """Drive example.""" cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + actx = PyOpenCLProfilingArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + logmgr=logmgr) + else: + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 2 @@ -94,10 +126,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): box_ur = 0.005 debug = False - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - from meshmode.mesh.generation import generate_regular_rect_mesh generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) @@ -109,6 +137,19 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): ) nodes = thaw(actx, discr.nodes()) + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches(["step.max", "t_step.max", + "min_pressure", "max_pressure", + "min_temperature", "max_temperature"]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + # {{{ Set up initial state using Cantera # Use Cantera for initialization @@ -160,7 +201,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - casename = "autoignition" pyrometheus_mechanism = pyro.get_thermochem_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature) @@ -222,22 +262,29 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) + eos.get_species_source_terms(state)) + def post_step_stuff(step, t, dt, state): + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state + def my_checkpoint(step, t, dt, state, force=False): from mirgecom.simutil import check_step do_status = force or check_step(step=step, interval=nstatus) do_viz = force or check_step(step=step, interval=nviz) do_health = force or check_step(step=step, interval=nhealth) + if logmgr: + logmgr.tick_before() + if do_status or do_viz or do_health: dv = eos.dependent_vars(state) reaction_rates = eos.get_production_rates(state) - if do_status: # This is bad, logging already completely replaces this - from mirgecom.io import make_status_message - status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=current_cfl, dependent_vars=dv) + if do_status: # wish to control watch quantities output, too if rank == 0: - logger.info(status_msg) + logger.info(f"time={t}: {dt=},{current_cfl=}\n") errored = False if do_health: @@ -266,8 +313,8 @@ def my_checkpoint(step, t, dt, state, force=False): ("dv", dv), ("reaction_rates", reaction_rates) ] - sim_visualization(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + write_visfile(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") @@ -277,6 +324,7 @@ def my_checkpoint(step, t, dt, state, force=False): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_checkpoint, + post_step_callback=post_step_stuff, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) @@ -289,7 +337,13 @@ def my_checkpoint(step, t, dt, state, force=False): if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) - main(use_leap=False) + logging.basicConfig(format="%(message)s", level=logging.INFO) + use_profiling = True + use_logging = True + use_leap = False + casename = "autoignition" + + main(use_profiling=use_profiling, use_logmgr=use_logging, use_leap=use_leap, + casename=casename) # vim: foldmethod=marker diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 9d5a3cd76..8ca64e5d2 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -177,9 +177,9 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored > 0: - from mirgecom.simutil import sim_visualization - sim_visualization(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + from mirgecom.simutil import write_visfile + write_visfile(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 828adfe6e..ca20bce37 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -195,8 +195,8 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored: - from mirgecom.simutil import sim_visualization - sim_visualization(discr, io_fields, visualizer, vizname=casename, + from mirgecom.simutil import write_visfile + write_visfile(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) if errored: diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 97a6921dc..b10aafa7a 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -188,9 +188,9 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored: - from mirgecom.simutil import sim_visualization - sim_visualization(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + from mirgecom.simutil import write_visfile + write_visfile(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 7b053dbaa..a434835b1 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -186,9 +186,9 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored: - from mirgecom.simutil import sim_visualization - sim_visualization(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + from mirgecom.simutil import write_visfile + write_visfile(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index fbf62e87f..4e4526853 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -175,9 +175,9 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored: - from mirgecom.simutil import sim_visualization - sim_visualization(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + from mirgecom.simutil import write_visfile + write_visfile(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 6a7536ca8..866479cf8 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -51,13 +51,16 @@ from mirgecom.initializers import Vortex2D from mirgecom.eos import IdealSingleGas -from logpyle import IntervalTimer +from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.logging_quantities import (initialize_logmgr, - logmgr_add_many_discretization_quantities, logmgr_add_device_name, - logmgr_add_device_memory_usage) - +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) logger = logging.getLogger(__name__) @@ -175,12 +178,22 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + def post_step_stuff(step, t, dt, state): + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state + def my_checkpoint(step, t, dt, state): from mirgecom.simutil import check_step do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) do_health = check_step(step=step, interval=nhealth) + if logmgr: + logmgr.tick_before() + if do_status or do_viz or do_health: from mirgecom.simutil import compare_fluid_solutions dv = eos.dependent_vars(state) @@ -195,11 +208,12 @@ def my_checkpoint(step, t, dt, state): ] if do_status: - status_msg = ( - "\n------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) if rank == 0: - logger.info(status_msg) + logger.info( + f"time={t}: \n" + "---- errors=" + ",".join("%.3g" % en for en + in component_errors) + ) errored = False if do_health: @@ -218,9 +232,9 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored: - from mirgecom.simutil import sim_visualization - sim_visualization(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + from mirgecom.simutil import write_visfile + write_visfile(discr, io_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") @@ -229,7 +243,8 @@ def my_checkpoint(step, t, dt, state): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, logmgr=logmgr, + pre_step_callback=my_checkpoint, + post_step_callback=post_step_stuff, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) @@ -247,7 +262,7 @@ def my_checkpoint(step, t, dt, state): if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = True + use_profiling = False use_logging = True use_leap = False diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index b069f38e5..3a4413edc 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -27,7 +27,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - from logpyle import set_dt from mirgecom.logging_quantities import set_sim_state @@ -98,12 +97,11 @@ def _advance_state_stepper_func(rhs, timestepper, get_timestep, state = timestepper(state=state, t=t, dt=dt, rhs=rhs) t += dt + istep += 1 if post_step_callback is not None: state = post_step_callback(state=state, step=istep, t=t, dt=dt) - istep += 1 - if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) @@ -170,9 +168,6 @@ def _advance_state_leap(rhs, timestepper, get_timestep, rhs, t, dt, state) while t < t_final: - if logmgr: - logmgr.tick_before() - dt = get_timestep(state=state) if dt < 0: return istep, t, state @@ -195,11 +190,6 @@ def _advance_state_leap(rhs, timestepper, get_timestep, istep += 1 - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return istep, t, state From 6f7ef047595d99e161d4b32ebd5473a278964efa Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Jun 2021 04:46:09 -0500 Subject: [PATCH 067/873] Clean up logging a bit, attempt to use nlog to control logging interval. --- examples/autoignition-mpi.py | 28 +++++++++++++--------- examples/vortex-mpi.py | 46 +++++++++++++++++++++--------------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 31d82ffe4..7a25ab08c 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -114,6 +114,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, nstatus = 1 nviz = 5 nhealth = 1 + nlog = 1 rank = 0 checkpoint_t = current_t current_step = 0 @@ -143,9 +144,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) - logmgr.add_watches(["step.max", "t_step.max", - "min_pressure", "max_pressure", - "min_temperature", "max_temperature"]) + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), + ("max_temperature", "{value:7g})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) @@ -263,7 +271,9 @@ def my_rhs(t, state): + eos.get_species_source_terms(state)) def post_step_stuff(step, t, dt, state): - if logmgr: + do_logend = check_step(step=(step-1), interval=nlog) + + if do_logend and logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) logmgr.tick_after() @@ -271,21 +281,17 @@ def post_step_stuff(step, t, dt, state): def my_checkpoint(step, t, dt, state, force=False): from mirgecom.simutil import check_step - do_status = force or check_step(step=step, interval=nstatus) do_viz = force or check_step(step=step, interval=nviz) do_health = force or check_step(step=step, interval=nhealth) + do_logstart = force or check_step(step=step, interval=nlog) - if logmgr: + if do_logstart and logmgr: logmgr.tick_before() - if do_status or do_viz or do_health: + if do_viz or do_health: dv = eos.dependent_vars(state) reaction_rates = eos.get_production_rates(state) - if do_status: # wish to control watch quantities output, too - if rank == 0: - logger.info(f"time={t}: {dt=},{current_cfl=}\n") - errored = False if do_health: health_message = "" diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 866479cf8..04f5603f8 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -40,7 +40,8 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - generate_and_distribute_mesh + generate_and_distribute_mesh, + check_step ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -106,6 +107,7 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal nstatus = 10 nviz = 10 nhealth = 10 + nlog = 10 rank = 0 checkpoint_t = current_t current_step = 0 @@ -142,8 +144,14 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) - logmgr.add_watches(["step.max", "t_step.max", - "min_pressure", "max_pressure"]) + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) try: logmgr.add_watches(["memory_usage_python.max", "memory_usage_gpu.max"]) @@ -179,47 +187,40 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def post_step_stuff(step, t, dt, state): - if logmgr: + do_log = check_step(step=(step-1), interval=nlog) + if do_log and logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) logmgr.tick_after() return state def my_checkpoint(step, t, dt, state): - from mirgecom.simutil import check_step do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) do_health = check_step(step=step, interval=nhealth) + do_log = check_step(step=step, interval=nlog) - if logmgr: + if do_log and logmgr: logmgr.tick_before() if do_status or do_viz or do_health: from mirgecom.simutil import compare_fluid_solutions - dv = eos.dependent_vars(state) + pressure = eos.pressure(state) vortex_exact = initializer(x_vec=nodes, eos=eos, t=t) component_errors = compare_fluid_solutions(discr, state, vortex_exact) - resid = state - vortex_exact - io_fields = [ - ("cv", state), - ("dv", dv), - ("vortex_exact", vortex_exact), - ("resid", resid) - ] if do_status: if rank == 0: logger.info( - f"time={t}: \n" - "---- errors=" + ",".join("%.3g" % en for en - in component_errors) + "------- errors=" + ",".join("%.3g" % en for en + in component_errors) ) errored = False if do_health: from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .2, 1.02): + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, .2, 1.02): errored = True message = "Invalid pressure data found.\n" if np.max(component_errors) > exittol: @@ -232,6 +233,13 @@ def my_checkpoint(step, t, dt, state): logger.info(message) # do this on all ranks if do_viz or errored: + resid = state - vortex_exact + io_fields = [ + ("cv", state), + ("pressure", pressure), + ("vortex_exact", vortex_exact), + ("resid", resid) + ] from mirgecom.simutil import write_visfile write_visfile(discr, io_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) From 5f31dcf5196b1c8e1e49440e25312b9c3199c688 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sun, 13 Jun 2021 12:53:23 -0500 Subject: [PATCH 068/873] Use better, more descriptive variable names. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andreas Klöckner --- mirgecom/simutil.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 16be6749d..5bc0980fc 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -67,8 +67,8 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, """Return the maximum stable dt.""" mydt = dt dt_left = t_final - t - if dt_left < 0: - return 0.0 + if t_remaining < dt: + return max(0, t_remaining) if constant_cfl is True: from grudge.op import nodal_min mydt = cfl * nodal_min( From 270ea3b3023234ca22ae53533c6fcacc81229aba Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sun, 13 Jun 2021 12:54:55 -0500 Subject: [PATCH 069/873] Use better, more descriptive variable names. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andreas Klöckner --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 5bc0980fc..0dd273427 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -66,7 +66,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, t_final, constant_cfl=False): """Return the maximum stable dt.""" mydt = dt - dt_left = t_final - t + t_remaining = t_final - t if t_remaining < dt: return max(0, t_remaining) if constant_cfl is True: From 6ff984d66909a14d628709f83d6decd85a49846b Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sun, 13 Jun 2021 13:02:18 -0500 Subject: [PATCH 070/873] Update dt calculator to jibe with review suggestions. --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 0dd273427..d0446fa21 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -75,7 +75,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, discr, "vol", get_inviscid_timestep(discr=discr, eos=eos, cv=state) ) - return min(mydt, dt_left) + return mydt class ExactSolutionMismatch(Exception): From 2813e264d7225d9e1bfa3a275ab93dfce49cdf8d Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 14 Jun 2021 06:04:20 -0700 Subject: [PATCH 071/873] Tweak DT finding API for grudge changes --- mirgecom/inviscid.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 7be595dfb..f8957a45d 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -141,15 +141,14 @@ def get_inviscid_timestep(discr, eos, q): class:`~meshmode.dof_array.DOFArray` The maximum stable timestep at each node. """ - from grudge.dt_utils import (dt_non_geometric_factor, - dt_geometric_factors) + from grudge.dt_utils import characteristic_lengthscales from mirgecom.fluid import compute_wavespeed dim = discr.dim cv = split_conserved(dim, q) - + actx = cv.mass.array_context return ( - dt_non_geometric_factor(discr) * dt_geometric_factors(discr) + characteristic_lengthscales(actx, discr) / compute_wavespeed(dim, eos, cv) ) From 68d5551bde6d190b95349a9147d220219a7570c5 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 15 Jun 2021 05:09:57 -0700 Subject: [PATCH 072/873] Tweak the timstep computation just a tad --- mirgecom/simutil.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index b2d824fff..844778198 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -91,16 +91,14 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, t_final, constant_cfl=False): """Return the maximum stable dt.""" mydt = dt - dt_left = t_final - t - if dt_left < 0: - return 0.0 if constant_cfl is True: from grudge.op import nodal_min mydt = cfl * nodal_min( discr, "vol", get_inviscid_timestep(discr=discr, eos=eos, cv=state) ) - return min(mydt, dt_left) + dt_remaining = max(0, t_final - t) + return min(mydt, dt_remaining) class ExactSolutionMismatch(Exception): From b892481a9935caa07497ac69b85528de67bdeff6 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 15 Jun 2021 06:22:25 -0700 Subject: [PATCH 073/873] Add simple health utils needed by production drivers. --- mirgecom/simutil.py | 112 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 86 insertions(+), 26 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 844778198..f01adebd6 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -1,9 +1,25 @@ """Provide some utilities for building simulation applications. +General utilities +----------------- + .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep .. autoexception:: ExactSolutionMismatch +.. autofunction:: write_visfile .. autofunction:: sim_checkpoint +.. autofunction:: write_restart_file + +Diagnostic utilities +-------------------- + +.. autofunction:: compare_fluid_solutions +.. autofunction:: check_naninf_local +.. autofunction:: check_range_local + +Mesh utilities +-------------- + .. autofunction:: generate_and_distribute_mesh """ @@ -30,40 +46,26 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - import logging - +import pickle import numpy as np + from meshmode.dof_array import thaw from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? +from meshmode.dof_array import thaw, flatten, unflatten # noqa +from mirgecom.fluid import ConservedVars logger = logging.getLogger(__name__) -class MIRGEComParameters: - """Simple parameters object.""" - - def __init__(self, **kwargs): - """Initialize parameters object.""" - self._parameters = kwargs - - @property - def parameters(self): - """Grab the parameters.""" - return self._parameters - - def update(self, **kwargs): - """Update parameters with new or replacement parameters or values.""" - self._parameters.update(kwargs) - - def read(self, file_path): - """Read new or replacement values from a file at system path *file_path*.""" - import importlib.util - spec = importlib.util.spec_from_file_location("user_parameters", file_path) - foo = importlib.util.module_from_spec(spec) - spec.loader.exec_module(foo) - self._parameters.update(foo.mirgecom_parameters.parameters) +def write_restart_file(actx, restart_dictionary, filename): + from pytools.obj_array import obj_array_vectorize + state = restart_dictionary["state"].join() + restart_dictionary["state"] = obj_array_vectorize(actx.to_numpy, + flatten(state)) + with open(filename, "wb") as f: + pickle.dump(restart_dictionary, f) def check_step(step, interval): @@ -103,7 +105,6 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, class ExactSolutionMismatch(Exception): """Exception class for solution mismatch. - .. attribute:: step .. attribute:: t .. attribute:: state @@ -116,6 +117,43 @@ def __init__(self, step, t, state): self.state = state +def write_visfile(discr, io_fields, visualizer, vizname, + step=0, t=0, overwrite=False, vis_timer=None): + """Write VTK output for the fields specified in *io_fields*. + + Parameters + ---------- + visualizer: + A :class:`meshmode.discretization.visualization.Visualizer` + VTK output object. + io_fields: + List of tuples indicating the (name, data) for each field to write. + """ + from contextlib import nullcontext + from mirgecom.io import make_rank_fname, make_par_fname + + comm = discr.mpi_communicator + rank = 0 + if comm is not None: + rank = comm.Get_rank() + + rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) + + if vis_timer: + ctm = vis_timer.start_sub_timer() + else: + ctm = nullcontext() + + with ctm: + visualizer.write_parallel_vtk_file( + comm, rank_fn, io_fields, + overwrite=overwrite, + par_manifest_filename=make_par_fname( + basename=vizname, step=step, t=t + ) + ) + + def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, step=0, t=0, dt=0, cfl=1.0, nstatus=-1, nviz=-1, exittol=1e-16, constant_cfl=False, comm=None, viz_fields=None, overwrite=False, @@ -187,6 +225,28 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, raise ExactSolutionMismatch(step, t=t, state=cv) +def check_range_local(discr, dd, field, min_value, max_value): + """Check for any negative values.""" + from grudge.op import nodal_min_loc, nodal_max_loc + return ( + nodal_min_loc(discr, dd, field) < min_value + or nodal_max_loc(discr, dd, field) > max_value + ) + + +def check_naninf_local(discr, dd, field): + """Check for any NANs or Infs in the field.""" + from grudge.op import nodal_sum_loc + s = nodal_sum_loc(discr, dd, field) + return np.isnan(s) or (s == np.inf) + + +def compare_fluid_solutions(discr, red_state, blue_state): + """Return inf norm of (*red_state* - *blue_state*) for each component.""" + resid = red_state - blue_state + return [discr.norm(v, np.inf) for v in resid.join()] + + def generate_and_distribute_mesh(comm, generate_mesh): """Generate a mesh and distribute it among all ranks in *comm*. From efbd1f1471579093b216a0b28b331059b88cf4eb Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 15 Jun 2021 06:51:16 -0700 Subject: [PATCH 074/873] Placate the linters, and remove unneeded util test. --- mirgecom/simutil.py | 4 ++- test/test_util.py | 64 --------------------------------------------- 2 files changed, 3 insertions(+), 65 deletions(-) delete mode 100644 test/test_util.py diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index f01adebd6..9eedb67c7 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -54,12 +54,13 @@ from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? from meshmode.dof_array import thaw, flatten, unflatten # noqa -from mirgecom.fluid import ConservedVars +from mirgecom.fluid import ConservedVars # noqa logger = logging.getLogger(__name__) def write_restart_file(actx, restart_dictionary, filename): + """Pickle the simulation data into a file for use in restarting.""" from pytools.obj_array import obj_array_vectorize state = restart_dictionary["state"].join() restart_dictionary["state"] = obj_array_vectorize(actx.to_numpy, @@ -105,6 +106,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, class ExactSolutionMismatch(Exception): """Exception class for solution mismatch. + .. attribute:: step .. attribute:: t .. attribute:: state diff --git a/test/test_util.py b/test/test_util.py deleted file mode 100644 index 822c3cd7e..000000000 --- a/test/test_util.py +++ /dev/null @@ -1,64 +0,0 @@ -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" - -import logging -from mirgecom.simutil import MIRGEComParameters - -logger = logging.getLogger(__name__) - - -def test_mirgecom_parameters(): - """Quick test of MIRGE-Com parameters container.""" - test_params = MIRGEComParameters(dim=2, order=3, casename="hello") - my_params = test_params.parameters - print(f"{test_params.parameters}") - assert len(my_params) == 3 - assert my_params["dim"] == 2 - assert my_params["order"] == 3 - assert my_params["casename"] == "hello" - - test_params.update(order=4, casename="goodbye", hello="hello") - my_params = test_params.parameters - assert len(my_params) == 4 - assert my_params["order"] == 4 - assert my_params["dim"] == 2 - assert my_params["casename"] == "goodbye" - assert my_params["hello"] == "hello" - - params_string = ( - "from mirgecom.simutil import MIRGEComParameters" - "\nmirgecom_parameters = MIRGEComParameters(" - "\ndim=5, newparam='string')" - ) - - file1 = open("test_params_fjsfjksd.py", "a") - file1.write(params_string) - file1.close() - test_params.read("test_params_fjsfjksd.py") - my_params = test_params.parameters - assert len(my_params) == 5 - assert my_params["dim"] == 5 - assert my_params["newparam"] == "string" - import os - os.remove("test_params_fjsfjksd.py") From d972dd091809724c661a116120b392b5559ae57f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 15 Jun 2021 19:27:36 -0500 Subject: [PATCH 075/873] Add some restart utils for convenience --- mirgecom/fluid.py | 6 +++++- mirgecom/simutil.py | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 9fd4e68da..5fadbcd3f 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -321,8 +321,12 @@ def join_conserved(dim, mass, energy, momentum, species_mass=None): def make_conserved(dim, mass=None, energy=None, momentum=None, species_mass=None, - q=None): + q=None, scalar_quantities=None, vector_quantities=None): """Create :class:`ConservedVars` from separated conserved quantities.""" + if scalar_quantities is not None: + return split_conserved(dim, q=scalar_quantities) + if vector_quantities is not None: + return split_conserved(dim, q=vector_quantities) if q is not None: return split_conserved(dim, q=q) if mass is None or energy is None or momentum is None: diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 9eedb67c7..0cb646b98 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -9,6 +9,8 @@ .. autofunction:: write_visfile .. autofunction:: sim_checkpoint .. autofunction:: write_restart_file +.. autofunction:: make_fluid_restart_state +.. autofunction:: read_restart_data Diagnostic utilities -------------------- @@ -54,11 +56,25 @@ from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? from meshmode.dof_array import thaw, flatten, unflatten # noqa -from mirgecom.fluid import ConservedVars # noqa +from mirgecom.fluid import make_conserved logger = logging.getLogger(__name__) +def read_restart_data(filename): + """Read the raw restart data dictionary from the given pickle restart file.""" + with open(filename, "rb") as f: + restart_data = pickle.load(f) + return restart_data + + +def make_fluid_restart_state(actx, discr, restart_q): + """Make a :class:`~mirgecom.fluid.ConservedVars` from pickled restart data.""" + from pytools.obj_array import obj_array_vectorize + q = unflatten(actx, discr, obj_array_vectorize(actx.from_numpy, restart_q)) + return make_conserved(discr.dim, q=q) + + def write_restart_file(actx, restart_dictionary, filename): """Pickle the simulation data into a file for use in restarting.""" from pytools.obj_array import obj_array_vectorize From 146cf6f2c67fe273acc85543f36f55911e390975 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 16 Jun 2021 14:42:08 -0500 Subject: [PATCH 076/873] Sharpen doc slightly --- mirgecom/inviscid.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index bbcd85726..b14d2cad3 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -67,7 +67,9 @@ def inviscid_flux(discr, eos, cv): def get_inviscid_timestep(discr, eos, cv): - """Routine returns the node-local maximum stable inviscid timestep. + """Routine returns the node-local maximum stable dt for inviscid fluid. + + The maximum stable timestep is computed from the acoustic wavespeed. Parameters ---------- From ce3373ef6b50f320b5c5c14fd4d3c785ed8b1025 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 16 Jun 2021 14:42:38 -0500 Subject: [PATCH 077/873] Sharpen doc slightly, and succintify routine a bit --- mirgecom/simutil.py | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d0446fa21..d4cd72de5 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -64,18 +64,51 @@ def check_step(step, interval): def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, t_final, constant_cfl=False): - """Return the maximum stable dt.""" + """Return the maximum stable dt for inviscid fluid simulation. + + This routine returns *dt*, the users defined constant timestep, or + *max_dt*, the maximum domain-wide stability-limited + timestep for an inviscid fluid simulation. It calls the collective: + :func:`~grudge.op.nodal_min` on the inside which makes it + domain-wide regardless of parallel decomposition. + + Two modes are supported: + - Constant DT mode: returns the minimum of (t_final-t, dt) + - Constant CFL mode: returns (cfl * max_dt) + + Parameters + ---------- + discr + Grudge discretization or discretization collection? + state: :class:`~mirgecom.fluid.ConservedVars` + The fluid state. + t: float + Current time + t_final: float + Final time + dt: float + The current timestep + cfl: float + The current CFL number + eos: :class:`~mirgecom.eos.GasEOS` + Gas equation-of-state supporting speed_of_sound + constant_cfl: bool + True if running constant CFL mode + + Returns + ------- + float + The maximum stable DT based on inviscid fluid acoustic wavespeed. + """ mydt = dt - t_remaining = t_final - t - if t_remaining < dt: - return max(0, t_remaining) - if constant_cfl is True: + t_remaining = max(0, t_final - t) + if constant_cfl: from grudge.op import nodal_min mydt = cfl * nodal_min( discr, "vol", get_inviscid_timestep(discr=discr, eos=eos, cv=state) ) - return mydt + return min(t_remaining, mydt) class ExactSolutionMismatch(Exception): From b4779d486ef14650b121804223dc0dec51e54dfa Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 16 Jun 2021 16:13:42 -0500 Subject: [PATCH 078/873] Add constant CFL example --- examples/mixture-fixed-cfl-mpi.py | 313 ++++++++++++++++++++++++++++++ mirgecom/steppers.py | 26 +-- 2 files changed, 327 insertions(+), 12 deletions(-) create mode 100644 examples/mixture-fixed-cfl-mpi.py diff --git a/examples/mixture-fixed-cfl-mpi.py b/examples/mixture-fixed-cfl-mpi.py new file mode 100644 index 000000000..816dbe496 --- /dev/null +++ b/examples/mixture-fixed-cfl-mpi.py @@ -0,0 +1,313 @@ +"""Demonstrate combustive mixture with constant CFL mode.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial + +from meshmode.array_context import PyOpenCLArrayContext +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer + + +from mirgecom.euler import euler_operator +from mirgecom.simutil import ( + check_step, + generate_and_distribute_mesh, + ExactSolutionMismatch +) +from mirgecom.inviscid import ( + get_inviscid_timestep, + get_inviscid_cfl +) +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import AdiabaticSlipBoundary +from mirgecom.initializers import MixtureInitializer +from mirgecom.eos import PyrometheusMixture + +import cantera +import pyrometheus as pyro + +logger = logging.getLogger(__name__) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_leap=False): + """Drive example.""" + cl_ctx = ctx_factory() + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + dim = 2 + nel_1d = 8 + order = 1 + + # This example runs only 3 steps by default (to keep CI ~short) + # With the mixture defined below, equilibrium is achieved at ~40ms + # To run to equlibrium, set t_final >= 40ms. + t_final = 1e-7 + current_cfl = 0.01 + velocity = np.zeros(shape=(dim,)) + current_dt = 1e-9 + current_t = 0 + constant_cfl = True + nstatus = 1 + nviz = 2 + rank = 0 + checkpoint_t = current_t + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step + box_ll = -0.005 + box_ur = 0.005 + error_state = False + debug = False + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) + local_nelements = local_mesh.nelements + + discr = EagerDGDiscretization( + actx, local_mesh, order=order, mpi_communicator=comm + ) + nodes = thaw(actx, discr.nodes()) + + # {{{ Set up initial state using Cantera + + # Use Cantera for initialization + # -- Pick up a CTI for the thermochemistry config + # --- Note: Users may add their own CTI file by dropping it into + # --- mirgecom/mechanisms alongside the other CTI files. + from mirgecom.mechanisms import get_mechanism_cti + mech_cti = get_mechanism_cti("uiuc") + + cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) + nspecies = cantera_soln.n_species + + # Initial temperature, pressure, and mixutre mole fractions are needed to + # set up the initial state in Cantera. + init_temperature = 1500.0 # Initial temperature hot enough to burn + # Parameters for calculating the amounts of fuel, oxidizer, and inert species + equiv_ratio = 1.0 + ox_di_ratio = 0.21 + stoich_ratio = 3.0 + # Grab the array indices for the specific species, ethylene, oxygen, and nitrogen + i_fu = cantera_soln.species_index("C2H4") + i_ox = cantera_soln.species_index("O2") + i_di = cantera_soln.species_index("N2") + x = np.zeros(nspecies) + # Set the species mole fractions according to our desired fuel/air mixture + x[i_fu] = (ox_di_ratio*equiv_ratio)/(stoich_ratio+ox_di_ratio*equiv_ratio) + x[i_ox] = stoich_ratio*x[i_fu]/equiv_ratio + x[i_di] = (1.0-ox_di_ratio)*x[i_ox]/ox_di_ratio + # Uncomment next line to make pylint fail when it can't find cantera.one_atm + one_atm = cantera.one_atm # pylint: disable=no-member + # one_atm = 101325.0 + + # Let the user know about how Cantera is being initilized + print(f"Input state (T,P,X) = ({init_temperature}, {one_atm}, {x}") + # Set Cantera internal gas temperature, pressure, and mole fractios + cantera_soln.TPX = init_temperature, one_atm, x + # Pull temperature, total density, mass fractions, and pressure from Cantera + # We need total density, and mass fractions to initialize the fluid/gas state. + can_t, can_rho, can_y = cantera_soln.TDY + can_p = cantera_soln.P + # *can_t*, *can_p* should not differ (significantly) from user's initial data, + # but we want to ensure that we use exactly the same starting point as Cantera, + # so we use Cantera's version of these data. + + # }}} + + # {{{ Create Pyrometheus thermochemistry object & EOS + + # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and + # generates a set of methods to calculate chemothermomechanical properties and + # states for this particular mechanism. + casename = "mixture-adaptive" + pyrometheus_mechanism = pyro.get_thermochem_class(cantera_soln)(actx.np) + eos = PyrometheusMixture(pyrometheus_mechanism, + temperature_guess=init_temperature) + + # }}} + + # {{{ MIRGE-Com state initialization + + # Initialize the fluid/gas state with Cantera-consistent data: + # (density, pressure, temperature, mass_fractions) + print(f"Cantera state (rho,T,P,Y) = ({can_rho}, {can_t}, {can_p}, {can_y}") + initializer = MixtureInitializer(dim=dim, nspecies=nspecies, + pressure=can_p, temperature=can_t, + massfractions=can_y, velocity=velocity) + + my_boundary = AdiabaticSlipBoundary() + boundaries = {BTAG_ALL: my_boundary} + current_state = initializer(eos=eos, x_vec=nodes, t=0) + + # Inspection at physics debugging time + if debug: + print("Initial MIRGE-Com state:") + print(f"{current_state=}") + print(f"Initial DV pressure: {eos.pressure(current_state)}") + print(f"Initial DV temperature: {eos.temperature(current_state)}") + + # }}} + + visualizer = make_visualizer(discr) + initname = initializer.__class__.__name__ + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=initname, + eosname=eosname, casename=casename) + + # Cantera equilibrate calculates the expected end state @ chemical equilibrium + # i.e. the expected state after all reactions + cantera_soln.equilibrate("UV") + eq_temperature, eq_density, eq_mass_fractions = cantera_soln.TDY + eq_pressure = cantera_soln.P + + # Report the expected final state to the user + if rank == 0: + logger.info(init_message) + logger.info(f"Expected equilibrium state:" + f" {eq_pressure=}, {eq_temperature=}," + f" {eq_density=}, {eq_mass_fractions=}") + + def my_rhs(t, state): + return (euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + + eos.get_species_source_terms(state)) + + def mixture_prestep_function(step, t, dt, state): + do_viz = check_step(step, nviz) + viz_fields = [("cv", state)] + current_dt = dt + + if constant_cfl: # no matter what + local_dt = get_inviscid_timestep(discr, eos=eos, cv=state) + from grudge.op import nodal_min + current_dt = current_cfl * nodal_min(discr, "vol", local_dt) + elif do_viz: # only if visualizing + local_cfl = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) + if do_viz: # extend viz field if viz time + dv = eos.dependent_vars(state) + viz_fields.append(("dv", dv)) + # only if vizzing, calculate reaction rates + reaction_rates = eos.get_production_rates(state) + viz_fields.append(("reaction_rates", reaction_rates)) + if constant_cfl: + viz_fields.append(("dt", local_dt)) + else: + viz_fields.append(("cfl", local_cfl)) + + errors = current_dt < 0 or np.isnan(current_dt) or current_dt == np.inf + + if do_viz or errors: + from mirgecom.io import make_rank_fname, make_par_fname + rank_fn = make_rank_fname(basename=casename, rank=rank, step=step, t=t) + visualizer.write_parallel_vtk_file( + comm, rank_fn, viz_fields, overwrite=True, + par_manifest_filename=make_par_fname( + basename=casename, step=step, t=t + ) + ) + + if check_step(step, nstatus) or errors: + if not do_viz: + dv = eos.dependent_vars(state) + from grudge.op import nodal_max + min_temperature = nodal_min(discr, "vol", dv.temperature) + max_temperature = nodal_max(discr, "vol", dv.temperature) + min_pressure = nodal_min(discr, "vol", dv.pressure) + max_pressure = nodal_max(discr, "vol", dv.pressure) + if rank == 0: + logger.info(f"\nStep:{step}, Time:{t}, DT:{current_dt}," + f"CFL:{current_cfl}\n" + f"---- P({min_pressure}, {max_pressure}) " + f"T({min_temperature}, {max_temperature})\n") + + # this exit is safe, errors(current_dt) is already collective + if errors: + logger.info("Fatal error: Invalid simulation DT") + import sys + sys.exit() + + t_remaining = max(0, t_final - t) + return state, min(t_remaining, current_dt) + + try: + (current_step, current_t, current_state) = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + checkpoint=mixture_prestep_function, state=current_state, + t=current_t, t_final=t_final) + + except ExactSolutionMismatch as ex: + error_state = True + current_step = ex.step + current_t = ex.t + current_state = ex.state + + if not check_step(current_step, nviz): # If final step not an output step + if rank == 0: + logger.info("Checkpointing final state ...") + mixture_prestep_function(current_step, t=current_t, + dt=(current_t - checkpoint_t), + state=current_state) + + if current_t - t_final < 0: + error_state = True + + if error_state: + raise ValueError("Simulation did not complete successfully.") + + if rank == 0: + logger.info(f"Simulation finished at time {current_t=}.") + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + main(use_leap=False) + +# vim: foldmethod=marker diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index deb54f45c..adf32dfd0 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -32,8 +32,9 @@ from mirgecom.logging_quantities import set_sim_state -def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, - state, t_final, t=0.0, istep=0, logmgr=None, eos=None, dim=None): +def _advance_state_stepper_func(rhs, timestepper, t_final, state, t=0.0, istep=0, + dt=0, get_timestep=None, logmgr=None, eos=None, + checkpoint=None, dim=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -80,12 +81,13 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, if logmgr: logmgr.tick_before() - dt = get_timestep(state=state) - if dt < 0: - return istep, t, state + if get_timestep: + dt = get_timestep(state=state) + if dt < 0: + return istep, t, state if checkpoint: - checkpoint(state=state, step=istep, t=t, dt=dt) + state, dt = checkpoint(state=state, step=istep, t=t, dt=dt) state = timestepper(state=state, t=t, dt=dt, rhs=rhs) @@ -212,9 +214,9 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, +def advance_state(rhs, timestepper, state, t_final, dt=0, component_id="state", t=0.0, istep=0, logmgr=None, - eos=None, dim=None): + eos=None, dim=None, checkpoint=None, get_timestep=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -281,9 +283,9 @@ def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, else: (current_step, current_t, current_state) = \ _advance_state_stepper_func(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, istep=istep, - logmgr=logmgr, eos=eos, dim=dim) + checkpoint=checkpoint, dt=dt, + get_timestep=get_timestep, state=state, + t=t, t_final=t_final, istep=istep, + logmgr=logmgr, eos=eos, dim=dim) return current_step, current_t, current_state From 337b647cc7a51144d6eaca03869e030913cc3db6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 16 Jun 2021 16:16:48 -0500 Subject: [PATCH 079/873] Tweak status message just a bit... logging will take over soon. --- examples/mixture-fixed-cfl-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/mixture-fixed-cfl-mpi.py b/examples/mixture-fixed-cfl-mpi.py index 816dbe496..38c0ec772 100644 --- a/examples/mixture-fixed-cfl-mpi.py +++ b/examples/mixture-fixed-cfl-mpi.py @@ -265,8 +265,8 @@ def mixture_prestep_function(step, t, dt, state): if rank == 0: logger.info(f"\nStep:{step}, Time:{t}, DT:{current_dt}," f"CFL:{current_cfl}\n" - f"---- P({min_pressure}, {max_pressure}) " - f"T({min_temperature}, {max_temperature})\n") + f"---- P({min_pressure}, {max_pressure})\n" + f"---- T({min_temperature}, {max_temperature})\n") # this exit is safe, errors(current_dt) is already collective if errors: From 0c9c459bb8f3d76e6df8a5c5544831b6f9cb15d0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 16 Jun 2021 16:39:04 -0500 Subject: [PATCH 080/873] Make sim_checkpoint return state, dt --- mirgecom/simutil.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d4cd72de5..58c8c2fa9 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -134,7 +134,7 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, do_viz = check_step(step=step, interval=nviz) do_status = check_step(step=step, interval=nstatus) if do_viz is False and do_status is False: - return 0 + return cv, dt dependent_vars = eos.dependent_vars(cv) @@ -196,6 +196,8 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, if maxerr > exittol: raise ExactSolutionMismatch(step, t=t, state=cv) + return cv, dt + def generate_and_distribute_mesh(comm, generate_mesh): """Generate a mesh and distribute it among all ranks in *comm*. From b4c1f27e5248c85325d0889ac3e5c08818b30b76 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 17 Jun 2021 11:01:23 -0500 Subject: [PATCH 081/873] Add user-defined quantity logging from #391 for production use. --- mirgecom/logging_quantities.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index 08320e764..3b280158c 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -227,6 +227,30 @@ def set_state_vars(self, state_vars: np.ndarray) -> None: # }}} +# {{{ User-defined quantities + + +class LogUserQuantity(LogQuantity): + """Logging support for arbitrary user quantities.""" + + def __init__(self, name="user_quantity", value=None, user_function=None) -> None: + """Initialize the user's log quantity.""" + LogQuantity.__init__(self, name, "1") + self._value = value + self._uf = user_function + + def set_quantity(self, value) -> None: + """Set the user quantity to be used in calculating the logged value.""" + self._value = value + + def __call__(self) -> float: + """Return the value of cfl.""" + if self._uf: + return self._uf(self._value) + return self._value + +# }}} + # {{{ Discretization-based quantities From 43dd81866c7d40c1df76e4c4e038118af269b871 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 21 Jun 2021 10:49:57 -0500 Subject: [PATCH 082/873] Add restart module for production --- mirgecom/restart.py | 58 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 mirgecom/restart.py diff --git a/mirgecom/restart.py b/mirgecom/restart.py new file mode 100644 index 000000000..d83b58fa5 --- /dev/null +++ b/mirgecom/restart.py @@ -0,0 +1,58 @@ +"""Provide some utilities for restarting simulations. + +.. autofunction:: read_restart_data +.. autofunction:: write_restart_file +.. autofunction:: make_fluid_state + +""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import pickle +from meshmode.dof_array import array_context_for_pickling + + +def read_restart_data(actx, filename): + """Read the raw restart data dictionary from the given pickle restart file.""" + with array_context_for_pickling(actx): + with open(filename, "rb") as f: + return pickle.load(f) + + +def write_restart_file(actx, restart_data, filename, comm=None): + """Pickle the simulation data into a file for use in restarting.""" + rank = 0 + if comm: + rank = comm.Get_rank() + if rank == 0: + import os + rst_dir = os.path.dirname(filename) + if not os.path.exists(rst_dir): + os.makedirs(rst_dir) + if comm: + comm.barrier() + with array_context_for_pickling(actx): + with open(filename, "wb") as f: + pickle.dump(restart_data, f) From 731ee2ca9c65331d041674124a514f3b08f6e2f9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 21 Jun 2021 11:03:45 -0500 Subject: [PATCH 083/873] Add restart capability to autoignition --- examples/autoignition-mpi.py | 62 +++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index bcbe668c4..41099e8c9 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -60,7 +60,8 @@ @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, casename="autoignition", use_leap=False, + restart_step=None, restart_name=None): """Drive example.""" cl_ctx = ctx_factory() queue = cl.CommandQueue(cl_ctx) @@ -82,6 +83,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nviz = 5 + nrestart = 5 rank = 0 checkpoint_t = current_t current_step = 0 @@ -98,12 +100,31 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() - - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - local_nelements = local_mesh.nelements + nproc = comm.Get_size() + + restart_file_pattern = "{casename}-{step:04d}-{rank:04d}.pkl" + restart_path = "restart_data/" + if restart_step: + if not restart_name: + restart_name = casename + rst_filename = ( + restart_path + + restart_file_pattern.format(casename=restart_name, + step=restart_step, rank=rank) + ) + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nproc + else: + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm @@ -179,7 +200,13 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): my_boundary = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: my_boundary} - current_state = initializer(eos=eos, x_vec=nodes, time=0) + if restart_step: + current_t = restart_data["t"] + current_step = restart_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = initializer(eos=eos, x_vec=nodes, time=0) # Inspection at physics debugging time if debug: @@ -224,6 +251,25 @@ def my_rhs(t, state): + eos.get_species_source_terms(state)) def my_checkpoint(step, t, dt, state): + if check_step(step, nrestart) and step != restart_step: + rst_filename = ( + restart_path + + restart_file_pattern.format(casename=casename, step=step, + rank=rank) + ) + rst_data = { + "local_mesh": local_mesh, + "state": current_state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": nproc + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_filename, comm) + + # awful - computes potentially expensive viz quantities + # regardless of whether it is time to viz reaction_rates = eos.get_production_rates(state) local_cfl = get_inviscid_cfl(discr, eos=eos, dt=current_dt, cv=state) viz_fields = [("reaction_rates", reaction_rates), From df4995da29ccd51aabf062cabd8bff170f2ff6c6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 21 Jun 2021 11:05:12 -0500 Subject: [PATCH 084/873] Rip out old restart interface. --- mirgecom/simutil.py | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 0cb646b98..28168cd65 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -8,9 +8,6 @@ .. autoexception:: ExactSolutionMismatch .. autofunction:: write_visfile .. autofunction:: sim_checkpoint -.. autofunction:: write_restart_file -.. autofunction:: make_fluid_restart_state -.. autofunction:: read_restart_data Diagnostic utilities -------------------- @@ -49,42 +46,15 @@ THE SOFTWARE. """ import logging -import pickle import numpy as np from meshmode.dof_array import thaw from mirgecom.io import make_status_message from mirgecom.inviscid import get_inviscid_timestep # bad smell? -from meshmode.dof_array import thaw, flatten, unflatten # noqa -from mirgecom.fluid import make_conserved logger = logging.getLogger(__name__) -def read_restart_data(filename): - """Read the raw restart data dictionary from the given pickle restart file.""" - with open(filename, "rb") as f: - restart_data = pickle.load(f) - return restart_data - - -def make_fluid_restart_state(actx, discr, restart_q): - """Make a :class:`~mirgecom.fluid.ConservedVars` from pickled restart data.""" - from pytools.obj_array import obj_array_vectorize - q = unflatten(actx, discr, obj_array_vectorize(actx.from_numpy, restart_q)) - return make_conserved(discr.dim, q=q) - - -def write_restart_file(actx, restart_dictionary, filename): - """Pickle the simulation data into a file for use in restarting.""" - from pytools.obj_array import obj_array_vectorize - state = restart_dictionary["state"].join() - restart_dictionary["state"] = obj_array_vectorize(actx.to_numpy, - flatten(state)) - with open(filename, "wb") as f: - pickle.dump(restart_dictionary, f) - - def check_step(step, interval): """ Check step number against a user-specified interval. From 93379b8ad148de2f5e6859a25ffd9616a9506d7d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 21 Jun 2021 12:10:15 -0500 Subject: [PATCH 085/873] Do not create directory unless pathname is non-empty. --- mirgecom/restart.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/restart.py b/mirgecom/restart.py index d83b58fa5..455ea1fde 100644 --- a/mirgecom/restart.py +++ b/mirgecom/restart.py @@ -49,7 +49,7 @@ def write_restart_file(actx, restart_data, filename, comm=None): if rank == 0: import os rst_dir = os.path.dirname(filename) - if not os.path.exists(rst_dir): + if rst_dir and not os.path.exists(rst_dir): os.makedirs(rst_dir) if comm: comm.barrier() From d3256a0322677e3fc3a3ac5f313d3ec604963dbe Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 21 Jun 2021 12:57:30 -0500 Subject: [PATCH 086/873] Create viz directory if it dne. --- mirgecom/simutil.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 28168cd65..47e3b520f 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -122,11 +122,19 @@ def write_visfile(discr, io_fields, visualizer, vizname, comm = discr.mpi_communicator rank = 0 - if comm is not None: + if comm: rank = comm.Get_rank() rank_fn = make_rank_fname(basename=vizname, rank=rank, step=step, t=t) + if rank == 0: + import os + viz_dir = os.path.dirname(rank_fn) + if viz_dir and not os.path.exists(viz_dir): + os.makedirs(viz_dir) + if comm: + comm.barrier() + if vis_timer: ctm = vis_timer.start_sub_timer() else: From 49e0c56d7fac926f3e812a8c9b5e1e7a89001fa8 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 21 Jun 2021 18:44:49 -0700 Subject: [PATCH 087/873] Memoize DV on CV --- mirgecom/eos.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 920813649..7d282d9ec 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -38,6 +38,7 @@ from dataclasses import dataclass import numpy as np +from pytools import memoize_in from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import ConservedVars, make_conserved @@ -428,9 +429,19 @@ def pressure(self, cv: ConservedVars): p = (\gamma_{\mathtt{mix}} - 1)e """ - temperature = self.temperature(cv) - y = self.species_fractions(cv) - return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) + @memoize_in(cv, (PyrometheusMixture.pressure, + type(self._pyrometheus_mech))) + def get(): + temperature = self.temperature(cv) + y = self.species_fractions(cv) + press = self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) + # from meshmode.dof_array import freeze + # return freeze(cv.array_context, press) + return press + + # from meshmode.dof_array import thaw + # return thaw(cv.array_context, get()) + return get() def sound_speed(self, cv: ConservedVars): r"""Get the speed of sound in the gas. @@ -445,6 +456,7 @@ def sound_speed(self, cv: ConservedVars): c2 = (self.gamma(cv) * self.pressure(cv)) / cv.mass return actx.np.sqrt(c2) + def temperature(self, cv: ConservedVars): r"""Get the thermodynamic temperature of the gas. @@ -456,9 +468,20 @@ def temperature(self, cv: ConservedVars): T = \frac{(\gamma_{\mathtt{mix}} - 1)e}{R_s \rho} """ - y = self.species_fractions(cv) - e = self.internal_energy(cv) / cv.mass - return self._pyrometheus_mech.get_temperature(e, self._tguess, y, True) + @memoize_in(cv, (PyrometheusMixture.temperature, + type(self._pyrometheus_mech))) + def get(): + y = self.species_fractions(cv) + e = self.internal_energy(cv) / cv.mass + tmptr = self._pyrometheus_mech.get_temperature(e, self._tguess, + y, True) + # from meshmode.dof_array import freeze + # return freeze(cv.array_context, tmptr) + return tmptr + + # from meshmode.dof_array import thaw + # return thaw(cv.array_context, get()) + return get() def total_energy(self, cv, pressure): r""" From 5f5798d4aa712a06d1e5ebd63e50af8824ac5317 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 21 Jun 2021 19:17:49 -0700 Subject: [PATCH 088/873] Override __reduce__ so CV will pickle correctly without cached items. --- mirgecom/fluid.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 5fadbcd3f..19653631c 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -42,7 +42,7 @@ import numpy as np # noqa from pytools.obj_array import make_obj_array from meshmode.dof_array import DOFArray # noqa -from dataclasses import dataclass +from dataclasses import dataclass, fields from arraycontext import ( dataclass_array_container, with_container_arithmetic, @@ -239,6 +239,11 @@ def dim(self): """Return the number of physical dimensions.""" return len(self.momentum) + def __reduce__(self): + """Return a tuple reproduction of self for pickling.""" + return(ConservedVars, tuple(getattr(self, f.name) + for f in fields(ConservedVars))) + def join(self): """Call :func:`join_conserved` on *self*.""" return join_conserved( @@ -254,6 +259,7 @@ def replace(self, **kwargs): return replace(self, **kwargs) + def _aux_shape(ary, leading_shape): """:arg leading_shape: a tuple with which ``ary.shape`` is expected to begin.""" from meshmode.dof_array import DOFArray From 5ab68d9743b3796e79b3d8e0c4d0b4e82151b2ad Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 21 Jun 2021 19:36:29 -0700 Subject: [PATCH 089/873] Placate flake8 --- mirgecom/eos.py | 1 - mirgecom/fluid.py | 1 - 2 files changed, 2 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 7d282d9ec..9a16d6c08 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -456,7 +456,6 @@ def sound_speed(self, cv: ConservedVars): c2 = (self.gamma(cv) * self.pressure(cv)) / cv.mass return actx.np.sqrt(c2) - def temperature(self, cv: ConservedVars): r"""Get the thermodynamic temperature of the gas. diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 19653631c..c03c58d88 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -259,7 +259,6 @@ def replace(self, **kwargs): return replace(self, **kwargs) - def _aux_shape(ary, leading_shape): """:arg leading_shape: a tuple with which ``ary.shape`` is expected to begin.""" from meshmode.dof_array import DOFArray From 053113e1a557c00cd64cb6b987609080232de02c Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 21 Jun 2021 19:46:38 -0700 Subject: [PATCH 090/873] Memoize DV on CV --- mirgecom/eos.py | 34 ++++++++++++++++++++++++++++------ mirgecom/fluid.py | 5 +++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 3b8008442..3383d2a16 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -38,6 +38,7 @@ from dataclasses import dataclass import numpy as np +from pytools import memoize_in from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import ConservedVars, make_conserved @@ -398,9 +399,19 @@ def pressure(self, cv: ConservedVars): p = (\gamma_{\mathtt{mix}} - 1)e """ - temperature = self.temperature(cv) - y = self.species_fractions(cv) - return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) + @memoize_in(cv, (PyrometheusMixture.pressure, + type(self._pyrometheus_mech))) + def get(): + temperature = self.temperature(cv) + y = self.species_fractions(cv) + press = self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) + # from meshmode.dof_array import freeze + # return freeze(cv.array_context, press) + return press + + # from meshmode.dof_array import thaw + # return thaw(cv.array_context, get()) + return get() def sound_speed(self, cv: ConservedVars): r"""Get the speed of sound in the gas. @@ -426,9 +437,20 @@ def temperature(self, cv: ConservedVars): T = \frac{(\gamma_{\mathtt{mix}} - 1)e}{R_s \rho} """ - y = self.species_fractions(cv) - e = self.internal_energy(cv) / cv.mass - return self._pyrometheus_mech.get_temperature(e, self._tguess, y, True) + @memoize_in(cv, (PyrometheusMixture.temperature, + type(self._pyrometheus_mech))) + def get(): + y = self.species_fractions(cv) + e = self.internal_energy(cv) / cv.mass + tmptr = self._pyrometheus_mech.get_temperature(e, self._tguess, + y, True) + # from meshmode.dof_array import freeze + # return freeze(cv.array_context, tmptr) + return tmptr + + # from meshmode.dof_array import thaw + # return thaw(cv.array_context, get()) + return get() def total_energy(self, cv, pressure): r""" diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 21b2f5d21..97575f681 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -248,6 +248,11 @@ def join(self): momentum=self.momentum, species_mass=self.species_mass) + def __reduce__(self): + """Return a tuple reproduction of self for pickling.""" + return(ConservedVars, tuple(getattr(self, f.name) + for f in fields(ConservedVars))) + def replace(self, **kwargs): """Return a copy of *self* with the attributes in *kwargs* replaced.""" from dataclasses import replace From c3295afaca14549ba49ced264bf99d31453131e5 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 21 Jun 2021 19:51:41 -0700 Subject: [PATCH 091/873] Add missing dataclasses.fields --- mirgecom/fluid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 97575f681..c859217a6 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -42,7 +42,7 @@ import numpy as np # noqa from pytools.obj_array import make_obj_array from meshmode.dof_array import DOFArray # noqa -from dataclasses import dataclass +from dataclasses import dataclass, fields from arraycontext import ( dataclass_array_container, with_container_arithmetic, From 0a01f74a5ac5b60ba0874710c54ffa705701df54 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 22 Jun 2021 09:20:15 -0500 Subject: [PATCH 092/873] Memoize more stuff --- mirgecom/eos.py | 35 ++++++++++++++++++++++++----------- mirgecom/fluid.py | 19 +++++++++++++++---- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 3383d2a16..3b84d3f89 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -178,7 +178,10 @@ def pressure(self, cv: ConservedVars): p = (\gamma - 1)e """ - return self.internal_energy(cv) * (self._gamma - 1.0) + @memoize_in(cv, (IdealSingleGas.pressure, "pressarry")) + def get(): + return self.internal_energy(cv) * (self._gamma - 1.0) + return get() def sound_speed(self, cv: ConservedVars): r"""Get the speed of sound in the gas. @@ -191,9 +194,12 @@ def sound_speed(self, cv: ConservedVars): """ actx = cv.mass.array_context - p = self.pressure(cv) - c2 = self._gamma / cv.mass * p - return actx.np.sqrt(c2) + @memoize_in(cv, (IdealSingleGas.sound_speed, "sosarry")) + def get(): + p = self.pressure(cv) + c2 = self._gamma / cv.mass * p + return actx.np.sqrt(c2) + return get() def temperature(self, cv: ConservedVars): r"""Get the thermodynamic temperature of the gas. @@ -206,10 +212,13 @@ def temperature(self, cv: ConservedVars): T = \frac{(\gamma - 1)e}{R\rho} """ - return ( - (((self._gamma - 1.0) / self._gas_const) - * self.internal_energy(cv) / cv.mass) - ) + @memoize_in(cv, (IdealSingleGas.temperature, "temparry")) + def get(): + return ( + (((self._gamma - 1.0) / self._gas_const) + * self.internal_energy(cv) / cv.mass) + ) + return get() def total_energy(self, cv, pressure): r""" @@ -422,9 +431,13 @@ def sound_speed(self, cv: ConservedVars): c = \sqrt{\frac{\gamma_{\mathtt{mix}}{p}}{\rho}} """ - actx = cv.mass.array_context - c2 = (self.gamma(cv) * self.pressure(cv)) / cv.mass - return actx.np.sqrt(c2) + @memoize_in(cv, (PyrometheusMixture.sound_speed, + type(self._pyrometheus_mech))) + def get(): + actx = cv.mass.array_context + c2 = (self.gamma(cv) * self.pressure(cv)) / cv.mass + return actx.np.sqrt(c2) + return get() def temperature(self, cv: ConservedVars): r"""Get the thermodynamic temperature of the gas. diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index c859217a6..fa3f60360 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -41,6 +41,7 @@ """ import numpy as np # noqa from pytools.obj_array import make_obj_array +from pytools import memoize_in from meshmode.dof_array import DOFArray # noqa from dataclasses import dataclass, fields from arraycontext import ( @@ -239,6 +240,14 @@ def dim(self): """Return the number of physical dimensions.""" return len(self.momentum) + @property + def velocity(self): + """Return the fluid velocity = momentum / mass.""" + @memoize_in(self, "vel_arry") + def get(): + return self.momentum / self.mass + return get() + def join(self): """Call :func:`join_conserved` on *self*.""" return join_conserved( @@ -429,7 +438,9 @@ def compute_wavespeed(dim, eos, cv: ConservedVars): where $\mathbf{v}$ is the flow velocity and c is the speed of sound in the fluid. """ - actx = cv.array_context - - v = cv.momentum / cv.mass - return actx.np.sqrt(np.dot(v, v)) + eos.sound_speed(cv) + @memoize_in(cv, ("wvspd_arry", type(eos))) + def get(): + actx = cv.array_context + v = cv.velocity + return actx.np.sqrt(np.dot(v, v)) + eos.sound_speed(cv) + return get() From 4c94a7d90298e574112592c8efadaffbb471ca80 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 23 Jun 2021 09:18:50 -0500 Subject: [PATCH 093/873] Fix merge errors --- examples/autoignition-mpi.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index c132adbd5..5b97cf7ca 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -84,7 +84,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() + nproc = comm.Get_size() + restart_file_pattern = "{casename}-{step:04d}-{rank:04d}.pkl" logmgr = initialize_logmgr(use_logmgr, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) @@ -129,11 +131,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, box_ur = 0.005 debug = False - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nproc = comm.Get_size() - restart_file_pattern = "{casename}-{step:04d}-{rank:04d}.pkl" restart_path = "restart_data/" if restart_step: @@ -316,8 +313,8 @@ def my_checkpoint(step, t, dt, state, force=False): do_viz = force or check_step(step=step, interval=nviz) do_health = force or check_step(step=step, interval=nhealth) do_logstart = force or check_step(step=step, interval=nlog) - do_restart = (force or check_step(step, nrestart) and - step != restart) + do_restart = (force or check_step(step, nrestart) + and step != restart_step) if do_logstart and logmgr: logmgr.tick_before() @@ -336,7 +333,8 @@ def my_checkpoint(step, t, dt, state, force=False): "num_parts": nproc } from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_filename, comm) + write_restart_file(actx, rst_data, rst_filename, + comm=discr.mpi_communicator) if do_viz or do_health: dv = eos.dependent_vars(state) From 7c0145afe679a74d6381b1517d835b9d5d4d7fe8 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 24 Jun 2021 10:44:32 -0500 Subject: [PATCH 094/873] Remove extraneous comments, make return not look like a function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andreas Klöckner --- mirgecom/eos.py | 4 ---- mirgecom/fluid.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 3b84d3f89..3d6a511ce 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -414,12 +414,8 @@ def get(): temperature = self.temperature(cv) y = self.species_fractions(cv) press = self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) - # from meshmode.dof_array import freeze - # return freeze(cv.array_context, press) return press - # from meshmode.dof_array import thaw - # return thaw(cv.array_context, get()) return get() def sound_speed(self, cv: ConservedVars): diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index fa3f60360..b843f2013 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -259,7 +259,7 @@ def join(self): def __reduce__(self): """Return a tuple reproduction of self for pickling.""" - return(ConservedVars, tuple(getattr(self, f.name) + return (ConservedVars, tuple(getattr(self, f.name) for f in fields(ConservedVars))) def replace(self, **kwargs): From 5f38088d305fbf7f7cfe41a39e31214e8aed14d6 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 24 Jun 2021 10:53:50 -0500 Subject: [PATCH 095/873] Sharpen logic/comment for clarity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andreas Klöckner --- examples/mixture-fixed-cfl-mpi.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/mixture-fixed-cfl-mpi.py b/examples/mixture-fixed-cfl-mpi.py index 38c0ec772..e861bb6ce 100644 --- a/examples/mixture-fixed-cfl-mpi.py +++ b/examples/mixture-fixed-cfl-mpi.py @@ -229,8 +229,10 @@ def mixture_prestep_function(step, t, dt, state): local_dt = get_inviscid_timestep(discr, eos=eos, cv=state) from grudge.op import nodal_min current_dt = current_cfl * nodal_min(discr, "vol", local_dt) - elif do_viz: # only if visualizing - local_cfl = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) + else: + # constant dt + if do_viz: # only if visualizing + local_cfl = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) if do_viz: # extend viz field if viz time dv = eos.dependent_vars(state) viz_fields.append(("dv", dv)) From 90dfda2d2b65b48af2123fa1140ee2ab4e8837ee Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Jun 2021 08:38:22 -0500 Subject: [PATCH 096/873] Fix up Leap for constant cfl mode, clean up loose ends per review comments. --- examples/mixture-fixed-cfl-mpi.py | 16 ++++++++-------- mirgecom/simutil.py | 4 ++-- mirgecom/steppers.py | 30 +++++++++++++++++++----------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/examples/mixture-fixed-cfl-mpi.py b/examples/mixture-fixed-cfl-mpi.py index e861bb6ce..a7200d2aa 100644 --- a/examples/mixture-fixed-cfl-mpi.py +++ b/examples/mixture-fixed-cfl-mpi.py @@ -225,15 +225,15 @@ def mixture_prestep_function(step, t, dt, state): viz_fields = [("cv", state)] current_dt = dt - if constant_cfl: # no matter what + if constant_cfl: local_dt = get_inviscid_timestep(discr, eos=eos, cv=state) from grudge.op import nodal_min current_dt = current_cfl * nodal_min(discr, "vol", local_dt) - else: - # constant dt - if do_viz: # only if visualizing + else: # constant dt mode + if do_viz: # calculate cfl field only if visualizing local_cfl = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) if do_viz: # extend viz field if viz time + # Calculate DV only if needed for visualization dv = eos.dependent_vars(state) viz_fields.append(("dv", dv)) # only if vizzing, calculate reaction rates @@ -241,12 +241,12 @@ def mixture_prestep_function(step, t, dt, state): viz_fields.append(("reaction_rates", reaction_rates)) if constant_cfl: viz_fields.append(("dt", local_dt)) - else: + else: # constant dt mode viz_fields.append(("cfl", local_cfl)) errors = current_dt < 0 or np.isnan(current_dt) or current_dt == np.inf - if do_viz or errors: + if do_viz or errors: # write viz at viztime, or if there were errors from mirgecom.io import make_rank_fname, make_par_fname rank_fn = make_rank_fname(basename=casename, rank=rank, step=step, t=t) visualizer.write_parallel_vtk_file( @@ -257,7 +257,7 @@ def mixture_prestep_function(step, t, dt, state): ) if check_step(step, nstatus) or errors: - if not do_viz: + if not do_viz: # we already have dv on viz steps dv = eos.dependent_vars(state) from grudge.op import nodal_max min_temperature = nodal_min(discr, "vol", dv.temperature) @@ -277,7 +277,7 @@ def mixture_prestep_function(step, t, dt, state): sys.exit() t_remaining = max(0, t_final - t) - return state, min(t_remaining, current_dt) + return min(t_remaining, current_dt) try: (current_step, current_t, current_state) = \ diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 58c8c2fa9..55e5fb4c6 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -134,7 +134,7 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, do_viz = check_step(step=step, interval=nviz) do_status = check_step(step=step, interval=nstatus) if do_viz is False and do_status is False: - return cv, dt + return dt dependent_vars = eos.dependent_vars(cv) @@ -196,7 +196,7 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, if maxerr > exittol: raise ExactSolutionMismatch(step, t=t, state=cv) - return cv, dt + return dt def generate_and_distribute_mesh(comm, generate_mesh): diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index adf32dfd0..2d0bb58ed 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -83,11 +83,12 @@ def _advance_state_stepper_func(rhs, timestepper, t_final, state, t=0.0, istep=0 if get_timestep: dt = get_timestep(state=state) - if dt < 0: - return istep, t, state if checkpoint: - state, dt = checkpoint(state=state, step=istep, t=t, dt=dt) + dt = checkpoint(state=state, step=istep, t=t, dt=dt) + + if dt < 0: + return istep, t, state state = timestepper(state=state, t=t, dt=dt, rhs=rhs) @@ -102,9 +103,10 @@ def _advance_state_stepper_func(rhs, timestepper, t_final, state, t=0.0, istep=0 return istep, t, state -def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, - state, t_final, component_id="state", t=0.0, istep=0, - logmgr=None, eos=None, dim=None): +def _advance_state_leap(rhs, timestepper, checkpoint, state, t_final, dt=0, + component_id="state", t=0.0, istep=0, + logmgr=None, eos=None, dim=None, checkpoint=None, + get_timestep=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. Parameters @@ -147,7 +149,8 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, return istep, t, state # Generate code for Leap method. - dt = get_timestep(state=state) + if get_timestep: + dt = get_timestep(state=state) stepper_cls = generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, state) while t < t_final: @@ -155,11 +158,16 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, if logmgr: logmgr.tick_before() - dt = get_timestep(state=state) + if get_timestep: + dt = get_timestep(state=state) + + if checkpoint: + dt = checkpoint(state=state, step=istep, t=t, dt=dt) + if dt < 0: return istep, t, state - checkpoint(state=state, step=istep, t=t, dt=dt) + stepper_cls.dt = dt # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): @@ -276,8 +284,8 @@ def advance_state(rhs, timestepper, state, t_final, dt=0, if leap_timestepper: (current_step, current_t, current_state) = \ _advance_state_leap(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint, - get_timestep=get_timestep, state=state, + checkpoint=checkpoint,dt=0, + get_timestep=get_timestep, state=state, t=t, t_final=t_final, component_id=component_id, istep=istep, logmgr=logmgr, eos=eos, dim=dim) else: From c3169c24bea84120ba7dcc557a96990e0b611169 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Jun 2021 08:48:56 -0500 Subject: [PATCH 097/873] Attempt to address linting errors. --- mirgecom/steppers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 2d0bb58ed..29411be42 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -103,7 +103,7 @@ def _advance_state_stepper_func(rhs, timestepper, t_final, state, t=0.0, istep=0 return istep, t, state -def _advance_state_leap(rhs, timestepper, checkpoint, state, t_final, dt=0, +def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, component_id="state", t=0.0, istep=0, logmgr=None, eos=None, dim=None, checkpoint=None, get_timestep=None): @@ -284,7 +284,7 @@ def advance_state(rhs, timestepper, state, t_final, dt=0, if leap_timestepper: (current_step, current_t, current_state) = \ _advance_state_leap(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint,dt=0, + checkpoint=checkpoint, dt=0, get_timestep=get_timestep, state=state, t=t, t_final=t_final, component_id=component_id, istep=istep, logmgr=logmgr, eos=eos, dim=dim) From 408411902b34409121c8cfe302155bec149599f1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Jun 2021 12:26:14 -0500 Subject: [PATCH 098/873] Merge with current AV --- mirgecom/artificial_viscosity.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 3fa687766..b80e34783 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -317,8 +317,8 @@ def highest_mode(grp): indicator = actx.np.log10(indicator + 1.0e-12) # Compute artificial viscosity percentage based on indicator and set parameters - yesnol = indicator > (s0 - kappa) - yesnou = indicator > (s0 + kappa) + yesnol = actx.np.greater(indicator, (s0 - kappa)) + yesnou = actx.np.greater(indicator, (s0 + kappa)) sin_indicator = actx.np.where( yesnol, 0.5 * (1.0 + actx.np.sin(np.pi * (indicator - s0) / (2.0 * kappa))), From 708593a49096853f42d029ec1502acb6ab5aee3c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Jun 2021 18:00:44 -0500 Subject: [PATCH 099/873] Make dummy checkpoint return dt --- test/test_time_integrators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index fe69d7514..2a4a96170 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -128,7 +128,7 @@ def get_timestep(state): return dt def my_checkpoint(state, step, t, dt): - return 0 + return dt (step, t, state) = \ advance_state(rhs=rhs, timestepper=method, From c867a12db9d2dcbf6bb15743cf496b9cfd5304ae Mon Sep 17 00:00:00 2001 From: jlevine18 Date: Sat, 26 Jun 2021 10:51:13 -0500 Subject: [PATCH 100/873] Add Viscous Timestepping (#400) Co-authored-by: Mike Campbell --- examples/nsmix-mpi.py | 53 +++++++++++++------------------- mirgecom/simutil.py | 4 ++- mirgecom/steppers.py | 25 ++++++++-------- mirgecom/viscous.py | 70 ++++++++++++++++++++++++++++++++----------- test/test_viscous.py | 57 +++++++++++++++++++++++++++++++++++ 5 files changed, 146 insertions(+), 63 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 08f51fa88..12c5bf86d 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -35,13 +35,9 @@ from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer -from mirgecom.inviscid import ( - get_inviscid_timestep -) from mirgecom.transport import SimpleTransport from mirgecom.viscous import get_viscous_timestep from mirgecom.navierstokes import ns_operator -# from mirgecom.heat import heat_operator from mirgecom.simutil import ( sim_checkpoint, @@ -81,12 +77,12 @@ def main(ctx_factory=cl.create_some_context): # This example runs only 3 steps by default (to keep CI ~short) # With the mixture defined below, equilibrium is achieved at ~40ms # To run to equlibrium, set t_final >= 40ms. - t_final = 3e-9 - current_cfl = 1.0 + t_final = 5e-9 + current_cfl = .0009 velocity = np.zeros(shape=(dim,)) current_dt = 1e-9 current_t = 0 - constant_cfl = False + constant_cfl = True nstatus = 1 nviz = 5 rank = 0 @@ -232,28 +228,6 @@ def main(ctx_factory=cl.create_some_context): f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - def get_timestep(state): - next_dt = current_dt - t_end = t_final - if constant_cfl is True: - inviscid_dt = ( - current_cfl * get_inviscid_timestep(discr=discr, eos=eos, cv=state) - ) - viscous_dt = get_viscous_timestep(discr=discr, eos=eos, - transport_model=transport_model, - cfl=current_cfl, cv=state) - next_dt = min([next_dt, inviscid_dt, viscous_dt]) - # else: - # inviscid_cfl = get_inviscid_cfl(discr=discr, eos=eos, - # dt=next_dt, state=state) - # viscous_cfl = get_viscous_cfl(discr, eos=eos, - # transport_model=transport_model, - # dt=next_dt, state=state) - if(current_t + next_dt) > t_end: - next_dt = t_end - current_t - - return next_dt - def my_rhs(t, state): ns_rhs = ns_operator(discr, cv=state, t=t, boundaries=visc_bnds, eos=eos) @@ -263,8 +237,23 @@ def my_rhs(t, state): def my_checkpoint(step, t, dt, state): reaction_rates = eos.get_production_rates(state) viz_fields = [("reaction_rates", reaction_rates)] + t_remaining = max(0, t_final - t) + checkpoint_cfl = current_cfl + if constant_cfl is True: + dt = ( + current_cfl * get_viscous_timestep(discr=discr, eos=eos, cv=state) + ) + from grudge.op import nodal_min + dt = nodal_min(discr, "vol", dt) + else: + from mirgecom.viscous import get_viscous_cfl + cfl_field = get_viscous_cfl(discr, eos, dt, state) + viz_fields.append(("cfl", cfl_field)) + from grudge.op import nodal_max + checkpoint_cfl = nodal_max(discr, "vol", cfl_field) + dt = min(dt, t_remaining) return sim_checkpoint(discr, visualizer, eos, cv=state, - vizname=casename, step=step, + vizname=casename, step=step, cfl=checkpoint_cfl, t=t, dt=dt, nstatus=nstatus, nviz=nviz, constant_cfl=constant_cfl, comm=comm, viz_fields=viz_fields) @@ -272,8 +261,8 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, + checkpoint=my_checkpoint, dt=current_dt, + state=current_state, t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: error_state = True diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 47e3b520f..43ed38e52 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -158,7 +158,7 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, do_viz = check_step(step=step, interval=nviz) do_status = check_step(step=step, interval=nstatus) if do_viz is False and do_status is False: - return 0 + return dt dependent_vars = eos.dependent_vars(cv) @@ -220,6 +220,8 @@ def sim_checkpoint(discr, visualizer, eos, cv, vizname, exact_soln=None, if maxerr > exittol: raise ExactSolutionMismatch(step, t=t, state=cv) + return dt + def check_range_local(discr, dd, field, min_value, max_value): """Check for any negative values.""" diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index ff82ee788..b5e00cff8 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -33,7 +33,8 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, - state, t_final, t=0.0, istep=0, logmgr=None, eos=None, dim=None): + state, t_final, dt=0, t=0.0, istep=0, logmgr=None, + eos=None, dim=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -79,14 +80,14 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, if logmgr: logmgr.tick_before() + if get_timestep: + dt = get_timestep(state=state) + if checkpoint: + dt = checkpoint(state=state, step=istep, t=t, dt=dt) - dt = get_timestep(state=state) if dt < 0: return istep, t, state - if checkpoint: - checkpoint(state=state, step=istep, t=t, dt=dt) - state = timestepper(state=state, t=t, dt=dt, rhs=rhs) t += dt @@ -212,9 +213,9 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, - component_id="state", t=0.0, istep=0, logmgr=None, - eos=None, dim=None): +def advance_state(rhs, timestepper, checkpoint, state, t_final, + component_id="state", get_timestep=None, dt=0, t=0.0, + istep=0, logmgr=None, eos=None, dim=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -281,9 +282,9 @@ def advance_state(rhs, timestepper, checkpoint, get_timestep, state, t_final, else: (current_step, current_t, current_state) = \ _advance_state_stepper_func(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, istep=istep, - logmgr=logmgr, eos=eos, dim=dim) + checkpoint=checkpoint, dt=dt, + get_timestep=get_timestep, state=state, + t=t, t_final=t_final, istep=istep, + logmgr=logmgr, eos=eos, dim=dim) return current_step, current_t, current_state diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index a51dd582b..4a73c252b 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -14,6 +14,7 @@ ^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: get_viscous_timestep +.. autofunction:: get_viscous_cfl """ __copyright__ = """ @@ -221,23 +222,56 @@ def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, return flux_weak -def get_viscous_timestep(discr, eos, transport_model, cfl, cv): - """Routine (will) return the (local) maximum stable viscous timestep. +def get_viscous_timestep(discr, eos, cv): + """Routine returns the the node-local maximum stable viscous timestep. - Currently, it's a hack waiting for the geometric_factor helpers port - from grudge. + Parameters + ---------- + discr: grudge.eager.EagerDGDiscretization + the discretization to use + eos: mirgecom.eos.GasEOS + An equation of state implementing the speed_of_sound method + cv: :class:`~mirgecom.fluid.ConservedVars` + Fluid solution + + Returns + ------- + class:`~meshmode.dof_array.DOFArray` + The maximum stable timestep at each node. + """ + from grudge.dt_utils import characteristic_lengthscales + from mirgecom.fluid import compute_wavespeed + + length_scales = characteristic_lengthscales(cv.array_context, discr) + + mu = 0 + transport = eos.transport_model() + if transport: + mu = transport.viscosity(eos, cv) + + return( + length_scales / (compute_wavespeed(eos, cv) + mu / length_scales) + ) + + +def get_viscous_cfl(discr, eos, dt, cv): + """Calculate and return node-local CFL based on current state and timestep. + + Parameters + ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + the discretization to use + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + dt: float or :class:`~meshmode.dof_array.DOFArray` + A constant scalar dt or node-local dt + cv: :class:`~mirgecom.fluid.ConservedVars` + The fluid conserved variables + + Returns + ------- + :class:`meshmode.dof_array.DOFArray` + The CFL at each node. """ - dim = discr.dim - mesh = discr.mesh - order = max([grp.order for grp in discr.discr_from_dd("vol").groups]) - nelements = mesh.nelements - nel_1d = nelements ** (1.0 / (1.0 * dim)) - - # This roughly reproduces the timestep AK used in wave toy - dt = (1.0 - 0.25 * (dim - 1)) / (nel_1d * order ** 2) - return cfl * dt -# dt_ngf = dt_non_geometric_factor(discr.mesh) -# dt_gf = dt_geometric_factor(discr.mesh) -# wavespeeds = compute_wavespeed(w,eos=eos) -# max_v = clmath.max(wavespeeds) -# return c*dt_ngf*dt_gf/max_v + return dt / get_viscous_timestep(discr, eos=eos, cv=cv) diff --git a/test/test_viscous.py b/test/test_viscous.py index 1924ff22e..e4a0cfe75 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -238,3 +238,60 @@ def test_diffusive_heat_flux(actx_factory): assert discr.norm(j[ispec] - exact_j, np.inf) < tol exact_j = massval * d_alpha[ispec+1] * exact_dy assert discr.norm(j[ispec+1] - exact_j, np.inf) < tol + + +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("mu", [-1, 0, 1, 2]) +@pytest.mark.parametrize("vel", [0, 1]) +def test_viscous_timestep(actx_factory, dim, mu, vel): + """Test timestep size.""" + actx = actx_factory() + nel_1d = 5 + + from meshmode.mesh.generation import generate_regular_rect_mesh + + mesh = generate_regular_rect_mesh( + a=(1.0,) * dim, b=(2.0,) * dim, n=(nel_1d,) * dim + ) + + order = 1 + + discr = EagerDGDiscretization(actx, mesh, order=order) + zeros = discr.zeros(actx) + ones = zeros + 1.0 + + velocity = make_obj_array([zeros+vel for _ in range(dim)]) + + massval = 1 + mass = massval*ones + + # I *think* this energy should yield c=1.0 + energy = zeros + 1.0 / (1.4*.4) + mom = mass * velocity + species_mass = None + + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom, + species_mass=species_mass) + + from grudge.dt_utils import characteristic_lengthscales + chlen = characteristic_lengthscales(actx, discr) + from grudge.op import nodal_min + chlen_min = nodal_min(discr, "vol", chlen) + + mu = mu*chlen_min + if mu < 0: + mu = 0 + tv_model = None + else: + tv_model = SimpleTransport(viscosity=mu) + + eos = IdealSingleGas(transport_model=tv_model) + + from mirgecom.viscous import get_viscous_timestep + dt_field = get_viscous_timestep(discr, eos, cv) + + speed_total = actx.np.sqrt(np.dot(velocity, velocity)) + eos.sound_speed(cv) + dt_expected = chlen / (speed_total + (mu / chlen)) + + error = (dt_expected - dt_field) / dt_expected + assert discr.norm(error, np.inf) == 0 From 41a78f04f7e3c4f10e4bd110e771ba7710b42d64 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 28 Jun 2021 14:29:03 -0500 Subject: [PATCH 101/873] Merge current CFL/DT developments, leap part. --- mirgecom/steppers.py | 38 +++++++++++++++++++++-------------- test/test_time_integrators.py | 2 +- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index b5e00cff8..bbf614217 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -27,14 +27,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - +import numpy as np from logpyle import set_dt from mirgecom.logging_quantities import set_sim_state -def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, - state, t_final, dt=0, t=0.0, istep=0, logmgr=None, - eos=None, dim=None): +def _advance_state_stepper_func(rhs, timestepper, state, + t_final=np.inf, t=0.0, dt=0, istep=0, + logmgr=None, eos=None, dim=None, checkpoint=None, + get_timestep=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -101,9 +102,10 @@ def _advance_state_stepper_func(rhs, timestepper, checkpoint, get_timestep, return istep, t, state -def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, - state, t_final, component_id="state", t=0.0, istep=0, - logmgr=None, eos=None, dim=None): +def _advance_state_leap(rhs, timestepper, state, component_id="state", + t_final=np.inf, t=0.0, dt=0.0, istep=0, + logmgr=None, eos=None, dim=None, checkpoint=None, + get_timestep=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. Parameters @@ -146,7 +148,9 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, return istep, t, state # Generate code for Leap method. - dt = get_timestep(state=state) + if get_timestep: + dt = get_timestep(state=state) + stepper_cls = generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, state) while t < t_final: @@ -154,13 +158,17 @@ def _advance_state_leap(rhs, timestepper, checkpoint, get_timestep, if logmgr: logmgr.tick_before() - dt = get_timestep(state=state) + if get_timestep: + dt = get_timestep(state=state) + + if checkpoint: + dt = checkpoint(state=state, step=istep, t=t, dt=dt) + if dt < 0: return istep, t, state - checkpoint(state=state, step=istep, t=t, dt=dt) - # Leap interface here is *a bit* different. + stepper_cls.dt = dt for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): state = event.state_component @@ -275,10 +283,10 @@ def advance_state(rhs, timestepper, checkpoint, state, t_final, if leap_timestepper: (current_step, current_t, current_state) = \ _advance_state_leap(rhs=rhs, timestepper=timestepper, - checkpoint=checkpoint, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, component_id=component_id, - istep=istep, logmgr=logmgr, eos=eos, dim=dim) + checkpoint=checkpoint, dt=dt, + get_timestep=get_timestep, state=state, + t=t, t_final=t_final, component_id=component_id, + istep=istep, logmgr=logmgr, eos=eos, dim=dim) else: (current_step, current_t, current_state) = \ _advance_state_stepper_func(rhs=rhs, timestepper=timestepper, diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index fe69d7514..2a4a96170 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -128,7 +128,7 @@ def get_timestep(state): return dt def my_checkpoint(state, step, t, dt): - return 0 + return dt (step, t, state) = \ advance_state(rhs=rhs, timestepper=method, From 2ec883faa75edfe6ce88bf92f9d6bde7c8dc019c Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 29 Jun 2021 11:43:40 -0500 Subject: [PATCH 102/873] Remove un-impactful memoizations. --- mirgecom/fluid.py | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index b843f2013..8412538f3 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -41,7 +41,6 @@ """ import numpy as np # noqa from pytools.obj_array import make_obj_array -from pytools import memoize_in from meshmode.dof_array import DOFArray # noqa from dataclasses import dataclass, fields from arraycontext import ( @@ -243,10 +242,7 @@ def dim(self): @property def velocity(self): """Return the fluid velocity = momentum / mass.""" - @memoize_in(self, "vel_arry") - def get(): - return self.momentum / self.mass - return get() + return self.momentum / self.mass def join(self): """Call :func:`join_conserved` on *self*.""" @@ -438,9 +434,6 @@ def compute_wavespeed(dim, eos, cv: ConservedVars): where $\mathbf{v}$ is the flow velocity and c is the speed of sound in the fluid. """ - @memoize_in(cv, ("wvspd_arry", type(eos))) - def get(): - actx = cv.array_context - v = cv.velocity - return actx.np.sqrt(np.dot(v, v)) + eos.sound_speed(cv) - return get() + actx = cv.array_context + v = cv.velocity + return actx.np.sqrt(np.dot(v, v)) + eos.sound_speed(cv) From c563de917dbd5762c904303a8f6eee913fa1f27d Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 29 Jun 2021 11:54:18 -0500 Subject: [PATCH 103/873] Remove un-impactful memoizations --- mirgecom/eos.py | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 3d6a511ce..142b6017a 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -178,10 +178,7 @@ def pressure(self, cv: ConservedVars): p = (\gamma - 1)e """ - @memoize_in(cv, (IdealSingleGas.pressure, "pressarry")) - def get(): - return self.internal_energy(cv) * (self._gamma - 1.0) - return get() + return self.internal_energy(cv) * (self._gamma - 1.0) def sound_speed(self, cv: ConservedVars): r"""Get the speed of sound in the gas. @@ -192,14 +189,8 @@ def sound_speed(self, cv: ConservedVars): c = \sqrt{\frac{\gamma{p}}{\rho}} """ - actx = cv.mass.array_context - - @memoize_in(cv, (IdealSingleGas.sound_speed, "sosarry")) - def get(): - p = self.pressure(cv) - c2 = self._gamma / cv.mass * p - return actx.np.sqrt(c2) - return get() + actx = cv.array_context + return actx.np.sqrt(self._gamma / cv.mass * self.pressure(cv)) def temperature(self, cv: ConservedVars): r"""Get the thermodynamic temperature of the gas. @@ -212,13 +203,10 @@ def temperature(self, cv: ConservedVars): T = \frac{(\gamma - 1)e}{R\rho} """ - @memoize_in(cv, (IdealSingleGas.temperature, "temparry")) - def get(): - return ( - (((self._gamma - 1.0) / self._gas_const) - * self.internal_energy(cv) / cv.mass) - ) - return get() + return ( + (((self._gamma - 1.0) / self._gas_const) + * self.internal_energy(cv) / cv.mass) + ) def total_energy(self, cv, pressure): r""" @@ -413,9 +401,7 @@ def pressure(self, cv: ConservedVars): def get(): temperature = self.temperature(cv) y = self.species_fractions(cv) - press = self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) - return press - + return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) return get() def sound_speed(self, cv: ConservedVars): @@ -430,9 +416,8 @@ def sound_speed(self, cv: ConservedVars): @memoize_in(cv, (PyrometheusMixture.sound_speed, type(self._pyrometheus_mech))) def get(): - actx = cv.mass.array_context - c2 = (self.gamma(cv) * self.pressure(cv)) / cv.mass - return actx.np.sqrt(c2) + actx = cv.array_context + return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) return get() def temperature(self, cv: ConservedVars): @@ -451,14 +436,8 @@ def temperature(self, cv: ConservedVars): def get(): y = self.species_fractions(cv) e = self.internal_energy(cv) / cv.mass - tmptr = self._pyrometheus_mech.get_temperature(e, self._tguess, - y, True) - # from meshmode.dof_array import freeze - # return freeze(cv.array_context, tmptr) - return tmptr - - # from meshmode.dof_array import thaw - # return thaw(cv.array_context, get()) + return self._pyrometheus_mech.get_temperature(e, self._tguess, + y, True) return get() def total_energy(self, cv, pressure): From 00f3cfa2dbd76d88e72f0cb912f30673c76b7eb3 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 29 Jun 2021 13:15:18 -0500 Subject: [PATCH 104/873] Repair linting issue --- mirgecom/filter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/filter.py b/mirgecom/filter.py index 618350785..2737970b9 100644 --- a/mirgecom/filter.py +++ b/mirgecom/filter.py @@ -146,7 +146,7 @@ def apply_spectral_filter(actx, modal_field, discr, cutoff, DOFArray or object array of DOFArrays """ - from meshmode.array_context import FirstAxisIsElementsTag + from meshmode.transform_metadata import FirstAxisIsElementsTag return DOFArray( actx, tuple(actx.einsum("j,ej->ej", From 9f464e07d5a578e7c5efbcdb512230ccb038effa Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 29 Jun 2021 13:26:56 -0500 Subject: [PATCH 105/873] Respond to upstream package imports moving around. #409 --- mirgecom/artificial_viscosity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index b80e34783..33093b7d7 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -271,7 +271,7 @@ def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): @memoize_in(actx, (smoothness_indicator, "smooth_comp_knl")) def indicator_prg(): """Compute the smoothness indicator for all elements.""" - from meshmode.array_context import make_loopy_program + from arraycontext import make_loopy_program return make_loopy_program([ "{[iel]: 0 <= iel < nelements}", "{[idof]: 0 <= idof < ndiscr_nodes_in}", From 54bdce3b9e6f5c3d76f37a51dcb7300139e3846a Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 29 Jun 2021 18:14:34 -0700 Subject: [PATCH 106/873] Work around performance issue (#406) --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b0654c66a..48fb060b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ PyYAML --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/inducer/meshmode.git#egg=meshmode +--editable git+https://github.com/MTCam/meshmode.git@workaround-performance-issue#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From c609760191819c12338570de65f5ae316dba855e Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 30 Jun 2021 04:20:53 -0700 Subject: [PATCH 107/873] Go back to meshmode main - performance issue resolved. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 48fb060b7..b0654c66a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ PyYAML --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/MTCam/meshmode.git@workaround-performance-issue#egg=meshmode +--editable git+https://github.com/inducer/meshmode.git#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From 293d28f180324eeff98615f816ab12cdae3dbc10 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 2 Jul 2021 15:04:51 -0500 Subject: [PATCH 108/873] Refactor autoignit just a bit --- examples/autoignition-mpi.py | 238 ++++++++++++++++++++--------------- mirgecom/steppers.py | 30 ++--- 2 files changed, 151 insertions(+), 117 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5b97cf7ca..1710fbe7d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -44,7 +44,6 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( inviscid_sim_timestep, - check_step, generate_and_distribute_mesh, write_visfile ) @@ -74,7 +73,7 @@ @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=False, use_leap=False, use_profiling=False, casename=None, - restart_step=None, restart_name=None): + rst_step=None, rst_name=None): """Drive example.""" cl_ctx = ctx_factory() @@ -86,7 +85,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, rank = comm.Get_rank() nproc = comm.Get_size() - restart_file_pattern = "{casename}-{step:04d}-{rank:04d}.pkl" logmgr = initialize_logmgr(use_logmgr, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) @@ -101,54 +99,59 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + # Some discretization parameters dim = 2 nel_1d = 8 order = 1 + # {{{ Time stepping control + # This example runs only 3 steps by default (to keep CI ~short) # With the mixture defined below, equilibrium is achieved at ~40ms # To run to equlibrium, set t_final >= 40ms. + + # Time stepper selection + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step + + # Time loop control parameters + current_step = 0 t_final = 1e-8 current_cfl = 1.0 - velocity = np.zeros(shape=(dim,)) current_dt = 1e-9 current_t = 0 constant_cfl = False + + # i.o frequencies nstatus = 1 nviz = 5 nhealth = 1 - nlog = 1 nrestart = 5 - rank = 0 - checkpoint_t = current_t - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step - box_ll = -0.005 - box_ur = 0.005 + + # }}} Time stepping control + debug = False - restart_file_pattern = "{casename}-{step:04d}-{rank:04d}.pkl" - restart_path = "restart_data/" - if restart_step: - if not restart_name: - restart_name = casename - rst_filename = ( - restart_path - + restart_file_pattern.format(casename=restart_name, - step=restart_step, rank=rank) - ) + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_filename) + restart_data = read_restart_data(actx, rst_fname) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nproc - else: + else: # generate the grid from scratch from meshmode.mesh.generation import generate_regular_rect_mesh + box_ll = -0.005 + box_ur = 0.005 generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) local_mesh, global_nelements = generate_and_distribute_mesh(comm, @@ -242,6 +245,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, # Initialize the fluid/gas state with Cantera-consistent data: # (density, pressure, temperature, mass_fractions) print(f"Cantera state (rho,T,P,Y) = ({can_rho}, {can_t}, {can_p}, {can_y}") + velocity = np.zeros(shape=(dim,)) initializer = MixtureInitializer(dim=dim, nspecies=nspecies, pressure=can_p, temperature=can_t, massfractions=can_y, velocity=velocity) @@ -249,9 +253,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, my_boundary = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: my_boundary} - if restart_step: + if rst_step: current_t = restart_data["t"] - current_step = restart_step + current_step = rst_step current_state = restart_data["state"] else: # Set the current state from time 0 @@ -294,100 +298,128 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, dt=current_dt, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None, production_rates=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append([("dv", dv)]) + if production_rates is not None: + viz_fields.append([("production_rates", production_rates)]) + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": nproc + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(dv): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, 1e5, 2.4e5): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + if check_range_local(discr, "vol", dv.temperature, 1.4e3, 3.3e3): + health_error = True + logger.info(f"{rank=}: Invalid temperature data found.") + + return health_error + def my_rhs(t, state): return (euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + eos.get_species_source_terms(state)) - def post_step_stuff(step, t, dt, state): - do_logend = check_step(step=(step-1), interval=nlog) - - if do_logend and logmgr: + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) logmgr.tick_after() - return state + return state, dt - def my_checkpoint(step, t, dt, state, force=False): - from mirgecom.simutil import check_step - do_viz = force or check_step(step=step, interval=nviz) - do_health = force or check_step(step=step, interval=nhealth) - do_logstart = force or check_step(step=step, interval=nlog) - do_restart = (force or check_step(step, nrestart) - and step != restart_step) - if do_logstart and logmgr: + def my_pre_step(step, t, dt, state): + dv = None + pre_step_errors = False + if logmgr: logmgr.tick_before() - if do_restart: - rst_filename = ( - restart_path - + restart_file_pattern.format(casename=casename, step=step, - rank=rank) - ) - rst_data = { - "local_mesh": local_mesh, - "state": current_state, - "t": t, - "step": step, - "global_nelements": global_nelements, - "num_parts": nproc - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_filename, - comm=discr.mpi_communicator) - - if do_viz or do_health: - dv = eos.dependent_vars(state) - reaction_rates = eos.get_production_rates(state) + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False - errored = False if do_health: - health_message = "" - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, 1e5, 2.4e5): - errored = True - health_message += "Invalid pressure data found.\n" - if check_range_local(discr, "vol", dv.temperature, 1.4e3, 3.3e3): - errored = True - health_message += "Temperature data exceeded healthy range.\n" - comm = discr.mpi_communicator + dv = eos.dependent_vars(state) + local_health_error = my_health_check(dv) + health_errors = False if comm is not None: - errored = comm.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - if health_message: # capture any rank's health message - logger.info(f"{rank=}:{health_message}") - - if do_viz or errored: - reaction_rates = eos.get_production_rates(state) - io_fields = [ - ("cv", state), - ("dv", dv), - ("reaction_rates", reaction_rates) - ] - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") - - return state + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) + + if do_viz: + production_rates = eos.get_production_rates(state) + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(cv=state, dv=dv, step=step, t=t, + production_rates=production_rates) + + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") + + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=post_step_stuff, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) - if not check_step(current_step, nviz): # If final step not an output step - if rank == 0: # Then likely something went wrong - logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state, force=True) + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data + final_dv = eos.dependent_vars(current_state) + final_dm = eos.get_production_rates(current_state) + my_write_viz(cv=current_state, dv=final_dv, production_rates=final_dm, + step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) if __name__ == "__main__": diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 3a4413edc..4353d3f6f 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -31,9 +31,10 @@ from mirgecom.logging_quantities import set_sim_state -def _advance_state_stepper_func(rhs, timestepper, get_timestep, - state, t_final, +def _advance_state_stepper_func(rhs, timestepper, + state, t_final, dt=0, t=0.0, istep=0, + get_timestep=None, pre_step_callback=None, post_step_callback=None, logmgr=None, eos=None, dim=None): @@ -87,20 +88,18 @@ def _advance_state_stepper_func(rhs, timestepper, get_timestep, if logmgr: logmgr.tick_before() - dt = get_timestep(state=state) - if dt < 0: - return istep, t, state + if get_timestep: + dt = get_timestep(state=state) if pre_step_callback is not None: - state = pre_step_callback(state=state, step=istep, t=t, dt=dt) + state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) state = timestepper(state=state, t=t, dt=dt, rhs=rhs) - t += dt istep += 1 if post_step_callback is not None: - state = post_step_callback(state=state, step=istep, t=t, dt=dt) + state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) if logmgr: set_dt(logmgr, dt) @@ -111,9 +110,10 @@ def _advance_state_stepper_func(rhs, timestepper, get_timestep, def _advance_state_leap(rhs, timestepper, get_timestep, - state, t_final, + state, t_final, dt=0, component_id="state", t=0.0, istep=0, + get_timestep=None, pre_step_callback=None, post_step_callback=None, logmgr=None, eos=None, dim=None): @@ -163,7 +163,8 @@ def _advance_state_leap(rhs, timestepper, get_timestep, return istep, t, state # Generate code for Leap method. - dt = get_timestep(state=state) + if get_timestep: + dt = get_timestep(state=state) stepper_cls = generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, state) while t < t_final: @@ -232,9 +233,10 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, get_timestep, state, t_final, +def advance_state(rhs, timestepper, state, t_final, component_id="state", - t=0.0, istep=0, + t=0.0, istep=0, dt=0, + get_timestep=None, pre_step_callback=None, post_step_callback=None, logmgr=None, eos=None, dim=None): @@ -303,7 +305,7 @@ def advance_state(rhs, timestepper, get_timestep, state, t_final, _advance_state_leap( rhs=rhs, timestepper=timestepper, get_timestep=get_timestep, state=state, - t=t, t_final=t_final, + t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, component_id=component_id, @@ -314,7 +316,7 @@ def advance_state(rhs, timestepper, get_timestep, state, t_final, _advance_state_stepper_func( rhs=rhs, timestepper=timestepper, get_timestep=get_timestep, state=state, - t=t, t_final=t_final, + t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, istep=istep, From 8443a66a2ef23c66a0077210ca2c5181606c98db Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 3 Jul 2021 07:58:21 -0500 Subject: [PATCH 109/873] Refactor autoignition example per discussions. --- examples/autoignition-mpi.py | 5 +++-- mirgecom/steppers.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 1710fbe7d..ca9a3d91d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -312,9 +312,9 @@ def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): def my_write_viz(cv, step, t, dv=None, production_rates=None): viz_fields = [("cv", cv)] if dv is not None: - viz_fields.append([("dv", dv)]) + viz_fields.append(("dv", dv)) if production_rates is not None: - viz_fields.append([("production_rates", production_rates)]) + viz_fields.append(("production_rates", production_rates)) write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -362,6 +362,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None pre_step_errors = False + if logmgr: logmgr.tick_before() diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 4353d3f6f..622746818 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -109,8 +109,8 @@ def _advance_state_stepper_func(rhs, timestepper, return istep, t, state -def _advance_state_leap(rhs, timestepper, get_timestep, - state, t_final, dt=0, +def _advance_state_leap(rhs, timestepper, state, + t_final, dt=0, component_id="state", t=0.0, istep=0, get_timestep=None, From d2b2c683b4251bda2820dbc721cb267df94ef46a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 3 Jul 2021 08:03:35 -0500 Subject: [PATCH 110/873] Bring examples up-to-date with current stepper API --- examples/lump-mpi.py | 2 +- examples/mixture-mpi.py | 2 +- examples/pulse-mpi.py | 2 +- examples/scalar-lump-mpi.py | 2 +- examples/sod-mpi.py | 2 +- examples/vortex-mpi.py | 12 ++++-------- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 8ca64e5d2..99e285074 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -184,7 +184,7 @@ def my_checkpoint(step, t, dt, state): if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") - return state + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index ca20bce37..6f4dcf470 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -202,7 +202,7 @@ def my_checkpoint(step, t, dt, state): if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") - return state + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index b10aafa7a..8e761f826 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -195,7 +195,7 @@ def my_checkpoint(step, t, dt, state): if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") - return state + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index a434835b1..4cf40dd8b 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -193,7 +193,7 @@ def my_checkpoint(step, t, dt, state): if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") - return state + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 4e4526853..119f8d309 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -182,7 +182,7 @@ def my_checkpoint(step, t, dt, state): if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") - return state + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 04f5603f8..3a70d7716 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -107,8 +107,6 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal nstatus = 10 nviz = 10 nhealth = 10 - nlog = 10 - rank = 0 checkpoint_t = current_t current_step = 0 if use_leap: @@ -187,20 +185,18 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) def post_step_stuff(step, t, dt, state): - do_log = check_step(step=(step-1), interval=nlog) - if do_log and logmgr: + if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) logmgr.tick_after() - return state + return state, dt def my_checkpoint(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) do_health = check_step(step=step, interval=nhealth) - do_log = check_step(step=step, interval=nlog) - if do_log and logmgr: + if logmgr: logmgr.tick_before() if do_status or do_viz or do_health: @@ -247,7 +243,7 @@ def my_checkpoint(step, t, dt, state): if errored: raise RuntimeError("Error detected by user checkpoint, exiting.") - return state + return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, From 9a5fcf3d3ec6de2832557db883ee2e098869f738 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 3 Jul 2021 08:14:15 -0500 Subject: [PATCH 111/873] Add DT health check to autoignition. --- examples/autoignition-mpi.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ca9a3d91d..fa03010b6 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -331,7 +331,7 @@ def my_write_restart(state, step, t): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(dv): + def my_health_check(dv, dt): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -343,6 +343,11 @@ def my_health_check(dv): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") + if dt < 0: + health_error = True + if rank == 0: + logger.info("Global DT is negative!") + return health_error def my_rhs(t, state): @@ -377,7 +382,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - local_health_error = my_health_check(dv) + local_health_error = my_health_check(dv, dt) health_errors = False if comm is not None: health_errors = comm.allreduce(local_health_error, op=MPI.LOR) From de48784f5d5b49f56083d8bf9d6d2ddee30206ba Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 16:38:44 -0500 Subject: [PATCH 112/873] Modernize lump example --- examples/lump-mpi.py | 244 ++++++++++++++++++++++++++++++++----------- 1 file changed, 183 insertions(+), 61 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 99e285074..978696e7b 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -50,16 +50,47 @@ from mirgecom.initializers import Lump from mirgecom.eos import IdealSingleGas +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) logger = logging.getLogger(__name__) @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, use_leap=False, + use_profiling=False, rst_step=None, rst_name=None, + casename="lump", use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + actx = PyOpenCLProfilingArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + logmgr=logmgr) + else: + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 3 @@ -74,14 +105,13 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): current_t = 0 eos = IdealSingleGas() initializer = Lump(dim=dim, center=orig, velocity=vel) - casename = "lump" boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} constant_cfl = False nstatus = 1 nhealth = 1 + nrestart = 10 nviz = 1 rank = 0 - checkpoint_t = current_t current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder @@ -91,20 +121,50 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): box_ll = -5.0 box_ur = 5.0 - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - local_nelements = local_mesh.nelements + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_fname) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(actx, discr.nodes()) + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + current_state = initializer(nodes) visualizer = make_visualizer(discr) @@ -124,80 +184,142 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): dt=current_dt, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None, exact_mix=None, resid=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append(("dv", dv)) + if exact_mix is not None: + viz_fields.append(("exact", exact_mix)) + if resid is not None: + viz_fields.append(("residual", resid)) + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, exact_mix): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, .9, 1.1): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact_mix) + exittol = .09 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact_mix.") + + return health_error + def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) - def my_checkpoint(step, t, dt, state): + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_pre_step(step, t, dt, state): + dv = None + exact_mix = None + pre_step_errors = False + + if logmgr: + logmgr.tick_before() + from mirgecom.simutil import check_step - do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_status or do_viz or do_health: - from mirgecom.simutil import compare_fluid_solutions + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_health: dv = eos.dependent_vars(state) exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - component_errors = compare_fluid_solutions(discr, state, exact_mix) + local_health_error = my_health_check(state, dv, exact_mix) + health_errors = False + if comm is not None: + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact_mix is None: + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) resid = state - exact_mix - io_fields = [ - ("cv", state), - ("dv", dv), - ("exact_mix", exact_mix), - ("resid", resid) - ] - - if do_status: # This is bad, logging already completely replaces this - from mirgecom.io import make_status_message - status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=current_cfl, dependent_vars=dv) - status_msg += ( - "\n------- errors=" + my_write_viz(cv=state, dv=dv, step=step, t=t, + exact_mix=exact_mix, resid=resid) + + if do_status: + if exact_mix is None: + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact_mix) + status_msg = ( + "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) if rank == 0: logger.info(status_msg) - errored = False - if do_health: - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .9, 1.1): - errored = True - message = "Invalid pressure data found.\n" - exittol = .09 - if max(component_errors) > exittol: - errored = True - message += "Solution diverged from exact_mix.\n" - comm = discr.mpi_communicator - if comm is not None: - errored = comm.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks - - if do_viz or errored > 0: - from mirgecom.simutil import write_visfile - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) # if current_t != checkpoint_t: if rank == 0: logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) if __name__ == "__main__": From a5e5fc4271de43cfac601690e39dddbd1e618d76 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 16:39:17 -0500 Subject: [PATCH 113/873] remove unused exceptions module, for now --- mirgecom/exceptions.py | 45 ------------------------------------------ 1 file changed, 45 deletions(-) delete mode 100644 mirgecom/exceptions.py diff --git a/mirgecom/exceptions.py b/mirgecom/exceptions.py deleted file mode 100644 index 8d43c81a1..000000000 --- a/mirgecom/exceptions.py +++ /dev/null @@ -1,45 +0,0 @@ -"""Provide custom exceptions for use in callback routines. - -.. autoexception:: SynchronizedError -.. autoexception:: SimulationHealthError -""" - -__copyright__ = """ -Copyright (C) 2021 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" - - -class SynchronizedError(Exception): - """Exception base class which must be globally synchronized. - - .. attribute:: message - - A :class:`str` describing the message for the global exception. - """ - - def __init__(self, message): - super().__init__(message) - - -class SimulationHealthError(SynchronizedError): - """Exception class for an unphysical simulation.""" From 42ea719b034ce138598df886e960947f6cc0bc6c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 16:39:37 -0500 Subject: [PATCH 114/873] remove unused exceptions module, for now --- doc/support/tools.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/support/tools.rst b/doc/support/tools.rst index f8e0b7c07..d29d63c2e 100644 --- a/doc/support/tools.rst +++ b/doc/support/tools.rst @@ -1,6 +1,5 @@ Random Pile'o'Tools =================== -.. automodule:: mirgecom.exceptions .. automodule:: mirgecom.simutil .. automodule:: mirgecom.utils From 0d74f9c9f10aa49d0c0290310fcc2a97b9b2cf44 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 16:40:07 -0500 Subject: [PATCH 115/873] fix api/signature and doc --- mirgecom/steppers.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 622746818..c0e283338 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -65,11 +65,11 @@ def _advance_state_stepper_func(rhs, timestepper, Step number from which to start pre_step_callback An optional user-defined function, with signature: - ``state = pre_step_callback(state, step, t, dt)``, + ``state, dt = pre_step_callback(state, step, t, dt)``, to be called before the timestepper is called for that particular step. post_step_callback An optional user-defined function, with signature: - ``state = post_step_callback(state, step, t, dt)``, + ``state, dt = post_step_callback(state, step, t, dt)``, to be called after the timestepper is called for that particular step. Returns @@ -144,11 +144,11 @@ def _advance_state_leap(rhs, timestepper, state, Step number from which to start pre_step_callback An optional user-defined function, with signature: - ``state = pre_step_callback(state, step, t, dt)``, + ``state, dt = pre_step_callback(state, step, t, dt)``, to be called before the timestepper is called for that particular step. post_step_callback An optional user-defined function, with signature: - ``state = post_step_callback(state, step, t, dt)``, + ``state, dt = post_step_callback(state, step, t, dt)``, to be called after the timestepper is called for that particular step. Returns @@ -174,9 +174,9 @@ def _advance_state_leap(rhs, timestepper, state, return istep, t, state if pre_step_callback is not None: - state = pre_step_callback(state=state, - step=istep, - t=t, dt=dt) + state, dt = pre_step_callback(state=state, + step=istep, + t=t, dt=dt) # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): @@ -185,9 +185,9 @@ def _advance_state_leap(rhs, timestepper, state, t += dt if post_step_callback is not None: - state = post_step_callback(state=state, - step=istep, - t=t, dt=dt) + state, dt = post_step_callback(state=state, + step=istep, + t=t, dt=dt) istep += 1 @@ -273,11 +273,11 @@ def advance_state(rhs, timestepper, state, t_final, Step number from which to start pre_step_callback An optional user-defined function, with signature: - ``state = pre_step_callback(state, step, t, dt)``, + ``state, dt = pre_step_callback(state, step, t, dt)``, to be called before the timestepper is called for that particular step. post_step_callback An optional user-defined function, with signature: - ``state = post_step_callback(state, step, t, dt)``, + ``state, dt = post_step_callback(state, step, t, dt)``, to be called after the timestepper is called for that particular step. Returns From ae90d9f367f17c9d15e835e6295477f5ca5f1a4a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 19:15:14 -0500 Subject: [PATCH 116/873] Update stepper API to current --- mirgecom/steppers.py | 4 +++- test/test_time_integrators.py | 14 +++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index c0e283338..9eef90a68 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -169,7 +169,9 @@ def _advance_state_leap(rhs, timestepper, state, rhs, t, dt, state) while t < t_final: - dt = get_timestep(state=state) + if get_timestep: + dt = get_timestep(state=state) + if dt < 0: return istep, t, state diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index cc55ceeca..3660b0061 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -123,18 +123,10 @@ def rhs(t, y): t_final = 4 step = 0 - # Callables needed for advance_state and advance_state_leap - def get_timestep(state): - return dt - - def my_checkpoint(state, step, t, dt): - return state - (step, t, state) = \ - advance_state(rhs=rhs, timestepper=method, - get_timestep=get_timestep, state=state, - t=t, t_final=t_final, component_id="y", - post_step_callback=my_checkpoint) + advance_state(rhs=rhs, timestepper=method, dt=dt, + state=state, t=t, t_final=t_final, + component_id="y") error = np.abs(state - exact_soln(t)) / exact_soln(t) integrator_eoc.add_data_point(dt, error) From d092b82ef12e60e65cbb3e65b8a0a2e653beaf6a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 19:57:10 -0500 Subject: [PATCH 117/873] Modernize more examples. --- examples/autoignition-mpi.py | 2 +- examples/lump-mpi.py | 55 ++++--- examples/mixture-mpi.py | 274 ++++++++++++++++++++++++++--------- examples/pulse-mpi.py | 238 ++++++++++++++++++++++-------- 4 files changed, 420 insertions(+), 149 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index fa03010b6..e0ce7429d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -72,7 +72,7 @@ @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=False, - use_leap=False, use_profiling=False, casename=None, + use_leap=False, use_profiling=False, casename="autoignition", rst_step=None, rst_name=None): """Drive example.""" cl_ctx = ctx_factory() diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 978696e7b..079c4e47f 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -165,7 +165,13 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) - current_state = initializer(nodes) + if rst_step: + current_t = restart_data["t"] + current_step = rst_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = initializer(nodes) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -195,12 +201,12 @@ def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, exact_mix=None, resid=None): + def my_write_viz(cv, step, t, dv=None, exact_lump=None, resid=None): viz_fields = [("cv", cv)] if dv is not None: viz_fields.append(("dv", dv)) - if exact_mix is not None: - viz_fields.append(("exact", exact_mix)) + if exact_lump is not None: + viz_fields.append(("exact", exact_lump)) if resid is not None: viz_fields.append(("residual", resid)) from mirgecom.simutil import write_visfile @@ -220,7 +226,7 @@ def my_write_restart(state, step, t): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact_mix): + def my_health_check(state, dv, exact_lump): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -229,12 +235,12 @@ def my_health_check(state, dv, exact_mix): logger.info(f"{rank=}: Invalid pressure data found.") from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_mix) + component_errors = compare_fluid_solutions(discr, state, exact_lump) exittol = .09 if max(component_errors) > exittol: health_error = True if rank == 0: - logger.info("Solution diverged from exact_mix.") + logger.info("Solution diverged from exact_lump.") return health_error @@ -253,7 +259,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None - exact_mix = None + exact_lump = None pre_step_errors = False if logmgr: @@ -271,8 +277,8 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - local_health_error = my_health_check(state, dv, exact_mix) + exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + local_health_error = my_health_check(state, dv, exact_lump) health_errors = False if comm is not None: health_errors = comm.allreduce(local_health_error, op=MPI.LOR) @@ -286,17 +292,17 @@ def my_pre_step(step, t, dt, state): if do_viz: if dv is None: dv = eos.dependent_vars(state) - if exact_mix is None: - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact_mix + if exact_lump is None: + exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact_lump my_write_viz(cv=state, dv=dv, step=step, t=t, - exact_mix=exact_mix, resid=resid) + exact_lump=exact_lump, resid=resid) if do_status: - if exact_mix is None: - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + if exact_lump is None: + exact_lump = initializer(x_vec=nodes, eos=eos, t=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_mix) + component_errors = compare_fluid_solutions(discr, state, exact_lump) status_msg = ( "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) @@ -317,10 +323,23 @@ def my_pre_step(step, t, dt, state): get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) - # if current_t != checkpoint_t: + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") + final_dv = eos.dependent_vars(current_state) + final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_resid = current_state - final_exact + my_write_viz(cv=current_state, dv=final_dv, exact_lump=final_exact, + resid=final_resid, step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 6f4dcf470..7bb3e6993 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -53,21 +53,52 @@ import cantera import pyrometheus as pyro +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + logger = logging.getLogger(__name__) @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, use_leap=False, + use_profiling=False, rst_step=None, rst_name=None, + casename="uiuc_mixture", use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + actx = PyOpenCLProfilingArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + logmgr=logmgr) + else: + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 3 nel_1d = 16 order = 3 - exittol = 10.0 t_final = 0.002 current_cfl = 1.0 velocity = np.zeros(shape=(dim,)) @@ -77,33 +108,61 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): constant_cfl = False nstatus = 1 nhealth = 1 + nrestart = 5 nviz = 1 rank = 0 - checkpoint_t = current_t current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - box_ll = -5.0 - box_ur = 5.0 - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - local_nelements = local_mesh.nelements + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_fname) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + box_ll = -5.0 + box_ur = 5.0 + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(actx, discr.nodes()) - casename = "uiuc_mixture" + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) # Pyrometheus initialization from mirgecom.mechanisms import get_mechanism_cti @@ -126,7 +185,13 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} nodes = thaw(actx, discr.nodes()) - current_state = initializer(x_vec=nodes, eos=eos) + if rst_step: + current_t = restart_data["t"] + current_step = rst_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = initializer(x_vec=nodes, eos=eos) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -145,77 +210,154 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): dt=current_dt, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None, exact_mix=None, resid=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append(("dv", dv)) + if exact_mix is not None: + viz_fields.append(("exact", exact_mix)) + if resid is not None: + viz_fields.append(("residual", resid)) + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, exact_mix): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, 1e5, 1.1e5): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact_mix) + exittol = .09 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact_mix.") + + return health_error + def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) - def my_checkpoint(step, t, dt, state): + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_pre_step(step, t, dt, state): + dv = None + exact_mix = None + pre_step_errors = False + + if logmgr: + logmgr.tick_before() + from mirgecom.simutil import check_step - do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_status or do_viz or do_health: - from mirgecom.simutil import compare_fluid_solutions + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_health: dv = eos.dependent_vars(state) exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - component_errors = compare_fluid_solutions(discr, state, exact_mix) + local_health_error = my_health_check(state, dv, exact_mix) + health_errors = False + if comm is not None: + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact_mix is None: + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) resid = state - exact_mix - io_fields = [ - ("cv", state), - ("dv", dv), - ("exact_mix", exact_mix), - ("resid", resid) - ] - - if do_status: # This is bad, logging already completely replaces this - from mirgecom.io import make_status_message - status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=current_cfl, dependent_vars=dv) - status_msg += ( - "\n------- errors=" + my_write_viz(cv=state, dv=dv, step=step, t=t, + exact_mix=exact_mix, resid=resid) + + if do_status: + if exact_mix is None: + exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact_mix) + status_msg = ( + "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) if rank == 0: logger.info(status_msg) - errored = False - if do_health: - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, 1e5, 1.1e5): - errored = True - message = "Invalid pressure data found.\n" - if max(component_errors) > exittol: - errored = True - message += "Solution diverged from exact_mix.\n" - errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks - - if do_viz or errored: - from mirgecom.simutil import write_visfile - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) - if current_t != checkpoint_t: # This check because !overwrite - if rank == 0: - logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data + final_dv = eos.dependent_vars(current_state) + final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_resid = current_state - final_exact + my_write_viz(cv=current_state, dv=final_dv, exact_mix=final_exact, + resid=final_resid, step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) + if rank == 0: + logger.info("Checkpointing final state ...") if __name__ == "__main__": diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 8e761f826..192315ccf 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -56,16 +56,53 @@ ) from mirgecom.eos import IdealSingleGas +from logpyle import set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + +logger = logging.getLogger(__name__) + @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, use_logmgr=False, + use_leap=False, use_profiling=False, casename="pulse", + rst_step=None, rst_name=None): """Drive the example.""" cl_ctx = ctx_factory() queue = cl.CommandQueue(cl_ctx) actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - logger = logging.getLogger(__name__) + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + num_parts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + actx = PyOpenCLProfilingArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + logmgr=logmgr) + else: + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 2 nel_1d = 16 @@ -85,47 +122,70 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): boundaries = {BTAG_ALL: wall} constant_cfl = False nstatus = 1 + nrestart = 5 nviz = 10 nhealth = 1 rank = 0 - checkpoint_t = current_t current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - box_ll = -0.5 - box_ur = 0.5 - - from mpi4py import MPI - comm = MPI.COMM_WORLD - nproc = comm.Get_size() - rank = comm.Get_rank() - num_parts = nproc - from meshmode.mesh.generation import generate_regular_rect_mesh - if num_parts > 1: - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, - nelements_per_axis=(nel_1d,) * dim) + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_fname) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == num_parts + else: # generate the grid from scratch + from meshmode.mesh.generation import generate_regular_rect_mesh + box_ll = -0.5 + box_ur = 0.5 + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - else: - local_mesh = generate_regular_rect_mesh( - a=(box_ll,) * dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim - ) - global_nelements = local_mesh.nelements - local_nelements = local_mesh.nelements + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(actx, discr.nodes()) + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + uniform_state = initializer(nodes) acoustic_pulse = AcousticPulse(dim=dim, amplitude=1.0, width=.1, center=orig) - current_state = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) + if rst_step: + current_t = restart_data["t"] + current_step = rst_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) visualizer = make_visualizer(discr) @@ -145,70 +205,120 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): dt=current_dt, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append(("dv", dv)) + from mirgecom.simutils import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(dv, dt): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, .8, 1.5): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + return health_error + def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) - def my_checkpoint(step, t, dt, state): + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_pre_step(step, t, dt, state): + dv = None + pre_step_errors = False + + if logmgr: + logmgr.tick_before() + from mirgecom.simutil import check_step - do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) - if do_status or do_viz or do_health: - pressure = eos.pressure(state) - io_fields = [ - ("cv", state), - ("pressure", pressure) - ] - - if do_status: # This is bad, logging already completely replaces this - from mirgecom.io import make_status_message - dv = eos.dependent_vars(state) - # this is also bad - no option for user customization, field selection - status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=current_cfl, dependent_vars=dv) - if rank == 0: - logger.info(status_msg) + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False - errored = False if do_health: - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", pressure) \ - or check_range_local(discr, "vol", pressure, min_value=.8, - max_value=1.5): - errored = True - message = "Invalid pressure data found.\n" - comm = discr.mpi_communicator + dv = eos.dependent_vars(state) + local_health_error = my_health_check(dv, dt) + health_errors = False if comm is not None: - errored = comm.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) - if do_viz or errored: - from mirgecom.simutil import write_visfile - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(cv=state, dv=dv, step=step, t=t) - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") return state, dt current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) - # if current_t != checkpoint_t: + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) + final_dv = eos.dependent_vars(current_state) + my_write_viz(cv=current_state, dv=final_dv, step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) if __name__ == "__main__": From ff489e1db9a18c71f7862aaf34ec12590042df09 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 6 Jul 2021 20:06:39 -0500 Subject: [PATCH 118/873] Fix simutil import --- examples/pulse-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 192315ccf..317751ef1 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -220,7 +220,7 @@ def my_write_viz(cv, step, t, dv=None): viz_fields = [("cv", cv)] if dv is not None: viz_fields.append(("dv", dv)) - from mirgecom.simutils import write_visfile + from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) From aa075137632c29a998c0b78da01de50ff36a9d26 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 08:50:32 -0500 Subject: [PATCH 119/873] Fix up steppers to call get_timestep properly --- mirgecom/steppers.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 9eef90a68..765d1872e 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -89,7 +89,7 @@ def _advance_state_stepper_func(rhs, timestepper, logmgr.tick_before() if get_timestep: - dt = get_timestep(state=state) + dt = get_timestep(state=state, t=t, dt=dt) if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) @@ -164,13 +164,14 @@ def _advance_state_leap(rhs, timestepper, state, # Generate code for Leap method. if get_timestep: - dt = get_timestep(state=state) + dt = get_timestep(state=state, t=t, dt=dt) + stepper_cls = generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, state) while t < t_final: if get_timestep: - dt = get_timestep(state=state) + dt = get_timestep(state=state, t=t, dt=dt) if dt < 0: return istep, t, state From 1464b9b8847181e3ada72d014334ce9b091b7060 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 08:51:22 -0500 Subject: [PATCH 120/873] Fix up inviscid_sim_timestep to properly consider t_remaining --- mirgecom/simutil.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d88bae91e..50bac0922 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -78,12 +78,11 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, t_final, constant_cfl=False): """Return the maximum stable dt.""" mydt = dt + t_remaining = max(0, t_final - t) if constant_cfl is True: mydt = get_inviscid_timestep(discr=discr, cv=state, cfl=cfl, eos=eos) - if (t + mydt) > t_final: - mydt = t_final - t - return mydt + return min(t_remaining, mydt) def write_visfile(discr, io_fields, visualizer, vizname, From 3dfdb216ae0e644fdda5a49d62c2363f775d20b8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 09:50:54 -0500 Subject: [PATCH 121/873] Modernize examples. --- examples/autoignition-mpi.py | 11 +- examples/lump-mpi.py | 17 +- examples/mixture-mpi.py | 15 +- examples/pulse-mpi.py | 24 ++- examples/scalar-lump-mpi.py | 290 +++++++++++++++++++++++++--------- examples/sod-mpi.py | 292 ++++++++++++++++++++++++++--------- examples/vortex-mpi.py | 241 ++++++++++++++++++++--------- 7 files changed, 646 insertions(+), 244 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index e0ce7429d..5bd53a251 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -294,8 +294,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): @@ -410,7 +410,7 @@ def my_pre_step(step, t, dt, state): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, - post_step_callback=my_post_step, + post_step_callback=my_post_step, dt=current_dt, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) @@ -427,6 +427,11 @@ def my_pre_step(step, t, dt, state): step=current_step, t=current_t) my_write_restart(current_state, current_step, current_t) + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 079c4e47f..51ce381b9 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -118,8 +118,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - box_ll = -5.0 - box_ur = 5.0 rst_path = "restart_data/" rst_pattern = ( @@ -135,6 +133,8 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch + box_ll = -5.0 + box_ur = 5.0 from meshmode.mesh.generation import generate_regular_rect_mesh generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) @@ -186,8 +186,8 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): @@ -240,7 +240,7 @@ def my_health_check(state, dv, exact_lump): if max(component_errors) > exittol: health_error = True if rank == 0: - logger.info("Solution diverged from exact_lump.") + logger.info("Solution diverged from exact soln.") return health_error @@ -319,7 +319,7 @@ def my_pre_step(step, t, dt, state): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, - post_step_callback=my_post_step, + post_step_callback=my_post_step, dt=current_dt, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) @@ -340,6 +340,11 @@ def my_pre_step(step, t, dt, state): resid=final_resid, step=current_step, t=current_t) my_write_restart(current_state, current_step, current_t) + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 7bb3e6993..5c5076546 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -206,8 +206,8 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): @@ -339,7 +339,7 @@ def my_pre_step(step, t, dt, state): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, - post_step_callback=my_post_step, + post_step_callback=my_post_step, dt=current_dt, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) @@ -350,14 +350,19 @@ def my_pre_step(step, t, dt, state): message="Simulation timestepping did not complete.") # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) final_resid = current_state - final_exact my_write_viz(cv=current_state, dv=final_dv, exact_mix=final_exact, resid=final_resid, step=current_step, t=current_t) my_write_restart(current_state, current_step, current_t) - if rank == 0: - logger.info("Checkpointing final state ...") + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) if __name__ == "__main__": diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 317751ef1..74c4b674e 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -71,16 +71,11 @@ @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=False, +def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="pulse", rst_step=None, rst_name=None): """Drive the example.""" cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - cl_ctx = ctx_factory() if casename is None: casename = "mirgecom" @@ -111,12 +106,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, current_cfl = 1.0 vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) - # vel[:dim] = 1.0 current_dt = .01 current_t = 0 eos = IdealSingleGas() initializer = Lump(dim=dim, center=orig, velocity=vel, rhoamp=0.0) - casename = "pulse" boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} wall = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: wall} @@ -201,9 +194,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, + constant_cfl=constant_cfl) def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): if rank == 0: @@ -262,7 +255,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None pre_step_errors = False - + print(f"{step=},{t=},{dt=}") if logmgr: logmgr.tick_before() @@ -303,7 +296,7 @@ def my_pre_step(step, t, dt, state): current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, - post_step_callback=my_post_step, + post_step_callback=my_post_step, dt=current_dt, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) @@ -320,6 +313,11 @@ def my_pre_step(step, t, dt, state): my_write_viz(cv=current_state, dv=final_dv, step=current_step, t=current_t) my_write_restart(current_state, current_step, current_t) + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 4cf40dd8b..87e3bdb23 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -51,32 +51,62 @@ from mirgecom.initializers import MulticomponentLump from mirgecom.eos import IdealSingleGas +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) logger = logging.getLogger(__name__) @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, use_leap=False, + use_profiling=False, rst_step=None, rst_name=None, + casename="lumpy-scalars", use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + actx = PyOpenCLProfilingArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + logmgr=logmgr) + else: + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 3 nel_1d = 16 order = 3 - exittol = .09 t_final = 0.01 current_cfl = 1.0 current_dt = .001 current_t = 0 constant_cfl = False nstatus = 1 + nrestart = 5 nviz = 1 nhealth = 1 rank = 0 - checkpoint_t = current_t current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder @@ -86,10 +116,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): box_ll = -5.0 box_ur = 5.0 - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nspecies = 4 centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) spec_y0s = np.ones(shape=(nspecies,)) @@ -104,19 +130,59 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): spec_amplitudes=spec_amplitudes) boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} - casename = "mixture-lump" - - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - local_nelements = local_mesh.nelements + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_fname) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + box_ll = -5.0 + box_ur = 5.0 + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(actx, discr.nodes()) - current_state = initializer(nodes) + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + if rst_step: + current_t = restart_data["t"] + current_step = rst_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = initializer(nodes) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -131,82 +197,164 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) - def my_rhs(t, state): - return euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None, exact_lump=None, resid=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append(("dv", dv)) + if exact_lump is not None: + viz_fields.append(("exact", exact_lump)) + if resid is not None: + viz_fields.append(("residual", resid)) + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, exact_lump): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, .9, 1.1): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact_lump) + exittol = .09 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact_lump.") + + return health_error + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_pre_step(step, t, dt, state): + dv = None + exact_lump = None + pre_step_errors = False + + if logmgr: + logmgr.tick_before() - def my_checkpoint(step, t, dt, state): from mirgecom.simutil import check_step - do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_status or do_viz or do_health: - from mirgecom.simutil import compare_fluid_solutions + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_health: dv = eos.dependent_vars(state) - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - component_errors = compare_fluid_solutions(discr, state, exact_mix) - resid = state - exact_mix - io_fields = [ - ("cv", state), - ("dv", dv), - ("exact_mix", exact_mix), - ("resid", resid) - ] - - if do_status: # This is bad, logging already completely replaces this - from mirgecom.io import make_status_message - status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=current_cfl, dependent_vars=dv) - status_msg += ( - "\n------- errors=" + exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + local_health_error = my_health_check(state, dv, exact_lump) + health_errors = False + if comm is not None: + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact_lump is None: + exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact_lump + my_write_viz(cv=state, dv=dv, step=step, t=t, + exact_lump=exact_lump, resid=resid) + + if do_status: + if exact_lump is None: + exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact_lump) + status_msg = ( + "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) if rank == 0: logger.info(status_msg) - errored = False - if do_health: - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, min_value=.9, - max_value=1.1): - errored = True - message = "Invalid pressure data found.\n" - if max(component_errors) > exittol: - errored = True - message += "Solution errors exceed tolerance.\n" - errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks - - if do_viz or errored: - from mirgecom.simutil import write_visfile - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") return state, dt + def my_rhs(t, state): + return euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, + pre_step_callback=my_pre_step, dt=current_dt, + post_step_callback=my_post_step, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) - # if current_t != checkpoint_t: + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) + + final_dv = eos.dependent_vars(current_state) + final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_resid = current_state - final_exact + my_write_viz(cv=current_state, dv=final_dv, exact_lump=final_exact, + resid=final_resid, step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) if __name__ == "__main__": diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 119f8d309..286e6b07e 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -50,62 +50,123 @@ from mirgecom.initializers import SodShock1D from mirgecom.eos import IdealSingleGas +from logpyle import set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) logger = logging.getLogger(__name__) @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename="sod1d", + rst_step=None, rst_name=None): """Drive the example.""" cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + num_parts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + actx = PyOpenCLProfilingArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + logmgr=logmgr) + else: + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 1 nel_1d = 24 order = 1 # tolerate large errors; case is unstable - exittol = .2 t_final = 0.01 current_cfl = 1.0 current_dt = .0001 current_t = 0 eos = IdealSingleGas() initializer = SodShock1D(dim=dim) - casename = "sod1d" boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} constant_cfl = False nstatus = 10 + nrestart = 5 nviz = 10 nhealth = 10 rank = 0 - checkpoint_t = current_t current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - box_ll = -5.0 - box_ur = 5.0 - - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - - local_nelements = local_mesh.nelements + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_fname) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == num_parts + else: # generate the grid from scratch + from meshmode.mesh.generation import generate_regular_rect_mesh + box_ll = -5.0 + box_ur = 5.0 + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(actx, discr.nodes()) - current_state = initializer(nodes) + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + if rst_step: + current_t = restart_data["t"] + current_step = rst_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = initializer(nodes) visualizer = make_visualizer(discr) @@ -121,81 +182,164 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None, exact=None, resid=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append(("dv", dv)) + if exact is not None: + viz_fields.append(("exact_soln", exact)) + if resid is not None: + viz_fields.append(("residual", resid)) + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, exact): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, .09, 1.1): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + exittol = .09 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact soln.") - def my_rhs(t, state): - return euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) + return health_error + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_pre_step(step, t, dt, state): + dv = None + exact = None + pre_step_errors = False + + if logmgr: + logmgr.tick_before() - def my_checkpoint(step, t, dt, state): from mirgecom.simutil import check_step - do_status = check_step(step=step, interval=nstatus) do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_status or do_viz or do_health: - from mirgecom.simutil import compare_fluid_solutions + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_health: dv = eos.dependent_vars(state) - sod_exact = initializer(x_vec=nodes, eos=eos, t=t) - component_errors = compare_fluid_solutions(discr, state, sod_exact) - resid = state - sod_exact - io_fields = [ - ("cv", state), - ("dv", dv), - ("sod_exact", sod_exact), - ("resid", resid) - ] - - if do_status: # This is bad, logging already completely replaces this - from mirgecom.io import make_status_message - status_msg = make_status_message(discr=discr, t=t, step=step, dt=dt, - cfl=current_cfl, dependent_vars=dv) - status_msg += ( - "\n------- errors=" + exact = initializer(x_vec=nodes, eos=eos, t=t) + local_health_error = my_health_check(state, dv, exact) + health_errors = False + if comm is not None: + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(cv=state, dv=dv, step=step, t=t, + exact=exact, resid=resid) + + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) if rank == 0: logger.info(status_msg) - errored = False - if do_health: - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .09, 1.1): - errored = True - message = "Invalid pressure data found.\n" - if np.max(component_errors) > exittol: - errored = True - message += "Solution errors exceed tolerance.\n" - errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks - - if do_viz or errored: - from mirgecom.simutil import write_visfile - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") return state, dt + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, + constant_cfl=constant_cfl) + + def my_rhs(t, state): + return euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, + pre_step_callback=my_pre_step, dt=current_dt, + post_step_callback=my_post_step, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) - # if current_t != checkpoint_t: + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) + + final_dv = eos.dependent_vars(current_state) + final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_resid = current_state - final_exact + my_write_viz(cv=current_state, dv=final_dv, exact=final_exact, + resid=final_resid, step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) if __name__ == "__main__": diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 3a70d7716..c079101dd 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -67,16 +67,23 @@ @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=False, - use_leap=False): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename="sod1d", + rst_step=None, rst_name=None): """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + from mpi4py import MPI comm = MPI.COMM_WORLD + rank = comm.Get_rank() + num_parts = comm.Get_size() logmgr = initialize_logmgr(use_logmgr, - filename="vortex.sqlite", mode="wu", mpi_comm=comm) + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) - cl_ctx = ctx_factory() if use_profiling: queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) @@ -91,7 +98,6 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal dim = 2 nel_1d = 16 order = 3 - exittol = .1 t_final = 0.1 current_cfl = 1.0 vel = np.zeros(shape=(dim,)) @@ -104,35 +110,47 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal casename = "vortex" boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} constant_cfl = False - nstatus = 10 + nrestart = 10 + nstatus = 1 nviz = 10 nhealth = 10 - checkpoint_t = current_t current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - box_ll = -5.0 - box_ur = 5.0 - - rank = comm.Get_rank() if dim != 2: raise ValueError("This example must be run with dim = 2.") - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - local_nelements = local_mesh.nelements + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_step: # read the grid from restart data + rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_fname) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == num_parts + else: # generate the grid from scratch + from meshmode.mesh.generation import generate_regular_rect_mesh + box_ll = -5.0 + box_ur = 5.0 + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(actx, discr.nodes()) - current_state = initializer(nodes) vis_timer = None @@ -162,6 +180,14 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) + if rst_step: + current_t = restart_data["t"] + current_step = rst_step + current_state = restart_data["state"] + else: + # Set the current state from time 0 + current_state = initializer(nodes) + visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -176,87 +202,158 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) + def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + if do_viz: + my_write_viz(cv, step, t) + if do_restart: + my_write_restart(state=cv, step=step, t=t) + if message is None: + message = "Fatal simulation errors detected." + raise RuntimeError(message) + + def my_write_viz(cv, step, t, dv=None, exact=None, resid=None): + viz_fields = [("cv", cv)] + if dv is not None: + viz_fields.append(("dv", dv)) + if exact is not None: + viz_fields.append(("exact_soln", exact)) + if resid is not None: + viz_fields.append(("residual", resid)) + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(state, step, t): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, exact): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure) \ + or check_range_local(discr, "vol", dv.pressure, .2, 1.02): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + exittol = .1 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact soln.") - def my_rhs(t, state): - return euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) + return health_error - def post_step_stuff(step, t, dt, state): + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) logmgr.tick_after() return state, dt - def my_checkpoint(step, t, dt, state): - do_status = check_step(step=step, interval=nstatus) - do_viz = check_step(step=step, interval=nviz) - do_health = check_step(step=step, interval=nhealth) + def my_pre_step(step, t, dt, state): + dv = None + exact = None + pre_step_errors = False if logmgr: logmgr.tick_before() - if do_status or do_viz or do_health: - from mirgecom.simutil import compare_fluid_solutions - pressure = eos.pressure(state) - vortex_exact = initializer(x_vec=nodes, eos=eos, t=t) - component_errors = compare_fluid_solutions(discr, state, vortex_exact) + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_health: + dv = eos.dependent_vars(state) + exact = initializer(x_vec=nodes, eos=eos, t=t) + local_health_error = my_health_check(state, dv, exact) + health_errors = False + if comm is not None: + health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + if health_errors and rank == 0: + logger.info("Fluid solution failed health check.") + pre_step_errors = pre_step_errors or health_errors + + if do_restart: + my_write_restart(state, step, t) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(cv=state, dv=dv, step=step, t=t, + exact=exact, resid=resid) if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) if rank == 0: - logger.info( - "------- errors=" + ",".join("%.3g" % en for en - in component_errors) - ) + logger.info(status_msg) - errored = False - if do_health: - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", pressure) \ - or check_range_local(discr, "vol", pressure, .2, 1.02): - errored = True - message = "Invalid pressure data found.\n" - if np.max(component_errors) > exittol: - errored = True - message += "Solution errors exceed tolerance.\n" - errored = discr.mpi_communicator.allreduce(errored, op=MPI.LOR) - if errored: - if rank == 0: - logger.info("Fluid solution failed health check.") - logger.info(message) # do this on all ranks - - if do_viz or errored: - resid = state - vortex_exact - io_fields = [ - ("cv", state), - ("pressure", pressure), - ("vortex_exact", vortex_exact), - ("resid", resid) - ] - from mirgecom.simutil import write_visfile - write_visfile(discr, io_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - if errored: - raise RuntimeError("Error detected by user checkpoint, exiting.") + if pre_step_errors: + my_graceful_exit(cv=state, step=step, t=t, + do_viz=(not do_viz), do_restart=(not do_restart), + message="Error detected at prestep, exiting.") return state, dt + get_timestep = partial(inviscid_sim_timestep, discr=discr, + cfl=current_cfl, eos=eos, t_final=t_final, + constant_cfl=constant_cfl) + + def my_rhs(t, state): + return euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_checkpoint, - post_step_callback=post_step_stuff, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, get_timestep=get_timestep, state=current_state, t=current_t, t_final=t_final, eos=eos, dim=dim) + finish_tol = 1e-16 + if np.abs(current_t - t_final) > finish_tol: + my_graceful_exit(cv=current_state, step=current_step, t=current_t, + do_viz=True, do_restart=True, + message="Simulation timestepping did not complete.") + + # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - my_checkpoint(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) + + final_dv = eos.dependent_vars(current_state) + final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_resid = current_state - final_exact + my_write_viz(cv=current_state, dv=final_dv, exact=final_exact, + resid=final_resid, step=current_step, t=current_t) + my_write_restart(current_state, current_step, current_t) if logmgr: logmgr.close() From 926e76a7bc42db2437cff131d023eebeae0cc610 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 7 Jul 2021 10:06:25 -0500 Subject: [PATCH 122/873] Correct misnamed restart parameter. Co-authored-by: Matt Smith --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5bd53a251..21543a1e1 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -147,7 +147,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] - assert restart_data["nparts"] == nproc + assert restart_data["num_parts"] == nproc else: # generate the grid from scratch from meshmode.mesh.generation import generate_regular_rect_mesh box_ll = -0.005 From 86fadcaa176272e0a4e677e4b3782c1b1c22e236 Mon Sep 17 00:00:00 2001 From: jlevine18 Date: Wed, 7 Jul 2021 14:27:35 -0500 Subject: [PATCH 123/873] Add constant CFL mode to examples (#411) --- examples/poiseuille-mpi.py | 40 +++++++++++++++++++++++++----------- examples/pulse-mpi.py | 42 ++++++++++++++++++++++++++------------ examples/wave-eager-mpi.py | 18 ++++++++-------- examples/wave-eager.py | 23 +++++++++++---------- 4 files changed, 78 insertions(+), 45 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 4d9a3c4b8..da4939622 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -41,11 +41,13 @@ from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator from mirgecom.simutil import ( - inviscid_sim_timestep, sim_checkpoint, generate_and_distribute_mesh, ExactSolutionMismatch, ) + +from mirgecom.viscous import get_viscous_timestep + from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point from mirgecom.integrators import rk4_step @@ -87,12 +89,12 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal dim = 2 order = 1 exittol = 1.0 - t_final = 1e-7 - current_cfl = 1.0 + t_final = 1e-6 + current_cfl = 0.1 current_dt = 1e-8 current_t = 0 casename = "poiseuille" - constant_cfl = False + constant_cfl = True nstatus = 1 nviz = 1 rank = 0 @@ -164,16 +166,31 @@ def poiseuille_soln(nodes, eos, cv=None, **kwargs): if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) - def my_rhs(t, state): return ns_operator(discr, eos=eos, boundaries=boundaries, cv=state, t=t) def my_checkpoint(step, t, dt, state): + t_remaining = max(0, t_final - t) + checkpoint_cfl = current_cfl + viz_fields = [] + + if constant_cfl is True: + dt = ( + current_cfl * get_viscous_timestep(discr=discr, eos=eos, cv=state) + ) + viz_fields.append(("local_dt", dt)) + from grudge.op import nodal_min + dt = nodal_min(discr, "vol", dt) + else: + from mirgecom.viscous import get_viscous_cfl + cfl_field = get_viscous_cfl(discr, eos, dt, state) + viz_fields.append(("cfl", cfl_field)) + from grudge.op import nodal_max + checkpoint_cfl = nodal_max(discr, "vol", cfl_field) + + dt = min(dt, t_remaining) return sim_checkpoint(discr, visualizer, eos, cv=state, - vizname=casename, step=step, + vizname=casename, step=step, cfl=checkpoint_cfl, t=t, dt=dt, nstatus=nstatus, nviz=nviz, exittol=exittol, constant_cfl=constant_cfl, comm=comm, vis_timer=vis_timer, overwrite=True) @@ -181,9 +198,8 @@ def my_checkpoint(step, t, dt, state): try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, + checkpoint=my_checkpoint, state=current_state, + dt=current_dt, t=current_t, t_final=t_final, eos=eos, dim=dim) except ExactSolutionMismatch as ex: current_step = ex.step diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 658364d58..43cdb8e2a 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -39,12 +39,13 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( - inviscid_sim_timestep, generate_and_distribute_mesh, sim_checkpoint, ExactSolutionMismatch, ) +from mirgecom.viscous import get_viscous_timestep + from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -72,8 +73,8 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): order = 1 exittol = 2e-2 exittol = 100.0 - t_final = 0.1 - current_cfl = 1.0 + t_final = .5 + current_cfl = 0.38 vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) # vel[:dim] = 1.0 @@ -84,7 +85,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): casename = "pulse" wall = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: wall} - constant_cfl = False + constant_cfl = True nstatus = 10 nviz = 10 rank = 0 @@ -141,26 +142,41 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, t=current_t, - dt=current_dt, cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) - def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) def my_checkpoint(step, t, dt, state): + t_remaining = max(0, t_final - t) + checkpoint_cfl = current_cfl + viz_fields = [] + + if constant_cfl is True: + dt = ( + current_cfl * get_viscous_timestep(discr=discr, eos=eos, cv=state) + ) + viz_fields.append(("local_dt", dt)) + from grudge.op import nodal_min + dt = nodal_min(discr, "vol", dt) + else: + from mirgecom.viscous import get_viscous_cfl + cfl_field = get_viscous_cfl(discr, eos, dt, state) + viz_fields.append(("cfl", cfl_field)) + from grudge.op import nodal_max + checkpoint_cfl = nodal_max(discr, "vol", cfl_field) + + dt = min(dt, t_remaining) return sim_checkpoint(discr, visualizer, eos, cv=state, - vizname=casename, step=step, + vizname=casename, step=step, cfl=checkpoint_cfl, t=t, dt=dt, nstatus=nstatus, nviz=nviz, - exittol=exittol, constant_cfl=constant_cfl, comm=comm) + exittol=exittol, constant_cfl=constant_cfl, + comm=comm, viz_fields=viz_fields) try: (current_step, current_t, current_state) = \ advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=my_checkpoint, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final) + checkpoint=my_checkpoint, state=current_state, + dt=current_dt, t=current_t, t_final=t_final) except ExactSolutionMismatch as ex: current_step = ex.step current_t = ex.t diff --git a/examples/wave-eager-mpi.py b/examples/wave-eager-mpi.py index b88eb232e..c60896f42 100644 --- a/examples/wave-eager-mpi.py +++ b/examples/wave-eager-mpi.py @@ -69,6 +69,9 @@ def main(snapshot_pattern="wave-eager-{step:04d}-{rank:04d}.pkl", restart_step=N actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + current_cfl = .485 + wave_speed = 1.0 + from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() @@ -113,14 +116,11 @@ def main(snapshot_pattern="wave-eager-{step:04d}-{rank:04d}.pkl", restart_step=N discr = EagerDGDiscretization(actx, local_mesh, order=order, mpi_communicator=comm) - if local_mesh.dim == 2: - # no deep meaning here, just a fudge factor - dt = 0.7 / (nel_1d*order**2) - elif dim == 3: - # no deep meaning here, just a fudge factor - dt = 0.4 / (nel_1d*order**2) - else: - raise ValueError("don't have a stable time step guesstimate") + from grudge.dt_utils import characteristic_lengthscales + dt = current_cfl * characteristic_lengthscales(actx, discr) / wave_speed + + from grudge.op import nodal_min + dt = nodal_min(discr, "vol", dt) t_final = 3 @@ -152,7 +152,7 @@ def main(snapshot_pattern="wave-eager-{step:04d}-{rank:04d}.pkl", restart_step=N vis = make_visualizer(discr) def rhs(t, w): - return wave_operator(discr, c=1, w=w) + return wave_operator(discr, c=wave_speed, w=w) while t < t_final: # restart must happen at beginning of step diff --git a/examples/wave-eager.py b/examples/wave-eager.py index 7f1ce66c6..c11e6a1c5 100644 --- a/examples/wave-eager.py +++ b/examples/wave-eager.py @@ -72,6 +72,10 @@ def main(use_profiling=False): dim = 2 nel_1d = 16 + + current_cfl = .485 + wave_speed = 1.0 + from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( @@ -81,18 +85,15 @@ def main(use_profiling=False): order = 3 - if dim == 2: - # no deep meaning here, just a fudge factor - dt = 0.7 / (nel_1d * order ** 2) - elif dim == 3: - # no deep meaning here, just a fudge factor - dt = 0.4 / (nel_1d * order ** 2) - else: - raise ValueError("don't have a stable time step guesstimate") + discr = EagerDGDiscretization(actx, mesh, order=order) - print("%d elements" % mesh.nelements) + from grudge.dt_utils import characteristic_lengthscales + dt = current_cfl * characteristic_lengthscales(actx, discr) / wave_speed - discr = EagerDGDiscretization(actx, mesh, order=order) + from grudge.op import nodal_min + dt = nodal_min(discr, "vol", dt) + + print("%d elements" % mesh.nelements) fields = flat_obj_array( bump(actx, discr), @@ -102,7 +103,7 @@ def main(use_profiling=False): vis = make_visualizer(discr) def rhs(t, w): - return wave_operator(discr, c=1, w=w) + return wave_operator(discr, c=wave_speed, w=w) t = 0 t_final = 3 From 992e79555baf6ba108ae45f3bb34267befd00f9e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 14:35:11 -0500 Subject: [PATCH 124/873] Ignore exception style issue. --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 056de71f4..6a5a17dfd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [flake8] -ignore = E127,E128,E123,E226,E241,W503 +ignore = E127,E128,E123,E226,E241,W503,N818 exclude = .*,\#* max-line-length=85 From f0e65f3fdff4368e30fb0f03b1a7dd212bb0c4ce Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 19:54:49 -0500 Subject: [PATCH 125/873] Turn off profiling in vortex to speed up CI. --- examples/vortex-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 76650ea3d..e080c38fc 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -91,7 +91,7 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal nel_1d = 16 order = 3 exittol = .1 - t_final = 0.1 + t_final = 0.01 current_cfl = 1.0 vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) @@ -223,7 +223,7 @@ def my_checkpoint(step, t, dt, state): if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = True + use_profiling = False use_logging = True use_leap = False From 6445e28e89777f5f451c7d93e5a4ee493b5436eb Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 19:57:05 -0500 Subject: [PATCH 126/873] Reduce the number of steps in scalar lump to speed up CI. --- examples/scalar-lump-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 9de87b9f6..151bb4dd0 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -69,7 +69,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): nel_1d = 16 order = 3 exittol = .09 - t_final = 0.01 + t_final = 0.005 current_cfl = 1.0 current_dt = .001 current_t = 0 From 82eb938750f918bfd3b0199a4dcb77a6e37e29dc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 7 Jul 2021 19:58:17 -0500 Subject: [PATCH 127/873] Reduce number of steps to speed up CI. --- examples/vortex-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index c079101dd..bb170b7d5 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -98,7 +98,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, dim = 2 nel_1d = 16 order = 3 - t_final = 0.1 + t_final = 0.01 current_cfl = 1.0 vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) From 47d41d7a3470ceb2a8844399cacad01df974302b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 04:33:02 -0500 Subject: [PATCH 128/873] Turn off profiling, reduce number of steps to improve CI time --- examples/vortex-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index ea36a3aa7..6cb8951d1 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -91,7 +91,7 @@ def main(ctx_factory=cl.create_some_context, use_profiling=False, use_logmgr=Fal nel_1d = 16 order = 3 exittol = .1 - t_final = 0.1 + t_final = 0.01 current_cfl = 1.0 vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) @@ -220,7 +220,7 @@ def my_checkpoint(step, t, dt, state): if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = True + use_profiling = False use_logging = True use_leap = False From ef1ca551eb7ec3fd28e8fdc103e6be8793d0b9ce Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 04:33:46 -0500 Subject: [PATCH 129/873] Reduce number of steps to improve CI time. --- examples/scalar-lump-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index d2dc0b112..39965272f 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -69,7 +69,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False): nel_1d = 16 order = 3 exittol = .09 - t_final = 0.01 + t_final = 0.005 current_cfl = 1.0 current_dt = .001 current_t = 0 From 02b37d892773bc833e465678e9252c13ef7af97d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 10:09:40 -0500 Subject: [PATCH 130/873] Unify call signatures of user-defined utilities. --- examples/autoignition-mpi.py | 38 ++++++++++--------- examples/lump-mpi.py | 63 +++++++++++++++++--------------- examples/mixture-mpi.py | 68 ++++++++++++++++++---------------- examples/pulse-mpi.py | 37 ++++++++++--------- examples/scalar-lump-mpi.py | 71 +++++++++++++++++++----------------- examples/sod-mpi.py | 47 +++++++++++++----------- examples/vortex-mpi.py | 49 +++++++++++++------------ 7 files changed, 196 insertions(+), 177 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 21543a1e1..ff4c56a2e 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -298,27 +298,30 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, production_rates=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) - if production_rates is not None: - viz_fields.append(("production_rates", production_rates)) + def my_write_viz(step, t, state, dv=None, production_rates=None): + if dv is None: + dv = eos.dependent_vars(state) + if production_rates is None: + production_rates = eos.get_production_rates(state) + viz_fields = [("cv", state), + ("dv", dv), + ("production_rates", production_rates)] write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - def my_write_restart(state, step, t): + def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) rst_data = { "local_mesh": local_mesh, @@ -382,22 +385,21 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - local_health_error = my_health_check(dv, dt) - health_errors = False + health_errors = my_health_check(dv, dt) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: production_rates = eos.get_production_rates(state) if dv is None: dv = eos.dependent_vars(state) - my_write_viz(cv=state, dv=dv, step=step, t=t, + my_write_viz(step=step, t=t, state=state, dv=dv, production_rates=production_rates) if pre_step_errors: @@ -423,9 +425,9 @@ def my_pre_step(step, t, dt, state): # Dump the final data final_dv = eos.dependent_vars(current_state) final_dm = eos.get_production_rates(current_state) - my_write_viz(cv=current_state, dv=final_dv, production_rates=final_dm, - step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + production_rates=final_dm) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 51ce381b9..de6f723b1 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -190,25 +190,29 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, exact_lump=None, resid=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) - if exact_lump is not None: - viz_fields.append(("exact", exact_lump)) - if resid is not None: - viz_fields.append(("residual", resid)) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + if resid is None: + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact", exact), + ("residual", resid)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -226,7 +230,7 @@ def my_write_restart(state, step, t): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact_lump): + def my_health_check(dv, state, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -235,7 +239,7 @@ def my_health_check(state, dv, exact_lump): logger.info(f"{rank=}: Invalid pressure data found.") from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_lump) + component_errors = compare_fluid_solutions(discr, state, exact) exittol = .09 if max(component_errors) > exittol: health_error = True @@ -259,7 +263,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None - exact_lump = None + exact = None pre_step_errors = False if logmgr: @@ -277,32 +281,31 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact_lump = initializer(x_vec=nodes, eos=eos, t=t) - local_health_error = my_health_check(state, dv, exact_lump) - health_errors = False + exact = initializer(x_vec=nodes, eos=eos, t=t) + health_errors = my_health_check(dv=dv, state=state, exact=exact) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: if dv is None: dv = eos.dependent_vars(state) - if exact_lump is None: - exact_lump = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact_lump - my_write_viz(cv=state, dv=dv, step=step, t=t, - exact_lump=exact_lump, resid=resid) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, dv=dv, state=state, exact=exact, + resid=resid) if do_status: - if exact_lump is None: - exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_lump) + component_errors = compare_fluid_solutions(discr, state, exact) status_msg = ( "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) @@ -336,9 +339,9 @@ def my_pre_step(step, t, dt, state): final_dv = eos.dependent_vars(current_state) final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) final_resid = current_state - final_exact - my_write_viz(cv=current_state, dv=final_dv, exact_lump=final_exact, - resid=final_resid, step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + exact=final_exact, resid=final_resid) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 5c5076546..f61e740be 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -210,30 +210,35 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, exact_mix=None, resid=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) - if exact_mix is not None: - viz_fields.append(("exact", exact_mix)) - if resid is not None: - viz_fields.append(("residual", resid)) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): + viz_fields = [("cv", state)] + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + if resid is None: + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact_soln", exact), + ("residual", resid)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - def my_write_restart(state, step, t): + def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) rst_data = { "local_mesh": local_mesh, @@ -246,7 +251,7 @@ def my_write_restart(state, step, t): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact_mix): + def my_health_check(state, dv, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -255,12 +260,12 @@ def my_health_check(state, dv, exact_mix): logger.info(f"{rank=}: Invalid pressure data found.") from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_mix) + component_errors = compare_fluid_solutions(discr, state, exact) exittol = .09 if max(component_errors) > exittol: health_error = True if rank == 0: - logger.info("Solution diverged from exact_mix.") + logger.info("Solution diverged from exact soln.") return health_error @@ -279,7 +284,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None - exact_mix = None + exact = None pre_step_errors = False if logmgr: @@ -297,32 +302,31 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - local_health_error = my_health_check(state, dv, exact_mix) - health_errors = False + exact = initializer(x_vec=nodes, eos=eos, t=t) + health_errors = my_health_check(state, dv, exact) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: if dv is None: dv = eos.dependent_vars(state) - if exact_mix is None: - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact_mix + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact my_write_viz(cv=state, dv=dv, step=step, t=t, - exact_mix=exact_mix, resid=resid) + exact=exact, resid=resid) if do_status: - if exact_mix is None: - exact_mix = initializer(x_vec=nodes, eos=eos, t=t) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_mix) + component_errors = compare_fluid_solutions(discr, state, exact) status_msg = ( "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) @@ -330,7 +334,7 @@ def my_pre_step(step, t, dt, state): logger.info(status_msg) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -355,9 +359,9 @@ def my_pre_step(step, t, dt, state): final_dv = eos.dependent_vars(current_state) final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) final_resid = current_state - final_exact - my_write_viz(cv=current_state, dv=final_dv, exact_mix=final_exact, - resid=final_resid, step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + exact=final_exact, resid=final_resid) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 74c4b674e..18736ec68 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -198,26 +198,28 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) + def my_write_viz(step, t, state, dv=None): + if dv is None: + dv = eos.dependent_vars(state) + viz_fields = [("cv", state), + ("dv", dv)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - def my_write_restart(state, step, t): + def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) rst_data = { "local_mesh": local_mesh, @@ -255,7 +257,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None pre_step_errors = False - print(f"{step=},{t=},{dt=}") + if logmgr: logmgr.tick_before() @@ -270,24 +272,23 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - local_health_error = my_health_check(dv, dt) - health_errors = False + health_errors = my_health_check(dv, dt) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: if dv is None: dv = eos.dependent_vars(state) - my_write_viz(cv=state, dv=dv, step=step, t=t) + my_write_viz(step=step, t=t, state=state, dv=dv) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -302,7 +303,7 @@ def my_pre_step(step, t, dt, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") @@ -310,8 +311,8 @@ def my_pre_step(step, t, dt, state): if rank == 0: logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) - my_write_viz(cv=current_state, dv=final_dv, step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 87e3bdb23..80507d92d 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -201,30 +201,34 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, cfl=current_cfl, eos=eos, t_final=t_final, constant_cfl=constant_cfl) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, exact_lump=None, resid=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) - if exact_lump is not None: - viz_fields.append(("exact", exact_lump)) - if resid is not None: - viz_fields.append(("residual", resid)) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + if resid is None: + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact", exact), + ("resid", resid)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - def my_write_restart(state, step, t): + def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) rst_data = { "local_mesh": local_mesh, @@ -237,7 +241,7 @@ def my_write_restart(state, step, t): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact_lump): + def my_health_check(state, dv, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -246,12 +250,12 @@ def my_health_check(state, dv, exact_lump): logger.info(f"{rank=}: Invalid pressure data found.") from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_lump) + component_errors = compare_fluid_solutions(discr, state, exact) exittol = .09 if max(component_errors) > exittol: health_error = True if rank == 0: - logger.info("Solution diverged from exact_lump.") + logger.info("Solution diverged from exact soln.") return health_error @@ -266,7 +270,7 @@ def my_post_step(step, t, dt, state): def my_pre_step(step, t, dt, state): dv = None - exact_lump = None + exact = None pre_step_errors = False if logmgr: @@ -284,32 +288,31 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact_lump = initializer(x_vec=nodes, eos=eos, t=t) - local_health_error = my_health_check(state, dv, exact_lump) - health_errors = False + exact = initializer(x_vec=nodes, eos=eos, t=t) + health_errors = my_health_check(state, dv, exact) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: if dv is None: dv = eos.dependent_vars(state) - if exact_lump is None: - exact_lump = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact_lump - my_write_viz(cv=state, dv=dv, step=step, t=t, - exact_lump=exact_lump, resid=resid) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) if do_status: - if exact_lump is None: - exact_lump = initializer(x_vec=nodes, eos=eos, t=t) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact_lump) + component_errors = compare_fluid_solutions(discr, state, exact) status_msg = ( "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) @@ -317,7 +320,7 @@ def my_pre_step(step, t, dt, state): logger.info(status_msg) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -336,7 +339,7 @@ def my_rhs(t, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") @@ -347,9 +350,9 @@ def my_rhs(t, state): final_dv = eos.dependent_vars(current_state) final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) final_resid = current_state - final_exact - my_write_viz(cv=current_state, dv=final_dv, exact_lump=final_exact, - resid=final_resid, step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + exact=final_exact, resid=final_resid) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 286e6b07e..2434be2c7 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -182,25 +182,29 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, exact=None, resid=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) - if exact is not None: - viz_fields.append(("exact_soln", exact)) - if resid is not None: - viz_fields.append(("residual", resid)) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + if resid is None: + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact", exact), + ("residual", resid)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -266,16 +270,15 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - local_health_error = my_health_check(state, dv, exact) - health_errors = False + health_errors = my_health_check(state, dv, exact) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: if dv is None: @@ -283,8 +286,8 @@ def my_pre_step(step, t, dt, state): if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) resid = state - exact - my_write_viz(cv=state, dv=dv, step=step, t=t, - exact=exact, resid=resid) + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) if do_status: if exact is None: @@ -298,7 +301,7 @@ def my_pre_step(step, t, dt, state): logger.info(status_msg) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -321,7 +324,7 @@ def my_rhs(t, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") @@ -332,9 +335,9 @@ def my_rhs(t, state): final_dv = eos.dependent_vars(current_state) final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) final_resid = current_state - final_exact - my_write_viz(cv=current_state, dv=final_dv, exact=final_exact, - resid=final_resid, step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + exact=final_exact, resid=final_resid) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index bb170b7d5..db34a3e5d 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -202,30 +202,34 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - def my_graceful_exit(cv, step, t, do_viz=False, do_restart=False, message=None): + def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, + message=None): if rank == 0: logger.info("Errors detected; attempting graceful exit.") if do_viz: - my_write_viz(cv, step, t) + my_write_viz(step=step, t=t, state=state) if do_restart: - my_write_restart(state=cv, step=step, t=t) + my_write_restart(step=step, t=t, state=state) if message is None: message = "Fatal simulation errors detected." raise RuntimeError(message) - def my_write_viz(cv, step, t, dv=None, exact=None, resid=None): - viz_fields = [("cv", cv)] - if dv is not None: - viz_fields.append(("dv", dv)) - if exact is not None: - viz_fields.append(("exact_soln", exact)) - if resid is not None: - viz_fields.append(("residual", resid)) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + if resid is None: + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact", exact), + ("residual", resid)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - def my_write_restart(state, step, t): + def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) rst_data = { "local_mesh": local_mesh, @@ -285,16 +289,15 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - local_health_error = my_health_check(state, dv, exact) - health_errors = False + health_errors = my_health_check(state, dv, exact) if comm is not None: - health_errors = comm.allreduce(local_health_error, op=MPI.LOR) + health_errors = comm.allreduce(health_errors, op=MPI.LOR) if health_errors and rank == 0: logger.info("Fluid solution failed health check.") pre_step_errors = pre_step_errors or health_errors if do_restart: - my_write_restart(state, step, t) + my_write_restart(step=step, t=t, state=state) if do_viz: if dv is None: @@ -302,8 +305,8 @@ def my_pre_step(step, t, dt, state): if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) resid = state - exact - my_write_viz(cv=state, dv=dv, step=step, t=t, - exact=exact, resid=resid) + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) if do_status: if exact is None: @@ -317,7 +320,7 @@ def my_pre_step(step, t, dt, state): logger.info(status_msg) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -340,7 +343,7 @@ def my_rhs(t, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") @@ -351,9 +354,9 @@ def my_rhs(t, state): final_dv = eos.dependent_vars(current_state) final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) final_resid = current_state - final_exact - my_write_viz(cv=current_state, dv=final_dv, exact=final_exact, - resid=final_resid, step=current_step, t=current_t) - my_write_restart(current_state, current_step, current_t) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + exact=final_exact, resid=final_resid) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() From 7d6c988ff9e226d1a6cc02a477eef13864979473 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 10:38:22 -0500 Subject: [PATCH 131/873] Correct some dumb issues with the examples. --- examples/autoignition-mpi.py | 2 +- examples/lump-mpi.py | 1 - examples/mixture-mpi.py | 3 +-- examples/pulse-mpi.py | 1 - examples/scalar-lump-mpi.py | 3 +-- examples/sod-mpi.py | 1 - 6 files changed, 3 insertions(+), 8 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ff4c56a2e..c9a7689bf 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -437,7 +437,7 @@ def my_pre_step(step, t, dt, state): if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = True + use_profiling = False use_logging = True use_leap = False casename = "autoignition" diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index de6f723b1..76937c734 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -111,7 +111,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, nhealth = 1 nrestart = 10 nviz = 1 - rank = 0 current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index f61e740be..91aa2b198 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -110,7 +110,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, nhealth = 1 nrestart = 5 nviz = 1 - rank = 0 current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder @@ -319,7 +318,7 @@ def my_pre_step(step, t, dt, state): if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) resid = state - exact - my_write_viz(cv=state, dv=dv, step=step, t=t, + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, resid=resid) if do_status: diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 18736ec68..5e07d8779 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -118,7 +118,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nrestart = 5 nviz = 10 nhealth = 1 - rank = 0 current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 80507d92d..e12b507eb 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -97,7 +97,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, dim = 3 nel_1d = 16 order = 3 - t_final = 0.01 + t_final = 0.005 current_cfl = 1.0 current_dt = .001 current_t = 0 @@ -106,7 +106,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, nrestart = 5 nviz = 1 nhealth = 1 - rank = 0 current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 2434be2c7..6de59f751 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -109,7 +109,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nrestart = 5 nviz = 10 nhealth = 10 - rank = 0 current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder From ab06ff7d8a2edf5f8507688567164952e12bf098 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 10:52:43 -0500 Subject: [PATCH 132/873] Correct errant call-sites to new utility signatures. --- examples/autoignition-mpi.py | 4 ++-- examples/lump-mpi.py | 4 ++-- examples/mixture-mpi.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index c9a7689bf..74ed10ba0 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -403,7 +403,7 @@ def my_pre_step(step, t, dt, state): production_rates=production_rates) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -418,7 +418,7 @@ def my_pre_step(step, t, dt, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 76937c734..ea1375ed9 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -312,7 +312,7 @@ def my_pre_step(step, t, dt, state): logger.info(status_msg) if pre_step_errors: - my_graceful_exit(cv=state, step=step, t=t, + my_graceful_exit(step=step, t=t, state=state, do_viz=(not do_viz), do_restart=(not do_restart), message="Error detected at prestep, exiting.") @@ -327,7 +327,7 @@ def my_pre_step(step, t, dt, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 91aa2b198..b433da1c0 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -348,7 +348,7 @@ def my_pre_step(step, t, dt, state): finish_tol = 1e-16 if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(cv=current_state, step=current_step, t=current_t, + my_graceful_exit(step=current_step, t=current_t, state=current_state, do_viz=True, do_restart=True, message="Simulation timestepping did not complete.") From 9c631364d56002955260a94b7cd5b95568a41564 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 11:04:50 -0500 Subject: [PATCH 133/873] Call logmgr_set_time on restart. --- examples/autoignition-mpi.py | 3 +++ examples/lump-mpi.py | 3 +++ examples/mixture-mpi.py | 3 +++ examples/pulse-mpi.py | 3 +++ examples/scalar-lump-mpi.py | 3 +++ examples/sod-mpi.py | 3 +++ examples/vortex-mpi.py | 3 +++ 7 files changed, 21 insertions(+) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 74ed10ba0..74487e0a6 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -257,6 +257,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes, t=0) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index ea1375ed9..7a1663ab5 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -168,6 +168,9 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = initializer(nodes) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index b433da1c0..bb27da3e2 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -188,6 +188,9 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = initializer(x_vec=nodes, eos=eos) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 5e07d8779..8fdd5ee29 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -175,6 +175,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index e12b507eb..aac58bd6a 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -179,6 +179,9 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = initializer(nodes) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 6de59f751..ad48851b0 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -163,6 +163,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = initializer(nodes) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index db34a3e5d..e86f60191 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -184,6 +184,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_t = restart_data["t"] current_step = rst_step current_state = restart_data["state"] + if logmgr: + from logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = initializer(nodes) From 1b4df75407f3e6e53cd347194497b99df687bada Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 11:23:10 -0500 Subject: [PATCH 134/873] Deprecate logmgr, dim, eos args to stepper. --- mirgecom/steppers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 765d1872e..6bc8aac2c 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -296,6 +296,13 @@ def advance_state(rhs, timestepper, state, t_final, # First, check if we have leap. import sys leap_timestepper = False + + if ((logmgr is not None) or (dim is not None) or (eos is not None)): + from warnings import warn + warn("Passing logmgr, dim, or eos into the stepper is a deprecated stepper " + "signature. See the examples for the current and preferred usage.", + DeprecationWarning, stacklevel=2) + if "leap" in sys.modules: # The timestepper can still either be a leap method generator # or a user-passed function. From c857e067f352a8d4f4eb0ad3fa192d14c17d2ab4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 11:29:25 -0500 Subject: [PATCH 135/873] Correct mistake in input restart file naming. --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 74487e0a6..35181ff8a 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -140,7 +140,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) From bdd4d90cec9c845cab82ad91f6e167c68806eefb Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 11:38:38 -0500 Subject: [PATCH 136/873] Correct mistake in input restart file naming. --- examples/lump-mpi.py | 2 +- examples/mixture-mpi.py | 2 +- examples/pulse-mpi.py | 2 +- examples/scalar-lump-mpi.py | 2 +- examples/sod-mpi.py | 2 +- examples/vortex-mpi.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 7a1663ab5..835553dab 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -123,7 +123,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index bb27da3e2..c6c8e9941 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -122,7 +122,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 8fdd5ee29..3229700d6 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -130,7 +130,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index aac58bd6a..f25f5d71c 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -134,7 +134,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index ad48851b0..0406c6f87 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -121,7 +121,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index e86f60191..8908af79b 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -129,7 +129,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=casename, step=rst_step, rank=rank) + rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) From 1a7e8e3cec7ec3efbb0b25ebf1d9c37aa914e1cf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 12:00:49 -0500 Subject: [PATCH 137/873] Correct import location for logmgr_set_time --- examples/autoignition-mpi.py | 2 +- examples/lump-mpi.py | 2 +- examples/mixture-mpi.py | 2 +- examples/pulse-mpi.py | 2 +- examples/scalar-lump-mpi.py | 2 +- examples/sod-mpi.py | 2 +- examples/vortex-mpi.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 35181ff8a..2bafb8e28 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -258,7 +258,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 835553dab..ce512a059 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -169,7 +169,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index c6c8e9941..8069fc43c 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -189,7 +189,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 3229700d6..bec26dd74 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -176,7 +176,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index f25f5d71c..0980a528e 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -180,7 +180,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 0406c6f87..fc9782f0a 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -164,7 +164,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 8908af79b..06c1a94ae 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -185,7 +185,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_step = rst_step current_state = restart_data["state"] if logmgr: - from logging_quantities import logmgr_set_time + from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 From 6a7d20c4f93c2e44168e6a56ad3064270056ae21 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 13:36:08 -0500 Subject: [PATCH 138/873] Document dt, deprecate get_timestep arg --- mirgecom/steppers.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 6bc8aac2c..7a60f5600 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -61,6 +61,8 @@ def _advance_state_stepper_func(rhs, timestepper, Simulated time at which to stop t: float Time at which to start + dt: float + Initial timestep size to use, optional if dt is adaptive istep: int Step number from which to start pre_step_callback @@ -140,6 +142,8 @@ def _advance_state_leap(rhs, timestepper, state, State id (required input for leap method generation) t: float Time at which to start + dt: float + Initial timestep size to use, optional if dt is adaptive istep: int Step number from which to start pre_step_callback @@ -272,6 +276,8 @@ def advance_state(rhs, timestepper, state, t_final, Simulated time at which to stop t: float Time at which to start + dt: float + Initial timestep size to use, optional if dt is adaptive istep: int Step number from which to start pre_step_callback @@ -303,6 +309,13 @@ def advance_state(rhs, timestepper, state, t_final, "signature. See the examples for the current and preferred usage.", DeprecationWarning, stacklevel=2) + if get_timestep is not None: + from warnings import warn + warn("Passing the get_timestep function into the stepper is deprecated. " + "Users should use the dt argument for constant timestep, and " + "perform any dt modification in the {pre,post}-step callbacks.", + DeprecationWarning, stacklevel=2) + if "leap" in sys.modules: # The timestepper can still either be a leap method generator # or a user-passed function. From ea98b59a44da492ab687e63ecc03c1c96b20c721 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 20:24:52 -0500 Subject: [PATCH 139/873] Update examples to use exceptions to clean up error handling, evict get_timestep, add order to restart data. --- examples/autoignition-mpi.py | 120 +++++++++++++-------------- examples/lump-mpi.py | 145 ++++++++++++++++----------------- examples/mixture-mpi.py | 146 ++++++++++++++++----------------- examples/pulse-mpi.py | 119 +++++++++++++-------------- examples/scalar-lump-mpi.py | 151 +++++++++++++++++----------------- examples/sod-mpi.py | 153 +++++++++++++++++------------------ examples/vortex-mpi.py | 145 ++++++++++++++++----------------- 7 files changed, 466 insertions(+), 513 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 2bafb8e28..71941774f 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -43,7 +43,6 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( - inviscid_sim_timestep, generate_and_distribute_mesh, write_visfile ) @@ -70,6 +69,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=False, use_leap=False, use_profiling=False, casename="autoignition", @@ -297,22 +308,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) - - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None, production_rates=None): if dv is None: dv = eos.dependent_vars(state) @@ -331,13 +326,14 @@ def my_write_restart(step, t, state): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": nproc } from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(dv, dt): + def my_health_check(dv): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -349,11 +345,6 @@ def my_health_check(dv, dt): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") - if dt < 0: - health_error = True - if rank == 0: - logger.info("Global DT is negative!") - return health_error def my_rhs(t, state): @@ -371,44 +362,49 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - pre_step_errors = False + try: + dv = None - if logmgr: - logmgr.tick_before() - - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) + if logmgr: + logmgr.tick_before() - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) - if do_health: - dv = eos.dependent_vars(state) - health_errors = my_health_check(dv, dt) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False - if do_viz: - production_rates = eos.get_production_rates(state) - if dv is None: + if do_health: dv = eos.dependent_vars(state) - my_write_viz(step=step, t=t, state=state, dv=dv, - production_rates=production_rates) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + health_errors = my_health_check(dv) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if step > 5: + health_errors = True + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + production_rates = eos.get_production_rates(state) + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(step=step, t=t, state=state, dv=dv, + production_rates=production_rates) + + except MyError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt @@ -416,14 +412,7 @@ def my_pre_step(step, t, dt, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final) # Dump the final data final_dv = eos.dependent_vars(current_state) @@ -437,6 +426,9 @@ def my_pre_step(step, t, dt, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index ce512a059..7f5cd46cc 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -37,10 +37,7 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import ( - inviscid_sim_timestep, - generate_and_distribute_mesh -) +from mirgecom.simutil import generate_and_distribute_mesh from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -64,6 +61,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, use_profiling=False, rst_step=None, rst_name=None, @@ -188,22 +197,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) - - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -226,6 +219,7 @@ def my_write_restart(state, step, t): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": nparts } @@ -264,60 +258,63 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - exact = None - pre_step_errors = False + try: + dv = None + exact = None - if logmgr: - logmgr.tick_before() - - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - do_status = check_step(step=step, interval=nstatus) + if logmgr: + logmgr.tick_before() - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_health: - dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(dv=dv, state=state, exact=exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: + if do_health: dv = eos.dependent_vars(state) - if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact - my_write_viz(step=step, t=t, dv=dv, state=state, exact=exact, - resid=resid) - - if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) + health_errors = my_health_check(dv=dv, state=state, exact=exact) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, dv=dv, state=state, exact=exact, + resid=resid) + + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + except MyError: if rank == 0: - logger.info(status_msg) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt @@ -325,14 +322,7 @@ def my_pre_step(step, t, dt, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final) # Dump the final data if rank == 0: @@ -350,6 +340,9 @@ def my_pre_step(step, t, dt, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 8069fc43c..ffc3005dc 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -37,10 +37,7 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import ( - inviscid_sim_timestep, - generate_and_distribute_mesh -) +from mirgecom.simutil import generate_and_distribute_mesh from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -67,6 +64,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, use_profiling=False, rst_step=None, rst_name=None, @@ -208,22 +217,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) - - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None, exact=None, resid=None): viz_fields = [("cv", state)] if dv is None: @@ -247,6 +240,7 @@ def my_write_restart(step, t, state): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": nparts } @@ -285,60 +279,63 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - exact = None - pre_step_errors = False + try: + dv = None + exact = None - if logmgr: - logmgr.tick_before() - - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - do_status = check_step(step=step, interval=nstatus) + if logmgr: + logmgr.tick_before() - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_health: - dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: + if do_health: dv = eos.dependent_vars(state) - if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, - exact=exact, resid=resid) - - if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) + health_errors = my_health_check(state, dv, exact) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) + + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + except MyError: if rank == 0: - logger.info(status_msg) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt @@ -346,14 +343,8 @@ def my_pre_step(step, t, dt, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final, eos=eos, + dim=dim) # Dump the final data if rank == 0: @@ -370,6 +361,9 @@ def my_pre_step(step, t, dt, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index bec26dd74..8875979d8 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -38,10 +38,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.euler import euler_operator -from mirgecom.simutil import ( - inviscid_sim_timestep, - generate_and_distribute_mesh -) +from mirgecom.simutil import generate_and_distribute_mesh from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -70,6 +67,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="pulse", @@ -196,22 +205,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, t_final=t_final, - constant_cfl=constant_cfl) - - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None): if dv is None: dv = eos.dependent_vars(state) @@ -228,17 +221,18 @@ def my_write_restart(step, t, state): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": num_parts } from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(dv, dt): + def my_health_check(pressure): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .8, 1.5): + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, .8, 1.5): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") return health_error @@ -257,42 +251,45 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - pre_step_errors = False + try: + dv = None - if logmgr: - logmgr.tick_before() + if logmgr: + logmgr.tick_before() - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - - if do_health: - dv = eos.dependent_vars(state) - health_errors = my_health_check(dv, dt) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: + if do_health: dv = eos.dependent_vars(state) - my_write_viz(step=step, t=t, state=state, dv=dv) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + health_errors = my_health_check(dv.pressure) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(step=step, t=t, state=state, dv=dv) + + except MyError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt @@ -300,14 +297,7 @@ def my_pre_step(step, t, dt, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final) # Dump the final data if rank == 0: @@ -321,6 +311,9 @@ def my_pre_step(step, t, dt, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 0980a528e..226094547 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -38,10 +38,7 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import ( - inviscid_sim_timestep, - generate_and_distribute_mesh -) +from mirgecom.simutil import generate_and_distribute_mesh from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -65,6 +62,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, use_profiling=False, rst_step=None, rst_name=None, @@ -199,22 +208,6 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, - t_final=t_final, constant_cfl=constant_cfl) - - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -237,17 +230,18 @@ def my_write_restart(step, t, state): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": nparts } from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact): + def my_health_check(state, pressure, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .9, 1.1): + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, .9, 1.1): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") @@ -271,60 +265,63 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - exact = None - pre_step_errors = False + try: + dv = None + exact = None - if logmgr: - logmgr.tick_before() - - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - do_status = check_step(step=step, interval=nstatus) + if logmgr: + logmgr.tick_before() - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_health: - dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: + if do_health: dv = eos.dependent_vars(state) - if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, - resid=resid) - - if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) + health_errors = my_health_check(state, dv.pressure, exact) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) + + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + except MyError: if rank == 0: - logger.info(status_msg) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt @@ -336,14 +333,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final) # Dump the final data if rank == 0: @@ -361,6 +351,9 @@ def my_rhs(t, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index fc9782f0a..c572a4aee 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -24,7 +24,7 @@ THE SOFTWARE. """ import logging -import numpy as np +import numpy as np # noqa import pyopencl as cl import pyopencl.tools as cl_tools from functools import partial @@ -37,10 +37,7 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import ( - inviscid_sim_timestep, - generate_and_distribute_mesh -) +from mirgecom.simutil import generate_and_distribute_mesh from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -64,6 +61,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="sod1d", @@ -184,18 +193,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -218,17 +215,18 @@ def my_write_restart(state, step, t): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": num_parts } from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact): + def my_health_check(state, pressure, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .09, 1.1): + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, .09, 1.1): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") @@ -252,67 +250,66 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - exact = None - pre_step_errors = False + try: + dv = None + exact = None - if logmgr: - logmgr.tick_before() + if logmgr: + logmgr.tick_before() - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - do_status = check_step(step=step, interval=nstatus) + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - - if do_health: - dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: + if do_health: dv = eos.dependent_vars(state) - if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, - resid=resid) - - if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) + health_errors = my_health_check(state, dv.pressure, exact) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) + + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + except MyError: if rank == 0: - logger.info(status_msg) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, t_final=t_final, - constant_cfl=constant_cfl) - def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) @@ -321,14 +318,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final) # Dump the final data if rank == 0: @@ -346,6 +336,9 @@ def my_rhs(t, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 06c1a94ae..8b89a908b 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -39,7 +39,6 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( - inviscid_sim_timestep, generate_and_distribute_mesh, check_step ) @@ -66,6 +65,18 @@ logger = logging.getLogger(__name__) +class MyError(Exception): + """Simple exception to kill the simulation.""" + + pass + + +class HealthCheckError(MyError): + """Simple exception to indicate a health check error.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="sod1d", @@ -205,18 +216,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - def my_graceful_exit(step, t, state, do_viz=False, do_restart=False, - message=None): - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - if do_viz: - my_write_viz(step=step, t=t, state=state) - if do_restart: - my_write_restart(step=step, t=t, state=state) - if message is None: - message = "Fatal simulation errors detected." - raise RuntimeError(message) - def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -239,17 +238,18 @@ def my_write_restart(step, t, state): "state": state, "t": t, "step": step, + "order": order, "global_nelements": global_nelements, "num_parts": num_parts } from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv, exact): + def my_health_check(state, pressure, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, .2, 1.02): + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, .2, 1.02): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") @@ -273,66 +273,65 @@ def my_post_step(step, t, dt, state): return state, dt def my_pre_step(step, t, dt, state): - dv = None - exact = None - pre_step_errors = False - - if logmgr: - logmgr.tick_before() + try: + dv = None + exact = None - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - do_status = check_step(step=step, interval=nstatus) + if logmgr: + logmgr.tick_before() - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) - if do_health: - dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if health_errors and rank == 0: - logger.info("Fluid solution failed health check.") - pre_step_errors = pre_step_errors or health_errors - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: + if do_health: dv = eos.dependent_vars(state) - if exact is None: exact = initializer(x_vec=nodes, eos=eos, t=t) - resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, - resid=resid) - - if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) + health_errors = my_health_check(state, dv.pressure, exact) + if comm is not None: + health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise HealthCheckError() + + if step == rst_step: # don't do viz or restart @ restart + do_viz = False + do_restart = False + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + resid = state - exact + my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid=resid) + + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + + except MyError: if rank == 0: - logger.info(status_msg) - - if pre_step_errors: - my_graceful_exit(step=step, t=t, state=state, - do_viz=(not do_viz), do_restart=(not do_restart), - message="Error detected at prestep, exiting.") + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise return state, dt - get_timestep = partial(inviscid_sim_timestep, discr=discr, - cfl=current_cfl, eos=eos, t_final=t_final, - constant_cfl=constant_cfl) - def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) @@ -341,14 +340,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - get_timestep=get_timestep, state=current_state, - t=current_t, t_final=t_final, eos=eos, dim=dim) - - finish_tol = 1e-16 - if np.abs(current_t - t_final) > finish_tol: - my_graceful_exit(step=current_step, t=current_t, state=current_state, - do_viz=True, do_restart=True, - message="Simulation timestepping did not complete.") + state=current_state, t=current_t, t_final=t_final) # Dump the final data if rank == 0: @@ -366,6 +358,9 @@ def my_rhs(t, state): elif use_profiling: print(actx.tabulate_profiling_data()) + finish_tol = 1e-16 + assert (current_t - t_final) > finish_tol + if __name__ == "__main__": logging.basicConfig(format="%(message)s", level=logging.INFO) From 72505bc114d1079e387bc0aceafc149fb1874002 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 8 Jul 2021 22:09:27 -0500 Subject: [PATCH 140/873] Correct finished check, return a proper constant dt result, some other indentation errors, etc. --- examples/autoignition-mpi.py | 7 +++---- examples/lump-mpi.py | 5 +++-- examples/mixture-mpi.py | 5 +++-- examples/pulse-mpi.py | 5 +++-- examples/scalar-lump-mpi.py | 7 ++++--- examples/sod-mpi.py | 5 +++-- examples/vortex-mpi.py | 5 +++-- 7 files changed, 22 insertions(+), 17 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 71941774f..4c4cf14a1 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -382,8 +382,6 @@ def my_pre_step(step, t, dt, state): health_errors = my_health_check(dv) if comm is not None: health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if step > 5: - health_errors = True if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") @@ -406,7 +404,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, @@ -427,7 +426,7 @@ def my_pre_step(step, t, dt, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 7f5cd46cc..9bf8f133f 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -316,7 +316,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, @@ -341,7 +342,7 @@ def my_pre_step(step, t, dt, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index ffc3005dc..8fc1f3c23 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -337,7 +337,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, @@ -362,7 +363,7 @@ def my_pre_step(step, t, dt, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 8875979d8..7b72a2925 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -291,7 +291,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, @@ -312,7 +313,7 @@ def my_pre_step(step, t, dt, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 226094547..b89afbb3b 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -287,7 +287,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise HealthCheckError() if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -323,7 +323,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, @@ -352,7 +353,7 @@ def my_rhs(t, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index c572a4aee..158c46be8 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -308,7 +308,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, @@ -337,7 +338,7 @@ def my_rhs(t, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 8b89a908b..be1e6dd53 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -330,7 +330,8 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - return state, dt + t_remaining = max(0, t_final - t) + return state, min(dt, t_remaining) def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, @@ -359,7 +360,7 @@ def my_rhs(t, state): print(actx.tabulate_profiling_data()) finish_tol = 1e-16 - assert (current_t - t_final) > finish_tol + assert np.abs(current_t - t_final) < finish_tol if __name__ == "__main__": From 3c3bbd521d96cb21bde08b9f1062f6192e3da1f4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 08:39:13 -0500 Subject: [PATCH 141/873] Correct and enhance the restart processing to demonstrate change-of-order on restart. --- examples/autoignition-mpi.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 4c4cf14a1..3450ea78b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -84,7 +84,7 @@ class HealthCheckError(MyError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=False, use_leap=False, use_profiling=False, casename="autoignition", - rst_step=None, rst_name=None): + rst_filename=None): """Drive example.""" cl_ctx = ctx_factory() @@ -150,8 +150,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) + restarting = rst_filename is not None + if restarting: # read the grid from restart data + rst_fname = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data restart_data = read_restart_data(actx, rst_fname) @@ -159,6 +160,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["num_parts"] == nproc + rst_time = restart_data["t"] + rst_step = restart_data["step"] + rst_order = restart_data["order"] else: # generate the grid from scratch from meshmode.mesh.generation import generate_regular_rect_mesh box_ll = -0.005 @@ -264,13 +268,22 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, my_boundary = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: my_boundary} - if rst_step: - current_t = restart_data["t"] + if restarting: current_step = rst_step - current_state = restart_data["state"] + current_t = rst_time if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) + if order == rst_order: + current_state = restart_data["state"] + else: + rst_state = restart_data["state"] + old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, + mpi_communicator=comm) + from meshmode.discretization.connection import make_same_mesh_connection + connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), + old_discr.discr_from_dd("vol")) + current_state = connection(rst_state) else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes, t=0) From 41f78ba8d1366ade0b14dc3a17ad5cd6ee0d4bf1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 11:23:09 -0500 Subject: [PATCH 142/873] Update restart logic, add missing final dump advice. --- examples/autoignition-mpi.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 3450ea78b..576146edd 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -334,17 +334,21 @@ def my_write_viz(step, t, state, dv=None, production_rates=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nproc - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) + if rst_fname == rst_filename: + if rank == 0: + logger.info("Skipping overwrite of restart file.") + else: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nproc + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(dv): health_error = False @@ -386,10 +390,6 @@ def my_pre_step(step, t, dt, state): do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_health: dv = eos.dependent_vars(state) health_errors = my_health_check(dv) @@ -427,6 +427,9 @@ def my_pre_step(step, t, dt, state): state=current_state, t=current_t, t_final=t_final) # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = eos.dependent_vars(current_state) final_dm = eos.get_production_rates(current_state) my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, From 5c3ab55e04abaaa5a412836bf5e1f06935edf6d0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 11:28:05 -0500 Subject: [PATCH 143/873] Use built-in exceptions instead of custom ones. --- examples/autoignition-mpi.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 576146edd..01fd0453f 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -69,18 +69,6 @@ logger = logging.getLogger(__name__) -class MyError(Exception): - """Simple exception to kill the simulation.""" - - pass - - -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=False, use_leap=False, use_profiling=False, casename="autoignition", @@ -395,10 +383,12 @@ def my_pre_step(step, t, dt, state): health_errors = my_health_check(dv) if comm is not None: health_errors = comm.allreduce(health_errors, op=MPI.LOR) + if step == 5: # quick test + health_errors = True if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise if do_restart: my_write_restart(step=step, t=t, state=state) @@ -410,12 +400,12 @@ def my_pre_step(step, t, dt, state): my_write_viz(step=step, t=t, state=state, dv=dv, production_rates=production_rates) - except MyError: + except BaseException: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) my_write_restart(step=step, t=t, state=state) - raise + raise RuntimeError t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) From c544dddac735625d205b6bc8b82490fbf0c68400 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 11:35:08 -0500 Subject: [PATCH 144/873] Satisfy pylint to raise an actual named exception inside try. --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 01fd0453f..2b1c2740d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -388,7 +388,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise + raise Exception if do_restart: my_write_restart(step=step, t=t, state=state) From 810ab46f8be29be096c5f246ffda9d6a7a29155a Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 9 Jul 2021 11:56:28 -0500 Subject: [PATCH 145/873] Fix up the documentation to have the correct signature for callbacks Co-authored-by: Matt Smith --- mirgecom/steppers.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 7a60f5600..f4913e352 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -67,11 +67,11 @@ def _advance_state_stepper_func(rhs, timestepper, Step number from which to start pre_step_callback An optional user-defined function, with signature: - ``state, dt = pre_step_callback(state, step, t, dt)``, + ``state, dt = pre_step_callback(step, t, dt, state)``, to be called before the timestepper is called for that particular step. post_step_callback An optional user-defined function, with signature: - ``state, dt = post_step_callback(state, step, t, dt)``, + ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. Returns @@ -148,11 +148,11 @@ def _advance_state_leap(rhs, timestepper, state, Step number from which to start pre_step_callback An optional user-defined function, with signature: - ``state, dt = pre_step_callback(state, step, t, dt)``, + ``state, dt = pre_step_callback(step, t, dt, state)``, to be called before the timestepper is called for that particular step. post_step_callback An optional user-defined function, with signature: - ``state, dt = post_step_callback(state, step, t, dt)``, + ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. Returns @@ -282,11 +282,11 @@ def advance_state(rhs, timestepper, state, t_final, Step number from which to start pre_step_callback An optional user-defined function, with signature: - ``state, dt = pre_step_callback(state, step, t, dt)``, + ``state, dt = pre_step_callback(step, t, dt, state)``, to be called before the timestepper is called for that particular step. post_step_callback An optional user-defined function, with signature: - ``state, dt = post_step_callback(state, step, t, dt)``, + ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. Returns From 549a8dd6732ce0098f53d90a9b8aae01132a7549 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 11:58:13 -0500 Subject: [PATCH 146/873] Massage exceptions a bit so that the error messages are a little more informative, cleaner. --- examples/autoignition-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 2b1c2740d..a9e44c47e 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -388,7 +388,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise Exception + raise RuntimeError("Failed health check.") if do_restart: my_write_restart(step=step, t=t, state=state) @@ -405,7 +405,7 @@ def my_pre_step(step, t, dt, state): logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) my_write_restart(step=step, t=t, state=state) - raise RuntimeError + raise t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) From af009c33c3bffd6008c00a6234e73923dc926666 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 12:10:41 -0500 Subject: [PATCH 147/873] Rearrange function def order for consistency and less "tism" activation. --- examples/autoignition-mpi.py | 28 ++++++++++++++-------------- examples/lump-mpi.py | 26 +++++++++++++------------- examples/mixture-mpi.py | 26 +++++++++++++------------- examples/pulse-mpi.py | 26 +++++++++++++------------- examples/scalar-lump-mpi.py | 18 +++++++++--------- examples/sod-mpi.py | 18 +++++++++--------- examples/vortex-mpi.py | 18 +++++++++--------- 7 files changed, 80 insertions(+), 80 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index a9e44c47e..5f684831b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -352,20 +352,6 @@ def my_health_check(dv): return health_error - def my_rhs(t, state): - return (euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) - + eos.get_species_source_terms(state)) - - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -410,6 +396,20 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return (euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + + eos.get_species_source_terms(state)) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 9bf8f133f..7deb72768 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -244,19 +244,6 @@ def my_health_check(dv, state, exact): return health_error - def my_rhs(t, state): - return euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) - - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -319,6 +306,19 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 8fc1f3c23..ddfa69bf1 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -265,19 +265,6 @@ def my_health_check(state, dv, exact): return health_error - def my_rhs(t, state): - return euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) - - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -340,6 +327,19 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 7b72a2925..39a407c87 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -237,19 +237,6 @@ def my_health_check(pressure): logger.info(f"{rank=}: Invalid pressure data found.") return health_error - def my_rhs(t, state): - return euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) - - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -294,6 +281,19 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return euler_operator(discr, cv=state, t=t, + boundaries=boundaries, eos=eos) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index b89afbb3b..e3d44f7a7 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -255,15 +255,6 @@ def my_health_check(state, pressure, exact): return health_error - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -326,6 +317,15 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 158c46be8..07ada666c 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -240,15 +240,6 @@ def my_health_check(state, pressure, exact): return health_error - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -311,6 +302,15 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index be1e6dd53..ede65fc3e 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -263,15 +263,6 @@ def my_health_check(state, pressure, exact): return health_error - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - def my_pre_step(step, t, dt, state): try: dv = None @@ -333,6 +324,15 @@ def my_pre_step(step, t, dt, state): t_remaining = max(0, t_final - t) return state, min(dt, t_remaining) + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) From 5306e301e92c3764c390e4e6fe29cec1080a4272 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 13:53:17 -0500 Subject: [PATCH 148/873] Tweak exception handling to our liking. --- examples/autoignition-mpi.py | 12 ++++++++---- examples/lump-mpi.py | 12 +++--------- examples/mixture-mpi.py | 12 +++--------- examples/pulse-mpi.py | 12 +++--------- examples/scalar-lump-mpi.py | 12 +++--------- examples/sod-mpi.py | 12 +++--------- examples/vortex-mpi.py | 12 +++--------- 7 files changed, 26 insertions(+), 58 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5f684831b..9e200d934 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -69,6 +69,12 @@ logger = logging.getLogger(__name__) +class MyRuntimeError(RuntimeError): + """Simple exception for fatal driver errors.""" + + pass + + @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=False, use_leap=False, use_profiling=False, casename="autoignition", @@ -369,12 +375,10 @@ def my_pre_step(step, t, dt, state): health_errors = my_health_check(dv) if comm is not None: health_errors = comm.allreduce(health_errors, op=MPI.LOR) - if step == 5: # quick test - health_errors = True if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise RuntimeError("Failed health check.") + raise MyRuntimeError("Failed simulation health check.") if do_restart: my_write_restart(step=step, t=t, state=state) @@ -386,7 +390,7 @@ def my_pre_step(step, t, dt, state): my_write_viz(step=step, t=t, state=state, dv=dv, production_rates=production_rates) - except BaseException: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 7deb72768..6f65263c9 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -61,18 +61,12 @@ logger = logging.getLogger(__name__) -class MyError(Exception): +class MyRuntimeError(RuntimeError): """Simple exception to kill the simulation.""" pass -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, use_profiling=False, rst_step=None, rst_name=None, @@ -267,7 +261,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise MyRuntimeError("Failed solution health check.") if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -296,7 +290,7 @@ def my_pre_step(step, t, dt, state): if rank == 0: logger.info(status_msg) - except MyError: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index ddfa69bf1..381d95dd0 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -64,18 +64,12 @@ logger = logging.getLogger(__name__) -class MyError(Exception): +class MyRuntimeError(RuntimeError): """Simple exception to kill the simulation.""" pass -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, use_profiling=False, rst_step=None, rst_name=None, @@ -288,7 +282,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise MyRuntimeError("Failed simulation health check.") if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -317,7 +311,7 @@ def my_pre_step(step, t, dt, state): if rank == 0: logger.info(status_msg) - except MyError: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 39a407c87..984b64fed 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -67,18 +67,12 @@ logger = logging.getLogger(__name__) -class MyError(Exception): +class MyRuntimeError(RuntimeError): """Simple exception to kill the simulation.""" pass -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="pulse", @@ -257,7 +251,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise MyRuntimeError("Failed simulation health check.") if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -271,7 +265,7 @@ def my_pre_step(step, t, dt, state): dv = eos.dependent_vars(state) my_write_viz(step=step, t=t, state=state, dv=dv) - except MyError: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index e3d44f7a7..a5d34a44c 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -62,18 +62,12 @@ logger = logging.getLogger(__name__) -class MyError(Exception): +class MyRuntimeError(RuntimeError): """Simple exception to kill the simulation.""" pass -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, use_profiling=False, rst_step=None, rst_name=None, @@ -278,7 +272,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise MyRuntimeError("Failed simulation health check.") if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -307,7 +301,7 @@ def my_pre_step(step, t, dt, state): if rank == 0: logger.info(status_msg) - except MyError: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 07ada666c..21be15bdf 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -61,18 +61,12 @@ logger = logging.getLogger(__name__) -class MyError(Exception): +class MyRuntimeError(RuntimeError): """Simple exception to kill the simulation.""" pass -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="sod1d", @@ -263,7 +257,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise MyRuntimeError("Failed simulation health check.") if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -292,7 +286,7 @@ def my_pre_step(step, t, dt, state): if rank == 0: logger.info(status_msg) - except MyError: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index ede65fc3e..383bedb7b 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -65,18 +65,12 @@ logger = logging.getLogger(__name__) -class MyError(Exception): +class MyRuntimeError(RuntimeError): """Simple exception to kill the simulation.""" pass -class HealthCheckError(MyError): - """Simple exception to indicate a health check error.""" - - pass - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="sod1d", @@ -285,7 +279,7 @@ def my_pre_step(step, t, dt, state): if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") - raise HealthCheckError() + raise MyRuntimeError("Failed simulation health check.") if step == rst_step: # don't do viz or restart @ restart do_viz = False @@ -314,7 +308,7 @@ def my_pre_step(step, t, dt, state): if rank == 0: logger.info(status_msg) - except MyError: + except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") my_write_viz(step=step, t=t, state=state) From 5bd30d8d511c48d5155e0fd58fca93bffe5becc8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 14:25:14 -0500 Subject: [PATCH 149/873] Add syncing utility and use it in examples. --- examples/autoignition-mpi.py | 7 +++---- examples/lump-mpi.py | 8 +++++--- examples/mixture-mpi.py | 6 +++--- examples/pulse-mpi.py | 6 +++--- examples/scalar-lump-mpi.py | 6 +++--- examples/sod-mpi.py | 6 +++--- examples/vortex-mpi.py | 6 +++--- mirgecom/simutil.py | 11 +++++++++++ 8 files changed, 34 insertions(+), 22 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 9e200d934..893b24e63 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -352,7 +352,7 @@ def my_health_check(dv): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - if check_range_local(discr, "vol", dv.temperature, 1.4e3, 3.3e3): + if check_range_local(discr, "vol", dv.temperature, 1.498e3, 1.52e3): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") @@ -372,9 +372,8 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - health_errors = my_health_check(dv) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(dv), comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 6f65263c9..75eae69c4 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -255,9 +255,11 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(dv=dv, state=state, exact=exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync( + my_health_check(dv=dv, state=state, exact=exact), + comm, op=MPI.LOR + ) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 381d95dd0..eb1ec13ea 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -276,9 +276,9 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(state, dv, exact), comm, + op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 984b64fed..7afdda6d3 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -245,9 +245,9 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - health_errors = my_health_check(dv.pressure) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(dv.pressure), comm, + op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index a5d34a44c..c7ce42fdc 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -266,9 +266,9 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv.pressure, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(state, dv.pressure, exact), + comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 21be15bdf..9e3165f4e 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -251,9 +251,9 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv.pressure, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(state, dv.pressure, exact), + comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 383bedb7b..17ab5a830 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -273,9 +273,9 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) - health_errors = my_health_check(state, dv.pressure, exact) - if comm is not None: - health_errors = comm.allreduce(health_errors, op=MPI.LOR) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(state, dv.pressure, exact), + comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 50bac0922..ac6219fa7 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -6,6 +6,7 @@ .. autofunction:: check_step .. autofunction:: inviscid_sim_timestep .. autofunction:: write_visfile +.. autofunction:: allsync Diagnostic utilities -------------------- @@ -122,6 +123,16 @@ def write_visfile(discr, io_fields, visualizer, vizname, ) +def allsync(local_values, comm=None, op=None): + """Perform allreduce if MPI comm is provided.""" + if comm is None: + return local_values + if op is None: + from mpi4py import MPI + op = MPI.MAX + return comm.allreduce(local_values, op=op) + + def check_range_local(discr, dd, field, min_value, max_value): """Check for any negative values.""" return ( From 56df2d87cdc7f1e0196a7d9bc7d86e0a46b3b501 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 16:39:32 -0500 Subject: [PATCH 150/873] Notify of which examples failed. --- examples/run_examples.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/run_examples.sh b/examples/run_examples.sh index c6c195a99..71a57d69d 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -7,6 +7,7 @@ origin=$(pwd) examples_dir=${1-$origin} declare -i exitcode=0 echo "Running examples in $examples_dir ..." +failed_examples="" for example in $examples_dir/*.py do if [[ "$example" == *"-mpi.py" ]] @@ -23,6 +24,7 @@ do else ((exitcode=exitcode+1)) echo "Example $example failed." + failed_examples="$failed_examples $example" fi done echo "Done running examples!" @@ -30,7 +32,7 @@ if [[ $exitcode -eq 0 ]] then echo "No errors." else - echo "Errors detected ($exitcode)." + echo "Errors detected ($exitcode):($failed_examples )" exit $exitcode fi #rm -f examples/*.vtu From 53a220d3a0dab9751ccaa774abddb0c4b58424ad Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 19:04:50 -0500 Subject: [PATCH 151/873] Fix merge error --- mirgecom/simutil.py | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 4467d0cfe..6a52d80c7 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -123,37 +123,6 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, ) return min(t_remaining, mydt) - if vis_timer: - ctm = vis_timer.start_sub_timer() - else: - ctm = nullcontext() - - with ctm: - visualizer.write_parallel_vtk_file( - comm, rank_fn, io_fields, - overwrite=overwrite, - par_manifest_filename=make_par_fname( - basename=vizname, step=step, t=t - ) - ) - - -def allsync(local_values, comm=None, op=None): - """Perform allreduce if MPI comm is provided.""" - if comm is None: - return local_values - if op is None: - from mpi4py import MPI - op = MPI.MAX - return comm.allreduce(local_values, op=op) - - -def check_range_local(discr, dd, field, min_value, max_value): - """Check for any negative values.""" - return ( - op.nodal_min_loc(discr, dd, field) < min_value - or op.nodal_max_loc(discr, dd, field) > max_value - ) def write_visfile(discr, io_fields, visualizer, vizname, step=0, t=0, overwrite=False, vis_timer=None): From f781d80ef0801fb4e41419c99e3652443b7db9ca Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 9 Jul 2021 23:28:57 -0500 Subject: [PATCH 152/873] Clean up a couple of drivers, move toward constant cfl support --- examples/autoignition-mpi.py | 29 ++++++++++++++++++++------ examples/vortex-mpi.py | 40 +++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 40a0904c9..5fdab4db0 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -314,7 +314,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - def my_write_viz(step, t, state, ts_field, dv=None, production_rates=None): + def my_write_status(dt, cfl): + if constant_cfl: + status_msg = f"------ {dt=}" + else: + status_msg = f"------ {cfl=}" + if rank == 0: + logger.info(status_msg) + + def my_write_viz(step, t, dt, state, ts_field=None, dv=None, + production_rates=None): if dv is None: dv = eos.dependent_vars(state) if production_rates is None: @@ -322,6 +331,8 @@ def my_write_viz(step, t, state, ts_field, dv=None, production_rates=None): viz_fields = [("cv", state), ("dv", dv), ("production_rates", production_rates)] + if ts_field is None: + ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) if constant_cfl: viz_fields.append(("local_dt", ts_field)) else: @@ -388,6 +399,7 @@ def my_pre_step(step, t, dt, state): do_viz = check_step(step=step, interval=nviz) do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) if do_health: dv = eos.dependent_vars(state) @@ -400,6 +412,9 @@ def my_pre_step(step, t, dt, state): ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) + if do_status: + my_write_status(dt, cfl) + if do_restart: my_write_restart(step=step, t=t, state=state) @@ -407,7 +422,7 @@ def my_pre_step(step, t, dt, state): production_rates = eos.get_production_rates(state) if dv is None: dv = eos.dependent_vars(state) - my_write_viz(step=step, t=t, state=state, dv=dv, + my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, production_rates=production_rates, ts_field=ts_field) @@ -418,8 +433,7 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? @@ -447,8 +461,11 @@ def my_rhs(t, state): final_dv = eos.dependent_vars(current_state) final_dm = eos.get_production_rates(current_state) - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, - production_rates=final_dm) + ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, + state=current_state) + my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, + dv=final_dv, production_rates=final_dm, ts_field=ts_field) + my_write_status(dt=dt, cfl=cfl) my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 17ab5a830..4831d0c0c 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -210,6 +210,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) + def my_write_status(component_errors, cfl=None): + status_msg = "" + if cfl is not None: + status_msg = f"------ {cfl=}\n" + status_msg += ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -239,7 +249,7 @@ def my_write_restart(step, t, state): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, pressure, exact): + def my_health_check(state, pressure, exact, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure) \ @@ -247,8 +257,6 @@ def my_health_check(state, pressure, exact): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) exittol = .1 if max(component_errors) > exittol: health_error = True @@ -273,9 +281,13 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(state, dv.pressure, exact), - comm, op=MPI.LOR) + health_errors = allsync( + my_health_check(state, dv.pressure, exact, component_errors), + comm, op=MPI.LOR + ) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") @@ -288,6 +300,13 @@ def my_pre_step(step, t, dt, state): if do_restart: my_write_restart(step=step, t=t, state=state) + if do_status: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(component_errors) + if do_viz: if dv is None: dv = eos.dependent_vars(state) @@ -297,17 +316,6 @@ def my_pre_step(step, t, dt, state): my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, resid=resid) - if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) - if rank == 0: - logger.info(status_msg) - except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") From b8114cde68bb3912dc9239e31edc3e7302230043 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 10 Jul 2021 07:54:10 -0500 Subject: [PATCH 153/873] add missing arg to write_vis --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5fdab4db0..4848f1de1 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -429,7 +429,7 @@ def my_pre_step(step, t, dt, state): except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) + my_write_viz(step=step, t=t, dt=dt, state=state) my_write_restart(step=step, t=t, state=state) raise From c523fa454d5ee4edb349c78742327f2614ff528d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 10 Jul 2021 07:55:18 -0500 Subject: [PATCH 154/873] Remove superfluous constant CFL example. --- examples/mixture-fixed-cfl-mpi.py | 315 ------------------------------ 1 file changed, 315 deletions(-) delete mode 100644 examples/mixture-fixed-cfl-mpi.py diff --git a/examples/mixture-fixed-cfl-mpi.py b/examples/mixture-fixed-cfl-mpi.py deleted file mode 100644 index a7200d2aa..000000000 --- a/examples/mixture-fixed-cfl-mpi.py +++ /dev/null @@ -1,315 +0,0 @@ -"""Demonstrate combustive mixture with constant CFL mode.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" -import logging -import numpy as np -import pyopencl as cl -import pyopencl.tools as cl_tools -from functools import partial - -from meshmode.array_context import PyOpenCLArrayContext -from meshmode.dof_array import thaw -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.eager import EagerDGDiscretization -from grudge.shortcuts import make_visualizer - - -from mirgecom.euler import euler_operator -from mirgecom.simutil import ( - check_step, - generate_and_distribute_mesh, - ExactSolutionMismatch -) -from mirgecom.inviscid import ( - get_inviscid_timestep, - get_inviscid_cfl -) -from mirgecom.io import make_init_message -from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step -from mirgecom.steppers import advance_state -from mirgecom.boundary import AdiabaticSlipBoundary -from mirgecom.initializers import MixtureInitializer -from mirgecom.eos import PyrometheusMixture - -import cantera -import pyrometheus as pyro - -logger = logging.getLogger(__name__) - - -@mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False): - """Drive example.""" - cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - dim = 2 - nel_1d = 8 - order = 1 - - # This example runs only 3 steps by default (to keep CI ~short) - # With the mixture defined below, equilibrium is achieved at ~40ms - # To run to equlibrium, set t_final >= 40ms. - t_final = 1e-7 - current_cfl = 0.01 - velocity = np.zeros(shape=(dim,)) - current_dt = 1e-9 - current_t = 0 - constant_cfl = True - nstatus = 1 - nviz = 2 - rank = 0 - checkpoint_t = current_t - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step - box_ll = -0.005 - box_ur = 0.005 - error_state = False - debug = False - - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,) * dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) - local_nelements = local_mesh.nelements - - discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm - ) - nodes = thaw(actx, discr.nodes()) - - # {{{ Set up initial state using Cantera - - # Use Cantera for initialization - # -- Pick up a CTI for the thermochemistry config - # --- Note: Users may add their own CTI file by dropping it into - # --- mirgecom/mechanisms alongside the other CTI files. - from mirgecom.mechanisms import get_mechanism_cti - mech_cti = get_mechanism_cti("uiuc") - - cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) - nspecies = cantera_soln.n_species - - # Initial temperature, pressure, and mixutre mole fractions are needed to - # set up the initial state in Cantera. - init_temperature = 1500.0 # Initial temperature hot enough to burn - # Parameters for calculating the amounts of fuel, oxidizer, and inert species - equiv_ratio = 1.0 - ox_di_ratio = 0.21 - stoich_ratio = 3.0 - # Grab the array indices for the specific species, ethylene, oxygen, and nitrogen - i_fu = cantera_soln.species_index("C2H4") - i_ox = cantera_soln.species_index("O2") - i_di = cantera_soln.species_index("N2") - x = np.zeros(nspecies) - # Set the species mole fractions according to our desired fuel/air mixture - x[i_fu] = (ox_di_ratio*equiv_ratio)/(stoich_ratio+ox_di_ratio*equiv_ratio) - x[i_ox] = stoich_ratio*x[i_fu]/equiv_ratio - x[i_di] = (1.0-ox_di_ratio)*x[i_ox]/ox_di_ratio - # Uncomment next line to make pylint fail when it can't find cantera.one_atm - one_atm = cantera.one_atm # pylint: disable=no-member - # one_atm = 101325.0 - - # Let the user know about how Cantera is being initilized - print(f"Input state (T,P,X) = ({init_temperature}, {one_atm}, {x}") - # Set Cantera internal gas temperature, pressure, and mole fractios - cantera_soln.TPX = init_temperature, one_atm, x - # Pull temperature, total density, mass fractions, and pressure from Cantera - # We need total density, and mass fractions to initialize the fluid/gas state. - can_t, can_rho, can_y = cantera_soln.TDY - can_p = cantera_soln.P - # *can_t*, *can_p* should not differ (significantly) from user's initial data, - # but we want to ensure that we use exactly the same starting point as Cantera, - # so we use Cantera's version of these data. - - # }}} - - # {{{ Create Pyrometheus thermochemistry object & EOS - - # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and - # generates a set of methods to calculate chemothermomechanical properties and - # states for this particular mechanism. - casename = "mixture-adaptive" - pyrometheus_mechanism = pyro.get_thermochem_class(cantera_soln)(actx.np) - eos = PyrometheusMixture(pyrometheus_mechanism, - temperature_guess=init_temperature) - - # }}} - - # {{{ MIRGE-Com state initialization - - # Initialize the fluid/gas state with Cantera-consistent data: - # (density, pressure, temperature, mass_fractions) - print(f"Cantera state (rho,T,P,Y) = ({can_rho}, {can_t}, {can_p}, {can_y}") - initializer = MixtureInitializer(dim=dim, nspecies=nspecies, - pressure=can_p, temperature=can_t, - massfractions=can_y, velocity=velocity) - - my_boundary = AdiabaticSlipBoundary() - boundaries = {BTAG_ALL: my_boundary} - current_state = initializer(eos=eos, x_vec=nodes, t=0) - - # Inspection at physics debugging time - if debug: - print("Initial MIRGE-Com state:") - print(f"{current_state=}") - print(f"Initial DV pressure: {eos.pressure(current_state)}") - print(f"Initial DV temperature: {eos.temperature(current_state)}") - - # }}} - - visualizer = make_visualizer(discr) - initname = initializer.__class__.__name__ - eosname = eos.__class__.__name__ - init_message = make_init_message(dim=dim, order=order, - nelements=local_nelements, - global_nelements=global_nelements, - dt=current_dt, t_final=t_final, nstatus=nstatus, - nviz=nviz, cfl=current_cfl, - constant_cfl=constant_cfl, initname=initname, - eosname=eosname, casename=casename) - - # Cantera equilibrate calculates the expected end state @ chemical equilibrium - # i.e. the expected state after all reactions - cantera_soln.equilibrate("UV") - eq_temperature, eq_density, eq_mass_fractions = cantera_soln.TDY - eq_pressure = cantera_soln.P - - # Report the expected final state to the user - if rank == 0: - logger.info(init_message) - logger.info(f"Expected equilibrium state:" - f" {eq_pressure=}, {eq_temperature=}," - f" {eq_density=}, {eq_mass_fractions=}") - - def my_rhs(t, state): - return (euler_operator(discr, cv=state, t=t, - boundaries=boundaries, eos=eos) - + eos.get_species_source_terms(state)) - - def mixture_prestep_function(step, t, dt, state): - do_viz = check_step(step, nviz) - viz_fields = [("cv", state)] - current_dt = dt - - if constant_cfl: - local_dt = get_inviscid_timestep(discr, eos=eos, cv=state) - from grudge.op import nodal_min - current_dt = current_cfl * nodal_min(discr, "vol", local_dt) - else: # constant dt mode - if do_viz: # calculate cfl field only if visualizing - local_cfl = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) - if do_viz: # extend viz field if viz time - # Calculate DV only if needed for visualization - dv = eos.dependent_vars(state) - viz_fields.append(("dv", dv)) - # only if vizzing, calculate reaction rates - reaction_rates = eos.get_production_rates(state) - viz_fields.append(("reaction_rates", reaction_rates)) - if constant_cfl: - viz_fields.append(("dt", local_dt)) - else: # constant dt mode - viz_fields.append(("cfl", local_cfl)) - - errors = current_dt < 0 or np.isnan(current_dt) or current_dt == np.inf - - if do_viz or errors: # write viz at viztime, or if there were errors - from mirgecom.io import make_rank_fname, make_par_fname - rank_fn = make_rank_fname(basename=casename, rank=rank, step=step, t=t) - visualizer.write_parallel_vtk_file( - comm, rank_fn, viz_fields, overwrite=True, - par_manifest_filename=make_par_fname( - basename=casename, step=step, t=t - ) - ) - - if check_step(step, nstatus) or errors: - if not do_viz: # we already have dv on viz steps - dv = eos.dependent_vars(state) - from grudge.op import nodal_max - min_temperature = nodal_min(discr, "vol", dv.temperature) - max_temperature = nodal_max(discr, "vol", dv.temperature) - min_pressure = nodal_min(discr, "vol", dv.pressure) - max_pressure = nodal_max(discr, "vol", dv.pressure) - if rank == 0: - logger.info(f"\nStep:{step}, Time:{t}, DT:{current_dt}," - f"CFL:{current_cfl}\n" - f"---- P({min_pressure}, {max_pressure})\n" - f"---- T({min_temperature}, {max_temperature})\n") - - # this exit is safe, errors(current_dt) is already collective - if errors: - logger.info("Fatal error: Invalid simulation DT") - import sys - sys.exit() - - t_remaining = max(0, t_final - t) - return min(t_remaining, current_dt) - - try: - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - checkpoint=mixture_prestep_function, state=current_state, - t=current_t, t_final=t_final) - - except ExactSolutionMismatch as ex: - error_state = True - current_step = ex.step - current_t = ex.t - current_state = ex.state - - if not check_step(current_step, nviz): # If final step not an output step - if rank == 0: - logger.info("Checkpointing final state ...") - mixture_prestep_function(current_step, t=current_t, - dt=(current_t - checkpoint_t), - state=current_state) - - if current_t - t_final < 0: - error_state = True - - if error_state: - raise ValueError("Simulation did not complete successfully.") - - if rank == 0: - logger.info(f"Simulation finished at time {current_t=}.") - - -if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) - main(use_leap=False) - -# vim: foldmethod=marker From c68f1e485eb0a4f242b394564dae5546b7fb4c92 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 09:45:48 -0500 Subject: [PATCH 155/873] Clean up, succinctify some of the interfaces, add cfl to viz interface. --- examples/autoignition-mpi.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 4848f1de1..ede8e5211 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -315,28 +315,22 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, f" {eq_density=}, {eq_mass_fractions=}") def my_write_status(dt, cfl): - if constant_cfl: - status_msg = f"------ {dt=}" - else: - status_msg = f"------ {cfl=}" + status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" if rank == 0: logger.info(status_msg) def my_write_viz(step, t, dt, state, ts_field=None, dv=None, - production_rates=None): + production_rates=None, cfl=None): if dv is None: dv = eos.dependent_vars(state) if production_rates is None: production_rates = eos.get_production_rates(state) - viz_fields = [("cv", state), - ("dv", dv), - ("production_rates", production_rates)] if ts_field is None: ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) - if constant_cfl: - viz_fields.append(("local_dt", ts_field)) - else: - viz_fields.append(("local_cfl", ts_field)) + viz_fields = [("cv", state), + ("dv", dv), + ("production_rates", production_rates), + ("dt" if constant_cfl else "cfl", ts_field)] write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -373,6 +367,7 @@ def my_health_check(dv): return health_error def my_get_timestep(t, dt, state): + # richer interface to calculate {dt,dfl} returns node-local estimates t_remaining = max(0, t_final - t) if constant_cfl: from mirgecom.inviscid import get_inviscid_timestep @@ -424,7 +419,7 @@ def my_pre_step(step, t, dt, state): dv = eos.dependent_vars(state) my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, production_rates=production_rates, - ts_field=ts_field) + ts_field=ts_field, cfl=cfl) except MyRuntimeError: if rank == 0: @@ -464,7 +459,7 @@ def my_rhs(t, state): ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, state=current_state) my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, - dv=final_dv, production_rates=final_dm, ts_field=ts_field) + dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) my_write_status(dt=dt, cfl=cfl) my_write_restart(step=current_step, t=current_t, state=current_state) From a3250f430bbbd230643d5988be0e108e46c89d4e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 09:47:48 -0500 Subject: [PATCH 156/873] Rarrange cosmetically into logical sections, use simutil timestep util. --- examples/lump-mpi.py | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 75eae69c4..f088a89e4 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -96,30 +96,26 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 3 - nel_1d = 16 - order = 3 + # timestepping control + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step t_final = 0.01 current_cfl = 1.0 - vel = np.zeros(shape=(dim,)) - orig = np.zeros(shape=(dim,)) - vel[:dim] = 1.0 current_dt = .001 current_t = 0 - eos = IdealSingleGas() - initializer = Lump(dim=dim, center=orig, velocity=vel) - boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} + current_step = 0 constant_cfl = False + + # some i/o frequencies nstatus = 1 nhealth = 1 nrestart = 10 nviz = 1 - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step + + dim = 3 rst_path = "restart_data/" rst_pattern = ( @@ -137,6 +133,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, else: # generate the grid from scratch box_ll = -5.0 box_ur = 5.0 + nel_1d = 16 from meshmode.mesh.generation import generate_regular_rect_mesh generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) @@ -144,6 +141,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, generate_mesh) local_nelements = local_mesh.nelements + order = 3 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -167,6 +165,14 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) + # soln setup, init + eos = IdealSingleGas() + vel = np.zeros(shape=(dim,)) + orig = np.zeros(shape=(dim,)) + vel[:dim] = 1.0 + initializer = Lump(dim=dim, center=orig, velocity=vel) + boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} + if rst_step: current_t = restart_data["t"] current_step = rst_step @@ -299,8 +305,10 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + from mirgecom.simutil import get_sim_timestep + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + constant_cfl) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? From 5d373ac4b02301a78412008aa0e2ff73b2088f53 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 09:49:13 -0500 Subject: [PATCH 157/873] Use simutil timestep util, clean up restart handling, some cosmetics --- examples/mixture-mpi.py | 105 +++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index eb1ec13ea..0b73ed486 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -72,8 +72,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_step=None, rst_name=None, - casename="uiuc_mixture", use_logmgr=True): + use_profiling=False, restart_file=None, casename="uiuc_mixture", + use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() @@ -99,41 +99,39 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 3 - nel_1d = 16 - order = 3 + # timestepping control + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step t_final = 0.002 current_cfl = 1.0 - velocity = np.zeros(shape=(dim,)) - velocity[:dim] = 1.0 current_dt = .001 current_t = 0 + current_step = 0 constant_cfl = False + + # some i/o frequencies nstatus = 1 nhealth = 1 nrestart = 5 nviz = 1 - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step + dim = 3 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) - + if restart_file: # read the grid from restart data from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, restart_file) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch + nel_1d = 16 box_ll = -5.0 box_ur = 5.0 from meshmode.mesh.generation import generate_regular_rect_mesh @@ -143,6 +141,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, generate_mesh) local_nelements = local_mesh.nelements + order = 3 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -182,14 +181,16 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, y0s[nspecies-1] = 1.0 - spec_sum # Mixture defaults to STP (p, T) = (1atm, 300K) + velocity = np.zeros(shape=(dim,)) + velocity[:dim] = 1.0 initializer = MixtureInitializer(dim=dim, nspecies=nspecies, massfractions=y0s, velocity=velocity) boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} nodes = thaw(actx, discr.nodes()) - if rst_step: + if restart_file: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -211,6 +212,13 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) + def my_write_status(component_errors): + status_msg = ( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + if rank == 0: + logger.info(status_msg) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): viz_fields = [("cv", state)] if dv is None: @@ -229,19 +237,20 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) - - def my_health_check(state, dv, exact): + if rst_fname != restart_file: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(dv, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -249,8 +258,6 @@ def my_health_check(state, dv, exact): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) exittol = .09 if max(component_errors) > exittol: health_error = True @@ -263,6 +270,7 @@ def my_pre_step(step, t, dt, state): try: dv = None exact = None + component_errors = None if logmgr: logmgr.tick_before() @@ -276,18 +284,16 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(state, dv, exact), comm, + health_errors = allsync(my_health_check(dv, component_errors), comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -301,15 +307,12 @@ def my_pre_step(step, t, dt, state): resid=resid) if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) - if rank == 0: - logger.info(status_msg) + if component_errors is None: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(component_errors) except MyRuntimeError: if rank == 0: @@ -318,8 +321,10 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + from mirgecom.simutil import get_sim_timestep + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + constant_cfl) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? From 71d74f8d9f8f1b327d82e4381131b22c2251fe40 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 10:15:19 -0500 Subject: [PATCH 158/873] Rename the timestepping interface, add note about viscous --- mirgecom/simutil.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 6a52d80c7..591752335 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -4,7 +4,7 @@ ----------------- .. autofunction:: check_step -.. autofunction:: inviscid_sim_timestep +.. autofunction:: get_sim_timestep .. autofunction:: write_visfile .. autofunction:: allsync @@ -48,7 +48,6 @@ import logging import numpy as np -from mirgecom.inviscid import get_inviscid_timestep # bad smell? import grudge.op as op logger = logging.getLogger(__name__) @@ -75,13 +74,13 @@ def check_step(step, interval): return False -def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, - t_final, constant_cfl=False): - """Return the maximum stable dt for inviscid fluid simulation. +def get_sim_timestep(discr, state, t, dt, cfl, eos, + t_final, constant_cfl=False): + """Return the maximum stable dt for fluid simulation. This routine returns *dt*, the users defined constant timestep, or *max_dt*, the maximum domain-wide stability-limited - timestep for an inviscid fluid simulation. It calls the collective: + timestep for a fluid simulation. It calls the collective: :func:`~grudge.op.nodal_min` on the inside which makes it domain-wide regardless of parallel decomposition. @@ -89,6 +88,11 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, - Constant DT mode: returns the minimum of (t_final-t, dt) - Constant CFL mode: returns (cfl * max_dt) + .. important:: + The current implementation is calculating an acoustic-limited + timestep and CFL for an inviscid fluid. The addition of viscous + fluxes includes modification to this routine. + Parameters ---------- discr @@ -116,6 +120,7 @@ def inviscid_sim_timestep(discr, state, t, dt, cfl, eos, mydt = dt t_remaining = max(0, t_final - t) if constant_cfl: + from mirgecom.inviscid import get_inviscid_timestep from grudge.op import nodal_min mydt = cfl * nodal_min( discr, "vol", From 07fa2728ba630a0e80cdac871b50be8ec440e50c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 11:56:05 -0500 Subject: [PATCH 159/873] Clean up examples a bit, massage timestepping control for constant CFL mode --- examples/autoignition-mpi.py | 13 ++-- examples/lump-mpi.py | 50 +++++++------ examples/mixture-mpi.py | 20 +++-- examples/pulse-mpi.py | 88 +++++++++++----------- examples/scalar-lump-mpi.py | 139 +++++++++++++++++++---------------- examples/sod-mpi.py | 93 ++++++++++++----------- examples/vortex-mpi.py | 119 ++++++++++++++++-------------- 7 files changed, 283 insertions(+), 239 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ede8e5211..836f97fa3 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -43,6 +43,7 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( + get_sim_timestep, generate_and_distribute_mesh, write_visfile ) @@ -143,12 +144,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - restarting = rst_filename is not None - if restarting: # read the grid from restart data - rst_fname = f"{rst_filename}-{rank:04d}.pkl" + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] @@ -261,7 +261,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, my_boundary = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: my_boundary} - if restarting: + if rst_filename: current_step = rst_step current_t = rst_time if logmgr: @@ -444,6 +444,9 @@ def my_rhs(t, state): boundaries=boundaries, eos=eos) + eos.get_species_source_terms(state)) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index f088a89e4..1cc4553c2 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -37,7 +37,10 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import generate_and_distribute_mesh +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -69,8 +72,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_step=None, rst_name=None, - casename="lump", use_logmgr=True): + use_profiling=False, rst_filename=None, casename="lump", + use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() @@ -121,11 +124,11 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] @@ -173,9 +176,9 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, initializer = Lump(dim=dim, center=orig, velocity=vel) boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} - if rst_step: + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -214,17 +217,18 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): def my_write_restart(state, step, t): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(dv, state, exact): health_error = False @@ -271,10 +275,6 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed solution health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -305,7 +305,6 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - from mirgecom.simutil import get_sim_timestep dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, constant_cfl) return state, dt @@ -323,6 +322,9 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 0b73ed486..5de084950 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -37,7 +37,10 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import generate_and_distribute_mesh +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -72,7 +75,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, restart_file=None, casename="uiuc_mixture", + use_profiling=False, rst_filename=None, casename="uiuc_mixture", use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() @@ -123,9 +126,10 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if restart_file: # read the grid from restart data + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, restart_file) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] @@ -188,7 +192,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} nodes = thaw(actx, discr.nodes()) - if restart_file: + if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] current_state = restart_data["state"] @@ -237,7 +241,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - if rst_fname != restart_file: + if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, "state": state, @@ -321,7 +325,6 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - from mirgecom.simutil import get_sim_timestep dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, constant_cfl) return state, dt @@ -339,6 +342,9 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 7afdda6d3..3831897b4 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -38,7 +38,10 @@ from grudge.shortcuts import make_visualizer from mirgecom.euler import euler_operator -from mirgecom.simutil import generate_and_distribute_mesh +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -76,7 +79,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="pulse", - rst_step=None, rst_name=None): + rst_filename=None): """Drive the example.""" cl_ctx = ctx_factory() @@ -102,41 +105,34 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 2 - nel_1d = 16 - order = 1 + # timestepping control + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step t_final = 0.1 current_cfl = 1.0 - vel = np.zeros(shape=(dim,)) - orig = np.zeros(shape=(dim,)) current_dt = .01 current_t = 0 - eos = IdealSingleGas() - initializer = Lump(dim=dim, center=orig, velocity=vel, rhoamp=0.0) - boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} - wall = AdiabaticSlipBoundary() - boundaries = {BTAG_ALL: wall} constant_cfl = False + + # some i/o frequencies nstatus = 1 nrestart = 5 nviz = 10 nhealth = 1 - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step + dim = 2 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) - + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] @@ -145,12 +141,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, from meshmode.mesh.generation import generate_regular_rect_mesh box_ll = -0.5 box_ur = 0.5 + nel_1d = 16 generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) local_nelements = local_mesh.nelements + order = 1 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -171,12 +169,19 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, ("t_log.max", "log walltime: {value:6g} s") ]) + eos = IdealSingleGas() + vel = np.zeros(shape=(dim,)) + orig = np.zeros(shape=(dim,)) + initializer = Lump(dim=dim, center=orig, velocity=vel, rhoamp=0.0) + boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} + wall = AdiabaticSlipBoundary() + boundaries = {BTAG_ALL: wall} uniform_state = initializer(nodes) acoustic_pulse = AcousticPulse(dim=dim, amplitude=1.0, width=.1, center=orig) - if rst_step: + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -210,17 +215,18 @@ def my_write_viz(step, t, state, dv=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": num_parts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(pressure): health_error = False @@ -253,10 +259,6 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -272,8 +274,9 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + constant_cfl) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? @@ -288,6 +291,9 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index c7ce42fdc..067ff22ea 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -38,7 +38,10 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import generate_and_distribute_mesh +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -70,7 +73,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_step=None, rst_name=None, + use_profiling=False, rst_filename=None, casename="lumpy-scalars", use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() @@ -97,50 +100,34 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 3 - nel_1d = 16 - order = 3 + # timestepping control + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step t_final = 0.005 current_cfl = 1.0 current_dt = .001 current_t = 0 constant_cfl = False + + # some i/o frequencies nstatus = 1 nrestart = 5 nviz = 1 nhealth = 1 - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step - box_ll = -5.0 - box_ur = 5.0 - - nspecies = 4 - centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) - spec_y0s = np.ones(shape=(nspecies,)) - spec_amplitudes = np.ones(shape=(nspecies,)) - eos = IdealSingleGas() - - velocity = np.ones(shape=(dim,)) - - initializer = MulticomponentLump(dim=dim, nspecies=nspecies, - spec_centers=centers, velocity=velocity, - spec_y0s=spec_y0s, - spec_amplitudes=spec_amplitudes) - boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} + dim = 3 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) - + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] @@ -148,6 +135,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, else: # generate the grid from scratch box_ll = -5.0 box_ur = 5.0 + nel_1d = 16 from meshmode.mesh.generation import generate_regular_rect_mesh generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) @@ -155,6 +143,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, generate_mesh) local_nelements = local_mesh.nelements + order = 3 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -178,9 +167,22 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) - if rst_step: + # soln setup and init + nspecies = 4 + centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) + spec_y0s = np.ones(shape=(nspecies,)) + spec_amplitudes = np.ones(shape=(nspecies,)) + eos = IdealSingleGas() + velocity = np.ones(shape=(dim,)) + + initializer = MulticomponentLump(dim=dim, nspecies=nspecies, + spec_centers=centers, velocity=velocity, + spec_y0s=spec_y0s, + spec_amplitudes=spec_amplitudes) + boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -202,6 +204,12 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if rank == 0: logger.info(init_message) + def my_write_status(component_errors): + if rank == 0: + logger.info( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -219,19 +227,20 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) - - def my_health_check(state, pressure, exact): + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure) \ @@ -239,8 +248,6 @@ def my_health_check(state, pressure, exact): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) exittol = .09 if max(component_errors) > exittol: health_error = True @@ -253,6 +260,7 @@ def my_pre_step(step, t, dt, state): try: dv = None exact = None + component_errors = None if logmgr: logmgr.tick_before() @@ -266,18 +274,18 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(state, dv.pressure, exact), - comm, op=MPI.LOR) + health_errors = allsync( + my_health_check(dv.pressure, component_errors), + comm, op=MPI.LOR + ) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -291,15 +299,12 @@ def my_pre_step(step, t, dt, state): resid=resid) if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) - if rank == 0: - logger.info(status_msg) + if component_errors is None: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(component_errors) except MyRuntimeError: if rank == 0: @@ -308,8 +313,9 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + constant_cfl) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? @@ -324,6 +330,9 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 9e3165f4e..888a68627 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -37,7 +37,10 @@ from mirgecom.euler import euler_operator -from mirgecom.simutil import generate_and_distribute_mesh +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -70,7 +73,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename="sod1d", - rst_step=None, rst_name=None): + rst_filename=None): """Drive the example.""" cl_ctx = ctx_factory() @@ -97,7 +100,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) dim = 1 - nel_1d = 24 order = 1 # tolerate large errors; case is unstable t_final = 0.01 @@ -123,17 +125,17 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) - + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == num_parts else: # generate the grid from scratch from meshmode.mesh.generation import generate_regular_rect_mesh + nel_1d = 24 box_ll = -5.0 box_ur = 5.0 generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, @@ -162,9 +164,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, ("t_log.max", "log walltime: {value:6g} s") ]) - if rst_step: + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -187,6 +189,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) + def my_write_status(component_errors): + if rank == 0: + logger.info( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors) + ) + def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) @@ -204,19 +213,20 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): def my_write_restart(state, step, t): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": num_parts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) - - def my_health_check(state, pressure, exact): + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure) \ @@ -224,8 +234,6 @@ def my_health_check(state, pressure, exact): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) exittol = .09 if max(component_errors) > exittol: health_error = True @@ -238,6 +246,7 @@ def my_pre_step(step, t, dt, state): try: dv = None exact = None + component_errors = None if logmgr: logmgr.tick_before() @@ -251,18 +260,18 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(state, dv.pressure, exact), - comm, op=MPI.LOR) + health_errors = allsync( + my_health_check(dv.pressure, exact, component_errors), + comm, op=MPI.LOR + ) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -276,15 +285,13 @@ def my_pre_step(step, t, dt, state): resid=resid) if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - status_msg = ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) - if rank == 0: - logger.info(status_msg) + if component_errors is None: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) + from mirgecom.simutil import compare_fluid_solutions + component_errors = \ + compare_fluid_solutions(discr, state, exact) + my_write_status(component_errors) except MyRuntimeError: if rank == 0: @@ -293,8 +300,9 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + constant_cfl) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? @@ -309,6 +317,9 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 4831d0c0c..356f5c99b 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -39,6 +39,7 @@ from mirgecom.euler import euler_operator from mirgecom.simutil import ( + get_sim_timestep, generate_and_distribute_mesh, check_step ) @@ -73,8 +74,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename="sod1d", - rst_step=None, rst_name=None): + use_leap=False, use_profiling=False, rst_filename=None, + casename="vortex"): """Drive the example.""" cl_ctx = ctx_factory() @@ -100,32 +101,26 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 2 - nel_1d = 16 - order = 3 + # timestepping control + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step t_final = 0.01 current_cfl = 1.0 - vel = np.zeros(shape=(dim,)) - orig = np.zeros(shape=(dim,)) - vel[:dim] = 1.0 current_dt = .001 current_t = 0 - eos = IdealSingleGas() - initializer = Vortex2D(center=orig, velocity=vel) - casename = "vortex" - boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} constant_cfl = False + + # some i/o frequencies nrestart = 10 nstatus = 1 nviz = 10 nhealth = 10 - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step + dim = 2 if dim != 2: raise ValueError("This example must be run with dim = 2.") @@ -133,25 +128,26 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) - + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == num_parts else: # generate the grid from scratch - from meshmode.mesh.generation import generate_regular_rect_mesh + nel_1d = 16 box_ll = -5.0 box_ur = 5.0 + from meshmode.mesh.generation import generate_regular_rect_mesh generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) local_mesh, global_nelements = generate_and_distribute_mesh(comm, generate_mesh) local_nelements = local_mesh.nelements + order = 3 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -185,9 +181,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) - if rst_step: + # soln setup and init + eos = IdealSingleGas() + vel = np.zeros(shape=(dim,)) + orig = np.zeros(shape=(dim,)) + vel[:dim] = 1.0 + initializer = Vortex2D(center=orig, velocity=vel) + boundaries = {BTAG_ALL: PrescribedBoundary(initializer)} + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -210,15 +213,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - def my_write_status(component_errors, cfl=None): - status_msg = "" - if cfl is not None: - status_msg = f"------ {cfl=}\n" - status_msg += ( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) + def my_write_status(state, component_errors, cfl=None): + if cfl is None: + from mirgecom.inviscid import get_inviscid_cfl + cfl = current_cfl if constant_cfl else \ + get_inviscid_cfl(discr, eos, current_dt, state) if rank == 0: - logger.info(status_msg) + logger.info( + f"------ {cfl=}\n" + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: @@ -237,19 +241,20 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": num_parts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) - - def my_health_check(state, pressure, exact, component_errors): + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure) \ @@ -269,6 +274,7 @@ def my_pre_step(step, t, dt, state): try: dv = None exact = None + component_errors = None if logmgr: logmgr.tick_before() @@ -285,7 +291,7 @@ def my_pre_step(step, t, dt, state): component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync health_errors = allsync( - my_health_check(state, dv.pressure, exact, component_errors), + my_health_check(dv.pressure, component_errors), comm, op=MPI.LOR ) if health_errors: @@ -293,19 +299,16 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) if do_status: - if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + if component_errors is None: + if exact is None: + exact = initializer(x_vec=nodes, eos=eos, t=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) - my_write_status(component_errors) + my_write_status(state, component_errors) if do_viz: if dv is None: @@ -323,8 +326,9 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + constant_cfl) + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? @@ -339,6 +343,9 @@ def my_rhs(t, state): return euler_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, From 59fc7a495143028ec79a0185afc06334064a7b15 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 12:03:33 -0500 Subject: [PATCH 160/873] Correct health call. --- examples/sod-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 888a68627..2e4bb350f 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -264,7 +264,7 @@ def my_pre_step(step, t, dt, state): component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync health_errors = allsync( - my_health_check(dv.pressure, exact, component_errors), + my_health_check(dv.pressure, component_errors), comm, op=MPI.LOR ) if health_errors: From 4595fccc8079fd2230feb5afdb6cae6705fd4232 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 12 Jul 2021 17:04:09 -0500 Subject: [PATCH 161/873] Sharpen and correct docstrings. Co-authored-by: Thomas H. Gibson --- examples/autoignition-mpi.py | 2 +- mirgecom/inviscid.py | 2 +- mirgecom/simutil.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 836f97fa3..965054130 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -367,7 +367,7 @@ def my_health_check(dv): return health_error def my_get_timestep(t, dt, state): - # richer interface to calculate {dt,dfl} returns node-local estimates + # richer interface to calculate {dt,cfl} returns node-local estimates t_remaining = max(0, t_final - t) if constant_cfl: from mirgecom.inviscid import get_inviscid_timestep diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index b14d2cad3..29a7bc9fc 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -67,7 +67,7 @@ def inviscid_flux(discr, eos, cv): def get_inviscid_timestep(discr, eos, cv): - """Routine returns the node-local maximum stable dt for inviscid fluid. + """Returns node-local estimates of the maximum stable timestep size for an inviscid fluid. The maximum stable timestep is computed from the acoustic wavespeed. diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 591752335..3b0a03c1e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -76,7 +76,7 @@ def check_step(step, interval): def get_sim_timestep(discr, state, t, dt, cfl, eos, t_final, constant_cfl=False): - """Return the maximum stable dt for fluid simulation. + """Return the maximum stable timestep for a typical fluid simulation. This routine returns *dt*, the users defined constant timestep, or *max_dt*, the maximum domain-wide stability-limited From 2fe594aad657913293df0b2817c5efd122b95beb Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 12 Jul 2021 17:08:10 -0500 Subject: [PATCH 162/873] Shorten the line without perturbing the info? --- mirgecom/inviscid.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 29a7bc9fc..e3fe348d2 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -67,7 +67,7 @@ def inviscid_flux(discr, eos, cv): def get_inviscid_timestep(discr, eos, cv): - """Returns node-local estimates of the maximum stable timestep size for an inviscid fluid. + """Return node-local stable timestep estimate for an inviscid fluid. The maximum stable timestep is computed from the acoustic wavespeed. @@ -94,7 +94,7 @@ def get_inviscid_timestep(discr, eos, cv): def get_inviscid_cfl(discr, eos, dt, cv): - """Calculate and return node-local CFL based on current state and timestep. + """Return node-local CFL based on current state and timestep. Parameters ---------- From 69a5fa480d1daca5d09d826b4a66ca3e9b5d56cf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 12 Jul 2021 18:06:24 -0500 Subject: [PATCH 163/873] Update production setup to be compatible with CFL/DT development. --- .ci-support/production-setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index df547769a..d2b739782 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -1,8 +1,8 @@ #!/bin/bash set -x -PRODUCTION_CHANGE_OWNER="illinois-ceesd" -PRODUCTION_CHANGE_BRANCH="" +PRODUCTION_CHANGE_OWNER="MTCam" +PRODUCTION_CHANGE_BRANCH="y1-update-cfl-dt" CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) git config user.email "stupid@dumb.com" git config user.name "CI Runner" From b32d7e649977b0c379038fe798c6fa77a84e6b2e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 13 Jul 2021 05:19:20 -0500 Subject: [PATCH 164/873] Bring up-to-date with CFL/DT --- examples/doublemach-mpi.py | 103 +++++++++++++++++++------------------ examples/nsmix-mpi.py | 63 ++++++++++++----------- examples/poiseuille-mpi.py | 62 +++++++++++----------- 3 files changed, 118 insertions(+), 110 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 44dcc6932..21756bbd4 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -55,6 +55,7 @@ from mirgecom.initializers import DoubleMachReflection from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport +from mirgecom.simutil import get_sim_timestep from logpyle import set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -124,7 +125,7 @@ def get_doublemach_mesh(): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_step=None, rst_name=None, + use_profiling=False, rst_filename=None, casename="doubleMach", use_logmgr=True): """Drive the example.""" cl_ctx = ctx_factory() @@ -151,51 +152,30 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 2 - order = 3 - # Too many steps for CI - # t_final = 1.0e-2 + # Timestepping control + current_step = 0 + timestepper = rk4_step t_final = 1.0e-3 current_cfl = 0.1 current_dt = 1.0e-4 current_t = 0 - # {{{ Initialize simple transport model - kappa = 1e-5 - sigma = 1e-5 - transport_model = SimpleTransport(viscosity=sigma, thermal_conductivity=kappa) - # }}} - eos = IdealSingleGas(transport_model=transport_model) - initializer = DoubleMachReflection() - - boundaries = { - DTAG_BOUNDARY("ic1"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("ic2"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("ic3"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("wall"): AdiabaticNoslipMovingBoundary(), - DTAG_BOUNDARY("out"): AdiabaticNoslipMovingBoundary(), - } constant_cfl = False + + # Some i/o frequencies nstatus = 10 nviz = 100 - current_step = 0 - timestepper = rk4_step nrestart = 100 nhealth = 1 - s0 = -6.0 - kappa = 1.0 - alpha = 2.0e-2 - from mpi4py import MPI - rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] @@ -206,10 +186,12 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, local_mesh, global_nelements = generate_and_distribute_mesh(comm, gen_grid) local_nelements = local_mesh.nelements + order = 3 discr = EagerDGDiscretization(actx, local_mesh, order=order, mpi_communicator=comm) nodes = thaw(actx, discr.nodes()) + dim = 2 if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) @@ -227,9 +209,30 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, ("t_log.max", "log walltime: {value:6g} s") ]) - if rst_step: + # Solution setup and initialization + s0 = -6.0 + kappa = 1.0 + alpha = 2.0e-2 + # {{{ Initialize simple transport model + kappa_t = 1e-5 + sigma_v = 1e-5 + transport_model = SimpleTransport(viscosity=sigma_v, + thermal_conductivity=kappa_t) + # }}} + eos = IdealSingleGas(transport_model=transport_model) + initializer = DoubleMachReflection() + + boundaries = { + DTAG_BOUNDARY("ic1"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("ic2"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("ic3"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("wall"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("out"): AdiabaticNoslipMovingBoundary(), + } + + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -276,17 +279,18 @@ def my_write_viz(step, t, state, dv=None, tagged_cells=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(state, dv): # Note: This health check is tuned s.t. it is a test that @@ -345,10 +349,6 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -367,8 +367,10 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - t_remaining = max(0, t_final - t) - return state, min(dt, t_remaining) + dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + + return state, dt def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? @@ -388,6 +390,9 @@ def my_rhs(t, state): s0=s0, kappa=kappa) ) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 1a9fb75c2..96ad8c8d8 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -75,7 +75,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_step=None, rst_name=None, + use_profiling=False, rst_filename=None, casename="nsmix", use_logmgr=True): """Drive example.""" cl_ctx = ctx_factory() @@ -102,41 +102,39 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 2 - nel_1d = 8 - order = 1 - + # Timestepping control # This example runs only 3 steps by default (to keep CI ~short) - # With the mixture defined below, equilibrium is achieved at ~40ms - # To run to equlibrium, set t_final >= 40ms. t_final = 3e-9 current_cfl = .0009 - velocity = np.zeros(shape=(dim,)) current_dt = 1e-9 current_t = 0 constant_cfl = True + current_step = 0 + timestepper = rk4_step + debug = False + + # Some i/o frequencies nstatus = 1 nviz = 5 nrestart = 5 nhealth = 1 - current_step = 0 - timestepper = rk4_step - debug = False + dim = 2 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch + nel_1d = 8 box_ll = -0.005 box_ur = 0.005 from meshmode.mesh.generation import generate_regular_rect_mesh @@ -147,6 +145,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, generate_mesh) local_nelements = local_mesh.nelements + order = 1 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -239,6 +238,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, # }}} # {{{ MIRGE-Com state initialization + velocity = np.zeros(shape=(dim,)) # Initialize the fluid/gas state with Cantera-consistent data: # (density, pressure, temperature, mass_fractions) @@ -251,9 +251,9 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, my_boundary = IsothermalNoSlipBoundary(wall_temperature=can_t) visc_bnds = {BTAG_ALL: my_boundary} - if rst_step: + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -325,17 +325,18 @@ def my_write_viz(step, t, state, dv=None, production_rates=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(state, dv): # Note: This health check is tuned to expected results @@ -395,10 +396,6 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -438,6 +435,10 @@ def my_rhs(t, state): reaction_source = eos.get_species_source_terms(state) return ns_rhs + reaction_source + current_dt = get_sim_timestep(discr, current_state, current_t, + current_dt, current_cfl, eos, + t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 78f458b5b..3c1bc0d22 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -87,7 +87,7 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_step=None, rst_name=None, + use_profiling=False, rst_filename=None, casename="poiseuille", use_logmgr=True): """Drive the example.""" cl_ctx = ctx_factory() @@ -114,42 +114,43 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, actx = PyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 2 - order = 1 + # timestepping control + timestepper = rk4_step t_final = 1e-6 current_cfl = 0.1 current_dt = 1e-8 current_t = 0 - casename = "poiseuille" constant_cfl = True + current_step = 0 + + # some i/o frequencies nstatus = 1 nviz = 1 nrestart = 100 nhealth = 1 - current_step = 0 - timestepper = rk4_step - left_boundary_location = 0 - right_boundary_location = 0.1 - npts_axis = (50, 30) - rank = comm.Get_rank() + # some geometry setup + dim = 2 if dim != 2: raise ValueError("This example must be run with dim = 2.") + left_boundary_location = 0 + right_boundary_location = 0.1 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" ) - if rst_step: # read the grid from restart data - rst_fname = rst_pattern.format(cname=rst_name, step=rst_step, rank=rank) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_fname) + restart_data = read_restart_data(actx, rst_filename) local_mesh = restart_data["local_mesh"] local_nelements = local_mesh.nelements global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch + npts_axis = (50, 30) box_ll = (left_boundary_location, 0.0) box_ur = (right_boundary_location, 0.02) generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) @@ -158,6 +159,7 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, generate_mesh) local_nelements = local_mesh.nelements + order = 1 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -212,9 +214,9 @@ def poiseuille_soln(nodes, eos, cv=None, **kwargs): DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=1.0)) - if rst_step: + if rst_filename: current_t = restart_data["t"] - current_step = rst_step + current_step = restart_data["step"] current_state = restart_data["state"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time @@ -266,17 +268,18 @@ def my_write_viz(step, t, state, dv=None, exact=None): def my_write_restart(step, t, state): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - rst_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(state, dv): health_error = False @@ -331,10 +334,6 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - if step == rst_step: # don't do viz or restart @ restart - do_viz = False - do_restart = False - if do_restart: my_write_restart(step=step, t=t, state=state) @@ -372,6 +371,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): return ns_operator(discr, eos=eos, boundaries=boundaries, cv=state, t=t) + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, From 2fe8e905f9d7d15ee9ab7e129c0f5734d9da011d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 13 Jul 2021 05:43:39 -0500 Subject: [PATCH 165/873] Update CFL reporting - report nodal max --- examples/vortex-mpi.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 8b33a4ab2..b5cf40c42 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -217,9 +217,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, def my_write_status(state, component_errors, cfl=None): if cfl is None: - from mirgecom.inviscid import get_inviscid_cfl - cfl = current_cfl if constant_cfl else \ - get_inviscid_cfl(discr, eos, current_dt, state) + if constant_cfl: + cfl = current_cfl + else: + from grudge.op import nodal_max + from mirgecom.inviscid import get_inviscid_cfl + cfl = nodal_max(discr, "vol", + get_inviscid_cfl(discr, eos, current_dt, cv=state)) if rank == 0: logger.info( f"------ {cfl=}\n" From 8024d2bdab98da123a2893d59ac9736762f28fcb Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 13 Jul 2021 05:54:18 -0500 Subject: [PATCH 166/873] Sync with cfl/dt --- .ci-support/production-setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index d2b739782..73e7c30dc 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -1,8 +1,8 @@ #!/bin/bash set -x -PRODUCTION_CHANGE_OWNER="MTCam" -PRODUCTION_CHANGE_BRANCH="y1-update-cfl-dt" +PRODUCTION_CHANGE_OWNER="" +PRODUCTION_CHANGE_BRANCH="" CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) git config user.email "stupid@dumb.com" git config user.name "CI Runner" From c4f8419a68359262c6e1f9a2ad730a3601a20f6a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 13 Jul 2021 05:56:43 -0500 Subject: [PATCH 167/873] Add gitattributes --- .ci-support/.gitattributes | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .ci-support/.gitattributes diff --git a/.ci-support/.gitattributes b/.ci-support/.gitattributes new file mode 100644 index 000000000..d7496e23b --- /dev/null +++ b/.ci-support/.gitattributes @@ -0,0 +1,2 @@ +production-setup.sh merge=ours +production-driver-setup.sh merge=ours From 493767e45f4310f636940a2501a3265fe58e340f Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 14 Jul 2021 13:24:30 -0500 Subject: [PATCH 168/873] fix CURRENT_FORK_OWNER --- .ci-support/production-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index 3d59a6259..2541be443 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -15,7 +15,7 @@ if [ -n "${PRODUCTION_CHANGE_BRANCH}" ]; then else echo "No updates to production branch (${CURRENT_BRANCH})" fi -CURRENT_FORK_OWNER="majosm" +CURRENT_FORK_OWNER="" if [ -n "${GITHUB_HEAD_REF}" ]; then git remote add changes https://github.com/${CURRENT_FORK_OWNER}/mirgecom git fetch changes From fc278bbd8d54ec637b06c3a59389c80c3388010f Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 14 Jul 2021 13:39:02 -0500 Subject: [PATCH 169/873] Move the CURRENT_FORK_OWNER back to illinois-ceesd --- .ci-support/production-setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index 2541be443..73e7c30dc 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -15,7 +15,7 @@ if [ -n "${PRODUCTION_CHANGE_BRANCH}" ]; then else echo "No updates to production branch (${CURRENT_BRANCH})" fi -CURRENT_FORK_OWNER="" +CURRENT_FORK_OWNER="illinois-ceesd" if [ -n "${GITHUB_HEAD_REF}" ]; then git remote add changes https://github.com/${CURRENT_FORK_OWNER}/mirgecom git fetch changes From 257f18d8bdc784cc348cf8cb8e9d923a723afd76 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 14 Jul 2021 14:24:39 -0500 Subject: [PATCH 170/873] Update production testing setup to be slightly more robust against wicked merges that try to change them. --- .ci-support/production-setup.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index 3d59a6259..750d49b11 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -7,6 +7,9 @@ CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) git config user.email "stupid@dumb.com" git config user.name "CI Runner" if [ -n "${PRODUCTION_CHANGE_BRANCH}" ]; then + if [ -z "${PRODUCTION_CHANGE_OWNER}"]; then + PRODUCTION_CHANGE_OWNER="illinois-ceesd" + fi git remote add production_change https://github.com/${PRODUCTION_CHANGE_OWNER}/mirgecom git fetch production_change git checkout production_change/${PRODUCTION_CHANGE_BRANCH} @@ -15,8 +18,11 @@ if [ -n "${PRODUCTION_CHANGE_BRANCH}" ]; then else echo "No updates to production branch (${CURRENT_BRANCH})" fi -CURRENT_FORK_OWNER="majosm" +CURRENT_FORK_OWNER="" if [ -n "${GITHUB_HEAD_REF}" ]; then + if [ -z "${CURRENT_FORK_OWNER}"]; then + CURRENT_FORK_OWNER="illinois-ceesd" + fi git remote add changes https://github.com/${CURRENT_FORK_OWNER}/mirgecom git fetch changes git checkout changes/${GITHUB_HEAD_REF} From d92fc90ee5a17a1b1f82f515ffa564a0cc90ebee Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 14 Jul 2021 14:50:14 -0500 Subject: [PATCH 171/873] update production testing scripts --- .ci-support/production-setup.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index 73e7c30dc..750d49b11 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -7,6 +7,9 @@ CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) git config user.email "stupid@dumb.com" git config user.name "CI Runner" if [ -n "${PRODUCTION_CHANGE_BRANCH}" ]; then + if [ -z "${PRODUCTION_CHANGE_OWNER}"]; then + PRODUCTION_CHANGE_OWNER="illinois-ceesd" + fi git remote add production_change https://github.com/${PRODUCTION_CHANGE_OWNER}/mirgecom git fetch production_change git checkout production_change/${PRODUCTION_CHANGE_BRANCH} @@ -15,8 +18,11 @@ if [ -n "${PRODUCTION_CHANGE_BRANCH}" ]; then else echo "No updates to production branch (${CURRENT_BRANCH})" fi -CURRENT_FORK_OWNER="illinois-ceesd" +CURRENT_FORK_OWNER="" if [ -n "${GITHUB_HEAD_REF}" ]; then + if [ -z "${CURRENT_FORK_OWNER}"]; then + CURRENT_FORK_OWNER="illinois-ceesd" + fi git remote add changes https://github.com/${CURRENT_FORK_OWNER}/mirgecom git fetch changes git checkout changes/${GITHUB_HEAD_REF} From 5c631f2480a38ab1a2da5fb8f6f922a92d51cfb6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 14 Jul 2021 15:16:29 -0500 Subject: [PATCH 172/873] Retain my (y1) copy of the production testing script - forever. --- .ci-support/production-setup.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.ci-support/production-setup.sh b/.ci-support/production-setup.sh index 750d49b11..c226837eb 100644 --- a/.ci-support/production-setup.sh +++ b/.ci-support/production-setup.sh @@ -27,5 +27,7 @@ if [ -n "${GITHUB_HEAD_REF}" ]; then git fetch changes git checkout changes/${GITHUB_HEAD_REF} git checkout ${CURRENT_BRANCH} + cp .ci-support/production-setup.sh my-setup.sh git merge changes/${GITHUB_HEAD_REF} --no-edit + cp my-setup.sh .ci-support/production-setup.sh fi From d61e435a6cf514dc7f57f9fa336f78e80d9fabb3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 15 Jul 2021 15:27:55 -0500 Subject: [PATCH 173/873] Use y1-production proper --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 75d6682ef..091a1cdc5 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -export PRODUCTION_BRANCH="y1-production-testing" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="y1-production-testing" # The base production branch to be installed by emirge # export PRODUCTION_CHANGE_FORK="" # The fork/home of production changes (if any) # export PRODUCTION_CHANGE_BRANCH="" # Branch from which to pull prod changes (if any) # From ac3b155df6e24592ac4a3d3a075347aba90b8285 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 15 Jul 2021 15:35:16 -0500 Subject: [PATCH 174/873] Use y1 proper --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 091a1cdc5..e64e87c8e 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -# export PRODUCTION_BRANCH="y1-production-testing" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_CHANGE_FORK="" # The fork/home of production changes (if any) # export PRODUCTION_CHANGE_BRANCH="" # Branch from which to pull prod changes (if any) # From eb19e957b91eeb26b782de8f0ee33c7787c8f44f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 15 Jul 2021 15:55:26 -0500 Subject: [PATCH 175/873] Use y1-memoize branch for production --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index e64e87c8e..2b9d64366 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="y1-memoize" # The base production branch to be installed by emirge # export PRODUCTION_CHANGE_FORK="" # The fork/home of production changes (if any) # export PRODUCTION_CHANGE_BRANCH="" # Branch from which to pull prod changes (if any) # From 4005f6fa7323f2117872c22763b428bfc16eafc2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 15 Jul 2021 17:28:52 -0500 Subject: [PATCH 176/873] Use better names for the getters. --- mirgecom/eos.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 142b6017a..cdfcf1ea0 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -398,11 +398,11 @@ def pressure(self, cv: ConservedVars): """ @memoize_in(cv, (PyrometheusMixture.pressure, type(self._pyrometheus_mech))) - def get(): + def get_pressure(): temperature = self.temperature(cv) y = self.species_fractions(cv) return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) - return get() + return get_pressure() def sound_speed(self, cv: ConservedVars): r"""Get the speed of sound in the gas. @@ -415,10 +415,10 @@ def sound_speed(self, cv: ConservedVars): """ @memoize_in(cv, (PyrometheusMixture.sound_speed, type(self._pyrometheus_mech))) - def get(): + def get_sos(): actx = cv.array_context return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) - return get() + return get_sos() def temperature(self, cv: ConservedVars): r"""Get the thermodynamic temperature of the gas. @@ -433,12 +433,12 @@ def temperature(self, cv: ConservedVars): """ @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) - def get(): + def get_temp(): y = self.species_fractions(cv) e = self.internal_energy(cv) / cv.mass return self._pyrometheus_mech.get_temperature(e, self._tguess, y, True) - return get() + return get_temp() def total_energy(self, cv, pressure): r""" From daf98f110ff0560dc498e44c2b325711be2b5b12 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 15 Jul 2021 20:18:35 -0500 Subject: [PATCH 177/873] Use y1 proper --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 2b9d64366..e64e87c8e 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -export PRODUCTION_BRANCH="y1-memoize" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_CHANGE_FORK="" # The fork/home of production changes (if any) # export PRODUCTION_CHANGE_BRANCH="" # Branch from which to pull prod changes (if any) # From 3b5d5f95e44efe5fe29d2961fbf2ce828fa613f5 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sat, 17 Jul 2021 14:23:37 -0500 Subject: [PATCH 178/873] Laxify the examples in production (#441) --- examples/autoignition-mpi.py | 57 +++++++++++++++++------- examples/doublemach-mpi.py | 58 ++++++++++++++++++------ examples/heat-source-mpi.py | 61 ++++++++++++++++++++------ examples/lump-mpi.py | 53 +++++++++++++++++----- examples/mixture-mpi.py | 57 ++++++++++++++++++------ examples/nsmix-mpi.py | 59 +++++++++++++++++++------ examples/poiseuille-mpi.py | 60 ++++++++++++++++++------- examples/pulse-mpi.py | 56 ++++++++++++++++++------ examples/scalar-lump-mpi.py | 57 ++++++++++++++++++------ examples/sod-mpi.py | 85 +++++++++++++++++++++++++----------- examples/vortex-mpi.py | 60 +++++++++++++++++-------- mirgecom/boundary.py | 2 +- 12 files changed, 498 insertions(+), 167 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 1d224a4fc..ec91c9ef0 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -29,7 +29,11 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -39,7 +43,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.euler import euler_operator from mirgecom.simutil import ( @@ -76,9 +79,9 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=False, - use_leap=False, use_profiling=False, casename="autoignition", - rst_filename=None): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive example.""" cl_ctx = ctx_factory() @@ -96,13 +99,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=False, if use_profiling: queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Some discretization parameters dim = 2 @@ -478,13 +480,36 @@ def my_rhs(t, state): if __name__ == "__main__": - logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = False - use_logging = True - use_leap = False + import argparse casename = "autoignition" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext - main(use_profiling=use_profiling, use_logmgr=use_logging, use_leap=use_leap, - casename=casename) + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 21756bbd4..dc3669377 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -30,7 +30,12 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext + from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.dof_desc import DTAG_BOUNDARY @@ -59,7 +64,6 @@ from logpyle import set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -124,9 +128,9 @@ def get_doublemach_mesh(): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_filename=None, - casename="doubleMach", use_logmgr=True): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -142,15 +146,14 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Timestepping control current_step = 0 @@ -416,7 +419,36 @@ def my_rhs(t, state): if __name__ == "__main__": + import argparse + casename = "doublemach" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + logging.basicConfig(format="%(message)s", level=logging.INFO) - main() + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 66643596d..4a2651e26 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -1,3 +1,5 @@ +"""Demonstrate heat source example.""" + __copyright__ = "Copyright (C) 2020 University of Illinois Board of Trustees" __license__ = """ @@ -25,8 +27,10 @@ import numpy.linalg as la # noqa import pyopencl as cl -from meshmode.array_context import thaw, PyOpenCLArrayContext - +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -50,7 +54,10 @@ @mpi_entry_point -def main(use_profiling=False, use_logmgr=False): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): + """Run the example.""" cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) @@ -62,15 +69,14 @@ def main(use_profiling=False, use_logmgr=False): filename="heat-source.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) from meshmode.distributed import MPIMeshDistributor, get_partition_by_pymetis mesh_dist = MPIMeshDistributor(comm) @@ -118,6 +124,7 @@ def main(use_profiling=False, use_logmgr=False): source_width = 0.2 + from meshmode.array_context import thaw nodes = thaw(actx, discr.nodes()) boundaries = { @@ -176,10 +183,36 @@ def rhs(t, u): if __name__ == "__main__": + import argparse + casename = "heat-source" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + logging.basicConfig(format="%(message)s", level=logging.INFO) - # Turn off profiling to not overwhelm CI - use_profiling = False - use_logging = True - main(use_profiling=use_profiling, use_logmgr=use_logging) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index c9c223def..bf5d68b05 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -29,7 +29,11 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -52,7 +56,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -71,9 +74,9 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_filename=None, casename="lump", - use_logmgr=True): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive example.""" cl_ctx = ctx_factory() @@ -91,13 +94,12 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, if use_profiling: queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: @@ -356,7 +358,36 @@ def my_rhs(t, state): if __name__ == "__main__": + import argparse + casename = "mass-lump" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + logging.basicConfig(format="%(message)s", level=logging.INFO) - main(use_leap=False) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 0f8a5abdf..777c62fd4 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -29,7 +29,11 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -55,7 +59,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -74,9 +77,9 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_filename=None, casename="uiuc_mixture", - use_logmgr=True): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive example.""" cl_ctx = ctx_factory() @@ -92,15 +95,14 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: @@ -376,7 +378,36 @@ def my_rhs(t, state): if __name__ == "__main__": + import argparse + casename = "uiuc-mixture" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + logging.basicConfig(format="%(message)s", level=logging.INFO) - main(use_leap=False) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 96ad8c8d8..a83e0cacb 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -29,7 +29,11 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -55,7 +59,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -74,9 +77,9 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_filename=None, - casename="nsmix", use_logmgr=True): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive example.""" cl_ctx = ctx_factory() @@ -92,15 +95,14 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Timestepping control # This example runs only 3 steps by default (to keep CI ~short) @@ -465,7 +467,36 @@ def my_rhs(t, state): if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) - main() + import argparse + casename = "nsmix" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 3c1bc0d22..d33fe5b59 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -30,7 +30,11 @@ from pytools.obj_array import make_obj_array from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -55,7 +59,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -86,9 +89,9 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_filename=None, - casename="poiseuille", use_logmgr=True): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -104,15 +107,14 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control timestepper = rk4_step @@ -401,10 +403,36 @@ def my_rhs(t, state): if __name__ == "__main__": - logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = False - use_logging = False + import argparse + casename = "poiseuille" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext - main(use_profiling=use_profiling, use_logmgr=use_logging) + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 5ee724cdc..5bd20266b 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -31,7 +31,11 @@ import pyopencl as cl import pyopencl.tools as cl_tools -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -55,7 +59,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -75,8 +78,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename="pulse", - rst_filename=None): + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -92,15 +95,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 @@ -318,8 +320,36 @@ def my_rhs(t, state): if __name__ == "__main__": - logging.basicConfig(format="%(message)s", level=logging.INFO) + import argparse + casename = "pulse" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext - main(use_leap=False) + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 93f760fa9..0185d8457 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -30,7 +30,11 @@ from functools import partial from pytools.obj_array import make_obj_array -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -53,7 +57,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -72,9 +75,9 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_leap=False, - use_profiling=False, rst_filename=None, - casename="lumpy-scalars", use_logmgr=True): +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive example.""" cl_ctx = ctx_factory() @@ -90,15 +93,14 @@ def main(ctx_factory=cl.create_some_context, use_leap=False, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 @@ -365,7 +367,36 @@ def my_rhs(t, state): if __name__ == "__main__": + import argparse + casename = "lumpy-scalars" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + logging.basicConfig(format="%(message)s", level=logging.INFO) - main(use_leap=False) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 062bfeb18..0d7dbbef7 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -29,7 +29,11 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -52,7 +56,6 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.profiling import PyOpenCLProfilingArrayContext from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, @@ -72,8 +75,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename="sod1d", - rst_filename=None): + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -89,40 +92,35 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 1 - order = 1 - # tolerate large errors; case is unstable + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + # timestepping control + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .0001 current_t = 0 - eos = IdealSingleGas() - initializer = SodShock1D(dim=dim) - boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) - } constant_cfl = False + current_step = 0 + + # some i/o frequencies nstatus = 10 nrestart = 5 nviz = 10 nhealth = 10 - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step + dim = 1 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" @@ -146,6 +144,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + order = 1 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -171,6 +170,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, ("t_log.max", "log walltime: {value:6g} s") ]) + initializer = SodShock1D(dim=dim) + eos = IdealSingleGas() + boundaries = { + BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + } if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] @@ -354,7 +358,36 @@ def my_rhs(t, state): if __name__ == "__main__": + import argparse + casename = "sod-shock" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + logging.basicConfig(format="%(message)s", level=logging.INFO) - main(use_leap=False) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index d7552cca6..b631c0e95 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -29,14 +29,16 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer -from mirgecom.profiling import PyOpenCLProfilingArrayContext - from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, @@ -74,8 +76,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, rst_filename=None, - casename="vortex"): + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -91,15 +93,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) else: queue = cl.CommandQueue(cl_ctx) - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 @@ -380,11 +381,36 @@ def my_rhs(t, state): if __name__ == "__main__": - logging.basicConfig(format="%(message)s", level=logging.INFO) - use_profiling = False - use_logging = True - use_leap = False + import argparse + casename = "vortex" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext - main(use_profiling=use_profiling, use_logmgr=use_logging, use_leap=use_leap) + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 3603ce767..274f10eaf 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -394,7 +394,7 @@ def adiabatic_slip_pair(self, discr, cv, btag, **kwargs): def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): """Get the exterior grad(Q) on the boundary.""" # Grab some boundary-relevant data - num_equations, dim = grad_cv.mass.shape + dim, = grad_cv.mass.shape # Subtract 2*wall-normal component of q # to enforce q=0 on the wall From 019470324af7456a2b6b80aa31fb49ea8697c336 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 17 Jul 2021 19:39:10 -0500 Subject: [PATCH 179/873] Use array context comparison in init --- mirgecom/initializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index b167bec33..009fbce92 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -254,7 +254,7 @@ def __call__(self, x_vec, *, eos=None, **kwargs): x0 = zeros + self._x0 energyl = zeros + gmn1 * self._energyl energyr = zeros + gmn1 * self._energyr - yesno = x_rel > x0 + yesno = actx.np.greater(x_rel, x0) mass = actx.np.where(yesno, rhor, rhol) energy = actx.np.where(yesno, energyr, energyl) mom = make_obj_array( From f1cd59151bd931ec5dd1a7ad7711fcc9c7364e35 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 20 Jul 2021 13:37:44 -0500 Subject: [PATCH 180/873] Pick up VTK requirement --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index b0654c66a..2a95e69ab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,7 @@ importlib-resources psutil gmsh PyYAML +vtk # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic From 20dd0b7742ed68a0e8138f584a9e064e63ca6c7b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 20 Jul 2021 20:33:22 -0500 Subject: [PATCH 181/873] Bring back time arg to init --- examples/lump-mpi.py | 10 +++++----- examples/mixture-mpi.py | 10 +++++----- examples/scalar-lump-mpi.py | 10 +++++----- examples/sod-mpi.py | 10 +++++----- examples/vortex-mpi.py | 10 +++++----- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index bf5d68b05..1a7d0d4d8 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -210,7 +210,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: resid = state - exact viz_fields = [("cv", state), @@ -270,7 +270,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import allsync health_errors = allsync( my_health_check(dv=dv, state=state, exact=exact), @@ -288,14 +288,14 @@ def my_pre_step(step, t, dt, state): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact my_write_viz(step=step, t=t, dv=dv, state=state, exact=exact, resid=resid) if do_status: if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) status_msg = ( @@ -342,7 +342,7 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) - final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) final_resid = current_state - final_exact my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, exact=final_exact, resid=final_resid) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 777c62fd4..0bd2dbd9c 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -234,7 +234,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: resid = state - exact viz_fields = [("cv", state), @@ -293,7 +293,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync @@ -311,7 +311,7 @@ def my_pre_step(step, t, dt, state): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, resid=resid) @@ -319,7 +319,7 @@ def my_pre_step(step, t, dt, state): if do_status: if component_errors is None: if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) my_write_status(component_errors) @@ -362,7 +362,7 @@ def my_rhs(t, state): if rank == 0: logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) - final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) final_resid = current_state - final_exact my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, exact=final_exact, resid=final_resid) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 0185d8457..3498c63b3 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -221,7 +221,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: resid = state - exact viz_fields = [("cv", state), @@ -280,7 +280,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync @@ -300,7 +300,7 @@ def my_pre_step(step, t, dt, state): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, resid=resid) @@ -308,7 +308,7 @@ def my_pre_step(step, t, dt, state): if do_status: if component_errors is None: if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) my_write_status(component_errors) @@ -351,7 +351,7 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) - final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) final_resid = current_state - final_exact my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, exact=final_exact, resid=final_resid) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 0d7dbbef7..759c92941 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -211,7 +211,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: resid = state - exact viz_fields = [("cv", state), @@ -270,7 +270,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync @@ -290,7 +290,7 @@ def my_pre_step(step, t, dt, state): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, resid=resid) @@ -298,7 +298,7 @@ def my_pre_step(step, t, dt, state): if do_status: if component_errors is None: if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = \ compare_fluid_solutions(discr, state, exact) @@ -342,7 +342,7 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) - final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) final_resid = current_state - final_exact my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, exact=final_exact, resid=final_resid) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index b631c0e95..f7d37e96b 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -236,7 +236,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: resid = state - exact viz_fields = [("cv", state), @@ -294,7 +294,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync @@ -313,7 +313,7 @@ def my_pre_step(step, t, dt, state): if do_status: if component_errors is None: if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) my_write_status(state, component_errors) @@ -322,7 +322,7 @@ def my_pre_step(step, t, dt, state): if dv is None: dv = eos.dependent_vars(state) if exact is None: - exact = initializer(x_vec=nodes, eos=eos, t=t) + exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, resid=resid) @@ -365,7 +365,7 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_dv = eos.dependent_vars(current_state) - final_exact = initializer(x_vec=nodes, eos=eos, t=current_t) + final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) final_resid = current_state - final_exact my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, exact=final_exact, resid=final_resid) From 3f0ea391c49b4301a51bdd34dc0ea98affa5be7e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 20 Jul 2021 21:13:53 -0500 Subject: [PATCH 182/873] Merged AV, current Euler, NS --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index eb00d7217..1adeba830 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -export PRODUCTION_BRANCH="lift-euler-production" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From dfcb4b5b9821a080533d00b14ead4b6eedd2410b Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 21 Jul 2021 11:26:54 -0500 Subject: [PATCH 183/873] Remove VTK from reqs --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f7e7c3458..b0654c66a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,6 @@ pyvisfile pymetis importlib-resources psutil -vtk gmsh PyYAML From 59e7afbe07903a8e3365aaf6ea6622bf60437f88 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 21 Jul 2021 11:33:07 -0500 Subject: [PATCH 184/873] Remove jump operator, prefer built-in --- mirgecom/flux.py | 3 +-- mirgecom/operators.py | 22 ---------------------- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index e1db66ec5..fa760154e 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -34,7 +34,6 @@ """ import numpy as np # noqa from meshmode.dof_array import DOFArray -from mirgecom.operators import jump from mirgecom.fluid import ( ConservedVars, make_conserved @@ -162,4 +161,4 @@ def lfr_flux(cv_tpair, f_tpair, normal, lam): object array of :class:`meshmode.dof_array.DOFArray` with the Lax-Friedrichs/Rusanov flux. """ - return f_tpair.avg@normal - lam*jump(cv_tpair)/2 + return f_tpair.avg@normal - lam*cv_tpair.diff/2 diff --git a/mirgecom/operators.py b/mirgecom/operators.py index a61e868cf..b7db09898 100644 --- a/mirgecom/operators.py +++ b/mirgecom/operators.py @@ -4,7 +4,6 @@ .. autofunction:: dg_div .. autofunction:: element_boundary_flux .. autofunction:: elbnd_flux -.. autofunction:: jump """ __copyright__ = """ @@ -32,27 +31,6 @@ """ -# placeholder awaits resolution on grudge PR #71 -def jump(trace_pair): - r"""Return the "jump" in the quantities represented by the *trace_pair*. - - The jump in a quantity $\mathbf{q}$ is denoted $[\mathbf{q}]$ and is - defined by: - .. math: - [\mathbf{q}] = \mathbf{q}^+ - \mathbf{q}^- - - Parameters - ---------- - trace_pair: :class:`grudge.sym.TracePair` - Represents the quantity for which the jump is to be calculated. - - Returns - ------- - like(trace_pair.int) - """ - return trace_pair.ext - trace_pair.int - - def elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, int_tpair, xrank_pairs, boundaries): """Generically compute flux across element boundaries.""" From ba3e59c5189d67f2339b29102bbd8293a021d8ee Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 21 Jul 2021 15:42:48 -0500 Subject: [PATCH 185/873] recover gmsh --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 681c5a6f6..a8fc69e34 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,6 +7,7 @@ pymetis importlib-resources psutil PyYAML +gmsh # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic From ddd960e02d091fa74abf9429fb310d32f2037901 Mon Sep 17 00:00:00 2001 From: jlevine18 Date: Thu, 22 Jul 2021 18:13:21 -0500 Subject: [PATCH 186/873] Add local maximum species diffusivity calculation (#420) Co-authored-by: Matt Smith Co-authored-by: Michael Campbell --- mirgecom/viscous.py | 48 ++++++++++++++++++++++++++++++++++++++++++-- test/test_viscous.py | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 4a73c252b..433610730 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -42,13 +42,15 @@ """ import numpy as np +from pytools import memoize_in from pytools.obj_array import make_obj_array from mirgecom.fluid import ( velocity_gradient, species_mass_fraction_gradient, make_conserved ) -from meshmode.dof_array import thaw +from meshmode.dof_array import thaw, DOFArray +import arraycontext def viscous_stress_tensor(discr, eos, cv, grad_cv): @@ -245,12 +247,20 @@ def get_viscous_timestep(discr, eos, cv): length_scales = characteristic_lengthscales(cv.array_context, discr) mu = 0 + d_alpha_max = 0 transport = eos.transport_model() if transport: mu = transport.viscosity(eos, cv) + d_alpha = transport.species_diffusivity(eos, cv) + if d_alpha is not np.empty and d_alpha.size != 0: + d_alpha_max = \ + get_local_max_species_diffusivity( + cv.array_context, discr, d_alpha + ) return( - length_scales / (compute_wavespeed(eos, cv) + mu / length_scales) + length_scales / (compute_wavespeed(eos, cv) + + ((mu + d_alpha_max) / length_scales)) ) @@ -275,3 +285,37 @@ def get_viscous_cfl(discr, eos, dt, cv): The CFL at each node. """ return dt / get_viscous_timestep(discr, eos=eos, cv=cv) + + +def get_local_max_species_diffusivity(actx, discr, d_alpha): + """Return the maximum species diffusivity at every point. + + Parameters + ---------- + actx: :class:`arraycontext.ArrayContext` + Array context to use + discr: :class:`grudge.eager.EagerDGDiscretization` + the discretization to use + d_alpha: np.ndarray + Species diffusivities + """ + return_dof = [] + for i in range(len(d_alpha[0])): + stacked_diffusivity = actx.np.stack([x[i] for x in d_alpha]) + + n_species, ni1, ni0 = stacked_diffusivity.shape + + @memoize_in(discr, ("max_species_diffusivity", n_species, i)) + def make_max_kernel(): + # fun fact: arraycontext needs these exact loop names to work (even + # though a loopy kernel can have whatever iterator names the user wants) + # TODO: see if the opposite order [i0, i1, i2] is faster due to higher + # spatial locality, causing fewer cache misses + return arraycontext.make_loopy_program( + "{ [i1,i0,i2]: 0<=i1 Date: Thu, 22 Jul 2021 18:48:38 -0500 Subject: [PATCH 187/873] Fix up the diffusivity presence check --- mirgecom/viscous.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 433610730..6e2373c68 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -252,7 +252,7 @@ def get_viscous_timestep(discr, eos, cv): if transport: mu = transport.viscosity(eos, cv) d_alpha = transport.species_diffusivity(eos, cv) - if d_alpha is not np.empty and d_alpha.size != 0: + if len(d_alpha) > 0: d_alpha_max = \ get_local_max_species_diffusivity( cv.array_context, discr, d_alpha From 47f70d179ef04eeae4445e5c686fda14f68dc65d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 22 Jul 2021 22:11:27 -0500 Subject: [PATCH 188/873] Merge main --- mirgecom/simutil.py | 2 ++ mirgecom/steppers.py | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 155121012..c9ef01c3a 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -155,6 +155,7 @@ def write_visfile(discr, io_fields, visualizer, vizname, comm = discr.mpi_communicator rank = 0 + if comm: rank = comm.Get_rank() @@ -165,6 +166,7 @@ def write_visfile(discr, io_fields, visualizer, vizname, viz_dir = os.path.dirname(rank_fn) if viz_dir and not os.path.exists(viz_dir): os.makedirs(viz_dir) + if comm: comm.barrier() diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 1490d6863..f7517d821 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -214,13 +214,11 @@ def _advance_state_leap(rhs, timestepper, state, if isinstance(state, np.ndarray): state = thaw(freeze(state, actx), actx) - if dt < 0: - return istep, t, state - if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) + stepper_cls.dt = dt # Leap interface here is *a bit* different. stepper_cls.dt = dt @@ -233,6 +231,7 @@ def _advance_state_leap(rhs, timestepper, state, state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) + stepper_cls.dt = dt istep += 1 From 2ac137b8d0c6b11a0f392ec388795c1e20787da4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 26 Jul 2021 07:06:05 -0500 Subject: [PATCH 189/873] Fixed missing raise. --- mirgecom/boundary.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 648b4702b..46a716d4d 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -112,6 +112,7 @@ def t_boundary_flux(self, discr, btag, cv, eos, **kwargs): def inviscid_boundary_flux(self, discr, btag, cv, eos, **kwargs): """Get the inviscid part of the physical flux across the boundary *btag*.""" + raise NotImplementedError() def viscous_boundary_flux(self, discr, btag, cv, grad_cv, grad_t, eos, **kwargs): """Get the viscous part of the physical flux across the boundary *btag*.""" @@ -119,6 +120,7 @@ def viscous_boundary_flux(self, discr, btag, cv, grad_cv, grad_t, eos, **kwargs) def boundary_pair(self, discr, btag, cv, eos, **kwargs): """Get the interior and exterior solution (*u*) on the boundary.""" + raise NotImplementedError() class PrescribedInviscidBoundary(FluidBC): From 5acba887cbe39300bf0b7d927fbaacc8fbea23f5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 27 Jul 2021 14:22:21 -0500 Subject: [PATCH 190/873] Add exact soln to Poiseuille case --- examples/poiseuille-mpi.py | 93 ++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 28 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index d33fe5b59..c93615d21 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -137,7 +137,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, raise ValueError("This example must be run with dim = 2.") left_boundary_location = 0 right_boundary_location = 0.1 - + ybottom = 0. + ytop = .02 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" @@ -153,8 +154,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, assert restart_data["nparts"] == nparts else: # generate the grid from scratch npts_axis = (50, 30) - box_ll = (left_boundary_location, 0.0) - box_ur = (right_boundary_location, 0.02) + box_ll = (left_boundary_location, ybottom) + box_ur = (right_boundary_location, ytop) generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) from mirgecom.simutil import generate_and_distribute_mesh local_mesh, global_nelements = generate_and_distribute_mesh(comm, @@ -189,32 +190,44 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, base_pressure = 100000.0 pressure_ratio = 1.001 + mu = 1.0 - def poiseuille_soln(nodes, eos, cv=None, **kwargs): - dim = len(nodes) + def poiseuille_2d(x_vec, eos, cv=None, **kwargs): + y = x_vec[1] + x = x_vec[0] x0 = left_boundary_location xmax = right_boundary_location xlen = xmax - x0 - p0 = base_pressure - p1 = pressure_ratio*p0 - p_x = p1 + p0*(1 - pressure_ratio)*(nodes[0] - x0)/xlen - ke = 0 - mass = nodes[0] + 1.0 - nodes[0] - momentum = make_obj_array([0*mass for i in range(dim)]) + p_low = base_pressure + p_hi = pressure_ratio*base_pressure + dp = p_hi - p_low + dpdx = dp/xlen + h = ytop - ybottom + u_x = dpdx*y*(h - y)/(2*mu) if exact else 0*x + p_x = p_hi - dpdx*x + rho = 1.0 + mass = 0*x + rho + u_y = 0*x + velocity = make_obj_array([u_x, u_y]) + ke = .5*np.dot(velocity, velocity)*mass + gamma = eos.gamma() if cv is not None: mass = cv.mass - momentum = cv.momentum - ke = .5*np.dot(cv.momentum, cv.momentum)/cv.mass - energy_bc = p_x / (eos.gamma() - 1) + ke - return make_conserved(dim, mass=mass, energy=energy_bc, - momentum=momentum) + vel = cv.velocity + ke = .5*np.dot(vel, vel)*mass + + rho_e = p_x/(gamma-1) + ke + return make_conserved(2, mass=mass, energy=rho_e, + momentum=mass*velocity) + + initializer = poiseuille_2d + eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=mu)) + exact = initializer(x_vec=nodes, eos=eos) - initializer = poiseuille_soln boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} - eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=1.0)) if rst_filename: current_t = restart_data["t"] @@ -225,7 +238,7 @@ def poiseuille_soln(nodes, eos, cv=None, **kwargs): logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(nodes=nodes, eos=eos) + current_state = exact vis_timer = None @@ -242,7 +255,7 @@ def poiseuille_soln(nodes, eos, cv=None, **kwargs): if rank == 0: logger.info(init_message) - def my_write_status(step, t, dt, dv, state): + def my_write_status(step, t, dt, dv, state, component_errors): from grudge.op import nodal_min, nodal_max p_min = nodal_min(discr, "vol", dv.pressure) p_max = nodal_max(discr, "vol", dv.pressure) @@ -257,13 +270,19 @@ def my_write_status(step, t, dt, dv, state): if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" - f"----- Temperature({t_min}, {t_max})\n") + f"----- Temperature({t_min}, {t_max})\n" + "----- errors=" + + ", ".join("%.3g" % en for en in component_errors)) - def my_write_viz(step, t, state, dv=None, exact=None): + def my_write_viz(step, t, state, dv=None): if dv is None: dv = eos.dependent_vars(state) + resid = state - exact viz_fields = [("cv", state), - ("dv", dv)] + ("dv", dv), + ("poiseuille", exact), + ("resid", resid)] + from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -283,7 +302,7 @@ def my_write_restart(step, t, state): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv): + def my_health_check(state, dv, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure): @@ -311,11 +330,18 @@ def my_health_check(state, dv): t_max = nodal_max(discr, "vol", dv.temperature) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + exittol = 10 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact soln.") + return health_error def my_pre_step(step, t, dt, state): try: dv = None + component_errors = None if logmgr: logmgr.tick_before() @@ -328,9 +354,13 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(state, dv), comm, - op=MPI.LOR) + health_errors = allsync( + my_health_check(state, dv, component_errors), comm, + op=MPI.LOR + ) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") @@ -350,7 +380,11 @@ def my_pre_step(step, t, dt, state): if do_status: # needed because logging fails to make output if dv is None: dv = eos.dependent_vars(state) - my_write_status(step=step, t=t, dt=dt, dv=dv, state=state) + if component_errors is None: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(step=step, t=t, dt=dt, dv=dv, state=state, + component_errors=component_errors) except MyRuntimeError: if rank == 0: @@ -388,10 +422,13 @@ def my_rhs(t, state): final_dv = eos.dependent_vars(current_state) final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, eos, t_final, constant_cfl) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, current_state, exact) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state) my_write_status(step=current_step, t=current_t, dt=final_dt, dv=final_dv, - state=current_state) + state=current_state, component_errors=component_errors) if logmgr: logmgr.close() From cfc71499884c07e463b7ed0a85afbc3dcf6afdd4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 27 Jul 2021 14:53:49 -0500 Subject: [PATCH 191/873] Correct initialization code in Poiseuille test. --- examples/poiseuille-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index c93615d21..d083a31a0 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -203,7 +203,7 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): dp = p_hi - p_low dpdx = dp/xlen h = ytop - ybottom - u_x = dpdx*y*(h - y)/(2*mu) if exact else 0*x + u_x = dpdx*y*(h - y)/(2*mu) p_x = p_hi - dpdx*x rho = 1.0 mass = 0*x + rho From 4a2d5900195fb1564b3b477460867c81dfb5f404 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 28 Jul 2021 10:07:46 -0500 Subject: [PATCH 192/873] Evict gmsh from requirements.txt (#461) --- conda-env.yml | 1 + requirements.txt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-env.yml b/conda-env.yml index 1b17db5e5..da3c54ab1 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -21,3 +21,4 @@ dependencies: - cantera - h5py * nompi_* # Make sure cantera does not pull in MPI through h5py - vtk +- gmsh diff --git a/requirements.txt b/requirements.txt index a8fc69e34..681c5a6f6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,6 @@ pymetis importlib-resources psutil PyYAML -gmsh # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic From 1ddeefe4c5ff2f875c2bdd950ccf0649f8c5d18b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 29 Jul 2021 14:22:20 -0500 Subject: [PATCH 193/873] Add a blurb to limit species mass fraction. --- examples/autoignition-mpi.py | 2 ++ mirgecom/fluid.py | 5 +++++ mirgecom/simutil.py | 12 ++++++++++++ 3 files changed, 19 insertions(+) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 385bf9636..a34e9b955 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -437,6 +437,8 @@ def my_pre_step(step, t, dt, state): def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw + from mirgecom.simutil import limit_species_mass_fractions + state = limit_species_mass_fractions(state) if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 193be1210..0b655eb32 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -243,6 +243,11 @@ def velocity(self): """Return the fluid velocity = momentum / mass.""" return self.momentum / self.mass + @property + def species_mass_fractions(self): + """Return the species mass fractions = species_mass / mass.""" + return self.species_mass / self.mass + def join(self): """Call :func:`join_conserved` on *self*.""" return join_conserved( diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ad2f9318f..e4760419d 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -251,3 +251,15 @@ def create_parallel_grid(comm, generate_grid): "instead. This function will disappear August 1, 2021", DeprecationWarning, stacklevel=2) return generate_and_distribute_mesh(comm=comm, generate_mesh=generate_grid) + + +def limit_species_mass_fractions(cv): + """Keep the species mass fractions from going negative.""" + y = cv.species_mass_fractions + if len(y) > 0: + actx = cv.array_context + zero = 0 * y[0] + for y_spec in y: + y_spec = actx.np.where(y_spec < 0, zero, y_spec) + cv = cv.replace(species_mass=cv.mass*y) + return(cv) From c5f8ee3deba28270a3cd8b0e83c0acd1db18c546 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 2 Aug 2021 13:32:48 +0200 Subject: [PATCH 194/873] Enable parallel lazy --- examples/autoignition-mpi.py | 2 +- examples/heat-source-mpi.py | 2 +- examples/lump-mpi.py | 2 +- examples/mixture-mpi.py | 2 +- examples/pulse-mpi.py | 2 +- examples/scalar-lump-mpi.py | 2 +- examples/sod-mpi.py | 2 +- examples/vortex-mpi.py | 2 +- examples/wave-mpi.py | 2 +- examples/wave.py | 2 +- requirements.txt | 8 ++++---- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 385bf9636..a22d8cabf 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 4a2651e26..5f5718c6a 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -29,7 +29,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 94e383dd6..25e449fa0 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 8ef283b73..9a2341bdf 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 0ef1e5976..b2de29a84 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -33,7 +33,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 45af790ea..f5ae093cc 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 229abab48..7f2c6165b 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 74564be19..02943fcd1 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 0892f5fc7..4e8ddd0a7 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -30,7 +30,7 @@ from pytools.obj_array import flat_obj_array from meshmode.array_context import (PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext) + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext # noqa diff --git a/examples/wave.py b/examples/wave.py index a57d1a8c2..112765fb5 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -37,7 +37,7 @@ from mirgecom.integrators import rk4_step from meshmode.array_context import (PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext) + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/requirements.txt b/requirements.txt index 5a5d4b277..f177cc693 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,13 +10,13 @@ psutil # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/inducer/loopy.git#egg=loopy +--editable git+https://github.com/kaushikcfd/loopy.git@pytato-array-context-transforms#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/inducer/meshmode.git#egg=meshmode +--editable git+https://github.com/kaushikcfd/arraycontext.git@pytato-array-context-transforms#egg=arraycontext +--editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge ---editable git+https://github.com/inducer/pytato.git#egg=pytato +--editable git+https://github.com/kaushikcfd/pytato.git@pytato-array-context-transforms#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From dc9abbd6fa543883e4cd030ac15bb349f500eaec Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Aug 2021 12:23:41 -0500 Subject: [PATCH 195/873] Switch temporarily to test --- .ci-support/production-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 00b7f228c..4f601929e 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -14,7 +14,7 @@ # patched by the incoming development. The following vars control the # production environment: # -# PRODUCTION_BRANCH = The production branch (default=y1-production) +PRODUCTION_BRANCH="y1-production-update" # PRODUCTION_FORK = The production fork (default=illinois-ceesd) # # If the environment file does not exist, the current development is From 0bc13548b5b50f6c93bc070c876a3ec50d8cbfac Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Aug 2021 12:29:19 -0500 Subject: [PATCH 196/873] Undo production switch --- .ci-support/production-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 4f601929e..00b7f228c 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -14,7 +14,7 @@ # patched by the incoming development. The following vars control the # production environment: # -PRODUCTION_BRANCH="y1-production-update" +# PRODUCTION_BRANCH = The production branch (default=y1-production) # PRODUCTION_FORK = The production fork (default=illinois-ceesd) # # If the environment file does not exist, the current development is From 70c2ccf8f8a22aad70e9aa503a3d06817db1e8f3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Aug 2021 13:20:26 -0500 Subject: [PATCH 197/873] Fix up viscous timestep estimate for non-DOFArray diffusivities --- mirgecom/viscous.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index ff02e72d4..fd147d963 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -342,10 +342,13 @@ def get_viscous_timestep(discr, eos, cv): mu = transport.viscosity(eos, cv) d_alpha = transport.species_diffusivity(eos, cv) if len(d_alpha) > 0: - d_alpha_max = \ - get_local_max_species_diffusivity( - cv.array_context, discr, d_alpha - ) + if isinstance(d_alpha[0], DOFArray): + d_alpha_max = \ + get_local_max_species_diffusivity( + cv.array_context, discr, d_alpha + ) + else: + d_alpha_max = np.max(d_alpha) return( length_scales / (compute_wavespeed(eos, cv) From ba73afa4d8498c53fd88b21dd5030c4bac679871 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Aug 2021 14:24:16 -0500 Subject: [PATCH 198/873] Fix up viscous timestep to deal with non DOFArrays --- mirgecom/viscous.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index fd147d963..e774a5d3c 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -342,13 +342,10 @@ def get_viscous_timestep(discr, eos, cv): mu = transport.viscosity(eos, cv) d_alpha = transport.species_diffusivity(eos, cv) if len(d_alpha) > 0: - if isinstance(d_alpha[0], DOFArray): - d_alpha_max = \ - get_local_max_species_diffusivity( - cv.array_context, discr, d_alpha - ) - else: - d_alpha_max = np.max(d_alpha) + d_alpha_max = \ + get_local_max_species_diffusivity( + cv.array_context, discr, d_alpha + ) return( length_scales / (compute_wavespeed(eos, cv) @@ -391,6 +388,9 @@ def get_local_max_species_diffusivity(actx, discr, d_alpha): d_alpha: np.ndarray Species diffusivities """ + if not isinstance(d_alpha[0], DOFArray): + return max(d_alpha) + return_dof = [] for i in range(len(d_alpha[0])): stacked_diffusivity = actx.np.stack([x[i] for x in d_alpha]) From f1c993870c1aa67b46bb99b375cce542304e35c7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Aug 2021 19:08:50 -0500 Subject: [PATCH 199/873] Fix per new transport API --- test/test_viscous.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_viscous.py b/test/test_viscous.py index 199a377a1..6cb92ad6f 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -107,7 +107,7 @@ def test_viscous_stress_tensor(actx_factory, transport_model): eos = IdealSingleGas(transport_model=tv_model) mu = tv_model.viscosity(eos, cv) - lam = tv_model.viscosity2(eos, cv) + lam = tv_model.volume_viscosity(eos, cv) # Exact answer for tau exp_grad_v = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) From 361cdec589e7f83da139a1a1eaf1e12b5a1e27e9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 5 Aug 2021 14:50:11 -0500 Subject: [PATCH 200/873] Split inviscid/euler tests. --- test/test_euler.py | 365 +++-------------------------------------- test/test_inviscid.py | 369 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 391 insertions(+), 343 deletions(-) create mode 100644 test/test_inviscid.py diff --git a/test/test_euler.py b/test/test_euler.py index f1144b3c3..8b0ea0702 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -40,8 +40,6 @@ from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.eager import interior_trace_pair -from grudge.symbolic.primitives import TracePair from mirgecom.euler import euler_operator from mirgecom.fluid import make_conserved from mirgecom.initializers import Vortex2D, Lump, MulticomponentLump @@ -57,339 +55,22 @@ from grudge.shortcuts import make_visualizer -from mirgecom.inviscid import ( - get_inviscid_timestep, - inviscid_flux -) +from mirgecom.inviscid import get_inviscid_timestep from mirgecom.integrators import rk4_step logger = logging.getLogger(__name__) -@pytest.mark.parametrize("nspecies", [0, 1, 10]) -@pytest.mark.parametrize("dim", [1, 2, 3]) -def test_inviscid_flux(actx_factory, nspecies, dim): - """Identity test - directly check inviscid flux routine - :func:`mirgecom.inviscid.inviscid_flux` against the exact expected result. - This test is designed to fail if the flux routine is broken. - - The expected inviscid flux is: - F(q) = - """ - actx = actx_factory() - - nel_1d = 16 - - from meshmode.mesh.generation import generate_regular_rect_mesh - - # for dim in [1, 2, 3]: - mesh = generate_regular_rect_mesh( - a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim - ) - - order = 3 - discr = EagerDGDiscretization(actx, mesh, order=order) - eos = IdealSingleGas() - - logger.info(f"Number of {dim}d elems: {mesh.nelements}") - - def rand(): - from meshmode.dof_array import DOFArray - return DOFArray( - actx, - tuple(actx.from_numpy(np.random.rand(grp.nelements, grp.nunit_dofs)) - for grp in discr.discr_from_dd("vol").groups) - ) - - mass = rand() - energy = rand() - mom = make_obj_array([rand() for _ in range(dim)]) - - mass_fractions = make_obj_array([rand() for _ in range(nspecies)]) - species_mass = mass * mass_fractions - - cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom, - species_mass=species_mass) - - # {{{ create the expected result - - p = eos.pressure(cv) - escale = (energy + p) / mass - - numeq = dim + 2 + nspecies - - expected_flux = np.zeros((numeq, dim), dtype=object) - expected_flux[0] = mom - expected_flux[1] = mom * escale - - for i in range(dim): - for j in range(dim): - expected_flux[2+i, j] = (mom[i] * mom[j] / mass + (p if i == j else 0)) - - for i in range(nspecies): - expected_flux[dim+2+i] = mom * mass_fractions[i] - - expected_flux = make_conserved(dim, q=expected_flux) - - # }}} - - flux = inviscid_flux(discr, eos, cv) - flux_resid = flux - expected_flux - - for i in range(numeq, dim): - for j in range(dim): - assert (la.norm(flux_resid[i, j].get())) == 0.0 - - -@pytest.mark.parametrize("dim", [1, 2, 3]) -def test_inviscid_flux_components(actx_factory, dim): - """Test uniform pressure case. - - Checks that the Euler-internal inviscid flux routine - :func:`mirgecom.inviscid.inviscid_flux` returns exactly the expected result - with a constant pressure and no flow. - - Expected inviscid flux is: - F(q) = - - Checks that only diagonal terms of the momentum flux: - [ rho(V.x.V) + pI ] are non-zero and return the correctly calculated p. - """ - actx = actx_factory() - - eos = IdealSingleGas() - - p0 = 1.0 - - nel_1d = 4 - - from meshmode.mesh.generation import generate_regular_rect_mesh - mesh = generate_regular_rect_mesh( - a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim - ) - - order = 3 - discr = EagerDGDiscretization(actx, mesh, order=order) - eos = IdealSingleGas() - - logger.info(f"Number of {dim}d elems: {mesh.nelements}") - # === this next block tests 1,2,3 dimensions, - # with single and multiple nodes/states. The - # purpose of this block is to ensure that when - # all components of V = 0, the flux recovers - # the expected values (and p0 within tolerance) - # === with V = 0, fixed P = p0 - tolerance = 1e-15 - nodes = thaw(actx, discr.nodes()) - mass = discr.zeros(actx) + np.dot(nodes, nodes) + 1.0 - mom = make_obj_array([discr.zeros(actx) for _ in range(dim)]) - p_exact = discr.zeros(actx) + p0 - energy = p_exact / 0.4 + 0.5 * np.dot(mom, mom) / mass - cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) - p = eos.pressure(cv) - flux = inviscid_flux(discr, eos, cv) - assert discr.norm(p - p_exact, np.inf) < tolerance - logger.info(f"{dim}d flux = {flux}") - - # for velocity zero, these components should be == zero - assert discr.norm(flux.mass, 2) == 0.0 - assert discr.norm(flux.energy, 2) == 0.0 - - # The momentum diagonal should be p - # Off-diagonal should be identically 0 - assert discr.norm(flux.momentum - p0*np.identity(dim), np.inf) < tolerance - - -@pytest.mark.parametrize(("dim", "livedim"), [ - (1, 0), - (2, 0), - (2, 1), - (3, 0), - (3, 1), - (3, 2), - ]) -def test_inviscid_mom_flux_components(actx_factory, dim, livedim): - r"""Constant pressure, V != 0: - - Checks that the flux terms are returned in the proper order by running - only 1 non-zero velocity component at-a-time. - """ - actx = actx_factory() - - eos = IdealSingleGas() - - p0 = 1.0 - - nel_1d = 4 - - from meshmode.mesh.generation import generate_regular_rect_mesh - mesh = generate_regular_rect_mesh( - a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim - ) - - order = 3 - discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) - - tolerance = 1e-15 - for livedim in range(dim): - mass = discr.zeros(actx) + 1.0 + np.dot(nodes, nodes) - mom = make_obj_array([discr.zeros(actx) for _ in range(dim)]) - mom[livedim] = mass - p_exact = discr.zeros(actx) + p0 - energy = ( - p_exact / (eos.gamma() - 1.0) - + 0.5 * np.dot(mom, mom) / mass - ) - cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) - p = eos.pressure(cv) - assert discr.norm(p - p_exact, np.inf) < tolerance - flux = inviscid_flux(discr, eos, cv) - logger.info(f"{dim}d flux = {flux}") - vel_exact = mom / mass - - # first two components should be nonzero in livedim only - assert discr.norm(flux.mass - mom, np.inf) == 0 - eflux_exact = (energy + p_exact)*vel_exact - assert discr.norm(flux.energy - eflux_exact, np.inf) == 0 - - logger.info("Testing momentum") - xpmomflux = mass*np.outer(vel_exact, vel_exact) + p_exact*np.identity(dim) - assert discr.norm(flux.momentum - xpmomflux, np.inf) < tolerance - - -@pytest.mark.parametrize("nspecies", [0, 10]) -@pytest.mark.parametrize("order", [1, 2, 3]) -@pytest.mark.parametrize("dim", [1, 2, 3]) -def test_facial_flux(actx_factory, nspecies, order, dim): - """Check the flux across element faces by prescribing states (q) - with known fluxes. Only uniform states are tested currently - ensuring - that the Lax-Friedrichs flux terms which are proportional to jumps in - state data vanish. - - Since the returned fluxes use state data which has been interpolated - to-and-from the element faces, this test is grid-dependent. - """ - actx = actx_factory() - - tolerance = 1e-14 - p0 = 1.0 - - from meshmode.mesh.generation import generate_regular_rect_mesh - from pytools.convergence import EOCRecorder - - eoc_rec0 = EOCRecorder() - eoc_rec1 = EOCRecorder() - for nel_1d in [4, 8, 12]: - - mesh = generate_regular_rect_mesh( - a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim - ) - - logger.info(f"Number of elements: {mesh.nelements}") - - discr = EagerDGDiscretization(actx, mesh, order=order) - zeros = discr.zeros(actx) - ones = zeros + 1.0 - - mass_input = discr.zeros(actx) + 1.0 - energy_input = discr.zeros(actx) + 2.5 - mom_input = flat_obj_array( - [discr.zeros(actx) for i in range(discr.dim)] - ) - mass_frac_input = flat_obj_array( - [ones / ((i + 1) * 10) for i in range(nspecies)] - ) - species_mass_input = mass_input * mass_frac_input - - cv = make_conserved( - dim, mass=mass_input, energy=energy_input, momentum=mom_input, - species_mass=species_mass_input) - - from mirgecom.inviscid import inviscid_facial_flux - - # Check the boundary facial fluxes as called on an interior boundary - interior_face_flux = inviscid_facial_flux( - discr, eos=IdealSingleGas(), cv_tpair=interior_trace_pair(discr, cv)) - - def inf_norm(data): - if len(data) > 0: - return discr.norm(data, np.inf, dd="all_faces") - else: - return 0.0 - - assert inf_norm(interior_face_flux.mass) < tolerance - assert inf_norm(interior_face_flux.energy) < tolerance - assert inf_norm(interior_face_flux.species_mass) < tolerance - - # The expected pressure is 1.0 (by design). And the flux diagonal is - # [rhov_x*v_x + p] (etc) since we have zero velocities it's just p. - # - # The off-diagonals are zero. We get a {ndim}-vector for each - # dimension, the flux for the x-component of momentum (for example) is: - # f_momx = < 1.0, 0 , 0> , then we return f_momx .dot. normal, which - # can introduce negative values. - # - # (Explanation courtesy of Mike Campbell, - # https://github.com/illinois-ceesd/mirgecom/pull/44#discussion_r463304292) - - nhat = thaw(actx, discr.normal("int_faces")) - mom_flux_exact = discr.project("int_faces", "all_faces", p0*nhat) - print(f"{mom_flux_exact=}") - print(f"{interior_face_flux.momentum=}") - momerr = inf_norm(interior_face_flux.momentum - mom_flux_exact) - assert momerr < tolerance - eoc_rec0.add_data_point(1.0 / nel_1d, momerr) - - # Check the boundary facial fluxes as called on a domain boundary - dir_mass = discr.project("vol", BTAG_ALL, mass_input) - dir_e = discr.project("vol", BTAG_ALL, energy_input) - dir_mom = discr.project("vol", BTAG_ALL, mom_input) - dir_mf = discr.project("vol", BTAG_ALL, species_mass_input) - - dir_bc = make_conserved(dim, mass=dir_mass, energy=dir_e, - momentum=dir_mom, species_mass=dir_mf) - dir_bval = make_conserved(dim, mass=dir_mass, energy=dir_e, - momentum=dir_mom, species_mass=dir_mf) - boundary_flux = inviscid_facial_flux( - discr, eos=IdealSingleGas(), - cv_tpair=TracePair(BTAG_ALL, interior=dir_bval, exterior=dir_bc) - ) - - assert inf_norm(boundary_flux.mass) < tolerance - assert inf_norm(boundary_flux.energy) < tolerance - assert inf_norm(boundary_flux.species_mass) < tolerance - - nhat = thaw(actx, discr.normal(BTAG_ALL)) - mom_flux_exact = discr.project(BTAG_ALL, "all_faces", p0*nhat) - momerr = inf_norm(boundary_flux.momentum - mom_flux_exact) - assert momerr < tolerance - - eoc_rec1.add_data_point(1.0 / nel_1d, momerr) - - logger.info( - f"standalone Errors:\n{eoc_rec0}" - f"boundary Errors:\n{eoc_rec1}" - ) - assert ( - eoc_rec0.order_estimate() >= order - 0.5 - or eoc_rec0.max_error() < 1e-9 - ) - assert ( - eoc_rec1.order_estimate() >= order - 0.5 - or eoc_rec1.max_error() < 1e-9 - ) - - @pytest.mark.parametrize("nspecies", [0, 10]) @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [1, 2, 3]) def test_uniform_rhs(actx_factory, nspecies, dim, order): - """Tests the inviscid rhs using a trivial constant/uniform state which - should yield rhs = 0 to FP. The test is performed for 1, 2, and 3 dimensions. - """ + """Test the inviscid rhs using a trivial constant/uniform state. + This state should yield rhs = 0 to FP. The test is performed for 1, 2, + and 3 dimensions, with orders 1, 2, and 3, with and without passive species. + """ actx = actx_factory() tolerance = 1e-9 @@ -512,11 +193,11 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): @pytest.mark.parametrize("order", [1, 2, 3]) def test_vortex_rhs(actx_factory, order): - """Tests the inviscid rhs using the non-trivial 2D isentropic vortex - case configured to yield rhs = 0. Checks several different orders and - refinement levels to check error behavior. - """ + """Test the inviscid rhs using the non-trivial 2D isentropic vortex. + The case is configured to yield rhs = 0. Checks several different orders + and refinement levels to check error behavior. + """ actx = actx_factory() dim = 2 @@ -567,9 +248,10 @@ def test_vortex_rhs(actx_factory, order): @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [1, 2, 3]) def test_lump_rhs(actx_factory, dim, order): - """Tests the inviscid rhs using the non-trivial 1, 2, and 3D mass lump - case against the analytic expressions of the RHS. Checks several different - orders and refinement levels to check error behavior. + """Test the inviscid rhs using the non-trivial mass lump case. + + The case is tested against the analytic expressions of the RHS. + Checks several different orders and refinement levels to check error behavior. """ actx = actx_factory() @@ -630,9 +312,10 @@ def test_lump_rhs(actx_factory, dim, order): @pytest.mark.parametrize("order", [1, 2, 4]) @pytest.mark.parametrize("v0", [0.0, 1.0]) def test_multilump_rhs(actx_factory, dim, order, v0): - """Tests the inviscid rhs using the non-trivial 1, 2, and 3D mass lump case - against the analytic expressions of the RHS. Checks several different orders - and refinement levels to check error behavior. + """Test the Euler rhs using the non-trivial 1, 2, and 3D mass lump case. + + The case is tested against the analytic expressions of the RHS. Checks several + different orders and refinement levels to check error behavior. """ actx = actx_factory() nspecies = 10 @@ -701,11 +384,8 @@ def test_multilump_rhs(actx_factory, dim, order, v0): ) +# Basic timestepping loop for the Euler operator def _euler_flow_stepper(actx, parameters): - """ - Implements a generic time stepping loop for testing an inviscid flow - using a spectral filter. - """ logging.basicConfig(format="%(message)s", level=logging.INFO) mesh = parameters["mesh"] @@ -831,12 +511,11 @@ def rhs(t, q): @pytest.mark.parametrize("order", [2, 3, 4]) def test_isentropic_vortex(actx_factory, order): - """Advance the 2D isentropic vortex case in time with non-zero velocities - using an RK4 timestepping scheme. Check the advanced field values against - the exact/analytic expressions. + """Advance the 2D isentropic vortex case in time with non-zero velocities. - This tests all parts of the Euler module working together, with results - converging at the expected rates vs. the order. + This test uses an RK4 timestepping scheme, and checks the advanced field values + against the exact/analytic expressions. This tests all parts of the Euler module + working together, with results converging at the expected rates vs. the order. """ actx = actx_factory() diff --git a/test/test_inviscid.py b/test/test_inviscid.py new file mode 100644 index 000000000..37f0cea94 --- /dev/null +++ b/test/test_inviscid.py @@ -0,0 +1,369 @@ +"""Test the inviscid fluid module.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np +import numpy.random +import numpy.linalg as la # noqa +import pyopencl.clmath # noqa +import logging +import pytest + +from pytools.obj_array import ( + flat_obj_array, + make_obj_array, +) + +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.eager import interior_trace_pair +from grudge.symbolic.primitives import TracePair +from mirgecom.fluid import make_conserved +from mirgecom.eos import IdealSingleGas +from grudge.eager import EagerDGDiscretization +from meshmode.array_context import ( # noqa + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests) +from mirgecom.inviscid import inviscid_flux + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("nspecies", [0, 1, 10]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_inviscid_flux(actx_factory, nspecies, dim): + """Check inviscid flux against exact expected result: Identity test. + + Directly check inviscid flux routine, :func:`mirgecom.inviscid.inviscid_flux`, + against the exact expected result. This test is designed to fail if the flux + routine is broken. + + The expected inviscid flux is: + F(q) = + """ + actx = actx_factory() + + nel_1d = 16 + + from meshmode.mesh.generation import generate_regular_rect_mesh + + # for dim in [1, 2, 3]: + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + order = 3 + discr = EagerDGDiscretization(actx, mesh, order=order) + eos = IdealSingleGas() + + logger.info(f"Number of {dim}d elems: {mesh.nelements}") + + def rand(): + from meshmode.dof_array import DOFArray + return DOFArray( + actx, + tuple(actx.from_numpy(np.random.rand(grp.nelements, grp.nunit_dofs)) + for grp in discr.discr_from_dd("vol").groups) + ) + + mass = rand() + energy = rand() + mom = make_obj_array([rand() for _ in range(dim)]) + + mass_fractions = make_obj_array([rand() for _ in range(nspecies)]) + species_mass = mass * mass_fractions + + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom, + species_mass=species_mass) + + # {{{ create the expected result + + p = eos.pressure(cv) + escale = (energy + p) / mass + + numeq = dim + 2 + nspecies + + expected_flux = np.zeros((numeq, dim), dtype=object) + expected_flux[0] = mom + expected_flux[1] = mom * escale + + for i in range(dim): + for j in range(dim): + expected_flux[2+i, j] = (mom[i] * mom[j] / mass + (p if i == j else 0)) + + for i in range(nspecies): + expected_flux[dim+2+i] = mom * mass_fractions[i] + + expected_flux = make_conserved(dim, q=expected_flux) + + # }}} + + flux = inviscid_flux(discr, eos, cv) + flux_resid = flux - expected_flux + + for i in range(numeq, dim): + for j in range(dim): + assert (la.norm(flux_resid[i, j].get())) == 0.0 + + +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_inviscid_flux_components(actx_factory, dim): + """Test uniform pressure case. + + Checks that the Euler-internal inviscid flux routine + :func:`mirgecom.inviscid.inviscid_flux` returns exactly the expected result + with a constant pressure and no flow. + + Expected inviscid flux is: + F(q) = + + Checks that only diagonal terms of the momentum flux: + [ rho(V.x.V) + pI ] are non-zero and return the correctly calculated p. + """ + actx = actx_factory() + + eos = IdealSingleGas() + + p0 = 1.0 + + nel_1d = 4 + + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + order = 3 + discr = EagerDGDiscretization(actx, mesh, order=order) + eos = IdealSingleGas() + + logger.info(f"Number of {dim}d elems: {mesh.nelements}") + # === this next block tests 1,2,3 dimensions, + # with single and multiple nodes/states. The + # purpose of this block is to ensure that when + # all components of V = 0, the flux recovers + # the expected values (and p0 within tolerance) + # === with V = 0, fixed P = p0 + tolerance = 1e-15 + nodes = thaw(actx, discr.nodes()) + mass = discr.zeros(actx) + np.dot(nodes, nodes) + 1.0 + mom = make_obj_array([discr.zeros(actx) for _ in range(dim)]) + p_exact = discr.zeros(actx) + p0 + energy = p_exact / 0.4 + 0.5 * np.dot(mom, mom) / mass + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + p = eos.pressure(cv) + flux = inviscid_flux(discr, eos, cv) + assert discr.norm(p - p_exact, np.inf) < tolerance + logger.info(f"{dim}d flux = {flux}") + + # for velocity zero, these components should be == zero + assert discr.norm(flux.mass, 2) == 0.0 + assert discr.norm(flux.energy, 2) == 0.0 + + # The momentum diagonal should be p + # Off-diagonal should be identically 0 + assert discr.norm(flux.momentum - p0*np.identity(dim), np.inf) < tolerance + + +@pytest.mark.parametrize(("dim", "livedim"), [ + (1, 0), + (2, 0), + (2, 1), + (3, 0), + (3, 1), + (3, 2), + ]) +def test_inviscid_mom_flux_components(actx_factory, dim, livedim): + r"""Test components of the momentum flux with constant pressure, V != 0. + + Checks that the flux terms are returned in the proper order by running + only 1 non-zero velocity component at-a-time. + """ + actx = actx_factory() + + eos = IdealSingleGas() + + p0 = 1.0 + + nel_1d = 4 + + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + order = 3 + discr = EagerDGDiscretization(actx, mesh, order=order) + nodes = thaw(actx, discr.nodes()) + + tolerance = 1e-15 + for livedim in range(dim): + mass = discr.zeros(actx) + 1.0 + np.dot(nodes, nodes) + mom = make_obj_array([discr.zeros(actx) for _ in range(dim)]) + mom[livedim] = mass + p_exact = discr.zeros(actx) + p0 + energy = ( + p_exact / (eos.gamma() - 1.0) + + 0.5 * np.dot(mom, mom) / mass + ) + cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) + p = eos.pressure(cv) + assert discr.norm(p - p_exact, np.inf) < tolerance + flux = inviscid_flux(discr, eos, cv) + logger.info(f"{dim}d flux = {flux}") + vel_exact = mom / mass + + # first two components should be nonzero in livedim only + assert discr.norm(flux.mass - mom, np.inf) == 0 + eflux_exact = (energy + p_exact)*vel_exact + assert discr.norm(flux.energy - eflux_exact, np.inf) == 0 + + logger.info("Testing momentum") + xpmomflux = mass*np.outer(vel_exact, vel_exact) + p_exact*np.identity(dim) + assert discr.norm(flux.momentum - xpmomflux, np.inf) < tolerance + + +@pytest.mark.parametrize("nspecies", [0, 10]) +@pytest.mark.parametrize("order", [1, 2, 3]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_facial_flux(actx_factory, nspecies, order, dim): + """Check the flux across element faces. + + The flux is checked by prescribing states (q) with known fluxes. Only uniform + states are tested currently - ensuring that the Lax-Friedrichs flux terms which + are proportional to jumps in state data vanish. + + Since the returned fluxes use state data which has been interpolated + to-and-from the element faces, this test is grid-dependent. + """ + actx = actx_factory() + + tolerance = 1e-14 + p0 = 1.0 + + from meshmode.mesh.generation import generate_regular_rect_mesh + from pytools.convergence import EOCRecorder + + eoc_rec0 = EOCRecorder() + eoc_rec1 = EOCRecorder() + for nel_1d in [4, 8, 12]: + + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + logger.info(f"Number of elements: {mesh.nelements}") + + discr = EagerDGDiscretization(actx, mesh, order=order) + zeros = discr.zeros(actx) + ones = zeros + 1.0 + + mass_input = discr.zeros(actx) + 1.0 + energy_input = discr.zeros(actx) + 2.5 + mom_input = flat_obj_array( + [discr.zeros(actx) for i in range(discr.dim)] + ) + mass_frac_input = flat_obj_array( + [ones / ((i + 1) * 10) for i in range(nspecies)] + ) + species_mass_input = mass_input * mass_frac_input + + cv = make_conserved( + dim, mass=mass_input, energy=energy_input, momentum=mom_input, + species_mass=species_mass_input) + + from mirgecom.inviscid import inviscid_facial_flux + + # Check the boundary facial fluxes as called on an interior boundary + interior_face_flux = inviscid_facial_flux( + discr, eos=IdealSingleGas(), cv_tpair=interior_trace_pair(discr, cv)) + + def inf_norm(data): + if len(data) > 0: + return discr.norm(data, np.inf, dd="all_faces") + else: + return 0.0 + + assert inf_norm(interior_face_flux.mass) < tolerance + assert inf_norm(interior_face_flux.energy) < tolerance + assert inf_norm(interior_face_flux.species_mass) < tolerance + + # The expected pressure is 1.0 (by design). And the flux diagonal is + # [rhov_x*v_x + p] (etc) since we have zero velocities it's just p. + # + # The off-diagonals are zero. We get a {ndim}-vector for each + # dimension, the flux for the x-component of momentum (for example) is: + # f_momx = < 1.0, 0 , 0> , then we return f_momx .dot. normal, which + # can introduce negative values. + # + # (Explanation courtesy of Mike Campbell, + # https://github.com/illinois-ceesd/mirgecom/pull/44#discussion_r463304292) + + nhat = thaw(actx, discr.normal("int_faces")) + mom_flux_exact = discr.project("int_faces", "all_faces", p0*nhat) + print(f"{mom_flux_exact=}") + print(f"{interior_face_flux.momentum=}") + momerr = inf_norm(interior_face_flux.momentum - mom_flux_exact) + assert momerr < tolerance + eoc_rec0.add_data_point(1.0 / nel_1d, momerr) + + # Check the boundary facial fluxes as called on a domain boundary + dir_mass = discr.project("vol", BTAG_ALL, mass_input) + dir_e = discr.project("vol", BTAG_ALL, energy_input) + dir_mom = discr.project("vol", BTAG_ALL, mom_input) + dir_mf = discr.project("vol", BTAG_ALL, species_mass_input) + + dir_bc = make_conserved(dim, mass=dir_mass, energy=dir_e, + momentum=dir_mom, species_mass=dir_mf) + dir_bval = make_conserved(dim, mass=dir_mass, energy=dir_e, + momentum=dir_mom, species_mass=dir_mf) + boundary_flux = inviscid_facial_flux( + discr, eos=IdealSingleGas(), + cv_tpair=TracePair(BTAG_ALL, interior=dir_bval, exterior=dir_bc) + ) + + assert inf_norm(boundary_flux.mass) < tolerance + assert inf_norm(boundary_flux.energy) < tolerance + assert inf_norm(boundary_flux.species_mass) < tolerance + + nhat = thaw(actx, discr.normal(BTAG_ALL)) + mom_flux_exact = discr.project(BTAG_ALL, "all_faces", p0*nhat) + momerr = inf_norm(boundary_flux.momentum - mom_flux_exact) + assert momerr < tolerance + + eoc_rec1.add_data_point(1.0 / nel_1d, momerr) + + logger.info( + f"standalone Errors:\n{eoc_rec0}" + f"boundary Errors:\n{eoc_rec1}" + ) + assert ( + eoc_rec0.order_estimate() >= order - 0.5 + or eoc_rec0.max_error() < 1e-9 + ) + assert ( + eoc_rec1.order_estimate() >= order - 0.5 + or eoc_rec1.max_error() < 1e-9 + ) From f2c97807078344020711815f666331b71a90faa8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 13 Aug 2021 10:58:17 -0500 Subject: [PATCH 201/873] Fix misplaced rank check --- examples/nsmix-mpi.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index a83e0cacb..5bdc8fb97 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -303,14 +303,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, f" {eq_density=}, {eq_mass_fractions=}") def my_write_status(step, t, dt, state): + if constant_cfl: + cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + cfl_field = get_viscous_cfl(discr, eos, dt, cv=state) + from grudge.op import nodal_max + cfl = nodal_max(discr, "vol", cfl_field) if rank == 0: - if constant_cfl: - cfl = current_cfl - else: - from mirgecom.viscous import get_viscous_cfl - cfl_field = get_viscous_cfl(discr, eos, dt, cv=state) - from grudge.op import nodal_max - cfl = nodal_max(discr, "vol", cfl_field) logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}") def my_write_viz(step, t, state, dv=None, production_rates=None): From 9caa2ec67d4bdd84203f485114672f6de2bb9190 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sat, 21 Aug 2021 10:47:05 -0500 Subject: [PATCH 202/873] Y1 production update (#487) Co-authored-by: Matt Smith --- .gitignore | 3 - doc/figures/poiseuille.png | Bin 0 -> 67499 bytes doc/support/operators.rst | 4 + doc/support/support.rst | 1 + examples/doublemach-mpi.py | 3 +- examples/poiseuille-mpi.py | 2 +- mirgecom/boundary.py | 16 +- mirgecom/eos.py | 47 +++++- mirgecom/fluid.py | 5 + mirgecom/flux.py | 56 +++---- mirgecom/initializers.py | 118 ++++++++++++- mirgecom/inviscid.py | 4 +- mirgecom/navierstokes.py | 4 +- mirgecom/operators.py | 4 +- mirgecom/simutil.py | 5 +- mirgecom/steppers.py | 2 +- mirgecom/viscous.py | 89 +++++----- test/test_av.py | 8 +- test/test_bc.py | 8 +- test/test_navierstokes.py | 330 +++++++++++++++++++++++++++++++++++++ test/test_operators.py | 287 ++++++++++++++++++++++++++++++++ test/test_viscous.py | 204 ++++++++++++++++++++--- 22 files changed, 1066 insertions(+), 134 deletions(-) create mode 100644 doc/figures/poiseuille.png create mode 100644 doc/support/operators.rst create mode 100644 test/test_navierstokes.py create mode 100644 test/test_operators.py diff --git a/.gitignore b/.gitignore index 63711c463..5c0c82d53 100644 --- a/.gitignore +++ b/.gitignore @@ -41,9 +41,6 @@ test/nodal-dg *.sqlite *.sqlite-journal -# Emacs backups -.#* -\#* # Linting temp files .run-pylint.py diff --git a/doc/figures/poiseuille.png b/doc/figures/poiseuille.png new file mode 100644 index 0000000000000000000000000000000000000000..39db2708188cdd35c41bf3b00c55991f7395bdc9 GIT binary patch literal 67499 zcmd43c|6o@_&=%zMR;0}y+X1VBiYMVcG-6=WGDM>Dy34$GKB0Q%NXlm29qQqTb98X zl&piXjctrM_w+p9bAG?`dYwPcU*~wnGt>Bd=JUDl`?}uO`+8s3J+F-oZ?iCQGttq} zvFO~aNgm1eQ8)G*EZj+3zvS! zzVg+WIV$!lqv80e<2#bq-h{rj*8kxr(9_fG+ZlIlk89_OYrb#$r-2js`B(Cfa2~&Z z^9VifwsTQh={{w^Ue3JPpzr9ZHHvbdvN3)*5>;AOwxlvYB-$2eZwYROjxM(+z5M9k zS0})Tz|TLZBY&Usc>X@A%m00P?)~@a<^pZNbWi$O{{Hj7WBxnkLclTFyZ;?S_unc1 zUwkb3&51H_m-xPKaXfX8dbpve+X?(j<8>Zd2sj)L^TH*4%*fzgslz&y8`II*yh;V5 z3(}~^2W4*KeAKAKE^$QpjmK>K%A-*H?)r>%`oGh1v;XdA= zjs#-{6Y)f4vOiBl&hO71C@L@S7In8nErT6ZF!1TJLB`jvahXeBcKIDTI@)Yqm;#qEv$tO{>ieKzDsEAJMS*&ZP5GaUmbEX; z*02A&mup#yfj=APvk68@@dYpW!#*uEbvl_OC~v${!`HYNWku~TmTUg|fw?Jfq)=BN zDuGKw`I`or*9~~Cd#)9W7-W2Og>*6fcWb%|iyxCAuKgFFVTT8MVZ`PgrnzpSO}4-Y zum{>g|G9RmV0wJ{;K*>x?r&z5oeBTLt;+jtkci#K7W{O7m%E>Kp*u16cL&*2w%+k} ztQQMJ?cR5mN$)@S&uGN1f-7W&{C<7770WIT@t@O&Dvs7EpLxBIIdyPZ9GDf&;69lh zs-S77>iqojf>|zj)sDLEJM*o?65&vO^}jKh%x8yJC?FY88(ryp`>}=X~T}OYMP8wIB2<5r=qu zntmA>Wk7VQtlqNI)7|8evBL&hgHK!Liecp|)q2Ch9_hV0(a3%6!Ey1EbWg5p>VaDg ze|IqA-Pg(}pg+yX;xL znrk1lGiepvwKxU-enb*nV)>Rs*rKr7W4)jBoOU>Rrg(4cyAaJun0>pFRz8Y^_h;d4M*rk zdtDd7r^(lWE3P!}Olsv2CK_udq0~qcaViH))aRhDa(h|4@nP z$qDc#U4S$rIN8}cRjTpNnI2%zb#--$2WxG#TZ$7GF zmr~kkG|23q=+A0SRVuM1Mwa|(s-Gk$adRi--5UNEW$02)PDF|C4A#6s z`h};$?TTM!&yD|&mHqAq15N5oiGmWhE<0|L!;8h!^#{iPbBGk?iKK%gL;O+uJ=O4u zY-e%oqR-&u2BR5s3nu^_0Nzh-t_AVl?sVGoXxzm6^($Q5stYG!{6a$Rsd$Wd1OhwEs+tslFXTgNIa-nFp zpDBAvqsXnRT0-m6X{}2y0#_$zQk^>?21l>c(Rn?mq4)NaO1?O4_BZV*cZ5<5i<#%* zI%af*&cwDqh}ABjS<7EHG#lMMB-zwAf6nT3ij7&-y!4CO{@@yB7UPz7UaF zwD{7y!#AbVDMh!CX^v!riq6ZVUF7d)Xile|TXOKmA@c`5F9!$t^brie>?^vMO_K{yoRD|#*SV-D&-K;j4Q${WRqyi* zQvgJ0FoMshTtQXLN!tp9d5`8+&@2x8`zI{EY7#$?M#Zygk1Beja$_Mc`>1DB)? zTV6H_cRZHllI-drJOIK-|b&Ru3LHg!`_aI*!_6xAqzc#H?XacNR=2Y|u zFh;uN>-RJD#E+=&u;La&@|4o`Ih1qsFFT))k?3X$lw|}*1hxA+O2Lnh*W*`H?@zLJ zAXk#|fWIoln^rTkg1=XaXHmzI0K-hz>@Ft*-1@L{^!X|h_X`r-(Z+fL9D!bH^r=j9 z5rc`n7lG-DCU@?#7=9pwgRbNE&hgxl9PR2cq+JQU-{@nSX2GB#Pp2N7`I4wB@b~(| z{XK=So8&s&q>RL_PhsB?y75V*7p^ucG6;ePfml58PNhk#6*>sc&CTtUL5m>WOh@|5 z{U_(_Y&!3`gIM^P-)XWb6t!5Cd9WCwT%mTjo={p*;XOib+U!+Akw$DOi#2_!wtx(* zO4aa3ZDvlnwmzdz`lxv+4^3=Q+B#UNpQ;$EanVcC9~^Q#+~71fH(xo^9ke~>LU_UH z@J>i&t6w8*u`q3@zkgZ{3SKOIOg401Cj(X`UeR!AD;q;u@u}OH3@7%VopQ+z)%Kt7 z9qtf-miMVq?Nq|H`kx#*wl$21GI!kTvdmEKq>N)*imYoM=_F-GZ0JO;csM>}Jd&GF zVN0_(3Y_7J+xqYJ48=hAg(^Tn@j*DRp0FIiEnZ9(`%JZ<%@(4TN{S&ay}W8>^DkF9 z9YSsauDMz4(>R-Ie<@%JN~J_it1je5L+*b$PCGk_{+W>1WK*Mg9=R~h;U}PFGe*J7 zqj#Zu-Ht({GQIDwXbbgv! z+83TRQofs|6#Pi!NUrrS^v{kX%Qr5U(cKL9C$H3d%>76&e`P;WYF-x5BZqzdrP$dT zwe?d^W0S@OZR)-4-*oR09I4zH**ARi-QC@TzRRd?{*YCiO)=GF@a|J0HWkdoD;eg1 zY3U5rPT+^j_TJD)+8T4oSseF3I13&%_MK)uv|aS40qyp5@=HCbMors#Z)fM_FD;u{ z#9gdk0++1z!*6dBg|dPtL-UM37#5Sh3ntWldfSsJPk1eoeL^K@%sFl4-E26x;Xp9x z7byQAFdGj$;)iMD6O6y1p6a~UC+W~+)xjTLo+@c;v7zFFTD(k^3!aLsr*Ww3LVuCI zf7{)|gOr?e@SHtS7LXN#Y-Q_Y5u*`6uX0)W6l)26@uL^JLuj+sr3z>q>DNnvCBWSWa}Kvent>6A zQApTfxUD=i8zyeKG?(ckwUNKp4ZifZZeZT*5fB&$Bz;55 zLB;GI5#8LhJ?;@k8n&b?0#av-XxT5_-ysTQ5W##7{YaM`F4W_sRx$F2+{}~*cQc7~ zgf>r&+uPcfy%dOgF93Z0`RX=T6H8nFXYbP_;)7Bsr|B`Y)Q8_z~_Va9?uqor?H9x_Glqc1RA0c44p)K-(!%q`ufAP=qS6t(?jx9dN65+A z!j+$HrMrc^TGsxClRT)GCN-P@J$Oi2G=jQs-o!X{o{_YwyvfWV(Z4aN}C3lcA5KBXYf;dyvj*(M_4x`Aml zBO9v*(J)JKF9!osKL5EN17MOXz!JJoe||a+3@Wfov=~B0dcv4uG>P2v z52Tv6OehPt)i#QY4YNvfs0Z`xX`A3u&lwmLffEhad0_dfvl!Z1oUJo%_&ylhlLoAr zvXO?_Dke6}u-XR>n+wkis6{n_S0c=%8p$ew_K?~R|qgX5`_qL1gIvdK+9vw!->uH zorGvhxJ_Zs!5@*ZKZ&>1cV74I%t}M8fJ6+T4<+1Fr>7=J?j*v`(tZGlBF_+qulxpWt? z#5?D*c0kUA?Tgx$EgW>y`T2~Vc?+auu3ulBW;f4J1|E~wvB78zVpnDqsm!s{_k)Er z7Wnh5Wq^cZi(O9Sb~<(9^ljceuoke$NK6z30*of|V7(*hBS3DW%pgv56?i0;`r^O?zM~h7nMTNApIPc-Tg# zh%NpMv5`=LR?l%h*j*Q%U%{j6dvDCV?O&KNEjEN-3Bc?xmD!*IO4OQ(E##%=XAMvE z)ZA~2xlYJXaUZ&(7J%8C%gmdPVH0o|26y1xxF;32jW=MqaW`t ziiS&XjE~!_fGJwOK$oJ-xGe>*^@qh-tVX2yJKUQeU#VE!Ru2|Bb61()(%c-T7_dMC z!B3^7y6Yi!iFcm&v(!EWfnx;VGFO=AShcexQ`s#Lc)SKaH}|QMU4Oj4w*ND&8ihp0J-O>tcB2 zG28j8H>VEf+-B)-TN0iXlm#xX+c(snxe(x!lNHa2 zdRX-yq%E{OW@*VCP=!7F9|rD+Pl8rz2Mq^>)9lWKEypXZy85n#fYo7Uz-+9hHv!O4 zp&o3O!r{Y7!g@?L0>Bau`{kPc4Q+sAtQC{D77G9g@t`Ryzh8@N0g!d={h*Mc6zu&e z@F#MmI@-0aE{C%0VuSQdFVauX2ZGL>?o`RaotB;EXVa7&47GXKd3bo(4Sd4k*7rm~ zy&%b*w|q(#lzq}>u^PDiWy}o7{uY62k%|EfNTC+;pY1(MJ5y&-S=kK=f^CSmVq?t zU@=|RB_^8+jNY=gZ0*%)!L2{ZMjX#~`RWd7jP3b$FhE=+&Re{JaUXy{jYXO~i1NnR zje}JD1Bq_26F&?BsZij~8o1Ak#W@wKk^ARd8zBZI#;9>hjwA)~ju>#Ct z!`RgHY=*bH+2N6649{DX5M>HWL!(a-aVLcggd5M%G7tW&^X@*QpnO<3W{tRk2cy!t3TRfj_ zzi#AwR`3!CSmnDa8|WD7G^3hvU$#m&&5cx106{boB0jt9Rv4=*GYia|Dftl4=3n}jXkHtZP{wK&prYqZ8r zAzrp_O})f1E`0T;N4G?doa0KZMgJ~qR-H_-v;*np(4Z0>A9b}Ab;}y zB7dJ}G!P#~fYbk)sqU5%UzoFXTj<4DAX5(ZIHc?rs8rxJr|QnR$Z%0;tTk+Vx#X1Cr~xET66v(Y&W4G~cL( zG2=82Z~C;_nx-a02}oU3;rtHAcgGI8>8wpZH{t#$Eh~DuaWsf1ixucqraD&;MvM2s zl3Vptn%;xRt(LcVE1JRF%=_@ukU->CA{E+Q9kAIWPq3ZZw^*R&FfbO_Z#G;PF2 z9d7270r8Ss-uuH}v*1%gF2Fm+Z2-c2vh^!`>P=c2R+0?J@$Xew`dRp9%5)l#xU{9E zCH0+4Xca$;5rk7GTQ>|DFyDtAYHof5*8mai0mwJ8 z9;9Aq_N^hn7K2PnU%cjHtt4>CK6)#KUY5Z}?%)p}(x`6BAqgQrR+=e*+PIx4RS2aX z%A9JON;^(umUOmt*%|kcHh6#amMzj#bf4d2qx90^ld{U_2QRwHr*JFB7)X zU9ty&J3BxE0RC@_T7^8 z6DIwN;d`@b@?$;9RGV>KTUFB%GgrscyjDH_<8H-nzrMUct$*W@i`ZSOCf2(Ti_x60 ze!{OiXo}I|67&K>m+^R6fJz$or;3yV3&MfaTo2bxuka;2I@nbaYTRt1O4%Ch4-l5b z!|jXdwwu;K4ojC8{*oSOLQXhjl!~*%LLWNvR4dOYDFpvx^H`r8*3NW0u$An@$*fiw z0bnC<(Zn7}n?eeh2rS4$%Z$`0W`N)&09K6JtHiX1cygl%r+kjFI|CZ>YfdSk1f)9n0S({x*f_yYN<2-9GEVA?8( zZN^$tm_w4Zy>B}^&Y90^yjF)t-rKX9>=!kw;h__wG;4L%gwo-!P^3nA3=~;S^s*L9wBdF+QIAp zHeO-wJdFhHw@XL;Qrr2$EbUp}FR4R4+`$9_f}5H(-zk!F%0M7^!WS+ktM-q@_-}rQ z+fO0;@Rhp5+=mHjhYbKM6e%+T)GH_E4XzoOiev?tWFm0cD&g*H)2%e2U5J)&4Q9xB zbg??@02VAVC~1x%l+3bF5$#K-=NK=UnjHjN&8Z32h6 zoyj5|8-F@c0JPpb;`j#@{2D0KL7n}46MJ-{a#?;|q9{Og#WR3lQI*%9X;>UM3$sk+ zec}ZYE81T)(mri14&J7*)Q_Hex2~Q?Rg@8BVp_aE2)Jy8D;Lrm&yB*{gXlHf93C8XKo^@01T#L=i$am)PJqU} z;kZPQf;j*#J`5@zB#_B@?!<=tgTh6;9Gu`|Q@U^u8#rhn?*`IA_8xMF+TmTGJ`75? z?B;8~J)Z|y(SBO~M-$N=pwb9xzwLj^C996WfU&6WsInjfbjPF!K-ltLaF{gNPQ9Ukyc&hB6< zVIgw{Xj)7xQJe=-ilEX|xf&b;k_0!fG=~A8?$N7C_WT1$3p#Mt}d=VDvx5^9#958R{c|i^}N{41cWQGc3KkyDf&Hluq z(`nFvh5}!0n2FCP?i8z0bPBZN#6ltfRkLXdsRE}a zKjW95|KM-v`iHb449#r_Ou1>h0yN>jy#Ry}_JHC9?E(}?>eLHf)Q^Bj$(6y1{3PF@ z#c6+T$$GlPiLQ>X5YRV}LR5gPlPgR)%g_T%G<`u4E&a&2?q$=yqmiTF|LBu?!6=e} z&d%l}aKQ0ik-tLh==z2ad1%NhH+B!O@?sj1*-`~`rEsn<2SL;2faW2gXarI{sfOvJ z%^-{12SSQXwXh0z9F0j10SZt%6-9;}M8w=*_*4-8b0$Hpf<_hxTx*xZu56D*C!`mZ z-1&IWBf=lKbr&Bp6Q|{K?2&aU&F5&j58z;L#<$4IKq1s1h=)k}`)?7aF!w5}G}u(k zZu9zTqQ|4iprQzv%feC_LMl|RQOX{*0Hy9gNkGc5h%nd&2_k8uTbevroE=vBd;Nye zDLUak4?u!lF{gs%_h;!n_J9YM#_`B6bwF)Tt13{np@FLt)^c)ku^ltj5@oI)Oixs1 zoSZ@6qZPbsJ;!87%VVa;7+Hsa5@I(XSHA~}^aVRpP{%hMk|vRn&8UFId|;e}$~IQq zYJp)6$mMC#hO!6@n|!Q*CLRH>p&hx64|e1O0#;88G|2x0sJI@kdV|+r7BC0|K`UdOG72eKz0Sf#jaQVvDx^sQ5718-8KU&r02MA zl4;i`q0<~jqB-BVy*!}mj2<8+DU~+?)oPLrzZhTx7{!w)0PCx#aYI1YhTQx7#G?5n z0fho83S}`-@V0jvIqukK^YUVvh4)0mT|f-ii-87|2VBu&3&?slP>E0fwN@xObMbZz z04ay2W&?fJsLDzoWUGU~fs0QIYF8$n1;y3xe`~=2lQ0}qAmNWaR1da&f9+um&|WEv zx{MCTDqR>?r!g?qdZk8MB(S!9Q(p)xG=fbl<2P)cVihZ)9U*nh&pfovP}Sb;FY81sRkI!OEsIn zq9NdJi1L(6&u}v|ft0!~j%YFw$qsqY-tlTKl`}*$30MB`u1Bix?E}N$Z>mozY?Yh; zPi-sYV^Hl&iAmP^jj{N;kMDgV3APz3;YeV_fNcqsR8$y(`44r?rqxPlNV!)Xd=2fj z3j@B(3|f;yuz}`{Gt+)ZBp0!Yr(38jM+>fgdvYiv+NcSCDQYotl{ zSkguYS~U~x=@rO3nmAjx6*8Wrn}bvg3U^+4<^L3z9u4?LK*3B%N7kix2sF$LVW8Cf zO*NVzy2vcu)K7(iUXX*<;h?Xf{UG3YQTFgXA6lpZ`S33_K(e=tePjUs z+kgr*Baa!p7yywEIiJ8e>(VPwEUff!hL|pToKGcHHeK z+PAoVk+=>H;u10s&!9tRGoNnosQK@rA3L9qBi>`+mp2e!qwvJBn?GH;-1bCsKWMQ3n3GsZbGNfqB z$aZYnMSA4QJ!i*UnX7Aj=`o3A##ej>MD7lNUhmR~P9T(jgu6xw4h0DcS=Fd^iRg*<)9y>m0 z&>qk=(`j7kI#I4#FsYq#FA`%8dNa1e3~ z*8a=r_ljOWB+ps>Q`QVGjuj}z?awF7nj)> z=<)~IzWi-H^4o(jw1^f*?pmljuxP#TDj-Hh_A0{3>ye^e+KcxFTKHg7Fn(I*zo7^w) zW8zXqN!ifw!VeQ+0sdqqAKUA3%SP>8uz5tsgv-@arXBpFHJ!0PXa=4OYH-uu(%c)&RjY<|6ic zRB@5MwFSB2oV!7xPF2^72P&pV>Gv_zX<}7L-=a#6K&q{+=ui?<%A5sL;6nc`TI<-9 z^Mo%it@yh?kPv0Imfh(j1L?P+fd_zXVv2S&fb~Vt4k*2M0AO;)c)_90o&BPdW%noa zU?l2qcCA}HNbB?gy@0jO-5kSMEJ0+aFWF7YNvrJKYhfqt2Qu(G+s6}V!KR9_d_t#E z5L@M}H3JVrKTp3abOx5mtQh0=J;1&(DlSF5t;)GLS@*i9x#D=8`7CMa-uJ7Loz>O9 zddps&Gy}S|Fg8)#RvcSjQRkYIea*T^c<`;0_>-gTg$}|M7cG%1-vecAYQ@G%H)2@I zQ{A-v@+Pi093eo0x^ryNjpnm_^0j69-Cd~5`oYVGS&8NpP? zYtzF64B~fr(gsH~q^0`|(cZ{sKd%ZajFEnGKh-6B7QS7@ZQpO-Fcw%yl$w<(4 z?177nuFFsNQKUJLqekoz-rLwhJImWFtGQMZ`9P??BNU#n>RI@rURgU==1M*FyZQHw zqC6duh!Sg<`rxF^MTL0BR-X`9LriAbjr9@7AnQ20guC5c77w7axvD*-=fZ;5Z7?G7 zc5b~qh^1KO-t~FDu+O*l*C>1R#2v8u8Z#XUJH?JGF<$`q@@@jp|=WKe4y1a#cY z@32rW%^e8e>&2kW)PQr-{)ad2r&mVNrNm{{%UOoqv0t675k6Nrsgp54C>MO)X!PS#vUNM-ffqh2 zJ4LqB&b^p>!L`;`xJTAUa;NV_)6H6yZZi2tp;B#=QjTK^-f#oTyob5fk!pAQkq`$f zwed0UTuQ|1h=}T^Ps%<#a)JXEl2eG{0}&j#OWVDk;_T z8TR>Z!69k4_LP=%Xs{}LC0-L`50aGT46Cm%T5ZjmQkf*EvVod63;utqa~N@ZY%iY> z7ceC!Z71u*Z!J$M5(yRr(pR@-u?5AXnLyFNQy4@(K{viWnsud^1tD*=s@V8#6(w^j zv^nZjTVf^|^YFaPh7xc8J}VtMaLr=%<5bmPwXCRG$hqtTo=_@;-?T}J6ra_Lywugz z68zeDW)%5B-zGlm?&U1EWqzMKsm`;8+R>Ch%;=wwrbMzlZb39=GM}gR1lC*}?XC4Q zZ}eN%mwK1+;$??%Xb=uIUkBk1B@9XTB@z_abm8euA#qlGXl!Q-FTI< zRI;uKb6ITjesl^=zkWq}&?$5*b;>i{Yn_sAArv0v^8Oe6#y?MHAJzAHE=(HEhGJY1 zCf^O~#R6QSA88j|lKHWW==&a6)pvMG(#syB8+5s3Aey}NJ&!M-`)xpXw`tH}(jjPteTQL>O+nR44z$i3b3k`ay9%s}&k7OmffvI8{9L7)%LtEqX8 zUS$zbRkmAsfD8Nef^*y{A_b_=7WSwB(Y*+4#jLox;OW&3{RMBAr?w`aU`iZsL}9v% zs2WDmbbT?^in_(oOoo}uDDpLB1?7b2?L6t4@) zwWvm@i^$vF`VCbiqD^P&D!dRv`0(woPJAPsvr2BA zI^-^r+CJ|vcRZWPY?Z!VO{7v{(mZK$XXVDzwV8&)aAyIZgAaLc+9|}*6Y%2xeg9(~ zKjjXlUI`ZalGo?D1C3ar93qhTXEWEM%Hqo8EFE$ssOW3aYB3Wsf3~fo7;WUyEH5gs zo83OVxj%im5v1VFsI+#myEW3mHLy>O#NohWIHzRrYG-TP-w=6bm?}x%!Q{F@H@$nS z>i!^S^`OpJx*3u*6xc=YLnJcT!fo<*z ziwp`u+7Y8eZ|Dv*(lC#&>f}RkvcP~>xH}0(VIGpGQ8icbLguO>{W-AZ4LC~ ziqE3(7ItllyUFN^)IUOJq76gF&P~om6Y8qi@f+gTP7RjkHq|Z%h@tKBqO-bEJa#c> z+se*$d1*L{zwn!Fj8BGYzPp=$rgW6S3TblX@!>EBOnq!)L+nMY#ZQR0w3kUXCW;4L zky#|%0r6+2i|4)FH40~bTSO3p>F&+>0B++BlB2VPlMwz(k`zkW<|IX^2HF1w_X z88#s)3oXGa^++IuyBCqI5lUfun~w9yHUCCQtM~^AJi>G0+vuw{dl9Ca=fZnGP5Z;b z^JdvuoQ0okP9vUrh@DZE`}Av=k6pLH2kh1Dn}*Ax4kBnnMpl5{Ldq&)7m*H39I>faleamqN|{_tA+SzqDO-?8n#W3>fiH4Boeu?*dv7EU(|w<+~rovsuH zQ^H6_*u$`fGu?s09f9X$?OB$^Se7pbR$Q-%exnnsEz$nquGYhA!e_3vm*vN5Kd8QB zQK8(8n5g!;jm)x;5iT^1M-Jn3g(VA|P^{CjYRjs5ML#>spl@c1lEOTm!aUqV@AO5pdcXIM9xCs#zZlz>)`-#P zI<2>UM}OdXSxC9fK!{mYh<>WuBge$DPXTt8eqLkoB>}p+*KfGr84(|TXC^j$0oRFq z!V~}JxR?_+)MBj9Tk{gQ+t_apb-$LKGx&Ng&Z*Dd$tq9R42y(yIi={Jb&L6g>%C0H z26N41L`5FH6f27*Y8hxkkrXgXsR<7FIj)*9kcnF%p!?4GYE&J5Wi*ZZS{fog?Avf=?~{@^qW0~_;4@~ zp?h!W3L6xfc))bMO)qD`KUQVERWDFyU}dXFF8f&Z@eZWI3UaZ`RDD3x+qOy~UFI13 zcnt4Y(!(pTpcF&hPNyuBPQb=MGrq33M#ap&RG3%W!e`n4)M_XGOQCbIR$`AyYS&)p=YJw10dyp!o?Eryf33OI z;}cb558-{*->gUPjo=XHj_X2tQKiFquQJ~bp6C^^G@u9l-*v7A+5|$)?RRVzdN0{3 z)$t)V{%>B{4_EAu1<%bt%39yEp4_I6y}?&^pd~<$!G1@{vtvOYEBzEWYRCxC?VUQ+5ICm%~w`NFzIX{?A4w1SAG|NlA>D=oAu#_)}_IhY>)##f5sJ|EcBw$ zI?>^`hc0@Ha>$-b&|7aP)3l4#wzp2r*qkdSDK#%(D9KCSB7(Eb z)vZbYhndhN;WI^NPD(!!x6D54y4Q6$hD_0I)NN-O?)d2R(@fFpJ2K9W$Wid4G1|%6 zMB;M$Ow5^+mg^zc*IYW}{dvM6f5fgdZB)Z9k3mgEHIP{>-4z55c!Rs=HBSjdX_v9` z>J^SRf4ck+ZhhlE7E=~5Zmtns5W`@}!r~3C=7mdj{$8!GRbX=IqVSoDGbcs4d%P{j zX1m!ST`&<$lbLQK5fR}GcSAMK`uor7yndeNI@AN3KUZt_C=F3n9>btfVum~_V(YNT zWHV^Cx|4e|)G)W{Ak|vXINQw8M?5_sMb}xK1ybl#Z=_Tok$UE}t9K-KtY&$CsBI7# z0_(i-bmOP)qf@BE{c_WBa+;#Q?*ZhH$Sg1d3`yh zeD}IvbTQa)AbjSexuqpJXTbM^acG|V!RLiV7gl2V{(czPC2}QsJ&M>ap2yO*rRLGy zRTH@Px|yb}&^C}DF9{#DF*nT$aHJL zTW9UM!64h@YDHN<)4KtX;g3`?Xg! z)RW*BJQDml3@3}lXV*^dvX0M(o!~zv(Y?_Yq?omxaMu8TTORtk-%4VxUUPQJMtsx+ zNW?Z562d4_+<`FaIDuxSx4GP!x~X{gj(~xF~Wp!<~*v zRlrUF)>1L5Ea~=`Nea6#Q1G`-2U@O@K0-mahM&D9DA@-r$hC(1Gm=0JaJ$33YnV%l=Y^g*gSJX2C6(N=(H6_O+ax0{+E;ef&9LzG zPGl%M^K7bg2#d$1#5Km(@Y*wi4XV+tXsdVK7;Sm}1aX)yd&Elv80V=dhtSD=3CnD3 z1_5U69mzlxT%m9@>1Gs(8GxOBYPOHLqPs0Uxi-aL{C)F9(^Sq5C$Gz=l6L~jt&8SA zkJqO^$my}&nItr?6enpH-|G%L3@fj_bT#qLcZdO$tJ_OjQdHW?_g7>>k~&Nz@s1|g zAGAqqr_efWx0lC2Nh^b@3c56~piF(Y`fakI;_KQI>cPUla5ye{1dE%&wD+5{mG`DW zi>@rkxk>8Auoj71MIyhnR17*l!}lCF^Exz~g<0vh|4K=BiwJZcZJX=8a`?6jHkX!8 zozMD5e*XL{-`S?KeSVTA4wVV*4-QW@{J67liPpkeR#c?@TJsBHZDl|uU+|@NioTve zd6(;CECYPv9sxg#Jgj+8fC?t6;2C^x64OeovSW_=7}Zys=ktYtr1keLUS*b)@VW<6v=t##XQT*)TYaOwWi9}P)3{(;A;2r0~? z(*iz~F;GLbMz~OG9LU=xBbKboMFlSdOwA|68sGM)q|P(8`PKi!6!WX-i&jZshT|jC z+1Z!rx@p&}Zk57Y?JL$f}-Z4 z)08P5%aWv2(sVHA@|cNdWU82S$m=JTNA717#j72LuyDy}f?`aS&>|=;o`N;Y5_?$G zcf14r$de*G>Ir-@m3o;I@nwY~kMXKkbV2Qv<6t zA9_y46dHcdR4fX`&T+?F#35_y|8! z`hw;|576t)I|@SKVyE8Y;%$QHrh1=R7~aw*-~!^$&5;kuLfF8%Kbt)^yVjs7(v-`x zucg^$KA}QtwDs6=(I->tg-y3Ac{~2=Pu{q_SpnwaB`cpgxXb)erMbq&@CR&*$^C~E z_khEbl&#*MaT#@wqg4+A-aL}DDzj!DDb+JD6XE@7Tfn*kKceCui?phn^+n1}J#4%% z2`V-2V;*JxuT!%Tkou;%RP%CS6ue7pm>%5-liQoE3y8d4+?1L+{6RPGV3N80OR%ja z6Fs_tk@3*OyHLG~Do<)`s@5Yhp{AcPZRWY8s|ZdXmvg0N88XLC z=kyS4wtkeAeE9u8y#N!#2EEjcmpqW|wXl_8S(||QleP3n(SJOHsZ-B_FD;Wkbfw)9 zGBY!^+&Lb(%XZ#%0n(tUftatn3%O4NzdrBDW;M68*d{+ zC4r{d+N}6szjyi^tj4MOmnj4_8>Oq(dg8}DaU*I|)^J_DsK{RoS)qR{R`B9qz;@>+ zE0=D#*UP_3Oz}FsQE_tTXmI7M5{7;v{KwT(D|pF#oet8-*N5ZXVX8Z5F(3ltA?vlaI$n;{K8#m0p)t*2cl6&^L}iHmc+eH^^KH=pyeC^!haL2GLm zgE5zw#l~gz;}6yAfs&w6FF*RF7iIp|3&)KNj@w@GzG96rCy{UvkMt6Q#czn2-KU}? zB8O#hJl}Amo=AK7+D(BEZ$b6hq~vsQ^NjoB#~%;Y>`O^FUtTJOmB$L+h8en*$+N%M zqs2q&y6sVyU*XXAV^5#wtHrPxU&@p2lJ=cR447#}|Xu+>osm&w*sMhykGtx70uKeo9n?Acz zzPFndxtE4I&F14%OCMUa((!(HPDh8d+?5K_6P13>cr2u9Eo*9j#egR!uk=;PUB=)M z(U(Dk8z_e67T0J8+e*Wn5wF2!YQ=EmVA@i5G}?V@twqrflO3zA|3%)obDe5{)1GikGgWSxSkwg?*C(;qa0aGL`L z4R%y0W~H*9bS%EFRq(&=S-y!rF*O+wwJU|)x33^Kdf{XYOc_Z=uA`ru>*U6ad?Y77 zS*qHV8MS=E*7&Ra{hd@P4d_~H2~cCy1>3X2+-BoxTblSHw+6UxJkF&xcYz*_{!LKM zz^am$+q92?c8isWXH<**iEY*U>qqP56+HnDM58kwH7FTFxGgUw8iR*2e;+c2(R=gD zN$^boE)0*QLm1KJ3`D{T%V!IT2u?!ODy3c0RD`$Rx`1`Hh@D`XQFkxvQDm)QH({v_ z-^aF6Cb;9W<^K=Zp@hQ~!jv??nC)ijKcAlSQmk#Iv#DOG# zw>xEMw0$C06J#vx;PIwiT@wGn3>dO09h+fzhoZD`xa9OKDu=Nxtdbl`WPS8-XLHte zYv~y&tUf4uiZa1NIY>E8sWr-p4^Zpi=V`)if=ioBwM4SN)?^YB04@JTU=tRAvzpc? z{mmjD-iL@>8gMm3dWi!Go8wKVOk199%;J=|+-R2p_}-Icre8SbV?BHkaHpNksFN%_ z{f@TD;cnZ%4Z=v#b^Ep6nQHrcX<_CbTlXUae_o6nF1c*6y?F%fzgw}jj!y)eCI2Mp z(Z2Cwcw}U0t&I%}`dlDU2O)d`{kJ@Y00g~m#R+KkR6EV$qj1JE6q9Bg@*l7r82x}w zT5i|oPz3|Bg|UIY=GA!-zJ47MfeG_&0{7N29RTZ!F|C{y=|CX&;McRuEl zltw8{qYLx%e0bBd@vDWQIi4eB%p)F$KUu;eZ)G_+8W&gaJ>(9&B0VQ-0#m0%QwgQ8LUJ{NK%-> zaJI!G$LU6++v??Me&K9g?PV(fAN_Ph<+qFnhQOrML#K^MzW!eL5t_=2IU5dHydawSKr-;(c^kG)S zn{C8qFZs@-3$XiOw&_AtPWY{Hh=B@ao3j*`GPL-TG;~@+u``8H-ShV@$6lwOBf;4u@Sb$P+np8!r=T7p(XL7^=Lz`0n6K~ z9sdqEnbEWD>Oo@b!>Vt%n2;TGyym5q3UTXJIedl2C&_e8W51~?i8h@ z8$?=4L`0;d1SAgKrF1JI9SVqwv~(jW($dl(B`s1S@UQQ__s00g;NEfdDxCA3y;saR z*IZA(QuI;d&9nP%PM$ZM$j%0%H;y*70Jbr4`}}x3*(#{1*}2K|6f#D!#;^THZ+?|e z$c=poskiNmY;xa1m!*s`40WnJb6YT3L?%(1=)-mZVf2>ahbJ?Rx*4g;mf%TRAF^Vk ze)$nMI>4{Q%@M44N~^`r3k8_3y8TEuRLmqz~}1pIKw0N;#$HncqBm zXWOWv&&xUz{Y{|QWL4=rCho@UEz7!#(*e6I7jGv%m6;nLRDaUnbrt9wFNOa63RMStj|4w6Mdj9Wq(IW8(dR z9lABsp(AbnMyfrtb=2MB*~P@XuIYlUc$jm354z^+lS7!$kOJMQ`+g_2{h#&Wf3MKr zwk>Q+#DCxTgR1j??4Y^PywQ8uH#1gmHJai+)Ecj>=o$F%@4|xpl?GLhMce?<4IaOZ z{!aQozt21j>+4Mio6pm-1I~oECu%~p8Heve39T9>Q9N(Uy!N7D>A%ql@kw-_D&ILY zp1I}sPpb<{R+tLk`bkc>rQCn~xD;NN9Vi$7UT$T18BnbK=-SMu$;a%7Igu_;LeiqVa zWsT2U--$5s9HiSQwj_PgYzAKQ4w(@EiDXHI5n z;$E@8mP1&axVU9iL^f(`>caHNFr#*;hV}%4(p0`WH}H-9y7*v4^Vn+h&+Dog-PQh# zh?g%(K6{g6-Zo%q6s3#1qfwI*gX5Y;Vo`^~mO#UnK=Q1tXW(H(x|~kw*zK!~>fD$* zcKy4%7F?~7B?B}=os{uMMZyuS)g%VvhA{+PdVH{5T@ zxJ#Cy&M>%g#&6PVQS8X1HV%#0Pw8mCYe?tjWKV}mfb4CN@O2bXP7>zr+y*Q>CpX6I zVo?c<=V)vpE^+$v^+E;EtYStGGmFXYecyPi$9>P#G=6kc&;NMVYqHTtxWOcE*bGLg z)U>q18XBa}Kj8+m^x-~=Ul*~`v|-)aR({zV_EHU#1kc`7OZ+z4k?{j=$_q8hyti%M zlS|jfmhT10`kwSG{Jb8jowtZ&)74_vzCcVvavTeGXQKOVi;P&|0pqJQ>*Rz5Pk?qY-7j zH=Y?+ilS96@#3`?OVOy+o8rUiHzwTf_e`Xo>{fd!XyQ6Wa4~yypZ4J~X!9$mYh#h| zud**%$YC@w2-K$#Gi~nR*1fi9i3(>{6|EUk4`vzG5|L6#Msd^X^MHJWJMjGQA;-0A zpEm)|Qq0Xj4r1z;ny+P6*l1~**mcH4@CBsB&a_@`25B8#-0H5|uv>>GXYdbOmNRM7 z2i!>t*Aj2Tzu6MX_6z$?>9x0nT;`1T`>Sk?*jnqxcTE|$hq%g?Z;kK1ws<#R(mK)b zy-bRgvAw>*5*}EkmzMyUI;J_{m;QfMEC0Q|Sp`9HX_N+S?-Uua-iL-c7}O2ns;~I` zdGZn;AOD`dJ~o=OheudO2K}g=Xgq^taKPEom$^BnoSYmQaTJ4__?Ug9De{IaxH(JNiFroF1>)%+1{?5Nc2+CoJcBP|{s@H}foOA4 zO3yAFCu?c;Hmyg^X_KfDmeT&evIV8m15ak!7k^q9_ZFH7zqz%v8#)}|FYvZdnu84v z*EsduYBrZ|7f!H}S4fm&lj#c$aSfm8dN1dy9&9xh5zm`8Qts*>t?6#wygBFkbmP{s zl#~=5Xn?TLl$4bhK@s1zx7ePLnAq<3;=>0nm^+CD&Go^!jg=LPm>5-eJfra0DLf}I zK;ctRRNSPfEp0lYgFn_c-Y=s3MlPTX1nIFbr~l=JC=`mGZ3@>Z(qngjy24Wq4Gk^p z6%-UanZLZ~p6*UAfrs=SOPsufJwZ(~8l|cV14Y8)OYeVmr@eFHPQoLL!X)>-19y4q zNS!S~o;&IDxKEeD&BUHbvO6A~W$9$xu_t2gvf{Dl)~4@yS7s)68yoBxw3|Z`A8NeJ zd=US$$hCG$OI7LS-Pn!o7*BpzG8LteNT*;HHFt4u)qeND-IBXYj`P3&nwc8M6pLtw zx6?7=ZcEj9Y*IN%vaq!N41~->15=0zCzeV@6&1oxvoHchLQUOm7~Jo&zoh(UdzyNG ze?KxNM);IBDJf|YMwz-{fOPYp9Lx`P0z$tJlH$d&hmReHEXTaqy1&zC7}c&~-X4`> zp~eflrd*Si#Rzxa+{tMk4#(5SwRc8q4r&*_UBd(F{E63_<`0{n5P7l`dii!we#-n6-KQAvYPRZ5Q_BzIuE364> zFVoVZDr^RSSHm32rZ>1GEG#dNn04FPrvFYS$22!Ja82Zyb|~I891|^9B7qDRvGXo%%I3a@8m+jfkp?%bkn_zCQnOXyD}cQGeAvgwXR;;eR>RiDMiglGS!HB0k7?Hi-*m%Z$;*U<{o~LWDwvaO z&sC10`)Lp-oid5j2$SI`Ft@4W&-a$KB>yeog~40jFKW4Ual(H0y3v6_+#SouZow=}nmR%X z6Hcz#oi~Ye|4)?1P=Zq;%2N+y=Je^*x7KcFgS_FYl0Pe8xz-M-m=+4i@~^$UirU&l z-+Ftsb`HRn=Syd2=hl9EdwV%RC>0^em6amdFTGq{+h71oD|yU(uEGD*70e#6AXbZJ z{Yd7k_1va|qmGU?H8s_E{Bva`O}1rdNJleW1owD%Ue(Nu1x~k5dBC`gzU43le4dfX z!Z%v``B4(+W(GkG<)IxR1}%IAXM7ZR!?S}#veNEKb0(rhCfr}5DlLrrcso1$biEt6 z_mpah*?hefS-B?M+WwsUU*%;zv*1k66sKbOdC`2SI5og=xXF0_8(n8~G~U)+)7kSm zdPc@Luq~+{4}byWhlQQ1OPw)|cTzuoynb?aHsPxortlo5JQiW>)@p*2i>m@-NI?1+ z%El;QkUBa$(=u63z)h+zFj@4)n1M*AC>KudN|aOe82iBjgS7tF+A3g*M* zA;H1FIMKjVChS3>{@9tc^9y#es6B}B%U~w6eE)L&UGcP$CAF)yOEi%>^O|;L+($gJ4+R> zQvTeIj5ztgPYf%y|YSqaNznCL(JoF|1b4M1k-^yZnbx&2kOMPAWZCH~L{oI#Ck2`6& zemGB+osW+YX4RP5+S=>_f&v5O*x1?kVJbOw2GwslcJ+P^UA6yzuj9@$`f)WIyI5h5 zE^uHSjw!e`@UzQoCIX6a3O3oUBfF5h*6u2O&bPelzTGo0jT6P)h&=tnF}~Fjztr%c zv1nYWmujwG@V_TU9v8$;K&JiF!(EGxT=C(0p6ZL=*gVP2@yxeSzfb1o<_sFW1^JC@ zpA{AH7MV8D0T-nVM_1D`{t_lqoFR~7-=Y$JSy)IemLfWrj8t@?e9=y*ZI}1s5)b`* zS6tcm`4ZG7j|Hi;stgI&MQA9tLRSVc*-^%5^(Rtq)$_mXe)uf7S(tcYVT6aG(tmk^ zdV-ujOynGTWR-oz5NEa%peJhInxN)4wk;ckst#$D)ZpIZf`dda1_YFvV4JqR*Y=-C-2}Fi&bJ zYu)S*zUOo8!tUqqroC4(gbnI%;64=EEgRP%Gv~YSoI%g?L-)U1aV`Bw1t)g4x4^|g zYB*qT;dabiO~9F_l8Or3wQJZgibO=jAkm64s<0+RI>N7C)ig6DhW`Xm;|;e21r

JO^QmSkl z_5O&orIM}m*A9h$9>th3f%VVA><5-g?UiK~wJZsPSt7$#HB(x}NTLX4dwW_M1viHC zt~&X^jZ;%oYlVZ~->mv!#2oAs)HF0KCxG?zi;RqXW?I?}&bZHmgE2hKl2THxIypI2 zbPE@Cnml-bg{Ch{1(nSer&CBF-eAI_$+QUo$Yhy$NI&viBUgEwwW3_wUs=w)v(t3t zMK$u*{7fxW2(`iXG5eRdBjH|viTg16h8fb3`g%n*+CjKWbeU97 zH%f~2^NYvJMM_2p^_@ux@7ADZ_rQ7WV7%$y@7}Ki17c@Piu+tCz56ibUN$)K?oQ&Q zqi+)v__!1w2BPK~(`p#V$Se*m1!=6Q-atAwx{|5k;USuvn+tV@`2kW@dFOf=`3p7SXVd<~r}h&R!sjVpsBz-Rw$RcT68NvF!|KrjjD>!YiAWT>hksljjBa^TEr3hHTfgHSgBlbg zHxJL$;iE^7BIDvjzv01rmV2fBM7&9SeEh28C0K0;`uw(f_x}CwacU|mHhz90o`)qO zQl^SNXCv)APAOL6x>q6}U5X2>h>dD4xeZ24^ z`F!0Q()fL~kE1#*GTem4KaDt+Wrcbz@9hR%(u3V#SVY9t%fNN_uY-f#Ft!@k@pyNx zsod`vH3@luaTkG+;Pu5JpUe`}5w#wh$q8!NB2US{1ZV7RH^wtCam$6%=V3|?PSRju zfekaac2xhJGfsSGw{a)bchUPLYnuKN?BB+?DSbW4+P|-BpR|;t+wQ)X-;kx$-)(t5 z_2x}iX^?g9r}UYDjAfcyxoI3g6V6-Xh(<`k2lP4x-kb*D032lHhy0GKjfB74H{JOf z+=TnG9cvx>mxV(JHPR$p*j^$ z!BDQsR6XIF>AgK?huM0{mh&Te4zfETO!yz83grBbc&!IAacyjD63+-2BuKhnFn5Ff zQ%A%5_d6-Y|DCk)Yt8oL3&u5W?Xhc`GhUF5=c0%dX2=;y*Pp&<*GE^WI(2sLgT?Z=FH4Y00Fu)cv>j{03FLXcG@Qov z@yKUYMq8Yu&bc$+^5XMnp-`o+gQGjs$5NSDS&u{OMD(v0Lx41jv9L+q6Z8XFuRHFxr49B1pI zFMRCQ+^ZSV+CmibHzbozWXsXSf7^G|#AHzGwcLxF5w%(aEq5?s_pxw*NW zFE0W<>T#oqn%W*69XUHY1GKV6oApb>*H=o+Ve%Qw*#G8^N^Kt-qXZ+1)<&NL#OS^L zky7D%Iy{(SVERQ%nP z>$N{9a^1Z#mpV%N(2b{j`;X(y^^YCD&c*l6Hh7hY9bVjP3Sc3_)e00Fu077AH!Og^ zOcrG@d|sB51Tcd)xG?Pli$1|qUOz6ZJid|T%wNIK@}@_1F3ZmUNR_)fyRR)aQvT1zPZj<(E%zYWVZvvJwr1nP$2H9= zA7ZF)TAb`Hek>{ysWahDV!M7F=gXHbTS@}}PPiQYdSGQ`MYH`F;4|vS{-m6ooQN6Z z#wsaCy^)2g<>uNAiv5WMFDTUj{fJ|2PNSP&?GS(Hz3DFXXRktW@F>gquP<%&wbf<) zdz{Ir`dHKjeivYPFH*HTVP^ivq?#%qZo$m-V)pp`;JaGhm#dAb>n{?$E_m)cWIjr zG4f0Mbx-~THG|=<+AMn!yU?qWOCcW=_xf0vCwoI{UwKd;T>3FFJJiKCE}i{!o%?z` z3NHmp_^;o-Efqr+W`M9*4%iwdCT1$-4BEo#YB*TqP}vM*eu0{7abckqHL`h_Dr!#^ z9UZ;?-xI-@>6#m-4@|htCMtU}r3%Ff99}v@e_;=(aGcsxouF*Z(vCBKA+g-PVFJjJ zw3P*`wlQB@X3~fK`G5(Xd->P)XEBcx&z4XXq2Ncm2qhCVTK;?J)lTyl^7%?1G}D5? z*@YZNc}=_k5N(74%zYVf2|i^9t|xPgO%7Fy)Hr~upRB#h8;C-FexwSOefUxa=>pah z!;h61<83{!3%}cnyu_(Yo&3PK^dZd5%;uqOWh?UsH-XKV`;%#@gmKBQibapki%KW0 zktgrd%dQ&V0ZSH`e>Fl!u{Unyv_B3WVP4m7-u#fE0>$+}a7MwM)1AK@b1_j`pOaMH zP+LAJ(^94F`|lChD(v^ya>sO9822>2=*&Qwt%XVJ*kKh>CXvqBRnZaY%34JDTK3$} z8tR-tryR5MZ&{PN*qt7c2+Het-(?mmC@Cp9S?x&QFjMVl^bhWaepG)D_+oi;wnLnR zN?D#di)DB=GfaF0ou-WgyF9<^;!R)TKWwc$&M~N1Zj&f2$2cjnnl2|?)hqOv^vj`f zx_tF~mRci6Z}U-#Tgl0hE7{_$WvPWr6)$;dn;V~F3ik%WIe0Hu$ney8dVbA5vs{S4 zEtY{aS82%CAmcPAu_!puObm9@`Rb;L?{}%7f$Y{kn72JB-GB z&0T3}X^ksTBpMvbfF(+=k=O&nSOj>@BT~p4mM_qwb9~61TlqX$tw+eB6GK zT^IhrYl3UP+Q}zCz^Tt@TC~~c;F?n%008>36JTD@HZegBpEBCBwl;SJOnU{FZF#K?)nBrz8pvtvAZ zTpwb2!^>wW1NRi}XIUbSpnWQFxTj;xVbChuhgv)hG1IPR{EmXsLNurWyt&%QkMq0f z1%;?cl|1u`kqHkIH#fJb%dD)d#l=PQL$~ek`S?8b8tUqB#fyWfM8kj+EEjp-P=LiZ z(QjfkL}GU%kq&u=&(1k-i@ZKD{XNacaOXyd0k8F@pM8}fl(6pZi3{6zo<}k*5Ed9b zOT5A9?X&V2AQP>qai)cuzQf;o1$ruHkU0V0h$(S|o_O-Ix3`y`qrqEQ8S5+vAi|An zWPmOEEnC`E4~~CMIY5PfnO#`Dmp2drSG-K0`Az`d@XN293IqWilpzh3PlVqJFJ%bE zuDjF45_o+1ZKFUkK1}<7o3MG>jj{B6mjOkYoOn{Qwp(8^q+YUK0ur(5gLpqc*bCn{ zLAE{%0#)QXHd!%-i^jRdDxIAXsukiiZImmLu;Gpm- z9eZWdHfa-Qna2FKljVNB`UW>j=LLG!mSAoMk8#!(OVUMRZL(lE&9yDJ*HHrE->KJx zP0IEMW!_n(u6m0X)=v2?)r=WM4_VAt5t0Cb8woS7cs&KXf3MTWW9D6ZpLRQ zi31;*CN8(CR9IY_ltD3zeIBK+D%_|<2+0YE0n0c4waahhvT6pwk2(%C`B%_F6_7+U)_{T=G)stV;{%^B|Yea-oLh(UDV7}=TVud zB{}hv`23_t%|C;AVw|h;`;3Q(W@a^P7-|Gd;FmpC`jYc7Ht@P;2E4rMqcEdTxq?_V zXcp~KvlQR8{%N_m2m)j@$j?K8$3EN?bQuV~XCWpRFnW|;wcZR=*_`(>A)G3JP|}$& z{)_LftI2g14I1>6^?pwmthhpqc~`~`SL>6nm?>AQaRjU6Ek@mrQ@K*E6S)@do#XUU zI8f$Q486~>z-7ytV1SZp?C#oK+5!8z$K!a#TX5dN=fK)?>dO~&*rY=-D<7;RK3q%Fi4pYp zrB{C))BNzFYf{+&Xi5GQC}0)f3s|a|7q+sw(*n0s)IP36ZL9vcVa`R4@Rsn$pdh-` z$kzpW>QM#Iz8T6HH)g-#IF$$x?7z0$c&$C@&dtoFyJL2E;r=g4Ke!gxWN08vD070d zna{*29$a)Qa_P~K6+{53Sb&6q*dGP)F)})O>Cw`MyKj)*vfc%G^iPKqY$S*A>Y!J) z?oU^yhJ1~K8YAF`0#@fb1$=ST@o`O^e60%+iZ7ox|Vk4~~2{zRa9_^AiQh?aq-l@$kcA?Tw9ELTNMFj+14uq|$_q@<*4VZcJ~;X}o|0@{WsCART4zLZ|pl-@_> z5PTttc_)hZRdiF%#_m}c&CPf_0mX@G#^X&Ri@anUXkXd#J2BJ1Q#s^s-}F_{8dZqkMjg> zn1XGUA^U#6R;4u;rNx{<5JRJJG~b7VvSVYW@2=m629?9P^SyB7Bl zDzvyeK0cCx7pFFetL01ed>T1_39z<)1}l`>M@9~Eu9Cl}du-&XDipne?ZE_TF7yzq zra%s)m1X-gQ12;;<2u287zFA%+^{%Y`-7#jxaDxN8b{Hj*ppc?hKR9PzfkMq`EY$G zGm#oIFYyD${LY|)^=+(+idBqNWvsl%HpH&tPH0fSUIlIue2Ve8lcH;ip#=^L3zKkJ zQfi8)B_|I7bNcU{oKQPZ!l?%^suSocK``hFjfk*p3&l+pFvn0(P+;=b8E%fF`O(s= zA1M*nP)y+OojYyz=tKUWm2l`0hU5;z0|9pGI?N=1d8pk_5J2%+enq2V_o zE8vzk{qH_{L<>TMm#<%k!ioDbI7kcxI}Sd6NJE2P*6y0AJ)i&pwGp8KA`m9)cf=wp zN(q*$Dh;07L*S(8sV83}&Wi(3XpD{<6Zq!kq9t zsE!EZoAChYbZ^SdZt%P6jke|o0R}Xp9S)n%aB z(VhVz<_~7u$SHPpb&ZvZ02s^?oZ`0X&yII3Pk*nRKsODVAk)oL&&_c{`1Yk0ZUrAd zwtjxny9Wqg#y?XcA|iuke@Q?j_oYgQVV^`fVBpy-o^Ec!bxtZO*nq{mY)uMQbc4vG z9o%k7>FDe{-+^u}he-zFLF9Qv*nHLB)JA8nqX)-gUWR;g{oUELr5Tw+NwG0Yqzu#S#fgNnrr9nZw5;;l577^Rf<5 z+$Go(*m{-O9}TecSms+y;3?M%^tn&eWNpR!nMro+YcVjcUM(rk@mwA)=NWT*@z^=} z{jqfNPn49D=Ag)t@H;A+3V{9uIUrypo$ep5c@NGnP-HZ?C^SGSZ4zIhw}Q9?eun^H zRYUhJK#W+t8_WE4TM> znImL0ypht2AOdg{fByWr0QR}^*4EdMc#x41lbg#{TVIcmZ*U>^j*q*+BlJ123nMS0 zSj?{MtXy1Nqzc;*!B(1(Z{O4zWV}g`3j;=kns}KIp8dfC?gads7Pq!y;i)VDZD(zw zUsqACTR^wHO4u$&_|L5&axM_xyV1k&)!tgJW?$mInf3m#;^=vk%Y7hPP} z&tm{;*QYAL;#ZX4wDGGoAs{cM4@%a64?t+$IjJ0-$b|(n_g|y9;!blN;OCw*Ha=x@a@~TJ+KrU_uXobAf_)qI5$B+BksOiD!uaMr8!E{HczI5gMbqk`$1B_OgT zJbqCiZx1l{>7QqO<=N3nY_T+g7@z|YxtgY?65xN}a*wLA_c=Rq z1m5Cx4L^uez^PwFT^$dQmw0$LIUhgb+`D(L@m%ijI{Qq$M{n*RX_V5*M9W3k(vpSM zlP5W4WiPA#xz+g|a)Zrl2mejON*u^UYU=7s+s9DwuyJu+g#LOL%0k+r8(_!$k(A!Vk7qRWOQI@bXKzY6kJ=zPXI zjVC+qj1k;=$U-8IbLIHA{)O{gOAxb0GVfyX8O$1#yRN8zU2*ly(&O#~1w=Gxj&`2Q zammRsAtfkiY|2oxQWOwuz)Km;j_jY~)aS68OE8iJK?_davV^3hIe4VPnip#C%}bE; z&3#tS7y3-s0ua>+cocdsl0Z?7$k-4g@j~Ol|6dOSlUK37to~OI(0JMMv^8L+( z4WHL|YuGw|hAL>AHn!!wFFu>B$b$=tJ@Wg;#<7os&M9Fzg%DWF z6Fh$Wm_22(o(}Ft$3QGhrB^3FiRHlVXdj9BZ#rk9X2*L6$_!JXlDBVJ`rh1{-?{*& zW;Vdv@0SkZ5EFNUmuVl-^?^6H1}j{NfeHbi*rLN!SPHeuCp^_e3-j7t*0fjcURBd( zUrB*On$eGU@%CMQzB!^A!VQMool!*xiUZhL!yqRow^a}H-2&X+sz7a6SwlijZt0q# zkkbkbQ;(5NNjMkW-`k_sht^#leW}`|6N=Y|%vW`865u;tDJC-5w-<`%m_<>xWdQ!I zbKU!vU^>CnSmjPi!k`Nr(P&nm}Mg@=$0mxYybFBz;V8Rd)rv3Tj4kFJn zpFRXyNKUJD2#2tCki5LKY`16yV8@n|A%SXMFbXhDb+k3!3Nym z4+}ZKD@%%npFTPN{&|N%${pt_F;fThky9O7Rji3U0?rHa5cyfy*f5&>j>T@I))J~a zK4Nez9Txd2S8PAKb1Qu1C)A=)Tbk(GD#FTHt6{eZFr}}cmEhswaXJ6%0bv-aoEjyb zps6s9LW%9&dwzCYdcc6xKM`cJnpyTGFU4cC#KLkoXZ9q*M;|C=WRT8{h9Zd9?NL>K zx40X|i?Sst^c)JLftQ77k9W004A?q`bOx!o8tW#)1T~#C8eEz%e~}xW!U_SJmFKKD zxoJ^5&z_Gc)*LR5(#S-ZQ>#fjWt$F?^}D zxV|0%;n6&@nVVY4;s_U)IrP$~@czOB9L> ztA6FYuv9ZS{wNkBhrDb9p%UT46w=qw4O7k~$Qr*L-Yj2sU~N7D1q~T1)ArUJ8{eF! zE$2as(T_MIjaf1{EfG(8lZUUUlJuLnXH=kYF)`e?e^7>C6Sl!l7y(!$Y%26Vc`gBm zkWSH&hd5+0`hJcM4urUvxwXwr`|@=n0)k507I>-14FarOScEQa47Qh=dWTBR%+9hx zJE&Vw#8%Jz`p=&~QiF;AVOp+@9mN}t*RyFC`(IPi)34$s8Ab%$={)f^!b_H8SFyPi z<5TxG60X!O(6fNMuF{1G6wa+%x1b^YEVz_xw!WwW;!nqCIf@Y$aL_;#A+M(PRgrlx z^Kdws&S0mGruuPllXgvB9y@FYZs)fbNtd#$N8fu@I_6QzSKj#k-8-|Px3?SJ1jAmu zAjT$UiiH|w34~-~4R6d<^M`F?e|cy4YFi0SU5P>2*SSm_p1vkU;5gfv^2A6k-nwa; zMcHyEBfaZY5($RU$6{QT$__WZtE!w5+NNiY%l}9Va)bQUIzjBloa zCwu07S<)%}269jn78%u)%+bczdC(>b?e3XY8&?dM-5%Yz6NIwl-^adabRl zT5SKQLh=pTTZn8lu#p-3^q<2g)YjRVul=QXWMgl~H}LaEzEWbb%~zwN7DiS-P3P+Q zW`X~ba9bs4$V^DMXVd4btsVa$(QSLO{0cCxTc4HKz5uT1s27tFlVjh&nLAykU(E_C z4dMX4I^$Yrbj5Ij9IBVdM{~qRjy9P8!`b0sV$s7FQ|*m=i$}aO+@Cro8cG&#kvB{_ z&`!Nyg4N5Hk(lK)2%u&{5nP6$WwCMe=T8S1dzX7|8_s}U7NqcPpeBn29Z*HocM$dM z9Zo#9gzClF%}vqUTLM7@A!dD5vjVyrK#j!m8lc4ui^s27ixQeV55=D9HL6<`Ba5Dg zjm%lQB`OuW4id6!SOgE1x!Cm4uRg0y7@+w+Rc%|=$}_mvC{ z>2_-#r6kSM(O4G*P3~&L6R6Z)?C!ja9;-c zy{uOpH6sr#TRBv>P!xRLgt-yVwQBhIeFcVh}D?}V7 z%bxSjBNw5wEu-99gM%!x)1vyPf%`2liK!@;?W2G#*%V9RoCsp}#$r-KN!OohpdYU2 zMXK#MQk-CKfex4z0t&Yiu35R$yxi7&OUpptfI`kokK5LCiGM|8e4CnkFpC!*c<+m; z7mk672SLS!D~iW{Y{SSBQWnC-2Xl?*U_52H@-4}r&NaWs{@b=5?+rnHdZ?KY>UOGc zQ9YjwSZxHT1kCR3$c8hZ5Qdv(^8l1V$tCjz5fSnll%av|h+xAGL<9r~i-~~}^!c6g z3xSi96SIx)`ADm|dwc{kAy!Z*0`mE?cLkX8VD0XkWb>tuZy`G^;#>!zuY{lS^3|)h z5+kre-mGQ@;7FCpC)CiXZMC4N$SSBC)a+Fsl@>#EbafFl3MWhfxYXe=E;VnrSA~MC z8phQ2z*R`6k=$o;j2KfzSuPLr{@LA%7t^jzvYpT^??3!4A}Uz?AHT}`X@ZX|stlx4 z$SDWBZL-FR8Bm9CIAvnrI;0WdCrj$d78F{Di~xGQBH_Re=vDz$Q_|C;0Es_tEex_d z_-itD>l;VXxO{zG56VvXP9#xELmTcScwr8_Wa1Up_7ro#$9KYUAf==X19?E|>`egy z5=4{_*}AX9&DGWS;~>-?9Z=K9z#luvrgl@92BKu%|9}uAu<=MEBOm8?3bhqd-p)1i z=odW$j5C?{k%h>=$D)- z{Vt%PS^~seylxwG_5gR2f|?N&+$zxfH=qFSpaH?n73TXNMxY%tU0@WJlbgGq`O_Sc zdmZi06QfPmy5!x9jHm+Pg^YHl1Uec*u!9i$E-}&Vwu}OTgPL{gu1Cg;v(l~TL8cY$ zRgLQZ0)^-W*{?hbQF9}o^9a)yTGrBNma{t24M~ACV`BV86AJ4 z`sM;DOlv9#jSA4N@={e;81qso@>13KQoFrz=MNt2d@ zb!@w(DyWY`VW?;s6nrYv((dce!tkjrU>nH^0QXvf#P>H-Ut+l_n87qJaw|M{=i&eX zNIdg^G8JjTfxhWC<=U|k^3b&pk-XW3-#L1WW+y`cVY&=vA@X|A+EaaUSBNtc6BAtk zt@Q+fQ;yiw5peM~N|yL}0@7;?h*_V%RcV)AS#|{_b2AD4bByO_n#j(guX?zzAb8Dxkr?w;S`>!xM!5Uj= zU#~R$1F5gU1NXJHHH20wviSxV2r8MWw-dI|#7x$?aiN*PL20~m%kA7!jiZHI;Yag? zM3Y^>AfOeUMyuDZ zlw$|NdM8k@14>+c5kOl$JqgOi*7o)*P(GFQ%&WpB`!`cOc1wRUPwF5f}p&}w;2{g;qlb6v$NA1J6{o9vxGwJQO29yZdRhP$ zYhSH47C9z*J}sDPI8O&gUZC0)*z^p5`NTZB$?&Xb^DI=?$}7-;$3S-kZX40Cs-%luLbTHLw0LnS|vPFT0Qd)Uz_D@6Xd{jM_o~ki3~P4V6fIH>%lb4 zD5k5qM}&p3N=VQE%!kk#gm`LZ8H`HcwjxHpR`0PX04)-TTZi7szX7dsX?RUyA~`Ic zQl$pc8x07PpHVvi^DF_m26AS_ruc)AySHc=C(;p(*48DknB|||mc{_FNe+bPGyOtk zpg530W56(n+7(GWaGbKVBLcHB_cqhmGBtU=yj7ifROszSHZ#+bj1umcon=IjCRqVY z^C#&X2Ai$VuRzM@REeW|qU#Jqvz4{=61<#RV6s6KHCvz$QUyeWJhcK@mH=k8kp?5< z-8$r_b};4{wB}zUV`e6XrLOMtG4HSJ8CBy}v15*?>xcTh$nqswI=R77;rpl}lX>|ifKXWZmV3DLa^Y|+DkYS_c(3m;wmq=lO4 z$M^E`LS`nHqNt!%06{zflo#(}R7v<^kvgLBAvAo>7yo=>t}bXc3Wtc2f6RaX-U15S zt>3jS%Pc9qaYtuR>X9-q^fmK(Ecbo=Di1?+XU*^yQ)ir@OKkieV6}bCuwr2x;+TaW z9o4_%o0-jqt=50VI2*Ar(1T^|zYUxAHgs#qsf;3;V}ya_x|=Pc?yNyloOG=MWaCnh zFvC)uyL3T)9|98S1(*fF!NnEiLB7F{8dAkGuPZ!%rO7#QcUF~QLN%UAHkzDE+YF>2 z5dRU4JkT}xPz^w=Z=auMhX1GJ?q2!en-?jjxgP|s1z790@Pv6DLO0AjK3MaEb;WnB ztS|1Xa6troA$ycMHn0tAj5Y6^Oe4~8#Vpn}g^PHlsm z0!_F%xegO#R7f_5@c~?stNhh889f)7OtVJQFH@KhY>}80|#$`W$ajM|5$)p4UUOZ)ib( z@Z1;UaAh;?Wu8WVd%d;$RaGWm24`>z|N>M$of*i21v01SQcE;;(saxJ|f{zJ{{00K9_I3*1d4e z4h(g-d|ic+(WF2aRmX#*{N6qAad+|Ds52IAEy*7yJS$dZ8*;2422z$H|*dGYWN|s<1NCRbpmL z5%nQhkL|e{Tev*SyND9>w+X6>xG2UyQt}^4NoVbn@YLg6W`7m6ar=MfBfQwb(_G(- z(h0hX_N=0b!$7l4J1uk;)k02<``EA5 zIU5j7>N1>7DCe7c&bPO=5KugpNtO=gn->Y0^h-_SI5m>XTmolk7z_09vb4LqYG6J? zEnipcDK;(&nSlyZ<4}OAX$}Ay&sq3!c9gRaNjjl2^v)d{85yx#a|f($u61U9zGeIz z2EheEgj#KS0&y9<1FisVk$6Vml{@hOyAN&`#`9;gT%a)^op~SH@laZqHDOATBT4c4 zD|r@*d$;aX+J43>+*>KpJgG{u)O#Ve{_{qdX=#LRp{2dIaOvuvQJISEO1Wh>9TWlx z*$Nuha`z2gUlK%`(+MiD$xB5=#d2u7Vr=TOgD!kvMy{;K90nhe5g1^vv$^U)4`n4p zi;015zik~Vai1x-fNlu#SFjc@D|BoC7Js!8@}&cPFfU?r0P+Bvuw_W>`+#|-Z>tiR z^cI_Zi?Oe&R&tjHVhK>2qTX8V|CW@OBeSjnFn58NAn@0KP6N(B@!<)Oi_n)|zkc29 ztOuE*g5QOqHWDSmDbBHzMI9!8V@{Iw!=X>2GGAtmJE}z$c<$f7@6(%|o$U?cqv7{j z^ro-6en7rZf>!JqT|2GUtJg7LT_Wp`+yFLl@f1cJv{qz2s?)@)lM`=bh7so0(VjtA zw}9rwL9s0or7|j%#!ZVa@z7m7Y;Uf?>m~?+ddU}|(1v%)4jm&D?@#z@p^<9`WDSwW zEq`(M6#I`cJp23Cuqjj@#xIcZ3&Ui|szI@!a~sJT|nUz^r4j#K=zT3kNvgO+2q z(tBiLM7c&GN8Z?&LDmf3Sl5L-%7+>#W>|GwdBMd;l?O&BFzknh20jEMAJHwW50%(R zZ=z!-=DadqjT}ci*!o~SulzQJy@M_19+wtLe*zqc-!tz)0^_9X4x`7};?D6=QRS0{ zmN&wCIOo zO5Ti0FTSh$NVxKQe}5c^YF`5RK^wIL+3Y9?*Z~0Q<%V3K)ttPnt8g_I{34ix?2l1vv~?I%keNj5;M@V$3QSR{2J>fw;uSmV5Dhc zmK&hul&vb0^cT)wahH;Xo(O6+F_Yvxg(r(?W>TI)RSZ(b34BC7qRz8%v+2cATkA;0lLC^~b9xFX*V|bvqf*01N<~|{Yy#qWU zf{8%iOhG|mFq7@#;^EN=xxCDNg5TjsWfY9q$den?H@I)K8O;IHOT}xTQ)&q`DXXMp znh8{FHB;e{EOwizMxTbPFu}GU43Wg04azqIUw+AHWj0;Fpt-&qlVG0x@(!of>9ur5 z$eJ?1{`c_15oJQ?-iDbW+|kK+J>C+JDF)c6vC#Q`4Fo2@(E)fugVtPrG2LfN@-+&=)gsSzH z1~cip?|YbqIk;^Q7gHK;z~uY$D_7-4>!7Om0-|@QIAJ&T?K^jHW#9hKZG;*LkV1AS zCeV-~l7LZaw8&ZP9b`v9BsnU71pVSa+8Bx0;kZ{ybo#yj`!({pVC>86%h4NSc9lAX z4{D8aM1GW3Ds)oM%QmqlMymOf_lHA+3Wg)Gd`@n^MsGlIkF?fsd|Lkf#&0NvW*S(U zq5sF$dw^rvxAEh*J(EpV2+1ycBr_C3_9kTBWD~N5ijY~6m61Jedy9;aWM`#FWGC}~ zUcK-8`;X&)9M5|k&+|S{_kCa2^}W8|^Zcxn^#>A#^y`;g_; z1syf4iB16JC-$I|DKyBp=#(!_Num4gZ0&cemg?8ijU>+N+$h^<>68z(EFv>6$ z2^Ey!2WdK@*i|{s)cHOvyMt&JkkXf$yb;ENH!ll5tds8d8)_-}6H!ZR{Gr5Ea|wzB z_K|Za&{f%1Rm0enCye4`hyw;piTX|inV=cPBcYv#i44CQz~S}=v>r7vd>&5|OWusG z0`M3LVJIYOYHIKhHn+Cgv*g1N$)3OQ#mYd8BeGGax5SqP;2OU=e5iQ_(96RU7-*KQk&0QU=(0~VHgXu zn)-7KT$)QU8&eAJQe}8S-vXhL8cj;%gW8@@HNy3(2kPQNqfnwx0!$_3gB#bS;od{J z9UJ4}vR^$UXslHGK;QqsBde6i<92J5d6~-1o9`80k@!&R6pyh(B`T+32(Eai=3-h3 zSRw>ApuYez;UWOJUZ^&p1rR+KLN6d9Vkv;D;9yaFJNgD>iHKeZ&hc_M3eWEUZd%GI z*grj+oK54OG2zGa)b%Jw4fDM42EHSPQ5c=FtC zRXWrfo@;oR4>ldiH?BRncKfD!-8p6kmBVgSk-E$L(|;cISeHO!CeXm!JpPgUMFpDs z_fV-Cxe+P*7+KdCBT++E(CWK2mPIBVgQRf_Ag|_$xg8Kb<^aka^a8CdoW5heVYlf- z6cMuvVJY2!w8YF@hI9tRW($&z3d+c2EJ6Y%zlL(Ib%#!f{ytt#Z5iKk=yU= zDFOrKSpr~bLYVM0<{mW6k@8cZZ_9ynGUcG5h0Z8oJg~Cb#-+5{Y7nK>jT;xa5{aP4 zZ{$)9RQ>}R$ziA=tus3zu;g7d8iin(6>zgU+Z5F9uLg!C(e^Z%3f^=UV^kI|Oj>Ww z<_3l*qmULCtCFvCZO<{=WEL%!vEco1vvXfPb%2)CnUNqvW4O!T%Nb|yWV><^P7CO@ zsl7L5qM-$^dd)^XYpVvov%+glU*=#wEK>Dbcl(0dJgC9nL$V%I^`{rMlkbdEt@k^ChT8Zc zw>h`@1v>ZO07+lJxazc#96yPMS;|<3=bCLMo5!i@T)xfb#IBT|WVU-RrLW)z!{AzM z03xT{A7B@(!)GJ2o0a|m!%n*Q3vr=>r~uXGf|-p3UeIaU7=v~>Cn=9eyZ;Kee=v3z&-eRgBvv0ad=`v zZChV=r123Ei7I)b846v>-Wj>_BswiW{M{Ud@cS^#*s7fqxnU4~Q2`S{nzr6EriwV| z$UXnn57`Q_fE*3Qs|*_$7UnC5*on-d#g(*4KLpI)k=eq9p|!27oSb-eRTqGLMoQSN zvPUPkr+iZ?^%NV5)`0Fq>|j(U9VT6;=}^huSAQyxmd;>aQHStDsF}5OvJ`%k~o|QCUgJ-nyO} zpOiir2)Tb59)Rs4lwkl&^F#Ov~w^)8Kh()ZzX*N#ks3S{)p`EnPo0 zL25?8q>3KNR*t^s56M8?^EdCBj(W~fXOQOJ3U+= zZ}ChNN@lo*R;k^Z{QC=s{Kjfi-le6b+cLvH`awlhQ%5b9aSrr{H%tZSfX@hl$47s7 z1l_WzviO@7f%EV5d6BlYX@AP;02E9J0sU*X(O~D#v)EWg(C>~^JKW{q0Q0+WlpawQkCUn z!(~M72(b-VMRfmqWR{A_(4|%9qGAa;utL5xXnLddEJ)(jN9({LNS`PNtsQ(n9YVT+ zdQ;YO^%LHC*@G-vS2$fS1o=6=(!7kQi=q9+Mj@IQNK&{YCRRJ~L&)(nchlj|;-Ijh z@zKAtkfLGb2b&NdNAA>TJbx1Ys>yeQ?rYlAc<8t%cY>sFjjp~i(cwUsGUpFIDgOTB zg>7V`h#4>RM*$isJx&jf4<2ZEMny$2wzvZNw=z+YBX;%s8nGgwvd@JjH;G~Bia>q- zJ(8Ct@LQi;b|dS>dn*IZ`=Eda81P&}AVBH(BQQDGA$ev^&ehSb#<=EViPWgsm=cCT zq%>=Eeyq#eeTGIPHqokzxO|dWCx7Kq{m;Nz`u3N)w8#>k2X$xTT$O18%8@Jz2RUTl zYQCEHZba1n1T4OC!kmwQl@25G{R%U|k(U{a`ipSO1omCWOHAm1%oGj)6WlnBy**$} zkys%xE~g?m-tlsao^CO9;L*yS|5cA}D<;Xrr~^U@AINDt!EJVm_}bKTt@`Xmdrc+m z)GJ?`r9l>hg&J7U;BF|6nJ3iUD#)+;*+OH6^%SD@RH<6P9CRUB(6p{C;UV+6a>oVM z81`TLp-eAf)g^G~6&jh^aUM)9dk1W|)0uLLlJ%R`G49 zQ%s;Nq8{j5i+cpAP2HN;^W6ah32XHOS)gUrWYItyOign6v-dY!PrOR6^;O5V#n6mW z`~3g30BzRzENf;2R{B*|$&J_Ww2PmVzJSAH>I?z``QC+RANfmyzxC7TX#Y9~h$uvN z3TU%#a{e_K$ub$J{7t8)!(P1lh4F2455l7S5_HTG(nVE6z zC3tnF0_$m7In>43({@!3RkMyZ1~&yRzd#_6q`p5*n;j&E4W5N!_kOuaY(lr+VOK?C zbY~7mQ6o|ilqKv72v!W3L+nW-tc7cQ7I6-L!F_IJe{{N!X|1q~cbp>_{&Vip4S%A{ z6HHs~-&28_c=~%|_{)2tjg|0o6P#=jHuYd02Y$=M`hKt!o8iS2@|X=uAwW$KZT_-1 zB{&5X;Ny>ZvgFu#sJrz%Jv~Rn)yNHXZWk`--FF?k@VkgwPJ@5$XQS(Dos2GD6^5|N7bx- z>U`S@i)c+yh`HOEvXAZcaYnC_ndXN+_4`Ih<{quS4nKEd+J=d1GYv9bvHq13oCbcE z)uIU`i;4<%ncMXTSNGa&u$LF|hPiM-Zd3i;^C-2~5N`$VWYC7X ze}m_0XyZo1ZDHX@KzbnLrsCyOpo0+o1%rrvFbHQE?A~HoLPKT$xj_3rcR9UHJWUr}Mj%_?J#vQ4P{?ol z8>LS*GMJ1XI-n(Ws+-((&E_v#;$vHf_{nFYE4-gD#}hW%f5P?A-csiQcl=yz<5O~- zXyrd}@NGgiXS>Zcg#1L}z{*6}XgFHNJ}PIqP)~x6t4D>QZwIxs`BZ8Z& zU@bv3xzNURL%kUmWB^itwHq5es{L3@1IqKVUujY(I!O&%Mq&mr0L(V z@?-H*v^*^YA<1T(r&SJ%IbGcK89Y2}RM6jLIw-NCd_v=|QGRXlyG6uyDg(j|W2yHb z7^8-sIdUEOQM3Z4kHH{f3Fmp;+3C>;ph8)5&^P{B0QRj1%1+R6JwO0u*6g%dt55|mkXE1 z^a7|9LaU&YX2+P6=tBl#qte{pS)Vz)S>PtCb)@%!y4k^}B;M$dv!33+Z~f`d!};VU zd!rjnaep+!Cpnx#O{kSM++wo}h|mqj6bd}AR=&Jtn5epc=XoJfUs32?-XZ*}*xx#q zDs-(am=y@w!pSL3-2|rssH>7MhGJ7miN?MU!*HU$wuLtG96T_fMq^AeWQyTQ3KFu> za5k)cE({AJIFHS}nfMSY%q^HI^9Fux`J^+xb`aRi7{wxDA3q)r(BI2>K^uz~H^UME zm?#P_--l_0Bb;1;u<+R0B+$o?L)~PXAoWha|Lhb3DY>TX~w$C4opBpMzI z{tO1(4C2QR|9hyA<}W$IgtxJx^|wPR>cSq#WykmN*3l@pcQes(ojg3h&(usRFSN9< z;pOI(<94Hc-ASi3GrW*EDZ>NKI#Cf=c|we2KZk* z-V1W(@0ACipg^UBt&~Q8HFeO=kdM}|L|=l5th3*-M&CF5)`?uO@s>|1?gcx4mhdbm5$J z_?px>JOg&P8^H88g4Wb*zLmJPnUvOQFn6oL;wc;6xq{9wyszwf5e@_@ndk`oZr-nSHbGTvw7% zPbbNd1yIN2 ztEY8@-c~h=MrX0|Pat#xQn5p833^HP?d@$83iJeFJxf?9&);8}q52WuH34JgC=YWD zScv6|J;#U*Utx{MqSI5TkY^TNJE1@4v2*<(U^VFYr8homxJsER((6eSQRSDp(MI|r z`OzZBxiUUe-pdfQ2L1PiFNg{VMyIF%KYPL_P*qj6g=lqw9sql7cV6fMG?x#Ad**>dmLT6|Qh{oiQlrp&?&( zXA>8vLySpPr&Q;Tj<-hpA-WU)rRHU4v5fCA%BspF=smA*x?)^Ib5ECk>{!*LUafrS z;^|091m%mmWDD1_-t}AcQ*$pkhy+qdAYT`n!f`&15`ErZ-qK8D1kPg9q9xbCLXdEXL4+sQlH}txsq;ct)bU9eMX>D}YDT=0uR#moipRYH*lK+gn z;R-x)^QS|}OQ{vxFrTR zFu;#5c^)4X)rsV*vH?T_PCZ-{SPF`IKexjfm%;|!upo%aq1Yv-q0zJJkWMZC9(D)$ zKAnIq64dJbN(wrws8Kfh!@GI2WuGz-lYQ*M?icd@ogJb7S(8*yyJTygq z!mum4mpuM=mA!jJmU}hpaq0tezSLpT9M<+dO5xH<06@5KRf!y$9nKvsTXM-BZ=E+C z@a{wlFA2_4jcnwHu6&DG9K+2oo6yJ0cU(7QJ`5{zXg*{asM$6KE=TdG6%K&zzVan7 z@Dalz;5r7n==KP-CVoW!zV~t2f!^F0y<}xJ>s-$K(K(f^%#xm~LU{s_-UVTgg%}6y zcFsk+p8PiZ@Mk`DnV`b6=L$+L(b&qj+Q&>O%82y)w-8*6qo(;RF6J;Or}PD=`lrsI z)@mwUB07H_DbC8A%ysxhvDmwx4n?S=P8 z0`t2}lbJPb4BBk{th%~-O)43VOs7yr6wH3?i;C9rH28eJ%mhOQf)+$hb}KK3T-6z1 zgxov}5oaf_yCU7QPwQ`wyZ+Q1njD@Qx0rN{7oT5>(&))*3-2cY?ml=a$*bBpU^Vrql3ga!c#}!}pv42TQUqo8k$CgG1IAuT}>#she{a zNY?W-1>VOP*}0MiW-2Ay9lH0K87F9rC z;Q+daPp*L=)de&7f}6xGT?Z}>jsv}KMOTsp6F3~Ma2Q@qjA4hJ36O(sxE!P^Tml?y zP4tEbXl9(}TFgvXge*~l9BkhjBE;EjxmrjDKc0QAk=@wv_xi4Tt|33Uo%b)xz~8^* zr&TAoP3BZTyQa2O;~EO+ocIZo_3O%9J>3J#MFJl^J859_DQQ|xHgTJF!B_$EfC>gf z1v8)@?NHecmzZF(G81htRM`!7@Rl`U$MxitwElSg@IZ@PM?3o=NVFrD0rf-lOLd4k zy)Ik(ejTUUHJM!=G=?#o`(4jn|8w4j?kNgj~0tI_CjzP-8+VyEUn%v2*GGO1!T>a!;@(buk zbN^LNBviK?DIy_;z^~%j2ge#j=38!D0$Y6{;mFBaSt~;_#L9Urw>p~%C8~{|S|rVh_vZKdA}3v{CY@6!^}B0-hZEsp zwt`;dJ1v8(biuoE>+8ecFX~!n0No4#7|njNlGBxxt%!yD_r+bB4tUuGm+==JyL0sC zTWI3=`Xd90uDF`}F5tC__<(2XT*D(UfM{mQp37pTvz?e)%Z2?`1ApE-nCW#)-1K@RhuYNjE1GlT))n*6e{_RZU<7$xm}6(rJ#aUp zp&5L^t;)wX7UG_{T6*{GGb>4H=|s~ThEFR_d;YD|p94S+mp2U zlJ%8bK|$UVV?TneU#!O%Jq_YH264107mXGx1!JFehF^DoG8poaJPANGIzg3nQVU@3 z62NXZ0XFPg_H`UDbunxKp1DHFM>~Hx@4+(%2L}Kv5*H*d0IdT!R)1DznvCByz z0=yXqY|;avDyokuoRh&J(Xrsxw&14aNmbICo1WY_iw>Xk7-=beLc4`F7<=5;YrlEqo;twW4X-^p(L1!~}MWh2_0a_e{xivW4;^ z8mG?g{(a;=Akc{`C4l(9FFpaiG=hnO>6}GQKD_J3$?6@jtMF1$m?XH+Ocq=%^PP0x zn2|)(5x{NVejd6961giFT~m+&MlQoakLOYi&WJ320_m1dQavEMv4k?f7x>8oc9OelD&Li^0!zCIyu>1?$lAcsLBYa;Cd^WYf>UyP=+P&D0aP9dP#t62CMb z1VJC4p78@k3WcsyTILeuA5?%13L;)^oBRP@1i9Vd=luL-`TO_95CRsV+#hQb6_)^e z4V2hNhem=|c9ZYRqranDdGxF823y+$- z`tB~XrxQ!w-hamj*PPIG^E2nmDZigHKC-oKt~8!T_(iH(-F5gRFM} zmU|CCV6`qSRJ6YE|3PTcOLxh9_$q4<3P*aiX9xVmbBB!#$2;`)5tEA;BjD<>;1wR! zU59M~$u2;=IWDd6IIMy4n{o%lYZK}|IcjC(1{k^#II1XVf5uH3w98q^j~`XS7}Mg) z2lw11KTyAMw|V1_$3f7NnoT`*DnGVAN6*shXEm0BBAf==_sjMaGM<09efFBh=VWiu zyAe^(Y1kjV4}mW8@d|o43k!+HhfETeS3OJZ01uU}9l>^`>u{o+YS85TpmElB>8UvB z8uBa<>t3W6oID_p=7hOuVLo5|-VQuNV2o4<9m(7*F{=>3V?Xw z->@T6d6(JN(>=i%;N(H+LIA>=VBpXhWp|)c&H;>!&o^8bdtp6Rs=wfow&&fhRgGpm z`C;`J8eCLlFZnEy9cEbZ~>;#K|fL~g4*Ho!idihjXgXodB#G7?#rrq58LH~Z@tgift7!a z#2Hk;G}Cv66$-p%2u&JvxOy4lbr`^qSJ8toy|hvaJXic5EU(?YU3C9UNibY*0p{Yk zeOF*=c<{f#9j~r%>OW+HTa855RXdIm!<+&X3SyQnA|!(qIXB2~ z&yHHp`mt3A+4OL0%HHft57-Hp*4YNMZqU=ZNRz2;D^wd@EpU;+uYMM0xv!AGQR1?x zfs>z}bQI(A5gkPfpV$WP2=Y*nfhXxlJ7>*mF2Id}5`yCYPAWnI7wK#DE28(EUZ9pxUeBw?y_fE4Xj~DIR%;i}x$?(U!D1yQ2 zdxz}6Si!e;J4_%>UWCr0C)DMTfryB`1EpzJ@6_lyoq8#a*j zAVej6_K;9TxD16#AM>&{Op&suzt3BHrJkqO;g-3d1Jqex19mi!b4V=XDIHujYeT=H zbFrPq{{YJ1S@ii2y3{YOz%Qkng=gRV{XWFkSk@Rr*%o^u4Yip#;kQqg;9;+G&&x`r zVqtj(<&gf0WDEGPgR-X=+$@1W;IjwxL%FN=Flf_;){g(i)uCyUDg6IaEG=6=M$WFIN>BJF|O%=>pJEN z;85#;hPxcZDag}ylX`{FvcOa!w)AY!yEIXR>k^EV=yN+NL&Dt~?ij9HpO16YTlE49 z^onUgPFTthL(@#Fw859E00D#%7au-2uJ2!CN&!JSL}}yCh=JUelto6O;IA|+#9_MW zNrRaKZ!;-c*Xv|PShys^Z}nt0>@S|rK=oD<#AF}r)zH6?sXlBI|7ko474$JAMM26I zUl4@&y)&(+1Oq1o+%?R#z-ePxX%kI5Tm#5-I_ftZ#z-viUBbej*(T(;6V74?BowJd zv-p#ck1+%a#XV}3cyLivcf=jRjs<9WT&-zR7XO;Zz`#Hk?91oY*xA`hvjd?z1>Kz@ zh;>Pr*}`?%D_;G6zPXft?;vRO>bLK=H~m9OF#Nx9#j$CBA`fcJM=vY}goxrF#H8e<|g4%S7|mEyTnDxC5}_qK?>8pJrpWoO=Yp=qp0@fDPp7KljB;wyYAZ5HK$1pA2Al)r+R;h z(0k2%AZQSE42SY=p`wQ+Y<#U7VCqOD90Ku0LjnY(g`M;vx+#EsoN)SSVz46<xgeRa6iS2Q1#k{Q!P2Rzv;1n?Z9Kcn>LS;P$M& zrmh4ui!r|yq#lSAQzz`)EUkIq!5?K2FA~_|V$oi*UuX|6NJpcL8Sj|UFQ@^K_(3>x zIuY3rT-3H5IVG-#-aFrbz^71)WINz9Jmu6&fgx+vF4OuZ-cTvPl$Cf8XS$tI#C z53K-L!?Zy+KD*noCL6&ngPv9L-Gj;iH18u{AmwKP3OSKq;t+EQE0$j6850%?=rv>) z1>*CSg{~Js{xp~BeDW;1Qh3iV#8Kf@NLY82)HN#dd$veY#^_ky3@TxD@E3MJbcr(0 z#6Y{&Y%YkjXmCF*yJKjuG(Lne8$dye^blV;6#8y?{#hBpfr>={lc=hx*^+<2HI@R) zaH;;s>(0jCEyX3%;6p{;J&03;J;D?yQJZH57i*4dr_o`ft9*YvUV`xxj1KSkGY0Jj z(nU$&@s?+fu68}SAUq6IxW*T6`Mcuwf#b4Ot}Qj`x0@2U zGb1fr4dQX3liwmZ@Mx#Ii4xui>90ip1}sFzf46{E#06dy@GGfT$ii$KDg^n4Yy}1A z2A)Hl3ZtT`QOpM1sw{=n_!vv@V!-Bn&~xL|%CPJs_Zs3U2c^8Ol|mE8>5T1zXW-&# zhYIc78tB_3A-3+y{BK~BsX#X?fiTf7v+yqwX54dSI3yyDT%k|Rx%fB19rO3&#c`I? zAtWebcbD_d8Nssr_bjhoiMJ(U>85`!Gch0*ma9kBUeZ#`KJD}H!S7ih#A0T>FLQA@ zvNwXyuE3y-#TB1TUdUiMaWq4J)gsq_`#qzpCEz>qgEg)&J|1Zkd{^^Qj@cg_E;b4b z%Z@98y9FV1UFvh|%Wf|*^*p(Nqn1#;3=rJkv=>L$z_b3j%)-JXnS%(_0i?(#oOI9P z$8aH^`mw;ddpFMTrpZi$2OZmolZ<`u+X$1|GoRyTQBANBx=yQnHEYhh+)#pg<_&Mt zUiP$jui1m&ulV}qF)%U@QB)uNsv1Iy8$cUK!Mp!n@%(kAc8y-qf&^JOioaHSE~%S? zfc6{>b)h-X-UJBH2#U`N(5@j4y&A_c1&}9dz13uPX@!_;y1&=`J$`=b0@2O$ZrF^B z0f5{1Q6SDMC;;qWZ*Q+9)}`=x;*~XYhh8e+DcS&yi05Xr6g`j%Z|C zBa#8W1N>s9FJx8VHOjkG8}|zNmeGpSKf;^-8svO(zxB6}Z&^s6*guF~&koI9y{|l} z!tReG86(*;5Z>Jhrq-)Az2v*U=Pp9AHs8&b+YpVeVN0-;%!+=(p$79H5Y~|Gg_`rl zp@H_Z63I}n#vz3eqR{T}jSpM&Gh(#Q$zn4n^uwH1yS>Xzr(Y%&Ff4baEPfq=7SkFw zQAA^eF!KQ1&bnqokS`L%0-b*dE8)tQ5=Mv`4`ow~oCkRJy9R4+Q7rm|6vLqg2u09Q z-7NZXc5h_FzaMbR`J!}6nCp1{z1a<6Ez8hJo10~{74$Q*Sfao3*}H4Y=Hd1gnP{TB zYChRqV*|eU%9SgKi5t=v;*cl^NLT3s48O(~#go8c1%d;>OKFf7M#N=`8WhY(xAOqR z3yRdrUzrrNln49uM%LZyk82xE1xhG*)DCeGf-*jaTpN)Pt*2iyZ2iO6^i`qa6;o9E zy0!MDfyEzHCHSMChV1V;8?0CA=$Ar^79fnEdx!>0BJfazmftuWvJDo0WIiIB7?Oo- zAH;vw1Zo9jD4?0oYy`+~cDN`&Y{b)GYedG=00N$D?k6^y$XCbHOs~GJ+IqD1siH#5 znS_=Kc9@>5+N}Z#T3@>i>&C<6j7sm4cTk&w?-!Btfwce`3WZ!bw1sYew{2TbAZ!J3 zIUtvaH`u>N6DPa=yk+sZ?PR$iBNK9k;kPb+pa0OGijl=(3>pgmfNMCwwQElS*GNge zDn#RCXL6=lVOG!3KhWViPizY2gB zS7O+aiWJcDf0KJ*2db8H2I1t=Id)t<5&wGg06L%R2mz|<7vr)Q_~$vvfp?%((DeW! zlqHqM%H%aH9Fv}Q2b^xPE6FQlc;mMcKZFAal?CsYFFb6pK6f)J5f-`i37tHAfT2Kc zK$6N?7gP;D-jE!iU8MGzcsHZG9@FkRFvrRA=PZ2QcE0PJxcH(_%d_OklPBLa;CJ}u zXCP~ogSvbFdte#_6I_~j#6y50M^|OJX87)+DM%V0TjQzj48r>OkUdfQdO5cA1u(4t zC~sY-3VvSmce7p$XXcq9IcWwc6a^U;&eWLF(D#vY<0ekx_?s0Pq0zq=OE3SQKjUAq z{+#;Vj34Ekt8C0D-8L5L>ViJ0b4u`ZLN;r9bG&V|bw-kL8t(@&1wv(L0^$DTQOo`n zxX>RY`3%qG*@8kcBT7rSFOqHDF?(rH)G`uVZM*H#!*kXqgKwEsok#D(6>&EJ_)M-) zR5S6hWwAZZByO>X|MK%hi+Ewls~&l>!tG-eT z-iNv$`!`OTWpVy^7e=v^ILUJ}=?c1Rtuy}h>uKKsI7>U1xtA4lUBkU4o@x;ggpmhSo2p0nW#|!ajQ%X1ib~AS9TU^zkk&tk44R4KV;Qd4X&>~1}#qxdH~C7Y1NZxy~o8PazCmGK_SAJVJ@uMM3@YcrR99|V}eYqN~1!f@0RmuO#X8O;iv{T}w zQGESc)P;uDCayO%;iosu-5$RM?^1vBqW0X_tzI8#Mkw&v#`K&CGFD3+yHsN8auoSF z#ylL^l``i{1Z&S{e(X3tr&6*1$77QRZ_Q*ZuB&aI$XS(#IBpD^4RC z|2~#i$(O)s#&7{1d*R0a51Cir5oaL(Mk1MpTgy$h2RDT&;H*H1>QE$3Zv6WLLLaGx z7q;9H>=WQT`Hd>y+4LK*ctqVwdy`!}O=Bg2IxNIxQTwtn-?epvtTdPA)>^5RJ8(@o zL;txZMFkMEfx=0v_oq^B-*B?n#5%jP7zu7WZdLuf-WCq-aCQnX6vyRv+R~WLHg1QH z#U>pRPkpYsbWI`n+m>7cM{gymQLx0IXCrKC3KbXu&^X;pvil-J_oY& z{o8_;p~~#zLtK>?75b|F`_=!prdu3!vBvsD7#@2XA3U|10m7t7tCGdbKTSuh~qvKN3YX9Fc=oO8CtTL3Sc}~d7vvCa1dOs ztGKo<5p=lD=e|R-9XI~0_MTQ_`pN_crClPnQ8IS^$)_V{;U2L<(hg}uNt;Oy5D};| z{;b}OjdTGMk{zBB+)87gk2p1t0BQztK3UWy4kgUgv*P?^mN)`P+_|2;< zsa7GZ6CxEZ7=WcD;DvN!Q)z!Bo`0|ND~Xo6U7O9#Dk%#32?4AU#&EizG6I&o1BX`b zS~XkBxo~)muDN85rDSva{-2WaR3EwSnt8I%`w%nA2C1v?_1WBx?84MjyVzB(V1wy0 zTUP>gHw0LVh>8kU@HC7H@01^7?jG!^k`2(34A2Tsi9Tze-`}!NBG=BqORCaPU zxBXWPj_LUxWoK@U4edrMG?vn}f-#7$a=YBQhv?mu7i~QnkE;r=X0hXHxdy){nig-w zdYfwciIQef<$S&qC;V<2_W!%aBY6q$5h#ZP?)xfo#;1?3jdg8**r`u#y^7=X=Vb)P z71V&e&SlClbV)?5xN^su9x=gJ+pvj!X072^7krgVdUrvIWZ@Or;)J8z;nzuPT?lB+Y5oBQ%$Ws;rNid{t5Sd_9}s+gG% zHX0-3lp9kL|Ice#{=Si88a{$t=j!@ip0hZB?ud|y{c>xYQmtLmIh^UwN^zMSQP zbAN&KHEx_W^)%_To4sQ{qW|yetfOu7?DcMJYU^L_+V!FEai`D^-;|HuYtv7Nu{@<@ z0tp8iGtEj(&-66jDfa(SqU91tyVNYT`dM(b%*8*up=m?ssRVcHPK@%|m#dFssYNSF z4xMn|>r~ZVSN-QWH|X!H%tfv=UW*QkMXh}Zylfr(Di36;SS8X&t>ouuw^l~3F;Ixz ze$!fexnRQ1O$62q_3XC>=}XY@(I>i$6 zLxGyV?s~mgN2ijv0Q|b}cN4Oi%N^%4gv&j9)V?(m+m$kQNedO2X;iz?leL+UGYxjm z14s@pK5xyYSem*$`6W345xuGdkkc!ffb-Q8gbVa@F}{%EU+D^F$Mw!sg{ZsdV_PGlYG zx#|lxjk9F2-HSht^eC9Am9<&bC^ys#qtDC&>I^d*h4Z+8F_q%}<%WDTUd2hzRzLD) zW$eEiWqLZx-%Be7ZnJV^L&lzsG&LXMS?92X19xM?)hb9*#nzQs95csVDO z>Em8m=1*vP1nOdsO`GX?;h*79DWOuBLrMi2&T6cA%q6nDsdDVbYcbXfC5v2Ip( zao*msaS)!wjNwHIYIv8}^b9>oLQ&wXN&JvI=v}N}%B&&yn^^VLt9_cUPnQM@E?9M> z{c0<0cf6T8Eb*08Eg_4WI1uRpk{T!UsRh5B1<}rxTn~NX0WHdcH?$~RSt{-#zp#nB zYbkY|kJ94_u3fr6eY1BjdR@!AgkubI&MK`qG~1-PuxLd;qSoHPB>fy+Pk z{6`8yF5LK)jI%La7-Ga*{Z0t^A{7-inva!>-RWj;w|;wFknnDib5@BmxmsW*gT5UT zX_&fST%h_5d2J^50~IH05_E_5@2w}_aC_Ke7Zg@*D-T&706f?krocGes7{Jq;s3Xq z207zW18|r*?b7jVB<4*S_j$yj!&tlU=?I$DF$cwer@( zzwG^$wBJ0ITGWppo;-Nj^bH&J8LC`WsB-O1 z!L|}wXL@OGJ_NaNnSCkgA!OY}NXj76>v{%`=_MdBh2K2{UcXP>4JY`6NrZ{iUgUq& zprmg?3+47z?h>cS4P?*HhWc-!c{shY=n<3 z1Y6QtB7KCN>@vU~5NNOE=wnmIDZcIQ0U#52W@e@uskIV; zLXMAi!O;#y7L}kQ7=pJRzPP8b?K}Tm#@Ba-$#mc&N!=r%t-zd)hd>QLtYiqt5WgS+ zX@IIvZ6j%GAa8K$2Q;w_mh(utRcB?1WKrdcKD9EV%io>G48=;EZ+bSpEOZ=yXjDsi z<7fOHt8&+^PTr4`E00YVJhAp6=4W}(yXp8=P6 zHQ-?L+Kq9Z$xlVXGezKeoyB7&*`vWu4GuK|5rSPTD%LVWxxAfyYQ9hQyurSop^{0v zRJ*Z#gF*R?Vhz~a$H(_mOKZc-1yK=n5%E0xNd!R@l>WaCPPjLM7O6ZN*7$SRum4P8 z`0J0nB9M}OZ#V)GMO?df4PrJOC;k9k#!J_JPIn{?Jr-h-z;W!)O$9i_+`AiCWqh4n zKc$#xWWQ(0CDZuYo(D*c!$(#ofyDfSnVSbLuTndHyJHl0jF6EM47=1FsepyRW;^q> zw~{eI`l8=tO8J9M0q#nI3q4hSez14x61t$(y3UTh$TwC-zX-bR?jZ)&|Ee77c>GCl zw2L9-^Bx#tmGfzGRs^t{jq3ZCI|}|_F4V@Y-4jqijBGiG8o=Q=?G!ad6&K3giN8G1>VepFM}fr)o(V z#YoRz-z5i=#yVylOf%dD?PkkLnBV8lb2P;ET`(T$dG~Sn===3^FYbW@N2h*TMNjLf zHkKt$g=!X1n6cWZu-5SKec@8sw{+Jv3C&5~#n6P>$afkh)}Cjx)!vU$TbFg#*okWVON?9fL|+rAKa<7`dj}x+fL(y%xvzv zzD!4lUt7MUw(lNTb431WzHo(q4R*mnN=2_XG|JjeKDSJEn)be!1g(L|=YN6(>e;-J z3N30pmbjj?a6BxSNd-N0r1r6vBzi6;F%)WWRfihkqO}*Jt4hAU5{{n>LJ%ciLT=h# zA+yJv1iNz-A<=qE+0WO6y^-sXM-lXeH$2Jvf-e74aQJTT>^%Q0#Ddcxrf~EveJZ#V zRIM{COk`2*DJFtVx5GejWd+hKEQ|)^uYwHqeJ~adcf;*_xyz2r9yG8zswU^5Rjx5s z>}%yr^~2}=N1IGuH7IF^7i|WOv9ryin-sZxId@xT{HM)b`MEz$R+(V)gk@pm=YB0J z>BWjZj!|s(fPavl}T)E4Kw>DIioO!4l^6My}a@fM(g_AJUVsb}A#c1k*B7pYc zkh??wKM87Phlo|ltw0v z%8gYeRflAGRAeevC@cL;@@`or;ioJ8*FbU@4RT`_GaVgDME=wn1R|5J#qLrUOzfsx`>EqQS)FP;YC~#5P4Fb zz#2YNzDdN@;4rArN2#Z@w$r_K&uMkAr{A&M2PR=g%EHol51~HC?>4}MXE%@<0uCLg zp>7Z|A@lH>P7l{?y`M@9C=(V6{WscpQ$g1qB=t{0aq)#!7I<0~zi$+sK_J8G2DYm7 z$OpD=kYoc12j-amWhPKjA``FhX=Zqk1%t%Y0MV0mw7W6O2s|Oyzi3b-+>C^R?OP-s z=CrwPn(zwAR>^yc;f#b7Wft@c@Yf*e>XBYhdN6_FjoR%D3c^KD?1;Z(gaCLL8g^?$ zgRn6DRXF5HUV@}Ux*Wbr>8?_0( z+2sDekR`y3{1(#y|UEIP9U4+Y0KcQ}C5fLtX3G4SJ2{8c*3E7>K zHEZyc*U?E>Fh9co+(;XB{-PM6MdR!b+|Fk&gN4*D%&l z(&Ibs$p$R?Y_LvGxoZnA!PgQNHtE){EVqyygXS?WFQozwC$0Un)@JFr*dp`e8>cLG z^m58>innIQ2l#o(YX;qKuPr1b=h>zkC---LHm%evbI7;#6FiR@s19;0oPDR>n2^p@ zpJS%ciRYoFarZ9yg@coYS39qSg-OGH?fT2I$ZUFiOtX>^4v_f0Gf6lnw*b4{v!Ihb zgB+-|t)8-6HwNoO-;P{nQc^B>j~qY<4!Ye`IQieeQY!#^h3x&b{qJBSn*whL2<(%R zk~lyO30|e2$tGxRP)^b?Fr*icgB8!{UVx{ZTyRgrbI_QNKz)BjjmM<+-PR$5iq=5( zmCM&ABM1*L0NaS(|5esLV3YLxYNpnIc17C1r|?2T51C$xuS( zDMJX?%rP}dkvUF=g9e#0ghM*f`)v33`{(`Z{qObhxn1Y%v-dvxJFI6tYprJ?Lj&sX zGWCsxi;dC;6zb)?JJ56kna~aVV#u9Cx$pvGSlGP0Rfzx^DR+EvZDg)4 zD%Duk-pJ_IMe{T%&*?$ou&K7kf#QkYC|NYCCc8xqZzYkoQ0^TcbiYy7ZC{Ar-ig;Y zz}DDj#>wlIW5uVz?2SPJOsbS9l|F-ubYirW7CC@syHMUzg2y2ocIEw(2Qbq~6F&x_ z?t?@b%XU=ZXpbMSB+7l~kQC8>?HVd3YY8#7xTEe!c?y{^&{a-{H1LV=_t{254j=wG z0*Aa4et1>rhCIELTga$Lg`tEjD}PIWEq0S}lpsnp0Hf+fea?hSLRiUBG`I_284~!U zSNp3ftYo#3rD5CiRmHytDQ|NS#fgnNRG|+bCFAIdgc+?vI`N0+X;6(Jo_b5YN!A&4 z7?w^L6g~|MPa8y`ihRuB6Vj2q$n~%o#n~aPtb0tT&*Zz;-E8%J8L5Nedup5m$OCsM zSR5rd7I49$DTxj1_{|~g*@~N@BX605DF;d3Jy0~rJGiBiOwUGp^eGeBuh3P?2Fl}< zvtSWTUB`$SfzNQ#ioMKkAL)u z+9#r5vqKzh*)J!$H92-KJTL%SD}#nMQ$ zV})M+_$>WfcgOx~=(BScn~Od=gSgi7cz7z=p!7!J#xKvB#99<}#IEu{M$;TRfe^5T zce^iM)4}m?i;^ZNuOjpFhIA&kC;6g^?M8`~cbr;o@|feoLd(+ihdZczrw)uFbx0-5 z4=AWmsf;w}^ue9SZ1Li~Gvq>b0eY=sd`cuKMbS@?=kiEt?*z++4f1#Slf z?6P>bx_ovW+Xg^ZLzG2n^`fn|)h6Q;lw zn241_;?;gnG1I~WRMl~q0!=L~sRo?qo%@wgTpT(>=kkSMWFH8b?b!Wi zrmH1a0oQr$lEb)UMX9P{=tT3rq_6rCl`E%nY-@DU_%cMpT{v3J^$YiQ6wwDMHku$FSMacp39IreE>0$#v570)^^kd+F4vzen$_ zd_^lkUTQ&>l9m=_=nN;rh)(?N8laQT?2m^yl4jzAHHi_c8r$7%`*eyBn_1A9V9uYsNnBSRu z&IG$&lgn=;b8Fk3+^yhx3UV*aoh{H%E;?yDSC3W@4%r?MZped45f1a1GMjYJkXWFo zmRaTXoqMumAxW$5RIO~~VPi`Jet7HyMYWE1%cMcw5gS`RwGq*X!HK5<=C!*zRuwdFazUf)FSFvva7Hq7^p##fLi=9~R8C1uctgX1-eZ@~ z(db^mz;;*y6oOTH8dX+r7AQ6Vvac^bFr~F#vnp(G>-x^+jGRq_?g2+CwlbOA)4rqa zd>vX7dDzM_u*Y%?p-ysDQfKdyO-R1!xUX`vyj`W(YFrPA@q@#pJyzk7I{0yTHHvG;H7Mw%VjXP$Ny(6WT3|~|jrjr-e=L#oiMI5pN59zH)aNUlTPu=; z%F_&m=Wc&WXJV#}At2F)`ovE70!b|%n2{w;1C~=&vpO|Yx8-X|ZyE`4}}3Re+~%L-!;@F`>6_-)0o5iqI;QGf9JgQ2)qXv!2GxUM?vi@#UJ_ zTu&-3Lu|NEVvSSsh>N?V$7Ut0hUrB)s#{_8?WCvZYVh8$IlFNlPv+_O&-HfLCNy<) zx=@%m2ahM)XK{wNUV(d42)BIu=Ze{OBuXwRG%E{}&$$a7azw7N!6KgEo3_t{U`|KK zJ*2VgLjyhB)wf%gTJj1;;t8at*cygGNZ(OWJ+yoyag3UuG-2J>lERQ*OCr^o+^vdC zjENBle7QI9<;MasWn~NFoX8D)H}}CecISk`4q=1s0pJo_Vv>>Cngeh7Isa~Xm*ZHr z&CaJ99A94_C3_4aSuqRvvEj`dy`x8OVK076STDyBUnCsjH0NvL9~0;hLOR{mVbasAQ!V-9){o5wo$C=e8eMR(^Qm2jv>#yYjJisWCH2PZ{1fFp(!OSwW#iE zS2RB2`dtGWPMc9`-~EX?kc3XjkGa{|GoUc=<;Pl<6s~6>maDyAN{gwDGbVi|F;}q$~06-m)bb?cwWQzs^R|XYAn%w+fuFzb&#;_(s8%7y$12@)p4^8B}2Z zs`wc*>EAlQ?qNdAabTA#S_-8wK_NVf#&8H@PRg|q&=3lYHA<>wk%C5Nzzs#h6VLz# z41?=Faean@A&4={MIVNxpIpaA*52QFK~YlD;O@!hxOwR;{m^Mvw!&@Q)qNb4e9P*w zg5UT?n!38OlxT2(M~@xT-kyDF7%Bdek=Pn0#06q20c^>^dnd7_=qEw(S_efV?}6p! zPLzSW|fp}YqId6^9*!)l}3p}hh79mp9c0SJg;nh`P!Gr zr>;hBvC4QTgiB)^mV<|zLQrU9he>C-U{QYU2nY-D>V5*%cJb711tyn{grL0Zv6jy@ zHVe>N&jAg>G4vu{+;AnU2szy|b3es4dL-;<~ zC@V9oy-_XxseXpatpUp;BAgU$6jAYTiXa0NE$Sl^vIF#O0QZQQQcFg4lh+V zIOwh+`Q`sJ(bFg?BGU9Zy0}=%KukB!m+7cSqOnTWe~>Gq4}`UJXwX{fylfYTPGcK@cU+3^nF}Psl!7kor25$L?p` zHZHCl?E2mL!yZ!tgiP@4X<}UeGdDSFmS~%jZM_Hm*ZrEbA^H`gj3NsnX}mjm;S5ff z^B0)q#)4e}c&}0!0IBgF;LbrR9mNW}@|FJUlZrmv{9z?Z$GWv^ zS3Kh;_QZ4WO7CZV>q$-A4umI77rr)gc~!}+Z2FS%`j>;Yr!ie~rsN@YS(bnzxT`tCmph@WUqY;}C!jRMBUf2%P zUcEZ*HrZ#2c6pXz&^v5HEm{_~OEB378>8lc&>?i%r>xDM7`TK7dK3PG=*WLT>E(I#P8aHcRMG-)CGivwXph);XuN> zrW&)8_{LKKxAzmfXDGLPDkfDHRw7uJ2UgaOv;-AjGXiQORuB;$o{AfQ2{$dHxu2_P zQJ|qvFxRrWhd)WxuRnU1h=70wB=*i|Y6iilM%n`Bkmu63_>rEHoC0oBKzCGuPEt9C z`Hr}_6qY&-~LwLGf8E6t%2+ z@*wFzTxiU^r!;6&V|f6gI zNF>=W*rH5;5rSs`GUNp0x9r}XkNfAiVSBLORBxFs z5db(;r<>PUMuX)Ow89YEIj=iU~-gfX76Nz0QkK2He@OgQ;-)} z;fyv92UGfO_RW`UCf&ad9lF={G-5E&4Ca-__q{M_ST-^ZFav+a943+0)9NHWfnklr zoD2*-Z>GLjZCG8^^kEa}4HsA%RFf73&p`Sp6-A*sTI^ugQ(=lU!moBc&4MI-+(Q&s zY%u<0Bj$1E>b<&sn5WAgfkM*KM&WGS+`>7XR~6Qhf*yh$$pR<}&&z+A(7~5I(+JJH zYl#KS|KLzF^xomtEA%JyGXMsdW&B~O&Jr= zT1asGN(y?M%6$>_QVm>R0^wp`+eZ4*D}7C8o@tNkz_s-4TeiS67KBbYy2P308t-?7 zW;6a}Ub9ATkwhXTzcOE~7-+1pESr)}_oG&t&%(*^*+7$t(>`+KNa0!G6Lw{ie?uIY zc=RMqtq=dYZU1PV4BtvgIMQ3;6H>(7C+%vmaxyt9hD7nUJ+3=7nZH!!TrM$-jET8o zzj^)o?HsL)@mKAU9 z=*C{mOid-1{^ER%5Enx=yv5)4kqai&YIWJH(Ek0$@%VuV=_2O9H z1peZTFP~qzt3}VaQ%xn2ahk*bjCr%1Bx-FEARWr^@ zlT#`bZ@y9s%U< zO7Q3xz_R(qz&T+hgm~m#0v;02loa6jLjsv>78Nda{OACtN5p&Sa7Jyh%Yp+Mp3}*rLg=wN zYz@j>iT7b_Y{T0%K~IjxRV!f^2Wunga4#t649K_^mV*KUZ;Nw5)Uj;Z)J&zCrEBg; zkaIp7ezC+1z(*d|Ri^QC*ltzFtISS)t@y8!ycm_YbImQ1BK>YSX&pZ^WNAW!7*tAydYGS1P>o>{a{nneX-!|%on!`6|tLta#CiqZ@q147y{18 zaKV#UBJ(adDo?f$%T`VrTt9M2WgOxV&_FEPTZ8b_rQqXqEQ2cXmRb*WK8xm>530Nivz*R zFDlwx+~ii0gl6I*(Ds?SvxjuM#n{mD@1k4I4t1g|JAxS!7ZFCvuSaXZn1*Hd(-_WY z1LqL*m_tB)6j)~F!veU4F^I-D%@ly>hR(*@hv}|RQcVZ=?cb7|7BJaoczDsYqCD`D z-#H2`%sRvoH}Jy_Sqr?>SBS-ob!3LM)Gxu4wR|*Cy>)UNbQ@C&dldw)VzL!cl0y3Wnd`4zGAmY z?G4|Rahe`QD1%_LuAH;AC1|dT5e)ixCOjUar)S$fe+Na49y=C^e^dsChJIybnz_l> z;Z|CBH1B+@)Rk0B8ynN-eXbqamO{}0W4TtfDlLMKuxUQ_`TC9n^Jdo&qP4albySk} zV`m3L(++xV?)jWaQ+7eXb_+! zBcWM~5y;AABlQOpKZT__T@juU?yCd-z$JT#p+q3tjg0Yvtiv=ocm}KZrU@n|o=+D#P6Rs;-Y$3>g3z$9 z#4bdHLLi65)r(xJ66en+Omn+@{1S>?SIcJTodb;&NM4w9VCf@1#^qFXLBSES5!t3i z8T!j05Z}WoU&T;Igy=4DSOj9`oh5cAO$mxr&k1PMQ_+qg9o%sA>nK(90bWDQ$%|Kr zc+xW-aD6avt!(9dSzsJ^tJVB|eLtxkD+O!DcHwqU`w}!CMzDuV8yzML1uThDXh>KX z6@IJ}XZ;Lh#l|B|ECudU$>5Zwo%;Kv+Tsqtq0WY00uf%VKkf+1>?c(B9%GTKT*0NM z@87?l47FMzWo6ojul?g4wCgR(ndRkjkD=}eE0f`qhk3@{{3nIRamVDb4&1 z*^c;$0^$h}7Mb9w1Xdm^q89`ctDlE{Nbnqo+8QR{r=2G3E~H*V956x|T{FK3WnYL* zYqZlpMnOEF%3n=?6Rj@mmUARR$jH+f2W8NPn26Fm@?Pu^OXXB>ebVxKBW{=kSh^eM zLRjA&(V|mm?u!5(!7%5aN!N5nfh~RzWgvcLPLncM{^!3y^*^txjevz-In&C!{{gfA zLR_FvVw;DzwQ|gVPqm)dU EOSDependentVars: """Get an agglomerated array of the dependent variables.""" return EOSDependentVars( @@ -137,6 +143,40 @@ def dependent_vars(self, cv: ConservedVars) -> EOSDependentVars: ) +class MixtureEOS(GasEOS): + r"""Abstract interface to gas mixture equation of state class. + + This EOS base class extends the GasEOS base class to include the + necessary interface for dealing with gas mixtures. + + .. automethod:: get_density + .. automethod:: get_species_molecular_weights + .. automethod:: get_production_rates + .. automethod:: species_enthalpies + .. automethod:: get_species_source_terms + """ + + def get_density(self, pressure, temperature, species_mass_fractions): + """Get the density from pressure, temperature, and species fractions (Y).""" + raise NotImplementedError() + + def get_species_molecular_weights(self): + """Get the species molecular weights.""" + raise NotImplementedError() + + def species_enthalpies(self, cv: ConservedVars): + """Get the species specific enthalpies.""" + raise NotImplementedError() + + def get_production_rates(self, cv: ConservedVars): + """Get the production rate for each species.""" + raise NotImplementedError() + + def get_species_source_terms(self, cv: ConservedVars): + r"""Get the species mass source terms to be used on the RHS for chemistry.""" + raise NotImplementedError() + + class IdealSingleGas(GasEOS): r"""Ideal gas law single-component gas ($p = \rho{R}{T}$). @@ -379,7 +419,7 @@ def get_internal_energy(self, temperature, mass, species_mass_fractions=None): return self._gas_const * mass * temperature / (self._gamma - 1) -class PyrometheusMixture(GasEOS): +class PyrometheusMixture(MixtureEOS): r"""Ideal gas mixture ($p = \rho{R}_\mathtt{mix}{T}$). This is the :mod:`pyrometheus`-based EOS. Please refer to the :any:`documentation @@ -410,6 +450,7 @@ class PyrometheusMixture(GasEOS): .. automethod:: get_density .. automethod:: get_species_molecular_weights .. automethod:: get_production_rates + .. automethod:: species_enthalpies .. automethod:: get_species_source_terms """ @@ -603,6 +644,10 @@ def get_species_molecular_weights(self): """Get the species molecular weights.""" return self._pyrometheus_mech.wts + def species_enthalpies(self, cv: ConservedVars): + """Get the species specific enthalpies.""" + return self._pyrometheus_mech.get_species_enthalpies_rt(self.temperature(cv)) + def get_production_rates(self, cv: ConservedVars): r"""Get the production rate for each species. diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 71e993cb4..9399df7db 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -243,6 +243,11 @@ def velocity(self): """Return the fluid velocity = momentum / mass.""" return self.momentum / self.mass + @property + def nspecies(self): + """Return the number of mixture species.""" + return len(self.species_mass) + @property def species_mass_fractions(self): """Return the species mass fractions y = species_mass / mass.""" diff --git a/mirgecom/flux.py b/mirgecom/flux.py index fa760154e..0b7f65ab9 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -3,10 +3,9 @@ Numerical Flux Routines ^^^^^^^^^^^^^^^^^^^^^^^ -.. autofunction:: lfr_flux -.. autofunction:: central_scalar_flux -.. autofunction:: central_vector_flux - +.. autofunction:: gradient_flux_central +.. autofunction:: divergence_flux_central +.. autofunction:: divergence_flux_lfr """ __copyright__ = """ @@ -40,24 +39,28 @@ ) -def central_scalar_flux(trace_pair, normal): - r"""Compute a central scalar flux. +def gradient_flux_central(u_tpair, normal): + r"""Compute a central scalar flux for the gradient operator. - The central scalar flux, $h$, is calculated as: + The central scalar flux, $\mathbf{h}$, of a scalar quantity $u$ is calculated as: .. math:: - h(\mathbf{u}^-, \mathbf{u}^+; \mathbf{n}) = \frac{1}{2} - \left(\mathbf{u}^{+}+\mathbf{u}^{-}\right)\hat{n} + \mathbf{h}({u}^-, {u}^+; \mathbf{n}) = \frac{1}{2} + \left({u}^{+}+{u}^{-}\right)\mathbf{\hat{n}} + + where ${u}^-, {u}^+$, are the scalar function values on the interior + and exterior of the face on which the central flux is to be calculated, and + $\mathbf{\hat{n}}$ is the *normal* vector. - where $\mathbf{u}^-, \mathbf{u}^+$, are the vector of independent scalar - components and scalar solution components on the interior and exterior of the - face on which the central flux is to be calculated, and $\hat{n}$ is the normal - vector. + *u_tpair* is the :class:`~grudge.trace_pair.TracePair` representing the scalar + quantities ${u}^-, {u}^+$. *u_tpair* may also represent a vector-quantity + :class:`~grudge.trace_pair.TracePair`, and in this case the central scalar flux + is computed on each component of the vector quantity as an independent scalar. Parameters ---------- - trace_pair: `grudge.trace_pair.TracePair` + u_tpair: `grudge.trace_pair.TracePair` Trace pair for the face upon which flux calculation is to be performed normal: numpy.ndarray object array of :class:`meshmode.dof_array.DOFArray` with outward-pointing @@ -69,28 +72,23 @@ def central_scalar_flux(trace_pair, normal): object array of `meshmode.dof_array.DOFArray` with the central scalar flux for each scalar component. """ - tp_avg = trace_pair.avg + tp_avg = u_tpair.avg + tp_join = tp_avg if isinstance(tp_avg, DOFArray): return tp_avg*normal elif isinstance(tp_avg, ConservedVars): tp_join = tp_avg.join() - elif isinstance(tp_avg, np.ndarray): - tp_join = tp_avg - - ncomp = len(tp_join) - if ncomp > 1: - result = np.empty((ncomp, len(normal)), dtype=object) - for i in range(ncomp): - result[i] = tp_join[i] * normal - else: - result = tp_join*normal + + result = np.outer(tp_join, normal) + if isinstance(tp_avg, ConservedVars): return make_conserved(tp_avg.dim, q=result) - return result + else: + return result -def central_vector_flux(trace_pair, normal): - r"""Compute a central vector flux. +def divergence_flux_central(trace_pair, normal): + r"""Compute a central flux for the divergence operator. The central vector flux, $h$, is calculated as: @@ -120,7 +118,7 @@ def central_vector_flux(trace_pair, normal): return trace_pair.avg@normal -def lfr_flux(cv_tpair, f_tpair, normal, lam): +def divergence_flux_lfr(cv_tpair, f_tpair, normal, lam): r"""Compute Lax-Friedrichs/Rusanov flux after [Hesthaven_2008]_, Section 6.6. The Lax-Friedrichs/Rusanov flux is calculated as: diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 8ad1d89d2..b41f6e7ab 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -13,6 +13,7 @@ .. automethod: make_pulse .. autoclass:: MixtureInitializer .. autoclass:: PlanarDiscontinuity +.. autoclass:: PlanarPoiseuille """ __copyright__ = """ @@ -965,7 +966,6 @@ def __call__(self, x_vec, eos, **kwargs): mom = mass * velocity internal_energy = eos.get_internal_energy(temperature=temperature, species_mass_fractions=y) - kinetic_energy = 0.5 * np.dot(velocity, velocity) energy = mass * (internal_energy + kinetic_energy) @@ -1054,8 +1054,7 @@ def __init__( self._xdir = self._dim - 1 def __call__(self, x_vec, eos, *, time=0.0): - """ - Create the mixture state at locations *x_vec*. + """Create the mixture state at locations *x_vec*. Parameters ---------- @@ -1106,3 +1105,116 @@ def __call__(self, x_vec, eos, *, time=0.0): return make_conserved(dim=self._dim, mass=mass, energy=energy, momentum=mom, species_mass=specmass) + + +class PlanarPoiseuille: + r"""Initializer for the planar Poiseuille case. + + The planar Poiseuille case is defined as a viscous flow between two + stationary parallel sides with a uniform pressure drop prescribed + as *p_hi* at the inlet and *p_low* at the outlet. See the figure below: + + .. figure:: ../figures/poiseuille.png + :scale: 50 % + :alt: Poiseuille domain illustration + + Illustration of the Poiseuille case setup + + The exact Poiseuille solution is defined by the following: + $$ + P(x) &= P_{\text{hi}} + P'x\\ + v_x &= \frac{-P'}{2\mu}y(h-y), v_y = 0\\ + \rho &= \rho_0\\ + \rho{E} &= \frac{P(x)}{(\gamma-1)} + \frac{\rho}{2}(\mathbf{v}\cdot\mathbf{v}) + $$ + + Here, $P'$ is the constant slope of the linear pressure gradient from the inlet + to the outlet and is calculated as: + $$ + P' = \frac{(P_{\text{low}}-P_{\text{hi}})}{\text{length}} + $$ + $v_x$, and $v_y$ are respectively the x and y components of the velocity, + $\mathbf{v}$, and $\rho_0$ is the supplied constant density of the fluid. + """ + + def __init__(self, p_hi=100100., p_low=100000., mu=1.0, height=.02, length=.1, + density=1.0): + """Initialize the Poiseuille solution initializer. + + Parameters + ---------- + p_hi: float + Pressure at the inlet (default=100100) + p_low: float + Pressure at the outlet (default=100000) + mu: float + Fluid viscosity, (default = 1.0) + height: float + Height of the domain, (default = .02) + length: float + Length of the domain, (default = .1) + density: float + Constant density of the fluid, (default=1.0) + """ + self.length = length + self.height = height + self.dpdx = (p_low - p_hi)/length + self.rho = density + self.mu = mu + self.p_hi = p_hi + + def __call__(self, x_vec, eos, cv=None, **kwargs): + r"""Create the Poiseuille solution. + + Parameters + ---------- + x_vec: numpy.ndarray + Array of :class:`~meshmode.dof_array.DOFArray` representing the 2D + coordinates of the points at which the solution is desired + eos: :class:`~mirgecom.eos.GasEOS` + A gas equation of state + cv: :class:`~mirgecom.fluid.ConservedVars` + Optional fluid state to supply fluid density and velocity if needed. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + The Poiseuille solution state + """ + x = x_vec[0] + y = x_vec[1] + p_x = self.p_hi + self.dpdx*x + + if cv is not None: + mass = cv.mass + velocity = cv.velocity + else: + mass = self.rho*x/x + u_x = -self.dpdx*y*(self.height - y)/(2*self.mu) + velocity = make_obj_array([u_x, 0*x]) + + ke = .5*np.dot(velocity, velocity)*mass + rho_e = p_x/(eos.gamma(cv)-1) + ke + return make_conserved(2, mass=mass, energy=rho_e, + momentum=mass*velocity) + + def exact_grad(self, x_vec, eos, cv_exact): + """Return the exact gradient of the Poiseuille state.""" + y = x_vec[1] + x = x_vec[0] + ones = x / x + mass = cv_exact.mass + velocity = cv_exact.velocity + dvxdy = -self.dpdx*(self.height-2*y)/(2*self.mu) + dvdy = make_obj_array([dvxdy, 0*x]) + dedx = self.dpdx/(eos.gamma(cv_exact)-1)*ones + dedy = mass*np.dot(velocity, dvdy) + dmass = make_obj_array([0*x, 0*x]) + denergy = make_obj_array([dedx, dedy]) + dvx = make_obj_array([0*x, dvxdy]) + dvy = make_obj_array([0*x, 0*x]) + dv = np.stack((dvx, dvy)) + dmom = mass*dv + species_mass = velocity*cv_exact.species_mass.reshape(-1, 1) + return make_conserved(2, mass=dmass, energy=denergy, + momentum=dmom, species_mass=species_mass) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 2034dcfef..79070e355 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -41,7 +41,7 @@ from meshmode.dof_array import thaw from mirgecom.fluid import compute_wavespeed from grudge.trace_pair import TracePair -from mirgecom.flux import lfr_flux +from mirgecom.flux import divergence_flux_lfr from mirgecom.fluid import make_conserved @@ -103,7 +103,7 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): normal = thaw(actx, discr.normal(cv_tpair.dd)) # todo: user-supplied flux routine - flux_weak = lfr_flux(cv_tpair, flux_tpair, normal=normal, lam=lam) + flux_weak = divergence_flux_lfr(cv_tpair, flux_tpair, normal=normal, lam=lam) if local is False: return discr.project(cv_tpair.dd, "all_faces", flux_weak) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index db02c56d5..33dde7406 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -70,7 +70,7 @@ viscous_facial_flux ) from mirgecom.flux import ( - central_scalar_flux + gradient_flux_central ) from mirgecom.fluid import make_conserved from mirgecom.operators import ( @@ -127,7 +127,7 @@ def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, def scalar_flux_interior(int_tpair): normal = thaw(actx, discr.normal(int_tpair.dd)) # Hard-coding central per [Bassi_1997]_ eqn 13 - flux_weak = central_scalar_flux(int_tpair, normal) + flux_weak = gradient_flux_central(int_tpair, normal) return discr.project(int_tpair.dd, "all_faces", flux_weak) def get_q_flux_bnd(btag): diff --git a/mirgecom/operators.py b/mirgecom/operators.py index 407c205eb..72d9515c1 100644 --- a/mirgecom/operators.py +++ b/mirgecom/operators.py @@ -58,9 +58,9 @@ def div_operator(discr, u, flux): ---------- discr: grudge.eager.EagerDGDiscretization the discretization to use - u: np.ndarray + u: numpy.ndarray the vector-valued function for which divergence is to be calculated - flux: np.ndarray + flux: numpy.ndarray the boundary fluxes across the faces of the element Returns ------- diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c9041dc77..5a792ae76 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -103,9 +103,8 @@ def get_sim_timestep(discr, state, t, dt, cfl, eos, cfl: float The current CFL number eos: :class:`~mirgecom.eos.GasEOS` - Gas equation-of-state supporting speed_of_sound, and, optionally for viscous - fluids, a non-empty :class:`~mirgecom.transport.TransportModel` for viscous - transport properties. + Gas equation-of-state optionally with a non-empty + :class:`~mirgecom.transport.TransportModel` for viscous transport properties. constant_cfl: bool True if running constant CFL mode diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 7906608ef..5112f826e 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -5,7 +5,7 @@ """ __copyright__ = """ -Copyright (C) 2021 University of Illinois Board of Trustees +Copyright (C) 2020-21 University of Illinois Board of Trustees """ __license__ = """ diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index e774a5d3c..04f6233bc 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -43,7 +43,6 @@ import numpy as np from pytools import memoize_in -from pytools.obj_array import make_obj_array from mirgecom.fluid import ( velocity_gradient, species_mass_fraction_gradient, @@ -51,6 +50,7 @@ ) from meshmode.dof_array import thaw, DOFArray import arraycontext +from mirgecom.eos import MixtureEOS def viscous_stress_tensor(discr, eos, cv, grad_cv): @@ -66,6 +66,8 @@ def viscous_stress_tensor(discr, eos, cv, grad_cv): Parameters ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + The discretization to use eos: :class:`~mirgecom.eos.GasEOS` A gas equation of state with a non-empty :class:`~mirgecom.transport.TransportModel`. @@ -94,7 +96,7 @@ def viscous_stress_tensor(discr, eos, cv, grad_cv): def diffusive_flux(discr, eos, cv, grad_cv): r"""Compute the species diffusive flux vector, ($\mathbf{J}_{\alpha}$). - The species diffussive flux is defined by: + The species diffusive flux is defined by: .. math:: @@ -106,6 +108,8 @@ def diffusive_flux(discr, eos, cv, grad_cv): Parameters ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + The discretization to use eos: :class:`~mirgecom.eos.GasEOS` A gas equation of state with a non-empty :class:`~mirgecom.transport.TransportModel` @@ -119,19 +123,11 @@ def diffusive_flux(discr, eos, cv, grad_cv): numpy.ndarray The species diffusive flux vector, $\mathbf{J}_{\alpha}$ """ - nspecies = len(cv.species_mass) transport = eos.transport_model() grad_y = species_mass_fraction_gradient(discr, cv, grad_cv) d = transport.species_diffusivity(eos, cv) - - # TODO: Better way? - obj_ary = -make_obj_array([cv.mass*d[i]*grad_y[i] for i in range(nspecies)]) - diffusive_flux = np.empty(shape=(nspecies, discr.dim), dtype=object) - for idx, v in enumerate(obj_ary): - diffusive_flux[idx] = v - - return diffusive_flux + return -cv.mass*d.reshape(-1, 1)*grad_y def conductive_heat_flux(discr, eos, cv, grad_t): @@ -141,12 +137,14 @@ def conductive_heat_flux(discr, eos, cv, grad_t): .. math:: - \mathbf{q}_{c} = \kappa\nabla{T}, + \mathbf{q}_{c} = -\kappa\nabla{T}, with thermal conductivity $\kappa$, and gas temperature $T$. Parameters ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + The discretization to use eos: :class:`~mirgecom.eos.GasEOS` A gas equation of state with a non-empty :class:`~mirgecom.transport.TransportModel` @@ -161,7 +159,7 @@ def conductive_heat_flux(discr, eos, cv, grad_t): The conductive heat flux vector """ transport = eos.transport_model() - return transport.thermal_conductivity(eos, cv)*grad_t + return -transport.thermal_conductivity(eos, cv)*grad_t def diffusive_heat_flux(discr, eos, cv, j): @@ -185,6 +183,8 @@ def diffusive_heat_flux(discr, eos, cv, j): Parameters ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + The discretization to use eos: mirgecom.eos.GasEOS A gas equation of state with a non-empty :class:`~mirgecom.transport.TransportModel` @@ -196,12 +196,12 @@ def diffusive_heat_flux(discr, eos, cv, j): Returns ------- numpy.ndarray - The total diffusive heath flux vector + The total diffusive heat flux vector """ - numspecies = len(cv.species_mass) - transport = eos.transport_model() - d = transport.species_diffusivity(eos, cv) - return sum(d[i]*j[i] for i in range(numspecies)) + if isinstance(eos, MixtureEOS): + h_alpha = eos.species_enthalpies(cv) + return sum(h_alpha.reshape(-1, 1) * j) + return 0 # TODO: We could easily make this more general (dv, grad_dv) @@ -215,11 +215,11 @@ def viscous_flux(discr, eos, cv, grad_cv, grad_t): .. math:: \mathbf{F}_V = [0,\tau\cdot\mathbf{v} - \mathbf{q}, - \tau_{:i},-\mathbf{J}_\alpha], + \tau,-\mathbf{J}_\alpha], with fluid velocity ($\mathbf{v}$), viscous stress tensor - ($\mathbf{\tau}$), and diffusive flux for each species - ($\mathbf{J}_\alpha$). + ($\mathbf{\tau}$), heat flux (\mathbf{q}), and diffusive flux + for each species ($\mathbf{J}_\alpha$). .. note:: @@ -230,9 +230,10 @@ def viscous_flux(discr, eos, cv, grad_cv, grad_t): Parameters ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + The discretization to use eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state with a non-empty - :class:`~mirgecom.transport.TransportModel` + A gas equation of state cv: :class:`~mirgecom.fluid.ConservedVars` Fluid state grad_cv: :class:`~mirgecom.fluid.ConservedVars` @@ -242,23 +243,26 @@ def viscous_flux(discr, eos, cv, grad_cv, grad_t): Returns ------- - :class:`~mirgecom.fluid.ConservedVars` - The viscous transport flux vector + :class:`~mirgecom.fluid.ConservedVars` or float + The viscous transport flux vector if viscous transport properties + are provided, scalar zero otherwise. """ + transport = eos.transport_model() + if transport is None: + return 0 + dim = cv.dim + viscous_mass_flux = 0 * cv.momentum j = diffusive_flux(discr, eos, cv, grad_cv) - heat_flux = conductive_heat_flux(discr, eos, cv, grad_t) - # heat_flux = (conductive_heat_flux(discr, eos, q, grad_t) - # + diffusive_heat_flux(discr, eos, q, j)) - tau = viscous_stress_tensor(discr, eos, cv, grad_cv) - viscous_mass_flux = 0 * cv.momentum - viscous_energy_flux = np.dot(tau, cv.velocity) - heat_flux + heat_flux_diffusive = diffusive_heat_flux(discr, eos, cv, j) - # passes the right (empty) shape for diffusive flux when no species - # TODO: fix single gas join_conserved for vectors at each cons eqn - if len(j) == 0: - j = cv.momentum * cv.species_mass.reshape(-1, 1) + tau = viscous_stress_tensor(discr, eos, cv, grad_cv) + viscous_energy_flux = ( + np.dot(tau, cv.velocity) + - conductive_heat_flux(discr, eos, cv, grad_t) + - heat_flux_diffusive + ) return make_conserved(dim, mass=viscous_mass_flux, @@ -272,9 +276,10 @@ def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair, Parameters ---------- + discr: :class:`grudge.eager.EagerDGDiscretization` + The discretization to use eos: :class:`~mirgecom.eos.GasEOS` - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. + A gas equation of state cv_tpair: :class:`grudge.trace_pair.TracePair` Trace pair of :class:`~mirgecom.fluid.ConservedVars` with the fluid solution on the faces @@ -286,7 +291,7 @@ def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair, local: bool Indicates whether to skip projection of fluxes to "all_faces" or not. If set to *False* (the default), the returned fluxes are projected to - "all_faces." If set to *True*, the returned fluxes are not projected to + "all_faces". If set to *True*, the returned fluxes are not projected to "all_faces"; remaining instead on the boundary restriction. Returns @@ -303,12 +308,11 @@ def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair, grad_t_tpair.int) f_ext = viscous_flux(discr, eos, cv_tpair.ext, grad_cv_tpair.ext, grad_t_tpair.ext) - # This bit hard-codes BR1 central flux, use mirgecom.flux.central? f_avg = 0.5*(f_int + f_ext) flux_weak = make_conserved(cv_tpair.int.dim, q=(f_avg.join() @ normal)) - if local is False: + if not local: return discr.project(cv_tpair.dd, "all_faces", flux_weak) return flux_weak @@ -321,7 +325,7 @@ def get_viscous_timestep(discr, eos, cv): discr: grudge.eager.EagerDGDiscretization the discretization to use eos: :class:`~mirgecom.eos.GasEOS` - An equation of state implementing the speed_of_sound method + A gas equation of state cv: :class:`~mirgecom.fluid.ConservedVars` Fluid solution @@ -361,8 +365,7 @@ def get_viscous_cfl(discr, eos, dt, cv): discr: :class:`grudge.eager.EagerDGDiscretization` the discretization to use eos: :class:`~mirgecom.eos.GasEOS` - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. + A gas equation of state dt: float or :class:`~meshmode.dof_array.DOFArray` A constant scalar dt or node-local dt cv: :class:`~mirgecom.fluid.ConservedVars` diff --git a/test/test_av.py b/test/test_av.py index 626893753..858afd7b4 100644 --- a/test/test_av.py +++ b/test/test_av.py @@ -183,8 +183,8 @@ def soln_gradient_flux(self, disc, btag, soln, **kwargs): interior=soln_int, exterior=soln_int) nhat = thaw(actx, disc.normal(btag)) - from mirgecom.flux import central_scalar_flux - flux_weak = central_scalar_flux(bnd_pair, normal=nhat) + from mirgecom.flux import gradient_flux_central + flux_weak = gradient_flux_central(bnd_pair, normal=nhat) return disc.project(btag, "all_faces", flux_weak) def av_flux(self, disc, btag, diffusion, **kwargs): @@ -194,8 +194,8 @@ def av_flux(self, disc, btag, diffusion, **kwargs): from grudge.trace_pair import TracePair bnd_grad_pair = TracePair(btag, interior=grad_soln_minus, exterior=grad_soln_plus) - from mirgecom.flux import central_vector_flux - flux_weak = central_vector_flux(bnd_grad_pair, normal=nhat) + from mirgecom.flux import divergence_flux_central + flux_weak = divergence_flux_central(bnd_grad_pair, normal=nhat) return disc.project(btag, "all_faces", flux_weak) boundaries = {BTAG_ALL: TestBoundary()} diff --git a/test/test_bc.py b/test/test_bc.py index 97862e997..bf3f9158d 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -227,12 +227,12 @@ def test_noslip(actx_factory, dim): print(f"{nhat=}") # h = 1.0 / np1 - from mirgecom.flux import central_scalar_flux + from mirgecom.flux import gradient_flux_central def scalar_flux_interior(int_tpair): normal = thaw(actx, discr.normal(int_tpair.dd)) # Hard-coding central per [Bassi_1997]_ eqn 13 - flux_weak = central_scalar_flux(int_tpair, normal) + flux_weak = gradient_flux_central(int_tpair, normal) return discr.project(int_tpair.dd, "all_faces", flux_weak) # utility to compare stuff on the boundary only @@ -347,12 +347,12 @@ def test_prescribedviscous(actx_factory, dim): nhat = thaw(actx, discr.normal(BTAG_ALL)) print(f"{nhat=}") - from mirgecom.flux import central_scalar_flux + from mirgecom.flux import gradient_flux_central def scalar_flux_interior(int_tpair): normal = thaw(actx, discr.normal(int_tpair.dd)) # Hard-coding central per [Bassi_1997]_ eqn 13 - flux_weak = central_scalar_flux(int_tpair, normal) + flux_weak = gradient_flux_central(int_tpair, normal) return discr.project(int_tpair.dd, "all_faces", flux_weak) # utility to compare stuff on the boundary only diff --git a/test/test_navierstokes.py b/test/test_navierstokes.py new file mode 100644 index 000000000..10ef64829 --- /dev/null +++ b/test/test_navierstokes.py @@ -0,0 +1,330 @@ +"""Test the Navier-Stokes gas dynamics module.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np +import numpy.random +import numpy.linalg as la # noqa +import pyopencl.clmath # noqa +import logging +import pytest + +from pytools.obj_array import ( + flat_obj_array, + make_obj_array, +) + +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from mirgecom.navierstokes import ns_operator +from mirgecom.fluid import make_conserved +from grudge.dof_desc import DTAG_BOUNDARY + +from mirgecom.boundary import ( + DummyBoundary, + PrescribedViscousBoundary, + IsothermalNoSlipBoundary +) +from mirgecom.eos import IdealSingleGas +from mirgecom.transport import SimpleTransport +from grudge.eager import EagerDGDiscretization +from meshmode.array_context import ( # noqa + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests) + + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("nspecies", [0, 10]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("order", [1, 2, 3]) +def test_uniform_rhs(actx_factory, nspecies, dim, order): + """Test the Navier-Stokes operator using a trivial constant/uniform state. + + This state should yield rhs = 0 to FP. The test is performed for 1, 2, + and 3 dimensions, with orders 1, 2, and 3, with and without passive species. + """ + actx = actx_factory() + + tolerance = 1e-9 + + from pytools.convergence import EOCRecorder + eoc_rec0 = EOCRecorder() + eoc_rec1 = EOCRecorder() + # for nel_1d in [4, 8, 12]: + for nel_1d in [4, 8]: + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + logger.info( + f"Number of {dim}d elements: {mesh.nelements}" + ) + + discr = EagerDGDiscretization(actx, mesh, order=order) + zeros = discr.zeros(actx) + ones = zeros + 1.0 + + mass_input = discr.zeros(actx) + 1 + energy_input = discr.zeros(actx) + 2.5 + + mom_input = make_obj_array( + [discr.zeros(actx) for i in range(discr.dim)] + ) + + mass_frac_input = flat_obj_array( + [ones / ((i + 1) * 10) for i in range(nspecies)] + ) + species_mass_input = mass_input * mass_frac_input + num_equations = dim + 2 + len(species_mass_input) + + cv = make_conserved( + dim, mass=mass_input, energy=energy_input, momentum=mom_input, + species_mass=species_mass_input) + + expected_rhs = make_conserved( + dim, q=make_obj_array([discr.zeros(actx) + for i in range(num_equations)]) + ) + mu = 1.0 + kappa = 0.0 + spec_diffusivity = 0 * np.ones(nspecies) + transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + eos = IdealSingleGas(transport_model=transport_model) + boundaries = {BTAG_ALL: DummyBoundary()} + + ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv, t=0.0) + + rhs_resid = ns_rhs - expected_rhs + rho_resid = rhs_resid.mass + rhoe_resid = rhs_resid.energy + mom_resid = rhs_resid.momentum + rhoy_resid = rhs_resid.species_mass + + rho_rhs = ns_rhs.mass + rhoe_rhs = ns_rhs.energy + rhov_rhs = ns_rhs.momentum + rhoy_rhs = ns_rhs.species_mass + + logger.info( + f"rho_rhs = {rho_rhs}\n" + f"rhoe_rhs = {rhoe_rhs}\n" + f"rhov_rhs = {rhov_rhs}\n" + f"rhoy_rhs = {rhoy_rhs}\n" + ) + + assert discr.norm(rho_resid, np.inf) < tolerance + assert discr.norm(rhoe_resid, np.inf) < tolerance + for i in range(dim): + assert discr.norm(mom_resid[i], np.inf) < tolerance + for i in range(nspecies): + assert discr.norm(rhoy_resid[i], np.inf) < tolerance + + err_max = discr.norm(rho_resid, np.inf) + eoc_rec0.add_data_point(1.0 / nel_1d, err_max) + + # set a non-zero, but uniform velocity component + for i in range(len(mom_input)): + mom_input[i] = discr.zeros(actx) + (-1.0) ** i + + cv = make_conserved( + dim, mass=mass_input, energy=energy_input, momentum=mom_input, + species_mass=species_mass_input) + + boundaries = {BTAG_ALL: DummyBoundary()} + ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv, t=0.0) + rhs_resid = ns_rhs - expected_rhs + + rho_resid = rhs_resid.mass + rhoe_resid = rhs_resid.energy + mom_resid = rhs_resid.momentum + rhoy_resid = rhs_resid.species_mass + + assert discr.norm(rho_resid, np.inf) < tolerance + assert discr.norm(rhoe_resid, np.inf) < tolerance + + for i in range(dim): + assert discr.norm(mom_resid[i], np.inf) < tolerance + for i in range(nspecies): + assert discr.norm(rhoy_resid[i], np.inf) < tolerance + + err_max = discr.norm(rho_resid, np.inf) + eoc_rec1.add_data_point(1.0 / nel_1d, err_max) + + logger.info( + f"V == 0 Errors:\n{eoc_rec0}" + f"V != 0 Errors:\n{eoc_rec1}" + ) + + assert ( + eoc_rec0.order_estimate() >= order - 0.5 + or eoc_rec0.max_error() < 1e-9 + ) + assert ( + eoc_rec1.order_estimate() >= order - 0.5 + or eoc_rec1.max_error() < 1e-9 + ) + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None): + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t) + + +@pytest.mark.parametrize("order", [2, 3]) +def test_poiseuille_rhs(actx_factory, order): + """Test the Navier-Stokes operator using a Poiseuille state. + + This state should yield rhs = 0 to FP. The test is performed for 1, 2, + and 3 dimensions, with orders 1, 2, and 3, with and without passive species. + """ + actx = actx_factory() + dim = 2 + tolerance = 1e-9 + + from pytools.convergence import EOCRecorder + eoc_rec = EOCRecorder() + + base_pressure = 100000.0 + pressure_ratio = 1.001 + mu = 1.0 + left_boundary_location = 0 + right_boundary_location = 0.1 + ybottom = 0. + ytop = .02 + nspecies = 0 + mu = 1.0 + kappa = 0.0 + spec_diffusivity = 0 * np.ones(nspecies) + transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + + eos = IdealSingleGas(transport_model=transport_model) + + def poiseuille_2d(x_vec, eos, cv=None, **kwargs): + y = x_vec[1] + x = x_vec[0] + x0 = left_boundary_location + xmax = right_boundary_location + xlen = xmax - x0 + p_low = base_pressure + p_hi = pressure_ratio*base_pressure + dp = p_hi - p_low + dpdx = dp/xlen + h = ytop - ybottom + u_x = dpdx*y*(h - y)/(2*mu) + p_x = p_hi - dpdx*x + rho = 1.0 + mass = 0*x + rho + u_y = 0*x + velocity = make_obj_array([u_x, u_y]) + ke = .5*np.dot(velocity, velocity)*mass + gamma = eos.gamma() + if cv is not None: + mass = cv.mass + vel = cv.velocity + ke = .5*np.dot(vel, vel)*mass + + rho_e = p_x/(gamma-1) + ke + return make_conserved(2, mass=mass, energy=rho_e, + momentum=mass*velocity) + + initializer = poiseuille_2d + + # for nel_1d in [4, 8, 12]: + for nfac in [1, 2, 4, 8]: + + npts_axis = nfac*(12, 20) + box_ll = (left_boundary_location, ybottom) + box_ur = (right_boundary_location, ytop) + mesh = _get_box_mesh(2, a=box_ll, b=box_ur, n=npts_axis) + + logger.info( + f"Number of {dim}d elements: {mesh.nelements}" + ) + + discr = EagerDGDiscretization(actx, mesh, order=order) + nodes = thaw(actx, discr.nodes()) + + cv_input = initializer(x_vec=nodes, eos=eos) + num_eqns = dim + 2 + expected_rhs = make_conserved( + dim, q=make_obj_array([discr.zeros(actx) + for i in range(num_eqns)]) + ) + boundaries = { + DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), + DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} + + ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv_input, + t=0.0) + + rhs_resid = ns_rhs - expected_rhs + rho_resid = rhs_resid.mass + # rhoe_resid = rhs_resid.energy + mom_resid = rhs_resid.momentum + + rho_rhs = ns_rhs.mass + # rhoe_rhs = ns_rhs.energy + rhov_rhs = ns_rhs.momentum + # rhoy_rhs = ns_rhs.species_mass + + print( + f"rho_rhs = {rho_rhs}\n" + # f"rhoe_rhs = {rhoe_rhs}\n" + f"rhov_rhs = {rhov_rhs}\n" + # f"rhoy_rhs = {rhoy_rhs}\n" + ) + + tol_fudge = 2e-4 + assert discr.norm(rho_resid, np.inf) < tolerance + # assert discr.norm(rhoe_resid, np.inf) < tolerance + mom_err = [discr.norm(mom_resid[i], np.inf) for i in range(dim)] + err_max = max(mom_err) + for i in range(dim): + assert mom_err[i] < tol_fudge + + # err_max = discr.norm(rho_resid, np.inf) + eoc_rec.add_data_point(1.0 / nfac, err_max) + + logger.info( + f"V != 0 Errors:\n{eoc_rec}" + ) + + assert ( + eoc_rec.order_estimate() >= order - 0.5 + or eoc_rec.max_error() < tol_fudge + ) diff --git a/test/test_operators.py b/test/test_operators.py new file mode 100644 index 000000000..5453080ac --- /dev/null +++ b/test/test_operators.py @@ -0,0 +1,287 @@ +"""Test the operator module for sanity.""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np # noqa +import pytest # noqa +import logging +from meshmode.array_context import ( # noqa + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests +) +from pytools.obj_array import make_obj_array +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL +from mirgecom.flux import gradient_flux_central +from mirgecom.fluid import ( + ConservedVars, + make_conserved +) +from grudge.eager import ( + EagerDGDiscretization, + interior_trace_pair +) +from functools import partial + +logger = logging.getLogger(__name__) + + +def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, + int_tpair, boundaries): + return (compute_interior_flux(int_tpair) + + sum(compute_boundary_flux(btag) for btag in boundaries)) + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None): + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, npoints_per_axis=n, boundary_tag_to_face=bttf, mesh_type=t) + + +def _coord_test_func(actx=None, x_vec=None, order=1, fac=1.0, grad=False): + """Make a coordinate-based test function or its gradient. + + Test Function + ------------- + 1d: fac*x^order + 2d: fac*x^order * y^order + 3d: fac*x^order * y^order * z^order + + Test Function Gradient + ---------------------- + 1d: fac*order*x^(order-1) + 2d: fac*order* + 3d: fac*order* + """ + if x_vec is None: + return 0 + + dim = len(x_vec) + if grad: + ret_ary = fac*order*make_obj_array([0*x_vec[0]+1.0 for _ in range(dim)]) + for i in range(dim): + for j in range(dim): + termpow = (order - 1) if order and j == i else order + ret_ary[i] = ret_ary[i] * (x_vec[j]**termpow) + else: + ret_ary = fac*(0*x_vec[0]+1.0) + for i in range(dim): + ret_ary = ret_ary * (x_vec[i]**order) + + return ret_ary + + +def _trig_test_func(actx=None, x_vec=None, grad=False): + """Make trig test function or its gradient. + + Test Function + ------------- + 1d: cos(2pi x) + 2d: sin(2pi x)cos(2pi y) + 3d: sin(2pi x)sin(2pi y)cos(2pi x) + + Grad Test Function + ------------------ + 1d: 2pi * -sin(2pi x) + 2d: 2pi * + 3d: 2pi * + """ + if x_vec is None: + return 0 + dim = len(x_vec) + if grad: + ret_ary = make_obj_array([0*x_vec[0] + 1.0 for _ in range(dim)]) + for i in range(dim): # component & derivative for ith dir + for j in range(dim): # form term for jth dir in ith component + if j == i: # then this is a derivative term + if j == (dim-1): # deriv of cos term + ret_ary[i] = ret_ary[i] * -actx.np.sin(2*np.pi*x_vec[j]) + else: # deriv of sin term + ret_ary[i] = ret_ary[i] * actx.np.cos(2*np.pi*x_vec[j]) + ret_ary[i] = 2*np.pi*ret_ary[i] + else: # non-derivative term + if j == (dim-1): # cos term + ret_ary[i] = ret_ary[i] * actx.np.cos(2*np.pi*x_vec[j]) + else: # sin term + ret_ary[i] = ret_ary[i] * actx.np.sin(2*np.pi*x_vec[j]) + else: + # return _make_trig_term(actx, r=x_vec, term=dim-1) + ret_ary = actx.np.cos(2*np.pi*x_vec[dim-1]) + for i in range(dim-1): + ret_ary = ret_ary * actx.np.sin(2*np.pi*x_vec[i]) + + return ret_ary + + +def _cv_test_func(actx, x_vec, grad=False): + """Make a CV array container for testing. + + There is no need for this CV to be physical, we are just testing whether the + operator machinery still gets the right answers when operating on a CV array + container. + + Testing CV + ---------- + mass = constant + energy = _trig_test_func + momentum = <_coord_test_func(order=2, fac=dim_index+1)> + + Testing CV Gradient + ------------------- + mass = <0> + energy = <_trig_test_func(grad=True)> + momentum = <_coord_test_func(grad=True)> + """ + zeros = 0*x_vec[0] + dim = len(x_vec) + momentum = make_obj_array([zeros+1.0 for _ in range(dim)]) + if grad: + dm = make_obj_array([zeros+0.0 for _ in range(dim)]) + de = _trig_test_func(actx, x_vec, grad=True) + dp = make_obj_array([np.empty(0) for _ in range(dim)]) + dy = ( + momentum * make_obj_array([np.empty(0) for _ in range(0)]).reshape(-1, 1) + ) + for i in range(dim): + dp[i] = _coord_test_func(actx, x_vec, order=2, fac=(i+1), grad=True) + return make_conserved(dim=dim, mass=dm, energy=de, momentum=np.stack(dp), + species_mass=dy) + else: + mass = zeros + 1.0 + energy = _trig_test_func(actx, x_vec) + for i in range(dim): + momentum[i] = _coord_test_func(actx, x_vec, order=2, fac=(i+1)) + return make_conserved(dim=dim, mass=mass, energy=energy, momentum=momentum) + + +def central_flux_interior(actx, discr, int_tpair): + """Compute a central flux for interior faces.""" + normal = thaw(actx, discr.normal(int_tpair.dd)) + flux_weak = gradient_flux_central(int_tpair, normal) + return discr.project(int_tpair.dd, "all_faces", flux_weak) + + +def central_flux_boundary(actx, discr, soln_func, btag): + """Compute a central flux for boundary faces.""" + boundary_discr = discr.discr_from_dd(btag) + bnd_nodes = thaw(actx, boundary_discr.nodes()) + soln_bnd = soln_func(actx=actx, x_vec=bnd_nodes) + bnd_nhat = thaw(actx, discr.normal(btag)) + from grudge.trace_pair import TracePair + bnd_tpair = TracePair(btag, interior=soln_bnd, exterior=soln_bnd) + flux_weak = gradient_flux_central(bnd_tpair, bnd_nhat) + return discr.project(bnd_tpair.dd, "all_faces", flux_weak) + + +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("order", [1, 2, 3]) +@pytest.mark.parametrize("test_func", [partial(_coord_test_func, order=0), + partial(_coord_test_func, order=1), + partial(_coord_test_func, order=1, fac=2), + partial(_coord_test_func, order=2), + _trig_test_func, + _cv_test_func]) +def test_grad_operator(actx_factory, dim, order, test_func): + """Test the gradient operator for sanity. + + Check whether we get the right answers for gradients of analytic functions with + some simple input fields and states: + - constant + - multilinear funcs + - quadratic funcs + - trig funcs + - :class:`~mirgecom.fluid.ConservedVars` composed of funcs from above + """ + actx = actx_factory() + + tol = 1e-10 if dim < 3 else 1e-9 + from pytools.convergence import EOCRecorder + eoc = EOCRecorder() + + for nfac in [1, 2, 4]: + + npts_axis = (nfac*4,)*dim + box_ll = (0,)*dim + box_ur = (1,)*dim + mesh = _get_box_mesh(dim, a=box_ll, b=box_ur, n=npts_axis) + + logger.info( + f"Number of {dim}d elements: {mesh.nelements}" + ) + + discr = EagerDGDiscretization(actx, mesh, order=order) + # compute max element size + from grudge.dt_utils import h_max_from_volume + h_max = h_max_from_volume(discr) + + nodes = thaw(actx, discr.nodes()) + int_flux = partial(central_flux_interior, actx, discr) + bnd_flux = partial(central_flux_boundary, actx, discr, test_func) + + test_data = test_func(actx=actx, x_vec=nodes) + exact_grad = test_func(actx=actx, x_vec=nodes, grad=True) + + if isinstance(test_data, ConservedVars): + err_scale = discr.norm(exact_grad.join(), np.inf) + else: + err_scale = discr.norm(exact_grad, np.inf) + if err_scale <= 1e-16: + err_scale = 1 + + print(f"{test_data=}") + print(f"{exact_grad=}") + + test_data_int_tpair = interior_trace_pair(discr, test_data) + boundaries = [BTAG_ALL] + test_data_flux_bnd = _elbnd_flux(discr, int_flux, bnd_flux, + test_data_int_tpair, boundaries) + + from mirgecom.operators import grad_operator + if isinstance(test_data, ConservedVars): + test_grad = make_conserved( + dim=dim, q=grad_operator(discr, test_data.join(), + test_data_flux_bnd.join()) + ) + grad_err = discr.norm((test_grad - exact_grad).join(), np.inf)/err_scale + else: + test_grad = grad_operator(discr, test_data, test_data_flux_bnd) + grad_err = discr.norm(test_grad - exact_grad, np.inf)/err_scale + + print(f"{test_grad=}") + eoc.add_data_point(h_max, grad_err) + + assert ( + eoc.order_estimate() >= order - 0.5 + or eoc.max_error() < tol + ) diff --git a/test/test_viscous.py b/test/test_viscous.py index 6cb92ad6f..369231075 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -33,8 +33,12 @@ from pytools.obj_array import make_obj_array from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL import grudge.op as op -from grudge.eager import EagerDGDiscretization +from grudge.eager import ( + EagerDGDiscretization, + interior_trace_pair +) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) @@ -49,35 +53,17 @@ logger = logging.getLogger(__name__) -def dont_test_actx_power(actx_factory): - """Test power of DOFArrays and the likes.""" - actx = actx_factory() - dim = 3 - nel_1d = 5 - from meshmode.mesh.generation import generate_regular_rect_mesh - mesh = generate_regular_rect_mesh( - a=(1.0,) * dim, b=(2.0,) * dim, n=(nel_1d,) * dim - ) - order = 1 - discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) - - actx.np.power(nodes, .5) - actx.np.power(nodes[0], .5) - actx.np.power(nodes[0][0], .5) - - # TODO: Bring back transport_model 0 when *actx.np.power* is fixed @pytest.mark.parametrize("transport_model", [1]) def test_viscous_stress_tensor(actx_factory, transport_model): """Test tau data structure and values against exact.""" actx = actx_factory() dim = 3 - nel_1d = 5 + nel_1d = 4 from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( - a=(1.0,) * dim, b=(2.0,) * dim, n=(nel_1d,) * dim + a=(1.0,) * dim, b=(2.0,) * dim, nelements_per_axis=(nel_1d,) * dim ) order = 1 @@ -123,16 +109,180 @@ def test_viscous_stress_tensor(actx_factory, transport_model): assert discr.norm(tau - exp_tau, np.inf) < 1e-12 +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None): + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, npoints_per_axis=n, boundary_tag_to_face=bttf, mesh_type=t) + + +@pytest.mark.parametrize("order", [2, 3, 4]) +@pytest.mark.parametrize("kappa", [0.0, 1.0, 2.3]) +def test_poiseuille_fluxes(actx_factory, order, kappa): + """Test the viscous fluxes using a Poiseuille input state.""" + actx = actx_factory() + dim = 2 + + from pytools.convergence import EOCRecorder + e_eoc_rec = EOCRecorder() + p_eoc_rec = EOCRecorder() + + base_pressure = 100000.0 + pressure_ratio = 1.001 + mu = 42 # arbitrary + left_boundary_location = 0 + right_boundary_location = 0.1 + ybottom = 0. + ytop = .02 + nspecies = 0 + spec_diffusivity = 0 * np.ones(nspecies) + transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + + xlen = right_boundary_location - left_boundary_location + p_low = base_pressure + p_hi = pressure_ratio*base_pressure + dpdx = (p_hi - p_low) / xlen + rho = 1.0 + + eos = IdealSingleGas(transport_model=transport_model) + + from mirgecom.initializers import PlanarPoiseuille + initializer = PlanarPoiseuille(density=rho, mu=mu) + + def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, + int_tpair, boundaries): + return (compute_interior_flux(int_tpair) + + sum(compute_boundary_flux(btag) for btag in boundaries)) + + from mirgecom.flux import gradient_flux_central + + def cv_flux_interior(int_tpair): + normal = thaw(actx, discr.normal(int_tpair.dd)) + flux_weak = gradient_flux_central(int_tpair, normal) + return discr.project(int_tpair.dd, "all_faces", flux_weak) + + def cv_flux_boundary(btag): + boundary_discr = discr.discr_from_dd(btag) + bnd_nodes = thaw(actx, boundary_discr.nodes()) + cv_bnd = initializer(x_vec=bnd_nodes, eos=eos) + bnd_nhat = thaw(actx, discr.normal(btag)) + from grudge.trace_pair import TracePair + bnd_tpair = TracePair(btag, interior=cv_bnd, exterior=cv_bnd) + flux_weak = gradient_flux_central(bnd_tpair, bnd_nhat) + return discr.project(bnd_tpair.dd, "all_faces", flux_weak) + + for nfac in [1, 2, 4]: + + npts_axis = nfac*(11, 21) + box_ll = (left_boundary_location, ybottom) + box_ur = (right_boundary_location, ytop) + mesh = _get_box_mesh(2, a=box_ll, b=box_ur, n=npts_axis) + + logger.info( + f"Number of {dim}d elements: {mesh.nelements}" + ) + + discr = EagerDGDiscretization(actx, mesh, order=order) + nodes = thaw(actx, discr.nodes()) + + # compute max element size + from grudge.dt_utils import h_max_from_volume + h_max = h_max_from_volume(discr) + + # form exact cv + cv = initializer(x_vec=nodes, eos=eos) + cv_int_tpair = interior_trace_pair(discr, cv) + boundaries = [BTAG_ALL] + cv_flux_bnd = _elbnd_flux(discr, cv_flux_interior, cv_flux_boundary, + cv_int_tpair, boundaries) + from mirgecom.operators import grad_operator + grad_cv = make_conserved(dim, q=grad_operator(discr, cv.join(), + cv_flux_bnd.join())) + + xp_grad_cv = initializer.exact_grad(x_vec=nodes, eos=eos, cv_exact=cv) + xp_grad_v = 1/cv.mass * xp_grad_cv.momentum + xp_tau = mu * (xp_grad_v + xp_grad_v.transpose()) + + # sanity check the gradient: + relerr_scale_e = 1.0 / discr.norm(xp_grad_cv.energy, np.inf) + relerr_scale_p = 1.0 / discr.norm(xp_grad_cv.momentum, np.inf) + graderr_e = discr.norm((grad_cv.energy - xp_grad_cv.energy), np.inf) + graderr_p = discr.norm((grad_cv.momentum - xp_grad_cv.momentum), np.inf) + graderr_e *= relerr_scale_e + graderr_p *= relerr_scale_p + assert graderr_e < 5e-7 + assert graderr_p < 5e-11 + + zeros = discr.zeros(actx) + ones = zeros + 1 + pressure = eos.pressure(cv) + # grad of p should be dp/dx + xp_grad_p = -make_obj_array([dpdx*ones, zeros]) + grad_p = op.local_grad(discr, pressure) + + temperature = eos.temperature(cv) + tscal = dpdx/(rho*eos.gas_const()) + xp_grad_t = xp_grad_p/(cv.mass*eos.gas_const()) + grad_t = op.local_grad(discr, temperature) + + # sanity check + assert discr.norm(grad_p - xp_grad_p, np.inf)/dpdx < 5e-9 + assert discr.norm(grad_t - xp_grad_t, np.inf)/tscal < 5e-9 + + # verify heat flux + from mirgecom.viscous import conductive_heat_flux + heat_flux = conductive_heat_flux(discr, eos, cv, grad_t) + xp_heat_flux = -kappa*xp_grad_t + assert discr.norm(heat_flux - xp_heat_flux, np.inf) < 2e-8 + + # verify diffusive mass flux is zilch (no scalar components) + from mirgecom.viscous import diffusive_flux + j = diffusive_flux(discr, eos, cv, grad_cv) + assert len(j) == 0 + + xp_e_flux = np.dot(xp_tau, cv.velocity) - xp_heat_flux + xp_mom_flux = xp_tau + from mirgecom.viscous import viscous_flux + vflux = viscous_flux(discr, eos, cv, grad_cv, grad_t) + + efluxerr = ( + discr.norm(vflux.energy - xp_e_flux, np.inf) + / discr.norm(xp_e_flux, np.inf) + ) + momfluxerr = ( + discr.norm(vflux.momentum - xp_mom_flux, np.inf) + / discr.norm(xp_mom_flux, np.inf) + ) + + assert discr.norm(vflux.mass, np.inf) == 0 + e_eoc_rec.add_data_point(h_max, efluxerr) + p_eoc_rec.add_data_point(h_max, momfluxerr) + + assert ( + e_eoc_rec.order_estimate() >= order - 0.5 + or e_eoc_rec.max_error() < 3e-9 + ) + assert ( + p_eoc_rec.order_estimate() >= order - 0.5 + or p_eoc_rec.max_error() < 2e-12 + ) + + def test_species_diffusive_flux(actx_factory): """Test species diffusive flux and values against exact.""" actx = actx_factory() dim = 3 - nel_1d = 5 + nel_1d = 4 from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( - a=(1.0,) * dim, b=(2.0,) * dim, n=(nel_1d,) * dim + a=(1.0,) * dim, b=(2.0,) * dim, nelements_per_axis=(nel_1d,) * dim ) order = 1 @@ -198,12 +348,12 @@ def test_diffusive_heat_flux(actx_factory): """Test diffusive heat flux and values against exact.""" actx = actx_factory() dim = 3 - nel_1d = 5 + nel_1d = 4 from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( - a=(1.0,) * dim, b=(2.0,) * dim, n=(nel_1d,) * dim + a=(1.0,) * dim, b=(2.0,) * dim, nelements_per_axis=(nel_1d,) * dim ) order = 1 @@ -312,12 +462,12 @@ def test_local_max_species_diffusivity(actx_factory, dim): def test_viscous_timestep(actx_factory, dim, mu, vel): """Test timestep size.""" actx = actx_factory() - nel_1d = 5 + nel_1d = 4 from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( - a=(1.0,) * dim, b=(2.0,) * dim, n=(nel_1d,) * dim + a=(1.0,) * dim, b=(2.0,) * dim, nelements_per_axis=(nel_1d,) * dim ) order = 1 From d10d05990d6f587b73c5895dec0098f453d58547 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sat, 21 Aug 2021 14:38:00 -0500 Subject: [PATCH 203/873] Remove gmsh from requirements --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 326fe7806..afefc2614 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,6 @@ pymetis importlib-resources psutil pyyaml -gmsh # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic From 913eea9f8ed1a0597f432ccd82aa0ec41441ea2e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 22 Aug 2021 08:12:20 -0500 Subject: [PATCH 204/873] Fix up power law transport to be functional. --- mirgecom/transport.py | 8 +------- test/test_viscous.py | 3 +-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 520f2b592..071c1504d 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -170,9 +170,6 @@ class PowerLawTransport(TransportModel): def __init__(self, alpha=0.6, beta=4.093e-7, sigma=2.5, n=.666, species_diffusivity=None): """Initialize power law coefficients and parameters.""" - raise NotImplementedError("This class is not yet supported, awaits " - "implementation of array_context.np.power.") - if species_diffusivity is None: species_diffusivity = np.empty((0,), dtype=object) self._alpha = alpha @@ -194,10 +191,7 @@ def viscosity(self, eos: GasEOS, cv: ConservedVars): $\mu = \beta{T}^n$ """ - actx = cv.array_context - gas_t = eos.temperature(cv) - # TODO: actx.np.power is unimplemented - return self._beta * actx.np.power(gas_t, self._n) + return self._beta * eos.temperature(cv)**self._n def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): r"""Get the 2nd viscosity coefficent, $\lambda$. diff --git a/test/test_viscous.py b/test/test_viscous.py index 369231075..d68e6a368 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -53,8 +53,7 @@ logger = logging.getLogger(__name__) -# TODO: Bring back transport_model 0 when *actx.np.power* is fixed -@pytest.mark.parametrize("transport_model", [1]) +@pytest.mark.parametrize("transport_model", [0, 1]) def test_viscous_stress_tensor(actx_factory, transport_model): """Test tau data structure and values against exact.""" actx = actx_factory() From 327ed53c51d1c31d4af50c3788c119a11a768b00 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 23 Aug 2021 07:28:34 -0500 Subject: [PATCH 205/873] Sharpen doc with correct indentation, specific mixture interface usage. --- mirgecom/initializers.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index f342c7620..dff54ab31 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -885,8 +885,8 @@ def __init__( normal_dir: int specifies the direction (plane) the discontinuity is applied in disc_location: float or Callable - location of discontinuity or optionally a function returning the - time-dependent location. + fixed location of discontinuity or optionally a function that + returns the time-dependent location. nspecies: int specifies the number of mixture species pressure_left: float @@ -970,14 +970,17 @@ def __call__(self, x_vec, eos, *, time=0.0): y = self._yl + (self._yr - self._yl)*weight if self._nspecies: - mass = eos.get_density(pressure, temperature, y) + mass = eos.get_density(pressure, temperature, + species_mass_fractions=y) else: mass = pressure/temperature/eos.gas_const() specmass = mass * y mom = mass * velocity if self._nspecies: - internal_energy = eos.get_internal_energy(temperature, y) + internal_energy = \ + eos.get_internal_energy(temperature, + species_mass_fractions=y) else: internal_energy = pressure/mass/(eos.gamma() - 1) From e999d03e660820e55bf22d68876ebcdfef2da275 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 23 Aug 2021 07:32:17 -0500 Subject: [PATCH 206/873] Remove whitespace to match upstream --- mirgecom/eos.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index ec604da92..8c019d7b1 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -695,7 +695,6 @@ def get_pressure(): temperature = self.temperature(cv) y = cv.species_mass_fractions return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) - return get_pressure() def sound_speed(self, cv: ConservedVars): @@ -724,7 +723,6 @@ def sound_speed(self, cv: ConservedVars): def get_sos(): actx = cv.array_context return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) - return get_sos() def temperature(self, cv: ConservedVars): @@ -757,7 +755,6 @@ def get_temp(): e = self.internal_energy(cv) / cv.mass return self._pyrometheus_mech.get_temperature(e, self._tguess, y, True) - return get_temp() def total_energy(self, cv, pressure): From 124ac0b4959dca445bb5b57562966c63d8acf9c5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 26 Aug 2021 08:21:52 -0500 Subject: [PATCH 207/873] Disable some portions of viscous flux temporarily for performance test. --- mirgecom/viscous.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 1b371e803..46db4fc16 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -257,7 +257,8 @@ def viscous_flux(discr, eos, cv, grad_cv, grad_t): viscous_mass_flux = 0 * cv.momentum j = diffusive_flux(discr, eos, cv, grad_cv) - heat_flux_diffusive = diffusive_heat_flux(discr, eos, cv, j) + # heat_flux_diffusive = diffusive_heat_flux(discr, eos, cv, j) + heat_flux_diffusive = 0 tau = viscous_stress_tensor(discr, eos, cv, grad_cv) viscous_energy_flux = ( @@ -347,11 +348,11 @@ def get_viscous_timestep(discr, eos, cv): transport = eos.transport_model() if transport: mu = transport.viscosity(eos, cv) - d_alpha_max = \ - get_local_max_species_diffusivity( - cv.array_context, discr, - transport.species_diffusivity(eos, cv) - ) + # d_alpha_max = \ + # get_local_max_species_diffusivity( + # cv.array_context, discr, + # transport.species_diffusivity(eos, cv) + # ) return( length_scales / (compute_wavespeed(eos, cv) From 414d24dd38578b6ff5afb66cac729c6e93a930d8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 30 Aug 2021 10:59:20 -0500 Subject: [PATCH 208/873] Add bozzle case to examples. --- examples/bozzle.py | 863 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 863 insertions(+) create mode 100644 examples/bozzle.py diff --git a/examples/bozzle.py b/examples/bozzle.py new file mode 100644 index 000000000..d903a9d87 --- /dev/null +++ b/examples/bozzle.py @@ -0,0 +1,863 @@ +"""Production-like (nozzle-like) case in a box.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import os +import yaml +import logging +import numpy as np +import pyopencl as cl +import numpy.linalg as la # noqa +import pyopencl.array as cla # noqa +from functools import partial +import math + +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.dof_desc import DTAG_BOUNDARY +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer + +from meshmode.array_context import ( + PyOpenCLArrayContext, + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext + +from mirgecom.navierstokes import ns_operator +from mirgecom.fluid import make_conserved +from mirgecom.artificial_viscosity import (av_operator, smoothness_indicator) +from mirgecom.simutil import ( + check_step, + generate_and_distribute_mesh, + write_visfile, + check_naninf_local, + check_range_local, + get_sim_timestep +) +from mirgecom.restart import write_restart_file +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +import pyopencl.tools as cl_tools +# from mirgecom.checkstate import compare_states +from mirgecom.integrators import (rk4_step, lsrk54_step, lsrk144_step, + euler_step) +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + PrescribedInviscidBoundary, + IsothermalNoSlipBoundary +) +from mirgecom.initializers import (Uniform, PlanarDiscontinuity) +from mirgecom.eos import IdealSingleGas +from mirgecom.transport import SimpleTransport + +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, logmgr_add_many_discretization_quantities, + logmgr_add_cl_device_info, logmgr_set_time, LogUserQuantity, + set_sim_state +) + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +def get_pseudo_y0_mesh(): + """Generate or import a grid using `gmsh`. + + Input required: + data/pseudoY0.brep (for mesh gen) + -or- + data/pseudoY0.msh (read existing mesh) + + This routine will generate a new grid if it does + not find the grid file (data/pseudoY0.msh), but + note that if the grid is generated in millimeters, + then the solution initialization and BCs need to be + adjusted or the grid needs to be scaled up to meters + before being used with the current main driver in this + example. + """ + from meshmode.mesh.io import (read_gmsh, generate_gmsh, + ScriptWithFilesSource) + if os.path.exists("data/pseudoY1nozzle.msh") is False: + mesh = generate_gmsh(ScriptWithFilesSource( + """ + Merge "data/pseudoY1nozzle.brep"; + Mesh.CharacteristicLengthMin = 1; + Mesh.CharacteristicLengthMax = 10; + Mesh.ElementOrder = 2; + Mesh.CharacteristicLengthExtendFromBoundary = 0; + + // Inside and end surfaces of nozzle/scramjet + Field[1] = Distance; + Field[1].NNodesByEdge = 100; + Field[1].FacesList = {5,7,8,9,10}; + Field[2] = Threshold; + Field[2].IField = 1; + Field[2].LcMin = 1; + Field[2].LcMax = 10; + Field[2].DistMin = 0; + Field[2].DistMax = 20; + + // Edges separating surfaces with boundary layer + // refinement from those without + // (Seems to give a smoother transition) + Field[3] = Distance; + Field[3].NNodesByEdge = 100; + Field[3].EdgesList = {5,10,14,16}; + Field[4] = Threshold; + Field[4].IField = 3; + Field[4].LcMin = 1; + Field[4].LcMax = 10; + Field[4].DistMin = 0; + Field[4].DistMax = 20; + + // Min of the two sections above + Field[5] = Min; + Field[5].FieldsList = {2,4}; + + Background Field = 5; + """, ["data/pseudoY1nozzle.brep"]), 3, target_unit="MM") + else: + mesh = read_gmsh("data/pseudoY1nozzle.msh") + + return mesh + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, restart_filename=None, + use_profiling=False, use_logmgr=False, user_input_file=None, + actx_class=PyOpenCLArrayContext, casename=None): + """Drive the Y0 nozzle example.""" + cl_ctx = ctx_factory() + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + if casename is None: + casename = "mirgecom" + + # logging and profiling + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wo", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + # Most of these can be set by the user input file + + # default i/o junk frequencies + nviz = 100 + nrestart = 100 + nhealth = 100 + nstatus = 1 + log_dependent = 1 + + # default timestepping control + integrator = "rk4" + current_dt = 5.0e-8 + t_final = 5.0e-6 + current_cfl = 1.0 + current_t = 0 + constant_cfl = False + current_step = 0 + + # default health status bounds + health_pres_min = 1.0e-1 + health_pres_max = 2.0e6 + + # discretization and model control + order = 1 + alpha_sc = 0.5 + s0_sc = -5.0 + kappa_sc = 0.5 + weak_scale = 1 + + if user_input_file: + input_data = None + if rank == 0: + with open(user_input_file) as f: + input_data = yaml.load(f, Loader=yaml.FullLoader) + input_data = comm.bcast(input_data, root=0) + try: + weak_scale = float(input_data["wscale"]) + except KeyError: + pass + try: + nviz = int(input_data["nviz"]) + except KeyError: + pass + try: + nrestart = int(input_data["nrestart"]) + except KeyError: + pass + try: + nhealth = int(input_data["nhealth"]) + except KeyError: + pass + try: + nstatus = int(input_data["nstatus"]) + except KeyError: + pass + try: + log_dependent = int(input_data["logDependent"]) + except KeyError: + pass + try: + current_dt = float(input_data["current_dt"]) + except KeyError: + pass + try: + t_final = float(input_data["t_final"]) + except KeyError: + pass + try: + alpha_sc = float(input_data["alpha_sc"]) + except KeyError: + pass + try: + kappa_sc = float(input_data["kappa_sc"]) + except KeyError: + pass + try: + s0_sc = float(input_data["s0_sc"]) + except KeyError: + pass + try: + order = int(input_data["order"]) + except KeyError: + pass + try: + integrator = input_data["integrator"] + except KeyError: + pass + try: + health_pres_min = float(input_data["health_pres_min"]) + except KeyError: + pass + try: + health_pres_max = float(input_data["health_pres_max"]) + except KeyError: + pass + + # param sanity check + allowed_integrators = ["rk4", "euler", "lsrk54", "lsrk144"] + if integrator not in allowed_integrators: + error_message = "Invalid time integrator: {}".format(integrator) + raise RuntimeError(error_message) + + if rank == 0: + print("#### Simluation control data: ####") + print(f"\tnviz = {nviz}") + print(f"\tnrestart = {nrestart}") + print(f"\tnhealth = {nhealth}") + print(f"\tnstatus = {nstatus}") + print(f"\tcurrent_dt = {current_dt}") + print(f"\tt_final = {t_final}") + print(f"\torder = {order}") + print(f"\tShock capturing parameters: alpha {alpha_sc}, " + f"s0 {s0_sc}, kappa {kappa_sc}") + print(f"\tTime integration {integrator}") + if log_dependent: + print("\tDependent variable logging is ON.") + else: + print("\tDependent variable logging is OFF.") + print("#### Simluation control data: ####") + + timestepper = rk4_step + if integrator == "euler": + timestepper = euler_step + if integrator == "lsrk54": + timestepper = lsrk54_step + if integrator == "lsrk144": + timestepper = lsrk144_step + + dim = 3 + vel_inflow = np.zeros(shape=(dim, )) + vel_outflow = np.zeros(shape=(dim, )) + + # working gas: CO2 # + # gamma = 1.289 + # MW=44.009 g/mol + # cp = 37.135 J/mol-K, + # rho= 1.977 kg/m^3 @298K + gamma_co2 = 1.289 + r_co2 = 8314.59/44.009 + + # background + # 100 Pa + # 298 K + # rho = 1.77619667e-3 kg/m^3 + # velocity = 0,0,0 + rho_bkrnd = 1.77619667e-3 + pres_bkrnd = 100 + temp_bkrnd = 298 + + # nozzle inflow # + # + # stagnation tempertuare 298 K + # stagnation pressure 1.5e Pa + # + # isentropic expansion based on the area ratios between the inlet (r=13e-3m) + # and the throat (r=6.3e-3) + # + # calculate the inlet Mach number from the area ratio + nozzle_inlet_radius = 13.0e-3 + nozzle_throat_radius = 6.3e-3 + nozzle_inlet_area = math.pi*nozzle_inlet_radius*nozzle_inlet_radius + nozzle_throat_area = math.pi*nozzle_throat_radius*nozzle_throat_radius + inlet_area_ratio = nozzle_inlet_area/nozzle_throat_area + + def get_mach_from_area_ratio(area_ratio, gamma, mach_guess=0.01): + error = 1.0e-8 + next_error = 1.0e8 + g = gamma + m0 = mach_guess + while next_error > error: + r_gas = ( + (((2/(g + 1) + ((g - 1)/(g + 1)*m0*m0))**(((g + 1)/(2*g - 2))))/m0 + - area_ratio) + ) + drdm = ( + (2*((2/(g + 1) + ((g - 1)/(g + 1)*m0*m0))**(((g + 1)/(2*g - 2)))) + / (2*g - 2)*(g - 1)/(2/(g + 1) + ((g - 1)/(g + 1)*m0*m0)) + - ((2/(g + 1) + ((g - 1)/(g + 1)*m0*m0))**(((g + 1)/(2*g - 2)))) + * m0**(-2)) + ) + m1 = m0 - r_gas/drdm + next_error = abs(r_gas) + m0 = m1 + + return m1 + + def get_isentropic_pressure(mach, p0, gamma): + pressure = (1. + (gamma - 1.)*0.5*math.pow(mach, 2)) + pressure = p0*math.pow(pressure, (-gamma / (gamma - 1.))) + return pressure + + def get_isentropic_temperature(mach, t0, gamma): + temperature = (1. + (gamma - 1.)*0.5*math.pow(mach, 2)) + temperature = t0*math.pow(temperature, -1.0) + return temperature + + inlet_mach = get_mach_from_area_ratio(area_ratio=inlet_area_ratio, + gamma=gamma_co2, + mach_guess=0.01) + # ramp the stagnation pressure + start_ramp_pres = 1000 + ramp_interval = 1.0e-3 + t_ramp_start = 1.0e-5 + pres_inflow = get_isentropic_pressure(mach=inlet_mach, + p0=start_ramp_pres, + gamma=gamma_co2) + temp_inflow = get_isentropic_temperature(mach=inlet_mach, + t0=298, + gamma=gamma_co2) + rho_inflow = pres_inflow / temp_inflow / r_co2 + end_ramp_pres = 150000 + pres_inflow_final = get_isentropic_pressure(mach=inlet_mach, + p0=end_ramp_pres, + gamma=gamma_co2) + vel_inflow[0] = inlet_mach * math.sqrt( + gamma_co2 * pres_inflow / rho_inflow) + + if rank == 0: + print(f"inlet Mach number {inlet_mach}") + print(f"inlet temperature {temp_inflow}") + print(f"inlet pressure {pres_inflow}") + print(f"final inlet pressure {pres_inflow_final}") + + mu = 1.e-5 + kappa = rho_bkrnd*mu/0.75 + transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa) + eos = IdealSingleGas( + gamma=gamma_co2, + gas_const=r_co2, + transport_model=transport_model + ) + bulk_init = PlanarDiscontinuity(dim=dim, disc_location=-.30, sigma=0.005, + temperature_left=temp_inflow, temperature_right=temp_bkrnd, + pressure_left=pres_inflow, pressure_right=pres_bkrnd, + velocity_left=vel_inflow, velocity_right=vel_outflow) + + # pressure ramp function + def inflow_ramp_pressure( + t, + start_p=start_ramp_pres, + final_p=end_ramp_pres, + ramp_interval=ramp_interval, + t_ramp_start=t_ramp_start + ): + return actx.np.where( + actx.np.greater(t, t_ramp_start), + actx.np.minimum( + final_p, + start_p + (t - t_ramp_start) / ramp_interval * (final_p - start_p)), + start_p) + + class IsentropicInflow: + def __init__(self, *, dim=1, direc=0, t0=298, p0=1e5, mach=0.01, p_fun=None): + + self._p0 = p0 + self._t0 = t0 + self._dim = dim + self._direc = direc + self._mach = mach + if p_fun is not None: + self._p_fun = p_fun + + def __call__(self, x_vec, *, time=0, eos, **kwargs): + + if self._p_fun is not None: + p0 = self._p_fun(time) + else: + p0 = self._p0 + t0 = self._t0 + + gamma = eos.gamma() + gas_const = eos.gas_const() + pressure = get_isentropic_pressure( + mach=self._mach, + p0=p0, + gamma=gamma + ) + temperature = get_isentropic_temperature( + mach=self._mach, + t0=t0, + gamma=gamma + ) + rho = pressure/temperature/gas_const + + velocity = np.zeros(self._dim, dtype=object) + velocity[self._direc] = self._mach*actx.np.sqrt(gamma*pressure/rho) + + mass = 0.0*x_vec[0] + rho + mom = velocity*mass + energy = (pressure/(gamma - 1.0)) + np.dot(mom, mom)/(2.0*mass) + return make_conserved( + dim=self._dim, + mass=mass, + momentum=mom, + energy=energy + ) + + inflow_init = IsentropicInflow( + dim=dim, + t0=298, + p0=start_ramp_pres, + mach=inlet_mach, + p_fun=inflow_ramp_pressure + ) + outflow_init = Uniform( + dim=dim, + rho=rho_bkrnd, + p=pres_bkrnd, + velocity=vel_outflow + ) + + inflow = PrescribedInviscidBoundary(fluid_solution_func=inflow_init) + outflow = PrescribedInviscidBoundary(fluid_solution_func=outflow_init) + wall = IsothermalNoSlipBoundary() + + boundaries = { + DTAG_BOUNDARY("Inflow"): inflow, + DTAG_BOUNDARY("Outflow"): outflow, + DTAG_BOUNDARY("Wall"): wall + } + + viz_path = "viz_data/" + vizname = viz_path + casename + restart_path = "restart_data/" + restart_pattern = ( + restart_path + "{cname}-{step:06d}-{rank:04d}.pkl" + ) + + if restart_filename: # read the grid from restart data + restart_filename = f"{restart_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, restart_filename) + current_step = restart_data["step"] + current_t = restart_data["t"] + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + restart_order = int(restart_data["order"]) + + assert comm.Get_size() == restart_data["num_parts"] + else: + boundary_tag_to_face = { + "Inflow": ["-x"], + "Outflow": ["+x"], + "Wall": ["-y", "+y", "-z", "+z"] + } + scale = np.power(weak_scale, 1/dim) + box_ll = 0 + box_ur = .5*scale + nel_1d = int(8*scale) + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, + b=(box_ur,) * dim, + nelements_per_axis=(nel_1d,) * dim, + boundary_tag_to_face=boundary_tag_to_face) + local_mesh, global_nelements = generate_and_distribute_mesh( + comm, + generate_mesh + ) + local_nelements = local_mesh.nelements + + if rank == 0: + logging.info("Making discretization") + + discr = EagerDGDiscretization(actx, + local_mesh, + order=order, + mpi_communicator=comm) + + nodes = thaw(actx, discr.nodes()) + + # initialize the sponge field + def gen_sponge(): + thickness = 0.15 + amplitude = 1.0/current_dt/25.0 + x0 = 0.05 + + return amplitude * actx.np.where( + actx.np.greater(nodes[0], x0), + zeros + ((nodes[0] - x0) / thickness) * ((nodes[0] - x0) / thickness), + zeros + 0.0, + ) + + zeros = 0 * nodes[0] + sponge_sigma = gen_sponge() + ref_state = bulk_init(x_vec=nodes, eos=eos, time=0.0) + + if restart_filename: + if rank == 0: + logging.info("Restarting soln.") + current_state = restart_data["state"] + if restart_order != order: + restart_discr = EagerDGDiscretization( + actx, + local_mesh, + order=restart_order, + mpi_communicator=comm) + from meshmode.discretization.connection import make_same_mesh_connection + connection = make_same_mesh_connection( + actx, + discr.discr_from_dd("vol"), + restart_discr.discr_from_dd("vol") + ) + restart_state = restart_data["state"] + current_state = connection(restart_state) + else: + if rank == 0: + logging.info("Initializing soln.") + # for Discontinuity initial conditions + current_state = bulk_init(x_vec=nodes, eos=eos, time=0.0) + # for uniform background initial condition + # current_state = bulk_init(nodes, eos=eos) + + vis_timer = None + log_cfl = LogUserQuantity(name="cfl", value=current_cfl) + + if logmgr: + logmgr_add_cl_device_info(logmgr, queue) + logmgr_set_time(logmgr, current_step, current_t) + logmgr.add_quantity(log_cfl, interval=nstatus) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s, "), + ("cfl.max", "cfl = {value:1.4f}\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s\n") + ]) + + if log_dependent: + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, + units_for_logging) + logmgr.add_watches([ + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), + ("max_temperature", "{value:7g})\n"), + ]) + + try: + logmgr.add_watches(["memory_usage.max"]) + except KeyError: + pass + + if use_profiling: + logmgr.add_watches(["pyopencl_array_time.max"]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + visualizer = make_visualizer(discr) + + initname = "pseudoY0" + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, + order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, + t_final=t_final, + nstatus=nstatus, + nviz=nviz, + cfl=current_cfl, + constant_cfl=constant_cfl, + initname=initname, + eosname=eosname, + casename=casename) + if rank == 0: + logger.info(init_message) + + def sponge(cv, cv_ref, sigma): + return (sigma*(cv_ref - cv)) + + def my_rhs(t, state): + return ( + ns_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) + + make_conserved( + dim, q=av_operator(discr, q=state.join(), boundaries=boundaries, + boundary_kwargs={"time": t, "eos": eos}, + alpha=alpha_sc, s0=s0_sc, kappa=kappa_sc) + ) + sponge(cv=state, cv_ref=ref_state, sigma=sponge_sigma) + ) + + def my_write_viz(step, t, dt, state, dv=None, tagged_cells=None, ts_field=None): + if dv is None: + dv = eos.dependent_vars(state) + if tagged_cells is None: + tagged_cells = smoothness_indicator(discr, state.mass, s0=s0_sc, + kappa=kappa_sc) + if ts_field is None: + ts_field, cfl, dt = my_get_timestep(t, dt, state) + + viz_fields = [("cv", state), + ("dv", dv), + ("sponge_sigma", gen_sponge()), + ("tagged_cells", tagged_cells), + ("dt" if constant_cfl else "cfl", ts_field)] + write_visfile(discr, viz_fields, visualizer, vizname=vizname, + step=step, t=t, overwrite=True) + + def my_write_restart(step, t, state): + restart_fname = restart_pattern.format(cname=casename, step=step, rank=rank) + if restart_fname != restart_filename: + restart_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + write_restart_file(actx, restart_data, restart_fname, comm) + + def my_health_check(dv): + health_error = False + if check_naninf_local(discr, "vol", dv.pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + if check_range_local(discr, "vol", dv.pressure, + health_pres_min, health_pres_max): + health_error = True + logger.info(f"{rank=}: Pressure range violation.") + + return health_error + + def my_get_timestep(t, dt, state): + t_remaining = max(0, t_final - t) + if constant_cfl: + from mirgecom.viscous import get_viscous_timestep + ts_field = current_cfl * get_viscous_timestep(discr, eos=eos, cv=state) + from grudge.op import nodal_min + dt = nodal_min(discr, "vol", ts_field) + cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + ts_field = get_viscous_cfl(discr, eos=eos, dt=dt, cv=state) + from grudge.op import nodal_max + cfl = nodal_max(discr, "vol", ts_field) + + return ts_field, cfl, min(t_remaining, dt) + + def my_pre_step(step, t, dt, state): + try: + dv = None + + if logmgr: + logmgr.tick_before() + + ts_field, cfl, dt = my_get_timestep(t, dt, state) + log_cfl.set_quantity(cfl) + + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + + if do_health: + dv = eos.dependent_vars(state) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(dv), comm, + op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, dt=dt, state=state) + my_write_restart(step=step, t=t, state=state) + raise + + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + if rank == 0: + logging.info("Stepping.") + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + + (current_step, current_t, current_state) = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, + state=current_state, dt=current_dt, + t_final=t_final, t=current_t, istep=current_step) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = eos.dependent_vars(current_state) + my_write_viz(step=current_step, t=current_t, dt=current_dt, state=current_state, + dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + exit() + + +if __name__ == "__main__": + import sys + + logging.basicConfig(format="%(message)s", level=logging.INFO) + + import argparse + parser = argparse.ArgumentParser( + description="MIRGE-Com Isentropic Nozzle Driver") + parser.add_argument("-r", "--restart_file", type=ascii, dest="restart_file", + nargs="?", action="store", help="simulation restart file") + parser.add_argument("-i", "--input_file", type=ascii, dest="input_file", + nargs="?", action="store", help="simulation config file") + parser.add_argument("-c", "--casename", type=ascii, dest="casename", + nargs="?", action="store", help="simulation case name") + parser.add_argument("--profile", action="store_true", default=False, + help="enable kernel profiling [OFF]") + parser.add_argument("--log", action="store_true", default=False, + help="enable logging profiling [ON]") + parser.add_argument("--lazy", action="store_true", default=False, + help="enable lazy evaluation [OFF]") + args = parser.parse_args() + + # for writing output + casename = "nozzle" + if args.casename: + print(f"Custom casename {args.casename}") + casename = args.casename.replace("'", "") + else: + print(f"Default casename {casename}") + + if args.profile: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + restart_filename = None + if args.restart_file: + restart_filename = (args.restart_file).replace("'", "") + print(f"Restarting from file: {restart_filename}") + + input_file = None + if args.input_file: + input_file = args.input_file.replace("'", "") + print(f"Reading user input from file: {input_file}") + else: + print("No user input file, using default values") + + print(f"Running {sys.argv[0]}\n") + main(restart_filename=restart_filename, use_profiling=args.profile, + use_logmgr=args.log, user_input_file=input_file, + actx_class=actx_class, casename=casename) + +# vim: foldmethod=marker From 172f5ef342efe99c31c225aa622bc5966d39c0e7 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 1 Sep 2021 13:32:03 -0700 Subject: [PATCH 209/873] Add quick temporary util to get boundary info for performance debugging --- mirgecom/simutil.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 5a792ae76..8e2106cc9 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -14,6 +14,7 @@ .. autofunction:: compare_fluid_solutions .. autofunction:: check_naninf_local .. autofunction:: check_range_local +.. autofunction:: boundary_report Mesh utilities -------------- @@ -262,7 +263,50 @@ def generate_and_distribute_mesh(comm, generate_mesh): return local_mesh, global_nelements +def boundary_report(discr, boundaries, outfile_name): + """Generate a report of the grid boundaries.""" + comm = discr.mpi_communicator + actx = discr._setup_actx + nproc = 1 + rank = 0 + if comm is not None: + nproc = comm.Get_size() + rank = comm.Get_rank() + local_header = f"nproc: {nproc}\nrank: {rank}\n" + from io import StringIO + local_report = StringIO(local_header) + local_report.seek(0, 2) + from meshmode.dof_array import thaw + for btag in boundaries: + boundary_discr = discr.discr_from_dd(btag) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + local_report.write(f"{btag}: {nnodes}\n") + + if nproc > 1: + from meshmode.mesh import BTAG_PARTITION + from grudge.trace_pair import connected_ranks + remote_ranks = connected_ranks(discr) + local_report.write(f"remote_ranks: {remote_ranks}\n") + rank_nodes = [] + for remote_rank in remote_ranks: + boundary_discr = discr.discr_from_dd(BTAG_PARTITION(remote_rank)) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + rank_nodes.append(nnodes) + local_report.write(f"nnodes_pb: {rank_nodes}\n") + + local_report.write("-----\n") + local_report.seek(0) + + for irank in range(nproc): + if irank == rank: + f = open(outfile_name, "a+") + f.write(local_report.read()) + f.close() + if comm is not None: + comm.barrier() + + def create_parallel_grid(comm, generate_grid): """Generate and distribute mesh compatibility interface.""" from warnings import warn From 116d768781c8877069673bf5b9fb02548dec7f36 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 1 Sep 2021 15:35:23 -0500 Subject: [PATCH 210/873] Placate flake8 --- mirgecom/simutil.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 8e2106cc9..e0003558f 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -263,10 +263,10 @@ def generate_and_distribute_mesh(comm, generate_mesh): return local_mesh, global_nelements + def boundary_report(discr, boundaries, outfile_name): """Generate a report of the grid boundaries.""" comm = discr.mpi_communicator - actx = discr._setup_actx nproc = 1 rank = 0 if comm is not None: @@ -277,7 +277,7 @@ def boundary_report(discr, boundaries, outfile_name): from io import StringIO local_report = StringIO(local_header) local_report.seek(0, 2) - from meshmode.dof_array import thaw + for btag in boundaries: boundary_discr = discr.discr_from_dd(btag) nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) @@ -306,7 +306,7 @@ def boundary_report(discr, boundaries, outfile_name): if comm is not None: comm.barrier() - + def create_parallel_grid(comm, generate_grid): """Generate and distribute mesh compatibility interface.""" from warnings import warn From b30e38337a870cf700efb195d1f1366b6fdd0df3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Sep 2021 02:09:19 -0500 Subject: [PATCH 211/873] Delete bozzle from y1-production - causes CI fail. --- examples/bozzle.py | 863 --------------------------------------------- 1 file changed, 863 deletions(-) delete mode 100644 examples/bozzle.py diff --git a/examples/bozzle.py b/examples/bozzle.py deleted file mode 100644 index d903a9d87..000000000 --- a/examples/bozzle.py +++ /dev/null @@ -1,863 +0,0 @@ -"""Production-like (nozzle-like) case in a box.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" -import os -import yaml -import logging -import numpy as np -import pyopencl as cl -import numpy.linalg as la # noqa -import pyopencl.array as cla # noqa -from functools import partial -import math - -from meshmode.dof_array import thaw -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.dof_desc import DTAG_BOUNDARY -from grudge.eager import EagerDGDiscretization -from grudge.shortcuts import make_visualizer - -from meshmode.array_context import ( - PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext - -from mirgecom.navierstokes import ns_operator -from mirgecom.fluid import make_conserved -from mirgecom.artificial_viscosity import (av_operator, smoothness_indicator) -from mirgecom.simutil import ( - check_step, - generate_and_distribute_mesh, - write_visfile, - check_naninf_local, - check_range_local, - get_sim_timestep -) -from mirgecom.restart import write_restart_file -from mirgecom.io import make_init_message -from mirgecom.mpi import mpi_entry_point -import pyopencl.tools as cl_tools -# from mirgecom.checkstate import compare_states -from mirgecom.integrators import (rk4_step, lsrk54_step, lsrk144_step, - euler_step) -from mirgecom.steppers import advance_state -from mirgecom.boundary import ( - PrescribedInviscidBoundary, - IsothermalNoSlipBoundary -) -from mirgecom.initializers import (Uniform, PlanarDiscontinuity) -from mirgecom.eos import IdealSingleGas -from mirgecom.transport import SimpleTransport - -from logpyle import IntervalTimer, set_dt -from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.logging_quantities import ( - initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_cl_device_info, logmgr_set_time, LogUserQuantity, - set_sim_state -) - -logger = logging.getLogger(__name__) - - -class MyRuntimeError(RuntimeError): - """Simple exception to kill the simulation.""" - - pass - - -def get_pseudo_y0_mesh(): - """Generate or import a grid using `gmsh`. - - Input required: - data/pseudoY0.brep (for mesh gen) - -or- - data/pseudoY0.msh (read existing mesh) - - This routine will generate a new grid if it does - not find the grid file (data/pseudoY0.msh), but - note that if the grid is generated in millimeters, - then the solution initialization and BCs need to be - adjusted or the grid needs to be scaled up to meters - before being used with the current main driver in this - example. - """ - from meshmode.mesh.io import (read_gmsh, generate_gmsh, - ScriptWithFilesSource) - if os.path.exists("data/pseudoY1nozzle.msh") is False: - mesh = generate_gmsh(ScriptWithFilesSource( - """ - Merge "data/pseudoY1nozzle.brep"; - Mesh.CharacteristicLengthMin = 1; - Mesh.CharacteristicLengthMax = 10; - Mesh.ElementOrder = 2; - Mesh.CharacteristicLengthExtendFromBoundary = 0; - - // Inside and end surfaces of nozzle/scramjet - Field[1] = Distance; - Field[1].NNodesByEdge = 100; - Field[1].FacesList = {5,7,8,9,10}; - Field[2] = Threshold; - Field[2].IField = 1; - Field[2].LcMin = 1; - Field[2].LcMax = 10; - Field[2].DistMin = 0; - Field[2].DistMax = 20; - - // Edges separating surfaces with boundary layer - // refinement from those without - // (Seems to give a smoother transition) - Field[3] = Distance; - Field[3].NNodesByEdge = 100; - Field[3].EdgesList = {5,10,14,16}; - Field[4] = Threshold; - Field[4].IField = 3; - Field[4].LcMin = 1; - Field[4].LcMax = 10; - Field[4].DistMin = 0; - Field[4].DistMax = 20; - - // Min of the two sections above - Field[5] = Min; - Field[5].FieldsList = {2,4}; - - Background Field = 5; - """, ["data/pseudoY1nozzle.brep"]), 3, target_unit="MM") - else: - mesh = read_gmsh("data/pseudoY1nozzle.msh") - - return mesh - - -@mpi_entry_point -def main(ctx_factory=cl.create_some_context, restart_filename=None, - use_profiling=False, use_logmgr=False, user_input_file=None, - actx_class=PyOpenCLArrayContext, casename=None): - """Drive the Y0 nozzle example.""" - cl_ctx = ctx_factory() - - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nparts = comm.Get_size() - - if casename is None: - casename = "mirgecom" - - # logging and profiling - logmgr = initialize_logmgr(use_logmgr, - filename=f"{casename}.sqlite", mode="wo", mpi_comm=comm) - - if use_profiling: - queue = cl.CommandQueue(cl_ctx, - properties=cl.command_queue_properties.PROFILING_ENABLE) - else: - queue = cl.CommandQueue(cl_ctx) - - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - # Most of these can be set by the user input file - - # default i/o junk frequencies - nviz = 100 - nrestart = 100 - nhealth = 100 - nstatus = 1 - log_dependent = 1 - - # default timestepping control - integrator = "rk4" - current_dt = 5.0e-8 - t_final = 5.0e-6 - current_cfl = 1.0 - current_t = 0 - constant_cfl = False - current_step = 0 - - # default health status bounds - health_pres_min = 1.0e-1 - health_pres_max = 2.0e6 - - # discretization and model control - order = 1 - alpha_sc = 0.5 - s0_sc = -5.0 - kappa_sc = 0.5 - weak_scale = 1 - - if user_input_file: - input_data = None - if rank == 0: - with open(user_input_file) as f: - input_data = yaml.load(f, Loader=yaml.FullLoader) - input_data = comm.bcast(input_data, root=0) - try: - weak_scale = float(input_data["wscale"]) - except KeyError: - pass - try: - nviz = int(input_data["nviz"]) - except KeyError: - pass - try: - nrestart = int(input_data["nrestart"]) - except KeyError: - pass - try: - nhealth = int(input_data["nhealth"]) - except KeyError: - pass - try: - nstatus = int(input_data["nstatus"]) - except KeyError: - pass - try: - log_dependent = int(input_data["logDependent"]) - except KeyError: - pass - try: - current_dt = float(input_data["current_dt"]) - except KeyError: - pass - try: - t_final = float(input_data["t_final"]) - except KeyError: - pass - try: - alpha_sc = float(input_data["alpha_sc"]) - except KeyError: - pass - try: - kappa_sc = float(input_data["kappa_sc"]) - except KeyError: - pass - try: - s0_sc = float(input_data["s0_sc"]) - except KeyError: - pass - try: - order = int(input_data["order"]) - except KeyError: - pass - try: - integrator = input_data["integrator"] - except KeyError: - pass - try: - health_pres_min = float(input_data["health_pres_min"]) - except KeyError: - pass - try: - health_pres_max = float(input_data["health_pres_max"]) - except KeyError: - pass - - # param sanity check - allowed_integrators = ["rk4", "euler", "lsrk54", "lsrk144"] - if integrator not in allowed_integrators: - error_message = "Invalid time integrator: {}".format(integrator) - raise RuntimeError(error_message) - - if rank == 0: - print("#### Simluation control data: ####") - print(f"\tnviz = {nviz}") - print(f"\tnrestart = {nrestart}") - print(f"\tnhealth = {nhealth}") - print(f"\tnstatus = {nstatus}") - print(f"\tcurrent_dt = {current_dt}") - print(f"\tt_final = {t_final}") - print(f"\torder = {order}") - print(f"\tShock capturing parameters: alpha {alpha_sc}, " - f"s0 {s0_sc}, kappa {kappa_sc}") - print(f"\tTime integration {integrator}") - if log_dependent: - print("\tDependent variable logging is ON.") - else: - print("\tDependent variable logging is OFF.") - print("#### Simluation control data: ####") - - timestepper = rk4_step - if integrator == "euler": - timestepper = euler_step - if integrator == "lsrk54": - timestepper = lsrk54_step - if integrator == "lsrk144": - timestepper = lsrk144_step - - dim = 3 - vel_inflow = np.zeros(shape=(dim, )) - vel_outflow = np.zeros(shape=(dim, )) - - # working gas: CO2 # - # gamma = 1.289 - # MW=44.009 g/mol - # cp = 37.135 J/mol-K, - # rho= 1.977 kg/m^3 @298K - gamma_co2 = 1.289 - r_co2 = 8314.59/44.009 - - # background - # 100 Pa - # 298 K - # rho = 1.77619667e-3 kg/m^3 - # velocity = 0,0,0 - rho_bkrnd = 1.77619667e-3 - pres_bkrnd = 100 - temp_bkrnd = 298 - - # nozzle inflow # - # - # stagnation tempertuare 298 K - # stagnation pressure 1.5e Pa - # - # isentropic expansion based on the area ratios between the inlet (r=13e-3m) - # and the throat (r=6.3e-3) - # - # calculate the inlet Mach number from the area ratio - nozzle_inlet_radius = 13.0e-3 - nozzle_throat_radius = 6.3e-3 - nozzle_inlet_area = math.pi*nozzle_inlet_radius*nozzle_inlet_radius - nozzle_throat_area = math.pi*nozzle_throat_radius*nozzle_throat_radius - inlet_area_ratio = nozzle_inlet_area/nozzle_throat_area - - def get_mach_from_area_ratio(area_ratio, gamma, mach_guess=0.01): - error = 1.0e-8 - next_error = 1.0e8 - g = gamma - m0 = mach_guess - while next_error > error: - r_gas = ( - (((2/(g + 1) + ((g - 1)/(g + 1)*m0*m0))**(((g + 1)/(2*g - 2))))/m0 - - area_ratio) - ) - drdm = ( - (2*((2/(g + 1) + ((g - 1)/(g + 1)*m0*m0))**(((g + 1)/(2*g - 2)))) - / (2*g - 2)*(g - 1)/(2/(g + 1) + ((g - 1)/(g + 1)*m0*m0)) - - ((2/(g + 1) + ((g - 1)/(g + 1)*m0*m0))**(((g + 1)/(2*g - 2)))) - * m0**(-2)) - ) - m1 = m0 - r_gas/drdm - next_error = abs(r_gas) - m0 = m1 - - return m1 - - def get_isentropic_pressure(mach, p0, gamma): - pressure = (1. + (gamma - 1.)*0.5*math.pow(mach, 2)) - pressure = p0*math.pow(pressure, (-gamma / (gamma - 1.))) - return pressure - - def get_isentropic_temperature(mach, t0, gamma): - temperature = (1. + (gamma - 1.)*0.5*math.pow(mach, 2)) - temperature = t0*math.pow(temperature, -1.0) - return temperature - - inlet_mach = get_mach_from_area_ratio(area_ratio=inlet_area_ratio, - gamma=gamma_co2, - mach_guess=0.01) - # ramp the stagnation pressure - start_ramp_pres = 1000 - ramp_interval = 1.0e-3 - t_ramp_start = 1.0e-5 - pres_inflow = get_isentropic_pressure(mach=inlet_mach, - p0=start_ramp_pres, - gamma=gamma_co2) - temp_inflow = get_isentropic_temperature(mach=inlet_mach, - t0=298, - gamma=gamma_co2) - rho_inflow = pres_inflow / temp_inflow / r_co2 - end_ramp_pres = 150000 - pres_inflow_final = get_isentropic_pressure(mach=inlet_mach, - p0=end_ramp_pres, - gamma=gamma_co2) - vel_inflow[0] = inlet_mach * math.sqrt( - gamma_co2 * pres_inflow / rho_inflow) - - if rank == 0: - print(f"inlet Mach number {inlet_mach}") - print(f"inlet temperature {temp_inflow}") - print(f"inlet pressure {pres_inflow}") - print(f"final inlet pressure {pres_inflow_final}") - - mu = 1.e-5 - kappa = rho_bkrnd*mu/0.75 - transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa) - eos = IdealSingleGas( - gamma=gamma_co2, - gas_const=r_co2, - transport_model=transport_model - ) - bulk_init = PlanarDiscontinuity(dim=dim, disc_location=-.30, sigma=0.005, - temperature_left=temp_inflow, temperature_right=temp_bkrnd, - pressure_left=pres_inflow, pressure_right=pres_bkrnd, - velocity_left=vel_inflow, velocity_right=vel_outflow) - - # pressure ramp function - def inflow_ramp_pressure( - t, - start_p=start_ramp_pres, - final_p=end_ramp_pres, - ramp_interval=ramp_interval, - t_ramp_start=t_ramp_start - ): - return actx.np.where( - actx.np.greater(t, t_ramp_start), - actx.np.minimum( - final_p, - start_p + (t - t_ramp_start) / ramp_interval * (final_p - start_p)), - start_p) - - class IsentropicInflow: - def __init__(self, *, dim=1, direc=0, t0=298, p0=1e5, mach=0.01, p_fun=None): - - self._p0 = p0 - self._t0 = t0 - self._dim = dim - self._direc = direc - self._mach = mach - if p_fun is not None: - self._p_fun = p_fun - - def __call__(self, x_vec, *, time=0, eos, **kwargs): - - if self._p_fun is not None: - p0 = self._p_fun(time) - else: - p0 = self._p0 - t0 = self._t0 - - gamma = eos.gamma() - gas_const = eos.gas_const() - pressure = get_isentropic_pressure( - mach=self._mach, - p0=p0, - gamma=gamma - ) - temperature = get_isentropic_temperature( - mach=self._mach, - t0=t0, - gamma=gamma - ) - rho = pressure/temperature/gas_const - - velocity = np.zeros(self._dim, dtype=object) - velocity[self._direc] = self._mach*actx.np.sqrt(gamma*pressure/rho) - - mass = 0.0*x_vec[0] + rho - mom = velocity*mass - energy = (pressure/(gamma - 1.0)) + np.dot(mom, mom)/(2.0*mass) - return make_conserved( - dim=self._dim, - mass=mass, - momentum=mom, - energy=energy - ) - - inflow_init = IsentropicInflow( - dim=dim, - t0=298, - p0=start_ramp_pres, - mach=inlet_mach, - p_fun=inflow_ramp_pressure - ) - outflow_init = Uniform( - dim=dim, - rho=rho_bkrnd, - p=pres_bkrnd, - velocity=vel_outflow - ) - - inflow = PrescribedInviscidBoundary(fluid_solution_func=inflow_init) - outflow = PrescribedInviscidBoundary(fluid_solution_func=outflow_init) - wall = IsothermalNoSlipBoundary() - - boundaries = { - DTAG_BOUNDARY("Inflow"): inflow, - DTAG_BOUNDARY("Outflow"): outflow, - DTAG_BOUNDARY("Wall"): wall - } - - viz_path = "viz_data/" - vizname = viz_path + casename - restart_path = "restart_data/" - restart_pattern = ( - restart_path + "{cname}-{step:06d}-{rank:04d}.pkl" - ) - - if restart_filename: # read the grid from restart data - restart_filename = f"{restart_filename}-{rank:04d}.pkl" - - from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, restart_filename) - current_step = restart_data["step"] - current_t = restart_data["t"] - local_mesh = restart_data["local_mesh"] - local_nelements = local_mesh.nelements - global_nelements = restart_data["global_nelements"] - restart_order = int(restart_data["order"]) - - assert comm.Get_size() == restart_data["num_parts"] - else: - boundary_tag_to_face = { - "Inflow": ["-x"], - "Outflow": ["+x"], - "Wall": ["-y", "+y", "-z", "+z"] - } - scale = np.power(weak_scale, 1/dim) - box_ll = 0 - box_ur = .5*scale - nel_1d = int(8*scale) - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,) * dim, - b=(box_ur,) * dim, - nelements_per_axis=(nel_1d,) * dim, - boundary_tag_to_face=boundary_tag_to_face) - local_mesh, global_nelements = generate_and_distribute_mesh( - comm, - generate_mesh - ) - local_nelements = local_mesh.nelements - - if rank == 0: - logging.info("Making discretization") - - discr = EagerDGDiscretization(actx, - local_mesh, - order=order, - mpi_communicator=comm) - - nodes = thaw(actx, discr.nodes()) - - # initialize the sponge field - def gen_sponge(): - thickness = 0.15 - amplitude = 1.0/current_dt/25.0 - x0 = 0.05 - - return amplitude * actx.np.where( - actx.np.greater(nodes[0], x0), - zeros + ((nodes[0] - x0) / thickness) * ((nodes[0] - x0) / thickness), - zeros + 0.0, - ) - - zeros = 0 * nodes[0] - sponge_sigma = gen_sponge() - ref_state = bulk_init(x_vec=nodes, eos=eos, time=0.0) - - if restart_filename: - if rank == 0: - logging.info("Restarting soln.") - current_state = restart_data["state"] - if restart_order != order: - restart_discr = EagerDGDiscretization( - actx, - local_mesh, - order=restart_order, - mpi_communicator=comm) - from meshmode.discretization.connection import make_same_mesh_connection - connection = make_same_mesh_connection( - actx, - discr.discr_from_dd("vol"), - restart_discr.discr_from_dd("vol") - ) - restart_state = restart_data["state"] - current_state = connection(restart_state) - else: - if rank == 0: - logging.info("Initializing soln.") - # for Discontinuity initial conditions - current_state = bulk_init(x_vec=nodes, eos=eos, time=0.0) - # for uniform background initial condition - # current_state = bulk_init(nodes, eos=eos) - - vis_timer = None - log_cfl = LogUserQuantity(name="cfl", value=current_cfl) - - if logmgr: - logmgr_add_cl_device_info(logmgr, queue) - logmgr_set_time(logmgr, current_step, current_t) - logmgr.add_quantity(log_cfl, interval=nstatus) - - logmgr.add_watches([ - ("step.max", "step = {value}, "), - ("t_sim.max", "sim time: {value:1.6e} s, "), - ("cfl.max", "cfl = {value:1.4f}\n"), - ("t_step.max", "------- step walltime: {value:6g} s, "), - ("t_log.max", "log walltime: {value:6g} s\n") - ]) - - if log_dependent: - logmgr_add_many_discretization_quantities(logmgr, discr, dim, - extract_vars_for_logging, - units_for_logging) - logmgr.add_watches([ - ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), - ("max_pressure", "{value:1.9e})\n"), - ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), - ("max_temperature", "{value:7g})\n"), - ]) - - try: - logmgr.add_watches(["memory_usage.max"]) - except KeyError: - pass - - if use_profiling: - logmgr.add_watches(["pyopencl_array_time.max"]) - - vis_timer = IntervalTimer("t_vis", "Time spent visualizing") - logmgr.add_quantity(vis_timer) - - visualizer = make_visualizer(discr) - - initname = "pseudoY0" - eosname = eos.__class__.__name__ - init_message = make_init_message(dim=dim, - order=order, - nelements=local_nelements, - global_nelements=global_nelements, - dt=current_dt, - t_final=t_final, - nstatus=nstatus, - nviz=nviz, - cfl=current_cfl, - constant_cfl=constant_cfl, - initname=initname, - eosname=eosname, - casename=casename) - if rank == 0: - logger.info(init_message) - - def sponge(cv, cv_ref, sigma): - return (sigma*(cv_ref - cv)) - - def my_rhs(t, state): - return ( - ns_operator(discr, cv=state, t=t, boundaries=boundaries, eos=eos) - + make_conserved( - dim, q=av_operator(discr, q=state.join(), boundaries=boundaries, - boundary_kwargs={"time": t, "eos": eos}, - alpha=alpha_sc, s0=s0_sc, kappa=kappa_sc) - ) + sponge(cv=state, cv_ref=ref_state, sigma=sponge_sigma) - ) - - def my_write_viz(step, t, dt, state, dv=None, tagged_cells=None, ts_field=None): - if dv is None: - dv = eos.dependent_vars(state) - if tagged_cells is None: - tagged_cells = smoothness_indicator(discr, state.mass, s0=s0_sc, - kappa=kappa_sc) - if ts_field is None: - ts_field, cfl, dt = my_get_timestep(t, dt, state) - - viz_fields = [("cv", state), - ("dv", dv), - ("sponge_sigma", gen_sponge()), - ("tagged_cells", tagged_cells), - ("dt" if constant_cfl else "cfl", ts_field)] - write_visfile(discr, viz_fields, visualizer, vizname=vizname, - step=step, t=t, overwrite=True) - - def my_write_restart(step, t, state): - restart_fname = restart_pattern.format(cname=casename, step=step, rank=rank) - if restart_fname != restart_filename: - restart_data = { - "local_mesh": local_mesh, - "state": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - write_restart_file(actx, restart_data, restart_fname, comm) - - def my_health_check(dv): - health_error = False - if check_naninf_local(discr, "vol", dv.pressure): - health_error = True - logger.info(f"{rank=}: NANs/Infs in pressure data.") - - if check_range_local(discr, "vol", dv.pressure, - health_pres_min, health_pres_max): - health_error = True - logger.info(f"{rank=}: Pressure range violation.") - - return health_error - - def my_get_timestep(t, dt, state): - t_remaining = max(0, t_final - t) - if constant_cfl: - from mirgecom.viscous import get_viscous_timestep - ts_field = current_cfl * get_viscous_timestep(discr, eos=eos, cv=state) - from grudge.op import nodal_min - dt = nodal_min(discr, "vol", ts_field) - cfl = current_cfl - else: - from mirgecom.viscous import get_viscous_cfl - ts_field = get_viscous_cfl(discr, eos=eos, dt=dt, cv=state) - from grudge.op import nodal_max - cfl = nodal_max(discr, "vol", ts_field) - - return ts_field, cfl, min(t_remaining, dt) - - def my_pre_step(step, t, dt, state): - try: - dv = None - - if logmgr: - logmgr.tick_before() - - ts_field, cfl, dt = my_get_timestep(t, dt, state) - log_cfl.set_quantity(cfl) - - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - - if do_health: - dv = eos.dependent_vars(state) - from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(dv), comm, - op=MPI.LOR) - if health_errors: - if rank == 0: - logger.info("Fluid solution failed health check.") - raise MyRuntimeError("Failed simulation health check.") - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - if dv is None: - dv = eos.dependent_vars(state) - my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv) - - except MyRuntimeError: - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, dt=dt, state=state) - my_write_restart(step=step, t=t, state=state) - raise - - return state, dt - - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - - if rank == 0: - logging.info("Stepping.") - - current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) - - (current_step, current_t, current_state) = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_pre_step, - post_step_callback=my_post_step, - state=current_state, dt=current_dt, - t_final=t_final, t=current_t, istep=current_step) - - # Dump the final data - if rank == 0: - logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) - my_write_viz(step=current_step, t=current_t, dt=current_dt, state=current_state, - dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) - - if logmgr: - logmgr.close() - elif use_profiling: - print(actx.tabulate_profiling_data()) - - exit() - - -if __name__ == "__main__": - import sys - - logging.basicConfig(format="%(message)s", level=logging.INFO) - - import argparse - parser = argparse.ArgumentParser( - description="MIRGE-Com Isentropic Nozzle Driver") - parser.add_argument("-r", "--restart_file", type=ascii, dest="restart_file", - nargs="?", action="store", help="simulation restart file") - parser.add_argument("-i", "--input_file", type=ascii, dest="input_file", - nargs="?", action="store", help="simulation config file") - parser.add_argument("-c", "--casename", type=ascii, dest="casename", - nargs="?", action="store", help="simulation case name") - parser.add_argument("--profile", action="store_true", default=False, - help="enable kernel profiling [OFF]") - parser.add_argument("--log", action="store_true", default=False, - help="enable logging profiling [ON]") - parser.add_argument("--lazy", action="store_true", default=False, - help="enable lazy evaluation [OFF]") - args = parser.parse_args() - - # for writing output - casename = "nozzle" - if args.casename: - print(f"Custom casename {args.casename}") - casename = args.casename.replace("'", "") - else: - print(f"Default casename {casename}") - - if args.profile: - if args.lazy: - raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext - - restart_filename = None - if args.restart_file: - restart_filename = (args.restart_file).replace("'", "") - print(f"Restarting from file: {restart_filename}") - - input_file = None - if args.input_file: - input_file = args.input_file.replace("'", "") - print(f"Reading user input from file: {input_file}") - else: - print("No user input file, using default values") - - print(f"Running {sys.argv[0]}\n") - main(restart_filename=restart_filename, use_profiling=args.profile, - use_logmgr=args.log, user_input_file=input_file, - actx_class=actx_class, casename=casename) - -# vim: foldmethod=marker From 8c953dd6424b375f5959bdb175e04540574e76a1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 17 Sep 2021 11:26:51 -0500 Subject: [PATCH 212/873] mix-enable adiabaticnoslip --- mirgecom/boundary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 18364b3d4..a088062e5 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -434,7 +434,7 @@ def exterior_soln(self, discr, cv, btag, **kwargs): # Form the external boundary solution with the new momentum return make_conserved(dim=dim, mass=int_cv.mass, energy=int_cv.energy, - momentum=ext_mom) + momentum=ext_mom, species_mass=int_cv.species_mass) def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): """Get the exterior solution on the boundary.""" From fc11f40260f3dd73f570bf13f1b9a7e1b32cbe3e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 20 Sep 2021 10:13:11 -0500 Subject: [PATCH 213/873] Switch-up production testing env temporarily --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 1adeba830..6d9ff38d5 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="test-y1" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 9bb772f47dbfc632880912b8e1553c7e79f2b4d2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 20 Sep 2021 10:29:15 -0500 Subject: [PATCH 214/873] Update production install cause we are testing production branch itself --- .ci-support/production-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 00b7f228c..d74c1142c 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -34,7 +34,7 @@ if [ -n "$DEVELOPMENT_BRANCH" ]; then fi DEVELOPMENT_BRANCH=${DEVELOPMENT_BRANCH:-"main"} DEVELOPMENT_FORK=${DEVELOPMENT_FORK:-"illinois-ceesd"} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"tesy-y1"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} echo "Production environment settings:" From 5ad71c26609f5b761443126245a978ae0dd52432 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 20 Sep 2021 10:46:50 -0500 Subject: [PATCH 215/873] Update production install cause we are testing production branch itself --- .ci-support/production-install.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index d74c1142c..2440a4372 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -23,6 +23,7 @@ set -x if [ -n "$DEVELOPMENT_BRANCH" ]; then + echo "Preparing production environment for branch: ${DEVELOPMENT_BRANCH}." PRODUCTION_ENV_FILE="$1" if [ -e "$PRODUCTION_ENV_FILE" ]; then echo "Reading production configuration for ${DEVELOPMENT_BRANCH}." @@ -31,10 +32,13 @@ if [ -n "$DEVELOPMENT_BRANCH" ]; then echo "Using default production configuration for ${DEVELOPMENT_BRANCH}." echo "To customize, set up .ci-support/production-testing-env.sh." fi +else + echo "No development branch specified, probably main branch." fi + DEVELOPMENT_BRANCH=${DEVELOPMENT_BRANCH:-"main"} DEVELOPMENT_FORK=${DEVELOPMENT_FORK:-"illinois-ceesd"} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"tesy-y1"} +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"test-y1"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} echo "Production environment settings:" From 4c81845fc8625a1428e8e7c1170b8f3b07dacd85 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 20 Sep 2021 11:06:49 -0500 Subject: [PATCH 216/873] Revert to usual env before merge with y1-production --- .ci-support/production-install.sh | 2 +- .ci-support/production-testing-env.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 2440a4372..57ee3a0c1 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -38,7 +38,7 @@ fi DEVELOPMENT_BRANCH=${DEVELOPMENT_BRANCH:-"main"} DEVELOPMENT_FORK=${DEVELOPMENT_FORK:-"illinois-ceesd"} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"test-y1"} +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} echo "Production environment settings:" diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 6d9ff38d5..1adeba830 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -export PRODUCTION_BRANCH="test-y1" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 9414674b27c9399db53b364ed80d25433ee38bb9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 22 Sep 2021 16:07:48 -0500 Subject: [PATCH 217/873] Use new thermochem wrapper class --- examples/autoignition-mpi.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 385bf9636..c51f628e3 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -67,7 +67,7 @@ ) import cantera -import pyrometheus as pyro +# import pyrometheus as pyro logger = logging.getLogger(__name__) @@ -246,7 +246,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - pyrometheus_mechanism = pyro.get_thermochem_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import make_thermochemistry_class + thermo_chem_class = make_thermochemistry_class(cantera_soln) + pyrometheus_mechanism = thermo_chem_class(actx) eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature) From e38759471e72a68b5b117702f087cc57d957f6b0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 22 Sep 2021 16:08:26 -0500 Subject: [PATCH 218/873] Add thermochem module --- mirgecom/thermochem.py | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 mirgecom/thermochem.py diff --git a/mirgecom/thermochem.py b/mirgecom/thermochem.py new file mode 100644 index 000000000..39a6ddf20 --- /dev/null +++ b/mirgecom/thermochem.py @@ -0,0 +1,68 @@ +r""":mod:`mirgecom.thermochem` provides a wrapper class for :mod:`pyrometheus`.. + +.. autofunction:: make_thermochemistry_class +""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + + +def make_thermochemisty_class(cantera_soln): + """Create thermochemistry class.""" + import pyrometheus as pyro + pyro_class = pyro.get_thermochem_class(cantera_soln) + + class ThermoChem(pyro_class): + + def get_concentrations(self, rho, mass_fractions): + concs = self.iwts * rho * mass_fractions + # ensure non-negative concentrations + zero = self._pyro_zeros_like(concs[0]) + for i, conc in enumerate(concs): + concs[i] = self.usr_np.where(self.usr_np.less(concs[i], 0), + zero, concs[i]) + return concs + + def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): + if do_energy is False: + pv_fun = self.get_mixture_specific_heat_cp_mass + he_fun = self.get_mixture_enthalpy_mass + else: + pv_fun = self.get_mixture_specific_heat_cv_mass + he_fun = self.get_mixture_internal_energy_mass + + num_iter = 10 + ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 + t_i = t_guess * ones + + for _ in range(num_iter): + f = enthalpy_or_energy - he_fun(t_i, y) + j = -pv_fun(t_i, y) + dt = -f / j + t_i += dt + # if self._pyro_norm(dt, np.inf) < tol: + + return t_i + + return ThermoChem From 4164b266af8b96cae6adac83449ec02c99e60355 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 22 Sep 2021 17:45:29 -0500 Subject: [PATCH 219/873] Fix up interface a bit --- examples/autoignition-mpi.py | 6 ++--- .../{thermochem.py => thermochemistry.py} | 22 +++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) rename mirgecom/{thermochem.py => thermochemistry.py} (74%) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index c51f628e3..c19513a39 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -246,10 +246,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_thermochemistry_class - thermo_chem_class = make_thermochemistry_class(cantera_soln) - pyrometheus_mechanism = thermo_chem_class(actx) - eos = PyrometheusMixture(pyrometheus_mechanism, + from mirgecom.thermochemistry import make_pyrometheus_mechanism + eos = PyrometheusMixture(make_pyrometheus_mechanism(actx, cantera_soln), temperature_guess=init_temperature) # }}} diff --git a/mirgecom/thermochem.py b/mirgecom/thermochemistry.py similarity index 74% rename from mirgecom/thermochem.py rename to mirgecom/thermochemistry.py index 39a6ddf20..bafcdfa13 100644 --- a/mirgecom/thermochem.py +++ b/mirgecom/thermochemistry.py @@ -1,6 +1,6 @@ r""":mod:`mirgecom.thermochem` provides a wrapper class for :mod:`pyrometheus`.. -.. autofunction:: make_thermochemistry_class +.. autofunction:: make_pyrometheus_mechanism """ __copyright__ = """ @@ -28,22 +28,32 @@ """ -def make_thermochemisty_class(cantera_soln): - """Create thermochemistry class.""" +def _pyro_thermochem_class(cantera_soln): + """Return Pyrometheus thermochemistry class. + + Dynamically creates a class that inherits from a :mod:`pyrometheus.ThermoChem` + and overrides a couple of the functions for MIRGE-Com compatibility. + """ import pyrometheus as pyro pyro_class = pyro.get_thermochem_class(cantera_soln) class ThermoChem(pyro_class): + # This bit disallows negative concentrations and instead + # pins them to 0. mass_fractions can sometimes be slightly + # negative and that's ok. def get_concentrations(self, rho, mass_fractions): concs = self.iwts * rho * mass_fractions # ensure non-negative concentrations zero = self._pyro_zeros_like(concs[0]) - for i, conc in enumerate(concs): + for i in range(self.num_species): concs[i] = self.usr_np.where(self.usr_np.less(concs[i], 0), zero, concs[i]) return concs + # This hard-codes the Newton iterations to 10 because the convergence + # check is not compatible with lazy evaluation. Instead, we plan to check + # the temperature residual at simulation health checking time. def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): if do_energy is False: pv_fun = self.get_mixture_specific_heat_cp_mass @@ -66,3 +76,7 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): return t_i return ThermoChem + + +def make_pyrometheus_mechanism(actx, cantera_soln): + return _pyro_thermochem_class(cantera_soln)(actx.np) From e7a907cd7812e16d76bc7cc87702dc49fdce46c6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 22 Sep 2021 17:49:46 -0500 Subject: [PATCH 220/873] Remove stale comment --- examples/autoignition-mpi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index c19513a39..e5c467a9e 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -67,7 +67,6 @@ ) import cantera -# import pyrometheus as pyro logger = logging.getLogger(__name__) From 4ebf39c5abd674927b5ec1aff6f295f4cea28b73 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 22 Sep 2021 18:33:55 -0500 Subject: [PATCH 221/873] Add doc hook --- doc/support/thermochem.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/support/thermochem.rst b/doc/support/thermochem.rst index 864019825..21a0ae4e9 100644 --- a/doc/support/thermochem.rst +++ b/doc/support/thermochem.rst @@ -2,3 +2,4 @@ Thermochemistry mechanism management ==================================== .. automodule:: mirgecom.mechanisms +.. automodule:: mirgecom.thermochemistry From e76737930a71711ebe50fdc7ded9a1bed946ee64 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 22 Sep 2021 19:04:35 -0500 Subject: [PATCH 222/873] Sharpen the docs. --- mirgecom/thermochemistry.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index bafcdfa13..8af2b15e2 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,4 +1,4 @@ -r""":mod:`mirgecom.thermochem` provides a wrapper class for :mod:`pyrometheus`.. +r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. .. autofunction:: make_pyrometheus_mechanism """ @@ -28,16 +28,16 @@ """ -def _pyro_thermochem_class(cantera_soln): - """Return Pyrometheus thermochemistry class. +def _pyro_thermochem_wrapper_class(cantera_soln): + """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. - Dynamically creates a class that inherits from a :mod:`pyrometheus.ThermoChem` + Dynamically creates a class that inherits from a :mod:`pyrometheus` instance and overrides a couple of the functions for MIRGE-Com compatibility. """ import pyrometheus as pyro pyro_class = pyro.get_thermochem_class(cantera_soln) - class ThermoChem(pyro_class): + class PyroWrapper(pyro_class): # This bit disallows negative concentrations and instead # pins them to 0. mass_fractions can sometimes be slightly @@ -54,6 +54,7 @@ def get_concentrations(self, rho, mass_fractions): # This hard-codes the Newton iterations to 10 because the convergence # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. + # FIXME: Occasional convergence check is other-than-ideal; revisit asap. def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): if do_energy is False: pv_fun = self.get_mixture_specific_heat_cp_mass @@ -75,8 +76,26 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): return t_i - return ThermoChem + return PyroWrapper def make_pyrometheus_mechanism(actx, cantera_soln): - return _pyro_thermochem_class(cantera_soln)(actx.np) + """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism object. + + This routine creates and returns an instance of a :mod:`pyrometheus` + thermochemical mechanism for use in a MIRGE-Com fluid EOS. It requires a + Cantera Solution and an array context. + + Parameters + ---------- + actx: :class:`arraycontext.ArrayContext` + Array context from which to get the numpy-like namespace for + :mod:`pyrometheus` + cantera_soln: + Cantera Solution for the thermochemical mechanism to be used + + Returns + ------- + :mod:`pyrometheus` ThermoChem class + """ + return _pyro_thermochem_wrapper_class(cantera_soln)(actx.np) From 273db876ee7a7fec35e42e35448ca35d4c368c1c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 24 Sep 2021 07:48:56 -0500 Subject: [PATCH 223/873] Add example of periodic convergence checking. --- examples/autoignition-mpi.py | 17 +++++++++++++---- mirgecom/thermochemistry.py | 23 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index e5c467a9e..41d94cf43 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -246,8 +246,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. from mirgecom.thermochemistry import make_pyrometheus_mechanism - eos = PyrometheusMixture(make_pyrometheus_mechanism(actx, cantera_soln), - temperature_guess=init_temperature) + pyro_mechanism = make_pyrometheus_mechanism(actx, cantera_soln) + eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) # }}} @@ -355,7 +355,7 @@ def my_write_restart(step, t, state): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(dv): + def my_health_check(cv, dv): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -367,6 +367,15 @@ def my_health_check(dv): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") + y = cv.species_mass_fractions + e = eos.internal_energy(cv) / cv.mass + temp_resid = pyro_mechanism.get_temperature_residual( + e, dv.temperature, y, True + ) + if temp_resid < 1e-32: + health_error = True + logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") + return health_error def my_get_timestep(t, dt, state): @@ -402,7 +411,7 @@ def my_pre_step(step, t, dt, state): if do_health: dv = eos.dependent_vars(state) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(dv), comm, op=MPI.LOR) + health_errors = allsync(my_health_check(state, dv), comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 8af2b15e2..239d748fe 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -27,6 +27,8 @@ THE SOFTWARE. """ +import numpy as np + def _pyro_thermochem_wrapper_class(cantera_soln): """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. @@ -76,6 +78,27 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): return t_i + # This hard-codes the Newton iterations to 10 because the convergence + # check is not compatible with lazy evaluation. Instead, we plan to check + # the temperature residual at simulation health checking time. + # FIXME: Occasional convergence check is other-than-ideal; revisit asap. + def get_temperature_residual(self, enthalpy_or_energy, t_guess, y, + do_energy=False): + if do_energy is False: + pv_fun = self.get_mixture_specific_heat_cp_mass + he_fun = self.get_mixture_enthalpy_mass + else: + pv_fun = self.get_mixture_specific_heat_cv_mass + he_fun = self.get_mixture_internal_energy_mass + + ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 + t_i = t_guess * ones + + f = enthalpy_or_energy - he_fun(t_i, y) + j = -pv_fun(t_i, y) + + return self._pryo_norm(-f / j, np.inf) + return PyroWrapper From ec1e8287ab11e4b77b1fa2144c543db9d2ccc3ac Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 24 Sep 2021 08:13:33 -0500 Subject: [PATCH 224/873] Fix up convergence check mechanism. --- examples/autoignition-mpi.py | 3 ++- mirgecom/thermochemistry.py | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 41d94cf43..ac8a664a0 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -372,7 +372,8 @@ def my_health_check(cv, dv): temp_resid = pyro_mechanism.get_temperature_residual( e, dv.temperature, y, True ) - if temp_resid < 1e-32: + temp_resid = discr.norm(temp_resid, np.inf) + if temp_resid > 1e-12: health_error = True logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 239d748fe..cafe05c25 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -27,8 +27,6 @@ THE SOFTWARE. """ -import numpy as np - def _pyro_thermochem_wrapper_class(cantera_soln): """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. @@ -97,7 +95,7 @@ def get_temperature_residual(self, enthalpy_or_energy, t_guess, y, f = enthalpy_or_energy - he_fun(t_i, y) j = -pv_fun(t_i, y) - return self._pryo_norm(-f / j, np.inf) + return -f / j return PyroWrapper From 18e163c2304e60819938b3812a780edfd75b999b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 27 Sep 2021 12:43:44 -0500 Subject: [PATCH 225/873] Do not fail on temperature health. --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 60defd099..68f70c24b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -374,7 +374,7 @@ def my_health_check(cv, dv): ) temp_resid = discr.norm(temp_resid, np.inf) if temp_resid > 1e-12: - health_error = True + health_error = False logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") return health_error From aad670bbe5c28cbdac696614d6b80e79b4898090 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 27 Sep 2021 12:53:44 -0500 Subject: [PATCH 226/873] Add lazy pyro test --- test/pyro_state_data.txt | 10000 +++++++++++++++++++++++++++++++++++++ test/test_eos.py | 66 +- 2 files changed, 10065 insertions(+), 1 deletion(-) create mode 100644 test/pyro_state_data.txt diff --git a/test/pyro_state_data.txt b/test/pyro_state_data.txt new file mode 100644 index 000000000..4be149d9d --- /dev/null +++ b/test/pyro_state_data.txt @@ -0,0 +1,10000 @@ +0.00000000e+00 6.37292457e-02 2.18073376e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 7.18197378e-01 1.50000000e+03 +1.00000000e-07 6.37250603e-02 2.18065301e-01 9.08101328e-06 2.57815625e-06 1.47915085e-11 6.01503734e-07 7.18197378e-01 1.50009239e+03 +2.00000000e-07 6.37208717e-02 2.18055813e-01 2.20375887e-05 2.69624743e-06 5.92134994e-11 1.20347687e-06 7.18197378e-01 1.50020690e+03 +3.00000000e-07 6.37166795e-02 2.18046254e-01 3.51800432e-05 2.70304914e-06 1.33341942e-10 1.80595154e-06 7.18197378e-01 1.50032214e+03 +4.00000000e-07 6.37124837e-02 2.18036683e-01 4.83414664e-05 2.70482326e-06 2.37253309e-10 2.40892990e-06 7.18197378e-01 1.50043827e+03 +5.00000000e-07 6.37082845e-02 2.18027104e-01 6.15143302e-05 2.70637249e-06 3.71024239e-10 3.01241278e-06 7.18197378e-01 1.50056963e+03 +6.00000000e-07 6.37040817e-02 2.18017517e-01 7.46983104e-05 2.70791399e-06 5.34731588e-10 3.61640095e-06 7.18197378e-01 1.50066530e+03 +7.00000000e-07 6.36998754e-02 2.18007922e-01 8.78934090e-05 2.70945703e-06 7.28452435e-10 4.22089514e-06 7.18197378e-01 1.50077577e+03 +8.00000000e-07 6.36956655e-02 2.17998319e-01 1.01099641e-04 2.71100275e-06 9.52264083e-10 4.82589614e-06 7.18197378e-01 1.50092320e+03 +9.00000000e-07 6.36914520e-02 2.17988708e-01 1.14317024e-04 2.71255059e-06 1.20624406e-09 5.43140470e-06 7.18197378e-01 1.50103856e+03 +1.00000000e-06 6.36872350e-02 2.17979089e-01 1.27545575e-04 2.71410082e-06 1.49047012e-09 6.03742158e-06 7.18197378e-01 1.50115400e+03 +1.10000000e-06 6.36830145e-02 2.17969461e-01 1.40785311e-04 2.71565337e-06 1.80502023e-09 6.64394755e-06 7.18197378e-01 1.50127473e+03 +1.20000000e-06 6.36787903e-02 2.17959825e-01 1.54036248e-04 2.71720825e-06 2.14997262e-09 7.25098338e-06 7.18197378e-01 1.50139556e+03 +1.30000000e-06 6.36745626e-02 2.17950181e-01 1.67298404e-04 2.71876548e-06 2.52540570e-09 7.85852983e-06 7.18197378e-01 1.50151649e+03 +1.40000000e-06 6.36703313e-02 2.17940529e-01 1.80571795e-04 2.72032508e-06 2.93139814e-09 8.46658768e-06 7.18197378e-01 1.50163753e+03 +1.50000000e-06 6.36660964e-02 2.17930869e-01 1.93856439e-04 2.72188704e-06 3.36802883e-09 9.07515770e-06 7.18197378e-01 1.50185381e+03 +1.60000000e-06 6.36618579e-02 2.17921200e-01 2.07152353e-04 2.72345137e-06 3.83537690e-09 9.68424067e-06 7.18197378e-01 1.50185381e+03 +1.70000000e-06 6.36576159e-02 2.17911524e-01 2.20459553e-04 2.72501808e-06 4.33352170e-09 1.02938373e-05 7.18197378e-01 1.50230870e+03 +1.80000000e-06 6.36533702e-02 2.17901839e-01 2.33778057e-04 2.72658717e-06 4.86254281e-09 1.09039485e-05 7.18197378e-01 1.50230870e+03 +1.90000000e-06 6.36491209e-02 2.17892145e-01 2.47107882e-04 2.72815866e-06 5.42252005e-09 1.15145750e-05 7.18197378e-01 1.50230870e+03 +2.00000000e-06 6.36448680e-02 2.17882444e-01 2.60449046e-04 2.72973253e-06 6.01353346e-09 1.21257175e-05 7.18197378e-01 1.50230870e+03 +2.10000000e-06 6.36406114e-02 2.17872734e-01 2.73801565e-04 2.73130881e-06 6.63566334e-09 1.27373768e-05 7.18197378e-01 1.50276510e+03 +2.20000000e-06 6.36363513e-02 2.17863016e-01 2.87165457e-04 2.73288750e-06 7.28899022e-09 1.33495538e-05 7.18197378e-01 1.50276510e+03 +2.30000000e-06 6.36320875e-02 2.17853289e-01 3.00540740e-04 2.73446860e-06 7.97359483e-09 1.39622491e-05 7.18197378e-01 1.50276510e+03 +2.40000000e-06 6.36278201e-02 2.17843554e-01 3.13927429e-04 2.73605211e-06 8.68955814e-09 1.45754637e-05 7.18197378e-01 1.50276510e+03 +2.50000000e-06 6.36235490e-02 2.17833811e-01 3.27325544e-04 2.73763805e-06 9.43696140e-09 1.51891982e-05 7.18197378e-01 1.50322303e+03 +2.60000000e-06 6.36192743e-02 2.17824060e-01 3.40735102e-04 2.73922642e-06 1.02158861e-08 1.58034536e-05 7.18197378e-01 1.50322303e+03 +2.70000000e-06 6.36149959e-02 2.17814300e-01 3.54156119e-04 2.74081724e-06 1.10264139e-08 1.64182305e-05 7.18197378e-01 1.50322303e+03 +2.80000000e-06 6.36107139e-02 2.17804532e-01 3.67588614e-04 2.74241050e-06 1.18686268e-08 1.70335297e-05 7.18197378e-01 1.50322303e+03 +2.90000000e-06 6.36064282e-02 2.17794755e-01 3.81032604e-04 2.74400621e-06 1.27426069e-08 1.76493521e-05 7.18197378e-01 1.50368248e+03 +3.00000000e-06 6.36021389e-02 2.17784970e-01 3.94488107e-04 2.74560438e-06 1.36484367e-08 1.82656985e-05 7.18197378e-01 1.50368248e+03 +3.10000000e-06 6.35978458e-02 2.17775177e-01 4.07955140e-04 2.74720501e-06 1.45861988e-08 1.88825696e-05 7.18197378e-01 1.50368248e+03 +3.20000000e-06 6.35935491e-02 2.17765375e-01 4.21433721e-04 2.74880812e-06 1.55559761e-08 1.94999662e-05 7.18197378e-01 1.50368248e+03 +3.30000000e-06 6.35892487e-02 2.17755565e-01 4.34923868e-04 2.75041370e-06 1.65578519e-08 2.01178892e-05 7.18197378e-01 1.50414348e+03 +3.40000000e-06 6.35849446e-02 2.17745746e-01 4.48425598e-04 2.75202177e-06 1.75919095e-08 2.07363394e-05 7.18197378e-01 1.50414348e+03 +3.50000000e-06 6.35806368e-02 2.17735919e-01 4.61938930e-04 2.75363232e-06 1.86582326e-08 2.13553176e-05 7.18197378e-01 1.50414348e+03 +3.60000000e-06 6.35763253e-02 2.17726083e-01 4.75463880e-04 2.75524538e-06 1.97569050e-08 2.19748245e-05 7.18197378e-01 1.50414348e+03 +3.70000000e-06 6.35720101e-02 2.17716239e-01 4.89000468e-04 2.75686093e-06 2.08880109e-08 2.25948610e-05 7.18197378e-01 1.50460603e+03 +3.80000000e-06 6.35676912e-02 2.17706386e-01 5.02548711e-04 2.75847900e-06 2.20516347e-08 2.32154280e-05 7.18197378e-01 1.50460603e+03 +3.90000000e-06 6.35633685e-02 2.17696525e-01 5.16108626e-04 2.76009959e-06 2.32478610e-08 2.38365261e-05 7.18197378e-01 1.50460603e+03 +4.00000000e-06 6.35590421e-02 2.17686655e-01 5.29680233e-04 2.76172269e-06 2.44767747e-08 2.44581563e-05 7.18197378e-01 1.50460603e+03 +4.10000000e-06 6.35547120e-02 2.17676777e-01 5.43263548e-04 2.76334833e-06 2.57384610e-08 2.50803193e-05 7.18197378e-01 1.50556911e+03 +4.20000000e-06 6.35503782e-02 2.17666890e-01 5.56858591e-04 2.76497650e-06 2.70330054e-08 2.57030159e-05 7.18197378e-01 1.50556911e+03 +4.30000000e-06 6.35460406e-02 2.17656995e-01 5.70465378e-04 2.76660722e-06 2.83604934e-08 2.63262471e-05 7.18197378e-01 1.50556911e+03 +4.40000000e-06 6.35416992e-02 2.17647091e-01 5.84083929e-04 2.76824049e-06 2.97210109e-08 2.69500136e-05 7.18197378e-01 1.50556911e+03 +4.50000000e-06 6.35373541e-02 2.17637178e-01 5.97714262e-04 2.76987631e-06 3.11146440e-08 2.75743162e-05 7.18197378e-01 1.50556911e+03 +4.60000000e-06 6.35330053e-02 2.17627257e-01 6.11356394e-04 2.77151470e-06 3.25414793e-08 2.81991557e-05 7.18197378e-01 1.50556911e+03 +4.70000000e-06 6.35286526e-02 2.17617327e-01 6.25010344e-04 2.77315565e-06 3.40016031e-08 2.88245331e-05 7.18197378e-01 1.50556911e+03 +4.80000000e-06 6.35242962e-02 2.17607389e-01 6.38676131e-04 2.77479918e-06 3.54951025e-08 2.94504490e-05 7.18197378e-01 1.50556911e+03 +4.90000000e-06 6.35199360e-02 2.17597442e-01 6.52353772e-04 2.77644530e-06 3.70220650e-08 3.00769045e-05 7.18197378e-01 1.50653898e+03 +5.00000000e-06 6.35155721e-02 2.17587486e-01 6.66043286e-04 2.77809401e-06 3.85825780e-08 3.07039002e-05 7.18197378e-01 1.50653898e+03 +5.10000000e-06 6.35112043e-02 2.17577522e-01 6.79744692e-04 2.77974531e-06 4.01767290e-08 3.13314370e-05 7.18197378e-01 1.50653898e+03 +5.20000000e-06 6.35068327e-02 2.17567549e-01 6.93458008e-04 2.78139922e-06 4.18046060e-08 3.19595158e-05 7.18197378e-01 1.50653898e+03 +5.30000000e-06 6.35024574e-02 2.17557567e-01 7.07183253e-04 2.78305574e-06 4.34662971e-08 3.25881373e-05 7.18197378e-01 1.50653898e+03 +5.40000000e-06 6.34980782e-02 2.17547576e-01 7.20920444e-04 2.78471488e-06 4.51618907e-08 3.32173025e-05 7.18197378e-01 1.50653898e+03 +5.50000000e-06 6.34936952e-02 2.17537577e-01 7.34669602e-04 2.78637665e-06 4.68914756e-08 3.38470122e-05 7.18197378e-01 1.50653898e+03 +5.60000000e-06 6.34893084e-02 2.17527569e-01 7.48430743e-04 2.78804104e-06 4.86551406e-08 3.44772672e-05 7.18197378e-01 1.50653898e+03 +5.70000000e-06 6.34849178e-02 2.17517552e-01 7.62203888e-04 2.78970808e-06 5.04529753e-08 3.51080684e-05 7.18197378e-01 1.50751570e+03 +5.80000000e-06 6.34805233e-02 2.17507527e-01 7.75989055e-04 2.79137776e-06 5.22850698e-08 3.57394166e-05 7.18197378e-01 1.50751570e+03 +5.90000000e-06 6.34761250e-02 2.17497492e-01 7.89786262e-04 2.79305010e-06 5.41515132e-08 3.63713126e-05 7.18197378e-01 1.50751570e+03 +6.00000000e-06 6.34717228e-02 2.17487449e-01 8.03595529e-04 2.79472509e-06 5.60523957e-08 3.70037574e-05 7.18197378e-01 1.50751570e+03 +6.10000000e-06 6.34673168e-02 2.17477397e-01 8.17416874e-04 2.79640276e-06 5.79878075e-08 3.76367518e-05 7.18197378e-01 1.50751570e+03 +6.20000000e-06 6.34629070e-02 2.17467337e-01 8.31250316e-04 2.79808310e-06 5.99578393e-08 3.82702966e-05 7.18197378e-01 1.50751570e+03 +6.30000000e-06 6.34584933e-02 2.17457267e-01 8.45095874e-04 2.79976612e-06 6.19625818e-08 3.89043927e-05 7.18197378e-01 1.50751570e+03 +6.40000000e-06 6.34540757e-02 2.17447188e-01 8.58953567e-04 2.80145183e-06 6.40021263e-08 3.95390409e-05 7.18197378e-01 1.50751570e+03 +6.50000000e-06 6.34496542e-02 2.17437101e-01 8.72823414e-04 2.80314023e-06 6.60765641e-08 4.01742421e-05 7.18197378e-01 1.50849938e+03 +6.60000000e-06 6.34452288e-02 2.17427005e-01 8.86705435e-04 2.80483135e-06 6.81859876e-08 4.08099973e-05 7.18197378e-01 1.50849938e+03 +6.70000000e-06 6.34407996e-02 2.17416900e-01 9.00599648e-04 2.80652517e-06 7.03304882e-08 4.14463071e-05 7.18197378e-01 1.50849938e+03 +6.80000000e-06 6.34363665e-02 2.17406786e-01 9.14506072e-04 2.80822171e-06 7.25101582e-08 4.20831726e-05 7.18197378e-01 1.50849938e+03 +6.90000000e-06 6.34319294e-02 2.17396663e-01 9.28424727e-04 2.80992098e-06 7.47250902e-08 4.27205945e-05 7.18197378e-01 1.50849938e+03 +7.00000000e-06 6.34274885e-02 2.17386531e-01 9.42355631e-04 2.81162298e-06 7.69753770e-08 4.33585738e-05 7.18197378e-01 1.50849938e+03 +7.10000000e-06 6.34230437e-02 2.17376390e-01 9.56298805e-04 2.81332772e-06 7.92611116e-08 4.39971114e-05 7.18197378e-01 1.50849938e+03 +7.20000000e-06 6.34185949e-02 2.17366240e-01 9.70254268e-04 2.81503520e-06 8.15823874e-08 4.46362080e-05 7.18197378e-01 1.50849938e+03 +7.30000000e-06 6.34141422e-02 2.17356081e-01 9.84222038e-04 2.81674545e-06 8.39392981e-08 4.52758646e-05 7.18197378e-01 1.50949010e+03 +7.40000000e-06 6.34096856e-02 2.17345914e-01 9.98202136e-04 2.81845846e-06 8.63319378e-08 4.59160820e-05 7.18197378e-01 1.50949010e+03 +7.50000000e-06 6.34052250e-02 2.17335737e-01 1.01219458e-03 2.82017423e-06 8.87604005e-08 4.65568612e-05 7.18197378e-01 1.50949010e+03 +7.60000000e-06 6.34007605e-02 2.17325551e-01 1.02619939e-03 2.82189279e-06 9.12247808e-08 4.71982030e-05 7.18197378e-01 1.50949010e+03 +7.70000000e-06 6.33962921e-02 2.17315356e-01 1.04021659e-03 2.82361413e-06 9.37251735e-08 4.78401084e-05 7.18197378e-01 1.50949010e+03 +7.80000000e-06 6.33918197e-02 2.17305152e-01 1.05424619e-03 2.82533827e-06 9.62616738e-08 4.84825781e-05 7.18197378e-01 1.50949010e+03 +7.90000000e-06 6.33873433e-02 2.17294939e-01 1.06828822e-03 2.82706520e-06 9.88343768e-08 4.91256131e-05 7.18197378e-01 1.50949010e+03 +8.00000000e-06 6.33828630e-02 2.17284717e-01 1.08234269e-03 2.82879495e-06 1.01443378e-07 4.97692143e-05 7.18197378e-01 1.50949010e+03 +8.10000000e-06 6.33783787e-02 2.17274486e-01 1.09640962e-03 2.83052751e-06 1.04088775e-07 5.04133825e-05 7.18197378e-01 1.50949010e+03 +8.20000000e-06 6.33738904e-02 2.17264246e-01 1.11048905e-03 2.83226290e-06 1.06770661e-07 5.10581187e-05 7.18197378e-01 1.51048795e+03 +8.30000000e-06 6.33693981e-02 2.17253996e-01 1.12458097e-03 2.83400112e-06 1.09489135e-07 5.17034238e-05 7.18197378e-01 1.51048795e+03 +8.40000000e-06 6.33649019e-02 2.17243738e-01 1.13868542e-03 2.83574217e-06 1.12244293e-07 5.23492986e-05 7.18197378e-01 1.51048795e+03 +8.50000000e-06 6.33604016e-02 2.17233470e-01 1.15280241e-03 2.83748608e-06 1.15036232e-07 5.29957441e-05 7.18197378e-01 1.51048795e+03 +8.60000000e-06 6.33558973e-02 2.17223193e-01 1.16693197e-03 2.83923284e-06 1.17865050e-07 5.36427612e-05 7.18197378e-01 1.51048795e+03 +8.70000000e-06 6.33513890e-02 2.17212907e-01 1.18107411e-03 2.84098246e-06 1.20730844e-07 5.42903507e-05 7.18197378e-01 1.51048795e+03 +8.80000000e-06 6.33468767e-02 2.17202612e-01 1.19522885e-03 2.84273496e-06 1.23633712e-07 5.49385136e-05 7.18197378e-01 1.51048795e+03 +8.90000000e-06 6.33423604e-02 2.17192307e-01 1.20939622e-03 2.84449033e-06 1.26573753e-07 5.55872508e-05 7.18197378e-01 1.51048795e+03 +9.00000000e-06 6.33378401e-02 2.17181993e-01 1.22357623e-03 2.84624859e-06 1.29551065e-07 5.62365632e-05 7.18197378e-01 1.51149302e+03 +9.10000000e-06 6.33333157e-02 2.17171671e-01 1.23776891e-03 2.84800975e-06 1.32565747e-07 5.68864517e-05 7.18197378e-01 1.51149302e+03 +9.20000000e-06 6.33287872e-02 2.17161338e-01 1.25197427e-03 2.84977381e-06 1.35617898e-07 5.75369173e-05 7.18197378e-01 1.51149302e+03 +9.30000000e-06 6.33242547e-02 2.17150997e-01 1.26619233e-03 2.85154078e-06 1.38707618e-07 5.81879608e-05 7.18197378e-01 1.51149302e+03 +9.40000000e-06 6.33197182e-02 2.17140646e-01 1.28042312e-03 2.85331067e-06 1.41835006e-07 5.88395832e-05 7.18197378e-01 1.51149302e+03 +9.50000000e-06 6.33151776e-02 2.17130286e-01 1.29466666e-03 2.85508348e-06 1.45000163e-07 5.94917853e-05 7.18197378e-01 1.51149302e+03 +9.60000000e-06 6.33106329e-02 2.17119917e-01 1.30892296e-03 2.85685924e-06 1.48203189e-07 6.01445682e-05 7.18197378e-01 1.51149302e+03 +9.70000000e-06 6.33060841e-02 2.17109538e-01 1.32319205e-03 2.85863793e-06 1.51444185e-07 6.07979328e-05 7.18197378e-01 1.51149302e+03 +9.80000000e-06 6.33015313e-02 2.17099150e-01 1.33747394e-03 2.86041958e-06 1.54723251e-07 6.14518799e-05 7.18197378e-01 1.51250542e+03 +9.90000000e-06 6.32969743e-02 2.17088752e-01 1.35176867e-03 2.86220419e-06 1.58040490e-07 6.21064105e-05 7.18197378e-01 1.51250542e+03 +1.00000000e-05 6.32924133e-02 2.17078346e-01 1.36607624e-03 2.86399177e-06 1.61396002e-07 6.27615255e-05 7.18197378e-01 1.51250542e+03 +1.01000000e-05 6.32878482e-02 2.17067929e-01 1.38039668e-03 2.86578232e-06 1.64789890e-07 6.34172259e-05 7.18197378e-01 1.51250542e+03 +1.02000000e-05 6.32832789e-02 2.17057504e-01 1.39473000e-03 2.86757586e-06 1.68222256e-07 6.40735126e-05 7.18197378e-01 1.51250542e+03 +1.03000000e-05 6.32787056e-02 2.17047069e-01 1.40907624e-03 2.86937239e-06 1.71693203e-07 6.47303866e-05 7.18197378e-01 1.51250542e+03 +1.04000000e-05 6.32741281e-02 2.17036624e-01 1.42343541e-03 2.87117192e-06 1.75202833e-07 6.53878488e-05 7.18197378e-01 1.51250542e+03 +1.05000000e-05 6.32695465e-02 2.17026170e-01 1.43780753e-03 2.87297447e-06 1.78751249e-07 6.60459001e-05 7.18197378e-01 1.51250542e+03 +1.06000000e-05 6.32649608e-02 2.17015707e-01 1.45219263e-03 2.87478003e-06 1.82338555e-07 6.67045414e-05 7.18197378e-01 1.51352523e+03 +1.07000000e-05 6.32603709e-02 2.17005234e-01 1.46659071e-03 2.87658862e-06 1.85964856e-07 6.73637738e-05 7.18197378e-01 1.51352523e+03 +1.08000000e-05 6.32557768e-02 2.16994752e-01 1.48100181e-03 2.87840024e-06 1.89630255e-07 6.80235982e-05 7.18197378e-01 1.51352523e+03 +1.09000000e-05 6.32511786e-02 2.16984260e-01 1.49542595e-03 2.88021491e-06 1.93334856e-07 6.86840155e-05 7.18197378e-01 1.51352523e+03 +1.10000000e-05 6.32465763e-02 2.16973759e-01 1.50986315e-03 2.88203264e-06 1.97078765e-07 6.93450267e-05 7.18197378e-01 1.51352523e+03 +1.11000000e-05 6.32419697e-02 2.16963248e-01 1.52431342e-03 2.88385342e-06 2.00862086e-07 7.00066328e-05 7.18197378e-01 1.51352523e+03 +1.12000000e-05 6.32373590e-02 2.16952727e-01 1.53877679e-03 2.88567728e-06 2.04684925e-07 7.06688346e-05 7.18197378e-01 1.51352523e+03 +1.13000000e-05 6.32327442e-02 2.16942197e-01 1.55325328e-03 2.88750421e-06 2.08547388e-07 7.13316332e-05 7.18197378e-01 1.51352523e+03 +1.14000000e-05 6.32281251e-02 2.16931657e-01 1.56774291e-03 2.88933423e-06 2.12449581e-07 7.19950295e-05 7.18197378e-01 1.51455256e+03 +1.15000000e-05 6.32235018e-02 2.16921108e-01 1.58224571e-03 2.89116735e-06 2.16391610e-07 7.26590245e-05 7.18197378e-01 1.51455256e+03 +1.16000000e-05 6.32188743e-02 2.16910549e-01 1.59676168e-03 2.89300358e-06 2.20373582e-07 7.33236192e-05 7.18197378e-01 1.51455256e+03 +1.17000000e-05 6.32142426e-02 2.16899981e-01 1.61129087e-03 2.89484292e-06 2.24395604e-07 7.39888145e-05 7.18197378e-01 1.51455256e+03 +1.18000000e-05 6.32096067e-02 2.16889402e-01 1.62583328e-03 2.89668538e-06 2.28457784e-07 7.46546114e-05 7.18197378e-01 1.51455256e+03 +1.19000000e-05 6.32049666e-02 2.16878815e-01 1.64038894e-03 2.89853097e-06 2.32560229e-07 7.53210109e-05 7.18197378e-01 1.51455256e+03 +1.20000000e-05 6.32003222e-02 2.16868217e-01 1.65495787e-03 2.90037970e-06 2.36703047e-07 7.59880139e-05 7.18197378e-01 1.51455256e+03 +1.21000000e-05 6.31956736e-02 2.16857610e-01 1.66954010e-03 2.90223159e-06 2.40886347e-07 7.66556214e-05 7.18197378e-01 1.51455256e+03 +1.22000000e-05 6.31910208e-02 2.16846993e-01 1.68413563e-03 2.90408663e-06 2.45110238e-07 7.73238345e-05 7.18197378e-01 1.51558750e+03 +1.23000000e-05 6.31863637e-02 2.16836366e-01 1.69874450e-03 2.90594484e-06 2.49374828e-07 7.79926541e-05 7.18197378e-01 1.51558750e+03 +1.24000000e-05 6.31817023e-02 2.16825730e-01 1.71336673e-03 2.90780623e-06 2.53680227e-07 7.86620812e-05 7.18197378e-01 1.51558750e+03 +1.25000000e-05 6.31770367e-02 2.16815083e-01 1.72800234e-03 2.90967080e-06 2.58026545e-07 7.93321167e-05 7.18197378e-01 1.51558750e+03 +1.26000000e-05 6.31723668e-02 2.16804427e-01 1.74265135e-03 2.91153857e-06 2.62413892e-07 8.00027617e-05 7.18197378e-01 1.51558750e+03 +1.27000000e-05 6.31676927e-02 2.16793761e-01 1.75731378e-03 2.91340954e-06 2.66842379e-07 8.06740171e-05 7.18197378e-01 1.51558750e+03 +1.28000000e-05 6.31630142e-02 2.16783086e-01 1.77198965e-03 2.91528373e-06 2.71312115e-07 8.13458840e-05 7.18197378e-01 1.51558750e+03 +1.29000000e-05 6.31583315e-02 2.16772400e-01 1.78667899e-03 2.91716114e-06 2.75823213e-07 8.20183634e-05 7.18197378e-01 1.51558750e+03 +1.30000000e-05 6.31536444e-02 2.16761705e-01 1.80138183e-03 2.91904178e-06 2.80375783e-07 8.26914562e-05 7.18197378e-01 1.51558750e+03 +1.31000000e-05 6.31489530e-02 2.16751000e-01 1.81609817e-03 2.92092567e-06 2.84969939e-07 8.33651634e-05 7.18197378e-01 1.51725489e+03 +1.32000000e-05 6.31442574e-02 2.16740285e-01 1.83082804e-03 2.92281280e-06 2.89605791e-07 8.40394861e-05 7.18197378e-01 1.51725489e+03 +1.33000000e-05 6.31395574e-02 2.16729560e-01 1.84557147e-03 2.92470320e-06 2.94283452e-07 8.47144253e-05 7.18197378e-01 1.51725489e+03 +1.34000000e-05 6.31348530e-02 2.16718825e-01 1.86032848e-03 2.92659687e-06 2.99003035e-07 8.53899819e-05 7.18197378e-01 1.51725489e+03 +1.35000000e-05 6.31301444e-02 2.16708080e-01 1.87509909e-03 2.92849381e-06 3.03764654e-07 8.60661571e-05 7.18197378e-01 1.51725489e+03 +1.36000000e-05 6.31254314e-02 2.16697326e-01 1.88988332e-03 2.93039404e-06 3.08568422e-07 8.67429517e-05 7.18197378e-01 1.51725489e+03 +1.37000000e-05 6.31207140e-02 2.16686561e-01 1.90468119e-03 2.93229758e-06 3.13414453e-07 8.74203668e-05 7.18197378e-01 1.51725489e+03 +1.38000000e-05 6.31159923e-02 2.16675786e-01 1.91949274e-03 2.93420442e-06 3.18302861e-07 8.80984035e-05 7.18197378e-01 1.51725489e+03 +1.39000000e-05 6.31112662e-02 2.16665002e-01 1.93431797e-03 2.93611458e-06 3.23233761e-07 8.87770627e-05 7.18197378e-01 1.51725489e+03 +1.40000000e-05 6.31065358e-02 2.16654207e-01 1.94915691e-03 2.93802806e-06 3.28207268e-07 8.94563455e-05 7.18197378e-01 1.51725489e+03 +1.41000000e-05 6.31018009e-02 2.16643402e-01 1.96400959e-03 2.93994488e-06 3.33223497e-07 9.01362529e-05 7.18197378e-01 1.51725489e+03 +1.42000000e-05 6.30970617e-02 2.16632587e-01 1.97887603e-03 2.94186505e-06 3.38282564e-07 9.08167860e-05 7.18197378e-01 1.51725489e+03 +1.43000000e-05 6.30923181e-02 2.16621763e-01 1.99375625e-03 2.94378858e-06 3.43384585e-07 9.14979457e-05 7.18197378e-01 1.51725489e+03 +1.44000000e-05 6.30875701e-02 2.16610928e-01 2.00865027e-03 2.94571547e-06 3.48529677e-07 9.21797331e-05 7.18197378e-01 1.51894237e+03 +1.45000000e-05 6.30828177e-02 2.16600083e-01 2.02355812e-03 2.94764574e-06 3.53717956e-07 9.28621493e-05 7.18197378e-01 1.51894237e+03 +1.46000000e-05 6.30780608e-02 2.16589228e-01 2.03847982e-03 2.94957940e-06 3.58949540e-07 9.35451952e-05 7.18197378e-01 1.51894237e+03 +1.47000000e-05 6.30732996e-02 2.16578363e-01 2.05341539e-03 2.95151645e-06 3.64224547e-07 9.42288719e-05 7.18197378e-01 1.51894237e+03 +1.48000000e-05 6.30685339e-02 2.16567487e-01 2.06836486e-03 2.95345691e-06 3.69543093e-07 9.49131805e-05 7.18197378e-01 1.51894237e+03 +1.49000000e-05 6.30637637e-02 2.16556602e-01 2.08332824e-03 2.95540078e-06 3.74905298e-07 9.55981220e-05 7.18197378e-01 1.51894237e+03 +1.50000000e-05 6.30589892e-02 2.16545706e-01 2.09830557e-03 2.95734808e-06 3.80311279e-07 9.62836974e-05 7.18197378e-01 1.51894237e+03 +1.51000000e-05 6.30542101e-02 2.16534800e-01 2.11329686e-03 2.95929882e-06 3.85761157e-07 9.69699079e-05 7.18197378e-01 1.51894237e+03 +1.52000000e-05 6.30494266e-02 2.16523884e-01 2.12830214e-03 2.96125300e-06 3.91255050e-07 9.76567543e-05 7.18197378e-01 1.51894237e+03 +1.53000000e-05 6.30446387e-02 2.16512958e-01 2.14332143e-03 2.96321065e-06 3.96793079e-07 9.83442380e-05 7.18197378e-01 1.51894237e+03 +1.54000000e-05 6.30398463e-02 2.16502021e-01 2.15835475e-03 2.96517176e-06 4.02375363e-07 9.90323597e-05 7.18197378e-01 1.51894237e+03 +1.55000000e-05 6.30350494e-02 2.16491074e-01 2.17340214e-03 2.96713634e-06 4.08002023e-07 9.97211207e-05 7.18197378e-01 1.51894237e+03 +1.56000000e-05 6.30302480e-02 2.16480117e-01 2.18846360e-03 2.96910442e-06 4.13673180e-07 1.00410522e-04 7.18197378e-01 1.51894237e+03 +1.57000000e-05 6.30254421e-02 2.16469150e-01 2.20353918e-03 2.97107599e-06 4.19388956e-07 1.01100565e-04 7.18197378e-01 1.52065035e+03 +1.58000000e-05 6.30206316e-02 2.16458172e-01 2.21862888e-03 2.97305107e-06 4.25149472e-07 1.01791250e-04 7.18197378e-01 1.52065035e+03 +1.59000000e-05 6.30158167e-02 2.16447184e-01 2.23373273e-03 2.97502967e-06 4.30954850e-07 1.02482578e-04 7.18197378e-01 1.52065035e+03 +1.60000000e-05 6.30109973e-02 2.16436186e-01 2.24885076e-03 2.97701180e-06 4.36805212e-07 1.03174551e-04 7.18197378e-01 1.52065035e+03 +1.61000000e-05 6.30061733e-02 2.16425177e-01 2.26398299e-03 2.97899747e-06 4.42700683e-07 1.03867170e-04 7.18197378e-01 1.52065035e+03 +1.62000000e-05 6.30013448e-02 2.16414158e-01 2.27912944e-03 2.98098669e-06 4.48641384e-07 1.04560436e-04 7.18197378e-01 1.52065035e+03 +1.63000000e-05 6.29965118e-02 2.16403128e-01 2.29429014e-03 2.98297947e-06 4.54627439e-07 1.05254349e-04 7.18197378e-01 1.52065035e+03 +1.64000000e-05 6.29916742e-02 2.16392088e-01 2.30946511e-03 2.98497582e-06 4.60658973e-07 1.05948911e-04 7.18197378e-01 1.52065035e+03 +1.65000000e-05 6.29868320e-02 2.16381038e-01 2.32465438e-03 2.98697576e-06 4.66736110e-07 1.06644123e-04 7.18197378e-01 1.52065035e+03 +1.66000000e-05 6.29819853e-02 2.16369977e-01 2.33985797e-03 2.98897928e-06 4.72858974e-07 1.07339987e-04 7.18197378e-01 1.52065035e+03 +1.67000000e-05 6.29771340e-02 2.16358906e-01 2.35507590e-03 2.99098642e-06 4.79027691e-07 1.08036502e-04 7.18197378e-01 1.52065035e+03 +1.68000000e-05 6.29722782e-02 2.16347824e-01 2.37030820e-03 2.99299716e-06 4.85242387e-07 1.08733671e-04 7.18197378e-01 1.52065035e+03 +1.69000000e-05 6.29674177e-02 2.16336732e-01 2.38555490e-03 2.99501154e-06 4.91503187e-07 1.09431494e-04 7.18197378e-01 1.52065035e+03 +1.70000000e-05 6.29625526e-02 2.16325629e-01 2.40081601e-03 2.99702955e-06 4.97810219e-07 1.10129972e-04 7.18197378e-01 1.52237929e+03 +1.71000000e-05 6.29576830e-02 2.16314515e-01 2.41609156e-03 2.99905121e-06 5.04163608e-07 1.10829107e-04 7.18197378e-01 1.52237929e+03 +1.72000000e-05 6.29528087e-02 2.16303391e-01 2.43138157e-03 3.00107652e-06 5.10563483e-07 1.11528900e-04 7.18197378e-01 1.52237929e+03 +1.73000000e-05 6.29479298e-02 2.16292257e-01 2.44668608e-03 3.00310551e-06 5.17009971e-07 1.12229351e-04 7.18197378e-01 1.52237929e+03 +1.74000000e-05 6.29430463e-02 2.16281112e-01 2.46200510e-03 3.00513818e-06 5.23503199e-07 1.12930463e-04 7.18197378e-01 1.52237929e+03 +1.75000000e-05 6.29381581e-02 2.16269956e-01 2.47733866e-03 3.00717453e-06 5.30043297e-07 1.13632235e-04 7.18197378e-01 1.52237929e+03 +1.76000000e-05 6.29332653e-02 2.16258790e-01 2.49268678e-03 3.00921460e-06 5.36630393e-07 1.14334669e-04 7.18197378e-01 1.52237929e+03 +1.77000000e-05 6.29283679e-02 2.16247612e-01 2.50804949e-03 3.01125837e-06 5.43264616e-07 1.15037767e-04 7.18197378e-01 1.52237929e+03 +1.78000000e-05 6.29234658e-02 2.16236425e-01 2.52342682e-03 3.01330588e-06 5.49946097e-07 1.15741529e-04 7.18197378e-01 1.52237929e+03 +1.79000000e-05 6.29185590e-02 2.16225226e-01 2.53881878e-03 3.01535712e-06 5.56674965e-07 1.16445956e-04 7.18197378e-01 1.52237929e+03 +1.80000000e-05 6.29136475e-02 2.16214017e-01 2.55422540e-03 3.01741211e-06 5.63451350e-07 1.17151050e-04 7.18197378e-01 1.52237929e+03 +1.81000000e-05 6.29087314e-02 2.16202797e-01 2.56964672e-03 3.01947086e-06 5.70275385e-07 1.17856812e-04 7.18197378e-01 1.52237929e+03 +1.82000000e-05 6.29038106e-02 2.16191567e-01 2.58508274e-03 3.02153338e-06 5.77147199e-07 1.18563243e-04 7.18197378e-01 1.52237929e+03 +1.83000000e-05 6.28988850e-02 2.16180326e-01 2.60053351e-03 3.02359968e-06 5.84066925e-07 1.19270343e-04 7.18197378e-01 1.52412966e+03 +1.84000000e-05 6.28939548e-02 2.16169074e-01 2.61599903e-03 3.02566978e-06 5.91034696e-07 1.19978115e-04 7.18197378e-01 1.52412966e+03 +1.85000000e-05 6.28890198e-02 2.16157811e-01 2.63147935e-03 3.02774368e-06 5.98050644e-07 1.20686559e-04 7.18197378e-01 1.52412966e+03 +1.86000000e-05 6.28840802e-02 2.16146537e-01 2.64697448e-03 3.02982141e-06 6.05114902e-07 1.21395676e-04 7.18197378e-01 1.52412966e+03 +1.87000000e-05 6.28791358e-02 2.16135252e-01 2.66248445e-03 3.03190296e-06 6.12227603e-07 1.22105468e-04 7.18197378e-01 1.52412966e+03 +1.88000000e-05 6.28741866e-02 2.16123957e-01 2.67800928e-03 3.03398835e-06 6.19388882e-07 1.22815936e-04 7.18197378e-01 1.52412966e+03 +1.89000000e-05 6.28692327e-02 2.16112651e-01 2.69354900e-03 3.03607760e-06 6.26598872e-07 1.23527080e-04 7.18197378e-01 1.52412966e+03 +1.90000000e-05 6.28642741e-02 2.16101334e-01 2.70910363e-03 3.03817071e-06 6.33857709e-07 1.24238902e-04 7.18197378e-01 1.52412966e+03 +1.91000000e-05 6.28593107e-02 2.16090005e-01 2.72467321e-03 3.04026770e-06 6.41165528e-07 1.24951404e-04 7.18197378e-01 1.52412966e+03 +1.92000000e-05 6.28543425e-02 2.16078666e-01 2.74025776e-03 3.04236858e-06 6.48522464e-07 1.25664586e-04 7.18197378e-01 1.52412966e+03 +1.93000000e-05 6.28493695e-02 2.16067317e-01 2.75585729e-03 3.04447336e-06 6.55928653e-07 1.26378449e-04 7.18197378e-01 1.52412966e+03 +1.94000000e-05 6.28443918e-02 2.16055956e-01 2.77147184e-03 3.04658205e-06 6.63384233e-07 1.27092995e-04 7.18197378e-01 1.52412966e+03 +1.95000000e-05 6.28394092e-02 2.16044584e-01 2.78710144e-03 3.04869467e-06 6.70889340e-07 1.27808225e-04 7.18197378e-01 1.52412966e+03 +1.96000000e-05 6.28344218e-02 2.16033201e-01 2.80274611e-03 3.05081122e-06 6.78444111e-07 1.28524140e-04 7.18197378e-01 1.52590195e+03 +1.97000000e-05 6.28294297e-02 2.16021807e-01 2.81840587e-03 3.05293173e-06 6.86048686e-07 1.29240741e-04 7.18197378e-01 1.52590195e+03 +1.98000000e-05 6.28244327e-02 2.16010402e-01 2.83408075e-03 3.05505619e-06 6.93703201e-07 1.29958029e-04 7.18197378e-01 1.52590195e+03 +1.99000000e-05 6.28194309e-02 2.15998986e-01 2.84977078e-03 3.05718464e-06 7.01407795e-07 1.30676006e-04 7.18197378e-01 1.52590195e+03 +2.00000000e-05 6.28144242e-02 2.15987559e-01 2.86547599e-03 3.05931706e-06 7.09162609e-07 1.31394673e-04 7.18197378e-01 1.52590195e+03 +2.01000000e-05 6.28094127e-02 2.15976121e-01 2.88119639e-03 3.06145349e-06 7.16967781e-07 1.32114030e-04 7.18197378e-01 1.52590195e+03 +2.02000000e-05 6.28043963e-02 2.15964671e-01 2.89693202e-03 3.06359393e-06 7.24823452e-07 1.32834080e-04 7.18197378e-01 1.52590195e+03 +2.03000000e-05 6.27993751e-02 2.15953211e-01 2.91268291e-03 3.06573839e-06 7.32729762e-07 1.33554823e-04 7.18197378e-01 1.52590195e+03 +2.04000000e-05 6.27943490e-02 2.15941739e-01 2.92844907e-03 3.06788689e-06 7.40686852e-07 1.34276260e-04 7.18197378e-01 1.52590195e+03 +2.05000000e-05 6.27893181e-02 2.15930256e-01 2.94423054e-03 3.07003944e-06 7.48694864e-07 1.34998393e-04 7.18197378e-01 1.52590195e+03 +2.06000000e-05 6.27842822e-02 2.15918762e-01 2.96002734e-03 3.07219605e-06 7.56753940e-07 1.35721223e-04 7.18197378e-01 1.52590195e+03 +2.07000000e-05 6.27792414e-02 2.15907257e-01 2.97583949e-03 3.07435674e-06 7.64864223e-07 1.36444751e-04 7.18197378e-01 1.52590195e+03 +2.08000000e-05 6.27741958e-02 2.15895741e-01 2.99166704e-03 3.07652151e-06 7.73025854e-07 1.37168978e-04 7.18197378e-01 1.52590195e+03 +2.09000000e-05 6.27691452e-02 2.15884213e-01 3.00750999e-03 3.07869038e-06 7.81238978e-07 1.37893905e-04 7.18197378e-01 1.52769664e+03 +2.10000000e-05 6.27640897e-02 2.15872674e-01 3.02336839e-03 3.08086337e-06 7.89503739e-07 1.38619535e-04 7.18197378e-01 1.52769664e+03 +2.11000000e-05 6.27590292e-02 2.15861124e-01 3.03924224e-03 3.08304049e-06 7.97820280e-07 1.39345867e-04 7.18197378e-01 1.52769664e+03 +2.12000000e-05 6.27539639e-02 2.15849562e-01 3.05513160e-03 3.08522174e-06 8.06188747e-07 1.40072903e-04 7.18197378e-01 1.52769664e+03 +2.13000000e-05 6.27488935e-02 2.15837989e-01 3.07103647e-03 3.08740715e-06 8.14609285e-07 1.40800645e-04 7.18197378e-01 1.52769664e+03 +2.14000000e-05 6.27438183e-02 2.15826405e-01 3.08695688e-03 3.08959672e-06 8.23082039e-07 1.41529093e-04 7.18197378e-01 1.52769664e+03 +2.15000000e-05 6.27387380e-02 2.15814810e-01 3.10289288e-03 3.09179047e-06 8.31607156e-07 1.42258249e-04 7.18197378e-01 1.52769664e+03 +2.16000000e-05 6.27336528e-02 2.15803203e-01 3.11884447e-03 3.09398841e-06 8.40184783e-07 1.42988114e-04 7.18197378e-01 1.52769664e+03 +2.17000000e-05 6.27285626e-02 2.15791584e-01 3.13481169e-03 3.09619056e-06 8.48815066e-07 1.43718689e-04 7.18197378e-01 1.52769664e+03 +2.18000000e-05 6.27234674e-02 2.15779954e-01 3.15079456e-03 3.09839693e-06 8.57498153e-07 1.44449976e-04 7.18197378e-01 1.52769664e+03 +2.19000000e-05 6.27183672e-02 2.15768313e-01 3.16679312e-03 3.10060753e-06 8.66234193e-07 1.45181976e-04 7.18197378e-01 1.52769664e+03 +2.20000000e-05 6.27132620e-02 2.15756660e-01 3.18280739e-03 3.10282237e-06 8.75023334e-07 1.45914689e-04 7.18197378e-01 1.52769664e+03 +2.21000000e-05 6.27081518e-02 2.15744996e-01 3.19883740e-03 3.10504148e-06 8.83865725e-07 1.46648118e-04 7.18197378e-01 1.52769664e+03 +2.22000000e-05 6.27030365e-02 2.15733320e-01 3.21488317e-03 3.10726486e-06 8.92761516e-07 1.47382263e-04 7.18197378e-01 1.52951425e+03 +2.23000000e-05 6.26979162e-02 2.15721633e-01 3.23094473e-03 3.10949252e-06 9.01710857e-07 1.48117126e-04 7.18197378e-01 1.52951425e+03 +2.24000000e-05 6.26927909e-02 2.15709934e-01 3.24702212e-03 3.11172448e-06 9.10713899e-07 1.48852708e-04 7.18197378e-01 1.52951425e+03 +2.25000000e-05 6.26876605e-02 2.15698224e-01 3.26311535e-03 3.11396076e-06 9.19770792e-07 1.49589010e-04 7.18197378e-01 1.52951425e+03 +2.26000000e-05 6.26825251e-02 2.15686501e-01 3.27922446e-03 3.11620137e-06 9.28881689e-07 1.50326034e-04 7.18197378e-01 1.52951425e+03 +2.27000000e-05 6.26773846e-02 2.15674768e-01 3.29534948e-03 3.11844632e-06 9.38046741e-07 1.51063780e-04 7.18197378e-01 1.52951425e+03 +2.28000000e-05 6.26722390e-02 2.15663023e-01 3.31149043e-03 3.12069562e-06 9.47266101e-07 1.51802251e-04 7.18197378e-01 1.52951425e+03 +2.29000000e-05 6.26670883e-02 2.15651266e-01 3.32764734e-03 3.12294930e-06 9.56539922e-07 1.52541447e-04 7.18197378e-01 1.52951425e+03 +2.30000000e-05 6.26619325e-02 2.15639497e-01 3.34382024e-03 3.12520736e-06 9.65868358e-07 1.53281369e-04 7.18197378e-01 1.52951425e+03 +2.31000000e-05 6.26567716e-02 2.15627717e-01 3.36000915e-03 3.12746981e-06 9.75251563e-07 1.54022019e-04 7.18197378e-01 1.52951425e+03 +2.32000000e-05 6.26516056e-02 2.15615925e-01 3.37621411e-03 3.12973668e-06 9.84689691e-07 1.54763399e-04 7.18197378e-01 1.52951425e+03 +2.33000000e-05 6.26464345e-02 2.15604121e-01 3.39243515e-03 3.13200797e-06 9.94182898e-07 1.55505508e-04 7.18197378e-01 1.52951425e+03 +2.34000000e-05 6.26412582e-02 2.15592305e-01 3.40867228e-03 3.13428371e-06 1.00373134e-06 1.56248350e-04 7.18197378e-01 1.52951425e+03 +2.35000000e-05 6.26360768e-02 2.15580478e-01 3.42492555e-03 3.13656390e-06 1.01333517e-06 1.56991924e-04 7.18197378e-01 1.53135532e+03 +2.36000000e-05 6.26308902e-02 2.15568639e-01 3.44119498e-03 3.13884856e-06 1.02299455e-06 1.57736233e-04 7.18197378e-01 1.53135532e+03 +2.37000000e-05 6.26256985e-02 2.15556788e-01 3.45748059e-03 3.14113771e-06 1.03270963e-06 1.58481277e-04 7.18197378e-01 1.53135532e+03 +2.38000000e-05 6.26205016e-02 2.15544925e-01 3.47378242e-03 3.14343135e-06 1.04248058e-06 1.59227059e-04 7.18197378e-01 1.53135532e+03 +2.39000000e-05 6.26152995e-02 2.15533051e-01 3.49010050e-03 3.14572951e-06 1.05230755e-06 1.59973578e-04 7.18197378e-01 1.53135532e+03 +2.40000000e-05 6.26100923e-02 2.15521164e-01 3.50643485e-03 3.14803219e-06 1.06219069e-06 1.60720837e-04 7.18197378e-01 1.53135532e+03 +2.41000000e-05 6.26048798e-02 2.15509266e-01 3.52278551e-03 3.15033942e-06 1.07213018e-06 1.61468837e-04 7.18197378e-01 1.53135532e+03 +2.42000000e-05 6.25996621e-02 2.15497355e-01 3.53915250e-03 3.15265121e-06 1.08212616e-06 1.62217579e-04 7.18197378e-01 1.53135532e+03 +2.43000000e-05 6.25944392e-02 2.15485433e-01 3.55553585e-03 3.15496757e-06 1.09217880e-06 1.62967064e-04 7.18197378e-01 1.53135532e+03 +2.44000000e-05 6.25892111e-02 2.15473499e-01 3.57193559e-03 3.15728852e-06 1.10228826e-06 1.63717294e-04 7.18197378e-01 1.53135532e+03 +2.45000000e-05 6.25839778e-02 2.15461552e-01 3.58835175e-03 3.15961407e-06 1.11245471e-06 1.64468270e-04 7.18197378e-01 1.53135532e+03 +2.46000000e-05 6.25787392e-02 2.15449594e-01 3.60478436e-03 3.16194423e-06 1.12267829e-06 1.65219994e-04 7.18197378e-01 1.53135532e+03 +2.47000000e-05 6.25734953e-02 2.15437624e-01 3.62123345e-03 3.16427903e-06 1.13295919e-06 1.65972466e-04 7.18197378e-01 1.53135532e+03 +2.48000000e-05 6.25682462e-02 2.15425641e-01 3.63769904e-03 3.16661848e-06 1.14329755e-06 1.66725688e-04 7.18197378e-01 1.53322038e+03 +2.49000000e-05 6.25629918e-02 2.15413647e-01 3.65418118e-03 3.16896260e-06 1.15369354e-06 1.67479662e-04 7.18197378e-01 1.53322038e+03 +2.50000000e-05 6.25577321e-02 2.15401640e-01 3.67067988e-03 3.17131139e-06 1.16414733e-06 1.68234389e-04 7.18197378e-01 1.53322038e+03 +2.51000000e-05 6.25524672e-02 2.15389622e-01 3.68719518e-03 3.17366487e-06 1.17465909e-06 1.68989869e-04 7.18197378e-01 1.53322038e+03 +2.52000000e-05 6.25471969e-02 2.15377591e-01 3.70372711e-03 3.17602307e-06 1.18522897e-06 1.69746105e-04 7.18197378e-01 1.53322038e+03 +2.53000000e-05 6.25419213e-02 2.15365548e-01 3.72027569e-03 3.17838599e-06 1.19585714e-06 1.70503098e-04 7.18197378e-01 1.53322038e+03 +2.54000000e-05 6.25366404e-02 2.15353493e-01 3.73684096e-03 3.18075365e-06 1.20654377e-06 1.71260849e-04 7.18197378e-01 1.53322038e+03 +2.55000000e-05 6.25313542e-02 2.15341425e-01 3.75342295e-03 3.18312607e-06 1.21728903e-06 1.72019360e-04 7.18197378e-01 1.53322038e+03 +2.56000000e-05 6.25260626e-02 2.15329346e-01 3.77002168e-03 3.18550326e-06 1.22809309e-06 1.72778631e-04 7.18197378e-01 1.53322038e+03 +2.57000000e-05 6.25207657e-02 2.15317254e-01 3.78663720e-03 3.18788524e-06 1.23895610e-06 1.73538664e-04 7.18197378e-01 1.53322038e+03 +2.58000000e-05 6.25154634e-02 2.15305150e-01 3.80326952e-03 3.19027203e-06 1.24987825e-06 1.74299462e-04 7.18197378e-01 1.53322038e+03 +2.59000000e-05 6.25101558e-02 2.15293033e-01 3.81991867e-03 3.19266363e-06 1.26085969e-06 1.75061024e-04 7.18197378e-01 1.53322038e+03 +2.60000000e-05 6.25048428e-02 2.15280904e-01 3.83658470e-03 3.19506008e-06 1.27190061e-06 1.75823352e-04 7.18197378e-01 1.53322038e+03 +2.61000000e-05 6.24995244e-02 2.15268763e-01 3.85326762e-03 3.19746137e-06 1.28300116e-06 1.76586449e-04 7.18197378e-01 1.53511001e+03 +2.62000000e-05 6.24942006e-02 2.15256610e-01 3.86996747e-03 3.19986753e-06 1.29416153e-06 1.77350314e-04 7.18197378e-01 1.53511001e+03 +2.63000000e-05 6.24888713e-02 2.15244444e-01 3.88668429e-03 3.20227858e-06 1.30538188e-06 1.78114950e-04 7.18197378e-01 1.53511001e+03 +2.64000000e-05 6.24835367e-02 2.15232266e-01 3.90341809e-03 3.20469453e-06 1.31666238e-06 1.78880357e-04 7.18197378e-01 1.53511001e+03 +2.65000000e-05 6.24781966e-02 2.15220075e-01 3.92016892e-03 3.20711540e-06 1.32800322e-06 1.79646538e-04 7.18197378e-01 1.53511001e+03 +2.66000000e-05 6.24728511e-02 2.15207872e-01 3.93693679e-03 3.20954120e-06 1.33940455e-06 1.80413494e-04 7.18197378e-01 1.53511001e+03 +2.67000000e-05 6.24675002e-02 2.15195656e-01 3.95372175e-03 3.21197196e-06 1.35086656e-06 1.81181226e-04 7.18197378e-01 1.53511001e+03 +2.68000000e-05 6.24621438e-02 2.15183428e-01 3.97052383e-03 3.21440768e-06 1.36238941e-06 1.81949735e-04 7.18197378e-01 1.53511001e+03 +2.69000000e-05 6.24567819e-02 2.15171187e-01 3.98734305e-03 3.21684839e-06 1.37397330e-06 1.82719023e-04 7.18197378e-01 1.53511001e+03 +2.70000000e-05 6.24514146e-02 2.15158934e-01 4.00417944e-03 3.21929410e-06 1.38561838e-06 1.83489091e-04 7.18197378e-01 1.53511001e+03 +2.71000000e-05 6.24460417e-02 2.15146668e-01 4.02103305e-03 3.22174482e-06 1.39732484e-06 1.84259941e-04 7.18197378e-01 1.53511001e+03 +2.72000000e-05 6.24406634e-02 2.15134390e-01 4.03790389e-03 3.22420058e-06 1.40909285e-06 1.85031575e-04 7.18197378e-01 1.53511001e+03 +2.73000000e-05 6.24352795e-02 2.15122099e-01 4.05479201e-03 3.22666140e-06 1.42092259e-06 1.85803992e-04 7.18197378e-01 1.53511001e+03 +2.74000000e-05 6.24298902e-02 2.15109795e-01 4.07169743e-03 3.22912728e-06 1.43281424e-06 1.86577196e-04 7.18197378e-01 1.53702480e+03 +2.75000000e-05 6.24244953e-02 2.15097479e-01 4.08862018e-03 3.23159825e-06 1.44476798e-06 1.87351187e-04 7.18197378e-01 1.53702480e+03 +2.76000000e-05 6.24190949e-02 2.15085150e-01 4.10556029e-03 3.23407433e-06 1.45678398e-06 1.88125967e-04 7.18197378e-01 1.53702480e+03 +2.77000000e-05 6.24136889e-02 2.15072808e-01 4.12251781e-03 3.23655552e-06 1.46886243e-06 1.88901537e-04 7.18197378e-01 1.53702480e+03 +2.78000000e-05 6.24082774e-02 2.15060454e-01 4.13949275e-03 3.23904186e-06 1.48100351e-06 1.89677899e-04 7.18197378e-01 1.53702480e+03 +2.79000000e-05 6.24028603e-02 2.15048087e-01 4.15648516e-03 3.24153335e-06 1.49320740e-06 1.90455054e-04 7.18197378e-01 1.53702480e+03 +2.80000000e-05 6.23974376e-02 2.15035707e-01 4.17349505e-03 3.24403001e-06 1.50547428e-06 1.91233004e-04 7.18197378e-01 1.53702480e+03 +2.81000000e-05 6.23920093e-02 2.15023314e-01 4.19052248e-03 3.24653186e-06 1.51780433e-06 1.92011750e-04 7.18197378e-01 1.53702480e+03 +2.82000000e-05 6.23865755e-02 2.15010909e-01 4.20756746e-03 3.24903893e-06 1.53019774e-06 1.92791293e-04 7.18197378e-01 1.53702480e+03 +2.83000000e-05 6.23811360e-02 2.14998490e-01 4.22463003e-03 3.25155122e-06 1.54265468e-06 1.93571635e-04 7.18197378e-01 1.53702480e+03 +2.84000000e-05 6.23756909e-02 2.14986059e-01 4.24171022e-03 3.25406876e-06 1.55517535e-06 1.94352778e-04 7.18197378e-01 1.53702480e+03 +2.85000000e-05 6.23702402e-02 2.14973615e-01 4.25880807e-03 3.25659156e-06 1.56775993e-06 1.95134723e-04 7.18197378e-01 1.53702480e+03 +2.86000000e-05 6.23647838e-02 2.14961158e-01 4.27592360e-03 3.25911964e-06 1.58040860e-06 1.95917471e-04 7.18197378e-01 1.53702480e+03 +2.87000000e-05 6.23593218e-02 2.14948688e-01 4.29305686e-03 3.26165302e-06 1.59312155e-06 1.96701023e-04 7.18197378e-01 1.53896535e+03 +2.88000000e-05 6.23538542e-02 2.14936205e-01 4.31020787e-03 3.26419172e-06 1.60589897e-06 1.97485383e-04 7.18197378e-01 1.53896535e+03 +2.89000000e-05 6.23483808e-02 2.14923709e-01 4.32737666e-03 3.26673575e-06 1.61874105e-06 1.98270550e-04 7.18197378e-01 1.53896535e+03 +2.90000000e-05 6.23429018e-02 2.14911200e-01 4.34456327e-03 3.26928514e-06 1.63164796e-06 1.99056526e-04 7.18197378e-01 1.53896535e+03 +2.91000000e-05 6.23374171e-02 2.14898678e-01 4.36176773e-03 3.27183990e-06 1.64461991e-06 1.99843313e-04 7.18197378e-01 1.53896535e+03 +2.92000000e-05 6.23319267e-02 2.14886142e-01 4.37899008e-03 3.27440005e-06 1.65765708e-06 2.00630912e-04 7.18197378e-01 1.53896535e+03 +2.93000000e-05 6.23264305e-02 2.14873594e-01 4.39623034e-03 3.27696561e-06 1.67075966e-06 2.01419325e-04 7.18197378e-01 1.53896535e+03 +2.94000000e-05 6.23209287e-02 2.14861033e-01 4.41348856e-03 3.27953661e-06 1.68392784e-06 2.02208554e-04 7.18197378e-01 1.53896535e+03 +2.95000000e-05 6.23154211e-02 2.14848458e-01 4.43076476e-03 3.28211305e-06 1.69716182e-06 2.02998599e-04 7.18197378e-01 1.53896535e+03 +2.96000000e-05 6.23099077e-02 2.14835871e-01 4.44805897e-03 3.28469495e-06 1.71046178e-06 2.03789463e-04 7.18197378e-01 1.53896535e+03 +2.97000000e-05 6.23043887e-02 2.14823270e-01 4.46537124e-03 3.28728235e-06 1.72382792e-06 2.04581146e-04 7.18197378e-01 1.53896535e+03 +2.98000000e-05 6.22988638e-02 2.14810656e-01 4.48270159e-03 3.28987525e-06 1.73726043e-06 2.05373651e-04 7.18197378e-01 1.53896535e+03 +2.99000000e-05 6.22933332e-02 2.14798029e-01 4.50005006e-03 3.29247367e-06 1.75075950e-06 2.06166978e-04 7.18197378e-01 1.53896535e+03 +3.00000000e-05 6.22877967e-02 2.14785388e-01 4.51741669e-03 3.29507763e-06 1.76432534e-06 2.06961130e-04 7.18197378e-01 1.54093228e+03 +3.01000000e-05 6.22822545e-02 2.14772734e-01 4.53480149e-03 3.29768716e-06 1.77795813e-06 2.07756108e-04 7.18197378e-01 1.54093228e+03 +3.02000000e-05 6.22767065e-02 2.14760067e-01 4.55220452e-03 3.30030227e-06 1.79165807e-06 2.08551913e-04 7.18197378e-01 1.54093228e+03 +3.03000000e-05 6.22711526e-02 2.14747387e-01 4.56962580e-03 3.30292298e-06 1.80542536e-06 2.09348547e-04 7.18197378e-01 1.54093228e+03 +3.04000000e-05 6.22655929e-02 2.14734693e-01 4.58706537e-03 3.30554932e-06 1.81926020e-06 2.10146012e-04 7.18197378e-01 1.54093228e+03 +3.05000000e-05 6.22600274e-02 2.14721986e-01 4.60452326e-03 3.30818129e-06 1.83316278e-06 2.10944309e-04 7.18197378e-01 1.54093228e+03 +3.06000000e-05 6.22544560e-02 2.14709265e-01 4.62199951e-03 3.31081893e-06 1.84713331e-06 2.11743440e-04 7.18197378e-01 1.54093228e+03 +3.07000000e-05 6.22488788e-02 2.14696531e-01 4.63949415e-03 3.31346225e-06 1.86117197e-06 2.12543405e-04 7.18197378e-01 1.54093228e+03 +3.08000000e-05 6.22432957e-02 2.14683784e-01 4.65700722e-03 3.31611126e-06 1.87527898e-06 2.13344208e-04 7.18197378e-01 1.54093228e+03 +3.09000000e-05 6.22377067e-02 2.14671023e-01 4.67453874e-03 3.31876600e-06 1.88945454e-06 2.14145849e-04 7.18197378e-01 1.54093228e+03 +3.10000000e-05 6.22321118e-02 2.14658248e-01 4.69208876e-03 3.32142648e-06 1.90369884e-06 2.14948329e-04 7.18197378e-01 1.54093228e+03 +3.11000000e-05 6.22265109e-02 2.14645460e-01 4.70965731e-03 3.32409272e-06 1.91801208e-06 2.15751651e-04 7.18197378e-01 1.54093228e+03 +3.12000000e-05 6.22209042e-02 2.14632659e-01 4.72724442e-03 3.32676475e-06 1.93239448e-06 2.16555816e-04 7.18197378e-01 1.54093228e+03 +3.13000000e-05 6.22152915e-02 2.14619843e-01 4.74485014e-03 3.32944257e-06 1.94684624e-06 2.17360826e-04 7.18197378e-01 1.54292626e+03 +3.14000000e-05 6.22096729e-02 2.14607015e-01 4.76247448e-03 3.33212622e-06 1.96136755e-06 2.18166682e-04 7.18197378e-01 1.54292626e+03 +3.15000000e-05 6.22040484e-02 2.14594172e-01 4.78011750e-03 3.33481572e-06 1.97595862e-06 2.18973386e-04 7.18197378e-01 1.54292626e+03 +3.16000000e-05 6.21984179e-02 2.14581316e-01 4.79777922e-03 3.33751108e-06 1.99061967e-06 2.19780939e-04 7.18197378e-01 1.54292626e+03 +3.17000000e-05 6.21927813e-02 2.14568446e-01 4.81545968e-03 3.34021232e-06 2.00535090e-06 2.20589343e-04 7.18197378e-01 1.54292626e+03 +3.18000000e-05 6.21871389e-02 2.14555563e-01 4.83315892e-03 3.34291948e-06 2.02015250e-06 2.21398599e-04 7.18197378e-01 1.54292626e+03 +3.19000000e-05 6.21814904e-02 2.14542665e-01 4.85087697e-03 3.34563256e-06 2.03502470e-06 2.22208710e-04 7.18197378e-01 1.54292626e+03 +3.20000000e-05 6.21758359e-02 2.14529754e-01 4.86861386e-03 3.34835159e-06 2.04996771e-06 2.23019677e-04 7.18197378e-01 1.54292626e+03 +3.21000000e-05 6.21701754e-02 2.14516830e-01 4.88636964e-03 3.35107659e-06 2.06498172e-06 2.23831501e-04 7.18197378e-01 1.54292626e+03 +3.22000000e-05 6.21645088e-02 2.14503891e-01 4.90414434e-03 3.35380758e-06 2.08006695e-06 2.24644184e-04 7.18197378e-01 1.54292626e+03 +3.23000000e-05 6.21588362e-02 2.14490938e-01 4.92193799e-03 3.35654459e-06 2.09522362e-06 2.25457727e-04 7.18197378e-01 1.54292626e+03 +3.24000000e-05 6.21531576e-02 2.14477972e-01 4.93975063e-03 3.35928764e-06 2.11045193e-06 2.26272133e-04 7.18197378e-01 1.54292626e+03 +3.25000000e-05 6.21474729e-02 2.14464992e-01 4.95758230e-03 3.36203674e-06 2.12575210e-06 2.27087403e-04 7.18197378e-01 1.54292626e+03 +3.26000000e-05 6.21417821e-02 2.14451998e-01 4.97543303e-03 3.36479192e-06 2.14112434e-06 2.27903538e-04 7.18197378e-01 1.54494795e+03 +3.27000000e-05 6.21360852e-02 2.14438989e-01 4.99330285e-03 3.36755319e-06 2.15656886e-06 2.28720541e-04 7.18197378e-01 1.54494795e+03 +3.28000000e-05 6.21303822e-02 2.14425967e-01 5.01119182e-03 3.37032059e-06 2.17208588e-06 2.29538412e-04 7.18197378e-01 1.54494795e+03 +3.29000000e-05 6.21246731e-02 2.14412931e-01 5.02909995e-03 3.37309414e-06 2.18767561e-06 2.30357154e-04 7.18197378e-01 1.54494795e+03 +3.30000000e-05 6.21189579e-02 2.14399881e-01 5.04702730e-03 3.37587385e-06 2.20333828e-06 2.31176768e-04 7.18197378e-01 1.54494795e+03 +3.31000000e-05 6.21132365e-02 2.14386817e-01 5.06497389e-03 3.37865975e-06 2.21907409e-06 2.31997256e-04 7.18197378e-01 1.54494795e+03 +3.32000000e-05 6.21075090e-02 2.14373738e-01 5.08293976e-03 3.38145186e-06 2.23488327e-06 2.32818619e-04 7.18197378e-01 1.54494795e+03 +3.33000000e-05 6.21017753e-02 2.14360646e-01 5.10092495e-03 3.38425021e-06 2.25076604e-06 2.33640859e-04 7.18197378e-01 1.54494795e+03 +3.34000000e-05 6.20960355e-02 2.14347539e-01 5.11892950e-03 3.38705481e-06 2.26672261e-06 2.34463978e-04 7.18197378e-01 1.54494795e+03 +3.35000000e-05 6.20902894e-02 2.14334419e-01 5.13695343e-03 3.38986569e-06 2.28275320e-06 2.35287978e-04 7.18197378e-01 1.54494795e+03 +3.36000000e-05 6.20845372e-02 2.14321284e-01 5.15499680e-03 3.39268288e-06 2.29885804e-06 2.36112860e-04 7.18197378e-01 1.54494795e+03 +3.37000000e-05 6.20787788e-02 2.14308135e-01 5.17305964e-03 3.39550639e-06 2.31503734e-06 2.36938625e-04 7.18197378e-01 1.54494795e+03 +3.38000000e-05 6.20730141e-02 2.14294971e-01 5.19114198e-03 3.39833624e-06 2.33129134e-06 2.37765276e-04 7.18197378e-01 1.54494795e+03 +3.39000000e-05 6.20672432e-02 2.14281793e-01 5.20924387e-03 3.40117247e-06 2.34762025e-06 2.38592815e-04 7.18197378e-01 1.54699804e+03 +3.40000000e-05 6.20614661e-02 2.14268601e-01 5.22736533e-03 3.40401510e-06 2.36402429e-06 2.39421242e-04 7.18197378e-01 1.54699804e+03 +3.41000000e-05 6.20556827e-02 2.14255395e-01 5.24550642e-03 3.40686414e-06 2.38050370e-06 2.40250560e-04 7.18197378e-01 1.54699804e+03 +3.42000000e-05 6.20498931e-02 2.14242174e-01 5.26366716e-03 3.40971963e-06 2.39705870e-06 2.41080770e-04 7.18197378e-01 1.54699804e+03 +3.43000000e-05 6.20440971e-02 2.14228939e-01 5.28184759e-03 3.41258159e-06 2.41368951e-06 2.41911874e-04 7.18197378e-01 1.54699804e+03 +3.44000000e-05 6.20382949e-02 2.14215690e-01 5.30004775e-03 3.41545003e-06 2.43039637e-06 2.42743874e-04 7.18197378e-01 1.54699804e+03 +3.45000000e-05 6.20324864e-02 2.14202426e-01 5.31826769e-03 3.41832499e-06 2.44717949e-06 2.43576772e-04 7.18197378e-01 1.54699804e+03 +3.46000000e-05 6.20266715e-02 2.14189147e-01 5.33650743e-03 3.42120649e-06 2.46403911e-06 2.44410569e-04 7.18197378e-01 1.54699804e+03 +3.47000000e-05 6.20208504e-02 2.14175854e-01 5.35476702e-03 3.42409455e-06 2.48097547e-06 2.45245267e-04 7.18197378e-01 1.54699804e+03 +3.48000000e-05 6.20150229e-02 2.14162547e-01 5.37304649e-03 3.42698920e-06 2.49798878e-06 2.46080867e-04 7.18197378e-01 1.54699804e+03 +3.49000000e-05 6.20091890e-02 2.14149225e-01 5.39134589e-03 3.42989047e-06 2.51507928e-06 2.46917372e-04 7.18197378e-01 1.54699804e+03 +3.50000000e-05 6.20033488e-02 2.14135888e-01 5.40966525e-03 3.43279837e-06 2.53224721e-06 2.47754783e-04 7.18197378e-01 1.54699804e+03 +3.51000000e-05 6.19975021e-02 2.14122537e-01 5.42800461e-03 3.43571293e-06 2.54949280e-06 2.48593102e-04 7.18197378e-01 1.54699804e+03 +3.52000000e-05 6.19916491e-02 2.14109171e-01 5.44636401e-03 3.43863417e-06 2.56681628e-06 2.49432331e-04 7.18197378e-01 1.54907727e+03 +3.53000000e-05 6.19857897e-02 2.14095791e-01 5.46474349e-03 3.44156213e-06 2.58421788e-06 2.50272471e-04 7.18197378e-01 1.54907727e+03 +3.54000000e-05 6.19799239e-02 2.14082395e-01 5.48314308e-03 3.44449681e-06 2.60169785e-06 2.51113525e-04 7.18197378e-01 1.54907727e+03 +3.55000000e-05 6.19740517e-02 2.14068985e-01 5.50156284e-03 3.44743825e-06 2.61925641e-06 2.51955493e-04 7.18197378e-01 1.54907727e+03 +3.56000000e-05 6.19681730e-02 2.14055561e-01 5.52000279e-03 3.45038648e-06 2.63689381e-06 2.52798378e-04 7.18197378e-01 1.54907727e+03 +3.57000000e-05 6.19622878e-02 2.14042121e-01 5.53846298e-03 3.45334152e-06 2.65461029e-06 2.53642182e-04 7.18197378e-01 1.54907727e+03 +3.58000000e-05 6.19563962e-02 2.14028667e-01 5.55694344e-03 3.45630339e-06 2.67240608e-06 2.54486906e-04 7.18197378e-01 1.54907727e+03 +3.59000000e-05 6.19504981e-02 2.14015198e-01 5.57544422e-03 3.45927212e-06 2.69028142e-06 2.55332552e-04 7.18197378e-01 1.54907727e+03 +3.60000000e-05 6.19445936e-02 2.14001714e-01 5.59396535e-03 3.46224774e-06 2.70823656e-06 2.56179123e-04 7.18197378e-01 1.54907727e+03 +3.61000000e-05 6.19386825e-02 2.13988215e-01 5.61250688e-03 3.46523027e-06 2.72627173e-06 2.57026618e-04 7.18197378e-01 1.54907727e+03 +3.62000000e-05 6.19327649e-02 2.13974701e-01 5.63106884e-03 3.46821974e-06 2.74438718e-06 2.57875042e-04 7.18197378e-01 1.54907727e+03 +3.63000000e-05 6.19268407e-02 2.13961172e-01 5.64965128e-03 3.47121616e-06 2.76258316e-06 2.58724395e-04 7.18197378e-01 1.54907727e+03 +3.64000000e-05 6.19209101e-02 2.13947628e-01 5.66825424e-03 3.47421958e-06 2.78085990e-06 2.59574679e-04 7.18197378e-01 1.54907727e+03 +3.65000000e-05 6.19149729e-02 2.13934069e-01 5.68687774e-03 3.47723001e-06 2.79921765e-06 2.60425896e-04 7.18197378e-01 1.55118637e+03 +3.66000000e-05 6.19090291e-02 2.13920495e-01 5.70552185e-03 3.48024750e-06 2.81765667e-06 2.61278048e-04 7.18197378e-01 1.55118637e+03 +3.67000000e-05 6.19030787e-02 2.13906906e-01 5.72418659e-03 3.48327206e-06 2.83617719e-06 2.62131136e-04 7.18197378e-01 1.55118637e+03 +3.68000000e-05 6.18971217e-02 2.13893302e-01 5.74287201e-03 3.48630372e-06 2.85477946e-06 2.62985163e-04 7.18197378e-01 1.55118637e+03 +3.69000000e-05 6.18911581e-02 2.13879683e-01 5.76157815e-03 3.48934251e-06 2.87346374e-06 2.63840130e-04 7.18197378e-01 1.55118637e+03 +3.70000000e-05 6.18851880e-02 2.13866048e-01 5.78030504e-03 3.49238845e-06 2.89223027e-06 2.64696040e-04 7.18197378e-01 1.55118637e+03 +3.71000000e-05 6.18792111e-02 2.13852399e-01 5.79905274e-03 3.49544157e-06 2.91107930e-06 2.65552893e-04 7.18197378e-01 1.55118637e+03 +3.72000000e-05 6.18732277e-02 2.13838734e-01 5.81782128e-03 3.49850190e-06 2.93001109e-06 2.66410693e-04 7.18197378e-01 1.55118637e+03 +3.73000000e-05 6.18672375e-02 2.13825054e-01 5.83661070e-03 3.50156947e-06 2.94902588e-06 2.67269440e-04 7.18197378e-01 1.55118637e+03 +3.74000000e-05 6.18612407e-02 2.13811358e-01 5.85542104e-03 3.50464430e-06 2.96812394e-06 2.68129137e-04 7.18197378e-01 1.55118637e+03 +3.75000000e-05 6.18552372e-02 2.13797648e-01 5.87425235e-03 3.50772643e-06 2.98730551e-06 2.68989785e-04 7.18197378e-01 1.55118637e+03 +3.76000000e-05 6.18492270e-02 2.13783922e-01 5.89310466e-03 3.51081589e-06 3.00657085e-06 2.69851387e-04 7.18197378e-01 1.55118637e+03 +3.77000000e-05 6.18432101e-02 2.13770180e-01 5.91197803e-03 3.51391269e-06 3.02592022e-06 2.70713943e-04 7.18197378e-01 1.55118637e+03 +3.78000000e-05 6.18371865e-02 2.13756423e-01 5.93087248e-03 3.51701687e-06 3.04535388e-06 2.71577457e-04 7.18197378e-01 1.55332614e+03 +3.79000000e-05 6.18311561e-02 2.13742651e-01 5.94978807e-03 3.52012844e-06 3.06487207e-06 2.72441931e-04 7.18197378e-01 1.55332614e+03 +3.80000000e-05 6.18251190e-02 2.13728863e-01 5.96872483e-03 3.52324743e-06 3.08447507e-06 2.73307365e-04 7.18197378e-01 1.55332614e+03 +3.81000000e-05 6.18190751e-02 2.13715060e-01 5.98768281e-03 3.52637388e-06 3.10416314e-06 2.74173762e-04 7.18197378e-01 1.55332614e+03 +3.82000000e-05 6.18130245e-02 2.13701241e-01 6.00666205e-03 3.52950781e-06 3.12393652e-06 2.75041123e-04 7.18197378e-01 1.55332614e+03 +3.83000000e-05 6.18069670e-02 2.13687407e-01 6.02566258e-03 3.53264925e-06 3.14379549e-06 2.75909452e-04 7.18197378e-01 1.55332614e+03 +3.84000000e-05 6.18009027e-02 2.13673557e-01 6.04468447e-03 3.53579824e-06 3.16374031e-06 2.76778749e-04 7.18197378e-01 1.55332614e+03 +3.85000000e-05 6.17948317e-02 2.13659691e-01 6.06372774e-03 3.53895480e-06 3.18377125e-06 2.77649016e-04 7.18197378e-01 1.55332614e+03 +3.86000000e-05 6.17887537e-02 2.13645810e-01 6.08279244e-03 3.54211895e-06 3.20388856e-06 2.78520256e-04 7.18197378e-01 1.55332614e+03 +3.87000000e-05 6.17826690e-02 2.13631913e-01 6.10187861e-03 3.54529073e-06 3.22409251e-06 2.79392470e-04 7.18197378e-01 1.55332614e+03 +3.88000000e-05 6.17765773e-02 2.13618000e-01 6.12098629e-03 3.54847017e-06 3.24438337e-06 2.80265661e-04 7.18197378e-01 1.55332614e+03 +3.89000000e-05 6.17704788e-02 2.13604072e-01 6.14011554e-03 3.55165728e-06 3.26476141e-06 2.81139830e-04 7.18197378e-01 1.55332614e+03 +3.90000000e-05 6.17643735e-02 2.13590127e-01 6.15926638e-03 3.55485211e-06 3.28522690e-06 2.82014979e-04 7.18197378e-01 1.55332614e+03 +3.91000000e-05 6.17582612e-02 2.13576167e-01 6.17843888e-03 3.55805468e-06 3.30578011e-06 2.82891111e-04 7.18197378e-01 1.55332614e+03 +3.92000000e-05 6.17521420e-02 2.13562191e-01 6.19763306e-03 3.56126507e-06 3.32642130e-06 2.83768227e-04 7.18197378e-01 1.55549737e+03 +3.93000000e-05 6.17460158e-02 2.13548199e-01 6.21684897e-03 3.56448328e-06 3.34715075e-06 2.84646328e-04 7.18197378e-01 1.55549737e+03 +3.94000000e-05 6.17398827e-02 2.13534192e-01 6.23608666e-03 3.56770934e-06 3.36796874e-06 2.85525418e-04 7.18197378e-01 1.55549737e+03 +3.95000000e-05 6.17337427e-02 2.13520168e-01 6.25534617e-03 3.57094327e-06 3.38887554e-06 2.86405498e-04 7.18197378e-01 1.55549737e+03 +3.96000000e-05 6.17275957e-02 2.13506128e-01 6.27462755e-03 3.57418512e-06 3.40987141e-06 2.87286570e-04 7.18197378e-01 1.55549737e+03 +3.97000000e-05 6.17214417e-02 2.13492073e-01 6.29393083e-03 3.57743491e-06 3.43095665e-06 2.88168637e-04 7.18197378e-01 1.55549737e+03 +3.98000000e-05 6.17152807e-02 2.13478001e-01 6.31325607e-03 3.58069267e-06 3.45213151e-06 2.89051699e-04 7.18197378e-01 1.55549737e+03 +3.99000000e-05 6.17091126e-02 2.13463913e-01 6.33260330e-03 3.58395845e-06 3.47339630e-06 2.89935760e-04 7.18197378e-01 1.55549737e+03 +4.00000000e-05 6.17029376e-02 2.13449809e-01 6.35197258e-03 3.58723226e-06 3.49475127e-06 2.90820820e-04 7.18197378e-01 1.55549737e+03 +4.01000000e-05 6.16967555e-02 2.13435689e-01 6.37136394e-03 3.59051415e-06 3.51619672e-06 2.91706883e-04 7.18197378e-01 1.55549737e+03 +4.02000000e-05 6.16905663e-02 2.13421553e-01 6.39077743e-03 3.59380415e-06 3.53773292e-06 2.92593950e-04 7.18197378e-01 1.55549737e+03 +4.03000000e-05 6.16843701e-02 2.13407400e-01 6.41021310e-03 3.59710230e-06 3.55936015e-06 2.93482023e-04 7.18197378e-01 1.55549737e+03 +4.04000000e-05 6.16781668e-02 2.13393232e-01 6.42967099e-03 3.60040862e-06 3.58107871e-06 2.94371104e-04 7.18197378e-01 1.55549737e+03 +4.05000000e-05 6.16719564e-02 2.13379047e-01 6.44915115e-03 3.60372311e-06 3.60288886e-06 2.95261195e-04 7.18197378e-01 1.55706512e+03 +4.06000000e-05 6.16657389e-02 2.13364846e-01 6.46865362e-03 3.60704581e-06 3.62479091e-06 2.96152299e-04 7.18197378e-01 1.55706512e+03 +4.07000000e-05 6.16595142e-02 2.13350628e-01 6.48817844e-03 3.61037677e-06 3.64678513e-06 2.97044418e-04 7.18197378e-01 1.55706512e+03 +4.08000000e-05 6.16532824e-02 2.13336394e-01 6.50772567e-03 3.61371602e-06 3.66887182e-06 2.97937552e-04 7.18197378e-01 1.55706512e+03 +4.09000000e-05 6.16470435e-02 2.13322144e-01 6.52729535e-03 3.61706358e-06 3.69105126e-06 2.98831705e-04 7.18197378e-01 1.55706512e+03 +4.10000000e-05 6.16407973e-02 2.13307877e-01 6.54688752e-03 3.62041949e-06 3.71332374e-06 2.99726879e-04 7.18197378e-01 1.55706512e+03 +4.11000000e-05 6.16345440e-02 2.13293593e-01 6.56650224e-03 3.62378377e-06 3.73568955e-06 3.00623075e-04 7.18197378e-01 1.55706512e+03 +4.12000000e-05 6.16282835e-02 2.13279294e-01 6.58613954e-03 3.62715645e-06 3.75814898e-06 3.01520296e-04 7.18197378e-01 1.55706512e+03 +4.13000000e-05 6.16220158e-02 2.13264977e-01 6.60579947e-03 3.63053756e-06 3.78070234e-06 3.02418544e-04 7.18197378e-01 1.55706512e+03 +4.14000000e-05 6.16157408e-02 2.13250644e-01 6.62548208e-03 3.63392718e-06 3.80334990e-06 3.03317821e-04 7.18197378e-01 1.55864959e+03 +4.15000000e-05 6.16094586e-02 2.13236295e-01 6.64518742e-03 3.63732534e-06 3.82609198e-06 3.04218129e-04 7.18197378e-01 1.55864959e+03 +4.16000000e-05 6.16031691e-02 2.13221928e-01 6.66491553e-03 3.64073206e-06 3.84892885e-06 3.05119470e-04 7.18197378e-01 1.55864959e+03 +4.17000000e-05 6.15968723e-02 2.13207546e-01 6.68466646e-03 3.64414738e-06 3.87186083e-06 3.06021846e-04 7.18197378e-01 1.55864959e+03 +4.18000000e-05 6.15905683e-02 2.13193146e-01 6.70444026e-03 3.64757132e-06 3.89488821e-06 3.06925259e-04 7.18197378e-01 1.55864959e+03 +4.19000000e-05 6.15842569e-02 2.13178730e-01 6.72423697e-03 3.65100392e-06 3.91801128e-06 3.07829712e-04 7.18197378e-01 1.55864959e+03 +4.20000000e-05 6.15779382e-02 2.13164296e-01 6.74405664e-03 3.65444523e-06 3.94123036e-06 3.08735207e-04 7.18197378e-01 1.55864959e+03 +4.21000000e-05 6.15716122e-02 2.13149846e-01 6.76389932e-03 3.65789527e-06 3.96454574e-06 3.09641745e-04 7.18197378e-01 1.55864959e+03 +4.22000000e-05 6.15652788e-02 2.13135380e-01 6.78376506e-03 3.66135409e-06 3.98795773e-06 3.10549329e-04 7.18197378e-01 1.55864959e+03 +4.23000000e-05 6.15589381e-02 2.13120896e-01 6.80365389e-03 3.66482172e-06 4.01146663e-06 3.11457961e-04 7.18197378e-01 1.56025112e+03 +4.24000000e-05 6.15525900e-02 2.13106395e-01 6.82356588e-03 3.66829816e-06 4.03507274e-06 3.12367644e-04 7.18197378e-01 1.56025112e+03 +4.25000000e-05 6.15462344e-02 2.13091878e-01 6.84350107e-03 3.67178349e-06 4.05877637e-06 3.13278379e-04 7.18197378e-01 1.56025112e+03 +4.26000000e-05 6.15398715e-02 2.13077343e-01 6.86345951e-03 3.67527772e-06 4.08257784e-06 3.14190168e-04 7.18197378e-01 1.56025112e+03 +4.27000000e-05 6.15335011e-02 2.13062792e-01 6.88344124e-03 3.67878091e-06 4.10647745e-06 3.15103014e-04 7.18197378e-01 1.56025112e+03 +4.28000000e-05 6.15271233e-02 2.13048223e-01 6.90344632e-03 3.68229308e-06 4.13047550e-06 3.16016919e-04 7.18197378e-01 1.56025112e+03 +4.29000000e-05 6.15207380e-02 2.13033637e-01 6.92347478e-03 3.68581428e-06 4.15457232e-06 3.16931885e-04 7.18197378e-01 1.56025112e+03 +4.30000000e-05 6.15143453e-02 2.13019034e-01 6.94352669e-03 3.68934454e-06 4.17876821e-06 3.17847914e-04 7.18197378e-01 1.56025112e+03 +4.31000000e-05 6.15079451e-02 2.13004414e-01 6.96360209e-03 3.69288391e-06 4.20306349e-06 3.18765009e-04 7.18197378e-01 1.56025112e+03 +4.32000000e-05 6.15015373e-02 2.12989777e-01 6.98370102e-03 3.69643241e-06 4.22745847e-06 3.19683171e-04 7.18197378e-01 1.56187004e+03 +4.33000000e-05 6.14951220e-02 2.12975122e-01 7.00382355e-03 3.69999008e-06 4.25195347e-06 3.20602404e-04 7.18197378e-01 1.56187004e+03 +4.34000000e-05 6.14886992e-02 2.12960450e-01 7.02396971e-03 3.70355696e-06 4.27654881e-06 3.21522708e-04 7.18197378e-01 1.56187004e+03 +4.35000000e-05 6.14822689e-02 2.12945761e-01 7.04413956e-03 3.70713309e-06 4.30124480e-06 3.22444087e-04 7.18197378e-01 1.56187004e+03 +4.36000000e-05 6.14758310e-02 2.12931055e-01 7.06433314e-03 3.71071851e-06 4.32604177e-06 3.23366543e-04 7.18197378e-01 1.56187004e+03 +4.37000000e-05 6.14693854e-02 2.12916331e-01 7.08455051e-03 3.71431325e-06 4.35094004e-06 3.24290077e-04 7.18197378e-01 1.56187004e+03 +4.38000000e-05 6.14629323e-02 2.12901590e-01 7.10479171e-03 3.71791736e-06 4.37593992e-06 3.25214692e-04 7.18197378e-01 1.56187004e+03 +4.39000000e-05 6.14564716e-02 2.12886831e-01 7.12505680e-03 3.72153088e-06 4.40104175e-06 3.26140391e-04 7.18197378e-01 1.56187004e+03 +4.40000000e-05 6.14500032e-02 2.12872055e-01 7.14534583e-03 3.72515384e-06 4.42624584e-06 3.27067175e-04 7.18197378e-01 1.56187004e+03 +4.41000000e-05 6.14435272e-02 2.12857261e-01 7.16565884e-03 3.72878627e-06 4.45155253e-06 3.27995048e-04 7.18197378e-01 1.56187004e+03 +4.42000000e-05 6.14370435e-02 2.12842449e-01 7.18599588e-03 3.73242823e-06 4.47696213e-06 3.28924010e-04 7.18197378e-01 1.56350669e+03 +4.43000000e-05 6.14305522e-02 2.12827620e-01 7.20635702e-03 3.73607974e-06 4.50247499e-06 3.29854065e-04 7.18197378e-01 1.56350669e+03 +4.44000000e-05 6.14240531e-02 2.12812774e-01 7.22674229e-03 3.73974085e-06 4.52809143e-06 3.30785214e-04 7.18197378e-01 1.56350669e+03 +4.45000000e-05 6.14175463e-02 2.12797909e-01 7.24715174e-03 3.74341159e-06 4.55381177e-06 3.31717461e-04 7.18197378e-01 1.56350669e+03 +4.46000000e-05 6.14110318e-02 2.12783027e-01 7.26758544e-03 3.74709200e-06 4.57963636e-06 3.32650807e-04 7.18197378e-01 1.56350669e+03 +4.47000000e-05 6.14045096e-02 2.12768128e-01 7.28804343e-03 3.75078213e-06 4.60556553e-06 3.33585254e-04 7.18197378e-01 1.56350669e+03 +4.48000000e-05 6.13979795e-02 2.12753210e-01 7.30852576e-03 3.75448201e-06 4.63159961e-06 3.34520806e-04 7.18197378e-01 1.56350669e+03 +4.49000000e-05 6.13914417e-02 2.12738275e-01 7.32903249e-03 3.75819168e-06 4.65773894e-06 3.35457463e-04 7.18197378e-01 1.56350669e+03 +4.50000000e-05 6.13848961e-02 2.12723321e-01 7.34956365e-03 3.76191117e-06 4.68398385e-06 3.36395230e-04 7.18197378e-01 1.56350669e+03 +4.51000000e-05 6.13783427e-02 2.12708350e-01 7.37011932e-03 3.76564055e-06 4.71033469e-06 3.37334107e-04 7.18197378e-01 1.56516141e+03 +4.52000000e-05 6.13717815e-02 2.12693361e-01 7.39069953e-03 3.76937988e-06 4.73679179e-06 3.38274097e-04 7.18197378e-01 1.56516141e+03 +4.53000000e-05 6.13652124e-02 2.12678354e-01 7.41130435e-03 3.77312917e-06 4.76335550e-06 3.39215203e-04 7.18197378e-01 1.56516141e+03 +4.54000000e-05 6.13586355e-02 2.12663329e-01 7.43193382e-03 3.77688848e-06 4.79002616e-06 3.40157428e-04 7.18197378e-01 1.56516141e+03 +4.55000000e-05 6.13520507e-02 2.12648285e-01 7.45258799e-03 3.78065784e-06 4.81680412e-06 3.41100772e-04 7.18197378e-01 1.56516141e+03 +4.56000000e-05 6.13454579e-02 2.12633224e-01 7.47326692e-03 3.78443730e-06 4.84368971e-06 3.42045239e-04 7.18197378e-01 1.56516141e+03 +4.57000000e-05 6.13388573e-02 2.12618144e-01 7.49397067e-03 3.78822691e-06 4.87068330e-06 3.42990832e-04 7.18197378e-01 1.56516141e+03 +4.58000000e-05 6.13322488e-02 2.12603047e-01 7.51469927e-03 3.79202671e-06 4.89778521e-06 3.43937552e-04 7.18197378e-01 1.56516141e+03 +4.59000000e-05 6.13256322e-02 2.12587931e-01 7.53545280e-03 3.79583674e-06 4.92499582e-06 3.44885401e-04 7.18197378e-01 1.56516141e+03 +4.60000000e-05 6.13190078e-02 2.12572797e-01 7.55623129e-03 3.79965706e-06 4.95231546e-06 3.45834384e-04 7.18197378e-01 1.56683457e+03 +4.61000000e-05 6.13123753e-02 2.12557644e-01 7.57703481e-03 3.80348763e-06 4.97974449e-06 3.46784500e-04 7.18197378e-01 1.56683457e+03 +4.62000000e-05 6.13057349e-02 2.12542474e-01 7.59786340e-03 3.80732854e-06 5.00728326e-06 3.47735754e-04 7.18197378e-01 1.56683457e+03 +4.63000000e-05 6.12990864e-02 2.12527284e-01 7.61871713e-03 3.81117984e-06 5.03493213e-06 3.48688148e-04 7.18197378e-01 1.56683457e+03 +4.64000000e-05 6.12924299e-02 2.12512077e-01 7.63959604e-03 3.81504157e-06 5.06269145e-06 3.49641683e-04 7.18197378e-01 1.56683457e+03 +4.65000000e-05 6.12857654e-02 2.12496851e-01 7.66050019e-03 3.81891376e-06 5.09056159e-06 3.50596363e-04 7.18197378e-01 1.56683457e+03 +4.66000000e-05 6.12790928e-02 2.12481606e-01 7.68142963e-03 3.82279646e-06 5.11854290e-06 3.51552190e-04 7.18197378e-01 1.56683457e+03 +4.67000000e-05 6.12724121e-02 2.12466343e-01 7.70238442e-03 3.82668970e-06 5.14663575e-06 3.52509166e-04 7.18197378e-01 1.56683457e+03 +4.68000000e-05 6.12657233e-02 2.12451062e-01 7.72336461e-03 3.83059354e-06 5.17484049e-06 3.53467294e-04 7.18197378e-01 1.56683457e+03 +4.69000000e-05 6.12590263e-02 2.12435761e-01 7.74437026e-03 3.83450799e-06 5.20315749e-06 3.54426576e-04 7.18197378e-01 1.56683457e+03 +4.70000000e-05 6.12523213e-02 2.12420442e-01 7.76540142e-03 3.83843321e-06 5.23158711e-06 3.55387015e-04 7.18197378e-01 1.56800765e+03 +4.71000000e-05 6.12456081e-02 2.12405105e-01 7.78645815e-03 3.84236922e-06 5.26012973e-06 3.56348613e-04 7.18197378e-01 1.56800765e+03 +4.72000000e-05 6.12388867e-02 2.12389748e-01 7.80754050e-03 3.84631607e-06 5.28878570e-06 3.57311373e-04 7.18197378e-01 1.56800765e+03 +4.73000000e-05 6.12321571e-02 2.12374373e-01 7.82864852e-03 3.85027382e-06 5.31755540e-06 3.58275297e-04 7.18197378e-01 1.56800765e+03 +4.74000000e-05 6.12254194e-02 2.12358979e-01 7.84978228e-03 3.85424255e-06 5.34643921e-06 3.59240387e-04 7.18197378e-01 1.56800765e+03 +4.75000000e-05 6.12186734e-02 2.12343567e-01 7.87094183e-03 3.85822232e-06 5.37543749e-06 3.60206647e-04 7.18197378e-01 1.56800765e+03 +4.76000000e-05 6.12119191e-02 2.12328135e-01 7.89212722e-03 3.86221316e-06 5.40455061e-06 3.61174079e-04 7.18197378e-01 1.56880051e+03 +4.77000000e-05 6.12051566e-02 2.12312684e-01 7.91333851e-03 3.86621498e-06 5.43377896e-06 3.62142685e-04 7.18197378e-01 1.56880051e+03 +4.78000000e-05 6.11983858e-02 2.12297215e-01 7.93457576e-03 3.87022785e-06 5.46312290e-06 3.63112468e-04 7.18197378e-01 1.56880051e+03 +4.79000000e-05 6.11916068e-02 2.12281726e-01 7.95583902e-03 3.87425176e-06 5.49258283e-06 3.64083430e-04 7.18197378e-01 1.56880051e+03 +4.80000000e-05 6.11848194e-02 2.12266218e-01 7.97712836e-03 3.87828668e-06 5.52215911e-06 3.65055574e-04 7.18197378e-01 1.56880051e+03 +4.81000000e-05 6.11780236e-02 2.12250692e-01 7.99844381e-03 3.88233285e-06 5.55185213e-06 3.66028903e-04 7.18197378e-01 1.56936559e+03 +4.82000000e-05 6.11712196e-02 2.12235146e-01 8.01978546e-03 3.88639032e-06 5.58166227e-06 3.67003418e-04 7.18197378e-01 1.56936559e+03 +4.83000000e-05 6.11644071e-02 2.12219581e-01 8.04115334e-03 3.89045924e-06 5.61158992e-06 3.67979124e-04 7.18197378e-01 1.56936559e+03 +4.84000000e-05 6.11575863e-02 2.12203996e-01 8.06254752e-03 3.89453954e-06 5.64163547e-06 3.68956021e-04 7.18197378e-01 1.56993280e+03 +4.85000000e-05 6.11507570e-02 2.12188393e-01 8.08396806e-03 3.89863130e-06 5.67179929e-06 3.69934114e-04 7.18197378e-01 1.56993280e+03 +4.86000000e-05 6.11439194e-02 2.12172770e-01 8.10541501e-03 3.90273460e-06 5.70208178e-06 3.70913403e-04 7.18197378e-01 1.56993280e+03 +4.87000000e-05 6.11370733e-02 2.12157127e-01 8.12688843e-03 3.90684944e-06 5.73248334e-06 3.71893893e-04 7.18197378e-01 1.57050214e+03 +4.88000000e-05 6.11302187e-02 2.12141466e-01 8.14838839e-03 3.91097583e-06 5.76300435e-06 3.72875586e-04 7.18197378e-01 1.57050214e+03 +4.89000000e-05 6.11233556e-02 2.12125784e-01 8.16991492e-03 3.91511374e-06 5.79364520e-06 3.73858483e-04 7.18197378e-01 1.57050214e+03 +4.90000000e-05 6.11164841e-02 2.12110084e-01 8.19146811e-03 3.91926332e-06 5.82440630e-06 3.74842589e-04 7.18197378e-01 1.57107363e+03 +4.91000000e-05 6.11096040e-02 2.12094363e-01 8.21304800e-03 3.92342467e-06 5.85528804e-06 3.75827905e-04 7.18197378e-01 1.57107363e+03 +4.92000000e-05 6.11027154e-02 2.12078624e-01 8.23465465e-03 3.92759784e-06 5.88629081e-06 3.76814434e-04 7.18197378e-01 1.57107363e+03 +4.93000000e-05 6.10958183e-02 2.12062864e-01 8.25628813e-03 3.93178286e-06 5.91741503e-06 3.77802180e-04 7.18197378e-01 1.57164728e+03 +4.94000000e-05 6.10889126e-02 2.12047085e-01 8.27794848e-03 3.93597975e-06 5.94866108e-06 3.78791143e-04 7.18197378e-01 1.57164728e+03 +4.95000000e-05 6.10819982e-02 2.12031287e-01 8.29963578e-03 3.94018860e-06 5.98002938e-06 3.79781328e-04 7.18197378e-01 1.57164728e+03 +4.96000000e-05 6.10750753e-02 2.12015468e-01 8.32135008e-03 3.94440947e-06 6.01152033e-06 3.80772737e-04 7.18197378e-01 1.57222311e+03 +4.97000000e-05 6.10681437e-02 2.11999630e-01 8.34309143e-03 3.94864245e-06 6.04313434e-06 3.81765372e-04 7.18197378e-01 1.57222311e+03 +4.98000000e-05 6.10612035e-02 2.11983772e-01 8.36485991e-03 3.95288761e-06 6.07487181e-06 3.82759237e-04 7.18197378e-01 1.57222311e+03 +4.99000000e-05 6.10542546e-02 2.11967894e-01 8.38665556e-03 3.95714496e-06 6.10673316e-06 3.83754334e-04 7.18197378e-01 1.57280114e+03 +5.00000000e-05 6.10472971e-02 2.11951996e-01 8.40847846e-03 3.96141446e-06 6.13871879e-06 3.84750665e-04 7.18197378e-01 1.57280114e+03 +5.01000000e-05 6.10403308e-02 2.11936078e-01 8.43032866e-03 3.96569611e-06 6.17082912e-06 3.85748234e-04 7.18197378e-01 1.57280114e+03 +5.02000000e-05 6.10333558e-02 2.11920140e-01 8.45220622e-03 3.96998998e-06 6.20306457e-06 3.86747043e-04 7.18197378e-01 1.57338138e+03 +5.03000000e-05 6.10263720e-02 2.11904182e-01 8.47411120e-03 3.97429632e-06 6.23542555e-06 3.87747095e-04 7.18197378e-01 1.57338138e+03 +5.04000000e-05 6.10193795e-02 2.11888204e-01 8.49604366e-03 3.97861520e-06 6.26791248e-06 3.88748393e-04 7.18197378e-01 1.57338138e+03 +5.05000000e-05 6.10123782e-02 2.11872206e-01 8.51800367e-03 3.98294670e-06 6.30052578e-06 3.89750939e-04 7.18197378e-01 1.57396384e+03 +5.06000000e-05 6.10053681e-02 2.11856187e-01 8.53999128e-03 3.98729070e-06 6.33326588e-06 3.90754736e-04 7.18197378e-01 1.57396384e+03 +5.07000000e-05 6.09983492e-02 2.11840149e-01 8.56200656e-03 3.99164732e-06 6.36613319e-06 3.91759787e-04 7.18197378e-01 1.57396384e+03 +5.08000000e-05 6.09913214e-02 2.11824090e-01 8.58404957e-03 3.99601658e-06 6.39912814e-06 3.92766095e-04 7.18197378e-01 1.57454854e+03 +5.09000000e-05 6.09842848e-02 2.11808011e-01 8.60612037e-03 4.00039858e-06 6.43225116e-06 3.93773663e-04 7.18197378e-01 1.57454854e+03 +5.10000000e-05 6.09772393e-02 2.11791911e-01 8.62821902e-03 4.00479332e-06 6.46550269e-06 3.94782493e-04 7.18197378e-01 1.57454854e+03 +5.11000000e-05 6.09701848e-02 2.11775791e-01 8.65034559e-03 4.00920083e-06 6.49888314e-06 3.95792588e-04 7.18197378e-01 1.57513550e+03 +5.12000000e-05 6.09631215e-02 2.11759651e-01 8.67250014e-03 4.01362125e-06 6.53239295e-06 3.96803951e-04 7.18197378e-01 1.57513550e+03 +5.13000000e-05 6.09560492e-02 2.11743490e-01 8.69468273e-03 4.01805465e-06 6.56603255e-06 3.97816585e-04 7.18197378e-01 1.57513550e+03 +5.14000000e-05 6.09489679e-02 2.11727308e-01 8.71689343e-03 4.02250111e-06 6.59980239e-06 3.98830493e-04 7.18197378e-01 1.57572473e+03 +5.15000000e-05 6.09418777e-02 2.11711106e-01 8.73913229e-03 4.02696056e-06 6.63370290e-06 3.99845677e-04 7.18197378e-01 1.57572473e+03 +5.16000000e-05 6.09347784e-02 2.11694883e-01 8.76139938e-03 4.03143309e-06 6.66773452e-06 4.00862140e-04 7.18197378e-01 1.57572473e+03 +5.17000000e-05 6.09276702e-02 2.11678640e-01 8.78369477e-03 4.03591871e-06 6.70189768e-06 4.01879886e-04 7.18197378e-01 1.57631624e+03 +5.18000000e-05 6.09205529e-02 2.11662375e-01 8.80601851e-03 4.04041772e-06 6.73619284e-06 4.02898917e-04 7.18197378e-01 1.57631624e+03 +5.19000000e-05 6.09134265e-02 2.11646090e-01 8.82837068e-03 4.04493021e-06 6.77062044e-06 4.03919236e-04 7.18197378e-01 1.57631624e+03 +5.20000000e-05 6.09062910e-02 2.11629784e-01 8.85075134e-03 4.04945637e-06 6.80518092e-06 4.04940846e-04 7.18197378e-01 1.57631624e+03 +5.21000000e-05 6.08991464e-02 2.11613458e-01 8.87316054e-03 4.05399588e-06 6.83987474e-06 4.05963750e-04 7.18197378e-01 1.57672839e+03 +5.22000000e-05 6.08919927e-02 2.11597110e-01 8.89559836e-03 4.05854846e-06 6.87470234e-06 4.06987951e-04 7.18197378e-01 1.57672839e+03 +5.23000000e-05 6.08848299e-02 2.11580741e-01 8.91806486e-03 4.06311431e-06 6.90966418e-06 4.08013451e-04 7.18197378e-01 1.57701440e+03 +5.24000000e-05 6.08776579e-02 2.11564351e-01 8.94056011e-03 4.06769415e-06 6.94476071e-06 4.09040254e-04 7.18197378e-01 1.57730093e+03 +5.25000000e-05 6.08704767e-02 2.11547941e-01 8.96308417e-03 4.07228787e-06 6.97999239e-06 4.10068362e-04 7.18197378e-01 1.57730093e+03 +5.26000000e-05 6.08632862e-02 2.11531509e-01 8.98563710e-03 4.07689545e-06 7.01535968e-06 4.11097779e-04 7.18197378e-01 1.57758801e+03 +5.27000000e-05 6.08560866e-02 2.11515056e-01 9.00821898e-03 4.08151650e-06 7.05086303e-06 4.12128507e-04 7.18197378e-01 1.57787562e+03 +5.28000000e-05 6.08488777e-02 2.11498581e-01 9.03082986e-03 4.08615143e-06 7.08650291e-06 4.13160550e-04 7.18197378e-01 1.57787562e+03 +5.29000000e-05 6.08416595e-02 2.11482086e-01 9.05346982e-03 4.09080028e-06 7.12227978e-06 4.14193910e-04 7.18197378e-01 1.57816378e+03 +5.30000000e-05 6.08344320e-02 2.11465569e-01 9.07613892e-03 4.09546328e-06 7.15819410e-06 4.15228591e-04 7.18197378e-01 1.57845248e+03 +5.31000000e-05 6.08271953e-02 2.11449031e-01 9.09883723e-03 4.10014043e-06 7.19424635e-06 4.16264595e-04 7.18197378e-01 1.57845248e+03 +5.32000000e-05 6.08199491e-02 2.11432471e-01 9.12156481e-03 4.10483179e-06 7.23043700e-06 4.17301926e-04 7.18197378e-01 1.57874173e+03 +5.33000000e-05 6.08126937e-02 2.11415890e-01 9.14432173e-03 4.10953734e-06 7.26676651e-06 4.18340586e-04 7.18197378e-01 1.57903153e+03 +5.34000000e-05 6.08054288e-02 2.11399287e-01 9.16710806e-03 4.11425704e-06 7.30323536e-06 4.19380578e-04 7.18197378e-01 1.57903153e+03 +5.35000000e-05 6.07981545e-02 2.11382663e-01 9.18992386e-03 4.11899104e-06 7.33984403e-06 4.20421906e-04 7.18197378e-01 1.57932187e+03 +5.36000000e-05 6.07908708e-02 2.11366017e-01 9.21276921e-03 4.12373951e-06 7.37659299e-06 4.21464572e-04 7.18197378e-01 1.57961277e+03 +5.37000000e-05 6.07835777e-02 2.11349350e-01 9.23564417e-03 4.12850229e-06 7.41348273e-06 4.22508581e-04 7.18197378e-01 1.57990422e+03 +5.38000000e-05 6.07762751e-02 2.11332661e-01 9.25854881e-03 4.13327980e-06 7.45051371e-06 4.23553933e-04 7.18197378e-01 1.57990422e+03 +5.39000000e-05 6.07689630e-02 2.11315950e-01 9.28148319e-03 4.13807216e-06 7.48768644e-06 4.24600634e-04 7.18197378e-01 1.58019622e+03 +5.40000000e-05 6.07616414e-02 2.11299217e-01 9.30444739e-03 4.14287854e-06 7.52500139e-06 4.25648685e-04 7.18197378e-01 1.58040296e+03 +5.41000000e-05 6.07543103e-02 2.11282462e-01 9.32744148e-03 4.14770005e-06 7.56245905e-06 4.26698091e-04 7.18197378e-01 1.58055231e+03 +5.42000000e-05 6.07469696e-02 2.11265686e-01 9.35046552e-03 4.15253678e-06 7.60005991e-06 4.27748853e-04 7.18197378e-01 1.58070180e+03 +5.43000000e-05 6.07396194e-02 2.11248887e-01 9.37351958e-03 4.15738783e-06 7.63780446e-06 4.28800976e-04 7.18197378e-01 1.58085144e+03 +5.44000000e-05 6.07322595e-02 2.11232067e-01 9.39660374e-03 4.16225405e-06 7.67569320e-06 4.29854462e-04 7.18197378e-01 1.58115115e+03 +5.45000000e-05 6.07248900e-02 2.11215224e-01 9.41971805e-03 4.16713540e-06 7.71372662e-06 4.30909315e-04 7.18197378e-01 1.58130123e+03 +5.46000000e-05 6.07175109e-02 2.11198359e-01 9.44286260e-03 4.17203167e-06 7.75190522e-06 4.31965537e-04 7.18197378e-01 1.58145146e+03 +5.47000000e-05 6.07101221e-02 2.11181472e-01 9.46603745e-03 4.17694308e-06 7.79022951e-06 4.33023132e-04 7.18197378e-01 1.58167829e+03 +5.48000000e-05 6.07027236e-02 2.11164563e-01 9.48924268e-03 4.18186985e-06 7.82869997e-06 4.34082103e-04 7.18197378e-01 1.58190547e+03 +5.49000000e-05 6.06953154e-02 2.11147632e-01 9.51247835e-03 4.18681200e-06 7.86731712e-06 4.35142453e-04 7.18197378e-01 1.58213298e+03 +5.50000000e-05 6.06878975e-02 2.11130678e-01 9.53574453e-03 4.19176953e-06 7.90608147e-06 4.36204185e-04 7.18197378e-01 1.58236083e+03 +5.51000000e-05 6.06804698e-02 2.11113702e-01 9.55904129e-03 4.19674251e-06 7.94499352e-06 4.37267303e-04 7.18197378e-01 1.58258901e+03 +5.52000000e-05 6.06730324e-02 2.11096703e-01 9.58236872e-03 4.20173102e-06 7.98405378e-06 4.38331810e-04 7.18197378e-01 1.58281753e+03 +5.53000000e-05 6.06655851e-02 2.11079682e-01 9.60572687e-03 4.20673514e-06 8.02326277e-06 4.39397709e-04 7.18197378e-01 1.58281753e+03 +5.54000000e-05 6.06581280e-02 2.11062639e-01 9.62911582e-03 4.21175494e-06 8.06262100e-06 4.40465003e-04 7.18197378e-01 1.58333730e+03 +5.55000000e-05 6.06506611e-02 2.11045573e-01 9.65253564e-03 4.21679051e-06 8.10212899e-06 4.41533695e-04 7.18197378e-01 1.58333730e+03 +5.56000000e-05 6.06431843e-02 2.11028484e-01 9.67598641e-03 4.22184194e-06 8.14178726e-06 4.42603789e-04 7.18197378e-01 1.58385882e+03 +5.57000000e-05 6.06356976e-02 2.11011373e-01 9.69946819e-03 4.22690928e-06 8.18159633e-06 4.43675288e-04 7.18197378e-01 1.58385882e+03 +5.58000000e-05 6.06282010e-02 2.10994238e-01 9.72298106e-03 4.23199263e-06 8.22155673e-06 4.44748196e-04 7.18197378e-01 1.58385882e+03 +5.59000000e-05 6.06206945e-02 2.10977081e-01 9.74652509e-03 4.23709206e-06 8.26166897e-06 4.45822515e-04 7.18197378e-01 1.58438211e+03 +5.60000000e-05 6.06131780e-02 2.10959901e-01 9.77010036e-03 4.24220764e-06 8.30193359e-06 4.46898249e-04 7.18197378e-01 1.58438211e+03 +5.61000000e-05 6.06056515e-02 2.10942699e-01 9.79370694e-03 4.24733945e-06 8.34235113e-06 4.47975401e-04 7.18197378e-01 1.58490718e+03 +5.62000000e-05 6.05981149e-02 2.10925473e-01 9.81734491e-03 4.25248757e-06 8.38292210e-06 4.49053974e-04 7.18197378e-01 1.58490718e+03 +5.63000000e-05 6.05905684e-02 2.10908224e-01 9.84101432e-03 4.25765209e-06 8.42364706e-06 4.50133972e-04 7.18197378e-01 1.58490718e+03 +5.64000000e-05 6.05830118e-02 2.10890952e-01 9.86471527e-03 4.26283307e-06 8.46452653e-06 4.51215399e-04 7.18197378e-01 1.58543405e+03 +5.65000000e-05 6.05754451e-02 2.10873657e-01 9.88844783e-03 4.26803060e-06 8.50556106e-06 4.52298257e-04 7.18197378e-01 1.58543405e+03 +5.66000000e-05 6.05678683e-02 2.10856339e-01 9.91221207e-03 4.27324476e-06 8.54675119e-06 4.53382550e-04 7.18197378e-01 1.58543405e+03 +5.67000000e-05 6.05602814e-02 2.10838998e-01 9.93600806e-03 4.27847563e-06 8.58809746e-06 4.54468281e-04 7.18197378e-01 1.58633603e+03 +5.68000000e-05 6.05526843e-02 2.10821633e-01 9.95983588e-03 4.28372330e-06 8.62960042e-06 4.55555454e-04 7.18197378e-01 1.58633603e+03 +5.69000000e-05 6.05450771e-02 2.10804245e-01 9.98369560e-03 4.28898785e-06 8.67126062e-06 4.56644072e-04 7.18197378e-01 1.58633603e+03 +5.70000000e-05 6.05374596e-02 2.10786834e-01 1.00075873e-02 4.29426936e-06 8.71307861e-06 4.57734139e-04 7.18197378e-01 1.58633603e+03 +5.71000000e-05 6.05298320e-02 2.10769399e-01 1.00315111e-02 4.29956791e-06 8.75505495e-06 4.58825657e-04 7.18197378e-01 1.58724329e+03 +5.72000000e-05 6.05221940e-02 2.10751940e-01 1.00554670e-02 4.30488359e-06 8.79719019e-06 4.59918631e-04 7.18197378e-01 1.58724329e+03 +5.73000000e-05 6.05145458e-02 2.10734458e-01 1.00794551e-02 4.31021648e-06 8.83948489e-06 4.61013063e-04 7.18197378e-01 1.58724329e+03 +5.74000000e-05 6.05068873e-02 2.10716953e-01 1.01034755e-02 4.31556667e-06 8.88193961e-06 4.62108958e-04 7.18197378e-01 1.58724329e+03 +5.75000000e-05 6.04992185e-02 2.10699424e-01 1.01275282e-02 4.32093424e-06 8.92455492e-06 4.63206319e-04 7.18197378e-01 1.58815590e+03 +5.76000000e-05 6.04915393e-02 2.10681871e-01 1.01516135e-02 4.32631928e-06 8.96733138e-06 4.64305148e-04 7.18197378e-01 1.58815590e+03 +5.77000000e-05 6.04838498e-02 2.10664294e-01 1.01757312e-02 4.33172187e-06 9.01026956e-06 4.65405451e-04 7.18197378e-01 1.58815590e+03 +5.78000000e-05 6.04761498e-02 2.10646693e-01 1.01998815e-02 4.33714211e-06 9.05337004e-06 4.66507230e-04 7.18197378e-01 1.58815590e+03 +5.79000000e-05 6.04684395e-02 2.10629068e-01 1.02240645e-02 4.34258008e-06 9.09663338e-06 4.67610488e-04 7.18197378e-01 1.58815590e+03 +5.80000000e-05 6.04607186e-02 2.10611420e-01 1.02482802e-02 4.34803587e-06 9.14006016e-06 4.68715230e-04 7.18197378e-01 1.58907392e+03 +5.81000000e-05 6.04529874e-02 2.10593747e-01 1.02725288e-02 4.35350957e-06 9.18365096e-06 4.69821458e-04 7.18197378e-01 1.58907392e+03 +5.82000000e-05 6.04452456e-02 2.10576051e-01 1.02968103e-02 4.35900126e-06 9.22740636e-06 4.70929177e-04 7.18197378e-01 1.58907392e+03 +5.83000000e-05 6.04374932e-02 2.10558330e-01 1.03211248e-02 4.36451104e-06 9.27132695e-06 4.72038390e-04 7.18197378e-01 1.58907392e+03 +5.84000000e-05 6.04297304e-02 2.10540585e-01 1.03454723e-02 4.37003900e-06 9.31541331e-06 4.73149100e-04 7.18197378e-01 1.59049794e+03 +5.85000000e-05 6.04219570e-02 2.10522816e-01 1.03698530e-02 4.37558523e-06 9.35966604e-06 4.74261312e-04 7.18197378e-01 1.59049794e+03 +5.86000000e-05 6.04141729e-02 2.10505022e-01 1.03942670e-02 4.38114981e-06 9.40408571e-06 4.75375028e-04 7.18197378e-01 1.59049794e+03 +5.87000000e-05 6.04063783e-02 2.10487204e-01 1.04187142e-02 4.38673285e-06 9.44867293e-06 4.76490253e-04 7.18197378e-01 1.59049794e+03 +5.88000000e-05 6.03985729e-02 2.10469362e-01 1.04431948e-02 4.39233444e-06 9.49342829e-06 4.77606989e-04 7.18197378e-01 1.59049794e+03 +5.89000000e-05 6.03907569e-02 2.10451495e-01 1.04677089e-02 4.39795467e-06 9.53835240e-06 4.78725241e-04 7.18197378e-01 1.59049794e+03 +5.90000000e-05 6.03829303e-02 2.10433603e-01 1.04922566e-02 4.40359363e-06 9.58344585e-06 4.79845012e-04 7.18197378e-01 1.59049794e+03 +5.91000000e-05 6.03750928e-02 2.10415687e-01 1.05168379e-02 4.40925141e-06 9.62870924e-06 4.80966307e-04 7.18197378e-01 1.59193512e+03 +5.92000000e-05 6.03672447e-02 2.10397746e-01 1.05414529e-02 4.41492813e-06 9.67414320e-06 4.82089128e-04 7.18197378e-01 1.59193512e+03 +5.93000000e-05 6.03593857e-02 2.10379781e-01 1.05661017e-02 4.42062386e-06 9.71974832e-06 4.83213479e-04 7.18197378e-01 1.59193512e+03 +5.94000000e-05 6.03515159e-02 2.10361791e-01 1.05907843e-02 4.42633871e-06 9.76552521e-06 4.84339364e-04 7.18197378e-01 1.59193512e+03 +5.95000000e-05 6.03436353e-02 2.10343776e-01 1.06155010e-02 4.43207277e-06 9.81147450e-06 4.85466787e-04 7.18197378e-01 1.59193512e+03 +5.96000000e-05 6.03357439e-02 2.10325735e-01 1.06402517e-02 4.43782614e-06 9.85759681e-06 4.86595751e-04 7.18197378e-01 1.59193512e+03 +5.97000000e-05 6.03278415e-02 2.10307670e-01 1.06650365e-02 4.44359892e-06 9.90389274e-06 4.87726260e-04 7.18197378e-01 1.59193512e+03 +5.98000000e-05 6.03199283e-02 2.10289580e-01 1.06898555e-02 4.44939121e-06 9.95036293e-06 4.88858319e-04 7.18197378e-01 1.59338566e+03 +5.99000000e-05 6.03120041e-02 2.10271465e-01 1.07147088e-02 4.45520311e-06 9.99700800e-06 4.89991930e-04 7.18197378e-01 1.59338566e+03 +6.00000000e-05 6.03040689e-02 2.10253325e-01 1.07395965e-02 4.46103472e-06 1.00438286e-05 4.91127097e-04 7.18197378e-01 1.59338566e+03 +6.01000000e-05 6.02961227e-02 2.10235159e-01 1.07645187e-02 4.46688613e-06 1.00908253e-05 4.92263825e-04 7.18197378e-01 1.59338566e+03 +6.02000000e-05 6.02881655e-02 2.10216968e-01 1.07894754e-02 4.47275746e-06 1.01379988e-05 4.93402117e-04 7.18197378e-01 1.59338566e+03 +6.03000000e-05 6.02801973e-02 2.10198752e-01 1.08144667e-02 4.47864880e-06 1.01853497e-05 4.94541977e-04 7.18197378e-01 1.59338566e+03 +6.04000000e-05 6.02722180e-02 2.10180511e-01 1.08394927e-02 4.48456026e-06 1.02328787e-05 4.95683409e-04 7.18197378e-01 1.59484978e+03 +6.05000000e-05 6.02642276e-02 2.10162243e-01 1.08645536e-02 4.49049194e-06 1.02805864e-05 4.96826416e-04 7.18197378e-01 1.59484978e+03 +6.06000000e-05 6.02562260e-02 2.10143951e-01 1.08896493e-02 4.49644394e-06 1.03284734e-05 4.97971003e-04 7.18197378e-01 1.59484978e+03 +6.07000000e-05 6.02482133e-02 2.10125633e-01 1.09147801e-02 4.50241638e-06 1.03765404e-05 4.99117173e-04 7.18197378e-01 1.59484978e+03 +6.08000000e-05 6.02401895e-02 2.10107289e-01 1.09399458e-02 4.50840935e-06 1.04247880e-05 5.00264930e-04 7.18197378e-01 1.59484978e+03 +6.09000000e-05 6.02321544e-02 2.10088919e-01 1.09651468e-02 4.51442296e-06 1.04732170e-05 5.01414279e-04 7.18197378e-01 1.59484978e+03 +6.10000000e-05 6.02241080e-02 2.10070524e-01 1.09903829e-02 4.52045732e-06 1.05218279e-05 5.02565222e-04 7.18197378e-01 1.59484978e+03 +6.11000000e-05 6.02160504e-02 2.10052102e-01 1.10156544e-02 4.52651254e-06 1.05706214e-05 5.03717764e-04 7.18197378e-01 1.59632773e+03 +6.12000000e-05 6.02079815e-02 2.10033655e-01 1.10409613e-02 4.53258872e-06 1.06195982e-05 5.04871910e-04 7.18197378e-01 1.59632773e+03 +6.13000000e-05 6.01999013e-02 2.10015182e-01 1.10663037e-02 4.53868598e-06 1.06687590e-05 5.06027662e-04 7.18197378e-01 1.59632773e+03 +6.14000000e-05 6.01918097e-02 2.09996683e-01 1.10916816e-02 4.54480442e-06 1.07181043e-05 5.07185025e-04 7.18197378e-01 1.59632773e+03 +6.15000000e-05 6.01837068e-02 2.09978157e-01 1.11170953e-02 4.55094416e-06 1.07676350e-05 5.08344003e-04 7.18197378e-01 1.59632773e+03 +6.16000000e-05 6.01755924e-02 2.09959606e-01 1.11425447e-02 4.55710531e-06 1.08173516e-05 5.09504600e-04 7.18197378e-01 1.59632773e+03 +6.17000000e-05 6.01674666e-02 2.09941028e-01 1.11680300e-02 4.56328797e-06 1.08672549e-05 5.10666819e-04 7.18197378e-01 1.59632773e+03 +6.18000000e-05 6.01593294e-02 2.09922424e-01 1.11935512e-02 4.56949227e-06 1.09173455e-05 5.11830666e-04 7.18197378e-01 1.59904982e+03 +6.19000000e-05 6.01511806e-02 2.09903794e-01 1.12191084e-02 4.57571831e-06 1.09676241e-05 5.12996143e-04 7.18197378e-01 1.59904982e+03 +6.20000000e-05 6.01430203e-02 2.09885137e-01 1.12447017e-02 4.58196621e-06 1.10180915e-05 5.14163255e-04 7.18197378e-01 1.59904982e+03 +6.21000000e-05 6.01348485e-02 2.09866453e-01 1.12703313e-02 4.58823609e-06 1.10687482e-05 5.15332007e-04 7.18197378e-01 1.59904982e+03 +6.22000000e-05 6.01266650e-02 2.09847743e-01 1.12959972e-02 4.59452806e-06 1.11195950e-05 5.16502401e-04 7.18197378e-01 1.59904982e+03 +6.23000000e-05 6.01184700e-02 2.09829007e-01 1.13216994e-02 4.60084224e-06 1.11706325e-05 5.17674443e-04 7.18197378e-01 1.59904982e+03 +6.24000000e-05 6.01102633e-02 2.09810243e-01 1.13474382e-02 4.60717874e-06 1.12218616e-05 5.18848136e-04 7.18197378e-01 1.59904982e+03 +6.25000000e-05 6.01020450e-02 2.09791453e-01 1.13732135e-02 4.61353769e-06 1.12732828e-05 5.20023485e-04 7.18197378e-01 1.59904982e+03 +6.26000000e-05 6.00938150e-02 2.09772636e-01 1.13990255e-02 4.61991920e-06 1.13248970e-05 5.21200493e-04 7.18197378e-01 1.59904982e+03 +6.27000000e-05 6.00855732e-02 2.09753793e-01 1.14248742e-02 4.62632339e-06 1.13767047e-05 5.22379165e-04 7.18197378e-01 1.59904982e+03 +6.28000000e-05 6.00773197e-02 2.09734922e-01 1.14507598e-02 4.63275039e-06 1.14287068e-05 5.23559505e-04 7.18197378e-01 1.59904982e+03 +6.29000000e-05 6.00690544e-02 2.09716024e-01 1.14766823e-02 4.63920031e-06 1.14809039e-05 5.24741517e-04 7.18197378e-01 1.59904982e+03 +6.30000000e-05 6.00607773e-02 2.09697099e-01 1.15026419e-02 4.64567328e-06 1.15332967e-05 5.25925205e-04 7.18197378e-01 1.60181978e+03 +6.31000000e-05 6.00524883e-02 2.09678147e-01 1.15286386e-02 4.65216942e-06 1.15858860e-05 5.27110574e-04 7.18197378e-01 1.60181978e+03 +6.32000000e-05 6.00441874e-02 2.09659167e-01 1.15546726e-02 4.65868885e-06 1.16386726e-05 5.28297628e-04 7.18197378e-01 1.60181978e+03 +6.33000000e-05 6.00358747e-02 2.09640160e-01 1.15807439e-02 4.66523170e-06 1.16916570e-05 5.29486371e-04 7.18197378e-01 1.60181978e+03 +6.34000000e-05 6.00275500e-02 2.09621126e-01 1.16068525e-02 4.67179810e-06 1.17448402e-05 5.30676807e-04 7.18197378e-01 1.60181978e+03 +6.35000000e-05 6.00192133e-02 2.09602065e-01 1.16329987e-02 4.67838818e-06 1.17982227e-05 5.31868941e-04 7.18197378e-01 1.60181978e+03 +6.36000000e-05 6.00108647e-02 2.09582975e-01 1.16591825e-02 4.68500205e-06 1.18518054e-05 5.33062776e-04 7.18197378e-01 1.60181978e+03 +6.37000000e-05 6.00025040e-02 2.09563859e-01 1.16854040e-02 4.69163984e-06 1.19055890e-05 5.34258318e-04 7.18197378e-01 1.60181978e+03 +6.38000000e-05 5.99941312e-02 2.09544714e-01 1.17116633e-02 4.69830169e-06 1.19595742e-05 5.35455570e-04 7.18197378e-01 1.60181978e+03 +6.39000000e-05 5.99857464e-02 2.09525542e-01 1.17379605e-02 4.70498773e-06 1.20137617e-05 5.36654538e-04 7.18197378e-01 1.60181978e+03 +6.40000000e-05 5.99773494e-02 2.09506342e-01 1.17642957e-02 4.71169809e-06 1.20681525e-05 5.37855224e-04 7.18197378e-01 1.60181978e+03 +6.41000000e-05 5.99689403e-02 2.09487114e-01 1.17906690e-02 4.71843289e-06 1.21227471e-05 5.39057634e-04 7.18197378e-01 1.60181978e+03 +6.42000000e-05 5.99605191e-02 2.09467858e-01 1.18170804e-02 4.72519227e-06 1.21775464e-05 5.40261772e-04 7.18197378e-01 1.60181978e+03 +6.43000000e-05 5.99520855e-02 2.09448574e-01 1.18435302e-02 4.73197637e-06 1.22325510e-05 5.41467642e-04 7.18197378e-01 1.60463911e+03 +6.44000000e-05 5.99436398e-02 2.09429262e-01 1.18700183e-02 4.73878532e-06 1.22877619e-05 5.42675249e-04 7.18197378e-01 1.60463911e+03 +6.45000000e-05 5.99351818e-02 2.09409922e-01 1.18965449e-02 4.74561926e-06 1.23431798e-05 5.43884598e-04 7.18197378e-01 1.60463911e+03 +6.46000000e-05 5.99267114e-02 2.09390554e-01 1.19231101e-02 4.75247831e-06 1.23988054e-05 5.45095692e-04 7.18197378e-01 1.60463911e+03 +6.47000000e-05 5.99182288e-02 2.09371157e-01 1.19497139e-02 4.75936263e-06 1.24546394e-05 5.46308536e-04 7.18197378e-01 1.60463911e+03 +6.48000000e-05 5.99097337e-02 2.09351732e-01 1.19763566e-02 4.76627234e-06 1.25106828e-05 5.47523135e-04 7.18197378e-01 1.60463911e+03 +6.49000000e-05 5.99012263e-02 2.09332278e-01 1.20030381e-02 4.77320759e-06 1.25669363e-05 5.48739493e-04 7.18197378e-01 1.60463911e+03 +6.50000000e-05 5.98927064e-02 2.09312796e-01 1.20297586e-02 4.78016851e-06 1.26234006e-05 5.49957615e-04 7.18197378e-01 1.60463911e+03 +6.51000000e-05 5.98841740e-02 2.09293285e-01 1.20565182e-02 4.78715525e-06 1.26800766e-05 5.51177505e-04 7.18197378e-01 1.60463911e+03 +6.52000000e-05 5.98756291e-02 2.09273746e-01 1.20833169e-02 4.79416794e-06 1.27369651e-05 5.52399168e-04 7.18197378e-01 1.60463911e+03 +6.53000000e-05 5.98670718e-02 2.09254178e-01 1.21101550e-02 4.80120674e-06 1.27940668e-05 5.53622608e-04 7.18197378e-01 1.60463911e+03 +6.54000000e-05 5.98585018e-02 2.09234580e-01 1.21370324e-02 4.80827178e-06 1.28513826e-05 5.54847830e-04 7.18197378e-01 1.60463911e+03 +6.55000000e-05 5.98499192e-02 2.09214955e-01 1.21639493e-02 4.81536321e-06 1.29089133e-05 5.56074839e-04 7.18197378e-01 1.60750941e+03 +6.56000000e-05 5.98413241e-02 2.09195300e-01 1.21909058e-02 4.82248119e-06 1.29666596e-05 5.57303638e-04 7.18197378e-01 1.60750941e+03 +6.57000000e-05 5.98327162e-02 2.09175615e-01 1.22179020e-02 4.82962585e-06 1.30246225e-05 5.58534234e-04 7.18197378e-01 1.60750941e+03 +6.58000000e-05 5.98240957e-02 2.09155902e-01 1.22449379e-02 4.83679734e-06 1.30828026e-05 5.59766630e-04 7.18197378e-01 1.60750941e+03 +6.59000000e-05 5.98154624e-02 2.09136160e-01 1.22720138e-02 4.84399582e-06 1.31412009e-05 5.61000831e-04 7.18197378e-01 1.60750941e+03 +6.60000000e-05 5.98068163e-02 2.09116388e-01 1.22991297e-02 4.85122143e-06 1.31998182e-05 5.62236841e-04 7.18197378e-01 1.60750941e+03 +6.61000000e-05 5.97981575e-02 2.09096587e-01 1.23262857e-02 4.85847432e-06 1.32586553e-05 5.63474667e-04 7.18197378e-01 1.60750941e+03 +6.62000000e-05 5.97894858e-02 2.09076757e-01 1.23534819e-02 4.86575465e-06 1.33177130e-05 5.64714311e-04 7.18197378e-01 1.60750941e+03 +6.63000000e-05 5.97808013e-02 2.09056897e-01 1.23807184e-02 4.87306257e-06 1.33769922e-05 5.65955779e-04 7.18197378e-01 1.60750941e+03 +6.64000000e-05 5.97721039e-02 2.09037007e-01 1.24079954e-02 4.88039823e-06 1.34364938e-05 5.67199077e-04 7.18197378e-01 1.60750941e+03 +6.65000000e-05 5.97633935e-02 2.09017088e-01 1.24353128e-02 4.88776179e-06 1.34962185e-05 5.68444207e-04 7.18197378e-01 1.60750941e+03 +6.66000000e-05 5.97546702e-02 2.08997138e-01 1.24626710e-02 4.89515341e-06 1.35561672e-05 5.69691176e-04 7.18197378e-01 1.60750941e+03 +6.67000000e-05 5.97459339e-02 2.08977160e-01 1.24900698e-02 4.90257324e-06 1.36163407e-05 5.70939988e-04 7.18197378e-01 1.61043233e+03 +6.68000000e-05 5.97371845e-02 2.08957151e-01 1.25175095e-02 4.91002144e-06 1.36767401e-05 5.72190648e-04 7.18197378e-01 1.61043233e+03 +6.69000000e-05 5.97284221e-02 2.08937112e-01 1.25449902e-02 4.91749817e-06 1.37373660e-05 5.73443161e-04 7.18197378e-01 1.61043233e+03 +6.70000000e-05 5.97196466e-02 2.08917043e-01 1.25725119e-02 4.92500359e-06 1.37982193e-05 5.74697531e-04 7.18197378e-01 1.61043233e+03 +6.71000000e-05 5.97108579e-02 2.08896944e-01 1.26000748e-02 4.93253787e-06 1.38593010e-05 5.75953764e-04 7.18197378e-01 1.61043233e+03 +6.72000000e-05 5.97020560e-02 2.08876815e-01 1.26276790e-02 4.94010117e-06 1.39206120e-05 5.77211864e-04 7.18197378e-01 1.61043233e+03 +6.73000000e-05 5.96932410e-02 2.08856655e-01 1.26553246e-02 4.94769365e-06 1.39821530e-05 5.78471837e-04 7.18197378e-01 1.61043233e+03 +6.74000000e-05 5.96844127e-02 2.08836465e-01 1.26830116e-02 4.95531547e-06 1.40439250e-05 5.79733687e-04 7.18197378e-01 1.61043233e+03 +6.75000000e-05 5.96755711e-02 2.08816244e-01 1.27107403e-02 4.96296681e-06 1.41059288e-05 5.80997419e-04 7.18197378e-01 1.61043233e+03 +6.76000000e-05 5.96667163e-02 2.08795993e-01 1.27385107e-02 4.97064783e-06 1.41681654e-05 5.82263038e-04 7.18197378e-01 1.61043233e+03 +6.77000000e-05 5.96578480e-02 2.08775712e-01 1.27663230e-02 4.97835870e-06 1.42306356e-05 5.83530550e-04 7.18197378e-01 1.61043233e+03 +6.78000000e-05 5.96489664e-02 2.08755399e-01 1.27941772e-02 4.98609959e-06 1.42933404e-05 5.84799958e-04 7.18197378e-01 1.61043233e+03 +6.79000000e-05 5.96400714e-02 2.08735056e-01 1.28220734e-02 4.99387067e-06 1.43562807e-05 5.86071269e-04 7.18197378e-01 1.61043233e+03 +6.80000000e-05 5.96311629e-02 2.08714682e-01 1.28500118e-02 5.00167213e-06 1.44194573e-05 5.87344488e-04 7.18197378e-01 1.61340961e+03 +6.81000000e-05 5.96222409e-02 2.08694277e-01 1.28779925e-02 5.00950413e-06 1.44828713e-05 5.88619618e-04 7.18197378e-01 1.61340961e+03 +6.82000000e-05 5.96133054e-02 2.08673841e-01 1.29060156e-02 5.01736686e-06 1.45465234e-05 5.89896666e-04 7.18197378e-01 1.61340961e+03 +6.83000000e-05 5.96043563e-02 2.08653373e-01 1.29340812e-02 5.02526047e-06 1.46104146e-05 5.91175637e-04 7.18197378e-01 1.61340961e+03 +6.84000000e-05 5.95953937e-02 2.08632875e-01 1.29621894e-02 5.03318517e-06 1.46745459e-05 5.92456536e-04 7.18197378e-01 1.61340961e+03 +6.85000000e-05 5.95864174e-02 2.08612345e-01 1.29903404e-02 5.04114111e-06 1.47389182e-05 5.93739367e-04 7.18197378e-01 1.61340961e+03 +6.86000000e-05 5.95774274e-02 2.08591784e-01 1.30185342e-02 5.04912849e-06 1.48035324e-05 5.95024136e-04 7.18197378e-01 1.61340961e+03 +6.87000000e-05 5.95684237e-02 2.08571191e-01 1.30467710e-02 5.05714749e-06 1.48683894e-05 5.96310849e-04 7.18197378e-01 1.61340961e+03 +6.88000000e-05 5.95594063e-02 2.08550567e-01 1.30750508e-02 5.06519829e-06 1.49334903e-05 5.97599509e-04 7.18197378e-01 1.61340961e+03 +6.89000000e-05 5.95503750e-02 2.08529911e-01 1.31033739e-02 5.07328107e-06 1.49988359e-05 5.98890124e-04 7.18197378e-01 1.61340961e+03 +6.90000000e-05 5.95413300e-02 2.08509223e-01 1.31317403e-02 5.08139603e-06 1.50644272e-05 6.00182697e-04 7.18197378e-01 1.61340961e+03 +6.91000000e-05 5.95322711e-02 2.08488504e-01 1.31601501e-02 5.08954334e-06 1.51302652e-05 6.01477235e-04 7.18197378e-01 1.61340961e+03 +6.92000000e-05 5.95231983e-02 2.08467753e-01 1.31886034e-02 5.09772319e-06 1.51963509e-05 6.02773742e-04 7.18197378e-01 1.61644309e+03 +6.93000000e-05 5.95141116e-02 2.08446969e-01 1.32171005e-02 5.10593576e-06 1.52626851e-05 6.04072224e-04 7.18197378e-01 1.61644309e+03 +6.94000000e-05 5.95050109e-02 2.08426154e-01 1.32456413e-02 5.11418126e-06 1.53292689e-05 6.05372685e-04 7.18197378e-01 1.61644309e+03 +6.95000000e-05 5.94958961e-02 2.08405306e-01 1.32742260e-02 5.12245987e-06 1.53961033e-05 6.06675133e-04 7.18197378e-01 1.61644309e+03 +6.96000000e-05 5.94867674e-02 2.08384427e-01 1.33028547e-02 5.13077179e-06 1.54631892e-05 6.07979571e-04 7.18197378e-01 1.61644309e+03 +6.97000000e-05 5.94776245e-02 2.08363514e-01 1.33315276e-02 5.13911721e-06 1.55305277e-05 6.09286005e-04 7.18197378e-01 1.61644309e+03 +6.98000000e-05 5.94684675e-02 2.08342570e-01 1.33602448e-02 5.14749634e-06 1.55981197e-05 6.10594441e-04 7.18197378e-01 1.61644309e+03 +6.99000000e-05 5.94592964e-02 2.08321593e-01 1.33890063e-02 5.15590935e-06 1.56659661e-05 6.11904883e-04 7.18197378e-01 1.61644309e+03 +7.00000000e-05 5.94501111e-02 2.08300583e-01 1.34178123e-02 5.16435646e-06 1.57340682e-05 6.13217339e-04 7.18197378e-01 1.61644309e+03 +7.01000000e-05 5.94409115e-02 2.08279541e-01 1.34466630e-02 5.17283787e-06 1.58024267e-05 6.14531812e-04 7.18197378e-01 1.61644309e+03 +7.02000000e-05 5.94316976e-02 2.08258465e-01 1.34755584e-02 5.18135377e-06 1.58710428e-05 6.15848308e-04 7.18197378e-01 1.61644309e+03 +7.03000000e-05 5.94224694e-02 2.08237357e-01 1.35044987e-02 5.18990437e-06 1.59399174e-05 6.17166834e-04 7.18197378e-01 1.61644309e+03 +7.04000000e-05 5.94132269e-02 2.08216216e-01 1.35334840e-02 5.19848988e-06 1.60090516e-05 6.18487394e-04 7.18197378e-01 1.61869251e+03 +7.05000000e-05 5.94039700e-02 2.08195042e-01 1.35625144e-02 5.20711054e-06 1.60784464e-05 6.19809994e-04 7.18197378e-01 1.61869251e+03 +7.06000000e-05 5.93946986e-02 2.08173835e-01 1.35915900e-02 5.21576653e-06 1.61481029e-05 6.21134640e-04 7.18197378e-01 1.61869251e+03 +7.07000000e-05 5.93854127e-02 2.08152595e-01 1.36207110e-02 5.22445807e-06 1.62180220e-05 6.22461337e-04 7.18197378e-01 1.61869251e+03 +7.08000000e-05 5.93761124e-02 2.08131321e-01 1.36498775e-02 5.23318538e-06 1.62882049e-05 6.23790091e-04 7.18197378e-01 1.61869251e+03 +7.09000000e-05 5.93667974e-02 2.08110014e-01 1.36790897e-02 5.24194866e-06 1.63586525e-05 6.25120907e-04 7.18197378e-01 1.61869251e+03 +7.10000000e-05 5.93574679e-02 2.08088673e-01 1.37083475e-02 5.25074814e-06 1.64293659e-05 6.26453792e-04 7.18197378e-01 1.61869251e+03 +7.11000000e-05 5.93481238e-02 2.08067298e-01 1.37376513e-02 5.25958403e-06 1.65003462e-05 6.27788750e-04 7.18197378e-01 1.61869251e+03 +7.12000000e-05 5.93387649e-02 2.08045890e-01 1.37670010e-02 5.26845657e-06 1.65715945e-05 6.29125788e-04 7.18197378e-01 1.61869251e+03 +7.13000000e-05 5.93293914e-02 2.08024449e-01 1.37963969e-02 5.27736596e-06 1.66431118e-05 6.30464911e-04 7.18197378e-01 1.62097361e+03 +7.14000000e-05 5.93200030e-02 2.08002973e-01 1.38258390e-02 5.28631236e-06 1.67148992e-05 6.31806125e-04 7.18197378e-01 1.62097361e+03 +7.15000000e-05 5.93105999e-02 2.07981463e-01 1.38553275e-02 5.29529606e-06 1.67869577e-05 6.33149437e-04 7.18197378e-01 1.62097361e+03 +7.16000000e-05 5.93011819e-02 2.07959919e-01 1.38848625e-02 5.30431726e-06 1.68592885e-05 6.34494850e-04 7.18197378e-01 1.62097361e+03 +7.17000000e-05 5.92917491e-02 2.07938341e-01 1.39144441e-02 5.31337619e-06 1.69318926e-05 6.35842373e-04 7.18197378e-01 1.62097361e+03 +7.18000000e-05 5.92823013e-02 2.07916729e-01 1.39440725e-02 5.32247308e-06 1.70047712e-05 6.37192009e-04 7.18197378e-01 1.62097361e+03 +7.19000000e-05 5.92728386e-02 2.07895082e-01 1.39737478e-02 5.33160815e-06 1.70779253e-05 6.38543766e-04 7.18197378e-01 1.62097361e+03 +7.20000000e-05 5.92633608e-02 2.07873401e-01 1.40034702e-02 5.34078163e-06 1.71513561e-05 6.39897649e-04 7.18197378e-01 1.62097361e+03 +7.21000000e-05 5.92538680e-02 2.07851686e-01 1.40332397e-02 5.34999375e-06 1.72250646e-05 6.41253664e-04 7.18197378e-01 1.62097361e+03 +7.22000000e-05 5.92443601e-02 2.07829935e-01 1.40630565e-02 5.35924476e-06 1.72990520e-05 6.42611816e-04 7.18197378e-01 1.62328721e+03 +7.23000000e-05 5.92348371e-02 2.07808150e-01 1.40929207e-02 5.36853494e-06 1.73733194e-05 6.43972113e-04 7.18197378e-01 1.62328721e+03 +7.24000000e-05 5.92252989e-02 2.07786330e-01 1.41228325e-02 5.37786449e-06 1.74478680e-05 6.45334560e-04 7.18197378e-01 1.62328721e+03 +7.25000000e-05 5.92157455e-02 2.07764476e-01 1.41527920e-02 5.38723365e-06 1.75226988e-05 6.46699162e-04 7.18197378e-01 1.62328721e+03 +7.26000000e-05 5.92061768e-02 2.07742586e-01 1.41827993e-02 5.39664267e-06 1.75978130e-05 6.48065927e-04 7.18197378e-01 1.62328721e+03 +7.27000000e-05 5.91965928e-02 2.07720661e-01 1.42128546e-02 5.40609179e-06 1.76732118e-05 6.49434859e-04 7.18197378e-01 1.62328721e+03 +7.28000000e-05 5.91869934e-02 2.07698700e-01 1.42429579e-02 5.41558127e-06 1.77488963e-05 6.50805966e-04 7.18197378e-01 1.62328721e+03 +7.29000000e-05 5.91773787e-02 2.07676705e-01 1.42731095e-02 5.42511134e-06 1.78248676e-05 6.52179253e-04 7.18197378e-01 1.62328721e+03 +7.30000000e-05 5.91677485e-02 2.07654674e-01 1.43033095e-02 5.43468226e-06 1.79011270e-05 6.53554726e-04 7.18197378e-01 1.62328721e+03 +7.31000000e-05 5.91581028e-02 2.07632607e-01 1.43335580e-02 5.44429428e-06 1.79776756e-05 6.54932391e-04 7.18197378e-01 1.62563412e+03 +7.32000000e-05 5.91484416e-02 2.07610505e-01 1.43638551e-02 5.45394761e-06 1.80545145e-05 6.56312256e-04 7.18197378e-01 1.62563412e+03 +7.33000000e-05 5.91387649e-02 2.07588367e-01 1.43942010e-02 5.46364254e-06 1.81316451e-05 6.57694325e-04 7.18197378e-01 1.62563412e+03 +7.34000000e-05 5.91290725e-02 2.07566193e-01 1.44245959e-02 5.47337931e-06 1.82090683e-05 6.59078605e-04 7.18197378e-01 1.62563412e+03 +7.35000000e-05 5.91193645e-02 2.07543983e-01 1.44550398e-02 5.48315819e-06 1.82867856e-05 6.60465103e-04 7.18197378e-01 1.62563412e+03 +7.36000000e-05 5.91096408e-02 2.07521737e-01 1.44855329e-02 5.49297943e-06 1.83647979e-05 6.61853824e-04 7.18197378e-01 1.62563412e+03 +7.37000000e-05 5.90999013e-02 2.07499455e-01 1.45160753e-02 5.50284330e-06 1.84431066e-05 6.63244775e-04 7.18197378e-01 1.62563412e+03 +7.38000000e-05 5.90901460e-02 2.07477136e-01 1.45466672e-02 5.51275006e-06 1.85217129e-05 6.64637963e-04 7.18197378e-01 1.62563412e+03 +7.39000000e-05 5.90803749e-02 2.07454782e-01 1.45773088e-02 5.52269996e-06 1.86006179e-05 6.66033393e-04 7.18197378e-01 1.62563412e+03 +7.40000000e-05 5.90705879e-02 2.07432391e-01 1.46080001e-02 5.53269330e-06 1.86798230e-05 6.67431072e-04 7.18197378e-01 1.62735588e+03 +7.41000000e-05 5.90607850e-02 2.07409963e-01 1.46387413e-02 5.54273041e-06 1.87593293e-05 6.68831007e-04 7.18197378e-01 1.62735588e+03 +7.42000000e-05 5.90509661e-02 2.07387498e-01 1.46695326e-02 5.55281154e-06 1.88391380e-05 6.70233204e-04 7.18197378e-01 1.62735588e+03 +7.43000000e-05 5.90411312e-02 2.07364997e-01 1.47003740e-02 5.56293698e-06 1.89192505e-05 6.71637669e-04 7.18197378e-01 1.62735588e+03 +7.44000000e-05 5.90312802e-02 2.07342459e-01 1.47312658e-02 5.57310701e-06 1.89996680e-05 6.73044409e-04 7.18197378e-01 1.62735588e+03 +7.45000000e-05 5.90214131e-02 2.07319884e-01 1.47622081e-02 5.58332195e-06 1.90803917e-05 6.74453430e-04 7.18197378e-01 1.62735588e+03 +7.46000000e-05 5.90115299e-02 2.07297272e-01 1.47932010e-02 5.59358209e-06 1.91614228e-05 6.75864739e-04 7.18197378e-01 1.62735588e+03 +7.47000000e-05 5.90016304e-02 2.07274622e-01 1.48242447e-02 5.60388761e-06 1.92427628e-05 6.77278343e-04 7.18197378e-01 1.62856271e+03 +7.48000000e-05 5.89917147e-02 2.07251935e-01 1.48553393e-02 5.61423878e-06 1.93244127e-05 6.78694247e-04 7.18197378e-01 1.62856271e+03 +7.49000000e-05 5.89817827e-02 2.07229211e-01 1.48864850e-02 5.62463588e-06 1.94063740e-05 6.80112460e-04 7.18197378e-01 1.62856271e+03 +7.50000000e-05 5.89718343e-02 2.07206449e-01 1.49176818e-02 5.63507916e-06 1.94886479e-05 6.81532986e-04 7.18197378e-01 1.62856271e+03 +7.51000000e-05 5.89618696e-02 2.07183650e-01 1.49489301e-02 5.64556888e-06 1.95712357e-05 6.82955834e-04 7.18197378e-01 1.62944601e+03 +7.52000000e-05 5.89518884e-02 2.07160813e-01 1.49802299e-02 5.65610550e-06 1.96541388e-05 6.84381010e-04 7.18197378e-01 1.62944601e+03 +7.53000000e-05 5.89418907e-02 2.07137938e-01 1.50115813e-02 5.66668931e-06 1.97373583e-05 6.85808519e-04 7.18197378e-01 1.62944601e+03 +7.54000000e-05 5.89318765e-02 2.07115025e-01 1.50429845e-02 5.67732069e-06 1.98208957e-05 6.87238371e-04 7.18197378e-01 1.63033409e+03 +7.55000000e-05 5.89218457e-02 2.07092073e-01 1.50744398e-02 5.68799978e-06 1.99047522e-05 6.88670570e-04 7.18197378e-01 1.63033409e+03 +7.56000000e-05 5.89117982e-02 2.07069084e-01 1.51059471e-02 5.69872697e-06 1.99889293e-05 6.90105124e-04 7.18197378e-01 1.63033409e+03 +7.57000000e-05 5.89017341e-02 2.07046056e-01 1.51375067e-02 5.70950255e-06 2.00734281e-05 6.91542039e-04 7.18197378e-01 1.63033409e+03 +7.58000000e-05 5.88916532e-02 2.07022990e-01 1.51691187e-02 5.72032684e-06 2.01582502e-05 6.92981323e-04 7.18197378e-01 1.63122699e+03 +7.59000000e-05 5.88815556e-02 2.06999886e-01 1.52007833e-02 5.73120011e-06 2.02433968e-05 6.94422983e-04 7.18197378e-01 1.63122699e+03 +7.60000000e-05 5.88714411e-02 2.06976742e-01 1.52325006e-02 5.74212264e-06 2.03288692e-05 6.95867025e-04 7.18197378e-01 1.63122699e+03 +7.61000000e-05 5.88613098e-02 2.06953560e-01 1.52642708e-02 5.75309475e-06 2.04146689e-05 6.97313456e-04 7.18197378e-01 1.63212475e+03 +7.62000000e-05 5.88511615e-02 2.06930339e-01 1.52960941e-02 5.76411688e-06 2.05007973e-05 6.98762284e-04 7.18197378e-01 1.63212475e+03 +7.63000000e-05 5.88409962e-02 2.06907079e-01 1.53279705e-02 5.77518933e-06 2.05872556e-05 7.00213515e-04 7.18197378e-01 1.63212475e+03 +7.64000000e-05 5.88308139e-02 2.06883780e-01 1.53599003e-02 5.78631245e-06 2.06740454e-05 7.01667156e-04 7.18197378e-01 1.63302743e+03 +7.65000000e-05 5.88206146e-02 2.06860442e-01 1.53918836e-02 5.79748639e-06 2.07611679e-05 7.03123215e-04 7.18197378e-01 1.63302743e+03 +7.66000000e-05 5.88103981e-02 2.06837064e-01 1.54239206e-02 5.80871148e-06 2.08486246e-05 7.04581698e-04 7.18197378e-01 1.63302743e+03 +7.67000000e-05 5.88001644e-02 2.06813647e-01 1.54560114e-02 5.81998800e-06 2.09364170e-05 7.06042613e-04 7.18197378e-01 1.63302743e+03 +7.68000000e-05 5.87899135e-02 2.06790191e-01 1.54881562e-02 5.83131650e-06 2.10245463e-05 7.07505967e-04 7.18197378e-01 1.63368964e+03 +7.69000000e-05 5.87796453e-02 2.06766694e-01 1.55203551e-02 5.84269752e-06 2.11130141e-05 7.08971767e-04 7.18197378e-01 1.63368964e+03 +7.70000000e-05 5.87693597e-02 2.06743158e-01 1.55526084e-02 5.85413151e-06 2.12018218e-05 7.10440020e-04 7.18197378e-01 1.63416016e+03 +7.71000000e-05 5.87590568e-02 2.06719582e-01 1.55849161e-02 5.86561826e-06 2.12909708e-05 7.11910734e-04 7.18197378e-01 1.63416016e+03 +7.72000000e-05 5.87487365e-02 2.06695966e-01 1.56172784e-02 5.87715807e-06 2.13804626e-05 7.13383915e-04 7.18197378e-01 1.63463202e+03 +7.73000000e-05 5.87383986e-02 2.06672309e-01 1.56496955e-02 5.88875148e-06 2.14702985e-05 7.14859572e-04 7.18197378e-01 1.63510524e+03 +7.74000000e-05 5.87280432e-02 2.06648613e-01 1.56821676e-02 5.90039886e-06 2.15604802e-05 7.16337711e-04 7.18197378e-01 1.63510524e+03 +7.75000000e-05 5.87176702e-02 2.06624876e-01 1.57146948e-02 5.91210083e-06 2.16510090e-05 7.17818340e-04 7.18197378e-01 1.63557981e+03 +7.76000000e-05 5.87072796e-02 2.06601098e-01 1.57472773e-02 5.92385744e-06 2.17418865e-05 7.19301466e-04 7.18197378e-01 1.63557981e+03 +7.77000000e-05 5.86968713e-02 2.06577280e-01 1.57799153e-02 5.93566913e-06 2.18331141e-05 7.20787097e-04 7.18197378e-01 1.63605574e+03 +7.78000000e-05 5.86864452e-02 2.06553421e-01 1.58126088e-02 5.94753665e-06 2.19246933e-05 7.22275240e-04 7.18197378e-01 1.63605574e+03 +7.79000000e-05 5.86760013e-02 2.06529521e-01 1.58453581e-02 5.95945978e-06 2.20166256e-05 7.23765903e-04 7.18197378e-01 1.63653304e+03 +7.80000000e-05 5.86655395e-02 2.06505580e-01 1.58781634e-02 5.97143834e-06 2.21089126e-05 7.25259093e-04 7.18197378e-01 1.63685858e+03 +7.81000000e-05 5.86550598e-02 2.06481598e-01 1.59110248e-02 5.98347422e-06 2.22015557e-05 7.26754817e-04 7.18197378e-01 1.63708453e+03 +7.82000000e-05 5.86445622e-02 2.06457574e-01 1.59439425e-02 5.99556724e-06 2.22945565e-05 7.28253084e-04 7.18197378e-01 1.63731079e+03 +7.83000000e-05 5.86340465e-02 2.06433509e-01 1.59769167e-02 6.00771700e-06 2.23879165e-05 7.29753901e-04 7.18197378e-01 1.63753736e+03 +7.84000000e-05 5.86235128e-02 2.06409403e-01 1.60099475e-02 6.01992475e-06 2.24816372e-05 7.31257276e-04 7.18197378e-01 1.63776424e+03 +7.85000000e-05 5.86129609e-02 2.06385255e-01 1.60430351e-02 6.03219065e-06 2.25757203e-05 7.32763216e-04 7.18197378e-01 1.63821892e+03 +7.86000000e-05 5.86023909e-02 2.06361065e-01 1.60761796e-02 6.04451485e-06 2.26701673e-05 7.34271729e-04 7.18197378e-01 1.63844673e+03 +7.87000000e-05 5.85918026e-02 2.06336834e-01 1.61093813e-02 6.05689799e-06 2.27649797e-05 7.35782824e-04 7.18197378e-01 1.63867485e+03 +7.88000000e-05 5.85811960e-02 2.06312560e-01 1.61426403e-02 6.06934043e-06 2.28601591e-05 7.37296506e-04 7.18197378e-01 1.63890328e+03 +7.89000000e-05 5.85705710e-02 2.06288244e-01 1.61759568e-02 6.08184248e-06 2.29557071e-05 7.38812785e-04 7.18197378e-01 1.63936109e+03 +7.90000000e-05 5.85599276e-02 2.06263886e-01 1.62093310e-02 6.09440460e-06 2.30516253e-05 7.40331669e-04 7.18197378e-01 1.63971216e+03 +7.91000000e-05 5.85492658e-02 2.06239485e-01 1.62427630e-02 6.10702721e-06 2.31479153e-05 7.41853165e-04 7.18197378e-01 1.64006396e+03 +7.92000000e-05 5.85385854e-02 2.06215042e-01 1.62762531e-02 6.11971070e-06 2.32445787e-05 7.43377281e-04 7.18197378e-01 1.64006396e+03 +7.93000000e-05 5.85278865e-02 2.06190556e-01 1.63098013e-02 6.13245550e-06 2.33416172e-05 7.44904025e-04 7.18197378e-01 1.64041651e+03 +7.94000000e-05 5.85171689e-02 2.06166028e-01 1.63434079e-02 6.14526201e-06 2.34390323e-05 7.46433405e-04 7.18197378e-01 1.64076981e+03 +7.95000000e-05 5.85064327e-02 2.06141456e-01 1.63770731e-02 6.15813063e-06 2.35368258e-05 7.47965430e-04 7.18197378e-01 1.64156001e+03 +7.96000000e-05 5.84956777e-02 2.06116841e-01 1.64107970e-02 6.17106182e-06 2.36349992e-05 7.49500106e-04 7.18197378e-01 1.64156001e+03 +7.97000000e-05 5.84849038e-02 2.06092183e-01 1.64445798e-02 6.18405598e-06 2.37335542e-05 7.51037443e-04 7.18197378e-01 1.64156001e+03 +7.98000000e-05 5.84741112e-02 2.06067482e-01 1.64784217e-02 6.19711354e-06 2.38324925e-05 7.52577449e-04 7.18197378e-01 1.64235397e+03 +7.99000000e-05 5.84632995e-02 2.06042738e-01 1.65123229e-02 6.21023496e-06 2.39318157e-05 7.54120131e-04 7.18197378e-01 1.64235397e+03 +8.00000000e-05 5.84524689e-02 2.06017949e-01 1.65462835e-02 6.22342065e-06 2.40315256e-05 7.55665498e-04 7.18197378e-01 1.64235397e+03 +8.01000000e-05 5.84416193e-02 2.05993117e-01 1.65803038e-02 6.23667106e-06 2.41316238e-05 7.57213558e-04 7.18197378e-01 1.64361165e+03 +8.02000000e-05 5.84307506e-02 2.05968241e-01 1.66143839e-02 6.24998664e-06 2.42321121e-05 7.58764320e-04 7.18197378e-01 1.64361165e+03 +8.03000000e-05 5.84198627e-02 2.05943321e-01 1.66485240e-02 6.26336784e-06 2.43329921e-05 7.60317791e-04 7.18197378e-01 1.64361165e+03 +8.04000000e-05 5.84089556e-02 2.05918357e-01 1.66827243e-02 6.27681509e-06 2.44342656e-05 7.61873981e-04 7.18197378e-01 1.64361165e+03 +8.05000000e-05 5.83980292e-02 2.05893349e-01 1.67169850e-02 6.29032887e-06 2.45359342e-05 7.63432897e-04 7.18197378e-01 1.64487882e+03 +8.06000000e-05 5.83870834e-02 2.05868296e-01 1.67513063e-02 6.30390963e-06 2.46379999e-05 7.64994548e-04 7.18197378e-01 1.64487882e+03 +8.07000000e-05 5.83761183e-02 2.05843199e-01 1.67856883e-02 6.31755784e-06 2.47404642e-05 7.66558942e-04 7.18197378e-01 1.64487882e+03 +8.08000000e-05 5.83651337e-02 2.05818056e-01 1.68201313e-02 6.33127396e-06 2.48433289e-05 7.68126088e-04 7.18197378e-01 1.64487882e+03 +8.09000000e-05 5.83541296e-02 2.05792870e-01 1.68546354e-02 6.34505846e-06 2.49465959e-05 7.69695994e-04 7.18197378e-01 1.64615563e+03 +8.10000000e-05 5.83431059e-02 2.05767638e-01 1.68892008e-02 6.35891182e-06 2.50502669e-05 7.71268670e-04 7.18197378e-01 1.64615563e+03 +8.11000000e-05 5.83320625e-02 2.05742360e-01 1.69238278e-02 6.37283453e-06 2.51543437e-05 7.72844123e-04 7.18197378e-01 1.64615563e+03 +8.12000000e-05 5.83209995e-02 2.05717038e-01 1.69585165e-02 6.38682706e-06 2.52588281e-05 7.74422362e-04 7.18197378e-01 1.64615563e+03 +8.13000000e-05 5.83099167e-02 2.05691670e-01 1.69932671e-02 6.40088990e-06 2.53637219e-05 7.76003396e-04 7.18197378e-01 1.64744221e+03 +8.14000000e-05 5.82988140e-02 2.05666257e-01 1.70280798e-02 6.41502355e-06 2.54690269e-05 7.77587234e-04 7.18197378e-01 1.64744221e+03 +8.15000000e-05 5.82876915e-02 2.05640798e-01 1.70629548e-02 6.42922850e-06 2.55747450e-05 7.79173885e-04 7.18197378e-01 1.64744221e+03 +8.16000000e-05 5.82765490e-02 2.05615293e-01 1.70978923e-02 6.44350525e-06 2.56808779e-05 7.80763357e-04 7.18197378e-01 1.64744221e+03 +8.17000000e-05 5.82653865e-02 2.05589742e-01 1.71328924e-02 6.45785430e-06 2.57874277e-05 7.82355658e-04 7.18197378e-01 1.64744221e+03 +8.18000000e-05 5.82542039e-02 2.05564145e-01 1.71679555e-02 6.47227617e-06 2.58943960e-05 7.83950799e-04 7.18197378e-01 1.64873867e+03 +8.19000000e-05 5.82430012e-02 2.05538502e-01 1.72030816e-02 6.48677137e-06 2.60017848e-05 7.85548788e-04 7.18197378e-01 1.64873867e+03 +8.20000000e-05 5.82317783e-02 2.05512812e-01 1.72382711e-02 6.50134042e-06 2.61095960e-05 7.87149633e-04 7.18197378e-01 1.64873867e+03 +8.21000000e-05 5.82205351e-02 2.05487076e-01 1.72735240e-02 6.51598384e-06 2.62178314e-05 7.88753345e-04 7.18197378e-01 1.64873867e+03 +8.22000000e-05 5.82092715e-02 2.05461293e-01 1.73088406e-02 6.53070216e-06 2.63264930e-05 7.90359931e-04 7.18197378e-01 1.65004517e+03 +8.23000000e-05 5.81979876e-02 2.05435463e-01 1.73442211e-02 6.54549590e-06 2.64355827e-05 7.91969402e-04 7.18197378e-01 1.65004517e+03 +8.24000000e-05 5.81866832e-02 2.05409586e-01 1.73796657e-02 6.56036561e-06 2.65451024e-05 7.93581765e-04 7.18197378e-01 1.65004517e+03 +8.25000000e-05 5.81753582e-02 2.05383662e-01 1.74151746e-02 6.57531183e-06 2.66550541e-05 7.95197031e-04 7.18197378e-01 1.65004517e+03 +8.26000000e-05 5.81640127e-02 2.05357690e-01 1.74507480e-02 6.59033510e-06 2.67654396e-05 7.96815209e-04 7.18197378e-01 1.65136184e+03 +8.27000000e-05 5.81526465e-02 2.05331672e-01 1.74863861e-02 6.60543597e-06 2.68762610e-05 7.98436307e-04 7.18197378e-01 1.65136184e+03 +8.28000000e-05 5.81412596e-02 2.05305605e-01 1.75220891e-02 6.62061500e-06 2.69875202e-05 8.00060335e-04 7.18197378e-01 1.65136184e+03 +8.29000000e-05 5.81298519e-02 2.05279491e-01 1.75578572e-02 6.63587275e-06 2.70992191e-05 8.01687303e-04 7.18197378e-01 1.65136184e+03 +8.30000000e-05 5.81184233e-02 2.05253328e-01 1.75936907e-02 6.65120979e-06 2.72113599e-05 8.03317220e-04 7.18197378e-01 1.65136184e+03 +8.31000000e-05 5.81069738e-02 2.05227118e-01 1.76295897e-02 6.66662667e-06 2.73239445e-05 8.04950094e-04 7.18197378e-01 1.65268882e+03 +8.32000000e-05 5.80955032e-02 2.05200859e-01 1.76655545e-02 6.68212399e-06 2.74369749e-05 8.06585937e-04 7.18197378e-01 1.65268882e+03 +8.33000000e-05 5.80840117e-02 2.05174552e-01 1.77015852e-02 6.69770231e-06 2.75504532e-05 8.08224757e-04 7.18197378e-01 1.65268882e+03 +8.34000000e-05 5.80724990e-02 2.05148197e-01 1.77376821e-02 6.71336223e-06 2.76643813e-05 8.09866563e-04 7.18197378e-01 1.65268882e+03 +8.35000000e-05 5.80609650e-02 2.05121792e-01 1.77738454e-02 6.72910433e-06 2.77787613e-05 8.11511366e-04 7.18197378e-01 1.65402626e+03 +8.36000000e-05 5.80494099e-02 2.05095339e-01 1.78100753e-02 6.74492921e-06 2.78935954e-05 8.13159175e-04 7.18197378e-01 1.65402626e+03 +8.37000000e-05 5.80378333e-02 2.05068837e-01 1.78463720e-02 6.76083748e-06 2.80088855e-05 8.14809999e-04 7.18197378e-01 1.65402626e+03 +8.38000000e-05 5.80262354e-02 2.05042286e-01 1.78827358e-02 6.77682973e-06 2.81246337e-05 8.16463849e-04 7.18197378e-01 1.65402626e+03 +8.39000000e-05 5.80146160e-02 2.05015685e-01 1.79191668e-02 6.79290658e-06 2.82408423e-05 8.18120734e-04 7.18197378e-01 1.65537429e+03 +8.40000000e-05 5.80029751e-02 2.04989035e-01 1.79556653e-02 6.80906864e-06 2.83575131e-05 8.19780664e-04 7.18197378e-01 1.65537429e+03 +8.41000000e-05 5.79913125e-02 2.04962335e-01 1.79922314e-02 6.82531655e-06 2.84746485e-05 8.21443648e-04 7.18197378e-01 1.65537429e+03 +8.42000000e-05 5.79796282e-02 2.04935585e-01 1.80288655e-02 6.84165092e-06 2.85922505e-05 8.23109698e-04 7.18197378e-01 1.65537429e+03 +8.43000000e-05 5.79679222e-02 2.04908785e-01 1.80655677e-02 6.85807239e-06 2.87103212e-05 8.24778822e-04 7.18197378e-01 1.65537429e+03 +8.44000000e-05 5.79561944e-02 2.04881935e-01 1.81023383e-02 6.87458160e-06 2.88288629e-05 8.26451031e-04 7.18197378e-01 1.65673307e+03 +8.45000000e-05 5.79444446e-02 2.04855035e-01 1.81391774e-02 6.89117920e-06 2.89478777e-05 8.28126334e-04 7.18197378e-01 1.65673307e+03 +8.46000000e-05 5.79326729e-02 2.04828084e-01 1.81760854e-02 6.90786583e-06 2.90673677e-05 8.29804742e-04 7.18197378e-01 1.65673307e+03 +8.47000000e-05 5.79208791e-02 2.04801082e-01 1.82130624e-02 6.92464215e-06 2.91873352e-05 8.31486266e-04 7.18197378e-01 1.65673307e+03 +8.48000000e-05 5.79090632e-02 2.04774030e-01 1.82501086e-02 6.94150883e-06 2.93077825e-05 8.33170914e-04 7.18197378e-01 1.65879260e+03 +8.49000000e-05 5.78972252e-02 2.04746927e-01 1.82872243e-02 6.95846654e-06 2.94287116e-05 8.34858698e-04 7.18197378e-01 1.65879260e+03 +8.50000000e-05 5.78853648e-02 2.04719772e-01 1.83244098e-02 6.97551595e-06 2.95501250e-05 8.36549627e-04 7.18197378e-01 1.65879260e+03 +8.51000000e-05 5.78734821e-02 2.04692566e-01 1.83616652e-02 6.99265773e-06 2.96720247e-05 8.38243713e-04 7.18197378e-01 1.65879260e+03 +8.52000000e-05 5.78615770e-02 2.04665309e-01 1.83989907e-02 7.00989258e-06 2.97944131e-05 8.39940964e-04 7.18197378e-01 1.65879260e+03 +8.53000000e-05 5.78496495e-02 2.04638000e-01 1.84363867e-02 7.02722119e-06 2.99172924e-05 8.41641393e-04 7.18197378e-01 1.65879260e+03 +8.54000000e-05 5.78376993e-02 2.04610639e-01 1.84738533e-02 7.04464425e-06 3.00406649e-05 8.43345008e-04 7.18197378e-01 1.66087721e+03 +8.55000000e-05 5.78257265e-02 2.04583226e-01 1.85113907e-02 7.06216248e-06 3.01645330e-05 8.45051822e-04 7.18197378e-01 1.66087721e+03 +8.56000000e-05 5.78137310e-02 2.04555761e-01 1.85489993e-02 7.07977660e-06 3.02888990e-05 8.46761844e-04 7.18197378e-01 1.66087721e+03 +8.57000000e-05 5.78017128e-02 2.04528244e-01 1.85866792e-02 7.09748730e-06 3.04137652e-05 8.48475084e-04 7.18197378e-01 1.66087721e+03 +8.58000000e-05 5.77896716e-02 2.04500674e-01 1.86244308e-02 7.11529533e-06 3.05391338e-05 8.50191555e-04 7.18197378e-01 1.66087721e+03 +8.59000000e-05 5.77776075e-02 2.04473051e-01 1.86622541e-02 7.13320141e-06 3.06650074e-05 8.51911265e-04 7.18197378e-01 1.66087721e+03 +8.60000000e-05 5.77655204e-02 2.04445375e-01 1.87001495e-02 7.15120628e-06 3.07913882e-05 8.53634227e-04 7.18197378e-01 1.66087721e+03 +8.61000000e-05 5.77534102e-02 2.04417647e-01 1.87381172e-02 7.16931069e-06 3.09182787e-05 8.55360451e-04 7.18197378e-01 1.66298744e+03 +8.62000000e-05 5.77412769e-02 2.04389865e-01 1.87761574e-02 7.18751539e-06 3.10456812e-05 8.57089947e-04 7.18197378e-01 1.66298744e+03 +8.63000000e-05 5.77291203e-02 2.04362029e-01 1.88142704e-02 7.20582115e-06 3.11735982e-05 8.58822727e-04 7.18197378e-01 1.66298744e+03 +8.64000000e-05 5.77169403e-02 2.04334140e-01 1.88524564e-02 7.22422872e-06 3.13020321e-05 8.60558802e-04 7.18197378e-01 1.66298744e+03 +8.65000000e-05 5.77047370e-02 2.04306198e-01 1.88907158e-02 7.24273887e-06 3.14309853e-05 8.62298183e-04 7.18197378e-01 1.66298744e+03 +8.66000000e-05 5.76925101e-02 2.04278201e-01 1.89290486e-02 7.26135240e-06 3.15604604e-05 8.64040880e-04 7.18197378e-01 1.66298744e+03 +8.67000000e-05 5.76802597e-02 2.04250150e-01 1.89674552e-02 7.28007008e-06 3.16904596e-05 8.65786905e-04 7.18197378e-01 1.66512384e+03 +8.68000000e-05 5.76679857e-02 2.04222044e-01 1.90059359e-02 7.29889271e-06 3.18209857e-05 8.67536269e-04 7.18197378e-01 1.66512384e+03 +8.69000000e-05 5.76556879e-02 2.04193885e-01 1.90444908e-02 7.31782110e-06 3.19520410e-05 8.69288984e-04 7.18197378e-01 1.66512384e+03 +8.70000000e-05 5.76433664e-02 2.04165670e-01 1.90831202e-02 7.33685605e-06 3.20836281e-05 8.71045060e-04 7.18197378e-01 1.66512384e+03 +8.71000000e-05 5.76310209e-02 2.04137401e-01 1.91218244e-02 7.35599838e-06 3.22157495e-05 8.72804509e-04 7.18197378e-01 1.66512384e+03 +8.72000000e-05 5.76186515e-02 2.04109076e-01 1.91606036e-02 7.37524891e-06 3.23484078e-05 8.74567343e-04 7.18197378e-01 1.66512384e+03 +8.73000000e-05 5.76062580e-02 2.04080696e-01 1.91994581e-02 7.39460848e-06 3.24816055e-05 8.76333572e-04 7.18197378e-01 1.66512384e+03 +8.74000000e-05 5.75938404e-02 2.04052261e-01 1.92383882e-02 7.41407792e-06 3.26153452e-05 8.78103209e-04 7.18197378e-01 1.66728700e+03 +8.75000000e-05 5.75813986e-02 2.04023770e-01 1.92773940e-02 7.43365810e-06 3.27496295e-05 8.79876265e-04 7.18197378e-01 1.66728700e+03 +8.76000000e-05 5.75689325e-02 2.03995223e-01 1.93164759e-02 7.45334987e-06 3.28844610e-05 8.81652751e-04 7.18197378e-01 1.66728700e+03 +8.77000000e-05 5.75564420e-02 2.03966620e-01 1.93556342e-02 7.47315408e-06 3.30198424e-05 8.83432679e-04 7.18197378e-01 1.66728700e+03 +8.78000000e-05 5.75439270e-02 2.03937961e-01 1.93948690e-02 7.49307162e-06 3.31557762e-05 8.85216061e-04 7.18197378e-01 1.66728700e+03 +8.79000000e-05 5.75313875e-02 2.03909246e-01 1.94341806e-02 7.51310337e-06 3.32922652e-05 8.87002909e-04 7.18197378e-01 1.66728700e+03 +8.80000000e-05 5.75188234e-02 2.03880474e-01 1.94735693e-02 7.53325021e-06 3.34293121e-05 8.88793235e-04 7.18197378e-01 1.66947751e+03 +8.81000000e-05 5.75062345e-02 2.03851645e-01 1.95130354e-02 7.55351303e-06 3.35669194e-05 8.90587050e-04 7.18197378e-01 1.66947751e+03 +8.82000000e-05 5.74936209e-02 2.03822759e-01 1.95525792e-02 7.57389274e-06 3.37050900e-05 8.92384366e-04 7.18197378e-01 1.66947751e+03 +8.83000000e-05 5.74809823e-02 2.03793816e-01 1.95922008e-02 7.59439026e-06 3.38438265e-05 8.94185196e-04 7.18197378e-01 1.66947751e+03 +8.84000000e-05 5.74683188e-02 2.03764815e-01 1.96319006e-02 7.61500650e-06 3.39831317e-05 8.95989552e-04 7.18197378e-01 1.66947751e+03 +8.85000000e-05 5.74556302e-02 2.03735757e-01 1.96716788e-02 7.63574240e-06 3.41230084e-05 8.97797445e-04 7.18197378e-01 1.66947751e+03 +8.86000000e-05 5.74429165e-02 2.03706641e-01 1.97115358e-02 7.65659890e-06 3.42634593e-05 8.99608888e-04 7.18197378e-01 1.66947751e+03 +8.87000000e-05 5.74301776e-02 2.03677467e-01 1.97514718e-02 7.67757696e-06 3.44044872e-05 9.01423893e-04 7.18197378e-01 1.67169598e+03 +8.88000000e-05 5.74174133e-02 2.03648235e-01 1.97914870e-02 7.69867754e-06 3.45460949e-05 9.03242472e-04 7.18197378e-01 1.67169598e+03 +8.89000000e-05 5.74046236e-02 2.03618944e-01 1.98315817e-02 7.71990161e-06 3.46882853e-05 9.05064638e-04 7.18197378e-01 1.67169598e+03 +8.90000000e-05 5.73918084e-02 2.03589595e-01 1.98717563e-02 7.74125015e-06 3.48310612e-05 9.06890404e-04 7.18197378e-01 1.67169598e+03 +8.91000000e-05 5.73789676e-02 2.03560187e-01 1.99120109e-02 7.76272414e-06 3.49744255e-05 9.08719781e-04 7.18197378e-01 1.67169598e+03 +8.92000000e-05 5.73661011e-02 2.03530720e-01 1.99523459e-02 7.78432459e-06 3.51183810e-05 9.10552783e-04 7.18197378e-01 1.67169598e+03 +8.93000000e-05 5.73532089e-02 2.03501193e-01 1.99927616e-02 7.80605249e-06 3.52629306e-05 9.12389421e-04 7.18197378e-01 1.67394306e+03 +8.94000000e-05 5.73402908e-02 2.03471607e-01 2.00332582e-02 7.82790883e-06 3.54080773e-05 9.14229710e-04 7.18197378e-01 1.67394306e+03 +8.95000000e-05 5.73273468e-02 2.03441962e-01 2.00738360e-02 7.84989465e-06 3.55538240e-05 9.16073660e-04 7.18197378e-01 1.67394306e+03 +8.96000000e-05 5.73143767e-02 2.03412257e-01 2.01144953e-02 7.87201099e-06 3.57001736e-05 9.17921286e-04 7.18197378e-01 1.67394306e+03 +8.97000000e-05 5.73013805e-02 2.03382491e-01 2.01552364e-02 7.89425888e-06 3.58471292e-05 9.19772600e-04 7.18197378e-01 1.67394306e+03 +8.98000000e-05 5.72883580e-02 2.03352666e-01 2.01960596e-02 7.91663938e-06 3.59946937e-05 9.21627614e-04 7.18197378e-01 1.67394306e+03 +8.99000000e-05 5.72753093e-02 2.03322779e-01 2.02369651e-02 7.93915353e-06 3.61428700e-05 9.23486343e-04 7.18197378e-01 1.67394306e+03 +9.00000000e-05 5.72622341e-02 2.03292832e-01 2.02779533e-02 7.96180250e-06 3.62916614e-05 9.25348799e-04 7.18197378e-01 1.67621939e+03 +9.01000000e-05 5.72491324e-02 2.03262825e-01 2.03190245e-02 7.98458733e-06 3.64410707e-05 9.27214994e-04 7.18197378e-01 1.67621939e+03 +9.02000000e-05 5.72360041e-02 2.03232756e-01 2.03601789e-02 8.00750913e-06 3.65911010e-05 9.29084944e-04 7.18197378e-01 1.67621939e+03 +9.03000000e-05 5.72228492e-02 2.03202625e-01 2.04014168e-02 8.03056902e-06 3.67417555e-05 9.30958660e-04 7.18197378e-01 1.67621939e+03 +9.04000000e-05 5.72096674e-02 2.03172433e-01 2.04427386e-02 8.05376811e-06 3.68930373e-05 9.32836155e-04 7.18197378e-01 1.67621939e+03 +9.05000000e-05 5.71964587e-02 2.03142179e-01 2.04841445e-02 8.07710756e-06 3.70449494e-05 9.34717445e-04 7.18197378e-01 1.67621939e+03 +9.06000000e-05 5.71832231e-02 2.03111864e-01 2.05256349e-02 8.10058847e-06 3.71974950e-05 9.36602541e-04 7.18197378e-01 1.67792526e+03 +9.07000000e-05 5.71699604e-02 2.03081485e-01 2.05672100e-02 8.12421193e-06 3.73506773e-05 9.38491457e-04 7.18197378e-01 1.67792526e+03 +9.08000000e-05 5.71566705e-02 2.03051045e-01 2.06088701e-02 8.14797912e-06 3.75044995e-05 9.40384207e-04 7.18197378e-01 1.67792526e+03 +9.09000000e-05 5.71433534e-02 2.03020542e-01 2.06506155e-02 8.17189119e-06 3.76589648e-05 9.42280805e-04 7.18197378e-01 1.67792526e+03 +9.10000000e-05 5.71300088e-02 2.02989975e-01 2.06924467e-02 8.19594929e-06 3.78140763e-05 9.44181265e-04 7.18197378e-01 1.67792526e+03 +9.11000000e-05 5.71166368e-02 2.02959346e-01 2.07343637e-02 8.22015468e-06 3.79698373e-05 9.46085599e-04 7.18197378e-01 1.67918608e+03 +9.12000000e-05 5.71032372e-02 2.02928653e-01 2.07763671e-02 8.24450866e-06 3.81262512e-05 9.47993823e-04 7.18197378e-01 1.67918608e+03 +9.13000000e-05 5.70898100e-02 2.02897897e-01 2.08184570e-02 8.26901246e-06 3.82833211e-05 9.49905949e-04 7.18197378e-01 1.67918608e+03 +9.14000000e-05 5.70763550e-02 2.02867077e-01 2.08606338e-02 8.29366739e-06 3.84410505e-05 9.51821993e-04 7.18197378e-01 1.68045599e+03 +9.15000000e-05 5.70628721e-02 2.02836192e-01 2.09028978e-02 8.31847449e-06 3.85994425e-05 9.53741967e-04 7.18197378e-01 1.68045599e+03 +9.16000000e-05 5.70493613e-02 2.02805244e-01 2.09452493e-02 8.34343511e-06 3.87585007e-05 9.55665887e-04 7.18197378e-01 1.68045599e+03 +9.17000000e-05 5.70358224e-02 2.02774231e-01 2.09876886e-02 8.36855046e-06 3.89182283e-05 9.57593767e-04 7.18197378e-01 1.68045599e+03 +9.18000000e-05 5.70222553e-02 2.02743153e-01 2.10302161e-02 8.39382188e-06 3.90786287e-05 9.59525620e-04 7.18197378e-01 1.68173511e+03 +9.19000000e-05 5.70086599e-02 2.02712010e-01 2.10728321e-02 8.41925067e-06 3.92397054e-05 9.61461461e-04 7.18197378e-01 1.68173511e+03 +9.20000000e-05 5.69950361e-02 2.02680802e-01 2.11155369e-02 8.44483810e-06 3.94014617e-05 9.63401305e-04 7.18197378e-01 1.68173511e+03 +9.21000000e-05 5.69813839e-02 2.02649528e-01 2.11583308e-02 8.47058549e-06 3.95639013e-05 9.65345166e-04 7.18197378e-01 1.68302356e+03 +9.22000000e-05 5.69677031e-02 2.02618188e-01 2.12012141e-02 8.49649420e-06 3.97270274e-05 9.67293059e-04 7.18197378e-01 1.68302356e+03 +9.23000000e-05 5.69539936e-02 2.02586783e-01 2.12441872e-02 8.52256555e-06 3.98908437e-05 9.69244999e-04 7.18197378e-01 1.68302356e+03 +9.24000000e-05 5.69402552e-02 2.02555311e-01 2.12872504e-02 8.54880092e-06 4.00553537e-05 9.71200999e-04 7.18197378e-01 1.68302356e+03 +9.25000000e-05 5.69264880e-02 2.02523773e-01 2.13304040e-02 8.57520169e-06 4.02205609e-05 9.73161076e-04 7.18197378e-01 1.68432145e+03 +9.26000000e-05 5.69126918e-02 2.02492168e-01 2.13736484e-02 8.60176928e-06 4.03864688e-05 9.75125243e-04 7.18197378e-01 1.68432145e+03 +9.27000000e-05 5.68988664e-02 2.02460497e-01 2.14169839e-02 8.62850512e-06 4.05530812e-05 9.77093516e-04 7.18197378e-01 1.68432145e+03 +9.28000000e-05 5.68850119e-02 2.02428758e-01 2.14604108e-02 8.65541064e-06 4.07204016e-05 9.79065911e-04 7.18197378e-01 1.68562890e+03 +9.29000000e-05 5.68711280e-02 2.02396951e-01 2.15039295e-02 8.68248719e-06 4.08884336e-05 9.81042441e-04 7.18197378e-01 1.68562890e+03 +9.30000000e-05 5.68572146e-02 2.02365077e-01 2.15475403e-02 8.70973624e-06 4.10571809e-05 9.83023123e-04 7.18197378e-01 1.68562890e+03 +9.31000000e-05 5.68432717e-02 2.02333135e-01 2.15912435e-02 8.73715923e-06 4.12266473e-05 9.85007971e-04 7.18197378e-01 1.68562890e+03 +9.32000000e-05 5.68292991e-02 2.02301125e-01 2.16350395e-02 8.76475768e-06 4.13968364e-05 9.86997002e-04 7.18197378e-01 1.68694605e+03 +9.33000000e-05 5.68152968e-02 2.02269046e-01 2.16789287e-02 8.79253317e-06 4.15677519e-05 9.88990229e-04 7.18197378e-01 1.68694605e+03 +9.34000000e-05 5.68012646e-02 2.02236899e-01 2.17229113e-02 8.82048720e-06 4.17393977e-05 9.90987670e-04 7.18197378e-01 1.68694605e+03 +9.35000000e-05 5.67872024e-02 2.02204682e-01 2.17669878e-02 8.84862133e-06 4.19117776e-05 9.92989339e-04 7.18197378e-01 1.68827302e+03 +9.36000000e-05 5.67731100e-02 2.02172397e-01 2.18111584e-02 8.87693686e-06 4.20848952e-05 9.94995253e-04 7.18197378e-01 1.68827302e+03 +9.37000000e-05 5.67589875e-02 2.02140041e-01 2.18554236e-02 8.90543537e-06 4.22587546e-05 9.97005427e-04 7.18197378e-01 1.68827302e+03 +9.38000000e-05 5.67448346e-02 2.02107617e-01 2.18997837e-02 8.93411832e-06 4.24333594e-05 9.99019876e-04 7.18197378e-01 1.68827302e+03 +9.39000000e-05 5.67306513e-02 2.02075122e-01 2.19442390e-02 8.96298740e-06 4.26087138e-05 1.00103862e-03 7.18197378e-01 1.68917753e+03 +9.40000000e-05 5.67164374e-02 2.02042556e-01 2.19887898e-02 8.99204462e-06 4.27848214e-05 1.00306167e-03 7.18197378e-01 1.68917753e+03 +9.41000000e-05 5.67021928e-02 2.02009921e-01 2.20334367e-02 9.02129186e-06 4.29616864e-05 1.00508904e-03 7.18197378e-01 1.68979135e+03 +9.42000000e-05 5.66879175e-02 2.01977214e-01 2.20781798e-02 9.05073011e-06 4.31393127e-05 1.00712075e-03 7.18197378e-01 1.68979135e+03 +9.43000000e-05 5.66736112e-02 2.01944436e-01 2.21230196e-02 9.08036059e-06 4.33177042e-05 1.00915683e-03 7.18197378e-01 1.69024149e+03 +9.44000000e-05 5.66592739e-02 2.01911587e-01 2.21679565e-02 9.11018564e-06 4.34968650e-05 1.01119727e-03 7.18197378e-01 1.69069278e+03 +9.45000000e-05 5.66449055e-02 2.01878667e-01 2.22129908e-02 9.14020704e-06 4.36767992e-05 1.01324210e-03 7.18197378e-01 1.69114520e+03 +9.46000000e-05 5.66305058e-02 2.01845674e-01 2.22581228e-02 9.17042617e-06 4.38575107e-05 1.01529134e-03 7.18197378e-01 1.69159877e+03 +9.47000000e-05 5.66160747e-02 2.01812610e-01 2.23033530e-02 9.20084504e-06 4.40390038e-05 1.01734500e-03 7.18197378e-01 1.69159877e+03 +9.48000000e-05 5.66016121e-02 2.01779472e-01 2.23486818e-02 9.23146505e-06 4.42212826e-05 1.01940310e-03 7.18197378e-01 1.69205349e+03 +9.49000000e-05 5.65871179e-02 2.01746263e-01 2.23941094e-02 9.26228789e-06 4.44043511e-05 1.02146566e-03 7.18197378e-01 1.69250937e+03 +9.50000000e-05 5.65725920e-02 2.01712980e-01 2.24396363e-02 9.29331654e-06 4.45882137e-05 1.02353269e-03 7.18197378e-01 1.69282548e+03 +9.51000000e-05 5.65580342e-02 2.01679624e-01 2.24852628e-02 9.32455065e-06 4.47728745e-05 1.02560421e-03 7.18197378e-01 1.69327863e+03 +9.52000000e-05 5.65434444e-02 2.01646194e-01 2.25309894e-02 9.35599401e-06 4.49583378e-05 1.02768023e-03 7.18197378e-01 1.69373292e+03 +9.53000000e-05 5.65288225e-02 2.01612690e-01 2.25768163e-02 9.38764740e-06 4.51446077e-05 1.02976079e-03 7.18197378e-01 1.69396050e+03 +9.54000000e-05 5.65141683e-02 2.01579113e-01 2.26227441e-02 9.41951314e-06 4.53316888e-05 1.03184588e-03 7.18197378e-01 1.69441652e+03 +9.55000000e-05 5.64994818e-02 2.01545461e-01 2.26687731e-02 9.45159304e-06 4.55195852e-05 1.03393553e-03 7.18197378e-01 1.69477169e+03 +9.56000000e-05 5.64847629e-02 2.01511734e-01 2.27149036e-02 9.48388877e-06 4.57083013e-05 1.03602976e-03 7.18197378e-01 1.69512757e+03 +9.57000000e-05 5.64700113e-02 2.01477932e-01 2.27611361e-02 9.51640230e-06 4.58978416e-05 1.03812858e-03 7.18197378e-01 1.69548415e+03 +9.58000000e-05 5.64552270e-02 2.01444055e-01 2.28074710e-02 9.54913570e-06 4.60882105e-05 1.04023201e-03 7.18197378e-01 1.69619943e+03 +9.59000000e-05 5.64404098e-02 2.01410102e-01 2.28539086e-02 9.58209092e-06 4.62794123e-05 1.04234008e-03 7.18197378e-01 1.69655814e+03 +9.60000000e-05 5.64255596e-02 2.01376074e-01 2.29004493e-02 9.61526992e-06 4.64714516e-05 1.04445279e-03 7.18197378e-01 1.69724498e+03 +9.61000000e-05 5.64106763e-02 2.01341969e-01 2.29470937e-02 9.64867471e-06 4.66643329e-05 1.04657016e-03 7.18197378e-01 1.69724498e+03 +9.62000000e-05 5.63957598e-02 2.01307788e-01 2.29938419e-02 9.68230728e-06 4.68580608e-05 1.04869222e-03 7.18197378e-01 1.69793444e+03 +9.63000000e-05 5.63808099e-02 2.01273530e-01 2.30406945e-02 9.71616968e-06 4.70526397e-05 1.05081898e-03 7.18197378e-01 1.69793444e+03 +9.64000000e-05 5.63658265e-02 2.01239195e-01 2.30876519e-02 9.75026399e-06 4.72480744e-05 1.05295046e-03 7.18197378e-01 1.69862654e+03 +9.65000000e-05 5.63508094e-02 2.01204783e-01 2.31347145e-02 9.78459230e-06 4.74443695e-05 1.05508668e-03 7.18197378e-01 1.69932130e+03 +9.66000000e-05 5.63357586e-02 2.01170293e-01 2.31818826e-02 9.81915673e-06 4.76415296e-05 1.05722765e-03 7.18197378e-01 1.69932130e+03 +9.67000000e-05 5.63206739e-02 2.01135725e-01 2.32291567e-02 9.85395941e-06 4.78395594e-05 1.05937340e-03 7.18197378e-01 1.70038288e+03 +9.68000000e-05 5.63055551e-02 2.01101078e-01 2.32765372e-02 9.88900250e-06 4.80384637e-05 1.06152394e-03 7.18197378e-01 1.70038288e+03 +9.69000000e-05 5.62904022e-02 2.01066354e-01 2.33240246e-02 9.92428819e-06 4.82382473e-05 1.06367930e-03 7.18197378e-01 1.70038288e+03 +9.70000000e-05 5.62752150e-02 2.01031550e-01 2.33716192e-02 9.95981867e-06 4.84389149e-05 1.06583948e-03 7.18197378e-01 1.70145070e+03 +9.71000000e-05 5.62599933e-02 2.00996667e-01 2.34193215e-02 9.99559619e-06 4.86404713e-05 1.06800452e-03 7.18197378e-01 1.70145070e+03 +9.72000000e-05 5.62447371e-02 2.00961704e-01 2.34671318e-02 1.00316230e-05 4.88429215e-05 1.07017442e-03 7.18197378e-01 1.70252484e+03 +9.73000000e-05 5.62294461e-02 2.00926662e-01 2.35150507e-02 1.00679014e-05 4.90462704e-05 1.07234921e-03 7.18197378e-01 1.70252484e+03 +9.74000000e-05 5.62141203e-02 2.00891539e-01 2.35630785e-02 1.01044336e-05 4.92505229e-05 1.07452891e-03 7.18197378e-01 1.70252484e+03 +9.75000000e-05 5.61987595e-02 2.00856336e-01 2.36112157e-02 1.01412220e-05 4.94556839e-05 1.07671354e-03 7.18197378e-01 1.70360537e+03 +9.76000000e-05 5.61833636e-02 2.00821053e-01 2.36594628e-02 1.01782690e-05 4.96617585e-05 1.07890312e-03 7.18197378e-01 1.70360537e+03 +9.77000000e-05 5.61679324e-02 2.00785688e-01 2.37078200e-02 1.02155769e-05 4.98687517e-05 1.08109766e-03 7.18197378e-01 1.70360537e+03 +9.78000000e-05 5.61524658e-02 2.00750241e-01 2.37562880e-02 1.02531482e-05 5.00766686e-05 1.08329718e-03 7.18197378e-01 1.70469234e+03 +9.79000000e-05 5.61369636e-02 2.00714713e-01 2.38048671e-02 1.02909853e-05 5.02855143e-05 1.08550171e-03 7.18197378e-01 1.70469234e+03 +9.80000000e-05 5.61214258e-02 2.00679103e-01 2.38535578e-02 1.03290906e-05 5.04952939e-05 1.08771127e-03 7.18197378e-01 1.70670370e+03 +9.81000000e-05 5.61058521e-02 2.00643410e-01 2.39023604e-02 1.03674666e-05 5.07060127e-05 1.08992587e-03 7.18197378e-01 1.70670370e+03 +9.82000000e-05 5.60902424e-02 2.00607635e-01 2.39512756e-02 1.04061159e-05 5.09176759e-05 1.09214554e-03 7.18197378e-01 1.70670370e+03 +9.83000000e-05 5.60745966e-02 2.00571776e-01 2.40003037e-02 1.04450410e-05 5.11302887e-05 1.09437029e-03 7.18197378e-01 1.70670370e+03 +9.84000000e-05 5.60589145e-02 2.00535834e-01 2.40494451e-02 1.04842445e-05 5.13438564e-05 1.09660015e-03 7.18197378e-01 1.70670370e+03 +9.85000000e-05 5.60431960e-02 2.00499808e-01 2.40987004e-02 1.05237289e-05 5.15583843e-05 1.09883514e-03 7.18197378e-01 1.70873743e+03 +9.86000000e-05 5.60274409e-02 2.00463699e-01 2.41480700e-02 1.05634970e-05 5.17738779e-05 1.10107528e-03 7.18197378e-01 1.70873743e+03 +9.87000000e-05 5.60116492e-02 2.00427504e-01 2.41975543e-02 1.06035513e-05 5.19903426e-05 1.10332058e-03 7.18197378e-01 1.70873743e+03 +9.88000000e-05 5.59958205e-02 2.00391225e-01 2.42471538e-02 1.06438945e-05 5.22077837e-05 1.10557107e-03 7.18197378e-01 1.70873743e+03 +9.89000000e-05 5.59799548e-02 2.00354861e-01 2.42968691e-02 1.06845295e-05 5.24262068e-05 1.10782677e-03 7.18197378e-01 1.70873743e+03 +9.90000000e-05 5.59640520e-02 2.00318411e-01 2.43467004e-02 1.07254588e-05 5.26456175e-05 1.11008770e-03 7.18197378e-01 1.71079395e+03 +9.91000000e-05 5.59481118e-02 2.00281875e-01 2.43966484e-02 1.07666854e-05 5.28660212e-05 1.11235389e-03 7.18197378e-01 1.71079395e+03 +9.92000000e-05 5.59321342e-02 2.00245253e-01 2.44467135e-02 1.08082120e-05 5.30874236e-05 1.11462535e-03 7.18197378e-01 1.71079395e+03 +9.93000000e-05 5.59161190e-02 2.00208545e-01 2.44968962e-02 1.08500415e-05 5.33098304e-05 1.11690210e-03 7.18197378e-01 1.71079395e+03 +9.94000000e-05 5.59000659e-02 2.00171750e-01 2.45471969e-02 1.08921768e-05 5.35332471e-05 1.11918417e-03 7.18197378e-01 1.71079395e+03 +9.95000000e-05 5.58839749e-02 2.00134867e-01 2.45976162e-02 1.09346207e-05 5.37576797e-05 1.12147158e-03 7.18197378e-01 1.71287373e+03 +9.96000000e-05 5.58678459e-02 2.00097897e-01 2.46481545e-02 1.09773763e-05 5.39831337e-05 1.12376434e-03 7.18197378e-01 1.71287373e+03 +9.97000000e-05 5.58516786e-02 2.00060839e-01 2.46988123e-02 1.10204464e-05 5.42096151e-05 1.12606249e-03 7.18197378e-01 1.71287373e+03 +9.98000000e-05 5.58354729e-02 2.00023692e-01 2.47495901e-02 1.10638341e-05 5.44371298e-05 1.12836605e-03 7.18197378e-01 1.71287373e+03 +9.99000000e-05 5.58192286e-02 1.99986457e-01 2.48004884e-02 1.11075425e-05 5.46656835e-05 1.13067503e-03 7.18197378e-01 1.71497723e+03 +1.00000000e-04 5.58029456e-02 1.99949133e-01 2.48515077e-02 1.11515746e-05 5.48952823e-05 1.13298946e-03 7.18197378e-01 1.71497723e+03 +1.00100000e-04 5.57866237e-02 1.99911719e-01 2.49026485e-02 1.11959336e-05 5.51259321e-05 1.13530936e-03 7.18197378e-01 1.71497723e+03 +1.00200000e-04 5.57702627e-02 1.99874215e-01 2.49539113e-02 1.12406226e-05 5.53576390e-05 1.13763475e-03 7.18197378e-01 1.71497723e+03 +1.00300000e-04 5.57538626e-02 1.99836621e-01 2.50052966e-02 1.12856447e-05 5.55904090e-05 1.13996566e-03 7.18197378e-01 1.71497723e+03 +1.00400000e-04 5.57374230e-02 1.99798937e-01 2.50568049e-02 1.13310034e-05 5.58242483e-05 1.14230211e-03 7.18197378e-01 1.71710492e+03 +1.00500000e-04 5.57209439e-02 1.99761161e-01 2.51084367e-02 1.13767017e-05 5.60591631e-05 1.14464413e-03 7.18197378e-01 1.71710492e+03 +1.00600000e-04 5.57044252e-02 1.99723295e-01 2.51601926e-02 1.14227430e-05 5.62951594e-05 1.14699172e-03 7.18197378e-01 1.71710492e+03 +1.00700000e-04 5.56878665e-02 1.99685336e-01 2.52120731e-02 1.14691306e-05 5.65322437e-05 1.14934493e-03 7.18197378e-01 1.71710492e+03 +1.00800000e-04 5.56712678e-02 1.99647286e-01 2.52640786e-02 1.15158680e-05 5.67704222e-05 1.15170377e-03 7.18197378e-01 1.71710492e+03 +1.00900000e-04 5.56546289e-02 1.99609143e-01 2.53162097e-02 1.15629584e-05 5.70097012e-05 1.15406826e-03 7.18197378e-01 1.71925729e+03 +1.01000000e-04 5.56379496e-02 1.99570907e-01 2.53684670e-02 1.16104055e-05 5.72500872e-05 1.15643843e-03 7.18197378e-01 1.71925729e+03 +1.01100000e-04 5.56212298e-02 1.99532577e-01 2.54208509e-02 1.16582127e-05 5.74915865e-05 1.15881431e-03 7.18197378e-01 1.71925729e+03 +1.01200000e-04 5.56044692e-02 1.99494154e-01 2.54733620e-02 1.17063835e-05 5.77342058e-05 1.16119591e-03 7.18197378e-01 1.71925729e+03 +1.01300000e-04 5.55876678e-02 1.99455637e-01 2.55260008e-02 1.17549216e-05 5.79779514e-05 1.16358327e-03 7.18197378e-01 1.71925729e+03 +1.01400000e-04 5.55708253e-02 1.99417026e-01 2.55787679e-02 1.18038305e-05 5.82228301e-05 1.16597639e-03 7.18197378e-01 1.72143485e+03 +1.01500000e-04 5.55539415e-02 1.99378319e-01 2.56316639e-02 1.18531139e-05 5.84688484e-05 1.16837532e-03 7.18197378e-01 1.72143485e+03 +1.01600000e-04 5.55370163e-02 1.99339518e-01 2.56846891e-02 1.19027756e-05 5.87160131e-05 1.17078008e-03 7.18197378e-01 1.72143485e+03 +1.01700000e-04 5.55200496e-02 1.99300620e-01 2.57378443e-02 1.19528192e-05 5.89643308e-05 1.17319068e-03 7.18197378e-01 1.72143485e+03 +1.01800000e-04 5.55030410e-02 1.99261627e-01 2.57911300e-02 1.20032485e-05 5.92138084e-05 1.17560715e-03 7.18197378e-01 1.72143485e+03 +1.01900000e-04 5.54859905e-02 1.99222537e-01 2.58445467e-02 1.20540675e-05 5.94644527e-05 1.17802953e-03 7.18197378e-01 1.72363811e+03 +1.02000000e-04 5.54688979e-02 1.99183350e-01 2.58980949e-02 1.21052801e-05 5.97162706e-05 1.18045783e-03 7.18197378e-01 1.72363811e+03 +1.02100000e-04 5.54517629e-02 1.99144066e-01 2.59517753e-02 1.21568901e-05 5.99692691e-05 1.18289208e-03 7.18197378e-01 1.72363811e+03 +1.02200000e-04 5.54345855e-02 1.99104684e-01 2.60055883e-02 1.22089015e-05 6.02234550e-05 1.18533230e-03 7.18197378e-01 1.72363811e+03 +1.02300000e-04 5.54173654e-02 1.99065203e-01 2.60595347e-02 1.22613185e-05 6.04788356e-05 1.18777852e-03 7.18197378e-01 1.72363811e+03 +1.02400000e-04 5.54001024e-02 1.99025625e-01 2.61136149e-02 1.23141450e-05 6.07354179e-05 1.19023077e-03 7.18197378e-01 1.72586761e+03 +1.02500000e-04 5.53827963e-02 1.98985947e-01 2.61678295e-02 1.23673852e-05 6.09932090e-05 1.19268907e-03 7.18197378e-01 1.72586761e+03 +1.02600000e-04 5.53654471e-02 1.98946169e-01 2.62221791e-02 1.24210432e-05 6.12522161e-05 1.19515344e-03 7.18197378e-01 1.72586761e+03 +1.02700000e-04 5.53480544e-02 1.98906292e-01 2.62766643e-02 1.24751232e-05 6.15124466e-05 1.19762392e-03 7.18197378e-01 1.72586761e+03 +1.02800000e-04 5.53306180e-02 1.98866314e-01 2.63312857e-02 1.25296295e-05 6.17739077e-05 1.20010054e-03 7.18197378e-01 1.72812390e+03 +1.02900000e-04 5.53131379e-02 1.98826236e-01 2.63860438e-02 1.25845667e-05 6.20366069e-05 1.20258330e-03 7.18197378e-01 1.72812390e+03 +1.03000000e-04 5.52956138e-02 1.98786056e-01 2.64409393e-02 1.26399389e-05 6.23005515e-05 1.20507226e-03 7.18197378e-01 1.72812390e+03 +1.03100000e-04 5.52780455e-02 1.98745775e-01 2.64959727e-02 1.26957508e-05 6.25657491e-05 1.20756742e-03 7.18197378e-01 1.72812390e+03 +1.03200000e-04 5.52604328e-02 1.98705392e-01 2.65511447e-02 1.27520067e-05 6.28322072e-05 1.21006882e-03 7.18197378e-01 1.72812390e+03 +1.03300000e-04 5.52427756e-02 1.98664906e-01 2.66064559e-02 1.28087113e-05 6.30999334e-05 1.21257648e-03 7.18197378e-01 1.72977462e+03 +1.03400000e-04 5.52250735e-02 1.98624317e-01 2.66619068e-02 1.28658690e-05 6.33689354e-05 1.21509044e-03 7.18197378e-01 1.72977462e+03 +1.03500000e-04 5.52073265e-02 1.98583624e-01 2.67174981e-02 1.29234844e-05 6.36392209e-05 1.21761071e-03 7.18197378e-01 1.72977462e+03 +1.03600000e-04 5.51895344e-02 1.98542828e-01 2.67732304e-02 1.29815621e-05 6.39107977e-05 1.22013733e-03 7.18197378e-01 1.72977462e+03 +1.03700000e-04 5.51716968e-02 1.98501927e-01 2.68291042e-02 1.30401072e-05 6.41836736e-05 1.22267033e-03 7.18197378e-01 1.73095673e+03 +1.03800000e-04 5.51538137e-02 1.98460921e-01 2.68851204e-02 1.30991245e-05 6.44578566e-05 1.22520973e-03 7.18197378e-01 1.73095673e+03 +1.03900000e-04 5.51358848e-02 1.98419810e-01 2.69412794e-02 1.31586191e-05 6.47333547e-05 1.22775556e-03 7.18197378e-01 1.73214628e+03 +1.04000000e-04 5.51179100e-02 1.98378594e-01 2.69975818e-02 1.32185957e-05 6.50101757e-05 1.23030785e-03 7.18197378e-01 1.73214628e+03 +1.04100000e-04 5.50998889e-02 1.98337271e-01 2.70540285e-02 1.32790592e-05 6.52883280e-05 1.23286663e-03 7.18197378e-01 1.73214628e+03 +1.04200000e-04 5.50818215e-02 1.98295841e-01 2.71106198e-02 1.33400149e-05 6.55678195e-05 1.23543192e-03 7.18197378e-01 1.73334335e+03 +1.04300000e-04 5.50637075e-02 1.98254304e-01 2.71673566e-02 1.34014677e-05 6.58486585e-05 1.23800376e-03 7.18197378e-01 1.73334335e+03 +1.04400000e-04 5.50455466e-02 1.98212660e-01 2.72242395e-02 1.34634230e-05 6.61308534e-05 1.24058218e-03 7.18197378e-01 1.73454802e+03 +1.04500000e-04 5.50273388e-02 1.98170907e-01 2.72812690e-02 1.35258860e-05 6.64144125e-05 1.24316720e-03 7.18197378e-01 1.73454802e+03 +1.04600000e-04 5.50090837e-02 1.98129045e-01 2.73384460e-02 1.35888619e-05 6.66993441e-05 1.24575885e-03 7.18197378e-01 1.73454802e+03 +1.04700000e-04 5.49907812e-02 1.98087075e-01 2.73957709e-02 1.36523563e-05 6.69856569e-05 1.24835717e-03 7.18197378e-01 1.73576037e+03 +1.04800000e-04 5.49724311e-02 1.98044995e-01 2.74532446e-02 1.37163746e-05 6.72733592e-05 1.25096217e-03 7.18197378e-01 1.73576037e+03 +1.04900000e-04 5.49540330e-02 1.98002804e-01 2.75108675e-02 1.37809225e-05 6.75624598e-05 1.25357391e-03 7.18197378e-01 1.73725749e+03 +1.05000000e-04 5.49355869e-02 1.97960503e-01 2.75686406e-02 1.38460054e-05 6.78529674e-05 1.25619239e-03 7.18197378e-01 1.73725749e+03 +1.05100000e-04 5.49170925e-02 1.97918091e-01 2.76265643e-02 1.39116291e-05 6.81448906e-05 1.25881766e-03 7.18197378e-01 1.73725749e+03 +1.05200000e-04 5.48985496e-02 1.97875567e-01 2.76846394e-02 1.39777992e-05 6.84382384e-05 1.26144974e-03 7.18197378e-01 1.73876645e+03 +1.05300000e-04 5.48799579e-02 1.97832931e-01 2.77428665e-02 1.40445217e-05 6.87330196e-05 1.26408866e-03 7.18197378e-01 1.73876645e+03 +1.05400000e-04 5.48613173e-02 1.97790183e-01 2.78012464e-02 1.41118023e-05 6.90292431e-05 1.26673447e-03 7.18197378e-01 1.73876645e+03 +1.05500000e-04 5.48426275e-02 1.97747321e-01 2.78597798e-02 1.41796471e-05 6.93269182e-05 1.26938718e-03 7.18197378e-01 1.74028743e+03 +1.05600000e-04 5.48238882e-02 1.97704346e-01 2.79184673e-02 1.42480622e-05 6.96260537e-05 1.27204682e-03 7.18197378e-01 1.74028743e+03 +1.05700000e-04 5.48050993e-02 1.97661256e-01 2.79773097e-02 1.43170537e-05 6.99266590e-05 1.27471344e-03 7.18197378e-01 1.74028743e+03 +1.05800000e-04 5.47862606e-02 1.97618052e-01 2.80363076e-02 1.43866277e-05 7.02287434e-05 1.27738706e-03 7.18197378e-01 1.74182057e+03 +1.05900000e-04 5.47673717e-02 1.97574732e-01 2.80954617e-02 1.44567906e-05 7.05323160e-05 1.28006771e-03 7.18197378e-01 1.74182057e+03 +1.06000000e-04 5.47484325e-02 1.97531296e-01 2.81547729e-02 1.45275487e-05 7.08373864e-05 1.28275543e-03 7.18197378e-01 1.74182057e+03 +1.06100000e-04 5.47294428e-02 1.97487745e-01 2.82142417e-02 1.45989084e-05 7.11439640e-05 1.28545024e-03 7.18197378e-01 1.74336606e+03 +1.06200000e-04 5.47104022e-02 1.97444076e-01 2.82738690e-02 1.46708763e-05 7.14520585e-05 1.28815219e-03 7.18197378e-01 1.74336606e+03 +1.06300000e-04 5.46913106e-02 1.97400290e-01 2.83336554e-02 1.47434590e-05 7.17616794e-05 1.29086130e-03 7.18197378e-01 1.74336606e+03 +1.06400000e-04 5.46721678e-02 1.97356385e-01 2.83936018e-02 1.48166633e-05 7.20728365e-05 1.29357761e-03 7.18197378e-01 1.74492407e+03 +1.06500000e-04 5.46529734e-02 1.97312363e-01 2.84537087e-02 1.48904958e-05 7.23855395e-05 1.29630114e-03 7.18197378e-01 1.74492407e+03 +1.06600000e-04 5.46337273e-02 1.97268221e-01 2.85139770e-02 1.49649634e-05 7.26997984e-05 1.29903194e-03 7.18197378e-01 1.74492407e+03 +1.06700000e-04 5.46144292e-02 1.97223960e-01 2.85744074e-02 1.50400730e-05 7.30156231e-05 1.30177004e-03 7.18197378e-01 1.74649478e+03 +1.06800000e-04 5.45950789e-02 1.97179578e-01 2.86350007e-02 1.51158319e-05 7.33330237e-05 1.30451546e-03 7.18197378e-01 1.74649478e+03 +1.06900000e-04 5.45756761e-02 1.97135076e-01 2.86957576e-02 1.51922473e-05 7.36520103e-05 1.30726826e-03 7.18197378e-01 1.74649478e+03 +1.07000000e-04 5.45562205e-02 1.97090452e-01 2.87566789e-02 1.52693265e-05 7.39725931e-05 1.31002845e-03 7.18197378e-01 1.74763122e+03 +1.07100000e-04 5.45367120e-02 1.97045707e-01 2.88177654e-02 1.53470764e-05 7.42947824e-05 1.31279607e-03 7.18197378e-01 1.74763122e+03 +1.07200000e-04 5.45171502e-02 1.97000839e-01 2.88790178e-02 1.54255042e-05 7.46185885e-05 1.31557116e-03 7.18197378e-01 1.74844231e+03 +1.07300000e-04 5.44975350e-02 1.96955848e-01 2.89404369e-02 1.55046178e-05 7.49440220e-05 1.31835376e-03 7.18197378e-01 1.74844231e+03 +1.07400000e-04 5.44778661e-02 1.96910733e-01 2.90020235e-02 1.55844253e-05 7.52710934e-05 1.32114389e-03 7.18197378e-01 1.74925682e+03 +1.07500000e-04 5.44581431e-02 1.96865494e-01 2.90637784e-02 1.56649341e-05 7.55998134e-05 1.32394160e-03 7.18197378e-01 1.74925682e+03 +1.07600000e-04 5.44383659e-02 1.96820131e-01 2.91257024e-02 1.57461520e-05 7.59301926e-05 1.32674692e-03 7.18197378e-01 1.75007476e+03 +1.07700000e-04 5.44185343e-02 1.96774641e-01 2.91877962e-02 1.58280866e-05 7.62622420e-05 1.32955989e-03 7.18197378e-01 1.75089616e+03 +1.07800000e-04 5.43986478e-02 1.96729026e-01 2.92500607e-02 1.59107464e-05 7.65959723e-05 1.33238053e-03 7.18197378e-01 1.75089616e+03 +1.07900000e-04 5.43787063e-02 1.96683285e-01 2.93124967e-02 1.59941392e-05 7.69313946e-05 1.33520890e-03 7.18197378e-01 1.75172104e+03 +1.08000000e-04 5.43587096e-02 1.96637416e-01 2.93751050e-02 1.60782733e-05 7.72685201e-05 1.33804502e-03 7.18197378e-01 1.75254944e+03 +1.08100000e-04 5.43386573e-02 1.96591419e-01 2.94378864e-02 1.61631575e-05 7.76073598e-05 1.34088893e-03 7.18197378e-01 1.75254944e+03 +1.08200000e-04 5.43185492e-02 1.96545294e-01 2.95008417e-02 1.62488004e-05 7.79479251e-05 1.34374067e-03 7.18197378e-01 1.75314903e+03 +1.08300000e-04 5.42983849e-02 1.96499040e-01 2.95639719e-02 1.63352092e-05 7.82902274e-05 1.34660028e-03 7.18197378e-01 1.75358282e+03 +1.08400000e-04 5.42781644e-02 1.96452656e-01 2.96272776e-02 1.64223942e-05 7.86342780e-05 1.34946779e-03 7.18197378e-01 1.75445329e+03 +1.08500000e-04 5.42578872e-02 1.96406141e-01 2.96907598e-02 1.65103636e-05 7.89800887e-05 1.35234324e-03 7.18197378e-01 1.75488999e+03 +1.08600000e-04 5.42375530e-02 1.96359496e-01 2.97544193e-02 1.65991262e-05 7.93276710e-05 1.35522667e-03 7.18197378e-01 1.75532767e+03 +1.08700000e-04 5.42171618e-02 1.96312720e-01 2.98182569e-02 1.66886914e-05 7.96770368e-05 1.35811813e-03 7.18197378e-01 1.75576632e+03 +1.08800000e-04 5.41967130e-02 1.96265811e-01 2.98822736e-02 1.67790681e-05 8.00281979e-05 1.36101764e-03 7.18197378e-01 1.75664660e+03 +1.08900000e-04 5.41762065e-02 1.96218769e-01 2.99464701e-02 1.68702658e-05 8.03811662e-05 1.36392524e-03 7.18197378e-01 1.75708823e+03 +1.09000000e-04 5.41556420e-02 1.96171594e-01 3.00108474e-02 1.69622938e-05 8.07359539e-05 1.36684098e-03 7.18197378e-01 1.75792732e+03 +1.09100000e-04 5.41350191e-02 1.96124284e-01 3.00754063e-02 1.70551618e-05 8.10925731e-05 1.36976490e-03 7.18197378e-01 1.75792732e+03 +1.09200000e-04 5.41143377e-02 1.96076840e-01 3.01401477e-02 1.71488794e-05 8.14510361e-05 1.37269703e-03 7.18197378e-01 1.75877002e+03 +1.09300000e-04 5.40935974e-02 1.96029260e-01 3.02050725e-02 1.72434566e-05 8.18113553e-05 1.37563741e-03 7.18197378e-01 1.75961635e+03 +1.09400000e-04 5.40727979e-02 1.95981544e-01 3.02701816e-02 1.73389032e-05 8.21735432e-05 1.37858609e-03 7.18197378e-01 1.75961635e+03 +1.09500000e-04 5.40519390e-02 1.95933691e-01 3.03354759e-02 1.74352294e-05 8.25376124e-05 1.38154310e-03 7.18197378e-01 1.76046633e+03 +1.09600000e-04 5.40310203e-02 1.95885701e-01 3.04009562e-02 1.75324454e-05 8.29035755e-05 1.38450850e-03 7.18197378e-01 1.76132000e+03 +1.09700000e-04 5.40100415e-02 1.95837573e-01 3.04666236e-02 1.76305617e-05 8.32714455e-05 1.38748230e-03 7.18197378e-01 1.76132000e+03 +1.09800000e-04 5.39890024e-02 1.95789305e-01 3.05324789e-02 1.77295886e-05 8.36412352e-05 1.39046457e-03 7.18197378e-01 1.76217738e+03 +1.09900000e-04 5.39679027e-02 1.95740899e-01 3.05985231e-02 1.78295370e-05 8.40129578e-05 1.39345534e-03 7.18197378e-01 1.76369415e+03 +1.10000000e-04 5.39467420e-02 1.95692351e-01 3.06647570e-02 1.79304176e-05 8.43866263e-05 1.39645465e-03 7.18197378e-01 1.76369415e+03 +1.10100000e-04 5.39255200e-02 1.95643663e-01 3.07311817e-02 1.80322414e-05 8.47622540e-05 1.39946254e-03 7.18197378e-01 1.76369415e+03 +1.10200000e-04 5.39042364e-02 1.95594834e-01 3.07977980e-02 1.81350196e-05 8.51398543e-05 1.40247906e-03 7.18197378e-01 1.76522264e+03 +1.10300000e-04 5.38828910e-02 1.95545862e-01 3.08646069e-02 1.82387635e-05 8.55194408e-05 1.40550425e-03 7.18197378e-01 1.76522264e+03 +1.10400000e-04 5.38614834e-02 1.95496747e-01 3.09316094e-02 1.83434844e-05 8.59010270e-05 1.40853816e-03 7.18197378e-01 1.76522264e+03 +1.10500000e-04 5.38400133e-02 1.95447488e-01 3.09988064e-02 1.84491941e-05 8.62846268e-05 1.41158082e-03 7.18197378e-01 1.76676301e+03 +1.10600000e-04 5.38184804e-02 1.95398084e-01 3.10661990e-02 1.85559042e-05 8.66702539e-05 1.41463228e-03 7.18197378e-01 1.76676301e+03 +1.10700000e-04 5.37968844e-02 1.95348536e-01 3.11337880e-02 1.86636267e-05 8.70579223e-05 1.41769259e-03 7.18197378e-01 1.76831542e+03 +1.10800000e-04 5.37752249e-02 1.95298841e-01 3.12015745e-02 1.87723737e-05 8.74476463e-05 1.42076178e-03 7.18197378e-01 1.76831542e+03 +1.10900000e-04 5.37535017e-02 1.95249000e-01 3.12695595e-02 1.88821575e-05 8.78394399e-05 1.42383991e-03 7.18197378e-01 1.76831542e+03 +1.11000000e-04 5.37317143e-02 1.95199011e-01 3.13377439e-02 1.89929906e-05 8.82333177e-05 1.42692701e-03 7.18197378e-01 1.76988003e+03 +1.11100000e-04 5.37098625e-02 1.95148874e-01 3.14061287e-02 1.91048855e-05 8.86292940e-05 1.43002314e-03 7.18197378e-01 1.76988003e+03 +1.11200000e-04 5.36879460e-02 1.95098588e-01 3.14747151e-02 1.92178551e-05 8.90273835e-05 1.43312834e-03 7.18197378e-01 1.76988003e+03 +1.11300000e-04 5.36659644e-02 1.95048152e-01 3.15435039e-02 1.93319123e-05 8.94276010e-05 1.43624266e-03 7.18197378e-01 1.77145700e+03 +1.11400000e-04 5.36439174e-02 1.94997565e-01 3.16124962e-02 1.94470704e-05 8.98299613e-05 1.43936613e-03 7.18197378e-01 1.77145700e+03 +1.11500000e-04 5.36218046e-02 1.94946828e-01 3.16816931e-02 1.95633427e-05 9.02344795e-05 1.44249882e-03 7.18197378e-01 1.77304652e+03 +1.11600000e-04 5.35996257e-02 1.94895938e-01 3.17510956e-02 1.96807428e-05 9.06411708e-05 1.44564076e-03 7.18197378e-01 1.77304652e+03 +1.11700000e-04 5.35773804e-02 1.94844896e-01 3.18207047e-02 1.97992844e-05 9.10500503e-05 1.44879200e-03 7.18197378e-01 1.77304652e+03 +1.11800000e-04 5.35550683e-02 1.94793700e-01 3.18905215e-02 1.99189814e-05 9.14611336e-05 1.45195259e-03 7.18197378e-01 1.77464875e+03 +1.11900000e-04 5.35326891e-02 1.94742349e-01 3.19605471e-02 2.00398481e-05 9.18744363e-05 1.45512258e-03 7.18197378e-01 1.77464875e+03 +1.12000000e-04 5.35102425e-02 1.94690843e-01 3.20307825e-02 2.01618988e-05 9.22899739e-05 1.45830201e-03 7.18197378e-01 1.77464875e+03 +1.12100000e-04 5.34877280e-02 1.94639182e-01 3.21012288e-02 2.02851480e-05 9.27077625e-05 1.46149094e-03 7.18197378e-01 1.77626386e+03 +1.12200000e-04 5.34651453e-02 1.94587363e-01 3.21718871e-02 2.04096106e-05 9.31278180e-05 1.46468942e-03 7.18197378e-01 1.77626386e+03 +1.12300000e-04 5.34424941e-02 1.94535387e-01 3.22427584e-02 2.05353015e-05 9.35501565e-05 1.46789749e-03 7.18197378e-01 1.77789204e+03 +1.12400000e-04 5.34197741e-02 1.94483252e-01 3.23138440e-02 2.06622359e-05 9.39747944e-05 1.47111520e-03 7.18197378e-01 1.77789204e+03 +1.12500000e-04 5.33969847e-02 1.94430958e-01 3.23851448e-02 2.07904293e-05 9.44017480e-05 1.47434260e-03 7.18197378e-01 1.77789204e+03 +1.12600000e-04 5.33741258e-02 1.94378504e-01 3.24566621e-02 2.09198974e-05 9.48310341e-05 1.47757975e-03 7.18197378e-01 1.77953347e+03 +1.12700000e-04 5.33511969e-02 1.94325888e-01 3.25283968e-02 2.10506561e-05 9.52626692e-05 1.48082669e-03 7.18197378e-01 1.77953347e+03 +1.12800000e-04 5.33281976e-02 1.94273111e-01 3.26003503e-02 2.11827214e-05 9.56966704e-05 1.48408348e-03 7.18197378e-01 1.77953347e+03 +1.12900000e-04 5.33051276e-02 1.94220172e-01 3.26725235e-02 2.13161097e-05 9.61330547e-05 1.48735016e-03 7.18197378e-01 1.78118834e+03 +1.13000000e-04 5.32819866e-02 1.94167068e-01 3.27449177e-02 2.14508377e-05 9.65718393e-05 1.49062679e-03 7.18197378e-01 1.78118834e+03 +1.13100000e-04 5.32587740e-02 1.94113801e-01 3.28175341e-02 2.15869222e-05 9.70130416e-05 1.49391342e-03 7.18197378e-01 1.78285683e+03 +1.13200000e-04 5.32354896e-02 1.94060368e-01 3.28903737e-02 2.17243804e-05 9.74566792e-05 1.49721011e-03 7.18197378e-01 1.78285683e+03 +1.13300000e-04 5.32121330e-02 1.94006769e-01 3.29634377e-02 2.18632296e-05 9.79027696e-05 1.50051690e-03 7.18197378e-01 1.78285683e+03 +1.13400000e-04 5.31887037e-02 1.93953002e-01 3.30367274e-02 2.20034873e-05 9.83513309e-05 1.50383386e-03 7.18197378e-01 1.78453915e+03 +1.13500000e-04 5.31652015e-02 1.93899068e-01 3.31102440e-02 2.21451716e-05 9.88023810e-05 1.50716103e-03 7.18197378e-01 1.78453915e+03 +1.13600000e-04 5.31416258e-02 1.93844965e-01 3.31839885e-02 2.22883005e-05 9.92559381e-05 1.51049846e-03 7.18197378e-01 1.78453915e+03 +1.13700000e-04 5.31179763e-02 1.93790692e-01 3.32579623e-02 2.24328925e-05 9.97120206e-05 1.51384622e-03 7.18197378e-01 1.78623549e+03 +1.13800000e-04 5.30942527e-02 1.93736249e-01 3.33321666e-02 2.25789663e-05 1.00170647e-04 1.51720436e-03 7.18197378e-01 1.78623549e+03 +1.13900000e-04 5.30704544e-02 1.93681634e-01 3.34066025e-02 2.27265408e-05 1.00631836e-04 1.52057293e-03 7.18197378e-01 1.78794604e+03 +1.14000000e-04 5.30465812e-02 1.93626846e-01 3.34812713e-02 2.28756355e-05 1.01095607e-04 1.52395199e-03 7.18197378e-01 1.78794604e+03 +1.14100000e-04 5.30226325e-02 1.93571885e-01 3.35561744e-02 2.30262698e-05 1.01561979e-04 1.52734160e-03 7.18197378e-01 1.78794604e+03 +1.14200000e-04 5.29986080e-02 1.93516750e-01 3.36313128e-02 2.31784635e-05 1.02030970e-04 1.53074181e-03 7.18197378e-01 1.78967103e+03 +1.14300000e-04 5.29745073e-02 1.93461439e-01 3.37066879e-02 2.33322370e-05 1.02502601e-04 1.53415268e-03 7.18197378e-01 1.78967103e+03 +1.14400000e-04 5.29503300e-02 1.93405952e-01 3.37823010e-02 2.34876106e-05 1.02976891e-04 1.53757426e-03 7.18197378e-01 1.78967103e+03 +1.14500000e-04 5.29260756e-02 1.93350288e-01 3.38581533e-02 2.36446051e-05 1.03453859e-04 1.54100662e-03 7.18197378e-01 1.79141065e+03 +1.14600000e-04 5.29017437e-02 1.93294446e-01 3.39342462e-02 2.38032417e-05 1.03933527e-04 1.54444982e-03 7.18197378e-01 1.79141065e+03 +1.14700000e-04 5.28773339e-02 1.93238424e-01 3.40105808e-02 2.39635417e-05 1.04415913e-04 1.54790391e-03 7.18197378e-01 1.79141065e+03 +1.14800000e-04 5.28528458e-02 1.93182222e-01 3.40871587e-02 2.41255271e-05 1.04901039e-04 1.55136895e-03 7.18197378e-01 1.79316512e+03 +1.14900000e-04 5.28282789e-02 1.93125839e-01 3.41639809e-02 2.42892198e-05 1.05388925e-04 1.55484500e-03 7.18197378e-01 1.79316512e+03 +1.15000000e-04 5.28036328e-02 1.93069274e-01 3.42410490e-02 2.44546422e-05 1.05879592e-04 1.55833212e-03 7.18197378e-01 1.79493466e+03 +1.15100000e-04 5.27789070e-02 1.93012526e-01 3.43183642e-02 2.46218173e-05 1.06373060e-04 1.56183038e-03 7.18197378e-01 1.79493466e+03 +1.15200000e-04 5.27541012e-02 1.92955593e-01 3.43959279e-02 2.47907682e-05 1.06869352e-04 1.56533982e-03 7.18197378e-01 1.79493466e+03 +1.15300000e-04 5.27292148e-02 1.92898475e-01 3.44737415e-02 2.49615183e-05 1.07368488e-04 1.56886053e-03 7.18197378e-01 1.79671950e+03 +1.15400000e-04 5.27042475e-02 1.92841171e-01 3.45518062e-02 2.51340916e-05 1.07870490e-04 1.57239255e-03 7.18197378e-01 1.79671950e+03 +1.15500000e-04 5.26791987e-02 1.92783680e-01 3.46301236e-02 2.53085121e-05 1.08375380e-04 1.57593596e-03 7.18197378e-01 1.79671950e+03 +1.15600000e-04 5.26540680e-02 1.92726000e-01 3.47086949e-02 2.54848047e-05 1.08883180e-04 1.57949080e-03 7.18197378e-01 1.79851986e+03 +1.15700000e-04 5.26288550e-02 1.92668131e-01 3.47875217e-02 2.56629944e-05 1.09393911e-04 1.58305715e-03 7.18197378e-01 1.79851986e+03 +1.15800000e-04 5.26035591e-02 1.92610072e-01 3.48666052e-02 2.58431065e-05 1.09907598e-04 1.58663508e-03 7.18197378e-01 1.80033598e+03 +1.15900000e-04 5.25781800e-02 1.92551821e-01 3.49459470e-02 2.60251669e-05 1.10424262e-04 1.59022464e-03 7.18197378e-01 1.80033598e+03 +1.16000000e-04 5.25527171e-02 1.92493378e-01 3.50255485e-02 2.62092018e-05 1.10943925e-04 1.59382590e-03 7.18197378e-01 1.80033598e+03 +1.16100000e-04 5.25271700e-02 1.92434740e-01 3.51054110e-02 2.63952378e-05 1.11466613e-04 1.59743892e-03 7.18197378e-01 1.80216809e+03 +1.16200000e-04 5.25015382e-02 1.92375908e-01 3.51855361e-02 2.65833020e-05 1.11992347e-04 1.60106378e-03 7.18197378e-01 1.80216809e+03 +1.16300000e-04 5.24758212e-02 1.92316880e-01 3.52659253e-02 2.67734218e-05 1.12521151e-04 1.60470054e-03 7.18197378e-01 1.80216809e+03 +1.16400000e-04 5.24500186e-02 1.92257656e-01 3.53465800e-02 2.69656253e-05 1.13053049e-04 1.60834926e-03 7.18197378e-01 1.80401643e+03 +1.16500000e-04 5.24241298e-02 1.92198233e-01 3.54275017e-02 2.71599408e-05 1.13588066e-04 1.61201002e-03 7.18197378e-01 1.80401643e+03 +1.16600000e-04 5.23981543e-02 1.92138610e-01 3.55086919e-02 2.73563971e-05 1.14126225e-04 1.61568287e-03 7.18197378e-01 1.80588126e+03 +1.16700000e-04 5.23720917e-02 1.92078788e-01 3.55901521e-02 2.75550236e-05 1.14667552e-04 1.61936790e-03 7.18197378e-01 1.80588126e+03 +1.16800000e-04 5.23459414e-02 1.92018764e-01 3.56718839e-02 2.77558500e-05 1.15212070e-04 1.62306517e-03 7.18197378e-01 1.80588126e+03 +1.16900000e-04 5.23197030e-02 1.91958537e-01 3.57538888e-02 2.79589065e-05 1.15759805e-04 1.62677475e-03 7.18197378e-01 1.80776282e+03 +1.17000000e-04 5.22933759e-02 1.91898106e-01 3.58361683e-02 2.81642240e-05 1.16310783e-04 1.63049670e-03 7.18197378e-01 1.80776282e+03 +1.17100000e-04 5.22669597e-02 1.91837471e-01 3.59187240e-02 2.83718336e-05 1.16865028e-04 1.63423111e-03 7.18197378e-01 1.80776282e+03 +1.17200000e-04 5.22404537e-02 1.91776629e-01 3.60015575e-02 2.85817672e-05 1.17422567e-04 1.63797804e-03 7.18197378e-01 1.80966137e+03 +1.17300000e-04 5.22138575e-02 1.91715579e-01 3.60846703e-02 2.87940570e-05 1.17983426e-04 1.64173756e-03 7.18197378e-01 1.80966137e+03 +1.17400000e-04 5.21871706e-02 1.91654321e-01 3.61680641e-02 2.90087357e-05 1.18547631e-04 1.64550975e-03 7.18197378e-01 1.81157719e+03 +1.17500000e-04 5.21603924e-02 1.91592854e-01 3.62517405e-02 2.92258368e-05 1.19115209e-04 1.64929468e-03 7.18197378e-01 1.81157719e+03 +1.17600000e-04 5.21335224e-02 1.91531175e-01 3.63357010e-02 2.94453942e-05 1.19686186e-04 1.65309243e-03 7.18197378e-01 1.81157719e+03 +1.17700000e-04 5.21065601e-02 1.91469284e-01 3.64199474e-02 2.96674423e-05 1.20260591e-04 1.65690306e-03 7.18197378e-01 1.81351053e+03 +1.17800000e-04 5.20795048e-02 1.91407179e-01 3.65044812e-02 2.98920161e-05 1.20838449e-04 1.66072666e-03 7.18197378e-01 1.81351053e+03 +1.17900000e-04 5.20523562e-02 1.91344860e-01 3.65893042e-02 3.01191509e-05 1.21419790e-04 1.66456329e-03 7.18197378e-01 1.81351053e+03 +1.18000000e-04 5.20251135e-02 1.91282324e-01 3.66744180e-02 3.03488833e-05 1.22004640e-04 1.66841304e-03 7.18197378e-01 1.81484535e+03 +1.18100000e-04 5.19977763e-02 1.91219571e-01 3.67598243e-02 3.05812500e-05 1.22593029e-04 1.67227598e-03 7.18197378e-01 1.81484535e+03 +1.18200000e-04 5.19703440e-02 1.91156600e-01 3.68455248e-02 3.08162884e-05 1.23184985e-04 1.67615219e-03 7.18197378e-01 1.81618861e+03 +1.18300000e-04 5.19428160e-02 1.91093409e-01 3.69315213e-02 3.10540364e-05 1.23780537e-04 1.68004175e-03 7.18197378e-01 1.81754041e+03 +1.18400000e-04 5.19151918e-02 1.91029996e-01 3.70178153e-02 3.12945329e-05 1.24379714e-04 1.68394473e-03 7.18197378e-01 1.81754041e+03 +1.18500000e-04 5.18874707e-02 1.90966361e-01 3.71044088e-02 3.15378172e-05 1.24982545e-04 1.68786122e-03 7.18197378e-01 1.81890085e+03 +1.18600000e-04 5.18596523e-02 1.90902502e-01 3.71913034e-02 3.17839289e-05 1.25589061e-04 1.69179129e-03 7.18197378e-01 1.81890085e+03 +1.18700000e-04 5.18317358e-02 1.90838418e-01 3.72785009e-02 3.20329087e-05 1.26199291e-04 1.69573503e-03 7.18197378e-01 1.82027001e+03 +1.18800000e-04 5.18037208e-02 1.90774108e-01 3.73660031e-02 3.22847984e-05 1.26813266e-04 1.69969252e-03 7.18197378e-01 1.82027001e+03 +1.18900000e-04 5.17756067e-02 1.90709569e-01 3.74538119e-02 3.25396397e-05 1.27431017e-04 1.70366383e-03 7.18197378e-01 1.82164798e+03 +1.19000000e-04 5.17473927e-02 1.90644801e-01 3.75419289e-02 3.27974754e-05 1.28052575e-04 1.70764906e-03 7.18197378e-01 1.82164798e+03 +1.19100000e-04 5.17190784e-02 1.90579803e-01 3.76303561e-02 3.30583490e-05 1.28677970e-04 1.71164829e-03 7.18197378e-01 1.82303488e+03 +1.19200000e-04 5.16906631e-02 1.90514573e-01 3.77190953e-02 3.33223049e-05 1.29307236e-04 1.71566159e-03 7.18197378e-01 1.82303488e+03 +1.19300000e-04 5.16621462e-02 1.90449109e-01 3.78081483e-02 3.35893878e-05 1.29940404e-04 1.71968906e-03 7.18197378e-01 1.82443079e+03 +1.19400000e-04 5.16335271e-02 1.90383410e-01 3.78975171e-02 3.38596432e-05 1.30577507e-04 1.72373077e-03 7.18197378e-01 1.82540229e+03 +1.19500000e-04 5.16048052e-02 1.90317475e-01 3.79872034e-02 3.41331182e-05 1.31218576e-04 1.72778683e-03 7.18197378e-01 1.82540229e+03 +1.19600000e-04 5.15759798e-02 1.90251302e-01 3.80772093e-02 3.44098601e-05 1.31863647e-04 1.73185730e-03 7.18197378e-01 1.82637819e+03 +1.19700000e-04 5.15470503e-02 1.90184890e-01 3.81675366e-02 3.46899168e-05 1.32512751e-04 1.73594229e-03 7.18197378e-01 1.82735853e+03 +1.19800000e-04 5.15180160e-02 1.90118238e-01 3.82581872e-02 3.49733372e-05 1.33165922e-04 1.74004188e-03 7.18197378e-01 1.82834333e+03 +1.19900000e-04 5.14888763e-02 1.90051343e-01 3.83491632e-02 3.52601714e-05 1.33823196e-04 1.74415615e-03 7.18197378e-01 1.82834333e+03 +1.20000000e-04 5.14596306e-02 1.89984205e-01 3.84404665e-02 3.55504701e-05 1.34484607e-04 1.74828520e-03 7.18197378e-01 1.82933264e+03 +1.20100000e-04 5.14302782e-02 1.89916821e-01 3.85320990e-02 3.58442848e-05 1.35150188e-04 1.75242912e-03 7.18197378e-01 1.83032649e+03 +1.20200000e-04 5.14008184e-02 1.89849191e-01 3.86240628e-02 3.61416680e-05 1.35819977e-04 1.75658800e-03 7.18197378e-01 1.83195783e+03 +1.20300000e-04 5.13712506e-02 1.89781313e-01 3.87163599e-02 3.64426732e-05 1.36494008e-04 1.76076193e-03 7.18197378e-01 1.83195783e+03 +1.20400000e-04 5.13415741e-02 1.89713185e-01 3.88089923e-02 3.67473547e-05 1.37172318e-04 1.76495100e-03 7.18197378e-01 1.83360151e+03 +1.20500000e-04 5.13117882e-02 1.89644806e-01 3.89019620e-02 3.70557678e-05 1.37854943e-04 1.76915532e-03 7.18197378e-01 1.83360151e+03 +1.20600000e-04 5.12818922e-02 1.89576174e-01 3.89952712e-02 3.73679688e-05 1.38541920e-04 1.77337497e-03 7.18197378e-01 1.83525768e+03 +1.20700000e-04 5.12518854e-02 1.89507288e-01 3.90889219e-02 3.76840150e-05 1.39233287e-04 1.77761004e-03 7.18197378e-01 1.83525768e+03 +1.20800000e-04 5.12217671e-02 1.89438145e-01 3.91829162e-02 3.80039648e-05 1.39929080e-04 1.78186064e-03 7.18197378e-01 1.83692650e+03 +1.20900000e-04 5.11915367e-02 1.89368745e-01 3.92772563e-02 3.83278775e-05 1.40629339e-04 1.78612687e-03 7.18197378e-01 1.83692650e+03 +1.21000000e-04 5.11611934e-02 1.89299086e-01 3.93719442e-02 3.86558134e-05 1.41334102e-04 1.79040881e-03 7.18197378e-01 1.83860813e+03 +1.21100000e-04 5.11307365e-02 1.89229166e-01 3.94669821e-02 3.89878342e-05 1.42043408e-04 1.79470657e-03 7.18197378e-01 1.83860813e+03 +1.21200000e-04 5.11001652e-02 1.89158983e-01 3.95623722e-02 3.93240022e-05 1.42757295e-04 1.79902025e-03 7.18197378e-01 1.84030276e+03 +1.21300000e-04 5.10694789e-02 1.89088536e-01 3.96581167e-02 3.96643815e-05 1.43475805e-04 1.80334995e-03 7.18197378e-01 1.84030276e+03 +1.21400000e-04 5.10386768e-02 1.89017824e-01 3.97542178e-02 4.00090366e-05 1.44198977e-04 1.80769577e-03 7.18197378e-01 1.84030276e+03 +1.21500000e-04 5.10077582e-02 1.88946844e-01 3.98506777e-02 4.03580338e-05 1.44926853e-04 1.81205781e-03 7.18197378e-01 1.84201053e+03 +1.21600000e-04 5.09767222e-02 1.88875594e-01 3.99474987e-02 4.07114402e-05 1.45659473e-04 1.81643617e-03 7.18197378e-01 1.84201053e+03 +1.21700000e-04 5.09455683e-02 1.88804074e-01 4.00446830e-02 4.10693243e-05 1.46396878e-04 1.82083096e-03 7.18197378e-01 1.84373164e+03 +1.21800000e-04 5.09142955e-02 1.88732281e-01 4.01422329e-02 4.14317558e-05 1.47139113e-04 1.82524229e-03 7.18197378e-01 1.84373164e+03 +1.21900000e-04 5.08829032e-02 1.88660213e-01 4.02401507e-02 4.17988057e-05 1.47886217e-04 1.82967026e-03 7.18197378e-01 1.84546625e+03 +1.22000000e-04 5.08513905e-02 1.88587869e-01 4.03384387e-02 4.21705462e-05 1.48638236e-04 1.83411497e-03 7.18197378e-01 1.84546625e+03 +1.22100000e-04 5.08197566e-02 1.88515247e-01 4.04370994e-02 4.25470510e-05 1.49395213e-04 1.83857654e-03 7.18197378e-01 1.84721455e+03 +1.22200000e-04 5.07880009e-02 1.88442346e-01 4.05361349e-02 4.29283951e-05 1.50157191e-04 1.84305507e-03 7.18197378e-01 1.84721455e+03 +1.22300000e-04 5.07561224e-02 1.88369162e-01 4.06355478e-02 4.33146546e-05 1.50924215e-04 1.84755067e-03 7.18197378e-01 1.84897671e+03 +1.22400000e-04 5.07241204e-02 1.88295696e-01 4.07353404e-02 4.37059075e-05 1.51696331e-04 1.85206345e-03 7.18197378e-01 1.84897671e+03 +1.22500000e-04 5.06919941e-02 1.88221944e-01 4.08355152e-02 4.41022329e-05 1.52473583e-04 1.85659353e-03 7.18197378e-01 1.85075293e+03 +1.22600000e-04 5.06597426e-02 1.88147904e-01 4.09360745e-02 4.45037115e-05 1.53256019e-04 1.86114102e-03 7.18197378e-01 1.85075293e+03 +1.22700000e-04 5.06273651e-02 1.88073576e-01 4.10370209e-02 4.49104254e-05 1.54043685e-04 1.86570603e-03 7.18197378e-01 1.85254339e+03 +1.22800000e-04 5.05948608e-02 1.87998957e-01 4.11383568e-02 4.53224584e-05 1.54836628e-04 1.87028867e-03 7.18197378e-01 1.85254339e+03 +1.22900000e-04 5.05622288e-02 1.87924045e-01 4.12400848e-02 4.57398957e-05 1.55634895e-04 1.87488906e-03 7.18197378e-01 1.85434828e+03 +1.23000000e-04 5.05294683e-02 1.87848838e-01 4.13422074e-02 4.61628242e-05 1.56438536e-04 1.87950732e-03 7.18197378e-01 1.85434828e+03 +1.23100000e-04 5.04965785e-02 1.87773334e-01 4.14447270e-02 4.65913323e-05 1.57247599e-04 1.88414357e-03 7.18197378e-01 1.85616782e+03 +1.23200000e-04 5.04635584e-02 1.87697532e-01 4.15476464e-02 4.70255104e-05 1.58062133e-04 1.88879792e-03 7.18197378e-01 1.85616782e+03 +1.23300000e-04 5.04304073e-02 1.87621429e-01 4.16509681e-02 4.74654502e-05 1.58882189e-04 1.89347050e-03 7.18197378e-01 1.85800218e+03 +1.23400000e-04 5.03971241e-02 1.87545023e-01 4.17546947e-02 4.79112454e-05 1.59707818e-04 1.89816142e-03 7.18197378e-01 1.85800218e+03 +1.23500000e-04 5.03637081e-02 1.87468312e-01 4.18588288e-02 4.83629914e-05 1.60539069e-04 1.90287080e-03 7.18197378e-01 1.85985159e+03 +1.23600000e-04 5.03301583e-02 1.87391295e-01 4.19633732e-02 4.88207855e-05 1.61375996e-04 1.90759878e-03 7.18197378e-01 1.85985159e+03 +1.23700000e-04 5.02964738e-02 1.87313969e-01 4.20683304e-02 4.92847266e-05 1.62218651e-04 1.91234547e-03 7.18197378e-01 1.86171624e+03 +1.23800000e-04 5.02626537e-02 1.87236332e-01 4.21737033e-02 4.97549160e-05 1.63067087e-04 1.91711100e-03 7.18197378e-01 1.86171624e+03 +1.23900000e-04 5.02286971e-02 1.87158382e-01 4.22794945e-02 5.02314563e-05 1.63921357e-04 1.92189550e-03 7.18197378e-01 1.86359635e+03 +1.24000000e-04 5.01946030e-02 1.87080117e-01 4.23857068e-02 5.07144527e-05 1.64781516e-04 1.92669909e-03 7.18197378e-01 1.86359635e+03 +1.24100000e-04 5.01603706e-02 1.87001535e-01 4.24923431e-02 5.12040119e-05 1.65647619e-04 1.93152191e-03 7.18197378e-01 1.86359635e+03 +1.24200000e-04 5.01259988e-02 1.86922633e-01 4.25994059e-02 5.17002432e-05 1.66519721e-04 1.93636408e-03 7.18197378e-01 1.86549214e+03 +1.24300000e-04 5.00914868e-02 1.86843410e-01 4.27068984e-02 5.22032574e-05 1.67397879e-04 1.94122573e-03 7.18197378e-01 1.86549214e+03 +1.24400000e-04 5.00568334e-02 1.86763863e-01 4.28148231e-02 5.27131680e-05 1.68282150e-04 1.94610700e-03 7.18197378e-01 1.86740382e+03 +1.24500000e-04 5.00220379e-02 1.86683990e-01 4.29231832e-02 5.32300905e-05 1.69172591e-04 1.95100803e-03 7.18197378e-01 1.86740382e+03 +1.24600000e-04 4.99870991e-02 1.86603789e-01 4.30319814e-02 5.37541426e-05 1.70069262e-04 1.95592893e-03 7.18197378e-01 1.86945238e+03 +1.24700000e-04 4.99520161e-02 1.86523258e-01 4.31412207e-02 5.42854445e-05 1.70972220e-04 1.96086987e-03 7.18197378e-01 1.86945238e+03 +1.24800000e-04 4.99167879e-02 1.86442394e-01 4.32509041e-02 5.48241187e-05 1.71881526e-04 1.96583096e-03 7.18197378e-01 1.87151941e+03 +1.24900000e-04 4.98814134e-02 1.86361194e-01 4.33610345e-02 5.53702899e-05 1.72797240e-04 1.97081235e-03 7.18197378e-01 1.87151941e+03 +1.25000000e-04 4.98458917e-02 1.86279658e-01 4.34716149e-02 5.59240855e-05 1.73719424e-04 1.97581418e-03 7.18197378e-01 1.87360518e+03 +1.25100000e-04 4.98102217e-02 1.86197782e-01 4.35826485e-02 5.64856355e-05 1.74648139e-04 1.98083659e-03 7.18197378e-01 1.87360518e+03 +1.25200000e-04 4.97744023e-02 1.86115563e-01 4.36941381e-02 5.70550722e-05 1.75583449e-04 1.98587973e-03 7.18197378e-01 1.87570998e+03 +1.25300000e-04 4.97384326e-02 1.86033001e-01 4.38060871e-02 5.76325307e-05 1.76525417e-04 1.99094373e-03 7.18197378e-01 1.87570998e+03 +1.25400000e-04 4.97023114e-02 1.85950091e-01 4.39184984e-02 5.82181488e-05 1.77474107e-04 1.99602875e-03 7.18197378e-01 1.87783411e+03 +1.25500000e-04 4.96660377e-02 1.85866833e-01 4.40313752e-02 5.88120671e-05 1.78429585e-04 2.00113493e-03 7.18197378e-01 1.87783411e+03 +1.25600000e-04 4.96296104e-02 1.85783222e-01 4.41447207e-02 5.94144290e-05 1.79391916e-04 2.00626241e-03 7.18197378e-01 1.87783411e+03 +1.25700000e-04 4.95930284e-02 1.85699258e-01 4.42585380e-02 6.00253809e-05 1.80361168e-04 2.01141136e-03 7.18197378e-01 1.87997785e+03 +1.25800000e-04 4.95562905e-02 1.85614937e-01 4.43728305e-02 6.06450718e-05 1.81337407e-04 2.01658191e-03 7.18197378e-01 1.87997785e+03 +1.25900000e-04 4.95193958e-02 1.85530256e-01 4.44876014e-02 6.12736541e-05 1.82320702e-04 2.02177423e-03 7.18197378e-01 1.88214152e+03 +1.26000000e-04 4.94823430e-02 1.85445214e-01 4.46028540e-02 6.19112833e-05 1.83311123e-04 2.02698847e-03 7.18197378e-01 1.88214152e+03 +1.26100000e-04 4.94451310e-02 1.85359808e-01 4.47185915e-02 6.25581179e-05 1.84308740e-04 2.03222478e-03 7.18197378e-01 1.88432542e+03 +1.26200000e-04 4.94077586e-02 1.85274035e-01 4.48348174e-02 6.32143193e-05 1.85313624e-04 2.03748331e-03 7.18197378e-01 1.88432542e+03 +1.26300000e-04 4.93702248e-02 1.85187892e-01 4.49515351e-02 6.38800525e-05 1.86325847e-04 2.04276424e-03 7.18197378e-01 1.88587412e+03 +1.26400000e-04 4.93325283e-02 1.85101377e-01 4.50687478e-02 6.45554867e-05 1.87345481e-04 2.04806772e-03 7.18197378e-01 1.88587412e+03 +1.26500000e-04 4.92946680e-02 1.85014488e-01 4.51864592e-02 6.52407941e-05 1.88372601e-04 2.05339390e-03 7.18197378e-01 1.88697192e+03 +1.26600000e-04 4.92566426e-02 1.84927221e-01 4.53046726e-02 6.59361490e-05 1.89407281e-04 2.05874296e-03 7.18197378e-01 1.88807487e+03 +1.26700000e-04 4.92184509e-02 1.84839573e-01 4.54233916e-02 6.66417311e-05 1.90449597e-04 2.06411506e-03 7.18197378e-01 1.88918301e+03 +1.26800000e-04 4.91800918e-02 1.84751543e-01 4.55426196e-02 6.73577235e-05 1.91499626e-04 2.06951037e-03 7.18197378e-01 1.89029638e+03 +1.26900000e-04 4.91415640e-02 1.84663127e-01 4.56623604e-02 6.80843127e-05 1.92557445e-04 2.07492905e-03 7.18197378e-01 1.89141502e+03 +1.27000000e-04 4.91028662e-02 1.84574322e-01 4.57826174e-02 6.88216898e-05 1.93623134e-04 2.08037127e-03 7.18197378e-01 1.89253897e+03 +1.27100000e-04 4.90639972e-02 1.84485127e-01 4.59033943e-02 6.95700482e-05 1.94696771e-04 2.08583720e-03 7.18197378e-01 1.89336209e+03 +1.27200000e-04 4.90249557e-02 1.84395537e-01 4.60246948e-02 7.03295876e-05 1.95778438e-04 2.09132703e-03 7.18197378e-01 1.89396993e+03 +1.27300000e-04 4.89857405e-02 1.84305549e-01 4.61465226e-02 7.11005106e-05 1.96868215e-04 2.09684092e-03 7.18197378e-01 1.89519028e+03 +1.27400000e-04 4.89463502e-02 1.84215162e-01 4.62688813e-02 7.18830240e-05 1.97966187e-04 2.10237905e-03 7.18197378e-01 1.89580281e+03 +1.27500000e-04 4.89067836e-02 1.84124372e-01 4.63917749e-02 7.26773401e-05 1.99072437e-04 2.10794160e-03 7.18197378e-01 1.89703262e+03 +1.27600000e-04 4.88670393e-02 1.84033176e-01 4.65152070e-02 7.34836739e-05 2.00187050e-04 2.11352875e-03 7.18197378e-01 1.89794573e+03 +1.27700000e-04 4.88271160e-02 1.83941572e-01 4.66391815e-02 7.43022471e-05 2.01310112e-04 2.11914067e-03 7.18197378e-01 1.89932196e+03 +1.27800000e-04 4.87870124e-02 1.83849555e-01 4.67637024e-02 7.51332840e-05 2.02441710e-04 2.12477757e-03 7.18197378e-01 1.90024386e+03 +1.27900000e-04 4.87467270e-02 1.83757123e-01 4.68887734e-02 7.59770157e-05 2.03581933e-04 2.13043961e-03 7.18197378e-01 1.90116932e+03 +1.28000000e-04 4.87062585e-02 1.83664273e-01 4.70143986e-02 7.68336766e-05 2.04730871e-04 2.13612699e-03 7.18197378e-01 1.90209836e+03 +1.28100000e-04 4.86656056e-02 1.83571003e-01 4.71405819e-02 7.77035075e-05 2.05888613e-04 2.14183990e-03 7.18197378e-01 1.90346387e+03 +1.28200000e-04 4.86247667e-02 1.83477307e-01 4.72673274e-02 7.85867533e-05 2.07055253e-04 2.14757853e-03 7.18197378e-01 1.90449310e+03 +1.28300000e-04 4.85837406e-02 1.83383185e-01 4.73946391e-02 7.94836648e-05 2.08230883e-04 2.15334308e-03 7.18197378e-01 1.90552674e+03 +1.28400000e-04 4.85425257e-02 1.83288632e-01 4.75225210e-02 8.03944984e-05 2.09415598e-04 2.15913373e-03 7.18197378e-01 1.90656481e+03 +1.28500000e-04 4.85011206e-02 1.83193644e-01 4.76509774e-02 8.13195155e-05 2.10609494e-04 2.16495068e-03 7.18197378e-01 1.90767775e+03 +1.28600000e-04 4.84595239e-02 1.83098220e-01 4.77800124e-02 8.22589837e-05 2.11812667e-04 2.17079414e-03 7.18197378e-01 1.90879581e+03 +1.28700000e-04 4.84177341e-02 1.83002355e-01 4.79096302e-02 8.32131764e-05 2.13025216e-04 2.17666431e-03 7.18197378e-01 1.91033214e+03 +1.28800000e-04 4.83757496e-02 1.82906047e-01 4.80398350e-02 8.41823727e-05 2.14247240e-04 2.18256138e-03 7.18197378e-01 1.91187823e+03 +1.28900000e-04 4.83335690e-02 1.82809291e-01 4.81706312e-02 8.51668581e-05 2.15478841e-04 2.18848557e-03 7.18197378e-01 1.91343418e+03 +1.29000000e-04 4.82911908e-02 1.82712084e-01 4.83020230e-02 8.61669245e-05 2.16720121e-04 2.19443708e-03 7.18197378e-01 1.91343418e+03 +1.29100000e-04 4.82486134e-02 1.82614424e-01 4.84340149e-02 8.71828700e-05 2.17971184e-04 2.20041613e-03 7.18197378e-01 1.91578751e+03 +1.29200000e-04 4.82058352e-02 1.82516306e-01 4.85666111e-02 8.82149996e-05 2.19232134e-04 2.20642291e-03 7.18197378e-01 1.91578751e+03 +1.29300000e-04 4.81628547e-02 1.82417727e-01 4.86998162e-02 8.92636246e-05 2.20503079e-04 2.21245766e-03 7.18197378e-01 1.91737677e+03 +1.29400000e-04 4.81196703e-02 1.82318683e-01 4.88336347e-02 9.03290641e-05 2.21784127e-04 2.21852058e-03 7.18197378e-01 1.91897637e+03 +1.29500000e-04 4.80762804e-02 1.82219172e-01 4.89680711e-02 9.14116436e-05 2.23075387e-04 2.22461189e-03 7.18197378e-01 1.91897637e+03 +1.29600000e-04 4.80326833e-02 1.82119188e-01 4.91031299e-02 9.25116963e-05 2.24376971e-04 2.23073182e-03 7.18197378e-01 1.92058640e+03 +1.29700000e-04 4.79888775e-02 1.82018730e-01 4.92388158e-02 9.36295628e-05 2.25688990e-04 2.23688059e-03 7.18197378e-01 1.92220700e+03 +1.29800000e-04 4.79448612e-02 1.81917792e-01 4.93751334e-02 9.47655912e-05 2.27011560e-04 2.24305841e-03 7.18197378e-01 1.92220700e+03 +1.29900000e-04 4.79006328e-02 1.81816372e-01 4.95120874e-02 9.59201379e-05 2.28344795e-04 2.24926553e-03 7.18197378e-01 1.92383826e+03 +1.30000000e-04 4.78561906e-02 1.81714464e-01 4.96496825e-02 9.70935671e-05 2.29688815e-04 2.25550217e-03 7.18197378e-01 1.92548030e+03 +1.30100000e-04 4.78115329e-02 1.81612067e-01 4.97879236e-02 9.82862515e-05 2.31043736e-04 2.26176856e-03 7.18197378e-01 1.92713325e+03 +1.30200000e-04 4.77666580e-02 1.81509175e-01 4.99268155e-02 9.94985721e-05 2.32409682e-04 2.26806494e-03 7.18197378e-01 1.92713325e+03 +1.30300000e-04 4.77215640e-02 1.81405786e-01 5.00663630e-02 1.00730919e-04 2.33786773e-04 2.27439155e-03 7.18197378e-01 1.92879721e+03 +1.30400000e-04 4.76762493e-02 1.81301894e-01 5.02065711e-02 1.01983690e-04 2.35175134e-04 2.28074862e-03 7.18197378e-01 1.93047230e+03 +1.30500000e-04 4.76307120e-02 1.81197497e-01 5.03474447e-02 1.03257295e-04 2.36574890e-04 2.28713640e-03 7.18197378e-01 1.93047230e+03 +1.30600000e-04 4.75849504e-02 1.81092589e-01 5.04889889e-02 1.04552150e-04 2.37986171e-04 2.29355514e-03 7.18197378e-01 1.93215866e+03 +1.30700000e-04 4.75389626e-02 1.80987168e-01 5.06312086e-02 1.05868682e-04 2.39409105e-04 2.30000507e-03 7.18197378e-01 1.93385639e+03 +1.30800000e-04 4.74927467e-02 1.80881229e-01 5.07741091e-02 1.07207329e-04 2.40843823e-04 2.30648646e-03 7.18197378e-01 1.93556563e+03 +1.30900000e-04 4.74463010e-02 1.80774767e-01 5.09176954e-02 1.08568538e-04 2.42290460e-04 2.31299956e-03 7.18197378e-01 1.93556563e+03 +1.31000000e-04 4.73996235e-02 1.80667779e-01 5.10619727e-02 1.09952767e-04 2.43749150e-04 2.31954461e-03 7.18197378e-01 1.93728650e+03 +1.31100000e-04 4.73527123e-02 1.80560261e-01 5.12069463e-02 1.11360483e-04 2.45220030e-04 2.32612189e-03 7.18197378e-01 1.93901913e+03 +1.31200000e-04 4.73055655e-02 1.80452208e-01 5.13526215e-02 1.12792167e-04 2.46703240e-04 2.33273165e-03 7.18197378e-01 1.94076365e+03 +1.31300000e-04 4.72581811e-02 1.80343616e-01 5.14990037e-02 1.14248310e-04 2.48198920e-04 2.33937415e-03 7.18197378e-01 1.94076365e+03 +1.31400000e-04 4.72105572e-02 1.80234480e-01 5.16460981e-02 1.15729413e-04 2.49707214e-04 2.34604967e-03 7.18197378e-01 1.94252019e+03 +1.31500000e-04 4.71626918e-02 1.80124797e-01 5.17939103e-02 1.17235991e-04 2.51228268e-04 2.35275847e-03 7.18197378e-01 1.94428888e+03 +1.31600000e-04 4.71145828e-02 1.80014562e-01 5.19424458e-02 1.18768571e-04 2.52762228e-04 2.35950082e-03 7.18197378e-01 1.94428888e+03 +1.31700000e-04 4.70662283e-02 1.79903770e-01 5.20917100e-02 1.20327692e-04 2.54309245e-04 2.36627701e-03 7.18197378e-01 1.94560367e+03 +1.31800000e-04 4.70176262e-02 1.79792417e-01 5.22417087e-02 1.21913906e-04 2.55869470e-04 2.37308731e-03 7.18197378e-01 1.94692521e+03 +1.31900000e-04 4.69687743e-02 1.79680498e-01 5.23924473e-02 1.23527778e-04 2.57443057e-04 2.37993199e-03 7.18197378e-01 1.94825358e+03 +1.32000000e-04 4.69196706e-02 1.79568008e-01 5.25439317e-02 1.25169887e-04 2.59030162e-04 2.38681136e-03 7.18197378e-01 1.94958883e+03 +1.32100000e-04 4.68703130e-02 1.79454944e-01 5.26961675e-02 1.26840826e-04 2.60630944e-04 2.39372569e-03 7.18197378e-01 1.95093101e+03 +1.32200000e-04 4.68206993e-02 1.79341300e-01 5.28491606e-02 1.28541203e-04 2.62245565e-04 2.40067528e-03 7.18197378e-01 1.95228019e+03 +1.32300000e-04 4.67708273e-02 1.79227072e-01 5.30029168e-02 1.30271639e-04 2.63874187e-04 2.40766042e-03 7.18197378e-01 1.95363641e+03 +1.32400000e-04 4.67206948e-02 1.79112254e-01 5.31574420e-02 1.32032772e-04 2.65516977e-04 2.41468140e-03 7.18197378e-01 1.95499974e+03 +1.32500000e-04 4.66702996e-02 1.78996842e-01 5.33127422e-02 1.33825253e-04 2.67174102e-04 2.42173854e-03 7.18197378e-01 1.95600755e+03 +1.32600000e-04 4.66196395e-02 1.78880832e-01 5.34688233e-02 1.35649754e-04 2.68845734e-04 2.42883213e-03 7.18197378e-01 1.95803491e+03 +1.32700000e-04 4.65687122e-02 1.78764217e-01 5.36256915e-02 1.37506957e-04 2.70532046e-04 2.43596248e-03 7.18197378e-01 1.95905451e+03 +1.32800000e-04 4.65175153e-02 1.78646993e-01 5.37833528e-02 1.39397564e-04 2.72233214e-04 2.44312991e-03 7.18197378e-01 1.96007809e+03 +1.32900000e-04 4.64660466e-02 1.78529156e-01 5.39418135e-02 1.41322297e-04 2.73949417e-04 2.45033472e-03 7.18197378e-01 1.96213728e+03 +1.33000000e-04 4.64143037e-02 1.78410699e-01 5.41010797e-02 1.43281891e-04 2.75680837e-04 2.45757724e-03 7.18197378e-01 1.96317294e+03 +1.33100000e-04 4.63622842e-02 1.78291618e-01 5.42611577e-02 1.45277102e-04 2.77427656e-04 2.46485778e-03 7.18197378e-01 1.96421268e+03 +1.33200000e-04 4.63099857e-02 1.78171907e-01 5.44220539e-02 1.47308705e-04 2.79190064e-04 2.47217667e-03 7.18197378e-01 1.96525652e+03 +1.33300000e-04 4.62574057e-02 1.78051562e-01 5.45837747e-02 1.49377493e-04 2.80968249e-04 2.47953425e-03 7.18197378e-01 1.96679599e+03 +1.33400000e-04 4.62045419e-02 1.77930576e-01 5.47463265e-02 1.51484279e-04 2.82762404e-04 2.48693083e-03 7.18197378e-01 1.96834444e+03 +1.33500000e-04 4.61513917e-02 1.77808945e-01 5.49097159e-02 1.53629898e-04 2.84572726e-04 2.49436677e-03 7.18197378e-01 1.96990194e+03 +1.33600000e-04 4.60979526e-02 1.77686663e-01 5.50739493e-02 1.55815205e-04 2.86399413e-04 2.50184239e-03 7.18197378e-01 1.97146858e+03 +1.33700000e-04 4.60442221e-02 1.77563725e-01 5.52390334e-02 1.58041077e-04 2.88242666e-04 2.50935805e-03 7.18197378e-01 1.97282572e+03 +1.33800000e-04 4.59901975e-02 1.77440125e-01 5.54049749e-02 1.60308411e-04 2.90102692e-04 2.51691408e-03 7.18197378e-01 1.97418975e+03 +1.33900000e-04 4.59358763e-02 1.77315857e-01 5.55717805e-02 1.62618131e-04 2.91979698e-04 2.52451085e-03 7.18197378e-01 1.97556075e+03 +1.34000000e-04 4.58812558e-02 1.77190916e-01 5.57394570e-02 1.64971181e-04 2.93873896e-04 2.53214870e-03 7.18197378e-01 1.97693875e+03 +1.34100000e-04 4.58263333e-02 1.77065296e-01 5.59080112e-02 1.67368531e-04 2.95785501e-04 2.53982800e-03 7.18197378e-01 1.97832383e+03 +1.34200000e-04 4.57711063e-02 1.76938991e-01 5.60774501e-02 1.69811174e-04 2.97714730e-04 2.54754911e-03 7.18197378e-01 1.97971603e+03 +1.34300000e-04 4.57155718e-02 1.76811995e-01 5.62477807e-02 1.72300131e-04 2.99661807e-04 2.55531240e-03 7.18197378e-01 1.98111541e+03 +1.34400000e-04 4.56597272e-02 1.76684303e-01 5.64190098e-02 1.74836448e-04 3.01626955e-04 2.56311823e-03 7.18197378e-01 1.98252203e+03 +1.34500000e-04 4.56035697e-02 1.76555909e-01 5.65911447e-02 1.77421198e-04 3.03610404e-04 2.57096699e-03 7.18197378e-01 1.98551478e+03 +1.34600000e-04 4.55470965e-02 1.76426806e-01 5.67641925e-02 1.80055481e-04 3.05612386e-04 2.57885906e-03 7.18197378e-01 1.98551478e+03 +1.34700000e-04 4.54903046e-02 1.76296989e-01 5.69381603e-02 1.82740428e-04 3.07633137e-04 2.58679481e-03 7.18197378e-01 1.98900103e+03 +1.34800000e-04 4.54331912e-02 1.76166451e-01 5.71130555e-02 1.85477198e-04 3.09672898e-04 2.59477465e-03 7.18197378e-01 1.98900103e+03 +1.34900000e-04 4.53757534e-02 1.76035186e-01 5.72888853e-02 1.88266979e-04 3.11731911e-04 2.60279895e-03 7.18197378e-01 1.99148185e+03 +1.35000000e-04 4.53179881e-02 1.75903187e-01 5.74656571e-02 1.91110993e-04 3.13810424e-04 2.61086813e-03 7.18197378e-01 1.99148185e+03 +1.35100000e-04 4.52598925e-02 1.75770450e-01 5.76433783e-02 1.94010492e-04 3.15908690e-04 2.61898258e-03 7.18197378e-01 1.99398511e+03 +1.35200000e-04 4.52014635e-02 1.75636966e-01 5.78220565e-02 1.96966761e-04 3.18026964e-04 2.62714270e-03 7.18197378e-01 1.99651114e+03 +1.35300000e-04 4.51426979e-02 1.75502729e-01 5.80016992e-02 1.99981121e-04 3.20165505e-04 2.63534892e-03 7.18197378e-01 1.99651114e+03 +1.35400000e-04 4.50835928e-02 1.75367734e-01 5.81823139e-02 2.03054926e-04 3.22324579e-04 2.64360165e-03 7.18197378e-01 1.99906026e+03 +1.35500000e-04 4.50241450e-02 1.75231973e-01 5.83639084e-02 2.06189566e-04 3.24504453e-04 2.65190130e-03 7.18197378e-01 1.99906026e+03 +1.35600000e-04 4.49643512e-02 1.75095440e-01 5.85464904e-02 2.09386470e-04 3.26705400e-04 2.66024831e-03 7.18197378e-01 2.00163277e+03 +1.35700000e-04 4.49042083e-02 1.74958128e-01 5.87300677e-02 2.12647102e-04 3.28927697e-04 2.66864311e-03 7.18197378e-01 2.00422902e+03 +1.35800000e-04 4.48437130e-02 1.74820030e-01 5.89146480e-02 2.15972969e-04 3.31171627e-04 2.67708612e-03 7.18197378e-01 2.00422902e+03 +1.35900000e-04 4.47828621e-02 1.74681140e-01 5.91002394e-02 2.19365616e-04 3.33437476e-04 2.68557780e-03 7.18197378e-01 2.00684933e+03 +1.36000000e-04 4.47216521e-02 1.74541450e-01 5.92868496e-02 2.22826629e-04 3.35725535e-04 2.69411859e-03 7.18197378e-01 2.00684933e+03 +1.36100000e-04 4.46600798e-02 1.74400953e-01 5.94744869e-02 2.26357640e-04 3.38036100e-04 2.70270894e-03 7.18197378e-01 2.00949404e+03 +1.36200000e-04 4.45981417e-02 1.74259642e-01 5.96631592e-02 2.29960323e-04 3.40369472e-04 2.71134930e-03 7.18197378e-01 2.01216350e+03 +1.36300000e-04 4.45358344e-02 1.74117511e-01 5.98528746e-02 2.33636396e-04 3.42725958e-04 2.72004014e-03 7.18197378e-01 2.01216350e+03 +1.36400000e-04 4.44731544e-02 1.73974551e-01 6.00436414e-02 2.37387628e-04 3.45105868e-04 2.72878192e-03 7.18197378e-01 2.01485805e+03 +1.36500000e-04 4.44100981e-02 1.73830756e-01 6.02354677e-02 2.41215832e-04 3.47509519e-04 2.73757512e-03 7.18197378e-01 2.01757806e+03 +1.36600000e-04 4.43466620e-02 1.73686118e-01 6.04283618e-02 2.45122873e-04 3.49937232e-04 2.74642022e-03 7.18197378e-01 2.01757806e+03 +1.36700000e-04 4.42828424e-02 1.73540630e-01 6.06223321e-02 2.49110667e-04 3.52389335e-04 2.75531769e-03 7.18197378e-01 2.02032387e+03 +1.36800000e-04 4.42186358e-02 1.73394284e-01 6.08173870e-02 2.53181183e-04 3.54866160e-04 2.76426802e-03 7.18197378e-01 2.02032387e+03 +1.36900000e-04 4.41540384e-02 1.73247073e-01 6.10135349e-02 2.57336442e-04 3.57368045e-04 2.77327172e-03 7.18197378e-01 2.02309586e+03 +1.37000000e-04 4.40890464e-02 1.73098988e-01 6.12107843e-02 2.61578524e-04 3.59895335e-04 2.78232928e-03 7.18197378e-01 2.02589439e+03 +1.37100000e-04 4.40236560e-02 1.72950023e-01 6.14091438e-02 2.65909564e-04 3.62448379e-04 2.79144120e-03 7.18197378e-01 2.02589439e+03 +1.37200000e-04 4.39578635e-02 1.72800169e-01 6.16086219e-02 2.70331758e-04 3.65027533e-04 2.80060800e-03 7.18197378e-01 2.02787896e+03 +1.37300000e-04 4.38916649e-02 1.72649419e-01 6.18092272e-02 2.74847365e-04 3.67633160e-04 2.80983020e-03 7.18197378e-01 2.02932693e+03 +1.37400000e-04 4.38250563e-02 1.72497765e-01 6.20109685e-02 2.79458703e-04 3.70265627e-04 2.81910832e-03 7.18197378e-01 2.03078203e+03 +1.37500000e-04 4.37580338e-02 1.72345197e-01 6.22138545e-02 2.84168156e-04 3.72925308e-04 2.82844288e-03 7.18197378e-01 2.03224431e+03 +1.37600000e-04 4.36905932e-02 1.72191710e-01 6.24178940e-02 2.88978177e-04 3.75612585e-04 2.83783443e-03 7.18197378e-01 2.03371382e+03 +1.37700000e-04 4.36227306e-02 1.72037293e-01 6.26230958e-02 2.93891288e-04 3.78327846e-04 2.84728351e-03 7.18197378e-01 2.03667474e+03 +1.37800000e-04 4.35544418e-02 1.71881939e-01 6.28294686e-02 2.98910078e-04 3.81071484e-04 2.85679066e-03 7.18197378e-01 2.03777272e+03 +1.37900000e-04 4.34857227e-02 1.71725640e-01 6.30370215e-02 3.04037215e-04 3.83843900e-04 2.86635644e-03 7.18197378e-01 2.03998080e+03 +1.38000000e-04 4.34165689e-02 1.71568387e-01 6.32457634e-02 3.09275438e-04 3.86645504e-04 2.87598141e-03 7.18197378e-01 2.04169740e+03 +1.38100000e-04 4.33469763e-02 1.71410172e-01 6.34557032e-02 3.14627566e-04 3.89476709e-04 2.88566613e-03 7.18197378e-01 2.04280205e+03 +1.38200000e-04 4.32769406e-02 1.71250986e-01 6.36668500e-02 3.20096498e-04 3.92337939e-04 2.89541119e-03 7.18197378e-01 2.04502350e+03 +1.38300000e-04 4.32064573e-02 1.71090820e-01 6.38792127e-02 3.25685216e-04 3.95229623e-04 2.90521716e-03 7.18197378e-01 2.04688182e+03 +1.38400000e-04 4.31355220e-02 1.70929666e-01 6.40928004e-02 3.31396785e-04 3.98152199e-04 2.91508462e-03 7.18197378e-01 2.04927191e+03 +1.38500000e-04 4.30641303e-02 1.70767515e-01 6.43076223e-02 3.37234362e-04 4.01106112e-04 2.92501418e-03 7.18197378e-01 2.05047398e+03 +1.38600000e-04 4.29922776e-02 1.70604358e-01 6.45236874e-02 3.43201191e-04 4.04091815e-04 2.93500643e-03 7.18197378e-01 2.05355214e+03 +1.38700000e-04 4.29199594e-02 1.70440186e-01 6.47410049e-02 3.49300611e-04 4.07109770e-04 2.94506197e-03 7.18197378e-01 2.05485653e+03 +1.38800000e-04 4.28471710e-02 1.70274989e-01 6.49595839e-02 3.55536058e-04 4.10160444e-04 2.95518143e-03 7.18197378e-01 2.05616643e+03 +1.38900000e-04 4.27739076e-02 1.70108760e-01 6.51794336e-02 3.61911065e-04 4.13244317e-04 2.96536543e-03 7.18197378e-01 2.05748188e+03 +1.39000000e-04 4.27001647e-02 1.69941489e-01 6.54005632e-02 3.68429269e-04 4.16361874e-04 2.97561458e-03 7.18197378e-01 2.06012952e+03 +1.39100000e-04 4.26259373e-02 1.69773165e-01 6.56229819e-02 3.75094412e-04 4.19513611e-04 2.98592954e-03 7.18197378e-01 2.06146179e+03 +1.39200000e-04 4.25512206e-02 1.69603781e-01 6.58466988e-02 3.81910347e-04 4.22700030e-04 2.99631093e-03 7.18197378e-01 2.06494372e+03 +1.39300000e-04 4.24760097e-02 1.69433327e-01 6.60717233e-02 3.88881035e-04 4.25921644e-04 3.00675941e-03 7.18197378e-01 2.06710233e+03 +1.39400000e-04 4.24002995e-02 1.69261793e-01 6.62980644e-02 3.96010557e-04 4.29178976e-04 3.01727564e-03 7.18197378e-01 2.06927572e+03 +1.39500000e-04 4.23240852e-02 1.69089170e-01 6.65257314e-02 4.03303109e-04 4.32472557e-04 3.02786028e-03 7.18197378e-01 2.06927572e+03 +1.39600000e-04 4.22473615e-02 1.68915447e-01 6.67547335e-02 4.10763015e-04 4.35802928e-04 3.03851399e-03 7.18197378e-01 2.07146400e+03 +1.39700000e-04 4.21701234e-02 1.68740616e-01 6.69850799e-02 4.18394721e-04 4.39170640e-04 3.04923747e-03 7.18197378e-01 2.07366733e+03 +1.39800000e-04 4.20923655e-02 1.68564666e-01 6.72167797e-02 4.26202807e-04 4.42576253e-04 3.06003140e-03 7.18197378e-01 2.07588583e+03 +1.39900000e-04 4.20140827e-02 1.68387589e-01 6.74498421e-02 4.34191987e-04 4.46020339e-04 3.07089646e-03 7.18197378e-01 2.07811966e+03 +1.40000000e-04 4.19352696e-02 1.68209373e-01 6.76842761e-02 4.42367113e-04 4.49503478e-04 3.08183337e-03 7.18197378e-01 2.08036894e+03 +1.40100000e-04 4.18559208e-02 1.68030008e-01 6.79200909e-02 4.50733182e-04 4.53026263e-04 3.09284283e-03 7.18197378e-01 2.08263383e+03 +1.40200000e-04 4.17760308e-02 1.67849486e-01 6.81572954e-02 4.59295338e-04 4.56589297e-04 3.10392556e-03 7.18197378e-01 2.08491446e+03 +1.40300000e-04 4.16955942e-02 1.67667795e-01 6.83958988e-02 4.68058877e-04 4.60193193e-04 3.11508228e-03 7.18197378e-01 2.08721097e+03 +1.40400000e-04 4.16146053e-02 1.67484925e-01 6.86359099e-02 4.77029254e-04 4.63838577e-04 3.12631372e-03 7.18197378e-01 2.08952352e+03 +1.40500000e-04 4.15330585e-02 1.67300867e-01 6.88773376e-02 4.86212083e-04 4.67526084e-04 3.13762063e-03 7.18197378e-01 2.08952352e+03 +1.40600000e-04 4.14509481e-02 1.67115610e-01 6.91201908e-02 4.95613147e-04 4.71256365e-04 3.14900376e-03 7.18197378e-01 2.09185224e+03 +1.40700000e-04 4.13682683e-02 1.66929143e-01 6.93644782e-02 5.05238403e-04 4.75030077e-04 3.16046385e-03 7.18197378e-01 2.09419728e+03 +1.40800000e-04 4.12850133e-02 1.66741457e-01 6.96102085e-02 5.15093982e-04 4.78847896e-04 3.17200168e-03 7.18197378e-01 2.09655879e+03 +1.40900000e-04 4.12011772e-02 1.66552540e-01 6.98573903e-02 5.25186200e-04 4.82710504e-04 3.18361801e-03 7.18197378e-01 2.09893690e+03 +1.41000000e-04 4.11167539e-02 1.66362382e-01 7.01060322e-02 5.35521562e-04 4.86618599e-04 3.19531363e-03 7.18197378e-01 2.10064549e+03 +1.41100000e-04 4.10317376e-02 1.66170973e-01 7.03561425e-02 5.46106768e-04 4.90572893e-04 3.20708932e-03 7.18197378e-01 2.10314664e+03 +1.41200000e-04 4.09461219e-02 1.65978302e-01 7.06077295e-02 5.56948717e-04 4.94574109e-04 3.21894588e-03 7.18197378e-01 2.10566615e+03 +1.41300000e-04 4.08599009e-02 1.65784358e-01 7.08608015e-02 5.68054516e-04 4.98622984e-04 3.23088412e-03 7.18197378e-01 2.10693285e+03 +1.41400000e-04 4.07730682e-02 1.65589131e-01 7.11153664e-02 5.79431484e-04 5.02720268e-04 3.24290484e-03 7.18197378e-01 2.10948022e+03 +1.41500000e-04 4.06856176e-02 1.65392609e-01 7.13714323e-02 5.91087161e-04 5.06866728e-04 3.25500887e-03 7.18197378e-01 2.11204637e+03 +1.41600000e-04 4.05975427e-02 1.65194783e-01 7.16290069e-02 6.03029314e-04 5.11063142e-04 3.26719703e-03 7.18197378e-01 2.11394790e+03 +1.41700000e-04 4.05088370e-02 1.64995641e-01 7.18880978e-02 6.15265941e-04 5.15310303e-04 3.27947016e-03 7.18197378e-01 2.11585977e+03 +1.41800000e-04 4.04194940e-02 1.64795172e-01 7.21487125e-02 6.27805282e-04 5.19609021e-04 3.29182911e-03 7.18197378e-01 2.11874710e+03 +1.41900000e-04 4.03295073e-02 1.64593366e-01 7.24108583e-02 6.40655824e-04 5.23960119e-04 3.30427472e-03 7.18197378e-01 2.12028119e+03 +1.42000000e-04 4.02388700e-02 1.64390211e-01 7.26745423e-02 6.53826310e-04 5.28364437e-04 3.31680787e-03 7.18197378e-01 2.12336928e+03 +1.42100000e-04 4.01475756e-02 1.64185697e-01 7.29397713e-02 6.67325746e-04 5.32822828e-04 3.32942940e-03 7.18197378e-01 2.12492333e+03 +1.42200000e-04 4.00556172e-02 1.63979813e-01 7.32065522e-02 6.81163408e-04 5.37336166e-04 3.34214022e-03 7.18197378e-01 2.12762144e+03 +1.42300000e-04 3.99629880e-02 1.63772548e-01 7.34748913e-02 6.95348852e-04 5.41905335e-04 3.35494118e-03 7.18197378e-01 2.13015735e+03 +1.42400000e-04 3.98696811e-02 1.63563890e-01 7.37447948e-02 7.09891921e-04 5.46531242e-04 3.36783320e-03 7.18197378e-01 2.13185779e+03 +1.42500000e-04 3.97756894e-02 1.63353829e-01 7.40162687e-02 7.24802752e-04 5.51214806e-04 3.38081717e-03 7.18197378e-01 2.13480682e+03 +1.42600000e-04 3.96810061e-02 1.63142354e-01 7.42893188e-02 7.40091790e-04 5.55956966e-04 3.39389399e-03 7.18197378e-01 2.13667567e+03 +1.42700000e-04 3.95856239e-02 1.62929455e-01 7.45639505e-02 7.55769791e-04 5.60758679e-04 3.40706459e-03 7.18197378e-01 2.14005926e+03 +1.42800000e-04 3.94895356e-02 1.62715119e-01 7.48401688e-02 7.71847835e-04 5.65620917e-04 3.42032989e-03 7.18197378e-01 2.14220391e+03 +1.42900000e-04 3.93927341e-02 1.62499337e-01 7.51179786e-02 7.88337334e-04 5.70544674e-04 3.43369081e-03 7.18197378e-01 2.14395116e+03 +1.43000000e-04 3.92952119e-02 1.62282096e-01 7.53973844e-02 8.05250042e-04 5.75530960e-04 3.44714829e-03 7.18197378e-01 2.14747001e+03 +1.43100000e-04 3.91969618e-02 1.62063388e-01 7.56783903e-02 8.22598064e-04 5.80580806e-04 3.46070329e-03 7.18197378e-01 2.14924168e+03 +1.43200000e-04 3.90979763e-02 1.61843200e-01 7.59610001e-02 8.40393869e-04 5.85695260e-04 3.47435675e-03 7.18197378e-01 2.15280967e+03 +1.43300000e-04 3.89982478e-02 1.61621522e-01 7.62452171e-02 8.58650294e-04 5.90875393e-04 3.48810963e-03 7.18197378e-01 2.15460608e+03 +1.43400000e-04 3.88977688e-02 1.61398343e-01 7.65310444e-02 8.77380563e-04 5.96122294e-04 3.50196290e-03 7.18197378e-01 2.15641081e+03 +1.43500000e-04 3.87965316e-02 1.61173653e-01 7.68184846e-02 8.96598291e-04 6.01437071e-04 3.51591753e-03 7.18197378e-01 2.16004536e+03 +1.43600000e-04 3.86945286e-02 1.60947441e-01 7.71075397e-02 9.16317498e-04 6.06820857e-04 3.52997451e-03 7.18197378e-01 2.16187527e+03 +1.43700000e-04 3.85917520e-02 1.60719697e-01 7.73982114e-02 9.36552620e-04 6.12274803e-04 3.54413482e-03 7.18197378e-01 2.16464736e+03 +1.43800000e-04 3.84881939e-02 1.60490409e-01 7.76905009e-02 9.57318518e-04 6.17800082e-04 3.55839944e-03 7.18197378e-01 2.16838631e+03 +1.43900000e-04 3.83838466e-02 1.60259569e-01 7.79844089e-02 9.78630493e-04 6.23397889e-04 3.57276939e-03 7.18197378e-01 2.17026883e+03 +1.44000000e-04 3.82787020e-02 1.60027165e-01 7.82799355e-02 1.00050430e-03 6.29069444e-04 3.58724566e-03 7.18197378e-01 2.17216009e+03 +1.44100000e-04 3.81727522e-02 1.59793188e-01 7.85770804e-02 1.02295614e-03 6.34815986e-04 3.60182926e-03 7.18197378e-01 2.17596898e+03 +1.44200000e-04 3.80659890e-02 1.59557628e-01 7.88758426e-02 1.04600272e-03 6.40638779e-04 3.61652122e-03 7.18197378e-01 2.17788667e+03 +1.44300000e-04 3.79584045e-02 1.59320474e-01 7.91762204e-02 1.06966119e-03 6.46539111e-04 3.63132254e-03 7.18197378e-01 2.17981323e+03 +1.44400000e-04 3.78499905e-02 1.59081718e-01 7.94782118e-02 1.09394925e-03 6.52518294e-04 3.64623426e-03 7.18197378e-01 2.18369308e+03 +1.44500000e-04 3.77407387e-02 1.58841349e-01 7.97818139e-02 1.11888506e-03 6.58577662e-04 3.66125740e-03 7.18197378e-01 2.18612402e+03 +1.44600000e-04 3.76306409e-02 1.58599359e-01 8.00870231e-02 1.14448734e-03 6.64718576e-04 3.67639300e-03 7.18197378e-01 2.18818744e+03 +1.44700000e-04 3.75196889e-02 1.58355738e-01 8.03938353e-02 1.17077534e-03 6.70942423e-04 3.69164209e-03 7.18197378e-01 2.19174208e+03 +1.44800000e-04 3.74078742e-02 1.58110477e-01 8.07022455e-02 1.19776886e-03 6.77250613e-04 3.70700571e-03 7.18197378e-01 2.19412811e+03 +1.44900000e-04 3.72951885e-02 1.57863568e-01 8.10122480e-02 1.22548824e-03 6.83644584e-04 3.72248492e-03 7.18197378e-01 2.19652721e+03 +1.45000000e-04 3.71816234e-02 1.57615001e-01 8.13238363e-02 1.25395444e-03 6.90125799e-04 3.73808074e-03 7.18197378e-01 2.19893941e+03 +1.45100000e-04 3.70671704e-02 1.57364770e-01 8.16370031e-02 1.28318897e-03 6.96695749e-04 3.75379424e-03 7.18197378e-01 2.20252516e+03 +1.45200000e-04 3.69518211e-02 1.57112864e-01 8.19517403e-02 1.31321397e-03 7.03355952e-04 3.76962646e-03 7.18197378e-01 2.20523334e+03 +1.45300000e-04 3.68355669e-02 1.56859278e-01 8.22680389e-02 1.34405218e-03 7.10107953e-04 3.78557845e-03 7.18197378e-01 2.20795776e+03 +1.45400000e-04 3.67183993e-02 1.56604002e-01 8.25858888e-02 1.37572698e-03 7.16953325e-04 3.80165127e-03 7.18197378e-01 2.21069845e+03 +1.45500000e-04 3.66003097e-02 1.56347031e-01 8.29052794e-02 1.40826237e-03 7.23893671e-04 3.81784596e-03 7.18197378e-01 2.21338172e+03 +1.45600000e-04 3.64812896e-02 1.56088357e-01 8.32261986e-02 1.44168305e-03 7.30930620e-04 3.83416358e-03 7.18197378e-01 2.21654847e+03 +1.45700000e-04 3.63613303e-02 1.55827973e-01 8.35486337e-02 1.47601434e-03 7.38065833e-04 3.85060517e-03 7.18197378e-01 2.21999754e+03 +1.45800000e-04 3.62404232e-02 1.55565873e-01 8.38725709e-02 1.51128226e-03 7.45301000e-04 3.86717178e-03 7.18197378e-01 2.22291788e+03 +1.45900000e-04 3.61185597e-02 1.55302051e-01 8.41979951e-02 1.54751355e-03 7.52637839e-04 3.88386447e-03 7.18197378e-01 2.22646743e+03 +1.46000000e-04 3.59957313e-02 1.55036502e-01 8.45248904e-02 1.58473560e-03 7.60078101e-04 3.90068427e-03 7.18197378e-01 2.22825190e+03 +1.46100000e-04 3.58719292e-02 1.54769221e-01 8.48532396e-02 1.62297658e-03 7.67623566e-04 3.91763223e-03 7.18197378e-01 2.23184027e+03 +1.46200000e-04 3.57471448e-02 1.54500202e-01 8.51830243e-02 1.66226534e-03 7.75276047e-04 3.93470937e-03 7.18197378e-01 2.23545452e+03 +1.46300000e-04 3.56213696e-02 1.54229442e-01 8.55142250e-02 1.70263149e-03 7.83037386e-04 3.95191673e-03 7.18197378e-01 2.23727136e+03 +1.46400000e-04 3.54945950e-02 1.53956936e-01 8.58468209e-02 1.74410541e-03 7.90909459e-04 3.96925534e-03 7.18197378e-01 2.24092446e+03 +1.46500000e-04 3.53668124e-02 1.53682681e-01 8.61807900e-02 1.78671821e-03 7.98894173e-04 3.98672620e-03 7.18197378e-01 2.24555939e+03 +1.46600000e-04 3.52380133e-02 1.53406674e-01 8.65161090e-02 1.83050180e-03 8.06993469e-04 4.00433033e-03 7.18197378e-01 2.24837294e+03 +1.46700000e-04 3.51081892e-02 1.53128913e-01 8.68527531e-02 1.87548886e-03 8.15209318e-04 4.02206874e-03 7.18197378e-01 2.25120134e+03 +1.46800000e-04 3.49773315e-02 1.52849395e-01 8.71906963e-02 1.92171285e-03 8.23543728e-04 4.03994240e-03 7.18197378e-01 2.25404457e+03 +1.46900000e-04 3.48454320e-02 1.52568120e-01 8.75299113e-02 1.96920805e-03 8.31998737e-04 4.05795230e-03 7.18197378e-01 2.25690259e+03 +1.47000000e-04 3.47124822e-02 1.52285086e-01 8.78703690e-02 2.01800953e-03 8.40576419e-04 4.07609942e-03 7.18197378e-01 2.25977538e+03 +1.47100000e-04 3.45784738e-02 1.52000292e-01 8.82120392e-02 2.06815318e-03 8.49278881e-04 4.09438470e-03 7.18197378e-01 2.26186272e+03 +1.47200000e-04 3.44433987e-02 1.51713740e-01 8.85548899e-02 2.11967570e-03 8.58108265e-04 4.11280910e-03 7.18197378e-01 2.26636201e+03 +1.47300000e-04 3.43072486e-02 1.51425431e-01 8.88988879e-02 2.17261462e-03 8.67066747e-04 4.13137354e-03 7.18197378e-01 2.26938106e+03 +1.47400000e-04 3.41700156e-02 1.51135365e-01 8.92439982e-02 2.22700830e-03 8.76156537e-04 4.15007892e-03 7.18197378e-01 2.27241565e+03 +1.47500000e-04 3.40316915e-02 1.50843544e-01 8.95901842e-02 2.28289590e-03 8.85379883e-04 4.16892616e-03 7.18197378e-01 2.27465040e+03 +1.47600000e-04 3.38922685e-02 1.50549973e-01 8.99374079e-02 2.34031745e-03 8.94739064e-04 4.18791612e-03 7.18197378e-01 2.27801806e+03 +1.47700000e-04 3.37517389e-02 1.50254654e-01 9.02856295e-02 2.39931377e-03 9.04236397e-04 4.20704967e-03 7.18197378e-01 2.28140425e+03 +1.47800000e-04 3.36100950e-02 1.49957591e-01 9.06348074e-02 2.45992652e-03 9.13874233e-04 4.22632763e-03 7.18197378e-01 2.28480885e+03 +1.47900000e-04 3.34673293e-02 1.49658790e-01 9.09848987e-02 2.52219818e-03 9.23654960e-04 4.24575083e-03 7.18197378e-01 2.28791724e+03 +1.48000000e-04 3.33234344e-02 1.49358256e-01 9.13358584e-02 2.58617206e-03 9.33581000e-04 4.26532006e-03 7.18197378e-01 2.29159062e+03 +1.48100000e-04 3.31784030e-02 1.49055996e-01 9.16876399e-02 2.65189226e-03 9.43654812e-04 4.28503607e-03 7.18197378e-01 2.29503381e+03 +1.48200000e-04 3.30322280e-02 1.48752017e-01 9.20401950e-02 2.71940370e-03 9.53878889e-04 4.30489962e-03 7.18197378e-01 2.29787470e+03 +1.48300000e-04 3.28849026e-02 1.48446327e-01 9.23934736e-02 2.78875209e-03 9.64255762e-04 4.32491141e-03 7.18197378e-01 2.30300355e+03 +1.48400000e-04 3.27364200e-02 1.48138934e-01 9.27474237e-02 2.85998390e-03 9.74787996e-04 4.34507213e-03 7.18197378e-01 2.30558206e+03 +1.48500000e-04 3.25867735e-02 1.47829850e-01 9.31019918e-02 2.93314638e-03 9.85478192e-04 4.36538242e-03 7.18197378e-01 2.30816987e+03 +1.48600000e-04 3.24359570e-02 1.47519083e-01 9.34571223e-02 3.00828754e-03 9.96328985e-04 4.38584291e-03 7.18197378e-01 2.31337303e+03 +1.48700000e-04 3.22839641e-02 1.47206647e-01 9.38127580e-02 3.08545610e-03 1.00734305e-03 4.40645418e-03 7.18197378e-01 2.31598820e+03 +1.48800000e-04 3.21307891e-02 1.46892552e-01 9.41688398e-02 3.16470151e-03 1.01852309e-03 4.42721678e-03 7.18197378e-01 2.31861230e+03 +1.48900000e-04 3.19764262e-02 1.46576812e-01 9.45253067e-02 3.24607388e-03 1.02987184e-03 4.44813122e-03 7.18197378e-01 2.32388694e+03 +1.49000000e-04 3.18208699e-02 1.46259442e-01 9.48820962e-02 3.32962401e-03 1.04139210e-03 4.46919797e-03 7.18197378e-01 2.32653726e+03 +1.49100000e-04 3.16641150e-02 1.45940456e-01 9.52391437e-02 3.41540332e-03 1.05308665e-03 4.49041747e-03 7.18197378e-01 2.32919611e+03 +1.49200000e-04 3.15061568e-02 1.45619870e-01 9.55963828e-02 3.50346381e-03 1.06495836e-03 4.51179010e-03 7.18197378e-01 2.33453893e+03 +1.49300000e-04 3.13469904e-02 1.45297702e-01 9.59537455e-02 3.59385810e-03 1.07701009e-03 4.53331620e-03 7.18197378e-01 2.33722267e+03 +1.49400000e-04 3.11866116e-02 1.44973968e-01 9.63111620e-02 3.68663928e-03 1.08924476e-03 4.55499608e-03 7.18197378e-01 2.33991447e+03 +1.49500000e-04 3.10250163e-02 1.44648689e-01 9.66685606e-02 3.78186100e-03 1.10166532e-03 4.57682999e-03 7.18197378e-01 2.34365945e+03 +1.49600000e-04 3.08622009e-02 1.44321883e-01 9.70258681e-02 3.87957730e-03 1.11427473e-03 4.59881812e-03 7.18197378e-01 2.34741932e+03 +1.49700000e-04 3.06981619e-02 1.43993572e-01 9.73830094e-02 3.97984267e-03 1.12707602e-03 4.62096062e-03 7.18197378e-01 2.35149748e+03 +1.49800000e-04 3.05328963e-02 1.43663776e-01 9.77399078e-02 4.08271194e-03 1.14007221e-03 4.64325759e-03 7.18197378e-01 2.35559213e+03 +1.49900000e-04 3.03664015e-02 1.43332520e-01 9.80964851e-02 4.18824027e-03 1.15326638e-03 4.66570906e-03 7.18197378e-01 2.35764547e+03 +1.50000000e-04 3.01986752e-02 1.42999826e-01 9.84526614e-02 4.29648306e-03 1.16666162e-03 4.68831503e-03 7.18197378e-01 2.36176390e+03 +1.50100000e-04 3.00297155e-02 1.42665719e-01 9.88083553e-02 4.40749592e-03 1.18026107e-03 4.71107540e-03 7.18197378e-01 2.36589754e+03 +1.50200000e-04 2.98595209e-02 1.42330225e-01 9.91634838e-02 4.52133461e-03 1.19406788e-03 4.73399005e-03 7.18197378e-01 2.37004585e+03 +1.50300000e-04 2.96880902e-02 1.41993370e-01 9.95179627e-02 4.63805496e-03 1.20808523e-03 4.75705877e-03 7.18197378e-01 2.37212533e+03 +1.50400000e-04 2.95154230e-02 1.41655183e-01 9.98717062e-02 4.75771283e-03 1.22231634e-03 4.78028130e-03 7.18197378e-01 2.37629460e+03 +1.50500000e-04 2.93415188e-02 1.41315690e-01 1.00224627e-01 4.88036403e-03 1.23676443e-03 4.80365730e-03 7.18197378e-01 2.37967561e+03 +1.50600000e-04 2.91663781e-02 1.40974923e-01 1.00576638e-01 5.00606425e-03 1.25143278e-03 4.82718637e-03 7.18197378e-01 2.38318230e+03 +1.50700000e-04 2.89900014e-02 1.40632911e-01 1.00927648e-01 5.13486900e-03 1.26632465e-03 4.85086805e-03 7.18197378e-01 2.38669756e+03 +1.50800000e-04 2.88123901e-02 1.40289686e-01 1.01277567e-01 5.26683352e-03 1.28144336e-03 4.87470179e-03 7.18197378e-01 2.39022103e+03 +1.50900000e-04 2.86335458e-02 1.39945280e-01 1.01626304e-01 5.40201272e-03 1.29679224e-03 4.89868697e-03 7.18197378e-01 2.39396653e+03 +1.51000000e-04 2.84534708e-02 1.39599727e-01 1.01973766e-01 5.54046109e-03 1.31237462e-03 4.92282291e-03 7.18197378e-01 2.39793507e+03 +1.51100000e-04 2.82721677e-02 1.39253059e-01 1.02319860e-01 5.68223260e-03 1.32819387e-03 4.94710882e-03 7.18197378e-01 2.40339308e+03 +1.51200000e-04 2.80896398e-02 1.38905313e-01 1.02664491e-01 5.82738069e-03 1.34425338e-03 4.97154388e-03 7.18197378e-01 2.40537610e+03 +1.51300000e-04 2.79058909e-02 1.38556524e-01 1.03007565e-01 5.97595809e-03 1.36055653e-03 4.99612714e-03 7.18197378e-01 2.40934781e+03 +1.51400000e-04 2.77209254e-02 1.38206729e-01 1.03348987e-01 6.12801679e-03 1.37710675e-03 5.02085760e-03 7.18197378e-01 2.41332660e+03 +1.51500000e-04 2.75347483e-02 1.37855965e-01 1.03688660e-01 6.28360796e-03 1.39390746e-03 5.04573417e-03 7.18197378e-01 2.41731190e+03 +1.51600000e-04 2.73473650e-02 1.37504270e-01 1.04026488e-01 6.44278183e-03 1.41096208e-03 5.07075567e-03 7.18197378e-01 2.42130310e+03 +1.51700000e-04 2.71587817e-02 1.37151684e-01 1.04362374e-01 6.60558761e-03 1.42827407e-03 5.09592082e-03 7.18197378e-01 2.42529962e+03 +1.51800000e-04 2.69690051e-02 1.36798245e-01 1.04696223e-01 6.77207342e-03 1.44584688e-03 5.12122830e-03 7.18197378e-01 2.42930086e+03 +1.51900000e-04 2.67780425e-02 1.36443996e-01 1.05027937e-01 6.94228616e-03 1.46368397e-03 5.14667664e-03 7.18197378e-01 2.43330619e+03 +1.52000000e-04 2.65859019e-02 1.36088976e-01 1.05357420e-01 7.11627147e-03 1.48178881e-03 5.17226432e-03 7.18197378e-01 2.43531020e+03 +1.52100000e-04 2.63925918e-02 1.35733227e-01 1.05684575e-01 7.29407359e-03 1.50016486e-03 5.19798973e-03 7.18197378e-01 2.43932053e+03 +1.52200000e-04 2.61981215e-02 1.35376793e-01 1.06009306e-01 7.47573530e-03 1.51881558e-03 5.22385114e-03 7.18197378e-01 2.44370958e+03 +1.52300000e-04 2.60025008e-02 1.35019715e-01 1.06331517e-01 7.66129781e-03 1.53774446e-03 5.24984675e-03 7.18197378e-01 2.44810085e+03 +1.52400000e-04 2.58057403e-02 1.34662037e-01 1.06651114e-01 7.85080069e-03 1.55695496e-03 5.27597467e-03 7.18197378e-01 2.45249351e+03 +1.52500000e-04 2.56078511e-02 1.34303804e-01 1.06968001e-01 8.04428175e-03 1.57645053e-03 5.30223288e-03 7.18197378e-01 2.45469009e+03 +1.52600000e-04 2.54088452e-02 1.33945060e-01 1.07282086e-01 8.24177701e-03 1.59623463e-03 5.32861931e-03 7.18197378e-01 2.45908325e+03 +1.52700000e-04 2.52087350e-02 1.33585850e-01 1.07593274e-01 8.44332052e-03 1.61631071e-03 5.35513177e-03 7.18197378e-01 2.46347568e+03 +1.52800000e-04 2.50075337e-02 1.33226220e-01 1.07901474e-01 8.64894438e-03 1.63668221e-03 5.38176797e-03 7.18197378e-01 2.46567137e+03 +1.52900000e-04 2.48052553e-02 1.32866214e-01 1.08206596e-01 8.85867857e-03 1.65735255e-03 5.40852554e-03 7.18197378e-01 2.47006114e+03 +1.53000000e-04 2.46019143e-02 1.32505880e-01 1.08508550e-01 9.07255094e-03 1.67832515e-03 5.43540199e-03 7.18197378e-01 2.47444807e+03 +1.53100000e-04 2.43975261e-02 1.32145263e-01 1.08807248e-01 9.29058706e-03 1.69960339e-03 5.46239475e-03 7.18197378e-01 2.47883132e+03 +1.53200000e-04 2.41921065e-02 1.31784411e-01 1.09102603e-01 9.51281020e-03 1.72119065e-03 5.48950115e-03 7.18197378e-01 2.48102130e+03 +1.53300000e-04 2.39856722e-02 1.31423370e-01 1.09394530e-01 9.73924124e-03 1.74309029e-03 5.51671841e-03 7.18197378e-01 2.48539744e+03 +1.53400000e-04 2.37782407e-02 1.31062188e-01 1.09682945e-01 9.96989858e-03 1.76530564e-03 5.54404368e-03 7.18197378e-01 2.48976779e+03 +1.53500000e-04 2.35698299e-02 1.30700912e-01 1.09967768e-01 1.02047981e-02 1.78784002e-03 5.57147397e-03 7.18197378e-01 2.49195053e+03 +1.53600000e-04 2.33604587e-02 1.30339589e-01 1.10248918e-01 1.04439531e-02 1.81069670e-03 5.59900624e-03 7.18197378e-01 2.49631062e+03 +1.53700000e-04 2.31501465e-02 1.29978268e-01 1.10526318e-01 1.06873742e-02 1.83387893e-03 5.62663731e-03 7.18197378e-01 2.50066283e+03 +1.53800000e-04 2.29389134e-02 1.29616995e-01 1.10799891e-01 1.09350693e-02 1.85738995e-03 5.65436394e-03 7.18197378e-01 2.50500634e+03 +1.53900000e-04 2.27267802e-02 1.29255818e-01 1.11069565e-01 1.11870436e-02 1.88123293e-03 5.68218277e-03 7.18197378e-01 2.50717457e+03 +1.54000000e-04 2.25137686e-02 1.28894785e-01 1.11335268e-01 1.14432993e-02 1.90541103e-03 5.71009035e-03 7.18197378e-01 2.51150350e+03 +1.54100000e-04 2.22999007e-02 1.28533943e-01 1.11596932e-01 1.17038361e-02 1.92992737e-03 5.73808314e-03 7.18197378e-01 2.51582169e+03 +1.54200000e-04 2.20851995e-02 1.28173341e-01 1.11854489e-01 1.19686504e-02 1.95478503e-03 5.76615751e-03 7.18197378e-01 2.52012836e+03 +1.54300000e-04 2.18696884e-02 1.27813025e-01 1.12107876e-01 1.22377359e-02 1.97998704e-03 5.79430972e-03 7.18197378e-01 2.52227713e+03 +1.54400000e-04 2.16533918e-02 1.27453043e-01 1.12357032e-01 1.25110833e-02 2.00553639e-03 5.82253596e-03 7.18197378e-01 2.52656504e+03 +1.54500000e-04 2.14363346e-02 1.27093442e-01 1.12601897e-01 1.27886803e-02 2.03143603e-03 5.85083232e-03 7.18197378e-01 2.53083947e+03 +1.54600000e-04 2.12185423e-02 1.26734268e-01 1.12842416e-01 1.30705115e-02 2.05768887e-03 5.87919481e-03 7.18197378e-01 2.53297141e+03 +1.54700000e-04 2.10000411e-02 1.26375570e-01 1.13078535e-01 1.33565585e-02 2.08429774e-03 5.90761932e-03 7.18197378e-01 2.53835099e+03 +1.54800000e-04 2.07808580e-02 1.26017393e-01 1.13310204e-01 1.36468000e-02 2.11126544e-03 5.93610169e-03 7.18197378e-01 2.54159320e+03 +1.54900000e-04 2.05610203e-02 1.25659784e-01 1.13537374e-01 1.39412114e-02 2.13859473e-03 5.96463767e-03 7.18197378e-01 2.54482597e+03 +1.55000000e-04 2.03405563e-02 1.25302789e-01 1.13760001e-01 1.42397652e-02 2.16628828e-03 5.99322290e-03 7.18197378e-01 2.54804899e+03 +1.55100000e-04 2.01194946e-02 1.24946453e-01 1.13978042e-01 1.45424308e-02 2.19434872e-03 6.02185298e-03 7.18197378e-01 2.55126195e+03 +1.55200000e-04 1.98978646e-02 1.24590821e-01 1.14191460e-01 1.48491745e-02 2.22277863e-03 6.05052338e-03 7.18197378e-01 2.55765642e+03 +1.55300000e-04 1.96756961e-02 1.24235940e-01 1.14400217e-01 1.51599596e-02 2.25158051e-03 6.07922955e-03 7.18197378e-01 2.56083734e+03 +1.55400000e-04 1.94530198e-02 1.23881853e-01 1.14604280e-01 1.54747462e-02 2.28075681e-03 6.10796680e-03 7.18197378e-01 2.56400697e+03 +1.55500000e-04 1.92298667e-02 1.23528605e-01 1.14803619e-01 1.57934915e-02 2.31030991e-03 6.13673042e-03 7.18197378e-01 2.56716504e+03 +1.55600000e-04 1.90062684e-02 1.23176239e-01 1.14998207e-01 1.61161498e-02 2.34024211e-03 6.16551561e-03 7.18197378e-01 2.57031125e+03 +1.55700000e-04 1.87822570e-02 1.22824800e-01 1.15188020e-01 1.64426722e-02 2.37055566e-03 6.19431747e-03 7.18197378e-01 2.57346583e+03 +1.55800000e-04 1.85578653e-02 1.22474330e-01 1.15373036e-01 1.67730069e-02 2.40125273e-03 6.22313108e-03 7.18197378e-01 2.57718514e+03 +1.55900000e-04 1.83331265e-02 1.22124872e-01 1.15553237e-01 1.71070993e-02 2.43233542e-03 6.25195143e-03 7.18197378e-01 2.57965465e+03 +1.56000000e-04 1.81080743e-02 1.21776469e-01 1.15728608e-01 1.74448917e-02 2.46380576e-03 6.28077344e-03 7.18197378e-01 2.58334357e+03 +1.56100000e-04 1.78827430e-02 1.21429161e-01 1.15899136e-01 1.77863237e-02 2.49566569e-03 6.30959197e-03 7.18197378e-01 2.58701367e+03 +1.56200000e-04 1.76571671e-02 1.21082991e-01 1.16064813e-01 1.81313320e-02 2.52791708e-03 6.33840184e-03 7.18197378e-01 2.59066453e+03 +1.56300000e-04 1.74313819e-02 1.20737999e-01 1.16225631e-01 1.84798506e-02 2.56056173e-03 6.36719779e-03 7.18197378e-01 2.59429573e+03 +1.56400000e-04 1.72054229e-02 1.20394226e-01 1.16381586e-01 1.88318108e-02 2.59360135e-03 6.39597452e-03 7.18197378e-01 2.59790686e+03 +1.56500000e-04 1.69793261e-02 1.20051711e-01 1.16532679e-01 1.91871411e-02 2.62703757e-03 6.42472667e-03 7.18197378e-01 2.60030295e+03 +1.56600000e-04 1.67531280e-02 1.19710494e-01 1.16678912e-01 1.95457674e-02 2.66087194e-03 6.45344884e-03 7.18197378e-01 2.60387979e+03 +1.56700000e-04 1.65268654e-02 1.19370614e-01 1.16820288e-01 1.99076131e-02 2.69510591e-03 6.48213556e-03 7.18197378e-01 2.60743554e+03 +1.56800000e-04 1.63005754e-02 1.19032110e-01 1.16956816e-01 2.02725992e-02 2.72974085e-03 6.51078134e-03 7.18197378e-01 2.61096984e+03 +1.56900000e-04 1.60742957e-02 1.18695018e-01 1.17088506e-01 2.06406440e-02 2.76477807e-03 6.53938063e-03 7.18197378e-01 2.61526524e+03 +1.57000000e-04 1.58480642e-02 1.18359377e-01 1.17215371e-01 2.10116636e-02 2.80021875e-03 6.56792786e-03 7.18197378e-01 2.61720963e+03 +1.57100000e-04 1.56219190e-02 1.18025224e-01 1.17337426e-01 2.13855716e-02 2.83606401e-03 6.59641740e-03 7.18197378e-01 2.62107750e+03 +1.57200000e-04 1.53958988e-02 1.17692595e-01 1.17454690e-01 2.17622796e-02 2.87231485e-03 6.62484359e-03 7.18197378e-01 2.62491711e+03 +1.57300000e-04 1.51700424e-02 1.17361526e-01 1.17567184e-01 2.21416967e-02 2.90897221e-03 6.65320076e-03 7.18197378e-01 2.62682618e+03 +1.57400000e-04 1.49443890e-02 1.17032053e-01 1.17674930e-01 2.25237301e-02 2.94603691e-03 6.68148317e-03 7.18197378e-01 2.63062259e+03 +1.57500000e-04 1.47189780e-02 1.16704211e-01 1.17777954e-01 2.29082849e-02 2.98350969e-03 6.70968509e-03 7.18197378e-01 2.63438969e+03 +1.57600000e-04 1.44938490e-02 1.16378033e-01 1.17876284e-01 2.32952641e-02 3.02139120e-03 6.73780074e-03 7.18197378e-01 2.63812708e+03 +1.57700000e-04 1.42690419e-02 1.16053555e-01 1.17969950e-01 2.36845689e-02 3.05968197e-03 6.76582433e-03 7.18197378e-01 2.63998451e+03 +1.57800000e-04 1.40445968e-02 1.15730810e-01 1.18058984e-01 2.40760986e-02 3.09838246e-03 6.79375004e-03 7.18197378e-01 2.64367662e+03 +1.57900000e-04 1.38205541e-02 1.15409831e-01 1.18143421e-01 2.44697508e-02 3.13749300e-03 6.82157205e-03 7.18197378e-01 2.64619155e+03 +1.58000000e-04 1.35969541e-02 1.15090650e-01 1.18223298e-01 2.48654212e-02 3.17701386e-03 6.84928450e-03 7.18197378e-01 2.64993667e+03 +1.58100000e-04 1.33738377e-02 1.14773301e-01 1.18298653e-01 2.52630041e-02 3.21694517e-03 6.87688154e-03 7.18197378e-01 2.65319605e+03 +1.58200000e-04 1.31512456e-02 1.14457813e-01 1.18369527e-01 2.56623922e-02 3.25728700e-03 6.90435730e-03 7.18197378e-01 2.65629616e+03 +1.58300000e-04 1.29292187e-02 1.14144220e-01 1.18435962e-01 2.60634765e-02 3.29803927e-03 6.93170589e-03 7.18197378e-01 2.65828253e+03 +1.58400000e-04 1.27077980e-02 1.13832551e-01 1.18498003e-01 2.64661469e-02 3.33920186e-03 6.95892144e-03 7.18197378e-01 2.66222536e+03 +1.58500000e-04 1.24870249e-02 1.13522838e-01 1.18555695e-01 2.68702918e-02 3.38077448e-03 6.98599806e-03 7.18197378e-01 2.66418171e+03 +1.58600000e-04 1.22669404e-02 1.13215109e-01 1.18609088e-01 2.72757983e-02 3.42275679e-03 7.01292985e-03 7.18197378e-01 2.66806404e+03 +1.58700000e-04 1.20475860e-02 1.12909395e-01 1.18658229e-01 2.76825525e-02 3.46514833e-03 7.03971094e-03 7.18197378e-01 2.66998992e+03 +1.58800000e-04 1.18290030e-02 1.12605725e-01 1.18703171e-01 2.80904391e-02 3.50794852e-03 7.06633543e-03 7.18197378e-01 2.67381088e+03 +1.58900000e-04 1.16112328e-02 1.12304127e-01 1.18743966e-01 2.84993420e-02 3.55115670e-03 7.09279746e-03 7.18197378e-01 2.67570586e+03 +1.59000000e-04 1.13943169e-02 1.12004630e-01 1.18780668e-01 2.89091441e-02 3.59477208e-03 7.11909115e-03 7.18197378e-01 2.67895343e+03 +1.59100000e-04 1.11782967e-02 1.11707261e-01 1.18813332e-01 2.93197273e-02 3.63879379e-03 7.14521064e-03 7.18197378e-01 2.68183850e+03 +1.59200000e-04 1.09632137e-02 1.11412049e-01 1.18842016e-01 2.97309726e-02 3.68322085e-03 7.17115008e-03 7.18197378e-01 2.68469835e+03 +1.59300000e-04 1.07491093e-02 1.11119020e-01 1.18866776e-01 3.01427605e-02 3.72805216e-03 7.19690365e-03 7.18197378e-01 2.68725605e+03 +1.59400000e-04 1.05360249e-02 1.10828201e-01 1.18887673e-01 3.05549707e-02 3.77328653e-03 7.22246553e-03 7.18197378e-01 2.68990279e+03 +1.59500000e-04 1.03240019e-02 1.10539619e-01 1.18904767e-01 3.09674821e-02 3.81892264e-03 7.24782992e-03 7.18197378e-01 2.69252684e+03 +1.59600000e-04 1.01130815e-02 1.10253299e-01 1.18918118e-01 3.13801733e-02 3.86495911e-03 7.27299105e-03 7.18197378e-01 2.69531445e+03 +1.59700000e-04 9.90330498e-03 1.09969268e-01 1.18927790e-01 3.17929222e-02 3.91139441e-03 7.29794315e-03 7.18197378e-01 2.69798855e+03 +1.59800000e-04 9.69471342e-03 1.09687550e-01 1.18933845e-01 3.22056065e-02 3.95822692e-03 7.32268051e-03 7.18197378e-01 2.70062075e+03 +1.59900000e-04 9.48734787e-03 1.09408170e-01 1.18936348e-01 3.26181034e-02 4.00545492e-03 7.34719742e-03 7.18197378e-01 2.70322834e+03 +1.60000000e-04 9.28124922e-03 1.09131154e-01 1.18935364e-01 3.30302899e-02 4.05307658e-03 7.37148820e-03 7.18197378e-01 2.70581122e+03 +1.60100000e-04 9.07645826e-03 1.08856525e-01 1.18930959e-01 3.34420425e-02 4.10108996e-03 7.39554722e-03 7.18197378e-01 2.70836927e+03 +1.60200000e-04 8.87301562e-03 1.08584308e-01 1.18923199e-01 3.38532380e-02 4.14949303e-03 7.41936885e-03 7.18197378e-01 2.71118849e+03 +1.60300000e-04 8.67096179e-03 1.08314526e-01 1.18912151e-01 3.42637526e-02 4.19828363e-03 7.44294753e-03 7.18197378e-01 2.71432016e+03 +1.60400000e-04 8.47033709e-03 1.08047202e-01 1.18897883e-01 3.46734629e-02 4.24745953e-03 7.46627771e-03 7.18197378e-01 2.71686994e+03 +1.60500000e-04 8.27118165e-03 1.07782360e-01 1.18880463e-01 3.50822452e-02 4.29701835e-03 7.48935388e-03 7.18197378e-01 2.71939287e+03 +1.60600000e-04 8.07353543e-03 1.07520023e-01 1.18859960e-01 3.54899760e-02 4.34695765e-03 7.51217058e-03 7.18197378e-01 2.72109511e+03 +1.60700000e-04 7.87743818e-03 1.07260212e-01 1.18836443e-01 3.58965319e-02 4.39727487e-03 7.53472238e-03 7.18197378e-01 2.72446202e+03 +1.60800000e-04 7.68292944e-03 1.07002950e-01 1.18809981e-01 3.63017898e-02 4.44796733e-03 7.55700390e-03 7.18197378e-01 2.72612663e+03 +1.60900000e-04 7.49004852e-03 1.06748260e-01 1.18780645e-01 3.67056265e-02 4.49903227e-03 7.57900979e-03 7.18197378e-01 2.72941802e+03 +1.61000000e-04 7.29883452e-03 1.06496162e-01 1.18748505e-01 3.71079195e-02 4.55046682e-03 7.60073477e-03 7.18197378e-01 2.73104474e+03 +1.61100000e-04 7.10932626e-03 1.06246678e-01 1.18713630e-01 3.75085464e-02 4.60226800e-03 7.62217357e-03 7.18197378e-01 2.73426009e+03 +1.61200000e-04 6.92156234e-03 1.05999829e-01 1.18676092e-01 3.79073853e-02 4.65443276e-03 7.64332101e-03 7.18197378e-01 2.73584867e+03 +1.61300000e-04 6.73558107e-03 1.05755635e-01 1.18635961e-01 3.83043146e-02 4.70695791e-03 7.66417192e-03 7.18197378e-01 2.73742448e+03 +1.61400000e-04 6.55142050e-03 1.05514119e-01 1.18593308e-01 3.86992134e-02 4.75984017e-03 7.68472121e-03 7.18197378e-01 2.74053772e+03 +1.61500000e-04 6.36911838e-03 1.05275299e-01 1.18548204e-01 3.90919612e-02 4.81307619e-03 7.70496383e-03 7.18197378e-01 2.74207508e+03 +1.61600000e-04 6.18871220e-03 1.05039196e-01 1.18500719e-01 3.94824380e-02 4.86666248e-03 7.72489478e-03 7.18197378e-01 2.74414600e+03 +1.61700000e-04 6.01023911e-03 1.04805830e-01 1.18450924e-01 3.98705247e-02 4.92059548e-03 7.74450911e-03 7.18197378e-01 2.74720760e+03 +1.61800000e-04 5.83373596e-03 1.04575220e-01 1.18398891e-01 4.02561026e-02 4.97487153e-03 7.76380195e-03 7.18197378e-01 2.74882159e+03 +1.61900000e-04 5.65923930e-03 1.04347385e-01 1.18344688e-01 4.06390539e-02 5.02948687e-03 7.78276846e-03 7.18197378e-01 2.75082413e+03 +1.62000000e-04 5.48678531e-03 1.04122346e-01 1.18288388e-01 4.10192615e-02 5.08443763e-03 7.80140387e-03 7.18197378e-01 2.75310142e+03 +1.62100000e-04 5.31640988e-03 1.03900120e-01 1.18230060e-01 4.13966092e-02 5.13971988e-03 7.81970346e-03 7.18197378e-01 2.75534632e+03 +1.62200000e-04 5.14814853e-03 1.03680726e-01 1.18169774e-01 4.17709813e-02 5.19532956e-03 7.83766260e-03 7.18197378e-01 2.75682488e+03 +1.62300000e-04 4.98203641e-03 1.03464184e-01 1.18107600e-01 4.21422635e-02 5.25126255e-03 7.85527667e-03 7.18197378e-01 2.75901559e+03 +1.62400000e-04 4.81810834e-03 1.03250510e-01 1.18043606e-01 4.25103419e-02 5.30751461e-03 7.87254116e-03 7.18197378e-01 2.76087839e+03 +1.62500000e-04 4.65639876e-03 1.03039723e-01 1.17977863e-01 4.28751039e-02 5.36408144e-03 7.88945160e-03 7.18197378e-01 2.76290678e+03 +1.62600000e-04 4.49694173e-03 1.02831842e-01 1.17910439e-01 4.32364379e-02 5.42095861e-03 7.90600359e-03 7.18197378e-01 2.76457441e+03 +1.62700000e-04 4.33977093e-03 1.02626882e-01 1.17841401e-01 4.35942330e-02 5.47814165e-03 7.92219278e-03 7.18197378e-01 2.76654828e+03 +1.62800000e-04 4.18491965e-03 1.02424863e-01 1.17770819e-01 4.39483797e-02 5.53562597e-03 7.93801491e-03 7.18197378e-01 2.76838878e+03 +1.62900000e-04 4.03242079e-03 1.02225801e-01 1.17698758e-01 4.42987695e-02 5.59340690e-03 7.95346577e-03 7.18197378e-01 2.77072459e+03 +1.63000000e-04 3.88230682e-03 1.02029712e-01 1.17625287e-01 4.46452949e-02 5.65147969e-03 7.96854122e-03 7.18197378e-01 2.77208091e+03 +1.63100000e-04 3.73460983e-03 1.01836615e-01 1.17550471e-01 4.49878498e-02 5.70983950e-03 7.98323720e-03 7.18197378e-01 2.77408615e+03 +1.63200000e-04 3.58936149e-03 1.01646525e-01 1.17474375e-01 4.53263289e-02 5.76848142e-03 7.99754970e-03 7.18197378e-01 2.77605626e+03 +1.63300000e-04 3.44659304e-03 1.01459459e-01 1.17397066e-01 4.56606286e-02 5.82740045e-03 8.01147480e-03 7.18197378e-01 2.77735010e+03 +1.63400000e-04 3.30633528e-03 1.01275433e-01 1.17318608e-01 4.59906461e-02 5.88659152e-03 8.02500863e-03 7.18197378e-01 2.77926145e+03 +1.63500000e-04 3.16861860e-03 1.01094463e-01 1.17239064e-01 4.63162803e-02 5.94604945e-03 8.03814741e-03 7.18197378e-01 2.78113743e+03 +1.63600000e-04 3.03347294e-03 1.00916565e-01 1.17158497e-01 4.66374310e-02 6.00576902e-03 8.05088741e-03 7.18197378e-01 2.78236839e+03 +1.63700000e-04 2.90092778e-03 1.00741754e-01 1.17076971e-01 4.69539995e-02 6.06574492e-03 8.06322500e-03 7.18197378e-01 2.78418524e+03 +1.63800000e-04 2.77101219e-03 1.00570046e-01 1.16994547e-01 4.72658886e-02 6.12597176e-03 8.07515660e-03 7.18197378e-01 2.78596648e+03 +1.63900000e-04 2.64375473e-03 1.00401456e-01 1.16911286e-01 4.75730022e-02 6.18644409e-03 8.08667872e-03 7.18197378e-01 2.78713416e+03 +1.64000000e-04 2.51918355e-03 1.00236000e-01 1.16827249e-01 4.78752458e-02 6.24715637e-03 8.09778792e-03 7.18197378e-01 2.78871572e+03 +1.64100000e-04 2.39732629e-03 1.00073691e-01 1.16742494e-01 4.81725263e-02 6.30810301e-03 8.10848087e-03 7.18197378e-01 2.79019922e+03 +1.64200000e-04 2.27821016e-03 9.99145458e-02 1.16657082e-01 4.84647520e-02 6.36927832e-03 8.11875429e-03 7.18197378e-01 2.79175873e+03 +1.64300000e-04 2.16186187e-03 9.97585776e-02 1.16571069e-01 4.87518326e-02 6.43067659e-03 8.12860497e-03 7.18197378e-01 2.79328644e+03 +1.64400000e-04 2.04830765e-03 9.96058010e-02 1.16484512e-01 4.90336796e-02 6.49229200e-03 8.13802981e-03 7.18197378e-01 2.79470573e+03 +1.64500000e-04 1.93757326e-03 9.94562302e-02 1.16397469e-01 4.93102055e-02 6.55411868e-03 8.14702576e-03 7.18197378e-01 2.79588195e+03 +1.64600000e-04 1.82968396e-03 9.93098791e-02 1.16309994e-01 4.95813249e-02 6.61615071e-03 8.15558984e-03 7.18197378e-01 2.79731485e+03 +1.64700000e-04 1.72466452e-03 9.91667616e-02 1.16222141e-01 4.98469535e-02 6.67838209e-03 8.16371917e-03 7.18197378e-01 2.79871598e+03 +1.64800000e-04 1.62253922e-03 9.90268913e-02 1.16133965e-01 5.01070089e-02 6.74080676e-03 8.17141094e-03 7.18197378e-01 2.80054380e+03 +1.64900000e-04 1.52333183e-03 9.88902816e-02 1.16045518e-01 5.03614101e-02 6.80341863e-03 8.17866242e-03 7.18197378e-01 2.80166045e+03 +1.65000000e-04 1.42706561e-03 9.87569456e-02 1.15956851e-01 5.06100777e-02 6.86621151e-03 8.18547095e-03 7.18197378e-01 2.80275453e+03 +1.65100000e-04 1.33376333e-03 9.86268966e-02 1.15868015e-01 5.08529342e-02 6.92917919e-03 8.19183395e-03 7.18197378e-01 2.80382599e+03 +1.65200000e-04 1.24344723e-03 9.85001473e-02 1.15779060e-01 5.10899033e-02 6.99231539e-03 8.19774894e-03 7.18197378e-01 2.80487479e+03 +1.65300000e-04 1.15613905e-03 9.83767106e-02 1.15690035e-01 5.13209107e-02 7.05561378e-03 8.20321349e-03 7.18197378e-01 2.80651514e+03 +1.65400000e-04 1.07185999e-03 9.82565988e-02 1.15600986e-01 5.15458838e-02 7.11906797e-03 8.20822528e-03 7.18197378e-01 2.80809652e+03 +1.65500000e-04 9.90630735e-04 9.81398243e-02 1.15511962e-01 5.17647514e-02 7.18267155e-03 8.21278205e-03 7.18197378e-01 2.80961874e+03 +1.65600000e-04 9.12471456e-04 9.80263994e-02 1.15423007e-01 5.19774443e-02 7.24641803e-03 8.21688162e-03 7.18197378e-01 2.80961874e+03 +1.65700000e-04 8.37401779e-04 9.79163359e-02 1.15334167e-01 5.21838950e-02 7.31030089e-03 8.22052191e-03 7.18197378e-01 2.81108162e+03 +1.65800000e-04 7.65440800e-04 9.78096456e-02 1.15245484e-01 5.23840375e-02 7.37431357e-03 8.22370090e-03 7.18197378e-01 2.81248500e+03 +1.65900000e-04 6.96607079e-04 9.77063403e-02 1.15157001e-01 5.25778079e-02 7.43844946e-03 8.22641668e-03 7.18197378e-01 2.81248500e+03 +1.66000000e-04 6.30918637e-04 9.76064313e-02 1.15068759e-01 5.27651438e-02 7.50270190e-03 8.22866738e-03 7.18197378e-01 2.81382868e+03 +1.66100000e-04 5.68392950e-04 9.75099298e-02 1.14980799e-01 5.29459847e-02 7.56706422e-03 8.23045125e-03 7.18197378e-01 2.81511250e+03 +1.66200000e-04 5.09046948e-04 9.74168469e-02 1.14893160e-01 5.31202720e-02 7.63152969e-03 8.23176662e-03 7.18197378e-01 2.81511250e+03 +1.66300000e-04 4.52897012e-04 9.73271935e-02 1.14805880e-01 5.32879486e-02 7.69609154e-03 8.23261187e-03 7.18197378e-01 2.81633628e+03 +1.66400000e-04 3.99958971e-04 9.72409802e-02 1.14718995e-01 5.34489595e-02 7.76074299e-03 8.23298549e-03 7.18197378e-01 2.81749982e+03 +1.66500000e-04 3.50248098e-04 9.71582176e-02 1.14632542e-01 5.36032515e-02 7.82547721e-03 8.23288606e-03 7.18197378e-01 2.81860296e+03 +1.66600000e-04 3.03779107e-04 9.70789159e-02 1.14546554e-01 5.37507732e-02 7.89028734e-03 8.23231223e-03 7.18197378e-01 2.81860296e+03 +1.66700000e-04 2.60566154e-04 9.70030854e-02 1.14461066e-01 5.38914750e-02 7.95516649e-03 8.23126273e-03 7.18197378e-01 2.81937765e+03 +1.66800000e-04 2.20622827e-04 9.69307358e-02 1.14376110e-01 5.40253094e-02 8.02010777e-03 8.22973639e-03 7.18197378e-01 2.81992032e+03 +1.66900000e-04 1.83962150e-04 9.68618769e-02 1.14291716e-01 5.41522306e-02 8.08510423e-03 8.22773210e-03 7.18197378e-01 2.82095317e+03 +1.67000000e-04 1.50596575e-04 9.67965183e-02 1.14207915e-01 5.42721946e-02 8.15014891e-03 8.22524886e-03 7.18197378e-01 2.82144328e+03 +1.67100000e-04 1.20537983e-04 9.67346693e-02 1.14124735e-01 5.43851596e-02 8.21523483e-03 8.22228573e-03 7.18197378e-01 2.82191581e+03 +1.67200000e-04 9.37976807e-05 9.66763391e-02 1.14042203e-01 5.44910856e-02 8.28035499e-03 8.21884189e-03 7.18197378e-01 2.82243761e+03 +1.67300000e-04 7.03863951e-05 9.66215366e-02 1.13960346e-01 5.45899344e-02 8.34550238e-03 8.21491657e-03 7.18197378e-01 2.82300883e+03 +1.67400000e-04 5.03142736e-05 9.65702705e-02 1.13879189e-01 5.46816698e-02 8.41066996e-03 8.21050910e-03 7.18197378e-01 2.82351560e+03 +1.67500000e-04 3.35908803e-05 9.65225494e-02 1.13798755e-01 5.47662578e-02 8.47585068e-03 8.20561890e-03 7.18197378e-01 2.82409492e+03 +1.67600000e-04 2.02251932e-05 9.64783816e-02 1.13719066e-01 5.48436660e-02 8.54103748e-03 8.20024546e-03 7.18197378e-01 2.82450301e+03 +1.67700000e-04 1.02256020e-05 9.64377752e-02 1.13640146e-01 5.49138641e-02 8.60622330e-03 8.19438837e-03 7.18197378e-01 2.82500205e+03 +1.67800000e-04 3.59990518e-06 9.64007383e-02 1.13562012e-01 5.49768240e-02 8.67140104e-03 8.18804730e-03 7.18197378e-01 2.82536281e+03 +1.67900000e-04 3.55307571e-07 9.63672785e-02 1.13484683e-01 5.50325194e-02 8.73656363e-03 8.18122202e-03 7.18197378e-01 2.82582840e+03 +1.68000000e-04 -1.66789552e-12 9.63368755e-02 1.13408066e-01 5.50819929e-02 8.80170417e-03 8.17398396e-03 7.18197378e-01 2.82615257e+03 +1.68100000e-04 -1.66102637e-12 9.63068573e-02 1.13331567e-01 5.51306814e-02 8.86681927e-03 8.16669769e-03 7.18197378e-01 2.82653451e+03 +1.68200000e-04 -1.66215530e-12 9.62768508e-02 1.13255098e-01 5.51793505e-02 8.93190876e-03 8.15941428e-03 7.18197378e-01 2.82682525e+03 +1.68300000e-04 -1.66250794e-12 9.62468560e-02 1.13178660e-01 5.52280002e-02 8.99697255e-03 8.15213375e-03 7.18197378e-01 2.82746874e+03 +1.68400000e-04 -1.66267333e-12 9.62168730e-02 1.13102252e-01 5.52766305e-02 9.06201055e-03 8.14485611e-03 7.18197378e-01 2.82832138e+03 +1.68500000e-04 -1.66309645e-12 9.61869018e-02 1.13025875e-01 5.53252411e-02 9.12702268e-03 8.13758136e-03 7.18197378e-01 2.82832138e+03 +1.68600000e-04 -1.66357187e-12 9.61569424e-02 1.12949529e-01 5.53738321e-02 9.19200886e-03 8.13030951e-03 7.18197378e-01 2.82832138e+03 +1.68700000e-04 -1.66439804e-12 9.61269948e-02 1.12873214e-01 5.54224034e-02 9.25696900e-03 8.12304058e-03 7.18197378e-01 2.82917319e+03 +1.68800000e-04 -1.66546573e-12 9.60970591e-02 1.12796931e-01 5.54709548e-02 9.32190302e-03 8.11577457e-03 7.18197378e-01 2.82917319e+03 +1.68900000e-04 -1.66612429e-12 9.60671353e-02 1.12720678e-01 5.55194862e-02 9.38681083e-03 8.10851150e-03 7.18197378e-01 2.83002418e+03 +1.69000000e-04 -1.66708579e-12 9.60372234e-02 1.12644457e-01 5.55679977e-02 9.45169235e-03 8.10125136e-03 7.18197378e-01 2.83002418e+03 +1.69100000e-04 -1.66756519e-12 9.60073235e-02 1.12568268e-01 5.56164890e-02 9.51654750e-03 8.09399418e-03 7.18197378e-01 2.83002418e+03 +1.69200000e-04 -1.66796395e-12 9.59774354e-02 1.12492110e-01 5.56649601e-02 9.58137619e-03 8.08673996e-03 7.18197378e-01 2.83087433e+03 +1.69300000e-04 -1.66817882e-12 9.59475594e-02 1.12415985e-01 5.57134109e-02 9.64617834e-03 8.07948870e-03 7.18197378e-01 2.83087433e+03 +1.69400000e-04 -1.66820811e-12 9.59176954e-02 1.12339891e-01 5.57618414e-02 9.71095386e-03 8.07224043e-03 7.18197378e-01 2.83172365e+03 +1.69500000e-04 -1.66815523e-12 9.58878434e-02 1.12263830e-01 5.58102513e-02 9.77570268e-03 8.06499514e-03 7.18197378e-01 2.83172365e+03 +1.69600000e-04 -1.66808840e-12 9.58580034e-02 1.12187800e-01 5.58586407e-02 9.84042471e-03 8.05775285e-03 7.18197378e-01 2.83323859e+03 +1.69700000e-04 -1.66776268e-12 9.58281756e-02 1.12111804e-01 5.59070095e-02 9.90511986e-03 8.05051357e-03 7.18197378e-01 2.83323859e+03 +1.69800000e-04 -1.66735586e-12 9.57983598e-02 1.12035839e-01 5.59553576e-02 9.96978805e-03 8.04327731e-03 7.18197378e-01 2.83323859e+03 +1.69900000e-04 -1.66697455e-12 9.57685561e-02 1.11959908e-01 5.60036848e-02 1.00344292e-02 8.03604407e-03 7.18197378e-01 2.83323859e+03 +1.70000000e-04 -1.66676510e-12 9.57387646e-02 1.11884009e-01 5.60519911e-02 1.00990432e-02 8.02881387e-03 7.18197378e-01 2.83323859e+03 +1.70100000e-04 -1.66634537e-12 9.57089853e-02 1.11808144e-01 5.61002764e-02 1.01636301e-02 8.02158671e-03 7.18197378e-01 2.83475084e+03 +1.70200000e-04 -1.66585384e-12 9.56792181e-02 1.11732311e-01 5.61485406e-02 1.02281896e-02 8.01436261e-03 7.18197378e-01 2.83475084e+03 +1.70300000e-04 -1.66543940e-12 9.56494632e-02 1.11656512e-01 5.61967837e-02 1.02927218e-02 8.00714156e-03 7.18197378e-01 2.83475084e+03 +1.70400000e-04 -1.66518875e-12 9.56197205e-02 1.11580746e-01 5.62450054e-02 1.03572265e-02 7.99992359e-03 7.18197378e-01 2.83475084e+03 +1.70500000e-04 -1.66489038e-12 9.55899901e-02 1.11505014e-01 5.62932059e-02 1.04217036e-02 7.99270871e-03 7.18197378e-01 2.83672409e+03 +1.70600000e-04 -1.66435340e-12 9.55602720e-02 1.11429315e-01 5.63413849e-02 1.04861532e-02 7.98549691e-03 7.18197378e-01 2.83672409e+03 +1.70700000e-04 -1.66378721e-12 9.55305661e-02 1.11353650e-01 5.63895424e-02 1.05505750e-02 7.97828821e-03 7.18197378e-01 2.83672409e+03 +1.70800000e-04 -1.66324474e-12 9.55008726e-02 1.11278020e-01 5.64376783e-02 1.06149691e-02 7.97108262e-03 7.18197378e-01 2.83672409e+03 +1.70900000e-04 -1.66281172e-12 9.54711915e-02 1.11202423e-01 5.64857925e-02 1.06793353e-02 7.96388015e-03 7.18197378e-01 2.83672409e+03 +1.71000000e-04 -1.66261275e-12 9.54415228e-02 1.11126860e-01 5.65338849e-02 1.07436735e-02 7.95668081e-03 7.18197378e-01 2.83672409e+03 +1.71100000e-04 -1.66201536e-12 9.54118664e-02 1.11051332e-01 5.65819555e-02 1.08079837e-02 7.94948460e-03 7.18197378e-01 2.83869265e+03 +1.71200000e-04 -1.66134565e-12 9.53822225e-02 1.10975838e-01 5.66300040e-02 1.08722658e-02 7.94229155e-03 7.18197378e-01 2.83869265e+03 +1.71300000e-04 -1.66069451e-12 9.53525911e-02 1.10900379e-01 5.66780306e-02 1.09365197e-02 7.93510164e-03 7.18197378e-01 2.83869265e+03 +1.71400000e-04 -1.66013208e-12 9.53229721e-02 1.10824955e-01 5.67260350e-02 1.10007453e-02 7.92791490e-03 7.18197378e-01 2.83869265e+03 +1.71500000e-04 -1.65975488e-12 9.52933656e-02 1.10749565e-01 5.67740173e-02 1.10649425e-02 7.92073134e-03 7.18197378e-01 2.83869265e+03 +1.71600000e-04 -1.65949827e-12 9.52637717e-02 1.10674211e-01 5.68219772e-02 1.11291113e-02 7.91355095e-03 7.18197378e-01 2.84065648e+03 +1.71700000e-04 -1.65898494e-12 9.52341903e-02 1.10598892e-01 5.68699147e-02 1.11932516e-02 7.90637376e-03 7.18197378e-01 2.84065648e+03 +1.71800000e-04 -1.65851488e-12 9.52046214e-02 1.10523608e-01 5.69178298e-02 1.12573633e-02 7.89919977e-03 7.18197378e-01 2.84065648e+03 +1.71900000e-04 -1.65811534e-12 9.51750652e-02 1.10448359e-01 5.69657223e-02 1.13214463e-02 7.89202900e-03 7.18197378e-01 2.84065648e+03 +1.72000000e-04 -1.65782047e-12 9.51455216e-02 1.10373146e-01 5.70135922e-02 1.13855005e-02 7.88486144e-03 7.18197378e-01 2.84065648e+03 +1.72100000e-04 -1.65767205e-12 9.51159906e-02 1.10297969e-01 5.70614394e-02 1.14495258e-02 7.87769711e-03 7.18197378e-01 2.84065648e+03 +1.72200000e-04 -1.65752873e-12 9.50864724e-02 1.10222828e-01 5.71092638e-02 1.15135222e-02 7.87053601e-03 7.18197378e-01 2.84261554e+03 +1.72300000e-04 -1.65738557e-12 9.50569668e-02 1.10147722e-01 5.71570652e-02 1.15774896e-02 7.86337817e-03 7.18197378e-01 2.84261554e+03 +1.72400000e-04 -1.65729260e-12 9.50274739e-02 1.10072653e-01 5.72048437e-02 1.16414279e-02 7.85622358e-03 7.18197378e-01 2.84261554e+03 +1.72500000e-04 -1.65724218e-12 9.49979938e-02 1.09997620e-01 5.72525991e-02 1.17053370e-02 7.84907225e-03 7.18197378e-01 2.84261554e+03 +1.72600000e-04 -1.65722322e-12 9.49685264e-02 1.09922623e-01 5.73003314e-02 1.17692169e-02 7.84192420e-03 7.18197378e-01 2.84261554e+03 +1.72700000e-04 -1.65722510e-12 9.49390718e-02 1.09847663e-01 5.73480405e-02 1.18330674e-02 7.83477944e-03 7.18197378e-01 2.84456978e+03 +1.72800000e-04 -1.65728236e-12 9.49096301e-02 1.09772739e-01 5.73957262e-02 1.18968885e-02 7.82763796e-03 7.18197378e-01 2.84456978e+03 +1.72900000e-04 -1.65735848e-12 9.48802011e-02 1.09697853e-01 5.74433886e-02 1.19606801e-02 7.82049979e-03 7.18197378e-01 2.84456978e+03 +1.73000000e-04 -1.65744067e-12 9.48507851e-02 1.09623003e-01 5.74910274e-02 1.20244421e-02 7.81336493e-03 7.18197378e-01 2.84456978e+03 +1.73100000e-04 -1.65751377e-12 9.48213819e-02 1.09548190e-01 5.75386427e-02 1.20881744e-02 7.80623338e-03 7.18197378e-01 2.84456978e+03 +1.73200000e-04 -1.65756018e-12 9.47919916e-02 1.09473414e-01 5.75862344e-02 1.21518770e-02 7.79910517e-03 7.18197378e-01 2.84456978e+03 +1.73300000e-04 -1.65759941e-12 9.47626143e-02 1.09398675e-01 5.76338023e-02 1.22155498e-02 7.79198029e-03 7.18197378e-01 2.84651915e+03 +1.73400000e-04 -1.65765741e-12 9.47332500e-02 1.09323974e-01 5.76813464e-02 1.22791926e-02 7.78485877e-03 7.18197378e-01 2.84651915e+03 +1.73500000e-04 -1.65770298e-12 9.47038986e-02 1.09249311e-01 5.77288666e-02 1.23428055e-02 7.77774059e-03 7.18197378e-01 2.84651915e+03 +1.73600000e-04 -1.65773459e-12 9.46745602e-02 1.09174685e-01 5.77763628e-02 1.24063882e-02 7.77062578e-03 7.18197378e-01 2.84651915e+03 +1.73700000e-04 -1.65775233e-12 9.46452349e-02 1.09100097e-01 5.78238350e-02 1.24699409e-02 7.76351435e-03 7.18197378e-01 2.84651915e+03 +1.73800000e-04 -1.65775810e-12 9.46159226e-02 1.09025547e-01 5.78712830e-02 1.25334633e-02 7.75640630e-03 7.18197378e-01 2.84651915e+03 +1.73900000e-04 -1.65774346e-12 9.45866234e-02 1.08951035e-01 5.79187068e-02 1.25969554e-02 7.74930164e-03 7.18197378e-01 2.84846362e+03 +1.74000000e-04 -1.65771542e-12 9.45573373e-02 1.08876561e-01 5.79661063e-02 1.26604171e-02 7.74220038e-03 7.18197378e-01 2.84846362e+03 +1.74100000e-04 -1.65768015e-12 9.45280643e-02 1.08802126e-01 5.80134813e-02 1.27238483e-02 7.73510253e-03 7.18197378e-01 2.84846362e+03 +1.74200000e-04 -1.65764465e-12 9.44988045e-02 1.08727729e-01 5.80608319e-02 1.27872490e-02 7.72800810e-03 7.18197378e-01 2.84846362e+03 +1.74300000e-04 -1.65761816e-12 9.44695579e-02 1.08653370e-01 5.81081580e-02 1.28506190e-02 7.72091710e-03 7.18197378e-01 2.84846362e+03 +1.74400000e-04 -1.65758691e-12 9.44403244e-02 1.08579050e-01 5.81554594e-02 1.29139583e-02 7.71382953e-03 7.18197378e-01 2.85158342e+03 +1.74500000e-04 -1.65748436e-12 9.44111042e-02 1.08504770e-01 5.82027361e-02 1.29772669e-02 7.70674541e-03 7.18197378e-01 2.85158342e+03 +1.74600000e-04 -1.65736097e-12 9.43818973e-02 1.08430528e-01 5.82499880e-02 1.30405445e-02 7.69966475e-03 7.18197378e-01 2.85158342e+03 +1.74700000e-04 -1.65722055e-12 9.43527036e-02 1.08356325e-01 5.82972150e-02 1.31037912e-02 7.69258755e-03 7.18197378e-01 2.85158342e+03 +1.74800000e-04 -1.65706911e-12 9.43235232e-02 1.08282161e-01 5.83444170e-02 1.31670069e-02 7.68551382e-03 7.18197378e-01 2.85158342e+03 +1.74900000e-04 -1.65691518e-12 9.42943562e-02 1.08208037e-01 5.83915940e-02 1.32301915e-02 7.67844357e-03 7.18197378e-01 2.85158342e+03 +1.75000000e-04 -1.65677005e-12 9.42652025e-02 1.08133952e-01 5.84387458e-02 1.32933448e-02 7.67137681e-03 7.18197378e-01 2.85158342e+03 +1.75100000e-04 -1.65664810e-12 9.42360621e-02 1.08059907e-01 5.84858725e-02 1.33564669e-02 7.66431355e-03 7.18197378e-01 2.85158342e+03 +1.75200000e-04 -1.65656707e-12 9.42069352e-02 1.07985902e-01 5.85329739e-02 1.34195577e-02 7.65725380e-03 7.18197378e-01 2.85158342e+03 +1.75300000e-04 -1.65649566e-12 9.41778217e-02 1.07911936e-01 5.85800499e-02 1.34826170e-02 7.65019757e-03 7.18197378e-01 2.85469019e+03 +1.75400000e-04 -1.65628098e-12 9.41487216e-02 1.07838010e-01 5.86271004e-02 1.35456448e-02 7.64314486e-03 7.18197378e-01 2.85469019e+03 +1.75500000e-04 -1.65605471e-12 9.41196350e-02 1.07764125e-01 5.86741254e-02 1.36086410e-02 7.63609569e-03 7.18197378e-01 2.85469019e+03 +1.75600000e-04 -1.65582282e-12 9.40905619e-02 1.07690280e-01 5.87211248e-02 1.36716056e-02 7.62905006e-03 7.18197378e-01 2.85469019e+03 +1.75700000e-04 -1.65559309e-12 9.40615023e-02 1.07616475e-01 5.87680986e-02 1.37345384e-02 7.62200798e-03 7.18197378e-01 2.85469019e+03 +1.75800000e-04 -1.65537535e-12 9.40324563e-02 1.07542710e-01 5.88150465e-02 1.37974394e-02 7.61496946e-03 7.18197378e-01 2.85469019e+03 +1.75900000e-04 -1.65518163e-12 9.40034238e-02 1.07468987e-01 5.88619686e-02 1.38603085e-02 7.60793452e-03 7.18197378e-01 2.85469019e+03 +1.76000000e-04 -1.65502637e-12 9.39744049e-02 1.07395304e-01 5.89088648e-02 1.39231456e-02 7.60090315e-03 7.18197378e-01 2.85469019e+03 +1.76100000e-04 -1.65492660e-12 9.39453997e-02 1.07321662e-01 5.89557350e-02 1.39859506e-02 7.59387537e-03 7.18197378e-01 2.85469019e+03 +1.76200000e-04 -1.65485808e-12 9.39164081e-02 1.07248060e-01 5.90025790e-02 1.40487235e-02 7.58685118e-03 7.18197378e-01 2.85778374e+03 +1.76300000e-04 -1.65466583e-12 9.38874301e-02 1.07174500e-01 5.90493970e-02 1.41114642e-02 7.57983060e-03 7.18197378e-01 2.85778374e+03 +1.76400000e-04 -1.65447948e-12 9.38584659e-02 1.07100981e-01 5.90961886e-02 1.41741726e-02 7.57281364e-03 7.18197378e-01 2.85778374e+03 +1.76500000e-04 -1.65430243e-12 9.38295153e-02 1.07027504e-01 5.91429540e-02 1.42368486e-02 7.56580030e-03 7.18197378e-01 2.85778374e+03 +1.76600000e-04 -1.65413868e-12 9.38005785e-02 1.06954068e-01 5.91896929e-02 1.42994922e-02 7.55879058e-03 7.18197378e-01 2.85778374e+03 +1.76700000e-04 -1.65399282e-12 9.37716555e-02 1.06880673e-01 5.92364054e-02 1.43621033e-02 7.55178451e-03 7.18197378e-01 2.85778374e+03 +1.76800000e-04 -1.65387007e-12 9.37427462e-02 1.06807321e-01 5.92830913e-02 1.44246817e-02 7.54478209e-03 7.18197378e-01 2.85778374e+03 +1.76900000e-04 -1.65377635e-12 9.37138508e-02 1.06734010e-01 5.93297506e-02 1.44872274e-02 7.53778332e-03 7.18197378e-01 2.85778374e+03 +1.77000000e-04 -1.65371834e-12 9.36849692e-02 1.06660741e-01 5.93763832e-02 1.45497404e-02 7.53078823e-03 7.18197378e-01 2.85778374e+03 +1.77100000e-04 -1.65368793e-12 9.36561015e-02 1.06587514e-01 5.94229890e-02 1.46122206e-02 7.52379680e-03 7.18197378e-01 2.86086388e+03 +1.77200000e-04 -1.65361647e-12 9.36272476e-02 1.06514330e-01 5.94695679e-02 1.46746678e-02 7.51680906e-03 7.18197378e-01 2.86086388e+03 +1.77300000e-04 -1.65355749e-12 9.35984077e-02 1.06441188e-01 5.95161199e-02 1.47370820e-02 7.50982501e-03 7.18197378e-01 2.86086388e+03 +1.77400000e-04 -1.65351052e-12 9.35695817e-02 1.06368088e-01 5.95626448e-02 1.47994632e-02 7.50284466e-03 7.18197378e-01 2.86086388e+03 +1.77500000e-04 -1.65347481e-12 9.35407697e-02 1.06295031e-01 5.96091426e-02 1.48618112e-02 7.49586803e-03 7.18197378e-01 2.86086388e+03 +1.77600000e-04 -1.65344937e-12 9.35119716e-02 1.06222016e-01 5.96556133e-02 1.49241259e-02 7.48889511e-03 7.18197378e-01 2.86086388e+03 +1.77700000e-04 -1.65343288e-12 9.34831876e-02 1.06149044e-01 5.97020567e-02 1.49864074e-02 7.48192591e-03 7.18197378e-01 2.86086388e+03 +1.77800000e-04 -1.65342374e-12 9.34544176e-02 1.06076116e-01 5.97484728e-02 1.50486555e-02 7.47496045e-03 7.18197378e-01 2.86086388e+03 +1.77900000e-04 -1.65342000e-12 9.34256617e-02 1.06003230e-01 5.97948615e-02 1.51108701e-02 7.46799874e-03 7.18197378e-01 2.86086388e+03 +1.78000000e-04 -1.65342157e-12 9.33969198e-02 1.05930388e-01 5.98412227e-02 1.51730512e-02 7.46104078e-03 7.18197378e-01 2.86393042e+03 +1.78100000e-04 -1.65343930e-12 9.33681921e-02 1.05857588e-01 5.98875563e-02 1.52351987e-02 7.45408658e-03 7.18197378e-01 2.86393042e+03 +1.78200000e-04 -1.65346252e-12 9.33394785e-02 1.05784833e-01 5.99338623e-02 1.52973125e-02 7.44713615e-03 7.18197378e-01 2.86393042e+03 +1.78300000e-04 -1.65348959e-12 9.33107791e-02 1.05712120e-01 5.99801406e-02 1.53593925e-02 7.44018950e-03 7.18197378e-01 2.86393042e+03 +1.78400000e-04 -1.65351869e-12 9.32820938e-02 1.05639452e-01 6.00263912e-02 1.54214387e-02 7.43324663e-03 7.18197378e-01 2.86393042e+03 +1.78500000e-04 -1.65354779e-12 9.32534227e-02 1.05566827e-01 6.00726138e-02 1.54834510e-02 7.42630756e-03 7.18197378e-01 2.86393042e+03 +1.78600000e-04 -1.65357464e-12 9.32247659e-02 1.05494246e-01 6.01188085e-02 1.55454292e-02 7.41937229e-03 7.18197378e-01 2.86393042e+03 +1.78700000e-04 -1.65359679e-12 9.31961234e-02 1.05421709e-01 6.01649752e-02 1.56073734e-02 7.41244084e-03 7.18197378e-01 2.86393042e+03 +1.78800000e-04 -1.65361156e-12 9.31674951e-02 1.05349217e-01 6.02111138e-02 1.56692835e-02 7.40551321e-03 7.18197378e-01 2.86393042e+03 +1.78900000e-04 -1.65361925e-12 9.31388811e-02 1.05276768e-01 6.02572243e-02 1.57311593e-02 7.39858941e-03 7.18197378e-01 2.86698316e+03 +1.79000000e-04 -1.65364249e-12 9.31102815e-02 1.05204364e-01 6.03033065e-02 1.57930008e-02 7.39166944e-03 7.18197378e-01 2.86698316e+03 +1.79100000e-04 -1.65366342e-12 9.30816962e-02 1.05132004e-01 6.03493604e-02 1.58548080e-02 7.38475332e-03 7.18197378e-01 2.86698316e+03 +1.79200000e-04 -1.65368163e-12 9.30531253e-02 1.05059689e-01 6.03953859e-02 1.59165807e-02 7.37784106e-03 7.18197378e-01 2.86698316e+03 +1.79300000e-04 -1.65369682e-12 9.30245689e-02 1.04987419e-01 6.04413830e-02 1.59783189e-02 7.37093266e-03 7.18197378e-01 2.86698316e+03 +1.79400000e-04 -1.65370881e-12 9.29960268e-02 1.04915193e-01 6.04873515e-02 1.60400225e-02 7.36402813e-03 7.18197378e-01 2.86698316e+03 +1.79500000e-04 -1.65371760e-12 9.29674992e-02 1.04843013e-01 6.05332915e-02 1.61016914e-02 7.35712749e-03 7.18197378e-01 2.86698316e+03 +1.79600000e-04 -1.65372332e-12 9.29389861e-02 1.04770877e-01 6.05792027e-02 1.61633255e-02 7.35023073e-03 7.18197378e-01 2.86698316e+03 +1.79700000e-04 -1.65372630e-12 9.29104875e-02 1.04698787e-01 6.06250852e-02 1.62249248e-02 7.34333786e-03 7.18197378e-01 2.86698316e+03 +1.79800000e-04 -1.65372663e-12 9.28820034e-02 1.04626742e-01 6.06709389e-02 1.62864892e-02 7.33644891e-03 7.18197378e-01 2.87002191e+03 +1.79900000e-04 -1.65372050e-12 9.28535339e-02 1.04554742e-01 6.07167636e-02 1.63480187e-02 7.32956387e-03 7.18197378e-01 2.87002191e+03 +1.80000000e-04 -1.65371134e-12 9.28250789e-02 1.04482788e-01 6.07625594e-02 1.64095131e-02 7.32268275e-03 7.18197378e-01 2.87002191e+03 +1.80100000e-04 -1.65369976e-12 9.27966386e-02 1.04410879e-01 6.08083262e-02 1.64709723e-02 7.31580556e-03 7.18197378e-01 2.87002191e+03 +1.80200000e-04 -1.65368654e-12 9.27682129e-02 1.04339017e-01 6.08540638e-02 1.65323964e-02 7.30893231e-03 7.18197378e-01 2.87002191e+03 +1.80300000e-04 -1.65367265e-12 9.27398019e-02 1.04267200e-01 6.08997722e-02 1.65937852e-02 7.30206300e-03 7.18197378e-01 2.87002191e+03 +1.80400000e-04 -1.65365927e-12 9.27114055e-02 1.04195429e-01 6.09454514e-02 1.66551386e-02 7.29519766e-03 7.18197378e-01 2.87002191e+03 +1.80500000e-04 -1.65364775e-12 9.26830238e-02 1.04123704e-01 6.09911013e-02 1.67164566e-02 7.28833627e-03 7.18197378e-01 2.87002191e+03 +1.80600000e-04 -1.65363969e-12 9.26546569e-02 1.04052026e-01 6.10367217e-02 1.67777391e-02 7.28147886e-03 7.18197378e-01 2.87002191e+03 +1.80700000e-04 -1.65363576e-12 9.26263047e-02 1.03980393e-01 6.10823127e-02 1.68389860e-02 7.27462543e-03 7.18197378e-01 2.87304646e+03 +1.80800000e-04 -1.65361951e-12 9.25979673e-02 1.03908807e-01 6.11278741e-02 1.69001973e-02 7.26777599e-03 7.18197378e-01 2.87304646e+03 +1.80900000e-04 -1.65360340e-12 9.25696447e-02 1.03837268e-01 6.11734059e-02 1.69613729e-02 7.26093055e-03 7.18197378e-01 2.87304646e+03 +1.81000000e-04 -1.65358787e-12 9.25413370e-02 1.03765775e-01 6.12189079e-02 1.70225126e-02 7.25408911e-03 7.18197378e-01 2.87304646e+03 +1.81100000e-04 -1.65357339e-12 9.25130441e-02 1.03694330e-01 6.12643803e-02 1.70836165e-02 7.24725168e-03 7.18197378e-01 2.87304646e+03 +1.81200000e-04 -1.65356044e-12 9.24847661e-02 1.03622931e-01 6.13098228e-02 1.71446845e-02 7.24041828e-03 7.18197378e-01 2.87304646e+03 +1.81300000e-04 -1.65354952e-12 9.24565029e-02 1.03551579e-01 6.13552354e-02 1.72057164e-02 7.23358891e-03 7.18197378e-01 2.87304646e+03 +1.81400000e-04 -1.65354112e-12 9.24282547e-02 1.03480274e-01 6.14006180e-02 1.72667123e-02 7.22676357e-03 7.18197378e-01 2.87304646e+03 +1.81500000e-04 -1.65353576e-12 9.24000215e-02 1.03409016e-01 6.14459705e-02 1.73276720e-02 7.21994228e-03 7.18197378e-01 2.87304646e+03 +1.81600000e-04 -1.65353377e-12 9.23718032e-02 1.03337805e-01 6.14912930e-02 1.73885954e-02 7.21312505e-03 7.18197378e-01 2.87605661e+03 +1.81700000e-04 -1.65352965e-12 9.23436000e-02 1.03266642e-01 6.15365852e-02 1.74494826e-02 7.20631188e-03 7.18197378e-01 2.87605661e+03 +1.81800000e-04 -1.65352722e-12 9.23154117e-02 1.03195527e-01 6.15818472e-02 1.75103333e-02 7.19950278e-03 7.18197378e-01 2.87605661e+03 +1.81900000e-04 -1.65352633e-12 9.22872386e-02 1.03124459e-01 6.16270789e-02 1.75711476e-02 7.19269776e-03 7.18197378e-01 2.87605661e+03 +1.82000000e-04 -1.65352677e-12 9.22590805e-02 1.03053439e-01 6.16722802e-02 1.76319254e-02 7.18589683e-03 7.18197378e-01 2.87605661e+03 +1.82100000e-04 -1.65352827e-12 9.22309375e-02 1.02982467e-01 6.17174510e-02 1.76926666e-02 7.17909999e-03 7.18197378e-01 2.87605661e+03 +1.82200000e-04 -1.65353043e-12 9.22028096e-02 1.02911543e-01 6.17625913e-02 1.77533711e-02 7.17230726e-03 7.18197378e-01 2.87605661e+03 +1.82300000e-04 -1.65353276e-12 9.21746969e-02 1.02840667e-01 6.18077010e-02 1.78140388e-02 7.16551864e-03 7.18197378e-01 2.87605661e+03 +1.82400000e-04 -1.65353467e-12 9.21465994e-02 1.02769839e-01 6.18527800e-02 1.78746698e-02 7.15873414e-03 7.18197378e-01 2.87605661e+03 +1.82500000e-04 -1.65353554e-12 9.21185170e-02 1.02699059e-01 6.18978283e-02 1.79352638e-02 7.15195376e-03 7.18197378e-01 2.87905217e+03 +1.82600000e-04 -1.65354208e-12 9.20904499e-02 1.02628328e-01 6.19428457e-02 1.79958209e-02 7.14517752e-03 7.18197378e-01 2.87905217e+03 +1.82700000e-04 -1.65354930e-12 9.20623981e-02 1.02557645e-01 6.19878323e-02 1.80563410e-02 7.13840543e-03 7.18197378e-01 2.87905217e+03 +1.82800000e-04 -1.65355690e-12 9.20343615e-02 1.02487011e-01 6.20327879e-02 1.81168239e-02 7.13163749e-03 7.18197378e-01 2.87905217e+03 +1.82900000e-04 -1.65356455e-12 9.20063403e-02 1.02416426e-01 6.20777126e-02 1.81772697e-02 7.12487371e-03 7.18197378e-01 2.87905217e+03 +1.83000000e-04 -1.65357189e-12 9.19783343e-02 1.02345889e-01 6.21226061e-02 1.82376782e-02 7.11811409e-03 7.18197378e-01 2.87905217e+03 +1.83100000e-04 -1.65357849e-12 9.19503437e-02 1.02275402e-01 6.21674685e-02 1.82980494e-02 7.11135866e-03 7.18197378e-01 2.87905217e+03 +1.83200000e-04 -1.65358390e-12 9.19223685e-02 1.02204963e-01 6.22122997e-02 1.83583832e-02 7.10460740e-03 7.18197378e-01 2.87905217e+03 +1.83300000e-04 -1.65358759e-12 9.18944087e-02 1.02134574e-01 6.22570996e-02 1.84186796e-02 7.09786034e-03 7.18197378e-01 2.87905217e+03 +1.83400000e-04 -1.65358899e-12 9.18664643e-02 1.02064234e-01 6.23018681e-02 1.84789384e-02 7.09111748e-03 7.18197378e-01 2.87905217e+03 +1.83500000e-04 -1.65359390e-12 9.18385354e-02 1.01993943e-01 6.23466052e-02 1.85391596e-02 7.08437883e-03 7.18197378e-01 2.88203294e+03 +1.83600000e-04 -1.65359835e-12 9.18106219e-02 1.01923702e-01 6.23913109e-02 1.85993431e-02 7.07764439e-03 7.18197378e-01 2.88203294e+03 +1.83700000e-04 -1.65360218e-12 9.17827240e-02 1.01853510e-01 6.24359850e-02 1.86594889e-02 7.07091418e-03 7.18197378e-01 2.88203294e+03 +1.83800000e-04 -1.65360535e-12 9.17548416e-02 1.01783368e-01 6.24806274e-02 1.87195968e-02 7.06418820e-03 7.18197378e-01 2.88203294e+03 +1.83900000e-04 -1.65360784e-12 9.17269747e-02 1.01713276e-01 6.25252382e-02 1.87796669e-02 7.05746646e-03 7.18197378e-01 2.88203294e+03 +1.84000000e-04 -1.65360967e-12 9.16991234e-02 1.01643233e-01 6.25698173e-02 1.88396990e-02 7.05074896e-03 7.18197378e-01 2.88203294e+03 +1.84100000e-04 -1.65361088e-12 9.16712877e-02 1.01573241e-01 6.26143645e-02 1.88996931e-02 7.04403572e-03 7.18197378e-01 2.88203294e+03 +1.84200000e-04 -1.65361153e-12 9.16434676e-02 1.01503299e-01 6.26588799e-02 1.89596491e-02 7.03732675e-03 7.18197378e-01 2.88203294e+03 +1.84300000e-04 -1.65361173e-12 9.16156632e-02 1.01433407e-01 6.27033633e-02 1.90195669e-02 7.03062204e-03 7.18197378e-01 2.88203294e+03 +1.84400000e-04 -1.65361127e-12 9.15878745e-02 1.01363565e-01 6.27478147e-02 1.90794465e-02 7.02392162e-03 7.18197378e-01 2.88415323e+03 +1.84500000e-04 -1.65361041e-12 9.15601015e-02 1.01293773e-01 6.27922340e-02 1.91392877e-02 7.01722548e-03 7.18197378e-01 2.88415323e+03 +1.84600000e-04 -1.65360933e-12 9.15323442e-02 1.01224033e-01 6.28366212e-02 1.91990906e-02 7.01053363e-03 7.18197378e-01 2.88415323e+03 +1.84700000e-04 -1.65360818e-12 9.15046026e-02 1.01154342e-01 6.28809762e-02 1.92588551e-02 7.00384609e-03 7.18197378e-01 2.88415323e+03 +1.84800000e-04 -1.65360717e-12 9.14768768e-02 1.01084703e-01 6.29252989e-02 1.93185810e-02 6.99716286e-03 7.18197378e-01 2.88415323e+03 +1.84900000e-04 -1.65360654e-12 9.14491668e-02 1.01015114e-01 6.29695892e-02 1.93782683e-02 6.99048395e-03 7.18197378e-01 2.88415323e+03 +1.85000000e-04 -1.65360613e-12 9.14214727e-02 1.00945576e-01 6.30138472e-02 1.94379170e-02 6.98380936e-03 7.18197378e-01 2.88570482e+03 +1.85100000e-04 -1.65360565e-12 9.13937944e-02 1.00876089e-01 6.30580727e-02 1.94975270e-02 6.97713911e-03 7.18197378e-01 2.88570482e+03 +1.85200000e-04 -1.65360536e-12 9.13661319e-02 1.00806653e-01 6.31022657e-02 1.95570981e-02 6.97047319e-03 7.18197378e-01 2.88570482e+03 +1.85300000e-04 -1.65360525e-12 9.13384854e-02 1.00737269e-01 6.31464261e-02 1.96166304e-02 6.96381163e-03 7.18197378e-01 2.88570482e+03 +1.85400000e-04 -1.65360524e-12 9.13108548e-02 1.00667935e-01 6.31905538e-02 1.96761237e-02 6.95715442e-03 7.18197378e-01 2.88570482e+03 +1.85500000e-04 -1.65360547e-12 9.12832402e-02 1.00598653e-01 6.32346488e-02 1.97355781e-02 6.95050158e-03 7.18197378e-01 2.88725221e+03 +1.85600000e-04 -1.65360588e-12 9.12556415e-02 1.00529423e-01 6.32787111e-02 1.97949934e-02 6.94385310e-03 7.18197378e-01 2.88725221e+03 +1.85700000e-04 -1.65360633e-12 9.12280588e-02 1.00460244e-01 6.33227405e-02 1.98543695e-02 6.93720901e-03 7.18197378e-01 2.88725221e+03 +1.85800000e-04 -1.65360671e-12 9.12004921e-02 1.00391117e-01 6.33667370e-02 1.99137065e-02 6.93056931e-03 7.18197378e-01 2.88725221e+03 +1.85900000e-04 -1.65360687e-12 9.11729415e-02 1.00322042e-01 6.34107005e-02 1.99730041e-02 6.92393399e-03 7.18197378e-01 2.88879539e+03 +1.86000000e-04 -1.65360727e-12 9.11454070e-02 1.00253019e-01 6.34546310e-02 2.00322625e-02 6.91730309e-03 7.18197378e-01 2.88879539e+03 +1.86100000e-04 -1.65360761e-12 9.11178886e-02 1.00184047e-01 6.34985285e-02 2.00914814e-02 6.91067659e-03 7.18197378e-01 2.88879539e+03 +1.86200000e-04 -1.65360786e-12 9.10903863e-02 1.00115128e-01 6.35423927e-02 2.01506608e-02 6.90405451e-03 7.18197378e-01 2.88879539e+03 +1.86300000e-04 -1.65360800e-12 9.10629001e-02 1.00046261e-01 6.35862238e-02 2.02098007e-02 6.89743685e-03 7.18197378e-01 2.88879539e+03 +1.86400000e-04 -1.65360803e-12 9.10354301e-02 9.99774459e-02 6.36300215e-02 2.02689010e-02 6.89082363e-03 7.18197378e-01 2.89033431e+03 +1.86500000e-04 -1.65360798e-12 9.10079764e-02 9.99086834e-02 6.36737860e-02 2.03279616e-02 6.88421485e-03 7.18197378e-01 2.89033431e+03 +1.86600000e-04 -1.65360787e-12 9.09805388e-02 9.98399734e-02 6.37175170e-02 2.03869824e-02 6.87761051e-03 7.18197378e-01 2.89033431e+03 +1.86700000e-04 -1.65360772e-12 9.09531175e-02 9.97713160e-02 6.37612146e-02 2.04459634e-02 6.87101063e-03 7.18197378e-01 2.89033431e+03 +1.86800000e-04 -1.65360762e-12 9.09257124e-02 9.97027113e-02 6.38048787e-02 2.05049046e-02 6.86441522e-03 7.18197378e-01 2.89033431e+03 +1.86900000e-04 -1.65360748e-12 9.08983237e-02 9.96341593e-02 6.38485091e-02 2.05638058e-02 6.85782427e-03 7.18197378e-01 2.89186895e+03 +1.87000000e-04 -1.65360725e-12 9.08709513e-02 9.95656601e-02 6.38921060e-02 2.06226670e-02 6.85123780e-03 7.18197378e-01 2.89186895e+03 +1.87100000e-04 -1.65360703e-12 9.08435952e-02 9.94972140e-02 6.39356691e-02 2.06814881e-02 6.84465582e-03 7.18197378e-01 2.89186895e+03 +1.87200000e-04 -1.65360686e-12 9.08162555e-02 9.94288208e-02 6.39791985e-02 2.07402690e-02 6.83807833e-03 7.18197378e-01 2.89186895e+03 +1.87300000e-04 -1.65360678e-12 9.07889322e-02 9.93604808e-02 6.40226940e-02 2.07990098e-02 6.83150534e-03 7.18197378e-01 2.89186895e+03 +1.87400000e-04 -1.65360670e-12 9.07616253e-02 9.92921941e-02 6.40661557e-02 2.08577102e-02 6.82493685e-03 7.18197378e-01 2.89339928e+03 +1.87500000e-04 -1.65360664e-12 9.07343349e-02 9.92239607e-02 6.41095834e-02 2.09163703e-02 6.81837288e-03 7.18197378e-01 2.89339928e+03 +1.87600000e-04 -1.65360662e-12 9.07070609e-02 9.91557807e-02 6.41529771e-02 2.09749900e-02 6.81181344e-03 7.18197378e-01 2.89339928e+03 +1.87700000e-04 -1.65360662e-12 9.06798034e-02 9.90876542e-02 6.41963368e-02 2.10335692e-02 6.80525852e-03 7.18197378e-01 2.89339928e+03 +1.87800000e-04 -1.65360663e-12 9.06525625e-02 9.90195813e-02 6.42396624e-02 2.10921079e-02 6.79870814e-03 7.18197378e-01 2.89492527e+03 +1.87900000e-04 -1.65360670e-12 9.06253381e-02 9.89515621e-02 6.42829538e-02 2.11506059e-02 6.79216230e-03 7.18197378e-01 2.89492527e+03 +1.88000000e-04 -1.65360680e-12 9.05981303e-02 9.88835966e-02 6.43262109e-02 2.12090633e-02 6.78562102e-03 7.18197378e-01 2.89492527e+03 +1.88100000e-04 -1.65360688e-12 9.05709390e-02 9.88156851e-02 6.43694338e-02 2.12674800e-02 6.77908429e-03 7.18197378e-01 2.89492527e+03 +1.88200000e-04 -1.65360695e-12 9.05437644e-02 9.87478275e-02 6.44126223e-02 2.13258558e-02 6.77255213e-03 7.18197378e-01 2.89492527e+03 +1.88300000e-04 -1.65360699e-12 9.05166064e-02 9.86800240e-02 6.44557764e-02 2.13841908e-02 6.76602455e-03 7.18197378e-01 2.89644689e+03 +1.88400000e-04 -1.65360706e-12 9.04894651e-02 9.86122747e-02 6.44988960e-02 2.14424848e-02 6.75950154e-03 7.18197378e-01 2.89644689e+03 +1.88500000e-04 -1.65360712e-12 9.04623405e-02 9.85445796e-02 6.45419811e-02 2.15007378e-02 6.75298313e-03 7.18197378e-01 2.89644689e+03 +1.88600000e-04 -1.65360716e-12 9.04352326e-02 9.84769388e-02 6.45850316e-02 2.15589498e-02 6.74646930e-03 7.18197378e-01 2.89644689e+03 +1.88700000e-04 -1.65360718e-12 9.04081415e-02 9.84093525e-02 6.46280475e-02 2.16171206e-02 6.73996008e-03 7.18197378e-01 2.89644689e+03 +1.88800000e-04 -1.65360718e-12 9.03810671e-02 9.83418206e-02 6.46710287e-02 2.16752502e-02 6.73345547e-03 7.18197378e-01 2.89796411e+03 +1.88900000e-04 -1.65360716e-12 9.03540095e-02 9.82743434e-02 6.47139751e-02 2.17333386e-02 6.72695548e-03 7.18197378e-01 2.89796411e+03 +1.89000000e-04 -1.65360714e-12 9.03269687e-02 9.82069209e-02 6.47568868e-02 2.17913857e-02 6.72046011e-03 7.18197378e-01 2.89796411e+03 +1.89100000e-04 -1.65360711e-12 9.02999448e-02 9.81395531e-02 6.47997635e-02 2.18493913e-02 6.71396937e-03 7.18197378e-01 2.89796411e+03 +1.89200000e-04 -1.65360710e-12 9.02729377e-02 9.80722402e-02 6.48426054e-02 2.19073556e-02 6.70748327e-03 7.18197378e-01 2.89796411e+03 +1.89300000e-04 -1.65360707e-12 9.02459475e-02 9.80049823e-02 6.48854123e-02 2.19652783e-02 6.70100182e-03 7.18197378e-01 2.89947690e+03 +1.89400000e-04 -1.65360703e-12 9.02189743e-02 9.79377794e-02 6.49281841e-02 2.20231594e-02 6.69452502e-03 7.18197378e-01 2.89947690e+03 +1.89500000e-04 -1.65360699e-12 9.01920179e-02 9.78706316e-02 6.49709209e-02 2.20809989e-02 6.68805287e-03 7.18197378e-01 2.89947690e+03 +1.89600000e-04 -1.65360697e-12 9.01650786e-02 9.78035390e-02 6.50136225e-02 2.21387967e-02 6.68158540e-03 7.18197378e-01 2.89947690e+03 +1.89700000e-04 -1.65360696e-12 9.01381562e-02 9.77365018e-02 6.50562889e-02 2.21965527e-02 6.67512260e-03 7.18197378e-01 2.90098524e+03 +1.89800000e-04 -1.65360694e-12 9.01112509e-02 9.76695199e-02 6.50989200e-02 2.22542669e-02 6.66866447e-03 7.18197378e-01 2.90098524e+03 +1.89900000e-04 -1.65360694e-12 9.00843625e-02 9.76025935e-02 6.51415159e-02 2.23119392e-02 6.66221104e-03 7.18197378e-01 2.90098524e+03 +1.90000000e-04 -1.65360694e-12 9.00574913e-02 9.75357227e-02 6.51840764e-02 2.23695695e-02 6.65576230e-03 7.18197378e-01 2.90098524e+03 +1.90100000e-04 -1.65360694e-12 9.00306371e-02 9.74689075e-02 6.52266015e-02 2.24271578e-02 6.64931826e-03 7.18197378e-01 2.90098524e+03 +1.90200000e-04 -1.65360694e-12 9.00038000e-02 9.74021481e-02 6.52690911e-02 2.24847041e-02 6.64287893e-03 7.18197378e-01 2.90248909e+03 +1.90300000e-04 -1.65360696e-12 8.99769801e-02 9.73354445e-02 6.53115451e-02 2.25422082e-02 6.63644432e-03 7.18197378e-01 2.90248909e+03 +1.90400000e-04 -1.65360698e-12 8.99501773e-02 9.72687967e-02 6.53539636e-02 2.25996700e-02 6.63001443e-03 7.18197378e-01 2.90248909e+03 +1.90500000e-04 -1.65360699e-12 8.99233917e-02 9.72022050e-02 6.53963465e-02 2.26570897e-02 6.62358927e-03 7.18197378e-01 2.90248909e+03 +1.90600000e-04 -1.65360700e-12 8.98966234e-02 9.71356693e-02 6.54386937e-02 2.27144670e-02 6.61716884e-03 7.18197378e-01 2.90248909e+03 +1.90700000e-04 -1.65360701e-12 8.98698722e-02 9.70691898e-02 6.54810051e-02 2.27718019e-02 6.61075316e-03 7.18197378e-01 2.90398842e+03 +1.90800000e-04 -1.65360702e-12 8.98431383e-02 9.70027665e-02 6.55232808e-02 2.28290943e-02 6.60434223e-03 7.18197378e-01 2.90398842e+03 +1.90900000e-04 -1.65360703e-12 8.98164217e-02 9.69363995e-02 6.55655206e-02 2.28863443e-02 6.59793606e-03 7.18197378e-01 2.90398842e+03 +1.91000000e-04 -1.65360704e-12 8.97897224e-02 9.68700889e-02 6.56077245e-02 2.29435517e-02 6.59153465e-03 7.18197378e-01 2.90398842e+03 +1.91100000e-04 -1.65360704e-12 8.97630405e-02 9.68038349e-02 6.56498924e-02 2.30007164e-02 6.58513801e-03 7.18197378e-01 2.90398842e+03 +1.91200000e-04 -1.65360704e-12 8.97363759e-02 9.67376373e-02 6.56920244e-02 2.30578384e-02 6.57874615e-03 7.18197378e-01 2.90548321e+03 +1.91300000e-04 -1.65360703e-12 8.97097286e-02 9.66714965e-02 6.57341203e-02 2.31149177e-02 6.57235907e-03 7.18197378e-01 2.90548321e+03 +1.91400000e-04 -1.65360703e-12 8.96830988e-02 9.66054123e-02 6.57761801e-02 2.31719542e-02 6.56597678e-03 7.18197378e-01 2.90548321e+03 +1.91500000e-04 -1.65360702e-12 8.96564864e-02 9.65393850e-02 6.58182037e-02 2.32289478e-02 6.55959930e-03 7.18197378e-01 2.90548321e+03 +1.91600000e-04 -1.65360702e-12 8.96298914e-02 9.64734146e-02 6.58601912e-02 2.32858984e-02 6.55322661e-03 7.18197378e-01 2.90658208e+03 +1.91700000e-04 -1.65360702e-12 8.96033139e-02 9.64075011e-02 6.59021423e-02 2.33428061e-02 6.54685874e-03 7.18197378e-01 2.90658208e+03 +1.91800000e-04 -1.65360702e-12 8.95767540e-02 9.63416447e-02 6.59440572e-02 2.33996707e-02 6.54049569e-03 7.18197378e-01 2.90658208e+03 +1.91900000e-04 -1.65360701e-12 8.95502115e-02 9.62758454e-02 6.59859357e-02 2.34564921e-02 6.53413746e-03 7.18197378e-01 2.90658208e+03 +1.92000000e-04 -1.65360701e-12 8.95236866e-02 9.62101033e-02 6.60277778e-02 2.35132704e-02 6.52778406e-03 7.18197378e-01 2.90736586e+03 +1.92100000e-04 -1.65360702e-12 8.94971793e-02 9.61444185e-02 6.60695834e-02 2.35700055e-02 6.52143550e-03 7.18197378e-01 2.90736586e+03 +1.92200000e-04 -1.65360702e-12 8.94706895e-02 9.60787911e-02 6.61113525e-02 2.36266972e-02 6.51509179e-03 7.18197378e-01 2.90793907e+03 +1.92300000e-04 -1.65360702e-12 8.94442174e-02 9.60132211e-02 6.61530851e-02 2.36833456e-02 6.50875292e-03 7.18197378e-01 2.90793907e+03 +1.92400000e-04 -1.65360702e-12 8.94177629e-02 9.59477086e-02 6.61947810e-02 2.37399506e-02 6.50241892e-03 7.18197378e-01 2.90851158e+03 +1.92500000e-04 -1.65360702e-12 8.93913261e-02 9.58822538e-02 6.62364403e-02 2.37965121e-02 6.49608978e-03 7.18197378e-01 2.90851158e+03 +1.92600000e-04 -1.65360702e-12 8.93649070e-02 9.58168566e-02 6.62780629e-02 2.38530301e-02 6.48976551e-03 7.18197378e-01 2.90908341e+03 +1.92700000e-04 -1.65360702e-12 8.93385056e-02 9.57515172e-02 6.63196487e-02 2.39095045e-02 6.48344612e-03 7.18197378e-01 2.90908341e+03 +1.92800000e-04 -1.65360702e-12 8.93121220e-02 9.56862356e-02 6.63611977e-02 2.39659353e-02 6.47713162e-03 7.18197378e-01 2.90965455e+03 +1.92900000e-04 -1.65360702e-12 8.92857561e-02 9.56210119e-02 6.64027098e-02 2.40223223e-02 6.47082200e-03 7.18197378e-01 2.90965455e+03 +1.93000000e-04 -1.65360702e-12 8.92594080e-02 9.55558463e-02 6.64441851e-02 2.40786655e-02 6.46451728e-03 7.18197378e-01 2.91022499e+03 +1.93100000e-04 -1.65360702e-12 8.92330777e-02 9.54907386e-02 6.64856233e-02 2.41349650e-02 6.45821747e-03 7.18197378e-01 2.91079474e+03 +1.93200000e-04 -1.65360702e-12 8.92067653e-02 9.54256892e-02 6.65270246e-02 2.41912205e-02 6.45192257e-03 7.18197378e-01 2.91079474e+03 +1.93300000e-04 -1.65360702e-12 8.91804707e-02 9.53606979e-02 6.65683888e-02 2.42474322e-02 6.44563258e-03 7.18197378e-01 2.91136379e+03 +1.93400000e-04 -1.65360702e-12 8.91541940e-02 9.52957649e-02 6.66097160e-02 2.43035998e-02 6.43934752e-03 7.18197378e-01 2.91136379e+03 +1.93500000e-04 -1.65360702e-12 8.91279352e-02 9.52308903e-02 6.66510060e-02 2.43597233e-02 6.43306738e-03 7.18197378e-01 2.91193215e+03 +1.93600000e-04 -1.65360702e-12 8.91016943e-02 9.51660741e-02 6.66922587e-02 2.44158028e-02 6.42679219e-03 7.18197378e-01 2.91193215e+03 +1.93700000e-04 -1.65360702e-12 8.90754714e-02 9.51013165e-02 6.67334743e-02 2.44718380e-02 6.42052193e-03 7.18197378e-01 2.91249981e+03 +1.93800000e-04 -1.65360702e-12 8.90492665e-02 9.50366174e-02 6.67746525e-02 2.45278291e-02 6.41425663e-03 7.18197378e-01 2.91249981e+03 +1.93900000e-04 -1.65360702e-12 8.90230796e-02 9.49719770e-02 6.68157935e-02 2.45837759e-02 6.40799628e-03 7.18197378e-01 2.91306676e+03 +1.94000000e-04 -1.65360702e-12 8.89969107e-02 9.49073953e-02 6.68568970e-02 2.46396783e-02 6.40174089e-03 7.18197378e-01 2.91306676e+03 +1.94100000e-04 -1.65360702e-12 8.89707598e-02 9.48428724e-02 6.68979631e-02 2.46955363e-02 6.39549047e-03 7.18197378e-01 2.91363301e+03 +1.94200000e-04 -1.65360702e-12 8.89446271e-02 9.47784084e-02 6.69389918e-02 2.47513499e-02 6.38924502e-03 7.18197378e-01 2.91419856e+03 +1.94300000e-04 -1.65360702e-12 8.89185124e-02 9.47140034e-02 6.69799829e-02 2.48071189e-02 6.38300456e-03 7.18197378e-01 2.91419856e+03 +1.94400000e-04 -1.65360702e-12 8.88924158e-02 9.46496573e-02 6.70209365e-02 2.48628434e-02 6.37676908e-03 7.18197378e-01 2.91476340e+03 +1.94500000e-04 -1.65360702e-12 8.88663374e-02 9.45853704e-02 6.70618524e-02 2.49185233e-02 6.37053859e-03 7.18197378e-01 2.91476340e+03 +1.94600000e-04 -1.65360702e-12 8.88402772e-02 9.45211426e-02 6.71027307e-02 2.49741585e-02 6.36431311e-03 7.18197378e-01 2.91532753e+03 +1.94700000e-04 -1.65360702e-12 8.88142352e-02 9.44569741e-02 6.71435713e-02 2.50297489e-02 6.35809263e-03 7.18197378e-01 2.91532753e+03 +1.94800000e-04 -1.65360702e-12 8.87882114e-02 9.43928649e-02 6.71843741e-02 2.50852946e-02 6.35187716e-03 7.18197378e-01 2.91589095e+03 +1.94900000e-04 -1.65360702e-12 8.87622058e-02 9.43288150e-02 6.72251392e-02 2.51407954e-02 6.34566671e-03 7.18197378e-01 2.91589095e+03 +1.95000000e-04 -1.65360702e-12 8.87362185e-02 9.42648246e-02 6.72658664e-02 2.51962514e-02 6.33946128e-03 7.18197378e-01 2.91645367e+03 +1.95100000e-04 -1.65360702e-12 8.87102494e-02 9.42008937e-02 6.73065558e-02 2.52516623e-02 6.33326088e-03 7.18197378e-01 2.91645367e+03 +1.95200000e-04 -1.65360702e-12 8.86842987e-02 9.41370224e-02 6.73472072e-02 2.53070283e-02 6.32706552e-03 7.18197378e-01 2.91701566e+03 +1.95300000e-04 -1.65360702e-12 8.86583663e-02 9.40732108e-02 6.73878206e-02 2.53623492e-02 6.32087521e-03 7.18197378e-01 2.91757695e+03 +1.95400000e-04 -1.65360702e-12 8.86324523e-02 9.40094588e-02 6.74283961e-02 2.54176250e-02 6.31468994e-03 7.18197378e-01 2.91757695e+03 +1.95500000e-04 -1.65360702e-12 8.86065567e-02 9.39457667e-02 6.74689335e-02 2.54728556e-02 6.30850973e-03 7.18197378e-01 2.91813752e+03 +1.95600000e-04 -1.65360702e-12 8.85806794e-02 9.38821344e-02 6.75094328e-02 2.55280410e-02 6.30233457e-03 7.18197378e-01 2.91813752e+03 +1.95700000e-04 -1.65360702e-12 8.85548206e-02 9.38185621e-02 6.75498939e-02 2.55831811e-02 6.29616449e-03 7.18197378e-01 2.91869737e+03 +1.95800000e-04 -1.65360702e-12 8.85289803e-02 9.37550497e-02 6.75903169e-02 2.56382758e-02 6.28999947e-03 7.18197378e-01 2.91869737e+03 +1.95900000e-04 -1.65360702e-12 8.85031584e-02 9.36915974e-02 6.76307016e-02 2.56933252e-02 6.28383954e-03 7.18197378e-01 2.91925650e+03 +1.96000000e-04 -1.65360702e-12 8.84773550e-02 9.36282052e-02 6.76710481e-02 2.57483292e-02 6.27768469e-03 7.18197378e-01 2.91925650e+03 +1.96100000e-04 -1.65360702e-12 8.84515701e-02 9.35648732e-02 6.77113563e-02 2.58032876e-02 6.27153493e-03 7.18197378e-01 2.91981491e+03 +1.96200000e-04 -1.65360702e-12 8.84258038e-02 9.35016015e-02 6.77516261e-02 2.58582005e-02 6.26539027e-03 7.18197378e-01 2.92037260e+03 +1.96300000e-04 -1.65360702e-12 8.84000560e-02 9.34383901e-02 6.77918575e-02 2.59130678e-02 6.25925071e-03 7.18197378e-01 2.92037260e+03 +1.96400000e-04 -1.65360702e-12 8.83743269e-02 9.33752391e-02 6.78320505e-02 2.59678894e-02 6.25311626e-03 7.18197378e-01 2.92092956e+03 +1.96500000e-04 -1.65360702e-12 8.83486163e-02 9.33121486e-02 6.78722050e-02 2.60226654e-02 6.24698692e-03 7.18197378e-01 2.92092956e+03 +1.96600000e-04 -1.65360702e-12 8.83229244e-02 9.32491185e-02 6.79123209e-02 2.60773955e-02 6.24086271e-03 7.18197378e-01 2.92148580e+03 +1.96700000e-04 -1.65360702e-12 8.82972512e-02 9.31861491e-02 6.79523984e-02 2.61320799e-02 6.23474362e-03 7.18197378e-01 2.92148580e+03 +1.96800000e-04 -1.65360702e-12 8.82715966e-02 9.31232403e-02 6.79924372e-02 2.61867184e-02 6.22862966e-03 7.18197378e-01 2.92204131e+03 +1.96900000e-04 -1.65360702e-12 8.82459608e-02 9.30603922e-02 6.80324374e-02 2.62413110e-02 6.22252084e-03 7.18197378e-01 2.92204131e+03 +1.97000000e-04 -1.65360702e-12 8.82203436e-02 9.29976049e-02 6.80723989e-02 2.62958576e-02 6.21641716e-03 7.18197378e-01 2.92259609e+03 +1.97100000e-04 -1.65360702e-12 8.81947452e-02 9.29348784e-02 6.81123216e-02 2.63503582e-02 6.21031864e-03 7.18197378e-01 2.92259609e+03 +1.97200000e-04 -1.65360702e-12 8.81691656e-02 9.28722129e-02 6.81522057e-02 2.64048127e-02 6.20422527e-03 7.18197378e-01 2.92315014e+03 +1.97300000e-04 -1.65360702e-12 8.81436048e-02 9.28096083e-02 6.81920509e-02 2.64592211e-02 6.19813706e-03 7.18197378e-01 2.92370346e+03 +1.97400000e-04 -1.65360702e-12 8.81180629e-02 9.27470647e-02 6.82318572e-02 2.65135833e-02 6.19205401e-03 7.18197378e-01 2.92370346e+03 +1.97500000e-04 -1.65360702e-12 8.80925397e-02 9.26845822e-02 6.82716247e-02 2.65678993e-02 6.18597614e-03 7.18197378e-01 2.92425604e+03 +1.97600000e-04 -1.65360702e-12 8.80670354e-02 9.26221609e-02 6.83113533e-02 2.66221691e-02 6.17990345e-03 7.18197378e-01 2.92425604e+03 +1.97700000e-04 -1.65360702e-12 8.80415501e-02 9.25598007e-02 6.83510429e-02 2.66763925e-02 6.17383594e-03 7.18197378e-01 2.92480789e+03 +1.97800000e-04 -1.65360702e-12 8.80160836e-02 9.24975019e-02 6.83906936e-02 2.67305695e-02 6.16777362e-03 7.18197378e-01 2.92480789e+03 +1.97900000e-04 -1.65360702e-12 8.79906361e-02 9.24352643e-02 6.84303051e-02 2.67847001e-02 6.16171650e-03 7.18197378e-01 2.92535900e+03 +1.98000000e-04 -1.65360702e-12 8.79652075e-02 9.23730882e-02 6.84698777e-02 2.68387842e-02 6.15566457e-03 7.18197378e-01 2.92535900e+03 +1.98100000e-04 -1.65360702e-12 8.79397979e-02 9.23109735e-02 6.85094111e-02 2.68928218e-02 6.14961786e-03 7.18197378e-01 2.92590937e+03 +1.98200000e-04 -1.65360702e-12 8.79144073e-02 9.22489204e-02 6.85489053e-02 2.69468128e-02 6.14357635e-03 7.18197378e-01 2.92590937e+03 +1.98300000e-04 -1.65360702e-12 8.78890357e-02 9.21869288e-02 6.85883604e-02 2.70007572e-02 6.13754006e-03 7.18197378e-01 2.92645901e+03 +1.98400000e-04 -1.65360702e-12 8.78636832e-02 9.21249988e-02 6.86277762e-02 2.70546549e-02 6.13150900e-03 7.18197378e-01 2.92686243e+03 +1.98500000e-04 -1.65360702e-12 8.78383497e-02 9.20631305e-02 6.86671528e-02 2.71085059e-02 6.12548316e-03 7.18197378e-01 2.92686243e+03 +1.98600000e-04 -1.65360702e-12 8.78130354e-02 9.20013240e-02 6.87064901e-02 2.71623102e-02 6.11946256e-03 7.18197378e-01 2.92715643e+03 +1.98700000e-04 -1.65360702e-12 8.77877401e-02 9.19395793e-02 6.87457880e-02 2.72160675e-02 6.11344719e-03 7.18197378e-01 2.92745020e+03 +1.98800000e-04 -1.65360702e-12 8.77624640e-02 9.18778964e-02 6.87850466e-02 2.72697781e-02 6.10743708e-03 7.18197378e-01 2.92774377e+03 +1.98900000e-04 -1.65360702e-12 8.77372071e-02 9.18162754e-02 6.88242657e-02 2.73234417e-02 6.10143221e-03 7.18197378e-01 2.92803712e+03 +1.99000000e-04 -1.65360702e-12 8.77119693e-02 9.17547164e-02 6.88634455e-02 2.73770583e-02 6.09543260e-03 7.18197378e-01 2.92833025e+03 +1.99100000e-04 -1.65360702e-12 8.76867508e-02 9.16932195e-02 6.89025857e-02 2.74306279e-02 6.08943825e-03 7.18197378e-01 2.92870386e+03 +1.99200000e-04 -1.65360702e-12 8.76615515e-02 9.16317846e-02 6.89416864e-02 2.74841505e-02 6.08344916e-03 7.18197378e-01 2.92901987e+03 +1.99300000e-04 -1.65360702e-12 8.76363714e-02 9.15704119e-02 6.89807476e-02 2.75376259e-02 6.07746535e-03 7.18197378e-01 2.92933563e+03 +1.99400000e-04 -1.65360702e-12 8.76112106e-02 9.15091014e-02 6.90197692e-02 2.75910542e-02 6.07148681e-03 7.18197378e-01 2.92949342e+03 +1.99500000e-04 -1.65360702e-12 8.75860691e-02 9.14478532e-02 6.90587511e-02 2.76444352e-02 6.06551356e-03 7.18197378e-01 2.92986820e+03 +1.99600000e-04 -1.65360702e-12 8.75609469e-02 9.13866672e-02 6.90976934e-02 2.76977690e-02 6.05954560e-03 7.18197378e-01 2.93012642e+03 +1.99700000e-04 -1.65360702e-12 8.75358440e-02 9.13255436e-02 6.91365960e-02 2.77510555e-02 6.05358293e-03 7.18197378e-01 2.93040759e+03 +1.99800000e-04 -1.65360702e-12 8.75107605e-02 9.12644825e-02 6.91754589e-02 2.78042947e-02 6.04762555e-03 7.18197378e-01 2.93068427e+03 +1.99900000e-04 -1.65360702e-12 8.74856964e-02 9.12034838e-02 6.92142820e-02 2.78574864e-02 6.04167348e-03 7.18197378e-01 2.93101801e+03 +2.00000000e-04 -1.65360702e-12 8.74606517e-02 9.11425476e-02 6.92530654e-02 2.79106307e-02 6.03572672e-03 7.18197378e-01 2.93147002e+03 +2.00100000e-04 -1.65360702e-12 8.74356264e-02 9.10816740e-02 6.92918089e-02 2.79637275e-02 6.02978528e-03 7.18197378e-01 2.93169290e+03 +2.00200000e-04 -1.65360702e-12 8.74106206e-02 9.10208631e-02 6.93305125e-02 2.80167768e-02 6.02384915e-03 7.18197378e-01 2.93191565e+03 +2.00300000e-04 -1.65360702e-12 8.73856342e-02 9.09601148e-02 6.93691762e-02 2.80697785e-02 6.01791835e-03 7.18197378e-01 2.93276301e+03 +2.00400000e-04 -1.65360702e-12 8.73606674e-02 9.08994293e-02 6.94078000e-02 2.81227326e-02 6.01199288e-03 7.18197378e-01 2.93276301e+03 +2.00500000e-04 -1.65360702e-12 8.73357200e-02 9.08388065e-02 6.94463839e-02 2.81756390e-02 6.00607274e-03 7.18197378e-01 2.93276301e+03 +2.00600000e-04 -1.65360702e-12 8.73107922e-02 9.07782466e-02 6.94849277e-02 2.82284976e-02 6.00015794e-03 7.18197378e-01 2.93338672e+03 +2.00700000e-04 -1.65360702e-12 8.72858840e-02 9.07177496e-02 6.95234315e-02 2.82813085e-02 5.99424849e-03 7.18197378e-01 2.93338672e+03 +2.00800000e-04 -1.65360702e-12 8.72609953e-02 9.06573156e-02 6.95618953e-02 2.83340716e-02 5.98834439e-03 7.18197378e-01 2.93400942e+03 +2.00900000e-04 -1.65360702e-12 8.72361262e-02 9.05969445e-02 6.96003190e-02 2.83867868e-02 5.98244564e-03 7.18197378e-01 2.93400942e+03 +2.01000000e-04 -1.65360702e-12 8.72112767e-02 9.05366365e-02 6.96387025e-02 2.84394542e-02 5.97655226e-03 7.18197378e-01 2.93463110e+03 +2.01100000e-04 -1.65360702e-12 8.71864469e-02 9.04763915e-02 6.96770459e-02 2.84920736e-02 5.97066423e-03 7.18197378e-01 2.93463110e+03 +2.01200000e-04 -1.65360702e-12 8.71616368e-02 9.04162097e-02 6.97153491e-02 2.85446449e-02 5.96478158e-03 7.18197378e-01 2.93556841e+03 +2.01300000e-04 -1.65360702e-12 8.71368463e-02 9.03560912e-02 6.97536121e-02 2.85971683e-02 5.95890431e-03 7.18197378e-01 2.93556841e+03 +2.01400000e-04 -1.65360702e-12 8.71120756e-02 9.02960358e-02 6.97918348e-02 2.86496436e-02 5.95303241e-03 7.18197378e-01 2.93556841e+03 +2.01500000e-04 -1.65360702e-12 8.70873246e-02 9.02360437e-02 6.98300172e-02 2.87020707e-02 5.94716590e-03 7.18197378e-01 2.93650338e+03 +2.01600000e-04 -1.65360702e-12 8.70625933e-02 9.01761150e-02 6.98681594e-02 2.87544497e-02 5.94130478e-03 7.18197378e-01 2.93650338e+03 +2.01700000e-04 -1.65360702e-12 8.70378818e-02 9.01162497e-02 6.99062611e-02 2.88067805e-02 5.93544905e-03 7.18197378e-01 2.93650338e+03 +2.01800000e-04 -1.65360702e-12 8.70131901e-02 9.00564478e-02 6.99443226e-02 2.88590630e-02 5.92959873e-03 7.18197378e-01 2.93743601e+03 +2.01900000e-04 -1.65360702e-12 8.69885182e-02 8.99967094e-02 6.99823436e-02 2.89112972e-02 5.92375380e-03 7.18197378e-01 2.93743601e+03 +2.02000000e-04 -1.65360702e-12 8.69638662e-02 8.99370345e-02 7.00203241e-02 2.89634831e-02 5.91791429e-03 7.18197378e-01 2.93743601e+03 +2.02100000e-04 -1.65360702e-12 8.69392340e-02 8.98774232e-02 7.00582642e-02 2.90156205e-02 5.91208019e-03 7.18197378e-01 2.93836627e+03 +2.02200000e-04 -1.65360702e-12 8.69146217e-02 8.98178755e-02 7.00961639e-02 2.90677096e-02 5.90625152e-03 7.18197378e-01 2.93836627e+03 +2.02300000e-04 -1.65360702e-12 8.68900293e-02 8.97583915e-02 7.01340230e-02 2.91197502e-02 5.90042826e-03 7.18197378e-01 2.93836627e+03 +2.02400000e-04 -1.65360702e-12 8.68654568e-02 8.96989712e-02 7.01718415e-02 2.91717422e-02 5.89461043e-03 7.18197378e-01 2.93836627e+03 +2.02500000e-04 -1.65360702e-12 8.68409043e-02 8.96396146e-02 7.02096195e-02 2.92236858e-02 5.88879804e-03 7.18197378e-01 2.93929418e+03 +2.02600000e-04 -1.65360702e-12 8.68163717e-02 8.95803219e-02 7.02473568e-02 2.92755807e-02 5.88299108e-03 7.18197378e-01 2.93929418e+03 +2.02700000e-04 -1.65360702e-12 8.67918591e-02 8.95210930e-02 7.02850535e-02 2.93274270e-02 5.87718957e-03 7.18197378e-01 2.93929418e+03 +2.02800000e-04 -1.65360702e-12 8.67673665e-02 8.94619280e-02 7.03227096e-02 2.93792246e-02 5.87139351e-03 7.18197378e-01 2.94087549e+03 +2.02900000e-04 -1.65360702e-12 8.67428940e-02 8.94028269e-02 7.03603249e-02 2.94309734e-02 5.86560289e-03 7.18197378e-01 2.94087549e+03 +2.03000000e-04 -1.65360702e-12 8.67184414e-02 8.93437899e-02 7.03978996e-02 2.94826735e-02 5.85981774e-03 7.18197378e-01 2.94087549e+03 +2.03100000e-04 -1.65360702e-12 8.66940090e-02 8.92848168e-02 7.04354334e-02 2.95343248e-02 5.85403804e-03 7.18197378e-01 2.94087549e+03 +2.03200000e-04 -1.65360702e-12 8.66695966e-02 8.92259078e-02 7.04729266e-02 2.95859273e-02 5.84826381e-03 7.18197378e-01 2.94087549e+03 +2.03300000e-04 -1.65360702e-12 8.66452044e-02 8.91670630e-02 7.05103789e-02 2.96374809e-02 5.84249505e-03 7.18197378e-01 2.94244983e+03 +2.03400000e-04 -1.65360702e-12 8.66208323e-02 8.91082823e-02 7.05477903e-02 2.96889855e-02 5.83673177e-03 7.18197378e-01 2.94244983e+03 +2.03500000e-04 -1.65360702e-12 8.65964803e-02 8.90495657e-02 7.05851609e-02 2.97404412e-02 5.83097396e-03 7.18197378e-01 2.94244983e+03 +2.03600000e-04 -1.65360702e-12 8.65721485e-02 8.89909135e-02 7.06224907e-02 2.97918479e-02 5.82522164e-03 7.18197378e-01 2.94244983e+03 +2.03700000e-04 -1.65360702e-12 8.65478369e-02 8.89323254e-02 7.06597795e-02 2.98432055e-02 5.81947481e-03 7.18197378e-01 2.94244983e+03 +2.03800000e-04 -1.65360702e-12 8.65235455e-02 8.88738018e-02 7.06970274e-02 2.98945140e-02 5.81373347e-03 7.18197378e-01 2.94244983e+03 +2.03900000e-04 -1.65360702e-12 8.64992744e-02 8.88153424e-02 7.07342343e-02 2.99457734e-02 5.80799763e-03 7.18197378e-01 2.94490927e+03 +2.04000000e-04 -1.65360702e-12 8.64750235e-02 8.87569475e-02 7.07714002e-02 2.99969836e-02 5.80226729e-03 7.18197378e-01 2.94490927e+03 +2.04100000e-04 -1.65360702e-12 8.64507929e-02 8.86986170e-02 7.08085251e-02 3.00481447e-02 5.79654245e-03 7.18197378e-01 2.94490927e+03 +2.04200000e-04 -1.65360702e-12 8.64265825e-02 8.86403510e-02 7.08456090e-02 3.00992564e-02 5.79082313e-03 7.18197378e-01 2.94490927e+03 +2.04300000e-04 -1.65360702e-12 8.64023925e-02 8.85821496e-02 7.08826518e-02 3.01503189e-02 5.78510932e-03 7.18197378e-01 2.94490927e+03 +2.04400000e-04 -1.65360702e-12 8.63782228e-02 8.85240127e-02 7.09196535e-02 3.02013321e-02 5.77940103e-03 7.18197378e-01 2.94490927e+03 +2.04500000e-04 -1.65360702e-12 8.63540735e-02 8.84659403e-02 7.09566141e-02 3.02522959e-02 5.77369827e-03 7.18197378e-01 2.94490927e+03 +2.04600000e-04 -1.65360702e-12 8.63299445e-02 8.84079327e-02 7.09935336e-02 3.03032103e-02 5.76800103e-03 7.18197378e-01 2.94490927e+03 +2.04700000e-04 -1.65360702e-12 8.63058360e-02 8.83499897e-02 7.10304119e-02 3.03540753e-02 5.76230932e-03 7.18197378e-01 2.94735125e+03 +2.04800000e-04 -1.65360702e-12 8.62817478e-02 8.82921114e-02 7.10672490e-02 3.04048908e-02 5.75662315e-03 7.18197378e-01 2.94735125e+03 +2.04900000e-04 -1.65360702e-12 8.62576801e-02 8.82342978e-02 7.11040449e-02 3.04556568e-02 5.75094253e-03 7.18197378e-01 2.94735125e+03 +2.05000000e-04 -1.65360702e-12 8.62336329e-02 8.81765491e-02 7.11407996e-02 3.05063732e-02 5.74526744e-03 7.18197378e-01 2.94735125e+03 +2.05100000e-04 -1.65360702e-12 8.62096061e-02 8.81188652e-02 7.11775130e-02 3.05570400e-02 5.73959791e-03 7.18197378e-01 2.94735125e+03 +2.05200000e-04 -1.65360702e-12 8.61855998e-02 8.80612461e-02 7.12141851e-02 3.06076572e-02 5.73393393e-03 7.18197378e-01 2.94735125e+03 +2.05300000e-04 -1.65360702e-12 8.61616140e-02 8.80036919e-02 7.12508159e-02 3.06582248e-02 5.72827550e-03 7.18197378e-01 2.94735125e+03 +2.05400000e-04 -1.65360702e-12 8.61376488e-02 8.79462027e-02 7.12874054e-02 3.07087426e-02 5.72262264e-03 7.18197378e-01 2.94735125e+03 +2.05500000e-04 -1.65360702e-12 8.61137041e-02 8.78887785e-02 7.13239536e-02 3.07592107e-02 5.71697534e-03 7.18197378e-01 2.94735125e+03 +2.05600000e-04 -1.65360702e-12 8.60897800e-02 8.78314192e-02 7.13604603e-02 3.08096290e-02 5.71133362e-03 7.18197378e-01 2.94977562e+03 +2.05700000e-04 -1.65360702e-12 8.60658765e-02 8.77741250e-02 7.13969257e-02 3.08599975e-02 5.70569746e-03 7.18197378e-01 2.94977562e+03 +2.05800000e-04 -1.65360702e-12 8.60419935e-02 8.77168958e-02 7.14333497e-02 3.09103162e-02 5.70006689e-03 7.18197378e-01 2.94977562e+03 +2.05900000e-04 -1.65360702e-12 8.60181313e-02 8.76597318e-02 7.14697322e-02 3.09605850e-02 5.69444189e-03 7.18197378e-01 2.94977562e+03 +2.06000000e-04 -1.65360702e-12 8.59942896e-02 8.76026329e-02 7.15060732e-02 3.10108038e-02 5.68882249e-03 7.18197378e-01 2.94977562e+03 +2.06100000e-04 -1.65360702e-12 8.59704687e-02 8.75455992e-02 7.15423728e-02 3.10609728e-02 5.68320867e-03 7.18197378e-01 2.94977562e+03 +2.06200000e-04 -1.65360702e-12 8.59466684e-02 8.74886307e-02 7.15786309e-02 3.11110917e-02 5.67760044e-03 7.18197378e-01 2.94977562e+03 +2.06300000e-04 -1.65360702e-12 8.59228889e-02 8.74317275e-02 7.16148474e-02 3.11611606e-02 5.67199782e-03 7.18197378e-01 2.94977562e+03 +2.06400000e-04 -1.65360702e-12 8.58991300e-02 8.73748895e-02 7.16510224e-02 3.12111794e-02 5.66640079e-03 7.18197378e-01 2.95218225e+03 +2.06500000e-04 -1.65360702e-12 8.58753919e-02 8.73181168e-02 7.16871559e-02 3.12611481e-02 5.66080937e-03 7.18197378e-01 2.95218225e+03 +2.06600000e-04 -1.65360702e-12 8.58516746e-02 8.72614095e-02 7.17232477e-02 3.13110668e-02 5.65522356e-03 7.18197378e-01 2.95218225e+03 +2.06700000e-04 -1.65360702e-12 8.58279781e-02 8.72047675e-02 7.17592980e-02 3.13609352e-02 5.64964337e-03 7.18197378e-01 2.95218225e+03 +2.06800000e-04 -1.65360702e-12 8.58043024e-02 8.71481910e-02 7.17953066e-02 3.14107535e-02 5.64406879e-03 7.18197378e-01 2.95218225e+03 +2.06900000e-04 -1.65360702e-12 8.57806475e-02 8.70916798e-02 7.18312736e-02 3.14605215e-02 5.63849983e-03 7.18197378e-01 2.95218225e+03 +2.07000000e-04 -1.65360702e-12 8.57570134e-02 8.70352342e-02 7.18671989e-02 3.15102392e-02 5.63293649e-03 7.18197378e-01 2.95218225e+03 +2.07100000e-04 -1.65360702e-12 8.57334002e-02 8.69788540e-02 7.19030825e-02 3.15599067e-02 5.62737879e-03 7.18197378e-01 2.95218225e+03 +2.07200000e-04 -1.65360702e-12 8.57098079e-02 8.69225394e-02 7.19389244e-02 3.16095238e-02 5.62182672e-03 7.18197378e-01 2.95218225e+03 +2.07300000e-04 -1.65360702e-12 8.56862365e-02 8.68662903e-02 7.19747246e-02 3.16590905e-02 5.61628028e-03 7.18197378e-01 2.95457098e+03 +2.07400000e-04 -1.65360702e-12 8.56626860e-02 8.68101068e-02 7.20104830e-02 3.17086069e-02 5.61073948e-03 7.18197378e-01 2.95457098e+03 +2.07500000e-04 -1.65360702e-12 8.56391564e-02 8.67539889e-02 7.20461997e-02 3.17580728e-02 5.60520433e-03 7.18197378e-01 2.95457098e+03 +2.07600000e-04 -1.65360702e-12 8.56156478e-02 8.66979367e-02 7.20818746e-02 3.18074882e-02 5.59967482e-03 7.18197378e-01 2.95457098e+03 +2.07700000e-04 -1.65360702e-12 8.55921601e-02 8.66419501e-02 7.21175078e-02 3.18568532e-02 5.59415096e-03 7.18197378e-01 2.95457098e+03 +2.07800000e-04 -1.65360702e-12 8.55686935e-02 8.65860292e-02 7.21530991e-02 3.19061676e-02 5.58863276e-03 7.18197378e-01 2.95457098e+03 +2.07900000e-04 -1.65360702e-12 8.55452478e-02 8.65301741e-02 7.21886485e-02 3.19554315e-02 5.58312022e-03 7.18197378e-01 2.95457098e+03 +2.08000000e-04 -1.65360702e-12 8.55218232e-02 8.64743847e-02 7.22241561e-02 3.20046448e-02 5.57761333e-03 7.18197378e-01 2.95457098e+03 +2.08100000e-04 -1.65360702e-12 8.54984197e-02 8.64186611e-02 7.22596219e-02 3.20538074e-02 5.57211212e-03 7.18197378e-01 2.95457098e+03 +2.08200000e-04 -1.65360702e-12 8.54750372e-02 8.63630033e-02 7.22950458e-02 3.21029194e-02 5.56661657e-03 7.18197378e-01 2.95694168e+03 +2.08300000e-04 -1.65360702e-12 8.54516758e-02 8.63074113e-02 7.23304277e-02 3.21519807e-02 5.56112669e-03 7.18197378e-01 2.95694168e+03 +2.08400000e-04 -1.65360702e-12 8.54283354e-02 8.62518852e-02 7.23657678e-02 3.22009912e-02 5.55564249e-03 7.18197378e-01 2.95694168e+03 +2.08500000e-04 -1.65360702e-12 8.54050162e-02 8.61964250e-02 7.24010659e-02 3.22499511e-02 5.55016396e-03 7.18197378e-01 2.95694168e+03 +2.08600000e-04 -1.65360702e-12 8.53817182e-02 8.61410307e-02 7.24363220e-02 3.22988601e-02 5.54469112e-03 7.18197378e-01 2.95694168e+03 +2.08700000e-04 -1.65360702e-12 8.53584413e-02 8.60857023e-02 7.24715362e-02 3.23477183e-02 5.53922397e-03 7.18197378e-01 2.95694168e+03 +2.08800000e-04 -1.65360702e-12 8.53351856e-02 8.60304399e-02 7.25067084e-02 3.23965257e-02 5.53376250e-03 7.18197378e-01 2.95694168e+03 +2.08900000e-04 -1.65360702e-12 8.53119510e-02 8.59752435e-02 7.25418386e-02 3.24452822e-02 5.52830673e-03 7.18197378e-01 2.95694168e+03 +2.09000000e-04 -1.65360702e-12 8.52887377e-02 8.59201131e-02 7.25769268e-02 3.24939878e-02 5.52285665e-03 7.18197378e-01 2.95929421e+03 +2.09100000e-04 -1.65360702e-12 8.52655456e-02 8.58650488e-02 7.26119730e-02 3.25426425e-02 5.51741228e-03 7.18197378e-01 2.95929421e+03 +2.09200000e-04 -1.65360702e-12 8.52423747e-02 8.58100505e-02 7.26469771e-02 3.25912462e-02 5.51197360e-03 7.18197378e-01 2.95929421e+03 +2.09300000e-04 -1.65360702e-12 8.52192251e-02 8.57551182e-02 7.26819392e-02 3.26397989e-02 5.50654063e-03 7.18197378e-01 2.95929421e+03 +2.09400000e-04 -1.65360702e-12 8.51960968e-02 8.57002521e-02 7.27168592e-02 3.26883006e-02 5.50111337e-03 7.18197378e-01 2.95929421e+03 +2.09500000e-04 -1.65360702e-12 8.51729898e-02 8.56454521e-02 7.27517371e-02 3.27367513e-02 5.49569183e-03 7.18197378e-01 2.95929421e+03 +2.09600000e-04 -1.65360702e-12 8.51499041e-02 8.55907183e-02 7.27865729e-02 3.27851509e-02 5.49027599e-03 7.18197378e-01 2.95929421e+03 +2.09700000e-04 -1.65360702e-12 8.51268397e-02 8.55360507e-02 7.28213666e-02 3.28334993e-02 5.48486588e-03 7.18197378e-01 2.95929421e+03 +2.09800000e-04 -1.65360702e-12 8.51037967e-02 8.54814492e-02 7.28561181e-02 3.28817966e-02 5.47946149e-03 7.18197378e-01 2.95929421e+03 +2.09900000e-04 -1.65360702e-12 8.50807750e-02 8.54269139e-02 7.28908275e-02 3.29300428e-02 5.47406282e-03 7.18197378e-01 2.96162844e+03 +2.10000000e-04 -1.65360702e-12 8.50577748e-02 8.53724449e-02 7.29254948e-02 3.29782378e-02 5.46866989e-03 7.18197378e-01 2.96162844e+03 +2.10100000e-04 -1.65360702e-12 8.50347959e-02 8.53180422e-02 7.29601199e-02 3.30263815e-02 5.46328268e-03 7.18197378e-01 2.96162844e+03 +2.10200000e-04 -1.65360702e-12 8.50118384e-02 8.52637057e-02 7.29947028e-02 3.30744740e-02 5.45790121e-03 7.18197378e-01 2.96162844e+03 +2.10300000e-04 -1.65360702e-12 8.49889024e-02 8.52094355e-02 7.30292435e-02 3.31225153e-02 5.45252548e-03 7.18197378e-01 2.96162844e+03 +2.10400000e-04 -1.65360702e-12 8.49659879e-02 8.51552317e-02 7.30637419e-02 3.31705052e-02 5.44715548e-03 7.18197378e-01 2.96162844e+03 +2.10500000e-04 -1.65360702e-12 8.49430948e-02 8.51010942e-02 7.30981982e-02 3.32184438e-02 5.44179123e-03 7.18197378e-01 2.96162844e+03 +2.10600000e-04 -1.65360702e-12 8.49202232e-02 8.50470230e-02 7.31326123e-02 3.32663310e-02 5.43643273e-03 7.18197378e-01 2.96162844e+03 +2.10700000e-04 -1.65360702e-12 8.48973730e-02 8.49930182e-02 7.31669840e-02 3.33141669e-02 5.43107998e-03 7.18197378e-01 2.96394423e+03 +2.10800000e-04 -1.65360702e-12 8.48745445e-02 8.49390798e-02 7.32013136e-02 3.33619513e-02 5.42573298e-03 7.18197378e-01 2.96394423e+03 +2.10900000e-04 -1.65360702e-12 8.48517374e-02 8.48852079e-02 7.32356008e-02 3.34096843e-02 5.42039173e-03 7.18197378e-01 2.96394423e+03 +2.11000000e-04 -1.65360702e-12 8.48289519e-02 8.48314023e-02 7.32698458e-02 3.34573659e-02 5.41505625e-03 7.18197378e-01 2.96394423e+03 +2.11100000e-04 -1.65360702e-12 8.48061880e-02 8.47776632e-02 7.33040485e-02 3.35049959e-02 5.40972652e-03 7.18197378e-01 2.96394423e+03 +2.11200000e-04 -1.65360702e-12 8.47834456e-02 8.47239906e-02 7.33382089e-02 3.35525745e-02 5.40440256e-03 7.18197378e-01 2.96394423e+03 +2.11300000e-04 -1.65360702e-12 8.47607249e-02 8.46703845e-02 7.33723269e-02 3.36001015e-02 5.39908437e-03 7.18197378e-01 2.96394423e+03 +2.11400000e-04 -1.65360702e-12 8.47380258e-02 8.46168449e-02 7.34064027e-02 3.36475769e-02 5.39377195e-03 7.18197378e-01 2.96394423e+03 +2.11500000e-04 -1.65360702e-12 8.47153483e-02 8.45633717e-02 7.34404361e-02 3.36950008e-02 5.38846530e-03 7.18197378e-01 2.96394423e+03 +2.11600000e-04 -1.65360702e-12 8.46926924e-02 8.45099652e-02 7.34744271e-02 3.37423730e-02 5.38316442e-03 7.18197378e-01 2.96624148e+03 +2.11700000e-04 -1.65360702e-12 8.46700583e-02 8.44566251e-02 7.35083759e-02 3.37896936e-02 5.37786932e-03 7.18197378e-01 2.96624148e+03 +2.11800000e-04 -1.65360702e-12 8.46474458e-02 8.44033516e-02 7.35422822e-02 3.38369625e-02 5.37258001e-03 7.18197378e-01 2.96624148e+03 +2.11900000e-04 -1.65360702e-12 8.46248550e-02 8.43501448e-02 7.35761462e-02 3.38841798e-02 5.36729648e-03 7.18197378e-01 2.96624148e+03 +2.12000000e-04 -1.65360702e-12 8.46022859e-02 8.42970045e-02 7.36099677e-02 3.39313453e-02 5.36201873e-03 7.18197378e-01 2.96624148e+03 +2.12100000e-04 -1.65360702e-12 8.45797386e-02 8.42439308e-02 7.36437469e-02 3.39784591e-02 5.35674678e-03 7.18197378e-01 2.96624148e+03 +2.12200000e-04 -1.65360702e-12 8.45572130e-02 8.41909237e-02 7.36774837e-02 3.40255211e-02 5.35148061e-03 7.18197378e-01 2.96624148e+03 +2.12300000e-04 -1.65360702e-12 8.45347091e-02 8.41379833e-02 7.37111781e-02 3.40725314e-02 5.34622024e-03 7.18197378e-01 2.96624148e+03 +2.12400000e-04 -1.65360702e-12 8.45122271e-02 8.40851095e-02 7.37448300e-02 3.41194899e-02 5.34096567e-03 7.18197378e-01 2.96852004e+03 +2.12500000e-04 -1.65360702e-12 8.44897668e-02 8.40323024e-02 7.37784396e-02 3.41663965e-02 5.33571690e-03 7.18197378e-01 2.96852004e+03 +2.12600000e-04 -1.65360702e-12 8.44673284e-02 8.39795620e-02 7.38120066e-02 3.42132512e-02 5.33047392e-03 7.18197378e-01 2.96852004e+03 +2.12700000e-04 -1.65360702e-12 8.44449118e-02 8.39268882e-02 7.38455313e-02 3.42600541e-02 5.32523676e-03 7.18197378e-01 2.96852004e+03 +2.12800000e-04 -1.65360702e-12 8.44225170e-02 8.38742812e-02 7.38790135e-02 3.43068051e-02 5.32000540e-03 7.18197378e-01 2.96852004e+03 +2.12900000e-04 -1.65360702e-12 8.44001441e-02 8.38217408e-02 7.39124532e-02 3.43535042e-02 5.31477985e-03 7.18197378e-01 2.96852004e+03 +2.13000000e-04 -1.65360702e-12 8.43777930e-02 8.37692673e-02 7.39458504e-02 3.44001513e-02 5.30956011e-03 7.18197378e-01 2.96852004e+03 +2.13100000e-04 -1.65360702e-12 8.43554638e-02 8.37168604e-02 7.39792052e-02 3.44467465e-02 5.30434619e-03 7.18197378e-01 2.96852004e+03 +2.13200000e-04 -1.65360702e-12 8.43331566e-02 8.36645203e-02 7.40125175e-02 3.44932897e-02 5.29913809e-03 7.18197378e-01 2.96852004e+03 +2.13300000e-04 -1.65360702e-12 8.43108712e-02 8.36122469e-02 7.40457873e-02 3.45397809e-02 5.29393580e-03 7.18197378e-01 2.97077982e+03 +2.13400000e-04 -1.65360702e-12 8.42886078e-02 8.35600403e-02 7.40790146e-02 3.45862200e-02 5.28873934e-03 7.18197378e-01 2.97077982e+03 +2.13500000e-04 -1.65360702e-12 8.42663664e-02 8.35079005e-02 7.41121994e-02 3.46326071e-02 5.28354870e-03 7.18197378e-01 2.97077982e+03 +2.13600000e-04 -1.65360702e-12 8.42441469e-02 8.34558275e-02 7.41453417e-02 3.46789422e-02 5.27836388e-03 7.18197378e-01 2.97077982e+03 +2.13700000e-04 -1.65360702e-12 8.42219493e-02 8.34038213e-02 7.41784415e-02 3.47252251e-02 5.27318490e-03 7.18197378e-01 2.97077982e+03 +2.13800000e-04 -1.65360702e-12 8.41997738e-02 8.33518819e-02 7.42114988e-02 3.47714559e-02 5.26801175e-03 7.18197378e-01 2.97077982e+03 +2.13900000e-04 -1.65360702e-12 8.41776203e-02 8.33000093e-02 7.42445135e-02 3.48176346e-02 5.26284443e-03 7.18197378e-01 2.97077982e+03 +2.14000000e-04 -1.65360702e-12 8.41554888e-02 8.32482036e-02 7.42774857e-02 3.48637612e-02 5.25768294e-03 7.18197378e-01 2.97077982e+03 +2.14100000e-04 -1.65360702e-12 8.41333793e-02 8.31964647e-02 7.43104154e-02 3.49098355e-02 5.25252730e-03 7.18197378e-01 2.97302068e+03 +2.14200000e-04 -1.65360702e-12 8.41112919e-02 8.31447926e-02 7.43433025e-02 3.49558577e-02 5.24737749e-03 7.18197378e-01 2.97302068e+03 +2.14300000e-04 -1.65360702e-12 8.40892265e-02 8.30931874e-02 7.43761471e-02 3.50018277e-02 5.24223353e-03 7.18197378e-01 2.97302068e+03 +2.14400000e-04 -1.65360702e-12 8.40671833e-02 8.30416490e-02 7.44089491e-02 3.50477454e-02 5.23709541e-03 7.18197378e-01 2.97302068e+03 +2.14500000e-04 -1.65360702e-12 8.40451621e-02 8.29901775e-02 7.44417085e-02 3.50936109e-02 5.23196314e-03 7.18197378e-01 2.97302068e+03 +2.14600000e-04 -1.65360702e-12 8.40231630e-02 8.29387729e-02 7.44744254e-02 3.51394241e-02 5.22683671e-03 7.18197378e-01 2.97302068e+03 +2.14700000e-04 -1.65360702e-12 8.40011861e-02 8.28874351e-02 7.45070998e-02 3.51851850e-02 5.22171614e-03 7.18197378e-01 2.97302068e+03 +2.14800000e-04 -1.65360702e-12 8.39792313e-02 8.28361643e-02 7.45397315e-02 3.52308937e-02 5.21660142e-03 7.18197378e-01 2.97302068e+03 +2.14900000e-04 -1.65360702e-12 8.39572986e-02 8.27849603e-02 7.45723207e-02 3.52765500e-02 5.21149256e-03 7.18197378e-01 2.97302068e+03 +2.15000000e-04 -1.65360702e-12 8.39353881e-02 8.27338232e-02 7.46048673e-02 3.53221539e-02 5.20638955e-03 7.18197378e-01 2.97524252e+03 +2.15100000e-04 -1.65360702e-12 8.39134998e-02 8.26827531e-02 7.46373713e-02 3.53677055e-02 5.20129240e-03 7.18197378e-01 2.97524252e+03 +2.15200000e-04 -1.65360702e-12 8.38916337e-02 8.26317498e-02 7.46698328e-02 3.54132048e-02 5.19620111e-03 7.18197378e-01 2.97524252e+03 +2.15300000e-04 -1.65360702e-12 8.38697898e-02 8.25808135e-02 7.47022516e-02 3.54586516e-02 5.19111569e-03 7.18197378e-01 2.97524252e+03 +2.15400000e-04 -1.65360702e-12 8.38479681e-02 8.25299441e-02 7.47346279e-02 3.55040460e-02 5.18603613e-03 7.18197378e-01 2.97524252e+03 +2.15500000e-04 -1.65360702e-12 8.38261686e-02 8.24791415e-02 7.47669616e-02 3.55493880e-02 5.18096244e-03 7.18197378e-01 2.97524252e+03 +2.15600000e-04 -1.65360702e-12 8.38043914e-02 8.24284060e-02 7.47992526e-02 3.55946775e-02 5.17589461e-03 7.18197378e-01 2.97524252e+03 +2.15700000e-04 -1.65360702e-12 8.37826364e-02 8.23777373e-02 7.48315011e-02 3.56399146e-02 5.17083266e-03 7.18197378e-01 2.97524252e+03 +2.15800000e-04 -1.65360702e-12 8.37609038e-02 8.23271356e-02 7.48637070e-02 3.56850992e-02 5.16577658e-03 7.18197378e-01 2.97524252e+03 +2.15900000e-04 -1.65360702e-12 8.37391934e-02 8.22766008e-02 7.48958703e-02 3.57302313e-02 5.16072637e-03 7.18197378e-01 2.97744523e+03 +2.16000000e-04 -1.65360702e-12 8.37175053e-02 8.22261330e-02 7.49279910e-02 3.57753109e-02 5.15568204e-03 7.18197378e-01 2.97744523e+03 +2.16100000e-04 -1.65360702e-12 8.36958395e-02 8.21757321e-02 7.49600690e-02 3.58203379e-02 5.15064359e-03 7.18197378e-01 2.97744523e+03 +2.16200000e-04 -1.65360702e-12 8.36741961e-02 8.21253981e-02 7.49921045e-02 3.58653125e-02 5.14561101e-03 7.18197378e-01 2.97744523e+03 +2.16300000e-04 -1.65360702e-12 8.36525750e-02 8.20751311e-02 7.50240973e-02 3.59102344e-02 5.14058432e-03 7.18197378e-01 2.97744523e+03 +2.16400000e-04 -1.65360702e-12 8.36309762e-02 8.20249311e-02 7.50560476e-02 3.59551038e-02 5.13556351e-03 7.18197378e-01 2.97744523e+03 +2.16500000e-04 -1.65360702e-12 8.36093998e-02 8.19747980e-02 7.50879552e-02 3.59999206e-02 5.13054858e-03 7.18197378e-01 2.97744523e+03 +2.16600000e-04 -1.65360702e-12 8.35878458e-02 8.19247318e-02 7.51198202e-02 3.60446848e-02 5.12553955e-03 7.18197378e-01 2.97744523e+03 +2.16700000e-04 -1.65360702e-12 8.35663142e-02 8.18747326e-02 7.51516426e-02 3.60893963e-02 5.12053640e-03 7.18197378e-01 2.97962872e+03 +2.16800000e-04 -1.65360702e-12 8.35448050e-02 8.18248003e-02 7.51834224e-02 3.61340553e-02 5.11553913e-03 7.18197378e-01 2.97962872e+03 +2.16900000e-04 -1.65360702e-12 8.35233182e-02 8.17749350e-02 7.52151596e-02 3.61786616e-02 5.11054776e-03 7.18197378e-01 2.97962872e+03 +2.17000000e-04 -1.65360702e-12 8.35018538e-02 8.17251366e-02 7.52468542e-02 3.62232152e-02 5.10556229e-03 7.18197378e-01 2.97962872e+03 +2.17100000e-04 -1.65360702e-12 8.34804119e-02 8.16754052e-02 7.52785062e-02 3.62677161e-02 5.10058271e-03 7.18197378e-01 2.97962872e+03 +2.17200000e-04 -1.65360702e-12 8.34589924e-02 8.16257407e-02 7.53101156e-02 3.63121644e-02 5.09560902e-03 7.18197378e-01 2.97962872e+03 +2.17300000e-04 -1.65360702e-12 8.34375954e-02 8.15761432e-02 7.53416823e-02 3.63565600e-02 5.09064123e-03 7.18197378e-01 2.97962872e+03 +2.17400000e-04 -1.65360702e-12 8.34162209e-02 8.15266126e-02 7.53732065e-02 3.64009028e-02 5.08567934e-03 7.18197378e-01 2.97962872e+03 +2.17500000e-04 -1.65360702e-12 8.33948689e-02 8.14771490e-02 7.54046880e-02 3.64451929e-02 5.08072335e-03 7.18197378e-01 2.97962872e+03 +2.17600000e-04 -1.65360702e-12 8.33735394e-02 8.14277523e-02 7.54361269e-02 3.64894303e-02 5.07577326e-03 7.18197378e-01 2.98179288e+03 +2.17700000e-04 -1.65360702e-12 8.33522324e-02 8.13784226e-02 7.54675233e-02 3.65336149e-02 5.07082908e-03 7.18197378e-01 2.98179288e+03 +2.17800000e-04 -1.65360702e-12 8.33309479e-02 8.13291597e-02 7.54988770e-02 3.65777467e-02 5.06589080e-03 7.18197378e-01 2.98179288e+03 +2.17900000e-04 -1.65360702e-12 8.33096860e-02 8.12799639e-02 7.55301881e-02 3.66218258e-02 5.06095842e-03 7.18197378e-01 2.98179288e+03 +2.18000000e-04 -1.65360702e-12 8.32884466e-02 8.12308349e-02 7.55614566e-02 3.66658521e-02 5.05603195e-03 7.18197378e-01 2.98179288e+03 +2.18100000e-04 -1.65360702e-12 8.32672298e-02 8.11817729e-02 7.55926825e-02 3.67098255e-02 5.05111140e-03 7.18197378e-01 2.98179288e+03 +2.18200000e-04 -1.65360702e-12 8.32460355e-02 8.11327778e-02 7.56238659e-02 3.67537462e-02 5.04619675e-03 7.18197378e-01 2.98179288e+03 +2.18300000e-04 -1.65360702e-12 8.32248639e-02 8.10838497e-02 7.56550066e-02 3.67976140e-02 5.04128801e-03 7.18197378e-01 2.98179288e+03 +2.18400000e-04 -1.65360702e-12 8.32037148e-02 8.10349884e-02 7.56861047e-02 3.68414290e-02 5.03638519e-03 7.18197378e-01 2.98325129e+03 +2.18500000e-04 -1.65360702e-12 8.31825884e-02 8.09861941e-02 7.57171603e-02 3.68851911e-02 5.03148827e-03 7.18197378e-01 2.98325129e+03 +2.18600000e-04 -1.65360702e-12 8.31614845e-02 8.09374666e-02 7.57481733e-02 3.69289004e-02 5.02659728e-03 7.18197378e-01 2.98325129e+03 +2.18700000e-04 -1.65360702e-12 8.31404033e-02 8.08888061e-02 7.57791437e-02 3.69725568e-02 5.02171220e-03 7.18197378e-01 2.98325129e+03 +2.18800000e-04 -1.65360702e-12 8.31193448e-02 8.08402125e-02 7.58100715e-02 3.70161604e-02 5.01683304e-03 7.18197378e-01 2.98325129e+03 +2.18900000e-04 -1.65360702e-12 8.30983089e-02 8.07916857e-02 7.58409567e-02 3.70597110e-02 5.01195979e-03 7.18197378e-01 2.98325129e+03 +2.19000000e-04 -1.65360702e-12 8.30772957e-02 8.07432258e-02 7.58717994e-02 3.71032087e-02 5.00709247e-03 7.18197378e-01 2.98421787e+03 +2.19100000e-04 -1.65360702e-12 8.30563051e-02 8.06948329e-02 7.59025995e-02 3.71466535e-02 5.00223106e-03 7.18197378e-01 2.98421787e+03 +2.19200000e-04 -1.65360702e-12 8.30353373e-02 8.06465067e-02 7.59333571e-02 3.71900454e-02 4.99737558e-03 7.18197378e-01 2.98421787e+03 +2.19300000e-04 -1.65360702e-12 8.30143921e-02 8.05982475e-02 7.59640721e-02 3.72333844e-02 4.99252602e-03 7.18197378e-01 2.98421787e+03 +2.19400000e-04 -1.65360702e-12 8.29934697e-02 8.05500551e-02 7.59947445e-02 3.72766704e-02 4.98768239e-03 7.18197378e-01 2.98518046e+03 +2.19500000e-04 -1.65360702e-12 8.29725699e-02 8.05019296e-02 7.60253744e-02 3.73199035e-02 4.98284468e-03 7.18197378e-01 2.98518046e+03 +2.19600000e-04 -1.65360702e-12 8.29516929e-02 8.04538709e-02 7.60559618e-02 3.73630837e-02 4.97801289e-03 7.18197378e-01 2.98518046e+03 +2.19700000e-04 -1.65360702e-12 8.29308387e-02 8.04058791e-02 7.60865066e-02 3.74062108e-02 4.97318704e-03 7.18197378e-01 2.98518046e+03 +2.19800000e-04 -1.65360702e-12 8.29100072e-02 8.03579540e-02 7.61170089e-02 3.74492850e-02 4.96836711e-03 7.18197378e-01 2.98613904e+03 +2.19900000e-04 -1.65360702e-12 8.28891984e-02 8.03100958e-02 7.61474686e-02 3.74923062e-02 4.96355311e-03 7.18197378e-01 2.98613904e+03 +2.20000000e-04 -1.65360702e-12 8.28684125e-02 8.02623044e-02 7.61778858e-02 3.75352744e-02 4.95874504e-03 7.18197378e-01 2.98613904e+03 +2.20100000e-04 -1.65360702e-12 8.28476493e-02 8.02145798e-02 7.62082605e-02 3.75781896e-02 4.95394289e-03 7.18197378e-01 2.98613904e+03 +2.20200000e-04 -1.65360702e-12 8.28269089e-02 8.01669220e-02 7.62385927e-02 3.76210518e-02 4.94914669e-03 7.18197378e-01 2.98709361e+03 +2.20300000e-04 -1.65360702e-12 8.28061913e-02 8.01193310e-02 7.62688824e-02 3.76638610e-02 4.94435641e-03 7.18197378e-01 2.98709361e+03 +2.20400000e-04 -1.65360702e-12 8.27854965e-02 8.00718068e-02 7.62991296e-02 3.77066172e-02 4.93957206e-03 7.18197378e-01 2.98709361e+03 +2.20500000e-04 -1.65360702e-12 8.27648246e-02 8.00243493e-02 7.63293344e-02 3.77493203e-02 4.93479365e-03 7.18197378e-01 2.98709361e+03 +2.20600000e-04 -1.65360702e-12 8.27441755e-02 7.99769585e-02 7.63594966e-02 3.77919704e-02 4.93002118e-03 7.18197378e-01 2.98804417e+03 +2.20700000e-04 -1.65360702e-12 8.27235492e-02 7.99296345e-02 7.63896163e-02 3.78345674e-02 4.92525464e-03 7.18197378e-01 2.98804417e+03 +2.20800000e-04 -1.65360702e-12 8.27029458e-02 7.98823773e-02 7.64196936e-02 3.78771114e-02 4.92049403e-03 7.18197378e-01 2.98804417e+03 +2.20900000e-04 -1.65360702e-12 8.26823652e-02 7.98351867e-02 7.64497284e-02 3.79196024e-02 4.91573937e-03 7.18197378e-01 2.98899071e+03 +2.21000000e-04 -1.65360702e-12 8.26618076e-02 7.97880629e-02 7.64797208e-02 3.79620403e-02 4.91099064e-03 7.18197378e-01 2.98899071e+03 +2.21100000e-04 -1.65360702e-12 8.26412728e-02 7.97410058e-02 7.65096707e-02 3.80044251e-02 4.90624785e-03 7.18197378e-01 2.98899071e+03 +2.21200000e-04 -1.65360702e-12 8.26207609e-02 7.96940153e-02 7.65395781e-02 3.80467569e-02 4.90151099e-03 7.18197378e-01 2.98899071e+03 +2.21300000e-04 -1.65360702e-12 8.26002719e-02 7.96470915e-02 7.65694432e-02 3.80890355e-02 4.89678008e-03 7.18197378e-01 2.98993321e+03 +2.21400000e-04 -1.65360702e-12 8.25798058e-02 7.96002344e-02 7.65992658e-02 3.81312611e-02 4.89205511e-03 7.18197378e-01 2.98993321e+03 +2.21500000e-04 -1.65360702e-12 8.25593626e-02 7.95534439e-02 7.66290460e-02 3.81734336e-02 4.88733607e-03 7.18197378e-01 2.98993321e+03 +2.21600000e-04 -1.65360702e-12 8.25389423e-02 7.95067201e-02 7.66587837e-02 3.82155530e-02 4.88262298e-03 7.18197378e-01 2.98993321e+03 +2.21700000e-04 -1.65360702e-12 8.25185450e-02 7.94600628e-02 7.66884791e-02 3.82576194e-02 4.87791583e-03 7.18197378e-01 2.99057783e+03 +2.21800000e-04 -1.65360702e-12 8.24981707e-02 7.94134722e-02 7.67181321e-02 3.82996326e-02 4.87321462e-03 7.18197378e-01 2.99057783e+03 +2.21900000e-04 -1.65360702e-12 8.24778192e-02 7.93669482e-02 7.67477427e-02 3.83415927e-02 4.86851936e-03 7.18197378e-01 2.99057783e+03 +2.22000000e-04 -1.65360702e-12 8.24574908e-02 7.93204907e-02 7.67773109e-02 3.83834997e-02 4.86383003e-03 7.18197378e-01 2.99122055e+03 +2.22100000e-04 -1.65360702e-12 8.24371853e-02 7.92740999e-02 7.68068368e-02 3.84253535e-02 4.85914665e-03 7.18197378e-01 2.99122055e+03 +2.22200000e-04 -1.65360702e-12 8.24169028e-02 7.92277755e-02 7.68363203e-02 3.84671543e-02 4.85446922e-03 7.18197378e-01 2.99122055e+03 +2.22300000e-04 -1.65360702e-12 8.23966433e-02 7.91815177e-02 7.68657614e-02 3.85089019e-02 4.84979773e-03 7.18197378e-01 2.99186136e+03 +2.22400000e-04 -1.65360702e-12 8.23764068e-02 7.91353264e-02 7.68951603e-02 3.85505964e-02 4.84513218e-03 7.18197378e-01 2.99186136e+03 +2.22500000e-04 -1.65360702e-12 8.23561933e-02 7.90892017e-02 7.69245168e-02 3.85922378e-02 4.84047258e-03 7.18197378e-01 2.99250026e+03 +2.22600000e-04 -1.65360702e-12 8.23360029e-02 7.90431434e-02 7.69538309e-02 3.86338261e-02 4.83581892e-03 7.18197378e-01 2.99250026e+03 +2.22700000e-04 -1.65360702e-12 8.23158354e-02 7.89971515e-02 7.69831028e-02 3.86753612e-02 4.83117121e-03 7.18197378e-01 2.99250026e+03 +2.22800000e-04 -1.65360702e-12 8.22956910e-02 7.89512262e-02 7.70123324e-02 3.87168431e-02 4.82652945e-03 7.18197378e-01 2.99353944e+03 +2.22900000e-04 -1.65360702e-12 8.22755696e-02 7.89053673e-02 7.70415197e-02 3.87582720e-02 4.82189363e-03 7.18197378e-01 2.99353944e+03 +2.23000000e-04 -1.65360702e-12 8.22554713e-02 7.88595747e-02 7.70706647e-02 3.87996477e-02 4.81726376e-03 7.18197378e-01 2.99353944e+03 +2.23100000e-04 -1.65360702e-12 8.22353960e-02 7.88138486e-02 7.70997675e-02 3.88409702e-02 4.81263983e-03 7.18197378e-01 2.99353944e+03 +2.23200000e-04 -1.65360702e-12 8.22153438e-02 7.87681889e-02 7.71288280e-02 3.88822396e-02 4.80802185e-03 7.18197378e-01 2.99457352e+03 +2.23300000e-04 -1.65360702e-12 8.21953146e-02 7.87225956e-02 7.71578462e-02 3.89234559e-02 4.80340982e-03 7.18197378e-01 2.99457352e+03 +2.23400000e-04 -1.65360702e-12 8.21753085e-02 7.86770686e-02 7.71868222e-02 3.89646190e-02 4.79880374e-03 7.18197378e-01 2.99457352e+03 +2.23500000e-04 -1.65360702e-12 8.21553256e-02 7.86316079e-02 7.72157561e-02 3.90057290e-02 4.79420360e-03 7.18197378e-01 2.99457352e+03 +2.23600000e-04 -1.65360702e-12 8.21353657e-02 7.85862136e-02 7.72446477e-02 3.90467858e-02 4.78960941e-03 7.18197378e-01 2.99457352e+03 +2.23700000e-04 -1.65360702e-12 8.21154289e-02 7.85408856e-02 7.72734971e-02 3.90877895e-02 4.78502117e-03 7.18197378e-01 2.99560249e+03 +2.23800000e-04 -1.65360702e-12 8.20955152e-02 7.84956238e-02 7.73023043e-02 3.91287400e-02 4.78043887e-03 7.18197378e-01 2.99560249e+03 +2.23900000e-04 -1.65360702e-12 8.20756246e-02 7.84504283e-02 7.73310693e-02 3.91696374e-02 4.77586253e-03 7.18197378e-01 2.99560249e+03 +2.24000000e-04 -1.65360702e-12 8.20557572e-02 7.84052990e-02 7.73597922e-02 3.92104816e-02 4.77129213e-03 7.18197378e-01 2.99560249e+03 +2.24100000e-04 -1.65360702e-12 8.20359129e-02 7.83602360e-02 7.73884730e-02 3.92512726e-02 4.76672767e-03 7.18197378e-01 2.99662634e+03 +2.24200000e-04 -1.65360702e-12 8.20160917e-02 7.83152391e-02 7.74171116e-02 3.92920105e-02 4.76216917e-03 7.18197378e-01 2.99662634e+03 +2.24300000e-04 -1.65360702e-12 8.19962937e-02 7.82703084e-02 7.74457081e-02 3.93326953e-02 4.75761661e-03 7.18197378e-01 2.99662634e+03 +2.24400000e-04 -1.65360702e-12 8.19765188e-02 7.82254439e-02 7.74742625e-02 3.93733269e-02 4.75307000e-03 7.18197378e-01 2.99662634e+03 +2.24500000e-04 -1.65360702e-12 8.19567671e-02 7.81806456e-02 7.75027748e-02 3.94139054e-02 4.74852934e-03 7.18197378e-01 2.99864455e+03 +2.24600000e-04 -1.65360702e-12 8.19370385e-02 7.81359133e-02 7.75312450e-02 3.94544307e-02 4.74399462e-03 7.18197378e-01 2.99864455e+03 +2.24700000e-04 -1.65360702e-12 8.19173332e-02 7.80912472e-02 7.75596731e-02 3.94949029e-02 4.73946586e-03 7.18197378e-01 2.99864455e+03 +2.24800000e-04 -1.65360702e-12 8.18976509e-02 7.80466471e-02 7.75880592e-02 3.95353219e-02 4.73494303e-03 7.18197378e-01 2.99864455e+03 +2.24900000e-04 -1.65360702e-12 8.18779919e-02 7.80021130e-02 7.76164033e-02 3.95756878e-02 4.73042616e-03 7.18197378e-01 2.99864455e+03 +2.25000000e-04 -1.65360702e-12 8.18583561e-02 7.79576451e-02 7.76447053e-02 3.96160005e-02 4.72591523e-03 7.18197378e-01 2.99864455e+03 +2.25100000e-04 -1.65360702e-12 8.18387435e-02 7.79132431e-02 7.76729653e-02 3.96562601e-02 4.72141025e-03 7.18197378e-01 2.99864455e+03 +2.25200000e-04 -1.65360702e-12 8.18191540e-02 7.78689071e-02 7.77011833e-02 3.96964665e-02 4.71691121e-03 7.18197378e-01 2.99864455e+03 +2.25300000e-04 -1.65360702e-12 8.17995878e-02 7.78246370e-02 7.77293593e-02 3.97366199e-02 4.71241812e-03 7.18197378e-01 2.99864455e+03 +2.25400000e-04 -1.65360702e-12 8.17800448e-02 7.77804329e-02 7.77574934e-02 3.97767200e-02 4.70793098e-03 7.18197378e-01 3.00064248e+03 +2.25500000e-04 -1.65360702e-12 8.17605250e-02 7.77362948e-02 7.77855855e-02 3.98167671e-02 4.70344978e-03 7.18197378e-01 3.00064248e+03 +2.25600000e-04 -1.65360702e-12 8.17410284e-02 7.76922225e-02 7.78136357e-02 3.98567610e-02 4.69897452e-03 7.18197378e-01 3.00064248e+03 +2.25700000e-04 -1.65360702e-12 8.17215551e-02 7.76482161e-02 7.78416439e-02 3.98967018e-02 4.69450521e-03 7.18197378e-01 3.00064248e+03 +2.25800000e-04 -1.65360702e-12 8.17021050e-02 7.76042755e-02 7.78696102e-02 3.99365895e-02 4.69004185e-03 7.18197378e-01 3.00064248e+03 +2.25900000e-04 -1.65360702e-12 8.16826782e-02 7.75604008e-02 7.78975347e-02 3.99764241e-02 4.68558443e-03 7.18197378e-01 3.00064248e+03 +2.26000000e-04 -1.65360702e-12 8.16632746e-02 7.75165919e-02 7.79254172e-02 4.00162055e-02 4.68113295e-03 7.18197378e-01 3.00064248e+03 +2.26100000e-04 -1.65360702e-12 8.16438942e-02 7.74728487e-02 7.79532579e-02 4.00559339e-02 4.67668741e-03 7.18197378e-01 3.00064248e+03 +2.26200000e-04 -1.65360702e-12 8.16245371e-02 7.74291713e-02 7.79810568e-02 4.00956091e-02 4.67224782e-03 7.18197378e-01 3.00262009e+03 +2.26300000e-04 -1.65360702e-12 8.16052033e-02 7.73855596e-02 7.80088138e-02 4.01352313e-02 4.66781417e-03 7.18197378e-01 3.00262009e+03 +2.26400000e-04 -1.65360702e-12 8.15858928e-02 7.73420136e-02 7.80365290e-02 4.01748003e-02 4.66338646e-03 7.18197378e-01 3.00262009e+03 +2.26500000e-04 -1.65360702e-12 8.15666055e-02 7.72985333e-02 7.80642024e-02 4.02143163e-02 4.65896469e-03 7.18197378e-01 3.00262009e+03 +2.26600000e-04 -1.65360702e-12 8.15473415e-02 7.72551186e-02 7.80918340e-02 4.02537791e-02 4.65454886e-03 7.18197378e-01 3.00262009e+03 +2.26700000e-04 -1.65360702e-12 8.15281008e-02 7.72117696e-02 7.81194239e-02 4.02931889e-02 4.65013897e-03 7.18197378e-01 3.00262009e+03 +2.26800000e-04 -1.65360702e-12 8.15088834e-02 7.71684861e-02 7.81469720e-02 4.03325456e-02 4.64573502e-03 7.18197378e-01 3.00262009e+03 +2.26900000e-04 -1.65360702e-12 8.14896893e-02 7.71252683e-02 7.81744784e-02 4.03718492e-02 4.64133701e-03 7.18197378e-01 3.00262009e+03 +2.27000000e-04 -1.65360702e-12 8.14705185e-02 7.70821159e-02 7.82019430e-02 4.04110998e-02 4.63694493e-03 7.18197378e-01 3.00262009e+03 +2.27100000e-04 -1.65360702e-12 8.14513709e-02 7.70390291e-02 7.82293660e-02 4.04502973e-02 4.63255880e-03 7.18197378e-01 3.00457732e+03 +2.27200000e-04 -1.65360702e-12 8.14322467e-02 7.69960078e-02 7.82567473e-02 4.04894418e-02 4.62817860e-03 7.18197378e-01 3.00457732e+03 +2.27300000e-04 -1.65360702e-12 8.14131459e-02 7.69530519e-02 7.82840869e-02 4.05285332e-02 4.62380433e-03 7.18197378e-01 3.00457732e+03 +2.27400000e-04 -1.65360702e-12 8.13940683e-02 7.69101615e-02 7.83113849e-02 4.05675715e-02 4.61943601e-03 7.18197378e-01 3.00457732e+03 +2.27500000e-04 -1.65360702e-12 8.13750140e-02 7.68673364e-02 7.83386412e-02 4.06065569e-02 4.61507361e-03 7.18197378e-01 3.00457732e+03 +2.27600000e-04 -1.65360702e-12 8.13559831e-02 7.68245768e-02 7.83658559e-02 4.06454892e-02 4.61071715e-03 7.18197378e-01 3.00457732e+03 +2.27700000e-04 -1.65360702e-12 8.13369755e-02 7.67818825e-02 7.83930291e-02 4.06843685e-02 4.60636663e-03 7.18197378e-01 3.00457732e+03 +2.27800000e-04 -1.65360702e-12 8.13179913e-02 7.67392535e-02 7.84201607e-02 4.07231947e-02 4.60202203e-03 7.18197378e-01 3.00457732e+03 +2.27900000e-04 -1.65360702e-12 8.12990304e-02 7.66966898e-02 7.84472507e-02 4.07619680e-02 4.59768337e-03 7.18197378e-01 3.00457732e+03 +2.28000000e-04 -1.65360702e-12 8.12800928e-02 7.66541913e-02 7.84742992e-02 4.08006882e-02 4.59335063e-03 7.18197378e-01 3.00651415e+03 +2.28100000e-04 -1.65360702e-12 8.12611786e-02 7.66117581e-02 7.85013061e-02 4.08393555e-02 4.58902383e-03 7.18197378e-01 3.00651415e+03 +2.28200000e-04 -1.65360702e-12 8.12422877e-02 7.65693901e-02 7.85282716e-02 4.08779698e-02 4.58470295e-03 7.18197378e-01 3.00651415e+03 +2.28300000e-04 -1.65360702e-12 8.12234202e-02 7.65270873e-02 7.85551956e-02 4.09165311e-02 4.58038801e-03 7.18197378e-01 3.00651415e+03 +2.28400000e-04 -1.65360702e-12 8.12045760e-02 7.64848496e-02 7.85820781e-02 4.09550395e-02 4.57607899e-03 7.18197378e-01 3.00651415e+03 +2.28500000e-04 -1.65360702e-12 8.11857552e-02 7.64426771e-02 7.86089192e-02 4.09934949e-02 4.57177589e-03 7.18197378e-01 3.00651415e+03 +2.28600000e-04 -1.65360702e-12 8.11669577e-02 7.64005696e-02 7.86357188e-02 4.10318973e-02 4.56747872e-03 7.18197378e-01 3.00651415e+03 +2.28700000e-04 -1.65360702e-12 8.11481837e-02 7.63585271e-02 7.86624771e-02 4.10702468e-02 4.56318748e-03 7.18197378e-01 3.00651415e+03 +2.28800000e-04 -1.65360702e-12 8.11294330e-02 7.63165497e-02 7.86891939e-02 4.11085434e-02 4.55890215e-03 7.18197378e-01 3.00843053e+03 +2.28900000e-04 -1.65360702e-12 8.11107056e-02 7.62746373e-02 7.87158695e-02 4.11467870e-02 4.55462275e-03 7.18197378e-01 3.00843053e+03 +2.29000000e-04 -1.65360702e-12 8.10920017e-02 7.62327898e-02 7.87425036e-02 4.11849777e-02 4.55034927e-03 7.18197378e-01 3.00843053e+03 +2.29100000e-04 -1.65360702e-12 8.10733211e-02 7.61910073e-02 7.87690965e-02 4.12231156e-02 4.54608171e-03 7.18197378e-01 3.00843053e+03 +2.29200000e-04 -1.65360702e-12 8.10546639e-02 7.61492896e-02 7.87956480e-02 4.12612005e-02 4.54182007e-03 7.18197378e-01 3.00843053e+03 +2.29300000e-04 -1.65360702e-12 8.10360301e-02 7.61076369e-02 7.88221583e-02 4.12992326e-02 4.53756435e-03 7.18197378e-01 3.00843053e+03 +2.29400000e-04 -1.65360702e-12 8.10174197e-02 7.60660489e-02 7.88486273e-02 4.13372117e-02 4.53331454e-03 7.18197378e-01 3.00843053e+03 +2.29500000e-04 -1.65360702e-12 8.09988327e-02 7.60245257e-02 7.88750550e-02 4.13751381e-02 4.52907065e-03 7.18197378e-01 3.00843053e+03 +2.29600000e-04 -1.65360702e-12 8.09802691e-02 7.59830674e-02 7.89014415e-02 4.14130115e-02 4.52483267e-03 7.18197378e-01 3.00843053e+03 +2.29700000e-04 -1.65360702e-12 8.09617288e-02 7.59416737e-02 7.89277869e-02 4.14508321e-02 4.52060061e-03 7.18197378e-01 3.01032644e+03 +2.29800000e-04 -1.65360702e-12 8.09432120e-02 7.59003448e-02 7.89540910e-02 4.14885999e-02 4.51637445e-03 7.18197378e-01 3.01032644e+03 +2.29900000e-04 -1.65360702e-12 8.09247185e-02 7.58590805e-02 7.89803540e-02 4.15263149e-02 4.51215421e-03 7.18197378e-01 3.01032644e+03 +2.30000000e-04 -1.65360702e-12 8.09062485e-02 7.58178808e-02 7.90065759e-02 4.15639771e-02 4.50793988e-03 7.18197378e-01 3.01032644e+03 +2.30100000e-04 -1.65360702e-12 8.08878019e-02 7.57767458e-02 7.90327566e-02 4.16015864e-02 4.50373145e-03 7.18197378e-01 3.01032644e+03 +2.30200000e-04 -1.65360702e-12 8.08693787e-02 7.57356753e-02 7.90588963e-02 4.16391430e-02 4.49952893e-03 7.18197378e-01 3.01032644e+03 +2.30300000e-04 -1.65360702e-12 8.08509788e-02 7.56946693e-02 7.90849949e-02 4.16766468e-02 4.49533232e-03 7.18197378e-01 3.01032644e+03 +2.30400000e-04 -1.65360702e-12 8.08326024e-02 7.56537278e-02 7.91110524e-02 4.17140979e-02 4.49114161e-03 7.18197378e-01 3.01032644e+03 +2.30500000e-04 -1.65360702e-12 8.08142495e-02 7.56128508e-02 7.91370689e-02 4.17514962e-02 4.48695680e-03 7.18197378e-01 3.01032644e+03 +2.30600000e-04 -1.65360702e-12 8.07959199e-02 7.55720383e-02 7.91630444e-02 4.17888417e-02 4.48277790e-03 7.18197378e-01 3.01220186e+03 +2.30700000e-04 -1.65360702e-12 8.07776137e-02 7.55312901e-02 7.91889789e-02 4.18261346e-02 4.47860489e-03 7.18197378e-01 3.01220186e+03 +2.30800000e-04 -1.65360702e-12 8.07593310e-02 7.54906062e-02 7.92148725e-02 4.18633747e-02 4.47443778e-03 7.18197378e-01 3.01220186e+03 +2.30900000e-04 -1.65360702e-12 8.07410717e-02 7.54499867e-02 7.92407251e-02 4.19005621e-02 4.47027657e-03 7.18197378e-01 3.01220186e+03 +2.31000000e-04 -1.65360702e-12 8.07228357e-02 7.54094315e-02 7.92665368e-02 4.19376968e-02 4.46612125e-03 7.18197378e-01 3.01220186e+03 +2.31100000e-04 -1.65360702e-12 8.07046233e-02 7.53689405e-02 7.92923076e-02 4.19747789e-02 4.46197183e-03 7.18197378e-01 3.01220186e+03 +2.31200000e-04 -1.65360702e-12 8.06864342e-02 7.53285138e-02 7.93180376e-02 4.20118083e-02 4.45782830e-03 7.18197378e-01 3.01220186e+03 +2.31300000e-04 -1.65360702e-12 8.06682686e-02 7.52881512e-02 7.93437267e-02 4.20487851e-02 4.45369067e-03 7.18197378e-01 3.01220186e+03 +2.31400000e-04 -1.65360702e-12 8.06501263e-02 7.52478528e-02 7.93693749e-02 4.20857092e-02 4.44955892e-03 7.18197378e-01 3.01405677e+03 +2.31500000e-04 -1.65360702e-12 8.06320076e-02 7.52076184e-02 7.93949824e-02 4.21225807e-02 4.44543306e-03 7.18197378e-01 3.01405677e+03 +2.31600000e-04 -1.65360702e-12 8.06139122e-02 7.51674482e-02 7.94205491e-02 4.21593996e-02 4.44131308e-03 7.18197378e-01 3.01405677e+03 +2.31700000e-04 -1.65360702e-12 8.05958403e-02 7.51273419e-02 7.94460751e-02 4.21961659e-02 4.43719899e-03 7.18197378e-01 3.01405677e+03 +2.31800000e-04 -1.65360702e-12 8.05777918e-02 7.50872997e-02 7.94715603e-02 4.22328797e-02 4.43309078e-03 7.18197378e-01 3.01405677e+03 +2.31900000e-04 -1.65360702e-12 8.05597667e-02 7.50473214e-02 7.94970048e-02 4.22695409e-02 4.42898846e-03 7.18197378e-01 3.01405677e+03 +2.32000000e-04 -1.65360702e-12 8.05417650e-02 7.50074070e-02 7.95224086e-02 4.23061495e-02 4.42489201e-03 7.18197378e-01 3.01405677e+03 +2.32100000e-04 -1.65360702e-12 8.05237868e-02 7.49675565e-02 7.95477718e-02 4.23427056e-02 4.42080144e-03 7.18197378e-01 3.01405677e+03 +2.32200000e-04 -1.65360702e-12 8.05058320e-02 7.49277699e-02 7.95730943e-02 4.23792092e-02 4.41671675e-03 7.18197378e-01 3.01405677e+03 +2.32300000e-04 -1.65360702e-12 8.04879007e-02 7.48880470e-02 7.95983763e-02 4.24156603e-02 4.41263794e-03 7.18197378e-01 3.01589116e+03 +2.32400000e-04 -1.65360702e-12 8.04699927e-02 7.48483879e-02 7.96236176e-02 4.24520589e-02 4.40856499e-03 7.18197378e-01 3.01589116e+03 +2.32500000e-04 -1.65360702e-12 8.04521082e-02 7.48087925e-02 7.96488184e-02 4.24884050e-02 4.40449792e-03 7.18197378e-01 3.01589116e+03 +2.32600000e-04 -1.65360702e-12 8.04342471e-02 7.47692609e-02 7.96739787e-02 4.25246987e-02 4.40043671e-03 7.18197378e-01 3.01589116e+03 +2.32700000e-04 -1.65360702e-12 8.04164095e-02 7.47297928e-02 7.96990984e-02 4.25609400e-02 4.39638138e-03 7.18197378e-01 3.01589116e+03 +2.32800000e-04 -1.65360702e-12 8.03985953e-02 7.46903884e-02 7.97241777e-02 4.25971288e-02 4.39233191e-03 7.18197378e-01 3.01589116e+03 +2.32900000e-04 -1.65360702e-12 8.03808045e-02 7.46510476e-02 7.97492165e-02 4.26332653e-02 4.38828830e-03 7.18197378e-01 3.01589116e+03 +2.33000000e-04 -1.65360702e-12 8.03630372e-02 7.46117702e-02 7.97742149e-02 4.26693493e-02 4.38425056e-03 7.18197378e-01 3.01589116e+03 +2.33100000e-04 -1.65360702e-12 8.03452932e-02 7.45725564e-02 7.97991729e-02 4.27053810e-02 4.38021867e-03 7.18197378e-01 3.01770502e+03 +2.33200000e-04 -1.65360702e-12 8.03275727e-02 7.45334060e-02 7.98240905e-02 4.27413603e-02 4.37619264e-03 7.18197378e-01 3.01770502e+03 +2.33300000e-04 -1.65360702e-12 8.03098757e-02 7.44943190e-02 7.98489677e-02 4.27772873e-02 4.37217247e-03 7.18197378e-01 3.01770502e+03 +2.33400000e-04 -1.65360702e-12 8.02922020e-02 7.44552954e-02 7.98738046e-02 4.28131620e-02 4.36815816e-03 7.18197378e-01 3.01770502e+03 +2.33500000e-04 -1.65360702e-12 8.02745518e-02 7.44163351e-02 7.98986012e-02 4.28489843e-02 4.36414969e-03 7.18197378e-01 3.01770502e+03 +2.33600000e-04 -1.65360702e-12 8.02569250e-02 7.43774381e-02 7.99233575e-02 4.28847544e-02 4.36014708e-03 7.18197378e-01 3.01770502e+03 +2.33700000e-04 -1.65360702e-12 8.02393217e-02 7.43386044e-02 7.99480736e-02 4.29204722e-02 4.35615031e-03 7.18197378e-01 3.01770502e+03 +2.33800000e-04 -1.65360702e-12 8.02217417e-02 7.42998338e-02 7.99727494e-02 4.29561378e-02 4.35215940e-03 7.18197378e-01 3.01770502e+03 +2.33900000e-04 -1.65360702e-12 8.02041852e-02 7.42611264e-02 7.99973850e-02 4.29917512e-02 4.34817432e-03 7.18197378e-01 3.01770502e+03 +2.34000000e-04 -1.65360702e-12 8.01866521e-02 7.42224822e-02 8.00219805e-02 4.30273123e-02 4.34419509e-03 7.18197378e-01 3.01949836e+03 +2.34100000e-04 -1.65360702e-12 8.01691424e-02 7.41839010e-02 8.00465358e-02 4.30628212e-02 4.34022170e-03 7.18197378e-01 3.01949836e+03 +2.34200000e-04 -1.65360702e-12 8.01516562e-02 7.41453828e-02 8.00710510e-02 4.30982780e-02 4.33625414e-03 7.18197378e-01 3.01949836e+03 +2.34300000e-04 -1.65360702e-12 8.01341933e-02 7.41069276e-02 8.00955261e-02 4.31336826e-02 4.33229243e-03 7.18197378e-01 3.01949836e+03 +2.34400000e-04 -1.65360702e-12 8.01167539e-02 7.40685354e-02 8.01199612e-02 4.31690351e-02 4.32833654e-03 7.18197378e-01 3.01949836e+03 +2.34500000e-04 -1.65360702e-12 8.00993379e-02 7.40302061e-02 8.01443562e-02 4.32043355e-02 4.32438649e-03 7.18197378e-01 3.01949836e+03 +2.34600000e-04 -1.65360702e-12 8.00819453e-02 7.39919397e-02 8.01687112e-02 4.32395837e-02 4.32044227e-03 7.18197378e-01 3.01949836e+03 +2.34700000e-04 -1.65360702e-12 8.00645761e-02 7.39537361e-02 8.01930262e-02 4.32747799e-02 4.31650387e-03 7.18197378e-01 3.01949836e+03 +2.34800000e-04 -1.65360702e-12 8.00472303e-02 7.39155953e-02 8.02173012e-02 4.33099241e-02 4.31257130e-03 7.18197378e-01 3.01949836e+03 +2.34900000e-04 -1.65360702e-12 8.00299080e-02 7.38775172e-02 8.02415363e-02 4.33450162e-02 4.30864455e-03 7.18197378e-01 3.02127117e+03 +2.35000000e-04 -1.65360702e-12 8.00126090e-02 7.38395018e-02 8.02657315e-02 4.33800562e-02 4.30472363e-03 7.18197378e-01 3.02127117e+03 +2.35100000e-04 -1.65360702e-12 7.99953334e-02 7.38015490e-02 8.02898869e-02 4.34150443e-02 4.30080852e-03 7.18197378e-01 3.02127117e+03 +2.35200000e-04 -1.65360702e-12 7.99780813e-02 7.37636589e-02 8.03140024e-02 4.34499804e-02 4.29689922e-03 7.18197378e-01 3.02127117e+03 +2.35300000e-04 -1.65360702e-12 7.99608525e-02 7.37258313e-02 8.03380781e-02 4.34848646e-02 4.29299575e-03 7.18197378e-01 3.02127117e+03 +2.35400000e-04 -1.65360702e-12 7.99436471e-02 7.36880662e-02 8.03621139e-02 4.35196968e-02 4.28909808e-03 7.18197378e-01 3.02127117e+03 +2.35500000e-04 -1.65360702e-12 7.99264651e-02 7.36503636e-02 8.03861101e-02 4.35544771e-02 4.28520622e-03 7.18197378e-01 3.02127117e+03 +2.35600000e-04 -1.65360702e-12 7.99093066e-02 7.36127235e-02 8.04100665e-02 4.35892055e-02 4.28132017e-03 7.18197378e-01 3.02127117e+03 +2.35700000e-04 -1.65360702e-12 7.98921714e-02 7.35751457e-02 8.04339831e-02 4.36238821e-02 4.27743992e-03 7.18197378e-01 3.02302347e+03 +2.35800000e-04 -1.65360702e-12 7.98750595e-02 7.35376302e-02 8.04578602e-02 4.36585067e-02 4.27356548e-03 7.18197378e-01 3.02302347e+03 +2.35900000e-04 -1.65360702e-12 7.98579711e-02 7.35001771e-02 8.04816975e-02 4.36930796e-02 4.26969683e-03 7.18197378e-01 3.02302347e+03 +2.36000000e-04 -1.65360702e-12 7.98409061e-02 7.34627862e-02 8.05054953e-02 4.37276007e-02 4.26583398e-03 7.18197378e-01 3.02302347e+03 +2.36100000e-04 -1.65360702e-12 7.98238644e-02 7.34254575e-02 8.05292534e-02 4.37620699e-02 4.26197693e-03 7.18197378e-01 3.02302347e+03 +2.36200000e-04 -1.65360702e-12 7.98068461e-02 7.33881909e-02 8.05529720e-02 4.37964874e-02 4.25812567e-03 7.18197378e-01 3.02302347e+03 +2.36300000e-04 -1.65360702e-12 7.97898512e-02 7.33509865e-02 8.05766511e-02 4.38308532e-02 4.25428019e-03 7.18197378e-01 3.02302347e+03 +2.36400000e-04 -1.65360702e-12 7.97728796e-02 7.33138441e-02 8.06002907e-02 4.38651672e-02 4.25044051e-03 7.18197378e-01 3.02302347e+03 +2.36500000e-04 -1.65360702e-12 7.97559314e-02 7.32767638e-02 8.06238908e-02 4.38994296e-02 4.24660661e-03 7.18197378e-01 3.02302347e+03 +2.36600000e-04 -1.65360702e-12 7.97390066e-02 7.32397454e-02 8.06474514e-02 4.39336403e-02 4.24277849e-03 7.18197378e-01 3.02475528e+03 +2.36700000e-04 -1.65360702e-12 7.97221051e-02 7.32027889e-02 8.06709727e-02 4.39677993e-02 4.23895615e-03 7.18197378e-01 3.02475528e+03 +2.36800000e-04 -1.65360702e-12 7.97052270e-02 7.31658944e-02 8.06944545e-02 4.40019067e-02 4.23513959e-03 7.18197378e-01 3.02475528e+03 +2.36900000e-04 -1.65360702e-12 7.96883722e-02 7.31290616e-02 8.07178970e-02 4.40359625e-02 4.23132880e-03 7.18197378e-01 3.02475528e+03 +2.37000000e-04 -1.65360702e-12 7.96715408e-02 7.30922907e-02 8.07413002e-02 4.40699667e-02 4.22752379e-03 7.18197378e-01 3.02475528e+03 +2.37100000e-04 -1.65360702e-12 7.96547327e-02 7.30555815e-02 8.07646641e-02 4.41039194e-02 4.22372454e-03 7.18197378e-01 3.02475528e+03 +2.37200000e-04 -1.65360702e-12 7.96379480e-02 7.30189339e-02 8.07879887e-02 4.41378205e-02 4.21993106e-03 7.18197378e-01 3.02475528e+03 +2.37300000e-04 -1.65360702e-12 7.96211866e-02 7.29823481e-02 8.08112741e-02 4.41716701e-02 4.21614335e-03 7.18197378e-01 3.02475528e+03 +2.37400000e-04 -1.65360702e-12 7.96044485e-02 7.29458238e-02 8.08345203e-02 4.42054682e-02 4.21236139e-03 7.18197378e-01 3.02475528e+03 +2.37500000e-04 -1.65360702e-12 7.95877338e-02 7.29093610e-02 8.08577273e-02 4.42392149e-02 4.20858519e-03 7.18197378e-01 3.02646661e+03 +2.37600000e-04 -1.65360702e-12 7.95710423e-02 7.28729598e-02 8.08808951e-02 4.42729101e-02 4.20481475e-03 7.18197378e-01 3.02646661e+03 +2.37700000e-04 -1.65360702e-12 7.95543742e-02 7.28366200e-02 8.09040239e-02 4.43065540e-02 4.20105007e-03 7.18197378e-01 3.02646661e+03 +2.37800000e-04 -1.65360702e-12 7.95377294e-02 7.28003416e-02 8.09271136e-02 4.43401464e-02 4.19729113e-03 7.18197378e-01 3.02646661e+03 +2.37900000e-04 -1.65360702e-12 7.95211080e-02 7.27641246e-02 8.09501642e-02 4.43736875e-02 4.19353794e-03 7.18197378e-01 3.02646661e+03 +2.38000000e-04 -1.65360702e-12 7.95045098e-02 7.27279689e-02 8.09731758e-02 4.44071772e-02 4.18979049e-03 7.18197378e-01 3.02646661e+03 +2.38100000e-04 -1.65360702e-12 7.94879349e-02 7.26918744e-02 8.09961484e-02 4.44406156e-02 4.18604879e-03 7.18197378e-01 3.02646661e+03 +2.38200000e-04 -1.65360702e-12 7.94713833e-02 7.26558411e-02 8.10190821e-02 4.44740027e-02 4.18231282e-03 7.18197378e-01 3.02646661e+03 +2.38300000e-04 -1.65360702e-12 7.94548551e-02 7.26198690e-02 8.10419768e-02 4.45073386e-02 4.17858259e-03 7.18197378e-01 3.02815750e+03 +2.38400000e-04 -1.65360702e-12 7.94383501e-02 7.25839580e-02 8.10648327e-02 4.45406233e-02 4.17485810e-03 7.18197378e-01 3.02815750e+03 +2.38500000e-04 -1.65360702e-12 7.94218684e-02 7.25481081e-02 8.10876497e-02 4.45738567e-02 4.17113933e-03 7.18197378e-01 3.02815750e+03 +2.38600000e-04 -1.65360702e-12 7.94054099e-02 7.25123192e-02 8.11104278e-02 4.46070389e-02 4.16742630e-03 7.18197378e-01 3.02815750e+03 +2.38700000e-04 -1.65360702e-12 7.93889748e-02 7.24765912e-02 8.11331672e-02 4.46401700e-02 4.16371898e-03 7.18197378e-01 3.02815750e+03 +2.38800000e-04 -1.65360702e-12 7.93725629e-02 7.24409242e-02 8.11558678e-02 4.46732500e-02 4.16001739e-03 7.18197378e-01 3.02815750e+03 +2.38900000e-04 -1.65360702e-12 7.93561742e-02 7.24053180e-02 8.11785296e-02 4.47062788e-02 4.15632152e-03 7.18197378e-01 3.02815750e+03 +2.39000000e-04 -1.65360702e-12 7.93398088e-02 7.23697726e-02 8.12011528e-02 4.47392566e-02 4.15263136e-03 7.18197378e-01 3.02815750e+03 +2.39100000e-04 -1.65360702e-12 7.93234667e-02 7.23342880e-02 8.12237373e-02 4.47721833e-02 4.14894691e-03 7.18197378e-01 3.02815750e+03 +2.39200000e-04 -1.65360702e-12 7.93071478e-02 7.22988641e-02 8.12462831e-02 4.48050590e-02 4.14526818e-03 7.18197378e-01 3.02982797e+03 +2.39300000e-04 -1.65360702e-12 7.92908522e-02 7.22635008e-02 8.12687903e-02 4.48378837e-02 4.14159515e-03 7.18197378e-01 3.02982797e+03 +2.39400000e-04 -1.65360702e-12 7.92745798e-02 7.22281982e-02 8.12912590e-02 4.48706574e-02 4.13792783e-03 7.18197378e-01 3.02982797e+03 +2.39500000e-04 -1.65360702e-12 7.92583306e-02 7.21929561e-02 8.13136891e-02 4.49033802e-02 4.13426620e-03 7.18197378e-01 3.02982797e+03 +2.39600000e-04 -1.65360702e-12 7.92421047e-02 7.21577745e-02 8.13360807e-02 4.49360520e-02 4.13061028e-03 7.18197378e-01 3.02982797e+03 +2.39700000e-04 -1.65360702e-12 7.92259019e-02 7.21226534e-02 8.13584339e-02 4.49686730e-02 4.12696004e-03 7.18197378e-01 3.02982797e+03 +2.39800000e-04 -1.65360702e-12 7.92097224e-02 7.20875926e-02 8.13807485e-02 4.50012431e-02 4.12331550e-03 7.18197378e-01 3.02982797e+03 +2.39900000e-04 -1.65360702e-12 7.91935661e-02 7.20525923e-02 8.14030248e-02 4.50337624e-02 4.11967665e-03 7.18197378e-01 3.02982797e+03 +2.40000000e-04 -1.65360702e-12 7.91774329e-02 7.20176522e-02 8.14252627e-02 4.50662308e-02 4.11604348e-03 7.18197378e-01 3.03147807e+03 +2.40100000e-04 -1.65360702e-12 7.91613230e-02 7.19827724e-02 8.14474623e-02 4.50986485e-02 4.11241600e-03 7.18197378e-01 3.03147807e+03 +2.40200000e-04 -1.65360702e-12 7.91452363e-02 7.19479527e-02 8.14696235e-02 4.51310155e-02 4.10879419e-03 7.18197378e-01 3.03147807e+03 +2.40300000e-04 -1.65360702e-12 7.91291727e-02 7.19131932e-02 8.14917465e-02 4.51633317e-02 4.10517806e-03 7.18197378e-01 3.03147807e+03 +2.40400000e-04 -1.65360702e-12 7.91131323e-02 7.18784938e-02 8.15138312e-02 4.51955972e-02 4.10156760e-03 7.18197378e-01 3.03147807e+03 +2.40500000e-04 -1.65360702e-12 7.90971151e-02 7.18438545e-02 8.15358777e-02 4.52278121e-02 4.09796281e-03 7.18197378e-01 3.03147807e+03 +2.40600000e-04 -1.65360702e-12 7.90811210e-02 7.18092751e-02 8.15578860e-02 4.52599763e-02 4.09436368e-03 7.18197378e-01 3.03147807e+03 +2.40700000e-04 -1.65360702e-12 7.90651501e-02 7.17747557e-02 8.15798562e-02 4.52920899e-02 4.09077022e-03 7.18197378e-01 3.03147807e+03 +2.40800000e-04 -1.65360702e-12 7.90492023e-02 7.17402961e-02 8.16017883e-02 4.53241530e-02 4.08718242e-03 7.18197378e-01 3.03147807e+03 +2.40900000e-04 -1.65360702e-12 7.90332777e-02 7.17058964e-02 8.16236823e-02 4.53561655e-02 4.08360027e-03 7.18197378e-01 3.03310783e+03 +2.41000000e-04 -1.65360702e-12 7.90173762e-02 7.16715564e-02 8.16455382e-02 4.53881275e-02 4.08002378e-03 7.18197378e-01 3.03310783e+03 +2.41100000e-04 -1.65360702e-12 7.90014979e-02 7.16372762e-02 8.16673562e-02 4.54200390e-02 4.07645293e-03 7.18197378e-01 3.03310783e+03 +2.41200000e-04 -1.65360702e-12 7.89856426e-02 7.16030556e-02 8.16891361e-02 4.54519001e-02 4.07288773e-03 7.18197378e-01 3.03310783e+03 +2.41300000e-04 -1.65360702e-12 7.89698105e-02 7.15688947e-02 8.17108781e-02 4.54837107e-02 4.06932818e-03 7.18197378e-01 3.03310783e+03 +2.41400000e-04 -1.65360702e-12 7.89540015e-02 7.15347933e-02 8.17325823e-02 4.55154709e-02 4.06577426e-03 7.18197378e-01 3.03310783e+03 +2.41500000e-04 -1.65360702e-12 7.89382155e-02 7.15007514e-02 8.17542485e-02 4.55471808e-02 4.06222598e-03 7.18197378e-01 3.03310783e+03 +2.41600000e-04 -1.65360702e-12 7.89224527e-02 7.14667689e-02 8.17758769e-02 4.55788403e-02 4.05868333e-03 7.18197378e-01 3.03310783e+03 +2.41700000e-04 -1.65360702e-12 7.89067129e-02 7.14328459e-02 8.17974675e-02 4.56104495e-02 4.05514631e-03 7.18197378e-01 3.03310783e+03 +2.41800000e-04 -1.65360702e-12 7.88909963e-02 7.13989822e-02 8.18190203e-02 4.56420084e-02 4.05161492e-03 7.18197378e-01 3.03471731e+03 +2.41900000e-04 -1.65360702e-12 7.88753027e-02 7.13651778e-02 8.18405354e-02 4.56735171e-02 4.04808915e-03 7.18197378e-01 3.03471731e+03 +2.42000000e-04 -1.65360702e-12 7.88596321e-02 7.13314326e-02 8.18620128e-02 4.57049756e-02 4.04456900e-03 7.18197378e-01 3.03471731e+03 +2.42100000e-04 -1.65360702e-12 7.88439846e-02 7.12977466e-02 8.18834526e-02 4.57363839e-02 4.04105446e-03 7.18197378e-01 3.03471731e+03 +2.42200000e-04 -1.65360702e-12 7.88283602e-02 7.12641197e-02 8.19048547e-02 4.57677421e-02 4.03754553e-03 7.18197378e-01 3.03471731e+03 +2.42300000e-04 -1.65360702e-12 7.88127587e-02 7.12305519e-02 8.19262192e-02 4.57990501e-02 4.03404222e-03 7.18197378e-01 3.03471731e+03 +2.42400000e-04 -1.65360702e-12 7.87971803e-02 7.11970432e-02 8.19475461e-02 4.58303080e-02 4.03054451e-03 7.18197378e-01 3.03471731e+03 +2.42500000e-04 -1.65360702e-12 7.87816250e-02 7.11635933e-02 8.19688355e-02 4.58615159e-02 4.02705239e-03 7.18197378e-01 3.03471731e+03 +2.42600000e-04 -1.65360702e-12 7.87660926e-02 7.11302024e-02 8.19900874e-02 4.58926738e-02 4.02356588e-03 7.18197378e-01 3.03630655e+03 +2.42700000e-04 -1.65360702e-12 7.87505833e-02 7.10968703e-02 8.20113019e-02 4.59237817e-02 4.02008496e-03 7.18197378e-01 3.03630655e+03 +2.42800000e-04 -1.65360702e-12 7.87350969e-02 7.10635971e-02 8.20324790e-02 4.59548396e-02 4.01660963e-03 7.18197378e-01 3.03630655e+03 +2.42900000e-04 -1.65360702e-12 7.87196335e-02 7.10303825e-02 8.20536186e-02 4.59858476e-02 4.01313989e-03 7.18197378e-01 3.03630655e+03 +2.43000000e-04 -1.65360702e-12 7.87041931e-02 7.09972267e-02 8.20747209e-02 4.60168057e-02 4.00967573e-03 7.18197378e-01 3.03630655e+03 +2.43100000e-04 -1.65360702e-12 7.86887757e-02 7.09641295e-02 8.20957859e-02 4.60477139e-02 4.00621715e-03 7.18197378e-01 3.03630655e+03 +2.43200000e-04 -1.65360702e-12 7.86733813e-02 7.09310908e-02 8.21168137e-02 4.60785723e-02 4.00276415e-03 7.18197378e-01 3.03630655e+03 +2.43300000e-04 -1.65360702e-12 7.86580098e-02 7.08981106e-02 8.21378042e-02 4.61093809e-02 3.99931672e-03 7.18197378e-01 3.03630655e+03 +2.43400000e-04 -1.65360702e-12 7.86426612e-02 7.08651890e-02 8.21587574e-02 4.61401397e-02 3.99587486e-03 7.18197378e-01 3.03630655e+03 +2.43500000e-04 -1.65360702e-12 7.86273356e-02 7.08323257e-02 8.21796735e-02 4.61708488e-02 3.99243856e-03 7.18197378e-01 3.03787563e+03 +2.43600000e-04 -1.65360702e-12 7.86120329e-02 7.07995207e-02 8.22005525e-02 4.62015082e-02 3.98900782e-03 7.18197378e-01 3.03787563e+03 +2.43700000e-04 -1.65360702e-12 7.85967531e-02 7.07667741e-02 8.22213944e-02 4.62321179e-02 3.98558264e-03 7.18197378e-01 3.03787563e+03 +2.43800000e-04 -1.65360702e-12 7.85814962e-02 7.07340857e-02 8.22421992e-02 4.62626780e-02 3.98216302e-03 7.18197378e-01 3.03787563e+03 +2.43900000e-04 -1.65360702e-12 7.85662622e-02 7.07014554e-02 8.22629670e-02 4.62931886e-02 3.97874894e-03 7.18197378e-01 3.03787563e+03 +2.44000000e-04 -1.65360702e-12 7.85510512e-02 7.06688833e-02 8.22836978e-02 4.63236495e-02 3.97534041e-03 7.18197378e-01 3.03787563e+03 +2.44100000e-04 -1.65360702e-12 7.85358630e-02 7.06363692e-02 8.23043917e-02 4.63540609e-02 3.97193743e-03 7.18197378e-01 3.03787563e+03 +2.44200000e-04 -1.65360702e-12 7.85206976e-02 7.06039131e-02 8.23250486e-02 4.63844228e-02 3.96853998e-03 7.18197378e-01 3.03787563e+03 +2.44300000e-04 -1.65360702e-12 7.85055552e-02 7.05715150e-02 8.23456686e-02 4.64147353e-02 3.96514807e-03 7.18197378e-01 3.03787563e+03 +2.44400000e-04 -1.65360702e-12 7.84904355e-02 7.05391748e-02 8.23662519e-02 4.64449983e-02 3.96176168e-03 7.18197378e-01 3.03942459e+03 +2.44500000e-04 -1.65360702e-12 7.84753388e-02 7.05068924e-02 8.23867983e-02 4.64752119e-02 3.95838083e-03 7.18197378e-01 3.03942459e+03 +2.44600000e-04 -1.65360702e-12 7.84602648e-02 7.04746677e-02 8.24073079e-02 4.65053762e-02 3.95500550e-03 7.18197378e-01 3.03942459e+03 +2.44700000e-04 -1.65360702e-12 7.84452137e-02 7.04425008e-02 8.24277808e-02 4.65354911e-02 3.95163568e-03 7.18197378e-01 3.03942459e+03 +2.44800000e-04 -1.65360702e-12 7.84301854e-02 7.04103916e-02 8.24482170e-02 4.65655568e-02 3.94827139e-03 7.18197378e-01 3.03942459e+03 +2.44900000e-04 -1.65360702e-12 7.84151799e-02 7.03783399e-02 8.24686165e-02 4.65955732e-02 3.94491260e-03 7.18197378e-01 3.03942459e+03 +2.45000000e-04 -1.65360702e-12 7.84001972e-02 7.03463458e-02 8.24889795e-02 4.66255404e-02 3.94155932e-03 7.18197378e-01 3.03942459e+03 +2.45100000e-04 -1.65360702e-12 7.83852373e-02 7.03144091e-02 8.25093058e-02 4.66554584e-02 3.93821155e-03 7.18197378e-01 3.03942459e+03 +2.45200000e-04 -1.65360702e-12 7.83703001e-02 7.02825299e-02 8.25295956e-02 4.66853272e-02 3.93486927e-03 7.18197378e-01 3.04095351e+03 +2.45300000e-04 -1.65360702e-12 7.83553857e-02 7.02507081e-02 8.25498489e-02 4.67151470e-02 3.93153250e-03 7.18197378e-01 3.04095351e+03 +2.45400000e-04 -1.65360702e-12 7.83404941e-02 7.02189435e-02 8.25700657e-02 4.67449176e-02 3.92820121e-03 7.18197378e-01 3.04095351e+03 +2.45500000e-04 -1.65360702e-12 7.83256252e-02 7.01872362e-02 8.25902460e-02 4.67746392e-02 3.92487541e-03 7.18197378e-01 3.04095351e+03 +2.45600000e-04 -1.65360702e-12 7.83107791e-02 7.01555861e-02 8.26103900e-02 4.68043118e-02 3.92155509e-03 7.18197378e-01 3.04095351e+03 +2.45700000e-04 -1.65360702e-12 7.82959556e-02 7.01239931e-02 8.26304976e-02 4.68339355e-02 3.91824026e-03 7.18197378e-01 3.04095351e+03 +2.45800000e-04 -1.65360702e-12 7.82811549e-02 7.00924572e-02 8.26505689e-02 4.68635102e-02 3.91493090e-03 7.18197378e-01 3.04095351e+03 +2.45900000e-04 -1.65360702e-12 7.82663769e-02 7.00609783e-02 8.26706039e-02 4.68930360e-02 3.91162701e-03 7.18197378e-01 3.04095351e+03 +2.46000000e-04 -1.65360702e-12 7.82516216e-02 7.00295564e-02 8.26906027e-02 4.69225129e-02 3.90832859e-03 7.18197378e-01 3.04095351e+03 +2.46100000e-04 -1.65360702e-12 7.82368889e-02 6.99981914e-02 8.27105652e-02 4.69519410e-02 3.90503563e-03 7.18197378e-01 3.04246247e+03 +2.46200000e-04 -1.65360702e-12 7.82221789e-02 6.99668831e-02 8.27304916e-02 4.69813203e-02 3.90174814e-03 7.18197378e-01 3.04246247e+03 +2.46300000e-04 -1.65360702e-12 7.82074916e-02 6.99356317e-02 8.27503818e-02 4.70106509e-02 3.89846609e-03 7.18197378e-01 3.04246247e+03 +2.46400000e-04 -1.65360702e-12 7.81928269e-02 6.99044370e-02 8.27702360e-02 4.70399328e-02 3.89518950e-03 7.18197378e-01 3.04246247e+03 +2.46500000e-04 -1.65360702e-12 7.81781849e-02 6.98732989e-02 8.27900540e-02 4.70691659e-02 3.89191836e-03 7.18197378e-01 3.04246247e+03 +2.46600000e-04 -1.65360702e-12 7.81635655e-02 6.98422174e-02 8.28098361e-02 4.70983505e-02 3.88865266e-03 7.18197378e-01 3.04246247e+03 +2.46700000e-04 -1.65360702e-12 7.81489687e-02 6.98111925e-02 8.28295822e-02 4.71274864e-02 3.88539240e-03 7.18197378e-01 3.04246247e+03 +2.46800000e-04 -1.65360702e-12 7.81343945e-02 6.97802240e-02 8.28492923e-02 4.71565737e-02 3.88213757e-03 7.18197378e-01 3.04246247e+03 +2.46900000e-04 -1.65360702e-12 7.81198429e-02 6.97493120e-02 8.28689665e-02 4.71856126e-02 3.87888817e-03 7.18197378e-01 3.04395154e+03 +2.47000000e-04 -1.65360702e-12 7.81053139e-02 6.97184563e-02 8.28886049e-02 4.72146029e-02 3.87564420e-03 7.18197378e-01 3.04395154e+03 +2.47100000e-04 -1.65360702e-12 7.80908074e-02 6.96876569e-02 8.29082074e-02 4.72435448e-02 3.87240565e-03 7.18197378e-01 3.04395154e+03 +2.47200000e-04 -1.65360702e-12 7.80763235e-02 6.96569137e-02 8.29277742e-02 4.72724382e-02 3.86917252e-03 7.18197378e-01 3.04395154e+03 +2.47300000e-04 -1.65360702e-12 7.80618621e-02 6.96262267e-02 8.29473052e-02 4.73012833e-02 3.86594481e-03 7.18197378e-01 3.04395154e+03 +2.47400000e-04 -1.65360702e-12 7.80474233e-02 6.95955958e-02 8.29668005e-02 4.73300801e-02 3.86272250e-03 7.18197378e-01 3.04395154e+03 +2.47500000e-04 -1.65360702e-12 7.80330070e-02 6.95650210e-02 8.29862601e-02 4.73588285e-02 3.85950560e-03 7.18197378e-01 3.04395154e+03 +2.47600000e-04 -1.65360702e-12 7.80186132e-02 6.95345021e-02 8.30056840e-02 4.73875287e-02 3.85629410e-03 7.18197378e-01 3.04395154e+03 +2.47700000e-04 -1.65360702e-12 7.80042419e-02 6.95040392e-02 8.30250724e-02 4.74161806e-02 3.85308799e-03 7.18197378e-01 3.04395154e+03 +2.47800000e-04 -1.65360702e-12 7.79898931e-02 6.94736322e-02 8.30444252e-02 4.74447844e-02 3.84988728e-03 7.18197378e-01 3.04542080e+03 +2.47900000e-04 -1.65360702e-12 7.79755668e-02 6.94432810e-02 8.30637425e-02 4.74733400e-02 3.84669195e-03 7.18197378e-01 3.04542080e+03 +2.48000000e-04 -1.65360702e-12 7.79612629e-02 6.94129855e-02 8.30830243e-02 4.75018475e-02 3.84350201e-03 7.18197378e-01 3.04542080e+03 +2.48100000e-04 -1.65360702e-12 7.79469815e-02 6.93827457e-02 8.31022707e-02 4.75303069e-02 3.84031745e-03 7.18197378e-01 3.04542080e+03 +2.48200000e-04 -1.65360702e-12 7.79327225e-02 6.93525615e-02 8.31214817e-02 4.75587183e-02 3.83713827e-03 7.18197378e-01 3.04542080e+03 +2.48300000e-04 -1.65360702e-12 7.79184859e-02 6.93224329e-02 8.31406573e-02 4.75870816e-02 3.83396445e-03 7.18197378e-01 3.04542080e+03 +2.48400000e-04 -1.65360702e-12 7.79042718e-02 6.92923597e-02 8.31597976e-02 4.76153971e-02 3.83079600e-03 7.18197378e-01 3.04542080e+03 +2.48500000e-04 -1.65360702e-12 7.78900800e-02 6.92623421e-02 8.31789026e-02 4.76436646e-02 3.82763291e-03 7.18197378e-01 3.04542080e+03 +2.48600000e-04 -1.65360702e-12 7.78759107e-02 6.92323798e-02 8.31979723e-02 4.76718842e-02 3.82447518e-03 7.18197378e-01 3.04542080e+03 +2.48700000e-04 -1.65360702e-12 7.78617637e-02 6.92024728e-02 8.32170069e-02 4.77000560e-02 3.82132280e-03 7.18197378e-01 3.04639686e+03 +2.48800000e-04 -1.65360702e-12 7.78476391e-02 6.91726210e-02 8.32360062e-02 4.77281800e-02 3.81817577e-03 7.18197378e-01 3.04639686e+03 +2.48900000e-04 -1.65360702e-12 7.78335368e-02 6.91428245e-02 8.32549705e-02 4.77562563e-02 3.81503409e-03 7.18197378e-01 3.04639686e+03 +2.49000000e-04 -1.65360702e-12 7.78194568e-02 6.91130831e-02 8.32738997e-02 4.77842848e-02 3.81189774e-03 7.18197378e-01 3.04639686e+03 +2.49100000e-04 -1.65360702e-12 7.78053992e-02 6.90833968e-02 8.32927938e-02 4.78122657e-02 3.80876673e-03 7.18197378e-01 3.04639686e+03 +2.49200000e-04 -1.65360702e-12 7.77913639e-02 6.90537654e-02 8.33116529e-02 4.78401989e-02 3.80564105e-03 7.18197378e-01 3.04736405e+03 +2.49300000e-04 -1.65360702e-12 7.77773509e-02 6.90241890e-02 8.33304770e-02 4.78680845e-02 3.80252070e-03 7.18197378e-01 3.04736405e+03 +2.49400000e-04 -1.65360702e-12 7.77633602e-02 6.89946675e-02 8.33492662e-02 4.78959225e-02 3.79940566e-03 7.18197378e-01 3.04736405e+03 +2.49500000e-04 -1.65360702e-12 7.77493918e-02 6.89652008e-02 8.33680205e-02 4.79237131e-02 3.79629595e-03 7.18197378e-01 3.04736405e+03 +2.49600000e-04 -1.65360702e-12 7.77354456e-02 6.89357889e-02 8.33867400e-02 4.79514561e-02 3.79319155e-03 7.18197378e-01 3.04736405e+03 +2.49700000e-04 -1.65360702e-12 7.77215216e-02 6.89064316e-02 8.34054247e-02 4.79791517e-02 3.79009245e-03 7.18197378e-01 3.04736405e+03 +2.49800000e-04 -1.65360702e-12 7.77076199e-02 6.88771290e-02 8.34240746e-02 4.80068000e-02 3.78699866e-03 7.18197378e-01 3.04832239e+03 +2.49900000e-04 -1.65360702e-12 7.76937404e-02 6.88478810e-02 8.34426897e-02 4.80344008e-02 3.78391017e-03 7.18197378e-01 3.04832239e+03 +2.50000000e-04 -1.65360702e-12 7.76798831e-02 6.88186874e-02 8.34612702e-02 4.80619544e-02 3.78082697e-03 7.18197378e-01 3.04832239e+03 +2.50100000e-04 -1.65360702e-12 7.76660481e-02 6.87895483e-02 8.34798160e-02 4.80894607e-02 3.77774907e-03 7.18197378e-01 3.04832239e+03 +2.50200000e-04 -1.65360702e-12 7.76522351e-02 6.87604636e-02 8.34983273e-02 4.81169197e-02 3.77467645e-03 7.18197378e-01 3.04832239e+03 +2.50300000e-04 -1.65360702e-12 7.76384444e-02 6.87314332e-02 8.35168039e-02 4.81443316e-02 3.77160910e-03 7.18197378e-01 3.04832239e+03 +2.50400000e-04 -1.65360702e-12 7.76246758e-02 6.87024570e-02 8.35352460e-02 4.81716963e-02 3.76854704e-03 7.18197378e-01 3.04927192e+03 +2.50500000e-04 -1.65360702e-12 7.76109293e-02 6.86735350e-02 8.35536536e-02 4.81990139e-02 3.76549025e-03 7.18197378e-01 3.04927192e+03 +2.50600000e-04 -1.65360702e-12 7.75972050e-02 6.86446672e-02 8.35720268e-02 4.82262844e-02 3.76243872e-03 7.18197378e-01 3.04927192e+03 +2.50700000e-04 -1.65360702e-12 7.75835028e-02 6.86158534e-02 8.35903656e-02 4.82535079e-02 3.75939245e-03 7.18197378e-01 3.04927192e+03 +2.50800000e-04 -1.65360702e-12 7.75698227e-02 6.85870936e-02 8.36086700e-02 4.82806844e-02 3.75635145e-03 7.18197378e-01 3.04927192e+03 +2.50900000e-04 -1.65360702e-12 7.75561646e-02 6.85583878e-02 8.36269401e-02 4.83078140e-02 3.75331569e-03 7.18197378e-01 3.04927192e+03 +2.51000000e-04 -1.65360702e-12 7.75425286e-02 6.85297358e-02 8.36451758e-02 4.83348967e-02 3.75028519e-03 7.18197378e-01 3.05021266e+03 +2.51100000e-04 -1.65360702e-12 7.75289147e-02 6.85011376e-02 8.36633774e-02 4.83619325e-02 3.74725992e-03 7.18197378e-01 3.05021266e+03 +2.51200000e-04 -1.65360702e-12 7.75153228e-02 6.84725932e-02 8.36815447e-02 4.83889215e-02 3.74423990e-03 7.18197378e-01 3.05021266e+03 +2.51300000e-04 -1.65360702e-12 7.75017530e-02 6.84441025e-02 8.36996779e-02 4.84158637e-02 3.74122511e-03 7.18197378e-01 3.05021266e+03 +2.51400000e-04 -1.65360702e-12 7.74882051e-02 6.84156653e-02 8.37177769e-02 4.84427592e-02 3.73821555e-03 7.18197378e-01 3.05021266e+03 +2.51500000e-04 -1.65360702e-12 7.74746793e-02 6.83872818e-02 8.37358419e-02 4.84696080e-02 3.73521121e-03 7.18197378e-01 3.05021266e+03 +2.51600000e-04 -1.65360702e-12 7.74611754e-02 6.83589517e-02 8.37538728e-02 4.84964102e-02 3.73221209e-03 7.18197378e-01 3.05114465e+03 +2.51700000e-04 -1.65360702e-12 7.74476935e-02 6.83306750e-02 8.37718697e-02 4.85231657e-02 3.72921819e-03 7.18197378e-01 3.05114465e+03 +2.51800000e-04 -1.65360702e-12 7.74342335e-02 6.83024517e-02 8.37898327e-02 4.85498747e-02 3.72622950e-03 7.18197378e-01 3.05114465e+03 +2.51900000e-04 -1.65360702e-12 7.74207955e-02 6.82742817e-02 8.38077617e-02 4.85765372e-02 3.72324601e-03 7.18197378e-01 3.05114465e+03 +2.52000000e-04 -1.65360702e-12 7.74073794e-02 6.82461649e-02 8.38256569e-02 4.86031532e-02 3.72026773e-03 7.18197378e-01 3.05114465e+03 +2.52100000e-04 -1.65360702e-12 7.73939853e-02 6.82181013e-02 8.38435182e-02 4.86297228e-02 3.71729464e-03 7.18197378e-01 3.05206792e+03 +2.52200000e-04 -1.65360702e-12 7.73806130e-02 6.81900908e-02 8.38613457e-02 4.86562459e-02 3.71432674e-03 7.18197378e-01 3.05206792e+03 +2.52300000e-04 -1.65360702e-12 7.73672626e-02 6.81621333e-02 8.38791395e-02 4.86827228e-02 3.71136402e-03 7.18197378e-01 3.05206792e+03 +2.52400000e-04 -1.65360702e-12 7.73539340e-02 6.81342288e-02 8.38968995e-02 4.87091533e-02 3.70840649e-03 7.18197378e-01 3.05206792e+03 +2.52500000e-04 -1.65360702e-12 7.73406273e-02 6.81063773e-02 8.39146259e-02 4.87355375e-02 3.70545414e-03 7.18197378e-01 3.05206792e+03 +2.52600000e-04 -1.65360702e-12 7.73273425e-02 6.80785785e-02 8.39323186e-02 4.87618756e-02 3.70250695e-03 7.18197378e-01 3.05206792e+03 +2.52700000e-04 -1.65360702e-12 7.73140794e-02 6.80508325e-02 8.39499778e-02 4.87881675e-02 3.69956494e-03 7.18197378e-01 3.05267786e+03 +2.52800000e-04 -1.65360702e-12 7.73008382e-02 6.80231393e-02 8.39676034e-02 4.88144132e-02 3.69662808e-03 7.18197378e-01 3.05267786e+03 +2.52900000e-04 -1.65360702e-12 7.72876188e-02 6.79954987e-02 8.39851955e-02 4.88406129e-02 3.69369638e-03 7.18197378e-01 3.05267786e+03 +2.53000000e-04 -1.65360702e-12 7.72744211e-02 6.79679107e-02 8.40027541e-02 4.88667665e-02 3.69076984e-03 7.18197378e-01 3.05267786e+03 +2.53100000e-04 -1.65360702e-12 7.72612452e-02 6.79403752e-02 8.40202793e-02 4.88928741e-02 3.68784844e-03 7.18197378e-01 3.05308513e+03 +2.53200000e-04 -1.65360702e-12 7.72480910e-02 6.79128922e-02 8.40377711e-02 4.89189357e-02 3.68493218e-03 7.18197378e-01 3.05308513e+03 +2.53300000e-04 -1.65360702e-12 7.72349585e-02 6.78854615e-02 8.40552295e-02 4.89449515e-02 3.68202106e-03 7.18197378e-01 3.05308513e+03 +2.53400000e-04 -1.65360702e-12 7.72218478e-02 6.78580832e-02 8.40726547e-02 4.89709214e-02 3.67911507e-03 7.18197378e-01 3.05349067e+03 +2.53500000e-04 -1.65360702e-12 7.72087588e-02 6.78307571e-02 8.40900466e-02 4.89968454e-02 3.67621421e-03 7.18197378e-01 3.05349067e+03 +2.53600000e-04 -1.65360702e-12 7.71956914e-02 6.78034833e-02 8.41074053e-02 4.90227237e-02 3.67331848e-03 7.18197378e-01 3.05389449e+03 +2.53700000e-04 -1.65360702e-12 7.71826457e-02 6.77762615e-02 8.41247308e-02 4.90485563e-02 3.67042786e-03 7.18197378e-01 3.05389449e+03 +2.53800000e-04 -1.65360702e-12 7.71696217e-02 6.77490918e-02 8.41420231e-02 4.90743431e-02 3.66754235e-03 7.18197378e-01 3.05389449e+03 +2.53900000e-04 -1.65360702e-12 7.71566193e-02 6.77219742e-02 8.41592824e-02 4.91000844e-02 3.66466195e-03 7.18197378e-01 3.05429659e+03 +2.54000000e-04 -1.65360702e-12 7.71436385e-02 6.76949084e-02 8.41765086e-02 4.91257800e-02 3.66178665e-03 7.18197378e-01 3.05429659e+03 +2.54100000e-04 -1.65360702e-12 7.71306793e-02 6.76678945e-02 8.41937018e-02 4.91514300e-02 3.65891645e-03 7.18197378e-01 3.05469697e+03 +2.54200000e-04 -1.65360702e-12 7.71177417e-02 6.76409325e-02 8.42108621e-02 4.91770346e-02 3.65605135e-03 7.18197378e-01 3.05469697e+03 +2.54300000e-04 -1.65360702e-12 7.71048256e-02 6.76140221e-02 8.42279894e-02 4.92025937e-02 3.65319133e-03 7.18197378e-01 3.05469697e+03 +2.54400000e-04 -1.65360702e-12 7.70919311e-02 6.75871635e-02 8.42450838e-02 4.92281074e-02 3.65033639e-03 7.18197378e-01 3.05509563e+03 +2.54500000e-04 -1.65360702e-12 7.70790582e-02 6.75603564e-02 8.42621454e-02 4.92535757e-02 3.64748653e-03 7.18197378e-01 3.05509563e+03 +2.54600000e-04 -1.65360702e-12 7.70662068e-02 6.75336009e-02 8.42791741e-02 4.92789986e-02 3.64464174e-03 7.18197378e-01 3.05509563e+03 +2.54700000e-04 -1.65360702e-12 7.70533768e-02 6.75068968e-02 8.42961702e-02 4.93043763e-02 3.64180202e-03 7.18197378e-01 3.05549258e+03 +2.54800000e-04 -1.65360702e-12 7.70405684e-02 6.74802442e-02 8.43131335e-02 4.93297088e-02 3.63896736e-03 7.18197378e-01 3.05549258e+03 +2.54900000e-04 -1.65360702e-12 7.70277814e-02 6.74536429e-02 8.43300641e-02 4.93549960e-02 3.63613776e-03 7.18197378e-01 3.05588782e+03 +2.55000000e-04 -1.65360702e-12 7.70150159e-02 6.74270928e-02 8.43469621e-02 4.93802381e-02 3.63331321e-03 7.18197378e-01 3.05588782e+03 +2.55100000e-04 -1.65360702e-12 7.70022719e-02 6.74005940e-02 8.43638274e-02 4.94054351e-02 3.63049371e-03 7.18197378e-01 3.05588782e+03 +2.55200000e-04 -1.65360702e-12 7.69895492e-02 6.73741464e-02 8.43806603e-02 4.94305871e-02 3.62767925e-03 7.18197378e-01 3.05616049e+03 +2.55300000e-04 -1.65360702e-12 7.69768480e-02 6.73477498e-02 8.43974606e-02 4.94556940e-02 3.62486982e-03 7.18197378e-01 3.05616049e+03 +2.55400000e-04 -1.65360702e-12 7.69641681e-02 6.73214042e-02 8.44142285e-02 4.94807560e-02 3.62206543e-03 7.18197378e-01 3.05634583e+03 +2.55500000e-04 -1.65360702e-12 7.69515096e-02 6.72951095e-02 8.44309639e-02 4.95057730e-02 3.61926606e-03 7.18197378e-01 3.05653079e+03 +2.55600000e-04 -1.65360702e-12 7.69388725e-02 6.72688658e-02 8.44476670e-02 4.95307452e-02 3.61647172e-03 7.18197378e-01 3.05671537e+03 +2.55700000e-04 -1.65360702e-12 7.69262567e-02 6.72426728e-02 8.44643377e-02 4.95556725e-02 3.61368239e-03 7.18197378e-01 3.05689957e+03 +2.55800000e-04 -1.65360702e-12 7.69136623e-02 6.72165306e-02 8.44809761e-02 4.95805551e-02 3.61089807e-03 7.18197378e-01 3.05708340e+03 +2.55900000e-04 -1.65360702e-12 7.69010891e-02 6.71904391e-02 8.44975823e-02 4.96053929e-02 3.60811876e-03 7.18197378e-01 3.05708340e+03 +2.56000000e-04 -1.65360702e-12 7.68885372e-02 6.71643982e-02 8.45141562e-02 4.96301861e-02 3.60534445e-03 7.18197378e-01 3.05755008e+03 +2.56100000e-04 -1.65360702e-12 7.68760066e-02 6.71384078e-02 8.45306980e-02 4.96549346e-02 3.60257513e-03 7.18197378e-01 3.05755008e+03 +2.56200000e-04 -1.65360702e-12 7.68634973e-02 6.71124679e-02 8.45472077e-02 4.96796385e-02 3.59981081e-03 7.18197378e-01 3.05755008e+03 +2.56300000e-04 -1.65360702e-12 7.68510092e-02 6.70865785e-02 8.45636852e-02 4.97042978e-02 3.59705146e-03 7.18197378e-01 3.05828503e+03 +2.56400000e-04 -1.65360702e-12 7.68385423e-02 6.70607394e-02 8.45801307e-02 4.97289127e-02 3.59429710e-03 7.18197378e-01 3.05828503e+03 +2.56500000e-04 -1.65360702e-12 7.68260966e-02 6.70349505e-02 8.45965443e-02 4.97534831e-02 3.59154772e-03 7.18197378e-01 3.05828503e+03 +2.56600000e-04 -1.65360702e-12 7.68136721e-02 6.70092119e-02 8.46129258e-02 4.97780091e-02 3.58880330e-03 7.18197378e-01 3.05828503e+03 +2.56700000e-04 -1.65360702e-12 7.68012687e-02 6.69835234e-02 8.46292755e-02 4.98024907e-02 3.58606384e-03 7.18197378e-01 3.05828503e+03 +2.56800000e-04 -1.65360702e-12 7.67888865e-02 6.69578850e-02 8.46455932e-02 4.98269280e-02 3.58332935e-03 7.18197378e-01 3.05901385e+03 +2.56900000e-04 -1.65360702e-12 7.67765255e-02 6.69322966e-02 8.46618792e-02 4.98513211e-02 3.58059981e-03 7.18197378e-01 3.05901385e+03 +2.57000000e-04 -1.65360702e-12 7.67641855e-02 6.69067582e-02 8.46781333e-02 4.98756699e-02 3.57787521e-03 7.18197378e-01 3.05901385e+03 +2.57100000e-04 -1.65360702e-12 7.67518667e-02 6.68812697e-02 8.46943557e-02 4.98999745e-02 3.57515556e-03 7.18197378e-01 3.05901385e+03 +2.57200000e-04 -1.65360702e-12 7.67395689e-02 6.68558309e-02 8.47105464e-02 4.99242351e-02 3.57244085e-03 7.18197378e-01 3.05901385e+03 +2.57300000e-04 -1.65360702e-12 7.67272922e-02 6.68304419e-02 8.47267054e-02 4.99484515e-02 3.56973107e-03 7.18197378e-01 3.05973658e+03 +2.57400000e-04 -1.65360702e-12 7.67150365e-02 6.68051026e-02 8.47428329e-02 4.99726239e-02 3.56702622e-03 7.18197378e-01 3.05973658e+03 +2.57500000e-04 -1.65360702e-12 7.67028019e-02 6.67798129e-02 8.47589287e-02 4.99967524e-02 3.56432629e-03 7.18197378e-01 3.05973658e+03 +2.57600000e-04 -1.65360702e-12 7.66905883e-02 6.67545728e-02 8.47749930e-02 5.00208368e-02 3.56163127e-03 7.18197378e-01 3.05973658e+03 +2.57700000e-04 -1.65360702e-12 7.66783956e-02 6.67293821e-02 8.47910258e-02 5.00448774e-02 3.55894117e-03 7.18197378e-01 3.05973658e+03 +2.57800000e-04 -1.65360702e-12 7.66662240e-02 6.67042408e-02 8.48070272e-02 5.00688742e-02 3.55625597e-03 7.18197378e-01 3.06045323e+03 +2.57900000e-04 -1.65360702e-12 7.66540733e-02 6.66791489e-02 8.48229971e-02 5.00928272e-02 3.55357568e-03 7.18197378e-01 3.06045323e+03 +2.58000000e-04 -1.65360702e-12 7.66419435e-02 6.66541063e-02 8.48389357e-02 5.01167364e-02 3.55090027e-03 7.18197378e-01 3.06045323e+03 +2.58100000e-04 -1.65360702e-12 7.66298346e-02 6.66291129e-02 8.48548430e-02 5.01406019e-02 3.54822976e-03 7.18197378e-01 3.06045323e+03 +2.58200000e-04 -1.65360702e-12 7.66177467e-02 6.66041686e-02 8.48707190e-02 5.01644237e-02 3.54556414e-03 7.18197378e-01 3.06045323e+03 +2.58300000e-04 -1.65360702e-12 7.66056796e-02 6.65792734e-02 8.48865637e-02 5.01882020e-02 3.54290339e-03 7.18197378e-01 3.06116384e+03 +2.58400000e-04 -1.65360702e-12 7.65936334e-02 6.65544272e-02 8.49023773e-02 5.02119367e-02 3.54024751e-03 7.18197378e-01 3.06116384e+03 +2.58500000e-04 -1.65360702e-12 7.65816081e-02 6.65296300e-02 8.49181597e-02 5.02356279e-02 3.53759651e-03 7.18197378e-01 3.06116384e+03 +2.58600000e-04 -1.65360702e-12 7.65696035e-02 6.65048816e-02 8.49339110e-02 5.02592757e-02 3.53495036e-03 7.18197378e-01 3.06116384e+03 +2.58700000e-04 -1.65360702e-12 7.65576198e-02 6.64801820e-02 8.49496312e-02 5.02828800e-02 3.53230908e-03 7.18197378e-01 3.06186842e+03 +2.58800000e-04 -1.65360702e-12 7.65456569e-02 6.64555312e-02 8.49653205e-02 5.03064409e-02 3.52967265e-03 7.18197378e-01 3.06186842e+03 +2.58900000e-04 -1.65360702e-12 7.65337147e-02 6.64309291e-02 8.49809787e-02 5.03299586e-02 3.52704106e-03 7.18197378e-01 3.06186842e+03 +2.59000000e-04 -1.65360702e-12 7.65217933e-02 6.64063755e-02 8.49966060e-02 5.03534330e-02 3.52441432e-03 7.18197378e-01 3.06186842e+03 +2.59100000e-04 -1.65360702e-12 7.65098927e-02 6.63818705e-02 8.50122024e-02 5.03768641e-02 3.52179241e-03 7.18197378e-01 3.06186842e+03 +2.59200000e-04 -1.65360702e-12 7.64980127e-02 6.63574140e-02 8.50277680e-02 5.04002521e-02 3.51917533e-03 7.18197378e-01 3.06256700e+03 +2.59300000e-04 -1.65360702e-12 7.64861535e-02 6.63330058e-02 8.50433027e-02 5.04235970e-02 3.51656308e-03 7.18197378e-01 3.06256700e+03 +2.59400000e-04 -1.65360702e-12 7.64743149e-02 6.63086461e-02 8.50588067e-02 5.04468988e-02 3.51395564e-03 7.18197378e-01 3.06256700e+03 +2.59500000e-04 -1.65360702e-12 7.64624970e-02 6.62843345e-02 8.50742800e-02 5.04701576e-02 3.51135302e-03 7.18197378e-01 3.06256700e+03 +2.59600000e-04 -1.65360702e-12 7.64506997e-02 6.62600712e-02 8.50897226e-02 5.04933734e-02 3.50875521e-03 7.18197378e-01 3.06256700e+03 +2.59700000e-04 -1.65360702e-12 7.64389231e-02 6.62358560e-02 8.51051345e-02 5.05165463e-02 3.50616221e-03 7.18197378e-01 3.06325962e+03 +2.59800000e-04 -1.65360702e-12 7.64271671e-02 6.62116889e-02 8.51205159e-02 5.05396763e-02 3.50357400e-03 7.18197378e-01 3.06325962e+03 +2.59900000e-04 -1.65360702e-12 7.64154316e-02 6.61875698e-02 8.51358667e-02 5.05627635e-02 3.50099058e-03 7.18197378e-01 3.06325962e+03 +2.60000000e-04 -1.65360702e-12 7.64037167e-02 6.61634986e-02 8.51511870e-02 5.05858079e-02 3.49841195e-03 7.18197378e-01 3.06325962e+03 +2.60100000e-04 -1.65360702e-12 7.63920224e-02 6.61394753e-02 8.51664769e-02 5.06088095e-02 3.49583810e-03 7.18197378e-01 3.06325962e+03 +2.60200000e-04 -1.65360702e-12 7.63803486e-02 6.61154998e-02 8.51817363e-02 5.06317685e-02 3.49326903e-03 7.18197378e-01 3.06394628e+03 +2.60300000e-04 -1.65360702e-12 7.63686953e-02 6.60915720e-02 8.51969653e-02 5.06546849e-02 3.49070473e-03 7.18197378e-01 3.06394628e+03 +2.60400000e-04 -1.65360702e-12 7.63570625e-02 6.60676918e-02 8.52121640e-02 5.06775586e-02 3.48814519e-03 7.18197378e-01 3.06394628e+03 +2.60500000e-04 -1.65360702e-12 7.63454501e-02 6.60438593e-02 8.52273324e-02 5.07003899e-02 3.48559042e-03 7.18197378e-01 3.06394628e+03 +2.60600000e-04 -1.65360702e-12 7.63338582e-02 6.60200743e-02 8.52424706e-02 5.07231786e-02 3.48304039e-03 7.18197378e-01 3.06394628e+03 +2.60700000e-04 -1.65360702e-12 7.63222868e-02 6.59963367e-02 8.52575786e-02 5.07459249e-02 3.48049512e-03 7.18197378e-01 3.06462703e+03 +2.60800000e-04 -1.65360702e-12 7.63107358e-02 6.59726466e-02 8.52726564e-02 5.07686289e-02 3.47795458e-03 7.18197378e-01 3.06462703e+03 +2.60900000e-04 -1.65360702e-12 7.62992051e-02 6.59490037e-02 8.52877041e-02 5.07912905e-02 3.47541879e-03 7.18197378e-01 3.06462703e+03 +2.61000000e-04 -1.65360702e-12 7.62876949e-02 6.59254081e-02 8.53027217e-02 5.08139098e-02 3.47288773e-03 7.18197378e-01 3.06462703e+03 +2.61100000e-04 -1.65360702e-12 7.62762049e-02 6.59018598e-02 8.53177092e-02 5.08364868e-02 3.47036139e-03 7.18197378e-01 3.06462703e+03 +2.61200000e-04 -1.65360702e-12 7.62647354e-02 6.58783585e-02 8.53326668e-02 5.08590217e-02 3.46783977e-03 7.18197378e-01 3.06530189e+03 +2.61300000e-04 -1.65360702e-12 7.62532861e-02 6.58549043e-02 8.53475944e-02 5.08815145e-02 3.46532287e-03 7.18197378e-01 3.06530189e+03 +2.61400000e-04 -1.65360702e-12 7.62418571e-02 6.58314970e-02 8.53624922e-02 5.09039651e-02 3.46281068e-03 7.18197378e-01 3.06530189e+03 +2.61500000e-04 -1.65360702e-12 7.62304485e-02 6.58081367e-02 8.53773600e-02 5.09263738e-02 3.46030319e-03 7.18197378e-01 3.06530189e+03 +2.61600000e-04 -1.65360702e-12 7.62190600e-02 6.57848232e-02 8.53921981e-02 5.09487404e-02 3.45780040e-03 7.18197378e-01 3.06530189e+03 +2.61700000e-04 -1.65360702e-12 7.62076919e-02 6.57615565e-02 8.54070064e-02 5.09710651e-02 3.45530231e-03 7.18197378e-01 3.06597088e+03 +2.61800000e-04 -1.65360702e-12 7.61963439e-02 6.57383366e-02 8.54217849e-02 5.09933479e-02 3.45280890e-03 7.18197378e-01 3.06597088e+03 +2.61900000e-04 -1.65360702e-12 7.61850161e-02 6.57151632e-02 8.54365338e-02 5.10155889e-02 3.45032017e-03 7.18197378e-01 3.06597088e+03 +2.62000000e-04 -1.65360702e-12 7.61737085e-02 6.56920365e-02 8.54512530e-02 5.10377880e-02 3.44783612e-03 7.18197378e-01 3.06597088e+03 +2.62100000e-04 -1.65360702e-12 7.61624211e-02 6.56689562e-02 8.54659426e-02 5.10599455e-02 3.44535674e-03 7.18197378e-01 3.06597088e+03 +2.62200000e-04 -1.65360702e-12 7.61511538e-02 6.56459225e-02 8.54806026e-02 5.10820612e-02 3.44288202e-03 7.18197378e-01 3.06663404e+03 +2.62300000e-04 -1.65360702e-12 7.61399066e-02 6.56229350e-02 8.54952332e-02 5.11041354e-02 3.44041196e-03 7.18197378e-01 3.06663404e+03 +2.62400000e-04 -1.65360702e-12 7.61286796e-02 6.55999939e-02 8.55098342e-02 5.11261679e-02 3.43794656e-03 7.18197378e-01 3.06663404e+03 +2.62500000e-04 -1.65360702e-12 7.61174726e-02 6.55770990e-02 8.55244059e-02 5.11481589e-02 3.43548580e-03 7.18197378e-01 3.06663404e+03 +2.62600000e-04 -1.65360702e-12 7.61062856e-02 6.55542503e-02 8.55389481e-02 5.11701084e-02 3.43302969e-03 7.18197378e-01 3.06663404e+03 +2.62700000e-04 -1.65360702e-12 7.60951187e-02 6.55314477e-02 8.55534610e-02 5.11920165e-02 3.43057821e-03 7.18197378e-01 3.06729138e+03 +2.62800000e-04 -1.65360702e-12 7.60839719e-02 6.55086912e-02 8.55679446e-02 5.12138831e-02 3.42813137e-03 7.18197378e-01 3.06729138e+03 +2.62900000e-04 -1.65360702e-12 7.60728450e-02 6.54859806e-02 8.55823990e-02 5.12357085e-02 3.42568915e-03 7.18197378e-01 3.06729138e+03 +2.63000000e-04 -1.65360702e-12 7.60617381e-02 6.54633159e-02 8.55968241e-02 5.12574925e-02 3.42325155e-03 7.18197378e-01 3.06729138e+03 +2.63100000e-04 -1.65360702e-12 7.60506512e-02 6.54406970e-02 8.56112200e-02 5.12792354e-02 3.42081856e-03 7.18197378e-01 3.06729138e+03 +2.63200000e-04 -1.65360702e-12 7.60395842e-02 6.54181239e-02 8.56255869e-02 5.13009370e-02 3.41839018e-03 7.18197378e-01 3.06794295e+03 +2.63300000e-04 -1.65360702e-12 7.60285371e-02 6.53955965e-02 8.56399246e-02 5.13225975e-02 3.41596641e-03 7.18197378e-01 3.06794295e+03 +2.63400000e-04 -1.65360702e-12 7.60175099e-02 6.53731147e-02 8.56542333e-02 5.13442169e-02 3.41354723e-03 7.18197378e-01 3.06794295e+03 +2.63500000e-04 -1.65360702e-12 7.60065026e-02 6.53506785e-02 8.56685131e-02 5.13657953e-02 3.41113265e-03 7.18197378e-01 3.06794295e+03 +2.63600000e-04 -1.65360702e-12 7.59955151e-02 6.53282878e-02 8.56827638e-02 5.13873327e-02 3.40872265e-03 7.18197378e-01 3.06794295e+03 +2.63700000e-04 -1.65360702e-12 7.59845475e-02 6.53059425e-02 8.56969857e-02 5.14088292e-02 3.40631723e-03 7.18197378e-01 3.06858876e+03 +2.63800000e-04 -1.65360702e-12 7.59735997e-02 6.52836426e-02 8.57111786e-02 5.14302848e-02 3.40391638e-03 7.18197378e-01 3.06858876e+03 +2.63900000e-04 -1.65360702e-12 7.59626717e-02 6.52613879e-02 8.57253428e-02 5.14516996e-02 3.40152010e-03 7.18197378e-01 3.06858876e+03 +2.64000000e-04 -1.65360702e-12 7.59517635e-02 6.52391785e-02 8.57394782e-02 5.14730736e-02 3.39912839e-03 7.18197378e-01 3.06858876e+03 +2.64100000e-04 -1.65360702e-12 7.59408751e-02 6.52170142e-02 8.57535848e-02 5.14944068e-02 3.39674123e-03 7.18197378e-01 3.06858876e+03 +2.64200000e-04 -1.65360702e-12 7.59300063e-02 6.51948951e-02 8.57676627e-02 5.15156994e-02 3.39435863e-03 7.18197378e-01 3.06922885e+03 +2.64300000e-04 -1.65360702e-12 7.59191573e-02 6.51728209e-02 8.57817120e-02 5.15369514e-02 3.39198057e-03 7.18197378e-01 3.06922885e+03 +2.64400000e-04 -1.65360702e-12 7.59083280e-02 6.51507917e-02 8.57957327e-02 5.15581628e-02 3.38960705e-03 7.18197378e-01 3.06922885e+03 +2.64500000e-04 -1.65360702e-12 7.58975183e-02 6.51288073e-02 8.58097248e-02 5.15793336e-02 3.38723806e-03 7.18197378e-01 3.06922885e+03 +2.64600000e-04 -1.65360702e-12 7.58867283e-02 6.51068678e-02 8.58236884e-02 5.16004640e-02 3.38487361e-03 7.18197378e-01 3.06922885e+03 +2.64700000e-04 -1.65360702e-12 7.58759579e-02 6.50849731e-02 8.58376235e-02 5.16215540e-02 3.38251368e-03 7.18197378e-01 3.06986325e+03 +2.64800000e-04 -1.65360702e-12 7.58652072e-02 6.50631230e-02 8.58515302e-02 5.16426036e-02 3.38015826e-03 7.18197378e-01 3.06986325e+03 +2.64900000e-04 -1.65360702e-12 7.58544760e-02 6.50413175e-02 8.58654084e-02 5.16636129e-02 3.37780736e-03 7.18197378e-01 3.06986325e+03 +2.65000000e-04 -1.65360702e-12 7.58437644e-02 6.50195565e-02 8.58792584e-02 5.16845819e-02 3.37546096e-03 7.18197378e-01 3.06986325e+03 +2.65100000e-04 -1.65360702e-12 7.58330723e-02 6.49978401e-02 8.58930800e-02 5.17055107e-02 3.37311906e-03 7.18197378e-01 3.06986325e+03 +2.65200000e-04 -1.65360702e-12 7.58223998e-02 6.49761680e-02 8.59068734e-02 5.17263993e-02 3.37078166e-03 7.18197378e-01 3.07049198e+03 +2.65300000e-04 -1.65360702e-12 7.58117468e-02 6.49545403e-02 8.59206385e-02 5.17472478e-02 3.36844874e-03 7.18197378e-01 3.07049198e+03 +2.65400000e-04 -1.65360702e-12 7.58011132e-02 6.49329569e-02 8.59343754e-02 5.17680563e-02 3.36612031e-03 7.18197378e-01 3.07049198e+03 +2.65500000e-04 -1.65360702e-12 7.57904991e-02 6.49114176e-02 8.59480843e-02 5.17888247e-02 3.36379636e-03 7.18197378e-01 3.07049198e+03 +2.65600000e-04 -1.65360702e-12 7.57799045e-02 6.48899225e-02 8.59617650e-02 5.18095532e-02 3.36147687e-03 7.18197378e-01 3.07049198e+03 +2.65700000e-04 -1.65360702e-12 7.57693293e-02 6.48684715e-02 8.59754177e-02 5.18302418e-02 3.35916185e-03 7.18197378e-01 3.07111507e+03 +2.65800000e-04 -1.65360702e-12 7.57587735e-02 6.48470645e-02 8.59890424e-02 5.18508905e-02 3.35685130e-03 7.18197378e-01 3.07111507e+03 +2.65900000e-04 -1.65360702e-12 7.57482370e-02 6.48257014e-02 8.60026391e-02 5.18714995e-02 3.35454519e-03 7.18197378e-01 3.07111507e+03 +2.66000000e-04 -1.65360702e-12 7.57377200e-02 6.48043822e-02 8.60162079e-02 5.18920686e-02 3.35224354e-03 7.18197378e-01 3.07111507e+03 +2.66100000e-04 -1.65360702e-12 7.57272222e-02 6.47831067e-02 8.60297488e-02 5.19125981e-02 3.34994632e-03 7.18197378e-01 3.07111507e+03 +2.66200000e-04 -1.65360702e-12 7.57167438e-02 6.47618750e-02 8.60432619e-02 5.19330879e-02 3.34765355e-03 7.18197378e-01 3.07173256e+03 +2.66300000e-04 -1.65360702e-12 7.57062846e-02 6.47406870e-02 8.60567472e-02 5.19535381e-02 3.34536520e-03 7.18197378e-01 3.07173256e+03 +2.66400000e-04 -1.65360702e-12 7.56958448e-02 6.47195425e-02 8.60702048e-02 5.19739488e-02 3.34308128e-03 7.18197378e-01 3.07173256e+03 +2.66500000e-04 -1.65360702e-12 7.56854242e-02 6.46984416e-02 8.60836346e-02 5.19943200e-02 3.34080178e-03 7.18197378e-01 3.07173256e+03 +2.66600000e-04 -1.65360702e-12 7.56750228e-02 6.46773842e-02 8.60970368e-02 5.20146517e-02 3.33852669e-03 7.18197378e-01 3.07234447e+03 +2.66700000e-04 -1.65360702e-12 7.56646406e-02 6.46563701e-02 8.61104114e-02 5.20349441e-02 3.33625601e-03 7.18197378e-01 3.07234447e+03 +2.66800000e-04 -1.65360702e-12 7.56542776e-02 6.46353994e-02 8.61237584e-02 5.20551971e-02 3.33398973e-03 7.18197378e-01 3.07234447e+03 +2.66900000e-04 -1.65360702e-12 7.56439338e-02 6.46144719e-02 8.61370778e-02 5.20754108e-02 3.33172785e-03 7.18197378e-01 3.07234447e+03 +2.67000000e-04 -1.65360702e-12 7.56336091e-02 6.45935876e-02 8.61503698e-02 5.20955853e-02 3.32947036e-03 7.18197378e-01 3.07234447e+03 +2.67100000e-04 -1.65360702e-12 7.56233035e-02 6.45727464e-02 8.61636344e-02 5.21157206e-02 3.32721725e-03 7.18197378e-01 3.07295083e+03 +2.67200000e-04 -1.65360702e-12 7.56130171e-02 6.45519483e-02 8.61768715e-02 5.21358167e-02 3.32496852e-03 7.18197378e-01 3.07295083e+03 +2.67300000e-04 -1.65360702e-12 7.56027497e-02 6.45311932e-02 8.61900813e-02 5.21558738e-02 3.32272417e-03 7.18197378e-01 3.07295083e+03 +2.67400000e-04 -1.65360702e-12 7.55925014e-02 6.45104810e-02 8.62032637e-02 5.21758919e-02 3.32048418e-03 7.18197378e-01 3.07295083e+03 +2.67500000e-04 -1.65360702e-12 7.55822721e-02 6.44898116e-02 8.62164189e-02 5.21958710e-02 3.31824855e-03 7.18197378e-01 3.07295083e+03 +2.67600000e-04 -1.65360702e-12 7.55720618e-02 6.44691850e-02 8.62295469e-02 5.22158111e-02 3.31601728e-03 7.18197378e-01 3.07355168e+03 +2.67700000e-04 -1.65360702e-12 7.55618705e-02 6.44486012e-02 8.62426476e-02 5.22357124e-02 3.31379036e-03 7.18197378e-01 3.07355168e+03 +2.67800000e-04 -1.65360702e-12 7.55516982e-02 6.44280600e-02 8.62557212e-02 5.22555749e-02 3.31156778e-03 7.18197378e-01 3.07355168e+03 +2.67900000e-04 -1.65360702e-12 7.55415449e-02 6.44075613e-02 8.62687678e-02 5.22753986e-02 3.30934954e-03 7.18197378e-01 3.07355168e+03 +2.68000000e-04 -1.65360702e-12 7.55314104e-02 6.43871052e-02 8.62817872e-02 5.22951836e-02 3.30713564e-03 7.18197378e-01 3.07355168e+03 +2.68100000e-04 -1.65360702e-12 7.55212949e-02 6.43666916e-02 8.62947797e-02 5.23149299e-02 3.30492605e-03 7.18197378e-01 3.07414705e+03 +2.68200000e-04 -1.65360702e-12 7.55111983e-02 6.43463203e-02 8.63077451e-02 5.23346377e-02 3.30272079e-03 7.18197378e-01 3.07414705e+03 +2.68300000e-04 -1.65360702e-12 7.55011205e-02 6.43259913e-02 8.63206837e-02 5.23543068e-02 3.30051985e-03 7.18197378e-01 3.07414705e+03 +2.68400000e-04 -1.65360702e-12 7.54910615e-02 6.43057046e-02 8.63335953e-02 5.23739375e-02 3.29832321e-03 7.18197378e-01 3.07414705e+03 +2.68500000e-04 -1.65360702e-12 7.54810214e-02 6.42854600e-02 8.63464801e-02 5.23935297e-02 3.29613088e-03 7.18197378e-01 3.07414705e+03 +2.68600000e-04 -1.65360702e-12 7.54710001e-02 6.42652576e-02 8.63593382e-02 5.24130835e-02 3.29394284e-03 7.18197378e-01 3.07473695e+03 +2.68700000e-04 -1.65360702e-12 7.54609975e-02 6.42450972e-02 8.63721694e-02 5.24325989e-02 3.29175909e-03 7.18197378e-01 3.07473695e+03 +2.68800000e-04 -1.65360702e-12 7.54510137e-02 6.42249788e-02 8.63849739e-02 5.24520761e-02 3.28957963e-03 7.18197378e-01 3.07473695e+03 +2.68900000e-04 -1.65360702e-12 7.54410487e-02 6.42049023e-02 8.63977518e-02 5.24715150e-02 3.28740445e-03 7.18197378e-01 3.07473695e+03 +2.69000000e-04 -1.65360702e-12 7.54311023e-02 6.41848676e-02 8.64105030e-02 5.24909157e-02 3.28523354e-03 7.18197378e-01 3.07473695e+03 +2.69100000e-04 -1.65360702e-12 7.54211746e-02 6.41648747e-02 8.64232277e-02 5.25102782e-02 3.28306690e-03 7.18197378e-01 3.07532144e+03 +2.69200000e-04 -1.65360702e-12 7.54112656e-02 6.41449235e-02 8.64359258e-02 5.25296027e-02 3.28090452e-03 7.18197378e-01 3.07532144e+03 +2.69300000e-04 -1.65360702e-12 7.54013752e-02 6.41250140e-02 8.64485974e-02 5.25488892e-02 3.27874640e-03 7.18197378e-01 3.07532144e+03 +2.69400000e-04 -1.65360702e-12 7.53915035e-02 6.41051460e-02 8.64612425e-02 5.25681376e-02 3.27659253e-03 7.18197378e-01 3.07532144e+03 +2.69500000e-04 -1.65360702e-12 7.53816503e-02 6.40853195e-02 8.64738612e-02 5.25873482e-02 3.27444290e-03 7.18197378e-01 3.07532144e+03 +2.69600000e-04 -1.65360702e-12 7.53718157e-02 6.40655345e-02 8.64864536e-02 5.26065208e-02 3.27229752e-03 7.18197378e-01 3.07590053e+03 +2.69700000e-04 -1.65360702e-12 7.53619997e-02 6.40457908e-02 8.64990196e-02 5.26256557e-02 3.27015636e-03 7.18197378e-01 3.07590053e+03 +2.69800000e-04 -1.65360702e-12 7.53522022e-02 6.40260885e-02 8.65115593e-02 5.26447527e-02 3.26801943e-03 7.18197378e-01 3.07590053e+03 +2.69900000e-04 -1.65360702e-12 7.53424232e-02 6.40064274e-02 8.65240728e-02 5.26638121e-02 3.26588672e-03 7.18197378e-01 3.07590053e+03 +2.70000000e-04 -1.65360702e-12 7.53326627e-02 6.39868074e-02 8.65365601e-02 5.26828337e-02 3.26375823e-03 7.18197378e-01 3.07590053e+03 +2.70100000e-04 -1.65360702e-12 7.53229207e-02 6.39672286e-02 8.65490212e-02 5.27018178e-02 3.26163395e-03 7.18197378e-01 3.07647426e+03 +2.70200000e-04 -1.65360702e-12 7.53131971e-02 6.39476908e-02 8.65614562e-02 5.27207643e-02 3.25951387e-03 7.18197378e-01 3.07647426e+03 +2.70300000e-04 -1.65360702e-12 7.53034919e-02 6.39281939e-02 8.65738651e-02 5.27396732e-02 3.25739798e-03 7.18197378e-01 3.07647426e+03 +2.70400000e-04 -1.65360702e-12 7.52938051e-02 6.39087380e-02 8.65862480e-02 5.27585448e-02 3.25528629e-03 7.18197378e-01 3.07647426e+03 +2.70500000e-04 -1.65360702e-12 7.52841367e-02 6.38893229e-02 8.65986049e-02 5.27773789e-02 3.25317878e-03 7.18197378e-01 3.07647426e+03 +2.70600000e-04 -1.65360702e-12 7.52744866e-02 6.38699486e-02 8.66109359e-02 5.27961756e-02 3.25107546e-03 7.18197378e-01 3.07704267e+03 +2.70700000e-04 -1.65360702e-12 7.52648549e-02 6.38506149e-02 8.66232409e-02 5.28149351e-02 3.24897631e-03 7.18197378e-01 3.07704267e+03 +2.70800000e-04 -1.65360702e-12 7.52552415e-02 6.38313219e-02 8.66355201e-02 5.28336573e-02 3.24688132e-03 7.18197378e-01 3.07704267e+03 +2.70900000e-04 -1.65360702e-12 7.52456464e-02 6.38120695e-02 8.66477734e-02 5.28523423e-02 3.24479050e-03 7.18197378e-01 3.07704267e+03 +2.71000000e-04 -1.65360702e-12 7.52360695e-02 6.37928576e-02 8.66600010e-02 5.28709902e-02 3.24270383e-03 7.18197378e-01 3.07704267e+03 +2.71100000e-04 -1.65360702e-12 7.52265109e-02 6.37736861e-02 8.66722029e-02 5.28896010e-02 3.24062132e-03 7.18197378e-01 3.07760577e+03 +2.71200000e-04 -1.65360702e-12 7.52169704e-02 6.37545550e-02 8.66843790e-02 5.29081747e-02 3.23854295e-03 7.18197378e-01 3.07760577e+03 +2.71300000e-04 -1.65360702e-12 7.52074482e-02 6.37354642e-02 8.66965295e-02 5.29267115e-02 3.23646871e-03 7.18197378e-01 3.07760577e+03 +2.71400000e-04 -1.65360702e-12 7.51979442e-02 6.37164136e-02 8.67086544e-02 5.29452113e-02 3.23439861e-03 7.18197378e-01 3.07760577e+03 +2.71500000e-04 -1.65360702e-12 7.51884583e-02 6.36974032e-02 8.67207538e-02 5.29636743e-02 3.23233264e-03 7.18197378e-01 3.07760577e+03 +2.71600000e-04 -1.65360702e-12 7.51789905e-02 6.36784329e-02 8.67328276e-02 5.29821004e-02 3.23027079e-03 7.18197378e-01 3.07816361e+03 +2.71700000e-04 -1.65360702e-12 7.51695408e-02 6.36595027e-02 8.67448759e-02 5.30004897e-02 3.22821305e-03 7.18197378e-01 3.07816361e+03 +2.71800000e-04 -1.65360702e-12 7.51601093e-02 6.36406124e-02 8.67568988e-02 5.30188423e-02 3.22615942e-03 7.18197378e-01 3.07816361e+03 +2.71900000e-04 -1.65360702e-12 7.51506957e-02 6.36217620e-02 8.67688963e-02 5.30371583e-02 3.22410990e-03 7.18197378e-01 3.07816361e+03 +2.72000000e-04 -1.65360702e-12 7.51413002e-02 6.36029514e-02 8.67808684e-02 5.30554376e-02 3.22206447e-03 7.18197378e-01 3.07816361e+03 +2.72100000e-04 -1.65360702e-12 7.51319228e-02 6.35841806e-02 8.67928152e-02 5.30736804e-02 3.22002313e-03 7.18197378e-01 3.07871621e+03 +2.72200000e-04 -1.65360702e-12 7.51225633e-02 6.35654496e-02 8.68047368e-02 5.30918867e-02 3.21798588e-03 7.18197378e-01 3.07871621e+03 +2.72300000e-04 -1.65360702e-12 7.51132218e-02 6.35467581e-02 8.68166331e-02 5.31100565e-02 3.21595271e-03 7.18197378e-01 3.07871621e+03 +2.72400000e-04 -1.65360702e-12 7.51038982e-02 6.35281063e-02 8.68285042e-02 5.31281899e-02 3.21392361e-03 7.18197378e-01 3.07871621e+03 +2.72500000e-04 -1.65360702e-12 7.50945925e-02 6.35094939e-02 8.68403502e-02 5.31462869e-02 3.21189858e-03 7.18197378e-01 3.07871621e+03 +2.72600000e-04 -1.65360702e-12 7.50853048e-02 6.34909210e-02 8.68521711e-02 5.31643477e-02 3.20987761e-03 7.18197378e-01 3.07926361e+03 +2.72700000e-04 -1.65360702e-12 7.50760349e-02 6.34723874e-02 8.68639669e-02 5.31823722e-02 3.20786070e-03 7.18197378e-01 3.07926361e+03 +2.72800000e-04 -1.65360702e-12 7.50667829e-02 6.34538932e-02 8.68757377e-02 5.32003605e-02 3.20584784e-03 7.18197378e-01 3.07926361e+03 +2.72900000e-04 -1.65360702e-12 7.50575487e-02 6.34354382e-02 8.68874836e-02 5.32183127e-02 3.20383902e-03 7.18197378e-01 3.07926361e+03 +2.73000000e-04 -1.65360702e-12 7.50483323e-02 6.34170224e-02 8.68992045e-02 5.32362287e-02 3.20183424e-03 7.18197378e-01 3.07926361e+03 +2.73100000e-04 -1.65360702e-12 7.50391337e-02 6.33986457e-02 8.69109005e-02 5.32541088e-02 3.19983350e-03 7.18197378e-01 3.07980584e+03 +2.73200000e-04 -1.65360702e-12 7.50299529e-02 6.33803080e-02 8.69225716e-02 5.32719528e-02 3.19783678e-03 7.18197378e-01 3.07980584e+03 +2.73300000e-04 -1.65360702e-12 7.50207898e-02 6.33620093e-02 8.69342180e-02 5.32897610e-02 3.19584408e-03 7.18197378e-01 3.07980584e+03 +2.73400000e-04 -1.65360702e-12 7.50116444e-02 6.33437495e-02 8.69458396e-02 5.33075332e-02 3.19385539e-03 7.18197378e-01 3.07980584e+03 +2.73500000e-04 -1.65360702e-12 7.50025168e-02 6.33255286e-02 8.69574364e-02 5.33252697e-02 3.19187071e-03 7.18197378e-01 3.07980584e+03 +2.73600000e-04 -1.65360702e-12 7.49934067e-02 6.33073465e-02 8.69690086e-02 5.33429703e-02 3.18989004e-03 7.18197378e-01 3.08034293e+03 +2.73700000e-04 -1.65360702e-12 7.49843144e-02 6.32892030e-02 8.69805561e-02 5.33606352e-02 3.18791336e-03 7.18197378e-01 3.08034293e+03 +2.73800000e-04 -1.65360702e-12 7.49752397e-02 6.32710982e-02 8.69920791e-02 5.33782645e-02 3.18594068e-03 7.18197378e-01 3.08034293e+03 +2.73900000e-04 -1.65360702e-12 7.49661825e-02 6.32530320e-02 8.70035775e-02 5.33958582e-02 3.18397198e-03 7.18197378e-01 3.08034293e+03 +2.74000000e-04 -1.65360702e-12 7.49571430e-02 6.32350044e-02 8.70150513e-02 5.34134162e-02 3.18200726e-03 7.18197378e-01 3.08087492e+03 +2.74100000e-04 -1.65360702e-12 7.49481210e-02 6.32170151e-02 8.70265007e-02 5.34309388e-02 3.18004651e-03 7.18197378e-01 3.08087492e+03 +2.74200000e-04 -1.65360702e-12 7.49391165e-02 6.31990643e-02 8.70379257e-02 5.34484260e-02 3.17808973e-03 7.18197378e-01 3.08087492e+03 +2.74300000e-04 -1.65360702e-12 7.49301296e-02 6.31811518e-02 8.70493263e-02 5.34658777e-02 3.17613691e-03 7.18197378e-01 3.08087492e+03 +2.74400000e-04 -1.65360702e-12 7.49211601e-02 6.31632775e-02 8.70607025e-02 5.34832940e-02 3.17418805e-03 7.18197378e-01 3.08087492e+03 +2.74500000e-04 -1.65360702e-12 7.49122081e-02 6.31454414e-02 8.70720544e-02 5.35006751e-02 3.17224313e-03 7.18197378e-01 3.08166467e+03 +2.74600000e-04 -1.65360702e-12 7.49032735e-02 6.31276435e-02 8.70833820e-02 5.35180210e-02 3.17030216e-03 7.18197378e-01 3.08166467e+03 +2.74700000e-04 -1.65360702e-12 7.48943564e-02 6.31098836e-02 8.70946855e-02 5.35353316e-02 3.16836513e-03 7.18197378e-01 3.08166467e+03 +2.74800000e-04 -1.65360702e-12 7.48854566e-02 6.30921617e-02 8.71059647e-02 5.35526071e-02 3.16643203e-03 7.18197378e-01 3.08166467e+03 +2.74900000e-04 -1.65360702e-12 7.48765742e-02 6.30744777e-02 8.71172198e-02 5.35698475e-02 3.16450286e-03 7.18197378e-01 3.08166467e+03 +2.75000000e-04 -1.65360702e-12 7.48677092e-02 6.30568316e-02 8.71284508e-02 5.35870529e-02 3.16257760e-03 7.18197378e-01 3.08166467e+03 +2.75100000e-04 -1.65360702e-12 7.48588615e-02 6.30392233e-02 8.71396578e-02 5.36042233e-02 3.16065626e-03 7.18197378e-01 3.08166467e+03 +2.75200000e-04 -1.65360702e-12 7.48500311e-02 6.30216527e-02 8.71508407e-02 5.36213587e-02 3.15873883e-03 7.18197378e-01 3.08166467e+03 +2.75300000e-04 -1.65360702e-12 7.48412180e-02 6.30041198e-02 8.71619997e-02 5.36384593e-02 3.15682531e-03 7.18197378e-01 3.08244308e+03 +2.75400000e-04 -1.65360702e-12 7.48324221e-02 6.29866245e-02 8.71731347e-02 5.36555251e-02 3.15491567e-03 7.18197378e-01 3.08244308e+03 +2.75500000e-04 -1.65360702e-12 7.48236435e-02 6.29691668e-02 8.71842458e-02 5.36725561e-02 3.15300993e-03 7.18197378e-01 3.08244308e+03 +2.75600000e-04 -1.65360702e-12 7.48148821e-02 6.29517465e-02 8.71953331e-02 5.36895524e-02 3.15110808e-03 7.18197378e-01 3.08244308e+03 +2.75700000e-04 -1.65360702e-12 7.48061378e-02 6.29343636e-02 8.72063966e-02 5.37065140e-02 3.14921010e-03 7.18197378e-01 3.08244308e+03 +2.75800000e-04 -1.65360702e-12 7.47974107e-02 6.29170181e-02 8.72174363e-02 5.37234410e-02 3.14731600e-03 7.18197378e-01 3.08244308e+03 +2.75900000e-04 -1.65360702e-12 7.47887008e-02 6.28997098e-02 8.72284523e-02 5.37403335e-02 3.14542576e-03 7.18197378e-01 3.08244308e+03 +2.76000000e-04 -1.65360702e-12 7.47800080e-02 6.28824388e-02 8.72394446e-02 5.37571914e-02 3.14353938e-03 7.18197378e-01 3.08321026e+03 +2.76100000e-04 -1.65360702e-12 7.47713323e-02 6.28652049e-02 8.72504132e-02 5.37740149e-02 3.14165686e-03 7.18197378e-01 3.08321026e+03 +2.76200000e-04 -1.65360702e-12 7.47626736e-02 6.28480081e-02 8.72613583e-02 5.37908040e-02 3.13977819e-03 7.18197378e-01 3.08321026e+03 +2.76300000e-04 -1.65360702e-12 7.47540320e-02 6.28308483e-02 8.72722798e-02 5.38075587e-02 3.13790337e-03 7.18197378e-01 3.08321026e+03 +2.76400000e-04 -1.65360702e-12 7.47454074e-02 6.28137255e-02 8.72831777e-02 5.38242792e-02 3.13603238e-03 7.18197378e-01 3.08321026e+03 +2.76500000e-04 -1.65360702e-12 7.47367998e-02 6.27966395e-02 8.72940522e-02 5.38409654e-02 3.13416522e-03 7.18197378e-01 3.08321026e+03 +2.76600000e-04 -1.65360702e-12 7.47282092e-02 6.27795904e-02 8.73049033e-02 5.38576174e-02 3.13230189e-03 7.18197378e-01 3.08321026e+03 +2.76700000e-04 -1.65360702e-12 7.47196355e-02 6.27625781e-02 8.73157309e-02 5.38742352e-02 3.13044237e-03 7.18197378e-01 3.08321026e+03 +2.76800000e-04 -1.65360702e-12 7.47110788e-02 6.27456024e-02 8.73265352e-02 5.38908190e-02 3.12858668e-03 7.18197378e-01 3.08396632e+03 +2.76900000e-04 -1.65360702e-12 7.47025390e-02 6.27286634e-02 8.73373162e-02 5.39073688e-02 3.12673479e-03 7.18197378e-01 3.08396632e+03 +2.77000000e-04 -1.65360702e-12 7.46940161e-02 6.27117610e-02 8.73480739e-02 5.39238845e-02 3.12488670e-03 7.18197378e-01 3.08396632e+03 +2.77100000e-04 -1.65360702e-12 7.46855100e-02 6.26948950e-02 8.73588084e-02 5.39403664e-02 3.12304241e-03 7.18197378e-01 3.08396632e+03 +2.77200000e-04 -1.65360702e-12 7.46770207e-02 6.26780655e-02 8.73695196e-02 5.39568143e-02 3.12120191e-03 7.18197378e-01 3.08396632e+03 +2.77300000e-04 -1.65360702e-12 7.46685483e-02 6.26612724e-02 8.73802078e-02 5.39732285e-02 3.11936519e-03 7.18197378e-01 3.08396632e+03 +2.77400000e-04 -1.65360702e-12 7.46600927e-02 6.26445156e-02 8.73908728e-02 5.39896089e-02 3.11753225e-03 7.18197378e-01 3.08396632e+03 +2.77500000e-04 -1.65360702e-12 7.46516538e-02 6.26277950e-02 8.74015147e-02 5.40059555e-02 3.11570309e-03 7.18197378e-01 3.08471138e+03 +2.77600000e-04 -1.65360702e-12 7.46432317e-02 6.26111106e-02 8.74121336e-02 5.40222685e-02 3.11387769e-03 7.18197378e-01 3.08471138e+03 +2.77700000e-04 -1.65360702e-12 7.46348263e-02 6.25944624e-02 8.74227295e-02 5.40385479e-02 3.11205606e-03 7.18197378e-01 3.08471138e+03 +2.77800000e-04 -1.65360702e-12 7.46264375e-02 6.25778502e-02 8.74333025e-02 5.40547937e-02 3.11023818e-03 7.18197378e-01 3.08471138e+03 +2.77900000e-04 -1.65360702e-12 7.46180655e-02 6.25612740e-02 8.74438526e-02 5.40710060e-02 3.10842405e-03 7.18197378e-01 3.08471138e+03 +2.78000000e-04 -1.65360702e-12 7.46097101e-02 6.25447337e-02 8.74543798e-02 5.40871849e-02 3.10661366e-03 7.18197378e-01 3.08471138e+03 +2.78100000e-04 -1.65360702e-12 7.46013714e-02 6.25282293e-02 8.74648841e-02 5.41033304e-02 3.10480701e-03 7.18197378e-01 3.08471138e+03 +2.78200000e-04 -1.65360702e-12 7.45930492e-02 6.25117607e-02 8.74753657e-02 5.41194425e-02 3.10300409e-03 7.18197378e-01 3.08471138e+03 +2.78300000e-04 -1.65360702e-12 7.45847436e-02 6.24953278e-02 8.74858246e-02 5.41355213e-02 3.10120490e-03 7.18197378e-01 3.08544555e+03 +2.78400000e-04 -1.65360702e-12 7.45764546e-02 6.24789306e-02 8.74962607e-02 5.41515668e-02 3.09940943e-03 7.18197378e-01 3.08544555e+03 +2.78500000e-04 -1.65360702e-12 7.45681821e-02 6.24625690e-02 8.75066742e-02 5.41675792e-02 3.09761767e-03 7.18197378e-01 3.08544555e+03 +2.78600000e-04 -1.65360702e-12 7.45599261e-02 6.24462430e-02 8.75170650e-02 5.41835584e-02 3.09582962e-03 7.18197378e-01 3.08544555e+03 +2.78700000e-04 -1.65360702e-12 7.45516866e-02 6.24299524e-02 8.75274333e-02 5.41995046e-02 3.09404527e-03 7.18197378e-01 3.08544555e+03 +2.78800000e-04 -1.65360702e-12 7.45434636e-02 6.24136973e-02 8.75377790e-02 5.42154177e-02 3.09226462e-03 7.18197378e-01 3.08544555e+03 +2.78900000e-04 -1.65360702e-12 7.45352570e-02 6.23974775e-02 8.75481022e-02 5.42312978e-02 3.09048766e-03 7.18197378e-01 3.08544555e+03 +2.79000000e-04 -1.65360702e-12 7.45270668e-02 6.23812930e-02 8.75584029e-02 5.42471450e-02 3.08871439e-03 7.18197378e-01 3.08616894e+03 +2.79100000e-04 -1.65360702e-12 7.45188930e-02 6.23651438e-02 8.75686813e-02 5.42629593e-02 3.08694479e-03 7.18197378e-01 3.08616894e+03 +2.79200000e-04 -1.65360702e-12 7.45107356e-02 6.23490297e-02 8.75789372e-02 5.42787408e-02 3.08517887e-03 7.18197378e-01 3.08616894e+03 +2.79300000e-04 -1.65360702e-12 7.45025945e-02 6.23329507e-02 8.75891708e-02 5.42944895e-02 3.08341662e-03 7.18197378e-01 3.08616894e+03 +2.79400000e-04 -1.65360702e-12 7.44944697e-02 6.23169068e-02 8.75993821e-02 5.43102055e-02 3.08165802e-03 7.18197378e-01 3.08616894e+03 +2.79500000e-04 -1.65360702e-12 7.44863613e-02 6.23008978e-02 8.76095711e-02 5.43258888e-02 3.07990308e-03 7.18197378e-01 3.08616894e+03 +2.79600000e-04 -1.65360702e-12 7.44782691e-02 6.22849238e-02 8.76197380e-02 5.43415395e-02 3.07815180e-03 7.18197378e-01 3.08616894e+03 +2.79700000e-04 -1.65360702e-12 7.44701932e-02 6.22689846e-02 8.76298826e-02 5.43571577e-02 3.07640415e-03 7.18197378e-01 3.08688166e+03 +2.79800000e-04 -1.65360702e-12 7.44621335e-02 6.22530802e-02 8.76400051e-02 5.43727433e-02 3.07466015e-03 7.18197378e-01 3.08688166e+03 +2.79900000e-04 -1.65360702e-12 7.44540899e-02 6.22372105e-02 8.76501055e-02 5.43882965e-02 3.07291977e-03 7.18197378e-01 3.08688166e+03 +2.80000000e-04 -1.65360702e-12 7.44460626e-02 6.22213755e-02 8.76601838e-02 5.44038172e-02 3.07118302e-03 7.18197378e-01 3.08688166e+03 +2.80100000e-04 -1.65360702e-12 7.44380515e-02 6.22055751e-02 8.76702401e-02 5.44193056e-02 3.06944990e-03 7.18197378e-01 3.08688166e+03 +2.80200000e-04 -1.65360702e-12 7.44300564e-02 6.21898092e-02 8.76802744e-02 5.44347617e-02 3.06772039e-03 7.18197378e-01 3.08688166e+03 +2.80300000e-04 -1.65360702e-12 7.44220775e-02 6.21740778e-02 8.76902868e-02 5.44501856e-02 3.06599448e-03 7.18197378e-01 3.08688166e+03 +2.80400000e-04 -1.65360702e-12 7.44141147e-02 6.21583808e-02 8.77002772e-02 5.44655772e-02 3.06427218e-03 7.18197378e-01 3.08688166e+03 +2.80500000e-04 -1.65360702e-12 7.44061679e-02 6.21427182e-02 8.77102458e-02 5.44809367e-02 3.06255348e-03 7.18197378e-01 3.08758383e+03 +2.80600000e-04 -1.65360702e-12 7.43982371e-02 6.21270899e-02 8.77201926e-02 5.44962641e-02 3.06083837e-03 7.18197378e-01 3.08758383e+03 +2.80700000e-04 -1.65360702e-12 7.43903224e-02 6.21114958e-02 8.77301176e-02 5.45115595e-02 3.05912684e-03 7.18197378e-01 3.08758383e+03 +2.80800000e-04 -1.65360702e-12 7.43824237e-02 6.20959358e-02 8.77400209e-02 5.45268229e-02 3.05741890e-03 7.18197378e-01 3.08758383e+03 +2.80900000e-04 -1.65360702e-12 7.43745409e-02 6.20804100e-02 8.77499024e-02 5.45420543e-02 3.05571453e-03 7.18197378e-01 3.08758383e+03 +2.81000000e-04 -1.65360702e-12 7.43666741e-02 6.20649182e-02 8.77597623e-02 5.45572538e-02 3.05401372e-03 7.18197378e-01 3.08758383e+03 +2.81100000e-04 -1.65360702e-12 7.43588232e-02 6.20494604e-02 8.77696006e-02 5.45724215e-02 3.05231648e-03 7.18197378e-01 3.08758383e+03 +2.81200000e-04 -1.65360702e-12 7.43509882e-02 6.20340365e-02 8.77794172e-02 5.45875574e-02 3.05062280e-03 7.18197378e-01 3.08827557e+03 +2.81300000e-04 -1.65360702e-12 7.43431691e-02 6.20186464e-02 8.77892124e-02 5.46026616e-02 3.04893267e-03 7.18197378e-01 3.08827557e+03 +2.81400000e-04 -1.65360702e-12 7.43353658e-02 6.20032901e-02 8.77989860e-02 5.46177341e-02 3.04724608e-03 7.18197378e-01 3.08827557e+03 +2.81500000e-04 -1.65360702e-12 7.43275784e-02 6.19879676e-02 8.78087381e-02 5.46327750e-02 3.04556303e-03 7.18197378e-01 3.08827557e+03 +2.81600000e-04 -1.65360702e-12 7.43198067e-02 6.19726787e-02 8.78184689e-02 5.46477843e-02 3.04388351e-03 7.18197378e-01 3.08827557e+03 +2.81700000e-04 -1.65360702e-12 7.43120509e-02 6.19574235e-02 8.78281782e-02 5.46627621e-02 3.04220752e-03 7.18197378e-01 3.08827557e+03 +2.81800000e-04 -1.65360702e-12 7.43043107e-02 6.19422018e-02 8.78378662e-02 5.46777084e-02 3.04053506e-03 7.18197378e-01 3.08827557e+03 +2.81900000e-04 -1.65360702e-12 7.42965864e-02 6.19270136e-02 8.78475329e-02 5.46926233e-02 3.03886611e-03 7.18197378e-01 3.08827557e+03 +2.82000000e-04 -1.65360702e-12 7.42888777e-02 6.19118587e-02 8.78571783e-02 5.47075068e-02 3.03720067e-03 7.18197378e-01 3.08895697e+03 +2.82100000e-04 -1.65360702e-12 7.42811847e-02 6.18967373e-02 8.78668024e-02 5.47223590e-02 3.03553873e-03 7.18197378e-01 3.08895697e+03 +2.82200000e-04 -1.65360702e-12 7.42735074e-02 6.18816492e-02 8.78764054e-02 5.47371799e-02 3.03388030e-03 7.18197378e-01 3.08895697e+03 +2.82300000e-04 -1.65360702e-12 7.42658457e-02 6.18665943e-02 8.78859872e-02 5.47519696e-02 3.03222535e-03 7.18197378e-01 3.08895697e+03 +2.82400000e-04 -1.65360702e-12 7.42581997e-02 6.18515725e-02 8.78955479e-02 5.47667281e-02 3.03057390e-03 7.18197378e-01 3.08895697e+03 +2.82500000e-04 -1.65360702e-12 7.42505692e-02 6.18365839e-02 8.79050875e-02 5.47814556e-02 3.02892592e-03 7.18197378e-01 3.08895697e+03 +2.82600000e-04 -1.65360702e-12 7.42429543e-02 6.18216284e-02 8.79146061e-02 5.47961520e-02 3.02728142e-03 7.18197378e-01 3.08895697e+03 +2.82700000e-04 -1.65360702e-12 7.42353549e-02 6.18067058e-02 8.79241037e-02 5.48108173e-02 3.02564039e-03 7.18197378e-01 3.08962816e+03 +2.82800000e-04 -1.65360702e-12 7.42277711e-02 6.17918162e-02 8.79335804e-02 5.48254517e-02 3.02400282e-03 7.18197378e-01 3.08962816e+03 +2.82900000e-04 -1.65360702e-12 7.42202028e-02 6.17769594e-02 8.79430361e-02 5.48400552e-02 3.02236872e-03 7.18197378e-01 3.08962816e+03 +2.83000000e-04 -1.65360702e-12 7.42126499e-02 6.17621354e-02 8.79524709e-02 5.48546279e-02 3.02073806e-03 7.18197378e-01 3.08962816e+03 +2.83100000e-04 -1.65360702e-12 7.42051125e-02 6.17473442e-02 8.79618849e-02 5.48691697e-02 3.01911085e-03 7.18197378e-01 3.08962816e+03 +2.83200000e-04 -1.65360702e-12 7.41975905e-02 6.17325857e-02 8.79712781e-02 5.48836808e-02 3.01748708e-03 7.18197378e-01 3.08962816e+03 +2.83300000e-04 -1.65360702e-12 7.41900839e-02 6.17178598e-02 8.79806505e-02 5.48981612e-02 3.01586675e-03 7.18197378e-01 3.08962816e+03 +2.83400000e-04 -1.65360702e-12 7.41825927e-02 6.17031665e-02 8.79900022e-02 5.49126110e-02 3.01424985e-03 7.18197378e-01 3.09028926e+03 +2.83500000e-04 -1.65360702e-12 7.41751168e-02 6.16885057e-02 8.79993332e-02 5.49270301e-02 3.01263637e-03 7.18197378e-01 3.09028926e+03 +2.83600000e-04 -1.65360702e-12 7.41676563e-02 6.16738773e-02 8.80086435e-02 5.49414187e-02 3.01102631e-03 7.18197378e-01 3.09028926e+03 +2.83700000e-04 -1.65360702e-12 7.41602111e-02 6.16592813e-02 8.80179333e-02 5.49557768e-02 3.00941966e-03 7.18197378e-01 3.09028926e+03 +2.83800000e-04 -1.65360702e-12 7.41527812e-02 6.16447176e-02 8.80272024e-02 5.49701045e-02 3.00781642e-03 7.18197378e-01 3.09028926e+03 +2.83900000e-04 -1.65360702e-12 7.41453665e-02 6.16301862e-02 8.80364511e-02 5.49844018e-02 3.00621658e-03 7.18197378e-01 3.09028926e+03 +2.84000000e-04 -1.65360702e-12 7.41379671e-02 6.16156870e-02 8.80456792e-02 5.49986687e-02 3.00462013e-03 7.18197378e-01 3.09028926e+03 +2.84100000e-04 -1.65360702e-12 7.41305829e-02 6.16012200e-02 8.80548869e-02 5.50129053e-02 3.00302708e-03 7.18197378e-01 3.09028926e+03 +2.84200000e-04 -1.65360702e-12 7.41232139e-02 6.15867850e-02 8.80640741e-02 5.50271117e-02 3.00143740e-03 7.18197378e-01 3.09073722e+03 +2.84300000e-04 -1.65360702e-12 7.41158601e-02 6.15723821e-02 8.80732410e-02 5.50412879e-02 2.99985111e-03 7.18197378e-01 3.09073722e+03 +2.84400000e-04 -1.65360702e-12 7.41085214e-02 6.15580111e-02 8.80823875e-02 5.50554340e-02 2.99826819e-03 7.18197378e-01 3.09073722e+03 +2.84500000e-04 -1.65360702e-12 7.41011978e-02 6.15436720e-02 8.80915138e-02 5.50695500e-02 2.99668863e-03 7.18197378e-01 3.09073722e+03 +2.84600000e-04 -1.65360702e-12 7.40938893e-02 6.15293647e-02 8.81006197e-02 5.50836360e-02 2.99511244e-03 7.18197378e-01 3.09073722e+03 +2.84700000e-04 -1.65360702e-12 7.40865959e-02 6.15150893e-02 8.81097055e-02 5.50976919e-02 2.99353960e-03 7.18197378e-01 3.09104380e+03 +2.84800000e-04 -1.65360702e-12 7.40793175e-02 6.15008455e-02 8.81187710e-02 5.51117180e-02 2.99197010e-03 7.18197378e-01 3.09104380e+03 +2.84900000e-04 -1.65360702e-12 7.40720542e-02 6.14866335e-02 8.81278164e-02 5.51257141e-02 2.99040396e-03 7.18197378e-01 3.09104380e+03 +2.85000000e-04 -1.65360702e-12 7.40648059e-02 6.14724530e-02 8.81368417e-02 5.51396805e-02 2.98884115e-03 7.18197378e-01 3.09134816e+03 +2.85100000e-04 -1.65360702e-12 7.40575725e-02 6.14583041e-02 8.81458469e-02 5.51536170e-02 2.98728167e-03 7.18197378e-01 3.09134816e+03 +2.85200000e-04 -1.65360702e-12 7.40503541e-02 6.14441866e-02 8.81548320e-02 5.51675238e-02 2.98572552e-03 7.18197378e-01 3.09134816e+03 +2.85300000e-04 -1.65360702e-12 7.40431507e-02 6.14301006e-02 8.81637972e-02 5.51814010e-02 2.98417269e-03 7.18197378e-01 3.09134816e+03 +2.85400000e-04 -1.65360702e-12 7.40359622e-02 6.14160460e-02 8.81727424e-02 5.51952485e-02 2.98262318e-03 7.18197378e-01 3.09165032e+03 +2.85500000e-04 -1.65360702e-12 7.40287885e-02 6.14020226e-02 8.81816677e-02 5.52090664e-02 2.98107698e-03 7.18197378e-01 3.09165032e+03 +2.85600000e-04 -1.65360702e-12 7.40216297e-02 6.13880305e-02 8.81905730e-02 5.52228548e-02 2.97953408e-03 7.18197378e-01 3.09165032e+03 +2.85700000e-04 -1.65360702e-12 7.40144858e-02 6.13740696e-02 8.81994586e-02 5.52366137e-02 2.97799448e-03 7.18197378e-01 3.09195029e+03 +2.85800000e-04 -1.65360702e-12 7.40073566e-02 6.13601398e-02 8.82083243e-02 5.52503432e-02 2.97645817e-03 7.18197378e-01 3.09195029e+03 +2.85900000e-04 -1.65360702e-12 7.40002423e-02 6.13462411e-02 8.82171703e-02 5.52640434e-02 2.97492515e-03 7.18197378e-01 3.09195029e+03 +2.86000000e-04 -1.65360702e-12 7.39931427e-02 6.13323734e-02 8.82259965e-02 5.52777142e-02 2.97339541e-03 7.18197378e-01 3.09195029e+03 +2.86100000e-04 -1.65360702e-12 7.39860579e-02 6.13185367e-02 8.82348030e-02 5.52913557e-02 2.97186894e-03 7.18197378e-01 3.09224809e+03 +2.86200000e-04 -1.65360702e-12 7.39789878e-02 6.13047308e-02 8.82435898e-02 5.53049680e-02 2.97034575e-03 7.18197378e-01 3.09224809e+03 +2.86300000e-04 -1.65360702e-12 7.39719324e-02 6.12909558e-02 8.82523571e-02 5.53185511e-02 2.96882582e-03 7.18197378e-01 3.09224809e+03 +2.86400000e-04 -1.65360702e-12 7.39648916e-02 6.12772115e-02 8.82611047e-02 5.53321051e-02 2.96730915e-03 7.18197378e-01 3.09224809e+03 +2.86500000e-04 -1.65360702e-12 7.39578655e-02 6.12634980e-02 8.82698328e-02 5.53456301e-02 2.96579573e-03 7.18197378e-01 3.09285960e+03 +2.86600000e-04 -1.65360702e-12 7.39508541e-02 6.12498151e-02 8.82785414e-02 5.53591260e-02 2.96428556e-03 7.18197378e-01 3.09285960e+03 +2.86700000e-04 -1.65360702e-12 7.39438573e-02 6.12361628e-02 8.82872305e-02 5.53725929e-02 2.96277863e-03 7.18197378e-01 3.09285960e+03 +2.86800000e-04 -1.65360702e-12 7.39368750e-02 6.12225411e-02 8.82959002e-02 5.53860310e-02 2.96127494e-03 7.18197378e-01 3.09285960e+03 +2.86900000e-04 -1.65360702e-12 7.39299073e-02 6.12089499e-02 8.83045504e-02 5.53994401e-02 2.95977447e-03 7.18197378e-01 3.09285960e+03 +2.87000000e-04 -1.65360702e-12 7.39229541e-02 6.11953890e-02 8.83131813e-02 5.54128204e-02 2.95827724e-03 7.18197378e-01 3.09285960e+03 +2.87100000e-04 -1.65360702e-12 7.39160155e-02 6.11818586e-02 8.83217929e-02 5.54261720e-02 2.95678322e-03 7.18197378e-01 3.09285960e+03 +2.87200000e-04 -1.65360702e-12 7.39090913e-02 6.11683584e-02 8.83303852e-02 5.54394948e-02 2.95529242e-03 7.18197378e-01 3.09346188e+03 +2.87300000e-04 -1.65360702e-12 7.39021816e-02 6.11548885e-02 8.83389582e-02 5.54527890e-02 2.95380482e-03 7.18197378e-01 3.09346188e+03 +2.87400000e-04 -1.65360702e-12 7.38952864e-02 6.11414488e-02 8.83475120e-02 5.54660546e-02 2.95232043e-03 7.18197378e-01 3.09346188e+03 +2.87500000e-04 -1.65360702e-12 7.38884055e-02 6.11280392e-02 8.83560467e-02 5.54792915e-02 2.95083923e-03 7.18197378e-01 3.09346188e+03 +2.87600000e-04 -1.65360702e-12 7.38815391e-02 6.11146597e-02 8.83645622e-02 5.54925000e-02 2.94936123e-03 7.18197378e-01 3.09346188e+03 +2.87700000e-04 -1.65360702e-12 7.38746870e-02 6.11013102e-02 8.83730586e-02 5.55056800e-02 2.94788641e-03 7.18197378e-01 3.09346188e+03 +2.87800000e-04 -1.65360702e-12 7.38678493e-02 6.10879906e-02 8.83815359e-02 5.55188315e-02 2.94641477e-03 7.18197378e-01 3.09346188e+03 +2.87900000e-04 -1.65360702e-12 7.38610259e-02 6.10747010e-02 8.83899942e-02 5.55319547e-02 2.94494631e-03 7.18197378e-01 3.09405504e+03 +2.88000000e-04 -1.65360702e-12 7.38542168e-02 6.10614412e-02 8.83984335e-02 5.55450496e-02 2.94348101e-03 7.18197378e-01 3.09405504e+03 +2.88100000e-04 -1.65360702e-12 7.38474220e-02 6.10482112e-02 8.84068539e-02 5.55581162e-02 2.94201888e-03 7.18197378e-01 3.09405504e+03 +2.88200000e-04 -1.65360702e-12 7.38406415e-02 6.10350109e-02 8.84152553e-02 5.55711546e-02 2.94055991e-03 7.18197378e-01 3.09405504e+03 +2.88300000e-04 -1.65360702e-12 7.38338751e-02 6.10218403e-02 8.84236378e-02 5.55841648e-02 2.93910409e-03 7.18197378e-01 3.09405504e+03 +2.88400000e-04 -1.65360702e-12 7.38271230e-02 6.10086993e-02 8.84320015e-02 5.55971469e-02 2.93765141e-03 7.18197378e-01 3.09405504e+03 +2.88500000e-04 -1.65360702e-12 7.38203851e-02 6.09955879e-02 8.84403464e-02 5.56101009e-02 2.93620188e-03 7.18197378e-01 3.09405504e+03 +2.88600000e-04 -1.65360702e-12 7.38136614e-02 6.09825059e-02 8.84486725e-02 5.56230269e-02 2.93475549e-03 7.18197378e-01 3.09463918e+03 +2.88700000e-04 -1.65360702e-12 7.38069517e-02 6.09694534e-02 8.84569799e-02 5.56359249e-02 2.93331222e-03 7.18197378e-01 3.09463918e+03 +2.88800000e-04 -1.65360702e-12 7.38002562e-02 6.09564303e-02 8.84652686e-02 5.56487950e-02 2.93187208e-03 7.18197378e-01 3.09463918e+03 +2.88900000e-04 -1.65360702e-12 7.37935748e-02 6.09434365e-02 8.84735386e-02 5.56616372e-02 2.93043505e-03 7.18197378e-01 3.09463918e+03 +2.89000000e-04 -1.65360702e-12 7.37869075e-02 6.09304720e-02 8.84817899e-02 5.56744516e-02 2.92900115e-03 7.18197378e-01 3.09463918e+03 +2.89100000e-04 -1.65360702e-12 7.37802542e-02 6.09175367e-02 8.84900227e-02 5.56872382e-02 2.92757034e-03 7.18197378e-01 3.09463918e+03 +2.89200000e-04 -1.65360702e-12 7.37736149e-02 6.09046305e-02 8.84982369e-02 5.56999971e-02 2.92614265e-03 7.18197378e-01 3.09463918e+03 +2.89300000e-04 -1.65360702e-12 7.37669897e-02 6.08917535e-02 8.85064327e-02 5.57127283e-02 2.92471805e-03 7.18197378e-01 3.09463918e+03 +2.89400000e-04 -1.65360702e-12 7.37603784e-02 6.08789055e-02 8.85146099e-02 5.57254319e-02 2.92329654e-03 7.18197378e-01 3.09521442e+03 +2.89500000e-04 -1.65360702e-12 7.37537811e-02 6.08660865e-02 8.85227686e-02 5.57381079e-02 2.92187811e-03 7.18197378e-01 3.09521442e+03 +2.89600000e-04 -1.65360702e-12 7.37471977e-02 6.08532964e-02 8.85309090e-02 5.57507563e-02 2.92046277e-03 7.18197378e-01 3.09521442e+03 +2.89700000e-04 -1.65360702e-12 7.37406282e-02 6.08405352e-02 8.85390310e-02 5.57633773e-02 2.91905050e-03 7.18197378e-01 3.09521442e+03 +2.89800000e-04 -1.65360702e-12 7.37340726e-02 6.08278028e-02 8.85471346e-02 5.57759709e-02 2.91764130e-03 7.18197378e-01 3.09521442e+03 +2.89900000e-04 -1.65360702e-12 7.37275308e-02 6.08150991e-02 8.85552200e-02 5.57885371e-02 2.91623517e-03 7.18197378e-01 3.09521442e+03 +2.90000000e-04 -1.65360702e-12 7.37210029e-02 6.08024242e-02 8.85632870e-02 5.58010759e-02 2.91483209e-03 7.18197378e-01 3.09521442e+03 +2.90100000e-04 -1.65360702e-12 7.37144888e-02 6.07897779e-02 8.85713359e-02 5.58135875e-02 2.91343207e-03 7.18197378e-01 3.09578085e+03 +2.90200000e-04 -1.65360702e-12 7.37079885e-02 6.07771602e-02 8.85793665e-02 5.58260718e-02 2.91203509e-03 7.18197378e-01 3.09578085e+03 +2.90300000e-04 -1.65360702e-12 7.37015020e-02 6.07645711e-02 8.85873790e-02 5.58385289e-02 2.91064116e-03 7.18197378e-01 3.09578085e+03 +2.90400000e-04 -1.65360702e-12 7.36950293e-02 6.07520104e-02 8.85953733e-02 5.58509589e-02 2.90925026e-03 7.18197378e-01 3.09578085e+03 +2.90500000e-04 -1.65360702e-12 7.36885702e-02 6.07394781e-02 8.86033496e-02 5.58633618e-02 2.90786240e-03 7.18197378e-01 3.09578085e+03 +2.90600000e-04 -1.65360702e-12 7.36821249e-02 6.07269742e-02 8.86113078e-02 5.58757377e-02 2.90647756e-03 7.18197378e-01 3.09578085e+03 +2.90700000e-04 -1.65360702e-12 7.36756932e-02 6.07144987e-02 8.86192479e-02 5.58880866e-02 2.90509574e-03 7.18197378e-01 3.09578085e+03 +2.90800000e-04 -1.65360702e-12 7.36692752e-02 6.07020513e-02 8.86271701e-02 5.59004085e-02 2.90371694e-03 7.18197378e-01 3.09667817e+03 +2.90900000e-04 -1.65360702e-12 7.36628708e-02 6.06896322e-02 8.86350744e-02 5.59127036e-02 2.90234114e-03 7.18197378e-01 3.09667817e+03 +2.91000000e-04 -1.65360702e-12 7.36564800e-02 6.06772413e-02 8.86429607e-02 5.59249718e-02 2.90096835e-03 7.18197378e-01 3.09667817e+03 +2.91100000e-04 -1.65360702e-12 7.36501029e-02 6.06648784e-02 8.86508292e-02 5.59372132e-02 2.89959856e-03 7.18197378e-01 3.09667817e+03 +2.91200000e-04 -1.65360702e-12 7.36437392e-02 6.06525435e-02 8.86586798e-02 5.59494278e-02 2.89823176e-03 7.18197378e-01 3.09667817e+03 +2.91300000e-04 -1.65360702e-12 7.36373892e-02 6.06402367e-02 8.86665126e-02 5.59616158e-02 2.89686795e-03 7.18197378e-01 3.09667817e+03 +2.91400000e-04 -1.65360702e-12 7.36310526e-02 6.06279577e-02 8.86743277e-02 5.59737771e-02 2.89550712e-03 7.18197378e-01 3.09667817e+03 +2.91500000e-04 -1.65360702e-12 7.36247295e-02 6.06157066e-02 8.86821250e-02 5.59859117e-02 2.89414927e-03 7.18197378e-01 3.09667817e+03 +2.91600000e-04 -1.65360702e-12 7.36184200e-02 6.06034834e-02 8.86899046e-02 5.59980199e-02 2.89279439e-03 7.18197378e-01 3.09667817e+03 +2.91700000e-04 -1.65360702e-12 7.36121238e-02 6.05912879e-02 8.86976665e-02 5.60101015e-02 2.89144247e-03 7.18197378e-01 3.09667817e+03 +2.91800000e-04 -1.65360702e-12 7.36058411e-02 6.05791201e-02 8.87054108e-02 5.60221567e-02 2.89009352e-03 7.18197378e-01 3.09667817e+03 +2.91900000e-04 -1.65360702e-12 7.35995718e-02 6.05669799e-02 8.87131375e-02 5.60341854e-02 2.88874752e-03 7.18197378e-01 3.09667817e+03 +2.92000000e-04 -1.65360702e-12 7.35933159e-02 6.05548673e-02 8.87208466e-02 5.60461878e-02 2.88740447e-03 7.18197378e-01 3.09755322e+03 +2.92100000e-04 -1.65360702e-12 7.35870733e-02 6.05427823e-02 8.87285382e-02 5.60581639e-02 2.88606437e-03 7.18197378e-01 3.09755322e+03 +2.92200000e-04 -1.65360702e-12 7.35808441e-02 6.05307248e-02 8.87362124e-02 5.60701137e-02 2.88472720e-03 7.18197378e-01 3.09755322e+03 +2.92300000e-04 -1.65360702e-12 7.35746281e-02 6.05186947e-02 8.87438690e-02 5.60820373e-02 2.88339297e-03 7.18197378e-01 3.09755322e+03 +2.92400000e-04 -1.65360702e-12 7.35684255e-02 6.05066919e-02 8.87515083e-02 5.60939348e-02 2.88206167e-03 7.18197378e-01 3.09755322e+03 +2.92500000e-04 -1.65360702e-12 7.35622361e-02 6.04947165e-02 8.87591301e-02 5.61058061e-02 2.88073329e-03 7.18197378e-01 3.09755322e+03 +2.92600000e-04 -1.65360702e-12 7.35560600e-02 6.04827684e-02 8.87667346e-02 5.61176513e-02 2.87940783e-03 7.18197378e-01 3.09755322e+03 +2.92700000e-04 -1.65360702e-12 7.35498971e-02 6.04708474e-02 8.87743218e-02 5.61294705e-02 2.87808528e-03 7.18197378e-01 3.09755322e+03 +2.92800000e-04 -1.65360702e-12 7.35437474e-02 6.04589536e-02 8.87818917e-02 5.61412637e-02 2.87676564e-03 7.18197378e-01 3.09755322e+03 +2.92900000e-04 -1.65360702e-12 7.35376109e-02 6.04470870e-02 8.87894443e-02 5.61530310e-02 2.87544890e-03 7.18197378e-01 3.09755322e+03 +2.93000000e-04 -1.65360702e-12 7.35314875e-02 6.04352473e-02 8.87969798e-02 5.61647725e-02 2.87413505e-03 7.18197378e-01 3.09755322e+03 +2.93100000e-04 -1.65360702e-12 7.35253773e-02 6.04234347e-02 8.88044980e-02 5.61764880e-02 2.87282410e-03 7.18197378e-01 3.09755322e+03 +2.93200000e-04 -1.65360702e-12 7.35192802e-02 6.04116490e-02 8.88119991e-02 5.61881778e-02 2.87151603e-03 7.18197378e-01 3.09840643e+03 +2.93300000e-04 -1.65360702e-12 7.35131961e-02 6.03998902e-02 8.88194831e-02 5.61998419e-02 2.87021084e-03 7.18197378e-01 3.09840643e+03 +2.93400000e-04 -1.65360702e-12 7.35071252e-02 6.03881582e-02 8.88269500e-02 5.62114802e-02 2.86890853e-03 7.18197378e-01 3.09840643e+03 +2.93500000e-04 -1.65360702e-12 7.35010672e-02 6.03764530e-02 8.88343999e-02 5.62230929e-02 2.86760909e-03 7.18197378e-01 3.09840643e+03 +2.93600000e-04 -1.65360702e-12 7.34950223e-02 6.03647746e-02 8.88418327e-02 5.62346800e-02 2.86631251e-03 7.18197378e-01 3.09840643e+03 +2.93700000e-04 -1.65360702e-12 7.34889904e-02 6.03531228e-02 8.88492486e-02 5.62462416e-02 2.86501879e-03 7.18197378e-01 3.09840643e+03 +2.93800000e-04 -1.65360702e-12 7.34829714e-02 6.03414976e-02 8.88566476e-02 5.62577776e-02 2.86372793e-03 7.18197378e-01 3.09840643e+03 +2.93900000e-04 -1.65360702e-12 7.34769654e-02 6.03298990e-02 8.88640296e-02 5.62692882e-02 2.86243991e-03 7.18197378e-01 3.09840643e+03 +2.94000000e-04 -1.65360702e-12 7.34709724e-02 6.03183269e-02 8.88713948e-02 5.62807734e-02 2.86115474e-03 7.18197378e-01 3.09840643e+03 +2.94100000e-04 -1.65360702e-12 7.34649922e-02 6.03067812e-02 8.88787431e-02 5.62922332e-02 2.85987240e-03 7.18197378e-01 3.09840643e+03 +2.94200000e-04 -1.65360702e-12 7.34590249e-02 6.02952620e-02 8.88860746e-02 5.63036677e-02 2.85859290e-03 7.18197378e-01 3.09840643e+03 +2.94300000e-04 -1.65360702e-12 7.34530705e-02 6.02837691e-02 8.88933893e-02 5.63150770e-02 2.85731622e-03 7.18197378e-01 3.09840643e+03 +2.94400000e-04 -1.65360702e-12 7.34471289e-02 6.02723025e-02 8.89006874e-02 5.63264610e-02 2.85604237e-03 7.18197378e-01 3.09923824e+03 +2.94500000e-04 -1.65360702e-12 7.34412002e-02 6.02608621e-02 8.89079687e-02 5.63378199e-02 2.85477133e-03 7.18197378e-01 3.09923824e+03 +2.94600000e-04 -1.65360702e-12 7.34352842e-02 6.02494480e-02 8.89152333e-02 5.63491536e-02 2.85350311e-03 7.18197378e-01 3.09923824e+03 +2.94700000e-04 -1.65360702e-12 7.34293810e-02 6.02380600e-02 8.89224813e-02 5.63604622e-02 2.85223769e-03 7.18197378e-01 3.09923824e+03 +2.94800000e-04 -1.65360702e-12 7.34234905e-02 6.02266981e-02 8.89297127e-02 5.63717458e-02 2.85097508e-03 7.18197378e-01 3.09923824e+03 +2.94900000e-04 -1.65360702e-12 7.34176128e-02 6.02153622e-02 8.89369275e-02 5.63830044e-02 2.84971525e-03 7.18197378e-01 3.09923824e+03 +2.95000000e-04 -1.65360702e-12 7.34117478e-02 6.02040523e-02 8.89441258e-02 5.63942381e-02 2.84845822e-03 7.18197378e-01 3.09923824e+03 +2.95100000e-04 -1.65360702e-12 7.34058954e-02 6.01927683e-02 8.89513076e-02 5.64054469e-02 2.84720398e-03 7.18197378e-01 3.09923824e+03 +2.95200000e-04 -1.65360702e-12 7.34000558e-02 6.01815102e-02 8.89584729e-02 5.64166308e-02 2.84595252e-03 7.18197378e-01 3.09923824e+03 +2.95300000e-04 -1.65360702e-12 7.33942287e-02 6.01702779e-02 8.89656218e-02 5.64277900e-02 2.84470383e-03 7.18197378e-01 3.09923824e+03 +2.95400000e-04 -1.65360702e-12 7.33884143e-02 6.01590714e-02 8.89727542e-02 5.64389244e-02 2.84345791e-03 7.18197378e-01 3.09923824e+03 +2.95500000e-04 -1.65360702e-12 7.33826124e-02 6.01478906e-02 8.89798703e-02 5.64500340e-02 2.84221475e-03 7.18197378e-01 3.10004910e+03 +2.95600000e-04 -1.65360702e-12 7.33768232e-02 6.01367355e-02 8.89869701e-02 5.64611190e-02 2.84097436e-03 7.18197378e-01 3.10004910e+03 +2.95700000e-04 -1.65360702e-12 7.33710465e-02 6.01256060e-02 8.89940536e-02 5.64721794e-02 2.83973672e-03 7.18197378e-01 3.10004910e+03 +2.95800000e-04 -1.65360702e-12 7.33652823e-02 6.01145020e-02 8.90011208e-02 5.64832153e-02 2.83850183e-03 7.18197378e-01 3.10004910e+03 +2.95900000e-04 -1.65360702e-12 7.33595306e-02 6.01034236e-02 8.90081717e-02 5.64942266e-02 2.83726968e-03 7.18197378e-01 3.10004910e+03 +2.96000000e-04 -1.65360702e-12 7.33537914e-02 6.00923706e-02 8.90152065e-02 5.65052134e-02 2.83604027e-03 7.18197378e-01 3.10004910e+03 +2.96100000e-04 -1.65360702e-12 7.33480646e-02 6.00813430e-02 8.90222251e-02 5.65161758e-02 2.83481360e-03 7.18197378e-01 3.10004910e+03 +2.96200000e-04 -1.65360702e-12 7.33423503e-02 6.00703408e-02 8.90292275e-02 5.65271138e-02 2.83358965e-03 7.18197378e-01 3.10004910e+03 +2.96300000e-04 -1.65360702e-12 7.33366484e-02 6.00593639e-02 8.90362139e-02 5.65380275e-02 2.83236843e-03 7.18197378e-01 3.10004910e+03 +2.96400000e-04 -1.65360702e-12 7.33309589e-02 6.00484123e-02 8.90431841e-02 5.65489169e-02 2.83114992e-03 7.18197378e-01 3.10004910e+03 +2.96500000e-04 -1.65360702e-12 7.33252818e-02 6.00374858e-02 8.90501384e-02 5.65597821e-02 2.82993413e-03 7.18197378e-01 3.10004910e+03 +2.96600000e-04 -1.65360702e-12 7.33196170e-02 6.00265845e-02 8.90570766e-02 5.65706230e-02 2.82872105e-03 7.18197378e-01 3.10004910e+03 +2.96700000e-04 -1.65360702e-12 7.33139645e-02 6.00157083e-02 8.90639989e-02 5.65814398e-02 2.82751066e-03 7.18197378e-01 3.10083943e+03 +2.96800000e-04 -1.65360702e-12 7.33083244e-02 6.00048571e-02 8.90709052e-02 5.65922325e-02 2.82630298e-03 7.18197378e-01 3.10083943e+03 +2.96900000e-04 -1.65360702e-12 7.33026965e-02 5.99940310e-02 8.90777956e-02 5.66030011e-02 2.82509799e-03 7.18197378e-01 3.10083943e+03 +2.97000000e-04 -1.65360702e-12 7.32970809e-02 5.99832297e-02 8.90846701e-02 5.66137457e-02 2.82389568e-03 7.18197378e-01 3.10083943e+03 +2.97100000e-04 -1.65360702e-12 7.32914775e-02 5.99724534e-02 8.90915288e-02 5.66244664e-02 2.82269606e-03 7.18197378e-01 3.10083943e+03 +2.97200000e-04 -1.65360702e-12 7.32858864e-02 5.99617019e-02 8.90983717e-02 5.66351631e-02 2.82149912e-03 7.18197378e-01 3.10083943e+03 +2.97300000e-04 -1.65360702e-12 7.32803074e-02 5.99509752e-02 8.91051987e-02 5.66458359e-02 2.82030485e-03 7.18197378e-01 3.10083943e+03 +2.97400000e-04 -1.65360702e-12 7.32747406e-02 5.99402733e-02 8.91120101e-02 5.66564849e-02 2.81911324e-03 7.18197378e-01 3.10083943e+03 +2.97500000e-04 -1.65360702e-12 7.32691860e-02 5.99295960e-02 8.91188057e-02 5.66671101e-02 2.81792430e-03 7.18197378e-01 3.10083943e+03 +2.97600000e-04 -1.65360702e-12 7.32636435e-02 5.99189434e-02 8.91255857e-02 5.66777116e-02 2.81673801e-03 7.18197378e-01 3.10083943e+03 +2.97700000e-04 -1.65360702e-12 7.32581131e-02 5.99083153e-02 8.91323500e-02 5.66882894e-02 2.81555438e-03 7.18197378e-01 3.10083943e+03 +2.97800000e-04 -1.65360702e-12 7.32525948e-02 5.98977118e-02 8.91390987e-02 5.66988435e-02 2.81437339e-03 7.18197378e-01 3.10083943e+03 +2.97900000e-04 -1.65360702e-12 7.32470885e-02 5.98871328e-02 8.91458318e-02 5.67093740e-02 2.81319504e-03 7.18197378e-01 3.10160966e+03 +2.98000000e-04 -1.65360702e-12 7.32415943e-02 5.98765782e-02 8.91525493e-02 5.67198810e-02 2.81201933e-03 7.18197378e-01 3.10160966e+03 +2.98100000e-04 -1.65360702e-12 7.32361121e-02 5.98660480e-02 8.91592513e-02 5.67303644e-02 2.81084625e-03 7.18197378e-01 3.10160966e+03 +2.98200000e-04 -1.65360702e-12 7.32306419e-02 5.98555422e-02 8.91659379e-02 5.67408243e-02 2.80967580e-03 7.18197378e-01 3.10160966e+03 +2.98300000e-04 -1.65360702e-12 7.32251837e-02 5.98450606e-02 8.91726090e-02 5.67512609e-02 2.80850797e-03 7.18197378e-01 3.10160966e+03 +2.98400000e-04 -1.65360702e-12 7.32197375e-02 5.98346033e-02 8.91792646e-02 5.67616740e-02 2.80734275e-03 7.18197378e-01 3.10160966e+03 +2.98500000e-04 -1.65360702e-12 7.32143031e-02 5.98241701e-02 8.91859049e-02 5.67720638e-02 2.80618015e-03 7.18197378e-01 3.10160966e+03 +2.98600000e-04 -1.65360702e-12 7.32088807e-02 5.98137611e-02 8.91925298e-02 5.67824304e-02 2.80502015e-03 7.18197378e-01 3.10160966e+03 +2.98700000e-04 -1.65360702e-12 7.32034702e-02 5.98033762e-02 8.91991394e-02 5.67927736e-02 2.80386276e-03 7.18197378e-01 3.10160966e+03 +2.98800000e-04 -1.65360702e-12 7.31980715e-02 5.97930153e-02 8.92057336e-02 5.68030937e-02 2.80270796e-03 7.18197378e-01 3.10160966e+03 +2.98900000e-04 -1.65360702e-12 7.31926847e-02 5.97826784e-02 8.92123126e-02 5.68133906e-02 2.80155575e-03 7.18197378e-01 3.10160966e+03 +2.99000000e-04 -1.65360702e-12 7.31873097e-02 5.97723654e-02 8.92188764e-02 5.68236644e-02 2.80040613e-03 7.18197378e-01 3.10160966e+03 +2.99100000e-04 -1.65360702e-12 7.31819466e-02 5.97620763e-02 8.92254250e-02 5.68339152e-02 2.79925909e-03 7.18197378e-01 3.10236021e+03 +2.99200000e-04 -1.65360702e-12 7.31765952e-02 5.97518111e-02 8.92319584e-02 5.68441429e-02 2.79811463e-03 7.18197378e-01 3.10236021e+03 +2.99300000e-04 -1.65360702e-12 7.31712555e-02 5.97415696e-02 8.92384766e-02 5.68543476e-02 2.79697273e-03 7.18197378e-01 3.10236021e+03 +2.99400000e-04 -1.65360702e-12 7.31659276e-02 5.97313519e-02 8.92449798e-02 5.68645294e-02 2.79583341e-03 7.18197378e-01 3.10236021e+03 +2.99500000e-04 -1.65360702e-12 7.31606114e-02 5.97211579e-02 8.92514679e-02 5.68746883e-02 2.79469664e-03 7.18197378e-01 3.10236021e+03 +2.99600000e-04 -1.65360702e-12 7.31553069e-02 5.97109875e-02 8.92579409e-02 5.68848244e-02 2.79356244e-03 7.18197378e-01 3.10236021e+03 +2.99700000e-04 -1.65360702e-12 7.31500141e-02 5.97008407e-02 8.92643989e-02 5.68949376e-02 2.79243078e-03 7.18197378e-01 3.10236021e+03 +2.99800000e-04 -1.65360702e-12 7.31447330e-02 5.96907175e-02 8.92708419e-02 5.69050281e-02 2.79130167e-03 7.18197378e-01 3.10236021e+03 +2.99900000e-04 -1.65360702e-12 7.31394634e-02 5.96806177e-02 8.92772700e-02 5.69150959e-02 2.79017510e-03 7.18197378e-01 3.10236021e+03 +3.00000000e-04 -1.65360702e-12 7.31342055e-02 5.96705414e-02 8.92836832e-02 5.69251410e-02 2.78905107e-03 7.18197378e-01 3.10236021e+03 +3.00100000e-04 -1.65360702e-12 7.31289592e-02 5.96604885e-02 8.92900814e-02 5.69351635e-02 2.78792957e-03 7.18197378e-01 3.10236021e+03 +3.00200000e-04 -1.65360702e-12 7.31237244e-02 5.96504589e-02 8.92964648e-02 5.69451634e-02 2.78681059e-03 7.18197378e-01 3.10236021e+03 +3.00300000e-04 -1.65360702e-12 7.31185012e-02 5.96404526e-02 8.93028334e-02 5.69551408e-02 2.78569414e-03 7.18197378e-01 3.10367303e+03 +3.00400000e-04 -1.65360702e-12 7.31132895e-02 5.96304696e-02 8.93091872e-02 5.69650957e-02 2.78458021e-03 7.18197378e-01 3.10367303e+03 +3.00500000e-04 -1.65360702e-12 7.31080893e-02 5.96205098e-02 8.93155262e-02 5.69750281e-02 2.78346879e-03 7.18197378e-01 3.10367303e+03 +3.00600000e-04 -1.65360702e-12 7.31029006e-02 5.96105731e-02 8.93218505e-02 5.69849381e-02 2.78235987e-03 7.18197378e-01 3.10367303e+03 +3.00700000e-04 -1.65360702e-12 7.30977233e-02 5.96006595e-02 8.93281600e-02 5.69948258e-02 2.78125346e-03 7.18197378e-01 3.10367303e+03 +3.00800000e-04 -1.65360702e-12 7.30925575e-02 5.95907690e-02 8.93344549e-02 5.70046911e-02 2.78014954e-03 7.18197378e-01 3.10367303e+03 +3.00900000e-04 -1.65360702e-12 7.30874031e-02 5.95809015e-02 8.93407352e-02 5.70145342e-02 2.77904812e-03 7.18197378e-01 3.10367303e+03 +3.01000000e-04 -1.65360702e-12 7.30822601e-02 5.95710570e-02 8.93470008e-02 5.70243550e-02 2.77794918e-03 7.18197378e-01 3.10367303e+03 +3.01100000e-04 -1.65360702e-12 7.30771285e-02 5.95612354e-02 8.93532519e-02 5.70341537e-02 2.77685273e-03 7.18197378e-01 3.10367303e+03 +3.01200000e-04 -1.65360702e-12 7.30720082e-02 5.95514366e-02 8.93594884e-02 5.70439302e-02 2.77575876e-03 7.18197378e-01 3.10367303e+03 +3.01300000e-04 -1.65360702e-12 7.30668993e-02 5.95416606e-02 8.93657104e-02 5.70536846e-02 2.77466725e-03 7.18197378e-01 3.10367303e+03 +3.01400000e-04 -1.65360702e-12 7.30618017e-02 5.95319074e-02 8.93719179e-02 5.70634169e-02 2.77357822e-03 7.18197378e-01 3.10367303e+03 +3.01500000e-04 -1.65360702e-12 7.30567153e-02 5.95221770e-02 8.93781109e-02 5.70731273e-02 2.77249165e-03 7.18197378e-01 3.10367303e+03 +3.01600000e-04 -1.65360702e-12 7.30516403e-02 5.95124692e-02 8.93842895e-02 5.70828156e-02 2.77140754e-03 7.18197378e-01 3.10367303e+03 +3.01700000e-04 -1.65360702e-12 7.30465764e-02 5.95027840e-02 8.93904537e-02 5.70924821e-02 2.77032588e-03 7.18197378e-01 3.10367303e+03 +3.01800000e-04 -1.65360702e-12 7.30415239e-02 5.94931214e-02 8.93966036e-02 5.71021266e-02 2.76924667e-03 7.18197378e-01 3.10367303e+03 +3.01900000e-04 -1.65360702e-12 7.30364825e-02 5.94834814e-02 8.94027391e-02 5.71117493e-02 2.76816991e-03 7.18197378e-01 3.10367303e+03 +3.02000000e-04 -1.65360702e-12 7.30314523e-02 5.94738638e-02 8.94088602e-02 5.71213502e-02 2.76709558e-03 7.18197378e-01 3.10367303e+03 +3.02100000e-04 -1.65360702e-12 7.30264333e-02 5.94642686e-02 8.94149672e-02 5.71309294e-02 2.76602369e-03 7.18197378e-01 3.10367303e+03 +3.02200000e-04 -1.65360702e-12 7.30214254e-02 5.94546959e-02 8.94210598e-02 5.71404868e-02 2.76495423e-03 7.18197378e-01 3.10367303e+03 +3.02300000e-04 -1.65360702e-12 7.30164286e-02 5.94451455e-02 8.94271383e-02 5.71500226e-02 2.76388719e-03 7.18197378e-01 3.10367303e+03 +3.02400000e-04 -1.65360702e-12 7.30114430e-02 5.94356173e-02 8.94332025e-02 5.71595368e-02 2.76282257e-03 7.18197378e-01 3.10492493e+03 +3.02500000e-04 -1.65360702e-12 7.30064684e-02 5.94261115e-02 8.94392526e-02 5.71690293e-02 2.76176037e-03 7.18197378e-01 3.10492493e+03 +3.02600000e-04 -1.65360702e-12 7.30015049e-02 5.94166278e-02 8.94452886e-02 5.71785004e-02 2.76070058e-03 7.18197378e-01 3.10492493e+03 +3.02700000e-04 -1.65360702e-12 7.29965524e-02 5.94071663e-02 8.94513104e-02 5.71879499e-02 2.75964319e-03 7.18197378e-01 3.10492493e+03 +3.02800000e-04 -1.65360702e-12 7.29916109e-02 5.93977269e-02 8.94573182e-02 5.71973779e-02 2.75858821e-03 7.18197378e-01 3.10492493e+03 +3.02900000e-04 -1.65360702e-12 7.29866805e-02 5.93883095e-02 8.94633120e-02 5.72067846e-02 2.75753562e-03 7.18197378e-01 3.10492493e+03 +3.03000000e-04 -1.65360702e-12 7.29817610e-02 5.93789141e-02 8.94692917e-02 5.72161699e-02 2.75648542e-03 7.18197378e-01 3.10492493e+03 +3.03100000e-04 -1.65360702e-12 7.29768525e-02 5.93695408e-02 8.94752575e-02 5.72255338e-02 2.75543761e-03 7.18197378e-01 3.10492493e+03 +3.03200000e-04 -1.65360702e-12 7.29719549e-02 5.93601893e-02 8.94812093e-02 5.72348765e-02 2.75439218e-03 7.18197378e-01 3.10492493e+03 +3.03300000e-04 -1.65360702e-12 7.29670682e-02 5.93508597e-02 8.94871472e-02 5.72441979e-02 2.75334913e-03 7.18197378e-01 3.10492493e+03 +3.03400000e-04 -1.65360702e-12 7.29621924e-02 5.93415520e-02 8.94930712e-02 5.72534981e-02 2.75230845e-03 7.18197378e-01 3.10492493e+03 +3.03500000e-04 -1.65360702e-12 7.29573275e-02 5.93322660e-02 8.94989813e-02 5.72627772e-02 2.75127014e-03 7.18197378e-01 3.10492493e+03 +3.03600000e-04 -1.65360702e-12 7.29524734e-02 5.93230017e-02 8.95048776e-02 5.72720351e-02 2.75023419e-03 7.18197378e-01 3.10492493e+03 +3.03700000e-04 -1.65360702e-12 7.29476302e-02 5.93137592e-02 8.95107601e-02 5.72812720e-02 2.74920060e-03 7.18197378e-01 3.10492493e+03 +3.03800000e-04 -1.65360702e-12 7.29427978e-02 5.93045383e-02 8.95166289e-02 5.72904878e-02 2.74816936e-03 7.18197378e-01 3.10492493e+03 +3.03900000e-04 -1.65360702e-12 7.29379762e-02 5.92953389e-02 8.95224839e-02 5.72996827e-02 2.74714048e-03 7.18197378e-01 3.10492493e+03 +3.04000000e-04 -1.65360702e-12 7.29331653e-02 5.92861612e-02 8.95283251e-02 5.73088566e-02 2.74611393e-03 7.18197378e-01 3.10492493e+03 +3.04100000e-04 -1.65360702e-12 7.29283653e-02 5.92770049e-02 8.95341527e-02 5.73180096e-02 2.74508973e-03 7.18197378e-01 3.10492493e+03 +3.04200000e-04 -1.65360702e-12 7.29235759e-02 5.92678701e-02 8.95399666e-02 5.73271417e-02 2.74406786e-03 7.18197378e-01 3.10492493e+03 +3.04300000e-04 -1.65360702e-12 7.29187972e-02 5.92587567e-02 8.95457669e-02 5.73362530e-02 2.74304832e-03 7.18197378e-01 3.10492493e+03 +3.04400000e-04 -1.65360702e-12 7.29140293e-02 5.92496647e-02 8.95515536e-02 5.73453435e-02 2.74203111e-03 7.18197378e-01 3.10492493e+03 +3.04500000e-04 -1.65360702e-12 7.29092720e-02 5.92405940e-02 8.95573267e-02 5.73544132e-02 2.74101622e-03 7.18197378e-01 3.10578656e+03 +3.04600000e-04 -1.65360702e-12 7.29045253e-02 5.92315446e-02 8.95630863e-02 5.73634623e-02 2.74000364e-03 7.18197378e-01 3.10578656e+03 +3.04700000e-04 -1.65360702e-12 7.28997893e-02 5.92225164e-02 8.95688324e-02 5.73724907e-02 2.73899338e-03 7.18197378e-01 3.10578656e+03 +3.04800000e-04 -1.65360702e-12 7.28950639e-02 5.92135094e-02 8.95745650e-02 5.73814985e-02 2.73798542e-03 7.18197378e-01 3.10578656e+03 +3.04900000e-04 -1.65360702e-12 7.28903490e-02 5.92045235e-02 8.95802841e-02 5.73904857e-02 2.73697976e-03 7.18197378e-01 3.10578656e+03 +3.05000000e-04 -1.65360702e-12 7.28856448e-02 5.91955587e-02 8.95859898e-02 5.73994524e-02 2.73597641e-03 7.18197378e-01 3.10578656e+03 +3.05100000e-04 -1.65360702e-12 7.28809511e-02 5.91866150e-02 8.95916821e-02 5.74083986e-02 2.73497534e-03 7.18197378e-01 3.10578656e+03 +3.05200000e-04 -1.65360702e-12 7.28762679e-02 5.91776923e-02 8.95973610e-02 5.74173244e-02 2.73397657e-03 7.18197378e-01 3.10578656e+03 +3.05300000e-04 -1.65360702e-12 7.28715952e-02 5.91687906e-02 8.96030266e-02 5.74262297e-02 2.73298007e-03 7.18197378e-01 3.10578656e+03 +3.05400000e-04 -1.65360702e-12 7.28669330e-02 5.91599097e-02 8.96086789e-02 5.74351147e-02 2.73198586e-03 7.18197378e-01 3.10578656e+03 +3.05500000e-04 -1.65360702e-12 7.28622813e-02 5.91510498e-02 8.96143179e-02 5.74439793e-02 2.73099392e-03 7.18197378e-01 3.10578656e+03 +3.05600000e-04 -1.65360702e-12 7.28576400e-02 5.91422106e-02 8.96199436e-02 5.74528237e-02 2.73000426e-03 7.18197378e-01 3.10578656e+03 +3.05700000e-04 -1.65360702e-12 7.28530091e-02 5.91333923e-02 8.96255561e-02 5.74616478e-02 2.72901685e-03 7.18197378e-01 3.10578656e+03 +3.05800000e-04 -1.65360702e-12 7.28483887e-02 5.91245947e-02 8.96311555e-02 5.74704517e-02 2.72803171e-03 7.18197378e-01 3.10578656e+03 +3.05900000e-04 -1.65360702e-12 7.28437786e-02 5.91158177e-02 8.96367416e-02 5.74792354e-02 2.72704883e-03 7.18197378e-01 3.10578656e+03 +3.06000000e-04 -1.65360702e-12 7.28391789e-02 5.91070615e-02 8.96423146e-02 5.74879990e-02 2.72606819e-03 7.18197378e-01 3.10578656e+03 +3.06100000e-04 -1.65360702e-12 7.28345895e-02 5.90983258e-02 8.96478745e-02 5.74967425e-02 2.72508981e-03 7.18197378e-01 3.10661898e+03 +3.06200000e-04 -1.65360702e-12 7.28300105e-02 5.90896107e-02 8.96534213e-02 5.75054660e-02 2.72411366e-03 7.18197378e-01 3.10661898e+03 +3.06300000e-04 -1.65360702e-12 7.28254418e-02 5.90809161e-02 8.96589550e-02 5.75141695e-02 2.72313976e-03 7.18197378e-01 3.10661898e+03 +3.06400000e-04 -1.65360702e-12 7.28208833e-02 5.90722420e-02 8.96644758e-02 5.75228530e-02 2.72216809e-03 7.18197378e-01 3.10661898e+03 +3.06500000e-04 -1.65360702e-12 7.28163351e-02 5.90635883e-02 8.96699835e-02 5.75315166e-02 2.72119864e-03 7.18197378e-01 3.10661898e+03 +3.06600000e-04 -1.65360702e-12 7.28117972e-02 5.90549550e-02 8.96754782e-02 5.75401603e-02 2.72023143e-03 7.18197378e-01 3.10661898e+03 +3.06700000e-04 -1.65360702e-12 7.28072695e-02 5.90463420e-02 8.96809600e-02 5.75487842e-02 2.71926643e-03 7.18197378e-01 3.10661898e+03 +3.06800000e-04 -1.65360702e-12 7.28027520e-02 5.90377493e-02 8.96864289e-02 5.75573883e-02 2.71830365e-03 7.18197378e-01 3.10661898e+03 +3.06900000e-04 -1.65360702e-12 7.27982447e-02 5.90291769e-02 8.96918849e-02 5.75659726e-02 2.71734307e-03 7.18197378e-01 3.10661898e+03 +3.07000000e-04 -1.65360702e-12 7.27937475e-02 5.90206247e-02 8.96973280e-02 5.75745372e-02 2.71638471e-03 7.18197378e-01 3.10661898e+03 +3.07100000e-04 -1.65360702e-12 7.27892605e-02 5.90120927e-02 8.97027583e-02 5.75830821e-02 2.71542855e-03 7.18197378e-01 3.10661898e+03 +3.07200000e-04 -1.65360702e-12 7.27847836e-02 5.90035807e-02 8.97081758e-02 5.75916074e-02 2.71447458e-03 7.18197378e-01 3.10661898e+03 +3.07300000e-04 -1.65360702e-12 7.27803169e-02 5.89950889e-02 8.97135805e-02 5.76001131e-02 2.71352281e-03 7.18197378e-01 3.10661898e+03 +3.07400000e-04 -1.65360702e-12 7.27758602e-02 5.89866171e-02 8.97189724e-02 5.76085992e-02 2.71257323e-03 7.18197378e-01 3.10661898e+03 +3.07500000e-04 -1.65360702e-12 7.27714136e-02 5.89781653e-02 8.97243516e-02 5.76170658e-02 2.71162583e-03 7.18197378e-01 3.10661898e+03 +3.07600000e-04 -1.65360702e-12 7.27669770e-02 5.89697334e-02 8.97297182e-02 5.76255130e-02 2.71068061e-03 7.18197378e-01 3.10742304e+03 +3.07700000e-04 -1.65360702e-12 7.27625504e-02 5.89613215e-02 8.97350720e-02 5.76339406e-02 2.70973756e-03 7.18197378e-01 3.10742304e+03 +3.07800000e-04 -1.65360702e-12 7.27581339e-02 5.89529294e-02 8.97404133e-02 5.76423489e-02 2.70879669e-03 7.18197378e-01 3.10742304e+03 +3.07900000e-04 -1.65360702e-12 7.27537274e-02 5.89445571e-02 8.97457419e-02 5.76507379e-02 2.70785798e-03 7.18197378e-01 3.10742304e+03 +3.08000000e-04 -1.65360702e-12 7.27493308e-02 5.89362046e-02 8.97510579e-02 5.76591075e-02 2.70692144e-03 7.18197378e-01 3.10742304e+03 +3.08100000e-04 -1.65360702e-12 7.27449441e-02 5.89278718e-02 8.97563613e-02 5.76674578e-02 2.70598705e-03 7.18197378e-01 3.10742304e+03 +3.08200000e-04 -1.65360702e-12 7.27405674e-02 5.89195588e-02 8.97616523e-02 5.76757889e-02 2.70505482e-03 7.18197378e-01 3.10742304e+03 +3.08300000e-04 -1.65360702e-12 7.27362007e-02 5.89112653e-02 8.97669307e-02 5.76841008e-02 2.70412473e-03 7.18197378e-01 3.10742304e+03 +3.08400000e-04 -1.65360702e-12 7.27318438e-02 5.89029915e-02 8.97721966e-02 5.76923935e-02 2.70319679e-03 7.18197378e-01 3.10742304e+03 +3.08500000e-04 -1.65360702e-12 7.27274967e-02 5.88947373e-02 8.97774501e-02 5.77006671e-02 2.70227099e-03 7.18197378e-01 3.10742304e+03 +3.08600000e-04 -1.65360702e-12 7.27231596e-02 5.88865025e-02 8.97826912e-02 5.77089216e-02 2.70134732e-03 7.18197378e-01 3.10742304e+03 +3.08700000e-04 -1.65360702e-12 7.27188322e-02 5.88782873e-02 8.97879198e-02 5.77171570e-02 2.70042579e-03 7.18197378e-01 3.10742304e+03 +3.08800000e-04 -1.65360702e-12 7.27145147e-02 5.88700915e-02 8.97931361e-02 5.77253735e-02 2.69950638e-03 7.18197378e-01 3.10742304e+03 +3.08900000e-04 -1.65360702e-12 7.27102069e-02 5.88619150e-02 8.97983401e-02 5.77335710e-02 2.69858909e-03 7.18197378e-01 3.10742304e+03 +3.09000000e-04 -1.65360702e-12 7.27059090e-02 5.88537580e-02 8.98035317e-02 5.77417496e-02 2.69767392e-03 7.18197378e-01 3.10742304e+03 +3.09100000e-04 -1.65360702e-12 7.27016208e-02 5.88456202e-02 8.98087111e-02 5.77499092e-02 2.69676087e-03 7.18197378e-01 3.10742304e+03 +3.09200000e-04 -1.65360702e-12 7.26973423e-02 5.88375017e-02 8.98138781e-02 5.77580501e-02 2.69584992e-03 7.18197378e-01 3.10819959e+03 +3.09300000e-04 -1.65360702e-12 7.26930736e-02 5.88294025e-02 8.98190330e-02 5.77661721e-02 2.69494108e-03 7.18197378e-01 3.10819959e+03 +3.09400000e-04 -1.65360702e-12 7.26888145e-02 5.88213224e-02 8.98241756e-02 5.77742753e-02 2.69403435e-03 7.18197378e-01 3.10819959e+03 +3.09500000e-04 -1.65360702e-12 7.26845651e-02 5.88132614e-02 8.98293061e-02 5.77823598e-02 2.69312970e-03 7.18197378e-01 3.10819959e+03 +3.09600000e-04 -1.65360702e-12 7.26803254e-02 5.88052196e-02 8.98344244e-02 5.77904257e-02 2.69222715e-03 7.18197378e-01 3.10819959e+03 +3.09700000e-04 -1.65360702e-12 7.26760953e-02 5.87971968e-02 8.98395305e-02 5.77984728e-02 2.69132669e-03 7.18197378e-01 3.10819959e+03 +3.09800000e-04 -1.65360702e-12 7.26718749e-02 5.87891931e-02 8.98446246e-02 5.78065014e-02 2.69042831e-03 7.18197378e-01 3.10819959e+03 +3.09900000e-04 -1.65360702e-12 7.26676640e-02 5.87812083e-02 8.98497065e-02 5.78145113e-02 2.68953201e-03 7.18197378e-01 3.10819959e+03 +3.10000000e-04 -1.65360702e-12 7.26634627e-02 5.87732424e-02 8.98547765e-02 5.78225027e-02 2.68863778e-03 7.18197378e-01 3.10819959e+03 +3.10100000e-04 -1.65360702e-12 7.26592710e-02 5.87652955e-02 8.98598344e-02 5.78304757e-02 2.68774562e-03 7.18197378e-01 3.10819959e+03 +3.10200000e-04 -1.65360702e-12 7.26550888e-02 5.87573674e-02 8.98648803e-02 5.78384301e-02 2.68685553e-03 7.18197378e-01 3.10819959e+03 +3.10300000e-04 -1.65360702e-12 7.26509162e-02 5.87494581e-02 8.98699142e-02 5.78463661e-02 2.68596750e-03 7.18197378e-01 3.10819959e+03 +3.10400000e-04 -1.65360702e-12 7.26467531e-02 5.87415676e-02 8.98749362e-02 5.78542838e-02 2.68508153e-03 7.18197378e-01 3.10819959e+03 +3.10500000e-04 -1.65360702e-12 7.26425994e-02 5.87336958e-02 8.98799463e-02 5.78621831e-02 2.68419762e-03 7.18197378e-01 3.10819959e+03 +3.10600000e-04 -1.65360702e-12 7.26384552e-02 5.87258427e-02 8.98849444e-02 5.78700640e-02 2.68331575e-03 7.18197378e-01 3.10819959e+03 +3.10700000e-04 -1.65360702e-12 7.26343205e-02 5.87180082e-02 8.98899307e-02 5.78779267e-02 2.68243592e-03 7.18197378e-01 3.10894943e+03 +3.10800000e-04 -1.65360702e-12 7.26301952e-02 5.87101924e-02 8.98949052e-02 5.78857712e-02 2.68155814e-03 7.18197378e-01 3.10894943e+03 +3.10900000e-04 -1.65360702e-12 7.26260793e-02 5.87023951e-02 8.98998678e-02 5.78935975e-02 2.68068239e-03 7.18197378e-01 3.10894943e+03 +3.11000000e-04 -1.65360702e-12 7.26219728e-02 5.86946164e-02 8.99048187e-02 5.79014056e-02 2.67980868e-03 7.18197378e-01 3.10894943e+03 +3.11100000e-04 -1.65360702e-12 7.26178757e-02 5.86868561e-02 8.99097578e-02 5.79091956e-02 2.67893699e-03 7.18197378e-01 3.10894943e+03 +3.11200000e-04 -1.65360702e-12 7.26137879e-02 5.86791143e-02 8.99146851e-02 5.79169675e-02 2.67806733e-03 7.18197378e-01 3.10894943e+03 +3.11300000e-04 -1.65360702e-12 7.26097095e-02 5.86713908e-02 8.99196008e-02 5.79247214e-02 2.67719968e-03 7.18197378e-01 3.10894943e+03 +3.11400000e-04 -1.65360702e-12 7.26056404e-02 5.86636858e-02 8.99245047e-02 5.79324572e-02 2.67633405e-03 7.18197378e-01 3.10894943e+03 +3.11500000e-04 -1.65360702e-12 7.26015806e-02 5.86559990e-02 8.99293970e-02 5.79401751e-02 2.67547044e-03 7.18197378e-01 3.10894943e+03 +3.11600000e-04 -1.65360702e-12 7.25975300e-02 5.86483306e-02 8.99342777e-02 5.79478750e-02 2.67460883e-03 7.18197378e-01 3.10894943e+03 +3.11700000e-04 -1.65360702e-12 7.25934888e-02 5.86406804e-02 8.99391467e-02 5.79555571e-02 2.67374922e-03 7.18197378e-01 3.10894943e+03 +3.11800000e-04 -1.65360702e-12 7.25894568e-02 5.86330483e-02 8.99440042e-02 5.79632213e-02 2.67289161e-03 7.18197378e-01 3.10894943e+03 +3.11900000e-04 -1.65360702e-12 7.25854340e-02 5.86254345e-02 8.99488501e-02 5.79708676e-02 2.67203599e-03 7.18197378e-01 3.10894943e+03 +3.12000000e-04 -1.65360702e-12 7.25814204e-02 5.86178388e-02 8.99536844e-02 5.79784962e-02 2.67118236e-03 7.18197378e-01 3.10894943e+03 +3.12100000e-04 -1.65360702e-12 7.25774159e-02 5.86102611e-02 8.99585073e-02 5.79861071e-02 2.67033072e-03 7.18197378e-01 3.10894943e+03 +3.12200000e-04 -1.65360702e-12 7.25734207e-02 5.86027015e-02 8.99633186e-02 5.79937002e-02 2.66948107e-03 7.18197378e-01 3.10967340e+03 +3.12300000e-04 -1.65360702e-12 7.25694346e-02 5.85951599e-02 8.99681186e-02 5.80012757e-02 2.66863339e-03 7.18197378e-01 3.10967340e+03 +3.12400000e-04 -1.65360702e-12 7.25654577e-02 5.85876363e-02 8.99729070e-02 5.80088335e-02 2.66778768e-03 7.18197378e-01 3.10967340e+03 +3.12500000e-04 -1.65360702e-12 7.25614898e-02 5.85801306e-02 8.99776841e-02 5.80163737e-02 2.66694394e-03 7.18197378e-01 3.10967340e+03 +3.12600000e-04 -1.65360702e-12 7.25575311e-02 5.85726428e-02 8.99824498e-02 5.80238963e-02 2.66610217e-03 7.18197378e-01 3.10967340e+03 +3.12700000e-04 -1.65360702e-12 7.25535814e-02 5.85651728e-02 8.99872041e-02 5.80314015e-02 2.66526236e-03 7.18197378e-01 3.10967340e+03 +3.12800000e-04 -1.65360702e-12 7.25496408e-02 5.85577206e-02 8.99919471e-02 5.80388891e-02 2.66442450e-03 7.18197378e-01 3.10967340e+03 +3.12900000e-04 -1.65360702e-12 7.25457092e-02 5.85502862e-02 8.99966788e-02 5.80463593e-02 2.66358860e-03 7.18197378e-01 3.10967340e+03 +3.13000000e-04 -1.65360702e-12 7.25417867e-02 5.85428695e-02 9.00013992e-02 5.80538121e-02 2.66275464e-03 7.18197378e-01 3.10967340e+03 +3.13100000e-04 -1.65360702e-12 7.25378731e-02 5.85354705e-02 9.00061084e-02 5.80612475e-02 2.66192264e-03 7.18197378e-01 3.10967340e+03 +3.13200000e-04 -1.65360702e-12 7.25339686e-02 5.85280892e-02 9.00108063e-02 5.80686655e-02 2.66109257e-03 7.18197378e-01 3.10967340e+03 +3.13300000e-04 -1.65360702e-12 7.25300730e-02 5.85207254e-02 9.00154930e-02 5.80760663e-02 2.66026444e-03 7.18197378e-01 3.10967340e+03 +3.13400000e-04 -1.65360702e-12 7.25261863e-02 5.85133793e-02 9.00201685e-02 5.80834498e-02 2.65943824e-03 7.18197378e-01 3.10967340e+03 +3.13500000e-04 -1.65360702e-12 7.25223086e-02 5.85060506e-02 9.00248329e-02 5.80908160e-02 2.65861397e-03 7.18197378e-01 3.10967340e+03 +3.13600000e-04 -1.65360702e-12 7.25184398e-02 5.84987395e-02 9.00294861e-02 5.80981651e-02 2.65779162e-03 7.18197378e-01 3.10967340e+03 +3.13700000e-04 -1.65360702e-12 7.25145799e-02 5.84914458e-02 9.00341283e-02 5.81054970e-02 2.65697119e-03 7.18197378e-01 3.10967340e+03 +3.13800000e-04 -1.65360702e-12 7.25107289e-02 5.84841695e-02 9.00387593e-02 5.81128117e-02 2.65615268e-03 7.18197378e-01 3.11037226e+03 +3.13900000e-04 -1.65360702e-12 7.25068867e-02 5.84769106e-02 9.00433793e-02 5.81201094e-02 2.65533608e-03 7.18197378e-01 3.11037226e+03 +3.14000000e-04 -1.65360702e-12 7.25030534e-02 5.84696691e-02 9.00479882e-02 5.81273901e-02 2.65452139e-03 7.18197378e-01 3.11037226e+03 +3.14100000e-04 -1.65360702e-12 7.24992289e-02 5.84624448e-02 9.00525862e-02 5.81346537e-02 2.65370861e-03 7.18197378e-01 3.11037226e+03 +3.14200000e-04 -1.65360702e-12 7.24954132e-02 5.84552378e-02 9.00571731e-02 5.81419003e-02 2.65289772e-03 7.18197378e-01 3.11037226e+03 +3.14300000e-04 -1.65360702e-12 7.24916062e-02 5.84480481e-02 9.00617491e-02 5.81491300e-02 2.65208873e-03 7.18197378e-01 3.11037226e+03 +3.14400000e-04 -1.65360702e-12 7.24878081e-02 5.84408755e-02 9.00663142e-02 5.81563428e-02 2.65128163e-03 7.18197378e-01 3.11037226e+03 +3.14500000e-04 -1.65360702e-12 7.24840187e-02 5.84337200e-02 9.00708683e-02 5.81635387e-02 2.65047642e-03 7.18197378e-01 3.11037226e+03 +3.14600000e-04 -1.65360702e-12 7.24802380e-02 5.84265817e-02 9.00754116e-02 5.81707178e-02 2.64967309e-03 7.18197378e-01 3.11037226e+03 +3.14700000e-04 -1.65360702e-12 7.24764661e-02 5.84194605e-02 9.00799439e-02 5.81778800e-02 2.64887165e-03 7.18197378e-01 3.11037226e+03 +3.14800000e-04 -1.65360702e-12 7.24727028e-02 5.84123562e-02 9.00844655e-02 5.81850256e-02 2.64807207e-03 7.18197378e-01 3.11037226e+03 +3.14900000e-04 -1.65360702e-12 7.24689482e-02 5.84052690e-02 9.00889762e-02 5.81921543e-02 2.64727438e-03 7.18197378e-01 3.11037226e+03 +3.15000000e-04 -1.65360702e-12 7.24652023e-02 5.83981987e-02 9.00934761e-02 5.81992664e-02 2.64647854e-03 7.18197378e-01 3.11037226e+03 +3.15100000e-04 -1.65360702e-12 7.24614650e-02 5.83911454e-02 9.00979653e-02 5.82063619e-02 2.64568458e-03 7.18197378e-01 3.11037226e+03 +3.15200000e-04 -1.65360702e-12 7.24577364e-02 5.83841089e-02 9.01024437e-02 5.82134407e-02 2.64489247e-03 7.18197378e-01 3.11037226e+03 +3.15300000e-04 -1.65360702e-12 7.24540163e-02 5.83770893e-02 9.01069114e-02 5.82205029e-02 2.64410222e-03 7.18197378e-01 3.11104681e+03 +3.15400000e-04 -1.65360702e-12 7.24503049e-02 5.83700865e-02 9.01113684e-02 5.82275486e-02 2.64331382e-03 7.18197378e-01 3.11104681e+03 +3.15500000e-04 -1.65360702e-12 7.24466020e-02 5.83631004e-02 9.01158148e-02 5.82345777e-02 2.64252727e-03 7.18197378e-01 3.11104681e+03 +3.15600000e-04 -1.65360702e-12 7.24429077e-02 5.83561311e-02 9.01202504e-02 5.82415904e-02 2.64174257e-03 7.18197378e-01 3.11104681e+03 +3.15700000e-04 -1.65360702e-12 7.24392219e-02 5.83491785e-02 9.01246755e-02 5.82485866e-02 2.64095970e-03 7.18197378e-01 3.11104681e+03 +3.15800000e-04 -1.65360702e-12 7.24355446e-02 5.83422425e-02 9.01290899e-02 5.82555664e-02 2.64017867e-03 7.18197378e-01 3.11104681e+03 +3.15900000e-04 -1.65360702e-12 7.24318759e-02 5.83353232e-02 9.01334938e-02 5.82625298e-02 2.63939947e-03 7.18197378e-01 3.11104681e+03 +3.16000000e-04 -1.65360702e-12 7.24282156e-02 5.83284204e-02 9.01378871e-02 5.82694769e-02 2.63862211e-03 7.18197378e-01 3.11104681e+03 +3.16100000e-04 -1.65360702e-12 7.24245638e-02 5.83215342e-02 9.01422699e-02 5.82764077e-02 2.63784656e-03 7.18197378e-01 3.11104681e+03 +3.16200000e-04 -1.65360702e-12 7.24209204e-02 5.83146645e-02 9.01466422e-02 5.82833222e-02 2.63707284e-03 7.18197378e-01 3.11104681e+03 +3.16300000e-04 -1.65360702e-12 7.24172855e-02 5.83078112e-02 9.01510040e-02 5.82902205e-02 2.63630093e-03 7.18197378e-01 3.11104681e+03 +3.16400000e-04 -1.65360702e-12 7.24136590e-02 5.83009744e-02 9.01553553e-02 5.82971026e-02 2.63553084e-03 7.18197378e-01 3.11104681e+03 +3.16500000e-04 -1.65360702e-12 7.24100408e-02 5.82941540e-02 9.01596962e-02 5.83039685e-02 2.63476256e-03 7.18197378e-01 3.11104681e+03 +3.16600000e-04 -1.65360702e-12 7.24064311e-02 5.82873500e-02 9.01640267e-02 5.83108182e-02 2.63399608e-03 7.18197378e-01 3.11104681e+03 +3.16700000e-04 -1.65360702e-12 7.24028297e-02 5.82805623e-02 9.01683468e-02 5.83176519e-02 2.63323140e-03 7.18197378e-01 3.11104681e+03 +3.16800000e-04 -1.65360702e-12 7.23992367e-02 5.82737909e-02 9.01726565e-02 5.83244695e-02 2.63246853e-03 7.18197378e-01 3.11169778e+03 +3.16900000e-04 -1.65360702e-12 7.23956520e-02 5.82670357e-02 9.01769559e-02 5.83312711e-02 2.63170744e-03 7.18197378e-01 3.11169778e+03 +3.17000000e-04 -1.65360702e-12 7.23920756e-02 5.82602967e-02 9.01812450e-02 5.83380567e-02 2.63094814e-03 7.18197378e-01 3.11169778e+03 +3.17100000e-04 -1.65360702e-12 7.23885075e-02 5.82535740e-02 9.01855238e-02 5.83448263e-02 2.63019064e-03 7.18197378e-01 3.11169778e+03 +3.17200000e-04 -1.65360702e-12 7.23849477e-02 5.82468673e-02 9.01897923e-02 5.83515800e-02 2.62943491e-03 7.18197378e-01 3.11169778e+03 +3.17300000e-04 -1.65360702e-12 7.23813961e-02 5.82401768e-02 9.01940505e-02 5.83583178e-02 2.62868096e-03 7.18197378e-01 3.11169778e+03 +3.17400000e-04 -1.65360702e-12 7.23778528e-02 5.82335024e-02 9.01982985e-02 5.83650397e-02 2.62792879e-03 7.18197378e-01 3.11169778e+03 +3.17500000e-04 -1.65360702e-12 7.23743177e-02 5.82268439e-02 9.02025363e-02 5.83717459e-02 2.62717838e-03 7.18197378e-01 3.11169778e+03 +3.17600000e-04 -1.65360702e-12 7.23707908e-02 5.82202015e-02 9.02067639e-02 5.83784362e-02 2.62642975e-03 7.18197378e-01 3.11169778e+03 +3.17700000e-04 -1.65360702e-12 7.23672721e-02 5.82135751e-02 9.02109814e-02 5.83851108e-02 2.62568287e-03 7.18197378e-01 3.11169778e+03 +3.17800000e-04 -1.65360702e-12 7.23637615e-02 5.82069645e-02 9.02151887e-02 5.83917696e-02 2.62493776e-03 7.18197378e-01 3.11169778e+03 +3.17900000e-04 -1.65360702e-12 7.23602592e-02 5.82003699e-02 9.02193859e-02 5.83984128e-02 2.62419440e-03 7.18197378e-01 3.11169778e+03 +3.18000000e-04 -1.65360702e-12 7.23567649e-02 5.81937911e-02 9.02235731e-02 5.84050403e-02 2.62345279e-03 7.18197378e-01 3.11169778e+03 +3.18100000e-04 -1.65360702e-12 7.23532788e-02 5.81872281e-02 9.02277501e-02 5.84116521e-02 2.62271294e-03 7.18197378e-01 3.11169778e+03 +3.18200000e-04 -1.65360702e-12 7.23498008e-02 5.81806810e-02 9.02319171e-02 5.84182484e-02 2.62197482e-03 7.18197378e-01 3.11169778e+03 +3.18300000e-04 -1.65360702e-12 7.23463309e-02 5.81741495e-02 9.02360741e-02 5.84248292e-02 2.62123845e-03 7.18197378e-01 3.11169778e+03 +3.18400000e-04 -1.65360702e-12 7.23428691e-02 5.81676338e-02 9.02402211e-02 5.84313944e-02 2.62050381e-03 7.18197378e-01 3.11232593e+03 +3.18500000e-04 -1.65360702e-12 7.23394153e-02 5.81611338e-02 9.02443581e-02 5.84379441e-02 2.61977091e-03 7.18197378e-01 3.11232593e+03 +3.18600000e-04 -1.65360702e-12 7.23359695e-02 5.81546494e-02 9.02484851e-02 5.84444784e-02 2.61903973e-03 7.18197378e-01 3.11232593e+03 +3.18700000e-04 -1.65360702e-12 7.23325318e-02 5.81481806e-02 9.02526022e-02 5.84509972e-02 2.61831028e-03 7.18197378e-01 3.11232593e+03 +3.18800000e-04 -1.65360702e-12 7.23291021e-02 5.81417274e-02 9.02567094e-02 5.84575007e-02 2.61758256e-03 7.18197378e-01 3.11232593e+03 +3.18900000e-04 -1.65360702e-12 7.23256803e-02 5.81352897e-02 9.02608068e-02 5.84639888e-02 2.61685655e-03 7.18197378e-01 3.11232593e+03 +3.19000000e-04 -1.65360702e-12 7.23222666e-02 5.81288675e-02 9.02648942e-02 5.84704616e-02 2.61613225e-03 7.18197378e-01 3.11232593e+03 +3.19100000e-04 -1.65360702e-12 7.23188607e-02 5.81224608e-02 9.02689718e-02 5.84769191e-02 2.61540967e-03 7.18197378e-01 3.11232593e+03 +3.19200000e-04 -1.65360702e-12 7.23154629e-02 5.81160696e-02 9.02730396e-02 5.84833614e-02 2.61468879e-03 7.18197378e-01 3.11232593e+03 +3.19300000e-04 -1.65360702e-12 7.23120729e-02 5.81096937e-02 9.02770976e-02 5.84897884e-02 2.61396962e-03 7.18197378e-01 3.11232593e+03 +3.19400000e-04 -1.65360702e-12 7.23086909e-02 5.81033332e-02 9.02811458e-02 5.84962002e-02 2.61325215e-03 7.18197378e-01 3.11232593e+03 +3.19500000e-04 -1.65360702e-12 7.23053167e-02 5.80969880e-02 9.02851842e-02 5.85025969e-02 2.61253637e-03 7.18197378e-01 3.11232593e+03 +3.19600000e-04 -1.65360702e-12 7.23019504e-02 5.80906581e-02 9.02892129e-02 5.85089785e-02 2.61182228e-03 7.18197378e-01 3.11232593e+03 +3.19700000e-04 -1.65360702e-12 7.22985920e-02 5.80843434e-02 9.02932319e-02 5.85153449e-02 2.61110988e-03 7.18197378e-01 3.11232593e+03 +3.19800000e-04 -1.65360702e-12 7.22952414e-02 5.80780440e-02 9.02972412e-02 5.85216963e-02 2.61039917e-03 7.18197378e-01 3.11232593e+03 +3.19900000e-04 -1.65360702e-12 7.22918986e-02 5.80717598e-02 9.03012409e-02 5.85280327e-02 2.60969014e-03 7.18197378e-01 3.11293198e+03 +3.20000000e-04 -1.65360702e-12 7.22885636e-02 5.80654907e-02 9.03052309e-02 5.85343541e-02 2.60898279e-03 7.18197378e-01 3.11293198e+03 +3.20100000e-04 -1.65360702e-12 7.22852364e-02 5.80592368e-02 9.03092113e-02 5.85406606e-02 2.60827711e-03 7.18197378e-01 3.11293198e+03 +3.20200000e-04 -1.65360702e-12 7.22819170e-02 5.80529979e-02 9.03131820e-02 5.85469521e-02 2.60757310e-03 7.18197378e-01 3.11293198e+03 +3.20300000e-04 -1.65360702e-12 7.22786054e-02 5.80467741e-02 9.03171432e-02 5.85532287e-02 2.60687075e-03 7.18197378e-01 3.11293198e+03 +3.20400000e-04 -1.65360702e-12 7.22753014e-02 5.80405654e-02 9.03210948e-02 5.85594904e-02 2.60617007e-03 7.18197378e-01 3.11293198e+03 +3.20500000e-04 -1.65360702e-12 7.22720052e-02 5.80343716e-02 9.03250369e-02 5.85657374e-02 2.60547105e-03 7.18197378e-01 3.11293198e+03 +3.20600000e-04 -1.65360702e-12 7.22687167e-02 5.80281927e-02 9.03289695e-02 5.85719695e-02 2.60477369e-03 7.18197378e-01 3.11293198e+03 +3.20700000e-04 -1.65360702e-12 7.22654359e-02 5.80220288e-02 9.03328926e-02 5.85781868e-02 2.60407798e-03 7.18197378e-01 3.11293198e+03 +3.20800000e-04 -1.65360702e-12 7.22621628e-02 5.80158797e-02 9.03368062e-02 5.85843895e-02 2.60338391e-03 7.18197378e-01 3.11293198e+03 +3.20900000e-04 -1.65360702e-12 7.22588973e-02 5.80097455e-02 9.03407104e-02 5.85905774e-02 2.60269150e-03 7.18197378e-01 3.11293198e+03 +3.21000000e-04 -1.65360702e-12 7.22556395e-02 5.80036261e-02 9.03446051e-02 5.85967507e-02 2.60200072e-03 7.18197378e-01 3.11293198e+03 +3.21100000e-04 -1.65360702e-12 7.22523893e-02 5.79975215e-02 9.03484904e-02 5.86029093e-02 2.60131158e-03 7.18197378e-01 3.11293198e+03 +3.21200000e-04 -1.65360702e-12 7.22491467e-02 5.79914317e-02 9.03523664e-02 5.86090533e-02 2.60062407e-03 7.18197378e-01 3.11293198e+03 +3.21300000e-04 -1.65360702e-12 7.22459117e-02 5.79853565e-02 9.03562330e-02 5.86151827e-02 2.59993820e-03 7.18197378e-01 3.11293198e+03 +3.21400000e-04 -1.65360702e-12 7.22426843e-02 5.79792961e-02 9.03600902e-02 5.86212976e-02 2.59925395e-03 7.18197378e-01 3.11351662e+03 +3.21500000e-04 -1.65360702e-12 7.22394644e-02 5.79732503e-02 9.03639381e-02 5.86273980e-02 2.59857133e-03 7.18197378e-01 3.11351662e+03 +3.21600000e-04 -1.65360702e-12 7.22362521e-02 5.79672191e-02 9.03677767e-02 5.86334839e-02 2.59789033e-03 7.18197378e-01 3.11351662e+03 +3.21700000e-04 -1.65360702e-12 7.22330473e-02 5.79612025e-02 9.03716060e-02 5.86395554e-02 2.59721094e-03 7.18197378e-01 3.11351662e+03 +3.21800000e-04 -1.65360702e-12 7.22298501e-02 5.79552004e-02 9.03754261e-02 5.86456125e-02 2.59653316e-03 7.18197378e-01 3.11351662e+03 +3.21900000e-04 -1.65360702e-12 7.22266603e-02 5.79492129e-02 9.03792369e-02 5.86516551e-02 2.59585700e-03 7.18197378e-01 3.11351662e+03 +3.22000000e-04 -1.65360702e-12 7.22234780e-02 5.79432398e-02 9.03830385e-02 5.86576834e-02 2.59518244e-03 7.18197378e-01 3.11351662e+03 +3.22100000e-04 -1.65360702e-12 7.22203031e-02 5.79372812e-02 9.03868309e-02 5.86636974e-02 2.59450948e-03 7.18197378e-01 3.11351662e+03 +3.22200000e-04 -1.65360702e-12 7.22171358e-02 5.79313370e-02 9.03906142e-02 5.86696971e-02 2.59383813e-03 7.18197378e-01 3.11351662e+03 +3.22300000e-04 -1.65360702e-12 7.22139758e-02 5.79254071e-02 9.03943882e-02 5.86756826e-02 2.59316837e-03 7.18197378e-01 3.11351662e+03 +3.22400000e-04 -1.65360702e-12 7.22108233e-02 5.79194917e-02 9.03981532e-02 5.86816538e-02 2.59250019e-03 7.18197378e-01 3.11351662e+03 +3.22500000e-04 -1.65360702e-12 7.22076781e-02 5.79135905e-02 9.04019090e-02 5.86876108e-02 2.59183361e-03 7.18197378e-01 3.11351662e+03 +3.22600000e-04 -1.65360702e-12 7.22045404e-02 5.79077037e-02 9.04056558e-02 5.86935537e-02 2.59116862e-03 7.18197378e-01 3.11351662e+03 +3.22700000e-04 -1.65360702e-12 7.22014100e-02 5.79018311e-02 9.04093934e-02 5.86994824e-02 2.59050520e-03 7.18197378e-01 3.11351662e+03 +3.22800000e-04 -1.65360702e-12 7.21982870e-02 5.78959727e-02 9.04131221e-02 5.87053971e-02 2.58984336e-03 7.18197378e-01 3.11351662e+03 +3.22900000e-04 -1.65360702e-12 7.21951713e-02 5.78901285e-02 9.04168417e-02 5.87112976e-02 2.58918310e-03 7.18197378e-01 3.11351662e+03 +3.23000000e-04 -1.65360702e-12 7.21920629e-02 5.78842984e-02 9.04205522e-02 5.87171842e-02 2.58852441e-03 7.18197378e-01 3.11408055e+03 +3.23100000e-04 -1.65360702e-12 7.21889619e-02 5.78784825e-02 9.04242538e-02 5.87230567e-02 2.58786728e-03 7.18197378e-01 3.11408055e+03 +3.23200000e-04 -1.65360702e-12 7.21858681e-02 5.78726806e-02 9.04279465e-02 5.87289152e-02 2.58721172e-03 7.18197378e-01 3.11408055e+03 +3.23300000e-04 -1.65360702e-12 7.21827816e-02 5.78668929e-02 9.04316301e-02 5.87347598e-02 2.58655772e-03 7.18197378e-01 3.11408055e+03 +3.23400000e-04 -1.65360702e-12 7.21797024e-02 5.78611191e-02 9.04353049e-02 5.87405905e-02 2.58590528e-03 7.18197378e-01 3.11408055e+03 +3.23500000e-04 -1.65360702e-12 7.21766304e-02 5.78553594e-02 9.04389707e-02 5.87464072e-02 2.58525439e-03 7.18197378e-01 3.11408055e+03 +3.23600000e-04 -1.65360702e-12 7.21735657e-02 5.78496136e-02 9.04426277e-02 5.87522102e-02 2.58460506e-03 7.18197378e-01 3.11408055e+03 +3.23700000e-04 -1.65360702e-12 7.21705081e-02 5.78438817e-02 9.04462758e-02 5.87579993e-02 2.58395726e-03 7.18197378e-01 3.11408055e+03 +3.23800000e-04 -1.65360702e-12 7.21674578e-02 5.78381637e-02 9.04499150e-02 5.87637746e-02 2.58331102e-03 7.18197378e-01 3.11408055e+03 +3.23900000e-04 -1.65360702e-12 7.21644146e-02 5.78324596e-02 9.04535454e-02 5.87695361e-02 2.58266631e-03 7.18197378e-01 3.11408055e+03 +3.24000000e-04 -1.65360702e-12 7.21613786e-02 5.78267694e-02 9.04571671e-02 5.87752839e-02 2.58202314e-03 7.18197378e-01 3.11408055e+03 +3.24100000e-04 -1.65360702e-12 7.21583498e-02 5.78210929e-02 9.04607799e-02 5.87810180e-02 2.58138150e-03 7.18197378e-01 3.11408055e+03 +3.24200000e-04 -1.65360702e-12 7.21553281e-02 5.78154302e-02 9.04643840e-02 5.87867385e-02 2.58074139e-03 7.18197378e-01 3.11408055e+03 +3.24300000e-04 -1.65360702e-12 7.21523135e-02 5.78097813e-02 9.04679793e-02 5.87924453e-02 2.58010281e-03 7.18197378e-01 3.11408055e+03 +3.24400000e-04 -1.65360702e-12 7.21493060e-02 5.78041460e-02 9.04715659e-02 5.87981385e-02 2.57946576e-03 7.18197378e-01 3.11408055e+03 +3.24500000e-04 -1.65360702e-12 7.21463056e-02 5.77985245e-02 9.04751438e-02 5.88038181e-02 2.57883022e-03 7.18197378e-01 3.11462444e+03 +3.24600000e-04 -1.65360702e-12 7.21433123e-02 5.77929166e-02 9.04787130e-02 5.88094841e-02 2.57819620e-03 7.18197378e-01 3.11462444e+03 +3.24700000e-04 -1.65360702e-12 7.21403261e-02 5.77873223e-02 9.04822735e-02 5.88151366e-02 2.57756369e-03 7.18197378e-01 3.11462444e+03 +3.24800000e-04 -1.65360702e-12 7.21373469e-02 5.77817415e-02 9.04858254e-02 5.88207757e-02 2.57693269e-03 7.18197378e-01 3.11462444e+03 +3.24900000e-04 -1.65360702e-12 7.21343747e-02 5.77761744e-02 9.04893687e-02 5.88264012e-02 2.57630320e-03 7.18197378e-01 3.11462444e+03 +3.25000000e-04 -1.65360702e-12 7.21314095e-02 5.77706207e-02 9.04929033e-02 5.88320134e-02 2.57567521e-03 7.18197378e-01 3.11462444e+03 +3.25100000e-04 -1.65360702e-12 7.21284514e-02 5.77650806e-02 9.04964294e-02 5.88376121e-02 2.57504872e-03 7.18197378e-01 3.11462444e+03 +3.25200000e-04 -1.65360702e-12 7.21255002e-02 5.77595539e-02 9.04999469e-02 5.88431974e-02 2.57442373e-03 7.18197378e-01 3.11462444e+03 +3.25300000e-04 -1.65360702e-12 7.21225560e-02 5.77540406e-02 9.05034559e-02 5.88487695e-02 2.57380023e-03 7.18197378e-01 3.11462444e+03 +3.25400000e-04 -1.65360702e-12 7.21196187e-02 5.77485407e-02 9.05069563e-02 5.88543282e-02 2.57317822e-03 7.18197378e-01 3.11462444e+03 +3.25500000e-04 -1.65360702e-12 7.21166884e-02 5.77430542e-02 9.05104483e-02 5.88598736e-02 2.57255770e-03 7.18197378e-01 3.11462444e+03 +3.25600000e-04 -1.65360702e-12 7.21137650e-02 5.77375810e-02 9.05139317e-02 5.88654057e-02 2.57193866e-03 7.18197378e-01 3.11462444e+03 +3.25700000e-04 -1.65360702e-12 7.21108485e-02 5.77321212e-02 9.05174067e-02 5.88709247e-02 2.57132110e-03 7.18197378e-01 3.11462444e+03 +3.25800000e-04 -1.65360702e-12 7.21079389e-02 5.77266746e-02 9.05208732e-02 5.88764304e-02 2.57070502e-03 7.18197378e-01 3.11462444e+03 +3.25900000e-04 -1.65360702e-12 7.21050362e-02 5.77212412e-02 9.05243313e-02 5.88819230e-02 2.57009041e-03 7.18197378e-01 3.11462444e+03 +3.26000000e-04 -1.65360702e-12 7.21021404e-02 5.77158211e-02 9.05277810e-02 5.88874024e-02 2.56947727e-03 7.18197378e-01 3.11501033e+03 +3.26100000e-04 -1.65360702e-12 7.20992514e-02 5.77104141e-02 9.05312223e-02 5.88928687e-02 2.56886560e-03 7.18197378e-01 3.11501033e+03 +3.26200000e-04 -1.65360702e-12 7.20963692e-02 5.77050203e-02 9.05346552e-02 5.88983220e-02 2.56825539e-03 7.18197378e-01 3.11501033e+03 +3.26300000e-04 -1.65360702e-12 7.20934939e-02 5.76996396e-02 9.05380798e-02 5.89037622e-02 2.56764664e-03 7.18197378e-01 3.11501033e+03 +3.26400000e-04 -1.65360702e-12 7.20906253e-02 5.76942721e-02 9.05414961e-02 5.89091893e-02 2.56703935e-03 7.18197378e-01 3.11501033e+03 +3.26500000e-04 -1.65360702e-12 7.20877636e-02 5.76889175e-02 9.05449040e-02 5.89146035e-02 2.56643351e-03 7.18197378e-01 3.11501033e+03 +3.26600000e-04 -1.65360702e-12 7.20849086e-02 5.76835760e-02 9.05483036e-02 5.89200047e-02 2.56582912e-03 7.18197378e-01 3.11501033e+03 +3.26700000e-04 -1.65360702e-12 7.20820604e-02 5.76782475e-02 9.05516950e-02 5.89253930e-02 2.56522618e-03 7.18197378e-01 3.11501033e+03 +3.26800000e-04 -1.65360702e-12 7.20792189e-02 5.76729320e-02 9.05550781e-02 5.89307684e-02 2.56462468e-03 7.18197378e-01 3.11501033e+03 +3.26900000e-04 -1.65360702e-12 7.20763842e-02 5.76676294e-02 9.05584530e-02 5.89361309e-02 2.56402463e-03 7.18197378e-01 3.11501033e+03 +3.27000000e-04 -1.65360702e-12 7.20735562e-02 5.76623398e-02 9.05618196e-02 5.89414806e-02 2.56342601e-03 7.18197378e-01 3.11501033e+03 +3.27100000e-04 -1.65360702e-12 7.20707348e-02 5.76570630e-02 9.05651781e-02 5.89468174e-02 2.56282883e-03 7.18197378e-01 3.11501033e+03 +3.27200000e-04 -1.65360702e-12 7.20679202e-02 5.76517991e-02 9.05685284e-02 5.89521414e-02 2.56223308e-03 7.18197378e-01 3.11527932e+03 +3.27300000e-04 -1.65360702e-12 7.20651122e-02 5.76465479e-02 9.05718705e-02 5.89574527e-02 2.56163875e-03 7.18197378e-01 3.11527932e+03 +3.27400000e-04 -1.65360702e-12 7.20623109e-02 5.76413096e-02 9.05752044e-02 5.89627513e-02 2.56104586e-03 7.18197378e-01 3.11527932e+03 +3.27500000e-04 -1.65360702e-12 7.20595163e-02 5.76360841e-02 9.05785303e-02 5.89680371e-02 2.56045438e-03 7.18197378e-01 3.11527932e+03 +3.27600000e-04 -1.65360702e-12 7.20567283e-02 5.76308712e-02 9.05818480e-02 5.89733103e-02 2.55986432e-03 7.18197378e-01 3.11527932e+03 +3.27700000e-04 -1.65360702e-12 7.20539469e-02 5.76256711e-02 9.05851577e-02 5.89785708e-02 2.55927568e-03 7.18197378e-01 3.11527932e+03 +3.27800000e-04 -1.65360702e-12 7.20511720e-02 5.76204837e-02 9.05884593e-02 5.89838187e-02 2.55868845e-03 7.18197378e-01 3.11527932e+03 +3.27900000e-04 -1.65360702e-12 7.20484038e-02 5.76153089e-02 9.05917528e-02 5.89890540e-02 2.55810262e-03 7.18197378e-01 3.11527932e+03 +3.28000000e-04 -1.65360702e-12 7.20456422e-02 5.76101467e-02 9.05950384e-02 5.89942767e-02 2.55751821e-03 7.18197378e-01 3.11547128e+03 +3.28100000e-04 -1.65360702e-12 7.20428871e-02 5.76049971e-02 9.05983159e-02 5.89994869e-02 2.55693519e-03 7.18197378e-01 3.11547128e+03 +3.28200000e-04 -1.65360702e-12 7.20401385e-02 5.75998600e-02 9.06015854e-02 5.90046846e-02 2.55635358e-03 7.18197378e-01 3.11547128e+03 +3.28300000e-04 -1.65360702e-12 7.20373965e-02 5.75947355e-02 9.06048469e-02 5.90098699e-02 2.55577336e-03 7.18197378e-01 3.11547128e+03 +3.28400000e-04 -1.65360702e-12 7.20346610e-02 5.75896235e-02 9.06081005e-02 5.90150426e-02 2.55519454e-03 7.18197378e-01 3.11547128e+03 +3.28500000e-04 -1.65360702e-12 7.20319319e-02 5.75845240e-02 9.06113461e-02 5.90202030e-02 2.55461710e-03 7.18197378e-01 3.11566061e+03 +3.28600000e-04 -1.65360702e-12 7.20292094e-02 5.75794369e-02 9.06145839e-02 5.90253509e-02 2.55404106e-03 7.18197378e-01 3.11566061e+03 +3.28700000e-04 -1.65360702e-12 7.20264934e-02 5.75743622e-02 9.06178137e-02 5.90304865e-02 2.55346639e-03 7.18197378e-01 3.11566061e+03 +3.28800000e-04 -1.65360702e-12 7.20237838e-02 5.75692999e-02 9.06210356e-02 5.90356097e-02 2.55289311e-03 7.18197378e-01 3.11566061e+03 +3.28900000e-04 -1.65360702e-12 7.20210806e-02 5.75642499e-02 9.06242497e-02 5.90407207e-02 2.55232121e-03 7.18197378e-01 3.11566061e+03 +3.29000000e-04 -1.65360702e-12 7.20183839e-02 5.75592123e-02 9.06274560e-02 5.90458193e-02 2.55175068e-03 7.18197378e-01 3.11566061e+03 +3.29100000e-04 -1.65360702e-12 7.20156936e-02 5.75541870e-02 9.06306544e-02 5.90509057e-02 2.55118152e-03 7.18197378e-01 3.11584734e+03 +3.29200000e-04 -1.65360702e-12 7.20130097e-02 5.75491739e-02 9.06338450e-02 5.90559799e-02 2.55061373e-03 7.18197378e-01 3.11584734e+03 +3.29300000e-04 -1.65360702e-12 7.20103321e-02 5.75441731e-02 9.06370278e-02 5.90610418e-02 2.55004731e-03 7.18197378e-01 3.11584734e+03 +3.29400000e-04 -1.65360702e-12 7.20076610e-02 5.75391845e-02 9.06402028e-02 5.90660916e-02 2.54948224e-03 7.18197378e-01 3.11584734e+03 +3.29500000e-04 -1.65360702e-12 7.20049962e-02 5.75342081e-02 9.06433701e-02 5.90711292e-02 2.54891854e-03 7.18197378e-01 3.11584734e+03 +3.29600000e-04 -1.65360702e-12 7.20023377e-02 5.75292438e-02 9.06465296e-02 5.90761547e-02 2.54835619e-03 7.18197378e-01 3.11584734e+03 +3.29700000e-04 -1.65360702e-12 7.19996856e-02 5.75242917e-02 9.06496815e-02 5.90811682e-02 2.54779520e-03 7.18197378e-01 3.11603150e+03 +3.29800000e-04 -1.65360702e-12 7.19970398e-02 5.75193517e-02 9.06528256e-02 5.90861695e-02 2.54723556e-03 7.18197378e-01 3.11603150e+03 +3.29900000e-04 -1.65360702e-12 7.19944003e-02 5.75144237e-02 9.06559620e-02 5.90911588e-02 2.54667726e-03 7.18197378e-01 3.11603150e+03 +3.30000000e-04 -1.65360702e-12 7.19917671e-02 5.75095078e-02 9.06590908e-02 5.90961361e-02 2.54612031e-03 7.18197378e-01 3.11603150e+03 +3.30100000e-04 -1.65360702e-12 7.19891402e-02 5.75046039e-02 9.06622119e-02 5.91011015e-02 2.54556470e-03 7.18197378e-01 3.11603150e+03 +3.30200000e-04 -1.65360702e-12 7.19865195e-02 5.74997120e-02 9.06653255e-02 5.91060548e-02 2.54501042e-03 7.18197378e-01 3.11603150e+03 +3.30300000e-04 -1.65360702e-12 7.19839051e-02 5.74948320e-02 9.06684313e-02 5.91109963e-02 2.54445749e-03 7.18197378e-01 3.11621312e+03 +3.30400000e-04 -1.65360702e-12 7.19812969e-02 5.74899640e-02 9.06715296e-02 5.91159258e-02 2.54390588e-03 7.18197378e-01 3.11621312e+03 +3.30500000e-04 -1.65360702e-12 7.19786949e-02 5.74851078e-02 9.06746204e-02 5.91208434e-02 2.54335560e-03 7.18197378e-01 3.11621312e+03 +3.30600000e-04 -1.65360702e-12 7.19760991e-02 5.74802636e-02 9.06777035e-02 5.91257493e-02 2.54280665e-03 7.18197378e-01 3.11621312e+03 +3.30700000e-04 -1.65360702e-12 7.19735095e-02 5.74754312e-02 9.06807791e-02 5.91306432e-02 2.54225902e-03 7.18197378e-01 3.11621312e+03 +3.30800000e-04 -1.65360702e-12 7.19709261e-02 5.74706106e-02 9.06838472e-02 5.91355254e-02 2.54171271e-03 7.18197378e-01 3.11621312e+03 +3.30900000e-04 -1.65360702e-12 7.19683489e-02 5.74658018e-02 9.06869078e-02 5.91403958e-02 2.54116772e-03 7.18197378e-01 3.11634163e+03 +3.31000000e-04 -1.65360702e-12 7.19657778e-02 5.74610048e-02 9.06899609e-02 5.91452545e-02 2.54062404e-03 7.18197378e-01 3.11634163e+03 +3.31100000e-04 -1.65360702e-12 7.19632129e-02 5.74562195e-02 9.06930066e-02 5.91501015e-02 2.54008168e-03 7.18197378e-01 3.11634163e+03 +3.31200000e-04 -1.65360702e-12 7.19606541e-02 5.74514460e-02 9.06960447e-02 5.91549368e-02 2.53954062e-03 7.18197378e-01 3.11634163e+03 +3.31300000e-04 -1.65360702e-12 7.19581014e-02 5.74466841e-02 9.06990755e-02 5.91597604e-02 2.53900086e-03 7.18197378e-01 3.11643151e+03 +3.31400000e-04 -1.65360702e-12 7.19555548e-02 5.74419338e-02 9.07020988e-02 5.91645723e-02 2.53846241e-03 7.18197378e-01 3.11643151e+03 +3.31500000e-04 -1.65360702e-12 7.19530142e-02 5.74371952e-02 9.07051148e-02 5.91693727e-02 2.53792526e-03 7.18197378e-01 3.11643151e+03 +3.31600000e-04 -1.65360702e-12 7.19504798e-02 5.74324682e-02 9.07081233e-02 5.91741615e-02 2.53738940e-03 7.18197378e-01 3.11649598e+03 +3.31700000e-04 -1.65360702e-12 7.19479514e-02 5.74277528e-02 9.07111245e-02 5.91789387e-02 2.53685484e-03 7.18197378e-01 3.11649598e+03 +3.31800000e-04 -1.65360702e-12 7.19454290e-02 5.74230489e-02 9.07141183e-02 5.91837044e-02 2.53632157e-03 7.18197378e-01 3.11656012e+03 +3.31900000e-04 -1.65360702e-12 7.19429127e-02 5.74183565e-02 9.07171048e-02 5.91884586e-02 2.53578958e-03 7.18197378e-01 3.11656012e+03 +3.32000000e-04 -1.65360702e-12 7.19404024e-02 5.74136757e-02 9.07200840e-02 5.91932013e-02 2.53525888e-03 7.18197378e-01 3.11662394e+03 +3.32100000e-04 -1.65360702e-12 7.19378981e-02 5.74090063e-02 9.07230558e-02 5.91979325e-02 2.53472946e-03 7.18197378e-01 3.11662394e+03 +3.32200000e-04 -1.65360702e-12 7.19353998e-02 5.74043483e-02 9.07260204e-02 5.92026523e-02 2.53420132e-03 7.18197378e-01 3.11668743e+03 +3.32300000e-04 -1.65360702e-12 7.19329074e-02 5.73997017e-02 9.07289778e-02 5.92073608e-02 2.53367446e-03 7.18197378e-01 3.11668743e+03 +3.32400000e-04 -1.65360702e-12 7.19304210e-02 5.73950666e-02 9.07319279e-02 5.92120578e-02 2.53314887e-03 7.18197378e-01 3.11675060e+03 +3.32500000e-04 -1.65360702e-12 7.19279406e-02 5.73904428e-02 9.07348707e-02 5.92167435e-02 2.53262455e-03 7.18197378e-01 3.11675060e+03 +3.32600000e-04 -1.65360702e-12 7.19254661e-02 5.73858303e-02 9.07378064e-02 5.92214179e-02 2.53210149e-03 7.18197378e-01 3.11679553e+03 +3.32700000e-04 -1.65360702e-12 7.19229975e-02 5.73812291e-02 9.07407348e-02 5.92260809e-02 2.53157970e-03 7.18197378e-01 3.11679553e+03 +3.32800000e-04 -1.65360702e-12 7.19205349e-02 5.73766393e-02 9.07436561e-02 5.92307328e-02 2.53105917e-03 7.18197378e-01 3.11682709e+03 +3.32900000e-04 -1.65360702e-12 7.19180781e-02 5.73720606e-02 9.07465702e-02 5.92353733e-02 2.53053990e-03 7.18197378e-01 3.11684981e+03 +3.33000000e-04 -1.65360702e-12 7.19156272e-02 5.73674932e-02 9.07494771e-02 5.92400026e-02 2.53002189e-03 7.18197378e-01 3.11687248e+03 +3.33100000e-04 -1.65360702e-12 7.19131822e-02 5.73629370e-02 9.07523770e-02 5.92446208e-02 2.52950512e-03 7.18197378e-01 3.11691771e+03 +3.33200000e-04 -1.65360702e-12 7.19107431e-02 5.73583920e-02 9.07552697e-02 5.92492277e-02 2.52898961e-03 7.18197378e-01 3.11694026e+03 +3.33300000e-04 -1.65360702e-12 7.19083098e-02 5.73538581e-02 9.07581553e-02 5.92538236e-02 2.52847535e-03 7.18197378e-01 3.11696277e+03 +3.33400000e-04 -1.65360702e-12 7.19058823e-02 5.73493354e-02 9.07610339e-02 5.92584083e-02 2.52796233e-03 7.18197378e-01 3.11707335e+03 +3.33500000e-04 -1.65360702e-12 7.19034607e-02 5.73448237e-02 9.07639054e-02 5.92629819e-02 2.52745055e-03 7.18197378e-01 3.11707335e+03 +3.33600000e-04 -1.65360702e-12 7.19010448e-02 5.73403231e-02 9.07667698e-02 5.92675444e-02 2.52694001e-03 7.18197378e-01 3.11707335e+03 +3.33700000e-04 -1.65360702e-12 7.18986347e-02 5.73358336e-02 9.07696272e-02 5.92720959e-02 2.52643070e-03 7.18197378e-01 3.11716084e+03 +3.33800000e-04 -1.65360702e-12 7.18962305e-02 5.73313550e-02 9.07724776e-02 5.92766364e-02 2.52592263e-03 7.18197378e-01 3.11716084e+03 +3.33900000e-04 -1.65360702e-12 7.18938320e-02 5.73268875e-02 9.07753210e-02 5.92811659e-02 2.52541579e-03 7.18197378e-01 3.11716084e+03 +3.34000000e-04 -1.65360702e-12 7.18914392e-02 5.73224309e-02 9.07781574e-02 5.92856844e-02 2.52491017e-03 7.18197378e-01 3.11724769e+03 +3.34100000e-04 -1.65360702e-12 7.18890522e-02 5.73179853e-02 9.07809869e-02 5.92901920e-02 2.52440578e-03 7.18197378e-01 3.11724769e+03 +3.34200000e-04 -1.65360702e-12 7.18866709e-02 5.73135506e-02 9.07838094e-02 5.92946887e-02 2.52390261e-03 7.18197378e-01 3.11724769e+03 +3.34300000e-04 -1.65360702e-12 7.18842953e-02 5.73091268e-02 9.07866250e-02 5.92991744e-02 2.52340066e-03 7.18197378e-01 3.11733391e+03 +3.34400000e-04 -1.65360702e-12 7.18819255e-02 5.73047138e-02 9.07894336e-02 5.93036493e-02 2.52289993e-03 7.18197378e-01 3.11733391e+03 +3.34500000e-04 -1.65360702e-12 7.18795613e-02 5.73003117e-02 9.07922354e-02 5.93081134e-02 2.52240041e-03 7.18197378e-01 3.11733391e+03 +3.34600000e-04 -1.65360702e-12 7.18772028e-02 5.72959204e-02 9.07950303e-02 5.93125666e-02 2.52190210e-03 7.18197378e-01 3.11733391e+03 +3.34700000e-04 -1.65360702e-12 7.18748499e-02 5.72915399e-02 9.07978183e-02 5.93170091e-02 2.52140500e-03 7.18197378e-01 3.11741950e+03 +3.34800000e-04 -1.65360702e-12 7.18725028e-02 5.72871701e-02 9.08005995e-02 5.93214407e-02 2.52090910e-03 7.18197378e-01 3.11741950e+03 +3.34900000e-04 -1.65360702e-12 7.18701612e-02 5.72828111e-02 9.08033738e-02 5.93258617e-02 2.52041440e-03 7.18197378e-01 3.11741950e+03 +3.35000000e-04 -1.65360702e-12 7.18678253e-02 5.72784628e-02 9.08061413e-02 5.93302719e-02 2.51992091e-03 7.18197378e-01 3.11764055e+03 +3.35100000e-04 -1.65360702e-12 7.18654950e-02 5.72741251e-02 9.08089020e-02 5.93346714e-02 2.51942861e-03 7.18197378e-01 3.11764055e+03 +3.35200000e-04 -1.65360702e-12 7.18631703e-02 5.72697982e-02 9.08116560e-02 5.93390602e-02 2.51893751e-03 7.18197378e-01 3.11764055e+03 +3.35300000e-04 -1.65360702e-12 7.18608512e-02 5.72654818e-02 9.08144031e-02 5.93434384e-02 2.51844759e-03 7.18197378e-01 3.11764055e+03 +3.35400000e-04 -1.65360702e-12 7.18585376e-02 5.72611761e-02 9.08171435e-02 5.93478060e-02 2.51795887e-03 7.18197378e-01 3.11764055e+03 +3.35500000e-04 -1.65360702e-12 7.18562296e-02 5.72568810e-02 9.08198772e-02 5.93521630e-02 2.51747133e-03 7.18197378e-01 3.11764055e+03 +3.35600000e-04 -1.65360702e-12 7.18539272e-02 5.72525964e-02 9.08226042e-02 5.93565094e-02 2.51698498e-03 7.18197378e-01 3.11764055e+03 +3.35700000e-04 -1.65360702e-12 7.18516303e-02 5.72483224e-02 9.08253244e-02 5.93608452e-02 2.51649980e-03 7.18197378e-01 3.11801516e+03 +3.35800000e-04 -1.65360702e-12 7.18493390e-02 5.72440589e-02 9.08280380e-02 5.93651706e-02 2.51601580e-03 7.18197378e-01 3.11801516e+03 +3.35900000e-04 -1.65360702e-12 7.18470531e-02 5.72398058e-02 9.08307449e-02 5.93694854e-02 2.51553298e-03 7.18197378e-01 3.11801516e+03 +3.36000000e-04 -1.65360702e-12 7.18447728e-02 5.72355632e-02 9.08334451e-02 5.93737897e-02 2.51505133e-03 7.18197378e-01 3.11801516e+03 +3.36100000e-04 -1.65360702e-12 7.18424979e-02 5.72313311e-02 9.08361387e-02 5.93780836e-02 2.51457085e-03 7.18197378e-01 3.11801516e+03 +3.36200000e-04 -1.65360702e-12 7.18402285e-02 5.72271094e-02 9.08388256e-02 5.93823671e-02 2.51409154e-03 7.18197378e-01 3.11801516e+03 +3.36300000e-04 -1.65360702e-12 7.18379646e-02 5.72228980e-02 9.08415059e-02 5.93866402e-02 2.51361339e-03 7.18197378e-01 3.11801516e+03 +3.36400000e-04 -1.65360702e-12 7.18357061e-02 5.72186971e-02 9.08441797e-02 5.93909029e-02 2.51313640e-03 7.18197378e-01 3.11801516e+03 +3.36500000e-04 -1.65360702e-12 7.18334531e-02 5.72145064e-02 9.08468469e-02 5.93951552e-02 2.51266057e-03 7.18197378e-01 3.11801516e+03 +3.36600000e-04 -1.65360702e-12 7.18312055e-02 5.72103261e-02 9.08495075e-02 5.93993972e-02 2.51218590e-03 7.18197378e-01 3.11801516e+03 +3.36700000e-04 -1.65360702e-12 7.18289633e-02 5.72061561e-02 9.08521615e-02 5.94036289e-02 2.51171238e-03 7.18197378e-01 3.11801516e+03 +3.36800000e-04 -1.65360702e-12 7.18267265e-02 5.72019963e-02 9.08548090e-02 5.94078503e-02 2.51124001e-03 7.18197378e-01 3.11801516e+03 +3.36900000e-04 -1.65360702e-12 7.18244951e-02 5.71978468e-02 9.08574500e-02 5.94120614e-02 2.51076879e-03 7.18197378e-01 3.11801516e+03 +3.37000000e-04 -1.65360702e-12 7.18222691e-02 5.71937075e-02 9.08600845e-02 5.94162623e-02 2.51029872e-03 7.18197378e-01 3.11801516e+03 +3.37100000e-04 -1.65360702e-12 7.18200485e-02 5.71895784e-02 9.08627125e-02 5.94204530e-02 2.50982979e-03 7.18197378e-01 3.11837750e+03 +3.37200000e-04 -1.65360702e-12 7.18178332e-02 5.71854594e-02 9.08653341e-02 5.94246335e-02 2.50936200e-03 7.18197378e-01 3.11837750e+03 +3.37300000e-04 -1.65360702e-12 7.18156232e-02 5.71813506e-02 9.08679492e-02 5.94288038e-02 2.50889534e-03 7.18197378e-01 3.11837750e+03 +3.37400000e-04 -1.65360702e-12 7.18134186e-02 5.71772519e-02 9.08705578e-02 5.94329640e-02 2.50842983e-03 7.18197378e-01 3.11837750e+03 +3.37500000e-04 -1.65360702e-12 7.18112193e-02 5.71731633e-02 9.08731600e-02 5.94371141e-02 2.50796544e-03 7.18197378e-01 3.11837750e+03 +3.37600000e-04 -1.65360702e-12 7.18090253e-02 5.71690848e-02 9.08757558e-02 5.94412541e-02 2.50750219e-03 7.18197378e-01 3.11837750e+03 +3.37700000e-04 -1.65360702e-12 7.18068366e-02 5.71650164e-02 9.08783452e-02 5.94453839e-02 2.50704006e-03 7.18197378e-01 3.11837750e+03 +3.37800000e-04 -1.65360702e-12 7.18046531e-02 5.71609579e-02 9.08809282e-02 5.94495038e-02 2.50657906e-03 7.18197378e-01 3.11837750e+03 +3.37900000e-04 -1.65360702e-12 7.18024750e-02 5.71569095e-02 9.08835049e-02 5.94536136e-02 2.50611917e-03 7.18197378e-01 3.11837750e+03 +3.38000000e-04 -1.65360702e-12 7.18003021e-02 5.71528710e-02 9.08860752e-02 5.94577134e-02 2.50566041e-03 7.18197378e-01 3.11837750e+03 +3.38100000e-04 -1.65360702e-12 7.17981344e-02 5.71488425e-02 9.08886392e-02 5.94618032e-02 2.50520277e-03 7.18197378e-01 3.11837750e+03 +3.38200000e-04 -1.65360702e-12 7.17959720e-02 5.71448240e-02 9.08911968e-02 5.94658831e-02 2.50474624e-03 7.18197378e-01 3.11837750e+03 +3.38300000e-04 -1.65360702e-12 7.17938148e-02 5.71408153e-02 9.08937482e-02 5.94699530e-02 2.50429082e-03 7.18197378e-01 3.11837750e+03 +3.38400000e-04 -1.65360702e-12 7.17916628e-02 5.71368165e-02 9.08962932e-02 5.94740131e-02 2.50383651e-03 7.18197378e-01 3.11837750e+03 +3.38500000e-04 -1.65360702e-12 7.17895160e-02 5.71328276e-02 9.08988320e-02 5.94780632e-02 2.50338331e-03 7.18197378e-01 3.11872796e+03 +3.38600000e-04 -1.65360702e-12 7.17873744e-02 5.71288485e-02 9.09013645e-02 5.94821034e-02 2.50293121e-03 7.18197378e-01 3.11872796e+03 +3.38700000e-04 -1.65360702e-12 7.17852380e-02 5.71248793e-02 9.09038908e-02 5.94861339e-02 2.50248021e-03 7.18197378e-01 3.11872796e+03 +3.38800000e-04 -1.65360702e-12 7.17831067e-02 5.71209198e-02 9.09064109e-02 5.94901545e-02 2.50203031e-03 7.18197378e-01 3.11872796e+03 +3.38900000e-04 -1.65360702e-12 7.17809806e-02 5.71169701e-02 9.09089247e-02 5.94941653e-02 2.50158151e-03 7.18197378e-01 3.11872796e+03 +3.39000000e-04 -1.65360702e-12 7.17788597e-02 5.71130301e-02 9.09114323e-02 5.94981663e-02 2.50113380e-03 7.18197378e-01 3.11872796e+03 +3.39100000e-04 -1.65360702e-12 7.17767438e-02 5.71090998e-02 9.09139338e-02 5.95021576e-02 2.50068718e-03 7.18197378e-01 3.11872796e+03 +3.39200000e-04 -1.65360702e-12 7.17746331e-02 5.71051793e-02 9.09164290e-02 5.95061391e-02 2.50024166e-03 7.18197378e-01 3.11872796e+03 +3.39300000e-04 -1.65360702e-12 7.17725275e-02 5.71012684e-02 9.09189181e-02 5.95101109e-02 2.49979722e-03 7.18197378e-01 3.11872796e+03 +3.39400000e-04 -1.65360702e-12 7.17704269e-02 5.70973672e-02 9.09214011e-02 5.95140731e-02 2.49935386e-03 7.18197378e-01 3.11872796e+03 +3.39500000e-04 -1.65360702e-12 7.17683315e-02 5.70934756e-02 9.09238779e-02 5.95180256e-02 2.49891158e-03 7.18197378e-01 3.11872796e+03 +3.39600000e-04 -1.65360702e-12 7.17662411e-02 5.70895936e-02 9.09263487e-02 5.95219684e-02 2.49847038e-03 7.18197378e-01 3.11872796e+03 +3.39700000e-04 -1.65360702e-12 7.17641558e-02 5.70857212e-02 9.09288133e-02 5.95259016e-02 2.49803026e-03 7.18197378e-01 3.11872796e+03 +3.39800000e-04 -1.65360702e-12 7.17620755e-02 5.70818584e-02 9.09312718e-02 5.95298253e-02 2.49759122e-03 7.18197378e-01 3.11872796e+03 +3.39900000e-04 -1.65360702e-12 7.17600003e-02 5.70780050e-02 9.09337243e-02 5.95337393e-02 2.49715324e-03 7.18197378e-01 3.11906690e+03 +3.40000000e-04 -1.65360702e-12 7.17579300e-02 5.70741613e-02 9.09361707e-02 5.95376438e-02 2.49671633e-03 7.18197378e-01 3.11906690e+03 +3.40100000e-04 -1.65360702e-12 7.17558648e-02 5.70703270e-02 9.09386111e-02 5.95415388e-02 2.49628049e-03 7.18197378e-01 3.11906690e+03 +3.40200000e-04 -1.65360702e-12 7.17538046e-02 5.70665021e-02 9.09410454e-02 5.95454243e-02 2.49584571e-03 7.18197378e-01 3.11906690e+03 +3.40300000e-04 -1.65360702e-12 7.17517494e-02 5.70626867e-02 9.09434738e-02 5.95493002e-02 2.49541200e-03 7.18197378e-01 3.11906690e+03 +3.40400000e-04 -1.65360702e-12 7.17496992e-02 5.70588808e-02 9.09458961e-02 5.95531668e-02 2.49497934e-03 7.18197378e-01 3.11906690e+03 +3.40500000e-04 -1.65360702e-12 7.17476539e-02 5.70550842e-02 9.09483124e-02 5.95570238e-02 2.49454774e-03 7.18197378e-01 3.11906690e+03 +3.40600000e-04 -1.65360702e-12 7.17456136e-02 5.70512970e-02 9.09507228e-02 5.95608715e-02 2.49411719e-03 7.18197378e-01 3.11906690e+03 +3.40700000e-04 -1.65360702e-12 7.17435782e-02 5.70475192e-02 9.09531272e-02 5.95647097e-02 2.49368770e-03 7.18197378e-01 3.11906690e+03 +3.40800000e-04 -1.65360702e-12 7.17415478e-02 5.70437507e-02 9.09555257e-02 5.95685386e-02 2.49325925e-03 7.18197378e-01 3.11906690e+03 +3.40900000e-04 -1.65360702e-12 7.17395223e-02 5.70399916e-02 9.09579183e-02 5.95723582e-02 2.49283185e-03 7.18197378e-01 3.11906690e+03 +3.41000000e-04 -1.65360702e-12 7.17375017e-02 5.70362417e-02 9.09603049e-02 5.95761684e-02 2.49240550e-03 7.18197378e-01 3.11906690e+03 +3.41100000e-04 -1.65360702e-12 7.17354860e-02 5.70325011e-02 9.09626857e-02 5.95799692e-02 2.49198019e-03 7.18197378e-01 3.11906690e+03 +3.41200000e-04 -1.65360702e-12 7.17334752e-02 5.70287697e-02 9.09650605e-02 5.95837608e-02 2.49155591e-03 7.18197378e-01 3.11906690e+03 +3.41300000e-04 -1.65360702e-12 7.17314692e-02 5.70250476e-02 9.09674295e-02 5.95875432e-02 2.49113268e-03 7.18197378e-01 3.11939468e+03 +3.41400000e-04 -1.65360702e-12 7.17294681e-02 5.70213346e-02 9.09697926e-02 5.95913163e-02 2.49071047e-03 7.18197378e-01 3.11939468e+03 +3.41500000e-04 -1.65360702e-12 7.17274719e-02 5.70176309e-02 9.09721499e-02 5.95950801e-02 2.49028930e-03 7.18197378e-01 3.11939468e+03 +3.41600000e-04 -1.65360702e-12 7.17254805e-02 5.70139363e-02 9.09745014e-02 5.95988348e-02 2.48986916e-03 7.18197378e-01 3.11939468e+03 +3.41700000e-04 -1.65360702e-12 7.17234940e-02 5.70102508e-02 9.09768470e-02 5.96025803e-02 2.48945005e-03 7.18197378e-01 3.11939468e+03 +3.41800000e-04 -1.65360702e-12 7.17215123e-02 5.70065745e-02 9.09791869e-02 5.96063166e-02 2.48903196e-03 7.18197378e-01 3.11939468e+03 +3.41900000e-04 -1.65360702e-12 7.17195354e-02 5.70029072e-02 9.09815209e-02 5.96100438e-02 2.48861490e-03 7.18197378e-01 3.11939468e+03 +3.42000000e-04 -1.65360702e-12 7.17175632e-02 5.69992490e-02 9.09838492e-02 5.96137618e-02 2.48819885e-03 7.18197378e-01 3.11939468e+03 +3.42100000e-04 -1.65360702e-12 7.17155959e-02 5.69955999e-02 9.09861717e-02 5.96174708e-02 2.48778383e-03 7.18197378e-01 3.11939468e+03 +3.42200000e-04 -1.65360702e-12 7.17136334e-02 5.69919598e-02 9.09884885e-02 5.96211707e-02 2.48736981e-03 7.18197378e-01 3.11939468e+03 +3.42300000e-04 -1.65360702e-12 7.17116756e-02 5.69883287e-02 9.09907996e-02 5.96248615e-02 2.48695681e-03 7.18197378e-01 3.11939468e+03 +3.42400000e-04 -1.65360702e-12 7.17097225e-02 5.69847066e-02 9.09931049e-02 5.96285433e-02 2.48654483e-03 7.18197378e-01 3.11939468e+03 +3.42500000e-04 -1.65360702e-12 7.17077743e-02 5.69810934e-02 9.09954045e-02 5.96322161e-02 2.48613385e-03 7.18197378e-01 3.11939468e+03 +3.42600000e-04 -1.65360702e-12 7.17058307e-02 5.69774892e-02 9.09976984e-02 5.96358799e-02 2.48572387e-03 7.18197378e-01 3.11971164e+03 +3.42700000e-04 -1.65360702e-12 7.17038919e-02 5.69738939e-02 9.09999867e-02 5.96395348e-02 2.48531490e-03 7.18197378e-01 3.11971164e+03 +3.42800000e-04 -1.65360702e-12 7.17019578e-02 5.69703075e-02 9.10022693e-02 5.96431807e-02 2.48490693e-03 7.18197378e-01 3.11971164e+03 +3.42900000e-04 -1.65360702e-12 7.17000283e-02 5.69667300e-02 9.10045462e-02 5.96468176e-02 2.48449996e-03 7.18197378e-01 3.11971164e+03 +3.43000000e-04 -1.65360702e-12 7.16981036e-02 5.69631614e-02 9.10068175e-02 5.96504457e-02 2.48409399e-03 7.18197378e-01 3.11971164e+03 +3.43100000e-04 -1.65360702e-12 7.16961836e-02 5.69596016e-02 9.10090832e-02 5.96540648e-02 2.48368901e-03 7.18197378e-01 3.11971164e+03 +3.43200000e-04 -1.65360702e-12 7.16942682e-02 5.69560506e-02 9.10113432e-02 5.96576752e-02 2.48328502e-03 7.18197378e-01 3.11971164e+03 +3.43300000e-04 -1.65360702e-12 7.16923574e-02 5.69525084e-02 9.10135977e-02 5.96612766e-02 2.48288203e-03 7.18197378e-01 3.11971164e+03 +3.43400000e-04 -1.65360702e-12 7.16904514e-02 5.69489749e-02 9.10158466e-02 5.96648693e-02 2.48248002e-03 7.18197378e-01 3.11971164e+03 +3.43500000e-04 -1.65360702e-12 7.16885499e-02 5.69454503e-02 9.10180899e-02 5.96684531e-02 2.48207899e-03 7.18197378e-01 3.11971164e+03 +3.43600000e-04 -1.65360702e-12 7.16866531e-02 5.69419343e-02 9.10203276e-02 5.96720281e-02 2.48167895e-03 7.18197378e-01 3.11971164e+03 +3.43700000e-04 -1.65360702e-12 7.16847609e-02 5.69384271e-02 9.10225598e-02 5.96755944e-02 2.48127989e-03 7.18197378e-01 3.11971164e+03 +3.43800000e-04 -1.65360702e-12 7.16828733e-02 5.69349285e-02 9.10247865e-02 5.96791520e-02 2.48088180e-03 7.18197378e-01 3.11971164e+03 +3.43900000e-04 -1.65360702e-12 7.16809903e-02 5.69314386e-02 9.10270077e-02 5.96827008e-02 2.48048469e-03 7.18197378e-01 3.11971164e+03 +3.44000000e-04 -1.65360702e-12 7.16791119e-02 5.69279574e-02 9.10292233e-02 5.96862409e-02 2.48008856e-03 7.18197378e-01 3.12001813e+03 +3.44100000e-04 -1.65360702e-12 7.16772380e-02 5.69244848e-02 9.10314335e-02 5.96897724e-02 2.47969340e-03 7.18197378e-01 3.12001813e+03 +3.44200000e-04 -1.65360702e-12 7.16753688e-02 5.69210208e-02 9.10336382e-02 5.96932952e-02 2.47929920e-03 7.18197378e-01 3.12001813e+03 +3.44300000e-04 -1.65360702e-12 7.16735040e-02 5.69175654e-02 9.10358374e-02 5.96968093e-02 2.47890597e-03 7.18197378e-01 3.12001813e+03 +3.44400000e-04 -1.65360702e-12 7.16716438e-02 5.69141185e-02 9.10380312e-02 5.97003149e-02 2.47851371e-03 7.18197378e-01 3.12001813e+03 +3.44500000e-04 -1.65360702e-12 7.16697882e-02 5.69106802e-02 9.10402196e-02 5.97038118e-02 2.47812241e-03 7.18197378e-01 3.12001813e+03 +3.44600000e-04 -1.65360702e-12 7.16679370e-02 5.69072504e-02 9.10424025e-02 5.97073002e-02 2.47773207e-03 7.18197378e-01 3.12001813e+03 +3.44700000e-04 -1.65360702e-12 7.16660904e-02 5.69038292e-02 9.10445800e-02 5.97107800e-02 2.47734268e-03 7.18197378e-01 3.12001813e+03 +3.44800000e-04 -1.65360702e-12 7.16642482e-02 5.69004164e-02 9.10467521e-02 5.97142512e-02 2.47695426e-03 7.18197378e-01 3.12001813e+03 +3.44900000e-04 -1.65360702e-12 7.16624106e-02 5.68970120e-02 9.10489188e-02 5.97177140e-02 2.47656678e-03 7.18197378e-01 3.12001813e+03 +3.45000000e-04 -1.65360702e-12 7.16605774e-02 5.68936161e-02 9.10510801e-02 5.97211682e-02 2.47618026e-03 7.18197378e-01 3.12001813e+03 +3.45100000e-04 -1.65360702e-12 7.16587487e-02 5.68902287e-02 9.10532361e-02 5.97246140e-02 2.47579468e-03 7.18197378e-01 3.12001813e+03 +3.45200000e-04 -1.65360702e-12 7.16569245e-02 5.68868496e-02 9.10553867e-02 5.97280513e-02 2.47541005e-03 7.18197378e-01 3.12001813e+03 +3.45300000e-04 -1.65360702e-12 7.16551047e-02 5.68834789e-02 9.10575320e-02 5.97314801e-02 2.47502637e-03 7.18197378e-01 3.12001813e+03 +3.45400000e-04 -1.65360702e-12 7.16532893e-02 5.68801166e-02 9.10596720e-02 5.97349006e-02 2.47464363e-03 7.18197378e-01 3.12031448e+03 +3.45500000e-04 -1.65360702e-12 7.16514784e-02 5.68767626e-02 9.10618067e-02 5.97383126e-02 2.47426182e-03 7.18197378e-01 3.12031448e+03 +3.45600000e-04 -1.65360702e-12 7.16496719e-02 5.68734170e-02 9.10639361e-02 5.97417163e-02 2.47388096e-03 7.18197378e-01 3.12031448e+03 +3.45700000e-04 -1.65360702e-12 7.16478698e-02 5.68700796e-02 9.10660602e-02 5.97451116e-02 2.47350103e-03 7.18197378e-01 3.12031448e+03 +3.45800000e-04 -1.65360702e-12 7.16460720e-02 5.68667505e-02 9.10681790e-02 5.97484986e-02 2.47312203e-03 7.18197378e-01 3.12031448e+03 +3.45900000e-04 -1.65360702e-12 7.16442787e-02 5.68634297e-02 9.10702925e-02 5.97518772e-02 2.47274397e-03 7.18197378e-01 3.12031448e+03 +3.46000000e-04 -1.65360702e-12 7.16424898e-02 5.68601171e-02 9.10724009e-02 5.97552476e-02 2.47236683e-03 7.18197378e-01 3.12031448e+03 +3.46100000e-04 -1.65360702e-12 7.16407052e-02 5.68568128e-02 9.10745039e-02 5.97586097e-02 2.47199062e-03 7.18197378e-01 3.12031448e+03 +3.46200000e-04 -1.65360702e-12 7.16389249e-02 5.68535166e-02 9.10766018e-02 5.97619635e-02 2.47161534e-03 7.18197378e-01 3.12031448e+03 +3.46300000e-04 -1.65360702e-12 7.16371490e-02 5.68502287e-02 9.10786944e-02 5.97653090e-02 2.47124097e-03 7.18197378e-01 3.12031448e+03 +3.46400000e-04 -1.65360702e-12 7.16353775e-02 5.68469489e-02 9.10807819e-02 5.97686464e-02 2.47086753e-03 7.18197378e-01 3.12031448e+03 +3.46500000e-04 -1.65360702e-12 7.16336103e-02 5.68436772e-02 9.10828642e-02 5.97719755e-02 2.47049500e-03 7.18197378e-01 3.12031448e+03 +3.46600000e-04 -1.65360702e-12 7.16318473e-02 5.68404137e-02 9.10849413e-02 5.97752965e-02 2.47012339e-03 7.18197378e-01 3.12031448e+03 +3.46700000e-04 -1.65360702e-12 7.16300887e-02 5.68371582e-02 9.10870132e-02 5.97786092e-02 2.46975270e-03 7.18197378e-01 3.12031448e+03 +3.46800000e-04 -1.65360702e-12 7.16283344e-02 5.68339109e-02 9.10890800e-02 5.97819139e-02 2.46938291e-03 7.18197378e-01 3.12060100e+03 +3.46900000e-04 -1.65360702e-12 7.16265844e-02 5.68306716e-02 9.10911417e-02 5.97852104e-02 2.46901404e-03 7.18197378e-01 3.12060100e+03 +3.47000000e-04 -1.65360702e-12 7.16248386e-02 5.68274404e-02 9.10931982e-02 5.97884988e-02 2.46864607e-03 7.18197378e-01 3.12060100e+03 +3.47100000e-04 -1.65360702e-12 7.16230971e-02 5.68242172e-02 9.10952497e-02 5.97917791e-02 2.46827901e-03 7.18197378e-01 3.12060100e+03 +3.47200000e-04 -1.65360702e-12 7.16213599e-02 5.68210020e-02 9.10972960e-02 5.97950514e-02 2.46791285e-03 7.18197378e-01 3.12060100e+03 +3.47300000e-04 -1.65360702e-12 7.16196269e-02 5.68177947e-02 9.10993373e-02 5.97983156e-02 2.46754759e-03 7.18197378e-01 3.12060100e+03 +3.47400000e-04 -1.65360702e-12 7.16178982e-02 5.68145955e-02 9.11013735e-02 5.98015718e-02 2.46718323e-03 7.18197378e-01 3.12060100e+03 +3.47500000e-04 -1.65360702e-12 7.16161736e-02 5.68114042e-02 9.11034046e-02 5.98048199e-02 2.46681977e-03 7.18197378e-01 3.12060100e+03 +3.47600000e-04 -1.65360702e-12 7.16144533e-02 5.68082208e-02 9.11054307e-02 5.98080601e-02 2.46645720e-03 7.18197378e-01 3.12060100e+03 +3.47700000e-04 -1.65360702e-12 7.16127372e-02 5.68050454e-02 9.11074517e-02 5.98112923e-02 2.46609552e-03 7.18197378e-01 3.12060100e+03 +3.47800000e-04 -1.65360702e-12 7.16110253e-02 5.68018778e-02 9.11094677e-02 5.98145165e-02 2.46573473e-03 7.18197378e-01 3.12060100e+03 +3.47900000e-04 -1.65360702e-12 7.16093176e-02 5.67987181e-02 9.11114788e-02 5.98177328e-02 2.46537483e-03 7.18197378e-01 3.12060100e+03 +3.48000000e-04 -1.65360702e-12 7.16076140e-02 5.67955663e-02 9.11134848e-02 5.98209412e-02 2.46501582e-03 7.18197378e-01 3.12060100e+03 +3.48100000e-04 -1.65360702e-12 7.16059147e-02 5.67924223e-02 9.11154858e-02 5.98241417e-02 2.46465769e-03 7.18197378e-01 3.12060100e+03 +3.48200000e-04 -1.65360702e-12 7.16042194e-02 5.67892861e-02 9.11174818e-02 5.98273343e-02 2.46430044e-03 7.18197378e-01 3.12090657e+03 +3.48300000e-04 -1.65360702e-12 7.16025284e-02 5.67861577e-02 9.11194729e-02 5.98305191e-02 2.46394408e-03 7.18197378e-01 3.12090657e+03 +3.48400000e-04 -1.65360702e-12 7.16008414e-02 5.67830371e-02 9.11214591e-02 5.98336960e-02 2.46358859e-03 7.18197378e-01 3.12090657e+03 +3.48500000e-04 -1.65360702e-12 7.15991586e-02 5.67799242e-02 9.11234403e-02 5.98368650e-02 2.46323397e-03 7.18197378e-01 3.12090657e+03 +3.48600000e-04 -1.65360702e-12 7.15974799e-02 5.67768191e-02 9.11254165e-02 5.98400263e-02 2.46288023e-03 7.18197378e-01 3.12090657e+03 +3.48700000e-04 -1.65360702e-12 7.15958053e-02 5.67737218e-02 9.11273879e-02 5.98431798e-02 2.46252736e-03 7.18197378e-01 3.12090657e+03 +3.48800000e-04 -1.65360702e-12 7.15941349e-02 5.67706321e-02 9.11293544e-02 5.98463255e-02 2.46217536e-03 7.18197378e-01 3.12090657e+03 +3.48900000e-04 -1.65360702e-12 7.15924685e-02 5.67675501e-02 9.11313159e-02 5.98494635e-02 2.46182423e-03 7.18197378e-01 3.12090657e+03 +3.49000000e-04 -1.65360702e-12 7.15908061e-02 5.67644757e-02 9.11332726e-02 5.98525937e-02 2.46147396e-03 7.18197378e-01 3.12090657e+03 +3.49100000e-04 -1.65360702e-12 7.15891479e-02 5.67614091e-02 9.11352244e-02 5.98557162e-02 2.46112456e-03 7.18197378e-01 3.12090657e+03 +3.49200000e-04 -1.65360702e-12 7.15874937e-02 5.67583500e-02 9.11371714e-02 5.98588310e-02 2.46077601e-03 7.18197378e-01 3.12090657e+03 +3.49300000e-04 -1.65360702e-12 7.15858436e-02 5.67552986e-02 9.11391135e-02 5.98619382e-02 2.46042833e-03 7.18197378e-01 3.12090657e+03 +3.49400000e-04 -1.65360702e-12 7.15841975e-02 5.67522547e-02 9.11410508e-02 5.98650377e-02 2.46008150e-03 7.18197378e-01 3.12090657e+03 +3.49500000e-04 -1.65360702e-12 7.15825554e-02 5.67492184e-02 9.11429832e-02 5.98681295e-02 2.45973553e-03 7.18197378e-01 3.12090657e+03 +3.49600000e-04 -1.65360702e-12 7.15809174e-02 5.67461897e-02 9.11449109e-02 5.98712137e-02 2.45939041e-03 7.18197378e-01 3.12090657e+03 +3.49700000e-04 -1.65360702e-12 7.15792834e-02 5.67431685e-02 9.11468337e-02 5.98742903e-02 2.45904614e-03 7.18197378e-01 3.12120094e+03 +3.49800000e-04 -1.65360702e-12 7.15776534e-02 5.67401549e-02 9.11487518e-02 5.98773594e-02 2.45870273e-03 7.18197378e-01 3.12120094e+03 +3.49900000e-04 -1.65360702e-12 7.15760274e-02 5.67371487e-02 9.11506651e-02 5.98804208e-02 2.45836015e-03 7.18197378e-01 3.12120094e+03 +3.50000000e-04 -1.65360702e-12 7.15744053e-02 5.67341500e-02 9.11525736e-02 5.98834747e-02 2.45801843e-03 7.18197378e-01 3.12120094e+03 +3.50100000e-04 -1.65360702e-12 7.15727873e-02 5.67311588e-02 9.11544774e-02 5.98865211e-02 2.45767754e-03 7.18197378e-01 3.12120094e+03 +3.50200000e-04 -1.65360702e-12 7.15711732e-02 5.67281751e-02 9.11563765e-02 5.98895599e-02 2.45733750e-03 7.18197378e-01 3.12120094e+03 +3.50300000e-04 -1.65360702e-12 7.15695630e-02 5.67251987e-02 9.11582708e-02 5.98925913e-02 2.45699830e-03 7.18197378e-01 3.12120094e+03 +3.50400000e-04 -1.65360702e-12 7.15679569e-02 5.67222298e-02 9.11601604e-02 5.98956152e-02 2.45665993e-03 7.18197378e-01 3.12120094e+03 +3.50500000e-04 -1.65360702e-12 7.15663546e-02 5.67192683e-02 9.11620453e-02 5.98986316e-02 2.45632240e-03 7.18197378e-01 3.12120094e+03 +3.50600000e-04 -1.65360702e-12 7.15647563e-02 5.67163141e-02 9.11639255e-02 5.99016406e-02 2.45598570e-03 7.18197378e-01 3.12120094e+03 +3.50700000e-04 -1.65360702e-12 7.15631619e-02 5.67133673e-02 9.11658010e-02 5.99046421e-02 2.45564983e-03 7.18197378e-01 3.12120094e+03 +3.50800000e-04 -1.65360702e-12 7.15615714e-02 5.67104279e-02 9.11676718e-02 5.99076363e-02 2.45531479e-03 7.18197378e-01 3.12120094e+03 +3.50900000e-04 -1.65360702e-12 7.15599848e-02 5.67074957e-02 9.11695380e-02 5.99106230e-02 2.45498058e-03 7.18197378e-01 3.12120094e+03 +3.51000000e-04 -1.65360702e-12 7.15584021e-02 5.67045709e-02 9.11713995e-02 5.99136024e-02 2.45464719e-03 7.18197378e-01 3.12120094e+03 +3.51100000e-04 -1.65360702e-12 7.15568233e-02 5.67016534e-02 9.11732564e-02 5.99165744e-02 2.45431463e-03 7.18197378e-01 3.12120094e+03 +3.51200000e-04 -1.65360702e-12 7.15552484e-02 5.66987431e-02 9.11751087e-02 5.99195391e-02 2.45398288e-03 7.18197378e-01 3.12148448e+03 +3.51300000e-04 -1.65360702e-12 7.15536773e-02 5.66958401e-02 9.11769563e-02 5.99224964e-02 2.45365196e-03 7.18197378e-01 3.12148448e+03 +3.51400000e-04 -1.65360702e-12 7.15521101e-02 5.66929443e-02 9.11787994e-02 5.99254465e-02 2.45332186e-03 7.18197378e-01 3.12148448e+03 +3.51500000e-04 -1.65360702e-12 7.15505468e-02 5.66900557e-02 9.11806378e-02 5.99283892e-02 2.45299256e-03 7.18197378e-01 3.12148448e+03 +3.51600000e-04 -1.65360702e-12 7.15489873e-02 5.66871743e-02 9.11824717e-02 5.99313247e-02 2.45266409e-03 7.18197378e-01 3.12148448e+03 +3.51700000e-04 -1.65360702e-12 7.15474316e-02 5.66843001e-02 9.11843010e-02 5.99342530e-02 2.45233642e-03 7.18197378e-01 3.12148448e+03 +3.51800000e-04 -1.65360702e-12 7.15458797e-02 5.66814331e-02 9.11861258e-02 5.99371740e-02 2.45200957e-03 7.18197378e-01 3.12148448e+03 +3.51900000e-04 -1.65360702e-12 7.15443316e-02 5.66785732e-02 9.11879460e-02 5.99400878e-02 2.45168352e-03 7.18197378e-01 3.12148448e+03 +3.52000000e-04 -1.65360702e-12 7.15427874e-02 5.66757205e-02 9.11897616e-02 5.99429944e-02 2.45135827e-03 7.18197378e-01 3.12148448e+03 +3.52100000e-04 -1.65360702e-12 7.15412469e-02 5.66728748e-02 9.11915728e-02 5.99458938e-02 2.45103383e-03 7.18197378e-01 3.12148448e+03 +3.52200000e-04 -1.65360702e-12 7.15397103e-02 5.66700363e-02 9.11933794e-02 5.99487860e-02 2.45071020e-03 7.18197378e-01 3.12148448e+03 +3.52300000e-04 -1.65360702e-12 7.15381774e-02 5.66672048e-02 9.11951815e-02 5.99516711e-02 2.45038736e-03 7.18197378e-01 3.12148448e+03 +3.52400000e-04 -1.65360702e-12 7.15366482e-02 5.66643804e-02 9.11969791e-02 5.99545491e-02 2.45006532e-03 7.18197378e-01 3.12148448e+03 +3.52500000e-04 -1.65360702e-12 7.15351228e-02 5.66615630e-02 9.11987722e-02 5.99574199e-02 2.44974408e-03 7.18197378e-01 3.12148448e+03 +3.52600000e-04 -1.65360702e-12 7.15336012e-02 5.66587527e-02 9.12005609e-02 5.99602837e-02 2.44942363e-03 7.18197378e-01 3.12148448e+03 +3.52700000e-04 -1.65360702e-12 7.15320833e-02 5.66559494e-02 9.12023451e-02 5.99631404e-02 2.44910397e-03 7.18197378e-01 3.12175758e+03 +3.52800000e-04 -1.65360702e-12 7.15305692e-02 5.66531530e-02 9.12041249e-02 5.99659900e-02 2.44878511e-03 7.18197378e-01 3.12175758e+03 +3.52900000e-04 -1.65360702e-12 7.15290587e-02 5.66503637e-02 9.12059002e-02 5.99688325e-02 2.44846703e-03 7.18197378e-01 3.12175758e+03 +3.53000000e-04 -1.65360702e-12 7.15275520e-02 5.66475813e-02 9.12076711e-02 5.99716681e-02 2.44814974e-03 7.18197378e-01 3.12175758e+03 +3.53100000e-04 -1.65360702e-12 7.15260490e-02 5.66448058e-02 9.12094375e-02 5.99744966e-02 2.44783323e-03 7.18197378e-01 3.12175758e+03 +3.53200000e-04 -1.65360702e-12 7.15245497e-02 5.66420372e-02 9.12111996e-02 5.99773181e-02 2.44751751e-03 7.18197378e-01 3.12175758e+03 +3.53300000e-04 -1.65360702e-12 7.15230541e-02 5.66392756e-02 9.12129573e-02 5.99801326e-02 2.44720257e-03 7.18197378e-01 3.12175758e+03 +3.53400000e-04 -1.65360702e-12 7.15215621e-02 5.66365209e-02 9.12147105e-02 5.99829402e-02 2.44688840e-03 7.18197378e-01 3.12175758e+03 +3.53500000e-04 -1.65360702e-12 7.15200739e-02 5.66337730e-02 9.12164594e-02 5.99857408e-02 2.44657502e-03 7.18197378e-01 3.12175758e+03 +3.53600000e-04 -1.65360702e-12 7.15185892e-02 5.66310320e-02 9.12182040e-02 5.99885345e-02 2.44626241e-03 7.18197378e-01 3.12175758e+03 +3.53700000e-04 -1.65360702e-12 7.15171083e-02 5.66282978e-02 9.12199442e-02 5.99913213e-02 2.44595057e-03 7.18197378e-01 3.12175758e+03 +3.53800000e-04 -1.65360702e-12 7.15156310e-02 5.66255705e-02 9.12216800e-02 5.99941012e-02 2.44563951e-03 7.18197378e-01 3.12175758e+03 +3.53900000e-04 -1.65360702e-12 7.15141573e-02 5.66228499e-02 9.12234115e-02 5.99968742e-02 2.44532921e-03 7.18197378e-01 3.12175758e+03 +3.54000000e-04 -1.65360702e-12 7.15126872e-02 5.66201362e-02 9.12251387e-02 5.99996404e-02 2.44501968e-03 7.18197378e-01 3.12175758e+03 +3.54100000e-04 -1.65360702e-12 7.15112208e-02 5.66174292e-02 9.12268616e-02 6.00023996e-02 2.44471092e-03 7.18197378e-01 3.12175758e+03 +3.54200000e-04 -1.65360702e-12 7.15097580e-02 5.66147290e-02 9.12285802e-02 6.00051521e-02 2.44440293e-03 7.18197378e-01 3.12175758e+03 +3.54300000e-04 -1.65360702e-12 7.15082987e-02 5.66120355e-02 9.12302945e-02 6.00078978e-02 2.44409569e-03 7.18197378e-01 3.12202061e+03 +3.54400000e-04 -1.65360702e-12 7.15068431e-02 5.66093487e-02 9.12320045e-02 6.00106366e-02 2.44378922e-03 7.18197378e-01 3.12202061e+03 +3.54500000e-04 -1.65360702e-12 7.15053911e-02 5.66066687e-02 9.12337102e-02 6.00133687e-02 2.44348351e-03 7.18197378e-01 3.12202061e+03 +3.54600000e-04 -1.65360702e-12 7.15039426e-02 5.66039954e-02 9.12354117e-02 6.00160940e-02 2.44317855e-03 7.18197378e-01 3.12202061e+03 +3.54700000e-04 -1.65360702e-12 7.15024977e-02 5.66013287e-02 9.12371089e-02 6.00188125e-02 2.44287435e-03 7.18197378e-01 3.12202061e+03 +3.54800000e-04 -1.65360702e-12 7.15010564e-02 5.65986687e-02 9.12388019e-02 6.00215243e-02 2.44257090e-03 7.18197378e-01 3.12202061e+03 +3.54900000e-04 -1.65360702e-12 7.14996186e-02 5.65960153e-02 9.12404906e-02 6.00242294e-02 2.44226821e-03 7.18197378e-01 3.12202061e+03 +3.55000000e-04 -1.65360702e-12 7.14981843e-02 5.65933685e-02 9.12421752e-02 6.00269278e-02 2.44196626e-03 7.18197378e-01 3.12202061e+03 +3.55100000e-04 -1.65360702e-12 7.14967536e-02 5.65907284e-02 9.12438555e-02 6.00296195e-02 2.44166506e-03 7.18197378e-01 3.12202061e+03 +3.55200000e-04 -1.65360702e-12 7.14953264e-02 5.65880949e-02 9.12455317e-02 6.00323046e-02 2.44136461e-03 7.18197378e-01 3.12202061e+03 +3.55300000e-04 -1.65360702e-12 7.14939028e-02 5.65854679e-02 9.12472036e-02 6.00349830e-02 2.44106490e-03 7.18197378e-01 3.12202061e+03 +3.55400000e-04 -1.65360702e-12 7.14924826e-02 5.65828475e-02 9.12488714e-02 6.00376547e-02 2.44076594e-03 7.18197378e-01 3.12202061e+03 +3.55500000e-04 -1.65360702e-12 7.14910659e-02 5.65802337e-02 9.12505350e-02 6.00403198e-02 2.44046772e-03 7.18197378e-01 3.12202061e+03 +3.55600000e-04 -1.65360702e-12 7.14896528e-02 5.65776264e-02 9.12521944e-02 6.00429784e-02 2.44017023e-03 7.18197378e-01 3.12202061e+03 +3.55700000e-04 -1.65360702e-12 7.14882431e-02 5.65750256e-02 9.12538497e-02 6.00456303e-02 2.43987349e-03 7.18197378e-01 3.12202061e+03 +3.55800000e-04 -1.65360702e-12 7.14868369e-02 5.65724312e-02 9.12555009e-02 6.00482757e-02 2.43957747e-03 7.18197378e-01 3.12227392e+03 +3.55900000e-04 -1.65360702e-12 7.14854341e-02 5.65698434e-02 9.12571479e-02 6.00509145e-02 2.43928220e-03 7.18197378e-01 3.12227392e+03 +3.56000000e-04 -1.65360702e-12 7.14840348e-02 5.65672621e-02 9.12587909e-02 6.00535467e-02 2.43898765e-03 7.18197378e-01 3.12227392e+03 +3.56100000e-04 -1.65360702e-12 7.14826390e-02 5.65646872e-02 9.12604297e-02 6.00561724e-02 2.43869384e-03 7.18197378e-01 3.12227392e+03 +3.56200000e-04 -1.65360702e-12 7.14812466e-02 5.65621187e-02 9.12620644e-02 6.00587917e-02 2.43840075e-03 7.18197378e-01 3.12227392e+03 +3.56300000e-04 -1.65360702e-12 7.14798577e-02 5.65595567e-02 9.12636950e-02 6.00614044e-02 2.43810839e-03 7.18197378e-01 3.12227392e+03 +3.56400000e-04 -1.65360702e-12 7.14784722e-02 5.65570010e-02 9.12653216e-02 6.00640106e-02 2.43781676e-03 7.18197378e-01 3.12227392e+03 +3.56500000e-04 -1.65360702e-12 7.14770901e-02 5.65544518e-02 9.12669441e-02 6.00666104e-02 2.43752585e-03 7.18197378e-01 3.12227392e+03 +3.56600000e-04 -1.65360702e-12 7.14757114e-02 5.65519089e-02 9.12685625e-02 6.00692037e-02 2.43723566e-03 7.18197378e-01 3.12227392e+03 +3.56700000e-04 -1.65360702e-12 7.14743361e-02 5.65493724e-02 9.12701769e-02 6.00717906e-02 2.43694619e-03 7.18197378e-01 3.12227392e+03 +3.56800000e-04 -1.65360702e-12 7.14729642e-02 5.65468422e-02 9.12717873e-02 6.00743711e-02 2.43665744e-03 7.18197378e-01 3.12227392e+03 +3.56900000e-04 -1.65360702e-12 7.14715957e-02 5.65443184e-02 9.12733936e-02 6.00769452e-02 2.43636941e-03 7.18197378e-01 3.12227392e+03 +3.57000000e-04 -1.65360702e-12 7.14702305e-02 5.65418008e-02 9.12749959e-02 6.00795128e-02 2.43608209e-03 7.18197378e-01 3.12227392e+03 +3.57100000e-04 -1.65360702e-12 7.14688688e-02 5.65392896e-02 9.12765942e-02 6.00820741e-02 2.43579548e-03 7.18197378e-01 3.12227392e+03 +3.57200000e-04 -1.65360702e-12 7.14675104e-02 5.65367846e-02 9.12781885e-02 6.00846291e-02 2.43550958e-03 7.18197378e-01 3.12227392e+03 +3.57300000e-04 -1.65360702e-12 7.14661553e-02 5.65342859e-02 9.12797788e-02 6.00871777e-02 2.43522440e-03 7.18197378e-01 3.12251787e+03 +3.57400000e-04 -1.65360702e-12 7.14648036e-02 5.65317935e-02 9.12813651e-02 6.00897200e-02 2.43493992e-03 7.18197378e-01 3.12251787e+03 +3.57500000e-04 -1.65360702e-12 7.14634552e-02 5.65293073e-02 9.12829475e-02 6.00922560e-02 2.43465615e-03 7.18197378e-01 3.12251787e+03 +3.57600000e-04 -1.65360702e-12 7.14621102e-02 5.65268273e-02 9.12845259e-02 6.00947857e-02 2.43437308e-03 7.18197378e-01 3.12251787e+03 +3.57700000e-04 -1.65360702e-12 7.14607685e-02 5.65243535e-02 9.12861004e-02 6.00973091e-02 2.43409072e-03 7.18197378e-01 3.12251787e+03 +3.57800000e-04 -1.65360702e-12 7.14594301e-02 5.65218859e-02 9.12876709e-02 6.00998262e-02 2.43380906e-03 7.18197378e-01 3.12251787e+03 +3.57900000e-04 -1.65360702e-12 7.14580950e-02 5.65194245e-02 9.12892375e-02 6.01023371e-02 2.43352809e-03 7.18197378e-01 3.12251787e+03 +3.58000000e-04 -1.65360702e-12 7.14567632e-02 5.65169692e-02 9.12908002e-02 6.01048417e-02 2.43324783e-03 7.18197378e-01 3.12251787e+03 +3.58100000e-04 -1.65360702e-12 7.14554347e-02 5.65145201e-02 9.12923589e-02 6.01073401e-02 2.43296826e-03 7.18197378e-01 3.12251787e+03 +3.58200000e-04 -1.65360702e-12 7.14541095e-02 5.65120771e-02 9.12939138e-02 6.01098324e-02 2.43268938e-03 7.18197378e-01 3.12251787e+03 +3.58300000e-04 -1.65360702e-12 7.14527876e-02 5.65096402e-02 9.12954648e-02 6.01123184e-02 2.43241120e-03 7.18197378e-01 3.12251787e+03 +3.58400000e-04 -1.65360702e-12 7.14514689e-02 5.65072094e-02 9.12970119e-02 6.01147982e-02 2.43213371e-03 7.18197378e-01 3.12251787e+03 +3.58500000e-04 -1.65360702e-12 7.14501535e-02 5.65047847e-02 9.12985551e-02 6.01172719e-02 2.43185690e-03 7.18197378e-01 3.12251787e+03 +3.58600000e-04 -1.65360702e-12 7.14488413e-02 5.65023661e-02 9.13000944e-02 6.01197395e-02 2.43158079e-03 7.18197378e-01 3.12251787e+03 +3.58700000e-04 -1.65360702e-12 7.14475324e-02 5.64999536e-02 9.13016299e-02 6.01222009e-02 2.43130536e-03 7.18197378e-01 3.12251787e+03 +3.58800000e-04 -1.65360702e-12 7.14462267e-02 5.64975470e-02 9.13031616e-02 6.01246562e-02 2.43103062e-03 7.18197378e-01 3.12275278e+03 +3.58900000e-04 -1.65360702e-12 7.14449243e-02 5.64951465e-02 9.13046894e-02 6.01271054e-02 2.43075656e-03 7.18197378e-01 3.12275278e+03 +3.59000000e-04 -1.65360702e-12 7.14436250e-02 5.64927520e-02 9.13062134e-02 6.01295485e-02 2.43048318e-03 7.18197378e-01 3.12275278e+03 +3.59100000e-04 -1.65360702e-12 7.14423290e-02 5.64903635e-02 9.13077336e-02 6.01319855e-02 2.43021048e-03 7.18197378e-01 3.12275278e+03 +3.59200000e-04 -1.65360702e-12 7.14410362e-02 5.64879810e-02 9.13092500e-02 6.01344165e-02 2.42993845e-03 7.18197378e-01 3.12275278e+03 +3.59300000e-04 -1.65360702e-12 7.14397466e-02 5.64856045e-02 9.13107625e-02 6.01368415e-02 2.42966711e-03 7.18197378e-01 3.12275278e+03 +3.59400000e-04 -1.65360702e-12 7.14384602e-02 5.64832339e-02 9.13122713e-02 6.01392604e-02 2.42939644e-03 7.18197378e-01 3.12275278e+03 +3.59500000e-04 -1.65360702e-12 7.14371769e-02 5.64808692e-02 9.13137763e-02 6.01416733e-02 2.42912644e-03 7.18197378e-01 3.12275278e+03 +3.59600000e-04 -1.65360702e-12 7.14358969e-02 5.64785104e-02 9.13152776e-02 6.01440802e-02 2.42885711e-03 7.18197378e-01 3.12275278e+03 +3.59700000e-04 -1.65360702e-12 7.14346200e-02 5.64761576e-02 9.13167751e-02 6.01464811e-02 2.42858845e-03 7.18197378e-01 3.12275278e+03 +3.59800000e-04 -1.65360702e-12 7.14333462e-02 5.64738107e-02 9.13182688e-02 6.01488760e-02 2.42832046e-03 7.18197378e-01 3.12275278e+03 +3.59900000e-04 -1.65360702e-12 7.14320756e-02 5.64714696e-02 9.13197588e-02 6.01512650e-02 2.42805314e-03 7.18197378e-01 3.12275278e+03 +3.60000000e-04 -1.65360702e-12 7.14308082e-02 5.64691344e-02 9.13212450e-02 6.01536480e-02 2.42778648e-03 7.18197378e-01 3.12275278e+03 +3.60100000e-04 -1.65360702e-12 7.14295439e-02 5.64668051e-02 9.13227276e-02 6.01560252e-02 2.42752048e-03 7.18197378e-01 3.12275278e+03 +3.60200000e-04 -1.65360702e-12 7.14282827e-02 5.64644816e-02 9.13242064e-02 6.01583964e-02 2.42725515e-03 7.18197378e-01 3.12275278e+03 +3.60300000e-04 -1.65360702e-12 7.14270247e-02 5.64621639e-02 9.13256815e-02 6.01607617e-02 2.42699048e-03 7.18197378e-01 3.12275278e+03 +3.60400000e-04 -1.65360702e-12 7.14257697e-02 5.64598520e-02 9.13271529e-02 6.01631211e-02 2.42672646e-03 7.18197378e-01 3.12309235e+03 +3.60500000e-04 -1.65360702e-12 7.14245179e-02 5.64575459e-02 9.13286206e-02 6.01654746e-02 2.42646310e-03 7.18197378e-01 3.12309235e+03 +3.60600000e-04 -1.65360702e-12 7.14232692e-02 5.64552456e-02 9.13300847e-02 6.01678223e-02 2.42620040e-03 7.18197378e-01 3.12309235e+03 +3.60700000e-04 -1.65360702e-12 7.14220235e-02 5.64529510e-02 9.13315451e-02 6.01701642e-02 2.42593835e-03 7.18197378e-01 3.12309235e+03 +3.60800000e-04 -1.65360702e-12 7.14207810e-02 5.64506623e-02 9.13330018e-02 6.01725002e-02 2.42567696e-03 7.18197378e-01 3.12309235e+03 +3.60900000e-04 -1.65360702e-12 7.14195415e-02 5.64483792e-02 9.13344549e-02 6.01748304e-02 2.42541621e-03 7.18197378e-01 3.12309235e+03 +3.61000000e-04 -1.65360702e-12 7.14183051e-02 5.64461019e-02 9.13359043e-02 6.01771548e-02 2.42515611e-03 7.18197378e-01 3.12309235e+03 +3.61100000e-04 -1.65360702e-12 7.14170718e-02 5.64438302e-02 9.13373501e-02 6.01794734e-02 2.42489666e-03 7.18197378e-01 3.12309235e+03 +3.61200000e-04 -1.65360702e-12 7.14158415e-02 5.64415643e-02 9.13387923e-02 6.01817863e-02 2.42463786e-03 7.18197378e-01 3.12309235e+03 +3.61300000e-04 -1.65360702e-12 7.14146142e-02 5.64393040e-02 9.13402308e-02 6.01840934e-02 2.42437970e-03 7.18197378e-01 3.12309235e+03 +3.61400000e-04 -1.65360702e-12 7.14133900e-02 5.64370495e-02 9.13416658e-02 6.01863947e-02 2.42412218e-03 7.18197378e-01 3.12309235e+03 +3.61500000e-04 -1.65360702e-12 7.14121689e-02 5.64348005e-02 9.13430971e-02 6.01886903e-02 2.42386531e-03 7.18197378e-01 3.12309235e+03 +3.61600000e-04 -1.65360702e-12 7.14109508e-02 5.64325572e-02 9.13445249e-02 6.01909802e-02 2.42360907e-03 7.18197378e-01 3.12309235e+03 +3.61700000e-04 -1.65360702e-12 7.14097356e-02 5.64303196e-02 9.13459491e-02 6.01932644e-02 2.42335347e-03 7.18197378e-01 3.12309235e+03 +3.61800000e-04 -1.65360702e-12 7.14085235e-02 5.64280875e-02 9.13473697e-02 6.01955429e-02 2.42309851e-03 7.18197378e-01 3.12309235e+03 +3.61900000e-04 -1.65360702e-12 7.14073144e-02 5.64258610e-02 9.13487867e-02 6.01978158e-02 2.42284418e-03 7.18197378e-01 3.12309235e+03 +3.62000000e-04 -1.65360702e-12 7.14061083e-02 5.64236402e-02 9.13502002e-02 6.02000829e-02 2.42259049e-03 7.18197378e-01 3.12309235e+03 +3.62100000e-04 -1.65360702e-12 7.14049052e-02 5.64214249e-02 9.13516102e-02 6.02023445e-02 2.42233743e-03 7.18197378e-01 3.12309235e+03 +3.62200000e-04 -1.65360702e-12 7.14037051e-02 5.64192151e-02 9.13530166e-02 6.02046004e-02 2.42208500e-03 7.18197378e-01 3.12309235e+03 +3.62300000e-04 -1.65360702e-12 7.14025080e-02 5.64170109e-02 9.13544195e-02 6.02068506e-02 2.42183320e-03 7.18197378e-01 3.12309235e+03 +3.62400000e-04 -1.65360702e-12 7.14013138e-02 5.64148122e-02 9.13558188e-02 6.02090953e-02 2.42158202e-03 7.18197378e-01 3.12309235e+03 +3.62500000e-04 -1.65360702e-12 7.14001226e-02 5.64126191e-02 9.13572147e-02 6.02113344e-02 2.42133147e-03 7.18197378e-01 3.12309235e+03 +3.62600000e-04 -1.65360702e-12 7.13989343e-02 5.64104314e-02 9.13586070e-02 6.02135679e-02 2.42108155e-03 7.18197378e-01 3.12309235e+03 +3.62700000e-04 -1.65360702e-12 7.13977490e-02 5.64082492e-02 9.13599959e-02 6.02157958e-02 2.42083225e-03 7.18197378e-01 3.12341299e+03 +3.62800000e-04 -1.65360702e-12 7.13965666e-02 5.64060725e-02 9.13613813e-02 6.02180182e-02 2.42058357e-03 7.18197378e-01 3.12341299e+03 +3.62900000e-04 -1.65360702e-12 7.13953872e-02 5.64039013e-02 9.13627632e-02 6.02202350e-02 2.42033551e-03 7.18197378e-01 3.12341299e+03 +3.63000000e-04 -1.65360702e-12 7.13942106e-02 5.64017355e-02 9.13641416e-02 6.02224463e-02 2.42008806e-03 7.18197378e-01 3.12341299e+03 +3.63100000e-04 -1.65360702e-12 7.13930370e-02 5.63995751e-02 9.13655166e-02 6.02246521e-02 2.41984124e-03 7.18197378e-01 3.12341299e+03 +3.63200000e-04 -1.65360702e-12 7.13918664e-02 5.63974202e-02 9.13668881e-02 6.02268524e-02 2.41959503e-03 7.18197378e-01 3.12341299e+03 +3.63300000e-04 -1.65360702e-12 7.13906986e-02 5.63952707e-02 9.13682562e-02 6.02290472e-02 2.41934943e-03 7.18197378e-01 3.12341299e+03 +3.63400000e-04 -1.65360702e-12 7.13895337e-02 5.63931265e-02 9.13696209e-02 6.02312366e-02 2.41910445e-03 7.18197378e-01 3.12341299e+03 +3.63500000e-04 -1.65360702e-12 7.13883717e-02 5.63909878e-02 9.13709821e-02 6.02334205e-02 2.41886008e-03 7.18197378e-01 3.12341299e+03 +3.63600000e-04 -1.65360702e-12 7.13872126e-02 5.63888544e-02 9.13723399e-02 6.02355989e-02 2.41861631e-03 7.18197378e-01 3.12341299e+03 +3.63700000e-04 -1.65360702e-12 7.13860564e-02 5.63867264e-02 9.13736943e-02 6.02377719e-02 2.41837316e-03 7.18197378e-01 3.12341299e+03 +3.63800000e-04 -1.65360702e-12 7.13849030e-02 5.63846037e-02 9.13750453e-02 6.02399395e-02 2.41813061e-03 7.18197378e-01 3.12341299e+03 +3.63900000e-04 -1.65360702e-12 7.13837525e-02 5.63824863e-02 9.13763929e-02 6.02421017e-02 2.41788866e-03 7.18197378e-01 3.12341299e+03 +3.64000000e-04 -1.65360702e-12 7.13826049e-02 5.63803743e-02 9.13777371e-02 6.02442585e-02 2.41764732e-03 7.18197378e-01 3.12341299e+03 +3.64100000e-04 -1.65360702e-12 7.13814601e-02 5.63782675e-02 9.13790780e-02 6.02464099e-02 2.41740658e-03 7.18197378e-01 3.12341299e+03 +3.64200000e-04 -1.65360702e-12 7.13803182e-02 5.63761661e-02 9.13804155e-02 6.02485559e-02 2.41716644e-03 7.18197378e-01 3.12341299e+03 +3.64300000e-04 -1.65360702e-12 7.13791791e-02 5.63740699e-02 9.13817496e-02 6.02506966e-02 2.41692690e-03 7.18197378e-01 3.12341299e+03 +3.64400000e-04 -1.65360702e-12 7.13780428e-02 5.63719790e-02 9.13830804e-02 6.02528320e-02 2.41668796e-03 7.18197378e-01 3.12341299e+03 +3.64500000e-04 -1.65360702e-12 7.13769094e-02 5.63698933e-02 9.13844078e-02 6.02549620e-02 2.41644961e-03 7.18197378e-01 3.12341299e+03 +3.64600000e-04 -1.65360702e-12 7.13757787e-02 5.63678129e-02 9.13857319e-02 6.02570867e-02 2.41621186e-03 7.18197378e-01 3.12341299e+03 +3.64700000e-04 -1.65360702e-12 7.13746509e-02 5.63657377e-02 9.13870527e-02 6.02592061e-02 2.41597470e-03 7.18197378e-01 3.12341299e+03 +3.64800000e-04 -1.65360702e-12 7.13735259e-02 5.63636677e-02 9.13883702e-02 6.02613202e-02 2.41573814e-03 7.18197378e-01 3.12341299e+03 +3.64900000e-04 -1.65360702e-12 7.13724036e-02 5.63616029e-02 9.13896843e-02 6.02634291e-02 2.41550216e-03 7.18197378e-01 3.12341299e+03 +3.65000000e-04 -1.65360702e-12 7.13712842e-02 5.63595433e-02 9.13909952e-02 6.02655327e-02 2.41526678e-03 7.18197378e-01 3.12371571e+03 +3.65100000e-04 -1.65360702e-12 7.13701675e-02 5.63574889e-02 9.13923027e-02 6.02676310e-02 2.41503198e-03 7.18197378e-01 3.12371571e+03 +3.65200000e-04 -1.65360702e-12 7.13690537e-02 5.63554396e-02 9.13936070e-02 6.02697241e-02 2.41479776e-03 7.18197378e-01 3.12371571e+03 +3.65300000e-04 -1.65360702e-12 7.13679426e-02 5.63533955e-02 9.13949080e-02 6.02718119e-02 2.41456413e-03 7.18197378e-01 3.12371571e+03 +3.65400000e-04 -1.65360702e-12 7.13668342e-02 5.63513565e-02 9.13962057e-02 6.02738946e-02 2.41433109e-03 7.18197378e-01 3.12371571e+03 +3.65500000e-04 -1.65360702e-12 7.13657286e-02 5.63493227e-02 9.13975002e-02 6.02759721e-02 2.41409862e-03 7.18197378e-01 3.12371571e+03 +3.65600000e-04 -1.65360702e-12 7.13646258e-02 5.63472939e-02 9.13987914e-02 6.02780443e-02 2.41386674e-03 7.18197378e-01 3.12371571e+03 +3.65700000e-04 -1.65360702e-12 7.13635257e-02 5.63452703e-02 9.14000794e-02 6.02801114e-02 2.41363544e-03 7.18197378e-01 3.12371571e+03 +3.65800000e-04 -1.65360702e-12 7.13624283e-02 5.63432517e-02 9.14013641e-02 6.02821733e-02 2.41340471e-03 7.18197378e-01 3.12371571e+03 +3.65900000e-04 -1.65360702e-12 7.13613336e-02 5.63412382e-02 9.14026456e-02 6.02842301e-02 2.41317456e-03 7.18197378e-01 3.12371571e+03 +3.66000000e-04 -1.65360702e-12 7.13602417e-02 5.63392298e-02 9.14039239e-02 6.02862818e-02 2.41294498e-03 7.18197378e-01 3.12371571e+03 +3.66100000e-04 -1.65360702e-12 7.13591525e-02 5.63372264e-02 9.14051990e-02 6.02883283e-02 2.41271598e-03 7.18197378e-01 3.12371571e+03 +3.66200000e-04 -1.65360702e-12 7.13580660e-02 5.63352280e-02 9.14064709e-02 6.02903697e-02 2.41248755e-03 7.18197378e-01 3.12371571e+03 +3.66300000e-04 -1.65360702e-12 7.13569822e-02 5.63332347e-02 9.14077395e-02 6.02924060e-02 2.41225969e-03 7.18197378e-01 3.12371571e+03 +3.66400000e-04 -1.65360702e-12 7.13559012e-02 5.63312463e-02 9.14090050e-02 6.02944372e-02 2.41203240e-03 7.18197378e-01 3.12371571e+03 +3.66500000e-04 -1.65360702e-12 7.13548227e-02 5.63292630e-02 9.14102673e-02 6.02964634e-02 2.41180568e-03 7.18197378e-01 3.12371571e+03 +3.66600000e-04 -1.65360702e-12 7.13537470e-02 5.63272847e-02 9.14115265e-02 6.02984845e-02 2.41157952e-03 7.18197378e-01 3.12371571e+03 +3.66700000e-04 -1.65360702e-12 7.13526740e-02 5.63253113e-02 9.14127824e-02 6.03005005e-02 2.41135393e-03 7.18197378e-01 3.12371571e+03 +3.66800000e-04 -1.65360702e-12 7.13516036e-02 5.63233429e-02 9.14140352e-02 6.03025115e-02 2.41112890e-03 7.18197378e-01 3.12371571e+03 +3.66900000e-04 -1.65360702e-12 7.13505359e-02 5.63213794e-02 9.14152849e-02 6.03045175e-02 2.41090444e-03 7.18197378e-01 3.12371571e+03 +3.67000000e-04 -1.65360702e-12 7.13494708e-02 5.63194209e-02 9.14165314e-02 6.03065184e-02 2.41068053e-03 7.18197378e-01 3.12371571e+03 +3.67100000e-04 -1.65360702e-12 7.13484084e-02 5.63174673e-02 9.14177748e-02 6.03085144e-02 2.41045719e-03 7.18197378e-01 3.12371571e+03 +3.67200000e-04 -1.65360702e-12 7.13473487e-02 5.63155186e-02 9.14190151e-02 6.03105054e-02 2.41023440e-03 7.18197378e-01 3.12371571e+03 +3.67300000e-04 -1.65360702e-12 7.13462916e-02 5.63135748e-02 9.14202522e-02 6.03124914e-02 2.41001217e-03 7.18197378e-01 3.12400148e+03 +3.67400000e-04 -1.65360702e-12 7.13452371e-02 5.63116359e-02 9.14214862e-02 6.03144724e-02 2.40979050e-03 7.18197378e-01 3.12400148e+03 +3.67500000e-04 -1.65360702e-12 7.13441852e-02 5.63097019e-02 9.14227172e-02 6.03164485e-02 2.40956938e-03 7.18197378e-01 3.12400148e+03 +3.67600000e-04 -1.65360702e-12 7.13431360e-02 5.63077727e-02 9.14239450e-02 6.03184196e-02 2.40934881e-03 7.18197378e-01 3.12400148e+03 +3.67700000e-04 -1.65360702e-12 7.13420893e-02 5.63058484e-02 9.14251697e-02 6.03203858e-02 2.40912879e-03 7.18197378e-01 3.12400148e+03 +3.67800000e-04 -1.65360702e-12 7.13410453e-02 5.63039290e-02 9.14263914e-02 6.03223471e-02 2.40890933e-03 7.18197378e-01 3.12400148e+03 +3.67900000e-04 -1.65360702e-12 7.13400039e-02 5.63020143e-02 9.14276100e-02 6.03243035e-02 2.40869041e-03 7.18197378e-01 3.12400148e+03 +3.68000000e-04 -1.65360702e-12 7.13389651e-02 5.63001045e-02 9.14288255e-02 6.03262550e-02 2.40847204e-03 7.18197378e-01 3.12400148e+03 +3.68100000e-04 -1.65360702e-12 7.13379288e-02 5.62981995e-02 9.14300380e-02 6.03282017e-02 2.40825422e-03 7.18197378e-01 3.12400148e+03 +3.68200000e-04 -1.65360702e-12 7.13368952e-02 5.62962992e-02 9.14312474e-02 6.03301434e-02 2.40803694e-03 7.18197378e-01 3.12400148e+03 +3.68300000e-04 -1.65360702e-12 7.13358641e-02 5.62944038e-02 9.14324538e-02 6.03320803e-02 2.40782020e-03 7.18197378e-01 3.12400148e+03 +3.68400000e-04 -1.65360702e-12 7.13348356e-02 5.62925131e-02 9.14336571e-02 6.03340124e-02 2.40760401e-03 7.18197378e-01 3.12400148e+03 +3.68500000e-04 -1.65360702e-12 7.13338096e-02 5.62906272e-02 9.14348574e-02 6.03359396e-02 2.40738836e-03 7.18197378e-01 3.12400148e+03 +3.68600000e-04 -1.65360702e-12 7.13327862e-02 5.62887460e-02 9.14360547e-02 6.03378620e-02 2.40717324e-03 7.18197378e-01 3.12400148e+03 +3.68700000e-04 -1.65360702e-12 7.13317654e-02 5.62868695e-02 9.14372490e-02 6.03397796e-02 2.40695867e-03 7.18197378e-01 3.12400148e+03 +3.68800000e-04 -1.65360702e-12 7.13307471e-02 5.62849978e-02 9.14384403e-02 6.03416924e-02 2.40674463e-03 7.18197378e-01 3.12400148e+03 +3.68900000e-04 -1.65360702e-12 7.13297313e-02 5.62831308e-02 9.14396286e-02 6.03436004e-02 2.40653113e-03 7.18197378e-01 3.12400148e+03 +3.69000000e-04 -1.65360702e-12 7.13287181e-02 5.62812685e-02 9.14408139e-02 6.03455036e-02 2.40631816e-03 7.18197378e-01 3.12400148e+03 +3.69100000e-04 -1.65360702e-12 7.13277073e-02 5.62794108e-02 9.14419962e-02 6.03474021e-02 2.40610572e-03 7.18197378e-01 3.12400148e+03 +3.69200000e-04 -1.65360702e-12 7.13266992e-02 5.62775579e-02 9.14431755e-02 6.03492958e-02 2.40589382e-03 7.18197378e-01 3.12400148e+03 +3.69300000e-04 -1.65360702e-12 7.13256935e-02 5.62757096e-02 9.14443519e-02 6.03511848e-02 2.40568244e-03 7.18197378e-01 3.12400148e+03 +3.69400000e-04 -1.65360702e-12 7.13246903e-02 5.62738659e-02 9.14455253e-02 6.03530691e-02 2.40547160e-03 7.18197378e-01 3.12400148e+03 +3.69500000e-04 -1.65360702e-12 7.13236896e-02 5.62720269e-02 9.14466957e-02 6.03549486e-02 2.40526128e-03 7.18197378e-01 3.12400148e+03 +3.69600000e-04 -1.65360702e-12 7.13226915e-02 5.62701926e-02 9.14478632e-02 6.03568234e-02 2.40505149e-03 7.18197378e-01 3.12427124e+03 +3.69700000e-04 -1.65360702e-12 7.13216958e-02 5.62683628e-02 9.14490278e-02 6.03586936e-02 2.40484222e-03 7.18197378e-01 3.12427124e+03 +3.69800000e-04 -1.65360702e-12 7.13207026e-02 5.62665377e-02 9.14501894e-02 6.03605590e-02 2.40463348e-03 7.18197378e-01 3.12427124e+03 +3.69900000e-04 -1.65360702e-12 7.13197119e-02 5.62647171e-02 9.14513481e-02 6.03624198e-02 2.40442526e-03 7.18197378e-01 3.12427124e+03 +3.70000000e-04 -1.65360702e-12 7.13187236e-02 5.62629011e-02 9.14525039e-02 6.03642760e-02 2.40421756e-03 7.18197378e-01 3.12427124e+03 +3.70100000e-04 -1.65360702e-12 7.13177378e-02 5.62610897e-02 9.14536568e-02 6.03661275e-02 2.40401038e-03 7.18197378e-01 3.12427124e+03 +3.70200000e-04 -1.65360702e-12 7.13167545e-02 5.62592829e-02 9.14548068e-02 6.03679743e-02 2.40380372e-03 7.18197378e-01 3.12427124e+03 +3.70300000e-04 -1.65360702e-12 7.13157736e-02 5.62574806e-02 9.14559538e-02 6.03698165e-02 2.40359758e-03 7.18197378e-01 3.12427124e+03 +3.70400000e-04 -1.65360702e-12 7.13147952e-02 5.62556828e-02 9.14570980e-02 6.03716541e-02 2.40339196e-03 7.18197378e-01 3.12427124e+03 +3.70500000e-04 -1.65360702e-12 7.13138192e-02 5.62538896e-02 9.14582394e-02 6.03734872e-02 2.40318685e-03 7.18197378e-01 3.12427124e+03 +3.70600000e-04 -1.65360702e-12 7.13128456e-02 5.62521009e-02 9.14593778e-02 6.03753156e-02 2.40298225e-03 7.18197378e-01 3.12427124e+03 +3.70700000e-04 -1.65360702e-12 7.13118745e-02 5.62503167e-02 9.14605134e-02 6.03771394e-02 2.40277816e-03 7.18197378e-01 3.12427124e+03 +3.70800000e-04 -1.65360702e-12 7.13109058e-02 5.62485370e-02 9.14616461e-02 6.03789587e-02 2.40257459e-03 7.18197378e-01 3.12427124e+03 +3.70900000e-04 -1.65360702e-12 7.13099395e-02 5.62467617e-02 9.14627759e-02 6.03807734e-02 2.40237152e-03 7.18197378e-01 3.12427124e+03 +3.71000000e-04 -1.65360702e-12 7.13089756e-02 5.62449910e-02 9.14639030e-02 6.03825836e-02 2.40216897e-03 7.18197378e-01 3.12427124e+03 +3.71100000e-04 -1.65360702e-12 7.13080142e-02 5.62432247e-02 9.14650271e-02 6.03843892e-02 2.40196692e-03 7.18197378e-01 3.12427124e+03 +3.71200000e-04 -1.65360702e-12 7.13070551e-02 5.62414628e-02 9.14661485e-02 6.03861904e-02 2.40176538e-03 7.18197378e-01 3.12427124e+03 +3.71300000e-04 -1.65360702e-12 7.13060984e-02 5.62397054e-02 9.14672670e-02 6.03879870e-02 2.40156434e-03 7.18197378e-01 3.12427124e+03 +3.71400000e-04 -1.65360702e-12 7.13051441e-02 5.62379524e-02 9.14683827e-02 6.03897791e-02 2.40136381e-03 7.18197378e-01 3.12427124e+03 +3.71500000e-04 -1.65360702e-12 7.13041922e-02 5.62362038e-02 9.14694956e-02 6.03915667e-02 2.40116378e-03 7.18197378e-01 3.12427124e+03 +3.71600000e-04 -1.65360702e-12 7.13032427e-02 5.62344597e-02 9.14706057e-02 6.03933498e-02 2.40096425e-03 7.18197378e-01 3.12427124e+03 +3.71700000e-04 -1.65360702e-12 7.13022956e-02 5.62327199e-02 9.14717130e-02 6.03951285e-02 2.40076522e-03 7.18197378e-01 3.12427124e+03 +3.71800000e-04 -1.65360702e-12 7.13013508e-02 5.62309845e-02 9.14728175e-02 6.03969027e-02 2.40056669e-03 7.18197378e-01 3.12427124e+03 +3.71900000e-04 -1.65360702e-12 7.13004083e-02 5.62292535e-02 9.14739192e-02 6.03986724e-02 2.40036865e-03 7.18197378e-01 3.12452585e+03 +3.72000000e-04 -1.65360702e-12 7.12994683e-02 5.62275268e-02 9.14750182e-02 6.04004378e-02 2.40017112e-03 7.18197378e-01 3.12452585e+03 +3.72100000e-04 -1.65360702e-12 7.12985305e-02 5.62258045e-02 9.14761143e-02 6.04021987e-02 2.39997407e-03 7.18197378e-01 3.12452585e+03 +3.72200000e-04 -1.65360702e-12 7.12975951e-02 5.62240866e-02 9.14772077e-02 6.04039552e-02 2.39977753e-03 7.18197378e-01 3.12452585e+03 +3.72300000e-04 -1.65360702e-12 7.12966621e-02 5.62223729e-02 9.14782984e-02 6.04057073e-02 2.39958147e-03 7.18197378e-01 3.12452585e+03 +3.72400000e-04 -1.65360702e-12 7.12957314e-02 5.62206636e-02 9.14793863e-02 6.04074549e-02 2.39938591e-03 7.18197378e-01 3.12452585e+03 +3.72500000e-04 -1.65360702e-12 7.12948030e-02 5.62189586e-02 9.14804715e-02 6.04091983e-02 2.39919083e-03 7.18197378e-01 3.12452585e+03 +3.72600000e-04 -1.65360702e-12 7.12938769e-02 5.62172579e-02 9.14815539e-02 6.04109372e-02 2.39899625e-03 7.18197378e-01 3.12452585e+03 +3.72700000e-04 -1.65360702e-12 7.12929531e-02 5.62155615e-02 9.14826336e-02 6.04126718e-02 2.39880215e-03 7.18197378e-01 3.12452585e+03 +3.72800000e-04 -1.65360702e-12 7.12920317e-02 5.62138693e-02 9.14837106e-02 6.04144020e-02 2.39860854e-03 7.18197378e-01 3.12452585e+03 +3.72900000e-04 -1.65360702e-12 7.12911125e-02 5.62121814e-02 9.14847849e-02 6.04161279e-02 2.39841542e-03 7.18197378e-01 3.12452585e+03 +3.73000000e-04 -1.65360702e-12 7.12901957e-02 5.62104978e-02 9.14858564e-02 6.04178495e-02 2.39822278e-03 7.18197378e-01 3.12452585e+03 +3.73100000e-04 -1.65360702e-12 7.12892811e-02 5.62088184e-02 9.14869253e-02 6.04195667e-02 2.39803062e-03 7.18197378e-01 3.12452585e+03 +3.73200000e-04 -1.65360702e-12 7.12883688e-02 5.62071432e-02 9.14879915e-02 6.04212797e-02 2.39783894e-03 7.18197378e-01 3.12452585e+03 +3.73300000e-04 -1.65360702e-12 7.12874588e-02 5.62054723e-02 9.14890549e-02 6.04229883e-02 2.39764775e-03 7.18197378e-01 3.12452585e+03 +3.73400000e-04 -1.65360702e-12 7.12865511e-02 5.62038056e-02 9.14901157e-02 6.04246927e-02 2.39745703e-03 7.18197378e-01 3.12452585e+03 +3.73500000e-04 -1.65360702e-12 7.12856456e-02 5.62021431e-02 9.14911739e-02 6.04263928e-02 2.39726680e-03 7.18197378e-01 3.12452585e+03 +3.73600000e-04 -1.65360702e-12 7.12847425e-02 5.62004847e-02 9.14922293e-02 6.04280886e-02 2.39707704e-03 7.18197378e-01 3.12452585e+03 +3.73700000e-04 -1.65360702e-12 7.12838415e-02 5.61988306e-02 9.14932821e-02 6.04297802e-02 2.39688775e-03 7.18197378e-01 3.12452585e+03 +3.73800000e-04 -1.65360702e-12 7.12829428e-02 5.61971806e-02 9.14943323e-02 6.04314675e-02 2.39669894e-03 7.18197378e-01 3.12452585e+03 +3.73900000e-04 -1.65360702e-12 7.12820464e-02 5.61955348e-02 9.14953798e-02 6.04331506e-02 2.39651061e-03 7.18197378e-01 3.12452585e+03 +3.74000000e-04 -1.65360702e-12 7.12811522e-02 5.61938931e-02 9.14964246e-02 6.04348294e-02 2.39632274e-03 7.18197378e-01 3.12452585e+03 +3.74100000e-04 -1.65360702e-12 7.12802603e-02 5.61922556e-02 9.14974668e-02 6.04365041e-02 2.39613535e-03 7.18197378e-01 3.12452585e+03 +3.74200000e-04 -1.65360702e-12 7.12793705e-02 5.61906222e-02 9.14985064e-02 6.04381746e-02 2.39594843e-03 7.18197378e-01 3.12476614e+03 +3.74300000e-04 -1.65360702e-12 7.12784830e-02 5.61889929e-02 9.14995434e-02 6.04398408e-02 2.39576198e-03 7.18197378e-01 3.12476614e+03 +3.74400000e-04 -1.65360702e-12 7.12775977e-02 5.61873678e-02 9.15005777e-02 6.04415029e-02 2.39557600e-03 7.18197378e-01 3.12476614e+03 +3.74500000e-04 -1.65360702e-12 7.12767147e-02 5.61857467e-02 9.15016095e-02 6.04431608e-02 2.39539048e-03 7.18197378e-01 3.12476614e+03 +3.74600000e-04 -1.65360702e-12 7.12758338e-02 5.61841297e-02 9.15026386e-02 6.04448146e-02 2.39520543e-03 7.18197378e-01 3.12476614e+03 +3.74700000e-04 -1.65360702e-12 7.12749552e-02 5.61825168e-02 9.15036652e-02 6.04464642e-02 2.39502084e-03 7.18197378e-01 3.12476614e+03 +3.74800000e-04 -1.65360702e-12 7.12740787e-02 5.61809080e-02 9.15046891e-02 6.04481096e-02 2.39483671e-03 7.18197378e-01 3.12476614e+03 +3.74900000e-04 -1.65360702e-12 7.12732044e-02 5.61793032e-02 9.15057105e-02 6.04497510e-02 2.39465305e-03 7.18197378e-01 3.12476614e+03 +3.75000000e-04 -1.65360702e-12 7.12723324e-02 5.61777025e-02 9.15067293e-02 6.04513882e-02 2.39446985e-03 7.18197378e-01 3.12476614e+03 +3.75100000e-04 -1.65360702e-12 7.12714625e-02 5.61761058e-02 9.15077455e-02 6.04530213e-02 2.39428711e-03 7.18197378e-01 3.12476614e+03 +3.75200000e-04 -1.65360702e-12 7.12705947e-02 5.61745131e-02 9.15087592e-02 6.04546503e-02 2.39410483e-03 7.18197378e-01 3.12476614e+03 +3.75300000e-04 -1.65360702e-12 7.12697292e-02 5.61729245e-02 9.15097703e-02 6.04562752e-02 2.39392300e-03 7.18197378e-01 3.12476614e+03 +3.75400000e-04 -1.65360702e-12 7.12688658e-02 5.61713399e-02 9.15107788e-02 6.04578960e-02 2.39374163e-03 7.18197378e-01 3.12476614e+03 +3.75500000e-04 -1.65360702e-12 7.12680046e-02 5.61697592e-02 9.15117848e-02 6.04595128e-02 2.39356072e-03 7.18197378e-01 3.12476614e+03 +3.75600000e-04 -1.65360702e-12 7.12671455e-02 5.61681826e-02 9.15127883e-02 6.04611255e-02 2.39338026e-03 7.18197378e-01 3.12476614e+03 +3.75700000e-04 -1.65360702e-12 7.12662886e-02 5.61666099e-02 9.15137892e-02 6.04627341e-02 2.39320026e-03 7.18197378e-01 3.12476614e+03 +3.75800000e-04 -1.65360702e-12 7.12654338e-02 5.61650412e-02 9.15147877e-02 6.04643387e-02 2.39302070e-03 7.18197378e-01 3.12476614e+03 +3.75900000e-04 -1.65360702e-12 7.12645812e-02 5.61634765e-02 9.15157835e-02 6.04659393e-02 2.39284160e-03 7.18197378e-01 3.12476614e+03 +3.76000000e-04 -1.65360702e-12 7.12637307e-02 5.61619157e-02 9.15167769e-02 6.04675359e-02 2.39266295e-03 7.18197378e-01 3.12476614e+03 +3.76100000e-04 -1.65360702e-12 7.12628823e-02 5.61603588e-02 9.15177678e-02 6.04691284e-02 2.39248474e-03 7.18197378e-01 3.12476614e+03 +3.76200000e-04 -1.65360702e-12 7.12620361e-02 5.61588059e-02 9.15187562e-02 6.04707170e-02 2.39230699e-03 7.18197378e-01 3.12476614e+03 +3.76300000e-04 -1.65360702e-12 7.12611920e-02 5.61572569e-02 9.15197421e-02 6.04723016e-02 2.39212968e-03 7.18197378e-01 3.12476614e+03 +3.76400000e-04 -1.65360702e-12 7.12603500e-02 5.61557118e-02 9.15207254e-02 6.04738822e-02 2.39195281e-03 7.18197378e-01 3.12476614e+03 +3.76500000e-04 -1.65360702e-12 7.12595101e-02 5.61541706e-02 9.15217064e-02 6.04754588e-02 2.39177639e-03 7.18197378e-01 3.12476614e+03 +3.76600000e-04 -1.65360702e-12 7.12586723e-02 5.61526333e-02 9.15226848e-02 6.04770314e-02 2.39160041e-03 7.18197378e-01 3.12499291e+03 +3.76700000e-04 -1.65360702e-12 7.12578366e-02 5.61510998e-02 9.15236608e-02 6.04786001e-02 2.39142488e-03 7.18197378e-01 3.12499291e+03 +3.76800000e-04 -1.65360702e-12 7.12570030e-02 5.61495703e-02 9.15246343e-02 6.04801649e-02 2.39124979e-03 7.18197378e-01 3.12499291e+03 +3.76900000e-04 -1.65360702e-12 7.12561714e-02 5.61480446e-02 9.15256053e-02 6.04817257e-02 2.39107513e-03 7.18197378e-01 3.12499291e+03 +3.77000000e-04 -1.65360702e-12 7.12553420e-02 5.61465227e-02 9.15265739e-02 6.04832826e-02 2.39090092e-03 7.18197378e-01 3.12499291e+03 +3.77100000e-04 -1.65360702e-12 7.12545146e-02 5.61450047e-02 9.15275400e-02 6.04848356e-02 2.39072714e-03 7.18197378e-01 3.12499291e+03 +3.77200000e-04 -1.65360702e-12 7.12536893e-02 5.61434906e-02 9.15285037e-02 6.04863847e-02 2.39055380e-03 7.18197378e-01 3.12499291e+03 +3.77300000e-04 -1.65360702e-12 7.12528661e-02 5.61419802e-02 9.15294650e-02 6.04879299e-02 2.39038089e-03 7.18197378e-01 3.12499291e+03 +3.77400000e-04 -1.65360702e-12 7.12520450e-02 5.61404737e-02 9.15304239e-02 6.04894712e-02 2.39020842e-03 7.18197378e-01 3.12499291e+03 +3.77500000e-04 -1.65360702e-12 7.12512259e-02 5.61389710e-02 9.15313803e-02 6.04910087e-02 2.39003638e-03 7.18197378e-01 3.12499291e+03 +3.77600000e-04 -1.65360702e-12 7.12504088e-02 5.61374720e-02 9.15323343e-02 6.04925422e-02 2.38986478e-03 7.18197378e-01 3.12499291e+03 +3.77700000e-04 -1.65360702e-12 7.12495938e-02 5.61359769e-02 9.15332859e-02 6.04940720e-02 2.38969360e-03 7.18197378e-01 3.12499291e+03 +3.77800000e-04 -1.65360702e-12 7.12487809e-02 5.61344855e-02 9.15342351e-02 6.04955978e-02 2.38952286e-03 7.18197378e-01 3.12499291e+03 +3.77900000e-04 -1.65360702e-12 7.12479699e-02 5.61329979e-02 9.15351819e-02 6.04971199e-02 2.38935255e-03 7.18197378e-01 3.12499291e+03 +3.78000000e-04 -1.65360702e-12 7.12471610e-02 5.61315140e-02 9.15361263e-02 6.04986381e-02 2.38918266e-03 7.18197378e-01 3.12499291e+03 +3.78100000e-04 -1.65360702e-12 7.12463542e-02 5.61300339e-02 9.15370683e-02 6.05001525e-02 2.38901320e-03 7.18197378e-01 3.12499291e+03 +3.78200000e-04 -1.65360702e-12 7.12455493e-02 5.61285576e-02 9.15380080e-02 6.05016631e-02 2.38884417e-03 7.18197378e-01 3.12499291e+03 +3.78300000e-04 -1.65360702e-12 7.12447465e-02 5.61270849e-02 9.15389452e-02 6.05031699e-02 2.38867556e-03 7.18197378e-01 3.12499291e+03 +3.78400000e-04 -1.65360702e-12 7.12439457e-02 5.61256160e-02 9.15398802e-02 6.05046729e-02 2.38850738e-03 7.18197378e-01 3.12499291e+03 +3.78500000e-04 -1.65360702e-12 7.12431469e-02 5.61241508e-02 9.15408127e-02 6.05061721e-02 2.38833962e-03 7.18197378e-01 3.12499291e+03 +3.78600000e-04 -1.65360702e-12 7.12423501e-02 5.61226893e-02 9.15417429e-02 6.05076676e-02 2.38817228e-03 7.18197378e-01 3.12499291e+03 +3.78700000e-04 -1.65360702e-12 7.12415553e-02 5.61212315e-02 9.15426707e-02 6.05091593e-02 2.38800536e-03 7.18197378e-01 3.12499291e+03 +3.78800000e-04 -1.65360702e-12 7.12407625e-02 5.61197773e-02 9.15435962e-02 6.05106472e-02 2.38783886e-03 7.18197378e-01 3.12499291e+03 +3.78900000e-04 -1.65360702e-12 7.12399717e-02 5.61183269e-02 9.15445194e-02 6.05121314e-02 2.38767278e-03 7.18197378e-01 3.12520689e+03 +3.79000000e-04 -1.65360702e-12 7.12391828e-02 5.61168801e-02 9.15454402e-02 6.05136119e-02 2.38750712e-03 7.18197378e-01 3.12520689e+03 +3.79100000e-04 -1.65360702e-12 7.12383960e-02 5.61154369e-02 9.15463587e-02 6.05150887e-02 2.38734187e-03 7.18197378e-01 3.12520689e+03 +3.79200000e-04 -1.65360702e-12 7.12376111e-02 5.61139974e-02 9.15472749e-02 6.05165617e-02 2.38717704e-03 7.18197378e-01 3.12520689e+03 +3.79300000e-04 -1.65360702e-12 7.12368282e-02 5.61125616e-02 9.15481887e-02 6.05180310e-02 2.38701263e-03 7.18197378e-01 3.12520689e+03 +3.79400000e-04 -1.65360702e-12 7.12360472e-02 5.61111293e-02 9.15491003e-02 6.05194967e-02 2.38684862e-03 7.18197378e-01 3.12520689e+03 +3.79500000e-04 -1.65360702e-12 7.12352682e-02 5.61097007e-02 9.15500096e-02 6.05209586e-02 2.38668503e-03 7.18197378e-01 3.12520689e+03 +3.79600000e-04 -1.65360702e-12 7.12344912e-02 5.61082757e-02 9.15509165e-02 6.05224169e-02 2.38652186e-03 7.18197378e-01 3.12520689e+03 +3.79700000e-04 -1.65360702e-12 7.12337161e-02 5.61068543e-02 9.15518212e-02 6.05238715e-02 2.38635909e-03 7.18197378e-01 3.12520689e+03 +3.79800000e-04 -1.65360702e-12 7.12329429e-02 5.61054365e-02 9.15527236e-02 6.05253224e-02 2.38619673e-03 7.18197378e-01 3.12520689e+03 +3.79900000e-04 -1.65360702e-12 7.12321717e-02 5.61040223e-02 9.15536236e-02 6.05267697e-02 2.38603478e-03 7.18197378e-01 3.12520689e+03 +3.80000000e-04 -1.65360702e-12 7.12314025e-02 5.61026116e-02 9.15545215e-02 6.05282134e-02 2.38587324e-03 7.18197378e-01 3.12520689e+03 +3.80100000e-04 -1.65360702e-12 7.12306351e-02 5.61012045e-02 9.15554170e-02 6.05296534e-02 2.38571210e-03 7.18197378e-01 3.12520689e+03 +3.80200000e-04 -1.65360702e-12 7.12298697e-02 5.60998010e-02 9.15563103e-02 6.05310898e-02 2.38555137e-03 7.18197378e-01 3.12520689e+03 +3.80300000e-04 -1.65360702e-12 7.12291062e-02 5.60984010e-02 9.15572013e-02 6.05325225e-02 2.38539105e-03 7.18197378e-01 3.12520689e+03 +3.80400000e-04 -1.65360702e-12 7.12283446e-02 5.60970046e-02 9.15580901e-02 6.05339517e-02 2.38523113e-03 7.18197378e-01 3.12520689e+03 +3.80500000e-04 -1.65360702e-12 7.12275849e-02 5.60956117e-02 9.15589767e-02 6.05353773e-02 2.38507161e-03 7.18197378e-01 3.12520689e+03 +3.80600000e-04 -1.65360702e-12 7.12268272e-02 5.60942223e-02 9.15598610e-02 6.05367993e-02 2.38491249e-03 7.18197378e-01 3.12520689e+03 +3.80700000e-04 -1.65360702e-12 7.12260713e-02 5.60928364e-02 9.15607430e-02 6.05382177e-02 2.38475377e-03 7.18197378e-01 3.12520689e+03 +3.80800000e-04 -1.65360702e-12 7.12253173e-02 5.60914540e-02 9.15616228e-02 6.05396325e-02 2.38459545e-03 7.18197378e-01 3.12520689e+03 +3.80900000e-04 -1.65360702e-12 7.12245653e-02 5.60900751e-02 9.15625004e-02 6.05410438e-02 2.38443753e-03 7.18197378e-01 3.12520689e+03 +3.81000000e-04 -1.65360702e-12 7.12238151e-02 5.60886997e-02 9.15633758e-02 6.05424515e-02 2.38428001e-03 7.18197378e-01 3.12520689e+03 +3.81100000e-04 -1.65360702e-12 7.12230668e-02 5.60873278e-02 9.15642490e-02 6.05438557e-02 2.38412289e-03 7.18197378e-01 3.12520689e+03 +3.81200000e-04 -1.65360702e-12 7.12223203e-02 5.60859593e-02 9.15651200e-02 6.05452564e-02 2.38396616e-03 7.18197378e-01 3.12540880e+03 +3.81300000e-04 -1.65360702e-12 7.12215758e-02 5.60845943e-02 9.15659887e-02 6.05466535e-02 2.38380982e-03 7.18197378e-01 3.12540880e+03 +3.81400000e-04 -1.65360702e-12 7.12208331e-02 5.60832328e-02 9.15668553e-02 6.05480471e-02 2.38365388e-03 7.18197378e-01 3.12540880e+03 +3.81500000e-04 -1.65360702e-12 7.12200923e-02 5.60818747e-02 9.15677197e-02 6.05494372e-02 2.38349833e-03 7.18197378e-01 3.12540880e+03 +3.81600000e-04 -1.65360702e-12 7.12193533e-02 5.60805200e-02 9.15685819e-02 6.05508238e-02 2.38334317e-03 7.18197378e-01 3.12540880e+03 +3.81700000e-04 -1.65360702e-12 7.12186162e-02 5.60791688e-02 9.15694419e-02 6.05522069e-02 2.38318841e-03 7.18197378e-01 3.12540880e+03 +3.81800000e-04 -1.65360702e-12 7.12178810e-02 5.60778209e-02 9.15702997e-02 6.05535865e-02 2.38303403e-03 7.18197378e-01 3.12540880e+03 +3.81900000e-04 -1.65360702e-12 7.12171476e-02 5.60764765e-02 9.15711554e-02 6.05549626e-02 2.38288004e-03 7.18197378e-01 3.12540880e+03 +3.82000000e-04 -1.65360702e-12 7.12164160e-02 5.60751355e-02 9.15720089e-02 6.05563353e-02 2.38272644e-03 7.18197378e-01 3.12540880e+03 +3.82100000e-04 -1.65360702e-12 7.12156863e-02 5.60737979e-02 9.15728602e-02 6.05577045e-02 2.38257323e-03 7.18197378e-01 3.12540880e+03 +3.82200000e-04 -1.65360702e-12 7.12149584e-02 5.60724636e-02 9.15737094e-02 6.05590703e-02 2.38242040e-03 7.18197378e-01 3.12540880e+03 +3.82300000e-04 -1.65360702e-12 7.12142323e-02 5.60711327e-02 9.15745565e-02 6.05604326e-02 2.38226796e-03 7.18197378e-01 3.12540880e+03 +3.82400000e-04 -1.65360702e-12 7.12135081e-02 5.60698052e-02 9.15754014e-02 6.05617915e-02 2.38211590e-03 7.18197378e-01 3.12540880e+03 +3.82500000e-04 -1.65360702e-12 7.12127857e-02 5.60684811e-02 9.15762441e-02 6.05631470e-02 2.38196422e-03 7.18197378e-01 3.12540880e+03 +3.82600000e-04 -1.65360702e-12 7.12120651e-02 5.60671603e-02 9.15770848e-02 6.05644991e-02 2.38181293e-03 7.18197378e-01 3.12540880e+03 +3.82700000e-04 -1.65360702e-12 7.12113463e-02 5.60658428e-02 9.15779233e-02 6.05658477e-02 2.38166201e-03 7.18197378e-01 3.12540880e+03 +3.82800000e-04 -1.65360702e-12 7.12106293e-02 5.60645287e-02 9.15787597e-02 6.05671930e-02 2.38151148e-03 7.18197378e-01 3.12540880e+03 +3.82900000e-04 -1.65360702e-12 7.12099141e-02 5.60632179e-02 9.15795939e-02 6.05685349e-02 2.38136133e-03 7.18197378e-01 3.12540880e+03 +3.83000000e-04 -1.65360702e-12 7.12092007e-02 5.60619104e-02 9.15804261e-02 6.05698734e-02 2.38121155e-03 7.18197378e-01 3.12540880e+03 +3.83100000e-04 -1.65360702e-12 7.12084891e-02 5.60606062e-02 9.15812561e-02 6.05712085e-02 2.38106215e-03 7.18197378e-01 3.12540880e+03 +3.83200000e-04 -1.65360702e-12 7.12077793e-02 5.60593054e-02 9.15820841e-02 6.05725403e-02 2.38091313e-03 7.18197378e-01 3.12540880e+03 +3.83300000e-04 -1.65360702e-12 7.12070713e-02 5.60580078e-02 9.15829100e-02 6.05738687e-02 2.38076449e-03 7.18197378e-01 3.12540880e+03 +3.83400000e-04 -1.65360702e-12 7.12063650e-02 5.60567135e-02 9.15837337e-02 6.05751937e-02 2.38061622e-03 7.18197378e-01 3.12540880e+03 +3.83500000e-04 -1.65360702e-12 7.12056605e-02 5.60554224e-02 9.15845554e-02 6.05765154e-02 2.38046832e-03 7.18197378e-01 3.12559930e+03 +3.83600000e-04 -1.65360702e-12 7.12049578e-02 5.60541347e-02 9.15853750e-02 6.05778338e-02 2.38032079e-03 7.18197378e-01 3.12559930e+03 +3.83700000e-04 -1.65360702e-12 7.12042569e-02 5.60528502e-02 9.15861926e-02 6.05791489e-02 2.38017364e-03 7.18197378e-01 3.12559930e+03 +3.83800000e-04 -1.65360702e-12 7.12035577e-02 5.60515689e-02 9.15870080e-02 6.05804606e-02 2.38002686e-03 7.18197378e-01 3.12559930e+03 +3.83900000e-04 -1.65360702e-12 7.12028603e-02 5.60502909e-02 9.15878214e-02 6.05817691e-02 2.37988045e-03 7.18197378e-01 3.12559930e+03 +3.84000000e-04 -1.65360702e-12 7.12021647e-02 5.60490161e-02 9.15886328e-02 6.05830742e-02 2.37973440e-03 7.18197378e-01 3.12559930e+03 +3.84100000e-04 -1.65360702e-12 7.12014707e-02 5.60477445e-02 9.15894421e-02 6.05843761e-02 2.37958873e-03 7.18197378e-01 3.12559930e+03 +3.84200000e-04 -1.65360702e-12 7.12007786e-02 5.60464762e-02 9.15902493e-02 6.05856746e-02 2.37944342e-03 7.18197378e-01 3.12559930e+03 +3.84300000e-04 -1.65360702e-12 7.12000881e-02 5.60452111e-02 9.15910545e-02 6.05869699e-02 2.37929848e-03 7.18197378e-01 3.12559930e+03 +3.84400000e-04 -1.65360702e-12 7.11993994e-02 5.60439491e-02 9.15918577e-02 6.05882620e-02 2.37915390e-03 7.18197378e-01 3.12559930e+03 +3.84500000e-04 -1.65360702e-12 7.11987125e-02 5.60426904e-02 9.15926588e-02 6.05895507e-02 2.37900969e-03 7.18197378e-01 3.12559930e+03 +3.84600000e-04 -1.65360702e-12 7.11980272e-02 5.60414349e-02 9.15934579e-02 6.05908363e-02 2.37886584e-03 7.18197378e-01 3.12559930e+03 +3.84700000e-04 -1.65360702e-12 7.11973437e-02 5.60401825e-02 9.15942550e-02 6.05921186e-02 2.37872235e-03 7.18197378e-01 3.12559930e+03 +3.84800000e-04 -1.65360702e-12 7.11966619e-02 5.60389333e-02 9.15950501e-02 6.05933976e-02 2.37857923e-03 7.18197378e-01 3.12559930e+03 +3.84900000e-04 -1.65360702e-12 7.11959819e-02 5.60376873e-02 9.15958431e-02 6.05946734e-02 2.37843647e-03 7.18197378e-01 3.12559930e+03 +3.85000000e-04 -1.65360702e-12 7.11953035e-02 5.60364444e-02 9.15966342e-02 6.05959461e-02 2.37829406e-03 7.18197378e-01 3.12559930e+03 +3.85100000e-04 -1.65360702e-12 7.11946268e-02 5.60352046e-02 9.15974232e-02 6.05972155e-02 2.37815202e-03 7.18197378e-01 3.12559930e+03 +3.85200000e-04 -1.65360702e-12 7.11939519e-02 5.60339680e-02 9.15982103e-02 6.05984817e-02 2.37801033e-03 7.18197378e-01 3.12559930e+03 +3.85300000e-04 -1.65360702e-12 7.11932786e-02 5.60327346e-02 9.15989953e-02 6.05997447e-02 2.37786900e-03 7.18197378e-01 3.12559930e+03 +3.85400000e-04 -1.65360702e-12 7.11926070e-02 5.60315042e-02 9.15997784e-02 6.06010045e-02 2.37772803e-03 7.18197378e-01 3.12559930e+03 +3.85500000e-04 -1.65360702e-12 7.11919372e-02 5.60302770e-02 9.16005595e-02 6.06022612e-02 2.37758741e-03 7.18197378e-01 3.12559930e+03 +3.85600000e-04 -1.65360702e-12 7.11912690e-02 5.60290528e-02 9.16013386e-02 6.06035146e-02 2.37744715e-03 7.18197378e-01 3.12559930e+03 +3.85700000e-04 -1.65360702e-12 7.11906024e-02 5.60278318e-02 9.16021157e-02 6.06047649e-02 2.37730724e-03 7.18197378e-01 3.12559930e+03 +3.85800000e-04 -1.65360702e-12 7.11899376e-02 5.60266139e-02 9.16028909e-02 6.06060121e-02 2.37716769e-03 7.18197378e-01 3.12577903e+03 +3.85900000e-04 -1.65360702e-12 7.11892744e-02 5.60253990e-02 9.16036641e-02 6.06072561e-02 2.37702848e-03 7.18197378e-01 3.12577903e+03 +3.86000000e-04 -1.65360702e-12 7.11886129e-02 5.60241872e-02 9.16044353e-02 6.06084970e-02 2.37688963e-03 7.18197378e-01 3.12577903e+03 +3.86100000e-04 -1.65360702e-12 7.11879531e-02 5.60229785e-02 9.16052046e-02 6.06097348e-02 2.37675113e-03 7.18197378e-01 3.12577903e+03 +3.86200000e-04 -1.65360702e-12 7.11872949e-02 5.60217729e-02 9.16059720e-02 6.06109694e-02 2.37661298e-03 7.18197378e-01 3.12577903e+03 +3.86300000e-04 -1.65360702e-12 7.11866384e-02 5.60205703e-02 9.16067374e-02 6.06122009e-02 2.37647517e-03 7.18197378e-01 3.12577903e+03 +3.86400000e-04 -1.65360702e-12 7.11859836e-02 5.60193707e-02 9.16075008e-02 6.06134293e-02 2.37633772e-03 7.18197378e-01 3.12577903e+03 +3.86500000e-04 -1.65360702e-12 7.11853303e-02 5.60181742e-02 9.16082624e-02 6.06146546e-02 2.37620061e-03 7.18197378e-01 3.12577903e+03 +3.86600000e-04 -1.65360702e-12 7.11846788e-02 5.60169807e-02 9.16090220e-02 6.06158768e-02 2.37606384e-03 7.18197378e-01 3.12577903e+03 +3.86700000e-04 -1.65360702e-12 7.11840288e-02 5.60157903e-02 9.16097796e-02 6.06170960e-02 2.37592742e-03 7.18197378e-01 3.12577903e+03 +3.86800000e-04 -1.65360702e-12 7.11833805e-02 5.60146028e-02 9.16105354e-02 6.06183120e-02 2.37579135e-03 7.18197378e-01 3.12577903e+03 +3.86900000e-04 -1.65360702e-12 7.11827339e-02 5.60134184e-02 9.16112893e-02 6.06195250e-02 2.37565562e-03 7.18197378e-01 3.12577903e+03 +3.87000000e-04 -1.65360702e-12 7.11820889e-02 5.60122369e-02 9.16120412e-02 6.06207349e-02 2.37552023e-03 7.18197378e-01 3.12577903e+03 +3.87100000e-04 -1.65360702e-12 7.11814454e-02 5.60110585e-02 9.16127912e-02 6.06219418e-02 2.37538518e-03 7.18197378e-01 3.12577903e+03 +3.87200000e-04 -1.65360702e-12 7.11808036e-02 5.60098830e-02 9.16135394e-02 6.06231456e-02 2.37525047e-03 7.18197378e-01 3.12577903e+03 +3.87300000e-04 -1.65360702e-12 7.11801635e-02 5.60087105e-02 9.16142856e-02 6.06243464e-02 2.37511611e-03 7.18197378e-01 3.12577903e+03 +3.87400000e-04 -1.65360702e-12 7.11795249e-02 5.60075410e-02 9.16150299e-02 6.06255442e-02 2.37498208e-03 7.18197378e-01 3.12577903e+03 +3.87500000e-04 -1.65360702e-12 7.11788879e-02 5.60063745e-02 9.16157724e-02 6.06267389e-02 2.37484839e-03 7.18197378e-01 3.12577903e+03 +3.87600000e-04 -1.65360702e-12 7.11782526e-02 5.60052109e-02 9.16165130e-02 6.06279307e-02 2.37471504e-03 7.18197378e-01 3.12577903e+03 +3.87700000e-04 -1.65360702e-12 7.11776188e-02 5.60040502e-02 9.16172517e-02 6.06291194e-02 2.37458202e-03 7.18197378e-01 3.12577903e+03 +3.87800000e-04 -1.65360702e-12 7.11769867e-02 5.60028925e-02 9.16179885e-02 6.06303051e-02 2.37444934e-03 7.18197378e-01 3.12577903e+03 +3.87900000e-04 -1.65360702e-12 7.11763561e-02 5.60017377e-02 9.16187235e-02 6.06314878e-02 2.37431700e-03 7.18197378e-01 3.12577903e+03 +3.88000000e-04 -1.65360702e-12 7.11757271e-02 5.60005859e-02 9.16194566e-02 6.06326675e-02 2.37418499e-03 7.18197378e-01 3.12577903e+03 +3.88100000e-04 -1.65360702e-12 7.11750997e-02 5.59994369e-02 9.16201879e-02 6.06338443e-02 2.37405331e-03 7.18197378e-01 3.12594858e+03 +3.88200000e-04 -1.65360702e-12 7.11744739e-02 5.59982909e-02 9.16209173e-02 6.06350181e-02 2.37392197e-03 7.18197378e-01 3.12594858e+03 +3.88300000e-04 -1.65360702e-12 7.11738497e-02 5.59971478e-02 9.16216448e-02 6.06361889e-02 2.37379095e-03 7.18197378e-01 3.12594858e+03 +3.88400000e-04 -1.65360702e-12 7.11732270e-02 5.59960075e-02 9.16223705e-02 6.06373568e-02 2.37366027e-03 7.18197378e-01 3.12594858e+03 +3.88500000e-04 -1.65360702e-12 7.11726059e-02 5.59948702e-02 9.16230944e-02 6.06385217e-02 2.37352992e-03 7.18197378e-01 3.12594858e+03 +3.88600000e-04 -1.65360702e-12 7.11719864e-02 5.59937357e-02 9.16238164e-02 6.06396837e-02 2.37339989e-03 7.18197378e-01 3.12594858e+03 +3.88700000e-04 -1.65360702e-12 7.11713684e-02 5.59926042e-02 9.16245366e-02 6.06408427e-02 2.37327020e-03 7.18197378e-01 3.12594858e+03 +3.88800000e-04 -1.65360702e-12 7.11707520e-02 5.59914754e-02 9.16252550e-02 6.06419988e-02 2.37314083e-03 7.18197378e-01 3.12594858e+03 +3.88900000e-04 -1.65360702e-12 7.11701371e-02 5.59903496e-02 9.16259716e-02 6.06431520e-02 2.37301179e-03 7.18197378e-01 3.12594858e+03 +3.89000000e-04 -1.65360702e-12 7.11695238e-02 5.59892266e-02 9.16266863e-02 6.06443023e-02 2.37288308e-03 7.18197378e-01 3.12594858e+03 +3.89100000e-04 -1.65360702e-12 7.11689121e-02 5.59881064e-02 9.16273993e-02 6.06454497e-02 2.37275469e-03 7.18197378e-01 3.12594858e+03 +3.89200000e-04 -1.65360702e-12 7.11683018e-02 5.59869891e-02 9.16281104e-02 6.06465942e-02 2.37262662e-03 7.18197378e-01 3.12594858e+03 +3.89300000e-04 -1.65360702e-12 7.11676932e-02 5.59858746e-02 9.16288197e-02 6.06477358e-02 2.37249888e-03 7.18197378e-01 3.12594858e+03 +3.89400000e-04 -1.65360702e-12 7.11670860e-02 5.59847630e-02 9.16295272e-02 6.06488745e-02 2.37237146e-03 7.18197378e-01 3.12594858e+03 +3.89500000e-04 -1.65360702e-12 7.11664804e-02 5.59836541e-02 9.16302330e-02 6.06500103e-02 2.37224436e-03 7.18197378e-01 3.12594858e+03 +3.89600000e-04 -1.65360702e-12 7.11658763e-02 5.59825481e-02 9.16309369e-02 6.06511433e-02 2.37211758e-03 7.18197378e-01 3.12594858e+03 +3.89700000e-04 -1.65360702e-12 7.11652737e-02 5.59814448e-02 9.16316391e-02 6.06522734e-02 2.37199112e-03 7.18197378e-01 3.12594858e+03 +3.89800000e-04 -1.65360702e-12 7.11646726e-02 5.59803444e-02 9.16323395e-02 6.06534007e-02 2.37186499e-03 7.18197378e-01 3.12594858e+03 +3.89900000e-04 -1.65360702e-12 7.11640731e-02 5.59792468e-02 9.16330381e-02 6.06545251e-02 2.37173917e-03 7.18197378e-01 3.12594858e+03 +3.90000000e-04 -1.65360702e-12 7.11634751e-02 5.59781519e-02 9.16337349e-02 6.06556466e-02 2.37161367e-03 7.18197378e-01 3.12594858e+03 +3.90100000e-04 -1.65360702e-12 7.11628785e-02 5.59770598e-02 9.16344300e-02 6.06567654e-02 2.37148848e-03 7.18197378e-01 3.12594858e+03 +3.90200000e-04 -1.65360702e-12 7.11622835e-02 5.59759705e-02 9.16351233e-02 6.06578813e-02 2.37136362e-03 7.18197378e-01 3.12594858e+03 +3.90300000e-04 -1.65360702e-12 7.11616900e-02 5.59748839e-02 9.16358148e-02 6.06589944e-02 2.37123906e-03 7.18197378e-01 3.12594858e+03 +3.90400000e-04 -1.65360702e-12 7.11610980e-02 5.59738001e-02 9.16365046e-02 6.06601046e-02 2.37111483e-03 7.18197378e-01 3.12610852e+03 +3.90500000e-04 -1.65360702e-12 7.11605074e-02 5.59727191e-02 9.16371927e-02 6.06612121e-02 2.37099090e-03 7.18197378e-01 3.12610852e+03 +3.90600000e-04 -1.65360702e-12 7.11599184e-02 5.59716407e-02 9.16378790e-02 6.06623168e-02 2.37086729e-03 7.18197378e-01 3.12610852e+03 +3.90700000e-04 -1.65360702e-12 7.11593308e-02 5.59705652e-02 9.16385635e-02 6.06634186e-02 2.37074399e-03 7.18197378e-01 3.12610852e+03 +3.90800000e-04 -1.65360702e-12 7.11587447e-02 5.59694923e-02 9.16392464e-02 6.06645177e-02 2.37062101e-03 7.18197378e-01 3.12610852e+03 +3.90900000e-04 -1.65360702e-12 7.11581601e-02 5.59684222e-02 9.16399275e-02 6.06656141e-02 2.37049833e-03 7.18197378e-01 3.12610852e+03 +3.91000000e-04 -1.65360702e-12 7.11575770e-02 5.59673547e-02 9.16406068e-02 6.06667076e-02 2.37037596e-03 7.18197378e-01 3.12610852e+03 +3.91100000e-04 -1.65360702e-12 7.11569954e-02 5.59662900e-02 9.16412845e-02 6.06677984e-02 2.37025391e-03 7.18197378e-01 3.12610852e+03 +3.91200000e-04 -1.65360702e-12 7.11564152e-02 5.59652280e-02 9.16419604e-02 6.06688864e-02 2.37013216e-03 7.18197378e-01 3.12610852e+03 +3.91300000e-04 -1.65360702e-12 7.11558364e-02 5.59641687e-02 9.16426346e-02 6.06699717e-02 2.37001072e-03 7.18197378e-01 3.12610852e+03 +3.91400000e-04 -1.65360702e-12 7.11552592e-02 5.59631120e-02 9.16433071e-02 6.06710542e-02 2.36988958e-03 7.18197378e-01 3.12610852e+03 +3.91500000e-04 -1.65360702e-12 7.11546834e-02 5.59620581e-02 9.16439780e-02 6.06721340e-02 2.36976876e-03 7.18197378e-01 3.12610852e+03 +3.91600000e-04 -1.65360702e-12 7.11541090e-02 5.59610068e-02 9.16446471e-02 6.06732111e-02 2.36964823e-03 7.18197378e-01 3.12610852e+03 +3.91700000e-04 -1.65360702e-12 7.11535361e-02 5.59599581e-02 9.16453145e-02 6.06742854e-02 2.36952802e-03 7.18197378e-01 3.12610852e+03 +3.91800000e-04 -1.65360702e-12 7.11529646e-02 5.59589122e-02 9.16459802e-02 6.06753571e-02 2.36940810e-03 7.18197378e-01 3.12610852e+03 +3.91900000e-04 -1.65360702e-12 7.11523946e-02 5.59578689e-02 9.16466442e-02 6.06764260e-02 2.36928849e-03 7.18197378e-01 3.12610852e+03 +3.92000000e-04 -1.65360702e-12 7.11518260e-02 5.59568282e-02 9.16473065e-02 6.06774922e-02 2.36916918e-03 7.18197378e-01 3.12610852e+03 +3.92100000e-04 -1.65360702e-12 7.11512589e-02 5.59557902e-02 9.16479672e-02 6.06785557e-02 2.36905018e-03 7.18197378e-01 3.12610852e+03 +3.92200000e-04 -1.65360702e-12 7.11506931e-02 5.59547548e-02 9.16486262e-02 6.06796166e-02 2.36893147e-03 7.18197378e-01 3.12610852e+03 +3.92300000e-04 -1.65360702e-12 7.11501288e-02 5.59537220e-02 9.16492835e-02 6.06806747e-02 2.36881306e-03 7.18197378e-01 3.12610852e+03 +3.92400000e-04 -1.65360702e-12 7.11495660e-02 5.59526919e-02 9.16499391e-02 6.06817302e-02 2.36869496e-03 7.18197378e-01 3.12610852e+03 +3.92500000e-04 -1.65360702e-12 7.11490045e-02 5.59516643e-02 9.16505931e-02 6.06827830e-02 2.36857715e-03 7.18197378e-01 3.12610852e+03 +3.92600000e-04 -1.65360702e-12 7.11484445e-02 5.59506394e-02 9.16512455e-02 6.06838332e-02 2.36845964e-03 7.18197378e-01 3.12610852e+03 +3.92700000e-04 -1.65360702e-12 7.11478859e-02 5.59496170e-02 9.16518961e-02 6.06848807e-02 2.36834243e-03 7.18197378e-01 3.12625939e+03 +3.92800000e-04 -1.65360702e-12 7.11473287e-02 5.59485973e-02 9.16525452e-02 6.06859255e-02 2.36822551e-03 7.18197378e-01 3.12625939e+03 +3.92900000e-04 -1.65360702e-12 7.11467728e-02 5.59475802e-02 9.16531925e-02 6.06869677e-02 2.36810889e-03 7.18197378e-01 3.12625939e+03 +3.93000000e-04 -1.65360702e-12 7.11462184e-02 5.59465656e-02 9.16538383e-02 6.06880073e-02 2.36799256e-03 7.18197378e-01 3.12625939e+03 +3.93100000e-04 -1.65360702e-12 7.11456654e-02 5.59455536e-02 9.16544824e-02 6.06890442e-02 2.36787653e-03 7.18197378e-01 3.12625939e+03 +3.93200000e-04 -1.65360702e-12 7.11451138e-02 5.59445442e-02 9.16551248e-02 6.06900786e-02 2.36776079e-03 7.18197378e-01 3.12625939e+03 +3.93300000e-04 -1.65360702e-12 7.11445636e-02 5.59435373e-02 9.16557657e-02 6.06911103e-02 2.36764535e-03 7.18197378e-01 3.12625939e+03 +3.93400000e-04 -1.65360702e-12 7.11440148e-02 5.59425330e-02 9.16564049e-02 6.06921394e-02 2.36753019e-03 7.18197378e-01 3.12625939e+03 +3.93500000e-04 -1.65360702e-12 7.11434673e-02 5.59415312e-02 9.16570424e-02 6.06931658e-02 2.36741533e-03 7.18197378e-01 3.12625939e+03 +3.93600000e-04 -1.65360702e-12 7.11429213e-02 5.59405320e-02 9.16576784e-02 6.06941897e-02 2.36730076e-03 7.18197378e-01 3.12625939e+03 +3.93700000e-04 -1.65360702e-12 7.11423766e-02 5.59395353e-02 9.16583128e-02 6.06952110e-02 2.36718648e-03 7.18197378e-01 3.12625939e+03 +3.93800000e-04 -1.65360702e-12 7.11418333e-02 5.59385411e-02 9.16589455e-02 6.06962298e-02 2.36707248e-03 7.18197378e-01 3.12625939e+03 +3.93900000e-04 -1.65360702e-12 7.11412913e-02 5.59375495e-02 9.16595766e-02 6.06972459e-02 2.36695878e-03 7.18197378e-01 3.12625939e+03 +3.94000000e-04 -1.65360702e-12 7.11407508e-02 5.59365603e-02 9.16602062e-02 6.06982595e-02 2.36684536e-03 7.18197378e-01 3.12625939e+03 +3.94100000e-04 -1.65360702e-12 7.11402116e-02 5.59355737e-02 9.16608341e-02 6.06992705e-02 2.36673223e-03 7.18197378e-01 3.12625939e+03 +3.94200000e-04 -1.65360702e-12 7.11396737e-02 5.59345896e-02 9.16614605e-02 6.07002790e-02 2.36661938e-03 7.18197378e-01 3.12625939e+03 +3.94300000e-04 -1.65360702e-12 7.11391372e-02 5.59336080e-02 9.16620852e-02 6.07012849e-02 2.36650683e-03 7.18197378e-01 3.12625939e+03 +3.94400000e-04 -1.65360702e-12 7.11386021e-02 5.59326289e-02 9.16627084e-02 6.07022882e-02 2.36639455e-03 7.18197378e-01 3.12625939e+03 +3.94500000e-04 -1.65360702e-12 7.11380683e-02 5.59316522e-02 9.16633300e-02 6.07032890e-02 2.36628256e-03 7.18197378e-01 3.12625939e+03 +3.94600000e-04 -1.65360702e-12 7.11375359e-02 5.59306781e-02 9.16639500e-02 6.07042873e-02 2.36617085e-03 7.18197378e-01 3.12625939e+03 +3.94700000e-04 -1.65360702e-12 7.11370048e-02 5.59297064e-02 9.16645685e-02 6.07052831e-02 2.36605943e-03 7.18197378e-01 3.12625939e+03 +3.94800000e-04 -1.65360702e-12 7.11364751e-02 5.59287371e-02 9.16651853e-02 6.07062763e-02 2.36594829e-03 7.18197378e-01 3.12625939e+03 +3.94900000e-04 -1.65360702e-12 7.11359466e-02 5.59277704e-02 9.16658006e-02 6.07072671e-02 2.36583743e-03 7.18197378e-01 3.12625939e+03 +3.95000000e-04 -1.65360702e-12 7.11354196e-02 5.59268061e-02 9.16664144e-02 6.07082553e-02 2.36572685e-03 7.18197378e-01 3.12640170e+03 +3.95100000e-04 -1.65360702e-12 7.11348938e-02 5.59258442e-02 9.16670266e-02 6.07092410e-02 2.36561654e-03 7.18197378e-01 3.12640170e+03 +3.95200000e-04 -1.65360702e-12 7.11343694e-02 5.59248848e-02 9.16676372e-02 6.07102243e-02 2.36550652e-03 7.18197378e-01 3.12640170e+03 +3.95300000e-04 -1.65360702e-12 7.11338463e-02 5.59239278e-02 9.16682463e-02 6.07112050e-02 2.36539678e-03 7.18197378e-01 3.12640170e+03 +3.95400000e-04 -1.65360702e-12 7.11333245e-02 5.59229732e-02 9.16688538e-02 6.07121833e-02 2.36528731e-03 7.18197378e-01 3.12640170e+03 +3.95500000e-04 -1.65360702e-12 7.11328041e-02 5.59220211e-02 9.16694598e-02 6.07131590e-02 2.36517812e-03 7.18197378e-01 3.12640170e+03 +3.95600000e-04 -1.65360702e-12 7.11322849e-02 5.59210714e-02 9.16700643e-02 6.07141324e-02 2.36506921e-03 7.18197378e-01 3.12640170e+03 +3.95700000e-04 -1.65360702e-12 7.11317671e-02 5.59201240e-02 9.16706672e-02 6.07151032e-02 2.36496057e-03 7.18197378e-01 3.12640170e+03 +3.95800000e-04 -1.65360702e-12 7.11312506e-02 5.59191791e-02 9.16712686e-02 6.07160716e-02 2.36485221e-03 7.18197378e-01 3.12640170e+03 +3.95900000e-04 -1.65360702e-12 7.11307354e-02 5.59182366e-02 9.16718685e-02 6.07170376e-02 2.36474413e-03 7.18197378e-01 3.12640170e+03 +3.96000000e-04 -1.65360702e-12 7.11302215e-02 5.59172965e-02 9.16724668e-02 6.07180011e-02 2.36463631e-03 7.18197378e-01 3.12640170e+03 +3.96100000e-04 -1.65360702e-12 7.11297089e-02 5.59163588e-02 9.16730636e-02 6.07189621e-02 2.36452877e-03 7.18197378e-01 3.12640170e+03 +3.96200000e-04 -1.65360702e-12 7.11291975e-02 5.59154234e-02 9.16736589e-02 6.07199207e-02 2.36442150e-03 7.18197378e-01 3.12640170e+03 +3.96300000e-04 -1.65360702e-12 7.11286875e-02 5.59144904e-02 9.16742527e-02 6.07208769e-02 2.36431450e-03 7.18197378e-01 3.12640170e+03 +3.96400000e-04 -1.65360702e-12 7.11281788e-02 5.59135598e-02 9.16748450e-02 6.07218307e-02 2.36420778e-03 7.18197378e-01 3.12640170e+03 +3.96500000e-04 -1.65360702e-12 7.11276713e-02 5.59126316e-02 9.16754358e-02 6.07227821e-02 2.36410132e-03 7.18197378e-01 3.12640170e+03 +3.96600000e-04 -1.65360702e-12 7.11271651e-02 5.59117057e-02 9.16760251e-02 6.07237311e-02 2.36399513e-03 7.18197378e-01 3.12640170e+03 +3.96700000e-04 -1.65360702e-12 7.11266602e-02 5.59107822e-02 9.16766129e-02 6.07246776e-02 2.36388922e-03 7.18197378e-01 3.12640170e+03 +3.96800000e-04 -1.65360702e-12 7.11261566e-02 5.59098610e-02 9.16771992e-02 6.07256218e-02 2.36378356e-03 7.18197378e-01 3.12640170e+03 +3.96900000e-04 -1.65360702e-12 7.11256543e-02 5.59089421e-02 9.16777840e-02 6.07265635e-02 2.36367818e-03 7.18197378e-01 3.12640170e+03 +3.97000000e-04 -1.65360702e-12 7.11251532e-02 5.59080256e-02 9.16783674e-02 6.07275029e-02 2.36357307e-03 7.18197378e-01 3.12640170e+03 +3.97100000e-04 -1.65360702e-12 7.11246534e-02 5.59071114e-02 9.16789492e-02 6.07284399e-02 2.36346822e-03 7.18197378e-01 3.12640170e+03 +3.97200000e-04 -1.65360702e-12 7.11241548e-02 5.59061995e-02 9.16795296e-02 6.07293746e-02 2.36336363e-03 7.18197378e-01 3.12640170e+03 +3.97300000e-04 -1.65360702e-12 7.11236575e-02 5.59052900e-02 9.16801085e-02 6.07303069e-02 2.36325931e-03 7.18197378e-01 3.12640170e+03 +3.97400000e-04 -1.65360702e-12 7.11231615e-02 5.59043827e-02 9.16806859e-02 6.07312368e-02 2.36315526e-03 7.18197378e-01 3.12653592e+03 +3.97500000e-04 -1.65360702e-12 7.11226667e-02 5.59034778e-02 9.16812619e-02 6.07321643e-02 2.36305147e-03 7.18197378e-01 3.12653592e+03 +3.97600000e-04 -1.65360702e-12 7.11221732e-02 5.59025751e-02 9.16818364e-02 6.07330895e-02 2.36294794e-03 7.18197378e-01 3.12653592e+03 +3.97700000e-04 -1.65360702e-12 7.11216809e-02 5.59016748e-02 9.16824094e-02 6.07340124e-02 2.36284467e-03 7.18197378e-01 3.12653592e+03 +3.97800000e-04 -1.65360702e-12 7.11211899e-02 5.59007767e-02 9.16829810e-02 6.07349329e-02 2.36274166e-03 7.18197378e-01 3.12653592e+03 +3.97900000e-04 -1.65360702e-12 7.11207001e-02 5.58998809e-02 9.16835511e-02 6.07358511e-02 2.36263892e-03 7.18197378e-01 3.12653592e+03 +3.98000000e-04 -1.65360702e-12 7.11202115e-02 5.58989874e-02 9.16841198e-02 6.07367670e-02 2.36253644e-03 7.18197378e-01 3.12653592e+03 +3.98100000e-04 -1.65360702e-12 7.11197242e-02 5.58980961e-02 9.16846870e-02 6.07376805e-02 2.36243421e-03 7.18197378e-01 3.12653592e+03 +3.98200000e-04 -1.65360702e-12 7.11192381e-02 5.58972072e-02 9.16852528e-02 6.07385918e-02 2.36233224e-03 7.18197378e-01 3.12653592e+03 +3.98300000e-04 -1.65360702e-12 7.11187533e-02 5.58963204e-02 9.16858172e-02 6.07395007e-02 2.36223054e-03 7.18197378e-01 3.12653592e+03 +3.98400000e-04 -1.65360702e-12 7.11182696e-02 5.58954360e-02 9.16863801e-02 6.07404073e-02 2.36212909e-03 7.18197378e-01 3.12653592e+03 +3.98500000e-04 -1.65360702e-12 7.11177872e-02 5.58945537e-02 9.16869416e-02 6.07413117e-02 2.36202789e-03 7.18197378e-01 3.12653592e+03 +3.98600000e-04 -1.65360702e-12 7.11173060e-02 5.58936738e-02 9.16875017e-02 6.07422137e-02 2.36192696e-03 7.18197378e-01 3.12653592e+03 +3.98700000e-04 -1.65360702e-12 7.11168261e-02 5.58927960e-02 9.16880604e-02 6.07431135e-02 2.36182627e-03 7.18197378e-01 3.12653592e+03 +3.98800000e-04 -1.65360702e-12 7.11163473e-02 5.58919205e-02 9.16886176e-02 6.07440109e-02 2.36172585e-03 7.18197378e-01 3.12653592e+03 +3.98900000e-04 -1.65360702e-12 7.11158697e-02 5.58910472e-02 9.16891734e-02 6.07449061e-02 2.36162568e-03 7.18197378e-01 3.12653592e+03 +3.99000000e-04 -1.65360702e-12 7.11153934e-02 5.58901761e-02 9.16897278e-02 6.07457991e-02 2.36152576e-03 7.18197378e-01 3.12653592e+03 +3.99100000e-04 -1.65360702e-12 7.11149183e-02 5.58893072e-02 9.16902808e-02 6.07466898e-02 2.36142609e-03 7.18197378e-01 3.12653592e+03 +3.99200000e-04 -1.65360702e-12 7.11144443e-02 5.58884406e-02 9.16908324e-02 6.07475782e-02 2.36132668e-03 7.18197378e-01 3.12653592e+03 +3.99300000e-04 -1.65360702e-12 7.11139716e-02 5.58875761e-02 9.16913826e-02 6.07484643e-02 2.36122752e-03 7.18197378e-01 3.12653592e+03 +3.99400000e-04 -1.65360702e-12 7.11135000e-02 5.58867138e-02 9.16919314e-02 6.07493483e-02 2.36112861e-03 7.18197378e-01 3.12653592e+03 +3.99500000e-04 -1.65360702e-12 7.11130297e-02 5.58858538e-02 9.16924788e-02 6.07502299e-02 2.36102995e-03 7.18197378e-01 3.12653592e+03 +3.99600000e-04 -1.65360702e-12 7.11125605e-02 5.58849959e-02 9.16930248e-02 6.07511094e-02 2.36093154e-03 7.18197378e-01 3.12653592e+03 +3.99700000e-04 -1.65360702e-12 7.11120925e-02 5.58841402e-02 9.16935694e-02 6.07519866e-02 2.36083338e-03 7.18197378e-01 3.12666251e+03 +3.99800000e-04 -1.65360702e-12 7.11116258e-02 5.58832866e-02 9.16941127e-02 6.07528616e-02 2.36073547e-03 7.18197378e-01 3.12666251e+03 +3.99900000e-04 -1.65360702e-12 7.11111601e-02 5.58824353e-02 9.16946545e-02 6.07537344e-02 2.36063781e-03 7.18197378e-01 3.12666251e+03 +4.00000000e-04 -1.65360702e-12 7.11106957e-02 5.58815861e-02 9.16951950e-02 6.07546050e-02 2.36054039e-03 7.18197378e-01 3.12666251e+03 +4.00100000e-04 -1.65360702e-12 7.11102324e-02 5.58807390e-02 9.16957341e-02 6.07554733e-02 2.36044323e-03 7.18197378e-01 3.12666251e+03 +4.00200000e-04 -1.65360702e-12 7.11097704e-02 5.58798941e-02 9.16962719e-02 6.07563395e-02 2.36034630e-03 7.18197378e-01 3.12666251e+03 +4.00300000e-04 -1.65360702e-12 7.11093094e-02 5.58790514e-02 9.16968082e-02 6.07572035e-02 2.36024963e-03 7.18197378e-01 3.12666251e+03 +4.00400000e-04 -1.65360702e-12 7.11088497e-02 5.58782108e-02 9.16973432e-02 6.07580652e-02 2.36015319e-03 7.18197378e-01 3.12666251e+03 +4.00500000e-04 -1.65360702e-12 7.11083911e-02 5.58773723e-02 9.16978769e-02 6.07589248e-02 2.36005701e-03 7.18197378e-01 3.12666251e+03 +4.00600000e-04 -1.65360702e-12 7.11079337e-02 5.58765360e-02 9.16984092e-02 6.07597823e-02 2.35996106e-03 7.18197378e-01 3.12666251e+03 +4.00700000e-04 -1.65360702e-12 7.11074774e-02 5.58757017e-02 9.16989401e-02 6.07606375e-02 2.35986536e-03 7.18197378e-01 3.12666251e+03 +4.00800000e-04 -1.65360702e-12 7.11070223e-02 5.58748696e-02 9.16994697e-02 6.07614906e-02 2.35976990e-03 7.18197378e-01 3.12666251e+03 +4.00900000e-04 -1.65360702e-12 7.11065683e-02 5.58740397e-02 9.16999980e-02 6.07623415e-02 2.35967469e-03 7.18197378e-01 3.12666251e+03 +4.01000000e-04 -1.65360702e-12 7.11061155e-02 5.58732118e-02 9.17005249e-02 6.07631903e-02 2.35957971e-03 7.18197378e-01 3.12666251e+03 +4.01100000e-04 -1.65360702e-12 7.11056638e-02 5.58723860e-02 9.17010505e-02 6.07640369e-02 2.35948498e-03 7.18197378e-01 3.12666251e+03 +4.01200000e-04 -1.65360702e-12 7.11052133e-02 5.58715623e-02 9.17015747e-02 6.07648813e-02 2.35939049e-03 7.18197378e-01 3.12666251e+03 +4.01300000e-04 -1.65360702e-12 7.11047639e-02 5.58707408e-02 9.17020976e-02 6.07657237e-02 2.35929623e-03 7.18197378e-01 3.12666251e+03 +4.01400000e-04 -1.65360702e-12 7.11043157e-02 5.58699213e-02 9.17026192e-02 6.07665638e-02 2.35920222e-03 7.18197378e-01 3.12666251e+03 +4.01500000e-04 -1.65360702e-12 7.11038685e-02 5.58691039e-02 9.17031394e-02 6.07674019e-02 2.35910844e-03 7.18197378e-01 3.12666251e+03 +4.01600000e-04 -1.65360702e-12 7.11034226e-02 5.58682885e-02 9.17036583e-02 6.07682378e-02 2.35901490e-03 7.18197378e-01 3.12666251e+03 +4.01700000e-04 -1.65360702e-12 7.11029777e-02 5.58674753e-02 9.17041759e-02 6.07690716e-02 2.35892160e-03 7.18197378e-01 3.12666251e+03 +4.01800000e-04 -1.65360702e-12 7.11025340e-02 5.58666641e-02 9.17046922e-02 6.07699033e-02 2.35882853e-03 7.18197378e-01 3.12666251e+03 +4.01900000e-04 -1.65360702e-12 7.11020914e-02 5.58658549e-02 9.17052072e-02 6.07707329e-02 2.35873570e-03 7.18197378e-01 3.12666251e+03 +4.02000000e-04 -1.65360702e-12 7.11016499e-02 5.58650479e-02 9.17057209e-02 6.07715604e-02 2.35864311e-03 7.18197378e-01 3.12678190e+03 +4.02100000e-04 -1.65360702e-12 7.11012095e-02 5.58642428e-02 9.17062332e-02 6.07723858e-02 2.35855075e-03 7.18197378e-01 3.12678190e+03 +4.02200000e-04 -1.65360702e-12 7.11007702e-02 5.58634399e-02 9.17067443e-02 6.07732091e-02 2.35845862e-03 7.18197378e-01 3.12678190e+03 +4.02300000e-04 -1.65360702e-12 7.11003321e-02 5.58626389e-02 9.17072541e-02 6.07740303e-02 2.35836673e-03 7.18197378e-01 3.12678190e+03 +4.02400000e-04 -1.65360702e-12 7.10998951e-02 5.58618400e-02 9.17077625e-02 6.07748495e-02 2.35827507e-03 7.18197378e-01 3.12678190e+03 +4.02500000e-04 -1.65360702e-12 7.10994591e-02 5.58610432e-02 9.17082697e-02 6.07756665e-02 2.35818364e-03 7.18197378e-01 3.12678190e+03 +4.02600000e-04 -1.65360702e-12 7.10990243e-02 5.58602483e-02 9.17087756e-02 6.07764815e-02 2.35809245e-03 7.18197378e-01 3.12678190e+03 +4.02700000e-04 -1.65360702e-12 7.10985906e-02 5.58594555e-02 9.17092802e-02 6.07772944e-02 2.35800148e-03 7.18197378e-01 3.12678190e+03 +4.02800000e-04 -1.65360702e-12 7.10981579e-02 5.58586647e-02 9.17097835e-02 6.07781053e-02 2.35791075e-03 7.18197378e-01 3.12678190e+03 +4.02900000e-04 -1.65360702e-12 7.10977264e-02 5.58578759e-02 9.17102856e-02 6.07789140e-02 2.35782025e-03 7.18197378e-01 3.12678190e+03 +4.03000000e-04 -1.65360702e-12 7.10972960e-02 5.58570891e-02 9.17107863e-02 6.07797208e-02 2.35772997e-03 7.18197378e-01 3.12678190e+03 +4.03100000e-04 -1.65360702e-12 7.10968666e-02 5.58563043e-02 9.17112858e-02 6.07805255e-02 2.35763993e-03 7.18197378e-01 3.12678190e+03 +4.03200000e-04 -1.65360702e-12 7.10964384e-02 5.58555215e-02 9.17117840e-02 6.07813282e-02 2.35755011e-03 7.18197378e-01 3.12678190e+03 +4.03300000e-04 -1.65360702e-12 7.10960112e-02 5.58547407e-02 9.17122810e-02 6.07821288e-02 2.35746052e-03 7.18197378e-01 3.12678190e+03 +4.03400000e-04 -1.65360702e-12 7.10955851e-02 5.58539619e-02 9.17127767e-02 6.07829274e-02 2.35737116e-03 7.18197378e-01 3.12678190e+03 +4.03500000e-04 -1.65360702e-12 7.10951601e-02 5.58531850e-02 9.17132711e-02 6.07837239e-02 2.35728203e-03 7.18197378e-01 3.12678190e+03 +4.03600000e-04 -1.65360702e-12 7.10947361e-02 5.58524101e-02 9.17137643e-02 6.07845185e-02 2.35719312e-03 7.18197378e-01 3.12678190e+03 +4.03700000e-04 -1.65360702e-12 7.10943133e-02 5.58516372e-02 9.17142562e-02 6.07853110e-02 2.35710444e-03 7.18197378e-01 3.12678190e+03 +4.03800000e-04 -1.65360702e-12 7.10938915e-02 5.58508663e-02 9.17147469e-02 6.07861015e-02 2.35701598e-03 7.18197378e-01 3.12678190e+03 +4.03900000e-04 -1.65360702e-12 7.10934707e-02 5.58500973e-02 9.17152363e-02 6.07868901e-02 2.35692775e-03 7.18197378e-01 3.12678190e+03 +4.04000000e-04 -1.65360702e-12 7.10930511e-02 5.58493303e-02 9.17157245e-02 6.07876766e-02 2.35683973e-03 7.18197378e-01 3.12678190e+03 +4.04100000e-04 -1.65360702e-12 7.10926325e-02 5.58485652e-02 9.17162114e-02 6.07884611e-02 2.35675195e-03 7.18197378e-01 3.12678190e+03 +4.04200000e-04 -1.65360702e-12 7.10922149e-02 5.58478021e-02 9.17166971e-02 6.07892436e-02 2.35666438e-03 7.18197378e-01 3.12678190e+03 +4.04300000e-04 -1.65360702e-12 7.10917984e-02 5.58470409e-02 9.17171816e-02 6.07900242e-02 2.35657704e-03 7.18197378e-01 3.12689450e+03 +4.04400000e-04 -1.65360702e-12 7.10913830e-02 5.58462817e-02 9.17176648e-02 6.07908028e-02 2.35648992e-03 7.18197378e-01 3.12689450e+03 +4.04500000e-04 -1.65360702e-12 7.10909686e-02 5.58455244e-02 9.17181468e-02 6.07915793e-02 2.35640302e-03 7.18197378e-01 3.12689450e+03 +4.04600000e-04 -1.65360702e-12 7.10905553e-02 5.58447690e-02 9.17186276e-02 6.07923540e-02 2.35631634e-03 7.18197378e-01 3.12689450e+03 +4.04700000e-04 -1.65360702e-12 7.10901430e-02 5.58440155e-02 9.17191071e-02 6.07931266e-02 2.35622988e-03 7.18197378e-01 3.12689450e+03 +4.04800000e-04 -1.65360702e-12 7.10897318e-02 5.58432639e-02 9.17195855e-02 6.07938973e-02 2.35614364e-03 7.18197378e-01 3.12689450e+03 +4.04900000e-04 -1.65360702e-12 7.10893216e-02 5.58425143e-02 9.17200626e-02 6.07946661e-02 2.35605762e-03 7.18197378e-01 3.12689450e+03 +4.05000000e-04 -1.65360702e-12 7.10889124e-02 5.58417665e-02 9.17205385e-02 6.07954329e-02 2.35597182e-03 7.18197378e-01 3.12689450e+03 +4.05100000e-04 -1.65360702e-12 7.10885043e-02 5.58410207e-02 9.17210132e-02 6.07961977e-02 2.35588623e-03 7.18197378e-01 3.12689450e+03 +4.05200000e-04 -1.65360702e-12 7.10880972e-02 5.58402768e-02 9.17214867e-02 6.07969606e-02 2.35580087e-03 7.18197378e-01 3.12689450e+03 +4.05300000e-04 -1.65360702e-12 7.10876912e-02 5.58395347e-02 9.17219589e-02 6.07977216e-02 2.35571571e-03 7.18197378e-01 3.12689450e+03 +4.05400000e-04 -1.65360702e-12 7.10872862e-02 5.58387945e-02 9.17224300e-02 6.07984806e-02 2.35563078e-03 7.18197378e-01 3.12689450e+03 +4.05500000e-04 -1.65360702e-12 7.10868822e-02 5.58380563e-02 9.17228999e-02 6.07992377e-02 2.35554606e-03 7.18197378e-01 3.12689450e+03 +4.05600000e-04 -1.65360702e-12 7.10864792e-02 5.58373199e-02 9.17233686e-02 6.07999929e-02 2.35546155e-03 7.18197378e-01 3.12689450e+03 +4.05700000e-04 -1.65360702e-12 7.10860772e-02 5.58365853e-02 9.17238361e-02 6.08007462e-02 2.35537726e-03 7.18197378e-01 3.12689450e+03 +4.05800000e-04 -1.65360702e-12 7.10856763e-02 5.58358527e-02 9.17243024e-02 6.08014976e-02 2.35529319e-03 7.18197378e-01 3.12689450e+03 +4.05900000e-04 -1.65360702e-12 7.10852764e-02 5.58351219e-02 9.17247675e-02 6.08022470e-02 2.35520932e-03 7.18197378e-01 3.12689450e+03 +4.06000000e-04 -1.65360702e-12 7.10848775e-02 5.58343929e-02 9.17252315e-02 6.08029946e-02 2.35512567e-03 7.18197378e-01 3.12689450e+03 +4.06100000e-04 -1.65360702e-12 7.10844796e-02 5.58336658e-02 9.17256942e-02 6.08037403e-02 2.35504224e-03 7.18197378e-01 3.12689450e+03 +4.06200000e-04 -1.65360702e-12 7.10840827e-02 5.58329406e-02 9.17261558e-02 6.08044840e-02 2.35495901e-03 7.18197378e-01 3.12689450e+03 +4.06300000e-04 -1.65360702e-12 7.10836868e-02 5.58322172e-02 9.17266162e-02 6.08052259e-02 2.35487599e-03 7.18197378e-01 3.12689450e+03 +4.06400000e-04 -1.65360702e-12 7.10832919e-02 5.58314957e-02 9.17270755e-02 6.08059659e-02 2.35479319e-03 7.18197378e-01 3.12689450e+03 +4.06500000e-04 -1.65360702e-12 7.10828980e-02 5.58307759e-02 9.17275335e-02 6.08067040e-02 2.35471059e-03 7.18197378e-01 3.12689450e+03 +4.06600000e-04 -1.65360702e-12 7.10825052e-02 5.58300581e-02 9.17279904e-02 6.08074403e-02 2.35462821e-03 7.18197378e-01 3.12700068e+03 +4.06700000e-04 -1.65360702e-12 7.10821133e-02 5.58293420e-02 9.17284462e-02 6.08081747e-02 2.35454603e-03 7.18197378e-01 3.12700068e+03 +4.06800000e-04 -1.65360702e-12 7.10817224e-02 5.58286278e-02 9.17289008e-02 6.08089072e-02 2.35446407e-03 7.18197378e-01 3.12700068e+03 +4.06900000e-04 -1.65360702e-12 7.10813325e-02 5.58279153e-02 9.17293542e-02 6.08096378e-02 2.35438231e-03 7.18197378e-01 3.12700068e+03 +4.07000000e-04 -1.65360702e-12 7.10809436e-02 5.58272047e-02 9.17298065e-02 6.08103666e-02 2.35430076e-03 7.18197378e-01 3.12700068e+03 +4.07100000e-04 -1.65360702e-12 7.10805556e-02 5.58264959e-02 9.17302576e-02 6.08110936e-02 2.35421941e-03 7.18197378e-01 3.12700068e+03 +4.07200000e-04 -1.65360702e-12 7.10801687e-02 5.58257889e-02 9.17307076e-02 6.08118187e-02 2.35413827e-03 7.18197378e-01 3.12700068e+03 +4.07300000e-04 -1.65360702e-12 7.10797827e-02 5.58250837e-02 9.17311564e-02 6.08125420e-02 2.35405734e-03 7.18197378e-01 3.12700068e+03 +4.07400000e-04 -1.65360702e-12 7.10793978e-02 5.58243803e-02 9.17316041e-02 6.08132634e-02 2.35397661e-03 7.18197378e-01 3.12700068e+03 +4.07500000e-04 -1.65360702e-12 7.10790137e-02 5.58236787e-02 9.17320506e-02 6.08139830e-02 2.35389609e-03 7.18197378e-01 3.12700068e+03 +4.07600000e-04 -1.65360702e-12 7.10786307e-02 5.58229789e-02 9.17324961e-02 6.08147008e-02 2.35381577e-03 7.18197378e-01 3.12700068e+03 +4.07700000e-04 -1.65360702e-12 7.10782486e-02 5.58222808e-02 9.17329403e-02 6.08154167e-02 2.35373566e-03 7.18197378e-01 3.12700068e+03 +4.07800000e-04 -1.65360702e-12 7.10778675e-02 5.58215845e-02 9.17333835e-02 6.08161308e-02 2.35365575e-03 7.18197378e-01 3.12700068e+03 +4.07900000e-04 -1.65360702e-12 7.10774874e-02 5.58208900e-02 9.17338255e-02 6.08168432e-02 2.35357604e-03 7.18197378e-01 3.12700068e+03 +4.08000000e-04 -1.65360702e-12 7.10771083e-02 5.58201973e-02 9.17342664e-02 6.08175537e-02 2.35349654e-03 7.18197378e-01 3.12700068e+03 +4.08100000e-04 -1.65360702e-12 7.10767300e-02 5.58195063e-02 9.17347062e-02 6.08182624e-02 2.35341724e-03 7.18197378e-01 3.12700068e+03 +4.08200000e-04 -1.65360702e-12 7.10763528e-02 5.58188171e-02 9.17351449e-02 6.08189693e-02 2.35333813e-03 7.18197378e-01 3.12700068e+03 +4.08300000e-04 -1.65360702e-12 7.10759765e-02 5.58181296e-02 9.17355824e-02 6.08196744e-02 2.35325923e-03 7.18197378e-01 3.12700068e+03 +4.08400000e-04 -1.65360702e-12 7.10756012e-02 5.58174439e-02 9.17360188e-02 6.08203777e-02 2.35318053e-03 7.18197378e-01 3.12700068e+03 +4.08500000e-04 -1.65360702e-12 7.10752268e-02 5.58167599e-02 9.17364541e-02 6.08210793e-02 2.35310203e-03 7.18197378e-01 3.12700068e+03 +4.08600000e-04 -1.65360702e-12 7.10748534e-02 5.58160777e-02 9.17368884e-02 6.08217790e-02 2.35302373e-03 7.18197378e-01 3.12700068e+03 +4.08700000e-04 -1.65360702e-12 7.10744809e-02 5.58153972e-02 9.17373215e-02 6.08224770e-02 2.35294563e-03 7.18197378e-01 3.12700068e+03 +4.08800000e-04 -1.65360702e-12 7.10741093e-02 5.58147184e-02 9.17377535e-02 6.08231732e-02 2.35286772e-03 7.18197378e-01 3.12700068e+03 +4.08900000e-04 -1.65360702e-12 7.10737387e-02 5.58140414e-02 9.17381844e-02 6.08238676e-02 2.35279002e-03 7.18197378e-01 3.12710081e+03 +4.09000000e-04 -1.65360702e-12 7.10733691e-02 5.58133661e-02 9.17386142e-02 6.08245603e-02 2.35271251e-03 7.18197378e-01 3.12710081e+03 +4.09100000e-04 -1.65360702e-12 7.10730003e-02 5.58126925e-02 9.17390429e-02 6.08252512e-02 2.35263519e-03 7.18197378e-01 3.12710081e+03 +4.09200000e-04 -1.65360702e-12 7.10726325e-02 5.58120206e-02 9.17394705e-02 6.08259404e-02 2.35255808e-03 7.18197378e-01 3.12710081e+03 +4.09300000e-04 -1.65360702e-12 7.10722657e-02 5.58113504e-02 9.17398971e-02 6.08266278e-02 2.35248116e-03 7.18197378e-01 3.12710081e+03 +4.09400000e-04 -1.65360702e-12 7.10718998e-02 5.58106820e-02 9.17403225e-02 6.08273135e-02 2.35240443e-03 7.18197378e-01 3.12710081e+03 +4.09500000e-04 -1.65360702e-12 7.10715348e-02 5.58100152e-02 9.17407469e-02 6.08279974e-02 2.35232790e-03 7.18197378e-01 3.12710081e+03 +4.09600000e-04 -1.65360702e-12 7.10711707e-02 5.58093501e-02 9.17411702e-02 6.08286796e-02 2.35225157e-03 7.18197378e-01 3.12710081e+03 +4.09700000e-04 -1.65360702e-12 7.10708075e-02 5.58086868e-02 9.17415924e-02 6.08293600e-02 2.35217542e-03 7.18197378e-01 3.12710081e+03 +4.09800000e-04 -1.65360702e-12 7.10704453e-02 5.58080251e-02 9.17420135e-02 6.08300388e-02 2.35209948e-03 7.18197378e-01 3.12710081e+03 +4.09900000e-04 -1.65360702e-12 7.10700840e-02 5.58073651e-02 9.17424336e-02 6.08307158e-02 2.35202372e-03 7.18197378e-01 3.12710081e+03 +4.10000000e-04 -1.65360702e-12 7.10697236e-02 5.58067068e-02 9.17428526e-02 6.08313911e-02 2.35194816e-03 7.18197378e-01 3.12710081e+03 +4.10100000e-04 -1.65360702e-12 7.10693641e-02 5.58060501e-02 9.17432705e-02 6.08320646e-02 2.35187279e-03 7.18197378e-01 3.12710081e+03 +4.10200000e-04 -1.65360702e-12 7.10690056e-02 5.58053951e-02 9.17436874e-02 6.08327365e-02 2.35179761e-03 7.18197378e-01 3.12710081e+03 +4.10300000e-04 -1.65360702e-12 7.10686479e-02 5.58047418e-02 9.17441032e-02 6.08334066e-02 2.35172262e-03 7.18197378e-01 3.12710081e+03 +4.10400000e-04 -1.65360702e-12 7.10682912e-02 5.58040902e-02 9.17445179e-02 6.08340751e-02 2.35164782e-03 7.18197378e-01 3.12710081e+03 +4.10500000e-04 -1.65360702e-12 7.10679353e-02 5.58034402e-02 9.17449316e-02 6.08347418e-02 2.35157321e-03 7.18197378e-01 3.12710081e+03 +4.10600000e-04 -1.65360702e-12 7.10675804e-02 5.58027918e-02 9.17453442e-02 6.08354069e-02 2.35149879e-03 7.18197378e-01 3.12710081e+03 +4.10700000e-04 -1.65360702e-12 7.10672263e-02 5.58021452e-02 9.17457558e-02 6.08360703e-02 2.35142456e-03 7.18197378e-01 3.12710081e+03 +4.10800000e-04 -1.65360702e-12 7.10668732e-02 5.58015001e-02 9.17461664e-02 6.08367320e-02 2.35135052e-03 7.18197378e-01 3.12710081e+03 +4.10900000e-04 -1.65360702e-12 7.10665209e-02 5.58008567e-02 9.17465759e-02 6.08373920e-02 2.35127667e-03 7.18197378e-01 3.12710081e+03 +4.11000000e-04 -1.65360702e-12 7.10661696e-02 5.58002150e-02 9.17469843e-02 6.08380503e-02 2.35120300e-03 7.18197378e-01 3.12710081e+03 +4.11100000e-04 -1.65360702e-12 7.10658191e-02 5.57995748e-02 9.17473917e-02 6.08387069e-02 2.35112952e-03 7.18197378e-01 3.12710081e+03 +4.11200000e-04 -1.65360702e-12 7.10654695e-02 5.57989363e-02 9.17477981e-02 6.08393619e-02 2.35105623e-03 7.18197378e-01 3.12719522e+03 +4.11300000e-04 -1.65360702e-12 7.10651209e-02 5.57982995e-02 9.17482035e-02 6.08400152e-02 2.35098312e-03 7.18197378e-01 3.12719522e+03 +4.11400000e-04 -1.65360702e-12 7.10647730e-02 5.57976642e-02 9.17486078e-02 6.08406669e-02 2.35091020e-03 7.18197378e-01 3.12719522e+03 +4.11500000e-04 -1.65360702e-12 7.10644261e-02 5.57970306e-02 9.17490110e-02 6.08413169e-02 2.35083747e-03 7.18197378e-01 3.12719522e+03 +4.11600000e-04 -1.65360702e-12 7.10640801e-02 5.57963986e-02 9.17494133e-02 6.08419653e-02 2.35076492e-03 7.18197378e-01 3.12719522e+03 +4.11700000e-04 -1.65360702e-12 7.10637349e-02 5.57957682e-02 9.17498145e-02 6.08426120e-02 2.35069255e-03 7.18197378e-01 3.12719522e+03 +4.11800000e-04 -1.65360702e-12 7.10633906e-02 5.57951394e-02 9.17502147e-02 6.08432570e-02 2.35062037e-03 7.18197378e-01 3.12719522e+03 +4.11900000e-04 -1.65360702e-12 7.10630472e-02 5.57945121e-02 9.17506139e-02 6.08439005e-02 2.35054837e-03 7.18197378e-01 3.12719522e+03 +4.12000000e-04 -1.65360702e-12 7.10627047e-02 5.57938865e-02 9.17510121e-02 6.08445423e-02 2.35047656e-03 7.18197378e-01 3.12719522e+03 +4.12100000e-04 -1.65360702e-12 7.10623630e-02 5.57932625e-02 9.17514093e-02 6.08451824e-02 2.35040493e-03 7.18197378e-01 3.12719522e+03 +4.12200000e-04 -1.65360702e-12 7.10620222e-02 5.57926401e-02 9.17518054e-02 6.08458210e-02 2.35033348e-03 7.18197378e-01 3.12719522e+03 +4.12300000e-04 -1.65360702e-12 7.10616823e-02 5.57920193e-02 9.17522006e-02 6.08464579e-02 2.35026221e-03 7.18197378e-01 3.12719522e+03 +4.12400000e-04 -1.65360702e-12 7.10613432e-02 5.57914000e-02 9.17525947e-02 6.08470932e-02 2.35019112e-03 7.18197378e-01 3.12719522e+03 +4.12500000e-04 -1.65360702e-12 7.10610050e-02 5.57907823e-02 9.17529878e-02 6.08477268e-02 2.35012021e-03 7.18197378e-01 3.12719522e+03 +4.12600000e-04 -1.65360702e-12 7.10606676e-02 5.57901662e-02 9.17533799e-02 6.08483589e-02 2.35004948e-03 7.18197378e-01 3.12719522e+03 +4.12700000e-04 -1.65360702e-12 7.10603311e-02 5.57895516e-02 9.17537711e-02 6.08489894e-02 2.34997894e-03 7.18197378e-01 3.12719522e+03 +4.12800000e-04 -1.65360702e-12 7.10599955e-02 5.57889387e-02 9.17541612e-02 6.08496182e-02 2.34990857e-03 7.18197378e-01 3.12719522e+03 +4.12900000e-04 -1.65360702e-12 7.10596607e-02 5.57883272e-02 9.17545504e-02 6.08502455e-02 2.34983838e-03 7.18197378e-01 3.12719522e+03 +4.13000000e-04 -1.65360702e-12 7.10593267e-02 5.57877174e-02 9.17549385e-02 6.08508712e-02 2.34976837e-03 7.18197378e-01 3.12719522e+03 +4.13100000e-04 -1.65360702e-12 7.10589936e-02 5.57871091e-02 9.17553257e-02 6.08514952e-02 2.34969853e-03 7.18197378e-01 3.12719522e+03 +4.13200000e-04 -1.65360702e-12 7.10586614e-02 5.57865023e-02 9.17557119e-02 6.08521177e-02 2.34962888e-03 7.18197378e-01 3.12719522e+03 +4.13300000e-04 -1.65360702e-12 7.10583300e-02 5.57858971e-02 9.17560970e-02 6.08527386e-02 2.34955940e-03 7.18197378e-01 3.12719522e+03 +4.13400000e-04 -1.65360702e-12 7.10579994e-02 5.57852934e-02 9.17564813e-02 6.08533580e-02 2.34949010e-03 7.18197378e-01 3.12719522e+03 +4.13500000e-04 -1.65360702e-12 7.10576697e-02 5.57846913e-02 9.17568645e-02 6.08539757e-02 2.34942097e-03 7.18197378e-01 3.12728425e+03 +4.13600000e-04 -1.65360702e-12 7.10573408e-02 5.57840907e-02 9.17572468e-02 6.08545919e-02 2.34935202e-03 7.18197378e-01 3.12728425e+03 +4.13700000e-04 -1.65360702e-12 7.10570127e-02 5.57834916e-02 9.17576280e-02 6.08552065e-02 2.34928324e-03 7.18197378e-01 3.12728425e+03 +4.13800000e-04 -1.65360702e-12 7.10566855e-02 5.57828941e-02 9.17580084e-02 6.08558196e-02 2.34921464e-03 7.18197378e-01 3.12728425e+03 +4.13900000e-04 -1.65360702e-12 7.10563591e-02 5.57822980e-02 9.17583877e-02 6.08564311e-02 2.34914622e-03 7.18197378e-01 3.12728425e+03 +4.14000000e-04 -1.65360702e-12 7.10560335e-02 5.57817035e-02 9.17587661e-02 6.08570411e-02 2.34907797e-03 7.18197378e-01 3.12728425e+03 +4.14100000e-04 -1.65360702e-12 7.10557088e-02 5.57811105e-02 9.17591435e-02 6.08576494e-02 2.34900989e-03 7.18197378e-01 3.12728425e+03 +4.14200000e-04 -1.65360702e-12 7.10553849e-02 5.57805190e-02 9.17595200e-02 6.08582563e-02 2.34894198e-03 7.18197378e-01 3.12728425e+03 +4.14300000e-04 -1.65360702e-12 7.10550618e-02 5.57799291e-02 9.17598955e-02 6.08588616e-02 2.34887425e-03 7.18197378e-01 3.12728425e+03 +4.14400000e-04 -1.65360702e-12 7.10547395e-02 5.57793406e-02 9.17602700e-02 6.08594654e-02 2.34880669e-03 7.18197378e-01 3.12728425e+03 +4.14500000e-04 -1.65360702e-12 7.10544181e-02 5.57787536e-02 9.17606436e-02 6.08600676e-02 2.34873930e-03 7.18197378e-01 3.12728425e+03 +4.14600000e-04 -1.65360702e-12 7.10540974e-02 5.57781681e-02 9.17610162e-02 6.08606683e-02 2.34867208e-03 7.18197378e-01 3.12728425e+03 +4.14700000e-04 -1.65360702e-12 7.10537776e-02 5.57775841e-02 9.17613879e-02 6.08612675e-02 2.34860503e-03 7.18197378e-01 3.12728425e+03 +4.14800000e-04 -1.65360702e-12 7.10534586e-02 5.57770016e-02 9.17617586e-02 6.08618651e-02 2.34853816e-03 7.18197378e-01 3.12728425e+03 +4.14900000e-04 -1.65360702e-12 7.10531404e-02 5.57764206e-02 9.17621284e-02 6.08624613e-02 2.34847145e-03 7.18197378e-01 3.12728425e+03 +4.15000000e-04 -1.65360702e-12 7.10528230e-02 5.57758411e-02 9.17624973e-02 6.08630559e-02 2.34840491e-03 7.18197378e-01 3.12728425e+03 +4.15100000e-04 -1.65360702e-12 7.10525064e-02 5.57752630e-02 9.17628652e-02 6.08636490e-02 2.34833855e-03 7.18197378e-01 3.12728425e+03 +4.15200000e-04 -1.65360702e-12 7.10521906e-02 5.57746864e-02 9.17632322e-02 6.08642406e-02 2.34827235e-03 7.18197378e-01 3.12728425e+03 +4.15300000e-04 -1.65360702e-12 7.10518756e-02 5.57741113e-02 9.17635982e-02 6.08648307e-02 2.34820632e-03 7.18197378e-01 3.12728425e+03 +4.15400000e-04 -1.65360702e-12 7.10515615e-02 5.57735376e-02 9.17639633e-02 6.08654193e-02 2.34814045e-03 7.18197378e-01 3.12728425e+03 +4.15500000e-04 -1.65360702e-12 7.10512481e-02 5.57729654e-02 9.17643275e-02 6.08660064e-02 2.34807476e-03 7.18197378e-01 3.12728425e+03 +4.15600000e-04 -1.65360702e-12 7.10509355e-02 5.57723947e-02 9.17646908e-02 6.08665920e-02 2.34800923e-03 7.18197378e-01 3.12728425e+03 +4.15700000e-04 -1.65360702e-12 7.10506237e-02 5.57718254e-02 9.17650531e-02 6.08671761e-02 2.34794387e-03 7.18197378e-01 3.12728425e+03 +4.15800000e-04 -1.65360702e-12 7.10503127e-02 5.57712575e-02 9.17654145e-02 6.08677587e-02 2.34787867e-03 7.18197378e-01 3.12728425e+03 +4.15900000e-04 -1.65360702e-12 7.10500025e-02 5.57706911e-02 9.17657750e-02 6.08683399e-02 2.34781364e-03 7.18197378e-01 3.12736820e+03 +4.16000000e-04 -1.65360702e-12 7.10496930e-02 5.57701262e-02 9.17661346e-02 6.08689196e-02 2.34774878e-03 7.18197378e-01 3.12736820e+03 +4.16100000e-04 -1.65360702e-12 7.10493844e-02 5.57695627e-02 9.17664932e-02 6.08694978e-02 2.34768408e-03 7.18197378e-01 3.12736820e+03 +4.16200000e-04 -1.65360702e-12 7.10490766e-02 5.57690006e-02 9.17668510e-02 6.08700745e-02 2.34761955e-03 7.18197378e-01 3.12736820e+03 +4.16300000e-04 -1.65360702e-12 7.10487695e-02 5.57684400e-02 9.17672078e-02 6.08706497e-02 2.34755518e-03 7.18197378e-01 3.12736820e+03 +4.16400000e-04 -1.65360702e-12 7.10484632e-02 5.57678807e-02 9.17675637e-02 6.08712235e-02 2.34749097e-03 7.18197378e-01 3.12736820e+03 +4.16500000e-04 -1.65360702e-12 7.10481577e-02 5.57673230e-02 9.17679187e-02 6.08717959e-02 2.34742692e-03 7.18197378e-01 3.12736820e+03 +4.16600000e-04 -1.65360702e-12 7.10478529e-02 5.57667666e-02 9.17682728e-02 6.08723668e-02 2.34736304e-03 7.18197378e-01 3.12736820e+03 +4.16700000e-04 -1.65360702e-12 7.10475490e-02 5.57662116e-02 9.17686260e-02 6.08729362e-02 2.34729933e-03 7.18197378e-01 3.12736820e+03 +4.16800000e-04 -1.65360702e-12 7.10472458e-02 5.57656581e-02 9.17689783e-02 6.08735042e-02 2.34723577e-03 7.18197378e-01 3.12736820e+03 +4.16900000e-04 -1.65360702e-12 7.10469434e-02 5.57651060e-02 9.17693297e-02 6.08740707e-02 2.34717237e-03 7.18197378e-01 3.12736820e+03 +4.17000000e-04 -1.65360702e-12 7.10466417e-02 5.57645552e-02 9.17696802e-02 6.08746358e-02 2.34710914e-03 7.18197378e-01 3.12736820e+03 +4.17100000e-04 -1.65360702e-12 7.10463408e-02 5.57640059e-02 9.17700299e-02 6.08751995e-02 2.34704607e-03 7.18197378e-01 3.12736820e+03 +4.17200000e-04 -1.65360702e-12 7.10460407e-02 5.57634580e-02 9.17703786e-02 6.08757617e-02 2.34698316e-03 7.18197378e-01 3.12736820e+03 +4.17300000e-04 -1.65360702e-12 7.10457413e-02 5.57629115e-02 9.17707264e-02 6.08763225e-02 2.34692040e-03 7.18197378e-01 3.12736820e+03 +4.17400000e-04 -1.65360702e-12 7.10454427e-02 5.57623664e-02 9.17710734e-02 6.08768819e-02 2.34685781e-03 7.18197378e-01 3.12736820e+03 +4.17500000e-04 -1.65360702e-12 7.10451449e-02 5.57618226e-02 9.17714195e-02 6.08774398e-02 2.34679538e-03 7.18197378e-01 3.12736820e+03 +4.17600000e-04 -1.65360702e-12 7.10448478e-02 5.57612803e-02 9.17717646e-02 6.08779964e-02 2.34673310e-03 7.18197378e-01 3.12736820e+03 +4.17700000e-04 -1.65360702e-12 7.10445515e-02 5.57607393e-02 9.17721090e-02 6.08785515e-02 2.34667099e-03 7.18197378e-01 3.12736820e+03 +4.17800000e-04 -1.65360702e-12 7.10442559e-02 5.57601997e-02 9.17724524e-02 6.08791052e-02 2.34660903e-03 7.18197378e-01 3.12736820e+03 +4.17900000e-04 -1.65360702e-12 7.10439611e-02 5.57596615e-02 9.17727949e-02 6.08796575e-02 2.34654723e-03 7.18197378e-01 3.12736820e+03 +4.18000000e-04 -1.65360702e-12 7.10436670e-02 5.57591246e-02 9.17731366e-02 6.08802084e-02 2.34648558e-03 7.18197378e-01 3.12736820e+03 +4.18100000e-04 -1.65360702e-12 7.10433737e-02 5.57585891e-02 9.17734774e-02 6.08807578e-02 2.34642410e-03 7.18197378e-01 3.12736820e+03 +4.18200000e-04 -1.65360702e-12 7.10430811e-02 5.57580550e-02 9.17738174e-02 6.08813059e-02 2.34636277e-03 7.18197378e-01 3.12744735e+03 +4.18300000e-04 -1.65360702e-12 7.10427892e-02 5.57575222e-02 9.17741565e-02 6.08818526e-02 2.34630159e-03 7.18197378e-01 3.12744735e+03 +4.18400000e-04 -1.65360702e-12 7.10424981e-02 5.57569908e-02 9.17744947e-02 6.08823979e-02 2.34624057e-03 7.18197378e-01 3.12744735e+03 +4.18500000e-04 -1.65360702e-12 7.10422078e-02 5.57564608e-02 9.17748320e-02 6.08829418e-02 2.34617971e-03 7.18197378e-01 3.12744735e+03 +4.18600000e-04 -1.65360702e-12 7.10419182e-02 5.57559321e-02 9.17751685e-02 6.08834844e-02 2.34611900e-03 7.18197378e-01 3.12744735e+03 +4.18700000e-04 -1.65360702e-12 7.10416293e-02 5.57554047e-02 9.17755042e-02 6.08840255e-02 2.34605845e-03 7.18197378e-01 3.12744735e+03 +4.18800000e-04 -1.65360702e-12 7.10413411e-02 5.57548787e-02 9.17758389e-02 6.08845653e-02 2.34599805e-03 7.18197378e-01 3.12744735e+03 +4.18900000e-04 -1.65360702e-12 7.10410537e-02 5.57543541e-02 9.17761729e-02 6.08851037e-02 2.34593780e-03 7.18197378e-01 3.12744735e+03 +4.19000000e-04 -1.65360702e-12 7.10407670e-02 5.57538308e-02 9.17765059e-02 6.08856408e-02 2.34587771e-03 7.18197378e-01 3.12744735e+03 +4.19100000e-04 -1.65360702e-12 7.10404810e-02 5.57533088e-02 9.17768382e-02 6.08861764e-02 2.34581777e-03 7.18197378e-01 3.12744735e+03 +4.19200000e-04 -1.65360702e-12 7.10401958e-02 5.57527881e-02 9.17771695e-02 6.08867107e-02 2.34575798e-03 7.18197378e-01 3.12744735e+03 +4.19300000e-04 -1.65360702e-12 7.10399113e-02 5.57522688e-02 9.17775001e-02 6.08872437e-02 2.34569834e-03 7.18197378e-01 3.12744735e+03 +4.19400000e-04 -1.65360702e-12 7.10396275e-02 5.57517507e-02 9.17778298e-02 6.08877753e-02 2.34563886e-03 7.18197378e-01 3.12744735e+03 +4.19500000e-04 -1.65360702e-12 7.10393444e-02 5.57512340e-02 9.17781586e-02 6.08883055e-02 2.34557953e-03 7.18197378e-01 3.12744735e+03 +4.19600000e-04 -1.65360702e-12 7.10390621e-02 5.57507187e-02 9.17784866e-02 6.08888344e-02 2.34552034e-03 7.18197378e-01 3.12744735e+03 +4.19700000e-04 -1.65360702e-12 7.10387805e-02 5.57502046e-02 9.17788138e-02 6.08893619e-02 2.34546131e-03 7.18197378e-01 3.12744735e+03 +4.19800000e-04 -1.65360702e-12 7.10384996e-02 5.57496919e-02 9.17791402e-02 6.08898881e-02 2.34540243e-03 7.18197378e-01 3.12744735e+03 +4.19900000e-04 -1.65360702e-12 7.10382194e-02 5.57491804e-02 9.17794657e-02 6.08904130e-02 2.34534370e-03 7.18197378e-01 3.12744735e+03 +4.20000000e-04 -1.65360702e-12 7.10379399e-02 5.57486703e-02 9.17797904e-02 6.08909365e-02 2.34528512e-03 7.18197378e-01 3.12744735e+03 +4.20100000e-04 -1.65360702e-12 7.10376611e-02 5.57481614e-02 9.17801142e-02 6.08914587e-02 2.34522669e-03 7.18197378e-01 3.12744735e+03 +4.20200000e-04 -1.65360702e-12 7.10373830e-02 5.57476539e-02 9.17804373e-02 6.08919796e-02 2.34516840e-03 7.18197378e-01 3.12744735e+03 +4.20300000e-04 -1.65360702e-12 7.10371057e-02 5.57471476e-02 9.17807595e-02 6.08924991e-02 2.34511027e-03 7.18197378e-01 3.12744735e+03 +4.20400000e-04 -1.65360702e-12 7.10368290e-02 5.57466427e-02 9.17810809e-02 6.08930173e-02 2.34505228e-03 7.18197378e-01 3.12744735e+03 +4.20500000e-04 -1.65360702e-12 7.10365531e-02 5.57461390e-02 9.17814014e-02 6.08935342e-02 2.34499444e-03 7.18197378e-01 3.12752198e+03 +4.20600000e-04 -1.65360702e-12 7.10362778e-02 5.57456366e-02 9.17817212e-02 6.08940498e-02 2.34493675e-03 7.18197378e-01 3.12752198e+03 +4.20700000e-04 -1.65360702e-12 7.10360033e-02 5.57451355e-02 9.17820401e-02 6.08945641e-02 2.34487920e-03 7.18197378e-01 3.12752198e+03 +4.20800000e-04 -1.65360702e-12 7.10357294e-02 5.57446356e-02 9.17823582e-02 6.08950771e-02 2.34482180e-03 7.18197378e-01 3.12752198e+03 +4.20900000e-04 -1.65360702e-12 7.10354563e-02 5.57441371e-02 9.17826756e-02 6.08955887e-02 2.34476455e-03 7.18197378e-01 3.12752198e+03 +4.21000000e-04 -1.65360702e-12 7.10351838e-02 5.57436398e-02 9.17829921e-02 6.08960991e-02 2.34470744e-03 7.18197378e-01 3.12752198e+03 +4.21100000e-04 -1.65360702e-12 7.10349120e-02 5.57431438e-02 9.17833078e-02 6.08966081e-02 2.34465048e-03 7.18197378e-01 3.12752198e+03 +4.21200000e-04 -1.65360702e-12 7.10346409e-02 5.57426490e-02 9.17836227e-02 6.08971159e-02 2.34459366e-03 7.18197378e-01 3.12752198e+03 +4.21300000e-04 -1.65360702e-12 7.10343706e-02 5.57421555e-02 9.17839367e-02 6.08976224e-02 2.34453698e-03 7.18197378e-01 3.12752198e+03 +4.21400000e-04 -1.65360702e-12 7.10341009e-02 5.57416633e-02 9.17842500e-02 6.08981275e-02 2.34448046e-03 7.18197378e-01 3.12752198e+03 +4.21500000e-04 -1.65360702e-12 7.10338318e-02 5.57411723e-02 9.17845625e-02 6.08986314e-02 2.34442407e-03 7.18197378e-01 3.12752198e+03 +4.21600000e-04 -1.65360702e-12 7.10335635e-02 5.57406825e-02 9.17848742e-02 6.08991340e-02 2.34436783e-03 7.18197378e-01 3.12752198e+03 +4.21700000e-04 -1.65360702e-12 7.10332959e-02 5.57401941e-02 9.17851851e-02 6.08996354e-02 2.34431173e-03 7.18197378e-01 3.12752198e+03 +4.21800000e-04 -1.65360702e-12 7.10330289e-02 5.57397068e-02 9.17854952e-02 6.09001354e-02 2.34425578e-03 7.18197378e-01 3.12752198e+03 +4.21900000e-04 -1.65360702e-12 7.10327626e-02 5.57392208e-02 9.17858045e-02 6.09006342e-02 2.34419996e-03 7.18197378e-01 3.12752198e+03 +4.22000000e-04 -1.65360702e-12 7.10324970e-02 5.57387361e-02 9.17861131e-02 6.09011317e-02 2.34414429e-03 7.18197378e-01 3.12752198e+03 +4.22100000e-04 -1.65360702e-12 7.10322320e-02 5.57382525e-02 9.17864208e-02 6.09016280e-02 2.34408876e-03 7.18197378e-01 3.12752198e+03 +4.22200000e-04 -1.65360702e-12 7.10319678e-02 5.57377703e-02 9.17867278e-02 6.09021230e-02 2.34403337e-03 7.18197378e-01 3.12752198e+03 +4.22300000e-04 -1.65360702e-12 7.10317042e-02 5.57372892e-02 9.17870340e-02 6.09026167e-02 2.34397813e-03 7.18197378e-01 3.12752198e+03 +4.22400000e-04 -1.65360702e-12 7.10314413e-02 5.57368094e-02 9.17873393e-02 6.09031092e-02 2.34392302e-03 7.18197378e-01 3.12752198e+03 +4.22500000e-04 -1.65360702e-12 7.10311790e-02 5.57363307e-02 9.17876440e-02 6.09036004e-02 2.34386805e-03 7.18197378e-01 3.12752198e+03 +4.22600000e-04 -1.65360702e-12 7.10309174e-02 5.57358534e-02 9.17879478e-02 6.09040903e-02 2.34381323e-03 7.18197378e-01 3.12752198e+03 +4.22700000e-04 -1.65360702e-12 7.10306565e-02 5.57353772e-02 9.17882509e-02 6.09045791e-02 2.34375854e-03 7.18197378e-01 3.12752198e+03 +4.22800000e-04 -1.65360702e-12 7.10303962e-02 5.57349022e-02 9.17885532e-02 6.09050665e-02 2.34370399e-03 7.18197378e-01 3.12759235e+03 +4.22900000e-04 -1.65360702e-12 7.10301367e-02 5.57344285e-02 9.17888547e-02 6.09055528e-02 2.34364959e-03 7.18197378e-01 3.12759235e+03 +4.23000000e-04 -1.65360702e-12 7.10298777e-02 5.57339559e-02 9.17891554e-02 6.09060378e-02 2.34359532e-03 7.18197378e-01 3.12759235e+03 +4.23100000e-04 -1.65360702e-12 7.10296194e-02 5.57334846e-02 9.17894554e-02 6.09065215e-02 2.34354118e-03 7.18197378e-01 3.12759235e+03 +4.23200000e-04 -1.65360702e-12 7.10293618e-02 5.57330144e-02 9.17897546e-02 6.09070040e-02 2.34348719e-03 7.18197378e-01 3.12759235e+03 +4.23300000e-04 -1.65360702e-12 7.10291049e-02 5.57325455e-02 9.17900531e-02 6.09074853e-02 2.34343333e-03 7.18197378e-01 3.12759235e+03 +4.23400000e-04 -1.65360702e-12 7.10288485e-02 5.57320778e-02 9.17903508e-02 6.09079654e-02 2.34337961e-03 7.18197378e-01 3.12759235e+03 +4.23500000e-04 -1.65360702e-12 7.10285929e-02 5.57316112e-02 9.17906477e-02 6.09084443e-02 2.34332603e-03 7.18197378e-01 3.12759235e+03 +4.23600000e-04 -1.65360702e-12 7.10283379e-02 5.57311459e-02 9.17909439e-02 6.09089219e-02 2.34327258e-03 7.18197378e-01 3.12759235e+03 +4.23700000e-04 -1.65360702e-12 7.10280835e-02 5.57306817e-02 9.17912394e-02 6.09093983e-02 2.34321927e-03 7.18197378e-01 3.12759235e+03 +4.23800000e-04 -1.65360702e-12 7.10278298e-02 5.57302187e-02 9.17915340e-02 6.09098735e-02 2.34316610e-03 7.18197378e-01 3.12759235e+03 +4.23900000e-04 -1.65360702e-12 7.10275767e-02 5.57297569e-02 9.17918279e-02 6.09103475e-02 2.34311306e-03 7.18197378e-01 3.12759235e+03 +4.24000000e-04 -1.65360702e-12 7.10273243e-02 5.57292963e-02 9.17921211e-02 6.09108203e-02 2.34306016e-03 7.18197378e-01 3.12759235e+03 +4.24100000e-04 -1.65360702e-12 7.10270725e-02 5.57288368e-02 9.17924135e-02 6.09112919e-02 2.34300739e-03 7.18197378e-01 3.12759235e+03 +4.24200000e-04 -1.65360702e-12 7.10268214e-02 5.57283785e-02 9.17927052e-02 6.09117623e-02 2.34295475e-03 7.18197378e-01 3.12759235e+03 +4.24300000e-04 -1.65360702e-12 7.10265709e-02 5.57279214e-02 9.17929962e-02 6.09122315e-02 2.34290225e-03 7.18197378e-01 3.12759235e+03 +4.24400000e-04 -1.65360702e-12 7.10263210e-02 5.57274654e-02 9.17932864e-02 6.09126995e-02 2.34284988e-03 7.18197378e-01 3.12759235e+03 +4.24500000e-04 -1.65360702e-12 7.10260718e-02 5.57270107e-02 9.17935758e-02 6.09131663e-02 2.34279765e-03 7.18197378e-01 3.12759235e+03 +4.24600000e-04 -1.65360702e-12 7.10258232e-02 5.57265570e-02 9.17938645e-02 6.09136319e-02 2.34274555e-03 7.18197378e-01 3.12759235e+03 +4.24700000e-04 -1.65360702e-12 7.10255752e-02 5.57261045e-02 9.17941525e-02 6.09140963e-02 2.34269358e-03 7.18197378e-01 3.12759235e+03 +4.24800000e-04 -1.65360702e-12 7.10253279e-02 5.57256532e-02 9.17944398e-02 6.09145595e-02 2.34264174e-03 7.18197378e-01 3.12759235e+03 +4.24900000e-04 -1.65360702e-12 7.10250812e-02 5.57252031e-02 9.17947263e-02 6.09150216e-02 2.34259004e-03 7.18197378e-01 3.12759235e+03 +4.25000000e-04 -1.65360702e-12 7.10248351e-02 5.57247540e-02 9.17950120e-02 6.09154825e-02 2.34253847e-03 7.18197378e-01 3.12759235e+03 +4.25100000e-04 -1.65360702e-12 7.10245897e-02 5.57243062e-02 9.17952971e-02 6.09159422e-02 2.34248702e-03 7.18197378e-01 3.12765869e+03 +4.25200000e-04 -1.65360702e-12 7.10243448e-02 5.57238594e-02 9.17955814e-02 6.09164007e-02 2.34243571e-03 7.18197378e-01 3.12765869e+03 +4.25300000e-04 -1.65360702e-12 7.10241006e-02 5.57234138e-02 9.17958650e-02 6.09168581e-02 2.34238454e-03 7.18197378e-01 3.12765869e+03 +4.25400000e-04 -1.65360702e-12 7.10238570e-02 5.57229694e-02 9.17961479e-02 6.09173143e-02 2.34233349e-03 7.18197378e-01 3.12765869e+03 +4.25500000e-04 -1.65360702e-12 7.10236141e-02 5.57225261e-02 9.17964301e-02 6.09177694e-02 2.34228257e-03 7.18197378e-01 3.12765869e+03 +4.25600000e-04 -1.65360702e-12 7.10233717e-02 5.57220839e-02 9.17967115e-02 6.09182233e-02 2.34223178e-03 7.18197378e-01 3.12765869e+03 +4.25700000e-04 -1.65360702e-12 7.10231300e-02 5.57216428e-02 9.17969922e-02 6.09186760e-02 2.34218112e-03 7.18197378e-01 3.12765869e+03 +4.25800000e-04 -1.65360702e-12 7.10228889e-02 5.57212028e-02 9.17972722e-02 6.09191276e-02 2.34213059e-03 7.18197378e-01 3.12765869e+03 +4.25900000e-04 -1.65360702e-12 7.10226484e-02 5.57207640e-02 9.17975515e-02 6.09195780e-02 2.34208018e-03 7.18197378e-01 3.12765869e+03 +4.26000000e-04 -1.65360702e-12 7.10224085e-02 5.57203263e-02 9.17978301e-02 6.09200273e-02 2.34202991e-03 7.18197378e-01 3.12765869e+03 +4.26100000e-04 -1.65360702e-12 7.10221692e-02 5.57198897e-02 9.17981080e-02 6.09204754e-02 2.34197976e-03 7.18197378e-01 3.12765869e+03 +4.26200000e-04 -1.65360702e-12 7.10219306e-02 5.57194543e-02 9.17983851e-02 6.09209224e-02 2.34192975e-03 7.18197378e-01 3.12765869e+03 +4.26300000e-04 -1.65360702e-12 7.10216925e-02 5.57190199e-02 9.17986616e-02 6.09213683e-02 2.34187985e-03 7.18197378e-01 3.12765869e+03 +4.26400000e-04 -1.65360702e-12 7.10214551e-02 5.57185867e-02 9.17989373e-02 6.09218130e-02 2.34183009e-03 7.18197378e-01 3.12765869e+03 +4.26500000e-04 -1.65360702e-12 7.10212182e-02 5.57181545e-02 9.17992124e-02 6.09222566e-02 2.34178045e-03 7.18197378e-01 3.12765869e+03 +4.26600000e-04 -1.65360702e-12 7.10209820e-02 5.57177235e-02 9.17994867e-02 6.09226991e-02 2.34173094e-03 7.18197378e-01 3.12765869e+03 +4.26700000e-04 -1.65360702e-12 7.10207463e-02 5.57172935e-02 9.17997604e-02 6.09231404e-02 2.34168156e-03 7.18197378e-01 3.12765869e+03 +4.26800000e-04 -1.65360702e-12 7.10205113e-02 5.57168647e-02 9.18000333e-02 6.09235806e-02 2.34163230e-03 7.18197378e-01 3.12765869e+03 +4.26900000e-04 -1.65360702e-12 7.10202768e-02 5.57164369e-02 9.18003056e-02 6.09240197e-02 2.34158317e-03 7.18197378e-01 3.12765869e+03 +4.27000000e-04 -1.65360702e-12 7.10200430e-02 5.57160102e-02 9.18005771e-02 6.09244577e-02 2.34153416e-03 7.18197378e-01 3.12765869e+03 +4.27100000e-04 -1.65360702e-12 7.10198097e-02 5.57155847e-02 9.18008480e-02 6.09248945e-02 2.34148527e-03 7.18197378e-01 3.12765869e+03 +4.27200000e-04 -1.65360702e-12 7.10195770e-02 5.57151602e-02 9.18011181e-02 6.09253303e-02 2.34143652e-03 7.18197378e-01 3.12765869e+03 +4.27300000e-04 -1.65360702e-12 7.10193450e-02 5.57147368e-02 9.18013876e-02 6.09257649e-02 2.34138788e-03 7.18197378e-01 3.12765869e+03 +4.27400000e-04 -1.65360702e-12 7.10191135e-02 5.57143144e-02 9.18016564e-02 6.09261984e-02 2.34133937e-03 7.18197378e-01 3.12772123e+03 +4.27500000e-04 -1.65360702e-12 7.10188826e-02 5.57138932e-02 9.18019245e-02 6.09266308e-02 2.34129098e-03 7.18197378e-01 3.12772123e+03 +4.27600000e-04 -1.65360702e-12 7.10186523e-02 5.57134730e-02 9.18021920e-02 6.09270622e-02 2.34124272e-03 7.18197378e-01 3.12772123e+03 +4.27700000e-04 -1.65360702e-12 7.10184226e-02 5.57130539e-02 9.18024587e-02 6.09274924e-02 2.34119458e-03 7.18197378e-01 3.12772123e+03 +4.27800000e-04 -1.65360702e-12 7.10181935e-02 5.57126359e-02 9.18027248e-02 6.09279215e-02 2.34114656e-03 7.18197378e-01 3.12772123e+03 +4.27900000e-04 -1.65360702e-12 7.10179649e-02 5.57122189e-02 9.18029901e-02 6.09283495e-02 2.34109866e-03 7.18197378e-01 3.12772123e+03 +4.28000000e-04 -1.65360702e-12 7.10177369e-02 5.57118030e-02 9.18032549e-02 6.09287765e-02 2.34105089e-03 7.18197378e-01 3.12772123e+03 +4.28100000e-04 -1.65360702e-12 7.10175095e-02 5.57113881e-02 9.18035189e-02 6.09292023e-02 2.34100324e-03 7.18197378e-01 3.12772123e+03 +4.28200000e-04 -1.65360702e-12 7.10172827e-02 5.57109744e-02 9.18037822e-02 6.09296271e-02 2.34095571e-03 7.18197378e-01 3.12772123e+03 +4.28300000e-04 -1.65360702e-12 7.10170565e-02 5.57105616e-02 9.18040449e-02 6.09300508e-02 2.34090830e-03 7.18197378e-01 3.12772123e+03 +4.28400000e-04 -1.65360702e-12 7.10168309e-02 5.57101499e-02 9.18043069e-02 6.09304734e-02 2.34086101e-03 7.18197378e-01 3.12772123e+03 +4.28500000e-04 -1.65360702e-12 7.10166058e-02 5.57097393e-02 9.18045683e-02 6.09308949e-02 2.34081384e-03 7.18197378e-01 3.12772123e+03 +4.28600000e-04 -1.65360702e-12 7.10163813e-02 5.57093297e-02 9.18048290e-02 6.09313154e-02 2.34076679e-03 7.18197378e-01 3.12772123e+03 +4.28700000e-04 -1.65360702e-12 7.10161573e-02 5.57089212e-02 9.18050890e-02 6.09317348e-02 2.34071986e-03 7.18197378e-01 3.12772123e+03 +4.28800000e-04 -1.65360702e-12 7.10159340e-02 5.57085137e-02 9.18053483e-02 6.09321531e-02 2.34067305e-03 7.18197378e-01 3.12772123e+03 +4.28900000e-04 -1.65360702e-12 7.10157112e-02 5.57081072e-02 9.18056070e-02 6.09325703e-02 2.34062636e-03 7.18197378e-01 3.12772123e+03 +4.29000000e-04 -1.65360702e-12 7.10154889e-02 5.57077018e-02 9.18058651e-02 6.09329865e-02 2.34057979e-03 7.18197378e-01 3.12772123e+03 +4.29100000e-04 -1.65360702e-12 7.10152673e-02 5.57072974e-02 9.18061224e-02 6.09334017e-02 2.34053334e-03 7.18197378e-01 3.12772123e+03 +4.29200000e-04 -1.65360702e-12 7.10150462e-02 5.57068941e-02 9.18063792e-02 6.09338157e-02 2.34048701e-03 7.18197378e-01 3.12772123e+03 +4.29300000e-04 -1.65360702e-12 7.10148256e-02 5.57064918e-02 9.18066352e-02 6.09342287e-02 2.34044079e-03 7.18197378e-01 3.12772123e+03 +4.29400000e-04 -1.65360702e-12 7.10146056e-02 5.57060905e-02 9.18068906e-02 6.09346407e-02 2.34039469e-03 7.18197378e-01 3.12772123e+03 +4.29500000e-04 -1.65360702e-12 7.10143862e-02 5.57056902e-02 9.18071454e-02 6.09350516e-02 2.34034871e-03 7.18197378e-01 3.12772123e+03 +4.29600000e-04 -1.65360702e-12 7.10141674e-02 5.57052909e-02 9.18073995e-02 6.09354615e-02 2.34030285e-03 7.18197378e-01 3.12772123e+03 +4.29700000e-04 -1.65360702e-12 7.10139491e-02 5.57048927e-02 9.18076530e-02 6.09358703e-02 2.34025710e-03 7.18197378e-01 3.12778020e+03 +4.29800000e-04 -1.65360702e-12 7.10137313e-02 5.57044955e-02 9.18079058e-02 6.09362781e-02 2.34021147e-03 7.18197378e-01 3.12778020e+03 +4.29900000e-04 -1.65360702e-12 7.10135141e-02 5.57040993e-02 9.18081579e-02 6.09366848e-02 2.34016596e-03 7.18197378e-01 3.12778020e+03 +4.30000000e-04 -1.65360702e-12 7.10132975e-02 5.57037041e-02 9.18084095e-02 6.09370905e-02 2.34012056e-03 7.18197378e-01 3.12778020e+03 +4.30100000e-04 -1.65360702e-12 7.10130814e-02 5.57033099e-02 9.18086603e-02 6.09374952e-02 2.34007528e-03 7.18197378e-01 3.12778020e+03 +4.30200000e-04 -1.65360702e-12 7.10128659e-02 5.57029167e-02 9.18089106e-02 6.09378988e-02 2.34003011e-03 7.18197378e-01 3.12778020e+03 +4.30300000e-04 -1.65360702e-12 7.10126509e-02 5.57025245e-02 9.18091602e-02 6.09383015e-02 2.33998506e-03 7.18197378e-01 3.12778020e+03 +4.30400000e-04 -1.65360702e-12 7.10124364e-02 5.57021334e-02 9.18094092e-02 6.09387030e-02 2.33994012e-03 7.18197378e-01 3.12778020e+03 +4.30500000e-04 -1.65360702e-12 7.10122226e-02 5.57017432e-02 9.18096575e-02 6.09391036e-02 2.33989530e-03 7.18197378e-01 3.12778020e+03 +4.30600000e-04 -1.65360702e-12 7.10120092e-02 5.57013540e-02 9.18099052e-02 6.09395032e-02 2.33985059e-03 7.18197378e-01 3.12778020e+03 +4.30700000e-04 -1.65360702e-12 7.10117964e-02 5.57009658e-02 9.18101523e-02 6.09399017e-02 2.33980600e-03 7.18197378e-01 3.12778020e+03 +4.30800000e-04 -1.65360702e-12 7.10115841e-02 5.57005786e-02 9.18103987e-02 6.09402992e-02 2.33976152e-03 7.18197378e-01 3.12778020e+03 +4.30900000e-04 -1.65360702e-12 7.10113724e-02 5.57001924e-02 9.18106445e-02 6.09406957e-02 2.33971715e-03 7.18197378e-01 3.12778020e+03 +4.31000000e-04 -1.65360702e-12 7.10111612e-02 5.56998072e-02 9.18108897e-02 6.09410912e-02 2.33967290e-03 7.18197378e-01 3.12778020e+03 +4.31100000e-04 -1.65360702e-12 7.10109506e-02 5.56994229e-02 9.18111342e-02 6.09414856e-02 2.33962876e-03 7.18197378e-01 3.12778020e+03 +4.31200000e-04 -1.65360702e-12 7.10107405e-02 5.56990397e-02 9.18113782e-02 6.09418791e-02 2.33958473e-03 7.18197378e-01 3.12778020e+03 +4.31300000e-04 -1.65360702e-12 7.10105309e-02 5.56986574e-02 9.18116215e-02 6.09422716e-02 2.33954081e-03 7.18197378e-01 3.12778020e+03 +4.31400000e-04 -1.65360702e-12 7.10103219e-02 5.56982761e-02 9.18118642e-02 6.09426630e-02 2.33949701e-03 7.18197378e-01 3.12778020e+03 +4.31500000e-04 -1.65360702e-12 7.10101133e-02 5.56978957e-02 9.18121062e-02 6.09430535e-02 2.33945331e-03 7.18197378e-01 3.12778020e+03 +4.31600000e-04 -1.65360702e-12 7.10099054e-02 5.56975164e-02 9.18123477e-02 6.09434430e-02 2.33940973e-03 7.18197378e-01 3.12778020e+03 +4.31700000e-04 -1.65360702e-12 7.10096979e-02 5.56971380e-02 9.18125885e-02 6.09438315e-02 2.33936626e-03 7.18197378e-01 3.12778020e+03 +4.31800000e-04 -1.65360702e-12 7.10094910e-02 5.56967605e-02 9.18128287e-02 6.09442190e-02 2.33932290e-03 7.18197378e-01 3.12778020e+03 +4.31900000e-04 -1.65360702e-12 7.10092846e-02 5.56963841e-02 9.18130684e-02 6.09446055e-02 2.33927965e-03 7.18197378e-01 3.12778020e+03 +4.32000000e-04 -1.65360702e-12 7.10090787e-02 5.56960086e-02 9.18133073e-02 6.09449910e-02 2.33923651e-03 7.18197378e-01 3.12783579e+03 +4.32100000e-04 -1.65360702e-12 7.10088734e-02 5.56956340e-02 9.18135457e-02 6.09453755e-02 2.33919348e-03 7.18197378e-01 3.12783579e+03 +4.32200000e-04 -1.65360702e-12 7.10086686e-02 5.56952604e-02 9.18137835e-02 6.09457591e-02 2.33915056e-03 7.18197378e-01 3.12783579e+03 +4.32300000e-04 -1.65360702e-12 7.10084643e-02 5.56948878e-02 9.18140207e-02 6.09461417e-02 2.33910775e-03 7.18197378e-01 3.12783579e+03 +4.32400000e-04 -1.65360702e-12 7.10082605e-02 5.56945161e-02 9.18142572e-02 6.09465233e-02 2.33906505e-03 7.18197378e-01 3.12783579e+03 +4.32500000e-04 -1.65360702e-12 7.10080572e-02 5.56941453e-02 9.18144932e-02 6.09469039e-02 2.33902246e-03 7.18197378e-01 3.12783579e+03 +4.32600000e-04 -1.65360702e-12 7.10078545e-02 5.56937755e-02 9.18147286e-02 6.09472836e-02 2.33897998e-03 7.18197378e-01 3.12783579e+03 +4.32700000e-04 -1.65360702e-12 7.10076523e-02 5.56934067e-02 9.18149633e-02 6.09476623e-02 2.33893760e-03 7.18197378e-01 3.12783579e+03 +4.32800000e-04 -1.65360702e-12 7.10074506e-02 5.56930388e-02 9.18151975e-02 6.09480400e-02 2.33889534e-03 7.18197378e-01 3.12783579e+03 +4.32900000e-04 -1.65360702e-12 7.10072494e-02 5.56926718e-02 9.18154311e-02 6.09484168e-02 2.33885318e-03 7.18197378e-01 3.12783579e+03 +4.33000000e-04 -1.65360702e-12 7.10070487e-02 5.56923058e-02 9.18156640e-02 6.09487926e-02 2.33881112e-03 7.18197378e-01 3.12783579e+03 +4.33100000e-04 -1.65360702e-12 7.10068485e-02 5.56919407e-02 9.18158964e-02 6.09491674e-02 2.33876918e-03 7.18197378e-01 3.12783579e+03 +4.33200000e-04 -1.65360702e-12 7.10066488e-02 5.56915765e-02 9.18161282e-02 6.09495413e-02 2.33872734e-03 7.18197378e-01 3.12783579e+03 +4.33300000e-04 -1.65360702e-12 7.10064497e-02 5.56912133e-02 9.18163594e-02 6.09499142e-02 2.33868561e-03 7.18197378e-01 3.12783579e+03 +4.33400000e-04 -1.65360702e-12 7.10062510e-02 5.56908509e-02 9.18165900e-02 6.09502862e-02 2.33864399e-03 7.18197378e-01 3.12783579e+03 +4.33500000e-04 -1.65360702e-12 7.10060529e-02 5.56904896e-02 9.18168200e-02 6.09506573e-02 2.33860247e-03 7.18197378e-01 3.12783579e+03 +4.33600000e-04 -1.65360702e-12 7.10058553e-02 5.56901291e-02 9.18170494e-02 6.09510274e-02 2.33856105e-03 7.18197378e-01 3.12783579e+03 +4.33700000e-04 -1.65360702e-12 7.10056581e-02 5.56897695e-02 9.18172782e-02 6.09513965e-02 2.33851975e-03 7.18197378e-01 3.12783579e+03 +4.33800000e-04 -1.65360702e-12 7.10054615e-02 5.56894109e-02 9.18175065e-02 6.09517647e-02 2.33847854e-03 7.18197378e-01 3.12783579e+03 +4.33900000e-04 -1.65360702e-12 7.10052654e-02 5.56890532e-02 9.18177341e-02 6.09521320e-02 2.33843745e-03 7.18197378e-01 3.12783579e+03 +4.34000000e-04 -1.65360702e-12 7.10050697e-02 5.56886964e-02 9.18179612e-02 6.09524983e-02 2.33839645e-03 7.18197378e-01 3.12783579e+03 +4.34100000e-04 -1.65360702e-12 7.10048746e-02 5.56883405e-02 9.18181877e-02 6.09528637e-02 2.33835557e-03 7.18197378e-01 3.12783579e+03 +4.34200000e-04 -1.65360702e-12 7.10046800e-02 5.56879855e-02 9.18184137e-02 6.09532282e-02 2.33831478e-03 7.18197378e-01 3.12783579e+03 +4.34300000e-04 -1.65360702e-12 7.10044858e-02 5.56876314e-02 9.18186390e-02 6.09535917e-02 2.33827410e-03 7.18197378e-01 3.12788820e+03 +4.34400000e-04 -1.65360702e-12 7.10042922e-02 5.56872783e-02 9.18188638e-02 6.09539543e-02 2.33823353e-03 7.18197378e-01 3.12788820e+03 +4.34500000e-04 -1.65360702e-12 7.10040990e-02 5.56869260e-02 9.18190880e-02 6.09543160e-02 2.33819306e-03 7.18197378e-01 3.12788820e+03 +4.34600000e-04 -1.65360702e-12 7.10039064e-02 5.56865746e-02 9.18193117e-02 6.09546768e-02 2.33815269e-03 7.18197378e-01 3.12788820e+03 +4.34700000e-04 -1.65360702e-12 7.10037142e-02 5.56862241e-02 9.18195347e-02 6.09550367e-02 2.33811242e-03 7.18197378e-01 3.12788820e+03 +4.34800000e-04 -1.65360702e-12 7.10035225e-02 5.56858746e-02 9.18197572e-02 6.09553956e-02 2.33807226e-03 7.18197378e-01 3.12788820e+03 +4.34900000e-04 -1.65360702e-12 7.10033313e-02 5.56855259e-02 9.18199791e-02 6.09557536e-02 2.33803220e-03 7.18197378e-01 3.12788820e+03 +4.35000000e-04 -1.65360702e-12 7.10031406e-02 5.56851781e-02 9.18202005e-02 6.09561107e-02 2.33799224e-03 7.18197378e-01 3.12788820e+03 +4.35100000e-04 -1.65360702e-12 7.10029504e-02 5.56848312e-02 9.18204213e-02 6.09564669e-02 2.33795238e-03 7.18197378e-01 3.12788820e+03 +4.35200000e-04 -1.65360702e-12 7.10027607e-02 5.56844851e-02 9.18206415e-02 6.09568222e-02 2.33791262e-03 7.18197378e-01 3.12788820e+03 +4.35300000e-04 -1.65360702e-12 7.10025714e-02 5.56841400e-02 9.18208612e-02 6.09571765e-02 2.33787297e-03 7.18197378e-01 3.12788820e+03 +4.35400000e-04 -1.65360702e-12 7.10023827e-02 5.56837957e-02 9.18210803e-02 6.09575300e-02 2.33783342e-03 7.18197378e-01 3.12788820e+03 +4.35500000e-04 -1.65360702e-12 7.10021944e-02 5.56834524e-02 9.18212988e-02 6.09578826e-02 2.33779396e-03 7.18197378e-01 3.12788820e+03 +4.35600000e-04 -1.65360702e-12 7.10020066e-02 5.56831098e-02 9.18215168e-02 6.09582343e-02 2.33775461e-03 7.18197378e-01 3.12788820e+03 +4.35700000e-04 -1.65360702e-12 7.10018193e-02 5.56827682e-02 9.18217343e-02 6.09585850e-02 2.33771536e-03 7.18197378e-01 3.12788820e+03 +4.35800000e-04 -1.65360702e-12 7.10016324e-02 5.56824275e-02 9.18219512e-02 6.09589349e-02 2.33767621e-03 7.18197378e-01 3.12788820e+03 +4.35900000e-04 -1.65360702e-12 7.10014460e-02 5.56820876e-02 9.18221675e-02 6.09592839e-02 2.33763716e-03 7.18197378e-01 3.12788820e+03 +4.36000000e-04 -1.65360702e-12 7.10012601e-02 5.56817485e-02 9.18223833e-02 6.09596320e-02 2.33759821e-03 7.18197378e-01 3.12788820e+03 +4.36100000e-04 -1.65360702e-12 7.10010747e-02 5.56814104e-02 9.18225985e-02 6.09599792e-02 2.33755935e-03 7.18197378e-01 3.12788820e+03 +4.36200000e-04 -1.65360702e-12 7.10008898e-02 5.56810731e-02 9.18228132e-02 6.09603256e-02 2.33752060e-03 7.18197378e-01 3.12788820e+03 +4.36300000e-04 -1.65360702e-12 7.10007053e-02 5.56807367e-02 9.18230273e-02 6.09606710e-02 2.33748195e-03 7.18197378e-01 3.12788820e+03 +4.36400000e-04 -1.65360702e-12 7.10005213e-02 5.56804011e-02 9.18232409e-02 6.09610156e-02 2.33744339e-03 7.18197378e-01 3.12788820e+03 +4.36500000e-04 -1.65360702e-12 7.10003377e-02 5.56800664e-02 9.18234539e-02 6.09613592e-02 2.33740493e-03 7.18197378e-01 3.12788820e+03 +4.36600000e-04 -1.65360702e-12 7.10001546e-02 5.56797325e-02 9.18236664e-02 6.09617021e-02 2.33736657e-03 7.18197378e-01 3.12788820e+03 +4.36700000e-04 -1.65360702e-12 7.09999720e-02 5.56793995e-02 9.18238783e-02 6.09620440e-02 2.33732831e-03 7.18197378e-01 3.12793760e+03 +4.36800000e-04 -1.65360702e-12 7.09997899e-02 5.56790673e-02 9.18240897e-02 6.09623851e-02 2.33729015e-03 7.18197378e-01 3.12793760e+03 +4.36900000e-04 -1.65360702e-12 7.09996082e-02 5.56787360e-02 9.18243006e-02 6.09627252e-02 2.33725208e-03 7.18197378e-01 3.12793760e+03 +4.37000000e-04 -1.65360702e-12 7.09994270e-02 5.56784055e-02 9.18245109e-02 6.09630646e-02 2.33721411e-03 7.18197378e-01 3.12793760e+03 +4.37100000e-04 -1.65360702e-12 7.09992462e-02 5.56780759e-02 9.18247207e-02 6.09634030e-02 2.33717624e-03 7.18197378e-01 3.12793760e+03 +4.37200000e-04 -1.65360702e-12 7.09990659e-02 5.56777471e-02 9.18249300e-02 6.09637406e-02 2.33713846e-03 7.18197378e-01 3.12793760e+03 +4.37300000e-04 -1.65360702e-12 7.09988861e-02 5.56774192e-02 9.18251387e-02 6.09640774e-02 2.33710078e-03 7.18197378e-01 3.12793760e+03 +4.37400000e-04 -1.65360702e-12 7.09987067e-02 5.56770921e-02 9.18253469e-02 6.09644132e-02 2.33706320e-03 7.18197378e-01 3.12793760e+03 +4.37500000e-04 -1.65360702e-12 7.09985278e-02 5.56767658e-02 9.18255545e-02 6.09647483e-02 2.33702571e-03 7.18197378e-01 3.12793760e+03 +4.37600000e-04 -1.65360702e-12 7.09983494e-02 5.56764404e-02 9.18257617e-02 6.09650824e-02 2.33698831e-03 7.18197378e-01 3.12793760e+03 +4.37700000e-04 -1.65360702e-12 7.09981713e-02 5.56761158e-02 9.18259683e-02 6.09654157e-02 2.33695102e-03 7.18197378e-01 3.12793760e+03 +4.37800000e-04 -1.65360702e-12 7.09979938e-02 5.56757920e-02 9.18261743e-02 6.09657482e-02 2.33691382e-03 7.18197378e-01 3.12793760e+03 +4.37900000e-04 -1.65360702e-12 7.09978167e-02 5.56754690e-02 9.18263799e-02 6.09660798e-02 2.33687671e-03 7.18197378e-01 3.12793760e+03 +4.38000000e-04 -1.65360702e-12 7.09976400e-02 5.56751469e-02 9.18265849e-02 6.09664106e-02 2.33683970e-03 7.18197378e-01 3.12793760e+03 +4.38100000e-04 -1.65360702e-12 7.09974638e-02 5.56748256e-02 9.18267894e-02 6.09667405e-02 2.33680278e-03 7.18197378e-01 3.12793760e+03 +4.38200000e-04 -1.65360702e-12 7.09972881e-02 5.56745051e-02 9.18269934e-02 6.09670696e-02 2.33676595e-03 7.18197378e-01 3.12793760e+03 +4.38300000e-04 -1.65360702e-12 7.09971128e-02 5.56741855e-02 9.18271968e-02 6.09673978e-02 2.33672922e-03 7.18197378e-01 3.12793760e+03 +4.38400000e-04 -1.65360702e-12 7.09969379e-02 5.56738666e-02 9.18273998e-02 6.09677253e-02 2.33669259e-03 7.18197378e-01 3.12793760e+03 +4.38500000e-04 -1.65360702e-12 7.09967635e-02 5.56735486e-02 9.18276022e-02 6.09680518e-02 2.33665604e-03 7.18197378e-01 3.12793760e+03 +4.38600000e-04 -1.65360702e-12 7.09965896e-02 5.56732313e-02 9.18278041e-02 6.09683776e-02 2.33661959e-03 7.18197378e-01 3.12793760e+03 +4.38700000e-04 -1.65360702e-12 7.09964160e-02 5.56729149e-02 9.18280055e-02 6.09687025e-02 2.33658324e-03 7.18197378e-01 3.12793760e+03 +4.38800000e-04 -1.65360702e-12 7.09962429e-02 5.56725993e-02 9.18282063e-02 6.09690266e-02 2.33654697e-03 7.18197378e-01 3.12793760e+03 +4.38900000e-04 -1.65360702e-12 7.09960703e-02 5.56722845e-02 9.18284067e-02 6.09693498e-02 2.33651080e-03 7.18197378e-01 3.12793760e+03 +4.39000000e-04 -1.65360702e-12 7.09958981e-02 5.56719705e-02 9.18286066e-02 6.09696722e-02 2.33647472e-03 7.18197378e-01 3.12798418e+03 +4.39100000e-04 -1.65360702e-12 7.09957263e-02 5.56716573e-02 9.18288059e-02 6.09699938e-02 2.33643873e-03 7.18197378e-01 3.12798418e+03 +4.39200000e-04 -1.65360702e-12 7.09955550e-02 5.56713449e-02 9.18290047e-02 6.09703146e-02 2.33640284e-03 7.18197378e-01 3.12798418e+03 +4.39300000e-04 -1.65360702e-12 7.09953841e-02 5.56710333e-02 9.18292030e-02 6.09706346e-02 2.33636704e-03 7.18197378e-01 3.12798418e+03 +4.39400000e-04 -1.65360702e-12 7.09952137e-02 5.56707225e-02 9.18294008e-02 6.09709538e-02 2.33633132e-03 7.18197378e-01 3.12798418e+03 +4.39500000e-04 -1.65360702e-12 7.09950437e-02 5.56704125e-02 9.18295982e-02 6.09712721e-02 2.33629570e-03 7.18197378e-01 3.12798418e+03 +4.39600000e-04 -1.65360702e-12 7.09948741e-02 5.56701033e-02 9.18297950e-02 6.09715896e-02 2.33626017e-03 7.18197378e-01 3.12798418e+03 +4.39700000e-04 -1.65360702e-12 7.09947049e-02 5.56697949e-02 9.18299913e-02 6.09719063e-02 2.33622473e-03 7.18197378e-01 3.12798418e+03 +4.39800000e-04 -1.65360702e-12 7.09945362e-02 5.56694872e-02 9.18301871e-02 6.09722222e-02 2.33618938e-03 7.18197378e-01 3.12798418e+03 +4.39900000e-04 -1.65360702e-12 7.09943679e-02 5.56691804e-02 9.18303824e-02 6.09725373e-02 2.33615412e-03 7.18197378e-01 3.12798418e+03 +4.40000000e-04 -1.65360702e-12 7.09942001e-02 5.56688743e-02 9.18305772e-02 6.09728516e-02 2.33611895e-03 7.18197378e-01 3.12798418e+03 +4.40100000e-04 -1.65360702e-12 7.09940326e-02 5.56685690e-02 9.18307715e-02 6.09731651e-02 2.33608387e-03 7.18197378e-01 3.12798418e+03 +4.40200000e-04 -1.65360702e-12 7.09938656e-02 5.56682645e-02 9.18309653e-02 6.09734778e-02 2.33604888e-03 7.18197378e-01 3.12798418e+03 +4.40300000e-04 -1.65360702e-12 7.09936991e-02 5.56679608e-02 9.18311586e-02 6.09737897e-02 2.33601398e-03 7.18197378e-01 3.12798418e+03 +4.40400000e-04 -1.65360702e-12 7.09935329e-02 5.56676578e-02 9.18313514e-02 6.09741008e-02 2.33597917e-03 7.18197378e-01 3.12798418e+03 +4.40500000e-04 -1.65360702e-12 7.09933672e-02 5.56673556e-02 9.18315437e-02 6.09744112e-02 2.33594445e-03 7.18197378e-01 3.12798418e+03 +4.40600000e-04 -1.65360702e-12 7.09932019e-02 5.56670542e-02 9.18317356e-02 6.09747207e-02 2.33590981e-03 7.18197378e-01 3.12798418e+03 +4.40700000e-04 -1.65360702e-12 7.09930370e-02 5.56667536e-02 9.18319269e-02 6.09750294e-02 2.33587526e-03 7.18197378e-01 3.12798418e+03 +4.40800000e-04 -1.65360702e-12 7.09928725e-02 5.56664537e-02 9.18321178e-02 6.09753373e-02 2.33584081e-03 7.18197378e-01 3.12798418e+03 +4.40900000e-04 -1.65360702e-12 7.09927085e-02 5.56661546e-02 9.18323082e-02 6.09756445e-02 2.33580644e-03 7.18197378e-01 3.12798418e+03 +4.41000000e-04 -1.65360702e-12 7.09925448e-02 5.56658562e-02 9.18324980e-02 6.09759509e-02 2.33577215e-03 7.18197378e-01 3.12798418e+03 +4.41100000e-04 -1.65360702e-12 7.09923816e-02 5.56655587e-02 9.18326874e-02 6.09762565e-02 2.33573796e-03 7.18197378e-01 3.12798418e+03 +4.41200000e-04 -1.65360702e-12 7.09922188e-02 5.56652618e-02 9.18328764e-02 6.09765613e-02 2.33570385e-03 7.18197378e-01 3.12798418e+03 +4.41300000e-04 -1.65360702e-12 7.09920565e-02 5.56649658e-02 9.18330648e-02 6.09768653e-02 2.33566983e-03 7.18197378e-01 3.12802809e+03 +4.41400000e-04 -1.65360702e-12 7.09918945e-02 5.56646705e-02 9.18332527e-02 6.09771686e-02 2.33563590e-03 7.18197378e-01 3.12802809e+03 +4.41500000e-04 -1.65360702e-12 7.09917329e-02 5.56643759e-02 9.18334402e-02 6.09774710e-02 2.33560205e-03 7.18197378e-01 3.12802809e+03 +4.41600000e-04 -1.65360702e-12 7.09915718e-02 5.56640821e-02 9.18336272e-02 6.09777728e-02 2.33556829e-03 7.18197378e-01 3.12802809e+03 +4.41700000e-04 -1.65360702e-12 7.09914111e-02 5.56637890e-02 9.18338137e-02 6.09780737e-02 2.33553461e-03 7.18197378e-01 3.12802809e+03 +4.41800000e-04 -1.65360702e-12 7.09912507e-02 5.56634967e-02 9.18339998e-02 6.09783739e-02 2.33550102e-03 7.18197378e-01 3.12802809e+03 +4.41900000e-04 -1.65360702e-12 7.09910908e-02 5.56632052e-02 9.18341853e-02 6.09786733e-02 2.33546752e-03 7.18197378e-01 3.12802809e+03 +4.42000000e-04 -1.65360702e-12 7.09909313e-02 5.56629144e-02 9.18343704e-02 6.09789719e-02 2.33543410e-03 7.18197378e-01 3.12802809e+03 +4.42100000e-04 -1.65360702e-12 7.09907722e-02 5.56626243e-02 9.18345550e-02 6.09792698e-02 2.33540077e-03 7.18197378e-01 3.12802809e+03 +4.42200000e-04 -1.65360702e-12 7.09906135e-02 5.56623350e-02 9.18347392e-02 6.09795669e-02 2.33536752e-03 7.18197378e-01 3.12802809e+03 +4.42300000e-04 -1.65360702e-12 7.09904553e-02 5.56620464e-02 9.18349229e-02 6.09798633e-02 2.33533436e-03 7.18197378e-01 3.12802809e+03 +4.42400000e-04 -1.65360702e-12 7.09902974e-02 5.56617585e-02 9.18351061e-02 6.09801589e-02 2.33530128e-03 7.18197378e-01 3.12802809e+03 +4.42500000e-04 -1.65360702e-12 7.09901399e-02 5.56614714e-02 9.18352888e-02 6.09804538e-02 2.33526829e-03 7.18197378e-01 3.12802809e+03 +4.42600000e-04 -1.65360702e-12 7.09899828e-02 5.56611850e-02 9.18354711e-02 6.09807479e-02 2.33523538e-03 7.18197378e-01 3.12802809e+03 +4.42700000e-04 -1.65360702e-12 7.09898261e-02 5.56608994e-02 9.18356529e-02 6.09810412e-02 2.33520255e-03 7.18197378e-01 3.12802809e+03 +4.42800000e-04 -1.65360702e-12 7.09896698e-02 5.56606144e-02 9.18358342e-02 6.09813338e-02 2.33516981e-03 7.18197378e-01 3.12802809e+03 +4.42900000e-04 -1.65360702e-12 7.09895140e-02 5.56603302e-02 9.18360151e-02 6.09816257e-02 2.33513715e-03 7.18197378e-01 3.12802809e+03 +4.43000000e-04 -1.65360702e-12 7.09893585e-02 5.56600468e-02 9.18361955e-02 6.09819168e-02 2.33510458e-03 7.18197378e-01 3.12802809e+03 +4.43100000e-04 -1.65360702e-12 7.09892034e-02 5.56597640e-02 9.18363755e-02 6.09822072e-02 2.33507208e-03 7.18197378e-01 3.12802809e+03 +4.43200000e-04 -1.65360702e-12 7.09890487e-02 5.56594820e-02 9.18365550e-02 6.09824968e-02 2.33503968e-03 7.18197378e-01 3.12802809e+03 +4.43300000e-04 -1.65360702e-12 7.09888944e-02 5.56592007e-02 9.18367340e-02 6.09827857e-02 2.33500735e-03 7.18197378e-01 3.12802809e+03 +4.43400000e-04 -1.65360702e-12 7.09887405e-02 5.56589201e-02 9.18369126e-02 6.09830738e-02 2.33497511e-03 7.18197378e-01 3.12802809e+03 +4.43500000e-04 -1.65360702e-12 7.09885870e-02 5.56586402e-02 9.18370907e-02 6.09833613e-02 2.33494294e-03 7.18197378e-01 3.12802809e+03 +4.43600000e-04 -1.65360702e-12 7.09884339e-02 5.56583611e-02 9.18372684e-02 6.09836479e-02 2.33491087e-03 7.18197378e-01 3.12806948e+03 +4.43700000e-04 -1.65360702e-12 7.09882811e-02 5.56580826e-02 9.18374456e-02 6.09839339e-02 2.33487887e-03 7.18197378e-01 3.12806948e+03 +4.43800000e-04 -1.65360702e-12 7.09881288e-02 5.56578049e-02 9.18376224e-02 6.09842191e-02 2.33484695e-03 7.18197378e-01 3.12806948e+03 +4.43900000e-04 -1.65360702e-12 7.09879769e-02 5.56575279e-02 9.18377987e-02 6.09845036e-02 2.33481512e-03 7.18197378e-01 3.12806948e+03 +4.44000000e-04 -1.65360702e-12 7.09878253e-02 5.56572516e-02 9.18379746e-02 6.09847874e-02 2.33478336e-03 7.18197378e-01 3.12806948e+03 +4.44100000e-04 -1.65360702e-12 7.09876741e-02 5.56569759e-02 9.18381500e-02 6.09850704e-02 2.33475169e-03 7.18197378e-01 3.12806948e+03 +4.44200000e-04 -1.65360702e-12 7.09875233e-02 5.56567010e-02 9.18383249e-02 6.09853527e-02 2.33472010e-03 7.18197378e-01 3.12806948e+03 +4.44300000e-04 -1.65360702e-12 7.09873729e-02 5.56564268e-02 9.18384995e-02 6.09856343e-02 2.33468859e-03 7.18197378e-01 3.12806948e+03 +4.44400000e-04 -1.65360702e-12 7.09872229e-02 5.56561533e-02 9.18386735e-02 6.09859152e-02 2.33465716e-03 7.18197378e-01 3.12806948e+03 +4.44500000e-04 -1.65360702e-12 7.09870733e-02 5.56558805e-02 9.18388472e-02 6.09861954e-02 2.33462581e-03 7.18197378e-01 3.12806948e+03 +4.44600000e-04 -1.65360702e-12 7.09869240e-02 5.56556084e-02 9.18390203e-02 6.09864748e-02 2.33459454e-03 7.18197378e-01 3.12806948e+03 +4.44700000e-04 -1.65360702e-12 7.09867751e-02 5.56553370e-02 9.18391931e-02 6.09867536e-02 2.33456335e-03 7.18197378e-01 3.12806948e+03 +4.44800000e-04 -1.65360702e-12 7.09866266e-02 5.56550663e-02 9.18393654e-02 6.09870316e-02 2.33453224e-03 7.18197378e-01 3.12806948e+03 +4.44900000e-04 -1.65360702e-12 7.09864785e-02 5.56547963e-02 9.18395373e-02 6.09873089e-02 2.33450121e-03 7.18197378e-01 3.12806948e+03 +4.45000000e-04 -1.65360702e-12 7.09863308e-02 5.56545269e-02 9.18397087e-02 6.09875855e-02 2.33447025e-03 7.18197378e-01 3.12806948e+03 +4.45100000e-04 -1.65360702e-12 7.09861834e-02 5.56542583e-02 9.18398797e-02 6.09878614e-02 2.33443938e-03 7.18197378e-01 3.12806948e+03 +4.45200000e-04 -1.65360702e-12 7.09860364e-02 5.56539903e-02 9.18400502e-02 6.09881366e-02 2.33440859e-03 7.18197378e-01 3.12806948e+03 +4.45300000e-04 -1.65360702e-12 7.09858898e-02 5.56537230e-02 9.18402203e-02 6.09884111e-02 2.33437787e-03 7.18197378e-01 3.12806948e+03 +4.45400000e-04 -1.65360702e-12 7.09857436e-02 5.56534564e-02 9.18403900e-02 6.09886849e-02 2.33434723e-03 7.18197378e-01 3.12806948e+03 +4.45500000e-04 -1.65360702e-12 7.09855977e-02 5.56531905e-02 9.18405592e-02 6.09889580e-02 2.33431668e-03 7.18197378e-01 3.12806948e+03 +4.45600000e-04 -1.65360702e-12 7.09854522e-02 5.56529253e-02 9.18407281e-02 6.09892304e-02 2.33428619e-03 7.18197378e-01 3.12806948e+03 +4.45700000e-04 -1.65360702e-12 7.09853071e-02 5.56526607e-02 9.18408964e-02 6.09895021e-02 2.33425579e-03 7.18197378e-01 3.12806948e+03 +4.45800000e-04 -1.65360702e-12 7.09851623e-02 5.56523968e-02 9.18410644e-02 6.09897731e-02 2.33422546e-03 7.18197378e-01 3.12806948e+03 +4.45900000e-04 -1.65360702e-12 7.09850179e-02 5.56521336e-02 9.18412319e-02 6.09900435e-02 2.33419522e-03 7.18197378e-01 3.12810849e+03 +4.46000000e-04 -1.65360702e-12 7.09848739e-02 5.56518711e-02 9.18413990e-02 6.09903131e-02 2.33416505e-03 7.18197378e-01 3.12810849e+03 +4.46100000e-04 -1.65360702e-12 7.09847303e-02 5.56516092e-02 9.18415657e-02 6.09905820e-02 2.33413495e-03 7.18197378e-01 3.12810849e+03 +4.46200000e-04 -1.65360702e-12 7.09845870e-02 5.56513480e-02 9.18417319e-02 6.09908503e-02 2.33410493e-03 7.18197378e-01 3.12810849e+03 +4.46300000e-04 -1.65360702e-12 7.09844441e-02 5.56510875e-02 9.18418977e-02 6.09911179e-02 2.33407499e-03 7.18197378e-01 3.12810849e+03 +4.46400000e-04 -1.65360702e-12 7.09843015e-02 5.56508276e-02 9.18420631e-02 6.09913847e-02 2.33404513e-03 7.18197378e-01 3.12810849e+03 +4.46500000e-04 -1.65360702e-12 7.09841593e-02 5.56505684e-02 9.18422281e-02 6.09916510e-02 2.33401534e-03 7.18197378e-01 3.12810849e+03 +4.46600000e-04 -1.65360702e-12 7.09840175e-02 5.56503099e-02 9.18423926e-02 6.09919165e-02 2.33398563e-03 7.18197378e-01 3.12810849e+03 +4.46700000e-04 -1.65360702e-12 7.09838760e-02 5.56500520e-02 9.18425568e-02 6.09921813e-02 2.33395599e-03 7.18197378e-01 3.12810849e+03 +4.46800000e-04 -1.65360702e-12 7.09837349e-02 5.56497948e-02 9.18427205e-02 6.09924455e-02 2.33392643e-03 7.18197378e-01 3.12810849e+03 +4.46900000e-04 -1.65360702e-12 7.09835942e-02 5.56495382e-02 9.18428838e-02 6.09927090e-02 2.33389695e-03 7.18197378e-01 3.12810849e+03 +4.47000000e-04 -1.65360702e-12 7.09834538e-02 5.56492823e-02 9.18430466e-02 6.09929718e-02 2.33386754e-03 7.18197378e-01 3.12810849e+03 +4.47100000e-04 -1.65360702e-12 7.09833138e-02 5.56490271e-02 9.18432091e-02 6.09932340e-02 2.33383820e-03 7.18197378e-01 3.12810849e+03 +4.47200000e-04 -1.65360702e-12 7.09831741e-02 5.56487725e-02 9.18433711e-02 6.09934955e-02 2.33380894e-03 7.18197378e-01 3.12810849e+03 +4.47300000e-04 -1.65360702e-12 7.09830348e-02 5.56485185e-02 9.18435328e-02 6.09937563e-02 2.33377976e-03 7.18197378e-01 3.12810849e+03 +4.47400000e-04 -1.65360702e-12 7.09828959e-02 5.56482652e-02 9.18436940e-02 6.09940164e-02 2.33375065e-03 7.18197378e-01 3.12810849e+03 +4.47500000e-04 -1.65360702e-12 7.09827572e-02 5.56480126e-02 9.18438548e-02 6.09942759e-02 2.33372161e-03 7.18197378e-01 3.12810849e+03 +4.47600000e-04 -1.65360702e-12 7.09826190e-02 5.56477605e-02 9.18440152e-02 6.09945348e-02 2.33369265e-03 7.18197378e-01 3.12810849e+03 +4.47700000e-04 -1.65360702e-12 7.09824811e-02 5.56475092e-02 9.18441752e-02 6.09947929e-02 2.33366376e-03 7.18197378e-01 3.12810849e+03 +4.47800000e-04 -1.65360702e-12 7.09823436e-02 5.56472585e-02 9.18443348e-02 6.09950504e-02 2.33363494e-03 7.18197378e-01 3.12810849e+03 +4.47900000e-04 -1.65360702e-12 7.09822064e-02 5.56470084e-02 9.18444939e-02 6.09953073e-02 2.33360620e-03 7.18197378e-01 3.12810849e+03 +4.48000000e-04 -1.65360702e-12 7.09820695e-02 5.56467589e-02 9.18446527e-02 6.09955635e-02 2.33357754e-03 7.18197378e-01 3.12810849e+03 +4.48100000e-04 -1.65360702e-12 7.09819330e-02 5.56465101e-02 9.18448110e-02 6.09958190e-02 2.33354894e-03 7.18197378e-01 3.12810849e+03 +4.48200000e-04 -1.65360702e-12 7.09817969e-02 5.56462620e-02 9.18449690e-02 6.09960739e-02 2.33352042e-03 7.18197378e-01 3.12814527e+03 +4.48300000e-04 -1.65360702e-12 7.09816611e-02 5.56460144e-02 9.18451265e-02 6.09963281e-02 2.33349197e-03 7.18197378e-01 3.12814527e+03 +4.48400000e-04 -1.65360702e-12 7.09815256e-02 5.56457675e-02 9.18452837e-02 6.09965817e-02 2.33346359e-03 7.18197378e-01 3.12814527e+03 +4.48500000e-04 -1.65360702e-12 7.09813905e-02 5.56455212e-02 9.18454404e-02 6.09968347e-02 2.33343529e-03 7.18197378e-01 3.12814527e+03 +4.48600000e-04 -1.65360702e-12 7.09812558e-02 5.56452756e-02 9.18455968e-02 6.09970870e-02 2.33340706e-03 7.18197378e-01 3.12814527e+03 +4.48700000e-04 -1.65360702e-12 7.09811213e-02 5.56450306e-02 9.18457527e-02 6.09973386e-02 2.33337890e-03 7.18197378e-01 3.12814527e+03 +4.48800000e-04 -1.65360702e-12 7.09809873e-02 5.56447862e-02 9.18459083e-02 6.09975896e-02 2.33335081e-03 7.18197378e-01 3.12814527e+03 +4.48900000e-04 -1.65360702e-12 7.09808535e-02 5.56445424e-02 9.18460634e-02 6.09978400e-02 2.33332280e-03 7.18197378e-01 3.12814527e+03 +4.49000000e-04 -1.65360702e-12 7.09807202e-02 5.56442993e-02 9.18462182e-02 6.09980897e-02 2.33329485e-03 7.18197378e-01 3.12814527e+03 +4.49100000e-04 -1.65360702e-12 7.09805871e-02 5.56440567e-02 9.18463725e-02 6.09983388e-02 2.33326698e-03 7.18197378e-01 3.12814527e+03 +4.49200000e-04 -1.65360702e-12 7.09804544e-02 5.56438148e-02 9.18465265e-02 6.09985873e-02 2.33323918e-03 7.18197378e-01 3.12814527e+03 +4.49300000e-04 -1.65360702e-12 7.09803220e-02 5.56435736e-02 9.18466800e-02 6.09988351e-02 2.33321145e-03 7.18197378e-01 3.12814527e+03 +4.49400000e-04 -1.65360702e-12 7.09801900e-02 5.56433329e-02 9.18468332e-02 6.09990823e-02 2.33318379e-03 7.18197378e-01 3.12814527e+03 +4.49500000e-04 -1.65360702e-12 7.09800583e-02 5.56430928e-02 9.18469860e-02 6.09993288e-02 2.33315620e-03 7.18197378e-01 3.12814527e+03 +4.49600000e-04 -1.65360702e-12 7.09799269e-02 5.56428534e-02 9.18471384e-02 6.09995748e-02 2.33312868e-03 7.18197378e-01 3.12814527e+03 +4.49700000e-04 -1.65360702e-12 7.09797959e-02 5.56426146e-02 9.18472904e-02 6.09998201e-02 2.33310123e-03 7.18197378e-01 3.12814527e+03 +4.49800000e-04 -1.65360702e-12 7.09796652e-02 5.56423763e-02 9.18474420e-02 6.10000647e-02 2.33307385e-03 7.18197378e-01 3.12814527e+03 +4.49900000e-04 -1.65360702e-12 7.09795348e-02 5.56421387e-02 9.18475932e-02 6.10003088e-02 2.33304654e-03 7.18197378e-01 3.12814527e+03 +4.50000000e-04 -1.65360702e-12 7.09794048e-02 5.56419017e-02 9.18477441e-02 6.10005522e-02 2.33301930e-03 7.18197378e-01 3.12814527e+03 +4.50100000e-04 -1.65360702e-12 7.09792751e-02 5.56416653e-02 9.18478945e-02 6.10007950e-02 2.33299213e-03 7.18197378e-01 3.12814527e+03 +4.50200000e-04 -1.65360702e-12 7.09791458e-02 5.56414295e-02 9.18480446e-02 6.10010372e-02 2.33296503e-03 7.18197378e-01 3.12814527e+03 +4.50300000e-04 -1.65360702e-12 7.09790167e-02 5.56411943e-02 9.18481943e-02 6.10012788e-02 2.33293800e-03 7.18197378e-01 3.12814527e+03 +4.50400000e-04 -1.65360702e-12 7.09788880e-02 5.56409597e-02 9.18483436e-02 6.10015197e-02 2.33291104e-03 7.18197378e-01 3.12814527e+03 +4.50500000e-04 -1.65360702e-12 7.09787596e-02 5.56407258e-02 9.18484925e-02 6.10017601e-02 2.33288415e-03 7.18197378e-01 3.12817994e+03 +4.50600000e-04 -1.65360702e-12 7.09786316e-02 5.56404924e-02 9.18486411e-02 6.10019998e-02 2.33285732e-03 7.18197378e-01 3.12817994e+03 +4.50700000e-04 -1.65360702e-12 7.09785039e-02 5.56402596e-02 9.18487893e-02 6.10022389e-02 2.33283057e-03 7.18197378e-01 3.12817994e+03 +4.50800000e-04 -1.65360702e-12 7.09783765e-02 5.56400274e-02 9.18489370e-02 6.10024774e-02 2.33280388e-03 7.18197378e-01 3.12817994e+03 +4.50900000e-04 -1.65360702e-12 7.09782494e-02 5.56397958e-02 9.18490845e-02 6.10027153e-02 2.33277726e-03 7.18197378e-01 3.12817994e+03 +4.51000000e-04 -1.65360702e-12 7.09781227e-02 5.56395647e-02 9.18492315e-02 6.10029526e-02 2.33275071e-03 7.18197378e-01 3.12817994e+03 +4.51100000e-04 -1.65360702e-12 7.09779962e-02 5.56393343e-02 9.18493781e-02 6.10031892e-02 2.33272423e-03 7.18197378e-01 3.12817994e+03 +4.51200000e-04 -1.65360702e-12 7.09778701e-02 5.56391045e-02 9.18495244e-02 6.10034253e-02 2.33269781e-03 7.18197378e-01 3.12817994e+03 +4.51300000e-04 -1.65360702e-12 7.09777444e-02 5.56388752e-02 9.18496703e-02 6.10036608e-02 2.33267146e-03 7.18197378e-01 3.12817994e+03 +4.51400000e-04 -1.65360702e-12 7.09776189e-02 5.56386466e-02 9.18498159e-02 6.10038956e-02 2.33264518e-03 7.18197378e-01 3.12817994e+03 +4.51500000e-04 -1.65360702e-12 7.09774938e-02 5.56384185e-02 9.18499610e-02 6.10041299e-02 2.33261897e-03 7.18197378e-01 3.12817994e+03 +4.51600000e-04 -1.65360702e-12 7.09773690e-02 5.56381910e-02 9.18501058e-02 6.10043636e-02 2.33259282e-03 7.18197378e-01 3.12817994e+03 +4.51700000e-04 -1.65360702e-12 7.09772445e-02 5.56379641e-02 9.18502502e-02 6.10045967e-02 2.33256674e-03 7.18197378e-01 3.12817994e+03 +4.51800000e-04 -1.65360702e-12 7.09771203e-02 5.56377377e-02 9.18503943e-02 6.10048291e-02 2.33254072e-03 7.18197378e-01 3.12817994e+03 +4.51900000e-04 -1.65360702e-12 7.09769964e-02 5.56375120e-02 9.18505380e-02 6.10050610e-02 2.33251478e-03 7.18197378e-01 3.12817994e+03 +4.52000000e-04 -1.65360702e-12 7.09768729e-02 5.56372868e-02 9.18506813e-02 6.10052923e-02 2.33248890e-03 7.18197378e-01 3.12817994e+03 +4.52100000e-04 -1.65360702e-12 7.09767496e-02 5.56370622e-02 9.18508243e-02 6.10055230e-02 2.33246308e-03 7.18197378e-01 3.12817994e+03 +4.52200000e-04 -1.65360702e-12 7.09766267e-02 5.56368381e-02 9.18509668e-02 6.10057531e-02 2.33243733e-03 7.18197378e-01 3.12817994e+03 +4.52300000e-04 -1.65360702e-12 7.09765041e-02 5.56366147e-02 9.18511091e-02 6.10059826e-02 2.33241165e-03 7.18197378e-01 3.12817994e+03 +4.52400000e-04 -1.65360702e-12 7.09763818e-02 5.56363918e-02 9.18512509e-02 6.10062116e-02 2.33238603e-03 7.18197378e-01 3.12817994e+03 +4.52500000e-04 -1.65360702e-12 7.09762598e-02 5.56361695e-02 9.18513924e-02 6.10064399e-02 2.33236048e-03 7.18197378e-01 3.12817994e+03 +4.52600000e-04 -1.65360702e-12 7.09761382e-02 5.56359477e-02 9.18515336e-02 6.10066677e-02 2.33233499e-03 7.18197378e-01 3.12817994e+03 +4.52700000e-04 -1.65360702e-12 7.09760168e-02 5.56357265e-02 9.18516743e-02 6.10068949e-02 2.33230957e-03 7.18197378e-01 3.12817994e+03 +4.52800000e-04 -1.65360702e-12 7.09758958e-02 5.56355059e-02 9.18518148e-02 6.10071215e-02 2.33228421e-03 7.18197378e-01 3.12821262e+03 +4.52900000e-04 -1.65360702e-12 7.09757750e-02 5.56352859e-02 9.18519548e-02 6.10073475e-02 2.33225892e-03 7.18197378e-01 3.12821262e+03 +4.53000000e-04 -1.65360702e-12 7.09756546e-02 5.56350664e-02 9.18520945e-02 6.10075730e-02 2.33223369e-03 7.18197378e-01 3.12821262e+03 +4.53100000e-04 -1.65360702e-12 7.09755345e-02 5.56348474e-02 9.18522338e-02 6.10077979e-02 2.33220853e-03 7.18197378e-01 3.12821262e+03 +4.53200000e-04 -1.65360702e-12 7.09754146e-02 5.56346291e-02 9.18523728e-02 6.10080222e-02 2.33218343e-03 7.18197378e-01 3.12821262e+03 +4.53300000e-04 -1.65360702e-12 7.09752951e-02 5.56344113e-02 9.18525115e-02 6.10082459e-02 2.33215839e-03 7.18197378e-01 3.12821262e+03 +4.53400000e-04 -1.65360702e-12 7.09751759e-02 5.56341940e-02 9.18526497e-02 6.10084691e-02 2.33213342e-03 7.18197378e-01 3.12821262e+03 +4.53500000e-04 -1.65360702e-12 7.09750570e-02 5.56339773e-02 9.18527877e-02 6.10086917e-02 2.33210851e-03 7.18197378e-01 3.12821262e+03 +4.53600000e-04 -1.65360702e-12 7.09749384e-02 5.56337611e-02 9.18529252e-02 6.10089137e-02 2.33208367e-03 7.18197378e-01 3.12821262e+03 +4.53700000e-04 -1.65360702e-12 7.09748201e-02 5.56335455e-02 9.18530624e-02 6.10091351e-02 2.33205889e-03 7.18197378e-01 3.12821262e+03 +4.53800000e-04 -1.65360702e-12 7.09747021e-02 5.56333305e-02 9.18531993e-02 6.10093560e-02 2.33203417e-03 7.18197378e-01 3.12821262e+03 +4.53900000e-04 -1.65360702e-12 7.09745845e-02 5.56331160e-02 9.18533358e-02 6.10095763e-02 2.33200952e-03 7.18197378e-01 3.12821262e+03 +4.54000000e-04 -1.65360702e-12 7.09744671e-02 5.56329021e-02 9.18534720e-02 6.10097961e-02 2.33198493e-03 7.18197378e-01 3.12821262e+03 +4.54100000e-04 -1.65360702e-12 7.09743500e-02 5.56326887e-02 9.18536078e-02 6.10100153e-02 2.33196040e-03 7.18197378e-01 3.12821262e+03 +4.54200000e-04 -1.65360702e-12 7.09742332e-02 5.56324758e-02 9.18537433e-02 6.10102339e-02 2.33193593e-03 7.18197378e-01 3.12821262e+03 +4.54300000e-04 -1.65360702e-12 7.09741167e-02 5.56322635e-02 9.18538784e-02 6.10104520e-02 2.33191153e-03 7.18197378e-01 3.12821262e+03 +4.54400000e-04 -1.65360702e-12 7.09740005e-02 5.56320517e-02 9.18540132e-02 6.10106696e-02 2.33188719e-03 7.18197378e-01 3.12821262e+03 +4.54500000e-04 -1.65360702e-12 7.09738846e-02 5.56318405e-02 9.18541476e-02 6.10108865e-02 2.33186291e-03 7.18197378e-01 3.12821262e+03 +4.54600000e-04 -1.65360702e-12 7.09737690e-02 5.56316298e-02 9.18542817e-02 6.10111029e-02 2.33183870e-03 7.18197378e-01 3.12821262e+03 +4.54700000e-04 -1.65360702e-12 7.09736537e-02 5.56314196e-02 9.18544155e-02 6.10113188e-02 2.33181454e-03 7.18197378e-01 3.12821262e+03 +4.54800000e-04 -1.65360702e-12 7.09735387e-02 5.56312100e-02 9.18545489e-02 6.10115341e-02 2.33179045e-03 7.18197378e-01 3.12821262e+03 +4.54900000e-04 -1.65360702e-12 7.09734239e-02 5.56310010e-02 9.18546820e-02 6.10117489e-02 2.33176642e-03 7.18197378e-01 3.12821262e+03 +4.55000000e-04 -1.65360702e-12 7.09733095e-02 5.56307924e-02 9.18548147e-02 6.10119631e-02 2.33174245e-03 7.18197378e-01 3.12821262e+03 +4.55100000e-04 -1.65360702e-12 7.09731954e-02 5.56305844e-02 9.18549471e-02 6.10121768e-02 2.33171854e-03 7.18197378e-01 3.12821262e+03 +4.55200000e-04 -1.65360702e-12 7.09730815e-02 5.56303769e-02 9.18550791e-02 6.10123899e-02 2.33169469e-03 7.18197378e-01 3.12824343e+03 +4.55300000e-04 -1.65360702e-12 7.09729680e-02 5.56301700e-02 9.18552109e-02 6.10126024e-02 2.33167090e-03 7.18197378e-01 3.12824343e+03 +4.55400000e-04 -1.65360702e-12 7.09728547e-02 5.56299636e-02 9.18553422e-02 6.10128145e-02 2.33164718e-03 7.18197378e-01 3.12824343e+03 +4.55500000e-04 -1.65360702e-12 7.09727417e-02 5.56297577e-02 9.18554733e-02 6.10130260e-02 2.33162351e-03 7.18197378e-01 3.12824343e+03 +4.55600000e-04 -1.65360702e-12 7.09726290e-02 5.56295523e-02 9.18556040e-02 6.10132369e-02 2.33159991e-03 7.18197378e-01 3.12824343e+03 +4.55700000e-04 -1.65360702e-12 7.09725166e-02 5.56293475e-02 9.18557344e-02 6.10134473e-02 2.33157636e-03 7.18197378e-01 3.12824343e+03 +4.55800000e-04 -1.65360702e-12 7.09724045e-02 5.56291431e-02 9.18558644e-02 6.10136572e-02 2.33155288e-03 7.18197378e-01 3.12824343e+03 +4.55900000e-04 -1.65360702e-12 7.09722927e-02 5.56289393e-02 9.18559941e-02 6.10138666e-02 2.33152945e-03 7.18197378e-01 3.12824343e+03 +4.56000000e-04 -1.65360702e-12 7.09721812e-02 5.56287361e-02 9.18561235e-02 6.10140754e-02 2.33150609e-03 7.18197378e-01 3.12824343e+03 +4.56100000e-04 -1.65360702e-12 7.09720699e-02 5.56285333e-02 9.18562525e-02 6.10142836e-02 2.33148278e-03 7.18197378e-01 3.12824343e+03 +4.56200000e-04 -1.65360702e-12 7.09719589e-02 5.56283311e-02 9.18563812e-02 6.10144914e-02 2.33145954e-03 7.18197378e-01 3.12824343e+03 +4.56300000e-04 -1.65360702e-12 7.09718482e-02 5.56281294e-02 9.18565096e-02 6.10146986e-02 2.33143635e-03 7.18197378e-01 3.12824343e+03 +4.56400000e-04 -1.65360702e-12 7.09717378e-02 5.56279282e-02 9.18566377e-02 6.10149053e-02 2.33141322e-03 7.18197378e-01 3.12824343e+03 +4.56500000e-04 -1.65360702e-12 7.09716277e-02 5.56277275e-02 9.18567654e-02 6.10151114e-02 2.33139015e-03 7.18197378e-01 3.12824343e+03 +4.56600000e-04 -1.65360702e-12 7.09715179e-02 5.56275273e-02 9.18568928e-02 6.10153170e-02 2.33136715e-03 7.18197378e-01 3.12824343e+03 +4.56700000e-04 -1.65360702e-12 7.09714083e-02 5.56273276e-02 9.18570199e-02 6.10155221e-02 2.33134420e-03 7.18197378e-01 3.12824343e+03 +4.56800000e-04 -1.65360702e-12 7.09712990e-02 5.56271285e-02 9.18571467e-02 6.10157267e-02 2.33132130e-03 7.18197378e-01 3.12824343e+03 +4.56900000e-04 -1.65360702e-12 7.09711900e-02 5.56269298e-02 9.18572731e-02 6.10159308e-02 2.33129847e-03 7.18197378e-01 3.12824343e+03 +4.57000000e-04 -1.65360702e-12 7.09710813e-02 5.56267317e-02 9.18573992e-02 6.10161343e-02 2.33127570e-03 7.18197378e-01 3.12824343e+03 +4.57100000e-04 -1.65360702e-12 7.09709728e-02 5.56265340e-02 9.18575250e-02 6.10163373e-02 2.33125298e-03 7.18197378e-01 3.12824343e+03 +4.57200000e-04 -1.65360702e-12 7.09708647e-02 5.56263369e-02 9.18576504e-02 6.10165398e-02 2.33123032e-03 7.18197378e-01 3.12824343e+03 +4.57300000e-04 -1.65360702e-12 7.09707568e-02 5.56261403e-02 9.18577756e-02 6.10167418e-02 2.33120772e-03 7.18197378e-01 3.12824343e+03 +4.57400000e-04 -1.65360702e-12 7.09706492e-02 5.56259442e-02 9.18579004e-02 6.10169432e-02 2.33118518e-03 7.18197378e-01 3.12824343e+03 +4.57500000e-04 -1.65360702e-12 7.09705418e-02 5.56257486e-02 9.18580249e-02 6.10171442e-02 2.33116269e-03 7.18197378e-01 3.12827246e+03 +4.57600000e-04 -1.65360702e-12 7.09704347e-02 5.56255534e-02 9.18581491e-02 6.10173446e-02 2.33114026e-03 7.18197378e-01 3.12827246e+03 +4.57700000e-04 -1.65360702e-12 7.09703279e-02 5.56253588e-02 9.18582730e-02 6.10175445e-02 2.33111789e-03 7.18197378e-01 3.12827246e+03 +4.57800000e-04 -1.65360702e-12 7.09702214e-02 5.56251647e-02 9.18583965e-02 6.10177439e-02 2.33109558e-03 7.18197378e-01 3.12827246e+03 +4.57900000e-04 -1.65360702e-12 7.09701152e-02 5.56249711e-02 9.18585197e-02 6.10179428e-02 2.33107332e-03 7.18197378e-01 3.12827246e+03 +4.58000000e-04 -1.65360702e-12 7.09700092e-02 5.56247779e-02 9.18586427e-02 6.10181412e-02 2.33105112e-03 7.18197378e-01 3.12827246e+03 +4.58100000e-04 -1.65360702e-12 7.09699035e-02 5.56245853e-02 9.18587653e-02 6.10183391e-02 2.33102898e-03 7.18197378e-01 3.12827246e+03 +4.58200000e-04 -1.65360702e-12 7.09697980e-02 5.56243932e-02 9.18588876e-02 6.10185365e-02 2.33100689e-03 7.18197378e-01 3.12827246e+03 +4.58300000e-04 -1.65360702e-12 7.09696929e-02 5.56242015e-02 9.18590095e-02 6.10187334e-02 2.33098486e-03 7.18197378e-01 3.12827246e+03 +4.58400000e-04 -1.65360702e-12 7.09695880e-02 5.56240103e-02 9.18591312e-02 6.10189298e-02 2.33096289e-03 7.18197378e-01 3.12827246e+03 +4.58500000e-04 -1.65360702e-12 7.09694833e-02 5.56238197e-02 9.18592526e-02 6.10191256e-02 2.33094097e-03 7.18197378e-01 3.12827246e+03 +4.58600000e-04 -1.65360702e-12 7.09693790e-02 5.56236295e-02 9.18593736e-02 6.10193210e-02 2.33091911e-03 7.18197378e-01 3.12827246e+03 +4.58700000e-04 -1.65360702e-12 7.09692749e-02 5.56234398e-02 9.18594944e-02 6.10195159e-02 2.33089730e-03 7.18197378e-01 3.12827246e+03 +4.58800000e-04 -1.65360702e-12 7.09691710e-02 5.56232505e-02 9.18596148e-02 6.10197102e-02 2.33087555e-03 7.18197378e-01 3.12827246e+03 +4.58900000e-04 -1.65360702e-12 7.09690675e-02 5.56230618e-02 9.18597349e-02 6.10199041e-02 2.33085386e-03 7.18197378e-01 3.12827246e+03 +4.59000000e-04 -1.65360702e-12 7.09689641e-02 5.56228736e-02 9.18598547e-02 6.10200975e-02 2.33083222e-03 7.18197378e-01 3.12827246e+03 +4.59100000e-04 -1.65360702e-12 7.09688611e-02 5.56226858e-02 9.18599742e-02 6.10202904e-02 2.33081064e-03 7.18197378e-01 3.12827246e+03 +4.59200000e-04 -1.65360702e-12 7.09687583e-02 5.56224985e-02 9.18600934e-02 6.10204828e-02 2.33078911e-03 7.18197378e-01 3.12827246e+03 +4.59300000e-04 -1.65360702e-12 7.09686558e-02 5.56223117e-02 9.18602123e-02 6.10206747e-02 2.33076763e-03 7.18197378e-01 3.12827246e+03 +4.59400000e-04 -1.65360702e-12 7.09685536e-02 5.56221254e-02 9.18603309e-02 6.10208661e-02 2.33074621e-03 7.18197378e-01 3.12827246e+03 +4.59500000e-04 -1.65360702e-12 7.09684516e-02 5.56219395e-02 9.18604492e-02 6.10210570e-02 2.33072485e-03 7.18197378e-01 3.12827246e+03 +4.59600000e-04 -1.65360702e-12 7.09683498e-02 5.56217541e-02 9.18605672e-02 6.10212475e-02 2.33070354e-03 7.18197378e-01 3.12827246e+03 +4.59700000e-04 -1.65360702e-12 7.09682484e-02 5.56215692e-02 9.18606849e-02 6.10214374e-02 2.33068229e-03 7.18197378e-01 3.12827246e+03 +4.59800000e-04 -1.65360702e-12 7.09681471e-02 5.56213848e-02 9.18608023e-02 6.10216269e-02 2.33066108e-03 7.18197378e-01 3.12829983e+03 +4.59900000e-04 -1.65360702e-12 7.09680462e-02 5.56212008e-02 9.18609194e-02 6.10218159e-02 2.33063994e-03 7.18197378e-01 3.12829983e+03 +4.60000000e-04 -1.65360702e-12 7.09679455e-02 5.56210173e-02 9.18610361e-02 6.10220044e-02 2.33061884e-03 7.18197378e-01 3.12829983e+03 +4.60100000e-04 -1.65360702e-12 7.09678451e-02 5.56208343e-02 9.18611526e-02 6.10221924e-02 2.33059781e-03 7.18197378e-01 3.12829983e+03 +4.60200000e-04 -1.65360702e-12 7.09677449e-02 5.56206517e-02 9.18612688e-02 6.10223799e-02 2.33057682e-03 7.18197378e-01 3.12829983e+03 +4.60300000e-04 -1.65360702e-12 7.09676449e-02 5.56204696e-02 9.18613847e-02 6.10225670e-02 2.33055589e-03 7.18197378e-01 3.12829983e+03 +4.60400000e-04 -1.65360702e-12 7.09675453e-02 5.56202880e-02 9.18615003e-02 6.10227535e-02 2.33053501e-03 7.18197378e-01 3.12829983e+03 +4.60500000e-04 -1.65360702e-12 7.09674458e-02 5.56201068e-02 9.18616156e-02 6.10229396e-02 2.33051419e-03 7.18197378e-01 3.12829983e+03 +4.60600000e-04 -1.65360702e-12 7.09673467e-02 5.56199261e-02 9.18617306e-02 6.10231253e-02 2.33049342e-03 7.18197378e-01 3.12829983e+03 +4.60700000e-04 -1.65360702e-12 7.09672478e-02 5.56197459e-02 9.18618453e-02 6.10233104e-02 2.33047270e-03 7.18197378e-01 3.12829983e+03 +4.60800000e-04 -1.65360702e-12 7.09671491e-02 5.56195661e-02 9.18619598e-02 6.10234951e-02 2.33045203e-03 7.18197378e-01 3.12829983e+03 +4.60900000e-04 -1.65360702e-12 7.09670507e-02 5.56193868e-02 9.18620739e-02 6.10236793e-02 2.33043142e-03 7.18197378e-01 3.12829983e+03 +4.61000000e-04 -1.65360702e-12 7.09669526e-02 5.56192080e-02 9.18621877e-02 6.10238631e-02 2.33041086e-03 7.18197378e-01 3.12829983e+03 +4.61100000e-04 -1.65360702e-12 7.09668546e-02 5.56190296e-02 9.18623013e-02 6.10240463e-02 2.33039035e-03 7.18197378e-01 3.12829983e+03 +4.61200000e-04 -1.65360702e-12 7.09667570e-02 5.56188516e-02 9.18624145e-02 6.10242291e-02 2.33036990e-03 7.18197378e-01 3.12829983e+03 +4.61300000e-04 -1.65360702e-12 7.09666596e-02 5.56186741e-02 9.18625275e-02 6.10244115e-02 2.33034949e-03 7.18197378e-01 3.12829983e+03 +4.61400000e-04 -1.65360702e-12 7.09665624e-02 5.56184971e-02 9.18626402e-02 6.10245933e-02 2.33032914e-03 7.18197378e-01 3.12829983e+03 +4.61500000e-04 -1.65360702e-12 7.09664655e-02 5.56183205e-02 9.18627525e-02 6.10247747e-02 2.33030885e-03 7.18197378e-01 3.12829983e+03 +4.61600000e-04 -1.65360702e-12 7.09663689e-02 5.56181444e-02 9.18628646e-02 6.10249557e-02 2.33028860e-03 7.18197378e-01 3.12829983e+03 +4.61700000e-04 -1.65360702e-12 7.09662724e-02 5.56179687e-02 9.18629765e-02 6.10251361e-02 2.33026840e-03 7.18197378e-01 3.12829983e+03 +4.61800000e-04 -1.65360702e-12 7.09661763e-02 5.56177935e-02 9.18630880e-02 6.10253162e-02 2.33024826e-03 7.18197378e-01 3.12829983e+03 +4.61900000e-04 -1.65360702e-12 7.09660804e-02 5.56176187e-02 9.18631992e-02 6.10254957e-02 2.33022817e-03 7.18197378e-01 3.12829983e+03 +4.62000000e-04 -1.65360702e-12 7.09659847e-02 5.56174443e-02 9.18633102e-02 6.10256748e-02 2.33020813e-03 7.18197378e-01 3.12829983e+03 +4.62100000e-04 -1.65360702e-12 7.09658892e-02 5.56172704e-02 9.18634209e-02 6.10258534e-02 2.33018814e-03 7.18197378e-01 3.12832563e+03 +4.62200000e-04 -1.65360702e-12 7.09657941e-02 5.56170970e-02 9.18635313e-02 6.10260316e-02 2.33016820e-03 7.18197378e-01 3.12832563e+03 +4.62300000e-04 -1.65360702e-12 7.09656991e-02 5.56169240e-02 9.18636414e-02 6.10262094e-02 2.33014831e-03 7.18197378e-01 3.12832563e+03 +4.62400000e-04 -1.65360702e-12 7.09656044e-02 5.56167514e-02 9.18637512e-02 6.10263866e-02 2.33012848e-03 7.18197378e-01 3.12832563e+03 +4.62500000e-04 -1.65360702e-12 7.09655099e-02 5.56165793e-02 9.18638607e-02 6.10265634e-02 2.33010869e-03 7.18197378e-01 3.12832563e+03 +4.62600000e-04 -1.65360702e-12 7.09654157e-02 5.56164076e-02 9.18639700e-02 6.10267398e-02 2.33008895e-03 7.18197378e-01 3.12832563e+03 +4.62700000e-04 -1.65360702e-12 7.09653218e-02 5.56162364e-02 9.18640790e-02 6.10269157e-02 2.33006927e-03 7.18197378e-01 3.12832563e+03 +4.62800000e-04 -1.65360702e-12 7.09652280e-02 5.56160656e-02 9.18641877e-02 6.10270912e-02 2.33004964e-03 7.18197378e-01 3.12832563e+03 +4.62900000e-04 -1.65360702e-12 7.09651345e-02 5.56158952e-02 9.18642961e-02 6.10272662e-02 2.33003005e-03 7.18197378e-01 3.12832563e+03 +4.63000000e-04 -1.65360702e-12 7.09650413e-02 5.56157253e-02 9.18644043e-02 6.10274408e-02 2.33001052e-03 7.18197378e-01 3.12832563e+03 +4.63100000e-04 -1.65360702e-12 7.09649482e-02 5.56155558e-02 9.18645122e-02 6.10276149e-02 2.32999103e-03 7.18197378e-01 3.12832563e+03 +4.63200000e-04 -1.65360702e-12 7.09648554e-02 5.56153867e-02 9.18646198e-02 6.10277886e-02 2.32997160e-03 7.18197378e-01 3.12832563e+03 +4.63300000e-04 -1.65360702e-12 7.09647629e-02 5.56152181e-02 9.18647271e-02 6.10279618e-02 2.32995221e-03 7.18197378e-01 3.12832563e+03 +4.63400000e-04 -1.65360702e-12 7.09646706e-02 5.56150499e-02 9.18648342e-02 6.10281346e-02 2.32993288e-03 7.18197378e-01 3.12832563e+03 +4.63500000e-04 -1.65360702e-12 7.09645785e-02 5.56148821e-02 9.18649409e-02 6.10283070e-02 2.32991359e-03 7.18197378e-01 3.12832563e+03 +4.63600000e-04 -1.65360702e-12 7.09644867e-02 5.56147148e-02 9.18650474e-02 6.10284789e-02 2.32989435e-03 7.18197378e-01 3.12832563e+03 +4.63700000e-04 -1.65360702e-12 7.09643951e-02 5.56145479e-02 9.18651537e-02 6.10286504e-02 2.32987517e-03 7.18197378e-01 3.12832563e+03 +4.63800000e-04 -1.65360702e-12 7.09643037e-02 5.56143814e-02 9.18652596e-02 6.10288214e-02 2.32985603e-03 7.18197378e-01 3.12832563e+03 +4.63900000e-04 -1.65360702e-12 7.09642125e-02 5.56142153e-02 9.18653653e-02 6.10289920e-02 2.32983694e-03 7.18197378e-01 3.12832563e+03 +4.64000000e-04 -1.65360702e-12 7.09641216e-02 5.56140497e-02 9.18654707e-02 6.10291622e-02 2.32981790e-03 7.18197378e-01 3.12832563e+03 +4.64100000e-04 -1.65360702e-12 7.09640310e-02 5.56138845e-02 9.18655759e-02 6.10293319e-02 2.32979890e-03 7.18197378e-01 3.12832563e+03 +4.64200000e-04 -1.65360702e-12 7.09639405e-02 5.56137197e-02 9.18656808e-02 6.10295012e-02 2.32977996e-03 7.18197378e-01 3.12832563e+03 +4.64300000e-04 -1.65360702e-12 7.09638503e-02 5.56135553e-02 9.18657854e-02 6.10296701e-02 2.32976107e-03 7.18197378e-01 3.12832563e+03 +4.64400000e-04 -1.65360702e-12 7.09637603e-02 5.56133914e-02 9.18658897e-02 6.10298385e-02 2.32974222e-03 7.18197378e-01 3.12834995e+03 +4.64500000e-04 -1.65360702e-12 7.09636706e-02 5.56132278e-02 9.18659938e-02 6.10300065e-02 2.32972342e-03 7.18197378e-01 3.12834995e+03 +4.64600000e-04 -1.65360702e-12 7.09635811e-02 5.56130647e-02 9.18660976e-02 6.10301741e-02 2.32970467e-03 7.18197378e-01 3.12834995e+03 +4.64700000e-04 -1.65360702e-12 7.09634918e-02 5.56129020e-02 9.18662012e-02 6.10303412e-02 2.32968597e-03 7.18197378e-01 3.12834995e+03 +4.64800000e-04 -1.65360702e-12 7.09634027e-02 5.56127397e-02 9.18663045e-02 6.10305079e-02 2.32966731e-03 7.18197378e-01 3.12834995e+03 +4.64900000e-04 -1.65360702e-12 7.09633139e-02 5.56125779e-02 9.18664075e-02 6.10306742e-02 2.32964870e-03 7.18197378e-01 3.12834995e+03 +4.65000000e-04 -1.65360702e-12 7.09632253e-02 5.56124164e-02 9.18665102e-02 6.10308401e-02 2.32963014e-03 7.18197378e-01 3.12834995e+03 +4.65100000e-04 -1.65360702e-12 7.09631369e-02 5.56122554e-02 9.18666127e-02 6.10310055e-02 2.32961163e-03 7.18197378e-01 3.12834995e+03 +4.65200000e-04 -1.65360702e-12 7.09630487e-02 5.56120948e-02 9.18667150e-02 6.10311705e-02 2.32959317e-03 7.18197378e-01 3.12834995e+03 +4.65300000e-04 -1.65360702e-12 7.09629608e-02 5.56119346e-02 9.18668169e-02 6.10313351e-02 2.32957475e-03 7.18197378e-01 3.12834995e+03 +4.65400000e-04 -1.65360702e-12 7.09628731e-02 5.56117748e-02 9.18669186e-02 6.10314993e-02 2.32955638e-03 7.18197378e-01 3.12834995e+03 +4.65500000e-04 -1.65360702e-12 7.09627856e-02 5.56116154e-02 9.18670201e-02 6.10316631e-02 2.32953805e-03 7.18197378e-01 3.12834995e+03 +4.65600000e-04 -1.65360702e-12 7.09626983e-02 5.56114564e-02 9.18671213e-02 6.10318264e-02 2.32951978e-03 7.18197378e-01 3.12834995e+03 +4.65700000e-04 -1.65360702e-12 7.09626113e-02 5.56112978e-02 9.18672222e-02 6.10319893e-02 2.32950155e-03 7.18197378e-01 3.12834995e+03 +4.65800000e-04 -1.65360702e-12 7.09625245e-02 5.56111396e-02 9.18673229e-02 6.10321518e-02 2.32948336e-03 7.18197378e-01 3.12834995e+03 +4.65900000e-04 -1.65360702e-12 7.09624379e-02 5.56109818e-02 9.18674233e-02 6.10323139e-02 2.32946522e-03 7.18197378e-01 3.12834995e+03 +4.66000000e-04 -1.65360702e-12 7.09623515e-02 5.56108245e-02 9.18675235e-02 6.10324756e-02 2.32944713e-03 7.18197378e-01 3.12834995e+03 +4.66100000e-04 -1.65360702e-12 7.09622654e-02 5.56106675e-02 9.18676234e-02 6.10326368e-02 2.32942909e-03 7.18197378e-01 3.12834995e+03 +4.66200000e-04 -1.65360702e-12 7.09621794e-02 5.56105109e-02 9.18677230e-02 6.10327977e-02 2.32941109e-03 7.18197378e-01 3.12834995e+03 +4.66300000e-04 -1.65360702e-12 7.09620937e-02 5.56103548e-02 9.18678224e-02 6.10329581e-02 2.32939314e-03 7.18197378e-01 3.12834995e+03 +4.66400000e-04 -1.65360702e-12 7.09620082e-02 5.56101990e-02 9.18679216e-02 6.10331181e-02 2.32937523e-03 7.18197378e-01 3.12834995e+03 +4.66500000e-04 -1.65360702e-12 7.09619229e-02 5.56100436e-02 9.18680204e-02 6.10332778e-02 2.32935737e-03 7.18197378e-01 3.12834995e+03 +4.66600000e-04 -1.65360702e-12 7.09618379e-02 5.56098887e-02 9.18681191e-02 6.10334370e-02 2.32933955e-03 7.18197378e-01 3.12834995e+03 +4.66700000e-04 -1.65360702e-12 7.09617531e-02 5.56097341e-02 9.18682174e-02 6.10335958e-02 2.32932178e-03 7.18197378e-01 3.12837287e+03 +4.66800000e-04 -1.65360702e-12 7.09616684e-02 5.56095799e-02 9.18683156e-02 6.10337542e-02 2.32930406e-03 7.18197378e-01 3.12837287e+03 +4.66900000e-04 -1.65360702e-12 7.09615840e-02 5.56094261e-02 9.18684135e-02 6.10339122e-02 2.32928638e-03 7.18197378e-01 3.12837287e+03 +4.67000000e-04 -1.65360702e-12 7.09614998e-02 5.56092727e-02 9.18685111e-02 6.10340698e-02 2.32926875e-03 7.18197378e-01 3.12837287e+03 +4.67100000e-04 -1.65360702e-12 7.09614159e-02 5.56091197e-02 9.18686085e-02 6.10342269e-02 2.32925116e-03 7.18197378e-01 3.12837287e+03 +4.67200000e-04 -1.65360702e-12 7.09613321e-02 5.56089671e-02 9.18687056e-02 6.10343837e-02 2.32923361e-03 7.18197378e-01 3.12837287e+03 +4.67300000e-04 -1.65360702e-12 7.09612485e-02 5.56088149e-02 9.18688025e-02 6.10345401e-02 2.32921611e-03 7.18197378e-01 3.12837287e+03 +4.67400000e-04 -1.65360702e-12 7.09611652e-02 5.56086631e-02 9.18688991e-02 6.10346961e-02 2.32919866e-03 7.18197378e-01 3.12837287e+03 +4.67500000e-04 -1.65360702e-12 7.09610821e-02 5.56085116e-02 9.18689955e-02 6.10348517e-02 2.32918125e-03 7.18197378e-01 3.12837287e+03 +4.67600000e-04 -1.65360702e-12 7.09609992e-02 5.56083606e-02 9.18690916e-02 6.10350069e-02 2.32916389e-03 7.18197378e-01 3.12837287e+03 +4.67700000e-04 -1.65360702e-12 7.09609165e-02 5.56082099e-02 9.18691875e-02 6.10351617e-02 2.32914656e-03 7.18197378e-01 3.12837287e+03 +4.67800000e-04 -1.65360702e-12 7.09608340e-02 5.56080596e-02 9.18692832e-02 6.10353161e-02 2.32912929e-03 7.18197378e-01 3.12837287e+03 +4.67900000e-04 -1.65360702e-12 7.09607517e-02 5.56079097e-02 9.18693786e-02 6.10354701e-02 2.32911206e-03 7.18197378e-01 3.12837287e+03 +4.68000000e-04 -1.65360702e-12 7.09606697e-02 5.56077602e-02 9.18694737e-02 6.10356237e-02 2.32909487e-03 7.18197378e-01 3.12837287e+03 +4.68100000e-04 -1.65360702e-12 7.09605878e-02 5.56076111e-02 9.18695686e-02 6.10357769e-02 2.32907772e-03 7.18197378e-01 3.12837287e+03 +4.68200000e-04 -1.65360702e-12 7.09605062e-02 5.56074623e-02 9.18696633e-02 6.10359297e-02 2.32906062e-03 7.18197378e-01 3.12837287e+03 +4.68300000e-04 -1.65360702e-12 7.09604247e-02 5.56073140e-02 9.18697578e-02 6.10360821e-02 2.32904356e-03 7.18197378e-01 3.12837287e+03 +4.68400000e-04 -1.65360702e-12 7.09603435e-02 5.56071660e-02 9.18698519e-02 6.10362342e-02 2.32902655e-03 7.18197378e-01 3.12837287e+03 +4.68500000e-04 -1.65360702e-12 7.09602625e-02 5.56070184e-02 9.18699459e-02 6.10363858e-02 2.32900958e-03 7.18197378e-01 3.12837287e+03 +4.68600000e-04 -1.65360702e-12 7.09601817e-02 5.56068711e-02 9.18700396e-02 6.10365371e-02 2.32899266e-03 7.18197378e-01 3.12837287e+03 +4.68700000e-04 -1.65360702e-12 7.09601011e-02 5.56067243e-02 9.18701331e-02 6.10366880e-02 2.32897577e-03 7.18197378e-01 3.12837287e+03 +4.68800000e-04 -1.65360702e-12 7.09600207e-02 5.56065778e-02 9.18702263e-02 6.10368385e-02 2.32895893e-03 7.18197378e-01 3.12837287e+03 +4.68900000e-04 -1.65360702e-12 7.09599405e-02 5.56064317e-02 9.18703193e-02 6.10369886e-02 2.32894213e-03 7.18197378e-01 3.12837287e+03 +4.69000000e-04 -1.65360702e-12 7.09598605e-02 5.56062859e-02 9.18704120e-02 6.10371383e-02 2.32892538e-03 7.18197378e-01 3.12839448e+03 +4.69100000e-04 -1.65360702e-12 7.09597807e-02 5.56061406e-02 9.18705046e-02 6.10372877e-02 2.32890867e-03 7.18197378e-01 3.12839448e+03 +4.69200000e-04 -1.65360702e-12 7.09597011e-02 5.56059956e-02 9.18705968e-02 6.10374366e-02 2.32889200e-03 7.18197378e-01 3.12839448e+03 +4.69300000e-04 -1.65360702e-12 7.09596217e-02 5.56058510e-02 9.18706889e-02 6.10375852e-02 2.32887537e-03 7.18197378e-01 3.12839448e+03 +4.69400000e-04 -1.65360702e-12 7.09595425e-02 5.56057067e-02 9.18707807e-02 6.10377334e-02 2.32885879e-03 7.18197378e-01 3.12839448e+03 +4.69500000e-04 -1.65360702e-12 7.09594636e-02 5.56055628e-02 9.18708723e-02 6.10378812e-02 2.32884225e-03 7.18197378e-01 3.12839448e+03 +4.69600000e-04 -1.65360702e-12 7.09593848e-02 5.56054193e-02 9.18709636e-02 6.10380287e-02 2.32882575e-03 7.18197378e-01 3.12839448e+03 +4.69700000e-04 -1.65360702e-12 7.09593062e-02 5.56052762e-02 9.18710547e-02 6.10381757e-02 2.32880929e-03 7.18197378e-01 3.12839448e+03 +4.69800000e-04 -1.65360702e-12 7.09592279e-02 5.56051334e-02 9.18711456e-02 6.10383224e-02 2.32879288e-03 7.18197378e-01 3.12839448e+03 +4.69900000e-04 -1.65360702e-12 7.09591497e-02 5.56049910e-02 9.18712362e-02 6.10384687e-02 2.32877651e-03 7.18197378e-01 3.12839448e+03 +4.70000000e-04 -1.65360702e-12 7.09590717e-02 5.56048489e-02 9.18713266e-02 6.10386147e-02 2.32876018e-03 7.18197378e-01 3.12839448e+03 +4.70100000e-04 -1.65360702e-12 7.09589939e-02 5.56047072e-02 9.18714168e-02 6.10387603e-02 2.32874389e-03 7.18197378e-01 3.12839448e+03 +4.70200000e-04 -1.65360702e-12 7.09589164e-02 5.56045659e-02 9.18715068e-02 6.10389055e-02 2.32872764e-03 7.18197378e-01 3.12839448e+03 +4.70300000e-04 -1.65360702e-12 7.09588390e-02 5.56044250e-02 9.18715965e-02 6.10390503e-02 2.32871143e-03 7.18197378e-01 3.12839448e+03 +4.70400000e-04 -1.65360702e-12 7.09587618e-02 5.56042844e-02 9.18716860e-02 6.10391947e-02 2.32869527e-03 7.18197378e-01 3.12839448e+03 +4.70500000e-04 -1.65360702e-12 7.09586848e-02 5.56041441e-02 9.18717752e-02 6.10393388e-02 2.32867915e-03 7.18197378e-01 3.12839448e+03 +4.70600000e-04 -1.65360702e-12 7.09586081e-02 5.56040042e-02 9.18718643e-02 6.10394825e-02 2.32866307e-03 7.18197378e-01 3.12839448e+03 +4.70700000e-04 -1.65360702e-12 7.09585315e-02 5.56038647e-02 9.18719531e-02 6.10396259e-02 2.32864702e-03 7.18197378e-01 3.12839448e+03 +4.70800000e-04 -1.65360702e-12 7.09584551e-02 5.56037255e-02 9.18720416e-02 6.10397689e-02 2.32863102e-03 7.18197378e-01 3.12839448e+03 +4.70900000e-04 -1.65360702e-12 7.09583789e-02 5.56035867e-02 9.18721300e-02 6.10399115e-02 2.32861507e-03 7.18197378e-01 3.12839448e+03 +4.71000000e-04 -1.65360702e-12 7.09583029e-02 5.56034483e-02 9.18722181e-02 6.10400538e-02 2.32859915e-03 7.18197378e-01 3.12839448e+03 +4.71100000e-04 -1.65360702e-12 7.09582271e-02 5.56033102e-02 9.18723060e-02 6.10401956e-02 2.32858327e-03 7.18197378e-01 3.12839448e+03 +4.71200000e-04 -1.65360702e-12 7.09581515e-02 5.56031724e-02 9.18723937e-02 6.10403372e-02 2.32856743e-03 7.18197378e-01 3.12839448e+03 +4.71300000e-04 -1.65360702e-12 7.09580760e-02 5.56030350e-02 9.18724811e-02 6.10404783e-02 2.32855164e-03 7.18197378e-01 3.12841484e+03 +4.71400000e-04 -1.65360702e-12 7.09580008e-02 5.56028980e-02 9.18725684e-02 6.10406191e-02 2.32853588e-03 7.18197378e-01 3.12841484e+03 +4.71500000e-04 -1.65360702e-12 7.09579258e-02 5.56027613e-02 9.18726554e-02 6.10407596e-02 2.32852017e-03 7.18197378e-01 3.12841484e+03 +4.71600000e-04 -1.65360702e-12 7.09578509e-02 5.56026249e-02 9.18727421e-02 6.10408997e-02 2.32850449e-03 7.18197378e-01 3.12841484e+03 +4.71700000e-04 -1.65360702e-12 7.09577763e-02 5.56024889e-02 9.18728287e-02 6.10410394e-02 2.32848885e-03 7.18197378e-01 3.12841484e+03 +4.71800000e-04 -1.65360702e-12 7.09577018e-02 5.56023533e-02 9.18729150e-02 6.10411788e-02 2.32847326e-03 7.18197378e-01 3.12841484e+03 +4.71900000e-04 -1.65360702e-12 7.09576275e-02 5.56022179e-02 9.18730012e-02 6.10413178e-02 2.32845770e-03 7.18197378e-01 3.12841484e+03 +4.72000000e-04 -1.65360702e-12 7.09575535e-02 5.56020830e-02 9.18730871e-02 6.10414565e-02 2.32844219e-03 7.18197378e-01 3.12841484e+03 +4.72100000e-04 -1.65360702e-12 7.09574796e-02 5.56019484e-02 9.18731727e-02 6.10415948e-02 2.32842671e-03 7.18197378e-01 3.12841484e+03 +4.72200000e-04 -1.65360702e-12 7.09574059e-02 5.56018141e-02 9.18732582e-02 6.10417327e-02 2.32841127e-03 7.18197378e-01 3.12841484e+03 +4.72300000e-04 -1.65360702e-12 7.09573324e-02 5.56016802e-02 9.18733434e-02 6.10418703e-02 2.32839588e-03 7.18197378e-01 3.12841484e+03 +4.72400000e-04 -1.65360702e-12 7.09572590e-02 5.56015466e-02 9.18734284e-02 6.10420076e-02 2.32838052e-03 7.18197378e-01 3.12841484e+03 +4.72500000e-04 -1.65360702e-12 7.09571859e-02 5.56014134e-02 9.18735132e-02 6.10421445e-02 2.32836520e-03 7.18197378e-01 3.12841484e+03 +4.72600000e-04 -1.65360702e-12 7.09571129e-02 5.56012804e-02 9.18735978e-02 6.10422810e-02 2.32834992e-03 7.18197378e-01 3.12841484e+03 +4.72700000e-04 -1.65360702e-12 7.09570402e-02 5.56011479e-02 9.18736822e-02 6.10424172e-02 2.32833468e-03 7.18197378e-01 3.12841484e+03 +4.72800000e-04 -1.65360702e-12 7.09569676e-02 5.56010157e-02 9.18737664e-02 6.10425530e-02 2.32831948e-03 7.18197378e-01 3.12841484e+03 +4.72900000e-04 -1.65360702e-12 7.09568952e-02 5.56008838e-02 9.18738503e-02 6.10426886e-02 2.32830432e-03 7.18197378e-01 3.12841484e+03 +4.73000000e-04 -1.65360702e-12 7.09568230e-02 5.56007522e-02 9.18739340e-02 6.10428237e-02 2.32828919e-03 7.18197378e-01 3.12841484e+03 +4.73100000e-04 -1.65360702e-12 7.09567510e-02 5.56006210e-02 9.18740175e-02 6.10429585e-02 2.32827411e-03 7.18197378e-01 3.12841484e+03 +4.73200000e-04 -1.65360702e-12 7.09566791e-02 5.56004901e-02 9.18741008e-02 6.10430930e-02 2.32825906e-03 7.18197378e-01 3.12841484e+03 +4.73300000e-04 -1.65360702e-12 7.09566075e-02 5.56003596e-02 9.18741839e-02 6.10432271e-02 2.32824405e-03 7.18197378e-01 3.12841484e+03 +4.73400000e-04 -1.65360702e-12 7.09565360e-02 5.56002294e-02 9.18742668e-02 6.10433609e-02 2.32822908e-03 7.18197378e-01 3.12841484e+03 +4.73500000e-04 -1.65360702e-12 7.09564647e-02 5.56000995e-02 9.18743494e-02 6.10434943e-02 2.32821415e-03 7.18197378e-01 3.12841484e+03 +4.73600000e-04 -1.65360702e-12 7.09563936e-02 5.55999700e-02 9.18744319e-02 6.10436274e-02 2.32819926e-03 7.18197378e-01 3.12843404e+03 +4.73700000e-04 -1.65360702e-12 7.09563227e-02 5.55998408e-02 9.18745141e-02 6.10437602e-02 2.32818441e-03 7.18197378e-01 3.12843404e+03 +4.73800000e-04 -1.65360702e-12 7.09562519e-02 5.55997119e-02 9.18745962e-02 6.10438926e-02 2.32816959e-03 7.18197378e-01 3.12843404e+03 +4.73900000e-04 -1.65360702e-12 7.09561814e-02 5.55995833e-02 9.18746780e-02 6.10440247e-02 2.32815481e-03 7.18197378e-01 3.12843404e+03 +4.74000000e-04 -1.65360702e-12 7.09561110e-02 5.55994551e-02 9.18747596e-02 6.10441564e-02 2.32814007e-03 7.18197378e-01 3.12843404e+03 +4.74100000e-04 -1.65360702e-12 7.09560408e-02 5.55993272e-02 9.18748410e-02 6.10442878e-02 2.32812536e-03 7.18197378e-01 3.12843404e+03 +4.74200000e-04 -1.65360702e-12 7.09559707e-02 5.55991997e-02 9.18749222e-02 6.10444189e-02 2.32811070e-03 7.18197378e-01 3.12843404e+03 +4.74300000e-04 -1.65360702e-12 7.09559009e-02 5.55990724e-02 9.18750031e-02 6.10445496e-02 2.32809607e-03 7.18197378e-01 3.12843404e+03 +4.74400000e-04 -1.65360702e-12 7.09558312e-02 5.55989455e-02 9.18750839e-02 6.10446800e-02 2.32808148e-03 7.18197378e-01 3.12843404e+03 +4.74500000e-04 -1.65360702e-12 7.09557617e-02 5.55988189e-02 9.18751645e-02 6.10448101e-02 2.32806692e-03 7.18197378e-01 3.12843404e+03 +4.74600000e-04 -1.65360702e-12 7.09556924e-02 5.55986927e-02 9.18752449e-02 6.10449398e-02 2.32805241e-03 7.18197378e-01 3.12843404e+03 +4.74700000e-04 -1.65360702e-12 7.09556233e-02 5.55985667e-02 9.18753250e-02 6.10450692e-02 2.32803793e-03 7.18197378e-01 3.12843404e+03 +4.74800000e-04 -1.65360702e-12 7.09555543e-02 5.55984411e-02 9.18754050e-02 6.10451983e-02 2.32802348e-03 7.18197378e-01 3.12843404e+03 +4.74900000e-04 -1.65360702e-12 7.09554855e-02 5.55983158e-02 9.18754847e-02 6.10453270e-02 2.32800908e-03 7.18197378e-01 3.12843404e+03 +4.75000000e-04 -1.65360702e-12 7.09554169e-02 5.55981908e-02 9.18755643e-02 6.10454554e-02 2.32799471e-03 7.18197378e-01 3.12843404e+03 +4.75100000e-04 -1.65360702e-12 7.09553485e-02 5.55980662e-02 9.18756436e-02 6.10455835e-02 2.32798038e-03 7.18197378e-01 3.12843404e+03 +4.75200000e-04 -1.65360702e-12 7.09552803e-02 5.55979418e-02 9.18757227e-02 6.10457113e-02 2.32796608e-03 7.18197378e-01 3.12843404e+03 +4.75300000e-04 -1.65360702e-12 7.09552122e-02 5.55978178e-02 9.18758017e-02 6.10458387e-02 2.32795182e-03 7.18197378e-01 3.12843404e+03 +4.75400000e-04 -1.65360702e-12 7.09551443e-02 5.55976941e-02 9.18758804e-02 6.10459658e-02 2.32793760e-03 7.18197378e-01 3.12843404e+03 +4.75500000e-04 -1.65360702e-12 7.09550765e-02 5.55975707e-02 9.18759589e-02 6.10460926e-02 2.32792341e-03 7.18197378e-01 3.12843404e+03 +4.75600000e-04 -1.65360702e-12 7.09550090e-02 5.55974476e-02 9.18760373e-02 6.10462190e-02 2.32790926e-03 7.18197378e-01 3.12843404e+03 +4.75700000e-04 -1.65360702e-12 7.09549416e-02 5.55973249e-02 9.18761154e-02 6.10463452e-02 2.32789515e-03 7.18197378e-01 3.12843404e+03 +4.75800000e-04 -1.65360702e-12 7.09548744e-02 5.55972024e-02 9.18761933e-02 6.10464710e-02 2.32788107e-03 7.18197378e-01 3.12843404e+03 +4.75900000e-04 -1.65360702e-12 7.09548073e-02 5.55970803e-02 9.18762711e-02 6.10465964e-02 2.32786703e-03 7.18197378e-01 3.12843404e+03 +4.76000000e-04 -1.65360702e-12 7.09547405e-02 5.55969585e-02 9.18763486e-02 6.10467216e-02 2.32785302e-03 7.18197378e-01 3.12845213e+03 +4.76100000e-04 -1.65360702e-12 7.09546737e-02 5.55968370e-02 9.18764259e-02 6.10468465e-02 2.32783905e-03 7.18197378e-01 3.12845213e+03 +4.76200000e-04 -1.65360702e-12 7.09546072e-02 5.55967158e-02 9.18765031e-02 6.10469710e-02 2.32782512e-03 7.18197378e-01 3.12845213e+03 +4.76300000e-04 -1.65360702e-12 7.09545409e-02 5.55965949e-02 9.18765800e-02 6.10470952e-02 2.32781122e-03 7.18197378e-01 3.12845213e+03 +4.76400000e-04 -1.65360702e-12 7.09544747e-02 5.55964743e-02 9.18766568e-02 6.10472191e-02 2.32779736e-03 7.18197378e-01 3.12845213e+03 +4.76500000e-04 -1.65360702e-12 7.09544086e-02 5.55963540e-02 9.18767333e-02 6.10473427e-02 2.32778353e-03 7.18197378e-01 3.12845213e+03 +4.76600000e-04 -1.65360702e-12 7.09543428e-02 5.55962341e-02 9.18768096e-02 6.10474659e-02 2.32776974e-03 7.18197378e-01 3.12845213e+03 +4.76700000e-04 -1.65360702e-12 7.09542771e-02 5.55961144e-02 9.18768858e-02 6.10475889e-02 2.32775598e-03 7.18197378e-01 3.12845213e+03 +4.76800000e-04 -1.65360702e-12 7.09542116e-02 5.55959951e-02 9.18769618e-02 6.10477115e-02 2.32774226e-03 7.18197378e-01 3.12845213e+03 +4.76900000e-04 -1.65360702e-12 7.09541462e-02 5.55958760e-02 9.18770375e-02 6.10478338e-02 2.32772857e-03 7.18197378e-01 3.12845213e+03 +4.77000000e-04 -1.65360702e-12 7.09540811e-02 5.55957573e-02 9.18771131e-02 6.10479558e-02 2.32771492e-03 7.18197378e-01 3.12845213e+03 +4.77100000e-04 -1.65360702e-12 7.09540160e-02 5.55956388e-02 9.18771885e-02 6.10480775e-02 2.32770130e-03 7.18197378e-01 3.12845213e+03 +4.77200000e-04 -1.65360702e-12 7.09539512e-02 5.55955207e-02 9.18772637e-02 6.10481989e-02 2.32768772e-03 7.18197378e-01 3.12845213e+03 +4.77300000e-04 -1.65360702e-12 7.09538865e-02 5.55954029e-02 9.18773387e-02 6.10483199e-02 2.32767418e-03 7.18197378e-01 3.12845213e+03 +4.77400000e-04 -1.65360702e-12 7.09538220e-02 5.55952853e-02 9.18774135e-02 6.10484407e-02 2.32766066e-03 7.18197378e-01 3.12845213e+03 +4.77500000e-04 -1.65360702e-12 7.09537576e-02 5.55951681e-02 9.18774881e-02 6.10485611e-02 2.32764718e-03 7.18197378e-01 3.12845213e+03 +4.77600000e-04 -1.65360702e-12 7.09536934e-02 5.55950512e-02 9.18775625e-02 6.10486813e-02 2.32763374e-03 7.18197378e-01 3.12845213e+03 +4.77700000e-04 -1.65360702e-12 7.09536294e-02 5.55949346e-02 9.18776367e-02 6.10488011e-02 2.32762033e-03 7.18197378e-01 3.12845213e+03 +4.77800000e-04 -1.65360702e-12 7.09535656e-02 5.55948182e-02 9.18777108e-02 6.10489206e-02 2.32760696e-03 7.18197378e-01 3.12845213e+03 +4.77900000e-04 -1.65360702e-12 7.09535019e-02 5.55947022e-02 9.18777846e-02 6.10490399e-02 2.32759362e-03 7.18197378e-01 3.12845213e+03 +4.78000000e-04 -1.65360702e-12 7.09534383e-02 5.55945865e-02 9.18778583e-02 6.10491588e-02 2.32758031e-03 7.18197378e-01 3.12845213e+03 +4.78100000e-04 -1.65360702e-12 7.09533749e-02 5.55944710e-02 9.18779318e-02 6.10492774e-02 2.32756704e-03 7.18197378e-01 3.12845213e+03 +4.78200000e-04 -1.65360702e-12 7.09533117e-02 5.55943559e-02 9.18780050e-02 6.10493957e-02 2.32755380e-03 7.18197378e-01 3.12845213e+03 +4.78300000e-04 -1.65360702e-12 7.09532487e-02 5.55942410e-02 9.18780781e-02 6.10495137e-02 2.32754059e-03 7.18197378e-01 3.12846918e+03 +4.78400000e-04 -1.65360702e-12 7.09531858e-02 5.55941265e-02 9.18781510e-02 6.10496314e-02 2.32752742e-03 7.18197378e-01 3.12846918e+03 +4.78500000e-04 -1.65360702e-12 7.09531231e-02 5.55940122e-02 9.18782238e-02 6.10497488e-02 2.32751428e-03 7.18197378e-01 3.12846918e+03 +4.78600000e-04 -1.65360702e-12 7.09530605e-02 5.55938982e-02 9.18782963e-02 6.10498659e-02 2.32750118e-03 7.18197378e-01 3.12846918e+03 +4.78700000e-04 -1.65360702e-12 7.09529981e-02 5.55937845e-02 9.18783687e-02 6.10499827e-02 2.32748811e-03 7.18197378e-01 3.12846918e+03 +4.78800000e-04 -1.65360702e-12 7.09529358e-02 5.55936712e-02 9.18784408e-02 6.10500992e-02 2.32747507e-03 7.18197378e-01 3.12846918e+03 +4.78900000e-04 -1.65360702e-12 7.09528738e-02 5.55935581e-02 9.18785128e-02 6.10502155e-02 2.32746207e-03 7.18197378e-01 3.12846918e+03 +4.79000000e-04 -1.65360702e-12 7.09528118e-02 5.55934452e-02 9.18785846e-02 6.10503314e-02 2.32744910e-03 7.18197378e-01 3.12846918e+03 +4.79100000e-04 -1.65360702e-12 7.09527501e-02 5.55933327e-02 9.18786562e-02 6.10504470e-02 2.32743616e-03 7.18197378e-01 3.12846918e+03 +4.79200000e-04 -1.65360702e-12 7.09526884e-02 5.55932205e-02 9.18787277e-02 6.10505623e-02 2.32742326e-03 7.18197378e-01 3.12846918e+03 +4.79300000e-04 -1.65360702e-12 7.09526270e-02 5.55931085e-02 9.18787989e-02 6.10506773e-02 2.32741039e-03 7.18197378e-01 3.12846918e+03 +4.79400000e-04 -1.65360702e-12 7.09525657e-02 5.55929969e-02 9.18788700e-02 6.10507921e-02 2.32739755e-03 7.18197378e-01 3.12846918e+03 +4.79500000e-04 -1.65360702e-12 7.09525045e-02 5.55928855e-02 9.18789409e-02 6.10509065e-02 2.32738474e-03 7.18197378e-01 3.12846918e+03 +4.79600000e-04 -1.65360702e-12 7.09524436e-02 5.55927744e-02 9.18790116e-02 6.10510206e-02 2.32737197e-03 7.18197378e-01 3.12846918e+03 +4.79700000e-04 -1.65360702e-12 7.09523827e-02 5.55926636e-02 9.18790821e-02 6.10511345e-02 2.32735923e-03 7.18197378e-01 3.12846918e+03 +4.79800000e-04 -1.65360702e-12 7.09523220e-02 5.55925531e-02 9.18791524e-02 6.10512481e-02 2.32734652e-03 7.18197378e-01 3.12846918e+03 +4.79900000e-04 -1.65360702e-12 7.09522615e-02 5.55924429e-02 9.18792226e-02 6.10513613e-02 2.32733385e-03 7.18197378e-01 3.12846918e+03 +4.80000000e-04 -1.65360702e-12 7.09522012e-02 5.55923329e-02 9.18792926e-02 6.10514743e-02 2.32732121e-03 7.18197378e-01 3.12846918e+03 +4.80100000e-04 -1.65360702e-12 7.09521410e-02 5.55922232e-02 9.18793624e-02 6.10515870e-02 2.32730860e-03 7.18197378e-01 3.12846918e+03 +4.80200000e-04 -1.65360702e-12 7.09520809e-02 5.55921138e-02 9.18794320e-02 6.10516994e-02 2.32729602e-03 7.18197378e-01 3.12846918e+03 +4.80300000e-04 -1.65360702e-12 7.09520210e-02 5.55920047e-02 9.18795015e-02 6.10518115e-02 2.32728347e-03 7.18197378e-01 3.12846918e+03 +4.80400000e-04 -1.65360702e-12 7.09519612e-02 5.55918959e-02 9.18795707e-02 6.10519233e-02 2.32727096e-03 7.18197378e-01 3.12846918e+03 +4.80500000e-04 -1.65360702e-12 7.09519016e-02 5.55917873e-02 9.18796398e-02 6.10520349e-02 2.32725848e-03 7.18197378e-01 3.12846918e+03 +4.80600000e-04 -1.65360702e-12 7.09518422e-02 5.55916790e-02 9.18797087e-02 6.10521462e-02 2.32724603e-03 7.18197378e-01 3.12848525e+03 +4.80700000e-04 -1.65360702e-12 7.09517829e-02 5.55915710e-02 9.18797775e-02 6.10522571e-02 2.32723361e-03 7.18197378e-01 3.12848525e+03 +4.80800000e-04 -1.65360702e-12 7.09517238e-02 5.55914633e-02 9.18798460e-02 6.10523678e-02 2.32722122e-03 7.18197378e-01 3.12848525e+03 +4.80900000e-04 -1.65360702e-12 7.09516648e-02 5.55913558e-02 9.18799144e-02 6.10524782e-02 2.32720887e-03 7.18197378e-01 3.12848525e+03 +4.81000000e-04 -1.65360702e-12 7.09516059e-02 5.55912487e-02 9.18799826e-02 6.10525884e-02 2.32719655e-03 7.18197378e-01 3.12848525e+03 +4.81100000e-04 -1.65360702e-12 7.09515472e-02 5.55911418e-02 9.18800507e-02 6.10526982e-02 2.32718426e-03 7.18197378e-01 3.12848525e+03 +4.81200000e-04 -1.65360702e-12 7.09514887e-02 5.55910351e-02 9.18801185e-02 6.10528078e-02 2.32717200e-03 7.18197378e-01 3.12848525e+03 +4.81300000e-04 -1.65360702e-12 7.09514303e-02 5.55909288e-02 9.18801862e-02 6.10529170e-02 2.32715977e-03 7.18197378e-01 3.12848525e+03 +4.81400000e-04 -1.65360702e-12 7.09513721e-02 5.55908227e-02 9.18802538e-02 6.10530260e-02 2.32714757e-03 7.18197378e-01 3.12848525e+03 +4.81500000e-04 -1.65360702e-12 7.09513140e-02 5.55907169e-02 9.18803211e-02 6.10531348e-02 2.32713540e-03 7.18197378e-01 3.12848525e+03 +4.81600000e-04 -1.65360702e-12 7.09512560e-02 5.55906113e-02 9.18803883e-02 6.10532432e-02 2.32712327e-03 7.18197378e-01 3.12848525e+03 +4.81700000e-04 -1.65360702e-12 7.09511983e-02 5.55905061e-02 9.18804553e-02 6.10533514e-02 2.32711116e-03 7.18197378e-01 3.12848525e+03 +4.81800000e-04 -1.65360702e-12 7.09511406e-02 5.55904011e-02 9.18805221e-02 6.10534593e-02 2.32709909e-03 7.18197378e-01 3.12848525e+03 +4.81900000e-04 -1.65360702e-12 7.09510831e-02 5.55902963e-02 9.18805888e-02 6.10535669e-02 2.32708705e-03 7.18197378e-01 3.12848525e+03 +4.82000000e-04 -1.65360702e-12 7.09510258e-02 5.55901919e-02 9.18806553e-02 6.10536742e-02 2.32707504e-03 7.18197378e-01 3.12848525e+03 +4.82100000e-04 -1.65360702e-12 7.09509685e-02 5.55900877e-02 9.18807216e-02 6.10537813e-02 2.32706306e-03 7.18197378e-01 3.12848525e+03 +4.82200000e-04 -1.65360702e-12 7.09509115e-02 5.55899837e-02 9.18807877e-02 6.10538881e-02 2.32705111e-03 7.18197378e-01 3.12848525e+03 +4.82300000e-04 -1.65360702e-12 7.09508546e-02 5.55898801e-02 9.18808537e-02 6.10539946e-02 2.32703919e-03 7.18197378e-01 3.12848525e+03 +4.82400000e-04 -1.65360702e-12 7.09507978e-02 5.55897767e-02 9.18809195e-02 6.10541009e-02 2.32702730e-03 7.18197378e-01 3.12848525e+03 +4.82500000e-04 -1.65360702e-12 7.09507412e-02 5.55896735e-02 9.18809852e-02 6.10542068e-02 2.32701544e-03 7.18197378e-01 3.12848525e+03 +4.82600000e-04 -1.65360702e-12 7.09506847e-02 5.55895707e-02 9.18810506e-02 6.10543125e-02 2.32700361e-03 7.18197378e-01 3.12848525e+03 +4.82700000e-04 -1.65360702e-12 7.09506284e-02 5.55894680e-02 9.18811159e-02 6.10544180e-02 2.32699181e-03 7.18197378e-01 3.12848525e+03 +4.82800000e-04 -1.65360702e-12 7.09505722e-02 5.55893657e-02 9.18811811e-02 6.10545231e-02 2.32698005e-03 7.18197378e-01 3.12848525e+03 +4.82900000e-04 -1.65360702e-12 7.09505161e-02 5.55892636e-02 9.18812461e-02 6.10546280e-02 2.32696831e-03 7.18197378e-01 3.12850040e+03 +4.83000000e-04 -1.65360702e-12 7.09504602e-02 5.55891618e-02 9.18813109e-02 6.10547327e-02 2.32695660e-03 7.18197378e-01 3.12850040e+03 +4.83100000e-04 -1.65360702e-12 7.09504045e-02 5.55890602e-02 9.18813755e-02 6.10548370e-02 2.32694492e-03 7.18197378e-01 3.12850040e+03 +4.83200000e-04 -1.65360702e-12 7.09503489e-02 5.55889589e-02 9.18814400e-02 6.10549411e-02 2.32693328e-03 7.18197378e-01 3.12850040e+03 +4.83300000e-04 -1.65360702e-12 7.09502934e-02 5.55888579e-02 9.18815043e-02 6.10550450e-02 2.32692166e-03 7.18197378e-01 3.12850040e+03 +4.83400000e-04 -1.65360702e-12 7.09502381e-02 5.55887571e-02 9.18815684e-02 6.10551485e-02 2.32691007e-03 7.18197378e-01 3.12850040e+03 +4.83500000e-04 -1.65360702e-12 7.09501829e-02 5.55886566e-02 9.18816324e-02 6.10552518e-02 2.32689851e-03 7.18197378e-01 3.12850040e+03 +4.83600000e-04 -1.65360702e-12 7.09501278e-02 5.55885563e-02 9.18816962e-02 6.10553548e-02 2.32688698e-03 7.18197378e-01 3.12850040e+03 +4.83700000e-04 -1.65360702e-12 7.09500729e-02 5.55884563e-02 9.18817599e-02 6.10554576e-02 2.32687548e-03 7.18197378e-01 3.12850040e+03 +4.83800000e-04 -1.65360702e-12 7.09500181e-02 5.55883565e-02 9.18818234e-02 6.10555601e-02 2.32686401e-03 7.18197378e-01 3.12850040e+03 +4.83900000e-04 -1.65360702e-12 7.09499635e-02 5.55882570e-02 9.18818867e-02 6.10556624e-02 2.32685257e-03 7.18197378e-01 3.12850040e+03 +4.84000000e-04 -1.65360702e-12 7.09499090e-02 5.55881578e-02 9.18819499e-02 6.10557643e-02 2.32684116e-03 7.18197378e-01 3.12850040e+03 +4.84100000e-04 -1.65360702e-12 7.09498547e-02 5.55880588e-02 9.18820129e-02 6.10558661e-02 2.32682978e-03 7.18197378e-01 3.12850040e+03 +4.84200000e-04 -1.65360702e-12 7.09498004e-02 5.55879600e-02 9.18820757e-02 6.10559675e-02 2.32681842e-03 7.18197378e-01 3.12850040e+03 +4.84300000e-04 -1.65360702e-12 7.09497464e-02 5.55878615e-02 9.18821384e-02 6.10560687e-02 2.32680710e-03 7.18197378e-01 3.12850040e+03 +4.84400000e-04 -1.65360702e-12 7.09496924e-02 5.55877633e-02 9.18822009e-02 6.10561697e-02 2.32679580e-03 7.18197378e-01 3.12850040e+03 +4.84500000e-04 -1.65360702e-12 7.09496386e-02 5.55876653e-02 9.18822633e-02 6.10562704e-02 2.32678454e-03 7.18197378e-01 3.12850040e+03 +4.84600000e-04 -1.65360702e-12 7.09495850e-02 5.55875676e-02 9.18823255e-02 6.10563708e-02 2.32677330e-03 7.18197378e-01 3.12850040e+03 +4.84700000e-04 -1.65360702e-12 7.09495315e-02 5.55874701e-02 9.18823876e-02 6.10564710e-02 2.32676209e-03 7.18197378e-01 3.12850040e+03 +4.84800000e-04 -1.65360702e-12 7.09494781e-02 5.55873728e-02 9.18824494e-02 6.10565709e-02 2.32675091e-03 7.18197378e-01 3.12850040e+03 +4.84900000e-04 -1.65360702e-12 7.09494248e-02 5.55872759e-02 9.18825112e-02 6.10566705e-02 2.32673976e-03 7.18197378e-01 3.12850040e+03 +4.85000000e-04 -1.65360702e-12 7.09493717e-02 5.55871791e-02 9.18825727e-02 6.10567699e-02 2.32672863e-03 7.18197378e-01 3.12850040e+03 +4.85100000e-04 -1.65360702e-12 7.09493187e-02 5.55870826e-02 9.18826342e-02 6.10568691e-02 2.32671754e-03 7.18197378e-01 3.12850040e+03 +4.85200000e-04 -1.65360702e-12 7.09492659e-02 5.55869864e-02 9.18826954e-02 6.10569680e-02 2.32670647e-03 7.18197378e-01 3.12851468e+03 +4.85300000e-04 -1.65360702e-12 7.09492132e-02 5.55868904e-02 9.18827565e-02 6.10570666e-02 2.32669544e-03 7.18197378e-01 3.12851468e+03 +4.85400000e-04 -1.65360702e-12 7.09491606e-02 5.55867946e-02 9.18828175e-02 6.10571650e-02 2.32668443e-03 7.18197378e-01 3.12851468e+03 +4.85500000e-04 -1.65360702e-12 7.09491082e-02 5.55866991e-02 9.18828782e-02 6.10572632e-02 2.32667344e-03 7.18197378e-01 3.12851468e+03 +4.85600000e-04 -1.65360702e-12 7.09490559e-02 5.55866039e-02 9.18829389e-02 6.10573610e-02 2.32666249e-03 7.18197378e-01 3.12851468e+03 +4.85700000e-04 -1.65360702e-12 7.09490037e-02 5.55865088e-02 9.18829994e-02 6.10574587e-02 2.32665156e-03 7.18197378e-01 3.12851468e+03 +4.85800000e-04 -1.65360702e-12 7.09489517e-02 5.55864141e-02 9.18830597e-02 6.10575561e-02 2.32664067e-03 7.18197378e-01 3.12851468e+03 +4.85900000e-04 -1.65360702e-12 7.09488998e-02 5.55863195e-02 9.18831198e-02 6.10576532e-02 2.32662980e-03 7.18197378e-01 3.12851468e+03 +4.86000000e-04 -1.65360702e-12 7.09488480e-02 5.55862252e-02 9.18831799e-02 6.10577501e-02 2.32661896e-03 7.18197378e-01 3.12851468e+03 +4.86100000e-04 -1.65360702e-12 7.09487964e-02 5.55861312e-02 9.18832397e-02 6.10578467e-02 2.32660814e-03 7.18197378e-01 3.12851468e+03 +4.86200000e-04 -1.65360702e-12 7.09487449e-02 5.55860374e-02 9.18832994e-02 6.10579431e-02 2.32659735e-03 7.18197378e-01 3.12851468e+03 +4.86300000e-04 -1.65360702e-12 7.09486935e-02 5.55859438e-02 9.18833590e-02 6.10580393e-02 2.32658660e-03 7.18197378e-01 3.12851468e+03 +4.86400000e-04 -1.65360702e-12 7.09486423e-02 5.55858505e-02 9.18834184e-02 6.10581352e-02 2.32657586e-03 7.18197378e-01 3.12851468e+03 +4.86500000e-04 -1.65360702e-12 7.09485911e-02 5.55857574e-02 9.18834776e-02 6.10582309e-02 2.32656516e-03 7.18197378e-01 3.12851468e+03 +4.86600000e-04 -1.65360702e-12 7.09485402e-02 5.55856645e-02 9.18835367e-02 6.10583263e-02 2.32655448e-03 7.18197378e-01 3.12851468e+03 +4.86700000e-04 -1.65360702e-12 7.09484893e-02 5.55855719e-02 9.18835957e-02 6.10584214e-02 2.32654383e-03 7.18197378e-01 3.12851468e+03 +4.86800000e-04 -1.65360702e-12 7.09484386e-02 5.55854795e-02 9.18836545e-02 6.10585164e-02 2.32653321e-03 7.18197378e-01 3.12851468e+03 +4.86900000e-04 -1.65360702e-12 7.09483880e-02 5.55853874e-02 9.18837131e-02 6.10586110e-02 2.32652262e-03 7.18197378e-01 3.12851468e+03 +4.87000000e-04 -1.65360702e-12 7.09483375e-02 5.55852955e-02 9.18837716e-02 6.10587055e-02 2.32651205e-03 7.18197378e-01 3.12851468e+03 +4.87100000e-04 -1.65360702e-12 7.09482872e-02 5.55852038e-02 9.18838300e-02 6.10587997e-02 2.32650151e-03 7.18197378e-01 3.12851468e+03 +4.87200000e-04 -1.65360702e-12 7.09482370e-02 5.55851123e-02 9.18838882e-02 6.10588936e-02 2.32649099e-03 7.18197378e-01 3.12851468e+03 +4.87300000e-04 -1.65360702e-12 7.09481869e-02 5.55850211e-02 9.18839462e-02 6.10589874e-02 2.32648051e-03 7.18197378e-01 3.12851468e+03 +4.87400000e-04 -1.65360702e-12 7.09481370e-02 5.55849302e-02 9.18840041e-02 6.10590808e-02 2.32647005e-03 7.18197378e-01 3.12851468e+03 +4.87500000e-04 -1.65360702e-12 7.09480872e-02 5.55848394e-02 9.18840619e-02 6.10591741e-02 2.32645961e-03 7.18197378e-01 3.12852814e+03 +4.87600000e-04 -1.65360702e-12 7.09480375e-02 5.55847489e-02 9.18841195e-02 6.10592671e-02 2.32644921e-03 7.18197378e-01 3.12852814e+03 +4.87700000e-04 -1.65360702e-12 7.09479879e-02 5.55846587e-02 9.18841769e-02 6.10593598e-02 2.32643883e-03 7.18197378e-01 3.12852814e+03 +4.87800000e-04 -1.65360702e-12 7.09479385e-02 5.55845686e-02 9.18842342e-02 6.10594524e-02 2.32642847e-03 7.18197378e-01 3.12852814e+03 +4.87900000e-04 -1.65360702e-12 7.09478892e-02 5.55844788e-02 9.18842914e-02 6.10595447e-02 2.32641815e-03 7.18197378e-01 3.12852814e+03 +4.88000000e-04 -1.65360702e-12 7.09478400e-02 5.55843892e-02 9.18843484e-02 6.10596367e-02 2.32640785e-03 7.18197378e-01 3.12852814e+03 +4.88100000e-04 -1.65360702e-12 7.09477909e-02 5.55842999e-02 9.18844053e-02 6.10597285e-02 2.32639757e-03 7.18197378e-01 3.12852814e+03 +4.88200000e-04 -1.65360702e-12 7.09477420e-02 5.55842107e-02 9.18844620e-02 6.10598201e-02 2.32638732e-03 7.18197378e-01 3.12852814e+03 +4.88300000e-04 -1.65360702e-12 7.09476932e-02 5.55841218e-02 9.18845186e-02 6.10599115e-02 2.32637710e-03 7.18197378e-01 3.12852814e+03 +4.88400000e-04 -1.65360702e-12 7.09476445e-02 5.55840332e-02 9.18845750e-02 6.10600026e-02 2.32636691e-03 7.18197378e-01 3.12852814e+03 +4.88500000e-04 -1.65360702e-12 7.09475959e-02 5.55839447e-02 9.18846313e-02 6.10600935e-02 2.32635674e-03 7.18197378e-01 3.12852814e+03 +4.88600000e-04 -1.65360702e-12 7.09475475e-02 5.55838565e-02 9.18846874e-02 6.10601841e-02 2.32634659e-03 7.18197378e-01 3.12852814e+03 +4.88700000e-04 -1.65360702e-12 7.09474992e-02 5.55837685e-02 9.18847435e-02 6.10602745e-02 2.32633648e-03 7.18197378e-01 3.12852814e+03 +4.88800000e-04 -1.65360702e-12 7.09474510e-02 5.55836807e-02 9.18847993e-02 6.10603647e-02 2.32632638e-03 7.18197378e-01 3.12852814e+03 +4.88900000e-04 -1.65360702e-12 7.09474029e-02 5.55835932e-02 9.18848550e-02 6.10604547e-02 2.32631632e-03 7.18197378e-01 3.12852814e+03 +4.89000000e-04 -1.65360702e-12 7.09473550e-02 5.55835059e-02 9.18849106e-02 6.10605444e-02 2.32630628e-03 7.18197378e-01 3.12852814e+03 +4.89100000e-04 -1.65360702e-12 7.09473072e-02 5.55834188e-02 9.18849660e-02 6.10606339e-02 2.32629626e-03 7.18197378e-01 3.12852814e+03 +4.89200000e-04 -1.65360702e-12 7.09472595e-02 5.55833319e-02 9.18850213e-02 6.10607232e-02 2.32628628e-03 7.18197378e-01 3.12852814e+03 +4.89300000e-04 -1.65360702e-12 7.09472119e-02 5.55832453e-02 9.18850765e-02 6.10608122e-02 2.32627631e-03 7.18197378e-01 3.12852814e+03 +4.89400000e-04 -1.65360702e-12 7.09471644e-02 5.55831588e-02 9.18851315e-02 6.10609010e-02 2.32626637e-03 7.18197378e-01 3.12852814e+03 +4.89500000e-04 -1.65360702e-12 7.09471171e-02 5.55830726e-02 9.18851863e-02 6.10609896e-02 2.32625646e-03 7.18197378e-01 3.12852814e+03 +4.89600000e-04 -1.65360702e-12 7.09470699e-02 5.55829866e-02 9.18852411e-02 6.10610780e-02 2.32624657e-03 7.18197378e-01 3.12852814e+03 +4.89700000e-04 -1.65360702e-12 7.09470228e-02 5.55829009e-02 9.18852957e-02 6.10611661e-02 2.32623671e-03 7.18197378e-01 3.12852814e+03 +4.89800000e-04 -1.65360702e-12 7.09469758e-02 5.55828153e-02 9.18853501e-02 6.10612540e-02 2.32622688e-03 7.18197378e-01 3.12854082e+03 +4.89900000e-04 -1.65360702e-12 7.09469290e-02 5.55827300e-02 9.18854044e-02 6.10613417e-02 2.32621706e-03 7.18197378e-01 3.12854082e+03 +4.90000000e-04 -1.65360702e-12 7.09468823e-02 5.55826449e-02 9.18854586e-02 6.10614291e-02 2.32620728e-03 7.18197378e-01 3.12854082e+03 +4.90100000e-04 -1.65360702e-12 7.09468357e-02 5.55825600e-02 9.18855126e-02 6.10615164e-02 2.32619752e-03 7.18197378e-01 3.12854082e+03 +4.90200000e-04 -1.65360702e-12 7.09467892e-02 5.55824753e-02 9.18855665e-02 6.10616034e-02 2.32618778e-03 7.18197378e-01 3.12854082e+03 +4.90300000e-04 -1.65360702e-12 7.09467428e-02 5.55823909e-02 9.18856203e-02 6.10616902e-02 2.32617807e-03 7.18197378e-01 3.12854082e+03 +4.90400000e-04 -1.65360702e-12 7.09466965e-02 5.55823066e-02 9.18856739e-02 6.10617767e-02 2.32616838e-03 7.18197378e-01 3.12854082e+03 +4.90500000e-04 -1.65360702e-12 7.09466504e-02 5.55822226e-02 9.18857274e-02 6.10618631e-02 2.32615872e-03 7.18197378e-01 3.12854082e+03 +4.90600000e-04 -1.65360702e-12 7.09466044e-02 5.55821388e-02 9.18857807e-02 6.10619492e-02 2.32614908e-03 7.18197378e-01 3.12854082e+03 +4.90700000e-04 -1.65360702e-12 7.09465585e-02 5.55820552e-02 9.18858339e-02 6.10620351e-02 2.32613947e-03 7.18197378e-01 3.12854082e+03 +4.90800000e-04 -1.65360702e-12 7.09465127e-02 5.55819718e-02 9.18858870e-02 6.10621208e-02 2.32612988e-03 7.18197378e-01 3.12854082e+03 +4.90900000e-04 -1.65360702e-12 7.09464670e-02 5.55818886e-02 9.18859399e-02 6.10622062e-02 2.32612032e-03 7.18197378e-01 3.12854082e+03 +4.91000000e-04 -1.65360702e-12 7.09464215e-02 5.55818057e-02 9.18859927e-02 6.10622915e-02 2.32611078e-03 7.18197378e-01 3.12854082e+03 +4.91100000e-04 -1.65360702e-12 7.09463761e-02 5.55817229e-02 9.18860454e-02 6.10623765e-02 2.32610127e-03 7.18197378e-01 3.12854082e+03 +4.91200000e-04 -1.65360702e-12 7.09463307e-02 5.55816404e-02 9.18860979e-02 6.10624613e-02 2.32609178e-03 7.18197378e-01 3.12854082e+03 +4.91300000e-04 -1.65360702e-12 7.09462855e-02 5.55815581e-02 9.18861503e-02 6.10625459e-02 2.32608231e-03 7.18197378e-01 3.12854082e+03 +4.91400000e-04 -1.65360702e-12 7.09462405e-02 5.55814760e-02 9.18862026e-02 6.10626303e-02 2.32607287e-03 7.18197378e-01 3.12854082e+03 +4.91500000e-04 -1.65360702e-12 7.09461955e-02 5.55813941e-02 9.18862547e-02 6.10627145e-02 2.32606345e-03 7.18197378e-01 3.12854082e+03 +4.91600000e-04 -1.65360702e-12 7.09461506e-02 5.55813124e-02 9.18863067e-02 6.10627984e-02 2.32605406e-03 7.18197378e-01 3.12854082e+03 +4.91700000e-04 -1.65360702e-12 7.09461059e-02 5.55812309e-02 9.18863585e-02 6.10628821e-02 2.32604469e-03 7.18197378e-01 3.12854082e+03 +4.91800000e-04 -1.65360702e-12 7.09460613e-02 5.55811496e-02 9.18864103e-02 6.10629656e-02 2.32603534e-03 7.18197378e-01 3.12854082e+03 +4.91900000e-04 -1.65360702e-12 7.09460168e-02 5.55810686e-02 9.18864619e-02 6.10630489e-02 2.32602602e-03 7.18197378e-01 3.12854082e+03 +4.92000000e-04 -1.65360702e-12 7.09459724e-02 5.55809877e-02 9.18865133e-02 6.10631320e-02 2.32601673e-03 7.18197378e-01 3.12854082e+03 +4.92100000e-04 -1.65360702e-12 7.09459281e-02 5.55809071e-02 9.18865647e-02 6.10632149e-02 2.32600745e-03 7.18197378e-01 3.12855277e+03 +4.92200000e-04 -1.65360702e-12 7.09458839e-02 5.55808266e-02 9.18866159e-02 6.10632976e-02 2.32599820e-03 7.18197378e-01 3.12855277e+03 +4.92300000e-04 -1.65360702e-12 7.09458399e-02 5.55807464e-02 9.18866669e-02 6.10633800e-02 2.32598898e-03 7.18197378e-01 3.12855277e+03 +4.92400000e-04 -1.65360702e-12 7.09457959e-02 5.55806663e-02 9.18867179e-02 6.10634623e-02 2.32597977e-03 7.18197378e-01 3.12855277e+03 +4.92500000e-04 -1.65360702e-12 7.09457521e-02 5.55805865e-02 9.18867687e-02 6.10635443e-02 2.32597059e-03 7.18197378e-01 3.12855277e+03 +4.92600000e-04 -1.65360702e-12 7.09457084e-02 5.55805069e-02 9.18868193e-02 6.10636261e-02 2.32596144e-03 7.18197378e-01 3.12855277e+03 +4.92700000e-04 -1.65360702e-12 7.09456647e-02 5.55804275e-02 9.18868699e-02 6.10637077e-02 2.32595230e-03 7.18197378e-01 3.12855277e+03 +4.92800000e-04 -1.65360702e-12 7.09456213e-02 5.55803482e-02 9.18869203e-02 6.10637891e-02 2.32594320e-03 7.18197378e-01 3.12855277e+03 +4.92900000e-04 -1.65360702e-12 7.09455779e-02 5.55802692e-02 9.18869706e-02 6.10638703e-02 2.32593411e-03 7.18197378e-01 3.12855277e+03 +4.93000000e-04 -1.65360702e-12 7.09455346e-02 5.55801904e-02 9.18870208e-02 6.10639513e-02 2.32592505e-03 7.18197378e-01 3.12855277e+03 +4.93100000e-04 -1.65360702e-12 7.09454914e-02 5.55801118e-02 9.18870708e-02 6.10640321e-02 2.32591601e-03 7.18197378e-01 3.12855277e+03 +4.93200000e-04 -1.65360702e-12 7.09454484e-02 5.55800334e-02 9.18871207e-02 6.10641127e-02 2.32590699e-03 7.18197378e-01 3.12855277e+03 +4.93300000e-04 -1.65360702e-12 7.09454054e-02 5.55799552e-02 9.18871705e-02 6.10641931e-02 2.32589800e-03 7.18197378e-01 3.12855277e+03 +4.93400000e-04 -1.65360702e-12 7.09453626e-02 5.55798772e-02 9.18872201e-02 6.10642732e-02 2.32588903e-03 7.18197378e-01 3.12855277e+03 +4.93500000e-04 -1.65360702e-12 7.09453199e-02 5.55797994e-02 9.18872697e-02 6.10643532e-02 2.32588008e-03 7.18197378e-01 3.12855277e+03 +4.93600000e-04 -1.65360702e-12 7.09452773e-02 5.55797217e-02 9.18873190e-02 6.10644329e-02 2.32587116e-03 7.18197378e-01 3.12855277e+03 +4.93700000e-04 -1.65360702e-12 7.09452348e-02 5.55796443e-02 9.18873683e-02 6.10645125e-02 2.32586226e-03 7.18197378e-01 3.12855277e+03 +4.93800000e-04 -1.65360702e-12 7.09451924e-02 5.55795671e-02 9.18874175e-02 6.10645918e-02 2.32585338e-03 7.18197378e-01 3.12855277e+03 +4.93900000e-04 -1.65360702e-12 7.09451501e-02 5.55794901e-02 9.18874665e-02 6.10646710e-02 2.32584452e-03 7.18197378e-01 3.12855277e+03 +4.94000000e-04 -1.65360702e-12 7.09451079e-02 5.55794133e-02 9.18875154e-02 6.10647499e-02 2.32583569e-03 7.18197378e-01 3.12855277e+03 +4.94100000e-04 -1.65360702e-12 7.09450658e-02 5.55793367e-02 9.18875641e-02 6.10648286e-02 2.32582688e-03 7.18197378e-01 3.12855277e+03 +4.94200000e-04 -1.65360702e-12 7.09450239e-02 5.55792602e-02 9.18876128e-02 6.10649072e-02 2.32581809e-03 7.18197378e-01 3.12855277e+03 +4.94300000e-04 -1.65360702e-12 7.09449820e-02 5.55791840e-02 9.18876613e-02 6.10649855e-02 2.32580932e-03 7.18197378e-01 3.12855277e+03 +4.94400000e-04 -1.65360702e-12 7.09449402e-02 5.55791080e-02 9.18877097e-02 6.10650637e-02 2.32580058e-03 7.18197378e-01 3.12855277e+03 +4.94500000e-04 -1.65360702e-12 7.09448986e-02 5.55790321e-02 9.18877580e-02 6.10651416e-02 2.32579186e-03 7.18197378e-01 3.12856404e+03 +4.94600000e-04 -1.65360702e-12 7.09448571e-02 5.55789565e-02 9.18878061e-02 6.10652193e-02 2.32578316e-03 7.18197378e-01 3.12856404e+03 +4.94700000e-04 -1.65360702e-12 7.09448156e-02 5.55788810e-02 9.18878541e-02 6.10652969e-02 2.32577448e-03 7.18197378e-01 3.12856404e+03 +4.94800000e-04 -1.65360702e-12 7.09447743e-02 5.55788058e-02 9.18879020e-02 6.10653742e-02 2.32576583e-03 7.18197378e-01 3.12856404e+03 +4.94900000e-04 -1.65360702e-12 7.09447331e-02 5.55787307e-02 9.18879498e-02 6.10654513e-02 2.32575720e-03 7.18197378e-01 3.12856404e+03 +4.95000000e-04 -1.65360702e-12 7.09446920e-02 5.55786558e-02 9.18879975e-02 6.10655283e-02 2.32574859e-03 7.18197378e-01 3.12856404e+03 +4.95100000e-04 -1.65360702e-12 7.09446510e-02 5.55785811e-02 9.18880450e-02 6.10656050e-02 2.32574000e-03 7.18197378e-01 3.12856404e+03 +4.95200000e-04 -1.65360702e-12 7.09446101e-02 5.55785066e-02 9.18880924e-02 6.10656816e-02 2.32573143e-03 7.18197378e-01 3.12856404e+03 +4.95300000e-04 -1.65360702e-12 7.09445693e-02 5.55784323e-02 9.18881397e-02 6.10657579e-02 2.32572289e-03 7.18197378e-01 3.12856404e+03 +4.95400000e-04 -1.65360702e-12 7.09445286e-02 5.55783582e-02 9.18881869e-02 6.10658341e-02 2.32571437e-03 7.18197378e-01 3.12856404e+03 +4.95500000e-04 -1.65360702e-12 7.09444880e-02 5.55782843e-02 9.18882339e-02 6.10659101e-02 2.32570587e-03 7.18197378e-01 3.12856404e+03 +4.95600000e-04 -1.65360702e-12 7.09444475e-02 5.55782106e-02 9.18882809e-02 6.10659858e-02 2.32569739e-03 7.18197378e-01 3.12856404e+03 +4.95700000e-04 -1.65360702e-12 7.09444071e-02 5.55781370e-02 9.18883277e-02 6.10660614e-02 2.32568893e-03 7.18197378e-01 3.12856404e+03 +4.95800000e-04 -1.65360702e-12 7.09443668e-02 5.55780637e-02 9.18883744e-02 6.10661368e-02 2.32568050e-03 7.18197378e-01 3.12856404e+03 +4.95900000e-04 -1.65360702e-12 7.09443267e-02 5.55779905e-02 9.18884209e-02 6.10662120e-02 2.32567208e-03 7.18197378e-01 3.12856404e+03 +4.96000000e-04 -1.65360702e-12 7.09442866e-02 5.55779175e-02 9.18884674e-02 6.10662870e-02 2.32566369e-03 7.18197378e-01 3.12856404e+03 +4.96100000e-04 -1.65360702e-12 7.09442466e-02 5.55778447e-02 9.18885137e-02 6.10663618e-02 2.32565532e-03 7.18197378e-01 3.12856404e+03 +4.96200000e-04 -1.65360702e-12 7.09442067e-02 5.55777721e-02 9.18885599e-02 6.10664364e-02 2.32564697e-03 7.18197378e-01 3.12856404e+03 +4.96300000e-04 -1.65360702e-12 7.09441670e-02 5.55776997e-02 9.18886060e-02 6.10665108e-02 2.32563864e-03 7.18197378e-01 3.12856404e+03 +4.96400000e-04 -1.65360702e-12 7.09441273e-02 5.55776274e-02 9.18886520e-02 6.10665851e-02 2.32563034e-03 7.18197378e-01 3.12856404e+03 +4.96500000e-04 -1.65360702e-12 7.09440878e-02 5.55775554e-02 9.18886978e-02 6.10666591e-02 2.32562205e-03 7.18197378e-01 3.12856404e+03 +4.96600000e-04 -1.65360702e-12 7.09440483e-02 5.55774835e-02 9.18887436e-02 6.10667330e-02 2.32561379e-03 7.18197378e-01 3.12856404e+03 +4.96700000e-04 -1.65360702e-12 7.09440089e-02 5.55774118e-02 9.18887892e-02 6.10668066e-02 2.32560554e-03 7.18197378e-01 3.12856404e+03 +4.96800000e-04 -1.65360702e-12 7.09439697e-02 5.55773403e-02 9.18888347e-02 6.10668801e-02 2.32559732e-03 7.18197378e-01 3.12857466e+03 +4.96900000e-04 -1.65360702e-12 7.09439305e-02 5.55772690e-02 9.18888801e-02 6.10669534e-02 2.32558912e-03 7.18197378e-01 3.12857466e+03 +4.97000000e-04 -1.65360702e-12 7.09438914e-02 5.55771979e-02 9.18889254e-02 6.10670265e-02 2.32558094e-03 7.18197378e-01 3.12857466e+03 +4.97100000e-04 -1.65360702e-12 7.09438525e-02 5.55771269e-02 9.18889705e-02 6.10670994e-02 2.32557278e-03 7.18197378e-01 3.12857466e+03 +4.97200000e-04 -1.65360702e-12 7.09438136e-02 5.55770562e-02 9.18890156e-02 6.10671721e-02 2.32556464e-03 7.18197378e-01 3.12857466e+03 +4.97300000e-04 -1.65360702e-12 7.09437749e-02 5.55769856e-02 9.18890605e-02 6.10672447e-02 2.32555653e-03 7.18197378e-01 3.12857466e+03 +4.97400000e-04 -1.65360702e-12 7.09437362e-02 5.55769151e-02 9.18891053e-02 6.10673170e-02 2.32554843e-03 7.18197378e-01 3.12857466e+03 +4.97500000e-04 -1.65360702e-12 7.09436976e-02 5.55768449e-02 9.18891500e-02 6.10673892e-02 2.32554035e-03 7.18197378e-01 3.12857466e+03 +4.97600000e-04 -1.65360702e-12 7.09436592e-02 5.55767749e-02 9.18891946e-02 6.10674612e-02 2.32553230e-03 7.18197378e-01 3.12857466e+03 +4.97700000e-04 -1.65360702e-12 7.09436208e-02 5.55767050e-02 9.18892391e-02 6.10675330e-02 2.32552427e-03 7.18197378e-01 3.12857466e+03 +4.97800000e-04 -1.65360702e-12 7.09435825e-02 5.55766353e-02 9.18892834e-02 6.10676046e-02 2.32551625e-03 7.18197378e-01 3.12857466e+03 +4.97900000e-04 -1.65360702e-12 7.09435444e-02 5.55765658e-02 9.18893277e-02 6.10676761e-02 2.32550826e-03 7.18197378e-01 3.12857466e+03 +4.98000000e-04 -1.65360702e-12 7.09435063e-02 5.55764965e-02 9.18893718e-02 6.10677473e-02 2.32550028e-03 7.18197378e-01 3.12857466e+03 +4.98100000e-04 -1.65360702e-12 7.09434683e-02 5.55764273e-02 9.18894158e-02 6.10678184e-02 2.32549233e-03 7.18197378e-01 3.12857466e+03 +4.98200000e-04 -1.65360702e-12 7.09434304e-02 5.55763583e-02 9.18894597e-02 6.10678893e-02 2.32548440e-03 7.18197378e-01 3.12857466e+03 +4.98300000e-04 -1.65360702e-12 7.09433927e-02 5.55762895e-02 9.18895035e-02 6.10679600e-02 2.32547649e-03 7.18197378e-01 3.12857466e+03 +4.98400000e-04 -1.65360702e-12 7.09433550e-02 5.55762209e-02 9.18895472e-02 6.10680305e-02 2.32546860e-03 7.18197378e-01 3.12857466e+03 +4.98500000e-04 -1.65360702e-12 7.09433174e-02 5.55761524e-02 9.18895908e-02 6.10681008e-02 2.32546072e-03 7.18197378e-01 3.12857466e+03 +4.98600000e-04 -1.65360702e-12 7.09432799e-02 5.55760841e-02 9.18896342e-02 6.10681710e-02 2.32545287e-03 7.18197378e-01 3.12857466e+03 +4.98700000e-04 -1.65360702e-12 7.09432425e-02 5.55760160e-02 9.18896776e-02 6.10682410e-02 2.32544504e-03 7.18197378e-01 3.12857466e+03 +4.98800000e-04 -1.65360702e-12 7.09432052e-02 5.55759481e-02 9.18897208e-02 6.10683108e-02 2.32543723e-03 7.18197378e-01 3.12857466e+03 +4.98900000e-04 -1.65360702e-12 7.09431680e-02 5.55758804e-02 9.18897639e-02 6.10683804e-02 2.32542944e-03 7.18197378e-01 3.12857466e+03 +4.99000000e-04 -1.65360702e-12 7.09431309e-02 5.55758128e-02 9.18898070e-02 6.10684499e-02 2.32542167e-03 7.18197378e-01 3.12857466e+03 +4.99100000e-04 -1.65360702e-12 7.09430939e-02 5.55757454e-02 9.18898499e-02 6.10685192e-02 2.32541392e-03 7.18197378e-01 3.12858467e+03 +4.99200000e-04 -1.65360702e-12 7.09430569e-02 5.55756781e-02 9.18898926e-02 6.10685883e-02 2.32540618e-03 7.18197378e-01 3.12858467e+03 +4.99300000e-04 -1.65360702e-12 7.09430201e-02 5.55756111e-02 9.18899353e-02 6.10686572e-02 2.32539847e-03 7.18197378e-01 3.12858467e+03 +4.99400000e-04 -1.65360702e-12 7.09429834e-02 5.55755442e-02 9.18899779e-02 6.10687259e-02 2.32539078e-03 7.18197378e-01 3.12858467e+03 +4.99500000e-04 -1.65360702e-12 7.09429468e-02 5.55754774e-02 9.18900204e-02 6.10687945e-02 2.32538311e-03 7.18197378e-01 3.12858467e+03 +4.99600000e-04 -1.65360702e-12 7.09429102e-02 5.55754109e-02 9.18900627e-02 6.10688629e-02 2.32537545e-03 7.18197378e-01 3.12858467e+03 +4.99700000e-04 -1.65360702e-12 7.09428738e-02 5.55753445e-02 9.18901050e-02 6.10689311e-02 2.32536782e-03 7.18197378e-01 3.12858467e+03 +4.99800000e-04 -1.65360702e-12 7.09428374e-02 5.55752783e-02 9.18901471e-02 6.10689991e-02 2.32536021e-03 7.18197378e-01 3.12858467e+03 +4.99900000e-04 -1.65360702e-12 7.09428011e-02 5.55752123e-02 9.18901892e-02 6.10690670e-02 2.32535261e-03 7.18197378e-01 3.12858467e+03 +5.00000000e-04 -1.65360702e-12 7.09427650e-02 5.55751464e-02 9.18902311e-02 6.10691347e-02 2.32534504e-03 7.18197378e-01 3.12858467e+03 +5.00100000e-04 -1.65360702e-12 7.09427289e-02 5.55750807e-02 9.18902729e-02 6.10692022e-02 2.32533748e-03 7.18197378e-01 3.12858467e+03 +5.00200000e-04 -1.65360702e-12 7.09426929e-02 5.55750151e-02 9.18903146e-02 6.10692696e-02 2.32532995e-03 7.18197378e-01 3.12858467e+03 +5.00300000e-04 -1.65360702e-12 7.09426570e-02 5.55749498e-02 9.18903562e-02 6.10693367e-02 2.32532243e-03 7.18197378e-01 3.12858467e+03 +5.00400000e-04 -1.65360702e-12 7.09426212e-02 5.55748846e-02 9.18903977e-02 6.10694037e-02 2.32531493e-03 7.18197378e-01 3.12858467e+03 +5.00500000e-04 -1.65360702e-12 7.09425855e-02 5.55748195e-02 9.18904391e-02 6.10694706e-02 2.32530745e-03 7.18197378e-01 3.12858467e+03 +5.00600000e-04 -1.65360702e-12 7.09425499e-02 5.55747547e-02 9.18904804e-02 6.10695372e-02 2.32530000e-03 7.18197378e-01 3.12858467e+03 +5.00700000e-04 -1.65360702e-12 7.09425143e-02 5.55746900e-02 9.18905216e-02 6.10696037e-02 2.32529255e-03 7.18197378e-01 3.12858467e+03 +5.00800000e-04 -1.65360702e-12 7.09424789e-02 5.55746254e-02 9.18905626e-02 6.10696700e-02 2.32528513e-03 7.18197378e-01 3.12858467e+03 +5.00900000e-04 -1.65360702e-12 7.09424436e-02 5.55745611e-02 9.18906036e-02 6.10697362e-02 2.32527773e-03 7.18197378e-01 3.12858467e+03 +5.01000000e-04 -1.65360702e-12 7.09424083e-02 5.55744968e-02 9.18906445e-02 6.10698022e-02 2.32527035e-03 7.18197378e-01 3.12858467e+03 +5.01100000e-04 -1.65360702e-12 7.09423731e-02 5.55744328e-02 9.18906852e-02 6.10698680e-02 2.32526298e-03 7.18197378e-01 3.12858467e+03 +5.01200000e-04 -1.65360702e-12 7.09423381e-02 5.55743689e-02 9.18907259e-02 6.10699336e-02 2.32525564e-03 7.18197378e-01 3.12858467e+03 +5.01300000e-04 -1.65360702e-12 7.09423031e-02 5.55743052e-02 9.18907664e-02 6.10699991e-02 2.32524831e-03 7.18197378e-01 3.12858467e+03 +5.01400000e-04 -1.65360702e-12 7.09422682e-02 5.55742417e-02 9.18908069e-02 6.10700644e-02 2.32524100e-03 7.18197378e-01 3.12859410e+03 +5.01500000e-04 -1.65360702e-12 7.09422334e-02 5.55741783e-02 9.18908472e-02 6.10701296e-02 2.32523371e-03 7.18197378e-01 3.12859410e+03 +5.01600000e-04 -1.65360702e-12 7.09421986e-02 5.55741150e-02 9.18908875e-02 6.10701945e-02 2.32522644e-03 7.18197378e-01 3.12859410e+03 +5.01700000e-04 -1.65360702e-12 7.09421640e-02 5.55740520e-02 9.18909276e-02 6.10702593e-02 2.32521919e-03 7.18197378e-01 3.12859410e+03 +5.01800000e-04 -1.65360702e-12 7.09421295e-02 5.55739891e-02 9.18909677e-02 6.10703240e-02 2.32521196e-03 7.18197378e-01 3.12859410e+03 +5.01900000e-04 -1.65360702e-12 7.09420950e-02 5.55739263e-02 9.18910076e-02 6.10703885e-02 2.32520474e-03 7.18197378e-01 3.12859410e+03 +5.02000000e-04 -1.65360702e-12 7.09420607e-02 5.55738638e-02 9.18910474e-02 6.10704528e-02 2.32519755e-03 7.18197378e-01 3.12859410e+03 +5.02100000e-04 -1.65360702e-12 7.09420264e-02 5.55738013e-02 9.18910871e-02 6.10705169e-02 2.32519037e-03 7.18197378e-01 3.12859410e+03 +5.02200000e-04 -1.65360702e-12 7.09419922e-02 5.55737391e-02 9.18911268e-02 6.10705809e-02 2.32518321e-03 7.18197378e-01 3.12859410e+03 +5.02300000e-04 -1.65360702e-12 7.09419581e-02 5.55736770e-02 9.18911663e-02 6.10706447e-02 2.32517607e-03 7.18197378e-01 3.12859410e+03 +5.02400000e-04 -1.65360702e-12 7.09419241e-02 5.55736150e-02 9.18912057e-02 6.10707084e-02 2.32516894e-03 7.18197378e-01 3.12859410e+03 +5.02500000e-04 -1.65360702e-12 7.09418901e-02 5.55735532e-02 9.18912450e-02 6.10707719e-02 2.32516184e-03 7.18197378e-01 3.12859410e+03 +5.02600000e-04 -1.65360702e-12 7.09418563e-02 5.55734916e-02 9.18912843e-02 6.10708352e-02 2.32515475e-03 7.18197378e-01 3.12859410e+03 +5.02700000e-04 -1.65360702e-12 7.09418225e-02 5.55734301e-02 9.18913234e-02 6.10708984e-02 2.32514768e-03 7.18197378e-01 3.12859410e+03 +5.02800000e-04 -1.65360702e-12 7.09417889e-02 5.55733688e-02 9.18913624e-02 6.10709614e-02 2.32514063e-03 7.18197378e-01 3.12859410e+03 +5.02900000e-04 -1.65360702e-12 7.09417553e-02 5.55733077e-02 9.18914013e-02 6.10710242e-02 2.32513360e-03 7.18197378e-01 3.12859410e+03 +5.03000000e-04 -1.65360702e-12 7.09417218e-02 5.55732467e-02 9.18914402e-02 6.10710869e-02 2.32512659e-03 7.18197378e-01 3.12859410e+03 +5.03100000e-04 -1.65360702e-12 7.09416884e-02 5.55731858e-02 9.18914789e-02 6.10711495e-02 2.32511959e-03 7.18197378e-01 3.12859410e+03 +5.03200000e-04 -1.65360702e-12 7.09416551e-02 5.55731251e-02 9.18915175e-02 6.10712118e-02 2.32511261e-03 7.18197378e-01 3.12859410e+03 +5.03300000e-04 -1.65360702e-12 7.09416218e-02 5.55730646e-02 9.18915560e-02 6.10712740e-02 2.32510565e-03 7.18197378e-01 3.12859410e+03 +5.03400000e-04 -1.65360702e-12 7.09415887e-02 5.55730042e-02 9.18915945e-02 6.10713361e-02 2.32509871e-03 7.18197378e-01 3.12859410e+03 +5.03500000e-04 -1.65360702e-12 7.09415556e-02 5.55729440e-02 9.18916328e-02 6.10713980e-02 2.32509178e-03 7.18197378e-01 3.12859410e+03 +5.03600000e-04 -1.65360702e-12 7.09415226e-02 5.55728839e-02 9.18916710e-02 6.10714597e-02 2.32508488e-03 7.18197378e-01 3.12859410e+03 +5.03700000e-04 -1.65360702e-12 7.09414897e-02 5.55728240e-02 9.18917092e-02 6.10715213e-02 2.32507799e-03 7.18197378e-01 3.12860732e+03 +5.03800000e-04 -1.65360702e-12 7.09414569e-02 5.55727643e-02 9.18917472e-02 6.10715827e-02 2.32507111e-03 7.18197378e-01 3.12860732e+03 +5.03900000e-04 -1.65360702e-12 7.09414242e-02 5.55727047e-02 9.18917851e-02 6.10716439e-02 2.32506426e-03 7.18197378e-01 3.12860732e+03 +5.04000000e-04 -1.65360702e-12 7.09413915e-02 5.55726452e-02 9.18918230e-02 6.10717050e-02 2.32505742e-03 7.18197378e-01 3.12860732e+03 +5.04100000e-04 -1.65360702e-12 7.09413590e-02 5.55725859e-02 9.18918607e-02 6.10717660e-02 2.32505060e-03 7.18197378e-01 3.12860732e+03 +5.04200000e-04 -1.65360702e-12 7.09413265e-02 5.55725267e-02 9.18918984e-02 6.10718268e-02 2.32504380e-03 7.18197378e-01 3.12860732e+03 +5.04300000e-04 -1.65360702e-12 7.09412941e-02 5.55724677e-02 9.18919359e-02 6.10718874e-02 2.32503702e-03 7.18197378e-01 3.12860732e+03 +5.04400000e-04 -1.65360702e-12 7.09412618e-02 5.55724089e-02 9.18919734e-02 6.10719479e-02 2.32503025e-03 7.18197378e-01 3.12860732e+03 +5.04500000e-04 -1.65360702e-12 7.09412295e-02 5.55723502e-02 9.18920107e-02 6.10720082e-02 2.32502350e-03 7.18197378e-01 3.12860732e+03 +5.04600000e-04 -1.65360702e-12 7.09411974e-02 5.55722916e-02 9.18920480e-02 6.10720684e-02 2.32501677e-03 7.18197378e-01 3.12860732e+03 +5.04700000e-04 -1.65360702e-12 7.09411653e-02 5.55722332e-02 9.18920852e-02 6.10721284e-02 2.32501005e-03 7.18197378e-01 3.12860732e+03 +5.04800000e-04 -1.65360702e-12 7.09411333e-02 5.55721750e-02 9.18921222e-02 6.10721882e-02 2.32500335e-03 7.18197378e-01 3.12860732e+03 +5.04900000e-04 -1.65360702e-12 7.09411014e-02 5.55721169e-02 9.18921592e-02 6.10722480e-02 2.32499667e-03 7.18197378e-01 3.12860732e+03 +5.05000000e-04 -1.65360702e-12 7.09410696e-02 5.55720589e-02 9.18921961e-02 6.10723075e-02 2.32499001e-03 7.18197378e-01 3.12860732e+03 +5.05100000e-04 -1.65360702e-12 7.09410378e-02 5.55720011e-02 9.18922329e-02 6.10723669e-02 2.32498336e-03 7.18197378e-01 3.12860732e+03 +5.05200000e-04 -1.65360702e-12 7.09410062e-02 5.55719435e-02 9.18922696e-02 6.10724262e-02 2.32497673e-03 7.18197378e-01 3.12860732e+03 +5.05300000e-04 -1.65360702e-12 7.09409746e-02 5.55718860e-02 9.18923062e-02 6.10724853e-02 2.32497012e-03 7.18197378e-01 3.12860732e+03 +5.05400000e-04 -1.65360702e-12 7.09409431e-02 5.55718286e-02 9.18923427e-02 6.10725442e-02 2.32496352e-03 7.18197378e-01 3.12860732e+03 +5.05500000e-04 -1.65360702e-12 7.09409117e-02 5.55717714e-02 9.18923791e-02 6.10726030e-02 2.32495694e-03 7.18197378e-01 3.12860732e+03 +5.05600000e-04 -1.65360702e-12 7.09408804e-02 5.55717143e-02 9.18924154e-02 6.10726616e-02 2.32495038e-03 7.18197378e-01 3.12860732e+03 +5.05700000e-04 -1.65360702e-12 7.09408491e-02 5.55716574e-02 9.18924517e-02 6.10727201e-02 2.32494383e-03 7.18197378e-01 3.12860732e+03 +5.05800000e-04 -1.65360702e-12 7.09408179e-02 5.55716006e-02 9.18924878e-02 6.10727785e-02 2.32493730e-03 7.18197378e-01 3.12860732e+03 +5.05900000e-04 -1.65360702e-12 7.09407868e-02 5.55715440e-02 9.18925238e-02 6.10728367e-02 2.32493079e-03 7.18197378e-01 3.12860732e+03 +5.06000000e-04 -1.65360702e-12 7.09407558e-02 5.55714875e-02 9.18925598e-02 6.10728947e-02 2.32492430e-03 7.18197378e-01 3.12860732e+03 +5.06100000e-04 -1.65360702e-12 7.09407249e-02 5.55714312e-02 9.18925956e-02 6.10729526e-02 2.32491782e-03 7.18197378e-01 3.12860732e+03 +5.06200000e-04 -1.65360702e-12 7.09406940e-02 5.55713750e-02 9.18926314e-02 6.10730104e-02 2.32491135e-03 7.18197378e-01 3.12860732e+03 +5.06300000e-04 -1.65360702e-12 7.09406632e-02 5.55713189e-02 9.18926671e-02 6.10730680e-02 2.32490491e-03 7.18197378e-01 3.12860732e+03 +5.06400000e-04 -1.65360702e-12 7.09406325e-02 5.55712630e-02 9.18927027e-02 6.10731255e-02 2.32489848e-03 7.18197378e-01 3.12860732e+03 +5.06500000e-04 -1.65360702e-12 7.09406019e-02 5.55712073e-02 9.18927382e-02 6.10731828e-02 2.32489207e-03 7.18197378e-01 3.12860732e+03 +5.06600000e-04 -1.65360702e-12 7.09405714e-02 5.55711516e-02 9.18927736e-02 6.10732399e-02 2.32488567e-03 7.18197378e-01 3.12860732e+03 +5.06700000e-04 -1.65360702e-12 7.09405409e-02 5.55710962e-02 9.18928089e-02 6.10732969e-02 2.32487929e-03 7.18197378e-01 3.12860732e+03 +5.06800000e-04 -1.65360702e-12 7.09405105e-02 5.55710408e-02 9.18928441e-02 6.10733538e-02 2.32487293e-03 7.18197378e-01 3.12860732e+03 +5.06900000e-04 -1.65360702e-12 7.09404802e-02 5.55709856e-02 9.18928792e-02 6.10734105e-02 2.32486658e-03 7.18197378e-01 3.12860732e+03 +5.07000000e-04 -1.65360702e-12 7.09404500e-02 5.55709306e-02 9.18929143e-02 6.10734671e-02 2.32486025e-03 7.18197378e-01 3.12860732e+03 +5.07100000e-04 -1.65360702e-12 7.09404198e-02 5.55708756e-02 9.18929492e-02 6.10735236e-02 2.32485393e-03 7.18197378e-01 3.12860732e+03 +5.07200000e-04 -1.65360702e-12 7.09403897e-02 5.55708209e-02 9.18929841e-02 6.10735798e-02 2.32484763e-03 7.18197378e-01 3.12861940e+03 +5.07300000e-04 -1.65360702e-12 7.09403597e-02 5.55707662e-02 9.18930189e-02 6.10736360e-02 2.32484135e-03 7.18197378e-01 3.12861940e+03 +5.07400000e-04 -1.65360702e-12 7.09403298e-02 5.55707117e-02 9.18930535e-02 6.10736920e-02 2.32483508e-03 7.18197378e-01 3.12861940e+03 +5.07500000e-04 -1.65360702e-12 7.09402999e-02 5.55706574e-02 9.18930881e-02 6.10737479e-02 2.32482883e-03 7.18197378e-01 3.12861940e+03 +5.07600000e-04 -1.65360702e-12 7.09402702e-02 5.55706032e-02 9.18931226e-02 6.10738036e-02 2.32482260e-03 7.18197378e-01 3.12861940e+03 +5.07700000e-04 -1.65360702e-12 7.09402405e-02 5.55705491e-02 9.18931571e-02 6.10738591e-02 2.32481638e-03 7.18197378e-01 3.12861940e+03 +5.07800000e-04 -1.65360702e-12 7.09402109e-02 5.55704951e-02 9.18931914e-02 6.10739146e-02 2.32481018e-03 7.18197378e-01 3.12861940e+03 +5.07900000e-04 -1.65360702e-12 7.09401813e-02 5.55704413e-02 9.18932256e-02 6.10739699e-02 2.32480399e-03 7.18197378e-01 3.12861940e+03 +5.08000000e-04 -1.65360702e-12 7.09401518e-02 5.55703877e-02 9.18932598e-02 6.10740250e-02 2.32479782e-03 7.18197378e-01 3.12861940e+03 +5.08100000e-04 -1.65360702e-12 7.09401224e-02 5.55703342e-02 9.18932939e-02 6.10740800e-02 2.32479166e-03 7.18197378e-01 3.12861940e+03 +5.08200000e-04 -1.65360702e-12 7.09400931e-02 5.55702808e-02 9.18933278e-02 6.10741349e-02 2.32478552e-03 7.18197378e-01 3.12861940e+03 +5.08300000e-04 -1.65360702e-12 7.09400639e-02 5.55702275e-02 9.18933617e-02 6.10741896e-02 2.32477940e-03 7.18197378e-01 3.12861940e+03 +5.08400000e-04 -1.65360702e-12 7.09400347e-02 5.55701744e-02 9.18933955e-02 6.10742442e-02 2.32477329e-03 7.18197378e-01 3.12861940e+03 +5.08500000e-04 -1.65360702e-12 7.09400056e-02 5.55701214e-02 9.18934293e-02 6.10742987e-02 2.32476720e-03 7.18197378e-01 3.12861940e+03 +5.08600000e-04 -1.65360702e-12 7.09399766e-02 5.55700686e-02 9.18934629e-02 6.10743530e-02 2.32476112e-03 7.18197378e-01 3.12861940e+03 +5.08700000e-04 -1.65360702e-12 7.09399477e-02 5.55700159e-02 9.18934964e-02 6.10744071e-02 2.32475506e-03 7.18197378e-01 3.12861940e+03 +5.08800000e-04 -1.65360702e-12 7.09399188e-02 5.55699633e-02 9.18935299e-02 6.10744612e-02 2.32474902e-03 7.18197378e-01 3.12861940e+03 +5.08900000e-04 -1.65360702e-12 7.09398900e-02 5.55699109e-02 9.18935633e-02 6.10745150e-02 2.32474299e-03 7.18197378e-01 3.12861940e+03 +5.09000000e-04 -1.65360702e-12 7.09398613e-02 5.55698585e-02 9.18935966e-02 6.10745688e-02 2.32473697e-03 7.18197378e-01 3.12861940e+03 +5.09100000e-04 -1.65360702e-12 7.09398326e-02 5.55698064e-02 9.18936298e-02 6.10746224e-02 2.32473097e-03 7.18197378e-01 3.12861940e+03 +5.09200000e-04 -1.65360702e-12 7.09398040e-02 5.55697543e-02 9.18936629e-02 6.10746759e-02 2.32472499e-03 7.18197378e-01 3.12861940e+03 +5.09300000e-04 -1.65360702e-12 7.09397755e-02 5.55697024e-02 9.18936959e-02 6.10747292e-02 2.32471902e-03 7.18197378e-01 3.12861940e+03 +5.09400000e-04 -1.65360702e-12 7.09397471e-02 5.55696507e-02 9.18937289e-02 6.10747824e-02 2.32471306e-03 7.18197378e-01 3.12861940e+03 +5.09500000e-04 -1.65360702e-12 7.09397187e-02 5.55695990e-02 9.18937617e-02 6.10748355e-02 2.32470713e-03 7.18197378e-01 3.12861940e+03 +5.09600000e-04 -1.65360702e-12 7.09396905e-02 5.55695475e-02 9.18937945e-02 6.10748884e-02 2.32470120e-03 7.18197378e-01 3.12861940e+03 +5.09700000e-04 -1.65360702e-12 7.09396622e-02 5.55694961e-02 9.18938272e-02 6.10749412e-02 2.32469529e-03 7.18197378e-01 3.12861940e+03 +5.09800000e-04 -1.65360702e-12 7.09396341e-02 5.55694449e-02 9.18938598e-02 6.10749939e-02 2.32468940e-03 7.18197378e-01 3.12861940e+03 +5.09900000e-04 -1.65360702e-12 7.09396060e-02 5.55693938e-02 9.18938924e-02 6.10750464e-02 2.32468352e-03 7.18197378e-01 3.12861940e+03 +5.10000000e-04 -1.65360702e-12 7.09395780e-02 5.55693428e-02 9.18939248e-02 6.10750988e-02 2.32467766e-03 7.18197378e-01 3.12861940e+03 +5.10100000e-04 -1.65360702e-12 7.09395501e-02 5.55692919e-02 9.18939572e-02 6.10751511e-02 2.32467181e-03 7.18197378e-01 3.12861940e+03 +5.10200000e-04 -1.65360702e-12 7.09395223e-02 5.55692412e-02 9.18939895e-02 6.10752032e-02 2.32466598e-03 7.18197378e-01 3.12861940e+03 +5.10300000e-04 -1.65360702e-12 7.09394945e-02 5.55691906e-02 9.18940217e-02 6.10752552e-02 2.32466016e-03 7.18197378e-01 3.12861940e+03 +5.10400000e-04 -1.65360702e-12 7.09394668e-02 5.55691402e-02 9.18940538e-02 6.10753071e-02 2.32465436e-03 7.18197378e-01 3.12861940e+03 +5.10500000e-04 -1.65360702e-12 7.09394391e-02 5.55690898e-02 9.18940858e-02 6.10753588e-02 2.32464857e-03 7.18197378e-01 3.12861940e+03 +5.10600000e-04 -1.65360702e-12 7.09394116e-02 5.55690396e-02 9.18941178e-02 6.10754104e-02 2.32464280e-03 7.18197378e-01 3.12861940e+03 +5.10700000e-04 -1.65360702e-12 7.09393841e-02 5.55689896e-02 9.18941496e-02 6.10754619e-02 2.32463704e-03 7.18197378e-01 3.12863046e+03 +5.10800000e-04 -1.65360702e-12 7.09393566e-02 5.55689396e-02 9.18941814e-02 6.10755132e-02 2.32463130e-03 7.18197378e-01 3.12863046e+03 +5.10900000e-04 -1.65360702e-12 7.09393293e-02 5.55688898e-02 9.18942131e-02 6.10755644e-02 2.32462557e-03 7.18197378e-01 3.12863046e+03 +5.11000000e-04 -1.65360702e-12 7.09393020e-02 5.55688401e-02 9.18942448e-02 6.10756155e-02 2.32461985e-03 7.18197378e-01 3.12863046e+03 +5.11100000e-04 -1.65360702e-12 7.09392748e-02 5.55687905e-02 9.18942763e-02 6.10756664e-02 2.32461415e-03 7.18197378e-01 3.12863046e+03 +5.11200000e-04 -1.65360702e-12 7.09392476e-02 5.55687411e-02 9.18943078e-02 6.10757172e-02 2.32460847e-03 7.18197378e-01 3.12863046e+03 +5.11300000e-04 -1.65360702e-12 7.09392205e-02 5.55686918e-02 9.18943392e-02 6.10757679e-02 2.32460280e-03 7.18197378e-01 3.12863046e+03 +5.11400000e-04 -1.65360702e-12 7.09391935e-02 5.55686426e-02 9.18943705e-02 6.10758184e-02 2.32459714e-03 7.18197378e-01 3.12863046e+03 +5.11500000e-04 -1.65360702e-12 7.09391666e-02 5.55685935e-02 9.18944017e-02 6.10758688e-02 2.32459150e-03 7.18197378e-01 3.12863046e+03 +5.11600000e-04 -1.65360702e-12 7.09391397e-02 5.55685446e-02 9.18944328e-02 6.10759191e-02 2.32458587e-03 7.18197378e-01 3.12863046e+03 +5.11700000e-04 -1.65360702e-12 7.09391129e-02 5.55684958e-02 9.18944639e-02 6.10759693e-02 2.32458026e-03 7.18197378e-01 3.12863046e+03 +5.11800000e-04 -1.65360702e-12 7.09390862e-02 5.55684471e-02 9.18944949e-02 6.10760193e-02 2.32457466e-03 7.18197378e-01 3.12863046e+03 +5.11900000e-04 -1.65360702e-12 7.09390595e-02 5.55683985e-02 9.18945258e-02 6.10760692e-02 2.32456907e-03 7.18197378e-01 3.12863046e+03 +5.12000000e-04 -1.65360702e-12 7.09390329e-02 5.55683501e-02 9.18945566e-02 6.10761190e-02 2.32456350e-03 7.18197378e-01 3.12863046e+03 +5.12100000e-04 -1.65360702e-12 7.09390064e-02 5.55683018e-02 9.18945874e-02 6.10761687e-02 2.32455795e-03 7.18197378e-01 3.12863046e+03 +5.12200000e-04 -1.65360702e-12 7.09389799e-02 5.55682536e-02 9.18946180e-02 6.10762182e-02 2.32455241e-03 7.18197378e-01 3.12863046e+03 +5.12300000e-04 -1.65360702e-12 7.09389535e-02 5.55682055e-02 9.18946486e-02 6.10762676e-02 2.32454688e-03 7.18197378e-01 3.12863046e+03 +5.12400000e-04 -1.65360702e-12 7.09389272e-02 5.55681576e-02 9.18946791e-02 6.10763168e-02 2.32454137e-03 7.18197378e-01 3.12863046e+03 +5.12500000e-04 -1.65360702e-12 7.09389009e-02 5.55681098e-02 9.18947096e-02 6.10763660e-02 2.32453587e-03 7.18197378e-01 3.12863046e+03 +5.12600000e-04 -1.65360702e-12 7.09388747e-02 5.55680621e-02 9.18947399e-02 6.10764150e-02 2.32453038e-03 7.18197378e-01 3.12863046e+03 +5.12700000e-04 -1.65360702e-12 7.09388486e-02 5.55680145e-02 9.18947702e-02 6.10764639e-02 2.32452491e-03 7.18197378e-01 3.12863046e+03 +5.12800000e-04 -1.65360702e-12 7.09388226e-02 5.55679671e-02 9.18948004e-02 6.10765127e-02 2.32451946e-03 7.18197378e-01 3.12863046e+03 +5.12900000e-04 -1.65360702e-12 7.09387966e-02 5.55679197e-02 9.18948305e-02 6.10765613e-02 2.32451401e-03 7.18197378e-01 3.12863046e+03 +5.13000000e-04 -1.65360702e-12 7.09387706e-02 5.55678725e-02 9.18948606e-02 6.10766098e-02 2.32450858e-03 7.18197378e-01 3.12863046e+03 +5.13100000e-04 -1.65360702e-12 7.09387448e-02 5.55678254e-02 9.18948906e-02 6.10766582e-02 2.32450317e-03 7.18197378e-01 3.12863046e+03 +5.13200000e-04 -1.65360702e-12 7.09387190e-02 5.55677785e-02 9.18949204e-02 6.10767065e-02 2.32449777e-03 7.18197378e-01 3.12863046e+03 +5.13300000e-04 -1.65360702e-12 7.09386933e-02 5.55677316e-02 9.18949503e-02 6.10767546e-02 2.32449238e-03 7.18197378e-01 3.12863046e+03 +5.13400000e-04 -1.65360702e-12 7.09386676e-02 5.55676849e-02 9.18949800e-02 6.10768027e-02 2.32448701e-03 7.18197378e-01 3.12863046e+03 +5.13500000e-04 -1.65360702e-12 7.09386420e-02 5.55676383e-02 9.18950097e-02 6.10768506e-02 2.32448165e-03 7.18197378e-01 3.12863046e+03 +5.13600000e-04 -1.65360702e-12 7.09386165e-02 5.55675918e-02 9.18950393e-02 6.10768983e-02 2.32447630e-03 7.18197378e-01 3.12863046e+03 +5.13700000e-04 -1.65360702e-12 7.09385910e-02 5.55675454e-02 9.18950688e-02 6.10769460e-02 2.32447097e-03 7.18197378e-01 3.12863046e+03 +5.13800000e-04 -1.65360702e-12 7.09385656e-02 5.55674992e-02 9.18950982e-02 6.10769935e-02 2.32446565e-03 7.18197378e-01 3.12863046e+03 +5.13900000e-04 -1.65360702e-12 7.09385403e-02 5.55674530e-02 9.18951276e-02 6.10770409e-02 2.32446034e-03 7.18197378e-01 3.12863046e+03 +5.14000000e-04 -1.65360702e-12 7.09385150e-02 5.55674070e-02 9.18951569e-02 6.10770882e-02 2.32445505e-03 7.18197378e-01 3.12863046e+03 +5.14100000e-04 -1.65360702e-12 7.09384898e-02 5.55673611e-02 9.18951861e-02 6.10771354e-02 2.32444977e-03 7.18197378e-01 3.12863046e+03 +5.14200000e-04 -1.65360702e-12 7.09384647e-02 5.55673153e-02 9.18952152e-02 6.10771824e-02 2.32444451e-03 7.18197378e-01 3.12864056e+03 +5.14300000e-04 -1.65360702e-12 7.09384396e-02 5.55672697e-02 9.18952443e-02 6.10772294e-02 2.32443926e-03 7.18197378e-01 3.12864056e+03 +5.14400000e-04 -1.65360702e-12 7.09384146e-02 5.55672241e-02 9.18952733e-02 6.10772762e-02 2.32443402e-03 7.18197378e-01 3.12864056e+03 +5.14500000e-04 -1.65360702e-12 7.09383896e-02 5.55671787e-02 9.18953022e-02 6.10773229e-02 2.32442880e-03 7.18197378e-01 3.12864056e+03 +5.14600000e-04 -1.65360702e-12 7.09383647e-02 5.55671334e-02 9.18953310e-02 6.10773694e-02 2.32442358e-03 7.18197378e-01 3.12864056e+03 +5.14700000e-04 -1.65360702e-12 7.09383399e-02 5.55670882e-02 9.18953598e-02 6.10774159e-02 2.32441839e-03 7.18197378e-01 3.12864056e+03 +5.14800000e-04 -1.65360702e-12 7.09383152e-02 5.55670431e-02 9.18953885e-02 6.10774622e-02 2.32441320e-03 7.18197378e-01 3.12864056e+03 +5.14900000e-04 -1.65360702e-12 7.09382905e-02 5.55669981e-02 9.18954171e-02 6.10775084e-02 2.32440803e-03 7.18197378e-01 3.12864056e+03 +5.15000000e-04 -1.65360702e-12 7.09382658e-02 5.55669533e-02 9.18954456e-02 6.10775545e-02 2.32440287e-03 7.18197378e-01 3.12864056e+03 +5.15100000e-04 -1.65360702e-12 7.09382413e-02 5.55669086e-02 9.18954741e-02 6.10776005e-02 2.32439773e-03 7.18197378e-01 3.12864056e+03 +5.15200000e-04 -1.65360702e-12 7.09382168e-02 5.55668639e-02 9.18955025e-02 6.10776463e-02 2.32439260e-03 7.18197378e-01 3.12864056e+03 +5.15300000e-04 -1.65360702e-12 7.09381923e-02 5.55668194e-02 9.18955308e-02 6.10776921e-02 2.32438748e-03 7.18197378e-01 3.12864056e+03 +5.15400000e-04 -1.65360702e-12 7.09381679e-02 5.55667750e-02 9.18955591e-02 6.10777377e-02 2.32438237e-03 7.18197378e-01 3.12864056e+03 +5.15500000e-04 -1.65360702e-12 7.09381436e-02 5.55667308e-02 9.18955873e-02 6.10777832e-02 2.32437728e-03 7.18197378e-01 3.12864056e+03 +5.15600000e-04 -1.65360702e-12 7.09381194e-02 5.55666866e-02 9.18956154e-02 6.10778286e-02 2.32437220e-03 7.18197378e-01 3.12864056e+03 +5.15700000e-04 -1.65360702e-12 7.09380952e-02 5.55666425e-02 9.18956434e-02 6.10778739e-02 2.32436714e-03 7.18197378e-01 3.12864056e+03 +5.15800000e-04 -1.65360702e-12 7.09380710e-02 5.55665986e-02 9.18956714e-02 6.10779190e-02 2.32436208e-03 7.18197378e-01 3.12864056e+03 +5.15900000e-04 -1.65360702e-12 7.09380470e-02 5.55665548e-02 9.18956993e-02 6.10779641e-02 2.32435704e-03 7.18197378e-01 3.12864056e+03 +5.16000000e-04 -1.65360702e-12 7.09380230e-02 5.55665111e-02 9.18957271e-02 6.10780090e-02 2.32435202e-03 7.18197378e-01 3.12864056e+03 +5.16100000e-04 -1.65360702e-12 7.09379990e-02 5.55664675e-02 9.18957549e-02 6.10780538e-02 2.32434700e-03 7.18197378e-01 3.12864056e+03 +5.16200000e-04 -1.65360702e-12 7.09379751e-02 5.55664240e-02 9.18957825e-02 6.10780985e-02 2.32434200e-03 7.18197378e-01 3.12864056e+03 +5.16300000e-04 -1.65360702e-12 7.09379513e-02 5.55663806e-02 9.18958101e-02 6.10781431e-02 2.32433701e-03 7.18197378e-01 3.12864056e+03 +5.16400000e-04 -1.65360702e-12 7.09379275e-02 5.55663373e-02 9.18958377e-02 6.10781876e-02 2.32433204e-03 7.18197378e-01 3.12864056e+03 +5.16500000e-04 -1.65360702e-12 7.09379038e-02 5.55662941e-02 9.18958652e-02 6.10782319e-02 2.32432707e-03 7.18197378e-01 3.12864056e+03 +5.16600000e-04 -1.65360702e-12 7.09378802e-02 5.55662511e-02 9.18958926e-02 6.10782762e-02 2.32432212e-03 7.18197378e-01 3.12864056e+03 +5.16700000e-04 -1.65360702e-12 7.09378566e-02 5.55662082e-02 9.18959199e-02 6.10783203e-02 2.32431718e-03 7.18197378e-01 3.12864056e+03 +5.16800000e-04 -1.65360702e-12 7.09378331e-02 5.55661653e-02 9.18959471e-02 6.10783643e-02 2.32431226e-03 7.18197378e-01 3.12864056e+03 +5.16900000e-04 -1.65360702e-12 7.09378096e-02 5.55661226e-02 9.18959743e-02 6.10784082e-02 2.32430735e-03 7.18197378e-01 3.12864056e+03 +5.17000000e-04 -1.65360702e-12 7.09377862e-02 5.55660800e-02 9.18960014e-02 6.10784520e-02 2.32430245e-03 7.18197378e-01 3.12864056e+03 +5.17100000e-04 -1.65360702e-12 7.09377629e-02 5.55660375e-02 9.18960285e-02 6.10784957e-02 2.32429756e-03 7.18197378e-01 3.12864056e+03 +5.17200000e-04 -1.65360702e-12 7.09377396e-02 5.55659951e-02 9.18960555e-02 6.10785393e-02 2.32429268e-03 7.18197378e-01 3.12864056e+03 +5.17300000e-04 -1.65360702e-12 7.09377164e-02 5.55659528e-02 9.18960824e-02 6.10785827e-02 2.32428782e-03 7.18197378e-01 3.12864056e+03 +5.17400000e-04 -1.65360702e-12 7.09376932e-02 5.55659106e-02 9.18961092e-02 6.10786261e-02 2.32428297e-03 7.18197378e-01 3.12864056e+03 +5.17500000e-04 -1.65360702e-12 7.09376701e-02 5.55658686e-02 9.18961360e-02 6.10786693e-02 2.32427813e-03 7.18197378e-01 3.12864056e+03 +5.17600000e-04 -1.65360702e-12 7.09376471e-02 5.55658266e-02 9.18961627e-02 6.10787124e-02 2.32427331e-03 7.18197378e-01 3.12864056e+03 +5.17700000e-04 -1.65360702e-12 7.09376241e-02 5.55657848e-02 9.18961894e-02 6.10787554e-02 2.32426849e-03 7.18197378e-01 3.12864981e+03 +5.17800000e-04 -1.65360702e-12 7.09376012e-02 5.55657430e-02 9.18962159e-02 6.10787983e-02 2.32426369e-03 7.18197378e-01 3.12864981e+03 +5.17900000e-04 -1.65360702e-12 7.09375783e-02 5.55657014e-02 9.18962424e-02 6.10788411e-02 2.32425891e-03 7.18197378e-01 3.12864981e+03 +5.18000000e-04 -1.65360702e-12 7.09375555e-02 5.55656599e-02 9.18962689e-02 6.10788838e-02 2.32425413e-03 7.18197378e-01 3.12864981e+03 +5.18100000e-04 -1.65360702e-12 7.09375328e-02 5.55656184e-02 9.18962952e-02 6.10789264e-02 2.32424936e-03 7.18197378e-01 3.12864981e+03 +5.18200000e-04 -1.65360702e-12 7.09375101e-02 5.55655771e-02 9.18963215e-02 6.10789688e-02 2.32424461e-03 7.18197378e-01 3.12864981e+03 +5.18300000e-04 -1.65360702e-12 7.09374874e-02 5.55655359e-02 9.18963477e-02 6.10790112e-02 2.32423987e-03 7.18197378e-01 3.12864981e+03 +5.18400000e-04 -1.65360702e-12 7.09374649e-02 5.55654948e-02 9.18963739e-02 6.10790534e-02 2.32423515e-03 7.18197378e-01 3.12864981e+03 +5.18500000e-04 -1.65360702e-12 7.09374423e-02 5.55654538e-02 9.18964000e-02 6.10790956e-02 2.32423043e-03 7.18197378e-01 3.12864981e+03 +5.18600000e-04 -1.65360702e-12 7.09374199e-02 5.55654129e-02 9.18964260e-02 6.10791376e-02 2.32422573e-03 7.18197378e-01 3.12864981e+03 +5.18700000e-04 -1.65360702e-12 7.09373975e-02 5.55653721e-02 9.18964520e-02 6.10791795e-02 2.32422104e-03 7.18197378e-01 3.12864981e+03 +5.18800000e-04 -1.65360702e-12 7.09373751e-02 5.55653314e-02 9.18964779e-02 6.10792214e-02 2.32421636e-03 7.18197378e-01 3.12864981e+03 +5.18900000e-04 -1.65360702e-12 7.09373528e-02 5.55652908e-02 9.18965037e-02 6.10792631e-02 2.32421169e-03 7.18197378e-01 3.12864981e+03 +5.19000000e-04 -1.65360702e-12 7.09373306e-02 5.55652503e-02 9.18965295e-02 6.10793047e-02 2.32420703e-03 7.18197378e-01 3.12864981e+03 +5.19100000e-04 -1.65360702e-12 7.09373084e-02 5.55652100e-02 9.18965552e-02 6.10793462e-02 2.32420239e-03 7.18197378e-01 3.12864981e+03 +5.19200000e-04 -1.65360702e-12 7.09372863e-02 5.55651697e-02 9.18965808e-02 6.10793876e-02 2.32419776e-03 7.18197378e-01 3.12864981e+03 +5.19300000e-04 -1.65360702e-12 7.09372643e-02 5.55651295e-02 9.18966064e-02 6.10794288e-02 2.32419314e-03 7.18197378e-01 3.12864981e+03 +5.19400000e-04 -1.65360702e-12 7.09372423e-02 5.55650894e-02 9.18966319e-02 6.10794700e-02 2.32418853e-03 7.18197378e-01 3.12864981e+03 +5.19500000e-04 -1.65360702e-12 7.09372203e-02 5.55650495e-02 9.18966573e-02 6.10795111e-02 2.32418394e-03 7.18197378e-01 3.12864981e+03 +5.19600000e-04 -1.65360702e-12 7.09371984e-02 5.55650096e-02 9.18966827e-02 6.10795521e-02 2.32417935e-03 7.18197378e-01 3.12864981e+03 +5.19700000e-04 -1.65360702e-12 7.09371766e-02 5.55649699e-02 9.18967080e-02 6.10795929e-02 2.32417478e-03 7.18197378e-01 3.12864981e+03 +5.19800000e-04 -1.65360702e-12 7.09371548e-02 5.55649302e-02 9.18967332e-02 6.10796337e-02 2.32417022e-03 7.18197378e-01 3.12864981e+03 +5.19900000e-04 -1.65360702e-12 7.09371331e-02 5.55648906e-02 9.18967584e-02 6.10796743e-02 2.32416567e-03 7.18197378e-01 3.12864981e+03 +5.20000000e-04 -1.65360702e-12 7.09371114e-02 5.55648512e-02 9.18967835e-02 6.10797149e-02 2.32416113e-03 7.18197378e-01 3.12864981e+03 +5.20100000e-04 -1.65360702e-12 7.09370898e-02 5.55648118e-02 9.18968086e-02 6.10797553e-02 2.32415661e-03 7.18197378e-01 3.12864981e+03 +5.20200000e-04 -1.65360702e-12 7.09370682e-02 5.55647726e-02 9.18968336e-02 6.10797957e-02 2.32415209e-03 7.18197378e-01 3.12864981e+03 +5.20300000e-04 -1.65360702e-12 7.09370467e-02 5.55647334e-02 9.18968585e-02 6.10798359e-02 2.32414759e-03 7.18197378e-01 3.12864981e+03 +5.20400000e-04 -1.65360702e-12 7.09370253e-02 5.55646944e-02 9.18968833e-02 6.10798761e-02 2.32414310e-03 7.18197378e-01 3.12864981e+03 +5.20500000e-04 -1.65360702e-12 7.09370039e-02 5.55646554e-02 9.18969081e-02 6.10799161e-02 2.32413862e-03 7.18197378e-01 3.12864981e+03 +5.20600000e-04 -1.65360702e-12 7.09369825e-02 5.55646166e-02 9.18969329e-02 6.10799560e-02 2.32413415e-03 7.18197378e-01 3.12864981e+03 +5.20700000e-04 -1.65360702e-12 7.09369613e-02 5.55645778e-02 9.18969575e-02 6.10799959e-02 2.32412969e-03 7.18197378e-01 3.12864981e+03 +5.20800000e-04 -1.65360702e-12 7.09369400e-02 5.55645391e-02 9.18969821e-02 6.10800356e-02 2.32412525e-03 7.18197378e-01 3.12864981e+03 +5.20900000e-04 -1.65360702e-12 7.09369189e-02 5.55645006e-02 9.18970067e-02 6.10800752e-02 2.32412081e-03 7.18197378e-01 3.12864981e+03 +5.21000000e-04 -1.65360702e-12 7.09368977e-02 5.55644621e-02 9.18970312e-02 6.10801147e-02 2.32411639e-03 7.18197378e-01 3.12864981e+03 +5.21100000e-04 -1.65360702e-12 7.09368767e-02 5.55644238e-02 9.18970556e-02 6.10801542e-02 2.32411198e-03 7.18197378e-01 3.12865826e+03 +5.21200000e-04 -1.65360702e-12 7.09368557e-02 5.55643855e-02 9.18970799e-02 6.10801935e-02 2.32410758e-03 7.18197378e-01 3.12865826e+03 +5.21300000e-04 -1.65360702e-12 7.09368347e-02 5.55643473e-02 9.18971042e-02 6.10802327e-02 2.32410319e-03 7.18197378e-01 3.12865826e+03 +5.21400000e-04 -1.65360702e-12 7.09368138e-02 5.55643093e-02 9.18971284e-02 6.10802718e-02 2.32409881e-03 7.18197378e-01 3.12865826e+03 +5.21500000e-04 -1.65360702e-12 7.09367929e-02 5.55642713e-02 9.18971526e-02 6.10803108e-02 2.32409445e-03 7.18197378e-01 3.12865826e+03 +5.21600000e-04 -1.65360702e-12 7.09367721e-02 5.55642334e-02 9.18971767e-02 6.10803498e-02 2.32409009e-03 7.18197378e-01 3.12865826e+03 +5.21700000e-04 -1.65360702e-12 7.09367514e-02 5.55641957e-02 9.18972007e-02 6.10803886e-02 2.32408575e-03 7.18197378e-01 3.12865826e+03 +5.21800000e-04 -1.65360702e-12 7.09367307e-02 5.55641580e-02 9.18972247e-02 6.10804273e-02 2.32408141e-03 7.18197378e-01 3.12865826e+03 +5.21900000e-04 -1.65360702e-12 7.09367101e-02 5.55641204e-02 9.18972486e-02 6.10804659e-02 2.32407709e-03 7.18197378e-01 3.12865826e+03 +5.22000000e-04 -1.65360702e-12 7.09366895e-02 5.55640829e-02 9.18972725e-02 6.10805045e-02 2.32407278e-03 7.18197378e-01 3.12865826e+03 +5.22100000e-04 -1.65360702e-12 7.09366689e-02 5.55640455e-02 9.18972963e-02 6.10805429e-02 2.32406848e-03 7.18197378e-01 3.12865826e+03 +5.22200000e-04 -1.65360702e-12 7.09366485e-02 5.55640082e-02 9.18973200e-02 6.10805812e-02 2.32406419e-03 7.18197378e-01 3.12865826e+03 +5.22300000e-04 -1.65360702e-12 7.09366280e-02 5.55639710e-02 9.18973437e-02 6.10806194e-02 2.32405991e-03 7.18197378e-01 3.12865826e+03 +5.22400000e-04 -1.65360702e-12 7.09366077e-02 5.55639339e-02 9.18973673e-02 6.10806576e-02 2.32405565e-03 7.18197378e-01 3.12865826e+03 +5.22500000e-04 -1.65360702e-12 7.09365873e-02 5.55638969e-02 9.18973909e-02 6.10806956e-02 2.32405139e-03 7.18197378e-01 3.12865826e+03 +5.22600000e-04 -1.65360702e-12 7.09365671e-02 5.55638600e-02 9.18974144e-02 6.10807335e-02 2.32404715e-03 7.18197378e-01 3.12865826e+03 +5.22700000e-04 -1.65360702e-12 7.09365468e-02 5.55638232e-02 9.18974378e-02 6.10807714e-02 2.32404291e-03 7.18197378e-01 3.12865826e+03 +5.22800000e-04 -1.65360702e-12 7.09365267e-02 5.55637865e-02 9.18974612e-02 6.10808091e-02 2.32403869e-03 7.18197378e-01 3.12865826e+03 +5.22900000e-04 -1.65360702e-12 7.09365066e-02 5.55637498e-02 9.18974845e-02 6.10808468e-02 2.32403448e-03 7.18197378e-01 3.12865826e+03 +5.23000000e-04 -1.65360702e-12 7.09364865e-02 5.55637133e-02 9.18975077e-02 6.10808843e-02 2.32403027e-03 7.18197378e-01 3.12865826e+03 +5.23100000e-04 -1.65360702e-12 7.09364665e-02 5.55636769e-02 9.18975309e-02 6.10809218e-02 2.32402608e-03 7.18197378e-01 3.12865826e+03 +5.23200000e-04 -1.65360702e-12 7.09364465e-02 5.55636405e-02 9.18975541e-02 6.10809591e-02 2.32402190e-03 7.18197378e-01 3.12865826e+03 +5.23300000e-04 -1.65360702e-12 7.09364266e-02 5.55636043e-02 9.18975772e-02 6.10809964e-02 2.32401773e-03 7.18197378e-01 3.12865826e+03 +5.23400000e-04 -1.65360702e-12 7.09364067e-02 5.55635681e-02 9.18976002e-02 6.10810336e-02 2.32401357e-03 7.18197378e-01 3.12865826e+03 +5.23500000e-04 -1.65360702e-12 7.09363869e-02 5.55635320e-02 9.18976231e-02 6.10810706e-02 2.32400943e-03 7.18197378e-01 3.12865826e+03 +5.23600000e-04 -1.65360702e-12 7.09363672e-02 5.55634960e-02 9.18976460e-02 6.10811076e-02 2.32400529e-03 7.18197378e-01 3.12865826e+03 +5.23700000e-04 -1.65360702e-12 7.09363475e-02 5.55634602e-02 9.18976689e-02 6.10811445e-02 2.32400116e-03 7.18197378e-01 3.12865826e+03 +5.23800000e-04 -1.65360702e-12 7.09363278e-02 5.55634244e-02 9.18976917e-02 6.10811813e-02 2.32399705e-03 7.18197378e-01 3.12865826e+03 +5.23900000e-04 -1.65360702e-12 7.09363082e-02 5.55633887e-02 9.18977144e-02 6.10812180e-02 2.32399294e-03 7.18197378e-01 3.12865826e+03 +5.24000000e-04 -1.65360702e-12 7.09362886e-02 5.55633531e-02 9.18977370e-02 6.10812546e-02 2.32398884e-03 7.18197378e-01 3.12865826e+03 +5.24100000e-04 -1.65360702e-12 7.09362691e-02 5.55633175e-02 9.18977596e-02 6.10812911e-02 2.32398476e-03 7.18197378e-01 3.12865826e+03 +5.24200000e-04 -1.65360702e-12 7.09362497e-02 5.55632821e-02 9.18977822e-02 6.10813275e-02 2.32398068e-03 7.18197378e-01 3.12865826e+03 +5.24300000e-04 -1.65360702e-12 7.09362303e-02 5.55632468e-02 9.18978047e-02 6.10813638e-02 2.32397662e-03 7.18197378e-01 3.12865826e+03 +5.24400000e-04 -1.65360702e-12 7.09362109e-02 5.55632115e-02 9.18978271e-02 6.10814000e-02 2.32397257e-03 7.18197378e-01 3.12865826e+03 +5.24500000e-04 -1.65360702e-12 7.09361916e-02 5.55631764e-02 9.18978495e-02 6.10814362e-02 2.32396852e-03 7.18197378e-01 3.12865826e+03 +5.24600000e-04 -1.65360702e-12 7.09361723e-02 5.55631413e-02 9.18978718e-02 6.10814722e-02 2.32396449e-03 7.18197378e-01 3.12866599e+03 +5.24700000e-04 -1.65360702e-12 7.09361531e-02 5.55631063e-02 9.18978941e-02 6.10815082e-02 2.32396047e-03 7.18197378e-01 3.12866599e+03 +5.24800000e-04 -1.65360702e-12 7.09361340e-02 5.55630714e-02 9.18979163e-02 6.10815440e-02 2.32395646e-03 7.18197378e-01 3.12866599e+03 +5.24900000e-04 -1.65360702e-12 7.09361149e-02 5.55630366e-02 9.18979384e-02 6.10815798e-02 2.32395245e-03 7.18197378e-01 3.12866599e+03 +5.25000000e-04 -1.65360702e-12 7.09360958e-02 5.55630019e-02 9.18979605e-02 6.10816155e-02 2.32394846e-03 7.18197378e-01 3.12866599e+03 +5.25100000e-04 -1.65360702e-12 7.09360768e-02 5.55629673e-02 9.18979826e-02 6.10816510e-02 2.32394448e-03 7.18197378e-01 3.12866599e+03 +5.25200000e-04 -1.65360702e-12 7.09360578e-02 5.55629328e-02 9.18980045e-02 6.10816865e-02 2.32394051e-03 7.18197378e-01 3.12866599e+03 +5.25300000e-04 -1.65360702e-12 7.09360389e-02 5.55628983e-02 9.18980265e-02 6.10817219e-02 2.32393655e-03 7.18197378e-01 3.12866599e+03 +5.25400000e-04 -1.65360702e-12 7.09360200e-02 5.55628639e-02 9.18980483e-02 6.10817572e-02 2.32393260e-03 7.18197378e-01 3.12866599e+03 +5.25500000e-04 -1.65360702e-12 7.09360012e-02 5.55628297e-02 9.18980701e-02 6.10817925e-02 2.32392865e-03 7.18197378e-01 3.12866599e+03 +5.25600000e-04 -1.65360702e-12 7.09359824e-02 5.55627955e-02 9.18980919e-02 6.10818276e-02 2.32392472e-03 7.18197378e-01 3.12866599e+03 +5.25700000e-04 -1.65360702e-12 7.09359637e-02 5.55627614e-02 9.18981136e-02 6.10818626e-02 2.32392080e-03 7.18197378e-01 3.12866599e+03 +5.25800000e-04 -1.65360702e-12 7.09359450e-02 5.55627274e-02 9.18981352e-02 6.10818976e-02 2.32391689e-03 7.18197378e-01 3.12866599e+03 +5.25900000e-04 -1.65360702e-12 7.09359264e-02 5.55626935e-02 9.18981568e-02 6.10819324e-02 2.32391299e-03 7.18197378e-01 3.12866599e+03 +5.26000000e-04 -1.65360702e-12 7.09359078e-02 5.55626596e-02 9.18981784e-02 6.10819672e-02 2.32390910e-03 7.18197378e-01 3.12866599e+03 +5.26100000e-04 -1.65360702e-12 7.09358893e-02 5.55626259e-02 9.18981998e-02 6.10820019e-02 2.32390522e-03 7.18197378e-01 3.12866599e+03 +5.26200000e-04 -1.65360702e-12 7.09358708e-02 5.55625922e-02 9.18982213e-02 6.10820365e-02 2.32390135e-03 7.18197378e-01 3.12866599e+03 +5.26300000e-04 -1.65360702e-12 7.09358524e-02 5.55625587e-02 9.18982426e-02 6.10820710e-02 2.32389749e-03 7.18197378e-01 3.12866599e+03 +5.26400000e-04 -1.65360702e-12 7.09358340e-02 5.55625252e-02 9.18982639e-02 6.10821054e-02 2.32389364e-03 7.18197378e-01 3.12866599e+03 +5.26500000e-04 -1.65360702e-12 7.09358156e-02 5.55624918e-02 9.18982852e-02 6.10821397e-02 2.32388980e-03 7.18197378e-01 3.12866599e+03 +5.26600000e-04 -1.65360702e-12 7.09357973e-02 5.55624585e-02 9.18983064e-02 6.10821740e-02 2.32388596e-03 7.18197378e-01 3.12866599e+03 +5.26700000e-04 -1.65360702e-12 7.09357791e-02 5.55624252e-02 9.18983276e-02 6.10822081e-02 2.32388214e-03 7.18197378e-01 3.12866599e+03 +5.26800000e-04 -1.65360702e-12 7.09357609e-02 5.55623921e-02 9.18983487e-02 6.10822422e-02 2.32387833e-03 7.18197378e-01 3.12866599e+03 +5.26900000e-04 -1.65360702e-12 7.09357427e-02 5.55623590e-02 9.18983697e-02 6.10822762e-02 2.32387453e-03 7.18197378e-01 3.12866599e+03 +5.27000000e-04 -1.65360702e-12 7.09357246e-02 5.55623260e-02 9.18983907e-02 6.10823101e-02 2.32387074e-03 7.18197378e-01 3.12866599e+03 +5.27100000e-04 -1.65360702e-12 7.09357066e-02 5.55622932e-02 9.18984116e-02 6.10823439e-02 2.32386695e-03 7.18197378e-01 3.12866599e+03 +5.27200000e-04 -1.65360702e-12 7.09356885e-02 5.55622604e-02 9.18984325e-02 6.10823776e-02 2.32386318e-03 7.18197378e-01 3.12866599e+03 +5.27300000e-04 -1.65360702e-12 7.09356706e-02 5.55622276e-02 9.18984533e-02 6.10824112e-02 2.32385942e-03 7.18197378e-01 3.12866599e+03 +5.27400000e-04 -1.65360702e-12 7.09356526e-02 5.55621950e-02 9.18984741e-02 6.10824448e-02 2.32385566e-03 7.18197378e-01 3.12866599e+03 +5.27500000e-04 -1.65360702e-12 7.09356348e-02 5.55621624e-02 9.18984948e-02 6.10824782e-02 2.32385192e-03 7.18197378e-01 3.12866599e+03 +5.27600000e-04 -1.65360702e-12 7.09356169e-02 5.55621300e-02 9.18985155e-02 6.10825116e-02 2.32384818e-03 7.18197378e-01 3.12866599e+03 +5.27700000e-04 -1.65360702e-12 7.09355991e-02 5.55620976e-02 9.18985361e-02 6.10825449e-02 2.32384446e-03 7.18197378e-01 3.12866599e+03 +5.27800000e-04 -1.65360702e-12 7.09355814e-02 5.55620653e-02 9.18985567e-02 6.10825781e-02 2.32384074e-03 7.18197378e-01 3.12866599e+03 +5.27900000e-04 -1.65360702e-12 7.09355637e-02 5.55620330e-02 9.18985772e-02 6.10826112e-02 2.32383704e-03 7.18197378e-01 3.12866599e+03 +5.28000000e-04 -1.65360702e-12 7.09355460e-02 5.55620009e-02 9.18985976e-02 6.10826442e-02 2.32383334e-03 7.18197378e-01 3.12866599e+03 +5.28100000e-04 -1.65360702e-12 7.09355284e-02 5.55619688e-02 9.18986180e-02 6.10826772e-02 2.32382966e-03 7.18197378e-01 3.12867306e+03 +5.28200000e-04 -1.65360702e-12 7.09355109e-02 5.55619369e-02 9.18986384e-02 6.10827101e-02 2.32382598e-03 7.18197378e-01 3.12867306e+03 +5.28300000e-04 -1.65360702e-12 7.09354934e-02 5.55619050e-02 9.18986587e-02 6.10827428e-02 2.32382231e-03 7.18197378e-01 3.12867306e+03 +5.28400000e-04 -1.65360702e-12 7.09354759e-02 5.55618731e-02 9.18986789e-02 6.10827755e-02 2.32381865e-03 7.18197378e-01 3.12867306e+03 +5.28500000e-04 -1.65360702e-12 7.09354585e-02 5.55618414e-02 9.18986991e-02 6.10828081e-02 2.32381500e-03 7.18197378e-01 3.12867306e+03 +5.28600000e-04 -1.65360702e-12 7.09354411e-02 5.55618098e-02 9.18987193e-02 6.10828407e-02 2.32381136e-03 7.18197378e-01 3.12867306e+03 +5.28700000e-04 -1.65360702e-12 7.09354237e-02 5.55617782e-02 9.18987394e-02 6.10828731e-02 2.32380773e-03 7.18197378e-01 3.12867306e+03 +5.28800000e-04 -1.65360702e-12 7.09354064e-02 5.55617467e-02 9.18987594e-02 6.10829055e-02 2.32380411e-03 7.18197378e-01 3.12867306e+03 +5.28900000e-04 -1.65360702e-12 7.09353892e-02 5.55617153e-02 9.18987794e-02 6.10829378e-02 2.32380050e-03 7.18197378e-01 3.12867306e+03 +5.29000000e-04 -1.65360702e-12 7.09353720e-02 5.55616840e-02 9.18987993e-02 6.10829700e-02 2.32379689e-03 7.18197378e-01 3.12867306e+03 +5.29100000e-04 -1.65360702e-12 7.09353548e-02 5.55616527e-02 9.18988192e-02 6.10830021e-02 2.32379330e-03 7.18197378e-01 3.12867306e+03 +5.29200000e-04 -1.65360702e-12 7.09353377e-02 5.55616215e-02 9.18988391e-02 6.10830341e-02 2.32378972e-03 7.18197378e-01 3.12867306e+03 +5.29300000e-04 -1.65360702e-12 7.09353206e-02 5.55615905e-02 9.18988589e-02 6.10830661e-02 2.32378614e-03 7.18197378e-01 3.12867306e+03 +5.29400000e-04 -1.65360702e-12 7.09353036e-02 5.55615595e-02 9.18988786e-02 6.10830979e-02 2.32378257e-03 7.18197378e-01 3.12867306e+03 +5.29500000e-04 -1.65360702e-12 7.09352866e-02 5.55615285e-02 9.18988983e-02 6.10831297e-02 2.32377902e-03 7.18197378e-01 3.12867306e+03 +5.29600000e-04 -1.65360702e-12 7.09352697e-02 5.55614977e-02 9.18989179e-02 6.10831614e-02 2.32377547e-03 7.18197378e-01 3.12867306e+03 +5.29700000e-04 -1.65360702e-12 7.09352528e-02 5.55614669e-02 9.18989375e-02 6.10831931e-02 2.32377193e-03 7.18197378e-01 3.12867306e+03 +5.29800000e-04 -1.65360702e-12 7.09352359e-02 5.55614362e-02 9.18989570e-02 6.10832246e-02 2.32376840e-03 7.18197378e-01 3.12867306e+03 +5.29900000e-04 -1.65360702e-12 7.09352191e-02 5.55614056e-02 9.18989765e-02 6.10832561e-02 2.32376488e-03 7.18197378e-01 3.12867306e+03 +5.30000000e-04 -1.65360702e-12 7.09352023e-02 5.55613751e-02 9.18989959e-02 6.10832874e-02 2.32376137e-03 7.18197378e-01 3.12867306e+03 +5.30100000e-04 -1.65360702e-12 7.09351856e-02 5.55613446e-02 9.18990153e-02 6.10833187e-02 2.32375787e-03 7.18197378e-01 3.12867306e+03 +5.30200000e-04 -1.65360702e-12 7.09351689e-02 5.55613142e-02 9.18990347e-02 6.10833500e-02 2.32375437e-03 7.18197378e-01 3.12867306e+03 +5.30300000e-04 -1.65360702e-12 7.09351523e-02 5.55612839e-02 9.18990540e-02 6.10833811e-02 2.32375089e-03 7.18197378e-01 3.12867306e+03 +5.30400000e-04 -1.65360702e-12 7.09351357e-02 5.55612537e-02 9.18990732e-02 6.10834122e-02 2.32374741e-03 7.18197378e-01 3.12867306e+03 +5.30500000e-04 -1.65360702e-12 7.09351191e-02 5.55612235e-02 9.18990924e-02 6.10834432e-02 2.32374394e-03 7.18197378e-01 3.12867306e+03 +5.30600000e-04 -1.65360702e-12 7.09351026e-02 5.55611935e-02 9.18991115e-02 6.10834741e-02 2.32374049e-03 7.18197378e-01 3.12867306e+03 +5.30700000e-04 -1.65360702e-12 7.09350861e-02 5.55611635e-02 9.18991306e-02 6.10835049e-02 2.32373704e-03 7.18197378e-01 3.12867306e+03 +5.30800000e-04 -1.65360702e-12 7.09350697e-02 5.55611336e-02 9.18991496e-02 6.10835356e-02 2.32373360e-03 7.18197378e-01 3.12867306e+03 +5.30900000e-04 -1.65360702e-12 7.09350533e-02 5.55611037e-02 9.18991686e-02 6.10835663e-02 2.32373016e-03 7.18197378e-01 3.12867306e+03 +5.31000000e-04 -1.65360702e-12 7.09350370e-02 5.55610740e-02 9.18991876e-02 6.10835969e-02 2.32372674e-03 7.18197378e-01 3.12867306e+03 +5.31100000e-04 -1.65360702e-12 7.09350207e-02 5.55610443e-02 9.18992065e-02 6.10836274e-02 2.32372333e-03 7.18197378e-01 3.12867306e+03 +5.31200000e-04 -1.65360702e-12 7.09350044e-02 5.55610147e-02 9.18992253e-02 6.10836578e-02 2.32371992e-03 7.18197378e-01 3.12867306e+03 +5.31300000e-04 -1.65360702e-12 7.09349882e-02 5.55609851e-02 9.18992441e-02 6.10836882e-02 2.32371653e-03 7.18197378e-01 3.12867306e+03 +5.31400000e-04 -1.65360702e-12 7.09349720e-02 5.55609557e-02 9.18992629e-02 6.10837185e-02 2.32371314e-03 7.18197378e-01 3.12867306e+03 +5.31500000e-04 -1.65360702e-12 7.09349559e-02 5.55609263e-02 9.18992816e-02 6.10837487e-02 2.32370976e-03 7.18197378e-01 3.12867306e+03 +5.31600000e-04 -1.65360702e-12 7.09349398e-02 5.55608970e-02 9.18993002e-02 6.10837788e-02 2.32370639e-03 7.18197378e-01 3.12867953e+03 +5.31700000e-04 -1.65360702e-12 7.09349237e-02 5.55608677e-02 9.18993188e-02 6.10838088e-02 2.32370303e-03 7.18197378e-01 3.12867953e+03 +5.31800000e-04 -1.65360702e-12 7.09349077e-02 5.55608386e-02 9.18993374e-02 6.10838388e-02 2.32369967e-03 7.18197378e-01 3.12867953e+03 +5.31900000e-04 -1.65360702e-12 7.09348917e-02 5.55608095e-02 9.18993559e-02 6.10838687e-02 2.32369633e-03 7.18197378e-01 3.12867953e+03 +5.32000000e-04 -1.65360702e-12 7.09348758e-02 5.55607805e-02 9.18993744e-02 6.10838985e-02 2.32369299e-03 7.18197378e-01 3.12867953e+03 +5.32100000e-04 -1.65360702e-12 7.09348599e-02 5.55607516e-02 9.18993928e-02 6.10839283e-02 2.32368966e-03 7.18197378e-01 3.12867953e+03 +5.32200000e-04 -1.65360702e-12 7.09348440e-02 5.55607227e-02 9.18994111e-02 6.10839579e-02 2.32368634e-03 7.18197378e-01 3.12867953e+03 +5.32300000e-04 -1.65360702e-12 7.09348282e-02 5.55606939e-02 9.18994295e-02 6.10839875e-02 2.32368303e-03 7.18197378e-01 3.12867953e+03 +5.32400000e-04 -1.65360702e-12 7.09348125e-02 5.55606652e-02 9.18994477e-02 6.10840170e-02 2.32367973e-03 7.18197378e-01 3.12867953e+03 +5.32500000e-04 -1.65360702e-12 7.09347967e-02 5.55606366e-02 9.18994660e-02 6.10840464e-02 2.32367644e-03 7.18197378e-01 3.12867953e+03 +5.32600000e-04 -1.65360702e-12 7.09347810e-02 5.55606080e-02 9.18994842e-02 6.10840758e-02 2.32367315e-03 7.18197378e-01 3.12867953e+03 +5.32700000e-04 -1.65360702e-12 7.09347654e-02 5.55605795e-02 9.18995023e-02 6.10841051e-02 2.32366988e-03 7.18197378e-01 3.12867953e+03 +5.32800000e-04 -1.65360702e-12 7.09347498e-02 5.55605511e-02 9.18995204e-02 6.10841343e-02 2.32366661e-03 7.18197378e-01 3.12867953e+03 +5.32900000e-04 -1.65360702e-12 7.09347342e-02 5.55605227e-02 9.18995384e-02 6.10841634e-02 2.32366335e-03 7.18197378e-01 3.12867953e+03 +5.33000000e-04 -1.65360702e-12 7.09347187e-02 5.55604945e-02 9.18995564e-02 6.10841925e-02 2.32366010e-03 7.18197378e-01 3.12867953e+03 +5.33100000e-04 -1.65360702e-12 7.09347032e-02 5.55604662e-02 9.18995744e-02 6.10842215e-02 2.32365685e-03 7.18197378e-01 3.12867953e+03 +5.33200000e-04 -1.65360702e-12 7.09346877e-02 5.55604381e-02 9.18995923e-02 6.10842504e-02 2.32365362e-03 7.18197378e-01 3.12867953e+03 +5.33300000e-04 -1.65360702e-12 7.09346723e-02 5.55604101e-02 9.18996101e-02 6.10842792e-02 2.32365039e-03 7.18197378e-01 3.12867953e+03 +5.33400000e-04 -1.65360702e-12 7.09346570e-02 5.55603821e-02 9.18996279e-02 6.10843080e-02 2.32364717e-03 7.18197378e-01 3.12867953e+03 +5.33500000e-04 -1.65360702e-12 7.09346416e-02 5.55603542e-02 9.18996457e-02 6.10843367e-02 2.32364396e-03 7.18197378e-01 3.12867953e+03 +5.33600000e-04 -1.65360702e-12 7.09346263e-02 5.55603263e-02 9.18996634e-02 6.10843653e-02 2.32364076e-03 7.18197378e-01 3.12867953e+03 +5.33700000e-04 -1.65360702e-12 7.09346111e-02 5.55602985e-02 9.18996811e-02 6.10843938e-02 2.32363756e-03 7.18197378e-01 3.12867953e+03 +5.33800000e-04 -1.65360702e-12 7.09345959e-02 5.55602708e-02 9.18996987e-02 6.10844223e-02 2.32363438e-03 7.18197378e-01 3.12867953e+03 +5.33900000e-04 -1.65360702e-12 7.09345807e-02 5.55602432e-02 9.18997163e-02 6.10844507e-02 2.32363120e-03 7.18197378e-01 3.12867953e+03 +5.34000000e-04 -1.65360702e-12 7.09345656e-02 5.55602156e-02 9.18997339e-02 6.10844790e-02 2.32362803e-03 7.18197378e-01 3.12867953e+03 +5.34100000e-04 -1.65360702e-12 7.09345505e-02 5.55601882e-02 9.18997514e-02 6.10845073e-02 2.32362487e-03 7.18197378e-01 3.12867953e+03 +5.34200000e-04 -1.65360702e-12 7.09345354e-02 5.55601607e-02 9.18997688e-02 6.10845355e-02 2.32362172e-03 7.18197378e-01 3.12867953e+03 +5.34300000e-04 -1.65360702e-12 7.09345204e-02 5.55601334e-02 9.18997862e-02 6.10845636e-02 2.32361857e-03 7.18197378e-01 3.12867953e+03 +5.34400000e-04 -1.65360702e-12 7.09345054e-02 5.55601061e-02 9.18998036e-02 6.10845916e-02 2.32361543e-03 7.18197378e-01 3.12867953e+03 +5.34500000e-04 -1.65360702e-12 7.09344905e-02 5.55600789e-02 9.18998209e-02 6.10846196e-02 2.32361230e-03 7.18197378e-01 3.12867953e+03 +5.34600000e-04 -1.65360702e-12 7.09344756e-02 5.55600518e-02 9.18998382e-02 6.10846475e-02 2.32360918e-03 7.18197378e-01 3.12867953e+03 +5.34700000e-04 -1.65360702e-12 7.09344607e-02 5.55600247e-02 9.18998554e-02 6.10846753e-02 2.32360607e-03 7.18197378e-01 3.12867953e+03 +5.34800000e-04 -1.65360702e-12 7.09344459e-02 5.55599977e-02 9.18998726e-02 6.10847031e-02 2.32360296e-03 7.18197378e-01 3.12867953e+03 +5.34900000e-04 -1.65360702e-12 7.09344311e-02 5.55599708e-02 9.18998897e-02 6.10847307e-02 2.32359987e-03 7.18197378e-01 3.12867953e+03 +5.35000000e-04 -1.65360702e-12 7.09344163e-02 5.55599439e-02 9.18999068e-02 6.10847583e-02 2.32359678e-03 7.18197378e-01 3.12867953e+03 +5.35100000e-04 -1.65360702e-12 7.09344016e-02 5.55599171e-02 9.18999239e-02 6.10847859e-02 2.32359370e-03 7.18197378e-01 3.12868544e+03 +5.35200000e-04 -1.65360702e-12 7.09343869e-02 5.55598904e-02 9.18999409e-02 6.10848133e-02 2.32359062e-03 7.18197378e-01 3.12868544e+03 +5.35300000e-04 -1.65360702e-12 7.09343723e-02 5.55598637e-02 9.18999579e-02 6.10848407e-02 2.32358756e-03 7.18197378e-01 3.12868544e+03 +5.35400000e-04 -1.65360702e-12 7.09343577e-02 5.55598371e-02 9.18999748e-02 6.10848681e-02 2.32358450e-03 7.18197378e-01 3.12868544e+03 +5.35500000e-04 -1.65360702e-12 7.09343431e-02 5.55598106e-02 9.18999917e-02 6.10848953e-02 2.32358145e-03 7.18197378e-01 3.12868544e+03 +5.35600000e-04 -1.65360702e-12 7.09343286e-02 5.55597842e-02 9.19000085e-02 6.10849225e-02 2.32357841e-03 7.18197378e-01 3.12868544e+03 +5.35700000e-04 -1.65360702e-12 7.09343141e-02 5.55597578e-02 9.19000253e-02 6.10849496e-02 2.32357537e-03 7.18197378e-01 3.12868544e+03 +5.35800000e-04 -1.65360702e-12 7.09342996e-02 5.55597315e-02 9.19000420e-02 6.10849767e-02 2.32357235e-03 7.18197378e-01 3.12868544e+03 +5.35900000e-04 -1.65360702e-12 7.09342852e-02 5.55597052e-02 9.19000587e-02 6.10850037e-02 2.32356933e-03 7.18197378e-01 3.12868544e+03 +5.36000000e-04 -1.65360702e-12 7.09342708e-02 5.55596790e-02 9.19000754e-02 6.10850306e-02 2.32356632e-03 7.18197378e-01 3.12868544e+03 +5.36100000e-04 -1.65360702e-12 7.09342565e-02 5.55596529e-02 9.19000920e-02 6.10850574e-02 2.32356331e-03 7.18197378e-01 3.12868544e+03 +5.36200000e-04 -1.65360702e-12 7.09342422e-02 5.55596269e-02 9.19001086e-02 6.10850842e-02 2.32356032e-03 7.18197378e-01 3.12868544e+03 +5.36300000e-04 -1.65360702e-12 7.09342279e-02 5.55596009e-02 9.19001251e-02 6.10851109e-02 2.32355733e-03 7.18197378e-01 3.12868544e+03 +5.36400000e-04 -1.65360702e-12 7.09342137e-02 5.55595750e-02 9.19001416e-02 6.10851375e-02 2.32355435e-03 7.18197378e-01 3.12868544e+03 +5.36500000e-04 -1.65360702e-12 7.09341995e-02 5.55595491e-02 9.19001581e-02 6.10851641e-02 2.32355138e-03 7.18197378e-01 3.12868544e+03 +5.36600000e-04 -1.65360702e-12 7.09341853e-02 5.55595233e-02 9.19001745e-02 6.10851906e-02 2.32354841e-03 7.18197378e-01 3.12868544e+03 +5.36700000e-04 -1.65360702e-12 7.09341712e-02 5.55594976e-02 9.19001909e-02 6.10852170e-02 2.32354545e-03 7.18197378e-01 3.12868544e+03 +5.36800000e-04 -1.65360702e-12 7.09341571e-02 5.55594720e-02 9.19002072e-02 6.10852434e-02 2.32354250e-03 7.18197378e-01 3.12868544e+03 +5.36900000e-04 -1.65360702e-12 7.09341431e-02 5.55594464e-02 9.19002235e-02 6.10852697e-02 2.32353956e-03 7.18197378e-01 3.12868544e+03 +5.37000000e-04 -1.65360702e-12 7.09341290e-02 5.55594209e-02 9.19002397e-02 6.10852959e-02 2.32353663e-03 7.18197378e-01 3.12868544e+03 +5.37100000e-04 -1.65360702e-12 7.09341151e-02 5.55593954e-02 9.19002559e-02 6.10853221e-02 2.32353370e-03 7.18197378e-01 3.12868544e+03 +5.37200000e-04 -1.65360702e-12 7.09341011e-02 5.55593700e-02 9.19002721e-02 6.10853482e-02 2.32353078e-03 7.18197378e-01 3.12868544e+03 +5.37300000e-04 -1.65360702e-12 7.09340872e-02 5.55593447e-02 9.19002882e-02 6.10853742e-02 2.32352787e-03 7.18197378e-01 3.12868544e+03 +5.37400000e-04 -1.65360702e-12 7.09340733e-02 5.55593194e-02 9.19003043e-02 6.10854002e-02 2.32352496e-03 7.18197378e-01 3.12868544e+03 +5.37500000e-04 -1.65360702e-12 7.09340595e-02 5.55592942e-02 9.19003203e-02 6.10854260e-02 2.32352206e-03 7.18197378e-01 3.12868544e+03 +5.37600000e-04 -1.65360702e-12 7.09340457e-02 5.55592691e-02 9.19003363e-02 6.10854519e-02 2.32351917e-03 7.18197378e-01 3.12868544e+03 +5.37700000e-04 -1.65360702e-12 7.09340319e-02 5.55592440e-02 9.19003523e-02 6.10854776e-02 2.32351629e-03 7.18197378e-01 3.12868544e+03 +5.37800000e-04 -1.65360702e-12 7.09340182e-02 5.55592190e-02 9.19003682e-02 6.10855033e-02 2.32351341e-03 7.18197378e-01 3.12868544e+03 +5.37900000e-04 -1.65360702e-12 7.09340045e-02 5.55591941e-02 9.19003840e-02 6.10855290e-02 2.32351055e-03 7.18197378e-01 3.12868544e+03 +5.38000000e-04 -1.65360702e-12 7.09339908e-02 5.55591692e-02 9.19003999e-02 6.10855545e-02 2.32350769e-03 7.18197378e-01 3.12868544e+03 +5.38100000e-04 -1.65360702e-12 7.09339772e-02 5.55591444e-02 9.19004157e-02 6.10855800e-02 2.32350483e-03 7.18197378e-01 3.12868544e+03 +5.38200000e-04 -1.65360702e-12 7.09339636e-02 5.55591197e-02 9.19004314e-02 6.10856055e-02 2.32350199e-03 7.18197378e-01 3.12868544e+03 +5.38300000e-04 -1.65360702e-12 7.09339501e-02 5.55590950e-02 9.19004471e-02 6.10856308e-02 2.32349915e-03 7.18197378e-01 3.12868544e+03 +5.38400000e-04 -1.65360702e-12 7.09339365e-02 5.55590704e-02 9.19004628e-02 6.10856561e-02 2.32349632e-03 7.18197378e-01 3.12868544e+03 +5.38500000e-04 -1.65360702e-12 7.09339231e-02 5.55590458e-02 9.19004784e-02 6.10856814e-02 2.32349349e-03 7.18197378e-01 3.12868544e+03 +5.38600000e-04 -1.65360702e-12 7.09339096e-02 5.55590213e-02 9.19004940e-02 6.10857066e-02 2.32349067e-03 7.18197378e-01 3.12869085e+03 +5.38700000e-04 -1.65360702e-12 7.09338962e-02 5.55589969e-02 9.19005096e-02 6.10857317e-02 2.32348786e-03 7.18197378e-01 3.12869085e+03 +5.38800000e-04 -1.65360702e-12 7.09338828e-02 5.55589725e-02 9.19005251e-02 6.10857567e-02 2.32348506e-03 7.18197378e-01 3.12869085e+03 +5.38900000e-04 -1.65360702e-12 7.09338694e-02 5.55589482e-02 9.19005405e-02 6.10857817e-02 2.32348227e-03 7.18197378e-01 3.12869085e+03 +5.39000000e-04 -1.65360702e-12 7.09338561e-02 5.55589239e-02 9.19005560e-02 6.10858066e-02 2.32347948e-03 7.18197378e-01 3.12869085e+03 +5.39100000e-04 -1.65360702e-12 7.09338429e-02 5.55588998e-02 9.19005714e-02 6.10858315e-02 2.32347670e-03 7.18197378e-01 3.12869085e+03 +5.39200000e-04 -1.65360702e-12 7.09338296e-02 5.55588756e-02 9.19005867e-02 6.10858563e-02 2.32347392e-03 7.18197378e-01 3.12869085e+03 +5.39300000e-04 -1.65360702e-12 7.09338164e-02 5.55588516e-02 9.19006020e-02 6.10858810e-02 2.32347116e-03 7.18197378e-01 3.12869085e+03 +5.39400000e-04 -1.65360702e-12 7.09338032e-02 5.55588276e-02 9.19006173e-02 6.10859056e-02 2.32346840e-03 7.18197378e-01 3.12869085e+03 +5.39500000e-04 -1.65360702e-12 7.09337901e-02 5.55588037e-02 9.19006325e-02 6.10859302e-02 2.32346564e-03 7.18197378e-01 3.12869085e+03 +5.39600000e-04 -1.65360702e-12 7.09337770e-02 5.55587798e-02 9.19006477e-02 6.10859548e-02 2.32346290e-03 7.18197378e-01 3.12869085e+03 +5.39700000e-04 -1.65360702e-12 7.09337639e-02 5.55587560e-02 9.19006629e-02 6.10859793e-02 2.32346016e-03 7.18197378e-01 3.12869085e+03 +5.39800000e-04 -1.65360702e-12 7.09337508e-02 5.55587322e-02 9.19006780e-02 6.10860037e-02 2.32345743e-03 7.18197378e-01 3.12869085e+03 +5.39900000e-04 -1.65360702e-12 7.09337378e-02 5.55587085e-02 9.19006931e-02 6.10860280e-02 2.32345470e-03 7.18197378e-01 3.12869085e+03 +5.40000000e-04 -1.65360702e-12 7.09337248e-02 5.55586849e-02 9.19007081e-02 6.10860523e-02 2.32345198e-03 7.18197378e-01 3.12869085e+03 +5.40100000e-04 -1.65360702e-12 7.09337119e-02 5.55586613e-02 9.19007231e-02 6.10860765e-02 2.32344927e-03 7.18197378e-01 3.12869085e+03 +5.40200000e-04 -1.65360702e-12 7.09336990e-02 5.55586378e-02 9.19007381e-02 6.10861007e-02 2.32344657e-03 7.18197378e-01 3.12869085e+03 +5.40300000e-04 -1.65360702e-12 7.09336861e-02 5.55586144e-02 9.19007530e-02 6.10861248e-02 2.32344387e-03 7.18197378e-01 3.12869085e+03 +5.40400000e-04 -1.65360702e-12 7.09336732e-02 5.55585910e-02 9.19007679e-02 6.10861488e-02 2.32344118e-03 7.18197378e-01 3.12869085e+03 +5.40500000e-04 -1.65360702e-12 7.09336604e-02 5.55585676e-02 9.19007828e-02 6.10861728e-02 2.32343850e-03 7.18197378e-01 3.12869085e+03 +5.40600000e-04 -1.65360702e-12 7.09336477e-02 5.55585444e-02 9.19007976e-02 6.10861967e-02 2.32343582e-03 7.18197378e-01 3.12869085e+03 +5.40700000e-04 -1.65360702e-12 7.09336349e-02 5.55585212e-02 9.19008123e-02 6.10862206e-02 2.32343315e-03 7.18197378e-01 3.12869085e+03 +5.40800000e-04 -1.65360702e-12 7.09336222e-02 5.55584980e-02 9.19008271e-02 6.10862444e-02 2.32343049e-03 7.18197378e-01 3.12869085e+03 +5.40900000e-04 -1.65360702e-12 7.09336095e-02 5.55584749e-02 9.19008418e-02 6.10862681e-02 2.32342784e-03 7.18197378e-01 3.12869085e+03 +5.41000000e-04 -1.65360702e-12 7.09335969e-02 5.55584519e-02 9.19008564e-02 6.10862918e-02 2.32342519e-03 7.18197378e-01 3.12869085e+03 +5.41100000e-04 -1.65360702e-12 7.09335842e-02 5.55584289e-02 9.19008711e-02 6.10863154e-02 2.32342254e-03 7.18197378e-01 3.12869085e+03 +5.41200000e-04 -1.65360702e-12 7.09335717e-02 5.55584060e-02 9.19008856e-02 6.10863390e-02 2.32341991e-03 7.18197378e-01 3.12869085e+03 +5.41300000e-04 -1.65360702e-12 7.09335591e-02 5.55583831e-02 9.19009002e-02 6.10863625e-02 2.32341728e-03 7.18197378e-01 3.12869085e+03 +5.41400000e-04 -1.65360702e-12 7.09335466e-02 5.55583603e-02 9.19009147e-02 6.10863859e-02 2.32341466e-03 7.18197378e-01 3.12869085e+03 +5.41500000e-04 -1.65360702e-12 7.09335341e-02 5.55583376e-02 9.19009292e-02 6.10864093e-02 2.32341204e-03 7.18197378e-01 3.12869085e+03 +5.41600000e-04 -1.65360702e-12 7.09335216e-02 5.55583149e-02 9.19009436e-02 6.10864326e-02 2.32340943e-03 7.18197378e-01 3.12869085e+03 +5.41700000e-04 -1.65360702e-12 7.09335092e-02 5.55582923e-02 9.19009580e-02 6.10864558e-02 2.32340683e-03 7.18197378e-01 3.12869085e+03 +5.41800000e-04 -1.65360702e-12 7.09334968e-02 5.55582697e-02 9.19009724e-02 6.10864790e-02 2.32340424e-03 7.18197378e-01 3.12869085e+03 +5.41900000e-04 -1.65360702e-12 7.09334845e-02 5.55582472e-02 9.19009867e-02 6.10865021e-02 2.32340165e-03 7.18197378e-01 3.12869085e+03 +5.42000000e-04 -1.65360702e-12 7.09334721e-02 5.55582248e-02 9.19010010e-02 6.10865252e-02 2.32339907e-03 7.18197378e-01 3.12869085e+03 +5.42100000e-04 -1.65360702e-12 7.09334598e-02 5.55582024e-02 9.19010152e-02 6.10865482e-02 2.32339649e-03 7.18197378e-01 3.12869579e+03 +5.42200000e-04 -1.65360702e-12 7.09334476e-02 5.55581800e-02 9.19010295e-02 6.10865712e-02 2.32339392e-03 7.18197378e-01 3.12869579e+03 +5.42300000e-04 -1.65360702e-12 7.09334353e-02 5.55581578e-02 9.19010436e-02 6.10865941e-02 2.32339136e-03 7.18197378e-01 3.12869579e+03 +5.42400000e-04 -1.65360702e-12 7.09334231e-02 5.55581355e-02 9.19010578e-02 6.10866169e-02 2.32338881e-03 7.18197378e-01 3.12869579e+03 +5.42500000e-04 -1.65360702e-12 7.09334109e-02 5.55581134e-02 9.19010719e-02 6.10866397e-02 2.32338626e-03 7.18197378e-01 3.12869579e+03 +5.42600000e-04 -1.65360702e-12 7.09333988e-02 5.55580913e-02 9.19010860e-02 6.10866624e-02 2.32338371e-03 7.18197378e-01 3.12869579e+03 +5.42700000e-04 -1.65360702e-12 7.09333867e-02 5.55580692e-02 9.19011000e-02 6.10866851e-02 2.32338118e-03 7.18197378e-01 3.12869579e+03 +5.42800000e-04 -1.65360702e-12 7.09333746e-02 5.55580472e-02 9.19011140e-02 6.10867077e-02 2.32337865e-03 7.18197378e-01 3.12869579e+03 +5.42900000e-04 -1.65360702e-12 7.09333626e-02 5.55580253e-02 9.19011279e-02 6.10867302e-02 2.32337613e-03 7.18197378e-01 3.12869579e+03 +5.43000000e-04 -1.65360702e-12 7.09333505e-02 5.55580034e-02 9.19011419e-02 6.10867527e-02 2.32337361e-03 7.18197378e-01 3.12869579e+03 +5.43100000e-04 -1.65360702e-12 7.09333386e-02 5.55579816e-02 9.19011558e-02 6.10867752e-02 2.32337110e-03 7.18197378e-01 3.12869579e+03 +5.43200000e-04 -1.65360702e-12 7.09333266e-02 5.55579598e-02 9.19011696e-02 6.10867975e-02 2.32336859e-03 7.18197378e-01 3.12869579e+03 +5.43300000e-04 -1.65360702e-12 7.09333147e-02 5.55579381e-02 9.19011834e-02 6.10868199e-02 2.32336610e-03 7.18197378e-01 3.12869579e+03 +5.43400000e-04 -1.65360702e-12 7.09333028e-02 5.55579164e-02 9.19011972e-02 6.10868421e-02 2.32336361e-03 7.18197378e-01 3.12869579e+03 +5.43500000e-04 -1.65360702e-12 7.09332909e-02 5.55578948e-02 9.19012110e-02 6.10868643e-02 2.32336112e-03 7.18197378e-01 3.12869579e+03 +5.43600000e-04 -1.65360702e-12 7.09332791e-02 5.55578733e-02 9.19012247e-02 6.10868865e-02 2.32335864e-03 7.18197378e-01 3.12869579e+03 +5.43700000e-04 -1.65360702e-12 7.09332673e-02 5.55578518e-02 9.19012384e-02 6.10869086e-02 2.32335617e-03 7.18197378e-01 3.12869579e+03 +5.43800000e-04 -1.65360702e-12 7.09332555e-02 5.55578303e-02 9.19012520e-02 6.10869306e-02 2.32335371e-03 7.18197378e-01 3.12869579e+03 +5.43900000e-04 -1.65360702e-12 7.09332437e-02 5.55578090e-02 9.19012656e-02 6.10869526e-02 2.32335125e-03 7.18197378e-01 3.12869579e+03 +5.44000000e-04 -1.65360702e-12 7.09332320e-02 5.55577876e-02 9.19012792e-02 6.10869745e-02 2.32334879e-03 7.18197378e-01 3.12869579e+03 +5.44100000e-04 -1.65360702e-12 7.09332203e-02 5.55577664e-02 9.19012927e-02 6.10869964e-02 2.32334635e-03 7.18197378e-01 3.12869579e+03 +5.44200000e-04 -1.65360702e-12 7.09332087e-02 5.55577451e-02 9.19013062e-02 6.10870182e-02 2.32334391e-03 7.18197378e-01 3.12869579e+03 +5.44300000e-04 -1.65360702e-12 7.09331971e-02 5.55577240e-02 9.19013197e-02 6.10870399e-02 2.32334147e-03 7.18197378e-01 3.12869579e+03 +5.44400000e-04 -1.65360702e-12 7.09331855e-02 5.55577029e-02 9.19013332e-02 6.10870616e-02 2.32333905e-03 7.18197378e-01 3.12869579e+03 +5.44500000e-04 -1.65360702e-12 7.09331739e-02 5.55576818e-02 9.19013466e-02 6.10870833e-02 2.32333662e-03 7.18197378e-01 3.12869579e+03 +5.44600000e-04 -1.65360702e-12 7.09331624e-02 5.55576608e-02 9.19013599e-02 6.10871048e-02 2.32333421e-03 7.18197378e-01 3.12869579e+03 +5.44700000e-04 -1.65360702e-12 7.09331509e-02 5.55576399e-02 9.19013733e-02 6.10871264e-02 2.32333180e-03 7.18197378e-01 3.12869579e+03 +5.44800000e-04 -1.65360702e-12 7.09331394e-02 5.55576190e-02 9.19013866e-02 6.10871479e-02 2.32332940e-03 7.18197378e-01 3.12869579e+03 +5.44900000e-04 -1.65360702e-12 7.09331279e-02 5.55575981e-02 9.19013998e-02 6.10871693e-02 2.32332700e-03 7.18197378e-01 3.12869579e+03 +5.45000000e-04 -1.65360702e-12 7.09331165e-02 5.55575773e-02 9.19014130e-02 6.10871906e-02 2.32332461e-03 7.18197378e-01 3.12869579e+03 +5.45100000e-04 -1.65360702e-12 7.09331051e-02 5.55575566e-02 9.19014262e-02 6.10872120e-02 2.32332222e-03 7.18197378e-01 3.12869579e+03 +5.45200000e-04 -1.65360702e-12 7.09330938e-02 5.55575359e-02 9.19014394e-02 6.10872332e-02 2.32331984e-03 7.18197378e-01 3.12869579e+03 +5.45300000e-04 -1.65360702e-12 7.09330824e-02 5.55575153e-02 9.19014525e-02 6.10872544e-02 2.32331747e-03 7.18197378e-01 3.12869579e+03 +5.45400000e-04 -1.65360702e-12 7.09330711e-02 5.55574947e-02 9.19014656e-02 6.10872756e-02 2.32331511e-03 7.18197378e-01 3.12869579e+03 +5.45500000e-04 -1.65360702e-12 7.09330599e-02 5.55574742e-02 9.19014787e-02 6.10872967e-02 2.32331274e-03 7.18197378e-01 3.12869579e+03 +5.45600000e-04 -1.65360702e-12 7.09330486e-02 5.55574537e-02 9.19014917e-02 6.10873177e-02 2.32331039e-03 7.18197378e-01 3.12870031e+03 +5.45700000e-04 -1.65360702e-12 7.09330374e-02 5.55574333e-02 9.19015047e-02 6.10873387e-02 2.32330804e-03 7.18197378e-01 3.12870031e+03 +5.45800000e-04 -1.65360702e-12 7.09330262e-02 5.55574129e-02 9.19015177e-02 6.10873596e-02 2.32330570e-03 7.18197378e-01 3.12870031e+03 +5.45900000e-04 -1.65360702e-12 7.09330151e-02 5.55573926e-02 9.19015306e-02 6.10873805e-02 2.32330336e-03 7.18197378e-01 3.12870031e+03 +5.46000000e-04 -1.65360702e-12 7.09330039e-02 5.55573723e-02 9.19015435e-02 6.10874013e-02 2.32330103e-03 7.18197378e-01 3.12870031e+03 +5.46100000e-04 -1.65360702e-12 7.09329928e-02 5.55573521e-02 9.19015564e-02 6.10874221e-02 2.32329871e-03 7.18197378e-01 3.12870031e+03 +5.46200000e-04 -1.65360702e-12 7.09329818e-02 5.55573320e-02 9.19015692e-02 6.10874428e-02 2.32329639e-03 7.18197378e-01 3.12870031e+03 +5.46300000e-04 -1.65360702e-12 7.09329707e-02 5.55573119e-02 9.19015820e-02 6.10874635e-02 2.32329408e-03 7.18197378e-01 3.12870031e+03 +5.46400000e-04 -1.65360702e-12 7.09329597e-02 5.55572918e-02 9.19015948e-02 6.10874841e-02 2.32329177e-03 7.18197378e-01 3.12870031e+03 +5.46500000e-04 -1.65360702e-12 7.09329487e-02 5.55572718e-02 9.19016075e-02 6.10875046e-02 2.32328947e-03 7.18197378e-01 3.12870031e+03 +5.46600000e-04 -1.65360702e-12 7.09329378e-02 5.55572519e-02 9.19016202e-02 6.10875252e-02 2.32328718e-03 7.18197378e-01 3.12870031e+03 +5.46700000e-04 -1.65360702e-12 7.09329268e-02 5.55572320e-02 9.19016329e-02 6.10875456e-02 2.32328489e-03 7.18197378e-01 3.12870031e+03 +5.46800000e-04 -1.65360702e-12 7.09329159e-02 5.55572121e-02 9.19016455e-02 6.10875660e-02 2.32328260e-03 7.18197378e-01 3.12870031e+03 +5.46900000e-04 -1.65360702e-12 7.09329051e-02 5.55571923e-02 9.19016581e-02 6.10875864e-02 2.32328033e-03 7.18197378e-01 3.12870031e+03 +5.47000000e-04 -1.65360702e-12 7.09328942e-02 5.55571726e-02 9.19016707e-02 6.10876067e-02 2.32327806e-03 7.18197378e-01 3.12870031e+03 +5.47100000e-04 -1.65360702e-12 7.09328834e-02 5.55571529e-02 9.19016832e-02 6.10876269e-02 2.32327579e-03 7.18197378e-01 3.12870031e+03 +5.47200000e-04 -1.65360702e-12 7.09328726e-02 5.55571332e-02 9.19016957e-02 6.10876471e-02 2.32327353e-03 7.18197378e-01 3.12870031e+03 +5.47300000e-04 -1.65360702e-12 7.09328618e-02 5.55571136e-02 9.19017082e-02 6.10876672e-02 2.32327128e-03 7.18197378e-01 3.12870031e+03 +5.47400000e-04 -1.65360702e-12 7.09328511e-02 5.55570941e-02 9.19017206e-02 6.10876873e-02 2.32326903e-03 7.18197378e-01 3.12870031e+03 +5.47500000e-04 -1.65360702e-12 7.09328404e-02 5.55570746e-02 9.19017330e-02 6.10877074e-02 2.32326679e-03 7.18197378e-01 3.12870031e+03 +5.47600000e-04 -1.65360702e-12 7.09328297e-02 5.55570551e-02 9.19017454e-02 6.10877274e-02 2.32326455e-03 7.18197378e-01 3.12870031e+03 +5.47700000e-04 -1.65360702e-12 7.09328191e-02 5.55570357e-02 9.19017578e-02 6.10877473e-02 2.32326232e-03 7.18197378e-01 3.12870031e+03 +5.47800000e-04 -1.65360702e-12 7.09328084e-02 5.55570164e-02 9.19017701e-02 6.10877672e-02 2.32326009e-03 7.18197378e-01 3.12870031e+03 +5.47900000e-04 -1.65360702e-12 7.09327978e-02 5.55569971e-02 9.19017824e-02 6.10877870e-02 2.32325787e-03 7.18197378e-01 3.12870031e+03 +5.48000000e-04 -1.65360702e-12 7.09327873e-02 5.55569778e-02 9.19017946e-02 6.10878068e-02 2.32325566e-03 7.18197378e-01 3.12870031e+03 +5.48100000e-04 -1.65360702e-12 7.09327767e-02 5.55569586e-02 9.19018068e-02 6.10878265e-02 2.32325345e-03 7.18197378e-01 3.12870031e+03 +5.48200000e-04 -1.65360702e-12 7.09327662e-02 5.55569395e-02 9.19018190e-02 6.10878462e-02 2.32325125e-03 7.18197378e-01 3.12870031e+03 +5.48300000e-04 -1.65360702e-12 7.09327557e-02 5.55569204e-02 9.19018312e-02 6.10878659e-02 2.32324905e-03 7.18197378e-01 3.12870031e+03 +5.48400000e-04 -1.65360702e-12 7.09327452e-02 5.55569013e-02 9.19018433e-02 6.10878854e-02 2.32324686e-03 7.18197378e-01 3.12870031e+03 +5.48500000e-04 -1.65360702e-12 7.09327348e-02 5.55568823e-02 9.19018554e-02 6.10879050e-02 2.32324467e-03 7.18197378e-01 3.12870031e+03 +5.48600000e-04 -1.65360702e-12 7.09327244e-02 5.55568633e-02 9.19018675e-02 6.10879245e-02 2.32324249e-03 7.18197378e-01 3.12870031e+03 +5.48700000e-04 -1.65360702e-12 7.09327140e-02 5.55568444e-02 9.19018795e-02 6.10879439e-02 2.32324032e-03 7.18197378e-01 3.12870031e+03 +5.48800000e-04 -1.65360702e-12 7.09327036e-02 5.55568256e-02 9.19018915e-02 6.10879633e-02 2.32323815e-03 7.18197378e-01 3.12870031e+03 +5.48900000e-04 -1.65360702e-12 7.09326933e-02 5.55568068e-02 9.19019035e-02 6.10879826e-02 2.32323599e-03 7.18197378e-01 3.12870031e+03 +5.49000000e-04 -1.65360702e-12 7.09326830e-02 5.55567880e-02 9.19019154e-02 6.10880019e-02 2.32323383e-03 7.18197378e-01 3.12870445e+03 +5.49100000e-04 -1.65360702e-12 7.09326727e-02 5.55567693e-02 9.19019273e-02 6.10880211e-02 2.32323168e-03 7.18197378e-01 3.12870445e+03 +5.49200000e-04 -1.65360702e-12 7.09326625e-02 5.55567506e-02 9.19019392e-02 6.10880403e-02 2.32322953e-03 7.18197378e-01 3.12870445e+03 +5.49300000e-04 -1.65360702e-12 7.09326522e-02 5.55567320e-02 9.19019511e-02 6.10880595e-02 2.32322739e-03 7.18197378e-01 3.12870445e+03 +5.49400000e-04 -1.65360702e-12 7.09326420e-02 5.55567134e-02 9.19019629e-02 6.10880785e-02 2.32322525e-03 7.18197378e-01 3.12870445e+03 +5.49500000e-04 -1.65360702e-12 7.09326319e-02 5.55566949e-02 9.19019747e-02 6.10880976e-02 2.32322312e-03 7.18197378e-01 3.12870445e+03 +5.49600000e-04 -1.65360702e-12 7.09326217e-02 5.55566764e-02 9.19019864e-02 6.10881166e-02 2.32322100e-03 7.18197378e-01 3.12870445e+03 +5.49700000e-04 -1.65360702e-12 7.09326116e-02 5.55566580e-02 9.19019982e-02 6.10881355e-02 2.32321888e-03 7.18197378e-01 3.12870445e+03 +5.49800000e-04 -1.65360702e-12 7.09326015e-02 5.55566396e-02 9.19020099e-02 6.10881544e-02 2.32321676e-03 7.18197378e-01 3.12870445e+03 +5.49900000e-04 -1.65360702e-12 7.09325914e-02 5.55566213e-02 9.19020215e-02 6.10881732e-02 2.32321466e-03 7.18197378e-01 3.12870445e+03 +5.50000000e-04 -1.65360702e-12 7.09325814e-02 5.55566030e-02 9.19020332e-02 6.10881920e-02 2.32321255e-03 7.18197378e-01 3.12870445e+03 +5.50100000e-04 -1.65360702e-12 7.09325714e-02 5.55565848e-02 9.19020448e-02 6.10882108e-02 2.32321045e-03 7.18197378e-01 3.12870445e+03 +5.50200000e-04 -1.65360702e-12 7.09325614e-02 5.55565666e-02 9.19020564e-02 6.10882295e-02 2.32320836e-03 7.18197378e-01 3.12870445e+03 +5.50300000e-04 -1.65360702e-12 7.09325514e-02 5.55565484e-02 9.19020679e-02 6.10882481e-02 2.32320627e-03 7.18197378e-01 3.12870445e+03 +5.50400000e-04 -1.65360702e-12 7.09325415e-02 5.55565303e-02 9.19020794e-02 6.10882667e-02 2.32320419e-03 7.18197378e-01 3.12870445e+03 +5.50500000e-04 -1.65360702e-12 7.09325316e-02 5.55565123e-02 9.19020909e-02 6.10882853e-02 2.32320212e-03 7.18197378e-01 3.12870445e+03 +5.50600000e-04 -1.65360702e-12 7.09325217e-02 5.55564943e-02 9.19021024e-02 6.10883038e-02 2.32320005e-03 7.18197378e-01 3.12870445e+03 +5.50700000e-04 -1.65360702e-12 7.09325118e-02 5.55564763e-02 9.19021138e-02 6.10883223e-02 2.32319798e-03 7.18197378e-01 3.12870445e+03 +5.50800000e-04 -1.65360702e-12 7.09325020e-02 5.55564584e-02 9.19021252e-02 6.10883407e-02 2.32319592e-03 7.18197378e-01 3.12870445e+03 +5.50900000e-04 -1.65360702e-12 7.09324921e-02 5.55564405e-02 9.19021366e-02 6.10883591e-02 2.32319386e-03 7.18197378e-01 3.12870445e+03 +5.51000000e-04 -1.65360702e-12 7.09324823e-02 5.55564227e-02 9.19021479e-02 6.10883774e-02 2.32319181e-03 7.18197378e-01 3.12870445e+03 +5.51100000e-04 -1.65360702e-12 7.09324726e-02 5.55564049e-02 9.19021593e-02 6.10883957e-02 2.32318977e-03 7.18197378e-01 3.12870445e+03 +5.51200000e-04 -1.65360702e-12 7.09324628e-02 5.55563872e-02 9.19021705e-02 6.10884139e-02 2.32318773e-03 7.18197378e-01 3.12870445e+03 +5.51300000e-04 -1.65360702e-12 7.09324531e-02 5.55563695e-02 9.19021818e-02 6.10884321e-02 2.32318570e-03 7.18197378e-01 3.12870445e+03 +5.51400000e-04 -1.65360702e-12 7.09324434e-02 5.55563518e-02 9.19021930e-02 6.10884502e-02 2.32318367e-03 7.18197378e-01 3.12870445e+03 +5.51500000e-04 -1.65360702e-12 7.09324338e-02 5.55563342e-02 9.19022042e-02 6.10884683e-02 2.32318164e-03 7.18197378e-01 3.12870445e+03 +5.51600000e-04 -1.65360702e-12 7.09324241e-02 5.55563167e-02 9.19022154e-02 6.10884863e-02 2.32317962e-03 7.18197378e-01 3.12870445e+03 +5.51700000e-04 -1.65360702e-12 7.09324145e-02 5.55562992e-02 9.19022265e-02 6.10885043e-02 2.32317761e-03 7.18197378e-01 3.12870445e+03 +5.51800000e-04 -1.65360702e-12 7.09324049e-02 5.55562817e-02 9.19022377e-02 6.10885223e-02 2.32317560e-03 7.18197378e-01 3.12870445e+03 +5.51900000e-04 -1.65360702e-12 7.09323954e-02 5.55562643e-02 9.19022487e-02 6.10885402e-02 2.32317360e-03 7.18197378e-01 3.12870445e+03 +5.52000000e-04 -1.65360702e-12 7.09323858e-02 5.55562469e-02 9.19022598e-02 6.10885580e-02 2.32317160e-03 7.18197378e-01 3.12870445e+03 +5.52100000e-04 -1.65360702e-12 7.09323763e-02 5.55562296e-02 9.19022708e-02 6.10885758e-02 2.32316961e-03 7.18197378e-01 3.12870445e+03 +5.52200000e-04 -1.65360702e-12 7.09323668e-02 5.55562123e-02 9.19022818e-02 6.10885936e-02 2.32316762e-03 7.18197378e-01 3.12870445e+03 +5.52300000e-04 -1.65360702e-12 7.09323573e-02 5.55561951e-02 9.19022928e-02 6.10886113e-02 2.32316564e-03 7.18197378e-01 3.12870445e+03 +5.52400000e-04 -1.65360702e-12 7.09323479e-02 5.55561779e-02 9.19023037e-02 6.10886290e-02 2.32316366e-03 7.18197378e-01 3.12870445e+03 +5.52500000e-04 -1.65360702e-12 7.09323385e-02 5.55561607e-02 9.19023147e-02 6.10886466e-02 2.32316169e-03 7.18197378e-01 3.12870823e+03 +5.52600000e-04 -1.65360702e-12 7.09323291e-02 5.55561436e-02 9.19023256e-02 6.10886642e-02 2.32315972e-03 7.18197378e-01 3.12870823e+03 +5.52700000e-04 -1.65360702e-12 7.09323197e-02 5.55561265e-02 9.19023364e-02 6.10886817e-02 2.32315776e-03 7.18197378e-01 3.12870823e+03 +5.52800000e-04 -1.65360702e-12 7.09323103e-02 5.55561095e-02 9.19023472e-02 6.10886992e-02 2.32315580e-03 7.18197378e-01 3.12870823e+03 +5.52900000e-04 -1.65360702e-12 7.09323010e-02 5.55560925e-02 9.19023581e-02 6.10887167e-02 2.32315385e-03 7.18197378e-01 3.12870823e+03 +5.53000000e-04 -1.65360702e-12 7.09322917e-02 5.55560756e-02 9.19023688e-02 6.10887341e-02 2.32315190e-03 7.18197378e-01 3.12870823e+03 +5.53100000e-04 -1.65360702e-12 7.09322824e-02 5.55560587e-02 9.19023796e-02 6.10887515e-02 2.32314996e-03 7.18197378e-01 3.12870823e+03 +5.53200000e-04 -1.65360702e-12 7.09322732e-02 5.55560419e-02 9.19023903e-02 6.10887688e-02 2.32314802e-03 7.18197378e-01 3.12870823e+03 +5.53300000e-04 -1.65360702e-12 7.09322640e-02 5.55560251e-02 9.19024010e-02 6.10887860e-02 2.32314608e-03 7.18197378e-01 3.12870823e+03 +5.53400000e-04 -1.65360702e-12 7.09322548e-02 5.55560083e-02 9.19024117e-02 6.10888033e-02 2.32314416e-03 7.18197378e-01 3.12870823e+03 +5.53500000e-04 -1.65360702e-12 7.09322456e-02 5.55559916e-02 9.19024223e-02 6.10888205e-02 2.32314223e-03 7.18197378e-01 3.12870823e+03 +5.53600000e-04 -1.65360702e-12 7.09322364e-02 5.55559749e-02 9.19024329e-02 6.10888376e-02 2.32314032e-03 7.18197378e-01 3.12870823e+03 +5.53700000e-04 -1.65360702e-12 7.09322273e-02 5.55559583e-02 9.19024435e-02 6.10888547e-02 2.32313840e-03 7.18197378e-01 3.12870823e+03 +5.53800000e-04 -1.65360702e-12 7.09322182e-02 5.55559417e-02 9.19024541e-02 6.10888717e-02 2.32313650e-03 7.18197378e-01 3.12870823e+03 +5.53900000e-04 -1.65360702e-12 7.09322091e-02 5.55559251e-02 9.19024646e-02 6.10888887e-02 2.32313459e-03 7.18197378e-01 3.12870823e+03 +5.54000000e-04 -1.65360702e-12 7.09322000e-02 5.55559086e-02 9.19024751e-02 6.10889057e-02 2.32313269e-03 7.18197378e-01 3.12870823e+03 +5.54100000e-04 -1.65360702e-12 7.09321910e-02 5.55558922e-02 9.19024856e-02 6.10889226e-02 2.32313080e-03 7.18197378e-01 3.12870823e+03 +5.54200000e-04 -1.65360702e-12 7.09321819e-02 5.55558757e-02 9.19024960e-02 6.10889395e-02 2.32312891e-03 7.18197378e-01 3.12870823e+03 +5.54300000e-04 -1.65360702e-12 7.09321730e-02 5.55558594e-02 9.19025065e-02 6.10889563e-02 2.32312703e-03 7.18197378e-01 3.12870823e+03 +5.54400000e-04 -1.65360702e-12 7.09321640e-02 5.55558430e-02 9.19025169e-02 6.10889731e-02 2.32312515e-03 7.18197378e-01 3.12870823e+03 +5.54500000e-04 -1.65360702e-12 7.09321550e-02 5.55558267e-02 9.19025272e-02 6.10889899e-02 2.32312328e-03 7.18197378e-01 3.12870823e+03 +5.54600000e-04 -1.65360702e-12 7.09321461e-02 5.55558105e-02 9.19025376e-02 6.10890066e-02 2.32312141e-03 7.18197378e-01 3.12870823e+03 +5.54700000e-04 -1.65360702e-12 7.09321372e-02 5.55557943e-02 9.19025479e-02 6.10890233e-02 2.32311954e-03 7.18197378e-01 3.12870823e+03 +5.54800000e-04 -1.65360702e-12 7.09321283e-02 5.55557781e-02 9.19025582e-02 6.10890399e-02 2.32311768e-03 7.18197378e-01 3.12870823e+03 +5.54900000e-04 -1.65360702e-12 7.09321195e-02 5.55557620e-02 9.19025684e-02 6.10890565e-02 2.32311583e-03 7.18197378e-01 3.12870823e+03 +5.55000000e-04 -1.65360702e-12 7.09321106e-02 5.55557459e-02 9.19025787e-02 6.10890730e-02 2.32311398e-03 7.18197378e-01 3.12870823e+03 +5.55100000e-04 -1.65360702e-12 7.09321018e-02 5.55557298e-02 9.19025889e-02 6.10890895e-02 2.32311213e-03 7.18197378e-01 3.12870823e+03 +5.55200000e-04 -1.65360702e-12 7.09320930e-02 5.55557138e-02 9.19025991e-02 6.10891059e-02 2.32311029e-03 7.18197378e-01 3.12870823e+03 +5.55300000e-04 -1.65360702e-12 7.09320842e-02 5.55556979e-02 9.19026092e-02 6.10891223e-02 2.32310845e-03 7.18197378e-01 3.12870823e+03 +5.55400000e-04 -1.65360702e-12 7.09320755e-02 5.55556819e-02 9.19026194e-02 6.10891387e-02 2.32310662e-03 7.18197378e-01 3.12870823e+03 +5.55500000e-04 -1.65360702e-12 7.09320668e-02 5.55556661e-02 9.19026295e-02 6.10891550e-02 2.32310480e-03 7.18197378e-01 3.12870823e+03 +5.55600000e-04 -1.65360702e-12 7.09320581e-02 5.55556502e-02 9.19026396e-02 6.10891713e-02 2.32310297e-03 7.18197378e-01 3.12870823e+03 +5.55700000e-04 -1.65360702e-12 7.09320494e-02 5.55556344e-02 9.19026496e-02 6.10891876e-02 2.32310116e-03 7.18197378e-01 3.12870823e+03 +5.55800000e-04 -1.65360702e-12 7.09320407e-02 5.55556187e-02 9.19026597e-02 6.10892038e-02 2.32309934e-03 7.18197378e-01 3.12870823e+03 +5.55900000e-04 -1.65360702e-12 7.09320321e-02 5.55556029e-02 9.19026697e-02 6.10892199e-02 2.32309754e-03 7.18197378e-01 3.12870823e+03 +5.56000000e-04 -1.65360702e-12 7.09320235e-02 5.55555873e-02 9.19026796e-02 6.10892360e-02 2.32309573e-03 7.18197378e-01 3.12871169e+03 +5.56100000e-04 -1.65360702e-12 7.09320149e-02 5.55555716e-02 9.19026896e-02 6.10892521e-02 2.32309393e-03 7.18197378e-01 3.12871169e+03 +5.56200000e-04 -1.65360702e-12 7.09320063e-02 5.55555560e-02 9.19026995e-02 6.10892681e-02 2.32309214e-03 7.18197378e-01 3.12871169e+03 +5.56300000e-04 -1.65360702e-12 7.09319978e-02 5.55555404e-02 9.19027094e-02 6.10892841e-02 2.32309035e-03 7.18197378e-01 3.12871169e+03 +5.56400000e-04 -1.65360702e-12 7.09319893e-02 5.55555249e-02 9.19027193e-02 6.10893001e-02 2.32308856e-03 7.18197378e-01 3.12871169e+03 +5.56500000e-04 -1.65360702e-12 7.09319808e-02 5.55555094e-02 9.19027292e-02 6.10893160e-02 2.32308678e-03 7.18197378e-01 3.12871169e+03 +5.56600000e-04 -1.65360702e-12 7.09319723e-02 5.55554940e-02 9.19027390e-02 6.10893319e-02 2.32308501e-03 7.18197378e-01 3.12871169e+03 +5.56700000e-04 -1.65360702e-12 7.09319638e-02 5.55554786e-02 9.19027488e-02 6.10893477e-02 2.32308324e-03 7.18197378e-01 3.12871169e+03 +5.56800000e-04 -1.65360702e-12 7.09319554e-02 5.55554632e-02 9.19027586e-02 6.10893635e-02 2.32308147e-03 7.18197378e-01 3.12871169e+03 +5.56900000e-04 -1.65360702e-12 7.09319470e-02 5.55554479e-02 9.19027683e-02 6.10893792e-02 2.32307971e-03 7.18197378e-01 3.12871169e+03 +5.57000000e-04 -1.65360702e-12 7.09319386e-02 5.55554326e-02 9.19027781e-02 6.10893949e-02 2.32307795e-03 7.18197378e-01 3.12871169e+03 +5.57100000e-04 -1.65360702e-12 7.09319302e-02 5.55554174e-02 9.19027878e-02 6.10894106e-02 2.32307620e-03 7.18197378e-01 3.12871169e+03 +5.57200000e-04 -1.65360702e-12 7.09319218e-02 5.55554022e-02 9.19027974e-02 6.10894262e-02 2.32307445e-03 7.18197378e-01 3.12871169e+03 +5.57300000e-04 -1.65360702e-12 7.09319135e-02 5.55553870e-02 9.19028071e-02 6.10894418e-02 2.32307270e-03 7.18197378e-01 3.12871169e+03 +5.57400000e-04 -1.65360702e-12 7.09319052e-02 5.55553719e-02 9.19028167e-02 6.10894574e-02 2.32307096e-03 7.18197378e-01 3.12871169e+03 +5.57500000e-04 -1.65360702e-12 7.09318969e-02 5.55553568e-02 9.19028263e-02 6.10894729e-02 2.32306923e-03 7.18197378e-01 3.12871169e+03 +5.57600000e-04 -1.65360702e-12 7.09318887e-02 5.55553418e-02 9.19028359e-02 6.10894884e-02 2.32306750e-03 7.18197378e-01 3.12871169e+03 +5.57700000e-04 -1.65360702e-12 7.09318804e-02 5.55553267e-02 9.19028455e-02 6.10895038e-02 2.32306577e-03 7.18197378e-01 3.12871169e+03 +5.57800000e-04 -1.65360702e-12 7.09318722e-02 5.55553118e-02 9.19028550e-02 6.10895192e-02 2.32306405e-03 7.18197378e-01 3.12871169e+03 +5.57900000e-04 -1.65360702e-12 7.09318640e-02 5.55552968e-02 9.19028645e-02 6.10895345e-02 2.32306233e-03 7.18197378e-01 3.12871169e+03 +5.58000000e-04 -1.65360702e-12 7.09318558e-02 5.55552819e-02 9.19028740e-02 6.10895498e-02 2.32306062e-03 7.18197378e-01 3.12871169e+03 +5.58100000e-04 -1.65360702e-12 7.09318476e-02 5.55552671e-02 9.19028834e-02 6.10895651e-02 2.32305891e-03 7.18197378e-01 3.12871169e+03 +5.58200000e-04 -1.65360702e-12 7.09318395e-02 5.55552523e-02 9.19028929e-02 6.10895803e-02 2.32305720e-03 7.18197378e-01 3.12871169e+03 +5.58300000e-04 -1.65360702e-12 7.09318314e-02 5.55552375e-02 9.19029023e-02 6.10895955e-02 2.32305550e-03 7.18197378e-01 3.12871169e+03 +5.58400000e-04 -1.65360702e-12 7.09318233e-02 5.55552227e-02 9.19029117e-02 6.10896107e-02 2.32305381e-03 7.18197378e-01 3.12871169e+03 +5.58500000e-04 -1.65360702e-12 7.09318152e-02 5.55552080e-02 9.19029210e-02 6.10896258e-02 2.32305212e-03 7.18197378e-01 3.12871169e+03 +5.58600000e-04 -1.65360702e-12 7.09318071e-02 5.55551933e-02 9.19029303e-02 6.10896409e-02 2.32305043e-03 7.18197378e-01 3.12871169e+03 +5.58700000e-04 -1.65360702e-12 7.09317991e-02 5.55551787e-02 9.19029397e-02 6.10896559e-02 2.32304875e-03 7.18197378e-01 3.12871169e+03 +5.58800000e-04 -1.65360702e-12 7.09317911e-02 5.55551641e-02 9.19029490e-02 6.10896709e-02 2.32304707e-03 7.18197378e-01 3.12871169e+03 +5.58900000e-04 -1.65360702e-12 7.09317831e-02 5.55551496e-02 9.19029582e-02 6.10896859e-02 2.32304539e-03 7.18197378e-01 3.12871169e+03 +5.59000000e-04 -1.65360702e-12 7.09317751e-02 5.55551350e-02 9.19029675e-02 6.10897008e-02 2.32304372e-03 7.18197378e-01 3.12871169e+03 +5.59100000e-04 -1.65360702e-12 7.09317672e-02 5.55551206e-02 9.19029767e-02 6.10897157e-02 2.32304206e-03 7.18197378e-01 3.12871169e+03 +5.59200000e-04 -1.65360702e-12 7.09317592e-02 5.55551061e-02 9.19029859e-02 6.10897305e-02 2.32304040e-03 7.18197378e-01 3.12871169e+03 +5.59300000e-04 -1.65360702e-12 7.09317513e-02 5.55550917e-02 9.19029950e-02 6.10897453e-02 2.32303874e-03 7.18197378e-01 3.12871169e+03 +5.59400000e-04 -1.65360702e-12 7.09317434e-02 5.55550773e-02 9.19030042e-02 6.10897601e-02 2.32303709e-03 7.18197378e-01 3.12871169e+03 +5.59500000e-04 -1.65360702e-12 7.09317355e-02 5.55550630e-02 9.19030133e-02 6.10897749e-02 2.32303544e-03 7.18197378e-01 3.12871485e+03 +5.59600000e-04 -1.65360702e-12 7.09317277e-02 5.55550487e-02 9.19030224e-02 6.10897895e-02 2.32303379e-03 7.18197378e-01 3.12871485e+03 +5.59700000e-04 -1.65360702e-12 7.09317199e-02 5.55550344e-02 9.19030315e-02 6.10898042e-02 2.32303215e-03 7.18197378e-01 3.12871485e+03 +5.59800000e-04 -1.65360702e-12 7.09317120e-02 5.55550202e-02 9.19030405e-02 6.10898188e-02 2.32303052e-03 7.18197378e-01 3.12871485e+03 +5.59900000e-04 -1.65360702e-12 7.09317043e-02 5.55550060e-02 9.19030496e-02 6.10898334e-02 2.32302889e-03 7.18197378e-01 3.12871485e+03 +5.60000000e-04 -1.65360702e-12 7.09316965e-02 5.55549919e-02 9.19030586e-02 6.10898480e-02 2.32302726e-03 7.18197378e-01 3.12871485e+03 +5.60100000e-04 -1.65360702e-12 7.09316887e-02 5.55549778e-02 9.19030676e-02 6.10898625e-02 2.32302564e-03 7.18197378e-01 3.12871485e+03 +5.60200000e-04 -1.65360702e-12 7.09316810e-02 5.55549637e-02 9.19030765e-02 6.10898769e-02 2.32302402e-03 7.18197378e-01 3.12871485e+03 +5.60300000e-04 -1.65360702e-12 7.09316733e-02 5.55549496e-02 9.19030855e-02 6.10898914e-02 2.32302240e-03 7.18197378e-01 3.12871485e+03 +5.60400000e-04 -1.65360702e-12 7.09316656e-02 5.55549356e-02 9.19030944e-02 6.10899058e-02 2.32302079e-03 7.18197378e-01 3.12871485e+03 +5.60500000e-04 -1.65360702e-12 7.09316579e-02 5.55549217e-02 9.19031033e-02 6.10899201e-02 2.32301918e-03 7.18197378e-01 3.12871485e+03 +5.60600000e-04 -1.65360702e-12 7.09316503e-02 5.55549077e-02 9.19031121e-02 6.10899345e-02 2.32301758e-03 7.18197378e-01 3.12871485e+03 +5.60700000e-04 -1.65360702e-12 7.09316426e-02 5.55548938e-02 9.19031210e-02 6.10899487e-02 2.32301598e-03 7.18197378e-01 3.12871485e+03 +5.60800000e-04 -1.65360702e-12 7.09316350e-02 5.55548800e-02 9.19031298e-02 6.10899630e-02 2.32301439e-03 7.18197378e-01 3.12871485e+03 +5.60900000e-04 -1.65360702e-12 7.09316274e-02 5.55548661e-02 9.19031386e-02 6.10899772e-02 2.32301280e-03 7.18197378e-01 3.12871485e+03 +5.61000000e-04 -1.65360702e-12 7.09316198e-02 5.55548523e-02 9.19031474e-02 6.10899914e-02 2.32301121e-03 7.18197378e-01 3.12871485e+03 +5.61100000e-04 -1.65360702e-12 7.09316123e-02 5.55548386e-02 9.19031562e-02 6.10900055e-02 2.32300963e-03 7.18197378e-01 3.12871485e+03 +5.61200000e-04 -1.65360702e-12 7.09316047e-02 5.55548248e-02 9.19031649e-02 6.10900196e-02 2.32300805e-03 7.18197378e-01 3.12871485e+03 +5.61300000e-04 -1.65360702e-12 7.09315972e-02 5.55548112e-02 9.19031736e-02 6.10900337e-02 2.32300647e-03 7.18197378e-01 3.12871485e+03 +5.61400000e-04 -1.65360702e-12 7.09315897e-02 5.55547975e-02 9.19031823e-02 6.10900477e-02 2.32300490e-03 7.18197378e-01 3.12871485e+03 +5.61500000e-04 -1.65360702e-12 7.09315822e-02 5.55547839e-02 9.19031910e-02 6.10900617e-02 2.32300334e-03 7.18197378e-01 3.12871485e+03 +5.61600000e-04 -1.65360702e-12 7.09315748e-02 5.55547703e-02 9.19031996e-02 6.10900757e-02 2.32300178e-03 7.18197378e-01 3.12871485e+03 +5.61700000e-04 -1.65360702e-12 7.09315673e-02 5.55547568e-02 9.19032082e-02 6.10900896e-02 2.32300022e-03 7.18197378e-01 3.12871485e+03 +5.61800000e-04 -1.65360702e-12 7.09315599e-02 5.55547432e-02 9.19032168e-02 6.10901035e-02 2.32299866e-03 7.18197378e-01 3.12871485e+03 +5.61900000e-04 -1.65360702e-12 7.09315525e-02 5.55547298e-02 9.19032254e-02 6.10901174e-02 2.32299711e-03 7.18197378e-01 3.12871485e+03 +5.62000000e-04 -1.65360702e-12 7.09315451e-02 5.55547163e-02 9.19032340e-02 6.10901312e-02 2.32299557e-03 7.18197378e-01 3.12871485e+03 +5.62100000e-04 -1.65360702e-12 7.09315378e-02 5.55547029e-02 9.19032425e-02 6.10901450e-02 2.32299402e-03 7.18197378e-01 3.12871485e+03 +5.62200000e-04 -1.65360702e-12 7.09315304e-02 5.55546895e-02 9.19032510e-02 6.10901587e-02 2.32299249e-03 7.18197378e-01 3.12871485e+03 +5.62300000e-04 -1.65360702e-12 7.09315231e-02 5.55546762e-02 9.19032595e-02 6.10901724e-02 2.32299095e-03 7.18197378e-01 3.12871485e+03 +5.62400000e-04 -1.65360702e-12 7.09315158e-02 5.55546629e-02 9.19032680e-02 6.10901861e-02 2.32298942e-03 7.18197378e-01 3.12871485e+03 +5.62500000e-04 -1.65360702e-12 7.09315085e-02 5.55546496e-02 9.19032764e-02 6.10901997e-02 2.32298789e-03 7.18197378e-01 3.12871485e+03 +5.62600000e-04 -1.65360702e-12 7.09315012e-02 5.55546364e-02 9.19032848e-02 6.10902134e-02 2.32298637e-03 7.18197378e-01 3.12871485e+03 +5.62700000e-04 -1.65360702e-12 7.09314940e-02 5.55546232e-02 9.19032933e-02 6.10902269e-02 2.32298485e-03 7.18197378e-01 3.12871485e+03 +5.62800000e-04 -1.65360702e-12 7.09314867e-02 5.55546100e-02 9.19033016e-02 6.10902405e-02 2.32298334e-03 7.18197378e-01 3.12871485e+03 +5.62900000e-04 -1.65360702e-12 7.09314795e-02 5.55545968e-02 9.19033100e-02 6.10902540e-02 2.32298183e-03 7.18197378e-01 3.12871485e+03 +5.63000000e-04 -1.65360702e-12 7.09314723e-02 5.55545837e-02 9.19033183e-02 6.10902674e-02 2.32298032e-03 7.18197378e-01 3.12871774e+03 +5.63100000e-04 -1.65360702e-12 7.09314651e-02 5.55545707e-02 9.19033267e-02 6.10902809e-02 2.32297882e-03 7.18197378e-01 3.12871774e+03 +5.63200000e-04 -1.65360702e-12 7.09314580e-02 5.55545576e-02 9.19033350e-02 6.10902943e-02 2.32297732e-03 7.18197378e-01 3.12871774e+03 +5.63300000e-04 -1.65360702e-12 7.09314508e-02 5.55545446e-02 9.19033432e-02 6.10903076e-02 2.32297582e-03 7.18197378e-01 3.12871774e+03 +5.63400000e-04 -1.65360702e-12 7.09314437e-02 5.55545317e-02 9.19033515e-02 6.10903210e-02 2.32297433e-03 7.18197378e-01 3.12871774e+03 +5.63500000e-04 -1.65360702e-12 7.09314366e-02 5.55545187e-02 9.19033597e-02 6.10903343e-02 2.32297284e-03 7.18197378e-01 3.12871774e+03 +5.63600000e-04 -1.65360702e-12 7.09314295e-02 5.55545058e-02 9.19033679e-02 6.10903475e-02 2.32297136e-03 7.18197378e-01 3.12871774e+03 +5.63700000e-04 -1.65360702e-12 7.09314224e-02 5.55544929e-02 9.19033761e-02 6.10903608e-02 2.32296988e-03 7.18197378e-01 3.12871774e+03 +5.63800000e-04 -1.65360702e-12 7.09314154e-02 5.55544801e-02 9.19033843e-02 6.10903740e-02 2.32296840e-03 7.18197378e-01 3.12871774e+03 +5.63900000e-04 -1.65360702e-12 7.09314084e-02 5.55544673e-02 9.19033925e-02 6.10903871e-02 2.32296693e-03 7.18197378e-01 3.12871774e+03 +5.64000000e-04 -1.65360702e-12 7.09314013e-02 5.55544545e-02 9.19034006e-02 6.10904003e-02 2.32296546e-03 7.18197378e-01 3.12871774e+03 +5.64100000e-04 -1.65360702e-12 7.09313943e-02 5.55544418e-02 9.19034087e-02 6.10904133e-02 2.32296399e-03 7.18197378e-01 3.12871774e+03 +5.64200000e-04 -1.65360702e-12 7.09313874e-02 5.55544291e-02 9.19034168e-02 6.10904264e-02 2.32296253e-03 7.18197378e-01 3.12871774e+03 +5.64300000e-04 -1.65360702e-12 7.09313804e-02 5.55544164e-02 9.19034248e-02 6.10904394e-02 2.32296107e-03 7.18197378e-01 3.12871774e+03 +5.64400000e-04 -1.65360702e-12 7.09313735e-02 5.55544038e-02 9.19034329e-02 6.10904524e-02 2.32295962e-03 7.18197378e-01 3.12871774e+03 +5.64500000e-04 -1.65360702e-12 7.09313665e-02 5.55543911e-02 9.19034409e-02 6.10904654e-02 2.32295817e-03 7.18197378e-01 3.12871774e+03 +5.64600000e-04 -1.65360702e-12 7.09313596e-02 5.55543786e-02 9.19034489e-02 6.10904783e-02 2.32295672e-03 7.18197378e-01 3.12871774e+03 +5.64700000e-04 -1.65360702e-12 7.09313527e-02 5.55543660e-02 9.19034569e-02 6.10904912e-02 2.32295528e-03 7.18197378e-01 3.12871774e+03 +5.64800000e-04 -1.65360702e-12 7.09313459e-02 5.55543535e-02 9.19034649e-02 6.10905041e-02 2.32295384e-03 7.18197378e-01 3.12871774e+03 +5.64900000e-04 -1.65360702e-12 7.09313390e-02 5.55543410e-02 9.19034728e-02 6.10905169e-02 2.32295240e-03 7.18197378e-01 3.12871774e+03 +5.65000000e-04 -1.65360702e-12 7.09313322e-02 5.55543286e-02 9.19034807e-02 6.10905297e-02 2.32295097e-03 7.18197378e-01 3.12871774e+03 +5.65100000e-04 -1.65360702e-12 7.09313253e-02 5.55543162e-02 9.19034886e-02 6.10905425e-02 2.32294954e-03 7.18197378e-01 3.12871774e+03 +5.65200000e-04 -1.65360702e-12 7.09313185e-02 5.55543038e-02 9.19034965e-02 6.10905552e-02 2.32294812e-03 7.18197378e-01 3.12871774e+03 +5.65300000e-04 -1.65360702e-12 7.09313117e-02 5.55542914e-02 9.19035044e-02 6.10905679e-02 2.32294670e-03 7.18197378e-01 3.12871774e+03 +5.65400000e-04 -1.65360702e-12 7.09313050e-02 5.55542791e-02 9.19035122e-02 6.10905806e-02 2.32294528e-03 7.18197378e-01 3.12871774e+03 +5.65500000e-04 -1.65360702e-12 7.09312982e-02 5.55542668e-02 9.19035201e-02 6.10905932e-02 2.32294387e-03 7.18197378e-01 3.12871774e+03 +5.65600000e-04 -1.65360702e-12 7.09312915e-02 5.55542545e-02 9.19035279e-02 6.10906058e-02 2.32294246e-03 7.18197378e-01 3.12871774e+03 +5.65700000e-04 -1.65360702e-12 7.09312848e-02 5.55542423e-02 9.19035356e-02 6.10906184e-02 2.32294105e-03 7.18197378e-01 3.12871774e+03 +5.65800000e-04 -1.65360702e-12 7.09312781e-02 5.55542301e-02 9.19035434e-02 6.10906309e-02 2.32293965e-03 7.18197378e-01 3.12871774e+03 +5.65900000e-04 -1.65360702e-12 7.09312714e-02 5.55542180e-02 9.19035511e-02 6.10906434e-02 2.32293825e-03 7.18197378e-01 3.12871774e+03 +5.66000000e-04 -1.65360702e-12 7.09312647e-02 5.55542058e-02 9.19035589e-02 6.10906559e-02 2.32293685e-03 7.18197378e-01 3.12871774e+03 +5.66100000e-04 -1.65360702e-12 7.09312581e-02 5.55541937e-02 9.19035666e-02 6.10906683e-02 2.32293546e-03 7.18197378e-01 3.12871774e+03 +5.66200000e-04 -1.65360702e-12 7.09312515e-02 5.55541816e-02 9.19035743e-02 6.10906807e-02 2.32293407e-03 7.18197378e-01 3.12871774e+03 +5.66300000e-04 -1.65360702e-12 7.09312448e-02 5.55541696e-02 9.19035819e-02 6.10906931e-02 2.32293269e-03 7.18197378e-01 3.12871774e+03 +5.66400000e-04 -1.65360702e-12 7.09312382e-02 5.55541576e-02 9.19035896e-02 6.10907054e-02 2.32293131e-03 7.18197378e-01 3.12871774e+03 +5.66500000e-04 -1.65360702e-12 7.09312317e-02 5.55541456e-02 9.19035972e-02 6.10907178e-02 2.32292993e-03 7.18197378e-01 3.12872039e+03 +5.66600000e-04 -1.65360702e-12 7.09312251e-02 5.55541337e-02 9.19036048e-02 6.10907300e-02 2.32292855e-03 7.18197378e-01 3.12872039e+03 +5.66700000e-04 -1.65360702e-12 7.09312186e-02 5.55541217e-02 9.19036124e-02 6.10907423e-02 2.32292718e-03 7.18197378e-01 3.12872039e+03 +5.66800000e-04 -1.65360702e-12 7.09312120e-02 5.55541099e-02 9.19036200e-02 6.10907545e-02 2.32292582e-03 7.18197378e-01 3.12872039e+03 +5.66900000e-04 -1.65360702e-12 7.09312055e-02 5.55540980e-02 9.19036275e-02 6.10907667e-02 2.32292445e-03 7.18197378e-01 3.12872039e+03 +5.67000000e-04 -1.65360702e-12 7.09311990e-02 5.55540862e-02 9.19036350e-02 6.10907789e-02 2.32292309e-03 7.18197378e-01 3.12872039e+03 +5.67100000e-04 -1.65360702e-12 7.09311925e-02 5.55540744e-02 9.19036425e-02 6.10907910e-02 2.32292174e-03 7.18197378e-01 3.12872039e+03 +5.67200000e-04 -1.65360702e-12 7.09311861e-02 5.55540626e-02 9.19036500e-02 6.10908031e-02 2.32292038e-03 7.18197378e-01 3.12872039e+03 +5.67300000e-04 -1.65360702e-12 7.09311796e-02 5.55540509e-02 9.19036575e-02 6.10908151e-02 2.32291903e-03 7.18197378e-01 3.12872039e+03 +5.67400000e-04 -1.65360702e-12 7.09311732e-02 5.55540392e-02 9.19036649e-02 6.10908272e-02 2.32291769e-03 7.18197378e-01 3.12872039e+03 +5.67500000e-04 -1.65360702e-12 7.09311668e-02 5.55540275e-02 9.19036724e-02 6.10908392e-02 2.32291634e-03 7.18197378e-01 3.12872039e+03 +5.67600000e-04 -1.65360702e-12 7.09311604e-02 5.55540158e-02 9.19036798e-02 6.10908511e-02 2.32291500e-03 7.18197378e-01 3.12872039e+03 +5.67700000e-04 -1.65360702e-12 7.09311540e-02 5.55540042e-02 9.19036872e-02 6.10908631e-02 2.32291367e-03 7.18197378e-01 3.12872039e+03 +5.67800000e-04 -1.65360702e-12 7.09311476e-02 5.55539926e-02 9.19036946e-02 6.10908750e-02 2.32291234e-03 7.18197378e-01 3.12872039e+03 +5.67900000e-04 -1.65360702e-12 7.09311413e-02 5.55539811e-02 9.19037019e-02 6.10908869e-02 2.32291101e-03 7.18197378e-01 3.12872039e+03 +5.68000000e-04 -1.65360702e-12 7.09311350e-02 5.55539695e-02 9.19037093e-02 6.10908987e-02 2.32290968e-03 7.18197378e-01 3.12872039e+03 +5.68100000e-04 -1.65360702e-12 7.09311286e-02 5.55539580e-02 9.19037166e-02 6.10909105e-02 2.32290836e-03 7.18197378e-01 3.12872039e+03 +5.68200000e-04 -1.65360702e-12 7.09311223e-02 5.55539466e-02 9.19037239e-02 6.10909223e-02 2.32290704e-03 7.18197378e-01 3.12872039e+03 +5.68300000e-04 -1.65360702e-12 7.09311161e-02 5.55539351e-02 9.19037312e-02 6.10909341e-02 2.32290572e-03 7.18197378e-01 3.12872039e+03 +5.68400000e-04 -1.65360702e-12 7.09311098e-02 5.55539237e-02 9.19037384e-02 6.10909458e-02 2.32290441e-03 7.18197378e-01 3.12872039e+03 +5.68500000e-04 -1.65360702e-12 7.09311035e-02 5.55539123e-02 9.19037457e-02 6.10909575e-02 2.32290310e-03 7.18197378e-01 3.12872039e+03 +5.68600000e-04 -1.65360702e-12 7.09310973e-02 5.55539010e-02 9.19037529e-02 6.10909692e-02 2.32290180e-03 7.18197378e-01 3.12872039e+03 +5.68700000e-04 -1.65360702e-12 7.09310911e-02 5.55538897e-02 9.19037601e-02 6.10909808e-02 2.32290049e-03 7.18197378e-01 3.12872039e+03 +5.68800000e-04 -1.65360702e-12 7.09310849e-02 5.55538784e-02 9.19037673e-02 6.10909924e-02 2.32289919e-03 7.18197378e-01 3.12872039e+03 +5.68900000e-04 -1.65360702e-12 7.09310787e-02 5.55538671e-02 9.19037744e-02 6.10910040e-02 2.32289790e-03 7.18197378e-01 3.12872039e+03 +5.69000000e-04 -1.65360702e-12 7.09310725e-02 5.55538559e-02 9.19037816e-02 6.10910156e-02 2.32289661e-03 7.18197378e-01 3.12872039e+03 +5.69100000e-04 -1.65360702e-12 7.09310664e-02 5.55538447e-02 9.19037887e-02 6.10910271e-02 2.32289532e-03 7.18197378e-01 3.12872039e+03 +5.69200000e-04 -1.65360702e-12 7.09310602e-02 5.55538335e-02 9.19037958e-02 6.10910386e-02 2.32289403e-03 7.18197378e-01 3.12872039e+03 +5.69300000e-04 -1.65360702e-12 7.09310541e-02 5.55538223e-02 9.19038029e-02 6.10910500e-02 2.32289275e-03 7.18197378e-01 3.12872039e+03 +5.69400000e-04 -1.65360702e-12 7.09310480e-02 5.55538112e-02 9.19038100e-02 6.10910615e-02 2.32289147e-03 7.18197378e-01 3.12872039e+03 +5.69500000e-04 -1.65360702e-12 7.09310419e-02 5.55538001e-02 9.19038171e-02 6.10910729e-02 2.32289019e-03 7.18197378e-01 3.12872039e+03 +5.69600000e-04 -1.65360702e-12 7.09310358e-02 5.55537891e-02 9.19038241e-02 6.10910842e-02 2.32288892e-03 7.18197378e-01 3.12872039e+03 +5.69700000e-04 -1.65360702e-12 7.09310298e-02 5.55537780e-02 9.19038311e-02 6.10910956e-02 2.32288765e-03 7.18197378e-01 3.12872039e+03 +5.69800000e-04 -1.65360702e-12 7.09310237e-02 5.55537670e-02 9.19038382e-02 6.10911069e-02 2.32288639e-03 7.18197378e-01 3.12872039e+03 +5.69900000e-04 -1.65360702e-12 7.09310177e-02 5.55537560e-02 9.19038451e-02 6.10911182e-02 2.32288512e-03 7.18197378e-01 3.12872039e+03 +5.70000000e-04 -1.65360702e-12 7.09310117e-02 5.55537451e-02 9.19038521e-02 6.10911294e-02 2.32288386e-03 7.18197378e-01 3.12872280e+03 +5.70100000e-04 -1.65360702e-12 7.09310057e-02 5.55537342e-02 9.19038591e-02 6.10911407e-02 2.32288261e-03 7.18197378e-01 3.12872280e+03 +5.70200000e-04 -1.65360702e-12 7.09309997e-02 5.55537233e-02 9.19038660e-02 6.10911519e-02 2.32288135e-03 7.18197378e-01 3.12872280e+03 +5.70300000e-04 -1.65360702e-12 7.09309937e-02 5.55537124e-02 9.19038729e-02 6.10911630e-02 2.32288010e-03 7.18197378e-01 3.12872280e+03 +5.70400000e-04 -1.65360702e-12 7.09309878e-02 5.55537015e-02 9.19038798e-02 6.10911742e-02 2.32287886e-03 7.18197378e-01 3.12872280e+03 +5.70500000e-04 -1.65360702e-12 7.09309818e-02 5.55536907e-02 9.19038867e-02 6.10911853e-02 2.32287761e-03 7.18197378e-01 3.12872280e+03 +5.70600000e-04 -1.65360702e-12 7.09309759e-02 5.55536799e-02 9.19038936e-02 6.10911964e-02 2.32287637e-03 7.18197378e-01 3.12872280e+03 +5.70700000e-04 -1.65360702e-12 7.09309700e-02 5.55536692e-02 9.19039004e-02 6.10912074e-02 2.32287514e-03 7.18197378e-01 3.12872280e+03 +5.70800000e-04 -1.65360702e-12 7.09309641e-02 5.55536585e-02 9.19039072e-02 6.10912185e-02 2.32287390e-03 7.18197378e-01 3.12872280e+03 +5.70900000e-04 -1.65360702e-12 7.09309582e-02 5.55536478e-02 9.19039141e-02 6.10912295e-02 2.32287267e-03 7.18197378e-01 3.12872280e+03 +5.71000000e-04 -1.65360702e-12 7.09309524e-02 5.55536371e-02 9.19039208e-02 6.10912404e-02 2.32287144e-03 7.18197378e-01 3.12872280e+03 +5.71100000e-04 -1.65360702e-12 7.09309465e-02 5.55536264e-02 9.19039276e-02 6.10912514e-02 2.32287022e-03 7.18197378e-01 3.12872280e+03 +5.71200000e-04 -1.65360702e-12 7.09309407e-02 5.55536158e-02 9.19039344e-02 6.10912623e-02 2.32286900e-03 7.18197378e-01 3.12872280e+03 +5.71300000e-04 -1.65360702e-12 7.09309348e-02 5.55536052e-02 9.19039411e-02 6.10912732e-02 2.32286778e-03 7.18197378e-01 3.12872280e+03 +5.71400000e-04 -1.65360702e-12 7.09309290e-02 5.55535947e-02 9.19039478e-02 6.10912840e-02 2.32286656e-03 7.18197378e-01 3.12872280e+03 +5.71500000e-04 -1.65360702e-12 7.09309233e-02 5.55535841e-02 9.19039546e-02 6.10912949e-02 2.32286535e-03 7.18197378e-01 3.12872280e+03 +5.71600000e-04 -1.65360702e-12 7.09309175e-02 5.55535736e-02 9.19039612e-02 6.10913057e-02 2.32286414e-03 7.18197378e-01 3.12872280e+03 +5.71700000e-04 -1.65360702e-12 7.09309117e-02 5.55535631e-02 9.19039679e-02 6.10913164e-02 2.32286294e-03 7.18197378e-01 3.12872280e+03 +5.71800000e-04 -1.65360702e-12 7.09309060e-02 5.55535527e-02 9.19039746e-02 6.10913272e-02 2.32286173e-03 7.18197378e-01 3.12872280e+03 +5.71900000e-04 -1.65360702e-12 7.09309003e-02 5.55535422e-02 9.19039812e-02 6.10913379e-02 2.32286053e-03 7.18197378e-01 3.12872280e+03 +5.72000000e-04 -1.65360702e-12 7.09308945e-02 5.55535318e-02 9.19039878e-02 6.10913486e-02 2.32285934e-03 7.18197378e-01 3.12872280e+03 +5.72100000e-04 -1.65360702e-12 7.09308888e-02 5.55535215e-02 9.19039944e-02 6.10913593e-02 2.32285814e-03 7.18197378e-01 3.12872280e+03 +5.72200000e-04 -1.65360702e-12 7.09308832e-02 5.55535111e-02 9.19040010e-02 6.10913699e-02 2.32285695e-03 7.18197378e-01 3.12872280e+03 +5.72300000e-04 -1.65360702e-12 7.09308775e-02 5.55535008e-02 9.19040076e-02 6.10913805e-02 2.32285577e-03 7.18197378e-01 3.12872280e+03 +5.72400000e-04 -1.65360702e-12 7.09308718e-02 5.55534905e-02 9.19040142e-02 6.10913911e-02 2.32285458e-03 7.18197378e-01 3.12872280e+03 +5.72500000e-04 -1.65360702e-12 7.09308662e-02 5.55534802e-02 9.19040207e-02 6.10914017e-02 2.32285340e-03 7.18197378e-01 3.12872280e+03 +5.72600000e-04 -1.65360702e-12 7.09308606e-02 5.55534700e-02 9.19040272e-02 6.10914122e-02 2.32285222e-03 7.18197378e-01 3.12872280e+03 +5.72700000e-04 -1.65360702e-12 7.09308549e-02 5.55534597e-02 9.19040337e-02 6.10914227e-02 2.32285105e-03 7.18197378e-01 3.12872280e+03 +5.72800000e-04 -1.65360702e-12 7.09308493e-02 5.55534495e-02 9.19040402e-02 6.10914332e-02 2.32284987e-03 7.18197378e-01 3.12872280e+03 +5.72900000e-04 -1.65360702e-12 7.09308438e-02 5.55534394e-02 9.19040467e-02 6.10914436e-02 2.32284871e-03 7.18197378e-01 3.12872280e+03 +5.73000000e-04 -1.65360702e-12 7.09308382e-02 5.55534292e-02 9.19040531e-02 6.10914541e-02 2.32284754e-03 7.18197378e-01 3.12872280e+03 +5.73100000e-04 -1.65360702e-12 7.09308326e-02 5.55534191e-02 9.19040596e-02 6.10914645e-02 2.32284638e-03 7.18197378e-01 3.12872280e+03 +5.73200000e-04 -1.65360702e-12 7.09308271e-02 5.55534090e-02 9.19040660e-02 6.10914748e-02 2.32284521e-03 7.18197378e-01 3.12872280e+03 +5.73300000e-04 -1.65360702e-12 7.09308216e-02 5.55533990e-02 9.19040724e-02 6.10914852e-02 2.32284406e-03 7.18197378e-01 3.12872280e+03 +5.73400000e-04 -1.65360702e-12 7.09308160e-02 5.55533889e-02 9.19040788e-02 6.10914955e-02 2.32284290e-03 7.18197378e-01 3.12872280e+03 +5.73500000e-04 -1.65360702e-12 7.09308105e-02 5.55533789e-02 9.19040852e-02 6.10915058e-02 2.32284175e-03 7.18197378e-01 3.12872502e+03 +5.73600000e-04 -1.65360702e-12 7.09308051e-02 5.55533689e-02 9.19040915e-02 6.10915160e-02 2.32284060e-03 7.18197378e-01 3.12872502e+03 +5.73700000e-04 -1.65360702e-12 7.09307996e-02 5.55533590e-02 9.19040979e-02 6.10915263e-02 2.32283946e-03 7.18197378e-01 3.12872502e+03 +5.73800000e-04 -1.65360702e-12 7.09307941e-02 5.55533490e-02 9.19041042e-02 6.10915365e-02 2.32283831e-03 7.18197378e-01 3.12872502e+03 +5.73900000e-04 -1.65360702e-12 7.09307887e-02 5.55533391e-02 9.19041105e-02 6.10915467e-02 2.32283717e-03 7.18197378e-01 3.12872502e+03 +5.74000000e-04 -1.65360702e-12 7.09307833e-02 5.55533292e-02 9.19041168e-02 6.10915568e-02 2.32283604e-03 7.18197378e-01 3.12872502e+03 +5.74100000e-04 -1.65360702e-12 7.09307778e-02 5.55533194e-02 9.19041231e-02 6.10915670e-02 2.32283490e-03 7.18197378e-01 3.12872502e+03 +5.74200000e-04 -1.65360702e-12 7.09307724e-02 5.55533095e-02 9.19041293e-02 6.10915771e-02 2.32283377e-03 7.18197378e-01 3.12872502e+03 +5.74300000e-04 -1.65360702e-12 7.09307671e-02 5.55532997e-02 9.19041356e-02 6.10915872e-02 2.32283264e-03 7.18197378e-01 3.12872502e+03 +5.74400000e-04 -1.65360702e-12 7.09307617e-02 5.55532900e-02 9.19041418e-02 6.10915972e-02 2.32283152e-03 7.18197378e-01 3.12872502e+03 +5.74500000e-04 -1.65360702e-12 7.09307563e-02 5.55532802e-02 9.19041480e-02 6.10916072e-02 2.32283040e-03 7.18197378e-01 3.12872502e+03 +5.74600000e-04 -1.65360702e-12 7.09307510e-02 5.55532705e-02 9.19041542e-02 6.10916172e-02 2.32282928e-03 7.18197378e-01 3.12872502e+03 +5.74700000e-04 -1.65360702e-12 7.09307456e-02 5.55532608e-02 9.19041604e-02 6.10916272e-02 2.32282816e-03 7.18197378e-01 3.12872502e+03 +5.74800000e-04 -1.65360702e-12 7.09307403e-02 5.55532511e-02 9.19041665e-02 6.10916372e-02 2.32282705e-03 7.18197378e-01 3.12872502e+03 +5.74900000e-04 -1.65360702e-12 7.09307350e-02 5.55532414e-02 9.19041727e-02 6.10916471e-02 2.32282594e-03 7.18197378e-01 3.12872502e+03 +5.75000000e-04 -1.65360702e-12 7.09307297e-02 5.55532318e-02 9.19041788e-02 6.10916570e-02 2.32282483e-03 7.18197378e-01 3.12872502e+03 +5.75100000e-04 -1.65360702e-12 7.09307244e-02 5.55532222e-02 9.19041849e-02 6.10916669e-02 2.32282372e-03 7.18197378e-01 3.12872502e+03 +5.75200000e-04 -1.65360702e-12 7.09307192e-02 5.55532126e-02 9.19041910e-02 6.10916767e-02 2.32282262e-03 7.18197378e-01 3.12872502e+03 +5.75300000e-04 -1.65360702e-12 7.09307139e-02 5.55532030e-02 9.19041971e-02 6.10916866e-02 2.32282152e-03 7.18197378e-01 3.12872502e+03 +5.75400000e-04 -1.65360702e-12 7.09307087e-02 5.55531935e-02 9.19042032e-02 6.10916964e-02 2.32282042e-03 7.18197378e-01 3.12872502e+03 +5.75500000e-04 -1.65360702e-12 7.09307035e-02 5.55531840e-02 9.19042092e-02 6.10917061e-02 2.32281933e-03 7.18197378e-01 3.12872502e+03 +5.75600000e-04 -1.65360702e-12 7.09306983e-02 5.55531745e-02 9.19042153e-02 6.10917159e-02 2.32281824e-03 7.18197378e-01 3.12872502e+03 +5.75700000e-04 -1.65360702e-12 7.09306931e-02 5.55531650e-02 9.19042213e-02 6.10917256e-02 2.32281715e-03 7.18197378e-01 3.12872502e+03 +5.75800000e-04 -1.65360702e-12 7.09306879e-02 5.55531556e-02 9.19042273e-02 6.10917353e-02 2.32281607e-03 7.18197378e-01 3.12872502e+03 +5.75900000e-04 -1.65360702e-12 7.09306827e-02 5.55531462e-02 9.19042333e-02 6.10917450e-02 2.32281498e-03 7.18197378e-01 3.12872502e+03 +5.76000000e-04 -1.65360702e-12 7.09306775e-02 5.55531368e-02 9.19042393e-02 6.10917547e-02 2.32281390e-03 7.18197378e-01 3.12872502e+03 +5.76100000e-04 -1.65360702e-12 7.09306724e-02 5.55531274e-02 9.19042452e-02 6.10917643e-02 2.32281283e-03 7.18197378e-01 3.12872502e+03 +5.76200000e-04 -1.65360702e-12 7.09306673e-02 5.55531181e-02 9.19042512e-02 6.10917739e-02 2.32281175e-03 7.18197378e-01 3.12872502e+03 +5.76300000e-04 -1.65360702e-12 7.09306622e-02 5.55531087e-02 9.19042571e-02 6.10917835e-02 2.32281068e-03 7.18197378e-01 3.12872502e+03 +5.76400000e-04 -1.65360702e-12 7.09306570e-02 5.55530995e-02 9.19042630e-02 6.10917930e-02 2.32280961e-03 7.18197378e-01 3.12872502e+03 +5.76500000e-04 -1.65360702e-12 7.09306520e-02 5.55530902e-02 9.19042689e-02 6.10918025e-02 2.32280854e-03 7.18197378e-01 3.12872502e+03 +5.76600000e-04 -1.65360702e-12 7.09306469e-02 5.55530809e-02 9.19042748e-02 6.10918120e-02 2.32280748e-03 7.18197378e-01 3.12872502e+03 +5.76700000e-04 -1.65360702e-12 7.09306418e-02 5.55530717e-02 9.19042807e-02 6.10918215e-02 2.32280642e-03 7.18197378e-01 3.12872502e+03 +5.76800000e-04 -1.65360702e-12 7.09306368e-02 5.55530625e-02 9.19042865e-02 6.10918310e-02 2.32280536e-03 7.18197378e-01 3.12872502e+03 +5.76900000e-04 -1.65360702e-12 7.09306317e-02 5.55530533e-02 9.19042924e-02 6.10918404e-02 2.32280431e-03 7.18197378e-01 3.12872704e+03 +5.77000000e-04 -1.65360702e-12 7.09306267e-02 5.55530442e-02 9.19042982e-02 6.10918498e-02 2.32280325e-03 7.18197378e-01 3.12872704e+03 +5.77100000e-04 -1.65360702e-12 7.09306217e-02 5.55530351e-02 9.19043040e-02 6.10918592e-02 2.32280220e-03 7.18197378e-01 3.12872704e+03 +5.77200000e-04 -1.65360702e-12 7.09306167e-02 5.55530259e-02 9.19043098e-02 6.10918686e-02 2.32280116e-03 7.18197378e-01 3.12872704e+03 +5.77300000e-04 -1.65360702e-12 7.09306117e-02 5.55530169e-02 9.19043156e-02 6.10918779e-02 2.32280011e-03 7.18197378e-01 3.12872704e+03 +5.77400000e-04 -1.65360702e-12 7.09306067e-02 5.55530078e-02 9.19043214e-02 6.10918872e-02 2.32279907e-03 7.18197378e-01 3.12872704e+03 +5.77500000e-04 -1.65360702e-12 7.09306017e-02 5.55529988e-02 9.19043271e-02 6.10918965e-02 2.32279803e-03 7.18197378e-01 3.12872704e+03 +5.77600000e-04 -1.65360702e-12 7.09305968e-02 5.55529898e-02 9.19043328e-02 6.10919058e-02 2.32279699e-03 7.18197378e-01 3.12872704e+03 +5.77700000e-04 -1.65360702e-12 7.09305919e-02 5.55529808e-02 9.19043386e-02 6.10919150e-02 2.32279596e-03 7.18197378e-01 3.12872704e+03 +5.77800000e-04 -1.65360702e-12 7.09305869e-02 5.55529718e-02 9.19043443e-02 6.10919242e-02 2.32279493e-03 7.18197378e-01 3.12872704e+03 +5.77900000e-04 -1.65360702e-12 7.09305820e-02 5.55529629e-02 9.19043500e-02 6.10919334e-02 2.32279390e-03 7.18197378e-01 3.12872704e+03 +5.78000000e-04 -1.65360702e-12 7.09305771e-02 5.55529539e-02 9.19043556e-02 6.10919426e-02 2.32279287e-03 7.18197378e-01 3.12872704e+03 +5.78100000e-04 -1.65360702e-12 7.09305722e-02 5.55529450e-02 9.19043613e-02 6.10919517e-02 2.32279185e-03 7.18197378e-01 3.12872704e+03 +5.78200000e-04 -1.65360702e-12 7.09305674e-02 5.55529362e-02 9.19043670e-02 6.10919609e-02 2.32279083e-03 7.18197378e-01 3.12872704e+03 +5.78300000e-04 -1.65360702e-12 7.09305625e-02 5.55529273e-02 9.19043726e-02 6.10919700e-02 2.32278981e-03 7.18197378e-01 3.12872704e+03 +5.78400000e-04 -1.65360702e-12 7.09305576e-02 5.55529185e-02 9.19043782e-02 6.10919790e-02 2.32278880e-03 7.18197378e-01 3.12872704e+03 +5.78500000e-04 -1.65360702e-12 7.09305528e-02 5.55529097e-02 9.19043838e-02 6.10919881e-02 2.32278778e-03 7.18197378e-01 3.12872704e+03 +5.78600000e-04 -1.65360702e-12 7.09305480e-02 5.55529009e-02 9.19043894e-02 6.10919971e-02 2.32278677e-03 7.18197378e-01 3.12872704e+03 +5.78700000e-04 -1.65360702e-12 7.09305432e-02 5.55528921e-02 9.19043950e-02 6.10920061e-02 2.32278576e-03 7.18197378e-01 3.12872704e+03 +5.78800000e-04 -1.65360702e-12 7.09305384e-02 5.55528834e-02 9.19044005e-02 6.10920151e-02 2.32278476e-03 7.18197378e-01 3.12872704e+03 +5.78900000e-04 -1.65360702e-12 7.09305336e-02 5.55528747e-02 9.19044061e-02 6.10920241e-02 2.32278376e-03 7.18197378e-01 3.12872704e+03 +5.79000000e-04 -1.65360702e-12 7.09305288e-02 5.55528660e-02 9.19044116e-02 6.10920330e-02 2.32278276e-03 7.18197378e-01 3.12872704e+03 +5.79100000e-04 -1.65360702e-12 7.09305240e-02 5.55528573e-02 9.19044172e-02 6.10920419e-02 2.32278176e-03 7.18197378e-01 3.12872704e+03 +5.79200000e-04 -1.65360702e-12 7.09305193e-02 5.55528486e-02 9.19044227e-02 6.10920508e-02 2.32278076e-03 7.18197378e-01 3.12872704e+03 +5.79300000e-04 -1.65360702e-12 7.09305145e-02 5.55528400e-02 9.19044282e-02 6.10920597e-02 2.32277977e-03 7.18197378e-01 3.12872704e+03 +5.79400000e-04 -1.65360702e-12 7.09305098e-02 5.55528314e-02 9.19044336e-02 6.10920685e-02 2.32277878e-03 7.18197378e-01 3.12872704e+03 +5.79500000e-04 -1.65360702e-12 7.09305051e-02 5.55528228e-02 9.19044391e-02 6.10920773e-02 2.32277779e-03 7.18197378e-01 3.12872704e+03 +5.79600000e-04 -1.65360702e-12 7.09305004e-02 5.55528143e-02 9.19044445e-02 6.10920861e-02 2.32277681e-03 7.18197378e-01 3.12872704e+03 +5.79700000e-04 -1.65360702e-12 7.09304957e-02 5.55528057e-02 9.19044500e-02 6.10920949e-02 2.32277583e-03 7.18197378e-01 3.12872704e+03 +5.79800000e-04 -1.65360702e-12 7.09304910e-02 5.55527972e-02 9.19044554e-02 6.10921037e-02 2.32277485e-03 7.18197378e-01 3.12872704e+03 +5.79900000e-04 -1.65360702e-12 7.09304864e-02 5.55527887e-02 9.19044608e-02 6.10921124e-02 2.32277387e-03 7.18197378e-01 3.12872704e+03 +5.80000000e-04 -1.65360702e-12 7.09304817e-02 5.55527802e-02 9.19044662e-02 6.10921211e-02 2.32277289e-03 7.18197378e-01 3.12872704e+03 +5.80100000e-04 -1.65360702e-12 7.09304771e-02 5.55527718e-02 9.19044716e-02 6.10921298e-02 2.32277192e-03 7.18197378e-01 3.12872704e+03 +5.80200000e-04 -1.65360702e-12 7.09304724e-02 5.55527633e-02 9.19044769e-02 6.10921385e-02 2.32277095e-03 7.18197378e-01 3.12872704e+03 +5.80300000e-04 -1.65360702e-12 7.09304678e-02 5.55527549e-02 9.19044823e-02 6.10921471e-02 2.32276999e-03 7.18197378e-01 3.12872704e+03 +5.80400000e-04 -1.65360702e-12 7.09304632e-02 5.55527465e-02 9.19044876e-02 6.10921557e-02 2.32276902e-03 7.18197378e-01 3.12872889e+03 +5.80500000e-04 -1.65360702e-12 7.09304586e-02 5.55527382e-02 9.19044930e-02 6.10921643e-02 2.32276806e-03 7.18197378e-01 3.12872889e+03 +5.80600000e-04 -1.65360702e-12 7.09304540e-02 5.55527298e-02 9.19044983e-02 6.10921729e-02 2.32276710e-03 7.18197378e-01 3.12872889e+03 +5.80700000e-04 -1.65360702e-12 7.09304494e-02 5.55527215e-02 9.19045036e-02 6.10921815e-02 2.32276614e-03 7.18197378e-01 3.12872889e+03 +5.80800000e-04 -1.65360702e-12 7.09304449e-02 5.55527132e-02 9.19045089e-02 6.10921900e-02 2.32276519e-03 7.18197378e-01 3.12872889e+03 +5.80900000e-04 -1.65360702e-12 7.09304403e-02 5.55527049e-02 9.19045141e-02 6.10921985e-02 2.32276423e-03 7.18197378e-01 3.12872889e+03 +5.81000000e-04 -1.65360702e-12 7.09304358e-02 5.55526967e-02 9.19045194e-02 6.10922070e-02 2.32276328e-03 7.18197378e-01 3.12872889e+03 +5.81100000e-04 -1.65360702e-12 7.09304313e-02 5.55526884e-02 9.19045246e-02 6.10922155e-02 2.32276234e-03 7.18197378e-01 3.12872889e+03 +5.81200000e-04 -1.65360702e-12 7.09304268e-02 5.55526802e-02 9.19045299e-02 6.10922239e-02 2.32276139e-03 7.18197378e-01 3.12872889e+03 +5.81300000e-04 -1.65360702e-12 7.09304223e-02 5.55526720e-02 9.19045351e-02 6.10922324e-02 2.32276045e-03 7.18197378e-01 3.12872889e+03 +5.81400000e-04 -1.65360702e-12 7.09304178e-02 5.55526638e-02 9.19045403e-02 6.10922408e-02 2.32275951e-03 7.18197378e-01 3.12872889e+03 +5.81500000e-04 -1.65360702e-12 7.09304133e-02 5.55526557e-02 9.19045455e-02 6.10922491e-02 2.32275857e-03 7.18197378e-01 3.12872889e+03 +5.81600000e-04 -1.65360702e-12 7.09304088e-02 5.55526475e-02 9.19045507e-02 6.10922575e-02 2.32275763e-03 7.18197378e-01 3.12872889e+03 +5.81700000e-04 -1.65360702e-12 7.09304044e-02 5.55526394e-02 9.19045558e-02 6.10922658e-02 2.32275670e-03 7.18197378e-01 3.12872889e+03 +5.81800000e-04 -1.65360702e-12 7.09303999e-02 5.55526313e-02 9.19045610e-02 6.10922742e-02 2.32275577e-03 7.18197378e-01 3.12872889e+03 +5.81900000e-04 -1.65360702e-12 7.09303955e-02 5.55526233e-02 9.19045661e-02 6.10922825e-02 2.32275484e-03 7.18197378e-01 3.12872889e+03 +5.82000000e-04 -1.65360702e-12 7.09303911e-02 5.55526152e-02 9.19045712e-02 6.10922907e-02 2.32275392e-03 7.18197378e-01 3.12872889e+03 +5.82100000e-04 -1.65360702e-12 7.09303867e-02 5.55526072e-02 9.19045763e-02 6.10922990e-02 2.32275299e-03 7.18197378e-01 3.12872889e+03 +5.82200000e-04 -1.65360702e-12 7.09303823e-02 5.55525992e-02 9.19045814e-02 6.10923072e-02 2.32275207e-03 7.18197378e-01 3.12872889e+03 +5.82300000e-04 -1.65360702e-12 7.09303779e-02 5.55525912e-02 9.19045865e-02 6.10923154e-02 2.32275115e-03 7.18197378e-01 3.12872889e+03 +5.82400000e-04 -1.65360702e-12 7.09303735e-02 5.55525832e-02 9.19045916e-02 6.10923236e-02 2.32275023e-03 7.18197378e-01 3.12872889e+03 +5.82500000e-04 -1.65360702e-12 7.09303691e-02 5.55525753e-02 9.19045967e-02 6.10923318e-02 2.32274932e-03 7.18197378e-01 3.12872889e+03 +5.82600000e-04 -1.65360702e-12 7.09303648e-02 5.55525673e-02 9.19046017e-02 6.10923400e-02 2.32274841e-03 7.18197378e-01 3.12872889e+03 +5.82700000e-04 -1.65360702e-12 7.09303604e-02 5.55525594e-02 9.19046067e-02 6.10923481e-02 2.32274750e-03 7.18197378e-01 3.12872889e+03 +5.82800000e-04 -1.65360702e-12 7.09303561e-02 5.55525515e-02 9.19046118e-02 6.10923562e-02 2.32274659e-03 7.18197378e-01 3.12872889e+03 +5.82900000e-04 -1.65360702e-12 7.09303518e-02 5.55525437e-02 9.19046168e-02 6.10923643e-02 2.32274569e-03 7.18197378e-01 3.12872889e+03 +5.83000000e-04 -1.65360702e-12 7.09303475e-02 5.55525358e-02 9.19046218e-02 6.10923723e-02 2.32274478e-03 7.18197378e-01 3.12872889e+03 +5.83100000e-04 -1.65360702e-12 7.09303432e-02 5.55525280e-02 9.19046267e-02 6.10923804e-02 2.32274388e-03 7.18197378e-01 3.12872889e+03 +5.83200000e-04 -1.65360702e-12 7.09303389e-02 5.55525202e-02 9.19046317e-02 6.10923884e-02 2.32274299e-03 7.18197378e-01 3.12872889e+03 +5.83300000e-04 -1.65360702e-12 7.09303346e-02 5.55525124e-02 9.19046367e-02 6.10923964e-02 2.32274209e-03 7.18197378e-01 3.12872889e+03 +5.83400000e-04 -1.65360702e-12 7.09303303e-02 5.55525046e-02 9.19046416e-02 6.10924044e-02 2.32274120e-03 7.18197378e-01 3.12872889e+03 +5.83500000e-04 -1.65360702e-12 7.09303261e-02 5.55524969e-02 9.19046465e-02 6.10924124e-02 2.32274031e-03 7.18197378e-01 3.12872889e+03 +5.83600000e-04 -1.65360702e-12 7.09303218e-02 5.55524891e-02 9.19046515e-02 6.10924203e-02 2.32273942e-03 7.18197378e-01 3.12872889e+03 +5.83700000e-04 -1.65360702e-12 7.09303176e-02 5.55524814e-02 9.19046564e-02 6.10924282e-02 2.32273853e-03 7.18197378e-01 3.12872889e+03 +5.83800000e-04 -1.65360702e-12 7.09303134e-02 5.55524737e-02 9.19046613e-02 6.10924361e-02 2.32273765e-03 7.18197378e-01 3.12872889e+03 +5.83900000e-04 -1.65360702e-12 7.09303092e-02 5.55524661e-02 9.19046661e-02 6.10924440e-02 2.32273676e-03 7.18197378e-01 3.12873058e+03 +5.84000000e-04 -1.65360702e-12 7.09303049e-02 5.55524584e-02 9.19046710e-02 6.10924519e-02 2.32273588e-03 7.18197378e-01 3.12873058e+03 +5.84100000e-04 -1.65360702e-12 7.09303008e-02 5.55524508e-02 9.19046759e-02 6.10924597e-02 2.32273501e-03 7.18197378e-01 3.12873058e+03 +5.84200000e-04 -1.65360702e-12 7.09302966e-02 5.55524432e-02 9.19046807e-02 6.10924675e-02 2.32273413e-03 7.18197378e-01 3.12873058e+03 +5.84300000e-04 -1.65360702e-12 7.09302924e-02 5.55524356e-02 9.19046855e-02 6.10924753e-02 2.32273326e-03 7.18197378e-01 3.12873058e+03 +5.84400000e-04 -1.65360702e-12 7.09302883e-02 5.55524280e-02 9.19046904e-02 6.10924831e-02 2.32273239e-03 7.18197378e-01 3.12873058e+03 +5.84500000e-04 -1.65360702e-12 7.09302841e-02 5.55524205e-02 9.19046952e-02 6.10924909e-02 2.32273152e-03 7.18197378e-01 3.12873058e+03 +5.84600000e-04 -1.65360702e-12 7.09302800e-02 5.55524129e-02 9.19047000e-02 6.10924986e-02 2.32273065e-03 7.18197378e-01 3.12873058e+03 +5.84700000e-04 -1.65360702e-12 7.09302758e-02 5.55524054e-02 9.19047047e-02 6.10925064e-02 2.32272979e-03 7.18197378e-01 3.12873058e+03 +5.84800000e-04 -1.65360702e-12 7.09302717e-02 5.55523979e-02 9.19047095e-02 6.10925141e-02 2.32272893e-03 7.18197378e-01 3.12873058e+03 +5.84900000e-04 -1.65360702e-12 7.09302676e-02 5.55523905e-02 9.19047143e-02 6.10925217e-02 2.32272807e-03 7.18197378e-01 3.12873058e+03 +5.85000000e-04 -1.65360702e-12 7.09302635e-02 5.55523830e-02 9.19047190e-02 6.10925294e-02 2.32272721e-03 7.18197378e-01 3.12873058e+03 +5.85100000e-04 -1.65360702e-12 7.09302594e-02 5.55523756e-02 9.19047238e-02 6.10925370e-02 2.32272635e-03 7.18197378e-01 3.12873058e+03 +5.85200000e-04 -1.65360702e-12 7.09302554e-02 5.55523681e-02 9.19047285e-02 6.10925447e-02 2.32272550e-03 7.18197378e-01 3.12873058e+03 +5.85300000e-04 -1.65360702e-12 7.09302513e-02 5.55523607e-02 9.19047332e-02 6.10925523e-02 2.32272465e-03 7.18197378e-01 3.12873058e+03 +5.85400000e-04 -1.65360702e-12 7.09302472e-02 5.55523534e-02 9.19047379e-02 6.10925599e-02 2.32272380e-03 7.18197378e-01 3.12873058e+03 +5.85500000e-04 -1.65360702e-12 7.09302432e-02 5.55523460e-02 9.19047426e-02 6.10925674e-02 2.32272295e-03 7.18197378e-01 3.12873058e+03 +5.85600000e-04 -1.65360702e-12 7.09302392e-02 5.55523387e-02 9.19047472e-02 6.10925750e-02 2.32272211e-03 7.18197378e-01 3.12873058e+03 +5.85700000e-04 -1.65360702e-12 7.09302351e-02 5.55523313e-02 9.19047519e-02 6.10925825e-02 2.32272127e-03 7.18197378e-01 3.12873058e+03 +5.85800000e-04 -1.65360702e-12 7.09302311e-02 5.55523240e-02 9.19047565e-02 6.10925900e-02 2.32272043e-03 7.18197378e-01 3.12873058e+03 +5.85900000e-04 -1.65360702e-12 7.09302271e-02 5.55523168e-02 9.19047612e-02 6.10925975e-02 2.32271959e-03 7.18197378e-01 3.12873058e+03 +5.86000000e-04 -1.65360702e-12 7.09302231e-02 5.55523095e-02 9.19047658e-02 6.10926050e-02 2.32271875e-03 7.18197378e-01 3.12873058e+03 +5.86100000e-04 -1.65360702e-12 7.09302192e-02 5.55523022e-02 9.19047704e-02 6.10926124e-02 2.32271792e-03 7.18197378e-01 3.12873058e+03 +5.86200000e-04 -1.65360702e-12 7.09302152e-02 5.55522950e-02 9.19047750e-02 6.10926198e-02 2.32271709e-03 7.18197378e-01 3.12873058e+03 +5.86300000e-04 -1.65360702e-12 7.09302112e-02 5.55522878e-02 9.19047796e-02 6.10926273e-02 2.32271626e-03 7.18197378e-01 3.12873058e+03 +5.86400000e-04 -1.65360702e-12 7.09302073e-02 5.55522806e-02 9.19047842e-02 6.10926346e-02 2.32271543e-03 7.18197378e-01 3.12873058e+03 +5.86500000e-04 -1.65360702e-12 7.09302033e-02 5.55522734e-02 9.19047888e-02 6.10926420e-02 2.32271461e-03 7.18197378e-01 3.12873058e+03 +5.86600000e-04 -1.65360702e-12 7.09301994e-02 5.55522663e-02 9.19047933e-02 6.10926494e-02 2.32271378e-03 7.18197378e-01 3.12873058e+03 +5.86700000e-04 -1.65360702e-12 7.09301955e-02 5.55522591e-02 9.19047979e-02 6.10926567e-02 2.32271296e-03 7.18197378e-01 3.12873058e+03 +5.86800000e-04 -1.65360702e-12 7.09301916e-02 5.55522520e-02 9.19048024e-02 6.10926640e-02 2.32271214e-03 7.18197378e-01 3.12873058e+03 +5.86900000e-04 -1.65360702e-12 7.09301877e-02 5.55522449e-02 9.19048069e-02 6.10926713e-02 2.32271133e-03 7.18197378e-01 3.12873058e+03 +5.87000000e-04 -1.65360702e-12 7.09301838e-02 5.55522378e-02 9.19048114e-02 6.10926786e-02 2.32271051e-03 7.18197378e-01 3.12873058e+03 +5.87100000e-04 -1.65360702e-12 7.09301799e-02 5.55522308e-02 9.19048159e-02 6.10926859e-02 2.32270970e-03 7.18197378e-01 3.12873058e+03 +5.87200000e-04 -1.65360702e-12 7.09301760e-02 5.55522237e-02 9.19048204e-02 6.10926931e-02 2.32270889e-03 7.18197378e-01 3.12873058e+03 +5.87300000e-04 -1.65360702e-12 7.09301722e-02 5.55522167e-02 9.19048249e-02 6.10927003e-02 2.32270808e-03 7.18197378e-01 3.12873058e+03 +5.87400000e-04 -1.65360702e-12 7.09301683e-02 5.55522097e-02 9.19048293e-02 6.10927075e-02 2.32270728e-03 7.18197378e-01 3.12873213e+03 +5.87500000e-04 -1.65360702e-12 7.09301645e-02 5.55522027e-02 9.19048338e-02 6.10927147e-02 2.32270647e-03 7.18197378e-01 3.12873213e+03 +5.87600000e-04 -1.65360702e-12 7.09301606e-02 5.55521957e-02 9.19048382e-02 6.10927219e-02 2.32270567e-03 7.18197378e-01 3.12873213e+03 +5.87700000e-04 -1.65360702e-12 7.09301568e-02 5.55521888e-02 9.19048426e-02 6.10927291e-02 2.32270487e-03 7.18197378e-01 3.12873213e+03 +5.87800000e-04 -1.65360702e-12 7.09301530e-02 5.55521818e-02 9.19048471e-02 6.10927362e-02 2.32270407e-03 7.18197378e-01 3.12873213e+03 +5.87900000e-04 -1.65360702e-12 7.09301492e-02 5.55521749e-02 9.19048515e-02 6.10927433e-02 2.32270327e-03 7.18197378e-01 3.12873213e+03 +5.88000000e-04 -1.65360702e-12 7.09301454e-02 5.55521680e-02 9.19048559e-02 6.10927504e-02 2.32270248e-03 7.18197378e-01 3.12873213e+03 +5.88100000e-04 -1.65360702e-12 7.09301416e-02 5.55521611e-02 9.19048602e-02 6.10927575e-02 2.32270169e-03 7.18197378e-01 3.12873213e+03 +5.88200000e-04 -1.65360702e-12 7.09301379e-02 5.55521542e-02 9.19048646e-02 6.10927645e-02 2.32270090e-03 7.18197378e-01 3.12873213e+03 +5.88300000e-04 -1.65360702e-12 7.09301341e-02 5.55521474e-02 9.19048690e-02 6.10927716e-02 2.32270011e-03 7.18197378e-01 3.12873213e+03 +5.88400000e-04 -1.65360702e-12 7.09301303e-02 5.55521406e-02 9.19048733e-02 6.10927786e-02 2.32269932e-03 7.18197378e-01 3.12873213e+03 +5.88500000e-04 -1.65360702e-12 7.09301266e-02 5.55521337e-02 9.19048777e-02 6.10927856e-02 2.32269854e-03 7.18197378e-01 3.12873213e+03 +5.88600000e-04 -1.65360702e-12 7.09301229e-02 5.55521269e-02 9.19048820e-02 6.10927926e-02 2.32269776e-03 7.18197378e-01 3.12873213e+03 +5.88700000e-04 -1.65360702e-12 7.09301191e-02 5.55521202e-02 9.19048863e-02 6.10927996e-02 2.32269698e-03 7.18197378e-01 3.12873213e+03 +5.88800000e-04 -1.65360702e-12 7.09301154e-02 5.55521134e-02 9.19048906e-02 6.10928065e-02 2.32269620e-03 7.18197378e-01 3.12873213e+03 +5.88900000e-04 -1.65360702e-12 7.09301117e-02 5.55521066e-02 9.19048949e-02 6.10928134e-02 2.32269543e-03 7.18197378e-01 3.12873213e+03 +5.89000000e-04 -1.65360702e-12 7.09301080e-02 5.55520999e-02 9.19048992e-02 6.10928204e-02 2.32269465e-03 7.18197378e-01 3.12873213e+03 +5.89100000e-04 -1.65360702e-12 7.09301043e-02 5.55520932e-02 9.19049035e-02 6.10928273e-02 2.32269388e-03 7.18197378e-01 3.12873213e+03 +5.89200000e-04 -1.65360702e-12 7.09301007e-02 5.55520865e-02 9.19049077e-02 6.10928341e-02 2.32269311e-03 7.18197378e-01 3.12873213e+03 +5.89300000e-04 -1.65360702e-12 7.09300970e-02 5.55520798e-02 9.19049120e-02 6.10928410e-02 2.32269234e-03 7.18197378e-01 3.12873213e+03 +5.89400000e-04 -1.65360702e-12 7.09300933e-02 5.55520732e-02 9.19049162e-02 6.10928479e-02 2.32269158e-03 7.18197378e-01 3.12873213e+03 +5.89500000e-04 -1.65360702e-12 7.09300897e-02 5.55520665e-02 9.19049204e-02 6.10928547e-02 2.32269081e-03 7.18197378e-01 3.12873213e+03 +5.89600000e-04 -1.65360702e-12 7.09300861e-02 5.55520599e-02 9.19049247e-02 6.10928615e-02 2.32269005e-03 7.18197378e-01 3.12873213e+03 +5.89700000e-04 -1.65360702e-12 7.09300824e-02 5.55520533e-02 9.19049289e-02 6.10928683e-02 2.32268929e-03 7.18197378e-01 3.12873213e+03 +5.89800000e-04 -1.65360702e-12 7.09300788e-02 5.55520467e-02 9.19049331e-02 6.10928751e-02 2.32268853e-03 7.18197378e-01 3.12873213e+03 +5.89900000e-04 -1.65360702e-12 7.09300752e-02 5.55520401e-02 9.19049372e-02 6.10928818e-02 2.32268777e-03 7.18197378e-01 3.12873213e+03 +5.90000000e-04 -1.65360702e-12 7.09300716e-02 5.55520336e-02 9.19049414e-02 6.10928886e-02 2.32268702e-03 7.18197378e-01 3.12873213e+03 +5.90100000e-04 -1.65360702e-12 7.09300680e-02 5.55520270e-02 9.19049456e-02 6.10928953e-02 2.32268627e-03 7.18197378e-01 3.12873213e+03 +5.90200000e-04 -1.65360702e-12 7.09300644e-02 5.55520205e-02 9.19049497e-02 6.10929020e-02 2.32268552e-03 7.18197378e-01 3.12873213e+03 +5.90300000e-04 -1.65360702e-12 7.09300608e-02 5.55520140e-02 9.19049539e-02 6.10929087e-02 2.32268477e-03 7.18197378e-01 3.12873213e+03 +5.90400000e-04 -1.65360702e-12 7.09300573e-02 5.55520075e-02 9.19049580e-02 6.10929154e-02 2.32268402e-03 7.18197378e-01 3.12873213e+03 +5.90500000e-04 -1.65360702e-12 7.09300537e-02 5.55520010e-02 9.19049621e-02 6.10929220e-02 2.32268328e-03 7.18197378e-01 3.12873213e+03 +5.90600000e-04 -1.65360702e-12 7.09300502e-02 5.55519946e-02 9.19049662e-02 6.10929286e-02 2.32268253e-03 7.18197378e-01 3.12873213e+03 +5.90700000e-04 -1.65360702e-12 7.09300466e-02 5.55519881e-02 9.19049703e-02 6.10929353e-02 2.32268179e-03 7.18197378e-01 3.12873213e+03 +5.90800000e-04 -1.65360702e-12 7.09300431e-02 5.55519817e-02 9.19049744e-02 6.10929419e-02 2.32268105e-03 7.18197378e-01 3.12873213e+03 +5.90900000e-04 -1.65360702e-12 7.09300396e-02 5.55519753e-02 9.19049785e-02 6.10929485e-02 2.32268032e-03 7.18197378e-01 3.12873354e+03 +5.91000000e-04 -1.65360702e-12 7.09300361e-02 5.55519689e-02 9.19049826e-02 6.10929550e-02 2.32267958e-03 7.18197378e-01 3.12873354e+03 +5.91100000e-04 -1.65360702e-12 7.09300326e-02 5.55519625e-02 9.19049866e-02 6.10929616e-02 2.32267885e-03 7.18197378e-01 3.12873354e+03 +5.91200000e-04 -1.65360702e-12 7.09300291e-02 5.55519562e-02 9.19049907e-02 6.10929681e-02 2.32267812e-03 7.18197378e-01 3.12873354e+03 +5.91300000e-04 -1.65360702e-12 7.09300256e-02 5.55519498e-02 9.19049947e-02 6.10929746e-02 2.32267739e-03 7.18197378e-01 3.12873354e+03 +5.91400000e-04 -1.65360702e-12 7.09300221e-02 5.55519435e-02 9.19049987e-02 6.10929811e-02 2.32267666e-03 7.18197378e-01 3.12873354e+03 +5.91500000e-04 -1.65360702e-12 7.09300186e-02 5.55519372e-02 9.19050028e-02 6.10929876e-02 2.32267593e-03 7.18197378e-01 3.12873354e+03 +5.91600000e-04 -1.65360702e-12 7.09300152e-02 5.55519309e-02 9.19050068e-02 6.10929941e-02 2.32267521e-03 7.18197378e-01 3.12873354e+03 +5.91700000e-04 -1.65360702e-12 7.09300117e-02 5.55519246e-02 9.19050108e-02 6.10930006e-02 2.32267449e-03 7.18197378e-01 3.12873354e+03 +5.91800000e-04 -1.65360702e-12 7.09300083e-02 5.55519183e-02 9.19050148e-02 6.10930070e-02 2.32267377e-03 7.18197378e-01 3.12873354e+03 +5.91900000e-04 -1.65360702e-12 7.09300049e-02 5.55519121e-02 9.19050187e-02 6.10930134e-02 2.32267305e-03 7.18197378e-01 3.12873354e+03 +5.92000000e-04 -1.65360702e-12 7.09300014e-02 5.55519059e-02 9.19050227e-02 6.10930198e-02 2.32267233e-03 7.18197378e-01 3.12873354e+03 +5.92100000e-04 -1.65360702e-12 7.09299980e-02 5.55518996e-02 9.19050267e-02 6.10930262e-02 2.32267162e-03 7.18197378e-01 3.12873354e+03 +5.92200000e-04 -1.65360702e-12 7.09299946e-02 5.55518934e-02 9.19050306e-02 6.10930326e-02 2.32267090e-03 7.18197378e-01 3.12873354e+03 +5.92300000e-04 -1.65360702e-12 7.09299912e-02 5.55518873e-02 9.19050345e-02 6.10930389e-02 2.32267019e-03 7.18197378e-01 3.12873354e+03 +5.92400000e-04 -1.65360702e-12 7.09299878e-02 5.55518811e-02 9.19050385e-02 6.10930453e-02 2.32266948e-03 7.18197378e-01 3.12873354e+03 +5.92500000e-04 -1.65360702e-12 7.09299845e-02 5.55518749e-02 9.19050424e-02 6.10930516e-02 2.32266878e-03 7.18197378e-01 3.12873354e+03 +5.92600000e-04 -1.65360702e-12 7.09299811e-02 5.55518688e-02 9.19050463e-02 6.10930579e-02 2.32266807e-03 7.18197378e-01 3.12873354e+03 +5.92700000e-04 -1.65360702e-12 7.09299777e-02 5.55518627e-02 9.19050502e-02 6.10930642e-02 2.32266737e-03 7.18197378e-01 3.12873354e+03 +5.92800000e-04 -1.65360702e-12 7.09299744e-02 5.55518566e-02 9.19050541e-02 6.10930705e-02 2.32266667e-03 7.18197378e-01 3.12873354e+03 +5.92900000e-04 -1.65360702e-12 7.09299710e-02 5.55518505e-02 9.19050579e-02 6.10930767e-02 2.32266596e-03 7.18197378e-01 3.12873354e+03 +5.93000000e-04 -1.65360702e-12 7.09299677e-02 5.55518444e-02 9.19050618e-02 6.10930830e-02 2.32266527e-03 7.18197378e-01 3.12873354e+03 +5.93100000e-04 -1.65360702e-12 7.09299644e-02 5.55518384e-02 9.19050657e-02 6.10930892e-02 2.32266457e-03 7.18197378e-01 3.12873354e+03 +5.93200000e-04 -1.65360702e-12 7.09299610e-02 5.55518323e-02 9.19050695e-02 6.10930954e-02 2.32266387e-03 7.18197378e-01 3.12873354e+03 +5.93300000e-04 -1.65360702e-12 7.09299577e-02 5.55518263e-02 9.19050733e-02 6.10931016e-02 2.32266318e-03 7.18197378e-01 3.12873354e+03 +5.93400000e-04 -1.65360702e-12 7.09299544e-02 5.55518203e-02 9.19050772e-02 6.10931078e-02 2.32266249e-03 7.18197378e-01 3.12873354e+03 +5.93500000e-04 -1.65360702e-12 7.09299511e-02 5.55518143e-02 9.19050810e-02 6.10931139e-02 2.32266180e-03 7.18197378e-01 3.12873354e+03 +5.93600000e-04 -1.65360702e-12 7.09299479e-02 5.55518083e-02 9.19050848e-02 6.10931201e-02 2.32266111e-03 7.18197378e-01 3.12873354e+03 +5.93700000e-04 -1.65360702e-12 7.09299446e-02 5.55518023e-02 9.19050886e-02 6.10931262e-02 2.32266043e-03 7.18197378e-01 3.12873354e+03 +5.93800000e-04 -1.65360702e-12 7.09299413e-02 5.55517964e-02 9.19050924e-02 6.10931323e-02 2.32265974e-03 7.18197378e-01 3.12873354e+03 +5.93900000e-04 -1.65360702e-12 7.09299381e-02 5.55517905e-02 9.19050961e-02 6.10931384e-02 2.32265906e-03 7.18197378e-01 3.12873354e+03 +5.94000000e-04 -1.65360702e-12 7.09299348e-02 5.55517845e-02 9.19050999e-02 6.10931445e-02 2.32265838e-03 7.18197378e-01 3.12873354e+03 +5.94100000e-04 -1.65360702e-12 7.09299316e-02 5.55517786e-02 9.19051037e-02 6.10931506e-02 2.32265770e-03 7.18197378e-01 3.12873354e+03 +5.94200000e-04 -1.65360702e-12 7.09299283e-02 5.55517727e-02 9.19051074e-02 6.10931566e-02 2.32265702e-03 7.18197378e-01 3.12873354e+03 +5.94300000e-04 -1.65360702e-12 7.09299251e-02 5.55517669e-02 9.19051112e-02 6.10931627e-02 2.32265635e-03 7.18197378e-01 3.12873354e+03 +5.94400000e-04 -1.65360702e-12 7.09299219e-02 5.55517610e-02 9.19051149e-02 6.10931687e-02 2.32265567e-03 7.18197378e-01 3.12873483e+03 +5.94500000e-04 -1.65360702e-12 7.09299187e-02 5.55517552e-02 9.19051186e-02 6.10931747e-02 2.32265500e-03 7.18197378e-01 3.12873483e+03 +5.94600000e-04 -1.65360702e-12 7.09299155e-02 5.55517493e-02 9.19051223e-02 6.10931807e-02 2.32265433e-03 7.18197378e-01 3.12873483e+03 +5.94700000e-04 -1.65360702e-12 7.09299123e-02 5.55517435e-02 9.19051260e-02 6.10931867e-02 2.32265366e-03 7.18197378e-01 3.12873483e+03 +5.94800000e-04 -1.65360702e-12 7.09299091e-02 5.55517377e-02 9.19051297e-02 6.10931926e-02 2.32265299e-03 7.18197378e-01 3.12873483e+03 +5.94900000e-04 -1.65360702e-12 7.09299059e-02 5.55517319e-02 9.19051334e-02 6.10931986e-02 2.32265233e-03 7.18197378e-01 3.12873483e+03 +5.95000000e-04 -1.65360702e-12 7.09299027e-02 5.55517262e-02 9.19051371e-02 6.10932045e-02 2.32265167e-03 7.18197378e-01 3.12873483e+03 +5.95100000e-04 -1.65360702e-12 7.09298996e-02 5.55517204e-02 9.19051407e-02 6.10932104e-02 2.32265100e-03 7.18197378e-01 3.12873483e+03 +5.95200000e-04 -1.65360702e-12 7.09298964e-02 5.55517147e-02 9.19051444e-02 6.10932163e-02 2.32265034e-03 7.18197378e-01 3.12873483e+03 +5.95300000e-04 -1.65360702e-12 7.09298933e-02 5.55517090e-02 9.19051480e-02 6.10932222e-02 2.32264969e-03 7.18197378e-01 3.12873483e+03 +5.95400000e-04 -1.65360702e-12 7.09298901e-02 5.55517032e-02 9.19051517e-02 6.10932281e-02 2.32264903e-03 7.18197378e-01 3.12873483e+03 +5.95500000e-04 -1.65360702e-12 7.09298870e-02 5.55516975e-02 9.19051553e-02 6.10932339e-02 2.32264837e-03 7.18197378e-01 3.12873483e+03 +5.95600000e-04 -1.65360702e-12 7.09298839e-02 5.55516919e-02 9.19051589e-02 6.10932398e-02 2.32264772e-03 7.18197378e-01 3.12873483e+03 +5.95700000e-04 -1.65360702e-12 7.09298808e-02 5.55516862e-02 9.19051625e-02 6.10932456e-02 2.32264707e-03 7.18197378e-01 3.12873483e+03 +5.95800000e-04 -1.65360702e-12 7.09298777e-02 5.55516805e-02 9.19051661e-02 6.10932514e-02 2.32264642e-03 7.18197378e-01 3.12873483e+03 +5.95900000e-04 -1.65360702e-12 7.09298746e-02 5.55516749e-02 9.19051697e-02 6.10932572e-02 2.32264577e-03 7.18197378e-01 3.12873483e+03 +5.96000000e-04 -1.65360702e-12 7.09298715e-02 5.55516693e-02 9.19051733e-02 6.10932630e-02 2.32264512e-03 7.18197378e-01 3.12873483e+03 +5.96100000e-04 -1.65360702e-12 7.09298684e-02 5.55516637e-02 9.19051768e-02 6.10932687e-02 2.32264448e-03 7.18197378e-01 3.12873483e+03 +5.96200000e-04 -1.65360702e-12 7.09298653e-02 5.55516581e-02 9.19051804e-02 6.10932745e-02 2.32264383e-03 7.18197378e-01 3.12873483e+03 +5.96300000e-04 -1.65360702e-12 7.09298623e-02 5.55516525e-02 9.19051840e-02 6.10932802e-02 2.32264319e-03 7.18197378e-01 3.12873483e+03 +5.96400000e-04 -1.65360702e-12 7.09298592e-02 5.55516469e-02 9.19051875e-02 6.10932860e-02 2.32264255e-03 7.18197378e-01 3.12873483e+03 +5.96500000e-04 -1.65360702e-12 7.09298562e-02 5.55516414e-02 9.19051910e-02 6.10932917e-02 2.32264191e-03 7.18197378e-01 3.12873483e+03 +5.96600000e-04 -1.65360702e-12 7.09298531e-02 5.55516358e-02 9.19051946e-02 6.10932974e-02 2.32264128e-03 7.18197378e-01 3.12873483e+03 +5.96700000e-04 -1.65360702e-12 7.09298501e-02 5.55516303e-02 9.19051981e-02 6.10933030e-02 2.32264064e-03 7.18197378e-01 3.12873483e+03 +5.96800000e-04 -1.65360702e-12 7.09298471e-02 5.55516248e-02 9.19052016e-02 6.10933087e-02 2.32264001e-03 7.18197378e-01 3.12873483e+03 +5.96900000e-04 -1.65360702e-12 7.09298440e-02 5.55516193e-02 9.19052051e-02 6.10933143e-02 2.32263938e-03 7.18197378e-01 3.12873483e+03 +5.97000000e-04 -1.65360702e-12 7.09298410e-02 5.55516138e-02 9.19052086e-02 6.10933200e-02 2.32263875e-03 7.18197378e-01 3.12873483e+03 +5.97100000e-04 -1.65360702e-12 7.09298380e-02 5.55516084e-02 9.19052120e-02 6.10933256e-02 2.32263812e-03 7.18197378e-01 3.12873483e+03 +5.97200000e-04 -1.65360702e-12 7.09298350e-02 5.55516029e-02 9.19052155e-02 6.10933312e-02 2.32263749e-03 7.18197378e-01 3.12873483e+03 +5.97300000e-04 -1.65360702e-12 7.09298320e-02 5.55515975e-02 9.19052190e-02 6.10933368e-02 2.32263686e-03 7.18197378e-01 3.12873483e+03 +5.97400000e-04 -1.65360702e-12 7.09298291e-02 5.55515920e-02 9.19052224e-02 6.10933424e-02 2.32263624e-03 7.18197378e-01 3.12873483e+03 +5.97500000e-04 -1.65360702e-12 7.09298261e-02 5.55515866e-02 9.19052259e-02 6.10933479e-02 2.32263562e-03 7.18197378e-01 3.12873483e+03 +5.97600000e-04 -1.65360702e-12 7.09298231e-02 5.55515812e-02 9.19052293e-02 6.10933535e-02 2.32263500e-03 7.18197378e-01 3.12873483e+03 +5.97700000e-04 -1.65360702e-12 7.09298202e-02 5.55515759e-02 9.19052327e-02 6.10933590e-02 2.32263438e-03 7.18197378e-01 3.12873483e+03 +5.97800000e-04 -1.65360702e-12 7.09298172e-02 5.55515705e-02 9.19052362e-02 6.10933645e-02 2.32263376e-03 7.18197378e-01 3.12873483e+03 +5.97900000e-04 -1.65360702e-12 7.09298143e-02 5.55515651e-02 9.19052396e-02 6.10933700e-02 2.32263314e-03 7.18197378e-01 3.12873602e+03 +5.98000000e-04 -1.65360702e-12 7.09298113e-02 5.55515598e-02 9.19052430e-02 6.10933755e-02 2.32263253e-03 7.18197378e-01 3.12873602e+03 +5.98100000e-04 -1.65360702e-12 7.09298084e-02 5.55515545e-02 9.19052464e-02 6.10933810e-02 2.32263192e-03 7.18197378e-01 3.12873602e+03 +5.98200000e-04 -1.65360702e-12 7.09298055e-02 5.55515491e-02 9.19052497e-02 6.10933865e-02 2.32263131e-03 7.18197378e-01 3.12873602e+03 +5.98300000e-04 -1.65360702e-12 7.09298026e-02 5.55515438e-02 9.19052531e-02 6.10933919e-02 2.32263070e-03 7.18197378e-01 3.12873602e+03 +5.98400000e-04 -1.65360702e-12 7.09297997e-02 5.55515386e-02 9.19052565e-02 6.10933973e-02 2.32263009e-03 7.18197378e-01 3.12873602e+03 +5.98500000e-04 -1.65360702e-12 7.09297968e-02 5.55515333e-02 9.19052598e-02 6.10934028e-02 2.32262948e-03 7.18197378e-01 3.12873602e+03 +5.98600000e-04 -1.65360702e-12 7.09297939e-02 5.55515280e-02 9.19052632e-02 6.10934082e-02 2.32262888e-03 7.18197378e-01 3.12873602e+03 +5.98700000e-04 -1.65360702e-12 7.09297910e-02 5.55515228e-02 9.19052665e-02 6.10934136e-02 2.32262827e-03 7.18197378e-01 3.12873602e+03 +5.98800000e-04 -1.65360702e-12 7.09297881e-02 5.55515175e-02 9.19052699e-02 6.10934190e-02 2.32262767e-03 7.18197378e-01 3.12873602e+03 +5.98900000e-04 -1.65360702e-12 7.09297853e-02 5.55515123e-02 9.19052732e-02 6.10934243e-02 2.32262707e-03 7.18197378e-01 3.12873602e+03 +5.99000000e-04 -1.65360702e-12 7.09297824e-02 5.55515071e-02 9.19052765e-02 6.10934297e-02 2.32262647e-03 7.18197378e-01 3.12873602e+03 +5.99100000e-04 -1.65360702e-12 7.09297796e-02 5.55515019e-02 9.19052798e-02 6.10934350e-02 2.32262587e-03 7.18197378e-01 3.12873602e+03 +5.99200000e-04 -1.65360702e-12 7.09297767e-02 5.55514967e-02 9.19052831e-02 6.10934403e-02 2.32262528e-03 7.18197378e-01 3.12873602e+03 +5.99300000e-04 -1.65360702e-12 7.09297739e-02 5.55514916e-02 9.19052864e-02 6.10934456e-02 2.32262468e-03 7.18197378e-01 3.12873602e+03 +5.99400000e-04 -1.65360702e-12 7.09297710e-02 5.55514864e-02 9.19052897e-02 6.10934509e-02 2.32262409e-03 7.18197378e-01 3.12873602e+03 +5.99500000e-04 -1.65360702e-12 7.09297682e-02 5.55514813e-02 9.19052929e-02 6.10934562e-02 2.32262350e-03 7.18197378e-01 3.12873602e+03 +5.99600000e-04 -1.65360702e-12 7.09297654e-02 5.55514761e-02 9.19052962e-02 6.10934615e-02 2.32262291e-03 7.18197378e-01 3.12873602e+03 +5.99700000e-04 -1.65360702e-12 7.09297626e-02 5.55514710e-02 9.19052995e-02 6.10934668e-02 2.32262232e-03 7.18197378e-01 3.12873602e+03 +5.99800000e-04 -1.65360702e-12 7.09297598e-02 5.55514659e-02 9.19053027e-02 6.10934720e-02 2.32262173e-03 7.18197378e-01 3.12873602e+03 +5.99900000e-04 -1.65360702e-12 7.09297570e-02 5.55514608e-02 9.19053059e-02 6.10934772e-02 2.32262115e-03 7.18197378e-01 3.12873602e+03 +6.00000000e-04 -1.65360702e-12 7.09297542e-02 5.55514558e-02 9.19053092e-02 6.10934824e-02 2.32262057e-03 7.18197378e-01 3.12873602e+03 +6.00100000e-04 -1.65360702e-12 7.09297514e-02 5.55514507e-02 9.19053124e-02 6.10934876e-02 2.32261998e-03 7.18197378e-01 3.12873602e+03 +6.00200000e-04 -1.65360702e-12 7.09297487e-02 5.55514457e-02 9.19053156e-02 6.10934928e-02 2.32261940e-03 7.18197378e-01 3.12873602e+03 +6.00300000e-04 -1.65360702e-12 7.09297459e-02 5.55514406e-02 9.19053188e-02 6.10934980e-02 2.32261882e-03 7.18197378e-01 3.12873602e+03 +6.00400000e-04 -1.65360702e-12 7.09297431e-02 5.55514356e-02 9.19053220e-02 6.10935032e-02 2.32261825e-03 7.18197378e-01 3.12873602e+03 +6.00500000e-04 -1.65360702e-12 7.09297404e-02 5.55514306e-02 9.19053252e-02 6.10935083e-02 2.32261767e-03 7.18197378e-01 3.12873602e+03 +6.00600000e-04 -1.65360702e-12 7.09297376e-02 5.55514256e-02 9.19053284e-02 6.10935135e-02 2.32261709e-03 7.18197378e-01 3.12873602e+03 +6.00700000e-04 -1.65360702e-12 7.09297349e-02 5.55514206e-02 9.19053315e-02 6.10935186e-02 2.32261652e-03 7.18197378e-01 3.12873602e+03 +6.00800000e-04 -1.65360702e-12 7.09297322e-02 5.55514156e-02 9.19053347e-02 6.10935237e-02 2.32261595e-03 7.18197378e-01 3.12873602e+03 +6.00900000e-04 -1.65360702e-12 7.09297294e-02 5.55514107e-02 9.19053379e-02 6.10935288e-02 2.32261538e-03 7.18197378e-01 3.12873602e+03 +6.01000000e-04 -1.65360702e-12 7.09297267e-02 5.55514057e-02 9.19053410e-02 6.10935339e-02 2.32261481e-03 7.18197378e-01 3.12873602e+03 +6.01100000e-04 -1.65360702e-12 7.09297240e-02 5.55514008e-02 9.19053442e-02 6.10935390e-02 2.32261424e-03 7.18197378e-01 3.12873602e+03 +6.01200000e-04 -1.65360702e-12 7.09297213e-02 5.55513959e-02 9.19053473e-02 6.10935440e-02 2.32261368e-03 7.18197378e-01 3.12873602e+03 +6.01300000e-04 -1.65360702e-12 7.09297186e-02 5.55513910e-02 9.19053504e-02 6.10935491e-02 2.32261311e-03 7.18197378e-01 3.12873602e+03 +6.01400000e-04 -1.65360702e-12 7.09297159e-02 5.55513861e-02 9.19053535e-02 6.10935541e-02 2.32261255e-03 7.18197378e-01 3.12873710e+03 +6.01500000e-04 -1.65360702e-12 7.09297132e-02 5.55513812e-02 9.19053566e-02 6.10935591e-02 2.32261199e-03 7.18197378e-01 3.12873710e+03 +6.01600000e-04 -1.65360702e-12 7.09297106e-02 5.55513763e-02 9.19053597e-02 6.10935641e-02 2.32261143e-03 7.18197378e-01 3.12873710e+03 +6.01700000e-04 -1.65360702e-12 7.09297079e-02 5.55513714e-02 9.19053628e-02 6.10935691e-02 2.32261087e-03 7.18197378e-01 3.12873710e+03 +6.01800000e-04 -1.65360702e-12 7.09297052e-02 5.55513666e-02 9.19053659e-02 6.10935741e-02 2.32261031e-03 7.18197378e-01 3.12873710e+03 +6.01900000e-04 -1.65360702e-12 7.09297026e-02 5.55513618e-02 9.19053690e-02 6.10935791e-02 2.32260975e-03 7.18197378e-01 3.12873710e+03 +6.02000000e-04 -1.65360702e-12 7.09296999e-02 5.55513569e-02 9.19053721e-02 6.10935840e-02 2.32260920e-03 7.18197378e-01 3.12873710e+03 +6.02100000e-04 -1.65360702e-12 7.09296973e-02 5.55513521e-02 9.19053751e-02 6.10935890e-02 2.32260865e-03 7.18197378e-01 3.12873710e+03 +6.02200000e-04 -1.65360702e-12 7.09296947e-02 5.55513473e-02 9.19053782e-02 6.10935939e-02 2.32260809e-03 7.18197378e-01 3.12873710e+03 +6.02300000e-04 -1.65360702e-12 7.09296920e-02 5.55513425e-02 9.19053812e-02 6.10935988e-02 2.32260754e-03 7.18197378e-01 3.12873710e+03 +6.02400000e-04 -1.65360702e-12 7.09296894e-02 5.55513378e-02 9.19053843e-02 6.10936037e-02 2.32260700e-03 7.18197378e-01 3.12873710e+03 +6.02500000e-04 -1.65360702e-12 7.09296868e-02 5.55513330e-02 9.19053873e-02 6.10936086e-02 2.32260645e-03 7.18197378e-01 3.12873710e+03 +6.02600000e-04 -1.65360702e-12 7.09296842e-02 5.55513283e-02 9.19053903e-02 6.10936135e-02 2.32260590e-03 7.18197378e-01 3.12873710e+03 +6.02700000e-04 -1.65360702e-12 7.09296816e-02 5.55513235e-02 9.19053933e-02 6.10936184e-02 2.32260536e-03 7.18197378e-01 3.12873710e+03 +6.02800000e-04 -1.65360702e-12 7.09296790e-02 5.55513188e-02 9.19053963e-02 6.10936232e-02 2.32260481e-03 7.18197378e-01 3.12873710e+03 +6.02900000e-04 -1.65360702e-12 7.09296764e-02 5.55513141e-02 9.19053993e-02 6.10936281e-02 2.32260427e-03 7.18197378e-01 3.12873710e+03 +6.03000000e-04 -1.65360702e-12 7.09296738e-02 5.55513094e-02 9.19054023e-02 6.10936329e-02 2.32260373e-03 7.18197378e-01 3.12873710e+03 +6.03100000e-04 -1.65360702e-12 7.09296712e-02 5.55513047e-02 9.19054053e-02 6.10936377e-02 2.32260319e-03 7.18197378e-01 3.12873710e+03 +6.03200000e-04 -1.65360702e-12 7.09296687e-02 5.55513000e-02 9.19054083e-02 6.10936425e-02 2.32260265e-03 7.18197378e-01 3.12873710e+03 +6.03300000e-04 -1.65360702e-12 7.09296661e-02 5.55512954e-02 9.19054113e-02 6.10936473e-02 2.32260212e-03 7.18197378e-01 3.12873710e+03 +6.03400000e-04 -1.65360702e-12 7.09296636e-02 5.55512907e-02 9.19054142e-02 6.10936521e-02 2.32260158e-03 7.18197378e-01 3.12873710e+03 +6.03500000e-04 -1.65360702e-12 7.09296610e-02 5.55512861e-02 9.19054172e-02 6.10936569e-02 2.32260105e-03 7.18197378e-01 3.12873710e+03 +6.03600000e-04 -1.65360702e-12 7.09296585e-02 5.55512814e-02 9.19054201e-02 6.10936616e-02 2.32260052e-03 7.18197378e-01 3.12873710e+03 +6.03700000e-04 -1.65360702e-12 7.09296559e-02 5.55512768e-02 9.19054230e-02 6.10936664e-02 2.32259999e-03 7.18197378e-01 3.12873710e+03 +6.03800000e-04 -1.65360702e-12 7.09296534e-02 5.55512722e-02 9.19054260e-02 6.10936711e-02 2.32259946e-03 7.18197378e-01 3.12873710e+03 +6.03900000e-04 -1.65360702e-12 7.09296509e-02 5.55512676e-02 9.19054289e-02 6.10936758e-02 2.32259893e-03 7.18197378e-01 3.12873710e+03 +6.04000000e-04 -1.65360702e-12 7.09296484e-02 5.55512631e-02 9.19054318e-02 6.10936805e-02 2.32259840e-03 7.18197378e-01 3.12873710e+03 +6.04100000e-04 -1.65360702e-12 7.09296458e-02 5.55512585e-02 9.19054347e-02 6.10936852e-02 2.32259788e-03 7.18197378e-01 3.12873710e+03 +6.04200000e-04 -1.65360702e-12 7.09296433e-02 5.55512539e-02 9.19054376e-02 6.10936899e-02 2.32259735e-03 7.18197378e-01 3.12873710e+03 +6.04300000e-04 -1.65360702e-12 7.09296408e-02 5.55512494e-02 9.19054405e-02 6.10936946e-02 2.32259683e-03 7.18197378e-01 3.12873710e+03 +6.04400000e-04 -1.65360702e-12 7.09296384e-02 5.55512448e-02 9.19054434e-02 6.10936992e-02 2.32259631e-03 7.18197378e-01 3.12873710e+03 +6.04500000e-04 -1.65360702e-12 7.09296359e-02 5.55512403e-02 9.19054463e-02 6.10937039e-02 2.32259579e-03 7.18197378e-01 3.12873710e+03 +6.04600000e-04 -1.65360702e-12 7.09296334e-02 5.55512358e-02 9.19054492e-02 6.10937085e-02 2.32259527e-03 7.18197378e-01 3.12873710e+03 +6.04700000e-04 -1.65360702e-12 7.09296309e-02 5.55512313e-02 9.19054520e-02 6.10937131e-02 2.32259475e-03 7.18197378e-01 3.12873710e+03 +6.04800000e-04 -1.65360702e-12 7.09296285e-02 5.55512268e-02 9.19054549e-02 6.10937178e-02 2.32259423e-03 7.18197378e-01 3.12873856e+03 +6.04900000e-04 -1.65360702e-12 7.09296260e-02 5.55512223e-02 9.19054577e-02 6.10937224e-02 2.32259372e-03 7.18197378e-01 3.12873856e+03 +6.05000000e-04 -1.65360702e-12 7.09296235e-02 5.55512179e-02 9.19054606e-02 6.10937269e-02 2.32259321e-03 7.18197378e-01 3.12873856e+03 +6.05100000e-04 -1.65360702e-12 7.09296211e-02 5.55512134e-02 9.19054634e-02 6.10937315e-02 2.32259269e-03 7.18197378e-01 3.12873856e+03 +6.05200000e-04 -1.65360702e-12 7.09296187e-02 5.55512090e-02 9.19054662e-02 6.10937361e-02 2.32259218e-03 7.18197378e-01 3.12873856e+03 +6.05300000e-04 -1.65360702e-12 7.09296162e-02 5.55512046e-02 9.19054690e-02 6.10937406e-02 2.32259167e-03 7.18197378e-01 3.12873856e+03 +6.05400000e-04 -1.65360702e-12 7.09296138e-02 5.55512001e-02 9.19054719e-02 6.10937452e-02 2.32259117e-03 7.18197378e-01 3.12873856e+03 +6.05500000e-04 -1.65360702e-12 7.09296114e-02 5.55511957e-02 9.19054747e-02 6.10937497e-02 2.32259066e-03 7.18197378e-01 3.12873856e+03 +6.05600000e-04 -1.65360702e-12 7.09296090e-02 5.55511913e-02 9.19054775e-02 6.10937542e-02 2.32259015e-03 7.18197378e-01 3.12873856e+03 +6.05700000e-04 -1.65360702e-12 7.09296066e-02 5.55511869e-02 9.19054803e-02 6.10937587e-02 2.32258965e-03 7.18197378e-01 3.12873856e+03 +6.05800000e-04 -1.65360702e-12 7.09296042e-02 5.55511826e-02 9.19054830e-02 6.10937632e-02 2.32258915e-03 7.18197378e-01 3.12873856e+03 +6.05900000e-04 -1.65360702e-12 7.09296018e-02 5.55511782e-02 9.19054858e-02 6.10937677e-02 2.32258864e-03 7.18197378e-01 3.12873856e+03 +6.06000000e-04 -1.65360702e-12 7.09295994e-02 5.55511739e-02 9.19054886e-02 6.10937722e-02 2.32258814e-03 7.18197378e-01 3.12873856e+03 +6.06100000e-04 -1.65360702e-12 7.09295970e-02 5.55511695e-02 9.19054913e-02 6.10937767e-02 2.32258764e-03 7.18197378e-01 3.12873856e+03 +6.06200000e-04 -1.65360702e-12 7.09295946e-02 5.55511652e-02 9.19054941e-02 6.10937811e-02 2.32258715e-03 7.18197378e-01 3.12873856e+03 +6.06300000e-04 -1.65360702e-12 7.09295922e-02 5.55511609e-02 9.19054969e-02 6.10937855e-02 2.32258665e-03 7.18197378e-01 3.12873856e+03 +6.06400000e-04 -1.65360702e-12 7.09295899e-02 5.55511566e-02 9.19054996e-02 6.10937900e-02 2.32258615e-03 7.18197378e-01 3.12873856e+03 +6.06500000e-04 -1.65360702e-12 7.09295875e-02 5.55511523e-02 9.19055023e-02 6.10937944e-02 2.32258566e-03 7.18197378e-01 3.12873856e+03 +6.06600000e-04 -1.65360702e-12 7.09295852e-02 5.55511480e-02 9.19055051e-02 6.10937988e-02 2.32258517e-03 7.18197378e-01 3.12873856e+03 +6.06700000e-04 -1.65360702e-12 7.09295828e-02 5.55511437e-02 9.19055078e-02 6.10938032e-02 2.32258467e-03 7.18197378e-01 3.12873856e+03 +6.06800000e-04 -1.65360702e-12 7.09295805e-02 5.55511394e-02 9.19055105e-02 6.10938076e-02 2.32258418e-03 7.18197378e-01 3.12873856e+03 +6.06900000e-04 -1.65360702e-12 7.09295781e-02 5.55511352e-02 9.19055132e-02 6.10938119e-02 2.32258370e-03 7.18197378e-01 3.12873856e+03 +6.07000000e-04 -1.65360702e-12 7.09295758e-02 5.55511310e-02 9.19055159e-02 6.10938163e-02 2.32258321e-03 7.18197378e-01 3.12873856e+03 +6.07100000e-04 -1.65360702e-12 7.09295735e-02 5.55511267e-02 9.19055186e-02 6.10938206e-02 2.32258272e-03 7.18197378e-01 3.12873856e+03 +6.07200000e-04 -1.65360702e-12 7.09295712e-02 5.55511225e-02 9.19055213e-02 6.10938250e-02 2.32258224e-03 7.18197378e-01 3.12873856e+03 +6.07300000e-04 -1.65360702e-12 7.09295688e-02 5.55511183e-02 9.19055240e-02 6.10938293e-02 2.32258175e-03 7.18197378e-01 3.12873856e+03 +6.07400000e-04 -1.65360702e-12 7.09295665e-02 5.55511141e-02 9.19055266e-02 6.10938336e-02 2.32258127e-03 7.18197378e-01 3.12873856e+03 +6.07500000e-04 -1.65360702e-12 7.09295642e-02 5.55511099e-02 9.19055293e-02 6.10938379e-02 2.32258079e-03 7.18197378e-01 3.12873856e+03 +6.07600000e-04 -1.65360702e-12 7.09295619e-02 5.55511057e-02 9.19055319e-02 6.10938422e-02 2.32258031e-03 7.18197378e-01 3.12873856e+03 +6.07700000e-04 -1.65360702e-12 7.09295597e-02 5.55511016e-02 9.19055346e-02 6.10938465e-02 2.32257983e-03 7.18197378e-01 3.12873856e+03 +6.07800000e-04 -1.65360702e-12 7.09295574e-02 5.55510974e-02 9.19055372e-02 6.10938508e-02 2.32257935e-03 7.18197378e-01 3.12873856e+03 +6.07900000e-04 -1.65360702e-12 7.09295551e-02 5.55510933e-02 9.19055399e-02 6.10938550e-02 2.32257887e-03 7.18197378e-01 3.12873856e+03 +6.08000000e-04 -1.65360702e-12 7.09295528e-02 5.55510891e-02 9.19055425e-02 6.10938593e-02 2.32257840e-03 7.18197378e-01 3.12873856e+03 +6.08100000e-04 -1.65360702e-12 7.09295506e-02 5.55510850e-02 9.19055451e-02 6.10938635e-02 2.32257792e-03 7.18197378e-01 3.12873856e+03 +6.08200000e-04 -1.65360702e-12 7.09295483e-02 5.55510809e-02 9.19055478e-02 6.10938678e-02 2.32257745e-03 7.18197378e-01 3.12873856e+03 +6.08300000e-04 -1.65360702e-12 7.09295460e-02 5.55510768e-02 9.19055504e-02 6.10938720e-02 2.32257698e-03 7.18197378e-01 3.12873856e+03 +6.08400000e-04 -1.65360702e-12 7.09295438e-02 5.55510727e-02 9.19055530e-02 6.10938762e-02 2.32257651e-03 7.18197378e-01 3.12873856e+03 +6.08500000e-04 -1.65360702e-12 7.09295416e-02 5.55510686e-02 9.19055556e-02 6.10938804e-02 2.32257604e-03 7.18197378e-01 3.12873856e+03 +6.08600000e-04 -1.65360702e-12 7.09295393e-02 5.55510645e-02 9.19055582e-02 6.10938846e-02 2.32257557e-03 7.18197378e-01 3.12873856e+03 +6.08700000e-04 -1.65360702e-12 7.09295371e-02 5.55510605e-02 9.19055607e-02 6.10938887e-02 2.32257510e-03 7.18197378e-01 3.12873856e+03 +6.08800000e-04 -1.65360702e-12 7.09295349e-02 5.55510564e-02 9.19055633e-02 6.10938929e-02 2.32257464e-03 7.18197378e-01 3.12873856e+03 +6.08900000e-04 -1.65360702e-12 7.09295326e-02 5.55510524e-02 9.19055659e-02 6.10938970e-02 2.32257417e-03 7.18197378e-01 3.12873856e+03 +6.09000000e-04 -1.65360702e-12 7.09295304e-02 5.55510484e-02 9.19055685e-02 6.10939012e-02 2.32257371e-03 7.18197378e-01 3.12873856e+03 +6.09100000e-04 -1.65360702e-12 7.09295282e-02 5.55510443e-02 9.19055710e-02 6.10939053e-02 2.32257325e-03 7.18197378e-01 3.12873856e+03 +6.09200000e-04 -1.65360702e-12 7.09295260e-02 5.55510403e-02 9.19055736e-02 6.10939094e-02 2.32257279e-03 7.18197378e-01 3.12873856e+03 +6.09300000e-04 -1.65360702e-12 7.09295238e-02 5.55510363e-02 9.19055761e-02 6.10939135e-02 2.32257233e-03 7.18197378e-01 3.12873856e+03 +6.09400000e-04 -1.65360702e-12 7.09295216e-02 5.55510323e-02 9.19055787e-02 6.10939176e-02 2.32257187e-03 7.18197378e-01 3.12873856e+03 +6.09500000e-04 -1.65360702e-12 7.09295194e-02 5.55510284e-02 9.19055812e-02 6.10939217e-02 2.32257141e-03 7.18197378e-01 3.12873856e+03 +6.09600000e-04 -1.65360702e-12 7.09295173e-02 5.55510244e-02 9.19055837e-02 6.10939258e-02 2.32257095e-03 7.18197378e-01 3.12873856e+03 +6.09700000e-04 -1.65360702e-12 7.09295151e-02 5.55510204e-02 9.19055862e-02 6.10939299e-02 2.32257050e-03 7.18197378e-01 3.12873856e+03 +6.09800000e-04 -1.65360702e-12 7.09295129e-02 5.55510165e-02 9.19055887e-02 6.10939339e-02 2.32257004e-03 7.18197378e-01 3.12873856e+03 +6.09900000e-04 -1.65360702e-12 7.09295108e-02 5.55510126e-02 9.19055912e-02 6.10939380e-02 2.32256959e-03 7.18197378e-01 3.12873856e+03 +6.10000000e-04 -1.65360702e-12 7.09295086e-02 5.55510086e-02 9.19055937e-02 6.10939420e-02 2.32256914e-03 7.18197378e-01 3.12873856e+03 +6.10100000e-04 -1.65360702e-12 7.09295065e-02 5.55510047e-02 9.19055962e-02 6.10939461e-02 2.32256869e-03 7.18197378e-01 3.12873984e+03 +6.10200000e-04 -1.65360702e-12 7.09295043e-02 5.55510008e-02 9.19055987e-02 6.10939501e-02 2.32256824e-03 7.18197378e-01 3.12873984e+03 +6.10300000e-04 -1.65360702e-12 7.09295022e-02 5.55509969e-02 9.19056012e-02 6.10939541e-02 2.32256779e-03 7.18197378e-01 3.12873984e+03 +6.10400000e-04 -1.65360702e-12 7.09295000e-02 5.55509930e-02 9.19056037e-02 6.10939581e-02 2.32256734e-03 7.18197378e-01 3.12873984e+03 +6.10500000e-04 -1.65360702e-12 7.09294979e-02 5.55509891e-02 9.19056062e-02 6.10939621e-02 2.32256690e-03 7.18197378e-01 3.12873984e+03 +6.10600000e-04 -1.65360702e-12 7.09294958e-02 5.55509853e-02 9.19056086e-02 6.10939660e-02 2.32256645e-03 7.18197378e-01 3.12873984e+03 +6.10700000e-04 -1.65360702e-12 7.09294937e-02 5.55509814e-02 9.19056111e-02 6.10939700e-02 2.32256601e-03 7.18197378e-01 3.12873984e+03 +6.10800000e-04 -1.65360702e-12 7.09294915e-02 5.55509776e-02 9.19056135e-02 6.10939740e-02 2.32256557e-03 7.18197378e-01 3.12873984e+03 +6.10900000e-04 -1.65360702e-12 7.09294894e-02 5.55509737e-02 9.19056160e-02 6.10939779e-02 2.32256513e-03 7.18197378e-01 3.12873984e+03 +6.11000000e-04 -1.65360702e-12 7.09294873e-02 5.55509699e-02 9.19056184e-02 6.10939818e-02 2.32256468e-03 7.18197378e-01 3.12873984e+03 +6.11100000e-04 -1.65360702e-12 7.09294852e-02 5.55509661e-02 9.19056208e-02 6.10939858e-02 2.32256425e-03 7.18197378e-01 3.12873984e+03 +6.11200000e-04 -1.65360702e-12 7.09294831e-02 5.55509623e-02 9.19056233e-02 6.10939897e-02 2.32256381e-03 7.18197378e-01 3.12873984e+03 +6.11300000e-04 -1.65360702e-12 7.09294811e-02 5.55509585e-02 9.19056257e-02 6.10939936e-02 2.32256337e-03 7.18197378e-01 3.12873984e+03 +6.11400000e-04 -1.65360702e-12 7.09294790e-02 5.55509547e-02 9.19056281e-02 6.10939975e-02 2.32256293e-03 7.18197378e-01 3.12873984e+03 +6.11500000e-04 -1.65360702e-12 7.09294769e-02 5.55509509e-02 9.19056305e-02 6.10940014e-02 2.32256250e-03 7.18197378e-01 3.12873984e+03 +6.11600000e-04 -1.65360702e-12 7.09294748e-02 5.55509471e-02 9.19056329e-02 6.10940052e-02 2.32256207e-03 7.18197378e-01 3.12873984e+03 +6.11700000e-04 -1.65360702e-12 7.09294728e-02 5.55509434e-02 9.19056353e-02 6.10940091e-02 2.32256163e-03 7.18197378e-01 3.12873984e+03 +6.11800000e-04 -1.65360702e-12 7.09294707e-02 5.55509396e-02 9.19056377e-02 6.10940129e-02 2.32256120e-03 7.18197378e-01 3.12873984e+03 +6.11900000e-04 -1.65360702e-12 7.09294687e-02 5.55509359e-02 9.19056400e-02 6.10940168e-02 2.32256077e-03 7.18197378e-01 3.12873984e+03 +6.12000000e-04 -1.65360702e-12 7.09294666e-02 5.55509322e-02 9.19056424e-02 6.10940206e-02 2.32256034e-03 7.18197378e-01 3.12873984e+03 +6.12100000e-04 -1.65360702e-12 7.09294646e-02 5.55509284e-02 9.19056448e-02 6.10940245e-02 2.32255992e-03 7.18197378e-01 3.12873984e+03 +6.12200000e-04 -1.65360702e-12 7.09294625e-02 5.55509247e-02 9.19056472e-02 6.10940283e-02 2.32255949e-03 7.18197378e-01 3.12873984e+03 +6.12300000e-04 -1.65360702e-12 7.09294605e-02 5.55509210e-02 9.19056495e-02 6.10940321e-02 2.32255906e-03 7.18197378e-01 3.12873984e+03 +6.12400000e-04 -1.65360702e-12 7.09294585e-02 5.55509173e-02 9.19056519e-02 6.10940359e-02 2.32255864e-03 7.18197378e-01 3.12873984e+03 +6.12500000e-04 -1.65360702e-12 7.09294564e-02 5.55509136e-02 9.19056542e-02 6.10940397e-02 2.32255821e-03 7.18197378e-01 3.12873984e+03 +6.12600000e-04 -1.65360702e-12 7.09294544e-02 5.55509100e-02 9.19056565e-02 6.10940434e-02 2.32255779e-03 7.18197378e-01 3.12873984e+03 +6.12700000e-04 -1.65360702e-12 7.09294524e-02 5.55509063e-02 9.19056589e-02 6.10940472e-02 2.32255737e-03 7.18197378e-01 3.12873984e+03 +6.12800000e-04 -1.65360702e-12 7.09294504e-02 5.55509026e-02 9.19056612e-02 6.10940510e-02 2.32255695e-03 7.18197378e-01 3.12873984e+03 +6.12900000e-04 -1.65360702e-12 7.09294484e-02 5.55508990e-02 9.19056635e-02 6.10940547e-02 2.32255653e-03 7.18197378e-01 3.12873984e+03 +6.13000000e-04 -1.65360702e-12 7.09294464e-02 5.55508954e-02 9.19056658e-02 6.10940584e-02 2.32255611e-03 7.18197378e-01 3.12873984e+03 +6.13100000e-04 -1.65360702e-12 7.09294444e-02 5.55508917e-02 9.19056681e-02 6.10940622e-02 2.32255569e-03 7.18197378e-01 3.12873984e+03 +6.13200000e-04 -1.65360702e-12 7.09294424e-02 5.55508881e-02 9.19056705e-02 6.10940659e-02 2.32255528e-03 7.18197378e-01 3.12873984e+03 +6.13300000e-04 -1.65360702e-12 7.09294404e-02 5.55508845e-02 9.19056727e-02 6.10940696e-02 2.32255486e-03 7.18197378e-01 3.12873984e+03 +6.13400000e-04 -1.65360702e-12 7.09294385e-02 5.55508809e-02 9.19056750e-02 6.10940733e-02 2.32255445e-03 7.18197378e-01 3.12873984e+03 +6.13500000e-04 -1.65360702e-12 7.09294365e-02 5.55508773e-02 9.19056773e-02 6.10940770e-02 2.32255404e-03 7.18197378e-01 3.12873984e+03 +6.13600000e-04 -1.65360702e-12 7.09294345e-02 5.55508737e-02 9.19056796e-02 6.10940807e-02 2.32255362e-03 7.18197378e-01 3.12873984e+03 +6.13700000e-04 -1.65360702e-12 7.09294326e-02 5.55508702e-02 9.19056819e-02 6.10940843e-02 2.32255321e-03 7.18197378e-01 3.12873984e+03 +6.13800000e-04 -1.65360702e-12 7.09294306e-02 5.55508666e-02 9.19056841e-02 6.10940880e-02 2.32255280e-03 7.18197378e-01 3.12873984e+03 +6.13900000e-04 -1.65360702e-12 7.09294286e-02 5.55508630e-02 9.19056864e-02 6.10940917e-02 2.32255240e-03 7.18197378e-01 3.12873984e+03 +6.14000000e-04 -1.65360702e-12 7.09294267e-02 5.55508595e-02 9.19056887e-02 6.10940953e-02 2.32255199e-03 7.18197378e-01 3.12873984e+03 +6.14100000e-04 -1.65360702e-12 7.09294248e-02 5.55508560e-02 9.19056909e-02 6.10940989e-02 2.32255158e-03 7.18197378e-01 3.12873984e+03 +6.14200000e-04 -1.65360702e-12 7.09294228e-02 5.55508524e-02 9.19056932e-02 6.10941026e-02 2.32255118e-03 7.18197378e-01 3.12873984e+03 +6.14300000e-04 -1.65360702e-12 7.09294209e-02 5.55508489e-02 9.19056954e-02 6.10941062e-02 2.32255077e-03 7.18197378e-01 3.12873984e+03 +6.14400000e-04 -1.65360702e-12 7.09294190e-02 5.55508454e-02 9.19056976e-02 6.10941098e-02 2.32255037e-03 7.18197378e-01 3.12873984e+03 +6.14500000e-04 -1.65360702e-12 7.09294170e-02 5.55508419e-02 9.19056999e-02 6.10941134e-02 2.32254996e-03 7.18197378e-01 3.12873984e+03 +6.14600000e-04 -1.65360702e-12 7.09294151e-02 5.55508384e-02 9.19057021e-02 6.10941170e-02 2.32254956e-03 7.18197378e-01 3.12873984e+03 +6.14700000e-04 -1.65360702e-12 7.09294132e-02 5.55508349e-02 9.19057043e-02 6.10941205e-02 2.32254916e-03 7.18197378e-01 3.12873984e+03 +6.14800000e-04 -1.65360702e-12 7.09294113e-02 5.55508315e-02 9.19057065e-02 6.10941241e-02 2.32254876e-03 7.18197378e-01 3.12873984e+03 +6.14900000e-04 -1.65360702e-12 7.09294094e-02 5.55508280e-02 9.19057087e-02 6.10941277e-02 2.32254836e-03 7.18197378e-01 3.12873984e+03 +6.15000000e-04 -1.65360702e-12 7.09294075e-02 5.55508245e-02 9.19057109e-02 6.10941312e-02 2.32254797e-03 7.18197378e-01 3.12873984e+03 +6.15100000e-04 -1.65360702e-12 7.09294056e-02 5.55508211e-02 9.19057131e-02 6.10941348e-02 2.32254757e-03 7.18197378e-01 3.12873984e+03 +6.15200000e-04 -1.65360702e-12 7.09294037e-02 5.55508177e-02 9.19057153e-02 6.10941383e-02 2.32254718e-03 7.18197378e-01 3.12873984e+03 +6.15300000e-04 -1.65360702e-12 7.09294018e-02 5.55508142e-02 9.19057175e-02 6.10941418e-02 2.32254678e-03 7.18197378e-01 3.12873984e+03 +6.15400000e-04 -1.65360702e-12 7.09294000e-02 5.55508108e-02 9.19057196e-02 6.10941453e-02 2.32254639e-03 7.18197378e-01 3.12874095e+03 +6.15500000e-04 -1.65360702e-12 7.09293981e-02 5.55508074e-02 9.19057218e-02 6.10941489e-02 2.32254600e-03 7.18197378e-01 3.12874095e+03 +6.15600000e-04 -1.65360702e-12 7.09293962e-02 5.55508040e-02 9.19057240e-02 6.10941523e-02 2.32254560e-03 7.18197378e-01 3.12874095e+03 +6.15700000e-04 -1.65360702e-12 7.09293943e-02 5.55508006e-02 9.19057261e-02 6.10941558e-02 2.32254521e-03 7.18197378e-01 3.12874095e+03 +6.15800000e-04 -1.65360702e-12 7.09293925e-02 5.55507972e-02 9.19057283e-02 6.10941593e-02 2.32254482e-03 7.18197378e-01 3.12874095e+03 +6.15900000e-04 -1.65360702e-12 7.09293906e-02 5.55507938e-02 9.19057304e-02 6.10941628e-02 2.32254444e-03 7.18197378e-01 3.12874095e+03 +6.16000000e-04 -1.65360702e-12 7.09293888e-02 5.55507905e-02 9.19057326e-02 6.10941662e-02 2.32254405e-03 7.18197378e-01 3.12874095e+03 +6.16100000e-04 -1.65360702e-12 7.09293869e-02 5.55507871e-02 9.19057347e-02 6.10941697e-02 2.32254366e-03 7.18197378e-01 3.12874095e+03 +6.16200000e-04 -1.65360702e-12 7.09293851e-02 5.55507838e-02 9.19057369e-02 6.10941731e-02 2.32254328e-03 7.18197378e-01 3.12874095e+03 +6.16300000e-04 -1.65360702e-12 7.09293833e-02 5.55507804e-02 9.19057390e-02 6.10941766e-02 2.32254289e-03 7.18197378e-01 3.12874095e+03 +6.16400000e-04 -1.65360702e-12 7.09293814e-02 5.55507771e-02 9.19057411e-02 6.10941800e-02 2.32254251e-03 7.18197378e-01 3.12874095e+03 +6.16500000e-04 -1.65360702e-12 7.09293796e-02 5.55507738e-02 9.19057432e-02 6.10941834e-02 2.32254213e-03 7.18197378e-01 3.12874095e+03 +6.16600000e-04 -1.65360702e-12 7.09293778e-02 5.55507705e-02 9.19057453e-02 6.10941868e-02 2.32254175e-03 7.18197378e-01 3.12874095e+03 +6.16700000e-04 -1.65360702e-12 7.09293760e-02 5.55507671e-02 9.19057474e-02 6.10941902e-02 2.32254137e-03 7.18197378e-01 3.12874095e+03 +6.16800000e-04 -1.65360702e-12 7.09293742e-02 5.55507638e-02 9.19057495e-02 6.10941936e-02 2.32254099e-03 7.18197378e-01 3.12874095e+03 +6.16900000e-04 -1.65360702e-12 7.09293723e-02 5.55507606e-02 9.19057516e-02 6.10941970e-02 2.32254061e-03 7.18197378e-01 3.12874095e+03 +6.17000000e-04 -1.65360702e-12 7.09293705e-02 5.55507573e-02 9.19057537e-02 6.10942004e-02 2.32254023e-03 7.18197378e-01 3.12874095e+03 +6.17100000e-04 -1.65360702e-12 7.09293687e-02 5.55507540e-02 9.19057558e-02 6.10942037e-02 2.32253985e-03 7.18197378e-01 3.12874095e+03 +6.17200000e-04 -1.65360702e-12 7.09293670e-02 5.55507507e-02 9.19057579e-02 6.10942071e-02 2.32253948e-03 7.18197378e-01 3.12874095e+03 +6.17300000e-04 -1.65360702e-12 7.09293652e-02 5.55507475e-02 9.19057600e-02 6.10942104e-02 2.32253910e-03 7.18197378e-01 3.12874095e+03 +6.17400000e-04 -1.65360702e-12 7.09293634e-02 5.55507442e-02 9.19057620e-02 6.10942138e-02 2.32253873e-03 7.18197378e-01 3.12874095e+03 +6.17500000e-04 -1.65360702e-12 7.09293616e-02 5.55507410e-02 9.19057641e-02 6.10942171e-02 2.32253836e-03 7.18197378e-01 3.12874095e+03 +6.17600000e-04 -1.65360702e-12 7.09293598e-02 5.55507378e-02 9.19057661e-02 6.10942204e-02 2.32253799e-03 7.18197378e-01 3.12874095e+03 +6.17700000e-04 -1.65360702e-12 7.09293581e-02 5.55507345e-02 9.19057682e-02 6.10942238e-02 2.32253761e-03 7.18197378e-01 3.12874095e+03 +6.17800000e-04 -1.65360702e-12 7.09293563e-02 5.55507313e-02 9.19057702e-02 6.10942271e-02 2.32253724e-03 7.18197378e-01 3.12874095e+03 +6.17900000e-04 -1.65360702e-12 7.09293545e-02 5.55507281e-02 9.19057723e-02 6.10942304e-02 2.32253688e-03 7.18197378e-01 3.12874095e+03 +6.18000000e-04 -1.65360702e-12 7.09293528e-02 5.55507249e-02 9.19057743e-02 6.10942336e-02 2.32253651e-03 7.18197378e-01 3.12874095e+03 +6.18100000e-04 -1.65360702e-12 7.09293510e-02 5.55507217e-02 9.19057764e-02 6.10942369e-02 2.32253614e-03 7.18197378e-01 3.12874095e+03 +6.18200000e-04 -1.65360702e-12 7.09293493e-02 5.55507185e-02 9.19057784e-02 6.10942402e-02 2.32253577e-03 7.18197378e-01 3.12874095e+03 +6.18300000e-04 -1.65360702e-12 7.09293475e-02 5.55507154e-02 9.19057804e-02 6.10942435e-02 2.32253541e-03 7.18197378e-01 3.12874095e+03 +6.18400000e-04 -1.65360702e-12 7.09293458e-02 5.55507122e-02 9.19057824e-02 6.10942467e-02 2.32253505e-03 7.18197378e-01 3.12874095e+03 +6.18500000e-04 -1.65360702e-12 7.09293440e-02 5.55507090e-02 9.19057844e-02 6.10942500e-02 2.32253468e-03 7.18197378e-01 3.12874095e+03 +6.18600000e-04 -1.65360702e-12 7.09293423e-02 5.55507059e-02 9.19057864e-02 6.10942532e-02 2.32253432e-03 7.18197378e-01 3.12874095e+03 +6.18700000e-04 -1.65360702e-12 7.09293406e-02 5.55507027e-02 9.19057884e-02 6.10942564e-02 2.32253396e-03 7.18197378e-01 3.12874095e+03 +6.18800000e-04 -1.65360702e-12 7.09293389e-02 5.55506996e-02 9.19057904e-02 6.10942596e-02 2.32253360e-03 7.18197378e-01 3.12874095e+03 +6.18900000e-04 -1.65360702e-12 7.09293372e-02 5.55506965e-02 9.19057924e-02 6.10942629e-02 2.32253324e-03 7.18197378e-01 3.12874095e+03 +6.19000000e-04 -1.65360702e-12 7.09293354e-02 5.55506934e-02 9.19057944e-02 6.10942661e-02 2.32253288e-03 7.18197378e-01 3.12874095e+03 +6.19100000e-04 -1.65360702e-12 7.09293337e-02 5.55506903e-02 9.19057964e-02 6.10942693e-02 2.32253252e-03 7.18197378e-01 3.12874095e+03 +6.19200000e-04 -1.65360702e-12 7.09293320e-02 5.55506872e-02 9.19057984e-02 6.10942725e-02 2.32253216e-03 7.18197378e-01 3.12874095e+03 +6.19300000e-04 -1.65360702e-12 7.09293303e-02 5.55506841e-02 9.19058003e-02 6.10942756e-02 2.32253181e-03 7.18197378e-01 3.12874095e+03 +6.19400000e-04 -1.65360702e-12 7.09293286e-02 5.55506810e-02 9.19058023e-02 6.10942788e-02 2.32253145e-03 7.18197378e-01 3.12874095e+03 +6.19500000e-04 -1.65360702e-12 7.09293269e-02 5.55506779e-02 9.19058042e-02 6.10942820e-02 2.32253110e-03 7.18197378e-01 3.12874095e+03 +6.19600000e-04 -1.65360702e-12 7.09293253e-02 5.55506748e-02 9.19058062e-02 6.10942851e-02 2.32253075e-03 7.18197378e-01 3.12874095e+03 +6.19700000e-04 -1.65360702e-12 7.09293236e-02 5.55506718e-02 9.19058082e-02 6.10942883e-02 2.32253039e-03 7.18197378e-01 3.12874095e+03 +6.19800000e-04 -1.65360702e-12 7.09293219e-02 5.55506687e-02 9.19058101e-02 6.10942914e-02 2.32253004e-03 7.18197378e-01 3.12874095e+03 +6.19900000e-04 -1.65360702e-12 7.09293202e-02 5.55506657e-02 9.19058120e-02 6.10942945e-02 2.32252969e-03 7.18197378e-01 3.12874095e+03 +6.20000000e-04 -1.65360702e-12 7.09293185e-02 5.55506626e-02 9.19058140e-02 6.10942977e-02 2.32252934e-03 7.18197378e-01 3.12874095e+03 +6.20100000e-04 -1.65360702e-12 7.09293169e-02 5.55506596e-02 9.19058159e-02 6.10943008e-02 2.32252899e-03 7.18197378e-01 3.12874095e+03 +6.20200000e-04 -1.65360702e-12 7.09293152e-02 5.55506566e-02 9.19058178e-02 6.10943039e-02 2.32252865e-03 7.18197378e-01 3.12874095e+03 +6.20300000e-04 -1.65360702e-12 7.09293136e-02 5.55506535e-02 9.19058197e-02 6.10943070e-02 2.32252830e-03 7.18197378e-01 3.12874095e+03 +6.20400000e-04 -1.65360702e-12 7.09293119e-02 5.55506505e-02 9.19058217e-02 6.10943101e-02 2.32252795e-03 7.18197378e-01 3.12874095e+03 +6.20500000e-04 -1.65360702e-12 7.09293103e-02 5.55506475e-02 9.19058236e-02 6.10943132e-02 2.32252761e-03 7.18197378e-01 3.12874095e+03 +6.20600000e-04 -1.65360702e-12 7.09293086e-02 5.55506445e-02 9.19058255e-02 6.10943162e-02 2.32252726e-03 7.18197378e-01 3.12874095e+03 +6.20700000e-04 -1.65360702e-12 7.09293070e-02 5.55506416e-02 9.19058274e-02 6.10943193e-02 2.32252692e-03 7.18197378e-01 3.12874193e+03 +6.20800000e-04 -1.65360702e-12 7.09293053e-02 5.55506386e-02 9.19058293e-02 6.10943224e-02 2.32252658e-03 7.18197378e-01 3.12874193e+03 +6.20900000e-04 -1.65360702e-12 7.09293037e-02 5.55506356e-02 9.19058312e-02 6.10943254e-02 2.32252624e-03 7.18197378e-01 3.12874193e+03 +6.21000000e-04 -1.65360702e-12 7.09293021e-02 5.55506326e-02 9.19058330e-02 6.10943285e-02 2.32252590e-03 7.18197378e-01 3.12874193e+03 +6.21100000e-04 -1.65360702e-12 7.09293005e-02 5.55506297e-02 9.19058349e-02 6.10943315e-02 2.32252556e-03 7.18197378e-01 3.12874193e+03 +6.21200000e-04 -1.65360702e-12 7.09292988e-02 5.55506267e-02 9.19058368e-02 6.10943345e-02 2.32252522e-03 7.18197378e-01 3.12874193e+03 +6.21300000e-04 -1.65360702e-12 7.09292972e-02 5.55506238e-02 9.19058387e-02 6.10943376e-02 2.32252488e-03 7.18197378e-01 3.12874193e+03 +6.21400000e-04 -1.65360702e-12 7.09292956e-02 5.55506209e-02 9.19058405e-02 6.10943406e-02 2.32252454e-03 7.18197378e-01 3.12874193e+03 +6.21500000e-04 -1.65360702e-12 7.09292940e-02 5.55506179e-02 9.19058424e-02 6.10943436e-02 2.32252421e-03 7.18197378e-01 3.12874193e+03 +6.21600000e-04 -1.65360702e-12 7.09292924e-02 5.55506150e-02 9.19058443e-02 6.10943466e-02 2.32252387e-03 7.18197378e-01 3.12874193e+03 +6.21700000e-04 -1.65360702e-12 7.09292908e-02 5.55506121e-02 9.19058461e-02 6.10943496e-02 2.32252354e-03 7.18197378e-01 3.12874193e+03 +6.21800000e-04 -1.65360702e-12 7.09292892e-02 5.55506092e-02 9.19058480e-02 6.10943526e-02 2.32252320e-03 7.18197378e-01 3.12874193e+03 +6.21900000e-04 -1.65360702e-12 7.09292876e-02 5.55506063e-02 9.19058498e-02 6.10943555e-02 2.32252287e-03 7.18197378e-01 3.12874193e+03 +6.22000000e-04 -1.65360702e-12 7.09292860e-02 5.55506034e-02 9.19058516e-02 6.10943585e-02 2.32252254e-03 7.18197378e-01 3.12874193e+03 +6.22100000e-04 -1.65360702e-12 7.09292845e-02 5.55506006e-02 9.19058535e-02 6.10943615e-02 2.32252221e-03 7.18197378e-01 3.12874193e+03 +6.22200000e-04 -1.65360702e-12 7.09292829e-02 5.55505977e-02 9.19058553e-02 6.10943644e-02 2.32252187e-03 7.18197378e-01 3.12874193e+03 +6.22300000e-04 -1.65360702e-12 7.09292813e-02 5.55505948e-02 9.19058571e-02 6.10943674e-02 2.32252155e-03 7.18197378e-01 3.12874193e+03 +6.22400000e-04 -1.65360702e-12 7.09292797e-02 5.55505920e-02 9.19058589e-02 6.10943703e-02 2.32252122e-03 7.18197378e-01 3.12874193e+03 +6.22500000e-04 -1.65360702e-12 7.09292782e-02 5.55505891e-02 9.19058608e-02 6.10943732e-02 2.32252089e-03 7.18197378e-01 3.12874193e+03 +6.22600000e-04 -1.65360702e-12 7.09292766e-02 5.55505863e-02 9.19058626e-02 6.10943761e-02 2.32252056e-03 7.18197378e-01 3.12874193e+03 +6.22700000e-04 -1.65360702e-12 7.09292751e-02 5.55505834e-02 9.19058644e-02 6.10943791e-02 2.32252024e-03 7.18197378e-01 3.12874193e+03 +6.22800000e-04 -1.65360702e-12 7.09292735e-02 5.55505806e-02 9.19058662e-02 6.10943820e-02 2.32251991e-03 7.18197378e-01 3.12874193e+03 +6.22900000e-04 -1.65360702e-12 7.09292719e-02 5.55505778e-02 9.19058680e-02 6.10943849e-02 2.32251959e-03 7.18197378e-01 3.12874193e+03 +6.23000000e-04 -1.65360702e-12 7.09292704e-02 5.55505750e-02 9.19058698e-02 6.10943878e-02 2.32251926e-03 7.18197378e-01 3.12874193e+03 +6.23100000e-04 -1.65360702e-12 7.09292689e-02 5.55505722e-02 9.19058715e-02 6.10943906e-02 2.32251894e-03 7.18197378e-01 3.12874193e+03 +6.23200000e-04 -1.65360702e-12 7.09292673e-02 5.55505694e-02 9.19058733e-02 6.10943935e-02 2.32251862e-03 7.18197378e-01 3.12874193e+03 +6.23300000e-04 -1.65360702e-12 7.09292658e-02 5.55505666e-02 9.19058751e-02 6.10943964e-02 2.32251830e-03 7.18197378e-01 3.12874193e+03 +6.23400000e-04 -1.65360702e-12 7.09292643e-02 5.55505638e-02 9.19058769e-02 6.10943993e-02 2.32251798e-03 7.18197378e-01 3.12874193e+03 +6.23500000e-04 -1.65360702e-12 7.09292627e-02 5.55505610e-02 9.19058786e-02 6.10944021e-02 2.32251766e-03 7.18197378e-01 3.12874193e+03 +6.23600000e-04 -1.65360702e-12 7.09292612e-02 5.55505582e-02 9.19058804e-02 6.10944050e-02 2.32251734e-03 7.18197378e-01 3.12874193e+03 +6.23700000e-04 -1.65360702e-12 7.09292597e-02 5.55505555e-02 9.19058822e-02 6.10944078e-02 2.32251702e-03 7.18197378e-01 3.12874193e+03 +6.23800000e-04 -1.65360702e-12 7.09292582e-02 5.55505527e-02 9.19058839e-02 6.10944106e-02 2.32251670e-03 7.18197378e-01 3.12874193e+03 +6.23900000e-04 -1.65360702e-12 7.09292567e-02 5.55505500e-02 9.19058857e-02 6.10944135e-02 2.32251639e-03 7.18197378e-01 3.12874193e+03 +6.24000000e-04 -1.65360702e-12 7.09292552e-02 5.55505472e-02 9.19058874e-02 6.10944163e-02 2.32251607e-03 7.18197378e-01 3.12874193e+03 +6.24100000e-04 -1.65360702e-12 7.09292537e-02 5.55505445e-02 9.19058892e-02 6.10944191e-02 2.32251576e-03 7.18197378e-01 3.12874193e+03 +6.24200000e-04 -1.65360702e-12 7.09292522e-02 5.55505417e-02 9.19058909e-02 6.10944219e-02 2.32251544e-03 7.18197378e-01 3.12874193e+03 +6.24300000e-04 -1.65360702e-12 7.09292507e-02 5.55505390e-02 9.19058926e-02 6.10944247e-02 2.32251513e-03 7.18197378e-01 3.12874193e+03 +6.24400000e-04 -1.65360702e-12 7.09292492e-02 5.55505363e-02 9.19058944e-02 6.10944275e-02 2.32251482e-03 7.18197378e-01 3.12874193e+03 +6.24500000e-04 -1.65360702e-12 7.09292477e-02 5.55505336e-02 9.19058961e-02 6.10944303e-02 2.32251450e-03 7.18197378e-01 3.12874193e+03 +6.24600000e-04 -1.65360702e-12 7.09292462e-02 5.55505309e-02 9.19058978e-02 6.10944331e-02 2.32251419e-03 7.18197378e-01 3.12874193e+03 +6.24700000e-04 -1.65360702e-12 7.09292447e-02 5.55505282e-02 9.19058995e-02 6.10944358e-02 2.32251388e-03 7.18197378e-01 3.12874193e+03 +6.24800000e-04 -1.65360702e-12 7.09292432e-02 5.55505255e-02 9.19059012e-02 6.10944386e-02 2.32251358e-03 7.18197378e-01 3.12874193e+03 +6.24900000e-04 -1.65360702e-12 7.09292418e-02 5.55505228e-02 9.19059029e-02 6.10944413e-02 2.32251327e-03 7.18197378e-01 3.12874193e+03 +6.25000000e-04 -1.65360702e-12 7.09292403e-02 5.55505202e-02 9.19059046e-02 6.10944441e-02 2.32251296e-03 7.18197378e-01 3.12874193e+03 +6.25100000e-04 -1.65360702e-12 7.09292388e-02 5.55505175e-02 9.19059063e-02 6.10944468e-02 2.32251265e-03 7.18197378e-01 3.12874193e+03 +6.25200000e-04 -1.65360702e-12 7.09292374e-02 5.55505148e-02 9.19059080e-02 6.10944496e-02 2.32251235e-03 7.18197378e-01 3.12874193e+03 +6.25300000e-04 -1.65360702e-12 7.09292359e-02 5.55505122e-02 9.19059097e-02 6.10944523e-02 2.32251204e-03 7.18197378e-01 3.12874193e+03 +6.25400000e-04 -1.65360702e-12 7.09292345e-02 5.55505095e-02 9.19059114e-02 6.10944550e-02 2.32251174e-03 7.18197378e-01 3.12874193e+03 +6.25500000e-04 -1.65360702e-12 7.09292330e-02 5.55505069e-02 9.19059131e-02 6.10944577e-02 2.32251143e-03 7.18197378e-01 3.12874193e+03 +6.25600000e-04 -1.65360702e-12 7.09292316e-02 5.55505043e-02 9.19059148e-02 6.10944604e-02 2.32251113e-03 7.18197378e-01 3.12874193e+03 +6.25700000e-04 -1.65360702e-12 7.09292301e-02 5.55505016e-02 9.19059164e-02 6.10944631e-02 2.32251083e-03 7.18197378e-01 3.12874193e+03 +6.25800000e-04 -1.65360702e-12 7.09292287e-02 5.55504990e-02 9.19059181e-02 6.10944658e-02 2.32251053e-03 7.18197378e-01 3.12874193e+03 +6.25900000e-04 -1.65360702e-12 7.09292273e-02 5.55504964e-02 9.19059198e-02 6.10944685e-02 2.32251023e-03 7.18197378e-01 3.12874278e+03 +6.26000000e-04 -1.65360702e-12 7.09292258e-02 5.55504938e-02 9.19059214e-02 6.10944712e-02 2.32250993e-03 7.18197378e-01 3.12874278e+03 +6.26100000e-04 -1.65360702e-12 7.09292244e-02 5.55504912e-02 9.19059231e-02 6.10944739e-02 2.32250963e-03 7.18197378e-01 3.12874278e+03 +6.26200000e-04 -1.65360702e-12 7.09292230e-02 5.55504886e-02 9.19059247e-02 6.10944765e-02 2.32250933e-03 7.18197378e-01 3.12874278e+03 +6.26300000e-04 -1.65360702e-12 7.09292215e-02 5.55504860e-02 9.19059264e-02 6.10944792e-02 2.32250903e-03 7.18197378e-01 3.12874278e+03 +6.26400000e-04 -1.65360702e-12 7.09292201e-02 5.55504834e-02 9.19059280e-02 6.10944818e-02 2.32250874e-03 7.18197378e-01 3.12874278e+03 +6.26500000e-04 -1.65360702e-12 7.09292187e-02 5.55504809e-02 9.19059296e-02 6.10944845e-02 2.32250844e-03 7.18197378e-01 3.12874278e+03 +6.26600000e-04 -1.65360702e-12 7.09292173e-02 5.55504783e-02 9.19059313e-02 6.10944871e-02 2.32250814e-03 7.18197378e-01 3.12874278e+03 +6.26700000e-04 -1.65360702e-12 7.09292159e-02 5.55504757e-02 9.19059329e-02 6.10944897e-02 2.32250785e-03 7.18197378e-01 3.12874278e+03 +6.26800000e-04 -1.65360702e-12 7.09292145e-02 5.55504732e-02 9.19059345e-02 6.10944924e-02 2.32250756e-03 7.18197378e-01 3.12874278e+03 +6.26900000e-04 -1.65360702e-12 7.09292131e-02 5.55504706e-02 9.19059362e-02 6.10944950e-02 2.32250726e-03 7.18197378e-01 3.12874278e+03 +6.27000000e-04 -1.65360702e-12 7.09292117e-02 5.55504681e-02 9.19059378e-02 6.10944976e-02 2.32250697e-03 7.18197378e-01 3.12874278e+03 +6.27100000e-04 -1.65360702e-12 7.09292103e-02 5.55504656e-02 9.19059394e-02 6.10945002e-02 2.32250668e-03 7.18197378e-01 3.12874278e+03 +6.27200000e-04 -1.65360702e-12 7.09292089e-02 5.55504630e-02 9.19059410e-02 6.10945028e-02 2.32250639e-03 7.18197378e-01 3.12874278e+03 +6.27300000e-04 -1.65360702e-12 7.09292075e-02 5.55504605e-02 9.19059426e-02 6.10945054e-02 2.32250610e-03 7.18197378e-01 3.12874278e+03 +6.27400000e-04 -1.65360702e-12 7.09292062e-02 5.55504580e-02 9.19059442e-02 6.10945080e-02 2.32250581e-03 7.18197378e-01 3.12874278e+03 +6.27500000e-04 -1.65360702e-12 7.09292048e-02 5.55504555e-02 9.19059458e-02 6.10945106e-02 2.32250552e-03 7.18197378e-01 3.12874278e+03 +6.27600000e-04 -1.65360702e-12 7.09292034e-02 5.55504530e-02 9.19059474e-02 6.10945131e-02 2.32250523e-03 7.18197378e-01 3.12874278e+03 +6.27700000e-04 -1.65360702e-12 7.09292020e-02 5.55504505e-02 9.19059490e-02 6.10945157e-02 2.32250495e-03 7.18197378e-01 3.12874278e+03 +6.27800000e-04 -1.65360702e-12 7.09292007e-02 5.55504480e-02 9.19059506e-02 6.10945182e-02 2.32250466e-03 7.18197378e-01 3.12874278e+03 +6.27900000e-04 -1.65360702e-12 7.09291993e-02 5.55504455e-02 9.19059521e-02 6.10945208e-02 2.32250438e-03 7.18197378e-01 3.12874278e+03 +6.28000000e-04 -1.65360702e-12 7.09291979e-02 5.55504431e-02 9.19059537e-02 6.10945233e-02 2.32250409e-03 7.18197378e-01 3.12874278e+03 +6.28100000e-04 -1.65360702e-12 7.09291966e-02 5.55504406e-02 9.19059553e-02 6.10945259e-02 2.32250381e-03 7.18197378e-01 3.12874278e+03 +6.28200000e-04 -1.65360702e-12 7.09291952e-02 5.55504381e-02 9.19059568e-02 6.10945284e-02 2.32250352e-03 7.18197378e-01 3.12874278e+03 +6.28300000e-04 -1.65360702e-12 7.09291939e-02 5.55504357e-02 9.19059584e-02 6.10945309e-02 2.32250324e-03 7.18197378e-01 3.12874278e+03 +6.28400000e-04 -1.65360702e-12 7.09291925e-02 5.55504332e-02 9.19059600e-02 6.10945335e-02 2.32250296e-03 7.18197378e-01 3.12874278e+03 +6.28500000e-04 -1.65360702e-12 7.09291912e-02 5.55504308e-02 9.19059615e-02 6.10945360e-02 2.32250268e-03 7.18197378e-01 3.12874278e+03 +6.28600000e-04 -1.65360702e-12 7.09291899e-02 5.55504283e-02 9.19059631e-02 6.10945385e-02 2.32250240e-03 7.18197378e-01 3.12874278e+03 +6.28700000e-04 -1.65360702e-12 7.09291885e-02 5.55504259e-02 9.19059646e-02 6.10945410e-02 2.32250212e-03 7.18197378e-01 3.12874278e+03 +6.28800000e-04 -1.65360702e-12 7.09291872e-02 5.55504235e-02 9.19059662e-02 6.10945435e-02 2.32250184e-03 7.18197378e-01 3.12874278e+03 +6.28900000e-04 -1.65360702e-12 7.09291859e-02 5.55504211e-02 9.19059677e-02 6.10945460e-02 2.32250156e-03 7.18197378e-01 3.12874278e+03 +6.29000000e-04 -1.65360702e-12 7.09291845e-02 5.55504186e-02 9.19059692e-02 6.10945484e-02 2.32250128e-03 7.18197378e-01 3.12874278e+03 +6.29100000e-04 -1.65360702e-12 7.09291832e-02 5.55504162e-02 9.19059708e-02 6.10945509e-02 2.32250101e-03 7.18197378e-01 3.12874278e+03 +6.29200000e-04 -1.65360702e-12 7.09291819e-02 5.55504138e-02 9.19059723e-02 6.10945534e-02 2.32250073e-03 7.18197378e-01 3.12874278e+03 +6.29300000e-04 -1.65360702e-12 7.09291806e-02 5.55504114e-02 9.19059738e-02 6.10945558e-02 2.32250045e-03 7.18197378e-01 3.12874278e+03 +6.29400000e-04 -1.65360702e-12 7.09291793e-02 5.55504091e-02 9.19059754e-02 6.10945583e-02 2.32250018e-03 7.18197378e-01 3.12874278e+03 +6.29500000e-04 -1.65360702e-12 7.09291780e-02 5.55504067e-02 9.19059769e-02 6.10945607e-02 2.32249991e-03 7.18197378e-01 3.12874278e+03 +6.29600000e-04 -1.65360702e-12 7.09291767e-02 5.55504043e-02 9.19059784e-02 6.10945632e-02 2.32249963e-03 7.18197378e-01 3.12874278e+03 +6.29700000e-04 -1.65360702e-12 7.09291754e-02 5.55504019e-02 9.19059799e-02 6.10945656e-02 2.32249936e-03 7.18197378e-01 3.12874278e+03 +6.29800000e-04 -1.65360702e-12 7.09291741e-02 5.55503996e-02 9.19059814e-02 6.10945680e-02 2.32249909e-03 7.18197378e-01 3.12874278e+03 +6.29900000e-04 -1.65360702e-12 7.09291728e-02 5.55503972e-02 9.19059829e-02 6.10945705e-02 2.32249882e-03 7.18197378e-01 3.12874278e+03 +6.30000000e-04 -1.65360702e-12 7.09291715e-02 5.55503949e-02 9.19059844e-02 6.10945729e-02 2.32249855e-03 7.18197378e-01 3.12874278e+03 +6.30100000e-04 -1.65360702e-12 7.09291702e-02 5.55503925e-02 9.19059859e-02 6.10945753e-02 2.32249828e-03 7.18197378e-01 3.12874278e+03 +6.30200000e-04 -1.65360702e-12 7.09291689e-02 5.55503902e-02 9.19059874e-02 6.10945777e-02 2.32249801e-03 7.18197378e-01 3.12874278e+03 +6.30300000e-04 -1.65360702e-12 7.09291676e-02 5.55503878e-02 9.19059889e-02 6.10945801e-02 2.32249774e-03 7.18197378e-01 3.12874278e+03 +6.30400000e-04 -1.65360702e-12 7.09291663e-02 5.55503855e-02 9.19059903e-02 6.10945825e-02 2.32249747e-03 7.18197378e-01 3.12874278e+03 +6.30500000e-04 -1.65360702e-12 7.09291651e-02 5.55503832e-02 9.19059918e-02 6.10945849e-02 2.32249720e-03 7.18197378e-01 3.12874278e+03 +6.30600000e-04 -1.65360702e-12 7.09291638e-02 5.55503809e-02 9.19059933e-02 6.10945873e-02 2.32249694e-03 7.18197378e-01 3.12874278e+03 +6.30700000e-04 -1.65360702e-12 7.09291625e-02 5.55503786e-02 9.19059948e-02 6.10945896e-02 2.32249667e-03 7.18197378e-01 3.12874278e+03 +6.30800000e-04 -1.65360702e-12 7.09291613e-02 5.55503763e-02 9.19059962e-02 6.10945920e-02 2.32249641e-03 7.18197378e-01 3.12874278e+03 +6.30900000e-04 -1.65360702e-12 7.09291600e-02 5.55503740e-02 9.19059977e-02 6.10945944e-02 2.32249614e-03 7.18197378e-01 3.12874278e+03 +6.31000000e-04 -1.65360702e-12 7.09291587e-02 5.55503717e-02 9.19059992e-02 6.10945967e-02 2.32249588e-03 7.18197378e-01 3.12874278e+03 +6.31100000e-04 -1.65360702e-12 7.09291575e-02 5.55503694e-02 9.19060006e-02 6.10945991e-02 2.32249562e-03 7.18197378e-01 3.12874278e+03 +6.31200000e-04 -1.65360702e-12 7.09291562e-02 5.55503671e-02 9.19060021e-02 6.10946014e-02 2.32249535e-03 7.18197378e-01 3.12874352e+03 +6.31300000e-04 -1.65360702e-12 7.09291550e-02 5.55503648e-02 9.19060035e-02 6.10946038e-02 2.32249509e-03 7.18197378e-01 3.12874352e+03 +6.31400000e-04 -1.65360702e-12 7.09291537e-02 5.55503626e-02 9.19060050e-02 6.10946061e-02 2.32249483e-03 7.18197378e-01 3.12874352e+03 +6.31500000e-04 -1.65360702e-12 7.09291525e-02 5.55503603e-02 9.19060064e-02 6.10946084e-02 2.32249457e-03 7.18197378e-01 3.12874352e+03 +6.31600000e-04 -1.65360702e-12 7.09291512e-02 5.55503580e-02 9.19060078e-02 6.10946107e-02 2.32249431e-03 7.18197378e-01 3.12874352e+03 +6.31700000e-04 -1.65360702e-12 7.09291500e-02 5.55503558e-02 9.19060093e-02 6.10946131e-02 2.32249405e-03 7.18197378e-01 3.12874352e+03 +6.31800000e-04 -1.65360702e-12 7.09291488e-02 5.55503535e-02 9.19060107e-02 6.10946154e-02 2.32249379e-03 7.18197378e-01 3.12874352e+03 +6.31900000e-04 -1.65360702e-12 7.09291475e-02 5.55503513e-02 9.19060121e-02 6.10946177e-02 2.32249354e-03 7.18197378e-01 3.12874352e+03 +6.32000000e-04 -1.65360702e-12 7.09291463e-02 5.55503491e-02 9.19060135e-02 6.10946200e-02 2.32249328e-03 7.18197378e-01 3.12874352e+03 +6.32100000e-04 -1.65360702e-12 7.09291451e-02 5.55503468e-02 9.19060150e-02 6.10946223e-02 2.32249302e-03 7.18197378e-01 3.12874352e+03 +6.32200000e-04 -1.65360702e-12 7.09291439e-02 5.55503446e-02 9.19060164e-02 6.10946245e-02 2.32249277e-03 7.18197378e-01 3.12874352e+03 +6.32300000e-04 -1.65360702e-12 7.09291427e-02 5.55503424e-02 9.19060178e-02 6.10946268e-02 2.32249251e-03 7.18197378e-01 3.12874352e+03 +6.32400000e-04 -1.65360702e-12 7.09291414e-02 5.55503402e-02 9.19060192e-02 6.10946291e-02 2.32249226e-03 7.18197378e-01 3.12874352e+03 +6.32500000e-04 -1.65360702e-12 7.09291402e-02 5.55503380e-02 9.19060206e-02 6.10946314e-02 2.32249200e-03 7.18197378e-01 3.12874352e+03 +6.32600000e-04 -1.65360702e-12 7.09291390e-02 5.55503358e-02 9.19060220e-02 6.10946336e-02 2.32249175e-03 7.18197378e-01 3.12874352e+03 +6.32700000e-04 -1.65360702e-12 7.09291378e-02 5.55503336e-02 9.19060234e-02 6.10946359e-02 2.32249150e-03 7.18197378e-01 3.12874352e+03 +6.32800000e-04 -1.65360702e-12 7.09291366e-02 5.55503314e-02 9.19060248e-02 6.10946381e-02 2.32249125e-03 7.18197378e-01 3.12874352e+03 +6.32900000e-04 -1.65360702e-12 7.09291354e-02 5.55503292e-02 9.19060262e-02 6.10946404e-02 2.32249100e-03 7.18197378e-01 3.12874352e+03 +6.33000000e-04 -1.65360702e-12 7.09291342e-02 5.55503270e-02 9.19060276e-02 6.10946426e-02 2.32249075e-03 7.18197378e-01 3.12874352e+03 +6.33100000e-04 -1.65360702e-12 7.09291330e-02 5.55503249e-02 9.19060289e-02 6.10946448e-02 2.32249050e-03 7.18197378e-01 3.12874352e+03 +6.33200000e-04 -1.65360702e-12 7.09291318e-02 5.55503227e-02 9.19060303e-02 6.10946471e-02 2.32249025e-03 7.18197378e-01 3.12874352e+03 +6.33300000e-04 -1.65360702e-12 7.09291306e-02 5.55503205e-02 9.19060317e-02 6.10946493e-02 2.32249000e-03 7.18197378e-01 3.12874352e+03 +6.33400000e-04 -1.65360702e-12 7.09291295e-02 5.55503184e-02 9.19060331e-02 6.10946515e-02 2.32248975e-03 7.18197378e-01 3.12874352e+03 +6.33500000e-04 -1.65360702e-12 7.09291283e-02 5.55503162e-02 9.19060344e-02 6.10946537e-02 2.32248950e-03 7.18197378e-01 3.12874352e+03 +6.33600000e-04 -1.65360702e-12 7.09291271e-02 5.55503141e-02 9.19060358e-02 6.10946559e-02 2.32248926e-03 7.18197378e-01 3.12874352e+03 +6.33700000e-04 -1.65360702e-12 7.09291259e-02 5.55503119e-02 9.19060372e-02 6.10946581e-02 2.32248901e-03 7.18197378e-01 3.12874352e+03 +6.33800000e-04 -1.65360702e-12 7.09291248e-02 5.55503098e-02 9.19060385e-02 6.10946603e-02 2.32248876e-03 7.18197378e-01 3.12874352e+03 +6.33900000e-04 -1.65360702e-12 7.09291236e-02 5.55503077e-02 9.19060399e-02 6.10946625e-02 2.32248852e-03 7.18197378e-01 3.12874352e+03 +6.34000000e-04 -1.65360702e-12 7.09291224e-02 5.55503056e-02 9.19060412e-02 6.10946647e-02 2.32248828e-03 7.18197378e-01 3.12874352e+03 +6.34100000e-04 -1.65360702e-12 7.09291213e-02 5.55503034e-02 9.19060426e-02 6.10946669e-02 2.32248803e-03 7.18197378e-01 3.12874352e+03 +6.34200000e-04 -1.65360702e-12 7.09291201e-02 5.55503013e-02 9.19060439e-02 6.10946690e-02 2.32248779e-03 7.18197378e-01 3.12874352e+03 +6.34300000e-04 -1.65360702e-12 7.09291189e-02 5.55502992e-02 9.19060453e-02 6.10946712e-02 2.32248755e-03 7.18197378e-01 3.12874352e+03 +6.34400000e-04 -1.65360702e-12 7.09291178e-02 5.55502971e-02 9.19060466e-02 6.10946734e-02 2.32248730e-03 7.18197378e-01 3.12874352e+03 +6.34500000e-04 -1.65360702e-12 7.09291166e-02 5.55502950e-02 9.19060479e-02 6.10946755e-02 2.32248706e-03 7.18197378e-01 3.12874352e+03 +6.34600000e-04 -1.65360702e-12 7.09291155e-02 5.55502929e-02 9.19060493e-02 6.10946777e-02 2.32248682e-03 7.18197378e-01 3.12874352e+03 +6.34700000e-04 -1.65360702e-12 7.09291143e-02 5.55502908e-02 9.19060506e-02 6.10946798e-02 2.32248658e-03 7.18197378e-01 3.12874352e+03 +6.34800000e-04 -1.65360702e-12 7.09291132e-02 5.55502888e-02 9.19060519e-02 6.10946819e-02 2.32248634e-03 7.18197378e-01 3.12874352e+03 +6.34900000e-04 -1.65360702e-12 7.09291121e-02 5.55502867e-02 9.19060532e-02 6.10946841e-02 2.32248611e-03 7.18197378e-01 3.12874352e+03 +6.35000000e-04 -1.65360702e-12 7.09291109e-02 5.55502846e-02 9.19060546e-02 6.10946862e-02 2.32248587e-03 7.18197378e-01 3.12874352e+03 +6.35100000e-04 -1.65360702e-12 7.09291098e-02 5.55502826e-02 9.19060559e-02 6.10946883e-02 2.32248563e-03 7.18197378e-01 3.12874352e+03 +6.35200000e-04 -1.65360702e-12 7.09291087e-02 5.55502805e-02 9.19060572e-02 6.10946904e-02 2.32248539e-03 7.18197378e-01 3.12874352e+03 +6.35300000e-04 -1.65360702e-12 7.09291075e-02 5.55502784e-02 9.19060585e-02 6.10946925e-02 2.32248516e-03 7.18197378e-01 3.12874352e+03 +6.35400000e-04 -1.65360702e-12 7.09291064e-02 5.55502764e-02 9.19060598e-02 6.10946946e-02 2.32248492e-03 7.18197378e-01 3.12874352e+03 +6.35500000e-04 -1.65360702e-12 7.09291053e-02 5.55502744e-02 9.19060611e-02 6.10946967e-02 2.32248469e-03 7.18197378e-01 3.12874352e+03 +6.35600000e-04 -1.65360702e-12 7.09291042e-02 5.55502723e-02 9.19060624e-02 6.10946988e-02 2.32248445e-03 7.18197378e-01 3.12874352e+03 +6.35700000e-04 -1.65360702e-12 7.09291030e-02 5.55502703e-02 9.19060637e-02 6.10947009e-02 2.32248422e-03 7.18197378e-01 3.12874352e+03 +6.35800000e-04 -1.65360702e-12 7.09291019e-02 5.55502683e-02 9.19060650e-02 6.10947030e-02 2.32248399e-03 7.18197378e-01 3.12874352e+03 +6.35900000e-04 -1.65360702e-12 7.09291008e-02 5.55502662e-02 9.19060663e-02 6.10947051e-02 2.32248375e-03 7.18197378e-01 3.12874352e+03 +6.36000000e-04 -1.65360702e-12 7.09290997e-02 5.55502642e-02 9.19060675e-02 6.10947072e-02 2.32248352e-03 7.18197378e-01 3.12874352e+03 +6.36100000e-04 -1.65360702e-12 7.09290986e-02 5.55502622e-02 9.19060688e-02 6.10947092e-02 2.32248329e-03 7.18197378e-01 3.12874352e+03 +6.36200000e-04 -1.65360702e-12 7.09290975e-02 5.55502602e-02 9.19060701e-02 6.10947113e-02 2.32248306e-03 7.18197378e-01 3.12874352e+03 +6.36300000e-04 -1.65360702e-12 7.09290964e-02 5.55502582e-02 9.19060714e-02 6.10947133e-02 2.32248283e-03 7.18197378e-01 3.12874352e+03 +6.36400000e-04 -1.65360702e-12 7.09290953e-02 5.55502562e-02 9.19060726e-02 6.10947154e-02 2.32248260e-03 7.18197378e-01 3.12874352e+03 +6.36500000e-04 -1.65360702e-12 7.09290942e-02 5.55502542e-02 9.19060739e-02 6.10947174e-02 2.32248237e-03 7.18197378e-01 3.12874417e+03 +6.36600000e-04 -1.65360702e-12 7.09290931e-02 5.55502522e-02 9.19060752e-02 6.10947195e-02 2.32248214e-03 7.18197378e-01 3.12874417e+03 +6.36700000e-04 -1.65360702e-12 7.09290920e-02 5.55502502e-02 9.19060764e-02 6.10947215e-02 2.32248191e-03 7.18197378e-01 3.12874417e+03 +6.36800000e-04 -1.65360702e-12 7.09290910e-02 5.55502483e-02 9.19060777e-02 6.10947236e-02 2.32248169e-03 7.18197378e-01 3.12874417e+03 +6.36900000e-04 -1.65360702e-12 7.09290899e-02 5.55502463e-02 9.19060789e-02 6.10947256e-02 2.32248146e-03 7.18197378e-01 3.12874417e+03 +6.37000000e-04 -1.65360702e-12 7.09290888e-02 5.55502443e-02 9.19060802e-02 6.10947276e-02 2.32248123e-03 7.18197378e-01 3.12874417e+03 +6.37100000e-04 -1.65360702e-12 7.09290877e-02 5.55502424e-02 9.19060814e-02 6.10947296e-02 2.32248101e-03 7.18197378e-01 3.12874417e+03 +6.37200000e-04 -1.65360702e-12 7.09290866e-02 5.55502404e-02 9.19060827e-02 6.10947316e-02 2.32248078e-03 7.18197378e-01 3.12874417e+03 +6.37300000e-04 -1.65360702e-12 7.09290856e-02 5.55502385e-02 9.19060839e-02 6.10947336e-02 2.32248056e-03 7.18197378e-01 3.12874417e+03 +6.37400000e-04 -1.65360702e-12 7.09290845e-02 5.55502365e-02 9.19060852e-02 6.10947356e-02 2.32248034e-03 7.18197378e-01 3.12874417e+03 +6.37500000e-04 -1.65360702e-12 7.09290834e-02 5.55502346e-02 9.19060864e-02 6.10947376e-02 2.32248011e-03 7.18197378e-01 3.12874417e+03 +6.37600000e-04 -1.65360702e-12 7.09290824e-02 5.55502326e-02 9.19060876e-02 6.10947396e-02 2.32247989e-03 7.18197378e-01 3.12874417e+03 +6.37700000e-04 -1.65360702e-12 7.09290813e-02 5.55502307e-02 9.19060889e-02 6.10947416e-02 2.32247967e-03 7.18197378e-01 3.12874417e+03 +6.37800000e-04 -1.65360702e-12 7.09290803e-02 5.55502288e-02 9.19060901e-02 6.10947436e-02 2.32247945e-03 7.18197378e-01 3.12874417e+03 +6.37900000e-04 -1.65360702e-12 7.09290792e-02 5.55502269e-02 9.19060913e-02 6.10947456e-02 2.32247923e-03 7.18197378e-01 3.12874417e+03 +6.38000000e-04 -1.65360702e-12 7.09290781e-02 5.55502250e-02 9.19060925e-02 6.10947475e-02 2.32247901e-03 7.18197378e-01 3.12874417e+03 +6.38100000e-04 -1.65360702e-12 7.09290771e-02 5.55502230e-02 9.19060937e-02 6.10947495e-02 2.32247879e-03 7.18197378e-01 3.12874417e+03 +6.38200000e-04 -1.65360702e-12 7.09290760e-02 5.55502211e-02 9.19060950e-02 6.10947514e-02 2.32247857e-03 7.18197378e-01 3.12874417e+03 +6.38300000e-04 -1.65360702e-12 7.09290750e-02 5.55502192e-02 9.19060962e-02 6.10947534e-02 2.32247835e-03 7.18197378e-01 3.12874417e+03 +6.38400000e-04 -1.65360702e-12 7.09290740e-02 5.55502173e-02 9.19060974e-02 6.10947553e-02 2.32247813e-03 7.18197378e-01 3.12874417e+03 +6.38500000e-04 -1.65360702e-12 7.09290729e-02 5.55502154e-02 9.19060986e-02 6.10947573e-02 2.32247791e-03 7.18197378e-01 3.12874417e+03 +6.38600000e-04 -1.65360702e-12 7.09290719e-02 5.55502136e-02 9.19060998e-02 6.10947592e-02 2.32247769e-03 7.18197378e-01 3.12874417e+03 +6.38700000e-04 -1.65360702e-12 7.09290709e-02 5.55502117e-02 9.19061010e-02 6.10947612e-02 2.32247748e-03 7.18197378e-01 3.12874417e+03 +6.38800000e-04 -1.65360702e-12 7.09290698e-02 5.55502098e-02 9.19061022e-02 6.10947631e-02 2.32247726e-03 7.18197378e-01 3.12874417e+03 +6.38900000e-04 -1.65360702e-12 7.09290688e-02 5.55502079e-02 9.19061034e-02 6.10947650e-02 2.32247705e-03 7.18197378e-01 3.12874417e+03 +6.39000000e-04 -1.65360702e-12 7.09290678e-02 5.55502061e-02 9.19061046e-02 6.10947669e-02 2.32247683e-03 7.18197378e-01 3.12874417e+03 +6.39100000e-04 -1.65360702e-12 7.09290667e-02 5.55502042e-02 9.19061057e-02 6.10947689e-02 2.32247662e-03 7.18197378e-01 3.12874417e+03 +6.39200000e-04 -1.65360702e-12 7.09290657e-02 5.55502023e-02 9.19061069e-02 6.10947708e-02 2.32247640e-03 7.18197378e-01 3.12874417e+03 +6.39300000e-04 -1.65360702e-12 7.09290647e-02 5.55502005e-02 9.19061081e-02 6.10947727e-02 2.32247619e-03 7.18197378e-01 3.12874417e+03 +6.39400000e-04 -1.65360702e-12 7.09290637e-02 5.55501986e-02 9.19061093e-02 6.10947746e-02 2.32247598e-03 7.18197378e-01 3.12874417e+03 +6.39500000e-04 -1.65360702e-12 7.09290627e-02 5.55501968e-02 9.19061104e-02 6.10947765e-02 2.32247577e-03 7.18197378e-01 3.12874417e+03 +6.39600000e-04 -1.65360702e-12 7.09290617e-02 5.55501950e-02 9.19061116e-02 6.10947784e-02 2.32247556e-03 7.18197378e-01 3.12874417e+03 +6.39700000e-04 -1.65360702e-12 7.09290607e-02 5.55501931e-02 9.19061128e-02 6.10947802e-02 2.32247534e-03 7.18197378e-01 3.12874417e+03 +6.39800000e-04 -1.65360702e-12 7.09290597e-02 5.55501913e-02 9.19061140e-02 6.10947821e-02 2.32247513e-03 7.18197378e-01 3.12874417e+03 +6.39900000e-04 -1.65360702e-12 7.09290587e-02 5.55501895e-02 9.19061151e-02 6.10947840e-02 2.32247492e-03 7.18197378e-01 3.12874417e+03 +6.40000000e-04 -1.65360702e-12 7.09290577e-02 5.55501876e-02 9.19061163e-02 6.10947859e-02 2.32247471e-03 7.18197378e-01 3.12874417e+03 +6.40100000e-04 -1.65360702e-12 7.09290567e-02 5.55501858e-02 9.19061174e-02 6.10947877e-02 2.32247451e-03 7.18197378e-01 3.12874417e+03 +6.40200000e-04 -1.65360702e-12 7.09290557e-02 5.55501840e-02 9.19061186e-02 6.10947896e-02 2.32247430e-03 7.18197378e-01 3.12874417e+03 +6.40300000e-04 -1.65360702e-12 7.09290547e-02 5.55501822e-02 9.19061197e-02 6.10947914e-02 2.32247409e-03 7.18197378e-01 3.12874417e+03 +6.40400000e-04 -1.65360702e-12 7.09290537e-02 5.55501804e-02 9.19061209e-02 6.10947933e-02 2.32247388e-03 7.18197378e-01 3.12874417e+03 +6.40500000e-04 -1.65360702e-12 7.09290527e-02 5.55501786e-02 9.19061220e-02 6.10947951e-02 2.32247368e-03 7.18197378e-01 3.12874417e+03 +6.40600000e-04 -1.65360702e-12 7.09290517e-02 5.55501768e-02 9.19061232e-02 6.10947970e-02 2.32247347e-03 7.18197378e-01 3.12874417e+03 +6.40700000e-04 -1.65360702e-12 7.09290507e-02 5.55501750e-02 9.19061243e-02 6.10947988e-02 2.32247326e-03 7.18197378e-01 3.12874417e+03 +6.40800000e-04 -1.65360702e-12 7.09290497e-02 5.55501733e-02 9.19061254e-02 6.10948007e-02 2.32247306e-03 7.18197378e-01 3.12874417e+03 +6.40900000e-04 -1.65360702e-12 7.09290488e-02 5.55501715e-02 9.19061266e-02 6.10948025e-02 2.32247285e-03 7.18197378e-01 3.12874417e+03 +6.41000000e-04 -1.65360702e-12 7.09290478e-02 5.55501697e-02 9.19061277e-02 6.10948043e-02 2.32247265e-03 7.18197378e-01 3.12874417e+03 +6.41100000e-04 -1.65360702e-12 7.09290468e-02 5.55501679e-02 9.19061288e-02 6.10948061e-02 2.32247245e-03 7.18197378e-01 3.12874417e+03 +6.41200000e-04 -1.65360702e-12 7.09290459e-02 5.55501662e-02 9.19061299e-02 6.10948079e-02 2.32247224e-03 7.18197378e-01 3.12874417e+03 +6.41300000e-04 -1.65360702e-12 7.09290449e-02 5.55501644e-02 9.19061311e-02 6.10948098e-02 2.32247204e-03 7.18197378e-01 3.12874417e+03 +6.41400000e-04 -1.65360702e-12 7.09290439e-02 5.55501626e-02 9.19061322e-02 6.10948116e-02 2.32247184e-03 7.18197378e-01 3.12874417e+03 +6.41500000e-04 -1.65360702e-12 7.09290430e-02 5.55501609e-02 9.19061333e-02 6.10948134e-02 2.32247164e-03 7.18197378e-01 3.12874417e+03 +6.41600000e-04 -1.65360702e-12 7.09290420e-02 5.55501591e-02 9.19061344e-02 6.10948152e-02 2.32247144e-03 7.18197378e-01 3.12874417e+03 +6.41700000e-04 -1.65360702e-12 7.09290410e-02 5.55501574e-02 9.19061355e-02 6.10948169e-02 2.32247124e-03 7.18197378e-01 3.12874474e+03 +6.41800000e-04 -1.65360702e-12 7.09290401e-02 5.55501557e-02 9.19061366e-02 6.10948187e-02 2.32247104e-03 7.18197378e-01 3.12874474e+03 +6.41900000e-04 -1.65360702e-12 7.09290391e-02 5.55501539e-02 9.19061377e-02 6.10948205e-02 2.32247084e-03 7.18197378e-01 3.12874474e+03 +6.42000000e-04 -1.65360702e-12 7.09290382e-02 5.55501522e-02 9.19061388e-02 6.10948223e-02 2.32247064e-03 7.18197378e-01 3.12874474e+03 +6.42100000e-04 -1.65360702e-12 7.09290372e-02 5.55501505e-02 9.19061399e-02 6.10948241e-02 2.32247044e-03 7.18197378e-01 3.12874474e+03 +6.42200000e-04 -1.65360702e-12 7.09290363e-02 5.55501488e-02 9.19061410e-02 6.10948258e-02 2.32247024e-03 7.18197378e-01 3.12874474e+03 +6.42300000e-04 -1.65360702e-12 7.09290354e-02 5.55501470e-02 9.19061421e-02 6.10948276e-02 2.32247005e-03 7.18197378e-01 3.12874474e+03 +6.42400000e-04 -1.65360702e-12 7.09290344e-02 5.55501453e-02 9.19061432e-02 6.10948294e-02 2.32246985e-03 7.18197378e-01 3.12874474e+03 +6.42500000e-04 -1.65360702e-12 7.09290335e-02 5.55501436e-02 9.19061443e-02 6.10948311e-02 2.32246965e-03 7.18197378e-01 3.12874474e+03 +6.42600000e-04 -1.65360702e-12 7.09290325e-02 5.55501419e-02 9.19061454e-02 6.10948329e-02 2.32246946e-03 7.18197378e-01 3.12874474e+03 +6.42700000e-04 -1.65360702e-12 7.09290316e-02 5.55501402e-02 9.19061465e-02 6.10948346e-02 2.32246926e-03 7.18197378e-01 3.12874474e+03 +6.42800000e-04 -1.65360702e-12 7.09290307e-02 5.55501385e-02 9.19061475e-02 6.10948363e-02 2.32246907e-03 7.18197378e-01 3.12874474e+03 +6.42900000e-04 -1.65360702e-12 7.09290297e-02 5.55501368e-02 9.19061486e-02 6.10948381e-02 2.32246887e-03 7.18197378e-01 3.12874474e+03 +6.43000000e-04 -1.65360702e-12 7.09290288e-02 5.55501352e-02 9.19061497e-02 6.10948398e-02 2.32246868e-03 7.18197378e-01 3.12874474e+03 +6.43100000e-04 -1.65360702e-12 7.09290279e-02 5.55501335e-02 9.19061507e-02 6.10948415e-02 2.32246848e-03 7.18197378e-01 3.12874474e+03 +6.43200000e-04 -1.65360702e-12 7.09290270e-02 5.55501318e-02 9.19061518e-02 6.10948433e-02 2.32246829e-03 7.18197378e-01 3.12874474e+03 +6.43300000e-04 -1.65360702e-12 7.09290261e-02 5.55501301e-02 9.19061529e-02 6.10948450e-02 2.32246810e-03 7.18197378e-01 3.12874474e+03 +6.43400000e-04 -1.65360702e-12 7.09290251e-02 5.55501285e-02 9.19061539e-02 6.10948467e-02 2.32246791e-03 7.18197378e-01 3.12874474e+03 +6.43500000e-04 -1.65360702e-12 7.09290242e-02 5.55501268e-02 9.19061550e-02 6.10948484e-02 2.32246772e-03 7.18197378e-01 3.12874474e+03 +6.43600000e-04 -1.65360702e-12 7.09290233e-02 5.55501251e-02 9.19061561e-02 6.10948501e-02 2.32246753e-03 7.18197378e-01 3.12874474e+03 +6.43700000e-04 -1.65360702e-12 7.09290224e-02 5.55501235e-02 9.19061571e-02 6.10948518e-02 2.32246733e-03 7.18197378e-01 3.12874474e+03 +6.43800000e-04 -1.65360702e-12 7.09290215e-02 5.55501218e-02 9.19061582e-02 6.10948535e-02 2.32246714e-03 7.18197378e-01 3.12874474e+03 +6.43900000e-04 -1.65360702e-12 7.09290206e-02 5.55501202e-02 9.19061592e-02 6.10948552e-02 2.32246696e-03 7.18197378e-01 3.12874474e+03 +6.44000000e-04 -1.65360702e-12 7.09290197e-02 5.55501185e-02 9.19061603e-02 6.10948569e-02 2.32246677e-03 7.18197378e-01 3.12874474e+03 +6.44100000e-04 -1.65360702e-12 7.09290188e-02 5.55501169e-02 9.19061613e-02 6.10948586e-02 2.32246658e-03 7.18197378e-01 3.12874474e+03 +6.44200000e-04 -1.65360702e-12 7.09290179e-02 5.55501153e-02 9.19061623e-02 6.10948603e-02 2.32246639e-03 7.18197378e-01 3.12874474e+03 +6.44300000e-04 -1.65360702e-12 7.09290170e-02 5.55501136e-02 9.19061634e-02 6.10948619e-02 2.32246620e-03 7.18197378e-01 3.12874474e+03 +6.44400000e-04 -1.65360702e-12 7.09290161e-02 5.55501120e-02 9.19061644e-02 6.10948636e-02 2.32246602e-03 7.18197378e-01 3.12874474e+03 +6.44500000e-04 -1.65360702e-12 7.09290152e-02 5.55501104e-02 9.19061654e-02 6.10948653e-02 2.32246583e-03 7.18197378e-01 3.12874474e+03 +6.44600000e-04 -1.65360702e-12 7.09290143e-02 5.55501088e-02 9.19061665e-02 6.10948669e-02 2.32246564e-03 7.18197378e-01 3.12874474e+03 +6.44700000e-04 -1.65360702e-12 7.09290134e-02 5.55501072e-02 9.19061675e-02 6.10948686e-02 2.32246546e-03 7.18197378e-01 3.12874474e+03 +6.44800000e-04 -1.65360702e-12 7.09290126e-02 5.55501055e-02 9.19061685e-02 6.10948702e-02 2.32246527e-03 7.18197378e-01 3.12874474e+03 +6.44900000e-04 -1.65360702e-12 7.09290117e-02 5.55501039e-02 9.19061695e-02 6.10948719e-02 2.32246509e-03 7.18197378e-01 3.12874474e+03 +6.45000000e-04 -1.65360702e-12 7.09290108e-02 5.55501023e-02 9.19061706e-02 6.10948735e-02 2.32246490e-03 7.18197378e-01 3.12874474e+03 +6.45100000e-04 -1.65360702e-12 7.09290099e-02 5.55501007e-02 9.19061716e-02 6.10948752e-02 2.32246472e-03 7.18197378e-01 3.12874474e+03 +6.45200000e-04 -1.65360702e-12 7.09290090e-02 5.55500992e-02 9.19061726e-02 6.10948768e-02 2.32246454e-03 7.18197378e-01 3.12874474e+03 +6.45300000e-04 -1.65360702e-12 7.09290082e-02 5.55500976e-02 9.19061736e-02 6.10948785e-02 2.32246435e-03 7.18197378e-01 3.12874474e+03 +6.45400000e-04 -1.65360702e-12 7.09290073e-02 5.55500960e-02 9.19061746e-02 6.10948801e-02 2.32246417e-03 7.18197378e-01 3.12874474e+03 +6.45500000e-04 -1.65360702e-12 7.09290064e-02 5.55500944e-02 9.19061756e-02 6.10948817e-02 2.32246399e-03 7.18197378e-01 3.12874474e+03 +6.45600000e-04 -1.65360702e-12 7.09290056e-02 5.55500928e-02 9.19061766e-02 6.10948833e-02 2.32246381e-03 7.18197378e-01 3.12874474e+03 +6.45700000e-04 -1.65360702e-12 7.09290047e-02 5.55500912e-02 9.19061776e-02 6.10948849e-02 2.32246363e-03 7.18197378e-01 3.12874474e+03 +6.45800000e-04 -1.65360702e-12 7.09290038e-02 5.55500897e-02 9.19061786e-02 6.10948866e-02 2.32246345e-03 7.18197378e-01 3.12874474e+03 +6.45900000e-04 -1.65360702e-12 7.09290030e-02 5.55500881e-02 9.19061796e-02 6.10948882e-02 2.32246327e-03 7.18197378e-01 3.12874474e+03 +6.46000000e-04 -1.65360702e-12 7.09290021e-02 5.55500866e-02 9.19061806e-02 6.10948898e-02 2.32246309e-03 7.18197378e-01 3.12874474e+03 +6.46100000e-04 -1.65360702e-12 7.09290013e-02 5.55500850e-02 9.19061816e-02 6.10948914e-02 2.32246291e-03 7.18197378e-01 3.12874474e+03 +6.46200000e-04 -1.65360702e-12 7.09290004e-02 5.55500834e-02 9.19061826e-02 6.10948930e-02 2.32246273e-03 7.18197378e-01 3.12874474e+03 +6.46300000e-04 -1.65360702e-12 7.09289996e-02 5.55500819e-02 9.19061836e-02 6.10948946e-02 2.32246255e-03 7.18197378e-01 3.12874474e+03 +6.46400000e-04 -1.65360702e-12 7.09289987e-02 5.55500804e-02 9.19061846e-02 6.10948961e-02 2.32246237e-03 7.18197378e-01 3.12874474e+03 +6.46500000e-04 -1.65360702e-12 7.09289979e-02 5.55500788e-02 9.19061855e-02 6.10948977e-02 2.32246220e-03 7.18197378e-01 3.12874474e+03 +6.46600000e-04 -1.65360702e-12 7.09289970e-02 5.55500773e-02 9.19061865e-02 6.10948993e-02 2.32246202e-03 7.18197378e-01 3.12874474e+03 +6.46700000e-04 -1.65360702e-12 7.09289962e-02 5.55500757e-02 9.19061875e-02 6.10949009e-02 2.32246184e-03 7.18197378e-01 3.12874474e+03 +6.46800000e-04 -1.65360702e-12 7.09289953e-02 5.55500742e-02 9.19061885e-02 6.10949025e-02 2.32246167e-03 7.18197378e-01 3.12874474e+03 +6.46900000e-04 -1.65360702e-12 7.09289945e-02 5.55500727e-02 9.19061894e-02 6.10949040e-02 2.32246149e-03 7.18197378e-01 3.12874474e+03 +6.47000000e-04 -1.65360702e-12 7.09289937e-02 5.55500712e-02 9.19061904e-02 6.10949056e-02 2.32246132e-03 7.18197378e-01 3.12874523e+03 +6.47100000e-04 -1.65360702e-12 7.09289928e-02 5.55500696e-02 9.19061914e-02 6.10949071e-02 2.32246114e-03 7.18197378e-01 3.12874523e+03 +6.47200000e-04 -1.65360702e-12 7.09289920e-02 5.55500681e-02 9.19061923e-02 6.10949087e-02 2.32246097e-03 7.18197378e-01 3.12874523e+03 +6.47300000e-04 -1.65360702e-12 7.09289912e-02 5.55500666e-02 9.19061933e-02 6.10949103e-02 2.32246080e-03 7.18197378e-01 3.12874523e+03 +6.47400000e-04 -1.65360702e-12 7.09289904e-02 5.55500651e-02 9.19061943e-02 6.10949118e-02 2.32246062e-03 7.18197378e-01 3.12874523e+03 +6.47500000e-04 -1.65360702e-12 7.09289895e-02 5.55500636e-02 9.19061952e-02 6.10949133e-02 2.32246045e-03 7.18197378e-01 3.12874523e+03 +6.47600000e-04 -1.65360702e-12 7.09289887e-02 5.55500621e-02 9.19061962e-02 6.10949149e-02 2.32246028e-03 7.18197378e-01 3.12874523e+03 +6.47700000e-04 -1.65360702e-12 7.09289879e-02 5.55500606e-02 9.19061971e-02 6.10949164e-02 2.32246011e-03 7.18197378e-01 3.12874523e+03 +6.47800000e-04 -1.65360702e-12 7.09289871e-02 5.55500591e-02 9.19061981e-02 6.10949180e-02 2.32245993e-03 7.18197378e-01 3.12874523e+03 +6.47900000e-04 -1.65360702e-12 7.09289862e-02 5.55500576e-02 9.19061990e-02 6.10949195e-02 2.32245976e-03 7.18197378e-01 3.12874523e+03 +6.48000000e-04 -1.65360702e-12 7.09289854e-02 5.55500562e-02 9.19062000e-02 6.10949210e-02 2.32245959e-03 7.18197378e-01 3.12874523e+03 +6.48100000e-04 -1.65360702e-12 7.09289846e-02 5.55500547e-02 9.19062009e-02 6.10949225e-02 2.32245942e-03 7.18197378e-01 3.12874523e+03 +6.48200000e-04 -1.65360702e-12 7.09289838e-02 5.55500532e-02 9.19062018e-02 6.10949240e-02 2.32245925e-03 7.18197378e-01 3.12874523e+03 +6.48300000e-04 -1.65360702e-12 7.09289830e-02 5.55500517e-02 9.19062028e-02 6.10949256e-02 2.32245908e-03 7.18197378e-01 3.12874523e+03 +6.48400000e-04 -1.65360702e-12 7.09289822e-02 5.55500503e-02 9.19062037e-02 6.10949271e-02 2.32245892e-03 7.18197378e-01 3.12874523e+03 +6.48500000e-04 -1.65360702e-12 7.09289814e-02 5.55500488e-02 9.19062046e-02 6.10949286e-02 2.32245875e-03 7.18197378e-01 3.12874523e+03 +6.48600000e-04 -1.65360702e-12 7.09289806e-02 5.55500474e-02 9.19062056e-02 6.10949301e-02 2.32245858e-03 7.18197378e-01 3.12874523e+03 +6.48700000e-04 -1.65360702e-12 7.09289798e-02 5.55500459e-02 9.19062065e-02 6.10949316e-02 2.32245841e-03 7.18197378e-01 3.12874523e+03 +6.48800000e-04 -1.65360702e-12 7.09289790e-02 5.55500444e-02 9.19062074e-02 6.10949331e-02 2.32245824e-03 7.18197378e-01 3.12874523e+03 +6.48900000e-04 -1.65360702e-12 7.09289782e-02 5.55500430e-02 9.19062083e-02 6.10949345e-02 2.32245808e-03 7.18197378e-01 3.12874523e+03 +6.49000000e-04 -1.65360702e-12 7.09289774e-02 5.55500415e-02 9.19062093e-02 6.10949360e-02 2.32245791e-03 7.18197378e-01 3.12874523e+03 +6.49100000e-04 -1.65360702e-12 7.09289766e-02 5.55500401e-02 9.19062102e-02 6.10949375e-02 2.32245775e-03 7.18197378e-01 3.12874523e+03 +6.49200000e-04 -1.65360702e-12 7.09289758e-02 5.55500387e-02 9.19062111e-02 6.10949390e-02 2.32245758e-03 7.18197378e-01 3.12874523e+03 +6.49300000e-04 -1.65360702e-12 7.09289750e-02 5.55500372e-02 9.19062120e-02 6.10949405e-02 2.32245742e-03 7.18197378e-01 3.12874523e+03 +6.49400000e-04 -1.65360702e-12 7.09289742e-02 5.55500358e-02 9.19062129e-02 6.10949419e-02 2.32245725e-03 7.18197378e-01 3.12874523e+03 +6.49500000e-04 -1.65360702e-12 7.09289735e-02 5.55500344e-02 9.19062138e-02 6.10949434e-02 2.32245709e-03 7.18197378e-01 3.12874523e+03 +6.49600000e-04 -1.65360702e-12 7.09289727e-02 5.55500330e-02 9.19062147e-02 6.10949449e-02 2.32245692e-03 7.18197378e-01 3.12874523e+03 +6.49700000e-04 -1.65360702e-12 7.09289719e-02 5.55500315e-02 9.19062156e-02 6.10949463e-02 2.32245676e-03 7.18197378e-01 3.12874523e+03 +6.49800000e-04 -1.65360702e-12 7.09289711e-02 5.55500301e-02 9.19062165e-02 6.10949478e-02 2.32245660e-03 7.18197378e-01 3.12874523e+03 +6.49900000e-04 -1.65360702e-12 7.09289704e-02 5.55500287e-02 9.19062174e-02 6.10949492e-02 2.32245643e-03 7.18197378e-01 3.12874523e+03 +6.50000000e-04 -1.65360702e-12 7.09289696e-02 5.55500273e-02 9.19062183e-02 6.10949507e-02 2.32245627e-03 7.18197378e-01 3.12874523e+03 +6.50100000e-04 -1.65360702e-12 7.09289688e-02 5.55500259e-02 9.19062192e-02 6.10949521e-02 2.32245611e-03 7.18197378e-01 3.12874523e+03 +6.50200000e-04 -1.65360702e-12 7.09289680e-02 5.55500245e-02 9.19062201e-02 6.10949536e-02 2.32245595e-03 7.18197378e-01 3.12874523e+03 +6.50300000e-04 -1.65360702e-12 7.09289673e-02 5.55500231e-02 9.19062210e-02 6.10949550e-02 2.32245579e-03 7.18197378e-01 3.12874523e+03 +6.50400000e-04 -1.65360702e-12 7.09289665e-02 5.55500217e-02 9.19062219e-02 6.10949564e-02 2.32245563e-03 7.18197378e-01 3.12874523e+03 +6.50500000e-04 -1.65360702e-12 7.09289657e-02 5.55500203e-02 9.19062228e-02 6.10949579e-02 2.32245547e-03 7.18197378e-01 3.12874523e+03 +6.50600000e-04 -1.65360702e-12 7.09289650e-02 5.55500189e-02 9.19062237e-02 6.10949593e-02 2.32245531e-03 7.18197378e-01 3.12874523e+03 +6.50700000e-04 -1.65360702e-12 7.09289642e-02 5.55500175e-02 9.19062245e-02 6.10949607e-02 2.32245515e-03 7.18197378e-01 3.12874523e+03 +6.50800000e-04 -1.65360702e-12 7.09289635e-02 5.55500162e-02 9.19062254e-02 6.10949621e-02 2.32245499e-03 7.18197378e-01 3.12874523e+03 +6.50900000e-04 -1.65360702e-12 7.09289627e-02 5.55500148e-02 9.19062263e-02 6.10949635e-02 2.32245483e-03 7.18197378e-01 3.12874523e+03 +6.51000000e-04 -1.65360702e-12 7.09289619e-02 5.55500134e-02 9.19062272e-02 6.10949650e-02 2.32245468e-03 7.18197378e-01 3.12874523e+03 +6.51100000e-04 -1.65360702e-12 7.09289612e-02 5.55500120e-02 9.19062280e-02 6.10949664e-02 2.32245452e-03 7.18197378e-01 3.12874523e+03 +6.51200000e-04 -1.65360702e-12 7.09289604e-02 5.55500107e-02 9.19062289e-02 6.10949678e-02 2.32245436e-03 7.18197378e-01 3.12874523e+03 +6.51300000e-04 -1.65360702e-12 7.09289597e-02 5.55500093e-02 9.19062298e-02 6.10949692e-02 2.32245420e-03 7.18197378e-01 3.12874523e+03 +6.51400000e-04 -1.65360702e-12 7.09289590e-02 5.55500080e-02 9.19062306e-02 6.10949706e-02 2.32245405e-03 7.18197378e-01 3.12874523e+03 +6.51500000e-04 -1.65360702e-12 7.09289582e-02 5.55500066e-02 9.19062315e-02 6.10949720e-02 2.32245389e-03 7.18197378e-01 3.12874523e+03 +6.51600000e-04 -1.65360702e-12 7.09289575e-02 5.55500052e-02 9.19062324e-02 6.10949733e-02 2.32245374e-03 7.18197378e-01 3.12874523e+03 +6.51700000e-04 -1.65360702e-12 7.09289567e-02 5.55500039e-02 9.19062332e-02 6.10949747e-02 2.32245358e-03 7.18197378e-01 3.12874523e+03 +6.51800000e-04 -1.65360702e-12 7.09289560e-02 5.55500026e-02 9.19062341e-02 6.10949761e-02 2.32245343e-03 7.18197378e-01 3.12874523e+03 +6.51900000e-04 -1.65360702e-12 7.09289552e-02 5.55500012e-02 9.19062349e-02 6.10949775e-02 2.32245327e-03 7.18197378e-01 3.12874523e+03 +6.52000000e-04 -1.65360702e-12 7.09289545e-02 5.55499999e-02 9.19062358e-02 6.10949789e-02 2.32245312e-03 7.18197378e-01 3.12874523e+03 +6.52100000e-04 -1.65360702e-12 7.09289538e-02 5.55499985e-02 9.19062366e-02 6.10949802e-02 2.32245296e-03 7.18197378e-01 3.12874523e+03 +6.52200000e-04 -1.65360702e-12 7.09289530e-02 5.55499972e-02 9.19062375e-02 6.10949816e-02 2.32245281e-03 7.18197378e-01 3.12874523e+03 +6.52300000e-04 -1.65360702e-12 7.09289523e-02 5.55499959e-02 9.19062383e-02 6.10949830e-02 2.32245266e-03 7.18197378e-01 3.12874567e+03 +6.52400000e-04 -1.65360702e-12 7.09289516e-02 5.55499946e-02 9.19062392e-02 6.10949843e-02 2.32245251e-03 7.18197378e-01 3.12874567e+03 +6.52500000e-04 -1.65360702e-12 7.09289509e-02 5.55499932e-02 9.19062400e-02 6.10949857e-02 2.32245235e-03 7.18197378e-01 3.12874567e+03 +6.52600000e-04 -1.65360702e-12 7.09289501e-02 5.55499919e-02 9.19062408e-02 6.10949870e-02 2.32245220e-03 7.18197378e-01 3.12874567e+03 +6.52700000e-04 -1.65360702e-12 7.09289494e-02 5.55499906e-02 9.19062417e-02 6.10949884e-02 2.32245205e-03 7.18197378e-01 3.12874567e+03 +6.52800000e-04 -1.65360702e-12 7.09289487e-02 5.55499893e-02 9.19062425e-02 6.10949897e-02 2.32245190e-03 7.18197378e-01 3.12874567e+03 +6.52900000e-04 -1.65360702e-12 7.09289480e-02 5.55499880e-02 9.19062433e-02 6.10949911e-02 2.32245175e-03 7.18197378e-01 3.12874567e+03 +6.53000000e-04 -1.65360702e-12 7.09289473e-02 5.55499867e-02 9.19062442e-02 6.10949924e-02 2.32245160e-03 7.18197378e-01 3.12874567e+03 +6.53100000e-04 -1.65360702e-12 7.09289466e-02 5.55499854e-02 9.19062450e-02 6.10949938e-02 2.32245145e-03 7.18197378e-01 3.12874567e+03 +6.53200000e-04 -1.65360702e-12 7.09289458e-02 5.55499841e-02 9.19062458e-02 6.10949951e-02 2.32245130e-03 7.18197378e-01 3.12874567e+03 +6.53300000e-04 -1.65360702e-12 7.09289451e-02 5.55499828e-02 9.19062467e-02 6.10949964e-02 2.32245115e-03 7.18197378e-01 3.12874567e+03 +6.53400000e-04 -1.65360702e-12 7.09289444e-02 5.55499815e-02 9.19062475e-02 6.10949978e-02 2.32245100e-03 7.18197378e-01 3.12874567e+03 +6.53500000e-04 -1.65360702e-12 7.09289437e-02 5.55499802e-02 9.19062483e-02 6.10949991e-02 2.32245086e-03 7.18197378e-01 3.12874567e+03 +6.53600000e-04 -1.65360702e-12 7.09289430e-02 5.55499789e-02 9.19062491e-02 6.10950004e-02 2.32245071e-03 7.18197378e-01 3.12874567e+03 +6.53700000e-04 -1.65360702e-12 7.09289423e-02 5.55499776e-02 9.19062499e-02 6.10950017e-02 2.32245056e-03 7.18197378e-01 3.12874567e+03 +6.53800000e-04 -1.65360702e-12 7.09289416e-02 5.55499764e-02 9.19062507e-02 6.10950030e-02 2.32245041e-03 7.18197378e-01 3.12874567e+03 +6.53900000e-04 -1.65360702e-12 7.09289409e-02 5.55499751e-02 9.19062516e-02 6.10950043e-02 2.32245027e-03 7.18197378e-01 3.12874567e+03 +6.54000000e-04 -1.65360702e-12 7.09289402e-02 5.55499738e-02 9.19062524e-02 6.10950056e-02 2.32245012e-03 7.18197378e-01 3.12874567e+03 +6.54100000e-04 -1.65360702e-12 7.09289395e-02 5.55499726e-02 9.19062532e-02 6.10950069e-02 2.32244998e-03 7.18197378e-01 3.12874567e+03 +6.54200000e-04 -1.65360702e-12 7.09289388e-02 5.55499713e-02 9.19062540e-02 6.10950082e-02 2.32244983e-03 7.18197378e-01 3.12874567e+03 +6.54300000e-04 -1.65360702e-12 7.09289381e-02 5.55499700e-02 9.19062548e-02 6.10950095e-02 2.32244969e-03 7.18197378e-01 3.12874567e+03 +6.54400000e-04 -1.65360702e-12 7.09289374e-02 5.55499688e-02 9.19062556e-02 6.10950108e-02 2.32244954e-03 7.18197378e-01 3.12874567e+03 +6.54500000e-04 -1.65360702e-12 7.09289367e-02 5.55499675e-02 9.19062564e-02 6.10950121e-02 2.32244940e-03 7.18197378e-01 3.12874567e+03 +6.54600000e-04 -1.65360702e-12 7.09289360e-02 5.55499663e-02 9.19062572e-02 6.10950134e-02 2.32244925e-03 7.18197378e-01 3.12874567e+03 +6.54700000e-04 -1.65360702e-12 7.09289354e-02 5.55499650e-02 9.19062580e-02 6.10950147e-02 2.32244911e-03 7.18197378e-01 3.12874567e+03 +6.54800000e-04 -1.65360702e-12 7.09289347e-02 5.55499638e-02 9.19062588e-02 6.10950160e-02 2.32244897e-03 7.18197378e-01 3.12874567e+03 +6.54900000e-04 -1.65360702e-12 7.09289340e-02 5.55499625e-02 9.19062596e-02 6.10950173e-02 2.32244882e-03 7.18197378e-01 3.12874567e+03 +6.55000000e-04 -1.65360702e-12 7.09289333e-02 5.55499613e-02 9.19062603e-02 6.10950185e-02 2.32244868e-03 7.18197378e-01 3.12874567e+03 +6.55100000e-04 -1.65360702e-12 7.09289326e-02 5.55499601e-02 9.19062611e-02 6.10950198e-02 2.32244854e-03 7.18197378e-01 3.12874567e+03 +6.55200000e-04 -1.65360702e-12 7.09289320e-02 5.55499588e-02 9.19062619e-02 6.10950211e-02 2.32244840e-03 7.18197378e-01 3.12874567e+03 +6.55300000e-04 -1.65360702e-12 7.09289313e-02 5.55499576e-02 9.19062627e-02 6.10950223e-02 2.32244825e-03 7.18197378e-01 3.12874567e+03 +6.55400000e-04 -1.65360702e-12 7.09289306e-02 5.55499564e-02 9.19062635e-02 6.10950236e-02 2.32244811e-03 7.18197378e-01 3.12874567e+03 +6.55500000e-04 -1.65360702e-12 7.09289299e-02 5.55499551e-02 9.19062643e-02 6.10950248e-02 2.32244797e-03 7.18197378e-01 3.12874567e+03 +6.55600000e-04 -1.65360702e-12 7.09289293e-02 5.55499539e-02 9.19062650e-02 6.10950261e-02 2.32244783e-03 7.18197378e-01 3.12874567e+03 +6.55700000e-04 -1.65360702e-12 7.09289286e-02 5.55499527e-02 9.19062658e-02 6.10950274e-02 2.32244769e-03 7.18197378e-01 3.12874567e+03 +6.55800000e-04 -1.65360702e-12 7.09289279e-02 5.55499515e-02 9.19062666e-02 6.10950286e-02 2.32244755e-03 7.18197378e-01 3.12874567e+03 +6.55900000e-04 -1.65360702e-12 7.09289273e-02 5.55499503e-02 9.19062673e-02 6.10950298e-02 2.32244741e-03 7.18197378e-01 3.12874567e+03 +6.56000000e-04 -1.65360702e-12 7.09289266e-02 5.55499491e-02 9.19062681e-02 6.10950311e-02 2.32244727e-03 7.18197378e-01 3.12874567e+03 +6.56100000e-04 -1.65360702e-12 7.09289259e-02 5.55499479e-02 9.19062689e-02 6.10950323e-02 2.32244714e-03 7.18197378e-01 3.12874567e+03 +6.56200000e-04 -1.65360702e-12 7.09289253e-02 5.55499467e-02 9.19062696e-02 6.10950336e-02 2.32244700e-03 7.18197378e-01 3.12874567e+03 +6.56300000e-04 -1.65360702e-12 7.09289246e-02 5.55499455e-02 9.19062704e-02 6.10950348e-02 2.32244686e-03 7.18197378e-01 3.12874567e+03 +6.56400000e-04 -1.65360702e-12 7.09289240e-02 5.55499443e-02 9.19062712e-02 6.10950360e-02 2.32244672e-03 7.18197378e-01 3.12874567e+03 +6.56500000e-04 -1.65360702e-12 7.09289233e-02 5.55499431e-02 9.19062719e-02 6.10950372e-02 2.32244659e-03 7.18197378e-01 3.12874567e+03 +6.56600000e-04 -1.65360702e-12 7.09289227e-02 5.55499419e-02 9.19062727e-02 6.10950385e-02 2.32244645e-03 7.18197378e-01 3.12874567e+03 +6.56700000e-04 -1.65360702e-12 7.09289220e-02 5.55499407e-02 9.19062734e-02 6.10950397e-02 2.32244631e-03 7.18197378e-01 3.12874567e+03 +6.56800000e-04 -1.65360702e-12 7.09289214e-02 5.55499395e-02 9.19062742e-02 6.10950409e-02 2.32244618e-03 7.18197378e-01 3.12874567e+03 +6.56900000e-04 -1.65360702e-12 7.09289207e-02 5.55499383e-02 9.19062749e-02 6.10950421e-02 2.32244604e-03 7.18197378e-01 3.12874567e+03 +6.57000000e-04 -1.65360702e-12 7.09289201e-02 5.55499372e-02 9.19062757e-02 6.10950433e-02 2.32244591e-03 7.18197378e-01 3.12874567e+03 +6.57100000e-04 -1.65360702e-12 7.09289194e-02 5.55499360e-02 9.19062764e-02 6.10950445e-02 2.32244577e-03 7.18197378e-01 3.12874567e+03 +6.57200000e-04 -1.65360702e-12 7.09289188e-02 5.55499348e-02 9.19062772e-02 6.10950457e-02 2.32244564e-03 7.18197378e-01 3.12874567e+03 +6.57300000e-04 -1.65360702e-12 7.09289181e-02 5.55499336e-02 9.19062779e-02 6.10950469e-02 2.32244550e-03 7.18197378e-01 3.12874567e+03 +6.57400000e-04 -1.65360702e-12 7.09289175e-02 5.55499325e-02 9.19062787e-02 6.10950481e-02 2.32244537e-03 7.18197378e-01 3.12874567e+03 +6.57500000e-04 -1.65360702e-12 7.09289169e-02 5.55499313e-02 9.19062794e-02 6.10950493e-02 2.32244523e-03 7.18197378e-01 3.12874605e+03 +6.57600000e-04 -1.65360702e-12 7.09289162e-02 5.55499302e-02 9.19062801e-02 6.10950505e-02 2.32244510e-03 7.18197378e-01 3.12874605e+03 +6.57700000e-04 -1.65360702e-12 7.09289156e-02 5.55499290e-02 9.19062809e-02 6.10950517e-02 2.32244497e-03 7.18197378e-01 3.12874605e+03 +6.57800000e-04 -1.65360702e-12 7.09289150e-02 5.55499279e-02 9.19062816e-02 6.10950529e-02 2.32244483e-03 7.18197378e-01 3.12874605e+03 +6.57900000e-04 -1.65360702e-12 7.09289143e-02 5.55499267e-02 9.19062824e-02 6.10950541e-02 2.32244470e-03 7.18197378e-01 3.12874605e+03 +6.58000000e-04 -1.65360702e-12 7.09289137e-02 5.55499256e-02 9.19062831e-02 6.10950553e-02 2.32244457e-03 7.18197378e-01 3.12874605e+03 +6.58100000e-04 -1.65360702e-12 7.09289131e-02 5.55499244e-02 9.19062838e-02 6.10950564e-02 2.32244444e-03 7.18197378e-01 3.12874605e+03 +6.58200000e-04 -1.65360702e-12 7.09289124e-02 5.55499233e-02 9.19062845e-02 6.10950576e-02 2.32244431e-03 7.18197378e-01 3.12874605e+03 +6.58300000e-04 -1.65360702e-12 7.09289118e-02 5.55499221e-02 9.19062853e-02 6.10950588e-02 2.32244418e-03 7.18197378e-01 3.12874605e+03 +6.58400000e-04 -1.65360702e-12 7.09289112e-02 5.55499210e-02 9.19062860e-02 6.10950599e-02 2.32244405e-03 7.18197378e-01 3.12874605e+03 +6.58500000e-04 -1.65360702e-12 7.09289106e-02 5.55499199e-02 9.19062867e-02 6.10950611e-02 2.32244392e-03 7.18197378e-01 3.12874605e+03 +6.58600000e-04 -1.65360702e-12 7.09289099e-02 5.55499187e-02 9.19062874e-02 6.10950623e-02 2.32244379e-03 7.18197378e-01 3.12874605e+03 +6.58700000e-04 -1.65360702e-12 7.09289093e-02 5.55499176e-02 9.19062881e-02 6.10950634e-02 2.32244366e-03 7.18197378e-01 3.12874605e+03 +6.58800000e-04 -1.65360702e-12 7.09289087e-02 5.55499165e-02 9.19062889e-02 6.10950646e-02 2.32244353e-03 7.18197378e-01 3.12874605e+03 +6.58900000e-04 -1.65360702e-12 7.09289081e-02 5.55499154e-02 9.19062896e-02 6.10950657e-02 2.32244340e-03 7.18197378e-01 3.12874605e+03 +6.59000000e-04 -1.65360702e-12 7.09289075e-02 5.55499142e-02 9.19062903e-02 6.10950669e-02 2.32244327e-03 7.18197378e-01 3.12874605e+03 +6.59100000e-04 -1.65360702e-12 7.09289069e-02 5.55499131e-02 9.19062910e-02 6.10950680e-02 2.32244314e-03 7.18197378e-01 3.12874605e+03 +6.59200000e-04 -1.65360702e-12 7.09289063e-02 5.55499120e-02 9.19062917e-02 6.10950692e-02 2.32244301e-03 7.18197378e-01 3.12874605e+03 +6.59300000e-04 -1.65360702e-12 7.09289056e-02 5.55499109e-02 9.19062924e-02 6.10950703e-02 2.32244289e-03 7.18197378e-01 3.12874605e+03 +6.59400000e-04 -1.65360702e-12 7.09289050e-02 5.55499098e-02 9.19062931e-02 6.10950715e-02 2.32244276e-03 7.18197378e-01 3.12874605e+03 +6.59500000e-04 -1.65360702e-12 7.09289044e-02 5.55499087e-02 9.19062938e-02 6.10950726e-02 2.32244263e-03 7.18197378e-01 3.12874605e+03 +6.59600000e-04 -1.65360702e-12 7.09289038e-02 5.55499076e-02 9.19062945e-02 6.10950737e-02 2.32244250e-03 7.18197378e-01 3.12874605e+03 +6.59700000e-04 -1.65360702e-12 7.09289032e-02 5.55499065e-02 9.19062952e-02 6.10950748e-02 2.32244238e-03 7.18197378e-01 3.12874605e+03 +6.59800000e-04 -1.65360702e-12 7.09289026e-02 5.55499054e-02 9.19062959e-02 6.10950760e-02 2.32244225e-03 7.18197378e-01 3.12874605e+03 +6.59900000e-04 -1.65360702e-12 7.09289020e-02 5.55499043e-02 9.19062966e-02 6.10950771e-02 2.32244213e-03 7.18197378e-01 3.12874605e+03 +6.60000000e-04 -1.65360702e-12 7.09289014e-02 5.55499032e-02 9.19062973e-02 6.10950782e-02 2.32244200e-03 7.18197378e-01 3.12874605e+03 +6.60100000e-04 -1.65360702e-12 7.09289008e-02 5.55499021e-02 9.19062980e-02 6.10950793e-02 2.32244188e-03 7.18197378e-01 3.12874605e+03 +6.60200000e-04 -1.65360702e-12 7.09289002e-02 5.55499010e-02 9.19062987e-02 6.10950804e-02 2.32244175e-03 7.18197378e-01 3.12874605e+03 +6.60300000e-04 -1.65360702e-12 7.09288996e-02 5.55499000e-02 9.19062994e-02 6.10950816e-02 2.32244163e-03 7.18197378e-01 3.12874605e+03 +6.60400000e-04 -1.65360702e-12 7.09288990e-02 5.55498989e-02 9.19063001e-02 6.10950827e-02 2.32244150e-03 7.18197378e-01 3.12874605e+03 +6.60500000e-04 -1.65360702e-12 7.09288984e-02 5.55498978e-02 9.19063007e-02 6.10950838e-02 2.32244138e-03 7.18197378e-01 3.12874605e+03 +6.60600000e-04 -1.65360702e-12 7.09288979e-02 5.55498967e-02 9.19063014e-02 6.10950849e-02 2.32244126e-03 7.18197378e-01 3.12874605e+03 +6.60700000e-04 -1.65360702e-12 7.09288973e-02 5.55498957e-02 9.19063021e-02 6.10950860e-02 2.32244113e-03 7.18197378e-01 3.12874605e+03 +6.60800000e-04 -1.65360702e-12 7.09288967e-02 5.55498946e-02 9.19063028e-02 6.10950871e-02 2.32244101e-03 7.18197378e-01 3.12874605e+03 +6.60900000e-04 -1.65360702e-12 7.09288961e-02 5.55498935e-02 9.19063035e-02 6.10950882e-02 2.32244089e-03 7.18197378e-01 3.12874605e+03 +6.61000000e-04 -1.65360702e-12 7.09288955e-02 5.55498925e-02 9.19063041e-02 6.10950893e-02 2.32244076e-03 7.18197378e-01 3.12874605e+03 +6.61100000e-04 -1.65360702e-12 7.09288949e-02 5.55498914e-02 9.19063048e-02 6.10950904e-02 2.32244064e-03 7.18197378e-01 3.12874605e+03 +6.61200000e-04 -1.65360702e-12 7.09288944e-02 5.55498904e-02 9.19063055e-02 6.10950914e-02 2.32244052e-03 7.18197378e-01 3.12874605e+03 +6.61300000e-04 -1.65360702e-12 7.09288938e-02 5.55498893e-02 9.19063062e-02 6.10950925e-02 2.32244040e-03 7.18197378e-01 3.12874605e+03 +6.61400000e-04 -1.65360702e-12 7.09288932e-02 5.55498882e-02 9.19063068e-02 6.10950936e-02 2.32244028e-03 7.18197378e-01 3.12874605e+03 +6.61500000e-04 -1.65360702e-12 7.09288926e-02 5.55498872e-02 9.19063075e-02 6.10950947e-02 2.32244016e-03 7.18197378e-01 3.12874605e+03 +6.61600000e-04 -1.65360702e-12 7.09288920e-02 5.55498862e-02 9.19063082e-02 6.10950958e-02 2.32244004e-03 7.18197378e-01 3.12874605e+03 +6.61700000e-04 -1.65360702e-12 7.09288915e-02 5.55498851e-02 9.19063088e-02 6.10950968e-02 2.32243992e-03 7.18197378e-01 3.12874605e+03 +6.61800000e-04 -1.65360702e-12 7.09288909e-02 5.55498841e-02 9.19063095e-02 6.10950979e-02 2.32243980e-03 7.18197378e-01 3.12874605e+03 +6.61900000e-04 -1.65360702e-12 7.09288903e-02 5.55498830e-02 9.19063101e-02 6.10950990e-02 2.32243968e-03 7.18197378e-01 3.12874605e+03 +6.62000000e-04 -1.65360702e-12 7.09288898e-02 5.55498820e-02 9.19063108e-02 6.10951000e-02 2.32243956e-03 7.18197378e-01 3.12874605e+03 +6.62100000e-04 -1.65360702e-12 7.09288892e-02 5.55498810e-02 9.19063115e-02 6.10951011e-02 2.32243944e-03 7.18197378e-01 3.12874605e+03 +6.62200000e-04 -1.65360702e-12 7.09288886e-02 5.55498799e-02 9.19063121e-02 6.10951022e-02 2.32243932e-03 7.18197378e-01 3.12874605e+03 +6.62300000e-04 -1.65360702e-12 7.09288881e-02 5.55498789e-02 9.19063128e-02 6.10951032e-02 2.32243920e-03 7.18197378e-01 3.12874605e+03 +6.62400000e-04 -1.65360702e-12 7.09288875e-02 5.55498779e-02 9.19063134e-02 6.10951043e-02 2.32243909e-03 7.18197378e-01 3.12874605e+03 +6.62500000e-04 -1.65360702e-12 7.09288869e-02 5.55498769e-02 9.19063141e-02 6.10951053e-02 2.32243897e-03 7.18197378e-01 3.12874605e+03 +6.62600000e-04 -1.65360702e-12 7.09288864e-02 5.55498758e-02 9.19063147e-02 6.10951064e-02 2.32243885e-03 7.18197378e-01 3.12874605e+03 +6.62700000e-04 -1.65360702e-12 7.09288858e-02 5.55498748e-02 9.19063154e-02 6.10951074e-02 2.32243874e-03 7.18197378e-01 3.12874605e+03 +6.62800000e-04 -1.65360702e-12 7.09288853e-02 5.55498738e-02 9.19063160e-02 6.10951084e-02 2.32243862e-03 7.18197378e-01 3.12874638e+03 +6.62900000e-04 -1.65360702e-12 7.09288847e-02 5.55498728e-02 9.19063167e-02 6.10951095e-02 2.32243850e-03 7.18197378e-01 3.12874638e+03 +6.63000000e-04 -1.65360702e-12 7.09288842e-02 5.55498718e-02 9.19063173e-02 6.10951105e-02 2.32243839e-03 7.18197378e-01 3.12874638e+03 +6.63100000e-04 -1.65360702e-12 7.09288836e-02 5.55498708e-02 9.19063179e-02 6.10951116e-02 2.32243827e-03 7.18197378e-01 3.12874638e+03 +6.63200000e-04 -1.65360702e-12 7.09288830e-02 5.55498698e-02 9.19063186e-02 6.10951126e-02 2.32243815e-03 7.18197378e-01 3.12874638e+03 +6.63300000e-04 -1.65360702e-12 7.09288825e-02 5.55498688e-02 9.19063192e-02 6.10951136e-02 2.32243804e-03 7.18197378e-01 3.12874638e+03 +6.63400000e-04 -1.65360702e-12 7.09288819e-02 5.55498678e-02 9.19063199e-02 6.10951146e-02 2.32243792e-03 7.18197378e-01 3.12874638e+03 +6.63500000e-04 -1.65360702e-12 7.09288814e-02 5.55498668e-02 9.19063205e-02 6.10951157e-02 2.32243781e-03 7.18197378e-01 3.12874638e+03 +6.63600000e-04 -1.65360702e-12 7.09288809e-02 5.55498658e-02 9.19063211e-02 6.10951167e-02 2.32243770e-03 7.18197378e-01 3.12874638e+03 +6.63700000e-04 -1.65360702e-12 7.09288803e-02 5.55498648e-02 9.19063218e-02 6.10951177e-02 2.32243758e-03 7.18197378e-01 3.12874638e+03 +6.63800000e-04 -1.65360702e-12 7.09288798e-02 5.55498638e-02 9.19063224e-02 6.10951187e-02 2.32243747e-03 7.18197378e-01 3.12874638e+03 +6.63900000e-04 -1.65360702e-12 7.09288792e-02 5.55498628e-02 9.19063230e-02 6.10951197e-02 2.32243735e-03 7.18197378e-01 3.12874638e+03 +6.64000000e-04 -1.65360702e-12 7.09288787e-02 5.55498618e-02 9.19063236e-02 6.10951208e-02 2.32243724e-03 7.18197378e-01 3.12874638e+03 +6.64100000e-04 -1.65360702e-12 7.09288781e-02 5.55498608e-02 9.19063243e-02 6.10951218e-02 2.32243713e-03 7.18197378e-01 3.12874638e+03 +6.64200000e-04 -1.65360702e-12 7.09288776e-02 5.55498599e-02 9.19063249e-02 6.10951228e-02 2.32243702e-03 7.18197378e-01 3.12874638e+03 +6.64300000e-04 -1.65360702e-12 7.09288771e-02 5.55498589e-02 9.19063255e-02 6.10951238e-02 2.32243690e-03 7.18197378e-01 3.12874638e+03 +6.64400000e-04 -1.65360702e-12 7.09288765e-02 5.55498579e-02 9.19063261e-02 6.10951248e-02 2.32243679e-03 7.18197378e-01 3.12874638e+03 +6.64500000e-04 -1.65360702e-12 7.09288760e-02 5.55498569e-02 9.19063267e-02 6.10951258e-02 2.32243668e-03 7.18197378e-01 3.12874638e+03 +6.64600000e-04 -1.65360702e-12 7.09288755e-02 5.55498560e-02 9.19063274e-02 6.10951268e-02 2.32243657e-03 7.18197378e-01 3.12874638e+03 +6.64700000e-04 -1.65360702e-12 7.09288749e-02 5.55498550e-02 9.19063280e-02 6.10951278e-02 2.32243646e-03 7.18197378e-01 3.12874638e+03 +6.64800000e-04 -1.65360702e-12 7.09288744e-02 5.55498541e-02 9.19063286e-02 6.10951287e-02 2.32243635e-03 7.18197378e-01 3.12874638e+03 +6.64900000e-04 -1.65360702e-12 7.09288739e-02 5.55498531e-02 9.19063292e-02 6.10951297e-02 2.32243624e-03 7.18197378e-01 3.12874638e+03 +6.65000000e-04 -1.65360702e-12 7.09288734e-02 5.55498521e-02 9.19063298e-02 6.10951307e-02 2.32243613e-03 7.18197378e-01 3.12874638e+03 +6.65100000e-04 -1.65360702e-12 7.09288728e-02 5.55498512e-02 9.19063304e-02 6.10951317e-02 2.32243602e-03 7.18197378e-01 3.12874638e+03 +6.65200000e-04 -1.65360702e-12 7.09288723e-02 5.55498502e-02 9.19063310e-02 6.10951327e-02 2.32243591e-03 7.18197378e-01 3.12874638e+03 +6.65300000e-04 -1.65360702e-12 7.09288718e-02 5.55498493e-02 9.19063316e-02 6.10951337e-02 2.32243580e-03 7.18197378e-01 3.12874638e+03 +6.65400000e-04 -1.65360702e-12 7.09288713e-02 5.55498483e-02 9.19063322e-02 6.10951346e-02 2.32243569e-03 7.18197378e-01 3.12874638e+03 +6.65500000e-04 -1.65360702e-12 7.09288707e-02 5.55498474e-02 9.19063328e-02 6.10951356e-02 2.32243558e-03 7.18197378e-01 3.12874638e+03 +6.65600000e-04 -1.65360702e-12 7.09288702e-02 5.55498464e-02 9.19063334e-02 6.10951366e-02 2.32243547e-03 7.18197378e-01 3.12874638e+03 +6.65700000e-04 -1.65360702e-12 7.09288697e-02 5.55498455e-02 9.19063340e-02 6.10951376e-02 2.32243536e-03 7.18197378e-01 3.12874638e+03 +6.65800000e-04 -1.65360702e-12 7.09288692e-02 5.55498445e-02 9.19063346e-02 6.10951385e-02 2.32243525e-03 7.18197378e-01 3.12874638e+03 +6.65900000e-04 -1.65360702e-12 7.09288687e-02 5.55498436e-02 9.19063352e-02 6.10951395e-02 2.32243515e-03 7.18197378e-01 3.12874638e+03 +6.66000000e-04 -1.65360702e-12 7.09288682e-02 5.55498427e-02 9.19063358e-02 6.10951404e-02 2.32243504e-03 7.18197378e-01 3.12874638e+03 +6.66100000e-04 -1.65360702e-12 7.09288677e-02 5.55498417e-02 9.19063364e-02 6.10951414e-02 2.32243493e-03 7.18197378e-01 3.12874638e+03 +6.66200000e-04 -1.65360702e-12 7.09288671e-02 5.55498408e-02 9.19063370e-02 6.10951424e-02 2.32243482e-03 7.18197378e-01 3.12874638e+03 +6.66300000e-04 -1.65360702e-12 7.09288666e-02 5.55498399e-02 9.19063376e-02 6.10951433e-02 2.32243472e-03 7.18197378e-01 3.12874638e+03 +6.66400000e-04 -1.65360702e-12 7.09288661e-02 5.55498390e-02 9.19063382e-02 6.10951443e-02 2.32243461e-03 7.18197378e-01 3.12874638e+03 +6.66500000e-04 -1.65360702e-12 7.09288656e-02 5.55498380e-02 9.19063388e-02 6.10951452e-02 2.32243450e-03 7.18197378e-01 3.12874638e+03 +6.66600000e-04 -1.65360702e-12 7.09288651e-02 5.55498371e-02 9.19063394e-02 6.10951462e-02 2.32243440e-03 7.18197378e-01 3.12874638e+03 +6.66700000e-04 -1.65360702e-12 7.09288646e-02 5.55498362e-02 9.19063400e-02 6.10951471e-02 2.32243429e-03 7.18197378e-01 3.12874638e+03 +6.66800000e-04 -1.65360702e-12 7.09288641e-02 5.55498353e-02 9.19063405e-02 6.10951480e-02 2.32243419e-03 7.18197378e-01 3.12874638e+03 +6.66900000e-04 -1.65360702e-12 7.09288636e-02 5.55498344e-02 9.19063411e-02 6.10951490e-02 2.32243408e-03 7.18197378e-01 3.12874638e+03 +6.67000000e-04 -1.65360702e-12 7.09288631e-02 5.55498335e-02 9.19063417e-02 6.10951499e-02 2.32243398e-03 7.18197378e-01 3.12874638e+03 +6.67100000e-04 -1.65360702e-12 7.09288626e-02 5.55498326e-02 9.19063423e-02 6.10951508e-02 2.32243387e-03 7.18197378e-01 3.12874638e+03 +6.67200000e-04 -1.65360702e-12 7.09288621e-02 5.55498316e-02 9.19063428e-02 6.10951518e-02 2.32243377e-03 7.18197378e-01 3.12874638e+03 +6.67300000e-04 -1.65360702e-12 7.09288616e-02 5.55498307e-02 9.19063434e-02 6.10951527e-02 2.32243367e-03 7.18197378e-01 3.12874638e+03 +6.67400000e-04 -1.65360702e-12 7.09288611e-02 5.55498298e-02 9.19063440e-02 6.10951536e-02 2.32243356e-03 7.18197378e-01 3.12874638e+03 +6.67500000e-04 -1.65360702e-12 7.09288606e-02 5.55498289e-02 9.19063446e-02 6.10951546e-02 2.32243346e-03 7.18197378e-01 3.12874638e+03 +6.67600000e-04 -1.65360702e-12 7.09288601e-02 5.55498280e-02 9.19063451e-02 6.10951555e-02 2.32243336e-03 7.18197378e-01 3.12874638e+03 +6.67700000e-04 -1.65360702e-12 7.09288596e-02 5.55498272e-02 9.19063457e-02 6.10951564e-02 2.32243325e-03 7.18197378e-01 3.12874638e+03 +6.67800000e-04 -1.65360702e-12 7.09288591e-02 5.55498263e-02 9.19063463e-02 6.10951573e-02 2.32243315e-03 7.18197378e-01 3.12874638e+03 +6.67900000e-04 -1.65360702e-12 7.09288587e-02 5.55498254e-02 9.19063468e-02 6.10951582e-02 2.32243305e-03 7.18197378e-01 3.12874638e+03 +6.68000000e-04 -1.65360702e-12 7.09288582e-02 5.55498245e-02 9.19063474e-02 6.10951591e-02 2.32243295e-03 7.18197378e-01 3.12874638e+03 +6.68100000e-04 -1.65360702e-12 7.09288577e-02 5.55498236e-02 9.19063480e-02 6.10951601e-02 2.32243284e-03 7.18197378e-01 3.12874667e+03 +6.68200000e-04 -1.65360702e-12 7.09288572e-02 5.55498227e-02 9.19063485e-02 6.10951610e-02 2.32243274e-03 7.18197378e-01 3.12874667e+03 +6.68300000e-04 -1.65360702e-12 7.09288567e-02 5.55498218e-02 9.19063491e-02 6.10951619e-02 2.32243264e-03 7.18197378e-01 3.12874667e+03 +6.68400000e-04 -1.65360702e-12 7.09288562e-02 5.55498210e-02 9.19063497e-02 6.10951628e-02 2.32243254e-03 7.18197378e-01 3.12874667e+03 +6.68500000e-04 -1.65360702e-12 7.09288557e-02 5.55498201e-02 9.19063502e-02 6.10951637e-02 2.32243244e-03 7.18197378e-01 3.12874667e+03 +6.68600000e-04 -1.65360702e-12 7.09288553e-02 5.55498192e-02 9.19063508e-02 6.10951646e-02 2.32243234e-03 7.18197378e-01 3.12874667e+03 +6.68700000e-04 -1.65360702e-12 7.09288548e-02 5.55498183e-02 9.19063513e-02 6.10951655e-02 2.32243224e-03 7.18197378e-01 3.12874667e+03 +6.68800000e-04 -1.65360702e-12 7.09288543e-02 5.55498175e-02 9.19063519e-02 6.10951664e-02 2.32243214e-03 7.18197378e-01 3.12874667e+03 +6.68900000e-04 -1.65360702e-12 7.09288538e-02 5.55498166e-02 9.19063524e-02 6.10951673e-02 2.32243204e-03 7.18197378e-01 3.12874667e+03 +6.69000000e-04 -1.65360702e-12 7.09288534e-02 5.55498157e-02 9.19063530e-02 6.10951681e-02 2.32243194e-03 7.18197378e-01 3.12874667e+03 +6.69100000e-04 -1.65360702e-12 7.09288529e-02 5.55498149e-02 9.19063535e-02 6.10951690e-02 2.32243184e-03 7.18197378e-01 3.12874667e+03 +6.69200000e-04 -1.65360702e-12 7.09288524e-02 5.55498140e-02 9.19063541e-02 6.10951699e-02 2.32243174e-03 7.18197378e-01 3.12874667e+03 +6.69300000e-04 -1.65360702e-12 7.09288519e-02 5.55498131e-02 9.19063546e-02 6.10951708e-02 2.32243164e-03 7.18197378e-01 3.12874667e+03 +6.69400000e-04 -1.65360702e-12 7.09288515e-02 5.55498123e-02 9.19063552e-02 6.10951717e-02 2.32243154e-03 7.18197378e-01 3.12874667e+03 +6.69500000e-04 -1.65360702e-12 7.09288510e-02 5.55498114e-02 9.19063557e-02 6.10951726e-02 2.32243144e-03 7.18197378e-01 3.12874667e+03 +6.69600000e-04 -1.65360702e-12 7.09288505e-02 5.55498106e-02 9.19063563e-02 6.10951734e-02 2.32243135e-03 7.18197378e-01 3.12874667e+03 +6.69700000e-04 -1.65360702e-12 7.09288501e-02 5.55498097e-02 9.19063568e-02 6.10951743e-02 2.32243125e-03 7.18197378e-01 3.12874667e+03 +6.69800000e-04 -1.65360702e-12 7.09288496e-02 5.55498089e-02 9.19063573e-02 6.10951752e-02 2.32243115e-03 7.18197378e-01 3.12874667e+03 +6.69900000e-04 -1.65360702e-12 7.09288491e-02 5.55498080e-02 9.19063579e-02 6.10951760e-02 2.32243105e-03 7.18197378e-01 3.12874667e+03 +6.70000000e-04 -1.65360702e-12 7.09288487e-02 5.55498072e-02 9.19063584e-02 6.10951769e-02 2.32243096e-03 7.18197378e-01 3.12874667e+03 +6.70100000e-04 -1.65360702e-12 7.09288482e-02 5.55498064e-02 9.19063589e-02 6.10951778e-02 2.32243086e-03 7.18197378e-01 3.12874667e+03 +6.70200000e-04 -1.65360702e-12 7.09288478e-02 5.55498055e-02 9.19063595e-02 6.10951786e-02 2.32243076e-03 7.18197378e-01 3.12874667e+03 +6.70300000e-04 -1.65360702e-12 7.09288473e-02 5.55498047e-02 9.19063600e-02 6.10951795e-02 2.32243067e-03 7.18197378e-01 3.12874667e+03 +6.70400000e-04 -1.65360702e-12 7.09288468e-02 5.55498038e-02 9.19063605e-02 6.10951804e-02 2.32243057e-03 7.18197378e-01 3.12874667e+03 +6.70500000e-04 -1.65360702e-12 7.09288464e-02 5.55498030e-02 9.19063611e-02 6.10951812e-02 2.32243048e-03 7.18197378e-01 3.12874667e+03 +6.70600000e-04 -1.65360702e-12 7.09288459e-02 5.55498022e-02 9.19063616e-02 6.10951821e-02 2.32243038e-03 7.18197378e-01 3.12874667e+03 +6.70700000e-04 -1.65360702e-12 7.09288455e-02 5.55498013e-02 9.19063621e-02 6.10951829e-02 2.32243029e-03 7.18197378e-01 3.12874667e+03 +6.70800000e-04 -1.65360702e-12 7.09288450e-02 5.55498005e-02 9.19063627e-02 6.10951838e-02 2.32243019e-03 7.18197378e-01 3.12874667e+03 +6.70900000e-04 -1.65360702e-12 7.09288446e-02 5.55497997e-02 9.19063632e-02 6.10951846e-02 2.32243010e-03 7.18197378e-01 3.12874667e+03 +6.71000000e-04 -1.65360702e-12 7.09288441e-02 5.55497989e-02 9.19063637e-02 6.10951855e-02 2.32243000e-03 7.18197378e-01 3.12874667e+03 +6.71100000e-04 -1.65360702e-12 7.09288437e-02 5.55497981e-02 9.19063642e-02 6.10951863e-02 2.32242991e-03 7.18197378e-01 3.12874667e+03 +6.71200000e-04 -1.65360702e-12 7.09288432e-02 5.55497972e-02 9.19063647e-02 6.10951871e-02 2.32242981e-03 7.18197378e-01 3.12874667e+03 +6.71300000e-04 -1.65360702e-12 7.09288428e-02 5.55497964e-02 9.19063653e-02 6.10951880e-02 2.32242972e-03 7.18197378e-01 3.12874667e+03 +6.71400000e-04 -1.65360702e-12 7.09288423e-02 5.55497956e-02 9.19063658e-02 6.10951888e-02 2.32242962e-03 7.18197378e-01 3.12874667e+03 +6.71500000e-04 -1.65360702e-12 7.09288419e-02 5.55497948e-02 9.19063663e-02 6.10951897e-02 2.32242953e-03 7.18197378e-01 3.12874667e+03 +6.71600000e-04 -1.65360702e-12 7.09288414e-02 5.55497940e-02 9.19063668e-02 6.10951905e-02 2.32242944e-03 7.18197378e-01 3.12874667e+03 +6.71700000e-04 -1.65360702e-12 7.09288410e-02 5.55497932e-02 9.19063673e-02 6.10951913e-02 2.32242935e-03 7.18197378e-01 3.12874667e+03 +6.71800000e-04 -1.65360702e-12 7.09288405e-02 5.55497924e-02 9.19063678e-02 6.10951921e-02 2.32242925e-03 7.18197378e-01 3.12874667e+03 +6.71900000e-04 -1.65360702e-12 7.09288401e-02 5.55497916e-02 9.19063684e-02 6.10951930e-02 2.32242916e-03 7.18197378e-01 3.12874667e+03 +6.72000000e-04 -1.65360702e-12 7.09288397e-02 5.55497908e-02 9.19063689e-02 6.10951938e-02 2.32242907e-03 7.18197378e-01 3.12874667e+03 +6.72100000e-04 -1.65360702e-12 7.09288392e-02 5.55497900e-02 9.19063694e-02 6.10951946e-02 2.32242898e-03 7.18197378e-01 3.12874667e+03 +6.72200000e-04 -1.65360702e-12 7.09288388e-02 5.55497892e-02 9.19063699e-02 6.10951954e-02 2.32242888e-03 7.18197378e-01 3.12874667e+03 +6.72300000e-04 -1.65360702e-12 7.09288383e-02 5.55497884e-02 9.19063704e-02 6.10951963e-02 2.32242879e-03 7.18197378e-01 3.12874667e+03 +6.72400000e-04 -1.65360702e-12 7.09288379e-02 5.55497876e-02 9.19063709e-02 6.10951971e-02 2.32242870e-03 7.18197378e-01 3.12874667e+03 +6.72500000e-04 -1.65360702e-12 7.09288375e-02 5.55497868e-02 9.19063714e-02 6.10951979e-02 2.32242861e-03 7.18197378e-01 3.12874667e+03 +6.72600000e-04 -1.65360702e-12 7.09288370e-02 5.55497860e-02 9.19063719e-02 6.10951987e-02 2.32242852e-03 7.18197378e-01 3.12874667e+03 +6.72700000e-04 -1.65360702e-12 7.09288366e-02 5.55497852e-02 9.19063724e-02 6.10951995e-02 2.32242843e-03 7.18197378e-01 3.12874667e+03 +6.72800000e-04 -1.65360702e-12 7.09288362e-02 5.55497844e-02 9.19063729e-02 6.10952003e-02 2.32242834e-03 7.18197378e-01 3.12874667e+03 +6.72900000e-04 -1.65360702e-12 7.09288357e-02 5.55497837e-02 9.19063734e-02 6.10952011e-02 2.32242825e-03 7.18197378e-01 3.12874667e+03 +6.73000000e-04 -1.65360702e-12 7.09288353e-02 5.55497829e-02 9.19063739e-02 6.10952019e-02 2.32242816e-03 7.18197378e-01 3.12874667e+03 +6.73100000e-04 -1.65360702e-12 7.09288349e-02 5.55497821e-02 9.19063744e-02 6.10952027e-02 2.32242807e-03 7.18197378e-01 3.12874667e+03 +6.73200000e-04 -1.65360702e-12 7.09288345e-02 5.55497813e-02 9.19063749e-02 6.10952035e-02 2.32242798e-03 7.18197378e-01 3.12874667e+03 +6.73300000e-04 -1.65360702e-12 7.09288340e-02 5.55497805e-02 9.19063754e-02 6.10952043e-02 2.32242789e-03 7.18197378e-01 3.12874692e+03 +6.73400000e-04 -1.65360702e-12 7.09288336e-02 5.55497798e-02 9.19063759e-02 6.10952051e-02 2.32242780e-03 7.18197378e-01 3.12874692e+03 +6.73500000e-04 -1.65360702e-12 7.09288332e-02 5.55497790e-02 9.19063764e-02 6.10952059e-02 2.32242771e-03 7.18197378e-01 3.12874692e+03 +6.73600000e-04 -1.65360702e-12 7.09288328e-02 5.55497782e-02 9.19063768e-02 6.10952067e-02 2.32242763e-03 7.18197378e-01 3.12874692e+03 +6.73700000e-04 -1.65360702e-12 7.09288323e-02 5.55497775e-02 9.19063773e-02 6.10952075e-02 2.32242754e-03 7.18197378e-01 3.12874692e+03 +6.73800000e-04 -1.65360702e-12 7.09288319e-02 5.55497767e-02 9.19063778e-02 6.10952083e-02 2.32242745e-03 7.18197378e-01 3.12874692e+03 +6.73900000e-04 -1.65360702e-12 7.09288315e-02 5.55497759e-02 9.19063783e-02 6.10952090e-02 2.32242736e-03 7.18197378e-01 3.12874692e+03 +6.74000000e-04 -1.65360702e-12 7.09288311e-02 5.55497752e-02 9.19063788e-02 6.10952098e-02 2.32242727e-03 7.18197378e-01 3.12874692e+03 +6.74100000e-04 -1.65360702e-12 7.09288307e-02 5.55497744e-02 9.19063793e-02 6.10952106e-02 2.32242719e-03 7.18197378e-01 3.12874692e+03 +6.74200000e-04 -1.65360702e-12 7.09288302e-02 5.55497737e-02 9.19063798e-02 6.10952114e-02 2.32242710e-03 7.18197378e-01 3.12874692e+03 +6.74300000e-04 -1.65360702e-12 7.09288298e-02 5.55497729e-02 9.19063802e-02 6.10952122e-02 2.32242701e-03 7.18197378e-01 3.12874692e+03 +6.74400000e-04 -1.65360702e-12 7.09288294e-02 5.55497721e-02 9.19063807e-02 6.10952129e-02 2.32242693e-03 7.18197378e-01 3.12874692e+03 +6.74500000e-04 -1.65360702e-12 7.09288290e-02 5.55497714e-02 9.19063812e-02 6.10952137e-02 2.32242684e-03 7.18197378e-01 3.12874692e+03 +6.74600000e-04 -1.65360702e-12 7.09288286e-02 5.55497706e-02 9.19063817e-02 6.10952145e-02 2.32242675e-03 7.18197378e-01 3.12874692e+03 +6.74700000e-04 -1.65360702e-12 7.09288282e-02 5.55497699e-02 9.19063822e-02 6.10952153e-02 2.32242667e-03 7.18197378e-01 3.12874692e+03 +6.74800000e-04 -1.65360702e-12 7.09288278e-02 5.55497691e-02 9.19063826e-02 6.10952160e-02 2.32242658e-03 7.18197378e-01 3.12874692e+03 +6.74900000e-04 -1.65360702e-12 7.09288274e-02 5.55497684e-02 9.19063831e-02 6.10952168e-02 2.32242650e-03 7.18197378e-01 3.12874692e+03 +6.75000000e-04 -1.65360702e-12 7.09288270e-02 5.55497677e-02 9.19063836e-02 6.10952175e-02 2.32242641e-03 7.18197378e-01 3.12874692e+03 +6.75100000e-04 -1.65360702e-12 7.09288266e-02 5.55497669e-02 9.19063840e-02 6.10952183e-02 2.32242633e-03 7.18197378e-01 3.12874692e+03 +6.75200000e-04 -1.65360702e-12 7.09288261e-02 5.55497662e-02 9.19063845e-02 6.10952191e-02 2.32242624e-03 7.18197378e-01 3.12874692e+03 +6.75300000e-04 -1.65360702e-12 7.09288257e-02 5.55497654e-02 9.19063850e-02 6.10952198e-02 2.32242616e-03 7.18197378e-01 3.12874692e+03 +6.75400000e-04 -1.65360702e-12 7.09288253e-02 5.55497647e-02 9.19063854e-02 6.10952206e-02 2.32242607e-03 7.18197378e-01 3.12874692e+03 +6.75500000e-04 -1.65360702e-12 7.09288249e-02 5.55497640e-02 9.19063859e-02 6.10952213e-02 2.32242599e-03 7.18197378e-01 3.12874692e+03 +6.75600000e-04 -1.65360702e-12 7.09288245e-02 5.55497632e-02 9.19063864e-02 6.10952221e-02 2.32242590e-03 7.18197378e-01 3.12874692e+03 +6.75700000e-04 -1.65360702e-12 7.09288241e-02 5.55497625e-02 9.19063868e-02 6.10952228e-02 2.32242582e-03 7.18197378e-01 3.12874692e+03 +6.75800000e-04 -1.65360702e-12 7.09288237e-02 5.55497618e-02 9.19063873e-02 6.10952236e-02 2.32242574e-03 7.18197378e-01 3.12874692e+03 +6.75900000e-04 -1.65360702e-12 7.09288233e-02 5.55497611e-02 9.19063878e-02 6.10952243e-02 2.32242565e-03 7.18197378e-01 3.12874692e+03 +6.76000000e-04 -1.65360702e-12 7.09288229e-02 5.55497603e-02 9.19063882e-02 6.10952251e-02 2.32242557e-03 7.18197378e-01 3.12874692e+03 +6.76100000e-04 -1.65360702e-12 7.09288225e-02 5.55497596e-02 9.19063887e-02 6.10952258e-02 2.32242549e-03 7.18197378e-01 3.12874692e+03 +6.76200000e-04 -1.65360702e-12 7.09288221e-02 5.55497589e-02 9.19063891e-02 6.10952265e-02 2.32242540e-03 7.18197378e-01 3.12874692e+03 +6.76300000e-04 -1.65360702e-12 7.09288218e-02 5.55497582e-02 9.19063896e-02 6.10952273e-02 2.32242532e-03 7.18197378e-01 3.12874692e+03 +6.76400000e-04 -1.65360702e-12 7.09288214e-02 5.55497575e-02 9.19063901e-02 6.10952280e-02 2.32242524e-03 7.18197378e-01 3.12874692e+03 +6.76500000e-04 -1.65360702e-12 7.09288210e-02 5.55497568e-02 9.19063905e-02 6.10952288e-02 2.32242516e-03 7.18197378e-01 3.12874692e+03 +6.76600000e-04 -1.65360702e-12 7.09288206e-02 5.55497560e-02 9.19063910e-02 6.10952295e-02 2.32242507e-03 7.18197378e-01 3.12874692e+03 +6.76700000e-04 -1.65360702e-12 7.09288202e-02 5.55497553e-02 9.19063914e-02 6.10952302e-02 2.32242499e-03 7.18197378e-01 3.12874692e+03 +6.76800000e-04 -1.65360702e-12 7.09288198e-02 5.55497546e-02 9.19063919e-02 6.10952309e-02 2.32242491e-03 7.18197378e-01 3.12874692e+03 +6.76900000e-04 -1.65360702e-12 7.09288194e-02 5.55497539e-02 9.19063923e-02 6.10952317e-02 2.32242483e-03 7.18197378e-01 3.12874692e+03 +6.77000000e-04 -1.65360702e-12 7.09288190e-02 5.55497532e-02 9.19063928e-02 6.10952324e-02 2.32242475e-03 7.18197378e-01 3.12874692e+03 +6.77100000e-04 -1.65360702e-12 7.09288186e-02 5.55497525e-02 9.19063932e-02 6.10952331e-02 2.32242467e-03 7.18197378e-01 3.12874692e+03 +6.77200000e-04 -1.65360702e-12 7.09288183e-02 5.55497518e-02 9.19063937e-02 6.10952338e-02 2.32242459e-03 7.18197378e-01 3.12874692e+03 +6.77300000e-04 -1.65360702e-12 7.09288179e-02 5.55497511e-02 9.19063941e-02 6.10952346e-02 2.32242451e-03 7.18197378e-01 3.12874692e+03 +6.77400000e-04 -1.65360702e-12 7.09288175e-02 5.55497504e-02 9.19063946e-02 6.10952353e-02 2.32242443e-03 7.18197378e-01 3.12874692e+03 +6.77500000e-04 -1.65360702e-12 7.09288171e-02 5.55497497e-02 9.19063950e-02 6.10952360e-02 2.32242435e-03 7.18197378e-01 3.12874692e+03 +6.77600000e-04 -1.65360702e-12 7.09288167e-02 5.55497490e-02 9.19063954e-02 6.10952367e-02 2.32242427e-03 7.18197378e-01 3.12874692e+03 +6.77700000e-04 -1.65360702e-12 7.09288163e-02 5.55497483e-02 9.19063959e-02 6.10952374e-02 2.32242419e-03 7.18197378e-01 3.12874692e+03 +6.77800000e-04 -1.65360702e-12 7.09288160e-02 5.55497476e-02 9.19063963e-02 6.10952381e-02 2.32242411e-03 7.18197378e-01 3.12874692e+03 +6.77900000e-04 -1.65360702e-12 7.09288156e-02 5.55497470e-02 9.19063968e-02 6.10952388e-02 2.32242403e-03 7.18197378e-01 3.12874692e+03 +6.78000000e-04 -1.65360702e-12 7.09288152e-02 5.55497463e-02 9.19063972e-02 6.10952395e-02 2.32242395e-03 7.18197378e-01 3.12874692e+03 +6.78100000e-04 -1.65360702e-12 7.09288148e-02 5.55497456e-02 9.19063976e-02 6.10952402e-02 2.32242387e-03 7.18197378e-01 3.12874692e+03 +6.78200000e-04 -1.65360702e-12 7.09288145e-02 5.55497449e-02 9.19063981e-02 6.10952409e-02 2.32242379e-03 7.18197378e-01 3.12874692e+03 +6.78300000e-04 -1.65360702e-12 7.09288141e-02 5.55497442e-02 9.19063985e-02 6.10952416e-02 2.32242371e-03 7.18197378e-01 3.12874692e+03 +6.78400000e-04 -1.65360702e-12 7.09288137e-02 5.55497435e-02 9.19063989e-02 6.10952423e-02 2.32242364e-03 7.18197378e-01 3.12874692e+03 +6.78500000e-04 -1.65360702e-12 7.09288133e-02 5.55497429e-02 9.19063994e-02 6.10952430e-02 2.32242356e-03 7.18197378e-01 3.12874692e+03 +6.78600000e-04 -1.65360702e-12 7.09288130e-02 5.55497422e-02 9.19063998e-02 6.10952437e-02 2.32242348e-03 7.18197378e-01 3.12874714e+03 +6.78700000e-04 -1.65360702e-12 7.09288126e-02 5.55497415e-02 9.19064002e-02 6.10952444e-02 2.32242340e-03 7.18197378e-01 3.12874714e+03 +6.78800000e-04 -1.65360702e-12 7.09288122e-02 5.55497408e-02 9.19064006e-02 6.10952451e-02 2.32242332e-03 7.18197378e-01 3.12874714e+03 +6.78900000e-04 -1.65360702e-12 7.09288119e-02 5.55497402e-02 9.19064011e-02 6.10952458e-02 2.32242325e-03 7.18197378e-01 3.12874714e+03 +6.79000000e-04 -1.65360702e-12 7.09288115e-02 5.55497395e-02 9.19064015e-02 6.10952465e-02 2.32242317e-03 7.18197378e-01 3.12874714e+03 +6.79100000e-04 -1.65360702e-12 7.09288111e-02 5.55497388e-02 9.19064019e-02 6.10952472e-02 2.32242309e-03 7.18197378e-01 3.12874714e+03 +6.79200000e-04 -1.65360702e-12 7.09288108e-02 5.55497382e-02 9.19064024e-02 6.10952479e-02 2.32242302e-03 7.18197378e-01 3.12874714e+03 +6.79300000e-04 -1.65360702e-12 7.09288104e-02 5.55497375e-02 9.19064028e-02 6.10952486e-02 2.32242294e-03 7.18197378e-01 3.12874714e+03 +6.79400000e-04 -1.65360702e-12 7.09288100e-02 5.55497368e-02 9.19064032e-02 6.10952492e-02 2.32242286e-03 7.18197378e-01 3.12874714e+03 +6.79500000e-04 -1.65360702e-12 7.09288097e-02 5.55497362e-02 9.19064036e-02 6.10952499e-02 2.32242279e-03 7.18197378e-01 3.12874714e+03 +6.79600000e-04 -1.65360702e-12 7.09288093e-02 5.55497355e-02 9.19064040e-02 6.10952506e-02 2.32242271e-03 7.18197378e-01 3.12874714e+03 +6.79700000e-04 -1.65360702e-12 7.09288089e-02 5.55497349e-02 9.19064045e-02 6.10952513e-02 2.32242264e-03 7.18197378e-01 3.12874714e+03 +6.79800000e-04 -1.65360702e-12 7.09288086e-02 5.55497342e-02 9.19064049e-02 6.10952519e-02 2.32242256e-03 7.18197378e-01 3.12874714e+03 +6.79900000e-04 -1.65360702e-12 7.09288082e-02 5.55497335e-02 9.19064053e-02 6.10952526e-02 2.32242249e-03 7.18197378e-01 3.12874714e+03 +6.80000000e-04 -1.65360702e-12 7.09288079e-02 5.55497329e-02 9.19064057e-02 6.10952533e-02 2.32242241e-03 7.18197378e-01 3.12874714e+03 +6.80100000e-04 -1.65360702e-12 7.09288075e-02 5.55497322e-02 9.19064061e-02 6.10952540e-02 2.32242234e-03 7.18197378e-01 3.12874714e+03 +6.80200000e-04 -1.65360702e-12 7.09288071e-02 5.55497316e-02 9.19064065e-02 6.10952546e-02 2.32242226e-03 7.18197378e-01 3.12874714e+03 +6.80300000e-04 -1.65360702e-12 7.09288068e-02 5.55497309e-02 9.19064069e-02 6.10952553e-02 2.32242219e-03 7.18197378e-01 3.12874714e+03 +6.80400000e-04 -1.65360702e-12 7.09288064e-02 5.55497303e-02 9.19064074e-02 6.10952560e-02 2.32242211e-03 7.18197378e-01 3.12874714e+03 +6.80500000e-04 -1.65360702e-12 7.09288061e-02 5.55497296e-02 9.19064078e-02 6.10952566e-02 2.32242204e-03 7.18197378e-01 3.12874714e+03 +6.80600000e-04 -1.65360702e-12 7.09288057e-02 5.55497290e-02 9.19064082e-02 6.10952573e-02 2.32242196e-03 7.18197378e-01 3.12874714e+03 +6.80700000e-04 -1.65360702e-12 7.09288054e-02 5.55497284e-02 9.19064086e-02 6.10952579e-02 2.32242189e-03 7.18197378e-01 3.12874714e+03 +6.80800000e-04 -1.65360702e-12 7.09288050e-02 5.55497277e-02 9.19064090e-02 6.10952586e-02 2.32242182e-03 7.18197378e-01 3.12874714e+03 +6.80900000e-04 -1.65360702e-12 7.09288047e-02 5.55497271e-02 9.19064094e-02 6.10952592e-02 2.32242174e-03 7.18197378e-01 3.12874714e+03 +6.81000000e-04 -1.65360702e-12 7.09288043e-02 5.55497265e-02 9.19064098e-02 6.10952599e-02 2.32242167e-03 7.18197378e-01 3.12874714e+03 +6.81100000e-04 -1.65360702e-12 7.09288040e-02 5.55497258e-02 9.19064102e-02 6.10952606e-02 2.32242160e-03 7.18197378e-01 3.12874714e+03 +6.81200000e-04 -1.65360702e-12 7.09288036e-02 5.55497252e-02 9.19064106e-02 6.10952612e-02 2.32242152e-03 7.18197378e-01 3.12874714e+03 +6.81300000e-04 -1.65360702e-12 7.09288033e-02 5.55497246e-02 9.19064110e-02 6.10952619e-02 2.32242145e-03 7.18197378e-01 3.12874714e+03 +6.81400000e-04 -1.65360702e-12 7.09288029e-02 5.55497239e-02 9.19064114e-02 6.10952625e-02 2.32242138e-03 7.18197378e-01 3.12874714e+03 +6.81500000e-04 -1.65360702e-12 7.09288026e-02 5.55497233e-02 9.19064118e-02 6.10952631e-02 2.32242131e-03 7.18197378e-01 3.12874714e+03 +6.81600000e-04 -1.65360702e-12 7.09288022e-02 5.55497227e-02 9.19064122e-02 6.10952638e-02 2.32242124e-03 7.18197378e-01 3.12874714e+03 +6.81700000e-04 -1.65360702e-12 7.09288019e-02 5.55497220e-02 9.19064126e-02 6.10952644e-02 2.32242116e-03 7.18197378e-01 3.12874714e+03 +6.81800000e-04 -1.65360702e-12 7.09288016e-02 5.55497214e-02 9.19064130e-02 6.10952651e-02 2.32242109e-03 7.18197378e-01 3.12874714e+03 +6.81900000e-04 -1.65360702e-12 7.09288012e-02 5.55497208e-02 9.19064134e-02 6.10952657e-02 2.32242102e-03 7.18197378e-01 3.12874714e+03 +6.82000000e-04 -1.65360702e-12 7.09288009e-02 5.55497202e-02 9.19064138e-02 6.10952664e-02 2.32242095e-03 7.18197378e-01 3.12874714e+03 +6.82100000e-04 -1.65360702e-12 7.09288005e-02 5.55497196e-02 9.19064142e-02 6.10952670e-02 2.32242088e-03 7.18197378e-01 3.12874714e+03 +6.82200000e-04 -1.65360702e-12 7.09288002e-02 5.55497189e-02 9.19064146e-02 6.10952676e-02 2.32242081e-03 7.18197378e-01 3.12874714e+03 +6.82300000e-04 -1.65360702e-12 7.09287999e-02 5.55497183e-02 9.19064150e-02 6.10952683e-02 2.32242074e-03 7.18197378e-01 3.12874714e+03 +6.82400000e-04 -1.65360702e-12 7.09287995e-02 5.55497177e-02 9.19064154e-02 6.10952689e-02 2.32242067e-03 7.18197378e-01 3.12874714e+03 +6.82500000e-04 -1.65360702e-12 7.09287992e-02 5.55497171e-02 9.19064158e-02 6.10952695e-02 2.32242060e-03 7.18197378e-01 3.12874714e+03 +6.82600000e-04 -1.65360702e-12 7.09287989e-02 5.55497165e-02 9.19064161e-02 6.10952701e-02 2.32242053e-03 7.18197378e-01 3.12874714e+03 +6.82700000e-04 -1.65360702e-12 7.09287985e-02 5.55497159e-02 9.19064165e-02 6.10952708e-02 2.32242046e-03 7.18197378e-01 3.12874714e+03 +6.82800000e-04 -1.65360702e-12 7.09287982e-02 5.55497153e-02 9.19064169e-02 6.10952714e-02 2.32242039e-03 7.18197378e-01 3.12874714e+03 +6.82900000e-04 -1.65360702e-12 7.09287979e-02 5.55497147e-02 9.19064173e-02 6.10952720e-02 2.32242032e-03 7.18197378e-01 3.12874714e+03 +6.83000000e-04 -1.65360702e-12 7.09287975e-02 5.55497141e-02 9.19064177e-02 6.10952726e-02 2.32242025e-03 7.18197378e-01 3.12874714e+03 +6.83100000e-04 -1.65360702e-12 7.09287972e-02 5.55497135e-02 9.19064181e-02 6.10952733e-02 2.32242018e-03 7.18197378e-01 3.12874714e+03 +6.83200000e-04 -1.65360702e-12 7.09287969e-02 5.55497129e-02 9.19064185e-02 6.10952739e-02 2.32242011e-03 7.18197378e-01 3.12874714e+03 +6.83300000e-04 -1.65360702e-12 7.09287965e-02 5.55497123e-02 9.19064188e-02 6.10952745e-02 2.32242004e-03 7.18197378e-01 3.12874714e+03 +6.83400000e-04 -1.65360702e-12 7.09287962e-02 5.55497117e-02 9.19064192e-02 6.10952751e-02 2.32241997e-03 7.18197378e-01 3.12874714e+03 +6.83500000e-04 -1.65360702e-12 7.09287959e-02 5.55497111e-02 9.19064196e-02 6.10952757e-02 2.32241990e-03 7.18197378e-01 3.12874714e+03 +6.83600000e-04 -1.65360702e-12 7.09287955e-02 5.55497105e-02 9.19064200e-02 6.10952763e-02 2.32241983e-03 7.18197378e-01 3.12874714e+03 +6.83700000e-04 -1.65360702e-12 7.09287952e-02 5.55497099e-02 9.19064204e-02 6.10952769e-02 2.32241976e-03 7.18197378e-01 3.12874714e+03 +6.83800000e-04 -1.65360702e-12 7.09287949e-02 5.55497093e-02 9.19064207e-02 6.10952775e-02 2.32241970e-03 7.18197378e-01 3.12874714e+03 +6.83900000e-04 -1.65360702e-12 7.09287946e-02 5.55497087e-02 9.19064211e-02 6.10952782e-02 2.32241963e-03 7.18197378e-01 3.12874733e+03 +6.84000000e-04 -1.65360702e-12 7.09287942e-02 5.55497081e-02 9.19064215e-02 6.10952788e-02 2.32241956e-03 7.18197378e-01 3.12874733e+03 +6.84100000e-04 -1.65360702e-12 7.09287939e-02 5.55497075e-02 9.19064219e-02 6.10952794e-02 2.32241949e-03 7.18197378e-01 3.12874733e+03 +6.84200000e-04 -1.65360702e-12 7.09287936e-02 5.55497069e-02 9.19064222e-02 6.10952800e-02 2.32241943e-03 7.18197378e-01 3.12874733e+03 +6.84300000e-04 -1.65360702e-12 7.09287933e-02 5.55497063e-02 9.19064226e-02 6.10952806e-02 2.32241936e-03 7.18197378e-01 3.12874733e+03 +6.84400000e-04 -1.65360702e-12 7.09287930e-02 5.55497058e-02 9.19064230e-02 6.10952812e-02 2.32241929e-03 7.18197378e-01 3.12874733e+03 +6.84500000e-04 -1.65360702e-12 7.09287926e-02 5.55497052e-02 9.19064233e-02 6.10952818e-02 2.32241922e-03 7.18197378e-01 3.12874733e+03 +6.84600000e-04 -1.65360702e-12 7.09287923e-02 5.55497046e-02 9.19064237e-02 6.10952824e-02 2.32241916e-03 7.18197378e-01 3.12874733e+03 +6.84700000e-04 -1.65360702e-12 7.09287920e-02 5.55497040e-02 9.19064241e-02 6.10952830e-02 2.32241909e-03 7.18197378e-01 3.12874733e+03 +6.84800000e-04 -1.65360702e-12 7.09287917e-02 5.55497034e-02 9.19064244e-02 6.10952835e-02 2.32241902e-03 7.18197378e-01 3.12874733e+03 +6.84900000e-04 -1.65360702e-12 7.09287914e-02 5.55497029e-02 9.19064248e-02 6.10952841e-02 2.32241896e-03 7.18197378e-01 3.12874733e+03 +6.85000000e-04 -1.65360702e-12 7.09287911e-02 5.55497023e-02 9.19064252e-02 6.10952847e-02 2.32241889e-03 7.18197378e-01 3.12874733e+03 +6.85100000e-04 -1.65360702e-12 7.09287907e-02 5.55497017e-02 9.19064255e-02 6.10952853e-02 2.32241883e-03 7.18197378e-01 3.12874733e+03 +6.85200000e-04 -1.65360702e-12 7.09287904e-02 5.55497012e-02 9.19064259e-02 6.10952859e-02 2.32241876e-03 7.18197378e-01 3.12874733e+03 +6.85300000e-04 -1.65360702e-12 7.09287901e-02 5.55497006e-02 9.19064263e-02 6.10952865e-02 2.32241870e-03 7.18197378e-01 3.12874733e+03 +6.85400000e-04 -1.65360702e-12 7.09287898e-02 5.55497000e-02 9.19064266e-02 6.10952871e-02 2.32241863e-03 7.18197378e-01 3.12874733e+03 +6.85500000e-04 -1.65360702e-12 7.09287895e-02 5.55496994e-02 9.19064270e-02 6.10952877e-02 2.32241856e-03 7.18197378e-01 3.12874733e+03 +6.85600000e-04 -1.65360702e-12 7.09287892e-02 5.55496989e-02 9.19064273e-02 6.10952882e-02 2.32241850e-03 7.18197378e-01 3.12874733e+03 +6.85700000e-04 -1.65360702e-12 7.09287889e-02 5.55496983e-02 9.19064277e-02 6.10952888e-02 2.32241843e-03 7.18197378e-01 3.12874733e+03 +6.85800000e-04 -1.65360702e-12 7.09287886e-02 5.55496978e-02 9.19064281e-02 6.10952894e-02 2.32241837e-03 7.18197378e-01 3.12874733e+03 +6.85900000e-04 -1.65360702e-12 7.09287883e-02 5.55496972e-02 9.19064284e-02 6.10952900e-02 2.32241831e-03 7.18197378e-01 3.12874733e+03 +6.86000000e-04 -1.65360702e-12 7.09287879e-02 5.55496966e-02 9.19064288e-02 6.10952906e-02 2.32241824e-03 7.18197378e-01 3.12874733e+03 +6.86100000e-04 -1.65360702e-12 7.09287876e-02 5.55496961e-02 9.19064291e-02 6.10952911e-02 2.32241818e-03 7.18197378e-01 3.12874733e+03 +6.86200000e-04 -1.65360702e-12 7.09287873e-02 5.55496955e-02 9.19064295e-02 6.10952917e-02 2.32241811e-03 7.18197378e-01 3.12874733e+03 +6.86300000e-04 -1.65360702e-12 7.09287870e-02 5.55496950e-02 9.19064298e-02 6.10952923e-02 2.32241805e-03 7.18197378e-01 3.12874733e+03 +6.86400000e-04 -1.65360702e-12 7.09287867e-02 5.55496944e-02 9.19064302e-02 6.10952928e-02 2.32241799e-03 7.18197378e-01 3.12874733e+03 +6.86500000e-04 -1.65360702e-12 7.09287864e-02 5.55496939e-02 9.19064305e-02 6.10952934e-02 2.32241792e-03 7.18197378e-01 3.12874733e+03 +6.86600000e-04 -1.65360702e-12 7.09287861e-02 5.55496933e-02 9.19064309e-02 6.10952940e-02 2.32241786e-03 7.18197378e-01 3.12874733e+03 +6.86700000e-04 -1.65360702e-12 7.09287858e-02 5.55496928e-02 9.19064312e-02 6.10952945e-02 2.32241780e-03 7.18197378e-01 3.12874733e+03 +6.86800000e-04 -1.65360702e-12 7.09287855e-02 5.55496922e-02 9.19064316e-02 6.10952951e-02 2.32241773e-03 7.18197378e-01 3.12874733e+03 +6.86900000e-04 -1.65360702e-12 7.09287852e-02 5.55496917e-02 9.19064319e-02 6.10952957e-02 2.32241767e-03 7.18197378e-01 3.12874733e+03 +6.87000000e-04 -1.65360702e-12 7.09287849e-02 5.55496911e-02 9.19064323e-02 6.10952962e-02 2.32241761e-03 7.18197378e-01 3.12874733e+03 +6.87100000e-04 -1.65360702e-12 7.09287846e-02 5.55496906e-02 9.19064326e-02 6.10952968e-02 2.32241754e-03 7.18197378e-01 3.12874733e+03 +6.87200000e-04 -1.65360702e-12 7.09287843e-02 5.55496900e-02 9.19064330e-02 6.10952973e-02 2.32241748e-03 7.18197378e-01 3.12874733e+03 +6.87300000e-04 -1.65360702e-12 7.09287840e-02 5.55496895e-02 9.19064333e-02 6.10952979e-02 2.32241742e-03 7.18197378e-01 3.12874733e+03 +6.87400000e-04 -1.65360702e-12 7.09287837e-02 5.55496889e-02 9.19064337e-02 6.10952985e-02 2.32241736e-03 7.18197378e-01 3.12874733e+03 +6.87500000e-04 -1.65360702e-12 7.09287834e-02 5.55496884e-02 9.19064340e-02 6.10952990e-02 2.32241730e-03 7.18197378e-01 3.12874733e+03 +6.87600000e-04 -1.65360702e-12 7.09287831e-02 5.55496879e-02 9.19064344e-02 6.10952996e-02 2.32241723e-03 7.18197378e-01 3.12874733e+03 +6.87700000e-04 -1.65360702e-12 7.09287828e-02 5.55496873e-02 9.19064347e-02 6.10953001e-02 2.32241717e-03 7.18197378e-01 3.12874733e+03 +6.87800000e-04 -1.65360702e-12 7.09287825e-02 5.55496868e-02 9.19064350e-02 6.10953007e-02 2.32241711e-03 7.18197378e-01 3.12874733e+03 +6.87900000e-04 -1.65360702e-12 7.09287823e-02 5.55496863e-02 9.19064354e-02 6.10953012e-02 2.32241705e-03 7.18197378e-01 3.12874733e+03 +6.88000000e-04 -1.65360702e-12 7.09287820e-02 5.55496857e-02 9.19064357e-02 6.10953018e-02 2.32241699e-03 7.18197378e-01 3.12874733e+03 +6.88100000e-04 -1.65360702e-12 7.09287817e-02 5.55496852e-02 9.19064361e-02 6.10953023e-02 2.32241693e-03 7.18197378e-01 3.12874733e+03 +6.88200000e-04 -1.65360702e-12 7.09287814e-02 5.55496847e-02 9.19064364e-02 6.10953028e-02 2.32241687e-03 7.18197378e-01 3.12874733e+03 +6.88300000e-04 -1.65360702e-12 7.09287811e-02 5.55496842e-02 9.19064367e-02 6.10953034e-02 2.32241681e-03 7.18197378e-01 3.12874733e+03 +6.88400000e-04 -1.65360702e-12 7.09287808e-02 5.55496836e-02 9.19064371e-02 6.10953039e-02 2.32241674e-03 7.18197378e-01 3.12874733e+03 +6.88500000e-04 -1.65360702e-12 7.09287805e-02 5.55496831e-02 9.19064374e-02 6.10953045e-02 2.32241668e-03 7.18197378e-01 3.12874733e+03 +6.88600000e-04 -1.65360702e-12 7.09287802e-02 5.55496826e-02 9.19064377e-02 6.10953050e-02 2.32241662e-03 7.18197378e-01 3.12874733e+03 +6.88700000e-04 -1.65360702e-12 7.09287799e-02 5.55496821e-02 9.19064381e-02 6.10953055e-02 2.32241656e-03 7.18197378e-01 3.12874733e+03 +6.88800000e-04 -1.65360702e-12 7.09287796e-02 5.55496815e-02 9.19064384e-02 6.10953061e-02 2.32241650e-03 7.18197378e-01 3.12874733e+03 +6.88900000e-04 -1.65360702e-12 7.09287794e-02 5.55496810e-02 9.19064387e-02 6.10953066e-02 2.32241644e-03 7.18197378e-01 3.12874733e+03 +6.89000000e-04 -1.65360702e-12 7.09287791e-02 5.55496805e-02 9.19064391e-02 6.10953071e-02 2.32241639e-03 7.18197378e-01 3.12874733e+03 +6.89100000e-04 -1.65360702e-12 7.09287788e-02 5.55496800e-02 9.19064394e-02 6.10953077e-02 2.32241633e-03 7.18197378e-01 3.12874733e+03 +6.89200000e-04 -1.65360702e-12 7.09287785e-02 5.55496795e-02 9.19064397e-02 6.10953082e-02 2.32241627e-03 7.18197378e-01 3.12874750e+03 +6.89300000e-04 -1.65360702e-12 7.09287782e-02 5.55496789e-02 9.19064400e-02 6.10953087e-02 2.32241621e-03 7.18197378e-01 3.12874750e+03 +6.89400000e-04 -1.65360702e-12 7.09287779e-02 5.55496784e-02 9.19064404e-02 6.10953093e-02 2.32241615e-03 7.18197378e-01 3.12874750e+03 +6.89500000e-04 -1.65360702e-12 7.09287777e-02 5.55496779e-02 9.19064407e-02 6.10953098e-02 2.32241609e-03 7.18197378e-01 3.12874750e+03 +6.89600000e-04 -1.65360702e-12 7.09287774e-02 5.55496774e-02 9.19064410e-02 6.10953103e-02 2.32241603e-03 7.18197378e-01 3.12874750e+03 +6.89700000e-04 -1.65360702e-12 7.09287771e-02 5.55496769e-02 9.19064413e-02 6.10953108e-02 2.32241597e-03 7.18197378e-01 3.12874750e+03 +6.89800000e-04 -1.65360702e-12 7.09287768e-02 5.55496764e-02 9.19064417e-02 6.10953114e-02 2.32241591e-03 7.18197378e-01 3.12874750e+03 +6.89900000e-04 -1.65360702e-12 7.09287766e-02 5.55496759e-02 9.19064420e-02 6.10953119e-02 2.32241586e-03 7.18197378e-01 3.12874750e+03 +6.90000000e-04 -1.65360702e-12 7.09287763e-02 5.55496754e-02 9.19064423e-02 6.10953124e-02 2.32241580e-03 7.18197378e-01 3.12874750e+03 +6.90100000e-04 -1.65360702e-12 7.09287760e-02 5.55496749e-02 9.19064426e-02 6.10953129e-02 2.32241574e-03 7.18197378e-01 3.12874750e+03 +6.90200000e-04 -1.65360702e-12 7.09287757e-02 5.55496744e-02 9.19064429e-02 6.10953134e-02 2.32241568e-03 7.18197378e-01 3.12874750e+03 +6.90300000e-04 -1.65360702e-12 7.09287754e-02 5.55496739e-02 9.19064433e-02 6.10953139e-02 2.32241562e-03 7.18197378e-01 3.12874750e+03 +6.90400000e-04 -1.65360702e-12 7.09287752e-02 5.55496734e-02 9.19064436e-02 6.10953145e-02 2.32241557e-03 7.18197378e-01 3.12874750e+03 +6.90500000e-04 -1.65360702e-12 7.09287749e-02 5.55496729e-02 9.19064439e-02 6.10953150e-02 2.32241551e-03 7.18197378e-01 3.12874750e+03 +6.90600000e-04 -1.65360702e-12 7.09287746e-02 5.55496724e-02 9.19064442e-02 6.10953155e-02 2.32241545e-03 7.18197378e-01 3.12874750e+03 +6.90700000e-04 -1.65360702e-12 7.09287744e-02 5.55496719e-02 9.19064445e-02 6.10953160e-02 2.32241539e-03 7.18197378e-01 3.12874750e+03 +6.90800000e-04 -1.65360702e-12 7.09287741e-02 5.55496714e-02 9.19064448e-02 6.10953165e-02 2.32241534e-03 7.18197378e-01 3.12874750e+03 +6.90900000e-04 -1.65360702e-12 7.09287738e-02 5.55496709e-02 9.19064452e-02 6.10953170e-02 2.32241528e-03 7.18197378e-01 3.12874750e+03 +6.91000000e-04 -1.65360702e-12 7.09287735e-02 5.55496704e-02 9.19064455e-02 6.10953175e-02 2.32241522e-03 7.18197378e-01 3.12874750e+03 +6.91100000e-04 -1.65360702e-12 7.09287733e-02 5.55496699e-02 9.19064458e-02 6.10953180e-02 2.32241517e-03 7.18197378e-01 3.12874750e+03 +6.91200000e-04 -1.65360702e-12 7.09287730e-02 5.55496694e-02 9.19064461e-02 6.10953185e-02 2.32241511e-03 7.18197378e-01 3.12874750e+03 +6.91300000e-04 -1.65360702e-12 7.09287727e-02 5.55496689e-02 9.19064464e-02 6.10953190e-02 2.32241506e-03 7.18197378e-01 3.12874750e+03 +6.91400000e-04 -1.65360702e-12 7.09287725e-02 5.55496684e-02 9.19064467e-02 6.10953195e-02 2.32241500e-03 7.18197378e-01 3.12874750e+03 +6.91500000e-04 -1.65360702e-12 7.09287722e-02 5.55496680e-02 9.19064470e-02 6.10953200e-02 2.32241494e-03 7.18197378e-01 3.12874750e+03 +6.91600000e-04 -1.65360702e-12 7.09287719e-02 5.55496675e-02 9.19064473e-02 6.10953205e-02 2.32241489e-03 7.18197378e-01 3.12874750e+03 +6.91700000e-04 -1.65360702e-12 7.09287717e-02 5.55496670e-02 9.19064476e-02 6.10953210e-02 2.32241483e-03 7.18197378e-01 3.12874750e+03 +6.91800000e-04 -1.65360702e-12 7.09287714e-02 5.55496665e-02 9.19064480e-02 6.10953215e-02 2.32241478e-03 7.18197378e-01 3.12874750e+03 +6.91900000e-04 -1.65360702e-12 7.09287711e-02 5.55496660e-02 9.19064483e-02 6.10953220e-02 2.32241472e-03 7.18197378e-01 3.12874750e+03 +6.92000000e-04 -1.65360702e-12 7.09287709e-02 5.55496656e-02 9.19064486e-02 6.10953225e-02 2.32241467e-03 7.18197378e-01 3.12874750e+03 +6.92100000e-04 -1.65360702e-12 7.09287706e-02 5.55496651e-02 9.19064489e-02 6.10953230e-02 2.32241461e-03 7.18197378e-01 3.12874750e+03 +6.92200000e-04 -1.65360702e-12 7.09287703e-02 5.55496646e-02 9.19064492e-02 6.10953235e-02 2.32241456e-03 7.18197378e-01 3.12874750e+03 +6.92300000e-04 -1.65360702e-12 7.09287701e-02 5.55496641e-02 9.19064495e-02 6.10953240e-02 2.32241450e-03 7.18197378e-01 3.12874750e+03 +6.92400000e-04 -1.65360702e-12 7.09287698e-02 5.55496636e-02 9.19064498e-02 6.10953245e-02 2.32241445e-03 7.18197378e-01 3.12874750e+03 +6.92500000e-04 -1.65360702e-12 7.09287696e-02 5.55496632e-02 9.19064501e-02 6.10953249e-02 2.32241439e-03 7.18197378e-01 3.12874750e+03 +6.92600000e-04 -1.65360702e-12 7.09287693e-02 5.55496627e-02 9.19064504e-02 6.10953254e-02 2.32241434e-03 7.18197378e-01 3.12874750e+03 +6.92700000e-04 -1.65360702e-12 7.09287690e-02 5.55496622e-02 9.19064507e-02 6.10953259e-02 2.32241428e-03 7.18197378e-01 3.12874750e+03 +6.92800000e-04 -1.65360702e-12 7.09287688e-02 5.55496618e-02 9.19064510e-02 6.10953264e-02 2.32241423e-03 7.18197378e-01 3.12874750e+03 +6.92900000e-04 -1.65360702e-12 7.09287685e-02 5.55496613e-02 9.19064513e-02 6.10953269e-02 2.32241418e-03 7.18197378e-01 3.12874750e+03 +6.93000000e-04 -1.65360702e-12 7.09287683e-02 5.55496608e-02 9.19064516e-02 6.10953274e-02 2.32241412e-03 7.18197378e-01 3.12874750e+03 +6.93100000e-04 -1.65360702e-12 7.09287680e-02 5.55496604e-02 9.19064519e-02 6.10953278e-02 2.32241407e-03 7.18197378e-01 3.12874750e+03 +6.93200000e-04 -1.65360702e-12 7.09287678e-02 5.55496599e-02 9.19064522e-02 6.10953283e-02 2.32241401e-03 7.18197378e-01 3.12874750e+03 +6.93300000e-04 -1.65360702e-12 7.09287675e-02 5.55496594e-02 9.19064525e-02 6.10953288e-02 2.32241396e-03 7.18197378e-01 3.12874750e+03 +6.93400000e-04 -1.65360702e-12 7.09287673e-02 5.55496590e-02 9.19064528e-02 6.10953293e-02 2.32241391e-03 7.18197378e-01 3.12874750e+03 +6.93500000e-04 -1.65360702e-12 7.09287670e-02 5.55496585e-02 9.19064531e-02 6.10953297e-02 2.32241386e-03 7.18197378e-01 3.12874750e+03 +6.93600000e-04 -1.65360702e-12 7.09287667e-02 5.55496580e-02 9.19064533e-02 6.10953302e-02 2.32241380e-03 7.18197378e-01 3.12874750e+03 +6.93700000e-04 -1.65360702e-12 7.09287665e-02 5.55496576e-02 9.19064536e-02 6.10953307e-02 2.32241375e-03 7.18197378e-01 3.12874750e+03 +6.93800000e-04 -1.65360702e-12 7.09287662e-02 5.55496571e-02 9.19064539e-02 6.10953312e-02 2.32241370e-03 7.18197378e-01 3.12874750e+03 +6.93900000e-04 -1.65360702e-12 7.09287660e-02 5.55496567e-02 9.19064542e-02 6.10953316e-02 2.32241364e-03 7.18197378e-01 3.12874750e+03 +6.94000000e-04 -1.65360702e-12 7.09287657e-02 5.55496562e-02 9.19064545e-02 6.10953321e-02 2.32241359e-03 7.18197378e-01 3.12874750e+03 +6.94100000e-04 -1.65360702e-12 7.09287655e-02 5.55496558e-02 9.19064548e-02 6.10953326e-02 2.32241354e-03 7.18197378e-01 3.12874750e+03 +6.94200000e-04 -1.65360702e-12 7.09287652e-02 5.55496553e-02 9.19064551e-02 6.10953330e-02 2.32241349e-03 7.18197378e-01 3.12874750e+03 +6.94300000e-04 -1.65360702e-12 7.09287650e-02 5.55496548e-02 9.19064554e-02 6.10953335e-02 2.32241344e-03 7.18197378e-01 3.12874750e+03 +6.94400000e-04 -1.65360702e-12 7.09287647e-02 5.55496544e-02 9.19064557e-02 6.10953340e-02 2.32241338e-03 7.18197378e-01 3.12874765e+03 +6.94500000e-04 -1.65360702e-12 7.09287645e-02 5.55496539e-02 9.19064559e-02 6.10953344e-02 2.32241333e-03 7.18197378e-01 3.12874765e+03 +6.94600000e-04 -1.65360702e-12 7.09287642e-02 5.55496535e-02 9.19064562e-02 6.10953349e-02 2.32241328e-03 7.18197378e-01 3.12874765e+03 +6.94700000e-04 -1.65360702e-12 7.09287640e-02 5.55496530e-02 9.19064565e-02 6.10953353e-02 2.32241323e-03 7.18197378e-01 3.12874765e+03 +6.94800000e-04 -1.65360702e-12 7.09287638e-02 5.55496526e-02 9.19064568e-02 6.10953358e-02 2.32241318e-03 7.18197378e-01 3.12874765e+03 +6.94900000e-04 -1.65360702e-12 7.09287635e-02 5.55496522e-02 9.19064571e-02 6.10953363e-02 2.32241313e-03 7.18197378e-01 3.12874765e+03 +6.95000000e-04 -1.65360702e-12 7.09287633e-02 5.55496517e-02 9.19064574e-02 6.10953367e-02 2.32241307e-03 7.18197378e-01 3.12874765e+03 +6.95100000e-04 -1.65360702e-12 7.09287630e-02 5.55496513e-02 9.19064577e-02 6.10953372e-02 2.32241302e-03 7.18197378e-01 3.12874765e+03 +6.95200000e-04 -1.65360702e-12 7.09287628e-02 5.55496508e-02 9.19064579e-02 6.10953376e-02 2.32241297e-03 7.18197378e-01 3.12874765e+03 +6.95300000e-04 -1.65360702e-12 7.09287625e-02 5.55496504e-02 9.19064582e-02 6.10953381e-02 2.32241292e-03 7.18197378e-01 3.12874765e+03 +6.95400000e-04 -1.65360702e-12 7.09287623e-02 5.55496499e-02 9.19064585e-02 6.10953385e-02 2.32241287e-03 7.18197378e-01 3.12874765e+03 +6.95500000e-04 -1.65360702e-12 7.09287621e-02 5.55496495e-02 9.19064588e-02 6.10953390e-02 2.32241282e-03 7.18197378e-01 3.12874765e+03 +6.95600000e-04 -1.65360702e-12 7.09287618e-02 5.55496491e-02 9.19064591e-02 6.10953394e-02 2.32241277e-03 7.18197378e-01 3.12874765e+03 +6.95700000e-04 -1.65360702e-12 7.09287616e-02 5.55496486e-02 9.19064593e-02 6.10953399e-02 2.32241272e-03 7.18197378e-01 3.12874765e+03 +6.95800000e-04 -1.65360702e-12 7.09287613e-02 5.55496482e-02 9.19064596e-02 6.10953403e-02 2.32241267e-03 7.18197378e-01 3.12874765e+03 +6.95900000e-04 -1.65360702e-12 7.09287611e-02 5.55496478e-02 9.19064599e-02 6.10953408e-02 2.32241262e-03 7.18197378e-01 3.12874765e+03 +6.96000000e-04 -1.65360702e-12 7.09287609e-02 5.55496473e-02 9.19064602e-02 6.10953412e-02 2.32241257e-03 7.18197378e-01 3.12874765e+03 +6.96100000e-04 -1.65360702e-12 7.09287606e-02 5.55496469e-02 9.19064604e-02 6.10953417e-02 2.32241252e-03 7.18197378e-01 3.12874765e+03 +6.96200000e-04 -1.65360702e-12 7.09287604e-02 5.55496465e-02 9.19064607e-02 6.10953421e-02 2.32241247e-03 7.18197378e-01 3.12874765e+03 +6.96300000e-04 -1.65360702e-12 7.09287602e-02 5.55496460e-02 9.19064610e-02 6.10953426e-02 2.32241242e-03 7.18197378e-01 3.12874765e+03 +6.96400000e-04 -1.65360702e-12 7.09287599e-02 5.55496456e-02 9.19064613e-02 6.10953430e-02 2.32241237e-03 7.18197378e-01 3.12874765e+03 +6.96500000e-04 -1.65360702e-12 7.09287597e-02 5.55496452e-02 9.19064615e-02 6.10953434e-02 2.32241232e-03 7.18197378e-01 3.12874765e+03 +6.96600000e-04 -1.65360702e-12 7.09287594e-02 5.55496448e-02 9.19064618e-02 6.10953439e-02 2.32241227e-03 7.18197378e-01 3.12874765e+03 +6.96700000e-04 -1.65360702e-12 7.09287592e-02 5.55496443e-02 9.19064621e-02 6.10953443e-02 2.32241223e-03 7.18197378e-01 3.12874765e+03 +6.96800000e-04 -1.65360702e-12 7.09287590e-02 5.55496439e-02 9.19064623e-02 6.10953447e-02 2.32241218e-03 7.18197378e-01 3.12874765e+03 +6.96900000e-04 -1.65360702e-12 7.09287587e-02 5.55496435e-02 9.19064626e-02 6.10953452e-02 2.32241213e-03 7.18197378e-01 3.12874765e+03 +6.97000000e-04 -1.65360702e-12 7.09287585e-02 5.55496431e-02 9.19064629e-02 6.10953456e-02 2.32241208e-03 7.18197378e-01 3.12874765e+03 +6.97100000e-04 -1.65360702e-12 7.09287583e-02 5.55496426e-02 9.19064631e-02 6.10953460e-02 2.32241203e-03 7.18197378e-01 3.12874765e+03 +6.97200000e-04 -1.65360702e-12 7.09287581e-02 5.55496422e-02 9.19064634e-02 6.10953465e-02 2.32241198e-03 7.18197378e-01 3.12874765e+03 +6.97300000e-04 -1.65360702e-12 7.09287578e-02 5.55496418e-02 9.19064637e-02 6.10953469e-02 2.32241193e-03 7.18197378e-01 3.12874765e+03 +6.97400000e-04 -1.65360702e-12 7.09287576e-02 5.55496414e-02 9.19064639e-02 6.10953473e-02 2.32241189e-03 7.18197378e-01 3.12874765e+03 +6.97500000e-04 -1.65360702e-12 7.09287574e-02 5.55496410e-02 9.19064642e-02 6.10953478e-02 2.32241184e-03 7.18197378e-01 3.12874765e+03 +6.97600000e-04 -1.65360702e-12 7.09287571e-02 5.55496406e-02 9.19064645e-02 6.10953482e-02 2.32241179e-03 7.18197378e-01 3.12874765e+03 +6.97700000e-04 -1.65360702e-12 7.09287569e-02 5.55496401e-02 9.19064647e-02 6.10953486e-02 2.32241174e-03 7.18197378e-01 3.12874765e+03 +6.97800000e-04 -1.65360702e-12 7.09287567e-02 5.55496397e-02 9.19064650e-02 6.10953490e-02 2.32241170e-03 7.18197378e-01 3.12874765e+03 +6.97900000e-04 -1.65360702e-12 7.09287565e-02 5.55496393e-02 9.19064653e-02 6.10953495e-02 2.32241165e-03 7.18197378e-01 3.12874765e+03 +6.98000000e-04 -1.65360702e-12 7.09287562e-02 5.55496389e-02 9.19064655e-02 6.10953499e-02 2.32241160e-03 7.18197378e-01 3.12874765e+03 +6.98100000e-04 -1.65360702e-12 7.09287560e-02 5.55496385e-02 9.19064658e-02 6.10953503e-02 2.32241155e-03 7.18197378e-01 3.12874765e+03 +6.98200000e-04 -1.65360702e-12 7.09287558e-02 5.55496381e-02 9.19064660e-02 6.10953507e-02 2.32241151e-03 7.18197378e-01 3.12874765e+03 +6.98300000e-04 -1.65360702e-12 7.09287556e-02 5.55496377e-02 9.19064663e-02 6.10953512e-02 2.32241146e-03 7.18197378e-01 3.12874765e+03 +6.98400000e-04 -1.65360702e-12 7.09287553e-02 5.55496373e-02 9.19064666e-02 6.10953516e-02 2.32241141e-03 7.18197378e-01 3.12874765e+03 +6.98500000e-04 -1.65360702e-12 7.09287551e-02 5.55496369e-02 9.19064668e-02 6.10953520e-02 2.32241137e-03 7.18197378e-01 3.12874765e+03 +6.98600000e-04 -1.65360702e-12 7.09287549e-02 5.55496365e-02 9.19064671e-02 6.10953524e-02 2.32241132e-03 7.18197378e-01 3.12874765e+03 +6.98700000e-04 -1.65360702e-12 7.09287547e-02 5.55496360e-02 9.19064673e-02 6.10953528e-02 2.32241127e-03 7.18197378e-01 3.12874765e+03 +6.98800000e-04 -1.65360702e-12 7.09287544e-02 5.55496356e-02 9.19064676e-02 6.10953532e-02 2.32241123e-03 7.18197378e-01 3.12874765e+03 +6.98900000e-04 -1.65360702e-12 7.09287542e-02 5.55496352e-02 9.19064679e-02 6.10953537e-02 2.32241118e-03 7.18197378e-01 3.12874765e+03 +6.99000000e-04 -1.65360702e-12 7.09287540e-02 5.55496348e-02 9.19064681e-02 6.10953541e-02 2.32241113e-03 7.18197378e-01 3.12874765e+03 +6.99100000e-04 -1.65360702e-12 7.09287538e-02 5.55496344e-02 9.19064684e-02 6.10953545e-02 2.32241109e-03 7.18197378e-01 3.12874765e+03 +6.99200000e-04 -1.65360702e-12 7.09287536e-02 5.55496340e-02 9.19064686e-02 6.10953549e-02 2.32241104e-03 7.18197378e-01 3.12874765e+03 +6.99300000e-04 -1.65360702e-12 7.09287533e-02 5.55496336e-02 9.19064689e-02 6.10953553e-02 2.32241100e-03 7.18197378e-01 3.12874765e+03 +6.99400000e-04 -1.65360702e-12 7.09287531e-02 5.55496332e-02 9.19064691e-02 6.10953557e-02 2.32241095e-03 7.18197378e-01 3.12874765e+03 +6.99500000e-04 -1.65360702e-12 7.09287529e-02 5.55496329e-02 9.19064694e-02 6.10953561e-02 2.32241091e-03 7.18197378e-01 3.12874765e+03 +6.99600000e-04 -1.65360702e-12 7.09287527e-02 5.55496325e-02 9.19064696e-02 6.10953565e-02 2.32241086e-03 7.18197378e-01 3.12874765e+03 +6.99700000e-04 -1.65360702e-12 7.09287525e-02 5.55496321e-02 9.19064699e-02 6.10953569e-02 2.32241081e-03 7.18197378e-01 3.12874777e+03 +6.99800000e-04 -1.65360702e-12 7.09287523e-02 5.55496317e-02 9.19064701e-02 6.10953573e-02 2.32241077e-03 7.18197378e-01 3.12874777e+03 +6.99900000e-04 -1.65360702e-12 7.09287520e-02 5.55496313e-02 9.19064704e-02 6.10953577e-02 2.32241072e-03 7.18197378e-01 3.12874777e+03 +7.00000000e-04 -1.65360702e-12 7.09287518e-02 5.55496309e-02 9.19064706e-02 6.10953581e-02 2.32241068e-03 7.18197378e-01 3.12874777e+03 +7.00100000e-04 -1.65360702e-12 7.09287516e-02 5.55496305e-02 9.19064709e-02 6.10953585e-02 2.32241063e-03 7.18197378e-01 3.12874777e+03 +7.00200000e-04 -1.65360702e-12 7.09287514e-02 5.55496301e-02 9.19064711e-02 6.10953589e-02 2.32241059e-03 7.18197378e-01 3.12874777e+03 +7.00300000e-04 -1.65360702e-12 7.09287512e-02 5.55496297e-02 9.19064714e-02 6.10953593e-02 2.32241055e-03 7.18197378e-01 3.12874777e+03 +7.00400000e-04 -1.65360702e-12 7.09287510e-02 5.55496293e-02 9.19064716e-02 6.10953597e-02 2.32241050e-03 7.18197378e-01 3.12874777e+03 +7.00500000e-04 -1.65360702e-12 7.09287508e-02 5.55496289e-02 9.19064719e-02 6.10953601e-02 2.32241046e-03 7.18197378e-01 3.12874777e+03 +7.00600000e-04 -1.65360702e-12 7.09287506e-02 5.55496286e-02 9.19064721e-02 6.10953605e-02 2.32241041e-03 7.18197378e-01 3.12874777e+03 +7.00700000e-04 -1.65360702e-12 7.09287503e-02 5.55496282e-02 9.19064723e-02 6.10953609e-02 2.32241037e-03 7.18197378e-01 3.12874777e+03 +7.00800000e-04 -1.65360702e-12 7.09287501e-02 5.55496278e-02 9.19064726e-02 6.10953613e-02 2.32241032e-03 7.18197378e-01 3.12874777e+03 +7.00900000e-04 -1.65360702e-12 7.09287499e-02 5.55496274e-02 9.19064728e-02 6.10953617e-02 2.32241028e-03 7.18197378e-01 3.12874777e+03 +7.01000000e-04 -1.65360702e-12 7.09287497e-02 5.55496270e-02 9.19064731e-02 6.10953621e-02 2.32241024e-03 7.18197378e-01 3.12874777e+03 +7.01100000e-04 -1.65360702e-12 7.09287495e-02 5.55496267e-02 9.19064733e-02 6.10953625e-02 2.32241019e-03 7.18197378e-01 3.12874777e+03 +7.01200000e-04 -1.65360702e-12 7.09287493e-02 5.55496263e-02 9.19064736e-02 6.10953629e-02 2.32241015e-03 7.18197378e-01 3.12874777e+03 +7.01300000e-04 -1.65360702e-12 7.09287491e-02 5.55496259e-02 9.19064738e-02 6.10953633e-02 2.32241011e-03 7.18197378e-01 3.12874777e+03 +7.01400000e-04 -1.65360702e-12 7.09287489e-02 5.55496255e-02 9.19064740e-02 6.10953636e-02 2.32241006e-03 7.18197378e-01 3.12874777e+03 +7.01500000e-04 -1.65360702e-12 7.09287487e-02 5.55496251e-02 9.19064743e-02 6.10953640e-02 2.32241002e-03 7.18197378e-01 3.12874777e+03 +7.01600000e-04 -1.65360702e-12 7.09287485e-02 5.55496248e-02 9.19064745e-02 6.10953644e-02 2.32240998e-03 7.18197378e-01 3.12874777e+03 +7.01700000e-04 -1.65360702e-12 7.09287483e-02 5.55496244e-02 9.19064748e-02 6.10953648e-02 2.32240993e-03 7.18197378e-01 3.12874777e+03 +7.01800000e-04 -1.65360702e-12 7.09287481e-02 5.55496240e-02 9.19064750e-02 6.10953652e-02 2.32240989e-03 7.18197378e-01 3.12874777e+03 +7.01900000e-04 -1.65360702e-12 7.09287479e-02 5.55496236e-02 9.19064752e-02 6.10953656e-02 2.32240985e-03 7.18197378e-01 3.12874777e+03 +7.02000000e-04 -1.65360702e-12 7.09287477e-02 5.55496233e-02 9.19064755e-02 6.10953659e-02 2.32240980e-03 7.18197378e-01 3.12874777e+03 +7.02100000e-04 -1.65360702e-12 7.09287474e-02 5.55496229e-02 9.19064757e-02 6.10953663e-02 2.32240976e-03 7.18197378e-01 3.12874777e+03 +7.02200000e-04 -1.65360702e-12 7.09287472e-02 5.55496225e-02 9.19064759e-02 6.10953667e-02 2.32240972e-03 7.18197378e-01 3.12874777e+03 +7.02300000e-04 -1.65360702e-12 7.09287470e-02 5.55496222e-02 9.19064762e-02 6.10953671e-02 2.32240968e-03 7.18197378e-01 3.12874777e+03 +7.02400000e-04 -1.65360702e-12 7.09287468e-02 5.55496218e-02 9.19064764e-02 6.10953675e-02 2.32240963e-03 7.18197378e-01 3.12874777e+03 +7.02500000e-04 -1.65360702e-12 7.09287466e-02 5.55496214e-02 9.19064766e-02 6.10953678e-02 2.32240959e-03 7.18197378e-01 3.12874777e+03 +7.02600000e-04 -1.65360702e-12 7.09287464e-02 5.55496211e-02 9.19064769e-02 6.10953682e-02 2.32240955e-03 7.18197378e-01 3.12874777e+03 +7.02700000e-04 -1.65360702e-12 7.09287462e-02 5.55496207e-02 9.19064771e-02 6.10953686e-02 2.32240951e-03 7.18197378e-01 3.12874777e+03 +7.02800000e-04 -1.65360702e-12 7.09287460e-02 5.55496203e-02 9.19064773e-02 6.10953690e-02 2.32240947e-03 7.18197378e-01 3.12874777e+03 +7.02900000e-04 -1.65360702e-12 7.09287458e-02 5.55496200e-02 9.19064776e-02 6.10953693e-02 2.32240942e-03 7.18197378e-01 3.12874777e+03 +7.03000000e-04 -1.65360702e-12 7.09287456e-02 5.55496196e-02 9.19064778e-02 6.10953697e-02 2.32240938e-03 7.18197378e-01 3.12874777e+03 +7.03100000e-04 -1.65360702e-12 7.09287454e-02 5.55496193e-02 9.19064780e-02 6.10953701e-02 2.32240934e-03 7.18197378e-01 3.12874777e+03 +7.03200000e-04 -1.65360702e-12 7.09287452e-02 5.55496189e-02 9.19064783e-02 6.10953705e-02 2.32240930e-03 7.18197378e-01 3.12874777e+03 +7.03300000e-04 -1.65360702e-12 7.09287450e-02 5.55496185e-02 9.19064785e-02 6.10953708e-02 2.32240926e-03 7.18197378e-01 3.12874777e+03 +7.03400000e-04 -1.65360702e-12 7.09287448e-02 5.55496182e-02 9.19064787e-02 6.10953712e-02 2.32240922e-03 7.18197378e-01 3.12874777e+03 +7.03500000e-04 -1.65360702e-12 7.09287447e-02 5.55496178e-02 9.19064789e-02 6.10953716e-02 2.32240918e-03 7.18197378e-01 3.12874777e+03 +7.03600000e-04 -1.65360702e-12 7.09287445e-02 5.55496175e-02 9.19064792e-02 6.10953719e-02 2.32240914e-03 7.18197378e-01 3.12874777e+03 +7.03700000e-04 -1.65360702e-12 7.09287443e-02 5.55496171e-02 9.19064794e-02 6.10953723e-02 2.32240909e-03 7.18197378e-01 3.12874777e+03 +7.03800000e-04 -1.65360702e-12 7.09287441e-02 5.55496168e-02 9.19064796e-02 6.10953727e-02 2.32240905e-03 7.18197378e-01 3.12874777e+03 +7.03900000e-04 -1.65360702e-12 7.09287439e-02 5.55496164e-02 9.19064798e-02 6.10953730e-02 2.32240901e-03 7.18197378e-01 3.12874777e+03 +7.04000000e-04 -1.65360702e-12 7.09287437e-02 5.55496160e-02 9.19064801e-02 6.10953734e-02 2.32240897e-03 7.18197378e-01 3.12874777e+03 +7.04100000e-04 -1.65360702e-12 7.09287435e-02 5.55496157e-02 9.19064803e-02 6.10953737e-02 2.32240893e-03 7.18197378e-01 3.12874777e+03 +7.04200000e-04 -1.65360702e-12 7.09287433e-02 5.55496153e-02 9.19064805e-02 6.10953741e-02 2.32240889e-03 7.18197378e-01 3.12874777e+03 +7.04300000e-04 -1.65360702e-12 7.09287431e-02 5.55496150e-02 9.19064807e-02 6.10953745e-02 2.32240885e-03 7.18197378e-01 3.12874777e+03 +7.04400000e-04 -1.65360702e-12 7.09287429e-02 5.55496146e-02 9.19064810e-02 6.10953748e-02 2.32240881e-03 7.18197378e-01 3.12874777e+03 +7.04500000e-04 -1.65360702e-12 7.09287427e-02 5.55496143e-02 9.19064812e-02 6.10953752e-02 2.32240877e-03 7.18197378e-01 3.12874777e+03 +7.04600000e-04 -1.65360702e-12 7.09287425e-02 5.55496139e-02 9.19064814e-02 6.10953755e-02 2.32240873e-03 7.18197378e-01 3.12874777e+03 +7.04700000e-04 -1.65360702e-12 7.09287423e-02 5.55496136e-02 9.19064816e-02 6.10953759e-02 2.32240869e-03 7.18197378e-01 3.12874777e+03 +7.04800000e-04 -1.65360702e-12 7.09287421e-02 5.55496133e-02 9.19064818e-02 6.10953762e-02 2.32240865e-03 7.18197378e-01 3.12874777e+03 +7.04900000e-04 -1.65360702e-12 7.09287420e-02 5.55496129e-02 9.19064821e-02 6.10953766e-02 2.32240861e-03 7.18197378e-01 3.12874777e+03 +7.05000000e-04 -1.65360702e-12 7.09287418e-02 5.55496126e-02 9.19064823e-02 6.10953770e-02 2.32240857e-03 7.18197378e-01 3.12874789e+03 +7.05100000e-04 -1.65360702e-12 7.09287416e-02 5.55496122e-02 9.19064825e-02 6.10953773e-02 2.32240853e-03 7.18197378e-01 3.12874789e+03 +7.05200000e-04 -1.65360702e-12 7.09287414e-02 5.55496119e-02 9.19064827e-02 6.10953777e-02 2.32240849e-03 7.18197378e-01 3.12874789e+03 +7.05300000e-04 -1.65360702e-12 7.09287412e-02 5.55496115e-02 9.19064829e-02 6.10953780e-02 2.32240845e-03 7.18197378e-01 3.12874789e+03 +7.05400000e-04 -1.65360702e-12 7.09287410e-02 5.55496112e-02 9.19064832e-02 6.10953784e-02 2.32240842e-03 7.18197378e-01 3.12874789e+03 +7.05500000e-04 -1.65360702e-12 7.09287408e-02 5.55496109e-02 9.19064834e-02 6.10953787e-02 2.32240838e-03 7.18197378e-01 3.12874789e+03 +7.05600000e-04 -1.65360702e-12 7.09287406e-02 5.55496105e-02 9.19064836e-02 6.10953791e-02 2.32240834e-03 7.18197378e-01 3.12874789e+03 +7.05700000e-04 -1.65360702e-12 7.09287405e-02 5.55496102e-02 9.19064838e-02 6.10953794e-02 2.32240830e-03 7.18197378e-01 3.12874789e+03 +7.05800000e-04 -1.65360702e-12 7.09287403e-02 5.55496098e-02 9.19064840e-02 6.10953798e-02 2.32240826e-03 7.18197378e-01 3.12874789e+03 +7.05900000e-04 -1.65360702e-12 7.09287401e-02 5.55496095e-02 9.19064842e-02 6.10953801e-02 2.32240822e-03 7.18197378e-01 3.12874789e+03 +7.06000000e-04 -1.65360702e-12 7.09287399e-02 5.55496092e-02 9.19064844e-02 6.10953804e-02 2.32240818e-03 7.18197378e-01 3.12874789e+03 +7.06100000e-04 -1.65360702e-12 7.09287397e-02 5.55496088e-02 9.19064847e-02 6.10953808e-02 2.32240814e-03 7.18197378e-01 3.12874789e+03 +7.06200000e-04 -1.65360702e-12 7.09287395e-02 5.55496085e-02 9.19064849e-02 6.10953811e-02 2.32240811e-03 7.18197378e-01 3.12874789e+03 +7.06300000e-04 -1.65360702e-12 7.09287394e-02 5.55496082e-02 9.19064851e-02 6.10953815e-02 2.32240807e-03 7.18197378e-01 3.12874789e+03 +7.06400000e-04 -1.65360702e-12 7.09287392e-02 5.55496078e-02 9.19064853e-02 6.10953818e-02 2.32240803e-03 7.18197378e-01 3.12874789e+03 +7.06500000e-04 -1.65360702e-12 7.09287390e-02 5.55496075e-02 9.19064855e-02 6.10953822e-02 2.32240799e-03 7.18197378e-01 3.12874789e+03 +7.06600000e-04 -1.65360702e-12 7.09287388e-02 5.55496072e-02 9.19064857e-02 6.10953825e-02 2.32240795e-03 7.18197378e-01 3.12874789e+03 +7.06700000e-04 -1.65360702e-12 7.09287386e-02 5.55496069e-02 9.19064859e-02 6.10953828e-02 2.32240792e-03 7.18197378e-01 3.12874789e+03 +7.06800000e-04 -1.65360702e-12 7.09287385e-02 5.55496065e-02 9.19064861e-02 6.10953832e-02 2.32240788e-03 7.18197378e-01 3.12874789e+03 +7.06900000e-04 -1.65360702e-12 7.09287383e-02 5.55496062e-02 9.19064863e-02 6.10953835e-02 2.32240784e-03 7.18197378e-01 3.12874789e+03 +7.07000000e-04 -1.65360702e-12 7.09287381e-02 5.55496059e-02 9.19064865e-02 6.10953838e-02 2.32240780e-03 7.18197378e-01 3.12874789e+03 +7.07100000e-04 -1.65360702e-12 7.09287379e-02 5.55496055e-02 9.19064868e-02 6.10953842e-02 2.32240777e-03 7.18197378e-01 3.12874789e+03 +7.07200000e-04 -1.65360702e-12 7.09287377e-02 5.55496052e-02 9.19064870e-02 6.10953845e-02 2.32240773e-03 7.18197378e-01 3.12874789e+03 +7.07300000e-04 -1.65360702e-12 7.09287376e-02 5.55496049e-02 9.19064872e-02 6.10953848e-02 2.32240769e-03 7.18197378e-01 3.12874789e+03 +7.07400000e-04 -1.65360702e-12 7.09287374e-02 5.55496046e-02 9.19064874e-02 6.10953852e-02 2.32240765e-03 7.18197378e-01 3.12874789e+03 +7.07500000e-04 -1.65360702e-12 7.09287372e-02 5.55496043e-02 9.19064876e-02 6.10953855e-02 2.32240762e-03 7.18197378e-01 3.12874789e+03 +7.07600000e-04 -1.65360702e-12 7.09287370e-02 5.55496039e-02 9.19064878e-02 6.10953858e-02 2.32240758e-03 7.18197378e-01 3.12874789e+03 +7.07700000e-04 -1.65360702e-12 7.09287368e-02 5.55496036e-02 9.19064880e-02 6.10953862e-02 2.32240754e-03 7.18197378e-01 3.12874789e+03 +7.07800000e-04 -1.65360702e-12 7.09287367e-02 5.55496033e-02 9.19064882e-02 6.10953865e-02 2.32240751e-03 7.18197378e-01 3.12874789e+03 +7.07900000e-04 -1.65360702e-12 7.09287365e-02 5.55496030e-02 9.19064884e-02 6.10953868e-02 2.32240747e-03 7.18197378e-01 3.12874789e+03 +7.08000000e-04 -1.65360702e-12 7.09287363e-02 5.55496027e-02 9.19064886e-02 6.10953871e-02 2.32240743e-03 7.18197378e-01 3.12874789e+03 +7.08100000e-04 -1.65360702e-12 7.09287361e-02 5.55496023e-02 9.19064888e-02 6.10953875e-02 2.32240740e-03 7.18197378e-01 3.12874789e+03 +7.08200000e-04 -1.65360702e-12 7.09287360e-02 5.55496020e-02 9.19064890e-02 6.10953878e-02 2.32240736e-03 7.18197378e-01 3.12874789e+03 +7.08300000e-04 -1.65360702e-12 7.09287358e-02 5.55496017e-02 9.19064892e-02 6.10953881e-02 2.32240732e-03 7.18197378e-01 3.12874789e+03 +7.08400000e-04 -1.65360702e-12 7.09287356e-02 5.55496014e-02 9.19064894e-02 6.10953884e-02 2.32240729e-03 7.18197378e-01 3.12874789e+03 +7.08500000e-04 -1.65360702e-12 7.09287355e-02 5.55496011e-02 9.19064896e-02 6.10953888e-02 2.32240725e-03 7.18197378e-01 3.12874789e+03 +7.08600000e-04 -1.65360702e-12 7.09287353e-02 5.55496008e-02 9.19064898e-02 6.10953891e-02 2.32240721e-03 7.18197378e-01 3.12874789e+03 +7.08700000e-04 -1.65360702e-12 7.09287351e-02 5.55496004e-02 9.19064900e-02 6.10953894e-02 2.32240718e-03 7.18197378e-01 3.12874789e+03 +7.08800000e-04 -1.65360702e-12 7.09287349e-02 5.55496001e-02 9.19064902e-02 6.10953897e-02 2.32240714e-03 7.18197378e-01 3.12874789e+03 +7.08900000e-04 -1.65360702e-12 7.09287348e-02 5.55495998e-02 9.19064904e-02 6.10953901e-02 2.32240711e-03 7.18197378e-01 3.12874789e+03 +7.09000000e-04 -1.65360702e-12 7.09287346e-02 5.55495995e-02 9.19064906e-02 6.10953904e-02 2.32240707e-03 7.18197378e-01 3.12874789e+03 +7.09100000e-04 -1.65360702e-12 7.09287344e-02 5.55495992e-02 9.19064908e-02 6.10953907e-02 2.32240704e-03 7.18197378e-01 3.12874789e+03 +7.09200000e-04 -1.65360702e-12 7.09287343e-02 5.55495989e-02 9.19064910e-02 6.10953910e-02 2.32240700e-03 7.18197378e-01 3.12874789e+03 +7.09300000e-04 -1.65360702e-12 7.09287341e-02 5.55495986e-02 9.19064912e-02 6.10953913e-02 2.32240696e-03 7.18197378e-01 3.12874789e+03 +7.09400000e-04 -1.65360702e-12 7.09287339e-02 5.55495983e-02 9.19064914e-02 6.10953916e-02 2.32240693e-03 7.18197378e-01 3.12874789e+03 +7.09500000e-04 -1.65360702e-12 7.09287338e-02 5.55495980e-02 9.19064916e-02 6.10953920e-02 2.32240689e-03 7.18197378e-01 3.12874789e+03 +7.09600000e-04 -1.65360702e-12 7.09287336e-02 5.55495977e-02 9.19064918e-02 6.10953923e-02 2.32240686e-03 7.18197378e-01 3.12874789e+03 +7.09700000e-04 -1.65360702e-12 7.09287334e-02 5.55495974e-02 9.19064920e-02 6.10953926e-02 2.32240682e-03 7.18197378e-01 3.12874789e+03 +7.09800000e-04 -1.65360702e-12 7.09287332e-02 5.55495971e-02 9.19064922e-02 6.10953929e-02 2.32240679e-03 7.18197378e-01 3.12874789e+03 +7.09900000e-04 -1.65360702e-12 7.09287331e-02 5.55495968e-02 9.19064923e-02 6.10953932e-02 2.32240675e-03 7.18197378e-01 3.12874789e+03 +7.10000000e-04 -1.65360702e-12 7.09287329e-02 5.55495965e-02 9.19064925e-02 6.10953935e-02 2.32240672e-03 7.18197378e-01 3.12874789e+03 +7.10100000e-04 -1.65360702e-12 7.09287328e-02 5.55495962e-02 9.19064927e-02 6.10953938e-02 2.32240668e-03 7.18197378e-01 3.12874789e+03 +7.10200000e-04 -1.65360702e-12 7.09287326e-02 5.55495959e-02 9.19064929e-02 6.10953941e-02 2.32240665e-03 7.18197378e-01 3.12874803e+03 +7.10300000e-04 -1.65360702e-12 7.09287324e-02 5.55495956e-02 9.19064931e-02 6.10953944e-02 2.32240662e-03 7.18197378e-01 3.12874803e+03 +7.10400000e-04 -1.65360702e-12 7.09287323e-02 5.55495953e-02 9.19064933e-02 6.10953948e-02 2.32240658e-03 7.18197378e-01 3.12874803e+03 +7.10500000e-04 -1.65360702e-12 7.09287321e-02 5.55495950e-02 9.19064935e-02 6.10953951e-02 2.32240655e-03 7.18197378e-01 3.12874803e+03 +7.10600000e-04 -1.65360702e-12 7.09287319e-02 5.55495947e-02 9.19064937e-02 6.10953954e-02 2.32240651e-03 7.18197378e-01 3.12874803e+03 +7.10700000e-04 -1.65360702e-12 7.09287318e-02 5.55495944e-02 9.19064939e-02 6.10953957e-02 2.32240648e-03 7.18197378e-01 3.12874803e+03 +7.10800000e-04 -1.65360702e-12 7.09287316e-02 5.55495941e-02 9.19064941e-02 6.10953960e-02 2.32240644e-03 7.18197378e-01 3.12874803e+03 +7.10900000e-04 -1.65360702e-12 7.09287314e-02 5.55495938e-02 9.19064942e-02 6.10953963e-02 2.32240641e-03 7.18197378e-01 3.12874803e+03 +7.11000000e-04 -1.65360702e-12 7.09287313e-02 5.55495935e-02 9.19064944e-02 6.10953966e-02 2.32240638e-03 7.18197378e-01 3.12874803e+03 +7.11100000e-04 -1.65360702e-12 7.09287311e-02 5.55495932e-02 9.19064946e-02 6.10953969e-02 2.32240634e-03 7.18197378e-01 3.12874803e+03 +7.11200000e-04 -1.65360702e-12 7.09287310e-02 5.55495929e-02 9.19064948e-02 6.10953972e-02 2.32240631e-03 7.18197378e-01 3.12874803e+03 +7.11300000e-04 -1.65360702e-12 7.09287308e-02 5.55495926e-02 9.19064950e-02 6.10953975e-02 2.32240627e-03 7.18197378e-01 3.12874803e+03 +7.11400000e-04 -1.65360702e-12 7.09287306e-02 5.55495923e-02 9.19064952e-02 6.10953978e-02 2.32240624e-03 7.18197378e-01 3.12874803e+03 +7.11500000e-04 -1.65360702e-12 7.09287305e-02 5.55495920e-02 9.19064954e-02 6.10953981e-02 2.32240621e-03 7.18197378e-01 3.12874803e+03 +7.11600000e-04 -1.65360702e-12 7.09287303e-02 5.55495917e-02 9.19064956e-02 6.10953984e-02 2.32240617e-03 7.18197378e-01 3.12874803e+03 +7.11700000e-04 -1.65360702e-12 7.09287302e-02 5.55495914e-02 9.19064957e-02 6.10953987e-02 2.32240614e-03 7.18197378e-01 3.12874803e+03 +7.11800000e-04 -1.65360702e-12 7.09287300e-02 5.55495911e-02 9.19064959e-02 6.10953990e-02 2.32240611e-03 7.18197378e-01 3.12874803e+03 +7.11900000e-04 -1.65360702e-12 7.09287298e-02 5.55495909e-02 9.19064961e-02 6.10953993e-02 2.32240607e-03 7.18197378e-01 3.12874803e+03 +7.12000000e-04 -1.65360702e-12 7.09287297e-02 5.55495906e-02 9.19064963e-02 6.10953996e-02 2.32240604e-03 7.18197378e-01 3.12874803e+03 +7.12100000e-04 -1.65360702e-12 7.09287295e-02 5.55495903e-02 9.19064965e-02 6.10953999e-02 2.32240601e-03 7.18197378e-01 3.12874803e+03 +7.12200000e-04 -1.65360702e-12 7.09287294e-02 5.55495900e-02 9.19064967e-02 6.10954002e-02 2.32240598e-03 7.18197378e-01 3.12874803e+03 +7.12300000e-04 -1.65360702e-12 7.09287292e-02 5.55495897e-02 9.19064968e-02 6.10954005e-02 2.32240594e-03 7.18197378e-01 3.12874803e+03 +7.12400000e-04 -1.65360702e-12 7.09287291e-02 5.55495894e-02 9.19064970e-02 6.10954007e-02 2.32240591e-03 7.18197378e-01 3.12874803e+03 +7.12500000e-04 -1.65360702e-12 7.09287289e-02 5.55495891e-02 9.19064972e-02 6.10954010e-02 2.32240588e-03 7.18197378e-01 3.12874803e+03 +7.12600000e-04 -1.65360702e-12 7.09287287e-02 5.55495889e-02 9.19064974e-02 6.10954013e-02 2.32240585e-03 7.18197378e-01 3.12874803e+03 +7.12700000e-04 -1.65360702e-12 7.09287286e-02 5.55495886e-02 9.19064976e-02 6.10954016e-02 2.32240581e-03 7.18197378e-01 3.12874803e+03 +7.12800000e-04 -1.65360702e-12 7.09287284e-02 5.55495883e-02 9.19064977e-02 6.10954019e-02 2.32240578e-03 7.18197378e-01 3.12874803e+03 +7.12900000e-04 -1.65360702e-12 7.09287283e-02 5.55495880e-02 9.19064979e-02 6.10954022e-02 2.32240575e-03 7.18197378e-01 3.12874803e+03 +7.13000000e-04 -1.65360702e-12 7.09287281e-02 5.55495877e-02 9.19064981e-02 6.10954025e-02 2.32240572e-03 7.18197378e-01 3.12874803e+03 +7.13100000e-04 -1.65360702e-12 7.09287280e-02 5.55495875e-02 9.19064983e-02 6.10954028e-02 2.32240568e-03 7.18197378e-01 3.12874803e+03 +7.13200000e-04 -1.65360702e-12 7.09287278e-02 5.55495872e-02 9.19064984e-02 6.10954031e-02 2.32240565e-03 7.18197378e-01 3.12874803e+03 +7.13300000e-04 -1.65360702e-12 7.09287277e-02 5.55495869e-02 9.19064986e-02 6.10954033e-02 2.32240562e-03 7.18197378e-01 3.12874803e+03 +7.13400000e-04 -1.65360702e-12 7.09287275e-02 5.55495866e-02 9.19064988e-02 6.10954036e-02 2.32240559e-03 7.18197378e-01 3.12874803e+03 +7.13500000e-04 -1.65360702e-12 7.09287274e-02 5.55495863e-02 9.19064990e-02 6.10954039e-02 2.32240556e-03 7.18197378e-01 3.12874803e+03 +7.13600000e-04 -1.65360702e-12 7.09287272e-02 5.55495861e-02 9.19064992e-02 6.10954042e-02 2.32240552e-03 7.18197378e-01 3.12874803e+03 +7.13700000e-04 -1.65360702e-12 7.09287271e-02 5.55495858e-02 9.19064993e-02 6.10954045e-02 2.32240549e-03 7.18197378e-01 3.12874803e+03 +7.13800000e-04 -1.65360702e-12 7.09287269e-02 5.55495855e-02 9.19064995e-02 6.10954048e-02 2.32240546e-03 7.18197378e-01 3.12874803e+03 +7.13900000e-04 -1.65360702e-12 7.09287268e-02 5.55495852e-02 9.19064997e-02 6.10954050e-02 2.32240543e-03 7.18197378e-01 3.12874803e+03 +7.14000000e-04 -1.65360702e-12 7.09287266e-02 5.55495850e-02 9.19064998e-02 6.10954053e-02 2.32240540e-03 7.18197378e-01 3.12874803e+03 +7.14100000e-04 -1.65360702e-12 7.09287265e-02 5.55495847e-02 9.19065000e-02 6.10954056e-02 2.32240537e-03 7.18197378e-01 3.12874803e+03 +7.14200000e-04 -1.65360702e-12 7.09287263e-02 5.55495844e-02 9.19065002e-02 6.10954059e-02 2.32240534e-03 7.18197378e-01 3.12874803e+03 +7.14300000e-04 -1.65360702e-12 7.09287262e-02 5.55495842e-02 9.19065004e-02 6.10954062e-02 2.32240530e-03 7.18197378e-01 3.12874803e+03 +7.14400000e-04 -1.65360702e-12 7.09287260e-02 5.55495839e-02 9.19065005e-02 6.10954064e-02 2.32240527e-03 7.18197378e-01 3.12874803e+03 +7.14500000e-04 -1.65360702e-12 7.09287259e-02 5.55495836e-02 9.19065007e-02 6.10954067e-02 2.32240524e-03 7.18197378e-01 3.12874803e+03 +7.14600000e-04 -1.65360702e-12 7.09287257e-02 5.55495833e-02 9.19065009e-02 6.10954070e-02 2.32240521e-03 7.18197378e-01 3.12874803e+03 +7.14700000e-04 -1.65360702e-12 7.09287256e-02 5.55495831e-02 9.19065011e-02 6.10954073e-02 2.32240518e-03 7.18197378e-01 3.12874803e+03 +7.14800000e-04 -1.65360702e-12 7.09287254e-02 5.55495828e-02 9.19065012e-02 6.10954075e-02 2.32240515e-03 7.18197378e-01 3.12874803e+03 +7.14900000e-04 -1.65360702e-12 7.09287253e-02 5.55495825e-02 9.19065014e-02 6.10954078e-02 2.32240512e-03 7.18197378e-01 3.12874803e+03 +7.15000000e-04 -1.65360702e-12 7.09287251e-02 5.55495823e-02 9.19065016e-02 6.10954081e-02 2.32240509e-03 7.18197378e-01 3.12874803e+03 +7.15100000e-04 -1.65360702e-12 7.09287250e-02 5.55495820e-02 9.19065017e-02 6.10954084e-02 2.32240506e-03 7.18197378e-01 3.12874803e+03 +7.15200000e-04 -1.65360702e-12 7.09287248e-02 5.55495817e-02 9.19065019e-02 6.10954086e-02 2.32240503e-03 7.18197378e-01 3.12874803e+03 +7.15300000e-04 -1.65360702e-12 7.09287247e-02 5.55495815e-02 9.19065021e-02 6.10954089e-02 2.32240500e-03 7.18197378e-01 3.12874803e+03 +7.15400000e-04 -1.65360702e-12 7.09287245e-02 5.55495812e-02 9.19065022e-02 6.10954092e-02 2.32240497e-03 7.18197378e-01 3.12874803e+03 +7.15500000e-04 -1.65360702e-12 7.09287244e-02 5.55495810e-02 9.19065024e-02 6.10954094e-02 2.32240494e-03 7.18197378e-01 3.12874803e+03 +7.15600000e-04 -1.65360702e-12 7.09287243e-02 5.55495807e-02 9.19065026e-02 6.10954097e-02 2.32240491e-03 7.18197378e-01 3.12874803e+03 +7.15700000e-04 -1.65360702e-12 7.09287241e-02 5.55495804e-02 9.19065027e-02 6.10954100e-02 2.32240488e-03 7.18197378e-01 3.12874803e+03 +7.15800000e-04 -1.65360702e-12 7.09287240e-02 5.55495802e-02 9.19065029e-02 6.10954103e-02 2.32240485e-03 7.18197378e-01 3.12874803e+03 +7.15900000e-04 -1.65360702e-12 7.09287238e-02 5.55495799e-02 9.19065031e-02 6.10954105e-02 2.32240482e-03 7.18197378e-01 3.12874803e+03 +7.16000000e-04 -1.65360702e-12 7.09287237e-02 5.55495797e-02 9.19065032e-02 6.10954108e-02 2.32240479e-03 7.18197378e-01 3.12874803e+03 +7.16100000e-04 -1.65360702e-12 7.09287235e-02 5.55495794e-02 9.19065034e-02 6.10954111e-02 2.32240476e-03 7.18197378e-01 3.12874803e+03 +7.16200000e-04 -1.65360702e-12 7.09287234e-02 5.55495791e-02 9.19065036e-02 6.10954113e-02 2.32240473e-03 7.18197378e-01 3.12874803e+03 +7.16300000e-04 -1.65360702e-12 7.09287233e-02 5.55495789e-02 9.19065037e-02 6.10954116e-02 2.32240470e-03 7.18197378e-01 3.12874803e+03 +7.16400000e-04 -1.65360702e-12 7.09287231e-02 5.55495786e-02 9.19065039e-02 6.10954118e-02 2.32240467e-03 7.18197378e-01 3.12874803e+03 +7.16500000e-04 -1.65360702e-12 7.09287230e-02 5.55495784e-02 9.19065041e-02 6.10954121e-02 2.32240464e-03 7.18197378e-01 3.12874803e+03 +7.16600000e-04 -1.65360702e-12 7.09287228e-02 5.55495781e-02 9.19065042e-02 6.10954124e-02 2.32240461e-03 7.18197378e-01 3.12874803e+03 +7.16700000e-04 -1.65360702e-12 7.09287227e-02 5.55495779e-02 9.19065044e-02 6.10954126e-02 2.32240458e-03 7.18197378e-01 3.12874803e+03 +7.16800000e-04 -1.65360702e-12 7.09287226e-02 5.55495776e-02 9.19065045e-02 6.10954129e-02 2.32240455e-03 7.18197378e-01 3.12874803e+03 +7.16900000e-04 -1.65360702e-12 7.09287224e-02 5.55495774e-02 9.19065047e-02 6.10954132e-02 2.32240452e-03 7.18197378e-01 3.12874803e+03 +7.17000000e-04 -1.65360702e-12 7.09287223e-02 5.55495771e-02 9.19065049e-02 6.10954134e-02 2.32240449e-03 7.18197378e-01 3.12874803e+03 +7.17100000e-04 -1.65360702e-12 7.09287221e-02 5.55495768e-02 9.19065050e-02 6.10954137e-02 2.32240446e-03 7.18197378e-01 3.12874803e+03 +7.17200000e-04 -1.65360702e-12 7.09287220e-02 5.55495766e-02 9.19065052e-02 6.10954139e-02 2.32240443e-03 7.18197378e-01 3.12874803e+03 +7.17300000e-04 -1.65360702e-12 7.09287219e-02 5.55495763e-02 9.19065053e-02 6.10954142e-02 2.32240441e-03 7.18197378e-01 3.12874803e+03 +7.17400000e-04 -1.65360702e-12 7.09287217e-02 5.55495761e-02 9.19065055e-02 6.10954144e-02 2.32240438e-03 7.18197378e-01 3.12874803e+03 +7.17500000e-04 -1.65360702e-12 7.09287216e-02 5.55495758e-02 9.19065057e-02 6.10954147e-02 2.32240435e-03 7.18197378e-01 3.12874803e+03 +7.17600000e-04 -1.65360702e-12 7.09287215e-02 5.55495756e-02 9.19065058e-02 6.10954150e-02 2.32240432e-03 7.18197378e-01 3.12874803e+03 +7.17700000e-04 -1.65360702e-12 7.09287213e-02 5.55495753e-02 9.19065060e-02 6.10954152e-02 2.32240429e-03 7.18197378e-01 3.12874803e+03 +7.17800000e-04 -1.65360702e-12 7.09287212e-02 5.55495751e-02 9.19065061e-02 6.10954155e-02 2.32240426e-03 7.18197378e-01 3.12874803e+03 +7.17900000e-04 -1.65360702e-12 7.09287211e-02 5.55495749e-02 9.19065063e-02 6.10954157e-02 2.32240423e-03 7.18197378e-01 3.12874803e+03 +7.18000000e-04 -1.65360702e-12 7.09287209e-02 5.55495746e-02 9.19065064e-02 6.10954160e-02 2.32240421e-03 7.18197378e-01 3.12874803e+03 +7.18100000e-04 -1.65360702e-12 7.09287208e-02 5.55495744e-02 9.19065066e-02 6.10954162e-02 2.32240418e-03 7.18197378e-01 3.12874803e+03 +7.18200000e-04 -1.65360702e-12 7.09287206e-02 5.55495741e-02 9.19065068e-02 6.10954165e-02 2.32240415e-03 7.18197378e-01 3.12874803e+03 +7.18300000e-04 -1.65360702e-12 7.09287205e-02 5.55495739e-02 9.19065069e-02 6.10954167e-02 2.32240412e-03 7.18197378e-01 3.12874815e+03 +7.18400000e-04 -1.65360702e-12 7.09287204e-02 5.55495736e-02 9.19065071e-02 6.10954170e-02 2.32240409e-03 7.18197378e-01 3.12874815e+03 +7.18500000e-04 -1.65360702e-12 7.09287202e-02 5.55495734e-02 9.19065072e-02 6.10954172e-02 2.32240407e-03 7.18197378e-01 3.12874815e+03 +7.18600000e-04 -1.65360702e-12 7.09287201e-02 5.55495731e-02 9.19065074e-02 6.10954175e-02 2.32240404e-03 7.18197378e-01 3.12874815e+03 +7.18700000e-04 -1.65360702e-12 7.09287200e-02 5.55495729e-02 9.19065075e-02 6.10954177e-02 2.32240401e-03 7.18197378e-01 3.12874815e+03 +7.18800000e-04 -1.65360702e-12 7.09287198e-02 5.55495727e-02 9.19065077e-02 6.10954180e-02 2.32240398e-03 7.18197378e-01 3.12874815e+03 +7.18900000e-04 -1.65360702e-12 7.09287197e-02 5.55495724e-02 9.19065078e-02 6.10954182e-02 2.32240395e-03 7.18197378e-01 3.12874815e+03 +7.19000000e-04 -1.65360702e-12 7.09287196e-02 5.55495722e-02 9.19065080e-02 6.10954185e-02 2.32240393e-03 7.18197378e-01 3.12874815e+03 +7.19100000e-04 -1.65360702e-12 7.09287194e-02 5.55495719e-02 9.19065081e-02 6.10954187e-02 2.32240390e-03 7.18197378e-01 3.12874815e+03 +7.19200000e-04 -1.65360702e-12 7.09287193e-02 5.55495717e-02 9.19065083e-02 6.10954190e-02 2.32240387e-03 7.18197378e-01 3.12874815e+03 +7.19300000e-04 -1.65360702e-12 7.09287192e-02 5.55495715e-02 9.19065084e-02 6.10954192e-02 2.32240384e-03 7.18197378e-01 3.12874815e+03 +7.19400000e-04 -1.65360702e-12 7.09287191e-02 5.55495712e-02 9.19065086e-02 6.10954195e-02 2.32240382e-03 7.18197378e-01 3.12874815e+03 +7.19500000e-04 -1.65360702e-12 7.09287189e-02 5.55495710e-02 9.19065087e-02 6.10954197e-02 2.32240379e-03 7.18197378e-01 3.12874815e+03 +7.19600000e-04 -1.65360702e-12 7.09287188e-02 5.55495707e-02 9.19065089e-02 6.10954199e-02 2.32240376e-03 7.18197378e-01 3.12874815e+03 +7.19700000e-04 -1.65360702e-12 7.09287187e-02 5.55495705e-02 9.19065091e-02 6.10954202e-02 2.32240374e-03 7.18197378e-01 3.12874815e+03 +7.19800000e-04 -1.65360702e-12 7.09287185e-02 5.55495703e-02 9.19065092e-02 6.10954204e-02 2.32240371e-03 7.18197378e-01 3.12874815e+03 +7.19900000e-04 -1.65360702e-12 7.09287184e-02 5.55495700e-02 9.19065093e-02 6.10954207e-02 2.32240368e-03 7.18197378e-01 3.12874815e+03 +7.20000000e-04 -1.65360702e-12 7.09287183e-02 5.55495698e-02 9.19065095e-02 6.10954209e-02 2.32240365e-03 7.18197378e-01 3.12874815e+03 +7.20100000e-04 -1.65360702e-12 7.09287182e-02 5.55495696e-02 9.19065096e-02 6.10954211e-02 2.32240363e-03 7.18197378e-01 3.12874815e+03 +7.20200000e-04 -1.65360702e-12 7.09287180e-02 5.55495693e-02 9.19065098e-02 6.10954214e-02 2.32240360e-03 7.18197378e-01 3.12874815e+03 +7.20300000e-04 -1.65360702e-12 7.09287179e-02 5.55495691e-02 9.19065099e-02 6.10954216e-02 2.32240357e-03 7.18197378e-01 3.12874815e+03 +7.20400000e-04 -1.65360702e-12 7.09287178e-02 5.55495689e-02 9.19065101e-02 6.10954219e-02 2.32240355e-03 7.18197378e-01 3.12874815e+03 +7.20500000e-04 -1.65360702e-12 7.09287176e-02 5.55495686e-02 9.19065102e-02 6.10954221e-02 2.32240352e-03 7.18197378e-01 3.12874815e+03 +7.20600000e-04 -1.65360702e-12 7.09287175e-02 5.55495684e-02 9.19065104e-02 6.10954223e-02 2.32240349e-03 7.18197378e-01 3.12874815e+03 +7.20700000e-04 -1.65360702e-12 7.09287174e-02 5.55495682e-02 9.19065105e-02 6.10954226e-02 2.32240347e-03 7.18197378e-01 3.12874815e+03 +7.20800000e-04 -1.65360702e-12 7.09287173e-02 5.55495680e-02 9.19065107e-02 6.10954228e-02 2.32240344e-03 7.18197378e-01 3.12874815e+03 +7.20900000e-04 -1.65360702e-12 7.09287171e-02 5.55495677e-02 9.19065108e-02 6.10954230e-02 2.32240342e-03 7.18197378e-01 3.12874815e+03 +7.21000000e-04 -1.65360702e-12 7.09287170e-02 5.55495675e-02 9.19065110e-02 6.10954233e-02 2.32240339e-03 7.18197378e-01 3.12874815e+03 +7.21100000e-04 -1.65360702e-12 7.09287169e-02 5.55495673e-02 9.19065111e-02 6.10954235e-02 2.32240336e-03 7.18197378e-01 3.12874815e+03 +7.21200000e-04 -1.65360702e-12 7.09287168e-02 5.55495670e-02 9.19065113e-02 6.10954237e-02 2.32240334e-03 7.18197378e-01 3.12874815e+03 +7.21300000e-04 -1.65360702e-12 7.09287166e-02 5.55495668e-02 9.19065114e-02 6.10954240e-02 2.32240331e-03 7.18197378e-01 3.12874815e+03 +7.21400000e-04 -1.65360702e-12 7.09287165e-02 5.55495666e-02 9.19065115e-02 6.10954242e-02 2.32240328e-03 7.18197378e-01 3.12874815e+03 +7.21500000e-04 -1.65360702e-12 7.09287164e-02 5.55495664e-02 9.19065117e-02 6.10954244e-02 2.32240326e-03 7.18197378e-01 3.12874815e+03 +7.21600000e-04 -1.65360702e-12 7.09287163e-02 5.55495661e-02 9.19065118e-02 6.10954247e-02 2.32240323e-03 7.18197378e-01 3.12874815e+03 +7.21700000e-04 -1.65360702e-12 7.09287161e-02 5.55495659e-02 9.19065120e-02 6.10954249e-02 2.32240321e-03 7.18197378e-01 3.12874815e+03 +7.21800000e-04 -1.65360702e-12 7.09287160e-02 5.55495657e-02 9.19065121e-02 6.10954251e-02 2.32240318e-03 7.18197378e-01 3.12874815e+03 +7.21900000e-04 -1.65360702e-12 7.09287159e-02 5.55495655e-02 9.19065123e-02 6.10954254e-02 2.32240316e-03 7.18197378e-01 3.12874815e+03 +7.22000000e-04 -1.65360702e-12 7.09287158e-02 5.55495653e-02 9.19065124e-02 6.10954256e-02 2.32240313e-03 7.18197378e-01 3.12874815e+03 +7.22100000e-04 -1.65360702e-12 7.09287157e-02 5.55495650e-02 9.19065125e-02 6.10954258e-02 2.32240310e-03 7.18197378e-01 3.12874815e+03 +7.22200000e-04 -1.65360702e-12 7.09287155e-02 5.55495648e-02 9.19065127e-02 6.10954260e-02 2.32240308e-03 7.18197378e-01 3.12874815e+03 +7.22300000e-04 -1.65360702e-12 7.09287154e-02 5.55495646e-02 9.19065128e-02 6.10954263e-02 2.32240305e-03 7.18197378e-01 3.12874815e+03 +7.22400000e-04 -1.65360702e-12 7.09287153e-02 5.55495644e-02 9.19065130e-02 6.10954265e-02 2.32240303e-03 7.18197378e-01 3.12874815e+03 +7.22500000e-04 -1.65360702e-12 7.09287152e-02 5.55495641e-02 9.19065131e-02 6.10954267e-02 2.32240300e-03 7.18197378e-01 3.12874815e+03 +7.22600000e-04 -1.65360702e-12 7.09287151e-02 5.55495639e-02 9.19065132e-02 6.10954270e-02 2.32240298e-03 7.18197378e-01 3.12874815e+03 +7.22700000e-04 -1.65360702e-12 7.09287149e-02 5.55495637e-02 9.19065134e-02 6.10954272e-02 2.32240295e-03 7.18197378e-01 3.12874815e+03 +7.22800000e-04 -1.65360702e-12 7.09287148e-02 5.55495635e-02 9.19065135e-02 6.10954274e-02 2.32240293e-03 7.18197378e-01 3.12874815e+03 +7.22900000e-04 -1.65360702e-12 7.09287147e-02 5.55495633e-02 9.19065137e-02 6.10954276e-02 2.32240290e-03 7.18197378e-01 3.12874815e+03 +7.23000000e-04 -1.65360702e-12 7.09287146e-02 5.55495631e-02 9.19065138e-02 6.10954278e-02 2.32240288e-03 7.18197378e-01 3.12874815e+03 +7.23100000e-04 -1.65360702e-12 7.09287145e-02 5.55495628e-02 9.19065139e-02 6.10954281e-02 2.32240285e-03 7.18197378e-01 3.12874815e+03 +7.23200000e-04 -1.65360702e-12 7.09287143e-02 5.55495626e-02 9.19065141e-02 6.10954283e-02 2.32240283e-03 7.18197378e-01 3.12874815e+03 +7.23300000e-04 -1.65360702e-12 7.09287142e-02 5.55495624e-02 9.19065142e-02 6.10954285e-02 2.32240280e-03 7.18197378e-01 3.12874815e+03 +7.23400000e-04 -1.65360702e-12 7.09287141e-02 5.55495622e-02 9.19065143e-02 6.10954287e-02 2.32240278e-03 7.18197378e-01 3.12874815e+03 +7.23500000e-04 -1.65360702e-12 7.09287140e-02 5.55495620e-02 9.19065145e-02 6.10954290e-02 2.32240275e-03 7.18197378e-01 3.12874815e+03 +7.23600000e-04 -1.65360702e-12 7.09287139e-02 5.55495618e-02 9.19065146e-02 6.10954292e-02 2.32240273e-03 7.18197378e-01 3.12874815e+03 +7.23700000e-04 -1.65360702e-12 7.09287137e-02 5.55495616e-02 9.19065147e-02 6.10954294e-02 2.32240271e-03 7.18197378e-01 3.12874815e+03 +7.23800000e-04 -1.65360702e-12 7.09287136e-02 5.55495613e-02 9.19065149e-02 6.10954296e-02 2.32240268e-03 7.18197378e-01 3.12874815e+03 +7.23900000e-04 -1.65360702e-12 7.09287135e-02 5.55495611e-02 9.19065150e-02 6.10954298e-02 2.32240266e-03 7.18197378e-01 3.12874815e+03 +7.24000000e-04 -1.65360702e-12 7.09287134e-02 5.55495609e-02 9.19065152e-02 6.10954300e-02 2.32240263e-03 7.18197378e-01 3.12874815e+03 +7.24100000e-04 -1.65360702e-12 7.09287133e-02 5.55495607e-02 9.19065153e-02 6.10954303e-02 2.32240261e-03 7.18197378e-01 3.12874815e+03 +7.24200000e-04 -1.65360702e-12 7.09287132e-02 5.55495605e-02 9.19065154e-02 6.10954305e-02 2.32240258e-03 7.18197378e-01 3.12874815e+03 +7.24300000e-04 -1.65360702e-12 7.09287131e-02 5.55495603e-02 9.19065156e-02 6.10954307e-02 2.32240256e-03 7.18197378e-01 3.12874815e+03 +7.24400000e-04 -1.65360702e-12 7.09287129e-02 5.55495601e-02 9.19065157e-02 6.10954309e-02 2.32240254e-03 7.18197378e-01 3.12874815e+03 +7.24500000e-04 -1.65360702e-12 7.09287128e-02 5.55495599e-02 9.19065158e-02 6.10954311e-02 2.32240251e-03 7.18197378e-01 3.12874815e+03 +7.24600000e-04 -1.65360702e-12 7.09287127e-02 5.55495597e-02 9.19065160e-02 6.10954313e-02 2.32240249e-03 7.18197378e-01 3.12874815e+03 +7.24700000e-04 -1.65360702e-12 7.09287126e-02 5.55495595e-02 9.19065161e-02 6.10954315e-02 2.32240246e-03 7.18197378e-01 3.12874815e+03 +7.24800000e-04 -1.65360702e-12 7.09287125e-02 5.55495593e-02 9.19065162e-02 6.10954318e-02 2.32240244e-03 7.18197378e-01 3.12874815e+03 +7.24900000e-04 -1.65360702e-12 7.09287124e-02 5.55495590e-02 9.19065163e-02 6.10954320e-02 2.32240242e-03 7.18197378e-01 3.12874815e+03 +7.25000000e-04 -1.65360702e-12 7.09287123e-02 5.55495588e-02 9.19065165e-02 6.10954322e-02 2.32240239e-03 7.18197378e-01 3.12874815e+03 +7.25100000e-04 -1.65360702e-12 7.09287121e-02 5.55495586e-02 9.19065166e-02 6.10954324e-02 2.32240237e-03 7.18197378e-01 3.12874815e+03 +7.25200000e-04 -1.65360702e-12 7.09287120e-02 5.55495584e-02 9.19065167e-02 6.10954326e-02 2.32240235e-03 7.18197378e-01 3.12874815e+03 +7.25300000e-04 -1.65360702e-12 7.09287119e-02 5.55495582e-02 9.19065169e-02 6.10954328e-02 2.32240232e-03 7.18197378e-01 3.12874815e+03 +7.25400000e-04 -1.65360702e-12 7.09287118e-02 5.55495580e-02 9.19065170e-02 6.10954330e-02 2.32240230e-03 7.18197378e-01 3.12874815e+03 +7.25500000e-04 -1.65360702e-12 7.09287117e-02 5.55495578e-02 9.19065171e-02 6.10954332e-02 2.32240228e-03 7.18197378e-01 3.12874815e+03 +7.25600000e-04 -1.65360702e-12 7.09287116e-02 5.55495576e-02 9.19065173e-02 6.10954334e-02 2.32240225e-03 7.18197378e-01 3.12874815e+03 +7.25700000e-04 -1.65360702e-12 7.09287115e-02 5.55495574e-02 9.19065174e-02 6.10954336e-02 2.32240223e-03 7.18197378e-01 3.12874815e+03 +7.25800000e-04 -1.65360702e-12 7.09287114e-02 5.55495572e-02 9.19065175e-02 6.10954339e-02 2.32240221e-03 7.18197378e-01 3.12874815e+03 +7.25900000e-04 -1.65360702e-12 7.09287113e-02 5.55495570e-02 9.19065176e-02 6.10954341e-02 2.32240218e-03 7.18197378e-01 3.12874815e+03 +7.26000000e-04 -1.65360702e-12 7.09287111e-02 5.55495568e-02 9.19065178e-02 6.10954343e-02 2.32240216e-03 7.18197378e-01 3.12874815e+03 +7.26100000e-04 -1.65360702e-12 7.09287110e-02 5.55495566e-02 9.19065179e-02 6.10954345e-02 2.32240214e-03 7.18197378e-01 3.12874815e+03 +7.26200000e-04 -1.65360702e-12 7.09287109e-02 5.55495564e-02 9.19065180e-02 6.10954347e-02 2.32240211e-03 7.18197378e-01 3.12874815e+03 +7.26300000e-04 -1.65360702e-12 7.09287108e-02 5.55495562e-02 9.19065182e-02 6.10954349e-02 2.32240209e-03 7.18197378e-01 3.12874815e+03 +7.26400000e-04 -1.65360702e-12 7.09287107e-02 5.55495560e-02 9.19065183e-02 6.10954351e-02 2.32240207e-03 7.18197378e-01 3.12874825e+03 +7.26500000e-04 -1.65360702e-12 7.09287106e-02 5.55495558e-02 9.19065184e-02 6.10954353e-02 2.32240204e-03 7.18197378e-01 3.12874825e+03 +7.26600000e-04 -1.65360702e-12 7.09287105e-02 5.55495556e-02 9.19065185e-02 6.10954355e-02 2.32240202e-03 7.18197378e-01 3.12874825e+03 +7.26700000e-04 -1.65360702e-12 7.09287104e-02 5.55495554e-02 9.19065187e-02 6.10954357e-02 2.32240200e-03 7.18197378e-01 3.12874825e+03 +7.26800000e-04 -1.65360702e-12 7.09287103e-02 5.55495552e-02 9.19065188e-02 6.10954359e-02 2.32240198e-03 7.18197378e-01 3.12874825e+03 +7.26900000e-04 -1.65360702e-12 7.09287102e-02 5.55495550e-02 9.19065189e-02 6.10954361e-02 2.32240195e-03 7.18197378e-01 3.12874825e+03 +7.27000000e-04 -1.65360702e-12 7.09287101e-02 5.55495548e-02 9.19065190e-02 6.10954363e-02 2.32240193e-03 7.18197378e-01 3.12874825e+03 +7.27100000e-04 -1.65360702e-12 7.09287099e-02 5.55495546e-02 9.19065192e-02 6.10954365e-02 2.32240191e-03 7.18197378e-01 3.12874825e+03 +7.27200000e-04 -1.65360702e-12 7.09287098e-02 5.55495544e-02 9.19065193e-02 6.10954367e-02 2.32240189e-03 7.18197378e-01 3.12874825e+03 +7.27300000e-04 -1.65360702e-12 7.09287097e-02 5.55495542e-02 9.19065194e-02 6.10954369e-02 2.32240186e-03 7.18197378e-01 3.12874825e+03 +7.27400000e-04 -1.65360702e-12 7.09287096e-02 5.55495541e-02 9.19065195e-02 6.10954371e-02 2.32240184e-03 7.18197378e-01 3.12874825e+03 +7.27500000e-04 -1.65360702e-12 7.09287095e-02 5.55495539e-02 9.19065196e-02 6.10954373e-02 2.32240182e-03 7.18197378e-01 3.12874825e+03 +7.27600000e-04 -1.65360702e-12 7.09287094e-02 5.55495537e-02 9.19065198e-02 6.10954375e-02 2.32240180e-03 7.18197378e-01 3.12874825e+03 +7.27700000e-04 -1.65360702e-12 7.09287093e-02 5.55495535e-02 9.19065199e-02 6.10954377e-02 2.32240178e-03 7.18197378e-01 3.12874825e+03 +7.27800000e-04 -1.65360702e-12 7.09287092e-02 5.55495533e-02 9.19065200e-02 6.10954379e-02 2.32240175e-03 7.18197378e-01 3.12874825e+03 +7.27900000e-04 -1.65360702e-12 7.09287091e-02 5.55495531e-02 9.19065201e-02 6.10954381e-02 2.32240173e-03 7.18197378e-01 3.12874825e+03 +7.28000000e-04 -1.65360702e-12 7.09287090e-02 5.55495529e-02 9.19065203e-02 6.10954383e-02 2.32240171e-03 7.18197378e-01 3.12874825e+03 +7.28100000e-04 -1.65360702e-12 7.09287089e-02 5.55495527e-02 9.19065204e-02 6.10954385e-02 2.32240169e-03 7.18197378e-01 3.12874825e+03 +7.28200000e-04 -1.65360702e-12 7.09287088e-02 5.55495525e-02 9.19065205e-02 6.10954387e-02 2.32240167e-03 7.18197378e-01 3.12874825e+03 +7.28300000e-04 -1.65360702e-12 7.09287087e-02 5.55495523e-02 9.19065206e-02 6.10954389e-02 2.32240164e-03 7.18197378e-01 3.12874825e+03 +7.28400000e-04 -1.65360702e-12 7.09287086e-02 5.55495521e-02 9.19065207e-02 6.10954391e-02 2.32240162e-03 7.18197378e-01 3.12874825e+03 +7.28500000e-04 -1.65360702e-12 7.09287085e-02 5.55495520e-02 9.19065209e-02 6.10954393e-02 2.32240160e-03 7.18197378e-01 3.12874825e+03 +7.28600000e-04 -1.65360702e-12 7.09287084e-02 5.55495518e-02 9.19065210e-02 6.10954395e-02 2.32240158e-03 7.18197378e-01 3.12874825e+03 +7.28700000e-04 -1.65360702e-12 7.09287083e-02 5.55495516e-02 9.19065211e-02 6.10954396e-02 2.32240156e-03 7.18197378e-01 3.12874825e+03 +7.28800000e-04 -1.65360702e-12 7.09287082e-02 5.55495514e-02 9.19065212e-02 6.10954398e-02 2.32240154e-03 7.18197378e-01 3.12874825e+03 +7.28900000e-04 -1.65360702e-12 7.09287081e-02 5.55495512e-02 9.19065213e-02 6.10954400e-02 2.32240152e-03 7.18197378e-01 3.12874825e+03 +7.29000000e-04 -1.65360702e-12 7.09287080e-02 5.55495510e-02 9.19065215e-02 6.10954402e-02 2.32240149e-03 7.18197378e-01 3.12874825e+03 +7.29100000e-04 -1.65360702e-12 7.09287079e-02 5.55495508e-02 9.19065216e-02 6.10954404e-02 2.32240147e-03 7.18197378e-01 3.12874825e+03 +7.29200000e-04 -1.65360702e-12 7.09287078e-02 5.55495507e-02 9.19065217e-02 6.10954406e-02 2.32240145e-03 7.18197378e-01 3.12874825e+03 +7.29300000e-04 -1.65360702e-12 7.09287077e-02 5.55495505e-02 9.19065218e-02 6.10954408e-02 2.32240143e-03 7.18197378e-01 3.12874825e+03 +7.29400000e-04 -1.65360702e-12 7.09287076e-02 5.55495503e-02 9.19065219e-02 6.10954410e-02 2.32240141e-03 7.18197378e-01 3.12874825e+03 +7.29500000e-04 -1.65360702e-12 7.09287075e-02 5.55495501e-02 9.19065220e-02 6.10954412e-02 2.32240139e-03 7.18197378e-01 3.12874825e+03 +7.29600000e-04 -1.65360702e-12 7.09287074e-02 5.55495499e-02 9.19065222e-02 6.10954414e-02 2.32240137e-03 7.18197378e-01 3.12874825e+03 +7.29700000e-04 -1.65360702e-12 7.09287073e-02 5.55495497e-02 9.19065223e-02 6.10954415e-02 2.32240135e-03 7.18197378e-01 3.12874825e+03 +7.29800000e-04 -1.65360702e-12 7.09287072e-02 5.55495496e-02 9.19065224e-02 6.10954417e-02 2.32240132e-03 7.18197378e-01 3.12874825e+03 +7.29900000e-04 -1.65360702e-12 7.09287071e-02 5.55495494e-02 9.19065225e-02 6.10954419e-02 2.32240130e-03 7.18197378e-01 3.12874825e+03 +7.30000000e-04 -1.65360702e-12 7.09287070e-02 5.55495492e-02 9.19065226e-02 6.10954421e-02 2.32240128e-03 7.18197378e-01 3.12874825e+03 +7.30100000e-04 -1.65360702e-12 7.09287069e-02 5.55495490e-02 9.19065227e-02 6.10954423e-02 2.32240126e-03 7.18197378e-01 3.12874825e+03 +7.30200000e-04 -1.65360702e-12 7.09287068e-02 5.55495488e-02 9.19065229e-02 6.10954425e-02 2.32240124e-03 7.18197378e-01 3.12874825e+03 +7.30300000e-04 -1.65360702e-12 7.09287067e-02 5.55495486e-02 9.19065230e-02 6.10954427e-02 2.32240122e-03 7.18197378e-01 3.12874825e+03 +7.30400000e-04 -1.65360702e-12 7.09287066e-02 5.55495485e-02 9.19065231e-02 6.10954428e-02 2.32240120e-03 7.18197378e-01 3.12874825e+03 +7.30500000e-04 -1.65360702e-12 7.09287065e-02 5.55495483e-02 9.19065232e-02 6.10954430e-02 2.32240118e-03 7.18197378e-01 3.12874825e+03 +7.30600000e-04 -1.65360702e-12 7.09287064e-02 5.55495481e-02 9.19065233e-02 6.10954432e-02 2.32240116e-03 7.18197378e-01 3.12874825e+03 +7.30700000e-04 -1.65360702e-12 7.09287063e-02 5.55495479e-02 9.19065234e-02 6.10954434e-02 2.32240114e-03 7.18197378e-01 3.12874825e+03 +7.30800000e-04 -1.65360702e-12 7.09287062e-02 5.55495478e-02 9.19065235e-02 6.10954436e-02 2.32240112e-03 7.18197378e-01 3.12874825e+03 +7.30900000e-04 -1.65360702e-12 7.09287061e-02 5.55495476e-02 9.19065236e-02 6.10954438e-02 2.32240110e-03 7.18197378e-01 3.12874825e+03 +7.31000000e-04 -1.65360702e-12 7.09287060e-02 5.55495474e-02 9.19065238e-02 6.10954439e-02 2.32240108e-03 7.18197378e-01 3.12874825e+03 +7.31100000e-04 -1.65360702e-12 7.09287059e-02 5.55495472e-02 9.19065239e-02 6.10954441e-02 2.32240106e-03 7.18197378e-01 3.12874825e+03 +7.31200000e-04 -1.65360702e-12 7.09287058e-02 5.55495471e-02 9.19065240e-02 6.10954443e-02 2.32240104e-03 7.18197378e-01 3.12874825e+03 +7.31300000e-04 -1.65360702e-12 7.09287057e-02 5.55495469e-02 9.19065241e-02 6.10954445e-02 2.32240102e-03 7.18197378e-01 3.12874825e+03 +7.31400000e-04 -1.65360702e-12 7.09287056e-02 5.55495467e-02 9.19065242e-02 6.10954447e-02 2.32240100e-03 7.18197378e-01 3.12874825e+03 +7.31500000e-04 -1.65360702e-12 7.09287055e-02 5.55495465e-02 9.19065243e-02 6.10954448e-02 2.32240098e-03 7.18197378e-01 3.12874825e+03 +7.31600000e-04 -1.65360702e-12 7.09287054e-02 5.55495464e-02 9.19065244e-02 6.10954450e-02 2.32240096e-03 7.18197378e-01 3.12874825e+03 +7.31700000e-04 -1.65360702e-12 7.09287053e-02 5.55495462e-02 9.19065245e-02 6.10954452e-02 2.32240094e-03 7.18197378e-01 3.12874825e+03 +7.31800000e-04 -1.65360702e-12 7.09287052e-02 5.55495460e-02 9.19065246e-02 6.10954454e-02 2.32240092e-03 7.18197378e-01 3.12874825e+03 +7.31900000e-04 -1.65360702e-12 7.09287051e-02 5.55495458e-02 9.19065248e-02 6.10954455e-02 2.32240090e-03 7.18197378e-01 3.12874825e+03 +7.32000000e-04 -1.65360702e-12 7.09287050e-02 5.55495457e-02 9.19065249e-02 6.10954457e-02 2.32240088e-03 7.18197378e-01 3.12874825e+03 +7.32100000e-04 -1.65360702e-12 7.09287049e-02 5.55495455e-02 9.19065250e-02 6.10954459e-02 2.32240086e-03 7.18197378e-01 3.12874825e+03 +7.32200000e-04 -1.65360702e-12 7.09287048e-02 5.55495453e-02 9.19065251e-02 6.10954461e-02 2.32240084e-03 7.18197378e-01 3.12874825e+03 +7.32300000e-04 -1.65360702e-12 7.09287047e-02 5.55495452e-02 9.19065252e-02 6.10954463e-02 2.32240082e-03 7.18197378e-01 3.12874825e+03 +7.32400000e-04 -1.65360702e-12 7.09287046e-02 5.55495450e-02 9.19065253e-02 6.10954464e-02 2.32240080e-03 7.18197378e-01 3.12874825e+03 +7.32500000e-04 -1.65360702e-12 7.09287045e-02 5.55495448e-02 9.19065254e-02 6.10954466e-02 2.32240078e-03 7.18197378e-01 3.12874825e+03 +7.32600000e-04 -1.65360702e-12 7.09287045e-02 5.55495446e-02 9.19065255e-02 6.10954468e-02 2.32240076e-03 7.18197378e-01 3.12874825e+03 +7.32700000e-04 -1.65360702e-12 7.09287044e-02 5.55495445e-02 9.19065256e-02 6.10954470e-02 2.32240074e-03 7.18197378e-01 3.12874825e+03 +7.32800000e-04 -1.65360702e-12 7.09287043e-02 5.55495443e-02 9.19065257e-02 6.10954471e-02 2.32240072e-03 7.18197378e-01 3.12874825e+03 +7.32900000e-04 -1.65360702e-12 7.09287042e-02 5.55495441e-02 9.19065258e-02 6.10954473e-02 2.32240070e-03 7.18197378e-01 3.12874825e+03 +7.33000000e-04 -1.65360702e-12 7.09287041e-02 5.55495440e-02 9.19065259e-02 6.10954475e-02 2.32240068e-03 7.18197378e-01 3.12874825e+03 +7.33100000e-04 -1.65360702e-12 7.09287040e-02 5.55495438e-02 9.19065261e-02 6.10954476e-02 2.32240066e-03 7.18197378e-01 3.12874825e+03 +7.33200000e-04 -1.65360702e-12 7.09287039e-02 5.55495436e-02 9.19065262e-02 6.10954478e-02 2.32240064e-03 7.18197378e-01 3.12874825e+03 +7.33300000e-04 -1.65360702e-12 7.09287038e-02 5.55495435e-02 9.19065263e-02 6.10954480e-02 2.32240062e-03 7.18197378e-01 3.12874825e+03 +7.33400000e-04 -1.65360702e-12 7.09287037e-02 5.55495433e-02 9.19065264e-02 6.10954482e-02 2.32240061e-03 7.18197378e-01 3.12874825e+03 +7.33500000e-04 -1.65360702e-12 7.09287036e-02 5.55495431e-02 9.19065265e-02 6.10954483e-02 2.32240059e-03 7.18197378e-01 3.12874825e+03 +7.33600000e-04 -1.65360702e-12 7.09287035e-02 5.55495430e-02 9.19065266e-02 6.10954485e-02 2.32240057e-03 7.18197378e-01 3.12874825e+03 +7.33700000e-04 -1.65360702e-12 7.09287034e-02 5.55495428e-02 9.19065267e-02 6.10954487e-02 2.32240055e-03 7.18197378e-01 3.12874825e+03 +7.33800000e-04 -1.65360702e-12 7.09287034e-02 5.55495426e-02 9.19065268e-02 6.10954488e-02 2.32240053e-03 7.18197378e-01 3.12874825e+03 +7.33900000e-04 -1.65360702e-12 7.09287033e-02 5.55495425e-02 9.19065269e-02 6.10954490e-02 2.32240051e-03 7.18197378e-01 3.12874825e+03 +7.34000000e-04 -1.65360702e-12 7.09287032e-02 5.55495423e-02 9.19065270e-02 6.10954492e-02 2.32240049e-03 7.18197378e-01 3.12874825e+03 +7.34100000e-04 -1.65360702e-12 7.09287031e-02 5.55495422e-02 9.19065271e-02 6.10954493e-02 2.32240047e-03 7.18197378e-01 3.12874825e+03 +7.34200000e-04 -1.65360702e-12 7.09287030e-02 5.55495420e-02 9.19065272e-02 6.10954495e-02 2.32240045e-03 7.18197378e-01 3.12874825e+03 +7.34300000e-04 -1.65360702e-12 7.09287029e-02 5.55495418e-02 9.19065273e-02 6.10954497e-02 2.32240044e-03 7.18197378e-01 3.12874825e+03 +7.34400000e-04 -1.65360702e-12 7.09287028e-02 5.55495417e-02 9.19065274e-02 6.10954498e-02 2.32240042e-03 7.18197378e-01 3.12874825e+03 +7.34500000e-04 -1.65360702e-12 7.09287027e-02 5.55495415e-02 9.19065275e-02 6.10954500e-02 2.32240040e-03 7.18197378e-01 3.12874832e+03 +7.34600000e-04 -1.65360702e-12 7.09287026e-02 5.55495413e-02 9.19065276e-02 6.10954502e-02 2.32240038e-03 7.18197378e-01 3.12874832e+03 +7.34700000e-04 -1.65360702e-12 7.09287026e-02 5.55495412e-02 9.19065277e-02 6.10954503e-02 2.32240036e-03 7.18197378e-01 3.12874832e+03 +7.34800000e-04 -1.65360702e-12 7.09287025e-02 5.55495410e-02 9.19065278e-02 6.10954505e-02 2.32240034e-03 7.18197378e-01 3.12874832e+03 +7.34900000e-04 -1.65360702e-12 7.09287024e-02 5.55495409e-02 9.19065279e-02 6.10954507e-02 2.32240033e-03 7.18197378e-01 3.12874832e+03 +7.35000000e-04 -1.65360702e-12 7.09287023e-02 5.55495407e-02 9.19065280e-02 6.10954508e-02 2.32240031e-03 7.18197378e-01 3.12874832e+03 +7.35100000e-04 -1.65360702e-12 7.09287022e-02 5.55495405e-02 9.19065281e-02 6.10954510e-02 2.32240029e-03 7.18197378e-01 3.12874832e+03 +7.35200000e-04 -1.65360702e-12 7.09287021e-02 5.55495404e-02 9.19065282e-02 6.10954512e-02 2.32240027e-03 7.18197378e-01 3.12874832e+03 +7.35300000e-04 -1.65360702e-12 7.09287020e-02 5.55495402e-02 9.19065283e-02 6.10954513e-02 2.32240025e-03 7.18197378e-01 3.12874832e+03 +7.35400000e-04 -1.65360702e-12 7.09287019e-02 5.55495401e-02 9.19065284e-02 6.10954515e-02 2.32240023e-03 7.18197378e-01 3.12874832e+03 +7.35500000e-04 -1.65360702e-12 7.09287019e-02 5.55495399e-02 9.19065285e-02 6.10954516e-02 2.32240022e-03 7.18197378e-01 3.12874832e+03 +7.35600000e-04 -1.65360702e-12 7.09287018e-02 5.55495398e-02 9.19065286e-02 6.10954518e-02 2.32240020e-03 7.18197378e-01 3.12874832e+03 +7.35700000e-04 -1.65360702e-12 7.09287017e-02 5.55495396e-02 9.19065287e-02 6.10954520e-02 2.32240018e-03 7.18197378e-01 3.12874832e+03 +7.35800000e-04 -1.65360702e-12 7.09287016e-02 5.55495394e-02 9.19065288e-02 6.10954521e-02 2.32240016e-03 7.18197378e-01 3.12874832e+03 +7.35900000e-04 -1.65360702e-12 7.09287015e-02 5.55495393e-02 9.19065289e-02 6.10954523e-02 2.32240014e-03 7.18197378e-01 3.12874832e+03 +7.36000000e-04 -1.65360702e-12 7.09287014e-02 5.55495391e-02 9.19065290e-02 6.10954524e-02 2.32240013e-03 7.18197378e-01 3.12874832e+03 +7.36100000e-04 -1.65360702e-12 7.09287013e-02 5.55495390e-02 9.19065291e-02 6.10954526e-02 2.32240011e-03 7.18197378e-01 3.12874832e+03 +7.36200000e-04 -1.65360702e-12 7.09287013e-02 5.55495388e-02 9.19065292e-02 6.10954528e-02 2.32240009e-03 7.18197378e-01 3.12874832e+03 +7.36300000e-04 -1.65360702e-12 7.09287012e-02 5.55495387e-02 9.19065293e-02 6.10954529e-02 2.32240007e-03 7.18197378e-01 3.12874832e+03 +7.36400000e-04 -1.65360702e-12 7.09287011e-02 5.55495385e-02 9.19065294e-02 6.10954531e-02 2.32240006e-03 7.18197378e-01 3.12874832e+03 +7.36500000e-04 -1.65360702e-12 7.09287010e-02 5.55495384e-02 9.19065295e-02 6.10954532e-02 2.32240004e-03 7.18197378e-01 3.12874832e+03 +7.36600000e-04 -1.65360702e-12 7.09287009e-02 5.55495382e-02 9.19065296e-02 6.10954534e-02 2.32240002e-03 7.18197378e-01 3.12874832e+03 +7.36700000e-04 -1.65360702e-12 7.09287008e-02 5.55495381e-02 9.19065297e-02 6.10954535e-02 2.32240000e-03 7.18197378e-01 3.12874832e+03 +7.36800000e-04 -1.65360702e-12 7.09287008e-02 5.55495379e-02 9.19065298e-02 6.10954537e-02 2.32239998e-03 7.18197378e-01 3.12874832e+03 +7.36900000e-04 -1.65360702e-12 7.09287007e-02 5.55495378e-02 9.19065299e-02 6.10954539e-02 2.32239997e-03 7.18197378e-01 3.12874832e+03 +7.37000000e-04 -1.65360702e-12 7.09287006e-02 5.55495376e-02 9.19065300e-02 6.10954540e-02 2.32239995e-03 7.18197378e-01 3.12874832e+03 +7.37100000e-04 -1.65360702e-12 7.09287005e-02 5.55495374e-02 9.19065301e-02 6.10954542e-02 2.32239993e-03 7.18197378e-01 3.12874832e+03 +7.37200000e-04 -1.65360702e-12 7.09287004e-02 5.55495373e-02 9.19065302e-02 6.10954543e-02 2.32239992e-03 7.18197378e-01 3.12874832e+03 +7.37300000e-04 -1.65360702e-12 7.09287003e-02 5.55495371e-02 9.19065303e-02 6.10954545e-02 2.32239990e-03 7.18197378e-01 3.12874832e+03 +7.37400000e-04 -1.65360702e-12 7.09287003e-02 5.55495370e-02 9.19065304e-02 6.10954546e-02 2.32239988e-03 7.18197378e-01 3.12874832e+03 +7.37500000e-04 -1.65360702e-12 7.09287002e-02 5.55495368e-02 9.19065305e-02 6.10954548e-02 2.32239986e-03 7.18197378e-01 3.12874832e+03 +7.37600000e-04 -1.65360702e-12 7.09287001e-02 5.55495367e-02 9.19065306e-02 6.10954549e-02 2.32239985e-03 7.18197378e-01 3.12874832e+03 +7.37700000e-04 -1.65360702e-12 7.09287000e-02 5.55495366e-02 9.19065307e-02 6.10954551e-02 2.32239983e-03 7.18197378e-01 3.12874832e+03 +7.37800000e-04 -1.65360702e-12 7.09286999e-02 5.55495364e-02 9.19065308e-02 6.10954552e-02 2.32239981e-03 7.18197378e-01 3.12874832e+03 +7.37900000e-04 -1.65360702e-12 7.09286998e-02 5.55495363e-02 9.19065309e-02 6.10954554e-02 2.32239980e-03 7.18197378e-01 3.12874832e+03 +7.38000000e-04 -1.65360702e-12 7.09286998e-02 5.55495361e-02 9.19065309e-02 6.10954555e-02 2.32239978e-03 7.18197378e-01 3.12874832e+03 +7.38100000e-04 -1.65360702e-12 7.09286997e-02 5.55495360e-02 9.19065310e-02 6.10954557e-02 2.32239976e-03 7.18197378e-01 3.12874832e+03 +7.38200000e-04 -1.65360702e-12 7.09286996e-02 5.55495358e-02 9.19065311e-02 6.10954558e-02 2.32239974e-03 7.18197378e-01 3.12874832e+03 +7.38300000e-04 -1.65360702e-12 7.09286995e-02 5.55495357e-02 9.19065312e-02 6.10954560e-02 2.32239973e-03 7.18197378e-01 3.12874832e+03 +7.38400000e-04 -1.65360702e-12 7.09286994e-02 5.55495355e-02 9.19065313e-02 6.10954562e-02 2.32239971e-03 7.18197378e-01 3.12874832e+03 +7.38500000e-04 -1.65360702e-12 7.09286994e-02 5.55495354e-02 9.19065314e-02 6.10954563e-02 2.32239969e-03 7.18197378e-01 3.12874832e+03 +7.38600000e-04 -1.65360702e-12 7.09286993e-02 5.55495352e-02 9.19065315e-02 6.10954564e-02 2.32239968e-03 7.18197378e-01 3.12874832e+03 +7.38700000e-04 -1.65360702e-12 7.09286992e-02 5.55495351e-02 9.19065316e-02 6.10954566e-02 2.32239966e-03 7.18197378e-01 3.12874832e+03 +7.38800000e-04 -1.65360702e-12 7.09286991e-02 5.55495349e-02 9.19065317e-02 6.10954567e-02 2.32239964e-03 7.18197378e-01 3.12874832e+03 +7.38900000e-04 -1.65360702e-12 7.09286990e-02 5.55495348e-02 9.19065318e-02 6.10954569e-02 2.32239963e-03 7.18197378e-01 3.12874832e+03 +7.39000000e-04 -1.65360702e-12 7.09286990e-02 5.55495347e-02 9.19065319e-02 6.10954570e-02 2.32239961e-03 7.18197378e-01 3.12874832e+03 +7.39100000e-04 -1.65360702e-12 7.09286989e-02 5.55495345e-02 9.19065320e-02 6.10954572e-02 2.32239959e-03 7.18197378e-01 3.12874832e+03 +7.39200000e-04 -1.65360702e-12 7.09286988e-02 5.55495344e-02 9.19065321e-02 6.10954573e-02 2.32239958e-03 7.18197378e-01 3.12874832e+03 +7.39300000e-04 -1.65360702e-12 7.09286987e-02 5.55495342e-02 9.19065321e-02 6.10954575e-02 2.32239956e-03 7.18197378e-01 3.12874832e+03 +7.39400000e-04 -1.65360702e-12 7.09286987e-02 5.55495341e-02 9.19065322e-02 6.10954576e-02 2.32239955e-03 7.18197378e-01 3.12874832e+03 +7.39500000e-04 -1.65360702e-12 7.09286986e-02 5.55495339e-02 9.19065323e-02 6.10954578e-02 2.32239953e-03 7.18197378e-01 3.12874832e+03 +7.39600000e-04 -1.65360702e-12 7.09286985e-02 5.55495338e-02 9.19065324e-02 6.10954579e-02 2.32239951e-03 7.18197378e-01 3.12874832e+03 +7.39700000e-04 -1.65360702e-12 7.09286984e-02 5.55495337e-02 9.19065325e-02 6.10954581e-02 2.32239950e-03 7.18197378e-01 3.12874832e+03 +7.39800000e-04 -1.65360702e-12 7.09286983e-02 5.55495335e-02 9.19065326e-02 6.10954582e-02 2.32239948e-03 7.18197378e-01 3.12874832e+03 +7.39900000e-04 -1.65360702e-12 7.09286983e-02 5.55495334e-02 9.19065327e-02 6.10954584e-02 2.32239946e-03 7.18197378e-01 3.12874832e+03 +7.40000000e-04 -1.65360702e-12 7.09286982e-02 5.55495332e-02 9.19065328e-02 6.10954585e-02 2.32239945e-03 7.18197378e-01 3.12874832e+03 +7.40100000e-04 -1.65360702e-12 7.09286981e-02 5.55495331e-02 9.19065329e-02 6.10954586e-02 2.32239943e-03 7.18197378e-01 3.12874832e+03 +7.40200000e-04 -1.65360702e-12 7.09286980e-02 5.55495330e-02 9.19065330e-02 6.10954588e-02 2.32239942e-03 7.18197378e-01 3.12874832e+03 +7.40300000e-04 -1.65360702e-12 7.09286980e-02 5.55495328e-02 9.19065330e-02 6.10954589e-02 2.32239940e-03 7.18197378e-01 3.12874832e+03 +7.40400000e-04 -1.65360702e-12 7.09286979e-02 5.55495327e-02 9.19065331e-02 6.10954591e-02 2.32239938e-03 7.18197378e-01 3.12874832e+03 +7.40500000e-04 -1.65360702e-12 7.09286978e-02 5.55495325e-02 9.19065332e-02 6.10954592e-02 2.32239937e-03 7.18197378e-01 3.12874832e+03 +7.40600000e-04 -1.65360702e-12 7.09286977e-02 5.55495324e-02 9.19065333e-02 6.10954594e-02 2.32239935e-03 7.18197378e-01 3.12874832e+03 +7.40700000e-04 -1.65360702e-12 7.09286977e-02 5.55495323e-02 9.19065334e-02 6.10954595e-02 2.32239934e-03 7.18197378e-01 3.12874832e+03 +7.40800000e-04 -1.65360702e-12 7.09286976e-02 5.55495321e-02 9.19065335e-02 6.10954596e-02 2.32239932e-03 7.18197378e-01 3.12874832e+03 +7.40900000e-04 -1.65360702e-12 7.09286975e-02 5.55495320e-02 9.19065336e-02 6.10954598e-02 2.32239930e-03 7.18197378e-01 3.12874832e+03 +7.41000000e-04 -1.65360702e-12 7.09286974e-02 5.55495319e-02 9.19065337e-02 6.10954599e-02 2.32239929e-03 7.18197378e-01 3.12874832e+03 +7.41100000e-04 -1.65360702e-12 7.09286974e-02 5.55495317e-02 9.19065337e-02 6.10954601e-02 2.32239927e-03 7.18197378e-01 3.12874832e+03 +7.41200000e-04 -1.65360702e-12 7.09286973e-02 5.55495316e-02 9.19065338e-02 6.10954602e-02 2.32239926e-03 7.18197378e-01 3.12874832e+03 +7.41300000e-04 -1.65360702e-12 7.09286972e-02 5.55495314e-02 9.19065339e-02 6.10954603e-02 2.32239924e-03 7.18197378e-01 3.12874832e+03 +7.41400000e-04 -1.65360702e-12 7.09286971e-02 5.55495313e-02 9.19065340e-02 6.10954605e-02 2.32239923e-03 7.18197378e-01 3.12874832e+03 +7.41500000e-04 -1.65360702e-12 7.09286971e-02 5.55495312e-02 9.19065341e-02 6.10954606e-02 2.32239921e-03 7.18197378e-01 3.12874832e+03 +7.41600000e-04 -1.65360702e-12 7.09286970e-02 5.55495310e-02 9.19065342e-02 6.10954608e-02 2.32239920e-03 7.18197378e-01 3.12874832e+03 +7.41700000e-04 -1.65360702e-12 7.09286969e-02 5.55495309e-02 9.19065343e-02 6.10954609e-02 2.32239918e-03 7.18197378e-01 3.12874832e+03 +7.41800000e-04 -1.65360702e-12 7.09286968e-02 5.55495308e-02 9.19065343e-02 6.10954610e-02 2.32239916e-03 7.18197378e-01 3.12874832e+03 +7.41900000e-04 -1.65360702e-12 7.09286968e-02 5.55495306e-02 9.19065344e-02 6.10954612e-02 2.32239915e-03 7.18197378e-01 3.12874832e+03 +7.42000000e-04 -1.65360702e-12 7.09286967e-02 5.55495305e-02 9.19065345e-02 6.10954613e-02 2.32239913e-03 7.18197378e-01 3.12874832e+03 +7.42100000e-04 -1.65360702e-12 7.09286966e-02 5.55495304e-02 9.19065346e-02 6.10954614e-02 2.32239912e-03 7.18197378e-01 3.12874832e+03 +7.42200000e-04 -1.65360702e-12 7.09286965e-02 5.55495302e-02 9.19065347e-02 6.10954616e-02 2.32239910e-03 7.18197378e-01 3.12874832e+03 +7.42300000e-04 -1.65360702e-12 7.09286965e-02 5.55495301e-02 9.19065348e-02 6.10954617e-02 2.32239909e-03 7.18197378e-01 3.12874832e+03 +7.42400000e-04 -1.65360702e-12 7.09286964e-02 5.55495300e-02 9.19065348e-02 6.10954618e-02 2.32239907e-03 7.18197378e-01 3.12874832e+03 +7.42500000e-04 -1.65360702e-12 7.09286963e-02 5.55495298e-02 9.19065349e-02 6.10954620e-02 2.32239906e-03 7.18197378e-01 3.12874832e+03 +7.42600000e-04 -1.65360702e-12 7.09286963e-02 5.55495297e-02 9.19065350e-02 6.10954621e-02 2.32239904e-03 7.18197378e-01 3.12874839e+03 +7.42700000e-04 -1.65360702e-12 7.09286962e-02 5.55495296e-02 9.19065351e-02 6.10954623e-02 2.32239903e-03 7.18197378e-01 3.12874839e+03 +7.42800000e-04 -1.65360702e-12 7.09286961e-02 5.55495295e-02 9.19065352e-02 6.10954624e-02 2.32239901e-03 7.18197378e-01 3.12874839e+03 +7.42900000e-04 -1.65360702e-12 7.09286960e-02 5.55495293e-02 9.19065353e-02 6.10954625e-02 2.32239900e-03 7.18197378e-01 3.12874839e+03 +7.43000000e-04 -1.65360702e-12 7.09286960e-02 5.55495292e-02 9.19065353e-02 6.10954627e-02 2.32239898e-03 7.18197378e-01 3.12874839e+03 +7.43100000e-04 -1.65360702e-12 7.09286959e-02 5.55495291e-02 9.19065354e-02 6.10954628e-02 2.32239897e-03 7.18197378e-01 3.12874839e+03 +7.43200000e-04 -1.65360702e-12 7.09286958e-02 5.55495289e-02 9.19065355e-02 6.10954629e-02 2.32239895e-03 7.18197378e-01 3.12874839e+03 +7.43300000e-04 -1.65360702e-12 7.09286958e-02 5.55495288e-02 9.19065356e-02 6.10954631e-02 2.32239894e-03 7.18197378e-01 3.12874839e+03 +7.43400000e-04 -1.65360702e-12 7.09286957e-02 5.55495287e-02 9.19065357e-02 6.10954632e-02 2.32239892e-03 7.18197378e-01 3.12874839e+03 +7.43500000e-04 -1.65360702e-12 7.09286956e-02 5.55495285e-02 9.19065358e-02 6.10954633e-02 2.32239891e-03 7.18197378e-01 3.12874839e+03 +7.43600000e-04 -1.65360702e-12 7.09286955e-02 5.55495284e-02 9.19065358e-02 6.10954634e-02 2.32239889e-03 7.18197378e-01 3.12874839e+03 +7.43700000e-04 -1.65360702e-12 7.09286955e-02 5.55495283e-02 9.19065359e-02 6.10954636e-02 2.32239888e-03 7.18197378e-01 3.12874839e+03 +7.43800000e-04 -1.65360702e-12 7.09286954e-02 5.55495282e-02 9.19065360e-02 6.10954637e-02 2.32239886e-03 7.18197378e-01 3.12874839e+03 +7.43900000e-04 -1.65360702e-12 7.09286953e-02 5.55495280e-02 9.19065361e-02 6.10954638e-02 2.32239885e-03 7.18197378e-01 3.12874839e+03 +7.44000000e-04 -1.65360702e-12 7.09286953e-02 5.55495279e-02 9.19065362e-02 6.10954640e-02 2.32239884e-03 7.18197378e-01 3.12874839e+03 +7.44100000e-04 -1.65360702e-12 7.09286952e-02 5.55495278e-02 9.19065362e-02 6.10954641e-02 2.32239882e-03 7.18197378e-01 3.12874839e+03 +7.44200000e-04 -1.65360702e-12 7.09286951e-02 5.55495277e-02 9.19065363e-02 6.10954642e-02 2.32239881e-03 7.18197378e-01 3.12874839e+03 +7.44300000e-04 -1.65360702e-12 7.09286951e-02 5.55495275e-02 9.19065364e-02 6.10954644e-02 2.32239879e-03 7.18197378e-01 3.12874839e+03 +7.44400000e-04 -1.65360702e-12 7.09286950e-02 5.55495274e-02 9.19065365e-02 6.10954645e-02 2.32239878e-03 7.18197378e-01 3.12874839e+03 +7.44500000e-04 -1.65360702e-12 7.09286949e-02 5.55495273e-02 9.19065366e-02 6.10954646e-02 2.32239876e-03 7.18197378e-01 3.12874839e+03 +7.44600000e-04 -1.65360702e-12 7.09286949e-02 5.55495272e-02 9.19065366e-02 6.10954647e-02 2.32239875e-03 7.18197378e-01 3.12874839e+03 +7.44700000e-04 -1.65360702e-12 7.09286948e-02 5.55495270e-02 9.19065367e-02 6.10954649e-02 2.32239874e-03 7.18197378e-01 3.12874839e+03 +7.44800000e-04 -1.65360702e-12 7.09286947e-02 5.55495269e-02 9.19065368e-02 6.10954650e-02 2.32239872e-03 7.18197378e-01 3.12874839e+03 +7.44900000e-04 -1.65360702e-12 7.09286946e-02 5.55495268e-02 9.19065369e-02 6.10954651e-02 2.32239871e-03 7.18197378e-01 3.12874839e+03 +7.45000000e-04 -1.65360702e-12 7.09286946e-02 5.55495267e-02 9.19065370e-02 6.10954653e-02 2.32239869e-03 7.18197378e-01 3.12874839e+03 +7.45100000e-04 -1.65360702e-12 7.09286945e-02 5.55495265e-02 9.19065370e-02 6.10954654e-02 2.32239868e-03 7.18197378e-01 3.12874839e+03 +7.45200000e-04 -1.65360702e-12 7.09286944e-02 5.55495264e-02 9.19065371e-02 6.10954655e-02 2.32239866e-03 7.18197378e-01 3.12874839e+03 +7.45300000e-04 -1.65360702e-12 7.09286944e-02 5.55495263e-02 9.19065372e-02 6.10954656e-02 2.32239865e-03 7.18197378e-01 3.12874839e+03 +7.45400000e-04 -1.65360702e-12 7.09286943e-02 5.55495262e-02 9.19065373e-02 6.10954658e-02 2.32239864e-03 7.18197378e-01 3.12874839e+03 +7.45500000e-04 -1.65360702e-12 7.09286942e-02 5.55495261e-02 9.19065373e-02 6.10954659e-02 2.32239862e-03 7.18197378e-01 3.12874839e+03 +7.45600000e-04 -1.65360702e-12 7.09286942e-02 5.55495259e-02 9.19065374e-02 6.10954660e-02 2.32239861e-03 7.18197378e-01 3.12874839e+03 +7.45700000e-04 -1.65360702e-12 7.09286941e-02 5.55495258e-02 9.19065375e-02 6.10954661e-02 2.32239859e-03 7.18197378e-01 3.12874839e+03 +7.45800000e-04 -1.65360702e-12 7.09286940e-02 5.55495257e-02 9.19065376e-02 6.10954663e-02 2.32239858e-03 7.18197378e-01 3.12874839e+03 +7.45900000e-04 -1.65360702e-12 7.09286940e-02 5.55495256e-02 9.19065377e-02 6.10954664e-02 2.32239857e-03 7.18197378e-01 3.12874839e+03 +7.46000000e-04 -1.65360702e-12 7.09286939e-02 5.55495254e-02 9.19065377e-02 6.10954665e-02 2.32239855e-03 7.18197378e-01 3.12874839e+03 +7.46100000e-04 -1.65360702e-12 7.09286938e-02 5.55495253e-02 9.19065378e-02 6.10954666e-02 2.32239854e-03 7.18197378e-01 3.12874839e+03 +7.46200000e-04 -1.65360702e-12 7.09286938e-02 5.55495252e-02 9.19065379e-02 6.10954667e-02 2.32239853e-03 7.18197378e-01 3.12874839e+03 +7.46300000e-04 -1.65360702e-12 7.09286937e-02 5.55495251e-02 9.19065380e-02 6.10954669e-02 2.32239851e-03 7.18197378e-01 3.12874839e+03 +7.46400000e-04 -1.65360702e-12 7.09286937e-02 5.55495250e-02 9.19065380e-02 6.10954670e-02 2.32239850e-03 7.18197378e-01 3.12874839e+03 +7.46500000e-04 -1.65360702e-12 7.09286936e-02 5.55495249e-02 9.19065381e-02 6.10954671e-02 2.32239848e-03 7.18197378e-01 3.12874839e+03 +7.46600000e-04 -1.65360702e-12 7.09286935e-02 5.55495247e-02 9.19065382e-02 6.10954672e-02 2.32239847e-03 7.18197378e-01 3.12874839e+03 +7.46700000e-04 -1.65360702e-12 7.09286935e-02 5.55495246e-02 9.19065383e-02 6.10954674e-02 2.32239846e-03 7.18197378e-01 3.12874839e+03 +7.46800000e-04 -1.65360702e-12 7.09286934e-02 5.55495245e-02 9.19065383e-02 6.10954675e-02 2.32239844e-03 7.18197378e-01 3.12874839e+03 +7.46900000e-04 -1.65360702e-12 7.09286933e-02 5.55495244e-02 9.19065384e-02 6.10954676e-02 2.32239843e-03 7.18197378e-01 3.12874839e+03 +7.47000000e-04 -1.65360702e-12 7.09286933e-02 5.55495243e-02 9.19065385e-02 6.10954677e-02 2.32239842e-03 7.18197378e-01 3.12874839e+03 +7.47100000e-04 -1.65360702e-12 7.09286932e-02 5.55495241e-02 9.19065386e-02 6.10954678e-02 2.32239840e-03 7.18197378e-01 3.12874839e+03 +7.47200000e-04 -1.65360702e-12 7.09286931e-02 5.55495240e-02 9.19065386e-02 6.10954680e-02 2.32239839e-03 7.18197378e-01 3.12874839e+03 +7.47300000e-04 -1.65360702e-12 7.09286931e-02 5.55495239e-02 9.19065387e-02 6.10954681e-02 2.32239838e-03 7.18197378e-01 3.12874839e+03 +7.47400000e-04 -1.65360702e-12 7.09286930e-02 5.55495238e-02 9.19065388e-02 6.10954682e-02 2.32239836e-03 7.18197378e-01 3.12874839e+03 +7.47500000e-04 -1.65360702e-12 7.09286929e-02 5.55495237e-02 9.19065389e-02 6.10954683e-02 2.32239835e-03 7.18197378e-01 3.12874839e+03 +7.47600000e-04 -1.65360702e-12 7.09286929e-02 5.55495236e-02 9.19065389e-02 6.10954684e-02 2.32239834e-03 7.18197378e-01 3.12874839e+03 +7.47700000e-04 -1.65360702e-12 7.09286928e-02 5.55495235e-02 9.19065390e-02 6.10954686e-02 2.32239832e-03 7.18197378e-01 3.12874839e+03 +7.47800000e-04 -1.65360702e-12 7.09286928e-02 5.55495233e-02 9.19065391e-02 6.10954687e-02 2.32239831e-03 7.18197378e-01 3.12874839e+03 +7.47900000e-04 -1.65360702e-12 7.09286927e-02 5.55495232e-02 9.19065391e-02 6.10954688e-02 2.32239830e-03 7.18197378e-01 3.12874839e+03 +7.48000000e-04 -1.65360702e-12 7.09286926e-02 5.55495231e-02 9.19065392e-02 6.10954689e-02 2.32239828e-03 7.18197378e-01 3.12874839e+03 +7.48100000e-04 -1.65360702e-12 7.09286926e-02 5.55495230e-02 9.19065393e-02 6.10954690e-02 2.32239827e-03 7.18197378e-01 3.12874839e+03 +7.48200000e-04 -1.65360702e-12 7.09286925e-02 5.55495229e-02 9.19065394e-02 6.10954691e-02 2.32239826e-03 7.18197378e-01 3.12874839e+03 +7.48300000e-04 -1.65360702e-12 7.09286924e-02 5.55495228e-02 9.19065394e-02 6.10954693e-02 2.32239824e-03 7.18197378e-01 3.12874839e+03 +7.48400000e-04 -1.65360702e-12 7.09286924e-02 5.55495227e-02 9.19065395e-02 6.10954694e-02 2.32239823e-03 7.18197378e-01 3.12874839e+03 +7.48500000e-04 -1.65360702e-12 7.09286923e-02 5.55495225e-02 9.19065396e-02 6.10954695e-02 2.32239822e-03 7.18197378e-01 3.12874839e+03 +7.48600000e-04 -1.65360702e-12 7.09286923e-02 5.55495224e-02 9.19065397e-02 6.10954696e-02 2.32239821e-03 7.18197378e-01 3.12874839e+03 +7.48700000e-04 -1.65360702e-12 7.09286922e-02 5.55495223e-02 9.19065397e-02 6.10954697e-02 2.32239819e-03 7.18197378e-01 3.12874839e+03 +7.48800000e-04 -1.65360702e-12 7.09286921e-02 5.55495222e-02 9.19065398e-02 6.10954698e-02 2.32239818e-03 7.18197378e-01 3.12874839e+03 +7.48900000e-04 -1.65360702e-12 7.09286921e-02 5.55495221e-02 9.19065399e-02 6.10954700e-02 2.32239817e-03 7.18197378e-01 3.12874839e+03 +7.49000000e-04 -1.65360702e-12 7.09286920e-02 5.55495220e-02 9.19065399e-02 6.10954701e-02 2.32239815e-03 7.18197378e-01 3.12874839e+03 +7.49100000e-04 -1.65360702e-12 7.09286919e-02 5.55495219e-02 9.19065400e-02 6.10954702e-02 2.32239814e-03 7.18197378e-01 3.12874839e+03 +7.49200000e-04 -1.65360702e-12 7.09286919e-02 5.55495218e-02 9.19065401e-02 6.10954703e-02 2.32239813e-03 7.18197378e-01 3.12874839e+03 +7.49300000e-04 -1.65360702e-12 7.09286918e-02 5.55495217e-02 9.19065401e-02 6.10954704e-02 2.32239812e-03 7.18197378e-01 3.12874839e+03 +7.49400000e-04 -1.65360702e-12 7.09286918e-02 5.55495215e-02 9.19065402e-02 6.10954705e-02 2.32239810e-03 7.18197378e-01 3.12874839e+03 +7.49500000e-04 -1.65360702e-12 7.09286917e-02 5.55495214e-02 9.19065403e-02 6.10954706e-02 2.32239809e-03 7.18197378e-01 3.12874839e+03 +7.49600000e-04 -1.65360702e-12 7.09286916e-02 5.55495213e-02 9.19065404e-02 6.10954707e-02 2.32239808e-03 7.18197378e-01 3.12874839e+03 +7.49700000e-04 -1.65360702e-12 7.09286916e-02 5.55495212e-02 9.19065404e-02 6.10954709e-02 2.32239807e-03 7.18197378e-01 3.12874839e+03 +7.49800000e-04 -1.65360702e-12 7.09286915e-02 5.55495211e-02 9.19065405e-02 6.10954710e-02 2.32239805e-03 7.18197378e-01 3.12874839e+03 +7.49900000e-04 -1.65360702e-12 7.09286915e-02 5.55495210e-02 9.19065406e-02 6.10954711e-02 2.32239804e-03 7.18197378e-01 3.12874839e+03 +7.50000000e-04 -1.65360702e-12 7.09286914e-02 5.55495209e-02 9.19065406e-02 6.10954712e-02 2.32239803e-03 7.18197378e-01 3.12874839e+03 +7.50100000e-04 -1.65360702e-12 7.09286913e-02 5.55495208e-02 9.19065407e-02 6.10954713e-02 2.32239802e-03 7.18197378e-01 3.12874839e+03 +7.50200000e-04 -1.65360702e-12 7.09286913e-02 5.55495207e-02 9.19065408e-02 6.10954714e-02 2.32239800e-03 7.18197378e-01 3.12874839e+03 +7.50300000e-04 -1.65360702e-12 7.09286912e-02 5.55495206e-02 9.19065408e-02 6.10954715e-02 2.32239799e-03 7.18197378e-01 3.12874839e+03 +7.50400000e-04 -1.65360702e-12 7.09286912e-02 5.55495205e-02 9.19065409e-02 6.10954716e-02 2.32239798e-03 7.18197378e-01 3.12874839e+03 +7.50500000e-04 -1.65360702e-12 7.09286911e-02 5.55495203e-02 9.19065410e-02 6.10954717e-02 2.32239797e-03 7.18197378e-01 3.12874839e+03 +7.50600000e-04 -1.65360702e-12 7.09286911e-02 5.55495202e-02 9.19065410e-02 6.10954719e-02 2.32239795e-03 7.18197378e-01 3.12874839e+03 +7.50700000e-04 -1.65360702e-12 7.09286910e-02 5.55495201e-02 9.19065411e-02 6.10954720e-02 2.32239794e-03 7.18197378e-01 3.12874844e+03 +7.50800000e-04 -1.65360702e-12 7.09286909e-02 5.55495200e-02 9.19065412e-02 6.10954721e-02 2.32239793e-03 7.18197378e-01 3.12874844e+03 +7.50900000e-04 -1.65360702e-12 7.09286909e-02 5.55495199e-02 9.19065412e-02 6.10954722e-02 2.32239792e-03 7.18197378e-01 3.12874844e+03 +7.51000000e-04 -1.65360702e-12 7.09286908e-02 5.55495198e-02 9.19065413e-02 6.10954723e-02 2.32239790e-03 7.18197378e-01 3.12874844e+03 +7.51100000e-04 -1.65360702e-12 7.09286908e-02 5.55495197e-02 9.19065414e-02 6.10954724e-02 2.32239789e-03 7.18197378e-01 3.12874844e+03 +7.51200000e-04 -1.65360702e-12 7.09286907e-02 5.55495196e-02 9.19065414e-02 6.10954725e-02 2.32239788e-03 7.18197378e-01 3.12874844e+03 +7.51300000e-04 -1.65360702e-12 7.09286906e-02 5.55495195e-02 9.19065415e-02 6.10954726e-02 2.32239787e-03 7.18197378e-01 3.12874844e+03 +7.51400000e-04 -1.65360702e-12 7.09286906e-02 5.55495194e-02 9.19065416e-02 6.10954727e-02 2.32239786e-03 7.18197378e-01 3.12874844e+03 +7.51500000e-04 -1.65360702e-12 7.09286905e-02 5.55495193e-02 9.19065416e-02 6.10954728e-02 2.32239784e-03 7.18197378e-01 3.12874844e+03 +7.51600000e-04 -1.65360702e-12 7.09286905e-02 5.55495192e-02 9.19065417e-02 6.10954729e-02 2.32239783e-03 7.18197378e-01 3.12874844e+03 +7.51700000e-04 -1.65360702e-12 7.09286904e-02 5.55495191e-02 9.19065418e-02 6.10954730e-02 2.32239782e-03 7.18197378e-01 3.12874844e+03 +7.51800000e-04 -1.65360702e-12 7.09286904e-02 5.55495190e-02 9.19065418e-02 6.10954732e-02 2.32239781e-03 7.18197378e-01 3.12874844e+03 +7.51900000e-04 -1.65360702e-12 7.09286903e-02 5.55495189e-02 9.19065419e-02 6.10954733e-02 2.32239780e-03 7.18197378e-01 3.12874844e+03 +7.52000000e-04 -1.65360702e-12 7.09286902e-02 5.55495188e-02 9.19065420e-02 6.10954734e-02 2.32239778e-03 7.18197378e-01 3.12874844e+03 +7.52100000e-04 -1.65360702e-12 7.09286902e-02 5.55495187e-02 9.19065420e-02 6.10954735e-02 2.32239777e-03 7.18197378e-01 3.12874844e+03 +7.52200000e-04 -1.65360702e-12 7.09286901e-02 5.55495186e-02 9.19065421e-02 6.10954736e-02 2.32239776e-03 7.18197378e-01 3.12874844e+03 +7.52300000e-04 -1.65360702e-12 7.09286901e-02 5.55495185e-02 9.19065422e-02 6.10954737e-02 2.32239775e-03 7.18197378e-01 3.12874844e+03 +7.52400000e-04 -1.65360702e-12 7.09286900e-02 5.55495184e-02 9.19065422e-02 6.10954738e-02 2.32239774e-03 7.18197378e-01 3.12874844e+03 +7.52500000e-04 -1.65360702e-12 7.09286900e-02 5.55495183e-02 9.19065423e-02 6.10954739e-02 2.32239773e-03 7.18197378e-01 3.12874844e+03 +7.52600000e-04 -1.65360702e-12 7.09286899e-02 5.55495182e-02 9.19065424e-02 6.10954740e-02 2.32239771e-03 7.18197378e-01 3.12874844e+03 +7.52700000e-04 -1.65360702e-12 7.09286899e-02 5.55495181e-02 9.19065424e-02 6.10954741e-02 2.32239770e-03 7.18197378e-01 3.12874844e+03 +7.52800000e-04 -1.65360702e-12 7.09286898e-02 5.55495180e-02 9.19065425e-02 6.10954742e-02 2.32239769e-03 7.18197378e-01 3.12874844e+03 +7.52900000e-04 -1.65360702e-12 7.09286897e-02 5.55495179e-02 9.19065426e-02 6.10954743e-02 2.32239768e-03 7.18197378e-01 3.12874844e+03 +7.53000000e-04 -1.65360702e-12 7.09286897e-02 5.55495178e-02 9.19065426e-02 6.10954744e-02 2.32239767e-03 7.18197378e-01 3.12874844e+03 +7.53100000e-04 -1.65360702e-12 7.09286896e-02 5.55495177e-02 9.19065427e-02 6.10954745e-02 2.32239766e-03 7.18197378e-01 3.12874844e+03 +7.53200000e-04 -1.65360702e-12 7.09286896e-02 5.55495176e-02 9.19065428e-02 6.10954746e-02 2.32239764e-03 7.18197378e-01 3.12874844e+03 +7.53300000e-04 -1.65360702e-12 7.09286895e-02 5.55495175e-02 9.19065428e-02 6.10954747e-02 2.32239763e-03 7.18197378e-01 3.12874844e+03 +7.53400000e-04 -1.65360702e-12 7.09286895e-02 5.55495174e-02 9.19065429e-02 6.10954748e-02 2.32239762e-03 7.18197378e-01 3.12874844e+03 +7.53500000e-04 -1.65360702e-12 7.09286894e-02 5.55495173e-02 9.19065429e-02 6.10954749e-02 2.32239761e-03 7.18197378e-01 3.12874844e+03 +7.53600000e-04 -1.65360702e-12 7.09286894e-02 5.55495172e-02 9.19065430e-02 6.10954750e-02 2.32239760e-03 7.18197378e-01 3.12874844e+03 +7.53700000e-04 -1.65360702e-12 7.09286893e-02 5.55495171e-02 9.19065431e-02 6.10954751e-02 2.32239759e-03 7.18197378e-01 3.12874844e+03 +7.53800000e-04 -1.65360702e-12 7.09286893e-02 5.55495170e-02 9.19065431e-02 6.10954752e-02 2.32239758e-03 7.18197378e-01 3.12874844e+03 +7.53900000e-04 -1.65360702e-12 7.09286892e-02 5.55495169e-02 9.19065432e-02 6.10954753e-02 2.32239757e-03 7.18197378e-01 3.12874844e+03 +7.54000000e-04 -1.65360702e-12 7.09286891e-02 5.55495168e-02 9.19065433e-02 6.10954754e-02 2.32239755e-03 7.18197378e-01 3.12874844e+03 +7.54100000e-04 -1.65360702e-12 7.09286891e-02 5.55495167e-02 9.19065433e-02 6.10954755e-02 2.32239754e-03 7.18197378e-01 3.12874844e+03 +7.54200000e-04 -1.65360702e-12 7.09286890e-02 5.55495166e-02 9.19065434e-02 6.10954756e-02 2.32239753e-03 7.18197378e-01 3.12874844e+03 +7.54300000e-04 -1.65360702e-12 7.09286890e-02 5.55495165e-02 9.19065434e-02 6.10954757e-02 2.32239752e-03 7.18197378e-01 3.12874844e+03 +7.54400000e-04 -1.65360702e-12 7.09286889e-02 5.55495164e-02 9.19065435e-02 6.10954758e-02 2.32239751e-03 7.18197378e-01 3.12874844e+03 +7.54500000e-04 -1.65360702e-12 7.09286889e-02 5.55495163e-02 9.19065436e-02 6.10954759e-02 2.32239750e-03 7.18197378e-01 3.12874844e+03 +7.54600000e-04 -1.65360702e-12 7.09286888e-02 5.55495162e-02 9.19065436e-02 6.10954760e-02 2.32239749e-03 7.18197378e-01 3.12874844e+03 +7.54700000e-04 -1.65360702e-12 7.09286888e-02 5.55495161e-02 9.19065437e-02 6.10954761e-02 2.32239748e-03 7.18197378e-01 3.12874844e+03 +7.54800000e-04 -1.65360702e-12 7.09286887e-02 5.55495160e-02 9.19065437e-02 6.10954762e-02 2.32239746e-03 7.18197378e-01 3.12874844e+03 +7.54900000e-04 -1.65360702e-12 7.09286887e-02 5.55495159e-02 9.19065438e-02 6.10954763e-02 2.32239745e-03 7.18197378e-01 3.12874844e+03 +7.55000000e-04 -1.65360702e-12 7.09286886e-02 5.55495158e-02 9.19065439e-02 6.10954764e-02 2.32239744e-03 7.18197378e-01 3.12874844e+03 +7.55100000e-04 -1.65360702e-12 7.09286886e-02 5.55495157e-02 9.19065439e-02 6.10954765e-02 2.32239743e-03 7.18197378e-01 3.12874844e+03 +7.55200000e-04 -1.65360702e-12 7.09286885e-02 5.55495156e-02 9.19065440e-02 6.10954766e-02 2.32239742e-03 7.18197378e-01 3.12874844e+03 +7.55300000e-04 -1.65360702e-12 7.09286885e-02 5.55495155e-02 9.19065441e-02 6.10954767e-02 2.32239741e-03 7.18197378e-01 3.12874844e+03 +7.55400000e-04 -1.65360702e-12 7.09286884e-02 5.55495154e-02 9.19065441e-02 6.10954768e-02 2.32239740e-03 7.18197378e-01 3.12874844e+03 +7.55500000e-04 -1.65360702e-12 7.09286884e-02 5.55495153e-02 9.19065442e-02 6.10954769e-02 2.32239739e-03 7.18197378e-01 3.12874844e+03 +7.55600000e-04 -1.65360702e-12 7.09286883e-02 5.55495152e-02 9.19065442e-02 6.10954770e-02 2.32239738e-03 7.18197378e-01 3.12874844e+03 +7.55700000e-04 -1.65360702e-12 7.09286883e-02 5.55495151e-02 9.19065443e-02 6.10954771e-02 2.32239737e-03 7.18197378e-01 3.12874844e+03 +7.55800000e-04 -1.65360702e-12 7.09286882e-02 5.55495150e-02 9.19065444e-02 6.10954772e-02 2.32239736e-03 7.18197378e-01 3.12874844e+03 +7.55900000e-04 -1.65360702e-12 7.09286881e-02 5.55495150e-02 9.19065444e-02 6.10954773e-02 2.32239735e-03 7.18197378e-01 3.12874844e+03 +7.56000000e-04 -1.65360702e-12 7.09286881e-02 5.55495149e-02 9.19065445e-02 6.10954774e-02 2.32239733e-03 7.18197378e-01 3.12874844e+03 +7.56100000e-04 -1.65360702e-12 7.09286880e-02 5.55495148e-02 9.19065445e-02 6.10954775e-02 2.32239732e-03 7.18197378e-01 3.12874844e+03 +7.56200000e-04 -1.65360702e-12 7.09286880e-02 5.55495147e-02 9.19065446e-02 6.10954776e-02 2.32239731e-03 7.18197378e-01 3.12874844e+03 +7.56300000e-04 -1.65360702e-12 7.09286879e-02 5.55495146e-02 9.19065446e-02 6.10954777e-02 2.32239730e-03 7.18197378e-01 3.12874844e+03 +7.56400000e-04 -1.65360702e-12 7.09286879e-02 5.55495145e-02 9.19065447e-02 6.10954778e-02 2.32239729e-03 7.18197378e-01 3.12874844e+03 +7.56500000e-04 -1.65360702e-12 7.09286878e-02 5.55495144e-02 9.19065448e-02 6.10954779e-02 2.32239728e-03 7.18197378e-01 3.12874844e+03 +7.56600000e-04 -1.65360702e-12 7.09286878e-02 5.55495143e-02 9.19065448e-02 6.10954780e-02 2.32239727e-03 7.18197378e-01 3.12874844e+03 +7.56700000e-04 -1.65360702e-12 7.09286877e-02 5.55495142e-02 9.19065449e-02 6.10954780e-02 2.32239726e-03 7.18197378e-01 3.12874844e+03 +7.56800000e-04 -1.65360702e-12 7.09286877e-02 5.55495141e-02 9.19065449e-02 6.10954781e-02 2.32239725e-03 7.18197378e-01 3.12874844e+03 +7.56900000e-04 -1.65360702e-12 7.09286876e-02 5.55495140e-02 9.19065450e-02 6.10954782e-02 2.32239724e-03 7.18197378e-01 3.12874844e+03 +7.57000000e-04 -1.65360702e-12 7.09286876e-02 5.55495139e-02 9.19065451e-02 6.10954783e-02 2.32239723e-03 7.18197378e-01 3.12874844e+03 +7.57100000e-04 -1.65360702e-12 7.09286875e-02 5.55495139e-02 9.19065451e-02 6.10954784e-02 2.32239722e-03 7.18197378e-01 3.12874844e+03 +7.57200000e-04 -1.65360702e-12 7.09286875e-02 5.55495138e-02 9.19065452e-02 6.10954785e-02 2.32239721e-03 7.18197378e-01 3.12874844e+03 +7.57300000e-04 -1.65360702e-12 7.09286874e-02 5.55495137e-02 9.19065452e-02 6.10954786e-02 2.32239720e-03 7.18197378e-01 3.12874844e+03 +7.57400000e-04 -1.65360702e-12 7.09286874e-02 5.55495136e-02 9.19065453e-02 6.10954787e-02 2.32239719e-03 7.18197378e-01 3.12874844e+03 +7.57500000e-04 -1.65360702e-12 7.09286873e-02 5.55495135e-02 9.19065453e-02 6.10954788e-02 2.32239718e-03 7.18197378e-01 3.12874844e+03 +7.57600000e-04 -1.65360702e-12 7.09286873e-02 5.55495134e-02 9.19065454e-02 6.10954789e-02 2.32239717e-03 7.18197378e-01 3.12874844e+03 +7.57700000e-04 -1.65360702e-12 7.09286872e-02 5.55495133e-02 9.19065455e-02 6.10954790e-02 2.32239716e-03 7.18197378e-01 3.12874844e+03 +7.57800000e-04 -1.65360702e-12 7.09286872e-02 5.55495132e-02 9.19065455e-02 6.10954791e-02 2.32239715e-03 7.18197378e-01 3.12874844e+03 +7.57900000e-04 -1.65360702e-12 7.09286872e-02 5.55495131e-02 9.19065456e-02 6.10954792e-02 2.32239714e-03 7.18197378e-01 3.12874844e+03 +7.58000000e-04 -1.65360702e-12 7.09286871e-02 5.55495131e-02 9.19065456e-02 6.10954792e-02 2.32239713e-03 7.18197378e-01 3.12874844e+03 +7.58100000e-04 -1.65360702e-12 7.09286871e-02 5.55495130e-02 9.19065457e-02 6.10954793e-02 2.32239712e-03 7.18197378e-01 3.12874844e+03 +7.58200000e-04 -1.65360702e-12 7.09286870e-02 5.55495129e-02 9.19065457e-02 6.10954794e-02 2.32239711e-03 7.18197378e-01 3.12874844e+03 +7.58300000e-04 -1.65360702e-12 7.09286870e-02 5.55495128e-02 9.19065458e-02 6.10954795e-02 2.32239710e-03 7.18197378e-01 3.12874844e+03 +7.58400000e-04 -1.65360702e-12 7.09286869e-02 5.55495127e-02 9.19065458e-02 6.10954796e-02 2.32239709e-03 7.18197378e-01 3.12874844e+03 +7.58500000e-04 -1.65360702e-12 7.09286869e-02 5.55495126e-02 9.19065459e-02 6.10954797e-02 2.32239708e-03 7.18197378e-01 3.12874844e+03 +7.58600000e-04 -1.65360702e-12 7.09286868e-02 5.55495125e-02 9.19065460e-02 6.10954798e-02 2.32239707e-03 7.18197378e-01 3.12874844e+03 +7.58700000e-04 -1.65360702e-12 7.09286868e-02 5.55495124e-02 9.19065460e-02 6.10954799e-02 2.32239706e-03 7.18197378e-01 3.12874848e+03 +7.58800000e-04 -1.65360702e-12 7.09286867e-02 5.55495124e-02 9.19065461e-02 6.10954800e-02 2.32239705e-03 7.18197378e-01 3.12874848e+03 +7.58900000e-04 -1.65360702e-12 7.09286867e-02 5.55495123e-02 9.19065461e-02 6.10954801e-02 2.32239704e-03 7.18197378e-01 3.12874848e+03 +7.59000000e-04 -1.65360702e-12 7.09286866e-02 5.55495122e-02 9.19065462e-02 6.10954801e-02 2.32239703e-03 7.18197378e-01 3.12874848e+03 +7.59100000e-04 -1.65360702e-12 7.09286866e-02 5.55495121e-02 9.19065462e-02 6.10954802e-02 2.32239702e-03 7.18197378e-01 3.12874848e+03 +7.59200000e-04 -1.65360702e-12 7.09286865e-02 5.55495120e-02 9.19065463e-02 6.10954803e-02 2.32239701e-03 7.18197378e-01 3.12874848e+03 +7.59300000e-04 -1.65360702e-12 7.09286865e-02 5.55495119e-02 9.19065463e-02 6.10954804e-02 2.32239700e-03 7.18197378e-01 3.12874848e+03 +7.59400000e-04 -1.65360702e-12 7.09286864e-02 5.55495118e-02 9.19065464e-02 6.10954805e-02 2.32239699e-03 7.18197378e-01 3.12874848e+03 +7.59500000e-04 -1.65360702e-12 7.09286864e-02 5.55495118e-02 9.19065464e-02 6.10954806e-02 2.32239698e-03 7.18197378e-01 3.12874848e+03 +7.59600000e-04 -1.65360702e-12 7.09286863e-02 5.55495117e-02 9.19065465e-02 6.10954807e-02 2.32239697e-03 7.18197378e-01 3.12874848e+03 +7.59700000e-04 -1.65360702e-12 7.09286863e-02 5.55495116e-02 9.19065466e-02 6.10954808e-02 2.32239696e-03 7.18197378e-01 3.12874848e+03 +7.59800000e-04 -1.65360702e-12 7.09286863e-02 5.55495115e-02 9.19065466e-02 6.10954808e-02 2.32239695e-03 7.18197378e-01 3.12874848e+03 +7.59900000e-04 -1.65360702e-12 7.09286862e-02 5.55495114e-02 9.19065467e-02 6.10954809e-02 2.32239694e-03 7.18197378e-01 3.12874848e+03 +7.60000000e-04 -1.65360702e-12 7.09286862e-02 5.55495113e-02 9.19065467e-02 6.10954810e-02 2.32239693e-03 7.18197378e-01 3.12874848e+03 +7.60100000e-04 -1.65360702e-12 7.09286861e-02 5.55495112e-02 9.19065468e-02 6.10954811e-02 2.32239692e-03 7.18197378e-01 3.12874848e+03 +7.60200000e-04 -1.65360702e-12 7.09286861e-02 5.55495112e-02 9.19065468e-02 6.10954812e-02 2.32239691e-03 7.18197378e-01 3.12874848e+03 +7.60300000e-04 -1.65360702e-12 7.09286860e-02 5.55495111e-02 9.19065469e-02 6.10954813e-02 2.32239690e-03 7.18197378e-01 3.12874848e+03 +7.60400000e-04 -1.65360702e-12 7.09286860e-02 5.55495110e-02 9.19065469e-02 6.10954814e-02 2.32239689e-03 7.18197378e-01 3.12874848e+03 +7.60500000e-04 -1.65360702e-12 7.09286859e-02 5.55495109e-02 9.19065470e-02 6.10954814e-02 2.32239688e-03 7.18197378e-01 3.12874848e+03 +7.60600000e-04 -1.65360702e-12 7.09286859e-02 5.55495108e-02 9.19065470e-02 6.10954815e-02 2.32239687e-03 7.18197378e-01 3.12874848e+03 +7.60700000e-04 -1.65360702e-12 7.09286858e-02 5.55495107e-02 9.19065471e-02 6.10954816e-02 2.32239686e-03 7.18197378e-01 3.12874848e+03 +7.60800000e-04 -1.65360702e-12 7.09286858e-02 5.55495107e-02 9.19065471e-02 6.10954817e-02 2.32239685e-03 7.18197378e-01 3.12874848e+03 +7.60900000e-04 -1.65360702e-12 7.09286857e-02 5.55495106e-02 9.19065472e-02 6.10954818e-02 2.32239684e-03 7.18197378e-01 3.12874848e+03 +7.61000000e-04 -1.65360702e-12 7.09286857e-02 5.55495105e-02 9.19065472e-02 6.10954819e-02 2.32239683e-03 7.18197378e-01 3.12874848e+03 +7.61100000e-04 -1.65360702e-12 7.09286857e-02 5.55495104e-02 9.19065473e-02 6.10954819e-02 2.32239682e-03 7.18197378e-01 3.12874848e+03 +7.61200000e-04 -1.65360702e-12 7.09286856e-02 5.55495103e-02 9.19065473e-02 6.10954820e-02 2.32239681e-03 7.18197378e-01 3.12874848e+03 +7.61300000e-04 -1.65360702e-12 7.09286856e-02 5.55495103e-02 9.19065474e-02 6.10954821e-02 2.32239681e-03 7.18197378e-01 3.12874848e+03 +7.61400000e-04 -1.65360702e-12 7.09286855e-02 5.55495102e-02 9.19065475e-02 6.10954822e-02 2.32239680e-03 7.18197378e-01 3.12874848e+03 +7.61500000e-04 -1.65360702e-12 7.09286855e-02 5.55495101e-02 9.19065475e-02 6.10954823e-02 2.32239679e-03 7.18197378e-01 3.12874848e+03 +7.61600000e-04 -1.65360702e-12 7.09286854e-02 5.55495100e-02 9.19065476e-02 6.10954824e-02 2.32239678e-03 7.18197378e-01 3.12874848e+03 +7.61700000e-04 -1.65360702e-12 7.09286854e-02 5.55495099e-02 9.19065476e-02 6.10954824e-02 2.32239677e-03 7.18197378e-01 3.12874848e+03 +7.61800000e-04 -1.65360702e-12 7.09286853e-02 5.55495099e-02 9.19065477e-02 6.10954825e-02 2.32239676e-03 7.18197378e-01 3.12874848e+03 +7.61900000e-04 -1.65360702e-12 7.09286853e-02 5.55495098e-02 9.19065477e-02 6.10954826e-02 2.32239675e-03 7.18197378e-01 3.12874848e+03 +7.62000000e-04 -1.65360702e-12 7.09286853e-02 5.55495097e-02 9.19065478e-02 6.10954827e-02 2.32239674e-03 7.18197378e-01 3.12874848e+03 +7.62100000e-04 -1.65360702e-12 7.09286852e-02 5.55495096e-02 9.19065478e-02 6.10954828e-02 2.32239673e-03 7.18197378e-01 3.12874848e+03 +7.62200000e-04 -1.65360702e-12 7.09286852e-02 5.55495095e-02 9.19065479e-02 6.10954829e-02 2.32239672e-03 7.18197378e-01 3.12874848e+03 +7.62300000e-04 -1.65360702e-12 7.09286851e-02 5.55495095e-02 9.19065479e-02 6.10954829e-02 2.32239671e-03 7.18197378e-01 3.12874848e+03 +7.62400000e-04 -1.65360702e-12 7.09286851e-02 5.55495094e-02 9.19065480e-02 6.10954830e-02 2.32239670e-03 7.18197378e-01 3.12874848e+03 +7.62500000e-04 -1.65360702e-12 7.09286850e-02 5.55495093e-02 9.19065480e-02 6.10954831e-02 2.32239670e-03 7.18197378e-01 3.12874848e+03 +7.62600000e-04 -1.65360702e-12 7.09286850e-02 5.55495092e-02 9.19065481e-02 6.10954832e-02 2.32239669e-03 7.18197378e-01 3.12874848e+03 +7.62700000e-04 -1.65360702e-12 7.09286850e-02 5.55495091e-02 9.19065481e-02 6.10954833e-02 2.32239668e-03 7.18197378e-01 3.12874848e+03 +7.62800000e-04 -1.65360702e-12 7.09286849e-02 5.55495091e-02 9.19065482e-02 6.10954833e-02 2.32239667e-03 7.18197378e-01 3.12874848e+03 +7.62900000e-04 -1.65360702e-12 7.09286849e-02 5.55495090e-02 9.19065482e-02 6.10954834e-02 2.32239666e-03 7.18197378e-01 3.12874848e+03 +7.63000000e-04 -1.65360702e-12 7.09286848e-02 5.55495089e-02 9.19065483e-02 6.10954835e-02 2.32239665e-03 7.18197378e-01 3.12874848e+03 +7.63100000e-04 -1.65360702e-12 7.09286848e-02 5.55495088e-02 9.19065483e-02 6.10954836e-02 2.32239664e-03 7.18197378e-01 3.12874848e+03 +7.63200000e-04 -1.65360702e-12 7.09286847e-02 5.55495088e-02 9.19065484e-02 6.10954837e-02 2.32239663e-03 7.18197378e-01 3.12874848e+03 +7.63300000e-04 -1.65360702e-12 7.09286847e-02 5.55495087e-02 9.19065484e-02 6.10954837e-02 2.32239662e-03 7.18197378e-01 3.12874848e+03 +7.63400000e-04 -1.65360702e-12 7.09286847e-02 5.55495086e-02 9.19065485e-02 6.10954838e-02 2.32239661e-03 7.18197378e-01 3.12874848e+03 +7.63500000e-04 -1.65360702e-12 7.09286846e-02 5.55495085e-02 9.19065485e-02 6.10954839e-02 2.32239661e-03 7.18197378e-01 3.12874848e+03 +7.63600000e-04 -1.65360702e-12 7.09286846e-02 5.55495084e-02 9.19065486e-02 6.10954840e-02 2.32239660e-03 7.18197378e-01 3.12874848e+03 +7.63700000e-04 -1.65360702e-12 7.09286845e-02 5.55495084e-02 9.19065486e-02 6.10954841e-02 2.32239659e-03 7.18197378e-01 3.12874848e+03 +7.63800000e-04 -1.65360702e-12 7.09286845e-02 5.55495083e-02 9.19065486e-02 6.10954841e-02 2.32239658e-03 7.18197378e-01 3.12874848e+03 +7.63900000e-04 -1.65360702e-12 7.09286844e-02 5.55495082e-02 9.19065487e-02 6.10954842e-02 2.32239657e-03 7.18197378e-01 3.12874848e+03 +7.64000000e-04 -1.65360702e-12 7.09286844e-02 5.55495081e-02 9.19065487e-02 6.10954843e-02 2.32239656e-03 7.18197378e-01 3.12874848e+03 +7.64100000e-04 -1.65360702e-12 7.09286844e-02 5.55495081e-02 9.19065488e-02 6.10954844e-02 2.32239655e-03 7.18197378e-01 3.12874848e+03 +7.64200000e-04 -1.65360702e-12 7.09286843e-02 5.55495080e-02 9.19065488e-02 6.10954844e-02 2.32239654e-03 7.18197378e-01 3.12874848e+03 +7.64300000e-04 -1.65360702e-12 7.09286843e-02 5.55495079e-02 9.19065489e-02 6.10954845e-02 2.32239654e-03 7.18197378e-01 3.12874848e+03 +7.64400000e-04 -1.65360702e-12 7.09286842e-02 5.55495078e-02 9.19065489e-02 6.10954846e-02 2.32239653e-03 7.18197378e-01 3.12874848e+03 +7.64500000e-04 -1.65360702e-12 7.09286842e-02 5.55495078e-02 9.19065490e-02 6.10954847e-02 2.32239652e-03 7.18197378e-01 3.12874848e+03 +7.64600000e-04 -1.65360702e-12 7.09286842e-02 5.55495077e-02 9.19065490e-02 6.10954848e-02 2.32239651e-03 7.18197378e-01 3.12874848e+03 +7.64700000e-04 -1.65360702e-12 7.09286841e-02 5.55495076e-02 9.19065491e-02 6.10954848e-02 2.32239650e-03 7.18197378e-01 3.12874848e+03 +7.64800000e-04 -1.65360702e-12 7.09286841e-02 5.55495075e-02 9.19065491e-02 6.10954849e-02 2.32239649e-03 7.18197378e-01 3.12874848e+03 +7.64900000e-04 -1.65360702e-12 7.09286840e-02 5.55495075e-02 9.19065492e-02 6.10954850e-02 2.32239648e-03 7.18197378e-01 3.12874848e+03 +7.65000000e-04 -1.65360702e-12 7.09286840e-02 5.55495074e-02 9.19065492e-02 6.10954851e-02 2.32239648e-03 7.18197378e-01 3.12874848e+03 +7.65100000e-04 -1.65360702e-12 7.09286840e-02 5.55495073e-02 9.19065493e-02 6.10954851e-02 2.32239647e-03 7.18197378e-01 3.12874848e+03 +7.65200000e-04 -1.65360702e-12 7.09286839e-02 5.55495072e-02 9.19065493e-02 6.10954852e-02 2.32239646e-03 7.18197378e-01 3.12874848e+03 +7.65300000e-04 -1.65360702e-12 7.09286839e-02 5.55495072e-02 9.19065494e-02 6.10954853e-02 2.32239645e-03 7.18197378e-01 3.12874848e+03 +7.65400000e-04 -1.65360702e-12 7.09286838e-02 5.55495071e-02 9.19065494e-02 6.10954854e-02 2.32239644e-03 7.18197378e-01 3.12874848e+03 +7.65500000e-04 -1.65360702e-12 7.09286838e-02 5.55495070e-02 9.19065495e-02 6.10954854e-02 2.32239643e-03 7.18197378e-01 3.12874848e+03 +7.65600000e-04 -1.65360702e-12 7.09286838e-02 5.55495070e-02 9.19065495e-02 6.10954855e-02 2.32239643e-03 7.18197378e-01 3.12874848e+03 +7.65700000e-04 -1.65360702e-12 7.09286837e-02 5.55495069e-02 9.19065495e-02 6.10954856e-02 2.32239642e-03 7.18197378e-01 3.12874848e+03 +7.65800000e-04 -1.65360702e-12 7.09286837e-02 5.55495068e-02 9.19065496e-02 6.10954857e-02 2.32239641e-03 7.18197378e-01 3.12874848e+03 +7.65900000e-04 -1.65360702e-12 7.09286836e-02 5.55495067e-02 9.19065496e-02 6.10954857e-02 2.32239640e-03 7.18197378e-01 3.12874848e+03 +7.66000000e-04 -1.65360702e-12 7.09286836e-02 5.55495067e-02 9.19065497e-02 6.10954858e-02 2.32239639e-03 7.18197378e-01 3.12874848e+03 +7.66100000e-04 -1.65360702e-12 7.09286836e-02 5.55495066e-02 9.19065497e-02 6.10954859e-02 2.32239638e-03 7.18197378e-01 3.12874848e+03 +7.66200000e-04 -1.65360702e-12 7.09286835e-02 5.55495065e-02 9.19065498e-02 6.10954860e-02 2.32239638e-03 7.18197378e-01 3.12874848e+03 +7.66300000e-04 -1.65360702e-12 7.09286835e-02 5.55495065e-02 9.19065498e-02 6.10954860e-02 2.32239637e-03 7.18197378e-01 3.12874848e+03 +7.66400000e-04 -1.65360702e-12 7.09286834e-02 5.55495064e-02 9.19065499e-02 6.10954861e-02 2.32239636e-03 7.18197378e-01 3.12874848e+03 +7.66500000e-04 -1.65360702e-12 7.09286834e-02 5.55495063e-02 9.19065499e-02 6.10954862e-02 2.32239635e-03 7.18197378e-01 3.12874848e+03 +7.66600000e-04 -1.65360702e-12 7.09286834e-02 5.55495062e-02 9.19065500e-02 6.10954862e-02 2.32239634e-03 7.18197378e-01 3.12874848e+03 +7.66700000e-04 -1.65360702e-12 7.09286833e-02 5.55495062e-02 9.19065500e-02 6.10954863e-02 2.32239634e-03 7.18197378e-01 3.12874848e+03 +7.66800000e-04 -1.65360702e-12 7.09286833e-02 5.55495061e-02 9.19065500e-02 6.10954864e-02 2.32239633e-03 7.18197378e-01 3.12874851e+03 +7.66900000e-04 -1.65360702e-12 7.09286832e-02 5.55495060e-02 9.19065501e-02 6.10954865e-02 2.32239632e-03 7.18197378e-01 3.12874851e+03 +7.67000000e-04 -1.65360702e-12 7.09286832e-02 5.55495060e-02 9.19065501e-02 6.10954865e-02 2.32239631e-03 7.18197378e-01 3.12874851e+03 +7.67100000e-04 -1.65360702e-12 7.09286832e-02 5.55495059e-02 9.19065502e-02 6.10954866e-02 2.32239630e-03 7.18197378e-01 3.12874851e+03 +7.67200000e-04 -1.65360702e-12 7.09286831e-02 5.55495058e-02 9.19065502e-02 6.10954867e-02 2.32239629e-03 7.18197378e-01 3.12874851e+03 +7.67300000e-04 -1.65360702e-12 7.09286831e-02 5.55495057e-02 9.19065503e-02 6.10954868e-02 2.32239629e-03 7.18197378e-01 3.12874851e+03 +7.67400000e-04 -1.65360702e-12 7.09286831e-02 5.55495057e-02 9.19065503e-02 6.10954868e-02 2.32239628e-03 7.18197378e-01 3.12874851e+03 +7.67500000e-04 -1.65360702e-12 7.09286830e-02 5.55495056e-02 9.19065504e-02 6.10954869e-02 2.32239627e-03 7.18197378e-01 3.12874851e+03 +7.67600000e-04 -1.65360702e-12 7.09286830e-02 5.55495055e-02 9.19065504e-02 6.10954870e-02 2.32239626e-03 7.18197378e-01 3.12874851e+03 +7.67700000e-04 -1.65360702e-12 7.09286829e-02 5.55495055e-02 9.19065504e-02 6.10954870e-02 2.32239625e-03 7.18197378e-01 3.12874851e+03 +7.67800000e-04 -1.65360702e-12 7.09286829e-02 5.55495054e-02 9.19065505e-02 6.10954871e-02 2.32239625e-03 7.18197378e-01 3.12874851e+03 +7.67900000e-04 -1.65360702e-12 7.09286829e-02 5.55495053e-02 9.19065505e-02 6.10954872e-02 2.32239624e-03 7.18197378e-01 3.12874851e+03 +7.68000000e-04 -1.65360702e-12 7.09286828e-02 5.55495053e-02 9.19065506e-02 6.10954872e-02 2.32239623e-03 7.18197378e-01 3.12874851e+03 +7.68100000e-04 -1.65360702e-12 7.09286828e-02 5.55495052e-02 9.19065506e-02 6.10954873e-02 2.32239622e-03 7.18197378e-01 3.12874851e+03 +7.68200000e-04 -1.65360702e-12 7.09286828e-02 5.55495051e-02 9.19065507e-02 6.10954874e-02 2.32239622e-03 7.18197378e-01 3.12874851e+03 +7.68300000e-04 -1.65360702e-12 7.09286827e-02 5.55495051e-02 9.19065507e-02 6.10954875e-02 2.32239621e-03 7.18197378e-01 3.12874851e+03 +7.68400000e-04 -1.65360702e-12 7.09286827e-02 5.55495050e-02 9.19065507e-02 6.10954875e-02 2.32239620e-03 7.18197378e-01 3.12874851e+03 +7.68500000e-04 -1.65360702e-12 7.09286826e-02 5.55495049e-02 9.19065508e-02 6.10954876e-02 2.32239619e-03 7.18197378e-01 3.12874851e+03 +7.68600000e-04 -1.65360702e-12 7.09286826e-02 5.55495049e-02 9.19065508e-02 6.10954877e-02 2.32239618e-03 7.18197378e-01 3.12874851e+03 +7.68700000e-04 -1.65360702e-12 7.09286826e-02 5.55495048e-02 9.19065509e-02 6.10954877e-02 2.32239618e-03 7.18197378e-01 3.12874851e+03 +7.68800000e-04 -1.65360702e-12 7.09286825e-02 5.55495047e-02 9.19065509e-02 6.10954878e-02 2.32239617e-03 7.18197378e-01 3.12874851e+03 +7.68900000e-04 -1.65360702e-12 7.09286825e-02 5.55495047e-02 9.19065510e-02 6.10954879e-02 2.32239616e-03 7.18197378e-01 3.12874851e+03 +7.69000000e-04 -1.65360702e-12 7.09286825e-02 5.55495046e-02 9.19065510e-02 6.10954879e-02 2.32239615e-03 7.18197378e-01 3.12874851e+03 +7.69100000e-04 -1.65360702e-12 7.09286824e-02 5.55495045e-02 9.19065510e-02 6.10954880e-02 2.32239615e-03 7.18197378e-01 3.12874851e+03 +7.69200000e-04 -1.65360702e-12 7.09286824e-02 5.55495045e-02 9.19065511e-02 6.10954881e-02 2.32239614e-03 7.18197378e-01 3.12874851e+03 +7.69300000e-04 -1.65360702e-12 7.09286823e-02 5.55495044e-02 9.19065511e-02 6.10954881e-02 2.32239613e-03 7.18197378e-01 3.12874851e+03 +7.69400000e-04 -1.65360702e-12 7.09286823e-02 5.55495043e-02 9.19065512e-02 6.10954882e-02 2.32239612e-03 7.18197378e-01 3.12874851e+03 +7.69500000e-04 -1.65360702e-12 7.09286823e-02 5.55495043e-02 9.19065512e-02 6.10954883e-02 2.32239612e-03 7.18197378e-01 3.12874851e+03 +7.69600000e-04 -1.65360702e-12 7.09286822e-02 5.55495042e-02 9.19065513e-02 6.10954883e-02 2.32239611e-03 7.18197378e-01 3.12874851e+03 +7.69700000e-04 -1.65360702e-12 7.09286822e-02 5.55495041e-02 9.19065513e-02 6.10954884e-02 2.32239610e-03 7.18197378e-01 3.12874851e+03 +7.69800000e-04 -1.65360702e-12 7.09286822e-02 5.55495041e-02 9.19065513e-02 6.10954885e-02 2.32239609e-03 7.18197378e-01 3.12874851e+03 +7.69900000e-04 -1.65360702e-12 7.09286821e-02 5.55495040e-02 9.19065514e-02 6.10954885e-02 2.32239609e-03 7.18197378e-01 3.12874851e+03 +7.70000000e-04 -1.65360702e-12 7.09286821e-02 5.55495039e-02 9.19065514e-02 6.10954886e-02 2.32239608e-03 7.18197378e-01 3.12874851e+03 +7.70100000e-04 -1.65360702e-12 7.09286821e-02 5.55495039e-02 9.19065515e-02 6.10954887e-02 2.32239607e-03 7.18197378e-01 3.12874851e+03 +7.70200000e-04 -1.65360702e-12 7.09286820e-02 5.55495038e-02 9.19065515e-02 6.10954887e-02 2.32239606e-03 7.18197378e-01 3.12874851e+03 +7.70300000e-04 -1.65360702e-12 7.09286820e-02 5.55495037e-02 9.19065515e-02 6.10954888e-02 2.32239606e-03 7.18197378e-01 3.12874851e+03 +7.70400000e-04 -1.65360702e-12 7.09286820e-02 5.55495037e-02 9.19065516e-02 6.10954889e-02 2.32239605e-03 7.18197378e-01 3.12874851e+03 +7.70500000e-04 -1.65360702e-12 7.09286819e-02 5.55495036e-02 9.19065516e-02 6.10954889e-02 2.32239604e-03 7.18197378e-01 3.12874851e+03 +7.70600000e-04 -1.65360702e-12 7.09286819e-02 5.55495035e-02 9.19065517e-02 6.10954890e-02 2.32239603e-03 7.18197378e-01 3.12874851e+03 +7.70700000e-04 -1.65360702e-12 7.09286818e-02 5.55495035e-02 9.19065517e-02 6.10954891e-02 2.32239603e-03 7.18197378e-01 3.12874851e+03 +7.70800000e-04 -1.65360702e-12 7.09286818e-02 5.55495034e-02 9.19065518e-02 6.10954891e-02 2.32239602e-03 7.18197378e-01 3.12874851e+03 +7.70900000e-04 -1.65360702e-12 7.09286818e-02 5.55495034e-02 9.19065518e-02 6.10954892e-02 2.32239601e-03 7.18197378e-01 3.12874851e+03 +7.71000000e-04 -1.65360702e-12 7.09286817e-02 5.55495033e-02 9.19065518e-02 6.10954893e-02 2.32239600e-03 7.18197378e-01 3.12874851e+03 +7.71100000e-04 -1.65360702e-12 7.09286817e-02 5.55495032e-02 9.19065519e-02 6.10954893e-02 2.32239600e-03 7.18197378e-01 3.12874851e+03 +7.71200000e-04 -1.65360702e-12 7.09286817e-02 5.55495032e-02 9.19065519e-02 6.10954894e-02 2.32239599e-03 7.18197378e-01 3.12874851e+03 +7.71300000e-04 -1.65360702e-12 7.09286816e-02 5.55495031e-02 9.19065520e-02 6.10954895e-02 2.32239598e-03 7.18197378e-01 3.12874851e+03 +7.71400000e-04 -1.65360702e-12 7.09286816e-02 5.55495030e-02 9.19065520e-02 6.10954895e-02 2.32239598e-03 7.18197378e-01 3.12874851e+03 +7.71500000e-04 -1.65360702e-12 7.09286816e-02 5.55495030e-02 9.19065520e-02 6.10954896e-02 2.32239597e-03 7.18197378e-01 3.12874851e+03 +7.71600000e-04 -1.65360702e-12 7.09286815e-02 5.55495029e-02 9.19065521e-02 6.10954897e-02 2.32239596e-03 7.18197378e-01 3.12874851e+03 +7.71700000e-04 -1.65360702e-12 7.09286815e-02 5.55495029e-02 9.19065521e-02 6.10954897e-02 2.32239595e-03 7.18197378e-01 3.12874851e+03 +7.71800000e-04 -1.65360702e-12 7.09286815e-02 5.55495028e-02 9.19065521e-02 6.10954898e-02 2.32239595e-03 7.18197378e-01 3.12874851e+03 +7.71900000e-04 -1.65360702e-12 7.09286814e-02 5.55495027e-02 9.19065522e-02 6.10954899e-02 2.32239594e-03 7.18197378e-01 3.12874851e+03 +7.72000000e-04 -1.65360702e-12 7.09286814e-02 5.55495027e-02 9.19065522e-02 6.10954899e-02 2.32239593e-03 7.18197378e-01 3.12874851e+03 +7.72100000e-04 -1.65360702e-12 7.09286814e-02 5.55495026e-02 9.19065523e-02 6.10954900e-02 2.32239593e-03 7.18197378e-01 3.12874851e+03 +7.72200000e-04 -1.65360702e-12 7.09286813e-02 5.55495025e-02 9.19065523e-02 6.10954900e-02 2.32239592e-03 7.18197378e-01 3.12874851e+03 +7.72300000e-04 -1.65360702e-12 7.09286813e-02 5.55495025e-02 9.19065523e-02 6.10954901e-02 2.32239591e-03 7.18197378e-01 3.12874851e+03 +7.72400000e-04 -1.65360702e-12 7.09286813e-02 5.55495024e-02 9.19065524e-02 6.10954902e-02 2.32239590e-03 7.18197378e-01 3.12874851e+03 +7.72500000e-04 -1.65360702e-12 7.09286812e-02 5.55495024e-02 9.19065524e-02 6.10954902e-02 2.32239590e-03 7.18197378e-01 3.12874851e+03 +7.72600000e-04 -1.65360702e-12 7.09286812e-02 5.55495023e-02 9.19065525e-02 6.10954903e-02 2.32239589e-03 7.18197378e-01 3.12874851e+03 +7.72700000e-04 -1.65360702e-12 7.09286812e-02 5.55495022e-02 9.19065525e-02 6.10954904e-02 2.32239588e-03 7.18197378e-01 3.12874851e+03 +7.72800000e-04 -1.65360702e-12 7.09286811e-02 5.55495022e-02 9.19065525e-02 6.10954904e-02 2.32239588e-03 7.18197378e-01 3.12874851e+03 +7.72900000e-04 -1.65360702e-12 7.09286811e-02 5.55495021e-02 9.19065526e-02 6.10954905e-02 2.32239587e-03 7.18197378e-01 3.12874851e+03 +7.73000000e-04 -1.65360702e-12 7.09286811e-02 5.55495021e-02 9.19065526e-02 6.10954905e-02 2.32239586e-03 7.18197378e-01 3.12874851e+03 +7.73100000e-04 -1.65360702e-12 7.09286810e-02 5.55495020e-02 9.19065527e-02 6.10954906e-02 2.32239586e-03 7.18197378e-01 3.12874851e+03 +7.73200000e-04 -1.65360702e-12 7.09286810e-02 5.55495019e-02 9.19065527e-02 6.10954907e-02 2.32239585e-03 7.18197378e-01 3.12874851e+03 +7.73300000e-04 -1.65360702e-12 7.09286810e-02 5.55495019e-02 9.19065527e-02 6.10954907e-02 2.32239584e-03 7.18197378e-01 3.12874851e+03 +7.73400000e-04 -1.65360702e-12 7.09286809e-02 5.55495018e-02 9.19065528e-02 6.10954908e-02 2.32239584e-03 7.18197378e-01 3.12874851e+03 +7.73500000e-04 -1.65360702e-12 7.09286809e-02 5.55495018e-02 9.19065528e-02 6.10954908e-02 2.32239583e-03 7.18197378e-01 3.12874851e+03 +7.73600000e-04 -1.65360702e-12 7.09286809e-02 5.55495017e-02 9.19065528e-02 6.10954909e-02 2.32239582e-03 7.18197378e-01 3.12874851e+03 +7.73700000e-04 -1.65360702e-12 7.09286808e-02 5.55495016e-02 9.19065529e-02 6.10954910e-02 2.32239581e-03 7.18197378e-01 3.12874851e+03 +7.73800000e-04 -1.65360702e-12 7.09286808e-02 5.55495016e-02 9.19065529e-02 6.10954910e-02 2.32239581e-03 7.18197378e-01 3.12874851e+03 +7.73900000e-04 -1.65360702e-12 7.09286808e-02 5.55495015e-02 9.19065530e-02 6.10954911e-02 2.32239580e-03 7.18197378e-01 3.12874851e+03 +7.74000000e-04 -1.65360702e-12 7.09286807e-02 5.55495015e-02 9.19065530e-02 6.10954912e-02 2.32239579e-03 7.18197378e-01 3.12874851e+03 +7.74100000e-04 -1.65360702e-12 7.09286807e-02 5.55495014e-02 9.19065530e-02 6.10954912e-02 2.32239579e-03 7.18197378e-01 3.12874851e+03 +7.74200000e-04 -1.65360702e-12 7.09286807e-02 5.55495014e-02 9.19065531e-02 6.10954913e-02 2.32239578e-03 7.18197378e-01 3.12874851e+03 +7.74300000e-04 -1.65360702e-12 7.09286806e-02 5.55495013e-02 9.19065531e-02 6.10954913e-02 2.32239577e-03 7.18197378e-01 3.12874851e+03 +7.74400000e-04 -1.65360702e-12 7.09286806e-02 5.55495012e-02 9.19065531e-02 6.10954914e-02 2.32239577e-03 7.18197378e-01 3.12874851e+03 +7.74500000e-04 -1.65360702e-12 7.09286806e-02 5.55495012e-02 9.19065532e-02 6.10954914e-02 2.32239576e-03 7.18197378e-01 3.12874851e+03 +7.74600000e-04 -1.65360702e-12 7.09286806e-02 5.55495011e-02 9.19065532e-02 6.10954915e-02 2.32239575e-03 7.18197378e-01 3.12874851e+03 +7.74700000e-04 -1.65360702e-12 7.09286805e-02 5.55495011e-02 9.19065533e-02 6.10954916e-02 2.32239575e-03 7.18197378e-01 3.12874851e+03 +7.74800000e-04 -1.65360702e-12 7.09286805e-02 5.55495010e-02 9.19065533e-02 6.10954916e-02 2.32239574e-03 7.18197378e-01 3.12874851e+03 +7.74900000e-04 -1.65360702e-12 7.09286805e-02 5.55495009e-02 9.19065533e-02 6.10954917e-02 2.32239573e-03 7.18197378e-01 3.12874854e+03 +7.75000000e-04 -1.65360702e-12 7.09286804e-02 5.55495009e-02 9.19065534e-02 6.10954917e-02 2.32239573e-03 7.18197378e-01 3.12874854e+03 +7.75100000e-04 -1.65360702e-12 7.09286804e-02 5.55495008e-02 9.19065534e-02 6.10954918e-02 2.32239572e-03 7.18197378e-01 3.12874854e+03 +7.75200000e-04 -1.65360702e-12 7.09286804e-02 5.55495008e-02 9.19065534e-02 6.10954919e-02 2.32239571e-03 7.18197378e-01 3.12874854e+03 +7.75300000e-04 -1.65360702e-12 7.09286803e-02 5.55495007e-02 9.19065535e-02 6.10954919e-02 2.32239571e-03 7.18197378e-01 3.12874854e+03 +7.75400000e-04 -1.65360702e-12 7.09286803e-02 5.55495007e-02 9.19065535e-02 6.10954920e-02 2.32239570e-03 7.18197378e-01 3.12874854e+03 +7.75500000e-04 -1.65360702e-12 7.09286803e-02 5.55495006e-02 9.19065535e-02 6.10954920e-02 2.32239570e-03 7.18197378e-01 3.12874854e+03 +7.75600000e-04 -1.65360702e-12 7.09286802e-02 5.55495006e-02 9.19065536e-02 6.10954921e-02 2.32239569e-03 7.18197378e-01 3.12874854e+03 +7.75700000e-04 -1.65360702e-12 7.09286802e-02 5.55495005e-02 9.19065536e-02 6.10954922e-02 2.32239568e-03 7.18197378e-01 3.12874854e+03 +7.75800000e-04 -1.65360702e-12 7.09286802e-02 5.55495004e-02 9.19065536e-02 6.10954922e-02 2.32239568e-03 7.18197378e-01 3.12874854e+03 +7.75900000e-04 -1.65360702e-12 7.09286801e-02 5.55495004e-02 9.19065537e-02 6.10954923e-02 2.32239567e-03 7.18197378e-01 3.12874854e+03 +7.76000000e-04 -1.65360702e-12 7.09286801e-02 5.55495003e-02 9.19065537e-02 6.10954923e-02 2.32239566e-03 7.18197378e-01 3.12874854e+03 +7.76100000e-04 -1.65360702e-12 7.09286801e-02 5.55495003e-02 9.19065538e-02 6.10954924e-02 2.32239566e-03 7.18197378e-01 3.12874854e+03 +7.76200000e-04 -1.65360702e-12 7.09286801e-02 5.55495002e-02 9.19065538e-02 6.10954924e-02 2.32239565e-03 7.18197378e-01 3.12874854e+03 +7.76300000e-04 -1.65360702e-12 7.09286800e-02 5.55495002e-02 9.19065538e-02 6.10954925e-02 2.32239564e-03 7.18197378e-01 3.12874854e+03 +7.76400000e-04 -1.65360702e-12 7.09286800e-02 5.55495001e-02 9.19065539e-02 6.10954926e-02 2.32239564e-03 7.18197378e-01 3.12874854e+03 +7.76500000e-04 -1.65360702e-12 7.09286800e-02 5.55495001e-02 9.19065539e-02 6.10954926e-02 2.32239563e-03 7.18197378e-01 3.12874854e+03 +7.76600000e-04 -1.65360702e-12 7.09286799e-02 5.55495000e-02 9.19065539e-02 6.10954927e-02 2.32239563e-03 7.18197378e-01 3.12874854e+03 +7.76700000e-04 -1.65360702e-12 7.09286799e-02 5.55494999e-02 9.19065540e-02 6.10954927e-02 2.32239562e-03 7.18197378e-01 3.12874854e+03 +7.76800000e-04 -1.65360702e-12 7.09286799e-02 5.55494999e-02 9.19065540e-02 6.10954928e-02 2.32239561e-03 7.18197378e-01 3.12874854e+03 +7.76900000e-04 -1.65360702e-12 7.09286798e-02 5.55494998e-02 9.19065540e-02 6.10954928e-02 2.32239561e-03 7.18197378e-01 3.12874854e+03 +7.77000000e-04 -1.65360702e-12 7.09286798e-02 5.55494998e-02 9.19065541e-02 6.10954929e-02 2.32239560e-03 7.18197378e-01 3.12874854e+03 +7.77100000e-04 -1.65360702e-12 7.09286798e-02 5.55494997e-02 9.19065541e-02 6.10954929e-02 2.32239559e-03 7.18197378e-01 3.12874854e+03 +7.77200000e-04 -1.65360702e-12 7.09286798e-02 5.55494997e-02 9.19065541e-02 6.10954930e-02 2.32239559e-03 7.18197378e-01 3.12874854e+03 +7.77300000e-04 -1.65360702e-12 7.09286797e-02 5.55494996e-02 9.19065542e-02 6.10954931e-02 2.32239558e-03 7.18197378e-01 3.12874854e+03 +7.77400000e-04 -1.65360702e-12 7.09286797e-02 5.55494996e-02 9.19065542e-02 6.10954931e-02 2.32239558e-03 7.18197378e-01 3.12874854e+03 +7.77500000e-04 -1.65360702e-12 7.09286797e-02 5.55494995e-02 9.19065542e-02 6.10954932e-02 2.32239557e-03 7.18197378e-01 3.12874854e+03 +7.77600000e-04 -1.65360702e-12 7.09286796e-02 5.55494995e-02 9.19065543e-02 6.10954932e-02 2.32239556e-03 7.18197378e-01 3.12874854e+03 +7.77700000e-04 -1.65360702e-12 7.09286796e-02 5.55494994e-02 9.19065543e-02 6.10954933e-02 2.32239556e-03 7.18197378e-01 3.12874854e+03 +7.77800000e-04 -1.65360702e-12 7.09286796e-02 5.55494993e-02 9.19065543e-02 6.10954933e-02 2.32239555e-03 7.18197378e-01 3.12874854e+03 +7.77900000e-04 -1.65360702e-12 7.09286795e-02 5.55494993e-02 9.19065544e-02 6.10954934e-02 2.32239554e-03 7.18197378e-01 3.12874854e+03 +7.78000000e-04 -1.65360702e-12 7.09286795e-02 5.55494992e-02 9.19065544e-02 6.10954934e-02 2.32239554e-03 7.18197378e-01 3.12874854e+03 +7.78100000e-04 -1.65360702e-12 7.09286795e-02 5.55494992e-02 9.19065544e-02 6.10954935e-02 2.32239553e-03 7.18197378e-01 3.12874854e+03 +7.78200000e-04 -1.65360702e-12 7.09286795e-02 5.55494991e-02 9.19065545e-02 6.10954935e-02 2.32239553e-03 7.18197378e-01 3.12874854e+03 +7.78300000e-04 -1.65360702e-12 7.09286794e-02 5.55494991e-02 9.19065545e-02 6.10954936e-02 2.32239552e-03 7.18197378e-01 3.12874854e+03 +7.78400000e-04 -1.65360702e-12 7.09286794e-02 5.55494990e-02 9.19065545e-02 6.10954937e-02 2.32239551e-03 7.18197378e-01 3.12874854e+03 +7.78500000e-04 -1.65360702e-12 7.09286794e-02 5.55494990e-02 9.19065546e-02 6.10954937e-02 2.32239551e-03 7.18197378e-01 3.12874854e+03 +7.78600000e-04 -1.65360702e-12 7.09286793e-02 5.55494989e-02 9.19065546e-02 6.10954938e-02 2.32239550e-03 7.18197378e-01 3.12874854e+03 +7.78700000e-04 -1.65360702e-12 7.09286793e-02 5.55494989e-02 9.19065546e-02 6.10954938e-02 2.32239550e-03 7.18197378e-01 3.12874854e+03 +7.78800000e-04 -1.65360702e-12 7.09286793e-02 5.55494988e-02 9.19065547e-02 6.10954939e-02 2.32239549e-03 7.18197378e-01 3.12874854e+03 +7.78900000e-04 -1.65360702e-12 7.09286793e-02 5.55494988e-02 9.19065547e-02 6.10954939e-02 2.32239548e-03 7.18197378e-01 3.12874854e+03 +7.79000000e-04 -1.65360702e-12 7.09286792e-02 5.55494987e-02 9.19065547e-02 6.10954940e-02 2.32239548e-03 7.18197378e-01 3.12874854e+03 +7.79100000e-04 -1.65360702e-12 7.09286792e-02 5.55494987e-02 9.19065548e-02 6.10954940e-02 2.32239547e-03 7.18197378e-01 3.12874854e+03 +7.79200000e-04 -1.65360702e-12 7.09286792e-02 5.55494986e-02 9.19065548e-02 6.10954941e-02 2.32239547e-03 7.18197378e-01 3.12874854e+03 +7.79300000e-04 -1.65360702e-12 7.09286791e-02 5.55494986e-02 9.19065548e-02 6.10954941e-02 2.32239546e-03 7.18197378e-01 3.12874854e+03 +7.79400000e-04 -1.65360702e-12 7.09286791e-02 5.55494985e-02 9.19065549e-02 6.10954942e-02 2.32239545e-03 7.18197378e-01 3.12874854e+03 +7.79500000e-04 -1.65360702e-12 7.09286791e-02 5.55494985e-02 9.19065549e-02 6.10954942e-02 2.32239545e-03 7.18197378e-01 3.12874854e+03 +7.79600000e-04 -1.65360702e-12 7.09286791e-02 5.55494984e-02 9.19065549e-02 6.10954943e-02 2.32239544e-03 7.18197378e-01 3.12874854e+03 +7.79700000e-04 -1.65360702e-12 7.09286790e-02 5.55494984e-02 9.19065550e-02 6.10954943e-02 2.32239544e-03 7.18197378e-01 3.12874854e+03 +7.79800000e-04 -1.65360702e-12 7.09286790e-02 5.55494983e-02 9.19065550e-02 6.10954944e-02 2.32239543e-03 7.18197378e-01 3.12874854e+03 +7.79900000e-04 -1.65360702e-12 7.09286790e-02 5.55494983e-02 9.19065550e-02 6.10954944e-02 2.32239543e-03 7.18197378e-01 3.12874854e+03 +7.80000000e-04 -1.65360702e-12 7.09286790e-02 5.55494982e-02 9.19065551e-02 6.10954945e-02 2.32239542e-03 7.18197378e-01 3.12874854e+03 +7.80100000e-04 -1.65360702e-12 7.09286789e-02 5.55494982e-02 9.19065551e-02 6.10954945e-02 2.32239541e-03 7.18197378e-01 3.12874854e+03 +7.80200000e-04 -1.65360702e-12 7.09286789e-02 5.55494981e-02 9.19065551e-02 6.10954946e-02 2.32239541e-03 7.18197378e-01 3.12874854e+03 +7.80300000e-04 -1.65360702e-12 7.09286789e-02 5.55494981e-02 9.19065552e-02 6.10954947e-02 2.32239540e-03 7.18197378e-01 3.12874854e+03 +7.80400000e-04 -1.65360702e-12 7.09286788e-02 5.55494980e-02 9.19065552e-02 6.10954947e-02 2.32239540e-03 7.18197378e-01 3.12874854e+03 +7.80500000e-04 -1.65360702e-12 7.09286788e-02 5.55494980e-02 9.19065552e-02 6.10954948e-02 2.32239539e-03 7.18197378e-01 3.12874854e+03 +7.80600000e-04 -1.65360702e-12 7.09286788e-02 5.55494979e-02 9.19065553e-02 6.10954948e-02 2.32239539e-03 7.18197378e-01 3.12874854e+03 +7.80700000e-04 -1.65360702e-12 7.09286788e-02 5.55494979e-02 9.19065553e-02 6.10954949e-02 2.32239538e-03 7.18197378e-01 3.12874854e+03 +7.80800000e-04 -1.65360702e-12 7.09286787e-02 5.55494978e-02 9.19065553e-02 6.10954949e-02 2.32239537e-03 7.18197378e-01 3.12874854e+03 +7.80900000e-04 -1.65360702e-12 7.09286787e-02 5.55494978e-02 9.19065553e-02 6.10954950e-02 2.32239537e-03 7.18197378e-01 3.12874854e+03 +7.81000000e-04 -1.65360702e-12 7.09286787e-02 5.55494977e-02 9.19065554e-02 6.10954950e-02 2.32239536e-03 7.18197378e-01 3.12874854e+03 +7.81100000e-04 -1.65360702e-12 7.09286787e-02 5.55494977e-02 9.19065554e-02 6.10954951e-02 2.32239536e-03 7.18197378e-01 3.12874854e+03 +7.81200000e-04 -1.65360702e-12 7.09286786e-02 5.55494976e-02 9.19065554e-02 6.10954951e-02 2.32239535e-03 7.18197378e-01 3.12874854e+03 +7.81300000e-04 -1.65360702e-12 7.09286786e-02 5.55494976e-02 9.19065555e-02 6.10954952e-02 2.32239535e-03 7.18197378e-01 3.12874854e+03 +7.81400000e-04 -1.65360702e-12 7.09286786e-02 5.55494975e-02 9.19065555e-02 6.10954952e-02 2.32239534e-03 7.18197378e-01 3.12874854e+03 +7.81500000e-04 -1.65360702e-12 7.09286785e-02 5.55494975e-02 9.19065555e-02 6.10954953e-02 2.32239533e-03 7.18197378e-01 3.12874854e+03 +7.81600000e-04 -1.65360702e-12 7.09286785e-02 5.55494974e-02 9.19065556e-02 6.10954953e-02 2.32239533e-03 7.18197378e-01 3.12874854e+03 +7.81700000e-04 -1.65360702e-12 7.09286785e-02 5.55494974e-02 9.19065556e-02 6.10954954e-02 2.32239532e-03 7.18197378e-01 3.12874854e+03 +7.81800000e-04 -1.65360702e-12 7.09286785e-02 5.55494973e-02 9.19065556e-02 6.10954954e-02 2.32239532e-03 7.18197378e-01 3.12874854e+03 +7.81900000e-04 -1.65360702e-12 7.09286784e-02 5.55494973e-02 9.19065557e-02 6.10954955e-02 2.32239531e-03 7.18197378e-01 3.12874854e+03 +7.82000000e-04 -1.65360702e-12 7.09286784e-02 5.55494972e-02 9.19065557e-02 6.10954955e-02 2.32239531e-03 7.18197378e-01 3.12874854e+03 +7.82100000e-04 -1.65360702e-12 7.09286784e-02 5.55494972e-02 9.19065557e-02 6.10954956e-02 2.32239530e-03 7.18197378e-01 3.12874854e+03 +7.82200000e-04 -1.65360702e-12 7.09286784e-02 5.55494971e-02 9.19065557e-02 6.10954956e-02 2.32239530e-03 7.18197378e-01 3.12874854e+03 +7.82300000e-04 -1.65360702e-12 7.09286783e-02 5.55494971e-02 9.19065558e-02 6.10954956e-02 2.32239529e-03 7.18197378e-01 3.12874854e+03 +7.82400000e-04 -1.65360702e-12 7.09286783e-02 5.55494970e-02 9.19065558e-02 6.10954957e-02 2.32239529e-03 7.18197378e-01 3.12874854e+03 +7.82500000e-04 -1.65360702e-12 7.09286783e-02 5.55494970e-02 9.19065558e-02 6.10954957e-02 2.32239528e-03 7.18197378e-01 3.12874854e+03 +7.82600000e-04 -1.65360702e-12 7.09286783e-02 5.55494970e-02 9.19065559e-02 6.10954958e-02 2.32239527e-03 7.18197378e-01 3.12874854e+03 +7.82700000e-04 -1.65360702e-12 7.09286782e-02 5.55494969e-02 9.19065559e-02 6.10954958e-02 2.32239527e-03 7.18197378e-01 3.12874854e+03 +7.82800000e-04 -1.65360702e-12 7.09286782e-02 5.55494969e-02 9.19065559e-02 6.10954959e-02 2.32239526e-03 7.18197378e-01 3.12874854e+03 +7.82900000e-04 -1.65360702e-12 7.09286782e-02 5.55494968e-02 9.19065560e-02 6.10954959e-02 2.32239526e-03 7.18197378e-01 3.12874854e+03 +7.83000000e-04 -1.65360702e-12 7.09286782e-02 5.55494968e-02 9.19065560e-02 6.10954960e-02 2.32239525e-03 7.18197378e-01 3.12874856e+03 +7.83100000e-04 -1.65360702e-12 7.09286781e-02 5.55494967e-02 9.19065560e-02 6.10954960e-02 2.32239525e-03 7.18197378e-01 3.12874856e+03 +7.83200000e-04 -1.65360702e-12 7.09286781e-02 5.55494967e-02 9.19065560e-02 6.10954961e-02 2.32239524e-03 7.18197378e-01 3.12874856e+03 +7.83300000e-04 -1.65360702e-12 7.09286781e-02 5.55494966e-02 9.19065561e-02 6.10954961e-02 2.32239524e-03 7.18197378e-01 3.12874856e+03 +7.83400000e-04 -1.65360702e-12 7.09286781e-02 5.55494966e-02 9.19065561e-02 6.10954962e-02 2.32239523e-03 7.18197378e-01 3.12874856e+03 +7.83500000e-04 -1.65360702e-12 7.09286780e-02 5.55494965e-02 9.19065561e-02 6.10954962e-02 2.32239523e-03 7.18197378e-01 3.12874856e+03 +7.83600000e-04 -1.65360702e-12 7.09286780e-02 5.55494965e-02 9.19065562e-02 6.10954963e-02 2.32239522e-03 7.18197378e-01 3.12874856e+03 +7.83700000e-04 -1.65360702e-12 7.09286780e-02 5.55494964e-02 9.19065562e-02 6.10954963e-02 2.32239522e-03 7.18197378e-01 3.12874856e+03 +7.83800000e-04 -1.65360702e-12 7.09286780e-02 5.55494964e-02 9.19065562e-02 6.10954964e-02 2.32239521e-03 7.18197378e-01 3.12874856e+03 +7.83900000e-04 -1.65360702e-12 7.09286779e-02 5.55494964e-02 9.19065563e-02 6.10954964e-02 2.32239521e-03 7.18197378e-01 3.12874856e+03 +7.84000000e-04 -1.65360702e-12 7.09286779e-02 5.55494963e-02 9.19065563e-02 6.10954965e-02 2.32239520e-03 7.18197378e-01 3.12874856e+03 +7.84100000e-04 -1.65360702e-12 7.09286779e-02 5.55494963e-02 9.19065563e-02 6.10954965e-02 2.32239520e-03 7.18197378e-01 3.12874856e+03 +7.84200000e-04 -1.65360702e-12 7.09286779e-02 5.55494962e-02 9.19065563e-02 6.10954966e-02 2.32239519e-03 7.18197378e-01 3.12874856e+03 +7.84300000e-04 -1.65360702e-12 7.09286778e-02 5.55494962e-02 9.19065564e-02 6.10954966e-02 2.32239518e-03 7.18197378e-01 3.12874856e+03 +7.84400000e-04 -1.65360702e-12 7.09286778e-02 5.55494961e-02 9.19065564e-02 6.10954966e-02 2.32239518e-03 7.18197378e-01 3.12874856e+03 +7.84500000e-04 -1.65360702e-12 7.09286778e-02 5.55494961e-02 9.19065564e-02 6.10954967e-02 2.32239517e-03 7.18197378e-01 3.12874856e+03 +7.84600000e-04 -1.65360702e-12 7.09286778e-02 5.55494960e-02 9.19065565e-02 6.10954967e-02 2.32239517e-03 7.18197378e-01 3.12874856e+03 +7.84700000e-04 -1.65360702e-12 7.09286777e-02 5.55494960e-02 9.19065565e-02 6.10954968e-02 2.32239516e-03 7.18197378e-01 3.12874856e+03 +7.84800000e-04 -1.65360702e-12 7.09286777e-02 5.55494959e-02 9.19065565e-02 6.10954968e-02 2.32239516e-03 7.18197378e-01 3.12874856e+03 +7.84900000e-04 -1.65360702e-12 7.09286777e-02 5.55494959e-02 9.19065565e-02 6.10954969e-02 2.32239515e-03 7.18197378e-01 3.12874856e+03 +7.85000000e-04 -1.65360702e-12 7.09286777e-02 5.55494959e-02 9.19065566e-02 6.10954969e-02 2.32239515e-03 7.18197378e-01 3.12874856e+03 +7.85100000e-04 -1.65360702e-12 7.09286776e-02 5.55494958e-02 9.19065566e-02 6.10954970e-02 2.32239514e-03 7.18197378e-01 3.12874856e+03 +7.85200000e-04 -1.65360702e-12 7.09286776e-02 5.55494958e-02 9.19065566e-02 6.10954970e-02 2.32239514e-03 7.18197378e-01 3.12874856e+03 +7.85300000e-04 -1.65360702e-12 7.09286776e-02 5.55494957e-02 9.19065566e-02 6.10954971e-02 2.32239513e-03 7.18197378e-01 3.12874856e+03 +7.85400000e-04 -1.65360702e-12 7.09286776e-02 5.55494957e-02 9.19065567e-02 6.10954971e-02 2.32239513e-03 7.18197378e-01 3.12874856e+03 +7.85500000e-04 -1.65360702e-12 7.09286775e-02 5.55494956e-02 9.19065567e-02 6.10954971e-02 2.32239512e-03 7.18197378e-01 3.12874856e+03 +7.85600000e-04 -1.65360702e-12 7.09286775e-02 5.55494956e-02 9.19065567e-02 6.10954972e-02 2.32239512e-03 7.18197378e-01 3.12874856e+03 +7.85700000e-04 -1.65360702e-12 7.09286775e-02 5.55494956e-02 9.19065568e-02 6.10954972e-02 2.32239511e-03 7.18197378e-01 3.12874856e+03 +7.85800000e-04 -1.65360702e-12 7.09286775e-02 5.55494955e-02 9.19065568e-02 6.10954973e-02 2.32239511e-03 7.18197378e-01 3.12874856e+03 +7.85900000e-04 -1.65360702e-12 7.09286774e-02 5.55494955e-02 9.19065568e-02 6.10954973e-02 2.32239510e-03 7.18197378e-01 3.12874856e+03 +7.86000000e-04 -1.65360702e-12 7.09286774e-02 5.55494954e-02 9.19065568e-02 6.10954974e-02 2.32239510e-03 7.18197378e-01 3.12874856e+03 +7.86100000e-04 -1.65360702e-12 7.09286774e-02 5.55494954e-02 9.19065569e-02 6.10954974e-02 2.32239509e-03 7.18197378e-01 3.12874856e+03 +7.86200000e-04 -1.65360702e-12 7.09286774e-02 5.55494953e-02 9.19065569e-02 6.10954975e-02 2.32239509e-03 7.18197378e-01 3.12874856e+03 +7.86300000e-04 -1.65360702e-12 7.09286773e-02 5.55494953e-02 9.19065569e-02 6.10954975e-02 2.32239508e-03 7.18197378e-01 3.12874856e+03 +7.86400000e-04 -1.65360702e-12 7.09286773e-02 5.55494952e-02 9.19065570e-02 6.10954975e-02 2.32239508e-03 7.18197378e-01 3.12874856e+03 +7.86500000e-04 -1.65360702e-12 7.09286773e-02 5.55494952e-02 9.19065570e-02 6.10954976e-02 2.32239507e-03 7.18197378e-01 3.12874856e+03 +7.86600000e-04 -1.65360702e-12 7.09286773e-02 5.55494952e-02 9.19065570e-02 6.10954976e-02 2.32239507e-03 7.18197378e-01 3.12874856e+03 +7.86700000e-04 -1.65360702e-12 7.09286773e-02 5.55494951e-02 9.19065570e-02 6.10954977e-02 2.32239506e-03 7.18197378e-01 3.12874856e+03 +7.86800000e-04 -1.65360702e-12 7.09286772e-02 5.55494951e-02 9.19065571e-02 6.10954977e-02 2.32239506e-03 7.18197378e-01 3.12874856e+03 +7.86900000e-04 -1.65360702e-12 7.09286772e-02 5.55494950e-02 9.19065571e-02 6.10954978e-02 2.32239505e-03 7.18197378e-01 3.12874856e+03 +7.87000000e-04 -1.65360702e-12 7.09286772e-02 5.55494950e-02 9.19065571e-02 6.10954978e-02 2.32239505e-03 7.18197378e-01 3.12874856e+03 +7.87100000e-04 -1.65360702e-12 7.09286772e-02 5.55494950e-02 9.19065571e-02 6.10954978e-02 2.32239505e-03 7.18197378e-01 3.12874856e+03 +7.87200000e-04 -1.65360702e-12 7.09286771e-02 5.55494949e-02 9.19065572e-02 6.10954979e-02 2.32239504e-03 7.18197378e-01 3.12874856e+03 +7.87300000e-04 -1.65360702e-12 7.09286771e-02 5.55494949e-02 9.19065572e-02 6.10954979e-02 2.32239504e-03 7.18197378e-01 3.12874856e+03 +7.87400000e-04 -1.65360702e-12 7.09286771e-02 5.55494948e-02 9.19065572e-02 6.10954980e-02 2.32239503e-03 7.18197378e-01 3.12874856e+03 +7.87500000e-04 -1.65360702e-12 7.09286771e-02 5.55494948e-02 9.19065572e-02 6.10954980e-02 2.32239503e-03 7.18197378e-01 3.12874856e+03 +7.87600000e-04 -1.65360702e-12 7.09286770e-02 5.55494947e-02 9.19065573e-02 6.10954981e-02 2.32239502e-03 7.18197378e-01 3.12874856e+03 +7.87700000e-04 -1.65360702e-12 7.09286770e-02 5.55494947e-02 9.19065573e-02 6.10954981e-02 2.32239502e-03 7.18197378e-01 3.12874856e+03 +7.87800000e-04 -1.65360702e-12 7.09286770e-02 5.55494947e-02 9.19065573e-02 6.10954981e-02 2.32239501e-03 7.18197378e-01 3.12874856e+03 +7.87900000e-04 -1.65360702e-12 7.09286770e-02 5.55494946e-02 9.19065574e-02 6.10954982e-02 2.32239501e-03 7.18197378e-01 3.12874856e+03 +7.88000000e-04 -1.65360702e-12 7.09286770e-02 5.55494946e-02 9.19065574e-02 6.10954982e-02 2.32239500e-03 7.18197378e-01 3.12874856e+03 +7.88100000e-04 -1.65360702e-12 7.09286769e-02 5.55494945e-02 9.19065574e-02 6.10954983e-02 2.32239500e-03 7.18197378e-01 3.12874856e+03 +7.88200000e-04 -1.65360702e-12 7.09286769e-02 5.55494945e-02 9.19065574e-02 6.10954983e-02 2.32239499e-03 7.18197378e-01 3.12874856e+03 +7.88300000e-04 -1.65360702e-12 7.09286769e-02 5.55494945e-02 9.19065575e-02 6.10954984e-02 2.32239499e-03 7.18197378e-01 3.12874856e+03 +7.88400000e-04 -1.65360702e-12 7.09286769e-02 5.55494944e-02 9.19065575e-02 6.10954984e-02 2.32239498e-03 7.18197378e-01 3.12874856e+03 +7.88500000e-04 -1.65360702e-12 7.09286768e-02 5.55494944e-02 9.19065575e-02 6.10954984e-02 2.32239498e-03 7.18197378e-01 3.12874856e+03 +7.88600000e-04 -1.65360702e-12 7.09286768e-02 5.55494943e-02 9.19065575e-02 6.10954985e-02 2.32239497e-03 7.18197378e-01 3.12874856e+03 +7.88700000e-04 -1.65360702e-12 7.09286768e-02 5.55494943e-02 9.19065576e-02 6.10954985e-02 2.32239497e-03 7.18197378e-01 3.12874856e+03 +7.88800000e-04 -1.65360702e-12 7.09286768e-02 5.55494943e-02 9.19065576e-02 6.10954986e-02 2.32239497e-03 7.18197378e-01 3.12874856e+03 +7.88900000e-04 -1.65360702e-12 7.09286768e-02 5.55494942e-02 9.19065576e-02 6.10954986e-02 2.32239496e-03 7.18197378e-01 3.12874856e+03 +7.89000000e-04 -1.65360702e-12 7.09286767e-02 5.55494942e-02 9.19065576e-02 6.10954986e-02 2.32239496e-03 7.18197378e-01 3.12874856e+03 +7.89100000e-04 -1.65360702e-12 7.09286767e-02 5.55494941e-02 9.19065577e-02 6.10954987e-02 2.32239495e-03 7.18197378e-01 3.12874856e+03 +7.89200000e-04 -1.65360702e-12 7.09286767e-02 5.55494941e-02 9.19065577e-02 6.10954987e-02 2.32239495e-03 7.18197378e-01 3.12874856e+03 +7.89300000e-04 -1.65360702e-12 7.09286767e-02 5.55494941e-02 9.19065577e-02 6.10954988e-02 2.32239494e-03 7.18197378e-01 3.12874856e+03 +7.89400000e-04 -1.65360702e-12 7.09286766e-02 5.55494940e-02 9.19065577e-02 6.10954988e-02 2.32239494e-03 7.18197378e-01 3.12874856e+03 +7.89500000e-04 -1.65360702e-12 7.09286766e-02 5.55494940e-02 9.19065578e-02 6.10954988e-02 2.32239493e-03 7.18197378e-01 3.12874856e+03 +7.89600000e-04 -1.65360702e-12 7.09286766e-02 5.55494939e-02 9.19065578e-02 6.10954989e-02 2.32239493e-03 7.18197378e-01 3.12874856e+03 +7.89700000e-04 -1.65360702e-12 7.09286766e-02 5.55494939e-02 9.19065578e-02 6.10954989e-02 2.32239492e-03 7.18197378e-01 3.12874856e+03 +7.89800000e-04 -1.65360702e-12 7.09286766e-02 5.55494939e-02 9.19065578e-02 6.10954990e-02 2.32239492e-03 7.18197378e-01 3.12874856e+03 +7.89900000e-04 -1.65360702e-12 7.09286765e-02 5.55494938e-02 9.19065579e-02 6.10954990e-02 2.32239492e-03 7.18197378e-01 3.12874856e+03 +7.90000000e-04 -1.65360702e-12 7.09286765e-02 5.55494938e-02 9.19065579e-02 6.10954990e-02 2.32239491e-03 7.18197378e-01 3.12874856e+03 +7.90100000e-04 -1.65360702e-12 7.09286765e-02 5.55494937e-02 9.19065579e-02 6.10954991e-02 2.32239491e-03 7.18197378e-01 3.12874856e+03 +7.90200000e-04 -1.65360702e-12 7.09286765e-02 5.55494937e-02 9.19065579e-02 6.10954991e-02 2.32239490e-03 7.18197378e-01 3.12874856e+03 +7.90300000e-04 -1.65360702e-12 7.09286765e-02 5.55494937e-02 9.19065580e-02 6.10954992e-02 2.32239490e-03 7.18197378e-01 3.12874856e+03 +7.90400000e-04 -1.65360702e-12 7.09286764e-02 5.55494936e-02 9.19065580e-02 6.10954992e-02 2.32239489e-03 7.18197378e-01 3.12874856e+03 +7.90500000e-04 -1.65360702e-12 7.09286764e-02 5.55494936e-02 9.19065580e-02 6.10954992e-02 2.32239489e-03 7.18197378e-01 3.12874856e+03 +7.90600000e-04 -1.65360702e-12 7.09286764e-02 5.55494936e-02 9.19065580e-02 6.10954993e-02 2.32239488e-03 7.18197378e-01 3.12874856e+03 +7.90700000e-04 -1.65360702e-12 7.09286764e-02 5.55494935e-02 9.19065581e-02 6.10954993e-02 2.32239488e-03 7.18197378e-01 3.12874856e+03 +7.90800000e-04 -1.65360702e-12 7.09286764e-02 5.55494935e-02 9.19065581e-02 6.10954994e-02 2.32239488e-03 7.18197378e-01 3.12874856e+03 +7.90900000e-04 -1.65360702e-12 7.09286763e-02 5.55494934e-02 9.19065581e-02 6.10954994e-02 2.32239487e-03 7.18197378e-01 3.12874856e+03 +7.91000000e-04 -1.65360702e-12 7.09286763e-02 5.55494934e-02 9.19065581e-02 6.10954994e-02 2.32239487e-03 7.18197378e-01 3.12874856e+03 +7.91100000e-04 -1.65360702e-12 7.09286763e-02 5.55494934e-02 9.19065582e-02 6.10954995e-02 2.32239486e-03 7.18197378e-01 3.12874858e+03 +7.91200000e-04 -1.65360702e-12 7.09286763e-02 5.55494933e-02 9.19065582e-02 6.10954995e-02 2.32239486e-03 7.18197378e-01 3.12874858e+03 +7.91300000e-04 -1.65360702e-12 7.09286762e-02 5.55494933e-02 9.19065582e-02 6.10954996e-02 2.32239485e-03 7.18197378e-01 3.12874858e+03 +7.91400000e-04 -1.65360702e-12 7.09286762e-02 5.55494933e-02 9.19065582e-02 6.10954996e-02 2.32239485e-03 7.18197378e-01 3.12874858e+03 +7.91500000e-04 -1.65360702e-12 7.09286762e-02 5.55494932e-02 9.19065582e-02 6.10954996e-02 2.32239484e-03 7.18197378e-01 3.12874858e+03 +7.91600000e-04 -1.65360702e-12 7.09286762e-02 5.55494932e-02 9.19065583e-02 6.10954997e-02 2.32239484e-03 7.18197378e-01 3.12874858e+03 +7.91700000e-04 -1.65360702e-12 7.09286762e-02 5.55494931e-02 9.19065583e-02 6.10954997e-02 2.32239484e-03 7.18197378e-01 3.12874858e+03 +7.91800000e-04 -1.65360702e-12 7.09286761e-02 5.55494931e-02 9.19065583e-02 6.10954998e-02 2.32239483e-03 7.18197378e-01 3.12874858e+03 +7.91900000e-04 -1.65360702e-12 7.09286761e-02 5.55494931e-02 9.19065583e-02 6.10954998e-02 2.32239483e-03 7.18197378e-01 3.12874858e+03 +7.92000000e-04 -1.65360702e-12 7.09286761e-02 5.55494930e-02 9.19065584e-02 6.10954998e-02 2.32239482e-03 7.18197378e-01 3.12874858e+03 +7.92100000e-04 -1.65360702e-12 7.09286761e-02 5.55494930e-02 9.19065584e-02 6.10954999e-02 2.32239482e-03 7.18197378e-01 3.12874858e+03 +7.92200000e-04 -1.65360702e-12 7.09286761e-02 5.55494930e-02 9.19065584e-02 6.10954999e-02 2.32239482e-03 7.18197378e-01 3.12874858e+03 +7.92300000e-04 -1.65360702e-12 7.09286760e-02 5.55494929e-02 9.19065584e-02 6.10954999e-02 2.32239481e-03 7.18197378e-01 3.12874858e+03 +7.92400000e-04 -1.65360702e-12 7.09286760e-02 5.55494929e-02 9.19065585e-02 6.10955000e-02 2.32239481e-03 7.18197378e-01 3.12874858e+03 +7.92500000e-04 -1.65360702e-12 7.09286760e-02 5.55494928e-02 9.19065585e-02 6.10955000e-02 2.32239480e-03 7.18197378e-01 3.12874858e+03 +7.92600000e-04 -1.65360702e-12 7.09286760e-02 5.55494928e-02 9.19065585e-02 6.10955001e-02 2.32239480e-03 7.18197378e-01 3.12874858e+03 +7.92700000e-04 -1.65360702e-12 7.09286760e-02 5.55494928e-02 9.19065585e-02 6.10955001e-02 2.32239479e-03 7.18197378e-01 3.12874858e+03 +7.92800000e-04 -1.65360702e-12 7.09286759e-02 5.55494927e-02 9.19065586e-02 6.10955001e-02 2.32239479e-03 7.18197378e-01 3.12874858e+03 +7.92900000e-04 -1.65360702e-12 7.09286759e-02 5.55494927e-02 9.19065586e-02 6.10955002e-02 2.32239479e-03 7.18197378e-01 3.12874858e+03 +7.93000000e-04 -1.65360702e-12 7.09286759e-02 5.55494927e-02 9.19065586e-02 6.10955002e-02 2.32239478e-03 7.18197378e-01 3.12874858e+03 +7.93100000e-04 -1.65360702e-12 7.09286759e-02 5.55494926e-02 9.19065586e-02 6.10955002e-02 2.32239478e-03 7.18197378e-01 3.12874858e+03 +7.93200000e-04 -1.65360702e-12 7.09286759e-02 5.55494926e-02 9.19065586e-02 6.10955003e-02 2.32239477e-03 7.18197378e-01 3.12874858e+03 +7.93300000e-04 -1.65360702e-12 7.09286758e-02 5.55494926e-02 9.19065587e-02 6.10955003e-02 2.32239477e-03 7.18197378e-01 3.12874858e+03 +7.93400000e-04 -1.65360702e-12 7.09286758e-02 5.55494925e-02 9.19065587e-02 6.10955003e-02 2.32239477e-03 7.18197378e-01 3.12874858e+03 +7.93500000e-04 -1.65360702e-12 7.09286758e-02 5.55494925e-02 9.19065587e-02 6.10955004e-02 2.32239476e-03 7.18197378e-01 3.12874858e+03 +7.93600000e-04 -1.65360702e-12 7.09286758e-02 5.55494924e-02 9.19065587e-02 6.10955004e-02 2.32239476e-03 7.18197378e-01 3.12874858e+03 +7.93700000e-04 -1.65360702e-12 7.09286758e-02 5.55494924e-02 9.19065588e-02 6.10955005e-02 2.32239475e-03 7.18197378e-01 3.12874858e+03 +7.93800000e-04 -1.65360702e-12 7.09286757e-02 5.55494924e-02 9.19065588e-02 6.10955005e-02 2.32239475e-03 7.18197378e-01 3.12874858e+03 +7.93900000e-04 -1.65360702e-12 7.09286757e-02 5.55494923e-02 9.19065588e-02 6.10955005e-02 2.32239474e-03 7.18197378e-01 3.12874858e+03 +7.94000000e-04 -1.65360702e-12 7.09286757e-02 5.55494923e-02 9.19065588e-02 6.10955006e-02 2.32239474e-03 7.18197378e-01 3.12874858e+03 +7.94100000e-04 -1.65360702e-12 7.09286757e-02 5.55494923e-02 9.19065588e-02 6.10955006e-02 2.32239474e-03 7.18197378e-01 3.12874858e+03 +7.94200000e-04 -1.65360702e-12 7.09286757e-02 5.55494922e-02 9.19065589e-02 6.10955006e-02 2.32239473e-03 7.18197378e-01 3.12874858e+03 +7.94300000e-04 -1.65360702e-12 7.09286757e-02 5.55494922e-02 9.19065589e-02 6.10955007e-02 2.32239473e-03 7.18197378e-01 3.12874858e+03 +7.94400000e-04 -1.65360702e-12 7.09286756e-02 5.55494922e-02 9.19065589e-02 6.10955007e-02 2.32239472e-03 7.18197378e-01 3.12874858e+03 +7.94500000e-04 -1.65360702e-12 7.09286756e-02 5.55494921e-02 9.19065589e-02 6.10955007e-02 2.32239472e-03 7.18197378e-01 3.12874858e+03 +7.94600000e-04 -1.65360702e-12 7.09286756e-02 5.55494921e-02 9.19065590e-02 6.10955008e-02 2.32239472e-03 7.18197378e-01 3.12874858e+03 +7.94700000e-04 -1.65360702e-12 7.09286756e-02 5.55494921e-02 9.19065590e-02 6.10955008e-02 2.32239471e-03 7.18197378e-01 3.12874858e+03 +7.94800000e-04 -1.65360702e-12 7.09286756e-02 5.55494920e-02 9.19065590e-02 6.10955009e-02 2.32239471e-03 7.18197378e-01 3.12874858e+03 +7.94900000e-04 -1.65360702e-12 7.09286755e-02 5.55494920e-02 9.19065590e-02 6.10955009e-02 2.32239470e-03 7.18197378e-01 3.12874858e+03 +7.95000000e-04 -1.65360702e-12 7.09286755e-02 5.55494920e-02 9.19065590e-02 6.10955009e-02 2.32239470e-03 7.18197378e-01 3.12874858e+03 +7.95100000e-04 -1.65360702e-12 7.09286755e-02 5.55494919e-02 9.19065591e-02 6.10955010e-02 2.32239470e-03 7.18197378e-01 3.12874858e+03 +7.95200000e-04 -1.65360702e-12 7.09286755e-02 5.55494919e-02 9.19065591e-02 6.10955010e-02 2.32239469e-03 7.18197378e-01 3.12874858e+03 +7.95300000e-04 -1.65360702e-12 7.09286755e-02 5.55494919e-02 9.19065591e-02 6.10955010e-02 2.32239469e-03 7.18197378e-01 3.12874858e+03 +7.95400000e-04 -1.65360702e-12 7.09286754e-02 5.55494918e-02 9.19065591e-02 6.10955011e-02 2.32239469e-03 7.18197378e-01 3.12874858e+03 +7.95500000e-04 -1.65360702e-12 7.09286754e-02 5.55494918e-02 9.19065592e-02 6.10955011e-02 2.32239468e-03 7.18197378e-01 3.12874858e+03 +7.95600000e-04 -1.65360702e-12 7.09286754e-02 5.55494918e-02 9.19065592e-02 6.10955011e-02 2.32239468e-03 7.18197378e-01 3.12874858e+03 +7.95700000e-04 -1.65360702e-12 7.09286754e-02 5.55494917e-02 9.19065592e-02 6.10955012e-02 2.32239467e-03 7.18197378e-01 3.12874858e+03 +7.95800000e-04 -1.65360702e-12 7.09286754e-02 5.55494917e-02 9.19065592e-02 6.10955012e-02 2.32239467e-03 7.18197378e-01 3.12874858e+03 +7.95900000e-04 -1.65360702e-12 7.09286754e-02 5.55494917e-02 9.19065592e-02 6.10955012e-02 2.32239467e-03 7.18197378e-01 3.12874858e+03 +7.96000000e-04 -1.65360702e-12 7.09286753e-02 5.55494916e-02 9.19065593e-02 6.10955013e-02 2.32239466e-03 7.18197378e-01 3.12874858e+03 +7.96100000e-04 -1.65360702e-12 7.09286753e-02 5.55494916e-02 9.19065593e-02 6.10955013e-02 2.32239466e-03 7.18197378e-01 3.12874858e+03 +7.96200000e-04 -1.65360702e-12 7.09286753e-02 5.55494916e-02 9.19065593e-02 6.10955013e-02 2.32239465e-03 7.18197378e-01 3.12874858e+03 +7.96300000e-04 -1.65360702e-12 7.09286753e-02 5.55494915e-02 9.19065593e-02 6.10955014e-02 2.32239465e-03 7.18197378e-01 3.12874858e+03 +7.96400000e-04 -1.65360702e-12 7.09286753e-02 5.55494915e-02 9.19065593e-02 6.10955014e-02 2.32239465e-03 7.18197378e-01 3.12874858e+03 +7.96500000e-04 -1.65360702e-12 7.09286752e-02 5.55494915e-02 9.19065594e-02 6.10955014e-02 2.32239464e-03 7.18197378e-01 3.12874858e+03 +7.96600000e-04 -1.65360702e-12 7.09286752e-02 5.55494914e-02 9.19065594e-02 6.10955015e-02 2.32239464e-03 7.18197378e-01 3.12874858e+03 +7.96700000e-04 -1.65360702e-12 7.09286752e-02 5.55494914e-02 9.19065594e-02 6.10955015e-02 2.32239464e-03 7.18197378e-01 3.12874858e+03 +7.96800000e-04 -1.65360702e-12 7.09286752e-02 5.55494914e-02 9.19065594e-02 6.10955015e-02 2.32239463e-03 7.18197378e-01 3.12874858e+03 +7.96900000e-04 -1.65360702e-12 7.09286752e-02 5.55494913e-02 9.19065594e-02 6.10955016e-02 2.32239463e-03 7.18197378e-01 3.12874858e+03 +7.97000000e-04 -1.65360702e-12 7.09286752e-02 5.55494913e-02 9.19065595e-02 6.10955016e-02 2.32239462e-03 7.18197378e-01 3.12874858e+03 +7.97100000e-04 -1.65360702e-12 7.09286751e-02 5.55494913e-02 9.19065595e-02 6.10955016e-02 2.32239462e-03 7.18197378e-01 3.12874858e+03 +7.97200000e-04 -1.65360702e-12 7.09286751e-02 5.55494912e-02 9.19065595e-02 6.10955017e-02 2.32239462e-03 7.18197378e-01 3.12874858e+03 +7.97300000e-04 -1.65360702e-12 7.09286751e-02 5.55494912e-02 9.19065595e-02 6.10955017e-02 2.32239461e-03 7.18197378e-01 3.12874858e+03 +7.97400000e-04 -1.65360702e-12 7.09286751e-02 5.55494912e-02 9.19065596e-02 6.10955017e-02 2.32239461e-03 7.18197378e-01 3.12874858e+03 +7.97500000e-04 -1.65360702e-12 7.09286751e-02 5.55494911e-02 9.19065596e-02 6.10955018e-02 2.32239461e-03 7.18197378e-01 3.12874858e+03 +7.97600000e-04 -1.65360702e-12 7.09286750e-02 5.55494911e-02 9.19065596e-02 6.10955018e-02 2.32239460e-03 7.18197378e-01 3.12874858e+03 +7.97700000e-04 -1.65360702e-12 7.09286750e-02 5.55494911e-02 9.19065596e-02 6.10955018e-02 2.32239460e-03 7.18197378e-01 3.12874858e+03 +7.97800000e-04 -1.65360702e-12 7.09286750e-02 5.55494910e-02 9.19065596e-02 6.10955019e-02 2.32239459e-03 7.18197378e-01 3.12874858e+03 +7.97900000e-04 -1.65360702e-12 7.09286750e-02 5.55494910e-02 9.19065597e-02 6.10955019e-02 2.32239459e-03 7.18197378e-01 3.12874858e+03 +7.98000000e-04 -1.65360702e-12 7.09286750e-02 5.55494910e-02 9.19065597e-02 6.10955019e-02 2.32239459e-03 7.18197378e-01 3.12874858e+03 +7.98100000e-04 -1.65360702e-12 7.09286750e-02 5.55494909e-02 9.19065597e-02 6.10955020e-02 2.32239458e-03 7.18197378e-01 3.12874858e+03 +7.98200000e-04 -1.65360702e-12 7.09286749e-02 5.55494909e-02 9.19065597e-02 6.10955020e-02 2.32239458e-03 7.18197378e-01 3.12874858e+03 +7.98300000e-04 -1.65360702e-12 7.09286749e-02 5.55494909e-02 9.19065597e-02 6.10955020e-02 2.32239458e-03 7.18197378e-01 3.12874858e+03 +7.98400000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955021e-02 2.32239457e-03 7.18197378e-01 3.12874858e+03 +7.98500000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955021e-02 2.32239457e-03 7.18197378e-01 3.12874858e+03 +7.98600000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955021e-02 2.32239457e-03 7.18197378e-01 3.12874858e+03 +7.98700000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955022e-02 2.32239456e-03 7.18197378e-01 3.12874858e+03 +7.98800000e-04 -1.65360702e-12 7.09286748e-02 5.55494907e-02 9.19065598e-02 6.10955022e-02 2.32239456e-03 7.18197378e-01 3.12874858e+03 +7.98900000e-04 -1.65360702e-12 7.09286748e-02 5.55494907e-02 9.19065599e-02 6.10955022e-02 2.32239456e-03 7.18197378e-01 3.12874858e+03 +7.99000000e-04 -1.65360702e-12 7.09286748e-02 5.55494907e-02 9.19065599e-02 6.10955023e-02 2.32239455e-03 7.18197378e-01 3.12874858e+03 +7.99100000e-04 -1.65360702e-12 7.09286748e-02 5.55494906e-02 9.19065599e-02 6.10955023e-02 2.32239455e-03 7.18197378e-01 3.12874858e+03 +7.99200000e-04 -1.65360702e-12 7.09286748e-02 5.55494906e-02 9.19065599e-02 6.10955023e-02 2.32239454e-03 7.18197378e-01 3.12874860e+03 +7.99300000e-04 -1.65360702e-12 7.09286748e-02 5.55494906e-02 9.19065599e-02 6.10955024e-02 2.32239454e-03 7.18197378e-01 3.12874860e+03 +7.99400000e-04 -1.65360702e-12 7.09286747e-02 5.55494905e-02 9.19065599e-02 6.10955024e-02 2.32239454e-03 7.18197378e-01 3.12874860e+03 +7.99500000e-04 -1.65360702e-12 7.09286747e-02 5.55494905e-02 9.19065600e-02 6.10955024e-02 2.32239453e-03 7.18197378e-01 3.12874860e+03 +7.99600000e-04 -1.65360702e-12 7.09286747e-02 5.55494905e-02 9.19065600e-02 6.10955024e-02 2.32239453e-03 7.18197378e-01 3.12874860e+03 +7.99700000e-04 -1.65360702e-12 7.09286747e-02 5.55494904e-02 9.19065600e-02 6.10955025e-02 2.32239453e-03 7.18197378e-01 3.12874860e+03 +7.99800000e-04 -1.65360702e-12 7.09286747e-02 5.55494904e-02 9.19065600e-02 6.10955025e-02 2.32239452e-03 7.18197378e-01 3.12874860e+03 +7.99900000e-04 -1.65360702e-12 7.09286747e-02 5.55494904e-02 9.19065600e-02 6.10955025e-02 2.32239452e-03 7.18197378e-01 3.12874860e+03 +8.00000000e-04 -1.65360702e-12 7.09286746e-02 5.55494904e-02 9.19065601e-02 6.10955026e-02 2.32239452e-03 7.18197378e-01 3.12874860e+03 +8.00100000e-04 -1.65360702e-12 7.09286746e-02 5.55494903e-02 9.19065601e-02 6.10955026e-02 2.32239451e-03 7.18197378e-01 3.12874860e+03 +8.00200000e-04 -1.65360702e-12 7.09286746e-02 5.55494903e-02 9.19065601e-02 6.10955026e-02 2.32239451e-03 7.18197378e-01 3.12874860e+03 +8.00300000e-04 -1.65360702e-12 7.09286746e-02 5.55494903e-02 9.19065601e-02 6.10955027e-02 2.32239451e-03 7.18197378e-01 3.12874860e+03 +8.00400000e-04 -1.65360702e-12 7.09286746e-02 5.55494902e-02 9.19065601e-02 6.10955027e-02 2.32239450e-03 7.18197378e-01 3.12874860e+03 +8.00500000e-04 -1.65360702e-12 7.09286746e-02 5.55494902e-02 9.19065602e-02 6.10955027e-02 2.32239450e-03 7.18197378e-01 3.12874860e+03 +8.00600000e-04 -1.65360702e-12 7.09286745e-02 5.55494902e-02 9.19065602e-02 6.10955028e-02 2.32239450e-03 7.18197378e-01 3.12874860e+03 +8.00700000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065602e-02 6.10955028e-02 2.32239449e-03 7.18197378e-01 3.12874860e+03 +8.00800000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065602e-02 6.10955028e-02 2.32239449e-03 7.18197378e-01 3.12874860e+03 +8.00900000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065602e-02 6.10955028e-02 2.32239449e-03 7.18197378e-01 3.12874860e+03 +8.01000000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065603e-02 6.10955029e-02 2.32239448e-03 7.18197378e-01 3.12874860e+03 +8.01100000e-04 -1.65360702e-12 7.09286745e-02 5.55494900e-02 9.19065603e-02 6.10955029e-02 2.32239448e-03 7.18197378e-01 3.12874860e+03 +8.01200000e-04 -1.65360702e-12 7.09286744e-02 5.55494900e-02 9.19065603e-02 6.10955029e-02 2.32239448e-03 7.18197378e-01 3.12874860e+03 +8.01300000e-04 -1.65360702e-12 7.09286744e-02 5.55494900e-02 9.19065603e-02 6.10955030e-02 2.32239447e-03 7.18197378e-01 3.12874860e+03 +8.01400000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065603e-02 6.10955030e-02 2.32239447e-03 7.18197378e-01 3.12874860e+03 +8.01500000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065603e-02 6.10955030e-02 2.32239447e-03 7.18197378e-01 3.12874860e+03 +8.01600000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065604e-02 6.10955031e-02 2.32239446e-03 7.18197378e-01 3.12874860e+03 +8.01700000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065604e-02 6.10955031e-02 2.32239446e-03 7.18197378e-01 3.12874860e+03 +8.01800000e-04 -1.65360702e-12 7.09286743e-02 5.55494898e-02 9.19065604e-02 6.10955031e-02 2.32239446e-03 7.18197378e-01 3.12874860e+03 +8.01900000e-04 -1.65360702e-12 7.09286743e-02 5.55494898e-02 9.19065604e-02 6.10955031e-02 2.32239445e-03 7.18197378e-01 3.12874860e+03 +8.02000000e-04 -1.65360702e-12 7.09286743e-02 5.55494898e-02 9.19065604e-02 6.10955032e-02 2.32239445e-03 7.18197378e-01 3.12874860e+03 +8.02100000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955032e-02 2.32239445e-03 7.18197378e-01 3.12874860e+03 +8.02200000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955032e-02 2.32239444e-03 7.18197378e-01 3.12874860e+03 +8.02300000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955033e-02 2.32239444e-03 7.18197378e-01 3.12874860e+03 +8.02400000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955033e-02 2.32239444e-03 7.18197378e-01 3.12874860e+03 +8.02500000e-04 -1.65360702e-12 7.09286742e-02 5.55494896e-02 9.19065605e-02 6.10955033e-02 2.32239443e-03 7.18197378e-01 3.12874860e+03 +8.02600000e-04 -1.65360702e-12 7.09286742e-02 5.55494896e-02 9.19065605e-02 6.10955033e-02 2.32239443e-03 7.18197378e-01 3.12874860e+03 +8.02700000e-04 -1.65360702e-12 7.09286742e-02 5.55494896e-02 9.19065606e-02 6.10955034e-02 2.32239443e-03 7.18197378e-01 3.12874860e+03 +8.02800000e-04 -1.65360702e-12 7.09286742e-02 5.55494895e-02 9.19065606e-02 6.10955034e-02 2.32239442e-03 7.18197378e-01 3.12874860e+03 +8.02900000e-04 -1.65360702e-12 7.09286742e-02 5.55494895e-02 9.19065606e-02 6.10955034e-02 2.32239442e-03 7.18197378e-01 3.12874860e+03 +8.03000000e-04 -1.65360702e-12 7.09286742e-02 5.55494895e-02 9.19065606e-02 6.10955035e-02 2.32239442e-03 7.18197378e-01 3.12874860e+03 +8.03100000e-04 -1.65360702e-12 7.09286741e-02 5.55494895e-02 9.19065606e-02 6.10955035e-02 2.32239441e-03 7.18197378e-01 3.12874860e+03 +8.03200000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955035e-02 2.32239441e-03 7.18197378e-01 3.12874860e+03 +8.03300000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955035e-02 2.32239441e-03 7.18197378e-01 3.12874860e+03 +8.03400000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955036e-02 2.32239440e-03 7.18197378e-01 3.12874860e+03 +8.03500000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955036e-02 2.32239440e-03 7.18197378e-01 3.12874860e+03 +8.03600000e-04 -1.65360702e-12 7.09286741e-02 5.55494893e-02 9.19065607e-02 6.10955036e-02 2.32239440e-03 7.18197378e-01 3.12874860e+03 +8.03700000e-04 -1.65360702e-12 7.09286741e-02 5.55494893e-02 9.19065607e-02 6.10955037e-02 2.32239439e-03 7.18197378e-01 3.12874860e+03 +8.03800000e-04 -1.65360702e-12 7.09286740e-02 5.55494893e-02 9.19065608e-02 6.10955037e-02 2.32239439e-03 7.18197378e-01 3.12874860e+03 +8.03900000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955037e-02 2.32239439e-03 7.18197378e-01 3.12874860e+03 +8.04000000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955037e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 +8.04100000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955038e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 +8.04200000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955038e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 +8.04300000e-04 -1.65360702e-12 7.09286740e-02 5.55494891e-02 9.19065608e-02 6.10955038e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 +8.04400000e-04 -1.65360702e-12 7.09286740e-02 5.55494891e-02 9.19065609e-02 6.10955039e-02 2.32239437e-03 7.18197378e-01 3.12874860e+03 +8.04500000e-04 -1.65360702e-12 7.09286739e-02 5.55494891e-02 9.19065609e-02 6.10955039e-02 2.32239437e-03 7.18197378e-01 3.12874860e+03 +8.04600000e-04 -1.65360702e-12 7.09286739e-02 5.55494891e-02 9.19065609e-02 6.10955039e-02 2.32239437e-03 7.18197378e-01 3.12874860e+03 +8.04700000e-04 -1.65360702e-12 7.09286739e-02 5.55494890e-02 9.19065609e-02 6.10955039e-02 2.32239436e-03 7.18197378e-01 3.12874860e+03 +8.04800000e-04 -1.65360702e-12 7.09286739e-02 5.55494890e-02 9.19065609e-02 6.10955040e-02 2.32239436e-03 7.18197378e-01 3.12874860e+03 +8.04900000e-04 -1.65360702e-12 7.09286739e-02 5.55494890e-02 9.19065609e-02 6.10955040e-02 2.32239436e-03 7.18197378e-01 3.12874860e+03 +8.05000000e-04 -1.65360702e-12 7.09286739e-02 5.55494889e-02 9.19065610e-02 6.10955040e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 +8.05100000e-04 -1.65360702e-12 7.09286738e-02 5.55494889e-02 9.19065610e-02 6.10955040e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 +8.05200000e-04 -1.65360702e-12 7.09286738e-02 5.55494889e-02 9.19065610e-02 6.10955041e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 +8.05300000e-04 -1.65360702e-12 7.09286738e-02 5.55494889e-02 9.19065610e-02 6.10955041e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 +8.05400000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065610e-02 6.10955041e-02 2.32239434e-03 7.18197378e-01 3.12874860e+03 +8.05500000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065610e-02 6.10955042e-02 2.32239434e-03 7.18197378e-01 3.12874860e+03 +8.05600000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065611e-02 6.10955042e-02 2.32239434e-03 7.18197378e-01 3.12874860e+03 +8.05700000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065611e-02 6.10955042e-02 2.32239433e-03 7.18197378e-01 3.12874860e+03 +8.05800000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955042e-02 2.32239433e-03 7.18197378e-01 3.12874860e+03 +8.05900000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955043e-02 2.32239433e-03 7.18197378e-01 3.12874860e+03 +8.06000000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955043e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 +8.06100000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955043e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 +8.06200000e-04 -1.65360702e-12 7.09286737e-02 5.55494886e-02 9.19065612e-02 6.10955043e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 +8.06300000e-04 -1.65360702e-12 7.09286737e-02 5.55494886e-02 9.19065612e-02 6.10955044e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 +8.06400000e-04 -1.65360702e-12 7.09286737e-02 5.55494886e-02 9.19065612e-02 6.10955044e-02 2.32239431e-03 7.18197378e-01 3.12874860e+03 +8.06500000e-04 -1.65360702e-12 7.09286736e-02 5.55494886e-02 9.19065612e-02 6.10955044e-02 2.32239431e-03 7.18197378e-01 3.12874860e+03 +8.06600000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065612e-02 6.10955044e-02 2.32239431e-03 7.18197378e-01 3.12874860e+03 +8.06700000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065612e-02 6.10955045e-02 2.32239430e-03 7.18197378e-01 3.12874860e+03 +8.06800000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065613e-02 6.10955045e-02 2.32239430e-03 7.18197378e-01 3.12874860e+03 +8.06900000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065613e-02 6.10955045e-02 2.32239430e-03 7.18197378e-01 3.12874860e+03 +8.07000000e-04 -1.65360702e-12 7.09286736e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874860e+03 +8.07100000e-04 -1.65360702e-12 7.09286736e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874860e+03 +8.07200000e-04 -1.65360702e-12 7.09286736e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874861e+03 +8.07300000e-04 -1.65360702e-12 7.09286735e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874861e+03 +8.07400000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239428e-03 7.18197378e-01 3.12874861e+03 +8.07500000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239428e-03 7.18197378e-01 3.12874861e+03 +8.07600000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239428e-03 7.18197378e-01 3.12874861e+03 +8.07700000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 +8.07800000e-04 -1.65360702e-12 7.09286735e-02 5.55494882e-02 9.19065614e-02 6.10955048e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 +8.07900000e-04 -1.65360702e-12 7.09286735e-02 5.55494882e-02 9.19065614e-02 6.10955048e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 +8.08000000e-04 -1.65360702e-12 7.09286734e-02 5.55494882e-02 9.19065614e-02 6.10955048e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 +8.08100000e-04 -1.65360702e-12 7.09286734e-02 5.55494882e-02 9.19065615e-02 6.10955048e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 +8.08200000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 +8.08300000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 +8.08400000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 +8.08500000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239425e-03 7.18197378e-01 3.12874861e+03 +8.08600000e-04 -1.65360702e-12 7.09286734e-02 5.55494880e-02 9.19065615e-02 6.10955050e-02 2.32239425e-03 7.18197378e-01 3.12874861e+03 +8.08700000e-04 -1.65360702e-12 7.09286734e-02 5.55494880e-02 9.19065616e-02 6.10955050e-02 2.32239425e-03 7.18197378e-01 3.12874861e+03 +8.08800000e-04 -1.65360702e-12 7.09286733e-02 5.55494880e-02 9.19065616e-02 6.10955050e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 +8.08900000e-04 -1.65360702e-12 7.09286733e-02 5.55494880e-02 9.19065616e-02 6.10955050e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 +8.09000000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 +8.09100000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 +8.09200000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239423e-03 7.18197378e-01 3.12874861e+03 +8.09300000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239423e-03 7.18197378e-01 3.12874861e+03 +8.09400000e-04 -1.65360702e-12 7.09286733e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239423e-03 7.18197378e-01 3.12874861e+03 +8.09500000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 +8.09600000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 +8.09700000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 +8.09800000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 +8.09900000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065617e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 +8.10000000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065618e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 +8.10100000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065618e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 +8.10200000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065618e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 +8.10300000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 +8.10400000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 +8.10500000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 +8.10600000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 +8.10700000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239419e-03 7.18197378e-01 3.12874861e+03 +8.10800000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239419e-03 7.18197378e-01 3.12874861e+03 +8.10900000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239419e-03 7.18197378e-01 3.12874861e+03 +8.11000000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 +8.11100000e-04 -1.65360702e-12 7.09286730e-02 5.55494875e-02 9.19065619e-02 6.10955056e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 +8.11200000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065619e-02 6.10955056e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 +8.11300000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065619e-02 6.10955056e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 +8.11400000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065620e-02 6.10955056e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 +8.11500000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065620e-02 6.10955056e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 +8.11600000e-04 -1.65360702e-12 7.09286730e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 +8.11700000e-04 -1.65360702e-12 7.09286730e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 +8.11800000e-04 -1.65360702e-12 7.09286730e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 +8.11900000e-04 -1.65360702e-12 7.09286729e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 +8.12000000e-04 -1.65360702e-12 7.09286729e-02 5.55494873e-02 9.19065620e-02 6.10955058e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 +8.12100000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955058e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 +8.12200000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955058e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 +8.12300000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955058e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 +8.12400000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955059e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 +8.12500000e-04 -1.65360702e-12 7.09286729e-02 5.55494871e-02 9.19065621e-02 6.10955059e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 +8.12600000e-04 -1.65360702e-12 7.09286729e-02 5.55494871e-02 9.19065621e-02 6.10955059e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 +8.12700000e-04 -1.65360702e-12 7.09286728e-02 5.55494871e-02 9.19065621e-02 6.10955059e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 +8.12800000e-04 -1.65360702e-12 7.09286728e-02 5.55494871e-02 9.19065622e-02 6.10955059e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 +8.12900000e-04 -1.65360702e-12 7.09286728e-02 5.55494871e-02 9.19065622e-02 6.10955060e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 +8.13000000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955060e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 +8.13100000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955060e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 +8.13200000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955060e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 +8.13300000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955061e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 +8.13400000e-04 -1.65360702e-12 7.09286728e-02 5.55494869e-02 9.19065622e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 +8.13500000e-04 -1.65360702e-12 7.09286728e-02 5.55494869e-02 9.19065622e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 +8.13600000e-04 -1.65360702e-12 7.09286727e-02 5.55494869e-02 9.19065623e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 +8.13700000e-04 -1.65360702e-12 7.09286727e-02 5.55494869e-02 9.19065623e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 +8.13800000e-04 -1.65360702e-12 7.09286727e-02 5.55494869e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 +8.13900000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 +8.14000000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 +8.14100000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 +8.14200000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 +8.14300000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 +8.14400000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 +8.14500000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 +8.14600000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 +8.14700000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 +8.14800000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 +8.14900000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 +8.15000000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 +8.15100000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065625e-02 6.10955064e-02 2.32239408e-03 7.18197378e-01 3.12874861e+03 +8.15200000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065625e-02 6.10955065e-02 2.32239408e-03 7.18197378e-01 3.12874861e+03 +8.15300000e-04 -1.65360702e-12 7.09286725e-02 5.55494866e-02 9.19065625e-02 6.10955065e-02 2.32239408e-03 7.18197378e-01 3.12874862e+03 +8.15400000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955065e-02 2.32239408e-03 7.18197378e-01 3.12874862e+03 +8.15500000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955065e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 +8.15600000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955065e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 +8.15700000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955066e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 +8.15800000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065626e-02 6.10955066e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 +8.15900000e-04 -1.65360702e-12 7.09286725e-02 5.55494864e-02 9.19065626e-02 6.10955066e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 +8.16000000e-04 -1.65360702e-12 7.09286725e-02 5.55494864e-02 9.19065626e-02 6.10955066e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 +8.16100000e-04 -1.65360702e-12 7.09286725e-02 5.55494864e-02 9.19065626e-02 6.10955066e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 +8.16200000e-04 -1.65360702e-12 7.09286724e-02 5.55494864e-02 9.19065626e-02 6.10955067e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 +8.16300000e-04 -1.65360702e-12 7.09286724e-02 5.55494864e-02 9.19065626e-02 6.10955067e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 +8.16400000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065626e-02 6.10955067e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 +8.16500000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065626e-02 6.10955067e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 +8.16600000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065627e-02 6.10955067e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 +8.16700000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065627e-02 6.10955068e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 +8.16800000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 +8.16900000e-04 -1.65360702e-12 7.09286724e-02 5.55494862e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 +8.17000000e-04 -1.65360702e-12 7.09286724e-02 5.55494862e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 +8.17100000e-04 -1.65360702e-12 7.09286724e-02 5.55494862e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 +8.17200000e-04 -1.65360702e-12 7.09286723e-02 5.55494862e-02 9.19065627e-02 6.10955069e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 +8.17300000e-04 -1.65360702e-12 7.09286723e-02 5.55494862e-02 9.19065627e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 +8.17400000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 +8.17500000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 +8.17600000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 +8.17700000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 +8.17800000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 +8.17900000e-04 -1.65360702e-12 7.09286723e-02 5.55494860e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 +8.18000000e-04 -1.65360702e-12 7.09286723e-02 5.55494860e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 +8.18100000e-04 -1.65360702e-12 7.09286722e-02 5.55494860e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 +8.18200000e-04 -1.65360702e-12 7.09286722e-02 5.55494860e-02 9.19065628e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 +8.18300000e-04 -1.65360702e-12 7.09286722e-02 5.55494860e-02 9.19065629e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 +8.18400000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 +8.18500000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 +8.18600000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955071e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 +8.18700000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 +8.18800000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 +8.18900000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 +8.19000000e-04 -1.65360702e-12 7.09286722e-02 5.55494858e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 +8.19100000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955072e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 +8.19200000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 +8.19300000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 +8.19400000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 +8.19500000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 +8.19600000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955073e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 +8.19700000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 +8.19800000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 +8.19900000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 +8.20000000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065631e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 +8.20100000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955074e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 +8.20200000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955074e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 +8.20300000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955075e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 +8.20400000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955075e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 +8.20500000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955075e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 +8.20600000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065631e-02 6.10955075e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 +8.20700000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065631e-02 6.10955075e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 +8.20800000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 +8.20900000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 +8.21000000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 +8.21100000e-04 -1.65360702e-12 7.09286719e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 +8.21200000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 +8.21300000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 +8.21400000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955077e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 +8.21500000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 +8.21600000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 +8.21700000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065633e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 +8.21800000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 +8.21900000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 +8.22000000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 +8.22100000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 +8.22200000e-04 -1.65360702e-12 7.09286718e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 +8.22300000e-04 -1.65360702e-12 7.09286718e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 +8.22400000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 +8.22500000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065633e-02 6.10955079e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 +8.22600000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065633e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 +8.22700000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 +8.22800000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 +8.22900000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 +8.23000000e-04 -1.65360702e-12 7.09286718e-02 5.55494851e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 +8.23100000e-04 -1.65360702e-12 7.09286718e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874862e+03 +8.23200000e-04 -1.65360702e-12 7.09286718e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874862e+03 +8.23300000e-04 -1.65360702e-12 7.09286717e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874862e+03 +8.23400000e-04 -1.65360702e-12 7.09286717e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874863e+03 +8.23500000e-04 -1.65360702e-12 7.09286717e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874863e+03 +8.23600000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955080e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 +8.23700000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 +8.23800000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 +8.23900000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 +8.24000000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 +8.24100000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 +8.24200000e-04 -1.65360702e-12 7.09286717e-02 5.55494849e-02 9.19065635e-02 6.10955081e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 +8.24300000e-04 -1.65360702e-12 7.09286717e-02 5.55494849e-02 9.19065635e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 +8.24400000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065635e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 +8.24500000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065635e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 +8.24600000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065636e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 +8.24700000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065636e-02 6.10955082e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 +8.24800000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955082e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 +8.24900000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 +8.25000000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 +8.25100000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 +8.25200000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 +8.25300000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 +8.25400000e-04 -1.65360702e-12 7.09286716e-02 5.55494847e-02 9.19065636e-02 6.10955083e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 +8.25500000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065636e-02 6.10955084e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 +8.25600000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 +8.25700000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 +8.25800000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 +8.25900000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 +8.26000000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 +8.26100000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 +8.26200000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 +8.26300000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 +8.26400000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 +8.26500000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 +8.26600000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065638e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 +8.26700000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 +8.26800000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 +8.26900000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 +8.27000000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 +8.27100000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 +8.27200000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 +8.27300000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 +8.27400000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065638e-02 6.10955087e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 +8.27500000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065638e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 +8.27600000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 +8.27700000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 +8.27800000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 +8.27900000e-04 -1.65360702e-12 7.09286713e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 +8.28000000e-04 -1.65360702e-12 7.09286713e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 +8.28100000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 +8.28200000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 +8.28300000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 +8.28400000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 +8.28500000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 +8.28600000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 +8.28700000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 +8.28800000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 +8.28900000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 +8.29000000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 +8.29100000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 +8.29200000e-04 -1.65360702e-12 7.09286712e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 +8.29300000e-04 -1.65360702e-12 7.09286712e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 +8.29400000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 +8.29500000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 +8.29600000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 +8.29700000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 +8.29800000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 +8.29900000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955090e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 +8.30000000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955090e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 +8.30100000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 +8.30200000e-04 -1.65360702e-12 7.09286712e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 +8.30300000e-04 -1.65360702e-12 7.09286712e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 +8.30400000e-04 -1.65360702e-12 7.09286712e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 +8.30500000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.30600000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.30700000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.30800000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.30900000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065641e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.31000000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.31100000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 +8.31200000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 +8.31300000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 +8.31400000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 +8.31500000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 +8.31600000e-04 -1.65360702e-12 7.09286711e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 +8.31700000e-04 -1.65360702e-12 7.09286711e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 +8.31800000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.31900000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.32000000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.32100000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065643e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.32200000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065643e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.32300000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065643e-02 6.10955094e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.32400000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 +8.32500000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 +8.32600000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 +8.32700000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 +8.32800000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 +8.32900000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 +8.33000000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955095e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 +8.33100000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33200000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065643e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33300000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33400000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33500000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33600000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33700000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 +8.33800000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.33900000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.34000000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.34100000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.34200000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.34300000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.34400000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 +8.34500000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.34600000e-04 -1.65360702e-12 7.09286708e-02 5.55494835e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.34700000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.34800000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.34900000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.35000000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.35100000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 +8.35200000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 +8.35300000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 +8.35400000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 +8.35500000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 +8.35600000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 +8.35700000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 +8.35800000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874864e+03 +8.35900000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065646e-02 6.10955098e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36000000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065646e-02 6.10955098e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36100000e-04 -1.65360702e-12 7.09286707e-02 5.55494833e-02 9.19065646e-02 6.10955098e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36200000e-04 -1.65360702e-12 7.09286707e-02 5.55494833e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36300000e-04 -1.65360702e-12 7.09286707e-02 5.55494833e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36400000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36500000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36600000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 +8.36700000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.36800000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.36900000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.37000000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.37100000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.37200000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.37300000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 +8.37400000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.37500000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.37600000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.37700000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.37800000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.37900000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.38000000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.38100000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 +8.38200000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38300000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38400000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38500000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38600000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38700000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955102e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38800000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955102e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.38900000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955102e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 +8.39000000e-04 -1.65360702e-12 7.09286706e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39100000e-04 -1.65360702e-12 7.09286706e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39200000e-04 -1.65360702e-12 7.09286706e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39300000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39400000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39500000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39600000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955103e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39700000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955103e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 +8.39800000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.39900000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065648e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40000000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40100000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40200000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40300000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40400000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40500000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 +8.40600000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.40700000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.40800000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.40900000e-04 -1.65360702e-12 7.09286705e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.41000000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.41100000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.41200000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.41300000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 +8.41400000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.41500000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.41600000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.41700000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.41800000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.41900000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.42000000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.42100000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 +8.42200000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42300000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42400000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42500000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42600000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42700000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42800000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.42900000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.43000000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 +8.43100000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955106e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43200000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955106e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43300000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43400000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43500000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43600000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43700000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43800000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.43900000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 +8.44000000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44100000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44200000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44300000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44400000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44500000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44600000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44700000e-04 -1.65360702e-12 7.09286702e-02 5.55494824e-02 9.19065652e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44800000e-04 -1.65360702e-12 7.09286702e-02 5.55494824e-02 9.19065652e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 +8.44900000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45000000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45100000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45200000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45300000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45400000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45500000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45600000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45700000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 +8.45800000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.45900000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46000000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46100000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46200000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46300000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065653e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46400000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46500000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46600000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46700000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 +8.46800000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.46900000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47000000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47100000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47200000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47300000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47400000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47500000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47600000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 +8.47700000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 +8.47800000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 +8.47900000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 +8.48000000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 +8.48100000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 +8.48200000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 +8.48300000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 +8.48400000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 +8.48500000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 +8.48600000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 +8.48700000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.48800000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.48900000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49000000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49100000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49200000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49300000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49400000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49500000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49600000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49700000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955113e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 +8.49800000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.49900000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50000000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50100000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50200000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50300000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50400000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50500000e-04 -1.65360702e-12 7.09286700e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50600000e-04 -1.65360702e-12 7.09286700e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50700000e-04 -1.65360702e-12 7.09286700e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 +8.50800000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.50900000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51000000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51100000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51200000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51300000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51400000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51500000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51600000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51700000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51800000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 +8.51900000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955114e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52000000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955114e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52100000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52200000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52300000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52400000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52500000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52600000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52700000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52800000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.52900000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 +8.53000000e-04 -1.65360702e-12 7.09286699e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53100000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53200000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53300000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53400000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53500000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53600000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53700000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53800000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.53900000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.54000000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 +8.54100000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54200000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54300000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54400000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54500000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54600000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54700000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54800000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.54900000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.55000000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.55100000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.55200000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 +8.55300000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.55400000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.55500000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.55600000e-04 -1.65360702e-12 7.09286697e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.55700000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.55800000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.55900000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.56000000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.56100000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.56200000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.56300000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.56400000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 +8.56500000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.56600000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.56700000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.56800000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.56900000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57000000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57100000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57200000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57300000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57400000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57500000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57600000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57700000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 +8.57800000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.57900000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58000000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58100000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58200000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58300000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58400000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58500000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58600000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58700000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58800000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.58900000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.59000000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 +8.59100000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59200000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59300000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59400000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59500000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59600000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59700000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59800000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.59900000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.60000000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.60100000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.60200000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.60300000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 +8.60400000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.60500000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.60600000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.60700000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.60800000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.60900000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61000000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61100000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61200000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61300000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61400000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61500000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61600000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61700000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 +8.61800000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.61900000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62000000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62100000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62200000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62300000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62400000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62500000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62600000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62700000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62800000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.62900000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.63000000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.63100000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 +8.63200000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065661e-02 6.10955122e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63300000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955122e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63400000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63500000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63600000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63700000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63800000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.63900000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64000000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64100000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64200000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64300000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64400000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64500000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64600000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 +8.64700000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.64800000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.64900000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65000000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65100000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65200000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65300000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65400000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65500000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65600000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65700000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65800000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.65900000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.66000000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.66100000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.66200000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 +8.66300000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.66400000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.66500000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.66600000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.66700000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.66800000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.66900000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67000000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67100000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67200000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67300000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67400000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67500000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67600000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67700000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67800000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 +8.67900000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68000000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68100000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68200000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68300000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68400000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68500000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68600000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68700000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065662e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68800000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065662e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.68900000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.69000000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.69100000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.69200000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.69300000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.69400000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 +8.69500000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.69600000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.69700000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.69800000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.69900000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70000000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70100000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70200000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70300000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70400000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70500000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70600000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70700000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70800000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.70900000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.71000000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.71100000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.71200000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 +8.71300000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.71400000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.71500000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.71600000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.71700000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.71800000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.71900000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72000000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72100000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72200000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72300000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72400000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72500000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72600000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72700000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72800000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.72900000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.73000000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 +8.73100000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73200000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73300000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73400000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73500000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73600000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73700000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73800000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.73900000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74000000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74100000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74200000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74300000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74400000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74500000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74600000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74700000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74800000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955129e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.74900000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955129e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.75000000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 +8.75100000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75200000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75300000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75400000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75500000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75600000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75700000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75800000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.75900000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76000000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76100000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76200000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76300000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76400000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76500000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76600000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76700000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76800000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.76900000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.77000000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 +8.77100000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77200000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77300000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77400000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77500000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77600000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77700000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77800000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.77900000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78000000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78100000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78200000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78300000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78400000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78500000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78600000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78700000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78800000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.78900000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.79000000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.79100000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 +8.79200000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79300000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955130e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79400000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955130e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79500000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79600000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79700000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79800000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.79900000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80000000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80100000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80200000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80300000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80400000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80500000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80600000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80700000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80800000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.80900000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.81000000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.81100000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.81200000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.81300000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.81400000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 +8.81500000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.81600000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.81700000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.81800000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.81900000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82000000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82100000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82200000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82300000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82400000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82500000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82600000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82700000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82800000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.82900000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83000000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83100000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83200000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83300000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83400000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83500000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83600000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83700000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83800000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 +8.83900000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84000000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84100000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84200000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84300000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84400000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84500000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84600000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84700000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84800000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.84900000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.85000000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.85100000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.85200000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 +8.85300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.85400000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.85500000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.85600000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.85700000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.85800000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.85900000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.86000000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.86100000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.86200000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.86300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.86400000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 +8.86500000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.86600000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.86700000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.86800000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.86900000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87000000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87100000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87200000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87400000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87500000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87600000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87700000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87800000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.87900000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88000000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88100000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88200000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88400000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88500000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88600000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88700000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88800000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.88900000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.89000000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.89100000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 +8.89200000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89300000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89400000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89500000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89600000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89700000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89800000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.89900000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90000000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90100000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90200000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90300000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90400000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90500000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90600000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90700000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90800000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.90900000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91000000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91100000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91200000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91300000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91400000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91500000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91600000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.91900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.92000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.92100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 +8.92200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92400000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92500000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92600000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.92900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93400000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93500000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93600000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.93900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94400000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94500000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94600000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.94900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.95000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.95100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.95200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 +8.95300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.95400000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.95500000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.95600000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.95700000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.95800000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.95900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96400000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96500000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96600000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96700000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96800000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.96900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97400000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97500000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97600000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97700000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97800000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.97900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98400000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98500000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98600000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98700000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 +8.98800000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.98900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +8.99900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.00900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.01900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 +9.02600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.02700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.02800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.02900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03600000e-04 -1.65360702e-12 7.09286686e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03700000e-04 -1.65360702e-12 7.09286686e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03800000e-04 -1.65360702e-12 7.09286686e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.03900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.04900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.05900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 +9.06900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.07900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.08900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.09900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.10900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 +9.11700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.11800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.11900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.12900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13400000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13500000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13600000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13700000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13800000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.13900000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14000000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14100000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14200000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14300000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14400000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14500000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14600000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14700000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14800000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.14900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.15900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.16900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.17000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 +9.17100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.17900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.18900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.19900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.20900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.21900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.22900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.23000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.23100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.23200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.23300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.23400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 +9.23500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.23600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.23700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.23800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.23900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.24900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.25900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.26900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27300000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27400000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27500000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.27900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28300000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28400000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28500000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.28900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29300000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29400000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29500000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.29900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.30900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.31000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 +9.31100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.31900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.32900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.33900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.34900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.35900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.36900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.37900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.38900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.39900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.40000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.40100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.40200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.40300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.40400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 +9.40500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.40600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.40700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.40800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.40900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.41900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.42900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.43900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.44900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.45900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.46900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.47900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.48900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.49900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.50900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.51900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.52900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 +9.53000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.53900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.54900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.55900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.56900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.57900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.58900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.59900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.60900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.61900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.62900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.63900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.64900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.65900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.66900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.67900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.68900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.69900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.70900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 +9.71000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.71900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.72900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.73900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.74900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.75900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.76900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.77900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.78900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.79900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.80900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.81900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.82900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.83900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.84900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.85900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.86900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.87900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.88900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.89900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.90900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.91900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.92900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.93900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.94900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.95900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.96900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.97900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.98900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 +9.99900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 diff --git a/test/test_eos.py b/test/test_eos.py index 7c90c87c9..660f363ec 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -28,6 +28,7 @@ import numpy as np import numpy.linalg as la # noqa import pyopencl as cl +import pyopencl.tools as cl_tools import pyopencl.clrandom import pyopencl.clmath import pytest @@ -35,7 +36,10 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.dof_array import thaw -from meshmode.array_context import PyOpenCLArrayContext +from meshmode.array_context import ( # noqa + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) @@ -56,6 +60,66 @@ logger = logging.getLogger(__name__) +def test_lazy_pyrometheus(ctx_factory): + """Test pyrometheus interface in lazy mode.""" + cl_ctx = ctx_factory() + queue = cl.CommandQueue(cl_ctx) + + eager_actx = PyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + lazy_actx = PytatoPyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + from mirgecom.mechanisms import get_mechanism_cti + mech_cti = get_mechanism_cti("uiuc") + cantera_soln1 = cantera.Solution(phase_id="gas", source=mech_cti) + cantera_soln2 = cantera.Solution(phase_id="gas", source=mech_cti) + + from mirgecom.thermochemistry import make_pyrometheus_mechanism + eager_pyro = make_pyrometheus_mechanism(eager_actx, cantera_soln1) + lazy_pyro = make_pyrometheus_mechanism(lazy_actx, cantera_soln2) + + def lazy_temperature(energy, y, tguess): + return lazy_pyro.get_temperature(energy, y, tguess, do_energy=True) + lazy_temp = lazy_actx.compile(lazy_temperature) + + print(f"{type(lazy_temp)=}") + input_file = "pyro_state_data.txt" + input_data = np.loadtxt(input_file) + num_samples = len(input_data) + + print(f"{num_samples=}") + + # time = input_data[:num_samples, 0] + mass_frac = input_data[:num_samples, 1:-1] + temp = input_data[:num_samples, -1] + initial_temp = temp[0] + + use_old_temperature = False + num_trial = 1 + + for _ in range(num_trial): + for i, t, y in zip(range(num_samples), temp, mass_frac): + + t_old = initial_temp + if use_old_temperature and i > 0: + t_old = temp[i-1] + + # rho = ptk.get_density(ct.one_atm, t, y) + e_int = eager_pyro.get_mixture_internal_energy_mass(t, y) + print(f"{type(e_int)=}") + print(f"{type(y)=}") + t_eager = eager_pyro.get_temperature(e_int, t_old, y, + do_energy=True) + t_lazy = lazy_temp(e_int, t_old, + np.asarray(lazy_actx.from_numpy(y))) + # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) + print(f"{np.abs(t_eager-t_lazy)}") + + @pytest.mark.parametrize(("mechname", "rate_tol"), [("uiuc", 1e-12), ("sanDiego", 1e-8)]) From e8abfa842dfe1ab09a120793b5ea2a5cb94c6f88 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 27 Sep 2021 13:36:34 -0500 Subject: [PATCH 227/873] Clean up test just a bit --- test/test_eos.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 660f363ec..6e4eecd4a 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -99,25 +99,27 @@ def lazy_temperature(energy, y, tguess): initial_temp = temp[0] use_old_temperature = False - num_trial = 1 - - for _ in range(num_trial): - for i, t, y in zip(range(num_samples), temp, mass_frac): - - t_old = initial_temp - if use_old_temperature and i > 0: - t_old = temp[i-1] - - # rho = ptk.get_density(ct.one_atm, t, y) - e_int = eager_pyro.get_mixture_internal_energy_mass(t, y) - print(f"{type(e_int)=}") - print(f"{type(y)=}") - t_eager = eager_pyro.get_temperature(e_int, t_old, y, - do_energy=True) - t_lazy = lazy_temp(e_int, t_old, - np.asarray(lazy_actx.from_numpy(y))) - # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) - print(f"{np.abs(t_eager-t_lazy)}") + + lazy_eager_diff_tol = 1e-4 + + for i, t, y in zip(range(num_samples), temp, mass_frac): + + t_old = initial_temp + if use_old_temperature and i > 0: + t_old = temp[i-1] + + # rho = ptk.get_density(cantera.one_atm, t, y) + e_int = eager_pyro.get_mixture_internal_energy_mass(t, y) + print(f"{type(e_int)=}") + print(f"{type(y)=}") + t_eager = eager_pyro.get_temperature(e_int, t_old, y, + do_energy=True) + t_lazy = lazy_temp(e_int, t_old, + np.asarray(lazy_actx.from_numpy(y))) + err = np.abs(t_eager - t_lazy)/t_eager + print(f"{err=}") + assert err < lazy_eager_diff_tol + # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) @pytest.mark.parametrize(("mechname", "rate_tol"), From c930f11efabd3ef24a0884961ee343dadd306115 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 28 Sep 2021 13:07:06 -0500 Subject: [PATCH 228/873] Tweak test st it compiles and runs lazily. --- mirgecom/thermochemistry.py | 2 +- test/lazy_pyro_test.py | 106 ++++++++++++++++++++++++++++++++++++ test/test_eos.py | 10 ++-- 3 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 test/lazy_pyro_test.py diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index cafe05c25..0630851ff 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -63,7 +63,7 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): pv_fun = self.get_mixture_specific_heat_cv_mass he_fun = self.get_mixture_internal_energy_mass - num_iter = 10 + num_iter = 2 ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 t_i = t_guess * ones diff --git a/test/lazy_pyro_test.py b/test/lazy_pyro_test.py new file mode 100644 index 000000000..8ce80a575 --- /dev/null +++ b/test/lazy_pyro_test.py @@ -0,0 +1,106 @@ +"""Test lazy vs. eager pyrometheus.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools + +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.array_context import ( # noqa + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from meshmode.array_context import ( # noqa + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests) + +import cantera + + +if __name__ == "__main__": + cl_ctx = cl.create_some_context() + queue = cl.CommandQueue(cl_ctx) + + eager_actx = PyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + lazy_actx = PytatoPyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + from mirgecom.mechanisms import get_mechanism_cti + mech_cti = get_mechanism_cti("uiuc") + cantera_soln1 = cantera.Solution(phase_id="gas", source=mech_cti) + cantera_soln2 = cantera.Solution(phase_id="gas", source=mech_cti) + + from mirgecom.thermochemistry import make_pyrometheus_mechanism + eager_pyro = make_pyrometheus_mechanism(eager_actx, cantera_soln1) + lazy_pyro = make_pyrometheus_mechanism(lazy_actx, cantera_soln2) + + from pytools.obj_array import make_obj_array + + def lazy_temperature(energy, y, tguess): + return make_obj_array([lazy_pyro.get_temperature(energy, y, tguess, + do_energy=True)]) + + lazy_temp = lazy_actx.compile(lazy_temperature) + + print(f"{type(lazy_temp)=}") + input_file = "pyro_state_data.txt" + input_data = np.loadtxt(input_file) + # num_samples = len(input_data) + num_samples = 1 + + print(f"{num_samples=}") + + # time = input_data[:num_samples, 0] + mass_frac = input_data[:num_samples, 1:-1] + temp = input_data[:num_samples, -1] + initial_temp = temp[0] + + use_old_temperature = False + + lazy_eager_diff_tol = 1e-4 + + for i, t, y in zip(range(num_samples), temp, mass_frac): + + t_old = initial_temp + if use_old_temperature and i > 0: + t_old = temp[i-1] + + # rho = ptk.get_density(cantera.one_atm, t, y) + e_int = eager_pyro.get_mixture_internal_energy_mass(t, y) + print(f"{type(e_int)=}") + print(f"{type(y)=}") + t_eager = eager_pyro.get_temperature(e_int, t_old, y, + do_energy=True) + t_lazy = lazy_actx.to_numpy(lazy_actx.freeze(lazy_temp(e_int, t_old, + np.asarray(lazy_actx.from_numpy(y)))[0])) + err = np.abs(t_eager - t_lazy)/t_eager + print(f"{err=}") + assert err < lazy_eager_diff_tol + # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) diff --git a/test/test_eos.py b/test/test_eos.py index 6e4eecd4a..cf5591d15 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -82,14 +82,16 @@ def test_lazy_pyrometheus(ctx_factory): eager_pyro = make_pyrometheus_mechanism(eager_actx, cantera_soln1) lazy_pyro = make_pyrometheus_mechanism(lazy_actx, cantera_soln2) + from pytools.obj_array import make_obj_array def lazy_temperature(energy, y, tguess): - return lazy_pyro.get_temperature(energy, y, tguess, do_energy=True) + return make_obj_array([lazy_pyro.get_temperature(energy, y, tguess, do_energy=True)]) lazy_temp = lazy_actx.compile(lazy_temperature) print(f"{type(lazy_temp)=}") input_file = "pyro_state_data.txt" input_data = np.loadtxt(input_file) - num_samples = len(input_data) + #num_samples = len(input_data) + num_samples = 1 print(f"{num_samples=}") @@ -114,8 +116,8 @@ def lazy_temperature(energy, y, tguess): print(f"{type(y)=}") t_eager = eager_pyro.get_temperature(e_int, t_old, y, do_energy=True) - t_lazy = lazy_temp(e_int, t_old, - np.asarray(lazy_actx.from_numpy(y))) + t_lazy = lazy_actx.to_numpy(lazy_actx.freeze(lazy_temp(e_int, t_old, + np.asarray(lazy_actx.from_numpy(y)))[0])) err = np.abs(t_eager - t_lazy)/t_eager print(f"{err=}") assert err < lazy_eager_diff_tol From 9c87c4b6f4aa5715d03c94b08ad4f7a71cf6d721 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 1 Oct 2021 11:44:28 -0500 Subject: [PATCH 229/873] Save this test --- examples/autoignition-mpi.py | 26 ++- mirgecom/eos.py | 11 +- mirgecom/thermochemistry.py | 342 ++++++++++++++++++++++++++++++++--- test/test_eos.py | 251 ++++++++++++++++++++++--- 4 files changed, 577 insertions(+), 53 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 68f70c24b..0197711e7 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -132,10 +132,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, constant_cfl = False # i.o frequencies - nstatus = 1 - nviz = 5 + nstatus = 1000 + nviz = 1000 nhealth = 1 - nrestart = 5 + nrestart = 1000 # }}} Time stepping control @@ -245,8 +245,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_pyrometheus_mechanism + from mirgecom.thermochemistry import ( + make_pyrometheus_mechanism, + UIUCMechanism + ) + # import pyrometheus as pyro + # pyro_class = pyro.get_thermochem_class(cantera_soln) pyro_mechanism = make_pyrometheus_mechanism(actx, cantera_soln) + # pyro_mechanism = UIUCMechanism(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) # }}} @@ -283,6 +289,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes) + import ipdb + ipdb.set_trace() # Inspection at physics debugging time if debug: @@ -369,10 +377,12 @@ def my_health_check(cv, dv): y = cv.species_mass_fractions e = eos.internal_energy(cv) / cv.mass - temp_resid = pyro_mechanism.get_temperature_residual( - e, dv.temperature, y, True - ) - temp_resid = discr.norm(temp_resid, np.inf) + check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y, True) + # temp_resid = pyro_mechanism.get_temperature_residual( + # e, dv.temperature, y, True + # ) + # temp_resid = discr.norm(temp_resid, np.inf) + temp_resid = discr.norm(check_temp - dv.temperature, np.inf) if temp_resid > 1e-12: health_error = False logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 2cdef4057..43e98e7c2 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -744,13 +744,20 @@ def temperature(self, cv: ConservedVars): :class:`~meshmode.dof_array.DOFArray` The temperature of the fluid. """ + from arraycontext import thaw, freeze + @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): + t = self._tguess + 0*cv.mass + # t = thaw(freeze(t, cv.array_context), cv.array_context) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass - return self._pyrometheus_mech.get_temperature(e, self._tguess, - y, True) + for _ in range(2): + # t = thaw(freeze(t, cv.array_context), cv.array_context) + t = self._pyrometheus_mech.get_temperature_iterate_energy(e, t, y) + return t + return get_temp() def total_energy(self, cv, pressure): diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 0630851ff..99d832281 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,6 +1,7 @@ r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. .. autofunction:: make_pyrometheus_mechanism +.. autoclass:: UIUCMechanism """ __copyright__ = """ @@ -27,6 +28,8 @@ THE SOFTWARE. """ +import numpy as np + def _pyro_thermochem_wrapper_class(cantera_soln): """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. @@ -51,28 +54,47 @@ def get_concentrations(self, rho, mass_fractions): zero, concs[i]) return concs + # This hard-codes the Newton iterations to 10 because the convergence + # check is not compatible with lazy evaluation. Instead, we plan to check + # the temperature residual at simulation health checking time. + # FIXME: Occasional convergence check is other-than-ideal; revisit asap. + def get_temperature_iterate_energy(self, e_in, t_in, y): + pv_func = self.get_mixture_specific_heat_cv_mass + he_func = self.get_mixture_internal_energy_mass + # import ipdb + # ipdb.set_trace() + return t_in + (e_in - he_func(t_in, y)) / pv_func(t_in, y) + # This hard-codes the Newton iterations to 10 because the convergence # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): - if do_energy is False: - pv_fun = self.get_mixture_specific_heat_cp_mass - he_fun = self.get_mixture_enthalpy_mass - else: - pv_fun = self.get_mixture_specific_heat_cv_mass - he_fun = self.get_mixture_internal_energy_mass + # if do_energy is False: + # pv_fun = self.get_mixture_specific_heat_cp_mass + # he_fun = self.get_mixture_enthalpy_mass + # else: + # pv_fun = self.get_mixture_specific_heat_cv_mass + # he_fun = self.get_mixture_internal_energy_mass + + # import ipdb + # ipdb.set_trace() - num_iter = 2 - ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess * ones + # ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 + t_i = t_guess # * ones + # actx = ones.array_context + # he_func = actx.compile(he_fun) + # pv_func = actx.compile(pv_fun) + # he_func = he_fun + # pv_func = pv_fun + num_iter = 1 + # from arraycontext import thaw, freeze for _ in range(num_iter): - f = enthalpy_or_energy - he_fun(t_i, y) - j = -pv_fun(t_i, y) - dt = -f / j - t_i += dt - # if self._pyro_norm(dt, np.inf) < tol: + # t_i = thaw(freeze(t_i, actx), actx) + t_i = self.get_temperature_iterate_energy( + enthalpy_or_energy, t_i, y + ) return t_i @@ -80,7 +102,7 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_residual(self, enthalpy_or_energy, t_guess, y, + def get_temperature_residual(self, enthalpy_or_energy, t_input, y, do_energy=False): if do_energy is False: pv_fun = self.get_mixture_specific_heat_cp_mass @@ -89,13 +111,10 @@ def get_temperature_residual(self, enthalpy_or_energy, t_guess, y, pv_fun = self.get_mixture_specific_heat_cv_mass he_fun = self.get_mixture_internal_energy_mass - ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess * ones + f = enthalpy_or_energy - he_fun(t_input, y) + j = pv_fun(t_input, y) - f = enthalpy_or_energy - he_fun(t_i, y) - j = -pv_fun(t_i, y) - - return -f / j + return f / j return PyroWrapper @@ -120,3 +139,284 @@ def make_pyrometheus_mechanism(actx, cantera_soln): :mod:`pyrometheus` ThermoChem class """ return _pyro_thermochem_wrapper_class(cantera_soln)(actx.np) + + +class UIUCMechanism: + """ + .. attribute:: model_name + .. attribute:: num_elements + .. attribute:: num_species + .. attribute:: num_reactions + .. attribute:: num_falloff + .. attribute:: one_atm + + Returns 1 atm in SI units of pressure (Pa). + + .. attribute:: gas_constant + .. attribute:: species_names + .. attribute:: species_indices + + .. automethod:: get_specific_gas_constant + .. automethod:: get_density + .. automethod:: get_pressure + .. automethod:: get_mix_molecular_weight + .. automethod:: get_concentrations + .. automethod:: get_mixture_specific_heat_cp_mass + .. automethod:: get_mixture_specific_heat_cv_mass + .. automethod:: get_mixture_enthalpy_mass + .. automethod:: get_mixture_internal_energy_mass + .. automethod:: get_species_specific_heats_r + .. automethod:: get_species_enthalpies_rt + .. automethod:: get_species_entropies_r + .. automethod:: get_species_gibbs_rt + .. automethod:: get_equilibrium_constants + .. automethod:: get_temperature + .. automethod:: __init__ + """ + + def __init__(self, usr_np=np): + """Initialize thermochemistry object for a mechanism. + + Parameters + ---------- + usr_np + :mod:`numpy`-like namespace providing at least the following functions, + for any array ``X`` of the bulk array type: + + - ``usr_np.log(X)`` (like :data:`numpy.log`) + - ``usr_np.log10(X)`` (like :data:`numpy.log10`) + - ``usr_np.exp(X)`` (like :data:`numpy.exp`) + - ``usr_np.where(X > 0, X_yes, X_no)`` (like :func:`numpy.where`) + - ``usr_np.linalg.norm(X, np.inf)`` (like :func:`numpy.linalg.norm`) + + where the "bulk array type" is a type that offers arithmetic analogous + to :class:`numpy.ndarray` and is used to hold all types of (potentialy + volumetric) "bulk data", such as temperature, pressure, mass fractions, + etc. This parameter defaults to *actual numpy*, so it can be ignored + unless it is needed by the user (e.g. for purposes of + GPU processing or automatic differentiation). + + """ + + self.usr_np = usr_np + self.model_name = 'mechs/uiuc.cti' + self.num_elements = 4 + self.num_species = 7 + self.num_reactions = 3 + self.num_falloff = 0 + + self.one_atm = 101325.0 + self.gas_constant = 8314.46261815324 + self.big_number = 1.0e300 + + self.species_names = ['C2H4', 'O2', 'CO2', 'CO', 'H2O', 'H2', 'N2'] + self.species_indices = {'C2H4': 0, 'O2': 1, 'CO2': 2, 'CO': 3, 'H2O': 4, 'H2': 5, 'N2': 6} + + self.wts = np.array([28.054, 31.998, 44.009, 28.009999999999998, 18.015, 2.016, 28.014]) + self.iwts = 1/self.wts + + def _pyro_zeros_like(self, argument): + # FIXME: This is imperfect, as a NaN will stay a NaN. + return 0 * argument + + def _pyro_make_array(self, res_list): + """This works around (e.g.) numpy.exp not working with object + arrays of numpy scalars. It defaults to making object arrays, however + if an array consists of all scalars, it makes a "plain old" + :class:`numpy.ndarray`. + + See ``this numpy bug `__ + for more context. + """ + + from numbers import Number + all_numbers = all(isinstance(e, Number) for e in res_list) + + dtype = np.float64 if all_numbers else np.object + result = np.empty((len(res_list),), dtype=dtype) + + # 'result[:] = res_list' may look tempting, however: + # https://github.com/numpy/numpy/issues/16564 + for idx in range(len(res_list)): + result[idx] = res_list[idx] + + return result + + def _pyro_norm(self, argument, normord): + """This works around numpy.linalg norm not working with scalars. + + If the argument is a regular ole number, it uses :func:`numpy.abs`, + otherwise it uses ``usr_np.linalg.norm``. + """ + # Wrap norm for scalars + + from numbers import Number + + if isinstance(argument, Number): + return np.abs(argument) + return self.usr_np.linalg.norm(argument, normord) + + def species_name(self, species_index): + return self.species_name[species_index] + + def species_index(self, species_name): + return self.species_indices[species_name] + + def get_specific_gas_constant(self, mass_fractions): + return self.gas_constant * ( + + self.iwts[0]*mass_fractions[0] + + self.iwts[1]*mass_fractions[1] + + self.iwts[2]*mass_fractions[2] + + self.iwts[3]*mass_fractions[3] + + self.iwts[4]*mass_fractions[4] + + self.iwts[5]*mass_fractions[5] + + self.iwts[6]*mass_fractions[6] + ) + + def get_density(self, p, temperature, mass_fractions): + mmw = self.get_mix_molecular_weight(mass_fractions) + rt = self.gas_constant * temperature + return p * mmw / rt + + def get_pressure(self, rho, temperature, mass_fractions): + mmw = self.get_mix_molecular_weight(mass_fractions) + rt = self.gas_constant * temperature + return rho * rt / mmw + + def get_mix_molecular_weight(self, mass_fractions): + return 1/( + + self.iwts[0]*mass_fractions[0] + + self.iwts[1]*mass_fractions[1] + + self.iwts[2]*mass_fractions[2] + + self.iwts[3]*mass_fractions[3] + + self.iwts[4]*mass_fractions[4] + + self.iwts[5]*mass_fractions[5] + + self.iwts[6]*mass_fractions[6] + ) + + def get_concentrations(self, rho, mass_fractions): + return self.iwts * rho * mass_fractions + + def get_mass_average_property(self, mass_fractions, spec_property): + return sum([mass_fractions[i] * spec_property[i] * self.iwts[i] + for i in range(self.num_species)]) + + def get_mixture_specific_heat_cp_mass(self, temperature, mass_fractions): + cp0_r = self.get_species_specific_heats_r(temperature) + cpmix = self.get_mass_average_property(mass_fractions, cp0_r) + return self.gas_constant * cpmix + + def get_mixture_specific_heat_cv_mass(self, temperature, mass_fractions): + cp0_r = self.get_species_specific_heats_r(temperature) - 1.0 + cpmix = self.get_mass_average_property(mass_fractions, cp0_r) + return self.gas_constant * cpmix + + def get_mixture_enthalpy_mass(self, temperature, mass_fractions): + h0_rt = self.get_species_enthalpies_rt(temperature) + hmix = self.get_mass_average_property(mass_fractions, h0_rt) + return self.gas_constant * temperature * hmix + + def get_mixture_internal_energy_mass(self, temperature, mass_fractions): + e0_rt = self.get_species_enthalpies_rt(temperature) - 1.0 + emix = self.get_mass_average_property(mass_fractions, e0_rt) + return self.gas_constant * temperature * emix + + def get_species_specific_heats_r(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116 + 0.0146454151*temperature + -6.71077915e-06*temperature**2 + 1.47222923e-09*temperature**3 + -1.25706061e-13*temperature**4, 3.95920148 + -0.00757052247*temperature + 5.70990292e-05*temperature**2 + -6.91588753e-08*temperature**3 + 2.69884373e-11*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00148308754*temperature + -7.57966669e-07*temperature**2 + 2.09470555e-10*temperature**3 + -2.16717794e-14*temperature**4, 3.78245636 + -0.00299673416*temperature + 9.84730201e-06*temperature**2 + -9.68129509e-09*temperature**3 + 3.24372837e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029 + 0.00441437026*temperature + -2.21481404e-06*temperature**2 + 5.23490188e-10*temperature**3 + -4.72084164e-14*temperature**4, 2.35677352 + 0.00898459677*temperature + -7.12356269e-06*temperature**2 + 2.45919022e-09*temperature**3 + -1.43699548e-13*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561 + 0.00206252743*temperature + -9.98825771e-07*temperature**2 + 2.30053008e-10*temperature**3 + -2.03647716e-14*temperature**4, 3.57953347 + -0.00061035368*temperature + 1.01681433e-06*temperature**2 + 9.07005884e-10*temperature**3 + -9.04424499e-13*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00217691804*temperature + -1.64072518e-07*temperature**2 + -9.7041987e-11*temperature**3 + 1.68200992e-14*temperature**4, 4.19864056 + -0.0020364341*temperature + 6.52040211e-06*temperature**2 + -5.48797062e-09*temperature**3 + 1.77197817e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -4.94024731e-05*temperature + 4.99456778e-07*temperature**2 + -1.79566394e-10*temperature**3 + 2.00255376e-14*temperature**4, 2.34433112 + 0.00798052075*temperature + -1.9478151e-05*temperature**2 + 2.01572094e-08*temperature**3 + -7.37611761e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0014879768*temperature + -5.68476e-07*temperature**2 + 1.0097038e-10*temperature**3 + -6.753351e-15*temperature**4, 3.298677 + 0.0014082404*temperature + -3.963222e-06*temperature**2 + 5.641515e-09*temperature**3 + -2.444854e-12*temperature**4), + ]) + + def get_species_enthalpies_rt(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116 + 0.00732270755*temperature + -2.2369263833333335e-06*temperature**2 + 3.680573075e-10*temperature**3 + -2.51412122e-14*temperature**4 + 4939.88614 / temperature, 3.95920148 + -0.003785261235*temperature + 1.9033009733333333e-05*temperature**2 + -1.7289718825e-08*temperature**3 + 5.3976874600000004e-12*temperature**4 + 5089.77593 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00074154377*temperature + -2.526555563333333e-07*temperature**2 + 5.236763875e-11*temperature**3 + -4.33435588e-15*temperature**4 + -1088.45772 / temperature, 3.78245636 + -0.00149836708*temperature + 3.282434003333333e-06*temperature**2 + -2.4203237725e-09*temperature**3 + 6.48745674e-13*temperature**4 + -1063.94356 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029 + 0.00220718513*temperature + -7.382713466666667e-07*temperature**2 + 1.30872547e-10*temperature**3 + -9.44168328e-15*temperature**4 + -48759.166 / temperature, 2.35677352 + 0.004492298385*temperature + -2.3745208966666665e-06*temperature**2 + 6.14797555e-10*temperature**3 + -2.8739909599999997e-14*temperature**4 + -48371.9697 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561 + 0.001031263715*temperature + -3.329419236666667e-07*temperature**2 + 5.7513252e-11*temperature**3 + -4.07295432e-15*temperature**4 + -14151.8724 / temperature, 3.57953347 + -0.00030517684*temperature + 3.3893811e-07*temperature**2 + 2.26751471e-10*temperature**3 + -1.808848998e-13*temperature**4 + -14344.086 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00108845902*temperature + -5.469083933333333e-08*temperature**2 + -2.426049675e-11*temperature**3 + 3.36401984e-15*temperature**4 + -30004.2971 / temperature, 4.19864056 + -0.00101821705*temperature + 2.17346737e-06*temperature**2 + -1.371992655e-09*temperature**3 + 3.54395634e-13*temperature**4 + -30293.7267 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -2.470123655e-05*temperature + 1.6648559266666665e-07*temperature**2 + -4.48915985e-11*temperature**3 + 4.00510752e-15*temperature**4 + -950.158922 / temperature, 2.34433112 + 0.003990260375*temperature + -6.4927169999999995e-06*temperature**2 + 5.03930235e-09*temperature**3 + -1.4752235220000002e-12*temperature**4 + -917.935173 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0007439884*temperature + -1.8949200000000001e-07*temperature**2 + 2.5242595e-11*temperature**3 + -1.3506701999999999e-15*temperature**4 + -922.7977 / temperature, 3.298677 + 0.0007041202*temperature + -1.3210739999999999e-06*temperature**2 + 1.41037875e-09*temperature**3 + -4.889707999999999e-13*temperature**4 + -1020.8999 / temperature), + ]) + + def get_species_entropies_r(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116*self.usr_np.log(temperature) + 0.0146454151*temperature + -3.355389575e-06*temperature**2 + 4.907430766666667e-10*temperature**3 + -3.142651525e-14*temperature**4 + 10.3053693, 3.95920148*self.usr_np.log(temperature) + -0.00757052247*temperature + 2.85495146e-05*temperature**2 + -2.3052958433333332e-08*temperature**3 + 6.747109325e-12*temperature**4 + 4.09733096), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784*self.usr_np.log(temperature) + 0.00148308754*temperature + -3.789833345e-07*temperature**2 + 6.982351833333333e-11*temperature**3 + -5.41794485e-15*temperature**4 + 5.45323129, 3.78245636*self.usr_np.log(temperature) + -0.00299673416*temperature + 4.923651005e-06*temperature**2 + -3.2270983633333334e-09*temperature**3 + 8.109320925e-13*temperature**4 + 3.65767573), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029*self.usr_np.log(temperature) + 0.00441437026*temperature + -1.10740702e-06*temperature**2 + 1.7449672933333335e-10*temperature**3 + -1.18021041e-14*temperature**4 + 2.27163806, 2.35677352*self.usr_np.log(temperature) + 0.00898459677*temperature + -3.561781345e-06*temperature**2 + 8.197300733333333e-10*temperature**3 + -3.5924887e-14*temperature**4 + 9.90105222), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561*self.usr_np.log(temperature) + 0.00206252743*temperature + -4.994128855e-07*temperature**2 + 7.6684336e-11*temperature**3 + -5.0911929e-15*temperature**4 + 7.81868772, 3.57953347*self.usr_np.log(temperature) + -0.00061035368*temperature + 5.08407165e-07*temperature**2 + 3.023352946666667e-10*temperature**3 + -2.2610612475e-13*temperature**4 + 3.50840928), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249*self.usr_np.log(temperature) + 0.00217691804*temperature + -8.2036259e-08*temperature**2 + -3.2347329e-11*temperature**3 + 4.2050248e-15*temperature**4 + 4.9667701, 4.19864056*self.usr_np.log(temperature) + -0.0020364341*temperature + 3.260201055e-06*temperature**2 + -1.82932354e-09*temperature**3 + 4.429945425e-13*temperature**4 + -0.849032208), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792*self.usr_np.log(temperature) + -4.94024731e-05*temperature + 2.49728389e-07*temperature**2 + -5.985546466666667e-11*temperature**3 + 5.0063844e-15*temperature**4 + -3.20502331, 2.34433112*self.usr_np.log(temperature) + 0.00798052075*temperature + -9.7390755e-06*temperature**2 + 6.7190698e-09*temperature**3 + -1.8440294025e-12*temperature**4 + 0.683010238), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664*self.usr_np.log(temperature) + 0.0014879768*temperature + -2.84238e-07*temperature**2 + 3.3656793333333334e-11*temperature**3 + -1.68833775e-15*temperature**4 + 5.980528, 3.298677*self.usr_np.log(temperature) + 0.0014082404*temperature + -1.981611e-06*temperature**2 + 1.8805050000000002e-09*temperature**3 + -6.112135e-13*temperature**4 + 3.950372), + ]) + + def get_species_gibbs_rt(self, temperature): + h0_rt = self.get_species_enthalpies_rt(temperature) + s0_r = self.get_species_entropies_r(temperature) + return h0_rt - s0_r + + def get_equilibrium_constants(self, temperature): + rt = self.gas_constant * temperature + c0 = self.usr_np.log(self.one_atm / rt) + + g0_rt = self.get_species_gibbs_rt(temperature) + return self._pyro_make_array([ + -0.17364695002734*temperature, + g0_rt[2] + -1*-0.5*c0 + -1*(g0_rt[3] + 0.5*g0_rt[1]), + g0_rt[4] + -1*-0.5*c0 + -1*(g0_rt[5] + 0.5*g0_rt[1]), + ]) + + def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): + if do_energy is False: + pv_fun = self.get_mixture_specific_heat_cp_mass + he_fun = self.get_mixture_enthalpy_mass + else: + pv_fun = self.get_mixture_specific_heat_cv_mass + he_fun = self.get_mixture_internal_energy_mass + + # num_iter = 1 + ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 + t_i = t_guess * ones + + # for _ in range(num_iter): + # t_i = t_i + (enthalpy_or_energy - he_fun(t_i, y)) / pv_fun(t_i, y) + # return t_i + return t_i + (enthalpy_or_energy - he_fun(t_i, y)) / pv_fun(t_i, y) + + def get_fwd_rate_coefficients(self, temperature, concentrations): + ones = self._pyro_zeros_like(temperature) + 1.0 + k_fwd = [ + self.usr_np.exp(26.594857854425133 + -1*(17864.293439206183 / temperature)) * ones, + self.usr_np.exp(12.693776816787125 + 0.7*self.usr_np.log(temperature) + -1*(6038.634401985189 / temperature)) * ones, + self.usr_np.exp(18.302572655472037 + -1*(17612.683672456802 / temperature)) * ones, + ] + + return self._pyro_make_array(k_fwd) + + def get_net_rates_of_progress(self, temperature, concentrations): + k_fwd = self.get_fwd_rate_coefficients(temperature, concentrations) + log_k_eq = self.get_equilibrium_constants(temperature) + k_eq = self.usr_np.exp(log_k_eq) + return self._pyro_make_array([ + k_fwd[0]*concentrations[0]**0.5*concentrations[1]**0.65, + k_fwd[1]*(concentrations[3]*concentrations[1]**0.5 + -1*k_eq[1]*concentrations[2]), + k_fwd[2]*(concentrations[5]*concentrations[1]**0.5 + -1*k_eq[2]*concentrations[4]), + ]) + + def get_net_production_rates(self, rho, temperature, mass_fractions): + c = self.get_concentrations(rho, mass_fractions) + r_net = self.get_net_rates_of_progress(temperature, c) + ones = self._pyro_zeros_like(r_net[0]) + 1.0 + return self._pyro_make_array([ + -1*r_net[0] * ones, + -1*(r_net[0] + 0.5*r_net[1] + 0.5*r_net[2]) * ones, + r_net[1] * ones, + 2.0*r_net[0] + -1*r_net[1] * ones, + r_net[2] * ones, + 2.0*r_net[0] + -1*r_net[2] * ones, + 0.0 * ones, + ]) diff --git a/test/test_eos.py b/test/test_eos.py index cf5591d15..9d17a8cd5 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -35,7 +35,6 @@ from pytools.obj_array import make_obj_array from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from meshmode.dof_array import thaw from meshmode.array_context import ( # noqa PyOpenCLArrayContext, PytatoPyOpenCLArrayContext @@ -60,7 +59,179 @@ logger = logging.getLogger(__name__) -def test_lazy_pyrometheus(ctx_factory): +def test_lazy_pyro(ctx_factory): + """Test known pyrometheus mechanisms. + + This test reproduces a pyrometheus-native test in the MIRGE context. + + Tests that the Pyrometheus mechanism code gets the same thermo properties as the + corresponding mechanism in Cantera. + """ + cl_ctx = ctx_factory() + queue = cl.CommandQueue(cl_ctx) + actx_eager = PyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + actx_lazy = PytatoPyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + dim = 1 + nel_1d = 1 + + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + order = 1 + + logger.info(f"Number of elements {mesh.nelements}") + + discr_eager = EagerDGDiscretization(actx_eager, mesh, order=order) + discr_lazy = EagerDGDiscretization(actx_lazy, mesh, order=order) + + # Pyrometheus initialization + mechname = "uiuc" + mech_cti = get_mechanism_cti(mechname) + sol = cantera.Solution(phase_id="gas", source=mech_cti) + + from mirgecom.thermochemistry import make_pyrometheus_mechanism + pyro_eager = make_pyrometheus_mechanism(actx_eager, sol) + pyro_lazy = make_pyrometheus_mechanism(actx_lazy, sol) + + def get_lazy_temperature(energy, y, tguess): + return make_obj_array( + [pyro_lazy.get_temperature(energy, y, tguess, + do_energy=True)] + ) + + def get_lazy_density(pin, tin, yin): + return make_obj_array( + [pyro_lazy.get_density(pin, tin, yin)] + ) + + lazy_temperature = actx_lazy.compile(get_lazy_temperature) + lazy_density = actx_lazy.compile(get_lazy_density) + + nspecies = pyro_eager.num_species + print(f"PyrometheusMixture::NumSpecies = {nspecies}") + + press0 = 101500.0 + temp0 = 300.0 + y0 = 1 + y0s = np.zeros(shape=(nspecies,)) + for i in range(nspecies-1): + y0s[i] = y0 / (10.0 ** (i + 1)) + y0s[-1] = 1.0 - np.sum(y0s[:-1]) + + for fac in range(1, 11): + pressin = fac * press0 + tempin = fac * temp0 + + print(f"Testing (t,P) = ({tempin}, {pressin})") + cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) + cantera_soln.TPY = tempin, pressin, y0s + cantera_soln.equilibrate("UV") + can_t, can_rho, can_y = cantera_soln.TDY + can_p = cantera_soln.P + can_e = cantera_soln.int_energy_mass + can_k = cantera_soln.forward_rate_constants + can_c = cantera_soln.concentrations + + # Chemistry functions for testing pyro chem + can_r = cantera_soln.net_rates_of_progress + can_omega = cantera_soln.net_production_rates + + ones_lazy = discr_lazy.zeros(actx_lazy) + 1.0 + tin_lazy = can_t * ones_lazy + pin_lazy = can_p * ones_lazy + yin_lazy = make_obj_array([can_y[i] * ones_lazy for i in range(nspecies)]) + # tin_lazy = thaw(freeze(tin_lazy, actx_lazy), actx_lazy) + # pin_lazy = thaw(freeze(pin_lazy, actx_lazy), actx_lazy) + # yin_lazy = thaw(freeze(yin_lazy, actx_lazy), actx_lazy) + + ones_eager = discr_eager.zeros(actx_eager) + 1.0 + tin_eager = can_t * ones_eager + pin_eager = can_p * ones_eager + yin_eager = make_obj_array([can_y[i] * ones_eager for i in range(nspecies)]) + + pyro_rho_eager = pyro_eager.get_density(pin_eager, tin_eager, yin_eager) + pyro_rho_lazy = lazy_density(pin_lazy, tin_lazy, yin_lazy) + + from arraycontext import thaw, freeze + thaw(freeze(pyro_rho_lazy, actx_lazy), actx_lazy) + print(f"{pyro_rho_lazy=}") + + pyro_e_eager = pyro_eager.get_mixture_internal_energy_mass(tin_eager, + yin_eager) + pyro_e_lazy = pyro_lazy.get_mixture_internal_energy_mass(tin_lazy, yin_lazy) + + pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager, + True) + pyro_t_lazy = lazy_temperature(pyro_e_eager, tin_eager, yin_eager) + + pyro_p_eager = pyro_eager.get_pressure(pyro_rho_eager, tin_eager, yin_eager) + pyro_c_eager = pyro_eager.get_concentrations(pyro_rho_eager, yin_eager) + pyro_k_eager = pyro_eager.get_fwd_rate_coefficients(pyro_t_eager, + pyro_c_eager) + + pyro_p_lazy = pyro_lazy.get_pressure(pyro_rho_lazy, tin_lazy, yin_lazy) + pyro_c_lazy = pyro_lazy.get_concentrations(pyro_rho_lazy, yin_lazy) + pyro_k_lazy = pyro_lazy.get_fwd_rate_coefficients(pyro_t_lazy, pyro_c_lazy) + + # Pyro chemistry functions + pyro_r_eager = pyro_eager.get_net_rates_of_progress(pyro_t_eager, + pyro_c_eager) + pyro_omega_eager = pyro_eager.get_net_production_rates(pyro_rho_eager, + pyro_t_eager, + yin_eager) + + # pyro_r_lazy = pyro_lazy.get_net_rates_of_progress(pyro_t_lazy, + # pyro_c_lazy) + # pyro_omega_lazy = pyro_lazy.get_net_production_rates(pyro_rho_lazy, + # pyro_t_lazy, + # yin_lazy) + + print(f"can(rho, y, p, t, e, k) = ({can_rho}, {can_y}, " + f"{can_p}, {can_t}, {can_e}, {can_k})") + print(f"pyro_eager(rho, y, p, t, e, k) = ({pyro_rho_eager}, {y0s}, " + f"{pyro_p_eager}, {pyro_t_eager}, {pyro_e_eager}, {pyro_k_eager})") + print(f"pyro_lazy(rho, y, p, t, e, k) = ({pyro_rho_lazy}, {y0s}, " + f"{pyro_p_lazy}, {pyro_t_lazy}, {pyro_e_lazy}, {pyro_k_lazy})") + + # from arraycontext import thaw, freeze + # t_lazy_thaw = thaw(freeze(lazy_t, actx=actx_eager), actx_eager) + # print(f"{lazy_t[0]=}") + # print(f"{t_lazy_thaw=}") + + # For pyro chem testing + print(f"{can_r=}") + print(f"{pyro_r_eager=}") + # print(f"{pyro_r_lazy=}") + print(f"{can_omega=}") + print(f"{pyro_omega_eager=}") + # print(f"{pyro_omega_lazy=}") + + assert discr_eager.norm((pyro_c_eager - can_c) / can_c, np.inf) < 1e-14 + assert discr_eager.norm((pyro_t_eager - can_t) / can_t, np.inf) < 1e-14 + assert discr_eager.norm((pyro_rho_eager - can_rho) / can_rho, np.inf) < 1e-14 + assert discr_eager.norm((pyro_p_eager - can_p) / can_p, np.inf) < 1e-14 + assert discr_eager.norm((pyro_e_eager - can_e) / can_e, np.inf) < 1e-6 + assert discr_eager.norm((pyro_k_eager - can_k) / can_k, np.inf) < 1e-10 + + # Pyro chem test comparisons + rate_tol = 1e-8 + for i, rate in enumerate(can_r): + assert discr_eager.norm((pyro_r_eager[i] - rate), np.inf) < rate_tol + for i, rate in enumerate(can_omega): + assert discr_eager.norm((pyro_omega_eager[i] - rate), np.inf) < rate_tol + + assert False + + +def disable_test_lazy_pyrometheus(ctx_factory): """Test pyrometheus interface in lazy mode.""" cl_ctx = ctx_factory() queue = cl.CommandQueue(cl_ctx) @@ -83,45 +254,79 @@ def test_lazy_pyrometheus(ctx_factory): lazy_pyro = make_pyrometheus_mechanism(lazy_actx, cantera_soln2) from pytools.obj_array import make_obj_array + def lazy_temperature(energy, y, tguess): - return make_obj_array([lazy_pyro.get_temperature(energy, y, tguess, do_energy=True)]) + return make_obj_array( + [lazy_pyro.get_temperature_iterate_energy(energy, y, tguess, + do_energy=True)] + ) lazy_temp = lazy_actx.compile(lazy_temperature) print(f"{type(lazy_temp)=}") input_file = "pyro_state_data.txt" input_data = np.loadtxt(input_file) - #num_samples = len(input_data) + # num_samples = len(input_data) num_samples = 1 print(f"{num_samples=}") # time = input_data[:num_samples, 0] mass_frac = input_data[:num_samples, 1:-1] + nspecies = len(mass_frac) + temp = input_data[:num_samples, -1] - initial_temp = temp[0] + initial_temp = 1500.0 + + from meshmode.dof_array import DOFArray + temp_dof_lazy = DOFArray(lazy_actx, data=(lazy_actx.from_numpy(temp),)) + y_dof_lazy = make_obj_array([DOFArray(lazy_actx, + data=(lazy_actx.from_numpy(mass_frac[i]),)) + for i in range(nspecies)]) + + temp_dof_eager = DOFArray(lazy_actx, data=(eager_actx.from_numpy(temp),)) + y_dof_eager = make_obj_array( + [DOFArray(eager_actx, data=(eager_actx.from_numpy(mass_frac[i]),)) + for i in range(nspecies)]) use_old_temperature = False lazy_eager_diff_tol = 1e-4 - for i, t, y in zip(range(num_samples), temp, mass_frac): + # for i, t, y in zip(range(num_samples), temp, mass_frac): - t_old = initial_temp - if use_old_temperature and i > 0: - t_old = temp[i-1] + t_old_eager = initial_temp + 0*temp_dof_eager + if use_old_temperature and i > 0: + t_old_eager = temp_dof_eager - # rho = ptk.get_density(cantera.one_atm, t, y) - e_int = eager_pyro.get_mixture_internal_energy_mass(t, y) - print(f"{type(e_int)=}") - print(f"{type(y)=}") - t_eager = eager_pyro.get_temperature(e_int, t_old, y, - do_energy=True) - t_lazy = lazy_actx.to_numpy(lazy_actx.freeze(lazy_temp(e_int, t_old, - np.asarray(lazy_actx.from_numpy(y)))[0])) - err = np.abs(t_eager - t_lazy)/t_eager - print(f"{err=}") - assert err < lazy_eager_diff_tol - # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) + # rho = ptk.get_density(cantera.one_atm, t, y) + # e_int_eager = eager_pyro.get_mixture_internal_energy_mass(temp_dof_eager, + # y_dof_eager) + # e_int_lazy = lazy_pyro.get_mixture_internal_energy_mass(temp_dof_lazy, + # y_dof_lazy) + # e_dof = DOFArray(lazy_actx, data=(e_int, )) + print(f"{y_dof_eager=}") + e_int_eager = eager_pyro.get_mixture_internal_energy_mass(temp_dof_eager, + y_dof_eager) + # e_dof = DOFArray(lazy_actx, data=(e_int, )) + + # print(f"{type(e_int)=}") + # print(f"{type(y)=}") + + t_eager = eager_pyro.get_temperature_iterate(e_int_eager, t_old_eager, + y_dof_eager, do_energy=True) + t_eager2 = eager_pyro.get_temperature_iterate(e_int_eager, t_eager, + y_dof_eager, do_energy=True) + t_resid = np.linalg.norm(t_eager - t_eager2, np.inf) + print(f"{t_resid=}") + + assert False + # t_lazy = lazy_actx.to_numpy(lazy_actx.freeze(lazy_temp(e_int_lazy, initial_temp, + # y_dof_lazy))) + + # err = np.linalg.norm(t_eager - t_lazy, np.inf)/np.linalg.norm(t_eager,np.inf) + # print(f"{err=}") + # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) + # assert err < lazy_eager_diff_tol @pytest.mark.parametrize(("mechname", "rate_tol"), @@ -144,7 +349,6 @@ def test_pyrometheus_mechanisms(ctx_factory, mechname, rate_tol, y0): nel_1d = 2 from meshmode.mesh.generation import generate_regular_rect_mesh - mesh = generate_regular_rect_mesh( a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim ) @@ -258,6 +462,7 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): logger.info(f"Number of elements {mesh.nelements}") discr = EagerDGDiscretization(actx, mesh, order=order) + from meshmode.dof_array import thaw nodes = thaw(actx, discr.nodes()) # Pyrometheus initialization @@ -456,6 +661,7 @@ def test_idealsingle_lump(ctx_factory, dim): logger.info(f"Number of elements {mesh.nelements}") discr = EagerDGDiscretization(actx, mesh, order=order) + from meshmode.dof_array import thaw nodes = thaw(actx, discr.nodes()) # Init soln with Vortex @@ -508,6 +714,7 @@ def test_idealsingle_vortex(ctx_factory): logger.info(f"Number of elements {mesh.nelements}") discr = EagerDGDiscretization(actx, mesh, order=order) + from meshmode.dof_array import thaw nodes = thaw(actx, discr.nodes()) eos = IdealSingleGas() # Init soln with Vortex From ef0ba1cd9bf41ef9f3a122d382edd539bebe3202 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 1 Oct 2021 16:46:19 -0500 Subject: [PATCH 230/873] Add test of lazy pyro --- test/test_eos.py | 185 ++++++++++++++--------------------------------- 1 file changed, 56 insertions(+), 129 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 9d17a8cd5..d2ffdd738 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -59,7 +59,10 @@ logger = logging.getLogger(__name__) -def test_lazy_pyro(ctx_factory): +@pytest.mark.parametrize(("mechname", "rate_tol"), + [("uiuc", 1e-12), ]) +@pytest.mark.parametrize("y0", [0, 1]) +def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): """Test known pyrometheus mechanisms. This test reproduces a pyrometheus-native test in the MIRGE context. @@ -77,15 +80,15 @@ def test_lazy_pyro(ctx_factory): queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - dim = 1 - nel_1d = 1 + dim = 2 + nel_1d = 2 from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim ) - order = 1 + order = 2 logger.info(f"Number of elements {mesh.nelements}") @@ -93,7 +96,6 @@ def test_lazy_pyro(ctx_factory): discr_lazy = EagerDGDiscretization(actx_lazy, mesh, order=order) # Pyrometheus initialization - mechname = "uiuc" mech_cti = get_mechanism_cti(mechname) sol = cantera.Solution(phase_id="gas", source=mech_cti) @@ -120,7 +122,6 @@ def get_lazy_density(pin, tin, yin): press0 = 101500.0 temp0 = 300.0 - y0 = 1 y0s = np.zeros(shape=(nspecies,)) for i in range(nspecies-1): y0s[i] = y0 / (10.0 ** (i + 1)) @@ -148,9 +149,6 @@ def get_lazy_density(pin, tin, yin): tin_lazy = can_t * ones_lazy pin_lazy = can_p * ones_lazy yin_lazy = make_obj_array([can_y[i] * ones_lazy for i in range(nspecies)]) - # tin_lazy = thaw(freeze(tin_lazy, actx_lazy), actx_lazy) - # pin_lazy = thaw(freeze(pin_lazy, actx_lazy), actx_lazy) - # yin_lazy = thaw(freeze(yin_lazy, actx_lazy), actx_lazy) ones_eager = discr_eager.zeros(actx_eager) + 1.0 tin_eager = can_t * ones_eager @@ -158,19 +156,27 @@ def get_lazy_density(pin, tin, yin): yin_eager = make_obj_array([can_y[i] * ones_eager for i in range(nspecies)]) pyro_rho_eager = pyro_eager.get_density(pin_eager, tin_eager, yin_eager) - pyro_rho_lazy = lazy_density(pin_lazy, tin_lazy, yin_lazy) + pyro_rho_lazy = lazy_density(pin_lazy, tin_lazy, yin_lazy)[0] - from arraycontext import thaw, freeze - thaw(freeze(pyro_rho_lazy, actx_lazy), actx_lazy) - print(f"{pyro_rho_lazy=}") + # actx_lazy.to_numpy(thaw(freeze(pyro_rho_lazy, actx_lazy), actx_lazy)) + + from arraycontext import thaw, freeze, to_numpy + rho_lazy = to_numpy( + thaw(freeze(pyro_rho_lazy, actx_lazy), actx_eager), actx_eager + ) pyro_e_eager = pyro_eager.get_mixture_internal_energy_mass(tin_eager, yin_eager) pyro_e_lazy = pyro_lazy.get_mixture_internal_energy_mass(tin_lazy, yin_lazy) + e_lazy = to_numpy( + thaw(freeze(pyro_e_lazy, actx_lazy), actx_eager), actx_eager + ) pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager, True) - pyro_t_lazy = lazy_temperature(pyro_e_eager, tin_eager, yin_eager) + pyro_t_lazy = lazy_temperature(pyro_e_lazy, tin_lazy, yin_lazy)[0] + t_lazy = to_numpy(thaw(freeze(pyro_t_lazy, actx_lazy), actx_eager), + actx_eager) pyro_p_eager = pyro_eager.get_pressure(pyro_rho_eager, tin_eager, yin_eager) pyro_c_eager = pyro_eager.get_concentrations(pyro_rho_eager, yin_eager) @@ -181,6 +187,16 @@ def get_lazy_density(pin, tin, yin): pyro_c_lazy = pyro_lazy.get_concentrations(pyro_rho_lazy, yin_lazy) pyro_k_lazy = pyro_lazy.get_fwd_rate_coefficients(pyro_t_lazy, pyro_c_lazy) + c_lazy = to_numpy( + thaw(freeze(pyro_c_lazy, actx_lazy), actx_eager), actx_eager + ) + p_lazy = to_numpy( + thaw(freeze(pyro_p_lazy, actx_lazy), actx_eager), actx_eager + ) + k_lazy = to_numpy( + thaw(freeze(pyro_k_lazy, actx_lazy), actx_eager), actx_eager + ) + # Pyro chemistry functions pyro_r_eager = pyro_eager.get_net_rates_of_progress(pyro_t_eager, pyro_c_eager) @@ -188,31 +204,40 @@ def get_lazy_density(pin, tin, yin): pyro_t_eager, yin_eager) - # pyro_r_lazy = pyro_lazy.get_net_rates_of_progress(pyro_t_lazy, - # pyro_c_lazy) - # pyro_omega_lazy = pyro_lazy.get_net_production_rates(pyro_rho_lazy, - # pyro_t_lazy, - # yin_lazy) + pyro_r_lazy = pyro_lazy.get_net_rates_of_progress(pyro_t_lazy, + pyro_c_lazy) + pyro_omega_lazy = pyro_lazy.get_net_production_rates(pyro_rho_lazy, + pyro_t_lazy, + yin_lazy) + r_lazy = to_numpy( + thaw(freeze(pyro_r_lazy, actx_lazy), actx_eager), actx_eager + ) + omega_lazy = to_numpy( + thaw(freeze(pyro_omega_lazy, actx_lazy), actx_eager), actx_eager + ) print(f"can(rho, y, p, t, e, k) = ({can_rho}, {can_y}, " f"{can_p}, {can_t}, {can_e}, {can_k})") print(f"pyro_eager(rho, y, p, t, e, k) = ({pyro_rho_eager}, {y0s}, " f"{pyro_p_eager}, {pyro_t_eager}, {pyro_e_eager}, {pyro_k_eager})") - print(f"pyro_lazy(rho, y, p, t, e, k) = ({pyro_rho_lazy}, {y0s}, " - f"{pyro_p_lazy}, {pyro_t_lazy}, {pyro_e_lazy}, {pyro_k_lazy})") - - # from arraycontext import thaw, freeze - # t_lazy_thaw = thaw(freeze(lazy_t, actx=actx_eager), actx_eager) - # print(f"{lazy_t[0]=}") - # print(f"{t_lazy_thaw=}") + print(f"pyro_lazy(rho, y, p, t, e, k) = ({rho_lazy}, {y0s}, " + f"{p_lazy}, {t_lazy}, {e_lazy}, {k_lazy})") # For pyro chem testing print(f"{can_r=}") print(f"{pyro_r_eager=}") - # print(f"{pyro_r_lazy=}") + print(f"{r_lazy=}") print(f"{can_omega=}") print(f"{pyro_omega_eager=}") - # print(f"{pyro_omega_lazy=}") + print(f"{omega_lazy=}") + + tol = 1e-10 + assert discr_eager.norm((pyro_c_eager - c_lazy), np.inf) < tol + assert discr_eager.norm((pyro_t_eager - t_lazy), np.inf) < tol + assert discr_eager.norm((pyro_rho_eager - rho_lazy), np.inf) < tol + assert discr_eager.norm((pyro_p_eager - p_lazy), np.inf) < 1e-9 + assert discr_eager.norm((pyro_e_eager - e_lazy), np.inf) < 1e-5 + assert discr_eager.norm((pyro_k_eager - k_lazy), np.inf) < 1e-5 assert discr_eager.norm((pyro_c_eager - can_c) / can_c, np.inf) < 1e-14 assert discr_eager.norm((pyro_t_eager - can_t) / can_t, np.inf) < 1e-14 @@ -222,112 +247,14 @@ def get_lazy_density(pin, tin, yin): assert discr_eager.norm((pyro_k_eager - can_k) / can_k, np.inf) < 1e-10 # Pyro chem test comparisons - rate_tol = 1e-8 for i, rate in enumerate(can_r): + assert discr_eager.norm((pyro_r_eager[i] - r_lazy[i]), np.inf) < tol assert discr_eager.norm((pyro_r_eager[i] - rate), np.inf) < rate_tol for i, rate in enumerate(can_omega): + assert discr_eager.norm( + (pyro_omega_eager[i] - omega_lazy[i]), np.inf) < tol assert discr_eager.norm((pyro_omega_eager[i] - rate), np.inf) < rate_tol - assert False - - -def disable_test_lazy_pyrometheus(ctx_factory): - """Test pyrometheus interface in lazy mode.""" - cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - - eager_actx = PyOpenCLArrayContext( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - lazy_actx = PytatoPyOpenCLArrayContext( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - from mirgecom.mechanisms import get_mechanism_cti - mech_cti = get_mechanism_cti("uiuc") - cantera_soln1 = cantera.Solution(phase_id="gas", source=mech_cti) - cantera_soln2 = cantera.Solution(phase_id="gas", source=mech_cti) - - from mirgecom.thermochemistry import make_pyrometheus_mechanism - eager_pyro = make_pyrometheus_mechanism(eager_actx, cantera_soln1) - lazy_pyro = make_pyrometheus_mechanism(lazy_actx, cantera_soln2) - - from pytools.obj_array import make_obj_array - - def lazy_temperature(energy, y, tguess): - return make_obj_array( - [lazy_pyro.get_temperature_iterate_energy(energy, y, tguess, - do_energy=True)] - ) - lazy_temp = lazy_actx.compile(lazy_temperature) - - print(f"{type(lazy_temp)=}") - input_file = "pyro_state_data.txt" - input_data = np.loadtxt(input_file) - # num_samples = len(input_data) - num_samples = 1 - - print(f"{num_samples=}") - - # time = input_data[:num_samples, 0] - mass_frac = input_data[:num_samples, 1:-1] - nspecies = len(mass_frac) - - temp = input_data[:num_samples, -1] - initial_temp = 1500.0 - - from meshmode.dof_array import DOFArray - temp_dof_lazy = DOFArray(lazy_actx, data=(lazy_actx.from_numpy(temp),)) - y_dof_lazy = make_obj_array([DOFArray(lazy_actx, - data=(lazy_actx.from_numpy(mass_frac[i]),)) - for i in range(nspecies)]) - - temp_dof_eager = DOFArray(lazy_actx, data=(eager_actx.from_numpy(temp),)) - y_dof_eager = make_obj_array( - [DOFArray(eager_actx, data=(eager_actx.from_numpy(mass_frac[i]),)) - for i in range(nspecies)]) - - use_old_temperature = False - - lazy_eager_diff_tol = 1e-4 - - # for i, t, y in zip(range(num_samples), temp, mass_frac): - - t_old_eager = initial_temp + 0*temp_dof_eager - if use_old_temperature and i > 0: - t_old_eager = temp_dof_eager - - # rho = ptk.get_density(cantera.one_atm, t, y) - # e_int_eager = eager_pyro.get_mixture_internal_energy_mass(temp_dof_eager, - # y_dof_eager) - # e_int_lazy = lazy_pyro.get_mixture_internal_energy_mass(temp_dof_lazy, - # y_dof_lazy) - # e_dof = DOFArray(lazy_actx, data=(e_int, )) - print(f"{y_dof_eager=}") - e_int_eager = eager_pyro.get_mixture_internal_energy_mass(temp_dof_eager, - y_dof_eager) - # e_dof = DOFArray(lazy_actx, data=(e_int, )) - - # print(f"{type(e_int)=}") - # print(f"{type(y)=}") - - t_eager = eager_pyro.get_temperature_iterate(e_int_eager, t_old_eager, - y_dof_eager, do_energy=True) - t_eager2 = eager_pyro.get_temperature_iterate(e_int_eager, t_eager, - y_dof_eager, do_energy=True) - t_resid = np.linalg.norm(t_eager - t_eager2, np.inf) - print(f"{t_resid=}") - - assert False - # t_lazy = lazy_actx.to_numpy(lazy_actx.freeze(lazy_temp(e_int_lazy, initial_temp, - # y_dof_lazy))) - - # err = np.linalg.norm(t_eager - t_lazy, np.inf)/np.linalg.norm(t_eager,np.inf) - # print(f"{err=}") - # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) - # assert err < lazy_eager_diff_tol - @pytest.mark.parametrize(("mechname", "rate_tol"), [("uiuc", 1e-12), From eb896667794493809c579ac63a3ceaa4b734f8a9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 2 Oct 2021 10:29:31 -0500 Subject: [PATCH 231/873] Add a wrapper to implement the Newton solve, corresponding test tweak --- mirgecom/thermochemistry.py | 45 ++++++++++++++++++++++++++----------- test/test_eos.py | 32 +++++++++----------------- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 99d832281..4ae4115e4 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -58,12 +58,12 @@ def get_concentrations(self, rho, mass_fractions): # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_iterate_energy(self, e_in, t_in, y): + def get_temperature_update_energy(self, e_in, t_in, y): pv_func = self.get_mixture_specific_heat_cv_mass he_func = self.get_mixture_internal_energy_mass # import ipdb # ipdb.set_trace() - return t_in + (e_in - he_func(t_in, y)) / pv_func(t_in, y) + return (e_in - he_func(t_in, y)) / pv_func(t_in, y) # This hard-codes the Newton iterations to 10 because the convergence # check is not compatible with lazy evaluation. Instead, we plan to check @@ -81,7 +81,7 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): # ipdb.set_trace() # ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess # * ones + t_i = t_guess # * ones # actx = ones.array_context # he_func = actx.compile(he_fun) # pv_func = actx.compile(pv_fun) @@ -92,7 +92,7 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): # from arraycontext import thaw, freeze for _ in range(num_iter): # t_i = thaw(freeze(t_i, actx), actx) - t_i = self.get_temperature_iterate_energy( + t_i = t_i + self.get_temperature_update_energy( enthalpy_or_energy, t_i, y ) @@ -102,18 +102,37 @@ def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_residual(self, enthalpy_or_energy, t_input, y, - do_energy=False): - if do_energy is False: - pv_fun = self.get_mixture_specific_heat_cp_mass - he_fun = self.get_mixture_enthalpy_mass - else: - pv_fun = self.get_mixture_specific_heat_cv_mass - he_fun = self.get_mixture_internal_energy_mass + def get_temperature_wrapper(self, e_in, t_in, y_in): + actx_in = t_in.array_context + from pytools.obj_array import make_obj_array + + def _temp_update(e, t, y): + return make_obj_array( + [self.get_temperature_update_energy(e, t, y)] + ) + + self._lazy_temp_update = actx_in.compile(_temp_update) + + t_i = 1*t_in + num_iter = 5 + from arraycontext import thaw, freeze + for _ in range(num_iter): + t_i = thaw(freeze(t_i, actx_in), actx_in) + t_i = t_i + self._lazy_temp_update( + e_in, t_i, y_in + )[0] + return t_i + + # This hard-codes the Newton iterations to 10 because the convergence + # check is not compatible with lazy evaluation. Instead, we plan to check + # the temperature residual at simulation health checking time. + # FIXME: Occasional convergence check is other-than-ideal; revisit asap. + def get_temperature_residual(self, enthalpy_or_energy, t_input, y): + pv_fun = self.get_mixture_specific_heat_cv_mass + he_fun = self.get_mixture_internal_energy_mass f = enthalpy_or_energy - he_fun(t_input, y) j = pv_fun(t_input, y) - return f / j return PyroWrapper diff --git a/test/test_eos.py b/test/test_eos.py index d2ffdd738..05a3677f7 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -63,12 +63,13 @@ [("uiuc", 1e-12), ]) @pytest.mark.parametrize("y0", [0, 1]) def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): - """Test known pyrometheus mechanisms. + """Test lazy pyrometheus mechanisms. - This test reproduces a pyrometheus-native test in the MIRGE context. + This test reproduces a pyrometheus-native test in the MIRGE context using both + eager and lazy evaluation protocols. The purpose of this test is making sure that + lazy evaluation mode is getting the same answers as eager (within a tolerance). - Tests that the Pyrometheus mechanism code gets the same thermo properties as the - corresponding mechanism in Cantera. + Some sanity checks to make sure eager is matching Cantera are also performed. """ cl_ctx = ctx_factory() queue = cl.CommandQueue(cl_ctx) @@ -103,20 +104,6 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): pyro_eager = make_pyrometheus_mechanism(actx_eager, sol) pyro_lazy = make_pyrometheus_mechanism(actx_lazy, sol) - def get_lazy_temperature(energy, y, tguess): - return make_obj_array( - [pyro_lazy.get_temperature(energy, y, tguess, - do_energy=True)] - ) - - def get_lazy_density(pin, tin, yin): - return make_obj_array( - [pyro_lazy.get_density(pin, tin, yin)] - ) - - lazy_temperature = actx_lazy.compile(get_lazy_temperature) - lazy_density = actx_lazy.compile(get_lazy_density) - nspecies = pyro_eager.num_species print(f"PyrometheusMixture::NumSpecies = {nspecies}") @@ -156,9 +143,7 @@ def get_lazy_density(pin, tin, yin): yin_eager = make_obj_array([can_y[i] * ones_eager for i in range(nspecies)]) pyro_rho_eager = pyro_eager.get_density(pin_eager, tin_eager, yin_eager) - pyro_rho_lazy = lazy_density(pin_lazy, tin_lazy, yin_lazy)[0] - - # actx_lazy.to_numpy(thaw(freeze(pyro_rho_lazy, actx_lazy), actx_lazy)) + pyro_rho_lazy = pyro_lazy.get_density(pin_lazy, tin_lazy, yin_lazy) from arraycontext import thaw, freeze, to_numpy rho_lazy = to_numpy( @@ -172,9 +157,12 @@ def get_lazy_density(pin, tin, yin): thaw(freeze(pyro_e_lazy, actx_lazy), actx_eager), actx_eager ) + # These both take 5 Newton iterations pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager, True) - pyro_t_lazy = lazy_temperature(pyro_e_lazy, tin_lazy, yin_lazy)[0] + pyro_t_lazy = pyro_lazy.get_temperature_wrapper(pyro_e_lazy, tin_lazy, + yin_lazy) + t_lazy = to_numpy(thaw(freeze(pyro_t_lazy, actx_lazy), actx_eager), actx_eager) From 6a48cce3e4d46a0823c148edc4c2ed6d5e010a05 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 2 Oct 2021 10:29:56 -0500 Subject: [PATCH 232/873] Change EOS to use the wrapper --- mirgecom/eos.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 43e98e7c2..9ca97a522 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -744,7 +744,7 @@ def temperature(self, cv: ConservedVars): :class:`~meshmode.dof_array.DOFArray` The temperature of the fluid. """ - from arraycontext import thaw, freeze + # from arraycontext import thaw, freeze @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) @@ -753,10 +753,11 @@ def get_temp(): # t = thaw(freeze(t, cv.array_context), cv.array_context) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass - for _ in range(2): - # t = thaw(freeze(t, cv.array_context), cv.array_context) - t = self._pyrometheus_mech.get_temperature_iterate_energy(e, t, y) - return t + # for _ in range(1): + # # t = thaw(freeze(t, cv.array_context), cv.array_context) + # t = self._pyrometheus_mech.get_temperature_iterate_energy(e, t, y) + # return t + return self._pyrometheus_mech.get_temperature_wrapper(e, t, y) return get_temp() From a9a0d7003ee31e47c2dac9bcf16ba97526e57925 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 4 Oct 2021 13:56:58 -0500 Subject: [PATCH 233/873] Update mixture to use wrapper interface. --- examples/mixture-mpi.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 9ccc7230e..c35da8919 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -55,7 +55,7 @@ from mirgecom.eos import PyrometheusMixture import cantera -import pyrometheus as pyro +# import pyrometheus as pyro from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -177,10 +177,17 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, from mirgecom.mechanisms import get_mechanism_cti mech_cti = get_mechanism_cti("uiuc") sol = cantera.Solution(phase_id="gas", source=mech_cti) - pyrometheus_mechanism = pyro.get_thermochem_class(sol)(actx.np) + from mirgecom.thermochemistry import make_pyrometheus_mechanism - nspecies = pyrometheus_mechanism.num_species - eos = PyrometheusMixture(pyrometheus_mechanism) + # import pyrometheus as pyro + # pyro_class = pyro.get_thermochem_class(cantera_soln) + pyro_mechanism = make_pyrometheus_mechanism(actx, sol) + # pyro_mechanism = UIUCMechanism(actx.np) + # eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) + # pyro_mechanism = pyro.get_thermochem_class(sol)(actx.np) + + nspecies = pyro_mechanism.num_species + eos = PyrometheusMixture(pyro_mechanism) y0s = np.zeros(shape=(nspecies,)) for i in range(nspecies-1): @@ -259,7 +266,7 @@ def my_write_restart(step, t, state): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(dv, component_errors): + def my_health_check(cv, dv, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -273,6 +280,17 @@ def my_health_check(dv, component_errors): if rank == 0: logger.info("Solution diverged from exact soln.") + y = cv.species_mass_fractions + e = eos.internal_energy(cv) / cv.mass + check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y, True) + # temp_resid = pyro_mechanism.get_temperature_residual( + # e, dv.temperature, y, True + # ) + # temp_resid = discr.norm(temp_resid, np.inf) + temp_resid = discr.norm(check_temp - dv.temperature, np.inf) + if temp_resid > 1e-12: + health_error = False + logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") return health_error def my_pre_step(step, t, dt, state): @@ -296,8 +314,8 @@ def my_pre_step(step, t, dt, state): from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(dv, component_errors), comm, - op=MPI.LOR) + health_errors = allsync(my_health_check(state, dv, component_errors), + comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") From 04ddf0a4f04f522e7619bbaf0fbdf7d7d70dc9c5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 4 Oct 2021 13:57:34 -0500 Subject: [PATCH 234/873] Add failing path to EOS test. --- test/test_eos.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/test_eos.py b/test/test_eos.py index 05a3677f7..4648e879e 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -114,6 +114,14 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): y0s[i] = y0 / (10.0 ** (i + 1)) y0s[-1] = 1.0 - np.sum(y0s[:-1]) + def get_temperature_lazy(energy, y, tguess): + return make_obj_array( + [pyro_lazy.get_temperature(energy, y, tguess, + do_energy=True)] + ) + + temp_lazy = actx_lazy.compile(get_temperature_lazy) + for fac in range(1, 11): pressin = fac * press0 tempin = fac * temp0 @@ -165,6 +173,11 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): t_lazy = to_numpy(thaw(freeze(pyro_t_lazy, actx_lazy), actx_eager), actx_eager) + t_lazy_fails = temp_lazy(pyro_e_lazy, tin_lazy, yin_lazy) + + t_lazy2 = to_numpy(thaw(freeze(t_lazy_fails, actx_lazy), actx_eager), + actx_eager) + assert np.linalg.norm(t_lazy - t_lazy2, np.inf) == 0 pyro_p_eager = pyro_eager.get_pressure(pyro_rho_eager, tin_eager, yin_eager) pyro_c_eager = pyro_eager.get_concentrations(pyro_rho_eager, yin_eager) From 1864ce2a53451dd6c4aaa7479584ddaa04808acf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Oct 2021 08:17:40 -0500 Subject: [PATCH 235/873] Save changes for re-install. --- examples/autoignition-mpi.py | 44 ++--- mirgecom/eos.py | 9 +- mirgecom/thermochemistry.py | 345 +---------------------------------- test/test_eos.py | 13 +- 4 files changed, 31 insertions(+), 380 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 0197711e7..22a4488c7 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -245,10 +245,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import ( - make_pyrometheus_mechanism, - UIUCMechanism - ) + from mirgecom.thermochemistry import make_pyrometheus_mechanism # import pyrometheus as pyro # pyro_class = pyro.get_thermochem_class(cantera_soln) pyro_mechanism = make_pyrometheus_mechanism(actx, cantera_soln) @@ -293,11 +290,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, ipdb.set_trace() # Inspection at physics debugging time - if debug: - print("Initial MIRGE-Com state:") - print(f"{current_state=}") - print(f"Initial DV pressure: {eos.pressure(current_state)}") - print(f"Initial DV temperature: {eos.temperature(current_state)}") + # if debug: + # print("Initial MIRGE-Com state:") + # print(f"{current_state=}") + # print(f"Initial DV pressure: {eos.pressure(current_state)}") + # print(f"Initial DV temperature: {eos.temperature(current_state)}") # }}} @@ -365,6 +362,9 @@ def my_write_restart(step, t, state): def my_health_check(cv, dv): health_error = False + if True: + return health_error + from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ or check_range_local(discr, "vol", dv.pressure, 1e5, 2.4e5): @@ -390,6 +390,8 @@ def my_health_check(cv, dv): return health_error def my_get_timestep(t, dt, state): + if True: + return dt # richer interface to calculate {dt,cfl} returns node-local estimates t_remaining = max(0, t_final - t) if constant_cfl: @@ -428,21 +430,21 @@ def my_pre_step(step, t, dt, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) + # ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) - if do_status: - my_write_status(dt, cfl) + # if do_status: + # my_write_status(dt, cfl) - if do_restart: - my_write_restart(step=step, t=t, state=state) + # if do_restart: + # my_write_restart(step=step, t=t, state=state) - if do_viz: - production_rates = eos.get_production_rates(state) - if dv is None: - dv = eos.dependent_vars(state) - my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, - production_rates=production_rates, - ts_field=ts_field, cfl=cfl) + # if do_viz: + # production_rates = eos.get_production_rates(state) + # if dv is None: + # dv = eos.dependent_vars(state) + # my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, + # production_rates=production_rates, + # ts_field=ts_field, cfl=cfl) except MyRuntimeError: if rank == 0: diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 9ca97a522..3366afab3 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -749,15 +749,10 @@ def temperature(self, cv: ConservedVars): @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): - t = self._tguess + 0*cv.mass - # t = thaw(freeze(t, cv.array_context), cv.array_context) + tguess = self._tguess + 0*cv.mass y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass - # for _ in range(1): - # # t = thaw(freeze(t, cv.array_context), cv.array_context) - # t = self._pyrometheus_mech.get_temperature_iterate_energy(e, t, y) - # return t - return self._pyrometheus_mech.get_temperature_wrapper(e, t, y) + return self._pyrometheus_mech.get_temperature(e, tguess, y) return get_temp() diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 4ae4115e4..82b76fe09 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,7 +1,6 @@ r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. .. autofunction:: make_pyrometheus_mechanism -.. autoclass:: UIUCMechanism """ __copyright__ = """ @@ -28,8 +27,6 @@ THE SOFTWARE. """ -import numpy as np - def _pyro_thermochem_wrapper_class(cantera_soln): """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. @@ -70,71 +67,14 @@ def get_temperature_update_energy(self, e_in, t_in, y): # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): - # if do_energy is False: - # pv_fun = self.get_mixture_specific_heat_cp_mass - # he_fun = self.get_mixture_enthalpy_mass - # else: - # pv_fun = self.get_mixture_specific_heat_cv_mass - # he_fun = self.get_mixture_internal_energy_mass - - # import ipdb - # ipdb.set_trace() - - # ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess # * ones - # actx = ones.array_context - # he_func = actx.compile(he_fun) - # pv_func = actx.compile(pv_fun) - # he_func = he_fun - # pv_func = pv_fun - - num_iter = 1 - # from arraycontext import thaw, freeze + t_i = t_guess + num_iter = 5 for _ in range(num_iter): - # t_i = thaw(freeze(t_i, actx), actx) t_i = t_i + self.get_temperature_update_energy( enthalpy_or_energy, t_i, y ) - - return t_i - - # This hard-codes the Newton iterations to 10 because the convergence - # check is not compatible with lazy evaluation. Instead, we plan to check - # the temperature residual at simulation health checking time. - # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_wrapper(self, e_in, t_in, y_in): - - actx_in = t_in.array_context - from pytools.obj_array import make_obj_array - - def _temp_update(e, t, y): - return make_obj_array( - [self.get_temperature_update_energy(e, t, y)] - ) - - self._lazy_temp_update = actx_in.compile(_temp_update) - - t_i = 1*t_in - num_iter = 5 - from arraycontext import thaw, freeze - for _ in range(num_iter): - t_i = thaw(freeze(t_i, actx_in), actx_in) - t_i = t_i + self._lazy_temp_update( - e_in, t_i, y_in - )[0] return t_i - # This hard-codes the Newton iterations to 10 because the convergence - # check is not compatible with lazy evaluation. Instead, we plan to check - # the temperature residual at simulation health checking time. - # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_residual(self, enthalpy_or_energy, t_input, y): - pv_fun = self.get_mixture_specific_heat_cv_mass - he_fun = self.get_mixture_internal_energy_mass - f = enthalpy_or_energy - he_fun(t_input, y) - j = pv_fun(t_input, y) - return f / j - return PyroWrapper @@ -158,284 +98,3 @@ def make_pyrometheus_mechanism(actx, cantera_soln): :mod:`pyrometheus` ThermoChem class """ return _pyro_thermochem_wrapper_class(cantera_soln)(actx.np) - - -class UIUCMechanism: - """ - .. attribute:: model_name - .. attribute:: num_elements - .. attribute:: num_species - .. attribute:: num_reactions - .. attribute:: num_falloff - .. attribute:: one_atm - - Returns 1 atm in SI units of pressure (Pa). - - .. attribute:: gas_constant - .. attribute:: species_names - .. attribute:: species_indices - - .. automethod:: get_specific_gas_constant - .. automethod:: get_density - .. automethod:: get_pressure - .. automethod:: get_mix_molecular_weight - .. automethod:: get_concentrations - .. automethod:: get_mixture_specific_heat_cp_mass - .. automethod:: get_mixture_specific_heat_cv_mass - .. automethod:: get_mixture_enthalpy_mass - .. automethod:: get_mixture_internal_energy_mass - .. automethod:: get_species_specific_heats_r - .. automethod:: get_species_enthalpies_rt - .. automethod:: get_species_entropies_r - .. automethod:: get_species_gibbs_rt - .. automethod:: get_equilibrium_constants - .. automethod:: get_temperature - .. automethod:: __init__ - """ - - def __init__(self, usr_np=np): - """Initialize thermochemistry object for a mechanism. - - Parameters - ---------- - usr_np - :mod:`numpy`-like namespace providing at least the following functions, - for any array ``X`` of the bulk array type: - - - ``usr_np.log(X)`` (like :data:`numpy.log`) - - ``usr_np.log10(X)`` (like :data:`numpy.log10`) - - ``usr_np.exp(X)`` (like :data:`numpy.exp`) - - ``usr_np.where(X > 0, X_yes, X_no)`` (like :func:`numpy.where`) - - ``usr_np.linalg.norm(X, np.inf)`` (like :func:`numpy.linalg.norm`) - - where the "bulk array type" is a type that offers arithmetic analogous - to :class:`numpy.ndarray` and is used to hold all types of (potentialy - volumetric) "bulk data", such as temperature, pressure, mass fractions, - etc. This parameter defaults to *actual numpy*, so it can be ignored - unless it is needed by the user (e.g. for purposes of - GPU processing or automatic differentiation). - - """ - - self.usr_np = usr_np - self.model_name = 'mechs/uiuc.cti' - self.num_elements = 4 - self.num_species = 7 - self.num_reactions = 3 - self.num_falloff = 0 - - self.one_atm = 101325.0 - self.gas_constant = 8314.46261815324 - self.big_number = 1.0e300 - - self.species_names = ['C2H4', 'O2', 'CO2', 'CO', 'H2O', 'H2', 'N2'] - self.species_indices = {'C2H4': 0, 'O2': 1, 'CO2': 2, 'CO': 3, 'H2O': 4, 'H2': 5, 'N2': 6} - - self.wts = np.array([28.054, 31.998, 44.009, 28.009999999999998, 18.015, 2.016, 28.014]) - self.iwts = 1/self.wts - - def _pyro_zeros_like(self, argument): - # FIXME: This is imperfect, as a NaN will stay a NaN. - return 0 * argument - - def _pyro_make_array(self, res_list): - """This works around (e.g.) numpy.exp not working with object - arrays of numpy scalars. It defaults to making object arrays, however - if an array consists of all scalars, it makes a "plain old" - :class:`numpy.ndarray`. - - See ``this numpy bug `__ - for more context. - """ - - from numbers import Number - all_numbers = all(isinstance(e, Number) for e in res_list) - - dtype = np.float64 if all_numbers else np.object - result = np.empty((len(res_list),), dtype=dtype) - - # 'result[:] = res_list' may look tempting, however: - # https://github.com/numpy/numpy/issues/16564 - for idx in range(len(res_list)): - result[idx] = res_list[idx] - - return result - - def _pyro_norm(self, argument, normord): - """This works around numpy.linalg norm not working with scalars. - - If the argument is a regular ole number, it uses :func:`numpy.abs`, - otherwise it uses ``usr_np.linalg.norm``. - """ - # Wrap norm for scalars - - from numbers import Number - - if isinstance(argument, Number): - return np.abs(argument) - return self.usr_np.linalg.norm(argument, normord) - - def species_name(self, species_index): - return self.species_name[species_index] - - def species_index(self, species_name): - return self.species_indices[species_name] - - def get_specific_gas_constant(self, mass_fractions): - return self.gas_constant * ( - + self.iwts[0]*mass_fractions[0] - + self.iwts[1]*mass_fractions[1] - + self.iwts[2]*mass_fractions[2] - + self.iwts[3]*mass_fractions[3] - + self.iwts[4]*mass_fractions[4] - + self.iwts[5]*mass_fractions[5] - + self.iwts[6]*mass_fractions[6] - ) - - def get_density(self, p, temperature, mass_fractions): - mmw = self.get_mix_molecular_weight(mass_fractions) - rt = self.gas_constant * temperature - return p * mmw / rt - - def get_pressure(self, rho, temperature, mass_fractions): - mmw = self.get_mix_molecular_weight(mass_fractions) - rt = self.gas_constant * temperature - return rho * rt / mmw - - def get_mix_molecular_weight(self, mass_fractions): - return 1/( - + self.iwts[0]*mass_fractions[0] - + self.iwts[1]*mass_fractions[1] - + self.iwts[2]*mass_fractions[2] - + self.iwts[3]*mass_fractions[3] - + self.iwts[4]*mass_fractions[4] - + self.iwts[5]*mass_fractions[5] - + self.iwts[6]*mass_fractions[6] - ) - - def get_concentrations(self, rho, mass_fractions): - return self.iwts * rho * mass_fractions - - def get_mass_average_property(self, mass_fractions, spec_property): - return sum([mass_fractions[i] * spec_property[i] * self.iwts[i] - for i in range(self.num_species)]) - - def get_mixture_specific_heat_cp_mass(self, temperature, mass_fractions): - cp0_r = self.get_species_specific_heats_r(temperature) - cpmix = self.get_mass_average_property(mass_fractions, cp0_r) - return self.gas_constant * cpmix - - def get_mixture_specific_heat_cv_mass(self, temperature, mass_fractions): - cp0_r = self.get_species_specific_heats_r(temperature) - 1.0 - cpmix = self.get_mass_average_property(mass_fractions, cp0_r) - return self.gas_constant * cpmix - - def get_mixture_enthalpy_mass(self, temperature, mass_fractions): - h0_rt = self.get_species_enthalpies_rt(temperature) - hmix = self.get_mass_average_property(mass_fractions, h0_rt) - return self.gas_constant * temperature * hmix - - def get_mixture_internal_energy_mass(self, temperature, mass_fractions): - e0_rt = self.get_species_enthalpies_rt(temperature) - 1.0 - emix = self.get_mass_average_property(mass_fractions, e0_rt) - return self.gas_constant * temperature * emix - - def get_species_specific_heats_r(self, temperature): - return self._pyro_make_array([ - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116 + 0.0146454151*temperature + -6.71077915e-06*temperature**2 + 1.47222923e-09*temperature**3 + -1.25706061e-13*temperature**4, 3.95920148 + -0.00757052247*temperature + 5.70990292e-05*temperature**2 + -6.91588753e-08*temperature**3 + 2.69884373e-11*temperature**4), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00148308754*temperature + -7.57966669e-07*temperature**2 + 2.09470555e-10*temperature**3 + -2.16717794e-14*temperature**4, 3.78245636 + -0.00299673416*temperature + 9.84730201e-06*temperature**2 + -9.68129509e-09*temperature**3 + 3.24372837e-12*temperature**4), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029 + 0.00441437026*temperature + -2.21481404e-06*temperature**2 + 5.23490188e-10*temperature**3 + -4.72084164e-14*temperature**4, 2.35677352 + 0.00898459677*temperature + -7.12356269e-06*temperature**2 + 2.45919022e-09*temperature**3 + -1.43699548e-13*temperature**4), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561 + 0.00206252743*temperature + -9.98825771e-07*temperature**2 + 2.30053008e-10*temperature**3 + -2.03647716e-14*temperature**4, 3.57953347 + -0.00061035368*temperature + 1.01681433e-06*temperature**2 + 9.07005884e-10*temperature**3 + -9.04424499e-13*temperature**4), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00217691804*temperature + -1.64072518e-07*temperature**2 + -9.7041987e-11*temperature**3 + 1.68200992e-14*temperature**4, 4.19864056 + -0.0020364341*temperature + 6.52040211e-06*temperature**2 + -5.48797062e-09*temperature**3 + 1.77197817e-12*temperature**4), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -4.94024731e-05*temperature + 4.99456778e-07*temperature**2 + -1.79566394e-10*temperature**3 + 2.00255376e-14*temperature**4, 2.34433112 + 0.00798052075*temperature + -1.9478151e-05*temperature**2 + 2.01572094e-08*temperature**3 + -7.37611761e-12*temperature**4), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0014879768*temperature + -5.68476e-07*temperature**2 + 1.0097038e-10*temperature**3 + -6.753351e-15*temperature**4, 3.298677 + 0.0014082404*temperature + -3.963222e-06*temperature**2 + 5.641515e-09*temperature**3 + -2.444854e-12*temperature**4), - ]) - - def get_species_enthalpies_rt(self, temperature): - return self._pyro_make_array([ - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116 + 0.00732270755*temperature + -2.2369263833333335e-06*temperature**2 + 3.680573075e-10*temperature**3 + -2.51412122e-14*temperature**4 + 4939.88614 / temperature, 3.95920148 + -0.003785261235*temperature + 1.9033009733333333e-05*temperature**2 + -1.7289718825e-08*temperature**3 + 5.3976874600000004e-12*temperature**4 + 5089.77593 / temperature), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00074154377*temperature + -2.526555563333333e-07*temperature**2 + 5.236763875e-11*temperature**3 + -4.33435588e-15*temperature**4 + -1088.45772 / temperature, 3.78245636 + -0.00149836708*temperature + 3.282434003333333e-06*temperature**2 + -2.4203237725e-09*temperature**3 + 6.48745674e-13*temperature**4 + -1063.94356 / temperature), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029 + 0.00220718513*temperature + -7.382713466666667e-07*temperature**2 + 1.30872547e-10*temperature**3 + -9.44168328e-15*temperature**4 + -48759.166 / temperature, 2.35677352 + 0.004492298385*temperature + -2.3745208966666665e-06*temperature**2 + 6.14797555e-10*temperature**3 + -2.8739909599999997e-14*temperature**4 + -48371.9697 / temperature), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561 + 0.001031263715*temperature + -3.329419236666667e-07*temperature**2 + 5.7513252e-11*temperature**3 + -4.07295432e-15*temperature**4 + -14151.8724 / temperature, 3.57953347 + -0.00030517684*temperature + 3.3893811e-07*temperature**2 + 2.26751471e-10*temperature**3 + -1.808848998e-13*temperature**4 + -14344.086 / temperature), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00108845902*temperature + -5.469083933333333e-08*temperature**2 + -2.426049675e-11*temperature**3 + 3.36401984e-15*temperature**4 + -30004.2971 / temperature, 4.19864056 + -0.00101821705*temperature + 2.17346737e-06*temperature**2 + -1.371992655e-09*temperature**3 + 3.54395634e-13*temperature**4 + -30293.7267 / temperature), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -2.470123655e-05*temperature + 1.6648559266666665e-07*temperature**2 + -4.48915985e-11*temperature**3 + 4.00510752e-15*temperature**4 + -950.158922 / temperature, 2.34433112 + 0.003990260375*temperature + -6.4927169999999995e-06*temperature**2 + 5.03930235e-09*temperature**3 + -1.4752235220000002e-12*temperature**4 + -917.935173 / temperature), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0007439884*temperature + -1.8949200000000001e-07*temperature**2 + 2.5242595e-11*temperature**3 + -1.3506701999999999e-15*temperature**4 + -922.7977 / temperature, 3.298677 + 0.0007041202*temperature + -1.3210739999999999e-06*temperature**2 + 1.41037875e-09*temperature**3 + -4.889707999999999e-13*temperature**4 + -1020.8999 / temperature), - ]) - - def get_species_entropies_r(self, temperature): - return self._pyro_make_array([ - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116*self.usr_np.log(temperature) + 0.0146454151*temperature + -3.355389575e-06*temperature**2 + 4.907430766666667e-10*temperature**3 + -3.142651525e-14*temperature**4 + 10.3053693, 3.95920148*self.usr_np.log(temperature) + -0.00757052247*temperature + 2.85495146e-05*temperature**2 + -2.3052958433333332e-08*temperature**3 + 6.747109325e-12*temperature**4 + 4.09733096), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784*self.usr_np.log(temperature) + 0.00148308754*temperature + -3.789833345e-07*temperature**2 + 6.982351833333333e-11*temperature**3 + -5.41794485e-15*temperature**4 + 5.45323129, 3.78245636*self.usr_np.log(temperature) + -0.00299673416*temperature + 4.923651005e-06*temperature**2 + -3.2270983633333334e-09*temperature**3 + 8.109320925e-13*temperature**4 + 3.65767573), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029*self.usr_np.log(temperature) + 0.00441437026*temperature + -1.10740702e-06*temperature**2 + 1.7449672933333335e-10*temperature**3 + -1.18021041e-14*temperature**4 + 2.27163806, 2.35677352*self.usr_np.log(temperature) + 0.00898459677*temperature + -3.561781345e-06*temperature**2 + 8.197300733333333e-10*temperature**3 + -3.5924887e-14*temperature**4 + 9.90105222), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561*self.usr_np.log(temperature) + 0.00206252743*temperature + -4.994128855e-07*temperature**2 + 7.6684336e-11*temperature**3 + -5.0911929e-15*temperature**4 + 7.81868772, 3.57953347*self.usr_np.log(temperature) + -0.00061035368*temperature + 5.08407165e-07*temperature**2 + 3.023352946666667e-10*temperature**3 + -2.2610612475e-13*temperature**4 + 3.50840928), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249*self.usr_np.log(temperature) + 0.00217691804*temperature + -8.2036259e-08*temperature**2 + -3.2347329e-11*temperature**3 + 4.2050248e-15*temperature**4 + 4.9667701, 4.19864056*self.usr_np.log(temperature) + -0.0020364341*temperature + 3.260201055e-06*temperature**2 + -1.82932354e-09*temperature**3 + 4.429945425e-13*temperature**4 + -0.849032208), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792*self.usr_np.log(temperature) + -4.94024731e-05*temperature + 2.49728389e-07*temperature**2 + -5.985546466666667e-11*temperature**3 + 5.0063844e-15*temperature**4 + -3.20502331, 2.34433112*self.usr_np.log(temperature) + 0.00798052075*temperature + -9.7390755e-06*temperature**2 + 6.7190698e-09*temperature**3 + -1.8440294025e-12*temperature**4 + 0.683010238), - self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664*self.usr_np.log(temperature) + 0.0014879768*temperature + -2.84238e-07*temperature**2 + 3.3656793333333334e-11*temperature**3 + -1.68833775e-15*temperature**4 + 5.980528, 3.298677*self.usr_np.log(temperature) + 0.0014082404*temperature + -1.981611e-06*temperature**2 + 1.8805050000000002e-09*temperature**3 + -6.112135e-13*temperature**4 + 3.950372), - ]) - - def get_species_gibbs_rt(self, temperature): - h0_rt = self.get_species_enthalpies_rt(temperature) - s0_r = self.get_species_entropies_r(temperature) - return h0_rt - s0_r - - def get_equilibrium_constants(self, temperature): - rt = self.gas_constant * temperature - c0 = self.usr_np.log(self.one_atm / rt) - - g0_rt = self.get_species_gibbs_rt(temperature) - return self._pyro_make_array([ - -0.17364695002734*temperature, - g0_rt[2] + -1*-0.5*c0 + -1*(g0_rt[3] + 0.5*g0_rt[1]), - g0_rt[4] + -1*-0.5*c0 + -1*(g0_rt[5] + 0.5*g0_rt[1]), - ]) - - def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): - if do_energy is False: - pv_fun = self.get_mixture_specific_heat_cp_mass - he_fun = self.get_mixture_enthalpy_mass - else: - pv_fun = self.get_mixture_specific_heat_cv_mass - he_fun = self.get_mixture_internal_energy_mass - - # num_iter = 1 - ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess * ones - - # for _ in range(num_iter): - # t_i = t_i + (enthalpy_or_energy - he_fun(t_i, y)) / pv_fun(t_i, y) - # return t_i - return t_i + (enthalpy_or_energy - he_fun(t_i, y)) / pv_fun(t_i, y) - - def get_fwd_rate_coefficients(self, temperature, concentrations): - ones = self._pyro_zeros_like(temperature) + 1.0 - k_fwd = [ - self.usr_np.exp(26.594857854425133 + -1*(17864.293439206183 / temperature)) * ones, - self.usr_np.exp(12.693776816787125 + 0.7*self.usr_np.log(temperature) + -1*(6038.634401985189 / temperature)) * ones, - self.usr_np.exp(18.302572655472037 + -1*(17612.683672456802 / temperature)) * ones, - ] - - return self._pyro_make_array(k_fwd) - - def get_net_rates_of_progress(self, temperature, concentrations): - k_fwd = self.get_fwd_rate_coefficients(temperature, concentrations) - log_k_eq = self.get_equilibrium_constants(temperature) - k_eq = self.usr_np.exp(log_k_eq) - return self._pyro_make_array([ - k_fwd[0]*concentrations[0]**0.5*concentrations[1]**0.65, - k_fwd[1]*(concentrations[3]*concentrations[1]**0.5 + -1*k_eq[1]*concentrations[2]), - k_fwd[2]*(concentrations[5]*concentrations[1]**0.5 + -1*k_eq[2]*concentrations[4]), - ]) - - def get_net_production_rates(self, rho, temperature, mass_fractions): - c = self.get_concentrations(rho, mass_fractions) - r_net = self.get_net_rates_of_progress(temperature, c) - ones = self._pyro_zeros_like(r_net[0]) + 1.0 - return self._pyro_make_array([ - -1*r_net[0] * ones, - -1*(r_net[0] + 0.5*r_net[1] + 0.5*r_net[2]) * ones, - r_net[1] * ones, - 2.0*r_net[0] + -1*r_net[1] * ones, - r_net[2] * ones, - 2.0*r_net[0] + -1*r_net[2] * ones, - 0.0 * ones, - ]) diff --git a/test/test_eos.py b/test/test_eos.py index 4648e879e..af985e365 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -37,7 +37,8 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext, + SingleGridWorkBalancingPytatoArrayContext ) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context @@ -77,7 +78,7 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - actx_lazy = PytatoPyOpenCLArrayContext( + actx_lazy = SingleGridWorkBalancingPytatoArrayContext( queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) @@ -168,16 +169,10 @@ def get_temperature_lazy(energy, y, tguess): # These both take 5 Newton iterations pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager, True) - pyro_t_lazy = pyro_lazy.get_temperature_wrapper(pyro_e_lazy, tin_lazy, - yin_lazy) + pyro_t_lazy = temp_lazy(pyro_e_lazy, tin_lazy, yin_lazy) t_lazy = to_numpy(thaw(freeze(pyro_t_lazy, actx_lazy), actx_eager), actx_eager) - t_lazy_fails = temp_lazy(pyro_e_lazy, tin_lazy, yin_lazy) - - t_lazy2 = to_numpy(thaw(freeze(t_lazy_fails, actx_lazy), actx_eager), - actx_eager) - assert np.linalg.norm(t_lazy - t_lazy2, np.inf) == 0 pyro_p_eager = pyro_eager.get_pressure(pyro_rho_eager, tin_eager, yin_eager) pyro_c_eager = pyro_eager.get_concentrations(pyro_rho_eager, yin_eager) From 6128d44659e160e22bce87ac66fe70420190f3d7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Oct 2021 11:35:07 -0500 Subject: [PATCH 236/873] Correct some mistakes in isothermal noslip imp --- mirgecom/boundary.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index a088062e5..5d7eb998a 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -462,8 +462,7 @@ def isothermal_noslip_pair(self, discr, btag, eos, cv, **kwargs): """Get the interior and exterior solution (*cv*) on the boundary.""" cv_minus = discr.project("vol", btag, cv) - # t_plus = self._wall_temp + 0*cv_minus.mass - t_plus = eos.temperature(cv_minus) + t_plus = self._wall_temp + 0*cv_minus.mass velocity_plus = -cv_minus.momentum / cv_minus.mass mass_frac_plus = cv_minus.species_mass / cv_minus.mass @@ -483,7 +482,7 @@ def isothermal_noslip_pair(self, discr, btag, eos, cv, **kwargs): def temperature_bc(self, nodes, cv, temperature, eos, **kwargs): """Get temperature value to weakly prescribe wall bc.""" - return 2*self._wall_temp - temperature + return 0*temperature + self._wall_temp class PrescribedViscousBoundary(FluidBC): From ed0ae0dbf899a9caebdd4326282a0a10dbb68193 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Oct 2021 16:34:53 -0500 Subject: [PATCH 237/873] Use correct BC --- examples/poiseuille-mpi.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index c063d7aeb..5fb1e6b26 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -52,7 +52,7 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedViscousBoundary, - IsothermalNoSlipBoundary + AdiabaticNoslipMovingBoundary ) from mirgecom.transport import SimpleTransport from mirgecom.eos import IdealSingleGas @@ -118,9 +118,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control timestepper = rk4_step - t_final = 1e-6 + t_final = 1e-7 current_cfl = 0.05 - current_dt = 1e-8 + current_dt = 1e-10 current_t = 0 constant_cfl = True current_step = 0 @@ -153,7 +153,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch - npts_axis = (50, 30) + n_refine = 5 + npts_x = 10 + npts_y = 6 * n_refine + npts_axis = (npts_x, npts_y) box_ll = (left_boundary_location, ybottom) box_ur = (right_boundary_location, ytop) generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) @@ -162,7 +165,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - order = 1 + order = 2 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -226,8 +229,8 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), - DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} + DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} if rst_filename: current_t = restart_data["t"] @@ -311,7 +314,7 @@ def my_health_check(state, dv, component_errors): from mirgecom.simutil import allsync if allsync(check_range_local(discr, "vol", dv.pressure, 9.999e4, 1.00101e5), - comm, op=MPI.LOR): + comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min p_min = nodal_min(discr, "vol", dv.pressure) @@ -330,7 +333,7 @@ def my_health_check(state, dv, component_errors): t_max = nodal_max(discr, "vol", dv.temperature) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") - exittol = 10 + exittol = .1 if max(component_errors) > exittol: health_error = True if rank == 0: From 10724ec8b451af032545b7d98ed6e12540c38dd0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 7 Oct 2021 19:54:15 -0500 Subject: [PATCH 238/873] Add hotplate example --- examples/hotplate-mpi.py | 469 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 469 insertions(+) create mode 100644 examples/hotplate-mpi.py diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py new file mode 100644 index 000000000..61df85a37 --- /dev/null +++ b/examples/hotplate-mpi.py @@ -0,0 +1,469 @@ +"""Demonstrate a fluid between two hot plates in 2d.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial + +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa + +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer +from grudge.dof_desc import DTAG_BOUNDARY + +from mirgecom.fluid import make_conserved +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import get_sim_timestep + +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + PrescribedViscousBoundary, + IsothermalNoSlipBoundary +) +from mirgecom.transport import SimpleTransport +from mirgecom.eos import IdealSingleGas + +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None): + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): + """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + # timestepping control + timestepper = rk4_step + t_final = 1e-6 + current_cfl = .1 + current_dt = 1e-8 + current_t = 0 + constant_cfl = False + current_step = 0 + + # some i/o frequencies + nstatus = 1 + nviz = 1 + nrestart = 100 + nhealth = 1 + + # some geometry setup + dim = 2 + if dim != 2: + raise ValueError("This example must be run with dim = 2.") + left_boundary_location = 0 + right_boundary_location = 0.1 + bottom_boundary_location = 0 + top_boundary_location = .02 + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + n_refine = 2 + npts_x = 6 * n_refine + npts_y = 4 * n_refine + npts_axis = (npts_x, npts_y) + box_ll = (left_boundary_location, bottom_boundary_location) + box_ur = (right_boundary_location, top_boundary_location) + generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) + from mirgecom.simutil import generate_and_distribute_mesh + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + order = 1 + discr = EagerDGDiscretization( + actx, local_mesh, order=order, mpi_communicator=comm + ) + nodes = thaw(actx, discr.nodes()) + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:1.9e}, "), + ("max_temperature", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + mu = 1.0 + kappa = 1.0 + + top_boundary_temperature = 400 + bottom_boundary_temperature = 300 + + def tramp_2d(x_vec, eos, cv=None, **kwargs): + y = x_vec[1] + ones = 0*y + 1.0 + l_y = top_boundary_location - bottom_boundary_location + p0 = eos.gas_const() * bottom_boundary_temperature + delta_temp = top_boundary_temperature - bottom_boundary_temperature + dtdy = delta_temp / l_y + temperature_y = bottom_boundary_temperature + dtdy*y + mass = p0 / (eos.gas_const() * temperature_y) + e0 = p0 / (eos.gamma() - 1.0) + velocity = 0 * x_vec + energy = e0 * ones + momentum = mass * velocity + return make_conserved(2, mass=mass, energy=energy, momentum=momentum) + + initializer = tramp_2d + eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=mu, + thermal_conductivity=kappa)) + exact = initializer(x_vec=nodes, eos=eos) + + boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary( + wall_temperature=bottom_boundary_temperature), + DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary( + wall_temperature=top_boundary_temperature)} + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_state = restart_data["state"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_state = exact + + vis_timer = None + + visualizer = make_visualizer(discr, order) + + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=casename, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_status(step, t, dt, dv, state, component_errors): + from grudge.op import nodal_min, nodal_max + p_min = nodal_min(discr, "vol", dv.pressure) + p_max = nodal_max(discr, "vol", dv.pressure) + t_min = nodal_min(discr, "vol", dv.temperature) + t_max = nodal_max(discr, "vol", dv.temperature) + if constant_cfl: + cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + cfl = nodal_max(discr, "vol", + get_viscous_cfl(discr, eos, dt, state)) + if rank == 0: + logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" + f"----- Pressure({p_min}, {p_max})\n" + f"----- Temperature({t_min}, {t_max})\n" + "----- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + + def my_write_viz(step, t, state, dv=None): + if dv is None: + dv = eos.dependent_vars(state) + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact", exact), + ("resid", resid)] + + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, component_errors): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + from mirgecom.simutil import allsync + if allsync(check_range_local(discr, "vol", dv.pressure, 86129, 86131), + comm, op=MPI.LOR): + health_error = True + from grudge.op import nodal_max, nodal_min + p_min = nodal_min(discr, "vol", dv.pressure) + p_max = nodal_max(discr, "vol", dv.pressure) + logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + + if check_naninf_local(discr, "vol", dv.temperature): + health_error = True + logger.info(f"{rank=}: NANs/INFs in temperature data.") + + if allsync(check_range_local(discr, "vol", dv.temperature, 299, 401), + comm, op=MPI.LOR): + health_error = True + from grudge.op import nodal_max, nodal_min + t_min = nodal_min(discr, "vol", dv.temperature) + t_max = nodal_max(discr, "vol", dv.temperature) + logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + + exittol = .1 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact soln.") + + return health_error + + def my_pre_step(step, t, dt, state): + try: + dv = None + component_errors = None + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if do_health: + dv = eos.dependent_vars(state) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + from mirgecom.simutil import allsync + health_errors = allsync( + my_health_check(state, dv, component_errors), comm, + op=MPI.LOR + ) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(step=step, t=t, state=state, dv=dv) + + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, + t_final, constant_cfl) + + if do_status: # needed because logging fails to make output + if dv is None: + dv = eos.dependent_vars(state) + if component_errors is None: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(step=step, t=t, dt=dt, dv=dv, state=state, + component_errors=component_errors) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise + + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return ns_operator(discr, eos=eos, boundaries=boundaries, cv=state, t=t) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + state=current_state, t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = eos.dependent_vars(current_state) + final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, current_state, exact) + + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_status(step=current_step, t=current_t, dt=final_dt, dv=final_dv, + state=current_state, component_errors=component_errors) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + +if __name__ == "__main__": + import argparse + casename = "hotplate" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) + +# vim: foldmethod=marker From 60a7b86e90ebc5a515eb7ea16e3a6ccba2a0666f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 11 Oct 2021 13:30:21 -0500 Subject: [PATCH 239/873] Fix Poiseuille test boundary issue --- test/test_navierstokes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_navierstokes.py b/test/test_navierstokes.py index 10ef64829..0f2e18ba5 100644 --- a/test/test_navierstokes.py +++ b/test/test_navierstokes.py @@ -45,7 +45,7 @@ from mirgecom.boundary import ( DummyBoundary, PrescribedViscousBoundary, - IsothermalNoSlipBoundary + AdiabaticNoslipMovingBoundary ) from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport @@ -286,8 +286,8 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): boundaries = { DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), - DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} + DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv_input, t=0.0) From d28d5c0f8e27b975f3af73ae760e3cdd03e1fbd5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 12 Oct 2021 12:57:57 -0500 Subject: [PATCH 240/873] Compile utils used by callbacks, make DV a bona-fide array container, autoignition working in lazy mode. --- examples/autoignition-mpi.py | 98 +++++++++++++++++++++--------------- mirgecom/eos.py | 4 +- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 22a4488c7..86b558bfd 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -43,7 +43,7 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging - +from pytools.obj_array import make_obj_array from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, @@ -125,7 +125,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Time loop control parameters current_step = 0 - t_final = 1e-8 + t_final = 1e-7 current_cfl = 1.0 current_dt = 1e-9 current_t = 0 @@ -134,7 +134,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # i.o frequencies nstatus = 1000 nviz = 1000 - nhealth = 1 + nhealth = 10 nrestart = 1000 # }}} Time stepping control @@ -177,19 +177,20 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, discr, dim, - extract_vars_for_logging, units_for_logging) + # logmgr_add_many_discretization_quantities(logmgr, discr, dim, + # extract_vars_for_logging, units_for_logging) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) + # ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + # ("max_pressure", "{value:1.9e})\n"), + # ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), + # ("max_temperature", "{value:7g})\n"), + logmgr.add_watches([ ("step.max", "step = {value}, "), ("t_sim.max", "sim time: {value:1.6e} s\n"), - ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), - ("max_pressure", "{value:1.9e})\n"), - ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), - ("max_temperature", "{value:7g})\n"), ("t_step.max", "------- step walltime: {value:6g} s, "), ("t_log.max", "log walltime: {value:6g} s") ]) @@ -252,6 +253,17 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # pyro_mechanism = UIUCMechanism(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) + def get_temperature_mass_energy(state, temperature): + y = state.species_mass_fractions + e = eos.internal_energy(state) / state.mass + return make_obj_array( + [pyro_mechanism.get_temperature(e, temperature, y, True)] + ) + + compute_dependent_vars = actx.compile(eos.dependent_vars) + compute_temperature = actx.compile(get_temperature_mass_energy) + + # }}} # {{{ MIRGE-Com state initialization @@ -286,8 +298,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes) - import ipdb - ipdb.set_trace() + # import ipdb + # ipdb.set_trace() # Inspection at physics debugging time # if debug: @@ -330,7 +342,7 @@ def my_write_status(dt, cfl): def my_write_viz(step, t, dt, state, ts_field=None, dv=None, production_rates=None, cfl=None): if dv is None: - dv = eos.dependent_vars(state) + dv = compute_dependent_vars(state) if production_rates is None: production_rates = eos.get_production_rates(state) if ts_field is None: @@ -361,30 +373,34 @@ def my_write_restart(step, t, state): write_restart_file(actx, rst_data, rst_fname, comm) def my_health_check(cv, dv): + import grudge.op as op health_error = False - if True: - return health_error + + from arraycontext import thaw, freeze + temperature = thaw(freeze(dv.temperature, actx), actx) + pressure = thaw(freeze(dv.pressure, actx), actx) from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, 1e5, 2.4e5): + if check_naninf_local(discr, "vol", pressure): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") + if check_range_local(discr, "vol", pressure, 1e5, 2.6e5): + health_error = True + logger.info(f"{rank=}: Pressure range violation.") - if check_range_local(discr, "vol", dv.temperature, 1.498e3, 1.52e3): + if check_naninf_local(discr, "vol", temperature): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") + if check_range_local(discr, "vol", temperature, 1.498e3, 1.6e3): + health_error = True + logger.info(f"{rank=}: Temperature range violation.") - y = cv.species_mass_fractions - e = eos.internal_energy(cv) / cv.mass - check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y, True) - # temp_resid = pyro_mechanism.get_temperature_residual( - # e, dv.temperature, y, True - # ) - # temp_resid = discr.norm(temp_resid, np.inf) - temp_resid = discr.norm(check_temp - dv.temperature, np.inf) + check_temp, = compute_temperature(cv, temperature) + check_temp = thaw(freeze(check_temp, actx), actx) + temp_resid = actx.np.abs(check_temp - temperature) + temp_resid = op.nodal_max_loc(discr, "vol", temp_resid) if temp_resid > 1e-12: - health_error = False + health_error = True logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") return health_error @@ -422,7 +438,9 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) + if dv is None: + # dv = eos.dependent_vars(state) + dv = compute_dependent_vars(state) from mirgecom.simutil import allsync health_errors = allsync(my_health_check(state, dv), comm, op=MPI.LOR) if health_errors: @@ -442,15 +460,15 @@ def my_pre_step(step, t, dt, state): # production_rates = eos.get_production_rates(state) # if dv is None: # dv = eos.dependent_vars(state) - # my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, - # production_rates=production_rates, - # ts_field=ts_field, cfl=cfl) + # my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, + # production_rates=production_rates, + # ts_field=ts_field, cfl=cfl) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, dt=dt, state=state) - my_write_restart(step=step, t=t, state=state) + # my_write_viz(step=step, t=t, dt=dt, state=state) + # my_write_restart(step=step, t=t, state=state) raise return state, dt @@ -482,14 +500,14 @@ def my_rhs(t, state): if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) - final_dm = eos.get_production_rates(current_state) - ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, - state=current_state) - my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, - dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) - my_write_status(dt=dt, cfl=cfl) - my_write_restart(step=current_step, t=current_t, state=current_state) + # final_dv = eos.dependent_vars(current_state) + # final_dm = eos.get_production_rates(current_state) + # ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, + # state=current_state) + # my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, + # dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) + # my_write_status(dt=dt, cfl=cfl) + # my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 3366afab3..538b6f758 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -43,9 +43,11 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import ConservedVars, make_conserved from abc import ABCMeta, abstractmethod +from arraycontext import dataclass_array_container -@dataclass +@dataclass_array_container +@dataclass(frozen=True) class EOSDependentVars: """State-dependent quantities for :class:`GasEOS`. From 135ac16ef9072e1af7be34c41910941705403903 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 13 Oct 2021 17:06:57 -0500 Subject: [PATCH 241/873] Fix up autoiginition driver for lazy --- examples/autoignition-mpi.py | 120 +++++++++++++++++++++-------------- mirgecom/simutil.py | 8 ++- 2 files changed, 79 insertions(+), 49 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 86b558bfd..452a5443c 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -35,20 +35,20 @@ ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer from logpyle import IntervalTimer, set_dt -from mirgecom.euler import extract_vars_for_logging, units_for_logging +# from mirgecom.euler import extract_vars_for_logging, units_for_logging from pytools.obj_array import make_obj_array from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, - write_visfile + write_visfile, + allsync ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -57,6 +57,7 @@ from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture +from arraycontext import thaw, freeze from mirgecom.logging_quantities import ( initialize_logmgr, @@ -132,14 +133,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, constant_cfl = False # i.o frequencies - nstatus = 1000 - nviz = 1000 - nhealth = 10 - nrestart = 1000 + nstatus = 1 + nviz = 10 + nhealth = 1 + nrestart = 10 # }}} Time stepping control - debug = False + # debug = False rst_path = "restart_data/" rst_pattern = ( @@ -170,7 +171,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None @@ -263,7 +264,6 @@ def get_temperature_mass_energy(state, temperature): compute_dependent_vars = actx.compile(eos.dependent_vars) compute_temperature = actx.compile(get_temperature_mass_energy) - # }}} # {{{ MIRGE-Com state initialization @@ -334,13 +334,28 @@ def get_temperature_mass_energy(state, temperature): f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - def my_write_status(dt, cfl): + def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" + if dv is not None: + temp = dv.temperature + press = dv.pressure + temp = thaw(freeze(temp, actx), actx) + press = thaw(freeze(press, actx), actx) + from grudge.op import nodal_min_loc, nodal_max_loc + tmin = allsync(nodal_min_loc(discr, "vol", temp), comm=comm, op=MPI.MIN) + tmax = allsync(nodal_max_loc(discr, "vol", temp), comm=comm, op=MPI.MAX) + pmin = allsync(nodal_min_loc(discr, "vol", press), comm=comm, op=MPI.MIN) + pmax = allsync(nodal_max_loc(discr, "vol", press), comm=comm, op=MPI.MAX) + dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" + status_msg = status_msg + dv_status_msg + if rank == 0: logger.info(status_msg) def my_write_viz(step, t, dt, state, ts_field=None, dv=None, production_rates=None, cfl=None): + if True: + return if dv is None: dv = compute_dependent_vars(state) if production_rates is None: @@ -376,9 +391,8 @@ def my_health_check(cv, dv): import grudge.op as op health_error = False - from arraycontext import thaw, freeze - temperature = thaw(freeze(dv.temperature, actx), actx) pressure = thaw(freeze(dv.pressure, actx), actx) + temperature = thaw(freeze(dv.temperature, actx), actx) from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", pressure): @@ -405,23 +419,37 @@ def my_health_check(cv, dv): return health_error + from mirgecom.inviscid import get_inviscid_timestep + + def lazy_dt(state): + return make_obj_array([get_inviscid_timestep(discr, eos=eos, cv=state)]) + + get_lazy_dt = actx.compile(lazy_dt) + + from mirgecom.inviscid import get_inviscid_cfl + + def lazy_cfl(state, dt): + return make_obj_array([get_inviscid_cfl(discr, eos, dt, cv=state)]) + + get_lazy_cfl = actx.compile(lazy_cfl) + def my_get_timestep(t, dt, state): - if True: - return dt # richer interface to calculate {dt,cfl} returns node-local estimates t_remaining = max(0, t_final - t) + if constant_cfl: - from mirgecom.inviscid import get_inviscid_timestep - ts_field = current_cfl * get_inviscid_timestep(discr, eos=eos, cv=state) - from grudge.op import nodal_min - dt = nodal_min(discr, "vol", ts_field) + ts_field = current_cfl * get_lazy_dt(state) + ts_field = thaw(freeze(ts_field, actx), actx) + from grudge.op import nodal_min_loc + dt = allsync(nodal_min_loc(discr, "vol", ts_field), comm=comm, + op=MPI.MIN) cfl = current_cfl else: - from mirgecom.inviscid import get_inviscid_cfl - ts_field = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) - from grudge.op import nodal_max - cfl = nodal_max(discr, "vol", ts_field) - + ts_field = get_lazy_cfl(state, current_dt) + ts_field = thaw(freeze(ts_field, actx), actx) + from grudge.op import nodal_max_loc + cfl = allsync(nodal_max_loc(discr, "vol", ts_field), comm=comm, + op=MPI.MAX) return ts_field, cfl, min(t_remaining, dt) def my_pre_step(step, t, dt, state): @@ -439,30 +467,30 @@ def my_pre_step(step, t, dt, state): if do_health: if dv is None: - # dv = eos.dependent_vars(state) dv = compute_dependent_vars(state) - from mirgecom.simutil import allsync health_errors = allsync(my_health_check(state, dv), comm, op=MPI.LOR) if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - # ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) + ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) - # if do_status: - # my_write_status(dt, cfl) + if do_status: + if dv is None: + dv = compute_dependent_vars(state) + my_write_status(dt=dt, cfl=cfl, dv=dv) - # if do_restart: - # my_write_restart(step=step, t=t, state=state) + if do_restart: + my_write_restart(step=step, t=t, state=state) - # if do_viz: - # production_rates = eos.get_production_rates(state) - # if dv is None: - # dv = eos.dependent_vars(state) - # my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, - # production_rates=production_rates, - # ts_field=ts_field, cfl=cfl) + if do_viz: + production_rates = eos.get_production_rates(state) + if dv is None: + dv = compute_dependent_vars(state) + my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, + production_rates=production_rates, + ts_field=ts_field, cfl=cfl) except MyRuntimeError: if rank == 0: @@ -500,14 +528,14 @@ def my_rhs(t, state): if rank == 0: logger.info("Checkpointing final state ...") - # final_dv = eos.dependent_vars(current_state) - # final_dm = eos.get_production_rates(current_state) - # ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, - # state=current_state) - # my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, - # dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) - # my_write_status(dt=dt, cfl=cfl) - # my_write_restart(step=current_step, t=current_t, state=current_state) + final_dv = compute_dependent_vars(current_state) + final_dm = eos.get_production_rates(current_state) + ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, + state=current_state) + my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, + dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) + my_write_status(dt=dt, cfl=cfl, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) if logmgr: logmgr.close() diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index bf52dc317..f2163a39a 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -228,14 +228,16 @@ def check_naninf_local(discr, dd, field): return np.isnan(s) or (s == np.inf) -def compare_fluid_solutions(discr, red_state, blue_state): +def compare_fluid_solutions(discr, red_state, blue_state, comm=None): """Return inf norm of (*red_state* - *blue_state*) for each component. .. note:: This is a collective routine and must be called by all MPI ranks. """ - resid = red_state - blue_state - return [discr.norm(v, np.inf) for v in resid.join()] + actx = red_state.array_context + resid = actx.np.abs(red_state - blue_state) + max_local_error = [op.nodal_max_loc(discr, "vol", v) for v in resid.join()] + return allsync(max_local_error, comm=comm) def generate_and_distribute_mesh(comm, generate_mesh): From 228cf2fb2e042b586650a0daeab027b58fafbc82 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 14 Oct 2021 08:00:16 -0500 Subject: [PATCH 242/873] Switch to SingleGridWorkBalancing array context in test_lazy --- test/test_lazy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_lazy.py b/test/test_lazy.py index e4af85344..f8befb5a8 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -29,7 +29,7 @@ import pyopencl.clmath as clmath # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from arraycontext.container.traversal import freeze, thaw From 84a9c92b96ae621b93fae69430865bb76252d24c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 14 Oct 2021 11:43:38 -0500 Subject: [PATCH 243/873] Clean up autoignition example driver. --- examples/autoignition-mpi.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 452a5443c..50362556d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -41,7 +41,7 @@ from logpyle import IntervalTimer, set_dt -# from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.euler import extract_vars_for_logging, units_for_logging from pytools.obj_array import make_obj_array from mirgecom.euler import euler_operator from mirgecom.simutil import ( @@ -81,7 +81,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=PyOpenCLArrayContext, + log_dependent=True): """Drive example.""" cl_ctx = ctx_factory() @@ -178,24 +179,27 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) - # logmgr_add_many_discretization_quantities(logmgr, discr, dim, - # extract_vars_for_logging, units_for_logging) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") logmgr.add_quantity(vis_timer) - # ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), - # ("max_pressure", "{value:1.9e})\n"), - # ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), - # ("max_temperature", "{value:7g})\n"), - logmgr.add_watches([ ("step.max", "step = {value}, "), ("t_sim.max", "sim time: {value:1.6e} s\n"), ("t_step.max", "------- step walltime: {value:6g} s, "), - ("t_log.max", "log walltime: {value:6g} s") + ("t_log.max", "log walltime: {value:6g} s\n") ]) + if log_dependent: + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, + units_for_logging) + logmgr.add_watches([ + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), + ("max_temperature", "{value:7g})\n")]) + # {{{ Set up initial state using Cantera # Use Cantera for initialization @@ -336,7 +340,7 @@ def get_temperature_mass_energy(state, temperature): def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" - if dv is not None: + if dv is not None and not log_dependent: temp = dv.temperature press = dv.pressure temp = thaw(freeze(temp, actx), actx) @@ -561,10 +565,12 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + log_dependent = True if args.profiling: if args.lazy: raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext + log_dependent = False else: actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext @@ -577,6 +583,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + log_dependent=log_dependent) # vim: foldmethod=marker From 7fe13aa664b84f634b28121c3103852791f846b1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 14 Oct 2021 11:53:52 -0500 Subject: [PATCH 244/873] Clean up autoignition driver. --- examples/autoignition-mpi.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 50362556d..a9a182962 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -141,7 +141,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # }}} Time stepping control - # debug = False + debug = False rst_path = "restart_data/" rst_pattern = ( @@ -306,11 +306,11 @@ def get_temperature_mass_energy(state, temperature): # ipdb.set_trace() # Inspection at physics debugging time - # if debug: - # print("Initial MIRGE-Com state:") - # print(f"{current_state=}") - # print(f"Initial DV pressure: {eos.pressure(current_state)}") - # print(f"Initial DV temperature: {eos.temperature(current_state)}") + if debug: + print("Initial MIRGE-Com state:") + print(f"{current_state=}") + print(f"Initial DV pressure: {eos.pressure(current_state)}") + print(f"Initial DV temperature: {eos.temperature(current_state)}") # }}} @@ -358,8 +358,6 @@ def my_write_status(dt, cfl, dv=None): def my_write_viz(step, t, dt, state, ts_field=None, dv=None, production_rates=None, cfl=None): - if True: - return if dv is None: dv = compute_dependent_vars(state) if production_rates is None: From a89b34b7c9e7f82438bb1cdc7083ce8cdffaeb21 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 14 Oct 2021 12:43:23 -0500 Subject: [PATCH 245/873] Clean up autoignition driver further. --- examples/autoignition-mpi.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 50362556d..78cff3c5b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -187,7 +187,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, ("step.max", "step = {value}, "), ("t_sim.max", "sim time: {value:1.6e} s\n"), ("t_step.max", "------- step walltime: {value:6g} s, "), - ("t_log.max", "log walltime: {value:6g} s\n") + ("t_log.max", "log walltime: {value:6g} s") ]) if log_dependent: @@ -195,7 +195,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, extract_vars_for_logging, units_for_logging) logmgr.add_watches([ - ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("min_pressure", "\n------- P (min, max) (Pa) = ({value:1.9e}, "), ("max_pressure", "{value:1.9e})\n"), ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), ("max_temperature", "{value:7g})\n")]) @@ -340,7 +340,7 @@ def get_temperature_mass_energy(state, temperature): def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" - if dv is not None and not log_dependent: + if ((dv is not None) and (not log_dependent)): temp = dv.temperature press = dv.pressure temp = thaw(freeze(temp, actx), actx) @@ -570,10 +570,12 @@ def my_rhs(t, state): if args.lazy: raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext - log_dependent = False else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + if args.lazy: + log_dependent = False + actx_class = PytatoPyOpenCLArrayContext + else: + actx_class = PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: From 4be8d90fd0c46f8d09df9c947dced6fe1fc76086 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 07:35:36 -0500 Subject: [PATCH 246/873] Compile production rate getter --- examples/autoignition-mpi.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index dd8355dad..edac4e66c 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -361,11 +361,10 @@ def my_write_viz(step, t, dt, state, ts_field=None, dv=None, if dv is None: dv = compute_dependent_vars(state) if production_rates is None: - production_rates = eos.get_production_rates(state) + production_rates = compute_production_rates(state) if ts_field is None: ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) - viz_fields = [("cv", state), - ("dv", dv), + viz_fields = [("cv", state), ("dv", dv), ("production_rates", production_rates), ("dt" if constant_cfl else "cfl", ts_field)] write_visfile(discr, viz_fields, visualizer, vizname=casename, @@ -423,31 +422,36 @@ def my_health_check(cv, dv): from mirgecom.inviscid import get_inviscid_timestep - def lazy_dt(state): + def get_dt(state): return make_obj_array([get_inviscid_timestep(discr, eos=eos, cv=state)]) - get_lazy_dt = actx.compile(lazy_dt) + compute_dt = actx.compile(get_dt) from mirgecom.inviscid import get_inviscid_cfl - def lazy_cfl(state, dt): + def get_cfl(state, dt): return make_obj_array([get_inviscid_cfl(discr, eos, dt, cv=state)]) - get_lazy_cfl = actx.compile(lazy_cfl) + compute_cfl = actx.compile(get_cfl) + + def get_production_rates(state): + return make_obj_array([eos.get_production_rates(state)]) + + compute_production_rates = actx.compile(get_production_rates) def my_get_timestep(t, dt, state): # richer interface to calculate {dt,cfl} returns node-local estimates t_remaining = max(0, t_final - t) if constant_cfl: - ts_field = current_cfl * get_lazy_dt(state) + ts_field = current_cfl * compute_dt(state) ts_field = thaw(freeze(ts_field, actx), actx) from grudge.op import nodal_min_loc dt = allsync(nodal_min_loc(discr, "vol", ts_field), comm=comm, op=MPI.MIN) cfl = current_cfl else: - ts_field = get_lazy_cfl(state, current_dt) + ts_field = compute_cfl(state, current_dt) ts_field = thaw(freeze(ts_field, actx), actx) from grudge.op import nodal_max_loc cfl = allsync(nodal_max_loc(discr, "vol", ts_field), comm=comm, @@ -487,7 +491,7 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - production_rates = eos.get_production_rates(state) + production_rates, = compute_production_rates(state) if dv is None: dv = compute_dependent_vars(state) my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, @@ -531,7 +535,7 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_dv = compute_dependent_vars(current_state) - final_dm = eos.get_production_rates(current_state) + final_dm = compute_production_rates(current_state) ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, state=current_state) my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, From 933f6cfe5eac0ab1a5cd5a71943c4222551c56e2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 07:52:19 -0500 Subject: [PATCH 247/873] Sync up thermochem wrapper and autoignition with lazy-support developments --- examples/autoignition-mpi.py | 30 +++++++++++++++------- mirgecom/thermochemistry.py | 50 ++++++++++-------------------------- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ac8a664a0..486524731 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -317,6 +317,17 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") + from pytools.obj_array import make_obj_array + + def get_temperature_mass_energy(state, temperature): + y = state.species_mass_fractions + e = eos.internal_energy(state) / state.mass + return make_obj_array( + [pyro_mechanism.get_temperature(e, temperature, y, True)] + ) + + compute_temperature = actx.compile(get_temperature_mass_energy) + def my_write_status(dt, cfl): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" if rank == 0: @@ -357,22 +368,23 @@ def my_write_restart(step, t, state): def my_health_check(cv, dv): health_error = False + pressure = dv.pressure + temperature = dv.temperature from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure) \ - or check_range_local(discr, "vol", dv.pressure, 1e5, 2.4e5): + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, 1e5, 2.4e5): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - if check_range_local(discr, "vol", dv.temperature, 1.498e3, 1.52e3): + if check_range_local(discr, "vol", temperature, 1.498e3, 1.52e3): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") - y = cv.species_mass_fractions - e = eos.internal_energy(cv) / cv.mass - temp_resid = pyro_mechanism.get_temperature_residual( - e, dv.temperature, y, True - ) - temp_resid = discr.norm(temp_resid, np.inf) + from grudge.op import nodal_max_loc + check_temp, = compute_temperature(cv, temperature) + temp_resid = actx.np.abs(check_temp - temperature) + temp_resid = nodal_max_loc(discr, "vol", temp_resid) + if temp_resid > 1e-12: health_error = True logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index cafe05c25..82b76fe09 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -55,47 +55,25 @@ def get_concentrations(self, rho, mass_fractions): # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): - if do_energy is False: - pv_fun = self.get_mixture_specific_heat_cp_mass - he_fun = self.get_mixture_enthalpy_mass - else: - pv_fun = self.get_mixture_specific_heat_cv_mass - he_fun = self.get_mixture_internal_energy_mass - - num_iter = 10 - ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess * ones - - for _ in range(num_iter): - f = enthalpy_or_energy - he_fun(t_i, y) - j = -pv_fun(t_i, y) - dt = -f / j - t_i += dt - # if self._pyro_norm(dt, np.inf) < tol: - - return t_i + def get_temperature_update_energy(self, e_in, t_in, y): + pv_func = self.get_mixture_specific_heat_cv_mass + he_func = self.get_mixture_internal_energy_mass + # import ipdb + # ipdb.set_trace() + return (e_in - he_func(t_in, y)) / pv_func(t_in, y) # This hard-codes the Newton iterations to 10 because the convergence # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_residual(self, enthalpy_or_energy, t_guess, y, - do_energy=False): - if do_energy is False: - pv_fun = self.get_mixture_specific_heat_cp_mass - he_fun = self.get_mixture_enthalpy_mass - else: - pv_fun = self.get_mixture_specific_heat_cv_mass - he_fun = self.get_mixture_internal_energy_mass - - ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 - t_i = t_guess * ones - - f = enthalpy_or_energy - he_fun(t_i, y) - j = -pv_fun(t_i, y) - - return -f / j + def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): + t_i = t_guess + num_iter = 5 + for _ in range(num_iter): + t_i = t_i + self.get_temperature_update_energy( + enthalpy_or_energy, t_i, y + ) + return t_i return PyroWrapper From cfae8dbb213aa2f77d90bfed9d1a8ba9031779c2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 11:43:57 -0500 Subject: [PATCH 248/873] Change back to 10 steps. --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index d0d1cec9e..1654f7506 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -129,7 +129,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Time loop control parameters current_step = 0 - t_final = 1e-7 + t_final = 1e-8 current_cfl = 1.0 current_dt = 1e-9 current_t = 0 From d881154ed8dbe545faaa39246b1ae09f7aece524 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 11:54:47 -0500 Subject: [PATCH 249/873] Remove duplicate def --- examples/autoignition-mpi.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 1654f7506..ed3eb1061 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -342,15 +342,6 @@ def get_temperature_mass_energy(state, temperature): from pytools.obj_array import make_obj_array - def get_temperature_mass_energy(state, temperature): - y = state.species_mass_fractions - e = eos.internal_energy(state) / state.mass - return make_obj_array( - [pyro_mechanism.get_temperature(e, temperature, y, True)] - ) - - compute_temperature = actx.compile(get_temperature_mass_energy) - def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" if ((dv is not None) and (not log_dependent)): From a05e127e3cc528de4a2bd40af1d1461d645f45e9 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 15 Oct 2021 13:44:49 -0500 Subject: [PATCH 250/873] Clean up comments and leftover debugging junk. Co-authored-by: Matt Smith --- mirgecom/thermochemistry.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 82b76fe09..728cdf49b 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -47,22 +47,19 @@ def get_concentrations(self, rho, mass_fractions): # ensure non-negative concentrations zero = self._pyro_zeros_like(concs[0]) for i in range(self.num_species): - concs[i] = self.usr_np.where(self.usr_np.less(concs[i], 0), - zero, concs[i]) + concs[i] = self.usr_np.maximum(concs[i], zero) return concs - # This hard-codes the Newton iterations to 10 because the convergence + # This hard-codes the number of Newton iterations because the convergence # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. def get_temperature_update_energy(self, e_in, t_in, y): pv_func = self.get_mixture_specific_heat_cv_mass he_func = self.get_mixture_internal_energy_mass - # import ipdb - # ipdb.set_trace() return (e_in - he_func(t_in, y)) / pv_func(t_in, y) - # This hard-codes the Newton iterations to 10 because the convergence + # This hard-codes the number of Newton iterations because the convergence # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. From 626f1d999563208e14b4fd2976f365b129637e44 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 13:51:16 -0500 Subject: [PATCH 251/873] Fix up viz call in attempt to fix CI --- examples/autoignition-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ed3eb1061..dce2d0bd8 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -540,7 +540,7 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_dv = compute_dependent_vars(current_state) - final_dm = compute_production_rates(current_state) + final_dm, = compute_production_rates(current_state) ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, state=current_state) my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, From 24a521a4386cb93db9bdaabd188bc7a6ae109f05 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 14:03:47 -0500 Subject: [PATCH 252/873] Add comment about the temperature convergence check. --- examples/autoignition-mpi.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index c1819a529..b48dc5ed3 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -383,6 +383,17 @@ def my_health_check(cv, dv): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") + # This check is the temperature convergence check + # The current *temperature* is what Pyrometheus gets + # after a fixed number of Newton iterations, *n_iter*. + # Calling `compute_temperature` here with *temperature* + # input as the guess returns the calculated gas temperature after + # yet another *n_iter*. + # The difference between those two temperatures is the + # temperature residual, which can be used as an indicator of + # convergence in Pyrometheus `get_temperature`. + # Note: The local max jig below works around a very long compile + # in lazy mode. from grudge.op import nodal_max_loc check_temp, = compute_temperature(cv, temperature) temp_resid = actx.np.abs(check_temp - temperature) From 69bc11fe511fb6cfbb6a874689f831e7e88959f3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 14:38:41 -0500 Subject: [PATCH 253/873] Validate args to MIRGE get_temperature wrapper. --- mirgecom/thermochemistry.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 728cdf49b..2a122a979 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -63,7 +63,10 @@ def get_temperature_update_energy(self, e_in, t_in, y): # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): + def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=True): + if not do_energy: + raise ValueError("MIRGE ThermoChem wrapper does not support enthalpy" + " interface.") t_i = t_guess num_iter = 5 for _ in range(num_iter): From 690317438603e292302ebbc45e09c52591d3f41f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 15:32:46 -0500 Subject: [PATCH 254/873] Remove unneeded temperature interface argument --- examples/autoignition-mpi.py | 2 +- mirgecom/eos.py | 3 +-- mirgecom/thermochemistry.py | 36 ++++++++++++++++++++++++------------ test/test_eos.py | 13 +++++++------ 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index b48dc5ed3..d2d83b03d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -326,7 +326,7 @@ def get_temperature_mass_energy(state, temperature): y = state.species_mass_fractions e = eos.internal_energy(state) / state.mass return make_obj_array( - [pyro_mechanism.get_temperature(e, temperature, y, True)] + [pyro_mechanism.get_temperature(e, temperature, y)] ) compute_temperature = actx.compile(get_temperature_mass_energy) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 2cdef4057..106bf579b 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -749,8 +749,7 @@ def temperature(self, cv: ConservedVars): def get_temp(): y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass - return self._pyrometheus_mech.get_temperature(e, self._tguess, - y, True) + return self._pyrometheus_mech.get_temperature(e, self._tguess, y) return get_temp() def total_energy(self, cv, pressure): diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 2a122a979..ab80c5981 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -50,11 +50,8 @@ def get_concentrations(self, rho, mass_fractions): concs[i] = self.usr_np.maximum(concs[i], zero) return concs - # This hard-codes the number of Newton iterations because the convergence - # check is not compatible with lazy evaluation. Instead, we plan to check - # the temperature residual at simulation health checking time. - # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature_update_energy(self, e_in, t_in, y): + # This is the temperature update for *get_temperature* + def _get_temperature_update_energy(self, e_in, t_in, y): pv_func = self.get_mixture_specific_heat_cv_mass he_func = self.get_mixture_internal_energy_mass return (e_in - he_func(t_in, y)) / pv_func(t_in, y) @@ -63,15 +60,30 @@ def get_temperature_update_energy(self, e_in, t_in, y): # check is not compatible with lazy evaluation. Instead, we plan to check # the temperature residual at simulation health checking time. # FIXME: Occasional convergence check is other-than-ideal; revisit asap. - def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=True): - if not do_energy: - raise ValueError("MIRGE ThermoChem wrapper does not support enthalpy" - " interface.") - t_i = t_guess + # - could adapt dt or num_iter on temperature convergence? + # - can pass-in num_iter? + def get_temperature(self, energy, temperature_guess, species_mass_fractions): + """Compute the temperature of the mixture from thermal energy. + + Parameters + ---------- + energy: :class:`~meshmode.dof_array.DOFArray` + The internal (thermal) energy of the mixture. + temperature_guess: :class:`~meshmode.dof_array.DOFArray` + An initial starting temperature for the Newton iterations. + species_mass_fractions: numpy.ndarray + An object array of :class:`~meshmode.dof_array.DOFArray` with the + mass fractions of the mixture species. + Returns + ------- + :class:`~meshmode.dof_array.DOFArray` + The mixture temperature after a fixed number of Newton iterations. + """ num_iter = 5 + t_i = temperature_guess for _ in range(num_iter): - t_i = t_i + self.get_temperature_update_energy( - enthalpy_or_energy, t_i, y + t_i = t_i + self._get_temperature_update_energy( + energy, t_i, species_mass_fractions ) return t_i diff --git a/test/test_eos.py b/test/test_eos.py index 7c90c87c9..c5566b71b 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -90,8 +90,8 @@ def test_pyrometheus_mechanisms(ctx_factory, mechname, rate_tol, y0): # Pyrometheus initialization mech_cti = get_mechanism_cti(mechname) sol = cantera.Solution(phase_id="gas", source=mech_cti) - prometheus_mechanism = pyro.get_thermochem_class(sol)(actx.np) - + from mirgecom.thermochemistry import make_pyrometheus_mechanism + prometheus_mechanism = make_pyrometheus_mechanism(actx, sol) nspecies = prometheus_mechanism.num_species print(f"PyrometheusMixture::NumSpecies = {nspecies}") @@ -127,7 +127,7 @@ def test_pyrometheus_mechanisms(ctx_factory, mechname, rate_tol, y0): prom_rho = prometheus_mechanism.get_density(pin, tin, yin) prom_e = prometheus_mechanism.get_mixture_internal_energy_mass(tin, yin) - prom_t = prometheus_mechanism.get_temperature(prom_e, tin, yin, True) + prom_t = prometheus_mechanism.get_temperature(prom_e, tin, yin) prom_p = prometheus_mechanism.get_pressure(prom_rho, tin, yin) prom_c = prometheus_mechanism.get_concentrations(prom_rho, yin) prom_k = prometheus_mechanism.get_fwd_rate_coefficients(prom_t, prom_c) @@ -195,7 +195,8 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): # Pyrometheus initialization mech_cti = get_mechanism_cti(mechname) sol = cantera.Solution(phase_id="gas", source=mech_cti) - prometheus_mechanism = pyro.get_thermochem_class(sol)(actx.np) + from mirgecom.thermochemistry import make_pyrometheus_mechanism + prometheus_mechanism = make_pyrometheus_mechanism(actx, sol) nspecies = prometheus_mechanism.num_species print(f"PrometheusMixture::Mechanism = {mechname}") @@ -209,7 +210,7 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): y0s[0] = 1.0 - np.sum(y0s[1:]) velocity = vel * np.ones(shape=(dim,)) - for fac in range(1, 11): + for fac in range(1, 7): tempin = fac * temp0 pressin = fac * press0 @@ -223,7 +224,7 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): pyro_rho = prometheus_mechanism.get_density(pin, tin, yin) pyro_e = prometheus_mechanism.get_mixture_internal_energy_mass(tin, yin) - pyro_t = prometheus_mechanism.get_temperature(pyro_e, tguess, yin, True) + pyro_t = prometheus_mechanism.get_temperature(pyro_e, tguess, yin) pyro_p = prometheus_mechanism.get_pressure(pyro_rho, pyro_t, yin) print(f"prom(rho, y, p, t, e) = ({pyro_rho}, {y0s}, " From 62ad69de621524cda35a6d4a5af24212c2a4cbdf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 15:39:40 -0500 Subject: [PATCH 255/873] Fix docstyle issue --- mirgecom/thermochemistry.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index ab80c5981..4fbbd339c 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -74,6 +74,7 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): species_mass_fractions: numpy.ndarray An object array of :class:`~meshmode.dof_array.DOFArray` with the mass fractions of the mixture species. + Returns ------- :class:`~meshmode.dof_array.DOFArray` From 6e4cb1d307b674bfe8865d06e56c8456d6a91069 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 16:32:52 -0500 Subject: [PATCH 256/873] Switch doublemach example back to Euler. --- examples/doublemach-mpi.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 4cbf50efd..7a4968027 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -43,7 +43,7 @@ from grudge.shortcuts import make_visualizer -from mirgecom.navierstokes import ns_operator +from mirgecom.euler import euler_operator from mirgecom.artificial_viscosity import ( av_operator, smoothness_indicator @@ -55,7 +55,7 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( AdiabaticNoslipMovingBoundary, - PrescribedBoundary + PrescribedInviscidBoundary ) from mirgecom.initializers import DoubleMachReflection from mirgecom.eos import IdealSingleGas @@ -227,9 +227,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, initializer = DoubleMachReflection() boundaries = { - DTAG_BOUNDARY("ic1"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("ic2"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("ic3"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("ic1"): + PrescribedInviscidBoundary(fluid_solution_func=initializer), + DTAG_BOUNDARY("ic2"): + PrescribedInviscidBoundary(fluid_solution_func=initializer), + DTAG_BOUNDARY("ic3"): + PrescribedInviscidBoundary(fluid_solution_func=initializer), DTAG_BOUNDARY("wall"): AdiabaticNoslipMovingBoundary(), DTAG_BOUNDARY("out"): AdiabaticNoslipMovingBoundary(), } @@ -386,8 +389,8 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - return ns_operator( - discr, cv=state, t=t, boundaries=boundaries, eos=eos + return euler_operator( + discr, cv=state, time=t, boundaries=boundaries, eos=eos ) + make_conserved(dim, q=av_operator( discr, q=state.join(), boundaries=boundaries, boundary_kwargs={"time": t, "eos": eos}, alpha=alpha, From 03e65980fae235e8fa92135458b9046b999951d7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 15 Oct 2021 20:32:59 -0500 Subject: [PATCH 257/873] Use new thermochem wrapper in mixture example. --- examples/mixture-mpi.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 01fb26291..3b9dd14c0 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -55,7 +55,6 @@ from mirgecom.eos import PyrometheusMixture import cantera -import pyrometheus as pyro from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -180,7 +179,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, from mirgecom.mechanisms import get_mechanism_cti mech_cti = get_mechanism_cti("uiuc") sol = cantera.Solution(phase_id="gas", source=mech_cti) - pyrometheus_mechanism = pyro.get_thermochem_class(sol)(actx.np) + from mirgecom.thermochemistry import make_pyrometheus_mechanism + pyrometheus_mechanism = \ + make_pyrometheus_mechanism(actx, sol) nspecies = pyrometheus_mechanism.num_species eos = PyrometheusMixture(pyrometheus_mechanism) From 5e10014f813e33641c3dddf27f451e3def9b1be3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 18 Oct 2021 08:33:03 -0500 Subject: [PATCH 258/873] Remove extra get_temp function, massage call to pyro wrapper to match interface. --- examples/autoignition-mpi.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 2c82ceb26..9ce31e199 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -260,11 +260,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # pyro_mechanism = UIUCMechanism(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) + from pytools.obj_array import make_obj_array + def get_temperature_mass_energy(state, temperature): y = state.species_mass_fractions e = eos.internal_energy(state) / state.mass return make_obj_array( - [pyro_mechanism.get_temperature(e, temperature, y, True)] + [pyro_mechanism.get_temperature(e, temperature, y)] ) compute_dependent_vars = actx.compile(eos.dependent_vars) @@ -340,17 +342,6 @@ def get_temperature_mass_energy(state, temperature): f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - from pytools.obj_array import make_obj_array - - def get_temperature_mass_energy(state, temperature): - y = state.species_mass_fractions - e = eos.internal_energy(state) / state.mass - return make_obj_array( - [pyro_mechanism.get_temperature(e, temperature, y)] - ) - - compute_temperature = actx.compile(get_temperature_mass_energy) - def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" if ((dv is not None) and (not log_dependent)): From ec0f98957d692054449581dc1cfc2115e29353d7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 18 Oct 2021 09:03:37 -0500 Subject: [PATCH 259/873] Revert back to using np.where in favor of np.maximum #527 --- mirgecom/thermochemistry.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 4fbbd339c..0bc5972ea 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -47,7 +47,8 @@ def get_concentrations(self, rho, mass_fractions): # ensure non-negative concentrations zero = self._pyro_zeros_like(concs[0]) for i in range(self.num_species): - concs[i] = self.usr_np.maximum(concs[i], zero) + concs[i] = self.usr_np.where(self.usr_np.less(concs[i], 0), + zero, concs[i]) return concs # This is the temperature update for *get_temperature* @@ -81,7 +82,7 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): The mixture temperature after a fixed number of Newton iterations. """ num_iter = 5 - t_i = temperature_guess + t_i = 1.0*temperature_guess for _ in range(num_iter): t_i = t_i + self._get_temperature_update_energy( energy, t_i, species_mass_fractions From 2a53263ea065fa17375c7be2784e0d4ee3a77037 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 18 Oct 2021 11:37:17 -0500 Subject: [PATCH 260/873] Fix up mixtures call to get_temp --- examples/mixture-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 84e6401f2..88a06ab3b 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -278,7 +278,7 @@ def my_health_check(cv, dv, component_errors): y = cv.species_mass_fractions e = eos.internal_energy(cv) / cv.mass - check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y, True) + check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y) # temp_resid = pyro_mechanism.get_temperature_residual( # e, dv.temperature, y, True # ) From 087f345479b2f80ed630fa882dae351afbf2568d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 18 Oct 2021 11:39:35 -0500 Subject: [PATCH 261/873] Fix up tests calls to get_temp --- test/test_eos.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index fc1eb3380..60fa2ba77 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -117,8 +117,7 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): def get_temperature_lazy(energy, y, tguess): return make_obj_array( - [pyro_lazy.get_temperature(energy, y, tguess, - do_energy=True)] + [pyro_lazy.get_temperature(energy, y, tguess)] ) temp_lazy = actx_lazy.compile(get_temperature_lazy) @@ -167,8 +166,7 @@ def get_temperature_lazy(energy, y, tguess): ) # These both take 5 Newton iterations - pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager, - True) + pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager) pyro_t_lazy = temp_lazy(pyro_e_lazy, tin_lazy, yin_lazy) t_lazy = to_numpy(thaw(freeze(pyro_t_lazy, actx_lazy), actx_eager), From b19a0c1b26821c00fa5e29ba50ff425c6654d410 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 18 Oct 2021 12:59:23 -0500 Subject: [PATCH 262/873] Merge in AV --- doc/misc.rst | 4 + doc/operators/artificial_viscosity.rst | 4 + doc/operators/operators.rst | 1 + examples/doublemach-mpi.py | 455 +++++++++++++++++++++++++ mirgecom/artificial_viscosity.py | 334 ++++++++++++++++++ mirgecom/boundary.py | 53 ++- mirgecom/initializers.py | 118 +++++++ requirements.txt | 1 + test/test_av.py | 219 ++++++++++++ 9 files changed, 1187 insertions(+), 2 deletions(-) create mode 100644 doc/operators/artificial_viscosity.rst create mode 100644 examples/doublemach-mpi.py create mode 100644 mirgecom/artificial_viscosity.py create mode 100644 test/test_av.py diff --git a/doc/misc.rst b/doc/misc.rst index 3767b3477..382213d8c 100644 --- a/doc/misc.rst +++ b/doc/misc.rst @@ -71,3 +71,7 @@ References `(DOI) `__ .. [Ihme_2014] Yu Lv and Matthias Ihme (2014) Journal of Computationsl Physics 270 105 \ `(DOI) `__ +.. [Persson_2012] P. Persson and J. Peraire, AIAA 44 \ + `(DOI) `__ +.. [Woodward_1984] Woodward and Colella, Journal of Computational Physics, 54 \ + `(DOI) `__ diff --git a/doc/operators/artificial_viscosity.rst b/doc/operators/artificial_viscosity.rst new file mode 100644 index 000000000..9b583612a --- /dev/null +++ b/doc/operators/artificial_viscosity.rst @@ -0,0 +1,4 @@ +Artificial Viscosity +==================== + +.. automodule:: mirgecom.artificial_viscosity diff --git a/doc/operators/operators.rst b/doc/operators/operators.rst index c0b40c7fe..0907c286d 100644 --- a/doc/operators/operators.rst +++ b/doc/operators/operators.rst @@ -6,4 +6,5 @@ Operators wave-eq diffusion + artificial_viscosity gas-dynamics diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py new file mode 100644 index 000000000..4cbf50efd --- /dev/null +++ b/examples/doublemach-mpi.py @@ -0,0 +1,455 @@ +"""Demonstrate double mach reflection.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial + +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext + +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.dof_desc import DTAG_BOUNDARY +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer + + +from mirgecom.navierstokes import ns_operator +from mirgecom.artificial_viscosity import ( + av_operator, + smoothness_indicator +) +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.fluid import make_conserved +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + AdiabaticNoslipMovingBoundary, + PrescribedBoundary +) +from mirgecom.initializers import DoubleMachReflection +from mirgecom.eos import IdealSingleGas +from mirgecom.transport import SimpleTransport +from mirgecom.simutil import get_sim_timestep + +from logpyle import set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +def get_doublemach_mesh(): + """Generate or import a grid using `gmsh`. + + Input required: + doubleMach.msh (read existing mesh) + + This routine will generate a new grid if it does + not find the grid file (doubleMach.msh). + """ + from meshmode.mesh.io import ( + read_gmsh, + generate_gmsh, + ScriptSource, + ) + import os + meshfile = "doubleMach.msh" + if not os.path.exists(meshfile): + mesh = generate_gmsh( + ScriptSource(""" + x0=1.0/6.0; + setsize=0.025; + Point(1) = {0, 0, 0, setsize}; + Point(2) = {x0,0, 0, setsize}; + Point(3) = {4, 0, 0, setsize}; + Point(4) = {4, 1, 0, setsize}; + Point(5) = {0, 1, 0, setsize}; + Line(1) = {1, 2}; + Line(2) = {2, 3}; + Line(5) = {3, 4}; + Line(6) = {4, 5}; + Line(7) = {5, 1}; + Line Loop(8) = {-5, -6, -7, -1, -2}; + Plane Surface(8) = {8}; + Physical Surface('domain') = {8}; + Physical Curve('ic1') = {6}; + Physical Curve('ic2') = {7}; + Physical Curve('ic3') = {1}; + Physical Curve('wall') = {2}; + Physical Curve('out') = {5}; + """, "geo"), force_ambient_dim=2, dimensions=2, target_unit="M", + output_file_name=meshfile) + else: + mesh = read_gmsh(meshfile, force_ambient_dim=2) + + return mesh + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): + """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + # Timestepping control + current_step = 0 + timestepper = rk4_step + t_final = 1.0e-3 + current_cfl = 0.1 + current_dt = 1.0e-4 + current_t = 0 + constant_cfl = False + + # Some i/o frequencies + nstatus = 10 + nviz = 100 + nrestart = 100 + nhealth = 1 + + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + gen_grid = partial(get_doublemach_mesh) + from mirgecom.simutil import generate_and_distribute_mesh + local_mesh, global_nelements = generate_and_distribute_mesh(comm, gen_grid) + local_nelements = local_mesh.nelements + + order = 3 + discr = EagerDGDiscretization(actx, local_mesh, order=order, + mpi_communicator=comm) + nodes = thaw(actx, discr.nodes()) + + dim = 2 + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:1.9e}, "), + ("max_temperature", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + # Solution setup and initialization + s0 = -6.0 + kappa = 1.0 + alpha = 2.0e-2 + # {{{ Initialize simple transport model + kappa_t = 1e-5 + sigma_v = 1e-5 + transport_model = SimpleTransport(viscosity=sigma_v, + thermal_conductivity=kappa_t) + # }}} + eos = IdealSingleGas(transport_model=transport_model) + initializer = DoubleMachReflection() + + boundaries = { + DTAG_BOUNDARY("ic1"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("ic2"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("ic3"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("wall"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("out"): AdiabaticNoslipMovingBoundary(), + } + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_state = restart_data["state"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_state = initializer(nodes) + + visualizer = make_visualizer(discr, + discr.order if discr.dim == 2 else discr.order) + + initname = initializer.__class__.__name__ + eosname = eos.__class__.__name__ + init_message = make_init_message( + dim=dim, + order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, + t_final=t_final, + nstatus=nstatus, + nviz=nviz, + cfl=current_cfl, + constant_cfl=constant_cfl, + initname=initname, + eosname=eosname, + casename=casename, + ) + if rank == 0: + logger.info(init_message) + + def my_write_viz(step, t, state, dv=None, tagged_cells=None): + if dv is None: + dv = eos.dependent_vars(state) + if tagged_cells is None: + tagged_cells = smoothness_indicator(discr, state.mass, s0=s0, + kappa=kappa) + viz_fields = [("cv", state), + ("dv", dv), + ("tagged_cells", tagged_cells)] + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv): + # Note: This health check is tuned s.t. it is a test that + # the case gets the expected solution. If dt,t_final or + # other run parameters are changed, this check should + # be changed accordingly. + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + from mirgecom.simutil import allsync + if allsync(check_range_local(discr, "vol", dv.pressure, .9, 18.6), + comm, op=MPI.LOR): + health_error = True + from grudge.op import nodal_max, nodal_min + p_min = nodal_min(discr, "vol", dv.pressure) + p_max = nodal_max(discr, "vol", dv.pressure) + logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + + if check_naninf_local(discr, "vol", dv.temperature): + health_error = True + logger.info(f"{rank=}: NANs/INFs in temperature data.") + + if allsync( + check_range_local(discr, "vol", dv.temperature, 2.48e-3, 1.071e-2), + comm, op=MPI.LOR): + health_error = True + from grudge.op import nodal_max, nodal_min + t_min = nodal_min(discr, "vol", dv.temperature) + t_max = nodal_max(discr, "vol", dv.temperature) + logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + + return health_error + + def my_pre_step(step, t, dt, state): + try: + dv = None + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + + if do_health: + dv = eos.dependent_vars(state) + from mirgecom.simutil import allsync + health_errors = allsync(my_health_check(state, dv), comm, + op=MPI.LOR) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + tagged_cells = smoothness_indicator(discr, state.mass, s0=s0, + kappa=kappa) + my_write_viz(step=step, t=t, state=state, dv=dv, + tagged_cells=tagged_cells) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise + + dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return ns_operator( + discr, cv=state, t=t, boundaries=boundaries, eos=eos + ) + make_conserved(dim, q=av_operator( + discr, q=state.join(), boundaries=boundaries, + boundary_kwargs={"time": t, "eos": eos}, alpha=alpha, + s0=s0, kappa=kappa) + ) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + state=current_state, t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = eos.dependent_vars(current_state) + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + +if __name__ == "__main__": + import argparse + casename = "doublemach" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) + +# vim: foldmethod=marker diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py new file mode 100644 index 000000000..4f58a8c3c --- /dev/null +++ b/mirgecom/artificial_viscosity.py @@ -0,0 +1,334 @@ +r""":mod:`mirgecom.artificial_viscosity` Artificial viscosity for hyperbolic systems. + +Consider the following system of conservation laws of the form: + +.. math:: + + \partial_t \mathbf{Q} + \nabla\cdot\mathbf{F} = 0, + +where $\mathbf{Q}$ is the state vector and $\mathbf{F}$ is the vector of +fluxes. This module applies an artificial viscosity term by augmenting +the governing equations in the following way: + +.. math:: + + \partial_t \mathbf{Q} + \nabla\cdot\mathbf{F} = + \nabla\cdot{\varepsilon\nabla\mathbf{Q}}, + +where $\varepsilon$ is the artificial viscosity coefficient. +To evalutate the second order derivative numerically, the problem +is recast as a set of first order problems: + +.. math:: + + \partial_t{\mathbf{Q}} + \nabla\cdot\mathbf{F} &= \nabla\cdot\mathbf{R} \\ + \mathbf{R} &= \varepsilon\nabla\mathbf{Q} + +where $\mathbf{R}$ is an auxiliary variable, and the artificial viscosity +coefficient, $\varepsilon$, is spatially dependent and calculated using the +smoothness indicator of [Persson_2012]_: + +.. math:: + + S_e = \frac{\langle u_{N_p} - u_{N_{p-1}}, u_{N_p} - + u_{N_{p-1}}\rangle_e}{\langle u_{N_p}, u_{N_p} \rangle_e} + +where: + +- $S_e$ is the smoothness indicator +- $u_{N_p}$ is the solution in modal basis at the current polynomial order +- $u_{N_{p-1}}$ is the truncated modal represention to the polynomial order $p-1$ +- The $L_2$ inner product on an element is denoted $\langle \cdot,\cdot \rangle_e$ + +The elementwise viscosity is then calculated: + +.. math:: + + \varepsilon_e = + \begin{cases} + 0, & s_e < s_0 - \kappa \\ + \frac{1}{2}\left( 1 + \sin \frac{\pi(s_e - s_0)}{2 \kappa} \right ), + & s_0-\kappa \le s_e \le s_0+\kappa \\ + 1, & s_e > s_0+\kappa + \end{cases} + +where: + +- $\varepsilon_e$ is the element viscosity +- $s_e = \log_{10}{S_e} \sim 1/p^4$ is the smoothness indicator +- $s_0$ is a reference smoothness value +- $\kappa$ controls the width of the transition between 0 to 1 + +Smoothness Indicator Evaluation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autofunction:: smoothness_indicator + +AV RHS Evaluation +^^^^^^^^^^^^^^^^^ + +.. autofunction:: av_operator +""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np + +from pytools import memoize_in, keyed_memoize_in +from pytools.obj_array import obj_array_vectorize +from meshmode.dof_array import thaw, DOFArray +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.eager import interior_trace_pair, cross_rank_trace_pairs +from grudge.symbolic.primitives import TracePair +from grudge.dof_desc import DD_VOLUME_MODAL, DD_VOLUME + + +# FIXME: Remove when get_array_container_context is added to meshmode +def _get_actx(obj): + if isinstance(obj, TracePair): + return _get_actx(obj.int) + if isinstance(obj, np.ndarray): + return _get_actx(obj[0]) + elif isinstance(obj, DOFArray): + return obj.array_context + else: + raise ValueError("Unknown type; can't retrieve array context.") + + +# Tweak the behavior of np.outer to return a lower-dimensional object if either/both +# of the arguments are scalars (np.outer always returns a matrix) +def _outer(a, b): + if isinstance(a, np.ndarray) and isinstance(b, np.ndarray): + return np.outer(a, b) + else: + return a*b + + +def _facial_flux_q(discr, q_tpair): + """Compute facial flux for each scalar component of Q.""" + actx = _get_actx(q_tpair) + + normal = thaw(actx, discr.normal(q_tpair.dd)) + + # This uses a central scalar flux along nhat: + # flux = 1/2 * (Q- + Q+) * nhat + flux_out = _outer(q_tpair.avg, normal) + + return discr.project(q_tpair.dd, "all_faces", flux_out) + + +def _facial_flux_r(discr, r_tpair): + """Compute facial flux for vector component of grad(Q).""" + actx = _get_actx(r_tpair) + + normal = thaw(actx, discr.normal(r_tpair.dd)) + + # This uses a central vector flux along nhat: + # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat + flux_out = r_tpair.avg @ normal + + return discr.project(r_tpair.dd, "all_faces", flux_out) + + +def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): + r"""Compute the artificial viscosity right-hand-side. + + Computes the the right-hand-side term for artificial viscosity. + + .. math:: + + \mbox{RHS}_{\mbox{av}} = \nabla\cdot{\varepsilon\nabla\mathbf{Q}} + + Parameters + ---------- + q: :class:`~meshmode.dof_array.DOFArray` or :class:`~numpy.ndarray` + + Single :class:`~meshmode.dof_array.DOFArray` for a scalar or an object array + (:class:`~numpy.ndarray`) for a vector of + :class:`~meshmode.dof_array.DOFArray` on which to operate. + + When used with fluid solvers, *q* is expected to be the fluid state array + of the canonical conserved variables (mass, energy, momentum) + for the fluid along with a vector of species masses for multi-component + fluids. + + boundaries: float + + Dictionary of boundary functions, one for each valid boundary tag + + alpha: float + + The maximum artificial viscosity coefficient to be applied + + boundary_kwargs: :class:`dict` + + dictionary of extra arguments to pass through to the boundary conditions + + Returns + ------- + numpy.ndarray + + The artificial viscosity operator applied to *q*. + """ + if boundary_kwargs is None: + boundary_kwargs = dict() + + # Get smoothness indicator based on first component + indicator_field = q[0] if isinstance(q, np.ndarray) else q + indicator = smoothness_indicator(discr, indicator_field, **kwargs) + + # R=Grad(Q) volume part + if isinstance(q, np.ndarray): + grad_q_vol = np.stack(obj_array_vectorize(discr.weak_grad, q), axis=0) + else: + grad_q_vol = discr.weak_grad(q) + + # Total flux of fluid soln Q across element boundaries + q_bnd_flux = (_facial_flux_q(discr, q_tpair=interior_trace_pair(discr, q)) + + sum(_facial_flux_q(discr, q_tpair=pb_tpair) + for pb_tpair in cross_rank_trace_pairs(discr, q))) + q_bnd_flux2 = sum(bnd.soln_gradient_flux(discr, btag, soln=q, **boundary_kwargs) + for btag, bnd in boundaries.items()) + # if isinstance(q, np.ndarray): + # q_bnd_flux2 = np.stack(q_bnd_flux2) + q_bnd_flux = q_bnd_flux + q_bnd_flux2 + + # Compute R + r = discr.inverse_mass( + -alpha * indicator * (grad_q_vol - discr.face_mass(q_bnd_flux)) + ) + + # RHS_av = div(R) volume part + div_r_vol = discr.weak_div(r) + # Total flux of grad(Q) across element boundaries + r_bnd_flux = (_facial_flux_r(discr, r_tpair=interior_trace_pair(discr, r)) + + sum(_facial_flux_r(discr, r_tpair=pb_tpair) + for pb_tpair in cross_rank_trace_pairs(discr, r)) + + sum(bnd.av_flux(discr, btag, diffusion=r, **boundary_kwargs) + for btag, bnd in boundaries.items())) + + # Return the AV RHS term + return discr.inverse_mass(-div_r_vol + discr.face_mass(r_bnd_flux)) + + +def artificial_viscosity(discr, t, eos, boundaries, q, alpha, **kwargs): + """Interface :function:`av_operator` with backwards-compatible API.""" + from warnings import warn + warn("Do not call artificial_viscosity; it is now called av_operator. This" + "function will disappear in 2021", DeprecationWarning, stacklevel=2) + return av_operator(discr=discr, boundaries=boundaries, + boundary_kwargs={"t": t, "eos": eos}, q=q, alpha=alpha, **kwargs) + + +def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): + r"""Calculate the smoothness indicator. + + Parameters + ---------- + u: meshmode.dof_array.DOFArray + The field that is used to calculate the smoothness indicator. + + kappa + An optional argument that controls the width of the transition from 0 to 1. + s0 + An optional argument that sets the smoothness level to limit + on. Values in the range $(-\infty,0]$ are allowed, where $-\infty$ results in + all cells being tagged and 0 results in none. + + Returns + ------- + meshmode.dof_array.DOFArray + The elementwise constant values between 0 and 1 which indicate the smoothness + of a given element. + """ + if not isinstance(u, DOFArray): + raise ValueError("u argument must be a DOFArray.") + + actx = u.array_context + + @memoize_in(actx, (smoothness_indicator, "smooth_comp_knl")) + def indicator_prg(): + """Compute the smoothness indicator for all elements.""" + from arraycontext import make_loopy_program + from meshmode.transform_metadata import (ConcurrentElementInameTag, + ConcurrentDOFInameTag) + import loopy as lp + t_unit = make_loopy_program([ + "{[iel]: 0 <= iel < nelements}", + "{[idof]: 0 <= idof < ndiscr_nodes_in}", + "{[jdof]: 0 <= jdof < ndiscr_nodes_in}", + "{[kdof]: 0 <= kdof < ndiscr_nodes_in}" + ], + """ + result[iel,idof] = sum(kdof, vec[iel, kdof] \ + * vec[iel, kdof] \ + * modes_active_flag[kdof]) / \ + sum(jdof, vec[iel, jdof] \ + * vec[iel, jdof] \ + + 1.0e-12 / ndiscr_nodes_in) + """, + name="smooth_comp", + ) + return lp.tag_inames(t_unit, {"iel": ConcurrentElementInameTag(), + "idof": ConcurrentDOFInameTag()}) + + @keyed_memoize_in(actx, (smoothness_indicator, + "highest_mode"), + lambda grp: grp.discretization_key()) + def highest_mode(grp): + return actx.from_numpy( + np.asarray([1 if sum(mode_id) == grp.order + else 0 + for mode_id in grp.mode_ids()]) + ) + + # Convert to modal solution representation + modal_map = discr.connection_from_dds(DD_VOLUME, DD_VOLUME_MODAL) + uhat = modal_map(u) + + # Compute smoothness indicator value + indicator = DOFArray( + actx, + data=tuple( + actx.call_loopy( + indicator_prg(), + vec=uhat[grp.index], + modes_active_flag=highest_mode(grp))["result"] + for grp in discr.discr_from_dd("vol").groups + ) + ) + indicator = actx.np.log10(indicator + 1.0e-12) + + # Compute artificial viscosity percentage based on indicator and set parameters + yesnol = actx.np.greater(indicator, (s0 - kappa)) + yesnou = actx.np.greater(indicator, (s0 + kappa)) + sin_indicator = actx.np.where( + yesnol, + 0.5 * (1.0 + actx.np.sin(np.pi * (indicator - s0) / (2.0 * kappa))), + 0.0 * indicator, + ) + indicator = actx.np.where(yesnou, 1.0 + 0.0 * indicator, sin_indicator) + + return indicator diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index ac8a7d862..3d41c750d 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -121,6 +121,7 @@ class PrescribedInviscidBoundary(FluidBC): .. automethod:: boundary_pair .. automethod:: inviscid_divergence_flux .. automethod:: soln_gradient_flux + .. automethod:: av_flux """ def __init__(self, inviscid_divergence_flux_func=None, boundary_pair_func=None, @@ -204,6 +205,32 @@ def soln_gradient_flux(self, discr, btag, soln, **kwargs): cv = make_conserved(discr.dim, q=soln) return self.cv_gradient_flux(discr, btag, cv, **kwargs).join() + def s_boundary_flux(self, discr, btag, grad_cv, **kwargs): + r"""Get $\nabla\mathbf{Q}$ flux across the boundary faces.""" + actx = grad_cv.mass[0].array_context + boundary_discr = discr.discr_from_dd(btag) + nodes = thaw(actx, boundary_discr.nodes()) + nhat = thaw(actx, discr.normal(btag)) + grad_cv_minus = discr.project("vol", btag, grad_cv) + if self._fluid_soln_grad_func: + grad_cv_plus = \ + self._fluid_soln_grad_func(nodes, nhat=nhat, + grad_cv=grad_cv_minus, **kwargs) + else: + grad_cv_plus = grad_cv_minus + bnd_grad_pair = TracePair(btag, interior=grad_cv_minus, + exterior=grad_cv_plus) + + return self._boundary_quantity( + discr, btag, self._fluid_soln_grad_flux_func(bnd_grad_pair, nhat), + **kwargs + ) + + def av_flux(self, discr, btag, diffusion, **kwargs): + """Get the diffusive fluxes for the AV operator API.""" + diff_cv = make_conserved(discr.dim, q=diffusion) + return self.s_boundary_flux(discr, btag, grad_cv=diff_cv, **kwargs).join() + def t_gradient_flux(self, discr, btag, cv, eos, **kwargs): """Get the "temperature flux" through boundary *btag*.""" cv_minus = discr.project("vol", btag, cv) @@ -305,7 +332,8 @@ class AdiabaticSlipBoundary(PrescribedInviscidBoundary): def __init__(self): """Initialize AdiabaticSlipBoundary.""" PrescribedInviscidBoundary.__init__( - self, boundary_pair_func=self.adiabatic_slip_pair + self, boundary_pair_func=self.adiabatic_slip_pair, + fluid_solution_gradient_func=self.exterior_grad_q ) def adiabatic_slip_pair(self, discr, cv, btag, **kwargs): @@ -342,18 +370,35 @@ def adiabatic_slip_pair(self, discr, cv, btag, **kwargs): momentum=ext_mom, species_mass=int_cv.species_mass) return TracePair(btag, interior=int_cv, exterior=ext_cv) + def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): + """Get the exterior grad(Q) on the boundary.""" + # Grab some boundary-relevant data + dim, = grad_cv.mass.shape + + # Subtract 2*wall-normal component of q + # to enforce q=0 on the wall + s_mom_normcomp = np.outer(nhat, np.dot(grad_cv.momentum, nhat)) + s_mom_flux = grad_cv.momentum - 2*s_mom_normcomp + + # flip components to set a neumann condition + return make_conserved(dim, mass=-grad_cv.mass, energy=-grad_cv.energy, + momentum=-s_mom_flux, + species_mass=-grad_cv.species_mass) + class AdiabaticNoslipMovingBoundary(PrescribedInviscidBoundary): r"""Boundary condition implementing a noslip moving boundary. .. automethod:: adiabatic_noslip_pair .. automethod:: exterior_soln + .. automethod:: exterior_grad_q """ def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" PrescribedInviscidBoundary.__init__( - self, boundary_pair_func=self.adiabatic_noslip_pair + self, boundary_pair_func=self.adiabatic_noslip_pair, + fluid_solution_gradient_func=self.exterior_grad_q ) # Check wall_velocity (assumes dim is correct) if wall_velocity is None: @@ -384,6 +429,10 @@ def exterior_soln(self, discr, cv, btag, **kwargs): return make_conserved(dim=dim, mass=int_cv.mass, energy=int_cv.energy, momentum=ext_mom) + def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): + """Get the exterior solution on the boundary.""" + return(-grad_cv) + class IsothermalNoSlipBoundary(PrescribedInviscidBoundary): r"""Isothermal no-slip viscous wall boundary. diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index cc3f7141f..432571c15 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -5,6 +5,7 @@ ^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: Vortex2D .. autoclass:: SodShock1D +.. autoclass:: DoubleMachReflection .. autoclass:: Lump .. autoclass:: MulticomponentLump .. autoclass:: Uniform @@ -266,6 +267,123 @@ def __call__(self, x_vec, *, eos=None, **kwargs): momentum=mom) +class DoubleMachReflection: + r"""Implement the double shock reflection problem. + + The double shock reflection solution is crafted after [Woodward_1984]_ + and is defined by: + + .. math:: + + {\rho}(x < x_s(y,t)) &= \gamma \rho_j\\ + {\rho}(x > x_s(y,t)) &= \gamma\\ + {\rho}{V_x}(x < x_s(y,t)) &= u_p \cos(\pi/6)\\ + {\rho}{V_x}(x > x_s(y,t)) &= 0\\ + {\rho}{V_y}(x > x_s(y,t)) &= u_p \sin(\pi/6)\\ + {\rho}{V_y}(x > x_s(y,t)) &= 0\\ + {\rho}E(x < x_s(y,t)) &= (\gamma-1)p_j\\ + {\rho}E(x > x_s(y,t)) &= (\gamma-1), + + where the shock position is given, + + .. math:: + + x_s = x_0 + y/\sqrt{3} + 2 u_s t/\sqrt{3} + + and the normal shock jump relations are + + .. math:: + + \rho_j &= \frac{(\gamma + 1) u_s^2}{(\gamma-1) u_s^2 + 2} \\ + p_j &= \frac{2 \gamma u_s^2 - (\gamma - 1)}{\gamma+1} \\ + u_p &= 2 \frac{u_s^2-1}{(\gamma+1) u_s} + + The initial shock location is given by $x_0$ and $u_s$ is the shock speed. + + .. automethod:: __init__ + .. automethod:: __call__ + """ + + def __init__( + self, shock_location=1.0/6.0, shock_speed=4.0 + ): + """Initialize double shock reflection parameters. + + Parameters + ---------- + shock_location: float + initial location of shock + shock_speed: float + shock speed, Mach number + """ + self._shock_location = shock_location + self._shock_speed = shock_speed + + def __call__(self, x_vec, *, eos=None, time=0, **kwargs): + r""" + Create double mach reflection solution at locations *x_vec*. + + At times $t > 0$, calls to this routine create an advanced solution + under the assumption of constant normal shock speed *shock_speed*. + The advanced solution *is not* the exact solution, but is appropriate + for use as an exact boundary solution on the top and upstream (left) + side of the domain. + + Parameters + ---------- + time: float + Time at which to compute the solution + x_vec: numpy.ndarray + Nodal coordinates + eos: :class:`mirgecom.eos.GasEOS` + Equation of state class to be used in construction of soln (if needed) + """ + t = time + # Fail if numdim is other than 2 + if(len(x_vec)) != 2: + raise ValueError("Case only defined for 2 dimensions") + if eos is None: + eos = IdealSingleGas() + + gm1 = eos.gamma() - 1.0 + gp1 = eos.gamma() + 1.0 + gmn1 = 1.0 / gm1 + x_rel = x_vec[0] + y_rel = x_vec[1] + actx = x_rel.array_context + + # Normal Shock Relations + shock_speed_2 = self._shock_speed * self._shock_speed + rho_jump = gp1 * shock_speed_2 / (gm1 * shock_speed_2 + 2.) + p_jump = (2. * eos.gamma() * shock_speed_2 - gm1) / gp1 + up = 2. * (shock_speed_2 - 1.) / (gp1 * self._shock_speed) + + rhol = eos.gamma() * rho_jump + rhor = eos.gamma() + ul = up * np.cos(np.pi/6.0) + ur = 0.0 + vl = - up * np.sin(np.pi/6.0) + vr = 0.0 + rhoel = gmn1 * p_jump + rhoer = gmn1 * 1.0 + + xinter = (self._shock_location + y_rel/np.sqrt(3.0) + + 2.0*self._shock_speed*t/np.sqrt(3.0)) + sigma = 0.05 + xtanh = 1.0/sigma*(x_rel-xinter) + mass = rhol/2.0*(actx.np.tanh(-xtanh)+1.0)+rhor/2.0*(actx.np.tanh(xtanh)+1.0) + rhoe = (rhoel/2.0*(actx.np.tanh(-xtanh)+1.0) + + rhoer/2.0*(actx.np.tanh(xtanh)+1.0)) + u = ul/2.0*(actx.np.tanh(-xtanh)+1.0)+ur/2.0*(actx.np.tanh(xtanh)+1.0) + v = vl/2.0*(actx.np.tanh(-xtanh)+1.0)+vr/2.0*(actx.np.tanh(xtanh)+1.0) + + vel = make_obj_array([u, v]) + mom = mass * vel + energy = rhoe + .5*mass*np.dot(vel, vel) + + return make_conserved(dim=2, mass=mass, energy=energy, momentum=mom) + + class Lump: r"""Solution initializer for N-dimensional Gaussian lump of mass. diff --git a/requirements.txt b/requirements.txt index 4dc2b033d..88e1ff89a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,7 @@ pymetis importlib-resources psutil pyyaml +gmsh # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic diff --git a/test/test_av.py b/test/test_av.py new file mode 100644 index 000000000..858afd7b4 --- /dev/null +++ b/test/test_av.py @@ -0,0 +1,219 @@ +"""Test the artificial viscosity functions.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import logging +import numpy as np +import pyopencl as cl +import pytest +from meshmode.array_context import PyOpenCLArrayContext +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL +from mirgecom.artificial_viscosity import ( + av_operator, + smoothness_indicator +) +from grudge.eager import EagerDGDiscretization +from pyopencl.tools import ( # noqa + pytest_generate_tests_for_pyopencl as pytest_generate_tests, +) + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("order", [1, 5]) +def test_tag_cells(ctx_factory, dim, order): + """Test tag_cells. + + Tests that the cells tagging properly tags cells + given prescribed solutions. + """ + cl_ctx = ctx_factory() + queue = cl.CommandQueue(cl_ctx) + actx = PyOpenCLArrayContext(queue) + + nel_1d = 2 + tolerance = 1.e-16 + + def norm_indicator(expected, discr, soln, **kwargs): + return(discr.norm(expected-smoothness_indicator(discr, soln, **kwargs), + np.inf)) + + from meshmode.mesh.generation import generate_regular_rect_mesh + + mesh = generate_regular_rect_mesh( + a=(-1.0, )*dim, b=(1.0, )*dim, n=(nel_1d, ) * dim + ) + + discr = EagerDGDiscretization(actx, mesh, order=order) + nodes = thaw(actx, discr.nodes()) + nele = mesh.nelements + zeros = 0.0*nodes[0] + + # test jump discontinuity + soln = actx.np.where(nodes[0] > 0.0+zeros, 1.0+zeros, zeros) + err = norm_indicator(1.0, discr, soln) + + assert err < tolerance, "Jump discontinuity should trigger indicator (1.0)" + + # get meshmode polynomials + group = discr.discr_from_dd("vol").groups[0] + basis = group.basis() # only one group + unit_nodes = group.unit_nodes + modes = group.mode_ids() + order = group.order + + # loop over modes and check smoothness + for i, mode in enumerate(modes): + ele_soln = basis[i](unit_nodes) + soln[0].set(np.tile(ele_soln, (nele, 1))) + if sum(mode) == order: + expected = 1.0 + else: + expected = 0.0 + err = norm_indicator(expected, discr, soln) + assert err < tolerance, "Only highest modes should trigger indicator (1.0)" + + # Test s0 + s0 = -1. + eps = 1.0e-6 + + phi_n_p = np.sqrt(np.power(10, s0)) + phi_n_pm1 = np.sqrt(1. - np.power(10, s0)) + + # pick a polynomial of order n_p, n_p-1 + n_p = np.array(np.nonzero((np.sum(modes, axis=1) == order))).flat[0] + n_pm1 = np.array(np.nonzero((np.sum(modes, axis=1) == order-1))).flat[0] + + # create test soln perturbed around + # Solution above s0 + ele_soln = ((phi_n_p+eps)*basis[n_p](unit_nodes) + + phi_n_pm1*basis[n_pm1](unit_nodes)) + soln[0].set(np.tile(ele_soln, (nele, 1))) + err = norm_indicator(1.0, discr, soln, s0=s0, kappa=0.0) + assert err < tolerance, ( + "A function with an indicator >s0 should trigger indicator") + + # Solution below s0 + ele_soln = ((phi_n_p-eps)*basis[n_p](unit_nodes) + + phi_n_pm1*basis[n_pm1](unit_nodes)) + soln[0].set(np.tile(ele_soln, (nele, 1))) + err = norm_indicator(0.0, discr, soln, s0=s0, kappa=0.0) + assert err < tolerance, ( + "A function with an indicator tolerance, "s_e>s_0-kappa should trigger indicator" + + # lower bound + err = norm_indicator(1.0, discr, soln, s0=s0-(kappa+shift), kappa=kappa) + assert err < tolerance, "s_e>s_0+kappa should fully trigger indicator (1.0)" + err = norm_indicator(1.0, discr, soln, s0=s0-(kappa-shift), kappa=kappa) + assert err > tolerance, "s_e Date: Mon, 18 Oct 2021 13:05:14 -0500 Subject: [PATCH 263/873] Convert doublemach to Euler --- examples/doublemach-mpi.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 4cbf50efd..7a4968027 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -43,7 +43,7 @@ from grudge.shortcuts import make_visualizer -from mirgecom.navierstokes import ns_operator +from mirgecom.euler import euler_operator from mirgecom.artificial_viscosity import ( av_operator, smoothness_indicator @@ -55,7 +55,7 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( AdiabaticNoslipMovingBoundary, - PrescribedBoundary + PrescribedInviscidBoundary ) from mirgecom.initializers import DoubleMachReflection from mirgecom.eos import IdealSingleGas @@ -227,9 +227,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, initializer = DoubleMachReflection() boundaries = { - DTAG_BOUNDARY("ic1"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("ic2"): PrescribedBoundary(initializer), - DTAG_BOUNDARY("ic3"): PrescribedBoundary(initializer), + DTAG_BOUNDARY("ic1"): + PrescribedInviscidBoundary(fluid_solution_func=initializer), + DTAG_BOUNDARY("ic2"): + PrescribedInviscidBoundary(fluid_solution_func=initializer), + DTAG_BOUNDARY("ic3"): + PrescribedInviscidBoundary(fluid_solution_func=initializer), DTAG_BOUNDARY("wall"): AdiabaticNoslipMovingBoundary(), DTAG_BOUNDARY("out"): AdiabaticNoslipMovingBoundary(), } @@ -386,8 +389,8 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - return ns_operator( - discr, cv=state, t=t, boundaries=boundaries, eos=eos + return euler_operator( + discr, cv=state, time=t, boundaries=boundaries, eos=eos ) + make_conserved(dim, q=av_operator( discr, q=state.join(), boundaries=boundaries, boundary_kwargs={"time": t, "eos": eos}, alpha=alpha, From 57ce36825ab458499a20014e096fa8c05d8070fd Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 18 Oct 2021 13:51:26 -0500 Subject: [PATCH 264/873] Build Y1 lazy --- conda-env.yml | 1 + examples/doublemach-mpi.py | 4 +- examples/hotplate-mpi.py | 469 +++++++++++++++++++++++++++++++++++++ examples/mixture-mpi.py | 4 - examples/nsmix-mpi.py | 4 +- examples/poiseuille-mpi.py | 15 +- mirgecom/boundary.py | 7 +- requirements.txt | 1 - test/test_eos.py | 6 +- test/test_navierstokes.py | 6 +- 10 files changed, 492 insertions(+), 25 deletions(-) create mode 100644 examples/hotplate-mpi.py diff --git a/conda-env.yml b/conda-env.yml index 1b17db5e5..da3c54ab1 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -21,3 +21,4 @@ dependencies: - cantera - h5py * nompi_* # Make sure cantera does not pull in MPI through h5py - vtk +- gmsh diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 7a4968027..aa2969f06 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -36,7 +36,7 @@ ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.dof_desc import DTAG_BOUNDARY from grudge.eager import EagerDGDiscretization @@ -193,7 +193,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, order = 3 discr = EagerDGDiscretization(actx, local_mesh, order=order, mpi_communicator=comm) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) dim = 2 if logmgr: diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py new file mode 100644 index 000000000..61df85a37 --- /dev/null +++ b/examples/hotplate-mpi.py @@ -0,0 +1,469 @@ +"""Demonstrate a fluid between two hot plates in 2d.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial + +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from meshmode.dof_array import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa + +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer +from grudge.dof_desc import DTAG_BOUNDARY + +from mirgecom.fluid import make_conserved +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import get_sim_timestep + +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + PrescribedViscousBoundary, + IsothermalNoSlipBoundary +) +from mirgecom.transport import SimpleTransport +from mirgecom.eos import IdealSingleGas + +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None): + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): + """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + # timestepping control + timestepper = rk4_step + t_final = 1e-6 + current_cfl = .1 + current_dt = 1e-8 + current_t = 0 + constant_cfl = False + current_step = 0 + + # some i/o frequencies + nstatus = 1 + nviz = 1 + nrestart = 100 + nhealth = 1 + + # some geometry setup + dim = 2 + if dim != 2: + raise ValueError("This example must be run with dim = 2.") + left_boundary_location = 0 + right_boundary_location = 0.1 + bottom_boundary_location = 0 + top_boundary_location = .02 + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + n_refine = 2 + npts_x = 6 * n_refine + npts_y = 4 * n_refine + npts_axis = (npts_x, npts_y) + box_ll = (left_boundary_location, bottom_boundary_location) + box_ur = (right_boundary_location, top_boundary_location) + generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) + from mirgecom.simutil import generate_and_distribute_mesh + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + order = 1 + discr = EagerDGDiscretization( + actx, local_mesh, order=order, mpi_communicator=comm + ) + nodes = thaw(actx, discr.nodes()) + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:1.9e}, "), + ("max_temperature", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + mu = 1.0 + kappa = 1.0 + + top_boundary_temperature = 400 + bottom_boundary_temperature = 300 + + def tramp_2d(x_vec, eos, cv=None, **kwargs): + y = x_vec[1] + ones = 0*y + 1.0 + l_y = top_boundary_location - bottom_boundary_location + p0 = eos.gas_const() * bottom_boundary_temperature + delta_temp = top_boundary_temperature - bottom_boundary_temperature + dtdy = delta_temp / l_y + temperature_y = bottom_boundary_temperature + dtdy*y + mass = p0 / (eos.gas_const() * temperature_y) + e0 = p0 / (eos.gamma() - 1.0) + velocity = 0 * x_vec + energy = e0 * ones + momentum = mass * velocity + return make_conserved(2, mass=mass, energy=energy, momentum=momentum) + + initializer = tramp_2d + eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=mu, + thermal_conductivity=kappa)) + exact = initializer(x_vec=nodes, eos=eos) + + boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary( + wall_temperature=bottom_boundary_temperature), + DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary( + wall_temperature=top_boundary_temperature)} + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_state = restart_data["state"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_state = exact + + vis_timer = None + + visualizer = make_visualizer(discr, order) + + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=casename, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_status(step, t, dt, dv, state, component_errors): + from grudge.op import nodal_min, nodal_max + p_min = nodal_min(discr, "vol", dv.pressure) + p_max = nodal_max(discr, "vol", dv.pressure) + t_min = nodal_min(discr, "vol", dv.temperature) + t_max = nodal_max(discr, "vol", dv.temperature) + if constant_cfl: + cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + cfl = nodal_max(discr, "vol", + get_viscous_cfl(discr, eos, dt, state)) + if rank == 0: + logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" + f"----- Pressure({p_min}, {p_max})\n" + f"----- Temperature({t_min}, {t_max})\n" + "----- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + + def my_write_viz(step, t, state, dv=None): + if dv is None: + dv = eos.dependent_vars(state) + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("exact", exact), + ("resid", resid)] + + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "state": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, component_errors): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + from mirgecom.simutil import allsync + if allsync(check_range_local(discr, "vol", dv.pressure, 86129, 86131), + comm, op=MPI.LOR): + health_error = True + from grudge.op import nodal_max, nodal_min + p_min = nodal_min(discr, "vol", dv.pressure) + p_max = nodal_max(discr, "vol", dv.pressure) + logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + + if check_naninf_local(discr, "vol", dv.temperature): + health_error = True + logger.info(f"{rank=}: NANs/INFs in temperature data.") + + if allsync(check_range_local(discr, "vol", dv.temperature, 299, 401), + comm, op=MPI.LOR): + health_error = True + from grudge.op import nodal_max, nodal_min + t_min = nodal_min(discr, "vol", dv.temperature) + t_max = nodal_max(discr, "vol", dv.temperature) + logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + + exittol = .1 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact soln.") + + return health_error + + def my_pre_step(step, t, dt, state): + try: + dv = None + component_errors = None + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if do_health: + dv = eos.dependent_vars(state) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + from mirgecom.simutil import allsync + health_errors = allsync( + my_health_check(state, dv, component_errors), comm, + op=MPI.LOR + ) + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + if dv is None: + dv = eos.dependent_vars(state) + my_write_viz(step=step, t=t, state=state, dv=dv) + + dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, + t_final, constant_cfl) + + if do_status: # needed because logging fails to make output + if dv is None: + dv = eos.dependent_vars(state) + if component_errors is None: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(step=step, t=t, dt=dt, dv=dv, state=state, + component_errors=component_errors) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise + + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + return ns_operator(discr, eos=eos, boundaries=boundaries, cv=state, t=t) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + state=current_state, t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = eos.dependent_vars(current_state) + final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, eos, t_final, constant_cfl) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, current_state, exact) + + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_status(step=current_step, t=current_t, dt=final_dt, dv=final_dv, + state=current_state, component_errors=component_errors) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + +if __name__ == "__main__": + import argparse + casename = "hotplate" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) + +# vim: foldmethod=marker diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 88a06ab3b..612a90925 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -279,10 +279,6 @@ def my_health_check(cv, dv, component_errors): y = cv.species_mass_fractions e = eos.internal_energy(cv) / cv.mass check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y) - # temp_resid = pyro_mechanism.get_temperature_residual( - # e, dv.temperature, y, True - # ) - # temp_resid = discr.norm(temp_resid, np.inf) temp_resid = discr.norm(check_temp - dv.temperature, np.inf) if temp_resid > 1e-12: health_error = False diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 5bdc8fb97..5c704fbd6 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -55,7 +55,6 @@ from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture import cantera -import pyrometheus as pyro from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -232,7 +231,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - pyrometheus_mechanism = pyro.get_thermochem_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import make_pyrometheus_mechanism + pyrometheus_mechanism = make_pyrometheus_mechanism(actx, cantera_soln) eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature, transport_model=transport_model) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index c063d7aeb..1703fb089 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -52,7 +52,7 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedViscousBoundary, - IsothermalNoSlipBoundary + AdiabaticNoslipMovingBoundary ) from mirgecom.transport import SimpleTransport from mirgecom.eos import IdealSingleGas @@ -153,7 +153,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch - npts_axis = (50, 30) + n_refine = 5 + npts_x = 10 * n_refine + npts_y = 6 * n_refine + npts_axis = (npts_x, npts_y) box_ll = (left_boundary_location, ybottom) box_ur = (right_boundary_location, ytop) generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) @@ -162,7 +165,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - order = 1 + order = 2 discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) @@ -226,8 +229,8 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), - DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} + DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} if rst_filename: current_t = restart_data["t"] @@ -330,7 +333,7 @@ def my_health_check(state, dv, component_errors): t_max = nodal_max(discr, "vol", dv.temperature) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") - exittol = 10 + exittol = .1 if max(component_errors) > exittol: health_error = True if rank == 0: diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 3d41c750d..75a069723 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -427,7 +427,7 @@ def exterior_soln(self, discr, cv, btag, **kwargs): # Form the external boundary solution with the new momentum return make_conserved(dim=dim, mass=int_cv.mass, energy=int_cv.energy, - momentum=ext_mom) + momentum=ext_mom, species_mass=int_cv.species_mass) def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): """Get the exterior solution on the boundary.""" @@ -455,8 +455,7 @@ def isothermal_noslip_pair(self, discr, btag, eos, cv, **kwargs): """Get the interior and exterior solution (*cv*) on the boundary.""" cv_minus = discr.project("vol", btag, cv) - # t_plus = self._wall_temp + 0*cv_minus.mass - t_plus = eos.temperature(cv_minus) + t_plus = self._wall_temp + 0*cv_minus.mass velocity_plus = -cv_minus.momentum / cv_minus.mass mass_frac_plus = cv_minus.species_mass / cv_minus.mass @@ -476,7 +475,7 @@ def isothermal_noslip_pair(self, discr, btag, eos, cv, **kwargs): def temperature_bc(self, nodes, cv, temperature, eos, **kwargs): """Get temperature value to weakly prescribe wall bc.""" - return 2*self._wall_temp - temperature + return self._wall_temp + 0*temperature class PrescribedViscousBoundary(FluidBC): diff --git a/requirements.txt b/requirements.txt index c44815c92..92888638d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,6 @@ pymetis importlib-resources psutil pyyaml -gmsh # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic diff --git a/test/test_eos.py b/test/test_eos.py index 60fa2ba77..0f6435c89 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -45,7 +45,6 @@ as pytest_generate_tests) import cantera -import pyrometheus as pyro from mirgecom.eos import IdealSingleGas, PyrometheusMixture from mirgecom.initializers import ( Vortex2D, Lump, @@ -414,7 +413,7 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): tin = tempin * ones pin = pressin * ones yin = y0s * ones - tguess = 300.0 + tguess = 0*ones + 300.0 pyro_rho = prometheus_mechanism.get_density(pin, tin, yin) pyro_e = prometheus_mechanism.get_mixture_internal_energy_mass(tin, yin) @@ -485,7 +484,8 @@ def test_pyrometheus_kinetics(ctx_factory, mechname, rate_tol, y0): # Pyrometheus initialization mech_cti = get_mechanism_cti(mechname) cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) - pyro_obj = pyro.get_thermochem_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import make_pyrometheus_mechanism + pyro_obj = make_pyrometheus_mechanism(actx, cantera_soln) nspecies = pyro_obj.num_species print(f"PrometheusMixture::NumSpecies = {nspecies}") diff --git a/test/test_navierstokes.py b/test/test_navierstokes.py index 10ef64829..0f2e18ba5 100644 --- a/test/test_navierstokes.py +++ b/test/test_navierstokes.py @@ -45,7 +45,7 @@ from mirgecom.boundary import ( DummyBoundary, PrescribedViscousBoundary, - IsothermalNoSlipBoundary + AdiabaticNoslipMovingBoundary ) from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport @@ -286,8 +286,8 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): boundaries = { DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), - DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} + DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv_input, t=0.0) From ca1367454f804e0e2fe8708a8c88fbb5d379287e Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 24 Sep 2021 16:38:44 -0500 Subject: [PATCH 265/873] account for the fact that nodal reductions now return device scalars --- examples/autoignition-mpi.py | 4 +-- examples/heat-source-mpi.py | 2 +- examples/vortex-mpi.py | 6 ++-- examples/wave-mpi.py | 8 ++--- examples/wave.py | 6 ++-- mirgecom/logging_quantities.py | 5 ++- mirgecom/simutil.py | 16 +++++---- test/test_bc.py | 9 ++--- test/test_diffusion.py | 10 +++--- test/test_eos.py | 61 +++++++++++++++++++++------------- test/test_euler.py | 34 +++++++++++-------- test/test_filter.py | 6 ++-- test/test_fluid.py | 22 ++++++++---- test/test_init.py | 38 +++++++++++++-------- test/test_inviscid.py | 26 ++++++++++----- test/test_lazy.py | 4 ++- test/test_operators.py | 11 +++--- test/test_restart.py | 2 +- test/test_simutil.py | 2 +- test/test_symbolic.py | 2 +- test/test_viscous.py | 47 +++++++++++++++----------- test/test_wave.py | 9 +++-- 22 files changed, 201 insertions(+), 129 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5ec03576f..c64ccb810 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -380,13 +380,13 @@ def my_get_timestep(t, dt, state): from mirgecom.inviscid import get_inviscid_timestep ts_field = current_cfl * get_inviscid_timestep(discr, eos=eos, cv=state) from grudge.op import nodal_min - dt = nodal_min(discr, "vol", ts_field) + dt = actx.to_numpy(nodal_min(discr, "vol", ts_field))[()] cfl = current_cfl else: from mirgecom.inviscid import get_inviscid_cfl ts_field = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state) from grudge.op import nodal_max - cfl = nodal_max(discr, "vol", ts_field) + cfl = actx.to_numpy(nodal_max(discr, "vol", ts_field))[()] return ts_field, cfl, min(t_remaining, dt) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index deeee6e1f..30e909112 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -182,7 +182,7 @@ def rhs(t, u): if logmgr: set_dt(logmgr, dt) logmgr.tick_after() - final_answer = discr.norm(u, np.inf) + final_answer = actx.to_numpy(discr.norm(u, np.inf)) resid = abs(final_answer - 0.00020620711665201585) if resid > 1e-15: raise ValueError(f"Run did not produce the expected result {resid=}") diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index b31e28cf4..fc5071029 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -227,8 +227,10 @@ def my_write_status(state, component_errors, cfl=None): else: from grudge.op import nodal_max from mirgecom.inviscid import get_inviscid_cfl - cfl = nodal_max(discr, "vol", - get_inviscid_cfl(discr, eos, current_dt, cv=state)) + cfl = actx.to_numpy( + nodal_max( + discr, "vol", + get_inviscid_cfl(discr, eos, current_dt, cv=state)))[()] if rank == 0: logger.info( f"------ {cfl=}\n" diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 267ec9d9f..f7ba0f662 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -138,10 +138,10 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non current_cfl = 0.485 wave_speed = 1.0 from grudge.dt_utils import characteristic_lengthscales - dt = current_cfl * characteristic_lengthscales(actx, discr) / wave_speed + nodal_dt = characteristic_lengthscales(actx, discr) / wave_speed from grudge.op import nodal_min - dt = nodal_min(discr, "vol", dt) + dt = actx.to_numpy(current_cfl * nodal_min(discr, "vol", nodal_dt))[()] t_final = 1 @@ -217,7 +217,7 @@ def rhs(t, w): ) if istep % 10 == 0: - print(istep, t, discr.norm(fields[0])) + print(istep, t, actx.to_numpy(discr.norm(fields[0]))) vis.write_parallel_vtk_file( comm, "fld-wave-mpi-%03d-%04d.vtu" % (rank, istep), @@ -237,7 +237,7 @@ def rhs(t, w): set_dt(logmgr, dt) logmgr.tick_after() - final_soln = discr.norm(fields[0]) + final_soln = actx.to_numpy(discr.norm(fields[0])) assert np.abs(final_soln - 0.04409852463947439) < 1e-14 diff --git a/examples/wave.py b/examples/wave.py index b652b42ae..27d922a40 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -106,9 +106,9 @@ def main(use_profiling=False, use_logmgr=False, lazy_eval: bool = False): current_cfl = 0.485 wave_speed = 1.0 from grudge.dt_utils import characteristic_lengthscales - dt = current_cfl * characteristic_lengthscales(actx, discr) / wave_speed + nodal_dt = characteristic_lengthscales(actx, discr) / wave_speed from grudge.op import nodal_min - dt = nodal_min(discr, "vol", dt) + dt = actx.to_numpy(current_cfl * nodal_min(discr, "vol", nodal_dt))[()] print("%d elements" % mesh.nelements) @@ -152,7 +152,7 @@ def rhs(t, w): if istep % 10 == 0: if use_profiling: print(actx.tabulate_profiling_data()) - print(istep, t, discr.norm(fields[0], np.inf)) + print(istep, t, actx.to_numpy(discr.norm(fields[0], np.inf))) vis.write_vtk_file("fld-wave-%04d.vtu" % istep, [ ("u", fields[0]), diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index 5e94e1965..40dd2161f 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -42,6 +42,7 @@ from logpyle import (LogQuantity, PostLogQuantity, LogManager, MultiPostLogQuantity, add_run_info, add_general_quantities, add_simulation_quantities) +from arraycontext.container import get_container_context_recursively from meshmode.array_context import PyOpenCLArrayContext from meshmode.discretization import Discretization import pyopencl as cl @@ -279,10 +280,12 @@ def __call__(self): quantity = self.state_vars[self.quantity] + actx = get_container_context_recursively(quantity) + if self.axis is not None: # e.g. momentum quantity = quantity[self.axis] - return self._discr_reduction(quantity) + return actx.to_numpy(self._discr_reduction(quantity))[()] # }}} diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d94cd3916..45f1cf6e1 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -119,10 +119,10 @@ def get_sim_timestep(discr, state, t, dt, cfl, eos, if constant_cfl: from mirgecom.viscous import get_viscous_timestep from grudge.op import nodal_min - mydt = cfl * nodal_min( - discr, "vol", - get_viscous_timestep(discr=discr, eos=eos, cv=state) - ) + mydt = state.array_context.to_numpy( + cfl * nodal_min( + discr, "vol", + get_viscous_timestep(discr=discr, eos=eos, cv=state)))[()] return min(t_remaining, mydt) @@ -269,9 +269,10 @@ def allsync(local_values, comm=None, op=None): def check_range_local(discr, dd, field, min_value, max_value): """Check for any negative values.""" + actx = field.array_context return ( - op.nodal_min_loc(discr, dd, field) < min_value - or op.nodal_max_loc(discr, dd, field) > max_value + actx.to_numpy(op.nodal_min_loc(discr, dd, field)) < min_value + or actx.to_numpy(op.nodal_max_loc(discr, dd, field)) > max_value ) @@ -288,8 +289,9 @@ def compare_fluid_solutions(discr, red_state, blue_state): .. note:: This is a collective routine and must be called by all MPI ranks. """ + actx = red_state.array_context resid = red_state - blue_state - return [discr.norm(v, np.inf) for v in resid.join()] + return [actx.to_numpy(discr.norm(v, np.inf)) for v in resid.join()] def generate_and_distribute_mesh(comm, generate_mesh): diff --git a/test/test_bc.py b/test/test_bc.py index 3ef0894c9..133edc95e 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -83,8 +83,9 @@ def test_slipwall_identity(actx_factory, dim): wall = AdiabaticSlipBoundary() uniform_state = initializer(nodes) - from functools import partial - bnd_norm = partial(discr.norm, p=np.inf, dd=BTAG_ALL) + + def bnd_norm(vec): + return actx.to_numpy(discr.norm(vec, p=np.inf, dd=BTAG_ALL)) bnd_pair = wall.boundary_pair(discr, btag=BTAG_ALL, eos=eos, cv=uniform_state) @@ -135,8 +136,8 @@ def test_slipwall_flux(actx_factory, dim, order): nhat = thaw(actx, discr.normal(BTAG_ALL)) h = 1.0 / nel_1d - from functools import partial - bnd_norm = partial(discr.norm, p=np.inf, dd=BTAG_ALL) + def bnd_norm(vec): + return actx.to_numpy(discr.norm(vec, p=np.inf, dd=BTAG_ALL)) logger.info(f"Number of {dim}d elems: {mesh.nelements}") # for velocities in each direction diff --git a/test/test_diffusion.py b/test/test_diffusion.py index e66b06293..7a74785d4 100644 --- a/test/test_diffusion.py +++ b/test/test_diffusion.py @@ -301,7 +301,7 @@ def get_rhs(t, u): expected_u = sym_eval(p.sym_u, t) - rel_linf_err = ( + rel_linf_err = actx.to_numpy( discr.norm(u - expected_u, np.inf) / discr.norm(expected_u, np.inf)) eoc_rec.add_data_point(1./n, rel_linf_err) @@ -385,7 +385,7 @@ def get_rhs(t, u): ("rhs", rhs), ]) - linf_err = discr.norm(rhs, np.inf) + linf_err = actx.to_numpy(discr.norm(rhs, np.inf)) assert(linf_err < 1e-11) # Now check stability @@ -415,7 +415,7 @@ def get_rhs(t, u): ("u_steady", u_steady), ]) - linf_diff = discr.norm(u - u_steady, np.inf) + linf_diff = actx.to_numpy(discr.norm(u - u_steady, np.inf)) assert linf_diff < 0.1 @@ -536,7 +536,7 @@ def sym_eval(expr): assert isinstance(diffusion_u1, DOFArray) expected_diffusion_u1 = sym_eval(sym_diffusion_u1) - rel_linf_err = ( + rel_linf_err = actx.to_numpy( discr.norm(diffusion_u1 - expected_diffusion_u1, np.inf) / discr.norm(expected_diffusion_u1, np.inf)) assert rel_linf_err < 1.e-5 @@ -556,7 +556,7 @@ def sym_eval(expr): sym_eval(sym_diffusion_u1), sym_eval(sym_diffusion_u2) ]) - rel_linf_err = ( + rel_linf_err = actx.to_numpy( discr.norm(diffusion_u_vector - expected_diffusion_u_vector, np.inf) / discr.norm(expected_diffusion_u_vector, np.inf)) assert rel_linf_err < 1.e-5 diff --git a/test/test_eos.py b/test/test_eos.py index 7c90c87c9..841cdbac4 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -149,18 +149,21 @@ def test_pyrometheus_mechanisms(ctx_factory, mechname, rate_tol, y0): print(f"can_omega = {can_omega}") print(f"prom_omega = {prom_omega}") - assert discr.norm((prom_c - can_c) / can_c, np.inf) < 1e-14 - assert discr.norm((prom_t - can_t) / can_t, np.inf) < 1e-14 - assert discr.norm((prom_rho - can_rho) / can_rho, np.inf) < 1e-14 - assert discr.norm((prom_p - can_p) / can_p, np.inf) < 1e-14 - assert discr.norm((prom_e - can_e) / can_e, np.inf) < 1e-6 - assert discr.norm((prom_k - can_k) / can_k, np.inf) < 1e-10 + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + assert inf_norm((prom_c - can_c) / can_c) < 1e-14 + assert inf_norm((prom_t - can_t) / can_t) < 1e-14 + assert inf_norm((prom_rho - can_rho) / can_rho) < 1e-14 + assert inf_norm((prom_p - can_p) / can_p) < 1e-14 + assert inf_norm((prom_e - can_e) / can_e) < 1e-6 + assert inf_norm((prom_k - can_k) / can_k) < 1e-10 # Pyro chem test comparisons for i, rate in enumerate(can_r): - assert discr.norm((prom_r[i] - rate), np.inf) < rate_tol + assert inf_norm(prom_r[i] - rate) < rate_tol for i, rate in enumerate(can_omega): - assert discr.norm((prom_omega[i] - rate), np.inf) < rate_tol + assert inf_norm(prom_omega[i] - rate) < rate_tol @pytest.mark.parametrize("mechname", ["uiuc", "sanDiego"]) @@ -246,11 +249,14 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): print(f"pyro_eos.temp = {temperature}") print(f"pyro_eos.e = {internal_energy}") + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + tol = 1e-14 - assert discr.norm((cv.mass - pyro_rho) / pyro_rho, np.inf) < tol - assert discr.norm((temperature - pyro_t) / pyro_t, np.inf) < tol - assert discr.norm((internal_energy - pyro_e) / pyro_e, np.inf) < tol - assert discr.norm((p - pyro_p) / pyro_p, np.inf) < tol + assert inf_norm((cv.mass - pyro_rho) / pyro_rho) < tol + assert inf_norm((temperature - pyro_t) / pyro_t) < tol + assert inf_norm((internal_energy - pyro_e) / pyro_e) < tol + assert inf_norm((p - pyro_p) / pyro_p) < tol @pytest.mark.parametrize(("mechname", "rate_tol"), @@ -345,24 +351,27 @@ def test_pyrometheus_kinetics(ctx_factory, mechname, rate_tol, y0): pyro_omega = pyro_obj.get_net_production_rates(rhoin, tin, yin) # Print + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + print(f"can_r = {can_r}") print(f"pyro_r = {pyro_r}") - abs_diff = discr.norm(pyro_r - can_r, np.inf) + abs_diff = inf_norm(pyro_r - can_r) if abs_diff > 1e-14: min_r = (np.abs(can_r)).min() if min_r > 0: - assert discr.norm((pyro_r - can_r) / can_r, np.inf) < rate_tol + assert inf_norm((pyro_r - can_r) / can_r) < rate_tol else: - assert discr.norm(pyro_r, np.inf) < rate_tol + assert inf_norm(pyro_r) < rate_tol print(f"can_omega = {can_omega}") print(f"pyro_omega = {pyro_omega}") for i, omega in enumerate(can_omega): omin = np.abs(omega).min() if omin > 1e-12: - assert discr.norm((pyro_omega[i] - omega) / omega, np.inf) < 1e-8 + assert inf_norm((pyro_omega[i] - omega) / omega) < 1e-8 else: - assert discr.norm(pyro_omega[i], np.inf) < 1e-12 + assert inf_norm(pyro_omega[i]) < 1e-12 @pytest.mark.parametrize("dim", [1, 2, 3]) @@ -398,16 +407,19 @@ def test_idealsingle_lump(ctx_factory, dim): eos = IdealSingleGas() cv = lump(nodes) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + p = eos.pressure(cv) exp_p = 1.0 - errmax = discr.norm(p - exp_p, np.inf) + errmax = inf_norm(p - exp_p) exp_ke = 0.5 * cv.mass ke = eos.kinetic_energy(cv) - kerr = discr.norm(ke - exp_ke, np.inf) + kerr = inf_norm(ke - exp_ke) te = eos.total_energy(cv, p) - terr = discr.norm(te - cv.energy, np.inf) + terr = inf_norm(te - cv.energy) logger.info(f"lump_soln = {cv}") logger.info(f"pressure = {p}") @@ -446,17 +458,20 @@ def test_idealsingle_vortex(ctx_factory): vortex = Vortex2D() cv = vortex(nodes) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + gamma = eos.gamma() p = eos.pressure(cv) exp_p = cv.mass ** gamma - errmax = discr.norm(p - exp_p, np.inf) + errmax = inf_norm(p - exp_p) exp_ke = 0.5 * np.dot(cv.momentum, cv.momentum) / cv.mass ke = eos.kinetic_energy(cv) - kerr = discr.norm(ke - exp_ke, np.inf) + kerr = inf_norm(ke - exp_ke) te = eos.total_energy(cv, p) - terr = discr.norm(te - cv.energy, np.inf) + terr = inf_norm(te - cv.energy) logger.info(f"vortex_soln = {cv}") logger.info(f"pressure = {p}") diff --git a/test/test_euler.py b/test/test_euler.py index 1f7b3daa6..821e9b43e 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -137,14 +137,17 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): f"rhoy_rhs = {rhoy_rhs}\n" ) - assert discr.norm(rho_resid, np.inf) < tolerance - assert discr.norm(rhoe_resid, np.inf) < tolerance + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + assert inf_norm(rho_resid) < tolerance + assert inf_norm(rhoe_resid) < tolerance for i in range(dim): - assert discr.norm(mom_resid[i], np.inf) < tolerance + assert inf_norm(mom_resid[i]) < tolerance for i in range(nspecies): - assert discr.norm(rhoy_resid[i], np.inf) < tolerance + assert inf_norm(rhoy_resid[i]) < tolerance - err_max = discr.norm(rho_resid, np.inf) + err_max = inf_norm(rho_resid) eoc_rec0.add_data_point(1.0 / nel_1d, err_max) # set a non-zero, but uniform velocity component @@ -165,15 +168,15 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): mom_resid = rhs_resid.momentum rhoy_resid = rhs_resid.species_mass - assert discr.norm(rho_resid, np.inf) < tolerance - assert discr.norm(rhoe_resid, np.inf) < tolerance + assert inf_norm(rho_resid) < tolerance + assert inf_norm(rhoe_resid) < tolerance for i in range(dim): - assert discr.norm(mom_resid[i], np.inf) < tolerance + assert inf_norm(mom_resid[i]) < tolerance for i in range(nspecies): - assert discr.norm(rhoy_resid[i], np.inf) < tolerance + assert inf_norm(rhoy_resid[i]) < tolerance - err_max = discr.norm(rho_resid, np.inf) + err_max = inf_norm(rho_resid) eoc_rec1.add_data_point(1.0 / nel_1d, err_max) logger.info( @@ -231,7 +234,7 @@ def test_vortex_rhs(actx_factory, order): discr, eos=IdealSingleGas(), boundaries=boundaries, cv=vortex_soln, time=0.0) - err_max = discr.norm(inviscid_rhs.join(), np.inf) + err_max = actx.to_numpy(discr.norm(inviscid_rhs.join(), np.inf)) eoc_rec.add_data_point(1.0 / nel_1d, err_max) logger.info( @@ -290,7 +293,8 @@ def test_lump_rhs(actx_factory, dim, order): ) expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) - err_max = discr.norm((inviscid_rhs-expected_rhs).join(), np.inf) + err_max = actx.to_numpy( + discr.norm((inviscid_rhs-expected_rhs).join(), np.inf)) if err_max > maxxerr: maxxerr = err_max @@ -365,7 +369,9 @@ def test_multilump_rhs(actx_factory, dim, order, v0): print(f"inviscid_rhs = {inviscid_rhs}") print(f"expected_rhs = {expected_rhs}") - err_max = discr.norm((inviscid_rhs-expected_rhs).join(), np.inf) + + err_max = actx.to_numpy( + discr.norm((inviscid_rhs-expected_rhs).join(), np.inf)) if err_max > maxxerr: maxxerr = err_max @@ -500,7 +506,7 @@ def rhs(t, q): maxerr = max(write_soln(cv, False)) else: expected_result = initializer(nodes, time=t) - maxerr = discr.norm((cv - expected_result).join(), np.inf) + maxerr = actx.to_numpy(discr.norm((cv - expected_result).join(), np.inf)) logger.info(f"Max Error: {maxerr}") if maxerr > exittol: diff --git a/test/test_filter.py b/test/test_filter.py index 78b7d5028..85814fb9c 100644 --- a/test/test_filter.py +++ b/test/test_filter.py @@ -192,7 +192,7 @@ def test_filter_function(actx_factory, dim, order, do_viz=False): filtered_soln = filter_modally(discr, "vol", cutoff, frfunc, uniform_soln) soln_resid = uniform_soln - filtered_soln - max_errors = [discr.norm(v, np.inf) for v in soln_resid] + max_errors = [actx.to_numpy(discr.norm(v, np.inf)) for v in soln_resid] tol = 1e-14 @@ -217,7 +217,7 @@ def polyfn(coeff): # , x_vec): filtered_field = filter_modally(discr, "vol", cutoff, frfunc, field) soln_resid = field - filtered_field - max_errors = [discr.norm(v, np.inf) for v in soln_resid] + max_errors = [actx.to_numpy(discr.norm(v, np.inf)) for v in soln_resid] logger.info(f"Field = {field}") logger.info(f"Filtered = {filtered_field}") logger.info(f"Max Errors (poly) = {max_errors}") @@ -253,6 +253,6 @@ def polyfn(coeff): # , x_vec): ] vis.write_vtk_file(f"filter_test_{field_order}.vtu", io_fields) field_resid = unfiltered_spectrum - filtered_spectrum - max_errors = [discr.norm(v, np.inf) for v in field_resid] + max_errors = [actx.to_numpy(discr.norm(v, np.inf)) for v in field_resid] # fields should be different, but not too different assert(tol > np.max(max_errors) > threshold) diff --git a/test/test_fluid.py b/test/test_fluid.py index 4f24e0581..9cac5d7aa 100644 --- a/test/test_fluid.py +++ b/test/test_fluid.py @@ -84,7 +84,7 @@ def test_velocity_gradient_sanity(actx_factory, dim, mass_exp, vel_fac): tol = 1e-11 exp_result = vel_fac * np.eye(dim) * ones - grad_v_err = [discr.norm(grad_v[i] - exp_result[i], np.inf) + grad_v_err = [actx.to_numpy(discr.norm(grad_v[i] - exp_result[i], np.inf)) for i in range(dim)] assert max(grad_v_err) < tol @@ -133,7 +133,8 @@ def exact_grad_row(xdata, gdim, dim): return exact_grad_row comp_err = make_obj_array([ - discr.norm(grad_v[i] - exact_grad_row(nodes[i], i, dim), np.inf) + actx.to_numpy( + discr.norm(grad_v[i] - exact_grad_row(nodes[i], i, dim), np.inf)) for i in range(dim)]) err_max = comp_err.max() eoc.add_data_point(h, err_max) @@ -188,9 +189,13 @@ def test_velocity_gradient_structure(actx_factory): assert grad_v.shape == (dim, dim) from meshmode.dof_array import DOFArray assert type(grad_v[0, 0]) == DOFArray - assert discr.norm(grad_v - exp_result, np.inf) < tol - assert discr.norm(grad_v.T - exp_trans, np.inf) < tol - assert discr.norm(np.trace(grad_v) - exp_trace, np.inf) < tol + + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + assert inf_norm(grad_v - exp_result) < tol + assert inf_norm(grad_v.T - exp_trans) < tol + assert inf_norm(np.trace(grad_v) - exp_trace) < tol @pytest.mark.parametrize("dim", [1, 2, 3]) @@ -237,10 +242,13 @@ def test_species_mass_gradient(actx_factory, dim): from meshmode.dof_array import DOFArray assert type(grad_y[0, 0]) == DOFArray + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + tol = 1e-11 for idim in range(dim): ispec = 2*idim exact_grad = np.array([(ispec*(idim*dim+1))*(iidim+1) for iidim in range(dim)]) - assert discr.norm(grad_y[ispec] - exact_grad, np.inf) < tol - assert discr.norm(grad_y[ispec+1] + exact_grad, np.inf) < tol + assert inf_norm(grad_y[ispec] - exact_grad) < tol + assert inf_norm(grad_y[ispec+1] + exact_grad) < tol diff --git a/test/test_init.py b/test/test_init.py index d2d85af99..c65c445db 100644 --- a/test/test_init.py +++ b/test/test_init.py @@ -84,7 +84,7 @@ def test_uniform_init(ctx_factory, dim, nspecies): def inf_norm(data): if len(data) > 0: - return discr.norm(data, np.inf) + return actx.to_numpy(discr.norm(data, np.inf)) else: return 0.0 @@ -140,7 +140,7 @@ def test_lump_init(ctx_factory): p = 0.4 * (cv.energy - 0.5 * np.dot(cv.momentum, cv.momentum) / cv.mass) exp_p = 1.0 - errmax = discr.norm(p - exp_p, np.inf) + errmax = actx.to_numpy(discr.norm(p - exp_p, np.inf)) logger.info(f"lump_soln = {cv}") logger.info(f"pressure = {p}") @@ -177,7 +177,7 @@ def test_vortex_init(ctx_factory): gamma = 1.4 p = 0.4 * (cv.energy - 0.5 * np.dot(cv.momentum, cv.momentum) / cv.mass) exp_p = cv.mass ** gamma - errmax = discr.norm(p - exp_p, np.inf) + errmax = actx.to_numpy(discr.norm(p - exp_p, np.inf)) logger.info(f"vortex_soln = {cv}") logger.info(f"pressure = {p}") @@ -220,7 +220,8 @@ def test_shock_init(ctx_factory): eos = IdealSingleGas() p = eos.pressure(initsoln) - assert discr.norm(actx.np.where(nodes_x < 0.5, p-xpl, p-xpr), np.inf) < tol + assert actx.to_numpy( + discr.norm(actx.np.where(nodes_x < 0.5, p-xpl, p-xpr), np.inf)) < tol @pytest.mark.parametrize("dim", [1, 2, 3]) @@ -254,15 +255,18 @@ def test_uniform(ctx_factory, dim): initsoln = initr(time=0.0, x_vec=nodes) tol = 1e-15 - assert discr.norm(initsoln.mass - 1.0, np.inf) < tol - assert discr.norm(initsoln.energy - 2.5, np.inf) < tol + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + assert inf_norm(initsoln.mass - 1.0) < tol + assert inf_norm(initsoln.energy - 2.5) < tol print(f"Uniform Soln:{initsoln}") eos = IdealSingleGas() p = eos.pressure(initsoln) print(f"Press:{p}") - assert discr.norm(p - 1.0, np.inf) < tol + assert inf_norm(p - 1.0) < tol @pytest.mark.parametrize("dim", [1, 2, 3]) @@ -301,30 +305,33 @@ def test_pulse(ctx_factory, dim): pulse = make_pulse(amp=amp, r0=r0, w=w, r=nodes) print(f"Pulse = {pulse}") + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + # does it return the expected exponential? pulse_check = actx.np.exp(-.5 * r2) print(f"exact: {pulse_check}") pulse_resid = pulse - pulse_check print(f"pulse residual: {pulse_resid}") - assert(discr.norm(pulse_resid, np.inf) < tol) + assert(inf_norm(pulse_resid) < tol) # proper scaling with amplitude? amp = 2.0 pulse = 0 pulse = make_pulse(amp=amp, r0=r0, w=w, r=nodes) pulse_resid = pulse - (pulse_check + pulse_check) - assert(discr.norm(pulse_resid, np.inf) < tol) + assert(inf_norm(pulse_resid) < tol) # proper scaling with r? amp = 1.0 rcheck = np.sqrt(2.0) * nodes pulse = make_pulse(amp=amp, r0=r0, w=w, r=rcheck) - assert(discr.norm(pulse - (pulse_check * pulse_check), np.inf) < tol) + assert(inf_norm(pulse - (pulse_check * pulse_check)) < tol) # proper scaling with w? w = w / np.sqrt(2.0) pulse = make_pulse(amp=amp, r0=r0, w=w, r=nodes) - assert(discr.norm(pulse - (pulse_check * pulse_check), np.inf) < tol) + assert(inf_norm(pulse - (pulse_check * pulse_check)) < tol) @pytest.mark.parametrize("dim", [1, 2, 3]) @@ -370,12 +377,15 @@ def test_multilump(ctx_factory, dim): numcvspec = len(cv.species_mass) print(f"get_num_species = {numcvspec}") + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + assert numcvspec == nspecies - assert discr.norm(cv.mass - rho0) == 0.0 + assert inf_norm(cv.mass - rho0) == 0.0 p = 0.4 * (cv.energy - 0.5 * np.dot(cv.momentum, cv.momentum) / cv.mass) exp_p = 1.0 - errmax = discr.norm(p - exp_p, np.inf) + errmax = inf_norm(p - exp_p) species_mass = cv.species_mass spec_r = make_obj_array([nodes - centers[i] for i in range(nspecies)]) @@ -389,7 +399,7 @@ def test_multilump(ctx_factory, dim): print(f"exp_mass = {exp_mass}") print(f"mass_resid = {mass_resid}") - assert discr.norm(mass_resid, np.inf) == 0.0 + assert inf_norm(mass_resid) == 0.0 logger.info(f"lump_soln = {cv}") logger.info(f"pressure = {p}") diff --git a/test/test_inviscid.py b/test/test_inviscid.py index 37f0cea94..c97b37501 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -175,16 +175,20 @@ def test_inviscid_flux_components(actx_factory, dim): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) flux = inviscid_flux(discr, eos, cv) - assert discr.norm(p - p_exact, np.inf) < tolerance + + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + assert inf_norm(p - p_exact) < tolerance logger.info(f"{dim}d flux = {flux}") # for velocity zero, these components should be == zero - assert discr.norm(flux.mass, 2) == 0.0 - assert discr.norm(flux.energy, 2) == 0.0 + assert inf_norm(flux.mass) == 0.0 + assert inf_norm(flux.energy) == 0.0 # The momentum diagonal should be p # Off-diagonal should be identically 0 - assert discr.norm(flux.momentum - p0*np.identity(dim), np.inf) < tolerance + assert inf_norm(flux.momentum - p0*np.identity(dim)) < tolerance @pytest.mark.parametrize(("dim", "livedim"), [ @@ -230,19 +234,23 @@ def test_inviscid_mom_flux_components(actx_factory, dim, livedim): ) cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) - assert discr.norm(p - p_exact, np.inf) < tolerance + + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + assert inf_norm(p - p_exact) < tolerance flux = inviscid_flux(discr, eos, cv) logger.info(f"{dim}d flux = {flux}") vel_exact = mom / mass # first two components should be nonzero in livedim only - assert discr.norm(flux.mass - mom, np.inf) == 0 + assert inf_norm(flux.mass - mom) == 0 eflux_exact = (energy + p_exact)*vel_exact - assert discr.norm(flux.energy - eflux_exact, np.inf) == 0 + assert inf_norm(flux.energy - eflux_exact) == 0 logger.info("Testing momentum") xpmomflux = mass*np.outer(vel_exact, vel_exact) + p_exact*np.identity(dim) - assert discr.norm(flux.momentum - xpmomflux, np.inf) < tolerance + assert inf_norm(flux.momentum - xpmomflux) < tolerance @pytest.mark.parametrize("nspecies", [0, 10]) @@ -302,7 +310,7 @@ def test_facial_flux(actx_factory, nspecies, order, dim): def inf_norm(data): if len(data) > 0: - return discr.norm(data, np.inf, dd="all_faces") + return actx.to_numpy(discr.norm(data, np.inf, dd="all_faces")) else: return 0.0 diff --git a/test/test_lazy.py b/test/test_lazy.py index e4af85344..75e645e0f 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -79,7 +79,9 @@ def componentwise_norm(a): from mirgecom.fluid import ConservedVars if isinstance(a, ConservedVars): return componentwise_norm(a.join()) - return obj_array_vectorize(lambda b: discr.norm(b, np.inf), a) + from arraycontext import get_container_context_recursively + actx = get_container_context_recursively(a) + return obj_array_vectorize(lambda b: actx.to_numpy(discr.norm(b, np.inf)), a) lhs = componentwise_norm(x - y) rhs = np.maximum( diff --git a/test/test_operators.py b/test/test_operators.py index 049a67b31..bff1f2146 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -217,10 +217,13 @@ def sym_eval(expr, x_vec): test_data = test_func(nodes) exact_grad = grad_test_func(nodes) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + if isinstance(test_data, ConservedVars): - err_scale = discr.norm(exact_grad.join(), np.inf) + err_scale = inf_norm(exact_grad.join()) else: - err_scale = discr.norm(exact_grad, np.inf) + err_scale = inf_norm(exact_grad) if err_scale <= 1e-16: err_scale = 1 @@ -238,10 +241,10 @@ def sym_eval(expr, x_vec): dim=dim, q=grad_operator(discr, test_data.join(), test_data_flux_bnd.join()) ) - grad_err = discr.norm((test_grad - exact_grad).join(), np.inf)/err_scale + grad_err = inf_norm((test_grad - exact_grad).join())/err_scale else: test_grad = grad_operator(discr, test_data, test_data_flux_bnd) - grad_err = discr.norm(test_grad - exact_grad, np.inf)/err_scale + grad_err = inf_norm(test_grad - exact_grad)/err_scale print(f"{test_grad=}") eoc.add_data_point(h_max, grad_err) diff --git a/test/test_restart.py b/test/test_restart.py index 287598e01..2b6b6dcdb 100644 --- a/test/test_restart.py +++ b/test/test_restart.py @@ -76,4 +76,4 @@ def test_restart_cv(actx_factory, nspecies): restart_data = read_restart_data(actx, rst_filename) resid = test_state - restart_data["state"] - assert discr.norm(resid.join(), np.inf) == 0 + assert actx.to_numpy(discr.norm(resid.join(), np.inf)) == 0 diff --git a/test/test_simutil.py b/test/test_simutil.py index 9f78062db..a590abcd9 100644 --- a/test/test_simutil.py +++ b/test/test_simutil.py @@ -134,7 +134,7 @@ def test_analytic_comparison(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) resid = vortex_soln - cv - expected_errors = [discr.norm(v, np.inf) for v in resid.join()] + expected_errors = [actx.to_numpy(discr.norm(v, np.inf)) for v in resid.join()] errors = compare_fluid_solutions(discr, cv, cv) assert max(errors) == 0 diff --git a/test/test_symbolic.py b/test/test_symbolic.py index c2337f1e6..489476014 100644 --- a/test/test_symbolic.py +++ b/test/test_symbolic.py @@ -164,7 +164,7 @@ def test_symbolic_evaluation(actx_factory): expected_f = np.exp(-t) * actx.np.cos(nodes[0]) * actx.np.sin(nodes[1]) - assert discr.norm(f - expected_f)/discr.norm(expected_f) < 1e-12 + assert actx.to_numpy(discr.norm(f - expected_f)/discr.norm(expected_f)) < 1e-12 if __name__ == "__main__": diff --git a/test/test_viscous.py b/test/test_viscous.py index 3fffb39e0..e132318ee 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -105,7 +105,7 @@ def test_viscous_stress_tensor(actx_factory, transport_model): tau = viscous_stress_tensor(discr, eos, cv, grad_cv) # The errors come from grad_v - assert discr.norm(tau - exp_tau, np.inf) < 1e-12 + assert actx.to_numpy(discr.norm(tau - exp_tau, np.inf)) < 1e-12 # Box grid generator widget lifted from @majosm and slightly bent @@ -189,6 +189,9 @@ def cv_flux_boundary(btag): discr = EagerDGDiscretization(actx, mesh, order=order) nodes = thaw(actx, discr.nodes()) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + # compute max element size from grudge.dt_utils import h_max_from_volume h_max = h_max_from_volume(discr) @@ -208,10 +211,10 @@ def cv_flux_boundary(btag): xp_tau = mu * (xp_grad_v + xp_grad_v.transpose()) # sanity check the gradient: - relerr_scale_e = 1.0 / discr.norm(xp_grad_cv.energy, np.inf) - relerr_scale_p = 1.0 / discr.norm(xp_grad_cv.momentum, np.inf) - graderr_e = discr.norm((grad_cv.energy - xp_grad_cv.energy), np.inf) - graderr_p = discr.norm((grad_cv.momentum - xp_grad_cv.momentum), np.inf) + relerr_scale_e = 1.0 / inf_norm(xp_grad_cv.energy) + relerr_scale_p = 1.0 / inf_norm(xp_grad_cv.momentum) + graderr_e = inf_norm(grad_cv.energy - xp_grad_cv.energy) + graderr_p = inf_norm(grad_cv.momentum - xp_grad_cv.momentum) graderr_e *= relerr_scale_e graderr_p *= relerr_scale_p assert graderr_e < 5e-7 @@ -231,14 +234,14 @@ def cv_flux_boundary(btag): grad_t = op.local_grad(discr, temperature) # sanity check - assert discr.norm(grad_p - xp_grad_p, np.inf)*dpscal < 5e-9 - assert discr.norm(grad_t - xp_grad_t, np.inf)*tscal < 5e-9 + assert inf_norm(grad_p - xp_grad_p)*dpscal < 5e-9 + assert inf_norm(grad_t - xp_grad_t)*tscal < 5e-9 # verify heat flux from mirgecom.viscous import conductive_heat_flux heat_flux = conductive_heat_flux(discr, eos, cv, grad_t) xp_heat_flux = -kappa*xp_grad_t - assert discr.norm(heat_flux - xp_heat_flux, np.inf) < 2e-8 + assert inf_norm(heat_flux - xp_heat_flux) < 2e-8 # verify diffusive mass flux is zilch (no scalar components) from mirgecom.viscous import diffusive_flux @@ -251,15 +254,15 @@ def cv_flux_boundary(btag): vflux = viscous_flux(discr, eos, cv, grad_cv, grad_t) efluxerr = ( - discr.norm(vflux.energy - xp_e_flux, np.inf) - / discr.norm(xp_e_flux, np.inf) + inf_norm(vflux.energy - xp_e_flux) + / inf_norm(xp_e_flux) ) momfluxerr = ( - discr.norm(vflux.momentum - xp_mom_flux, np.inf) - / discr.norm(xp_mom_flux, np.inf) + inf_norm(vflux.momentum - xp_mom_flux) + / inf_norm(xp_mom_flux) ) - assert discr.norm(vflux.mass, np.inf) == 0 + assert inf_norm(vflux.mass) == 0 e_eoc_rec.add_data_point(h_max, efluxerr) p_eoc_rec.add_data_point(h_max, momfluxerr) @@ -333,15 +336,18 @@ def test_species_diffusive_flux(actx_factory): from mirgecom.viscous import diffusive_flux j = diffusive_flux(discr, eos, cv, grad_cv) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + tol = 1e-10 for idim in range(dim): ispec = 2*idim exact_dy = np.array([((ispec+1)*(idim*dim+1))*(iidim+1) for iidim in range(dim)]) exact_j = -massval * d_alpha[ispec] * exact_dy - assert discr.norm(j[ispec] - exact_j, np.inf) < tol + assert inf_norm(j[ispec] - exact_j) < tol exact_j = massval * d_alpha[ispec+1] * exact_dy - assert discr.norm(j[ispec+1] - exact_j, np.inf) < tol + assert inf_norm(j[ispec+1] - exact_j) < tol def test_diffusive_heat_flux(actx_factory): @@ -403,15 +409,18 @@ def test_diffusive_heat_flux(actx_factory): from mirgecom.viscous import diffusive_flux j = diffusive_flux(discr, eos, cv, grad_cv) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + tol = 1e-10 for idim in range(dim): ispec = 2*idim exact_dy = np.array([((ispec+1)*(idim*dim+1))*(iidim+1) for iidim in range(dim)]) exact_j = -massval * d_alpha[ispec] * exact_dy - assert discr.norm(j[ispec] - exact_j, np.inf) < tol + assert inf_norm(j[ispec] - exact_j) < tol exact_j = massval * d_alpha[ispec+1] * exact_dy - assert discr.norm(j[ispec+1] - exact_j, np.inf) < tol + assert inf_norm(j[ispec+1] - exact_j) < tol @pytest.mark.parametrize("array_valued", [False, True]) @@ -462,7 +471,7 @@ def test_local_max_species_diffusivity(actx_factory, dim, array_valued): expected *= f calculated = get_local_max_species_diffusivity(actx, discr, d_alpha) - assert discr.norm(calculated-expected, np.inf) == 0 + assert actx.to_numpy(discr.norm(calculated-expected, np.inf)) == 0 @pytest.mark.parametrize("dim", [1, 2, 3]) @@ -519,4 +528,4 @@ def test_viscous_timestep(actx_factory, dim, mu, vel): dt_expected = chlen / (speed_total + (mu / chlen)) error = (dt_expected - dt_field) / dt_expected - assert discr.norm(error, np.inf) == 0 + assert actx.to_numpy(discr.norm(error, np.inf)) == 0 diff --git a/test/test_wave.py b/test/test_wave.py index d33c98259..5e4cf8d3b 100644 --- a/test/test_wave.py +++ b/test/test_wave.py @@ -184,7 +184,7 @@ def sym_eval(expr, t): expected_rhs = sym_eval(sym_rhs, t_check) - rel_linf_err = ( + rel_linf_err = actx.to_numpy( discr.norm(rhs - expected_rhs, np.inf) / discr.norm(expected_rhs, np.inf)) eoc_rec.add_data_point(1./n, rel_linf_err) @@ -269,8 +269,11 @@ def get_rhs(t, w): ("v_expected", expected_fields[1:]), ]) - err = discr.norm(fields-expected_fields, np.inf) - max_err = discr.norm(expected_fields, np.inf) + def inf_norm(x): + return actx.to_numpy(discr.norm(x, np.inf)) + + err = inf_norm(fields-expected_fields) + max_err = inf_norm(expected_fields) assert err < max_err From 599d7e62cc5ebb5457b6732ffff87e2685125e9d Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Mon, 11 Oct 2021 12:08:04 -0500 Subject: [PATCH 266/873] temporarily change grudge branch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4dc2b033d..ddfe23291 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge +--editable git+https://github.com/majosm/grudge.git@nodal-reduction-device-scalar#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From dfb511da2a8a6d4302f5c034bc6027600ece9708 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 20 Oct 2021 11:31:41 -0500 Subject: [PATCH 267/873] account for h_min/max_from_volume returning device scalars --- test/test_operators.py | 2 +- test/test_viscous.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_operators.py b/test/test_operators.py index bff1f2146..d60a8ec80 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -247,7 +247,7 @@ def inf_norm(x): grad_err = inf_norm(test_grad - exact_grad)/err_scale print(f"{test_grad=}") - eoc.add_data_point(h_max, grad_err) + eoc.add_data_point(actx.to_numpy(h_max), grad_err) assert ( eoc.order_estimate() >= order - 0.5 diff --git a/test/test_viscous.py b/test/test_viscous.py index e132318ee..d30e37cdf 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -263,8 +263,8 @@ def inf_norm(x): ) assert inf_norm(vflux.mass) == 0 - e_eoc_rec.add_data_point(h_max, efluxerr) - p_eoc_rec.add_data_point(h_max, momfluxerr) + e_eoc_rec.add_data_point(actx.to_numpy(h_max), efluxerr) + p_eoc_rec.add_data_point(actx.to_numpy(h_max), momfluxerr) assert ( e_eoc_rec.order_estimate() >= order - 0.5 From 980f6dddf598ae58393a261f7ba1e308f3efcf38 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 26 Oct 2021 07:13:30 -0500 Subject: [PATCH 268/873] Add backwards-compatible thermochem interface. --- mirgecom/thermochemistry.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index acff97001..81bbb9438 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,6 +1,7 @@ r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. .. autofunction:: make_pyrometheus_mechanism_class +.. autofunction:: make_pyrometheus_mechanism """ __copyright__ = """ @@ -106,7 +107,7 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): return PyroWrapper -def make_pyrometheus_mechanism_class(cantera_soln): +def make_pyrometheus_mechanism_class(cantera_soln, temperature_niter=5): """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism class. This routine creates and returns an instance of a :mod:`pyrometheus` @@ -124,4 +125,27 @@ def make_pyrometheus_mechanism_class(cantera_soln): ------- :mod:`pyrometheus` ThermoChem class """ - return _pyro_thermochem_wrapper_class(cantera_soln) + return _pyro_thermochem_wrapper_class(cantera_soln, temperature_niter) + + +def make_pyrometheus_mechanism(actx, cantera_soln): + """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism. + + This routine creates and returns an instance of a :mod:`pyrometheus` + thermochemical mechanism for use in a MIRGE-Com fluid EOS. + + Parameters + ---------- + actx: :class:`arraycontext.ArrayContext` + Array context from which to get the numpy-like namespace for + :mod:`pyrometheus` + cantera_soln: + Cantera Solution for the thermochemical mechanism to be used + + Returns + ------- + :mod:`pyrometheus` ThermoChem class + """ + from warnings import warn + warn("make_pyrometheus_mechanism is deprecated and will disappear in Q1/2022") + return _pyro_thermochem_wrapper_class(cantera_soln)(actx.np) From 598519ece0150ec9e50631e29d0f58e9e5b33383 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 26 Oct 2021 07:14:52 -0500 Subject: [PATCH 269/873] Update nsmix for new thermochem interface. --- examples/nsmix-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 5c704fbd6..6d80eac3c 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -231,8 +231,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_pyrometheus_mechanism - pyrometheus_mechanism = make_pyrometheus_mechanism(actx, cantera_soln) + from mirgecom.thermochemistry import make_pyrometheus_mechanism_class + pyrometheus_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature, transport_model=transport_model) From d5e387d3a2642a7c59fb5d365ccb284ed4b71b9b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 26 Oct 2021 08:39:09 -0500 Subject: [PATCH 270/873] Update to new thermochem interface --- test/test_eos.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 5eeae5353..31e9935d2 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -101,9 +101,9 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): mech_cti = get_mechanism_cti(mechname) sol = cantera.Solution(phase_id="gas", source=mech_cti) - from mirgecom.thermochemistry import make_pyrometheus_mechanism - pyro_eager = make_pyrometheus_mechanism(actx_eager, sol) - pyro_lazy = make_pyrometheus_mechanism(actx_lazy, sol) + from mirgecom.thermochemistry import make_pyrometheus_mechanism_class + pyro_eager = make_pyrometheus_mechanism_class(sol)(actx_eager.np) + pyro_lazy = make_pyrometheus_mechanism_class(sol)(actx_lazy.np) nspecies = pyro_eager.num_species print(f"PyrometheusMixture::NumSpecies = {nspecies}") From abe99d15e1b41b5be16f77e545c3d02e7c7f9fc6 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 26 Oct 2021 10:06:22 -0500 Subject: [PATCH 271/873] remove explicit actx argument from advance_state --- mirgecom/steppers.py | 50 ++++++++++++++++++----------------- test/test_time_integrators.py | 6 ++--- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index e14f513bb..3ff5460eb 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -32,10 +32,14 @@ from logpyle import set_dt from mirgecom.logging_quantities import set_sim_state from pytools import memoize_in -from arraycontext import freeze, thaw +from arraycontext import ( + freeze, + thaw, + get_container_context_recursively +) -def compile_timestepper(actx, timestepper, state, rhs): +def _compile_timestepper(actx, timestepper, rhs): """Create lazy evaluation version of the timestepper.""" @memoize_in(actx, ("mirgecom_compiled_operator", timestepper, rhs)) @@ -47,8 +51,11 @@ def get_timestepper(): return get_timestepper() -def compile_rhs(actx, rhs, state): +def _compile_rhs(actx, rhs): """Create lazy evaluation version of the rhs.""" + if actx is None: + return rhs + @memoize_in(actx, ("mirgecom_compiled_rhs", rhs)) def get_rhs(): @@ -57,13 +64,18 @@ def get_rhs(): return get_rhs() +def _evaluate_state(actx, state): + if actx is None: + return state + return thaw(freeze(state, actx), actx) + + def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, - logmgr=None, eos=None, dim=None, - actx=None): + logmgr=None, eos=None, dim=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -109,13 +121,12 @@ def _advance_state_stepper_func(rhs, timestepper, if t_final <= t: return istep, t, state - if actx is None: - actx = state.array_context + actx = get_container_context_recursively(state) - compiled_rhs = compile_rhs(actx, rhs, state) + compiled_rhs = _compile_rhs(actx, rhs) while t < t_final: - state = thaw(freeze(state, actx), actx) + state = _evaluate_state(actx, state) if logmgr: logmgr.tick_before() @@ -145,8 +156,7 @@ def _advance_state_leap(rhs, timestepper, state, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, - logmgr=None, eos=None, dim=None, - actx=None): + logmgr=None, eos=None, dim=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. Parameters @@ -190,19 +200,14 @@ def _advance_state_leap(rhs, timestepper, state, if t_final <= t: return istep, t, state - if actx is None: - actx = state.array_context + actx = get_container_context_recursively(state) - compiled_rhs = compile_rhs(actx, rhs, state) + compiled_rhs = _compile_rhs(actx, rhs) stepper_cls = generate_singlerate_leap_advancer(timestepper, component_id, compiled_rhs, t, dt, state) - while t < t_final: - # This is only needed because Leap testing in test/test_time_integrators.py - # tests on single scalar values rather than an array-context-ready array - # container like a CV. - if isinstance(state, np.ndarray): - state = thaw(freeze(state, actx), actx) + while t < t_final: + state = _evaluate_state(actx, state) if pre_step_callback is not None: state, dt = pre_step_callback(state=state, @@ -271,8 +276,7 @@ def advance_state(rhs, timestepper, state, t_final, t=0.0, istep=0, dt=0, pre_step_callback=None, post_step_callback=None, - logmgr=None, eos=None, dim=None, - actx=None): + logmgr=None, eos=None, dim=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -347,7 +351,6 @@ def advance_state(rhs, timestepper, state, t_final, post_step_callback=post_step_callback, component_id=component_id, istep=istep, logmgr=logmgr, eos=eos, dim=dim, - actx=actx ) else: (current_step, current_t, current_state) = \ @@ -357,7 +360,6 @@ def advance_state(rhs, timestepper, state, t_final, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, istep=istep, logmgr=logmgr, eos=eos, dim=dim, - actx=actx ) return current_step, current_t, current_state diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index a78ac1187..069469778 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -105,10 +105,8 @@ def rhs(t, state): (SSPRK22MethodBuilder("y"), 2), (SSPRK33MethodBuilder("y"), 3), ]) - def test_leapgen_integration_order(actx_factory, method, method_order): + def test_leapgen_integration_order(method, method_order): """Test that time integrators have correct order.""" - actx = actx_factory() - def exact_soln(t): return np.exp(-t) @@ -130,7 +128,7 @@ def rhs(t, y): (step, t, state) = \ advance_state(rhs=rhs, timestepper=method, dt=dt, state=state, t=t, t_final=t_final, - component_id="y", actx=actx) + component_id="y") error = np.abs(state - exact_soln(t)) / exact_soln(t) integrator_eoc.add_data_point(dt, error) From 75f200a80b44c8b4a2b05e3247aeb4fa78f31e24 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 26 Oct 2021 12:00:06 -0500 Subject: [PATCH 272/873] Added lazy example --- examples/autoignition-mpi-lazy.py | 1 + 1 file changed, 1 insertion(+) create mode 120000 examples/autoignition-mpi-lazy.py diff --git a/examples/autoignition-mpi-lazy.py b/examples/autoignition-mpi-lazy.py new file mode 120000 index 000000000..aa50542f7 --- /dev/null +++ b/examples/autoignition-mpi-lazy.py @@ -0,0 +1 @@ +autoignition-mpi.py \ No newline at end of file From 35191f461ab57e69cb42b7354195d434a96ec099 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 26 Oct 2021 12:01:25 -0500 Subject: [PATCH 273/873] Switch to arraycontext@main --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 92888638d..0d2540f42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pyyaml --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/kaushikcfd/arraycontext.git@pytato-array-context-transforms#egg=arraycontext +--editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/kaushikcfd/pytato.git@pytato-array-context-transforms#egg=pytato From 42fc5998c7070554e2b424424c4850d6fd529cd9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 26 Oct 2021 12:59:15 -0500 Subject: [PATCH 274/873] Clean up the diff a bit --- examples/autoignition-mpi.py | 8 ++++++-- examples/mixture-mpi.py | 4 ---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ce9b9acf0..141cff3a6 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -303,11 +303,12 @@ def get_temperature_mass_energy(state, temperature): else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes) - # import ipdb - # ipdb.set_trace() # Inspection at physics debugging time if debug: + # Uncomment to enable debugger + # import ipdb + # ipdb.set_trace() print("Initial MIRGE-Com state:") print(f"{current_state=}") print(f"Initial DV pressure: {eos.pressure(current_state)}") @@ -341,6 +342,9 @@ def get_temperature_mass_energy(state, temperature): def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" + # This is the DV status report when running lazily because + # logpyle chokes when the DV expression is complicated as it is + # when using Pyrometheus EOS. if ((dv is not None) and (not log_dependent)): temp = dv.temperature press = dv.pressure diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index b8b0a4d26..7903d07f6 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -279,10 +279,6 @@ def my_health_check(cv, dv, component_errors): y = cv.species_mass_fractions e = eos.internal_energy(cv) / cv.mass check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y) - # temp_resid = pyro_mechanism.get_temperature_residual( - # e, dv.temperature, y, True - # ) - # temp_resid = discr.norm(temp_resid, np.inf) temp_resid = discr.norm(check_temp - dv.temperature, np.inf) if temp_resid > 1e-12: health_error = False From d3b8b5c252c8895bfe16c692dfdbcf6467a6622c Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 26 Oct 2021 13:21:30 -0500 Subject: [PATCH 275/873] use arraycontext main --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 92888638d..0d2540f42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pyyaml --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/kaushikcfd/arraycontext.git@pytato-array-context-transforms#egg=arraycontext +--editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/kaushikcfd/pytato.git@pytato-array-context-transforms#egg=pytato From 11c64221de4479977a231a4075a84dad0b8bacd4 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 28 Oct 2021 10:50:49 -0500 Subject: [PATCH 276/873] restore grudge branch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ddfe23291..4dc2b033d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/majosm/grudge.git@nodal-reduction-device-scalar#egg=grudge +--editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 426e7e2c29658dd2b9483db8c9c1bea630acdea1 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 28 Oct 2021 14:23:46 -0500 Subject: [PATCH 277/873] test production driver changes --- .ci-support/production-testing-env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 1adeba830..42988ff2e 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -27,3 +27,5 @@ set -x # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" + +PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_y2-isolator@nodal-reduction-device-scalar:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar" From 8a9689bdf702c4377180376103238d1c808bda19 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 28 Oct 2021 14:31:53 -0500 Subject: [PATCH 278/873] Switch nozzle production driver temporarily. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 42988ff2e..9e578a765 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -28,4 +28,4 @@ set -x # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" -PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_y2-isolator@nodal-reduction-device-scalar:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar" +PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@nodal-reduction-device-scalar:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar" From 1ca297833650a2168905fa49c79308c10dd6b1f8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Oct 2021 15:29:41 -0500 Subject: [PATCH 279/873] Update downstream drivers with device scalars --- examples/doublemach-mpi.py | 8 ++++---- examples/hotplate-mpi.py | 16 ++++++++-------- examples/nsmix-mpi.py | 10 +++++----- examples/poiseuille-mpi.py | 20 ++++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index aa2969f06..e115fbe32 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -315,8 +315,8 @@ def my_health_check(state, dv): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - p_min = nodal_min(discr, "vol", dv.pressure) - p_max = nodal_max(discr, "vol", dv.pressure) + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) logger.info(f"Pressure range violation ({p_min=}, {p_max=})") if check_naninf_local(discr, "vol", dv.temperature): @@ -328,8 +328,8 @@ def my_health_check(state, dv): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - t_min = nodal_min(discr, "vol", dv.temperature) - t_max = nodal_max(discr, "vol", dv.temperature) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") return health_error diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index 61df85a37..54f3e39ad 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -251,16 +251,16 @@ def tramp_2d(x_vec, eos, cv=None, **kwargs): def my_write_status(step, t, dt, dv, state, component_errors): from grudge.op import nodal_min, nodal_max - p_min = nodal_min(discr, "vol", dv.pressure) - p_max = nodal_max(discr, "vol", dv.pressure) - t_min = nodal_min(discr, "vol", dv.temperature) - t_max = nodal_max(discr, "vol", dv.temperature) + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) if constant_cfl: cfl = current_cfl else: from mirgecom.viscous import get_viscous_cfl - cfl = nodal_max(discr, "vol", - get_viscous_cfl(discr, eos, dt, state)) + cfl = actx.to_numpy(nodal_max(discr, "vol", + get_viscous_cfl(discr, eos, dt, state))) if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" @@ -320,8 +320,8 @@ def my_health_check(state, dv, component_errors): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - t_min = nodal_min(discr, "vol", dv.temperature) - t_max = nodal_max(discr, "vol", dv.temperature) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") exittol = .1 diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 6d80eac3c..1194a45af 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -309,7 +309,7 @@ def my_write_status(step, t, dt, state): from mirgecom.viscous import get_viscous_cfl cfl_field = get_viscous_cfl(discr, eos, dt, cv=state) from grudge.op import nodal_max - cfl = nodal_max(discr, "vol", cfl_field) + cfl = actx.to_numpy(nodal_max(discr, "vol", cfl_field)) if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}") @@ -357,8 +357,8 @@ def my_health_check(state, dv): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - p_min = nodal_min(discr, "vol", dv.pressure) - p_max = nodal_max(discr, "vol", dv.pressure) + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) logger.info(f"Pressure range violation ({p_min=}, {p_max=})") if check_naninf_local(discr, "vol", dv.temperature): @@ -369,8 +369,8 @@ def my_health_check(state, dv): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - t_min = nodal_min(discr, "vol", dv.temperature) - t_max = nodal_max(discr, "vol", dv.temperature) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") return health_error diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index bfca8ff49..819b3d6cb 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -260,16 +260,16 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): def my_write_status(step, t, dt, dv, state, component_errors): from grudge.op import nodal_min, nodal_max - p_min = nodal_min(discr, "vol", dv.pressure) - p_max = nodal_max(discr, "vol", dv.pressure) - t_min = nodal_min(discr, "vol", dv.temperature) - t_max = nodal_max(discr, "vol", dv.temperature) + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) if constant_cfl: cfl = current_cfl else: from mirgecom.viscous import get_viscous_cfl - cfl = nodal_max(discr, "vol", - get_viscous_cfl(discr, eos, dt, state)) + cfl = actx.to_numpy(nodal_max(discr, "vol", + get_viscous_cfl(discr, eos, dt, state))) if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" @@ -317,8 +317,8 @@ def my_health_check(state, dv, component_errors): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - p_min = nodal_min(discr, "vol", dv.pressure) - p_max = nodal_max(discr, "vol", dv.pressure) + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) logger.info(f"Pressure range violation ({p_min=}, {p_max=})") if check_naninf_local(discr, "vol", dv.temperature): @@ -329,8 +329,8 @@ def my_health_check(state, dv, component_errors): comm, op=MPI.LOR): health_error = True from grudge.op import nodal_max, nodal_min - t_min = nodal_min(discr, "vol", dv.temperature) - t_max = nodal_max(discr, "vol", dv.temperature) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") exittol = .1 From 32aa4fdf44f0b6f68b17375d0b2f20894051b132 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 28 Oct 2021 17:37:20 -0500 Subject: [PATCH 280/873] Use *this* branch as production. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 9e578a765..0e22f8761 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="y2-production" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From aaf773478238355087f2d482de4bc84a4793cbf9 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 28 Oct 2021 18:02:49 -0500 Subject: [PATCH 281/873] Source the env file. --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3d0ff1d31..4720738d9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -171,6 +171,7 @@ jobs: cd .. git clone https://github.com/illinois-ceesd/emirge emirge.y1 cd emirge.y1 + . ../mirgecom/.ci_support/production-testing-env.sh . ../mirgecom/.ci-support/production-install.sh ../mirgecom/.ci-support/production-testing-env.sh - name: Run production test run: | From a97529fc2cc01c984132d148ed272ca331bf6c7d Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 28 Oct 2021 18:14:53 -0500 Subject: [PATCH 282/873] Correct typo --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4720738d9..db21db82d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -171,7 +171,7 @@ jobs: cd .. git clone https://github.com/illinois-ceesd/emirge emirge.y1 cd emirge.y1 - . ../mirgecom/.ci_support/production-testing-env.sh + . ../mirgecom/.ci-support/production-testing-env.sh . ../mirgecom/.ci-support/production-install.sh ../mirgecom/.ci-support/production-testing-env.sh - name: Run production test run: | From c379efac68e1783c55646feb73a622b9a67fdfc0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Oct 2021 21:08:54 -0500 Subject: [PATCH 283/873] use to_numpy where approp --- test/test_navierstokes.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/test/test_navierstokes.py b/test/test_navierstokes.py index 0f2e18ba5..45d52897f 100644 --- a/test/test_navierstokes.py +++ b/test/test_navierstokes.py @@ -138,14 +138,14 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): f"rhoy_rhs = {rhoy_rhs}\n" ) - assert discr.norm(rho_resid, np.inf) < tolerance - assert discr.norm(rhoe_resid, np.inf) < tolerance + assert actx.to_numpy(discr.norm(rho_resid, np.inf)) < tolerance + assert actx.to_numpy(discr.norm(rhoe_resid, np.inf)) < tolerance for i in range(dim): - assert discr.norm(mom_resid[i], np.inf) < tolerance + assert actx.to_numpy(discr.norm(mom_resid[i], np.inf)) < tolerance for i in range(nspecies): - assert discr.norm(rhoy_resid[i], np.inf) < tolerance + assert actx.to_numpy(discr.norm(rhoy_resid[i], np.inf)) < tolerance - err_max = discr.norm(rho_resid, np.inf) + err_max = actx.to_numpy(discr.norm(rho_resid, np.inf)) eoc_rec0.add_data_point(1.0 / nel_1d, err_max) # set a non-zero, but uniform velocity component @@ -165,15 +165,15 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): mom_resid = rhs_resid.momentum rhoy_resid = rhs_resid.species_mass - assert discr.norm(rho_resid, np.inf) < tolerance - assert discr.norm(rhoe_resid, np.inf) < tolerance + assert actx.to_numpy(discr.norm(rho_resid, np.inf)) < tolerance + assert actx.to_numpy(discr.norm(rhoe_resid, np.inf)) < tolerance for i in range(dim): - assert discr.norm(mom_resid[i], np.inf) < tolerance + assert actx.to_numpy(discr.norm(mom_resid[i], np.inf)) < tolerance for i in range(nspecies): - assert discr.norm(rhoy_resid[i], np.inf) < tolerance + assert actx.to_numpy(discr.norm(rhoy_resid[i], np.inf)) < tolerance - err_max = discr.norm(rho_resid, np.inf) + err_max = actx.to_numpy(discr.norm(rho_resid, np.inf)) eoc_rec1.add_data_point(1.0 / nel_1d, err_max) logger.info( @@ -310,14 +310,15 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): ) tol_fudge = 2e-4 - assert discr.norm(rho_resid, np.inf) < tolerance - # assert discr.norm(rhoe_resid, np.inf) < tolerance - mom_err = [discr.norm(mom_resid[i], np.inf) for i in range(dim)] + assert actx.to_numpy(discr.norm(rho_resid, np.inf)) < tolerance + # assert actx.to_numpy(discr.norm(rhoe_resid, np.inf)) < tolerance + mom_err = [actx.to_numpy(discr.norm(mom_resid[i], np.inf)) + for i in range(dim)] err_max = max(mom_err) for i in range(dim): assert mom_err[i] < tol_fudge - # err_max = discr.norm(rho_resid, np.inf) + # err_max = actx.to_numpy(discr.norm(rho_resid, np.inf) eoc_rec.add_data_point(1.0 / nfac, err_max) logger.info( From 6464542a70dd8b95f0c4529fe1db21031a2124b1 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 28 Oct 2021 21:45:28 -0500 Subject: [PATCH 284/873] Use Y2-production branch for isolator driver --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 0e22f8761..4c960cf7e 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -28,4 +28,4 @@ export PRODUCTION_BRANCH="y2-production" # The base production branch to be in # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" -PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@nodal-reduction-device-scalar:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar" +PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar" From 563cb0ffd9fb3f9b67810528a8e78596dff814e2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Oct 2021 22:21:26 -0500 Subject: [PATCH 285/873] Revert the CI settings to new drivers and empty customization --- .ci-support/production-driver-install.sh | 8 ++++---- .ci-support/production-testing-env.sh | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.ci-support/production-driver-install.sh b/.ci-support/production-driver-install.sh index ff9810a9c..fae77f427 100644 --- a/.ci-support/production-driver-install.sh +++ b/.ci-support/production-driver-install.sh @@ -9,9 +9,9 @@ # PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" # (See the example default value below) # -# The default values result in an install of the Y1 nozzle driver and -# Wyatt Hagen's isolator driver that work with current MIRGE-Com -# production branch: mirgecom@y1-production. +# The default values result in an install of the Y1 nozzle driver, +# a 1dflame driver, and the Y2 isolator driver that work with current +# MIRGE-Com production branch: mirgecom@y1-production. # set -x @@ -24,7 +24,7 @@ if [ -n "$DEVELOPMENT_BRANCH" ]; then fi fi # Set to default if testing main, or user left it empty -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@master:illinois-ceesd/drivers_flame1d@main"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} OIFS="$IFS" IFS=':'; for production_driver_string in $PRODUCTION_DRIVERS; do diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 4c960cf7e..1adeba830 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -15,7 +15,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -export PRODUCTION_BRANCH="y2-production" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited @@ -27,5 +27,3 @@ export PRODUCTION_BRANCH="y2-production" # The base production branch to be in # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" - -PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar" From dbf1aea654fd33ae2f092d067550dc50db61bd6d Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 29 Oct 2021 10:33:47 -0500 Subject: [PATCH 286/873] Install mirgecom from existing source, not from scratch. --- .ci-support/production-install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 00b7f228c..f74406974 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -48,9 +48,11 @@ echo "PRODUCTION_FORK=$PRODUCTION_FORK" echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" # Install the production branch with emirge -./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} +# Try something less fragile +# ./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} +./install.sh --skip-clone --conda-env=../mirgecom/conda_env.yml --pip-pkgs=../mirgecom/requirements.txt source config/activate_env.sh -cd mirgecom +cd ../mirgecom # This junk is needed to be able to execute git commands properly git config user.email "ci-runner@ci.machine.com" From 24340fa9220aa35a6c1ba4c296f1cc53b6cfb4e5 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 29 Oct 2021 10:38:21 -0500 Subject: [PATCH 287/873] Spell conda-env.yml correctly --- .ci-support/production-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index f74406974..635e30874 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -50,7 +50,7 @@ echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" # Install the production branch with emirge # Try something less fragile # ./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} -./install.sh --skip-clone --conda-env=../mirgecom/conda_env.yml --pip-pkgs=../mirgecom/requirements.txt +./install.sh --skip-clone --conda-env=../mirgecom/conda-env.yml --pip-pkgs=../mirgecom/requirements.txt source config/activate_env.sh cd ../mirgecom From 044c852c768234366f2dc8c0631d384902b77a99 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 29 Oct 2021 10:57:06 -0500 Subject: [PATCH 288/873] Set an install prefix --- .ci-support/production-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 635e30874..7fc3f8745 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -50,7 +50,7 @@ echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" # Install the production branch with emirge # Try something less fragile # ./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} -./install.sh --skip-clone --conda-env=../mirgecom/conda-env.yml --pip-pkgs=../mirgecom/requirements.txt +./install.sh --skip-clone --install-prefix=../ --conda-env=../mirgecom/conda-env.yml --pip-pkgs=../mirgecom/requirements.txt source config/activate_env.sh cd ../mirgecom From 12e1360c5a773bd4ecad7411609edd84512f34f2 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 29 Oct 2021 11:08:53 -0500 Subject: [PATCH 289/873] Find activation script in install location. --- .ci-support/production-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 7fc3f8745..8260ec315 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -51,7 +51,7 @@ echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" # Try something less fragile # ./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} ./install.sh --skip-clone --install-prefix=../ --conda-env=../mirgecom/conda-env.yml --pip-pkgs=../mirgecom/requirements.txt -source config/activate_env.sh +source ../config/activate_env.sh cd ../mirgecom # This junk is needed to be able to execute git commands properly From 4151991cf5d8b57bd808ec208b4e621ba840e21e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 12:27:13 -0500 Subject: [PATCH 290/873] Configure production testing --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 6cf17aa41..5517dc273 100644 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -16,7 +16,7 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="ci-test-production" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 9d6e82acaf30a6bad5482d76586d7034b0ca91ca Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 12:56:19 -0500 Subject: [PATCH 291/873] Debug ci more --- .ci-support/production-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index 8260ec315..a37b48730 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -53,12 +53,13 @@ echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" ./install.sh --skip-clone --install-prefix=../ --conda-env=../mirgecom/conda-env.yml --pip-pkgs=../mirgecom/requirements.txt source ../config/activate_env.sh cd ../mirgecom - +pwd # This junk is needed to be able to execute git commands properly git config user.email "ci-runner@ci.machine.com" git config user.name "CI Runner" # Merge in the production environment +git status git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production git merge production/${PRODUCTION_BRANCH} --no-edit From ee2d0994a450e2773931930f4a87bf8b524263e3 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Fri, 29 Oct 2021 13:16:31 -0500 Subject: [PATCH 292/873] full clone --- .github/workflows/ci.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index db21db82d..2c2c26945 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -164,6 +164,8 @@ jobs: steps: - uses: actions/checkout@v2 + with: + fetch-depth: '0' - name: Prepare production environment run: | [[ $(uname) == Linux ]] && sudo apt-get update && sudo apt-get install -y openmpi-bin libopenmpi-dev From 7c0fc6febf8ede1b1e671922078a91173413979c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 14:06:28 -0500 Subject: [PATCH 293/873] Clean up production testing scripts --- .ci-support/production-driver-install.sh | 16 ++++----- .ci-support/production-install.sh | 43 ++++++++++++------------ .github/workflows/ci.yaml | 14 +++++--- 3 files changed, 38 insertions(+), 35 deletions(-) diff --git a/.ci-support/production-driver-install.sh b/.ci-support/production-driver-install.sh index e01c71aca..de040690d 100644 --- a/.ci-support/production-driver-install.sh +++ b/.ci-support/production-driver-install.sh @@ -15,14 +15,14 @@ # set -x -DEVELOPMENT_BRANCH="$GITHUB_HEAD_REF" # this will be empty for main -PRODUCTION_DRIVERS="" -if [ -n "$DEVELOPMENT_BRANCH" ]; then - PRODUCTION_ENV_FILE="$1" - if [ -e "$PRODUCTION_ENV_FILE" ]; then - . $PRODUCTION_ENV_FILE - fi -fi +# DEVELOPMENT_BRANCH="$GITHUB_HEAD_REF" # this will be empty for main +# PRODUCTION_DRIVERS="" +# if [ -n "$DEVELOPMENT_BRANCH" ]; then +# PRODUCTION_ENV_FILE="$1" +# if [ -e "$PRODUCTION_ENV_FILE" ]; then +# . $PRODUCTION_ENV_FILE +# fi +# fi # Set to default if testing main, or user left it empty PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} OIFS="$IFS" diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index a37b48730..e15291112 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -22,37 +22,35 @@ # set -x -if [ -n "$DEVELOPMENT_BRANCH" ]; then - PRODUCTION_ENV_FILE="$1" - if [ -e "$PRODUCTION_ENV_FILE" ]; then - echo "Reading production configuration for ${DEVELOPMENT_BRANCH}." - . $PRODUCTION_ENV_FILE - else - echo "Using default production configuration for ${DEVELOPMENT_BRANCH}." - echo "To customize, set up .ci-support/production-testing-env.sh." - fi -fi -DEVELOPMENT_BRANCH=${DEVELOPMENT_BRANCH:-"main"} -DEVELOPMENT_FORK=${DEVELOPMENT_FORK:-"illinois-ceesd"} +EMIRGE_INSTALL_PATH=${1:-"."} +#if [ -n "$DEVELOPMENT_BRANCH" ]; then +# PRODUCTION_ENV_FILE="$1" +# if [ -e "$PRODUCTION_ENV_FILE" ]; then +# echo "Reading production configuration for ${DEVELOPMENT_BRANCH}." +# . $PRODUCTION_ENV_FILE +# else +# echo "Using default production configuration for ${DEVELOPMENT_BRANCH}." +# echo "To customize, set up .ci-support/production-testing-env.sh." +# fi +#fi +# DEVELOPMENT_BRANCH="$GITHUB_HEAD_REF" # this will be empty for main +# DEVELOPMENT_BRANCH=${DEVELOPMENT_BRANCH:-"main"} +# DEVELOPMENT_FORK=${DEVELOPMENT_FORK:-"illinois-ceesd"} PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} -echo "Production environment settings:" -if [ -n "${PRODUCTION_ENV_FILE}" ]; then - echo "PRODUCTION_ENV_FILE=$PRODUCTION_ENV_FILE" - cat ${PRODUCTION_ENV_FILE} -fi -echo "DEVELOPMENT_FORK=$DEVELOPMENT_FORK" -echo "DEVELOPMENT_BRANCH=$DEVELOPMENT_BRANCH" +echo "EMIRGE_INSTALL_PATH=${EMIRGE_INSTALL_PATH}" +# echo "DEVELOPMENT_FORK=$DEVELOPMENT_FORK" +# echo "DEVELOPMENT_BRANCH=$DEVELOPMENT_BRANCH" echo "PRODUCTION_FORK=$PRODUCTION_FORK" echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" # Install the production branch with emirge # Try something less fragile # ./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} -./install.sh --skip-clone --install-prefix=../ --conda-env=../mirgecom/conda-env.yml --pip-pkgs=../mirgecom/requirements.txt -source ../config/activate_env.sh -cd ../mirgecom +./install.sh --skip-clone --install-prefix=${EMIRGE_INSTALL_PATH}/ --conda-env=${EMIRGE_INSTALL_PATH}/mirgecom/conda-env.yml --pip-pkgs=${EMIRGE_INSTALL_PATH}/mirgecom/requirements.txt +source ${EMIRGE_INSTALL_PATH}/config/activate_env.sh +cd ${EMIRGE_INSTALL_PATH}/mirgecom pwd # This junk is needed to be able to execute git commands properly git config user.email "ci-runner@ci.machine.com" @@ -64,3 +62,4 @@ git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production git merge production/${PRODUCTION_BRANCH} --no-edit pip install -r requirements.txt +cd - diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 2c2c26945..d19e986fc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -170,16 +170,20 @@ jobs: run: | [[ $(uname) == Linux ]] && sudo apt-get update && sudo apt-get install -y openmpi-bin libopenmpi-dev [[ $(uname) == Darwin ]] && brew update && brew install mpich + MIRGEDIR=$(pwd) + cat .ci-support/production-testing-env.sh + . .ci-support/production-testing-env.sh cd .. git clone https://github.com/illinois-ceesd/emirge emirge.y1 cd emirge.y1 - . ../mirgecom/.ci-support/production-testing-env.sh - . ../mirgecom/.ci-support/production-install.sh ../mirgecom/.ci-support/production-testing-env.sh + . ../mirgecom/.ci-support/production-install.sh $(MIRGEDIR)/.. - name: Run production test run: | - cd .. - source emirge.y1/config/activate_env.sh - . mirgecom/.ci-support/production-driver-install.sh mirgecom/.ci-support/production-testing-env.sh + MIRGEDIR=$(pwd) + . .ci-support/production-testing-env.sh + cd ../ + source ${MIRGEDIR}/../config/activate_env.sh + . mirgecom/.ci-support/production-driver-install.sh for production_driver in $(ls | grep "production_driver_"); do cd "$production_driver"/smoke_test From 65b8da233af6381980f9f024c7766fc4f9fe2e55 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 14:11:26 -0500 Subject: [PATCH 294/873] Fix script bug --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d19e986fc..dda8f3173 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -176,7 +176,7 @@ jobs: cd .. git clone https://github.com/illinois-ceesd/emirge emirge.y1 cd emirge.y1 - . ../mirgecom/.ci-support/production-install.sh $(MIRGEDIR)/.. + . ../mirgecom/.ci-support/production-install.sh ${MIRGEDIR}/.. - name: Run production test run: | MIRGEDIR=$(pwd) From 4142d8357ca7867adf48d17d1ea90e57be39ba47 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 16:38:55 -0500 Subject: [PATCH 295/873] Clean up further --- .ci-support/production-driver-install.sh | 17 ++++---------- .ci-support/production-install.sh | 29 +++++++----------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/.ci-support/production-driver-install.sh b/.ci-support/production-driver-install.sh index de040690d..fb7a6d0d9 100644 --- a/.ci-support/production-driver-install.sh +++ b/.ci-support/production-driver-install.sh @@ -6,25 +6,16 @@ # what production test is installed, the env setup script should set # the following: # +# # PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" # (See the example default value below) # # The default values result in an install of the Y1 nozzle driver and # Wyatt Hagen's isolator driver that work with current MIRGE-Com # production branch: mirgecom@y1-production. -# -set -x - -# DEVELOPMENT_BRANCH="$GITHUB_HEAD_REF" # this will be empty for main -# PRODUCTION_DRIVERS="" -# if [ -n "$DEVELOPMENT_BRANCH" ]; then -# PRODUCTION_ENV_FILE="$1" -# if [ -e "$PRODUCTION_ENV_FILE" ]; then -# . $PRODUCTION_ENV_FILE -# fi -# fi -# Set to default if testing main, or user left it empty PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} +# Loop over the production drivers, clone them, and prepare for execution +set -x OIFS="$IFS" IFS=':'; for production_driver_string in $PRODUCTION_DRIVERS; do @@ -34,7 +25,7 @@ do PRODUCTION_DRIVER_DIR="production_driver_$PRODUCTION_DRIVER_NAME" git clone -b "$PRODUCTION_DRIVER_BRANCH" https\://github.com/"$PRODUCTION_DRIVER_REPO" "$PRODUCTION_DRIVER_DIR" cd "$PRODUCTION_DRIVER_DIR"/smoke_test - ln -s *.py driver.py + ln -s *.py driver.py # name the driver generically cd ../.. done IFS="$OIFS" diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh index e15291112..a681268f2 100644 --- a/.ci-support/production-install.sh +++ b/.ci-support/production-install.sh @@ -23,43 +23,30 @@ set -x EMIRGE_INSTALL_PATH=${1:-"."} -#if [ -n "$DEVELOPMENT_BRANCH" ]; then -# PRODUCTION_ENV_FILE="$1" -# if [ -e "$PRODUCTION_ENV_FILE" ]; then -# echo "Reading production configuration for ${DEVELOPMENT_BRANCH}." -# . $PRODUCTION_ENV_FILE -# else -# echo "Using default production configuration for ${DEVELOPMENT_BRANCH}." -# echo "To customize, set up .ci-support/production-testing-env.sh." -# fi -#fi -# DEVELOPMENT_BRANCH="$GITHUB_HEAD_REF" # this will be empty for main -# DEVELOPMENT_BRANCH=${DEVELOPMENT_BRANCH:-"main"} -# DEVELOPMENT_FORK=${DEVELOPMENT_FORK:-"illinois-ceesd"} PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} echo "EMIRGE_INSTALL_PATH=${EMIRGE_INSTALL_PATH}" -# echo "DEVELOPMENT_FORK=$DEVELOPMENT_FORK" -# echo "DEVELOPMENT_BRANCH=$DEVELOPMENT_BRANCH" echo "PRODUCTION_FORK=$PRODUCTION_FORK" echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" -# Install the production branch with emirge -# Try something less fragile -# ./install.sh --fork=${DEVELOPMENT_FORK} --branch=${DEVELOPMENT_BRANCH} +# Install the version of mirgecom we wish to test from source ./install.sh --skip-clone --install-prefix=${EMIRGE_INSTALL_PATH}/ --conda-env=${EMIRGE_INSTALL_PATH}/mirgecom/conda-env.yml --pip-pkgs=${EMIRGE_INSTALL_PATH}/mirgecom/requirements.txt + +# Activate the environment (needed?) source ${EMIRGE_INSTALL_PATH}/config/activate_env.sh cd ${EMIRGE_INSTALL_PATH}/mirgecom -pwd + # This junk is needed to be able to execute git commands properly git config user.email "ci-runner@ci.machine.com" git config user.name "CI Runner" -# Merge in the production environment -git status +# Making a dedicated production remote adds production forks git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production + +# Merge the production branch for testing the production drivers git merge production/${PRODUCTION_BRANCH} --no-edit +# Pick up any requirements.txt pip install -r requirements.txt cd - From 8f40e1785060c86c5c74d5741494d59bf35163a8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 19:20:01 -0500 Subject: [PATCH 296/873] Add some production testing docs --- doc/development/pullrequests.rst | 71 ++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/doc/development/pullrequests.rst b/doc/development/pullrequests.rst index a34ef9c03..ef2646c58 100644 --- a/doc/development/pullrequests.rst +++ b/doc/development/pullrequests.rst @@ -206,6 +206,77 @@ commit, you can use a git hook such as the following one (save this script as While highly recommended, hooks can sometimes be annoying. After setting up your hooks, you can use ``git --no-verify`` or equivalently ``git -n`` to run ``git`` commands without triggering the hooks. +Production Testing in CI +------------------------ + +The CI testing in mirgecom includes a set of "production" tests which help +detect when a proposed change in a PR breaks the CEESD prediction capability +toolchain. + +When PRs run afoul of the CI production tests, it indicates that if the PR +change set merges to main, then the "production" capability of mirgecom will +not function until the production capability and the change set are brought +into accordance. + +The production tests may be prepared and executed from anywhere by +hand-executing the production test scripts found in ``.ci-support/``. The +following is an example workflow adjacent to what CI itself does for executing +the production tests. + +1. Check out the PR development (and optionally make a production branch) + + .. code:: bash + + $ # For ceesd-local branches: + $ git clone -b branch-name git@github.com:/illinois-ceesd/mirgecom + $ # Or for developer fork: + $ git clone -b branch-name git@github.com:/fork-name/mirgecom + $ cd mirgecom # or loopy, meshmode, ... + $ git switch -c branch-name-production # Optional production branch + +2. Set up the production environment and capability + + .. code:: bash + + $ # Load the customizable production environment + $ . .ci-support/production-testing-env.sh + $ # Merge the production branch + $ . .ci-support/merge-install-production-branch . + + If Step 2 fails, i.e. if there are merge conflicts, then those must + be resolved. Push the merged result to CEESD or a fork, and indicate + that version in the PRODUCTION_FORK, and PRODUCTION_BRANCH env vars in + ``.ci-support/production-testing-env.sh``. + +3. Grab and run the production tests + + .. code:: bash + + $ # Load env if needed + $ . .ci-support/production-testing-env.sh + $ # Get the production tests + $ . .ci-support/production-driver-install.sh . + $ # Run the production tests + $ . .ci-support/production-test-run.sh . + + Step 3 will clone the production driver repos to the current directory, + with each driver in its own directory. If any of the drivers fail to + work with the current development, then they may be modified into working + condition and then pushed to a repo. Indicate the location of the working + drivers in the PRODUCTION_DRIVERS env var customization in + ``.ci-support/production-testing-env.sh``. + +If the PR development required production environment customization in order to +pass production tests, then care and coordination will be required to get these +changes merged into the main mirgecom development. PR reviewers will help +with this process. + + .. important:: + + Any production environment customizations must be backed out before + merging the PR development to main. Never merge a PR development with + production environment customizations in place. + Merging a pull request ---------------------- From 8a461fab003cb2963889dfe29a1d1449adac49e6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 19:32:27 -0500 Subject: [PATCH 297/873] Sharpen slightly --- doc/development/pullrequests.rst | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/doc/development/pullrequests.rst b/doc/development/pullrequests.rst index ef2646c58..7424abb7b 100644 --- a/doc/development/pullrequests.rst +++ b/doc/development/pullrequests.rst @@ -220,8 +220,10 @@ into accordance. The production tests may be prepared and executed from anywhere by hand-executing the production test scripts found in ``.ci-support/``. The -following is an example workflow adjacent to what CI itself does for executing -the production tests. +following is an example workflow adjacent to what CI itself does for +executing the production tests. In the following example, the PR development +is assumed to be in a mirgecom branch called ``branch-name`` and possibly in a +fork called ``fork-name``. 1. Check out the PR development (and optionally make a production branch) @@ -262,20 +264,22 @@ the production tests. Step 3 will clone the production driver repos to the current directory, with each driver in its own directory. If any of the drivers fail to work with the current development, then they may be modified into working - condition and then pushed to a repo. Indicate the location of the working + condition and then pushed to a repo/branch. Indicate the location of the working drivers in the PRODUCTION_DRIVERS env var customization in ``.ci-support/production-testing-env.sh``. -If the PR development required production environment customization in order to +If the PR development requires production environment customization in order to pass production tests, then care and coordination will be required to get these changes merged into the main mirgecom development. PR reviewers will help -with this process. +with this process. If the PR is accepted for merging to main, then mirgecom +developers will update the production capabilities to be compatible with +the changes before merging. .. important:: Any production environment customizations must be backed out before merging the PR development to main. Never merge a PR development with - production environment customizations in place. + production environment customizations in-place. Merging a pull request ---------------------- From ad8a04bb60369b0bd0223f1c0e017884e90c9d90 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 20:16:49 -0500 Subject: [PATCH 298/873] Sharpen more --- doc/development/pullrequests.rst | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/doc/development/pullrequests.rst b/doc/development/pullrequests.rst index 7424abb7b..e466c657f 100644 --- a/doc/development/pullrequests.rst +++ b/doc/development/pullrequests.rst @@ -211,22 +211,26 @@ Production Testing in CI The CI testing in mirgecom includes a set of "production" tests which help detect when a proposed change in a PR breaks the CEESD prediction capability -toolchain. +toolchain. Most developments and PRs do not require special considerations +for the production tests, but any production test failures will require +a bit of care to resolve. When PRs run afoul of the CI production tests, it indicates that if the PR change set merges to main, then the "production" capability of mirgecom will not function until the production capability and the change set are brought into accordance. -The production tests may be prepared and executed from anywhere by -hand-executing the production test scripts found in ``.ci-support/``. The -following is an example workflow adjacent to what CI itself does for -executing the production tests. In the following example, the PR development -is assumed to be in a mirgecom branch called ``branch-name`` and possibly in a -fork called ``fork-name``. +To resolve CI production test failures for a development in PR, it is often useful +to run the production tests manually. The production tests may be prepared and +executed from anywhere by hand-executing the production test scripts found in +``.ci-support/``. The following is an example workflow adjacent to what CI itself +does for executing the production tests. 1. Check out the PR development (and optionally make a production branch) + The PR development is assumed to be in a mirgecom branch called ``branch-name`` + and possibly in a fork called ``fork-name``. + .. code:: bash $ # For ceesd-local branches: @@ -268,6 +272,13 @@ fork called ``fork-name``. drivers in the PRODUCTION_DRIVERS env var customization in ``.ci-support/production-testing-env.sh``. +4. Update the PR to reflect the change in production environment (if any) + + Push the customized production ``.ci-support/production-testing-env.sh`` + settings to the PR development branch. Upon push, mirgecom CI will + try the production tests again, now with the customized environment. + + If the PR development requires production environment customization in order to pass production tests, then care and coordination will be required to get these changes merged into the main mirgecom development. PR reviewers will help From 57adc5212eac1a2ae91e23c9e7193df3886ed79f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 20:58:11 -0500 Subject: [PATCH 299/873] Breakout functionality for hand-running. --- .ci-support/install-mirge-from-source.sh | 34 ++++++++++++++ .../merge-install-production-branch.sh | 47 +++++++++++++++++++ .ci-support/production-drivers-install.sh | 31 ++++++++++++ .ci-support/production-testing-env.sh | 0 .ci-support/production-tests-run.sh | 16 +++++++ .github/workflows/ci.yaml | 15 ++---- 6 files changed, 133 insertions(+), 10 deletions(-) create mode 100755 .ci-support/install-mirge-from-source.sh create mode 100755 .ci-support/merge-install-production-branch.sh create mode 100755 .ci-support/production-drivers-install.sh mode change 100644 => 100755 .ci-support/production-testing-env.sh create mode 100755 .ci-support/production-tests-run.sh diff --git a/.ci-support/install-mirge-from-source.sh b/.ci-support/install-mirge-from-source.sh new file mode 100755 index 000000000..61ee48b7d --- /dev/null +++ b/.ci-support/install-mirge-from-source.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -x +# +# This script is designed to patch the CEESD production capability against +# a proposed change to illinois-ceesd/mirgecom@main. The script reads the +# environment config file `.ci-support/production-testing-env.sh`, that +# should set up the expected control variables, which are as follows: +# +# The proposed changes to test may be in a fork, or a local branch. For +# forks, the environment config files should set: +# +# DEVELOPMENT_FORK = The development fork (default=illinois-ceesd) +# +# The production capability to test against may be specified outright, or +# patched by the incoming development. The following vars control the +# production environment: +# +# PRODUCTION_BRANCH = The production branch (default=y1-production) +# PRODUCTION_FORK = The production fork (default=illinois-ceesd) +# +# If the environment file does not exist, the current development is +# tested against `mirgecom@y1-production`. +# +EMIRGE_INSTALL_PATH=${1:-"."} +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} +PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} + +echo "EMIRGE_INSTALL_PATH=${EMIRGE_INSTALL_PATH}" +echo "PRODUCTION_FORK=$PRODUCTION_FORK" +echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" + +# Install the version of mirgecom we wish to test from source +./install.sh --skip-clone --install-prefix=${EMIRGE_INSTALL_PATH}/ --conda-env=${EMIRGE_INSTALL_PATH}/mirgecom/conda-env.yml --pip-pkgs=${EMIRGE_INSTALL_PATH}/mirgecom/requirements.txt + diff --git a/.ci-support/merge-install-production-branch.sh b/.ci-support/merge-install-production-branch.sh new file mode 100755 index 000000000..0ca6c2858 --- /dev/null +++ b/.ci-support/merge-install-production-branch.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -x +# +# This script is designed to patch the CEESD production capability against +# a proposed change to illinois-ceesd/mirgecom@main. The script reads the +# environment config file `.ci-support/production-testing-env.sh`, that +# should set up the expected control variables, which are as follows: +# +# The proposed changes to test may be in a fork, or a local branch. For +# forks, the environment config files should set: +# +# DEVELOPMENT_FORK = The development fork (default=illinois-ceesd) +# +# The production capability to test against may be specified outright, or +# patched by the incoming development. The following vars control the +# production environment: +# +# PRODUCTION_BRANCH = The production branch (default=y1-production) +# PRODUCTION_FORK = The production fork (default=illinois-ceesd) +# +# If the environment file does not exist, the current development is +# tested against `mirgecom@y1-production`. +# +MIRGE_HOME=${1:-"."} +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} +PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} + +echo "MIRGE_HOME=${MIRGE_HOME}" +echo "PRODUCTION_FORK=$PRODUCTION_FORK" +echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" + +cd ${MIRGE_HOME} +git status + +# This junk is needed to be able to execute git commands properly +git config user.email "ci-runner@ci.machine.com" +git config user.name "CI Runner" + +# Making a dedicated production remote adds production forks +git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom +git fetch production + +# Merge the production branch for testing the production drivers +git merge production/${PRODUCTION_BRANCH} --no-edit +# Pick up any requirements.txt +pip install -r requirements.txt +cd - diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh new file mode 100755 index 000000000..f04273d88 --- /dev/null +++ b/.ci-support/production-drivers-install.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# This script is designed to install the CEESD production test used to +# check that changes to main don't tear up the production capability. +# The script takes one argument, the production environment setup file, +# which is typically `.ci-support/production-env-setup.sh`. To specify +# what production test is installed, the env setup script should set +# the following: +# +# PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" +# (See the example default value below) +# +# The default values result in an install of the Y1 nozzle driver and +# Wyatt Hagen's isolator driver that work with current MIRGE-Com +# production branch: mirgecom@y1-production. +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} +# Loop over the production drivers, clone them, and prepare for execution +set -x +OIFS="$IFS" +IFS=':'; for production_driver_string in $PRODUCTION_DRIVERS; +do + PRODUCTION_DRIVER_BRANCH=$(printf "$production_driver_string" | cut -d "@" -f 2) + PRODUCTION_DRIVER_REPO=$(printf "$production_driver_string" | cut -d "@" -f 1) + PRODUCTION_DRIVER_NAME=$(printf "$PRODUCTION_DRIVER_REPO" | cut -d "/" -f 2) + PRODUCTION_DRIVER_DIR="production_driver_$PRODUCTION_DRIVER_NAME" + git clone -b "$PRODUCTION_DRIVER_BRANCH" https\://github.com/"$PRODUCTION_DRIVER_REPO" "$PRODUCTION_DRIVER_DIR" + cd "$PRODUCTION_DRIVER_DIR"/smoke_test + ln -s *.py driver.py # name the driver generically + cd ../.. +done +IFS="$OIFS" +set +x diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh old mode 100644 new mode 100755 diff --git a/.ci-support/production-tests-run.sh b/.ci-support/production-tests-run.sh new file mode 100755 index 000000000..33d0fd89f --- /dev/null +++ b/.ci-support/production-tests-run.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -x +# This script is designed to run the CEESD "production" drivers after +# they have been prepared by an external helper script called +# production-drivers-install.sh. The drivers are each expected to be +# in a directory called "production_driver_*" and are expected to have +# a test driver in "production_driver_*/smoke_test/driver.py". +DRIVERS_HOME=${1:-"."} +cd ${DRIVERS_HOME} +for production_driver in $(ls | grep "production_driver_"); +do + cd "$production_driver"/smoke_test + python -m mpi4py ./driver.py -i run_params.yaml + cd ../../ +done +cd - diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index dda8f3173..06a6c36c5 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -176,17 +176,12 @@ jobs: cd .. git clone https://github.com/illinois-ceesd/emirge emirge.y1 cd emirge.y1 - . ../mirgecom/.ci-support/production-install.sh ${MIRGEDIR}/.. + . ../mirgecom/.ci-support/install-mirge-from-source.sh ${MIRGEDIR}/.. + . ../mirgecom/.ci-support/merge-install-production-branch.sh ${MIRGEDIR} - name: Run production test run: | MIRGEDIR=$(pwd) . .ci-support/production-testing-env.sh - cd ../ - source ${MIRGEDIR}/../config/activate_env.sh - . mirgecom/.ci-support/production-driver-install.sh - for production_driver in $(ls | grep "production_driver_"); - do - cd "$production_driver"/smoke_test - python -m mpi4py ./driver.py -i run_params.yaml - cd ../../ - done + source ../config/activate_env.sh + . .ci-support/production-drivers-install.sh . + . .ci-support/production-drivers-run.sh . From 837abd42fa50f7a697aab7e43ff1e4d0732fa7e2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 21:21:01 -0500 Subject: [PATCH 300/873] Update CI for changes to production test scripts. --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 06a6c36c5..00b27a18d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -177,10 +177,10 @@ jobs: git clone https://github.com/illinois-ceesd/emirge emirge.y1 cd emirge.y1 . ../mirgecom/.ci-support/install-mirge-from-source.sh ${MIRGEDIR}/.. + source ${MIRGEDIR}/../config/activate_env.sh . ../mirgecom/.ci-support/merge-install-production-branch.sh ${MIRGEDIR} - name: Run production test run: | - MIRGEDIR=$(pwd) . .ci-support/production-testing-env.sh source ../config/activate_env.sh . .ci-support/production-drivers-install.sh . From 0f3ca635c9f952231cde8576e838f451aeb7b735 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 21:45:43 -0500 Subject: [PATCH 301/873] Rename for consistency --- .../{production-tests-run.sh => production-drivers-run.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .ci-support/{production-tests-run.sh => production-drivers-run.sh} (100%) diff --git a/.ci-support/production-tests-run.sh b/.ci-support/production-drivers-run.sh similarity index 100% rename from .ci-support/production-tests-run.sh rename to .ci-support/production-drivers-run.sh From e9fde3844aa594c5bb44baba3491b3e049328e1a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 21:53:15 -0500 Subject: [PATCH 302/873] Correct some script names in doc. --- doc/development/pullrequests.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/development/pullrequests.rst b/doc/development/pullrequests.rst index e466c657f..c670d139f 100644 --- a/doc/development/pullrequests.rst +++ b/doc/development/pullrequests.rst @@ -247,7 +247,7 @@ does for executing the production tests. $ # Load the customizable production environment $ . .ci-support/production-testing-env.sh $ # Merge the production branch - $ . .ci-support/merge-install-production-branch . + $ . .ci-support/merge-install-production-branch.sh . If Step 2 fails, i.e. if there are merge conflicts, then those must be resolved. Push the merged result to CEESD or a fork, and indicate @@ -261,9 +261,9 @@ does for executing the production tests. $ # Load env if needed $ . .ci-support/production-testing-env.sh $ # Get the production tests - $ . .ci-support/production-driver-install.sh . + $ . .ci-support/production-drivers-install.sh . $ # Run the production tests - $ . .ci-support/production-test-run.sh . + $ . .ci-support/production-drivers-run.sh . Step 3 will clone the production driver repos to the current directory, with each driver in its own directory. If any of the drivers fail to From 816418ca9177bbcd8d89c245283e2f122cb9e9ca Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 22:31:21 -0500 Subject: [PATCH 303/873] Clean up more, remove cruft. --- .ci-support/install-mirge-from-source.sh | 25 +-------- .../merge-install-production-branch.sh | 12 +---- .ci-support/production-driver-install.sh | 32 ------------ .ci-support/production-install.sh | 52 ------------------- .ci-support/production-testing-env.sh | 16 ++---- 5 files changed, 8 insertions(+), 129 deletions(-) delete mode 100644 .ci-support/production-driver-install.sh delete mode 100644 .ci-support/production-install.sh diff --git a/.ci-support/install-mirge-from-source.sh b/.ci-support/install-mirge-from-source.sh index 61ee48b7d..bfa55dd08 100755 --- a/.ci-support/install-mirge-from-source.sh +++ b/.ci-support/install-mirge-from-source.sh @@ -1,33 +1,12 @@ #!/bin/bash set -x # -# This script is designed to patch the CEESD production capability against -# a proposed change to illinois-ceesd/mirgecom@main. The script reads the -# environment config file `.ci-support/production-testing-env.sh`, that -# should set up the expected control variables, which are as follows: -# -# The proposed changes to test may be in a fork, or a local branch. For -# forks, the environment config files should set: -# -# DEVELOPMENT_FORK = The development fork (default=illinois-ceesd) -# -# The production capability to test against may be specified outright, or -# patched by the incoming development. The following vars control the -# production environment: -# -# PRODUCTION_BRANCH = The production branch (default=y1-production) -# PRODUCTION_FORK = The production fork (default=illinois-ceesd) -# -# If the environment file does not exist, the current development is -# tested against `mirgecom@y1-production`. +# This script is intended to install mirgecom from an uninstalled +# mirgecom source gotten from a fresh clone. # EMIRGE_INSTALL_PATH=${1:-"."} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} -PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} echo "EMIRGE_INSTALL_PATH=${EMIRGE_INSTALL_PATH}" -echo "PRODUCTION_FORK=$PRODUCTION_FORK" -echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" # Install the version of mirgecom we wish to test from source ./install.sh --skip-clone --install-prefix=${EMIRGE_INSTALL_PATH}/ --conda-env=${EMIRGE_INSTALL_PATH}/mirgecom/conda-env.yml --pip-pkgs=${EMIRGE_INSTALL_PATH}/mirgecom/requirements.txt diff --git a/.ci-support/merge-install-production-branch.sh b/.ci-support/merge-install-production-branch.sh index 0ca6c2858..3733c1a7d 100755 --- a/.ci-support/merge-install-production-branch.sh +++ b/.ci-support/merge-install-production-branch.sh @@ -1,15 +1,10 @@ #!/bin/bash set -x # -# This script is designed to patch the CEESD production capability against +# This script is designed to patch the CEESD production capability into # a proposed change to illinois-ceesd/mirgecom@main. The script reads the # environment config file `.ci-support/production-testing-env.sh`, that -# should set up the expected control variables, which are as follows: -# -# The proposed changes to test may be in a fork, or a local branch. For -# forks, the environment config files should set: -# -# DEVELOPMENT_FORK = The development fork (default=illinois-ceesd) +# should set up the expected control variables. # # The production capability to test against may be specified outright, or # patched by the incoming development. The following vars control the @@ -18,9 +13,6 @@ set -x # PRODUCTION_BRANCH = The production branch (default=y1-production) # PRODUCTION_FORK = The production fork (default=illinois-ceesd) # -# If the environment file does not exist, the current development is -# tested against `mirgecom@y1-production`. -# MIRGE_HOME=${1:-"."} PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} diff --git a/.ci-support/production-driver-install.sh b/.ci-support/production-driver-install.sh deleted file mode 100644 index fb7a6d0d9..000000000 --- a/.ci-support/production-driver-install.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# This script is designed to install the CEESD production test used to -# check that changes to main don't tear up the production capability. -# The script takes one argument, the production environment setup file, -# which is typically `.ci-support/production-env-setup.sh`. To specify -# what production test is installed, the env setup script should set -# the following: -# -# -# PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" -# (See the example default value below) -# -# The default values result in an install of the Y1 nozzle driver and -# Wyatt Hagen's isolator driver that work with current MIRGE-Com -# production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} -# Loop over the production drivers, clone them, and prepare for execution -set -x -OIFS="$IFS" -IFS=':'; for production_driver_string in $PRODUCTION_DRIVERS; -do - PRODUCTION_DRIVER_BRANCH=$(printf "$production_driver_string" | cut -d "@" -f 2) - PRODUCTION_DRIVER_REPO=$(printf "$production_driver_string" | cut -d "@" -f 1) - PRODUCTION_DRIVER_NAME=$(printf "$PRODUCTION_DRIVER_REPO" | cut -d "/" -f 2) - PRODUCTION_DRIVER_DIR="production_driver_$PRODUCTION_DRIVER_NAME" - git clone -b "$PRODUCTION_DRIVER_BRANCH" https\://github.com/"$PRODUCTION_DRIVER_REPO" "$PRODUCTION_DRIVER_DIR" - cd "$PRODUCTION_DRIVER_DIR"/smoke_test - ln -s *.py driver.py # name the driver generically - cd ../.. -done -IFS="$OIFS" -set +x diff --git a/.ci-support/production-install.sh b/.ci-support/production-install.sh deleted file mode 100644 index a681268f2..000000000 --- a/.ci-support/production-install.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# -# This script is designed to patch the CEESD production capability against -# a proposed change to illinois-ceesd/mirgecom@main. The script reads the -# environment config file `.ci-support/production-testing-env.sh`, that -# should set up the expected control variables, which are as follows: -# -# The proposed changes to test may be in a fork, or a local branch. For -# forks, the environment config files should set: -# -# DEVELOPMENT_FORK = The development fork (default=illinois-ceesd) -# -# The production capability to test against may be specified outright, or -# patched by the incoming development. The following vars control the -# production environment: -# -# PRODUCTION_BRANCH = The production branch (default=y1-production) -# PRODUCTION_FORK = The production fork (default=illinois-ceesd) -# -# If the environment file does not exist, the current development is -# tested against `mirgecom@y1-production`. -# -set -x - -EMIRGE_INSTALL_PATH=${1:-"."} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} -PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} - -echo "EMIRGE_INSTALL_PATH=${EMIRGE_INSTALL_PATH}" -echo "PRODUCTION_FORK=$PRODUCTION_FORK" -echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" - -# Install the version of mirgecom we wish to test from source -./install.sh --skip-clone --install-prefix=${EMIRGE_INSTALL_PATH}/ --conda-env=${EMIRGE_INSTALL_PATH}/mirgecom/conda-env.yml --pip-pkgs=${EMIRGE_INSTALL_PATH}/mirgecom/requirements.txt - -# Activate the environment (needed?) -source ${EMIRGE_INSTALL_PATH}/config/activate_env.sh -cd ${EMIRGE_INSTALL_PATH}/mirgecom - -# This junk is needed to be able to execute git commands properly -git config user.email "ci-runner@ci.machine.com" -git config user.name "CI Runner" - -# Making a dedicated production remote adds production forks -git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom -git fetch production - -# Merge the production branch for testing the production drivers -git merge production/${PRODUCTION_BRANCH} --no-edit -# Pick up any requirements.txt -pip install -r requirements.txt -cd - diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 5517dc273..75c83a192 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -1,20 +1,12 @@ #!/bin/bash set -x # -# This script is designed to help customize the production environemtn +# This script is designed to help customize the production environment # under which CEESD production capability is tested under a proposed change -# to illinois-ceesd/mirgecom@main. If necessary, the script sets the -# following vars: +# to illinois-ceesd/mirgecom@main. # -# The proposed changes to test may be in a fork, or a local branch. For -# forks, the environment config files should set: -# -# export DEVELOPMENT_FORK="" # the fork/home of the development -# export DEVELOPMENT_BRANCH="" -# -# The production capability to test against may be specified outright, or -# patched by the incoming development. The following vars control the -# production environment: +# The production capability may be in a CEESD-local mirgecom branch or in a +# fork, and is specified through the following settings: # export PRODUCTION_BRANCH="ci-test-production" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) From b053d56fb4d5ec3768595f92082c48ce369a8979 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 23:08:58 -0500 Subject: [PATCH 304/873] Uncustomize production env. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 75c83a192..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="ci-test-production" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 8034ba5069448ee3cc597a3651435ce00fc6688b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Oct 2021 23:10:21 -0500 Subject: [PATCH 305/873] Uncustomize production env. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 75c83a192..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="ci-test-production" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 3642ca5f710c39e06ca85233a381604c921e4735 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 Nov 2021 11:53:08 -0500 Subject: [PATCH 306/873] Update integrators to handle reference state --- mirgecom/integrators/__init__.py | 4 ++-- mirgecom/integrators/explicit_rk.py | 17 ++++++++++++----- mirgecom/integrators/lsrk.py | 27 +++++++++++++++++---------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/mirgecom/integrators/__init__.py b/mirgecom/integrators/__init__.py index 6e00304c4..2a551666b 100644 --- a/mirgecom/integrators/__init__.py +++ b/mirgecom/integrators/__init__.py @@ -33,9 +33,9 @@ """ -def lsrk4_step(state, t, dt, rhs): +def lsrk4_step(state, t, dt, rhs, reference_state=None): """Call lsrk54_step with backwards-compatible interface.""" from warnings import warn warn("Do not call lsrk4; it is now callled lsrk54_step. This function will " "disappear August 1, 2021", DeprecationWarning, stacklevel=2) - return lsrk54_step(state, t, dt, rhs) + return lsrk54_step(state, t, dt, rhs, reference_state) diff --git a/mirgecom/integrators/explicit_rk.py b/mirgecom/integrators/explicit_rk.py index 5fe752cb7..51a5e3fa8 100644 --- a/mirgecom/integrators/explicit_rk.py +++ b/mirgecom/integrators/explicit_rk.py @@ -28,11 +28,18 @@ """ -def rk4_step(state, t, dt, rhs): +def rk4_step(state, t, dt, rhs, reference_state=None): """Take one step using the fourth-order Classical Runge-Kutta method.""" - k1 = rhs(t, state) - k2 = rhs(t+dt/2, state + dt/2*k1) - k3 = rhs(t+dt/2, state + dt/2*k2) - k4 = rhs(t+dt, state + dt*k3) + if reference_state is not None: + reference_state = state + k1 = rhs(t, state, reference_state) + k2 = rhs(t+dt/2, state + dt/2*k1, reference_state) + k3 = rhs(t+dt/2, state + dt/2*k2, reference_state) + k4 = rhs(t+dt, state + dt*k3, reference_state) + else: + k1 = rhs(t, state) + k2 = rhs(t+dt/2, state + dt/2*k1) + k3 = rhs(t+dt/2, state + dt/2*k2) + k4 = rhs(t+dt, state + dt*k3) return state + dt/6*(k1 + 2*k2 + 2*k3 + k4) diff --git a/mirgecom/integrators/lsrk.py b/mirgecom/integrators/lsrk.py index a1409b4a3..d50a9105a 100644 --- a/mirgecom/integrators/lsrk.py +++ b/mirgecom/integrators/lsrk.py @@ -46,12 +46,18 @@ class LSRKCoefficients: C: np.ndarray -def lsrk_step(coefs, state, t, dt, rhs): +def lsrk_step(coefs, state, t, dt, rhs, reference_state=None): """Take one step using a low-storage Runge-Kutta method.""" k = 0.0 * state - for i in range(len(coefs.A)): - k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state) - state += coefs.B[i]*k + if reference_state is not None: + reference_state = state + for i in range(len(coefs.A)): + k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state, reference_state) + state += coefs.B[i]*k + else: + for i in range(len(coefs.A)): + k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state) + state += coefs.B[i]*k return state @@ -62,9 +68,9 @@ def lsrk_step(coefs, state, t, dt, rhs): C=np.array([0.])) -def euler_step(state, t, dt, rhs): +def euler_step(state, t, dt, rhs, reference_state=None): """Take one step using the explicit, 1st-order accurate, Euler method.""" - return lsrk_step(EulerCoefs, state, t, dt, rhs) + return lsrk_step(EulerCoefs, state, t, dt, rhs, reference_state) LSRK54CarpenterKennedyCoefs = LSRKCoefficients( @@ -88,12 +94,12 @@ def euler_step(state, t, dt, rhs): 2802321613138/2924317926251])) -def lsrk54_step(state, t, dt, rhs): +def lsrk54_step(state, t, dt, rhs, reference_state=None): """Take one step using an explicit 5-stage, 4th-order, LSRK method. Coefficients are summarized in [Hesthaven_2008]_, Section 3.4. """ - return lsrk_step(LSRK54CarpenterKennedyCoefs, state, t, dt, rhs) + return lsrk_step(LSRK54CarpenterKennedyCoefs, state, t, dt, rhs, reference_state) LSRK144NiegemannDiehlBuschCoefs = LSRKCoefficients( @@ -144,11 +150,12 @@ def lsrk54_step(state, t, dt, rhs): 0.8734213127600976])) -def lsrk144_step(state, t, dt, rhs): +def lsrk144_step(state, t, dt, rhs, reference_state=None): """Take one step using an explicit 14-stage, 4th-order, LSRK method. This method is derived by Niegemann, Diehl, and Busch (2012), with an optimal stability region for advection-dominated flows. The LSRK coefficients are summarized in [Niegemann_2012]_, Table 3. """ - return lsrk_step(LSRK144NiegemannDiehlBuschCoefs, state, t, dt, rhs) + return lsrk_step(LSRK144NiegemannDiehlBuschCoefs, state, t, dt, rhs, + reference_state) From c76a91b71e583da71ad28ceb537f8626a83dbb9b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 Nov 2021 11:54:29 -0500 Subject: [PATCH 307/873] update to use reference state for seeding temperature --- examples/autoignition-mpi.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index dd5121137..874f4cdbb 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -259,6 +259,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, from pytools.obj_array import make_obj_array + def get_temperature_update(state, temperature): + y = state.species_mass_fractions + e = eos.internal_energy(state) / state.mass + return make_obj_array( + [pyro_mechanism.get_temperature_update_energy(e, temperature, y)] + ) + def get_temperature_mass_energy(state, temperature): y = state.species_mass_fractions e = eos.internal_energy(state) / state.mass @@ -266,6 +273,7 @@ def get_temperature_mass_energy(state, temperature): [pyro_mechanism.get_temperature(e, temperature, y)] ) + compute_temperature_update = actx.compile(get_temperature_update) compute_dependent_vars = actx.compile(eos.dependent_vars) compute_temperature = actx.compile(get_temperature_mass_energy) @@ -292,6 +300,7 @@ def get_temperature_mass_energy(state, temperature): logmgr_set_time(logmgr, current_step, current_t) if order == rst_order: current_state = restart_data["state"] + rst_temperature = restart_data["temperature"] else: rst_state = restart_data["state"] old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, @@ -300,9 +309,14 @@ def get_temperature_mass_energy(state, temperature): connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), old_discr.discr_from_dd("vol")) current_state = connection(rst_state) + rst_temperature = connection(restart_data["temperature"]) + # This bit memoizes the restarted temperature onto the current_state + rst_temperature = compute_temperature(current_state, rst_temperature) else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes) + reference_state = current_state + # import ipdb # ipdb.set_trace() @@ -381,9 +395,11 @@ def my_write_restart(step, t, state): if rank == 0: logger.info("Skipping overwrite of restart file.") else: + rst_dv = compute_dependent_vars(state) rst_data = { "local_mesh": local_mesh, "state": state, + "temperature": rst_dv.temperature, "t": t, "step": step, "order": order, @@ -427,11 +443,10 @@ def my_health_check(cv, dv): # convergence in Pyrometheus `get_temperature`. # Note: The local max jig below works around a very long compile # in lazy mode. - check_temp, = compute_temperature(cv, temperature) - check_temp = thaw(freeze(check_temp, actx), actx) - temp_resid = actx.np.abs(check_temp - temperature) - temp_resid = op.nodal_max_loc(discr, "vol", temp_resid) - if temp_resid > 1e-12: + temp_update, = compute_temperature_update(cv, temperature) + temp_resid = thaw(freeze(temp_update, actx), actx) / temperature + temp_resid = (actx.to_numpy(op.nodal_max_loc(discr, "vol", temp_resid))) + if temp_resid > 1e-8: health_error = True logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") @@ -527,15 +542,16 @@ def my_pre_step(step, t, dt, state): def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw - from mirgecom.simutil import limit_species_mass_fractions - state = limit_species_mass_fractions(state) if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) logmgr.tick_after() return state, dt - def my_rhs(t, state): + def my_rhs(t, state, reference_state): + current_dv = eos.dependent_vars(state, reference_state) + if debug: + print(f"{current_dv=}") return (euler_operator(discr, cv=state, time=t, boundaries=boundaries, eos=eos) + eos.get_species_source_terms(state)) @@ -547,7 +563,8 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_state, t=current_t, t_final=t_final, + reference_state=reference_state) # Dump the final data if rank == 0: From a7b35750807b26f0893c7d503b8cc1ed8aed4e93 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 Nov 2021 11:55:59 -0500 Subject: [PATCH 308/873] Update to use reference state --- mirgecom/eos.py | 47 ++++++++++++++++++++++++++++++++++++++------ mirgecom/steppers.py | 12 +++++++---- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index bd18333cf..5773f0690 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -90,7 +90,8 @@ def pressure(self, cv: ConservedVars): """Get the gas pressure.""" @abstractmethod - def temperature(self, cv: ConservedVars): + def temperature(self, cv: ConservedVars, + reference_state: ConservedVars = None): """Get the gas temperature.""" @abstractmethod @@ -133,11 +134,12 @@ def transport_model(self): def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" - def dependent_vars(self, cv: ConservedVars) -> EOSDependentVars: + def dependent_vars(self, cv: ConservedVars, + reference_state: ConservedVars = None) -> EOSDependentVars: """Get an agglomerated array of the dependent variables.""" return EOSDependentVars( pressure=self.pressure(cv), - temperature=self.temperature(cv), + temperature=self.temperature(cv, reference_state), ) @@ -152,8 +154,14 @@ class MixtureEOS(GasEOS): .. automethod:: get_production_rates .. automethod:: species_enthalpies .. automethod:: get_species_source_terms + .. automethod:: get_temperature_guess """ + @abstractmethod + def get_temperature_guess(self, cv: ConservedVars, + reference_state: ConservedVars = None): + r"""Get a constant and uniform guess for the gas temperature.""" + @abstractmethod def get_density(self, pressure, temperature, species_mass_fractions): """Get the density from pressure, temperature, and species fractions (Y).""" @@ -332,7 +340,7 @@ def sound_speed(self, cv: ConservedVars): actx = cv.array_context return actx.np.sqrt(self._gamma / cv.mass * self.pressure(cv)) - def temperature(self, cv: ConservedVars): + def temperature(self, cv: ConservedVars, reference_state: ConservedVars = None): r"""Get the thermodynamic temperature of the gas. The thermodynamic temperature (T) is calculated from @@ -349,6 +357,10 @@ def temperature(self, cv: ConservedVars): :class:`~mirgecom.fluid.ConservedVars` containing at least the mass ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$). + reference_state: :class:`~mirgecom.fluid.ConservedVars` + :class:`~mirgecom.fluid.ConservedVars` from which to seed temperature + calculation. + Returns ------- :class:`~meshmode.dof_array.DOFArray` @@ -479,6 +491,28 @@ def __init__(self, pyrometheus_mech, temperature_guess=300.0, self._tguess = temperature_guess self._transport_model = transport_model + def get_temperature_guess(self, cv, reference_state=None): + """Get a constant and uniform guess for the gas temperature. + + Parameters + ---------- + cv: :class:`~mirgecom.fluid.ConservedVars` + :class:`~mirgecom.fluid.ConservedVars` used to conjure the required shape + for the returned temperature guess. + reference_state: :class:`~mirgecom.fluid.ConservedVars` + :class:`~mirgecom.fluid.ConservedVars` optionally seed the temperature + calculation with the temperature from this state + + Returns + ------- + :class:`~meshmode.dof_array.DOFArray` + The temperature with which to seed the Newton solver in + :module:thermochemistry. + """ + if reference_state is not None: + return self.temperature(reference_state) # return already-memoized temp + return (self._tguess * (0*cv.mass + 1.0)) + def transport_model(self): """Get the transport model object for this EOS.""" return self._transport_model @@ -723,7 +757,7 @@ def get_sos(): return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) return get_sos() - def temperature(self, cv: ConservedVars): + def temperature(self, cv: ConservedVars, reference_state=None): r"""Get the thermodynamic temperature of the gas. The thermodynamic temperature ($T$) is calculated from @@ -751,10 +785,11 @@ def temperature(self, cv: ConservedVars): @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): - tguess = self._tguess + 0*cv.mass + tguess = self.get_temperature_guess(cv, reference_state=reference_state) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass return self._pyrometheus_mech.get_temperature(e, tguess, y) + return get_temp() def total_energy(self, cv, pressure): diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index e14f513bb..d668c7f1f 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -63,7 +63,7 @@ def _advance_state_stepper_func(rhs, timestepper, pre_step_callback=None, post_step_callback=None, logmgr=None, eos=None, dim=None, - actx=None): + actx=None, reference_state=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -123,7 +123,11 @@ def _advance_state_stepper_func(rhs, timestepper, if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) - state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) + if reference_state is not None: + reference_state = state + + state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs, + reference_state=reference_state) t += dt istep += 1 @@ -272,7 +276,7 @@ def advance_state(rhs, timestepper, state, t_final, pre_step_callback=None, post_step_callback=None, logmgr=None, eos=None, dim=None, - actx=None): + actx=None, reference_state=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -357,7 +361,7 @@ def advance_state(rhs, timestepper, state, t_final, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, istep=istep, logmgr=logmgr, eos=eos, dim=dim, - actx=actx + actx=actx, reference_state=reference_state ) return current_step, current_t, current_state From 0d0c040e50d1fc4cde62faaf946d2345a2726978 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 Nov 2021 11:57:12 -0500 Subject: [PATCH 309/873] Publicize temperature update routine for use in health checking. --- mirgecom/thermochemistry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 81bbb9438..081cc28a7 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -67,7 +67,7 @@ def get_concentrations(self, rho, mass_fractions): return concs # This is the temperature update for *get_temperature* - def _get_temperature_update_energy(self, e_in, t_in, y): + def get_temperature_update_energy(self, e_in, t_in, y): pv_func = self.get_mixture_specific_heat_cv_mass he_func = self.get_mixture_internal_energy_mass return (e_in - he_func(t_in, y)) / pv_func(t_in, y) @@ -99,7 +99,7 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): num_iter = temperature_niter t_i = temperature_guess for _ in range(num_iter): - t_i = t_i + self._get_temperature_update_energy( + t_i = t_i + self.get_temperature_update_energy( energy, t_i, species_mass_fractions ) return t_i From 0c56fb1d966719582e1cbbb94bff9ac7cd8756da Mon Sep 17 00:00:00 2001 From: Matt Smith Date: Tue, 2 Nov 2021 16:18:34 -0500 Subject: [PATCH 310/873] rename _evaluate_state -> _force_evaluation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andreas Klöckner --- mirgecom/steppers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 3ff5460eb..a8f129487 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -64,7 +64,7 @@ def get_rhs(): return get_rhs() -def _evaluate_state(actx, state): +def _force_evaluation(actx, state): if actx is None: return state return thaw(freeze(state, actx), actx) @@ -126,7 +126,7 @@ def _advance_state_stepper_func(rhs, timestepper, compiled_rhs = _compile_rhs(actx, rhs) while t < t_final: - state = _evaluate_state(actx, state) + state = _force_evaluation(actx, state) if logmgr: logmgr.tick_before() @@ -207,7 +207,7 @@ def _advance_state_leap(rhs, timestepper, state, compiled_rhs, t, dt, state) while t < t_final: - state = _evaluate_state(actx, state) + state = _force_evaluation(actx, state) if pre_step_callback is not None: state, dt = pre_step_callback(state=state, From 4e3aaf511b9c01e29c936f7853ca4479e47f9bcf Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 09:06:16 -0500 Subject: [PATCH 311/873] Refactor to incrementally centralize EOS functions --- examples/autoignition-mpi.py | 5 ++--- mirgecom/eos.py | 2 +- mirgecom/euler.py | 8 ++++++-- mirgecom/integrators/explicit_rk.py | 1 - mirgecom/inviscid.py | 29 +++++++++++++++-------------- 5 files changed, 24 insertions(+), 21 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 874f4cdbb..9b936f809 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -550,10 +550,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state, reference_state): current_dv = eos.dependent_vars(state, reference_state) - if debug: - print(f"{current_dv=}") return (euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) + boundaries=boundaries, eos=eos, + dv=current_dv) + eos.get_species_source_terms(state)) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 5773f0690..4743e5bbc 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -138,8 +138,8 @@ def dependent_vars(self, cv: ConservedVars, reference_state: ConservedVars = None) -> EOSDependentVars: """Get an agglomerated array of the dependent variables.""" return EOSDependentVars( - pressure=self.pressure(cv), temperature=self.temperature(cv, reference_state), + pressure=self.pressure(cv), ) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index b39675042..aaf07e7d9 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -66,7 +66,8 @@ from mirgecom.operators import div_operator -def euler_operator(discr, eos, boundaries, cv, time=0.0): +def euler_operator(discr, eos, boundaries, cv, time=0.0, + dv=None): r"""Compute RHS of the Euler flow equations. Returns @@ -100,7 +101,10 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ - inviscid_flux_vol = inviscid_flux(discr, eos, cv) + if dv is None: + dv = eos.dependent_vars(cv) + + inviscid_flux_vol = inviscid_flux(discr, dv.pressure, cv) inviscid_flux_bnd = ( inviscid_facial_flux(discr, eos=eos, cv_tpair=interior_trace_pair(discr, cv)) + sum(inviscid_facial_flux( diff --git a/mirgecom/integrators/explicit_rk.py b/mirgecom/integrators/explicit_rk.py index 51a5e3fa8..11870c689 100644 --- a/mirgecom/integrators/explicit_rk.py +++ b/mirgecom/integrators/explicit_rk.py @@ -31,7 +31,6 @@ def rk4_step(state, t, dt, rhs, reference_state=None): """Take one step using the fourth-order Classical Runge-Kutta method.""" if reference_state is not None: - reference_state = state k1 = rhs(t, state, reference_state) k2 = rhs(t+dt/2, state + dt/2*k1, reference_state) k3 = rhs(t+dt/2, state + dt/2*k2, reference_state) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index c04eaf578..dedf3f6f8 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -45,7 +45,7 @@ from mirgecom.fluid import make_conserved -def inviscid_flux(discr, eos, cv): +def inviscid_flux(discr, pressure, cv): r"""Compute the inviscid flux vectors from fluid conserved vars *cv*. The inviscid fluxes are @@ -59,16 +59,16 @@ def inviscid_flux(discr, eos, cv): :class:`mirgecom.fluid.ConservedVars` for more information about how the fluxes are represented. """ - dim = cv.dim - p = eos.pressure(cv) - - mom = cv.momentum - - return make_conserved( - dim, mass=mom, energy=mom * (cv.energy + p) / cv.mass, - momentum=np.outer(mom, mom) / cv.mass + np.eye(dim)*p, - species_mass=( # reshaped: (nspecies, dim) - (mom / cv.mass) * cv.species_mass.reshape(-1, 1))) + mass_flux = cv.momentum + energy_flux = cv.velocity * (cv.energy + pressure) + mom_flux = ( + cv.mass * np.outer(cv.velocity, cv.velocity) + np.eye(cv.dim)*pressure + ) + species_mass_flux = ( # reshaped: (nspeceis, dim) + cv.velocity * cv.species_mass.reshape(-1, 1) + ) + return make_conserved(cv.dim, mass=mass_flux, energy=energy_flux, + momentum=mom_flux, species_mass=species_mass_flux) def inviscid_facial_flux(discr, eos, cv_tpair, local=False): @@ -104,10 +104,11 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): "all_faces"; remaining instead on the boundary restriction. """ actx = cv_tpair.int.array_context - + p_int = eos.pressure(cv_tpair.int) + p_ext = eos.pressure(cv_tpair.ext) flux_tpair = TracePair(cv_tpair.dd, - interior=inviscid_flux(discr, eos, cv_tpair.int), - exterior=inviscid_flux(discr, eos, cv_tpair.ext)) + interior=inviscid_flux(discr, p_int, cv_tpair.int), + exterior=inviscid_flux(discr, p_ext, cv_tpair.ext)) # This calculates the local maximum eigenvalue of the flux Jacobian # for a single component gas, i.e. the element-local max wavespeed |v| + c. From 6cacf6c39399b8617f60dd9e0ee55db95ed4e332 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 12:06:29 -0500 Subject: [PATCH 312/873] Switch eos-side handling reference_state -> temperature_seed --- examples/autoignition-mpi.py | 59 +++++++++++++++++++++++------------- mirgecom/eos.py | 43 ++++++++++++++------------ mirgecom/steppers.py | 6 ++-- 3 files changed, 65 insertions(+), 43 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 9b936f809..ccb45f72b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -216,7 +216,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Initial temperature, pressure, and mixutre mole fractions are needed to # set up the initial state in Cantera. - init_temperature = 1500.0 # Initial temperature hot enough to burn + temperature_seed = 1500.0 # Initial temperature hot enough to burn # Parameters for calculating the amounts of fuel, oxidizer, and inert species equiv_ratio = 1.0 ox_di_ratio = 0.21 @@ -235,9 +235,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # one_atm = 101325.0 # Let the user know about how Cantera is being initilized - print(f"Input state (T,P,X) = ({init_temperature}, {one_atm}, {x}") + print(f"Input state (T,P,X) = ({temperature_seed}, {one_atm}, {x}") # Set Cantera internal gas temperature, pressure, and mole fractios - cantera_soln.TPX = init_temperature, one_atm, x + cantera_soln.TPX = temperature_seed, one_atm, x # Pull temperature, total density, mass fractions, and pressure from Cantera # We need total density, and mass fractions to initialize the fluid/gas state. can_t, can_rho, can_y = cantera_soln.TDY @@ -255,7 +255,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # states for this particular mechanism. from mirgecom.thermochemistry import make_pyrometheus_mechanism_class pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) - eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) + eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) from pytools.obj_array import make_obj_array @@ -266,16 +266,8 @@ def get_temperature_update(state, temperature): [pyro_mechanism.get_temperature_update_energy(e, temperature, y)] ) - def get_temperature_mass_energy(state, temperature): - y = state.species_mass_fractions - e = eos.internal_energy(state) / state.mass - return make_obj_array( - [pyro_mechanism.get_temperature(e, temperature, y)] - ) - compute_temperature_update = actx.compile(get_temperature_update) compute_dependent_vars = actx.compile(eos.dependent_vars) - compute_temperature = actx.compile(get_temperature_mass_energy) # }}} @@ -300,7 +292,7 @@ def get_temperature_mass_energy(state, temperature): logmgr_set_time(logmgr, current_step, current_t) if order == rst_order: current_state = restart_data["state"] - rst_temperature = restart_data["temperature"] + temperature_seed = restart_data["temperature"] else: rst_state = restart_data["state"] old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, @@ -309,13 +301,32 @@ def get_temperature_mass_energy(state, temperature): connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), old_discr.discr_from_dd("vol")) current_state = connection(rst_state) - rst_temperature = connection(restart_data["temperature"]) - # This bit memoizes the restarted temperature onto the current_state - rst_temperature = compute_temperature(current_state, rst_temperature) + temperature_seed = connection(restart_data["temperature"]) else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes) - reference_state = current_state + + # This bit memoizes the initial state's temperature onto the initial state + # (assuming `initializer` just above didn't call eos.dv funcs.) + # + # The temperature_seed going into this function is: + # - At time 0: the initial temperature input data (maybe from Cantera) + # - On restart: the restarted temperature read from restart file + # + # Note that this means we *seed* the temperature calculation with the actual + # temperature from the run. The resulting temperature may be different from the + # seed (error commensurate with convergence of running temperature), potentially + # meaning non-deterministic temperature restarts (i.e. one where the code gets a + # slightly different answer for temperature than it would have without the + # restart). In the absense of restart, the running temperature is that which was + # computed with a temperature_seed that equals the running temperature from the + # last step. + # Potentially, we could move the restart writing to trigger at post_step_callback + # and instead of writing the *current* running temperature to the restart file, + # we could write the *temperature_seed*. That could fix up the non-deterministic + # restart issue. + temperature_seed = eos.temperature(current_state, + temperature_seed=temperature_seed) # import ipdb # ipdb.set_trace() @@ -490,7 +501,7 @@ def my_get_timestep(t, dt, state): comm=comm, op=MPI.MAX) return ts_field, cfl, min(t_remaining, dt) - def my_pre_step(step, t, dt, state): + def my_pre_step(step, t, dt, state, reference_state): try: dv = None @@ -539,7 +550,10 @@ def my_pre_step(step, t, dt, state): return state, dt - def my_post_step(step, t, dt, state): + def my_post_step(step, t, dt, state, reference_state): + ref_dv = compute_dependent_vars(reference_state) + new_dv = compute_dependent_vars(state, # noqa + temperature_seed=ref_dv.temperature) # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw if logmgr: @@ -549,7 +563,10 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state, reference_state): - current_dv = eos.dependent_vars(state, reference_state) + ref_dv = eos.dependent_vars(reference_state) + current_dv = eos.dependent_vars(state, + temperature_seed=ref_dv.temperature) + return (euler_operator(discr, cv=state, time=t, boundaries=boundaries, eos=eos, dv=current_dv) @@ -563,7 +580,7 @@ def my_rhs(t, state, reference_state): pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state, t=current_t, t_final=t_final, - reference_state=reference_state) + reference_state=current_state) # Dump the final data if rank == 0: diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 4743e5bbc..f189383b3 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -41,6 +41,7 @@ import numpy as np from pytools import memoize_in from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.dof_array import DOFArray from mirgecom.fluid import ConservedVars, make_conserved from abc import ABCMeta, abstractmethod from arraycontext import dataclass_array_container @@ -135,10 +136,10 @@ def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" def dependent_vars(self, cv: ConservedVars, - reference_state: ConservedVars = None) -> EOSDependentVars: + temperature_seed: DOFArray = None) -> EOSDependentVars: """Get an agglomerated array of the dependent variables.""" return EOSDependentVars( - temperature=self.temperature(cv, reference_state), + temperature=self.temperature(cv, temperature_seed), pressure=self.pressure(cv), ) @@ -154,12 +155,12 @@ class MixtureEOS(GasEOS): .. automethod:: get_production_rates .. automethod:: species_enthalpies .. automethod:: get_species_source_terms - .. automethod:: get_temperature_guess + .. automethod:: get_temperature_seed """ @abstractmethod - def get_temperature_guess(self, cv: ConservedVars, - reference_state: ConservedVars = None): + def get_temperature_seed(self, cv: ConservedVars, + temperature_seed: DOFArray = None): r"""Get a constant and uniform guess for the gas temperature.""" @abstractmethod @@ -340,7 +341,7 @@ def sound_speed(self, cv: ConservedVars): actx = cv.array_context return actx.np.sqrt(self._gamma / cv.mass * self.pressure(cv)) - def temperature(self, cv: ConservedVars, reference_state: ConservedVars = None): + def temperature(self, cv: ConservedVars, temperature_seed: DOFArray = None): r"""Get the thermodynamic temperature of the gas. The thermodynamic temperature (T) is calculated from @@ -357,9 +358,8 @@ def temperature(self, cv: ConservedVars, reference_state: ConservedVars = None): :class:`~mirgecom.fluid.ConservedVars` containing at least the mass ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$). - reference_state: :class:`~mirgecom.fluid.ConservedVars` - :class:`~mirgecom.fluid.ConservedVars` from which to seed temperature - calculation. + temperature_seed: float or :class:`~meshmode.dof_array.DOFArray` + Ignored for this EOS. Returns ------- @@ -462,6 +462,7 @@ class PyrometheusMixture(MixtureEOS): .. automethod:: get_production_rates .. automethod:: species_enthalpies .. automethod:: get_species_source_terms + .. automethod:: get_temperature_seed """ def __init__(self, pyrometheus_mech, temperature_guess=300.0, @@ -491,17 +492,16 @@ def __init__(self, pyrometheus_mech, temperature_guess=300.0, self._tguess = temperature_guess self._transport_model = transport_model - def get_temperature_guess(self, cv, reference_state=None): - """Get a constant and uniform guess for the gas temperature. + def get_temperature_seed(self, cv, temperature_seed=None): + """Get a *cv*-shape-consistent array with which to seed temperature calcuation. Parameters ---------- cv: :class:`~mirgecom.fluid.ConservedVars` :class:`~mirgecom.fluid.ConservedVars` used to conjure the required shape for the returned temperature guess. - reference_state: :class:`~mirgecom.fluid.ConservedVars` - :class:`~mirgecom.fluid.ConservedVars` optionally seed the temperature - calculation with the temperature from this state + temperature_seed: float or :class:`~meshmode.dof_array.DOFArray` + Optional data from which to seed temperature calculation. Returns ------- @@ -509,9 +509,10 @@ def get_temperature_guess(self, cv, reference_state=None): The temperature with which to seed the Newton solver in :module:thermochemistry. """ - if reference_state is not None: - return self.temperature(reference_state) # return already-memoized temp - return (self._tguess * (0*cv.mass + 1.0)) + tseed = self._tguess + if temperature_seed is not None: + tseed = temperature_seed + return tseed if isinstance(tseed, DOFArray) else tseed * (0*cv.mass + 1.0) def transport_model(self): """Get the transport model object for this EOS.""" @@ -757,7 +758,7 @@ def get_sos(): return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) return get_sos() - def temperature(self, cv: ConservedVars, reference_state=None): + def temperature(self, cv: ConservedVars, temperature_seed=None): r"""Get the thermodynamic temperature of the gas. The thermodynamic temperature ($T$) is calculated from @@ -774,6 +775,8 @@ def temperature(self, cv: ConservedVars, reference_state=None): :class:`~mirgecom.fluid.ConservedVars` containing at least the mass ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$), and the vector of species masses, ($\rho{Y}_\alpha$). + temperature_seed: float or :class:`~meshmode.dof_array.DOFArray` + Optional data from which to seed temperature calculation. Returns ------- @@ -785,10 +788,10 @@ def temperature(self, cv: ConservedVars, reference_state=None): @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): - tguess = self.get_temperature_guess(cv, reference_state=reference_state) + tseed = self.get_temperature_seed(cv, temperature_seed) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass - return self._pyrometheus_mech.get_temperature(e, tguess, y) + return self._pyrometheus_mech.get_temperature(e, tseed, y) return get_temp() diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index bf1927d2d..2ea10c478 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -133,7 +133,8 @@ def _advance_state_stepper_func(rhs, timestepper, logmgr.tick_before() if pre_step_callback is not None: - state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) + state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt, + reference_state=reference_state) if reference_state is not None: reference_state = state @@ -145,7 +146,8 @@ def _advance_state_stepper_func(rhs, timestepper, istep += 1 if post_step_callback is not None: - state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) + state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt, + reference_state=reference_state) if logmgr: set_dt(logmgr, dt) From 947a5460dd853c066bb9afaf5a601480cebae0ad Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 13:46:01 -0500 Subject: [PATCH 313/873] Banish reference state from this machinery --- mirgecom/integrators/__init__.py | 4 ++-- mirgecom/integrators/explicit_rk.py | 16 +++++----------- mirgecom/integrators/lsrk.py | 28 ++++++++++------------------ mirgecom/steppers.py | 21 ++++++--------------- 4 files changed, 23 insertions(+), 46 deletions(-) diff --git a/mirgecom/integrators/__init__.py b/mirgecom/integrators/__init__.py index 2a551666b..6e00304c4 100644 --- a/mirgecom/integrators/__init__.py +++ b/mirgecom/integrators/__init__.py @@ -33,9 +33,9 @@ """ -def lsrk4_step(state, t, dt, rhs, reference_state=None): +def lsrk4_step(state, t, dt, rhs): """Call lsrk54_step with backwards-compatible interface.""" from warnings import warn warn("Do not call lsrk4; it is now callled lsrk54_step. This function will " "disappear August 1, 2021", DeprecationWarning, stacklevel=2) - return lsrk54_step(state, t, dt, rhs, reference_state) + return lsrk54_step(state, t, dt, rhs) diff --git a/mirgecom/integrators/explicit_rk.py b/mirgecom/integrators/explicit_rk.py index 11870c689..5fe752cb7 100644 --- a/mirgecom/integrators/explicit_rk.py +++ b/mirgecom/integrators/explicit_rk.py @@ -28,17 +28,11 @@ """ -def rk4_step(state, t, dt, rhs, reference_state=None): +def rk4_step(state, t, dt, rhs): """Take one step using the fourth-order Classical Runge-Kutta method.""" - if reference_state is not None: - k1 = rhs(t, state, reference_state) - k2 = rhs(t+dt/2, state + dt/2*k1, reference_state) - k3 = rhs(t+dt/2, state + dt/2*k2, reference_state) - k4 = rhs(t+dt, state + dt*k3, reference_state) - else: - k1 = rhs(t, state) - k2 = rhs(t+dt/2, state + dt/2*k1) - k3 = rhs(t+dt/2, state + dt/2*k2) - k4 = rhs(t+dt, state + dt*k3) + k1 = rhs(t, state) + k2 = rhs(t+dt/2, state + dt/2*k1) + k3 = rhs(t+dt/2, state + dt/2*k2) + k4 = rhs(t+dt, state + dt*k3) return state + dt/6*(k1 + 2*k2 + 2*k3 + k4) diff --git a/mirgecom/integrators/lsrk.py b/mirgecom/integrators/lsrk.py index d50a9105a..b27dbae58 100644 --- a/mirgecom/integrators/lsrk.py +++ b/mirgecom/integrators/lsrk.py @@ -46,19 +46,12 @@ class LSRKCoefficients: C: np.ndarray -def lsrk_step(coefs, state, t, dt, rhs, reference_state=None): +def lsrk_step(coefs, state, t, dt, rhs): """Take one step using a low-storage Runge-Kutta method.""" k = 0.0 * state - if reference_state is not None: - reference_state = state - for i in range(len(coefs.A)): - k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state, reference_state) - state += coefs.B[i]*k - else: - for i in range(len(coefs.A)): - k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state) - state += coefs.B[i]*k - + for i in range(len(coefs.A)): + k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state) + state += coefs.B[i]*k return state @@ -68,9 +61,9 @@ def lsrk_step(coefs, state, t, dt, rhs, reference_state=None): C=np.array([0.])) -def euler_step(state, t, dt, rhs, reference_state=None): +def euler_step(state, t, dt, rhs): """Take one step using the explicit, 1st-order accurate, Euler method.""" - return lsrk_step(EulerCoefs, state, t, dt, rhs, reference_state) + return lsrk_step(EulerCoefs, state, t, dt, rhs) LSRK54CarpenterKennedyCoefs = LSRKCoefficients( @@ -94,12 +87,12 @@ def euler_step(state, t, dt, rhs, reference_state=None): 2802321613138/2924317926251])) -def lsrk54_step(state, t, dt, rhs, reference_state=None): +def lsrk54_step(state, t, dt, rhs): """Take one step using an explicit 5-stage, 4th-order, LSRK method. Coefficients are summarized in [Hesthaven_2008]_, Section 3.4. """ - return lsrk_step(LSRK54CarpenterKennedyCoefs, state, t, dt, rhs, reference_state) + return lsrk_step(LSRK54CarpenterKennedyCoefs, state, t, dt, rhs) LSRK144NiegemannDiehlBuschCoefs = LSRKCoefficients( @@ -150,12 +143,11 @@ def lsrk54_step(state, t, dt, rhs, reference_state=None): 0.8734213127600976])) -def lsrk144_step(state, t, dt, rhs, reference_state=None): +def lsrk144_step(state, t, dt, rhs): """Take one step using an explicit 14-stage, 4th-order, LSRK method. This method is derived by Niegemann, Diehl, and Busch (2012), with an optimal stability region for advection-dominated flows. The LSRK coefficients are summarized in [Niegemann_2012]_, Table 3. """ - return lsrk_step(LSRK144NiegemannDiehlBuschCoefs, state, t, dt, rhs, - reference_state) + return lsrk_step(LSRK144NiegemannDiehlBuschCoefs, state, t, dt, rhs) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 2ea10c478..da921c873 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -75,8 +75,7 @@ def _advance_state_stepper_func(rhs, timestepper, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, - logmgr=None, eos=None, dim=None, - reference_state=None): + logmgr=None, eos=None, dim=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -133,21 +132,15 @@ def _advance_state_stepper_func(rhs, timestepper, logmgr.tick_before() if pre_step_callback is not None: - state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt, - reference_state=reference_state) + state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) - if reference_state is not None: - reference_state = state - - state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs, - reference_state=reference_state) + state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) t += dt istep += 1 if post_step_callback is not None: - state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt, - reference_state=reference_state) + state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) if logmgr: set_dt(logmgr, dt) @@ -283,8 +276,7 @@ def advance_state(rhs, timestepper, state, t_final, t=0.0, istep=0, dt=0, pre_step_callback=None, post_step_callback=None, - logmgr=None, eos=None, dim=None, - reference_state=None): + logmgr=None, eos=None, dim=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -367,8 +359,7 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - istep=istep, logmgr=logmgr, eos=eos, dim=dim, - reference_state=reference_state + istep=istep, logmgr=logmgr, eos=eos, dim=dim ) return current_step, current_t, current_state From 7ac8b17b5961209efc6ed0db21f80e1739cf5458 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 13:47:48 -0500 Subject: [PATCH 314/873] Use multistate in driver. --- examples/autoignition-mpi.py | 65 +++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index ccb45f72b..85a49ea7b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -325,8 +325,9 @@ def get_temperature_update(state, temperature): # and instead of writing the *current* running temperature to the restart file, # we could write the *temperature_seed*. That could fix up the non-deterministic # restart issue. - temperature_seed = eos.temperature(current_state, - temperature_seed=temperature_seed) + current_dv = compute_dependent_vars(current_state, + temperature_seed=temperature_seed) + temperature_seed = current_dv.temperature # import ipdb # ipdb.set_trace() @@ -501,7 +502,8 @@ def my_get_timestep(t, dt, state): comm=comm, op=MPI.MAX) return ts_field, cfl, min(t_remaining, dt) - def my_pre_step(step, t, dt, state, reference_state): + def my_pre_step(step, t, dt, state): + cv = state[0] try: dv = None @@ -516,28 +518,28 @@ def my_pre_step(step, t, dt, state, reference_state): if do_health: if dv is None: - dv = compute_dependent_vars(state) - health_errors = global_reduce(my_health_check(state, dv), op="lor") + dv = compute_dependent_vars(cv) + health_errors = global_reduce(my_health_check(cv, dv), op="lor") if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) + ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=cv) if do_status: if dv is None: - dv = compute_dependent_vars(state) + dv = compute_dependent_vars(cv) my_write_status(dt=dt, cfl=cfl, dv=dv) if do_restart: - my_write_restart(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=cv) if do_viz: - production_rates, = compute_production_rates(state) + production_rates, = compute_production_rates(cv) if dv is None: - dv = compute_dependent_vars(state) - my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, + dv = compute_dependent_vars(cv) + my_write_viz(step=step, t=t, dt=dt, state=cv, dv=dv, production_rates=production_rates, ts_field=ts_field, cfl=cfl) @@ -550,27 +552,29 @@ def my_pre_step(step, t, dt, state, reference_state): return state, dt - def my_post_step(step, t, dt, state, reference_state): - ref_dv = compute_dependent_vars(reference_state) - new_dv = compute_dependent_vars(state, # noqa - temperature_seed=ref_dv.temperature) + def my_post_step(step, t, dt, state): + cv = state[0] + new_dv = compute_dependent_vars(cv, # noqa + temperature_seed=state[1]) + # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) + set_sim_state(logmgr, dim, cv, eos) logmgr.tick_after() - return state, dt + return make_obj_array([cv, new_dv.temperature]), dt - def my_rhs(t, state, reference_state): - ref_dv = eos.dependent_vars(reference_state) - current_dv = eos.dependent_vars(state, - temperature_seed=ref_dv.temperature) + def my_rhs(t, state): + cv = state[0] + current_dv = eos.dependent_vars(cv, + temperature_seed=state[1]) - return (euler_operator(discr, cv=state, time=t, + return make_obj_array([euler_operator(discr, cv=cv, time=t, boundaries=boundaries, eos=eos, dv=current_dv) - + eos.get_species_source_terms(state)) + + eos.get_species_source_terms(cv), + 0*state[1]]) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, eos, t_final, constant_cfl) @@ -579,21 +583,22 @@ def my_rhs(t, state, reference_state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final, - reference_state=current_state) + state=make_obj_array([current_state, temperature_seed]), + t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = compute_dependent_vars(current_state) - final_dm, = compute_production_rates(current_state) + final_cv = current_state[0] + final_dv = compute_dependent_vars(final_cv) + final_dm, = compute_production_rates(final_cv) ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, - state=current_state) - my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, + state=final_cv) + my_write_viz(step=current_step, t=current_t, dt=dt, state=final_cv, dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) my_write_status(dt=dt, cfl=cfl, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=final_cv) if logmgr: logmgr.close() From cd175b9ded03cc30b979420c25adaacfd84df263 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 4 Nov 2021 13:59:46 -0500 Subject: [PATCH 315/873] Update isolator production driver to main branch --- .ci-support/production-drivers-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh index f04273d88..9b84b8ae4 100755 --- a/.ci-support/production-drivers-install.sh +++ b/.ci-support/production-drivers-install.sh @@ -12,7 +12,7 @@ # The default values result in an install of the Y1 nozzle driver and # Wyatt Hagen's isolator driver that work with current MIRGE-Com # production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} # Loop over the production drivers, clone them, and prepare for execution set -x OIFS="$IFS" From cf17ab41be2bfe82acc5c363fe65ef24d9c3563f Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 14:02:17 -0500 Subject: [PATCH 316/873] Update inviscid flux tests to new interface --- test/test_inviscid.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/test_inviscid.py b/test/test_inviscid.py index c97b37501..55c9f3033 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -120,7 +120,8 @@ def rand(): # }}} - flux = inviscid_flux(discr, eos, cv) + pressure = eos.pressure(cv) + flux = inviscid_flux(discr, pressure, cv) flux_resid = flux - expected_flux for i in range(numeq, dim): @@ -174,7 +175,7 @@ def test_inviscid_flux_components(actx_factory, dim): energy = p_exact / 0.4 + 0.5 * np.dot(mom, mom) / mass cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) - flux = inviscid_flux(discr, eos, cv) + flux = inviscid_flux(discr, p, cv) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) @@ -239,7 +240,7 @@ def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) assert inf_norm(p - p_exact) < tolerance - flux = inviscid_flux(discr, eos, cv) + flux = inviscid_flux(discr, p, cv) logger.info(f"{dim}d flux = {flux}") vel_exact = mom / mass From 6dce7bb438a47214bffe5645ebf9834542abb814 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 14:03:56 -0500 Subject: [PATCH 317/873] Switch to main branch for isolator production driver. --- .ci-support/production-drivers-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh index f04273d88..9b84b8ae4 100755 --- a/.ci-support/production-drivers-install.sh +++ b/.ci-support/production-drivers-install.sh @@ -12,7 +12,7 @@ # The default values result in an install of the Y1 nozzle driver and # Wyatt Hagen's isolator driver that work with current MIRGE-Com # production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@y2-production:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@nodal-reduction-device-scalar"} # Loop over the production drivers, clone them, and prepare for execution set -x OIFS="$IFS" From 49ecc9d19331560827bd95d525d8a68b96cfd821 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 16:43:27 -0500 Subject: [PATCH 318/873] Update NS to new inviscid flux interface. --- mirgecom/navierstokes.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 580a91666..24cd76f79 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -79,7 +79,8 @@ from meshmode.dof_array import thaw -def ns_operator(discr, eos, boundaries, cv, t=0.0): +def ns_operator(discr, eos, boundaries, cv, t=0.0, + dv=None): r"""Compute RHS of the Navier-Stokes equations. Returns @@ -116,6 +117,8 @@ def ns_operator(discr, eos, boundaries, cv, t=0.0): """ dim = discr.dim actx = cv.array_context + if dv is None: + dv = eos.dependent_vars(cv) def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, int_tpair, xrank_pairs, boundaries): @@ -154,7 +157,7 @@ def t_grad_flux_bnd(btag): return boundaries[btag].t_gradient_flux(discr, btag=btag, cv=cv, eos=eos, time=t) - gas_t = eos.temperature(cv) + gas_t = dv.temperature t_int_tpair = TracePair("int_faces", interior=eos.temperature(cv_int_tpair.int), exterior=eos.temperature(cv_int_tpair.ext)) @@ -208,7 +211,7 @@ def fvisc_divergence_flux_boundary(btag): vol_term = ( viscous_flux(discr, eos=eos, cv=cv, grad_cv=grad_cv, grad_t=grad_t) - - inviscid_flux(discr, eos=eos, cv=cv) + - inviscid_flux(discr, pressure=dv.pressure, cv=cv) ).join() bnd_term = ( From 60463c589ef8c48585e054cdc93748b072a233a9 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 19:40:18 -0500 Subject: [PATCH 319/873] Merge from downstream --- examples/autoignition-mpi.py | 124 +++++++++++++++++++++++------------ mirgecom/eos.py | 52 +++++++++++++-- mirgecom/euler.py | 12 ++-- mirgecom/inviscid.py | 29 ++++---- mirgecom/steppers.py | 2 +- mirgecom/thermochemistry.py | 34 ++++++++-- test/test_inviscid.py | 7 +- 7 files changed, 183 insertions(+), 77 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 6f0c179fa..85a49ea7b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -216,7 +216,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Initial temperature, pressure, and mixutre mole fractions are needed to # set up the initial state in Cantera. - init_temperature = 1500.0 # Initial temperature hot enough to burn + temperature_seed = 1500.0 # Initial temperature hot enough to burn # Parameters for calculating the amounts of fuel, oxidizer, and inert species equiv_ratio = 1.0 ox_di_ratio = 0.21 @@ -235,9 +235,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # one_atm = 101325.0 # Let the user know about how Cantera is being initilized - print(f"Input state (T,P,X) = ({init_temperature}, {one_atm}, {x}") + print(f"Input state (T,P,X) = ({temperature_seed}, {one_atm}, {x}") # Set Cantera internal gas temperature, pressure, and mole fractios - cantera_soln.TPX = init_temperature, one_atm, x + cantera_soln.TPX = temperature_seed, one_atm, x # Pull temperature, total density, mass fractions, and pressure from Cantera # We need total density, and mass fractions to initialize the fluid/gas state. can_t, can_rho, can_y = cantera_soln.TDY @@ -255,19 +255,19 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # states for this particular mechanism. from mirgecom.thermochemistry import make_pyrometheus_mechanism_class pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) - eos = PyrometheusMixture(pyro_mechanism, temperature_guess=init_temperature) + eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) from pytools.obj_array import make_obj_array - def get_temperature_mass_energy(state, temperature): + def get_temperature_update(state, temperature): y = state.species_mass_fractions e = eos.internal_energy(state) / state.mass return make_obj_array( - [pyro_mechanism.get_temperature(e, temperature, y)] + [pyro_mechanism.get_temperature_update_energy(e, temperature, y)] ) + compute_temperature_update = actx.compile(get_temperature_update) compute_dependent_vars = actx.compile(eos.dependent_vars) - compute_temperature = actx.compile(get_temperature_mass_energy) # }}} @@ -292,6 +292,7 @@ def get_temperature_mass_energy(state, temperature): logmgr_set_time(logmgr, current_step, current_t) if order == rst_order: current_state = restart_data["state"] + temperature_seed = restart_data["temperature"] else: rst_state = restart_data["state"] old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, @@ -300,15 +301,39 @@ def get_temperature_mass_energy(state, temperature): connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), old_discr.discr_from_dd("vol")) current_state = connection(rst_state) + temperature_seed = connection(restart_data["temperature"]) else: # Set the current state from time 0 current_state = initializer(eos=eos, x_vec=nodes) + # This bit memoizes the initial state's temperature onto the initial state + # (assuming `initializer` just above didn't call eos.dv funcs.) + # + # The temperature_seed going into this function is: + # - At time 0: the initial temperature input data (maybe from Cantera) + # - On restart: the restarted temperature read from restart file + # + # Note that this means we *seed* the temperature calculation with the actual + # temperature from the run. The resulting temperature may be different from the + # seed (error commensurate with convergence of running temperature), potentially + # meaning non-deterministic temperature restarts (i.e. one where the code gets a + # slightly different answer for temperature than it would have without the + # restart). In the absense of restart, the running temperature is that which was + # computed with a temperature_seed that equals the running temperature from the + # last step. + # Potentially, we could move the restart writing to trigger at post_step_callback + # and instead of writing the *current* running temperature to the restart file, + # we could write the *temperature_seed*. That could fix up the non-deterministic + # restart issue. + current_dv = compute_dependent_vars(current_state, + temperature_seed=temperature_seed) + temperature_seed = current_dv.temperature + + # import ipdb + # ipdb.set_trace() + # Inspection at physics debugging time if debug: - # Uncomment to enable debugger - # import ipdb - # ipdb.set_trace() print("Initial MIRGE-Com state:") print(f"{current_state=}") print(f"Initial DV pressure: {eos.pressure(current_state)}") @@ -342,19 +367,20 @@ def get_temperature_mass_energy(state, temperature): def my_write_status(dt, cfl, dv=None): status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" - # This is the DV status report when running lazily because - # logpyle chokes when the DV expression is complicated as it is - # when using Pyrometheus EOS. if ((dv is not None) and (not log_dependent)): temp = dv.temperature press = dv.pressure temp = thaw(freeze(temp, actx), actx) press = thaw(freeze(press, actx), actx) from grudge.op import nodal_min_loc, nodal_max_loc - tmin = allsync(nodal_min_loc(discr, "vol", temp), comm=comm, op=MPI.MIN) - tmax = allsync(nodal_max_loc(discr, "vol", temp), comm=comm, op=MPI.MAX) - pmin = allsync(nodal_min_loc(discr, "vol", press), comm=comm, op=MPI.MIN) - pmax = allsync(nodal_max_loc(discr, "vol", press), comm=comm, op=MPI.MAX) + tmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + comm=comm, op=MPI.MIN) + tmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + comm=comm, op=MPI.MAX) + pmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + comm=comm, op=MPI.MIN) + pmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + comm=comm, op=MPI.MAX) dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" status_msg = status_msg + dv_status_msg @@ -381,9 +407,11 @@ def my_write_restart(step, t, state): if rank == 0: logger.info("Skipping overwrite of restart file.") else: + rst_dv = compute_dependent_vars(state) rst_data = { "local_mesh": local_mesh, "state": state, + "temperature": rst_dv.temperature, "t": t, "step": step, "order": order, @@ -412,7 +440,6 @@ def my_health_check(cv, dv): if check_naninf_local(discr, "vol", temperature): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") - if check_range_local(discr, "vol", temperature, 1.498e3, 1.6e3): health_error = True logger.info(f"{rank=}: Temperature range violation.") @@ -428,11 +455,10 @@ def my_health_check(cv, dv): # convergence in Pyrometheus `get_temperature`. # Note: The local max jig below works around a very long compile # in lazy mode. - check_temp, = compute_temperature(cv, temperature) - check_temp = thaw(freeze(check_temp, actx), actx) - temp_resid = actx.np.abs(check_temp - temperature) - temp_resid = op.nodal_max_loc(discr, "vol", temp_resid) - if temp_resid > 1e-12: + temp_update, = compute_temperature_update(cv, temperature) + temp_resid = thaw(freeze(temp_update, actx), actx) / temperature + temp_resid = (actx.to_numpy(op.nodal_max_loc(discr, "vol", temp_resid))) + if temp_resid > 1e-8: health_error = True logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") @@ -474,10 +500,10 @@ def my_get_timestep(t, dt, state): from grudge.op import nodal_max_loc cfl = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", ts_field)), comm=comm, op=MPI.MAX) - return ts_field, cfl, min(t_remaining, dt) def my_pre_step(step, t, dt, state): + cv = state[0] try: dv = None @@ -492,28 +518,28 @@ def my_pre_step(step, t, dt, state): if do_health: if dv is None: - dv = compute_dependent_vars(state) - health_errors = global_reduce(my_health_check(state, dv), op="lor") + dv = compute_dependent_vars(cv) + health_errors = global_reduce(my_health_check(cv, dv), op="lor") if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) + ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=cv) if do_status: if dv is None: - dv = compute_dependent_vars(state) + dv = compute_dependent_vars(cv) my_write_status(dt=dt, cfl=cfl, dv=dv) if do_restart: - my_write_restart(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=cv) if do_viz: - production_rates, = compute_production_rates(state) + production_rates, = compute_production_rates(cv) if dv is None: - dv = compute_dependent_vars(state) - my_write_viz(step=step, t=t, dt=dt, state=state, dv=dv, + dv = compute_dependent_vars(cv) + my_write_viz(step=step, t=t, dt=dt, state=cv, dv=dv, production_rates=production_rates, ts_field=ts_field, cfl=cfl) @@ -527,18 +553,28 @@ def my_pre_step(step, t, dt, state): return state, dt def my_post_step(step, t, dt, state): + cv = state[0] + new_dv = compute_dependent_vars(cv, # noqa + temperature_seed=state[1]) + # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) + set_sim_state(logmgr, dim, cv, eos) logmgr.tick_after() - return state, dt + return make_obj_array([cv, new_dv.temperature]), dt def my_rhs(t, state): - return (euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) - + eos.get_species_source_terms(state)) + cv = state[0] + current_dv = eos.dependent_vars(cv, + temperature_seed=state[1]) + + return make_obj_array([euler_operator(discr, cv=cv, time=t, + boundaries=boundaries, eos=eos, + dv=current_dv) + + eos.get_species_source_terms(cv), + 0*state[1]]) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, eos, t_final, constant_cfl) @@ -547,20 +583,22 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=make_obj_array([current_state, temperature_seed]), + t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = compute_dependent_vars(current_state) - final_dm, = compute_production_rates(current_state) + final_cv = current_state[0] + final_dv = compute_dependent_vars(final_cv) + final_dm, = compute_production_rates(final_cv) ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, - state=current_state) - my_write_viz(step=current_step, t=current_t, dt=dt, state=current_state, + state=final_cv) + my_write_viz(step=current_step, t=current_t, dt=dt, state=final_cv, dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) my_write_status(dt=dt, cfl=cfl, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=final_cv) if logmgr: logmgr.close() diff --git a/mirgecom/eos.py b/mirgecom/eos.py index bd18333cf..f189383b3 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -41,6 +41,7 @@ import numpy as np from pytools import memoize_in from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.dof_array import DOFArray from mirgecom.fluid import ConservedVars, make_conserved from abc import ABCMeta, abstractmethod from arraycontext import dataclass_array_container @@ -90,7 +91,8 @@ def pressure(self, cv: ConservedVars): """Get the gas pressure.""" @abstractmethod - def temperature(self, cv: ConservedVars): + def temperature(self, cv: ConservedVars, + reference_state: ConservedVars = None): """Get the gas temperature.""" @abstractmethod @@ -133,11 +135,12 @@ def transport_model(self): def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" - def dependent_vars(self, cv: ConservedVars) -> EOSDependentVars: + def dependent_vars(self, cv: ConservedVars, + temperature_seed: DOFArray = None) -> EOSDependentVars: """Get an agglomerated array of the dependent variables.""" return EOSDependentVars( + temperature=self.temperature(cv, temperature_seed), pressure=self.pressure(cv), - temperature=self.temperature(cv), ) @@ -152,8 +155,14 @@ class MixtureEOS(GasEOS): .. automethod:: get_production_rates .. automethod:: species_enthalpies .. automethod:: get_species_source_terms + .. automethod:: get_temperature_seed """ + @abstractmethod + def get_temperature_seed(self, cv: ConservedVars, + temperature_seed: DOFArray = None): + r"""Get a constant and uniform guess for the gas temperature.""" + @abstractmethod def get_density(self, pressure, temperature, species_mass_fractions): """Get the density from pressure, temperature, and species fractions (Y).""" @@ -332,7 +341,7 @@ def sound_speed(self, cv: ConservedVars): actx = cv.array_context return actx.np.sqrt(self._gamma / cv.mass * self.pressure(cv)) - def temperature(self, cv: ConservedVars): + def temperature(self, cv: ConservedVars, temperature_seed: DOFArray = None): r"""Get the thermodynamic temperature of the gas. The thermodynamic temperature (T) is calculated from @@ -349,6 +358,9 @@ def temperature(self, cv: ConservedVars): :class:`~mirgecom.fluid.ConservedVars` containing at least the mass ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$). + temperature_seed: float or :class:`~meshmode.dof_array.DOFArray` + Ignored for this EOS. + Returns ------- :class:`~meshmode.dof_array.DOFArray` @@ -450,6 +462,7 @@ class PyrometheusMixture(MixtureEOS): .. automethod:: get_production_rates .. automethod:: species_enthalpies .. automethod:: get_species_source_terms + .. automethod:: get_temperature_seed """ def __init__(self, pyrometheus_mech, temperature_guess=300.0, @@ -479,6 +492,28 @@ def __init__(self, pyrometheus_mech, temperature_guess=300.0, self._tguess = temperature_guess self._transport_model = transport_model + def get_temperature_seed(self, cv, temperature_seed=None): + """Get a *cv*-shape-consistent array with which to seed temperature calcuation. + + Parameters + ---------- + cv: :class:`~mirgecom.fluid.ConservedVars` + :class:`~mirgecom.fluid.ConservedVars` used to conjure the required shape + for the returned temperature guess. + temperature_seed: float or :class:`~meshmode.dof_array.DOFArray` + Optional data from which to seed temperature calculation. + + Returns + ------- + :class:`~meshmode.dof_array.DOFArray` + The temperature with which to seed the Newton solver in + :module:thermochemistry. + """ + tseed = self._tguess + if temperature_seed is not None: + tseed = temperature_seed + return tseed if isinstance(tseed, DOFArray) else tseed * (0*cv.mass + 1.0) + def transport_model(self): """Get the transport model object for this EOS.""" return self._transport_model @@ -723,7 +758,7 @@ def get_sos(): return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) return get_sos() - def temperature(self, cv: ConservedVars): + def temperature(self, cv: ConservedVars, temperature_seed=None): r"""Get the thermodynamic temperature of the gas. The thermodynamic temperature ($T$) is calculated from @@ -740,6 +775,8 @@ def temperature(self, cv: ConservedVars): :class:`~mirgecom.fluid.ConservedVars` containing at least the mass ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$), and the vector of species masses, ($\rho{Y}_\alpha$). + temperature_seed: float or :class:`~meshmode.dof_array.DOFArray` + Optional data from which to seed temperature calculation. Returns ------- @@ -751,10 +788,11 @@ def temperature(self, cv: ConservedVars): @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): - tguess = self._tguess + 0*cv.mass + tseed = self.get_temperature_seed(cv, temperature_seed) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass - return self._pyrometheus_mech.get_temperature(e, tguess, y) + return self._pyrometheus_mech.get_temperature(e, tseed, y) + return get_temp() def total_energy(self, cv, pressure): diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 26886c259..aaf07e7d9 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -66,7 +66,8 @@ from mirgecom.operators import div_operator -def euler_operator(discr, eos, boundaries, cv, time=0.0): +def euler_operator(discr, eos, boundaries, cv, time=0.0, + dv=None): r"""Compute RHS of the Euler flow equations. Returns @@ -100,7 +101,10 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ - inviscid_flux_vol = inviscid_flux(discr, eos, cv) + if dv is None: + dv = eos.dependent_vars(cv) + + inviscid_flux_vol = inviscid_flux(discr, dv.pressure, cv) inviscid_flux_bnd = ( inviscid_facial_flux(discr, eos=eos, cv_tpair=interior_trace_pair(discr, cv)) + sum(inviscid_facial_flux( @@ -108,8 +112,8 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): part_tpair.dd, interior=make_conserved(discr.dim, q=part_tpair.int), exterior=make_conserved(discr.dim, q=part_tpair.ext))) for part_tpair in cross_rank_trace_pairs(discr, cv.join())) - + sum(boundaries[btag].inviscid_boundary_flux(discr, btag=btag, cv=cv, - eos=eos, time=time) + + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, + eos=eos, time=time) for btag in boundaries) ) q = -div_operator(discr, inviscid_flux_vol.join(), inviscid_flux_bnd.join()) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index c04eaf578..dedf3f6f8 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -45,7 +45,7 @@ from mirgecom.fluid import make_conserved -def inviscid_flux(discr, eos, cv): +def inviscid_flux(discr, pressure, cv): r"""Compute the inviscid flux vectors from fluid conserved vars *cv*. The inviscid fluxes are @@ -59,16 +59,16 @@ def inviscid_flux(discr, eos, cv): :class:`mirgecom.fluid.ConservedVars` for more information about how the fluxes are represented. """ - dim = cv.dim - p = eos.pressure(cv) - - mom = cv.momentum - - return make_conserved( - dim, mass=mom, energy=mom * (cv.energy + p) / cv.mass, - momentum=np.outer(mom, mom) / cv.mass + np.eye(dim)*p, - species_mass=( # reshaped: (nspecies, dim) - (mom / cv.mass) * cv.species_mass.reshape(-1, 1))) + mass_flux = cv.momentum + energy_flux = cv.velocity * (cv.energy + pressure) + mom_flux = ( + cv.mass * np.outer(cv.velocity, cv.velocity) + np.eye(cv.dim)*pressure + ) + species_mass_flux = ( # reshaped: (nspeceis, dim) + cv.velocity * cv.species_mass.reshape(-1, 1) + ) + return make_conserved(cv.dim, mass=mass_flux, energy=energy_flux, + momentum=mom_flux, species_mass=species_mass_flux) def inviscid_facial_flux(discr, eos, cv_tpair, local=False): @@ -104,10 +104,11 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): "all_faces"; remaining instead on the boundary restriction. """ actx = cv_tpair.int.array_context - + p_int = eos.pressure(cv_tpair.int) + p_ext = eos.pressure(cv_tpair.ext) flux_tpair = TracePair(cv_tpair.dd, - interior=inviscid_flux(discr, eos, cv_tpair.int), - exterior=inviscid_flux(discr, eos, cv_tpair.ext)) + interior=inviscid_flux(discr, p_int, cv_tpair.int), + exterior=inviscid_flux(discr, p_ext, cv_tpair.ext)) # This calculates the local maximum eigenvalue of the flux Jacobian # for a single component gas, i.e. the element-local max wavespeed |v| + c. diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index a8f129487..da921c873 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -359,7 +359,7 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - istep=istep, logmgr=logmgr, eos=eos, dim=dim, + istep=istep, logmgr=logmgr, eos=eos, dim=dim ) return current_step, current_t, current_state diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index d7ee128ae..081cc28a7 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,6 +1,7 @@ r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. .. autofunction:: make_pyrometheus_mechanism_class +.. autofunction:: make_pyrometheus_mechanism """ __copyright__ = """ @@ -66,7 +67,7 @@ def get_concentrations(self, rho, mass_fractions): return concs # This is the temperature update for *get_temperature* - def _get_temperature_update_energy(self, e_in, t_in, y): + def get_temperature_update_energy(self, e_in, t_in, y): pv_func = self.get_mixture_specific_heat_cv_mass he_func = self.get_mixture_internal_energy_mass return (e_in - he_func(t_in, y)) / pv_func(t_in, y) @@ -96,9 +97,9 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): The mixture temperature after a fixed number of Newton iterations. """ num_iter = temperature_niter - t_i = 1.0*temperature_guess + t_i = temperature_guess for _ in range(num_iter): - t_i = t_i + self._get_temperature_update_energy( + t_i = t_i + self.get_temperature_update_energy( energy, t_i, species_mass_fractions ) return t_i @@ -106,7 +107,7 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): return PyroWrapper -def make_pyrometheus_mechanism_class(cantera_soln): +def make_pyrometheus_mechanism_class(cantera_soln, temperature_niter=5): """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism class. This routine creates and returns an instance of a :mod:`pyrometheus` @@ -124,4 +125,27 @@ def make_pyrometheus_mechanism_class(cantera_soln): ------- :mod:`pyrometheus` ThermoChem class """ - return _pyro_thermochem_wrapper_class(cantera_soln) + return _pyro_thermochem_wrapper_class(cantera_soln, temperature_niter) + + +def make_pyrometheus_mechanism(actx, cantera_soln): + """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism. + + This routine creates and returns an instance of a :mod:`pyrometheus` + thermochemical mechanism for use in a MIRGE-Com fluid EOS. + + Parameters + ---------- + actx: :class:`arraycontext.ArrayContext` + Array context from which to get the numpy-like namespace for + :mod:`pyrometheus` + cantera_soln: + Cantera Solution for the thermochemical mechanism to be used + + Returns + ------- + :mod:`pyrometheus` ThermoChem class + """ + from warnings import warn + warn("make_pyrometheus_mechanism is deprecated and will disappear in Q1/2022") + return _pyro_thermochem_wrapper_class(cantera_soln)(actx.np) diff --git a/test/test_inviscid.py b/test/test_inviscid.py index c97b37501..55c9f3033 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -120,7 +120,8 @@ def rand(): # }}} - flux = inviscid_flux(discr, eos, cv) + pressure = eos.pressure(cv) + flux = inviscid_flux(discr, pressure, cv) flux_resid = flux - expected_flux for i in range(numeq, dim): @@ -174,7 +175,7 @@ def test_inviscid_flux_components(actx_factory, dim): energy = p_exact / 0.4 + 0.5 * np.dot(mom, mom) / mass cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) - flux = inviscid_flux(discr, eos, cv) + flux = inviscid_flux(discr, p, cv) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) @@ -239,7 +240,7 @@ def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) assert inf_norm(p - p_exact) < tolerance - flux = inviscid_flux(discr, eos, cv) + flux = inviscid_flux(discr, p, cv) logger.info(f"{dim}d flux = {flux}") vel_exact = mom / mass From e06aafb54777f2370e693dec5aea6130cd08029b Mon Sep 17 00:00:00 2001 From: CI Runner Date: Thu, 4 Nov 2021 20:18:17 -0500 Subject: [PATCH 320/873] Correct interface error --- mirgecom/eos.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index f189383b3..75a295ad3 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -92,7 +92,7 @@ def pressure(self, cv: ConservedVars): @abstractmethod def temperature(self, cv: ConservedVars, - reference_state: ConservedVars = None): + temperature_seed: DOFArray = None): """Get the gas temperature.""" @abstractmethod From bda26ab4905fa0c6bb11b837fd85e0ba2db3fed3 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Fri, 5 Nov 2021 11:58:02 -0500 Subject: [PATCH 321/873] Customize production env to be *this* branch. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..043ac724b 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From acfa67a99bb3577d0edb76009587bcbe2188a4ba Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:47:28 -0500 Subject: [PATCH 322/873] Simplify and update interface, move some projections outside --- mirgecom/boundary.py | 181 +++++++++++++++++-------------------------- 1 file changed, 70 insertions(+), 111 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index a4088fa2a..12d0456e7 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -4,12 +4,11 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass FluidBoundary -.. autoclass FluidBC Inviscid Boundary Conditions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. autoclass:: PrescribedInviscidBoundary +.. autoclass:: PrescribedFluidBoundary .. autoclass:: DummyBoundary .. autoclass:: AdiabaticSlipBoundary """ @@ -43,7 +42,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair -from mirgecom.inviscid import inviscid_facial_flux +from mirgecom.inviscid import inviscid_facial_divergence_flux from abc import ABCMeta, abstractmethod @@ -55,119 +54,83 @@ class FluidBoundary(metaclass=ABCMeta): """ @abstractmethod - def inviscid_divergence_flux(self, discr, btag, cv, eos, **kwargs): + def inviscid_divergence_flux(self, discr, btag, eos, cv_minus, dv_minus, + **kwargs): """Get the inviscid boundary flux for the divergence operator.""" -class FluidBC(FluidBoundary): - r"""Abstract interface to boundary conditions. - - .. automethod:: inviscid_divergence_flux - .. automethod:: boundary_pair - """ - - @abstractmethod - def inviscid_divergence_flux(self, discr, btag, cv, eos, **kwargs): - """Get the inviscid boundary flux for the divergence operator.""" - - @abstractmethod - def boundary_pair(self, discr, btag, cv, eos, **kwargs): - """Get the interior and exterior solution (*u*) on the boundary.""" - - -class PrescribedInviscidBoundary(FluidBC): +class PrescribedFluidBoundary(FluidBoundary): r"""Abstract interface to a prescribed fluid boundary treatment. .. automethod:: __init__ - .. automethod:: boundary_pair .. automethod:: inviscid_divergence_flux """ - def __init__(self, inviscid_divergence_flux_func=None, boundary_pair_func=None, - inviscid_facial_flux_func=None, fluid_solution_func=None, - fluid_solution_flux_func=None): - """Initialize the PrescribedInviscidBoundary and methods.""" - self._bnd_pair_func = boundary_pair_func - self._inviscid_bnd_flux_func = inviscid_divergence_flux_func - self._inviscid_facial_flux_func = inviscid_facial_flux_func - if not self._inviscid_facial_flux_func: - self._inviscid_facial_flux_func = inviscid_facial_flux - self._fluid_soln_func = fluid_solution_func - self._fluid_soln_flux_func = fluid_solution_flux_func - - def boundary_pair(self, discr, btag, cv, **kwargs): - """Get the interior and exterior solution on the boundary.""" - if self._bnd_pair_func: - return self._bnd_pair_func(discr, cv=cv, btag=btag, **kwargs) - if not self._fluid_soln_func: - raise NotImplementedError() - actx = cv.array_context - boundary_discr = discr.discr_from_dd(btag) - nodes = thaw(actx, boundary_discr.nodes()) - nhat = thaw(actx, discr.normal(btag)) - int_soln = discr.project("vol", btag, cv) - ext_soln = self._fluid_soln_func(nodes, cv=int_soln, normal=nhat, **kwargs) - return TracePair(btag, interior=int_soln, exterior=ext_soln) - - def inviscid_divergence_flux(self, discr, btag, cv, eos, **kwargs): + def __init__(self, + # returns the flux to be used in div op (prescribed flux) + inviscid_boundary_flux_func=None, + # returns CV+, to be used in num flux func (prescribe soln) + boundary_cv_func=None, + # returns the DV+, to be used with CV+ + boundary_dv_func=None, + # Numerical flux func given CV(+/-) + inviscid_facial_flux_func=None): + """Initialize the PrescribedFluidBoundary and methods.""" + self._bnd_cv_func = boundary_cv_func + self._bnd_dv_func = boundary_dv_func + self._inviscid_bnd_flux_func = inviscid_boundary_flux_func + self._inviscid_div_flux_func = inviscid_facial_flux_func + + if not self._inviscid_bnd_flux_func and not self._bnd_cv_func: + from warnings import warn + warn("Using dummy boundary: copies interior solution.", stacklevel=2) + + if not self._inviscid_div_flux_func: + self._inviscid_div_flux_func = inviscid_facial_divergence_flux + if not self._bnd_cv_func: + self._bnd_cv_func = self._cv_func + if not self._bnd_dv_func: + self._bnd_dv_func = self._dv_func + + def _cv_func(self, discr, btag, eos, cv_minus, dv_minus): + return cv_minus + + def _dv_func(self, discr, btag, eos, cv_pair, dv_minus): + return eos.dependent_vars(cv_pair.ext, dv_minus.temperature) + + def inviscid_divergence_flux(self, discr, btag, eos, cv_minus, dv_minus, + **kwargs): """Get the inviscid boundary flux for the divergence operator.""" + # This one is when the user specified a function that directly + # prescribes the flux components at the boundary if self._inviscid_bnd_flux_func: - actx = cv.array_context - boundary_discr = discr.discr_from_dd(btag) - nodes = thaw(actx, boundary_discr.nodes()) - nhat = thaw(actx, discr.normal(btag)) - int_soln = discr.project("vol", btag, cv) - return self._inviscid_bnd_flux_func(nodes, normal=nhat, - cv=int_soln, eos=eos, **kwargs) - bnd_tpair = self.boundary_pair(discr, btag=btag, cv=cv, eos=eos, **kwargs) - return self._inviscid_facial_flux_func(discr, eos=eos, cv_tpair=bnd_tpair) - - -class PrescribedBoundary(PrescribedInviscidBoundary): - """Boundary condition prescribes boundary soln with user-specified function. - - .. automethod:: __init__ - """ - - def __init__(self, userfunc): - """Set the boundary function. - - Parameters - ---------- - userfunc - User function that prescribes the solution values on the exterior - of the boundary. The given user function (*userfunc*) must take at - least one parameter that specifies the coordinates at which to prescribe - the solution. - """ - from warnings import warn - warn("Do not use PrescribedBoundary; use PrescribedInvscidBoundary. This" - "boundary type will vanish by August 2021.", DeprecationWarning, - stacklevel=2) - PrescribedInviscidBoundary.__init__(self, fluid_solution_func=userfunc) + return self._inviscid_bnd_flux_func(discr, btag, eos, cv_minus, + dv_minus, **kwargs) + + # Otherwise, fall through to here, where the user specified instead + # a function that provides CV+ and DV+. + cv_pair = TracePair( + btag, interior=cv_minus, + exterior=self._bnd_cv_func(discr, btag, eos, cv_minus, dv_minus) + ) + dv_pair = TracePair( + btag, interior=dv_minus, + exterior=self._bnd_dv_func(discr, btag, eos, cv_pair, dv_minus) + ) + return self._inviscid_div_flux_func(discr, cv_tpair=cv_pair, + dv_tpair=dv_pair) -class DummyBoundary(PrescribedInviscidBoundary): - """Boundary condition that assigns boundary-adjacent soln as the boundary solution. - .. automethod:: dummy_pair - """ +class DummyBoundary(PrescribedFluidBoundary): + """Boundary type that assigns boundary-adjacent soln as the boundary solution.""" def __init__(self): """Initialize the DummyBoundary boundary type.""" - PrescribedInviscidBoundary.__init__(self, boundary_pair_func=self.dummy_pair) + PrescribedFluidBoundary.__init__(self) - def dummy_pair(self, discr, cv, btag, **kwargs): - """Get the interior and exterior solution on the boundary.""" - dir_soln = self.exterior_q(discr, cv, btag, **kwargs) - return TracePair(btag, interior=dir_soln, exterior=dir_soln) - def exterior_q(self, discr, cv, btag, **kwargs): - """Get the exterior solution on the boundary.""" - return discr.project("vol", btag, cv) - - -class AdiabaticSlipBoundary(PrescribedInviscidBoundary): +class AdiabaticSlipBoundary(PrescribedFluidBoundary): r"""Boundary condition implementing inviscid slip boundary. a.k.a. Reflective inviscid wall boundary @@ -182,17 +145,17 @@ class AdiabaticSlipBoundary(PrescribedInviscidBoundary): [Hesthaven_2008]_, Section 6.6, and correspond to the characteristic boundary conditions described in detail in [Poinsot_1992]_. - .. automethod:: adiabatic_slip_pair + .. automethod:: adiabatic_slip_cv """ def __init__(self): """Initialize AdiabaticSlipBoundary.""" - PrescribedInviscidBoundary.__init__( - self, boundary_pair_func=self.adiabatic_slip_pair + PrescribedFluidBoundary.__init__( + self, boundary_cv_func=self.adiabatic_slip_cv ) - def adiabatic_slip_pair(self, discr, cv, btag, **kwargs): - """Get the interior and exterior solution on the boundary. + def adiabatic_slip_cv(self, discr, btag, eos, cv_minus, dv_minus, **kwargs): + """Get the exterior solution on the boundary. The exterior solution is set such that there will be vanishing flux through the boundary, preserving mass, momentum (magnitude) and @@ -204,23 +167,19 @@ def adiabatic_slip_pair(self, discr, cv, btag, **kwargs): """ # Grab some boundary-relevant data dim = discr.dim - actx = cv.mass.array_context + actx = cv_minus.mass.array_context # Grab a unit normal to the boundary nhat = thaw(actx, discr.normal(btag)) - # Get the interior/exterior solns - int_cv = discr.project("vol", btag, cv) - # Subtract out the 2*wall-normal component # of velocity from the velocity at the wall to # induce an equal but opposite wall-normal (reflected) wave # preserving the tangential component - mom_normcomp = np.dot(int_cv.momentum, nhat) # wall-normal component + mom_normcomp = np.dot(cv_minus.momentum, nhat) # wall-normal component wnorm_mom = nhat * mom_normcomp # wall-normal mom vec - ext_mom = int_cv.momentum - 2.0 * wnorm_mom # prescribed ext momentum + ext_mom = cv_minus.momentum - 2.0 * wnorm_mom # prescribed ext momentum # Form the external boundary solution with the new momentum - ext_cv = make_conserved(dim=dim, mass=int_cv.mass, energy=int_cv.energy, - momentum=ext_mom, species_mass=int_cv.species_mass) - return TracePair(btag, interior=int_cv, exterior=ext_cv) + return make_conserved(dim=dim, mass=cv_minus.mass, energy=cv_minus.energy, + momentum=ext_mom, species_mass=cv_minus.species_mass) From 58ec24b18f14b1c1e70bec0fddc4abbd86af6938 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:48:18 -0500 Subject: [PATCH 323/873] Add SOS to EOS DV --- mirgecom/eos.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index f189383b3..133a274b6 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -61,6 +61,7 @@ class EOSDependentVars: temperature: np.ndarray pressure: np.ndarray + speed_of_sound: np.ndarray class GasEOS(metaclass=ABCMeta): @@ -141,6 +142,7 @@ def dependent_vars(self, cv: ConservedVars, return EOSDependentVars( temperature=self.temperature(cv, temperature_seed), pressure=self.pressure(cv), + speed_of_sound=self.sound_speed(cv) ) From 8e8c97c2b4aa8acfaab7897415de943d23a15589 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:50:14 -0500 Subject: [PATCH 324/873] Add temperature seeding for mixtures --- mirgecom/euler.py | 97 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 20 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index aaf07e7d9..45bed8149 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -55,7 +55,7 @@ import numpy as np # noqa from mirgecom.inviscid import ( inviscid_flux, - inviscid_facial_flux + inviscid_facial_divergence_flux ) from grudge.eager import ( interior_trace_pair, @@ -66,6 +66,29 @@ from mirgecom.operators import div_operator +def _inviscid_facial_divergence_flux(discr, eos, cv_pairs, temperature_pairs): + return sum( + inviscid_facial_divergence_flux( + discr, cv_tpair=cv_pair, + dv_tpair=TracePair( + cv_pair.dd, + interior=eos.dependent_vars(cv_pair.int, temp_pair.int), + exterior=eos.dependent_vars(cv_pair.ext, temp_pair.ext))) + for cv_pair, temp_pair in zip(cv_pairs, temperature_pairs)) + + +def _get_dv_pair(discr, eos, cv_pair, temperature_pair=None): + if temperature_pair is not None: + return TracePair( + cv_pair.dd, + interior=eos.dependent_vars(cv_pair.int, temperature_pair.int), + exterior=eos.dependent_vars(cv_pair.ext, temperature_pair.ext) + ) + return TracePair(cv_pair.dd, + interior=eos.dependent_vars(cv_pair.int), + exterior=eos.depdndent_vars(cv_pair.ext)) + + def euler_operator(discr, eos, boundaries, cv, time=0.0, dv=None): r"""Compute RHS of the Euler flow equations. @@ -101,33 +124,67 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ + dim = discr.dim if dv is None: dv = eos.dependent_vars(cv) inviscid_flux_vol = inviscid_flux(discr, dv.pressure, cv) - inviscid_flux_bnd = ( - inviscid_facial_flux(discr, eos=eos, cv_tpair=interior_trace_pair(discr, cv)) - + sum(inviscid_facial_flux( - discr, eos=eos, cv_tpair=TracePair( - part_tpair.dd, interior=make_conserved(discr.dim, q=part_tpair.int), - exterior=make_conserved(discr.dim, q=part_tpair.ext))) - for part_tpair in cross_rank_trace_pairs(discr, cv.join())) - + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, - eos=eos, time=time) - for btag in boundaries) - ) + + cv_comm_pairs = cross_rank_trace_pairs(discr, cv.join()) + cv_part_pairs = [ + TracePair(q_pair.dd, + interior=make_conserved(dim, q=q_pair.int), + exterior=make_conserved(dim, q=q_pair.ext)) + for q_pair in cv_comm_pairs] + cv_int_pair = interior_trace_pair(discr, cv) + + flux_pb = 0 + flux_ib = 0 + flux_db = 0 + if cv.nspecies > 0: + # If this is a mixture, we need to exchange the temperature field because + # mixture pressure (used in the inviscid flux calculations) depends on + # temperature and we need to seed the temperature calculation for the + # (+) part of the partition boundary with the remote temperature data. + temp_part_pairs = cross_rank_trace_pairs(discr, dv.temperature) + flux_pb = _inviscid_facial_divergence_flux(discr, eos, cv_part_pairs, + temp_part_pairs) + + temp_int_pair = interior_trace_pair(discr, dv.temperature) + dv_int_pair = _get_dv_pair(discr, eos, cv_int_pair, temp_int_pair) + flux_ib = inviscid_facial_divergence_flux(discr, cv_int_pair, dv_int_pair) + # Domain boundaries + for btag in boundaries: + bnd = boundaries[btag] + cv_minus = discr.project("vol", btag, cv) + temp_seed = discr.project("vol", btag, dv.temperature) + dv_minus = eos.dependent_vars(cv_minus, temp_seed) + flux_db = ( + flux_db + bnd.inviscid_divergence_flux( + discr, btag, eos, cv_minus, dv_minus, time=time) + ) + else: + for cv_pair in cv_part_pairs: + dv_pair = _get_dv_pair(discr, eos, cv_pair) + flux_pb = (flux_pb + + inviscid_facial_divergence_flux(discr, cv_tpair=cv_pair, + dv_tpair=dv_pair)) + + dv_pair = _get_dv_pair(discr, eos, cv_int_pair) + flux_ib = inviscid_facial_divergence_flux(discr, cv_tpair=cv_int_pair, + dv_tpair=dv_pair) + flux_db = sum( + boundaries[btag].inviscid_divergence_flux( + discr, btag, eos, cv_minus=discr.project("vol", btag, cv), + dv_minus=discr.project("vol", btag, dv), time=time) + for btag in boundaries + ) + + inviscid_flux_bnd = flux_ib + flux_db + flux_pb q = -div_operator(discr, inviscid_flux_vol.join(), inviscid_flux_bnd.join()) return make_conserved(discr.dim, q=q) -def inviscid_operator(discr, eos, boundaries, q, t=0.0): - """Interface :function:`euler_operator` with backwards-compatible API.""" - from warnings import warn - warn("Do not call inviscid_operator; it is now called euler_operator. This" - "function will disappear August 1, 2021", DeprecationWarning, stacklevel=2) - return euler_operator(discr, eos, boundaries, make_conserved(discr.dim, q=q), t) - - # By default, run unitless NAME_TO_UNITS = { "mass": "", From 4fa88f3f38d1d85d1c3f8ebfaa4aa105fe5e58d7 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:51:11 -0500 Subject: [PATCH 325/873] Add speed property to CV, use propery interfaces. --- mirgecom/fluid.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 9399df7db..d3d229424 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -243,6 +243,11 @@ def velocity(self): """Return the fluid velocity = momentum / mass.""" return self.momentum / self.mass + @property + def speed(self): + """Return the fluid velocity = momentum / mass.""" + return self.mass.array_context.np.sqrt(np.dot(self.velocity, self.velocity)) + @property def nspecies(self): """Return the number of mixture species.""" @@ -431,7 +436,7 @@ def species_mass_fraction_gradient(discr, cv, grad_cv): object array of :class:`~meshmode.dof_array.DOFArray` representing $\partial_j{Y}_{\alpha}$. """ - y = cv.species_mass / cv.mass + y = cv.species_mass_fractions return (grad_cv.species_mass - np.outer(y, grad_cv.mass))/cv.mass @@ -446,6 +451,4 @@ def compute_wavespeed(eos, cv: ConservedVars): where $\mathbf{v}$ is the flow velocity and c is the speed of sound in the fluid. """ - actx = cv.array_context - v = cv.velocity - return actx.np.sqrt(np.dot(v, v)) + eos.sound_speed(cv) + return cv.speed + eos.sound_speed(cv) From 357573674d0b036dcb82ae18d29132001f69c3b2 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:52:49 -0500 Subject: [PATCH 326/873] Evict EOS from flux calcs --- mirgecom/inviscid.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index dedf3f6f8..a4eb0e025 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -4,7 +4,7 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: inviscid_flux -.. autofunction:: inviscid_facial_flux +.. autofunction:: inviscid_facial_divergence_flux Inviscid Time Step Computation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -39,7 +39,6 @@ import numpy as np from meshmode.dof_array import thaw -from mirgecom.fluid import compute_wavespeed from grudge.trace_pair import TracePair from mirgecom.flux import divergence_flux_lfr from mirgecom.fluid import make_conserved @@ -71,7 +70,7 @@ def inviscid_flux(discr, pressure, cv): momentum=mom_flux, species_mass=species_mass_flux) -def inviscid_facial_flux(discr, eos, cv_tpair, local=False): +def inviscid_facial_divergence_flux(discr, cv_tpair, dv_tpair, local=False): r"""Return the flux across a face given the solution on both sides *q_tpair*. This flux is currently hard-coded to use a Rusanov-type local Lax-Friedrichs @@ -90,12 +89,13 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): Parameters ---------- - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. + cv_tpair: :class:`grudge.trace_pair.TracePair` + Trace pair of :class:`mirgecom.fluid.ConservedVars` for the face upon + which the flux calculation is to be performed - q_tpair: :class:`grudge.trace_pair.TracePair` - Trace pair for the face upon which flux calculation is to be performed + dv_tpair: :class:`grudge.trace_pair.TracePair` + Trace pair of :class:`mirgecom.eos.EOSDependentVars` for the face upon + which the flux calculation is to be performed local: bool Indicates whether to skip projection of fluxes to "all_faces" or not. If @@ -104,18 +104,16 @@ def inviscid_facial_flux(discr, eos, cv_tpair, local=False): "all_faces"; remaining instead on the boundary restriction. """ actx = cv_tpair.int.array_context - p_int = eos.pressure(cv_tpair.int) - p_ext = eos.pressure(cv_tpair.ext) flux_tpair = TracePair(cv_tpair.dd, - interior=inviscid_flux(discr, p_int, cv_tpair.int), - exterior=inviscid_flux(discr, p_ext, cv_tpair.ext)) + interior=inviscid_flux(discr, dv_tpair.int.pressure, + cv_tpair.int), + exterior=inviscid_flux(discr, dv_tpair.ext.pressure, + cv_tpair.ext)) # This calculates the local maximum eigenvalue of the flux Jacobian # for a single component gas, i.e. the element-local max wavespeed |v| + c. - lam = actx.np.maximum( - compute_wavespeed(eos=eos, cv=cv_tpair.int), - compute_wavespeed(eos=eos, cv=cv_tpair.ext) - ) + lam = actx.np.maximum(dv_tpair.int.speed_of_sound + cv_tpair.int.speed, + dv_tpair.ext.speed_of_sound + cv_tpair.ext.speed) normal = thaw(actx, discr.normal(cv_tpair.dd)) From 5a24650699bddc2976bd70c29c984caa74bc44a4 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:53:40 -0500 Subject: [PATCH 327/873] Update tests to reflect new euler/inviscid interfaces. --- test/test_bc.py | 27 ++++++++++++++++------- test/test_euler.py | 50 ++++++++++++++++++++++++++++++++++--------- test/test_inviscid.py | 22 +++++++++++++------ 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/test/test_bc.py b/test/test_bc.py index 133edc95e..e6bc5a2a2 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -37,6 +37,7 @@ from grudge.eager import ( EagerDGDiscretization, ) +from grudge.trace_pair import TracePair from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) @@ -83,12 +84,16 @@ def test_slipwall_identity(actx_factory, dim): wall = AdiabaticSlipBoundary() uniform_state = initializer(nodes) + cv_minus = discr.project("vol", BTAG_ALL, uniform_state) + dv_minus = eos.dependent_vars(cv_minus) + + cv_plus = wall._bnd_cv_func(discr, btag=BTAG_ALL, eos=eos, + cv_minus=cv_minus, dv_minus=dv_minus) def bnd_norm(vec): return actx.to_numpy(discr.norm(vec, p=np.inf, dd=BTAG_ALL)) - bnd_pair = wall.boundary_pair(discr, btag=BTAG_ALL, - eos=eos, cv=uniform_state) + bnd_pair = TracePair(BTAG_ALL, interior=cv_minus, exterior=cv_plus) # check that mass and energy are preserved mass_resid = bnd_pair.int.mass - bnd_pair.ext.mass @@ -150,9 +155,14 @@ def bnd_norm(vec): vel[vdir] = parity from mirgecom.initializers import Uniform initializer = Uniform(dim=dim, velocity=vel) - uniform_state = initializer(nodes) - bnd_pair = wall.boundary_pair(discr, btag=BTAG_ALL, - eos=eos, cv=uniform_state) + cv_minus = discr.project("vol", BTAG_ALL, initializer(nodes)) + dv_minus = eos.dependent_vars(cv_minus) + cv_plus = wall._bnd_cv_func(discr, btag=BTAG_ALL, eos=eos, + cv_minus=cv_minus, + dv_minus=dv_minus) + dv_plus = eos.dependent_vars(cv_plus) + bnd_pair = TracePair(BTAG_ALL, interior=cv_minus, exterior=cv_plus) + dv_pair = TracePair(BTAG_ALL, interior=dv_minus, exterior=dv_plus) # Check the total velocity component normal # to each surface. It should be zero. The @@ -160,9 +170,10 @@ def bnd_norm(vec): avg_state = 0.5*(bnd_pair.int + bnd_pair.ext) err_max = max(err_max, bnd_norm(np.dot(avg_state.momentum, nhat))) - from mirgecom.inviscid import inviscid_facial_flux - bnd_flux = inviscid_facial_flux(discr, eos, cv_tpair=bnd_pair, - local=True) + from mirgecom.inviscid import inviscid_facial_divergence_flux + bnd_flux = \ + inviscid_facial_divergence_flux(discr, cv_tpair=bnd_pair, + dv_tpair=dv_pair, local=True) err_max = max(err_max, bnd_norm(bnd_flux.mass), bnd_norm(bnd_flux.energy)) diff --git a/test/test_euler.py b/test/test_euler.py index 821e9b43e..1f8113d4b 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -38,13 +38,13 @@ make_obj_array, ) -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.euler import euler_operator from mirgecom.fluid import make_conserved from mirgecom.initializers import Vortex2D, Lump, MulticomponentLump from mirgecom.boundary import ( - PrescribedInviscidBoundary, + PrescribedFluidBoundary, DummyBoundary ) from mirgecom.eos import IdealSingleGas @@ -221,13 +221,20 @@ def test_vortex_rhs(actx_factory, order): ) discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) # Init soln with Vortex and expected RHS = 0 vortex = Vortex2D(center=[0, 0], velocity=[0, 0]) vortex_soln = vortex(nodes) + + def _vortex_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return vortex(x_vec=nodes, eos=eos, time=time, **kwargs) + boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=vortex) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_vortex_boundary) } inviscid_rhs = euler_operator( @@ -277,16 +284,24 @@ def test_lump_rhs(actx_factory, dim, order): logger.info(f"Number of elements: {mesh.nelements}") discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) # Init soln with Lump and expected RHS = 0 center = np.zeros(shape=(dim,)) velocity = np.zeros(shape=(dim,)) lump = Lump(dim=dim, center=center, velocity=velocity) lump_soln = lump(nodes) + + def _lump_boundary(discr, btag, eos, cv_minus, dv_minus, time=0): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return lump(x_vec=nodes, eos=eos, cv=cv_minus, time=time) + boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=lump) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_lump_boundary) } + inviscid_rhs = euler_operator( discr, eos=IdealSingleGas(), boundaries=boundaries, cv=lump_soln, time=0.0 @@ -342,7 +357,7 @@ def test_multilump_rhs(actx_factory, dim, order, v0): logger.info(f"Number of elements: {mesh.nelements}") discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) spec_y0s = np.ones(shape=(nspecies,)) @@ -357,8 +372,15 @@ def test_multilump_rhs(actx_factory, dim, order, v0): spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes) lump_soln = lump(nodes) + + def _my_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return lump(x_vec=nodes, eos=eos, time=time, **kwargs) + boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=lump) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_my_boundary) } inviscid_rhs = euler_operator( @@ -416,7 +438,7 @@ def _euler_flow_stepper(actx, parameters): istep = 0 discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) cv = initializer(nodes) sdt = cfl * get_inviscid_timestep(discr, eos=eos, cv=cv) @@ -549,9 +571,17 @@ def test_isentropic_vortex(actx_factory, order): dt = .0001 initializer = Vortex2D(center=orig, velocity=vel) casename = "Vortex" + + def _vortex_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return initializer(x_vec=nodes, eos=eos, time=time, **kwargs) + boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_vortex_boundary) } + eos = IdealSingleGas() t = 0 flowparams = {"dim": dim, "dt": dt, "order": order, "time": t, diff --git a/test/test_inviscid.py b/test/test_inviscid.py index 55c9f3033..7cfb9db81 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -303,11 +303,16 @@ def test_facial_flux(actx_factory, nspecies, order, dim): dim, mass=mass_input, energy=energy_input, momentum=mom_input, species_mass=species_mass_input) - from mirgecom.inviscid import inviscid_facial_flux - # Check the boundary facial fluxes as called on an interior boundary - interior_face_flux = inviscid_facial_flux( - discr, eos=IdealSingleGas(), cv_tpair=interior_trace_pair(discr, cv)) + eos = IdealSingleGas() + cv_tpair = interior_trace_pair(discr, cv) + dv_tpair = TracePair(cv_tpair.dd, interior=eos.dependent_vars(cv_tpair.int), + exterior=eos.dependent_vars(cv_tpair.ext)) + + from mirgecom.inviscid import inviscid_facial_divergence_flux + interior_face_flux = \ + inviscid_facial_divergence_flux(discr, cv_tpair=cv_tpair, + dv_tpair=dv_tpair) def inf_norm(data): if len(data) > 0: @@ -348,9 +353,12 @@ def inf_norm(data): momentum=dir_mom, species_mass=dir_mf) dir_bval = make_conserved(dim, mass=dir_mass, energy=dir_e, momentum=dir_mom, species_mass=dir_mf) - boundary_flux = inviscid_facial_flux( - discr, eos=IdealSingleGas(), - cv_tpair=TracePair(BTAG_ALL, interior=dir_bval, exterior=dir_bc) + dv_int = eos.dependent_vars(dir_bval) + dv_ext = eos.dependent_vars(dir_bc) + cv_tpair = TracePair(BTAG_ALL, interior=dir_bval, exterior=dir_bc) + dv_tpair = TracePair(BTAG_ALL, interior=dv_int, exterior=dv_ext) + boundary_flux = inviscid_facial_divergence_flux( + discr, cv_tpair=cv_tpair, dv_tpair=dv_tpair ) assert inf_norm(boundary_flux.mass) < tolerance From 35df8cd8ccdb678c0d4230e8255ff73c56af7050 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Sat, 6 Nov 2021 01:54:26 -0500 Subject: [PATCH 328/873] Update examples to reflect new boundary interfaces. --- examples/lump-mpi.py | 15 +++++++++++---- examples/mixture-mpi.py | 17 ++++++++++++----- examples/pulse-mpi.py | 4 ++-- examples/scalar-lump-mpi.py | 15 +++++++++++---- examples/sod-mpi.py | 16 ++++++++++++---- examples/vortex-mpi.py | 15 +++++++++++---- 6 files changed, 59 insertions(+), 23 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 921111797..bdb7177ce 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -34,7 +34,7 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -50,7 +50,6 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedInviscidBoundary from mirgecom.initializers import Lump from mirgecom.eos import IdealSingleGas @@ -153,7 +152,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None @@ -181,8 +180,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, orig = np.zeros(shape=(dim,)) vel[:dim] = 1.0 initializer = Lump(dim=dim, center=orig, velocity=vel) + + def _lump_boundary(discr, btag, eos, cv_minus, dv_minus, time=0): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return initializer(x_vec=nodes, eos=eos, cv=cv_minus, time=time) + + from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_lump_boundary) } if rst_filename: diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 7903d07f6..7170424e1 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -34,7 +34,7 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -50,7 +50,6 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedInviscidBoundary from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture @@ -153,7 +152,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None @@ -196,10 +195,18 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, initializer = MixtureInitializer(dim=dim, nspecies=nspecies, massfractions=y0s, velocity=velocity) + def _mixture_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, + **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return initializer(x_vec=nodes, eos=eos, **kwargs) + + from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_mixture_boundary) } - nodes = thaw(actx, discr.nodes()) + if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 2f3db432b..866a5bd91 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -36,7 +36,7 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -154,7 +154,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 913be72a4..c8088711d 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -35,7 +35,7 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -51,7 +51,6 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedInviscidBoundary from mirgecom.initializers import MulticomponentLump from mirgecom.eos import IdealSingleGas @@ -152,7 +151,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None @@ -186,8 +185,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, spec_centers=centers, velocity=velocity, spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes) + + def _my_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return initializer(x_vec=nodes, eos=eos, time=time, **kwargs) + + from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_my_boundary) } if rst_filename: diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 88174cdfc..a8e5c407b 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -34,7 +34,7 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -50,7 +50,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedInviscidBoundary +from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import SodShock1D from mirgecom.eos import IdealSingleGas @@ -151,7 +151,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None @@ -175,9 +175,17 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, initializer = SodShock1D(dim=dim) eos = IdealSingleGas() + + def _shock_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return initializer(x_vec=nodes, eos=eos, **kwargs) + boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_shock_boundary) } + if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 8c657ebc9..5cfb0f2eb 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -34,7 +34,7 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -50,7 +50,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedInviscidBoundary +from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Vortex2D from mirgecom.eos import IdealSingleGas @@ -155,7 +155,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) vis_timer = None @@ -191,8 +191,15 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, orig = np.zeros(shape=(dim,)) vel[:dim] = 1.0 initializer = Vortex2D(center=orig, velocity=vel) + + def _vortex_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): + actx = cv_minus.mass.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return initializer(x_vec=nodes, eos=eos, time=time, **kwargs) + boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=initializer) + BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_vortex_boundary) } if rst_filename: From 4a9c8e4ddbc53da777afa4a485d33c6d2bf37ea4 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 18 Nov 2021 10:24:06 -0600 Subject: [PATCH 329/873] make wave-mpi-lazy distributed --- examples/wave-mpi.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index f7ba0f662..3f90b3bf8 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -29,8 +29,8 @@ from pytools.obj_array import flat_obj_array -from meshmode.array_context import (PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext) +from grudge.array_context import (PyOpenCLArrayContext, + MPIPytatoPyOpenCLArrayContext) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext # noqa @@ -93,8 +93,7 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non logmgr=logmgr) else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue) if restart_step is None: @@ -254,7 +253,7 @@ def rhs(t, w): args = parser.parse_args() main(use_profiling=use_profiling, use_logmgr=use_logging, - actx_class=PytatoPyOpenCLArrayContext if args.lazy + actx_class=MPIPytatoPyOpenCLArrayContext if args.lazy else PyOpenCLArrayContext) From 82154d7db8759cadaa5b90be683b15e468d617e4 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 18 Nov 2021 10:25:01 -0600 Subject: [PATCH 330/873] add to requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 4dc2b033d..9cf850f00 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge ---editable git+https://github.com/inducer/pytato.git#egg=pytato +--editable git+https://github.com/inducer/grudge.git@boundary_lazy_comm_v2#egg=grudge +--editable git+https://github.com/inducer/pytato.git@distributed-v3#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 41690cf1f6c0f6e0e4dc4b1eb43732963fe65561 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Fri, 19 Nov 2021 10:01:11 -0600 Subject: [PATCH 331/873] fix nonlazy wave & modify pulse --- examples/pulse-mpi.py | 12 ++++++++---- examples/wave-mpi.py | 5 ++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index d9b8d3035..6c6e7ab47 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -35,6 +35,9 @@ PyOpenCLArrayContext, PytatoPyOpenCLArrayContext ) + +from grudge.array_context import MPIPytatoPyOpenCLArrayContext + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -103,9 +106,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == MPIPytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue) + else: + actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 @@ -340,7 +344,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 3f90b3bf8..d69496809 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -93,7 +93,10 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non logmgr=logmgr) else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class(comm, queue) + if actx_class == MPIPytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue) + else: + actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) if restart_step is None: From 53bdc6ad35dabe7282e9a145b4c1d15a2493f850 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Mon, 29 Nov 2021 12:29:06 -0600 Subject: [PATCH 332/873] Bump Newton niter back to default. --- examples/autoignition-mpi.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 381504908..15cd5ce48 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -254,8 +254,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln, - temperature_niter=20)(actx.np) + pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) from pytools.obj_array import make_obj_array From 234f471d36346fed3747e37e361aa4303a836163 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Mon, 29 Nov 2021 13:25:19 -0600 Subject: [PATCH 333/873] Update inviscid tests for refactored interface --- mirgecom/inviscid.py | 6 +++--- test/test_inviscid.py | 32 ++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index beb0b3f25..9018ce7ee 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -44,7 +44,7 @@ from mirgecom.fluid import make_conserved -def inviscid_flux(fluid_state): +def inviscid_flux(state): r"""Compute the inviscid flux vectors from fluid conserved vars *cv*. The inviscid fluxes are @@ -58,8 +58,8 @@ def inviscid_flux(fluid_state): :class:`mirgecom.fluid.ConservedVars` for more information about how the fluxes are represented. """ - cv = fluid_state.cv - dv = fluid_state.dv + cv = state.cv + dv = state.dv mass_flux = cv.momentum energy_flux = cv.velocity * (cv.energy + dv.pressure) mom_flux = ( diff --git a/test/test_inviscid.py b/test/test_inviscid.py index 782922282..08da3b8e6 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -38,7 +38,6 @@ from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.eager import interior_trace_pair from grudge.symbolic.primitives import TracePair from mirgecom.fluid import make_conserved from mirgecom.eos import IdealSingleGas @@ -120,7 +119,10 @@ def rand(): # }}} - flux = inviscid_flux(eos, cv) + from mirgecom.gas_model import make_fluid_state + state = make_fluid_state(cv, eos) + + flux = inviscid_flux(state) flux_resid = flux - expected_flux for i in range(numeq, dim): @@ -174,7 +176,11 @@ def test_inviscid_flux_components(actx_factory, dim): energy = p_exact / 0.4 + 0.5 * np.dot(mom, mom) / mass cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) - flux = inviscid_flux(eos, cv) + + from mirgecom.gas_model import make_fluid_state + state = make_fluid_state(cv, eos) + + flux = inviscid_flux(state) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) @@ -234,12 +240,14 @@ def test_inviscid_mom_flux_components(actx_factory, dim, livedim): ) cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) + from mirgecom.gas_model import make_fluid_state + state = make_fluid_state(cv, eos) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) assert inf_norm(p - p_exact) < tolerance - flux = inviscid_flux(eos, cv) + flux = inviscid_flux(state) logger.info(f"{dim}d flux = {flux}") vel_exact = mom / mass @@ -304,11 +312,17 @@ def test_facial_flux(actx_factory, nspecies, order, dim): # Check the boundary facial fluxes as called on an interior boundary eos = IdealSingleGas() - cv_tpair = interior_trace_pair(discr, cv) + from mirgecom.gas_model import ( + make_fluid_state, + make_fluid_state_interior_trace_pair + ) + state_tpair = make_fluid_state_interior_trace_pair( + discr, make_fluid_state(cv, eos), eos + ) from mirgecom.inviscid import inviscid_facial_divergence_flux interior_face_flux = \ - inviscid_facial_divergence_flux(discr, eos=eos, cv_tpair=cv_tpair) + inviscid_facial_divergence_flux(discr, state_tpair=state_tpair) def inf_norm(data): if len(data) > 0: @@ -349,9 +363,11 @@ def inf_norm(data): momentum=dir_mom, species_mass=dir_mf) dir_bval = make_conserved(dim, mass=dir_mass, energy=dir_e, momentum=dir_mom, species_mass=dir_mf) - cv_tpair = TracePair(BTAG_ALL, interior=dir_bval, exterior=dir_bc) + state_tpair = TracePair(BTAG_ALL, + interior=make_fluid_state(dir_bval, eos), + exterior=make_fluid_state(dir_bc, eos)) boundary_flux = inviscid_facial_divergence_flux( - discr, eos=eos, cv_tpair=cv_tpair + discr, state_tpair=state_tpair ) assert inf_norm(boundary_flux.mass) < tolerance From d0786a2f040cc4719d5e6ddd08b3adf4181d526e Mon Sep 17 00:00:00 2001 From: CI Runner Date: Mon, 29 Nov 2021 14:10:26 -0600 Subject: [PATCH 334/873] Add gas model module --- mirgecom/euler.py | 8 +-- mirgecom/gas_model.py | 130 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 mirgecom/gas_model.py diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 1e2421587..a630a30e8 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -81,8 +81,9 @@ def euler_operator(discr, state, eos, boundaries, time=0.0): Parameters ---------- - cv: :class:`mirgecom.fluid.ConservedVars` - Fluid conserved state object with the conserved variables. + state: :class:`mirgecom.gas_model.FluidState` + Fluid state object with the conserved state, and dependent + quantities. boundaries Dictionary of boundary functions, one for each valid btag @@ -119,8 +120,6 @@ def euler_operator(discr, state, eos, boundaries, time=0.0): for q_pair in q_comm_pairs] cv_interior_pairs.extend(cv_part_pairs) - # cv_boundaries = _make_persistent_boundary_cv(boundaries, cv) - # boundary_states = _make_persistent_boundary_states(boundaries, cv) tseed_interior_pairs = None if cv.nspecies > 0: # If this is a mixture, we need to exchange the temperature field because @@ -144,6 +143,7 @@ def euler_operator(discr, state, eos, boundaries, time=0.0): + sum(inviscid_facial_divergence_flux(discr, state_pair) for state_pair in interior_states) ) + q = -div_operator(discr, inviscid_flux_vol.join(), inviscid_flux_bnd.join()) return make_conserved(discr.dim, q=q) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py new file mode 100644 index 000000000..0c106a96b --- /dev/null +++ b/mirgecom/gas_model.py @@ -0,0 +1,130 @@ +""":mod:`mirgecom.gas_model` provides utilities to deal with gases. + +Fluid State Handling +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: FluidState +.. autofunction: make_fluid_state +.. autofunction: make_fluid_state_on_boundary +.. autofunction: make_fluid_state_trace_pairs +""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import numpy as np # noqa +from meshmode.dof_array import DOFArray # noqa +from dataclasses import dataclass +from arraycontext import dataclass_array_container +from mirgecom.fluid import ConservedVars +from mirgecom.eos import EOSDependentVars + + +@dataclass_array_container +@dataclass(frozen=True) +class FluidState: + r"""Gas model-consistent fluid state. + + .. attribute:: cv + + :class:`~mirgecom.fluid.ConservedVars` for the fluid conserved state + + .. attribute:: dv + + :class:`~mirgecom.eos.EOSDependentVars` for the fluid state-dependent + quantities corresponding to the chosen equation of state. + """ + + # .. attribute:: tv + # + # :class:`~mirgecom.transport.TransportDependentVars` for the fluid + # state-dependent transport properties. + + cv: ConservedVars + dv: EOSDependentVars + # tv: TransportDependentVars + + @property + def array_context(self): + """Return an array context for the :class:`ConservedVars` object.""" + return self.cv.array_context + + @property + def dim(self): + """Return the number of physical dimensions.""" + return self.cv.dim + + @property + def nspecies(self): + """Return the number of physical dimensions.""" + return self.cv.nspecies + + +def make_fluid_state(cv, eos, temperature_seed=None): + """Create a fluid state from the conserved vars and equation of state.""" + return FluidState( + cv=cv, dv=eos.dependent_vars(cv, temperature_seed=temperature_seed) + ) + + +def make_fluid_state_on_boundary(discr, btag, fluid_state, eos): + """Create a fluid state from the conserved vars and equation of state.""" + cv_sd = discr.project("vol", btag, fluid_state.cv) + temperature_seed = None + if fluid_state.cv.nspecies > 0: + temperature_seed = discr.project("vol", btag, fluid_state.dv.temperature) + return make_fluid_state(cv=cv_sd, eos=eos, temperature_seed=temperature_seed) + + +def make_fluid_state_trace_pairs(cv_pairs, eos, temperature_pairs=None): + """Create a fluid state from the conserved vars and equation of state.""" + from grudge.trace_pair import TracePair + if temperature_pairs is not None: + return [TracePair( + cv_pair.dd, + interior=make_fluid_state(cv_pair.int, eos, + temperature_seed=tseed_pair.int), + exterior=make_fluid_state(cv_pair.ext, eos, + temperature_seed=tseed_pair.ext)) + for cv_pair, tseed_pair in zip(cv_pairs, temperature_pairs)] + else: + return [TracePair(cv_pair.dd, + interior=make_fluid_state(cv_pair.int, eos), + exterior=make_fluid_state(cv_pair.ext, eos)) + for cv_pair in cv_pairs] + + +def make_fluid_state_interior_trace_pair(discr, state, eos): + """Create a fluid state from the conserved vars and equation of state.""" + from grudge.eager import interior_trace_pair + from grudge.trace_pair import TracePair + cv_tpair = interior_trace_pair(discr, state.cv) + if state.nspecies > 0: + tseed_pair = interior_trace_pair(discr, state.dv.temperature) + return TracePair( + cv_tpair.dd, + interior=make_fluid_state(cv_tpair.int, eos, tseed_pair.int), + exterior=make_fluid_state(cv_tpair.ext, eos, tseed_pair.ext)) + return TracePair(cv_tpair.dd, + interior=make_fluid_state(cv_tpair.int, eos), + exterior=make_fluid_state(cv_tpair.ext, eos)) From be54926a084b98121d4c63e5a0804e6d2fea3227 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 30 Nov 2021 08:59:08 -0600 Subject: [PATCH 335/873] Hack/review during meeting --- mirgecom/eos.py | 12 +++++++++++- mirgecom/gas_model.py | 44 ++++++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 133a274b6..f4d5c92f1 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -6,6 +6,7 @@ This module is designed provide Equation of State objects used to compute and manage the relationships between and among state and thermodynamic variables. +.. autoexception:: TemperatureSeedRequired .. autoclass:: EOSDependentVars .. autoclass:: GasEOS .. autoclass:: MixtureEOS @@ -47,6 +48,10 @@ from arraycontext import dataclass_array_container +class TemperatureSeedRequired(Exception): + pass + + @dataclass_array_container @dataclass(frozen=True) class EOSDependentVars: @@ -138,7 +143,12 @@ def get_internal_energy(self, temperature, *, mass, species_mass_fractions): def dependent_vars(self, cv: ConservedVars, temperature_seed: DOFArray = None) -> EOSDependentVars: - """Get an agglomerated array of the dependent variables.""" + """Get an agglomerated array of the dependent variables. + + Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) + may raise :exc:`TemperatureSeedRequired` if *temperature_seed* is not + given. + """ return EOSDependentVars( temperature=self.temperature(cv, temperature_seed), pressure=self.pressure(cv), diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 0c106a96b..4a9c68fde 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -55,6 +55,8 @@ class FluidState: quantities corresponding to the chosen equation of state. """ + # FIXME: autoattribute for array_context, dim, nspecies + # .. attribute:: tv # # :class:`~mirgecom.transport.TransportDependentVars` for the fluid @@ -81,14 +83,17 @@ def nspecies(self): def make_fluid_state(cv, eos, temperature_seed=None): - """Create a fluid state from the conserved vars and equation of state.""" + """Create a fluid state from the conserved vars and equation of state. + """ return FluidState( cv=cv, dv=eos.dependent_vars(cv, temperature_seed=temperature_seed) ) -def make_fluid_state_on_boundary(discr, btag, fluid_state, eos): - """Create a fluid state from the conserved vars and equation of state.""" +def project_fluid_state(discr, btag, fluid_state, eos): + """Create a fluid state from volume :class:`FluidState` *fluid_state* + by projection onto the boundary and ensuring thermal consistency. + """ cv_sd = discr.project("vol", btag, fluid_state.cv) temperature_seed = None if fluid_state.cv.nspecies > 0: @@ -96,22 +101,26 @@ def make_fluid_state_on_boundary(discr, btag, fluid_state, eos): return make_fluid_state(cv=cv_sd, eos=eos, temperature_seed=temperature_seed) -def make_fluid_state_trace_pairs(cv_pairs, eos, temperature_pairs=None): +def _getattr_ish(obj, name): + if obj is None: + return None + else: + return getattr(obj, name) + + +def make_fluid_state_trace_pairs(cv_pairs, eos, temperature_seed_pairs=None): """Create a fluid state from the conserved vars and equation of state.""" from grudge.trace_pair import TracePair - if temperature_pairs is not None: - return [TracePair( - cv_pair.dd, - interior=make_fluid_state(cv_pair.int, eos, - temperature_seed=tseed_pair.int), - exterior=make_fluid_state(cv_pair.ext, eos, - temperature_seed=tseed_pair.ext)) - for cv_pair, tseed_pair in zip(cv_pairs, temperature_pairs)] - else: - return [TracePair(cv_pair.dd, - interior=make_fluid_state(cv_pair.int, eos), - exterior=make_fluid_state(cv_pair.ext, eos)) - for cv_pair in cv_pairs] + if temperature_seed_pairs is None: + temperature_seed_pairs = [None] * len(cv_pairs) + + return [TracePair( + dd=cv_pair.dd, + interior=make_fluid_state(cv_pair.int, eos, + temperature_seed=_getattr_ish(tseed_pair, "int")), + exterior=make_fluid_state(cv_pair.ext, eos, + temperature_seed=_getattr_ish(tseed_pair, "ext"))) + for cv_pair, tseed_pair in zip(cv_pairs, temperature_seed_pairs)] def make_fluid_state_interior_trace_pair(discr, state, eos): @@ -119,6 +128,7 @@ def make_fluid_state_interior_trace_pair(discr, state, eos): from grudge.eager import interior_trace_pair from grudge.trace_pair import TracePair cv_tpair = interior_trace_pair(discr, state.cv) + # FIXME As above? if state.nspecies > 0: tseed_pair = interior_trace_pair(discr, state.dv.temperature) return TracePair( From 28b09edd16df856bd4ab90ffec326a14ba508bcc Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:12:52 -0600 Subject: [PATCH 336/873] Use gas model module. --- examples/autoignition-mpi.py | 8 +++++--- examples/pulse-mpi.py | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 15cd5ce48..1ca615350 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -56,6 +56,7 @@ from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture +from mirgecom.gas_model import GasModel from arraycontext import thaw, freeze from mirgecom.logging_quantities import ( @@ -256,7 +257,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, from mirgecom.thermochemistry import make_pyrometheus_mechanism_class pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) - + gas_model = GasModel(eos=eos) from pytools.obj_array import make_obj_array def get_temperature_update(state, temperature): @@ -567,10 +568,11 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): from mirgecom.gas_model import make_fluid_state - fluid_state = make_fluid_state(cv=state[0], eos=eos, + fluid_state = make_fluid_state(cv=state[0], gas_model=gas_model, temperature_seed=state[1]) return make_obj_array([euler_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, eos=eos) + boundaries=boundaries, + gas_model=gas_model) + eos.get_species_source_terms(state[0]), 0*state[1]]) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 077624596..46bd9bcc5 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -56,6 +56,7 @@ AcousticPulse ) from mirgecom.eos import IdealSingleGas +from mirgecom.gas_model import GasModel from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -177,6 +178,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, ]) eos = IdealSingleGas() + gas_model = GasModel(eos=eos) vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) initializer = Lump(dim=dim, center=orig, velocity=vel, rhoamp=0.0) @@ -293,9 +295,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): from mirgecom.gas_model import make_fluid_state - inviscid_state = make_fluid_state(cv=state, eos=eos) + inviscid_state = make_fluid_state(cv=state, gas_model=gas_model) return euler_operator(discr, state=inviscid_state, time=t, - boundaries=boundaries, eos=eos) + boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, eos, t_final, constant_cfl) From 0e983c38304aadca61fd92a5681a9a0eb1c2f647 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:14:01 -0600 Subject: [PATCH 337/873] Use gas model not eos, use FluidState interface. --- mirgecom/boundary.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 6c2930dc4..a3674137c 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -141,15 +141,17 @@ def _boundary_quantity(self, discr, btag, quantity, **kwargs): return quantity return discr.project(btag, "all_faces", quantity) - def inviscid_divergence_flux(self, discr, btag, eos, state_minus, **kwargs): + def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, + **kwargs): """Get the inviscid boundary flux for the divergence operator.""" # This one is when the user specified a function that directly # prescribes the flux components at the boundary if self._inviscid_bnd_flux_func: - return self._inviscid_bnd_flux_func(discr, btag, eos, state_minus, + return self._inviscid_bnd_flux_func(discr, btag, gas_model, state_minus, **kwargs) - state_plus = self._bnd_state_func(discr=discr, btag=btag, eos=eos, + state_plus = self._bnd_state_func(discr=discr, btag=btag, + gas_model=gas_model, state_minus=state_minus, **kwargs) boundary_state_pair = TracePair(btag, interior=state_minus, exterior=state_plus) @@ -260,7 +262,7 @@ def __init__(self): self, boundary_state_func=self.adiabatic_slip_state ) - def adiabatic_slip_state(self, discr, btag, eos, state_minus, **kwargs): + def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. The exterior solution is set such that there will be vanishing @@ -288,10 +290,11 @@ def adiabatic_slip_state(self, discr, btag, eos, state_minus, **kwargs): # Form the external boundary solution with the new momentum ext_cv = make_conserved(dim=dim, mass=cv_minus.mass, energy=cv_minus.energy, momentum=ext_mom, species_mass=cv_minus.species_mass) - t_seed = None if ext_cv.nspecies == 0 else state_minus.dv.temperature + t_seed = None if ext_cv.nspecies == 0 else state_minus.temperature from mirgecom.gas_model import make_fluid_state - return make_fluid_state(cv=ext_cv, eos=eos, temperature_seed=t_seed) + return make_fluid_state(cv=ext_cv, gas_model=gas_model, + temperature_seed=t_seed) class AdiabaticNoslipMovingBoundary(PrescribedFluidBoundary): From 742383aaa9eebd70a6aa6cbf6cb90b9a35b89ba5 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:15:21 -0600 Subject: [PATCH 338/873] Add temperature seed requirement exception, and raise for mixtures. --- mirgecom/eos.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 133a274b6..9c6fca51d 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -11,6 +11,10 @@ .. autoclass:: MixtureEOS .. autoclass:: IdealSingleGas .. autoclass:: PyrometheusMixture + +Exceptions +^^^^^^^^^^ +.. autoexception:: TemperatureSeedRequired """ __copyright__ = """ @@ -47,6 +51,12 @@ from arraycontext import dataclass_array_container +class TemperatureSeedRequired(Exception): + """Indicate that EOS is inappropriately called without seeding temperature.""" + + pass + + @dataclass_array_container @dataclass(frozen=True) class EOSDependentVars: @@ -138,7 +148,13 @@ def get_internal_energy(self, temperature, *, mass, species_mass_fractions): def dependent_vars(self, cv: ConservedVars, temperature_seed: DOFArray = None) -> EOSDependentVars: - """Get an agglomerated array of the dependent variables.""" + """Get an agglomerated array of the dependent variables. + + Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) + may raise :exc:`TemperatureSeedRequired` if *temperature_seed* is not + given. + + """ return EOSDependentVars( temperature=self.temperature(cv, temperature_seed), pressure=self.pressure(cv), @@ -785,7 +801,9 @@ def temperature(self, cv: ConservedVars, temperature_seed=None): :class:`~meshmode.dof_array.DOFArray` The temperature of the fluid. """ - # from arraycontext import thaw, freeze + if temperature_seed is None: + raise TemperatureSeedRequired("MixtureEOS.get_temperature requires" + " a *temperature_seed*.") @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) From 22a5869dc02c2fe8488c63a79206b26e82e83f68 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:15:50 -0600 Subject: [PATCH 339/873] Use gas model interface --- mirgecom/euler.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index a630a30e8..23b691962 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -66,7 +66,7 @@ from mirgecom.operators import div_operator -def euler_operator(discr, state, eos, boundaries, time=0.0): +def euler_operator(discr, state, gas_model, boundaries, time=0.0): r"""Compute RHS of the Euler flow equations. Returns @@ -102,12 +102,11 @@ def euler_operator(discr, state, eos, boundaries, time=0.0): flow equations. """ cv = state.cv - dv = state.dv dim = state.dim - from mirgecom.gas_model import make_fluid_state_on_boundary + from mirgecom.gas_model import project_fluid_state boundary_states = {btag: - make_fluid_state_on_boundary(discr, btag, state, eos) + project_fluid_state(discr, btag, state, gas_model) for btag in boundaries} cv_int_pair = interior_trace_pair(discr, cv) @@ -126,19 +125,19 @@ def euler_operator(discr, state, eos, boundaries, time=0.0): # mixture pressure (used in the inviscid flux calculations) depends on # temperature and we need to seed the temperature calculation for the # (+) part of the partition boundary with the remote temperature data. - tseed_int_pair = interior_trace_pair(discr, dv.temperature) - tseed_part_pairs = cross_rank_trace_pairs(discr, dv.temperature) + tseed_int_pair = interior_trace_pair(discr, state.temperature) + tseed_part_pairs = cross_rank_trace_pairs(discr, state.temperature) tseed_interior_pairs = [tseed_int_pair] tseed_interior_pairs.extend(tseed_part_pairs) from mirgecom.gas_model import make_fluid_state_trace_pairs - interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, eos, + interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, tseed_interior_pairs) inviscid_flux_vol = inviscid_flux(state) inviscid_flux_bnd = ( sum(boundaries[btag].inviscid_divergence_flux( - discr, btag, eos, state_minus=boundary_states[btag], time=time) + discr, btag, gas_model, state_minus=boundary_states[btag], time=time) for btag in boundaries) + sum(inviscid_facial_divergence_flux(discr, state_pair) for state_pair in interior_states) From 2c52847ad10bc1725eb8068a32050be6bf189a4a Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:18:32 -0600 Subject: [PATCH 340/873] Start adding transport, refactor and sharpen interface and docs. --- mirgecom/gas_model.py | 177 +++++++++++++++++++++++++++++++++--------- 1 file changed, 141 insertions(+), 36 deletions(-) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 0c106a96b..916c09a4d 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -7,6 +7,7 @@ .. autofunction: make_fluid_state .. autofunction: make_fluid_state_on_boundary .. autofunction: make_fluid_state_trace_pairs + """ __copyright__ = """ @@ -37,7 +38,27 @@ from dataclasses import dataclass from arraycontext import dataclass_array_container from mirgecom.fluid import ConservedVars -from mirgecom.eos import EOSDependentVars +from mirgecom.eos import ( + GasEOS, + EOSDependentVars +) +from mirgecom.transport import ( + TransportModel, + TransportModelRequired, + TransportDependentVars +) + + +@dataclass(frozen=True) +class GasModel: + r"""Physical gas model for calculating fluid state-dependent quantities. + + .. attribute:: eos + .. attribute:: transport_model + """ + + eos: GasEOS + transport: TransportModel = None @dataclass_array_container @@ -45,6 +66,8 @@ class FluidState: r"""Gas model-consistent fluid state. + Data attributes + ^^^^^^^^^^^^^^^ .. attribute:: cv :class:`~mirgecom.fluid.ConservedVars` for the fluid conserved state @@ -53,16 +76,31 @@ class FluidState: :class:`~mirgecom.eos.EOSDependentVars` for the fluid state-dependent quantities corresponding to the chosen equation of state. - """ - # .. attribute:: tv - # - # :class:`~mirgecom.transport.TransportDependentVars` for the fluid - # state-dependent transport properties. + .. attribute:: tv + :class:`~mirgecom.transport.TransportDependentVars` for the fluid + state-dependent transport properties. + + Properties + ^^^^^^^^^^ + .. autoattribute:: array_context + .. autoattribute:: dim + .. autoattribute:: nspecies + .. autoattribute:: pressure + .. autoattribute:: temperature + .. autoattribute:: velocity + .. autoattribute:: speed + .. autoattribute:: speed_of_sound + .. autoattribute:: mass_density + .. autoattribute:: momentum_density + .. autoattribute:: energy_density + .. autoattribute:: species_mass_density + .. autoattribute:: species_mass_fractions + """ cv: ConservedVars dv: EOSDependentVars - # tv: TransportDependentVars + tv: TransportDependentVars = None @property def array_context(self): @@ -79,52 +117,119 @@ def nspecies(self): """Return the number of physical dimensions.""" return self.cv.nspecies + @property + def pressure(self): + """Return the gas pressure.""" + return self.dv.pressure + + @property + def temperature(self): + """Return the gas temperature.""" + return self.dv.temperature + + @property + def mass_density(self): + """Return the gas density.""" + return self.cv.mass + + @property + def momentum_density(self): + """Return the gas momentum density.""" + return self.cv.momentum + + @property + def energy_density(self): + """Return the gas total energy density.""" + return self.cv.energy + + @property + def species_mass_density(self): + """Return the gas species densities.""" + return self.cv.species_mass + + @property + def velocity(self): + """Return the gas velocity.""" + return self.cv.velocity + + @property + def speed(self): + """Return the gas speed.""" + return self.cv.speed + + @property + def species_mass_fractions(self): + """Return the species mass fractions y = species_mass / mass.""" + return self.cv.species_mass_fractions + + @property + def speed_of_sound(self): + """Return the speed of sound in the gas.""" + return self.dv.speed_of_sound + + def _get_transport_property(self, name): + """Grab a transport property if transport model is present.""" + if self.tv is None: + raise TransportModelRequired("Viscous transport model not provided.") + return getattr(self.tv, name) + + @property + def viscosity(self): + """Return the fluid viscosity.""" + return self._get_transport_property("viscosity") + -def make_fluid_state(cv, eos, temperature_seed=None): +def make_fluid_state(cv, gas_model, temperature_seed=None): """Create a fluid state from the conserved vars and equation of state.""" - return FluidState( - cv=cv, dv=eos.dependent_vars(cv, temperature_seed=temperature_seed) - ) + dv = gas_model.eos.dependent_vars(cv, temperature_seed=temperature_seed) + tv = None + if gas_model.transport is not None: + tv = gas_model.transport.dependent_vars(eos=gas_model.eos, cv=cv) + return FluidState(cv=cv, dv=dv, tv=tv) -def make_fluid_state_on_boundary(discr, btag, fluid_state, eos): +def project_fluid_state(discr, btag, fluid_state, gas_model): """Create a fluid state from the conserved vars and equation of state.""" cv_sd = discr.project("vol", btag, fluid_state.cv) temperature_seed = None if fluid_state.cv.nspecies > 0: temperature_seed = discr.project("vol", btag, fluid_state.dv.temperature) - return make_fluid_state(cv=cv_sd, eos=eos, temperature_seed=temperature_seed) + return make_fluid_state(cv=cv_sd, gas_model=gas_model, + temperature_seed=temperature_seed) -def make_fluid_state_trace_pairs(cv_pairs, eos, temperature_pairs=None): - """Create a fluid state from the conserved vars and equation of state.""" - from grudge.trace_pair import TracePair - if temperature_pairs is not None: - return [TracePair( - cv_pair.dd, - interior=make_fluid_state(cv_pair.int, eos, - temperature_seed=tseed_pair.int), - exterior=make_fluid_state(cv_pair.ext, eos, - temperature_seed=tseed_pair.ext)) - for cv_pair, tseed_pair in zip(cv_pairs, temperature_pairs)] +def _getattr_ish(obj, name): + if obj is None: + return None else: - return [TracePair(cv_pair.dd, - interior=make_fluid_state(cv_pair.int, eos), - exterior=make_fluid_state(cv_pair.ext, eos)) - for cv_pair in cv_pairs] + return getattr(obj, name) -def make_fluid_state_interior_trace_pair(discr, state, eos): +def make_fluid_state_trace_pairs(cv_pairs, gas_model, temperature_seed_pairs=None): + """Create a fluid state from the conserved vars and equation of state.""" + from grudge.trace_pair import TracePair + if temperature_seed_pairs is None: + temperature_seed_pairs = [None] * len(cv_pairs) + return [TracePair( + cv_pair.dd, + interior=make_fluid_state(cv_pair.int, gas_model, + temperature_seed=_getattr_ish(tseed_pair, "int")), + exterior=make_fluid_state(cv_pair.ext, gas_model, + temperature_seed=_getattr_ish(tseed_pair, "ext"))) + for cv_pair, tseed_pair in zip(cv_pairs, temperature_seed_pairs)] + + +def make_fluid_state_interior_trace_pair(discr, state, gas_model): """Create a fluid state from the conserved vars and equation of state.""" from grudge.eager import interior_trace_pair from grudge.trace_pair import TracePair cv_tpair = interior_trace_pair(discr, state.cv) + tseed_pair = None if state.nspecies > 0: tseed_pair = interior_trace_pair(discr, state.dv.temperature) - return TracePair( - cv_tpair.dd, - interior=make_fluid_state(cv_tpair.int, eos, tseed_pair.int), - exterior=make_fluid_state(cv_tpair.ext, eos, tseed_pair.ext)) - return TracePair(cv_tpair.dd, - interior=make_fluid_state(cv_tpair.int, eos), - exterior=make_fluid_state(cv_tpair.ext, eos)) + return TracePair( + cv_tpair.dd, + interior=make_fluid_state(cv_tpair.int, gas_model, + _getattr_ish(tseed_pair, "int")), + exterior=make_fluid_state(cv_tpair.ext, gas_model, + _getattr_ish(tseed_pair, "ext"))) From f57249601235ed56c154d515203893563630f586 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:21:32 -0600 Subject: [PATCH 341/873] Use gas model state interface. --- mirgecom/inviscid.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 9018ce7ee..0f2a5b75d 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -58,18 +58,16 @@ def inviscid_flux(state): :class:`mirgecom.fluid.ConservedVars` for more information about how the fluxes are represented. """ - cv = state.cv - dv = state.dv - mass_flux = cv.momentum - energy_flux = cv.velocity * (cv.energy + dv.pressure) + mass_flux = state.momentum_density + energy_flux = state.velocity * (state.energy_density + state.pressure) mom_flux = ( - cv.mass * np.outer(cv.velocity, cv.velocity) - + np.eye(cv.dim)*dv.pressure + state.mass_density * np.outer(state.velocity, state.velocity) + + np.eye(state.dim)*state.pressure ) - species_mass_flux = ( # reshaped: (nspeceis, dim) - cv.velocity * cv.species_mass.reshape(-1, 1) + species_mass_flux = ( # reshaped: (nspecies, dim) + state.velocity * state.species_mass_density.reshape(-1, 1) ) - return make_conserved(cv.dim, mass=mass_flux, energy=energy_flux, + return make_conserved(state.dim, mass=mass_flux, energy=energy_flux, momentum=mom_flux, species_mass=species_mass_flux) @@ -109,8 +107,8 @@ def inviscid_facial_divergence_flux(discr, state_tpair, local=False): # This calculates the local maximum eigenvalue of the flux Jacobian # for a single component gas, i.e. the element-local max wavespeed |v| + c. - w_int = state_tpair.int.dv.speed_of_sound + state_tpair.int.cv.speed - w_ext = state_tpair.ext.dv.speed_of_sound + state_tpair.ext.cv.speed + w_int = state_tpair.int.speed_of_sound + state_tpair.int.speed + w_ext = state_tpair.ext.speed_of_sound + state_tpair.ext.speed lam = actx.np.maximum(w_int, w_ext) normal = thaw(actx, discr.normal(state_tpair.dd)) From d323410cbb007b75b4b5916edc347ef8001f36b0 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:23:20 -0600 Subject: [PATCH 342/873] Add transport model requirement exception, dependent vars computation. --- mirgecom/transport.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index f01878798..d9fa8a6de 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -13,6 +13,8 @@ .. autoclass:: TransportModel .. autoclass:: SimpleTransport .. autoclass:: PowerLawTransport + +.. autoexception:: TransportModelRequired """ __copyright__ = """ @@ -46,6 +48,12 @@ from mirgecom.eos import GasEOS +class TransportModelRequired(Exception): + """Indicate that transport model is required for model evaluation.""" + + pass + + @dataclass class TransportDependentVars: """State-dependent quantities for :class:`TransportModel`. @@ -77,6 +85,7 @@ class TransportModel: .. automethod:: thermal_conductivity .. automethod:: species_diffusivity .. automethod:: volume_viscosity + .. automethod:: dependent_vars """ def bulk_viscosity(self, eos: GasEOS, cv: ConservedVars): @@ -99,6 +108,15 @@ def species_diffusivity(self, eos: GasEOS, cv: ConservedVars): r"""Get the vector of species diffusivities, ${d}_{\alpha}$.""" raise NotImplementedError() + def dependent_vars(self, eos: GasEOS, cv: ConservedVars): + r"""Compute the transport properties from the conserved state.""" + return TransportDependentVars( + bulk_viscosity=self.bulk_viscosity(eos, cv), + viscosity=self.viscosity(eos, cv), + thermal_conductivity=self.thermal_conductivity(eos, cv), + species_diffusivity=self.species_diffusivity(eos, cv) + ) + class SimpleTransport(TransportModel): r"""Transport model with uniform, constant properties. From 8ba29b2965b719c5a0cae0869b43853e7d5fab6c Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 12:36:47 -0600 Subject: [PATCH 343/873] Add missing blank line --- mirgecom/gas_model.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index f1bc102c5..2e9bdc121 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -178,6 +178,7 @@ def viscosity(self): """Return the fluid viscosity.""" return self._get_transport_property("viscosity") + def make_fluid_state(cv, gas_model, temperature_seed=None): """Create a fluid state from the conserved vars and equation of state.""" dv = gas_model.eos.dependent_vars(cv, temperature_seed=temperature_seed) From 614c146552055227a28a17d5010549a8649327d1 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 13:19:58 -0600 Subject: [PATCH 344/873] Raise seed req only in the appropriate place --- mirgecom/eos.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 31c2951f1..e5469296d 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -801,13 +801,13 @@ def temperature(self, cv: ConservedVars, temperature_seed=None): :class:`~meshmode.dof_array.DOFArray` The temperature of the fluid. """ - if temperature_seed is None: - raise TemperatureSeedRequired("MixtureEOS.get_temperature requires" - " a *temperature_seed*.") @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): + if temperature_seed is None: + raise TemperatureSeedRequired("MixtureEOS.get_temperature requires" + " a *temperature_seed*.") tseed = self.get_temperature_seed(cv, temperature_seed) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass From 42b42e9298a3b03b99b3b9048d3c94d4be281153 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Tue, 30 Nov 2021 13:20:24 -0600 Subject: [PATCH 345/873] Sharpen state handling code a bit. --- examples/autoignition-mpi.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 1ca615350..9c842fb26 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -504,9 +504,10 @@ def my_get_timestep(t, dt, state): return ts_field, cfl, min(t_remaining, dt) def my_pre_step(step, t, dt, state): - cv = state[0] + cv, tseed = state + dv = compute_dependent_vars(cv, tseed) + try: - dv = None if logmgr: logmgr.tick_before() @@ -519,7 +520,7 @@ def my_pre_step(step, t, dt, state): if do_health: if dv is None: - dv = compute_dependent_vars(cv) + dv = compute_dependent_vars(cv, tseed) health_errors = global_reduce(my_health_check(cv, dv), op="lor") if health_errors: if rank == 0: @@ -530,7 +531,7 @@ def my_pre_step(step, t, dt, state): if do_status: if dv is None: - dv = compute_dependent_vars(cv) + dv = compute_dependent_vars(cv, tseed) my_write_status(dt=dt, cfl=cfl, dv=dv) if do_restart: @@ -539,7 +540,7 @@ def my_pre_step(step, t, dt, state): if do_viz: production_rates, = compute_production_rates(cv) if dv is None: - dv = compute_dependent_vars(cv) + dv = compute_dependent_vars(cv, tseed) my_write_viz(step=step, t=t, dt=dt, state=cv, dv=dv, production_rates=production_rates, ts_field=ts_field, cfl=cfl) @@ -554,9 +555,8 @@ def my_pre_step(step, t, dt, state): return state, dt def my_post_step(step, t, dt, state): - cv = state[0] - new_dv = compute_dependent_vars(cv, # noqa - temperature_seed=state[1]) + cv, tseed = state + new_dv = compute_dependent_vars(cv, tseed) # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -567,14 +567,15 @@ def my_post_step(step, t, dt, state): return make_obj_array([cv, new_dv.temperature]), dt def my_rhs(t, state): + cv, tseed = state from mirgecom.gas_model import make_fluid_state - fluid_state = make_fluid_state(cv=state[0], gas_model=gas_model, - temperature_seed=state[1]) + fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) return make_obj_array([euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model) - + eos.get_species_source_terms(state[0]), - 0*state[1]]) + + eos.get_species_source_terms(cv), + 0*tseed]) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, eos, t_final, constant_cfl) From 56f98d45e0f9c899f0bc627c9e37c07916b52d1b Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 30 Nov 2021 14:31:22 -0600 Subject: [PATCH 346/873] flake8 --- examples/pulse-mpi.py | 6 +++--- examples/wave-mpi.py | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 6c6e7ab47..60ef56a78 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -32,8 +32,7 @@ import pyopencl.tools as cl_tools from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + PyOpenCLArrayContext ) from grudge.array_context import MPIPytatoPyOpenCLArrayContext @@ -109,7 +108,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if actx_class == MPIPytatoPyOpenCLArrayContext: actx = actx_class(comm, queue) else: - actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index d69496809..e1b501f97 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -96,7 +96,8 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non if actx_class == MPIPytatoPyOpenCLArrayContext: actx = actx_class(comm, queue) else: - actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) if restart_step is None: From d01caefe2e8332156bc800ab78a855d4665e60b2 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 30 Nov 2021 14:45:31 -0600 Subject: [PATCH 347/873] change remaining examples --- examples/lump-mpi.py | 17 +++++++++-------- examples/scalar-lump-mpi.py | 17 +++++++++-------- examples/vortex-mpi.py | 17 +++++++++-------- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 3df2bef1e..2bf2e5b1b 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -29,10 +29,9 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext -) +from grudge.array_context import (PyOpenCLArrayContext, + MPIPytatoPyOpenCLArrayContext) + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -100,9 +99,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == MPIPytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: @@ -379,7 +380,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index d0861e3e3..c39ab5cf1 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -30,10 +30,9 @@ from functools import partial from pytools.obj_array import make_obj_array -from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext -) +from grudge.array_context import (PyOpenCLArrayContext, + MPIPytatoPyOpenCLArrayContext) + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -101,9 +100,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == MPIPytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 @@ -388,7 +389,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index fc5071029..eda68264e 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -29,10 +29,9 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext -) +from grudge.array_context import (PyOpenCLArrayContext, + MPIPytatoPyOpenCLArrayContext) + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -101,9 +100,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == MPIPytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control current_step = 0 @@ -402,7 +403,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) From ac4267460d917f3c538c4ca690156b83dc09b50f Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 11:53:21 -0600 Subject: [PATCH 348/873] Lift state interface to autoignition driver --- examples/autoignition-mpi.py | 89 +++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 9c842fb26..42e00e1dc 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -260,15 +260,21 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, gas_model = GasModel(eos=eos) from pytools.obj_array import make_obj_array - def get_temperature_update(state, temperature): - y = state.species_mass_fractions - e = eos.internal_energy(state) / state.mass + def get_temperature_update(cv, temperature): + y = cv.species_mass_fractions + e = eos.internal_energy(cv) / cv.mass return make_obj_array( [pyro_mechanism.get_temperature_update_energy(e, temperature, y)] ) + from mirgecom.gas_model import make_fluid_state + + def get_fluid_state(cv, temperature_seed): + return make_fluid_state(cv, gas_model, temperature_seed) + compute_temperature_update = actx.compile(get_temperature_update) compute_dependent_vars = actx.compile(eos.dependent_vars) + create_fluid_state = actx.compile(get_fluid_state) # }}} @@ -292,20 +298,20 @@ def get_temperature_update(state, temperature): from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) if order == rst_order: - current_state = restart_data["state"] - temperature_seed = restart_data["temperature"] + current_cv = restart_data["cv"] + temperature_seed = restart_data["temperature_seed"] else: - rst_state = restart_data["state"] + rst_cv = restart_data["cv"] old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, mpi_communicator=comm) from meshmode.discretization.connection import make_same_mesh_connection connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), old_discr.discr_from_dd("vol")) - current_state = connection(rst_state) - temperature_seed = connection(restart_data["temperature"]) + current_cv = connection(rst_cv) + temperature_seed = connection(restart_data["temperature_seed"]) else: # Set the current state from time 0 - current_state = initializer(eos=eos, x_vec=nodes) + current_cv = initializer(eos=eos, x_vec=nodes) # This bit memoizes the initial state's temperature onto the initial state # (assuming `initializer` just above didn't call eos.dv funcs.) @@ -326,8 +332,9 @@ def get_temperature_update(state, temperature): # and instead of writing the *current* running temperature to the restart file, # we could write the *temperature_seed*. That could fix up the non-deterministic # restart issue. - current_dv = compute_dependent_vars(current_state, - temperature_seed=temperature_seed) + current_fluid_state = create_fluid_state(current_cv, + temperature_seed=temperature_seed) + current_dv = current_fluid_state.dv temperature_seed = current_dv.temperature # import ipdb @@ -336,9 +343,9 @@ def get_temperature_update(state, temperature): # Inspection at physics debugging time if debug: print("Initial MIRGE-Com state:") - print(f"{current_state=}") - print(f"Initial DV pressure: {eos.pressure(current_state)}") - print(f"Initial DV temperature: {eos.temperature(current_state)}") + print(f"{current_cv=}") + print(f"Initial DV pressure: {current_fluid_state.pressure}") + print(f"Initial DV temperature: {current_fluid_state.temperature}") # }}} @@ -402,17 +409,17 @@ def my_write_viz(step, t, dt, state, ts_field=None, dv=None, write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True, vis_timer=vis_timer) - def my_write_restart(step, t, state): + def my_write_restart(step, t, state, temperature_seed): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) if rst_fname == rst_filename: if rank == 0: logger.info("Skipping overwrite of restart file.") else: - rst_dv = compute_dependent_vars(state) rst_data = { "local_mesh": local_mesh, - "state": state, - "temperature": rst_dv.temperature, + "cv": state.cv, + "temperature_seed": temperature_seed, + "temperature": state.temperature, "t": t, "step": step, "order": order, @@ -468,19 +475,19 @@ def my_health_check(cv, dv): from mirgecom.inviscid import get_inviscid_timestep def get_dt(state): - return make_obj_array([get_inviscid_timestep(discr, eos=eos, cv=state)]) + return make_obj_array([get_inviscid_timestep(discr, state=state)]) compute_dt = actx.compile(get_dt) from mirgecom.inviscid import get_inviscid_cfl def get_cfl(state, dt): - return make_obj_array([get_inviscid_cfl(discr, eos, dt, cv=state)]) + return make_obj_array([get_inviscid_cfl(discr, dt=dt, state=state)]) compute_cfl = actx.compile(get_cfl) - def get_production_rates(state): - return make_obj_array([eos.get_production_rates(state)]) + def get_production_rates(cv): + return make_obj_array([eos.get_production_rates(cv)]) compute_production_rates = actx.compile(get_production_rates) @@ -505,7 +512,8 @@ def my_get_timestep(t, dt, state): def my_pre_step(step, t, dt, state): cv, tseed = state - dv = compute_dependent_vars(cv, tseed) + fluid_state = create_fluid_state(cv, tseed) + dv = fluid_state.dv try: @@ -519,28 +527,23 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - if dv is None: - dv = compute_dependent_vars(cv, tseed) health_errors = global_reduce(my_health_check(cv, dv), op="lor") if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") - ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=cv) + ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=fluid_state) if do_status: - if dv is None: - dv = compute_dependent_vars(cv, tseed) my_write_status(dt=dt, cfl=cfl, dv=dv) if do_restart: - my_write_restart(step=step, t=t, state=cv) + my_write_restart(step=step, t=t, state=fluid_state, + temperature_seed=tseed) if do_viz: production_rates, = compute_production_rates(cv) - if dv is None: - dv = compute_dependent_vars(cv, tseed) my_write_viz(step=step, t=t, dt=dt, state=cv, dv=dv, production_rates=production_rates, ts_field=ts_field, cfl=cfl) @@ -548,15 +551,15 @@ def my_pre_step(step, t, dt, state): except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - # my_write_viz(step=step, t=t, dt=dt, state=state) - # my_write_restart(step=step, t=t, state=state) + # my_write_viz(step=step, t=t, dt=dt, state=cv) + # my_write_restart(step=step, t=t, state=fluid_state) raise return state, dt def my_post_step(step, t, dt, state): cv, tseed = state - new_dv = compute_dependent_vars(cv, tseed) + fluid_state = create_fluid_state(cv, tseed) # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -564,7 +567,7 @@ def my_post_step(step, t, dt, state): set_dt(logmgr, dt) set_sim_state(logmgr, dim, cv, eos) logmgr.tick_after() - return make_obj_array([cv, new_dv.temperature]), dt + return make_obj_array([cv, fluid_state.temperature]), dt def my_rhs(t, state): cv, tseed = state @@ -577,29 +580,31 @@ def my_rhs(t, state): + eos.get_species_source_terms(cv), 0*tseed]) - current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=make_obj_array([current_state, temperature_seed]), + state=make_obj_array([current_cv, temperature_seed]), t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_cv = current_state[0] - final_dv = compute_dependent_vars(final_cv) + final_cv, tseed = current_state + final_fluid_state = create_fluid_state(final_cv, tseed) + final_dv = final_fluid_state.dv final_dm, = compute_production_rates(final_cv) ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, - state=final_cv) + state=final_fluid_state) my_write_viz(step=current_step, t=current_t, dt=dt, state=final_cv, dv=final_dv, production_rates=final_dm, ts_field=ts_field, cfl=cfl) my_write_status(dt=dt, cfl=cfl, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=final_cv) + my_write_restart(step=current_step, t=current_t, state=final_fluid_state, + temperature_seed=tseed) if logmgr: logmgr.close() From 37d1cf3d8856ed930babae60f82e57075c7d0971 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 11:56:21 -0600 Subject: [PATCH 349/873] Remove unneeded wavespeed helper --- mirgecom/fluid.py | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 075a5e76b..9bba1cd3e 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -11,7 +11,6 @@ Helper Functions ^^^^^^^^^^^^^^^^ -.. autofunction:: compute_wavespeed .. autofunction:: velocity_gradient .. autofunction:: species_mass_fraction_gradient """ @@ -434,31 +433,3 @@ def species_mass_fraction_gradient(cv, grad_cv): """ y = cv.species_mass_fractions return (grad_cv.species_mass - np.outer(y, grad_cv.mass))/cv.mass - - -def wavespeed(eos, cv: ConservedVars): - r"""Return the wavespeed in the flow. - - The wavespeed is calculated as: - - .. math:: - - s_w = \|\mathbf{v}\| + c, - - where $\mathbf{v}$ is the flow velocity and c is the speed of sound in the fluid. - """ - return compute_wavespeed(cv, eos.sound_speed(cv)) - - -def compute_wavespeed(cv: ConservedVars, c): - r"""Return the wavespeed in the flow. - - The wavespeed is calculated as: - - .. math:: - - s_w = \|\mathbf{v}\| + c, - - where $\mathbf{v}$ is the flow velocity and c is the speed of sound in the fluid. - """ - return cv.speed + c From 7c16c49b579643a12619afe1613301e26c8b7c36 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 11:59:01 -0600 Subject: [PATCH 350/873] Add wavespeed attribute, viscous state indicator. --- mirgecom/gas_model.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 2e9bdc121..fede5a7c6 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -90,6 +90,7 @@ class FluidState: .. autoattribute:: temperature .. autoattribute:: velocity .. autoattribute:: speed + .. autoattribute:: wavespeed .. autoattribute:: speed_of_sound .. autoattribute:: mass_density .. autoattribute:: momentum_density @@ -167,9 +168,19 @@ def speed_of_sound(self): """Return the speed of sound in the gas.""" return self.dv.speed_of_sound + @property + def wavespeed(self): + """Return the characteristic wavespeed.""" + return self.cv.speed + self.dv.speed_of_sound + + @property + def has_transport(self): + """Indicate if this is a viscous state.""" + return self.tv is not None + def _get_transport_property(self, name): """Grab a transport property if transport model is present.""" - if self.tv is None: + if not self.has_transport: raise TransportModelRequired("Viscous transport model not provided.") return getattr(self.tv, name) From 0678ba0e416228dd350ee0e23ec29e93d260eefb Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 12:01:04 -0600 Subject: [PATCH 351/873] Adopt state interface for all inviscid routines. --- mirgecom/inviscid.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 0f2a5b75d..721ccc926 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -125,7 +125,7 @@ def inviscid_facial_divergence_flux(discr, state_tpair, local=False): return flux_weak -def get_inviscid_timestep(discr, eos, cv): +def get_inviscid_timestep(discr, state): """Return node-local stable timestep estimate for an inviscid fluid. The maximum stable timestep is computed from the acoustic wavespeed. @@ -145,14 +145,13 @@ def get_inviscid_timestep(discr, eos, cv): The maximum stable timestep at each node. """ from grudge.dt_utils import characteristic_lengthscales - from mirgecom.fluid import wavespeed return ( - characteristic_lengthscales(cv.array_context, discr) - / wavespeed(eos, cv) + characteristic_lengthscales(state.array_context, discr) + / state.wavespeed ) -def get_inviscid_cfl(discr, eos, dt, cv): +def get_inviscid_cfl(discr, state, dt): """Return node-local CFL based on current state and timestep. Parameters @@ -172,4 +171,4 @@ def get_inviscid_cfl(discr, eos, dt, cv): :class:`meshmode.dof_array.DOFArray` The CFL at each node. """ - return dt / get_inviscid_timestep(discr, eos=eos, cv=cv) + return dt / get_inviscid_timestep(discr, state=state) From 0447e9265f248c3fe1ab610840a0b871aba36636 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 12:01:47 -0600 Subject: [PATCH 352/873] Use state interface for computing dt --- mirgecom/simutil.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index e9d03571c..4dbd0f0d2 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -73,8 +73,7 @@ def check_step(step, interval): return False -def get_sim_timestep(discr, state, t, dt, cfl, eos, - t_final, constant_cfl=False): +def get_sim_timestep(discr, state, t, dt, cfl, t_final, constant_cfl=False): """Return the maximum stable timestep for a typical fluid simulation. This routine returns *dt*, the users defined constant timestep, or *max_dt*, the @@ -122,7 +121,7 @@ def get_sim_timestep(discr, state, t, dt, cfl, eos, mydt = state.array_context.to_numpy( cfl * nodal_min( discr, "vol", - get_viscous_timestep(discr=discr, eos=eos, cv=state)))[()] + get_viscous_timestep(discr=discr, state=state)))[()] return min(t_remaining, mydt) From 081debcf75537d54a6b4634e4e2b863c00e913df Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 12:02:25 -0600 Subject: [PATCH 353/873] Make transport dv an array container --- mirgecom/transport.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index d9fa8a6de..12471e6b3 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -42,6 +42,7 @@ """ from dataclasses import dataclass +from arraycontext import dataclass_array_container import numpy as np from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import ConservedVars @@ -54,7 +55,8 @@ class TransportModelRequired(Exception): pass -@dataclass +@dataclass_array_container +@dataclass(frozen=True) class TransportDependentVars: """State-dependent quantities for :class:`TransportModel`. From 9a43107523dd46ab5cdbeb77b7d960c0350a4998 Mon Sep 17 00:00:00 2001 From: CI Runner Date: Wed, 1 Dec 2021 12:03:42 -0600 Subject: [PATCH 354/873] Start porting the viscous module to use fluid state interface. --- mirgecom/viscous.py | 225 ++++++++------------------------------------ 1 file changed, 38 insertions(+), 187 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 726c3617f..25251cc91 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -55,47 +55,11 @@ from mirgecom.eos import MixtureEOS -def viscous_stress_tensor(discr, eos, cv, grad_cv): - r"""Compute the viscous stress tensor. - - The viscous stress tensor $\tau$ is defined by: - - .. math:: - - \mathbf{\tau} = \mu\left(\nabla{\mathbf{v}} - +\left(\nabla{\mathbf{v}}\right)^T\right) + (\mu_B - \frac{2\mu}{3}) - \left(\nabla\cdot\mathbf{v}\right) - - Parameters - ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` - The discretization to use - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state with a non-empty - :class:`~mirgecom.transport.TransportModel`. - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state - grad_cv: :class:`~mirgecom.fluid.ConservedVars` - Gradient of the fluid state +def _compute_viscous_stress_tensor(dim, mu, mu_b, grad_v): + return mu*(grad_v + grad_v.T) + (mu_b - 2*mu/3)*np.trace(grad_v)*np.eye(dim) - Returns - ------- - numpy.ndarray - The viscous stress tensor - """ - dim = cv.dim - transport = eos.transport_model() - - mu_b = transport.bulk_viscosity(eos, cv) - mu = transport.viscosity(eos, cv) - - grad_v = velocity_gradient(cv, grad_cv) - div_v = np.trace(grad_v) - return mu*(grad_v + grad_v.T) + (mu_b - 2*mu/3)*div_v*np.eye(dim) - - -def compute_viscous_stress_tensor(discr, cv, grad_cv, mu, mu_b=0): +def viscous_stress_tensor(state, grad_cv): r"""Compute the viscous stress tensor. The viscous stress tensor $\tau$ is defined by: @@ -110,27 +74,22 @@ def compute_viscous_stress_tensor(discr, cv, grad_cv, mu, mu_b=0): ---------- discr: :class:`grudge.eager.EagerDGDiscretization` The discretization to use - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state + state: :class:`~mirgecom.gas_model.FluidState` + Full conserved and thermal state of fluid grad_cv: :class:`~mirgecom.fluid.ConservedVars` Gradient of the fluid state - mu: float or :class:`~meshmode.dof_array.DOFArray` - The fluid viscosity - mu_b: float or :class:`~meshmod.dof_array.DOFArray` - The fluid bulk viscosity Returns ------- numpy.ndarray The viscous stress tensor """ - grad_v = velocity_gradient(cv, grad_cv) - div_v = np.trace(grad_v) - - return mu*(grad_v + grad_v.T) + (mu_b - 2*mu/3)*div_v*np.eye(cv.dim) + return _compute_viscous_stress_tensor( + dim=state.dim, mu=state.viscosity, mu_b=state.bulk_viscosity, + grad_v=velocity_gradient(state.cv, grad_cv)) -def diffusive_flux(discr, eos, cv, grad_cv): +def diffusive_flux(state, grad_cv): r"""Compute the species diffusive flux vector, ($\mathbf{J}_{\alpha}$). The species diffusive flux is defined by: @@ -158,45 +117,15 @@ def diffusive_flux(discr, eos, cv, grad_cv): numpy.ndarray The species diffusive flux vector, $\mathbf{J}_{\alpha}$ """ - transport = eos.transport_model() - - grad_y = species_mass_fraction_gradient(cv, grad_cv) - d = transport.species_diffusivity(eos, cv) - return -cv.mass*d.reshape(-1, 1)*grad_y - - -def compute_diffusive_flux(cv, grad_cv, d): - r"""Compute the species diffusive flux vector, ($\mathbf{J}_{\alpha}$). - - The species diffusive flux is defined by: - - .. math:: - - \mathbf{J}_{\alpha} = -\rho{d}_{(\alpha)}\nabla{Y_{\alpha}}~~ - (\mathtt{no~implied~sum}), - - with species diffusivities ${d}_{\alpha}$, and species mass - fractions ${Y}_{\alpha}$. + return (-state.cv.mass*state.species_diffusivity.reshape(-1, 1) + * species_mass_fraction_gradient(state.cv, grad_cv)) - Parameters - ---------- - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state - grad_cv: :class:`~mirgecom.fluid.ConservedVars` - Gradient of the fluid state - d: numpy.ndarray - Species diffusivities - Returns - ------- - numpy.ndarray - The species diffusive flux vector, $\mathbf{J}_{\alpha}$ - """ - grad_y = species_mass_fraction_gradient(cv, grad_cv) - return -cv.mass*d.reshape(-1, 1)*grad_y +def _compute_conductive_heat_flux(grad_t, kappa): + return -kappa*grad_t -def conductive_heat_flux(discr, eos, cv, grad_t): +def conductive_heat_flux(state, grad_t): r"""Compute the conductive heat flux, ($\mathbf{q}_{c}$). The conductive heat flux is defined by: @@ -224,37 +153,14 @@ def conductive_heat_flux(discr, eos, cv, grad_t): numpy.ndarray The conductive heat flux vector """ - transport = eos.transport_model() - return -transport.thermal_conductivity(eos, cv)*grad_t - + return _compute_conductive_heat_flux(grad_t, state.thermal_conductivity) -def compute_conductive_heat_flux(grad_t, kappa): - r"""Compute the conductive heat flux, ($\mathbf{q}_{c}$). - - The conductive heat flux is defined by: - - .. math:: - - \mathbf{q}_{c} = -\kappa\nabla{T}, - with thermal conductivity $\kappa$, and gas temperature $T$. - - Parameters - ---------- - kappa: float or :class:`~meshmode.dof_array.DOFArray` - Thermal conductivity - grad_t: numpy.ndarray - Gradient of the fluid temperature - - Returns - ------- - numpy.ndarray - The conductive heat flux vector - """ - return -kappa*grad_t +def _compute_diffusive_heat_flux(j, h_alpha): + return sum(h_alpha.reshape(-1, 1) * j) -def diffusive_heat_flux(discr, eos, cv, j): +def diffusive_heat_flux(state, j): r"""Compute the diffusive heat flux, ($\mathbf{q}_{d}$). The diffusive heat flux is defined by: @@ -290,48 +196,10 @@ def diffusive_heat_flux(discr, eos, cv, j): numpy.ndarray The total diffusive heat flux vector """ - if isinstance(eos, MixtureEOS): - return compute_diffusive_heat_flux(cv, j, eos.species_enthalpies(cv)) - return 0 - - -def compute_diffusive_heat_flux(cv, j, h_alpha): - r"""Compute the diffusive heat flux, ($\mathbf{q}_{d}$). - - The diffusive heat flux is defined by: - - .. math:: - - \mathbf{q}_{d} = \sum_{\alpha=1}^{\mathtt{Nspecies}}{h}_{\alpha} - \mathbf{J}_{\alpha}, - - with species specific enthalpy ${h}_{\alpha}$ and diffusive flux - ($\mathbf{J}_{\alpha}$) defined as: - - .. math:: - - \mathbf{J}_{\alpha} = -\rho{d}_{\alpha}\nabla{Y}_{\alpha}, - - where ${Y}_{\alpha}$ is the vector of species mass fractions. - - Parameters - ---------- - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state - j: numpy.ndarray - The species diffusive flux vector - h_alpha: numpy.ndarray - The species specific enthalpies - - Returns - ------- - numpy.ndarray - The total diffusive heat flux vector - """ - return sum(h_alpha.reshape(-1, 1) * j) + return _compute_diffusive_heat_flux(j, state.species_enthalpies) -def viscous_flux(discr, eos, cv, grad_cv, grad_t): +def viscous_flux(state, grad_cv, grad_t): r"""Compute the viscous flux vectors. The viscous fluxes are: @@ -371,32 +239,19 @@ def viscous_flux(discr, eos, cv, grad_cv, grad_t): The viscous transport flux vector if viscous transport properties are provided, scalar zero otherwise. """ - transport = eos.transport_model() - if transport is None: + if not state.has_transport: return 0 - dim = cv.dim - viscous_mass_flux = 0 * cv.momentum - d = transport.species_diffusivity(eos, cv) - j = compute_diffusive_flux(cv, grad_cv, d) - - heat_flux_diffusive = 0 - if eos isinstance(MixtureEOS): - h_alpha = eos.species_enthalpies(cv) - heat_flux_diffusive = compute_diffusive_heat_flux(cv, j, h_alpha) - - mu_b = transport.bulk_viscosity(eos, cv) - mu = transport.viscosity(eos, cv) - tau = compute_viscous_stress_tensor(cv, grad_cv, mu, mu_b) - - kappa = transport.thermal_conductivity(eos, cv) - heat_flux_conductive = compute_conductive_heat_flux(grad_t, kappa) + viscous_mass_flux = 0 * state.momentum + tau = viscous_stress_tensor(state, grad_cv) + j = diffusive_flux(state, grad_cv) viscous_energy_flux = ( - np.dot(tau, cv.velocity) - heat_flux_conductive - heat_flux_diffusive + np.dot(tau, state.velocity) - diffusive_heat_flux(state, j) + - conductive_heat_flux(state, grad_t) ) - return make_conserved(dim, + return make_conserved(state.dim, mass=viscous_mass_flux, energy=viscous_energy_flux, momentum=tau, species_mass=-j) @@ -450,17 +305,15 @@ def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair, return flux_weak -def get_viscous_timestep(discr, eos, cv): +def get_viscous_timestep(discr, state): """Routine returns the the node-local maximum stable viscous timestep. Parameters ---------- discr: grudge.eager.EagerDGDiscretization the discretization to use - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid solution + state: :class:`~mirgecom.gas_model.FluidState` + Full fluid conserved and thermal state Returns ------- @@ -468,28 +321,26 @@ def get_viscous_timestep(discr, eos, cv): The maximum stable timestep at each node. """ from grudge.dt_utils import characteristic_lengthscales - from mirgecom.fluid import wavespeed - length_scales = characteristic_lengthscales(cv.array_context, discr) + length_scales = characteristic_lengthscales(state.array_context, discr) mu = 0 d_alpha_max = 0 - transport = eos.transport_model() - if transport: - mu = transport.viscosity(eos, cv) + if state.has_transport: + mu = state.viscosity d_alpha_max = \ get_local_max_species_diffusivity( - cv.array_context, discr, - transport.species_diffusivity(eos, cv) + state.array_context, discr, + state.species_diffusivity ) return( - length_scales / (wavespeed(eos, cv) + length_scales / (state.wavespeed + ((mu + d_alpha_max) / length_scales)) ) -def get_viscous_cfl(discr, eos, dt, cv): +def get_viscous_cfl(discr, dt, state): """Calculate and return node-local CFL based on current state and timestep. Parameters @@ -508,7 +359,7 @@ def get_viscous_cfl(discr, eos, dt, cv): :class:`~meshmode.dof_array.DOFArray` The CFL at each node. """ - return dt / get_viscous_timestep(discr, eos=eos, cv=cv) + return dt / get_viscous_timestep(discr, state=state) def get_local_max_species_diffusivity(actx, discr, d_alpha): From a462fd2f4cef9ca6254a37d7406b69ac8133b238 Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 3 Dec 2021 07:36:28 -0600 Subject: [PATCH 355/873] Update from inviscid-only state handling --- doc/operators/gas-dynamics.rst | 1 + examples/autoignition-mpi.py | 2 +- examples/heat-source-mpi.py | 2 +- examples/lump-mpi.py | 48 +++++++------ examples/mixture-mpi.py | 123 ++++++++++++++++++--------------- examples/pulse-mpi.py | 34 +++++---- examples/scalar-lump-mpi.py | 64 +++++++++-------- examples/sod-mpi.py | 52 +++++++------- examples/vortex-mpi.py | 70 ++++++++++--------- examples/wave-mpi.py | 2 +- examples/wave.py | 2 +- mirgecom/boundary.py | 23 +++--- 12 files changed, 229 insertions(+), 194 deletions(-) diff --git a/doc/operators/gas-dynamics.rst b/doc/operators/gas-dynamics.rst index ea50880e2..93552283c 100644 --- a/doc/operators/gas-dynamics.rst +++ b/doc/operators/gas-dynamics.rst @@ -4,6 +4,7 @@ Gas Dynamics .. automodule:: mirgecom.fluid .. automodule:: mirgecom.eos .. automodule:: mirgecom.transport +.. automodule:: mirgecom.gas_model .. automodule:: mirgecom.initializers .. automodule:: mirgecom.euler .. automodule:: mirgecom.inviscid diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 42e00e1dc..aa1bfb4b1 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index ad6d32ea4..30e909112 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -29,7 +29,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index bdb7177ce..10f4320d8 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -50,6 +50,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state +from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Lump from mirgecom.eos import IdealSingleGas @@ -180,28 +181,31 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, orig = np.zeros(shape=(dim,)) vel[:dim] = 1.0 initializer = Lump(dim=dim, center=orig, velocity=vel) + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=eos) - def _lump_boundary(discr, btag, eos, cv_minus, dv_minus, time=0): - actx = cv_minus.mass.array_context + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return initializer(x_vec=nodes, eos=eos, cv=cv_minus, time=time) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) - from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_lump_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) } if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(nodes) + current_cv = initializer(nodes) + current_state = make_fluid_state(current_cv, gas_model) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -265,8 +269,9 @@ def my_health_check(dv, state, exact): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv try: - dv = None exact = None if logmgr: @@ -279,7 +284,6 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, time=t) health_errors = global_reduce( my_health_check(dv=dv, state=state, exact=exact), op="lor") @@ -292,8 +296,6 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact @@ -318,7 +320,7 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt @@ -332,28 +334,30 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - return euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) + fluid_state = make_fluid_state(state, gas_model) + return euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) - final_resid = current_state - final_exact - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + final_resid = current_state.cv - final_exact + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv, exact=final_exact, resid=final_resid) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=current_state.cv) if logmgr: logmgr.close() diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 7170424e1..ceebb8ff8 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -50,6 +50,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state +from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture @@ -179,10 +180,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, mech_cti = get_mechanism_cti("uiuc") sol = cantera.Solution(phase_id="gas", source=mech_cti) from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyro_mechanism = make_pyrometheus_mechanism_class(sol)(actx.np) + pyrometheus_mechanism = make_pyrometheus_mechanism_class(sol)(actx.np) - nspecies = pyro_mechanism.num_species - eos = PyrometheusMixture(pyro_mechanism) + nspecies = pyrometheus_mechanism.num_species + eos = PyrometheusMixture(pyrometheus_mechanism) + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=eos) + from pytools.obj_array import make_obj_array y0s = np.zeros(shape=(nspecies,)) for i in range(nspecies-1): @@ -195,28 +199,32 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, initializer = MixtureInitializer(dim=dim, nspecies=nspecies, massfractions=y0s, velocity=velocity) - def _mixture_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, - **kwargs): - actx = cv_minus.mass.array_context + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return initializer(x_vec=nodes, eos=eos, **kwargs) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model, + temperature_seed=state_minus.temperature) - from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_mixture_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) } if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] + tseed = restart_data["temperature_seed"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(x_vec=nodes, eos=eos) + current_cv = initializer(x_vec=nodes, eos=eos) + tseed = 300.0 + + current_state = make_fluid_state(current_cv, gas_model, temperature_seed=tseed) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -238,28 +246,27 @@ def my_write_status(component_errors): if rank == 0: logger.info(status_msg) - def my_write_viz(step, t, state, dv=None, exact=None, resid=None): - viz_fields = [("cv", state)] - if dv is None: - dv = eos.dependent_vars(state) + def my_write_viz(step, t, state, dv, exact=None, resid=None): if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: resid = state - exact - viz_fields = [("cv", state), - ("dv", dv), - ("exact_soln", exact), - ("residual", resid)] + viz_fields = [("cv", state), ("dv", dv)] + # viz_fields = [("cv", state), + # ("dv", dv), + # ("exact_soln", exact), + # ("residual", resid)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True, vis_timer=vis_timer) - def my_write_restart(step, t, state): + def my_write_restart(step, t, state, tseed): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, + "temperature_seed": tseed, "t": t, "step": step, "order": order, @@ -269,7 +276,7 @@ def my_write_restart(step, t, state): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(cv, dv, component_errors): + def my_health_check(dv, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local if check_naninf_local(discr, "vol", dv.pressure) \ @@ -283,18 +290,14 @@ def my_health_check(cv, dv, component_errors): if rank == 0: logger.info("Solution diverged from exact soln.") - y = cv.species_mass_fractions - e = eos.internal_energy(cv) / cv.mass - check_temp = pyro_mechanism.get_temperature(e, dv.temperature, y) - temp_resid = discr.norm(check_temp - dv.temperature, np.inf) - if temp_resid > 1e-12: - health_error = False - logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") return health_error def my_pre_step(step, t, dt, state): + cv, tseed = state + fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) + dv = fluid_state.dv + try: - dv = None exact = None component_errors = None @@ -308,28 +311,24 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - health_errors = \ - global_reduce(my_health_check(state, dv, - component_errors), op="lor") + component_errors = compare_fluid_solutions(discr, cv, exact) + health_errors = global_reduce( + my_health_check(dv, component_errors), op="lor") if health_errors: if rank == 0: logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") if do_restart: - my_write_restart(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=cv, tseed=tseed) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + my_write_viz(step=step, t=t, state=cv, dv=dv, exact=exact, resid=resid) if do_status: @@ -337,52 +336,64 @@ def my_pre_step(step, t, dt, state): if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) + component_errors = compare_fluid_solutions(discr, cv, exact) my_write_status(component_errors) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) - my_write_restart(step=step, t=t, state=state) + my_write_viz(step=step, t=t, state=cv, dv=dv) + my_write_restart(step=step, t=t, state=cv, tseed=tseed) raise - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt def my_post_step(step, t, dt, state): + cv, tseed = state + fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) + tseed = fluid_state.temperature # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) + set_sim_state(logmgr, dim, cv, eos) logmgr.tick_after() - return state, dt + return make_obj_array([fluid_state.cv, tseed]), dt def my_rhs(t, state): - return euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) + cv, tseed = state + fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) + return make_obj_array( + [euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model), + 0*tseed]) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, advanced_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final, eos=eos, - dim=dim) + state=make_obj_array([current_state.cv, + current_state.temperature]), + t=current_t, t_final=t_final, eos=eos, dim=dim) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + + current_cv, tseed = advanced_state + current_state = make_fluid_state(current_cv, gas_model, temperature_seed=tseed) + final_dv = current_state.dv final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) - final_resid = current_state - final_exact - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + final_resid = current_state.cv - final_exact + my_write_viz(step=current_step, t=current_t, state=current_cv, dv=final_dv, exact=final_exact, resid=final_resid) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=current_state.cv, + tseed=tseed) if logmgr: logmgr.close() diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 46bd9bcc5..014ae1485 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -33,7 +33,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -56,8 +56,10 @@ AcousticPulse ) from mirgecom.eos import IdealSingleGas -from mirgecom.gas_model import GasModel - +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging from mirgecom.logging_quantities import ( @@ -190,13 +192,15 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) + current_cv = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) + + current_state = make_fluid_state(current_cv, gas_model) visualizer = make_visualizer(discr) @@ -226,7 +230,7 @@ def my_write_restart(step, t, state): if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, "t": t, "step": step, "order": order, @@ -246,8 +250,10 @@ def my_health_check(pressure): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv + try: - dv = None if logmgr: logmgr.tick_before() @@ -258,7 +264,6 @@ def my_pre_step(step, t, dt, state): do_health = check_step(step=step, interval=nhealth) if do_health: - dv = eos.dependent_vars(state) health_errors = global_reduce(my_health_check(dv.pressure), op="lor") if health_errors: if rank == 0: @@ -269,8 +274,6 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) my_write_viz(step=step, t=t, state=state, dv=dv) except MyRuntimeError: @@ -280,7 +283,7 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt @@ -294,24 +297,25 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - from mirgecom.gas_model import make_fluid_state inviscid_state = make_fluid_state(cv=state, gas_model=gas_model) return euler_operator(discr, state=inviscid_state, time=t, boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) current_step, current_t, current_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + final_state = make_fluid_state(current_state, gas_model) + final_dv = final_state.dv + my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index c8088711d..07e0dda7b 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -51,6 +51,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state +from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import MulticomponentLump from mirgecom.eos import IdealSingleGas @@ -180,33 +181,36 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, spec_amplitudes = np.ones(shape=(nspecies,)) eos = IdealSingleGas() velocity = np.ones(shape=(dim,)) + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=eos) initializer = MulticomponentLump(dim=dim, nspecies=nspecies, spec_centers=centers, velocity=velocity, spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes) - def _my_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): - actx = cv_minus.mass.array_context + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return initializer(x_vec=nodes, eos=eos, time=time, **kwargs) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) - from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_my_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) } if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(nodes) + current_cv = initializer(nodes) + current_state = make_fluid_state(current_cv, gas_model) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -274,8 +278,11 @@ def my_health_check(pressure, component_errors): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + cv = fluid_state.cv + dv = fluid_state.dv + try: - dv = None exact = None component_errors = None @@ -289,10 +296,9 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) + component_errors = compare_fluid_solutions(discr, cv, exact) health_errors = global_reduce( my_health_check(dv.pressure, component_errors), op="lor") if health_errors: @@ -301,15 +307,13 @@ def my_pre_step(step, t, dt, state): raise MyRuntimeError("Failed simulation health check.") if do_restart: - my_write_restart(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=cv) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) - resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + resid = cv - exact + my_write_viz(step=step, t=t, state=cv, dv=dv, exact=exact, resid=resid) if do_status: @@ -317,17 +321,17 @@ def my_pre_step(step, t, dt, state): if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) + component_errors = compare_fluid_solutions(discr, cv, exact) my_write_status(component_errors) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) - my_write_restart(step=step, t=t, state=state) + my_write_viz(step=step, t=t, state=cv) + my_write_restart(step=step, t=t, state=cv) raise - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt @@ -341,28 +345,30 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - return euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) + fluid_state = make_fluid_state(state, gas_model) + return euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) - final_resid = current_state - final_exact - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + final_resid = current_state.cv - final_exact + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv, exact=final_exact, resid=final_resid) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=current_state.cv) if logmgr: logmgr.close() diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index a8e5c407b..e3587e4db 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -53,7 +53,7 @@ from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import SodShock1D from mirgecom.eos import IdealSingleGas - +from mirgecom.gas_model import GasModel, make_fluid_state from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging from mirgecom.logging_quantities import ( @@ -175,27 +175,30 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, initializer = SodShock1D(dim=dim) eos = IdealSingleGas() + gas_model = GasModel(eos=eos) - def _shock_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): - actx = cv_minus.mass.array_context + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return initializer(x_vec=nodes, eos=eos, **kwargs) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_shock_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) } - if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(nodes) + current_cv = initializer(nodes) + + current_state = make_fluid_state(current_cv, gas_model) visualizer = make_visualizer(discr) @@ -238,7 +241,7 @@ def my_write_restart(state, step, t): if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, "t": t, "step": step, "order": order, @@ -265,8 +268,10 @@ def my_health_check(pressure, component_errors): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv + try: - dv = None exact = None component_errors = None @@ -280,7 +285,6 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) @@ -295,8 +299,6 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact @@ -319,7 +321,7 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt @@ -333,28 +335,30 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - return euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) + fluid_state = make_fluid_state(state, gas_model) + return euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) - final_resid = current_state - final_exact - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + final_resid = current_state.cv - final_exact + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv, exact=final_exact, resid=final_resid) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=current_state.cv) if logmgr: logmgr.close() diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 5cfb0f2eb..d849545f2 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -53,7 +53,7 @@ from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Vortex2D from mirgecom.eos import IdealSingleGas - +from mirgecom.gas_model import GasModel, make_fluid_state from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -191,27 +191,31 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, orig = np.zeros(shape=(dim,)) vel[:dim] = 1.0 initializer = Vortex2D(center=orig, velocity=vel) + gas_model = GasModel(eos=eos) - def _vortex_boundary(discr, btag, eos, cv_minus, dv_minus, time=0, **kwargs): - actx = cv_minus.mass.array_context + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return initializer(x_vec=nodes, eos=eos, time=time, **kwargs) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_vortex_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) } if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(nodes) + current_cv = initializer(nodes) + + current_state = make_fluid_state(current_cv, gas_model) visualizer = make_visualizer(discr) @@ -237,7 +241,7 @@ def my_write_status(state, component_errors, cfl=None): cfl = actx.to_numpy( nodal_max( discr, "vol", - get_inviscid_cfl(discr, eos, current_dt, cv=state)))[()] + get_inviscid_cfl(discr, state, current_dt)))[()] if rank == 0: logger.info( f"------ {cfl=}\n" @@ -245,8 +249,6 @@ def my_write_status(state, component_errors, cfl=None): + ", ".join("%.3g" % en for en in component_errors)) def my_write_viz(step, t, state, dv=None, exact=None, resid=None): - if dv is None: - dv = eos.dependent_vars(state) if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) if resid is None: @@ -264,7 +266,7 @@ def my_write_restart(step, t, state): if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, "t": t, "step": step, "order": order, @@ -291,8 +293,11 @@ def my_health_check(pressure, component_errors): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + cv = fluid_state.cv + dv = fluid_state.dv + try: - dv = None exact = None component_errors = None @@ -305,10 +310,9 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) + component_errors = compare_fluid_solutions(discr, cv, exact) health_errors = global_reduce( my_health_check(dv.pressure, component_errors), op="lor") if health_errors: @@ -317,33 +321,31 @@ def my_pre_step(step, t, dt, state): raise MyRuntimeError("Failed simulation health check.") if do_restart: - my_write_restart(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=cv) if do_status: if component_errors is None: if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) - my_write_status(state, component_errors) + component_errors = compare_fluid_solutions(discr, cv, exact) + my_write_status(fluid_state, component_errors) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) if exact is None: exact = initializer(x_vec=nodes, eos=eos, time=t) resid = state - exact - my_write_viz(step=step, t=t, state=state, dv=dv, exact=exact, + my_write_viz(step=step, t=t, state=cv, dv=dv, exact=exact, resid=resid) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) - my_write_restart(step=step, t=t, state=state) + my_write_viz(step=step, t=t, state=cv) + my_write_restart(step=step, t=t, state=cv) raise - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, t_final, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt @@ -357,28 +359,30 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - return euler_operator(discr, cv=state, time=t, - boundaries=boundaries, eos=eos) + fluid_state = make_fluid_state(state, gas_model) + return euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) - final_resid = current_state - final_exact - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv, + final_resid = current_state.cv - final_exact + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv, exact=final_exact, resid=final_resid) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_restart(step=current_step, t=current_t, state=current_state.cv) if logmgr: logmgr.close() diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 642ee7ac4..f7ba0f662 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -30,7 +30,7 @@ from pytools.obj_array import flat_obj_array from meshmode.array_context import (PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext) + PytatoPyOpenCLArrayContext) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext # noqa diff --git a/examples/wave.py b/examples/wave.py index cf8607db3..27d922a40 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -37,7 +37,7 @@ from mirgecom.integrators import rk4_step from meshmode.array_context import (PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext) + PytatoPyOpenCLArrayContext) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index a3674137c..1f11f88d5 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -253,7 +253,7 @@ class AdiabaticSlipBoundary(PrescribedFluidBoundary): [Hesthaven_2008]_, Section 6.6, and correspond to the characteristic boundary conditions described in detail in [Poinsot_1992]_. - .. automethod:: adiabatic_slip_cv + .. automethod:: adiabatic_slip_state """ def __init__(self): @@ -300,16 +300,15 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): class AdiabaticNoslipMovingBoundary(PrescribedFluidBoundary): r"""Boundary condition implementing a noslip moving boundary. - .. automethod:: adiabatic_noslip_pair - .. automethod:: exterior_soln - .. automethod:: exterior_grad_q + .. automethod:: adiabatic_noslip_state + .. automethod:: adiabatic_noslip_grad_cv """ def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" PrescribedFluidBoundary.__init__( - self, boundary_cv_func=self.cv_plus, - fluid_solution_gradient_func=self.grad_cv_plus + self, boundary_state_func=self.adiabatic_noslip_state, + cv_gradient_func=self.adiabatic_noslip_grad_cv, ) # Check wall_velocity (assumes dim is correct) if wall_velocity is None: @@ -323,14 +322,16 @@ def adiabatic_noslip_state(self, discr, btag, state_minus, **kwargs): dim = discr.dim # Compute momentum solution - wall_pen = 2.0 * self._wall_velocity * cv_minus.mass - ext_mom = wall_pen - cv_minus.momentum # no-slip + wall_pen = 2.0 * self._wall_velocity * state_minus.mass_density + ext_mom = wall_pen - state_minus.momentum_density # no-slip # Form the external boundary solution with the new momentum - return make_conserved(dim=dim, mass=cv_minus.mass, energy=cv_minus.energy, - momentum=ext_mom, species_mass=cv_minus.species_mass) + return make_conserved(dim=dim, mass=state_minus.mass_density, + energy=state_minus.energy_density, + momentum=ext_mom, + species_mass=state_minus.species_mass_density) - def grad_cv_plus(self, nodes, nhat, grad_cv_minus, **kwargs): + def adiabatic_noslip_grad_cv(self, nodes, nhat, grad_cv_minus, **kwargs): """Get the exterior solution on the boundary.""" return(-grad_cv_minus) From 8d21c8ff64a3506b0af8030965c5bf94715c2f88 Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 3 Dec 2021 08:14:46 -0600 Subject: [PATCH 356/873] Update from inviscid-only state handling. --- mirgecom/eos.py | 72 ++++--- mirgecom/euler.py | 13 +- mirgecom/fluid.py | 12 +- mirgecom/flux.py | 70 ------- mirgecom/gas_model.py | 191 +++++++++++++++--- mirgecom/inviscid.py | 61 ++++-- mirgecom/simutil.py | 7 +- mirgecom/thermochemistry.py | 5 +- mirgecom/transport.py | 6 +- mirgecom/viscous.py | 155 +++++++++------ test/test_diffusion.py | 383 +++++++++++++++++++++++------------- test/test_eos.py | 17 +- test/test_euler.py | 76 ++++--- test/test_fluid.py | 8 +- test/test_inviscid.py | 23 ++- test/test_lazy.py | 38 +++- test/test_viscous.py | 46 +++-- 17 files changed, 757 insertions(+), 426 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index e5469296d..e72caecc1 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -6,8 +6,8 @@ This module is designed provide Equation of State objects used to compute and manage the relationships between and among state and thermodynamic variables. -.. autoexception:: TemperatureSeedRequired .. autoclass:: EOSDependentVars +.. autoclass:: MixtureDependentVars .. autoclass:: GasEOS .. autoclass:: MixtureEOS .. autoclass:: IdealSingleGas @@ -15,7 +15,8 @@ Exceptions ^^^^^^^^^^ -.. autoexception:: TemperatureSeedRequired +.. autoexception:: TemperatureSeedError +.. autoexception:: MixtureEOSError """ __copyright__ = """ @@ -52,12 +53,18 @@ from arraycontext import dataclass_array_container -class TemperatureSeedRequired(Exception): +class TemperatureSeedError(Exception): """Indicate that EOS is inappropriately called without seeding temperature.""" pass +class MixtureEOSError(Exception): + """Indicate that a mixture EOS is required for model evaluation.""" + + pass + + @dataclass_array_container @dataclass(frozen=True) class EOSDependentVars: @@ -75,6 +82,17 @@ class EOSDependentVars: speed_of_sound: np.ndarray +@dataclass_array_container +@dataclass(frozen=True) +class MixtureDependentVars(EOSDependentVars): + """Mixture state-dependent quantities for :class:`MixtureEOS`. + + ..attribute:: species_enthalpies + """ + + species_enthalpies: np.ndarray + + class GasEOS(metaclass=ABCMeta): r"""Abstract interface to equation of state class. @@ -94,7 +112,6 @@ class GasEOS(metaclass=ABCMeta): .. automethod:: total_energy .. automethod:: kinetic_energy .. automethod:: gamma - .. automethod:: transport_model .. automethod:: get_internal_energy """ @@ -104,7 +121,7 @@ def pressure(self, cv: ConservedVars): @abstractmethod def temperature(self, cv: ConservedVars, - reference_state: ConservedVars = None): + temperature_seed: DOFArray = None): """Get the gas temperature.""" @abstractmethod @@ -139,10 +156,6 @@ def kinetic_energy(self, cv: ConservedVars): def gamma(self, cv: ConservedVars): """Get the ratio of gas specific heats Cp/Cv.""" - @abstractmethod - def transport_model(self): - """Get the transport model if it exists.""" - @abstractmethod def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" @@ -152,7 +165,7 @@ def dependent_vars(self, cv: ConservedVars, """Get an agglomerated array of the dependent variables. Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) - may raise :exc:`TemperatureSeedRequired` if *temperature_seed* is not + may raise :exc:`TemperatureSeedError` if *temperature_seed* is not given. """ return EOSDependentVars( @@ -201,6 +214,21 @@ def get_production_rates(self, cv: ConservedVars): def get_species_source_terms(self, cv: ConservedVars): r"""Get the species mass source terms to be used on the RHS for chemistry.""" + def dependent_vars(self, cv: ConservedVars, + temperature_seed: DOFArray = None) -> MixtureDependentVars: + """Get an agglomerated array of the dependent variables. + + Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) + may raise :exc:`TemperatureSeedError` if *temperature_seed* is not + given. + """ + return MixtureDependentVars( + temperature=self.temperature(cv, temperature_seed), + pressure=self.pressure(cv), + speed_of_sound=self.sound_speed(cv), + species_enthalpies=self.species_enthalpies(cv) + ) + class IdealSingleGas(GasEOS): r"""Ideal gas law single-component gas ($p = \rho{R}{T}$). @@ -223,19 +251,13 @@ class IdealSingleGas(GasEOS): .. automethod:: total_energy .. automethod:: kinetic_energy .. automethod:: gamma - .. automethod:: transport_model .. automethod:: get_internal_energy """ - def __init__(self, gamma=1.4, gas_const=287.1, transport_model=None): + def __init__(self, gamma=1.4, gas_const=287.1): """Initialize Ideal Gas EOS parameters.""" self._gamma = gamma self._gas_const = gas_const - self._transport_model = transport_model - - def transport_model(self): - """Get the transport model object for this EOS.""" - return self._transport_model def gamma(self, cv: ConservedVars = None): """Get specific heat ratio Cp/Cv.""" @@ -473,7 +495,6 @@ class PyrometheusMixture(MixtureEOS): .. automethod:: total_energy .. automethod:: kinetic_energy .. automethod:: gamma - .. automethod:: transport_model .. automethod:: get_internal_energy .. automethod:: get_density .. automethod:: get_species_molecular_weights @@ -483,8 +504,7 @@ class PyrometheusMixture(MixtureEOS): .. automethod:: get_temperature_seed """ - def __init__(self, pyrometheus_mech, temperature_guess=300.0, - transport_model=None): + def __init__(self, pyrometheus_mech, temperature_guess=300.0): """Initialize Pyrometheus-based EOS with mechanism class. Parameters @@ -508,7 +528,6 @@ def __init__(self, pyrometheus_mech, temperature_guess=300.0, """ self._pyrometheus_mech = pyrometheus_mech self._tguess = temperature_guess - self._transport_model = transport_model def get_temperature_seed(self, cv, temperature_seed=None): """Get a *cv*-shape-consistent array with which to seed temperature calcuation. @@ -532,10 +551,6 @@ def get_temperature_seed(self, cv, temperature_seed=None): tseed = temperature_seed return tseed if isinstance(tseed, DOFArray) else tseed * (0*cv.mass + 1.0) - def transport_model(self): - """Get the transport model object for this EOS.""" - return self._transport_model - def heat_capacity_cp(self, cv: ConservedVars): r"""Get mixture-averaged specific heat capacity at constant pressure. @@ -805,8 +820,13 @@ def temperature(self, cv: ConservedVars, temperature_seed=None): @memoize_in(cv, (PyrometheusMixture.temperature, type(self._pyrometheus_mech))) def get_temp(): + # For mixtures, the temperature calcuation *must* be seeded. This + # check catches any actual temperature calculation that did not + # provide a seed. Subsequent calls to *temperature* may or may + # not provide a seed - but those calls don't matter as the temperature + # calculation is actually performed only once per conserved state (cv). if temperature_seed is None: - raise TemperatureSeedRequired("MixtureEOS.get_temperature requires" + raise TemperatureSeedError("MixtureEOS.get_temperature requires" " a *temperature_seed*.") tseed = self.get_temperature_seed(cv, temperature_seed) y = cv.species_mass_fractions diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 23b691962..bb0e8324a 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -81,23 +81,28 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0): Parameters ---------- - state: :class:`mirgecom.gas_model.FluidState` + state: :class:`~mirgecom.gas_model.FluidState` + Fluid state object with the conserved state, and dependent quantities. boundaries + Dictionary of boundary functions, one for each valid btag time + Time - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. + gas_model: :class:`~mirgecom.gas_model.GasModel` + + Physical gas model including equation of state, transport, + and kinetic properties as required by fluid state Returns ------- numpy.ndarray + Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 9bba1cd3e..04a90ce80 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -1,7 +1,7 @@ """:mod:`mirgecom.fluid` provides common utilities for fluid simulation. -State Vector Handling -^^^^^^^^^^^^^^^^^^^^^ +Conserved Quantities Handling +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ConservedVars .. autofunction:: split_conserved @@ -88,14 +88,14 @@ class ConservedVars: .. attribute:: momentum - Object array (:class:`~numpy.ndarray`) with shape ``(ndim,)`` + Object array (:class:`numpy.ndarray`) with shape ``(ndim,)`` of :class:`~meshmode.dof_array.DOFArray` , or an object array with shape ``(ndim, ndim)`` respectively for scalar or vector quantities corresponding to the ndim equations of momentum conservation. .. attribute:: species_mass - Object array (:class:`~numpy.ndarray`) with shape ``(nspecies,)`` + Object array (:class:`numpy.ndarray`) with shape ``(nspecies,)`` of :class:`~meshmode.dof_array.DOFArray`, or an object array with shape ``(nspecies, ndim)`` respectively for scalar or vector quantities corresponding to the `nspecies` species mass conservation equations. @@ -431,5 +431,5 @@ def species_mass_fraction_gradient(cv, grad_cv): object array of :class:`~meshmode.dof_array.DOFArray` representing $\partial_j{Y}_{\alpha}$. """ - y = cv.species_mass_fractions - return (grad_cv.species_mass - np.outer(y, grad_cv.mass))/cv.mass + return (grad_cv.species_mass + - np.outer(cv.species_mass_fractions, grad_cv.mass))/cv.mass diff --git a/mirgecom/flux.py b/mirgecom/flux.py index 2f217ecef..92d5ff838 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -211,73 +211,3 @@ def flux_lfr(cv_tpair, f_tpair, normal, lam): """ from arraycontext import outer return f_tpair.avg - lam*outer(cv_tpair.diff, normal)/2 - -# This one knows about fluid stuff -def rusanov_flux(state_tpair, normal): - actx = state_tpair.int.array_context - - # This calculates the local maximum eigenvalue of the flux Jacobian - # for a single component gas, i.e. the element-local max wavespeed |v| + c. - w_int = \ - np.abs(np.dot(state_tpair.int.velocity, normal) - - state_tpair.int.dv.speed_of_sound) - w_ext = \ - np.abs(np.dot(state_tpair.ext.velocity, normal) - + state_tpair.ext.dv.speed_of_sound) - - # w_int = state_tpair.int.dv.speed_of_sound + state_tpair.int.cv.speed - # w_ext = state_tpair.ext.dv.speed_of_sound + state_tpair.ext.cv.speed - lam = actx.np.maximum(w_int, w_ext) - from grudge.trace_pair import TracePair - from mirgecom.inviscid import inviscid_flux - q_tpair = TracePair(state_tpair.dd, interior=state_tpair.int.cv, - exterior=state_tpair.ext.cv) - f_tpair = TracePair(state_tpair.dd, interior=inviscid_flux(state_tpair.int), - exterior=inviscid_flux(state_tpair.ext)) - return flux_reconstruction_lfr(q_tpair, f_tpair, lam, normal) - - -def flux_reconstruction_lfr(q_tpair, f_tpair, lam, normal): - """Rusanov if lam=max(wavespeed), LF if lam=(gridspeed).""" - from arraycontext import outer - return f_tpair.avg - .5*lam*outer(q_tpair.diff, normal) - - -def flux_reconstruction_hll(q_tpair, f_tpair, s_tpair, normal): - r"""Compute Harten-Lax-vanLeer (HLL) flux reconstruction - - The HLL flux is calculated as: - - .. math:: - - \mathbf{F}_{\mathtt{HLL}} = \frac{S^+~\mathbf{F}^- - S^-~\mathbf{F}^+ - + S^+~S^-\left(Q^+ - Q^-\right)}{S^+ - S^-} - - where $Q^{\left{-,+\right}}, \mathbf{F}^{\left{-,+\right}}$ are the scalar - solution components and fluxes on the left(interior) and the right(exterior) of - the face on which the flux is to be reconstructed. - - Parameters - ---------- - q_tpair: :class:`~grudge.trace_pair.TracePair` - - Solution trace pair for faces for which numerical flux is to be calculated - - f_tpair: :class:`~grudge.trace_pair.TracePair` - - Physical flux trace pair on faces on which numerical flux is to be calculated - - s_tpair: :class:`~grudge.trace_pair.TracePair` - - The wavespeeds at the faces for which the numerical flux is to be calculated - - Returns - ------- - numpy.ndarray - - object array of :class:`~meshmode.dof_array.DOFArray` with the - HLL reconstructed flux - """ - from arraycontext import outer - return (s_tpair.ext*f_tpair.int - s_tpair.int*f_tpair.ext - + s_tpair.int * s_tpair.ext * outer(q_tpair.diff, normal)) / s_tpair.diff diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index fede5a7c6..9744f4718 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -1,13 +1,18 @@ """:mod:`mirgecom.gas_model` provides utilities to deal with gases. +Physical Gas Model Encapsulation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: GasModel + Fluid State Handling ^^^^^^^^^^^^^^^^^^^^ .. autoclass:: FluidState -.. autofunction: make_fluid_state -.. autofunction: make_fluid_state_on_boundary -.. autofunction: make_fluid_state_trace_pairs - +.. autofunction:: make_fluid_state +.. autofunction:: project_fluid_state +.. autofunction:: make_fluid_state_trace_pairs +.. autofunction:: make_fluid_state_interior_trace_pair """ __copyright__ = """ @@ -40,11 +45,13 @@ from mirgecom.fluid import ConservedVars from mirgecom.eos import ( GasEOS, - EOSDependentVars + EOSDependentVars, + MixtureDependentVars, + MixtureEOSError ) from mirgecom.transport import ( TransportModel, - TransportModelRequired, + TransportModelError, TransportDependentVars ) @@ -54,7 +61,13 @@ class GasModel: r"""Physical gas model for calculating fluid state-dependent quantities. .. attribute:: eos + + A gas equation of state to provide thermal properties. + .. attribute:: transport_model + + A gas transport model to provide transport properties. None for inviscid + models. """ eos: GasEOS @@ -66,23 +79,19 @@ class GasModel: class FluidState: r"""Gas model-consistent fluid state. - Data attributes - ^^^^^^^^^^^^^^^ .. attribute:: cv - :class:`~mirgecom.fluid.ConservedVars` for the fluid conserved state + Fluid conserved quantities .. attribute:: dv - :class:`~mirgecom.eos.EOSDependentVars` for the fluid state-dependent - quantities corresponding to the chosen equation of state. + Fluid state-dependent quantities corresponding to the chosen equation of + state. .. attribute:: tv - :class:`~mirgecom.transport.TransportDependentVars` for the fluid - state-dependent transport properties. - Properties - ^^^^^^^^^^ + Fluid state-dependent transport properties. + .. autoattribute:: array_context .. autoattribute:: dim .. autoattribute:: nspecies @@ -105,7 +114,7 @@ class FluidState: @property def array_context(self): - """Return an array context for the :class:`ConservedVars` object.""" + """Return the relevant array context for this object.""" return self.cv.array_context @property @@ -178,20 +187,73 @@ def has_transport(self): """Indicate if this is a viscous state.""" return self.tv is not None + @property + def is_mixture(self): + """Indicate if this is a state resulting from a mixture gas model.""" + return isinstance(self.dv, MixtureDependentVars) + def _get_transport_property(self, name): """Grab a transport property if transport model is present.""" if not self.has_transport: - raise TransportModelRequired("Viscous transport model not provided.") + raise TransportModelError("Viscous transport model not provided.") return getattr(self.tv, name) + def _get_mixture_property(self, name): + """Grab a mixture property if EOS is a :class:`~mirgecom.eos.MixtureEOS`.""" + if not self.is_mixture: + raise MixtureEOSError("Mixture EOS required for mixture properties.") + return getattr(self.dv, name) + @property def viscosity(self): """Return the fluid viscosity.""" return self._get_transport_property("viscosity") + @property + def bulk_viscosity(self): + """Return the fluid bulk viscosity.""" + return self._get_transport_property("bulk_viscosity") + + @property + def thermal_conductivity(self): + """Return the fluid thermal conductivity.""" + return self._get_transport_property("thermal_conductivity") + + @property + def species_diffusivity(self): + """Return the fluid species diffusivities.""" + return self._get_transport_property("species_diffusivity") + + @property + def species_enthalpies(self): + """Return the fluid species diffusivities.""" + return self._get_mixture_property("species_enthalpies") + def make_fluid_state(cv, gas_model, temperature_seed=None): - """Create a fluid state from the conserved vars and equation of state.""" + """Create a fluid state from the conserved vars and physical gas model. + + Parameters + ---------- + cv: :class:`~mirgecom.fluid.ConservedVars` + + The gas conserved state + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + The physical model for the gas/fluid. + + temperature_seed: :class:`~meshmode.dof_array.DOFArray` or float + + An optional array or number with the temperature to use as a seed + for a temperature evaluation for the created fluid state + + Returns + ------- + :class:`~mirgecom.gas_model.FluidState` + + Thermally consistent fluid state + """ dv = gas_model.eos.dependent_vars(cv, temperature_seed=temperature_seed) tv = None if gas_model.transport is not None: @@ -199,15 +261,40 @@ def make_fluid_state(cv, gas_model, temperature_seed=None): return FluidState(cv=cv, dv=dv, tv=tv) -def project_fluid_state(discr, btag, fluid_state, gas_model): - """Create a fluid state from the conserved vars and equation of state.""" - """Create a fluid state from volume :class:`FluidState` *fluid_state* - by projection onto the boundary and ensuring thermal consistency. +def project_fluid_state(discr, btag, state, gas_model): + """Project a fluid state onto a boundary consistent with the gas model. + + If required by the gas model, (e.g. gas is a mixture), this routine will + ensure that the returned state is thermally consistent. + + Parameters + ---------- + discr: :class:`~grudge.eager.EagerDGDiscretization` + + A discretization collection encapsulating the DG elements + + btag: + + A boundary tag indicating the boundary to which to project the state + + state: :class:`~mirgecom.gas_model.FluidState` + + The full fluid conserved and thermal state + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + The physical model constructs for the gas_model + + Returns + ------- + :class:`~mirgecom.gas_model.FluidState` + + Thermally consistent fluid state """ - cv_sd = discr.project("vol", btag, fluid_state.cv) + cv_sd = discr.project("vol", btag, state.cv) temperature_seed = None - if fluid_state.cv.nspecies > 0: - temperature_seed = discr.project("vol", btag, fluid_state.dv.temperature) + if state.is_mixture > 0: + temperature_seed = discr.project("vol", btag, state.dv.temperature) return make_fluid_state(cv=cv_sd, gas_model=gas_model, temperature_seed=temperature_seed) @@ -220,7 +307,35 @@ def _getattr_ish(obj, name): def make_fluid_state_trace_pairs(cv_pairs, gas_model, temperature_seed_pairs=None): - """Create a fluid state from the conserved vars and equation of state.""" + """Create a fluid state from the conserved vars and equation of state. + + This routine helps create a thermally consistent fluid state out of a collection + of CV (:class:`~mirgecom.fluid.ConservedVars`) pairs. It is useful for creating + consistent boundary states for partition boundaries. + + Parameters + ---------- + cv_pairs: list of :class:`~grudge.trace_pair.TracePair` + + List of tracepairs of fluid CV (:class:`~mirgecom.fluid.ConservedVars`) for + each boundary on which the thermally consistent state is desired + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + The physical model constructs for the gas_model + + temperature_seed_pairs: list of :class:`~grudge.trace_pair.TracePair` + + List of tracepairs of :class:`~meshmode.dof_array.DOFArray` with the + temperature seeds to use in creation of the thermally consistent states. + + Returns + ------- + List of :class:`~grudge.trace_pair.TracePair` + + List of tracepairs of thermally consistent states + (:class:`~mirgecom.gas_model.FluidState`) for each boundary in the input set + """ from grudge.trace_pair import TracePair if temperature_seed_pairs is None: temperature_seed_pairs = [None] * len(cv_pairs) @@ -234,7 +349,29 @@ def make_fluid_state_trace_pairs(cv_pairs, gas_model, temperature_seed_pairs=Non def make_fluid_state_interior_trace_pair(discr, state, gas_model): - """Create a fluid state from the conserved vars and equation of state.""" + """Create a fluid state on interior faces using the volume state and gas model. + + Parameters + ---------- + discr: :class:`~grudge.eager.EagerDGDiscretization` + + A discretization collection encapsulating the DG elements + + state: :class:`~mirgecom.gas_model.FluidState` + + The full fluid conserved and thermal state + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + The physical model constructs for the gas_model + + Returns + ------- + :class:`~grudge.trace_pair.TracePair` + + A tracepair of thermally consistent states + (:class:`~mirgecom.gas_model.FluidState`) on the interior faces + """ from grudge.eager import interior_trace_pair from grudge.trace_pair import TracePair cv_tpair = interior_trace_pair(discr, state.cv) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 721ccc926..074bece3e 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -57,6 +57,19 @@ def inviscid_flux(state): object with a *dim-vector* for each conservation equation. See :class:`mirgecom.fluid.ConservedVars` for more information about how the fluxes are represented. + + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + + Full fluid conserved and thermal state. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + + A CV object containing the inviscid flux vector for each + conservation equation. """ mass_flux = state.momentum_density energy_flux = state.velocity * (state.energy_density + state.pressure) @@ -90,15 +103,30 @@ def inviscid_facial_divergence_flux(discr, state_tpair, local=False): Parameters ---------- - cv_tpair: :class:`grudge.trace_pair.TracePair` - Trace pair of :class:`mirgecom.fluid.ConservedVars` for the face upon + discr: :class:`~grudge.eager.EagerDGDiscretization` + + The discretization collection to use + + state_tpair: :class:`~grudge.trace_pair.TracePair` + + Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon which the flux calculation is to be performed local: bool + Indicates whether to skip projection of fluxes to "all_faces" or not. If set to *False* (the default), the returned fluxes are projected to "all_faces." If set to *True*, the returned fluxes are not projected to "all_faces"; remaining instead on the boundary restriction. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + + A CV object containing the scalar numerical fluxes at the input faces. + The returned fluxes are scalar because they've already been dotted with + the face normals as required by the divergence operator for which they + are being computed. """ actx = state_tpair.int.array_context flux_tpair = TracePair(state_tpair.dd, @@ -133,15 +161,17 @@ def get_inviscid_timestep(discr, state): Parameters ---------- discr: grudge.eager.EagerDGDiscretization + the discretization to use - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid solution + + state: :class:`~mirgecom.gas_model.FluidState` + + Full fluid conserved and thermal state + Returns ------- class:`~meshmode.dof_array.DOFArray` + The maximum stable timestep at each node. """ from grudge.dt_utils import characteristic_lengthscales @@ -156,19 +186,22 @@ def get_inviscid_cfl(discr, state, dt): Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` + discr: :class:`~grudge.eager.EagerDGDiscretization` + the discretization to use - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. + dt: float or :class:`~meshmode.dof_array.DOFArray` + A constant scalar dt or node-local dt - cv: :class:`~mirgecom.fluid.ConservedVars` - The fluid conserved variables + + state: :class:`~mirgecom.gas_model.FluidState` + + The full fluid conserved and thermal state Returns ------- - :class:`meshmode.dof_array.DOFArray` + :class:`~meshmode.dof_array.DOFArray` + The CFL at each node. """ return dt / get_inviscid_timestep(discr, state=state) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 070962d5e..43db2e395 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -91,8 +91,8 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final, constant_cfl=False): ---------- discr Grudge discretization or discretization collection? - state: :class:`~mirgecom.fluid.ConservedVars` - The fluid state. + state: :class:`~mirgecom.gas_model.FluidState` + The full fluid conserved and thermal state t: float Current time t_final: float @@ -101,9 +101,6 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final, constant_cfl=False): The current timestep cfl: float The current CFL number - eos: :class:`~mirgecom.eos.GasEOS` - Gas equation-of-state optionally with a non-empty - :class:`~mirgecom.transport.TransportModel` for viscous transport properties. constant_cfl: bool True if running constant CFL mode diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 081cc28a7..0d314c17d 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -66,7 +66,9 @@ def get_concentrations(self, rho, mass_fractions): zero, concs[i]) return concs - # This is the temperature update for *get_temperature* + # This is the temperature update for *get_temperature*. Having this + # separated out allows it to be used in the fluid drivers for evaluating + # convergence of the temperature calculation. def get_temperature_update_energy(self, e_in, t_in, y): pv_func = self.get_mixture_specific_heat_cv_mass he_func = self.get_mixture_internal_energy_mass @@ -128,6 +130,7 @@ def make_pyrometheus_mechanism_class(cantera_soln, temperature_niter=5): return _pyro_thermochem_wrapper_class(cantera_soln, temperature_niter) +# backwards compat def make_pyrometheus_mechanism(actx, cantera_soln): """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism. diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 12471e6b3..89154f352 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -14,7 +14,9 @@ .. autoclass:: SimpleTransport .. autoclass:: PowerLawTransport -.. autoexception:: TransportModelRequired +Exceptions +^^^^^^^^^^ +.. autoexception:: TransportModelError """ __copyright__ = """ @@ -49,7 +51,7 @@ from mirgecom.eos import GasEOS -class TransportModelRequired(Exception): +class TransportModelError(Exception): """Indicate that transport model is required for model evaluation.""" pass diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 25251cc91..8fb50d7c8 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -52,11 +52,12 @@ species_mass_fraction_gradient, make_conserved ) -from mirgecom.eos import MixtureEOS +# low level routine works with numpy arrays and can be tested without +# a full grid + fluid state, etc def _compute_viscous_stress_tensor(dim, mu, mu_b, grad_v): - return mu*(grad_v + grad_v.T) + (mu_b - 2*mu/3)*np.trace(grad_v)*np.eye(dim) + return mu*(grad_v + grad_v.T) + (mu_b - 2*mu/3)*np.trace(grad_v)*np.eye(dim) def viscous_stress_tensor(state, grad_cv): @@ -72,16 +73,18 @@ def viscous_stress_tensor(state, grad_cv): Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` - The discretization to use state: :class:`~mirgecom.gas_model.FluidState` + Full conserved and thermal state of fluid + grad_cv: :class:`~mirgecom.fluid.ConservedVars` + Gradient of the fluid state Returns ------- numpy.ndarray + The viscous stress tensor """ return _compute_viscous_stress_tensor( @@ -89,6 +92,12 @@ def viscous_stress_tensor(state, grad_cv): grad_v=velocity_gradient(state.cv, grad_cv)) +# low level routine works with numpy arrays and can be tested without +# a full grid + fluid state, etc +def _compute_diffusive_flux(density, d_alpha, grad_y): + return -density*d_alpha.reshape(-1, 1)*grad_y + + def diffusive_flux(state, grad_cv): r"""Compute the species diffusive flux vector, ($\mathbf{J}_{\alpha}$). @@ -104,23 +113,26 @@ def diffusive_flux(state, grad_cv): Parameters ---------- - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state with a non-empty - :class:`~mirgecom.transport.TransportModel` - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state + state: :class:`~mirgecom.gas_model.FluidState` + + Full fluid conserved and thermal state + grad_cv: :class:`~mirgecom.fluid.ConservedVars` + Gradient of the fluid state Returns ------- numpy.ndarray + The species diffusive flux vector, $\mathbf{J}_{\alpha}$ """ - return (-state.cv.mass*state.species_diffusivity.reshape(-1, 1) - * species_mass_fraction_gradient(state.cv, grad_cv)) + return _compute_diffusive_flux(state.mass_density, state.species_diffusivity, + species_mass_fraction_gradient(state.cv, grad_cv)) +# low level routine works with numpy arrays and can be tested without +# a full grid + fluid state, etc def _compute_conductive_heat_flux(grad_t, kappa): return -kappa*grad_t @@ -138,24 +150,25 @@ def conductive_heat_flux(state, grad_t): Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` - The discretization to use - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state with a non-empty - :class:`~mirgecom.transport.TransportModel` - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state + state: :class:`~mirgecom.gas_model.FluidState` + + Full fluid conserved and thermal state + grad_t: numpy.ndarray + Gradient of the fluid temperature Returns ------- numpy.ndarray + The conductive heat flux vector """ return _compute_conductive_heat_flux(grad_t, state.thermal_conductivity) +# low level routine works with numpy arrays and can be tested without +# a full grid + fluid state, etc def _compute_diffusive_heat_flux(j, h_alpha): return sum(h_alpha.reshape(-1, 1) * j) @@ -181,22 +194,23 @@ def diffusive_heat_flux(state, j): Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` - The discretization to use - eos: mirgecom.eos.GasEOS - A gas equation of state with a non-empty - :class:`~mirgecom.transport.TransportModel` - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state + state: :class:`~mirgecom.gas_model.FluidState` + + Full fluid conserved and thermal state + j: numpy.ndarray + The species diffusive flux vector Returns ------- numpy.ndarray + The total diffusive heat flux vector """ - return _compute_diffusive_heat_flux(j, state.species_enthalpies) + if state.is_mixture: + return _compute_diffusive_heat_flux(j, state.species_enthalpies) + return 0 def viscous_flux(state, grad_cv, grad_t): @@ -222,27 +236,29 @@ def viscous_flux(state, grad_cv, grad_t): Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` - The discretization to use - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid state + state: :class:`~mirgecom.gas_model.FluidState` + + Full fluid conserved and thermal state + grad_cv: :class:`~mirgecom.fluid.ConservedVars` + Gradient of the fluid state + grad_t: numpy.ndarray + Gradient of the fluid temperature Returns ------- :class:`~mirgecom.fluid.ConservedVars` or float + The viscous transport flux vector if viscous transport properties are provided, scalar zero otherwise. """ if not state.has_transport: return 0 - viscous_mass_flux = 0 * state.momentum + viscous_mass_flux = 0 * state.momentum_density tau = viscous_stress_tensor(state, grad_cv) j = diffusive_flux(state, grad_cv) @@ -257,25 +273,32 @@ def viscous_flux(state, grad_cv, grad_t): momentum=tau, species_mass=-j) -def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair, +def viscous_facial_flux(discr, state_tpair, grad_cv_tpair, grad_t_tpair, local=False): """Return the viscous flux across a face given the solution on both sides. Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` + discr: :class:`~grudge.eager.EagerDGDiscretization` + The discretization to use - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state - cv_tpair: :class:`grudge.trace_pair.TracePair` - Trace pair of :class:`~mirgecom.fluid.ConservedVars` with the fluid solution - on the faces - grad_cv_tpair: :class:`grudge.trace_pair.TracePair` + + state_tpair: :class:`~grudge.trace_pair.TracePair` + + Trace pair of :class:`~mirgecom.gas_model.FluidState` with the full fluid + conserved and thermal state on the faces + + grad_cv_tpair: :class:`~grudge.trace_pair.TracePair` + Trace pair of :class:`~mirgecom.fluid.ConservedVars` with the gradient of the fluid solution on the faces - grad_t_tpair: :class:`grudge.trace_pair.TracePair` + + grad_t_tpair: :class:`~grudge.trace_pair.TracePair` + Trace pair of temperature gradient on the faces. + local: bool + Indicates whether to skip projection of fluxes to "all_faces" or not. If set to *False* (the default), the returned fluxes are projected to "all_faces". If set to *True*, the returned fluxes are not projected to @@ -284,24 +307,25 @@ def viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair, Returns ------- :class:`~mirgecom.fluid.ConservedVars` + The viscous transport flux in the face-normal direction on "all_faces" or local to the sub-discretization depending on *local* input parameter """ - actx = cv_tpair.int.array_context - normal = thaw(actx, discr.normal(cv_tpair.dd)) + actx = state_tpair.int.array_context + normal = thaw(actx, discr.normal(state_tpair.dd)) - f_int = viscous_flux(discr, eos, cv_tpair.int, grad_cv_tpair.int, + f_int = viscous_flux(state_tpair.int, grad_cv_tpair.int, grad_t_tpair.int) - f_ext = viscous_flux(discr, eos, cv_tpair.ext, grad_cv_tpair.ext, + f_ext = viscous_flux(state_tpair.ext, grad_cv_tpair.ext, grad_t_tpair.ext) - f_tpair = TracePair(cv_tpair.dd, interior=f_int, exterior=f_ext) + f_tpair = TracePair(state_tpair.dd, interior=f_int, exterior=f_ext) # todo: user-supplied flux routine # note: Hard-code central flux here for BR1 flux_weak = divergence_flux_central(f_tpair, normal) if not local: - return discr.project(cv_tpair.dd, "all_faces", flux_weak) + return discr.project(state_tpair.dd, "all_faces", flux_weak) return flux_weak @@ -311,13 +335,17 @@ def get_viscous_timestep(discr, state): Parameters ---------- discr: grudge.eager.EagerDGDiscretization + the discretization to use + state: :class:`~mirgecom.gas_model.FluidState` + Full fluid conserved and thermal state Returns ------- :class:`~meshmode.dof_array.DOFArray` + The maximum stable timestep at each node. """ from grudge.dt_utils import characteristic_lengthscales @@ -330,7 +358,7 @@ def get_viscous_timestep(discr, state): mu = state.viscosity d_alpha_max = \ get_local_max_species_diffusivity( - state.array_context, discr, + state.array_context, state.species_diffusivity ) @@ -345,34 +373,45 @@ def get_viscous_cfl(discr, dt, state): Parameters ---------- - discr: :class:`grudge.eager.EagerDGDiscretization` + discr: :class:`~grudge.eager.EagerDGDiscretization` + the discretization to use - eos: :class:`~mirgecom.eos.GasEOS` - A gas equation of state + dt: float or :class:`~meshmode.dof_array.DOFArray` + A constant scalar dt or node-local dt - cv: :class:`~mirgecom.fluid.ConservedVars` - The fluid conserved variables + + state: :class:`~mirgecom.gas_model.FluidState` + + The full fluid conserved and thermal state Returns ------- :class:`~meshmode.dof_array.DOFArray` + The CFL at each node. """ return dt / get_viscous_timestep(discr, state=state) -def get_local_max_species_diffusivity(actx, discr, d_alpha): +def get_local_max_species_diffusivity(actx, d_alpha): """Return the maximum species diffusivity at every point. Parameters ---------- - actx: :class:`arraycontext.ArrayContext` + actx: :class:`~arraycontext.ArrayContext` + Array context to use - discr: :class:`grudge.eager.EagerDGDiscretization` - the discretization to use + d_alpha: numpy.ndarray + Species diffusivities + + Returns + ------- + :class:`~meshmode.dof_array.DOFArray` + + The maximum species diffusivity """ if len(d_alpha) == 0: return 0 diff --git a/test/test_diffusion.py b/test/test_diffusion.py index 7a74785d4..e3ef84498 100644 --- a/test/test_diffusion.py +++ b/test/test_diffusion.py @@ -20,6 +20,7 @@ THE SOFTWARE. """ +from abc import ABCMeta, abstractmethod import numpy as np import pyopencl.array as cla # noqa import pyopencl.clmath as clmath # noqa @@ -40,45 +41,87 @@ import pytest -from dataclasses import dataclass -from typing import Callable, Union from numbers import Number import logging logger = logging.getLogger(__name__) -@dataclass -class HeatProblem: - """Description of a heat equation problem. +def _np_like_for(val): + from arraycontext import get_container_context_recursively + actx = get_container_context_recursively(val) + if actx is None: + return np + else: + return actx.np + - .. attribute:: dim +def _cos(val): + if isinstance(val, Expression): + return pmbl.var("cos")(val) + else: + return _np_like_for(val).cos(val) - The problem dimension. - .. attribute:: get_mesh +def _sin(val): + if isinstance(val, Expression): + return pmbl.var("sin")(val) + else: + return _np_like_for(val).sin(val) - A function that creates a mesh when given some characteristic size as input. - .. attribute:: sym_alpha +def _exp(val): + if isinstance(val, Expression): + return pmbl.var("exp")(val) + else: + return _np_like_for(val).exp(val) - A symbolic expression for the diffusivity. - .. attribute:: sym_u +def _sym_eval(expr, **kwargs): + return sym.EvaluationMapper(kwargs)(expr) - A symbolic expression for the solution. - .. attribute:: get_boundaries +class HeatProblem(metaclass=ABCMeta): + """ + Description of a heat equation problem. - A function that creates a btag-to-boundary dict given a discretization, an - array context, and a time + .. autoproperty:: dim + .. automethod:: get_mesh + .. automethod:: get_alpha + .. automethod:: get_solution + .. automethod:: get_boundaries """ - dim: int - get_mesh: Callable - sym_alpha: Union[Expression, Number] - sym_u: Expression - get_boundaries: Callable + def __init__(self, dim): + self._dim = dim + + @property + def dim(self): + """The problem dimension.""" + return self._dim + + @abstractmethod + def get_mesh(self, n): + """Generate and return a mesh of some given characteristic size *n*.""" + pass + + @abstractmethod + def get_solution(self, x, t): + """Return the solution for coordinates *x* and time *t*.""" + pass + + @abstractmethod + def get_alpha(self, x, t, u): + """Return the diffusivity for coordinates *x*, time *t*, and solution *u*.""" + pass + + @abstractmethod + def get_boundaries(self, discr, actx, t): + """ + Return a :class:`dict` that maps boundary tags to boundary conditions at + time *t*. + """ + pass def get_box_mesh(dim, a, b, n): @@ -96,67 +139,74 @@ def get_box_mesh(dim, a, b, n): # 2D: u(x,y,t) = exp(-2*alpha*t)*sin(x)*cos(y) # 3D: u(x,y,z,t) = exp(-3*alpha*t)*sin(x)*sin(y)*cos(z) # on [-pi/2, pi/2]^{#dims} -def get_decaying_trig(dim, alpha): - def get_mesh(n): - return get_box_mesh(dim, -0.5*np.pi, 0.5*np.pi, n) +class DecayingTrig(HeatProblem): + def __init__(self, dim, alpha): + super().__init__(dim) + self._alpha = alpha - sym_coords = pmbl.make_sym_vector("x", dim) - sym_t = pmbl.var("t") - sym_cos = pmbl.var("cos") - sym_sin = pmbl.var("sin") - sym_exp = pmbl.var("exp") + def get_mesh(self, n): + return get_box_mesh(self.dim, -0.5*np.pi, 0.5*np.pi, n) - sym_u = sym_exp(-dim*alpha*sym_t) - for i in range(dim-1): - sym_u *= sym_sin(sym_coords[i]) - sym_u *= sym_cos(sym_coords[dim-1]) + def get_solution(self, x, t): + u = _exp(-self.dim*self._alpha*t) + for i in range(self.dim-1): + u = u * _sin(x[i]) + u = u * _cos(x[self.dim-1]) + return u - def get_boundaries(discr, actx, t): - boundaries = {} + def get_alpha(self, x, t, u): + return self._alpha - for i in range(dim-1): - boundaries[DTAG_BOUNDARY("-"+str(i))] = NeumannDiffusionBoundary(0.) - boundaries[DTAG_BOUNDARY("+"+str(i))] = NeumannDiffusionBoundary(0.) + def get_boundaries(self, discr, actx, t): + boundaries = {} - boundaries[DTAG_BOUNDARY("-"+str(dim-1))] = DirichletDiffusionBoundary(0.) - boundaries[DTAG_BOUNDARY("+"+str(dim-1))] = DirichletDiffusionBoundary(0.) + for i in range(self.dim-1): + lower_btag = DTAG_BOUNDARY("-"+str(i)) + upper_btag = DTAG_BOUNDARY("+"+str(i)) + boundaries[lower_btag] = NeumannDiffusionBoundary(0.) + boundaries[upper_btag] = NeumannDiffusionBoundary(0.) + lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) + upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) + boundaries[lower_btag] = DirichletDiffusionBoundary(0.) + boundaries[upper_btag] = DirichletDiffusionBoundary(0.) return boundaries - return HeatProblem(dim, get_mesh, alpha, sym_u, get_boundaries) - # 1D: u(x,t) = exp(-alpha*t)*cos(x) # 2D: u(x,y,t) = exp(-2*alpha*t)*sin(x)*cos(y) # 3D: u(x,y,z,t) = exp(-3*alpha*t)*sin(x)*sin(y)*cos(z) # on [-pi/2, pi/4]^{#dims} -def get_decaying_trig_truncated_domain(dim, alpha): - def get_mesh(n): - return get_box_mesh(dim, -0.5*np.pi, 0.25*np.pi, n) +class DecayingTrigTruncatedDomain(HeatProblem): + def __init__(self, dim, alpha): + super().__init__(dim) + self._alpha = alpha - sym_coords = pmbl.make_sym_vector("x", dim) - sym_t = pmbl.var("t") - sym_cos = pmbl.var("cos") - sym_sin = pmbl.var("sin") - sym_exp = pmbl.var("exp") + def get_mesh(self, n): + return get_box_mesh(self.dim, -0.5*np.pi, 0.25*np.pi, n) - sym_u = sym_exp(-dim*alpha*sym_t) - for i in range(dim-1): - sym_u *= sym_sin(sym_coords[i]) - sym_u *= sym_cos(sym_coords[dim-1]) + def get_solution(self, x, t): + u = _exp(-self.dim*self._alpha*t) + for i in range(self.dim-1): + u = u * _sin(x[i]) + u = u * _cos(x[self.dim-1]) + return u - def get_boundaries(discr, actx, t): + def get_alpha(self, x, t, u): + return self._alpha + + def get_boundaries(self, discr, actx, t): nodes = thaw(actx, discr.nodes()) - def sym_eval(expr): - return sym.EvaluationMapper({"x": nodes, "t": t})(expr) + sym_exact_u = self.get_solution( + pmbl.make_sym_vector("x", self.dim), pmbl.var("t")) - exact_u = sym_eval(sym_u) - exact_grad_u = sym_eval(sym.grad(dim, sym_u)) + exact_u = _sym_eval(sym_exact_u, x=nodes, t=t) + exact_grad_u = _sym_eval(sym.grad(self.dim, sym_exact_u), x=nodes, t=t) boundaries = {} - for i in range(dim-1): + for i in range(self.dim-1): lower_btag = DTAG_BOUNDARY("-"+str(i)) upper_btag = DTAG_BOUNDARY("+"+str(i)) upper_grad_u = discr.project("vol", upper_btag, exact_grad_u) @@ -164,56 +214,95 @@ def sym_eval(expr): upper_grad_u_dot_n = np.dot(upper_grad_u, normal) boundaries[lower_btag] = NeumannDiffusionBoundary(0.) boundaries[upper_btag] = NeumannDiffusionBoundary(upper_grad_u_dot_n) - - lower_btag = DTAG_BOUNDARY("-"+str(dim-1)) - upper_btag = DTAG_BOUNDARY("+"+str(dim-1)) + lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) + upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) upper_u = discr.project("vol", upper_btag, exact_u) boundaries[lower_btag] = DirichletDiffusionBoundary(0.) boundaries[upper_btag] = DirichletDiffusionBoundary(upper_u) return boundaries - return HeatProblem(dim, get_mesh, alpha, sym_u, get_boundaries) - # 1D: alpha(x) = 1+0.2*cos(3*x) -# u(x,t) = cos(x) +# u(x,t) = cos(t)*cos(x) (manufactured) # 2D: alpha(x,y) = 1+0.2*cos(3*x)*cos(3*y) -# u(x,y,t) = sin(x)*cos(y) +# u(x,y,t) = cos(t)*sin(x)*cos(y) (manufactured) # 3D: alpha(x,y,z) = 1+0.2*cos(3*x)*cos(3*y)*cos(3*z) -# u(x,y,z,t) = sin(x)*sin(y)*cos(z) +# u(x,y,z,t) = cos(t)*sin(x)*sin(y)*cos(z) (manufactured) # on [-pi/2, pi/2]^{#dims} -def get_static_trig_var_diff(dim): - def get_mesh(n): - return get_box_mesh(dim, -0.5*np.pi, 0.5*np.pi, n) +class OscillatingTrigVarDiff(HeatProblem): + def __init__(self, dim): + super().__init__(dim) + + def get_mesh(self, n): + return get_box_mesh(self.dim, -0.5*np.pi, 0.5*np.pi, n) + + def get_solution(self, x, t): + u = _cos(t) + for i in range(self.dim-1): + u = u * _sin(x[i]) + u = u * _cos(x[self.dim-1]) + return u + + def get_alpha(self, x, t, u): + alpha = 1 + for i in range(self.dim): + alpha = alpha * _cos(3.*x[i]) + alpha = 1 + 0.2*alpha + return alpha + + def get_boundaries(self, discr, actx, t): + boundaries = {} - sym_coords = pmbl.make_sym_vector("x", dim) - sym_cos = pmbl.var("cos") - sym_sin = pmbl.var("sin") + for i in range(self.dim-1): + lower_btag = DTAG_BOUNDARY("-"+str(i)) + upper_btag = DTAG_BOUNDARY("+"+str(i)) + boundaries[lower_btag] = NeumannDiffusionBoundary(0.) + boundaries[upper_btag] = NeumannDiffusionBoundary(0.) + lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) + upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) + boundaries[lower_btag] = DirichletDiffusionBoundary(0.) + boundaries[upper_btag] = DirichletDiffusionBoundary(0.) - sym_alpha = 1 - for i in range(dim): - sym_alpha *= sym_cos(3.*sym_coords[i]) - sym_alpha = 1 + 0.2*sym_alpha + return boundaries - sym_u = 1 - for i in range(dim-1): - sym_u *= sym_sin(sym_coords[i]) - sym_u *= sym_cos(sym_coords[dim-1]) - def get_boundaries(discr, actx, t): - boundaries = {} +# alpha(u) = 1 + u**3 +# 1D: u(x,t) = cos(t)*cos(x) (manufactured) +# 2D: u(x,y,t) = cos(t)*sin(x)*cos(y) (manufactured) +# 3D: u(x,y,z,t) = cos(t)*sin(x)*sin(y)*cos(z) (manufactured) +# on [-pi/2, pi/2]^{#dims} +class OscillatingTrigNonlinearDiff(HeatProblem): + def __init__(self, dim): + super().__init__(dim) - for i in range(dim-1): - boundaries[DTAG_BOUNDARY("-"+str(i))] = NeumannDiffusionBoundary(0.) - boundaries[DTAG_BOUNDARY("+"+str(i))] = NeumannDiffusionBoundary(0.) + def get_mesh(self, n): + return get_box_mesh(self.dim, -0.5*np.pi, 0.5*np.pi, n) - boundaries[DTAG_BOUNDARY("-"+str(dim-1))] = DirichletDiffusionBoundary(0.) - boundaries[DTAG_BOUNDARY("+"+str(dim-1))] = DirichletDiffusionBoundary(0.) + def get_solution(self, x, t): + u = _cos(t) + for i in range(self.dim-1): + u = u * _sin(x[i]) + u = u * _cos(x[self.dim-1]) + return u - return boundaries + def get_alpha(self, x, t, u): + return 1 + u**3 - return HeatProblem(dim, get_mesh, sym_alpha, sym_u, get_boundaries) + def get_boundaries(self, discr, actx, t): + boundaries = {} + + for i in range(self.dim-1): + lower_btag = DTAG_BOUNDARY("-"+str(i)) + upper_btag = DTAG_BOUNDARY("+"+str(i)) + boundaries[lower_btag] = NeumannDiffusionBoundary(0.) + boundaries[upper_btag] = NeumannDiffusionBoundary(0.) + lower_btag = DTAG_BOUNDARY("-"+str(self.dim-1)) + upper_btag = DTAG_BOUNDARY("+"+str(self.dim-1)) + boundaries[lower_btag] = DirichletDiffusionBoundary(0.) + boundaries[upper_btag] = DirichletDiffusionBoundary(0.) + + return boundaries def sym_diffusion(dim, sym_alpha, sym_u): @@ -230,12 +319,13 @@ def sym_diffusion(dim, sym_alpha, sym_u): @pytest.mark.parametrize("order", [2, 3]) @pytest.mark.parametrize(("problem", "nsteps", "dt", "scales"), [ - (get_decaying_trig_truncated_domain(1, 2.), 50, 5.e-5, [8, 16, 24]), - (get_decaying_trig_truncated_domain(2, 2.), 50, 5.e-5, [8, 12, 16]), - (get_decaying_trig_truncated_domain(3, 2.), 50, 5.e-5, [8, 10, 12]), - (get_static_trig_var_diff(1), 50, 5.e-5, [8, 16, 24]), - (get_static_trig_var_diff(2), 50, 5.e-5, [12, 14, 16]), - (get_static_trig_var_diff(3), 50, 5.e-5, [8, 10, 12]), + (DecayingTrigTruncatedDomain(1, 2.), 50, 5.e-5, [8, 16, 24]), + (DecayingTrigTruncatedDomain(2, 2.), 50, 5.e-5, [8, 12, 16]), + (DecayingTrigTruncatedDomain(3, 2.), 50, 5.e-5, [8, 10, 12]), + (OscillatingTrigVarDiff(1), 50, 5.e-5, [8, 16, 24]), + (OscillatingTrigVarDiff(2), 50, 5.e-5, [12, 14, 16]), + (OscillatingTrigNonlinearDiff(1), 50, 5.e-5, [8, 16, 24]), + (OscillatingTrigNonlinearDiff(2), 50, 5.e-5, [12, 14, 16]), ]) def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, visualize=False): @@ -247,12 +337,16 @@ def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, p = problem - sym_diffusion_u = sym_diffusion(p.dim, p.sym_alpha, p.sym_u) + sym_x = pmbl.make_sym_vector("x", p.dim) + sym_t = pmbl.var("t") + sym_u = p.get_solution(sym_x, sym_t) + sym_alpha = p.get_alpha(sym_x, sym_t, sym_u) + + sym_diffusion_u = sym_diffusion(p.dim, sym_alpha, sym_u) # In order to support manufactured solutions, we modify the heat equation # to add a source term f. If the solution is exact, this term should be 0. - sym_t = pmbl.var("t") - sym_f = sym.diff(sym_t)(p.sym_u) - sym_diffusion_u + sym_f = sym.diff(sym_t)(sym_u) - sym_diffusion_u from pytools.convergence import EOCRecorder eoc_rec = EOCRecorder() @@ -274,24 +368,19 @@ def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, nodes = thaw(actx, discr.nodes()) - def sym_eval(expr, t): - return sym.EvaluationMapper({"x": nodes, "t": t})(expr) - - alpha = sym_eval(p.sym_alpha, 0.) - - if isinstance(alpha, DOFArray): - discr_tag = DISCR_TAG_QUAD - else: - discr_tag = DISCR_TAG_BASE - def get_rhs(t, u): + alpha = p.get_alpha(nodes, t, u) + if isinstance(alpha, DOFArray): + discr_tag = DISCR_TAG_QUAD + else: + discr_tag = DISCR_TAG_BASE return (diffusion_operator(discr, quad_tag=discr_tag, alpha=alpha, boundaries=p.get_boundaries(discr, actx, t), u=u) - + sym_eval(sym_f, t)) + + _sym_eval(sym_f, x=nodes, t=t)) t = 0. - u = sym_eval(p.sym_u, t) + u = p.get_solution(nodes, t) from mirgecom.integrators import rk4_step @@ -299,7 +388,7 @@ def get_rhs(t, u): u = rk4_step(u, t, dt, get_rhs) t += dt - expected_u = sym_eval(p.sym_u, t) + expected_u = p.get_solution(nodes, t) rel_linf_err = actx.to_numpy( discr.norm(u - expected_u, np.inf) @@ -422,7 +511,7 @@ def get_rhs(t, u): @pytest.mark.parametrize("order", [1, 2, 3, 4]) @pytest.mark.parametrize("problem", [ - get_decaying_trig(1, 1.) + DecayingTrig(1, 1.) ]) @pytest.mark.octave def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, @@ -435,13 +524,19 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, p = problem assert p.dim == 1 - assert p.sym_alpha == 1. + + sym_x = pmbl.make_sym_vector("x", p.dim) + sym_t = pmbl.var("t") + sym_u = p.get_solution(sym_x, sym_t) + sym_alpha = p.get_alpha(sym_x, sym_t, sym_u) + + assert sym_alpha == 1 + + sym_diffusion_u = sym_diffusion(p.dim, sym_alpha, sym_u) from meshmode.interop.nodal_dg import download_nodal_dg_if_not_present download_nodal_dg_if_not_present() - sym_diffusion_u = sym_diffusion(p.dim, p.sym_alpha, p.sym_u) - for n in [4, 8, 16, 32, 64]: mesh = p.get_mesh(n) @@ -455,10 +550,7 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, discr_mirgecom = EagerDGDiscretization(actx, mesh, order=order) nodes_mirgecom = thaw(actx, discr_mirgecom.nodes()) - def sym_eval_mirgecom(expr): - return sym.EvaluationMapper({"x": nodes_mirgecom, "t": t})(expr) - - u_mirgecom = sym_eval_mirgecom(p.sym_u) + u_mirgecom = p.get_solution(nodes_mirgecom, t) diffusion_u_mirgecom = diffusion_operator(discr_mirgecom, quad_tag=DISCR_TAG_BASE, alpha=discr_mirgecom.zeros(actx)+1., @@ -467,10 +559,7 @@ def sym_eval_mirgecom(expr): discr_ndg = ndgctx.get_discr(actx) nodes_ndg = thaw(actx, discr_ndg.nodes()) - def sym_eval_ndg(expr): - return sym.EvaluationMapper({"x": nodes_ndg, "t": t})(expr) - - u_ndg = sym_eval_ndg(p.sym_u) + u_ndg = p.get_solution(nodes_ndg, t) ndgctx.push_dof_array("u", u_ndg) ndgctx.octave.push("t", t) @@ -484,7 +573,7 @@ def inf_norm(f): / inf_norm(diffusion_u_ndg)) if print_err: - diffusion_u_exact = sym_eval_mirgecom(sym_diffusion_u) + diffusion_u_exact = _sym_eval(sym_diffusion_u, x=nodes_mirgecom, t=t) err_exact = (inf_norm(diffusion_u_mirgecom-diffusion_u_exact) / inf_norm(diffusion_u_exact)) print(err, err_exact) @@ -499,15 +588,30 @@ def test_diffusion_obj_array_vectorize(actx_factory): """ actx = actx_factory() - p = get_decaying_trig(1, 2.) + p = DecayingTrig(1, 2.) - assert isinstance(p.sym_alpha, Number) + sym_x = pmbl.make_sym_vector("x", p.dim) + sym_t = pmbl.var("t") + + def get_u1(x, t): + return p.get_solution(x, t) + + def get_u2(x, t): + return 2*p.get_solution(x, t) + + sym_u1 = get_u1(sym_x, sym_t) + sym_u2 = get_u2(sym_x, sym_t) - sym_u1 = p.sym_u - sym_u2 = 2*p.sym_u + sym_alpha1 = p.get_alpha(sym_x, sym_t, sym_u1) + sym_alpha2 = p.get_alpha(sym_x, sym_t, sym_u2) - sym_diffusion_u1 = sym_diffusion(p.dim, p.sym_alpha, sym_u1) - sym_diffusion_u2 = sym_diffusion(p.dim, p.sym_alpha, sym_u2) + assert isinstance(sym_alpha1, Number) + assert isinstance(sym_alpha2, Number) + + alpha = sym_alpha1 + + sym_diffusion_u1 = sym_diffusion(p.dim, alpha, sym_u1) + sym_diffusion_u2 = sym_diffusion(p.dim, alpha, sym_u2) n = 128 @@ -520,13 +624,10 @@ def test_diffusion_obj_array_vectorize(actx_factory): t = 1.23456789 - def sym_eval(expr): - return sym.EvaluationMapper({"x": nodes, "t": t})(expr) - - alpha = sym_eval(p.sym_alpha) + u1 = get_u1(nodes, t) + u2 = get_u2(nodes, t) - u1 = sym_eval(sym_u1) - u2 = sym_eval(sym_u2) + alpha = p.get_alpha(nodes, t, u1) boundaries = p.get_boundaries(discr, actx, t) @@ -535,7 +636,7 @@ def sym_eval(expr): assert isinstance(diffusion_u1, DOFArray) - expected_diffusion_u1 = sym_eval(sym_diffusion_u1) + expected_diffusion_u1 = _sym_eval(sym_diffusion_u1, x=nodes, t=t) rel_linf_err = actx.to_numpy( discr.norm(diffusion_u1 - expected_diffusion_u1, np.inf) / discr.norm(expected_diffusion_u1, np.inf)) @@ -553,8 +654,8 @@ def sym_eval(expr): assert diffusion_u_vector.shape == (2,) expected_diffusion_u_vector = make_obj_array([ - sym_eval(sym_diffusion_u1), - sym_eval(sym_diffusion_u2) + _sym_eval(sym_diffusion_u1, x=nodes, t=t), + _sym_eval(sym_diffusion_u2, x=nodes, t=t) ]) rel_linf_err = actx.to_numpy( discr.norm(diffusion_u_vector - expected_diffusion_u_vector, np.inf) diff --git a/test/test_eos.py b/test/test_eos.py index 51304d1a7..dd8588c05 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -37,8 +37,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext + PytatoPyOpenCLArrayContext ) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context @@ -46,6 +45,10 @@ import cantera from mirgecom.eos import IdealSingleGas, PyrometheusMixture +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) from mirgecom.initializers import ( Vortex2D, Lump, MixtureInitializer @@ -62,7 +65,7 @@ @pytest.mark.parametrize(("mechname", "rate_tol"), [("uiuc", 1e-12), ]) @pytest.mark.parametrize("y0", [0, 1]) -def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): +def do_not_test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): """Test lazy pyrometheus mechanisms. This test reproduces a pyrometheus-native test in the MIRGE context using both @@ -77,7 +80,7 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - actx_lazy = SingleGridWorkBalancingPytatoArrayContext( + actx_lazy = PytatoPyOpenCLArrayContext( queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) @@ -428,13 +431,15 @@ def test_pyrometheus_eos(ctx_factory, mechname, dim, y0, vel): f"{pyro_p}, {pyro_t}, {pyro_e})") eos = PyrometheusMixture(prometheus_mechanism) + gas_model = GasModel(eos=eos) initializer = MixtureInitializer(dim=dim, nspecies=nspecies, pressure=pyro_p, temperature=pyro_t, massfractions=y0s, velocity=velocity) cv = initializer(eos=eos, t=0, x_vec=nodes) - p = eos.pressure(cv) - temperature = eos.temperature(cv) + fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tguess) + p = fluid_state.pressure + temperature = fluid_state.temperature internal_energy = eos.get_internal_energy(temperature=tin, species_mass_fractions=yin) y = cv.species_mass_fractions diff --git a/test/test_euler.py b/test/test_euler.py index df7e982d8..af8b29be2 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -48,6 +48,10 @@ DummyBoundary ) from mirgecom.eos import IdealSingleGas +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) from grudge.eager import EagerDGDiscretization from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context @@ -109,6 +113,8 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): cv = make_conserved( dim, mass=mass_input, energy=energy_input, momentum=mom_input, species_mass=species_mass_input) + gas_model = GasModel(eos=IdealSingleGas()) + fluid_state = make_fluid_state(cv, gas_model) expected_rhs = make_conserved( dim, q=make_obj_array([discr.zeros(actx) @@ -116,8 +122,9 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): ) boundaries = {BTAG_ALL: DummyBoundary()} - inviscid_rhs = euler_operator(discr, eos=IdealSingleGas(), - boundaries=boundaries, cv=cv, time=0.0) + inviscid_rhs = euler_operator(discr, state=fluid_state, gas_model=gas_model, + boundaries=boundaries, time=0.0) + rhs_resid = inviscid_rhs - expected_rhs rho_resid = rhs_resid.mass @@ -157,10 +164,12 @@ def inf_norm(x): cv = make_conserved( dim, mass=mass_input, energy=energy_input, momentum=mom_input, species_mass=species_mass_input) + gas_model = GasModel(eos=IdealSingleGas()) + fluid_state = make_fluid_state(cv, gas_model) boundaries = {BTAG_ALL: DummyBoundary()} - inviscid_rhs = euler_operator(discr, eos=IdealSingleGas(), - boundaries=boundaries, cv=cv, time=0.0) + inviscid_rhs = euler_operator(discr, state=fluid_state, gas_model=gas_model, + boundaries=boundaries, time=0.0) rhs_resid = inviscid_rhs - expected_rhs rho_resid = rhs_resid.mass @@ -226,20 +235,22 @@ def test_vortex_rhs(actx_factory, order): # Init soln with Vortex and expected RHS = 0 vortex = Vortex2D(center=[0, 0], velocity=[0, 0]) vortex_soln = vortex(nodes) + gas_model = GasModel(eos=IdealSingleGas()) + fluid_state = make_fluid_state(vortex_soln, gas_model) - def _vortex_boundary(discr, btag, cv_minus, **kwargs): - actx = cv_minus.mass.array_context + def _vortex_boundary(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return vortex(x_vec=nodes, **kwargs) + return make_fluid_state(vortex(x_vec=nodes, **kwargs), gas_model) boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_vortex_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_vortex_boundary) } inviscid_rhs = euler_operator( - discr, eos=IdealSingleGas(), boundaries=boundaries, - cv=vortex_soln, time=0.0) + discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, + time=0.0) err_max = actx.to_numpy(discr.norm(inviscid_rhs.join(), np.inf)) eoc_rec.add_data_point(1.0 / nel_1d, err_max) @@ -291,19 +302,22 @@ def test_lump_rhs(actx_factory, dim, order): velocity = np.zeros(shape=(dim,)) lump = Lump(dim=dim, center=center, velocity=velocity) lump_soln = lump(nodes) + gas_model = GasModel(eos=IdealSingleGas()) + fluid_state = make_fluid_state(lump_soln, gas_model) - def _lump_boundary(discr, btag, cv_minus, **kwargs): - actx = cv_minus.mass.array_context + def _lump_boundary(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return lump(x_vec=nodes, cv=cv_minus, **kwargs) + return make_fluid_state(lump(x_vec=nodes, cv=state_minus, **kwargs), + gas_model) boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_lump_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_lump_boundary) } inviscid_rhs = euler_operator( - discr, eos=IdealSingleGas(), boundaries=boundaries, cv=lump_soln, + discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, time=0.0 ) expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) @@ -372,19 +386,21 @@ def test_multilump_rhs(actx_factory, dim, order, v0): spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes) lump_soln = lump(nodes) + gas_model = GasModel(eos=IdealSingleGas()) + fluid_state = make_fluid_state(lump_soln, gas_model) - def _my_boundary(discr, btag, cv_minus, **kwargs): - actx = cv_minus.mass.array_context + def _my_boundary(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return lump(x_vec=nodes, **kwargs) + return make_fluid_state(lump(x_vec=nodes, **kwargs), gas_model) boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_my_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_my_boundary) } inviscid_rhs = euler_operator( - discr, eos=IdealSingleGas(), boundaries=boundaries, cv=lump_soln, + discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, time=0.0 ) expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) @@ -441,7 +457,10 @@ def _euler_flow_stepper(actx, parameters): nodes = thaw(discr.nodes(), actx) cv = initializer(nodes) - sdt = cfl * get_inviscid_timestep(discr, eos=eos, cv=cv) + gas_model = GasModel(eos=eos) + fluid_state = make_fluid_state(cv, gas_model) + + sdt = cfl * get_inviscid_timestep(discr, fluid_state) initname = initializer.__class__.__name__ eosname = eos.__class__.__name__ @@ -485,7 +504,9 @@ def write_soln(state, write_status=True): return maxerr def rhs(t, q): - return euler_operator(discr, eos=eos, boundaries=boundaries, cv=q, time=t) + fluid_state = make_fluid_state(q, gas_model) + return euler_operator(discr, fluid_state, boundaries=boundaries, + gas_model=gas_model, time=t) filter_order = 8 eta = .5 @@ -517,11 +538,12 @@ def rhs(t, q): cv = make_conserved( dim, q=filter_modally(discr, "vol", cutoff, frfunc, cv.join()) ) + fluid_state = make_fluid_state(cv, gas_model) t += dt istep += 1 - sdt = cfl * get_inviscid_timestep(discr, eos=eos, cv=cv) + sdt = cfl * get_inviscid_timestep(discr, fluid_state) if nstepstatus > 0: logger.info("Writing final dump.") @@ -572,14 +594,14 @@ def test_isentropic_vortex(actx_factory, order): initializer = Vortex2D(center=orig, velocity=vel) casename = "Vortex" - def _vortex_boundary(discr, btag, cv_minus, **kwargs): - actx = cv_minus.mass.array_context + def _vortex_boundary(discr, btag, state_minus, gas_model, **kwargs): + actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) nodes = thaw(bnd_discr.nodes(), actx) - return initializer(x_vec=nodes, **kwargs) + return make_fluid_state(initializer(x_vec=nodes, **kwargs), gas_model) boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_cv_func=_vortex_boundary) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_vortex_boundary) } eos = IdealSingleGas() diff --git a/test/test_fluid.py b/test/test_fluid.py index 9cac5d7aa..5832c6033 100644 --- a/test/test_fluid.py +++ b/test/test_fluid.py @@ -80,7 +80,7 @@ def test_velocity_gradient_sanity(actx_factory, dim, mass_exp, vel_fac): grad_cv = make_conserved(dim, q=local_grad(discr, cv.join())) - grad_v = velocity_gradient(discr, cv, grad_cv) + grad_v = velocity_gradient(cv, grad_cv) tol = 1e-11 exp_result = vel_fac * np.eye(dim) * ones @@ -125,7 +125,7 @@ def test_velocity_gradient_eoc(actx_factory, dim): from grudge.op import local_grad grad_cv = make_conserved(dim, q=local_grad(discr, cv.join())) - grad_v = velocity_gradient(discr, cv, grad_cv) + grad_v = velocity_gradient(cv, grad_cv) def exact_grad_row(xdata, gdim, dim): exact_grad_row = make_obj_array([zeros for _ in range(dim)]) @@ -180,7 +180,7 @@ def test_velocity_gradient_structure(actx_factory): from grudge.op import local_grad grad_cv = make_conserved(dim, q=local_grad(discr, cv.join())) - grad_v = velocity_gradient(discr, cv, grad_cv) + grad_v = velocity_gradient(cv, grad_cv) tol = 1e-11 exp_result = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] @@ -236,7 +236,7 @@ def test_species_mass_gradient(actx_factory, dim): grad_cv = make_conserved(dim, q=local_grad(discr, cv.join())) from mirgecom.fluid import species_mass_fraction_gradient - grad_y = species_mass_fraction_gradient(discr, cv, grad_cv) + grad_y = species_mass_fraction_gradient(cv, grad_cv) assert grad_y.shape == (nspecies, dim) from meshmode.dof_array import DOFArray diff --git a/test/test_inviscid.py b/test/test_inviscid.py index 08da3b8e6..4c0aa99b0 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -119,8 +119,9 @@ def rand(): # }}} - from mirgecom.gas_model import make_fluid_state - state = make_fluid_state(cv, eos) + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=eos) + state = make_fluid_state(cv, gas_model) flux = inviscid_flux(state) flux_resid = flux - expected_flux @@ -177,8 +178,8 @@ def test_inviscid_flux_components(actx_factory, dim): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) - from mirgecom.gas_model import make_fluid_state - state = make_fluid_state(cv, eos) + from mirgecom.gas_model import GasModel, make_fluid_state + state = make_fluid_state(cv, GasModel(eos=eos)) flux = inviscid_flux(state) @@ -240,8 +241,8 @@ def test_inviscid_mom_flux_components(actx_factory, dim, livedim): ) cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) p = eos.pressure(cv) - from mirgecom.gas_model import make_fluid_state - state = make_fluid_state(cv, eos) + from mirgecom.gas_model import GasModel, make_fluid_state + state = make_fluid_state(cv, GasModel(eos=eos)) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) @@ -311,13 +312,15 @@ def test_facial_flux(actx_factory, nspecies, order, dim): species_mass=species_mass_input) # Check the boundary facial fluxes as called on an interior boundary - eos = IdealSingleGas() + # eos = IdealSingleGas() from mirgecom.gas_model import ( + GasModel, make_fluid_state, make_fluid_state_interior_trace_pair ) + gas_model = GasModel(eos=IdealSingleGas()) state_tpair = make_fluid_state_interior_trace_pair( - discr, make_fluid_state(cv, eos), eos + discr, make_fluid_state(cv, gas_model), gas_model ) from mirgecom.inviscid import inviscid_facial_divergence_flux @@ -364,8 +367,8 @@ def inf_norm(data): dir_bval = make_conserved(dim, mass=dir_mass, energy=dir_e, momentum=dir_mom, species_mass=dir_mf) state_tpair = TracePair(BTAG_ALL, - interior=make_fluid_state(dir_bval, eos), - exterior=make_fluid_state(dir_bc, eos)) + interior=make_fluid_state(dir_bval, gas_model), + exterior=make_fluid_state(dir_bc, gas_model)) boundary_flux = inviscid_facial_divergence_flux( discr, state_tpair=state_tpair ) diff --git a/test/test_lazy.py b/test/test_lazy.py index 313ee87c8..005174e90 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -1,3 +1,5 @@ +"""Test some lazy operations.""" + __copyright__ = """Copyright (C) 2021 University of Illinois Board of Trustees""" __license__ = """ @@ -29,7 +31,7 @@ import pyopencl.clmath as clmath # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from arraycontext.container.traversal import freeze, thaw @@ -45,6 +47,7 @@ @pytest.fixture def op_test_data(ctx_factory): + """Test fixtures for lazy tests.""" cl_ctx = ctx_factory() queue = cl.CommandQueue(cl_ctx) @@ -126,6 +129,7 @@ def componentwise_norm(a): @pytest.mark.parametrize("order", [1, 2, 3]) def test_lazy_op_divergence(op_test_data, order): + """Test divergence operation in lazy context.""" eager_actx, lazy_actx, get_discr = op_test_data discr = get_discr(order) @@ -164,6 +168,7 @@ def lazy_to_eager(u): @pytest.mark.parametrize("order", [1, 2, 3]) def test_lazy_op_diffusion(op_test_data, order): + """Test diffusion operator in lazy context.""" eager_actx, lazy_actx, get_discr = op_test_data discr = get_discr(order) @@ -205,14 +210,15 @@ def lazy_to_eager(u): def _get_pulse(): from mirgecom.eos import IdealSingleGas - eos = IdealSingleGas() + from mirgecom.gas_model import GasModel + gas_model = GasModel(eos=IdealSingleGas()) from mirgecom.initializers import Uniform, AcousticPulse uniform_init = Uniform(dim=2) pulse_init = AcousticPulse(dim=2, center=np.zeros(2), amplitude=1.0, width=.1) def init(nodes): - return pulse_init(x_vec=nodes, cv=uniform_init(nodes), eos=eos) + return pulse_init(x_vec=nodes, cv=uniform_init(nodes), eos=gas_model.eos) from meshmode.mesh import BTAG_ALL from mirgecom.boundary import AdiabaticSlipBoundary @@ -220,25 +226,33 @@ def init(nodes): BTAG_ALL: AdiabaticSlipBoundary() } - return eos, init, boundaries, 3e-12 + return gas_model, init, boundaries, 3e-12 def _get_scalar_lump(): from mirgecom.eos import IdealSingleGas - eos = IdealSingleGas() + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=IdealSingleGas()) from mirgecom.initializers import MulticomponentLump init = MulticomponentLump( dim=2, nspecies=3, velocity=np.ones(2), spec_y0s=np.ones(3), spec_amplitudes=np.ones(3)) + def _my_boundary(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(init(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) + from meshmode.mesh import BTAG_ALL - from mirgecom.boundary import PrescribedInviscidBoundary + from mirgecom.boundary import PrescribedFluidBoundary boundaries = { - BTAG_ALL: PrescribedInviscidBoundary(fluid_solution_func=init) + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_my_boundary) } - return eos, init, boundaries, 5e-12 + return gas_model, init, boundaries, 5e-12 @pytest.mark.parametrize("order", [1, 2, 3]) @@ -247,15 +261,19 @@ def _get_scalar_lump(): _get_scalar_lump(), ]) def test_lazy_op_euler(op_test_data, problem, order): + """Test Euler operator in lazy context.""" eager_actx, lazy_actx, get_discr = op_test_data discr = get_discr(order) - eos, init, boundaries, tol = problem + gas_model, init, boundaries, tol = problem from mirgecom.euler import euler_operator + from mirgecom.gas_model import make_fluid_state def op(state): - return euler_operator(discr, eos, boundaries, state) + fluid_state = make_fluid_state(state, gas_model) + return euler_operator(discr, gas_model=gas_model, + boundaries=boundaries, state=fluid_state) lazy_op = lazy_actx.compile(op) diff --git a/test/test_viscous.py b/test/test_viscous.py index d30e37cdf..77ae3ab71 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -49,6 +49,10 @@ PowerLawTransport ) from mirgecom.eos import IdealSingleGas +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) logger = logging.getLogger(__name__) @@ -90,7 +94,10 @@ def test_viscous_stress_tensor(actx_factory, transport_model): else: tv_model = PowerLawTransport() - eos = IdealSingleGas(transport_model=tv_model) + eos = IdealSingleGas() + gas_model = GasModel(eos=eos, transport=tv_model) + fluid_state = make_fluid_state(cv, gas_model) + mu = tv_model.viscosity(eos, cv) lam = tv_model.volume_viscosity(eos, cv) @@ -102,7 +109,7 @@ def test_viscous_stress_tensor(actx_factory, transport_model): + lam*exp_div_v*np.eye(3)) from mirgecom.viscous import viscous_stress_tensor - tau = viscous_stress_tensor(discr, eos, cv, grad_cv) + tau = viscous_stress_tensor(fluid_state, grad_cv) # The errors come from grad_v assert actx.to_numpy(discr.norm(tau - exp_tau, np.inf)) < 1e-12 @@ -148,7 +155,8 @@ def test_poiseuille_fluxes(actx_factory, order, kappa): dpdx = (p_low - p_hi) / xlen rho = 1.0 - eos = IdealSingleGas(transport_model=transport_model) + eos = IdealSingleGas() + gas_model = GasModel(eos=eos, transport=transport_model) from mirgecom.initializers import PlanarPoiseuille initializer = PlanarPoiseuille(density=rho, mu=mu) @@ -237,21 +245,22 @@ def inf_norm(x): assert inf_norm(grad_p - xp_grad_p)*dpscal < 5e-9 assert inf_norm(grad_t - xp_grad_t)*tscal < 5e-9 + fluid_state = make_fluid_state(cv, gas_model) # verify heat flux from mirgecom.viscous import conductive_heat_flux - heat_flux = conductive_heat_flux(discr, eos, cv, grad_t) + heat_flux = conductive_heat_flux(fluid_state, grad_t) xp_heat_flux = -kappa*xp_grad_t assert inf_norm(heat_flux - xp_heat_flux) < 2e-8 # verify diffusive mass flux is zilch (no scalar components) from mirgecom.viscous import diffusive_flux - j = diffusive_flux(discr, eos, cv, grad_cv) + j = diffusive_flux(fluid_state, grad_cv) assert len(j) == 0 xp_e_flux = np.dot(xp_tau, cv.velocity) - xp_heat_flux xp_mom_flux = xp_tau from mirgecom.viscous import viscous_flux - vflux = viscous_flux(discr, eos, cv, grad_cv, grad_t) + vflux = viscous_flux(fluid_state, grad_cv, grad_t) efluxerr = ( inf_norm(vflux.energy - xp_e_flux) @@ -331,10 +340,12 @@ def test_species_diffusive_flux(actx_factory): thermal_conductivity=kappa, species_diffusivity=d_alpha) - eos = IdealSingleGas(transport_model=tv_model) + eos = IdealSingleGas() + gas_model = GasModel(eos=eos, transport=tv_model) + fluid_state = make_fluid_state(cv, gas_model) from mirgecom.viscous import diffusive_flux - j = diffusive_flux(discr, eos, cv, grad_cv) + j = diffusive_flux(fluid_state, grad_cv) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) @@ -404,10 +415,12 @@ def test_diffusive_heat_flux(actx_factory): thermal_conductivity=kappa, species_diffusivity=d_alpha) - eos = IdealSingleGas(transport_model=tv_model) + eos = IdealSingleGas() + gas_model = GasModel(eos=eos, transport=tv_model) + fluid_state = make_fluid_state(cv, gas_model) from mirgecom.viscous import diffusive_flux - j = diffusive_flux(discr, eos, cv, grad_cv) + j = diffusive_flux(fluid_state, grad_cv) def inf_norm(x): return actx.to_numpy(discr.norm(x, np.inf)) @@ -462,14 +475,15 @@ def test_local_max_species_diffusivity(actx_factory, dim, array_valued): d_alpha_input *= f tv_model = SimpleTransport(species_diffusivity=d_alpha_input) - eos = IdealSingleGas(transport_model=tv_model) + eos = IdealSingleGas() + d_alpha = tv_model.species_diffusivity(eos, cv) from mirgecom.viscous import get_local_max_species_diffusivity expected = .3*ones if array_valued: expected *= f - calculated = get_local_max_species_diffusivity(actx, discr, d_alpha) + calculated = get_local_max_species_diffusivity(actx, d_alpha) assert actx.to_numpy(discr.norm(calculated-expected, np.inf)) == 0 @@ -519,12 +533,14 @@ def test_viscous_timestep(actx_factory, dim, mu, vel): else: tv_model = SimpleTransport(viscosity=mu) - eos = IdealSingleGas(transport_model=tv_model) + eos = IdealSingleGas() + gas_model = GasModel(eos=eos, transport=tv_model) + fluid_state = make_fluid_state(cv, gas_model) from mirgecom.viscous import get_viscous_timestep - dt_field = get_viscous_timestep(discr, eos, cv) + dt_field = get_viscous_timestep(discr, fluid_state) - speed_total = actx.np.sqrt(np.dot(velocity, velocity)) + eos.sound_speed(cv) + speed_total = fluid_state.wavespeed dt_expected = chlen / (speed_total + (mu / chlen)) error = (dt_expected - dt_field) / dt_expected From 9a29a2f04b39cf1675f90ef0e380bc782d910ee6 Mon Sep 17 00:00:00 2001 From: MTCam Date: Mon, 6 Dec 2021 13:49:05 -0600 Subject: [PATCH 357/873] Numerical flux handling update --- mirgecom/boundary.py | 234 +++++++++++++++++++++------------------ mirgecom/euler.py | 12 +- mirgecom/flux.py | 5 + mirgecom/inviscid.py | 109 +++++++++++++++--- mirgecom/navierstokes.py | 6 +- 5 files changed, 236 insertions(+), 130 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 1f11f88d5..89e27318c 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -49,7 +49,8 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair -from mirgecom.inviscid import inviscid_facial_divergence_flux +from mirgecom.inviscid import inviscid_rusanov +from mirgecom.flux import gradient_flux_central from abc import ABCMeta, abstractmethod @@ -65,20 +66,21 @@ class FluidBoundary(metaclass=ABCMeta): @abstractmethod def inviscid_divergence_flux(self, discr, btag, eos, cv_minus, dv_minus, - **kwargs): + numerical_flux_func, **kwargs): """Get the inviscid boundary flux for the divergence operator.""" @abstractmethod - def viscous_divergence_flux(self, discr, btag, cv, grad_cv, grad_t, - eos, **kwargs): + def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, **kwargs): """Get the viscous boundary flux for the divergence operator.""" @abstractmethod - def cv_gradient_flux(self, discr, btag, cv, eos, **kwargs): + def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): """Get the fluid soln boundary flux for the gradient operator.""" @abstractmethod - def temperature_gradient_flux(self, discr, btag, cv, eos, **kwargs): + def temperature_gradient_flux(self, discr, btag, gas_model, state_minus, + **kwargs): r"""Get temperature flux across the boundary faces.""" @@ -87,52 +89,55 @@ class PrescribedFluidBoundary(FluidBoundary): .. automethod:: __init__ .. automethod:: inviscid_divergence_flux - .. automethod:: soln_gradient_flux + .. automethod:: cv_gradient_flux """ def __init__(self, # returns the flux to be used in div op (prescribed flux) - inviscid_boundary_flux_func=None, + inviscid_flux_func=None, # returns CV+, to be used in num flux func (prescribed soln) boundary_state_func=None, - # returns the DV+, to be used with CV+ - boundary_dv_func=None, # Inviscid facial flux func given CV(+/-) - inviscid_facial_flux_func=None, + # inviscid_numerical_flux_func=None, # Flux to be used in grad(Temperature) op temperature_gradient_flux_func=None, # Function returns boundary temperature_plus - boundary_temperature_func=None): + boundary_temperature_func=None, + # Function returns the flux to be used in grad(cv) + cv_gradient_flux_func=None, + # Function computes the numerical flux for a gradient + gradient_numerical_flux_func=None + ): """Initialize the PrescribedFluidBoundary and methods.""" self._bnd_state_func = boundary_state_func - self._bnd_dv_func = boundary_dv_func - self._inviscid_bnd_flux_func = inviscid_boundary_flux_func - self._inviscid_div_flux_func = inviscid_facial_flux_func + self._inviscid_flux_func = inviscid_flux_func + # self._inviscid_num_flux_func = inviscid_numerical_flux_func self._temperature_grad_flux_func = temperature_gradient_flux_func self._bnd_temperature_func = boundary_temperature_func + self._grad_num_flux_func = gradient_numerical_flux_func + self._cv_gradient_flux_func = cv_gradient_flux_func - if not self._inviscid_bnd_flux_func and not self._bnd_state_func: + if not self._inviscid_flux_func and not self._bnd_state_func: from warnings import warn warn("Using dummy boundary: copies interior solution.", stacklevel=2) - if not self._inviscid_div_flux_func: - self._inviscid_div_flux_func = inviscid_facial_divergence_flux + if not self._inviscid_flux_func: + self._inviscid_flux_func = self._inviscid_flux_for_prescribed_state + # if not self._inviscid_num_flux_func: + # self._inviscid_num_flux_func = inviscid_facial_flux if not self._bnd_state_func: - self._bnd_state_func = self._dummy_state_func - # if not self._bnd_dv_func: - # self._bnd_dv_func = self._dummy_dv_func - if not self._bnd_temperature_func: - self._bnd_temperature_func = self._dummy_temperature_func - - def _dummy_temperature_func(self, temperature_minus, **kwargs): - return -temperature_minus + self._bnd_state_func = self._identical_state - def _dummy_state_func(self, state_minus, **kwargs): - return state_minus + if not self._bnd_temperature_func: + self._bnd_temperature_func = self._opposite_temperature + if not self._grad_num_flux_func: + self._grad_num_flux_func = gradient_flux_central - # def _dummy_dv_func(self, eos, cv_pair, **kwargs): - # dv_minus = eos.dependent_vars(cv_pair.int) - # return eos.dependent_vars(cv_pair.ext, dv_minus.temperature) + if not self._cv_gradient_flux_func: + self._cv_gradient_flux_func = self._gradient_flux_for_prescribed_cv + if not self._temperature_grad_flux_func: + self._temperature_grad_flux_func = \ + self._gradient_flux_for_prescribed_temperature def _boundary_quantity(self, discr, btag, quantity, **kwargs): """Get a boundary quantity on local boundary, or projected to "all_faces".""" @@ -141,93 +146,107 @@ def _boundary_quantity(self, discr, btag, quantity, **kwargs): return quantity return discr.project(btag, "all_faces", quantity) - def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, - **kwargs): - """Get the inviscid boundary flux for the divergence operator.""" - # This one is when the user specified a function that directly - # prescribes the flux components at the boundary - if self._inviscid_bnd_flux_func: - return self._inviscid_bnd_flux_func(discr, btag, gas_model, state_minus, - **kwargs) - - state_plus = self._bnd_state_func(discr=discr, btag=btag, - gas_model=gas_model, - state_minus=state_minus, **kwargs) - boundary_state_pair = TracePair(btag, interior=state_minus, - exterior=state_plus) - - return self._inviscid_div_flux_func(discr, state_tpair=boundary_state_pair) - - def cv_gradient_flux(self, discr, btag, eos, cv_minus, **kwargs): - """Get the flux through boundary *btag* for each scalar in *q*.""" - # If specified, use the function that *prescribes* cv grad flux - if self._cv_gradient_flux_func: - return self._cv_gradient_flux_func(discr, btag, cv_minus=cv_minus, - **kwargs) - actx = cv_minus.array_context - # Otherwise calculate the flux using the CV+ and numerical flux function - cv_pair = TracePair( - btag, interior=cv_minus, - exterior=self._bnd_state_func(discr, btag, eos, cv_minus, **kwargs) - ) - dv_plus = self._bnd_dv_func(discr, btag, eos, cv_pair, **kwargs) # noqa + def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): + return TracePair(btag, + interior=state_minus, + exterior=self._bnd_state_func(discr, btag, gas_model, + state_minus, **kwargs)) + + def _opposite_temperature(self, temperature_minus, **kwargs): + return -temperature_minus + + def _identical_state(self, state_minus, **kwargs): + return state_minus + + def _identical_grad_cv(self, grad_cv_minus, **kwargs): + return grad_cv_minus + + def _idenitcal_grad_t(self, grad_t_minus, **kwargs): + return grad_t_minus + + def _gradient_flux_for_prescribed_cv(self, discr, btag, gas_model, state_minus, + **kwargs): + # Use prescribed external state and gradient numerical flux function + cv_pair = TracePair(btag, + interior=state_minus.cv, + exterior=self._bnd_state_func(discr, btag, gas_model, + state_minus, **kwargs)) + actx = state_minus.array_context nhat = thaw(discr.normal(btag), actx) return self._boundary_quantity( discr, btag=btag, - quantity=self._scalar_gradient_flux_func(cv_pair, normal=nhat), - **kwargs - ) + quantity=self._grad_num_flux_func(cv_pair, nhat), **kwargs) - # def soln_gradient_flux(self, discr, btag, soln, **kwargs): - # """Get the flux for solution gradient with AV API.""" - # cv = make_conserved(discr.dim, q=soln) - # return self.cv_gradient_flux(discr, btag, cv, **kwargs).join() - - def temperature_gradient_flux(self, discr, btag, eos, cv_minus, **kwargs): - """Get the "temperature flux" through boundary *btag*.""" - # Use prescriptive flux function if it exists - if self._temperature_gradient_flux_func: - return self._boundary_quantity( - discr, btag, - self._temperature_gradient_flux_func(discr, btag, eos, cv_minus, - **kwargs), - **kwargs - ) - - # Otherwise feed a boundary temperature to numerical flux for grad op - t_minus = eos.temperature(cv_minus) - actx = cv_minus.array_context - if self._bnd_temperature_func: # use boundary temperature func if supplied - t_plus = self._bnd_temperature_func(discr, btag, eos, cv_minus=cv_minus, - **kwargs) - else: # or - last resort; make zero temperature flux for gradient operator - t_plus = -t_minus # 0's out the num flux - - # Now pass the temperature pair to the numerical flux func for grad op + def _gradient_flux_for_prescribed_temperature(self, discr, btag, gas_model, + state_minus, **kwargs): + # Feed a boundary temperature to numerical flux for grad op + actx = state_minus.array_context nhat = thaw(actx, discr.normal(btag)) - bnd_tpair = TracePair(btag, interior=t_minus, exterior=t_plus) + bnd_tpair = TracePair(btag, + interior=state_minus.temperature, + exterior=self._bnd_temperature_func( + discr, btag, gas_model, state_minus, **kwargs)) return self._boundary_quantity(discr, btag, - self._scalar_num_flux_func(bnd_tpair, nhat), + self._grad_num_flux_func(bnd_tpair, nhat), **kwargs) - def viscous_divergence_flux(self, discr, btag, eos, cv_minus, grad_cv_minus, - grad_t_minus, **kwargs): - """Get the viscous part of the physical flux across the boundary *btag*.""" - cv_tpair = TracePair(btag, - interior=cv_minus, - exterior=self._bnd_state_func(discr, btag, eos, cv_minus, - **kwargs)) - dv_plus = self._bnd_dv_func(discr, btag, eos, cv_tpair, **kwargs) # noqa + def _inviscid_flux_for_prescribed_state(self, discr, btag, gas_model, + state_minus, + numerical_flux_func=inviscid_rusanov, + **kwargs): + # Use a prescribed boundary state and the numerical flux function + boundary_state_pair = self._boundary_state_pair(discr, btag, gas_model, + state_minus, **kwargs) + return self._boundary_quantity( + discr, btag, + numerical_flux_func(discr, gas_model=gas_model, + state_pair=boundary_state_pair), + **kwargs) - grad_cv_minus = discr.project("vol", btag, grad_cv_minus) - grad_cv_tpair = TracePair(btag, interior=grad_cv_minus, - exterior=grad_cv_minus) + def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, + numerical_flux_func=inviscid_rusanov, **kwargs): + """Get the inviscid boundary flux for the divergence operator.""" + return self._inviscid_flux_func(discr, btag, gas_model, state_minus, + numerical_flux_func=numerical_flux_func, + **kwargs) + + def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): + """Get the cv flux for *btag* for use in the gradient operator.""" + return self._cv_gradient_flux_func(discr, btag, gas_model=gas_model, + state_minus=state_minus, **kwargs) + + def temperature_gradient_flux(self, discr, btag, gas_model, state_minus, + **kwargs): + """Get the "temperature flux" for *btag* for use in the gradient operator.""" + return self._temperature_gradient_flux(discr, btag, gas_model, state_minus, + **kwargs) - grad_t_minus = discr.project("vol", btag, grad_t_minus) - grad_t_tpair = TracePair(btag, interior=grad_t_minus, exterior=grad_t_minus) + def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, **kwargs): + """Get the viscous flux for *btag* for use in the divergence operator.""" + return self._viscous_flux_func(discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, **kwargs) - from mirgecom.viscous import viscous_facial_flux - return viscous_facial_flux(discr, eos, cv_tpair, grad_cv_tpair, grad_t_tpair) + def _viscous_flux_for_prescribed_state(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, **kwargs): + state_pair = self._boundary_state_pair(discr, btag, gas_model, state_minus, + **kwargs) + grad_cv_pair = \ + TracePair(btag, interior=grad_cv_minus, + exterior=self._boundary_grad_cv(discr, btag, gas_model, + state_minus, grad_cv_minus, + grad_t_minus)) + + grad_t_pair = \ + TracePair( + btag, interior=grad_t_minus, + exterior=self._boundary_grad_temperature(discr, btag, gas_model, + state_minus, grad_cv_minus, + grad_t_minus)) + return self._boundary_quantity( + discr, btag, + quantity=self._viscous_num_flux_func(discr, gas_model, state_pair, + grad_cv_pair, grad_t_pair)) class DummyBoundary(PrescribedFluidBoundary): @@ -355,7 +374,6 @@ def __init__(self, wall_temperature=300): def isothermal_noslip_cv(self, discr, btag, eos, cv_minus, **kwargs): """Get the interior and exterior solution (*cv*) on the boundary.""" - temperature_wall = self._wall_temp + 0*cv_minus.mass velocity_plus = -cv_minus.velocity mass_frac_plus = -cv_minus.species_mass_fractions diff --git a/mirgecom/euler.py b/mirgecom/euler.py index bb0e8324a..8a435c357 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -55,7 +55,8 @@ import numpy as np # noqa from mirgecom.inviscid import ( inviscid_flux, - inviscid_facial_divergence_flux + inviscid_facial_flux, + inviscid_rusanov ) from grudge.eager import ( interior_trace_pair, @@ -66,7 +67,8 @@ from mirgecom.operators import div_operator -def euler_operator(discr, state, gas_model, boundaries, time=0.0): +def euler_operator(discr, state, gas_model, boundaries, time=0.0, + inviscid_numerical_flux_func=inviscid_rusanov): r"""Compute RHS of the Euler flow equations. Returns @@ -142,9 +144,11 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0): inviscid_flux_vol = inviscid_flux(state) inviscid_flux_bnd = ( sum(boundaries[btag].inviscid_divergence_flux( - discr, btag, gas_model, state_minus=boundary_states[btag], time=time) + discr, btag, gas_model, state_minus=boundary_states[btag], time=time, + numerical_flux_func=inviscid_numerical_flux_func) for btag in boundaries) - + sum(inviscid_facial_divergence_flux(discr, state_pair) + + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=inviscid_numerical_flux_func) for state_pair in interior_states) ) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index 92d5ff838..0eee39aaa 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -35,6 +35,11 @@ import numpy as np # noqa +def num_flux_lfr(f_minus, f_plus, q_minus, q_plus, lam): + """Lax-Friedrichs/Rusanov low-level numerical flux.""" + return (f_minus + f_plus - lam*(q_plus - q_minus))/2 + + def gradient_flux_central(u_tpair, normal): r"""Compute a central flux for the gradient operator. diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 074bece3e..ed50a781b 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -84,8 +84,87 @@ def inviscid_flux(state): momentum=mom_flux, species_mass=species_mass_flux) -def inviscid_facial_divergence_flux(discr, state_tpair, local=False): - r"""Return the flux across a face given the solution on both sides *q_tpair*. +def _lfr_flux(cv_pair, flux_pair, lam): + """Fluid state interface for Lax-Frierichs/Rusanov flux.""" + from mirgecom.flux import num_flux_lfr + return num_flux_lfr(flux_pair.int, flux_pair.ext, cv_pair.int, cv_pair.ext, + lam) + + +def inviscid_rusanov(discr, gas_model, state_pair): + """High-level interface for inviscid facial flux using Rusanov numerical flux.""" + actx = state_pair.int.array_context + normal = thaw(actx, discr.normal(state_pair.dd)) + + flux_pair = TracePair(state_pair.dd, + interior=inviscid_flux(state_pair.int)@normal, + exterior=inviscid_flux(state_pair.ext)@normal) + + # This calculates the local maximum eigenvalue of the flux Jacobian + # for a single component gas, i.e. the element-local max wavespeed |v| + c. + w_int = state_pair.int.speed_of_sound + state_pair.int.speed + w_ext = state_pair.ext.speed_of_sound + state_pair.ext.speed + # Use "gridspeed" for lamda to make this a Lax-Friedrichs + lam = actx.np.maximum(w_int, w_ext) + + cv_pair = TracePair(state_pair.dd, + interior=state_pair.int.cv, + exterior=state_pair.ext.cv) + return _lfr_flux(cv_pair, flux_pair, lam) + + +def inviscid_facial_flux(discr, gas_model, state_pair, + numerical_flux_func=inviscid_rusanov, local=False): + r"""Return the numerical inviscid flux for the divergence operator. + + Different numerical fluxes may be used through the specificiation of + the *numerical_flux_func*. By default, a Rusanov-type flux is calculated + as: + + .. math:: + + F^{*}_{\mathtt{LFR}} = \frac{1}{2}(\mathbf{F}(q^-) + +\mathbf{F}(q^+)) \cdot \hat{n} + \frac{\lambda}{2}(q^{-} - q^{+}), + + where $q^-, q^+$ are the fluid solution state on the interior and the + exterior of the face on which the flux is to be calculated, $\mathbf{F}$ is + the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the + *local* maximum fluid wavespeed. + + Parameters + ---------- + discr: :class:`~grudge.eager.EagerDGDiscretization` + + The discretization collection to use + + state_pair: :class:`~grudge.trace_pair.TracePair` + + Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon + which the flux calculation is to be performed + + local: bool + + Indicates whether to skip projection of fluxes to "all_faces" or not. If + set to *False* (the default), the returned fluxes are projected to + "all_faces." If set to *True*, the returned fluxes are not projected to + "all_faces"; remaining instead on the boundary restriction. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + + A CV object containing the scalar numerical fluxes at the input faces. + The returned fluxes are scalar because they've already been dotted with + the face normals as required by the divergence operator for which they + are being computed. + """ + numerical_flux = numerical_flux_func(discr, gas_model, state_pair) + return numerical_flux if local else discr.project(state_pair.dd, "all_faces", + numerical_flux) + + +def inviscid_facial_divergence_flux(discr, gas_model, state_pair, local=False): + r"""Return the flux across a face given the solution on both sides *q_pair*. This flux is currently hard-coded to use a Rusanov-type local Lax-Friedrichs (LFR) numerical flux at element boundaries. The numerical inviscid flux $F^*$ is @@ -107,7 +186,7 @@ def inviscid_facial_divergence_flux(discr, state_tpair, local=False): The discretization collection to use - state_tpair: :class:`~grudge.trace_pair.TracePair` + state_pair: :class:`~grudge.trace_pair.TracePair` Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon which the flux calculation is to be performed @@ -128,27 +207,27 @@ def inviscid_facial_divergence_flux(discr, state_tpair, local=False): the face normals as required by the divergence operator for which they are being computed. """ - actx = state_tpair.int.array_context - flux_tpair = TracePair(state_tpair.dd, - interior=inviscid_flux(state_tpair.int), - exterior=inviscid_flux(state_tpair.ext)) + actx = state_pair.int.array_context + flux_pair = TracePair(state_pair.dd, + interior=inviscid_flux(state_pair.int), + exterior=inviscid_flux(state_pair.ext)) # This calculates the local maximum eigenvalue of the flux Jacobian # for a single component gas, i.e. the element-local max wavespeed |v| + c. - w_int = state_tpair.int.speed_of_sound + state_tpair.int.speed - w_ext = state_tpair.ext.speed_of_sound + state_tpair.ext.speed + w_int = state_pair.int.speed_of_sound + state_pair.int.speed + w_ext = state_pair.ext.speed_of_sound + state_pair.ext.speed lam = actx.np.maximum(w_int, w_ext) - normal = thaw(actx, discr.normal(state_tpair.dd)) - cv_tpair = TracePair(state_tpair.dd, - interior=state_tpair.int.cv, - exterior=state_tpair.ext.cv) + normal = thaw(actx, discr.normal(state_pair.dd)) + cv_pair = TracePair(state_pair.dd, + interior=state_pair.int.cv, + exterior=state_pair.ext.cv) # todo: user-supplied flux routine - flux_weak = divergence_flux_lfr(cv_tpair, flux_tpair, normal=normal, lam=lam) + flux_weak = divergence_flux_lfr(cv_pair, flux_pair, normal=normal, lam=lam) if local is False: - return discr.project(cv_tpair.dd, "all_faces", flux_weak) + return discr.project(cv_pair.dd, "all_faces", flux_weak) return flux_weak diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 41e84571c..4702208c1 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -154,7 +154,7 @@ def _make_persistent_boundary_cv(boundaries, cv): cv_int_pair = interior_trace_pair(discr, cv) cv_interior_pairs = [cv_int_pair] q_comm_pairs = cross_rank_trace_pairs(discr, cv.join()) - num_partition_interfaces = len(q_comm_pairs) + # num_partition_interfaces = len(q_comm_pairs) cv_part_pairs = [ TracePair(q_pair.dd, interior=make_conserved(dim, q=q_pair.int), @@ -241,7 +241,7 @@ def finv_divergence_flux_boundary(btag, boundary_cv): # glob the inputs together in a tuple to use the _elbnd_flux wrapper viscous_states_int_bnd = [ - (cv_pair, grad_cv_pair, grad_t_pair) + (cv_pair, grad_cv_pair, grad_t_pair) for cv_pair, grad_cv_pair, grad_t_pair in zip(cv_interior_pairs, grad_cv_interior_pairs, grad_t_interior_pairs)] @@ -269,7 +269,7 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): viscous_states_int_bnd, boundaries) - _elbnd_flux( discr, finv_divergence_flux_interior, finv_divergence_flux_boundary, - cv_int_tpair, cv_part_pairs, boundaries) + cv_int_pair, cv_part_pairs, boundaries) ).join() # NS RHS From 9d83a1625f1b12f5f69dd2901013994f56e86858 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 6 Dec 2021 14:23:00 -0600 Subject: [PATCH 358/873] add heat-source --- examples/heat-source-mpi.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 30e909112..2bca09542 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -27,10 +27,9 @@ import numpy.linalg as la # noqa import pyopencl as cl -from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext -) +from grudge.array_context import (PyOpenCLArrayContext, + MPIPytatoPyOpenCLArrayContext) + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -47,7 +46,7 @@ import pyopencl.tools as cl_tools from mirgecom.logging_quantities import (initialize_logmgr, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage) from logpyle import IntervalTimer, set_dt @@ -74,9 +73,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == MPIPytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) from meshmode.distributed import MPIMeshDistributor, get_partition_by_pymetis mesh_dist = MPIMeshDistributor(comm) @@ -135,7 +136,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, u = discr.zeros(actx) if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr.add_watches(["step.max", "t_step.max", "t_log.max"]) @@ -208,7 +209,7 @@ def rhs(t, u): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) From 3e8afd8d1852f6090ceaf34a7d80c46f90dd4f94 Mon Sep 17 00:00:00 2001 From: MTCam Date: Mon, 6 Dec 2021 16:01:34 -0600 Subject: [PATCH 359/873] Use numerical flux interface. --- examples/autoignition-mpi.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index aa1bfb4b1..83b71e503 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -569,16 +569,18 @@ def my_post_step(step, t, dt, state): logmgr.tick_after() return make_obj_array([cv, fluid_state.temperature]), dt + from mirgecom.inviscid import inviscid_rusanov def my_rhs(t, state): cv, tseed = state from mirgecom.gas_model import make_fluid_state fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) - return make_obj_array([euler_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, - gas_model=gas_model) - + eos.get_species_source_terms(cv), - 0*tseed]) + return make_obj_array([ + euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, + gas_model=gas_model, + inviscid_numerical_flux_func=inviscid_rusanov) + + eos.get_species_source_terms(cv), + 0*tseed]) current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, current_cfl, t_final, constant_cfl) From 19e9f00dca8edc88f5a6f6d60209d40a24c1ad61 Mon Sep 17 00:00:00 2001 From: MTCam Date: Mon, 6 Dec 2021 16:02:34 -0600 Subject: [PATCH 360/873] Look explicitly for mixture, not species. --- mirgecom/euler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 8a435c357..005948ea3 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -127,7 +127,7 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, cv_interior_pairs.extend(cv_part_pairs) tseed_interior_pairs = None - if cv.nspecies > 0: + if state.is_mixture > 0: # If this is a mixture, we need to exchange the temperature field because # mixture pressure (used in the inviscid flux calculations) depends on # temperature and we need to seed the temperature calculation for the From 73426f63e26d30b0d44e4796a4b6192b539c1724 Mon Sep 17 00:00:00 2001 From: MTCam Date: Mon, 6 Dec 2021 16:03:19 -0600 Subject: [PATCH 361/873] Add low-level central flux. --- mirgecom/flux.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index 0eee39aaa..8a813f629 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -40,6 +40,11 @@ def num_flux_lfr(f_minus, f_plus, q_minus, q_plus, lam): return (f_minus + f_plus - lam*(q_plus - q_minus))/2 +def num_flux_central(f_minus, f_plus, **kwargs): + """Central low-level numerical flux.""" + return (f_plus + f_minus)/2 + + def gradient_flux_central(u_tpair, normal): r"""Compute a central flux for the gradient operator. From 05b80723f287add6822213ebcefe4a5dce8bac30 Mon Sep 17 00:00:00 2001 From: MTCam Date: Mon, 6 Dec 2021 16:03:49 -0600 Subject: [PATCH 362/873] Use new flux and state interface --- mirgecom/navierstokes.py | 127 ++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 69 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 4702208c1..0feb32217 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -63,11 +63,13 @@ ) from mirgecom.inviscid import ( inviscid_flux, - inviscid_facial_divergence_flux + inviscid_facial_flux, + inviscid_rusanov ) from mirgecom.viscous import ( viscous_flux, - viscous_facial_flux + viscous_facial_flux, + viscous_flux_central ) from mirgecom.flux import ( gradient_flux_central @@ -79,7 +81,10 @@ from meshmode.dof_array import thaw -def ns_operator(discr, eos, boundaries, cv, time=0.0, dv=None): +def ns_operator(discr, gas_model, state, boundaries, time=0.0, + inviscid_numerical_flux_func=inviscid_rusanov, + gradient_numerical_flux_func=gradient_flux_central, + viscous_numerical_flux_func=viscous_flux_central): r"""Compute RHS of the Navier-Stokes equations. Returns @@ -117,39 +122,15 @@ def ns_operator(discr, eos, boundaries, cv, time=0.0, dv=None): Agglomerated object array of DOF arrays representing the RHS of the Navier-Stokes equations. """ - dim = discr.dim - actx = cv.array_context - if dv is None: - dv = eos.dependent_vars(cv) - - # These locally-defined utilities use global discr, eos - def _make_consistent_dv_pairs(cv_pairs, temperature_pairs=None): - if temperature_pairs is not None: - return [TracePair( - cv_pair.dd, - interior=eos.dependent_vars(cv_pair.int, tseed_pair.int), - exterior=eos.dependent_vars(cv_pair.ext, tseed_pair.ext)) - for cv_pair, tseed_pair in zip(cv_pairs, temperature_pairs)] - else: - return [TracePair(cv_pair.dd, - interior=eos.dependent_vars(cv_pair.int), - exterior=eos.dependent_vars(cv_pair.ext)) - for cv_pair in cv_pairs] - - def _make_thermally_consistent_cv_pairs(cv_pairs, temperature_pairs=None): - return cv_pairs, _make_consistent_dv_pairs(eos, cv_pairs, temperature_pairs) - - def _make_thermally_consistent_cv_on_subdiscr(btag, cv, dv): - cv_sub = discr.project("vol", btag, cv) - tseed_sub = None - if cv.nspecies > 0: - tseed_sub = discr.project("vol", btag, dv.temperature) - return cv_sub, eos.dependent_vars(cv_sub, tseed_sub) - - def _make_persistent_boundary_cv(boundaries, cv): - dv = eos.dependent_vars(cv) - return {btag: _make_thermally_consistent_cv_on_subdiscr(btag, cv, dv)[0] - for btag in boundaries} + dim = state.dim + cv = state.cv + dv = state.dv + actx = state.array_context + + from mirgecom.gas_model import project_fluid_state + boundary_states = {btag: + project_fluid_state(discr, btag, state, gas_model) + for btag in boundaries} cv_int_pair = interior_trace_pair(discr, cv) cv_interior_pairs = [cv_int_pair] @@ -161,7 +142,6 @@ def _make_persistent_boundary_cv(boundaries, cv): exterior=make_conserved(dim, q=q_pair.ext)) for q_pair in q_comm_pairs] cv_interior_pairs.extend(cv_part_pairs) - cv_bnds = _make_persistent_boundary_cv(boundaries, cv) tseed_interior_pairs = None tseed_int_pair = interior_trace_pair(discr, dv.temperature) @@ -169,9 +149,9 @@ def _make_persistent_boundary_cv(boundaries, cv): tseed_interior_pairs = [tseed_int_pair] tseed_interior_pairs.extend(tseed_part_pairs) - cv_interior_pairs, dv_interior_pairs = \ - _make_thermally_consistent_cv_pairs(eos, cv_interior_pairs, - tseed_interior_pairs) + from mirgecom.gas_model import make_fluid_state_trace_pairs + interior_state_pairs = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, + tseed_interior_pairs) # Operator-independent boundary flux interface def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, @@ -182,20 +162,21 @@ def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, for btag in boundary_states)) # Data-independent grad flux for faces - def _grad_flux_interior(int_tpair): - normal = thaw(actx, discr.normal(int_tpair.dd)) + def _grad_flux_interior(q_pair): + normal = thaw(actx, discr.normal(q_pair.dd)) # Hard-coding central per [Bassi_1997]_ eqn 13 - flux_weak = gradient_flux_central(int_tpair, normal) - return discr.project(int_tpair.dd, "all_faces", flux_weak) + flux_weak = gradient_numerical_flux_func(q_pair, normal) + return discr.project(q_pair.dd, "all_faces", flux_weak) # CV-specific boundary flux for grad operator - def _cv_grad_flux_bnd(btag, boundary_cv): + def _cv_grad_flux_bnd(btag, boundary_state): return boundaries[btag].cv_gradient_flux( - discr, btag=btag, eos=eos, cv_minus=boundary_cv, time=time + discr, btag=btag, gas_model=gas_model, state_minus=boundary_state, + time=time, numerical_flux_func=gradient_numerical_flux_func ) cv_flux_bnd = _elbnd_flux(discr, _grad_flux_interior, _cv_grad_flux_bnd, - cv_interior_pairs, cv_bnds) + cv_interior_pairs, boundary_states) # [Bassi_1997]_ eqn 15 (s = grad_q) grad_cv = make_conserved(dim, q=grad_operator(discr, cv.join(), @@ -213,54 +194,62 @@ def _cv_grad_flux_bnd(btag, boundary_cv): # Capture the temperature for the interior faces for grad(T) calc t_interior_pairs = [TracePair("int_faces", - interior=dv_pair.int.temperature, - exterior=dv_pair.ext.temperature) - for dv_pair in dv_interior_pairs] + interior=state_pair.int.temperature, + exterior=state_pair.ext.temperature) + for state_pair in interior_state_pairs] t_flux_bnd = (sum(_grad_flux_interior(tpair) for tpair in t_interior_pairs) + sum(boundaries[btag].temperature_gradient_flux( - discr, btag=btag, eos=eos, cv_minus=cv_bnds[btag], time=time) + discr, btag=btag, gas_model=gas_model, + state_minus=boundary_states[btag], time=time) for btag in boundaries)) # Fluxes in-hand, compute the gradient of temperature - grad_t = grad_operator(discr, dv.temperature, t_flux_bnd) + grad_t = grad_operator(discr, state.temperature, t_flux_bnd) delt_int_pair = interior_trace_pair(discr, grad_t) delt_part_pairs = cross_rank_trace_pairs(discr, grad_t) grad_t_interior_pairs = [delt_int_pair] grad_t_interior_pairs.append(delt_part_pairs) # inviscid flux divergence-specific flux function for interior faces - def finv_divergence_flux_interior(cv_tpair): - return inviscid_facial_divergence_flux(discr, eos, cv_tpair=cv_tpair) + def finv_divergence_flux_interior(state_pair): + return inviscid_facial_flux( + discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=inviscid_numerical_flux_func) # inviscid part of bcs applied here - def finv_divergence_flux_boundary(btag, boundary_cv): + def finv_divergence_flux_boundary(btag, boundary_state): return boundaries[btag].inviscid_divergence_flux( - discr, btag=btag, eos=eos, cv_minus=boundary_cv, time=time - ) + discr, btag=btag, gas_model=gas_model, state_minus=boundary_state, + time=time, numerical_flux_func=inviscid_numerical_flux_func) # glob the inputs together in a tuple to use the _elbnd_flux wrapper viscous_states_int_bnd = [ - (cv_pair, grad_cv_pair, grad_t_pair) - for cv_pair, grad_cv_pair, grad_t_pair in - zip(cv_interior_pairs, grad_cv_interior_pairs, grad_t_interior_pairs)] + (state_pair, grad_cv_pair, grad_t_pair) + for state_pair, grad_cv_pair, grad_t_pair in + zip(interior_state_pairs, grad_cv_interior_pairs, grad_t_interior_pairs)] # viscous fluxes across interior faces (including partition and periodic bnd) def fvisc_divergence_flux_interior(tpair_tuple): - cv_pair_int = tpair_tuple[0] - s_pair_int = tpair_tuple[1] - dt_pair_int = tpair_tuple[2] - return viscous_facial_flux(discr, eos, cv_pair_int, s_pair_int, dt_pair_int) + state_pair = tpair_tuple[0] + grad_cv_pair = tpair_tuple[1] + grad_t_pair = tpair_tuple[2] + return viscous_facial_flux(discr, gas_model, state_pair, grad_cv_pair, + grad_t_pair, + numerical_flux_func=viscous_numerical_flux_func) # viscous part of bcs applied here def fvisc_divergence_flux_boundary(btag, boundary_state): - return boundaries[btag].viscous_divergence_flux(discr, btag, eos=eos, - cv_minus=cv, grad_cv=grad_cv, - grad_t=grad_t, time=time) + grad_cv_minus = discr.project("vol", btag, grad_cv) + grad_t_minus = discr.project("vol", btag, grad_t) + return boundaries[btag].viscous_divergence_flux( + discr, btag, gas_model=gas_model, state_minus=boundary_state[btag], + grad_cv_minus=grad_cv_minus, grad_t=grad_t_minus, time=time, + numerical_flux_func=viscous_numerical_flux_func) vol_term = ( - viscous_flux(discr, eos=eos, cv=cv, grad_cv=grad_cv, grad_t=grad_t) - - inviscid_flux(discr, eos=eos, cv=cv) + viscous_flux(state=state, grad_cv=grad_cv, grad_t=grad_t) + - inviscid_flux(state=state) ).join() bnd_term = ( From 1ac90189dcc6bdfd65295eee53f17c36a1360719 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:34:58 -0600 Subject: [PATCH 363/873] Use new num flux interface name --- examples/autoignition-mpi.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 83b71e503..cc58a04b8 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -569,7 +569,8 @@ def my_post_step(step, t, dt, state): logmgr.tick_after() return make_obj_array([cv, fluid_state.temperature]), dt - from mirgecom.inviscid import inviscid_rusanov + from mirgecom.inviscid import inviscid_flux_rusanov + def my_rhs(t, state): cv, tseed = state from mirgecom.gas_model import make_fluid_state @@ -578,7 +579,7 @@ def my_rhs(t, state): return make_obj_array([ euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, - inviscid_numerical_flux_func=inviscid_rusanov) + inviscid_numerical_flux_func=inviscid_flux_rusanov) + eos.get_species_source_terms(cv), 0*tseed]) From 88ecd70a4c40d88cf22e55366022d5e93d3baa2f Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:35:56 -0600 Subject: [PATCH 364/873] Update viscous examples to use new interface --- examples/nsmix-mpi.py | 105 +++++++++++++++++++++++-------------- examples/poiseuille-mpi.py | 79 +++++++++++++++------------- 2 files changed, 109 insertions(+), 75 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 6d80eac3c..1529e59a3 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -28,6 +28,7 @@ import pyopencl as cl import pyopencl.tools as cl_tools from functools import partial +from pytools.obj_array import make_obj_array from meshmode.array_context import ( PyOpenCLArrayContext, @@ -54,6 +55,10 @@ ) from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) import cantera from logpyle import IntervalTimer, set_dt @@ -234,8 +239,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, from mirgecom.thermochemistry import make_pyrometheus_mechanism_class pyrometheus_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyrometheus_mechanism, - temperature_guess=init_temperature, - transport_model=transport_model) + temperature_guess=init_temperature) + gas_model = GasModel(eos=eos, transport=transport_model) # }}} @@ -253,27 +258,32 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, my_boundary = IsothermalNoSlipBoundary(wall_temperature=can_t) visc_bnds = {BTAG_ALL: my_boundary} + tseed = can_t if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] + tseed = restart_data["temperature_seed"] + if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(x_vec=nodes, eos=eos) + current_cv = initializer(x_vec=nodes, eos=eos) + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model, + temperature_seed=tseed) # Inspection at physics debugging time if debug: print("Initial MIRGE-Com state:") - print(f"{current_state.mass=}") - print(f"{current_state.energy=}") - print(f"{current_state.momentum=}") - print(f"{current_state.species_mass=}") - print(f"Initial Y: {current_state.species_mass / current_state.mass}") - print(f"Initial DV pressure: {eos.pressure(current_state)}") - print(f"Initial DV temperature: {eos.temperature(current_state)}") + print(f"{current_state.mass_density=}") + print(f"{current_state.energy_density=}") + print(f"{current_state.momentum_density=}") + print(f"{current_state.species_mass_density=}") + print(f"Initial Y: {current_state.species_mass_fractions=}") + print(f"Initial DV pressure: {current_state.temperature=}") + print(f"Initial DV temperature: {current_state.pressure=}") # }}} @@ -307,7 +317,7 @@ def my_write_status(step, t, dt, state): cfl = current_cfl else: from mirgecom.viscous import get_viscous_cfl - cfl_field = get_viscous_cfl(discr, eos, dt, cv=state) + cfl_field = get_viscous_cfl(discr, dt, state=state) from grudge.op import nodal_max cfl = nodal_max(discr, "vol", cfl_field) if rank == 0: @@ -325,12 +335,13 @@ def my_write_viz(step, t, state, dv=None, production_rates=None): write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) - def my_write_restart(step, t, state): + def my_write_restart(step, t, state, tseed): rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, + "temperature_seed": tseed, "t": t, "step": step, "order": order, @@ -376,8 +387,11 @@ def my_health_check(state, dv): return health_error def my_pre_step(step, t, dt, state): + cv, tseed = state + fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) + dv = fluid_state.dv try: - dv = None if logmgr: logmgr.tick_before() @@ -389,9 +403,8 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) from mirgecom.simutil import allsync - health_errors = allsync(my_health_check(state, dv), comm, + health_errors = allsync(my_health_check(cv, dv), comm, op=MPI.LOR) if health_errors: if rank == 0: @@ -399,62 +412,74 @@ def my_pre_step(step, t, dt, state): raise MyRuntimeError("Failed simulation health check.") if do_restart: - my_write_restart(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=cv, tseed=tseed) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) - production_rates = eos.get_production_rates(state) - my_write_viz(step=step, t=t, state=state, dv=dv, + production_rates = eos.get_production_rates(cv) + my_write_viz(step=step, t=t, state=cv, dv=dv, production_rates=production_rates) - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) if do_status: - my_write_status(step, t, dt, state) + my_write_status(step, t, dt, state=fluid_state) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) - my_write_restart(step=step, t=t, state=state) + my_write_viz(step=step, t=t, state=cv) + my_write_restart(step=step, t=t, state=cv, tseed=tseed) raise return state, dt def my_post_step(step, t, dt, state): + cv, tseed = state + fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) + # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) + set_sim_state(logmgr, dim, cv, gas_model.eos) logmgr.tick_after() - return state, dt + + return make_obj_array([cv, fluid_state.temperature]), dt def my_rhs(t, state): - ns_rhs = ns_operator(discr, cv=state, t=t, - boundaries=visc_bnds, eos=eos) - reaction_source = eos.get_species_source_terms(state) - return ns_rhs + reaction_source + cv, tseed = state + fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) + ns_rhs = ns_operator(discr, state=fluid_state, time=t, + boundaries=visc_bnds, gas_model=gas_model) + cv_rhs = ns_rhs + eos.get_species_source_terms(cv) + return make_obj_array([cv_rhs, 0*tseed]) current_dt = get_sim_timestep(discr, current_state, current_t, - current_dt, current_cfl, eos, - t_final, constant_cfl) + current_dt, current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_stepper_state = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=make_obj_array([current_state.cv, + current_state.temperature]), + t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + + current_cv, tseed = current_stepper_state + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model, + temperature_seed=tseed) + final_dv = current_state.dv final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + current_cfl, t_final, constant_cfl) + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state.cv, + tseed=tseed) my_write_status(current_step, current_t, final_dt, current_state) if logmgr: diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index c063d7aeb..44e5a138b 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -51,12 +51,12 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( - PrescribedViscousBoundary, - IsothermalNoSlipBoundary + PrescribedFluidBoundary, + AdiabaticNoslipMovingBoundary ) from mirgecom.transport import SimpleTransport from mirgecom.eos import IdealSingleGas - +from mirgecom.gas_model import GasModel, make_fluid_state from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging from mirgecom.logging_quantities import ( @@ -221,30 +221,42 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): momentum=mass*velocity) initializer = poiseuille_2d - eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=mu)) - exact = initializer(x_vec=nodes, eos=eos) - - boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary(), - DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary()} + gas_model = GasModel(eos=IdealSingleGas(), + transport=SimpleTransport(viscosity=mu)) + exact = initializer(x_vec=nodes, eos=gas_model.eos) + + def _boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + cv=state_minus.cv, **kwargs), gas_model) + + boundaries = {DTAG_BOUNDARY("-1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_solution), + DTAG_BOUNDARY("+1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_solution), + DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = exact + current_cv = exact + + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) vis_timer = None visualizer = make_visualizer(discr, order) - eosname = eos.__class__.__name__ + eosname = gas_model.eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, nelements=local_nelements, global_nelements=global_nelements, @@ -255,7 +267,8 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): if rank == 0: logger.info(init_message) - def my_write_status(step, t, dt, dv, state, component_errors): + def my_write_status(step, t, dt, state, component_errors): + dv = state.dv from grudge.op import nodal_min, nodal_max p_min = nodal_min(discr, "vol", dv.pressure) p_max = nodal_max(discr, "vol", dv.pressure) @@ -266,7 +279,7 @@ def my_write_status(step, t, dt, dv, state, component_errors): else: from mirgecom.viscous import get_viscous_cfl cfl = nodal_max(discr, "vol", - get_viscous_cfl(discr, eos, dt, state)) + get_viscous_cfl(discr, dt, state)) if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" @@ -274,9 +287,7 @@ def my_write_status(step, t, dt, dv, state, component_errors): "----- errors=" + ", ".join("%.3g" % en for en in component_errors)) - def my_write_viz(step, t, state, dv=None): - if dv is None: - dv = eos.dependent_vars(state) + def my_write_viz(step, t, state, dv): resid = state - exact viz_fields = [("cv", state), ("dv", dv), @@ -292,7 +303,7 @@ def my_write_restart(step, t, state): if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, "t": t, "step": step, "order": order, @@ -339,8 +350,9 @@ def my_health_check(state, dv, component_errors): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + dv = fluid_state.dv try: - dv = None component_errors = None if logmgr: @@ -353,7 +365,6 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync @@ -370,26 +381,22 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) my_write_viz(step=step, t=t, state=state, dv=dv) - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) if do_status: # needed because logging fails to make output - if dv is None: - dv = eos.dependent_vars(state) if component_errors is None: from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) - my_write_status(step=step, t=t, dt=dt, dv=dv, state=state, + my_write_status(step=step, t=t, dt=dt, state=fluid_state, component_errors=component_errors) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) + my_write_viz(step=step, t=t, state=state, dv=dv) my_write_restart(step=step, t=t, state=state) raise @@ -400,34 +407,36 @@ def my_post_step(step, t, dt, state): # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) + set_sim_state(logmgr, dim, state, gas_model.eos) logmgr.tick_after() return state, dt def my_rhs(t, state): - return ns_operator(discr, eos=eos, boundaries=boundaries, cv=state, t=t) + return ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + state=state, time=t) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state, t=current_t, t_final=t_final) + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + final_dv = current_state.dv final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, current_state, exact) my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state) - my_write_status(step=current_step, t=current_t, dt=final_dt, dv=final_dv, + my_write_status(step=current_step, t=current_t, dt=final_dt, state=current_state, component_errors=component_errors) if logmgr: From 931aa72fff3043340e56e7a04b8ef57155780827 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:37:45 -0600 Subject: [PATCH 365/873] Massage viscous boundary interface consistent with gas model state. --- mirgecom/boundary.py | 198 ++++++++++++++++++++++++++----------------- 1 file changed, 119 insertions(+), 79 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 89e27318c..e2d711022 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -17,7 +17,6 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: IsothermalNoSlipBoundary -.. autoclass:: PrescribedViscousBoundary """ __copyright__ = """ @@ -45,12 +44,14 @@ """ import numpy as np -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair -from mirgecom.inviscid import inviscid_rusanov +from mirgecom.inviscid import inviscid_flux_rusanov +from mirgecom.viscous import viscous_flux_central from mirgecom.flux import gradient_flux_central +from mirgecom.gas_model import make_fluid_state from abc import ABCMeta, abstractmethod @@ -106,7 +107,13 @@ def __init__(self, # Function returns the flux to be used in grad(cv) cv_gradient_flux_func=None, # Function computes the numerical flux for a gradient - gradient_numerical_flux_func=None + gradient_numerical_flux_func=None, + # Function computes the flux to be used in the div op + viscous_flux_func=None, + # Returns the boundary value for grad(cv) + boundary_gradient_cv_func=None, + # Returns the boundary value for grad(temperature) + boundary_gradient_temperature_func=None ): """Initialize the PrescribedFluidBoundary and methods.""" self._bnd_state_func = boundary_state_func @@ -116,6 +123,9 @@ def __init__(self, self._bnd_temperature_func = boundary_temperature_func self._grad_num_flux_func = gradient_numerical_flux_func self._cv_gradient_flux_func = cv_gradient_flux_func + self._viscous_flux_func = viscous_flux_func + self._bnd_grad_cv_func = boundary_gradient_cv_func + self._bnd_grad_temperature_func = boundary_gradient_temperature_func if not self._inviscid_flux_func and not self._bnd_state_func: from warnings import warn @@ -139,6 +149,13 @@ def __init__(self, self._temperature_grad_flux_func = \ self._gradient_flux_for_prescribed_temperature + if not self._viscous_flux_func: + self._viscous_flux_func = self._viscous_flux_for_prescribed_state + if not self._bnd_grad_cv_func: + self._bnd_grad_cv_func = self._identical_grad_cv + if not self._bnd_grad_temperature_func: + self._bnd_grad_temperature_func = self._identical_grad_temperature + def _boundary_quantity(self, discr, btag, quantity, **kwargs): """Get a boundary quantity on local boundary, or projected to "all_faces".""" if "local" in kwargs: @@ -149,11 +166,13 @@ def _boundary_quantity(self, discr, btag, quantity, **kwargs): def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): return TracePair(btag, interior=state_minus, - exterior=self._bnd_state_func(discr, btag, gas_model, - state_minus, **kwargs)) + exterior=self._bnd_state_func(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=state_minus, + **kwargs)) - def _opposite_temperature(self, temperature_minus, **kwargs): - return -temperature_minus + def _opposite_temperature(self, state_minus, **kwargs): + return -state_minus.temperature def _identical_state(self, state_minus, **kwargs): return state_minus @@ -161,16 +180,20 @@ def _identical_state(self, state_minus, **kwargs): def _identical_grad_cv(self, grad_cv_minus, **kwargs): return grad_cv_minus - def _idenitcal_grad_t(self, grad_t_minus, **kwargs): + def _identical_grad_temperature(self, grad_t_minus, **kwargs): return grad_t_minus def _gradient_flux_for_prescribed_cv(self, discr, btag, gas_model, state_minus, **kwargs): # Use prescribed external state and gradient numerical flux function + boundary_state = self._bnd_state_func(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=state_minus, + **kwargs) cv_pair = TracePair(btag, interior=state_minus.cv, - exterior=self._bnd_state_func(discr, btag, gas_model, - state_minus, **kwargs)) + exterior=boundary_state.cv) + actx = state_minus.array_context nhat = thaw(discr.normal(btag), actx) return self._boundary_quantity( @@ -181,30 +204,62 @@ def _gradient_flux_for_prescribed_temperature(self, discr, btag, gas_model, state_minus, **kwargs): # Feed a boundary temperature to numerical flux for grad op actx = state_minus.array_context - nhat = thaw(actx, discr.normal(btag)) + nhat = thaw(discr.normal(btag), actx) bnd_tpair = TracePair(btag, interior=state_minus.temperature, exterior=self._bnd_temperature_func( - discr, btag, gas_model, state_minus, **kwargs)) + discr=discr, btag=btag, gas_model=gas_model, + state_minus=state_minus, **kwargs)) return self._boundary_quantity(discr, btag, self._grad_num_flux_func(bnd_tpair, nhat), **kwargs) - def _inviscid_flux_for_prescribed_state(self, discr, btag, gas_model, - state_minus, - numerical_flux_func=inviscid_rusanov, - **kwargs): + def _inviscid_flux_for_prescribed_state( + self, discr, btag, gas_model, state_minus, + numerical_flux_func=inviscid_flux_rusanov, **kwargs): # Use a prescribed boundary state and the numerical flux function - boundary_state_pair = self._boundary_state_pair(discr, btag, gas_model, - state_minus, **kwargs) + boundary_state_pair = self._boundary_state_pair(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=state_minus, + **kwargs) return self._boundary_quantity( discr, btag, numerical_flux_func(discr, gas_model=gas_model, state_pair=boundary_state_pair), **kwargs) - def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, - numerical_flux_func=inviscid_rusanov, **kwargs): + def _viscous_flux_for_prescribed_state(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, + numerical_flux_func=viscous_flux_central, + **kwargs): + state_pair = self._boundary_state_pair(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=state_minus, **kwargs) + grad_cv_pair = \ + TracePair(btag, interior=grad_cv_minus, + exterior=self._bnd_grad_cv_func( + discr=discr, btag=btag, gas_model=gas_model, + state_minus=state_minus, grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus)) + + grad_t_pair = \ + TracePair( + btag, interior=grad_t_minus, + exterior=self._bnd_grad_temperature_func( + discr=discr, btag=btag, gas_model=gas_model, + state_minus=state_minus, grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus)) + + return self._boundary_quantity( + discr, btag, + quantity=numerical_flux_func(discr=discr, gas_model=gas_model, + state_pair=state_pair, + grad_cv_pair=grad_cv_pair, + grad_t_pair=grad_t_pair)) + + def inviscid_divergence_flux( + self, discr, btag, gas_model, state_minus, + numerical_flux_func=inviscid_flux_rusanov, **kwargs): """Get the inviscid boundary flux for the divergence operator.""" return self._inviscid_flux_func(discr, btag, gas_model, state_minus, numerical_flux_func=numerical_flux_func, @@ -212,41 +267,26 @@ def inviscid_divergence_flux(self, discr, btag, gas_model, state_minus, def cv_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): """Get the cv flux for *btag* for use in the gradient operator.""" - return self._cv_gradient_flux_func(discr, btag, gas_model=gas_model, - state_minus=state_minus, **kwargs) + return self._cv_gradient_flux_func( + discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus, + **kwargs) def temperature_gradient_flux(self, discr, btag, gas_model, state_minus, **kwargs): """Get the "temperature flux" for *btag* for use in the gradient operator.""" - return self._temperature_gradient_flux(discr, btag, gas_model, state_minus, - **kwargs) + return self._temperature_grad_flux_func(discr, btag, gas_model, state_minus, + **kwargs) def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, - grad_cv_minus, grad_t_minus, **kwargs): + grad_cv_minus, grad_t_minus, + numerical_flux_func=viscous_flux_central, **kwargs): """Get the viscous flux for *btag* for use in the divergence operator.""" - return self._viscous_flux_func(discr, btag, gas_model, state_minus, - grad_cv_minus, grad_t_minus, **kwargs) - - def _viscous_flux_for_prescribed_state(self, discr, btag, gas_model, state_minus, - grad_cv_minus, grad_t_minus, **kwargs): - state_pair = self._boundary_state_pair(discr, btag, gas_model, state_minus, - **kwargs) - grad_cv_pair = \ - TracePair(btag, interior=grad_cv_minus, - exterior=self._boundary_grad_cv(discr, btag, gas_model, - state_minus, grad_cv_minus, - grad_t_minus)) - - grad_t_pair = \ - TracePair( - btag, interior=grad_t_minus, - exterior=self._boundary_grad_temperature(discr, btag, gas_model, - state_minus, grad_cv_minus, - grad_t_minus)) - return self._boundary_quantity( - discr, btag, - quantity=self._viscous_num_flux_func(discr, gas_model, state_pair, - grad_cv_pair, grad_t_pair)) + return self._viscous_flux_func(discr=discr, btag=btag, gas_model=gas_model, + state_minus=state_minus, + grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus, + numerical_flux_func=numerical_flux_func, + **kwargs) class DummyBoundary(PrescribedFluidBoundary): @@ -297,7 +337,7 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): actx = state_minus.array_context # Grab a unit normal to the boundary - nhat = thaw(actx, discr.normal(btag)) + nhat = thaw(discr.normal(btag), actx) # Subtract out the 2*wall-normal component # of velocity from the velocity at the wall to @@ -309,9 +349,8 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): # Form the external boundary solution with the new momentum ext_cv = make_conserved(dim=dim, mass=cv_minus.mass, energy=cv_minus.energy, momentum=ext_mom, species_mass=cv_minus.species_mass) - t_seed = None if ext_cv.nspecies == 0 else state_minus.temperature + t_seed = state_minus.temperature if state_minus.is_mixture else None - from mirgecom.gas_model import make_fluid_state return make_fluid_state(cv=ext_cv, gas_model=gas_model, temperature_seed=t_seed) @@ -327,7 +366,7 @@ def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" PrescribedFluidBoundary.__init__( self, boundary_state_func=self.adiabatic_noslip_state, - cv_gradient_func=self.adiabatic_noslip_grad_cv, + # boundary_gradient_cv_func=self.adiabatic_noslip_grad_cv, ) # Check wall_velocity (assumes dim is correct) if wall_velocity is None: @@ -336,21 +375,20 @@ def __init__(self, wall_velocity=None, dim=2): raise ValueError(f"Specified wall velocity must be {dim}-vector.") self._wall_velocity = wall_velocity - def adiabatic_noslip_state(self, discr, btag, state_minus, **kwargs): + def adiabatic_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary.""" - dim = discr.dim - - # Compute momentum solution wall_pen = 2.0 * self._wall_velocity * state_minus.mass_density ext_mom = wall_pen - state_minus.momentum_density # no-slip # Form the external boundary solution with the new momentum - return make_conserved(dim=dim, mass=state_minus.mass_density, - energy=state_minus.energy_density, - momentum=ext_mom, - species_mass=state_minus.species_mass_density) - - def adiabatic_noslip_grad_cv(self, nodes, nhat, grad_cv_minus, **kwargs): + cv = make_conserved(dim=state_minus.dim, mass=state_minus.mass_density, + energy=state_minus.energy_density, + momentum=ext_mom, + species_mass=state_minus.species_mass_density) + tseed = state_minus.temperature if state_minus.is_mixture else None + return make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) + + def adiabatic_noslip_grad_cv(self, grad_cv_minus, **kwargs): """Get the exterior solution on the boundary.""" return(-grad_cv_minus) @@ -368,30 +406,32 @@ def __init__(self, wall_temperature=300): """Initialize the boundary condition object.""" self._wall_temp = wall_temperature PrescribedFluidBoundary.__init__( - self, boundary_cv_func=self.isothermal_noslip_cv, - fluid_temperature_func=self.temperature_bc + self, boundary_state_func=self.isothermal_noslip_state, + boundary_temperature_func=self.temperature_bc ) - def isothermal_noslip_cv(self, discr, btag, eos, cv_minus, **kwargs): - """Get the interior and exterior solution (*cv*) on the boundary.""" - temperature_wall = self._wall_temp + 0*cv_minus.mass - velocity_plus = -cv_minus.velocity - mass_frac_plus = -cv_minus.species_mass_fractions + def isothermal_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): + """Get the interior and exterior solution (*state_minus*) on the boundary.""" + temperature_wall = self._wall_temp + 0*state_minus.mass_density + velocity_plus = -state_minus.velocity + mass_frac_plus = -state_minus.species_mass_fractions - internal_energy_plus = eos.get_internal_energy( + internal_energy_plus = gas_model.eos.get_internal_energy( temperature=temperature_wall, species_mass_fractions=mass_frac_plus, - mass=cv_minus.mass + mass=state_minus.mass_density ) - total_energy_plus = cv_minus.mass*(internal_energy_plus + total_energy_plus = state_minus.mass_density*(internal_energy_plus + .5*np.dot(velocity_plus, velocity_plus)) cv_plus = make_conserved( - discr.dim, mass=cv_minus.mass, energy=total_energy_plus, - momentum=-cv_minus.momentum, species_mass=cv_minus.species_mass + state_minus.dim, mass=state_minus.mass_density, energy=total_energy_plus, + momentum=-state_minus.momentum_density, + species_mass=state_minus.species_mass_density ) + tseed = state_minus.temperature if state_minus.is_mixture else None + return make_fluid_state(cv=cv_plus, gas_model=gas_model, + temperature_seed=tseed) - return TracePair(btag, interior=cv_minus, exterior=cv_plus) - - def temperature_bc(self, nodes, cv, temperature, eos, **kwargs): + def temperature_bc(self, state_minus, **kwargs): """Get temperature value to weakly prescribe wall bc.""" - return 2*self._wall_temp - temperature + return 2*self._wall_temp - state_minus.temperature From 03bd16a7d5d50654ed4ce0e223d003332d7e8275 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:39:01 -0600 Subject: [PATCH 366/873] Update Euler module to use generalized flux driver. --- mirgecom/euler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 005948ea3..06ff8becc 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -56,7 +56,7 @@ from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux, - inviscid_rusanov + inviscid_flux_rusanov ) from grudge.eager import ( interior_trace_pair, @@ -68,7 +68,7 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, - inviscid_numerical_flux_func=inviscid_rusanov): + inviscid_numerical_flux_func=inviscid_flux_rusanov): r"""Compute RHS of the Euler flow equations. Returns From de8c0e0f8aa5d7c1f96293157f9545d816698753 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:41:24 -0600 Subject: [PATCH 367/873] Add generic lfr flux driver --- mirgecom/flux.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index 8a813f629..c8d656a90 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -1,4 +1,4 @@ -""":mod:`mirgecom.flux` provides inter-facial flux routines. +""":mod:`mirgecom.flux` provides inter-elemental flux routines. Numerical Flux Routines ^^^^^^^^^^^^^^^^^^^^^^^ @@ -35,7 +35,7 @@ import numpy as np # noqa -def num_flux_lfr(f_minus, f_plus, q_minus, q_plus, lam): +def num_flux_lfr(f_minus, f_plus, q_minus, q_plus, lam, **kwargs): """Lax-Friedrichs/Rusanov low-level numerical flux.""" return (f_minus + f_plus - lam*(q_plus - q_minus))/2 @@ -45,6 +45,19 @@ def num_flux_central(f_minus, f_plus, **kwargs): return (f_plus + f_minus)/2 +def lfr_flux_driver(discr, state_pair, physical_flux_func): + """State-to-flux driver for Rusanov numerical fluxes.""" + from arraycontext import thaw + actx = state_pair.int.array_context + normal = thaw(discr.normal(state_pair.dd), actx) + lam = actx.np.maximum(state_pair.int.wavespeed, state_pair.ext.wavespeed) + + return num_flux_lfr(f_minus=physical_flux_func(state_pair.int)@normal, + f_plus=physical_flux_func(state_pair.ext)@normal, + q_minus=state_pair.int.cv, + q_plus=state_pair.ext.cv, lam=lam) + + def gradient_flux_central(u_tpair, normal): r"""Compute a central flux for the gradient operator. From 1cca2e953cae4d7fdac011a19f06985afa851ab7 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:43:49 -0600 Subject: [PATCH 368/873] use generic lfr flux driver --- mirgecom/inviscid.py | 121 +++++-------------------------------------- 1 file changed, 14 insertions(+), 107 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index ed50a781b..3a2731c98 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -4,7 +4,8 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: inviscid_flux -.. autofunction:: inviscid_facial_divergence_flux +.. autofunction:: inviscid_facial_flux +.. autofunction:: inviscid_flux_rusanov Inviscid Time Step Computation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -38,9 +39,7 @@ """ import numpy as np -from meshmode.dof_array import thaw -from grudge.trace_pair import TracePair -from mirgecom.flux import divergence_flux_lfr +from mirgecom.flux import lfr_flux_driver from mirgecom.fluid import make_conserved @@ -84,42 +83,10 @@ def inviscid_flux(state): momentum=mom_flux, species_mass=species_mass_flux) -def _lfr_flux(cv_pair, flux_pair, lam): - """Fluid state interface for Lax-Frierichs/Rusanov flux.""" - from mirgecom.flux import num_flux_lfr - return num_flux_lfr(flux_pair.int, flux_pair.ext, cv_pair.int, cv_pair.ext, - lam) +def inviscid_flux_rusanov(discr, gas_model, state_pair, **kwargs): + r"""High-level interface for inviscid facial flux using Rusanov numerical flux. - -def inviscid_rusanov(discr, gas_model, state_pair): - """High-level interface for inviscid facial flux using Rusanov numerical flux.""" - actx = state_pair.int.array_context - normal = thaw(actx, discr.normal(state_pair.dd)) - - flux_pair = TracePair(state_pair.dd, - interior=inviscid_flux(state_pair.int)@normal, - exterior=inviscid_flux(state_pair.ext)@normal) - - # This calculates the local maximum eigenvalue of the flux Jacobian - # for a single component gas, i.e. the element-local max wavespeed |v| + c. - w_int = state_pair.int.speed_of_sound + state_pair.int.speed - w_ext = state_pair.ext.speed_of_sound + state_pair.ext.speed - # Use "gridspeed" for lamda to make this a Lax-Friedrichs - lam = actx.np.maximum(w_int, w_ext) - - cv_pair = TracePair(state_pair.dd, - interior=state_pair.int.cv, - exterior=state_pair.ext.cv) - return _lfr_flux(cv_pair, flux_pair, lam) - - -def inviscid_facial_flux(discr, gas_model, state_pair, - numerical_flux_func=inviscid_rusanov, local=False): - r"""Return the numerical inviscid flux for the divergence operator. - - Different numerical fluxes may be used through the specificiation of - the *numerical_flux_func*. By default, a Rusanov-type flux is calculated - as: + The Rusanov inviscid numerical flux is calculated as: .. math:: @@ -130,55 +97,16 @@ def inviscid_facial_flux(discr, gas_model, state_pair, exterior of the face on which the flux is to be calculated, $\mathbf{F}$ is the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the *local* maximum fluid wavespeed. - - Parameters - ---------- - discr: :class:`~grudge.eager.EagerDGDiscretization` - - The discretization collection to use - - state_pair: :class:`~grudge.trace_pair.TracePair` - - Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon - which the flux calculation is to be performed - - local: bool - - Indicates whether to skip projection of fluxes to "all_faces" or not. If - set to *False* (the default), the returned fluxes are projected to - "all_faces." If set to *True*, the returned fluxes are not projected to - "all_faces"; remaining instead on the boundary restriction. - - Returns - ------- - :class:`~mirgecom.fluid.ConservedVars` - - A CV object containing the scalar numerical fluxes at the input faces. - The returned fluxes are scalar because they've already been dotted with - the face normals as required by the divergence operator for which they - are being computed. """ - numerical_flux = numerical_flux_func(discr, gas_model, state_pair) - return numerical_flux if local else discr.project(state_pair.dd, "all_faces", - numerical_flux) - - -def inviscid_facial_divergence_flux(discr, gas_model, state_pair, local=False): - r"""Return the flux across a face given the solution on both sides *q_pair*. - - This flux is currently hard-coded to use a Rusanov-type local Lax-Friedrichs - (LFR) numerical flux at element boundaries. The numerical inviscid flux $F^*$ is - calculated as: + return lfr_flux_driver(discr, state_pair, inviscid_flux) - .. math:: - \mathbf{F}^{*}_{\mathtt{LFR}} = \frac{1}{2}(\mathbf{F}(q^-) - +\mathbf{F}(q^+)) \cdot \hat{n} + \frac{\lambda}{2}(q^{-} - q^{+}), +def inviscid_facial_flux(discr, gas_model, state_pair, + numerical_flux_func=inviscid_flux_rusanov, local=False): + r"""Return the numerical inviscid flux for the divergence operator. - where $q^-, q^+$ are the fluid solution state on the interior and the - exterior of the face on which the LFR flux is to be calculated, $\mathbf{F}$ is - the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the - *local* maximum fluid wavespeed. + Different numerical fluxes may be used through the specificiation of + the *numerical_flux_func*. By default, a Rusanov-type flux is used. Parameters ---------- @@ -207,29 +135,8 @@ def inviscid_facial_divergence_flux(discr, gas_model, state_pair, local=False): the face normals as required by the divergence operator for which they are being computed. """ - actx = state_pair.int.array_context - flux_pair = TracePair(state_pair.dd, - interior=inviscid_flux(state_pair.int), - exterior=inviscid_flux(state_pair.ext)) - - # This calculates the local maximum eigenvalue of the flux Jacobian - # for a single component gas, i.e. the element-local max wavespeed |v| + c. - w_int = state_pair.int.speed_of_sound + state_pair.int.speed - w_ext = state_pair.ext.speed_of_sound + state_pair.ext.speed - lam = actx.np.maximum(w_int, w_ext) - - normal = thaw(actx, discr.normal(state_pair.dd)) - cv_pair = TracePair(state_pair.dd, - interior=state_pair.int.cv, - exterior=state_pair.ext.cv) - - # todo: user-supplied flux routine - flux_weak = divergence_flux_lfr(cv_pair, flux_pair, normal=normal, lam=lam) - - if local is False: - return discr.project(cv_pair.dd, "all_faces", flux_weak) - - return flux_weak + num_flux = numerical_flux_func(discr, gas_model, state_pair) + return num_flux if local else discr.project(state_pair.dd, "all_faces", num_flux) def get_inviscid_timestep(discr, state): From 8f71bb1e67cbec0cf7f4e6c04d28ba1eb3be3bba Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:46:48 -0600 Subject: [PATCH 369/873] Use new state interface --- mirgecom/navierstokes.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 0feb32217..7674c9959 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -64,7 +64,7 @@ from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux, - inviscid_rusanov + inviscid_flux_rusanov ) from mirgecom.viscous import ( viscous_flux, @@ -78,11 +78,11 @@ from mirgecom.operators import ( div_operator, grad_operator ) -from meshmode.dof_array import thaw +from arraycontext import thaw def ns_operator(discr, gas_model, state, boundaries, time=0.0, - inviscid_numerical_flux_func=inviscid_rusanov, + inviscid_numerical_flux_func=inviscid_flux_rusanov, gradient_numerical_flux_func=gradient_flux_central, viscous_numerical_flux_func=viscous_flux_central): r"""Compute RHS of the Navier-Stokes equations. @@ -163,7 +163,7 @@ def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, # Data-independent grad flux for faces def _grad_flux_interior(q_pair): - normal = thaw(actx, discr.normal(q_pair.dd)) + normal = thaw(discr.normal(q_pair.dd), actx) # Hard-coding central per [Bassi_1997]_ eqn 13 flux_weak = gradient_numerical_flux_func(q_pair, normal) return discr.project(q_pair.dd, "all_faces", flux_weak) @@ -234,8 +234,9 @@ def fvisc_divergence_flux_interior(tpair_tuple): state_pair = tpair_tuple[0] grad_cv_pair = tpair_tuple[1] grad_t_pair = tpair_tuple[2] - return viscous_facial_flux(discr, gas_model, state_pair, grad_cv_pair, - grad_t_pair, + return viscous_facial_flux(discr=discr, gas_model=gas_model, + state_pair=state_pair, grad_cv_pair=grad_cv_pair, + grad_t_pair=grad_t_pair, numerical_flux_func=viscous_numerical_flux_func) # viscous part of bcs applied here @@ -243,8 +244,9 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): grad_cv_minus = discr.project("vol", btag, grad_cv) grad_t_minus = discr.project("vol", btag, grad_t) return boundaries[btag].viscous_divergence_flux( - discr, btag, gas_model=gas_model, state_minus=boundary_state[btag], - grad_cv_minus=grad_cv_minus, grad_t=grad_t_minus, time=time, + discr=discr, btag=btag, gas_model=gas_model, + state_minus=boundary_state, + grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus, time=time, numerical_flux_func=viscous_numerical_flux_func) vol_term = ( @@ -255,10 +257,10 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): bnd_term = ( _elbnd_flux( discr, fvisc_divergence_flux_interior, fvisc_divergence_flux_boundary, - viscous_states_int_bnd, boundaries) + viscous_states_int_bnd, boundary_states) - _elbnd_flux( discr, finv_divergence_flux_interior, finv_divergence_flux_boundary, - cv_int_pair, cv_part_pairs, boundaries) + interior_state_pairs, boundary_states) ).join() # NS RHS From 517b81cbcc6c9c9d71650ccfb994ab13ead17c84 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:47:43 -0600 Subject: [PATCH 370/873] Use new num flux interface --- mirgecom/viscous.py | 86 +++++++++++++++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 22 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 8fb50d7c8..14a1b6a7e 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -9,6 +9,7 @@ .. autofunction:: conductive_heat_flux .. autofunction:: diffusive_heat_flux .. autofunction:: viscous_facial_flux +.. autofunction:: viscous_flux_central Viscous Time Step Computation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -273,9 +274,61 @@ def viscous_flux(state, grad_cv, grad_t): momentum=tau, species_mass=-j) -def viscous_facial_flux(discr, state_tpair, grad_cv_tpair, grad_t_tpair, - local=False): - """Return the viscous flux across a face given the solution on both sides. +def viscous_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, **kwargs): + r"""Return a central viscous facial flux for the divergence operator. + + The central flux is defined as: + + .. math:: + + f_{\text{central}} = \frac{1}{2}\left(\mathbf{f}_v^+ + + \mathbf{f}_v^-\right)\cdot\hat{\mathbf{n}}, + + with viscous fluxes ($\mathbf{f}_v$), and the outward pointing + face normal ($\hat\mathbf{n}$). + + Parameters + ---------- + discr: :class:`~grudge.eager.EagerDGDiscretization` + + The discretization to use + + state_pair: :class:`~grudge.trace_pair.TracePair` + + Trace pair of :class:`~mirgecom.gas_model.FluidState` with the full fluid + conserved and thermal state on the faces + + grad_cv_pair: :class:`~grudge.trace_pair.TracePair` + + Trace pair of :class:`~mirgecom.fluid.ConservedVars` with the gradient of the + fluid solution on the faces + + grad_t_pair: :class:`~grudge.trace_pair.TracePair` + + Trace pair of temperature gradient on the faces. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + + The viscous transport flux in the face-normal direction on "all_faces" or + local to the sub-discretization depending on *local* input parameter + """ + actx = state_pair.int.array_context + normal = thaw(actx, discr.normal(state_pair.dd)) + + f_int = viscous_flux(state_pair.int, grad_cv_pair.int, + grad_t_pair.int) + f_ext = viscous_flux(state_pair.ext, grad_cv_pair.ext, + grad_t_pair.ext) + f_pair = TracePair(state_pair.dd, interior=f_int, exterior=f_ext) + + return divergence_flux_central(f_pair, normal) + + +def viscous_facial_flux(discr, gas_model, state_pair, grad_cv_pair, grad_t_pair, + numerical_flux_func=viscous_flux_central, local=False): + """Return the viscous facial flux for the divergence operator. Parameters ---------- @@ -283,17 +336,17 @@ def viscous_facial_flux(discr, state_tpair, grad_cv_tpair, grad_t_tpair, The discretization to use - state_tpair: :class:`~grudge.trace_pair.TracePair` + state_pair: :class:`~grudge.trace_pair.TracePair` Trace pair of :class:`~mirgecom.gas_model.FluidState` with the full fluid conserved and thermal state on the faces - grad_cv_tpair: :class:`~grudge.trace_pair.TracePair` + grad_cv_pair: :class:`~grudge.trace_pair.TracePair` Trace pair of :class:`~mirgecom.fluid.ConservedVars` with the gradient of the fluid solution on the faces - grad_t_tpair: :class:`~grudge.trace_pair.TracePair` + grad_t_pair: :class:`~grudge.trace_pair.TracePair` Trace pair of temperature gradient on the faces. @@ -311,22 +364,11 @@ def viscous_facial_flux(discr, state_tpair, grad_cv_tpair, grad_t_tpair, The viscous transport flux in the face-normal direction on "all_faces" or local to the sub-discretization depending on *local* input parameter """ - actx = state_tpair.int.array_context - normal = thaw(actx, discr.normal(state_tpair.dd)) - - f_int = viscous_flux(state_tpair.int, grad_cv_tpair.int, - grad_t_tpair.int) - f_ext = viscous_flux(state_tpair.ext, grad_cv_tpair.ext, - grad_t_tpair.ext) - f_tpair = TracePair(state_tpair.dd, interior=f_int, exterior=f_ext) - - # todo: user-supplied flux routine - # note: Hard-code central flux here for BR1 - flux_weak = divergence_flux_central(f_tpair, normal) - - if not local: - return discr.project(state_tpair.dd, "all_faces", flux_weak) - return flux_weak + num_flux = numerical_flux_func(discr=discr, gas_model=gas_model, + state_pair=state_pair, + grad_cv_pair=grad_cv_pair, + grad_t_pair=grad_t_pair) + return num_flux if local else discr.project(state_pair.dd, "all_faces", num_flux) def get_viscous_timestep(discr, state): From 3c0436b4b1d8b6c43f0cac4a511b75f0d48bd4c1 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 11:48:30 -0600 Subject: [PATCH 371/873] Update tests for new interfaces --- test/test_bc.py | 153 ++++++++++++++++++++++++-------------- test/test_euler.py | 25 +++++-- test/test_inviscid.py | 13 +++- test/test_navierstokes.py | 55 +++++++++----- 4 files changed, 162 insertions(+), 84 deletions(-) diff --git a/test/test_bc.py b/test/test_bc.py index 236c53d77..a4b6ce5ea 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -43,7 +43,12 @@ from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) - +from mirgecom.gas_model import ( + GasModel, + make_fluid_state, + project_fluid_state, + make_fluid_state_interior_trace_pair +) logger = logging.getLogger(__name__) @@ -70,9 +75,9 @@ def test_slipwall_identity(actx_factory, dim): order = 3 discr = EagerDGDiscretization(actx, mesh, order=order) nodes = thaw(actx, discr.nodes()) - eos = IdealSingleGas() orig = np.zeros(shape=(dim,)) nhat = thaw(actx, discr.normal(BTAG_ALL)) + gas_model = GasModel(eos=IdealSingleGas()) logger.info(f"Number of {dim}d elems: {mesh.nelements}") @@ -87,15 +92,16 @@ def test_slipwall_identity(actx_factory, dim): uniform_state = initializer(nodes) cv_minus = discr.project("vol", BTAG_ALL, uniform_state) - dv_minus = eos.dependent_vars(cv_minus) + state_minus = make_fluid_state(cv=cv_minus, gas_model=gas_model) - cv_plus = wall._bnd_cv_func(discr, btag=BTAG_ALL, eos=eos, - cv_minus=cv_minus, dv_minus=dv_minus) + state_plus = wall._bnd_state_func( + discr=discr, btag=BTAG_ALL, gas_model=gas_model, + state_minus=state_minus) def bnd_norm(vec): return actx.to_numpy(discr.norm(vec, p=np.inf, dd=BTAG_ALL)) - bnd_pair = TracePair(BTAG_ALL, interior=cv_minus, exterior=cv_plus) + bnd_pair = TracePair(BTAG_ALL, interior=cv_minus, exterior=state_plus.cv) # check that mass and energy are preserved mass_resid = bnd_pair.int.mass - bnd_pair.ext.mass @@ -126,7 +132,7 @@ def test_slipwall_flux(actx_factory, dim, order): actx = actx_factory() wall = AdiabaticSlipBoundary() - eos = IdealSingleGas() + gas_model = GasModel(eos=IdealSingleGas()) from pytools.convergence import EOCRecorder eoc = EOCRecorder() @@ -158,22 +164,24 @@ def bnd_norm(vec): from mirgecom.initializers import Uniform initializer = Uniform(dim=dim, velocity=vel) cv_minus = discr.project("vol", BTAG_ALL, initializer(nodes)) - dv_minus = eos.dependent_vars(cv_minus) - cv_plus = wall._bnd_cv_func(discr, btag=BTAG_ALL, eos=eos, - cv_minus=cv_minus, - dv_minus=dv_minus) - bnd_pair = TracePair(BTAG_ALL, interior=cv_minus, exterior=cv_plus) + state_minus = make_fluid_state(cv=cv_minus, gas_model=gas_model) + state_plus = wall._bnd_state_func(discr=discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus) + bnd_pair = TracePair(BTAG_ALL, interior=state_minus, + exterior=state_plus) # Check the total velocity component normal # to each surface. It should be zero. The # numerical fluxes cannot be zero. - avg_state = 0.5*(bnd_pair.int + bnd_pair.ext) + avg_state = 0.5*(bnd_pair.int.cv + bnd_pair.ext.cv) err_max = max(err_max, bnd_norm(np.dot(avg_state.momentum, nhat))) - from mirgecom.inviscid import inviscid_facial_divergence_flux + from mirgecom.inviscid import inviscid_facial_flux bnd_flux = \ - inviscid_facial_divergence_flux(discr, eos, cv_tpair=bnd_pair, - local=True) + inviscid_facial_flux(discr=discr, gas_model=gas_model, + state_pair=bnd_pair, local=True) + err_max = max(err_max, bnd_norm(bnd_flux.mass), bnd_norm(bnd_flux.energy)) @@ -212,11 +220,13 @@ def test_noslip(actx_factory, dim): sigma = 5.0 from mirgecom.transport import SimpleTransport - transport_model = SimpleTransport(viscosity=sigma, thermal_conductivity=kappa) - from mirgecom.boundary import IsothermalNoSlipBoundary + + gas_model = GasModel(eos=IdealSingleGas(gas_const=1.0), + transport=SimpleTransport(viscosity=sigma, + thermal_conductivity=kappa)) + wall = IsothermalNoSlipBoundary(wall_temperature=wall_temp) - eos = IdealSingleGas(transport_model=transport_model, gas_const=1.0) # from pytools.convergence import EOCRecorder # eoc = EOCRecorder() @@ -260,29 +270,41 @@ def scalar_flux_interior(int_tpair): vel[vdir] = parity from mirgecom.initializers import Uniform initializer = Uniform(dim=dim, velocity=vel) - uniform_state = initializer(nodes, eos=eos) + uniform_cv = initializer(nodes, eos=gas_model.eos) + uniform_state = make_fluid_state(cv=uniform_cv, gas_model=gas_model) + state_minus = project_fluid_state(discr, BTAG_ALL, uniform_state, + gas_model) + print(f"{uniform_state=}") - temper = eos.temperature(uniform_state) + temper = uniform_state.temperature print(f"{temper=}") - cv_int_tpair = interior_trace_pair(discr, uniform_state) + cv_int_tpair = interior_trace_pair(discr, uniform_state.cv) + state_pair = make_fluid_state_interior_trace_pair(discr, uniform_state, + gas_model) cv_flux_int = scalar_flux_interior(cv_int_tpair) print(f"{cv_flux_int=}") + cv_flux_bc = wall.cv_gradient_flux(discr, btag=BTAG_ALL, - eos=eos, cv=uniform_state) + gas_model=gas_model, + state_minus=state_minus) print(f"{cv_flux_bc=}") cv_flux_bnd = cv_flux_bc + cv_flux_int t_int_tpair = interior_trace_pair(discr, temper) t_flux_int = scalar_flux_interior(t_int_tpair) - t_flux_bc = wall.t_gradient_flux(discr, btag=BTAG_ALL, eos=eos, - cv=uniform_state) + t_flux_bc = wall.temperature_gradient_flux(discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus) t_flux_bnd = t_flux_bc + t_flux_int from mirgecom.inviscid import inviscid_facial_flux - i_flux_bc = wall.inviscid_divergence_flux(discr, btag=BTAG_ALL, eos=eos, - cv=uniform_state) - i_flux_int = inviscid_facial_flux(discr, eos=eos, cv_tpair=cv_int_tpair) + i_flux_bc = wall.inviscid_divergence_flux(discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus) + + i_flux_int = inviscid_facial_flux(discr=discr, gas_model=gas_model, + state_pair=state_pair) i_flux_bnd = i_flux_bc + i_flux_int print(f"{cv_flux_bnd=}") @@ -290,17 +312,23 @@ def scalar_flux_interior(int_tpair): print(f"{i_flux_bnd=}") from mirgecom.operators import grad_operator - grad_cv = make_conserved( - dim, q=grad_operator(discr, uniform_state.join(), cv_flux_bnd.join()) - ) - grad_t = grad_operator(discr, temper, t_flux_bnd) - print(f"{grad_cv=}") - print(f"{grad_t=}") - - v_flux_bc = wall.viscous_divergence_flux(discr, btag=BTAG_ALL, eos=eos, - cv=uniform_state, - grad_cv=grad_cv, t=temper, - grad_t=grad_t) + grad_cv_minus = \ + discr.project("vol", BTAG_ALL, + make_conserved(dim, + q=grad_operator(discr, + uniform_state.cv.join(), + cv_flux_bnd.join()))) + grad_t_minus = discr.project("vol", BTAG_ALL, + grad_operator(discr, temper, t_flux_bnd)) + + print(f"{grad_cv_minus=}") + print(f"{grad_t_minus=}") + + v_flux_bc = wall.viscous_divergence_flux(discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus, + grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus) print(f"{v_flux_bc=}") @@ -340,9 +368,10 @@ def test_prescribedviscous(actx_factory, dim): # (*note): Most people will never change these as they are used internally # to compute a DG gradient of Q and temperature. - from mirgecom.boundary import PrescribedViscousBoundary - wall = PrescribedViscousBoundary() - eos = IdealSingleGas(transport_model=transport_model, gas_const=1.0) + from mirgecom.boundary import PrescribedFluidBoundary + wall = PrescribedFluidBoundary() + gas_model = GasModel(eos=IdealSingleGas(gas_const=1.0), + transport=transport_model) npts_geom = 17 a = 1.0 @@ -381,28 +410,37 @@ def scalar_flux_interior(int_tpair): vel[vdir] = parity from mirgecom.initializers import Uniform initializer = Uniform(dim=dim, velocity=vel) - cv = initializer(nodes, eos=eos) + cv = initializer(nodes, eos=gas_model.eos) + state = make_fluid_state(cv, gas_model) + state_minus = project_fluid_state(discr, BTAG_ALL, state, gas_model) print(f"{cv=}") - temper = eos.temperature(cv) + temper = state.temperature print(f"{temper=}") cv_int_tpair = interior_trace_pair(discr, cv) cv_flux_int = scalar_flux_interior(cv_int_tpair) cv_flux_bc = wall.cv_gradient_flux(discr, btag=BTAG_ALL, - eos=eos, cv=cv) + gas_model=gas_model, + state_minus=state_minus) + cv_flux_bnd = cv_flux_bc + cv_flux_int t_int_tpair = interior_trace_pair(discr, temper) t_flux_int = scalar_flux_interior(t_int_tpair) - t_flux_bc = wall.t_gradient_flux(discr, btag=BTAG_ALL, eos=eos, - cv=cv) + t_flux_bc = wall.temperature_gradient_flux(discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus) t_flux_bnd = t_flux_bc + t_flux_int from mirgecom.inviscid import inviscid_facial_flux - i_flux_bc = wall.inviscid_divergence_flux(discr, btag=BTAG_ALL, eos=eos, - cv=cv) - i_flux_int = inviscid_facial_flux(discr, eos=eos, cv_tpair=cv_int_tpair) + i_flux_bc = wall.inviscid_divergence_flux(discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus) + state_pair = make_fluid_state_interior_trace_pair(discr, state, + gas_model) + i_flux_int = inviscid_facial_flux(discr, gas_model=gas_model, + state_pair=state_pair) i_flux_bnd = i_flux_bc + i_flux_int print(f"{cv_flux_bnd=}") @@ -414,10 +452,15 @@ def scalar_flux_interior(int_tpair): dim, q=grad_operator(discr, cv.join(), cv_flux_bnd.join()) ) grad_t = grad_operator(discr, temper, t_flux_bnd) - print(f"{grad_cv=}") - print(f"{grad_t=}") + grad_cv_minus = discr.project("vol", BTAG_ALL, grad_cv) + grad_t_minus = discr.project("vol", BTAG_ALL, grad_t) + + print(f"{grad_cv_minus=}") + print(f"{grad_t_minus=}") - v_flux_bc = wall.viscous_divergence_flux(discr, btag=BTAG_ALL, eos=eos, - cv=cv, grad_cv=grad_cv, - t=temper, grad_t=grad_t) + v_flux_bc = wall.viscous_divergence_flux(discr=discr, btag=BTAG_ALL, + gas_model=gas_model, + state_minus=state_minus, + grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus) print(f"{v_flux_bc=}") diff --git a/test/test_euler.py b/test/test_euler.py index af8b29be2..839a2cc30 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -121,9 +121,11 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): for i in range(num_equations)]) ) + from mirgecom.inviscid import inviscid_flux_rusanov boundaries = {BTAG_ALL: DummyBoundary()} - inviscid_rhs = euler_operator(discr, state=fluid_state, gas_model=gas_model, - boundaries=boundaries, time=0.0) + inviscid_rhs = euler_operator( + discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, + time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov) rhs_resid = inviscid_rhs - expected_rhs @@ -168,8 +170,9 @@ def inf_norm(x): fluid_state = make_fluid_state(cv, gas_model) boundaries = {BTAG_ALL: DummyBoundary()} - inviscid_rhs = euler_operator(discr, state=fluid_state, gas_model=gas_model, - boundaries=boundaries, time=0.0) + inviscid_rhs = euler_operator( + discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, + time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov) rhs_resid = inviscid_rhs - expected_rhs rho_resid = rhs_resid.mass @@ -248,9 +251,10 @@ def _vortex_boundary(discr, btag, gas_model, state_minus, **kwargs): BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_vortex_boundary) } + from mirgecom.inviscid import inviscid_flux_rusanov inviscid_rhs = euler_operator( discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, - time=0.0) + time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov) err_max = actx.to_numpy(discr.norm(inviscid_rhs.join(), np.inf)) eoc_rec.add_data_point(1.0 / nel_1d, err_max) @@ -316,9 +320,10 @@ def _lump_boundary(discr, btag, gas_model, state_minus, **kwargs): BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_lump_boundary) } + from mirgecom.inviscid import inviscid_flux_rusanov inviscid_rhs = euler_operator( discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, - time=0.0 + time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov ) expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) @@ -399,9 +404,10 @@ def _my_boundary(discr, btag, gas_model, state_minus, **kwargs): BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_my_boundary) } + from mirgecom.inviscid import inviscid_flux_rusanov inviscid_rhs = euler_operator( discr, state=fluid_state, gas_model=gas_model, boundaries=boundaries, - time=0.0 + time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov ) expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) @@ -503,10 +509,13 @@ def write_soln(state, write_status=True): return maxerr + from mirgecom.inviscid import inviscid_flux_rusanov + def rhs(t, q): fluid_state = make_fluid_state(q, gas_model) return euler_operator(discr, fluid_state, boundaries=boundaries, - gas_model=gas_model, time=t) + gas_model=gas_model, time=t, + inviscid_numerical_flux_func=inviscid_flux_rusanov) filter_order = 8 eta = .5 diff --git a/test/test_inviscid.py b/test/test_inviscid.py index 4c0aa99b0..21faf64ff 100644 --- a/test/test_inviscid.py +++ b/test/test_inviscid.py @@ -323,9 +323,13 @@ def test_facial_flux(actx_factory, nspecies, order, dim): discr, make_fluid_state(cv, gas_model), gas_model ) - from mirgecom.inviscid import inviscid_facial_divergence_flux + from mirgecom.inviscid import ( + inviscid_facial_flux, + inviscid_flux_rusanov + ) interior_face_flux = \ - inviscid_facial_divergence_flux(discr, state_tpair=state_tpair) + inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_tpair, + numerical_flux_func=inviscid_flux_rusanov) def inf_norm(data): if len(data) > 0: @@ -369,8 +373,9 @@ def inf_norm(data): state_tpair = TracePair(BTAG_ALL, interior=make_fluid_state(dir_bval, gas_model), exterior=make_fluid_state(dir_bc, gas_model)) - boundary_flux = inviscid_facial_divergence_flux( - discr, state_tpair=state_tpair + boundary_flux = inviscid_facial_flux( + discr, gas_model=gas_model, state_pair=state_tpair, + numerical_flux_func=inviscid_flux_rusanov ) assert inf_norm(boundary_flux.mass) < tolerance diff --git a/test/test_navierstokes.py b/test/test_navierstokes.py index 45d52897f..f1d2f15e4 100644 --- a/test/test_navierstokes.py +++ b/test/test_navierstokes.py @@ -36,7 +36,7 @@ make_obj_array, ) -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.navierstokes import ns_operator from mirgecom.fluid import make_conserved @@ -44,7 +44,7 @@ from mirgecom.boundary import ( DummyBoundary, - PrescribedViscousBoundary, + PrescribedFluidBoundary, AdiabaticNoslipMovingBoundary ) from mirgecom.eos import IdealSingleGas @@ -113,12 +113,18 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): mu = 1.0 kappa = 0.0 spec_diffusivity = 0 * np.ones(nspecies) - transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, - species_diffusivity=spec_diffusivity) - eos = IdealSingleGas(transport_model=transport_model) + + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel( + eos=IdealSingleGas(), + transport=SimpleTransport(viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity)) + state = make_fluid_state(gas_model=gas_model, cv=cv) + boundaries = {BTAG_ALL: DummyBoundary()} - ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv, t=0.0) + ns_rhs = ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + state=state, time=0.0) rhs_resid = ns_rhs - expected_rhs rho_resid = rhs_resid.mass @@ -156,8 +162,11 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order): dim, mass=mass_input, energy=energy_input, momentum=mom_input, species_mass=species_mass_input) + state = make_fluid_state(gas_model=gas_model, cv=cv) boundaries = {BTAG_ALL: DummyBoundary()} - ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv, t=0.0) + ns_rhs = ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + state=state, time=0.0) + rhs_resid = ns_rhs - expected_rhs rho_resid = rhs_resid.mass @@ -227,10 +236,11 @@ def test_poiseuille_rhs(actx_factory, order): mu = 1.0 kappa = 0.0 spec_diffusivity = 0 * np.ones(nspecies) - transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, - species_diffusivity=spec_diffusivity) - - eos = IdealSingleGas(transport_model=transport_model) + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel( + eos=IdealSingleGas(), + transport=SimpleTransport(viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity)) def poiseuille_2d(x_vec, eos, cv=None, **kwargs): y = x_vec[1] @@ -275,22 +285,33 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): ) discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) - cv_input = initializer(x_vec=nodes, eos=eos) + cv_input = initializer(x_vec=nodes, eos=gas_model.eos) num_eqns = dim + 2 expected_rhs = make_conserved( dim, q=make_obj_array([discr.zeros(actx) for i in range(num_eqns)]) ) + + def boundary_func(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) + boundaries = { - DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), + DTAG_BOUNDARY("-1"): + PrescribedFluidBoundary(boundary_state_func=boundary_func), + DTAG_BOUNDARY("+1"): + PrescribedFluidBoundary(boundary_state_func=boundary_func), DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} - ns_rhs = ns_operator(discr, eos=eos, boundaries=boundaries, cv=cv_input, - t=0.0) + state = make_fluid_state(gas_model=gas_model, cv=cv_input) + ns_rhs = ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + state=state, time=0.0) rhs_resid = ns_rhs - expected_rhs rho_resid = rhs_resid.mass From ddbce04bf343c6ea94f3e3f8bc711b42dc2325ae Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 13:17:08 -0600 Subject: [PATCH 372/873] use gas_model, arraycontext thaw --- examples/autoignition-mpi-lazy.py | 1 - examples/nsmix-mpi.py | 19 ++++++------------- examples/poiseuille-mpi.py | 14 ++++++++------ 3 files changed, 14 insertions(+), 20 deletions(-) delete mode 120000 examples/autoignition-mpi-lazy.py diff --git a/examples/autoignition-mpi-lazy.py b/examples/autoignition-mpi-lazy.py deleted file mode 120000 index aa50542f7..000000000 --- a/examples/autoignition-mpi-lazy.py +++ /dev/null @@ -1 +0,0 @@ -autoignition-mpi.py \ No newline at end of file diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 1529e59a3..df1833aca 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -270,7 +270,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_cv = initializer(x_vec=nodes, eos=eos) + current_cv = initializer(x_vec=nodes, eos=gas_model.eos) current_state = make_fluid_state(cv=current_cv, gas_model=gas_model, temperature_seed=tseed) @@ -290,7 +290,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, visualizer = make_visualizer(discr, order + 3 if discr.dim == 2 else order) initname = initializer.__class__.__name__ - eosname = eos.__class__.__name__ + eosname = gas_model.eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, nelements=local_nelements, global_nelements=global_nelements, @@ -323,14 +323,9 @@ def my_write_status(step, t, dt, state): if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}") - def my_write_viz(step, t, state, dv=None, production_rates=None): - if dv is None: - dv = eos.dependent_vars(state) - if production_rates is None: - production_rates = eos.get_production_rates(state) + def my_write_viz(step, t, state, dv): viz_fields = [("cv", state), - ("dv", dv), - ("reaction_rates", production_rates)] + ("dv", dv)] from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -415,9 +410,7 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=cv, tseed=tseed) if do_viz: - production_rates = eos.get_production_rates(cv) - my_write_viz(step=step, t=t, state=cv, dv=dv, - production_rates=production_rates) + my_write_viz(step=step, t=t, state=cv, dv=dv) dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) @@ -427,7 +420,7 @@ def my_pre_step(step, t, dt, state): except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=cv) + my_write_viz(step=step, t=t, state=cv, dv=dv) my_write_restart(step=step, t=t, state=cv, tseed=tseed) raise diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 44e5a138b..07211781c 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -35,7 +35,7 @@ PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -166,7 +166,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) if logmgr: logmgr_add_device_name(logmgr, queue) @@ -412,8 +412,9 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): + fluid_state = make_fluid_state(state, gas_model) return ns_operator(discr, gas_model=gas_model, boundaries=boundaries, - state=state, time=t) + state=fluid_state, time=t) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -422,7 +423,8 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) # Dump the final data @@ -432,9 +434,9 @@ def my_rhs(t, state): final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, current_state, exact) + component_errors = compare_fluid_solutions(discr, current_state.cv, exact) - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state) my_write_status(step=current_step, t=current_t, dt=final_dt, state=current_state, component_errors=component_errors) From 228e2954a3bdcea9d8699f40823ee95b40cf202e Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 13:18:10 -0600 Subject: [PATCH 373/873] Fix negation typo --- mirgecom/boundary.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index e2d711022..0a3fc5469 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -414,12 +414,13 @@ def isothermal_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs) """Get the interior and exterior solution (*state_minus*) on the boundary.""" temperature_wall = self._wall_temp + 0*state_minus.mass_density velocity_plus = -state_minus.velocity - mass_frac_plus = -state_minus.species_mass_fractions + mass_frac_plus = state_minus.species_mass_fractions internal_energy_plus = gas_model.eos.get_internal_energy( temperature=temperature_wall, species_mass_fractions=mass_frac_plus, mass=state_minus.mass_density ) + total_energy_plus = state_minus.mass_density*(internal_energy_plus + .5*np.dot(velocity_plus, velocity_plus)) From 724fa823dcea7fb2446b8e935bba28001b0fafa5 Mon Sep 17 00:00:00 2001 From: MTCam Date: Tue, 7 Dec 2021 14:15:53 -0600 Subject: [PATCH 374/873] Clean up a merge mistake. --- mirgecom/inviscid.py | 3 --- mirgecom/viscous.py | 4 ---- test/test_bc.py | 5 ----- 3 files changed, 12 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 301b666d3..3a2731c98 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -82,9 +82,6 @@ def inviscid_flux(state): return make_conserved(state.dim, mass=mass_flux, energy=energy_flux, momentum=mom_flux, species_mass=species_mass_flux) - Returns - ------- - :class:`~mirgecom.fluid.ConservedVars` def inviscid_flux_rusanov(discr, gas_model, state_pair, **kwargs): r"""High-level interface for inviscid facial flux using Rusanov numerical flux. diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 8446a99ca..14a1b6a7e 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -167,10 +167,6 @@ def conductive_heat_flux(state, grad_t): """ return _compute_conductive_heat_flux(grad_t, state.thermal_conductivity) -# low level routine works with numpy arrays and can be tested without -# a full grid + fluid state, etc -def _compute_diffusive_heat_flux(j, h_alpha): - return sum(h_alpha.reshape(-1, 1) * j) # low level routine works with numpy arrays and can be tested without # a full grid + fluid state, etc diff --git a/test/test_bc.py b/test/test_bc.py index 8fb663408..a4b6ce5ea 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -34,11 +34,6 @@ from mirgecom.initializers import Lump from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.eos import IdealSingleGas -from mirgecom.gas_model import ( - GasModel, - make_fluid_state, - project_fluid_state -) from grudge.eager import ( EagerDGDiscretization, interior_trace_pair From 5b8a57060c167110c8c8fc51873438fbe0b953af Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 7 Dec 2021 14:27:17 -0600 Subject: [PATCH 375/873] parallel branches --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9cf850f00..9e5092c51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,12 +12,12 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/inducer/loopy.git#egg=loopy +--editable git+https://github.com/kaushikcfd/loopy@pytato-array-context-transforms#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/inducer/meshmode.git#egg=meshmode +--editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git@boundary_lazy_comm_v2#egg=grudge --editable git+https://github.com/inducer/pytato.git@distributed-v3#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From 21eb2faf0e11c5b9ffde21066cf4cbe05a37d7d8 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 7 Dec 2021 14:30:42 -0600 Subject: [PATCH 376/873] wave-mpi --- examples/wave-mpi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index e1b501f97..213aa2301 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -30,7 +30,7 @@ from pytools.obj_array import flat_obj_array from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) + MPISingleGridWorkBalancingPytatoArrayContext) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext # noqa @@ -93,7 +93,7 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non logmgr=logmgr) else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == MPISingleGridWorkBalancingPytatoArrayContext: actx = actx_class(comm, queue) else: actx = actx_class(queue, @@ -257,7 +257,7 @@ def rhs(t, w): args = parser.parse_args() main(use_profiling=use_profiling, use_logmgr=use_logging, - actx_class=MPIPytatoPyOpenCLArrayContext if args.lazy + actx_class=MPISingleGridWorkBalancingPytatoArrayContext if args.lazy else PyOpenCLArrayContext) From dcda79a4cdcec1a586ecf5af47ac80f47e485cba Mon Sep 17 00:00:00 2001 From: MTCam Date: Wed, 8 Dec 2021 07:03:57 -0600 Subject: [PATCH 377/873] Merging from state refactor --- examples/doublemach-mpi.py | 73 ++++++++++++++++++++++--------------- examples/hotplate-mpi.py | 75 ++++++++++++++++++++++---------------- mirgecom/boundary.py | 27 +++----------- 3 files changed, 91 insertions(+), 84 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index e115fbe32..f08d719c1 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -55,7 +55,7 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( AdiabaticNoslipMovingBoundary, - PrescribedInviscidBoundary + PrescribedFluidBoundary ) from mirgecom.initializers import DoubleMachReflection from mirgecom.eos import IdealSingleGas @@ -220,19 +220,30 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # {{{ Initialize simple transport model kappa_t = 1e-5 sigma_v = 1e-5 - transport_model = SimpleTransport(viscosity=sigma_v, - thermal_conductivity=kappa_t) # }}} - eos = IdealSingleGas(transport_model=transport_model) + initializer = DoubleMachReflection() + from mirgecom.gas_model import GasModel, make_fluid_state + transport_model = SimpleTransport(viscosity=sigma_v, + thermal_conductivity=kappa_t) + eos = IdealSingleGas() + gas_model = GasModel(eos=eos, transport=transport_model) + + def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) + boundaries = { DTAG_BOUNDARY("ic1"): - PrescribedInviscidBoundary(fluid_solution_func=initializer), + PrescribedFluidBoundary(boundary_state_func=_boundary_state), DTAG_BOUNDARY("ic2"): - PrescribedInviscidBoundary(fluid_solution_func=initializer), + PrescribedFluidBoundary(boundary_state_func=_boundary_state), DTAG_BOUNDARY("ic3"): - PrescribedInviscidBoundary(fluid_solution_func=initializer), + PrescribedFluidBoundary(boundary_state_func=_boundary_state), DTAG_BOUNDARY("wall"): AdiabaticNoslipMovingBoundary(), DTAG_BOUNDARY("out"): AdiabaticNoslipMovingBoundary(), } @@ -240,13 +251,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = initializer(nodes) + current_cv = initializer(nodes) + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) visualizer = make_visualizer(discr, discr.order if discr.dim == 2 else discr.order) @@ -271,12 +283,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if rank == 0: logger.info(init_message) - def my_write_viz(step, t, state, dv=None, tagged_cells=None): - if dv is None: - dv = eos.dependent_vars(state) - if tagged_cells is None: - tagged_cells = smoothness_indicator(discr, state.mass, s0=s0, - kappa=kappa) + def my_write_viz(step, t, state, dv, tagged_cells): viz_fields = [("cv", state), ("dv", dv), ("tagged_cells", tagged_cells)] @@ -289,7 +296,7 @@ def my_write_restart(step, t, state): if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, "t": t, "step": step, "order": order, @@ -335,8 +342,9 @@ def my_health_check(state, dv): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv try: - dv = None if logmgr: logmgr.tick_before() @@ -347,7 +355,6 @@ def my_pre_step(step, t, dt, state): do_health = check_step(step=step, interval=nhealth) if do_health: - dv = eos.dependent_vars(state) from mirgecom.simutil import allsync health_errors = allsync(my_health_check(state, dv), comm, op=MPI.LOR) @@ -360,8 +367,6 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) tagged_cells = smoothness_indicator(discr, state.mass, s0=s0, kappa=kappa) my_write_viz(step=step, t=t, state=state, dv=dv, @@ -370,12 +375,15 @@ def my_pre_step(step, t, dt, state): except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) + tagged_cells = smoothness_indicator(discr, state.mass, s0=s0, + kappa=kappa) + my_write_viz(step=step, t=t, state=state, + tagged_cells=tagged_cells, dv=dv) my_write_restart(step=step, t=t, state=state) raise dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) return state, dt @@ -389,29 +397,34 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): + fluid_state = make_fluid_state(state, gas_model) return euler_operator( - discr, cv=state, time=t, boundaries=boundaries, eos=eos + discr, state=fluid_state, time=t, boundaries=boundaries, + gas_model=gas_model ) + make_conserved(dim, q=av_operator( discr, q=state.join(), boundaries=boundaries, - boundary_kwargs={"time": t, "eos": eos}, alpha=alpha, + boundary_kwargs={"time": t, "gas_model": gas_model}, alpha=alpha, s0=s0, kappa=kappa) ) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv + tagged_cells = smoothness_indicator(discr, current_cv.mass, s0=s0, kappa=kappa) + my_write_viz(step=current_step, t=current_t, state=current_cv, dv=final_dv, + tagged_cells=tagged_cells) + my_write_restart(step=current_step, t=current_t, state=current_cv) if logmgr: logmgr.close() diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index 54f3e39ad..a86a5bfce 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -50,12 +50,12 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( - PrescribedViscousBoundary, + PrescribedFluidBoundary, IsothermalNoSlipBoundary ) from mirgecom.transport import SimpleTransport from mirgecom.eos import IdealSingleGas - +from mirgecom.gas_model import GasModel, make_fluid_state from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging from mirgecom.logging_quantities import ( @@ -212,12 +212,23 @@ def tramp_2d(x_vec, eos, cv=None, **kwargs): return make_conserved(2, mass=mass, energy=energy, momentum=momentum) initializer = tramp_2d - eos = IdealSingleGas(transport_model=SimpleTransport(viscosity=mu, - thermal_conductivity=kappa)) - exact = initializer(x_vec=nodes, eos=eos) - - boundaries = {DTAG_BOUNDARY("-1"): PrescribedViscousBoundary(q_func=initializer), - DTAG_BOUNDARY("+1"): PrescribedViscousBoundary(q_func=initializer), + gas_model = GasModel(eos=IdealSingleGas(), + transport=SimpleTransport(viscosity=mu, + thermal_conductivity=kappa)) + + exact = initializer(x_vec=nodes, eos=gas_model.eos) + + def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) + + boundaries = {DTAG_BOUNDARY("-1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_state), + DTAG_BOUNDARY("+1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_state), DTAG_BOUNDARY("-2"): IsothermalNoSlipBoundary( wall_temperature=bottom_boundary_temperature), DTAG_BOUNDARY("+2"): IsothermalNoSlipBoundary( @@ -226,19 +237,20 @@ def tramp_2d(x_vec, eos, cv=None, **kwargs): if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] - current_state = restart_data["state"] + current_cv = restart_data["cv"] if logmgr: from mirgecom.logging_quantities import logmgr_set_time logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 current_state = exact + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) vis_timer = None visualizer = make_visualizer(discr, order) - eosname = eos.__class__.__name__ + eosname = gas_model.eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, nelements=local_nelements, global_nelements=global_nelements, @@ -249,8 +261,9 @@ def tramp_2d(x_vec, eos, cv=None, **kwargs): if rank == 0: logger.info(init_message) - def my_write_status(step, t, dt, dv, state, component_errors): + def my_write_status(step, t, dt, state, component_errors): from grudge.op import nodal_min, nodal_max + dv = state.dv p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) @@ -260,7 +273,7 @@ def my_write_status(step, t, dt, dv, state, component_errors): else: from mirgecom.viscous import get_viscous_cfl cfl = actx.to_numpy(nodal_max(discr, "vol", - get_viscous_cfl(discr, eos, dt, state))) + get_viscous_cfl(discr, dt, state))) if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" @@ -268,9 +281,7 @@ def my_write_status(step, t, dt, dv, state, component_errors): "----- errors=" + ", ".join("%.3g" % en for en in component_errors)) - def my_write_viz(step, t, state, dv=None): - if dv is None: - dv = eos.dependent_vars(state) + def my_write_viz(step, t, state, dv): resid = state - exact viz_fields = [("cv", state), ("dv", dv), @@ -286,7 +297,7 @@ def my_write_restart(step, t, state): if rst_fname != rst_filename: rst_data = { "local_mesh": local_mesh, - "state": state, + "cv": state, "t": t, "step": step, "order": order, @@ -333,8 +344,10 @@ def my_health_check(state, dv, component_errors): return health_error def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv + try: - dv = None component_errors = None if logmgr: @@ -347,7 +360,6 @@ def my_pre_step(step, t, dt, state): do_status = check_step(step=step, interval=nstatus) if do_health: - dv = eos.dependent_vars(state) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) from mirgecom.simutil import allsync @@ -364,26 +376,22 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) if do_viz: - if dv is None: - dv = eos.dependent_vars(state) my_write_viz(step=step, t=t, state=state, dv=dv) - dt = get_sim_timestep(discr, state, t, dt, current_cfl, eos, + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) if do_status: # needed because logging fails to make output - if dv is None: - dv = eos.dependent_vars(state) if component_errors is None: from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, state, exact) - my_write_status(step=step, t=t, dt=dt, dv=dv, state=state, + my_write_status(step=step, t=t, dt=dt, state=fluid_state, component_errors=component_errors) except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state) + my_write_viz(step=step, t=t, state=state, dv=dv) my_write_restart(step=step, t=t, state=state) raise @@ -394,34 +402,37 @@ def my_post_step(step, t, dt, state): # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) + set_sim_state(logmgr, dim, state, gas_model.eos) logmgr.tick_after() return state, dt def my_rhs(t, state): - return ns_operator(discr, eos=eos, boundaries=boundaries, cv=state, t=t) + fluid_state = make_fluid_state(state, gas_model) + return ns_operator(discr, boundaries=boundaries, state=fluid_state, + time=t, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state, t=current_t, t_final=t_final) + current_state = make_fluid_state(current_cv, gas_model) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_dv = eos.dependent_vars(current_state) + final_dv = current_state.dv final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, eos, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(discr, current_state, exact) my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state) - my_write_status(step=current_step, t=current_t, dt=final_dt, dv=final_dv, + my_write_status(step=current_step, t=current_t, dt=final_dt, state=current_state, component_errors=component_errors) if logmgr: diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index e238e69f7..93f90f85d 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -164,31 +164,14 @@ def _boundary_quantity(self, discr, btag, quantity, **kwargs): return quantity return discr.project(btag, "all_faces", quantity) - def s_boundary_flux(self, discr, btag, grad_cv, **kwargs): - r"""Get $\nabla\mathbf{Q}$ flux across the boundary faces.""" - actx = grad_cv.mass[0].array_context - boundary_discr = discr.discr_from_dd(btag) - nodes = thaw(actx, boundary_discr.nodes()) - nhat = thaw(actx, discr.normal(btag)) - grad_cv_minus = discr.project("vol", btag, grad_cv) - if self._fluid_soln_grad_func: - grad_cv_plus = \ - self._fluid_soln_grad_func(nodes, nhat=nhat, - grad_cv=grad_cv_minus, **kwargs) - else: - grad_cv_plus = grad_cv_minus - bnd_grad_pair = TracePair(btag, interior=grad_cv_minus, - exterior=grad_cv_plus) - - return self._boundary_quantity( - discr, btag, self._fluid_soln_grad_flux_func(bnd_grad_pair, nhat), - **kwargs - ) - def av_flux(self, discr, btag, diffusion, **kwargs): """Get the diffusive fluxes for the AV operator API.""" diff_cv = make_conserved(discr.dim, q=diffusion) - return self.s_boundary_flux(discr, btag, grad_cv=diff_cv, **kwargs).join() + diff_cv_minus = discr.project("vol", btag, diff_cv) + actx = diff_cv_minus.mass[0].array_context + nhat = thaw(discr.normal(btag), actx) + flux_weak = (0*diff_cv_minus@nhat) + return self._boundary_quantity(discr, btag, flux_weak, **kwargs) def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): return TracePair(btag, From f39926fed61b885ba9959879206c001e22fa62a7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Dec 2021 08:41:22 -0600 Subject: [PATCH 378/873] Fix up hotplate per upstream branches. --- examples/hotplate-mpi.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index a86a5bfce..e1d47d500 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -34,7 +34,7 @@ PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -168,7 +168,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) if logmgr: logmgr_add_device_name(logmgr, queue) @@ -243,7 +243,7 @@ def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_state = exact + current_cv = exact current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) vis_timer = None @@ -418,7 +418,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final) current_state = make_fluid_state(current_cv, gas_model) # Dump the final data From 1e565502e22d590bdf28b4efd44374a2f98532e5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Dec 2021 09:13:00 -0600 Subject: [PATCH 379/873] Fix typo in viscous doc. --- mirgecom/viscous.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 14a1b6a7e..a3054c3e5 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -285,7 +285,7 @@ def viscous_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, **kwargs) + \mathbf{f}_v^-\right)\cdot\hat{\mathbf{n}}, with viscous fluxes ($\mathbf{f}_v$), and the outward pointing - face normal ($\hat\mathbf{n}$). + face normal ($\hat{\mathbf{n}}$). Parameters ---------- From 4d1c06c1ec6039e719c44caa08af08109bbb63dc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Dec 2021 14:42:35 -0600 Subject: [PATCH 380/873] sharpen tseed_pair setting --- mirgecom/gas_model.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 9744f4718..5c287e39f 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -375,9 +375,8 @@ def make_fluid_state_interior_trace_pair(discr, state, gas_model): from grudge.eager import interior_trace_pair from grudge.trace_pair import TracePair cv_tpair = interior_trace_pair(discr, state.cv) - tseed_pair = None - if state.nspecies > 0: - tseed_pair = interior_trace_pair(discr, state.dv.temperature) + tseed_pair = interior_trace_pair(discr, state.dv.temperature) \ + if state.is_mixture else None return TracePair( cv_tpair.dd, interior=make_fluid_state(cv_tpair.int, gas_model, From 38349b87f52353a0b6cc4a9cd44985b541959563 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Dec 2021 14:43:36 -0600 Subject: [PATCH 381/873] Fix a couple of distributed-only bugs. --- mirgecom/navierstokes.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 7674c9959..3efe5094d 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -144,10 +144,11 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, cv_interior_pairs.extend(cv_part_pairs) tseed_interior_pairs = None - tseed_int_pair = interior_trace_pair(discr, dv.temperature) - tseed_part_pairs = cross_rank_trace_pairs(discr, dv.temperature) - tseed_interior_pairs = [tseed_int_pair] - tseed_interior_pairs.extend(tseed_part_pairs) + if state.is_mixture: + tseed_int_pair = interior_trace_pair(discr, dv.temperature) + tseed_part_pairs = cross_rank_trace_pairs(discr, dv.temperature) + tseed_interior_pairs = [tseed_int_pair] + tseed_interior_pairs.extend(tseed_part_pairs) from mirgecom.gas_model import make_fluid_state_trace_pairs interior_state_pairs = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, @@ -187,13 +188,13 @@ def _cv_grad_flux_bnd(btag, boundary_state): interior=make_conserved(dim, q=xrank_tpair.int), exterior=make_conserved(dim, q=xrank_tpair.ext)) for xrank_tpair in cross_rank_trace_pairs(discr, grad_cv.join())] + grad_cv_interior_pairs = [s_int_pair] - grad_cv_interior_pairs.append(s_part_pairs) + grad_cv_interior_pairs.extend(s_part_pairs) # Temperature gradient for conductive heat flux: [Ihme_2014]_ eqn (3b) - # Capture the temperature for the interior faces for grad(T) calc - t_interior_pairs = [TracePair("int_faces", + t_interior_pairs = [TracePair(state_pair.dd, interior=state_pair.int.temperature, exterior=state_pair.ext.temperature) for state_pair in interior_state_pairs] @@ -204,12 +205,12 @@ def _cv_grad_flux_bnd(btag, boundary_state): state_minus=boundary_states[btag], time=time) for btag in boundaries)) - # Fluxes in-hand, compute the gradient of temperature + # Fluxes in-hand, compute the gradient of temperature and mpi exchange it grad_t = grad_operator(discr, state.temperature, t_flux_bnd) delt_int_pair = interior_trace_pair(discr, grad_t) delt_part_pairs = cross_rank_trace_pairs(discr, grad_t) grad_t_interior_pairs = [delt_int_pair] - grad_t_interior_pairs.append(delt_part_pairs) + grad_t_interior_pairs.extend(delt_part_pairs) # inviscid flux divergence-specific flux function for interior faces def finv_divergence_flux_interior(state_pair): From 89c8f0aa6e9960aea52b6408a405a571329584a5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Dec 2021 14:52:28 -0600 Subject: [PATCH 382/873] Switch back to lazy-compatible array context for autoignition --- examples/autoignition-mpi-lazy.py | 1 + 1 file changed, 1 insertion(+) create mode 120000 examples/autoignition-mpi-lazy.py diff --git a/examples/autoignition-mpi-lazy.py b/examples/autoignition-mpi-lazy.py new file mode 120000 index 000000000..aa50542f7 --- /dev/null +++ b/examples/autoignition-mpi-lazy.py @@ -0,0 +1 @@ +autoignition-mpi.py \ No newline at end of file From 3943916da4625eadea8e18f477a87c049f7f8f17 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Dec 2021 14:52:45 -0600 Subject: [PATCH 383/873] Switch back to lazy-compatible array context for autoignition --- examples/autoignition-mpi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 1f836a7ed..cb6047fae 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -31,7 +31,8 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + # PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext From 963f1dbfce601172c84b53b5ddef8cb21702fa12 Mon Sep 17 00:00:00 2001 From: MTCam Date: Wed, 8 Dec 2021 18:26:31 -0600 Subject: [PATCH 384/873] Use temperature for prescribed state instead of oppposite temperature --- mirgecom/boundary.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 93f90f85d..bf607fa15 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -140,7 +140,7 @@ def __init__(self, self._bnd_state_func = self._identical_state if not self._bnd_temperature_func: - self._bnd_temperature_func = self._opposite_temperature + self._bnd_temperature_func = self._temperature_for_prescribed_state if not self._grad_num_flux_func: self._grad_num_flux_func = gradient_flux_central @@ -181,8 +181,13 @@ def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): state_minus=state_minus, **kwargs)) - def _opposite_temperature(self, state_minus, **kwargs): - return -state_minus.temperature + def _temperature_for_prescribed_state(self, discr, btag, + gas_model, state_minus, **kwargs): + boundary_state = self._bnd_state_func(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=state_minus, + **kwargs) + return boundary_state.temperature def _identical_state(self, state_minus, **kwargs): return state_minus From b498520fd3de60e25da23fbea24cd3f0b7a052f2 Mon Sep 17 00:00:00 2001 From: MTCam Date: Wed, 8 Dec 2021 18:31:08 -0600 Subject: [PATCH 385/873] Remove mass from internal energy function --- mirgecom/eos.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index e72caecc1..a969d78c6 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -448,7 +448,7 @@ def total_energy(self, cv, pressure): return (pressure / (self._gamma - 1.0) + self.kinetic_energy(cv)) - def get_internal_energy(self, temperature, mass, species_mass_fractions=None): + def get_internal_energy(self, temperature, **kwargs): r"""Get the gas thermal energy from temperature, and fluid density. The gas internal energy $e$ is calculated from: @@ -466,7 +466,7 @@ def get_internal_energy(self, temperature, mass, species_mass_fractions=None): species_mass_fractions: Unused """ - return self._gas_const * mass * temperature / (self._gamma - 1) + return self._gas_const * temperature / (self._gamma - 1) class PyrometheusMixture(MixtureEOS): From c39cc0a22cdf9e4fe36f26672e1c8ab16900c201 Mon Sep 17 00:00:00 2001 From: MTCam Date: Wed, 8 Dec 2021 18:32:21 -0600 Subject: [PATCH 386/873] fix up init per eos get_internal_energy change --- mirgecom/initializers.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 8600ace1d..c53e8cb72 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -1095,12 +1095,8 @@ def __call__(self, x_vec, eos, *, time=0.0): specmass = mass * y mom = mass * velocity - if self._nspecies: - internal_energy = \ - eos.get_internal_energy(temperature, - species_mass_fractions=y) - else: - internal_energy = pressure/mass/(eos.gamma() - 1) + internal_energy = eos.get_internal_energy(temperature, + species_mass_fractions=y) kinetic_energy = 0.5 * np.dot(velocity, velocity) energy = mass * (internal_energy + kinetic_energy) From 826c61810014d843b3f0407978942b1c3ce1e280 Mon Sep 17 00:00:00 2001 From: MTCam Date: Wed, 8 Dec 2021 18:33:43 -0600 Subject: [PATCH 387/873] Sharpen code comments, use _elbnd_flux wrapperfor grad(t) --- mirgecom/navierstokes.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 3efe5094d..36a787b12 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -194,16 +194,20 @@ def _cv_grad_flux_bnd(btag, boundary_state): # Temperature gradient for conductive heat flux: [Ihme_2014]_ eqn (3b) # Capture the temperature for the interior faces for grad(T) calc + # Note this is *all interior faces*, including partition boundaries + # due to the use of *interior_state_pairs*. t_interior_pairs = [TracePair(state_pair.dd, interior=state_pair.int.temperature, exterior=state_pair.ext.temperature) for state_pair in interior_state_pairs] - t_flux_bnd = (sum(_grad_flux_interior(tpair) for tpair in t_interior_pairs) - + sum(boundaries[btag].temperature_gradient_flux( - discr, btag=btag, gas_model=gas_model, - state_minus=boundary_states[btag], time=time) - for btag in boundaries)) + def _t_grad_flux_bnd(btag, boundary_state): + return boundaries[btag].temperature_gradient_flux( + discr, btag=btag, gas_model=gas_model, + state_minus=boundary_state, time=time) + + t_flux_bnd = _elbnd_flux(discr, _grad_flux_interior, _t_grad_flux_bnd, + t_interior_pairs, boundary_states) # Fluxes in-hand, compute the gradient of temperature and mpi exchange it grad_t = grad_operator(discr, state.temperature, t_flux_bnd) From 274759e96921034da7948778cc5a078a5f421396 Mon Sep 17 00:00:00 2001 From: MTCam Date: Thu, 9 Dec 2021 07:15:52 -0600 Subject: [PATCH 388/873] Simplify coeff handling slightly. --- mirgecom/artificial_viscosity.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 4f58a8c3c..fce8e5216 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -197,7 +197,7 @@ def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): # Get smoothness indicator based on first component indicator_field = q[0] if isinstance(q, np.ndarray) else q - indicator = smoothness_indicator(discr, indicator_field, **kwargs) + alpha_ind = -alpha*smoothness_indicator(discr, indicator_field, **kwargs) # R=Grad(Q) volume part if isinstance(q, np.ndarray): @@ -217,9 +217,8 @@ def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): # Compute R r = discr.inverse_mass( - -alpha * indicator * (grad_q_vol - discr.face_mass(q_bnd_flux)) + alpha_ind*(grad_q_vol - discr.face_mass(q_bnd_flux)) ) - # RHS_av = div(R) volume part div_r_vol = discr.weak_div(r) # Total flux of grad(Q) across element boundaries From 8a7e9087441224733b93fee3194767474881d5ca Mon Sep 17 00:00:00 2001 From: MTCam Date: Thu, 9 Dec 2021 07:17:14 -0600 Subject: [PATCH 389/873] Add AV boundary treatments, sharpen docs a bit --- mirgecom/boundary.py | 110 +++++++++++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 36 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index bf607fa15..847b46254 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -1,21 +1,17 @@ """:mod:`mirgecom.boundary` provides methods and constructs for boundary treatments. -Boundary Treatment Interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Boundary Treatment Interfaces +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autoclass FluidBoundary +.. autoclass:: PrescribedFluidBoundary -Inviscid Boundary Conditions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Boundary Conditions +^^^^^^^^^^^^^^^^^^^ -.. autoclass:: PrescribedFluidBoundary .. autoclass:: DummyBoundary .. autoclass:: AdiabaticSlipBoundary .. autoclass:: AdiabaticNoslipMovingBoundary - -Viscous Boundary Conditions -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - .. autoclass:: IsothermalNoSlipBoundary """ @@ -50,9 +46,14 @@ from grudge.trace_pair import TracePair from mirgecom.inviscid import inviscid_flux_rusanov from mirgecom.viscous import viscous_flux_central -from mirgecom.flux import gradient_flux_central -from mirgecom.gas_model import make_fluid_state - +from mirgecom.flux import ( + gradient_flux_central, + divergence_flux_central +) +from mirgecom.gas_model import ( + make_fluid_state, + project_fluid_state, +) from abc import ABCMeta, abstractmethod @@ -62,7 +63,7 @@ class FluidBoundary(metaclass=ABCMeta): .. automethod:: inviscid_divergence_flux .. automethod:: viscous_divergence_flux .. automethod:: cv_gradient_flux - .. automethod:: t_gradient_flux + .. automethod:: temperature_gradient_flux """ @abstractmethod @@ -92,6 +93,7 @@ class PrescribedFluidBoundary(FluidBoundary): .. automethod:: inviscid_divergence_flux .. automethod:: av_flux .. automethod:: cv_gradient_flux + .. automethod:: soln_gradient_flux """ def __init__(self, @@ -114,12 +116,13 @@ def __init__(self, # Returns the boundary value for grad(cv) boundary_gradient_cv_func=None, # Returns the boundary value for grad(temperature) - boundary_gradient_temperature_func=None + boundary_gradient_temperature_func=None, + # For artificial viscosity - grad fluid soln on boundary + boundary_grad_av_func=None, ): """Initialize the PrescribedFluidBoundary and methods.""" self._bnd_state_func = boundary_state_func self._inviscid_flux_func = inviscid_flux_func - # self._inviscid_num_flux_func = inviscid_numerical_flux_func self._temperature_grad_flux_func = temperature_gradient_flux_func self._bnd_temperature_func = boundary_temperature_func self._grad_num_flux_func = gradient_numerical_flux_func @@ -127,6 +130,11 @@ def __init__(self, self._viscous_flux_func = viscous_flux_func self._bnd_grad_cv_func = boundary_gradient_cv_func self._bnd_grad_temperature_func = boundary_gradient_temperature_func + self._av_div_num_flux_func = divergence_flux_central + self._bnd_grad_av_func = boundary_grad_av_func + + if not self._bnd_grad_av_func: + self._bnd_grad_av_func = self._identical_grad_av if not self._inviscid_flux_func and not self._bnd_state_func: from warnings import warn @@ -164,15 +172,6 @@ def _boundary_quantity(self, discr, btag, quantity, **kwargs): return quantity return discr.project(btag, "all_faces", quantity) - def av_flux(self, discr, btag, diffusion, **kwargs): - """Get the diffusive fluxes for the AV operator API.""" - diff_cv = make_conserved(discr.dim, q=diffusion) - diff_cv_minus = discr.project("vol", btag, diff_cv) - actx = diff_cv_minus.mass[0].array_context - nhat = thaw(discr.normal(btag), actx) - flux_weak = (0*diff_cv_minus@nhat) - return self._boundary_quantity(discr, btag, flux_weak, **kwargs) - def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): return TracePair(btag, interior=state_minus, @@ -303,6 +302,40 @@ def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, numerical_flux_func=numerical_flux_func, **kwargs) + # {{{ Boundary interface for artificial viscosity + + def _identical_grad_av(self, grad_av_minus, **kwargs): + return grad_av_minus + + def soln_gradient_flux(self, discr, btag, soln, gas_model, **kwargs): + """Get the flux for solution gradient with AV API.""" + fluid_state = make_fluid_state(make_conserved(discr.dim, q=soln), + gas_model=gas_model) + fluid_state_minus = project_fluid_state(discr=discr, btag=btag, + gas_model=gas_model, + state=fluid_state) + grad_flux = self.cv_gradient_flux(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=fluid_state_minus, + **kwargs) + return grad_flux.join() + + def av_flux(self, discr, btag, diffusion, **kwargs): + """Get the diffusive fluxes for the AV operator API.""" + grad_av = make_conserved(discr.dim, q=diffusion) + grad_av_minus = discr.project("vol", btag, grad_av) + actx = grad_av_minus.mass[0].array_context + nhat = thaw(discr.normal(btag), actx) + grad_av_plus = self._bnd_grad_av_func( + discr=discr, btag=btag, grad_av_minus=grad_av_minus, **kwargs) + bnd_grad_pair = TracePair(btag, interior=grad_av_minus, + exterior=grad_av_plus) + num_flux = self._av_div_num_flux_func(bnd_grad_pair, nhat) + flux = self._boundary_quantity(discr, btag, num_flux, **kwargs) + return flux.join() + + # }}} + class DummyBoundary(PrescribedFluidBoundary): """Boundary type that assigns boundary-adjacent soln as the boundary solution.""" @@ -328,13 +361,14 @@ class AdiabaticSlipBoundary(PrescribedFluidBoundary): boundary conditions described in detail in [Poinsot_1992]_. .. automethod:: adiabatic_slip_state + .. automethod:: adiabatic_slip_grad_av """ def __init__(self): """Initialize AdiabaticSlipBoundary.""" PrescribedFluidBoundary.__init__( - self, boundary_state_func=self.adiabatic_slip_state - # fluid_solution_gradient_func=self.exterior_grad_q + self, boundary_state_func=self.adiabatic_slip_state, + boundary_grad_av_func=self.adiabatic_slip_grad_av ) def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): @@ -370,34 +404,38 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): return make_fluid_state(cv=ext_cv, gas_model=gas_model, temperature_seed=t_seed) - def exterior_grad_q(self, nodes, nhat, grad_cv, **kwargs): + def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): """Get the exterior grad(Q) on the boundary.""" # Grab some boundary-relevant data - dim, = grad_cv.mass.shape + dim, = grad_av_minus.mass.shape + actx = grad_av_minus.mass[0].array_context + nhat = thaw(discr.norm(btag), actx) # Subtract 2*wall-normal component of q # to enforce q=0 on the wall - s_mom_normcomp = np.outer(nhat, np.dot(grad_cv.momentum, nhat)) - s_mom_flux = grad_cv.momentum - 2*s_mom_normcomp + s_mom_normcomp = np.outer(nhat, + np.dot(grad_av_minus.momentum, nhat)) + s_mom_flux = grad_av_minus.momentum - 2*s_mom_normcomp # flip components to set a neumann condition - return make_conserved(dim, mass=-grad_cv.mass, energy=-grad_cv.energy, + return make_conserved(dim, mass=-grad_av_minus.mass, + energy=-grad_av_minus.energy, momentum=-s_mom_flux, - species_mass=-grad_cv.species_mass) + species_mass=-grad_av_minus.species_mass) class AdiabaticNoslipMovingBoundary(PrescribedFluidBoundary): r"""Boundary condition implementing a noslip moving boundary. .. automethod:: adiabatic_noslip_state - .. automethod:: adiabatic_noslip_grad_cv + .. automethod:: adiabatic_noslip_grad_av """ def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" PrescribedFluidBoundary.__init__( self, boundary_state_func=self.adiabatic_noslip_state, - # boundary_gradient_cv_func=self.adiabatic_noslip_grad_cv, + boundary_grad_av_func=self.adiabatic_noslip_grad_av, ) # Check wall_velocity (assumes dim is correct) if wall_velocity is None: @@ -419,9 +457,9 @@ def adiabatic_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): tseed = state_minus.temperature if state_minus.is_mixture else None return make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) - def adiabatic_noslip_grad_cv(self, grad_cv_minus, **kwargs): + def adiabatic_noslip_grad_av(self, grad_av_minus, **kwargs): """Get the exterior solution on the boundary.""" - return(-grad_cv_minus) + return(-grad_av_minus) class IsothermalNoSlipBoundary(PrescribedFluidBoundary): From 84588c2da6d328cbbafeaf9697ae67c47a6f964f Mon Sep 17 00:00:00 2001 From: MTCam Date: Thu, 9 Dec 2021 07:18:25 -0600 Subject: [PATCH 390/873] Sharpen language a little in av test boundary --- test/test_av.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_av.py b/test/test_av.py index 858afd7b4..962c32fdf 100644 --- a/test/test_av.py +++ b/test/test_av.py @@ -189,11 +189,11 @@ def soln_gradient_flux(self, disc, btag, soln, **kwargs): def av_flux(self, disc, btag, diffusion, **kwargs): nhat = thaw(actx, disc.normal(btag)) - grad_soln_minus = discr.project("vol", btag, diffusion) - grad_soln_plus = grad_soln_minus + diffusion_minus = discr.project("vol", btag, diffusion) + diffusion_plus = diffusion_minus from grudge.trace_pair import TracePair - bnd_grad_pair = TracePair(btag, interior=grad_soln_minus, - exterior=grad_soln_plus) + bnd_grad_pair = TracePair(btag, interior=diffusion_minus, + exterior=diffusion_plus) from mirgecom.flux import divergence_flux_central flux_weak = divergence_flux_central(bnd_grad_pair, normal=nhat) return disc.project(btag, "all_faces", flux_weak) From 36d80a20b88095387b4616f89c2c66be6c9c4f36 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 9 Dec 2021 08:17:55 -0600 Subject: [PATCH 391/873] Use CV for legacy comparisons, dont divide by zero dt --- examples/hotplate-mpi.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index e1d47d500..0702db3a9 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -273,7 +273,9 @@ def my_write_status(step, t, dt, state, component_errors): else: from mirgecom.viscous import get_viscous_cfl cfl = actx.to_numpy(nodal_max(discr, "vol", - get_viscous_cfl(discr, dt, state))) + get_viscous_cfl(discr, dt=current_dt, + state=state))) + if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" @@ -428,10 +430,10 @@ def my_rhs(t, state): final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, current_state, exact) + component_errors = compare_fluid_solutions(discr, current_cv, exact) - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_viz(step=current_step, t=current_t, state=current_cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_cv) my_write_status(step=current_step, t=current_t, dt=final_dt, state=current_state, component_errors=component_errors) From 35a486fc905a3db49425ac6ec0c36b7183ef12d2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 9 Dec 2021 08:30:33 -0600 Subject: [PATCH 392/873] Remove unworking lazy example --- examples/autoignition-mpi-lazy.py | 1 - 1 file changed, 1 deletion(-) delete mode 120000 examples/autoignition-mpi-lazy.py diff --git a/examples/autoignition-mpi-lazy.py b/examples/autoignition-mpi-lazy.py deleted file mode 120000 index aa50542f7..000000000 --- a/examples/autoignition-mpi-lazy.py +++ /dev/null @@ -1 +0,0 @@ -autoignition-mpi.py \ No newline at end of file From 50b5837d99cd11af00f326011fe3a9a41fc2e203 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 9 Dec 2021 09:21:12 -0600 Subject: [PATCH 393/873] Udpate README with missing examples --- examples/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index d14d47289..8678a74e2 100644 --- a/examples/README.md +++ b/examples/README.md @@ -6,7 +6,7 @@ are able to run on mulitple GPUs or CPUs in a suitable MPI environemnt. All of the example exercise some unique feature of *MIRGE-Com*. The examples and the unique features they exercise are as follows: -- `autoignition-mpi.py`: Chemistry with Pyrometheus +- `autoignition-mpi.py`: Chemistry verification case with Pyrometheus - `heat-source-mpi.py`: Diffusion operator - `lump-mpi.py`: Lump advection, advection verification case - `mixture-mpi.py`: Mixture EOS with Pyrometheus @@ -14,3 +14,6 @@ unique features they exercise are as follows: - `pulse-mpi.py`: Acoustic pulse in a box, wall boundary test case - `sod-mpi.py`: Sod's shock case: Fluid test case with strong shock - `vortex-mpi.py`: Isentropic vortex advection: outflow boundaries, verification +- `hotplate-mpi.py`: Isothermal BC verification (prescribed exact soln) +- `doublemach-mpi.py`: AV test case +- `nsmix-mpi.py`: Viscous mixture w/Pyrometheus-based EOS From c4357e88162594fcd8a0de778cd70bde631e4ecf Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 9 Dec 2021 11:29:50 -0600 Subject: [PATCH 394/873] Test custom production env --- .ci-support/production-testing-env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 043ac724b..ed63f9a71 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-state-handling" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited @@ -16,7 +16,7 @@ export PRODUCTION_BRANCH="production" # The base production branch to be insta # "fork/repo@branch". The defaults are provided below as an example. Provide custom # production drivers in this variable: # -# export PRODUCTION_DRIVERS="" +export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy-state-handling" # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" From 910574372318375a82491b435e0a0627e5732968 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 9 Dec 2021 18:45:32 -0600 Subject: [PATCH 395/873] Become the default production environment. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 043ac724b..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From fab0a78791fe86834951df6e8fdcaed3c784ed1f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 9 Dec 2021 18:52:48 -0600 Subject: [PATCH 396/873] Merge from upstream. --- .ci-support/merge-install-production-branch.sh | 4 ++-- .ci-support/production-testing-env.sh | 2 +- examples/autoignition-mpi.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.ci-support/merge-install-production-branch.sh b/.ci-support/merge-install-production-branch.sh index 3733c1a7d..05d79efea 100755 --- a/.ci-support/merge-install-production-branch.sh +++ b/.ci-support/merge-install-production-branch.sh @@ -10,11 +10,11 @@ set -x # patched by the incoming development. The following vars control the # production environment: # -# PRODUCTION_BRANCH = The production branch (default=y1-production) +# PRODUCTION_BRANCH = The production branch (default=production) # PRODUCTION_FORK = The production fork (default=illinois-ceesd) # MIRGE_HOME=${1:-"."} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"y1-production"} +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} echo "MIRGE_HOME=${MIRGE_HOME}" diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index ed63f9a71..e07e9b4af 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -16,7 +16,7 @@ export PRODUCTION_BRANCH="production-state-handling" # The base production bra # "fork/repo@branch". The defaults are provided below as an example. Provide custom # production drivers in this variable: # -export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy-state-handling" +export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@parallel-lazy-state-handling:illinois-ceesd/drivers_flame1d@state-handling:illinois-ceesd/drivers_y2-isolator@state-handling" # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index cb6047fae..39caad9fb 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -63,7 +63,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -120,7 +120,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # This example runs only 3 steps by default (to keep CI ~short) # With the mixture defined below, equilibrium is achieved at ~40ms - # To run to equlibrium, set t_final >= 40ms. + # To run to equilibrium, set t_final >= 40ms. # Time stepper selection if use_leap: @@ -181,7 +181,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") From 866b3ca2e23e4b021073dead169720d01c7ae322 Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 10 Dec 2021 00:24:50 -0600 Subject: [PATCH 397/873] Use parallel-lazy array context --- examples/autoignition-mpi.py | 3 +-- examples/doublemach-mpi.py | 2 +- examples/heat-source-mpi.py | 2 +- examples/hotplate-mpi.py | 2 +- examples/lump-mpi.py | 2 +- examples/mixture-mpi.py | 2 +- examples/nsmix-mpi.py | 2 +- examples/poiseuille-mpi.py | 2 +- examples/pulse-mpi.py | 14 +++++++------- examples/scalar-lump-mpi.py | 2 +- examples/sod-mpi.py | 4 ++-- examples/vortex-mpi.py | 2 +- examples/wave-mpi.py | 6 ++++-- examples/wave.py | 6 ++++-- 14 files changed, 27 insertions(+), 24 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index cb6047fae..92d11bd27 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -32,7 +32,6 @@ from meshmode.array_context import ( PyOpenCLArrayContext, SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext - # PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext @@ -334,7 +333,7 @@ def get_fluid_state(cv, temperature_seed): # and instead of writing the *current* running temperature to the restart file, # we could write the *temperature_seed*. That could fix up the non-deterministic # restart issue. - current_fluid_state = create_fluid_state(current_cv, + current_fluid_state = make_fluid_state(cv=current_cv, gas_model=gas_model, temperature_seed=temperature_seed) current_dv = current_fluid_state.dv temperature_seed = current_dv.temperature diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index f08d719c1..ec8ad9919 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 30e909112..ad6d32ea4 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -29,7 +29,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index e1d47d500..d4ece91d7 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 10f4320d8..33c79ef95 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index ceebb8ff8..87477f589 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 7d3073392..fd012b8da 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.dof_array import thaw diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index a94697978..692235848 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 014ae1485..a73b03066 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -33,7 +33,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -297,14 +297,14 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - inviscid_state = make_fluid_state(cv=state, gas_model=gas_model) - return euler_operator(discr, state=inviscid_state, time=t, + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + return euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, @@ -313,11 +313,11 @@ def my_rhs(t, state): # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_state = make_fluid_state(current_state, gas_model) + final_state = make_fluid_state(current_cv, gas_model) final_dv = final_state.dv - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_viz(step=current_step, t=current_t, state=current_cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_cv) if logmgr: logmgr.close() diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 07e0dda7b..8ee1b0bd0 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index e3587e4db..9f8113a50 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -335,7 +335,7 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - fluid_state = make_fluid_state(state, gas_model) + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) return euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index d849545f2..244a93cce 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index f7ba0f662..991494171 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -29,8 +29,10 @@ from pytools.obj_array import flat_obj_array -from meshmode.array_context import (PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext) +from meshmode.array_context import ( + PyOpenCLArrayContext, + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext # noqa diff --git a/examples/wave.py b/examples/wave.py index 27d922a40..dcd40dc69 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -36,8 +36,10 @@ from mirgecom.wave import wave_operator from mirgecom.integrators import rk4_step -from meshmode.array_context import (PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext) +from meshmode.array_context import ( + PyOpenCLArrayContext, + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext From cad32a01419f94c7f20a4ca4b57c9dd529d6ec5f Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 10 Dec 2021 00:26:43 -0600 Subject: [PATCH 398/873] Use inviscid_facial_flux interface --- mirgecom/boundary.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 847b46254..6541e7d4b 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -236,10 +236,14 @@ def _inviscid_flux_for_prescribed_state( gas_model=gas_model, state_minus=state_minus, **kwargs) + + from mirgecom.inviscid import inviscid_facial_flux return self._boundary_quantity( discr, btag, - numerical_flux_func(discr, gas_model=gas_model, - state_pair=boundary_state_pair), + inviscid_facial_flux(discr, gas_model=gas_model, + state_pair=boundary_state_pair, + numerical_flux_func=numerical_flux_func, + local=True), **kwargs) def _viscous_flux_for_prescribed_state(self, discr, btag, gas_model, state_minus, From c64c1b0fb09015c5c972cf4c202e9d9ac985f91b Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 10 Dec 2021 00:34:07 -0600 Subject: [PATCH 399/873] Exile intermediate flux driver --- mirgecom/flux.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index c8d656a90..88f1a0bdc 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -45,19 +45,6 @@ def num_flux_central(f_minus, f_plus, **kwargs): return (f_plus + f_minus)/2 -def lfr_flux_driver(discr, state_pair, physical_flux_func): - """State-to-flux driver for Rusanov numerical fluxes.""" - from arraycontext import thaw - actx = state_pair.int.array_context - normal = thaw(discr.normal(state_pair.dd), actx) - lam = actx.np.maximum(state_pair.int.wavespeed, state_pair.ext.wavespeed) - - return num_flux_lfr(f_minus=physical_flux_func(state_pair.int)@normal, - f_plus=physical_flux_func(state_pair.ext)@normal, - q_minus=state_pair.int.cv, - q_plus=state_pair.ext.cv, lam=lam) - - def gradient_flux_central(u_tpair, normal): r"""Compute a central flux for the gradient operator. From 5747958c09bc55228d43b0717452f0837a4d75fc Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 10 Dec 2021 00:36:57 -0600 Subject: [PATCH 400/873] Rearrange num flux interface (pass normals) --- mirgecom/inviscid.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 3a2731c98..e5e7dd104 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -39,7 +39,6 @@ """ import numpy as np -from mirgecom.flux import lfr_flux_driver from mirgecom.fluid import make_conserved @@ -83,7 +82,7 @@ def inviscid_flux(state): momentum=mom_flux, species_mass=species_mass_flux) -def inviscid_flux_rusanov(discr, gas_model, state_pair, **kwargs): +def inviscid_flux_rusanov(normal, gas_model, state_pair, **kwargs): r"""High-level interface for inviscid facial flux using Rusanov numerical flux. The Rusanov inviscid numerical flux is calculated as: @@ -98,7 +97,13 @@ def inviscid_flux_rusanov(discr, gas_model, state_pair, **kwargs): the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the *local* maximum fluid wavespeed. """ - return lfr_flux_driver(discr, state_pair, inviscid_flux) + actx = state_pair.int.array_context + lam = actx.np.maximum(state_pair.int.wavespeed, state_pair.ext.wavespeed) + from mirgecom.flux import num_flux_lfr + return num_flux_lfr(f_minus=inviscid_flux(state_pair.int)@normal, + f_plus=inviscid_flux(state_pair.ext)@normal, + q_minus=state_pair.int.cv, + q_plus=state_pair.ext.cv, lam=lam) def inviscid_facial_flux(discr, gas_model, state_pair, @@ -135,7 +140,9 @@ def inviscid_facial_flux(discr, gas_model, state_pair, the face normals as required by the divergence operator for which they are being computed. """ - num_flux = numerical_flux_func(discr, gas_model, state_pair) + from arraycontext import thaw + normal = thaw(discr.normal(state_pair.dd), state_pair.int.array_context) + num_flux = numerical_flux_func(normal, gas_model, state_pair) return num_flux if local else discr.project(state_pair.dd, "all_faces", num_flux) From d4b4ecacb963764bacf5de1078973ad1bd03290d Mon Sep 17 00:00:00 2001 From: MTCam Date: Fri, 10 Dec 2021 00:38:13 -0600 Subject: [PATCH 401/873] Use parallel-lazy array context --- test/lazy_pyro_test.py | 2 +- test/test_eos.py | 2 +- test/test_lazy.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/lazy_pyro_test.py b/test/lazy_pyro_test.py index 8ce80a575..b94811539 100644 --- a/test/lazy_pyro_test.py +++ b/test/lazy_pyro_test.py @@ -31,7 +31,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context diff --git a/test/test_eos.py b/test/test_eos.py index 0a046a756..87a141595 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -37,7 +37,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context diff --git a/test/test_lazy.py b/test/test_lazy.py index 005174e90..f212f7f26 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -31,7 +31,7 @@ import pyopencl.clmath as clmath # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from arraycontext.container.traversal import freeze, thaw From bb960f6ac4502a6dd900742947944a13a641a284 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 10 Dec 2021 10:31:23 -0600 Subject: [PATCH 402/873] Remove .join() calls in Euler operator --- mirgecom/euler.py | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 26886c259..5fabccefa 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -57,11 +57,11 @@ inviscid_flux, inviscid_facial_flux ) -from grudge.eager import ( - interior_trace_pair, + +from grudge.trace_pair import ( + local_interior_trace_pair, cross_rank_trace_pairs ) -from grudge.trace_pair import TracePair from mirgecom.fluid import make_conserved from mirgecom.operators import div_operator @@ -100,20 +100,37 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ + # Compute volume contributions inviscid_flux_vol = inviscid_flux(discr, eos, cv) + + # Compute interface contributions inviscid_flux_bnd = ( - inviscid_facial_flux(discr, eos=eos, cv_tpair=interior_trace_pair(discr, cv)) - + sum(inviscid_facial_flux( - discr, eos=eos, cv_tpair=TracePair( - part_tpair.dd, interior=make_conserved(discr.dim, q=part_tpair.int), - exterior=make_conserved(discr.dim, q=part_tpair.ext))) - for part_tpair in cross_rank_trace_pairs(discr, cv.join())) - + sum(boundaries[btag].inviscid_boundary_flux(discr, btag=btag, cv=cv, - eos=eos, time=time) - for btag in boundaries) + # Rank-local contributions + inviscid_facial_flux( + discr, + eos=eos, + cv_tpair=local_interior_trace_pair(discr, cv) + ) + # Cross-rank contributions + + sum( + inviscid_facial_flux( + discr, + eos=eos, + cv_tpair=part_tpair + ) for part_tpair in cross_rank_trace_pairs(discr, cv) + ) + # Boundary condition contributions + + sum( + boundaries[btag].inviscid_boundary_flux( + discr, + btag=btag, + cv=cv, + eos=eos, + time=time + ) for btag in boundaries + ) ) - q = -div_operator(discr, inviscid_flux_vol.join(), inviscid_flux_bnd.join()) - return make_conserved(discr.dim, q=q) + return -div_operator(discr, inviscid_flux_vol, inviscid_flux_bnd) def inviscid_operator(discr, eos, boundaries, q, t=0.0): From 6a36ce49407b51e63b15069a1fd02166899e8b74 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Fri, 10 Dec 2021 11:17:01 -0600 Subject: [PATCH 403/873] ported hll flux to new state-handling --- mirgecom/flux.py | 136 ++++++++----------------------------------- mirgecom/inviscid.py | 68 ++++++++++++++++++++-- 2 files changed, 88 insertions(+), 116 deletions(-) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index c8d656a90..b51c27384 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -45,11 +45,9 @@ def num_flux_central(f_minus, f_plus, **kwargs): return (f_plus + f_minus)/2 -def lfr_flux_driver(discr, state_pair, physical_flux_func): +def lfr_flux_driver(normal, state_pair, physical_flux_func): """State-to-flux driver for Rusanov numerical fluxes.""" - from arraycontext import thaw actx = state_pair.int.array_context - normal = thaw(discr.normal(state_pair.dd), actx) lam = actx.np.maximum(state_pair.int.wavespeed, state_pair.ext.wavespeed) return num_flux_lfr(f_minus=physical_flux_func(state_pair.int)@normal, @@ -57,6 +55,29 @@ def lfr_flux_driver(discr, state_pair, physical_flux_func): q_minus=state_pair.int.cv, q_plus=state_pair.ext.cv, lam=lam) +def hll_flux_driver(normal, state_pair, physical_flux_func, wavespeed_int, wavespeed_ext): + """State-to-flux driver for hll numerical fluxes.""" + actx = state_pair.int.array_context + zeros = 0.*state_pair.int.mass_density + + f_minus = physical_flux_func(state_pair.int)@normal + f_plus = physical_flux_func(state_pair.ext)@normal + q_minus=state_pair.int.cv + q_plus=state_pair.ext.cv + s_minus=wavespeed_int + s_plus=wavespeed_ext + f_star = (s_plus*f_minus - s_minus*f_plus + s_plus*s_minus*(q_plus - q_minus))/(s_plus - s_minus) + + # choose the correct f contribution based on the wave speeds + f_check_minus = actx.np.greater_equal(s_minus, zeros)*(0*f_minus + 1.0) + f_check_plus = actx.np.less_equal(s_plus, zeros)*(0*f_minus + 1.0) + + f = f_star + f = actx.np.where(f_check_minus, f_minus, f) + f = actx.np.where(f_check_plus, f_plus, f) + + return f + def gradient_flux_central(u_tpair, normal): r"""Compute a central flux for the gradient operator. @@ -125,112 +146,3 @@ def divergence_flux_central(trace_pair, normal): scalar component. """ return trace_pair.avg@normal - - -def divergence_flux_lfr(cv_tpair, f_tpair, normal, lam): - r"""Compute Lax-Friedrichs/Rusanov flux after [Hesthaven_2008]_, Section 6.6. - - The Lax-Friedrichs/Rusanov flux is calculated as: - - .. math:: - - f_{\mathtt{LFR}} = \frac{1}{2}(\mathbf{F}(q^-) + \mathbf{F}(q^+)) \cdot - \hat{n} + \frac{\lambda}{2}(q^{-} - q^{+}), - - where $q^-, q^+$ are the scalar solution components on the interior and the - exterior of the face on which the LFR flux is to be calculated, $\mathbf{F}$ is - the vector flux function, $\hat{n}$ is the face normal, and $\lambda$ is the - user-supplied jump term coefficient. - - The $\lambda$ parameter is system-specific. Specifically, for the Rusanov flux - it is the max eigenvalue of the flux Jacobian: - - .. math:: - \lambda = \text{max}\left(|\mathbb{J}_{F}(q^-)|,|\mathbb{J}_{F}(q^+)|\right) - - Here, $\lambda$ is a function parameter, leaving the responsibility for the - calculation of the eigenvalues of the system-dependent flux Jacobian to the - caller. - - Parameters - ---------- - cv_tpair: :class:`~grudge.trace_pair.TracePair` - - Solution trace pair for faces for which numerical flux is to be calculated - - f_tpair: :class:`~grudge.trace_pair.TracePair` - - Physical flux trace pair on faces on which numerical flux is to be calculated - - normal: numpy.ndarray - - object array of :class:`meshmode.dof_array.DOFArray` with outward-pointing - normals - - lam: :class:`~meshmode.dof_array.DOFArray` - - lambda parameter for Lax-Friedrichs/Rusanov flux - - Returns - ------- - numpy.ndarray - - object array of :class:`~meshmode.dof_array.DOFArray` with the - Lax-Friedrichs/Rusanov flux. - """ - return flux_lfr(cv_tpair, f_tpair, normal, lam)@normal - - -def flux_lfr(cv_tpair, f_tpair, normal, lam): - r"""Compute Lax-Friedrichs/Rusanov flux after [Hesthaven_2008]_, Section 6.6. - - The Lax-Friedrichs/Rusanov flux is calculated as: - - .. math:: - - f_{\mathtt{LFR}} = \frac{1}{2}(\mathbf{F}(q^-) + \mathbf{F}(q^+)) - + \frac{\lambda}{2}(q^{-} - q^{+})\hat{\mathbf{n}}, - - where $q^-, q^+$ are the scalar solution components on the interior and the - exterior of the face on which the LFR flux is to be calculated, $\mathbf{F}$ is - the vector flux function, $\hat{\mathbf{n}}$ is the face normal, and $\lambda$ - is the user-supplied jump term coefficient. - - The $\lambda$ parameter is system-specific. Specifically, for the Rusanov flux - it is the max eigenvalue of the flux jacobian: - - .. math:: - \lambda = \text{max}\left(|\mathbb{J}_{F}(q^-)|,|\mathbb{J}_{F}(q^+)|\right) - - Here, $\lambda$ is a function parameter, leaving the responsibility for the - calculation of the eigenvalues of the system-dependent flux Jacobian to the - caller. - - Parameters - ---------- - cv_tpair: :class:`~grudge.trace_pair.TracePair` - - Solution trace pair for faces for which numerical flux is to be calculated - - f_tpair: :class:`~grudge.trace_pair.TracePair` - - Physical flux trace pair on faces on which numerical flux is to be calculated - - normal: numpy.ndarray - - object array of :class:`~meshmode.dof_array.DOFArray` with outward-pointing - normals - - lam: :class:`~meshmode.dof_array.DOFArray` - - lambda parameter for Lax-Friedrichs/Rusanov flux - - Returns - ------- - numpy.ndarray - - object array of :class:`~meshmode.dof_array.DOFArray` with the - Lax-Friedrichs/Rusanov flux. - """ - from arraycontext import outer - return f_tpair.avg - lam*outer(cv_tpair.diff, normal)/2 diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 3a2731c98..3b5bcf315 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -39,7 +39,7 @@ """ import numpy as np -from mirgecom.flux import lfr_flux_driver +from mirgecom.flux import lfr_flux_driver, hll_flux_driver from mirgecom.fluid import make_conserved @@ -83,7 +83,7 @@ def inviscid_flux(state): momentum=mom_flux, species_mass=species_mass_flux) -def inviscid_flux_rusanov(discr, gas_model, state_pair, **kwargs): +def inviscid_flux_rusanov(normal, gas_model, state_pair, **kwargs): r"""High-level interface for inviscid facial flux using Rusanov numerical flux. The Rusanov inviscid numerical flux is calculated as: @@ -98,7 +98,65 @@ def inviscid_flux_rusanov(discr, gas_model, state_pair, **kwargs): the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the *local* maximum fluid wavespeed. """ - return lfr_flux_driver(discr, state_pair, inviscid_flux) + return lfr_flux_driver(normal, state_pair, inviscid_flux) + +def inviscid_flux_hll(normal, gas_model, state_pair, **kwargs): + r"""High-level interface for inviscid facial flux using HLL numerical flux. + + The Harten, Lax, and van Leer approximate riemann numerical flux is calculated as: + + .. math:: + + F^{*}_{\mathtt{HLL}} = \frac{1}{2}(\mathbf{F}(q^-) + +\mathbf{F}(q^+)) \cdot \hat{n} + \frac{\lambda}{2}(q^{-} - q^{+}), + + where $q^-, q^+$ are the fluid solution state on the interior and the + exterior of the face on which the flux is to be calculated, $\mathbf{F}$ is + the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the + *local* maximum fluid wavespeed. + """ + #calculate left/right wavespeeds + actx = state_pair.int.array_context + ones = 0.*state_pair.int.mass_density + 1. + + # note for me, treat the interior state as left and the exterior state as right + # pressure estimate + p_int = state_pair.int.pressure + p_ext = state_pair.ext.pressure + u_int = np.dot(state_pair.int.velocity, normal) + u_ext = np.dot(state_pair.ext.velocity, normal) + rho_int = state_pair.int.mass_density + rho_ext = state_pair.ext.mass_density + c_int = state_pair.int.speed_of_sound + c_ext = state_pair.ext.speed_of_sound + + p_star = (0.5*(p_int + p_ext) + (1./8.)*(u_int - u_ext)* + (rho_int + rho_ext)*(c_int + c_ext)) + + gamma_int = gas_model.eos.gamma(state_pair.int.cv) + gamma_ext = gas_model.eos.gamma(state_pair.ext.cv) + + q_int = 1 + (gamma_int + 1)/(2*gamma_int)*(p_star/p_int - 1) + q_ext = 1 + (gamma_ext + 1)/(2*gamma_ext)*(p_star/p_ext - 1) + + pres_check_int = actx.np.greater(p_star, p_int) + pres_check_ext = actx.np.greater(p_star, p_ext) + + q_int = actx.np.where(pres_check_int, q_int, ones) + q_ext = actx.np.where(pres_check_ext, q_ext, ones) + + q_int = actx.np.sqrt(q_int) + q_ext = actx.np.sqrt(q_ext) + + # left (internal), and right (external) wave speed estimates + # can alternatively use the roe estimated states to find the wave speeds + wavespeed_int = u_int - c_int*q_int + wavespeed_ext = u_ext + c_ext*q_ext + + print(f"{wavespeed_int=}") + print(f"{wavespeed_ext=}") + + return hll_flux_driver(normal, state_pair, inviscid_flux, wavespeed_int, wavespeed_ext) def inviscid_facial_flux(discr, gas_model, state_pair, @@ -135,7 +193,9 @@ def inviscid_facial_flux(discr, gas_model, state_pair, the face normals as required by the divergence operator for which they are being computed. """ - num_flux = numerical_flux_func(discr, gas_model, state_pair) + actx = state_pair.int.array_context + normal = thaw(discr.normal(state_pair.dd), actx) + num_flux = numerical_flux_func(normal, gas_model, state_pair) return num_flux if local else discr.project(state_pair.dd, "all_faces", num_flux) From dbcc209eb20eeb657b9537abbc0372c55dd91e60 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Fri, 10 Dec 2021 11:29:58 -0600 Subject: [PATCH 404/873] req --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9e5092c51..fc54f3c1d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/kaushikcfd/loopy@pytato-array-context-transforms#egg=loopy +--editable git+https://github.com/kaushikcfd/loopy.git@pytato-array-context-transforms#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy From 0450f5c7c3422e30cfdbab91fb971f9fa93f8bf9 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 10 Dec 2021 11:54:55 -0600 Subject: [PATCH 405/873] Compute componentwise norms for array containers --- mirgecom/simutil.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 7ac50ccdd..e0cbb22c3 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -48,6 +48,13 @@ import numpy as np import grudge.op as op +from arraycontext import map_array_container, flatten + +from functools import partial + +from meshmode.dof_array import DOFArray + + logger = logging.getLogger(__name__) @@ -290,7 +297,18 @@ def compare_fluid_solutions(discr, red_state, blue_state): """ actx = red_state.array_context resid = red_state - blue_state - return [actx.to_numpy(discr.norm(v, np.inf)) for v in resid.join()] + resid_errs = actx.to_numpy( + flatten(componentwise_norms(discr, resid, order=np.inf), actx)) + + return resid_errs.tolist() + + +def componentwise_norms(discr, fields, order=np.inf): + if not isinstance(fields, DOFArray): + return map_array_container( + partial(componentwise_norms, discr, order=order), fields) + + return discr.norm(fields, order) def generate_and_distribute_mesh(comm, generate_mesh): From a29209d471f862d892064c802404e664954530f4 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 10 Dec 2021 12:02:48 -0600 Subject: [PATCH 406/873] Document componentwise norms --- mirgecom/simutil.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index e0cbb22c3..7696278d3 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -12,6 +12,7 @@ -------------------- .. autofunction:: compare_fluid_solutions +.. autofunction:: componentwise_norms .. autofunction:: check_naninf_local .. autofunction:: check_range_local @@ -304,6 +305,11 @@ def compare_fluid_solutions(discr, red_state, blue_state): def componentwise_norms(discr, fields, order=np.inf): + """Return the *order*-norm for each component of *fields*. + + .. note:: + This is a collective routine and must be called by all MPI ranks. + """ if not isinstance(fields, DOFArray): return map_array_container( partial(componentwise_norms, discr, order=order), fields) From 72948f28dea51a52bbce028fa219535397afc353 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Fri, 10 Dec 2021 12:51:35 -0600 Subject: [PATCH 407/873] Start updating unit tests --- test/test_euler.py | 12 ++++++------ test/test_simutil.py | 7 +++++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/test/test_euler.py b/test/test_euler.py index 821e9b43e..c0a22d978 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -234,7 +234,7 @@ def test_vortex_rhs(actx_factory, order): discr, eos=IdealSingleGas(), boundaries=boundaries, cv=vortex_soln, time=0.0) - err_max = actx.to_numpy(discr.norm(inviscid_rhs.join(), np.inf)) + err_max = actx.to_numpy(discr.norm(inviscid_rhs, np.inf)) eoc_rec.add_data_point(1.0 / nel_1d, err_max) logger.info( @@ -294,7 +294,7 @@ def test_lump_rhs(actx_factory, dim, order): expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) err_max = actx.to_numpy( - discr.norm((inviscid_rhs-expected_rhs).join(), np.inf)) + discr.norm((inviscid_rhs-expected_rhs), np.inf)) if err_max > maxxerr: maxxerr = err_max @@ -371,7 +371,7 @@ def test_multilump_rhs(actx_factory, dim, order, v0): print(f"expected_rhs = {expected_rhs}") err_max = actx.to_numpy( - discr.norm((inviscid_rhs-expected_rhs).join(), np.inf)) + discr.norm((inviscid_rhs-expected_rhs), np.inf)) if err_max > maxxerr: maxxerr = err_max @@ -437,7 +437,7 @@ def _euler_flow_stepper(actx, parameters): def write_soln(state, write_status=True): dv = eos.dependent_vars(cv=state) expected_result = initializer(nodes, t=t) - result_resid = (state - expected_result).join() + result_resid = state - expected_result maxerr = [np.max(np.abs(result_resid[i].get())) for i in range(dim + 2)] mindv = [np.min(dvfld.get()) for dvfld in dv] maxdv = [np.max(dvfld.get()) for dvfld in dv] @@ -493,7 +493,7 @@ def rhs(t, q): cv = rk4_step(cv, t, dt, rhs) cv = make_conserved( - dim, q=filter_modally(discr, "vol", cutoff, frfunc, cv.join()) + dim, q=filter_modally(discr, "vol", cutoff, frfunc, cv) ) t += dt @@ -506,7 +506,7 @@ def rhs(t, q): maxerr = max(write_soln(cv, False)) else: expected_result = initializer(nodes, time=t) - maxerr = actx.to_numpy(discr.norm((cv - expected_result).join(), np.inf)) + maxerr = actx.to_numpy(discr.norm(cv - expected_result, np.inf)) logger.info(f"Max Error: {maxerr}") if maxerr > exittol: diff --git a/test/test_simutil.py b/test/test_simutil.py index a590abcd9..a80cb7fdb 100644 --- a/test/test_simutil.py +++ b/test/test_simutil.py @@ -29,6 +29,7 @@ from arraycontext import ( # noqa thaw, + flatten, pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests ) @@ -108,7 +109,7 @@ def test_basic_cfd_healthcheck(actx_factory): def test_analytic_comparison(actx_factory): """Quick test of state comparison routine.""" from mirgecom.initializers import Vortex2D - from mirgecom.simutil import compare_fluid_solutions + from mirgecom.simutil import compare_fluid_solutions, componentwise_norms actx = actx_factory() nel_1d = 4 @@ -134,7 +135,9 @@ def test_analytic_comparison(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) resid = vortex_soln - cv - expected_errors = [actx.to_numpy(discr.norm(v, np.inf)) for v in resid.join()] + + expected_errors = actx.to_numpy( + flatten(componentwise_norms(discr, resid, order=np.inf), actx)).tolist() errors = compare_fluid_solutions(discr, cv, cv) assert max(errors) == 0 From e51985bc2c2bad3155d64bd390df2175b018bfca Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:21:00 -0600 Subject: [PATCH 408/873] Clean up autoignition driver a bit/debugging. --- examples/autoignition-mpi.py | 48 ++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 0cea6ff5d..5aa4b8b45 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -176,6 +176,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, actx, local_mesh, order=order, mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + ones = discr.zeros(actx) + 1.0 vis_timer = None @@ -263,19 +264,19 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, def get_temperature_update(cv, temperature): y = cv.species_mass_fractions - e = eos.internal_energy(cv) / cv.mass + e = gas_model.eos.internal_energy(cv) / cv.mass return make_obj_array( [pyro_mechanism.get_temperature_update_energy(e, temperature, y)] ) from mirgecom.gas_model import make_fluid_state - def get_fluid_state(cv, temperature_seed): - return make_fluid_state(cv, gas_model, temperature_seed) + def get_fluid_state(cv, tseed): + return make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) compute_temperature_update = actx.compile(get_temperature_update) - compute_dependent_vars = actx.compile(eos.dependent_vars) - create_fluid_state = actx.compile(get_fluid_state) + construct_fluid_state = actx.compile(get_fluid_state) # }}} @@ -312,7 +313,8 @@ def get_fluid_state(cv, temperature_seed): temperature_seed = connection(restart_data["temperature_seed"]) else: # Set the current state from time 0 - current_cv = initializer(eos=eos, x_vec=nodes) + current_cv = initializer(eos=gas_model.eos, x_vec=nodes) + temperature_seed = temperature_seed * ones # This bit memoizes the initial state's temperature onto the initial state # (assuming `initializer` just above didn't call eos.dv funcs.) @@ -333,8 +335,7 @@ def get_fluid_state(cv, temperature_seed): # and instead of writing the *current* running temperature to the restart file, # we could write the *temperature_seed*. That could fix up the non-deterministic # restart issue. - current_fluid_state = make_fluid_state(cv=current_cv, gas_model=gas_model, - temperature_seed=temperature_seed) + current_fluid_state = construct_fluid_state(current_cv, temperature_seed) current_dv = current_fluid_state.dv temperature_seed = current_dv.temperature @@ -344,7 +345,6 @@ def get_fluid_state(cv, temperature_seed): # Inspection at physics debugging time if debug: print("Initial MIRGE-Com state:") - print(f"{current_cv=}") print(f"Initial DV pressure: {current_fluid_state.pressure}") print(f"Initial DV temperature: {current_fluid_state.temperature}") @@ -352,7 +352,7 @@ def get_fluid_state(cv, temperature_seed): visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ - eosname = eos.__class__.__name__ + eosname = gas_model.eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, nelements=local_nelements, global_nelements=global_nelements, @@ -396,14 +396,7 @@ def my_write_status(dt, cfl, dv=None): if rank == 0: logger.info(status_msg) - def my_write_viz(step, t, dt, state, ts_field=None, dv=None, - production_rates=None, cfl=None): - if dv is None: - dv = compute_dependent_vars(state) - if production_rates is None: - production_rates = compute_production_rates(state) - if ts_field is None: - ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state) + def my_write_viz(step, t, dt, state, ts_field, dv, production_rates, cfl): viz_fields = [("cv", state), ("dv", dv), ("production_rates", production_rates), ("dt" if constant_cfl else "cfl", ts_field)] @@ -486,8 +479,8 @@ def get_cfl(state, dt): compute_cfl = actx.compile(get_cfl) - def get_production_rates(cv): - return make_obj_array([eos.get_production_rates(cv)]) + def get_production_rates(cv, temperature): + return make_obj_array([gas_model.eos.get_production_rates(cv, temperature)]) compute_production_rates = actx.compile(get_production_rates) @@ -512,7 +505,7 @@ def my_get_timestep(t, dt, state): def my_pre_step(step, t, dt, state): cv, tseed = state - fluid_state = create_fluid_state(cv, tseed) + fluid_state = construct_fluid_state(cv, tseed) dv = fluid_state.dv try: @@ -543,7 +536,8 @@ def my_pre_step(step, t, dt, state): temperature_seed=tseed) if do_viz: - production_rates, = compute_production_rates(cv) + production_rates, = compute_production_rates(fluid_state.cv, + fluid_state.temperature) my_write_viz(step=step, t=t, dt=dt, state=cv, dv=dv, production_rates=production_rates, ts_field=ts_field, cfl=cfl) @@ -559,13 +553,13 @@ def my_pre_step(step, t, dt, state): def my_post_step(step, t, dt, state): cv, tseed = state - fluid_state = create_fluid_state(cv, tseed) + fluid_state = construct_fluid_state(cv, tseed) # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) - set_sim_state(logmgr, dim, cv, eos) + set_sim_state(logmgr, dim, cv, gas_model.eos) logmgr.tick_after() return make_obj_array([cv, fluid_state.temperature]), dt @@ -580,7 +574,7 @@ def my_rhs(t, state): euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, inviscid_numerical_flux_func=inviscid_flux_rusanov) - + eos.get_species_source_terms(cv), + + gas_model.eos.get_species_source_terms(cv, fluid_state.temperature), 0*tseed]) current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, @@ -598,9 +592,9 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") final_cv, tseed = current_state - final_fluid_state = create_fluid_state(final_cv, tseed) + final_fluid_state = construct_fluid_state(final_cv, tseed) final_dv = final_fluid_state.dv - final_dm, = compute_production_rates(final_cv) + final_dm, = compute_production_rates(final_cv, final_dv.temperature) ts_field, cfl, dt = my_get_timestep(t=current_t, dt=current_dt, state=final_fluid_state) my_write_viz(step=current_step, t=current_t, dt=dt, state=final_cv, From 1c48472630d73145c5a5741ec4a282bfc28c0d55 Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:22:40 -0600 Subject: [PATCH 409/873] Enable lazy execution in nsmix. --- examples/nsmix-mpi.py | 117 +++++++++++++++++++++++++++++++----------- 1 file changed, 88 insertions(+), 29 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index fd012b8da..7ab4b7566 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -35,13 +35,13 @@ SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext -from meshmode.dof_array import thaw +from arraycontext import thaw, freeze from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer from mirgecom.transport import SimpleTransport -from mirgecom.simutil import get_sim_timestep +from mirgecom.simutil import get_sim_timestep, allsync from mirgecom.navierstokes import ns_operator from mirgecom.io import make_init_message @@ -66,7 +66,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -83,7 +83,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=PyOpenCLArrayContext, + log_dependent=True): """Drive example.""" cl_ctx = ctx_factory() @@ -155,27 +156,32 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) + ones = discr.zeros(actx) + 1.0 if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, discr, dim, - extract_vars_for_logging, units_for_logging) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) logmgr.add_watches([ ("step.max", "step = {value}, "), ("t_sim.max", "sim time: {value:1.6e} s\n"), - ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), - ("max_pressure", "{value:1.9e})\n"), - ("min_temperature", "------- T (min, max) (K) = ({value:1.9e}, "), - ("max_temperature", "{value:1.9e})\n"), ("t_step.max", "------- step walltime: {value:6g} s, "), ("t_log.max", "log walltime: {value:6g} s") ]) - vis_timer = IntervalTimer("t_vis", "Time spent visualizing") - logmgr.add_quantity(vis_timer) + if log_dependent: + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, + units_for_logging) + logmgr.add_watches([ + ("min_pressure", "\n------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), + ("max_temperature", "{value:7g})\n")]) # {{{ Set up initial state using Cantera @@ -258,6 +264,20 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, my_boundary = IsothermalNoSlipBoundary(wall_temperature=can_t) visc_bnds = {BTAG_ALL: my_boundary} + def _get_temperature_update(cv, temperature): + y = cv.species_mass_fractions + e = gas_model.eos.internal_energy(cv) / cv.mass + return make_obj_array( + [pyrometheus_mechanism.get_temperature_update_energy(e, temperature, y)] + ) + + def _get_fluid_state(cv, temp_seed): + return make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=temp_seed) + + compute_temperature_update = actx.compile(_get_temperature_update) + construct_fluid_state = actx.compile(_get_fluid_state) + tseed = can_t if rst_filename: current_t = restart_data["t"] @@ -271,8 +291,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: # Set the current state from time 0 current_cv = initializer(x_vec=nodes, eos=gas_model.eos) - current_state = make_fluid_state(cv=current_cv, gas_model=gas_model, - temperature_seed=tseed) + tseed = tseed * ones + + current_state = construct_fluid_state(current_cv, tseed) # Inspection at physics debugging time if debug: @@ -312,7 +333,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, f" {eq_pressure=}, {eq_temperature=}," f" {eq_density=}, {eq_mass_fractions=}") - def my_write_status(step, t, dt, state): + def my_write_status(step, t, dt, dv, state): if constant_cfl: cfl = current_cfl else: @@ -320,8 +341,27 @@ def my_write_status(step, t, dt, state): cfl_field = get_viscous_cfl(discr, dt, state=state) from grudge.op import nodal_max cfl = actx.to_numpy(nodal_max(discr, "vol", cfl_field)) + status_msg = f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}" + + if ((dv is not None) and (not log_dependent)): + temp = dv.temperature + press = dv.pressure + temp = thaw(freeze(temp, actx), actx) + press = thaw(freeze(press, actx), actx) + from grudge.op import nodal_min_loc, nodal_max_loc + tmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + comm=comm, op=MPI.MIN) + tmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + comm=comm, op=MPI.MAX) + pmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + comm=comm, op=MPI.MIN) + pmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + comm=comm, op=MPI.MAX) + dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" + status_msg = status_msg + dv_status_msg + if rank == 0: - logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}") + logger.info(status_msg) def my_write_viz(step, t, state, dv): viz_fields = [("cv", state), @@ -346,7 +386,7 @@ def my_write_restart(step, t, state, tseed): from mirgecom.restart import write_restart_file write_restart_file(actx, rst_data, rst_fname, comm) - def my_health_check(state, dv): + def my_health_check(cv, dv): # Note: This health check is tuned to expected results # which effectively makes this example a CI test that # the case gets the expected solution. If dt,t_final or @@ -379,12 +419,30 @@ def my_health_check(state, dv): t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + # This check is the temperature convergence check + # The current *temperature* is what Pyrometheus gets + # after a fixed number of Newton iterations, *n_iter*. + # Calling `compute_temperature` here with *temperature* + # input as the guess returns the calculated gas temperature after + # yet another *n_iter*. + # The difference between those two temperatures is the + # temperature residual, which can be used as an indicator of + # convergence in Pyrometheus `get_temperature`. + # Note: The local max jig below works around a very long compile + # in lazy mode. + from grudge import op + temp_update, = compute_temperature_update(cv, dv.temperature) + temp_resid = thaw(freeze(temp_update, actx), actx) / dv.temperature + temp_resid = (actx.to_numpy(op.nodal_max_loc(discr, "vol", temp_resid))) + if temp_resid > 1e-8: + health_error = True + logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") + return health_error def my_pre_step(step, t, dt, state): cv, tseed = state - fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, - temperature_seed=tseed) + fluid_state = construct_fluid_state(cv, tseed) dv = fluid_state.dv try: @@ -415,7 +473,7 @@ def my_pre_step(step, t, dt, state): dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) if do_status: - my_write_status(step, t, dt, state=fluid_state) + my_write_status(step, t, dt, dv=dv, state=fluid_state) except MyRuntimeError: if rank == 0: @@ -428,8 +486,7 @@ def my_pre_step(step, t, dt, state): def my_post_step(step, t, dt, state): cv, tseed = state - fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, - temperature_seed=tseed) + fluid_state = construct_fluid_state(cv, tseed) # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -446,7 +503,7 @@ def my_rhs(t, state): temperature_seed=tseed) ns_rhs = ns_operator(discr, state=fluid_state, time=t, boundaries=visc_bnds, gas_model=gas_model) - cv_rhs = ns_rhs + eos.get_species_source_terms(cv) + cv_rhs = ns_rhs + eos.get_species_source_terms(cv, fluid_state.temperature) return make_obj_array([cv_rhs, 0*tseed]) current_dt = get_sim_timestep(discr, current_state, current_t, @@ -465,15 +522,15 @@ def my_rhs(t, state): logger.info("Checkpointing final state ...") current_cv, tseed = current_stepper_state - current_state = make_fluid_state(cv=current_cv, gas_model=gas_model, - temperature_seed=tseed) + current_state = construct_fluid_state(current_cv, tseed) final_dv = current_state.dv final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state.cv, tseed=tseed) - my_write_status(current_step, current_t, final_dt, current_state) + my_write_status(current_step, current_t, final_dt, state=current_state, + dv=final_dv) if logmgr: logmgr.close() @@ -499,6 +556,7 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + log_dependent = not args.lazy if args.profiling: if args.lazy: raise ValueError("Can't use lazy and profiling together.") @@ -515,6 +573,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + log_dependent=log_dependent) # vim: foldmethod=marker From 2b272557c6f864c69dd9ee3bc9eddf03842f7cba Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:41:57 -0600 Subject: [PATCH 410/873] Fix up calls to use original EOS - avoid pylint issue. --- examples/autoignition-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 5aa4b8b45..3373836fc 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -480,7 +480,7 @@ def get_cfl(state, dt): compute_cfl = actx.compile(get_cfl) def get_production_rates(cv, temperature): - return make_obj_array([gas_model.eos.get_production_rates(cv, temperature)]) + return make_obj_array([eos.get_production_rates(cv, temperature)]) compute_production_rates = actx.compile(get_production_rates) @@ -574,7 +574,7 @@ def my_rhs(t, state): euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, inviscid_numerical_flux_func=inviscid_flux_rusanov) - + gas_model.eos.get_species_source_terms(cv, fluid_state.temperature), + + eos.get_species_source_terms(cv, fluid_state.temperature), 0*tseed]) current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, From c72672ecc69bb235b1c06b1fadf54e2733a94b61 Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:44:11 -0600 Subject: [PATCH 411/873] Make temperature explicit argument for many EOS routines --- mirgecom/eos.py | 85 +++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index a969d78c6..68edc2404 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -116,7 +116,7 @@ class GasEOS(metaclass=ABCMeta): """ @abstractmethod - def pressure(self, cv: ConservedVars): + def pressure(self, cv: ConservedVars, temperature: DOFArray): """Get the gas pressure.""" @abstractmethod @@ -125,7 +125,7 @@ def temperature(self, cv: ConservedVars, """Get the gas temperature.""" @abstractmethod - def sound_speed(self, cv: ConservedVars): + def sound_speed(self, cv: ConservedVars, temperature: DOFArray): """Get the gas sound speed.""" @abstractmethod @@ -133,7 +133,7 @@ def gas_const(self, cv: ConservedVars): r"""Get the specific gas constant ($R_s$).""" @abstractmethod - def heat_capacity_cp(self, cv: ConservedVars): + def heat_capacity_cp(self, cv: ConservedVars, temperature: DOFArray): r"""Get the specific heat capacity at constant pressure ($C_p$).""" @abstractmethod @@ -145,7 +145,8 @@ def internal_energy(self, cv: ConservedVars): """Get the thermal energy of the gas.""" @abstractmethod - def total_energy(self, cv: ConservedVars, pressure: np.ndarray): + def total_energy(self, cv: ConservedVars, pressure: DOFArray, + temperature: DOFArray): """Get the total (thermal + kinetic) energy for the gas.""" @abstractmethod @@ -153,7 +154,7 @@ def kinetic_energy(self, cv: ConservedVars): """Get the kinetic energy for the gas.""" @abstractmethod - def gamma(self, cv: ConservedVars): + def gamma(self, cv: ConservedVars, temperature=None): """Get the ratio of gas specific heats Cp/Cv.""" @abstractmethod @@ -168,10 +169,11 @@ def dependent_vars(self, cv: ConservedVars, may raise :exc:`TemperatureSeedError` if *temperature_seed* is not given. """ + temperature = self.temperature(cv, temperature_seed) return EOSDependentVars( - temperature=self.temperature(cv, temperature_seed), - pressure=self.pressure(cv), - speed_of_sound=self.sound_speed(cv) + temperature=temperature, + pressure=self.pressure(cv, temperature), + speed_of_sound=self.sound_speed(cv, temperature) ) @@ -203,7 +205,7 @@ def get_species_molecular_weights(self): """Get the species molecular weights.""" @abstractmethod - def species_enthalpies(self, cv: ConservedVars): + def species_enthalpies(self, cv: ConservedVars, temperature: DOFArray): """Get the species specific enthalpies.""" @abstractmethod @@ -222,11 +224,12 @@ def dependent_vars(self, cv: ConservedVars, may raise :exc:`TemperatureSeedError` if *temperature_seed* is not given. """ + temperature = self.temperature(cv, temperature_seed) return MixtureDependentVars( - temperature=self.temperature(cv, temperature_seed), - pressure=self.pressure(cv), - speed_of_sound=self.sound_speed(cv), - species_enthalpies=self.species_enthalpies(cv) + temperature=temperature, + pressure=self.pressure(cv, temperature), + speed_of_sound=self.sound_speed(cv, temperature), + species_enthalpies=self.species_enthalpies(cv, temperature) ) @@ -259,11 +262,11 @@ def __init__(self, gamma=1.4, gas_const=287.1): self._gamma = gamma self._gas_const = gas_const - def gamma(self, cv: ConservedVars = None): + def gamma(self, cv: ConservedVars = None, temperature=None): """Get specific heat ratio Cp/Cv.""" return self._gamma - def heat_capacity_cp(self, cv: ConservedVars = None): + def heat_capacity_cp(self, cv: ConservedVars = None, temperature=None): r"""Get specific heat capacity at constant pressure. Parameters @@ -275,7 +278,7 @@ def heat_capacity_cp(self, cv: ConservedVars = None): """ return self._gas_const * self._gamma / (self._gamma - 1) - def heat_capacity_cv(self, cv: ConservedVars = None): + def heat_capacity_cv(self, cv: ConservedVars = None, temperature=None): r"""Get specific heat capacity at constant volume. Parameters @@ -336,7 +339,7 @@ def internal_energy(self, cv: ConservedVars): """ return (cv.energy - self.kinetic_energy(cv)) - def pressure(self, cv: ConservedVars): + def pressure(self, cv: ConservedVars, temperature=None): r"""Get thermodynamic pressure of the gas. Gas pressure (p) is calculated from the internal energy (e) as: @@ -358,7 +361,7 @@ def pressure(self, cv: ConservedVars): """ return self.internal_energy(cv) * (self._gamma - 1.0) - def sound_speed(self, cv: ConservedVars): + def sound_speed(self, cv: ConservedVars, temperature=None): r"""Get the speed of sound in the gas. The speed of sound (c) is calculated as: @@ -411,7 +414,7 @@ def temperature(self, cv: ConservedVars, temperature_seed: DOFArray = None): * self.internal_energy(cv) / cv.mass) ) - def total_energy(self, cv, pressure): + def total_energy(self, cv, pressure, temperature=None): r""" Get gas total energy from mass, pressure, and momentum. @@ -551,7 +554,7 @@ def get_temperature_seed(self, cv, temperature_seed=None): tseed = temperature_seed return tseed if isinstance(tseed, DOFArray) else tseed * (0*cv.mass + 1.0) - def heat_capacity_cp(self, cv: ConservedVars): + def heat_capacity_cp(self, cv: ConservedVars, temperature): r"""Get mixture-averaged specific heat capacity at constant pressure. Parameters @@ -561,11 +564,11 @@ def heat_capacity_cp(self, cv: ConservedVars): ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$), and the vector of species masses, ($\rho{Y}_\alpha$). """ - temp = self.temperature(cv) y = cv.species_mass_fractions - return self._pyrometheus_mech.get_mixture_specific_heat_cp_mass(temp, y) + return \ + self._pyrometheus_mech.get_mixture_specific_heat_cp_mass(temperature, y) - def heat_capacity_cv(self, cv: ConservedVars): + def heat_capacity_cv(self, cv: ConservedVars, temperature): r"""Get mixture-averaged specific heat capacity at constant volume. Parameters @@ -575,14 +578,13 @@ def heat_capacity_cv(self, cv: ConservedVars): ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$), and the vector of species masses, ($\rho{Y}_\alpha$). """ - temp = self.temperature(cv) y = cv.species_mass_fractions return ( - self._pyrometheus_mech.get_mixture_specific_heat_cp_mass(temp, y) - / self.gamma(cv) + self._pyrometheus_mech.get_mixture_specific_heat_cp_mass(temperature, y) + / self.gamma(cv, temperature) ) - def gamma(self, cv: ConservedVars): + def gamma(self, cv: ConservedVars, temperature): r"""Get mixture-averaged specific heat ratio for mixture $\frac{C_p}{C_p - R_s}$. Parameters @@ -592,7 +594,6 @@ def gamma(self, cv: ConservedVars): ($\rho$), energy ($\rho{E}$), momentum ($\rho\vec{V}$), and the vector of species masses, ($\rho{Y}_\alpha$). """ - temperature = self.temperature(cv) y = cv.species_mass_fractions cp = self._pyrometheus_mech.get_mixture_specific_heat_cp_mass(temperature, y) rspec = self.gas_const(cv) @@ -710,11 +711,11 @@ def get_species_molecular_weights(self): """Get the species molecular weights.""" return self._pyrometheus_mech.wts - def species_enthalpies(self, cv: ConservedVars): + def species_enthalpies(self, cv: ConservedVars, temperature): """Get the species specific enthalpies.""" - return self._pyrometheus_mech.get_species_enthalpies_rt(self.temperature(cv)) + return self._pyrometheus_mech.get_species_enthalpies_rt(temperature) - def get_production_rates(self, cv: ConservedVars): + def get_production_rates(self, cv: ConservedVars, temperature): r"""Get the production rate for each species. Parameters @@ -729,12 +730,11 @@ def get_production_rates(self, cv: ConservedVars): numpy.ndarray The chemical production rates for each species """ - temperature = self.temperature(cv) y = cv.species_mass_fractions return self._pyrometheus_mech.get_net_production_rates( cv.mass, temperature, y) - def pressure(self, cv: ConservedVars): + def pressure(self, cv: ConservedVars, temperature): r"""Get thermodynamic pressure of the gas. Gas pressure ($p$) is calculated from the internal energy ($e$) as: @@ -758,12 +758,12 @@ def pressure(self, cv: ConservedVars): @memoize_in(cv, (PyrometheusMixture.pressure, type(self._pyrometheus_mech))) def get_pressure(): - temperature = self.temperature(cv) + # temperature = self.temperature(cv) y = cv.species_mass_fractions return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) return get_pressure() - def sound_speed(self, cv: ConservedVars): + def sound_speed(self, cv: ConservedVars, temperature): r"""Get the speed of sound in the gas. The speed of sound ($c$) is calculated as: @@ -788,7 +788,9 @@ def sound_speed(self, cv: ConservedVars): type(self._pyrometheus_mech))) def get_sos(): actx = cv.array_context - return actx.np.sqrt((self.gamma(cv) * self.pressure(cv)) / cv.mass) + return actx.np.sqrt((self.gamma(cv, temperature) + * self.pressure(cv, temperature)) + / cv.mass) return get_sos() def temperature(self, cv: ConservedVars, temperature_seed=None): @@ -832,10 +834,9 @@ def get_temp(): y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass return self._pyrometheus_mech.get_temperature(e, tseed, y) - return get_temp() - def total_energy(self, cv, pressure): + def total_energy(self, cv, pressure, temperature): r""" Get gas total energy from mass, pressure, and momentum. @@ -863,16 +864,18 @@ def total_energy(self, cv, pressure): of species masses, ($\rho{Y}_\alpha$). pressure: :class:`~meshmode.dof_array.DOFArray` The fluid pressure + temperature: :class:`~meshmode.dof_array.DOFArray` + The fluid temperature Returns ------- :class:`~meshmode.dof_array.DOFArray` The total energy fo the fluid (i.e. internal + kinetic) """ - return (pressure / (self.gamma(cv) - 1.0) + return (pressure / (self.gamma(cv, temperature) - 1.0) + self.kinetic_energy(cv)) - def get_species_source_terms(self, cv: ConservedVars): + def get_species_source_terms(self, cv: ConservedVars, temperature): r"""Get the species mass source terms to be used on the RHS for chemistry. Parameters @@ -887,7 +890,7 @@ def get_species_source_terms(self, cv: ConservedVars): :class:`~mirgecom.fluid.ConservedVars` Chemistry source terms """ - omega = self.get_production_rates(cv) + omega = self.get_production_rates(cv, temperature) w = self.get_species_molecular_weights() dim = cv.dim species_sources = w * omega From e9a436191eebe3ded4a0f244e9a37175f11bc050 Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:45:09 -0600 Subject: [PATCH 412/873] Rip gas model into inviscid vs. viscous states. --- mirgecom/gas_model.py | 53 ++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 5c287e39f..d04d7cded 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -51,7 +51,6 @@ ) from mirgecom.transport import ( TransportModel, - TransportModelError, TransportDependentVars ) @@ -106,11 +105,11 @@ class FluidState: .. autoattribute:: energy_density .. autoattribute:: species_mass_density .. autoattribute:: species_mass_fractions + .. autoattribute:: species_enthalpies """ cv: ConservedVars dv: EOSDependentVars - tv: TransportDependentVars = None @property def array_context(self): @@ -183,51 +182,63 @@ def wavespeed(self): return self.cv.speed + self.dv.speed_of_sound @property - def has_transport(self): + def is_viscous(self): """Indicate if this is a viscous state.""" - return self.tv is not None + return isinstance(self, ViscousFluidState) @property def is_mixture(self): """Indicate if this is a state resulting from a mixture gas model.""" return isinstance(self.dv, MixtureDependentVars) - def _get_transport_property(self, name): - """Grab a transport property if transport model is present.""" - if not self.has_transport: - raise TransportModelError("Viscous transport model not provided.") - return getattr(self.tv, name) - def _get_mixture_property(self, name): """Grab a mixture property if EOS is a :class:`~mirgecom.eos.MixtureEOS`.""" if not self.is_mixture: raise MixtureEOSError("Mixture EOS required for mixture properties.") return getattr(self.dv, name) + @property + def species_enthalpies(self): + """Return the fluid species diffusivities.""" + return self._get_mixture_property("species_enthalpies") + + +@dataclass_array_container +@dataclass(frozen=True) +class ViscousFluidState(FluidState): + r"""Gas model-consistent fluid state for viscous gas models. + + .. attribute:: tv + + Viscous fluid state-dependent transport properties. + + .. autattribute:: viscosity + .. autoattribute:: bulk_viscosity + .. autoattribute:: species_diffusivity + .. autoattribute:: thermal_conductivity + """ + + tv: TransportDependentVars + @property def viscosity(self): """Return the fluid viscosity.""" - return self._get_transport_property("viscosity") + return self.tv.viscosity @property def bulk_viscosity(self): """Return the fluid bulk viscosity.""" - return self._get_transport_property("bulk_viscosity") + return self.tv.bulk_viscosity @property def thermal_conductivity(self): """Return the fluid thermal conductivity.""" - return self._get_transport_property("thermal_conductivity") + return self.tv.thermal_conductivity @property def species_diffusivity(self): """Return the fluid species diffusivities.""" - return self._get_transport_property("species_diffusivity") - - @property - def species_enthalpies(self): - """Return the fluid species diffusivities.""" - return self._get_mixture_property("species_enthalpies") + return self.tv.species_diffusivity def make_fluid_state(cv, gas_model, temperature_seed=None): @@ -255,10 +266,10 @@ def make_fluid_state(cv, gas_model, temperature_seed=None): Thermally consistent fluid state """ dv = gas_model.eos.dependent_vars(cv, temperature_seed=temperature_seed) - tv = None if gas_model.transport is not None: tv = gas_model.transport.dependent_vars(eos=gas_model.eos, cv=cv) - return FluidState(cv=cv, dv=dv, tv=tv) + return ViscousFluidState(cv=cv, dv=dv, tv=tv) + return FluidState(cv=cv, dv=dv) def project_fluid_state(discr, btag, state, gas_model): From eefd76ae10d2060560969fcf387369b53feab48c Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:45:45 -0600 Subject: [PATCH 413/873] Return data with the right shape --- mirgecom/transport.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 89154f352..0627ad406 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -148,11 +148,11 @@ def __init__(self, bulk_viscosity=0, viscosity=0, def bulk_viscosity(self, eos: GasEOS, cv: ConservedVars): r"""Get the bulk viscosity for the gas, $\mu_{B}$.""" - return self._mu_bulk + return self._mu_bulk*(0*cv.mass + 1.0) def viscosity(self, eos: GasEOS, cv: ConservedVars): r"""Get the gas dynamic viscosity, $\mu$.""" - return self._mu + return self._mu*(0*cv.mass + 1.0) def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): r"""Get the 2nd viscosity coefficent, $\lambda$. @@ -161,15 +161,15 @@ def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): $\lambda = \left(\mu_{B} - \frac{2\mu}{3}\right)$ """ - return self._mu_bulk - 2 * self._mu / 3 + return (self._mu_bulk - 2 * self._mu / 3)*(0*cv.mass + 1.0) def thermal_conductivity(self, eos: GasEOS, cv: ConservedVars): r"""Get the gas thermal_conductivity, $\kappa$.""" - return self._kappa + return self._kappa*(0*cv.mass + 1.0) def species_diffusivity(self, eos: GasEOS, cv: ConservedVars): r"""Get the vector of species diffusivities, ${d}_{\alpha}$.""" - return self._d_alpha + return self._d_alpha*(0*cv.mass + 1.0) class PowerLawTransport(TransportModel): From 3317c21715d8bfc86a4b962ccfcbfc72ffaa98a0 Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 11:47:11 -0600 Subject: [PATCH 414/873] Clean up NS operator viscous per state interface --- mirgecom/navierstokes.py | 18 ++++++++++-------- mirgecom/viscous.py | 4 ++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 36a787b12..2484819f0 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -122,9 +122,10 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, Agglomerated object array of DOF arrays representing the RHS of the Navier-Stokes equations. """ + if not state.is_viscous: + raise ValueError("Navier-Stokes operator expects viscous gas model.") + dim = state.dim - cv = state.cv - dv = state.dv actx = state.array_context from mirgecom.gas_model import project_fluid_state @@ -132,10 +133,11 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, project_fluid_state(discr, btag, state, gas_model) for btag in boundaries} - cv_int_pair = interior_trace_pair(discr, cv) + # CV + cv_int_pair = interior_trace_pair(discr, state.cv) cv_interior_pairs = [cv_int_pair] - q_comm_pairs = cross_rank_trace_pairs(discr, cv.join()) - # num_partition_interfaces = len(q_comm_pairs) + q_comm_pairs = cross_rank_trace_pairs(discr, state.cv.join()) + cv_part_pairs = [ TracePair(q_pair.dd, interior=make_conserved(dim, q=q_pair.int), @@ -145,8 +147,8 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, tseed_interior_pairs = None if state.is_mixture: - tseed_int_pair = interior_trace_pair(discr, dv.temperature) - tseed_part_pairs = cross_rank_trace_pairs(discr, dv.temperature) + tseed_int_pair = interior_trace_pair(discr, state.temperature) + tseed_part_pairs = cross_rank_trace_pairs(discr, state.temperature) tseed_interior_pairs = [tseed_int_pair] tseed_interior_pairs.extend(tseed_part_pairs) @@ -180,7 +182,7 @@ def _cv_grad_flux_bnd(btag, boundary_state): cv_interior_pairs, boundary_states) # [Bassi_1997]_ eqn 15 (s = grad_q) - grad_cv = make_conserved(dim, q=grad_operator(discr, cv.join(), + grad_cv = make_conserved(dim, q=grad_operator(discr, state.cv.join(), cv_flux_bnd.join())) s_int_pair = interior_trace_pair(discr, grad_cv) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index a3054c3e5..92d7b2d86 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -256,7 +256,7 @@ def viscous_flux(state, grad_cv, grad_t): The viscous transport flux vector if viscous transport properties are provided, scalar zero otherwise. """ - if not state.has_transport: + if not state.is_viscous: return 0 viscous_mass_flux = 0 * state.momentum_density @@ -396,7 +396,7 @@ def get_viscous_timestep(discr, state): mu = 0 d_alpha_max = 0 - if state.has_transport: + if state.is_viscous: mu = state.viscosity d_alpha_max = \ get_local_max_species_diffusivity( From 1424cbaff5e546d1d48a4d70a96d6e92680cc801 Mon Sep 17 00:00:00 2001 From: MTCam Date: Sat, 11 Dec 2021 12:51:15 -0600 Subject: [PATCH 415/873] Update type annotation eos --- mirgecom/eos.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 68edc2404..cd716f4fe 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -209,7 +209,7 @@ def species_enthalpies(self, cv: ConservedVars, temperature: DOFArray): """Get the species specific enthalpies.""" @abstractmethod - def get_production_rates(self, cv: ConservedVars): + def get_production_rates(self, cv: ConservedVars, temperature: DOFArray): """Get the production rate for each species.""" @abstractmethod From 72a00c3cb2af27aaa4ae1422e710d7612491527f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 11 Dec 2021 14:55:42 -0600 Subject: [PATCH 416/873] Banish join, use interior_trace_pairs --- mirgecom/euler.py | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 06ff8becc..419cfe8fd 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -58,11 +58,7 @@ inviscid_facial_flux, inviscid_flux_rusanov ) -from grudge.eager import ( - interior_trace_pair, - cross_rank_trace_pairs -) -from grudge.trace_pair import TracePair +from grudge.trace_pair import interior_trace_pairs from mirgecom.fluid import make_conserved from mirgecom.operators import div_operator @@ -108,23 +104,12 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ - cv = state.cv - dim = state.dim - from mirgecom.gas_model import project_fluid_state boundary_states = {btag: project_fluid_state(discr, btag, state, gas_model) for btag in boundaries} - cv_int_pair = interior_trace_pair(discr, cv) - cv_interior_pairs = [cv_int_pair] - q_comm_pairs = cross_rank_trace_pairs(discr, cv.join()) - cv_part_pairs = [ - TracePair(q_pair.dd, - interior=make_conserved(dim, q=q_pair.int), - exterior=make_conserved(dim, q=q_pair.ext)) - for q_pair in q_comm_pairs] - cv_interior_pairs.extend(cv_part_pairs) + cv_interior_pairs = interior_trace_pairs(discr, state.cv) tseed_interior_pairs = None if state.is_mixture > 0: @@ -132,10 +117,7 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, # mixture pressure (used in the inviscid flux calculations) depends on # temperature and we need to seed the temperature calculation for the # (+) part of the partition boundary with the remote temperature data. - tseed_int_pair = interior_trace_pair(discr, state.temperature) - tseed_part_pairs = cross_rank_trace_pairs(discr, state.temperature) - tseed_interior_pairs = [tseed_int_pair] - tseed_interior_pairs.extend(tseed_part_pairs) + tseed_interior_pairs = interior_trace_pairs(discr, state.temperature) from mirgecom.gas_model import make_fluid_state_trace_pairs interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, @@ -143,10 +125,14 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, inviscid_flux_vol = inviscid_flux(state) inviscid_flux_bnd = ( + + # Domain boundaries sum(boundaries[btag].inviscid_divergence_flux( discr, btag, gas_model, state_minus=boundary_states[btag], time=time, numerical_flux_func=inviscid_numerical_flux_func) for btag in boundaries) + + # Interior boundaries + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, numerical_flux_func=inviscid_numerical_flux_func) for state_pair in interior_states) From 3c5bdb6e4adaffc89507e5620b464ae216045f24 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 11 Dec 2021 15:06:41 -0600 Subject: [PATCH 417/873] Simplify per grudge array context knowledge --- mirgecom/navierstokes.py | 53 ++++++++++------------------------------ 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 2484819f0..63a350653 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -57,10 +57,8 @@ import numpy as np # noqa from grudge.symbolic.primitives import TracePair -from grudge.eager import ( - interior_trace_pair, - cross_rank_trace_pairs -) +from grudge.trace_pair import interior_trace_pairs + from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux, @@ -125,7 +123,6 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, if not state.is_viscous: raise ValueError("Navier-Stokes operator expects viscous gas model.") - dim = state.dim actx = state.array_context from mirgecom.gas_model import project_fluid_state @@ -133,24 +130,10 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, project_fluid_state(discr, btag, state, gas_model) for btag in boundaries} - # CV - cv_int_pair = interior_trace_pair(discr, state.cv) - cv_interior_pairs = [cv_int_pair] - q_comm_pairs = cross_rank_trace_pairs(discr, state.cv.join()) - - cv_part_pairs = [ - TracePair(q_pair.dd, - interior=make_conserved(dim, q=q_pair.int), - exterior=make_conserved(dim, q=q_pair.ext)) - for q_pair in q_comm_pairs] - cv_interior_pairs.extend(cv_part_pairs) - - tseed_interior_pairs = None - if state.is_mixture: - tseed_int_pair = interior_trace_pair(discr, state.temperature) - tseed_part_pairs = cross_rank_trace_pairs(discr, state.temperature) - tseed_interior_pairs = [tseed_int_pair] - tseed_interior_pairs.extend(tseed_part_pairs) + cv_interior_pairs = interior_trace_pairs(discr, state.cv) + + tseed_interior_pairs = \ + interior_trace_pairs(discr, state.cv) if state.is_mixture else None from mirgecom.gas_model import make_fluid_state_trace_pairs interior_state_pairs = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, @@ -182,17 +165,10 @@ def _cv_grad_flux_bnd(btag, boundary_state): cv_interior_pairs, boundary_states) # [Bassi_1997]_ eqn 15 (s = grad_q) - grad_cv = make_conserved(dim, q=grad_operator(discr, state.cv.join(), - cv_flux_bnd.join())) - - s_int_pair = interior_trace_pair(discr, grad_cv) - s_part_pairs = [TracePair(xrank_tpair.dd, - interior=make_conserved(dim, q=xrank_tpair.int), - exterior=make_conserved(dim, q=xrank_tpair.ext)) - for xrank_tpair in cross_rank_trace_pairs(discr, grad_cv.join())] + grad_cv = make_conserved(state.dim, q=grad_operator(discr, state.cv.join(), + cv_flux_bnd.join())) - grad_cv_interior_pairs = [s_int_pair] - grad_cv_interior_pairs.extend(s_part_pairs) + grad_cv_interior_pairs = interior_trace_pairs(discr, grad_cv) # Temperature gradient for conductive heat flux: [Ihme_2014]_ eqn (3b) # Capture the temperature for the interior faces for grad(T) calc @@ -213,10 +189,7 @@ def _t_grad_flux_bnd(btag, boundary_state): # Fluxes in-hand, compute the gradient of temperature and mpi exchange it grad_t = grad_operator(discr, state.temperature, t_flux_bnd) - delt_int_pair = interior_trace_pair(discr, grad_t) - delt_part_pairs = cross_rank_trace_pairs(discr, grad_t) - grad_t_interior_pairs = [delt_int_pair] - grad_t_interior_pairs.extend(delt_part_pairs) + grad_t_interior_pairs = interior_trace_pairs(discr, grad_t) # inviscid flux divergence-specific flux function for interior faces def finv_divergence_flux_interior(state_pair): @@ -259,7 +232,7 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): vol_term = ( viscous_flux(state=state, grad_cv=grad_cv, grad_t=grad_t) - inviscid_flux(state=state) - ).join() + ) bnd_term = ( _elbnd_flux( @@ -268,7 +241,7 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): - _elbnd_flux( discr, finv_divergence_flux_interior, finv_divergence_flux_boundary, interior_state_pairs, boundary_states) - ).join() + ) # NS RHS - return make_conserved(dim, q=div_operator(discr, vol_term, bnd_term)) + return div_operator(discr, vol_term, bnd_term) From c67473deb0c89ea0b2b8643ce9a34d87be940625 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 11 Dec 2021 15:19:55 -0600 Subject: [PATCH 418/873] Clean up a bit, revert join for grad_cv temporarily --- mirgecom/navierstokes.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 63a350653..6b8e6a7d7 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -72,7 +72,6 @@ from mirgecom.flux import ( gradient_flux_central ) -from mirgecom.fluid import make_conserved from mirgecom.operators import ( div_operator, grad_operator ) @@ -140,10 +139,11 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, tseed_interior_pairs) # Operator-independent boundary flux interface - def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, - interior_trace_pairs, boundary_states): + def _sum_element_boundary_fluxes(discr, compute_interior_flux, + compute_boundary_flux, interior_trace_pairs, + boundary_states): return (sum(compute_interior_flux(tpair) - for tpair in interior_trace_pairs) + for tpair in interior_trace_pairs) + sum(compute_boundary_flux(btag, boundary_states[btag]) for btag in boundary_states)) @@ -161,10 +161,13 @@ def _cv_grad_flux_bnd(btag, boundary_state): time=time, numerical_flux_func=gradient_numerical_flux_func ) - cv_flux_bnd = _elbnd_flux(discr, _grad_flux_interior, _cv_grad_flux_bnd, - cv_interior_pairs, boundary_states) + cv_flux_bnd = \ + _sum_element_boundary_fluxes(discr, _grad_flux_interior, _cv_grad_flux_bnd, + cv_interior_pairs, boundary_states) # [Bassi_1997]_ eqn 15 (s = grad_q) + # grad_cv = grad_operator(discr, state.cv, cv_flux_bnd) + from mirgecom.fluid import make_conserved grad_cv = make_conserved(state.dim, q=grad_operator(discr, state.cv.join(), cv_flux_bnd.join())) @@ -184,8 +187,9 @@ def _t_grad_flux_bnd(btag, boundary_state): discr, btag=btag, gas_model=gas_model, state_minus=boundary_state, time=time) - t_flux_bnd = _elbnd_flux(discr, _grad_flux_interior, _t_grad_flux_bnd, - t_interior_pairs, boundary_states) + t_flux_bnd = \ + _sum_element_boundary_fluxes(discr, _grad_flux_interior, _t_grad_flux_bnd, + t_interior_pairs, boundary_states) # Fluxes in-hand, compute the gradient of temperature and mpi exchange it grad_t = grad_operator(discr, state.temperature, t_flux_bnd) @@ -203,7 +207,7 @@ def finv_divergence_flux_boundary(btag, boundary_state): discr, btag=btag, gas_model=gas_model, state_minus=boundary_state, time=time, numerical_flux_func=inviscid_numerical_flux_func) - # glob the inputs together in a tuple to use the _elbnd_flux wrapper + # glob viscous flux inputs for use by the _sum_element_boundary_fluxes wrapper viscous_states_int_bnd = [ (state_pair, grad_cv_pair, grad_t_pair) for state_pair, grad_cv_pair, grad_t_pair in @@ -235,10 +239,10 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): ) bnd_term = ( - _elbnd_flux( + _sum_element_boundary_fluxes( discr, fvisc_divergence_flux_interior, fvisc_divergence_flux_boundary, viscous_states_int_bnd, boundary_states) - - _elbnd_flux( + - _sum_element_boundary_fluxes( discr, finv_divergence_flux_interior, finv_divergence_flux_boundary, interior_state_pairs, boundary_states) ) From a11fd4c251e4f94b01dca9b6554f7b669f7c77d8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 11 Dec 2021 15:50:11 -0600 Subject: [PATCH 419/873] Dont pass CV for temperature --- mirgecom/navierstokes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 6b8e6a7d7..360dfe09f 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -132,7 +132,7 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, cv_interior_pairs = interior_trace_pairs(discr, state.cv) tseed_interior_pairs = \ - interior_trace_pairs(discr, state.cv) if state.is_mixture else None + interior_trace_pairs(discr, state.temperature) if state.is_mixture else None from mirgecom.gas_model import make_fluid_state_trace_pairs interior_state_pairs = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, From b9e714a01e2a0edae0b3753e83ea392282eee0b9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 13:45:49 -0600 Subject: [PATCH 420/873] Purge join from tests --- mirgecom/filter.py | 8 +++++++- test/test_filter.py | 5 +++-- test/test_fluid.py | 13 +++++-------- test/test_lazy.py | 18 ++++++------------ test/test_operators.py | 29 +++++++++++------------------ test/test_restart.py | 2 +- test/test_viscous.py | 17 +++++++++-------- 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/mirgecom/filter.py b/mirgecom/filter.py index 2737970b9..1b31a199a 100644 --- a/mirgecom/filter.py +++ b/mirgecom/filter.py @@ -201,7 +201,13 @@ def filter_modally(dcoll, dd, cutoff, mode_resp_func, field): dd_modal = dof_desc.DD_VOLUME_MODAL discr = dcoll.discr_from_dd(dd) - assert isinstance(field, DOFArray) + from arraycontext import map_array_container + from functools import partial + if not isinstance(field, DOFArray): + return map_array_container( + partial(filter_modally, dcoll, dd, cutoff, mode_resp_func), field + ) + actx = field.array_context modal_map = dcoll.connection_from_dds(dd, dd_modal) diff --git a/test/test_filter.py b/test/test_filter.py index 85814fb9c..2bbee78f5 100644 --- a/test/test_filter.py +++ b/test/test_filter.py @@ -186,13 +186,14 @@ def test_filter_function(actx_factory, dim, order, do_viz=False): # the filter unharmed. from mirgecom.initializers import Uniform initr = Uniform(dim=dim) - uniform_soln = initr(t=0, x_vec=nodes).join() + uniform_soln = initr(t=0, x_vec=nodes) from mirgecom.filter import filter_modally filtered_soln = filter_modally(discr, "vol", cutoff, frfunc, uniform_soln) soln_resid = uniform_soln - filtered_soln - max_errors = [actx.to_numpy(discr.norm(v, np.inf)) for v in soln_resid] + from mirgecom.simutil import componentwise_norms + max_errors = componentwise_norms(discr, soln_resid, np.inf) tol = 1e-14 diff --git a/test/test_fluid.py b/test/test_fluid.py index 9cac5d7aa..4def2ff25 100644 --- a/test/test_fluid.py +++ b/test/test_fluid.py @@ -77,8 +77,7 @@ def test_velocity_gradient_sanity(actx_factory, dim, mass_exp, vel_fac): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) from grudge.op import local_grad - grad_cv = make_conserved(dim, - q=local_grad(discr, cv.join())) + grad_cv = local_grad(discr, cv) grad_v = velocity_gradient(discr, cv, grad_cv) @@ -123,8 +122,7 @@ def test_velocity_gradient_eoc(actx_factory, dim): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) from grudge.op import local_grad - grad_cv = make_conserved(dim, - q=local_grad(discr, cv.join())) + grad_cv = local_grad(discr, cv) grad_v = velocity_gradient(discr, cv, grad_cv) def exact_grad_row(xdata, gdim, dim): @@ -178,8 +176,7 @@ def test_velocity_gradient_structure(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) from grudge.op import local_grad - grad_cv = make_conserved(dim, - q=local_grad(discr, cv.join())) + grad_cv = local_grad(discr, cv) grad_v = velocity_gradient(discr, cv, grad_cv) tol = 1e-11 @@ -233,8 +230,8 @@ def test_species_mass_gradient(actx_factory, dim): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom, species_mass=species_mass) from grudge.op import local_grad - grad_cv = make_conserved(dim, - q=local_grad(discr, cv.join())) + grad_cv = local_grad(discr, cv) + from mirgecom.fluid import species_mass_fraction_gradient grad_y = species_mass_fraction_gradient(discr, cv, grad_cv) diff --git a/test/test_lazy.py b/test/test_lazy.py index 75e645e0f..11ba007ff 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -22,7 +22,7 @@ import numpy as np from functools import partial -from pytools.obj_array import make_obj_array, obj_array_vectorize +from pytools.obj_array import make_obj_array, obj_array_vectorize # noqa import pyopencl as cl import pyopencl.tools as cl_tools import pyopencl.array as cla # noqa @@ -75,19 +75,13 @@ def get_discr(order): # Mimics math.isclose for state arrays def _isclose(discr, x, y, rel_tol=1e-9, abs_tol=0, return_operands=False): - def componentwise_norm(a): - from mirgecom.fluid import ConservedVars - if isinstance(a, ConservedVars): - return componentwise_norm(a.join()) - from arraycontext import get_container_context_recursively - actx = get_container_context_recursively(a) - return obj_array_vectorize(lambda b: actx.to_numpy(discr.norm(b, np.inf)), a) - - lhs = componentwise_norm(x - y) + + from mirgecom.simutil import componentwise_norms + lhs = componentwise_norms(discr, x - y, np.inf) rhs = np.maximum( rel_tol * np.maximum( - componentwise_norm(x), - componentwise_norm(y)), + componentwise_norms(discr, x, np.inf), + componentwise_norms(discr, y, np.inf)), abs_tol) is_close = np.all(lhs <= rhs) diff --git a/test/test_operators.py b/test/test_operators.py index d60a8ec80..761d32f97 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -217,13 +217,12 @@ def sym_eval(expr, x_vec): test_data = test_func(nodes) exact_grad = grad_test_func(nodes) - def inf_norm(x): - return actx.to_numpy(discr.norm(x, np.inf)) + from mirgecom.simutil import componentwise_norms + from arraycontext import flatten + + err_scale = max(flatten(componentwise_norms(discr, exact_grad, np.inf), + actx)) - if isinstance(test_data, ConservedVars): - err_scale = inf_norm(exact_grad.join()) - else: - err_scale = inf_norm(exact_grad) if err_scale <= 1e-16: err_scale = 1 @@ -236,18 +235,12 @@ def inf_norm(x): test_data_int_tpair, boundaries) from mirgecom.operators import grad_operator - if isinstance(test_data, ConservedVars): - test_grad = make_conserved( - dim=dim, q=grad_operator(discr, test_data.join(), - test_data_flux_bnd.join()) - ) - grad_err = inf_norm((test_grad - exact_grad).join())/err_scale - else: - test_grad = grad_operator(discr, test_data, test_data_flux_bnd) - grad_err = inf_norm(test_grad - exact_grad)/err_scale - - print(f"{test_grad=}") - eoc.add_data_point(actx.to_numpy(h_max), grad_err) + test_grad = grad_operator(discr, test_data, test_data_flux_bnd) + grad_err = \ + max(flatten(componentwise_norms(discr, test_grad - exact_grad, np.inf), + actx)) / err_scale + + eoc.add_data_point(actx.to_numpy(h_max), actx.to_numpy(grad_err)) assert ( eoc.order_estimate() >= order - 0.5 diff --git a/test/test_restart.py b/test/test_restart.py index 2b6b6dcdb..71ec62a8d 100644 --- a/test/test_restart.py +++ b/test/test_restart.py @@ -76,4 +76,4 @@ def test_restart_cv(actx_factory, nspecies): restart_data = read_restart_data(actx, rst_filename) resid = test_state - restart_data["state"] - assert actx.to_numpy(discr.norm(resid.join(), np.inf)) == 0 + assert actx.to_numpy(discr.norm(resid, np.inf)) == 0 diff --git a/test/test_viscous.py b/test/test_viscous.py index d30e37cdf..926c57553 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -83,7 +83,7 @@ def test_viscous_stress_tensor(actx_factory, transport_model): mom = mass * velocity cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) - grad_cv = make_conserved(dim, q=op.local_grad(discr, cv.join())) + grad_cv = op.local_grad(discr, cv) if transport_model: tv_model = SimpleTransport(bulk_viscosity=1.0, viscosity=0.5) @@ -203,8 +203,7 @@ def inf_norm(x): cv_flux_bnd = _elbnd_flux(discr, cv_flux_interior, cv_flux_boundary, cv_int_tpair, boundaries) from mirgecom.operators import grad_operator - grad_cv = make_conserved(dim, q=grad_operator(discr, cv.join(), - cv_flux_bnd.join())) + grad_cv = grad_operator(discr, cv, cv_flux_bnd) xp_grad_cv = initializer.exact_grad(x_vec=nodes, eos=eos, cv_exact=cv) xp_grad_v = 1/cv.mass * xp_grad_cv.momentum @@ -244,9 +243,11 @@ def inf_norm(x): assert inf_norm(heat_flux - xp_heat_flux) < 2e-8 # verify diffusive mass flux is zilch (no scalar components) - from mirgecom.viscous import diffusive_flux - j = diffusive_flux(discr, eos, cv, grad_cv) - assert len(j) == 0 + # Don't call for non-multi CV + if cv.has_multispecies: + from mirgecom.viscous import diffusive_flux + j = diffusive_flux(discr, eos, cv, grad_cv) + assert len(j) == 0 xp_e_flux = np.dot(xp_tau, cv.velocity) - xp_heat_flux xp_mom_flux = xp_tau @@ -319,7 +320,7 @@ def test_species_diffusive_flux(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom, species_mass=species_mass) - grad_cv = make_conserved(dim, q=op.local_grad(discr, cv.join())) + grad_cv = op.local_grad(discr, cv) mu_b = 1.0 mu = 0.5 @@ -392,7 +393,7 @@ def test_diffusive_heat_flux(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom, species_mass=species_mass) - grad_cv = make_conserved(dim, q=op.local_grad(discr, cv.join())) + grad_cv = op.local_grad(discr, cv) mu_b = 1.0 mu = 0.5 From d052e57b02d776e7cbeb9abb6bf411907cff4037 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 13:53:16 -0600 Subject: [PATCH 421/873] Banish join from operators --- mirgecom/euler.py | 4 +--- mirgecom/navierstokes.py | 5 +---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 419cfe8fd..f9d3edb55 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -59,7 +59,6 @@ inviscid_flux_rusanov ) from grudge.trace_pair import interior_trace_pairs -from mirgecom.fluid import make_conserved from mirgecom.operators import div_operator @@ -138,8 +137,7 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, for state_pair in interior_states) ) - q = -div_operator(discr, inviscid_flux_vol.join(), inviscid_flux_bnd.join()) - return make_conserved(discr.dim, q=q) + return -div_operator(discr, inviscid_flux_vol, inviscid_flux_bnd) # By default, run unitless diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 360dfe09f..686968c55 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -166,10 +166,7 @@ def _cv_grad_flux_bnd(btag, boundary_state): cv_interior_pairs, boundary_states) # [Bassi_1997]_ eqn 15 (s = grad_q) - # grad_cv = grad_operator(discr, state.cv, cv_flux_bnd) - from mirgecom.fluid import make_conserved - grad_cv = make_conserved(state.dim, q=grad_operator(discr, state.cv.join(), - cv_flux_bnd.join())) + grad_cv = grad_operator(discr, state.cv, cv_flux_bnd) grad_cv_interior_pairs = interior_trace_pairs(discr, grad_cv) From 0e0bb1b285ab238ccfb6e337ec7dce68ddbf2ecd Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 13:56:48 -0600 Subject: [PATCH 422/873] Overintegration support for inviscid operators --- mirgecom/boundary.py | 2 +- mirgecom/euler.py | 96 +++++++++++++++++++++++++++++++++++-------- mirgecom/gas_model.py | 18 +++++--- mirgecom/inviscid.py | 4 +- mirgecom/operators.py | 47 ++++++++++++++------- 5 files changed, 128 insertions(+), 39 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 6541e7d4b..445eb5359 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -170,7 +170,7 @@ def _boundary_quantity(self, discr, btag, quantity, **kwargs): if "local" in kwargs: if kwargs["local"]: return quantity - return discr.project(btag, "all_faces", quantity) + return discr.project(btag, btag.with_dtag("all_faces"), quantity) def _boundary_state_pair(self, discr, btag, gas_model, state_minus, **kwargs): return TracePair(btag, diff --git a/mirgecom/euler.py b/mirgecom/euler.py index f9d3edb55..09b95c248 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -52,18 +52,28 @@ THE SOFTWARE. """ -import numpy as np # noqa from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux, inviscid_flux_rusanov ) -from grudge.trace_pair import interior_trace_pairs from mirgecom.operators import div_operator +from mirgecom.gas_model import ( + project_fluid_state, + make_fluid_state_trace_pairs +) +from grudge.trace_pair import ( + TracePair, + interior_trace_pairs +) +from grudge.dof_desc import DOFDesc, as_dofdesc + +import grudge.op as op def euler_operator(discr, state, gas_model, boundaries, time=0.0, - inviscid_numerical_flux_func=inviscid_flux_rusanov): + inviscid_numerical_flux_func=inviscid_flux_rusanov, + quadrature_tag=None): r"""Compute RHS of the Euler flow equations. Returns @@ -96,19 +106,50 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, Physical gas model including equation of state, transport, and kinetic properties as required by fluid state + quadrature_tag + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + The default value is *None*. + Returns ------- - numpy.ndarray + :class:`mirgecom.fluid.ConservedVars` Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ - from mirgecom.gas_model import project_fluid_state - boundary_states = {btag: - project_fluid_state(discr, btag, state, gas_model) - for btag in boundaries} - - cv_interior_pairs = interior_trace_pairs(discr, state.cv) + dd_base = as_dofdesc("vol") + dd_vol = DOFDesc("vol", quadrature_tag) + dd_faces = DOFDesc("all_faces", quadrature_tag) + + def interp_to_surf_quad(utpair): + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + return TracePair( + local_dd_quad, + interior=op.project(discr, local_dd, local_dd_quad, utpair.int), + exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + ) + + + boundary_states = { + btag: project_fluid_state( + discr, + dd_base, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + state, + gas_model + ) for btag in boundaries + } + + cv_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.cv) + ] tseed_interior_pairs = None if state.is_mixture > 0: @@ -116,18 +157,33 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, # mixture pressure (used in the inviscid flux calculations) depends on # temperature and we need to seed the temperature calculation for the # (+) part of the partition boundary with the remote temperature data. - tseed_interior_pairs = interior_trace_pairs(discr, state.temperature) - - from mirgecom.gas_model import make_fluid_state_trace_pairs - interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, + tseed_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.temperature) + ] + + interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, + gas_model, tseed_interior_pairs) - inviscid_flux_vol = inviscid_flux(state) + # Interpolate the fluid state to the volume quadrature grid + # (conserved vars and derived vars if applicable) + state_quad = project_fluid_state(discr, dd_base, dd_vol, state, gas_model) + + inviscid_flux_vol = inviscid_flux(state_quad) inviscid_flux_bnd = ( # Domain boundaries sum(boundaries[btag].inviscid_divergence_flux( - discr, btag, gas_model, state_minus=boundary_states[btag], time=time, + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model, + state_minus=boundary_states[btag], + time=time, numerical_flux_func=inviscid_numerical_flux_func) for btag in boundaries) @@ -137,7 +193,13 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, for state_pair in interior_states) ) - return -div_operator(discr, inviscid_flux_vol, inviscid_flux_bnd) + return -div_operator( + discr, + dd_vol, + dd_faces, + inviscid_flux_vol, + inviscid_flux_bnd + ) # By default, run unitless diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index d04d7cded..7e90e767f 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -272,7 +272,7 @@ def make_fluid_state(cv, gas_model, temperature_seed=None): return FluidState(cv=cv, dv=dv) -def project_fluid_state(discr, btag, state, gas_model): +def project_fluid_state(discr, src, tgt, state, gas_model): """Project a fluid state onto a boundary consistent with the gas model. If required by the gas model, (e.g. gas is a mixture), this routine will @@ -284,9 +284,17 @@ def project_fluid_state(discr, btag, state, gas_model): A discretization collection encapsulating the DG elements - btag: + src: - A boundary tag indicating the boundary to which to project the state + A :class:`~grudge.dof_desc.DOFDesc`, or a value convertible to one + indicating where the state is currently defined + (e.g. "vol" or "all_faces") + + tgt: + + A :class:`~grudge.dof_desc.DOFDesc`, or a value convertible to one + indicating where to interpolate/project the state + (e.g. "all_faces" or a boundary tag *btag*) state: :class:`~mirgecom.gas_model.FluidState` @@ -302,10 +310,10 @@ def project_fluid_state(discr, btag, state, gas_model): Thermally consistent fluid state """ - cv_sd = discr.project("vol", btag, state.cv) + cv_sd = discr.project(src, tgt, state.cv) temperature_seed = None if state.is_mixture > 0: - temperature_seed = discr.project("vol", btag, state.dv.temperature) + temperature_seed = discr.project(src, tgt, state.dv.temperature) return make_fluid_state(cv=cv_sd, gas_model=gas_model, temperature_seed=temperature_seed) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index e5e7dd104..5d7290985 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -143,7 +143,9 @@ def inviscid_facial_flux(discr, gas_model, state_pair, from arraycontext import thaw normal = thaw(discr.normal(state_pair.dd), state_pair.int.array_context) num_flux = numerical_flux_func(normal, gas_model, state_pair) - return num_flux if local else discr.project(state_pair.dd, "all_faces", num_flux) + dd = state_pair.dd + dd_allfaces = dd.with_dtag("all_faces") + return num_flux if local else discr.project(dd, dd_allfaces, num_flux) def get_inviscid_timestep(discr, state): diff --git a/mirgecom/operators.py b/mirgecom/operators.py index 72d9515c1..0a151156b 100644 --- a/mirgecom/operators.py +++ b/mirgecom/operators.py @@ -28,45 +28,62 @@ THE SOFTWARE. """ +import grudge.op as op -def grad_operator(discr, u, flux): + +def grad_operator(discr, dd_vol, dd_faces, volume_fluxes, boundary_fluxes): r"""Compute a DG gradient for the input *u* with flux given by *flux*. Parameters ---------- discr: grudge.eager.EagerDGDiscretization the discretization to use - u: meshmode.dof_array.DOFArray or numpy.ndarray - the DOF array (or object array of DOF arrays) to which the operator should be - applied - flux: numpy.ndarray + dd_vol: grudge.dof_desc.DOFDesc + the degree-of-freedom tag associated with the volume discrezation. + This determines the type of quadrature to be used. + dd_faces: grudge.dof_desc.DOFDesc + the degree-of-freedom tag associated with the surface discrezation. + This determines the type of quadrature to be used. + volume_fluxes: :class:`mirgecom.fluid.ConservedVars` + the vector-valued function for which divergence is to be calculated + boundary_fluxes: :class:`mirgecom.fluid.ConservedVars` the boundary fluxes across the faces of the element Returns ------- meshmode.dof_array.DOFArray or numpy.ndarray the dg gradient operator applied to *u* """ - from grudge.op import weak_local_grad - return -discr.inverse_mass(weak_local_grad(discr, u, nested=False) - - discr.face_mass(flux)) + return -op.inverse_mass( + discr, + op.weak_local_grad(discr, dd_vol, volume_fluxes) + - op.face_mass(discr, dd_faces, boundary_fluxes) + ) -def div_operator(discr, u, flux): +def div_operator(discr, dd_vol, dd_faces, volume_fluxes, boundary_fluxes): r"""Compute a DG divergence of vector-valued function *u* with flux given by *flux*. Parameters ---------- discr: grudge.eager.EagerDGDiscretization the discretization to use - u: numpy.ndarray + dd_vol: grudge.dof_desc.DOFDesc + the degree-of-freedom tag associated with the volume discrezation. + This determines the type of quadrature to be used. + dd_faces: grudge.dof_desc.DOFDesc + the degree-of-freedom tag associated with the surface discrezation. + This determines the type of quadrature to be used. + volume_fluxes: :class:`mirgecom.fluid.ConservedVars` the vector-valued function for which divergence is to be calculated - flux: numpy.ndarray + boundary_fluxes: :class:`mirgecom.fluid.ConservedVars` the boundary fluxes across the faces of the element Returns ------- - meshmode.dof_array.DOFArray or numpy.ndarray + :class:`mirgecom.fluid.ConservedVars` the dg divergence operator applied to vector-valued function *u*. """ - from grudge.op import weak_local_div - return -discr.inverse_mass(weak_local_div(discr, u) - - discr.face_mass(flux)) + return -op.inverse_mass( + discr, + op.weak_local_div(discr, dd_vol, volume_fluxes) + - op.face_mass(discr, dd_faces, boundary_fluxes) + ) From aaa42b9b9b6b34d4a2cc6c2b42e45f2e1ff715f7 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 13:57:05 -0600 Subject: [PATCH 423/873] Add overintegration option to pulse experiment --- examples/pulse-mpi.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index a73b03066..29480a5cb 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -81,6 +81,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, use_leap=False, use_profiling=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" @@ -153,12 +154,27 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + order = 1 discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + vis_timer = None if logmgr: @@ -299,7 +315,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) return euler_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -332,6 +350,8 @@ def my_rhs(t, state): import argparse casename = "pulse" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -358,7 +378,8 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + main(use_logmgr=args.log, use_overintegration=args.overintegration, + use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker From 3127e2855e1bf82f77df19fc596fb8916445b1ac Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 14:18:21 -0600 Subject: [PATCH 424/873] Remove join from bc tests --- test/test_bc.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/test/test_bc.py b/test/test_bc.py index a4b6ce5ea..eacaae252 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -314,10 +314,8 @@ def scalar_flux_interior(int_tpair): from mirgecom.operators import grad_operator grad_cv_minus = \ discr.project("vol", BTAG_ALL, - make_conserved(dim, - q=grad_operator(discr, - uniform_state.cv.join(), - cv_flux_bnd.join()))) + grad_operator(discr, uniform_state.cv, cv_flux_bnd)) + grad_t_minus = discr.project("vol", BTAG_ALL, grad_operator(discr, temper, t_flux_bnd)) @@ -448,9 +446,7 @@ def scalar_flux_interior(int_tpair): print(f"{i_flux_bnd=}") from mirgecom.operators import grad_operator - grad_cv = make_conserved( - dim, q=grad_operator(discr, cv.join(), cv_flux_bnd.join()) - ) + grad_cv = grad_operator(discr, cv, cv_flux_bnd) grad_t = grad_operator(discr, temper, t_flux_bnd) grad_cv_minus = discr.project("vol", BTAG_ALL, grad_cv) grad_t_minus = discr.project("vol", BTAG_ALL, grad_t) From a5476c2b565b3b12f550ddcc6143f2fc34af29b4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 15:01:01 -0600 Subject: [PATCH 425/873] Update tests to subvert discr.norm of emtpy array --- mirgecom/simutil.py | 16 +++++++++++++++- test/test_euler.py | 13 ++++++------- test/test_restart.py | 3 ++- test/test_viscous.py | 2 +- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 7696278d3..3eae215a2 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -13,6 +13,7 @@ .. autofunction:: compare_fluid_solutions .. autofunction:: componentwise_norms +.. autofunction:: componentwise_max_error .. autofunction:: check_naninf_local .. autofunction:: check_range_local @@ -313,8 +314,21 @@ def componentwise_norms(discr, fields, order=np.inf): if not isinstance(fields, DOFArray): return map_array_container( partial(componentwise_norms, discr, order=order), fields) + if len(fields) > 0: + return discr.norm(fields, order) + else: + return 0 + + +def max_component_norm(discr, fields, order=np.inf): + """Return the *order*-norm for each component of *fields*. - return discr.norm(fields, order) + .. note:: + This is a collective routine and must be called by all MPI ranks. + """ + actx = fields.array_context + return max(actx.to_numpy(flatten( + componentwise_norms(discr, fields, order), actx))) def generate_and_distribute_mesh(comm, generate_mesh): diff --git a/test/test_euler.py b/test/test_euler.py index c0a22d978..f93cbe70c 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -53,6 +53,7 @@ pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) +from mirgecom.simutil import max_component_norm from grudge.shortcuts import make_visualizer from mirgecom.inviscid import get_inviscid_timestep @@ -234,7 +235,8 @@ def test_vortex_rhs(actx_factory, order): discr, eos=IdealSingleGas(), boundaries=boundaries, cv=vortex_soln, time=0.0) - err_max = actx.to_numpy(discr.norm(inviscid_rhs, np.inf)) + err_max = max_component_norm(discr, inviscid_rhs, np.inf) + eoc_rec.add_data_point(1.0 / nel_1d, err_max) logger.info( @@ -293,8 +295,7 @@ def test_lump_rhs(actx_factory, dim, order): ) expected_rhs = lump.exact_rhs(discr, cv=lump_soln, time=0) - err_max = actx.to_numpy( - discr.norm((inviscid_rhs-expected_rhs), np.inf)) + err_max = max_component_norm(discr, inviscid_rhs-expected_rhs, np.inf) if err_max > maxxerr: maxxerr = err_max @@ -492,9 +493,7 @@ def rhs(t, q): write_soln(state=cv) cv = rk4_step(cv, t, dt, rhs) - cv = make_conserved( - dim, q=filter_modally(discr, "vol", cutoff, frfunc, cv) - ) + cv = filter_modally(discr, "vol", cutoff, frfunc, cv) t += dt istep += 1 @@ -506,7 +505,7 @@ def rhs(t, q): maxerr = max(write_soln(cv, False)) else: expected_result = initializer(nodes, time=t) - maxerr = actx.to_numpy(discr.norm(cv - expected_result, np.inf)) + maxerr = max_component_norm(discr, cv-expected_result, np.inf) logger.info(f"Max Error: {maxerr}") if maxerr > exittol: diff --git a/test/test_restart.py b/test/test_restart.py index 71ec62a8d..55894c538 100644 --- a/test/test_restart.py +++ b/test/test_restart.py @@ -76,4 +76,5 @@ def test_restart_cv(actx_factory, nspecies): restart_data = read_restart_data(actx, rst_filename) resid = test_state - restart_data["state"] - assert actx.to_numpy(discr.norm(resid, np.inf)) == 0 + from mirgecom.simutil import max_component_norm + assert max_component_norm(discr, resid, np.inf) == 0 diff --git a/test/test_viscous.py b/test/test_viscous.py index 926c57553..99d776a0f 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -244,7 +244,7 @@ def inf_norm(x): # verify diffusive mass flux is zilch (no scalar components) # Don't call for non-multi CV - if cv.has_multispecies: + if cv.nspecies > 0: from mirgecom.viscous import diffusive_flux j = diffusive_flux(discr, eos, cv, grad_cv) assert len(j) == 0 From 35ff60fdbcb3f49a62574eeec68cf22e89c6aa1a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 15:12:11 -0600 Subject: [PATCH 426/873] Correct/add docstring for max_component_norm --- mirgecom/simutil.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 3eae215a2..89c593230 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -13,7 +13,7 @@ .. autofunction:: compare_fluid_solutions .. autofunction:: componentwise_norms -.. autofunction:: componentwise_max_error +.. autofunction:: max_component_norm .. autofunction:: check_naninf_local .. autofunction:: check_range_local @@ -321,7 +321,7 @@ def componentwise_norms(discr, fields, order=np.inf): def max_component_norm(discr, fields, order=np.inf): - """Return the *order*-norm for each component of *fields*. + """Return the max *order*-norm over the components of *fields*. .. note:: This is a collective routine and must be called by all MPI ranks. From 49a5b60ac1b3ca3c52700424be625e38f48e11b7 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 15:58:40 -0600 Subject: [PATCH 427/873] Rewrite AV operator for container and overintegration support --- mirgecom/artificial_viscosity.py | 210 +++++++++++++++++-------------- mirgecom/boundary.py | 24 ++-- 2 files changed, 129 insertions(+), 105 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index fce8e5216..c4de7ac2b 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -97,62 +97,26 @@ import numpy as np from pytools import memoize_in, keyed_memoize_in -from pytools.obj_array import obj_array_vectorize -from meshmode.dof_array import thaw, DOFArray -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.eager import interior_trace_pair, cross_rank_trace_pairs -from grudge.symbolic.primitives import TracePair -from grudge.dof_desc import DD_VOLUME_MODAL, DD_VOLUME - - -# FIXME: Remove when get_array_container_context is added to meshmode -def _get_actx(obj): - if isinstance(obj, TracePair): - return _get_actx(obj.int) - if isinstance(obj, np.ndarray): - return _get_actx(obj[0]) - elif isinstance(obj, DOFArray): - return obj.array_context - else: - raise ValueError("Unknown type; can't retrieve array context.") - - -# Tweak the behavior of np.outer to return a lower-dimensional object if either/both -# of the arguments are scalars (np.outer always returns a matrix) -def _outer(a, b): - if isinstance(a, np.ndarray) and isinstance(b, np.ndarray): - return np.outer(a, b) - else: - return a*b - - -def _facial_flux_q(discr, q_tpair): - """Compute facial flux for each scalar component of Q.""" - actx = _get_actx(q_tpair) - - normal = thaw(actx, discr.normal(q_tpair.dd)) - - # This uses a central scalar flux along nhat: - # flux = 1/2 * (Q- + Q+) * nhat - flux_out = _outer(q_tpair.avg, normal) - - return discr.project(q_tpair.dd, "all_faces", flux_out) +from meshmode.dof_array import thaw, DOFArray -def _facial_flux_r(discr, r_tpair): - """Compute facial flux for vector component of grad(Q).""" - actx = _get_actx(r_tpair) - - normal = thaw(actx, discr.normal(r_tpair.dd)) +from mirgecom.flux import gradient_flux_central, divergence_flux_central - # This uses a central vector flux along nhat: - # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat - flux_out = r_tpair.avg @ normal +from grudge.trace_pair import ( + TracePair, + interior_trace_pairs +) +from grudge.dof_desc import ( + DOFDesc, + as_dofdesc, + DD_VOLUME_MODAL, + DD_VOLUME +) - return discr.project(r_tpair.dd, "all_faces", flux_out) +import grudge.op as op -def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): +def av_operator(discr, boundaries, cv, alpha, boundary_kwargs=None, **kwargs): r"""Compute the artificial viscosity right-hand-side. Computes the the right-hand-side term for artificial viscosity. @@ -163,16 +127,8 @@ def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): Parameters ---------- - q: :class:`~meshmode.dof_array.DOFArray` or :class:`~numpy.ndarray` - - Single :class:`~meshmode.dof_array.DOFArray` for a scalar or an object array - (:class:`~numpy.ndarray`) for a vector of - :class:`~meshmode.dof_array.DOFArray` on which to operate. - - When used with fluid solvers, *q* is expected to be the fluid state array - of the canonical conserved variables (mass, energy, momentum) - for the fluid along with a vector of species masses for multi-component - fluids. + cv: :class:`mirgecom.fluid.ConservedVars` + Fluid conserved state object with the conserved variables. boundaries: float @@ -182,54 +138,124 @@ def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): The maximum artificial viscosity coefficient to be applied + quadrature_tag + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + The default value is *None*. + boundary_kwargs: :class:`dict` dictionary of extra arguments to pass through to the boundary conditions Returns ------- - numpy.ndarray + :class:`mirgecom.fluid.ConservedVars` The artificial viscosity operator applied to *q*. """ if boundary_kwargs is None: boundary_kwargs = dict() - # Get smoothness indicator based on first component - indicator_field = q[0] if isinstance(q, np.ndarray) else q - alpha_ind = -alpha*smoothness_indicator(discr, indicator_field, **kwargs) - - # R=Grad(Q) volume part - if isinstance(q, np.ndarray): - grad_q_vol = np.stack(obj_array_vectorize(discr.weak_grad, q), axis=0) - else: - grad_q_vol = discr.weak_grad(q) - - # Total flux of fluid soln Q across element boundaries - q_bnd_flux = (_facial_flux_q(discr, q_tpair=interior_trace_pair(discr, q)) - + sum(_facial_flux_q(discr, q_tpair=pb_tpair) - for pb_tpair in cross_rank_trace_pairs(discr, q))) - q_bnd_flux2 = sum(bnd.soln_gradient_flux(discr, btag, soln=q, **boundary_kwargs) - for btag, bnd in boundaries.items()) - # if isinstance(q, np.ndarray): - # q_bnd_flux2 = np.stack(q_bnd_flux2) - q_bnd_flux = q_bnd_flux + q_bnd_flux2 - - # Compute R - r = discr.inverse_mass( - alpha_ind*(grad_q_vol - discr.face_mass(q_bnd_flux)) + actx = cv.array_context + quadrature_tag = kwargs.get("quadrature_tag", None) + dd_vol = DOFDesc("vol", quadrature_tag) + dd_faces = DOFDesc("all_faces", quadrature_tag) + + def interp_to_vol_quad(u): + return op.project(discr, "vol", dd_vol, u) + + + def interp_to_surf_quad(utpair): + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + return TracePair( + local_dd_quad, + interior=op.project(discr, local_dd, local_dd_quad, utpair.int), + exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + ) + + + # Get smoothness indicator based on mass component + kappa = kwargs.get("kappa", 1.0) + s0 = kwargs.get("s0", -6.0) + indicator = smoothness_indicator(discr, cv.mass, kappa=kappa, s0=s0) + + def central_flux(utpair): + dd = utpair.dd + normal = thaw(actx, discr.normal(dd)) + return op.project( + discr, + dd, + dd.with_dtag("all_faces"), + # This uses a central scalar flux along nhat: + # flux = 1/2 * (Q- + Q+) * nhat + gradient_flux_central(utpair, normal) + ) + + + cv_bnd = ( + # Rank-local and cross-rank (across parallel partitions) contributions + + sum( + central_flux(interp_to_surf_quad(tpair)) + for tpair in interior_trace_pairs(discr, cv) + ) + # Contributions from boundary fluxes + + sum( + boundaries[btag].soln_gradient_flux( + discr, + btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), + cv=cv, + **boundary_kwargs + ) for btag in boundaries + ) + ) + + # Compute R = grad(Q) + r = op.inverse_mass( + discr, + -alpha * indicator * ( + op.weak_local_grad(discr, dd_vol, interp_to_vol_quad(cv)) + - op.face_mass(discr, dd_faces, cv_bnd) + ) ) - # RHS_av = div(R) volume part - div_r_vol = discr.weak_div(r) + + def central_flux_div(utpair): + dd = utpair.dd + normal = thaw(actx, discr.normal(dd)) + return op.project( + discr, + dd, + dd.with_dtag("all_faces"), + # This uses a central vector flux along nhat: + # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat + divergence_flux_central(utpair, normal) + ) + + # Total flux of grad(Q) across element boundaries - r_bnd_flux = (_facial_flux_r(discr, r_tpair=interior_trace_pair(discr, r)) - + sum(_facial_flux_r(discr, r_tpair=pb_tpair) - for pb_tpair in cross_rank_trace_pairs(discr, r)) - + sum(bnd.av_flux(discr, btag, diffusion=r, **boundary_kwargs) - for btag, bnd in boundaries.items())) + r_bnd = ( + # Rank-local and cross-rank (across parallel partitions) contributions + + sum( + central_flux_div(interp_to_surf_quad(tpair)) + for tpair in interior_trace_pairs(discr, r) + ) + # Contributions from boundary fluxes + + sum( + boundaries[btag].av_flux( + discr, + btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), + diffusion=r, + **boundary_kwargs + ) for btag in boundaries + ) + ) # Return the AV RHS term - return discr.inverse_mass(-div_r_vol + discr.face_mass(r_bnd_flux)) + return op.inverse_mass( + discr, + -op.weak_local_div(discr, dd_vol, interp_to_vol_quad(r)) + + op.face_mass(discr, dd_faces, r_bnd) + ) def artificial_viscosity(discr, t, eos, boundaries, q, alpha, **kwargs): diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 445eb5359..fc31436df 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -311,23 +311,22 @@ def viscous_divergence_flux(self, discr, btag, gas_model, state_minus, def _identical_grad_av(self, grad_av_minus, **kwargs): return grad_av_minus - def soln_gradient_flux(self, discr, btag, soln, gas_model, **kwargs): + def soln_gradient_flux(self, discr, btag, cv, gas_model, **kwargs): """Get the flux for solution gradient with AV API.""" - fluid_state = make_fluid_state(make_conserved(discr.dim, q=soln), - gas_model=gas_model) - fluid_state_minus = project_fluid_state(discr=discr, btag=btag, + fluid_state = make_fluid_state(cv, gas_model=gas_model) + fluid_state_minus = project_fluid_state(discr=discr, + src="vol", + tgt=btag, gas_model=gas_model, state=fluid_state) - grad_flux = self.cv_gradient_flux(discr=discr, btag=btag, - gas_model=gas_model, - state_minus=fluid_state_minus, - **kwargs) - return grad_flux.join() + return self.cv_gradient_flux(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=fluid_state_minus, + **kwargs) def av_flux(self, discr, btag, diffusion, **kwargs): """Get the diffusive fluxes for the AV operator API.""" - grad_av = make_conserved(discr.dim, q=diffusion) - grad_av_minus = discr.project("vol", btag, grad_av) + grad_av_minus = discr.project("vol", btag, diffusion) actx = grad_av_minus.mass[0].array_context nhat = thaw(discr.normal(btag), actx) grad_av_plus = self._bnd_grad_av_func( @@ -335,8 +334,7 @@ def av_flux(self, discr, btag, diffusion, **kwargs): bnd_grad_pair = TracePair(btag, interior=grad_av_minus, exterior=grad_av_plus) num_flux = self._av_div_num_flux_func(bnd_grad_pair, nhat) - flux = self._boundary_quantity(discr, btag, num_flux, **kwargs) - return flux.join() + return self._boundary_quantity(discr, btag, num_flux, **kwargs) # }}} From 106862ece5e4ace458e8bafa3f5514031be9ca44 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 15:58:53 -0600 Subject: [PATCH 428/873] Use containers in AV test --- test/test_av.py | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/test/test_av.py b/test/test_av.py index 962c32fdf..82ca99140 100644 --- a/test/test_av.py +++ b/test/test_av.py @@ -29,18 +29,25 @@ import numpy as np import pyopencl as cl import pytest + from meshmode.array_context import PyOpenCLArrayContext from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL + from mirgecom.artificial_viscosity import ( av_operator, smoothness_indicator ) +from mirgecom.fluid import make_conserved + from grudge.eager import EagerDGDiscretization + from pyopencl.tools import ( # noqa pytest_generate_tests_for_pyopencl as pytest_generate_tests, ) +from pytools.obj_array import make_obj_array + logger = logging.getLogger(__name__) @@ -176,12 +183,12 @@ def test_artificial_viscosity(ctx_factory, dim, order): zeros = discr.zeros(actx) class TestBoundary: - def soln_gradient_flux(self, disc, btag, soln, **kwargs): - soln_int = disc.project("vol", btag, soln) + def soln_gradient_flux(self, disc, btag, cv, **kwargs): + cv_int = disc.project("vol", btag, cv) from grudge.trace_pair import TracePair bnd_pair = TracePair(btag, - interior=soln_int, - exterior=soln_int) + interior=cv_int, + exterior=cv_int) nhat = thaw(actx, disc.normal(btag)) from mirgecom.flux import gradient_flux_central flux_weak = gradient_flux_central(bnd_pair, normal=nhat) @@ -202,18 +209,39 @@ def av_flux(self, disc, btag, diffusion, **kwargs): # Uniform field return 0 rhs soln = zeros + 1.0 - rhs = av_operator(discr, boundaries=boundaries, q=soln, alpha=1.0, s0=-np.inf) + cv = make_conserved( + dim, + mass=soln, + energy=soln, + momentum=make_obj_array([soln for _ in range(dim)]), + species_mass=make_obj_array([soln for _ in range(dim)]) + ) + rhs = av_operator(discr, boundaries=boundaries, cv=cv, alpha=1.0, s0=-np.inf) err = discr.norm(rhs, np.inf) assert err < tolerance # Linear field return 0 rhs soln = nodes[0] - rhs = av_operator(discr, boundaries=boundaries, q=soln, alpha=1.0, s0=-np.inf) + cv = make_conserved( + dim, + mass=soln, + energy=soln, + momentum=make_obj_array([soln for _ in range(dim)]), + species_mass=make_obj_array([soln for _ in range(dim)]) + ) + rhs = av_operator(discr, boundaries=boundaries, cv=cv, alpha=1.0, s0=-np.inf) err = discr.norm(rhs, np.inf) assert err < tolerance # Quadratic field return constant 2 soln = np.dot(nodes, nodes) - rhs = av_operator(discr, boundaries=boundaries, q=soln, alpha=1.0, s0=-np.inf) + cv = make_conserved( + dim, + mass=soln, + energy=soln, + momentum=make_obj_array([soln for _ in range(dim)]), + species_mass=make_obj_array([soln for _ in range(dim)]) + ) + rhs = av_operator(discr, boundaries=boundaries, cv=cv, alpha=1.0, s0=-np.inf) err = discr.norm(2.*dim-rhs, np.inf) assert err < tolerance From d66cc380e10973cd8842f8392b4232db5a9719ab Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 15:59:09 -0600 Subject: [PATCH 429/873] Add overintegration option for doublemach example --- examples/doublemach-mpi.py | 48 ++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index ec8ad9919..e22b4c1a5 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -130,8 +130,8 @@ def get_doublemach_mesh(): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + use_leap=False, use_profiling=False, use_overintegration=False, + casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -190,11 +190,27 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, local_mesh, global_nelements = generate_and_distribute_mesh(comm, gen_grid) local_nelements = local_mesh.nelements + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + order = 3 - discr = EagerDGDiscretization(actx, local_mesh, order=order, - mpi_communicator=comm) + discr = EagerDGDiscretization( + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm + ) nodes = thaw(discr.nodes(), actx) + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + dim = 2 if logmgr: logmgr_add_device_name(logmgr, queue) @@ -399,12 +415,21 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) return euler_operator( - discr, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model - ) + make_conserved(dim, q=av_operator( - discr, q=state.join(), boundaries=boundaries, - boundary_kwargs={"time": t, "gas_model": gas_model}, alpha=alpha, - s0=s0, kappa=kappa) + discr, + state=fluid_state, + time=t, + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag + ) + av_operator( + discr, + cv=fluid_state.cv, + boundaries=boundaries, + boundary_kwargs={"time": t, "gas_model": gas_model}, + alpha=alpha, + s0=s0, + kappa=kappa, + quadrature_tag=quadrature_tag ) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, @@ -439,6 +464,8 @@ def my_rhs(t, state): import argparse casename = "doublemach" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -466,6 +493,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + use_overintegration=args.overintegration, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker From be00d30eb0600cafc5c74d3a4446703e797917a9 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 16:06:37 -0600 Subject: [PATCH 430/873] Use grad and div operators in AV --- mirgecom/artificial_viscosity.py | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index c4de7ac2b..c407da6f5 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -101,6 +101,7 @@ from meshmode.dof_array import thaw, DOFArray from mirgecom.flux import gradient_flux_central, divergence_flux_central +from mirgecom.operators import div_operator, grad_operator from grudge.trace_pair import ( TracePair, @@ -164,7 +165,6 @@ def av_operator(discr, boundaries, cv, alpha, boundary_kwargs=None, **kwargs): def interp_to_vol_quad(u): return op.project(discr, "vol", dd_vol, u) - def interp_to_surf_quad(utpair): local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) @@ -174,7 +174,6 @@ def interp_to_surf_quad(utpair): exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) ) - # Get smoothness indicator based on mass component kappa = kwargs.get("kappa", 1.0) s0 = kwargs.get("s0", -6.0) @@ -192,7 +191,6 @@ def central_flux(utpair): gradient_flux_central(utpair, normal) ) - cv_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions + sum( @@ -210,14 +208,9 @@ def central_flux(utpair): ) ) - # Compute R = grad(Q) - r = op.inverse_mass( - discr, - -alpha * indicator * ( - op.weak_local_grad(discr, dd_vol, interp_to_vol_quad(cv)) - - op.face_mass(discr, dd_faces, cv_bnd) - ) - ) + # Compute R = alpha*grad(Q) + r = -alpha * indicator \ + * grad_operator(discr, dd_vol, dd_faces, interp_to_vol_quad(cv), cv_bnd) def central_flux_div(utpair): dd = utpair.dd @@ -231,7 +224,6 @@ def central_flux_div(utpair): divergence_flux_central(utpair, normal) ) - # Total flux of grad(Q) across element boundaries r_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions @@ -251,11 +243,7 @@ def central_flux_div(utpair): ) # Return the AV RHS term - return op.inverse_mass( - discr, - -op.weak_local_div(discr, dd_vol, interp_to_vol_quad(r)) - + op.face_mass(discr, dd_faces, r_bnd) - ) + return -div_operator(discr, dd_vol, dd_faces, interp_to_vol_quad(r), r_bnd) def artificial_viscosity(discr, t, eos, boundaries, q, alpha, **kwargs): From 7b71322eeead672a2ff258ee149a97da21a5dacc Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 16:06:54 -0600 Subject: [PATCH 431/873] Remove extra blank line --- mirgecom/euler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 09b95c248..f3a711731 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -131,7 +131,6 @@ def interp_to_surf_quad(utpair): exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) ) - boundary_states = { btag: project_fluid_state( discr, From 82c21f7df55a553caaea77157dc3c4e9a9f233db Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 16:22:57 -0600 Subject: [PATCH 432/873] Udpate lazy test to handle join purge. --- test/test_lazy.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/test_lazy.py b/test/test_lazy.py index 11ba007ff..5b3472bcc 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -77,11 +77,14 @@ def get_discr(order): def _isclose(discr, x, y, rel_tol=1e-9, abs_tol=0, return_operands=False): from mirgecom.simutil import componentwise_norms - lhs = componentwise_norms(discr, x - y, np.inf) + from arraycontext import flatten + actx = x.array_context + lhs = actx.to_numpy(flatten(componentwise_norms(discr, x - y, np.inf), actx)) + rhs = np.maximum( rel_tol * np.maximum( - componentwise_norms(discr, x, np.inf), - componentwise_norms(discr, y, np.inf)), + actx.to_numpy(flatten(componentwise_norms(discr, x, np.inf), actx)), + actx.to_numpy(flatten(componentwise_norms(discr, y, np.inf), actx))), abs_tol) is_close = np.all(lhs <= rhs) From f77e81fa9ae6abe2b81198e86b045631df3902d9 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 17:40:28 -0600 Subject: [PATCH 433/873] Add overintegration support for navier stokes --- mirgecom/navierstokes.py | 287 +++++++++++++++++++++++++++------------ mirgecom/viscous.py | 4 +- 2 files changed, 205 insertions(+), 86 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 686968c55..574aba939 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -55,9 +55,13 @@ THE SOFTWARE. """ -import numpy as np # noqa -from grudge.symbolic.primitives import TracePair -from grudge.trace_pair import interior_trace_pairs +from grudge.trace_pair import ( + TracePair, + interior_trace_pairs +) +from grudge.dof_desc import DOFDesc, as_dofdesc + +import grudge.op as op from mirgecom.inviscid import ( inviscid_flux, @@ -75,13 +79,19 @@ from mirgecom.operators import ( div_operator, grad_operator ) +from mirgecom.gas_model import ( + project_fluid_state, + make_fluid_state_trace_pairs +) + from arraycontext import thaw def ns_operator(discr, gas_model, state, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov, gradient_numerical_flux_func=gradient_flux_central, - viscous_numerical_flux_func=viscous_flux_central): + viscous_numerical_flux_func=viscous_flux_central, + quadrature_tag=None): r"""Compute RHS of the Navier-Stokes equations. Returns @@ -95,11 +105,10 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, Parameters ---------- - cv: :class:`~mirgecom.fluid.ConservedVars` - Fluid solution + state: :class:`~mirgecom.gas_model.FluidState` - dv: :class:`~mirgecom.eos.EOSDependentVars` - Fluid solution-dependent quantities (e.g. pressure, temperature) + Fluid state object with the conserved state, and dependent + quantities. boundaries Dictionary of boundary functions, one for each valid btag @@ -113,9 +122,15 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, Implementing the transport properties including heat conductivity, and species diffusivities type(mirgecom.transport.TransportModel). + quadrature_tag + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + The default value is *None*. + Returns ------- - numpy.ndarray + :class:`mirgecom.fluid.ConservedVars` + Agglomerated object array of DOF arrays representing the RHS of the Navier-Stokes equations. """ @@ -123,52 +138,96 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, raise ValueError("Navier-Stokes operator expects viscous gas model.") actx = state.array_context + dd_base = as_dofdesc("vol") + dd_vol = DOFDesc("vol", quadrature_tag) + dd_faces = DOFDesc("all_faces", quadrature_tag) + + def interp_to_surf_quad(utpair): + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + return TracePair( + local_dd_quad, + interior=op.project(discr, local_dd, local_dd_quad, utpair.int), + exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + ) - from mirgecom.gas_model import project_fluid_state - boundary_states = {btag: - project_fluid_state(discr, btag, state, gas_model) - for btag in boundaries} - - cv_interior_pairs = interior_trace_pairs(discr, state.cv) - - tseed_interior_pairs = \ - interior_trace_pairs(discr, state.temperature) if state.is_mixture else None - - from mirgecom.gas_model import make_fluid_state_trace_pairs - interior_state_pairs = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, + boundary_states = { + btag: project_fluid_state( + discr, + dd_base, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + state, + gas_model + ) for btag in boundaries + } + + cv_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.cv) + ] + + tseed_interior_pairs = None + if state.is_mixture > 0: + # If this is a mixture, we need to exchange the temperature field because + # mixture pressure (used in the flux calculations) depends on + # temperature and we need to seed the temperature calculation for the + # (+) part of the partition boundary with the remote temperature data. + tseed_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.temperature) + ] + + quadrature_state = \ + project_fluid_state(discr, dd_base, dd_vol, state, gas_model) + interior_state_pairs = make_fluid_state_trace_pairs(cv_interior_pairs, + gas_model, tseed_interior_pairs) - # Operator-independent boundary flux interface - def _sum_element_boundary_fluxes(discr, compute_interior_flux, - compute_boundary_flux, interior_trace_pairs, - boundary_states): - return (sum(compute_interior_flux(tpair) - for tpair in interior_trace_pairs) - + sum(compute_boundary_flux(btag, boundary_states[btag]) - for btag in boundary_states)) - - # Data-independent grad flux for faces - def _grad_flux_interior(q_pair): - normal = thaw(discr.normal(q_pair.dd), actx) - # Hard-coding central per [Bassi_1997]_ eqn 13 - flux_weak = gradient_numerical_flux_func(q_pair, normal) - return discr.project(q_pair.dd, "all_faces", flux_weak) - - # CV-specific boundary flux for grad operator - def _cv_grad_flux_bnd(btag, boundary_state): - return boundaries[btag].cv_gradient_flux( - discr, btag=btag, gas_model=gas_model, state_minus=boundary_state, - time=time, numerical_flux_func=gradient_numerical_flux_func - ) - - cv_flux_bnd = \ - _sum_element_boundary_fluxes(discr, _grad_flux_interior, _cv_grad_flux_bnd, - cv_interior_pairs, boundary_states) + def gradient_flux_interior(tpair): + dd = tpair.dd + normal = thaw(discr.normal(dd), actx) + flux = gradient_numerical_flux_func(tpair, normal) + return op.project(discr, dd, dd.with_dtag("all_faces"), flux) + + cv_flux_bnd = ( + + # Domain boundaries + sum(boundaries[btag].cv_gradient_flux( + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model=gas_model, + state_minus=boundary_states[btag], + time=time, + numerical_flux_func=gradient_numerical_flux_func) + for btag in boundary_states) + + # Interior boundaries + + sum(gradient_flux_interior(tpair) for tpair in cv_interior_pairs) + ) # [Bassi_1997]_ eqn 15 (s = grad_q) - grad_cv = grad_operator(discr, state.cv, cv_flux_bnd) + grad_cv = grad_operator( + discr, + dd_vol, + dd_faces, + quadrature_state.cv, + cv_flux_bnd + ) - grad_cv_interior_pairs = interior_trace_pairs(discr, grad_cv) + grad_cv_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, grad_cv) + ] # Temperature gradient for conductive heat flux: [Ihme_2014]_ eqn (3b) # Capture the temperature for the interior faces for grad(T) calc @@ -179,18 +238,38 @@ def _cv_grad_flux_bnd(btag, boundary_state): exterior=state_pair.ext.temperature) for state_pair in interior_state_pairs] - def _t_grad_flux_bnd(btag, boundary_state): - return boundaries[btag].temperature_gradient_flux( - discr, btag=btag, gas_model=gas_model, - state_minus=boundary_state, time=time) - - t_flux_bnd = \ - _sum_element_boundary_fluxes(discr, _grad_flux_interior, _t_grad_flux_bnd, - t_interior_pairs, boundary_states) + t_flux_bnd = ( + + # Domain boundaries + sum(boundaries[btag].temperature_gradient_flux( + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model=gas_model, + state_minus=boundary_states[btag], + time=time) + for btag in boundary_states) + + # Interior boundaries + + sum(gradient_flux_interior(tpair) for tpair in t_interior_pairs) + ) # Fluxes in-hand, compute the gradient of temperature and mpi exchange it - grad_t = grad_operator(discr, state.temperature, t_flux_bnd) - grad_t_interior_pairs = interior_trace_pairs(discr, grad_t) + grad_t = grad_operator( + discr, + dd_vol, + dd_faces, + quadrature_state.temperature, + t_flux_bnd + ) + + grad_t_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, grad_t) + ] # inviscid flux divergence-specific flux function for interior faces def finv_divergence_flux_interior(state_pair): @@ -201,20 +280,18 @@ def finv_divergence_flux_interior(state_pair): # inviscid part of bcs applied here def finv_divergence_flux_boundary(btag, boundary_state): return boundaries[btag].inviscid_divergence_flux( - discr, btag=btag, gas_model=gas_model, state_minus=boundary_state, - time=time, numerical_flux_func=inviscid_numerical_flux_func) - - # glob viscous flux inputs for use by the _sum_element_boundary_fluxes wrapper - viscous_states_int_bnd = [ - (state_pair, grad_cv_pair, grad_t_pair) - for state_pair, grad_cv_pair, grad_t_pair in - zip(interior_state_pairs, grad_cv_interior_pairs, grad_t_interior_pairs)] + discr, + # Make sure we fields on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model=gas_model, + state_minus=boundary_state, + time=time, + numerical_flux_func=inviscid_numerical_flux_func + ) # viscous fluxes across interior faces (including partition and periodic bnd) - def fvisc_divergence_flux_interior(tpair_tuple): - state_pair = tpair_tuple[0] - grad_cv_pair = tpair_tuple[1] - grad_t_pair = tpair_tuple[2] + def fvisc_divergence_flux_interior(state_pair, grad_cv_pair, grad_t_pair): return viscous_facial_flux(discr=discr, gas_model=gas_model, state_pair=state_pair, grad_cv_pair=grad_cv_pair, grad_t_pair=grad_t_pair, @@ -222,27 +299,67 @@ def fvisc_divergence_flux_interior(tpair_tuple): # viscous part of bcs applied here def fvisc_divergence_flux_boundary(btag, boundary_state): - grad_cv_minus = discr.project("vol", btag, grad_cv) - grad_t_minus = discr.project("vol", btag, grad_t) + # Make sure we fields on the quadrature grid + # restricted to the tag *btag* + dd_btag = as_dofdesc(btag).with_discr_tag(quadrature_tag) + grad_cv_minus = op.project(discr, dd_base, dd_btag, grad_cv) + grad_t_minus = op.project(discr, dd_base, dd_btag, grad_t) return boundaries[btag].viscous_divergence_flux( - discr=discr, btag=btag, gas_model=gas_model, + discr=discr, + btag=dd_btag, + gas_model=gas_model, state_minus=boundary_state, - grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus, time=time, - numerical_flux_func=viscous_numerical_flux_func) + grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus, + time=time, + numerical_flux_func=viscous_numerical_flux_func + ) vol_term = ( - viscous_flux(state=state, grad_cv=grad_cv, grad_t=grad_t) - - inviscid_flux(state=state) + + # Compute the volume contribution of the viscous flux terms + # using field values on the quadrature grid + viscous_flux(state=quadrature_state, + # Interpolate gradients to the quadrature grid + grad_cv=op.project(discr, dd_base, dd_vol, grad_cv), + grad_t=op.project(discr, dd_base, dd_vol, grad_t)) + + # Compute the volume contribution of the inviscid flux terms + # using field values on the quadrature grid + - inviscid_flux(state=quadrature_state) ) bnd_term = ( - _sum_element_boundary_fluxes( - discr, fvisc_divergence_flux_interior, fvisc_divergence_flux_boundary, - viscous_states_int_bnd, boundary_states) - - _sum_element_boundary_fluxes( - discr, finv_divergence_flux_interior, finv_divergence_flux_boundary, - interior_state_pairs, boundary_states) + + # All surface contributions from the viscous fluxes + ( + # Domain boundary contributions for the viscous terms + sum(fvisc_divergence_flux_boundary(btag, boundary_states[btag]) + for btag in boundary_states) + + # Interior interface contributions for the viscous terms + + sum( + fvisc_divergence_flux_interior(state_pair, grad_cv_pair, grad_t_pair) + + for state_pair, grad_cv_pair, grad_t_pair in zip( + interior_state_pairs, + grad_cv_interior_pairs, + grad_t_interior_pairs + ) + ) + ) + + # All surface contributions from the inviscid fluxes + - ( + # Domain boundary contributions for the inviscid terms + sum(finv_divergence_flux_boundary(btag, boundary_states[btag]) + for btag in boundary_states) + + # Interior interface contributions for the inviscid terms + + sum(finv_divergence_flux_interior(tpair) + for tpair in interior_state_pairs) + ) ) # NS RHS - return div_operator(discr, vol_term, bnd_term) + return div_operator(discr, dd_vol, dd_faces, vol_term, bnd_term) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 92d7b2d86..e46934c0b 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -368,7 +368,9 @@ def viscous_facial_flux(discr, gas_model, state_pair, grad_cv_pair, grad_t_pair, state_pair=state_pair, grad_cv_pair=grad_cv_pair, grad_t_pair=grad_t_pair) - return num_flux if local else discr.project(state_pair.dd, "all_faces", num_flux) + dd = state_pair.dd + dd_allfaces = dd.with_dtag("all_faces") + return num_flux if local else discr.project(dd, dd_allfaces, num_flux) def get_viscous_timestep(discr, state): From 7e02bd826a6010079e8d08d66660940dc6ebdef1 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 17:40:52 -0600 Subject: [PATCH 434/873] Add overintegration option for the poiseuille experiment --- examples/poiseuille-mpi.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 692235848..d1783fd4c 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -90,6 +90,7 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, use_leap=False, use_profiling=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" @@ -165,12 +166,27 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + order = 2 discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) @@ -417,7 +433,8 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) return ns_operator(discr, gas_model=gas_model, boundaries=boundaries, - state=fluid_state, time=t) + state=fluid_state, time=t, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -457,6 +474,8 @@ def my_rhs(t, state): import argparse casename = "poiseuille" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -484,6 +503,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + use_overintegration=args.overintegration, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker From 5f3ae22dfdce7a9b53e941cddc74827fea26c6a4 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 17:53:11 -0600 Subject: [PATCH 435/873] Remove unused import --- examples/doublemach-mpi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index e22b4c1a5..b0d5a7211 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -50,7 +50,6 @@ ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.fluid import make_conserved from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( From 8a592ab13d256bb34aec75c0a591c366a5a53fb0 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sun, 12 Dec 2021 19:16:22 -0600 Subject: [PATCH 436/873] Use custom production branch temporarily --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..956014435 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-purge-join" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 8b92ffe74e386b01764607de6aaa0408e5d0395e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 19:26:59 -0600 Subject: [PATCH 437/873] Use proper inviscid flux interface, custom production --- .ci-support/production-testing-env.sh | 2 +- mirgecom/euler.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..956014435 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-purge-join" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 78d993bd5..54c74d59e 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -98,7 +98,7 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, flow equations. """ # Compute volume contributions - inviscid_flux_vol = inviscid_flux(discr, eos, cv) + inviscid_flux_vol = inviscid_flux(discr, eos.pressure(cv), cv) interior_cv = interior_trace_pairs(discr, cv) # Compute interface contributions inviscid_flux_bnd = ( From ac9dd07737aeedece45d3bf0b5f5b86d9fa50c37 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 12 Dec 2021 19:30:23 -0600 Subject: [PATCH 438/873] Purge the join --- test/test_bc.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/test/test_bc.py b/test/test_bc.py index da9fdf8c2..d2b214373 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -38,7 +38,6 @@ EagerDGDiscretization, interior_trace_pair ) -from mirgecom.fluid import make_conserved from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) @@ -281,9 +280,7 @@ def scalar_flux_interior(int_tpair): print(f"{i_flux_bnd=}") from mirgecom.operators import grad_operator - grad_cv = make_conserved( - dim, q=grad_operator(discr, uniform_state.join(), cv_flux_bnd.join()) - ) + grad_cv = grad_operator(discr, uniform_state, cv_flux_bnd) grad_t = grad_operator(discr, temper, t_flux_bnd) print(f"{grad_cv=}") print(f"{grad_t=}") @@ -401,9 +398,7 @@ def scalar_flux_interior(int_tpair): print(f"{i_flux_bnd=}") from mirgecom.operators import grad_operator - grad_cv = make_conserved( - dim, q=grad_operator(discr, cv.join(), cv_flux_bnd.join()) - ) + grad_cv = grad_operator(discr, cv, cv_flux_bnd) grad_t = grad_operator(discr, temper, t_flux_bnd) print(f"{grad_cv=}") print(f"{grad_t=}") From 78f00f488a1ca49117d2bc529e5c9b5ab955a899 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 21:27:27 -0600 Subject: [PATCH 439/873] Tidy/compactify rhs operator --- examples/doublemach-mpi.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index b0d5a7211..ffe784840 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -413,22 +413,16 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return euler_operator( - discr, - state=fluid_state, - time=t, - boundaries=boundaries, - gas_model=gas_model, - quadrature_tag=quadrature_tag - ) + av_operator( - discr, - cv=fluid_state.cv, - boundaries=boundaries, - boundary_kwargs={"time": t, "gas_model": gas_model}, - alpha=alpha, - s0=s0, - kappa=kappa, - quadrature_tag=quadrature_tag + return ( + euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag) + + av_operator(discr, cv=fluid_state.cv, + boundaries=boundaries, + boundary_kwargs={"time": t, "gas_model": gas_model}, + alpha=alpha, s0=s0, kappa=kappa, + quadrature_tag=quadrature_tag) ) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, From e49d393218511c24972e8bf7cf09d2f382ff7511 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 21:54:14 -0600 Subject: [PATCH 440/873] bikeshedding: cleaning up code --- mirgecom/artificial_viscosity.py | 60 +++++++++++--------------------- mirgecom/euler.py | 16 +++------ mirgecom/navierstokes.py | 46 ++++++++---------------- mirgecom/operators.py | 6 ++-- mirgecom/utils.py | 2 +- 5 files changed, 41 insertions(+), 89 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index c407da6f5..876dde571 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -182,30 +182,20 @@ def interp_to_surf_quad(utpair): def central_flux(utpair): dd = utpair.dd normal = thaw(actx, discr.normal(dd)) - return op.project( - discr, - dd, - dd.with_dtag("all_faces"), - # This uses a central scalar flux along nhat: - # flux = 1/2 * (Q- + Q+) * nhat - gradient_flux_central(utpair, normal) - ) + return op.project(discr, dd, dd.with_dtag("all_faces"), + # This uses a central scalar flux along nhat: + # flux = 1/2 * (Q- + Q+) * nhat + gradient_flux_central(utpair, normal)) cv_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions - + sum( - central_flux(interp_to_surf_quad(tpair)) - for tpair in interior_trace_pairs(discr, cv) - ) + + sum(central_flux(interp_to_surf_quad(tpair)) + for tpair in interior_trace_pairs(discr, cv)) # Contributions from boundary fluxes - + sum( - boundaries[btag].soln_gradient_flux( - discr, - btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - cv=cv, - **boundary_kwargs - ) for btag in boundaries - ) + + sum(boundaries[btag].soln_gradient_flux( + discr, + btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), + cv=cv, **boundary_kwargs) for btag in boundaries) ) # Compute R = alpha*grad(Q) @@ -215,31 +205,21 @@ def central_flux(utpair): def central_flux_div(utpair): dd = utpair.dd normal = thaw(actx, discr.normal(dd)) - return op.project( - discr, - dd, - dd.with_dtag("all_faces"), - # This uses a central vector flux along nhat: - # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat - divergence_flux_central(utpair, normal) - ) + return op.project(discr, dd, dd.with_dtag("all_faces"), + # This uses a central vector flux along nhat: + # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat + divergence_flux_central(utpair, normal)) # Total flux of grad(Q) across element boundaries r_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions - + sum( - central_flux_div(interp_to_surf_quad(tpair)) - for tpair in interior_trace_pairs(discr, r) - ) + + sum(central_flux_div(interp_to_surf_quad(tpair)) + for tpair in interior_trace_pairs(discr, r)) # Contributions from boundary fluxes - + sum( - boundaries[btag].av_flux( - discr, - btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - diffusion=r, - **boundary_kwargs - ) for btag in boundaries - ) + + sum(boundaries[btag].av_flux( + discr, + btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), + diffusion=r, **boundary_kwargs) for btag in boundaries) ) # Return the AV RHS term diff --git a/mirgecom/euler.py b/mirgecom/euler.py index f3a711731..bc4bd8631 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -133,14 +133,11 @@ def interp_to_surf_quad(utpair): boundary_states = { btag: project_fluid_state( - discr, - dd_base, + discr, dd_base, # Make sure we get the state on the quadrature grid # restricted to the tag *btag* as_dofdesc(btag).with_discr_tag(quadrature_tag), - state, - gas_model - ) for btag in boundaries + state, gas_model) for btag in boundaries } cv_interior_pairs = [ @@ -192,13 +189,8 @@ def interp_to_surf_quad(utpair): for state_pair in interior_states) ) - return -div_operator( - discr, - dd_vol, - dd_faces, - inviscid_flux_vol, - inviscid_flux_bnd - ) + return -div_operator(discr, dd_vol, dd_faces, + inviscid_flux_vol, inviscid_flux_bnd) # By default, run unitless diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 574aba939..371120f78 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -153,14 +153,11 @@ def interp_to_surf_quad(utpair): boundary_states = { btag: project_fluid_state( - discr, - dd_base, + discr, dd_base, # Make sure we get the state on the quadrature grid # restricted to the tag *btag* as_dofdesc(btag).with_discr_tag(quadrature_tag), - state, - gas_model - ) for btag in boundaries + state, gas_model) for btag in boundaries } cv_interior_pairs = [ @@ -214,13 +211,8 @@ def gradient_flux_interior(tpair): ) # [Bassi_1997]_ eqn 15 (s = grad_q) - grad_cv = grad_operator( - discr, - dd_vol, - dd_faces, - quadrature_state.cv, - cv_flux_bnd - ) + grad_cv = grad_operator(discr, dd_vol, dd_faces, + quadrature_state.cv, cv_flux_bnd) grad_cv_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature @@ -256,13 +248,8 @@ def gradient_flux_interior(tpair): ) # Fluxes in-hand, compute the gradient of temperature and mpi exchange it - grad_t = grad_operator( - discr, - dd_vol, - dd_faces, - quadrature_state.temperature, - t_flux_bnd - ) + grad_t = grad_operator(discr, dd_vol, dd_faces, + quadrature_state.temperature, t_flux_bnd) grad_t_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature @@ -302,15 +289,13 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): # Make sure we fields on the quadrature grid # restricted to the tag *btag* dd_btag = as_dofdesc(btag).with_discr_tag(quadrature_tag) - grad_cv_minus = op.project(discr, dd_base, dd_btag, grad_cv) - grad_t_minus = op.project(discr, dd_base, dd_btag, grad_t) return boundaries[btag].viscous_divergence_flux( discr=discr, btag=dd_btag, gas_model=gas_model, state_minus=boundary_state, - grad_cv_minus=grad_cv_minus, - grad_t_minus=grad_t_minus, + grad_cv_minus=op.project(discr, dd_base, dd_btag, grad_cv), + grad_t_minus=op.project(discr, dd_base, dd_btag, grad_t), time=time, numerical_flux_func=viscous_numerical_flux_func ) @@ -338,15 +323,12 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): for btag in boundary_states) # Interior interface contributions for the viscous terms - + sum( - fvisc_divergence_flux_interior(state_pair, grad_cv_pair, grad_t_pair) - - for state_pair, grad_cv_pair, grad_t_pair in zip( - interior_state_pairs, - grad_cv_interior_pairs, - grad_t_interior_pairs - ) - ) + + sum(fvisc_divergence_flux_interior(state_pair, + grad_cv_pair, + grad_t_pair) + for state_pair, grad_cv_pair, grad_t_pair in zip( + interior_state_pairs, grad_cv_interior_pairs, + grad_t_interior_pairs)) ) # All surface contributions from the inviscid fluxes diff --git a/mirgecom/operators.py b/mirgecom/operators.py index 0a151156b..4a0bbb050 100644 --- a/mirgecom/operators.py +++ b/mirgecom/operators.py @@ -53,8 +53,7 @@ def grad_operator(discr, dd_vol, dd_faces, volume_fluxes, boundary_fluxes): meshmode.dof_array.DOFArray or numpy.ndarray the dg gradient operator applied to *u* """ - return -op.inverse_mass( - discr, + return -discr.inverse_mass( op.weak_local_grad(discr, dd_vol, volume_fluxes) - op.face_mass(discr, dd_faces, boundary_fluxes) ) @@ -82,8 +81,7 @@ def div_operator(discr, dd_vol, dd_faces, volume_fluxes, boundary_fluxes): :class:`mirgecom.fluid.ConservedVars` the dg divergence operator applied to vector-valued function *u*. """ - return -op.inverse_mass( - discr, + return -discr.inverse_mass( op.weak_local_div(discr, dd_vol, volume_fluxes) - op.face_mass(discr, dd_faces, boundary_fluxes) ) diff --git a/mirgecom/utils.py b/mirgecom/utils.py index 5c5cb3f3a..173d48ac1 100644 --- a/mirgecom/utils.py +++ b/mirgecom/utils.py @@ -67,8 +67,8 @@ def __init__(self, scale_factor: float = 1) -> None: scale_factor Scale returned statistics by this factor. """ + # Number of values stored in the StatisticsAccumulator self.num_values: int = 0 - """Number of values stored in the StatisticsAccumulator.""" self._sum = 0 self._min = None From 83b4afa7ba545f53e9a26c62a41d7893f37142c5 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 22:45:29 -0600 Subject: [PATCH 441/873] Ensure projection function gets a dofdesc --- mirgecom/boundary.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index fc31436df..df841dc2a 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -167,6 +167,8 @@ def __init__(self, def _boundary_quantity(self, discr, btag, quantity, **kwargs): """Get a boundary quantity on local boundary, or projected to "all_faces".""" + from grudge.dof_desc import as_dofdesc + btag = as_dofdesc(btag) if "local" in kwargs: if kwargs["local"]: return quantity From be9dcaf488104a02d5b54cebf77479ddaa7dbdcb Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 22:45:52 -0600 Subject: [PATCH 442/873] Fixup unit tests for operator api changes --- test/test_bc.py | 28 ++++++++++++++++------------ test/test_lazy.py | 7 ++++++- test/test_operators.py | 12 ++++++------ test/test_viscous.py | 6 ++++-- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/test/test_bc.py b/test/test_bc.py index a4b6ce5ea..e86e969d7 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -272,8 +272,8 @@ def scalar_flux_interior(int_tpair): initializer = Uniform(dim=dim, velocity=vel) uniform_cv = initializer(nodes, eos=gas_model.eos) uniform_state = make_fluid_state(cv=uniform_cv, gas_model=gas_model) - state_minus = project_fluid_state(discr, BTAG_ALL, uniform_state, - gas_model) + state_minus = project_fluid_state(discr, "vol", BTAG_ALL, + uniform_state, gas_model) print(f"{uniform_state=}") temper = uniform_state.temperature @@ -312,14 +312,16 @@ def scalar_flux_interior(int_tpair): print(f"{i_flux_bnd=}") from mirgecom.operators import grad_operator + from grudge.dof_desc import as_dofdesc + dd_vol = as_dofdesc("vol") + dd_faces = as_dofdesc("all_faces") grad_cv_minus = \ discr.project("vol", BTAG_ALL, - make_conserved(dim, - q=grad_operator(discr, - uniform_state.cv.join(), - cv_flux_bnd.join()))) + grad_operator(discr, dd_vol, dd_faces, + uniform_state.cv, cv_flux_bnd)) grad_t_minus = discr.project("vol", BTAG_ALL, - grad_operator(discr, temper, t_flux_bnd)) + grad_operator(discr, dd_vol, dd_faces, + temper, t_flux_bnd)) print(f"{grad_cv_minus=}") print(f"{grad_t_minus=}") @@ -412,7 +414,8 @@ def scalar_flux_interior(int_tpair): initializer = Uniform(dim=dim, velocity=vel) cv = initializer(nodes, eos=gas_model.eos) state = make_fluid_state(cv, gas_model) - state_minus = project_fluid_state(discr, BTAG_ALL, state, gas_model) + state_minus = project_fluid_state(discr, "vol", BTAG_ALL, + state, gas_model) print(f"{cv=}") temper = state.temperature @@ -448,10 +451,11 @@ def scalar_flux_interior(int_tpair): print(f"{i_flux_bnd=}") from mirgecom.operators import grad_operator - grad_cv = make_conserved( - dim, q=grad_operator(discr, cv.join(), cv_flux_bnd.join()) - ) - grad_t = grad_operator(discr, temper, t_flux_bnd) + from grudge.dof_desc import as_dofdesc + dd_vol = as_dofdesc("vol") + dd_faces = as_dofdesc("all_faces") + grad_cv = grad_operator(discr, dd_vol, dd_faces, cv, cv_flux_bnd) + grad_t = grad_operator(discr, dd_vol, dd_faces, temper, t_flux_bnd) grad_cv_minus = discr.project("vol", BTAG_ALL, grad_cv) grad_t_minus = discr.project("vol", BTAG_ALL, grad_t) diff --git a/test/test_lazy.py b/test/test_lazy.py index f212f7f26..b38f640ea 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -134,8 +134,12 @@ def test_lazy_op_divergence(op_test_data, order): discr = get_discr(order) from grudge.trace_pair import interior_trace_pair + from grudge.dof_desc import as_dofdesc from mirgecom.operators import div_operator + dd_vol = as_dofdesc("vol") + dd_faces = as_dofdesc("all_faces") + def get_flux(u_tpair): dd = u_tpair.dd dd_allfaces = dd.with_dtag("all_faces") @@ -144,7 +148,8 @@ def get_flux(u_tpair): return discr.project(dd, dd_allfaces, flux) def op(u): - return div_operator(discr, u, get_flux(interior_trace_pair(discr, u))) + return div_operator(discr, dd_vol, dd_faces, + u, get_flux(interior_trace_pair(discr, u))) lazy_op = lazy_actx.compile(op) diff --git a/test/test_operators.py b/test/test_operators.py index d60a8ec80..b3d2bc751 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -236,14 +236,14 @@ def inf_norm(x): test_data_int_tpair, boundaries) from mirgecom.operators import grad_operator - if isinstance(test_data, ConservedVars): - test_grad = make_conserved( - dim=dim, q=grad_operator(discr, test_data.join(), - test_data_flux_bnd.join()) - ) + from grudge.dof_desc import as_dofdesc + dd_vol = as_dofdesc("vol") + dd_faces = as_dofdesc("all_faces") + test_grad = grad_operator(discr, dd_vol, dd_faces, + test_data, test_data_flux_bnd) + if isinstance(test_grad, ConservedVars): grad_err = inf_norm((test_grad - exact_grad).join())/err_scale else: - test_grad = grad_operator(discr, test_data, test_data_flux_bnd) grad_err = inf_norm(test_grad - exact_grad)/err_scale print(f"{test_grad=}") diff --git a/test/test_viscous.py b/test/test_viscous.py index 77ae3ab71..88b981f4e 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -211,8 +211,10 @@ def inf_norm(x): cv_flux_bnd = _elbnd_flux(discr, cv_flux_interior, cv_flux_boundary, cv_int_tpair, boundaries) from mirgecom.operators import grad_operator - grad_cv = make_conserved(dim, q=grad_operator(discr, cv.join(), - cv_flux_bnd.join())) + from grudge.dof_desc import as_dofdesc + dd_vol = as_dofdesc("vol") + dd_faces = as_dofdesc("all_faces") + grad_cv = grad_operator(discr, dd_vol, dd_faces, cv, cv_flux_bnd) xp_grad_cv = initializer.exact_grad(x_vec=nodes, eos=eos, cv_exact=cv) xp_grad_v = 1/cv.mass * xp_grad_cv.momentum From af8cccf7b088861649e02ded5623aded32dcb2aa Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 22:59:37 -0600 Subject: [PATCH 443/873] Rename: av_operator -> av_laplacian_operator --- examples/doublemach-mpi.py | 13 +++++++------ mirgecom/artificial_viscosity.py | 27 ++++++++++++++++++++------- test/test_av.py | 11 +++++++---- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index ffe784840..1a21f444f 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -45,7 +45,7 @@ from mirgecom.euler import euler_operator from mirgecom.artificial_viscosity import ( - av_operator, + av_laplacian_operator, smoothness_indicator ) from mirgecom.io import make_init_message @@ -418,11 +418,12 @@ def my_rhs(t, state): boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag) - + av_operator(discr, cv=fluid_state.cv, - boundaries=boundaries, - boundary_kwargs={"time": t, "gas_model": gas_model}, - alpha=alpha, s0=s0, kappa=kappa, - quadrature_tag=quadrature_tag) + + av_laplacian_operator(discr, cv=fluid_state.cv, + boundaries=boundaries, + boundary_kwargs={"time": t, + "gas_model": gas_model}, + alpha=alpha, s0=s0, kappa=kappa, + quadrature_tag=quadrature_tag) ) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 876dde571..d25222811 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -67,7 +67,7 @@ AV RHS Evaluation ^^^^^^^^^^^^^^^^^ -.. autofunction:: av_operator +.. autofunction:: av_laplacian_operator """ __copyright__ = """ @@ -95,6 +95,7 @@ """ import numpy as np +from mirgecom.fluid import make_conserved from pytools import memoize_in, keyed_memoize_in @@ -117,7 +118,8 @@ import grudge.op as op -def av_operator(discr, boundaries, cv, alpha, boundary_kwargs=None, **kwargs): +def av_laplacian_operator(discr, boundaries, cv, alpha, + boundary_kwargs=None, **kwargs): r"""Compute the artificial viscosity right-hand-side. Computes the the right-hand-side term for artificial viscosity. @@ -227,12 +229,23 @@ def central_flux_div(utpair): def artificial_viscosity(discr, t, eos, boundaries, q, alpha, **kwargs): - """Interface :function:`av_operator` with backwards-compatible API.""" + """Interface :function:`av_laplacian_operator` with backwards-compatible API.""" from warnings import warn - warn("Do not call artificial_viscosity; it is now called av_operator. This" - "function will disappear in 2021", DeprecationWarning, stacklevel=2) - return av_operator(discr=discr, boundaries=boundaries, - boundary_kwargs={"t": t, "eos": eos}, q=q, alpha=alpha, **kwargs) + warn("Do not call artificial_viscosity; it is now called av_laplacian_operator." + " This function will disappear in 2022", DeprecationWarning, stacklevel=2) + return av_laplacian_operator( + discr=discr, cv=make_conserved(discr.dim, q=q), alpha=alpha, + boundaries=boundaries, boundary_kwargs={"t": t, "eos": eos}, **kwargs) + + +def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): + """Interface :function:`av_laplacian_operator` with backwards-compatible API.""" + from warnings import warn + warn("Do not call av_operator; it is now called av_laplacian_operator. This" + "function will disappear in 2022", DeprecationWarning, stacklevel=2) + return av_laplacian_operator( + discr=discr, cv=make_conserved(discr.dim, q=q), alpha=alpha, + boundaries=boundaries, boundary_kwargs=boundary_kwargs, **kwargs) def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): diff --git a/test/test_av.py b/test/test_av.py index 82ca99140..c07b61c96 100644 --- a/test/test_av.py +++ b/test/test_av.py @@ -35,7 +35,7 @@ from meshmode.mesh import BTAG_ALL from mirgecom.artificial_viscosity import ( - av_operator, + av_laplacian_operator, smoothness_indicator ) from mirgecom.fluid import make_conserved @@ -216,7 +216,8 @@ def av_flux(self, disc, btag, diffusion, **kwargs): momentum=make_obj_array([soln for _ in range(dim)]), species_mass=make_obj_array([soln for _ in range(dim)]) ) - rhs = av_operator(discr, boundaries=boundaries, cv=cv, alpha=1.0, s0=-np.inf) + rhs = av_laplacian_operator(discr, boundaries=boundaries, + cv=cv, alpha=1.0, s0=-np.inf) err = discr.norm(rhs, np.inf) assert err < tolerance @@ -229,7 +230,8 @@ def av_flux(self, disc, btag, diffusion, **kwargs): momentum=make_obj_array([soln for _ in range(dim)]), species_mass=make_obj_array([soln for _ in range(dim)]) ) - rhs = av_operator(discr, boundaries=boundaries, cv=cv, alpha=1.0, s0=-np.inf) + rhs = av_laplacian_operator(discr, boundaries=boundaries, + cv=cv, alpha=1.0, s0=-np.inf) err = discr.norm(rhs, np.inf) assert err < tolerance @@ -242,6 +244,7 @@ def av_flux(self, disc, btag, diffusion, **kwargs): momentum=make_obj_array([soln for _ in range(dim)]), species_mass=make_obj_array([soln for _ in range(dim)]) ) - rhs = av_operator(discr, boundaries=boundaries, cv=cv, alpha=1.0, s0=-np.inf) + rhs = av_laplacian_operator(discr, boundaries=boundaries, + cv=cv, alpha=1.0, s0=-np.inf) err = discr.norm(2.*dim-rhs, np.inf) assert err < tolerance From d014f47987f196a7333ff5295378494b114e73e5 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 23:02:42 -0600 Subject: [PATCH 444/873] Add overintegration option to autoignition --- examples/autoignition-mpi.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 3373836fc..05b979c4d 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -80,7 +80,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, + use_leap=False, use_overintegration=False, + use_profiling=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext, log_dependent=True): """Drive example.""" @@ -172,10 +173,26 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + ones = discr.zeros(actx) + 1.0 vis_timer = None @@ -573,7 +590,8 @@ def my_rhs(t, state): return make_obj_array([ euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, - inviscid_numerical_flux_func=inviscid_flux_rusanov) + inviscid_numerical_flux_func=inviscid_flux_rusanov, + quadrature_tag=quadrature_tag) + eos.get_species_source_terms(cv, fluid_state.temperature), 0*tseed]) @@ -616,6 +634,8 @@ def my_rhs(t, state): import argparse casename = "autoignition" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -646,7 +666,9 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + main(use_logmgr=args.log, use_leap=args.leap, + use_overintegration=args.overintegration, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, log_dependent=log_dependent) From 695fdd3fb3d9754bf2ef9d528839c3656d32c2a1 Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Sun, 12 Dec 2021 23:05:11 -0600 Subject: [PATCH 445/873] Remove unused import in test_bc --- test/test_bc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_bc.py b/test/test_bc.py index e86e969d7..4126f1a01 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -38,7 +38,6 @@ EagerDGDiscretization, interior_trace_pair ) -from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context From 0a7c1270eaec623c43bd31a20fa729cdcc2ea173 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 06:20:42 -0600 Subject: [PATCH 446/873] Fix some merge bugs --- mirgecom/euler.py | 2 +- mirgecom/fluid.py | 20 ++++--------- mirgecom/navierstokes.py | 65 ++++++++++++++-------------------------- test/test_eos.py | 5 ++-- 4 files changed, 32 insertions(+), 60 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 54c74d59e..324ae8338 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -106,7 +106,7 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, + sum(inviscid_facial_flux(discr, eos=eos, cv_tpair=part_tpair) for part_tpair in interior_cv) # Domain boundaries - + sum(boundaries[btag].inviscid_boundary_flux(discr, btag=btag, cv=cv, + + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, eos=eos, time=time) for btag in boundaries) ) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 9399df7db..c7eba50bb 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -4,8 +4,6 @@ ^^^^^^^^^^^^^^^^^^^^^ .. autoclass:: ConservedVars -.. autofunction:: split_conserved -.. autofunction:: join_conserved .. autofunction:: make_conserved Helper Functions @@ -255,7 +253,7 @@ def species_mass_fractions(self): def join(self): """Call :func:`join_conserved` on *self*.""" - return join_conserved( + return _join_conserved( dim=self.dim, mass=self.mass, energy=self.energy, @@ -295,7 +293,7 @@ def get_num_species(dim, q): return len(q) - (dim + 2) -def split_conserved(dim, q): +def _split_conserved(dim, q): """Get quantities corresponding to fluid conservation equations. Return a :class:`ConservedVars` with quantities corresponding to the @@ -333,24 +331,18 @@ def _join_conserved(dim, mass, energy, momentum, species_mass=None): return result -def join_conserved(dim, mass, energy, momentum, species_mass=None): - """Create agglomerated array from quantities for each conservation eqn.""" - return _join_conserved(dim, mass=mass, energy=energy, - momentum=momentum, species_mass=species_mass) - - def make_conserved(dim, mass=None, energy=None, momentum=None, species_mass=None, q=None, scalar_quantities=None, vector_quantities=None): """Create :class:`ConservedVars` from separated conserved quantities.""" if scalar_quantities is not None: - return split_conserved(dim, q=scalar_quantities) + return _split_conserved(dim, q=scalar_quantities) if vector_quantities is not None: - return split_conserved(dim, q=vector_quantities) + return _split_conserved(dim, q=vector_quantities) if q is not None: - return split_conserved(dim, q=q) + return _split_conserved(dim, q=q) if mass is None or energy is None or momentum is None: raise ValueError("Must have one of *q* or *mass, energy, momentum*.") - return split_conserved( + return _split_conserved( dim, _join_conserved(dim, mass=mass, energy=energy, momentum=momentum, species_mass=species_mass) ) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 24cd76f79..b0287e381 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -57,10 +57,7 @@ import numpy as np # noqa from grudge.symbolic.primitives import TracePair -from grudge.eager import ( - interior_trace_pair, - cross_rank_trace_pairs -) +from grudge.trace_pair import interior_trace_pairs from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux @@ -121,10 +118,9 @@ def ns_operator(discr, eos, boundaries, cv, t=0.0, dv = eos.dependent_vars(cv) def _elbnd_flux(discr, compute_interior_flux, compute_boundary_flux, - int_tpair, xrank_pairs, boundaries): - return (compute_interior_flux(int_tpair) - + sum(compute_interior_flux(part_tpair) - for part_tpair in xrank_pairs) + int_tpairs, boundaries): + return (sum(compute_interior_flux(part_tpair) + for part_tpair in int_tpairs) + sum(compute_boundary_flux(btag) for btag in boundaries)) def grad_flux_interior(int_tpair): @@ -138,14 +134,9 @@ def grad_flux_bnd(btag): discr, btag=btag, cv=cv, eos=eos, time=t ) - cv_int_tpair = interior_trace_pair(discr, cv) - cv_part_pairs = [ - TracePair(part_tpair.dd, - interior=make_conserved(dim, q=part_tpair.int), - exterior=make_conserved(dim, q=part_tpair.ext)) - for part_tpair in cross_rank_trace_pairs(discr, cv.join())] + cv_interior = interior_trace_pairs(discr, cv) cv_flux_bnd = _elbnd_flux(discr, grad_flux_interior, grad_flux_bnd, - cv_int_tpair, cv_part_pairs, boundaries) + cv_interior, boundaries) # [Bassi_1997]_ eqn 15 (s = grad_q) grad_cv = make_conserved(dim, q=grad_operator(discr, cv.join(), @@ -158,17 +149,15 @@ def t_grad_flux_bnd(btag): time=t) gas_t = dv.temperature - t_int_tpair = TracePair("int_faces", - interior=eos.temperature(cv_int_tpair.int), - exterior=eos.temperature(cv_int_tpair.ext)) - t_part_pairs = [ - TracePair(part_tpair.dd, - interior=eos.temperature(part_tpair.int), - exterior=eos.temperature(part_tpair.ext)) - for part_tpair in cv_part_pairs] + temperature_interior = [TracePair(pair.dd, + interior=eos.temperature(pair.int), + exterior=eos.temperature(pair.ext)) + for pair in cv_interior] + t_flux_bnd = _elbnd_flux(discr, grad_flux_interior, t_grad_flux_bnd, - t_int_tpair, t_part_pairs, boundaries) + temperature_interior, boundaries) grad_t = grad_operator(discr, gas_t, t_flux_bnd) + grad_t_interior = interior_trace_pairs(discr, grad_t) # inviscid parts def finv_divergence_flux_interior(cv_tpair): @@ -181,20 +170,13 @@ def finv_divergence_flux_boundary(btag): ) # viscous parts - s_int_pair = interior_trace_pair(discr, grad_cv) - s_part_pairs = [TracePair(xrank_tpair.dd, - interior=make_conserved(dim, q=xrank_tpair.int), - exterior=make_conserved(dim, q=xrank_tpair.ext)) - for xrank_tpair in cross_rank_trace_pairs(discr, grad_cv.join())] - delt_int_pair = interior_trace_pair(discr, grad_t) - delt_part_pairs = cross_rank_trace_pairs(discr, grad_t) - num_partition_interfaces = len(cv_part_pairs) + grad_cv_interior = interior_trace_pairs(discr, grad_cv) # glob the inputs together in a tuple to use the _elbnd_flux wrapper - visc_part_inputs = [ - (cv_part_pairs[bnd_index], s_part_pairs[bnd_index], - delt_part_pairs[bnd_index]) - for bnd_index in range(num_partition_interfaces)] + viscous_flux_inputs = [ + (cv_pair, grad_cv_pair, grad_t_pair) + for cv_pair, grad_cv_pair, grad_t_pair in + zip(cv_interior, grad_cv_interior, grad_t_interior)] # viscous fluxes across interior faces (including partition and periodic bnd) def fvisc_divergence_flux_interior(tpair_tuple): @@ -212,16 +194,15 @@ def fvisc_divergence_flux_boundary(btag): vol_term = ( viscous_flux(discr, eos=eos, cv=cv, grad_cv=grad_cv, grad_t=grad_t) - inviscid_flux(discr, pressure=dv.pressure, cv=cv) - ).join() + ) bnd_term = ( _elbnd_flux( discr, fvisc_divergence_flux_interior, fvisc_divergence_flux_boundary, - (cv_int_tpair, s_int_pair, delt_int_pair), visc_part_inputs, boundaries) + viscous_flux_inputs, boundaries) - _elbnd_flux( discr, finv_divergence_flux_interior, finv_divergence_flux_boundary, - cv_int_tpair, cv_part_pairs, boundaries) - ).join() - + cv_interior, boundaries) + ) # NS RHS - return make_conserved(dim, q=div_operator(discr, vol_term, bnd_term)) + return div_operator(discr, vol_term, bnd_term) diff --git a/test/test_eos.py b/test/test_eos.py index 47a66b185..61b423dc2 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -37,8 +37,7 @@ from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext, ) from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context @@ -77,7 +76,7 @@ def test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - actx_lazy = SingleGridWorkBalancingPytatoArrayContext( + actx_lazy = PytatoPyOpenCLArrayContext( queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) From 4f6eed056880553783cfc62355320aac1456cffc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 07:05:50 -0600 Subject: [PATCH 447/873] Update CV docs --- mirgecom/fluid.py | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index c7eba50bb..46aed3c8a 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -59,15 +59,8 @@ class ConservedVars: for the canonical conserved quantities (mass, energy, momentum, and species masses) per unit volume: $(\rho,\rho{E},\rho\vec{V}, \rho{Y_s})$ from an agglomerated object array. This data structure is intimately - related to helper functions :func:`join_conserved` and :func:`split_conserved`, - which pack and unpack (respectively) quantities to-and-from flat object - array representations of the data. - - .. note:: - - The use of the terms pack and unpack here is misleading. In reality, there - is no data movement when using this dataclass to view your data. This - dataclass is entirely about the representation of the data. + related to the helper function :func:`make_conserved` which forms CV objects from + flat object array representations of the data. .. attribute:: dim @@ -122,11 +115,11 @@ class ConservedVars: $N_{\text{eq}}$ :class:`~meshmode.dof_array.DOFArray`. To use this dataclass for a fluid CV-specific view on the content of - $\mathbf{Q}$, one can call :func:`split_conserved` to get a `ConservedVars` + $\mathbf{Q}$, one can call :func:`make_conserved` to get a `ConservedVars` dataclass object that resolves the fluid CV associated with each conservation equation:: - fluid_cv = split_conserved(ndim, Q), + fluid_cv = make_conserved(dim=ndim, q=Q), after which:: @@ -143,7 +136,7 @@ class ConservedVars: :example:: - Use `join_conserved` to create an agglomerated $\mathbf{Q}$ array from the + Use :method:`join` to create an agglomerated $\mathbf{Q}$ array from the fluid conserved quantities (CV). See the first example for the definition of CV, $\mathbf{Q}$, `ndim`, @@ -163,7 +156,7 @@ class ConservedVars: An agglomerated array of fluid independent variables can then be created with:: - q = join_conserved(ndim, mass=rho, energy=rho*e, momentum=rho*v) + q = cv.join() after which *q* will be an obj array of $N_{\text{eq}}$ DOFArrays containing the fluid conserved state data. @@ -205,7 +198,8 @@ class ConservedVars: get a `ConservedVars` dataclass object that resolves the vector quantity associated with each conservation equation:: - grad_cv = split_conserved(ndim, grad_q), + grad_q = gradient_operator(discr, q) + grad_cv = split_conserved(ndim, q=grad_q), after which:: @@ -252,7 +246,7 @@ def species_mass_fractions(self): return self.species_mass / self.mass def join(self): - """Call :func:`join_conserved` on *self*.""" + """Return a flat object array representation of the conserved quantities.""" return _join_conserved( dim=self.dim, mass=self.mass, From 1a81e973521d007f4e465f4a3b6ae2f66b186189 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 07:09:22 -0600 Subject: [PATCH 448/873] Update fluid docs. --- mirgecom/fluid.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 46aed3c8a..a5ff8397a 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -161,7 +161,7 @@ class ConservedVars: after which *q* will be an obj array of $N_{\text{eq}}$ DOFArrays containing the fluid conserved state data. - Examples of this sort of use for `join_conserved` can be found in: + Examples of this sort of use for :method:`join` can be found in: - :mod:`~mirgecom.initializers` @@ -194,12 +194,12 @@ class ConservedVars: Presuming that `grad_q` is the agglomerated *MIRGE* data structure with the gradient data, this dataclass can be used to get a fluid CV-specific view on - the content of $\nabla\mathbf{Q}$. One can call :func:`split_conserved` to + the content of $\nabla\mathbf{Q}$. One can call :func:`make_conserved` to get a `ConservedVars` dataclass object that resolves the vector quantity associated with each conservation equation:: grad_q = gradient_operator(discr, q) - grad_cv = split_conserved(ndim, q=grad_q), + grad_cv = make_conserved(ndim, q=grad_q), after which:: From 07dc0f432305766f240d342dc16cf0d0b1687b3c Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 13 Dec 2021 07:14:19 -0600 Subject: [PATCH 449/873] Remove unneeded import --- test/test_bc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_bc.py b/test/test_bc.py index eacaae252..50b333a0f 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -38,7 +38,6 @@ EagerDGDiscretization, interior_trace_pair ) -from mirgecom.fluid import make_conserved from grudge.trace_pair import TracePair from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context From 3e3ab83da57ede56f919af6b6a078736a9691031 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 07:21:07 -0600 Subject: [PATCH 450/873] Remove unrecognized doc keyword. --- mirgecom/fluid.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index a5ff8397a..f50d514a1 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -136,7 +136,7 @@ class ConservedVars: :example:: - Use :method:`join` to create an agglomerated $\mathbf{Q}$ array from the + Use `join` to create an agglomerated $\mathbf{Q}$ array from the fluid conserved quantities (CV). See the first example for the definition of CV, $\mathbf{Q}$, `ndim`, @@ -161,7 +161,7 @@ class ConservedVars: after which *q* will be an obj array of $N_{\text{eq}}$ DOFArrays containing the fluid conserved state data. - Examples of this sort of use for :method:`join` can be found in: + Examples of this sort of use for `join` can be found in: - :mod:`~mirgecom.initializers` From 1a38c1856f24a63108335ad875d6aae847f6979d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 07:52:52 -0600 Subject: [PATCH 451/873] Undo production env customization --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 956014435..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-purge-join" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 5432972a23f43dedae5933a3f9f7b9e080f082dc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 07:55:23 -0600 Subject: [PATCH 452/873] Undo production env customization --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 956014435..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-purge-join" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 3c4c24506a83a38032b2d9e204436bfd32588342 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 07:56:58 -0600 Subject: [PATCH 453/873] Undo production env customization --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 956014435..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-purge-join" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 9e8824ac1157fda9bbd4212a68c932b4626c3414 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 08:01:48 -0600 Subject: [PATCH 454/873] Use productions version of Euler operator --- mirgecom/euler.py | 53 ++++++++++++----------------------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 5fabccefa..324ae8338 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -58,15 +58,12 @@ inviscid_facial_flux ) -from grudge.trace_pair import ( - local_interior_trace_pair, - cross_rank_trace_pairs -) -from mirgecom.fluid import make_conserved +from grudge.trace_pair import interior_trace_pairs from mirgecom.operators import div_operator -def euler_operator(discr, eos, boundaries, cv, time=0.0): +def euler_operator(discr, eos, boundaries, cv, time=0.0, + dv=None): r"""Compute RHS of the Euler flow equations. Returns @@ -101,44 +98,20 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): flow equations. """ # Compute volume contributions - inviscid_flux_vol = inviscid_flux(discr, eos, cv) - + inviscid_flux_vol = inviscid_flux(discr, eos.pressure(cv), cv) + interior_cv = interior_trace_pairs(discr, cv) # Compute interface contributions inviscid_flux_bnd = ( - # Rank-local contributions - inviscid_facial_flux( - discr, - eos=eos, - cv_tpair=local_interior_trace_pair(discr, cv) - ) - # Cross-rank contributions - + sum( - inviscid_facial_flux( - discr, - eos=eos, - cv_tpair=part_tpair - ) for part_tpair in cross_rank_trace_pairs(discr, cv) - ) - # Boundary condition contributions - + sum( - boundaries[btag].inviscid_boundary_flux( - discr, - btag=btag, - cv=cv, - eos=eos, - time=time - ) for btag in boundaries - ) + # Interior faces + + sum(inviscid_facial_flux(discr, eos=eos, cv_tpair=part_tpair) + for part_tpair in interior_cv) + # Domain boundaries + + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, + eos=eos, time=time) + for btag in boundaries) ) - return -div_operator(discr, inviscid_flux_vol, inviscid_flux_bnd) - -def inviscid_operator(discr, eos, boundaries, q, t=0.0): - """Interface :function:`euler_operator` with backwards-compatible API.""" - from warnings import warn - warn("Do not call inviscid_operator; it is now called euler_operator. This" - "function will disappear August 1, 2021", DeprecationWarning, stacklevel=2) - return euler_operator(discr, eos, boundaries, make_conserved(discr.dim, q=q), t) + return -div_operator(discr, inviscid_flux_vol, inviscid_flux_bnd) # By default, run unitless From e080be09d8252336510f5a9cff0363342dcc49b2 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 13 Dec 2021 08:09:30 -0600 Subject: [PATCH 455/873] Customize production env (temporarily) --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index e07e9b4af..bbf63cfe9 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-state-handling" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-state-handling-overintegration" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From b3e589144e1d418ce7692f99f29bcca173fa7c90 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 08:12:27 -0600 Subject: [PATCH 456/873] Revert to main-compatible Euler API --- mirgecom/euler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 324ae8338..78d993bd5 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -98,7 +98,7 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, flow equations. """ # Compute volume contributions - inviscid_flux_vol = inviscid_flux(discr, eos.pressure(cv), cv) + inviscid_flux_vol = inviscid_flux(discr, eos, cv) interior_cv = interior_trace_pairs(discr, cv) # Compute interface contributions inviscid_flux_bnd = ( @@ -106,7 +106,7 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, + sum(inviscid_facial_flux(discr, eos=eos, cv_tpair=part_tpair) for part_tpair in interior_cv) # Domain boundaries - + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, + + sum(boundaries[btag].inviscid_boundary_flux(discr, btag=btag, cv=cv, eos=eos, time=time) for btag in boundaries) ) From 92c7f4740d1e112de4bbc396ecf050e66d5e3624 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 08:13:48 -0600 Subject: [PATCH 457/873] Use production version of Euler API --- mirgecom/euler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 78d993bd5..324ae8338 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -98,7 +98,7 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, flow equations. """ # Compute volume contributions - inviscid_flux_vol = inviscid_flux(discr, eos, cv) + inviscid_flux_vol = inviscid_flux(discr, eos.pressure(cv), cv) interior_cv = interior_trace_pairs(discr, cv) # Compute interface contributions inviscid_flux_bnd = ( @@ -106,7 +106,7 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0, + sum(inviscid_facial_flux(discr, eos=eos, cv_tpair=part_tpair) for part_tpair in interior_cv) # Domain boundaries - + sum(boundaries[btag].inviscid_boundary_flux(discr, btag=btag, cv=cv, + + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, eos=eos, time=time) for btag in boundaries) ) From 3f3952268e7b5f8bfbf257b892a96e9fbdc93776 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 09:15:35 -0600 Subject: [PATCH 458/873] Correct spelling of production branch. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index bbf63cfe9..28bb6558d 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-state-handling-overintegration" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="thg/production-state-handling-overintegration" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From b75ffa8d006dd9d07b86a65128eb541d465c698c Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Mon, 13 Dec 2021 09:18:47 -0600 Subject: [PATCH 459/873] Fix av api wrappers --- mirgecom/artificial_viscosity.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index d25222811..54aac9d13 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -233,9 +233,15 @@ def artificial_viscosity(discr, t, eos, boundaries, q, alpha, **kwargs): from warnings import warn warn("Do not call artificial_viscosity; it is now called av_laplacian_operator." " This function will disappear in 2022", DeprecationWarning, stacklevel=2) + from mirgecom.fluid import ConservedVars + + if not isinstance(q, ConservedVars): + q = make_conserved(discr.dim, q=q) + return av_laplacian_operator( discr=discr, cv=make_conserved(discr.dim, q=q), alpha=alpha, - boundaries=boundaries, boundary_kwargs={"t": t, "eos": eos}, **kwargs) + boundaries=boundaries, + boundary_kwargs={"t": t, "eos": eos}, **kwargs).join() def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): @@ -243,9 +249,15 @@ def av_operator(discr, boundaries, q, alpha, boundary_kwargs=None, **kwargs): from warnings import warn warn("Do not call av_operator; it is now called av_laplacian_operator. This" "function will disappear in 2022", DeprecationWarning, stacklevel=2) + from mirgecom.fluid import ConservedVars + + if not isinstance(q, ConservedVars): + q = make_conserved(discr.dim, q=q) + return av_laplacian_operator( - discr=discr, cv=make_conserved(discr.dim, q=q), alpha=alpha, - boundaries=boundaries, boundary_kwargs=boundary_kwargs, **kwargs) + discr=discr, cv=q, alpha=alpha, + boundaries=boundaries, + boundary_kwargs=boundary_kwargs, **kwargs).join() def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): From 1d310e5fd328456cf627f327418c212b7a52e042 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Mon, 13 Dec 2021 10:05:29 -0600 Subject: [PATCH 460/873] added test file --- test/test_flux.py | 391 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 test/test_flux.py diff --git a/test/test_flux.py b/test/test_flux.py new file mode 100644 index 000000000..a341abe70 --- /dev/null +++ b/test/test_flux.py @@ -0,0 +1,391 @@ +"""Test the different flux methods.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import math +import numpy as np +import numpy.random +import numpy.linalg as la # noqa +import pyopencl.clmath # noqa +import logging +import pytest + +from pytools.obj_array import ( + flat_obj_array, + make_obj_array, +) + +from arraycontext import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.dof_array import DOFArray +from grudge.eager import interior_trace_pair +from grudge.symbolic.primitives import TracePair +from mirgecom.fluid import make_conserved +from mirgecom.eos import IdealSingleGas +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) +from grudge.eager import EagerDGDiscretization +from meshmode.array_context import ( # noqa + pytest_generate_tests_for_pyopencl_array_context + as pytest_generate_tests) +from mirgecom.inviscid import inviscid_flux + +logger = logging.getLogger(__name__) + +@pytest.mark.parametrize("nspecies", [0, 1, 10]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("norm_dir", [1, -1]) +@pytest.mark.parametrize("vel_mag", [0, 1, -1]) + +#@pytest.mark.parametrize("nspecies", [0]) +#@pytest.mark.parametrize("dim", [1]) +#@pytest.mark.parametrize("norm_dir", [1]) +#@pytest.mark.parametrize("vel_mag", [0]) +def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): + """Check inviscid flux against exact expected result. + + Directly check hll flux routine, + :func:`mirgecom.flux.hll`, + against the exact expected result. This test is designed to fail if the flux + routine is broken. + + The expected inviscid flux is: + F(q) = + """ + tolerance = 1e-12 + actx = actx_factory() + numeq = dim + 2 + nspecies + + gamma = 1.4 + eos = IdealSingleGas(gamma=gamma) + gas_model = GasModel(eos=eos) + # interior state + p0 = 15.0 + rho0 = 2.0 + vel0 = np.zeros(shape=dim, ) + for i in range(dim): + vel0[i] = 3.0*vel_mag + (i+1) + energy0 = p0/(gamma-1) + 0.5*rho0*np.dot(vel0, vel0) + y0 = np.zeros(shape=nspecies, ) + for i in range(nspecies): + y0[i] = (i+1) + c0 = np.sqrt(gamma*p0/rho0) + # exterior state + p1 = 20.0 + rho1 = 4.0 + vel1 = np.zeros(shape=dim, ) + for i in range(dim): + vel1[i] = 1.0*vel_mag + (i+1) + energy1 = p1/(gamma-1) + 0.5*rho1*np.dot(vel1, vel1) + y1 = np.zeros(shape=nspecies, ) + for i in range(nspecies): + y1[i] = 2*(i+1) + c1 = np.sqrt(gamma*p1/rho1) + + mass_int = DOFArray(actx, data=(actx.from_numpy(np.array(rho0)), )) + vel_int = make_obj_array([vel0[idir] for idir in range(dim)]) + mom_int = mass_int*vel_int + energy_int = p0/0.4 + 0.5 * np.dot(mom_int, mom_int)/mass_int + species_mass_int = mass_int*make_obj_array([y0[idir] for idir in range(nspecies)]) + cv_int = make_conserved(dim, mass=mass_int, energy=energy_int, + momentum=mom_int, species_mass=species_mass_int) + fluid_state_int = make_fluid_state(cv=cv_int, gas_model=gas_model) + p_int = fluid_state_int.pressure + c_int = fluid_state_int.speed_of_sound + flux_int = inviscid_flux(fluid_state_int) + + #mass_ext = DOFArray(actx, data=(rho1, )) + mass_ext = DOFArray(actx, data=(actx.from_numpy(np.array(rho1)), )) + vel_ext = make_obj_array([vel1[idir] for idir in range(dim)]) + mom_ext = mass_ext*vel_ext + energy_ext = p1/0.4 + 0.5 * np.dot(mom_ext, mom_ext)/mass_ext + species_mass_ext = mass_ext*make_obj_array([y1[idir] for idir in range(nspecies)]) + cv_ext = make_conserved(dim, mass=mass_ext, energy=energy_ext, + momentum=mom_ext, species_mass=species_mass_ext) + fluid_state_ext = make_fluid_state(cv=cv_ext, gas_model=gas_model) + p_ext = fluid_state_ext.pressure + c_ext = fluid_state_ext.speed_of_sound + flux_ext = inviscid_flux(fluid_state_ext) + + print(f"{cv_int=}") + print(f"{flux_int=}") + print(f"{cv_ext=}") + print(f"{flux_ext=}") + + # interface normal + normal = np.ones(shape=dim, ) + mag = np.linalg.norm(normal) + normal = norm_dir*normal/mag + + state_pair = TracePair("vol", interior=fluid_state_int, exterior=fluid_state_ext) + + # code passes in fluxes in the direction of the surface normal, + # so we will too + from mirgecom.inviscid import inviscid_flux_rusanov + flux_bnd = inviscid_flux_rusanov(state_pair, gas_model, normal) + + print(f"{normal=}") + print(f"{flux_ext@normal=}") + print(f"{flux_int@normal=}") + + # compute the exact flux in the interface normal direction, as calculated by lfr + + # wave speed + lam = np.maximum(np.linalg.norm(vel0)+c0, np.linalg.norm(vel1)+c1) + print(f"{lam=}") + + # compute the velocity in the direction of the surface normal + vel0_norm = np.dot(vel0, normal) + vel1_norm = np.dot(vel1, normal) + + mass_flux_exact = 0.5*(rho0*vel0_norm + rho1*vel1_norm - + lam*(rho1 - rho0)) + mom_flux_exact = np.zeros(shape=(dim, dim), ) + for i in range(dim): + for j in range(dim): + mom_flux_exact[i][j] = (rho0*vel0[i]*vel0[j] + (p0 if i == j else 0) + + rho1*vel1[i]*vel1[j] + (p1 if i == j else 0))/2. + mom_flux_norm_exact = np.zeros(shape=dim, ) + for i in range(dim): + mom_flux_norm_exact[i] = (np.dot(mom_flux_exact[i], normal) - + 0.5*lam*(rho1*vel1[i] - rho0*vel0[i])) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) + energy_flux_exact = 0.5*(vel1_norm*(energy1+p1) + vel0_norm*(energy0+p0) - + lam*(energy1 - energy0)) + species_mass_flux_exact = 0.5*(vel0_norm*y0*rho0 + vel1_norm*y1*rho1 - + lam*(y1*rho1 - y0*rho0)) + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) + + flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, energy=energy_flux_exact, + momentum=mom_flux_norm_exact, species_mass=species_mass_flux_exact) + + print(f"{flux_bnd=}") + print(f"{flux_bnd_exact=}") + + flux_resid = flux_bnd - flux_bnd_exact + print(f"{flux_resid=}") + + assert np.abs(actx.np.linalg.norm(flux_resid)) < tolerance + + #assert 1==0 + +#@pytest.mark.parametrize("nspecies", [0]) +#@pytest.mark.parametrize("dim", [1]) +#@pytest.mark.parametrize("norm_dir", [1]) +#@pytest.mark.parametrize("vel_mag", [0]) + +# velocities are tuned to exercise different wave configurations: +# vel_mag = 0, rarefaction, zero velocity +# vel_mag = 1, right traveling rarefaction +# vel_mag = 2, right traveling shock +# vel_mag = -1, left traveling rarefaction +# vel_mag = -4, right traveling shock +@pytest.mark.parametrize("vel_mag", [0, 1, 2, -1, -4]) +@pytest.mark.parametrize("nspecies", [0, 1, 10]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("norm_dir", [1, -1]) +def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): + """Check inviscid flux against exact expected result. + + Directly check hll flux routine, + :func:`mirgecom.flux.hll`, + against the exact expected result. This test is designed to fail if the flux + routine is broken. + + The expected inviscid flux is: + F(q) = + """ + tolerance = 1e-12 + actx = actx_factory() + numeq = dim + 2 + nspecies + + gamma = 1.4 + eos = IdealSingleGas(gamma=gamma) + gas_model = GasModel(eos=eos) + # interior state + p0 = 15.0 + rho0 = 2.0 + vel0 = np.zeros(shape=dim, ) + for i in range(dim): + vel0[i] = 3.0*vel_mag + (i+1) + energy0 = p0/(gamma-1) + 0.5*rho0*np.dot(vel0, vel0) + y0 = np.zeros(shape=nspecies, ) + for i in range(nspecies): + y0[i] = (i+1) + c0 = np.sqrt(gamma*p0/rho0) + # exterior state + p1 = 20.0 + rho1 = 4.0 + vel1 = np.zeros(shape=dim, ) + for i in range(dim): + vel1[i] = 1.0*vel_mag + (i+1) + energy1 = p1/(gamma-1) + 0.5*rho1*np.dot(vel1, vel1) + y1 = np.zeros(shape=nspecies, ) + for i in range(nspecies): + y1[i] = 2*(i+1) + c1 = np.sqrt(gamma*p1/rho1) + + mass_int = DOFArray(actx, data=(actx.from_numpy(np.array(rho0)), )) + vel_int = make_obj_array([vel0[idir] for idir in range(dim)]) + mom_int = mass_int*vel_int + energy_int = p0/0.4 + 0.5 * np.dot(mom_int, mom_int)/mass_int + species_mass_int = mass_int*make_obj_array([y0[idir] for idir in range(nspecies)]) + cv_int = make_conserved(dim, mass=mass_int, energy=energy_int, + momentum=mom_int, species_mass=species_mass_int) + fluid_state_int = make_fluid_state(cv=cv_int, gas_model=gas_model) + p_int = fluid_state_int.pressure + c_int = fluid_state_int.speed_of_sound + flux_int = inviscid_flux(fluid_state_int) + + #mass_ext = DOFArray(actx, data=(rho1, )) + mass_ext = DOFArray(actx, data=(actx.from_numpy(np.array(rho1)), )) + vel_ext = make_obj_array([vel1[idir] for idir in range(dim)]) + mom_ext = mass_ext*vel_ext + energy_ext = p1/0.4 + 0.5 * np.dot(mom_ext, mom_ext)/mass_ext + species_mass_ext = mass_ext*make_obj_array([y1[idir] for idir in range(nspecies)]) + cv_ext = make_conserved(dim, mass=mass_ext, energy=energy_ext, + momentum=mom_ext, species_mass=species_mass_ext) + fluid_state_ext = make_fluid_state(cv=cv_ext, gas_model=gas_model) + p_ext = fluid_state_ext.pressure + c_ext = fluid_state_ext.speed_of_sound + flux_ext = inviscid_flux(fluid_state_ext) + + print(f"{cv_int=}") + print(f"{flux_int=}") + print(f"{cv_ext=}") + print(f"{flux_ext=}") + + # interface normal + normal = np.ones(shape=dim, ) + mag = np.linalg.norm(normal) + normal = norm_dir*normal/mag + + state_pair = TracePair("vol", interior=fluid_state_int, exterior=fluid_state_ext) + + # code passes in fluxes in the direction of the surface normal, + # so we will too + from mirgecom.inviscid import inviscid_flux_hll + flux_bnd = inviscid_flux_hll(state_pair, gas_model, normal) + + + print(f"{normal=}") + print(f"{flux_ext@normal=}") + print(f"{flux_int@normal=}") + + # compute the exact flux in the interface normal direction, as calculated by hll + + # compute the left and right wave_speeds + u_int = np.dot(vel0, normal) + u_ext = np.dot(vel1, normal) + p_star = (0.5*(p0 + p1) + (1./8.)*(u_int - u_ext)* + (rho0 + rho1)*(c0 + c1)) + print(f"{p_star=}") + + # the code checks that the pressure ratio is > 0, don't need to do that here + q_int = 1. + q_ext = 1. + if p_star > p0: + q_int = np.sqrt(1 + (gamma + 1)/(2*gamma)*(p_star/p0 - 1)) + if p_star > p1: + q_ext = np.sqrt(1 + (gamma + 1)/(2*gamma)*(p_star/p1 - 1)) + s_int = u_int - c0*q_int + s_ext = u_ext + c1*q_ext + + print(f"wave speeds {s_int=} {s_ext=}") + + # compute the velocity in the direction of the surface normal + vel0_norm = np.dot(vel0, normal) + vel1_norm = np.dot(vel1, normal) + if s_ext <= 0.: + print("exterior flux") + # the flux from the exterior state + print("s_int <= 0") + mass_flux_exact = rho1*vel1_norm + mom_flux_exact = np.zeros(shape=(dim, dim), ) + for i in range(dim): + for j in range(dim): + mom_flux_exact[i][j] = rho1*vel1[i]*vel1[j] + (p1 if i == j else 0) + mom_flux_norm_exact = np.zeros(shape=dim, ) + for i in range(dim): + mom_flux_norm_exact[i] = np.dot(mom_flux_exact[i], normal) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) + energy_flux_exact = vel1_norm*(energy1+p1) + species_mass_flux_exact = vel1_norm*y1*rho1 + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) + + elif s_int >= 0.: + print("interior flux") + # the flux from the interior state + mass_flux_exact = rho0*vel0_norm + mom_flux_exact = np.zeros(shape=(dim, dim), ) + for i in range(dim): + for j in range(dim): + mom_flux_exact[i][j] = rho0*vel0[i]*vel0[j] + (p0 if i == j else 0) + mom_flux_norm_exact = np.zeros(shape=dim, ) + for i in range(dim): + mom_flux_norm_exact[i] = np.dot(mom_flux_exact[i], normal) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) + energy_flux_exact = vel0_norm*(energy0+p0) + species_mass_flux_exact = vel0_norm*y0*rho0 + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) + + else: + print("star flux") + # the flux from the star state + mass_flux_exact = (s_ext*rho0*vel0_norm - + s_int*rho1*vel1_norm + + s_int*s_ext*(rho1 - rho0))/(s_ext - s_int) + mom_flux_exact = np.zeros(shape=(dim, dim), ) + for i in range(dim): + for j in range(dim): + mom_flux_exact[i][j] = (s_ext*(rho0*vel0[i]*vel0[j] + (p0 if i == j else 0)) - + s_int*(rho1*vel1[i]*vel1[j] + (p1 if i == j else 0))) + mom_flux_norm_exact = np.zeros(shape=dim, ) + for i in range(dim): + mom_flux_norm_exact[i] = (np.dot(mom_flux_exact[i], normal) + + s_int*s_ext*(rho1*vel1[i] - rho0*vel0[i]))/(s_ext - s_int) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) + energy_flux_exact = (s_ext*vel0_norm*(energy0+p0) - + s_int*vel1_norm*(energy1+p1) + + s_int*s_ext*(energy1 - energy0))/(s_ext - s_int) + species_mass_flux_exact = (s_ext*vel0_norm*rho0*y0 - + s_int*vel1_norm*rho1*y1 + + s_int*s_ext*(rho1*y1 - rho0*y0))/(s_ext - s_int) + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) + + flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, energy=energy_flux_exact, + momentum=mom_flux_norm_exact, species_mass=species_mass_flux_exact) + + print(f"{flux_bnd=}") + print(f"{flux_bnd_exact=}") + + flux_resid = flux_bnd - flux_bnd_exact + print(f"{flux_resid=}") + + assert np.abs(actx.np.linalg.norm(flux_resid)) < tolerance + + #assert 1==0 From 6e2e4d3e1178de7190ffb17ec21cf4d7732c5137 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 13 Dec 2021 10:34:41 -0600 Subject: [PATCH 461/873] Remove extraneous argument to Euler operator --- mirgecom/euler.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 78d993bd5..c21da5ea6 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -62,8 +62,7 @@ from mirgecom.operators import div_operator -def euler_operator(discr, eos, boundaries, cv, time=0.0, - dv=None): +def euler_operator(discr, eos, boundaries, cv, time=0.0): r"""Compute RHS of the Euler flow equations. Returns From d124bec7cc6c3c9df9a9c967a708f2103e3f13b5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 10:58:17 -0600 Subject: [PATCH 462/873] Undo downstream production env customization --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 28bb6558d..e07e9b4af 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="thg/production-state-handling-overintegration" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-state-handling" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 615f981a8aa2f3ba2e571476dbd4d12a16268555 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 11:30:23 -0600 Subject: [PATCH 463/873] Placate flake8 --- test/test_operators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_operators.py b/test/test_operators.py index 2bc172ef8..4909a71ca 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -143,6 +143,7 @@ def central_flux_boundary(actx, discr, soln_func, btag): # TODO: Generalize mirgecom.symbolic to work with array containers def sym_grad(dim, expr): + """Do symbolic grad.""" if isinstance(expr, ConservedVars): return make_conserved( dim, q=sym_grad(dim, expr.join())) @@ -240,7 +241,6 @@ def sym_eval(expr, x_vec): dd_faces = as_dofdesc("all_faces") test_grad = grad_operator(discr, dd_vol, dd_faces, test_data, test_data_flux_bnd) - print(f"{test_grad=}") grad_err = \ From c72e969c7b4194479add942304206cc386820be1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 11:37:10 -0600 Subject: [PATCH 464/873] Restore missing fluid state creation --- test/test_euler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_euler.py b/test/test_euler.py index 5e689ef23..bf5bb5f19 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -546,6 +546,7 @@ def rhs(t, q): cv = rk4_step(cv, t, dt, rhs) cv = filter_modally(discr, "vol", cutoff, frfunc, cv) + fluid_state = make_fluid_state(cv, gas_model) t += dt istep += 1 From 43cc84d7681786f9335a197a3bcd1c71b2883db0 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Mon, 13 Dec 2021 11:48:24 -0600 Subject: [PATCH 465/873] cleanup up a bit --- mirgecom/inviscid.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index cdd32f01c..bc78063c4 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -158,11 +158,9 @@ def inviscid_flux_hll(state_pair, gas_model, normal, **kwargs): wavespeed_int = u_int - c_int*q_int wavespeed_ext = u_ext + c_ext*q_ext - print(f"{wavespeed_int=}") - print(f"{wavespeed_ext=}") - from mirgecom.flux import hll_flux_driver - return hll_flux_driver(state_pair, inviscid_flux, wavespeed_int, wavespeed_ext, normal) + return hll_flux_driver(state_pair, inviscid_flux, + wavespeed_int, wavespeed_ext, normal) def inviscid_facial_flux(discr, gas_model, state_pair, From 0357053a0bd0e8f0eb980fab79f01b96f6e6ac63 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 13:05:20 -0600 Subject: [PATCH 466/873] Placate flake8, sharpen docs --- mirgecom/flux.py | 23 +++++-- mirgecom/inviscid.py | 9 +-- test/test_flux.py | 157 +++++++++++++++++++------------------------ 3 files changed, 92 insertions(+), 97 deletions(-) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index 837587845..6fe6230c7 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -1,12 +1,21 @@ -""":mod:`mirgecom.flux` provides inter-elemental flux routines. +""":mod:`mirgecom.flux` provides generic inter-elemental flux routines. -Numerical Flux Routines -^^^^^^^^^^^^^^^^^^^^^^^ +Low-level interfaces +^^^^^^^^^^^^^^^^^^^^ + +.. autofunction:: num_flux_lfr +.. autofunction:: num_flux_central + +State-to-flux drivers +^^^^^^^^^^^^^^^^^^^^^ + +.. autofunction:: hll_flux_driver + +Flux pair interfaces for operators +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. autofunction:: gradient_flux_central .. autofunction:: divergence_flux_central -.. autofunction:: flux_lfr -.. autofunction:: divergence_flux_lfr """ __copyright__ = """ @@ -55,8 +64,8 @@ def hll_flux_driver(state_pair, physical_flux_func, f_plus = physical_flux_func(state_pair.ext)@normal q_minus = state_pair.int.cv q_plus = state_pair.ext.cv - f_star = (s_plus*f_minus - s_minus*f_plus + - s_plus*s_minus*(q_plus - q_minus))/(s_plus - s_minus) + f_star = (s_plus*f_minus - s_minus*f_plus + + s_plus*s_minus*(q_plus - q_minus))/(s_plus - s_minus) # choose the correct f contribution based on the wave speeds f_check_minus = actx.np.greater_equal(s_minus, zeros)*(0*f_minus + 1.0) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 3e5ee5d2f..095970a04 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -105,10 +105,11 @@ def inviscid_flux_rusanov(state_pair, gas_model, normal, **kwargs): q_minus=state_pair.int.cv, q_plus=state_pair.ext.cv, lam=lam) + def inviscid_flux_hll(state_pair, gas_model, normal, **kwargs): r"""High-level interface for inviscid facial flux using HLL numerical flux. - The Harten, Lax, and van Leer approximate riemann numerical flux is calculated as: + The Harten, Lax, van Leer approximate riemann numerical flux is calculated as: .. math:: @@ -120,7 +121,7 @@ def inviscid_flux_hll(state_pair, gas_model, normal, **kwargs): the inviscid fluid flux, $\hat{n}$ is the face normal, and $\lambda$ is the *local* maximum fluid wavespeed. """ - #calculate left/right wavespeeds + # calculate left/right wavespeeds actx = state_pair.int.array_context ones = 0.*state_pair.int.mass_density + 1. @@ -135,8 +136,8 @@ def inviscid_flux_hll(state_pair, gas_model, normal, **kwargs): c_int = state_pair.int.speed_of_sound c_ext = state_pair.ext.speed_of_sound - p_star = (0.5*(p_int + p_ext) + (1./8.)*(u_int - u_ext)* - (rho_int + rho_ext)*(c_int + c_ext)) + p_star = (0.5*(p_int + p_ext) + (1./8.)*(u_int - u_ext) + * (rho_int + rho_ext) * (c_int + c_ext)) gamma_int = gas_model.eos.gamma(state_pair.int.cv) gamma_ext = gas_model.eos.gamma(state_pair.ext.cv) diff --git a/test/test_flux.py b/test/test_flux.py index a341abe70..6b1dc0a11 100644 --- a/test/test_flux.py +++ b/test/test_flux.py @@ -24,7 +24,6 @@ THE SOFTWARE. """ -import math import numpy as np import numpy.random import numpy.linalg as la # noqa @@ -32,15 +31,9 @@ import logging import pytest -from pytools.obj_array import ( - flat_obj_array, - make_obj_array, -) - -from arraycontext import thaw +from pytools.obj_array import make_obj_array from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.dof_array import DOFArray -from grudge.eager import interior_trace_pair from grudge.symbolic.primitives import TracePair from mirgecom.fluid import make_conserved from mirgecom.eos import IdealSingleGas @@ -48,7 +41,6 @@ GasModel, make_fluid_state ) -from grudge.eager import EagerDGDiscretization from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) @@ -56,15 +48,11 @@ logger = logging.getLogger(__name__) + @pytest.mark.parametrize("nspecies", [0, 1, 10]) @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("norm_dir", [1, -1]) @pytest.mark.parametrize("vel_mag", [0, 1, -1]) - -#@pytest.mark.parametrize("nspecies", [0]) -#@pytest.mark.parametrize("dim", [1]) -#@pytest.mark.parametrize("norm_dir", [1]) -#@pytest.mark.parametrize("vel_mag", [0]) def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): """Check inviscid flux against exact expected result. @@ -78,7 +66,6 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): """ tolerance = 1e-12 actx = actx_factory() - numeq = dim + 2 + nspecies gamma = 1.4 eos = IdealSingleGas(gamma=gamma) @@ -108,27 +95,26 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): mass_int = DOFArray(actx, data=(actx.from_numpy(np.array(rho0)), )) vel_int = make_obj_array([vel0[idir] for idir in range(dim)]) - mom_int = mass_int*vel_int + mom_int = mass_int*vel_int energy_int = p0/0.4 + 0.5 * np.dot(mom_int, mom_int)/mass_int - species_mass_int = mass_int*make_obj_array([y0[idir] for idir in range(nspecies)]) + species_mass_int = mass_int*make_obj_array([y0[idir] + for idir in range(nspecies)]) cv_int = make_conserved(dim, mass=mass_int, energy=energy_int, momentum=mom_int, species_mass=species_mass_int) + fluid_state_int = make_fluid_state(cv=cv_int, gas_model=gas_model) - p_int = fluid_state_int.pressure - c_int = fluid_state_int.speed_of_sound flux_int = inviscid_flux(fluid_state_int) - #mass_ext = DOFArray(actx, data=(rho1, )) mass_ext = DOFArray(actx, data=(actx.from_numpy(np.array(rho1)), )) vel_ext = make_obj_array([vel1[idir] for idir in range(dim)]) - mom_ext = mass_ext*vel_ext + mom_ext = mass_ext*vel_ext energy_ext = p1/0.4 + 0.5 * np.dot(mom_ext, mom_ext)/mass_ext - species_mass_ext = mass_ext*make_obj_array([y1[idir] for idir in range(nspecies)]) + species_mass_ext = mass_ext*make_obj_array([y1[idir] + for idir in range(nspecies)]) cv_ext = make_conserved(dim, mass=mass_ext, energy=energy_ext, momentum=mom_ext, species_mass=species_mass_ext) + fluid_state_ext = make_fluid_state(cv=cv_ext, gas_model=gas_model) - p_ext = fluid_state_ext.pressure - c_ext = fluid_state_ext.speed_of_sound flux_ext = inviscid_flux(fluid_state_ext) print(f"{cv_int=}") @@ -143,7 +129,7 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): state_pair = TracePair("vol", interior=fluid_state_int, exterior=fluid_state_ext) - # code passes in fluxes in the direction of the surface normal, + # code passes in fluxes in the direction of the surface normal, # so we will too from mirgecom.inviscid import inviscid_flux_rusanov flux_bnd = inviscid_flux_rusanov(state_pair, gas_model, normal) @@ -154,7 +140,7 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): # compute the exact flux in the interface normal direction, as calculated by lfr - # wave speed + # wave speed lam = np.maximum(np.linalg.norm(vel0)+c0, np.linalg.norm(vel1)+c1) print(f"{lam=}") @@ -162,26 +148,30 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): vel0_norm = np.dot(vel0, normal) vel1_norm = np.dot(vel1, normal) - mass_flux_exact = 0.5*(rho0*vel0_norm + rho1*vel1_norm - - lam*(rho1 - rho0)) + mass_flux_exact = 0.5*(rho0*vel0_norm + rho1*vel1_norm + - lam*(rho1 - rho0)) mom_flux_exact = np.zeros(shape=(dim, dim), ) for i in range(dim): for j in range(dim): - mom_flux_exact[i][j] = (rho0*vel0[i]*vel0[j] + (p0 if i == j else 0) + - rho1*vel1[i]*vel1[j] + (p1 if i == j else 0))/2. + mom_flux_exact[i][j] = (rho0*vel0[i]*vel0[j]+(p0 if i == j else 0) + + rho1*vel1[i]*vel1[j]+(p1 if i == j else 0))/2. mom_flux_norm_exact = np.zeros(shape=dim, ) for i in range(dim): - mom_flux_norm_exact[i] = (np.dot(mom_flux_exact[i], normal) - - 0.5*lam*(rho1*vel1[i] - rho0*vel0[i])) - mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) - energy_flux_exact = 0.5*(vel1_norm*(energy1+p1) + vel0_norm*(energy0+p0) - - lam*(energy1 - energy0)) - species_mass_flux_exact = 0.5*(vel0_norm*y0*rho0 + vel1_norm*y1*rho1 - - lam*(y1*rho1 - y0*rho0)) - species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) - - flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, energy=energy_flux_exact, - momentum=mom_flux_norm_exact, species_mass=species_mass_flux_exact) + mom_flux_norm_exact[i] = (np.dot(mom_flux_exact[i], normal) + - 0.5*lam*(rho1*vel1[i] - rho0*vel0[i])) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] + for idim in range(dim)]) + energy_flux_exact = 0.5*(vel1_norm*(energy1+p1) + vel0_norm*(energy0+p0) + - lam*(energy1 - energy0)) + species_mass_flux_exact = 0.5*(vel0_norm*y0*rho0 + vel1_norm*y1*rho1 + - lam*(y1*rho1 - y0*rho0)) + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] + for ispec in range(nspecies)]) + + flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, + energy=energy_flux_exact, + momentum=mom_flux_norm_exact, + species_mass=species_mass_flux_exact) print(f"{flux_bnd=}") print(f"{flux_bnd_exact=}") @@ -191,12 +181,6 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): assert np.abs(actx.np.linalg.norm(flux_resid)) < tolerance - #assert 1==0 - -#@pytest.mark.parametrize("nspecies", [0]) -#@pytest.mark.parametrize("dim", [1]) -#@pytest.mark.parametrize("norm_dir", [1]) -#@pytest.mark.parametrize("vel_mag", [0]) # velocities are tuned to exercise different wave configurations: # vel_mag = 0, rarefaction, zero velocity @@ -221,7 +205,6 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): """ tolerance = 1e-12 actx = actx_factory() - numeq = dim + 2 + nspecies gamma = 1.4 eos = IdealSingleGas(gamma=gamma) @@ -251,27 +234,24 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): mass_int = DOFArray(actx, data=(actx.from_numpy(np.array(rho0)), )) vel_int = make_obj_array([vel0[idir] for idir in range(dim)]) - mom_int = mass_int*vel_int + mom_int = mass_int*vel_int energy_int = p0/0.4 + 0.5 * np.dot(mom_int, mom_int)/mass_int - species_mass_int = mass_int*make_obj_array([y0[idir] for idir in range(nspecies)]) + species_mass_int = mass_int*make_obj_array([y0[idir] + for idir in range(nspecies)]) cv_int = make_conserved(dim, mass=mass_int, energy=energy_int, momentum=mom_int, species_mass=species_mass_int) fluid_state_int = make_fluid_state(cv=cv_int, gas_model=gas_model) - p_int = fluid_state_int.pressure - c_int = fluid_state_int.speed_of_sound flux_int = inviscid_flux(fluid_state_int) - #mass_ext = DOFArray(actx, data=(rho1, )) mass_ext = DOFArray(actx, data=(actx.from_numpy(np.array(rho1)), )) vel_ext = make_obj_array([vel1[idir] for idir in range(dim)]) - mom_ext = mass_ext*vel_ext + mom_ext = mass_ext*vel_ext energy_ext = p1/0.4 + 0.5 * np.dot(mom_ext, mom_ext)/mass_ext - species_mass_ext = mass_ext*make_obj_array([y1[idir] for idir in range(nspecies)]) + species_mass_ext = mass_ext*make_obj_array([y1[idir] + for idir in range(nspecies)]) cv_ext = make_conserved(dim, mass=mass_ext, energy=energy_ext, momentum=mom_ext, species_mass=species_mass_ext) fluid_state_ext = make_fluid_state(cv=cv_ext, gas_model=gas_model) - p_ext = fluid_state_ext.pressure - c_ext = fluid_state_ext.speed_of_sound flux_ext = inviscid_flux(fluid_state_ext) print(f"{cv_int=}") @@ -286,12 +266,9 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): state_pair = TracePair("vol", interior=fluid_state_int, exterior=fluid_state_ext) - # code passes in fluxes in the direction of the surface normal, - # so we will too from mirgecom.inviscid import inviscid_flux_hll flux_bnd = inviscid_flux_hll(state_pair, gas_model, normal) - print(f"{normal=}") print(f"{flux_ext@normal=}") print(f"{flux_int@normal=}") @@ -301,8 +278,8 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): # compute the left and right wave_speeds u_int = np.dot(vel0, normal) u_ext = np.dot(vel1, normal) - p_star = (0.5*(p0 + p1) + (1./8.)*(u_int - u_ext)* - (rho0 + rho1)*(c0 + c1)) + p_star = (0.5*(p0 + p1) + (1./8.)*(u_int - u_ext) + * (rho0 + rho1) * (c0 + c1)) print(f"{p_star=}") # the code checks that the pressure ratio is > 0, don't need to do that here @@ -332,10 +309,12 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): mom_flux_norm_exact = np.zeros(shape=dim, ) for i in range(dim): mom_flux_norm_exact[i] = np.dot(mom_flux_exact[i], normal) - mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] + for idim in range(dim)]) energy_flux_exact = vel1_norm*(energy1+p1) species_mass_flux_exact = vel1_norm*y1*rho1 - species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] + for ispec in range(nspecies)]) elif s_int >= 0.: print("interior flux") @@ -348,37 +327,45 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): mom_flux_norm_exact = np.zeros(shape=dim, ) for i in range(dim): mom_flux_norm_exact[i] = np.dot(mom_flux_exact[i], normal) - mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] + for idim in range(dim)]) energy_flux_exact = vel0_norm*(energy0+p0) species_mass_flux_exact = vel0_norm*y0*rho0 - species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] + for ispec in range(nspecies)]) else: print("star flux") # the flux from the star state - mass_flux_exact = (s_ext*rho0*vel0_norm - - s_int*rho1*vel1_norm + - s_int*s_ext*(rho1 - rho0))/(s_ext - s_int) + mass_flux_exact = (s_ext*rho0*vel0_norm - s_int*rho1*vel1_norm + + s_int*s_ext*(rho1 - rho0))/(s_ext - s_int) mom_flux_exact = np.zeros(shape=(dim, dim), ) for i in range(dim): for j in range(dim): - mom_flux_exact[i][j] = (s_ext*(rho0*vel0[i]*vel0[j] + (p0 if i == j else 0)) - - s_int*(rho1*vel1[i]*vel1[j] + (p1 if i == j else 0))) + mom_flux_exact[i][j] = (s_ext*(rho0*vel0[i]*vel0[j] + + (p0 if i == j else 0)) + - s_int*(rho1*vel1[i]*vel1[j] + + (p1 if i == j else 0))) mom_flux_norm_exact = np.zeros(shape=dim, ) for i in range(dim): - mom_flux_norm_exact[i] = (np.dot(mom_flux_exact[i], normal) + - s_int*s_ext*(rho1*vel1[i] - rho0*vel0[i]))/(s_ext - s_int) - mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] for idim in range(dim)]) - energy_flux_exact = (s_ext*vel0_norm*(energy0+p0) - - s_int*vel1_norm*(energy1+p1) + - s_int*s_ext*(energy1 - energy0))/(s_ext - s_int) - species_mass_flux_exact = (s_ext*vel0_norm*rho0*y0 - - s_int*vel1_norm*rho1*y1 + - s_int*s_ext*(rho1*y1 - rho0*y0))/(s_ext - s_int) - species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) - - flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, energy=energy_flux_exact, - momentum=mom_flux_norm_exact, species_mass=species_mass_flux_exact) + mom_flux_norm_exact[i] = ((np.dot(mom_flux_exact[i], normal) + + s_int*s_ext*(rho1*vel1[i] - rho0*vel0[i])) + / (s_ext - s_int)) + mom_flux_norm_exact = make_obj_array([mom_flux_norm_exact[idim] + for idim in range(dim)]) + energy_flux_exact = (s_ext*vel0_norm*(energy0+p0) + - s_int*vel1_norm*(energy1+p1) + + s_int*s_ext*(energy1 - energy0))/(s_ext - s_int) + species_mass_flux_exact = (s_ext*vel0_norm*rho0*y0 + - s_int*vel1_norm*rho1*y1 + + s_int*s_ext*(rho1*y1 - rho0*y0))/(s_ext - s_int) + species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] + for ispec in range(nspecies)]) + + flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, + energy=energy_flux_exact, + momentum=mom_flux_norm_exact, + species_mass=species_mass_flux_exact) print(f"{flux_bnd=}") print(f"{flux_bnd_exact=}") @@ -387,5 +374,3 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): print(f"{flux_resid=}") assert np.abs(actx.np.linalg.norm(flux_resid)) < tolerance - - #assert 1==0 From e2605f4f73a77cf404cc151e63cec599c4c7ac15 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 13 Dec 2021 13:14:02 -0600 Subject: [PATCH 467/873] Correct downstream merge error --- mirgecom/inviscid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 095970a04..4c16b8420 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -200,7 +200,7 @@ def inviscid_facial_flux(discr, gas_model, state_pair, """ from arraycontext import thaw normal = thaw(discr.normal(state_pair.dd), state_pair.int.array_context) - num_flux = numerical_flux_func(normal, gas_model, state_pair) + num_flux = numerical_flux_func(state_pair, gas_model, normal) dd = state_pair.dd dd_allfaces = dd.with_dtag("all_faces") return num_flux if local else discr.project(dd, dd_allfaces, num_flux) From 2c8c3e816ba882b44a3bfe729e8c838f82ffdc1c Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 13 Dec 2021 15:07:52 -0600 Subject: [PATCH 468/873] Clean up max expression for util Co-authored-by: Matt Smith --- mirgecom/simutil.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 89c593230..0fa76f8df 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -327,8 +327,8 @@ def max_component_norm(discr, fields, order=np.inf): This is a collective routine and must be called by all MPI ranks. """ actx = fields.array_context - return max(actx.to_numpy(flatten( - componentwise_norms(discr, fields, order), actx))) + return actx.to_numpy(actx.np.max( + componentwise_norms(discr, fields, order), actx)) def generate_and_distribute_mesh(comm, generate_mesh): From d3275d73a1b87ab7ddedf8d52d4d817e2248020b Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 13 Dec 2021 17:09:07 -0600 Subject: [PATCH 469/873] Revert to previous expression --- mirgecom/simutil.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 0fa76f8df..89c593230 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -327,8 +327,8 @@ def max_component_norm(discr, fields, order=np.inf): This is a collective routine and must be called by all MPI ranks. """ actx = fields.array_context - return actx.to_numpy(actx.np.max( - componentwise_norms(discr, fields, order), actx)) + return max(actx.to_numpy(flatten( + componentwise_norms(discr, fields, order), actx))) def generate_and_distribute_mesh(comm, generate_mesh): From 0824668e17ab09910d13504beec76993f87b6369 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 13 Dec 2021 17:13:36 -0600 Subject: [PATCH 470/873] Remove crufty check on empty species flux --- test/test_viscous.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/test/test_viscous.py b/test/test_viscous.py index 99d776a0f..2d6e7a70c 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -242,13 +242,6 @@ def inf_norm(x): xp_heat_flux = -kappa*xp_grad_t assert inf_norm(heat_flux - xp_heat_flux) < 2e-8 - # verify diffusive mass flux is zilch (no scalar components) - # Don't call for non-multi CV - if cv.nspecies > 0: - from mirgecom.viscous import diffusive_flux - j = diffusive_flux(discr, eos, cv, grad_cv) - assert len(j) == 0 - xp_e_flux = np.dot(xp_tau, cv.velocity) - xp_heat_flux xp_mom_flux = xp_tau from mirgecom.viscous import viscous_flux From 7738927a8ecf6a9be8a7ee10f57a0971e0bf752e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 14 Dec 2021 09:55:15 -0600 Subject: [PATCH 471/873] Customize production env. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..acc997d55 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-distpar-lazy" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From a2e7449d4d1535fc1717211458a1a453fccf77c3 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 14 Dec 2021 18:08:38 -0600 Subject: [PATCH 472/873] Make comment about dumb work-around --- mirgecom/simutil.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 89c593230..48dee31b9 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -316,7 +316,8 @@ def componentwise_norms(discr, fields, order=np.inf): partial(componentwise_norms, discr, order=order), fields) if len(fields) > 0: return discr.norm(fields, order) - else: + else: + # FIXME: This work-around for #575 can go away after #569 return 0 From b4df6b8f93a89e3b73ef1946164e41388e26cac1 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 14 Dec 2021 18:13:29 -0600 Subject: [PATCH 473/873] deflakeate --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 48dee31b9..f310b7a7f 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -316,7 +316,7 @@ def componentwise_norms(discr, fields, order=np.inf): partial(componentwise_norms, discr, order=order), fields) if len(fields) > 0: return discr.norm(fields, order) - else: + else: # FIXME: This work-around for #575 can go away after #569 return 0 From 74558fa31d5f7a4807117a4e4c527b7e6fceef5a Mon Sep 17 00:00:00 2001 From: Thomas Gibson Date: Tue, 14 Dec 2021 22:34:38 -0600 Subject: [PATCH 474/873] Update filter docs and remove decorator --- mirgecom/filter.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mirgecom/filter.py b/mirgecom/filter.py index 1b31a199a..da09d9526 100644 --- a/mirgecom/filter.py +++ b/mirgecom/filter.py @@ -48,9 +48,13 @@ import numpy as np import grudge.dof_desc as dof_desc +from arraycontext import map_array_container + +from functools import partial + from meshmode.dof_array import DOFArray + from pytools import keyed_memoize_in -from pytools.obj_array import obj_array_vectorized_n_args def exponential_mode_response_function(mode, alpha, cutoff, nfilt, filter_order): @@ -163,7 +167,6 @@ def apply_spectral_filter(actx, modal_field, discr, cutoff, ) -@obj_array_vectorized_n_args def filter_modally(dcoll, dd, cutoff, mode_resp_func, field): """Stand-alone procedural interface to spectral filtering. @@ -189,26 +192,23 @@ def filter_modally(dcoll, dd, cutoff, mode_resp_func, field): Mode below which *field* will not be filtered mode_resp_func: Modal response function returns a filter coefficient for input mode id - field: :class:`numpy.ndarray` - DOFArray or object array of DOFArrays + field: :class:`mirgecom.fluid.ConservedVars` + An array container containing the relevant field(s) to filter. Returns ------- - result: numpy.ndarray - Filtered version of *field*. + result: :class:`mirgecom.fluid.ConservedVars` + An array container containing the filtered field(s). """ - dd = dof_desc.as_dofdesc(dd) - dd_modal = dof_desc.DD_VOLUME_MODAL - discr = dcoll.discr_from_dd(dd) - - from arraycontext import map_array_container - from functools import partial if not isinstance(field, DOFArray): return map_array_container( partial(filter_modally, dcoll, dd, cutoff, mode_resp_func), field ) actx = field.array_context + dd = dof_desc.as_dofdesc(dd) + dd_modal = dof_desc.DD_VOLUME_MODAL + discr = dcoll.discr_from_dd(dd) modal_map = dcoll.connection_from_dds(dd, dd_modal) nodal_map = dcoll.connection_from_dds(dd_modal, dd) From 4951228875776a84d8a26e2b7eceee896b8e7852 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 05:58:23 -0600 Subject: [PATCH 475/873] Fix up inviscid boundary flux interface per upstream changes. --- mirgecom/euler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index c21da5ea6..057224a67 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -105,8 +105,8 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): + sum(inviscid_facial_flux(discr, eos=eos, cv_tpair=part_tpair) for part_tpair in interior_cv) # Domain boundaries - + sum(boundaries[btag].inviscid_boundary_flux(discr, btag=btag, cv=cv, - eos=eos, time=time) + + sum(boundaries[btag].inviscid_divergence_flux(discr, btag=btag, cv=cv, + eos=eos, time=time) for btag in boundaries) ) From 2054186eb55a4bf49b689103323adf211a6a5856 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 06:47:35 -0600 Subject: [PATCH 476/873] Bring back dv arg in production --- examples/autoignition-mpi.py | 4 ++-- mirgecom/euler.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 23ec70441..e60e9759b 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -571,8 +571,8 @@ def my_rhs(t, state): temperature_seed=state[1]) return make_obj_array([euler_operator(discr, cv=cv, time=t, - boundaries=boundaries, eos=eos, - dv=current_dv) + boundaries=boundaries, eos=eos, + dv=current_dv) + eos.get_species_source_terms(cv), 0*state[1]]) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index bd22b2bb8..23580f427 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -62,7 +62,7 @@ from mirgecom.operators import div_operator -def euler_operator(discr, eos, boundaries, cv, time=0.0): +def euler_operator(discr, eos, boundaries, cv, time=0.0, dv=None): r"""Compute RHS of the Euler flow equations. Returns @@ -96,8 +96,11 @@ def euler_operator(discr, eos, boundaries, cv, time=0.0): Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ + if dv is None: + dv = eos.dependent_vars(cv) + # Compute volume contributions - inviscid_flux_vol = inviscid_flux(discr, eos.pressure(cv), cv) + inviscid_flux_vol = inviscid_flux(discr, dv.pressure, cv) interior_cv = interior_trace_pairs(discr, cv) # Compute interface contributions inviscid_flux_bnd = ( From e1339e88d7e7d09e2d418f1f67725df95e7a8bd9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 11:51:42 -0600 Subject: [PATCH 477/873] Update from upstream --- mirgecom/eos.py | 16 ++++++++-------- mirgecom/gas_model.py | 5 +++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index cd716f4fe..c6afe608c 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -15,8 +15,8 @@ Exceptions ^^^^^^^^^^ -.. autoexception:: TemperatureSeedError -.. autoexception:: MixtureEOSError +.. autoexception:: TemperatureSeedMissingError +.. autoexception:: MixtureEOSNeededError """ __copyright__ = """ @@ -53,13 +53,13 @@ from arraycontext import dataclass_array_container -class TemperatureSeedError(Exception): +class TemperatureSeedMissingError(Exception): """Indicate that EOS is inappropriately called without seeding temperature.""" pass -class MixtureEOSError(Exception): +class MixtureEOSNeededError(Exception): """Indicate that a mixture EOS is required for model evaluation.""" pass @@ -166,7 +166,7 @@ def dependent_vars(self, cv: ConservedVars, """Get an agglomerated array of the dependent variables. Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) - may raise :exc:`TemperatureSeedError` if *temperature_seed* is not + may raise :exc:`TemperatureSeedMissingError` if *temperature_seed* is not given. """ temperature = self.temperature(cv, temperature_seed) @@ -221,7 +221,7 @@ def dependent_vars(self, cv: ConservedVars, """Get an agglomerated array of the dependent variables. Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) - may raise :exc:`TemperatureSeedError` if *temperature_seed* is not + may raise :exc:`TemperatureSeedMissingError` if *temperature_seed* is not given. """ temperature = self.temperature(cv, temperature_seed) @@ -828,8 +828,8 @@ def get_temp(): # not provide a seed - but those calls don't matter as the temperature # calculation is actually performed only once per conserved state (cv). if temperature_seed is None: - raise TemperatureSeedError("MixtureEOS.get_temperature requires" - " a *temperature_seed*.") + raise TemperatureSeedMissingError("MixtureEOS.get_temperature" + "requires a *temperature_seed*.") tseed = self.get_temperature_seed(cv, temperature_seed) y = cv.species_mass_fractions e = self.internal_energy(cv) / cv.mass diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 7e90e767f..e7dbaa9da 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -47,7 +47,7 @@ GasEOS, EOSDependentVars, MixtureDependentVars, - MixtureEOSError + MixtureEOSNeededError ) from mirgecom.transport import ( TransportModel, @@ -194,7 +194,8 @@ def is_mixture(self): def _get_mixture_property(self, name): """Grab a mixture property if EOS is a :class:`~mirgecom.eos.MixtureEOS`.""" if not self.is_mixture: - raise MixtureEOSError("Mixture EOS required for mixture properties.") + raise \ + MixtureEOSNeededError("Mixture EOS required for mixture properties.") return getattr(self.dv, name) @property From fb62c82a5a0cdc440924fcfbb975b59e88ea4951 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 11:54:33 -0600 Subject: [PATCH 478/873] Update from upstream --- mirgecom/eos.py | 10 +++++----- mirgecom/gas_model.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index c6afe608c..8939d2cc6 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -6,7 +6,7 @@ This module is designed provide Equation of State objects used to compute and manage the relationships between and among state and thermodynamic variables. -.. autoclass:: EOSDependentVars +.. autoclass:: GasDependentVars .. autoclass:: MixtureDependentVars .. autoclass:: GasEOS .. autoclass:: MixtureEOS @@ -67,7 +67,7 @@ class MixtureEOSNeededError(Exception): @dataclass_array_container @dataclass(frozen=True) -class EOSDependentVars: +class GasDependentVars: """State-dependent quantities for :class:`GasEOS`. Prefer individual methods for model use, use this @@ -84,7 +84,7 @@ class EOSDependentVars: @dataclass_array_container @dataclass(frozen=True) -class MixtureDependentVars(EOSDependentVars): +class MixtureDependentVars(GasDependentVars): """Mixture state-dependent quantities for :class:`MixtureEOS`. ..attribute:: species_enthalpies @@ -162,7 +162,7 @@ def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" def dependent_vars(self, cv: ConservedVars, - temperature_seed: DOFArray = None) -> EOSDependentVars: + temperature_seed: DOFArray = None) -> GasDependentVars: """Get an agglomerated array of the dependent variables. Certain implementations of :class:`GasEOS` (e.g. :class:`MixtureEOS`) @@ -170,7 +170,7 @@ def dependent_vars(self, cv: ConservedVars, given. """ temperature = self.temperature(cv, temperature_seed) - return EOSDependentVars( + return GasDependentVars( temperature=temperature, pressure=self.pressure(cv, temperature), speed_of_sound=self.sound_speed(cv, temperature) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index e7dbaa9da..0e954499e 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -45,7 +45,7 @@ from mirgecom.fluid import ConservedVars from mirgecom.eos import ( GasEOS, - EOSDependentVars, + GasDependentVars, MixtureDependentVars, MixtureEOSNeededError ) @@ -109,7 +109,7 @@ class FluidState: """ cv: ConservedVars - dv: EOSDependentVars + dv: GasDependentVars @property def array_context(self): From 6b8798027cfcf98319939508d4ead359435e7a74 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 12:07:10 -0600 Subject: [PATCH 479/873] Update from upstream --- mirgecom/eos.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 8939d2cc6..f973c9bd9 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -42,7 +42,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ - +from typing import Union, Optional from dataclasses import dataclass import numpy as np from pytools import memoize_in @@ -77,9 +77,9 @@ class GasDependentVars: .. attribute:: pressure """ - temperature: np.ndarray - pressure: np.ndarray - speed_of_sound: np.ndarray + temperature: DOFArray + pressure: DOFArray + speed_of_sound: DOFArray @dataclass_array_container @@ -90,7 +90,7 @@ class MixtureDependentVars(GasDependentVars): ..attribute:: species_enthalpies """ - species_enthalpies: np.ndarray + species_enthalpies: DOFArray class GasEOS(metaclass=ABCMeta): @@ -121,7 +121,7 @@ def pressure(self, cv: ConservedVars, temperature: DOFArray): @abstractmethod def temperature(self, cv: ConservedVars, - temperature_seed: DOFArray = None): + temperature_seed: Optional[DOFArray] = None) -> DOFArray: """Get the gas temperature.""" @abstractmethod @@ -192,9 +192,15 @@ class MixtureEOS(GasEOS): """ @abstractmethod - def get_temperature_seed(self, cv: ConservedVars, - temperature_seed: DOFArray = None): - r"""Get a constant and uniform guess for the gas temperature.""" + def get_temperature_seed( + self, cv: ConservedVars, + temperature_seed: Optional[Union[float, DOFArray]] = None) -> DOFArray: + r"""Get a constant and uniform guess for the gas temperature. + + This function returns an appropriately sized `DOFArray` for the + temperature field that will be used as a starting point for the + solve to find the actual temperature field of the gas. + """ @abstractmethod def get_density(self, pressure, temperature, species_mass_fractions): From ae8b7f89cdb03a1f697c8dbfc324ffc53c704b50 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 12:35:27 -0600 Subject: [PATCH 480/873] Remove stale comment --- mirgecom/eos.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index f973c9bd9..bc9371d16 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -764,7 +764,6 @@ def pressure(self, cv: ConservedVars, temperature): @memoize_in(cv, (PyrometheusMixture.pressure, type(self._pyrometheus_mech))) def get_pressure(): - # temperature = self.temperature(cv) y = cv.species_mass_fractions return self._pyrometheus_mech.get_pressure(cv.mass, temperature, y) return get_pressure() From c9f8fcef574e14940857821e3094397f6b655384 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 15:25:24 -0600 Subject: [PATCH 481/873] Correct some merge errors --- mirgecom/filter.py | 8 -------- test/test_bc.py | 2 +- test/test_euler.py | 1 + 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/mirgecom/filter.py b/mirgecom/filter.py index 18b06f955..1d4c8fba6 100644 --- a/mirgecom/filter.py +++ b/mirgecom/filter.py @@ -200,18 +200,10 @@ def filter_modally(dcoll, dd, cutoff, mode_resp_func, field): result: :class:`mirgecom.fluid.ConservedVars` An array container containing the filtered field(s). """ - if not isinstance(field, DOFArray): - return map_array_container( - partial(filter_modally, dcoll, dd, cutoff, mode_resp_func), field - ) - - actx = field.array_context dd = dof_desc.as_dofdesc(dd) dd_modal = dof_desc.DD_VOLUME_MODAL discr = dcoll.discr_from_dd(dd) - from arraycontext import map_array_container - from functools import partial if not isinstance(field, DOFArray): return map_array_container( partial(filter_modally, dcoll, dd, cutoff, mode_resp_func), field diff --git a/test/test_bc.py b/test/test_bc.py index ca0a62d84..356db2fe3 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -182,7 +182,7 @@ def bnd_norm(vec): # Check the total velocity component normal # to each surface. It should be zero. The # numerical fluxes cannot be zero. - avg_state = 0.5*(bnd_pair.int.cv + bnd_pair.ext.cv) + avg_state = 0.5*(bnd_pair.int + bnd_pair.ext) err_max = max(err_max, bnd_norm(np.dot(avg_state.momentum, nhat))) from mirgecom.inviscid import inviscid_facial_flux diff --git a/test/test_euler.py b/test/test_euler.py index 5e689ef23..bf5bb5f19 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -546,6 +546,7 @@ def rhs(t, q): cv = rk4_step(cv, t, dt, rhs) cv = filter_modally(discr, "vol", cutoff, frfunc, cv) + fluid_state = make_fluid_state(cv, gas_model) t += dt istep += 1 From 7b4f0d24a14b70c6873049e22c0d51909a9ea66e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 15:55:40 -0600 Subject: [PATCH 482/873] Update inviscid flux interface for nspecies --- mirgecom/inviscid.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 4c16b8420..bec7050e0 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -77,6 +77,7 @@ def inviscid_flux(state): ) species_mass_flux = ( # reshaped: (nspecies, dim) state.velocity * state.species_mass_density.reshape(-1, 1) + if state.nspecies > 0 else None ) return make_conserved(state.dim, mass=mass_flux, energy=energy_flux, momentum=mom_flux, species_mass=species_mass_flux) From 0b939de32b1f5e7a97970cce4a21b03a829b964b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Dec 2021 18:32:09 -0600 Subject: [PATCH 483/873] Disable DV logging for NSMix. --- examples/nsmix-mpi.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 7ab4b7566..d13e43005 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -557,6 +557,11 @@ def my_rhs(t, state): parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() log_dependent = not args.lazy + + from warnings import warn + warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") + log_dependent = False + if args.profiling: if args.lazy: raise ValueError("Can't use lazy and profiling together.") From 2ff48b2a06847adca84bf805f59cd3ff8faa6616 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 16 Dec 2021 11:07:43 -0600 Subject: [PATCH 484/873] Use parallel-lazy array context --- examples/doublemach-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 78a3e7980..1a21f444f 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -32,7 +32,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext From e7dfaed4097ef6a38c370ad73eb40598772cdbcf Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 16 Dec 2021 14:02:09 -0600 Subject: [PATCH 485/873] Add quadrature tag to Euler call in doublemach --- examples/doublemach-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index cc90ba826..59782db17 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -416,7 +416,7 @@ def my_rhs(t, state): return ( euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model) + gas_model=gas_model, quadrature_tag=quadrature_tag) + av_laplacian_operator(discr, cv=fluid_state.cv, boundaries=boundaries, boundary_kwargs={"time": t, From 69ef5d2b8bf4f0af0a216c7a74fb010f0adba293 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 17 Dec 2021 05:36:27 -0600 Subject: [PATCH 486/873] Add planar discontinuity initializer. --- mirgecom/initializers.py | 135 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 432571c15..c53e8cb72 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -12,6 +12,7 @@ .. autoclass:: AcousticPulse .. automethod: make_pulse .. autoclass:: MixtureInitializer +.. autoclass:: PlanarDiscontinuity .. autoclass:: PlanarPoiseuille """ @@ -43,6 +44,7 @@ from pytools.obj_array import make_obj_array from meshmode.dof_array import thaw from mirgecom.eos import IdealSingleGas +from numbers import Number from mirgecom.fluid import make_conserved @@ -971,6 +973,138 @@ def __call__(self, x_vec, eos, **kwargs): momentum=mom, species_mass=specmass) +class PlanarDiscontinuity: + r"""Solution initializer for flow with a discontinuity. + + This initializer creates a physics-consistent flow solution + given an initial thermal state (pressure, temperature) and an EOS. + + The solution varies across a planar interface defined by a tanh function + located at disc_location for pressure, temperature, velocity, and mass fraction + + .. automethod:: __init__ + .. automethod:: __call__ + """ + + def __init__( + self, *, dim=3, normal_dir=0, disc_location=0, nspecies=0, + temperature_left, temperature_right, + pressure_left, pressure_right, + velocity_left=None, velocity_right=None, + species_mass_left=None, species_mass_right=None, + convective_velocity=None, sigma=0.5 + ): + r"""Initialize mixture parameters. + + Parameters + ---------- + dim: int + specifies the number of dimensions for the solution + normal_dir: int + specifies the direction (plane) the discontinuity is applied in + disc_location: float or Callable + fixed location of discontinuity or optionally a function that + returns the time-dependent location. + nspecies: int + specifies the number of mixture species + pressure_left: float + pressure to the left of the discontinuity + temperature_left: float + temperature to the left of the discontinuity + velocity_left: numpy.ndarray + velocity (vector) to the left of the discontinuity + species_mass_left: numpy.ndarray + species mass fractions to the left of the discontinuity + pressure_right: float + pressure to the right of the discontinuity + temperature_right: float + temperaure to the right of the discontinuity + velocity_right: numpy.ndarray + velocity (vector) to the right of the discontinuity + species_mass_right: numpy.ndarray + species mass fractions to the right of the discontinuity + sigma: float + sharpness parameter + """ + if velocity_left is None: + velocity_left = np.zeros(shape=(dim,)) + if velocity_right is None: + velocity_right = np.zeros(shape=(dim,)) + + if species_mass_left is None: + species_mass_left = np.zeros(shape=(nspecies,)) + if species_mass_right is None: + species_mass_right = np.zeros(shape=(nspecies,)) + + self._nspecies = nspecies + self._dim = dim + self._disc_location = disc_location + self._sigma = sigma + self._ul = velocity_left + self._ur = velocity_right + self._uc = convective_velocity + self._pl = pressure_left + self._pr = pressure_right + self._tl = temperature_left + self._tr = temperature_right + self._yl = species_mass_left + self._yr = species_mass_right + self._xdir = normal_dir + if self._xdir >= self._dim: + self._xdir = self._dim - 1 + + def __call__(self, x_vec, eos, *, time=0.0): + """Create the mixture state at locations *x_vec*. + + Parameters + ---------- + x_vec: numpy.ndarray + Coordinates at which solution is desired + eos: + Mixture-compatible equation-of-state object must provide + these functions: + `eos.get_density` + `eos.get_internal_energy` + time: float + Time at which solution is desired. The location is (optionally) + dependent on time + """ + if x_vec.shape != (self._dim,): + raise ValueError(f"Position vector has unexpected dimensionality," + f" expected {self._dim}.") + + x = x_vec[self._xdir] + actx = x.array_context + if isinstance(self._disc_location, Number): + x0 = self._disc_location + else: + x0 = self._disc_location(time) + + xtanh = 1.0/self._sigma*(x0 - x) + weight = 0.5*(1.0 - actx.np.tanh(xtanh)) + pressure = self._pl + (self._pr - self._pl)*weight + temperature = self._tl + (self._tr - self._tl)*weight + velocity = self._ul + (self._ur - self._ul)*weight + y = self._yl + (self._yr - self._yl)*weight + + if self._nspecies: + mass = eos.get_density(pressure, temperature, + species_mass_fractions=y) + else: + mass = pressure/temperature/eos.gas_const() + + specmass = mass * y + mom = mass * velocity + internal_energy = eos.get_internal_energy(temperature, + species_mass_fractions=y) + + kinetic_energy = 0.5 * np.dot(velocity, velocity) + energy = mass * (internal_energy + kinetic_energy) + + return make_conserved(dim=self._dim, mass=mass, energy=energy, + momentum=mom, species_mass=specmass) + + class PlanarPoiseuille: r"""Initializer for the planar Poiseuille case. @@ -1072,6 +1206,7 @@ def exact_grad(self, x_vec, eos, cv_exact): """Return the exact gradient of the Poiseuille state.""" y = x_vec[1] x = x_vec[0] + # FIXME: Symbolic infrastructure could perhaps do this better ones = x / x mass = cv_exact.mass From c7b0b54353b831a12fde5d59e363e4e34c1b9a6c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 17 Dec 2021 05:56:27 -0600 Subject: [PATCH 487/873] Add @thomasgibson,s overintegration to Euler. --- examples/autoignition-mpi.py | 22 +++++- examples/pulse-mpi.py | 39 ++++++++--- mirgecom/euler.py | 126 ++++++++++++++++++++++++----------- 3 files changed, 136 insertions(+), 51 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 16b2c488e..45046a451 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -80,7 +80,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, + use_leap=False, use_overintegration=False, + use_profiling=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext, log_dependent=True): """Drive example.""" @@ -188,6 +189,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nodes = thaw(discr.nodes(), actx) ones = discr.zeros(actx) + 1.0 + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + ones = discr.zeros(actx) + 1.0 + vis_timer = None if logmgr: @@ -570,6 +578,8 @@ def my_post_step(step, t, dt, state): logmgr.tick_after() return make_obj_array([cv, fluid_state.temperature]), dt + from mirgecom.inviscid import inviscid_flux_rusanov + def my_rhs(t, state): cv, tseed = state from mirgecom.gas_model import make_fluid_state @@ -577,7 +587,9 @@ def my_rhs(t, state): temperature_seed=tseed) return make_obj_array([ euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model) + gas_model=gas_model, + inviscid_numerical_flux_func=inviscid_flux_rusanov, + quadrature_tag=quadrature_tag) + eos.get_species_source_terms(cv, fluid_state.temperature), 0*tseed]) @@ -620,6 +632,8 @@ def my_rhs(t, state): import argparse casename = "autoignition" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -652,7 +666,9 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + main(use_logmgr=args.log, use_leap=args.leap, + use_overintegration=args.overintegration, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, log_dependent=log_dependent) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index a028907b7..09f690891 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -81,6 +81,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, use_leap=False, use_profiling=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" @@ -153,12 +154,27 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + order = 1 discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + vis_timer = None if logmgr: @@ -297,14 +313,16 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - inviscid_state = make_fluid_state(cv=state, gas_model=gas_model) - return euler_operator(discr, state=inviscid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + return euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) - current_step, current_t, current_state = \ + current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, @@ -313,11 +331,11 @@ def my_rhs(t, state): # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_state = make_fluid_state(current_state, gas_model) + final_state = make_fluid_state(current_cv, gas_model) final_dv = final_state.dv - my_write_viz(step=current_step, t=current_t, state=current_state, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_viz(step=current_step, t=current_t, state=current_cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_cv) if logmgr: logmgr.close() @@ -332,6 +350,8 @@ def my_rhs(t, state): import argparse casename = "pulse" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -358,7 +378,8 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + main(use_logmgr=args.log, use_overintegration=args.overintegration, + use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/mirgecom/euler.py b/mirgecom/euler.py index dd21ac7aa..bc4bd8631 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -52,20 +52,28 @@ THE SOFTWARE. """ -import numpy as np # noqa from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux, inviscid_flux_rusanov ) - -from grudge.trace_pair import interior_trace_pairs -from grudge.dof_desc import DOFDesc from mirgecom.operators import div_operator +from mirgecom.gas_model import ( + project_fluid_state, + make_fluid_state_trace_pairs +) +from grudge.trace_pair import ( + TracePair, + interior_trace_pairs +) +from grudge.dof_desc import DOFDesc, as_dofdesc + +import grudge.op as op def euler_operator(discr, state, gas_model, boundaries, time=0.0, - inviscid_numerical_flux_func=inviscid_flux_rusanov): + inviscid_numerical_flux_func=inviscid_flux_rusanov, + quadrature_tag=None): r"""Compute RHS of the Euler flow equations. Returns @@ -98,51 +106,91 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, Physical gas model including equation of state, transport, and kinetic properties as required by fluid state + quadrature_tag + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + The default value is *None*. + Returns ------- - numpy.ndarray + :class:`mirgecom.fluid.ConservedVars` Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ - dd_vol = DOFDesc("vol") - dd_faces = DOFDesc("all_faces") - - from mirgecom.gas_model import project_fluid_state - boundary_states = {btag: - project_fluid_state(discr, "vol", btag, state, gas_model) - for btag in boundaries} - - interior_cv = interior_trace_pairs(discr, state.cv) - - # If this is a mixture, we need to exchange the temperature field because - # mixture pressure (used in the inviscid flux calculations) depends on - # temperature and we need to seed the temperature calculation for the - # (+) part of the partition boundary with the remote temperature data. - tseed_interior_pairs = (interior_trace_pairs(discr, state.temperature) - if state.is_mixture else None) - - from mirgecom.gas_model import make_fluid_state_trace_pairs - interior_states = make_fluid_state_trace_pairs(interior_cv, gas_model, + dd_base = as_dofdesc("vol") + dd_vol = DOFDesc("vol", quadrature_tag) + dd_faces = DOFDesc("all_faces", quadrature_tag) + + def interp_to_surf_quad(utpair): + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + return TracePair( + local_dd_quad, + interior=op.project(discr, local_dd, local_dd_quad, utpair.int), + exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + ) + + boundary_states = { + btag: project_fluid_state( + discr, dd_base, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + state, gas_model) for btag in boundaries + } + + cv_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.cv) + ] + + tseed_interior_pairs = None + if state.is_mixture > 0: + # If this is a mixture, we need to exchange the temperature field because + # mixture pressure (used in the inviscid flux calculations) depends on + # temperature and we need to seed the temperature calculation for the + # (+) part of the partition boundary with the remote temperature data. + tseed_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.temperature) + ] + + interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, + gas_model, tseed_interior_pairs) - # Compute volume contributions - inviscid_flux_vol = inviscid_flux(state) - # Compute interface contributions + # Interpolate the fluid state to the volume quadrature grid + # (conserved vars and derived vars if applicable) + state_quad = project_fluid_state(discr, dd_base, dd_vol, state, gas_model) + + inviscid_flux_vol = inviscid_flux(state_quad) inviscid_flux_bnd = ( - # Interior faces - sum(inviscid_facial_flux(discr, gas_model, pair, - numerical_flux_func=inviscid_numerical_flux_func) - for pair in interior_states) - # Domain boundary faces - + sum( - boundaries[btag].inviscid_divergence_flux( - discr, btag, gas_model, state_minus=boundary_states[btag], time=time, - numerical_flux_func=inviscid_numerical_flux_func) + + # Domain boundaries + sum(boundaries[btag].inviscid_divergence_flux( + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model, + state_minus=boundary_states[btag], + time=time, + numerical_flux_func=inviscid_numerical_flux_func) for btag in boundaries) + + # Interior boundaries + + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=inviscid_numerical_flux_func) + for state_pair in interior_states) ) - return -div_operator(discr, dd_vol, dd_faces, inviscid_flux_vol, - inviscid_flux_bnd) + + return -div_operator(discr, dd_vol, dd_faces, + inviscid_flux_vol, inviscid_flux_bnd) # By default, run unitless From a7dc1bacca554b4efb04883e0740dfbdefd14b19 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 21 Dec 2021 08:50:04 -0600 Subject: [PATCH 488/873] Merge state handling --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index e07e9b4af..88c0f557f 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-state-handling" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From db048b9aaff0fb90f35f5973e4331cc304459c57 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 6 Jan 2022 14:43:07 -0600 Subject: [PATCH 489/873] revert to pytato@main --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0d2540f42..2d720837b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,6 +19,6 @@ pyyaml --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge ---editable git+https://github.com/kaushikcfd/pytato.git@pytato-array-context-transforms#egg=pytato +--editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From d3cc92e859b4333533ade1bc922215c8e708b3f9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 11 Jan 2022 13:00:23 -0600 Subject: [PATCH 490/873] Use the interior temperature for adiabatic walls. --- mirgecom/boundary.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index d28a327cf..8b3ba4f42 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -192,6 +192,10 @@ def _temperature_for_prescribed_state(self, discr, btag, **kwargs) return boundary_state.temperature + def _temperature_for_interior_state(self, discr, btag, gas_model, state_minus, + **kwargs): + return state_minus.temperature + def _identical_state(self, state_minus, **kwargs): return state_minus @@ -374,6 +378,7 @@ def __init__(self): """Initialize AdiabaticSlipBoundary.""" PrescribedFluidBoundary.__init__( self, boundary_state_func=self.adiabatic_slip_state, + boundary_temperature_func=self._temperature_for_interior_state, boundary_grad_av_func=self.adiabatic_slip_grad_av ) @@ -406,10 +411,8 @@ def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): # Form the external boundary solution with the new momentum ext_cv = make_conserved(dim=dim, mass=cv_minus.mass, energy=cv_minus.energy, momentum=ext_mom, species_mass=cv_minus.species_mass) - t_seed = state_minus.temperature if state_minus.is_mixture else None - return make_fluid_state(cv=ext_cv, gas_model=gas_model, - temperature_seed=t_seed) + temperature_seed=state_minus.temperature) def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): """Get the exterior grad(Q) on the boundary.""" @@ -442,6 +445,7 @@ def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" PrescribedFluidBoundary.__init__( self, boundary_state_func=self.adiabatic_noslip_state, + boundary_temperature_func=self._temperature_for_interior_state, boundary_grad_av_func=self.adiabatic_noslip_grad_av, ) # Check wall_velocity (assumes dim is correct) @@ -461,8 +465,8 @@ def adiabatic_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): energy=state_minus.energy_density, momentum=ext_mom, species_mass=state_minus.species_mass_density) - tseed = state_minus.temperature if state_minus.is_mixture else None - return make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) + return make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=state_minus.temperature) def adiabatic_noslip_grad_av(self, grad_av_minus, **kwargs): """Get the exterior solution on the boundary.""" From 67fd4bb71bf1581b5adf9e62505515db8c7d51dd Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 11 Jan 2022 13:01:16 -0600 Subject: [PATCH 491/873] deflake hate --- test/test_bc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_bc.py b/test/test_bc.py index 3f8c6405c..21ffb6155 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -235,7 +235,6 @@ def test_noslip(actx_factory, dim): wall = IsothermalNoSlipBoundary(wall_temperature=wall_temp) - npts_geom = 17 a = 1.0 b = 2.0 From b00f8458cda562d08c9ce41e2d63d18050cb6684 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 11 Jan 2022 20:45:42 +0100 Subject: [PATCH 492/873] new tagging system --- examples/heat-source-mpi.py | 2 +- mirgecom/diffusion.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 2bca09542..dba6af57d 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -74,7 +74,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if actx_class == MPIPytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 57c0bab66..4bd876755 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -204,6 +204,10 @@ def get_diffusion_flux(self, discr, quad_tag, dd, alpha, grad_u): # noqa: D102 return discr.project(dd_quad, dd_allfaces_quad, flux_quad) +class _DiffusionStateTag: + pass + + def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=False): r""" Compute the diffusion operator. @@ -267,7 +271,7 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals for btag, bdry in boundaries.items()) + sum( gradient_flux(discr, quad_tag, u_tpair) - for u_tpair in cross_rank_trace_pairs(discr, u)) + for u_tpair in cross_rank_trace_pairs(discr, u, tag=_DiffusionStateTag)) ) ) @@ -287,8 +291,8 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals + sum( diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair) for alpha_tpair, grad_u_tpair in zip( - cross_rank_trace_pairs(discr, alpha), - cross_rank_trace_pairs(discr, grad_u))) + cross_rank_trace_pairs(discr, alpha, tag=_DiffusionStateTag), + cross_rank_trace_pairs(discr, grad_u, tag=_DiffusionStateTag))) ) ) From 10fe62b1964782015f247823cff88f00b4bf995a Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 11 Jan 2022 20:50:02 +0100 Subject: [PATCH 493/873] flake8 --- mirgecom/diffusion.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 4bd876755..f765465d8 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -271,7 +271,8 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals for btag, bdry in boundaries.items()) + sum( gradient_flux(discr, quad_tag, u_tpair) - for u_tpair in cross_rank_trace_pairs(discr, u, tag=_DiffusionStateTag)) + for u_tpair in cross_rank_trace_pairs(discr, u, + tag=_DiffusionStateTag)) ) ) From abdd437179e45e4861da166736176329e5444a40 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 13 Jan 2022 23:21:48 +0100 Subject: [PATCH 494/873] Poiseuille lazy --- examples/poiseuille-mpi.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index d1783fd4c..53db12db6 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -30,9 +30,9 @@ from pytools.obj_array import make_obj_array from functools import partial -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + MPIPytatoPyOpenCLArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -113,8 +113,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( + actx = actx_class(comm, queue, + mpi_base_tag=4200, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control From 8dcbec74f94592634f39862c518e46e4439439e9 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 18 Jan 2022 09:00:20 -0600 Subject: [PATCH 495/873] add missing tag --- mirgecom/diffusion.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index e1604d7f5..38ff17870 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -207,10 +207,15 @@ def get_diffusion_flux(self, discr, quad_tag, dd, alpha, grad_u): # noqa: D102 class _DiffusionGradTag: pass + class _DiffusionDiffTag: pass +class _DiffusionStateTag: + pass + + def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=False): r""" Compute the diffusion operator. From 917d9d1b5f8646fe758aafd261d50bb8c0e03867 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 18 Jan 2022 16:43:05 -0600 Subject: [PATCH 496/873] adapt wave-mpi to new dist-lazy --- examples/wave-mpi.py | 2 +- mirgecom/wave.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 213aa2301..b86b32736 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -94,7 +94,7 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non else: queue = cl.CommandQueue(cl_ctx) if actx_class == MPISingleGridWorkBalancingPytatoArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=1200) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) diff --git a/mirgecom/wave.py b/mirgecom/wave.py index 9254b6a50..d62b98f3f 100644 --- a/mirgecom/wave.py +++ b/mirgecom/wave.py @@ -58,6 +58,10 @@ def _flux(discr, c, w_tpair): return discr.project(w_tpair.dd, "all_faces", c*flux_weak) +class _WaveTag: + pass + + def wave_operator(discr, c, w): """Compute the RHS of the wave equation. @@ -96,7 +100,7 @@ def wave_operator(discr, c, w): w_tpair=TracePair(BTAG_ALL, interior=dir_bval, exterior=dir_bc)) + sum( _flux(discr, c=c, w_tpair=tpair) - for tpair in cross_rank_trace_pairs(discr, w)) + for tpair in cross_rank_trace_pairs(discr, w, _WaveTag)) ) ) ) From 21feae4675f677309368feac3082cb185fc64c7a Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 18 Jan 2022 16:56:12 -0600 Subject: [PATCH 497/873] adapt more examples --- examples/pulse-mpi.py | 2 +- examples/vortex-mpi.py | 2 +- mirgecom/euler.py | 12 ++++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 90865a0fd..f95947f3c 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -109,7 +109,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if actx_class == MPIPytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=1300) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index a62a34f16..d361f95b3 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -101,7 +101,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if actx_class == MPIPytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=1300) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 020e41b57..1cfa7f085 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -62,6 +62,14 @@ from mirgecom.operators import div_operator +class _EulerCVTag: + pass + + +class _EulerTseedTag: + pass + + def euler_operator(discr, state, gas_model, boundaries, time=0.0): r"""Compute RHS of the Euler flow equations. @@ -107,13 +115,13 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0): project_fluid_state(discr, "vol", btag, state, gas_model) for btag in boundaries} - interior_cv = interior_trace_pairs(discr, state.cv) + interior_cv = interior_trace_pairs(discr, state.cv, tag=_EulerCVTag) # If this is a mixture, we need to exchange the temperature field because # mixture pressure (used in the inviscid flux calculations) depends on # temperature and we need to seed the temperature calculation for the # (+) part of the partition boundary with the remote temperature data. - tseed_interior_pairs = (interior_trace_pairs(discr, state.temperature) + tseed_interior_pairs = (interior_trace_pairs(discr, state.temperature, _EulerTseedTag) if state.is_mixture else None) from mirgecom.gas_model import make_fluid_state_trace_pairs From 4f27c749cba7272008b85481fd968254da765f7a Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 18 Jan 2022 16:29:31 -0800 Subject: [PATCH 498/873] Port upstream changes to pick up dist/par-ready Euler, add approp context to autoignition. --- examples/autoignition-mpi.py | 14 ++++++++++---- examples/pulse-mpi.py | 2 +- mirgecom/euler.py | 12 ++++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 72ad72dc0..73145503e 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -29,10 +29,13 @@ import pyopencl.tools as cl_tools from functools import partial +from grudge.array_context import MPIPytatoPyOpenCLArrayContext as PytatoPyOpenCLArrayContext + from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + # SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -107,9 +110,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Some discretization parameters dim = 2 diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index e30a2a44c..8001bd8e3 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -110,7 +110,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if actx_class == MPIPytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=1200) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index bc4bd8631..236fd6e4c 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -71,6 +71,14 @@ import grudge.op as op + +class _EulerCVTag: + pass + + +class _EulerTseedTag: + pass + def euler_operator(discr, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov, quadrature_tag=None): @@ -144,7 +152,7 @@ def interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, state.cv) + for tpair in interior_trace_pairs(discr, state.cv, tag=_EulerCVTag) ] tseed_interior_pairs = None @@ -157,7 +165,7 @@ def interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, state.temperature) + for tpair in interior_trace_pairs(discr, state.temperature, tag=_EulerTseedTag) ] interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, From 20a8663117ed88132d04451b85aa3ecc9d3b268f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 1 Feb 2022 12:52:19 -0600 Subject: [PATCH 499/873] Remove superflous section in inviscid summations. --- mirgecom/euler.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 57e83d7ab..cf651347d 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -174,8 +174,8 @@ def _interp_to_surf_quad(utpair): inviscid_flux_bnd = ( # Interior faces - sum(inviscid_facial_flux(discr, gas_model, state_pair, - inviscid_numerical_flux_func) + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=inviscid_numerical_flux_func) for state_pair in interior_states_quad) # Domain boundary faces @@ -185,10 +185,6 @@ def _interp_to_surf_quad(utpair): state_minus=boundary_states_quad[btag], time=time) for btag in boundaries) - # Interior boundaries - + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, - numerical_flux_func=inviscid_numerical_flux_func) - for state_pair in interior_states_quad) ) return -div_operator(discr, dd_quad_vol, dd_quad_faces, From 10e4d14a0ce26b0776d898dfb84bdc1c5e7a80ad Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 9 Feb 2022 06:45:48 +0100 Subject: [PATCH 500/873] undo pytato branch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index fc54f3c1d..671a6094c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,6 +19,6 @@ pyyaml --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git@boundary_lazy_comm_v2#egg=grudge ---editable git+https://github.com/inducer/pytato.git@distributed-v3#egg=pytato +--editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From cd761a969658283fd06528e7d71cdeb464945a1f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 17 Feb 2022 13:02:32 -0600 Subject: [PATCH 501/873] Restore lost get_density function and correct docstring to match. --- mirgecom/eos.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 33c875347..b21894a67 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -112,6 +112,7 @@ class GasEOS(metaclass=ABCMeta): .. automethod:: kinetic_energy .. automethod:: gamma .. automethod:: get_internal_energy + .. automethod:: get_density """ @abstractmethod @@ -156,6 +157,10 @@ def kinetic_energy(self, cv: ConservedVars): def gamma(self, cv: ConservedVars, temperature=None): """Get the ratio of gas specific heats Cp/Cv.""" + @abstractmethod + def get_density(self, pressure, temperature, species_mass_fractions=None): + """Get the density from pressure, and temperature.""" + @abstractmethod def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" @@ -301,6 +306,17 @@ def gas_const(self, cv: ConservedVars = None): """Get specific gas constant R.""" return self._gas_const + def get_density(self, pressure, temperature, species_mass_fractions=None): + r"""Get gas density from pressure and temperature. + + The gas density is calculated as: + + .. math:: + + \rho = \frac{p}{R_s T} + """ + return pressure / (self._gas_const * temperature) + def kinetic_energy(self, cv: ConservedVars): r"""Get kinetic (i.e. not internal) energy of gas. @@ -669,12 +685,6 @@ def internal_energy(self, cv: ConservedVars): def get_density(self, pressure, temperature, species_mass_fractions): r"""Get the density from pressure, temperature, and species fractions (Y). - The gas density $\rho$ is calculated from pressure, temperature and $R$ as: - - .. math:: - - \rho = \frac{p}{R_s T} - Parameters ---------- pressure: :class:`~meshmode.dof_array.DOFArray` From 1273831976825c98d1fa5cecb6567c82c20be581 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Thu, 17 Feb 2022 16:09:52 -0600 Subject: [PATCH 502/873] updated eos from production --- mirgecom/eos.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 33c875347..b21894a67 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -112,6 +112,7 @@ class GasEOS(metaclass=ABCMeta): .. automethod:: kinetic_energy .. automethod:: gamma .. automethod:: get_internal_energy + .. automethod:: get_density """ @abstractmethod @@ -156,6 +157,10 @@ def kinetic_energy(self, cv: ConservedVars): def gamma(self, cv: ConservedVars, temperature=None): """Get the ratio of gas specific heats Cp/Cv.""" + @abstractmethod + def get_density(self, pressure, temperature, species_mass_fractions=None): + """Get the density from pressure, and temperature.""" + @abstractmethod def get_internal_energy(self, temperature, *, mass, species_mass_fractions): """Get the fluid internal energy from temperature and mass.""" @@ -301,6 +306,17 @@ def gas_const(self, cv: ConservedVars = None): """Get specific gas constant R.""" return self._gas_const + def get_density(self, pressure, temperature, species_mass_fractions=None): + r"""Get gas density from pressure and temperature. + + The gas density is calculated as: + + .. math:: + + \rho = \frac{p}{R_s T} + """ + return pressure / (self._gas_const * temperature) + def kinetic_energy(self, cv: ConservedVars): r"""Get kinetic (i.e. not internal) energy of gas. @@ -669,12 +685,6 @@ def internal_energy(self, cv: ConservedVars): def get_density(self, pressure, temperature, species_mass_fractions): r"""Get the density from pressure, temperature, and species fractions (Y). - The gas density $\rho$ is calculated from pressure, temperature and $R$ as: - - .. math:: - - \rho = \frac{p}{R_s T} - Parameters ---------- pressure: :class:`~meshmode.dof_array.DOFArray` From 4d73bb5af86e622ce0c5fbae50c0fb87015a3b6c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 17 Feb 2022 23:16:31 -0600 Subject: [PATCH 503/873] Sharpen prototyping, docstrings --- mirgecom/eos.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index b21894a67..2c23b9037 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -162,8 +162,8 @@ def get_density(self, pressure, temperature, species_mass_fractions=None): """Get the density from pressure, and temperature.""" @abstractmethod - def get_internal_energy(self, temperature, *, mass, species_mass_fractions): - """Get the fluid internal energy from temperature and mass.""" + def get_internal_energy(self, temperature, species_mass_fractions): + """Get the fluid internal energy from temperature.""" def dependent_vars( self, cv: ConservedVars, @@ -474,21 +474,19 @@ def total_energy(self, cv, pressure, temperature=None): return (pressure / (self._gamma - 1.0) + self.kinetic_energy(cv)) - def get_internal_energy(self, temperature, **kwargs): - r"""Get the gas thermal energy from temperature, and fluid density. + def get_internal_energy(self, temperature, species_mass_fractions=None): + r"""Get the gas thermal energy from temperature. The gas internal energy $e$ is calculated from: .. math:: - e = R_s T \frac{\rho}{\left(\gamma - 1\right)} + e = \frac{R_s T}{\left(\gamma - 1\right)} Parameters ---------- temperature: :class:`~meshmode.dof_array.DOFArray` The fluid temperature - mass: float or :class:`~meshmode.dof_array.DOFArray` - The fluid mass density species_mass_fractions: Unused """ @@ -702,8 +700,7 @@ def get_density(self, pressure, temperature, species_mass_fractions): return self._pyrometheus_mech.get_density(pressure, temperature, species_mass_fractions) - def get_internal_energy(self, temperature, species_mass_fractions, - mass=None): + def get_internal_energy(self, temperature, species_mass_fractions): r"""Get the gas thermal energy from temperature, and species fractions (Y). The gas internal energy $e$ is calculated from: @@ -718,8 +715,6 @@ def get_internal_energy(self, temperature, species_mass_fractions, The fluid temperature species_mass_fractions: numpy.ndarray Object array of species mass fractions - mass: - Unused """ return self._pyrometheus_mech.get_mixture_internal_energy_mass( temperature, species_mass_fractions) From 8c4a1b381c495de57199477ed1154cd72b1ea177 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 17 Feb 2022 23:50:32 -0600 Subject: [PATCH 504/873] Use *this* branch as production --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 5ea2f0527..4fb9cdab8 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-distpar-lazy" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="production-pardist" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 9853946be4647d69d4f68cb4c07160e82fee981c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 00:12:49 -0600 Subject: [PATCH 505/873] Temporarily bring back mass arg to fix production drivers --- mirgecom/boundary.py | 4 +--- mirgecom/eos.py | 8 +++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 39fc741bd..463fa4b31 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -498,9 +498,7 @@ def isothermal_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs) mass_frac_plus = state_minus.species_mass_fractions internal_energy_plus = gas_model.eos.get_internal_energy( - temperature=temperature_wall, species_mass_fractions=mass_frac_plus, - mass=state_minus.mass_density - ) + temperature=temperature_wall, species_mass_fractions=mass_frac_plus) total_energy_plus = state_minus.mass_density*(internal_energy_plus + .5*np.dot(velocity_plus, velocity_plus)) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 2c23b9037..66b7346ac 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -162,7 +162,8 @@ def get_density(self, pressure, temperature, species_mass_fractions=None): """Get the density from pressure, and temperature.""" @abstractmethod - def get_internal_energy(self, temperature, species_mass_fractions): + def get_internal_energy(self, temperature, species_mass_fractions=None, + mass=None): """Get the fluid internal energy from temperature.""" def dependent_vars( @@ -474,7 +475,8 @@ def total_energy(self, cv, pressure, temperature=None): return (pressure / (self._gamma - 1.0) + self.kinetic_energy(cv)) - def get_internal_energy(self, temperature, species_mass_fractions=None): + def get_internal_energy(self, temperature, species_mass_fractions=None, + mass=None): r"""Get the gas thermal energy from temperature. The gas internal energy $e$ is calculated from: @@ -700,7 +702,7 @@ def get_density(self, pressure, temperature, species_mass_fractions): return self._pyrometheus_mech.get_density(pressure, temperature, species_mass_fractions) - def get_internal_energy(self, temperature, species_mass_fractions): + def get_internal_energy(self, temperature, species_mass_fractions, mass=None): r"""Get the gas thermal energy from temperature, and species fractions (Y). The gas internal energy $e$ is calculated from: From a7d548611d90623f39cb7ab6f28b5a776b45b99a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 00:26:28 -0600 Subject: [PATCH 506/873] Merge production - use *this* branch as production --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 4fb9cdab8..67b114f33 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="production-pardist" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="production-pardist" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 52607b6b508ee7d1a5f860147b94d7c3ae1e571d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 01:49:39 -0600 Subject: [PATCH 507/873] Update examples to use the latest pardist context --- examples/autoignition-mpi.py | 5 ++--- examples/doublemach-mpi.py | 16 +++++++++++----- examples/heat-source-mpi.py | 10 ++++++---- examples/hotplate-mpi.py | 12 +++++++----- examples/lump-mpi.py | 10 ++++++---- examples/mixture-mpi.py | 12 +++++++----- examples/nsmix-mpi.py | 12 +++++++----- examples/poiseuille-mpi.py | 16 +++++++++++----- examples/pulse-mpi.py | 8 +++++--- examples/scalar-lump-mpi.py | 10 ++++++---- examples/sod-mpi.py | 10 ++++++---- examples/vortex-mpi.py | 10 ++++++---- 12 files changed, 80 insertions(+), 51 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index adf25d6d5..f6ab39e8e 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -30,12 +30,11 @@ from functools import partial from grudge.array_context import ( - MPIPytatoPyOpenCLArrayContext as PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from meshmode.array_context import ( - PyOpenCLArrayContext, - # SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 929129e4c..30869883e 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -30,9 +30,12 @@ import pyopencl.tools as cl_tools from functools import partial +from grudge.array_context import ( + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) + from meshmode.array_context import ( - PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext @@ -151,9 +154,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Timestepping control current_step = 0 diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index dba6af57d..348e40b85 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -27,8 +27,10 @@ import numpy.linalg as la # noqa import pyopencl as cl -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext @@ -73,7 +75,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, @@ -209,7 +211,7 @@ def rhs(t, u): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index 836672784..06654c10d 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -29,9 +29,9 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -114,9 +114,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control timestepper = rk4_step diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 00c7f26d0..624307da9 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -29,8 +29,10 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -99,7 +101,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue) else: actx = actx_class(queue, @@ -391,7 +393,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 4193742e4..7b59baaa1 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -29,9 +29,9 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -103,9 +103,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 8c49f84fd..907c5aa1f 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -30,9 +30,9 @@ from functools import partial from pytools.obj_array import make_obj_array -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -108,9 +108,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Timestepping control # This example runs only 3 steps by default (to keep CI ~short) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index cafe7e7b4..096206d6d 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -32,7 +32,7 @@ from grudge.array_context import ( PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext as PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -116,10 +116,16 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class(comm, - queue, - mpi_base_tag=4200, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class( + comm, queue, mpi_base_tag=4200, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) + ) + else: + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) + ) # timestepping control timestepper = rk4_step diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 0aeb078dc..99d6b0ca4 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -35,7 +35,9 @@ PyOpenCLArrayContext ) -from grudge.array_context import MPIPytatoPyOpenCLArrayContext +from grudge.array_context import ( + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -109,7 +111,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue, mpi_base_tag=1300) else: actx = actx_class(queue, @@ -372,7 +374,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 372acba7a..0e65c6291 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -30,8 +30,10 @@ from functools import partial from pytools.obj_array import make_obj_array -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -100,7 +102,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue) else: actx = actx_class(queue, @@ -402,7 +404,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 9f8113a50..0f027b2a9 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -31,7 +31,7 @@ from meshmode.array_context import ( PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -100,9 +100,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index d361f95b3..65697e614 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -29,8 +29,10 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -100,7 +102,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue, mpi_base_tag=1300) else: actx = actx_class(queue, @@ -414,7 +416,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) From 0eb7986a47d0c816f55c6b83d392796dcf0142b3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 01:59:19 -0600 Subject: [PATCH 508/873] Pull array context from the correct place. --- examples/sod-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 0f027b2a9..ca797d590 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -29,7 +29,7 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) From 61ae0cf120b16eeef186b788a45076c5d80be388 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 02:53:29 -0600 Subject: [PATCH 509/873] Fix examples context creation --- examples/lump-mpi.py | 2 +- examples/scalar-lump-mpi.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 624307da9..09f54aa92 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -102,7 +102,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if actx_class == PytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 0e65c6291..7411ad96f 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -103,7 +103,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if actx_class == PytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) From a2042c571063c3f8f88446efbc1e25331608156f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 07:11:29 -0600 Subject: [PATCH 510/873] Gobble up parallel-distributed lazy --- .ci-support/production-drivers-install.sh | 2 +- .ci-support/production-testing-env.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh index 93ad0fbc6..dbc2a5ec6 100755 --- a/.ci-support/production-drivers-install.sh +++ b/.ci-support/production-drivers-install.sh @@ -12,7 +12,7 @@ # The default values result in an install of the Y1 nozzle driver and # Wyatt Hagen's isolator driver that work with current MIRGE-Com # production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} # Loop over the production drivers, clone them, and prepare for execution set -x OIFS="$IFS" diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 67b114f33..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-pardist" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited @@ -16,7 +16,7 @@ export PRODUCTION_BRANCH="production-pardist" # The base production branch to # "fork/repo@branch". The defaults are provided below as an example. Provide custom # production drivers in this variable: # -export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_flame1d@main:illinois-ceesd/drivers_y2-isolator@main" +# export PRODUCTION_DRIVERS="" # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" From eade3a94c2bf8f9111f37acf57ac1ab829040a54 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 08:54:28 -0600 Subject: [PATCH 511/873] Update examples and testing env to match production --- .ci-support/production-testing-env.sh | 4 ++-- examples/autoignition-mpi.py | 17 ++++++++++++----- examples/heat-source-mpi.py | 10 ++++++---- examples/lump-mpi.py | 12 +++++++----- examples/mixture-mpi.py | 12 +++++++----- examples/pulse-mpi.py | 8 +++++--- examples/scalar-lump-mpi.py | 12 +++++++----- examples/sod-mpi.py | 14 ++++++++------ examples/vortex-mpi.py | 10 ++++++---- 9 files changed, 60 insertions(+), 39 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 5ea2f0527..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="production-distpar-lazy" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited @@ -16,7 +16,7 @@ export PRODUCTION_BRANCH="production-distpar-lazy" # The base production branc # "fork/repo@branch". The defaults are provided below as an example. Provide custom # production drivers in this variable: # -export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_flame1d@main:illinois-ceesd/drivers_y2-isolator@main" +# export PRODUCTION_DRIVERS="" # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 648b02606..9643798c8 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -29,10 +29,14 @@ import pyopencl.tools as cl_tools from functools import partial +from grudge.array_context import ( + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) + from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + PyOpenCLArrayContext ) + from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -107,9 +111,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # Some discretization parameters dim = 2 diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index dba6af57d..348e40b85 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -27,8 +27,10 @@ import numpy.linalg as la # noqa import pyopencl as cl -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext @@ -73,7 +75,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, @@ -209,7 +211,7 @@ def rhs(t, u): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 00c7f26d0..09f54aa92 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -29,8 +29,10 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -99,8 +101,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) @@ -391,7 +393,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 61a120717..7b59baaa1 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -29,9 +29,9 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -103,9 +103,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 0aeb078dc..99d6b0ca4 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -35,7 +35,9 @@ PyOpenCLArrayContext ) -from grudge.array_context import MPIPytatoPyOpenCLArrayContext +from grudge.array_context import ( + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -109,7 +111,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue, mpi_base_tag=1300) else: actx = actx_class(queue, @@ -372,7 +374,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 372acba7a..7411ad96f 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -30,8 +30,10 @@ from functools import partial from pytools.obj_array import make_obj_array -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -100,8 +102,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) else: actx = actx_class(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) @@ -402,7 +404,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index e3587e4db..ca797d590 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -29,9 +29,9 @@ import pyopencl.tools as cl_tools from functools import partial -from meshmode.array_context import ( +from grudge.array_context import ( PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext ) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -100,9 +100,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control if use_leap: @@ -335,7 +337,7 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - fluid_state = make_fluid_state(state, gas_model) + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) return euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index d361f95b3..65697e614 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -29,8 +29,10 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import (PyOpenCLArrayContext, - MPIPytatoPyOpenCLArrayContext) +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw @@ -100,7 +102,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPIPytatoPyOpenCLArrayContext: + if actx_class == PytatoPyOpenCLArrayContext: actx = actx_class(comm, queue, mpi_base_tag=1300) else: actx = actx_class(queue, @@ -414,7 +416,7 @@ def my_rhs(t, state): raise ValueError("Can't use lazy and profiling together.") actx_class = PyOpenCLProfilingArrayContext else: - actx_class = MPIPytatoPyOpenCLArrayContext if args.lazy \ + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ else PyOpenCLArrayContext logging.basicConfig(format="%(message)s", level=logging.INFO) From 2457fddef1ab192cb2b9402e450b6dbfdd6f7581 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 10:10:04 -0600 Subject: [PATCH 512/873] Deflakate --- mirgecom/euler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index cb45963de..1e26ea381 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -163,7 +163,8 @@ def _interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) _interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, state.temperature, tag=_EulerTseedTag)] + for tpair in interior_trace_pairs(discr, state.temperature, + tag=_EulerTseedTag)] interior_states_quad = make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, tseed_interior_pairs) From 1b4aca3eed87e52c2222aa515166b5dfca4c2b76 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 11:23:24 -0600 Subject: [PATCH 513/873] Customize production env --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..73334f654 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_BRANCH="pardist-production" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 4efff4aee0bc501f1870063f8ba769b6bea2854b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 12:13:45 -0600 Subject: [PATCH 514/873] Update context used in examples. --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 73334f654..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,7 +8,7 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="pardist-production" # The base production branch to be installed by emirge +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge # export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited From 5207b99a12801935088db2324ac7279fada68c41 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 18 Feb 2022 16:31:43 -0600 Subject: [PATCH 515/873] Banish mass from internal energy inversion interface --- mirgecom/eos.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 66b7346ac..f1ec912b0 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -162,8 +162,7 @@ def get_density(self, pressure, temperature, species_mass_fractions=None): """Get the density from pressure, and temperature.""" @abstractmethod - def get_internal_energy(self, temperature, species_mass_fractions=None, - mass=None): + def get_internal_energy(self, temperature, species_mass_fractions=None): """Get the fluid internal energy from temperature.""" def dependent_vars( @@ -475,8 +474,7 @@ def total_energy(self, cv, pressure, temperature=None): return (pressure / (self._gamma - 1.0) + self.kinetic_energy(cv)) - def get_internal_energy(self, temperature, species_mass_fractions=None, - mass=None): + def get_internal_energy(self, temperature, species_mass_fractions=None): r"""Get the gas thermal energy from temperature. The gas internal energy $e$ is calculated from: @@ -702,7 +700,7 @@ def get_density(self, pressure, temperature, species_mass_fractions): return self._pyrometheus_mech.get_density(pressure, temperature, species_mass_fractions) - def get_internal_energy(self, temperature, species_mass_fractions, mass=None): + def get_internal_energy(self, temperature, species_mass_fractions): r"""Get the gas thermal energy from temperature, and species fractions (Y). The gas internal energy $e$ is calculated from: From 9bfb39b78ca752ffcb85c3efba10bdb685889ad0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 19 Feb 2022 07:16:23 -0600 Subject: [PATCH 516/873] Remove deprecated stepper interface. --- mirgecom/steppers.py | 49 ++++++++++---------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index da921c873..bd5bfd877 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -29,8 +29,6 @@ """ import numpy as np -from logpyle import set_dt -from mirgecom.logging_quantities import set_sim_state from pytools import memoize_in from arraycontext import ( freeze, @@ -70,12 +68,9 @@ def _force_evaluation(actx, state): return thaw(freeze(state, actx), actx) -def _advance_state_stepper_func(rhs, timestepper, - state, t_final, dt=0, - t=0.0, istep=0, - pre_step_callback=None, - post_step_callback=None, - logmgr=None, eos=None, dim=None): +def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, + t=0.0, istep=0, pre_step_callback=None, + post_step_callback=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -128,9 +123,6 @@ def _advance_state_stepper_func(rhs, timestepper, while t < t_final: state = _force_evaluation(actx, state) - if logmgr: - logmgr.tick_before() - if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) @@ -142,21 +134,12 @@ def _advance_state_stepper_func(rhs, timestepper, if post_step_callback is not None: state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return istep, t, state -def _advance_state_leap(rhs, timestepper, state, - t_final, dt=0, - component_id="state", - t=0.0, istep=0, - pre_step_callback=None, - post_step_callback=None, - logmgr=None, eos=None, dim=None): +def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, + component_id="state", t=0.0, istep=0, + pre_step_callback=None, post_step_callback=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. Parameters @@ -271,12 +254,9 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, state, t_final, - component_id="state", - t=0.0, istep=0, dt=0, - pre_step_callback=None, - post_step_callback=None, - logmgr=None, eos=None, dim=None): +def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, + component_id="state", pre_step_callback=None, + post_step_callback=None): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -329,12 +309,6 @@ def advance_state(rhs, timestepper, state, t_final, import sys leap_timestepper = False - if ((logmgr is not None) or (dim is not None) or (eos is not None)): - from warnings import warn - warn("Passing logmgr, dim, or eos into the stepper is a deprecated stepper " - "signature. See the examples for the current and preferred usage.", - DeprecationWarning, stacklevel=2) - if "leap" in sys.modules: # The timestepper can still either be a leap method generator # or a user-passed function. @@ -349,8 +323,7 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - component_id=component_id, - istep=istep, logmgr=logmgr, eos=eos, dim=dim, + component_id=component_id, istep=istep ) else: (current_step, current_t, current_state) = \ @@ -359,7 +332,7 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - istep=istep, logmgr=logmgr, eos=eos, dim=dim + istep=istep ) return current_step, current_t, current_state From 02a79a0a2f2b4f91768a23a32c3f37664e6de837 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 22 Feb 2022 08:57:15 -0600 Subject: [PATCH 517/873] Add new boundary treatments --- examples/mixture-mpi.py | 2 +- mirgecom/boundary.py | 261 +++++++++++++++++++++++++++++++++++++++ mirgecom/initializers.py | 50 ++++++++ 3 files changed, 312 insertions(+), 1 deletion(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 7b59baaa1..5414ce617 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -403,7 +403,7 @@ def my_rhs(t, state): post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, current_state.temperature]), - t=current_t, t_final=t_final, eos=eos, dim=dim) + t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 463fa4b31..83be1ac0e 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -13,6 +13,9 @@ .. autoclass:: AdiabaticSlipBoundary .. autoclass:: AdiabaticNoslipMovingBoundary .. autoclass:: IsothermalNoSlipBoundary +.. autoclass:: FarfieldBoundary +.. autoclass:: InflowBoundary +.. autoclass:: OutflowBoundary """ __copyright__ = """ @@ -515,3 +518,261 @@ def isothermal_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs) def temperature_bc(self, state_minus, **kwargs): """Get temperature value to weakly prescribe wall bc.""" return 2*self._wall_temp - state_minus.temperature + + +class FarfieldBoundary(PrescribedFluidBoundary): + r"""Farfield boundary treatment. + + This class implements a farfield boundary as described by + [Mengaldo_2014]_. The boundary condition is implemented + as: + $q_bc = q_\inf$ + """ + + def __init__(self, numdim, numspecies, free_stream_temperature=300, + free_stream_pressure=101325, free_stream_velocity=None, + free_stream_mass_fractions=None): + """Initialize the boundary condition object.""" + if free_stream_velocity is None: + free_stream_velocity = np.zeros(numdim) + if len(free_stream_velocity) != numdim: + raise ValueError("Free-stream velocity must be of ambient dimension.") + if numspecies > 0: + if free_stream_mass_fractions is None: + raise ValueError("Free-stream species mixture fractions must be" + " given.") + if len(free_stream_mass_fractions) != numspecies: + raise ValueError("Free-stream species mixture fractions of improper" + " size.") + + self._temperature = free_stream_temperature + self._pressure = free_stream_pressure + self._species_mass_fractions = free_stream_mass_fractions + self._velocity = free_stream_velocity + + PrescribedFluidBoundary.__init__( + self, boundary_state_func=self.farfield_state, + boundary_temperature_func=self.temperature_bc + ) + + def farfield_state(self, discr, btag, gas_model, state_minus, **kwargs): + """Get the exterior solution on the boundary.""" + free_stream_mass_fractions = (0*state_minus.species_mass_fractions + + self._species_mass_fractions) + free_stream_temperature = 0*state_minus.temperature + self._temperature + free_stream_pressure = 0*state_minus.pressure + self._pressure + free_stream_density = gas_model.eos.get_density( + pressure=free_stream_pressure, temperature=free_stream_temperature, + mass_fractions=free_stream_mass_fractions) + free_stream_velocity = 0*state_minus.velocity + self._velocity + free_stream_internal_energy = gas_model.eos.get_internal_energy( + temperature=free_stream_temperature, + mass_fractions=free_stream_mass_fractions) + + free_stream_total_energy = \ + free_stream_density*(free_stream_internal_energy + + .5*np.dot(free_stream_velocity, + free_stream_velocity)) + free_stream_spec_mass = free_stream_density * free_stream_mass_fractions + + cv_infinity = make_conserved( + state_minus.dim, mass=free_stream_density, + energy=free_stream_total_energy, + momentum=free_stream_density*free_stream_velocity, + species_mass=free_stream_spec_mass + ) + + return make_fluid_state(cv=cv_infinity, gas_model=gas_model, + temperature_seed=free_stream_temperature) + + def temperature_bc(self, state_minus, **kwargs): + """Get temperature value to weakly prescribe wall bc.""" + return 0*state_minus.temperature + self._temperature + + +class OutflowBoundary(PrescribedFluidBoundary): + r"""Outflow boundary treatment. + + This class implements an outflow boundary as described by + [Mengaldo_2014]_. The boundary condition is implemented + as: + + .. math: + + \rho^+ &= \rho^- + \rho\mathbf{Y}^+ &= \rho\mathbf{Y}^- + \rho\mathbf{V}^+ &= \rho^\mathbf{V}^- + + Total energy for the flow is computed as follows: + + + When the flow is super-sonic, i.e. when: + + .. math: + + \rho\mathbf{V} \cdot \hat\mathbf{n} \ge c, + + then the internal solution is used outright: + + .. math: + + \rho{E}^+ &= \rho{E}^- + + otherwise the flow is sub-sonic, and the prescribed boundary pressure, + $P^+$, is used to compute the energy: + + .. math: + + \rho{E}^+ &= \frac{\left(2~P^+ - P^-\right)}{\left(\gamma-1\right)} + + \frac{1}{2\rho^+}\left(\rho\mathbf{V}^+\cdot\rho\mathbf{V}^+\right). + """ + + def __init__(self, boundary_pressure=101325): + """Initialize the boundary condition object.""" + self._pressure = boundary_pressure + PrescribedFluidBoundary.__init__( + self, boundary_state_func=self.outflow_state + ) + + def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): + """Get the exterior solution on the boundary. + + This is the partially non-reflective boundary state described by + [Mengaldo_2014]_ eqn. 40 if super-sonic, 41 if sub-sonic. + """ + actx = state_minus.array_context + nhat = thaw(discr.normal(btag), actx) + # boundary-normal velocity + boundary_vel = np.dot(state_minus.velocity, nhat)*nhat + boundary_speed = actx.np.sqrt(np.dot(boundary_vel, boundary_vel)) + speed_of_sound = state_minus.speed_of_sound + kinetic_energy = gas_model.eos.kinetic_energy(state_minus.cv) + gamma = gas_model.eos.gamma(state_minus.cv, state_minus.temperature) + external_pressure = 2*self._pressure - state_minus.pressure + boundary_pressure = actx.np.where(boundary_speed >= speed_of_sound, + state_minus.pressure, external_pressure) + internal_energy = boundary_pressure / (gamma - 1) + total_energy = internal_energy + kinetic_energy + cv_outflow = state_minus.cv.replace(energy=total_energy) + + return make_fluid_state(cv=cv_outflow, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + +class InflowBoundary(PrescribedFluidBoundary): + r"""Inflow boundary treatment. + + This class implements an outflow boundary as described by + [Mengaldo_2014]_. The boundary condition is implemented + as: + + .. math: + + \rho^+ &= \rho^- + \rho\mathbf{Y}^+ &= \rho\mathbf{Y}^- + \rho\mathbf{V}^+ &= \rho^\mathbf{V}^- + + Total energy for the flow is computed as follows: + + + When the flow is super-sonic, i.e. when: + + .. math: + + \rho\mathbf{V} \cdot \hat\mathbf{n} \ge c, + + then the internal solution is used outright: + + .. math: + + \rho{E}^+ &= \rho{E}^- + + otherwise the flow is sub-sonic, and the prescribed boundary pressure, + $P^+$, is used to compute the energy: + + .. math: + + \rho{E}^+ &= \frac{\left(2~P^+ - P^-\right)}{\left(\gamma-1\right)} + + \frac{1}{2\rho^+}\left(\rho\mathbf{V}^+\cdot\rho\mathbf{V}^+\right). + """ + + def __init__(self, dim, free_stream_pressure=None, free_stream_temperature=None, + free_stream_density=None, free_stream_velocity=None, + free_stream_mass_fractions=None, gas_model=None): + """Initialize the boundary condition object.""" + if free_stream_velocity is None: + raise ValueError("InflowBoundary requires *free_stream_velocity*.") + + from mirgecom.initializers import initialize_fluid_state + self._free_stream_state = initialize_fluid_state( + dim, gas_model, density=free_stream_density, + velocity=free_stream_velocity, + mass_fractions=free_stream_mass_fractions, pressure=free_stream_pressure, + temperature=free_stream_temperature) + + self._gamma = gas_model.eos.gamma( + self._free_stream_state.cv, + temperature=self._free_stream_state.temperature + ) + + PrescribedFluidBoundary.__init__( + self, boundary_state_func=self.inflow_state + ) + + def inflow_state(self, discr, btag, gas_model, state_minus, **kwargs): + """Get the exterior solution on the boundary. + + This is the partially non-reflective boundary state described by + [Mengaldo_2014]_ eqn. 40 if super-sonic, 41 if sub-sonic. + """ + actx = state_minus.array_context + nhat = thaw(discr.normal(btag), actx) + + v_plus = np.dot(self._free_stream_state.velocity, nhat) + rho_plus = self._free_stream_state.mass_density + c_plus = self._free_stream_state.speed_of_sound + gamma_plus = self._gamma + + v_minus = np.dot(state_minus.velocity, nhat) + gamma_minus = gas_model.eos.gamma(state_minus.cv, + temperature=state_minus.temperature) + c_minus = state_minus.speed_of_sound + + ones = 0*v_minus + 1 + r_plus_subsonic = v_minus + 2*c_minus/(gamma_minus - 1) + r_plus_supersonic = (v_plus + 2*c_plus/(gamma_plus - 1))*ones + r_minus = v_plus - 2*c_plus/(gamma_plus - 1)*ones + r_plus = actx.np.where(v_minus >= c_minus, r_plus_supersonic, + r_plus_subsonic) + + velocity_boundary = (r_minus + r_plus)/2 + velocity_boundary = ( + self._free_stream_state.velocity + (velocity_boundary - v_plus)*nhat + ) + + c_boundary = (gamma_plus - 1)*(r_plus - r_minus)/4 + c_boundary2 = c_boundary**2 + entropy_boundary = c_plus*c_plus/(gamma_plus*rho_plus**(gamma_plus-1)) + rho_boundary = c_boundary*c_boundary/(gamma_plus * entropy_boundary) + pressure_boundary = rho_boundary * c_boundary2 / gamma_plus + energy_boundary = ( + pressure_boundary / (gamma_plus - 1) + + rho_boundary*np.dot(velocity_boundary, velocity_boundary) + ) + species_mass_boundary = None + if self._free_stream_state.is_mixture: + species_mass_boundary = ( + rho_boundary * self._free_stream_state.species_mass_fractions + ) + + boundary_cv = make_conserved(dim=state_minus.dim, mass=rho_boundary, + energy=energy_boundary, + momentum=rho_boundary * velocity_boundary, + species_mass=species_mass_boundary) + + return make_fluid_state(cv=boundary_cv, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + def temperature_bc(self, state_minus, **kwargs): + """Get temperature value to weakly prescribe wall bc.""" + return 0*state_minus.temperature + self._free_stream_temperature diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index c53e8cb72..6ec4e7b5b 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -14,6 +14,10 @@ .. autoclass:: MixtureInitializer .. autoclass:: PlanarDiscontinuity .. autoclass:: PlanarPoiseuille + +State Initializers +^^^^^^^^^^^^^^^^^^ +.. automethod:: initialize_fluid_state """ __copyright__ = """ @@ -48,6 +52,52 @@ from mirgecom.fluid import make_conserved +def initialize_fluid_state(dim, gas_model, pressure=None, temperature=None, + density=None, velocity=None, mass_fractions=None): + """Create a fluid state from a set of minimal input data.""" + if gas_model is None: + raise ValueError("Gas model is required to create a CV.") + + if velocity is None: + velocity = np.zeros(dim) + + if pressure is not None and temperature is not None and density is not None: + raise ValueError("State is overspecified, require only 2 of (pressure, " + "temperature, density)") + + if pressure is None: + if temperature is None or density is None: + raise ValueError("State is underspecified, require 2 of (pressure, " + "temperature, density)") + pressure = gas_model.eos.get_pressure(density, temperature, mass_fractions) + + if temperature is None: + if density is None: + raise ValueError("State is underspecified, require 2 of (pressure, " + "temperature, density)") + temperature = gas_model.eos.get_temperature( + density, pressure, mass_fractions) + + if density is None: + density = gas_model.eos.get_density(pressure, temperature, mass_fractions) + + internal_energy = gas_model.eos.get_internal_energy( + temperature=temperature, mass=density, mass_fractions=mass_fractions) + + species_mass = None + if mass_fractions is not None: + species_mass = density * mass_fractions + + total_energy = density*internal_energy + density*np.dot(velocity, velocity)/2 + momentum = density*velocity + + cv = make_conserved(dim=dim, mass=density, energy=total_energy, + momentum=momentum, species_mass=species_mass) + + from mirgecom.gas_model import make_fluid_state + return make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=temperature) + + def make_pulse(amp, r0, w, r): r"""Create a Gaussian pulse. From bad6fb07413232d654a67a8c938bd6641a3c9632 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 22 Feb 2022 13:44:59 -0600 Subject: [PATCH 518/873] Dull down an incorrect docstring, add doc ref for Mengaldo BC --- doc/misc.rst | 4 +++- mirgecom/boundary.py | 41 ++++++----------------------------------- 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/doc/misc.rst b/doc/misc.rst index eec28e057..c58904cb5 100644 --- a/doc/misc.rst +++ b/doc/misc.rst @@ -77,4 +77,6 @@ References `(DOI) `__ .. [Toro_2009] Eleuterio F. Toro (2009), Riemann Solvers and Numerical Methods for Fluid Dynamics, Springer \ `(DOI) `__ - +.. [Mengaldo_2014] G. Mengaldo (2009), A Guide to the Implementation of Boundary Conditions in Compact \ + High-Order Methods for Compressible Aerodynamics \ + `(DOI) `__ diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 83be1ac0e..e5c110761 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -526,6 +526,7 @@ class FarfieldBoundary(PrescribedFluidBoundary): This class implements a farfield boundary as described by [Mengaldo_2014]_. The boundary condition is implemented as: + $q_bc = q_\inf$ """ @@ -586,7 +587,7 @@ def farfield_state(self, discr, btag, gas_model, state_minus, **kwargs): temperature_seed=free_stream_temperature) def temperature_bc(self, state_minus, **kwargs): - """Get temperature value to weakly prescribe wall bc.""" + """Get temperature value to weakly prescribe flow temperature at boundary.""" return 0*state_minus.temperature + self._temperature @@ -662,38 +663,8 @@ def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): class InflowBoundary(PrescribedFluidBoundary): r"""Inflow boundary treatment. - This class implements an outflow boundary as described by - [Mengaldo_2014]_. The boundary condition is implemented - as: - - .. math: - - \rho^+ &= \rho^- - \rho\mathbf{Y}^+ &= \rho\mathbf{Y}^- - \rho\mathbf{V}^+ &= \rho^\mathbf{V}^- - - Total energy for the flow is computed as follows: - - - When the flow is super-sonic, i.e. when: - - .. math: - - \rho\mathbf{V} \cdot \hat\mathbf{n} \ge c, - - then the internal solution is used outright: - - .. math: - - \rho{E}^+ &= \rho{E}^- - - otherwise the flow is sub-sonic, and the prescribed boundary pressure, - $P^+$, is used to compute the energy: - - .. math: - - \rho{E}^+ &= \frac{\left(2~P^+ - P^-\right)}{\left(\gamma-1\right)} - + \frac{1}{2\rho^+}\left(\rho\mathbf{V}^+\cdot\rho\mathbf{V}^+\right). + This class implements an inflow boundary as described by + [Mengaldo_2014]_. """ def __init__(self, dim, free_stream_pressure=None, free_stream_temperature=None, @@ -774,5 +745,5 @@ def inflow_state(self, discr, btag, gas_model, state_minus, **kwargs): temperature_seed=state_minus.temperature) def temperature_bc(self, state_minus, **kwargs): - """Get temperature value to weakly prescribe wall bc.""" - return 0*state_minus.temperature + self._free_stream_temperature + """Temperature value that prescribes the desired temperature.""" + return -state_minus.temperature + 2.0*self._free_stream_temperature From 163a01ae5ab721e1a21507e8f77b3f7a36104876 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 23 Feb 2022 10:09:24 -0600 Subject: [PATCH 519/873] Fix up broken docstrings --- doc/misc.rst | 4 ++-- mirgecom/boundary.py | 3 ++- mirgecom/initializers.py | 10 +++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/misc.rst b/doc/misc.rst index c58904cb5..47e137196 100644 --- a/doc/misc.rst +++ b/doc/misc.rst @@ -78,5 +78,5 @@ References .. [Toro_2009] Eleuterio F. Toro (2009), Riemann Solvers and Numerical Methods for Fluid Dynamics, Springer \ `(DOI) `__ .. [Mengaldo_2014] G. Mengaldo (2009), A Guide to the Implementation of Boundary Conditions in Compact \ - High-Order Methods for Compressible Aerodynamics \ - `(DOI) `__ + High-Order Methods for Compressible Aerodynamics `(DOI) `__ + diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index e5c110761..0939fb07b 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -527,7 +527,8 @@ class FarfieldBoundary(PrescribedFluidBoundary): [Mengaldo_2014]_. The boundary condition is implemented as: - $q_bc = q_\inf$ + .. math:: + q_bc = q_\infty """ def __init__(self, numdim, numspecies, free_stream_temperature=300, diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 6ec4e7b5b..b7683e653 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -10,14 +10,14 @@ .. autoclass:: MulticomponentLump .. autoclass:: Uniform .. autoclass:: AcousticPulse -.. automethod: make_pulse +.. autofunction:: make_pulse .. autoclass:: MixtureInitializer .. autoclass:: PlanarDiscontinuity .. autoclass:: PlanarPoiseuille State Initializers ^^^^^^^^^^^^^^^^^^ -.. automethod:: initialize_fluid_state +.. autofunction:: initialize_fluid_state """ __copyright__ = """ @@ -115,16 +115,16 @@ def make_pulse(amp, r0, w, r): ---------- amp: float specifies the value of $a_0$, the pulse amplitude - r0: float array + r0: numpy.ndarray specifies the value of $\mathbf{r}_0$, the pulse location w: float specifies the value of $w$, the rms pulse width - r: Object array of DOFArrays + r: numpy.ndarray specifies the nodal coordinates Returns ------- - G: float array + G: numpy.ndarray The values of the exponential function """ dim = len(r) From e78c04fc7e231619679ad58abc1f53aa7c6080c7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Feb 2022 07:22:20 -0600 Subject: [PATCH 520/873] Add multispecies driver for Poiseuille flow. --- examples/README.md | 3 +- examples/poiseuille-multispecies-mpi.py | 552 ++++++++++++++++++++++++ 2 files changed, 554 insertions(+), 1 deletion(-) create mode 100644 examples/poiseuille-multispecies-mpi.py diff --git a/examples/README.md b/examples/README.md index 9f0cd2861..f634187da 100644 --- a/examples/README.md +++ b/examples/README.md @@ -17,4 +17,5 @@ unique features they exercise are as follows: - `hotplate-mpi.py`: Isothermal BC verification (prescribed exact soln) - `doublemach-mpi.py`: AV test case - `nsmix-mpi.py`: Viscous mixture w/Pyrometheus-based EOS -- `poiseuille-mpi.py`: Poiseuille flow verification case \ No newline at end of file +- `poiseuille-mpi.py`: Poiseuille flow verification case +- `poiseuille-multispecies-mpi.py`: Poiseuille flow with passive scalars diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py new file mode 100644 index 000000000..2eba5655b --- /dev/null +++ b/examples/poiseuille-multispecies-mpi.py @@ -0,0 +1,552 @@ +"""Demonstrate a planar Poiseuille flow example with multispecies.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from pytools.obj_array import make_obj_array +from functools import partial + +from grudge.array_context import ( + PyOpenCLArrayContext, + MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from arraycontext import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa + +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer +from grudge.dof_desc import DTAG_BOUNDARY + +from mirgecom.fluid import make_conserved +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import get_sim_timestep + +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + PrescribedFluidBoundary, + # AdiabaticNoslipMovingBoundary, + IsothermalNoSlipBoundary +) +from mirgecom.transport import SimpleTransport +from mirgecom.eos import IdealSingleGas # , PyrometheusMixture +from mirgecom.gas_model import GasModel, make_fluid_state +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None): + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): + """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + if actx_class == PytatoPyOpenCLArrayContext: + actx = actx_class( + comm, queue, mpi_base_tag=4200, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) + ) + else: + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) + ) + + # timestepping control + timestepper = rk4_step + t_final = 1e-7 + current_cfl = 0.05 + current_dt = 1e-8 + current_t = 0 + constant_cfl = False + current_step = 0 + + # some i/o frequencies + nstatus = 100 + nviz = 10 + nrestart = 1000 + nhealth = 100 + + # some geometry setup + dim = 2 + if dim != 2: + raise ValueError("This example must be run with dim = 2.") + x_ch = 1e-4 + left_boundary_location = 0 + right_boundary_location = 0.02 + ybottom = 0. + ytop = .002 + xlen = right_boundary_location - left_boundary_location + ylen = ytop - ybottom + n_refine = 1 + npts_x = n_refine*int(xlen / x_ch) + npts_y = n_refine*int(ylen / x_ch) + + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + npts_axis = (npts_x, npts_y) + box_ll = (left_boundary_location, ybottom) + box_ur = (right_boundary_location, ytop) + generate_mesh = partial(_get_box_mesh, 2, a=box_ll, b=box_ur, n=npts_axis) + from mirgecom.simutil import generate_and_distribute_mesh + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + + order = 2 + discr = EagerDGDiscretization( + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm + ) + nodes = thaw(discr.nodes(), actx) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:1.9e}, "), + ("max_temperature", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + base_pressure = 100000.0 + pressure_ratio = 1.08 + # MikeA: mu=5e-4, spec_d=1e-4, dt=1e-8, kappa=1e-5 + mu = 5e-4 + kappa = 0. + nspecies = 2 + species_diffusivity = 1e-5 * np.ones(nspecies) + xlen = right_boundary_location - left_boundary_location + ylen = ytop - ybottom + + def poiseuille_2d(x_vec, eos, cv=None, **kwargs): + y = x_vec[1] + x = x_vec[0] + # zeros = 0*x + ones = 0*x + 1. + x0 = left_boundary_location + xmax = right_boundary_location + xlen = xmax - x0 + wgt1 = actx.np.less(x, xlen/2) + wgt2 = 1 - wgt1 + # xcor = x*ones + # leno2 = xlen/2*ones + p_low = base_pressure + p_hi = pressure_ratio*base_pressure + dp = p_hi - p_low + dpdx = dp/xlen + h = ytop - ybottom + u_x = dpdx*y*(h - y)/(2*mu) + print(f"flow speed = {dpdx*h*h/(8*mu)}") + p_x = p_hi - dpdx*x + rho = 1.0*ones + mass = 0*x + rho + u_y = 0*x + velocity = make_obj_array([u_x, u_y]) + ke = .5*np.dot(velocity, velocity)*mass + gamma = eos.gamma() + rho_y = rho * make_obj_array([1.0/nspecies for _ in range(nspecies)]) + rho_y[0] = wgt1*rho_y[0] + rho_y[1] = wgt2*rho_y[1] + if cv is not None: + rho_y = wgt1*rho_y + wgt2*mass*cv.species_mass_fractions + + rho_e = p_x/(gamma-1) + ke + return make_conserved(2, mass=mass, energy=rho_e, + momentum=mass*velocity, + species_mass=rho_y) + + initializer = poiseuille_2d + gas_model = GasModel(eos=IdealSingleGas(), + transport=SimpleTransport( + viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=species_diffusivity)) + exact = initializer(x_vec=nodes, eos=gas_model.eos) + + def _exact_boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + cv=state_minus.cv, **kwargs), gas_model) + + boundaries = \ + {DTAG_BOUNDARY("-1"): + PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), + DTAG_BOUNDARY("+1"): + PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), + DTAG_BOUNDARY("-2"): + IsothermalNoSlipBoundary(wall_temperature=348.5), + DTAG_BOUNDARY("+2"): + IsothermalNoSlipBoundary(wall_temperature=348.5)} + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_cv = restart_data["cv"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_cv = exact + + vis_timer = None + + visualizer = make_visualizer(discr, order) + + eosname = gas_model.eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=casename, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_status(step, t, dt, state, component_errors): + dv = state.dv + from grudge.op import nodal_min, nodal_max + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) + if constant_cfl: + cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + cfl = actx.to_numpy(nodal_max(discr, "vol", + get_viscous_cfl(discr, dt, state))) + if rank == 0: + logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" + f"----- Pressure({p_min}, {p_max})\n" + f"----- Temperature({t_min}, {t_max})\n" + "----- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + + def my_write_viz(step, t, state, dv): + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("poiseuille", exact), + ("resid", resid)] + + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "cv": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, component_errors): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + if global_reduce(check_range_local(discr, "vol", dv.pressure, 9.999e4, + 1.00101e5), op="lor"): + health_error = False + from grudge.op import nodal_max, nodal_min + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + + if check_naninf_local(discr, "vol", dv.temperature): + health_error = True + logger.info(f"{rank=}: NANs/INFs in temperature data.") + + if global_reduce(check_range_local(discr, "vol", dv.temperature, 348, 350), + op="lor"): + health_error = False + from grudge.op import nodal_max, nodal_min + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) + logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + + exittol = 1e7 + if max(component_errors) > exittol: + health_error = False + if rank == 0: + logger.info("Solution diverged from exact soln.") + + return health_error + + def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + dv = fluid_state.dv + try: + component_errors = None + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if do_health: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + health_errors = global_reduce( + my_health_check(state, dv, component_errors), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + my_write_viz(step=step, t=t, state=state, dv=dv) + + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, + t_final, constant_cfl) + + if do_status: # needed because logging fails to make output + if component_errors is None: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(step=step, t=t, dt=dt, state=fluid_state, + component_errors=component_errors) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state, dv=dv) + my_write_restart(step=step, t=t, state=state) + raise + + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, gas_model.eos) + logmgr.tick_after() + return state, dt + + orig = np.zeros(shape=(dim,)) + orig[0] = 2*xlen/5. + orig[1] = 7*ylen/10. + + def acoustic_pulse(time, fluid_cv, gas_model): + from mirgecom.initializers import AcousticPulse + acoustic_pulse = AcousticPulse(dim=dim, amplitude=5000.0, width=.0001, + center=orig) + # return fluid_cv + return acoustic_pulse(nodes, cv=fluid_cv, eos=gas_model.eos) + + def my_rhs(t, state): + fluid_state = make_fluid_state(state, gas_model) + return ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + state=fluid_state, time=t, + quadrature_tag=quadrature_tag) + + current_state = make_fluid_state( + cv=acoustic_pulse(current_t, current_cv, gas_model), gas_model=gas_model) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + + current_step, current_t, current_cv = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + state=current_state.cv, t=current_t, t_final=t_final) + + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = current_state.dv + final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, current_state.cv, exact) + + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_status(step=current_step, t=current_t, dt=final_dt, + state=current_state, component_errors=component_errors) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + +if __name__ == "__main__": + import argparse + casename = "poiseuille" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + use_overintegration=args.overintegration, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) + +# vim: foldmethod=marker From 793798ef862d926c99b06d1692df7a5ea4f81af4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Feb 2022 10:50:23 -0600 Subject: [PATCH 521/873] Use kinematic not dynamic viscosity for dt calc --- mirgecom/viscous.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 3f89e2d7e..814fe80ba 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -357,10 +357,10 @@ def get_viscous_timestep(discr, state): length_scales = characteristic_lengthscales(state.array_context, discr) - mu = 0 + nu = 0 d_alpha_max = 0 if state.is_viscous: - mu = state.viscosity + nu = state.viscosity / state.density d_alpha_max = \ get_local_max_species_diffusivity( state.array_context, @@ -369,7 +369,7 @@ def get_viscous_timestep(discr, state): return( length_scales / (state.wavespeed - + ((mu + d_alpha_max) / length_scales)) + + ((nu + d_alpha_max) / length_scales)) ) From f2e56230575fc643ac18fc7d00eb161fa62602c5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Feb 2022 11:08:50 -0600 Subject: [PATCH 522/873] Correct api typo --- mirgecom/viscous.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 2e219bf6c..32ccb3bc5 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -510,7 +510,7 @@ def get_viscous_timestep(discr, state): nu = 0 d_alpha_max = 0 if state.is_viscous: - nu = state.viscosity / state.density + nu = state.viscosity / state.mass_density d_alpha_max = \ get_local_max_species_diffusivity( state.array_context, From 5a618dad28bd4017490d0bb044a8bc48a47cccb0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 25 Feb 2022 11:09:47 -0600 Subject: [PATCH 523/873] Fix api typo --- mirgecom/viscous.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 814fe80ba..5bbbdf698 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -360,7 +360,7 @@ def get_viscous_timestep(discr, state): nu = 0 d_alpha_max = 0 if state.is_viscous: - nu = state.viscosity / state.density + nu = state.viscosity / state.mass_density d_alpha_max = \ get_local_max_species_diffusivity( state.array_context, From 4b78f80d77a8d1dbcac4d7078bbdab61cd8da3d2 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 1 Mar 2022 20:10:24 -0600 Subject: [PATCH 524/873] drop grudge branch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 671a6094c..2d720837b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode ---editable git+https://github.com/inducer/grudge.git@boundary_lazy_comm_v2#egg=grudge +--editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From bb6d687784bf45fc0c12bd9043ab7dcd5be92453 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 1 Mar 2022 20:11:57 -0600 Subject: [PATCH 525/873] restore production drivers --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..c6c7b51e0 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -16,7 +16,7 @@ set -x # "fork/repo@branch". The defaults are provided below as an example. Provide custom # production drivers in this variable: # -# export PRODUCTION_DRIVERS="" +export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_flame1d@main:illinois-ceesd/drivers_y2-isolator@main" # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" From 990ec18a4e100ca64613298e3d20781437ea82d8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 06:47:05 -0600 Subject: [PATCH 526/873] Uncustomize production drivers (let it default) --- .ci-support/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index c6c7b51e0..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -16,7 +16,7 @@ set -x # "fork/repo@branch". The defaults are provided below as an example. Provide custom # production drivers in this variable: # -export PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_flame1d@main:illinois-ceesd/drivers_y2-isolator@main" +# export PRODUCTION_DRIVERS="" # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" From 3b0977e65921107736bca4d80c7f471cf10d3420 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 06:48:38 -0600 Subject: [PATCH 527/873] Uncustomize production drivers (let it default) --- .ci-support/production-drivers-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh index 93ad0fbc6..dbc2a5ec6 100755 --- a/.ci-support/production-drivers-install.sh +++ b/.ci-support/production-drivers-install.sh @@ -12,7 +12,7 @@ # The default values result in an install of the Y1 nozzle driver and # Wyatt Hagen's isolator driver that work with current MIRGE-Com # production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@parallel-lazy:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} # Loop over the production drivers, clone them, and prepare for execution set -x OIFS="$IFS" From 54ba2be404d918b8b8e9c6d1b7fcf0ad8c56add1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 07:12:44 -0600 Subject: [PATCH 528/873] Revert (temporarily) to grudge@boundary_lazy_comm_v2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2d720837b..671a6094c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge +--editable git+https://github.com/inducer/grudge.git@boundary_lazy_comm_v2#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 8fdfc9767e3bcde9aa1be5056168db0de9d65f80 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 09:49:01 -0600 Subject: [PATCH 529/873] Switch to grudge@hashing_comm_tag --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 671a6094c..285ac3b7f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode ---editable git+https://github.com/inducer/grudge.git@boundary_lazy_comm_v2#egg=grudge +--editable git+https://github.com/inducer/grudge.git@hashing_comm_tag#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 45e99881898db19f12160bb95b990d12d1a7e732 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 15:29:56 -0600 Subject: [PATCH 530/873] Update two examples to use new context fetching API. --- examples/autoignition-mpi.py | 41 +++++++++++++----------------------- examples/pulse-mpi.py | 37 ++++++++++++++------------------ 2 files changed, 31 insertions(+), 47 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 9643798c8..172a6494a 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -29,21 +29,10 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from meshmode.array_context import ( - PyOpenCLArrayContext -) - -from mirgecom.profiling import PyOpenCLProfilingArrayContext - from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer - from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging from mirgecom.euler import euler_operator @@ -85,10 +74,13 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_overintegration=False, - use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext, + use_profiling=False, casename=None, lazy=False, + rst_filename=None, actx_class=None, log_dependent=True): """Drive example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -111,12 +103,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # Some discretization parameters dim = 2 @@ -632,16 +624,13 @@ def my_rhs(t, state): from warnings import warn warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - if args.lazy: - log_dependent = False - actx_class = PytatoPyOpenCLArrayContext - else: - actx_class = PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -652,7 +641,7 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_overintegration=args.overintegration, - use_profiling=args.profiling, + use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class, log_dependent=log_dependent) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 99d6b0ca4..995919550 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -31,15 +31,6 @@ import pyopencl as cl import pyopencl.tools as cl_tools -from meshmode.array_context import ( - PyOpenCLArrayContext -) - -from grudge.array_context import ( - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -85,10 +76,13 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, + use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -111,11 +105,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue, mpi_base_tag=1300) + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control current_step = 0 @@ -369,13 +364,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -385,7 +380,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_overintegration=args.overintegration, - use_leap=args.leap, use_profiling=args.profiling, + use_leap=args.leap, use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker From daabcdb865877233809e76e0dca6fdaf143e74bb Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 15:38:19 -0600 Subject: [PATCH 531/873] Fix mistake in `where` call for new boundarys --- mirgecom/boundary.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 0939fb07b..0a042c870 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -651,7 +651,8 @@ def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): kinetic_energy = gas_model.eos.kinetic_energy(state_minus.cv) gamma = gas_model.eos.gamma(state_minus.cv, state_minus.temperature) external_pressure = 2*self._pressure - state_minus.pressure - boundary_pressure = actx.np.where(boundary_speed >= speed_of_sound, + boundary_pressure = actx.np.where(actx.np.greater(boundary_speed, + speed_of_sound), state_minus.pressure, external_pressure) internal_energy = boundary_pressure / (gamma - 1) total_energy = internal_energy + kinetic_energy @@ -714,7 +715,7 @@ def inflow_state(self, discr, btag, gas_model, state_minus, **kwargs): r_plus_subsonic = v_minus + 2*c_minus/(gamma_minus - 1) r_plus_supersonic = (v_plus + 2*c_plus/(gamma_plus - 1))*ones r_minus = v_plus - 2*c_plus/(gamma_plus - 1)*ones - r_plus = actx.np.where(v_minus >= c_minus, r_plus_supersonic, + r_plus = actx.np.where(actx.np.greater(v_minus, c_minus), r_plus_supersonic, r_plus_subsonic) velocity_boundary = (r_minus + r_plus)/2 From 8040a0af19845e46e34a9a6af80f1c1847480244 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 16:28:44 -0600 Subject: [PATCH 532/873] Update examples for new context fetching API --- examples/heat-source-mpi.py | 32 +++++++++++++++----------------- examples/lump-mpi.py | 31 +++++++++++++++---------------- examples/mixture-mpi.py | 31 +++++++++++++++---------------- examples/scalar-lump-mpi.py | 30 ++++++++++++++---------------- examples/sod-mpi.py | 28 ++++++++++++---------------- examples/vortex-mpi.py | 33 ++++++++++++++++----------------- examples/wave-mpi.py | 36 +++++++++++++++++++----------------- 7 files changed, 106 insertions(+), 115 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 348e40b85..3b81f2227 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -27,13 +27,6 @@ import numpy.linalg as la # noqa import pyopencl as cl -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from mirgecom.profiling import PyOpenCLProfilingArrayContext - from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -57,8 +50,11 @@ @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + lazy=False, rst_filename=None, actx_class=None): """Run the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) @@ -75,11 +71,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) from meshmode.distributed import MPIMeshDistributor, get_partition_by_pymetis mesh_dist = MPIMeshDistributor(comm) @@ -206,13 +203,13 @@ def rhs(t, u): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -222,6 +219,7 @@ def rhs(t, u): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + lazy=lazy, casename=casename, rst_filename=rst_filename, + actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 09f54aa92..64564818f 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -29,12 +29,6 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -77,8 +71,11 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + lazy=False, rst_filename=None, actx_class=False): """Drive example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -101,11 +98,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control if use_leap: @@ -388,13 +386,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -404,6 +402,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + lazy=lazy, casename=casename, rst_filename=rst_filename, + actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 7b59baaa1..0839cb368 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -29,11 +29,6 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -78,9 +73,12 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext, - log_dependent=True): + rst_filename=None, actx_class=False, + log_dependent=True, lazy=False): """Drive example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -103,11 +101,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control if use_leap: @@ -446,13 +445,13 @@ def my_rhs(t, state): from warnings import warn warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -463,6 +462,6 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent) + log_dependent=log_dependent, lazy=lazy) # vim: foldmethod=marker diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 7411ad96f..f88856ffc 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -30,12 +30,6 @@ from functools import partial from pytools.obj_array import make_obj_array -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -78,8 +72,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None, lazy=False): """Drive example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") cl_ctx = ctx_factory() if casename is None: @@ -102,11 +98,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control current_step = 0 @@ -399,13 +396,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -415,6 +412,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + lazy=lazy) # vim: foldmethod=marker diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index ca797d590..32408962a 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -29,17 +29,11 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer - from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, @@ -76,7 +70,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None, lazy=False): """Drive the example.""" cl_ctx = ctx_factory() @@ -100,11 +94,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control if use_leap: @@ -386,13 +381,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -402,6 +397,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + lazy=lazy) # vim: foldmethod=marker diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 65697e614..602ee627a 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -29,12 +29,6 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -78,8 +72,11 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None, lazy=False): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -102,11 +99,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: - actx = actx_class(comm, queue, mpi_base_tag=1300) + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control current_step = 0 @@ -411,13 +409,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -427,6 +425,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + lazy=lazy) # vim: foldmethod=marker diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index b86b32736..095377de3 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -28,13 +28,8 @@ import pyopencl as cl from pytools.obj_array import flat_obj_array - -from grudge.array_context import (PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext) from arraycontext import thaw, freeze -from mirgecom.profiling import PyOpenCLProfilingArrayContext # noqa - from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -73,8 +68,11 @@ def bump(actx, discr, t=0): @mpi_entry_point def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=None, - use_profiling=False, use_logmgr=False, actx_class=PyOpenCLArrayContext): + use_profiling=False, use_logmgr=False, actx_class=None, lazy=False): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) @@ -88,16 +86,15 @@ def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=Non if use_profiling: queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - logmgr=logmgr) else: queue = cl.CommandQueue(cl_ctx) - if actx_class == MPISingleGridWorkBalancingPytatoArrayContext: - actx = actx_class(comm, queue, mpi_base_tag=1200) - else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) if restart_step is None: @@ -255,10 +252,15 @@ def rhs(t, w): parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") args = parser.parse_args() + lazy = args.lazy + if args.profiling: + if lazy: + raise ValueError("Can't use lazy and profiling together.") - main(use_profiling=use_profiling, use_logmgr=use_logging, - actx_class=MPISingleGridWorkBalancingPytatoArrayContext if args.lazy - else PyOpenCLArrayContext) + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) + main(use_profiling=use_profiling, use_logmgr=use_logging, + actx_class=actx_class, lazy=lazy) # vim: foldmethod=marker From f82286126e77dd52c6f910dd40e5ac00b73df85a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 17:00:14 -0600 Subject: [PATCH 533/873] Update for new array fetching API. --- examples/doublemach-mpi.py | 34 ++++++++++++++-------------------- examples/hotplate-mpi.py | 30 +++++++++++++++--------------- 2 files changed, 29 insertions(+), 35 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 30869883e..fab18a6f0 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -30,15 +30,6 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) - -from meshmode.array_context import ( - PyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext - from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.dof_desc import DTAG_BOUNDARY @@ -133,8 +124,11 @@ def get_doublemach_mesh(): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, use_overintegration=False, - casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext): + casename=None, rst_filename=None, actx_class=None, lazy=False): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -154,12 +148,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # Timestepping control current_step = 0 @@ -476,13 +470,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -492,7 +486,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, + use_overintegration=args.overintegration, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index 06654c10d..4caf3a34c 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -29,11 +29,6 @@ import pyopencl.tools as cl_tools from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -90,8 +85,11 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None, lazy=False): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -114,11 +112,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control timestepper = rk4_step @@ -462,13 +461,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -478,6 +477,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + lazy=lazy) # vim: foldmethod=marker From 452186f0365a5969e55693e07f87caeb712981d6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 17:21:28 -0600 Subject: [PATCH 534/873] Update for current context fetching API --- examples/wave-mpi.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 095377de3..01e0fb34d 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -253,9 +253,6 @@ def rhs(t, w): help="switch to a lazy computation mode") args = parser.parse_args() lazy = args.lazy - if args.profiling: - if lazy: - raise ValueError("Can't use lazy and profiling together.") from grudge.array_context import get_reasonable_array_context_class actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) From 229d378f96a17ac8dfb01eb86de64ef46434c70d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 17:42:39 -0600 Subject: [PATCH 535/873] Update for new array context fetching API. --- examples/nsmix-mpi.py | 30 +++++++++---------- examples/poiseuille-mpi.py | 39 +++++++++++-------------- examples/poiseuille-multispecies-mpi.py | 39 +++++++++++-------------- 3 files changed, 48 insertions(+), 60 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 907c5aa1f..8361d7342 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -30,11 +30,6 @@ from functools import partial from pytools.obj_array import make_obj_array -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -83,9 +78,12 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext, + rst_filename=None, actx_class=None, lazy=False, log_dependent=True): """Drive example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -108,11 +106,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: + if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # Timestepping control # This example runs only 3 steps by default (to keep CI ~short) @@ -554,19 +553,18 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - log_dependent = not args.lazy + lazy = args.lazy from warnings import warn warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -577,6 +575,6 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent) + log_dependent=log_dependent, lazy=lazy) # vim: foldmethod=marker diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 096206d6d..15d904fff 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -30,11 +30,6 @@ from pytools.obj_array import make_obj_array from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -90,10 +85,13 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, + use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -116,16 +114,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: - actx = actx_class( - comm, queue, mpi_base_tag=4200, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) - ) + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) - ) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control timestepper = rk4_step @@ -493,13 +487,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy + if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -509,7 +504,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, + use_overintegration=args.overintegration, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 2eba5655b..dbd534c15 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -30,11 +30,6 @@ from pytools.obj_array import make_obj_array from functools import partial -from grudge.array_context import ( - PyOpenCLArrayContext, - MPISingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -91,10 +86,13 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, + use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None): """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + cl_ctx = ctx_factory() if casename is None: @@ -117,16 +115,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - if actx_class == PytatoPyOpenCLArrayContext: - actx = actx_class( - comm, queue, mpi_base_tag=4200, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) - ) + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) else: - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) - ) + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control timestepper = rk4_step @@ -530,13 +524,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy + if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -546,7 +541,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, + use_overintegration=args.overintegration, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker From 5cfcb708ff86fa9f3c7fdd2d3b7a2c456ed9842a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 2 Mar 2022 17:46:13 -0600 Subject: [PATCH 536/873] Switch back to grudge@main --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 285ac3b7f..2d720837b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyyaml --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode ---editable git+https://github.com/inducer/grudge.git@hashing_comm_tag#egg=grudge +--editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 2b3e677aa3868d5914cbeed1ce4267c75af9469e Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Fri, 4 Mar 2022 16:42:28 +0100 Subject: [PATCH 537/873] restore requirements to main --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2d720837b..4dc2b033d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,12 +12,12 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/kaushikcfd/loopy.git@pytato-array-context-transforms#egg=loopy +--editable git+https://github.com/inducer/loopy.git#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode +--editable git+https://github.com/inducer/meshmode.git#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From af8a29564117c921c47cac9b9323c50fffcb09f5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 4 Mar 2022 13:40:16 -0600 Subject: [PATCH 538/873] Switch back to device-parallel-enabled branches --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 4dc2b033d..2d720837b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,12 +12,12 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/inducer/loopy.git#egg=loopy +--editable git+https://github.com/kaushikcfd/loopy.git@pytato-array-context-transforms#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/inducer/meshmode.git#egg=meshmode +--editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From 43d04f4ac28e2ed8b947d58d1ff86ff444791969 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 4 Mar 2022 14:19:03 -0600 Subject: [PATCH 539/873] Use a unique tag for each diffusion operator message --- mirgecom/diffusion.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index f765465d8..58ed62667 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -208,6 +208,14 @@ class _DiffusionStateTag: pass +class _DiffusionAlphaTag: + pass + + +class _DiffusionGradTag: + pass + + def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=False): r""" Compute the diffusion operator. @@ -292,8 +300,8 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals + sum( diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair) for alpha_tpair, grad_u_tpair in zip( - cross_rank_trace_pairs(discr, alpha, tag=_DiffusionStateTag), - cross_rank_trace_pairs(discr, grad_u, tag=_DiffusionStateTag))) + cross_rank_trace_pairs(discr, alpha, tag=_DiffusionAlphaTag), + cross_rank_trace_pairs(discr, grad_u, tag=_DiffusionGradTag))) ) ) From d4c41cf1059c28914c0c42aa76ca768fa2f7dcc4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 4 Mar 2022 15:09:00 -0600 Subject: [PATCH 540/873] Make actx_class requirement explicit. --- examples/autoignition-mpi.py | 18 ++++++------------ examples/heat-source-mpi.py | 14 +++++--------- examples/lump-mpi.py | 14 +++++--------- examples/mixture-mpi.py | 14 +++++--------- examples/pulse-mpi.py | 14 +++++--------- examples/scalar-lump-mpi.py | 11 ++++------- examples/sod-mpi.py | 11 +++++------ examples/vortex-mpi.py | 14 +++++--------- examples/wave-mpi.py | 10 +++------- 9 files changed, 43 insertions(+), 77 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 172a6494a..3b6a8735c 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -72,15 +72,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_overintegration=False, - use_profiling=False, casename=None, lazy=False, - rst_filename=None, actx_class=None, - log_dependent=True): +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_overintegration=False, use_profiling=False, + casename=None, lazy=False, rst_filename=None, log_dependent=True): """Drive example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = ctx_factory() if casename is None: @@ -639,10 +634,9 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, - use_overintegration=args.overintegration, - use_profiling=args.profiling, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, + main(actx_class, use_logmgr=args.log, use_leap=args.leap, + use_overintegration=args.overintegration, use_profiling=args.profiling, + lazy=lazy, casename=casename, rst_filename=rst_filename, log_dependent=log_dependent) # vim: foldmethod=marker diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 3b81f2227..0738a8c2d 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -48,13 +48,10 @@ @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - lazy=False, rst_filename=None, actx_class=None): +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, lazy=False, + rst_filename=None): """Run the example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) @@ -218,8 +215,7 @@ def rhs(t, u): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - lazy=lazy, casename=casename, rst_filename=rst_filename, - actx_class=actx_class) + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 64564818f..33378f5fb 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -69,13 +69,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - lazy=False, rst_filename=None, actx_class=False): +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, lazy=False, + rst_filename=None): """Drive example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = ctx_factory() if casename is None: @@ -401,8 +398,7 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - lazy=lazy, casename=casename, rst_filename=rst_filename, - actx_class=actx_class) + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 0839cb368..75b6ada09 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -71,14 +71,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=False, +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, rst_filename=None, log_dependent=True, lazy=False): """Drive example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = ctx_factory() if casename is None: @@ -460,8 +456,8 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent, lazy=lazy) + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, + log_dependent=log_dependent) # vim: foldmethod=marker diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 995919550..79ead6049 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -75,14 +75,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, lazy=False, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None): +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, + casename=None, rst_filename=None): """Drive the example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = ctx_factory() if casename is None: @@ -379,8 +375,8 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_overintegration=args.overintegration, + main(actx_class, use_logmgr=args.log, use_overintegration=args.overintegration, use_leap=args.leap, use_profiling=args.profiling, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index f88856ffc..2ba18bba8 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -70,12 +70,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None, lazy=False): + rst_filename=None, lazy=False): """Drive example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") cl_ctx = ctx_factory() if casename is None: @@ -411,8 +409,7 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, - lazy=lazy) + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 32408962a..bd3ee6545 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -68,9 +68,9 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None, lazy=False): +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, lazy=False, + rst_filename=None): """Drive the example.""" cl_ctx = ctx_factory() @@ -396,8 +396,7 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, - lazy=lazy) + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 602ee627a..b0a6b9cf1 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -70,13 +70,10 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None, lazy=False): +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, lazy=False, + rst_filename=None): """Drive the example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = ctx_factory() if casename is None: @@ -424,8 +421,7 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, - lazy=lazy) + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 01e0fb34d..700c4519d 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -67,12 +67,9 @@ def bump(actx, discr, t=0): @mpi_entry_point -def main(snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", restart_step=None, - use_profiling=False, use_logmgr=False, actx_class=None, lazy=False): +def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", + restart_step=None, use_profiling=False, use_logmgr=False, lazy=False): """Drive the example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) @@ -257,7 +254,6 @@ def rhs(t, w): from grudge.array_context import get_reasonable_array_context_class actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) - main(use_profiling=use_profiling, use_logmgr=use_logging, - actx_class=actx_class, lazy=lazy) + main(actx_class, use_profiling=use_profiling, use_logmgr=use_logging, lazy=lazy) # vim: foldmethod=marker From 2f053a21eb83f3bf32d9224d3876c71a82989117 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 7 Mar 2022 13:11:17 -0600 Subject: [PATCH 541/873] Dont overwrite the incoming state CV. --- mirgecom/boundary.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 0a042c870..deba8a25b 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -656,7 +656,10 @@ def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): state_minus.pressure, external_pressure) internal_energy = boundary_pressure / (gamma - 1) total_energy = internal_energy + kinetic_energy - cv_outflow = state_minus.cv.replace(energy=total_energy) + cv_outflow = make_conserved(dim=state_minus.dim, mass=state_minus.cv.mass, + momentum=state_minus.cv.momentum, + energy=total_energy, + species_mass=state_minus.cv.species_mass) return make_fluid_state(cv=cv_outflow, gas_model=gas_model, temperature_seed=state_minus.temperature) From 1dc2b6d5c9230baafa4f80bc1104e00839b1c5d3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 8 Mar 2022 13:29:29 -0600 Subject: [PATCH 542/873] Make power-law transport work, and be lazy-compatible --- mirgecom/gas_model.py | 2 +- mirgecom/transport.py | 70 +++++++++++++++++++++++++++---------------- 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 2b1b47c87..a612ca283 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -275,7 +275,7 @@ def make_fluid_state(cv, gas_model, temperature_seed=None): """ dv = gas_model.eos.dependent_vars(cv, temperature_seed=temperature_seed) if gas_model.transport is not None: - tv = gas_model.transport.transport_vars(eos=gas_model.eos, cv=cv) + tv = gas_model.transport.transport_vars(cv=cv, dv=dv, eos=gas_model.eos) return ViscousFluidState(cv=cv, dv=dv, tv=tv) return FluidState(cv=cv, dv=dv) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 90cf15e16..b6af4f84d 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -43,12 +43,14 @@ THE SOFTWARE. """ +from typing import Optional from dataclasses import dataclass from arraycontext import dataclass_array_container import numpy as np from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from meshmode.dof_array import DOFArray from mirgecom.fluid import ConservedVars -from mirgecom.eos import GasEOS +from mirgecom.eos import GasEOS, GasDependentVars class TransportModelError(Exception): @@ -92,33 +94,41 @@ class TransportModel: .. automethod:: transport_vars """ - def bulk_viscosity(self, eos: GasEOS, cv: ConservedVars): + def bulk_viscosity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the bulk viscosity for the gas (${\mu}_{B}$).""" raise NotImplementedError() - def viscosity(self, eos: GasEOS, cv: ConservedVars): + def viscosity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the gas dynamic viscosity, $\mu$.""" raise NotImplementedError() - def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): + def volume_viscosity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the 2nd coefficent of viscosity, $\lambda$.""" raise NotImplementedError() - def thermal_conductivity(self, eos: GasEOS, cv: ConservedVars): + def thermal_conductivity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$.""" raise NotImplementedError() - def species_diffusivity(self, eos: GasEOS, cv: ConservedVars): + def species_diffusivity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None, + eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the vector of species diffusivities, ${d}_{\alpha}$.""" raise NotImplementedError() - def transport_vars(self, eos: GasEOS, cv: ConservedVars): + def transport_vars(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None, + eos: Optional[GasEOS] = None) -> GasTransportVars: r"""Compute the transport properties from the conserved state.""" return GasTransportVars( - bulk_viscosity=self.bulk_viscosity(eos, cv), - viscosity=self.viscosity(eos, cv), - thermal_conductivity=self.thermal_conductivity(eos, cv), - species_diffusivity=self.species_diffusivity(eos, cv) + bulk_viscosity=self.bulk_viscosity(cv=cv, dv=dv), + viscosity=self.viscosity(cv=cv, dv=dv), + thermal_conductivity=self.thermal_conductivity(cv=cv, dv=dv), + species_diffusivity=self.species_diffusivity(cv=cv, dv=dv, eos=eos) ) @@ -146,15 +156,18 @@ def __init__(self, bulk_viscosity=0, viscosity=0, self._kappa = thermal_conductivity self._d_alpha = species_diffusivity - def bulk_viscosity(self, eos: GasEOS, cv: ConservedVars): + def bulk_viscosity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the bulk viscosity for the gas, $\mu_{B}$.""" return self._mu_bulk*(0*cv.mass + 1.0) - def viscosity(self, eos: GasEOS, cv: ConservedVars): + def viscosity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the gas dynamic viscosity, $\mu$.""" return self._mu*(0*cv.mass + 1.0) - def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): + def volume_viscosity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the 2nd viscosity coefficent, $\lambda$. In this transport model, the second coefficient of viscosity is defined as: @@ -163,11 +176,14 @@ def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): """ return (self._mu_bulk - 2 * self._mu / 3)*(0*cv.mass + 1.0) - def thermal_conductivity(self, eos: GasEOS, cv: ConservedVars): + def thermal_conductivity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$.""" return self._kappa*(0*cv.mass + 1.0) - def species_diffusivity(self, eos: GasEOS, cv: ConservedVars): + def species_diffusivity(self, cv: ConservedVars, + dv: Optional[GasDependentVars] = None, + eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the vector of species diffusivities, ${d}_{\alpha}$.""" return self._d_alpha*(0*cv.mass + 1.0) @@ -198,37 +214,39 @@ def __init__(self, alpha=0.6, beta=4.093e-7, sigma=2.5, n=.666, self._n = n self._d_alpha = species_diffusivity - def bulk_viscosity(self, eos: GasEOS, cv: ConservedVars): + def bulk_viscosity(self, cv: ConservedVars, dv: GasDependentVars) -> DOFArray: r"""Get the bulk viscosity for the gas, $\mu_{B}$. $\mu_{B} = \alpha\mu$ """ - return self._alpha * self.viscosity(eos, cv) + return self._alpha * self.viscosity(cv, dv) # TODO: Should this be memoized? Avoid multiple calls? - def viscosity(self, eos: GasEOS, cv: ConservedVars): + def viscosity(self, cv: ConservedVars, dv: GasDependentVars) -> DOFArray: r"""Get the gas dynamic viscosity, $\mu$. $\mu = \beta{T}^n$ """ - return self._beta * eos.temperature(cv)**self._n + return self._beta * dv.temperature**self._n - def volume_viscosity(self, eos: GasEOS, cv: ConservedVars): + def volume_viscosity(self, cv: ConservedVars, dv: GasDependentVars) -> DOFArray: r"""Get the 2nd viscosity coefficent, $\lambda$. In this transport model, the second coefficient of viscosity is defined as: $\lambda = \left(\alpha - \frac{2}{3}\right)\mu$ """ - return (self._alpha - 2.0/3.0)*self.viscosity(eos, cv) + return (self._alpha - 2.0/3.0)*self.viscosity(cv, dv) - def thermal_conductivity(self, eos: GasEOS, cv: ConservedVars): + def thermal_conductivity(self, cv: ConservedVars, dv: GasDependentVars, + eos: GasEOS) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$. $\kappa = \sigma\mu{C}_{v}$ """ - return self._sigma * self.viscosity(eos, cv) * eos.heat_capacity_cv(cv) + return self._sigma * self.viscosity(cv, dv) * eos.heat_capacity_cv(cv) - def species_diffusivity(self, eos: GasEOS, cv: ConservedVars): + def species_diffusivity(self, cv: ConservedVars, dv: GasDependentVars, + eos: GasEOS) -> DOFArray: r"""Get the vector of species diffusivities, ${d}_{\alpha}$.""" - return self._d_alpha + return self._d_alpha*(0*cv.mass + 1.) From d8643aca71bf3cb9cf2bf28d5b5b755405a689c4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Mar 2022 10:34:02 -0600 Subject: [PATCH 543/873] Correct interface error caught by Tulio --- mirgecom/transport.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index b6af4f84d..1ab326407 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -110,7 +110,8 @@ def volume_viscosity(self, cv: ConservedVars, raise NotImplementedError() def thermal_conductivity(self, cv: ConservedVars, - dv: Optional[GasDependentVars] = None) -> DOFArray: + dv: Optional[GasDependentVars] = None, + eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$.""" raise NotImplementedError() @@ -127,7 +128,7 @@ def transport_vars(self, cv: ConservedVars, return GasTransportVars( bulk_viscosity=self.bulk_viscosity(cv=cv, dv=dv), viscosity=self.viscosity(cv=cv, dv=dv), - thermal_conductivity=self.thermal_conductivity(cv=cv, dv=dv), + thermal_conductivity=self.thermal_conductivity(cv=cv, dv=dv, eos=eos), species_diffusivity=self.species_diffusivity(cv=cv, dv=dv, eos=eos) ) @@ -177,7 +178,8 @@ def volume_viscosity(self, cv: ConservedVars, return (self._mu_bulk - 2 * self._mu / 3)*(0*cv.mass + 1.0) def thermal_conductivity(self, cv: ConservedVars, - dv: Optional[GasDependentVars] = None) -> DOFArray: + dv: Optional[GasDependentVars] = None, + eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$.""" return self._kappa*(0*cv.mass + 1.0) From 8b6f6c1d94e7c7cdef7f15e8eba55c794fda599a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 9 Mar 2022 11:12:23 -0600 Subject: [PATCH 544/873] Correct interface error caught by Tulio --- mirgecom/transport.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 1ab326407..23268939e 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -246,7 +246,10 @@ def thermal_conductivity(self, cv: ConservedVars, dv: GasDependentVars, $\kappa = \sigma\mu{C}_{v}$ """ - return self._sigma * self.viscosity(cv, dv) * eos.heat_capacity_cv(cv) + return ( + self._sigma * self.viscosity(cv, dv) + * eos.heat_capacity_cv(cv, dv.temperature) + ) def species_diffusivity(self, cv: ConservedVars, dv: GasDependentVars, eos: GasEOS) -> DOFArray: From c72aa1c18d57937fffc387893e7bc66d256b94e7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 14 Mar 2022 12:52:21 -0500 Subject: [PATCH 545/873] Fix viscous tests after power-law-transport updates --- test/test_viscous.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/test_viscous.py b/test/test_viscous.py index 12303b2be..72c643b1c 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -98,8 +98,8 @@ def test_viscous_stress_tensor(actx_factory, transport_model): gas_model = GasModel(eos=eos, transport=tv_model) fluid_state = make_fluid_state(cv, gas_model) - mu = tv_model.viscosity(eos, cv) - lam = tv_model.volume_viscosity(eos, cv) + mu = tv_model.viscosity(cv=cv, dv=fluid_state.dv) + lam = tv_model.volume_viscosity(cv=cv, dv=fluid_state.dv) # Exact answer for tau exp_grad_v = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) @@ -476,7 +476,9 @@ def test_local_max_species_diffusivity(actx_factory, dim, array_valued): tv_model = SimpleTransport(species_diffusivity=d_alpha_input) eos = IdealSingleGas() - d_alpha = tv_model.species_diffusivity(eos, cv) + dv = eos.dependent_vars(cv) + + d_alpha = tv_model.species_diffusivity(eos=eos, cv=cv, dv=dv) from mirgecom.viscous import get_local_max_species_diffusivity expected = .3*ones From 13da44b91516248e416d2287a43cbeb6be5b7740 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 21 Mar 2022 12:14:55 -0500 Subject: [PATCH 546/873] Add section for each boundary type --- doc/discretization.rst | 67 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/doc/discretization.rst b/doc/discretization.rst index af6caa3c3..b456f83df 100644 --- a/doc/discretization.rst +++ b/doc/discretization.rst @@ -175,18 +175,26 @@ $$ \b{Q}_h^+ + \b{Q}_h^-\right)\b{n} $$ -Domain boundary considerations ------------------------------- +Domain boundary treatments +========================== What happens when $\partial E \cap \partial\Omega \neq \emptyset$? In DG, numerical fluxes are not only responsible for handling the flow of information between adjacent cells, but they also enforce information flow at the boundaries. -We denote the *boundary fluxes* as $\b{h}^*_e(\b{Q}_{bc})$, -$\b{h}^*_v(\b{Q}_{bc}$, $\b{\Sigma}_{bc})$, and -$\b{H}^*_s(\b{Q}_{bc})$, where $\b{Q}_{bc}$, $\b{\Sigma}_{bc}$ denote -boundary conditions imposed on the state, and the gradient of the state respectively. +The relevant quantities for the boundary treatments are as follows: + +.. math:: + + \b{Q}^- &\equiv \text{solution on the interior of the boundary face} \\ + \b{\Sigma}^- &\equiv \text{gradient of solution on interior of boundary face} \\ + \b{Q}_{bc} &\equiv \text{solution on the exterior of the boundary face (boundary soln)} \\ + \b{\Sigma}_{bc} &\equiv \text{grad of soln on exterior of boundary face} \\ + \b{h}^*_e(\b{Q}_{bc}) &\equiv \text{boundary flux for the divergence of inviscid flux} \\ + \b{h}^*_v(\b{Q}_{bc}, \b{\Sigma}_{bc}) &\equiv \text{bndry flux for divergence of viscous flux} \\ + \b{H}^*(\b{Q}_{bc}) &\equiv \text{boundary flux for the gradient of the solution} \\ + \hat{\b{n}} &\equiv \text{outward pointing normal for the boundary face} For all $\partial E \cap \partial\Omega$ the $+$ side is on the domain boundary. Boundary conditions are set by prescribing one or more components of the solution @@ -197,10 +205,54 @@ sections. Solid walls -^^^^^^^^^^^ +----------- + +There are a few versions of solid wall treatments implemented in mirgecom: + +1. Adiabatic slip wall +2. Adiabatic noslip wall +3. Isothermal noslip wall + +Common to all implemented boundary treatments, we start by calculating or prescribing a +boundary solution, $\b{Q}_{bc}$, for the exterior of the boundary face. The following +sections will describe how each of the wall treatments compute the boundary solution, +and then the remaining relevant quantities described above. + +Adiabtic slip wall +^^^^^^^^^^^^^^^^^^ + +The adiabatic slip wall is an inviscid-only boundary condition. The boundary solution +is prescribed as follows: + +.. math:: + \b{Q}_{bc} = \b{Q}^- - 2*\b{v}^-\cdot\hat{\b{n}}, + +where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. + +The flux for the divergence of the inviscid flux is then calculated with the same numerical +flux function as used in the volume: $\b{h}^*_e = \b{h}_{e}(\b{Q}^-, \b{Q}_bc)$. + +No-slip walls +^^^^^^^^^^^^^ +Boundary solution +""""""""""""""""" + +For walls enforcing a no-slip condition, we choose the boundary solution as: + +.. math:: + \b{Q}_{bc} = \b{Q}^- - \rho\b{v}^-, + +where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. + + +Gradient boundary flux +"""""""""""""""""""""" Inviscid boundary flux """""""""""""""""""""" +Viscous boundary flux +""""""""""""""""""""" + $\b{h}^*_e$ is equal to the (interior; - side) pressure contribution of $\b{F}^I(\b{Q}_{bc})\cdot\b{n}$ (since $\b{V}\cdot\b{n} = 0$). @@ -222,6 +274,7 @@ $$ $$ Otherwise, $\b{\Sigma}_{bc}$ will need to be modified accordingly. + Inflow/outflow boundaries ^^^^^^^^^^^^^^^^^^^^^^^^^ Inviscid boundary flux From 86054c7fcf43c900f53317fd31181d1f5a0ad728 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 22 Mar 2022 08:17:45 -0500 Subject: [PATCH 547/873] Beef up documentation of wall boundary treatments. --- doc/discretization.rst | 107 ++++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 18 deletions(-) diff --git a/doc/discretization.rst b/doc/discretization.rst index b456f83df..c97f9cf5f 100644 --- a/doc/discretization.rst +++ b/doc/discretization.rst @@ -175,6 +175,12 @@ $$ \b{Q}_h^+ + \b{Q}_h^-\right)\b{n} $$ +It is worth noting here that when $\b{Q}_h^+ = \b{Q}_h^-$, then there is no change in +field value across the boundary, resulting in a $\nabla{\b{Q}}$ which vanishes in the +normal direction corresponding to that boundary or face. + +That is, if $\b{Q}_h^+ = \b{Q}_h^-$, then $\nabla{\b{Q}} \cdot \hat{\b{n}} = 0$. + Domain boundary treatments ========================== @@ -213,7 +219,7 @@ There are a few versions of solid wall treatments implemented in mirgecom: 2. Adiabatic noslip wall 3. Isothermal noslip wall -Common to all implemented boundary treatments, we start by calculating or prescribing a +Common to all implemented wall boundary treatments, we start by calculating or prescribing a boundary solution, $\b{Q}_{bc}$, for the exterior of the boundary face. The following sections will describe how each of the wall treatments compute the boundary solution, and then the remaining relevant quantities described above. @@ -225,12 +231,14 @@ The adiabatic slip wall is an inviscid-only boundary condition. The boundary so is prescribed as follows: .. math:: - \b{Q}_{bc} = \b{Q}^- - 2*\b{v}^-\cdot\hat{\b{n}}, + + \b{Q}_{bc} = \b{Q}^- - 2*\left(\rho\b{v}^-\cdot\hat{\b{n}}\right)\hat{\b{n}}, where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. The flux for the divergence of the inviscid flux is then calculated with the same numerical -flux function as used in the volume: $\b{h}^*_e = \b{h}_{e}(\b{Q}^-, \b{Q}_bc)$. +flux function as used in the volume: $\b{h}^*_e = \b{h}_{e}(\b{Q}^-, \b{Q}_{bc})$. + No-slip walls ^^^^^^^^^^^^^ @@ -238,42 +246,105 @@ No-slip walls Boundary solution """"""""""""""""" -For walls enforcing a no-slip condition, we choose the boundary solution as: +For walls enforcing a no-slip condition, we choose the "no-slip boundary solution" as: .. math:: - \b{Q}_{bc} = \b{Q}^- - \rho\b{v}^-, -where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. + \b{Q}_{bc} = \b{Q}^- - 2\rho\b{v}^-, +where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. Gradient boundary flux """""""""""""""""""""" + +The boundary flux for $\nabla{\b{Q}}$ at the boundary is computed with a central +flux as follows: + +.. math:: + + \b{H}^*(\b{Q}_{bc}) = \b{H}_s(\b{Q}^-, \b{Q}_{bc}) = \frac{1}{2}\left(\b{Q}^- + \b{Q}_{bc}\right)\b{n}, + +using the no-slip boundary solution, $\b{Q}_{bc}$, as defined above. + +Since: + +.. math:: + + \rho^+ &= \rho^- \\ + (\rho{E})^+ &= (\rho{E})^- \\ + (\rho{Y})^+ &= (\rho{Y})^-, + +we expect: + +.. math:: + + \nabla(\rho) \cdot \hat{\b{n}} &= 0 \\ + \nabla(\rho{E}) \cdot \hat{\b{n}} &= 0 \\ + \nabla(\rho{Y}) \cdot \hat{\b{n}} &= 0 + +We compute $\nabla{Y}$ and $\nabla{E}$ from the product rule: + +.. math:: + + \nabla{Y} &= \frac{1}{\rho}\left(\nabla{(\rho{Y})} - Y\nabla{\rho}\right) \\ + \nabla{E} &= \frac{1}{\rho}\left(\nabla{(\rho{E})} - E\nabla{\rho}\right) + +So we likewise expect: + +.. math:: + + \nabla{Y} \cdot \hat{\b{n}} &= 0 \\ + \nabla{E} \cdot \hat{\b{n}} &= 0 + Inviscid boundary flux """""""""""""""""""""" -Viscous boundary flux -""""""""""""""""""""" -$\b{h}^*_e$ is equal to the (interior; - side) pressure contribution of -$\b{F}^I(\b{Q}_{bc})\cdot\b{n}$ -(since $\b{V}\cdot\b{n} = 0$). +The inviscid boundary flux is calculated from the numerical flux function +used for inviscid interfacial fluxes in the volume: + +.. math:: + + \b{h}^*_e = \b{h}_e(\b{Q}^-, \b{Q}_{bc}) + +Intuitively, we expect $\b{h}^*_e$ is equal to the (interior; - side) pressure contribution of +$\b{F}^I(\b{Q}_{bc})\cdot\b{n}$ (since $\b{V}\cdot\b{n} = 0$). Viscous boundary flux """"""""""""""""""""" -$$ -\b{h}^*_v(\b{Q}_{bc}, \b{\Sigma}_{bc}) = \b{F}_V(\b{Q}_{bc}, -\b{\Sigma}_{bc})\cdot\b{n}, -$$ -where $\b{Q}_{bc}$ are the same values used to prescribe $\b{h}^*_e$. +*MIRGE-Com* has a departure from BR1 for the computation of viscous fluxes. This section +will describe both the viscous flux calculation prescribed by BR1, and also what +*MIRGE-Com* is currently doing. + +--------- + +BR1 prescribes the following boundary treatment: + +The viscous boundary flux at solid walls is computed as: + +.. math:: + + \b{h}^*_v(\b{Q}_{bc}, \b{\Sigma}_{bc}) = \b{F}_V(\b{Q}_{bc},\b{\Sigma}_{bc})\cdot\b{n}, + +where $\b{Q}_{bc}$ are the same values used to prescribe $\b{h}^*_e$. -Gradient boundary flux -"""""""""""""""""""""" If there are no conditions on $\nabla\b{Q}\cdot\b{n}$, then: $$ \b{\Sigma}_{bc} = \b{\Sigma}_h^-. $$ Otherwise, $\b{\Sigma}_{bc}$ will need to be modified accordingly. +-------- + +MIRGE-Com currently does the following: + +.. math:: + + \b{h}^*_v(\b{Q}_{bc}, \b{\Sigma}_{bc}) = \b{h}_v\left(\b{Q}^-,\b{\Sigma}^-,\b{Q}_{bc},\b{\Sigma}_{bc}\right), + +where $\b{Q}_{bc}$ are the same values used to prescribe $\b{h}^*_e$. + + Inflow/outflow boundaries ^^^^^^^^^^^^^^^^^^^^^^^^^ From 1e06eac171f37049a56957b8228b47c074174759 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 24 Mar 2022 16:23:00 -0500 Subject: [PATCH 548/873] Add way to visualize gradients, and demonstration --- examples/nsmix-mpi.py | 45 +++++++++++++++++++++++++++++++++++----- mirgecom/navierstokes.py | 8 ++++--- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 8361d7342..f2a7f9ee5 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -364,9 +364,22 @@ def my_write_status(step, t, dt, dv, state): if rank == 0: logger.info(status_msg) - def my_write_viz(step, t, state, dv): - viz_fields = [("cv", state), + def my_write_viz(step, t, cv, dv, ns_rhs=None, chem_rhs=None, + grad_cv=None, grad_t=None, grad_v=None): + viz_fields = [("cv", cv), ("dv", dv)] + if ns_rhs is not None: + viz_ext = [("nsrhs", ns_rhs), + ("chemrhs", chem_rhs), + ("grad_rho", grad_cv.mass), + ("grad_e", grad_cv.energy), + ("grad_mom_x", grad_cv.momentum[0]), + ("grad_mom_y", grad_cv.momentum[1]), + ("grad_y_1", grad_cv.species_mass[0]), + ("grad_v_x", grad_v[0]), + ("grad_v_y", grad_v[1]), + ("grad_temperature", grad_t)] + viz_fields.extend(viz_ext) from mirgecom.simutil import write_visfile write_visfile(discr, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) @@ -465,7 +478,18 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=cv, tseed=tseed) if do_viz: - my_write_viz(step=step, t=t, state=cv, dv=dv) + from mirgecom.fluid import velocity_gradient + ns_rhs, grad_cv, grad_t = \ + ns_operator(discr, state=fluid_state, time=t, + boundaries=visc_bnds, gas_model=gas_model, + return_gradients=True) + grad_v = velocity_gradient(cv, grad_cv) + chem_rhs = \ + gas_model.eos.get_species_source_terms(cv, + fluid_state.temperature) + my_write_viz(step=step, t=t, cv=cv, dv=dv, ns_rhs=ns_rhs, + chem_rhs=chem_rhs, grad_cv=grad_cv, grad_t=grad_t, + grad_v=grad_v) dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, constant_cfl) @@ -475,7 +499,7 @@ def my_pre_step(step, t, dt, state): except MyRuntimeError: if rank == 0: logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=cv, dv=dv) + my_write_viz(step=step, t=t, cv=cv, dv=dv) my_write_restart(step=step, t=t, state=cv, tseed=tseed) raise @@ -523,7 +547,18 @@ def my_rhs(t, state): final_dv = current_state.dv final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) - my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) + from mirgecom.fluid import velocity_gradient + ns_rhs, grad_cv, grad_t = \ + ns_operator(discr, state=current_state, time=current_t, + boundaries=visc_bnds, gas_model=gas_model, + return_gradients=True) + grad_v = velocity_gradient(current_state.cv, grad_cv) + chem_rhs = \ + gas_model.eos.get_species_source_terms(current_state.cv, + current_state.temperature) + my_write_viz(step=current_step, t=current_t, cv=current_state.cv, dv=final_dv, + chem_rhs=chem_rhs, grad_cv=grad_cv, grad_t=grad_t, + grad_v=grad_v) my_write_restart(step=current_step, t=current_t, state=current_state.cv, tseed=tseed) my_write_status(current_step, current_t, final_dt, state=current_state, diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 77c8cc4be..418125a8e 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -96,7 +96,7 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov, gradient_numerical_flux_func=gradient_flux_central, viscous_numerical_flux_func=viscous_flux_central, - quadrature_tag=None): + quadrature_tag=None, return_gradients=False): r"""Compute RHS of the Navier-Stokes equations. Returns @@ -293,7 +293,9 @@ def _interp_to_surf_quad(utpair): numerical_flux_func=inviscid_numerical_flux_func, time=time) ) - - return div_operator(discr, dd_vol_quad, dd_faces_quad, vol_term, bnd_term) + ns_rhs = div_operator(discr, dd_vol_quad, dd_faces_quad, vol_term, bnd_term) + if return_gradients: + return ns_rhs, grad_cv, grad_t + return ns_rhs # }}} NS RHS From 95df42512c611d7e2b3c4a3c949f7b9c8c3cea38 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 28 Mar 2022 17:02:19 -0700 Subject: [PATCH 549/873] Update simutil, help debug near-wall species fractions. --- mirgecom/simutil.py | 46 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index e41f1bf81..fc671b8a5 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -428,11 +428,45 @@ def create_parallel_grid(comm, generate_grid): def limit_species_mass_fractions(cv): """Keep the species mass fractions from going negative.""" - y = cv.species_mass_fractions - if len(y) > 0: + from mirgecom.fluid import make_conserved + if cv.nspecies > 0: + y = cv.species_mass_fractions actx = cv.array_context + new_y = 1.*y zero = 0 * y[0] - for y_spec in y: - y_spec = actx.np.where(y_spec < 0, zero, y_spec) - cv = cv.replace(species_mass=cv.mass*y) - return(cv) + one = zero + 1. + + for i in range(cv.nspecies): + new_y[i] = actx.np.where(actx.np.less(new_y[i], 1e-14), + zero, new_y[i]) + new_y[i] = actx.np.where(actx.np.greater(new_y[i], 1.), + one, new_y[i]) + new_rho_y = cv.mass*new_y + + for i in range(cv.nspecies): + new_rho_y[i] = actx.np.where(actx.np.less(new_rho_y[i], 1e-14), + zero, new_rho_y[i]) + new_rho_y[i] = actx.np.where(actx.np.greater(new_rho_y[i], 1.), + one, new_rho_y[i]) + + return make_conserved(dim=cv.dim, mass=cv.mass, + momentum=cv.momentum, energy=cv.energy, + species_mass=new_rho_y) + return cv + +def species_fraction_anomaly_relaxation(cv, alpha=1.): + """Pull negative species fractions back towards 0.""" + from mirgecom.fluid import make_conserved + if cv.nspecies > 0: + y = cv.species_mass_fractions + actx = cv.array_context + new_y = 1.*y + zero = 0. * y[0] + for i in range(cv.nspecies): + new_y[i] = actx.np.where(actx.np.less(new_y[i], 0.), + -new_y[i], zero) + # y_spec = actx.np.where(y_spec > 1., y_spec-1., zero) + return make_conserved(dim=cv.dim, mass=0.*cv.mass, + momentum=0.*cv.momentum, energy=0.*cv.energy, + species_mass=alpha*cv.mass*new_y) + return 0.*cv From d103a97a34e213afe928fdaf28509c00b2496b26 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 28 Mar 2022 19:03:34 -0500 Subject: [PATCH 550/873] temporary commit --- test/test_operators.py | 46 +++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/test/test_operators.py b/test/test_operators.py index 47e373a6c..351cc3557 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -156,16 +156,16 @@ def sym_grad(dim, expr): return sym.grad(dim, expr) +# @pytest.mark.parametrize("sym_test_func_factory", +# [partial(_coord_test_func, order=0), +# partial(_coord_test_func, order=1), +# lambda dim: 2*_coord_test_func(dim, order=1), +# partial(_coord_test_func, order=2), +# _trig_test_func, _cv_test_func]) @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [1, 2, 3]) -@pytest.mark.parametrize("sym_test_func_factory", [ - partial(_coord_test_func, order=0), - partial(_coord_test_func, order=1), - lambda dim: 2*_coord_test_func(dim, order=1), - partial(_coord_test_func, order=2), - _trig_test_func, - _cv_test_func -]) +@pytest.mark.parametrize("sym_test_func_factory", + [_cv_test_func]) def test_grad_operator(actx_factory, dim, order, sym_test_func_factory): """Test the gradient operator for sanity. @@ -178,7 +178,7 @@ def test_grad_operator(actx_factory, dim, order, sym_test_func_factory): - :class:`~mirgecom.fluid.ConservedVars` composed of funcs from above """ actx = actx_factory() - + visualize = True sym_test_func = sym_test_func_factory(dim) tol = 1e-10 if dim < 3 else 1e-9 @@ -229,8 +229,8 @@ def sym_eval(expr, x_vec): if err_scale <= 1e-16: err_scale = 1 - print(f"{test_data=}") - print(f"{exact_grad=}") + # print(f"{test_data=}") + # print(f"{exact_grad=}") test_data_int_tpair = interior_trace_pair(discr, test_data) boundaries = [BTAG_ALL] @@ -244,13 +244,35 @@ def sym_eval(expr, x_vec): test_grad = grad_operator(discr, dd_vol, dd_faces, test_data, test_data_flux_bnd) - print(f"{test_grad=}") + # print(f"{test_grad=}") grad_err = \ max(flatten(componentwise_norms(discr, test_grad - exact_grad, np.inf), actx)) / err_scale + if visualize and dim == 3 and order == 1: + from grudge.shortcuts import make_visualizer + vis = make_visualizer(discr, discr.order+3) + resid = exact_grad - test_grad + vis.write_vtk_file("grad_test_{dim}_{order}_{n}.vtu".format( + dim=dim, order=order, n=nfac), [ + ("cv", test_data), + ("dmass", test_grad.mass), + ("denergy", test_grad.energy), + ("dmom_x", test_grad.momentum[0]), + ("dmom_y", test_grad.momentum[1]), + ("dmass_exact", exact_grad.mass), + ("denergy_exact", exact_grad.energy), + ("dmom_x_exact", exact_grad.momentum[0]), + ("dmom_y_exact", exact_grad.momentum[1]), + ("resid_mass", resid.mass), + ("resid_energy", resid.energy), + ("resid_mom_x", resid.momentum[0]), + ("resid_mom_y", resid.momentum[1])]) + eoc.add_data_point(actx.to_numpy(h_max), actx.to_numpy(grad_err)) + print(f"{order=}\n{dim=}\n{sym_test_func_factory=}") + print(f"{eoc.pretty_print()}") assert ( eoc.order_estimate() >= order - 0.5 or eoc.max_error() < tol From f394095129ae1099145a3b1637f7162245bf64f7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 29 Mar 2022 06:48:59 -0500 Subject: [PATCH 551/873] Sharpen docs --- doc/discretization.rst | 143 +++++++++++++++++++++++++++-------------- doc/misc.rst | 3 + 2 files changed, 98 insertions(+), 48 deletions(-) diff --git a/doc/discretization.rst b/doc/discretization.rst index c97f9cf5f..cbf7a8406 100644 --- a/doc/discretization.rst +++ b/doc/discretization.rst @@ -186,8 +186,16 @@ Domain boundary treatments What happens when $\partial E \cap \partial\Omega \neq \emptyset$? -In DG, numerical fluxes are not only responsible for handling the flow of information -between adjacent cells, but they also enforce information flow at the boundaries. +In DG, fluxes are responsible for handling the flow of information +between adjacent cells, and for transferring the boundary conditions +into the domain from the domain boundary. In this sense, all of the +boundary conditions are _weak_, in that they are weakly enforced +through the flux, as opposed to directly setting the solution of the +boundary elements (a _strong_ enforcement). + +Boundary treatments in *MIRGE-Com* follow the prescriptions of the +the so-called BR1 method descibed by [Bassi_1997]_, and the boundary +treatment strategies outlined by [Mengaldo_2014]_. The relevant quantities for the boundary treatments are as follows: @@ -234,10 +242,20 @@ is prescribed as follows: \b{Q}_{bc} = \b{Q}^- - 2*\left(\rho\b{v}^-\cdot\hat{\b{n}}\right)\hat{\b{n}}, -where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. +where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. More explicity for +our particular system of equations we set: + +.. math:: + + \b{Q}_{bc} = \begin{bmatrix}\rho^{-}\\(\rho{E})^{-}\\(\rho{v_b})_{i}\\(\rho{Y})^{-}_{\alpha}\end{bmatrix}, + +where $\mathbf{v}_b = \mathbf{v}^{-} - 2(\mathbf{v}^{-}\cdot\hat{\mathbf{n}})\hat{\mathbf{n}}$, +$\mathbf{v}^{-}$ being the flow velocity on the interior (minus side) of the face. The flux for the divergence of the inviscid flux is then calculated with the same numerical -flux function as used in the volume: $\b{h}^*_e = \b{h}_{e}(\b{Q}^-, \b{Q}_{bc})$. +flux function as used in the volume: $\b{h}^*_e = \b{h}_{e}(\b{Q}^-, \b{Q}_{bc})$. This is +an inviscid-only wall condition, so no section on viscous or gradient fluxes are included +for this particular wall treatment. No-slip walls @@ -250,51 +268,19 @@ For walls enforcing a no-slip condition, we choose the "no-slip boundary solutio .. math:: - \b{Q}_{bc} = \b{Q}^- - 2\rho\b{v}^-, - -where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. - -Gradient boundary flux -"""""""""""""""""""""" - -The boundary flux for $\nabla{\b{Q}}$ at the boundary is computed with a central -flux as follows: - -.. math:: - - \b{H}^*(\b{Q}_{bc}) = \b{H}_s(\b{Q}^-, \b{Q}_{bc}) = \frac{1}{2}\left(\b{Q}^- + \b{Q}_{bc}\right)\b{n}, - -using the no-slip boundary solution, $\b{Q}_{bc}$, as defined above. + \b{Q}_{bc} = \b{Q}^- - 2(\rho\b{v}^-), -Since: +where $\b{v}^-$ is the fluid velocity corresponding to $\b{Q}^-$. Explicity, for our +particular equations in *MIRGE-Com*, we set: .. math:: - \rho^+ &= \rho^- \\ - (\rho{E})^+ &= (\rho{E})^- \\ - (\rho{Y})^+ &= (\rho{Y})^-, - -we expect: + \b{Q}_{bc} = \begin{bmatrix}\rho^{-}\\(\rho{E})^{-}\\-(\rho{v})^{-}_{i}\\(\rho{Y})^{-}_{\alpha}\end{bmatrix}, -.. math:: - - \nabla(\rho) \cdot \hat{\b{n}} &= 0 \\ - \nabla(\rho{E}) \cdot \hat{\b{n}} &= 0 \\ - \nabla(\rho{Y}) \cdot \hat{\b{n}} &= 0 - -We compute $\nabla{Y}$ and $\nabla{E}$ from the product rule: - -.. math:: - - \nabla{Y} &= \frac{1}{\rho}\left(\nabla{(\rho{Y})} - Y\nabla{\rho}\right) \\ - \nabla{E} &= \frac{1}{\rho}\left(\nabla{(\rho{E})} - E\nabla{\rho}\right) - -So we likewise expect: - -.. math:: - - \nabla{Y} \cdot \hat{\b{n}} &= 0 \\ - \nabla{E} \cdot \hat{\b{n}} &= 0 +which is just the interior fluid state except with the opposite momentum. This ensures that any +Riemann solver used at the boundary will have an intermediate state with 0 velocities on the boundary. +Other choices here will lead to non-zero velocities at the boundary, leading to material penetration +at the wall; a non-physical result. Inviscid boundary flux """""""""""""""""""""" @@ -313,12 +299,21 @@ Viscous boundary flux """"""""""""""""""""" *MIRGE-Com* has a departure from BR1 for the computation of viscous fluxes. This section -will describe both the viscous flux calculation prescribed by BR1, and also what -*MIRGE-Com* is currently doing. +will describe the viscous flux calculations prescribed by [Bassi_1997]_, and [Mengaldo_2014]_, +and also what *MIRGE-Com* is currently doing. ---------- +-------- + +.. note:: + + [Mengaldo_2014]_ prescribes that when computing the gradients of the solution + (i.e. the auxiliary equation) and the viscous fluxes, one should use a $\b{Q}_{bc}$ + that is distinct from that used for the advective terms. This reference recommends + explicitly setting the boundary velocities to zero for the $\b{Q}_{bc}$ used in + computing $\nabla{\b{Q}}$ and $\b{F}_v(\b{Q}_{bc})$. -BR1 prescribes the following boundary treatment: + +BR1 and Mengaldo prescribe the following boundary treatment: The viscous boundary flux at solid walls is computed as: @@ -344,7 +339,59 @@ MIRGE-Com currently does the following: where $\b{Q}_{bc}$ are the same values used to prescribe $\b{h}^*_e$. +In *MIRGE-Com*, we use the central flux to transfer viscous BCs to the domain: + +.. math:: + + \b{h}^*_v(\b{Q}_{bc}, \b{\Sigma}_{bc}) = \frac{1}{2}\left(\mathbf{F}_v(\mathbf{Q}_{bc},\mathbf{\Sigma}_{bc}) + \mathbf{F}_v(\mathbf{Q}^{-},\mathbf{\Sigma}^{-})\right) + + +-------- + +Gradient boundary flux +"""""""""""""""""""""" + +The boundary flux for $\nabla{\b{Q}}$ (i.e. for the auxiliary at the boundary is computed with a central +flux as follows: + +.. math:: + \b{H}^*(\b{Q}_{bc}) = \b{H}_s(\b{Q}^-, \b{Q}_{bc}) = \frac{1}{2}\left(\b{Q}^- + \b{Q}_{bc}\right)\b{n}, + +using the no-slip boundary solution, $\b{Q}_{bc}$, as defined above. The note above about [Mengaldo_2014]_ using a distinct $\b{Q}_{bc}$ is relevant here. + +Since: + +.. math:: + + \rho^+ &= \rho^- \\ + (\rho{E})^+ &= (\rho{E})^- \\ + (\rho{Y})^+ &= (\rho{Y})^-, + +we expect: + +.. math:: + + \nabla(\rho) \cdot \hat{\b{n}} &= 0 \\ + \nabla(\rho{E}) \cdot \hat{\b{n}} &= 0 \\ + \nabla(\rho{Y}) \cdot \hat{\b{n}} &= 0 + +We compute $\nabla{Y}$ and $\nabla{E}$ from the product rule: + +.. math:: + + \nabla{Y} &= \frac{1}{\rho}\left(\nabla{(\rho{Y})} - Y\nabla{\rho}\right) \\ + \nabla{E} &= \frac{1}{\rho}\left(\nabla{(\rho{E})} - E\nabla{\rho}\right) + +So we likewise expect: + +.. math:: + + \nabla{Y} \cdot \hat{\b{n}} &= 0 \\ + \nabla{E} \cdot \hat{\b{n}} &= 0 + + +--------- Inflow/outflow boundaries ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/misc.rst b/doc/misc.rst index 3767b3477..974ad09b0 100644 --- a/doc/misc.rst +++ b/doc/misc.rst @@ -71,3 +71,6 @@ References `(DOI) `__ .. [Ihme_2014] Yu Lv and Matthias Ihme (2014) Journal of Computationsl Physics 270 105 \ `(DOI) `__ +.. [Mengaldo_2014] Gianmarco Mengaldo (2014) A Guide to the Implementation of Boundary Conditions in Compact High-Order Methods for Compressible Aerodynamics \ + `(DOI) `__ + From b5ef7fc030147f3eef98d6f5ac30585e30ad6943 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Wed, 30 Mar 2022 11:09:25 -0500 Subject: [PATCH 552/873] added new implementation for isothermal wall with modifcations to how viscous terms are computed, based on Mengaldo --- mirgecom/boundary.py | 100 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index deba8a25b..646fa9512 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -752,3 +752,103 @@ def inflow_state(self, discr, btag, gas_model, state_minus, **kwargs): def temperature_bc(self, state_minus, **kwargs): """Temperature value that prescribes the desired temperature.""" return -state_minus.temperature + 2.0*self._free_stream_temperature + + +class IsothermalWallBoundary(PrescribedFluidBoundary): + r"""Isothermal viscous wall boundary. + This class implements an isothermal wall by: + Pescribed flux, *not* with Riemann solver + """ + + def __init__(self, wall_temperature=300): + """Initialize the boundary condition object.""" + self._wall_temp = wall_temperature + PrescribedFluidBoundary.__init__( + self, boundary_state_func=self.isothermal_wall_state, + inviscid_flux_func=self.inviscid_wall_flux, + viscous_flux_func=self.viscous_wall_flux, + boundary_temperature_func=self.temperature_bc, + boundary_gradient_cv_func=self.grad_cv_bc + ) + + def isothermal_wall_state(self, discr, btag, gas_model, state_minus, **kwargs): + """Return state with 0 velocities and energy(Twall).""" + temperature_wall = self._wall_temp + 0*state_minus.mass_density + mom_plus = state_minus.mass_density*0.*state_minus.velocity + mass_frac_plus = state_minus.species_mass_fractions + + internal_energy_plus = gas_model.eos.get_internal_energy( + temperature=temperature_wall, species_mass_fractions=mass_frac_plus) + + total_energy_plus = state_minus.mass_density*internal_energy_plus + + cv_plus = make_conserved( + state_minus.dim, mass=state_minus.mass_density, energy=total_energy_plus, + momentum=mom_plus, species_mass=state_minus.species_mass_density + ) + return make_fluid_state(cv=cv_plus, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, + numerical_flux_func=inviscid_flux_rusanov, **kwargs): + """Return Riemann flux using state with mom opposite of interior state.""" + wall_cv = make_conserved(dim=state_minus.dim, + mass=state_minus.mass_density, + momentum=-state_minus.momentum_density, + energy=state_minus.energy_density, + species_mass=state_minus.species_mass_density) + wall_state = make_fluid_state(cv=wall_cv, gas_model=gas_model, + temperature_seed=state_minus.temperature) + state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) + + from mirgecom.inviscid import inviscid_facial_flux + return self._boundary_quantity( + discr, btag, + inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=numerical_flux_func, + local=True), + **kwargs) + + def temperature_bc(self, state_minus, **kwargs): + """Get temperature value used in grad(T).""" + # return 2*self._wall_temp - state_minus.temperature + return 0.*state_minus.temperature + self._wall_temp + + def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): + from mirgecom.fluid import species_mass_fraction_gradient + grad_y_plus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) + for i in range(state_minus.nspecies): + grad_y_plus[i] = grad_y_plus[i] - (np.dot(grad_y_plus[i], normal)*normal) + grad_cv = make_conserved(grad_cv_minus.dim, + mass=grad_cv_minus.mass, + energy=grad_cv_minus.energy, + momentum=grad_cv_minus.momentum, + species_mass=state_minus.mass_density*grad_y_plus) + return grad_cv + + def viscous_wall_flux(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, + numerical_flux_func=viscous_flux_central, + **kwargs): + from mirgecom.viscous import viscous_flux + actx = state_minus.array_context + normal = thaw(discr.normal(btag), actx) + + state_plus = self.isothermal_wall_state(discr=discr, btag=btag, + gas_model=gas_model, + state_minus=state_minus, **kwargs) + grad_cv_plus = self.grad_cv_bc(state_minus=state_minus, + grad_cv_minus=grad_cv_minus, + normal=normal, **kwargs) + + grad_t_plus = self._bnd_grad_temperature_func( + discr=discr, btag=btag, gas_model=gas_model, + state_minus=state_minus, grad_cv_minus=grad_cv_minus, + grad_t_minus=grad_t_minus) + + f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, + grad_t=grad_t_plus) + + return self._boundary_quantity( + discr, btag, + quantity=f_ext@normal) From 4ab18f8253e6128018d5e9f23fb1a7d54500786c Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Wed, 30 Mar 2022 14:15:14 -0500 Subject: [PATCH 553/873] fixed up isothermal bc for non-constant rho --- mirgecom/boundary.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 646fa9512..249b25b71 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -817,14 +817,16 @@ def temperature_bc(self, state_minus, **kwargs): def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): from mirgecom.fluid import species_mass_fraction_gradient grad_y_plus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) + grad_y_plus = grad_y_plus - np.outer(grad_y_plus@normal, normal) + grad_species_mass_plus = 0.*grad_y_plus for i in range(state_minus.nspecies): - grad_y_plus[i] = grad_y_plus[i] - (np.dot(grad_y_plus[i], normal)*normal) - grad_cv = make_conserved(grad_cv_minus.dim, - mass=grad_cv_minus.mass, - energy=grad_cv_minus.energy, - momentum=grad_cv_minus.momentum, - species_mass=state_minus.mass_density*grad_y_plus) - return grad_cv + grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + return make_conserved(grad_cv_minus.dim, + mass=grad_cv_minus.mass, + energy=grad_cv_minus.energy, + momentum=grad_cv_minus.momentum, + species_mass=grad_species_mass_plus) def viscous_wall_flux(self, discr, btag, gas_model, state_minus, grad_cv_minus, grad_t_minus, From d45d06885ced17d60e0c68c29c03250c390a4bfd Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 30 Mar 2022 14:18:53 -0500 Subject: [PATCH 554/873] Add new verification cases, support --- examples/README.md | 1 + examples/pulse-mpi.py | 36 ++- examples/pulse-multispecies-mpi.py | 421 +++++++++++++++++++++++++++ examples/scalar-advdiff-mpi.py | 443 +++++++++++++++++++++++++++++ examples/scalar-lump-mpi.py | 3 +- mirgecom/initializers.py | 189 ++++++++++++ 6 files changed, 1081 insertions(+), 12 deletions(-) create mode 100644 examples/pulse-multispecies-mpi.py create mode 100644 examples/scalar-advdiff-mpi.py diff --git a/examples/README.md b/examples/README.md index f634187da..bf0c57166 100644 --- a/examples/README.md +++ b/examples/README.md @@ -19,3 +19,4 @@ unique features they exercise are as follows: - `nsmix-mpi.py`: Viscous mixture w/Pyrometheus-based EOS - `poiseuille-mpi.py`: Poiseuille flow verification case - `poiseuille-multispecies-mpi.py`: Poiseuille flow with passive scalars +- `scalar-advdiff-mpi.py`: Scalar advection-diffusion verification case diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 2ca8464ba..4c1386c32 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -36,7 +36,9 @@ from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer +from mirgecom.transport import SimpleTransport from mirgecom.euler import euler_operator +from mirgecom.navierstokes import ns_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -45,7 +47,11 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import AdiabaticSlipBoundary +from mirgecom.boundary import ( + AdiabaticSlipBoundary, + AdiabaticNoslipMovingBoundary, + IsothermalNoSlipBoundary +) from mirgecom.initializers import ( Lump, AcousticPulse @@ -116,11 +122,11 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.1 - current_cfl = 1.0 + t_final = 1.0 + current_cfl = 0.1 current_dt = .01 current_t = 0 - constant_cfl = False + constant_cfl = True # some i/o frequencies nstatus = 1 @@ -193,12 +199,17 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, ("t_log.max", "log walltime: {value:6g} s") ]) + kappa = 1e-5 + sigma = 1e-5 + transport_model = SimpleTransport(viscosity=sigma, thermal_conductivity=kappa) eos = IdealSingleGas() - gas_model = GasModel(eos=eos) + gas_model = GasModel(eos=eos, transport=transport_model) + vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) initializer = Lump(dim=dim, center=orig, velocity=vel, rhoamp=0.0) - wall = AdiabaticSlipBoundary() + wall = AdiabaticNoslipMovingBoundary(dim=3) + boundaries = {BTAG_ALL: wall} uniform_state = initializer(nodes) acoustic_pulse = AcousticPulse(dim=dim, amplitude=1.0, width=.1, @@ -212,7 +223,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_cv = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) + # current_cv = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) + current_cv = uniform_state current_state = make_fluid_state(current_cv, gas_model) @@ -266,6 +278,8 @@ def my_health_check(pressure): def my_pre_step(step, t, dt, state): fluid_state = make_fluid_state(state, gas_model) dv = fluid_state.dv + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, + t_final, constant_cfl) try: @@ -312,10 +326,10 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - return euler_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, - gas_model=gas_model, - quadrature_tag=quadrature_tag) + return ns_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) diff --git a/examples/pulse-multispecies-mpi.py b/examples/pulse-multispecies-mpi.py new file mode 100644 index 000000000..283b50666 --- /dev/null +++ b/examples/pulse-multispecies-mpi.py @@ -0,0 +1,421 @@ +"""Demonstrate simple scalar lump advection with acoustic pulse.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial +from pytools.obj_array import make_obj_array + +from arraycontext import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer + + +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point + +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import PrescribedFluidBoundary +from mirgecom.transport import SimpleTransport +from mirgecom.initializers import ( + MulticomponentLump, + AcousticPulse +) +from mirgecom.eos import IdealSingleGas + +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +@mpi_entry_point +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, lazy=False): + """Drive example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) + + # timestepping control + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step + t_final = 10000. + current_cfl = 0.1 + current_dt = .001 + current_t = 0 + constant_cfl = True + + # some i/o frequencies + nstatus = 1 + nrestart = 5 + nviz = 1 + nhealth = 1 + + dim = 2 + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["num_parts"] == nparts + else: # generate the grid from scratch + box_ll = -5.0 + box_ur = 5.0 + nel_1d = 16 + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + order = 1 + discr = EagerDGDiscretization( + actx, local_mesh, order=order, mpi_communicator=comm + ) + nodes = thaw(discr.nodes(), actx) + + vis_timer = None + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + # soln setup and init + nspecies = 2 + centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) + spec_y0s = np.zeros(shape=(nspecies,)) + spec_amplitudes = np.ones(shape=(nspecies,)) + spec_widths = .4*np.ones(shape=(nspecies,)) + pulse_center = np.zeros(shape=(dim,)) + + kappa = 1. + spec_def = 1e-5 + spec_diffusivity = spec_def * np.ones(nspecies) + mu = 1e-5 + transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + eos = IdealSingleGas() + + velocity = np.zeros(shape=(dim,)) + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=eos, transport=transport_model) + + initializer = MulticomponentLump(dim=dim, nspecies=nspecies, p0=101325., + spec_centers=centers, velocity=velocity, + spec_y0s=spec_y0s, spec_widths=spec_widths, + spec_amplitudes=spec_amplitudes, + independent=False) + acoustic_pulse = AcousticPulse(dim=dim, amplitude=100000.0, width=.3, + center=pulse_center) + + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) + + from mirgecom.boundary import ( + AdiabaticNoslipMovingBoundary, + IsothermalNoSlipBoundary + ) + bndrytype = "isothermal" + if bndrytype == "exact": + boundary = PrescribedFluidBoundary(boundary_state_func=boundary_solution) + elif bndrytype == "adiabatic": + boundary = AdiabaticNoslipMovingBoundary() + elif bndrytype == "isothermal": + boundary = IsothermalNoSlipBoundary(wall_temperature=353) + + boundaries = { + BTAG_ALL: boundary + } + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_cv = restart_data["cv"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_cv = acoustic_pulse(x_vec=nodes, cv=initializer(x_vec=nodes), + eos=eos) + + current_state = make_fluid_state(current_cv, gas_model) + + visualizer = make_visualizer(discr) + initname = initializer.__class__.__name__ + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=initname, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_status(component_errors): + if rank == 0: + logger.info( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + + def my_write_viz(step, t, cv, dv): + # if dv is None: + # dv = eos.dependent_vars(state) + # if exact is None: + # exact = initializer(x_vec=nodes, eos=eos, time=t) + # if resid is None: + # resid = state - exact + viz_fields = [("cv", cv), + ("dv", dv)] + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True, vis_timer=vis_timer) + + def my_write_restart(step, t, cv): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "cv": cv, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure): + health_error = False + from mirgecom.simutil import check_naninf_local # , check_range_local + if check_naninf_local(discr, "vol", pressure): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + return health_error + + def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + cv = fluid_state.cv + dv = fluid_state.dv + + try: + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + # do_status = check_step(step=step, interval=nstatus) + + if do_health: + # from mirgecom.simutil import compare_fluid_solutions + health_errors = global_reduce( + my_health_check(dv.pressure), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, cv=cv) + + if do_viz: + my_write_viz(step=step, t=t, cv=cv, dv=dv) + + # if do_status: + # my_write_status(component_errors) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=cv) + my_write_restart(step=step, t=t, cv=cv, dv=dv) + raise + + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, + constant_cfl) + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + fluid_state = make_fluid_state(state, gas_model) + return ns_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + + current_step, current_t, current_cv = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, dt=current_dt, + post_step_callback=my_post_step, + state=current_state.cv, t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv + my_write_viz(step=current_step, t=current_t, cv=current_state.cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, cv=current_state.cv) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + time_err = current_t - t_final + if np.abs(time_err) > finish_tol: + raise ValueError(f"Simulation did not finish at expected time {time_err=}.") + + +if __name__ == "__main__": + import argparse + casename = "pulse-ms" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + lazy = args.lazy + if args.profiling: + if lazy: + raise ValueError("Can't use lazy and profiling together.") + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) + +# vim: foldmethod=marker diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py new file mode 100644 index 000000000..88f53d184 --- /dev/null +++ b/examples/scalar-advdiff-mpi.py @@ -0,0 +1,443 @@ +"""Demonstrate simple scalar advection-diffusion.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial +from pytools.obj_array import make_obj_array + +from arraycontext import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer + + +from mirgecom.transport import SimpleTransport +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh, + compare_fluid_solutions +) +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point + +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +# from mirgecom.boundary import PrescribedFluidBoundary +# from mirgecom.initializers import MulticomponentLump +from mirgecom.eos import IdealSingleGas + +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +@mpi_entry_point +def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, lazy=False): + """Drive example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) + + # timestepping control + current_step = 0 + if use_leap: + from leap.rk import RK4MethodBuilder + timestepper = RK4MethodBuilder("state") + else: + timestepper = rk4_step + t_final = 0.5 + current_cfl = 0.1 + current_dt = .001 + current_t = 0 + constant_cfl = True + + # some i/o frequencies + nstatus = 1 + nrestart = 5 + nviz = 100 + nhealth = 1 + + dim = 2 + nel_1d = 16 + order = 2 + + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["num_parts"] == nparts + else: # generate the grid from scratch + box_ll = -.5 + box_ur = .5 + periodic = (True, )*dim + from meshmode.mesh.generation import generate_regular_rect_mesh + generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, + b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim, + periodic=periodic) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + discr = EagerDGDiscretization( + actx, local_mesh, order=order, mpi_communicator=comm + ) + nodes = thaw(discr.nodes(), actx) + + def vol_min(x): + from grudge.op import nodal_min + return actx.to_numpy(nodal_min(discr, "vol", x))[()] + + def vol_max(x): + from grudge.op import nodal_max + return actx.to_numpy(nodal_max(discr, "vol", x))[()] + + from grudge.dt_utils import characteristic_lengthscales + dx = characteristic_lengthscales(actx, discr) + dx_min, dx_max = vol_min(dx), vol_max(dx) + + print(f"DX: ({dx_min}, {dx_max})") + vis_timer = None + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + # soln setup and init + nspecies = 1 + centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) + velocity = np.zeros(shape=(dim,)) + velocity[0] = 1. + wave_vector = np.zeros(shape=(dim,)) + wave_vector[0] = 1. + wave_vector = wave_vector / np.sqrt(np.dot(wave_vector, wave_vector)) + + spec_y0s = np.ones(shape=(nspecies,)) + spec_amplitudes = np.ones(shape=(nspecies,)) + spec_omegas = 2. * np.pi * np.ones(shape=(nspecies,)) + + kappa = 1e-5 + sigma = 1e-5 + spec_diff = .1 + spec_diffusivities = spec_diff * np.ones(nspecies) + transport_model = SimpleTransport(viscosity=sigma, thermal_conductivity=kappa, + species_diffusivity=spec_diffusivities) + + eos = IdealSingleGas() + from mirgecom.gas_model import GasModel, make_fluid_state + gas_model = GasModel(eos=eos, transport=transport_model) + + from mirgecom.initializers import MulticomponentTrig + initializer = MulticomponentTrig(dim=dim, nspecies=nspecies, + spec_centers=centers, velocity=velocity, + spec_y0s=spec_y0s, + spec_amplitudes=spec_amplitudes, + spec_omegas=spec_omegas, + spec_diffusivities=spec_diffusivities, + wave_vector=wave_vector) + + def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + **kwargs), gas_model) + + boundaries = {} + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_cv = restart_data["cv"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_cv = initializer(nodes) + + current_state = make_fluid_state(current_cv, gas_model) + convective_speed = np.sqrt(np.dot(velocity, velocity)) + c = current_state.speed_of_sound + mach = vol_max(convective_speed / c) + cell_peclet = c * dx / (2 * spec_diff) + pe_min, pe_max = vol_min(cell_peclet), vol_max(cell_peclet) + + print(f"Mach: {mach}") + print(f"Cell Peclet: ({pe_min, pe_max})") + + visualizer = make_visualizer(discr) + initname = initializer.__class__.__name__ + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=initname, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_status(component_errors): + if rank == 0: + logger.info( + "------- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + + def my_write_viz(step, t, cv, dv, exact): + resid = cv - exact + viz_fields = [("cv", cv), + ("dv", dv), + ("exact", exact), + ("resid", resid)] + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True, vis_timer=vis_timer) + + def my_write_restart(step, t, cv): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "cv": cv, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure, component_errors): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", pressure) \ + or check_range_local(discr, "vol", pressure, .99999999, 1.00000001): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + exittol = .09 + if max(component_errors) > exittol: + health_error = False + if rank == 0: + logger.info("Solution diverged from exact soln.") + + return health_error + + def my_pre_step(step, t, dt, state): + cv = state + + try: + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if do_viz or do_health or do_status: + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv + exact = initializer(x_vec=nodes, eos=eos, time=t) + + if do_health or do_status: + component_errors = compare_fluid_solutions(discr, cv, exact) + + if do_health: + health_errors = global_reduce( + my_health_check(dv.pressure, component_errors), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, cv=cv) + + if do_viz: + my_write_viz(step=step, t=t, cv=cv, dv=dv, exact=exact) + + if do_status: + my_write_status(component_errors=component_errors) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + raise + + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, + constant_cfl) + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + fluid_state = make_fluid_state(state, gas_model) + return ns_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + + current_step, current_t, current_cv = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, dt=current_dt, + post_step_callback=my_post_step, + state=current_state.cv, t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + + current_state = make_fluid_state(current_cv, gas_model) + final_dv = current_state.dv + final_exact = initializer(x_vec=nodes, eos=eos, time=current_t) + my_write_viz(step=current_step, t=current_t, cv=current_state.cv, dv=final_dv, + exact=final_exact) + my_write_restart(step=current_step, t=current_t, cv=current_state.cv) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + time_err = current_t - t_final + if np.abs(time_err) > finish_tol: + raise ValueError(f"Simulation did not finish at expected time {time_err=}.") + + +if __name__ == "__main__": + import argparse + casename = "scalar-advdiff" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + lazy = args.lazy + if args.profiling: + if lazy: + raise ValueError("Can't use lazy and profiling together.") + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) + +# vim: foldmethod=marker diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 215698e74..c8e84ec10 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -36,7 +36,8 @@ from grudge.shortcuts import make_visualizer -from mirgecom.euler import euler_operator +from mirgecom.transport import SimpleTransport +from mirgecom.navierstokes import ns_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index b7683e653..6b299ea11 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -764,6 +764,195 @@ def exact_rhs(self, discr, cv, time=0.0): momentum=momrhs, species_mass=specrhs) +class MulticomponentTrig: + r"""Initializer for trig-distributed species fractions. + + The trig lump is defined by: + + .. math:: + + \rho &= 1.0\\ + {\rho}\mathbf{V} &= {\rho}\mathbf{V}_0\\ + {\rho}E &= \frac{p_0}{(\gamma - 1)} + \frac{1}{2}\rho{|V_0|}^{2}\\ + {\rho~Y_\alpha} &= {\rho~Y_\alpha}_{0} + + {a_\alpha}\sin{\omega(\mathbf{r} - \mathbf{v}t)}, + + where $\mathbf{V}_0$ is the fixed velocity specified by the user at init time, + and $\gamma$ is taken from the equation-of-state object (eos). + + The user-specified vector of initial values (${{Y}_\alpha}_0$) + for the mass fraction of each species, *spec_y0s*, and $a_\alpha$ is the + user-specified vector of amplitudes for each species, *spec_amplitudes*, and + $c_\alpha$ is the user-specified origin for each species, *spec_centers*. + + A call to this object after creation/init creates the lump solution at a given + time (*t*) relative to the configured origin (*center*) and background flow + velocity (*velocity*). + + This object also supplies the exact expected RHS terms from the analytic + expression via :meth:`exact_rhs`. + + .. automethod:: __init__ + .. automethod:: __call__ + .. automethod:: exact_rhs + """ + + def __init__( + self, *, dim=1, nspecies=0, + rho0=1.0, p0=1.0, gamma=1.4, + center=None, velocity=None, + spec_y0s=None, spec_amplitudes=None, + spec_centers=None, + spec_omegas=None, + spec_diffusivities=None, + wave_vector=None + ): + r"""Initialize MulticomponentLump parameters. + + Parameters + ---------- + dim: int + specify the number of dimensions for the lump + rho0: float + specifies the value of $\rho_0$ + p0: float + specifies the value of $p_0$ + center: numpy.ndarray + center of lump, shape ``(dim,)`` + velocity: numpy.ndarray + fixed flow velocity used for exact solution at t != 0, + shape ``(dim,)`` + """ + if center is None: + center = np.zeros(shape=(dim,)) + if velocity is None: + velocity = np.zeros(shape=(dim,)) + if center.shape != (dim,) or velocity.shape != (dim,): + raise ValueError(f"Expected {dim}-dimensional vector inputs.") + if spec_y0s is None: + spec_y0s = np.ones(shape=(nspecies,)) + if spec_centers is None: + spec_centers = make_obj_array([np.zeros(shape=dim,) + for i in range(nspecies)]) + if spec_omegas is None: + spec_omegas = 1./2./np.pi*np.ones(shaep=(nspecies,)) + + if spec_amplitudes is None: + spec_amplitudes = np.ones(shape=(nspecies,)) + if spec_diffusivities is None: + spec_diffusivities = np.ones(shape=(nspecies,)) + + if wave_vector is None: + wave_vector = np.zeros(shape=(dim,)) + wave_vector[0] = 1 + + if len(spec_y0s) != nspecies or\ + len(spec_amplitudes) != nspecies or\ + len(spec_centers) != nspecies: + raise ValueError(f"Expected nspecies={nspecies} inputs.") + for i in range(nspecies): + if len(spec_centers[i]) != dim: + raise ValueError(f"Expected {dim}-dimensional " + f"inputs for spec_centers.") + + self._nspecies = nspecies + self._dim = dim + self._velocity = velocity + self._center = center + self._p0 = p0 + self._rho0 = rho0 + self._spec_y0s = spec_y0s + self._spec_centers = spec_centers + self._spec_amps = spec_amplitudes + self._gamma = gamma + self._spec_omegas = spec_omegas + self._d = spec_diffusivities + self._wave_vector = wave_vector + + def __call__(self, x_vec, *, eos=None, time=0, **kwargs): + """ + Create a multi-component lump solution at time *t* and locations *x_vec*. + + The solution at time *t* is created by advecting the component mass lump + at the user-specified constant, uniform velocity + (``MulticomponentLump._velocity``). + + Parameters + ---------- + time: float + Current time at which the solution is desired + x_vec: numpy.ndarray + Nodal coordinates + eos: :class:`mirgecom.eos.IdealSingleGas` + Equation of state class with method to supply gas *gamma*. + """ + t = time + if x_vec.shape != (self._dim,): + print(f"len(x_vec) = {len(x_vec)}") + print(f"self._dim = {self._dim}") + raise ValueError(f"Expected {self._dim}-dimensional inputs.") + # actx = x_vec[0].array_context + mass = 0 * x_vec[0] + self._rho0 + mom = self._velocity * mass + energy = ((self._p0 / (self._gamma - 1.0)) + + 0.5*mass*np.dot(self._velocity, self._velocity)) + + import mirgecom.math as mm + vel_t = t * self._velocity + spec_mass = np.empty((self._nspecies,), dtype=object) + for i in range(self._nspecies): + spec_x = x_vec - self._spec_centers[i] + wave_r = spec_x - vel_t + wave_x = np.dot(wave_r, self._wave_vector) + expterm = mm.exp(-t*self._d[i]*self._spec_omegas[i]**2) + trigterm = mm.sin(self._spec_omegas[i]*wave_x) + spec_y = self._spec_y0s[i] + self._spec_amps[i]*expterm*trigterm + spec_mass[i] = mass * spec_y + + return make_conserved(dim=self._dim, mass=mass, energy=energy, + momentum=mom, species_mass=spec_mass) + + def exact_rhs(self, discr, cv, time=0.0): + """ + Create a RHS for multi-component lump soln at time *t*, locations *x_vec*. + + The RHS at time *t* is created by advecting the species mass lump at the + user-specified constant, uniform velocity (``MulticomponentLump._velocity``). + + Parameters + ---------- + q + State array which expects at least the canonical conserved quantities + (mass, energy, momentum) for the fluid at each point. + time: float + Time at which RHS is desired + """ + t = time + actx = cv.array_context + nodes = thaw(actx, discr.nodes()) + loc_update = t * self._velocity + + mass = 0 * nodes[0] + self._rho0 + mom = self._velocity * mass + + v = mom / mass + massrhs = 0 * mass + energyrhs = 0 * mass + momrhs = 0 * mom + + # process the species components independently + specrhs = np.empty((self._nspecies,), dtype=object) + for i in range(self._nspecies): + lump_loc = self._spec_centers[i] + loc_update + rel_pos = nodes - lump_loc + r2 = np.dot(rel_pos, rel_pos) + expterm = self._spec_amplitudes[i] * actx.np.exp(-r2) + specrhs[i] = 2 * self._rho0 * expterm * np.dot(rel_pos, v) + + return make_conserved(dim=self._dim, mass=massrhs, energy=energyrhs, + momentum=momrhs, species_mass=specrhs) + + class AcousticPulse: r"""Solution initializer for N-dimensional Gaussian acoustic pulse. From c3e48251ff16f1274c7ac75c284829d4c8625a82 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 31 Mar 2022 11:47:29 -0500 Subject: [PATCH 555/873] Merge in new example verif cases. --- examples/nsmix-mpi.py | 17 +- examples/pulse-mpi.py | 36 +-- examples/pulse-multispecies-mpi.py | 421 ----------------------------- examples/scalar-lump-mpi.py | 3 +- mirgecom/boundary.py | 16 +- mirgecom/initializers.py | 59 +--- mirgecom/simutil.py | 17 +- test/test_operators.py | 46 +--- 8 files changed, 67 insertions(+), 548 deletions(-) delete mode 100644 examples/pulse-multispecies-mpi.py diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index f2a7f9ee5..effa76a7b 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -248,9 +248,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # states for this particular mechanism. from mirgecom.thermochemistry import make_pyrometheus_mechanism_class pyrometheus_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) - eos = PyrometheusMixture(pyrometheus_mechanism, - temperature_guess=init_temperature) - gas_model = GasModel(eos=eos, transport=transport_model) + pyro_eos = PyrometheusMixture(pyrometheus_mechanism, + temperature_guess=init_temperature) + gas_model = GasModel(eos=pyro_eos, transport=transport_model) # }}} @@ -485,8 +485,8 @@ def my_pre_step(step, t, dt, state): return_gradients=True) grad_v = velocity_gradient(cv, grad_cv) chem_rhs = \ - gas_model.eos.get_species_source_terms(cv, - fluid_state.temperature) + pyro_eos.get_species_source_terms(cv, + fluid_state.temperature) my_write_viz(step=step, t=t, cv=cv, dv=dv, ns_rhs=ns_rhs, chem_rhs=chem_rhs, grad_cv=grad_cv, grad_t=grad_t, grad_v=grad_v) @@ -524,7 +524,8 @@ def my_rhs(t, state): temperature_seed=tseed) ns_rhs = ns_operator(discr, state=fluid_state, time=t, boundaries=visc_bnds, gas_model=gas_model) - cv_rhs = ns_rhs + eos.get_species_source_terms(cv, fluid_state.temperature) + cv_rhs = ns_rhs + pyro_eos.get_species_source_terms(cv, + fluid_state.temperature) return make_obj_array([cv_rhs, 0*tseed]) current_dt = get_sim_timestep(discr, current_state, current_t, @@ -554,8 +555,8 @@ def my_rhs(t, state): return_gradients=True) grad_v = velocity_gradient(current_state.cv, grad_cv) chem_rhs = \ - gas_model.eos.get_species_source_terms(current_state.cv, - current_state.temperature) + pyro_eos.get_species_source_terms(current_state.cv, + current_state.temperature) my_write_viz(step=current_step, t=current_t, cv=current_state.cv, dv=final_dv, chem_rhs=chem_rhs, grad_cv=grad_cv, grad_t=grad_t, grad_v=grad_v) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 4c1386c32..2ca8464ba 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -36,9 +36,7 @@ from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer -from mirgecom.transport import SimpleTransport from mirgecom.euler import euler_operator -from mirgecom.navierstokes import ns_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -47,11 +45,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import ( - AdiabaticSlipBoundary, - AdiabaticNoslipMovingBoundary, - IsothermalNoSlipBoundary -) +from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import ( Lump, AcousticPulse @@ -122,11 +116,11 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 1.0 - current_cfl = 0.1 + t_final = 0.1 + current_cfl = 1.0 current_dt = .01 current_t = 0 - constant_cfl = True + constant_cfl = False # some i/o frequencies nstatus = 1 @@ -199,17 +193,12 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, ("t_log.max", "log walltime: {value:6g} s") ]) - kappa = 1e-5 - sigma = 1e-5 - transport_model = SimpleTransport(viscosity=sigma, thermal_conductivity=kappa) eos = IdealSingleGas() - gas_model = GasModel(eos=eos, transport=transport_model) - + gas_model = GasModel(eos=eos) vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) initializer = Lump(dim=dim, center=orig, velocity=vel, rhoamp=0.0) - wall = AdiabaticNoslipMovingBoundary(dim=3) - + wall = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: wall} uniform_state = initializer(nodes) acoustic_pulse = AcousticPulse(dim=dim, amplitude=1.0, width=.1, @@ -223,8 +212,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - # current_cv = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) - current_cv = uniform_state + current_cv = acoustic_pulse(x_vec=nodes, cv=uniform_state, eos=eos) current_state = make_fluid_state(current_cv, gas_model) @@ -278,8 +266,6 @@ def my_health_check(pressure): def my_pre_step(step, t, dt, state): fluid_state = make_fluid_state(state, gas_model) dv = fluid_state.dv - dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, - t_final, constant_cfl) try: @@ -326,10 +312,10 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - return ns_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, - gas_model=gas_model, - quadrature_tag=quadrature_tag) + return euler_operator(discr, state=fluid_state, time=t, + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) diff --git a/examples/pulse-multispecies-mpi.py b/examples/pulse-multispecies-mpi.py deleted file mode 100644 index 283b50666..000000000 --- a/examples/pulse-multispecies-mpi.py +++ /dev/null @@ -1,421 +0,0 @@ -"""Demonstrate simple scalar lump advection with acoustic pulse.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" -import logging -import numpy as np -import pyopencl as cl -import pyopencl.tools as cl_tools -from functools import partial -from pytools.obj_array import make_obj_array - -from arraycontext import thaw -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.eager import EagerDGDiscretization -from grudge.shortcuts import make_visualizer - - -from mirgecom.navierstokes import ns_operator -from mirgecom.simutil import ( - get_sim_timestep, - generate_and_distribute_mesh -) -from mirgecom.io import make_init_message -from mirgecom.mpi import mpi_entry_point - -from mirgecom.integrators import rk4_step -from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedFluidBoundary -from mirgecom.transport import SimpleTransport -from mirgecom.initializers import ( - MulticomponentLump, - AcousticPulse -) -from mirgecom.eos import IdealSingleGas - -from logpyle import IntervalTimer, set_dt -from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.logging_quantities import ( - initialize_logmgr, - logmgr_add_many_discretization_quantities, - logmgr_add_device_name, - logmgr_add_device_memory_usage, - set_sim_state -) - -logger = logging.getLogger(__name__) - - -class MyRuntimeError(RuntimeError): - """Simple exception to kill the simulation.""" - - pass - - -@mpi_entry_point -def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, lazy=False): - """Drive example.""" - cl_ctx = ctx_factory() - - if casename is None: - casename = "mirgecom" - - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nparts = comm.Get_size() - - from mirgecom.simutil import global_reduce as _global_reduce - global_reduce = partial(_global_reduce, comm=comm) - - logmgr = initialize_logmgr(use_logmgr, - filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) - - if use_profiling: - queue = cl.CommandQueue( - cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - else: - queue = cl.CommandQueue(cl_ctx) - - if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) - else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) - - # timestepping control - current_step = 0 - if use_leap: - from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") - else: - timestepper = rk4_step - t_final = 10000. - current_cfl = 0.1 - current_dt = .001 - current_t = 0 - constant_cfl = True - - # some i/o frequencies - nstatus = 1 - nrestart = 5 - nviz = 1 - nhealth = 1 - - dim = 2 - rst_path = "restart_data/" - rst_pattern = ( - rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" - ) - if rst_filename: # read the grid from restart data - rst_filename = f"{rst_filename}-{rank:04d}.pkl" - from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_filename) - local_mesh = restart_data["local_mesh"] - local_nelements = local_mesh.nelements - global_nelements = restart_data["global_nelements"] - assert restart_data["num_parts"] == nparts - else: # generate the grid from scratch - box_ll = -5.0 - box_ur = 5.0 - nel_1d = 16 - from meshmode.mesh.generation import generate_regular_rect_mesh - generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, - b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) - local_mesh, global_nelements = generate_and_distribute_mesh(comm, - generate_mesh) - local_nelements = local_mesh.nelements - - order = 1 - discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm - ) - nodes = thaw(discr.nodes(), actx) - - vis_timer = None - - if logmgr: - logmgr_add_device_name(logmgr, queue) - logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, discr, dim, - extract_vars_for_logging, units_for_logging) - - vis_timer = IntervalTimer("t_vis", "Time spent visualizing") - logmgr.add_quantity(vis_timer) - - logmgr.add_watches([ - ("step.max", "step = {value}, "), - ("t_sim.max", "sim time: {value:1.6e} s\n"), - ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), - ("max_pressure", "{value:1.9e})\n"), - ("t_step.max", "------- step walltime: {value:6g} s, "), - ("t_log.max", "log walltime: {value:6g} s") - ]) - - # soln setup and init - nspecies = 2 - centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) - spec_y0s = np.zeros(shape=(nspecies,)) - spec_amplitudes = np.ones(shape=(nspecies,)) - spec_widths = .4*np.ones(shape=(nspecies,)) - pulse_center = np.zeros(shape=(dim,)) - - kappa = 1. - spec_def = 1e-5 - spec_diffusivity = spec_def * np.ones(nspecies) - mu = 1e-5 - transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, - species_diffusivity=spec_diffusivity) - eos = IdealSingleGas() - - velocity = np.zeros(shape=(dim,)) - from mirgecom.gas_model import GasModel, make_fluid_state - gas_model = GasModel(eos=eos, transport=transport_model) - - initializer = MulticomponentLump(dim=dim, nspecies=nspecies, p0=101325., - spec_centers=centers, velocity=velocity, - spec_y0s=spec_y0s, spec_widths=spec_widths, - spec_amplitudes=spec_amplitudes, - independent=False) - acoustic_pulse = AcousticPulse(dim=dim, amplitude=100000.0, width=.3, - center=pulse_center) - - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): - actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) - nodes = thaw(bnd_discr.nodes(), actx) - return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, - **kwargs), gas_model) - - from mirgecom.boundary import ( - AdiabaticNoslipMovingBoundary, - IsothermalNoSlipBoundary - ) - bndrytype = "isothermal" - if bndrytype == "exact": - boundary = PrescribedFluidBoundary(boundary_state_func=boundary_solution) - elif bndrytype == "adiabatic": - boundary = AdiabaticNoslipMovingBoundary() - elif bndrytype == "isothermal": - boundary = IsothermalNoSlipBoundary(wall_temperature=353) - - boundaries = { - BTAG_ALL: boundary - } - - if rst_filename: - current_t = restart_data["t"] - current_step = restart_data["step"] - current_cv = restart_data["cv"] - if logmgr: - from mirgecom.logging_quantities import logmgr_set_time - logmgr_set_time(logmgr, current_step, current_t) - else: - # Set the current state from time 0 - current_cv = acoustic_pulse(x_vec=nodes, cv=initializer(x_vec=nodes), - eos=eos) - - current_state = make_fluid_state(current_cv, gas_model) - - visualizer = make_visualizer(discr) - initname = initializer.__class__.__name__ - eosname = eos.__class__.__name__ - init_message = make_init_message(dim=dim, order=order, - nelements=local_nelements, - global_nelements=global_nelements, - dt=current_dt, t_final=t_final, nstatus=nstatus, - nviz=nviz, cfl=current_cfl, - constant_cfl=constant_cfl, initname=initname, - eosname=eosname, casename=casename) - if rank == 0: - logger.info(init_message) - - def my_write_status(component_errors): - if rank == 0: - logger.info( - "------- errors=" - + ", ".join("%.3g" % en for en in component_errors)) - - def my_write_viz(step, t, cv, dv): - # if dv is None: - # dv = eos.dependent_vars(state) - # if exact is None: - # exact = initializer(x_vec=nodes, eos=eos, time=t) - # if resid is None: - # resid = state - exact - viz_fields = [("cv", cv), - ("dv", dv)] - from mirgecom.simutil import write_visfile - write_visfile(discr, viz_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True, vis_timer=vis_timer) - - def my_write_restart(step, t, cv): - rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - if rst_fname != rst_filename: - rst_data = { - "local_mesh": local_mesh, - "cv": cv, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) - - def my_health_check(pressure): - health_error = False - from mirgecom.simutil import check_naninf_local # , check_range_local - if check_naninf_local(discr, "vol", pressure): - health_error = True - logger.info(f"{rank=}: Invalid pressure data found.") - - return health_error - - def my_pre_step(step, t, dt, state): - fluid_state = make_fluid_state(state, gas_model) - cv = fluid_state.cv - dv = fluid_state.dv - - try: - - if logmgr: - logmgr.tick_before() - - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - # do_status = check_step(step=step, interval=nstatus) - - if do_health: - # from mirgecom.simutil import compare_fluid_solutions - health_errors = global_reduce( - my_health_check(dv.pressure), op="lor") - if health_errors: - if rank == 0: - logger.info("Fluid solution failed health check.") - raise MyRuntimeError("Failed simulation health check.") - - if do_restart: - my_write_restart(step=step, t=t, cv=cv) - - if do_viz: - my_write_viz(step=step, t=t, cv=cv, dv=dv) - - # if do_status: - # my_write_status(component_errors) - - except MyRuntimeError: - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=cv) - my_write_restart(step=step, t=t, cv=cv, dv=dv) - raise - - dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, - constant_cfl) - return state, dt - - def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw - if logmgr: - set_dt(logmgr, dt) - set_sim_state(logmgr, dim, state, eos) - logmgr.tick_after() - return state, dt - - def my_rhs(t, state): - fluid_state = make_fluid_state(state, gas_model) - return ns_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) - - current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, t_final, constant_cfl) - - current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_pre_step, dt=current_dt, - post_step_callback=my_post_step, - state=current_state.cv, t=current_t, t_final=t_final) - - # Dump the final data - if rank == 0: - logger.info("Checkpointing final state ...") - - current_state = make_fluid_state(current_cv, gas_model) - final_dv = current_state.dv - my_write_viz(step=current_step, t=current_t, cv=current_state.cv, dv=final_dv) - my_write_restart(step=current_step, t=current_t, cv=current_state.cv) - - if logmgr: - logmgr.close() - elif use_profiling: - print(actx.tabulate_profiling_data()) - - finish_tol = 1e-16 - time_err = current_t - t_final - if np.abs(time_err) > finish_tol: - raise ValueError(f"Simulation did not finish at expected time {time_err=}.") - - -if __name__ == "__main__": - import argparse - casename = "pulse-ms" - parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") - parser.add_argument("--lazy", action="store_true", - help="switch to a lazy computation mode") - parser.add_argument("--profiling", action="store_true", - help="turn on detailed performance profiling") - parser.add_argument("--log", action="store_true", default=True, - help="turn on logging") - parser.add_argument("--leap", action="store_true", - help="use leap timestepper") - parser.add_argument("--restart_file", help="root name of restart file") - parser.add_argument("--casename", help="casename to use for i/o") - args = parser.parse_args() - lazy = args.lazy - if args.profiling: - if lazy: - raise ValueError("Can't use lazy and profiling together.") - - from grudge.array_context import get_reasonable_array_context_class - actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) - - logging.basicConfig(format="%(message)s", level=logging.INFO) - if args.casename: - casename = args.casename - rst_filename = None - if args.restart_file: - rst_filename = args.restart_file - - main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, - use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) - -# vim: foldmethod=marker diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index c8e84ec10..215698e74 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -36,8 +36,7 @@ from grudge.shortcuts import make_visualizer -from mirgecom.transport import SimpleTransport -from mirgecom.navierstokes import ns_operator +from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 249b25b71..00886c366 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -756,8 +756,9 @@ def temperature_bc(self, state_minus, **kwargs): class IsothermalWallBoundary(PrescribedFluidBoundary): r"""Isothermal viscous wall boundary. - This class implements an isothermal wall by: - Pescribed flux, *not* with Riemann solver + + This class implements an isothermal wall consistent with the prescription + by [Mengaldo_2014]_. """ def __init__(self, wall_temperature=300): @@ -780,6 +781,7 @@ def isothermal_wall_state(self, discr, btag, gas_model, state_minus, **kwargs): internal_energy_plus = gas_model.eos.get_internal_energy( temperature=temperature_wall, species_mass_fractions=mass_frac_plus) + # Velocity is pinned to 0 here, no kinetic energy total_energy_plus = state_minus.mass_density*internal_energy_plus cv_plus = make_conserved( @@ -815,13 +817,16 @@ def temperature_bc(self, state_minus, **kwargs): return 0.*state_minus.temperature + self._wall_temp def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): + """Return grad(CV) to be used in the boundary calculation of viscous flux.""" from mirgecom.fluid import species_mass_fraction_gradient - grad_y_plus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) - grad_y_plus = grad_y_plus - np.outer(grad_y_plus@normal, normal) + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) + grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) grad_species_mass_plus = 0.*grad_y_plus + for i in range(state_minus.nspecies): grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + return make_conserved(grad_cv_minus.dim, mass=grad_cv_minus.mass, energy=grad_cv_minus.energy, @@ -832,6 +837,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, grad_cv_minus, grad_t_minus, numerical_flux_func=viscous_flux_central, **kwargs): + """Return the boundary flux for the divergence of the viscous flux.""" from mirgecom.viscous import viscous_flux actx = state_minus.array_context normal = thaw(discr.normal(btag), actx) @@ -848,6 +854,8 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, state_minus=state_minus, grad_cv_minus=grad_cv_minus, grad_t_minus=grad_t_minus) + # Note that [Mengaldo_2014]_ uses F_v(Q_bc, dQ_bc) here and + # *not* the numerical viscous flux as advised by [Bassi_1997]_. f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, grad_t=grad_t_plus) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 6b299ea11..6433fcbac 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -10,14 +10,19 @@ .. autoclass:: MulticomponentLump .. autoclass:: Uniform .. autoclass:: AcousticPulse -.. autofunction:: make_pulse .. autoclass:: MixtureInitializer .. autoclass:: PlanarDiscontinuity .. autoclass:: PlanarPoiseuille +.. autoclass:: MulticomponentTrig State Initializers ^^^^^^^^^^^^^^^^^^ .. autofunction:: initialize_fluid_state + +Initialization Utilities +^^^^^^^^^^^^^^^^^^^^^^^^ +.. autofunction:: make_pulse + """ __copyright__ = """ @@ -785,16 +790,12 @@ class MulticomponentTrig: user-specified vector of amplitudes for each species, *spec_amplitudes*, and $c_\alpha$ is the user-specified origin for each species, *spec_centers*. - A call to this object after creation/init creates the lump solution at a given - time (*t*) relative to the configured origin (*center*) and background flow - velocity (*velocity*). - - This object also supplies the exact expected RHS terms from the analytic - expression via :meth:`exact_rhs`. + A call to this object after creation/init creates the trig solution at a given + time (*t*) relative to the configured origin (*center*), wave_vector k, and + background flow velocity (*velocity*). .. automethod:: __init__ .. automethod:: __call__ - .. automethod:: exact_rhs """ def __init__( @@ -835,7 +836,7 @@ def __init__( spec_centers = make_obj_array([np.zeros(shape=dim,) for i in range(nspecies)]) if spec_omegas is None: - spec_omegas = 1./2./np.pi*np.ones(shaep=(nspecies,)) + spec_omegas = 2.*np.pi*np.ones(shape=(nspecies,)) if spec_amplitudes is None: spec_amplitudes = np.ones(shape=(nspecies,)) @@ -912,46 +913,6 @@ def __call__(self, x_vec, *, eos=None, time=0, **kwargs): return make_conserved(dim=self._dim, mass=mass, energy=energy, momentum=mom, species_mass=spec_mass) - def exact_rhs(self, discr, cv, time=0.0): - """ - Create a RHS for multi-component lump soln at time *t*, locations *x_vec*. - - The RHS at time *t* is created by advecting the species mass lump at the - user-specified constant, uniform velocity (``MulticomponentLump._velocity``). - - Parameters - ---------- - q - State array which expects at least the canonical conserved quantities - (mass, energy, momentum) for the fluid at each point. - time: float - Time at which RHS is desired - """ - t = time - actx = cv.array_context - nodes = thaw(actx, discr.nodes()) - loc_update = t * self._velocity - - mass = 0 * nodes[0] + self._rho0 - mom = self._velocity * mass - - v = mom / mass - massrhs = 0 * mass - energyrhs = 0 * mass - momrhs = 0 * mom - - # process the species components independently - specrhs = np.empty((self._nspecies,), dtype=object) - for i in range(self._nspecies): - lump_loc = self._spec_centers[i] + loc_update - rel_pos = nodes - lump_loc - r2 = np.dot(rel_pos, rel_pos) - expterm = self._spec_amplitudes[i] * actx.np.exp(-r2) - specrhs[i] = 2 * self._rho0 * expterm * np.dot(rel_pos, v) - - return make_conserved(dim=self._dim, mass=massrhs, energy=energyrhs, - momentum=momrhs, species_mass=specrhs) - class AcousticPulse: r"""Solution initializer for N-dimensional Gaussian acoustic pulse. diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index fc671b8a5..9351049a3 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -22,6 +22,12 @@ -------------- .. autofunction:: generate_and_distribute_mesh + +Simulation support utilities +---------------------------- + +.. autofunction:: limit_species_mass_fractions +.. autofunction:: species_fraction_anomaly_relaxation """ __copyright__ = """ @@ -437,25 +443,26 @@ def limit_species_mass_fractions(cv): one = zero + 1. for i in range(cv.nspecies): - new_y[i] = actx.np.where(actx.np.less(new_y[i], 1e-14), + new_y[i] = actx.np.where(actx.np.less(new_y[i], 1e-14), zero, new_y[i]) - new_y[i] = actx.np.where(actx.np.greater(new_y[i], 1.), + new_y[i] = actx.np.where(actx.np.greater(new_y[i], 1.), one, new_y[i]) new_rho_y = cv.mass*new_y for i in range(cv.nspecies): - new_rho_y[i] = actx.np.where(actx.np.less(new_rho_y[i], 1e-14), + new_rho_y[i] = actx.np.where(actx.np.less(new_rho_y[i], 1e-16), zero, new_rho_y[i]) new_rho_y[i] = actx.np.where(actx.np.greater(new_rho_y[i], 1.), one, new_rho_y[i]) - + return make_conserved(dim=cv.dim, mass=cv.mass, momentum=cv.momentum, energy=cv.energy, species_mass=new_rho_y) return cv + def species_fraction_anomaly_relaxation(cv, alpha=1.): - """Pull negative species fractions back towards 0.""" + """Pull negative species fractions back towards 0 with a RHS contribution.""" from mirgecom.fluid import make_conserved if cv.nspecies > 0: y = cv.species_mass_fractions diff --git a/test/test_operators.py b/test/test_operators.py index 351cc3557..47e373a6c 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -156,16 +156,16 @@ def sym_grad(dim, expr): return sym.grad(dim, expr) -# @pytest.mark.parametrize("sym_test_func_factory", -# [partial(_coord_test_func, order=0), -# partial(_coord_test_func, order=1), -# lambda dim: 2*_coord_test_func(dim, order=1), -# partial(_coord_test_func, order=2), -# _trig_test_func, _cv_test_func]) @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [1, 2, 3]) -@pytest.mark.parametrize("sym_test_func_factory", - [_cv_test_func]) +@pytest.mark.parametrize("sym_test_func_factory", [ + partial(_coord_test_func, order=0), + partial(_coord_test_func, order=1), + lambda dim: 2*_coord_test_func(dim, order=1), + partial(_coord_test_func, order=2), + _trig_test_func, + _cv_test_func +]) def test_grad_operator(actx_factory, dim, order, sym_test_func_factory): """Test the gradient operator for sanity. @@ -178,7 +178,7 @@ def test_grad_operator(actx_factory, dim, order, sym_test_func_factory): - :class:`~mirgecom.fluid.ConservedVars` composed of funcs from above """ actx = actx_factory() - visualize = True + sym_test_func = sym_test_func_factory(dim) tol = 1e-10 if dim < 3 else 1e-9 @@ -229,8 +229,8 @@ def sym_eval(expr, x_vec): if err_scale <= 1e-16: err_scale = 1 - # print(f"{test_data=}") - # print(f"{exact_grad=}") + print(f"{test_data=}") + print(f"{exact_grad=}") test_data_int_tpair = interior_trace_pair(discr, test_data) boundaries = [BTAG_ALL] @@ -244,35 +244,13 @@ def sym_eval(expr, x_vec): test_grad = grad_operator(discr, dd_vol, dd_faces, test_data, test_data_flux_bnd) - # print(f"{test_grad=}") + print(f"{test_grad=}") grad_err = \ max(flatten(componentwise_norms(discr, test_grad - exact_grad, np.inf), actx)) / err_scale - if visualize and dim == 3 and order == 1: - from grudge.shortcuts import make_visualizer - vis = make_visualizer(discr, discr.order+3) - resid = exact_grad - test_grad - vis.write_vtk_file("grad_test_{dim}_{order}_{n}.vtu".format( - dim=dim, order=order, n=nfac), [ - ("cv", test_data), - ("dmass", test_grad.mass), - ("denergy", test_grad.energy), - ("dmom_x", test_grad.momentum[0]), - ("dmom_y", test_grad.momentum[1]), - ("dmass_exact", exact_grad.mass), - ("denergy_exact", exact_grad.energy), - ("dmom_x_exact", exact_grad.momentum[0]), - ("dmom_y_exact", exact_grad.momentum[1]), - ("resid_mass", resid.mass), - ("resid_energy", resid.energy), - ("resid_mom_x", resid.momentum[0]), - ("resid_mom_y", resid.momentum[1])]) - eoc.add_data_point(actx.to_numpy(h_max), actx.to_numpy(grad_err)) - print(f"{order=}\n{dim=}\n{sym_test_func_factory=}") - print(f"{eoc.pretty_print()}") assert ( eoc.order_estimate() >= order - 0.5 or eoc.max_error() < tol From 15bd356822f27b6f5fbe27b3efb311b6c413490e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 31 Mar 2022 13:51:19 -0500 Subject: [PATCH 556/873] Do not run a billion steps in CI --- examples/scalar-advdiff-mpi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 88f53d184..cd87e69f0 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -113,7 +113,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.5 + t_final = 0.1 current_cfl = 0.1 current_dt = .001 current_t = 0 @@ -126,8 +126,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, nhealth = 1 dim = 2 - nel_1d = 16 - order = 2 + nel_1d = 4 + order = 1 rst_path = "restart_data/" rst_pattern = ( From 39315cefc84025e6f8c07415b961d09362dea929 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 1 Apr 2022 08:24:16 -0500 Subject: [PATCH 557/873] Add optional dissipation terms to numerical flux funcs, Mengaldo-compatible adiabatic noslip wall --- mirgecom/boundary.py | 146 +++++++++++++++++++++++++++++++++++++++++++ mirgecom/flux.py | 49 +++++++++++++-- mirgecom/viscous.py | 13 +++- 3 files changed, 201 insertions(+), 7 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 00886c366..3baf39b7a 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -16,6 +16,13 @@ .. autoclass:: FarfieldBoundary .. autoclass:: InflowBoundary .. autoclass:: OutflowBoundary +.. autoclass:: IsothermalWallBoundary +.. autoclass:: AdiabaticNoslipWallBoundary + +Auxilliary Utilities +^^^^^^^^^^^^^^^^^^^^ + +.. autofunction:: grad_cv_wall_bc """ __copyright__ = """ @@ -754,6 +761,37 @@ def temperature_bc(self, state_minus, **kwargs): return -state_minus.temperature + 2.0*self._free_stream_temperature +def grad_cv_wall_bc(self, state_minus, grad_cv_minus, normal, **kwargs): + """Return grad(CV) modified for no-penetration of solid wall.""" + from mirgecom.fluid import ( + velocity_gradient, + species_mass_fraction_gradient + ) + + # Velocity part + grad_v_minus = velocity_gradient(state_minus, grad_cv_minus) + grad_v_plus = grad_v_minus - np.outer(grad_v_minus@normal, normal) + grad_mom_plus = 0*grad_v_plus + for i in range(state_minus.dim): + grad_mom_plus[i] = (state_minus.mass_density*grad_v_plus[i] + + state_minus.velocity[i]*grad_cv_minus.mass) + + # species mass fraction part + grad_species_mass_plus = 0.*grad_cv_minus.species_mass + if state_minus.nspecies: + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) + grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) + + for i in range(state_minus.nspecies): + grad_species_mass_plus[i] = \ + (state_minus.mass_density*grad_y_plus[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + + return make_conserved(state_minus.dim, mass=grad_cv_minus.mass, + energy=grad_cv_minus.energy, momentum=grad_mom_plus, + species_mass=grad_species_mass_plus) + + class IsothermalWallBoundary(PrescribedFluidBoundary): r"""Isothermal viscous wall boundary. @@ -862,3 +900,111 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, return self._boundary_quantity( discr, btag, quantity=f_ext@normal) + + +class AdiabaticNoslipWallBoundary(PrescribedFluidBoundary): + r"""Adiabatic viscous wall boundary. + + This class implements an adiabatic wall consistent with the prescription + by [Mengaldo_2014]_. + """ + + def __init__(self): + """Initialize the boundary condition object.""" + PrescribedFluidBoundary.__init__( + self, boundary_state_func=self.adiabatic_wall_state_for_advection, + inviscid_flux_func=self.inviscid_wall_flux, + viscous_flux_func=self.viscous_wall_flux, + boundary_temperature_func=self.temperature_bc, + boundary_gradient_cv_func=self.grad_cv_bc + ) + + def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, + state_minus, **kwargs): + """Return state with 0 velocities and energy(Twall).""" + mom_plus = -state_minus.momentum_density + cv_plus = make_conserved( + state_minus.dim, mass=state_minus.mass_density, + energy=state_minus.energy_density, momentum=mom_plus, + species_mass=state_minus.species_mass_density + ) + return make_fluid_state(cv=cv_plus, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, + state_minus, **kwargs): + """Return state with 0 velocities and energy(Twall).""" + mom_plus = 0*state_minus.momentum_density + cv_plus = make_conserved( + state_minus.dim, mass=state_minus.mass_density, + energy=state_minus.energy_density, momentum=mom_plus, + species_mass=state_minus.species_mass_density + ) + return make_fluid_state(cv=cv_plus, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, + numerical_flux_func=inviscid_flux_rusanov, **kwargs): + """Return Riemann flux using state with mom opposite of interior state.""" + wall_state = self.adiabatic_wall_state_for_advection( + discr, btag, gas_model, state_minus) + state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) + + from mirgecom.inviscid import inviscid_facial_flux + return self._boundary_quantity( + discr, btag, + inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=numerical_flux_func, + local=True), + **kwargs) + + def temperature_bc(self, state_minus, **kwargs): + """Get temperature value used in grad(T).""" + return state_minus.temperature + + def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): + """Return grad(CV) to be used in the boundary calculation of viscous flux.""" + from mirgecom.fluid import species_mass_fraction_gradient + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) + grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) + grad_species_mass_plus = 0.*grad_y_plus + + for i in range(state_minus.nspecies): + grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + + return make_conserved(grad_cv_minus.dim, + mass=grad_cv_minus.mass, + energy=grad_cv_minus.energy, + momentum=grad_cv_minus.momentum, + species_mass=grad_species_mass_plus) + + def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): + """Return grad(temperature) to be used in viscous flux at wall.""" + return grad_t_minus - np.outer(grad_t_minus@normal, normal) + + def viscous_wall_flux(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, + numerical_flux_func=viscous_flux_central, + **kwargs): + """Return the boundary flux for the divergence of the viscous flux.""" + from mirgecom.viscous import viscous_flux + actx = state_minus.array_context + normal = thaw(discr.normal(btag), actx) + + state_plus = self.adiabatic_wall_state_for_diffusion( + discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus) + + grad_cv_plus = self.grad_cv_bc(state_minus=state_minus, + grad_cv_minus=grad_cv_minus, + normal=normal, **kwargs) + grad_t_plus = self.grad_temperature_bc(grad_t_minus, normal) + + # Note that [Mengaldo_2014]_ uses F_v(Q_bc, dQ_bc) here and + # *not* the numerical viscous flux as advised by [Bassi_1997]_. + f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, + grad_t=grad_t_plus) + + return self._boundary_quantity( + discr, btag, + quantity=f_ext@normal) diff --git a/mirgecom/flux.py b/mirgecom/flux.py index 94d65a988..99d804442 100644 --- a/mirgecom/flux.py +++ b/mirgecom/flux.py @@ -12,6 +12,7 @@ .. autofunction:: gradient_flux_central .. autofunction:: divergence_flux_central +.. autofunction:: gradient_flux_dissipative """ __copyright__ = """ @@ -173,7 +174,7 @@ def num_flux_hll(f_minus, f_plus, q_minus, q_plus, s_minus, s_plus): return f -def gradient_flux_central(u_tpair, normal): +def gradient_flux_central(u_tpair, normal, beta=0): r"""Compute a central flux for the gradient operator. The central gradient flux, $\mathbf{h}$, of a scalar quantity $u$ is calculated @@ -208,10 +209,49 @@ def gradient_flux_central(u_tpair, normal): scalar component. """ from arraycontext import outer - return outer(u_tpair.avg, normal) + return outer(u_tpair.avg + beta*u_tpair.diff/2, normal) -def divergence_flux_central(trace_pair, normal): +def gradient_flux_dissipative(u_tpair, normal, beta): + r"""Compute a central flux for the gradient operator. + + The dissipative central gradient flux, $\mathbf{h}$, of a scalar quantity + $u$ is calculated as: + + .. math:: + + \mathbf{h}({u}^-, {u}^+; \mathbf{n}) = \frac{1}{2} + \left(({u}^{+}+{u}^{-}) - \beta(u^{+} - u^{-})\right)\mathbf{\hat{n}} + + where ${u}^-, {u}^+$, are the scalar function values on the interior + and exterior of the face on which the central flux is to be calculated, and + $\mathbf{\hat{n}}$ is the *normal* vector. Numerical dissipation is added + by the solution penalized by a factor $\beta$. + + *u_tpair* is the :class:`~grudge.trace_pair.TracePair` representing the scalar + quantities ${u}^-, {u}^+$. *u_tpair* may also represent a vector-quantity + :class:`~grudge.trace_pair.TracePair`, and in this case the central scalar flux + is computed on each component of the vector quantity as an independent scalar. + + Parameters + ---------- + u_tpair: :class:`~grudge.trace_pair.TracePair` + Trace pair for the face upon which flux calculation is to be performed + normal: numpy.ndarray + object array of :class:`~meshmode.dof_array.DOFArray` with outward-pointing + normals + + Returns + ------- + numpy.ndarray + object array of :class:`~meshmode.dof_array.DOFArray` with the flux for each + scalar component. + """ + from arraycontext import outer + return outer(u_tpair.avg + .5*beta*u_tpair.diff, normal) + + +def divergence_flux_central(trace_pair, normal, jump_term=0, beta=0): r"""Compute a central flux for the divergence operator. The central divergence flux, $h$, is calculated as: @@ -239,4 +279,5 @@ def divergence_flux_central(trace_pair, normal): object array of :class:`~meshmode.dof_array.DOFArray` with the flux for each scalar component. """ - return trace_pair.avg@normal + # return (trace_pair.avg + beta*trace_pair.diff + jump_term)@normal + return (trace_pair.avg + beta*trace_pair.diff/2 + jump_term)@normal diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 32ccb3bc5..74d425ae0 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -277,7 +277,8 @@ def viscous_flux(state, grad_cv, grad_t): momentum=tau, species_mass=-j) -def viscous_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, **kwargs): +def viscous_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, + beta=0., gamma=0, **kwargs): r"""Return a central viscous facial flux for the divergence operator. The central flux is defined as: @@ -285,7 +286,8 @@ def viscous_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, **kwargs) .. math:: f_{\text{central}} = \frac{1}{2}\left(\mathbf{f}_v^+ - + \mathbf{f}_v^-\right)\cdot\hat{\mathbf{n}}, + + \mathbf{f}_v^-\right)\cdot\hat{\mathbf{n}} + + \frac{\beta}{2}\left(\mathbf{f}_v^+ - \mathbf{f}_v^-\right), with viscous fluxes ($\mathbf{f}_v$), and the outward pointing face normal ($\hat{\mathbf{n}}$). @@ -325,8 +327,13 @@ def viscous_flux_central(discr, state_pair, grad_cv_pair, grad_t_pair, **kwargs) f_ext = viscous_flux(state_pair.ext, grad_cv_pair.ext, grad_t_pair.ext) f_pair = TracePair(state_pair.dd, interior=f_int, exterior=f_ext) + q_pair = TracePair(state_pair.dd, interior=state_pair.int.cv, + exterior=state_pair.ext.cv) + from arraycontext import outer + jump_term = -gamma*outer(q_pair.diff, normal)/2 - return divergence_flux_central(f_pair, normal) + return divergence_flux_central(trace_pair=f_pair, normal=normal, + jump_term=jump_term, beta=beta) def viscous_facial_flux(discr, gas_model, state_pair, grad_cv_pair, grad_t_pair, From 63899f4e1d916b6caae8ff169654afa0d706940a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 1 Apr 2022 08:36:14 -0500 Subject: [PATCH 558/873] Add dissipative fluxes to nsmix example. --- examples/nsmix-mpi.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index effa76a7b..b9b47c03d 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -518,12 +518,20 @@ def my_post_step(step, t, dt, state): return make_obj_array([cv, fluid_state.temperature]), dt + flux_beta = .25 + from mirgecom.viscous import viscous_flux_central + from mirgecom.flux import gradient_flux_central + grad_num_flux_func = partial(gradient_flux_central, beta=flux_beta) + viscous_num_flux_func = partial(viscous_flux_central, beta=-flux_beta) + def my_rhs(t, state): cv, tseed = state fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) ns_rhs = ns_operator(discr, state=fluid_state, time=t, - boundaries=visc_bnds, gas_model=gas_model) + boundaries=visc_bnds, gas_model=gas_model, + gradient_numerical_flux_func=grad_num_flux_func, + viscous_numerical_flux_func=viscous_num_flux_func) cv_rhs = ns_rhs + pyro_eos.get_species_source_terms(cv, fluid_state.temperature) return make_obj_array([cv_rhs, 0*tseed]) From bb494152685761a5806afc6f2e1a171e9cb3fc53 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 19:39:56 -0500 Subject: [PATCH 559/873] use arraycontext thaw --- mirgecom/diffusion.py | 6 +++--- test/test_diffusion.py | 17 +++++++++-------- test/test_lazy.py | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 58ed62667..9a84bb85d 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -36,8 +36,8 @@ import numpy as np import numpy.linalg as la # noqa from pytools.obj_array import make_obj_array, obj_array_vectorize_n_args +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from meshmode.dof_array import thaw from grudge.dof_desc import DOFDesc, as_dofdesc from grudge.eager import interior_trace_pair, cross_rank_trace_pairs from grudge.trace_pair import TracePair @@ -51,7 +51,7 @@ def gradient_flux(discr, quad_tag, u_tpair): dd_quad = dd.with_discr_tag(quad_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") - normal_quad = thaw(actx, discr.normal(dd_quad)) + normal_quad = thaw(discr.normal(dd_quad), actx) def to_quad(a): return discr.project(dd, dd_quad, a) @@ -71,7 +71,7 @@ def diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair): dd_quad = dd.with_discr_tag(quad_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") - normal_quad = thaw(actx, discr.normal(dd_quad)) + normal_quad = thaw(discr.normal(dd_quad), actx) def to_quad(a): return discr.project(dd, dd_quad, a) diff --git a/test/test_diffusion.py b/test/test_diffusion.py index f4b65340a..32981e4e4 100644 --- a/test/test_diffusion.py +++ b/test/test_diffusion.py @@ -26,6 +26,7 @@ import pyopencl.clmath as clmath # noqa from pytools.obj_array import make_obj_array import pymbolic as pmbl +from arraycontext import thaw from mirgecom.symbolic import ( diff as sym_diff, grad as sym_grad, @@ -36,7 +37,7 @@ diffusion_operator, DirichletDiffusionBoundary, NeumannDiffusionBoundary) -from meshmode.dof_array import thaw, DOFArray +from meshmode.dof_array import DOFArray from grudge.dof_desc import DTAG_BOUNDARY, DISCR_TAG_BASE, DISCR_TAG_QUAD from meshmode.array_context import ( # noqa @@ -166,7 +167,7 @@ def get_alpha(self, x, t, u): return self._alpha def get_boundaries(self, discr, actx, t): - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) sym_exact_u = self.get_solution( pmbl.make_sym_vector("x", self.dim), pmbl.var("t")) @@ -180,7 +181,7 @@ def get_boundaries(self, discr, actx, t): lower_btag = DTAG_BOUNDARY("-"+str(i)) upper_btag = DTAG_BOUNDARY("+"+str(i)) upper_grad_u = discr.project("vol", upper_btag, exact_grad_u) - normal = thaw(actx, discr.normal(upper_btag)) + normal = thaw(discr.normal(upper_btag), actx) upper_grad_u_dot_n = np.dot(upper_grad_u, normal) boundaries[lower_btag] = NeumannDiffusionBoundary(0.) boundaries[upper_btag] = NeumannDiffusionBoundary(upper_grad_u_dot_n) @@ -336,7 +337,7 @@ def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, } ) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) def get_rhs(t, u): alpha = p.get_alpha(nodes, t, u) @@ -397,7 +398,7 @@ def test_diffusion_discontinuous_alpha(actx_factory, order, visualize=False): from grudge.eager import EagerDGDiscretization discr = EagerDGDiscretization(actx, mesh, order=order) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) # Set up a 1D heat equation interface problem, apply the diffusion operator to # the exact steady state solution, and check that it's zero @@ -518,7 +519,7 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, from grudge.eager import EagerDGDiscretization discr_mirgecom = EagerDGDiscretization(actx, mesh, order=order) - nodes_mirgecom = thaw(actx, discr_mirgecom.nodes()) + nodes_mirgecom = thaw(discr_mirgecom.nodes(), actx) u_mirgecom = p.get_solution(nodes_mirgecom, t) @@ -527,7 +528,7 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, boundaries=p.get_boundaries(discr_mirgecom, actx, t), u=u_mirgecom) discr_ndg = ndgctx.get_discr(actx) - nodes_ndg = thaw(actx, discr_ndg.nodes()) + nodes_ndg = thaw(discr_ndg.nodes(), actx) u_ndg = p.get_solution(nodes_ndg, t) @@ -590,7 +591,7 @@ def get_u2(x, t): from grudge.eager import EagerDGDiscretization discr = EagerDGDiscretization(actx, mesh, order=4) - nodes = thaw(actx, discr.nodes()) + nodes = thaw(discr.nodes(), actx) t = 1.23456789 diff --git a/test/test_lazy.py b/test/test_lazy.py index 3afeaa8b8..bcdc98223 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -29,11 +29,11 @@ import pyopencl.tools as cl_tools import pyopencl.array as cla # noqa import pyopencl.clmath as clmath # noqa +from arraycontext import freeze, thaw from meshmode.array_context import ( # noqa PyOpenCLArrayContext, PytatoPyOpenCLArrayContext ) -from arraycontext.container.traversal import freeze, thaw from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context From 1f92e3f7968e7840b3e6aabd463c8134b703ebaa Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 19:59:44 -0500 Subject: [PATCH 560/873] use interior_trace_pairs in diffusion_operator --- mirgecom/diffusion.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 9a84bb85d..a629b30a0 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -39,8 +39,7 @@ from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.dof_desc import DOFDesc, as_dofdesc -from grudge.eager import interior_trace_pair, cross_rank_trace_pairs -from grudge.trace_pair import TracePair +from grudge.trace_pair import TracePair, interior_trace_pairs def gradient_flux(discr, quad_tag, u_tpair): @@ -273,14 +272,13 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals - # noqa: W504 discr.face_mass( dd_allfaces_quad, - gradient_flux(discr, quad_tag, interior_trace_pair(discr, u)) + sum( + gradient_flux(discr, quad_tag, u_tpair) + for u_tpair in interior_trace_pairs( + discr, u, comm_tag=_DiffusionStateTag)) + sum( bdry.get_gradient_flux(discr, quad_tag, as_dofdesc(btag), alpha, u) for btag, bdry in boundaries.items()) - + sum( - gradient_flux(discr, quad_tag, u_tpair) - for u_tpair in cross_rank_trace_pairs(discr, u, - tag=_DiffusionStateTag)) ) ) @@ -292,16 +290,14 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals - # noqa: W504 discr.face_mass( dd_allfaces_quad, - diffusion_flux(discr, quad_tag, interior_trace_pair(discr, alpha), - interior_trace_pair(discr, grad_u)) + sum( + diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair) + for alpha_tpair, grad_u_tpair in zip( + interior_trace_pairs(discr, alpha, comm_tag=_DiffusionAlphaTag), + interior_trace_pairs(discr, grad_u, comm_tag=_DiffusionGradTag))) + sum( bdry.get_diffusion_flux(discr, quad_tag, as_dofdesc(btag), alpha, grad_u) for btag, bdry in boundaries.items()) - + sum( - diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair) - for alpha_tpair, grad_u_tpair in zip( - cross_rank_trace_pairs(discr, alpha, tag=_DiffusionAlphaTag), - cross_rank_trace_pairs(discr, grad_u, tag=_DiffusionGradTag))) ) ) From 1e4b18ea8d0d240a5cce01a24b93743b29051305 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 20:12:38 -0500 Subject: [PATCH 561/873] make quadrature tag for diffusion optional like euler/NS --- examples/heat-source-mpi.py | 6 +- mirgecom/diffusion.py | 111 ++++++++++++++++++++++++++---------- test/test_diffusion.py | 27 ++++----- test/test_lazy.py | 9 ++- 4 files changed, 102 insertions(+), 51 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 5c92bfbd6..e7e02b4a2 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -31,7 +31,7 @@ from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer -from grudge.dof_desc import DISCR_TAG_BASE, DTAG_BOUNDARY +from grudge.dof_desc import DTAG_BOUNDARY from mirgecom.integrators import rk4_step from mirgecom.diffusion import ( diffusion_operator, @@ -153,9 +153,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, def rhs(t, u): return ( - diffusion_operator( - discr, quad_tag=DISCR_TAG_BASE, - alpha=1, boundaries=boundaries, u=u) + diffusion_operator(discr, alpha=1, boundaries=boundaries, u=u) + actx.np.exp(-np.dot(nodes, nodes)/source_width**2)) compiled_rhs = actx.compile(rhs) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index a629b30a0..6517e4370 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -38,16 +38,16 @@ from pytools.obj_array import make_obj_array, obj_array_vectorize_n_args from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.dof_desc import DOFDesc, as_dofdesc +from grudge.dof_desc import DOFDesc, as_dofdesc, DISCR_TAG_BASE from grudge.trace_pair import TracePair, interior_trace_pairs -def gradient_flux(discr, quad_tag, u_tpair): +def gradient_flux(discr, u_tpair, *, quadrature_tag=DISCR_TAG_BASE): r"""Compute the numerical flux for $\nabla u$.""" actx = u_tpair.int.array_context dd = u_tpair.dd - dd_quad = dd.with_discr_tag(quad_tag) + dd_quad = dd.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") normal_quad = thaw(discr.normal(dd_quad), actx) @@ -62,12 +62,13 @@ def flux(u, normal): to_quad(u_tpair.avg), normal_quad)) -def diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair): +def diffusion_flux( + discr, alpha_tpair, grad_u_tpair, *, quadrature_tag=DISCR_TAG_BASE): r"""Compute the numerical flux for $\nabla \cdot (\alpha \nabla u)$.""" actx = grad_u_tpair.int[0].array_context dd = grad_u_tpair.dd - dd_quad = dd.with_discr_tag(quad_tag) + dd_quad = dd.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") normal_quad = thaw(discr.normal(dd_quad), actx) @@ -97,12 +98,14 @@ class DiffusionBoundary(metaclass=abc.ABCMeta): """ @abc.abstractmethod - def get_gradient_flux(self, discr, quad_tag, dd, alpha, u): + def get_gradient_flux( + self, discr, dd, alpha, u, *, quadrature_tag=DISCR_TAG_BASE): """Compute the flux for grad(u) on the boundary corresponding to *dd*.""" raise NotImplementedError @abc.abstractmethod - def get_diffusion_flux(self, discr, quad_tag, dd, alpha, grad_u): + def get_diffusion_flux( + self, discr, dd, alpha, grad_u, *, quadrature_tag=DISCR_TAG_BASE): """Compute the flux for diff(u) on the boundary corresponding to *dd*.""" raise NotImplementedError @@ -135,17 +138,22 @@ def __init__(self, value): """ self.value = value - def get_gradient_flux(self, discr, quad_tag, dd, alpha, u): # noqa: D102 + def get_gradient_flux( + self, discr, dd, alpha, u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=2*self.value-u_int) - return gradient_flux(discr, quad_tag, u_tpair) + return gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) - def get_diffusion_flux(self, discr, quad_tag, dd, alpha, grad_u): # noqa: D102 + def get_diffusion_flux( + self, discr, dd, alpha, grad_u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 alpha_int = discr.project("vol", dd, alpha) alpha_tpair = TracePair(dd, interior=alpha_int, exterior=alpha_int) grad_u_int = discr.project("vol", dd, grad_u) grad_u_tpair = TracePair(dd, interior=grad_u_int, exterior=grad_u_int) - return diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair) + return diffusion_flux( + discr, alpha_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) class NeumannDiffusionBoundary(DiffusionBoundary): @@ -184,13 +192,17 @@ def __init__(self, value): """ self.value = value - def get_gradient_flux(self, discr, quad_tag, dd, alpha, u): # noqa: D102 + def get_gradient_flux( + self, discr, dd, alpha, u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=u_int) - return gradient_flux(discr, quad_tag, u_tpair) + return gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) - def get_diffusion_flux(self, discr, quad_tag, dd, alpha, grad_u): # noqa: D102 - dd_quad = dd.with_discr_tag(quad_tag) + def get_diffusion_flux( + self, discr, dd, alpha, grad_u, *, + quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + dd_quad = dd.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") # Compute the flux directly instead of constructing an external grad_u value # (and the associated TracePair); this approach is simpler in the @@ -215,7 +227,40 @@ class _DiffusionGradTag: pass -def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=False): +# Yuck +def _normalize_arguments(*args, **kwargs): + if len(args) >= 2 and not isinstance(args[1], (dict, list)): + # Old deprecated positional argument list + pos_arg_names = ["alpha", "quad_tag", "boundaries", "u"] + else: + pos_arg_names = ["alpha", "boundaries", "u"] + + arg_dict = { + arg_name: arg + for arg_name, arg in zip(pos_arg_names[:len(args)], args)} + arg_dict.update(kwargs) + + alpha = arg_dict["alpha"] + boundaries = arg_dict["boundaries"] + u = arg_dict["u"] + + from warnings import warn + + if "quad_tag" in arg_dict: + warn( + "quad_tag argument is deprecated and will disappear in Q3 2022. " + "Use quadrature_tag instead.", DeprecationWarning, stacklevel=3) + quadrature_tag = arg_dict["quad_tag"] + elif "quadrature_tag" in arg_dict: + quadrature_tag = arg_dict["quadrature_tag"] + else: + # quadrature_tag is optional + quadrature_tag = DISCR_TAG_BASE + + return alpha, boundaries, u, quadrature_tag + + +def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): r""" Compute the diffusion operator. @@ -229,9 +274,6 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals ---------- discr: grudge.eager.EagerDGDiscretization the discretization to use - quad_tag: - quadrature tag indicating which discretization in *discr* to use for - overintegration alpha: numbers.Number or meshmode.dof_array.DOFArray the diffusivity value(s) boundaries: @@ -242,6 +284,9 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals applied return_grad_u: bool an optional flag indicating whether $\nabla u$ should also be returned + quadrature_tag: + quadrature tag indicating which discretization in *discr* to use for + overintegration Returns ------- @@ -250,22 +295,26 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals grad_u: numpy.ndarray the gradient of *u*; only returned if *return_grad_u* is True """ + alpha, boundaries, u, quadrature_tag = _normalize_arguments(*args, **kwargs) + if isinstance(u, np.ndarray): if not isinstance(boundaries, list): raise TypeError("boundaries must be a list if u is an object array") if len(boundaries) != len(u): raise TypeError("boundaries must be the same length as u") - return obj_array_vectorize_n_args(lambda boundaries_i, u_i: - diffusion_operator(discr, quad_tag, alpha, boundaries_i, u_i, - return_grad_u=return_grad_u), make_obj_array(boundaries), u) + return obj_array_vectorize_n_args( + lambda boundaries_i, u_i: diffusion_operator( + discr, alpha, boundaries_i, u_i, return_grad_u=return_grad_u, + quadrature_tag=quadrature_tag), + make_obj_array(boundaries), u) for btag, bdry in boundaries.items(): if not isinstance(bdry, DiffusionBoundary): raise TypeError(f"Unrecognized boundary type for tag {btag}. " "Must be an instance of DiffusionBoundary.") - dd_quad = DOFDesc("vol", quad_tag) - dd_allfaces_quad = DOFDesc("all_faces", quad_tag) + dd_quad = DOFDesc("vol", quadrature_tag) + dd_allfaces_quad = DOFDesc("all_faces", quadrature_tag) grad_u = discr.inverse_mass( discr.weak_grad(-u) @@ -273,11 +322,12 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals discr.face_mass( dd_allfaces_quad, sum( - gradient_flux(discr, quad_tag, u_tpair) + gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) for u_tpair in interior_trace_pairs( discr, u, comm_tag=_DiffusionStateTag)) + sum( - bdry.get_gradient_flux(discr, quad_tag, as_dofdesc(btag), alpha, u) + bdry.get_gradient_flux( + discr, as_dofdesc(btag), alpha, u, quadrature_tag=quadrature_tag) for btag, bdry in boundaries.items()) ) ) @@ -291,13 +341,16 @@ def diffusion_operator(discr, quad_tag, alpha, boundaries, u, return_grad_u=Fals discr.face_mass( dd_allfaces_quad, sum( - diffusion_flux(discr, quad_tag, alpha_tpair, grad_u_tpair) + diffusion_flux( + discr, alpha_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) for alpha_tpair, grad_u_tpair in zip( interior_trace_pairs(discr, alpha, comm_tag=_DiffusionAlphaTag), interior_trace_pairs(discr, grad_u, comm_tag=_DiffusionGradTag))) + sum( - bdry.get_diffusion_flux(discr, quad_tag, as_dofdesc(btag), alpha, - grad_u) for btag, bdry in boundaries.items()) + bdry.get_diffusion_flux( + discr, as_dofdesc(btag), alpha, grad_u, + quadrature_tag=quadrature_tag) + for btag, bdry in boundaries.items()) ) ) diff --git a/test/test_diffusion.py b/test/test_diffusion.py index 32981e4e4..543f59dcb 100644 --- a/test/test_diffusion.py +++ b/test/test_diffusion.py @@ -342,11 +342,13 @@ def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, def get_rhs(t, u): alpha = p.get_alpha(nodes, t, u) if isinstance(alpha, DOFArray): - discr_tag = DISCR_TAG_QUAD + quadrature_tag = DISCR_TAG_QUAD else: - discr_tag = DISCR_TAG_BASE - return (diffusion_operator(discr, quad_tag=discr_tag, alpha=alpha, - boundaries=p.get_boundaries(discr, actx, t), u=u) + quadrature_tag = DISCR_TAG_BASE + return ( + diffusion_operator( + discr, alpha=alpha, boundaries=p.get_boundaries(discr, actx, t), + u=u, quadrature_tag=quadrature_tag) + evaluate(sym_f, x=nodes, t=t)) t = 0. @@ -431,7 +433,7 @@ def test_diffusion_discontinuous_alpha(actx_factory, order, visualize=False): def get_rhs(t, u): return diffusion_operator( - discr, quad_tag=DISCR_TAG_BASE, alpha=alpha, boundaries=boundaries, u=u) + discr, alpha=alpha, boundaries=boundaries, u=u) rhs = get_rhs(0, u_steady) @@ -523,9 +525,10 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, u_mirgecom = p.get_solution(nodes_mirgecom, t) - diffusion_u_mirgecom = diffusion_operator(discr_mirgecom, - quad_tag=DISCR_TAG_BASE, alpha=discr_mirgecom.zeros(actx)+1., - boundaries=p.get_boundaries(discr_mirgecom, actx, t), u=u_mirgecom) + diffusion_u_mirgecom = diffusion_operator( + discr_mirgecom, alpha=discr_mirgecom.zeros(actx)+1., + boundaries=p.get_boundaries(discr_mirgecom, actx, t), + u=u_mirgecom) discr_ndg = ndgctx.get_discr(actx) nodes_ndg = thaw(discr_ndg.nodes(), actx) @@ -602,8 +605,8 @@ def get_u2(x, t): boundaries = p.get_boundaries(discr, actx, t) - diffusion_u1 = diffusion_operator(discr, quad_tag=DISCR_TAG_BASE, alpha=alpha, - boundaries=boundaries, u=u1) + diffusion_u1 = diffusion_operator( + discr, alpha=alpha, boundaries=boundaries, u=u1) assert isinstance(diffusion_u1, DOFArray) @@ -617,9 +620,7 @@ def get_u2(x, t): u_vector = make_obj_array([u1, u2]) diffusion_u_vector = diffusion_operator( - discr, quad_tag=DISCR_TAG_BASE, alpha=alpha, - boundaries=boundaries_vector, u=u_vector - ) + discr, alpha=alpha, boundaries=boundaries_vector, u=u_vector) assert isinstance(diffusion_u_vector, np.ndarray) assert diffusion_u_vector.shape == (2,) diff --git a/test/test_lazy.py b/test/test_lazy.py index bcdc98223..657c64888 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -103,7 +103,7 @@ def _isclose(discr, x, y, rel_tol=1e-9, abs_tol=0, return_operands=False): # cl_ctx = ctx_factory() # actx, discr = _op_test_fixture(cl_ctx) # -# from grudge.dof_desc import DTAG_BOUNDARY, DISCR_TAG_BASE +# from grudge.dof_desc import DTAG_BOUNDARY # from mirgecom.diffusion import ( # _gradient_operator, # DirichletDiffusionBoundary, @@ -116,7 +116,7 @@ def _isclose(discr, x, y, rel_tol=1e-9, abs_tol=0, return_operands=False): # # def op(alpha, u): # return _gradient_operator( -# discr, DISCR_TAG_BASE, alpha, boundaries, u) +# discr, alpha, boundaries, u) # compiled_op = actx.compile(op) # alpha = discr.zeros(actx) + 1 @@ -174,7 +174,7 @@ def test_lazy_op_diffusion(op_test_data, order): eager_actx, lazy_actx, get_discr = op_test_data discr = get_discr(order) - from grudge.dof_desc import DTAG_BOUNDARY, DISCR_TAG_BASE + from grudge.dof_desc import DTAG_BOUNDARY from mirgecom.diffusion import ( diffusion_operator, DirichletDiffusionBoundary, @@ -186,8 +186,7 @@ def test_lazy_op_diffusion(op_test_data, order): } def op(alpha, u): - return diffusion_operator( - discr, DISCR_TAG_BASE, alpha, boundaries, u) + return diffusion_operator(discr, alpha, boundaries, u) lazy_op = lazy_actx.compile(op) From 459e125f897fb815e1126a3199defddcd77487fe Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 21:00:16 -0500 Subject: [PATCH 562/873] rename alpha to kappa --- examples/heat-source-mpi.py | 2 +- mirgecom/diffusion.py | 89 +++++++++++++------------ test/test_diffusion.py | 128 ++++++++++++++++++------------------ test/test_lazy.py | 16 ++--- 4 files changed, 121 insertions(+), 114 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index e7e02b4a2..a4a97f70f 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -153,7 +153,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, def rhs(t, u): return ( - diffusion_operator(discr, alpha=1, boundaries=boundaries, u=u) + diffusion_operator(discr, kappa=1, boundaries=boundaries, u=u) + actx.np.exp(-np.dot(nodes, nodes)/source_width**2)) compiled_rhs = actx.compile(rhs) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 6517e4370..facd5e237 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -63,8 +63,8 @@ def flux(u, normal): def diffusion_flux( - discr, alpha_tpair, grad_u_tpair, *, quadrature_tag=DISCR_TAG_BASE): - r"""Compute the numerical flux for $\nabla \cdot (\alpha \nabla u)$.""" + discr, kappa_tpair, grad_u_tpair, *, quadrature_tag=DISCR_TAG_BASE): + r"""Compute the numerical flux for $\nabla \cdot (\kappa \nabla u)$.""" actx = grad_u_tpair.int[0].array_context dd = grad_u_tpair.dd @@ -76,14 +76,14 @@ def diffusion_flux( def to_quad(a): return discr.project(dd, dd_quad, a) - def flux(alpha, grad_u, normal): - return -alpha * np.dot(grad_u, normal) + def flux(kappa, grad_u, normal): + return -kappa * np.dot(grad_u, normal) flux_tpair = TracePair(dd_quad, interior=flux( - to_quad(alpha_tpair.int), to_quad(grad_u_tpair.int), normal_quad), + to_quad(kappa_tpair.int), to_quad(grad_u_tpair.int), normal_quad), exterior=flux( - to_quad(alpha_tpair.ext), to_quad(grad_u_tpair.ext), normal_quad) + to_quad(kappa_tpair.ext), to_quad(grad_u_tpair.ext), normal_quad) ) return discr.project(dd_quad, dd_allfaces_quad, flux_tpair.avg) @@ -99,13 +99,13 @@ class DiffusionBoundary(metaclass=abc.ABCMeta): @abc.abstractmethod def get_gradient_flux( - self, discr, dd, alpha, u, *, quadrature_tag=DISCR_TAG_BASE): + self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): """Compute the flux for grad(u) on the boundary corresponding to *dd*.""" raise NotImplementedError @abc.abstractmethod def get_diffusion_flux( - self, discr, dd, alpha, grad_u, *, quadrature_tag=DISCR_TAG_BASE): + self, discr, dd, kappa, grad_u, *, quadrature_tag=DISCR_TAG_BASE): """Compute the flux for diff(u) on the boundary corresponding to *dd*.""" raise NotImplementedError @@ -139,21 +139,21 @@ def __init__(self, value): self.value = value def get_gradient_flux( - self, discr, dd, alpha, u, *, + self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=2*self.value-u_int) return gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) def get_diffusion_flux( - self, discr, dd, alpha, grad_u, *, + self, discr, dd, kappa, grad_u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 - alpha_int = discr.project("vol", dd, alpha) - alpha_tpair = TracePair(dd, interior=alpha_int, exterior=alpha_int) + kappa_int = discr.project("vol", dd, kappa) + kappa_tpair = TracePair(dd, interior=kappa_int, exterior=kappa_int) grad_u_int = discr.project("vol", dd, grad_u) grad_u_tpair = TracePair(dd, interior=grad_u_int, exterior=grad_u_int) return diffusion_flux( - discr, alpha_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) + discr, kappa_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) class NeumannDiffusionBoundary(DiffusionBoundary): @@ -171,12 +171,12 @@ class NeumannDiffusionBoundary(DiffusionBoundary): .. math:: - (-\alpha \nabla u\cdot\mathbf{\hat{n}})|_\Gamma &= - -\alpha^- (\nabla u\cdot\mathbf{\hat{n}})|_\Gamma + (-\kappa \nabla u\cdot\mathbf{\hat{n}})|_\Gamma &= + -\kappa^- (\nabla u\cdot\mathbf{\hat{n}})|_\Gamma - &= -\alpha^- g + &= -\kappa^- g - when computing the boundary fluxes for $\nabla \cdot (\alpha \nabla u)$. + when computing the boundary fluxes for $\nabla \cdot (\kappa \nabla u)$. .. automethod:: __init__ """ @@ -193,25 +193,25 @@ def __init__(self, value): self.value = value def get_gradient_flux( - self, discr, dd, alpha, u, *, + self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=u_int) return gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) def get_diffusion_flux( - self, discr, dd, alpha, grad_u, *, + self, discr, dd, kappa, grad_u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 dd_quad = dd.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") # Compute the flux directly instead of constructing an external grad_u value # (and the associated TracePair); this approach is simpler in the - # spatially-varying alpha case (the other approach would result in a + # spatially-varying kappa case (the other approach would result in a # grad_u_tpair that lives in the quadrature discretization; diffusion_flux # would need to be modified to accept such values). - alpha_int_quad = discr.project("vol", dd_quad, alpha) + kappa_int_quad = discr.project("vol", dd_quad, kappa) value_quad = discr.project(dd, dd_quad, self.value) - flux_quad = -alpha_int_quad*value_quad + flux_quad = -kappa_int_quad*value_quad return discr.project(dd_quad, dd_allfaces_quad, flux_quad) @@ -219,7 +219,7 @@ class _DiffusionStateTag: pass -class _DiffusionAlphaTag: +class _DiffusionKappaTag: pass @@ -231,21 +231,28 @@ class _DiffusionGradTag: def _normalize_arguments(*args, **kwargs): if len(args) >= 2 and not isinstance(args[1], (dict, list)): # Old deprecated positional argument list - pos_arg_names = ["alpha", "quad_tag", "boundaries", "u"] + pos_arg_names = ["kappa", "quad_tag", "boundaries", "u"] else: - pos_arg_names = ["alpha", "boundaries", "u"] + pos_arg_names = ["kappa", "boundaries", "u"] arg_dict = { arg_name: arg for arg_name, arg in zip(pos_arg_names[:len(args)], args)} arg_dict.update(kwargs) - alpha = arg_dict["alpha"] + from warnings import warn + + if "alpha" in arg_dict: + warn( + "alpha argument is deprecated and will disappear in Q3 2022. " + "Use kappa instead.", DeprecationWarning, stacklevel=3) + kappa = arg_dict["alpha"] + else: + kappa = arg_dict["kappa"] + boundaries = arg_dict["boundaries"] u = arg_dict["u"] - from warnings import warn - if "quad_tag" in arg_dict: warn( "quad_tag argument is deprecated and will disappear in Q3 2022. " @@ -257,7 +264,7 @@ def _normalize_arguments(*args, **kwargs): # quadrature_tag is optional quadrature_tag = DISCR_TAG_BASE - return alpha, boundaries, u, quadrature_tag + return kappa, boundaries, u, quadrature_tag def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): @@ -265,7 +272,7 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): Compute the diffusion operator. The diffusion operator is defined as - $\nabla\cdot(\alpha\nabla u)$, where $\alpha$ is the diffusivity and + $\nabla\cdot(\kappa\nabla u)$, where $\kappa$ is the conductivity and $u$ is a scalar field. Uses unstabilized central numerical fluxes. @@ -274,8 +281,8 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): ---------- discr: grudge.eager.EagerDGDiscretization the discretization to use - alpha: numbers.Number or meshmode.dof_array.DOFArray - the diffusivity value(s) + kappa: numbers.Number or meshmode.dof_array.DOFArray + the conductivity value(s) boundaries: dictionary (or list of dictionaries) mapping boundary tags to :class:`DiffusionBoundary` instances @@ -295,7 +302,7 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): grad_u: numpy.ndarray the gradient of *u*; only returned if *return_grad_u* is True """ - alpha, boundaries, u, quadrature_tag = _normalize_arguments(*args, **kwargs) + kappa, boundaries, u, quadrature_tag = _normalize_arguments(*args, **kwargs) if isinstance(u, np.ndarray): if not isinstance(boundaries, list): @@ -304,7 +311,7 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): raise TypeError("boundaries must be the same length as u") return obj_array_vectorize_n_args( lambda boundaries_i, u_i: diffusion_operator( - discr, alpha, boundaries_i, u_i, return_grad_u=return_grad_u, + discr, kappa, boundaries_i, u_i, return_grad_u=return_grad_u, quadrature_tag=quadrature_tag), make_obj_array(boundaries), u) @@ -327,28 +334,28 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): discr, u, comm_tag=_DiffusionStateTag)) + sum( bdry.get_gradient_flux( - discr, as_dofdesc(btag), alpha, u, quadrature_tag=quadrature_tag) + discr, as_dofdesc(btag), kappa, u, quadrature_tag=quadrature_tag) for btag, bdry in boundaries.items()) ) ) - alpha_quad = discr.project("vol", dd_quad, alpha) + kappa_quad = discr.project("vol", dd_quad, kappa) grad_u_quad = discr.project("vol", dd_quad, grad_u) diff_u = discr.inverse_mass( - discr.weak_div(dd_quad, -alpha_quad*grad_u_quad) + discr.weak_div(dd_quad, -kappa_quad*grad_u_quad) - # noqa: W504 discr.face_mass( dd_allfaces_quad, sum( diffusion_flux( - discr, alpha_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) - for alpha_tpair, grad_u_tpair in zip( - interior_trace_pairs(discr, alpha, comm_tag=_DiffusionAlphaTag), + discr, kappa_tpair, grad_u_tpair, quadrature_tag=quadrature_tag) + for kappa_tpair, grad_u_tpair in zip( + interior_trace_pairs(discr, kappa, comm_tag=_DiffusionKappaTag), interior_trace_pairs(discr, grad_u, comm_tag=_DiffusionGradTag))) + sum( bdry.get_diffusion_flux( - discr, as_dofdesc(btag), alpha, grad_u, + discr, as_dofdesc(btag), kappa, grad_u, quadrature_tag=quadrature_tag) for btag, bdry in boundaries.items()) ) diff --git a/test/test_diffusion.py b/test/test_diffusion.py index 543f59dcb..87fdd7ec0 100644 --- a/test/test_diffusion.py +++ b/test/test_diffusion.py @@ -58,7 +58,7 @@ class HeatProblem(metaclass=ABCMeta): .. autoproperty:: dim .. automethod:: get_mesh - .. automethod:: get_alpha + .. automethod:: get_kappa .. automethod:: get_solution .. automethod:: get_boundaries """ @@ -82,8 +82,10 @@ def get_solution(self, x, t): pass @abstractmethod - def get_alpha(self, x, t, u): - """Return the diffusivity for coordinates *x*, time *t*, and solution *u*.""" + def get_kappa(self, x, t, u): + """ + Return the conductivity for coordinates *x*, time *t*, and solution *u*. + """ pass @abstractmethod @@ -106,27 +108,27 @@ def get_box_mesh(dim, a, b, n): nelements_per_axis=(n,)*dim, boundary_tag_to_face=boundary_tag_to_face) -# 1D: u(x,t) = exp(-alpha*t)*cos(x) -# 2D: u(x,y,t) = exp(-2*alpha*t)*sin(x)*cos(y) -# 3D: u(x,y,z,t) = exp(-3*alpha*t)*sin(x)*sin(y)*cos(z) +# 1D: u(x,t) = exp(-kappa*t)*cos(x) +# 2D: u(x,y,t) = exp(-2*kappa*t)*sin(x)*cos(y) +# 3D: u(x,y,z,t) = exp(-3*kappa*t)*sin(x)*sin(y)*cos(z) # on [-pi/2, pi/2]^{#dims} class DecayingTrig(HeatProblem): - def __init__(self, dim, alpha): + def __init__(self, dim, kappa): super().__init__(dim) - self._alpha = alpha + self._kappa = kappa def get_mesh(self, n): return get_box_mesh(self.dim, -0.5*np.pi, 0.5*np.pi, n) def get_solution(self, x, t): - u = mm.exp(-self.dim*self._alpha*t) + u = mm.exp(-self.dim*self._kappa*t) for i in range(self.dim-1): u = u * mm.sin(x[i]) u = u * mm.cos(x[self.dim-1]) return u - def get_alpha(self, x, t, u): - return self._alpha + def get_kappa(self, x, t, u): + return self._kappa def get_boundaries(self, discr, actx, t): boundaries = {} @@ -144,27 +146,27 @@ def get_boundaries(self, discr, actx, t): return boundaries -# 1D: u(x,t) = exp(-alpha*t)*cos(x) -# 2D: u(x,y,t) = exp(-2*alpha*t)*sin(x)*cos(y) -# 3D: u(x,y,z,t) = exp(-3*alpha*t)*sin(x)*sin(y)*cos(z) +# 1D: u(x,t) = exp(-kappa*t)*cos(x) +# 2D: u(x,y,t) = exp(-2*kappa*t)*sin(x)*cos(y) +# 3D: u(x,y,z,t) = exp(-3*kappa*t)*sin(x)*sin(y)*cos(z) # on [-pi/2, pi/4]^{#dims} class DecayingTrigTruncatedDomain(HeatProblem): - def __init__(self, dim, alpha): + def __init__(self, dim, kappa): super().__init__(dim) - self._alpha = alpha + self._kappa = kappa def get_mesh(self, n): return get_box_mesh(self.dim, -0.5*np.pi, 0.25*np.pi, n) def get_solution(self, x, t): - u = mm.exp(-self.dim*self._alpha*t) + u = mm.exp(-self.dim*self._kappa*t) for i in range(self.dim-1): u = u * mm.sin(x[i]) u = u * mm.cos(x[self.dim-1]) return u - def get_alpha(self, x, t, u): - return self._alpha + def get_kappa(self, x, t, u): + return self._kappa def get_boundaries(self, discr, actx, t): nodes = thaw(discr.nodes(), actx) @@ -194,11 +196,11 @@ def get_boundaries(self, discr, actx, t): return boundaries -# 1D: alpha(x) = 1+0.2*cos(3*x) +# 1D: kappa(x) = 1+0.2*cos(3*x) # u(x,t) = cos(t)*cos(x) (manufactured) -# 2D: alpha(x,y) = 1+0.2*cos(3*x)*cos(3*y) +# 2D: kappa(x,y) = 1+0.2*cos(3*x)*cos(3*y) # u(x,y,t) = cos(t)*sin(x)*cos(y) (manufactured) -# 3D: alpha(x,y,z) = 1+0.2*cos(3*x)*cos(3*y)*cos(3*z) +# 3D: kappa(x,y,z) = 1+0.2*cos(3*x)*cos(3*y)*cos(3*z) # u(x,y,z,t) = cos(t)*sin(x)*sin(y)*cos(z) (manufactured) # on [-pi/2, pi/2]^{#dims} class OscillatingTrigVarDiff(HeatProblem): @@ -215,12 +217,12 @@ def get_solution(self, x, t): u = u * mm.cos(x[self.dim-1]) return u - def get_alpha(self, x, t, u): - alpha = 1 + def get_kappa(self, x, t, u): + kappa = 1 for i in range(self.dim): - alpha = alpha * mm.cos(3.*x[i]) - alpha = 1 + 0.2*alpha - return alpha + kappa = kappa * mm.cos(3.*x[i]) + kappa = 1 + 0.2*kappa + return kappa def get_boundaries(self, discr, actx, t): boundaries = {} @@ -238,7 +240,7 @@ def get_boundaries(self, discr, actx, t): return boundaries -# alpha(u) = 1 + u**3 +# kappa(u) = 1 + u**3 # 1D: u(x,t) = cos(t)*cos(x) (manufactured) # 2D: u(x,y,t) = cos(t)*sin(x)*cos(y) (manufactured) # 3D: u(x,y,z,t) = cos(t)*sin(x)*sin(y)*cos(z) (manufactured) @@ -257,7 +259,7 @@ def get_solution(self, x, t): u = u * mm.cos(x[self.dim-1]) return u - def get_alpha(self, x, t, u): + def get_kappa(self, x, t, u): return 1 + u**3 def get_boundaries(self, discr, actx, t): @@ -276,10 +278,10 @@ def get_boundaries(self, discr, actx, t): return boundaries -def sym_diffusion(dim, sym_alpha, sym_u): +def sym_diffusion(dim, sym_kappa, sym_u): """Return a symbolic expression for the diffusion operator applied to a function. """ - return sym_div(sym_alpha * sym_grad(dim, sym_u)) + return sym_div(sym_kappa * sym_grad(dim, sym_u)) # Note: Must integrate in time for a while in order to achieve expected spatial @@ -311,9 +313,9 @@ def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, sym_x = pmbl.make_sym_vector("x", p.dim) sym_t = pmbl.var("t") sym_u = p.get_solution(sym_x, sym_t) - sym_alpha = p.get_alpha(sym_x, sym_t, sym_u) + sym_kappa = p.get_kappa(sym_x, sym_t, sym_u) - sym_diffusion_u = sym_diffusion(p.dim, sym_alpha, sym_u) + sym_diffusion_u = sym_diffusion(p.dim, sym_kappa, sym_u) # In order to support manufactured solutions, we modify the heat equation # to add a source term f. If the solution is exact, this term should be 0. @@ -340,14 +342,14 @@ def test_diffusion_accuracy(actx_factory, problem, nsteps, dt, scales, order, nodes = thaw(discr.nodes(), actx) def get_rhs(t, u): - alpha = p.get_alpha(nodes, t, u) - if isinstance(alpha, DOFArray): + kappa = p.get_kappa(nodes, t, u) + if isinstance(kappa, DOFArray): quadrature_tag = DISCR_TAG_QUAD else: quadrature_tag = DISCR_TAG_BASE return ( diffusion_operator( - discr, alpha=alpha, boundaries=p.get_boundaries(discr, actx, t), + discr, kappa=kappa, boundaries=p.get_boundaries(discr, actx, t), u=u, quadrature_tag=quadrature_tag) + evaluate(sym_f, x=nodes, t=t)) @@ -386,9 +388,9 @@ def get_rhs(t, u): @pytest.mark.parametrize("order", [1, 2, 3, 4]) -def test_diffusion_discontinuous_alpha(actx_factory, order, visualize=False): +def test_diffusion_discontinuous_kappa(actx_factory, order, visualize=False): """ - Checks the accuracy of the diffusion operator for an alpha field that has a + Checks the accuracy of the diffusion operator for an kappa field that has a jump across an element face. """ actx = actx_factory() @@ -415,34 +417,34 @@ def test_diffusion_discontinuous_alpha(actx_factory, order, visualize=False): upper_mask_np[int(n/2):, :] = 1 upper_mask = DOFArray(actx, (actx.from_numpy(upper_mask_np),)) - alpha_lower = 0.5 - alpha_upper = 1 + kappa_lower = 0.5 + kappa_upper = 1 - alpha = alpha_lower * lower_mask + alpha_upper * upper_mask + kappa = kappa_lower * lower_mask + kappa_upper * upper_mask boundaries = { DTAG_BOUNDARY("-0"): DirichletDiffusionBoundary(0.), DTAG_BOUNDARY("+0"): DirichletDiffusionBoundary(1.), } - flux = -alpha_lower*alpha_upper/(alpha_lower + alpha_upper) + flux = -kappa_lower*kappa_upper/(kappa_lower + kappa_upper) u_steady = ( - -flux/alpha_lower * (nodes[0] + 1) * lower_mask # noqa: E126, E221 - + (1 - flux/alpha_upper * (nodes[0] - 1)) * upper_mask) # noqa: E131 + -flux/kappa_lower * (nodes[0] + 1) * lower_mask # noqa: E126, E221 + + (1 - flux/kappa_upper * (nodes[0] - 1)) * upper_mask) # noqa: E131 def get_rhs(t, u): return diffusion_operator( - discr, alpha=alpha, boundaries=boundaries, u=u) + discr, kappa=kappa, boundaries=boundaries, u=u) rhs = get_rhs(0, u_steady) if visualize: from grudge.shortcuts import make_visualizer vis = make_visualizer(discr, discr.order+3) - vis.write_vtk_file("diffusion_discontinuous_alpha_rhs_{order}.vtu" + vis.write_vtk_file("diffusion_discontinuous_kappa_rhs_{order}.vtu" .format(order=order), [ - ("alpha", alpha), + ("kappa", kappa), ("u_steady", u_steady), ("rhs", rhs), ]) @@ -470,9 +472,9 @@ def get_rhs(t, u): t += dt if visualize: - vis.write_vtk_file("diffusion_disc_alpha_stability_{order}.vtu" + vis.write_vtk_file("diffusion_disc_kappa_stability_{order}.vtu" .format(order=order), [ - ("alpha", alpha), + ("kappa", kappa), ("u", u), ("u_steady", u_steady), ]) @@ -501,11 +503,11 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, sym_x = pmbl.make_sym_vector("x", p.dim) sym_t = pmbl.var("t") sym_u = p.get_solution(sym_x, sym_t) - sym_alpha = p.get_alpha(sym_x, sym_t, sym_u) + sym_kappa = p.get_kappa(sym_x, sym_t, sym_u) - assert sym_alpha == 1 + assert sym_kappa == 1 - sym_diffusion_u = sym_diffusion(p.dim, sym_alpha, sym_u) + sym_diffusion_u = sym_diffusion(p.dim, sym_kappa, sym_u) from meshmode.interop.nodal_dg import download_nodal_dg_if_not_present download_nodal_dg_if_not_present() @@ -526,7 +528,7 @@ def test_diffusion_compare_to_nodal_dg(actx_factory, problem, order, u_mirgecom = p.get_solution(nodes_mirgecom, t) diffusion_u_mirgecom = diffusion_operator( - discr_mirgecom, alpha=discr_mirgecom.zeros(actx)+1., + discr_mirgecom, kappa=discr_mirgecom.zeros(actx)+1., boundaries=p.get_boundaries(discr_mirgecom, actx, t), u=u_mirgecom) @@ -576,16 +578,16 @@ def get_u2(x, t): sym_u1 = get_u1(sym_x, sym_t) sym_u2 = get_u2(sym_x, sym_t) - sym_alpha1 = p.get_alpha(sym_x, sym_t, sym_u1) - sym_alpha2 = p.get_alpha(sym_x, sym_t, sym_u2) + sym_kappa1 = p.get_kappa(sym_x, sym_t, sym_u1) + sym_kappa2 = p.get_kappa(sym_x, sym_t, sym_u2) - assert isinstance(sym_alpha1, Number) - assert isinstance(sym_alpha2, Number) + assert isinstance(sym_kappa1, Number) + assert isinstance(sym_kappa2, Number) - alpha = sym_alpha1 + kappa = sym_kappa1 - sym_diffusion_u1 = sym_diffusion(p.dim, alpha, sym_u1) - sym_diffusion_u2 = sym_diffusion(p.dim, alpha, sym_u2) + sym_diffusion_u1 = sym_diffusion(p.dim, kappa, sym_u1) + sym_diffusion_u2 = sym_diffusion(p.dim, kappa, sym_u2) n = 128 @@ -601,12 +603,12 @@ def get_u2(x, t): u1 = get_u1(nodes, t) u2 = get_u2(nodes, t) - alpha = p.get_alpha(nodes, t, u1) + kappa = p.get_kappa(nodes, t, u1) boundaries = p.get_boundaries(discr, actx, t) diffusion_u1 = diffusion_operator( - discr, alpha=alpha, boundaries=boundaries, u=u1) + discr, kappa=kappa, boundaries=boundaries, u=u1) assert isinstance(diffusion_u1, DOFArray) @@ -620,7 +622,7 @@ def get_u2(x, t): u_vector = make_obj_array([u1, u2]) diffusion_u_vector = diffusion_operator( - discr, alpha=alpha, boundaries=boundaries_vector, u=u_vector) + discr, kappa=kappa, boundaries=boundaries_vector, u=u_vector) assert isinstance(diffusion_u_vector, np.ndarray) assert diffusion_u_vector.shape == (2,) diff --git a/test/test_lazy.py b/test/test_lazy.py index 657c64888..04b119d90 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -114,14 +114,12 @@ def _isclose(discr, x, y, rel_tol=1e-9, abs_tol=0, return_operands=False): # DTAG_BOUNDARY("y"): NeumannDiffusionBoundary(0) # } # -# def op(alpha, u): -# return _gradient_operator( -# discr, alpha, boundaries, u) +# def op(u): +# return _gradient_operator(discr, boundaries, u) # compiled_op = actx.compile(op) -# alpha = discr.zeros(actx) + 1 # u = discr.zeros(actx) -# compiled_op(alpha, u) +# compiled_op(u) @pytest.mark.parametrize("order", [1, 2, 3]) @@ -185,16 +183,16 @@ def test_lazy_op_diffusion(op_test_data, order): DTAG_BOUNDARY("y"): NeumannDiffusionBoundary(0) } - def op(alpha, u): - return diffusion_operator(discr, alpha, boundaries, u) + def op(kappa, u): + return diffusion_operator(discr, kappa, boundaries, u) lazy_op = lazy_actx.compile(op) def get_inputs(actx): nodes = thaw(discr.nodes(), actx) - alpha = discr.zeros(actx) + 1 + kappa = discr.zeros(actx) + 1 u = actx.np.cos(np.pi*nodes[0]) - return alpha, u + return kappa, u tol = 1e-11 isclose = partial( From 9ab31f6e96d0fcaf13a35efb58f89e270a126344 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 21:03:41 -0500 Subject: [PATCH 563/873] use grad instead of gradient --- mirgecom/diffusion.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index facd5e237..1c4b95031 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -1,6 +1,6 @@ r""":mod:`mirgecom.diffusion` computes the diffusion operator. -.. autofunction:: gradient_flux +.. autofunction:: grad_flux .. autofunction:: diffusion_flux .. autofunction:: diffusion_operator .. autoclass:: DiffusionBoundary @@ -42,7 +42,7 @@ from grudge.trace_pair import TracePair, interior_trace_pairs -def gradient_flux(discr, u_tpair, *, quadrature_tag=DISCR_TAG_BASE): +def grad_flux(discr, u_tpair, *, quadrature_tag=DISCR_TAG_BASE): r"""Compute the numerical flux for $\nabla u$.""" actx = u_tpair.int.array_context @@ -93,12 +93,12 @@ class DiffusionBoundary(metaclass=abc.ABCMeta): """ Diffusion boundary base class. - .. automethod:: get_gradient_flux + .. automethod:: get_grad_flux .. automethod:: get_diffusion_flux """ @abc.abstractmethod - def get_gradient_flux( + def get_grad_flux( self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): """Compute the flux for grad(u) on the boundary corresponding to *dd*.""" raise NotImplementedError @@ -138,12 +138,12 @@ def __init__(self, value): """ self.value = value - def get_gradient_flux( + def get_grad_flux( self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=2*self.value-u_int) - return gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) + return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) def get_diffusion_flux( self, discr, dd, kappa, grad_u, *, @@ -192,12 +192,12 @@ def __init__(self, value): """ self.value = value - def get_gradient_flux( + def get_grad_flux( self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=u_int) - return gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) + return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) def get_diffusion_flux( self, discr, dd, kappa, grad_u, *, @@ -329,11 +329,11 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): discr.face_mass( dd_allfaces_quad, sum( - gradient_flux(discr, u_tpair, quadrature_tag=quadrature_tag) + grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) for u_tpair in interior_trace_pairs( discr, u, comm_tag=_DiffusionStateTag)) + sum( - bdry.get_gradient_flux( + bdry.get_grad_flux( discr, as_dofdesc(btag), kappa, u, quadrature_tag=quadrature_tag) for btag, bdry in boundaries.items()) ) From 6e469d7b2516a9153e2d4c58999375a199efddb9 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 21:12:13 -0500 Subject: [PATCH 564/873] separate diffusion_operator gradient computation into separate function --- mirgecom/diffusion.py | 76 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 1c4b95031..900de0789 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -2,6 +2,7 @@ .. autofunction:: grad_flux .. autofunction:: diffusion_flux +.. autofunction:: grad_operator .. autofunction:: diffusion_operator .. autoclass:: DiffusionBoundary .. autoclass:: DirichletDiffusionBoundary @@ -227,6 +228,65 @@ class _DiffusionGradTag: pass +def grad_operator(discr, boundaries, u, quadrature_tag=DISCR_TAG_BASE): + r""" + Compute the gradient of *u*. + + Uses unstabilized central numerical fluxes. + + Parameters + ---------- + discr: grudge.eager.EagerDGDiscretization + the discretization to use + boundaries: + dictionary (or list of dictionaries) mapping boundary tags to + :class:`DiffusionBoundary` instances + u: meshmode.dof_array.DOFArray or numpy.ndarray + the DOF array (or object array of DOF arrays) to which the operator should be + applied + quadrature_tag: + quadrature tag indicating which discretization in *discr* to use for + overintegration + + Returns + ------- + grad_u: numpy.ndarray + the gradient of *u* + """ + if isinstance(u, np.ndarray): + if not isinstance(boundaries, list): + raise TypeError("boundaries must be a list if u is an object array") + if len(boundaries) != len(u): + raise TypeError("boundaries must be the same length as u") + return obj_array_vectorize_n_args( + lambda boundaries_i, u_i: grad_operator( + discr, boundaries_i, u_i, quadrature_tag=quadrature_tag), + make_obj_array(boundaries), u) + + for btag, bdry in boundaries.items(): + if not isinstance(bdry, DiffusionBoundary): + raise TypeError(f"Unrecognized boundary type for tag {btag}. " + "Must be an instance of DiffusionBoundary.") + + dd_allfaces_quad = DOFDesc("all_faces", quadrature_tag) + + return discr.inverse_mass( + discr.weak_grad(-u) + - # noqa: W504 + discr.face_mass( + dd_allfaces_quad, + sum( + grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) + for u_tpair in interior_trace_pairs( + discr, u, comm_tag=_DiffusionStateTag)) + + sum( + bdry.get_grad_flux( + discr, as_dofdesc(btag), kappa, u, quadrature_tag=quadrature_tag) + for btag, bdry in boundaries.items()) + ) + ) + + # Yuck def _normalize_arguments(*args, **kwargs): if len(args) >= 2 and not isinstance(args[1], (dict, list)): @@ -323,21 +383,7 @@ def diffusion_operator(discr, *args, return_grad_u=False, **kwargs): dd_quad = DOFDesc("vol", quadrature_tag) dd_allfaces_quad = DOFDesc("all_faces", quadrature_tag) - grad_u = discr.inverse_mass( - discr.weak_grad(-u) - - # noqa: W504 - discr.face_mass( - dd_allfaces_quad, - sum( - grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) - for u_tpair in interior_trace_pairs( - discr, u, comm_tag=_DiffusionStateTag)) - + sum( - bdry.get_grad_flux( - discr, as_dofdesc(btag), kappa, u, quadrature_tag=quadrature_tag) - for btag, bdry in boundaries.items()) - ) - ) + grad_u = grad_operator(discr, boundaries, u, quadrature_tag=quadrature_tag) kappa_quad = discr.project("vol", dd_quad, kappa) grad_u_quad = discr.project("vol", dd_quad, grad_u) From ef07cda27e0948e3a22984970585d52b632274a3 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 2 Apr 2022 21:17:53 -0500 Subject: [PATCH 565/873] remove kappa parameter from gradient stuff --- mirgecom/diffusion.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 900de0789..f41743a53 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -100,7 +100,7 @@ class DiffusionBoundary(metaclass=abc.ABCMeta): @abc.abstractmethod def get_grad_flux( - self, discr, dd, kappa, u, *, quadrature_tag=DISCR_TAG_BASE): + self, discr, dd, u, *, quadrature_tag=DISCR_TAG_BASE): """Compute the flux for grad(u) on the boundary corresponding to *dd*.""" raise NotImplementedError @@ -140,8 +140,7 @@ def __init__(self, value): self.value = value def get_grad_flux( - self, discr, dd, kappa, u, *, - quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + self, discr, dd, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=2*self.value-u_int) return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) @@ -194,8 +193,7 @@ def __init__(self, value): self.value = value def get_grad_flux( - self, discr, dd, kappa, u, *, - quadrature_tag=DISCR_TAG_BASE): # noqa: D102 + self, discr, dd, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 u_int = discr.project("vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=u_int) return grad_flux(discr, u_tpair, quadrature_tag=quadrature_tag) @@ -281,7 +279,7 @@ def grad_operator(discr, boundaries, u, quadrature_tag=DISCR_TAG_BASE): discr, u, comm_tag=_DiffusionStateTag)) + sum( bdry.get_grad_flux( - discr, as_dofdesc(btag), kappa, u, quadrature_tag=quadrature_tag) + discr, as_dofdesc(btag), u, quadrature_tag=quadrature_tag) for btag, bdry in boundaries.items()) ) ) From 7cc9c5b3c96aae21431da812d17840a3812ea852 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 5 Apr 2022 08:07:23 -0500 Subject: [PATCH 566/873] Update documentation --- doc/discretization.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/discretization.rst b/doc/discretization.rst index a9d1eb23c..d6c97e056 100644 --- a/doc/discretization.rst +++ b/doc/discretization.rst @@ -331,7 +331,7 @@ for this particular wall treatment. In practice, when the fluid operators in :mod:`~mirgecom.inviscid`, and :mod:`~mirgecom.navierstokes`, go to calculate the flux for the divergence of the inviscid transport flux, they call the -:meth:`~mirgecom.boundary.FluidBoundary.inviscid_divergence_flux` function, which for this +`~mirgecom.boundary.FluidBoundary.inviscid_divergence_flux` function, which for this adiabatic slip boundary, sets the boundary state, $\b{Q}^+$ by calling :meth:`~mirgecom.boundary.AdiabaticSlipBoundary.adiabatic_slip_state`, and returns the numerical flux ${h}^*_e = \b{h}_{e}(\b{Q}^-, \b{Q}^+) \cdot \hat{\b{n}}$. From ffda2f746ad57bb35c653f0202cd9127f7af6e7e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 5 Apr 2022 15:33:21 -0500 Subject: [PATCH 567/873] Update docs per #633 review --- mirgecom/euler.py | 17 +++++++---------- mirgecom/navierstokes.py | 25 +++++++++---------------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 97b1ba6a4..3b333ad68 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -70,16 +70,6 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, quadrature_tag=None): r"""Compute RHS of the Euler flow equations. - Returns - ------- - numpy.ndarray - The right-hand-side of the Euler flow equations: - - .. math:: - - \dot{\mathbf{q}} = - \nabla\cdot\mathbf{F} + - (\mathbf{F}\cdot\hat{n})_{\partial\Omega} - Parameters ---------- state: :class:`~mirgecom.gas_model.FluidState` @@ -109,6 +99,13 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, Returns ------- :class:`mirgecom.fluid.ConservedVars` + + The right-hand-side of the Euler flow equations: + + .. math:: + + \dot{\mathbf{q}} = - \nabla\cdot\mathbf{F} + + (\mathbf{F}\cdot\hat{n})_{\partial\Omega} """ dd_quad_vol = DOFDesc("vol", quadrature_tag) dd_quad_faces = DOFDesc("all_faces", quadrature_tag) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 418125a8e..db7171a4e 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -99,15 +99,6 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, quadrature_tag=None, return_gradients=False): r"""Compute RHS of the Navier-Stokes equations. - Returns - ------- - numpy.ndarray - The right-hand-side of the Navier-Stokes equations: - - .. math:: - - \partial_t \mathbf{Q} = \nabla\cdot(\mathbf{F}_V - \mathbf{F}_I) - Parameters ---------- state: :class:`~mirgecom.gas_model.FluidState` @@ -121,11 +112,10 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, time Time - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. - Implementing the transport properties including heat conductivity, - and species diffusivities type(mirgecom.transport.TransportModel). + gas_model: :class:`~mirgecom.gas_model.GasModel` + + Physical gas model including equation of state, transport, + and kinetic properties as required by fluid state quadrature_tag An optional identifier denoting a particular quadrature @@ -136,8 +126,11 @@ def ns_operator(discr, gas_model, state, boundaries, time=0.0, ------- :class:`mirgecom.fluid.ConservedVars` - Agglomerated object array of DOF arrays representing the RHS of the - Navier-Stokes equations. + The right-hand-side of the Navier-Stokes equations: + + .. math:: + + \partial_t \mathbf{Q} = \nabla\cdot(\mathbf{F}_V - \mathbf{F}_I) """ if not state.is_viscous: raise ValueError("Navier-Stokes operator expects viscous gas model.") From f704318e4d7011fa92d2ec88f8dcc097e31b8cca Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 5 Apr 2022 15:43:57 -0500 Subject: [PATCH 568/873] Undo mistake in prod env --- .ci-support/production-testing-env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 01b9902ad..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,8 +8,8 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge -export PRODUCTION_FORK="" # The fork/home of production changes (if any) +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +# export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited # list of driver locations, where each driver location is of the form: From c56303c4780d43621878e5ff8f527b4f4e4dd5f5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 8 Apr 2022 12:46:44 -0500 Subject: [PATCH 569/873] Add option of using pre-generated pyrometheus mechanisms --- examples/nsmix-mpi.py | 7 +- mirgecom/mechanisms/sanDiego.py | 406 ++++++++++++++++++++++++++++++++ mirgecom/mechanisms/uiuc.py | 294 +++++++++++++++++++++++ mirgecom/thermochemistry.py | 70 +++--- setup.cfg | 2 +- 5 files changed, 737 insertions(+), 42 deletions(-) create mode 100644 mirgecom/mechanisms/sanDiego.py create mode 100644 mirgecom/mechanisms/uiuc.py diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index b9b47c03d..52d0c9665 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -246,8 +246,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyrometheus_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import get_pyrometheus_wrapper_class + from mirgecom.mechanisms.uiuc import Thermochemistry + pyrometheus_mechanism = \ + get_pyrometheus_wrapper_class(Thermochemistry)(actx.np) + pyro_eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature) gas_model = GasModel(eos=pyro_eos, transport=transport_model) diff --git a/mirgecom/mechanisms/sanDiego.py b/mirgecom/mechanisms/sanDiego.py new file mode 100644 index 000000000..a9820b4a8 --- /dev/null +++ b/mirgecom/mechanisms/sanDiego.py @@ -0,0 +1,406 @@ +# noqa +""" +.. autoclass:: Thermochemistry +""" + + +import numpy as np + + +class Thermochemistry: + """ + .. attribute:: model_name + .. attribute:: num_elements + .. attribute:: num_species + .. attribute:: num_reactions + .. attribute:: num_falloff + .. attribute:: one_atm + + Returns 1 atm in SI units of pressure (Pa). + + .. attribute:: gas_constant + .. attribute:: species_names + .. attribute:: species_indices + + .. automethod:: get_specific_gas_constant + .. automethod:: get_density + .. automethod:: get_pressure + .. automethod:: get_mix_molecular_weight + .. automethod:: get_concentrations + .. automethod:: get_mixture_specific_heat_cp_mass + .. automethod:: get_mixture_specific_heat_cv_mass + .. automethod:: get_mixture_enthalpy_mass + .. automethod:: get_mixture_internal_energy_mass + .. automethod:: get_species_specific_heats_r + .. automethod:: get_species_enthalpies_rt + .. automethod:: get_species_entropies_r + .. automethod:: get_species_gibbs_rt + .. automethod:: get_equilibrium_constants + .. automethod:: get_temperature + .. automethod:: __init__ + """ + + def __init__(self, usr_np=np): + """Initialize thermochemistry object for a mechanism. + + Parameters + ---------- + usr_np + :mod:`numpy`-like namespace providing at least the following functions, + for any array ``X`` of the bulk array type: + + - ``usr_np.log(X)`` (like :data:`numpy.log`) + - ``usr_np.log10(X)`` (like :data:`numpy.log10`) + - ``usr_np.exp(X)`` (like :data:`numpy.exp`) + - ``usr_np.where(X > 0, X_yes, X_no)`` (like :func:`numpy.where`) + - ``usr_np.linalg.norm(X, np.inf)`` (like :func:`numpy.linalg.norm`) + + where the "bulk array type" is a type that offers arithmetic analogous + to :class:`numpy.ndarray` and is used to hold all types of (potentialy + volumetric) "bulk data", such as temperature, pressure, mass fractions, + etc. This parameter defaults to *actual numpy*, so it can be ignored + unless it is needed by the user (e.g. for purposes of + GPU processing or automatic differentiation). + + """ + + self.usr_np = usr_np + self.model_name = 'mechs/sanDiego.cti' + self.num_elements = 3 + self.num_species = 9 + self.num_reactions = 24 + self.num_falloff = 2 + + self.one_atm = 101325.0 + self.gas_constant = 8314.46261815324 + self.big_number = 1.0e300 + + self.species_names = ['H2', 'H', 'O2', 'O', 'OH', 'HO2', 'H2O2', 'H2O', 'N2'] + self.species_indices = {'H2': 0, 'H': 1, 'O2': 2, 'O': 3, 'OH': 4, 'HO2': 5, 'H2O2': 6, 'H2O': 7, 'N2': 8} + + self.wts = np.array([2.016, 1.008, 31.998, 15.999, 17.007, 33.006, 34.014, 18.015, 28.014]) + self.iwts = 1/self.wts + + def _pyro_zeros_like(self, argument): + # FIXME: This is imperfect, as a NaN will stay a NaN. + return 0 * argument + + def _pyro_make_array(self, res_list): + """This works around (e.g.) numpy.exp not working with object + arrays of numpy scalars. It defaults to making object arrays, however + if an array consists of all scalars, it makes a "plain old" + :class:`numpy.ndarray`. + + See ``this numpy bug `__ + for more context. + """ + + from numbers import Number + all_numbers = all(isinstance(e, Number) for e in res_list) + + dtype = np.float64 if all_numbers else np.object + result = np.empty((len(res_list),), dtype=dtype) + + # 'result[:] = res_list' may look tempting, however: + # https://github.com/numpy/numpy/issues/16564 + for idx in range(len(res_list)): + result[idx] = res_list[idx] + + return result + + def _pyro_norm(self, argument, normord): + """This works around numpy.linalg norm not working with scalars. + + If the argument is a regular ole number, it uses :func:`numpy.abs`, + otherwise it uses ``usr_np.linalg.norm``. + """ + # Wrap norm for scalars + + from numbers import Number + + if isinstance(argument, Number): + return np.abs(argument) + return self.usr_np.linalg.norm(argument, normord) + + def species_name(self, species_index): + return self.species_name[species_index] + + def species_index(self, species_name): + return self.species_indices[species_name] + + def get_specific_gas_constant(self, mass_fractions): + return self.gas_constant * ( + + self.iwts[0]*mass_fractions[0] + + self.iwts[1]*mass_fractions[1] + + self.iwts[2]*mass_fractions[2] + + self.iwts[3]*mass_fractions[3] + + self.iwts[4]*mass_fractions[4] + + self.iwts[5]*mass_fractions[5] + + self.iwts[6]*mass_fractions[6] + + self.iwts[7]*mass_fractions[7] + + self.iwts[8]*mass_fractions[8] + ) + + def get_density(self, p, temperature, mass_fractions): + mmw = self.get_mix_molecular_weight(mass_fractions) + rt = self.gas_constant * temperature + return p * mmw / rt + + def get_pressure(self, rho, temperature, mass_fractions): + mmw = self.get_mix_molecular_weight(mass_fractions) + rt = self.gas_constant * temperature + return rho * rt / mmw + + def get_mix_molecular_weight(self, mass_fractions): + return 1/( + + self.iwts[0]*mass_fractions[0] + + self.iwts[1]*mass_fractions[1] + + self.iwts[2]*mass_fractions[2] + + self.iwts[3]*mass_fractions[3] + + self.iwts[4]*mass_fractions[4] + + self.iwts[5]*mass_fractions[5] + + self.iwts[6]*mass_fractions[6] + + self.iwts[7]*mass_fractions[7] + + self.iwts[8]*mass_fractions[8] + ) + + def get_concentrations(self, rho, mass_fractions): + return self.iwts * rho * mass_fractions + + def get_mass_average_property(self, mass_fractions, spec_property): + return sum([mass_fractions[i] * spec_property[i] * self.iwts[i] + for i in range(self.num_species)]) + + def get_mixture_specific_heat_cp_mass(self, temperature, mass_fractions): + cp0_r = self.get_species_specific_heats_r(temperature) + cpmix = self.get_mass_average_property(mass_fractions, cp0_r) + return self.gas_constant * cpmix + + def get_mixture_specific_heat_cv_mass(self, temperature, mass_fractions): + cp0_r = self.get_species_specific_heats_r(temperature) - 1.0 + cpmix = self.get_mass_average_property(mass_fractions, cp0_r) + return self.gas_constant * cpmix + + def get_mixture_enthalpy_mass(self, temperature, mass_fractions): + h0_rt = self.get_species_enthalpies_rt(temperature) + hmix = self.get_mass_average_property(mass_fractions, h0_rt) + return self.gas_constant * temperature * hmix + + def get_mixture_internal_energy_mass(self, temperature, mass_fractions): + e0_rt = self.get_species_enthalpies_rt(temperature) - 1.0 + emix = self.get_mass_average_property(mass_fractions, e0_rt) + return self.gas_constant * temperature * emix + + def get_species_specific_heats_r(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -4.94024731e-05*temperature + 4.99456778e-07*temperature**2 + -1.79566394e-10*temperature**3 + 2.00255376e-14*temperature**4, 2.34433112 + 0.00798052075*temperature + -1.9478151e-05*temperature**2 + 2.01572094e-08*temperature**3 + -7.37611761e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.50000001 + -2.30842973e-11*temperature + 1.61561948e-14*temperature**2 + -4.73515235e-18*temperature**3 + 4.98197357e-22*temperature**4, 2.5 + 7.05332819e-13*temperature + -1.99591964e-15*temperature**2 + 2.30081632e-18*temperature**3 + -9.27732332e-22*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00148308754*temperature + -7.57966669e-07*temperature**2 + 2.09470555e-10*temperature**3 + -2.16717794e-14*temperature**4, 3.78245636 + -0.00299673416*temperature + 9.84730201e-06*temperature**2 + -9.68129509e-09*temperature**3 + 3.24372837e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.56942078 + -8.59741137e-05*temperature + 4.19484589e-08*temperature**2 + -1.00177799e-11*temperature**3 + 1.22833691e-15*temperature**4, 3.1682671 + -0.00327931884*temperature + 6.64306396e-06*temperature**2 + -6.12806624e-09*temperature**3 + 2.11265971e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.86472886 + 0.00105650448*temperature + -2.59082758e-07*temperature**2 + 3.05218674e-11*temperature**3 + -1.33195876e-15*temperature**4, 4.12530561 + -0.00322544939*temperature + 6.52764691e-06*temperature**2 + -5.79853643e-09*temperature**3 + 2.06237379e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 4.0172109 + 0.00223982013*temperature + -6.3365815e-07*temperature**2 + 1.1424637e-10*temperature**3 + -1.07908535e-14*temperature**4, 4.30179801 + -0.00474912051*temperature + 2.11582891e-05*temperature**2 + -2.42763894e-08*temperature**3 + 9.29225124e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 4.16500285 + 0.00490831694*temperature + -1.90139225e-06*temperature**2 + 3.71185986e-10*temperature**3 + -2.87908305e-14*temperature**4, 4.27611269 + -0.000542822417*temperature + 1.67335701e-05*temperature**2 + -2.15770813e-08*temperature**3 + 8.62454363e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00217691804*temperature + -1.64072518e-07*temperature**2 + -9.7041987e-11*temperature**3 + 1.68200992e-14*temperature**4, 4.19864056 + -0.0020364341*temperature + 6.52040211e-06*temperature**2 + -5.48797062e-09*temperature**3 + 1.77197817e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0014879768*temperature + -5.68476e-07*temperature**2 + 1.0097038e-10*temperature**3 + -6.753351e-15*temperature**4, 3.298677 + 0.0014082404*temperature + -3.963222e-06*temperature**2 + 5.641515e-09*temperature**3 + -2.444854e-12*temperature**4), + ]) + + def get_species_enthalpies_rt(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -2.470123655e-05*temperature + 1.6648559266666665e-07*temperature**2 + -4.48915985e-11*temperature**3 + 4.00510752e-15*temperature**4 + -950.158922 / temperature, 2.34433112 + 0.003990260375*temperature + -6.4927169999999995e-06*temperature**2 + 5.03930235e-09*temperature**3 + -1.4752235220000002e-12*temperature**4 + -917.935173 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.50000001 + -1.154214865e-11*temperature + 5.385398266666667e-15*temperature**2 + -1.1837880875e-18*temperature**3 + 9.96394714e-23*temperature**4 + 25473.6599 / temperature, 2.5 + 3.526664095e-13*temperature + -6.653065466666667e-16*temperature**2 + 5.7520408e-19*temperature**3 + -1.855464664e-22*temperature**4 + 25473.6599 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00074154377*temperature + -2.526555563333333e-07*temperature**2 + 5.236763875e-11*temperature**3 + -4.33435588e-15*temperature**4 + -1088.45772 / temperature, 3.78245636 + -0.00149836708*temperature + 3.282434003333333e-06*temperature**2 + -2.4203237725e-09*temperature**3 + 6.48745674e-13*temperature**4 + -1063.94356 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.56942078 + -4.298705685e-05*temperature + 1.3982819633333334e-08*temperature**2 + -2.504444975e-12*temperature**3 + 2.4566738199999997e-16*temperature**4 + 29217.5791 / temperature, 3.1682671 + -0.00163965942*temperature + 2.2143546533333334e-06*temperature**2 + -1.53201656e-09*temperature**3 + 4.22531942e-13*temperature**4 + 29122.2592 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.86472886 + 0.00052825224*temperature + -8.636091933333334e-08*temperature**2 + 7.63046685e-12*temperature**3 + -2.66391752e-16*temperature**4 + 3718.85774 / temperature, 4.12530561 + -0.001612724695*temperature + 2.1758823033333334e-06*temperature**2 + -1.4496341075e-09*temperature**3 + 4.1247475799999997e-13*temperature**4 + 3381.53812 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 4.0172109 + 0.001119910065*temperature + -2.1121938333333332e-07*temperature**2 + 2.85615925e-11*temperature**3 + -2.1581707e-15*temperature**4 + 111.856713 / temperature, 4.30179801 + -0.002374560255*temperature + 7.0527630333333326e-06*temperature**2 + -6.06909735e-09*temperature**3 + 1.8584502480000002e-12*temperature**4 + 294.80804 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 4.16500285 + 0.00245415847*temperature + -6.337974166666666e-07*temperature**2 + 9.27964965e-11*temperature**3 + -5.7581661e-15*temperature**4 + -17861.7877 / temperature, 4.27611269 + -0.0002714112085*temperature + 5.5778567000000005e-06*temperature**2 + -5.394270325e-09*temperature**3 + 1.724908726e-12*temperature**4 + -17702.5821 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00108845902*temperature + -5.469083933333333e-08*temperature**2 + -2.426049675e-11*temperature**3 + 3.36401984e-15*temperature**4 + -30004.2971 / temperature, 4.19864056 + -0.00101821705*temperature + 2.17346737e-06*temperature**2 + -1.371992655e-09*temperature**3 + 3.54395634e-13*temperature**4 + -30293.7267 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0007439884*temperature + -1.8949200000000001e-07*temperature**2 + 2.5242595e-11*temperature**3 + -1.3506701999999999e-15*temperature**4 + -922.7977 / temperature, 3.298677 + 0.0007041202*temperature + -1.3210739999999999e-06*temperature**2 + 1.41037875e-09*temperature**3 + -4.889707999999999e-13*temperature**4 + -1020.8999 / temperature), + ]) + + def get_species_entropies_r(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792*self.usr_np.log(temperature) + -4.94024731e-05*temperature + 2.49728389e-07*temperature**2 + -5.985546466666667e-11*temperature**3 + 5.0063844e-15*temperature**4 + -3.20502331, 2.34433112*self.usr_np.log(temperature) + 0.00798052075*temperature + -9.7390755e-06*temperature**2 + 6.7190698e-09*temperature**3 + -1.8440294025e-12*temperature**4 + 0.683010238), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.50000001*self.usr_np.log(temperature) + -2.30842973e-11*temperature + 8.0780974e-15*temperature**2 + -1.5783841166666668e-18*temperature**3 + 1.2454933925e-22*temperature**4 + -0.446682914, 2.5*self.usr_np.log(temperature) + 7.05332819e-13*temperature + -9.9795982e-16*temperature**2 + 7.669387733333333e-19*temperature**3 + -2.31933083e-22*temperature**4 + -0.446682853), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784*self.usr_np.log(temperature) + 0.00148308754*temperature + -3.789833345e-07*temperature**2 + 6.982351833333333e-11*temperature**3 + -5.41794485e-15*temperature**4 + 5.45323129, 3.78245636*self.usr_np.log(temperature) + -0.00299673416*temperature + 4.923651005e-06*temperature**2 + -3.2270983633333334e-09*temperature**3 + 8.109320925e-13*temperature**4 + 3.65767573), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.56942078*self.usr_np.log(temperature) + -8.59741137e-05*temperature + 2.097422945e-08*temperature**2 + -3.3392599666666663e-12*temperature**3 + 3.070842275e-16*temperature**4 + 4.78433864, 3.1682671*self.usr_np.log(temperature) + -0.00327931884*temperature + 3.32153198e-06*temperature**2 + -2.0426887466666666e-09*temperature**3 + 5.281649275e-13*temperature**4 + 2.05193346), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.86472886*self.usr_np.log(temperature) + 0.00105650448*temperature + -1.29541379e-07*temperature**2 + 1.01739558e-11*temperature**3 + -3.3298969e-16*temperature**4 + 5.70164073, 4.12530561*self.usr_np.log(temperature) + -0.00322544939*temperature + 3.263823455e-06*temperature**2 + -1.9328454766666666e-09*temperature**3 + 5.155934475e-13*temperature**4 + -0.69043296), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 4.0172109*self.usr_np.log(temperature) + 0.00223982013*temperature + -3.16829075e-07*temperature**2 + 3.808212333333334e-11*temperature**3 + -2.697713375e-15*temperature**4 + 3.78510215, 4.30179801*self.usr_np.log(temperature) + -0.00474912051*temperature + 1.057914455e-05*temperature**2 + -8.0921298e-09*temperature**3 + 2.32306281e-12*temperature**4 + 3.71666245), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 4.16500285*self.usr_np.log(temperature) + 0.00490831694*temperature + -9.50696125e-07*temperature**2 + 1.2372866199999999e-10*temperature**3 + -7.197707625e-15*temperature**4 + 2.91615662, 4.27611269*self.usr_np.log(temperature) + -0.000542822417*temperature + 8.36678505e-06*temperature**2 + -7.192360433333333e-09*temperature**3 + 2.1561359075e-12*temperature**4 + 3.43505074), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249*self.usr_np.log(temperature) + 0.00217691804*temperature + -8.2036259e-08*temperature**2 + -3.2347329e-11*temperature**3 + 4.2050248e-15*temperature**4 + 4.9667701, 4.19864056*self.usr_np.log(temperature) + -0.0020364341*temperature + 3.260201055e-06*temperature**2 + -1.82932354e-09*temperature**3 + 4.429945425e-13*temperature**4 + -0.849032208), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664*self.usr_np.log(temperature) + 0.0014879768*temperature + -2.84238e-07*temperature**2 + 3.3656793333333334e-11*temperature**3 + -1.68833775e-15*temperature**4 + 5.980528, 3.298677*self.usr_np.log(temperature) + 0.0014082404*temperature + -1.981611e-06*temperature**2 + 1.8805050000000002e-09*temperature**3 + -6.112135e-13*temperature**4 + 3.950372), + ]) + + def get_species_gibbs_rt(self, temperature): + h0_rt = self.get_species_enthalpies_rt(temperature) + s0_r = self.get_species_entropies_r(temperature) + return h0_rt - s0_r + + def get_equilibrium_constants(self, temperature): + rt = self.gas_constant * temperature + c0 = self.usr_np.log(self.one_atm / rt) + + g0_rt = self.get_species_gibbs_rt(temperature) + return self._pyro_make_array([ + g0_rt[3] + g0_rt[4] + -1*(g0_rt[1] + g0_rt[2]), + g0_rt[1] + g0_rt[4] + -1*(g0_rt[0] + g0_rt[3]), + g0_rt[1] + g0_rt[7] + -1*(g0_rt[0] + g0_rt[4]), + 2.0*g0_rt[4] + -1*(g0_rt[7] + g0_rt[3]), + g0_rt[0] + -1*-1.0*c0 + -1*2.0*g0_rt[1], + g0_rt[7] + -1*-1.0*c0 + -1*(g0_rt[1] + g0_rt[4]), + g0_rt[2] + -1*-1.0*c0 + -1*2.0*g0_rt[3], + g0_rt[4] + -1*-1.0*c0 + -1*(g0_rt[1] + g0_rt[3]), + g0_rt[5] + -1*-1.0*c0 + -1*(g0_rt[3] + g0_rt[4]), + g0_rt[5] + -1*-1.0*c0 + -1*(g0_rt[1] + g0_rt[2]), + 2.0*g0_rt[4] + -1*(g0_rt[1] + g0_rt[5]), + g0_rt[0] + g0_rt[2] + -1*(g0_rt[1] + g0_rt[5]), + g0_rt[7] + g0_rt[3] + -1*(g0_rt[1] + g0_rt[5]), + g0_rt[2] + g0_rt[4] + -1*(g0_rt[5] + g0_rt[3]), + g0_rt[7] + g0_rt[2] + -1*(g0_rt[5] + g0_rt[4]), + g0_rt[7] + g0_rt[2] + -1*(g0_rt[5] + g0_rt[4]), + g0_rt[6] + -1*-1.0*c0 + -1*2.0*g0_rt[4], + g0_rt[6] + g0_rt[2] + -1*2.0*g0_rt[5], + g0_rt[6] + g0_rt[2] + -1*2.0*g0_rt[5], + g0_rt[0] + g0_rt[5] + -1*(g0_rt[1] + g0_rt[6]), + g0_rt[7] + g0_rt[4] + -1*(g0_rt[1] + g0_rt[6]), + g0_rt[7] + g0_rt[5] + -1*(g0_rt[6] + g0_rt[4]), + g0_rt[7] + g0_rt[5] + -1*(g0_rt[6] + g0_rt[4]), + g0_rt[5] + g0_rt[4] + -1*(g0_rt[6] + g0_rt[3]), + ]) + + def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): + if do_energy is False: + pv_fun = self.get_mixture_specific_heat_cp_mass + he_fun = self.get_mixture_enthalpy_mass + else: + pv_fun = self.get_mixture_specific_heat_cv_mass + he_fun = self.get_mixture_internal_energy_mass + + num_iter = 500 + tol = 1.0e-6 + ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 + t_i = t_guess * ones + + for _ in range(num_iter): + f = enthalpy_or_energy - he_fun(t_i, y) + j = -pv_fun(t_i, y) + dt = -f / j + t_i += dt + if self._pyro_norm(dt, np.inf) < tol: + return t_i + + raise RuntimeError("Temperature iteration failed to converge") + + def get_falloff_rates(self, temperature, concentrations, k_fwd): + ones = self._pyro_zeros_like(temperature) + 1.0 + k_high = self._pyro_make_array([ + 4650000000.0*temperature**0.44, + 95500000000.0*temperature**-0.27, + ]) + + k_low = self._pyro_make_array([ + 57500000000000.0*temperature**-1.4, + 2.76e+19*temperature**-3.2, + ]) + + reduced_pressure = self._pyro_make_array([ + (2.5*concentrations[0] + 16.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8])*k_low[0]/k_high[0], + (2.5*concentrations[0] + 6.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8])*k_low[1]/k_high[1], + ]) + + falloff_center = self._pyro_make_array([ + self.usr_np.log10(0.5*self.usr_np.exp((-1*temperature) / 1e-30) + 0.5*self.usr_np.exp((-1*temperature) / 1.0000000000000002e+30)), + self.usr_np.log10(0.43000000000000005*self.usr_np.exp((-1*temperature) / 1.0000000000000002e+30) + 0.57*self.usr_np.exp((-1*temperature) / 1e-30)), + ]) + + falloff_function = self._pyro_make_array([ + 10**(falloff_center[0] / (1 + ((self.usr_np.log10(reduced_pressure[0]) + -0.4 + -1*0.67*falloff_center[0]) / (0.75 + -1*1.27*falloff_center[0] + -1*0.14*(self.usr_np.log10(reduced_pressure[0]) + -0.4 + -1*0.67*falloff_center[0])))**2)), + 10**(falloff_center[1] / (1 + ((self.usr_np.log10(reduced_pressure[1]) + -0.4 + -1*0.67*falloff_center[1]) / (0.75 + -1*1.27*falloff_center[1] + -1*0.14*(self.usr_np.log10(reduced_pressure[1]) + -0.4 + -1*0.67*falloff_center[1])))**2)), + ])*reduced_pressure/(1+reduced_pressure) + + k_fwd[9] = k_high[0]*falloff_function[0]*ones + k_fwd[16] = k_high[1]*falloff_function[1]*ones + return + + def get_fwd_rate_coefficients(self, temperature, concentrations): + ones = self._pyro_zeros_like(temperature) + 1.0 + k_fwd = [ + self.usr_np.exp(31.192067198532598 + -0.7*self.usr_np.log(temperature) + -1*(8589.851597151493 / temperature)) * ones, + self.usr_np.exp(3.92395157629342 + 2.67*self.usr_np.log(temperature) + -1*(3165.568384724549 / temperature)) * ones, + self.usr_np.exp(13.972514306773938 + 1.3*self.usr_np.log(temperature) + -1*(1829.342520199863 / temperature)) * ones, + self.usr_np.exp(6.551080335043404 + 2.33*self.usr_np.log(temperature) + -1*(7320.978251450734 / temperature)) * ones, + 1300000000000.0*temperature**-1.0 * ones, + 4e+16*temperature**-2.0 * ones, + 6170000000.0*temperature**-0.5 * ones, + 4710000000000.0*temperature**-1.0 * ones, + 8000000000.0 * ones, + 0*temperature, + self.usr_np.exp(24.983124837646084 + -1*(148.41608612272393 / temperature)) * ones, + self.usr_np.exp(23.532668532308907 + -1*(414.09771841210573 / temperature)) * ones, + self.usr_np.exp(24.157253041431556 + -1*(865.9609563076275 / temperature)) * ones, + 20000000000.0 * ones, + self.usr_np.exp(26.832513419710775 + -1*(5500.054796103862 / temperature)) * ones, + self.usr_np.exp(24.11777423045777 + -1*(-250.16649848887016 / temperature)) * ones, + 0*temperature, + self.usr_np.exp(19.083368717027604 + -1*(-709.00553297687 / temperature)) * ones, + self.usr_np.exp(25.357994825176046 + -1*(5556.582802973943 / temperature)) * ones, + self.usr_np.exp(23.85876005287556 + -1*(4000.619345786196 / temperature)) * ones, + self.usr_np.exp(23.025850929940457 + -1*(1804.0853256408905 / temperature)) * ones, + self.usr_np.exp(25.052682521347997 + -1*(3659.8877639501534 / temperature)) * ones, + self.usr_np.exp(21.27715095017285 + -1*(159.96223220682563 / temperature)) * ones, + self.usr_np.exp(9.172638504792172 + 2.0*self.usr_np.log(temperature) + -1*(2008.5483292135248 / temperature)) * ones, + ] + self.get_falloff_rates(temperature, concentrations, k_fwd) + + k_fwd[4] *= (2.5*concentrations[0] + 12.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8]) + k_fwd[5] *= (2.5*concentrations[0] + 12.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8]) + k_fwd[6] *= (2.5*concentrations[0] + 12.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8]) + k_fwd[7] *= (2.5*concentrations[0] + 12.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8]) + k_fwd[8] *= (2.5*concentrations[0] + 12.0*concentrations[7] + concentrations[1] + concentrations[2] + concentrations[3] + concentrations[4] + concentrations[5] + concentrations[6] + concentrations[8]) + return self._pyro_make_array(k_fwd) + + def get_net_rates_of_progress(self, temperature, concentrations): + k_fwd = self.get_fwd_rate_coefficients(temperature, concentrations) + log_k_eq = self.get_equilibrium_constants(temperature) + k_eq = self.usr_np.exp(log_k_eq) + return self._pyro_make_array([ + k_fwd[0]*(concentrations[1]*concentrations[2] + -1*k_eq[0]*concentrations[3]*concentrations[4]), + k_fwd[1]*(concentrations[0]*concentrations[3] + -1*k_eq[1]*concentrations[1]*concentrations[4]), + k_fwd[2]*(concentrations[0]*concentrations[4] + -1*k_eq[2]*concentrations[1]*concentrations[7]), + k_fwd[3]*(concentrations[7]*concentrations[3] + -1*k_eq[3]*concentrations[4]**2.0), + k_fwd[4]*(concentrations[1]**2.0 + -1*k_eq[4]*concentrations[0]), + k_fwd[5]*(concentrations[1]*concentrations[4] + -1*k_eq[5]*concentrations[7]), + k_fwd[6]*(concentrations[3]**2.0 + -1*k_eq[6]*concentrations[2]), + k_fwd[7]*(concentrations[1]*concentrations[3] + -1*k_eq[7]*concentrations[4]), + k_fwd[8]*(concentrations[3]*concentrations[4] + -1*k_eq[8]*concentrations[5]), + k_fwd[9]*(concentrations[1]*concentrations[2] + -1*k_eq[9]*concentrations[5]), + k_fwd[10]*(concentrations[1]*concentrations[5] + -1*k_eq[10]*concentrations[4]**2.0), + k_fwd[11]*(concentrations[1]*concentrations[5] + -1*k_eq[11]*concentrations[0]*concentrations[2]), + k_fwd[12]*(concentrations[1]*concentrations[5] + -1*k_eq[12]*concentrations[7]*concentrations[3]), + k_fwd[13]*(concentrations[5]*concentrations[3] + -1*k_eq[13]*concentrations[2]*concentrations[4]), + k_fwd[14]*(concentrations[5]*concentrations[4] + -1*k_eq[14]*concentrations[7]*concentrations[2]), + k_fwd[15]*(concentrations[5]*concentrations[4] + -1*k_eq[15]*concentrations[7]*concentrations[2]), + k_fwd[16]*(concentrations[4]**2.0 + -1*k_eq[16]*concentrations[6]), + k_fwd[17]*(concentrations[5]**2.0 + -1*k_eq[17]*concentrations[6]*concentrations[2]), + k_fwd[18]*(concentrations[5]**2.0 + -1*k_eq[18]*concentrations[6]*concentrations[2]), + k_fwd[19]*(concentrations[1]*concentrations[6] + -1*k_eq[19]*concentrations[0]*concentrations[5]), + k_fwd[20]*(concentrations[1]*concentrations[6] + -1*k_eq[20]*concentrations[7]*concentrations[4]), + k_fwd[21]*(concentrations[6]*concentrations[4] + -1*k_eq[21]*concentrations[7]*concentrations[5]), + k_fwd[22]*(concentrations[6]*concentrations[4] + -1*k_eq[22]*concentrations[7]*concentrations[5]), + k_fwd[23]*(concentrations[6]*concentrations[3] + -1*k_eq[23]*concentrations[5]*concentrations[4]), + ]) + + def get_net_production_rates(self, rho, temperature, mass_fractions): + c = self.get_concentrations(rho, mass_fractions) + r_net = self.get_net_rates_of_progress(temperature, c) + ones = self._pyro_zeros_like(r_net[0]) + 1.0 + return self._pyro_make_array([ + r_net[4] + r_net[11] + r_net[19] + -1*(r_net[1] + r_net[2]) * ones, + r_net[1] + r_net[2] + -1*(r_net[0] + 2.0*r_net[4] + r_net[5] + r_net[7] + r_net[9] + r_net[10] + r_net[11] + r_net[12] + r_net[19] + r_net[20]) * ones, + r_net[6] + r_net[11] + r_net[13] + r_net[14] + r_net[15] + r_net[17] + r_net[18] + -1*(r_net[0] + r_net[9]) * ones, + r_net[0] + r_net[12] + -1*(r_net[1] + r_net[3] + 2.0*r_net[6] + r_net[7] + r_net[8] + r_net[13] + r_net[23]) * ones, + r_net[0] + r_net[1] + 2.0*r_net[3] + r_net[7] + 2.0*r_net[10] + r_net[13] + r_net[20] + r_net[23] + -1*(r_net[2] + r_net[5] + r_net[8] + r_net[14] + r_net[15] + 2.0*r_net[16] + r_net[21] + r_net[22]) * ones, + r_net[8] + r_net[9] + r_net[19] + r_net[21] + r_net[22] + r_net[23] + -1*(r_net[10] + r_net[11] + r_net[12] + r_net[13] + r_net[14] + r_net[15] + 2.0*r_net[17] + 2.0*r_net[18]) * ones, + r_net[16] + r_net[17] + r_net[18] + -1*(r_net[19] + r_net[20] + r_net[21] + r_net[22] + r_net[23]) * ones, + r_net[2] + r_net[5] + r_net[12] + r_net[14] + r_net[15] + r_net[20] + r_net[21] + r_net[22] + -1*r_net[3] * ones, + 0.0 * ones, + ]) diff --git a/mirgecom/mechanisms/uiuc.py b/mirgecom/mechanisms/uiuc.py new file mode 100644 index 000000000..8a599619d --- /dev/null +++ b/mirgecom/mechanisms/uiuc.py @@ -0,0 +1,294 @@ +# noqa +""" +.. autoclass:: Thermochemistry +""" + + +import numpy as np + + +class Thermochemistry: + """ + .. attribute:: model_name + .. attribute:: num_elements + .. attribute:: num_species + .. attribute:: num_reactions + .. attribute:: num_falloff + .. attribute:: one_atm + + Returns 1 atm in SI units of pressure (Pa). + + .. attribute:: gas_constant + .. attribute:: species_names + .. attribute:: species_indices + + .. automethod:: get_specific_gas_constant + .. automethod:: get_density + .. automethod:: get_pressure + .. automethod:: get_mix_molecular_weight + .. automethod:: get_concentrations + .. automethod:: get_mixture_specific_heat_cp_mass + .. automethod:: get_mixture_specific_heat_cv_mass + .. automethod:: get_mixture_enthalpy_mass + .. automethod:: get_mixture_internal_energy_mass + .. automethod:: get_species_specific_heats_r + .. automethod:: get_species_enthalpies_rt + .. automethod:: get_species_entropies_r + .. automethod:: get_species_gibbs_rt + .. automethod:: get_equilibrium_constants + .. automethod:: get_temperature + .. automethod:: __init__ + """ + + def __init__(self, usr_np=np): + """Initialize thermochemistry object for a mechanism. + + Parameters + ---------- + usr_np + :mod:`numpy`-like namespace providing at least the following functions, + for any array ``X`` of the bulk array type: + + - ``usr_np.log(X)`` (like :data:`numpy.log`) + - ``usr_np.log10(X)`` (like :data:`numpy.log10`) + - ``usr_np.exp(X)`` (like :data:`numpy.exp`) + - ``usr_np.where(X > 0, X_yes, X_no)`` (like :func:`numpy.where`) + - ``usr_np.linalg.norm(X, np.inf)`` (like :func:`numpy.linalg.norm`) + + where the "bulk array type" is a type that offers arithmetic analogous + to :class:`numpy.ndarray` and is used to hold all types of (potentialy + volumetric) "bulk data", such as temperature, pressure, mass fractions, + etc. This parameter defaults to *actual numpy*, so it can be ignored + unless it is needed by the user (e.g. for purposes of + GPU processing or automatic differentiation). + + """ + + self.usr_np = usr_np + self.model_name = 'mechs/uiuc.cti' + self.num_elements = 4 + self.num_species = 7 + self.num_reactions = 3 + self.num_falloff = 0 + + self.one_atm = 101325.0 + self.gas_constant = 8314.46261815324 + self.big_number = 1.0e300 + + self.species_names = ['C2H4', 'O2', 'CO2', 'CO', 'H2O', 'H2', 'N2'] + self.species_indices = {'C2H4': 0, 'O2': 1, 'CO2': 2, 'CO': 3, 'H2O': 4, 'H2': 5, 'N2': 6} + + self.wts = np.array([28.054, 31.998, 44.009, 28.009999999999998, 18.015, 2.016, 28.014]) + self.iwts = 1/self.wts + + def _pyro_zeros_like(self, argument): + # FIXME: This is imperfect, as a NaN will stay a NaN. + return 0 * argument + + def _pyro_make_array(self, res_list): + """This works around (e.g.) numpy.exp not working with object + arrays of numpy scalars. It defaults to making object arrays, however + if an array consists of all scalars, it makes a "plain old" + :class:`numpy.ndarray`. + + See ``this numpy bug `__ + for more context. + """ + + from numbers import Number + all_numbers = all(isinstance(e, Number) for e in res_list) + + dtype = np.float64 if all_numbers else np.object + result = np.empty((len(res_list),), dtype=dtype) + + # 'result[:] = res_list' may look tempting, however: + # https://github.com/numpy/numpy/issues/16564 + for idx in range(len(res_list)): + result[idx] = res_list[idx] + + return result + + def _pyro_norm(self, argument, normord): + """This works around numpy.linalg norm not working with scalars. + + If the argument is a regular ole number, it uses :func:`numpy.abs`, + otherwise it uses ``usr_np.linalg.norm``. + """ + # Wrap norm for scalars + + from numbers import Number + + if isinstance(argument, Number): + return np.abs(argument) + return self.usr_np.linalg.norm(argument, normord) + + def species_name(self, species_index): + return self.species_name[species_index] + + def species_index(self, species_name): + return self.species_indices[species_name] + + def get_specific_gas_constant(self, mass_fractions): + return self.gas_constant * ( + + self.iwts[0]*mass_fractions[0] + + self.iwts[1]*mass_fractions[1] + + self.iwts[2]*mass_fractions[2] + + self.iwts[3]*mass_fractions[3] + + self.iwts[4]*mass_fractions[4] + + self.iwts[5]*mass_fractions[5] + + self.iwts[6]*mass_fractions[6] + ) + + def get_density(self, p, temperature, mass_fractions): + mmw = self.get_mix_molecular_weight(mass_fractions) + rt = self.gas_constant * temperature + return p * mmw / rt + + def get_pressure(self, rho, temperature, mass_fractions): + mmw = self.get_mix_molecular_weight(mass_fractions) + rt = self.gas_constant * temperature + return rho * rt / mmw + + def get_mix_molecular_weight(self, mass_fractions): + return 1/( + + self.iwts[0]*mass_fractions[0] + + self.iwts[1]*mass_fractions[1] + + self.iwts[2]*mass_fractions[2] + + self.iwts[3]*mass_fractions[3] + + self.iwts[4]*mass_fractions[4] + + self.iwts[5]*mass_fractions[5] + + self.iwts[6]*mass_fractions[6] + ) + + def get_concentrations(self, rho, mass_fractions): + return self.iwts * rho * mass_fractions + + def get_mass_average_property(self, mass_fractions, spec_property): + return sum([mass_fractions[i] * spec_property[i] * self.iwts[i] + for i in range(self.num_species)]) + + def get_mixture_specific_heat_cp_mass(self, temperature, mass_fractions): + cp0_r = self.get_species_specific_heats_r(temperature) + cpmix = self.get_mass_average_property(mass_fractions, cp0_r) + return self.gas_constant * cpmix + + def get_mixture_specific_heat_cv_mass(self, temperature, mass_fractions): + cp0_r = self.get_species_specific_heats_r(temperature) - 1.0 + cpmix = self.get_mass_average_property(mass_fractions, cp0_r) + return self.gas_constant * cpmix + + def get_mixture_enthalpy_mass(self, temperature, mass_fractions): + h0_rt = self.get_species_enthalpies_rt(temperature) + hmix = self.get_mass_average_property(mass_fractions, h0_rt) + return self.gas_constant * temperature * hmix + + def get_mixture_internal_energy_mass(self, temperature, mass_fractions): + e0_rt = self.get_species_enthalpies_rt(temperature) - 1.0 + emix = self.get_mass_average_property(mass_fractions, e0_rt) + return self.gas_constant * temperature * emix + + def get_species_specific_heats_r(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116 + 0.0146454151*temperature + -6.71077915e-06*temperature**2 + 1.47222923e-09*temperature**3 + -1.25706061e-13*temperature**4, 3.95920148 + -0.00757052247*temperature + 5.70990292e-05*temperature**2 + -6.91588753e-08*temperature**3 + 2.69884373e-11*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00148308754*temperature + -7.57966669e-07*temperature**2 + 2.09470555e-10*temperature**3 + -2.16717794e-14*temperature**4, 3.78245636 + -0.00299673416*temperature + 9.84730201e-06*temperature**2 + -9.68129509e-09*temperature**3 + 3.24372837e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029 + 0.00441437026*temperature + -2.21481404e-06*temperature**2 + 5.23490188e-10*temperature**3 + -4.72084164e-14*temperature**4, 2.35677352 + 0.00898459677*temperature + -7.12356269e-06*temperature**2 + 2.45919022e-09*temperature**3 + -1.43699548e-13*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561 + 0.00206252743*temperature + -9.98825771e-07*temperature**2 + 2.30053008e-10*temperature**3 + -2.03647716e-14*temperature**4, 3.57953347 + -0.00061035368*temperature + 1.01681433e-06*temperature**2 + 9.07005884e-10*temperature**3 + -9.04424499e-13*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00217691804*temperature + -1.64072518e-07*temperature**2 + -9.7041987e-11*temperature**3 + 1.68200992e-14*temperature**4, 4.19864056 + -0.0020364341*temperature + 6.52040211e-06*temperature**2 + -5.48797062e-09*temperature**3 + 1.77197817e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -4.94024731e-05*temperature + 4.99456778e-07*temperature**2 + -1.79566394e-10*temperature**3 + 2.00255376e-14*temperature**4, 2.34433112 + 0.00798052075*temperature + -1.9478151e-05*temperature**2 + 2.01572094e-08*temperature**3 + -7.37611761e-12*temperature**4), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0014879768*temperature + -5.68476e-07*temperature**2 + 1.0097038e-10*temperature**3 + -6.753351e-15*temperature**4, 3.298677 + 0.0014082404*temperature + -3.963222e-06*temperature**2 + 5.641515e-09*temperature**3 + -2.444854e-12*temperature**4), + ]) + + def get_species_enthalpies_rt(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116 + 0.00732270755*temperature + -2.2369263833333335e-06*temperature**2 + 3.680573075e-10*temperature**3 + -2.51412122e-14*temperature**4 + 4939.88614 / temperature, 3.95920148 + -0.003785261235*temperature + 1.9033009733333333e-05*temperature**2 + -1.7289718825e-08*temperature**3 + 5.3976874600000004e-12*temperature**4 + 5089.77593 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784 + 0.00074154377*temperature + -2.526555563333333e-07*temperature**2 + 5.236763875e-11*temperature**3 + -4.33435588e-15*temperature**4 + -1088.45772 / temperature, 3.78245636 + -0.00149836708*temperature + 3.282434003333333e-06*temperature**2 + -2.4203237725e-09*temperature**3 + 6.48745674e-13*temperature**4 + -1063.94356 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029 + 0.00220718513*temperature + -7.382713466666667e-07*temperature**2 + 1.30872547e-10*temperature**3 + -9.44168328e-15*temperature**4 + -48759.166 / temperature, 2.35677352 + 0.004492298385*temperature + -2.3745208966666665e-06*temperature**2 + 6.14797555e-10*temperature**3 + -2.8739909599999997e-14*temperature**4 + -48371.9697 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561 + 0.001031263715*temperature + -3.329419236666667e-07*temperature**2 + 5.7513252e-11*temperature**3 + -4.07295432e-15*temperature**4 + -14151.8724 / temperature, 3.57953347 + -0.00030517684*temperature + 3.3893811e-07*temperature**2 + 2.26751471e-10*temperature**3 + -1.808848998e-13*temperature**4 + -14344.086 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249 + 0.00108845902*temperature + -5.469083933333333e-08*temperature**2 + -2.426049675e-11*temperature**3 + 3.36401984e-15*temperature**4 + -30004.2971 / temperature, 4.19864056 + -0.00101821705*temperature + 2.17346737e-06*temperature**2 + -1.371992655e-09*temperature**3 + 3.54395634e-13*temperature**4 + -30293.7267 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792 + -2.470123655e-05*temperature + 1.6648559266666665e-07*temperature**2 + -4.48915985e-11*temperature**3 + 4.00510752e-15*temperature**4 + -950.158922 / temperature, 2.34433112 + 0.003990260375*temperature + -6.4927169999999995e-06*temperature**2 + 5.03930235e-09*temperature**3 + -1.4752235220000002e-12*temperature**4 + -917.935173 / temperature), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664 + 0.0007439884*temperature + -1.8949200000000001e-07*temperature**2 + 2.5242595e-11*temperature**3 + -1.3506701999999999e-15*temperature**4 + -922.7977 / temperature, 3.298677 + 0.0007041202*temperature + -1.3210739999999999e-06*temperature**2 + 1.41037875e-09*temperature**3 + -4.889707999999999e-13*temperature**4 + -1020.8999 / temperature), + ]) + + def get_species_entropies_r(self, temperature): + return self._pyro_make_array([ + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.03611116*self.usr_np.log(temperature) + 0.0146454151*temperature + -3.355389575e-06*temperature**2 + 4.907430766666667e-10*temperature**3 + -3.142651525e-14*temperature**4 + 10.3053693, 3.95920148*self.usr_np.log(temperature) + -0.00757052247*temperature + 2.85495146e-05*temperature**2 + -2.3052958433333332e-08*temperature**3 + 6.747109325e-12*temperature**4 + 4.09733096), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.28253784*self.usr_np.log(temperature) + 0.00148308754*temperature + -3.789833345e-07*temperature**2 + 6.982351833333333e-11*temperature**3 + -5.41794485e-15*temperature**4 + 5.45323129, 3.78245636*self.usr_np.log(temperature) + -0.00299673416*temperature + 4.923651005e-06*temperature**2 + -3.2270983633333334e-09*temperature**3 + 8.109320925e-13*temperature**4 + 3.65767573), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.85746029*self.usr_np.log(temperature) + 0.00441437026*temperature + -1.10740702e-06*temperature**2 + 1.7449672933333335e-10*temperature**3 + -1.18021041e-14*temperature**4 + 2.27163806, 2.35677352*self.usr_np.log(temperature) + 0.00898459677*temperature + -3.561781345e-06*temperature**2 + 8.197300733333333e-10*temperature**3 + -3.5924887e-14*temperature**4 + 9.90105222), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.71518561*self.usr_np.log(temperature) + 0.00206252743*temperature + -4.994128855e-07*temperature**2 + 7.6684336e-11*temperature**3 + -5.0911929e-15*temperature**4 + 7.81868772, 3.57953347*self.usr_np.log(temperature) + -0.00061035368*temperature + 5.08407165e-07*temperature**2 + 3.023352946666667e-10*temperature**3 + -2.2610612475e-13*temperature**4 + 3.50840928), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.03399249*self.usr_np.log(temperature) + 0.00217691804*temperature + -8.2036259e-08*temperature**2 + -3.2347329e-11*temperature**3 + 4.2050248e-15*temperature**4 + 4.9667701, 4.19864056*self.usr_np.log(temperature) + -0.0020364341*temperature + 3.260201055e-06*temperature**2 + -1.82932354e-09*temperature**3 + 4.429945425e-13*temperature**4 + -0.849032208), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 3.3372792*self.usr_np.log(temperature) + -4.94024731e-05*temperature + 2.49728389e-07*temperature**2 + -5.985546466666667e-11*temperature**3 + 5.0063844e-15*temperature**4 + -3.20502331, 2.34433112*self.usr_np.log(temperature) + 0.00798052075*temperature + -9.7390755e-06*temperature**2 + 6.7190698e-09*temperature**3 + -1.8440294025e-12*temperature**4 + 0.683010238), + self.usr_np.where(self.usr_np.greater(temperature, 1000.0), 2.92664*self.usr_np.log(temperature) + 0.0014879768*temperature + -2.84238e-07*temperature**2 + 3.3656793333333334e-11*temperature**3 + -1.68833775e-15*temperature**4 + 5.980528, 3.298677*self.usr_np.log(temperature) + 0.0014082404*temperature + -1.981611e-06*temperature**2 + 1.8805050000000002e-09*temperature**3 + -6.112135e-13*temperature**4 + 3.950372), + ]) + + def get_species_gibbs_rt(self, temperature): + h0_rt = self.get_species_enthalpies_rt(temperature) + s0_r = self.get_species_entropies_r(temperature) + return h0_rt - s0_r + + def get_equilibrium_constants(self, temperature): + rt = self.gas_constant * temperature + c0 = self.usr_np.log(self.one_atm / rt) + + g0_rt = self.get_species_gibbs_rt(temperature) + return self._pyro_make_array([ + -0.17364695002734*temperature, + g0_rt[2] + -1*-0.5*c0 + -1*(g0_rt[3] + 0.5*g0_rt[1]), + g0_rt[4] + -1*-0.5*c0 + -1*(g0_rt[5] + 0.5*g0_rt[1]), + ]) + + def get_temperature(self, enthalpy_or_energy, t_guess, y, do_energy=False): + if do_energy is False: + pv_fun = self.get_mixture_specific_heat_cp_mass + he_fun = self.get_mixture_enthalpy_mass + else: + pv_fun = self.get_mixture_specific_heat_cv_mass + he_fun = self.get_mixture_internal_energy_mass + + num_iter = 500 + tol = 1.0e-6 + ones = self._pyro_zeros_like(enthalpy_or_energy) + 1.0 + t_i = t_guess * ones + + for _ in range(num_iter): + f = enthalpy_or_energy - he_fun(t_i, y) + j = -pv_fun(t_i, y) + dt = -f / j + t_i += dt + if self._pyro_norm(dt, np.inf) < tol: + return t_i + + raise RuntimeError("Temperature iteration failed to converge") + + def get_fwd_rate_coefficients(self, temperature, concentrations): + ones = self._pyro_zeros_like(temperature) + 1.0 + k_fwd = [ + self.usr_np.exp(26.594857854425133 + -1*(17864.293439206183 / temperature)) * ones, + self.usr_np.exp(12.693776816787125 + 0.7*self.usr_np.log(temperature) + -1*(6038.634401985189 / temperature)) * ones, + self.usr_np.exp(18.302572655472037 + -1*(17612.683672456802 / temperature)) * ones, + ] + + return self._pyro_make_array(k_fwd) + + def get_net_rates_of_progress(self, temperature, concentrations): + k_fwd = self.get_fwd_rate_coefficients(temperature, concentrations) + log_k_eq = self.get_equilibrium_constants(temperature) + k_eq = self.usr_np.exp(log_k_eq) + return self._pyro_make_array([ + k_fwd[0]*concentrations[0]**0.5*concentrations[1]**0.65, + k_fwd[1]*(concentrations[3]*concentrations[1]**0.5 + -1*k_eq[1]*concentrations[2]), + k_fwd[2]*(concentrations[5]*concentrations[1]**0.5 + -1*k_eq[2]*concentrations[4]), + ]) + + def get_net_production_rates(self, rho, temperature, mass_fractions): + c = self.get_concentrations(rho, mass_fractions) + r_net = self.get_net_rates_of_progress(temperature, c) + ones = self._pyro_zeros_like(r_net[0]) + 1.0 + return self._pyro_make_array([ + -1*r_net[0] * ones, + -1*(r_net[0] + 0.5*r_net[1] + 0.5*r_net[2]) * ones, + r_net[1] * ones, + 2.0*r_net[0] + -1*r_net[1] * ones, + r_net[2] * ones, + 2.0*r_net[0] + -1*r_net[2] * ones, + 0.0 * ones, + ]) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 0d314c17d..2262cdadd 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,7 +1,7 @@ r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. -.. autofunction:: make_pyrometheus_mechanism_class -.. autofunction:: make_pyrometheus_mechanism +.. autofunction:: get_pyrometheus_wrapper_class +.. autofunction:: get_pyrometheus_wrapper_class_from_cantera """ __copyright__ = """ @@ -29,7 +29,7 @@ """ -def _pyro_thermochem_wrapper_class(cantera_soln, temperature_niter=5): +def get_pyrometheus_wrapper_class(pyro_class, temperature_niter=5): """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. Dynamically creates a class that inherits from a @@ -44,13 +44,11 @@ def _pyro_thermochem_wrapper_class(cantera_soln, temperature_niter=5): Parameters ---------- - cantera_soln: Cantera solution - Cantera solution from which to create the thermochemical mechanism + pyro_class: :class:`pyrometheus.Thermochemistry` + Pyro thermochemical mechanism to wrap temperature_niter: integer Number of Newton iterations in `get_temperature` (default=5) """ - import pyrometheus as pyro - pyro_class = pyro.get_thermochem_class(cantera_soln) class PyroWrapper(pyro_class): @@ -109,46 +107,40 @@ def get_temperature(self, energy, temperature_guess, species_mass_fractions): return PyroWrapper -def make_pyrometheus_mechanism_class(cantera_soln, temperature_niter=5): - """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism class. +def get_pyrometheus_wrapper_class_from_cantera(cantera_soln, temperature_niter=5): + """Return a MIRGE-compatible wrapper for a :mod:`pyrometheus` mechanism class. - This routine creates and returns an instance of a :mod:`pyrometheus` - thermochemical mechanism for use in a MIRGE-Com fluid EOS. + Cantera-based interface that creates a Pyrometheus mechanism + :class:`pyrometheus.Thermochemistry` class on-the-fly using + a Cantera solution. Parameters ---------- - actx: :class:`arraycontext.ArrayContext` - Array context from which to get the numpy-like namespace for - :mod:`pyrometheus` - cantera_soln: - Cantera Solution for the thermochemical mechanism to be used - - Returns - ------- - :mod:`pyrometheus` ThermoChem class + cantera_soln: Cantera solution + Cantera solution from which to create the thermochemical mechanism + temperature_niter: integer + Number of Newton iterations in `get_temperature` (default=5) """ - return _pyro_thermochem_wrapper_class(cantera_soln, temperature_niter) + import pyrometheus as pyro + pyro_class = pyro.get_thermochem_class(cantera_soln) + return get_pyrometheus_wrapper_class(pyro_class, + temperature_niter=temperature_niter) # backwards compat -def make_pyrometheus_mechanism(actx, cantera_soln): - """Create a :mod:`pyrometheus` thermochemical (or equivalent) mechanism. +def make_pyrometheus_mechanism_class(cantera_soln, temperature_niter=5): + """Deprecate this interface to get_pyrometheus_mechanism_class.""" + from warnings import warn + warn("make_pyrometheus_mechanism_class is deprecated." + " use get_pyrometheus_wrapper_class_from_cantera.") + return get_pyrometheus_wrapper_class_from_cantera( + cantera_soln, temperature_niter=temperature_niter) - This routine creates and returns an instance of a :mod:`pyrometheus` - thermochemical mechanism for use in a MIRGE-Com fluid EOS. - Parameters - ---------- - actx: :class:`arraycontext.ArrayContext` - Array context from which to get the numpy-like namespace for - :mod:`pyrometheus` - cantera_soln: - Cantera Solution for the thermochemical mechanism to be used - - Returns - ------- - :mod:`pyrometheus` ThermoChem class - """ +def make_pyro_thermochem_wrapper_class(cantera_soln, temperature_niter=5): + """Deprecate this interface to pyro_wrapper_class_from_cantera.""" from warnings import warn - warn("make_pyrometheus_mechanism is deprecated and will disappear in Q1/2022") - return _pyro_thermochem_wrapper_class(cantera_soln)(actx.np) + warn("make_pyrometheus_mechanism is deprecated." + " use get_pyrometheus_wrapper_class_from_cantera.") + return get_pyrometheus_wrapper_class_from_cantera( + cantera_soln, temperature_niter=temperature_niter) diff --git a/setup.cfg b/setup.cfg index 6a5a17dfd..0a5e303f8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [flake8] ignore = E127,E128,E123,E226,E241,W503,N818 -exclude = .*,\#* +exclude = .*,\#*,mirgecom/mechanisms/*.py max-line-length=85 inline-quotes = " From ef4bd40e5da18b407244e82f6e67135c5fdbc5c3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 8 Apr 2022 13:04:05 -0500 Subject: [PATCH 570/873] Broadcast the global mesh size. --- mirgecom/simutil.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 9351049a3..b0945cd56 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -377,6 +377,7 @@ def generate_and_distribute_mesh(comm, generate_mesh): else: local_mesh = mesh_dist.receive_mesh_part() + global_nelements = comm.bcast(global_nelements) return local_mesh, global_nelements From 941d9bd8182b1b8e6e99a595cd103f5c8ecee107 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 8 Apr 2022 13:30:02 -0500 Subject: [PATCH 571/873] configure to avoid doc failures with pre-generated mechanisms --- .pylintrc.yml | 2 ++ mirgecom/thermochemistry.py | 17 +++++++++-------- setup.cfg | 1 + 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.pylintrc.yml b/.pylintrc.yml index 66466d48d..1cf383a82 100644 --- a/.pylintrc.yml +++ b/.pylintrc.yml @@ -4,3 +4,5 @@ val: all - arg: enable val: E +- arg: ignore + val: mirgecom/mechanisms diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 2262cdadd..e54fc2716 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -36,17 +36,18 @@ def get_pyrometheus_wrapper_class(pyro_class, temperature_niter=5): :class:`pyrometheus.Thermochemistry` class and overrides a couple of the methods to adapt it to :mod:`mirgecom`'s needs. - - get_concentrations: overrides :class:`pyrometheus.Thermochemistry` version - of the same function, pinning any negative concentrations due to slightly - negative massfractions (which are OK) back to 0. - - get_temperature: MIRGE-specific interface to use a hard-coded Newton solver - to find a temperature from an input state. + - get_concentrations: overrides :class:`pyrometheus.Thermochemistry` version + of the same function, pinning any negative concentrations due to slightly + negative massfractions (which are OK) back to 0. + + - get_temperature: MIRGE-specific interface to use a hard-coded Newton solver + to find a temperature from an input state. Parameters ---------- pyro_class: :class:`pyrometheus.Thermochemistry` Pyro thermochemical mechanism to wrap - temperature_niter: integer + temperature_niter: int Number of Newton iterations in `get_temperature` (default=5) """ @@ -116,9 +117,9 @@ def get_pyrometheus_wrapper_class_from_cantera(cantera_soln, temperature_niter=5 Parameters ---------- - cantera_soln: Cantera solution + cantera_soln: Cantera solution from which to create the thermochemical mechanism - temperature_niter: integer + temperature_niter: int Number of Newton iterations in `get_temperature` (default=5) """ import pyrometheus as pyro diff --git a/setup.cfg b/setup.cfg index 0a5e303f8..5273c9cca 100644 --- a/setup.cfg +++ b/setup.cfg @@ -10,4 +10,5 @@ multiline-quotes = """ [pydocstyle] inherit=false match = .*\.py +match_dir = (\.|mirgecom|test|examples|doc|bin) convention=numpy From 58a1e94dc6d657cbf04217673d4a095deb790c56 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 13 Apr 2022 18:09:50 -0500 Subject: [PATCH 572/873] Update grad_t handling for adiabatic wall boundary, only do grad_y processing if there are species present. --- mirgecom/boundary.py | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 3baf39b7a..565f6b912 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -856,14 +856,18 @@ def temperature_bc(self, state_minus, **kwargs): def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): """Return grad(CV) to be used in the boundary calculation of viscous flux.""" - from mirgecom.fluid import species_mass_fraction_gradient - grad_y_minus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) - grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) - grad_species_mass_plus = 0.*grad_y_plus - - for i in range(state_minus.nspecies): - grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] - + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + grad_species_mass_plus = 1.*grad_cv_minus.species_mass + if state_minus.nspecies > 0: + from mirgecom.fluid import species_mass_fraction_gradient + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, + grad_cv_minus) + grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) + grad_species_mass_plus = 0.*grad_y_plus + + for i in range(state_minus.nspecies): + grad_species_mass_plus[i] = \ + (state_minus.mass_density*grad_y_plus[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) return make_conserved(grad_cv_minus.dim, mass=grad_cv_minus.mass, @@ -964,14 +968,18 @@ def temperature_bc(self, state_minus, **kwargs): def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): """Return grad(CV) to be used in the boundary calculation of viscous flux.""" - from mirgecom.fluid import species_mass_fraction_gradient - grad_y_minus = species_mass_fraction_gradient(state_minus.cv, grad_cv_minus) - grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) - grad_species_mass_plus = 0.*grad_y_plus - - for i in range(state_minus.nspecies): - grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] - + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + grad_species_mass_plus = 1.*grad_cv_minus.species_mass + if state_minus.nspecies > 0: + from mirgecom.fluid import species_mass_fraction_gradient + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, + grad_cv_minus) + grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) + grad_species_mass_plus = 0.*grad_y_plus + + for i in range(state_minus.nspecies): + grad_species_mass_plus[i] = \ + (state_minus.mass_density*grad_y_plus[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) return make_conserved(grad_cv_minus.dim, mass=grad_cv_minus.mass, @@ -981,7 +989,7 @@ def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): """Return grad(temperature) to be used in viscous flux at wall.""" - return grad_t_minus - np.outer(grad_t_minus@normal, normal) + return grad_t_minus - np.dot(grad_t_minus, normal)*normal def viscous_wall_flux(self, discr, btag, gas_model, state_minus, grad_cv_minus, grad_t_minus, From 53c8aab74c4f4099e491c785ca070ffe3f0c2d87 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 13 Apr 2022 19:00:05 -0500 Subject: [PATCH 573/873] Add SymmetryBoundary, see what shakes loose. --- mirgecom/boundary.py | 156 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 565f6b912..aab3cb0d6 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -1016,3 +1016,159 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, return self._boundary_quantity( discr, btag, quantity=f_ext@normal) + + +class SymmetryBoundary(PrescribedFluidBoundary): + r"""Boundary condition implementing symmetry/slip wall boundary. + + a.k.a. Reflective inviscid wall boundary + + This class implements an adiabatic reflective slip boundary given + by + $\mathbf{q^{+}} = [\rho^{-}, (\rho{E})^{-}, (\rho\vec{V})^{-} + - 2((\rho\vec{V})^{-}\cdot\hat{\mathbf{n}}) \hat{\mathbf{n}}]$ + wherein the normal component of velocity at the wall is 0, and + tangential components are preserved. These perfectly reflecting + conditions are used by the forward-facing step case in + [Hesthaven_2008]_, Section 6.6, and correspond to the characteristic + boundary conditions described in detail in [Poinsot_1992]_. + + .. automethod:: adiabatic_wall_state_for_advection + .. automethod:: adiabatic_wall_state_for_diffusion + .. automethod:: adiabatic_slip_grad_av + """ + + def __init__(self): + """Initialize the boundary condition object.""" + PrescribedFluidBoundary.__init__( + self, boundary_state_func=self.adiabatic_wall_state_for_advection, + inviscid_flux_func=self.inviscid_wall_flux, + viscous_flux_func=self.viscous_wall_flux, + boundary_temperature_func=self.temperature_bc, + boundary_gradient_cv_func=self.grad_cv_bc + ) + + def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, + state_minus, **kwargs): + """Return state with opposite normal momentum.""" + actx = state_minus.array_context + nhat = thaw(discr.normal(btag), actx) + + mom_plus = \ + (state_minus.momentum_density + - 2*(np.dot(state_minus.momentum_density, nhat)*nhat)) + + cv_plus = make_conserved( + state_minus.dim, mass=state_minus.mass_density, + energy=state_minus.energy_density, momentum=mom_plus, + species_mass=state_minus.species_mass_density + ) + return make_fluid_state(cv=cv_plus, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, + state_minus, **kwargs): + """Return state with 0 velocities and energy(Twall).""" + actx = state_minus.array_context + nhat = thaw(discr.normal(btag), actx) + + mom_plus = \ + (state_minus.momentum_density + - 2*(np.dot(state_minus.momentum_density, nhat)*nhat)) + + cv_plus = make_conserved( + state_minus.dim, mass=state_minus.mass_density, + energy=state_minus.energy_density, momentum=mom_plus, + species_mass=state_minus.species_mass_density + ) + return make_fluid_state(cv=cv_plus, gas_model=gas_model, + temperature_seed=state_minus.temperature) + + def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, + numerical_flux_func=inviscid_flux_rusanov, **kwargs): + """Return Riemann flux using state with mom opposite of interior state.""" + wall_state = self.adiabatic_wall_state_for_advection( + discr, btag, gas_model, state_minus) + state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) + + from mirgecom.inviscid import inviscid_facial_flux + return self._boundary_quantity( + discr, btag, + inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=numerical_flux_func, + local=True), + **kwargs) + + def temperature_bc(self, state_minus, **kwargs): + """Get temperature value used in grad(T).""" + return state_minus.temperature + + def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): + """Return grad(CV) to be used in the boundary calculation of viscous flux.""" + grad_species_mass_plus = 1.*grad_cv_minus.species_mass + if state_minus.nspecies > 0: + from mirgecom.fluid import species_mass_fraction_gradient + grad_y_minus = species_mass_fraction_gradient(state_minus.cv, + grad_cv_minus) + grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) + grad_species_mass_plus = 0.*grad_y_plus + + for i in range(state_minus.nspecies): + grad_species_mass_plus[i] = \ + (state_minus.mass_density*grad_y_plus[i] + + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) + + return make_conserved(grad_cv_minus.dim, + mass=grad_cv_minus.mass, + energy=grad_cv_minus.energy, + momentum=grad_cv_minus.momentum, + species_mass=grad_species_mass_plus) + + def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): + """Return grad(temperature) to be used in viscous flux at wall.""" + return grad_t_minus - np.dot(grad_t_minus, normal)*normal + + def viscous_wall_flux(self, discr, btag, gas_model, state_minus, + grad_cv_minus, grad_t_minus, + numerical_flux_func=viscous_flux_central, + **kwargs): + """Return the boundary flux for the divergence of the viscous flux.""" + from mirgecom.viscous import viscous_flux + actx = state_minus.array_context + normal = thaw(discr.normal(btag), actx) + + state_plus = self.adiabatic_wall_state_for_diffusion( + discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus) + + grad_cv_plus = self.grad_cv_bc(state_minus=state_minus, + grad_cv_minus=grad_cv_minus, + normal=normal, **kwargs) + grad_t_plus = self.grad_temperature_bc(grad_t_minus, normal) + + # Note that [Mengaldo_2014]_ uses F_v(Q_bc, dQ_bc) here and + # *not* the numerical viscous flux as advised by [Bassi_1997]_. + f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, + grad_t=grad_t_plus) + + return self._boundary_quantity( + discr, btag, + quantity=f_ext@normal) + + def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): + """Get the exterior grad(Q) on the boundary.""" + # Grab some boundary-relevant data + dim, = grad_av_minus.mass.shape + actx = grad_av_minus.mass[0].array_context + nhat = thaw(discr.norm(btag), actx) + + # Subtract 2*wall-normal component of q + # to enforce q=0 on the wall + s_mom_normcomp = np.outer(nhat, + np.dot(grad_av_minus.momentum, nhat)) + s_mom_flux = grad_av_minus.momentum - 2*s_mom_normcomp + + # flip components to set a neumann condition + return make_conserved(dim, mass=-grad_av_minus.mass, + energy=-grad_av_minus.energy, + momentum=-s_mom_flux, + species_mass=-grad_av_minus.species_mass) From 1eb78355a414bb79340117c7c7b84a8e423cc065 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Fri, 15 Apr 2022 08:32:35 -0700 Subject: [PATCH 574/873] Add lazy test for doublemach example - exposes a bug --- examples/doublemach-mpi-lazy.py | 1 + 1 file changed, 1 insertion(+) create mode 120000 examples/doublemach-mpi-lazy.py diff --git a/examples/doublemach-mpi-lazy.py b/examples/doublemach-mpi-lazy.py new file mode 120000 index 000000000..45cf7ea59 --- /dev/null +++ b/examples/doublemach-mpi-lazy.py @@ -0,0 +1 @@ +doublemach-mpi.py \ No newline at end of file From 55beeb7d8fb00d06bf98d6bc0f575cd2a3f76a28 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 21 Apr 2022 12:40:08 -0700 Subject: [PATCH 575/873] Update for changes in sub-package container handling. --- mirgecom/fluid.py | 3 ++- test/test_flux.py | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 5a21da473..0b532146b 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -222,7 +222,8 @@ class ConservedVars: @property def array_context(self): """Return an array context for the :class:`ConservedVars` object.""" - return self.mass.array_context + from arraycontext import get_container_context_recursively + return get_container_context_recursively(self.mass) @property def dim(self): diff --git a/test/test_flux.py b/test/test_flux.py index 6b1dc0a11..e89e89710 100644 --- a/test/test_flux.py +++ b/test/test_flux.py @@ -93,7 +93,9 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): y1[i] = 2*(i+1) c1 = np.sqrt(gamma*p1/rho1) - mass_int = DOFArray(actx, data=(actx.from_numpy(np.array(rho0)), )) + rho0_dof_array = DOFArray(actx, data=(actx.from_numpy(np.array(rho0)),)) + + mass_int = 1.*rho0_dof_array vel_int = make_obj_array([vel0[idir] for idir in range(dim)]) mom_int = mass_int*vel_int energy_int = p0/0.4 + 0.5 * np.dot(mom_int, mom_int)/mass_int @@ -168,10 +170,19 @@ def test_lfr_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) - flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, - energy=energy_flux_exact, - momentum=mom_flux_norm_exact, - species_mass=species_mass_flux_exact) + exact_massflux = DOFArray(actx, data=(actx.from_numpy(mass_flux_exact),)) + exact_energyflux = DOFArray(actx, data=(actx.from_numpy(energy_flux_exact),)) + exact_momflux = make_obj_array( + [DOFArray(actx, data=(actx.from_numpy(mom_flux_norm_exact[i]),)) + for i in range(dim)]) + exact_specflux = make_obj_array( + [DOFArray(actx, data=(actx.from_numpy(species_mass_flux_exact[i]),)) + for i in range(nspecies)]) + + flux_bnd_exact = make_conserved(dim, mass=exact_massflux, + energy=exact_energyflux, + momentum=exact_momflux, + species_mass=exact_specflux) print(f"{flux_bnd=}") print(f"{flux_bnd_exact=}") @@ -362,10 +373,19 @@ def test_hll_flux(actx_factory, nspecies, dim, norm_dir, vel_mag): species_mass_flux_exact = make_obj_array([species_mass_flux_exact[ispec] for ispec in range(nspecies)]) - flux_bnd_exact = make_conserved(dim, mass=mass_flux_exact, - energy=energy_flux_exact, - momentum=mom_flux_norm_exact, - species_mass=species_mass_flux_exact) + exact_massflux = DOFArray(actx, data=(actx.from_numpy(mass_flux_exact),)) + exact_energyflux = DOFArray(actx, data=(actx.from_numpy(energy_flux_exact),)) + exact_momflux = make_obj_array( + [DOFArray(actx, data=(actx.from_numpy(mom_flux_norm_exact[i]),)) + for i in range(dim)]) + exact_specflux = make_obj_array( + [DOFArray(actx, data=(actx.from_numpy(species_mass_flux_exact[i]),)) + for i in range(nspecies)]) + + flux_bnd_exact = make_conserved(dim, mass=exact_massflux, + energy=exact_energyflux, + momentum=exact_momflux, + species_mass=exact_specflux) print(f"{flux_bnd=}") print(f"{flux_bnd_exact=}") From 1c880252bcae85e713523fd1da0cd64de28bf688 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 03:06:56 -0500 Subject: [PATCH 576/873] Update requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2d720837b..a32c3eb8e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,12 +12,12 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/kaushikcfd/loopy.git@pytato-array-context-transforms#egg=loopy +--editable git+https://github.com/kaushikcfd/loopy.git#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/kaushikcfd/meshmode.git@pytato-array-context-transforms#egg=meshmode +--editable git+https://github.com/kaushikcfd/meshmode.git#meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From 7e1ff9641654868c1486f20704ad28ba02e00aa5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 03:17:05 -0500 Subject: [PATCH 577/873] Correct mistake in requirements --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a32c3eb8e..c792da372 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ pyyaml --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/kaushikcfd/meshmode.git#meshmode +--editable git+https://github.com/kaushikcfd/meshmode.git#egg=meshmode --editable git+https://github.com/inducer/grudge.git#egg=grudge --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus From f5261ceb0ba9a0b0aff69ac5ca98d41a9abb650b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 04:01:12 -0500 Subject: [PATCH 578/873] Add minikanren to reqs --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index c792da372..a0c69da42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,7 @@ pymetis importlib-resources psutil pyyaml +git+https://github.com/pythological/kanren.git#egg=miniKanren # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic From b8f7ef9af6be7b45d1671da0118b2702463b66e6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 04:20:46 -0500 Subject: [PATCH 579/873] Use Kaushiks AV smoothness indicator fix --- mirgecom/artificial_viscosity.py | 40 +++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 56b20f678..003cf6982 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -299,16 +299,38 @@ def highest_mode(grp): uhat = modal_map(u) # Compute smoothness indicator value - indicator = DOFArray( - actx, - data=tuple( - actx.call_loopy( - indicator_prg(), - vec=uhat[grp.index], - modes_active_flag=highest_mode(grp))["result"] - for grp in discr.discr_from_dd("vol").groups + if actx.supports_nonscalar_broadcasting: + from meshmode.transform_metadata import DiscretizationDOFAxisTag + indicator = DOFArray( + actx, + data=tuple( + actx.tag_axis( + 1, + DiscretizationDOFAxisTag(), + actx.np.broadcast_to( + ((actx.einsum("ek,k->e", + uhat[grp.index]**2, + highest_mode(grp)) + / (actx.einsum("ej->e", + (uhat[grp.index]**2+(1e-12/grp.nunit_dofs)) + ))) + .reshape(-1, 1)), + uhat[grp.index].shape)) + for grp in discr.discr_from_dd("vol").groups + ) + ) + else: + indicator = DOFArray( + actx, + data=tuple( + actx.call_loopy( + indicator_prg(), + vec=uhat[grp.index], + modes_active_flag=highest_mode(grp) + )["result"] + for grp in discr.discr_from_dd("vol").groups + ) ) - ) indicator = actx.np.log10(indicator + 1.0e-12) # Compute artificial viscosity percentage based on indicator and set parameters From 57e5e5b9be49c6c6c6df74d8dce6095e5a64ec91 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 05:30:32 -0500 Subject: [PATCH 580/873] Use grudge util to interp to quad --- mirgecom/artificial_viscosity.py | 16 +++++----------- mirgecom/gas_model.py | 20 +++++++------------- mirgecom/navierstokes.py | 17 ++++++----------- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 003cf6982..28a55540a 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -97,15 +97,15 @@ import numpy as np from pytools import memoize_in, keyed_memoize_in - +from functools import partial from meshmode.dof_array import thaw, DOFArray from mirgecom.flux import gradient_flux_central, divergence_flux_central from mirgecom.operators import div_operator, grad_operator from grudge.trace_pair import ( - TracePair, - interior_trace_pairs + interior_trace_pairs, + tracepair_with_discr_tag ) from grudge.dof_desc import ( DOFDesc, @@ -171,14 +171,8 @@ def av_laplacian_operator(discr, boundaries, fluid_state, alpha, def interp_to_vol_quad(u): return op.project(discr, "vol", dd_vol, u) - def interp_to_surf_quad(utpair): - local_dd = utpair.dd - local_dd_quad = local_dd.with_discr_tag(quadrature_tag) - return TracePair( - local_dd_quad, - interior=op.project(discr, local_dd, local_dd_quad, utpair.int), - exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) - ) + interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll=discr, + discr_tag=quadrature_tag) # Get smoothness indicator based on mass component kappa = kwargs.get("kappa", 1.0) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index c0c373927..795b71ae8 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -44,6 +44,7 @@ THE SOFTWARE. """ import numpy as np # noqa +from functools import partial from meshmode.dof_array import DOFArray # noqa from dataclasses import dataclass from arraycontext import dataclass_array_container @@ -60,10 +61,9 @@ ) from grudge.dof_desc import DOFDesc, as_dofdesc from grudge.trace_pair import ( - TracePair, - interior_trace_pairs + interior_trace_pairs, + tracepair_with_discr_tag ) -import grudge.op as op @dataclass(frozen=True) @@ -432,14 +432,8 @@ def make_operator_fluid_states(discr, volume_state, gas_model, boundaries, dd_quad_vol = DOFDesc("vol", quadrature_tag) # project pair to the quadrature discretization and update dd to quad - def _interp_to_surf_quad(utpair): - local_dd = utpair.dd - local_dd_quad = local_dd.with_discr_tag(quadrature_tag) - return TracePair( - local_dd_quad, - interior=op.project(discr, local_dd, local_dd_quad, utpair.int), - exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) - ) + interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll=discr, + discr_tag=quadrature_tag) domain_boundary_states_quad = { btag: project_fluid_state(discr, dd_base_vol, @@ -452,7 +446,7 @@ def _interp_to_surf_quad(utpair): cv_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature # discretization (if any) - _interp_to_surf_quad(tpair) + interp_to_surf_quad(tpair) for tpair in interior_trace_pairs(discr, volume_state.cv, tag=_FluidCVTag) ] @@ -465,7 +459,7 @@ def _interp_to_surf_quad(utpair): tseed_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature # discretization (if any) - _interp_to_surf_quad(tpair) + interp_to_surf_quad(tpair) for tpair in interior_trace_pairs(discr, volume_state.temperature, tag=_FluidTemperatureTag)] diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index e622acae5..56ba5a7bd 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -61,7 +61,8 @@ from grudge.trace_pair import ( TracePair, - interior_trace_pairs + interior_trace_pairs, + tracepair_with_discr_tag ) from grudge.dof_desc import DOFDesc, as_dofdesc, DISCR_TAG_BASE @@ -334,14 +335,8 @@ def ns_operator(discr, gas_model, state, boundaries, *, time=0.0, # {{{ Local utilities # transfer trace pairs to quad grid, update pair dd - def _interp_to_surf_quad(utpair): - local_dd = utpair.dd - local_dd_quad = local_dd.with_discr_tag(quadrature_tag) - return TracePair( - local_dd_quad, - interior=op.project(discr, local_dd, local_dd_quad, utpair.int), - exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) - ) + interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll=discr, + discr_tag=quadrature_tag) # }}} @@ -358,7 +353,7 @@ def _interp_to_surf_quad(utpair): grad_cv_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature # discretization (if any) - _interp_to_surf_quad(tpair) + interp_to_surf_quad(tpair) for tpair in interior_trace_pairs(discr, grad_cv, tag=_NSGradCVTag) ] @@ -377,7 +372,7 @@ def _interp_to_surf_quad(utpair): grad_t_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature # discretization (if any) - _interp_to_surf_quad(tpair) + interp_to_surf_quad(tpair) for tpair in interior_trace_pairs(discr, grad_t, tag=_NSGradTemperatureTag) ] From e403b1f8c4d4a3396462714db8876541126da843 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 05:34:17 -0500 Subject: [PATCH 581/873] Update NS mixture example with overintegration option. --- examples/nsmix-mpi.py | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 52d0c9665..b0eae2301 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -79,7 +79,7 @@ class MyRuntimeError(RuntimeError): def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, rst_filename=None, actx_class=None, lazy=False, - log_dependent=True): + log_dependent=True, use_overintegration=False): """Drive example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -156,11 +156,27 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + order = 1 discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + ones = discr.zeros(actx) + 1.0 if logmgr: @@ -485,7 +501,7 @@ def my_pre_step(step, t, dt, state): ns_rhs, grad_cv, grad_t = \ ns_operator(discr, state=fluid_state, time=t, boundaries=visc_bnds, gas_model=gas_model, - return_gradients=True) + return_gradients=True, quadrature_tag=quadrature_tag) grad_v = velocity_gradient(cv, grad_cv) chem_rhs = \ pyro_eos.get_species_source_terms(cv, @@ -534,7 +550,8 @@ def my_rhs(t, state): ns_rhs = ns_operator(discr, state=fluid_state, time=t, boundaries=visc_bnds, gas_model=gas_model, gradient_numerical_flux_func=grad_num_flux_func, - viscous_numerical_flux_func=viscous_num_flux_func) + viscous_numerical_flux_func=viscous_num_flux_func, + quadrature_tag=quadrature_tag) cv_rhs = ns_rhs + pyro_eos.get_species_source_terms(cv, fluid_state.temperature) return make_obj_array([cv_rhs, 0*tseed]) @@ -589,6 +606,8 @@ def my_rhs(t, state): import argparse casename = "nsmix" parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", @@ -622,6 +641,7 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent, lazy=lazy) + log_dependent=log_dependent, lazy=lazy, + use_overintegration=args.overintegration) # vim: foldmethod=marker From 206f7464e759f7d1c6b013933ba118b909a1f822 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 07:59:15 -0500 Subject: [PATCH 582/873] Use regular ole pytato array context --- examples/wave.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/wave.py b/examples/wave.py index f575418d0..dee10ea96 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -36,8 +36,11 @@ from mirgecom.wave import wave_operator from mirgecom.integrators import rk4_step -from meshmode.array_context import (PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext) +from meshmode.array_context import ( + PyOpenCLArrayContext, + PytatoPyOpenCLArrayContext +) + from arraycontext import thaw, freeze from mirgecom.profiling import PyOpenCLProfilingArrayContext From 78c8aa332629bb8aa9e0bb89fee4bfe8885abee0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 09:22:03 -0500 Subject: [PATCH 583/873] Revert array context specification. --- test/test_lazy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_lazy.py b/test/test_lazy.py index 0b2badebf..04b119d90 100644 --- a/test/test_lazy.py +++ b/test/test_lazy.py @@ -32,7 +32,7 @@ from arraycontext import freeze, thaw from meshmode.array_context import ( # noqa PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext + PytatoPyOpenCLArrayContext ) from meshmode.array_context import ( # noqa From ba2a8164f8556251cc3059f5dbc45ecc7eaba1b0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 12:29:36 -0500 Subject: [PATCH 584/873] Remove unneeded tags from Euler --- mirgecom/euler.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 9e1512c59..0dc256e91 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -66,14 +66,6 @@ from mirgecom.operators import div_operator -class _EulerCVTag: - pass - - -class _EulerTseedTag: - pass - - def euler_operator(discr, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_flux_rusanov, quadrature_tag=None): From c95c88d2084a559912f2ceef03826e1ec96cae2b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 13:49:22 -0500 Subject: [PATCH 585/873] Fuse with fusion array context --- requirements.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index a0c69da42..0dd945312 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,9 +17,10 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext +--editable git+https://github.com/kaushikcfd/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge ---editable git+https://github.com/inducer/pytato.git#egg=pytato +--editable git+https://github.com/kaushikcfd/grudge.git#egg=grudge +--editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle +--editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From 25a639ec7bbdb69fbbea0ee8fddeb894ce873628 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 28 Apr 2022 16:05:38 -0500 Subject: [PATCH 586/873] Revert back to original reqs. --- requirements.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index 0dd945312..a0c69da42 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,10 +17,9 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/kaushikcfd/arraycontext.git#egg=arraycontext +--editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git#egg=meshmode ---editable git+https://github.com/kaushikcfd/grudge.git#egg=grudge ---editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato +--editable git+https://github.com/inducer/grudge.git#egg=grudge +--editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle ---editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From ae4a68a858fac3a58c0d9cdcab26904147806a48 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Apr 2022 07:28:28 -0500 Subject: [PATCH 587/873] Try adding Kaushiks feinsum pkg to fix flame1d --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index a0c69da42..8e3f5e648 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,3 +23,4 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle +--editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From 52128891f1f6e7443dd2cdfefe65bff883ebb659 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 29 Apr 2022 11:31:59 -0500 Subject: [PATCH 588/873] Fuse fusion array context --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 8e3f5e648..0dd945312 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,10 +17,10 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext +--editable git+https://github.com/kaushikcfd/arraycontext.git#egg=arraycontext --editable git+https://github.com/kaushikcfd/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge ---editable git+https://github.com/inducer/pytato.git#egg=pytato +--editable git+https://github.com/kaushikcfd/grudge.git#egg=grudge +--editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle --editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From 3fede1278d69b9561e3fca8d09084ca276d4f479 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 2 May 2022 07:21:59 -0500 Subject: [PATCH 589/873] Remove production env customization. --- .ci-support/production-testing-env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 60b623e72..01b9902ad 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,8 +8,8 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="symbolic-array-container-support-production" # The base production branch to be installed by emirge -export PRODUCTION_FORK="majosm" # The fork/home of production changes (if any) +export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited # list of driver locations, where each driver location is of the form: From b1026e785722f528cbedc25e4c0eb07a29611229 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 2 May 2022 07:50:45 -0500 Subject: [PATCH 590/873] Rename flux functions in new boundaries. --- doc/discretization.rst | 4 ++-- mirgecom/boundary.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/discretization.rst b/doc/discretization.rst index d6c97e056..1a015de92 100644 --- a/doc/discretization.rst +++ b/doc/discretization.rst @@ -165,7 +165,7 @@ but are not limited to: |mirgecom| currently has LFR, and HLL numerical fluxes available from the :mod:`~mirgecom.inviscid` module. -The LFR numerical flux is implemented by :func:`~mirgecom.inviscid.inviscid_flux_rusanov` as follows: +The LFR numerical flux is implemented by :func:`~mirgecom.inviscid.inviscid_facial_flux_rusanov` as follows: $$ \b{h}_{e}(\b{Q}_h^+, \b{Q}^-_h; \b{n}) = \frac{1}{2}\left( @@ -178,7 +178,7 @@ which penalize the ''jump'' of the state $\left(\b{Q}_h^+ - \b{Q}_h^-\right) \b{n}$ act as an additional source of dissipation, which has a stabilizing effect on the numerics. -The HLL numerical flux is implemented by :func:`~mirgecom.inviscid.inviscid_flux_hll` as follows: +The HLL numerical flux is implemented by :func:`~mirgecom.inviscid.inviscid_facial_flux_hll` as follows: .. math:: \b{h}_{e}(\b{Q}_h^+, \b{Q}^-_h;\b{n}) = diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index d77141437..bb26208a7 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -979,7 +979,7 @@ def isothermal_wall_state(self, discr, btag, gas_model, state_minus, **kwargs): temperature_seed=state_minus.temperature) def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, - numerical_flux_func=inviscid_flux_rusanov, **kwargs): + numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Return Riemann flux using state with mom opposite of interior state.""" wall_cv = make_conserved(dim=state_minus.dim, mass=state_minus.mass_density, @@ -1097,7 +1097,7 @@ def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, temperature_seed=state_minus.temperature) def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, - numerical_flux_func=inviscid_flux_rusanov, **kwargs): + numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Return Riemann flux using state with mom opposite of interior state.""" wall_state = self.adiabatic_wall_state_for_advection( discr, btag, gas_model, state_minus) @@ -1234,7 +1234,7 @@ def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, temperature_seed=state_minus.temperature) def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, - numerical_flux_func=inviscid_flux_rusanov, **kwargs): + numerical_flux_func=inviscid_facial_flux_rusanov, **kwargs): """Return Riemann flux using state with mom opposite of interior state.""" wall_state = self.adiabatic_wall_state_for_advection( discr, btag, gas_model, state_minus) From 48e3810e6d929d549745c56d115bc7b7ae81c100 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 4 May 2022 22:10:03 -0500 Subject: [PATCH 591/873] Compile faster with these changes --- examples/mixture-mpi.py | 63 +++++++++++++++++++++----- mirgecom/artificial_viscosity.py | 77 ++++++++++++++++---------------- 2 files changed, 89 insertions(+), 51 deletions(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index e2a3ab069..203b66ee3 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -45,7 +45,10 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state -from mirgecom.boundary import PrescribedFluidBoundary +from mirgecom.boundary import ( + PrescribedFluidBoundary, + AdiabaticSlipBoundary +) from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture @@ -73,7 +76,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, rst_filename=None, - log_dependent=True, lazy=False): + log_dependent=False, lazy=False): """Drive example.""" cl_ctx = ctx_factory() @@ -111,6 +114,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step + t_final = 1e-8 current_cfl = 1.0 current_dt = 1e-9 @@ -148,12 +152,28 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - order = 3 + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + + order = 1 discr = EagerDGDiscretization( - actx, local_mesh, order=order, mpi_communicator=comm + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm ) nodes = thaw(discr.nodes(), actx) + use_overintegration = False + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + vis_timer = None if logmgr: @@ -188,7 +208,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, pyrometheus_mechanism = make_pyrometheus_mechanism_class(sol)(actx.np) nspecies = pyrometheus_mechanism.num_species - eos = PyrometheusMixture(pyrometheus_mechanism) + eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=300) from mirgecom.gas_model import GasModel, make_fluid_state gas_model = GasModel(eos=eos) from pytools.obj_array import make_obj_array @@ -212,9 +232,13 @@ def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): **kwargs), gas_model, temperature_seed=state_minus.temperature) - boundaries = { - BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) - } + if True: + my_boundary = AdiabaticSlipBoundary() + boundaries = {BTAG_ALL: my_boundary} + else: + boundaries = { + BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) + } if rst_filename: current_t = restart_data["t"] @@ -229,7 +253,12 @@ def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): current_cv = initializer(x_vec=nodes, eos=eos) tseed = 300.0 - current_state = make_fluid_state(current_cv, gas_model, temperature_seed=tseed) + def get_fluid_state(cv, tseed): + return make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) + + construct_fluid_state = actx.compile(get_fluid_state) + current_state = construct_fluid_state(current_cv, tseed) visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ @@ -312,9 +341,12 @@ def my_health_check(dv, component_errors): return health_error + def dummy_pre_step(step, t, dt, state): + return state, dt + def my_pre_step(step, t, dt, state): cv, tseed = state - fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) + fluid_state = construct_fluid_state(cv, tseed) dv = fluid_state.dv try: @@ -370,9 +402,12 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def dummy_post_step(step, t, dt, state): + return state, dt + def my_post_step(step, t, dt, state): cv, tseed = state - fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) + fluid_state = construct_fluid_state(cv, tseed) tseed = fluid_state.temperature # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -382,12 +417,16 @@ def my_post_step(step, t, dt, state): logmgr.tick_after() return make_obj_array([fluid_state.cv, tseed]), dt + def dummy_rhs(t, state): + return make_obj_array([0*state[0], 0*state[1]]) + def my_rhs(t, state): cv, tseed = state fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) return make_obj_array( [euler_operator(discr, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model), + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag), 0*tseed]) current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 850893508..e974a658f 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -97,16 +97,17 @@ import numpy as np from pytools import memoize_in, keyed_memoize_in -from functools import partial +# from functools import partial from meshmode.dof_array import thaw, DOFArray -from mirgecom.flux import gradient_flux_central, divergence_flux_central -from mirgecom.operators import div_operator, grad_operator +from mirgecom.flux import divergence_flux_central +from mirgecom.operators import div_operator + +# from grudge.trace_pair import ( +# interior_trace_pairs, +# tracepair_with_discr_tag +# ) -from grudge.trace_pair import ( - interior_trace_pairs, - tracepair_with_discr_tag -) from grudge.dof_desc import ( DOFDesc, as_dofdesc, @@ -125,8 +126,9 @@ class _AVRTag: pass -def av_laplacian_operator(discr, boundaries, fluid_state, alpha, - boundary_kwargs=None, **kwargs): +def av_laplacian_operator(discr, boundaries, fluid_state, gas_model, alpha, + time=0, operator_states_quad=None, + grad_cv=None, **kwargs): r"""Compute the artificial viscosity right-hand-side. Computes the the right-hand-side term for artificial viscosity. @@ -159,9 +161,6 @@ def av_laplacian_operator(discr, boundaries, fluid_state, alpha, :class:`mirgecom.fluid.ConservedVars` The artificial viscosity operator applied to *q*. """ - if boundary_kwargs is None: - boundary_kwargs = dict() - cv = fluid_state.cv actx = cv.array_context quadrature_tag = kwargs.get("quadrature_tag", None) @@ -171,58 +170,58 @@ def av_laplacian_operator(discr, boundaries, fluid_state, alpha, def interp_to_vol_quad(u): return op.project(discr, "vol", dd_vol, u) - interp_to_surf_quad = partial(tracepair_with_discr_tag, discr, quadrature_tag) + if isinstance(alpha, DOFArray): + alpha = interp_to_vol_quad(alpha) + + if operator_states_quad is None: + from mirgecom.fluid import make_operator_fluid_states + operator_states_quad = make_operator_fluid_states( + discr, fluid_state, gas_model, boundaries, quadrature_tag) + + vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ + operator_states_quad # Get smoothness indicator based on mass component kappa = kwargs.get("kappa", 1.0) s0 = kwargs.get("s0", -6.0) - indicator = smoothness_indicator(discr, cv.mass, kappa=kappa, s0=s0) + indicator = smoothness_indicator(discr, vol_state_quad.mass_density, kappa=kappa, + s0=s0) - def central_flux(utpair): - dd = utpair.dd - normal = thaw(actx, discr.normal(dd)) - return op.project(discr, dd, dd.with_dtag("all_faces"), - # This uses a central scalar flux along nhat: - # flux = 1/2 * (Q- + Q+) * nhat - gradient_flux_central(utpair, normal)) - - cv_bnd = ( - # Rank-local and cross-rank (across parallel partitions) contributions - + sum(central_flux(interp_to_surf_quad(tpair=tpair)) - for tpair in interior_trace_pairs(discr, cv, tag=_AVCVTag)) - # Contributions from boundary fluxes - + sum(boundaries[btag].soln_gradient_flux( - discr, - btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - fluid_state=fluid_state, **boundary_kwargs) for btag in boundaries) - ) + if grad_cv is None: + from mirgecom.navierstokes import grad_cv_operator + grad_cv = grad_cv_operator(discr, gas_model, boundaries, fluid_state, + time=time, quadrature_tag=quadrature_tag, + operator_states_quad=operator_states_quad) # Compute R = alpha*grad(Q) - r = -alpha * indicator \ - * grad_operator(discr, dd_vol, dd_faces, interp_to_vol_quad(cv), cv_bnd) + r = -alpha * indicator * grad_cv + + from grudge.trace_pair import TracePair def central_flux_div(utpair): dd = utpair.dd normal = thaw(actx, discr.normal(dd)) + cv_pair = TracePair(dd=dd, interior=utpair.int.cv, + exterior=utpair.ext.cv) return op.project(discr, dd, dd.with_dtag("all_faces"), # This uses a central vector flux along nhat: # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat - divergence_flux_central(utpair, normal)) + divergence_flux_central(cv_pair, normal)) # Total flux of grad(Q) across element boundaries r_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions - + sum(central_flux_div(interp_to_surf_quad(tpair=tpair)) - for tpair in interior_trace_pairs(discr, r, tag=_AVRTag)) + + sum(central_flux_div(tpair) + for tpair in inter_elem_bnd_states_quad) # Contributions from boundary fluxes + sum(boundaries[btag].av_flux( discr, btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - diffusion=r, **boundary_kwargs) for btag in boundaries) + diffusion=r) for btag in boundaries) ) # Return the AV RHS term - return -div_operator(discr, dd_vol, dd_faces, interp_to_vol_quad(r), r_bnd) + return -div_operator(discr, dd_vol, dd_faces, r, r_bnd) def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): From 12fc36b7147f27c77e7c0babfedef5061b34da92 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 5 May 2022 04:10:22 -0500 Subject: [PATCH 592/873] Fix up av? --- examples/doublemach-mpi.py | 3 +-- mirgecom/artificial_viscosity.py | 15 ++++++--------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index fab18a6f0..18931ee39 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -419,8 +419,7 @@ def my_rhs(t, state): gas_model=gas_model, quadrature_tag=quadrature_tag) + av_laplacian_operator(discr, fluid_state=fluid_state, boundaries=boundaries, - boundary_kwargs={"time": t, - "gas_model": gas_model}, + time=t, gas_model=gas_model, alpha=alpha, s0=s0, kappa=kappa, quadrature_tag=quadrature_tag) ) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index e974a658f..a26fcccc8 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -170,11 +170,8 @@ def av_laplacian_operator(discr, boundaries, fluid_state, gas_model, alpha, def interp_to_vol_quad(u): return op.project(discr, "vol", dd_vol, u) - if isinstance(alpha, DOFArray): - alpha = interp_to_vol_quad(alpha) - if operator_states_quad is None: - from mirgecom.fluid import make_operator_fluid_states + from mirgecom.gas_model import make_operator_fluid_states operator_states_quad = make_operator_fluid_states( discr, fluid_state, gas_model, boundaries, quadrature_tag) @@ -184,7 +181,7 @@ def interp_to_vol_quad(u): # Get smoothness indicator based on mass component kappa = kwargs.get("kappa", 1.0) s0 = kwargs.get("s0", -6.0) - indicator = smoothness_indicator(discr, vol_state_quad.mass_density, kappa=kappa, + indicator = smoothness_indicator(discr, fluid_state.mass, kappa=kappa, s0=s0) if grad_cv is None: @@ -194,12 +191,12 @@ def interp_to_vol_quad(u): operator_states_quad=operator_states_quad) # Compute R = alpha*grad(Q) - r = -alpha * indicator * grad_cv + r_quad = interp_to_vol_quad(-alpha * indicator * grad_cv) from grudge.trace_pair import TracePair def central_flux_div(utpair): - dd = utpair.dd + dd = utpair.dd.with_discr_tag(quadrature_tag) normal = thaw(actx, discr.normal(dd)) cv_pair = TracePair(dd=dd, interior=utpair.int.cv, exterior=utpair.ext.cv) @@ -217,11 +214,11 @@ def central_flux_div(utpair): + sum(boundaries[btag].av_flux( discr, btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - diffusion=r) for btag in boundaries) + diffusion=r_quad) for btag in boundaries) ) # Return the AV RHS term - return -div_operator(discr, dd_vol, dd_faces, r, r_bnd) + return -div_operator(discr, dd_vol, dd_faces, r_quad, r_bnd) def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): From 8053a086a6d924ec1166aaab3a53fa3ab6ab13af Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 5 May 2022 04:29:47 -0500 Subject: [PATCH 593/873] Fix up AV --- mirgecom/artificial_viscosity.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index a26fcccc8..b39c07e8d 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -97,16 +97,16 @@ import numpy as np from pytools import memoize_in, keyed_memoize_in -# from functools import partial +from functools import partial from meshmode.dof_array import thaw, DOFArray from mirgecom.flux import divergence_flux_central from mirgecom.operators import div_operator -# from grudge.trace_pair import ( -# interior_trace_pairs, -# tracepair_with_discr_tag -# ) +from grudge.trace_pair import ( + interior_trace_pairs, + tracepair_with_discr_tag +) from grudge.dof_desc import ( DOFDesc, @@ -167,6 +167,8 @@ def av_laplacian_operator(discr, boundaries, fluid_state, gas_model, alpha, dd_vol = DOFDesc("vol", quadrature_tag) dd_faces = DOFDesc("all_faces", quadrature_tag) + interp_to_surf_quad = partial(tracepair_with_discr_tag, discr, quadrature_tag) + def interp_to_vol_quad(u): return op.project(discr, "vol", dd_vol, u) @@ -181,8 +183,8 @@ def interp_to_vol_quad(u): # Get smoothness indicator based on mass component kappa = kwargs.get("kappa", 1.0) s0 = kwargs.get("s0", -6.0) - indicator = smoothness_indicator(discr, fluid_state.mass, kappa=kappa, - s0=s0) + indicator = smoothness_indicator(discr, fluid_state.mass_density, + kappa=kappa, s0=s0) if grad_cv is None: from mirgecom.navierstokes import grad_cv_operator @@ -191,25 +193,23 @@ def interp_to_vol_quad(u): operator_states_quad=operator_states_quad) # Compute R = alpha*grad(Q) - r_quad = interp_to_vol_quad(-alpha * indicator * grad_cv) - - from grudge.trace_pair import TracePair + r = -alpha * indicator * grad_cv + r_quad = interp_to_vol_quad(r) def central_flux_div(utpair): - dd = utpair.dd.with_discr_tag(quadrature_tag) + dd = utpair.dd normal = thaw(actx, discr.normal(dd)) - cv_pair = TracePair(dd=dd, interior=utpair.int.cv, - exterior=utpair.ext.cv) return op.project(discr, dd, dd.with_dtag("all_faces"), # This uses a central vector flux along nhat: # flux = 1/2 * (grad(Q)- + grad(Q)+) .dot. nhat - divergence_flux_central(cv_pair, normal)) + divergence_flux_central(utpair, normal)) # Total flux of grad(Q) across element boundaries r_bnd = ( # Rank-local and cross-rank (across parallel partitions) contributions - + sum(central_flux_div(tpair) - for tpair in inter_elem_bnd_states_quad) + + sum(central_flux_div(interp_to_surf_quad(tpair=tpair)) + for tpair in interior_trace_pairs(discr, r, tag=_AVRTag)) + # Contributions from boundary fluxes + sum(boundaries[btag].av_flux( discr, From e25b66defe4adae0fd45d63831de67db35c6d476 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 5 May 2022 14:57:25 -0500 Subject: [PATCH 594/873] Fix up AV to work with separated fluid states/grad --- mirgecom/artificial_viscosity.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index b39c07e8d..071277804 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -127,8 +127,8 @@ class _AVRTag: def av_laplacian_operator(discr, boundaries, fluid_state, gas_model, alpha, - time=0, operator_states_quad=None, - grad_cv=None, **kwargs): + kappa=1., s0=-6., time=0, operator_states_quad=None, + grad_cv=None, quadrature_tag=None): r"""Compute the artificial viscosity right-hand-side. Computes the the right-hand-side term for artificial viscosity. @@ -163,7 +163,6 @@ def av_laplacian_operator(discr, boundaries, fluid_state, gas_model, alpha, """ cv = fluid_state.cv actx = cv.array_context - quadrature_tag = kwargs.get("quadrature_tag", None) dd_vol = DOFDesc("vol", quadrature_tag) dd_faces = DOFDesc("all_faces", quadrature_tag) @@ -181,8 +180,6 @@ def interp_to_vol_quad(u): operator_states_quad # Get smoothness indicator based on mass component - kappa = kwargs.get("kappa", 1.0) - s0 = kwargs.get("s0", -6.0) indicator = smoothness_indicator(discr, fluid_state.mass_density, kappa=kappa, s0=s0) @@ -194,7 +191,6 @@ def interp_to_vol_quad(u): # Compute R = alpha*grad(Q) r = -alpha * indicator * grad_cv - r_quad = interp_to_vol_quad(r) def central_flux_div(utpair): dd = utpair.dd @@ -214,11 +210,11 @@ def central_flux_div(utpair): + sum(boundaries[btag].av_flux( discr, btag=as_dofdesc(btag).with_discr_tag(quadrature_tag), - diffusion=r_quad) for btag in boundaries) + diffusion=r) for btag in boundaries) ) # Return the AV RHS term - return -div_operator(discr, dd_vol, dd_faces, r_quad, r_bnd) + return -div_operator(discr, dd_vol, dd_faces, interp_to_vol_quad(r), r_bnd) def smoothness_indicator(discr, u, kappa=1.0, s0=-6.0): From 6851c434e8641b784cc9545348c5cc3d4437755f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 6 May 2022 08:30:17 -0500 Subject: [PATCH 595/873] Merge fusion_actx --- requirements.txt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 4dc2b033d..0dd945312 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,17 +8,19 @@ pymetis importlib-resources psutil pyyaml +git+https://github.com/pythological/kanren.git#egg=miniKanren # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/inducer/loopy.git#egg=loopy +--editable git+https://github.com/kaushikcfd/loopy.git#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext ---editable git+https://github.com/inducer/meshmode.git#egg=meshmode ---editable git+https://github.com/inducer/grudge.git#egg=grudge ---editable git+https://github.com/inducer/pytato.git#egg=pytato +--editable git+https://github.com/kaushikcfd/arraycontext.git#egg=arraycontext +--editable git+https://github.com/kaushikcfd/meshmode.git#egg=meshmode +--editable git+https://github.com/kaushikcfd/grudge.git#egg=grudge +--editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato --editable git+https://github.com/ecisneros8/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle +--editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From 0587dfa8fda83a9ac1f64e5a5047ea3b4eb00e10 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 8 May 2022 10:02:40 -0500 Subject: [PATCH 596/873] Update AV test after interface changes. --- test/test_av.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/test_av.py b/test/test_av.py index afe80876a..e6717ce01 100644 --- a/test/test_av.py +++ b/test/test_av.py @@ -189,7 +189,7 @@ def test_artificial_viscosity(ctx_factory, dim, order): zeros = discr.zeros(actx) class TestBoundary: - def soln_gradient_flux(self, disc, btag, fluid_state, gas_model, **kwargs): + def cv_gradient_flux(self, disc, btag, state_minus, gas_model, **kwargs): fluid_state_int = project_fluid_state(disc, "vol", btag, fluid_state, gas_model) cv_int = fluid_state_int.cv @@ -225,9 +225,8 @@ def av_flux(self, disc, btag, diffusion, **kwargs): ) gas_model = GasModel(eos=IdealSingleGas()) fluid_state = make_fluid_state(cv=cv, gas_model=gas_model) - boundary_kwargs = {"gas_model": gas_model} rhs = av_laplacian_operator(discr, boundaries=boundaries, - boundary_kwargs=boundary_kwargs, + gas_model=gas_model, fluid_state=fluid_state, alpha=1.0, s0=-np.inf) err = discr.norm(rhs, np.inf) assert err < tolerance @@ -243,7 +242,7 @@ def av_flux(self, disc, btag, diffusion, **kwargs): ) fluid_state = make_fluid_state(cv=cv, gas_model=gas_model) rhs = av_laplacian_operator(discr, boundaries=boundaries, - boundary_kwargs=boundary_kwargs, + gas_model=gas_model, fluid_state=fluid_state, alpha=1.0, s0=-np.inf) err = discr.norm(rhs, np.inf) assert err < tolerance @@ -259,7 +258,7 @@ def av_flux(self, disc, btag, diffusion, **kwargs): ) fluid_state = make_fluid_state(cv=cv, gas_model=gas_model) rhs = av_laplacian_operator(discr, boundaries=boundaries, - boundary_kwargs=boundary_kwargs, + gas_model=gas_model, fluid_state=fluid_state, alpha=1.0, s0=-np.inf) err = discr.norm(2.*dim-rhs, np.inf) assert err < tolerance From 80fe9efb5ffafde526262950b8ce5235192d8423 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 9 May 2022 12:19:47 -0500 Subject: [PATCH 597/873] Use new flux infrastucture with new bcs --- mirgecom/boundary.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index e58092846..d972d651e 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -364,6 +364,7 @@ def _gradient_flux_for_prescribed_cv(self, discr, btag, gas_model, state_minus, actx = state_minus.array_context nhat = thaw(discr.normal(btag), actx) + # return self._grad_num_flux_func(cv_pair, nhat) return self._boundary_quantity( discr, btag=btag, quantity=self._grad_num_flux_func(cv_pair, nhat), **kwargs) @@ -1031,10 +1032,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, # *not* the numerical viscous flux as advised by [Bassi_1997]_. f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, grad_t=grad_t_plus) - - return self._boundary_quantity( - discr, btag, - quantity=f_ext@normal) + return f_ext@normal class AdiabaticNoslipWallBoundary(PrescribedFluidBoundary): @@ -1139,9 +1137,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, grad_t=grad_t_plus) - return self._boundary_quantity( - discr, btag, - quantity=f_ext@normal) + return f_ext@normal class SymmetryBoundary(PrescribedFluidBoundary): @@ -1271,9 +1267,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, f_ext = viscous_flux(state=state_plus, grad_cv=grad_cv_plus, grad_t=grad_t_plus) - return self._boundary_quantity( - discr, btag, - quantity=f_ext@normal) + return f_ext@normal def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): """Get the exterior grad(Q) on the boundary.""" From 79ba94b3397218fa33a8869c872697d17f174bda Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 9 May 2022 13:09:15 -0500 Subject: [PATCH 598/873] Support separated operator states creation in Euler. --- mirgecom/euler.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 14c98f2cc..9a970c54d 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -68,7 +68,7 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, - quadrature_tag=None): + quadrature_tag=None, operator_states_quad=None): r"""Compute RHS of the Euler flow equations. Returns @@ -111,9 +111,12 @@ def euler_operator(discr, state, gas_model, boundaries, time=0.0, dd_quad_vol = DOFDesc("vol", quadrature_tag) dd_quad_faces = DOFDesc("all_faces", quadrature_tag) + if operator_states_quad is None: + operator_states_quad = make_operator_fluid_states(discr, state, gas_model, + boundaries, quadrature_tag) + volume_state_quad, interior_state_pairs_quad, domain_boundary_states_quad = \ - make_operator_fluid_states(discr, state, gas_model, boundaries, - quadrature_tag) + operator_states_quad # Compute volume contributions inviscid_flux_vol = inviscid_flux(volume_state_quad) From 5a1ebed37e112aedd16c38c9bedb418dcfb319b6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 10 May 2022 12:34:10 -0500 Subject: [PATCH 599/873] Add option to use NavierStokes fluid RHS --- examples/autoignition-mpi.py | 58 ++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index db7c0e5ac..292c39a98 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -74,7 +74,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_overintegration=False, use_profiling=False, - casename=None, lazy=False, rst_filename=None, log_dependent=True): + casename=None, lazy=False, rst_filename=None, log_dependent=True, + viscous_terms_on=False): """Drive example.""" cl_ctx = ctx_factory() @@ -272,7 +273,19 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) - gas_model = GasModel(eos=eos) + # {{{ Initialize simple transport model + from mirgecom.transport import SimpleTransport + transport_model = None + if viscous_terms_on: + kappa = 1e-5 + spec_diffusivity = 1e-5 * np.ones(nspecies) + sigma = 1e-5 + transport_model = SimpleTransport(viscosity=sigma, + thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + # }}} + + gas_model = GasModel(eos=eos, transport=transport_model) from pytools.obj_array import make_obj_array def get_temperature_update(cv, temperature): @@ -457,17 +470,17 @@ def my_health_check(cv, dv): return health_error - from mirgecom.inviscid import get_inviscid_timestep + from mirgecom.viscous import get_viscous_timestep def get_dt(state): - return get_inviscid_timestep(discr, state=state) + return get_viscous_timestep(discr, state=state) compute_dt = actx.compile(get_dt) - from mirgecom.inviscid import get_inviscid_cfl + from mirgecom.viscous import get_viscous_cfl def get_cfl(state, dt): - return get_inviscid_cfl(discr, dt=dt, state=state) + return get_viscous_cfl(discr, dt=dt, state=state) compute_cfl = actx.compile(get_cfl) @@ -551,22 +564,34 @@ def my_post_step(step, t, dt, state): set_dt(logmgr, dt) set_sim_state(logmgr, dim, cv, gas_model.eos) logmgr.tick_after() + return make_obj_array([cv, fluid_state.temperature]), dt - from mirgecom.inviscid import inviscid_facial_flux_rusanov + from mirgecom.inviscid import inviscid_facial_flux_rusanov as inv_num_flux_func + from mirgecom.gas_model import make_operator_fluid_states + from mirgecom.navierstokes import ns_operator + + fluid_operator = euler_operator + if viscous_terms_on: + fluid_operator = ns_operator def my_rhs(t, state): cv, tseed = state from mirgecom.gas_model import make_fluid_state fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) - return make_obj_array([ - euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, - inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, - quadrature_tag=quadrature_tag) - + eos.get_species_source_terms(cv, fluid_state.temperature), - 0*tseed]) + fluid_operator_states = make_operator_fluid_states( + discr, fluid_state, gas_model, boundaries=boundaries, + quadrature_tag=quadrature_tag) + fluid_rhs = fluid_operator( + discr, state=fluid_state, gas_model=gas_model, time=t, + boundaries=boundaries, operator_states_quad=fluid_operator_states, + quadrature_tag=quadrature_tag, + inviscid_numerical_flux_func=inv_num_flux_func) + chem_rhs = eos.get_species_source_terms(cv, fluid_state.temperature) + tseed_rhs = fluid_state.temperature - tseed + cv_rhs = fluid_rhs + chem_rhs + return make_obj_array([cv_rhs, tseed_rhs]) current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -611,6 +636,8 @@ def my_rhs(t, state): help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") + parser.add_argument("--navierstokes", action="store_true", + help="turns on compressible Navier-Stokes RHS") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, @@ -624,6 +651,7 @@ def my_rhs(t, state): warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False lazy = args.lazy + viscous_terms_on = args.navierstokes if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -641,6 +669,6 @@ def my_rhs(t, state): main(actx_class, use_logmgr=args.log, use_leap=args.leap, use_overintegration=args.overintegration, use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename, - log_dependent=log_dependent) + log_dependent=log_dependent, viscous_terms_on=args.navierstokes) # vim: foldmethod=marker From 3fcb78b6710f53efb5cd45eb94c7614a7c868f73 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 10 May 2022 14:03:32 -0500 Subject: [PATCH 600/873] Add combozzle prediction tester to example suite. --- examples/README.md | 1 + examples/combozzle-mpi-lazy.py | 1 + examples/combozzle-mpi.py | 1261 ++++++++++++++++++++++++++++++++ 3 files changed, 1263 insertions(+) create mode 120000 examples/combozzle-mpi-lazy.py create mode 100644 examples/combozzle-mpi.py diff --git a/examples/README.md b/examples/README.md index bf0c57166..8f151bc7c 100644 --- a/examples/README.md +++ b/examples/README.md @@ -20,3 +20,4 @@ unique features they exercise are as follows: - `poiseuille-mpi.py`: Poiseuille flow verification case - `poiseuille-multispecies-mpi.py`: Poiseuille flow with passive scalars - `scalar-advdiff-mpi.py`: Scalar advection-diffusion verification case +- `combozzle-mpi.py`: Prediction-relevant testing, kitchen sink, many options diff --git a/examples/combozzle-mpi-lazy.py b/examples/combozzle-mpi-lazy.py new file mode 120000 index 000000000..8183b7e63 --- /dev/null +++ b/examples/combozzle-mpi-lazy.py @@ -0,0 +1 @@ +combozzle-mpi.py \ No newline at end of file diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py new file mode 100644 index 000000000..11f172c4c --- /dev/null +++ b/examples/combozzle-mpi.py @@ -0,0 +1,1261 @@ +"""Prediction-adjacent performance tester.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import yaml +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from functools import partial + +from meshmode.array_context import PyOpenCLArrayContext + +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa +from grudge.eager import EagerDGDiscretization +from grudge.dof_desc import DTAG_BOUNDARY +from grudge.shortcuts import make_visualizer + +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.euler import euler_operator +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh, + write_visfile, +) +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.integrators import ( + rk4_step, euler_step, + lsrk54_step, lsrk144_step +) +from mirgecom.steppers import advance_state +from mirgecom.initializers import ( + MixtureInitializer, + Uniform +) +from mirgecom.eos import ( + PyrometheusMixture, + IdealSingleGas +) +from mirgecom.transport import SimpleTransport +from mirgecom.gas_model import GasModel +from arraycontext import thaw +from mirgecom.artificial_viscosity import ( + av_laplacian_operator, + smoothness_indicator +) +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_cl_device_info, + logmgr_add_device_memory_usage, + set_sim_state +) +import cantera + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception for fatal driver errors.""" + + pass + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None, periodic=None): + if periodic is None: + periodic = (False)*dim + + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t, + periodic=periodic) + + +class InitSponge: + r"""Solution initializer for flow in the ACT-II facility. + + This initializer creates a physics-consistent flow solution + given the top and bottom geometry profiles and an EOS using isentropic + flow relations. + + The flow is initialized from the inlet stagnations pressure, P0, and + stagnation temperature T0. + + geometry locations are linearly interpolated between given data points + + .. automethod:: __init__ + .. automethod:: __call__ + """ + + def __init__(self, *, x0, thickness, amplitude): + r"""Initialize the sponge parameters. + + Parameters + ---------- + x0: float + sponge starting x location + thickness: float + sponge extent + amplitude: float + sponge strength modifier + """ + self._x0 = x0 + self._thickness = thickness + self._amplitude = amplitude + + def __call__(self, x_vec, *, time=0.0): + """Create the sponge intensity at locations *x_vec*. + + Parameters + ---------- + x_vec: numpy.ndarray + Coordinates at which solution is desired + time: float + Time at which solution is desired. The strength is (optionally) + dependent on time + """ + xpos = x_vec[0] + actx = xpos.array_context + zeros = 0*xpos + x0 = zeros + self._x0 + + return self._amplitude * actx.np.where( + actx.np.greater(xpos, x0), + (zeros + ((xpos - self._x0)/self._thickness) + * ((xpos - self._x0) / self._thickness)), + zeros + 0.0 + ) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_leap=False, use_overintegration=False, + use_profiling=False, casename=None, lazy=False, + rst_filename=None, actx_class=PyOpenCLArrayContext, + log_dependent=False, input_file=None): + """Drive example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nproc = comm.Get_size() + nparts = nproc + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + # {{{ Some discretization parameters + + dim = 3 + order = 1 + + # - scales the size of the domain + x_scale = 1 + y_scale = 1 + z_scale = 1 + + # - params for unscaled npts/axis + domain_xlen = 1. + domain_ylen = 1. + domain_zlen = 1. + chlen = .25 # default to 4 elements/axis = x_len/chlen + + # }}} discretization params + + # {{{ Time stepping control + + # This example runs only 3 steps by default (to keep CI ~short) + # With the mixture defined below, equilibrium is achieved at ~40ms + # To run to equilibrium, set t_final >= 40ms. + + # Time loop control parameters + current_step = 0 + t_final = 2e-8 + current_cfl = 0.05 + current_dt = 1e-9 + current_t = 0 + constant_cfl = False + integrator = "euler" + + # i.o frequencies + nstatus = 100 + nviz = 100 + nhealth = 100 + nrestart = 1000 + do_checkpoint = 0 + boundary_report = 0 + do_callbacks = 1 + + # }}} Time stepping control + + # {{{ Some solution parameters + + dummy_rhs_only = 0 + timestepping_on = 1 + av_on = 1 + sponge_on = 1 + + # }}} + + # {{{ Boundary configuration params + + adiabatic_boundary = 0 + periodic_boundary = 1 + multiple_boundaries = False + + # }}} + + # {{{ Simulation control parameters + + grid_only = 0 + discr_only = 0 + inviscid_only = 0 + inert_only = 0 + init_only = 0 + single_gas_only = 0 + nspecies = 7 + use_cantera = 0 + + # }}} + + # coarse-scale grid/domain control + n_refine = 1 # scales npts/axis uniformly + weak_scale = 1 # scales domain and npts/axis keeping dt constant + + # AV / Shock-capturing parameters + alpha_sc = 0.5 + s0_sc = -5.0 + kappa_sc = 0.5 + + # sponge parameters + sponge_thickness = 0.09 + sponge_amp = 1.0/current_dt/1000. + sponge_x0 = 0.9 + + if input_file: + input_data = None + if rank == 0: + print(f"Reading user input file: {input_file}.") + with open(input_file) as f: + input_data = yaml.load(f, Loader=yaml.FullLoader) + input_data = comm.bcast(input_data, root=0) + + try: + casename = input_data["casename"] # fixme: allow cl override + except KeyError: + pass + try: + dim = int(input_data["dim"]) + except KeyError: + pass + try: + use_cantera = int(input_data["use_cantera"]) + except KeyError: + pass + try: + domain_xlen = float(input_data["domain_xlen"]) + except KeyError: + pass + try: + domain_ylen = float(input_data["domain_ylen"]) + except KeyError: + pass + try: + domain_zlen = float(input_data["domain_zlen"]) + except KeyError: + pass + try: + x_scale = float(input_data["x_scale"]) + except KeyError: + pass + try: + y_scale = float(input_data["y_scale"]) + except KeyError: + pass + try: + z_scale = float(input_data["z_scale"]) + except KeyError: + pass + try: + chlen = float(input_data["chlen"]) + except KeyError: + pass + try: + weak_scale = float(input_data["weak_scale"]) + except KeyError: + pass + try: + n_refine = int(input_data["h_scale"]) + except KeyError: + pass + try: + boundary_report = int(input_data["boundary_report"]) + except KeyError: + pass + try: + init_only = int(input_data["init_only"]) + except KeyError: + pass + try: + grid_only = int(input_data["grid_only"]) + except KeyError: + pass + try: + discr_only = int(input_data["discr_only"]) + except KeyError: + pass + try: + inviscid_only = int(input_data["inviscid_only"]) + except KeyError: + pass + try: + inert_only = int(input_data["inert_only"]) + except KeyError: + pass + try: + single_gas_only = int(input_data["single_gas_only"]) + except KeyError: + pass + try: + dummy_rhs_only = int(input_data["dummy_rhs_only"]) + except KeyError: + pass + try: + adiabatic_boundary = int(input_data["adiabatic_boundary"]) + except KeyError: + pass + try: + multiple_boundaries = bool(input_data["multiple_boundaries"]) + except KeyError: + pass + try: + periodic_boundary = int(input_data["periodic_boundary"]) + except KeyError: + pass + try: + do_checkpoint = int(input_data["do_checkpoint"]) + except KeyError: + pass + try: + do_callbacks = int(input_data["do_callbacks"]) + except KeyError: + pass + try: + nviz = int(input_data["nviz"]) + except KeyError: + pass + try: + nrestart = int(input_data["nrestart"]) + except KeyError: + pass + try: + nhealth = int(input_data["nhealth"]) + except KeyError: + pass + try: + nstatus = int(input_data["nstatus"]) + except KeyError: + pass + try: + timestepping_on = int(input_data["timestepping_on"]) + except KeyError: + pass + try: + av_on = int(input_data["artificial_viscosity_on"]) + except KeyError: + pass + try: + sponge_on = int(input_data["sponge_on"]) + except KeyError: + pass + try: + log_dependent = bool(input_data["log_dependent"]) + except KeyError: + pass + try: + current_dt = float(input_data["current_dt"]) + except KeyError: + pass + try: + t_final = float(input_data["t_final"]) + except KeyError: + pass + try: + sponge_thickness = float(input_data["sponge_thickness"]) + except KeyError: + pass + try: + sponge_amp = float(input_data["sponge_amp"]) + except KeyError: + pass + try: + sponge_x0 = float(input_data["sponge_x0"]) + except KeyError: + pass + try: + alpha_sc = float(input_data["alpha_sc"]) + except KeyError: + pass + try: + kappa_sc = float(input_data["kappa_sc"]) + except KeyError: + pass + try: + s0_sc = float(input_data["s0_sc"]) + except KeyError: + pass + try: + order = int(input_data["order"]) + except KeyError: + pass + try: + nspecies = int(input_data["nspecies"]) + except KeyError: + pass + try: + integrator = input_data["integrator"] + except KeyError: + pass + try: + init_pressure = float(input_data["init_pressure"]) + except KeyError: + pass + try: + init_density = float(input_data["init_density"]) + except KeyError: + pass + try: + init_temperature = float(input_data["init_temperature"]) + except KeyError: + pass + try: + health_pres_min = float(input_data["health_pres_min"]) + except KeyError: + pass + try: + health_pres_max = float(input_data["health_pres_max"]) + except KeyError: + pass + + # param sanity check + allowed_integrators = ["rk4", "euler", "lsrk54", "lsrk144"] + if integrator not in allowed_integrators: + error_message = "Invalid time integrator: {}".format(integrator) + raise RuntimeError(error_message) + + if rank == 0: + print("#### Simluation control data: ####") + print(f"\tCasename: {casename}") + print("----- run control ------") + print(f"\t{grid_only=},{discr_only=},{inert_only=}") + print(f"\t{single_gas_only=},{dummy_rhs_only=}") + print(f"\t{periodic_boundary=},{adiabatic_boundary=}") + print(f"\t{timestepping_on=}, {inviscid_only=}") + print(f"\t{av_on=}, {sponge_on=}, {do_callbacks=}") + print(f"\t{nspecies=}, {init_only=}") + print(f"\t{health_pres_min=}, {health_pres_max=}") + print("---- timestepping ------") + print(f"\tcurrent_dt = {current_dt}") + print(f"\tt_final = {t_final}") + print(f"\tconstant_cfl = {constant_cfl}") + print(f"\tTime integration {integrator}") + if constant_cfl: + print(f"\tcfl = {current_cfl}") + print("---- i/o frequencies -----") + print(f"\tnviz = {nviz}") + print(f"\tnrestart = {nrestart}") + print(f"\tnhealth = {nhealth}") + print(f"\tnstatus = {nstatus}") + print("----- domain ------") + print(f"\tspatial dimension: {dim}") + print(f"\tdomain_xlen = {domain_xlen}") + print(f"\tx_scale = {x_scale}") + if dim > 1: + print(f"\tdomain_ylen = {domain_xlen}") + print(f"\ty_scale = {y_scale}") + if dim > 2: + print(f"\tdomain_zlen = {domain_xlen}") + print(f"\tz_scale = {z_scale}") + print("\t----- discretization ----") + print(f"\tchar_len = {chlen}") + print(f"\torder = {order}") + + if av_on: + print(f"\tShock capturing parameters: {alpha_sc=}, " + f" {s0_sc=}, {kappa_sc=}") + + if sponge_on: + print(f"Sponge parameters: {sponge_amp=}, {sponge_thickness=}," + f" {sponge_x0=}") + + if log_dependent: + print("\tDependent variable logging is ON.") + else: + print("\tDependent variable logging is OFF.") + print("#### Simluation control data: ####") + + timestepper = rk4_step + if integrator == "euler": + timestepper = euler_step + if integrator == "lsrk54": + timestepper = lsrk54_step + if integrator == "lsrk144": + timestepper = lsrk144_step + + xsize = domain_xlen*x_scale*weak_scale + ysize = domain_ylen*y_scale*weak_scale + zsize = domain_zlen*z_scale*weak_scale + + ncx = int(xsize / chlen) + ncy = int(ysize / chlen) + ncz = int(zsize / chlen) + + npts_x = ncx * n_refine + 1 + npts_y = ncy * n_refine + 1 + npts_z = ncz * n_refine + 1 + + x0 = xsize/2 + y0 = ysize/2 + z0 = zsize/2 + + xleft = x0 - xsize/2 + xright = x0 + xsize/2 + ybottom = y0 - ysize/2 + ytop = y0 + ysize/2 + zback = z0 - zsize/2 + zfront = z0 + zsize/2 + + npts_axis = (npts_x,) + box_ll = (xleft,) + box_ur = (xright,) + if dim > 1: + npts_axis = (npts_x, npts_y) + box_ll = (xleft, ybottom) + box_ur = (xright, ytop) + if dim > 2: + npts_axis = (npts_x, npts_y, npts_z) + box_ll = (xleft, ybottom, zback) + box_ur = (xright, ytop, zfront) + + periodic = (periodic_boundary == 1,)*dim + if rank == 0: + print(f"---- Mesh generator inputs -----\n" + f"\tDomain: [{box_ll}, {box_ur}], {periodic=}\n" + f"\tNpts/axis: {npts_axis}") + + if single_gas_only: + inert_only = 1 + + wall_temperature = init_temperature + temperature_seed = init_temperature + debug = False + + if use_profiling: + queue = cl.CommandQueue(cl_ctx, + properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) + + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["num_parts"] == nproc + rst_time = restart_data["t"] + rst_step = restart_data["step"] + rst_order = restart_data["order"] + else: # generate the grid from scratch + generate_mesh = partial(_get_box_mesh, dim, a=box_ll, b=box_ur, n=npts_axis, + periodic=periodic) + + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + print(f"{rank=},{dim=},{order=},{local_nelements=},{global_nelements=}") + if grid_only: + return 0 + + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + + discr = EagerDGDiscretization( + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm + ) + nodes = thaw(discr.nodes(), actx) + ones = discr.zeros(actx) + 1.0 + + def vol_min(x): + from grudge.op import nodal_min + return actx.to_numpy(nodal_min(discr, "vol", x))[()] + + def vol_max(x): + from grudge.op import nodal_max + return actx.to_numpy(nodal_max(discr, "vol", x))[()] + + from grudge.dt_utils import characteristic_lengthscales + length_scales = characteristic_lengthscales(actx, discr) + h_min = vol_min(length_scales) + h_max = vol_max(length_scales) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + ones = discr.zeros(actx) + 1.0 + + if rank == 0: + print("----- Discretization info ----") + print(f"Discr: {nodes.shape=}, {order=}, {h_min=}, {h_max=}") + for i in range(nparts): + if rank == i: + print(f"{rank=},{local_nelements=},{global_nelements=}") + comm.Barrier() + + if discr_only: + return 0 + + vis_timer = None + + casename = f"{casename}-d{dim}p{order}e{global_nelements}n{nparts}" + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if logmgr: + logmgr_add_cl_device_info(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + if log_dependent: + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, + units_for_logging) + logmgr.add_watches([ + ("min_pressure", "\n------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("min_temperature", "------- T (min, max) (K) = ({value:7g}, "), + ("max_temperature", "{value:7g})\n")]) + + if single_gas_only: + nspecies = 0 + init_y = 0 + elif use_cantera: + + # {{{ Set up initial state using Cantera + + # Use Cantera for initialization + # -- Pick up a CTI for the thermochemistry config + # --- Note: Users may add their own CTI file by dropping it into + # --- mirgecom/mechanisms alongside the other CTI files. + from mirgecom.mechanisms import get_mechanism_cti + mech_cti = get_mechanism_cti("uiuc") + + cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) + nspecies = cantera_soln.n_species + + # Initial temperature, pressure, and mixutre mole fractions are needed + # set up the initial state in Cantera. + # Parameters for calculating the amounts of fuel, oxidizer, and inert species + equiv_ratio = 1.0 + ox_di_ratio = 0.21 + stoich_ratio = 3.0 + # Grab array indices for the specific species, ethylene, oxygen, and nitrogen + i_fu = cantera_soln.species_index("C2H4") + i_ox = cantera_soln.species_index("O2") + i_di = cantera_soln.species_index("N2") + x = np.zeros(nspecies) + # Set the species mole fractions according to our desired fuel/air mixture + x[i_fu] = (ox_di_ratio*equiv_ratio)/(stoich_ratio+ox_di_ratio*equiv_ratio) + x[i_ox] = stoich_ratio*x[i_fu]/equiv_ratio + x[i_di] = (1.0-ox_di_ratio)*x[i_ox]/ox_di_ratio + # Uncomment next line to make pylint fail when it can't find cantera.one_atm + one_atm = cantera.one_atm # pylint: disable=no-member + + # Let the user know about how Cantera is being initilized + print(f"Input state (T,P,X) = ({temperature_seed}, {one_atm}, {x}") + # Set Cantera internal gas temperature, pressure, and mole fractios + cantera_soln.TPX = temperature_seed, one_atm, x + # Pull temperature, total density, mass fractions, and pressure from Cantera + # We need total density, mass fractions to initialize the fluid/gas state. + can_t, can_rho, can_y = cantera_soln.TDY + can_p = cantera_soln.P + init_pressure = can_p + init_density = can_rho + init_temperature = can_t + init_y = can_y + print(f"Cantera state (rho,T,P,Y) = ({can_rho}, {can_t}, {can_p}, {can_y}") + # *can_t*, *can_p* should not differ (much) from user's initial data, + # but we want to ensure that we use the same starting point as Cantera, + # so we use Cantera's version of these data. + + # }}} + + # {{{ Create Pyrometheus thermochemistry object & EOS + + # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and + # generates a set of methods to calculate chemothermomechanical properties and + # states for this particular mechanism. + if inert_only or single_gas_only: + eos = IdealSingleGas() + else: + if use_cantera: + from mirgecom.thermochemistry import make_pyrometheus_mechanism_class + pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) + eos = PyrometheusMixture(pyro_mechanism, + temperature_guess=temperature_seed) + else: + from mirgecom.thermochemistry import get_pyrometheus_wrapper_class + from mirgecom.mechanisms.uiuc import Thermochemistry + pyro_mechanism = get_pyrometheus_wrapper_class(Thermochemistry)(actx.np) + nspecies = pyro_mechanism.num_species + # species_names = pyro_mechanism.species_names + eos = PyrometheusMixture(pyro_mechanism, + temperature_guess=temperature_seed) + init_y = [0.06372925, 0.21806609, 0., 0., 0., 0., 0.71820466] + + # {{{ Initialize simple transport model + + kappa = 10 + spec_diffusivity = 0 * np.ones(nspecies) + sigma = 1e-5 + if inviscid_only: + transport_model = None + gas_model = GasModel(eos=eos) + else: + transport_model = SimpleTransport(viscosity=sigma, + thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + gas_model = GasModel(eos=eos, transport=transport_model) + + # }}} + + from pytools.obj_array import make_obj_array + + if inert_only: + compute_temperature_update = None + else: + def get_temperature_update(cv, temperature): + y = cv.species_mass_fractions + e = gas_model.eos.internal_energy(cv) / cv.mass + return pyro_mechanism.get_temperature_update_energy(e, temperature, y) + compute_temperature_update = actx.compile(get_temperature_update) + + from mirgecom.gas_model import make_fluid_state + + def get_fluid_state(cv, tseed): + return make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) + + construct_fluid_state = actx.compile(get_fluid_state) + + # }}} + + # {{{ MIRGE-Com state initialization + + # Initialize the fluid/gas state with Cantera-consistent data: + # (density, pressure, temperature, mass_fractions) + velocity = np.zeros(shape=(dim,)) + if single_gas_only or inert_only: + initializer = Uniform(dim=dim, p=init_pressure, rho=init_density, + velocity=velocity, nspecies=nspecies) + else: + initializer = MixtureInitializer(dim=dim, nspecies=nspecies, + pressure=init_pressure, + temperature=init_temperature, + massfractions=init_y, velocity=velocity) + + from mirgecom.boundary import ( + AdiabaticNoslipWallBoundary, + IsothermalWallBoundary + ) + adiabatic_wall = AdiabaticNoslipWallBoundary() + isothermal_wall = IsothermalWallBoundary(wall_temperature=wall_temperature) + if adiabatic_boundary: + wall = adiabatic_wall + else: + wall = isothermal_wall + + boundaries = {} # periodic-compatible + if not periodic: + if multiple_boundaries: + for idir in range(dim): + boundaries[DTAG_BOUNDARY(f"+{idir}")] = wall + boundaries[DTAG_BOUNDARY(f"-{idir}")] = wall + else: + boundaries = {BTAG_ALL: wall} + + if boundary_report: + from mirgecom.simutil import boundary_report + boundary_report(discr, boundaries, f"{casename}_boundaries_np{nparts}.yaml") + + if rst_filename: + current_step = rst_step + current_t = rst_time + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + if order == rst_order: + current_cv = restart_data["cv"] + temperature_seed = restart_data["temperature_seed"] + else: + rst_cv = restart_data["cv"] + old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, + mpi_communicator=comm) + from meshmode.discretization.connection import make_same_mesh_connection + connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), + old_discr.discr_from_dd("vol")) + current_cv = connection(rst_cv) + temperature_seed = connection(restart_data["temperature_seed"]) + else: + # Set the current state from time 0 + current_cv = initializer(eos=gas_model.eos, x_vec=nodes) + temperature_seed = temperature_seed * ones + + # The temperature_seed going into this function is: + # - At time 0: the initial temperature input data (maybe from Cantera) + # - On restart: the restarted temperature seed from restart file (saving + # the *seed* allows restarts to be deterministic + current_fluid_state = construct_fluid_state(current_cv, temperature_seed) + current_dv = current_fluid_state.dv + temperature_seed = current_dv.temperature + + if sponge_on: + sponge_sigma = InitSponge(x0=sponge_x0, thickness=sponge_thickness, + amplitude=sponge_amp)(x_vec=nodes) + sponge_ref_cv = initializer(eos=gas_model.eos, x_vec=nodes) + + # sponge function + def _sponge(cv): + return sponge_sigma*(sponge_ref_cv - cv) + + # Inspection at physics debugging time + if debug: + print("Initial MIRGE-Com state:") + print(f"Initial DV pressure: {current_fluid_state.pressure}") + print(f"Initial DV temperature: {current_fluid_state.temperature}") + + # }}} + + visualizer = make_visualizer(discr) + initname = initializer.__class__.__name__ + eosname = gas_model.eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=initname, + eosname=eosname, casename=casename) + + if inert_only == 0 and use_cantera: + # Cantera equilibrate calculates the expected end + # state @ chemical equilibrium + # i.e. the expected state after all reactions + cantera_soln.equilibrate("UV") + eq_temperature, eq_density, eq_mass_fractions = cantera_soln.TDY + eq_pressure = cantera_soln.P + + # Report the expected final state to the user + if rank == 0: + logger.info(init_message) + logger.info(f"Expected equilibrium state:" + f" {eq_pressure=}, {eq_temperature=}," + f" {eq_density=}, {eq_mass_fractions=}") + + def my_write_status(dt, cfl, dv=None): + status_msg = f"------ {dt=}" if constant_cfl else f"----- {cfl=}" + if ((dv is not None) and (not log_dependent)): + + temp = dv.temperature + press = dv.pressure + + from grudge.op import nodal_min_loc, nodal_max_loc + tmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + op="min") + tmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + op="max") + pmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + op="min") + pmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + op="max") + dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" + status_msg = status_msg + dv_status_msg + + if rank == 0: + logger.info(status_msg) + + def my_write_viz(step, t, cv, dv): + viz_fields = [("cv", cv), ("dv", dv)] + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True, vis_timer=vis_timer) + + def my_write_restart(step, t, state, temperature_seed): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname == rst_filename: + if rank == 0: + logger.info("Skipping overwrite of restart file.") + else: + rst_data = { + "local_mesh": local_mesh, + "cv": state.cv, + "temperature_seed": temperature_seed, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nproc + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(cv, dv): + import grudge.op as op + health_error = False + + pressure = dv.pressure + temperature = dv.temperature + + from mirgecom.simutil import check_naninf_local + if check_naninf_local(discr, "vol", pressure): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + + if check_naninf_local(discr, "vol", temperature): + health_error = True + logger.info(f"{rank=}: Invalid temperature data found.") + + if inert_only == 0: + # This check is the temperature convergence check + temp_resid = compute_temperature_update(cv, temperature) / temperature + temp_err = (actx.to_numpy(op.nodal_max_loc(discr, "vol", temp_resid))) + if temp_err > 1e-8: + health_error = True + logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") + + return health_error + + # from mirgecom.viscous import ( + # get_viscous_timestep, + # get_viscous_cfl + # ) + + def compute_av_alpha_field(state): + """Scale alpha by the element characteristic length.""" + return alpha_sc*state.speed*length_scales + + def my_pre_step(step, t, dt, state): + cv, tseed = state + fluid_state = construct_fluid_state(cv, tseed) + dv = fluid_state.dv + + dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, cfl=current_cfl, + t_final=t_final, constant_cfl=constant_cfl) + + try: + + if logmgr: + logmgr.tick_before() + + if do_checkpoint: + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if do_health: + health_errors = global_reduce(my_health_check(cv, dv), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_status: + my_write_status(dt=dt, cfl=current_cfl, dv=dv) + + if do_restart: + my_write_restart(step=step, t=t, state=fluid_state, + temperature_seed=tseed) + + if do_viz: + my_write_viz(step=step, t=t, cv=cv, dv=dv) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + raise + + return state, dt + + def my_post_step(step, t, dt, state): + cv, tseed = state + + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + if log_dependent: + set_sim_state(logmgr, dim, cv, gas_model.eos) + logmgr.tick_after() + + return state, dt + + from mirgecom.inviscid import inviscid_facial_flux_rusanov + + def dummy_pre_step(step, t, dt, state): + if logmgr: + logmgr.tick_before() + return state, dt + + def dummy_post_step(step, t, dt, state): + if logmgr: + set_dt(logmgr, dt) + logmgr.tick_after() + return state, dt + + pre_step_func = dummy_pre_step + post_step_func = dummy_post_step + + if do_callbacks: + pre_step_func = my_pre_step + post_step_func = my_post_step + + from mirgecom.flux import gradient_flux as gradient_num_flux_central + from mirgecom.gas_model import make_operator_fluid_states + from mirgecom.navierstokes import grad_cv_operator + + def cfd_rhs(t, state): + cv, tseed = state + from mirgecom.gas_model import make_fluid_state + fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, + temperature_seed=tseed) + fluid_operator_states = make_operator_fluid_states(discr, fluid_state, + gas_model, boundaries, + quadrature_tag) + + if inviscid_only: + fluid_rhs = \ + euler_operator( + discr, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, + quadrature_tag=quadrature_tag, + operator_states_quad=fluid_operator_states) + else: + grad_cv = grad_cv_operator(discr, gas_model, boundaries, fluid_state, + time=t, + numerical_flux_func=gradient_num_flux_central, + quadrature_tag=quadrature_tag, + operator_states_quad=fluid_operator_states) + fluid_rhs = \ + ns_operator( + discr, state=fluid_state, time=t, boundaries=boundaries, + gas_model=gas_model, quadrature_tag=quadrature_tag, + inviscid_numerical_flux_func=inviscid_facial_flux_rusanov) + + if inert_only: + chem_rhs = 0*fluid_rhs + else: + chem_rhs = eos.get_species_source_terms(cv, fluid_state.temperature) + + if av_on: + alpha_f = compute_av_alpha_field(fluid_state) + indicator = smoothness_indicator(discr, fluid_state.mass_density, + kappa=kappa_sc, s0=s0_sc) + av_rhs = av_laplacian_operator( + discr, fluid_state=fluid_state, boundaries=boundaries, time=t, + gas_model=gas_model, grad_cv=grad_cv, + operator_states_quad=fluid_operator_states, + alpha=alpha_f, s0=s0_sc, kappa=kappa_sc, + indicator=indicator) + else: + av_rhs = 0*fluid_rhs + + if sponge_on: + sponge_rhs = _sponge(fluid_state.cv) + else: + sponge_rhs = 0*fluid_rhs + + fluid_rhs = fluid_rhs + chem_rhs + av_rhs + sponge_rhs + tseed_rhs = fluid_state.temperature - tseed + + return make_obj_array([fluid_rhs, tseed_rhs]) + + def dummy_rhs(t, state): + cv, tseed = state + return make_obj_array([0*cv, 0*tseed]) + + if dummy_rhs_only: + my_rhs = dummy_rhs + else: + my_rhs = cfd_rhs + + current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + + current_state = make_obj_array([current_cv, temperature_seed]) + + if timestepping_on: + if rank == 0: + print(f"Timestepping: {current_step=}, {current_t=}, {t_final=}," + f" {current_dt=}") + + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=pre_step_func, istep=current_step, + post_step_callback=post_step_func, dt=current_dt, + state=make_obj_array([current_cv, temperature_seed]), + t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + + final_cv, tseed = current_state + final_fluid_state = construct_fluid_state(final_cv, tseed) + final_dv = final_fluid_state.dv + dt = get_sim_timestep(discr, final_fluid_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + + my_write_viz(step=current_step, t=current_t, cv=final_cv, dv=final_dv) + my_write_status(dt=dt, cfl=current_cfl, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=final_fluid_state, + temperature_seed=tseed) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + comm.Barrier() + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + health_errors = global_reduce(my_health_check(cv=final_cv, dv=final_dv), + op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + +if __name__ == "__main__": + import argparse + casename = "combozzle" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") + parser.add_argument("-i", "--input_file", type=ascii, dest="input_file", + nargs="?", action="store", help="simulation config file") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + from warnings import warn + warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") + lazy = args.lazy + log_dependent = False + if args.profiling: + if lazy: + raise ValueError("Can't use lazy and profiling together.") + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + input_file = None + if args.input_file: + input_file = args.input_file.replace("'", "") + print(f"Reading user input from file: {input_file}") + else: + print("No user input file, using default values") + + main(use_logmgr=args.log, use_leap=args.leap, input_file=input_file, + use_overintegration=args.overintegration, + use_profiling=args.profiling, lazy=lazy, + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + log_dependent=log_dependent) + +# vim: foldmethod=marker From 10f8e3c4abb65ed48d9a33efb5eea86facec238d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 10 May 2022 14:15:17 -0500 Subject: [PATCH 601/873] Add missing parameters, edit mess-up --- examples/combozzle-mpi.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 11f172c4c..1cf889483 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -228,6 +228,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, timestepping_on = 1 av_on = 1 sponge_on = 1 + health_pres_min = 0. + health_pres_max = 10000000. + init_temperature = 1500.0 + init_pressure = 101325. + init_density = 0.23397065362031969 # }}} From cbe307e547d33ea9ecbf0c289d009cf9cf2b39ee Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Thu, 19 May 2022 13:55:58 -0700 Subject: [PATCH 602/873] Add testing scripts. --- testing/test-examples-lassen.sh | 108 ++++++++++++++++++++++++++++++++ testing/test-lassen.sh | 13 ++++ 2 files changed, 121 insertions(+) create mode 100755 testing/test-examples-lassen.sh create mode 100755 testing/test-lassen.sh diff --git a/testing/test-examples-lassen.sh b/testing/test-examples-lassen.sh new file mode 100755 index 000000000..738983f37 --- /dev/null +++ b/testing/test-examples-lassen.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +EMIRGE_HOME=$1 +origin=$(pwd) +EXAMPLES_HOME=$2 +# examples_dir=${1-$origin} +BATCH_SCRIPT_NAME="examples-lassen-batch.sh" +examples_dir="${EXAMPLES_HOME}" + +cat < ${BATCH_SCRIPT_NAME} +#!/bin/bash + +#BSUB -nnodes 1 +#BSUB -G uiuc +#BSUB -W 120 +#BSUB -q pdebug + +printf "Running with EMIRGE_HOME=${EMIRGE_HOME}\n" + +source "${EMIRGE_HOME}/config/activate_env.sh" +export PYOPENCL_CTX="port:tesla" +export XDG_CACHE_HOME="/tmp/$USER/xdg-scratch" +rm -rf \$XDG_CACHE_HOME +rm -f timing-run-done +which python +conda env list +env +env | grep LSB_MCPU_HOSTS + +serial_spawner_cmd="jsrun -g 1 -a 1 -n 1" +parallel_spawner_cmd="jsrun -g 1 -a 1 -n 2" + +set -o nounset + +rm -f *.vtu *.pvtu + +declare -i numfail=0 +declare -i numsuccess=0 +echo "*** Running examples in $examples_dir ..." +failed_examples="" +succeeded_examples="" + +for example_name in $examples_dir/*.py +do + example="$examples_dir/\$example_name" + if [[ "\$example" == *"-mpi-lazy.py" ]] + then + echo "*** Running parallel lazy example (1 rank): \$example" + \$serial_spawner_cmd python -O -m mpi4py \${example} --lazy + elif [[ "\$example" == *"-mpi.py" ]]; then + echo "*** Running parallel example (2 ranks): \$example" + \$parallel_spawner_cmd python -O -m mpi4py \${example} + elif [[ "\$example" == *"-lazy.py" ]]; then + echo "*** Running serial lazy example: \$example" + python -O \${example} --lazy + else + echo "*** Running serial example: \$example" + python -O \${example} + fi + if [[ \$? -eq 0 ]] + then + ((numsuccess=numsuccess+1)) + echo "*** Example \$example succeeded." + succeeded_examples="\$succeeded_examples \$example" + else + ((numfail=numfail+1)) + echo "*** Example \$example failed." + failed_examples="\$failed_examples \$example" + fi + rm -rf *vtu *sqlite *pkl *-journal restart_data +done +((numtests=numsuccess+numfail)) +echo "*** Done running examples!" +if [[ \$numfail -eq 0 ]] +then + echo "*** No errors." +else + echo "*** Errors detected." + echo "*** Failed tests: (\$numfail/\$numtests): \$failed_examples" +fi +echo "*** Successful tests: (\$numsuccess/\$numtests): \$succeeded_examples" + +printf "\$numfail\n" > example-testing-results +touch example-testing-done +exit \$numfail + +EOF + +rm -f example-testing-done +chmod +x ${BATCH_SCRIPT_NAME} +# ---- Submit the batch script and wait for the job to finish +bsub ${BATCH_SCRIPT_NAME} +# ---- Wait 25 minutes right off the bat +sleep 1500 +iwait=0 +while [ ! -f ./example-testing-done ]; do + iwait=$((iwait+1)) + if [ "$iwait" -gt 89 ]; then # give up after almost 2 hours + printf "Timed out waiting on batch job.\n" + exit 1 # skip the rest of the script + fi + sleep 60 +done +sleep 30 # give the batch system time to spew its junk into the log +cat *.out > example-testing-output +date >> example-testing-output +rm *.out +date diff --git a/testing/test-lassen.sh b/testing/test-lassen.sh new file mode 100755 index 000000000..6e6620c96 --- /dev/null +++ b/testing/test-lassen.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +EMIRGE_HOME=$1 +TESTING_RESULTS_FILE=$2 +TESTING_LOG_FILE=$3 + +printf "Testing examples.\n" +./test-examples-lassen.sh ${EMIRGE_HOME} ../examples +examples_script_result=$? +printf "Examples script result: ${examples_result}" +cat example-testing-output >> ${TESTING_LOG_FILE} +examples_testing_result=$(cat example-testing-results) +printf "mirgecom-examples: ${examples_testing_result}\n" >> ${TESTING_RESULTS_FILE} From b61eb05adfeaa1c75e8f630b57471b2b81c316e7 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Thu, 19 May 2022 13:59:15 -0700 Subject: [PATCH 603/873] update examples scripting --- testing/test-examples-lassen.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/testing/test-examples-lassen.sh b/testing/test-examples-lassen.sh index 738983f37..45b3f8943 100755 --- a/testing/test-examples-lassen.sh +++ b/testing/test-examples-lassen.sh @@ -40,9 +40,8 @@ echo "*** Running examples in $examples_dir ..." failed_examples="" succeeded_examples="" -for example_name in $examples_dir/*.py +for example in $examples_dir/*.py do - example="$examples_dir/\$example_name" if [[ "\$example" == *"-mpi-lazy.py" ]] then echo "*** Running parallel lazy example (1 rank): \$example" From 51627e6186873b308e3d8ec9ef0361b43c8f26b4 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Fri, 20 May 2022 03:07:39 -0700 Subject: [PATCH 604/873] Add infrastructure for automated testing --- testing/test-examples-lassen.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing/test-examples-lassen.sh b/testing/test-examples-lassen.sh index 45b3f8943..aecb92277 100755 --- a/testing/test-examples-lassen.sh +++ b/testing/test-examples-lassen.sh @@ -7,6 +7,7 @@ EXAMPLES_HOME=$2 BATCH_SCRIPT_NAME="examples-lassen-batch.sh" examples_dir="${EXAMPLES_HOME}" +rm -rf ${BATCH_SCRIPT_NAME} cat < ${BATCH_SCRIPT_NAME} #!/bin/bash @@ -79,6 +80,7 @@ else fi echo "*** Successful tests: (\$numsuccess/\$numtests): \$succeeded_examples" +rm -rf example-testing-results printf "\$numfail\n" > example-testing-results touch example-testing-done exit \$numfail From 247b51ff43a5c40c7fdbefcab0772a81bc0dd174 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 24 May 2022 12:59:50 -0500 Subject: [PATCH 605/873] remove outdated sym_grad stuff --- test/test_operators.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/test/test_operators.py b/test/test_operators.py index 2cd2f9c3f..d3a0817da 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -31,14 +31,13 @@ pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests ) -from pytools.obj_array import make_obj_array, obj_array_vectorize +from pytools.obj_array import make_obj_array import pymbolic as pmbl # noqa import pymbolic.primitives as prim from meshmode.dof_array import thaw from meshmode.mesh import BTAG_ALL from mirgecom.flux import num_flux_central from mirgecom.fluid import ( - ConservedVars, make_conserved ) import mirgecom.symbolic as sym @@ -145,19 +144,6 @@ def central_flux_boundary(actx, discr, soln_func, btag): return discr.project(bnd_tpair.dd, dd_all_faces, flux_weak) -# TODO: Generalize mirgecom.symbolic to work with array containers -def sym_grad(dim, expr): - """Do symbolic grad.""" - if isinstance(expr, ConservedVars): - return make_conserved( - dim, q=sym_grad(dim, expr.join())) - elif isinstance(expr, np.ndarray): - return np.stack( - obj_array_vectorize(lambda e: sym.grad(dim, e), expr)) - else: - return sym.grad(dim, expr) - - @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [1, 2, 3]) @pytest.mark.parametrize("sym_test_func_factory", [ @@ -213,7 +199,7 @@ def sym_eval(expr, x_vec): return result * (0*x_vec[0] + 1) test_func = partial(sym_eval, sym_test_func) - grad_test_func = partial(sym_eval, sym_grad(dim, sym_test_func)) + grad_test_func = partial(sym_eval, sym.grad(dim, sym_test_func)) nodes = thaw(actx, discr.nodes()) int_flux = partial(central_flux_interior, actx, discr) From ce8b922d70e6d59467787c97158cdf5f5376b17c Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 24 May 2022 13:12:38 -0500 Subject: [PATCH 606/873] update symbolic evaluation in operator tests --- test/test_operators.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/test_operators.py b/test/test_operators.py index d3a0817da..41012f992 100644 --- a/test/test_operators.py +++ b/test/test_operators.py @@ -190,13 +190,13 @@ def test_grad_operator(actx_factory, dim, order, sym_test_func_factory): h_max = h_max_from_volume(discr) def sym_eval(expr, x_vec): - # FIXME: When pymbolic supports array containers mapper = sym.EvaluationMapper({"x": x_vec}) from arraycontext import rec_map_array_container - result = rec_map_array_container(mapper, expr) - # If expressions don't depend on coords (e.g., order 0), evaluated result - # will be scalar-valued, so promote to DOFArray(s) before returning - return result * (0*x_vec[0] + 1) + return rec_map_array_container( + # If expressions don't depend on coords (e.g., order 0), evaluated + # result will be scalar-valued, so promote to DOFArray + lambda comp_expr: mapper(comp_expr) + 0*x_vec[0], + expr) test_func = partial(sym_eval, sym_test_func) grad_test_func = partial(sym_eval, sym.grad(dim, sym_test_func)) From b47d64fdaf7ed1a6ec1360f6fc73a4825b90e86a Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 24 May 2022 13:15:29 -0500 Subject: [PATCH 607/873] add todo --- mirgecom/symbolic.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mirgecom/symbolic.py b/mirgecom/symbolic.py index c06c9cf34..092dd873d 100644 --- a/mirgecom/symbolic.py +++ b/mirgecom/symbolic.py @@ -113,6 +113,8 @@ def map_call(self, expr): return getattr(mm, expr.function.name)(self.rec(par)) +# TODO: Figure out how to reconcile this with the need for evaluation that promotes +# scalar values to DOF arrays (see test_operators.py) def evaluate(expr, mapper_type=EvaluationMapper, **kwargs): """Evaluate a symbolic expression using a specified mapper.""" mapper = mapper_type(kwargs) From 2aaae1b346a2ddbbb8535ccc0732e522db007140 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 28 May 2022 07:06:23 -0500 Subject: [PATCH 608/873] Shift docstring slightly for readable changeset --- mirgecom/initializers.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 0c45f3321..3672f4181 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -11,10 +11,10 @@ .. autoclass:: Uniform .. autoclass:: AcousticPulse .. autoclass:: MixtureInitializer -.. autoclass:: PlanarDiscontinuity .. autoclass:: PlanarPoiseuille -.. autoclass:: MulticomponentTrig .. autoclass:: ShearFlow +.. autoclass:: PlanarDiscontinuity +.. autoclass:: MulticomponentTrig State Initializers ^^^^^^^^^^^^^^^^^^ @@ -61,27 +61,26 @@ def initialize_fluid_state(dim, gas_model, pressure=None, temperature=None, density=None, velocity=None, mass_fractions=None): """Create a fluid state from a set of minimal input data.""" if gas_model is None: - raise ValueError("Gas model is required to create a CV.") - - if velocity is None: - velocity = np.zeros(dim) + raise ValueError("Gas model is required to create a FluidState.") - if pressure is not None and temperature is not None and density is not None: + if (pressure is not None and temperature is not None and density is not None): raise ValueError("State is overspecified, require only 2 of (pressure, " "temperature, density)") + if ((pressure is not None and (temperature is None or density is not None)) + or (temperature is not None and (pressure is None or density is None))): + raise ValueError("State is underspecified, require 2 of (pressure, " + "temperature, density)") + + if velocity is None: + velocity = np.zeros(dim) + if pressure is None: - if temperature is None or density is None: - raise ValueError("State is underspecified, require 2 of (pressure, " - "temperature, density)") pressure = gas_model.eos.get_pressure(density, temperature, mass_fractions) if temperature is None: - if density is None: - raise ValueError("State is underspecified, require 2 of (pressure, " - "temperature, density)") - temperature = gas_model.eos.get_temperature( - density, pressure, mass_fractions) + temperature = gas_model.eos.get_temperature(density, pressure, + mass_fractions) if density is None: density = gas_model.eos.get_density(pressure, temperature, mass_fractions) @@ -89,9 +88,7 @@ def initialize_fluid_state(dim, gas_model, pressure=None, temperature=None, internal_energy = gas_model.eos.get_internal_energy( temperature=temperature, mass=density, mass_fractions=mass_fractions) - species_mass = None - if mass_fractions is not None: - species_mass = density * mass_fractions + species_mass = None if mass_fractions is None else density * mass_fractions total_energy = density*internal_energy + density*np.dot(velocity, velocity)/2 momentum = density*velocity From db66d2529d1163b8969fb5a9c27e1ed02b4e8d53 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 1 Jun 2022 06:54:47 -0700 Subject: [PATCH 609/873] Added testing scripts for quartz platform. --- testing/test-examples-quartz.sh | 110 ++++++++++++++++++++++++++++++++ testing/test-quartz.sh | 13 ++++ 2 files changed, 123 insertions(+) create mode 100755 testing/test-examples-quartz.sh create mode 100755 testing/test-quartz.sh diff --git a/testing/test-examples-quartz.sh b/testing/test-examples-quartz.sh new file mode 100755 index 000000000..dfca7c61f --- /dev/null +++ b/testing/test-examples-quartz.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +EMIRGE_HOME=$1 +origin=$(pwd) +EXAMPLES_HOME=$2 +# examples_dir=${1-$origin} +BATCH_SCRIPT_NAME="examples-quartz-batch.sh" +examples_dir="${EXAMPLES_HOME}" + +rm -rf ${BATCH_SCRIPT_NAME} +cat < ${BATCH_SCRIPT_NAME} +#!/bin/bash + +#SBATCH -N 2 +#SBATCH -J mirgecom-examples-test +#SBATCH -t 120 +#SBATCH -p pbatch +#SBATCH -A uiuc + +printf "Running with EMIRGE_HOME=${EMIRGE_HOME}\n" + +source "${EMIRGE_HOME}/config/activate_env.sh" +# export PYOPENCL_CTX="port:tesla" +export XDG_CACHE_HOME="/tmp/$USER/xdg-scratch" +rm -rf \$XDG_CACHE_HOME +rm -f timing-run-done +which python +conda env list +env +env | grep LSB_MCPU_HOSTS + +serial_spawner_cmd="srun -n 1" +parallel_spawner_cmd="srun -n 2" + +set -o nounset + +rm -f *.vtu *.pvtu + +declare -i numfail=0 +declare -i numsuccess=0 +echo "*** Running examples in $examples_dir ..." +failed_examples="" +succeeded_examples="" + +for example in $examples_dir/*.py +do + if [[ "\$example" == *"-mpi-lazy.py" ]] + then + echo "*** Running parallel lazy example (2 rank): \$example" + \$parallel_spawner_cmd python -O -m mpi4py \${example} --lazy + elif [[ "\$example" == *"-mpi.py" ]]; then + echo "*** Running parallel example (2 ranks): \$example" + \$parallel_spawner_cmd python -O -m mpi4py \${example} + elif [[ "\$example" == *"-lazy.py" ]]; then + echo "*** Running serial lazy example: \$example" + python -O \${example} --lazy + else + echo "*** Running serial example: \$example" + python -O \${example} + fi + if [[ \$? -eq 0 ]] + then + ((numsuccess=numsuccess+1)) + echo "*** Example \$example succeeded." + succeeded_examples="\$succeeded_examples \$example" + else + ((numfail=numfail+1)) + echo "*** Example \$example failed." + failed_examples="\$failed_examples \$example" + fi + rm -rf *vtu *sqlite *pkl *-journal restart_data +done +((numtests=numsuccess+numfail)) +echo "*** Done running examples!" +if [[ \$numfail -eq 0 ]] +then + echo "*** No errors." +else + echo "*** Errors detected." + echo "*** Failed tests: (\$numfail/\$numtests): \$failed_examples" +fi +echo "*** Successful tests: (\$numsuccess/\$numtests): \$succeeded_examples" + +rm -rf example-testing-results +printf "\$numfail\n" > example-testing-results +touch example-testing-done +exit \$numfail + +EOF + +rm -f example-testing-done +chmod +x ${BATCH_SCRIPT_NAME} +# ---- Submit the batch script and wait for the job to finish +sbatch ${BATCH_SCRIPT_NAME} +# ---- Wait 25 minutes right off the bat +sleep 1500 +iwait=0 +while [ ! -f ./example-testing-done ]; do + iwait=$((iwait+1)) + if [ "$iwait" -gt 89 ]; then # give up after almost 2 hours + printf "Timed out waiting on batch job.\n" + exit 1 # skip the rest of the script + fi + sleep 60 +done +sleep 30 # give the batch system time to spew its junk into the log +cat *.out > example-testing-output +date >> example-testing-output +rm *.out +date diff --git a/testing/test-quartz.sh b/testing/test-quartz.sh new file mode 100755 index 000000000..7c366c4a5 --- /dev/null +++ b/testing/test-quartz.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +EMIRGE_HOME=$1 +TESTING_RESULTS_FILE=$2 +TESTING_LOG_FILE=$3 + +printf "Testing examples.\n" +./test-examples-quartz.sh ${EMIRGE_HOME} ../examples +examples_script_result=$? +printf "Examples script result: ${examples_result}" +cat example-testing-output >> ${TESTING_LOG_FILE} +examples_testing_result=$(cat example-testing-results) +printf "mirgecom-examples: ${examples_testing_result}\n" >> ${TESTING_RESULTS_FILE} From f15a92729ba23d470c38778512a49e0a05d9214a Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 1 Jun 2022 07:03:17 -0700 Subject: [PATCH 610/873] Add generic testing script for linux platforms --- testing/test-examples-linux.sh | 101 +++++++++++++++++++++++++++++++++ testing/test-linux.sh | 13 +++++ 2 files changed, 114 insertions(+) create mode 100644 testing/test-examples-linux.sh create mode 100644 testing/test-linux.sh diff --git a/testing/test-examples-linux.sh b/testing/test-examples-linux.sh new file mode 100644 index 000000000..f72c9408a --- /dev/null +++ b/testing/test-examples-linux.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +EMIRGE_HOME=$1 +origin=$(pwd) +EXAMPLES_HOME=$2 +BATCH_SCRIPT_NAME="run-examples-linux.sh" +examples_dir="${EXAMPLES_HOME}" + +rm -rf ${BATCH_SCRIPT_NAME} +cat < ${BATCH_SCRIPT_NAME} +#!/bin/bash + +printf "Running with EMIRGE_HOME=${EMIRGE_HOME}\n" + +source "${EMIRGE_HOME}/config/activate_env.sh" +# export PYOPENCL_CTX="port:tesla" +export XDG_CACHE_HOME="/tmp/$USER/xdg-scratch" +rm -rf \$XDG_CACHE_HOME +rm -f examples-run-done +which python +conda env list +env + +parallel_spawner_cmd="mpiexec -n 2" + +set -o nounset + +rm -f *.vtu *.pvtu + +declare -i numfail=0 +declare -i numsuccess=0 +echo "*** Running examples in $examples_dir ..." +failed_examples="" +succeeded_examples="" + +for example in $examples_dir/*.py +do + if [[ "\$example" == *"-mpi-lazy.py" ]] + then + echo "*** Running parallel lazy example (2 rank): \$example" + \$parallel_spawner_cmd python -O -m mpi4py \${example} --lazy + elif [[ "\$example" == *"-mpi.py" ]]; then + echo "*** Running parallel example (2 ranks): \$example" + \$parallel_spawner_cmd python -O -m mpi4py \${example} + elif [[ "\$example" == *"-lazy.py" ]]; then + echo "*** Running serial lazy example: \$example" + python -O \${example} --lazy + else + echo "*** Running serial example: \$example" + python -O \${example} + fi + if [[ \$? -eq 0 ]] + then + ((numsuccess=numsuccess+1)) + echo "*** Example \$example succeeded." + succeeded_examples="\$succeeded_examples \$example" + else + ((numfail=numfail+1)) + echo "*** Example \$example failed." + failed_examples="\$failed_examples \$example" + fi + rm -rf *vtu *sqlite *pkl *-journal restart_data +done +((numtests=numsuccess+numfail)) +echo "*** Done running examples!" +if [[ \$numfail -eq 0 ]] +then + echo "*** No errors." +else + echo "*** Errors detected." + echo "*** Failed tests: (\$numfail/\$numtests): \$failed_examples" +fi +echo "*** Successful tests: (\$numsuccess/\$numtests): \$succeeded_examples" + +rm -rf example-testing-results +printf "\$numfail\n" > example-testing-results +touch example-testing-done +exit \$numfail + +EOF + +rm -f example-testing-done +chmod +x ${BATCH_SCRIPT_NAME} +# ---- Submit the batch script and wait for the job to finish +EXAMPLES_RUN_OUTPUT=$(${BATCH_SCRIPT_NAME}) + +# ---- Wait 25 minutes right off the bat +sleep 1500 +iwait=0 +while [ ! -f ./example-testing-done ]; do + iwait=$((iwait+1)) + if [ "$iwait" -gt 89 ]; then # give up after almost 2 hours + printf "Timed out waiting on batch job.\n" + exit 1 # skip the rest of the script + fi + sleep 60 +done +sleep 30 # give the batch system time to spew its junk into the log +printf "${EXAMPLSE_RUN_OUTPUT}\n" > example-testing-output +date >> example-testing-output +date diff --git a/testing/test-linux.sh b/testing/test-linux.sh new file mode 100644 index 000000000..686561639 --- /dev/null +++ b/testing/test-linux.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +EMIRGE_HOME=$1 +TESTING_RESULTS_FILE=$2 +TESTING_LOG_FILE=$3 + +printf "Testing examples.\n" +./test-examples-linux.sh ${EMIRGE_HOME} ../examples +examples_script_result=$? +printf "Examples script result: ${examples_result}" +cat example-testing-output >> ${TESTING_LOG_FILE} +examples_testing_result=$(cat example-testing-results) +printf "mirgecom-examples: ${examples_testing_result}\n" >> ${TESTING_RESULTS_FILE} From f325aebb5f5b3526becd1f8e389f72d786390ccf Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 1 Jun 2022 13:27:23 -0700 Subject: [PATCH 611/873] Update quartz testing script. --- testing/test-examples-quartz.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/testing/test-examples-quartz.sh b/testing/test-examples-quartz.sh index dfca7c61f..8848b8eca 100755 --- a/testing/test-examples-quartz.sh +++ b/testing/test-examples-quartz.sh @@ -92,17 +92,21 @@ rm -f example-testing-done chmod +x ${BATCH_SCRIPT_NAME} # ---- Submit the batch script and wait for the job to finish sbatch ${BATCH_SCRIPT_NAME} -# ---- Wait 25 minutes right off the bat -sleep 1500 +# ---- Wait 30 minutes right off the bat +printf "Waiting for the batch job to finish." +sleep 1800 +printf "." iwait=0 while [ ! -f ./example-testing-done ]; do iwait=$((iwait+1)) if [ "$iwait" -gt 89 ]; then # give up after almost 2 hours - printf "Timed out waiting on batch job.\n" + printf "\nTimed out waiting on batch job, aborting tests.\n" exit 1 # skip the rest of the script fi sleep 60 + printf "." done +printf "(finished)\n" sleep 30 # give the batch system time to spew its junk into the log cat *.out > example-testing-output date >> example-testing-output From 20ebd3e956be8dc10ca29f5f4fcdeb68afb2c5d7 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 1 Jun 2022 13:36:19 -0700 Subject: [PATCH 612/873] Update quartz testing script for examples. Wait longer. --- testing/test-examples-quartz.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/test-examples-quartz.sh b/testing/test-examples-quartz.sh index 8848b8eca..9cfd1382a 100755 --- a/testing/test-examples-quartz.sh +++ b/testing/test-examples-quartz.sh @@ -92,14 +92,14 @@ rm -f example-testing-done chmod +x ${BATCH_SCRIPT_NAME} # ---- Submit the batch script and wait for the job to finish sbatch ${BATCH_SCRIPT_NAME} -# ---- Wait 30 minutes right off the bat +# ---- Wait 60 minutes right off the bat printf "Waiting for the batch job to finish." -sleep 1800 +sleep 3600 printf "." iwait=0 while [ ! -f ./example-testing-done ]; do iwait=$((iwait+1)) - if [ "$iwait" -gt 89 ]; then # give up after almost 2 hours + if [ "$iwait" -gt 180 ]; then # give up after 4 hours printf "\nTimed out waiting on batch job, aborting tests.\n" exit 1 # skip the rest of the script fi From 82cefd1674a689aa608da58add62e286bf8f3211 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 6 Jun 2022 12:40:54 -0500 Subject: [PATCH 613/873] Update examples after removal of pre-gen mechs --- examples/combozzle-mpi.py | 7 ++++--- examples/nsmix-mpi.py | 5 ++--- mirgecom/thermochemistry.py | 12 ++++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index b5e91b33e..f5d8bbafa 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -777,9 +777,10 @@ def vol_max(x): eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) else: - from mirgecom.thermochemistry import get_pyrometheus_wrapper_class - from mirgecom.mechanisms.uiuc import Thermochemistry - pyro_mechanism = get_pyrometheus_wrapper_class(Thermochemistry)(actx.np) + from mirgecom.thermochemistry \ + import get_thermochemistry_class_by_mechanism_name + pyro_mechanism = \ + get_thermochemistry_class_by_mechanism_name("uiuc")(actx.np) nspecies = pyro_mechanism.num_species # species_names = pyro_mechanism.species_names eos = PyrometheusMixture(pyro_mechanism, diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 4d5d06d08..3e953b79f 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -262,10 +262,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import get_pyrometheus_wrapper_class - from mirgecom.mechanisms.uiuc import Thermochemistry + from mirgecom.thermochemistry import get_thermochemistry_class_by_mechanism_name pyrometheus_mechanism = \ - get_pyrometheus_wrapper_class(Thermochemistry)(actx.np) + get_thermochemistry_class_by_mechanism_name("uiuc")(actx.np) pyro_eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index e54fc2716..547a41aa1 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -2,6 +2,7 @@ .. autofunction:: get_pyrometheus_wrapper_class .. autofunction:: get_pyrometheus_wrapper_class_from_cantera +.. autofunction:: get_thermochemistry_class_by_mechanism_name """ __copyright__ = """ @@ -128,6 +129,17 @@ def get_pyrometheus_wrapper_class_from_cantera(cantera_soln, temperature_niter=5 temperature_niter=temperature_niter) +def get_thermochemistry_class_by_mechanism_name(mechanism_name: str, + temperature_niter=5): + """Grab a pyrometheus mechanism class from the mech name.""" + from mirgecom.mechanisms import get_mechanism_cti + mech_input_source = get_mechanism_cti(mechanism_name) + from cantera import Solution + cantera_soln = Solution(phase_id="gas", source=mech_input_source) + return \ + get_pyrometheus_wrapper_class_from_cantera(cantera_soln, temperature_niter) + + # backwards compat def make_pyrometheus_mechanism_class(cantera_soln, temperature_niter=5): """Deprecate this interface to get_pyrometheus_mechanism_class.""" From 44c281d615218d01dcf7d9305bc330e35658ea6c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 7 Jun 2022 15:33:40 -0500 Subject: [PATCH 614/873] Add option to use grudge-based pre-compiled timestep. --- examples/combozzle-mpi.py | 61 ++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index f5d8bbafa..804683b9c 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -52,6 +52,7 @@ rk4_step, euler_step, lsrk54_step, lsrk144_step ) +from grudge.shortcuts import compiled_lsrk45_step from mirgecom.steppers import advance_state from mirgecom.initializers import ( MixtureInitializer, @@ -63,7 +64,7 @@ ) from mirgecom.transport import SimpleTransport from mirgecom.gas_model import GasModel -from arraycontext import thaw +from arraycontext import thaw, freeze from mirgecom.artificial_viscosity import ( av_laplacian_operator, smoothness_indicator @@ -477,7 +478,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, pass # param sanity check - allowed_integrators = ["rk4", "euler", "lsrk54", "lsrk144"] + allowed_integrators = ["rk4", "euler", "lsrk54", "lsrk144", "compiled_lsrk45"] if integrator not in allowed_integrators: error_message = "Invalid time integrator: {}".format(integrator) raise RuntimeError(error_message) @@ -533,14 +534,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, print("\tDependent variable logging is OFF.") print("#### Simluation control data: ####") - timestepper = rk4_step - if integrator == "euler": - timestepper = euler_step - if integrator == "lsrk54": - timestepper = lsrk54_step - if integrator == "lsrk144": - timestepper = lsrk144_step - xsize = domain_xlen*x_scale*weak_scale ysize = domain_ylen*y_scale*weak_scale zsize = domain_zlen*z_scale*weak_scale @@ -647,6 +640,19 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nodes = thaw(discr.nodes(), actx) ones = discr.zeros(actx) + 1.0 + timestepper = rk4_step + use_local_timestepping = False + + if integrator == "euler": + timestepper = euler_step + if integrator == "lsrk54": + timestepper = lsrk54_step + if integrator == "lsrk144": + timestepper = lsrk144_step + if integrator == "compiled_lsrk45": + timestepper = partial(compiled_lsrk45_step, actx) + use_local_timestepping = True + def vol_min(x): from grudge.op import nodal_min return actx.to_numpy(nodal_min(discr, "vol", x))[()] @@ -1020,6 +1026,8 @@ def compute_av_alpha_field(state): def my_pre_step(step, t, dt, state): cv, tseed = state fluid_state = construct_fluid_state(cv, tseed) + fluid_state = thaw(freeze(fluid_state, actx), actx) + dv = fluid_state.dv dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, cfl=current_cfl, @@ -1173,19 +1181,38 @@ def dummy_rhs(t, state): if rank == 0: print(f"Timestepping: {current_step=}, {current_t=}, {t_final=}," f" {current_dt=}") + if use_local_timestepping is False: + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=pre_step_func, istep=current_step, + post_step_callback=post_step_func, dt=current_dt, + state=current_state, t=current_t, t_final=t_final) + else: + compiled_rhs = actx.compile(my_rhs) + istep = 0 + + while current_t < t_final: + + current_state, current_dt = \ + pre_step_func(state=current_state, step=istep, t=current_t, + dt=current_dt) - current_step, current_t, current_state = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=pre_step_func, istep=current_step, - post_step_callback=post_step_func, dt=current_dt, - state=make_obj_array([current_cv, temperature_seed]), - t=current_t, t_final=t_final) + current_state = timestepper(state=current_state, t=current_t, + dt=current_dt, rhs=compiled_rhs) + + current_t = current_t + current_dt + istep = istep + 1 + + current_state, current_dt = \ + post_step_func(state=current_state, step=istep, t=current_t, + dt=current_dt) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_cv, tseed = current_state + final_cv, tseed = thaw(freeze(current_state, actx), actx) + final_fluid_state = construct_fluid_state(final_cv, tseed) final_dv = final_fluid_state.dv dt = get_sim_timestep(discr, final_fluid_state, current_t, current_dt, From 707e1673a0ad6811ca5bf80ebc8a47fe2b98a69d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 7 Jun 2022 16:47:27 -0500 Subject: [PATCH 615/873] Fix an interfaco, beef up the test. --- examples/combozzle-mpi.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 804683b9c..ff23bc408 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -182,7 +182,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # {{{ Some discretization parameters dim = 3 - order = 1 + order = 3 # - scales the size of the domain x_scale = 1 @@ -260,7 +260,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # coarse-scale grid/domain control n_refine = 1 # scales npts/axis uniformly - weak_scale = 1 # scales domain and npts/axis keeping dt constant + weak_scale = 2 # scales domain uniformly, keeping dt constant # AV / Shock-capturing parameters alpha_sc = 0.5 @@ -642,6 +642,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = rk4_step use_local_timestepping = False + integrator = "compiled_lsrk45" if integrator == "euler": timestepper = euler_step @@ -1026,7 +1027,7 @@ def compute_av_alpha_field(state): def my_pre_step(step, t, dt, state): cv, tseed = state fluid_state = construct_fluid_state(cv, tseed) - fluid_state = thaw(freeze(fluid_state, actx), actx) + # fluid_state = thaw(freeze(fluid_state, actx), actx) dv = fluid_state.dv @@ -1197,8 +1198,8 @@ def dummy_rhs(t, state): pre_step_func(state=current_state, step=istep, t=current_t, dt=current_dt) - current_state = timestepper(state=current_state, t=current_t, - dt=current_dt, rhs=compiled_rhs) + current_state = timestepper(current_state, current_t, current_dt, + compiled_rhs) current_t = current_t + current_dt istep = istep + 1 From af867348ef260c3beb42f2ee522ef86f121268c2 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 8 Jun 2022 07:24:19 -0700 Subject: [PATCH 616/873] Add support for compiled timesteps, force_eval support --- examples/combozzle-mpi.py | 105 +++++++++++++++++--------------------- mirgecom/simutil.py | 10 ++++ mirgecom/steppers.py | 27 +++++++--- 3 files changed, 75 insertions(+), 67 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index ff23bc408..2e3fc5131 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -1,4 +1,4 @@ -"""Prediction-adjacent performance tester.""" +"""Predictionf-adjacent performance tester.""" __copyright__ = """ Copyright (C) 2020 University of Illinois Board of Trustees @@ -163,7 +163,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_overintegration=False, use_profiling=False, casename=None, lazy=False, rst_filename=None, actx_class=PyOpenCLArrayContext, - log_dependent=False, input_file=None): + log_dependent=False, input_file=None, + force_eval=True): """Drive example.""" cl_ctx = ctx_factory() @@ -185,7 +186,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, order = 3 # - scales the size of the domain - x_scale = 1 + x_scale = 2 y_scale = 1 z_scale = 1 @@ -210,7 +211,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_dt = 1e-9 current_t = 0 constant_cfl = False - integrator = "euler" + integrator = "compiled_lsrk45" # i.o frequencies nstatus = 100 @@ -260,7 +261,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # coarse-scale grid/domain control n_refine = 1 # scales npts/axis uniformly - weak_scale = 2 # scales domain uniformly, keeping dt constant + weak_scale = 4 # scales domain uniformly, keeping dt constant # AV / Shock-capturing parameters alpha_sc = 0.5 @@ -380,6 +381,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, do_callbacks = int(input_data["do_callbacks"]) except KeyError: pass + try: + if force_eval: + force_eval = bool(input_data["force_eval"]) + except KeyError: + pass try: nviz = int(input_data["nviz"]) except KeyError: @@ -491,6 +497,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, print(f"\t{single_gas_only=},{dummy_rhs_only=}") print(f"\t{periodic_boundary=},{adiabatic_boundary=}") print(f"\t{timestepping_on=}, {inviscid_only=}") + print(f"\t{force_eval=}") print(f"\t{av_on=}, {sponge_on=}, {do_callbacks=}") print(f"\t{nspecies=}, {init_only=}") print(f"\t{health_pres_min=}, {health_pres_max=}") @@ -624,25 +631,17 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if grid_only: return 0 - from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD - from meshmode.discretization.poly_element import \ - default_simplex_group_factory, QuadratureSimplexGroupFactory - - discr = EagerDGDiscretization( - actx, local_mesh, - discr_tag_to_group_factory={ - DISCR_TAG_BASE: default_simplex_group_factory( - base_dim=local_mesh.dim, order=order), - DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) - }, - mpi_communicator=comm - ) + from grudge.dof_desc import DISCR_TAG_QUAD + from mirgecom.discretization import create_discretization_collection + + discr = create_discretization_collection(actx, local_mesh, order, comm) nodes = thaw(discr.nodes(), actx) ones = discr.zeros(actx) + 1.0 + def _compiled_stepper_wrapper(state, t, dt, rhs): + return compiled_lsrk45_step(actx, state, t, dt, rhs) + timestepper = rk4_step - use_local_timestepping = False - integrator = "compiled_lsrk45" if integrator == "euler": timestepper = euler_step @@ -651,8 +650,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if integrator == "lsrk144": timestepper = lsrk144_step if integrator == "compiled_lsrk45": - timestepper = partial(compiled_lsrk45_step, actx) - use_local_timestepping = True + timestepper = _compiled_stepper_wrapper def vol_min(x): from grudge.op import nodal_min @@ -1026,13 +1024,6 @@ def compute_av_alpha_field(state): def my_pre_step(step, t, dt, state): cv, tseed = state - fluid_state = construct_fluid_state(cv, tseed) - # fluid_state = thaw(freeze(fluid_state, actx), actx) - - dv = fluid_state.dv - - dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, cfl=current_cfl, - t_final=t_final, constant_cfl=constant_cfl) try: @@ -1040,12 +1031,25 @@ def my_pre_step(step, t, dt, state): logmgr.tick_before() if do_checkpoint: + + fluid_state = construct_fluid_state(cv, tseed) + dv = fluid_state.dv + from mirgecom.simutil import check_step do_viz = check_step(step=step, interval=nviz) do_restart = check_step(step=step, interval=nrestart) do_health = check_step(step=step, interval=nhealth) do_status = check_step(step=step, interval=nstatus) + # If we plan on doing anything with the state, then + # we need to make sure it is evaluated first. + if any([do_viz, do_restart, do_health, do_status, constant_cfl]): + fluid_state=force_eval(actx, fluid_state) + + dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, + cfl=current_cfl, t_final=t_final, + constant_cfl=constant_cfl) + if do_health: health_errors = global_reduce(my_health_check(cv, dv), op="lor") if health_errors: @@ -1073,8 +1077,6 @@ def my_pre_step(step, t, dt, state): def my_post_step(step, t, dt, state): cv, tseed = state - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) if log_dependent: @@ -1182,42 +1184,24 @@ def dummy_rhs(t, state): if rank == 0: print(f"Timestepping: {current_step=}, {current_t=}, {t_final=}," f" {current_dt=}") - if use_local_timestepping is False: - current_step, current_t, current_state = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=pre_step_func, istep=current_step, - post_step_callback=post_step_func, dt=current_dt, - state=current_state, t=current_t, t_final=t_final) - else: - compiled_rhs = actx.compile(my_rhs) - istep = 0 - - while current_t < t_final: - - current_state, current_dt = \ - pre_step_func(state=current_state, step=istep, t=current_t, - dt=current_dt) - - current_state = timestepper(current_state, current_t, current_dt, - compiled_rhs) - - current_t = current_t + current_dt - istep = istep + 1 - - current_state, current_dt = \ - post_step_func(state=current_state, step=istep, t=current_t, - dt=current_dt) + current_step, current_t, current_state = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=pre_step_func, istep=current_step, + post_step_callback=post_step_func, dt=current_dt, + state=current_state, t=current_t, t_final=t_final, + force_eval=force_eval) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") final_cv, tseed = thaw(freeze(current_state, actx), actx) - final_fluid_state = construct_fluid_state(final_cv, tseed) + final_fluid_state = thaw(freeze(current_state, actx) actx) + final_dv = final_fluid_state.dv dt = get_sim_timestep(discr, final_fluid_state, current_t, current_dt, - current_cfl, t_final, constant_cfl) + current_cfl, t_final, constant_cfl) my_write_viz(step=current_step, t=current_t, cv=final_cv, dv=final_dv) my_write_status(dt=dt, cfl=current_cfl, dv=final_dv) @@ -1252,6 +1236,8 @@ def dummy_rhs(t, state): nargs="?", action="store", help="simulation config file") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") + parser.add_argument("--no-force", action="store_true", + help="Turn off force lazy eval between timesteps") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, @@ -1265,6 +1251,7 @@ def dummy_rhs(t, state): warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") lazy = args.lazy log_dependent = False + force_eval = not args.no_force if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -1290,6 +1277,6 @@ def dummy_rhs(t, state): use_overintegration=args.overintegration, use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent) + log_dependent=log_dependent, force_eval=force_eval) # vim: foldmethod=marker diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 264445094..8a422ef5e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -28,6 +28,11 @@ .. autofunction:: limit_species_mass_fractions .. autofunction:: species_fraction_anomaly_relaxation + +Lazy eval utilities +------------------- + +.. autofunction:: force_eval """ __copyright__ = """ @@ -490,3 +495,8 @@ def species_fraction_anomaly_relaxation(cv, alpha=1.): momentum=0.*cv.momentum, energy=0.*cv.energy, species_mass=alpha*cv.mass*new_y) return 0.*cv + + +def force_eval(actx, expn): + """Convenience wrapper for forcing evaluation of expressions.""" + return thaw(freeze(expn, actx), actx) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index bd5bfd877..71b052b54 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -70,7 +70,7 @@ def _force_evaluation(actx, state): def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, t=0.0, istep=0, pre_step_callback=None, - post_step_callback=None): + post_step_callback=None, force_eval=True): """Advance state from some time (t) to some time (t_final). Parameters @@ -102,6 +102,9 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, An optional user-defined function, with signature: ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. + force_eval + An optional boolean indicating whether to force lazy evaluation between + timesteps. Defaults to True. Returns ------- @@ -121,11 +124,13 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, compiled_rhs = _compile_rhs(actx, rhs) while t < t_final: - state = _force_evaluation(actx, state) if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) + if force_eval: + state = _force_evaluation(actx, state) + state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) t += dt @@ -139,7 +144,8 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, component_id="state", t=0.0, istep=0, - pre_step_callback=None, post_step_callback=None): + pre_step_callback=None, post_step_callback=None, + force_eval=True): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. Parameters @@ -190,7 +196,6 @@ def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, compiled_rhs, t, dt, state) while t < t_final: - state = _force_evaluation(actx, state) if pre_step_callback is not None: state, dt = pre_step_callback(state=state, @@ -198,6 +203,9 @@ def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, t=t, dt=dt) stepper_cls.dt = dt + if force_eval: + state = _force_evaluation(actx, state) + # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): @@ -256,7 +264,7 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, component_id="state", pre_step_callback=None, - post_step_callback=None): + post_step_callback=None, force_eval=True): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -294,7 +302,9 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, An optional user-defined function, with signature: ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. - + force_eval + An optional boolean indicating whether to force lazy evaluation between + timesteps. Defaults to True. Returns ------- istep: int @@ -323,7 +333,8 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, state=state, t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - component_id=component_id, istep=istep + component_id=component_id, istep=istep, + force_eval=force_eval ) else: (current_step, current_t, current_state) = \ @@ -332,7 +343,7 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, state=state, t=t, t_final=t_final, dt=dt, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - istep=istep + istep=istep, force_eval=force_eval ) return current_step, current_t, current_state From 4e09f95a637a1f23f73a0cac066350aa6ffeec60 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Jun 2022 09:42:52 -0500 Subject: [PATCH 617/873] Fix some codos. --- examples/combozzle-mpi.py | 19 ++++++++++--------- mirgecom/simutil.py | 5 +++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 2e3fc5131..988aa5929 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -45,6 +45,7 @@ get_sim_timestep, generate_and_distribute_mesh, write_visfile, + force_evaluation ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -64,7 +65,7 @@ ) from mirgecom.transport import SimpleTransport from mirgecom.gas_model import GasModel -from arraycontext import thaw, freeze +from arraycontext import thaw from mirgecom.artificial_viscosity import ( av_laplacian_operator, smoothness_indicator @@ -1044,7 +1045,7 @@ def my_pre_step(step, t, dt, state): # If we plan on doing anything with the state, then # we need to make sure it is evaluated first. if any([do_viz, do_restart, do_health, do_status, constant_cfl]): - fluid_state=force_eval(actx, fluid_state) + fluid_state = force_eval(actx, fluid_state) dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, cfl=current_cfl, t_final=t_final, @@ -1185,19 +1186,19 @@ def dummy_rhs(t, state): print(f"Timestepping: {current_step=}, {current_t=}, {t_final=}," f" {current_dt=}") current_step, current_t, current_state = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=pre_step_func, istep=current_step, - post_step_callback=post_step_func, dt=current_dt, - state=current_state, t=current_t, t_final=t_final, - force_eval=force_eval) + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=pre_step_func, istep=current_step, + post_step_callback=post_step_func, dt=current_dt, + state=current_state, t=current_t, t_final=t_final, + force_eval=force_eval) # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") - final_cv, tseed = thaw(freeze(current_state, actx), actx) + final_cv, tseed = force_evaluation(actx, current_state) final_fluid_state = construct_fluid_state(final_cv, tseed) - final_fluid_state = thaw(freeze(current_state, actx) actx) + final_fluid_state = force_evaluation(actx, final_fluid_state) final_dv = final_fluid_state.dv dt = get_sim_timestep(discr, final_fluid_state, current_t, current_dt, diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 8a422ef5e..c4f759ea9 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -32,7 +32,7 @@ Lazy eval utilities ------------------- -.. autofunction:: force_eval +.. autofunction:: force_evaluation """ __copyright__ = """ @@ -497,6 +497,7 @@ def species_fraction_anomaly_relaxation(cv, alpha=1.): return 0.*cv -def force_eval(actx, expn): +def force_evaluation(actx, expn): """Convenience wrapper for forcing evaluation of expressions.""" + from arraycontext import thaw, freeze return thaw(freeze(expn, actx), actx) From 80280ca721a6782e80c2c1dd4692112867d42f5e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Jun 2022 09:46:11 -0500 Subject: [PATCH 618/873] Make doc in imperative mood. --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c4f759ea9..30ec5ce08 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -498,6 +498,6 @@ def species_fraction_anomaly_relaxation(cv, alpha=1.): def force_evaluation(actx, expn): - """Convenience wrapper for forcing evaluation of expressions.""" + """Wrap freeze/thaw forcing evaluation of expressions.""" from arraycontext import thaw, freeze return thaw(freeze(expn, actx), actx) From caa4b4f42d041836ffa2a88a22c59635c12fcd37 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Jun 2022 10:03:35 -0500 Subject: [PATCH 619/873] Fix doco --- mirgecom/steppers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 71b052b54..c74f27cd7 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -305,6 +305,7 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, force_eval An optional boolean indicating whether to force lazy evaluation between timesteps. Defaults to True. + Returns ------- istep: int From a463678e589633712a31e3af1b22b1df6cc45f11 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Jun 2022 10:48:59 -0500 Subject: [PATCH 620/873] Dont use a giant grid in combozzle. --- examples/combozzle-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 988aa5929..0a98bbb71 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -187,7 +187,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, order = 3 # - scales the size of the domain - x_scale = 2 + x_scale = 1 y_scale = 1 z_scale = 1 @@ -262,7 +262,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # coarse-scale grid/domain control n_refine = 1 # scales npts/axis uniformly - weak_scale = 4 # scales domain uniformly, keeping dt constant + weak_scale = 1 # scales domain uniformly, keeping dt constant # AV / Shock-capturing parameters alpha_sc = 0.5 From 832ba8a62099dea682f00438e88c7b210f8dde21 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Jun 2022 11:31:33 -0500 Subject: [PATCH 621/873] Do not hard-code force pre-compiled lsrk from grudge. --- examples/combozzle-mpi.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 0a98bbb71..cb6bb9fa0 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -212,7 +212,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_dt = 1e-9 current_t = 0 constant_cfl = False - integrator = "compiled_lsrk45" + integrator = "euler" # i.o frequencies nstatus = 100 @@ -652,6 +652,7 @@ def _compiled_stepper_wrapper(state, t, dt, rhs): timestepper = lsrk144_step if integrator == "compiled_lsrk45": timestepper = _compiled_stepper_wrapper + force_eval = False def vol_min(x): from grudge.op import nodal_min @@ -1045,7 +1046,7 @@ def my_pre_step(step, t, dt, state): # If we plan on doing anything with the state, then # we need to make sure it is evaluated first. if any([do_viz, do_restart, do_health, do_status, constant_cfl]): - fluid_state = force_eval(actx, fluid_state) + fluid_state = force_evaluation(actx, fluid_state) dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, cfl=current_cfl, t_final=t_final, From ca8d927f42ea10b0bdbf6a796e7b6fc03c4e6f51 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 23 Jun 2022 10:18:54 -0500 Subject: [PATCH 622/873] Use disc coll creation util. --- test/test_eos.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 2f54a643a..c0edb984f 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -98,8 +98,8 @@ def do_not_test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): logger.info(f"Number of elements {mesh.nelements}") - discr_eager = EagerDGDiscretization(actx_eager, mesh, order=order) - discr_lazy = EagerDGDiscretization(actx_lazy, mesh, order=order) + discr_eager = create_discretization_collection(actx_eager, mesh, order=order) + discr_lazy = create_discretization_collection(actx_lazy, mesh, order=order) # Pyrometheus initialization mech_cti = get_mechanism_cti(mechname) From ba06b4bbd08854f886210f260fcaa6f6874a6c0c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 23 Jun 2022 10:45:16 -0500 Subject: [PATCH 623/873] Update combozzle disc creation API --- examples/combozzle-mpi.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index cb6bb9fa0..88e5680d5 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -33,9 +33,11 @@ from meshmode.array_context import PyOpenCLArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from grudge.eager import EagerDGDiscretization from grudge.dof_desc import DTAG_BOUNDARY from grudge.shortcuts import make_visualizer +from grudge.dof_desc import DISCR_TAG_QUAD +from mirgecom.discretization import create_discretization_collection + from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -632,10 +634,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if grid_only: return 0 - from grudge.dof_desc import DISCR_TAG_QUAD - from mirgecom.discretization import create_discretization_collection - - discr = create_discretization_collection(actx, local_mesh, order, comm) + discr = create_discretization_collection(actx, local_mesh, order, + mpi_communicator=comm) nodes = thaw(discr.nodes(), actx) ones = discr.zeros(actx) + 1.0 @@ -880,8 +880,9 @@ def get_fluid_state(cv, tseed): temperature_seed = restart_data["temperature_seed"] else: rst_cv = restart_data["cv"] - old_discr = EagerDGDiscretization(actx, local_mesh, order=rst_order, - mpi_communicator=comm) + old_discr = \ + create_discretization_collection(actx, local_mesh, order=rst_order, + mpi_communicator=comm) from meshmode.discretization.connection import make_same_mesh_connection connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), old_discr.discr_from_dd("vol")) From 021c1e86575d48a11f071352927d6391ab579a12 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 23 Jun 2022 11:42:09 -0500 Subject: [PATCH 624/873] Use exact boundary for mixture test --- examples/mixture-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 869cfde81..e3a31a87c 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -222,7 +222,7 @@ def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): **kwargs), gas_model, temperature_seed=state_minus.temperature) - if True: + if False: my_boundary = AdiabaticSlipBoundary() boundaries = {BTAG_ALL: my_boundary} else: From 7709dcdd0e037f80db3c2fac83c74ef30d641ec9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 30 Jun 2022 08:22:49 -0500 Subject: [PATCH 625/873] Update mech input API in test --- test/test_eos.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 77b947e19..aa383cd1f 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -102,8 +102,8 @@ def do_not_test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): discr_lazy = create_discretization_collection(actx_lazy, mesh, order=order) # Pyrometheus initialization - mech_cti = get_mechanism_cti(mechname) - sol = cantera.Solution(phase_id="gas", source=mech_cti) + mech_input = get_mechanism_input(mechname) + sol = cantera.Solution(name="gas", yaml=mech_input) from mirgecom.thermochemistry import make_pyrometheus_mechanism_class pyro_eager = make_pyrometheus_mechanism_class(sol)(actx_eager.np) @@ -131,7 +131,7 @@ def get_temperature_lazy(energy, y, tguess): tempin = fac * temp0 print(f"Testing (t,P) = ({tempin}, {pressin})") - cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) + cantera_soln = cantera.Solution(phase_id="gas", source=mech_input) cantera_soln.TPY = tempin, pressin, y0s cantera_soln.equilibrate("UV") can_t, can_rho, can_y = cantera_soln.TDY From 9b7b7fd73f485257262f321e2ce645c62a32acc9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 30 Jun 2022 09:41:12 -0500 Subject: [PATCH 626/873] Remove allsync from examples --- examples/autoignition-mpi.py | 27 +++++++++++++-------------- examples/mixture-mpi.py | 17 ++++++++--------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 8d6d75ec4..5a3796d56 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -40,8 +40,7 @@ from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, - write_visfile, - allsync + write_visfile ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -379,14 +378,14 @@ def my_write_status(dt, cfl, dv=None): press = dv.pressure from grudge.op import nodal_min_loc, nodal_max_loc - tmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), - comm=comm, op=MPI.MIN) - tmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), - comm=comm, op=MPI.MAX) - pmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", press)), - comm=comm, op=MPI.MIN) - pmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", press)), - comm=comm, op=MPI.MAX) + tmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + op="min") + tmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + op="max") + pmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + op="min") + pmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + op="max") dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" status_msg = status_msg + dv_status_msg @@ -487,14 +486,14 @@ def my_get_timestep(t, dt, state): if constant_cfl: ts_field = current_cfl * compute_dt(state) from grudge.op import nodal_min_loc - dt = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", ts_field)), - comm=comm, op=MPI.MIN) + dt = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", ts_field)), + op="min") cfl = current_cfl else: ts_field = compute_cfl(state, current_dt) from grudge.op import nodal_max_loc - cfl = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", ts_field)), - comm=comm, op=MPI.MAX) + cfl = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", ts_field)), + op="max") return ts_field, cfl, min(t_remaining, dt) def my_pre_step(step, t, dt, state): diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 8a4a8e224..638313155 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -264,7 +264,6 @@ def get_fluid_state(cv, tseed): logger.info(init_message) def my_write_status(component_errors, dv=None): - from mirgecom.simutil import allsync status_msg = ( "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) @@ -273,14 +272,14 @@ def my_write_status(component_errors, dv=None): press = dv.pressure from grudge.op import nodal_min_loc, nodal_max_loc - tmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), - comm=comm, op=MPI.MIN) - tmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), - comm=comm, op=MPI.MAX) - pmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", press)), - comm=comm, op=MPI.MIN) - pmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", press)), - comm=comm, op=MPI.MAX) + tmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + op="min") + tmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + op="max") + pmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + op="min") + pmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + op="max") dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" status_msg = status_msg + dv_status_msg From 5a6b91961692a3779f909bf8ee5b39f5152e253b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 30 Jun 2022 11:20:56 -0500 Subject: [PATCH 627/873] Update new examples to actx.{freeze,thaw} --- examples/combozzle-mpi.py | 3 +-- examples/poiseuille-multispecies-mpi.py | 5 ++--- examples/scalar-advdiff-mpi.py | 5 ++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 88e5680d5..8f703326e 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -67,7 +67,6 @@ ) from mirgecom.transport import SimpleTransport from mirgecom.gas_model import GasModel -from arraycontext import thaw from mirgecom.artificial_viscosity import ( av_laplacian_operator, smoothness_indicator @@ -636,7 +635,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, discr = create_discretization_collection(actx, local_mesh, order, mpi_communicator=comm) - nodes = thaw(discr.nodes(), actx) + nodes = actx.thaw(discr.nodes()) ones = discr.zeros(actx) + 1.0 def _compiled_stepper_wrapper(state, t, dt, rhs): diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index dbd534c15..7f96347e1 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -30,7 +30,6 @@ from pytools.obj_array import make_obj_array from functools import partial -from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization @@ -189,7 +188,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, }, mpi_communicator=comm ) - nodes = thaw(discr.nodes(), actx) + nodes = actx.thaw(discr.nodes()) if use_overintegration: quadrature_tag = DISCR_TAG_QUAD @@ -273,7 +272,7 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): def _exact_boundary_solution(discr, btag, gas_model, state_minus, **kwargs): actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) - nodes = thaw(bnd_discr.nodes(), actx) + nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, cv=state_minus.cv, **kwargs), gas_model) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index cd87e69f0..b96b13879 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -30,7 +30,6 @@ from functools import partial from pytools.obj_array import make_obj_array -from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -156,7 +155,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, discr = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = thaw(discr.nodes(), actx) + nodes = actx.thaw(discr.nodes()) def vol_min(x): from grudge.op import nodal_min @@ -227,7 +226,7 @@ def vol_max(x): def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): actx = state_minus.array_context bnd_discr = discr.discr_from_dd(btag) - nodes = thaw(bnd_discr.nodes(), actx) + nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) From 5942b5a8509be74b261111f52614447cdca3e837 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 30 Jun 2022 11:29:39 -0500 Subject: [PATCH 628/873] Update Mengaldo BCs with actx.{freeze, thaw} --- mirgecom/boundary.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index c13429f42..4a5de2ede 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -796,7 +796,7 @@ def outflow_state(self, discr, btag, gas_model, state_minus, **kwargs): [Mengaldo_2014]_ eqn. 40 if super-sonic, 41 if sub-sonic. """ actx = state_minus.array_context - nhat = thaw(discr.normal(btag), actx) + nhat = actx.thaw(discr.normal(btag)) # boundary-normal velocity boundary_vel = np.dot(state_minus.velocity, nhat)*nhat boundary_speed = actx.np.sqrt(np.dot(boundary_vel, boundary_vel)) @@ -855,7 +855,7 @@ def inflow_state(self, discr, btag, gas_model, state_minus, **kwargs): [Mengaldo_2014]_ eqn. 40 if super-sonic, 41 if sub-sonic. """ actx = state_minus.array_context - nhat = thaw(discr.normal(btag), actx) + nhat = actx.thaw(discr.normal(btag)) v_plus = np.dot(self._free_stream_state.velocity, nhat) rho_plus = self._free_stream_state.mass_density @@ -987,7 +987,7 @@ def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, temperature_seed=state_minus.temperature) state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) - normal = thaw(discr.normal(btag), state_minus.array_context) + normal = state_minus.array_context.thaw(discr.normal(btag)) return numerical_flux_func(state_pair, gas_model, normal) def temperature_bc(self, state_minus, **kwargs): @@ -1023,7 +1023,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, """Return the boundary flux for the divergence of the viscous flux.""" from mirgecom.viscous import viscous_flux actx = state_minus.array_context - normal = thaw(discr.normal(btag), actx) + normal = actx.thaw(discr.normal(btag)) state_plus = self.isothermal_wall_state(discr=discr, btag=btag, gas_model=gas_model, @@ -1092,7 +1092,7 @@ def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, discr, btag, gas_model, state_minus) state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) - normal = thaw(discr.normal(btag), state_minus.array_context) + normal = state_minus.array_context.thaw(discr.normal(btag)) return numerical_flux_func(state_pair, gas_model, normal) def temperature_bc(self, state_minus, **kwargs): @@ -1131,7 +1131,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, """Return the boundary flux for the divergence of the viscous flux.""" from mirgecom.viscous import viscous_flux actx = state_minus.array_context - normal = thaw(discr.normal(btag), actx) + normal = actx.thaw(discr.normal(btag)) state_plus = self.adiabatic_wall_state_for_diffusion( discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus) @@ -1183,7 +1183,7 @@ def adiabatic_wall_state_for_advection(self, discr, btag, gas_model, state_minus, **kwargs): """Return state with opposite normal momentum.""" actx = state_minus.array_context - nhat = thaw(discr.normal(btag), actx) + nhat = actx.thaw(discr.normal(btag)) mom_plus = \ (state_minus.momentum_density @@ -1201,7 +1201,7 @@ def adiabatic_wall_state_for_diffusion(self, discr, btag, gas_model, state_minus, **kwargs): """Return state with 0 velocities and energy(Twall).""" actx = state_minus.array_context - nhat = thaw(discr.normal(btag), actx) + nhat = actx.thaw(discr.normal(btag)) mom_plus = \ (state_minus.momentum_density @@ -1222,7 +1222,7 @@ def inviscid_wall_flux(self, discr, btag, gas_model, state_minus, discr, btag, gas_model, state_minus) state_pair = TracePair(btag, interior=state_minus, exterior=wall_state) - normal = thaw(discr.normal(btag), state_minus.array_context) + normal = state_minus.array_context.thaw(discr.normal(btag)) return numerical_flux_func(state_pair, gas_model, normal) def temperature_bc(self, state_minus, **kwargs): @@ -1261,7 +1261,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, """Return the boundary flux for the divergence of the viscous flux.""" from mirgecom.viscous import viscous_flux actx = state_minus.array_context - normal = thaw(discr.normal(btag), actx) + normal = actx.thaw(discr.normal(btag)) state_plus = self.adiabatic_wall_state_for_diffusion( discr=discr, btag=btag, gas_model=gas_model, state_minus=state_minus) @@ -1283,7 +1283,7 @@ def adiabatic_slip_grad_av(self, discr, btag, grad_av_minus, **kwargs): # Grab some boundary-relevant data dim, = grad_av_minus.mass.shape actx = grad_av_minus.mass[0].array_context - nhat = thaw(discr.norm(btag), actx) + nhat = actx.thaw(discr.norm(btag)) # Subtract 2*wall-normal component of q # to enforce q=0 on the wall From c9976eeae5662b9d215e9d06f4bd0c8ad538b8ba Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 30 Jun 2022 11:30:08 -0500 Subject: [PATCH 629/873] Update simutil force eval with actx.{freeze, thaw} --- mirgecom/simutil.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d10c6a42f..361b391ab 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -532,5 +532,4 @@ def species_fraction_anomaly_relaxation(cv, alpha=1.): def force_evaluation(actx, expn): """Wrap freeze/thaw forcing evaluation of expressions.""" - from arraycontext import thaw, freeze - return thaw(freeze(expn, actx), actx) + return actx.thaw(actx.freeze(expn)) From 05e149ceb793a95dada70d7a57c89535b2372bae Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 30 Jun 2022 11:30:47 -0500 Subject: [PATCH 630/873] Update lazy Pyro/EOS test with actx.{freeze, thaw} --- test/test_eos.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 872de75a8..e33568821 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -157,24 +157,23 @@ def get_temperature_lazy(energy, y, tguess): pyro_rho_eager = pyro_eager.get_density(pin_eager, tin_eager, yin_eager) pyro_rho_lazy = pyro_lazy.get_density(pin_lazy, tin_lazy, yin_lazy) - from arraycontext import thaw, freeze, to_numpy + from arraycontext import to_numpy rho_lazy = to_numpy( - thaw(freeze(pyro_rho_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_rho_lazy)) ) pyro_e_eager = pyro_eager.get_mixture_internal_energy_mass(tin_eager, yin_eager) pyro_e_lazy = pyro_lazy.get_mixture_internal_energy_mass(tin_lazy, yin_lazy) e_lazy = to_numpy( - thaw(freeze(pyro_e_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_e_lazy)) ) # These both take 5 Newton iterations pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager) pyro_t_lazy = temp_lazy(pyro_e_lazy, tin_lazy, yin_lazy) - t_lazy = to_numpy(thaw(freeze(pyro_t_lazy, actx_lazy), actx_eager), - actx_eager) + t_lazy = to_numpy(actx_eager.thaw(actx_lazy.freeze(pyro_t_lazy))) pyro_p_eager = pyro_eager.get_pressure(pyro_rho_eager, tin_eager, yin_eager) pyro_c_eager = pyro_eager.get_concentrations(pyro_rho_eager, yin_eager) @@ -186,13 +185,13 @@ def get_temperature_lazy(energy, y, tguess): pyro_k_lazy = pyro_lazy.get_fwd_rate_coefficients(pyro_t_lazy, pyro_c_lazy) c_lazy = to_numpy( - thaw(freeze(pyro_c_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_c_lazy)) ) p_lazy = to_numpy( - thaw(freeze(pyro_p_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_p_lazy)) ) k_lazy = to_numpy( - thaw(freeze(pyro_k_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_k_lazy)) ) # Pyro chemistry functions @@ -208,10 +207,10 @@ def get_temperature_lazy(energy, y, tguess): pyro_t_lazy, yin_lazy) r_lazy = to_numpy( - thaw(freeze(pyro_r_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_r_lazy)) ) omega_lazy = to_numpy( - thaw(freeze(pyro_omega_lazy, actx_lazy), actx_eager), actx_eager + actx_eager.thaw(actx_lazy.freeze(pyro_omega_lazy)) ) print(f"can(rho, y, p, t, e, k) = ({can_rho}, {can_y}, " From 91ed9723efc99b3dacf3b2df2e15f3614d82afdb Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sat, 9 Apr 2022 01:42:06 -0500 Subject: [PATCH 631/873] fix a couple of issues with forced evaluation --- examples/heat-source-mpi.py | 6 +++++- mirgecom/steppers.py | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index d38e28cf8..5d17f47e0 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -27,6 +27,8 @@ import numpy.linalg as la # noqa import pyopencl as cl +from arraycontext import freeze, thaw + from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa import grudge.op as op from grudge.shortcuts import make_visualizer @@ -122,7 +124,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, source_width = 0.2 - from arraycontext import thaw nodes = thaw(discr.nodes(), actx) boundaries = { @@ -172,6 +173,9 @@ def rhs(t, u): ], overwrite=True) u = rk4_step(u, t, dt, compiled_rhs) + # Force evaluation once per timestep + u = thaw(freeze(u), actx) + t += dt istep += 1 diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index a8f129487..2bb347716 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -126,8 +126,6 @@ def _advance_state_stepper_func(rhs, timestepper, compiled_rhs = _compile_rhs(actx, rhs) while t < t_final: - state = _force_evaluation(actx, state) - if logmgr: logmgr.tick_before() @@ -135,6 +133,7 @@ def _advance_state_stepper_func(rhs, timestepper, state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) + state = _force_evaluation(actx, state) t += dt istep += 1 @@ -207,7 +206,6 @@ def _advance_state_leap(rhs, timestepper, state, compiled_rhs, t, dt, state) while t < t_final: - state = _force_evaluation(actx, state) if pre_step_callback is not None: state, dt = pre_step_callback(state=state, @@ -219,6 +217,8 @@ def _advance_state_leap(rhs, timestepper, state, for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): state = event.state_component + state = _force_evaluation(actx, state) + t += dt if post_step_callback is not None: From 9cc43585f84ee752849515805a0f4c387f87a9b5 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 12 Apr 2022 10:21:48 -0500 Subject: [PATCH 632/873] make force_evaluation public and move to utils --- examples/heat-source-mpi.py | 7 +++---- mirgecom/steppers.py | 17 ++++------------- mirgecom/utils.py | 9 +++++++++ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 5d17f47e0..b08cb7b6a 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -27,14 +27,13 @@ import numpy.linalg as la # noqa import pyopencl as cl -from arraycontext import freeze, thaw - from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa import grudge.op as op from grudge.shortcuts import make_visualizer from grudge.dof_desc import DTAG_BOUNDARY from mirgecom.discretization import create_discretization_collection from mirgecom.integrators import rk4_step +from mirgecom.utils import force_evaluation from mirgecom.diffusion import ( diffusion_operator, DirichletDiffusionBoundary, @@ -124,6 +123,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, source_width = 0.2 + from arraycontext import thaw nodes = thaw(discr.nodes(), actx) boundaries = { @@ -173,8 +173,7 @@ def rhs(t, u): ], overwrite=True) u = rk4_step(u, t, dt, compiled_rhs) - # Force evaluation once per timestep - u = thaw(freeze(u), actx) + u = force_evaluation(actx, u) t += dt istep += 1 diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 2bb347716..0e11cfb40 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -31,12 +31,9 @@ import numpy as np from logpyle import set_dt from mirgecom.logging_quantities import set_sim_state +from mirgecom.utils import force_evaluation from pytools import memoize_in -from arraycontext import ( - freeze, - thaw, - get_container_context_recursively -) +from arraycontext import get_container_context_recursively def _compile_timestepper(actx, timestepper, rhs): @@ -64,12 +61,6 @@ def get_rhs(): return get_rhs() -def _force_evaluation(actx, state): - if actx is None: - return state - return thaw(freeze(state, actx), actx) - - def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, t=0.0, istep=0, @@ -133,7 +124,7 @@ def _advance_state_stepper_func(rhs, timestepper, state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) - state = _force_evaluation(actx, state) + state = force_evaluation(actx, state) t += dt istep += 1 @@ -217,7 +208,7 @@ def _advance_state_leap(rhs, timestepper, state, for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): state = event.state_component - state = _force_evaluation(actx, state) + state = force_evaluation(actx, state) t += dt diff --git a/mirgecom/utils.py b/mirgecom/utils.py index 5c5cb3f3a..30fdeb75b 100644 --- a/mirgecom/utils.py +++ b/mirgecom/utils.py @@ -1,6 +1,7 @@ """Useful bits and bobs. .. autofunction:: asdict_shallow +.. autofunction:: force_evaluation """ __copyright__ = """ @@ -113,3 +114,11 @@ def min(self) -> Optional[float]: return None return self._min * self.scale_factor + + +def force_evaluation(actx, x): + """Force evaluation of a (possibly lazy) array.""" + if actx is None: + return x + from arraycontext import freeze, thaw + return thaw(freeze(x, actx), actx) From afbc527fa3797fce037ce0d157f4c1b4b438eae0 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 24 Jun 2022 10:30:46 -0500 Subject: [PATCH 633/873] add removal time frame for deprecated stuff in advance_state --- mirgecom/steppers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 0e11cfb40..0dbc30c24 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -323,7 +323,8 @@ def advance_state(rhs, timestepper, state, t_final, if ((logmgr is not None) or (dim is not None) or (eos is not None)): from warnings import warn warn("Passing logmgr, dim, or eos into the stepper is a deprecated stepper " - "signature. See the examples for the current and preferred usage.", + "signature that will disappear in Q3 2022. See the examples for the " + "current and preferred usage.", DeprecationWarning, stacklevel=2) if "leap" in sys.modules: From 7bb3db071a362cb4dec2edbf77825a9684b1fe72 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 24 Jun 2022 10:35:46 -0500 Subject: [PATCH 634/873] rearrange istep arg --- mirgecom/steppers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 0dbc30c24..4ff249433 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -338,20 +338,20 @@ def advance_state(rhs, timestepper, state, t_final, (current_step, current_t, current_state) = \ _advance_state_leap( rhs=rhs, timestepper=timestepper, - state=state, t=t, t_final=t_final, dt=dt, + state=state, t=t, t_final=t_final, dt=dt, istep=istep, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, component_id=component_id, - istep=istep, logmgr=logmgr, eos=eos, dim=dim, + logmgr=logmgr, eos=eos, dim=dim, ) else: (current_step, current_t, current_state) = \ _advance_state_stepper_func( rhs=rhs, timestepper=timestepper, - state=state, t=t, t_final=t_final, dt=dt, + state=state, t=t, t_final=t_final, dt=dt, istep=istep, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - istep=istep, logmgr=logmgr, eos=eos, dim=dim, + logmgr=logmgr, eos=eos, dim=dim, ) return current_step, current_t, current_state From 0ec4064020e53270bb6c60636df2ba8dba5a09c2 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 24 Jun 2022 10:36:30 -0500 Subject: [PATCH 635/873] make forced evaluation optional in advance_state --- mirgecom/steppers.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 4ff249433..aedd3d1c9 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -66,6 +66,7 @@ def _advance_state_stepper_func(rhs, timestepper, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, + force_eval=True, logmgr=None, eos=None, dim=None): """Advance state from some time (t) to some time (t_final). @@ -98,6 +99,9 @@ def _advance_state_stepper_func(rhs, timestepper, An optional user-defined function, with signature: ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. + force_eval + An optional boolean indicating whether to force lazy evaluation between + timesteps. Returns ------- @@ -123,8 +127,10 @@ def _advance_state_stepper_func(rhs, timestepper, if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) + if force_eval: + state = force_evaluation(actx, state) + state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) - state = force_evaluation(actx, state) t += dt istep += 1 @@ -146,6 +152,7 @@ def _advance_state_leap(rhs, timestepper, state, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, + force_eval=True, logmgr=None, eos=None, dim=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. @@ -178,6 +185,9 @@ def _advance_state_leap(rhs, timestepper, state, An optional user-defined function, with signature: ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. + force_eval + An optional boolean indicating whether to force lazy evaluation between + timesteps. Returns ------- @@ -204,11 +214,13 @@ def _advance_state_leap(rhs, timestepper, state, t=t, dt=dt) stepper_cls.dt = dt + if force_eval: + state = force_evaluation(actx, state) + # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): state = event.state_component - state = force_evaluation(actx, state) t += dt @@ -267,6 +279,7 @@ def advance_state(rhs, timestepper, state, t_final, t=0.0, istep=0, dt=0, pre_step_callback=None, post_step_callback=None, + force_eval=True, logmgr=None, eos=None, dim=None): """Determine what stepper we're using and advance the state from (t) to (t_final). @@ -305,6 +318,9 @@ def advance_state(rhs, timestepper, state, t_final, An optional user-defined function, with signature: ``state, dt = post_step_callback(step, t, dt, state)``, to be called after the timestepper is called for that particular step. + force_eval + An optional boolean indicating whether to force lazy evaluation between + timesteps. Returns ------- @@ -341,6 +357,7 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, istep=istep, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, + force_eval=force_eval, component_id=component_id, logmgr=logmgr, eos=eos, dim=dim, ) @@ -351,6 +368,7 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, istep=istep, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, + force_eval=force_eval, logmgr=logmgr, eos=eos, dim=dim, ) From 8bca9fc8450172970e6e9e0c47d1f3bebf8f9a58 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 24 Jun 2022 10:42:41 -0500 Subject: [PATCH 636/873] deprecate forced evaluation in advance_state --- examples/autoignition-mpi.py | 14 ++++++++++---- examples/doublemach-mpi.py | 13 ++++++++++--- examples/heat-source-mpi.py | 3 ++- examples/hotplate-mpi.py | 13 ++++++++++--- examples/lump-mpi.py | 15 +++++++++++---- examples/mixture-mpi.py | 14 ++++++++++---- examples/nsmix-mpi.py | 18 ++++++++++++------ examples/poiseuille-mpi.py | 21 ++++++++++++++------- examples/pulse-mpi.py | 15 +++++++++++---- examples/scalar-lump-mpi.py | 15 +++++++++++---- examples/sod-mpi.py | 15 +++++++++++---- examples/vortex-mpi.py | 15 +++++++++++---- examples/wave-mpi.py | 6 ++++-- examples/wave.py | 14 ++++++++------ mirgecom/steppers.py | 9 +++++++++ test/test_time_integrators.py | 2 +- 16 files changed, 145 insertions(+), 57 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 962720baf..8fc7ff605 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -43,6 +43,7 @@ write_visfile, allsync ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point from mirgecom.integrators import rk4_step @@ -121,9 +122,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # Time stepper selection if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step # Time loop control parameters current_step = 0 @@ -533,6 +534,11 @@ def my_pre_step(step, t, dt, state): return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): cv, tseed = state fluid_state = construct_fluid_state(cv, tseed) @@ -564,11 +570,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_state = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_cv, temperature_seed]), - t=current_t, t_final=t_final) + t=current_t, t_final=t_final, force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 2f7fa493d..935fb5e18 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -53,6 +53,7 @@ from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport from mirgecom.simutil import get_sim_timestep +from mirgecom.utils import force_evaluation from logpyle import set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -156,7 +157,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Timestepping control current_step = 0 - timestepper = rk4_step + integrator = rk4_step t_final = 1.0e-3 current_cfl = 0.1 current_dt = 1.0e-4 @@ -394,6 +395,11 @@ def my_pre_step(step, t, dt, state): return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -420,10 +426,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index b08cb7b6a..0ea7f3a5d 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -172,8 +172,9 @@ def rhs(t, u): ("u", u) ], overwrite=True) + if lazy: + u = force_evaluation(actx, u) u = rk4_step(u, t, dt, compiled_rhs) - u = force_evaluation(actx, u) t += dt istep += 1 diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index cc2e58ab9..e852d6d5f 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -39,6 +39,7 @@ from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator from mirgecom.simutil import get_sim_timestep +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -120,7 +121,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, force_device_scalars=True) # timestepping control - timestepper = rk4_step + integrator = rk4_step t_final = 2e-7 current_cfl = .1 current_dt = 1e-8 @@ -400,6 +401,11 @@ def my_pre_step(step, t, dt, state): return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -418,10 +424,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) current_state = make_fluid_state(current_cv, gas_model) # Dump the final data diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index df563d900..580df92a6 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -39,6 +39,7 @@ get_sim_timestep, generate_and_distribute_mesh ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -105,9 +106,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .001 @@ -323,6 +324,11 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -341,10 +347,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index f380db75a..18057cc0b 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -39,6 +39,7 @@ get_sim_timestep, generate_and_distribute_mesh ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -107,9 +108,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step t_final = 1e-8 current_cfl = 1.0 current_dt = 1e-9 @@ -370,6 +371,11 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): cv, tseed = state fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) @@ -394,12 +400,12 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, advanced_state = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, current_state.temperature]), - t=current_t, t_final=t_final) + t=current_t, t_final=t_final, force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index e583b3f19..e2b9b0b25 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -42,6 +42,7 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.transport import SimpleTransport from mirgecom.simutil import get_sim_timestep +from mirgecom.utils import force_evaluation from mirgecom.navierstokes import ns_operator from mirgecom.io import make_init_message @@ -82,7 +83,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, casename=None, + use_leap=False, use_profiling=False, lazy=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext, log_dependent=True): """Drive example.""" @@ -120,7 +121,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_t = 0 constant_cfl = True current_step = 0 - timestepper = rk4_step + integrator = rk4_step debug = False # Some i/o frequencies @@ -472,6 +473,11 @@ def my_pre_step(step, t, dt, state): return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): cv, tseed = state fluid_state = get_fluid_state(cv, tseed) @@ -498,12 +504,12 @@ def my_rhs(t, state): current_dt, current_cfl, t_final, constant_cfl) current_step, current_t, current_stepper_state = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, current_state.temperature]), - t=current_t, t_final=t_final) + t=current_t, t_final=t_final, force_eval=False) # Dump the final data if rank == 0: @@ -566,7 +572,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent) + lazy=args.lazy, casename=casename, rst_filename=rst_filename, + actx_class=actx_class, log_dependent=log_dependent) # vim: foldmethod=marker diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 854ef4c17..f6b9588ec 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -46,6 +46,7 @@ from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator from mirgecom.simutil import get_sim_timestep +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -91,9 +92,9 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + use_overintegration=False, use_leap=False, use_profiling=False, + lazy=False, casename=None, rst_filename=None, + actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -122,7 +123,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control - timestepper = rk4_step + integrator = rk4_step t_final = 1e-7 current_cfl = 0.05 current_dt = 1e-10 @@ -411,6 +412,11 @@ def my_pre_step(step, t, dt, state): return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -430,10 +436,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) @@ -493,7 +500,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, + use_overintegration=args.overintegration, lazy=args.lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 5ee93494d..10045a643 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -42,6 +42,7 @@ get_sim_timestep, generate_and_distribute_mesh ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.integrators import rk4_step @@ -114,9 +115,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step t_final = 0.1 current_cfl = 1.0 current_dt = .005 @@ -293,6 +294,11 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -313,10 +319,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_cv, t=current_t, t_final=t_final) + state=current_cv, t=current_t, t_final=t_final, + force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index c6b5df96e..8e277db78 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -40,6 +40,7 @@ get_sim_timestep, generate_and_distribute_mesh ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -107,9 +108,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step t_final = 0.005 current_cfl = 1.0 current_dt = .001 @@ -334,6 +335,11 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -352,10 +358,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index c97ccc3c8..0a25eebc4 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -39,6 +39,7 @@ get_sim_timestep, generate_and_distribute_mesh ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -105,9 +106,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .0001 @@ -324,6 +325,11 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -342,10 +348,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 90b2972a5..9c27d3cb6 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -40,6 +40,7 @@ generate_and_distribute_mesh, check_step ) +from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -108,9 +109,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - timestepper = RK4MethodBuilder("state") + integrator = RK4MethodBuilder("state") else: - timestepper = rk4_step + integrator = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .001 @@ -349,6 +350,11 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt + def my_timestepper(state, t, dt, rhs): + if lazy: + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -367,10 +373,11 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, + advance_state(rhs=my_rhs, timestepper=my_timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final) + state=current_state.cv, t=current_t, t_final=t_final, + force_eval=False) # Dump the final data if rank == 0: diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 10e0bdcc6..046598233 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -28,7 +28,7 @@ import pyopencl as cl from pytools.obj_array import flat_obj_array -from arraycontext import thaw, freeze +from arraycontext import thaw from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -39,6 +39,7 @@ from mirgecom.mpi import mpi_entry_point from mirgecom.integrators import rk4_step from mirgecom.wave import wave_operator +from mirgecom.utils import force_evaluation import pyopencl.tools as cl_tools @@ -229,7 +230,8 @@ def rhs(t, w): ], overwrite=True ) - fields = thaw(freeze(fields, actx), actx) + if lazy: + fields = force_evaluation(actx, fields) fields = rk4_step(fields, t, dt, compiled_rhs) t += dt diff --git a/examples/wave.py b/examples/wave.py index 7163e0181..f397d78e0 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -36,10 +36,11 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.wave import wave_operator from mirgecom.integrators import rk4_step +from mirgecom.utils import force_evaluation from meshmode.array_context import (PyOpenCLArrayContext, PytatoPyOpenCLArrayContext) -from arraycontext import thaw, freeze +from arraycontext import thaw from mirgecom.profiling import PyOpenCLProfilingArrayContext @@ -69,7 +70,7 @@ def bump(actx, nodes, t=0): / source_width**2)) -def main(use_profiling=False, use_logmgr=False, lazy_eval: bool = False): +def main(use_profiling=False, use_logmgr=False, lazy: bool = False): """Drive the example.""" cl_ctx = cl.create_some_context() @@ -77,7 +78,7 @@ def main(use_profiling=False, use_logmgr=False, lazy_eval: bool = False): filename="wave.sqlite", mode="wu") if use_profiling: - if lazy_eval: + if lazy: raise RuntimeError("Cannot run lazy with profiling.") queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) @@ -85,7 +86,7 @@ def main(use_profiling=False, use_logmgr=False, lazy_eval: bool = False): allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) else: queue = cl.CommandQueue(cl_ctx) - if lazy_eval: + if lazy: actx = PytatoPyOpenCLArrayContext(queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) else: @@ -149,7 +150,8 @@ def rhs(t, w): if logmgr: logmgr.tick_before() - fields = thaw(freeze(fields, actx), actx) + if lazy: + fields = force_evaluation(actx, fields) fields = rk4_step(fields, t, dt, compiled_rhs) if istep % 10 == 0: @@ -181,6 +183,6 @@ def rhs(t, w): help="enable lazy evaluation") args = parser.parse_args() - main(use_profiling=args.profile, use_logmgr=args.logging, lazy_eval=args.lazy) + main(use_profiling=args.profile, use_logmgr=args.logging, lazy=args.lazy) # vim: foldmethod=marker diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index aedd3d1c9..7a39454ed 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -343,6 +343,15 @@ def advance_state(rhs, timestepper, state, t_final, "current and preferred usage.", DeprecationWarning, stacklevel=2) + if force_eval: + from warnings import warn + warn("Forced evaluation functionality of advance_state is deprecated; " + "setting force_eval=True will be disallowed starting Q4 2022, and " + "force_eval will be removed entirely in Q1 2023. If this behavior is " + "still desired, call force_evaluation via one of the callbacks " + "instead.", + DeprecationWarning, stacklevel=2) + if "leap" in sys.modules: # The timestepper can still either be a leap method generator # or a user-passed function. diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index 069469778..c0e30dafa 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -128,7 +128,7 @@ def rhs(t, y): (step, t, state) = \ advance_state(rhs=rhs, timestepper=method, dt=dt, state=state, t=t, t_final=t_final, - component_id="y") + component_id="y", force_eval=False) error = np.abs(state - exact_soln(t)) / exact_soln(t) integrator_eoc.add_data_point(dt, error) From 8c5d84214b37b4d258ae7caf5b7666948a0bdbf8 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 24 Jun 2022 15:54:43 -0500 Subject: [PATCH 637/873] simplify forced pre-evaluation --- examples/autoignition-mpi.py | 14 ++++---------- examples/doublemach-mpi.py | 12 +++--------- examples/heat-source-mpi.py | 8 +++----- examples/hotplate-mpi.py | 12 +++--------- examples/lump-mpi.py | 14 ++++---------- examples/mixture-mpi.py | 14 ++++---------- examples/nsmix-mpi.py | 12 +++--------- examples/poiseuille-mpi.py | 12 +++--------- examples/pulse-mpi.py | 14 ++++---------- examples/scalar-lump-mpi.py | 14 ++++---------- examples/sod-mpi.py | 14 ++++---------- examples/vortex-mpi.py | 14 ++++---------- examples/wave-mpi.py | 8 +++----- examples/wave.py | 17 ++++++++--------- mirgecom/integrators/__init__.py | 11 +++++++++++ 15 files changed, 65 insertions(+), 125 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 8fc7ff605..79e643234 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -43,10 +43,9 @@ write_visfile, allsync ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import MixtureInitializer @@ -122,9 +121,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # Time stepper selection if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) # Time loop control parameters current_step = 0 @@ -534,11 +533,6 @@ def my_pre_step(step, t, dt, state): return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): cv, tseed = state fluid_state = construct_fluid_state(cv, tseed) @@ -570,7 +564,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_state = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_cv, temperature_seed]), diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 935fb5e18..0e75d5d55 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -43,7 +43,7 @@ ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import ( AdiabaticNoslipMovingBoundary, @@ -53,7 +53,6 @@ from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport from mirgecom.simutil import get_sim_timestep -from mirgecom.utils import force_evaluation from logpyle import set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging @@ -157,7 +156,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Timestepping control current_step = 0 - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 1.0e-3 current_cfl = 0.1 current_dt = 1.0e-4 @@ -395,11 +394,6 @@ def my_pre_step(step, t, dt, state): return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -426,7 +420,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 0ea7f3a5d..3c26e9dc6 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -32,8 +32,7 @@ from grudge.shortcuts import make_visualizer from grudge.dof_desc import DTAG_BOUNDARY from mirgecom.discretization import create_discretization_collection -from mirgecom.integrators import rk4_step -from mirgecom.utils import force_evaluation +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.diffusion import ( diffusion_operator, DirichletDiffusionBoundary, @@ -83,6 +82,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dim = 2 nel_1d = 16 + timestepper = with_array_context_pre_eval(actx, rk4_step) t = 0 t_final = 0.0002 istep = 0 @@ -172,9 +172,7 @@ def rhs(t, u): ("u", u) ], overwrite=True) - if lazy: - u = force_evaluation(actx, u) - u = rk4_step(u, t, dt, compiled_rhs) + u = timestepper(u, t, dt, compiled_rhs) t += dt istep += 1 diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index e852d6d5f..b227a7864 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -39,11 +39,10 @@ from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator from mirgecom.simutil import get_sim_timestep -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedFluidBoundary, @@ -121,7 +120,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, force_device_scalars=True) # timestepping control - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 2e-7 current_cfl = .1 current_dt = 1e-8 @@ -401,11 +400,6 @@ def my_pre_step(step, t, dt, state): return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -424,7 +418,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 580df92a6..1fa94f858 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -39,11 +39,10 @@ get_sim_timestep, generate_and_distribute_mesh ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Lump @@ -106,9 +105,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 0.01 current_cfl = 1.0 current_dt = .001 @@ -324,11 +323,6 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -347,7 +341,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 18057cc0b..883397d6a 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -39,11 +39,10 @@ get_sim_timestep, generate_and_distribute_mesh ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import MixtureInitializer @@ -108,9 +107,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 1e-8 current_cfl = 1.0 current_dt = 1e-9 @@ -371,11 +370,6 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): cv, tseed = state fluid_state = make_fluid_state(cv, gas_model, temperature_seed=tseed) @@ -400,7 +394,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, advanced_state = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index e2b9b0b25..eb27a766c 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -42,13 +42,12 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.transport import SimpleTransport from mirgecom.simutil import get_sim_timestep -from mirgecom.utils import force_evaluation from mirgecom.navierstokes import ns_operator from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import ( # noqa AdiabaticSlipBoundary, @@ -121,7 +120,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_t = 0 constant_cfl = True current_step = 0 - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) debug = False # Some i/o frequencies @@ -473,11 +472,6 @@ def my_pre_step(step, t, dt, state): return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): cv, tseed = state fluid_state = get_fluid_state(cv, tseed) @@ -504,7 +498,7 @@ def my_rhs(t, state): current_dt, current_cfl, t_final, constant_cfl) current_step, current_t, current_stepper_state = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index f6b9588ec..6b39a54b6 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -46,11 +46,10 @@ from mirgecom.fluid import make_conserved from mirgecom.navierstokes import ns_operator from mirgecom.simutil import get_sim_timestep -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedFluidBoundary, @@ -123,7 +122,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 1e-7 current_cfl = 0.05 current_dt = 1e-10 @@ -412,11 +411,6 @@ def my_pre_step(step, t, dt, state): return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -436,7 +430,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 10045a643..bd5c93d00 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -42,10 +42,9 @@ get_sim_timestep, generate_and_distribute_mesh ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import ( @@ -115,9 +114,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 0.1 current_cfl = 1.0 current_dt = .005 @@ -294,11 +293,6 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -319,7 +313,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_cv, t=current_t, t_final=t_final, diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 8e277db78..3f2c20250 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -40,11 +40,10 @@ get_sim_timestep, generate_and_distribute_mesh ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import MulticomponentLump @@ -108,9 +107,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 0.005 current_cfl = 1.0 current_dt = .001 @@ -335,11 +334,6 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -358,7 +352,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 0a25eebc4..84d0e5b02 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -39,11 +39,10 @@ get_sim_timestep, generate_and_distribute_mesh ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import SodShock1D @@ -106,9 +105,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 0.01 current_cfl = 1.0 current_dt = .0001 @@ -325,11 +324,6 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -348,7 +342,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 9c27d3cb6..cff5eb868 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -40,11 +40,10 @@ generate_and_distribute_mesh, check_step ) -from mirgecom.utils import force_evaluation from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Vortex2D @@ -109,9 +108,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - integrator = RK4MethodBuilder("state") + timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) else: - integrator = rk4_step + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 0.01 current_cfl = 1.0 current_dt = .001 @@ -350,11 +349,6 @@ def my_pre_step(step, t, dt, state): constant_cfl) return state, dt - def my_timestepper(state, t, dt, rhs): - if lazy: - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - def my_post_step(step, t, dt, state): # Logmgr needs to know about EOS, dt, dim? # imo this is a design/scope flaw @@ -373,7 +367,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=my_timestepper, + advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state.cv, t=current_t, t_final=t_final, diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 046598233..c08714cb5 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -37,9 +37,8 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from mirgecom.wave import wave_operator -from mirgecom.utils import force_evaluation import pyopencl.tools as cl_tools @@ -145,6 +144,7 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", dt = actx.to_numpy(current_cfl * op.nodal_min(discr, "vol", nodal_dt))[()] + timestepper = with_array_context_pre_eval(actx, rk4_step) t_final = 1 if restart_step is None: @@ -230,9 +230,7 @@ def rhs(t, w): ], overwrite=True ) - if lazy: - fields = force_evaluation(actx, fields) - fields = rk4_step(fields, t, dt, compiled_rhs) + fields = timestepper(fields, t, dt, compiled_rhs) t += dt istep += 1 diff --git a/examples/wave.py b/examples/wave.py index f397d78e0..f5f836050 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -35,8 +35,7 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.wave import wave_operator -from mirgecom.integrators import rk4_step -from mirgecom.utils import force_evaluation +from mirgecom.integrators import rk4_step, with_array_context_pre_eval from meshmode.array_context import (PyOpenCLArrayContext, PytatoPyOpenCLArrayContext) @@ -95,8 +94,13 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): dim = 2 nel_1d = 16 - from meshmode.mesh.generation import generate_regular_rect_mesh + timestepper = with_array_context_pre_eval(actx, rk4_step) + t_final = 1 + t = 0 + istep = 0 + + from meshmode.mesh.generation import generate_regular_rect_mesh mesh = generate_regular_rect_mesh( a=(-0.5,)*dim, b=(0.5,)*dim, @@ -143,16 +147,11 @@ def rhs(t, w): compiled_rhs = actx.compile(rhs) - t = 0 - t_final = 1 - istep = 0 while t < t_final: if logmgr: logmgr.tick_before() - if lazy: - fields = force_evaluation(actx, fields) - fields = rk4_step(fields, t, dt, compiled_rhs) + fields = timestepper(fields, t, dt, compiled_rhs) if istep % 10 == 0: if use_profiling: diff --git a/mirgecom/integrators/__init__.py b/mirgecom/integrators/__init__.py index 6e00304c4..0e516a4b1 100644 --- a/mirgecom/integrators/__init__.py +++ b/mirgecom/integrators/__init__.py @@ -28,6 +28,8 @@ from .lsrk import euler_step, lsrk54_step, lsrk144_step # noqa: F401 __doc__ = """ +.. autofunction:: with_array_context_pre_eval + .. automodule:: mirgecom.integrators.explicit_rk .. automodule:: mirgecom.integrators.lsrk """ @@ -39,3 +41,12 @@ def lsrk4_step(state, t, dt, rhs): warn("Do not call lsrk4; it is now callled lsrk54_step. This function will " "disappear August 1, 2021", DeprecationWarning, stacklevel=2) return lsrk54_step(state, t, dt, rhs) + + +def with_array_context_pre_eval(actx, integrator): + """Force a state pre-evaluation before calling the integrator.""" + def integrator_with_pre_eval(state, t, dt, rhs): + from mirgecom.utils import force_evaluation + state = force_evaluation(actx, state) + return integrator(state, t, dt, rhs) + return integrator_with_pre_eval From 346b293c2cd417bcb7141f3ba51048aea9b09a68 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 28 Jun 2022 15:20:42 -0500 Subject: [PATCH 638/873] update state in leap version of advance_state --- mirgecom/steppers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 7a39454ed..c0d67ae74 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -212,10 +212,12 @@ def _advance_state_leap(rhs, timestepper, state, state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) + stepper_cls.state = state stepper_cls.dt = dt if force_eval: state = force_evaluation(actx, state) + stepper_cls.state = state # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): @@ -228,6 +230,7 @@ def _advance_state_leap(rhs, timestepper, state, state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) + stepper_cls.state = state stepper_cls.dt = dt istep += 1 From 9a1de714615bdad5332c8ec3f8d0a46a0e49ac87 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 28 Jun 2022 15:23:16 -0500 Subject: [PATCH 639/873] remove duplicate doc stuff in utils --- mirgecom/utils.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/mirgecom/utils.py b/mirgecom/utils.py index 30fdeb75b..ea49d8f54 100644 --- a/mirgecom/utils.py +++ b/mirgecom/utils.py @@ -1,5 +1,6 @@ """Useful bits and bobs. +.. autoclass:: StatisticsAccumulator .. autofunction:: asdict_shallow .. autofunction:: force_evaluation """ @@ -28,11 +29,6 @@ THE SOFTWARE. """ -__doc__ = """ -.. autoclass:: StatisticsAccumulator -.. autofunction:: asdict_shallow -""" - from typing import Optional From 293e4b38b02b13dcc511123196b9a5c3a4cf5aac Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 28 Jun 2022 15:24:06 -0500 Subject: [PATCH 640/873] auto-detect whether evaluation forcing is necessary --- examples/autoignition-mpi.py | 8 ++-- examples/doublemach-mpi.py | 7 ++- examples/heat-source-mpi.py | 6 ++- examples/hotplate-mpi.py | 7 ++- examples/lump-mpi.py | 9 ++-- examples/mixture-mpi.py | 8 ++-- examples/nsmix-mpi.py | 6 +-- examples/poiseuille-mpi.py | 7 ++- examples/pulse-mpi.py | 9 ++-- examples/scalar-lump-mpi.py | 9 ++-- examples/sod-mpi.py | 9 ++-- examples/vortex-mpi.py | 9 ++-- examples/wave-mpi.py | 6 ++- examples/wave.py | 6 ++- mirgecom/integrators/__init__.py | 11 ----- mirgecom/steppers.py | 82 +++++++++++++++++++++++--------- test/test_time_integrators.py | 2 +- 17 files changed, 112 insertions(+), 89 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 79e643234..962720baf 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -45,7 +45,7 @@ ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import MixtureInitializer @@ -121,9 +121,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # Time stepper selection if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step # Time loop control parameters current_step = 0 @@ -568,7 +568,7 @@ def my_rhs(t, state): pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_cv, temperature_seed]), - t=current_t, t_final=t_final, force_eval=False) + t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 0e75d5d55..2f7fa493d 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -43,7 +43,7 @@ ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( AdiabaticNoslipMovingBoundary, @@ -156,7 +156,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Timestepping control current_step = 0 - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 1.0e-3 current_cfl = 0.1 current_dt = 1.0e-4 @@ -423,8 +423,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 3c26e9dc6..a4f279ede 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -32,12 +32,13 @@ from grudge.shortcuts import make_visualizer from grudge.dof_desc import DTAG_BOUNDARY from mirgecom.discretization import create_discretization_collection -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.diffusion import ( diffusion_operator, DirichletDiffusionBoundary, NeumannDiffusionBoundary) from mirgecom.mpi import mpi_entry_point +from mirgecom.utils import force_evaluation import pyopencl.tools as cl_tools from mirgecom.logging_quantities import (initialize_logmgr, @@ -82,7 +83,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dim = 2 nel_1d = 16 - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t = 0 t_final = 0.0002 istep = 0 @@ -173,6 +174,7 @@ def rhs(t, u): ], overwrite=True) u = timestepper(u, t, dt, compiled_rhs) + u = force_evaluation(actx, u) t += dt istep += 1 diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index b227a7864..cc2e58ab9 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -42,7 +42,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedFluidBoundary, @@ -120,7 +120,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, force_device_scalars=True) # timestepping control - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 2e-7 current_cfl = .1 current_dt = 1e-8 @@ -421,8 +421,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) current_state = make_fluid_state(current_cv, gas_model) # Dump the final data diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 1fa94f858..df563d900 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -42,7 +42,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Lump @@ -105,9 +105,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .001 @@ -344,8 +344,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 883397d6a..f380db75a 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -42,7 +42,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import MixtureInitializer @@ -107,9 +107,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 1e-8 current_cfl = 1.0 current_dt = 1e-9 @@ -399,7 +399,7 @@ def my_rhs(t, state): post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, current_state.temperature]), - t=current_t, t_final=t_final, force_eval=False) + t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index eb27a766c..1a518bbe6 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -47,7 +47,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( # noqa AdiabaticSlipBoundary, @@ -120,7 +120,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_t = 0 constant_cfl = True current_step = 0 - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step debug = False # Some i/o frequencies @@ -503,7 +503,7 @@ def my_rhs(t, state): post_step_callback=my_post_step, dt=current_dt, state=make_obj_array([current_state.cv, current_state.temperature]), - t=current_t, t_final=t_final, force_eval=False) + t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 6b39a54b6..2605964cf 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -49,7 +49,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedFluidBoundary, @@ -122,7 +122,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) # timestepping control - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 1e-7 current_cfl = 0.05 current_dt = 1e-10 @@ -433,8 +433,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index bd5c93d00..5ee93494d 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -44,7 +44,7 @@ ) from mirgecom.io import make_init_message -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import AdiabaticSlipBoundary from mirgecom.initializers import ( @@ -114,9 +114,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 0.1 current_cfl = 1.0 current_dt = .005 @@ -316,8 +316,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 3f2c20250..c6b5df96e 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -43,7 +43,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import MulticomponentLump @@ -107,9 +107,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 0.005 current_cfl = 1.0 current_dt = .001 @@ -355,8 +355,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 84d0e5b02..c97ccc3c8 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -42,7 +42,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import SodShock1D @@ -105,9 +105,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # timestepping control if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .0001 @@ -345,8 +345,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, dt=current_dt, post_step_callback=my_post_step, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index cff5eb868..90b2972a5 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -43,7 +43,7 @@ from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary from mirgecom.initializers import Vortex2D @@ -108,9 +108,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder - timestepper = with_array_context_pre_eval(actx, RK4MethodBuilder("state")) + timestepper = RK4MethodBuilder("state") else: - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 0.01 current_cfl = 1.0 current_dt = .001 @@ -370,8 +370,7 @@ def my_rhs(t, state): advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final, - force_eval=False) + state=current_state.cv, t=current_t, t_final=t_final) # Dump the final data if rank == 0: diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index c08714cb5..70d926149 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -37,8 +37,9 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step from mirgecom.wave import wave_operator +from mirgecom.utils import force_evaluation import pyopencl.tools as cl_tools @@ -144,7 +145,7 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", dt = actx.to_numpy(current_cfl * op.nodal_min(discr, "vol", nodal_dt))[()] - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 1 if restart_step is None: @@ -231,6 +232,7 @@ def rhs(t, w): ) fields = timestepper(fields, t, dt, compiled_rhs) + fields = force_evaluation(actx, fields) t += dt istep += 1 diff --git a/examples/wave.py b/examples/wave.py index f5f836050..cc57b8c25 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -35,7 +35,8 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.wave import wave_operator -from mirgecom.integrators import rk4_step, with_array_context_pre_eval +from mirgecom.integrators import rk4_step +from mirgecom.utils import force_evaluation from meshmode.array_context import (PyOpenCLArrayContext, PytatoPyOpenCLArrayContext) @@ -95,7 +96,7 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): dim = 2 nel_1d = 16 - timestepper = with_array_context_pre_eval(actx, rk4_step) + timestepper = rk4_step t_final = 1 t = 0 istep = 0 @@ -152,6 +153,7 @@ def rhs(t, w): logmgr.tick_before() fields = timestepper(fields, t, dt, compiled_rhs) + fields = force_evaluation(actx, fields) if istep % 10 == 0: if use_profiling: diff --git a/mirgecom/integrators/__init__.py b/mirgecom/integrators/__init__.py index 0e516a4b1..6e00304c4 100644 --- a/mirgecom/integrators/__init__.py +++ b/mirgecom/integrators/__init__.py @@ -28,8 +28,6 @@ from .lsrk import euler_step, lsrk54_step, lsrk144_step # noqa: F401 __doc__ = """ -.. autofunction:: with_array_context_pre_eval - .. automodule:: mirgecom.integrators.explicit_rk .. automodule:: mirgecom.integrators.lsrk """ @@ -41,12 +39,3 @@ def lsrk4_step(state, t, dt, rhs): warn("Do not call lsrk4; it is now callled lsrk54_step. This function will " "disappear August 1, 2021", DeprecationWarning, stacklevel=2) return lsrk54_step(state, t, dt, rhs) - - -def with_array_context_pre_eval(actx, integrator): - """Force a state pre-evaluation before calling the integrator.""" - def integrator_with_pre_eval(state, t, dt, rhs): - from mirgecom.utils import force_evaluation - state = force_evaluation(actx, state) - return integrator(state, t, dt, rhs) - return integrator_with_pre_eval diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index c0d67ae74..bf9d5298d 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -61,12 +61,26 @@ def get_rhs(): return get_rhs() +def _strict_array_equal(actx, ary1, ary2): + """ + Check if two arrays are equal. + + If *ary1* and *ary2* are :mod:`pytato` arrays, additionally checks whether the + contained expressions are the same (not just whether they evaluate to the same + result). + """ + if actx is None: + return np.array_equal(ary1, ary2) + + return actx.to_numpy(actx.np.array_equal(ary1, ary2))[()] + + def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, - force_eval=True, + force_eval=None, logmgr=None, eos=None, dim=None): """Advance state from some time (t) to some time (t_final). @@ -101,7 +115,8 @@ def _advance_state_stepper_func(rhs, timestepper, to be called after the timestepper is called for that particular step. force_eval An optional boolean indicating whether to force lazy evaluation between - timesteps. + timesteps. By default, attempts to deduce whether this is necessary based + on the behavior of the timestepper. Returns ------- @@ -127,11 +142,24 @@ def _advance_state_stepper_func(rhs, timestepper, if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) - if force_eval: - state = force_evaluation(actx, state) - state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) + if force_eval is None: + unevaluated_state = state + state = force_evaluation(actx, state) + if not _strict_array_equal(actx, state, unevaluated_state): + force_eval = True + from warnings import warn + warn( + "Deduced force_eval=True for this timestepper. This can have a " + "nontrivial performance impact. If you know that your " + "timestepper does not require per-step forced evaluation, " + "explicitly set force_eval=False.", stacklevel=2) + else: + force_eval = False + elif force_eval: + state = force_evaluation(actx, state) + t += dt istep += 1 @@ -152,7 +180,7 @@ def _advance_state_leap(rhs, timestepper, state, t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, - force_eval=True, + force_eval=None, logmgr=None, eos=None, dim=None): """Advance state from some time *t* to some time *t_final* using :mod:`leap`. @@ -187,7 +215,8 @@ def _advance_state_leap(rhs, timestepper, state, to be called after the timestepper is called for that particular step. force_eval An optional boolean indicating whether to force lazy evaluation between - timesteps. + timesteps. By default, attempts to deduce whether this is necessary based + on the behavior of the timestepper. Returns ------- @@ -215,15 +244,30 @@ def _advance_state_leap(rhs, timestepper, state, stepper_cls.state = state stepper_cls.dt = dt - if force_eval: - state = force_evaluation(actx, state) - stepper_cls.state = state - # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): state = event.state_component + if force_eval is None: + unevaluated_state = state + state = force_evaluation(actx, state) + stepper_cls.state = state + if not _strict_array_equal(actx, state, unevaluated_state): + force_eval = True + from warnings import warn + warn( + "Deduced force_eval=True for this timestepper. This " + "can have a nontrivial performance impact. If you know " + "that your timestepper does not require per-step forced " + "evaluation, explicitly set force_eval=False.", + stacklevel=2) + else: + force_eval = False + elif force_eval: + state = force_evaluation(actx, state) + stepper_cls.state = state + t += dt if post_step_callback is not None: @@ -282,7 +326,7 @@ def advance_state(rhs, timestepper, state, t_final, t=0.0, istep=0, dt=0, pre_step_callback=None, post_step_callback=None, - force_eval=True, + force_eval=None, logmgr=None, eos=None, dim=None): """Determine what stepper we're using and advance the state from (t) to (t_final). @@ -323,7 +367,8 @@ def advance_state(rhs, timestepper, state, t_final, to be called after the timestepper is called for that particular step. force_eval An optional boolean indicating whether to force lazy evaluation between - timesteps. + timesteps. By default, attempts to deduce whether this is necessary based + on the behavior of the timestepper. Returns ------- @@ -346,15 +391,6 @@ def advance_state(rhs, timestepper, state, t_final, "current and preferred usage.", DeprecationWarning, stacklevel=2) - if force_eval: - from warnings import warn - warn("Forced evaluation functionality of advance_state is deprecated; " - "setting force_eval=True will be disallowed starting Q4 2022, and " - "force_eval will be removed entirely in Q1 2023. If this behavior is " - "still desired, call force_evaluation via one of the callbacks " - "instead.", - DeprecationWarning, stacklevel=2) - if "leap" in sys.modules: # The timestepper can still either be a leap method generator # or a user-passed function. @@ -369,8 +405,8 @@ def advance_state(rhs, timestepper, state, t_final, state=state, t=t, t_final=t_final, dt=dt, istep=istep, pre_step_callback=pre_step_callback, post_step_callback=post_step_callback, - force_eval=force_eval, component_id=component_id, + force_eval=force_eval, logmgr=logmgr, eos=eos, dim=dim, ) else: diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index c0e30dafa..069469778 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -128,7 +128,7 @@ def rhs(t, y): (step, t, state) = \ advance_state(rhs=rhs, timestepper=method, dt=dt, state=state, t=t, t_final=t_final, - component_id="y", force_eval=False) + component_id="y") error = np.abs(state - exact_soln(t)) / exact_soln(t) integrator_eoc.add_data_point(dt, error) From 6ee950141521ed8062e523626be7a40965008785 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 28 Jun 2022 16:52:33 -0500 Subject: [PATCH 641/873] remove in-place update from lsrk_step --- mirgecom/integrators/lsrk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/integrators/lsrk.py b/mirgecom/integrators/lsrk.py index a1409b4a3..2c733de5f 100644 --- a/mirgecom/integrators/lsrk.py +++ b/mirgecom/integrators/lsrk.py @@ -51,7 +51,7 @@ def lsrk_step(coefs, state, t, dt, rhs): k = 0.0 * state for i in range(len(coefs.A)): k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state) - state += coefs.B[i]*k + state = state + coefs.B[i]*k return state From 8604f768053618774e4baa2d3968e5a0a828714f Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 28 Jun 2022 16:59:51 -0500 Subject: [PATCH 642/873] undo extraneous changes --- examples/heat-source-mpi.py | 3 +-- examples/nsmix-mpi.py | 6 +++--- examples/poiseuille-mpi.py | 8 ++++---- examples/wave-mpi.py | 3 +-- examples/wave.py | 12 +++++------- 5 files changed, 14 insertions(+), 18 deletions(-) diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index a4f279ede..000646981 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -83,7 +83,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dim = 2 nel_1d = 16 - timestepper = rk4_step t = 0 t_final = 0.0002 istep = 0 @@ -173,7 +172,7 @@ def rhs(t, u): ("u", u) ], overwrite=True) - u = timestepper(u, t, dt, compiled_rhs) + u = rk4_step(u, t, dt, compiled_rhs) u = force_evaluation(actx, u) t += dt diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 1a518bbe6..e583b3f19 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -82,7 +82,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_leap=False, use_profiling=False, lazy=False, casename=None, + use_leap=False, use_profiling=False, casename=None, rst_filename=None, actx_class=PyOpenCLArrayContext, log_dependent=True): """Drive example.""" @@ -566,7 +566,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - lazy=args.lazy, casename=casename, rst_filename=rst_filename, - actx_class=actx_class, log_dependent=log_dependent) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + log_dependent=log_dependent) # vim: foldmethod=marker diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 2605964cf..854ef4c17 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -91,9 +91,9 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, use_leap=False, use_profiling=False, - lazy=False, casename=None, rst_filename=None, - actx_class=PyOpenCLArrayContext): + use_overintegration=False, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): """Drive the example.""" cl_ctx = ctx_factory() @@ -493,7 +493,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=args.lazy, + use_overintegration=args.overintegration, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 70d926149..be24208e2 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -145,7 +145,6 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", dt = actx.to_numpy(current_cfl * op.nodal_min(discr, "vol", nodal_dt))[()] - timestepper = rk4_step t_final = 1 if restart_step is None: @@ -231,7 +230,7 @@ def rhs(t, w): ], overwrite=True ) - fields = timestepper(fields, t, dt, compiled_rhs) + fields = rk4_step(fields, t, dt, compiled_rhs) fields = force_evaluation(actx, fields) t += dt diff --git a/examples/wave.py b/examples/wave.py index cc57b8c25..f672f1818 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -95,13 +95,8 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): dim = 2 nel_1d = 16 - - timestepper = rk4_step - t_final = 1 - t = 0 - istep = 0 - from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( a=(-0.5,)*dim, b=(0.5,)*dim, @@ -148,11 +143,14 @@ def rhs(t, w): compiled_rhs = actx.compile(rhs) + t = 0 + t_final = 1 + istep = 0 while t < t_final: if logmgr: logmgr.tick_before() - fields = timestepper(fields, t, dt, compiled_rhs) + fields = rk4_step(fields, t, dt, compiled_rhs) fields = force_evaluation(actx, fields) if istep % 10 == 0: From 0065cdb7f412cf367c7926e4ab1120e56508f1e0 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 29 Jun 2022 13:30:06 -0500 Subject: [PATCH 643/873] temporarily set production branch --- .ci-support/production-testing-env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 130a3c53e..235bbfd4d 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,8 +8,8 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge -# export PRODUCTION_FORK="" # The fork/home of production changes (if any) +export PRODUCTION_BRANCH="fix-forced-evaluation-production" # The base production branch to be installed by emirge +export PRODUCTION_FORK="majosm" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited # list of driver locations, where each driver location is of the form: From 1080973a9a8d5c56652227ca1bd14d20124ca7d4 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 1 Jul 2022 16:16:58 -0500 Subject: [PATCH 644/873] check for non-DataWrapper pytato array instead of equality of evaluated/unevaluated states --- mirgecom/steppers.py | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index bf9d5298d..52d5a0f9c 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -61,18 +61,23 @@ def get_rhs(): return get_rhs() -def _strict_array_equal(actx, ary1, ary2): +def _is_unevaluated(actx, ary): """ - Check if two arrays are equal. - - If *ary1* and *ary2* are :mod:`pytato` arrays, additionally checks whether the - contained expressions are the same (not just whether they evaluate to the same - result). + Check if an array/container contains an unevaluated :module:`pytato` expression. """ - if actx is None: - return np.array_equal(ary1, ary2) + def is_non_data_pytato_array(x): + import pytato as pt + return isinstance(x, pt.Array) and not isinstance(x, pt.DataWrapper) - return actx.to_numpy(actx.np.array_equal(ary1, ary2))[()] + from arraycontext import serialize_container, NotAnArrayContainerError + try: + iterable = serialize_container(ary) + for _, subary in iterable: + if is_non_data_pytato_array(subary): + return True + return False + except NotAnArrayContainerError: + return is_non_data_pytato_array(ary) def _advance_state_stepper_func(rhs, timestepper, @@ -145,9 +150,7 @@ def _advance_state_stepper_func(rhs, timestepper, state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) if force_eval is None: - unevaluated_state = state - state = force_evaluation(actx, state) - if not _strict_array_equal(actx, state, unevaluated_state): + if _is_unevaluated(actx, state): force_eval = True from warnings import warn warn( @@ -157,7 +160,8 @@ def _advance_state_stepper_func(rhs, timestepper, "explicitly set force_eval=False.", stacklevel=2) else: force_eval = False - elif force_eval: + + if force_eval: state = force_evaluation(actx, state) t += dt @@ -250,10 +254,7 @@ def _advance_state_leap(rhs, timestepper, state, state = event.state_component if force_eval is None: - unevaluated_state = state - state = force_evaluation(actx, state) - stepper_cls.state = state - if not _strict_array_equal(actx, state, unevaluated_state): + if _is_unevaluated(actx, state): force_eval = True from warnings import warn warn( @@ -264,7 +265,8 @@ def _advance_state_leap(rhs, timestepper, state, stacklevel=2) else: force_eval = False - elif force_eval: + + if force_eval: state = force_evaluation(actx, state) stepper_cls.state = state From c23eac5d117b9491964fb01b8945aa8fce1d2c81 Mon Sep 17 00:00:00 2001 From: Paul Jeong Date: Sat, 2 Jul 2022 17:00:41 -0500 Subject: [PATCH 645/873] refactor mirgecompare.py into library + script --- bin/mirgecompare.py | 322 +----------------------------------- mirgecom/simutil.py | 395 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 397 insertions(+), 320 deletions(-) diff --git a/bin/mirgecompare.py b/bin/mirgecompare.py index 13cc2b578..7e006625e 100755 --- a/bin/mirgecompare.py +++ b/bin/mirgecompare.py @@ -1,326 +1,8 @@ #!/usr/bin/env python -import numpy as np - - -def compare_files_vtu(first_file, second_file, file_type, tolerance=1e-12): - import vtk - - # read files: - if file_type == "vtu": - reader1 = vtk.vtkXMLUnstructuredGridReader() - reader2 = vtk.vtkXMLUnstructuredGridReader() - else: - reader1 = vtk.vtkXMLPUnstructuredGridReader() - reader2 = vtk.vtkXMLPUnstructuredGridReader() - - reader1.SetFileName(first_file) - reader1.Update() - output1 = reader1.GetOutput() - - reader2.SetFileName(second_file) - reader2.Update() - output2 = reader2.GetOutput() - - # check fidelity - point_data1 = output1.GetPointData() - point_data2 = output2.GetPointData() - - # verify same number of PointData arrays in both files - if point_data1.GetNumberOfArrays() != point_data2.GetNumberOfArrays(): - print("File 1:", point_data1.GetNumberOfArrays(), "\n", - "File 2:", point_data2.GetNumberOfArrays()) - raise ValueError("Fidelity test failed: Mismatched data array count") - - for i in range(point_data1.GetNumberOfArrays()): - arr1 = point_data1.GetArray(i) - arr2 = point_data2.GetArray(i) - - # verify both files contain same arrays - if point_data1.GetArrayName(i) != point_data2.GetArrayName(i): - print("File 1:", point_data1.GetArrayName(i), "\n", - "File 2:", point_data2.GetArrayName(i)) - raise ValueError("Fidelity test failed: Mismatched data array names") - - # verify arrays are same sizes in both files - if arr1.GetSize() != arr2.GetSize(): - print("File 1, DataArray", i, ":", arr1.GetSize(), "\n", - "File 2, DataArray", i, ":", arr2.GetSize()) - raise ValueError("Fidelity test failed: Mismatched data array sizes") - - # verify individual values w/in given tolerance - for j in range(arr1.GetSize()): - if abs(arr1.GetValue(j) - arr2.GetValue(j)) > tolerance: - print("Tolerance:", tolerance) - raise ValueError("Fidelity test failed: Mismatched data array " - "values with given tolerance") - - print("VTU Fidelity test completed successfully with tolerance", tolerance) - - -class Hdf5Reader(): - def __init__(self, filename): - import h5py - - self.file_obj = h5py.File(filename, "r") - - def read_specific_data(self, datapath): - return self.file_obj[datapath] - - -class XdmfReader(): - # CURRENTLY DOES NOT SUPPORT MULTIPLE Grids - - def __init__(self, filename): - from xml.etree import ElementTree - - tree = ElementTree.parse(filename) - root = tree.getroot() - - domains = tuple(root) - self.domain = domains[0] - self.grids = tuple(self.domain) - self.uniform_grid = self.grids[0] - - def get_topology(self): - connectivity = None - - for a in self.uniform_grid: - if a.tag == "Topology": - connectivity = a - - if connectivity is None: - raise ValueError("File is missing grid connectivity data") - - return connectivity - - def get_geometry(self): - geometry = None - - for a in self.uniform_grid: - if a.tag == "Geometry": - geometry = a - - if geometry is None: - raise ValueError("File is missing grid node location data") - - return geometry - - def read_data_item(self, data_item): - # CURRENTLY DOES NOT SUPPORT 'DataItem' THAT STORES VALUES DIRECTLY - - # check that data stored as separate hdf5 file - if data_item.get("Format") != "HDF": - raise TypeError("Data stored in unrecognized format") - - # get corresponding hdf5 file - source_info = data_item.text - split_source_info = source_info.partition(":") - - h5_filename = split_source_info[0] - # TODO: change file name to match actual mirgecom output directory later - h5_filename = "examples/" + h5_filename - h5_datapath = split_source_info[2] - - # read data from corresponding hdf5 file - h5_reader = Hdf5Reader(h5_filename) - return h5_reader.read_specific_data(h5_datapath) - - -def compare_files_xdmf(first_file, second_file, tolerance=1e-12): - # read files - file_reader1 = XdmfReader(first_file) - file_reader2 = XdmfReader(second_file) - - # check same number of grids - if len(file_reader1.grids) != len(file_reader2.grids): - print("File 1:", len(file_reader1.grids), "\n", - "File 2:", len(file_reader2.grids)) - raise ValueError("Fidelity test failed: Mismatched grid count") - - # check same number of cells in grid - if len(file_reader1.uniform_grid) != len(file_reader2.uniform_grid): - print("File 1:", len(file_reader1.uniform_grid), "\n", - "File 2:", len(file_reader2.uniform_grid)) - raise ValueError("Fidelity test failed: Mismatched cell count in " - "uniform grid") - - # compare Topology: - top1 = file_reader1.get_topology() - top2 = file_reader2.get_topology() - - # check TopologyType - if top1.get("TopologyType") != top2.get("TopologyType"): - print("File 1:", top1.get("TopologyType"), "\n", - "File 2:", top2.get("TopologyType")) - raise ValueError("Fidelity test failed: Mismatched topology type") - - # check number of connectivity values - connectivities1 = file_reader1.read_data_item(tuple(top1)[0]) - connectivities2 = file_reader2.read_data_item(tuple(top2)[0]) - - connectivities1 = np.array(connectivities1) - connectivities2 = np.array(connectivities2) - - if connectivities1.shape != connectivities2.shape: - print("File 1:", connectivities1.shape, "\n", - "File 2:", connectivities2.shape) - raise ValueError("Fidelity test failed: Mismatched connectivities count") - - if not np.allclose(connectivities1, connectivities2, atol=tolerance): - print("Tolerance:", tolerance) - raise ValueError("Fidelity test failed: Mismatched connectivity values " - "with given tolerance") - - # compare Geometry: - geo1 = file_reader1.get_geometry() - geo2 = file_reader2.get_geometry() - - # check GeometryType - if geo1.get("GeometryType") != geo2.get("GeometryType"): - print("File 1:", geo1.get("GeometryType"), "\n", - "File 2:", geo2.get("GeometryType")) - raise ValueError("Fidelity test failed: Mismatched geometry type") - - # check number of node values - nodes1 = file_reader1.read_data_item(tuple(geo1)[0]) - nodes2 = file_reader2.read_data_item(tuple(geo2)[0]) - - nodes1 = np.array(nodes1) - nodes2 = np.array(nodes2) - - if nodes1.shape != nodes2.shape: - print("File 1:", nodes1.shape, "\n", "File 2:", nodes2.shape) - raise ValueError("Fidelity test failed: Mismatched nodes count") - - if not np.allclose(nodes1, nodes2, atol=tolerance): - print("Tolerance:", tolerance) - raise ValueError("Fidelity test failed: Mismatched node values with " - "given tolerance") - - # compare other Attributes: - for i in range(len(file_reader1.uniform_grid)): - curr_cell1 = file_reader1.uniform_grid[i] - curr_cell2 = file_reader2.uniform_grid[i] - - # skip already checked cells - if curr_cell1.tag == "Geometry" or curr_cell1.tag == "Topology": - continue - - # check AttributeType - if curr_cell1.get("AttributeType") != curr_cell2.get("AttributeType"): - print("File 1:", curr_cell1.get("AttributeType"), "\n", - "File 2:", curr_cell2.get("AttributeType")) - raise ValueError("Fidelity test failed: Mismatched cell type") - - # check Attribtue name - if curr_cell1.get("Name") != curr_cell2.get("Name"): - print("File 1:", curr_cell1.get("Name"), "\n", - "File 2:", curr_cell2.get("Name")) - raise ValueError("Fidelity test failed: Mismatched cell name") - - # check number of Attribute values - values1 = file_reader1.read_data_item(tuple(curr_cell1)[0]) - values2 = file_reader2.read_data_item(tuple(curr_cell2)[0]) - - if len(values1) != len(values2): - print("File 1,", curr_cell1.get("Name"), ":", len(values1), "\n", - "File 2,", curr_cell2.get("Name"), ":", len(values2)) - raise ValueError("Fidelity test failed: Mismatched data values count") - - # check values w/in tolerance - for i in range(len(values1)): - if abs(values1[i] - values2[i]) > tolerance: - print("Tolerance:", tolerance, "\n", "Cell:", curr_cell1.get("Name")) - raise ValueError("Fidelity test failed: Mismatched data values " - "with given tolerance") - - print("XDMF Fidelity test completed successfully with tolerance", tolerance) - - -def compare_files_hdf5(first_file, second_file, tolerance=1e-12): - file_reader1 = Hdf5Reader(first_file) - file_reader2 = Hdf5Reader(second_file) - - f1 = file_reader1.file_obj - f2 = file_reader2.file_obj - - objects1 = list(f1.keys()) - objects2 = list(f2.keys()) - - # check number of Grids - if len(objects1) != len(objects2): - print("File 1:", len(objects1), "\n", "File 2:", len(objects2)) - raise ValueError("Fidelity test failed: Mismatched grid count") - - # loop through Grids - for i in range(len(objects1)): - obj_name1 = objects1[i] - obj_name2 = objects2[i] - - if obj_name1 != obj_name2: - print("File 1:", obj_name1, "\n", "File 2:", obj_name2) - raise ValueError("Fidelity test failed: Mismatched grid names") - - curr_o1 = list(f1[obj_name1]) - curr_o2 = list(f2[obj_name2]) - - if len(curr_o1) != len(curr_o2): - print("File 1,", obj_name1, ":", len(curr_o1), "\n", - "File 2,", obj_name2, ":", len(curr_o2)) - raise ValueError("Fidelity test failed: Mismatched group count") - - # loop through Groups - for j in range(len(curr_o1)): - subobj_name1 = curr_o1[j] - subobj_name2 = curr_o2[j] - - if subobj_name1 != subobj_name2: - print("File 1:", subobj_name1, "\n", "File 2:", subobj_name2) - raise ValueError("Fidelity test failed: Mismatched group names") - - subpath1 = obj_name1 + "/" + subobj_name1 - subpath2 = obj_name2 + "/" + subobj_name2 - - data_arrays_list1 = list(f1[subpath1]) - data_arrays_list2 = list(f2[subpath2]) - - if len(data_arrays_list1) != len(data_arrays_list2): - print("File 1,", subobj_name1, ":", len(data_arrays_list1), "\n", - "File 2,", subobj_name2, ":", len(data_arrays_list2)) - raise ValueError("Fidelity test failed: Mismatched data list count") - - # loop through data arrays - for k in range(len(data_arrays_list1)): - curr_listname1 = data_arrays_list1[k] - curr_listname2 = data_arrays_list2[k] - - if curr_listname1 != curr_listname2: - print("File 1:", curr_listname1, "\n", "File 2:", curr_listname2) - raise ValueError("Fidelity test failed: Mismatched data " - "list names") - - curr_listname1 = subpath1 + "/" + curr_listname1 - curr_listname2 = subpath2 + "/" + curr_listname2 - - curr_datalist1 = np.array(list(f1[curr_listname1])) - curr_datalist2 = np.array(list(f2[curr_listname2])) - - if curr_datalist1.shape != curr_datalist2.shape: - print("File 1,", curr_listname1, ":", curr_datalist1.shape, "\n", - "File 2,", curr_listname2, ":", curr_datalist2.shape) - raise ValueError("Fidelity test failed: Mismatched data " - "list size") - - if not np.allclose(curr_datalist1, curr_datalist2, atol=tolerance): - print("Tolerance:", tolerance, "\n", - "Data List:", curr_listname1) - raise ValueError("Fidelity test failed: Mismatched data " - "values with given tolerance") - - print("HDF5 Fidelity test completed successfully with tolerance", tolerance) - +from mirgecom.simutil import\ + compare_files_vtu, compare_files_xdmf, compare_files_hdf5 # run fidelity check if __name__ == "__main__": diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 8f2a13b78..b3c8117f0 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -21,6 +21,13 @@ -------------- .. autofunction:: generate_and_distribute_mesh + +File comparison utilities +-------------- + +.. autofunction:: compare_files_vtu +.. autofunction:: compare_files_xdmf +.. autofunction:: compare_files_hdf5 """ __copyright__ = """ @@ -396,3 +403,391 @@ def create_parallel_grid(comm, generate_grid): "instead. This function will disappear August 1, 2021", DeprecationWarning, stacklevel=2) return generate_and_distribute_mesh(comm=comm, generate_mesh=generate_grid) + + +def compare_files_vtu( + first_file: str, + second_file: str, + file_type: str, + tolerance: float = 1e-12 + ): + """Compare files of vtu type. + + .. note:: + + Parameters + ---------- + first_file: + First file to compare + second_file: + Second file to compare + file_type: + Vtu files + tolerance: + Max acceptable value + + Returns + ------- + True: + If it passes the files contain data within the given tolerance. + False: + If it fails the files contain data outside the given tolerance. + """ + import vtk + + # read files: + if file_type == "vtu": + reader1 = vtk.vtkXMLUnstructuredGridReader() + reader2 = vtk.vtkXMLUnstructuredGridReader() + else: + reader1 = vtk.vtkXMLPUnstructuredGridReader() + reader2 = vtk.vtkXMLPUnstructuredGridReader() + + reader1.SetFileName(first_file) + reader1.Update() + output1 = reader1.GetOutput() + + reader2.SetFileName(second_file) + reader2.Update() + output2 = reader2.GetOutput() + + # check fidelity + point_data1 = output1.GetPointData() + point_data2 = output2.GetPointData() + + # verify same number of PointData arrays in both files + if point_data1.GetNumberOfArrays() != point_data2.GetNumberOfArrays(): + print("File 1:", point_data1.GetNumberOfArrays(), "\n", + "File 2:", point_data2.GetNumberOfArrays()) + raise ValueError("Fidelity test failed: Mismatched data array count") + + for i in range(point_data1.GetNumberOfArrays()): + arr1 = point_data1.GetArray(i) + arr2 = point_data2.GetArray(i) + + # verify both files contain same arrays + if point_data1.GetArrayName(i) != point_data2.GetArrayName(i): + print("File 1:", point_data1.GetArrayName(i), "\n", + "File 2:", point_data2.GetArrayName(i)) + raise ValueError("Fidelity test failed: Mismatched data array names") + + # verify arrays are same sizes in both files + if arr1.GetSize() != arr2.GetSize(): + print("File 1, DataArray", i, ":", arr1.GetSize(), "\n", + "File 2, DataArray", i, ":", arr2.GetSize()) + raise ValueError("Fidelity test failed: Mismatched data array sizes") + + # verify individual values w/in given tolerance + for j in range(arr1.GetSize()): + if abs(arr1.GetValue(j) - arr2.GetValue(j)) > tolerance: + print("Tolerance:", tolerance) + raise ValueError("Fidelity test failed: Mismatched data array " + "values with given tolerance") + + print("VTU Fidelity test completed successfully with tolerance", tolerance) + + +class Hdf5Reader: + def __init__(self, filename): + import h5py + + self.file_obj = h5py.File(filename, "r") + + def read_specific_data(self, datapath): + return self.file_obj[datapath] + + +class XdmfReader: + # CURRENTLY DOES NOT SUPPORT MULTIPLE Grids + + def __init__(self, filename): + from xml.etree import ElementTree + + tree = ElementTree.parse(filename) + root = tree.getroot() + + domains = tuple(root) + self.domain = domains[0] + self.grids = tuple(self.domain) + self.uniform_grid = self.grids[0] + + def get_topology(self): + connectivity = None + + for a in self.uniform_grid: + if a.tag == "Topology": + connectivity = a + + if connectivity is None: + raise ValueError("File is missing grid connectivity data") + + return connectivity + + def get_geometry(self): + geometry = None + + for a in self.uniform_grid: + if a.tag == "Geometry": + geometry = a + + if geometry is None: + raise ValueError("File is missing grid node location data") + + return geometry + + def read_data_item(self, data_item): + # CURRENTLY DOES NOT SUPPORT 'DataItem' THAT STORES VALUES DIRECTLY + + # check that data stored as separate hdf5 file + if data_item.get("Format") != "HDF": + raise TypeError("Data stored in unrecognized format") + + # get corresponding hdf5 file + source_info = data_item.text + split_source_info = source_info.partition(":") + + h5_filename = split_source_info[0] + # TODO: change file name to match actual mirgecom output directory later + h5_filename = "examples/" + h5_filename + h5_datapath = split_source_info[2] + + # read data from corresponding hdf5 file + h5_reader = Hdf5Reader(h5_filename) + return h5_reader.read_specific_data(h5_datapath) + + +def compare_files_xdmf(first_file: str, second_file: str, tolerance: float = 1e-12): + """Compare files of xdmf type. + + .. note:: + + Parameters + ---------- + first_file: + First file to compare + second_file: + Second file to compare + file_type: + Xdmf files + tolerance: + Max acceptable value + + Returns + ------- + True: + If it passes the file type test or contains same data. + False: + If it fails the file type test or contains different data. + """ + # read files + file_reader1 = XdmfReader(first_file) + file_reader2 = XdmfReader(second_file) + + # check same number of grids + if len(file_reader1.grids) != len(file_reader2.grids): + print("File 1:", len(file_reader1.grids), "\n", + "File 2:", len(file_reader2.grids)) + raise ValueError("Fidelity test failed: Mismatched grid count") + + # check same number of cells in gridTrue: + if len(file_reader1.uniform_grid) != len(file_reader2.uniform_grid): + print("File 1:", len(file_reader1.uniform_grid), "\n", + "File 2:", len(file_reader2.uniform_grid)) + raise ValueError("Fidelity test failed: Mismatched cell count in " + "uniform grid") + + # compare Topology: + top1 = file_reader1.get_topology() + top2 = file_reader2.get_topology() + + # check TopologyType + if top1.get("TopologyType") != top2.get("TopologyType"): + print("File 1:", top1.get("TopologyType"), "\n", + "File 2:", top2.get("TopologyType")) + raise ValueError("Fidelity test failed: Mismatched topology type") + + # check number of connectivity values + connectivities1 = file_reader1.read_data_item(tuple(top1)[0]) + connectivities2 = file_reader2.read_data_item(tuple(top2)[0]) + + connectivities1 = np.array(connectivities1) + connectivities2 = np.array(connectivities2) + + if connectivities1.shape != connectivities2.shape: + print("File 1:", connectivities1.shape, "\n", + "File 2:", connectivities2.shape) + raise ValueError("Fidelity test failed: Mismatched connectivities count") + + if not np.allclose(connectivities1, connectivities2, atol=tolerance): + print("Tolerance:", tolerance) + raise ValueError("Fidelity test failed: Mismatched connectivity values " + "with given tolerance") + + # compare Geometry: + geo1 = file_reader1.get_geometry() + geo2 = file_reader2.get_geometry() + + # check GeometryType + if geo1.get("GeometryType") != geo2.get("GeometryType"): + print("File 1:", geo1.get("GeometryType"), "\n", + "File 2:", geo2.get("GeometryType")) + raise ValueError("Fidelity test failed: Mismatched geometry type") + + # check number of node values + nodes1 = file_reader1.read_data_item(tuple(geo1)[0]) + nodes2 = file_reader2.read_data_item(tuple(geo2)[0]) + + nodes1 = np.array(nodes1) + nodes2 = np.array(nodes2) + + if nodes1.shape != nodes2.shape: + print("File 1:", nodes1.shape, "\n", "File 2:", nodes2.shape) + raise ValueError("Fidelity test failed: Mismatched nodes count") + + if not np.allclose(nodes1, nodes2, atol=tolerance): + print("Tolerance:", tolerance) + raise ValueError("Fidelity test failed: Mismatched node values with " + "given tolerance") + + # compare other Attributes: + for i in range(len(file_reader1.uniform_grid)): + curr_cell1 = file_reader1.uniform_grid[i] + curr_cell2 = file_reader2.uniform_grid[i] + + # skip already checked cells + if curr_cell1.tag == "Geometry" or curr_cell1.tag == "Topology": + continue + + # check AttributeType + if curr_cell1.get("AttributeType") != curr_cell2.get("AttributeType"): + print("File 1:", curr_cell1.get("AttributeType"), "\n", + "File 2:", curr_cell2.get("AttributeType")) + raise ValueError("Fidelity test failed: Mismatched cell type") + + # check Attribtue name + if curr_cell1.get("Name") != curr_cell2.get("Name"): + print("File 1:", curr_cell1.get("Name"), "\n", + "File 2:", curr_cell2.get("Name")) + raise ValueError("Fidelity test failed: Mismatched cell name") + + # check number of Attribute values + values1 = file_reader1.read_data_item(tuple(curr_cell1)[0]) + values2 = file_reader2.read_data_item(tuple(curr_cell2)[0]) + + if len(values1) != len(values2): + print("File 1,", curr_cell1.get("Name"), ":", len(values1), "\n", + "File 2,", curr_cell2.get("Name"), ":", len(values2)) + raise ValueError("Fidelity test failed: Mismatched data values count") + + # check values w/in tolerance + for i in range(len(values1)): + if abs(values1[i] - values2[i]) > tolerance: + print("Tolerance:", tolerance, "\n", "Cell:", curr_cell1.get("Name")) + raise ValueError("Fidelity test failed: Mismatched data values " + "with given tolerance") + + print("XDMF Fidelity test completed successfully with tolerance", tolerance) + + +def compare_files_hdf5(first_file: str, second_file: str, tolerance: float = 1e-12): + """Compare files of hdf5 type. + + .. note:: + + Parameters + ---------- + first_file: + First file to compare + second_file: + Second file to compare + file_type: + Hdf5 files + tolerance: + Max acceptable value + + Returns + ------- + True: + If it passes the file type test or contains same data. + False: + If it fails the file type test or contains different data. + """ + file_reader1 = Hdf5Reader(first_file) + file_reader2 = Hdf5Reader(second_file) + f1 = file_reader1.file_obj + f2 = file_reader2.file_obj + + objects1 = list(f1.keys()) + objects2 = list(f2.keys()) + + # check number of Grids + if len(objects1) != len(objects2): + print("File 1:", len(objects1), "\n", "File 2:", len(objects2)) + raise ValueError("Fidelity test failed: Mismatched grid count") + + # loop through Grids + for i in range(len(objects1)): + obj_name1 = objects1[i] + obj_name2 = objects2[i] + + if obj_name1 != obj_name2: + print("File 1:", obj_name1, "\n", "File 2:", obj_name2) + raise ValueError("Fidelity test failed: Mismatched grid names") + + curr_o1 = list(f1[obj_name1]) + curr_o2 = list(f2[obj_name2]) + + if len(curr_o1) != len(curr_o2): + print("File 1,", obj_name1, ":", len(curr_o1), "\n", + "File 2,", obj_name2, ":", len(curr_o2)) + raise ValueError("Fidelity test failed: Mismatched group count") + + # loop through Groups + for j in range(len(curr_o1)): + subobj_name1 = curr_o1[j] + subobj_name2 = curr_o2[j] + + if subobj_name1 != subobj_name2: + print("File 1:", subobj_name1, "\n", "File 2:", subobj_name2) + raise ValueError("Fidelity test failed: Mismatched group names") + + subpath1 = obj_name1 + "/" + subobj_name1 + subpath2 = obj_name2 + "/" + subobj_name2 + + data_arrays_list1 = list(f1[subpath1]) + data_arrays_list2 = list(f2[subpath2]) + + if len(data_arrays_list1) != len(data_arrays_list2): + print("File 1,", subobj_name1, ":", len(data_arrays_list1), "\n", + "File 2,", subobj_name2, ":", len(data_arrays_list2)) + raise ValueError("Fidelity test failed: Mismatched data list count") + + # loop through data arrays + for k in range(len(data_arrays_list1)): + curr_listname1 = data_arrays_list1[k] + curr_listname2 = data_arrays_list2[k] + + if curr_listname1 != curr_listname2: + print("File 1:", curr_listname1, "\n", "File 2:", curr_listname2) + raise ValueError("Fidelity test failed: Mismatched data " + "list names") + + curr_listname1 = subpath1 + "/" + curr_listname1 + curr_listname2 = subpath2 + "/" + curr_listname2 + + curr_datalist1 = np.array(list(f1[curr_listname1])) + curr_datalist2 = np.array(list(f2[curr_listname2])) + + if curr_datalist1.shape != curr_datalist2.shape: + print("File 1,", curr_listname1, ":", curr_datalist1.shape, "\n", + "File 2,", curr_listname2, ":", curr_datalist2.shape) + raise ValueError("Fidelity test failed: Mismatched data " + "list size") + + if not np.allclose(curr_datalist1, curr_datalist2, atol=tolerance): + print("Tolerance:", tolerance, "\n", + "Data List:", curr_listname1) + raise ValueError("Fidelity test failed: Mismatched data " + "values with given tolerance") + + print("HDF5 Fidelity test completed successfully with tolerance", tolerance) From 74951e6f3f780afe277a7311cc85bdfd449fe714 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 1 Jul 2022 16:34:43 -0500 Subject: [PATCH 646/873] fix pydocstyle error --- mirgecom/steppers.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 52d5a0f9c..50e6ad9a1 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -62,9 +62,7 @@ def get_rhs(): def _is_unevaluated(actx, ary): - """ - Check if an array/container contains an unevaluated :module:`pytato` expression. - """ + """Check if an array contains an unevaluated :module:`pytato` expression.""" def is_non_data_pytato_array(x): import pytato as pt return isinstance(x, pt.Array) and not isinstance(x, pt.DataWrapper) From a4622a186c1026d26c7d22e59e50b2464804c9c4 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Sun, 3 Jul 2022 22:21:07 -0500 Subject: [PATCH 647/873] recurse properly --- mirgecom/steppers.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 50e6ad9a1..1523e0077 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -63,19 +63,16 @@ def get_rhs(): def _is_unevaluated(actx, ary): """Check if an array contains an unevaluated :module:`pytato` expression.""" - def is_non_data_pytato_array(x): - import pytato as pt - return isinstance(x, pt.Array) and not isinstance(x, pt.DataWrapper) - from arraycontext import serialize_container, NotAnArrayContainerError try: iterable = serialize_container(ary) for _, subary in iterable: - if is_non_data_pytato_array(subary): + if _is_unevaluated(actx, subary): return True return False except NotAnArrayContainerError: - return is_non_data_pytato_array(ary) + import pytato as pt + return isinstance(ary, pt.Array) and not isinstance(ary, pt.DataWrapper) def _advance_state_stepper_func(rhs, timestepper, From aa565586c19505c7bcc6627990aef9ee1c9c2034 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 5 Jul 2022 13:11:28 -0500 Subject: [PATCH 648/873] Use production,s version of autoignition. --- examples/autoignition-mpi.py | 85 ++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 29 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index f5675b3b9..c15b9cdae 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -40,8 +40,7 @@ from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, - write_visfile, - allsync + write_visfile ) from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -74,7 +73,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_overintegration=False, use_profiling=False, - casename=None, lazy=False, rst_filename=None, log_dependent=True): + casename=None, lazy=False, rst_filename=None, log_dependent=True, + viscous_terms_on=False): """Drive example.""" cl_ctx = ctx_factory() @@ -261,7 +261,19 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) - gas_model = GasModel(eos=eos) + # {{{ Initialize simple transport model + from mirgecom.transport import SimpleTransport + transport_model = None + if viscous_terms_on: + kappa = 1e-5 + spec_diffusivity = 1e-5 * np.ones(nspecies) + sigma = 1e-5 + transport_model = SimpleTransport(viscosity=sigma, + thermal_conductivity=kappa, + species_diffusivity=spec_diffusivity) + # }}} + + gas_model = GasModel(eos=eos, transport=transport_model) from pytools.obj_array import make_obj_array def get_temperature_update(cv, temperature): @@ -365,14 +377,14 @@ def my_write_status(dt, cfl, dv=None): press = dv.pressure from grudge.op import nodal_min_loc, nodal_max_loc - tmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), - comm=comm, op=MPI.MIN) - tmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), - comm=comm, op=MPI.MAX) - pmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", press)), - comm=comm, op=MPI.MIN) - pmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", press)), - comm=comm, op=MPI.MAX) + tmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + op="min") + tmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + op="max") + pmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + op="min") + pmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + op="max") dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" status_msg = status_msg + dv_status_msg @@ -448,17 +460,17 @@ def my_health_check(cv, dv): return health_error - from mirgecom.inviscid import get_inviscid_timestep + from mirgecom.viscous import get_viscous_timestep def get_dt(state): - return get_inviscid_timestep(discr, state=state) + return get_viscous_timestep(discr, state=state) compute_dt = actx.compile(get_dt) - from mirgecom.inviscid import get_inviscid_cfl + from mirgecom.viscous import get_viscous_cfl def get_cfl(state, dt): - return get_inviscid_cfl(discr, dt=dt, state=state) + return get_viscous_cfl(discr, dt=dt, state=state) compute_cfl = actx.compile(get_cfl) @@ -474,14 +486,14 @@ def my_get_timestep(t, dt, state): if constant_cfl: ts_field = current_cfl * compute_dt(state) from grudge.op import nodal_min_loc - dt = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", ts_field)), - comm=comm, op=MPI.MIN) + dt = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", ts_field)), + op="min") cfl = current_cfl else: ts_field = compute_cfl(state, current_dt) from grudge.op import nodal_max_loc - cfl = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", ts_field)), - comm=comm, op=MPI.MAX) + cfl = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", ts_field)), + op="max") return ts_field, cfl, min(t_remaining, dt) def my_pre_step(step, t, dt, state): @@ -542,22 +554,34 @@ def my_post_step(step, t, dt, state): set_dt(logmgr, dt) set_sim_state(logmgr, dim, cv, gas_model.eos) logmgr.tick_after() + return make_obj_array([cv, fluid_state.temperature]), dt - from mirgecom.inviscid import inviscid_facial_flux_rusanov + from mirgecom.inviscid import inviscid_facial_flux_rusanov as inv_num_flux_func + from mirgecom.gas_model import make_operator_fluid_states + from mirgecom.navierstokes import ns_operator + + fluid_operator = euler_operator + if viscous_terms_on: + fluid_operator = ns_operator def my_rhs(t, state): cv, tseed = state from mirgecom.gas_model import make_fluid_state fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) - return make_obj_array([ - euler_operator(discr, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, - inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, - quadrature_tag=quadrature_tag) - + eos.get_species_source_terms(cv, fluid_state.temperature), - 0*tseed]) + fluid_operator_states = make_operator_fluid_states( + discr, fluid_state, gas_model, boundaries=boundaries, + quadrature_tag=quadrature_tag) + fluid_rhs = fluid_operator( + discr, state=fluid_state, gas_model=gas_model, time=t, + boundaries=boundaries, operator_states_quad=fluid_operator_states, + quadrature_tag=quadrature_tag, + inviscid_numerical_flux_func=inv_num_flux_func) + chem_rhs = eos.get_species_source_terms(cv, fluid_state.temperature) + tseed_rhs = fluid_state.temperature - tseed + cv_rhs = fluid_rhs + chem_rhs + return make_obj_array([cv_rhs, tseed_rhs]) current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -602,6 +626,8 @@ def my_rhs(t, state): help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") + parser.add_argument("--navierstokes", action="store_true", + help="turns on compressible Navier-Stokes RHS") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, @@ -615,6 +641,7 @@ def my_rhs(t, state): warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False lazy = args.lazy + viscous_terms_on = args.navierstokes if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -632,6 +659,6 @@ def my_rhs(t, state): main(actx_class, use_logmgr=args.log, use_leap=args.leap, use_overintegration=args.overintegration, use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename, - log_dependent=log_dependent) + log_dependent=log_dependent, viscous_terms_on=args.navierstokes) # vim: foldmethod=marker From 4485001d765aa4a9727f3969fda962df043c55dd Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 5 Jul 2022 13:25:28 -0500 Subject: [PATCH 649/873] convert t to np.float64 in leap version of advance_state to match non-leap version --- mirgecom/steppers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 1523e0077..31bc129bd 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -225,6 +225,8 @@ def _advance_state_leap(rhs, timestepper, state, the current time state: numpy.ndarray """ + t = np.float64(t) + if t_final <= t: return istep, t, state From 2b40bb32498d7bbcaedf6ded638e004192aecb8e Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 5 Jul 2022 13:25:56 -0500 Subject: [PATCH 650/873] force evaluation of incoming state in advance_state --- mirgecom/steppers.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 31bc129bd..2a88b8ea8 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -126,13 +126,14 @@ def _advance_state_stepper_func(rhs, timestepper, the current time state: numpy.ndarray """ + actx = get_container_context_recursively(state) + t = np.float64(t) + state = force_evaluation(actx, state) if t_final <= t: return istep, t, state - actx = get_container_context_recursively(state) - compiled_rhs = _compile_rhs(actx, rhs) while t < t_final: @@ -225,13 +226,14 @@ def _advance_state_leap(rhs, timestepper, state, the current time state: numpy.ndarray """ + actx = get_container_context_recursively(state) + t = np.float64(t) + state = force_evaluation(actx, state) if t_final <= t: return istep, t, state - actx = get_container_context_recursively(state) - compiled_rhs = _compile_rhs(actx, rhs) stepper_cls = generate_singlerate_leap_advancer(timestepper, component_id, compiled_rhs, t, dt, state) From ec32c47e5e2ad1c351b069c8fc7a204f5c84247c Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 5 Jul 2022 13:28:00 -0500 Subject: [PATCH 651/873] use get_container_context_recursively_opt in advance_state --- mirgecom/steppers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 2a88b8ea8..0733813d7 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -33,7 +33,7 @@ from mirgecom.logging_quantities import set_sim_state from mirgecom.utils import force_evaluation from pytools import memoize_in -from arraycontext import get_container_context_recursively +from arraycontext import get_container_context_recursively_opt def _compile_timestepper(actx, timestepper, rhs): @@ -126,7 +126,7 @@ def _advance_state_stepper_func(rhs, timestepper, the current time state: numpy.ndarray """ - actx = get_container_context_recursively(state) + actx = get_container_context_recursively_opt(state) t = np.float64(t) state = force_evaluation(actx, state) @@ -226,7 +226,7 @@ def _advance_state_leap(rhs, timestepper, state, the current time state: numpy.ndarray """ - actx = get_container_context_recursively(state) + actx = get_container_context_recursively_opt(state) t = np.float64(t) state = force_evaluation(actx, state) From c49fbaf7d116c69b616898d270889a0a81b3cd2f Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 14:22:03 -0500 Subject: [PATCH 652/873] Adding local timestepping cabapility --- mirgecom/simutil.py | 38 ++++++++++------ mirgecom/steppers.py | 106 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 121 insertions(+), 23 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 361b391ab..fe4ae882e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -96,20 +96,26 @@ def check_step(step, interval): return False -def get_sim_timestep(discr, state, t, dt, cfl, t_final, constant_cfl=False): +def get_sim_timestep(discr, state, t=0.0, dt=None, cfl=None, t_final=0.0, + constant_cfl=False, local_dt=False): """Return the maximum stable timestep for a typical fluid simulation. - This routine returns *dt*, the users defined constant timestep, or *max_dt*, the - maximum domain-wide stability-limited timestep for a fluid simulation. + If local_dt == False, this routine returns *dt*, the users defined constant + timestep, or *max_dt*, the maximum domain-wide stability-limited timestep + for a fluid simulation. + If local_dt == True, this routine returns *dt* as a DOFArray, and time is + advanced locally such that the cells are not at the same time instant. This is + useful for steady state convergence. .. important:: This routine calls the collective: :func:`~grudge.op.nodal_min` on the inside which makes it domain-wide regardless of parallel domain decomposition. Thus this routine must be called *collectively* (i.e. by all ranks). - Two modes are supported: + Three modes are supported: - Constant DT mode: returns the minimum of (t_final-t, dt) - Constant CFL mode: returns (cfl * max_dt) + - Local DT mode: returns local dt Parameters ---------- @@ -127,22 +133,28 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final, constant_cfl=False): The current CFL number constant_cfl: bool True if running constant CFL mode + local_dt: bool + True if running local DT mode. False by default. Returns ------- float The maximum stable DT based on a viscous fluid. """ - t_remaining = max(0, t_final - t) - mydt = dt - if constant_cfl: - from mirgecom.viscous import get_viscous_timestep + from mirgecom.viscous import get_viscous_timestep + if local_dt: + my_local_dt = cfl * get_viscous_timestep(discr=discr, state=state) + return my_local_dt + else: from grudge.op import nodal_min - mydt = state.array_context.to_numpy( - cfl * nodal_min( - discr, "vol", - get_viscous_timestep(discr=discr, state=state)))[()] - return min(t_remaining, mydt) + mydt = dt + t_remaining = max(0, t_final - t) + if constant_cfl: + mydt = state.array_context.to_numpy( + cfl * nodal_min( + discr, "vol", + get_viscous_timestep(discr=discr, state=state)))[()] + return min(t_remaining, mydt) def write_visfile(discr, io_fields, visualizer, vizname, diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 163249a48..81a77e5d5 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -138,6 +138,82 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, return istep, t, state +def _advance_locally_state_stepper_func(rhs, timestepper, state, t, dt, nsteps, + istep=0, pre_step_callback=None, + post_step_callback=None, force_eval=True): + """Advance state for specific number of iterations using local time stepping. + Not to be used in time accurate simulations, only for convergence towards + steady state regime. + + Parameters + ---------- + rhs + Function that should return the time derivative of the state. + This function should take time and state as arguments, with + a call with signature ``rhs(t, state)``. + timestepper + Function that advances the state from t=time to t=(time+dt), and + returns the advanced state. Has a call with signature + ``timestepper(state, t, dt, rhs)``. + state: numpy.ndarray + Agglomerated object array containing at least the state variables that + will be advanced by this stepper + t: numpy.ndarray + Time at which to start. For compatibility of arguments, it is the same + as the step number. + dt: numpy.ndarray + Initial timestep size to use. Each cell has its own timestep and the + solution is advanced locally. + nsteps: + Number of iterations to be performed. + istep: int + Step number from which to start + pre_step_callback + An optional user-defined function, with signature: + ``state, dt = pre_step_callback(step, t, dt, state)``, + to be called before the timestepper is called for that particular step. + post_step_callback + An optional user-defined function, with signature: + ``state, dt = post_step_callback(step, t, dt, state)``, + to be called after the timestepper is called for that particular step. + force_eval + An optional boolean indicating whether to force lazy evaluation between + timesteps. Defaults to True. + + Returns + ------- + istep: int + the current step number + t: float + the current time + state: numpy.ndarray + """ + if nsteps <= istep: + return istep, t, state + + actx = get_container_context_recursively(state) + + compiled_rhs = _compile_rhs(actx, rhs) + + while istep < nsteps: + + if pre_step_callback is not None: + state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) + + if force_eval: + state = _force_evaluation(actx, state) + + state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) + + t += 1.0 + istep += 1 + + if post_step_callback is not None: + state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) + + return istep, t, state + + def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, component_id="state", t=0.0, istep=0, pre_step_callback=None, post_step_callback=None, @@ -258,9 +334,9 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, +def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, nsteps=None, component_id="state", pre_step_callback=None, - post_step_callback=None, force_eval=True): + post_step_callback=None, force_eval=True, local_dt=False): """Determine what stepper we're using and advance the state from (t) to (t_final). Parameters @@ -334,13 +410,23 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, force_eval=force_eval ) else: - (current_step, current_t, current_state) = \ - _advance_state_stepper_func( - rhs=rhs, timestepper=timestepper, - state=state, t=t, t_final=t_final, dt=dt, - pre_step_callback=pre_step_callback, - post_step_callback=post_step_callback, - istep=istep, force_eval=force_eval - ) + if local_dt: + (current_step, current_t, current_state) = \ + _advance_locally_state_stepper_func( + rhs=rhs, timestepper=timestepper, + state=state, t=t, dt=dt, nsteps=nsteps, + pre_step_callback=pre_step_callback, + post_step_callback=post_step_callback, + istep=istep, force_eval=force_eval + ) + else: + (current_step, current_t, current_state) = \ + _advance_state_stepper_func( + rhs=rhs, timestepper=timestepper, + state=state, t=t, t_final=t_final, dt=dt, + pre_step_callback=pre_step_callback, + post_step_callback=post_step_callback, + istep=istep, force_eval=force_eval + ) return current_step, current_t, current_state From 780a338cf321a48123adbcb801c666247848e474 Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 14:39:22 -0500 Subject: [PATCH 653/873] Adding local timestepping cabapility --- mirgecom/steppers.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 81a77e5d5..cdae7bb37 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -142,8 +142,6 @@ def _advance_locally_state_stepper_func(rhs, timestepper, state, t, dt, nsteps, istep=0, pre_step_callback=None, post_step_callback=None, force_eval=True): """Advance state for specific number of iterations using local time stepping. - Not to be used in time accurate simulations, only for convergence towards - steady state regime. Parameters ---------- From 88dec2afbe1b4681c6585526147c22bc0c2f2086 Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 18:35:36 -0500 Subject: [PATCH 654/873] Adding local timestepping cabapility and respective test --- mirgecom/simutil.py | 10 ++++-- mirgecom/steppers.py | 3 ++ test/test_local_dt.py | 80 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 test/test_local_dt.py diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index fe4ae882e..cb4ee01a8 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -96,7 +96,7 @@ def check_step(step, interval): return False -def get_sim_timestep(discr, state, t=0.0, dt=None, cfl=None, t_final=0.0, +def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, constant_cfl=False, local_dt=False): """Return the maximum stable timestep for a typical fluid simulation. @@ -142,11 +142,15 @@ def get_sim_timestep(discr, state, t=0.0, dt=None, cfl=None, t_final=0.0, The maximum stable DT based on a viscous fluid. """ from mirgecom.viscous import get_viscous_timestep + from grudge.op import nodal_min, elementwise_min if local_dt: - my_local_dt = cfl * get_viscous_timestep(discr=discr, state=state) + actx = (state.cv.mass).array_context + data_shape = (state.cv.mass[0]).shape + my_local_dt = cfl * actx.np.broadcast_to( + elementwise_min(discr, get_viscous_timestep(discr=discr, state=state)), + data_shape) return my_local_dt else: - from grudge.op import nodal_min mydt = dt t_remaining = max(0, t_final - t) if constant_cfl: diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index cdae7bb37..a0a934717 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -143,6 +143,9 @@ def _advance_locally_state_stepper_func(rhs, timestepper, state, t, dt, nsteps, post_step_callback=None, force_eval=True): """Advance state for specific number of iterations using local time stepping. + Not to be used in time accurate simulations, only for convergence towards + steady state regime. + Parameters ---------- rhs diff --git a/test/test_local_dt.py b/test/test_local_dt.py new file mode 100644 index 000000000..9b76ab076 --- /dev/null +++ b/test/test_local_dt.py @@ -0,0 +1,80 @@ +"""Test time integrators.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np +import logging +import pytest +import importlib + +from mirgecom.integrators import (euler_step, + lsrk54_step, + lsrk144_step, + rk4_step) + +logger = logging.getLogger(__name__) + + +@pytest.mark.parametrize(("integrator", "method_order"), + [(euler_step, 1), + (lsrk54_step, 4), + (lsrk144_step, 4), + (rk4_step, 4)]) +def test_integration_order(integrator, method_order): + """Test that time integrators have correct order using local time stepping. + + Run for dt as an array (and not as a float) but the order check is done + one dt at a time. + """ + def exact_soln(t): + return np.exp(-t) + + def rhs(t, state): + return -np.exp(-t) + + from pytools.convergence import EOCRecorder + integrator_eoc = EOCRecorder() + + local_dt = np.asarray([0.5, 1.0, 1.5, 2.0]) + for i in range(0,local_dt.shape[0]): + for refine in [1, 2, 4, 8]: + dt = local_dt / refine + t = 0*dt + state = exact_soln(t) + + istep = 0 + + while istep < 5: + state = integrator(state, t, dt, rhs) + t = t + dt + istep += 1 + + error = np.abs(state[i] - exact_soln(t)[i]) / exact_soln(t)[i] + integrator_eoc.add_data_point(dt[i], error) + + logger.info(f"Time Integrator EOC:\n = {integrator_eoc}") + assert integrator_eoc.order_estimate() >= method_order - .01 + + From a1a43933cde4c22bb6ab5eaee7818a643321a92f Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 18:39:10 -0500 Subject: [PATCH 655/873] Adding local timestepping cabapility and respective test --- test/test_local_dt.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/test_local_dt.py b/test/test_local_dt.py index 9b76ab076..102bf4704 100644 --- a/test/test_local_dt.py +++ b/test/test_local_dt.py @@ -58,7 +58,7 @@ def rhs(t, state): integrator_eoc = EOCRecorder() local_dt = np.asarray([0.5, 1.0, 1.5, 2.0]) - for i in range(0,local_dt.shape[0]): + for i in range(0, local_dt.shape[0]): for refine in [1, 2, 4, 8]: dt = local_dt / refine t = 0*dt @@ -75,6 +75,4 @@ def rhs(t, state): integrator_eoc.add_data_point(dt[i], error) logger.info(f"Time Integrator EOC:\n = {integrator_eoc}") - assert integrator_eoc.order_estimate() >= method_order - .01 - - + assert integrator_eoc.order_estimate() >= method_order - .01 From 42b29665f30bee393090d2edde9324d2bff6febb Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 18:40:51 -0500 Subject: [PATCH 656/873] Adding local timestepping cabapility and respective test --- test/test_local_dt.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_local_dt.py b/test/test_local_dt.py index 102bf4704..34273de84 100644 --- a/test/test_local_dt.py +++ b/test/test_local_dt.py @@ -68,11 +68,11 @@ def rhs(t, state): while istep < 5: state = integrator(state, t, dt, rhs) - t = t + dt + t = t + dt istep += 1 error = np.abs(state[i] - exact_soln(t)[i]) / exact_soln(t)[i] integrator_eoc.add_data_point(dt[i], error) logger.info(f"Time Integrator EOC:\n = {integrator_eoc}") - assert integrator_eoc.order_estimate() >= method_order - .01 + assert integrator_eoc.order_estimate() >= method_order - .01 From 741f1c5405fdc3b02e2b199730005e08e33001c0 Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 18:42:19 -0500 Subject: [PATCH 657/873] Adding local timestepping cabapility and respective test --- test/test_local_dt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_local_dt.py b/test/test_local_dt.py index 34273de84..c77f80ff0 100644 --- a/test/test_local_dt.py +++ b/test/test_local_dt.py @@ -44,7 +44,7 @@ (rk4_step, 4)]) def test_integration_order(integrator, method_order): """Test that time integrators have correct order using local time stepping. - + Run for dt as an array (and not as a float) but the order check is done one dt at a time. """ From c35b3e561db37d9870d4d422d2e08b075478e111 Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 18:46:18 -0500 Subject: [PATCH 658/873] Fixing lint for flake --- test/test_local_dt.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_local_dt.py b/test/test_local_dt.py index c77f80ff0..f444608d7 100644 --- a/test/test_local_dt.py +++ b/test/test_local_dt.py @@ -27,7 +27,6 @@ import numpy as np import logging import pytest -import importlib from mirgecom.integrators import (euler_step, lsrk54_step, From 40d1a56c217e4e3b7aa69b25634b99fc700e77f9 Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 20:54:26 -0500 Subject: [PATCH 659/873] Adding Poiseuille flow example --- examples/poiseuille-local_dt-mpi.py | 535 ++++++++++++++++++++++++++++ 1 file changed, 535 insertions(+) create mode 100644 examples/poiseuille-local_dt-mpi.py diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py new file mode 100644 index 000000000..1a515ef27 --- /dev/null +++ b/examples/poiseuille-local_dt-mpi.py @@ -0,0 +1,535 @@ +"""Demonstrate a planar Poiseuille flow example.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +import pyopencl.tools as cl_tools +from pytools.obj_array import make_obj_array +from functools import partial + +from arraycontext import thaw +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa + +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer +from grudge.dof_desc import DTAG_BOUNDARY + +from mirgecom.fluid import make_conserved +from mirgecom.navierstokes import ns_operator +from mirgecom.simutil import ( + get_sim_timestep, + force_evaluation +) + +from mirgecom.io import make_init_message +from mirgecom.mpi import mpi_entry_point +from mirgecom.integrators import rk4_step +from mirgecom.steppers import advance_state +from mirgecom.boundary import ( + PrescribedFluidBoundary, + AdiabaticNoslipMovingBoundary +) +from mirgecom.transport import SimpleTransport +from mirgecom.eos import IdealSingleGas +from mirgecom.gas_model import GasModel, make_fluid_state +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +## Box grid generator widget lifted from @majosm and slightly bent +#def _get_box_mesh(dim, a, b, n, t=None): +# dim_names = ["x", "y", "z"] +# bttf = {} +# for i in range(dim): +# bttf["-"+str(i+1)] = ["-"+dim_names[i]] +# bttf["+"+str(i+1)] = ["+"+dim_names[i]] +# from meshmode.mesh.generation import generate_regular_rect_mesh as gen +# return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, lazy=False, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=None): + """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) + + # timestepping control + timestepper = rk4_step + t_final = 1e-7 + current_cfl = 0.05 + current_dt = 1e-10 + current_t = 0 + constant_cfl = True + local_dt = True # declaration necessary for local time stepping. + current_step = 0 + + # some i/o frequencies + nstatus = 1 + nviz = 1 + nrestart = 100 + nhealth = 1 + + # some geometry setup + dim = 2 + if dim != 2: + raise ValueError("This example must be run with dim = 2.") + left_boundary_location = 0 + right_boundary_location = 0.1 + ybottom = 0. + ytop = .02 + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["nparts"] == nparts + else: # generate the grid from scratch + n_refine = 5 + npts_x = 10 * n_refine + npts_y = 6 * n_refine + + # create a stretched grid to force different grid cell size + xx = np.linspace(left_boundary_location, right_boundary_location, npts_x + 1) + yy = np.sqrt(np.linspace(0.0, 1.0, npts_y + 1))*(ytop - ybottom) + coords = tuple((xx,yy)) + + from meshmode.mesh.generation import generate_box_mesh + generate_mesh = partial(generate_box_mesh, + axis_coords=coords, + boundary_tag_to_face={ + "-1": ["-x"], + "+1": ["+x"], + "-2": ["-y"], + "+2": ["+y"]}) + + from mirgecom.simutil import generate_and_distribute_mesh + local_mesh, global_nelements = ( + generate_and_distribute_mesh(comm, generate_mesh)) + local_nelements = local_mesh.nelements + + + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + + order = 2 + discr = EagerDGDiscretization( + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm + ) + nodes = thaw(discr.nodes(), actx) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + base_pressure = 100000.0 + pressure_ratio = 1.001 + mu = 1.0 + + def poiseuille_2d(x_vec, eos, cv=None, **kwargs): + y = x_vec[1] + x = x_vec[0] + x0 = left_boundary_location + xmax = right_boundary_location + xlen = xmax - x0 + p_low = base_pressure + p_hi = pressure_ratio*base_pressure + dp = p_hi - p_low + dpdx = dp/xlen + h = ytop - ybottom + u_x = dpdx*y*(h - y)/(2*mu) + p_x = p_hi - dpdx*x + rho = 1.0 + mass = 0*x + rho + u_y = 0*x + velocity = make_obj_array([u_x, u_y]) + ke = .5*np.dot(velocity, velocity)*mass + gamma = eos.gamma() + if cv is not None: + mass = cv.mass + vel = cv.velocity + ke = .5*np.dot(vel, vel)*mass + + rho_e = p_x/(gamma-1) + ke + return make_conserved(2, mass=mass, energy=rho_e, + momentum=mass*velocity) + + initializer = poiseuille_2d + gas_model = GasModel(eos=IdealSingleGas(), + transport=SimpleTransport(viscosity=mu)) + exact = initializer(x_vec=nodes, eos=gas_model.eos) + + def _boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + actx = state_minus.array_context + bnd_discr = discr.discr_from_dd(btag) + nodes = thaw(bnd_discr.nodes(), actx) + return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, + cv=state_minus.cv, **kwargs), gas_model) + + boundaries = {DTAG_BOUNDARY("-1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_solution), + DTAG_BOUNDARY("+1"): + PrescribedFluidBoundary(boundary_state_func=_boundary_solution), + DTAG_BOUNDARY("-2"): AdiabaticNoslipMovingBoundary(), + DTAG_BOUNDARY("+2"): AdiabaticNoslipMovingBoundary()} + + if rst_filename: + if local_dt: + current_t = restart_data["step"] + else: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_cv = restart_data["cv"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_cv = exact + + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) + + vis_timer = None + + visualizer = make_visualizer(discr, order) + + eosname = gas_model.eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=casename, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_status(step, t, dt, state, component_errors): + dv = state.dv + from grudge.op import nodal_min, nodal_max + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) + if constant_cfl: + cfl = current_cfl + else: + from mirgecom.viscous import get_viscous_cfl + cfl = actx.to_numpy(nodal_max(discr, "vol", + get_viscous_cfl(discr, dt, state))) + if rank == 0: + logger.info(f"----- Pressure({p_min}, {p_max})\n" + f"----- Temperature({t_min}, {t_max})\n" + "----- errors=" + + ", ".join("%.3g" % en for en in component_errors)) + + def my_write_viz(step, t, state, dv): + resid = state - exact + viz_fields = [("cv", state), + ("dv", dv), + ("poiseuille", exact), + ("resid", resid)] + + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "cv": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": nparts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(state, dv, component_errors): + health_error = False + from mirgecom.simutil import check_naninf_local, check_range_local + if check_naninf_local(discr, "vol", dv.pressure): + health_error = True + logger.info(f"{rank=}: NANs/Infs in pressure data.") + + if global_reduce(check_range_local(discr, "vol", dv.pressure, 9.999e4, + 1.00101e5), op="lor"): + health_error = True + from grudge.op import nodal_max, nodal_min + p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + + if check_naninf_local(discr, "vol", dv.temperature): + health_error = True + logger.info(f"{rank=}: NANs/INFs in temperature data.") + + if global_reduce(check_range_local(discr, "vol", dv.temperature, 348, 350), + op="lor"): + health_error = True + from grudge.op import nodal_max, nodal_min + t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) + logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + + exittol = .1 + if max(component_errors) > exittol: + health_error = True + if rank == 0: + logger.info("Solution diverged from exact soln.") + + return health_error + + def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + dv = fluid_state.dv + + if constant_cfl: + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, + t_final, constant_cfl, local_dt) + if local_dt: + t = force_evaluation(actx, t) + dt = force_evaluation(actx, get_sim_timestep(discr, fluid_state, t, dt, + current_cfl, constant_cfl=constant_cfl, local_dt=local_dt)) + + try: + component_errors = None + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + do_status = check_step(step=step, interval=nstatus) + + if do_health: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + health_errors = global_reduce( + my_health_check(state, dv, component_errors), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + my_write_viz(step=step, t=t, state=state, dv=dv) + + if do_status: # needed because logging fails to make output + if component_errors is None: + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, state, exact) + my_write_status(step=step, t=t, dt=dt, state=fluid_state, + component_errors=component_errors) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state, dv=dv) + my_write_restart(step=step, t=t, state=state) + raise + + return state, dt + + def my_post_step(step, t, dt, state): + if logmgr: + if local_dt: + set_dt(logmgr, 1.0) + else: + set_dt(logmgr, dt) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + fluid_state = make_fluid_state(state, gas_model) + return ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + state=fluid_state, time=t, + quadrature_tag=quadrature_tag) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, constant_cfl=constant_cfl, local_dt=local_dt) + if local_dt == True: + current_dt = force_evaluation(actx, current_dt) + + current_t = current_t + current_dt*0.0 + current_t = force_evaluation(actx, current_t) + + current_step, current_t, current_cv = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + state=current_state.cv, t=current_t, t_final=t_final, + nsteps=100, local_dt=local_dt, + istep=current_step) + + current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_dv = current_state.dv + final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, constant_cfl=constant_cfl, local_dt=local_dt) + from mirgecom.simutil import compare_fluid_solutions + component_errors = compare_fluid_solutions(discr, current_state.cv, exact) + + my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_state) + my_write_status(step=current_step, t=current_t, dt=final_dt, + state=current_state, component_errors=component_errors) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + exit() + +if __name__ == "__main__": + import argparse + casename = "poiseuille" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + lazy = args.lazy + + if args.profiling: + if lazy: + raise ValueError("Can't use lazy and profiling together.") + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + use_overintegration=args.overintegration, lazy=lazy, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) + +# vim: foldmethod=marker From 8b58890ceac351c916b382b65d48398404689afa Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 20:56:25 -0500 Subject: [PATCH 660/873] Adding Poiseuille flow example --- examples/poiseuille-local_dt-mpi.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py index 1a515ef27..a31629f14 100644 --- a/examples/poiseuille-local_dt-mpi.py +++ b/examples/poiseuille-local_dt-mpi.py @@ -75,17 +75,6 @@ class MyRuntimeError(RuntimeError): pass -## Box grid generator widget lifted from @majosm and slightly bent -#def _get_box_mesh(dim, a, b, n, t=None): -# dim_names = ["x", "y", "z"] -# bttf = {} -# for i in range(dim): -# bttf["-"+str(i+1)] = ["-"+dim_names[i]] -# bttf["+"+str(i+1)] = ["+"+dim_names[i]] -# from meshmode.mesh.generation import generate_regular_rect_mesh as gen -# return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t) - - @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, lazy=False, @@ -131,7 +120,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_dt = 1e-10 current_t = 0 constant_cfl = True - local_dt = True # declaration necessary for local time stepping. + local_dt = True # XXX declaration necessary for local time stepping. current_step = 0 # some i/o frequencies @@ -169,7 +158,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # create a stretched grid to force different grid cell size xx = np.linspace(left_boundary_location, right_boundary_location, npts_x + 1) yy = np.sqrt(np.linspace(0.0, 1.0, npts_y + 1))*(ytop - ybottom) - coords = tuple((xx,yy)) + coords = tuple((xx, yy)) from meshmode.mesh.generation import generate_box_mesh generate_mesh = partial(generate_box_mesh, From 8d868dae35d659b135218b0e1254aaf5bb70c4b0 Mon Sep 17 00:00:00 2001 From: Tulio Date: Tue, 5 Jul 2022 21:04:04 -0500 Subject: [PATCH 661/873] Adding Poiseuille flow example --- examples/poiseuille-local_dt-mpi.py | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py index a31629f14..eb8cfab8f 100644 --- a/examples/poiseuille-local_dt-mpi.py +++ b/examples/poiseuille-local_dt-mpi.py @@ -61,8 +61,7 @@ initialize_logmgr, logmgr_add_many_discretization_quantities, logmgr_add_device_name, - logmgr_add_device_memory_usage, - set_sim_state + logmgr_add_device_memory_usage ) @@ -174,7 +173,6 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_and_distribute_mesh(comm, generate_mesh)) local_nelements = local_mesh.nelements - from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD from meshmode.discretization.poly_element import \ default_simplex_group_factory, QuadratureSimplexGroupFactory @@ -301,13 +299,7 @@ def my_write_status(step, t, dt, state, component_errors): p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) - if constant_cfl: - cfl = current_cfl - else: - from mirgecom.viscous import get_viscous_cfl - cfl = actx.to_numpy(nodal_max(discr, "vol", - get_viscous_cfl(discr, dt, state))) - if rank == 0: + if rank == 0: logger.info(f"----- Pressure({p_min}, {p_max})\n" f"----- Temperature({t_min}, {t_max})\n" "----- errors=" @@ -377,15 +369,15 @@ def my_health_check(state, dv, component_errors): def my_pre_step(step, t, dt, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) dv = fluid_state.dv - + if constant_cfl: dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, - t_final, constant_cfl, local_dt) + t_final, constant_cfl, local_dt) if local_dt: t = force_evaluation(actx, t) dt = force_evaluation(actx, get_sim_timestep(discr, fluid_state, t, dt, current_cfl, constant_cfl=constant_cfl, local_dt=local_dt)) - + try: component_errors = None @@ -432,10 +424,10 @@ def my_pre_step(step, t, dt, state): def my_post_step(step, t, dt, state): if logmgr: - if local_dt: + if local_dt: set_dt(logmgr, 1.0) else: - set_dt(logmgr, dt) + set_dt(logmgr, dt) logmgr.tick_after() return state, dt @@ -447,7 +439,7 @@ def my_rhs(t, state): current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, current_cfl, constant_cfl=constant_cfl, local_dt=local_dt) - if local_dt == True: + if local_dt: current_dt = force_evaluation(actx, current_dt) current_t = current_t + current_dt*0.0 @@ -484,6 +476,7 @@ def my_rhs(t, state): exit() + if __name__ == "__main__": import argparse casename = "poiseuille" From 051b524addfbdbe0e946cf2feee22d193bbdbb61 Mon Sep 17 00:00:00 2001 From: Paul Jeong <73143920+poulNA@users.noreply.github.com> Date: Wed, 6 Jul 2022 11:07:32 -0400 Subject: [PATCH 662/873] Documentation fixes Co-authored-by: Mike Campbell Co-authored-by: Matthias Diener --- mirgecom/simutil.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index e05900c9f..a72216d93 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -453,7 +453,7 @@ def compare_files_vtu( file_type: Vtu files tolerance: - Max acceptable value + Max acceptable absolute difference Returns ------- @@ -599,7 +599,7 @@ def compare_files_xdmf(first_file: str, second_file: str, tolerance: float = 1e- file_type: Xdmf files tolerance: - Max acceptable value + Max acceptable absolute difference Returns ------- @@ -721,7 +721,6 @@ def compare_files_xdmf(first_file: str, second_file: str, tolerance: float = 1e- def compare_files_hdf5(first_file: str, second_file: str, tolerance: float = 1e-12): """Compare files of hdf5 type. - .. note:: Parameters ---------- @@ -732,7 +731,7 @@ def compare_files_hdf5(first_file: str, second_file: str, tolerance: float = 1e- file_type: Hdf5 files tolerance: - Max acceptable value + Max acceptable absolute difference Returns ------- From 1fbf47a7affe4740742a7e75a73ff1712e59ae8a Mon Sep 17 00:00:00 2001 From: Paul Jeong Date: Wed, 6 Jul 2022 10:55:43 -0500 Subject: [PATCH 663/873] Pydocstyle fixes --- mirgecom/simutil.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index a72216d93..a70450320 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -442,8 +442,6 @@ def compare_files_vtu( ): """Compare files of vtu type. - .. note:: - Parameters ---------- first_file: @@ -516,7 +514,7 @@ def compare_files_vtu( print("VTU Fidelity test completed successfully with tolerance", tolerance) -class Hdf5Reader: +class _Hdf5Reader: def __init__(self, filename): import h5py @@ -526,7 +524,7 @@ def read_specific_data(self, datapath): return self.file_obj[datapath] -class XdmfReader: +class _XdmfReader: # CURRENTLY DOES NOT SUPPORT MULTIPLE Grids def __init__(self, filename): @@ -581,15 +579,13 @@ def read_data_item(self, data_item): h5_datapath = split_source_info[2] # read data from corresponding hdf5 file - h5_reader = Hdf5Reader(h5_filename) + h5_reader = _Hdf5Reader(h5_filename) return h5_reader.read_specific_data(h5_datapath) def compare_files_xdmf(first_file: str, second_file: str, tolerance: float = 1e-12): """Compare files of xdmf type. - .. note:: - Parameters ---------- first_file: @@ -609,8 +605,8 @@ def compare_files_xdmf(first_file: str, second_file: str, tolerance: float = 1e- If it fails the file type test or contains different data. """ # read files - file_reader1 = XdmfReader(first_file) - file_reader2 = XdmfReader(second_file) + file_reader1 = _XdmfReader(first_file) + file_reader2 = _XdmfReader(second_file) # check same number of grids if len(file_reader1.grids) != len(file_reader2.grids): @@ -721,7 +717,6 @@ def compare_files_xdmf(first_file: str, second_file: str, tolerance: float = 1e- def compare_files_hdf5(first_file: str, second_file: str, tolerance: float = 1e-12): """Compare files of hdf5 type. - Parameters ---------- first_file: @@ -740,8 +735,8 @@ def compare_files_hdf5(first_file: str, second_file: str, tolerance: float = 1e- False: If it fails the file type test or contains different data. """ - file_reader1 = Hdf5Reader(first_file) - file_reader2 = Hdf5Reader(second_file) + file_reader1 = _Hdf5Reader(first_file) + file_reader2 = _Hdf5Reader(second_file) f1 = file_reader1.file_obj f2 = file_reader2.file_obj From 1c0c4a3ce50a95d1f44fcac82498c377996a03ac Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Jul 2022 11:29:07 -0500 Subject: [PATCH 664/873] Suggest changes on get_sim_timestep docs/implementation. --- mirgecom/simutil.py | 86 +++++++++++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index cb4ee01a8..ba1c1fc57 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -60,13 +60,13 @@ """ import logging import numpy as np -import grudge.op as op - -from arraycontext import map_array_container, flatten - from functools import partial +import grudge.op as op +# from grudge.op import nodal_min, elementwise_min +from arraycontext import map_array_container, flatten from meshmode.dof_array import DOFArray +from mirgecom.viscous import get_viscous_timestep from typing import List from grudge.discretization import DiscretizationCollection @@ -98,24 +98,43 @@ def check_step(step, interval): def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, constant_cfl=False, local_dt=False): - """Return the maximum stable timestep for a typical fluid simulation. + r"""Return the maximum stable timestep for a typical fluid simulation. + + This routine returns a constraint-limited timestep size for a fluid + simulation. The returned timestep will be constrained by the specified + Courant-Friedrichs-Lewy number, *cfl*, and the simulation max simulated time + limit, *t_final*, and subject to the user's optional settings. + + The point-local inviscid fluid timestep, $\delta{t}_l$, is computed as: - If local_dt == False, this routine returns *dt*, the users defined constant - timestep, or *max_dt*, the maximum domain-wide stability-limited timestep - for a fluid simulation. - If local_dt == True, this routine returns *dt* as a DOFArray, and time is - advanced locally such that the cells are not at the same time instant. This is - useful for steady state convergence. + .. math:: + \delta{t}_l = \frac{\Delta{x}}{\left(|\mathbf{v}_f| + c\right)}, + + where $\Delta{x}$ is the point-local mesh spacing, $\mathbf{v}_f$ is the + fluid velocity and $c$ is the local speed-of-sound. For viscous fluids, + $\delta{t}_l$ is calculated by :func:`~mirgecom.viscous.get_viscous_timestep`. + Users are referred to :func:`~mirgecom.viscous.get_viscous_timestep` for more + details on the calculation of $\delta{t}_l$ for viscous fluids. + + With the remaining simulation time $\Delta{t}_r = + \left(\mathit{t\_final}-\mathit{t}\right)$, three modes are supported + for the returned timestep, $\delta{t}$: + + - "Constant DT" mode (default): $\delta{t} = \mathbf{\text{min}} + \left(\textit{dt},~\Delta{t}_r\right)$ + - "Constant CFL" mode (constant_cfl=True): $\delta{t} = \mathbf{\text{min}} + \left(\delta{t}_l,~\Delta{t}_r\right)$ + - "Local DT" mode (local_dt=True): $\delta{t} = \delta{t}_l$ + + For "Local DT" mode, *t_final* is ignored, and a + :class:`~meshmode.dof_array.DOFArray` containing the point-local *cfl*-limited + timestep, $\delta{t}_l$ is returned. This mode is useful for stepping to + convergence of steady-state solutions. .. important:: This routine calls the collective: :func:`~grudge.op.nodal_min` on the inside which makes it domain-wide regardless of parallel domain decomposition. Thus - this routine must be called *collectively* (i.e. by all ranks). - - Three modes are supported: - - Constant DT mode: returns the minimum of (t_final-t, dt) - - Constant CFL mode: returns (cfl * max_dt) - - Local DT mode: returns local dt + this routine must be called *collectively* (i.e. by all MPI ranks). Parameters ---------- @@ -138,27 +157,26 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, Returns ------- - float - The maximum stable DT based on a viscous fluid. + float or :class:`~meshmode.dof_array.DOFArray` + The global maximum stable DT based on a viscous fluid. """ - from mirgecom.viscous import get_viscous_timestep - from grudge.op import nodal_min, elementwise_min if local_dt: - actx = (state.cv.mass).array_context + actx = state.array_context data_shape = (state.cv.mass[0]).shape - my_local_dt = cfl * actx.np.broadcast_to( - elementwise_min(discr, get_viscous_timestep(discr=discr, state=state)), + return cfl * actx.np.broadcast_to( + op.elementwise_min(discr, get_viscous_timestep(discr=discr, + state=state)), data_shape) - return my_local_dt - else: - mydt = dt - t_remaining = max(0, t_final - t) - if constant_cfl: - mydt = state.array_context.to_numpy( - cfl * nodal_min( - discr, "vol", - get_viscous_timestep(discr=discr, state=state)))[()] - return min(t_remaining, mydt) + + my_dt = dt + t_remaining = max(0, t_final - t) + if constant_cfl: + my_dt = state.array_context.to_numpy( + cfl * op.nodal_min( + discr, "vol", + get_viscous_timestep(discr=discr, state=state)))[()] + + return min(t_remaining, my_dt) def write_visfile(discr, io_fields, visualizer, vizname, From ccfa69e448b9ce687f861b7867254fdf263e8bf0 Mon Sep 17 00:00:00 2001 From: Tulio Date: Wed, 6 Jul 2022 15:31:10 -0500 Subject: [PATCH 665/873] Checking serial local-dt example --- ...poiseuille-local_dt-mpi.py => poiseuille-local_dt.py} | 0 mirgecom/simutil.py | 9 +++++---- 2 files changed, 5 insertions(+), 4 deletions(-) rename examples/{poiseuille-local_dt-mpi.py => poiseuille-local_dt.py} (100%) diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt.py similarity index 100% rename from examples/poiseuille-local_dt-mpi.py rename to examples/poiseuille-local_dt.py diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ba1c1fc57..3f73dfc1e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -126,10 +126,11 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, \left(\delta{t}_l,~\Delta{t}_r\right)$ - "Local DT" mode (local_dt=True): $\delta{t} = \delta{t}_l$ - For "Local DT" mode, *t_final* is ignored, and a - :class:`~meshmode.dof_array.DOFArray` containing the point-local *cfl*-limited - timestep, $\delta{t}_l$ is returned. This mode is useful for stepping to - convergence of steady-state solutions. + For "Local DT" mode, *t_final* is ignored, and returns a + :class:`~meshmode.dof_array.DOFArray` containing the grid-local *cfl*-limited + timestep, $\delta{t}_l$, based on the minimum value for all + collocation points inside a grid cell. + This mode is useful for stepping to convergence of steady-state solutions. .. important:: This routine calls the collective: :func:`~grudge.op.nodal_min` on the inside From aa99119164f51211558aa502c9cc054af3ce0982 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 6 Jul 2022 17:23:18 -0500 Subject: [PATCH 666/873] work around pylint error --- mirgecom/simutil.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index a70450320..ab7618906 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -464,11 +464,11 @@ def compare_files_vtu( # read files: if file_type == "vtu": - reader1 = vtk.vtkXMLUnstructuredGridReader() - reader2 = vtk.vtkXMLUnstructuredGridReader() + reader1 = vtk.vtkXMLUnstructuredGridReader() # pylint: disable=no-member + reader2 = vtk.vtkXMLUnstructuredGridReader() # pylint: disable=no-member else: - reader1 = vtk.vtkXMLPUnstructuredGridReader() - reader2 = vtk.vtkXMLPUnstructuredGridReader() + reader1 = vtk.vtkXMLPUnstructuredGridReader() # pylint: disable=no-member + reader2 = vtk.vtkXMLPUnstructuredGridReader() # pylint: disable=no-member reader1.SetFileName(first_file) reader1.Update() From 2240763272aae4472c385a14419a24987d06006a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Jul 2022 17:33:42 -0500 Subject: [PATCH 667/873] Suggest more changes to docs. --- mirgecom/inviscid.py | 13 +++++++++++-- mirgecom/simutil.py | 26 ++++++++++---------------- mirgecom/viscous.py | 17 +++++++++++++++-- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 52911e3c6..89a5943da 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -297,9 +297,18 @@ def _boundary_flux(dd_bdry, boundary, state_minus): def get_inviscid_timestep(discr, state): - """Return node-local stable timestep estimate for an inviscid fluid. + r"""Return node-local stable timestep estimate for an inviscid fluid. - The maximum stable timestep is computed from the acoustic wavespeed. + The locally required timestep is computed from the acoustic wavespeed: + + + .. math:: + \delta{t}_l = \frac{\Delta{x}_l}{\left(|\mathbf{v}_f| + c\right)}, + + where $\Delta{x}_l$ is the local mesh spacing (given by + :func:`~grudge.dt_utils.characteristic_lengthscales`), and fluid velocity + $\mathbf{v}_f$, and fluid speed-of-sound $c$, are defined by local state + data. Parameters ---------- diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ba1c1fc57..a650b0203 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -105,16 +105,9 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, Courant-Friedrichs-Lewy number, *cfl*, and the simulation max simulated time limit, *t_final*, and subject to the user's optional settings. - The point-local inviscid fluid timestep, $\delta{t}_l$, is computed as: - - .. math:: - \delta{t}_l = \frac{\Delta{x}}{\left(|\mathbf{v}_f| + c\right)}, - - where $\Delta{x}$ is the point-local mesh spacing, $\mathbf{v}_f$ is the - fluid velocity and $c$ is the local speed-of-sound. For viscous fluids, - $\delta{t}_l$ is calculated by :func:`~mirgecom.viscous.get_viscous_timestep`. - Users are referred to :func:`~mirgecom.viscous.get_viscous_timestep` for more - details on the calculation of $\delta{t}_l$ for viscous fluids. + The local fluid timestep, $\delta{t}_l$, is computed by + :func:`~mirgecom.viscous.get_viscous_timestep`. Users are referred to that + routine for the details of the local timestep. With the remaining simulation time $\Delta{t}_r = \left(\mathit{t\_final}-\mathit{t}\right)$, three modes are supported @@ -127,19 +120,20 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, - "Local DT" mode (local_dt=True): $\delta{t} = \delta{t}_l$ For "Local DT" mode, *t_final* is ignored, and a - :class:`~meshmode.dof_array.DOFArray` containing the point-local *cfl*-limited + :class:`~meshmode.dof_array.DOFArray` containing the local *cfl*-limited timestep, $\delta{t}_l$ is returned. This mode is useful for stepping to convergence of steady-state solutions. .. important:: - This routine calls the collective: :func:`~grudge.op.nodal_min` on the inside - which makes it domain-wide regardless of parallel domain decomposition. Thus - this routine must be called *collectively* (i.e. by all MPI ranks). + This routine calls the collective :func:`~grudge.op.nodal_min` on the inside + which involves MPI collective functions. Thus all MPI ranks on the + :class:`~grudge.discretization.DiscretizationCollection` must call this + routine collectively. Parameters ---------- - discr - Grudge discretization or discretization collection? + discr: :class:`~grudge.discretization.DiscretizationCollection` + The grudge DG discretization to use state: :class:`~mirgecom.gas_model.FluidState` The full fluid conserved and thermal state t: float diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index b88035f11..19b54226f 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -437,11 +437,24 @@ def _fvisc_divergence_flux_boundary(dd_btag, boundary, state_minus): def get_viscous_timestep(discr, state): - """Routine returns the the node-local maximum stable viscous timestep. + r"""Routine returns the the node-local maximum stable viscous timestep. + + The locally required timestep $\delta{t}_l$ is calculated from the fluid + local wavespeed $s_f$, fluid viscosity $\mu$, fluid density $\rho$, and + species diffusivities $d_\alpha$ as: + + .. math:: + \delta{t}_l = \frac{\Delta{x}_l}{s_l + \left(\frac{\mu}{\rho} + + \mathbf{\text{max}}_\alpha(d_\alpha)\right)\left(\Delta{x}_l\right)^{-1}}, + + where $\Delta{x}_l$ is given by + :func:`grudge.dt_utils.characteristic_lengthscales`, and the rest are + fluid state-dependent quantities. For non-mixture states, species + diffusivities $d_\alpha=0$. Parameters ---------- - discr: grudge.discretization.DiscretizationCollection + discr: :class:`~grudge.discretization.DiscretizationCollection` the discretization to use From 6bd92b31a05421d65a43efa6382cba60e5e32aa7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Jul 2022 17:59:29 -0500 Subject: [PATCH 668/873] Suggest more changes to docs. --- mirgecom/simutil.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ff528b634..bffa7f3f4 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -116,13 +116,16 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, - "Constant DT" mode (default): $\delta{t} = \mathbf{\text{min}} \left(\textit{dt},~\Delta{t}_r\right)$ - "Constant CFL" mode (constant_cfl=True): $\delta{t} = - \mathbf{\text{global_min}}\left(\delta{t}_l,~\Delta{t}_r\right)$ - - "Local DT" mode (local_dt=True): $\delta{t} = \delta{t}_l$ - - For "Local DT" mode, *t_final* is ignored, and a - :class:`~meshmode.dof_array.DOFArray` containing the cell-local *cfl*-limited - timestep, $\mathbf{\text{cell_local_min}\left(\delta{t}_l\right)$ is returned. - This mode is useful for stepping to convergence of steady-state solutions. + \mathbf{\text{min}}\left(\mathbf{\text{global_min}}\left(\delta{t}_l\right) + ,~\Delta{t}_r\right)$ + - "Local DT" mode (local_dt=True): $\delta{t} = \mathbf{\text{cell_local_min}} + \left(\delta{t}_l\right)$ + + Note that for "Local DT" mode, *t_final* is ignored, and a + :class:`~meshmode.dof_array.DOFArray` containing the local *cfl*-limited + timestep, where $\mathbf{\text{cell_local_min}}\left(\delta{t}_l\right)$ is + defined as the minimum over the cell collocation points. This mode is useful for + stepping to convergence of steady-state solutions. .. important:: This routine calls the collective :func:`~grudge.op.nodal_min` on the inside From b4801779d57de63e6379986edcbf0cda32681e75 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 6 Jul 2022 18:27:29 -0500 Subject: [PATCH 669/873] Change docs slightly more --- mirgecom/simutil.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index bffa7f3f4..c90efe725 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -128,10 +128,11 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, stepping to convergence of steady-state solutions. .. important:: - This routine calls the collective :func:`~grudge.op.nodal_min` on the inside - which involves MPI collective functions. Thus all MPI ranks on the + For "Constant CFL" mode, this routine calls the collective + :func:`~grudge.op.nodal_min` on the inside which involves MPI collective + functions. Thus all MPI ranks on the :class:`~grudge.discretization.DiscretizationCollection` must call this - routine collectively. + routine collectively when using "Constant CFL" mode. Parameters ---------- From 05d066b52d740c8c62e2c103c1bdd7ee4a245b22 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 6 Jul 2022 19:37:38 -0500 Subject: [PATCH 670/873] fix doc error --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ab7618906..178278ceb 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -23,7 +23,7 @@ .. autofunction:: generate_and_distribute_mesh File comparison utilities --------------- +------------------------- .. autofunction:: compare_files_vtu .. autofunction:: compare_files_xdmf From 9a91edd50b231f473c44842ee2508aefe10f2035 Mon Sep 17 00:00:00 2001 From: Tulio Date: Wed, 6 Jul 2022 21:48:12 -0500 Subject: [PATCH 671/873] Adding Poiseuille-MPI flow example --- examples/{poiseuille-local_dt.py => poiseuille-local_dt-mpi.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/{poiseuille-local_dt.py => poiseuille-local_dt-mpi.py} (100%) diff --git a/examples/poiseuille-local_dt.py b/examples/poiseuille-local_dt-mpi.py similarity index 100% rename from examples/poiseuille-local_dt.py rename to examples/poiseuille-local_dt-mpi.py From a3b253727981ff20acd24ca1c8b41a9123ff9a50 Mon Sep 17 00:00:00 2001 From: Tulio Date: Wed, 6 Jul 2022 22:09:28 -0500 Subject: [PATCH 672/873] Adding improved docs to dt evaluation --- mirgecom/inviscid.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 89a5943da..47c399454 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -301,7 +301,6 @@ def get_inviscid_timestep(discr, state): The locally required timestep is computed from the acoustic wavespeed: - .. math:: \delta{t}_l = \frac{\Delta{x}_l}{\left(|\mathbf{v}_f| + c\right)}, From 4fd15f192ca617ef01f807e9186a14844155ec19 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 7 Jul 2022 11:58:15 -0500 Subject: [PATCH 673/873] Revert "temporarily set production branch" This reverts commit 0065cdb7f412cf367c7926e4ab1120e56508f1e0. --- .ci-support/production-testing-env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-testing-env.sh b/.ci-support/production-testing-env.sh index 235bbfd4d..130a3c53e 100755 --- a/.ci-support/production-testing-env.sh +++ b/.ci-support/production-testing-env.sh @@ -8,8 +8,8 @@ set -x # The production capability may be in a CEESD-local mirgecom branch or in a # fork, and is specified through the following settings: # -export PRODUCTION_BRANCH="fix-forced-evaluation-production" # The base production branch to be installed by emirge -export PRODUCTION_FORK="majosm" # The fork/home of production changes (if any) +# export PRODUCTION_BRANCH="" # The base production branch to be installed by emirge +# export PRODUCTION_FORK="" # The fork/home of production changes (if any) # # Multiple production drivers are supported. The user should provide a ':'-delimited # list of driver locations, where each driver location is of the form: From f1cf55793b090aa3087175398353f0139c0e5dea Mon Sep 17 00:00:00 2001 From: Tulio Date: Thu, 7 Jul 2022 12:00:35 -0500 Subject: [PATCH 674/873] Debugging local_dt at CI --- examples/poiseuille-local_dt-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py index eb8cfab8f..9d29e1705 100644 --- a/examples/poiseuille-local_dt-mpi.py +++ b/examples/poiseuille-local_dt-mpi.py @@ -119,7 +119,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_dt = 1e-10 current_t = 0 constant_cfl = True - local_dt = True # XXX declaration necessary for local time stepping. + local_dt = False # XXX declaration necessary for local time stepping. current_step = 0 # some i/o frequencies From bf4e7b554fa5ad253ba6d01dc9035cbb1ebbd83c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 7 Jul 2022 12:11:37 -0500 Subject: [PATCH 675/873] Fix up leap with new force eval. --- mirgecom/steppers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index a20099a72..1a2f55c8a 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -135,7 +135,7 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) if force_eval: - state = _force_evaluation(actx, state) + state = force_evaluation(actx, state) state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) @@ -233,7 +233,7 @@ def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, stepper_cls.dt = dt if force_eval: - state = _force_evaluation(actx, state) + state = force_evaluation(actx, state) # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): From 57e3958a524d68c79c3d8e24fc622d583ef1e140 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 7 Jul 2022 12:19:33 -0500 Subject: [PATCH 676/873] Escape underscores in latex expns. --- mirgecom/simutil.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c90efe725..540eefd2c 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -116,14 +116,14 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, - "Constant DT" mode (default): $\delta{t} = \mathbf{\text{min}} \left(\textit{dt},~\Delta{t}_r\right)$ - "Constant CFL" mode (constant_cfl=True): $\delta{t} = - \mathbf{\text{min}}\left(\mathbf{\text{global_min}}\left(\delta{t}_l\right) + \mathbf{\text{min}}\left(\mathbf{\text{global\_min}}\left(\delta{t}\_l\right) ,~\Delta{t}_r\right)$ - - "Local DT" mode (local_dt=True): $\delta{t} = \mathbf{\text{cell_local_min}} + - "Local DT" mode (local_dt=True): $\delta{t} = \mathbf{\text{cell\_local\_min}} \left(\delta{t}_l\right)$ Note that for "Local DT" mode, *t_final* is ignored, and a :class:`~meshmode.dof_array.DOFArray` containing the local *cfl*-limited - timestep, where $\mathbf{\text{cell_local_min}}\left(\delta{t}_l\right)$ is + timestep, where $\mathbf{\text{cell\_local\_min}}\left(\delta{t}\_l\right)$ is defined as the minimum over the cell collocation points. This mode is useful for stepping to convergence of steady-state solutions. From 38b20b55fb2cc07fd288ba6e6af375b23df61ba5 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 7 Jul 2022 12:23:28 -0500 Subject: [PATCH 677/873] remove old force_evaluation calls --- mirgecom/steppers.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 1a2f55c8a..b8035b888 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -134,9 +134,6 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) - if force_eval: - state = force_evaluation(actx, state) - state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) if force_eval is None: @@ -232,9 +229,6 @@ def _advance_state_leap(rhs, timestepper, state, t_final, dt=0, stepper_cls.state = state stepper_cls.dt = dt - if force_eval: - state = force_evaluation(actx, state) - # Leap interface here is *a bit* different. for event in stepper_cls.run(t_end=t+dt): if isinstance(event, stepper_cls.StateComputed): From 1fbd95690448ba0a7936365d7c248efb18ba0e9d Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 7 Jul 2022 22:29:29 -0500 Subject: [PATCH 678/873] SVM args --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4dc2b033d..9e14a43ef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/inducer/loopy.git#egg=loopy +--editable git+https://github.com/inducer/loopy.git@svm-args#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy From 14878b55b0f17040eb6895b979686d0fce459ef0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 8 Jul 2022 05:23:31 -0500 Subject: [PATCH 679/873] Fix typo --- examples/combozzle-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 8f703326e..d85314f89 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -1,4 +1,4 @@ -"""Predictionf-adjacent performance tester.""" +"""Prediction-adjacent performance tester.""" __copyright__ = """ Copyright (C) 2020 University of Illinois Board of Trustees From d252c4ed873361ef8eb9ff466fa3614f0e559941 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 8 Jul 2022 08:36:31 -0500 Subject: [PATCH 680/873] Add a pre-evaluate for wave (speeds lazy comp) --- examples/wave-mpi.py | 2 +- test/test_simutil.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 30548eef2..b95fa643c 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -193,7 +193,7 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", def rhs(t, w): return wave_operator(discr, c=wave_speed, w=w) - + fields = force_evaluation(actx, fields) compiled_rhs = actx.compile(rhs) while t < t_final: diff --git a/test/test_simutil.py b/test/test_simutil.py index 4fdfc4189..4e88a35d7 100644 --- a/test/test_simutil.py +++ b/test/test_simutil.py @@ -134,7 +134,6 @@ def test_analytic_comparison(actx_factory): cv = make_conserved(dim, mass=mass, energy=energy, momentum=mom) resid = vortex_soln - cv - from arraycontext import flatten expected_errors = actx.to_numpy( flatten(componentwise_norms(discr, resid, order=np.inf), actx)).tolist() From 53571b63cac679b78c36d7529a3f125c8607b9c2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 8 Jul 2022 10:41:28 -0500 Subject: [PATCH 681/873] Clean up deprecations in examples. --- examples/autoignition-mpi.py | 3 +++ examples/doublemach-mpi.py | 4 +++- examples/hotplate-mpi.py | 8 +++++--- examples/lump-mpi.py | 4 ++-- examples/mixture-mpi.py | 26 +++++++++++++------------- examples/nsmix-mpi.py | 5 +++-- examples/poiseuille-mpi.py | 4 ++-- examples/scalar-lump-mpi.py | 4 ++-- examples/sod-mpi.py | 4 ++-- examples/vortex-mpi.py | 4 ++-- 10 files changed, 37 insertions(+), 29 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index c15b9cdae..997442490 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -50,6 +50,7 @@ from mirgecom.initializers import MixtureInitializer from mirgecom.eos import PyrometheusMixture from mirgecom.gas_model import GasModel +from mirgecom.utils import force_evaluation from mirgecom.logging_quantities import ( initialize_logmgr, @@ -329,6 +330,8 @@ def get_fluid_state(cv, tseed): current_cv = initializer(eos=gas_model.eos, x_vec=nodes) temperature_seed = temperature_seed * ones + current_cv = force_evaluation(actx, current_cv) + # The temperature_seed going into this function is: # - At time 0: the initial temperature input data (maybe from Cantera) # - On restart: the restarted temperature seed from restart file (saving diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index e46120dae..90e671133 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -147,7 +147,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool( + cl_tools.ImmediateAllocator(queue))) else: actx = actx_class(comm, queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index 8bdfb4525..b5e13884c 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -55,7 +55,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -112,7 +112,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool( + cl_tools.ImmediateAllocator(queue))) else: actx = actx_class(comm, queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), @@ -174,7 +176,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nodes = actx.thaw(discr.nodes()) if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 357d20926..fcac632b6 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -52,7 +52,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -155,7 +155,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 62b74cf1a..f2871c961 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -54,7 +54,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -155,7 +155,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") @@ -182,8 +182,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, from mirgecom.mechanisms import get_mechanism_input mech_input = get_mechanism_input("uiuc") sol = cantera.Solution(name="gas", yaml=mech_input) - from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyrometheus_mechanism = make_pyrometheus_mechanism_class(sol)(actx.np) + from mirgecom.thermochemistry import get_pyrometheus_wrapper_class_from_cantera + pyrometheus_mechanism = \ + get_pyrometheus_wrapper_class_from_cantera(sol)(actx.np) nspecies = pyrometheus_mechanism.num_species eos = PyrometheusMixture(pyrometheus_mechanism) @@ -243,7 +244,6 @@ def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): logger.info(init_message) def my_write_status(component_errors, dv=None): - from mirgecom.simutil import allsync status_msg = ( "------- errors=" + ", ".join("%.3g" % en for en in component_errors)) @@ -252,14 +252,14 @@ def my_write_status(component_errors, dv=None): press = dv.pressure from grudge.op import nodal_min_loc, nodal_max_loc - tmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), - comm=comm, op=MPI.MIN) - tmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), - comm=comm, op=MPI.MAX) - pmin = allsync(actx.to_numpy(nodal_min_loc(discr, "vol", press)), - comm=comm, op=MPI.MIN) - pmax = allsync(actx.to_numpy(nodal_max_loc(discr, "vol", press)), - comm=comm, op=MPI.MAX) + tmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + op="min") + tmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + op="max") + pmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + op="min") + pmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + op="max") dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" status_msg = status_msg + dv_status_msg diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 5f922eb26..6d9b34f8e 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -244,8 +244,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyrometheus_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import get_pyrometheus_wrapper_class_from_cantera + pyrometheus_mechanism = \ + get_pyrometheus_wrapper_class_from_cantera(cantera_soln)(actx.np) eos = PyrometheusMixture(pyrometheus_mechanism, temperature_guess=init_temperature) gas_model = GasModel(eos=eos, transport=transport_model) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index cdbeddf86..fea7e51ba 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -62,7 +62,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -181,7 +181,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, quadrature_tag = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 9bffbfe1e..087b10704 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -53,7 +53,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -154,7 +154,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 17a5c70b7..122c4ec80 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -52,7 +52,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -153,7 +153,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index c01114311..fccd7b7aa 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -54,7 +54,7 @@ from mirgecom.logging_quantities import ( initialize_logmgr, logmgr_add_many_discretization_quantities, - logmgr_add_device_name, + logmgr_add_cl_device_info, logmgr_add_device_memory_usage, set_sim_state ) @@ -158,7 +158,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, vis_timer = None if logmgr: - logmgr_add_device_name(logmgr, queue) + logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) logmgr_add_many_discretization_quantities(logmgr, discr, dim, extract_vars_for_logging, units_for_logging) From 6d76239f06d3cfeed7555e22bb110b9ee51c16a4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 11 Jul 2022 19:36:38 -0500 Subject: [PATCH 682/873] Use new fangled actx class getter --- examples/autoignition-mpi.py | 5 +++-- examples/nsmix-mpi.py | 31 +++++++++++++++---------------- examples/poiseuille-mpi.py | 32 ++++++++++++++++---------------- examples/wave.py | 25 +++++++++++++++++++------ 4 files changed, 53 insertions(+), 40 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 997442490..05c87bdba 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -258,8 +258,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import get_pyrometheus_wrapper_class_from_cantera + pyro_mechanism = \ + get_pyrometheus_wrapper_class_from_cantera(cantera_soln)(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) # {{{ Initialize simple transport model diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 6d9b34f8e..c46416eae 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -30,11 +30,6 @@ from functools import partial from pytools.obj_array import make_obj_array -from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer @@ -82,8 +77,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext, - log_dependent=True): + rst_filename=None, actx_class=None, + log_dependent=True, lazy=False): """Drive example.""" cl_ctx = ctx_factory() @@ -107,9 +102,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # Timestepping control # This example runs only 3 steps by default (to keep CI ~short) @@ -550,13 +549,13 @@ def my_rhs(t, state): warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -567,6 +566,6 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent) + log_dependent=log_dependent, lazy=lazy) # vim: foldmethod=marker diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index fea7e51ba..e133d37ad 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -30,11 +30,6 @@ from pytools.obj_array import make_obj_array from functools import partial -from meshmode.array_context import ( - PyOpenCLArrayContext, - PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer @@ -90,9 +85,9 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, + use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None, actx_class=None): """Drive the example.""" cl_ctx = ctx_factory() @@ -116,9 +111,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + else: + actx = actx_class(comm, queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True) # timestepping control timestepper = rk4_step @@ -476,13 +475,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -492,7 +492,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, + use_overintegration=args.overintegration, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/wave.py b/examples/wave.py index 5c220beb4..b3eacbce9 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -81,16 +81,29 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): raise RuntimeError("Cannot run lazy with profiling.") queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = \ + PyOpenCLProfilingArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True + ) else: queue = cl.CommandQueue(cl_ctx) if lazy: - actx = PytatoPyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = \ + PytatoPyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool( + cl_tools.ImmediateAllocator(queue)), + ) else: - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = \ + PyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool( + cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True + ) dim = 2 nel_1d = 16 From 7fa262177e862039c919ef3a696b3906d9cf1699 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 11 Jul 2022 20:21:00 -0500 Subject: [PATCH 683/873] Remove unsupported option from old crusty unfangled actx creation --- examples/wave.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/wave.py b/examples/wave.py index b3eacbce9..763637719 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -85,7 +85,6 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): PyOpenCLProfilingArrayContext( queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True ) else: queue = cl.CommandQueue(cl_ctx) From 373feffe07f760d3d66e75cab7d463e593a80f31 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 11 Jul 2022 20:36:50 -0500 Subject: [PATCH 684/873] Do not specify order for visualizer --- examples/doublemach-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 90e671133..788552e82 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -269,7 +269,7 @@ def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): current_cv = initializer(nodes) current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) - visualizer = make_visualizer(discr, order) + visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ eosname = eos.__class__.__name__ From 4a85b4f13dc16a8c5ab8417d93ee129899d67707 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 11 Jul 2022 20:48:10 -0500 Subject: [PATCH 685/873] merge upstream --- examples/autoignition-mpi.py | 5 +++-- examples/doublemach-mpi.py | 2 +- examples/nsmix-mpi.py | 4 +++- examples/poiseuille-mpi.py | 5 +++-- examples/wave.py | 24 ++++++++++++++++++------ 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 997442490..05c87bdba 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -258,8 +258,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # Create a Pyrometheus EOS with the Cantera soln. Pyrometheus uses Cantera and # generates a set of methods to calculate chemothermomechanical properties and # states for this particular mechanism. - from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyro_mechanism = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) + from mirgecom.thermochemistry import get_pyrometheus_wrapper_class_from_cantera + pyro_mechanism = \ + get_pyrometheus_wrapper_class_from_cantera(cantera_soln)(actx.np) eos = PyrometheusMixture(pyro_mechanism, temperature_guess=temperature_seed) # {{{ Initialize simple transport model diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 90e671133..788552e82 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -269,7 +269,7 @@ def _boundary_state(discr, btag, gas_model, state_minus, **kwargs): current_cv = initializer(nodes) current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) - visualizer = make_visualizer(discr, order) + visualizer = make_visualizer(discr) initname = initializer.__class__.__name__ eosname = eos.__class__.__name__ diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 114228100..d716c2eb0 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -107,7 +107,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) else: actx = actx_class(comm, queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), @@ -624,6 +625,7 @@ def my_rhs(t, state): warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False + lazy = args.lazy if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index f47f38dbe..9e850aef7 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -115,7 +115,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, queue = cl.CommandQueue(cl_ctx) if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, mpi_base_tag=12000, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) else: actx = actx_class(comm, queue, allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), @@ -477,8 +478,8 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + lazy = args.lazy if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") diff --git a/examples/wave.py b/examples/wave.py index ef7d5c785..309364b42 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -83,16 +83,28 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): raise RuntimeError("Cannot run lazy with profiling.") queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = \ + PyOpenCLProfilingArrayContext( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + ) else: queue = cl.CommandQueue(cl_ctx) if lazy: - actx = PytatoPyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = \ + PytatoPyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool( + cl_tools.ImmediateAllocator(queue)), + ) else: - actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = \ + PyOpenCLArrayContext( + queue, + allocator=cl_tools.MemoryPool( + cl_tools.ImmediateAllocator(queue)), + force_device_scalars=True + ) dim = 2 nel_1d = 16 From 8353a55f7e1b5e0b57984c00e3c2955e96628c19 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 13 Jul 2022 10:33:05 -0500 Subject: [PATCH 686/873] Fix up deprecation warnings. --- mirgecom/boundary.py | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 252609536..89f2e1ed5 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -54,6 +54,7 @@ THE SOFTWARE. """ +from warnings import warn import numpy as np from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from mirgecom.fluid import make_conserved @@ -515,16 +516,14 @@ class AdiabaticSlipBoundary(PrescribedFluidBoundary): def __init__(self): """Initialize AdiabaticSlipBoundary.""" + warn("AdiabaticSlipBoundary is deprecated. Use SymmetryBoundary instead.", + DeprecationWarning, stacklevel=2) PrescribedFluidBoundary.__init__( self, boundary_state_func=self.adiabatic_slip_state, boundary_temperature_func=self._temperature_for_interior_state, boundary_grad_av_func=self.adiabatic_slip_grad_av ) - from warnings import warn - warn("AdiabaticSlipBoundary is deprecated. Use SymmetryBoundary instead.", - PendingDeprecationWarning) - def adiabatic_slip_state(self, discr, btag, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. @@ -589,11 +588,16 @@ class AdiabaticNoslipMovingBoundary(PrescribedFluidBoundary): def __init__(self, wall_velocity=None, dim=2): """Initialize boundary device.""" + warn("AdiabaticNoslipMovingBoundary is deprecated. Use " + "AdiabaticNoSlipWallBoundary instead.", DeprecationWarning, + stacklevel=2) + PrescribedFluidBoundary.__init__( self, boundary_state_func=self.adiabatic_noslip_state, boundary_temperature_func=self._temperature_for_interior_state, boundary_grad_av_func=self.adiabatic_noslip_grad_av, ) + # Check wall_velocity (assumes dim is correct) if wall_velocity is None: wall_velocity = np.zeros(shape=(dim,)) @@ -601,11 +605,6 @@ def __init__(self, wall_velocity=None, dim=2): raise ValueError(f"Specified wall velocity must be {dim}-vector.") self._wall_velocity = wall_velocity - from warnings import warn - warn("AdiabaticNoslipMovingBoundary is deprecated." - " Use AdiabaticNoslipWallBoundary instead.", - PendingDeprecationWarning) - def adiabatic_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): """Get the exterior solution on the boundary. @@ -640,17 +639,15 @@ class IsothermalNoSlipBoundary(PrescribedFluidBoundary): def __init__(self, wall_temperature=300): """Initialize the boundary condition object.""" + warn("IsothermalNoSlipBoundary is deprecated. Use IsothermalWallBoundary " + "instead.", DeprecationWarning, stacklevel=2) + self._wall_temp = wall_temperature PrescribedFluidBoundary.__init__( self, boundary_state_func=self.isothermal_noslip_state, boundary_temperature_func=self.temperature_bc ) - from warnings import warn - warn("IsothermalWallBoundary is deprecated." - " Use IsothermalWallBoundary instead.", - PendingDeprecationWarning) - def isothermal_noslip_state(self, discr, btag, gas_model, state_minus, **kwargs): r"""Get the interior and exterior solution (*state_minus*) on the boundary. From e39da36c5692c13e09771ac9b780d8ecfab44a6d Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 13 Jul 2022 15:05:45 -0500 Subject: [PATCH 687/873] Integrate `local_dt` a little tighter with existing (#711) * Partial update * Integrate local_dt mode a bit more closely. * Clean up after debugging * Dont run too many steps in CI. --- examples/poiseuille-local_dt-mpi.py | 2 +- mirgecom/steppers.py | 153 +++++++++------------------- test/test_local_dt.py | 77 -------------- test/test_time_integrators.py | 72 +++++++++++-- 4 files changed, 116 insertions(+), 188 deletions(-) delete mode 100644 test/test_local_dt.py diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py index 9d29e1705..58d81470c 100644 --- a/examples/poiseuille-local_dt-mpi.py +++ b/examples/poiseuille-local_dt-mpi.py @@ -450,7 +450,7 @@ def my_rhs(t, state): pre_step_callback=my_pre_step, post_step_callback=my_post_step, dt=current_dt, state=current_state.cv, t=current_t, t_final=t_final, - nsteps=100, local_dt=local_dt, + max_steps=20, local_dt=local_dt, istep=current_step) current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index 0fa77f97a..bfef5a638 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -75,7 +75,8 @@ def _is_unevaluated(actx, ary): def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, t=0.0, istep=0, pre_step_callback=None, - post_step_callback=None, force_eval=None): + post_step_callback=None, force_eval=None, + local_dt=False, max_steps=None): """Advance state from some time (t) to some time (t_final). Parameters @@ -99,6 +100,8 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, Initial timestep size to use, optional if dt is adaptive istep: int Step number from which to start + max_steps: int + Optional parameter indicating maximum number of steps to take pre_step_callback An optional user-defined function, with signature: ``state, dt = pre_step_callback(step, t, dt, state)``, @@ -111,6 +114,9 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, An optional boolean indicating whether to force lazy evaluation between timesteps. By default, attempts to deduce whether this is necessary based on the behavior of the timestepper. + local_dt + An optional boolean indicating whether *dt* is uniform or cell-local in + the domain. Returns ------- @@ -122,15 +128,28 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, """ actx = get_container_context_recursively_opt(state) - t = np.float64(t) - state = force_evaluation(actx, state) + if local_dt: + if max_steps is None: + raise ValueError("max_steps must be given for local_dt mode.") + marching_loc = istep + marching_limit = max_steps + else: + t = np.float64(t) + marching_loc = t + marching_limit = t_final - if t_final <= t: + if marching_loc >= marching_limit: return istep, t, state + state = force_evaluation(actx, state) + compiled_rhs = _compile_rhs(actx, rhs) - while t < t_final: + while marching_loc < marching_limit: + if max_steps is not None: + if max_steps <= istep: + return istep, t, state + if pre_step_callback is not None: state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) @@ -154,85 +173,13 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, if force_eval: state = force_evaluation(actx, state) - t += dt - istep += 1 + istep = istep + 1 + t = t + dt - if post_step_callback is not None: - state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) - - return istep, t, state - - -def _advance_locally_state_stepper_func(rhs, timestepper, state, t, dt, nsteps, - istep=0, pre_step_callback=None, - post_step_callback=None, force_eval=True): - """Advance state for specific number of iterations using local time stepping. - - Not to be used in time accurate simulations, only for convergence towards - steady state regime. - - Parameters - ---------- - rhs - Function that should return the time derivative of the state. - This function should take time and state as arguments, with - a call with signature ``rhs(t, state)``. - timestepper - Function that advances the state from t=time to t=(time+dt), and - returns the advanced state. Has a call with signature - ``timestepper(state, t, dt, rhs)``. - state: numpy.ndarray - Agglomerated object array containing at least the state variables that - will be advanced by this stepper - t: numpy.ndarray - Time at which to start. For compatibility of arguments, it is the same - as the step number. - dt: numpy.ndarray - Initial timestep size to use. Each cell has its own timestep and the - solution is advanced locally. - nsteps: - Number of iterations to be performed. - istep: int - Step number from which to start - pre_step_callback - An optional user-defined function, with signature: - ``state, dt = pre_step_callback(step, t, dt, state)``, - to be called before the timestepper is called for that particular step. - post_step_callback - An optional user-defined function, with signature: - ``state, dt = post_step_callback(step, t, dt, state)``, - to be called after the timestepper is called for that particular step. - force_eval - An optional boolean indicating whether to force lazy evaluation between - timesteps. Defaults to True. - - Returns - ------- - istep: int - the current step number - t: float - the current time - state: numpy.ndarray - """ - if nsteps <= istep: - return istep, t, state - - actx = get_container_context_recursively_opt(state) - - compiled_rhs = _compile_rhs(actx, rhs) - - while istep < nsteps: - - if pre_step_callback is not None: - state, dt = pre_step_callback(state=state, step=istep, t=t, dt=dt) - - if force_eval: - state = force_evaluation(actx, state) - - state = timestepper(state=state, t=t, dt=dt, rhs=compiled_rhs) - - t += 1.0 - istep += 1 + if local_dt: + marching_loc = istep + else: + marching_loc = t if post_step_callback is not None: state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) @@ -387,8 +334,8 @@ def generate_singlerate_leap_advancer(timestepper, component_id, rhs, t, dt, return stepper_cls -def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, nsteps=None, - component_id="state", pre_step_callback=None, +def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, + max_steps=None, component_id="state", pre_step_callback=None, post_step_callback=None, force_eval=None, local_dt=False): """Determine what stepper we're using and advance the state from (t) to (t_final). @@ -419,6 +366,8 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, nsteps=N Initial timestep size to use, optional if dt is adaptive istep: int Step number from which to start + max_steps: int + Optional parameter indicating maximum number of steps to take pre_step_callback An optional user-defined function, with signature: ``state, dt = pre_step_callback(step, t, dt, state)``, @@ -431,6 +380,9 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, nsteps=N An optional boolean indicating whether to force lazy evaluation between timesteps. By default, attempts to deduce whether this is necessary based on the behavior of the timestepper. + local_dt + An optional boolean indicating whether *dt* is uniform or cell-local in + the domain. Returns ------- @@ -452,7 +404,9 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, nsteps=N from leap import MethodBuilder if isinstance(timestepper, MethodBuilder): leap_timestepper = True - + if local_dt: + raise ValueError("Local timestepping is not supported for Leap-based" + " integrators.") if leap_timestepper: (current_step, current_t, current_state) = \ _advance_state_leap( @@ -464,23 +418,14 @@ def advance_state(rhs, timestepper, state, t_final, t=0, istep=0, dt=0, nsteps=N force_eval=force_eval, ) else: - if local_dt: - (current_step, current_t, current_state) = \ - _advance_locally_state_stepper_func( - rhs=rhs, timestepper=timestepper, - state=state, t=t, dt=dt, nsteps=nsteps, - pre_step_callback=pre_step_callback, - post_step_callback=post_step_callback, - istep=istep, force_eval=force_eval - ) - else: - (current_step, current_t, current_state) = \ - _advance_state_stepper_func( - rhs=rhs, timestepper=timestepper, - state=state, t=t, t_final=t_final, dt=dt, - pre_step_callback=pre_step_callback, - post_step_callback=post_step_callback, - istep=istep, force_eval=force_eval - ) + (current_step, current_t, current_state) = \ + _advance_state_stepper_func( + rhs=rhs, timestepper=timestepper, + state=state, t=t, t_final=t_final, dt=dt, + pre_step_callback=pre_step_callback, + post_step_callback=post_step_callback, + istep=istep, force_eval=force_eval, + max_steps=max_steps, local_dt=local_dt + ) return current_step, current_t, current_state diff --git a/test/test_local_dt.py b/test/test_local_dt.py deleted file mode 100644 index f444608d7..000000000 --- a/test/test_local_dt.py +++ /dev/null @@ -1,77 +0,0 @@ -"""Test time integrators.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" - -import numpy as np -import logging -import pytest - -from mirgecom.integrators import (euler_step, - lsrk54_step, - lsrk144_step, - rk4_step) - -logger = logging.getLogger(__name__) - - -@pytest.mark.parametrize(("integrator", "method_order"), - [(euler_step, 1), - (lsrk54_step, 4), - (lsrk144_step, 4), - (rk4_step, 4)]) -def test_integration_order(integrator, method_order): - """Test that time integrators have correct order using local time stepping. - - Run for dt as an array (and not as a float) but the order check is done - one dt at a time. - """ - def exact_soln(t): - return np.exp(-t) - - def rhs(t, state): - return -np.exp(-t) - - from pytools.convergence import EOCRecorder - integrator_eoc = EOCRecorder() - - local_dt = np.asarray([0.5, 1.0, 1.5, 2.0]) - for i in range(0, local_dt.shape[0]): - for refine in [1, 2, 4, 8]: - dt = local_dt / refine - t = 0*dt - state = exact_soln(t) - - istep = 0 - - while istep < 5: - state = integrator(state, t, dt, rhs) - t = t + dt - istep += 1 - - error = np.abs(state[i] - exact_soln(t)[i]) / exact_soln(t)[i] - integrator_eoc.add_data_point(dt[i], error) - - logger.info(f"Time Integrator EOC:\n = {integrator_eoc}") - assert integrator_eoc.order_estimate() >= method_order - .01 diff --git a/test/test_time_integrators.py b/test/test_time_integrators.py index 069469778..3b554634c 100644 --- a/test/test_time_integrators.py +++ b/test/test_time_integrators.py @@ -45,7 +45,8 @@ (lsrk54_step, 4), (lsrk144_step, 4), (rk4_step, 4)]) -def test_integration_order(integrator, method_order): +@pytest.mark.parametrize("local_dt", [True, False]) +def test_integrator_order(integrator, method_order, local_dt): """Test that time integrators have correct order.""" def exact_soln(t): @@ -57,18 +58,77 @@ def rhs(t, state): from pytools.convergence import EOCRecorder integrator_eoc = EOCRecorder() - dt = 1.0 + dt = (np.asarray([0.5, 1.0, 1.5, 2.0]) if local_dt else 1.0) + max_steps = 5 + for refine in [1, 2, 4, 8]: + # These are multi-valued when local_dt dt = dt / refine - t = 0 + t = 0*dt state = exact_soln(t) - while t < 4: + for _ in range(max_steps): state = integrator(state, t, dt, rhs) t = t + dt - error = np.abs(state - exact_soln(t)) / exact_soln(t) - integrator_eoc.add_data_point(dt, error) + if local_dt: + # Use the max error among multi-"cells" for local_dt + error = max(np.abs(state - exact_soln(t)) / exact_soln(t)) + integrator_eoc.add_data_point(dt[0], error) + else: + error = np.abs(state - exact_soln(t)) / exact_soln(t) + integrator_eoc.add_data_point(dt, error) + + logger.info(f"Time Integrator EOC:\n = {integrator_eoc}") + assert integrator_eoc.order_estimate() >= method_order - .01 + + +@pytest.mark.parametrize(("integrator", "method_order"), + [(euler_step, 1), + (lsrk54_step, 4), + (lsrk144_step, 4), + (rk4_step, 4)]) +@pytest.mark.parametrize("local_dt", [True, False]) +def test_state_advancer(integrator, method_order, local_dt): + """Test that time integrators have correct order.""" + + def exact_soln(t): + return np.exp(-t) + + def rhs(t, state): + return -np.exp(-t) + + from pytools.convergence import EOCRecorder + integrator_eoc = EOCRecorder() + + dt = (np.asarray([0.5, 1.0, 1.5, 2.0]) if local_dt else 1.0) + max_steps = 5 if local_dt else None + t_final = 5*dt + + for refine in [1, 2, 4, 8]: + # These are multi-valued when local_dt + dt = dt / refine + t = 0*dt + state = exact_soln(t) + + advanced_step, advanced_t, advanced_state = \ + advance_state(rhs=rhs, timestepper=integrator, dt=dt, + state=state, t=t, t_final=t_final, + max_steps=max_steps, local_dt=local_dt, + istep=0) + + expected_soln = exact_soln(advanced_t) + + if local_dt: + # Use the max error among multi-"cells" for local_dt + error = max(np.abs(advanced_state - expected_soln) + / expected_soln) + integrator_eoc.add_data_point(dt[0], error) + else: + error = ( + np.abs(advanced_state - expected_soln) / expected_soln + ) + integrator_eoc.add_data_point(dt, error) logger.info(f"Time Integrator EOC:\n = {integrator_eoc}") assert integrator_eoc.order_estimate() >= method_order - .01 From a0d2f1528ae3e51cc4786d72a82692eb36c0868e Mon Sep 17 00:00:00 2001 From: Tulio Date: Wed, 13 Jul 2022 15:14:38 -0500 Subject: [PATCH 688/873] Modifying to run with eager --- ...le-local_dt-mpi.py => poiseuille-local_dt-lazy.py} | 0 mirgecom/simutil.py | 11 +++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) rename examples/{poiseuille-local_dt-mpi.py => poiseuille-local_dt-lazy.py} (100%) diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-lazy.py similarity index 100% rename from examples/poiseuille-local_dt-mpi.py rename to examples/poiseuille-local_dt-lazy.py diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 3afcd6ccf..e8cc65cfe 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -168,10 +168,13 @@ def get_sim_timestep(discr, state, t, dt, cfl, t_final=0.0, if local_dt: actx = state.array_context data_shape = (state.cv.mass[0]).shape - return cfl * actx.np.broadcast_to( - op.elementwise_min(discr, get_viscous_timestep(discr=discr, - state=state)), - data_shape) + if actx.supports_nonscalar_broadcasting: + return cfl * actx.np.broadcast_to( + op.elementwise_min(discr, get_viscous_timestep(discr, state)), + data_shape) + else: + return cfl * op.elementwise_min(discr, + get_viscous_timestep(discr, state)) my_dt = dt t_remaining = max(0, t_final - t) From ba7614ad2eb79981a1255bde39b0babbfb3580c9 Mon Sep 17 00:00:00 2001 From: tulioricci <72670026+tulioricci@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:23:26 -0500 Subject: [PATCH 689/873] Update mirgecom/steppers.py Co-authored-by: Mike Campbell --- mirgecom/steppers.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mirgecom/steppers.py b/mirgecom/steppers.py index bfef5a638..68ecf1353 100644 --- a/mirgecom/steppers.py +++ b/mirgecom/steppers.py @@ -176,10 +176,7 @@ def _advance_state_stepper_func(rhs, timestepper, state, t_final, dt=0, istep = istep + 1 t = t + dt - if local_dt: - marching_loc = istep - else: - marching_loc = t + marching_loc = istep if local_dt else t if post_step_callback is not None: state, dt = post_step_callback(state=state, step=istep, t=t, dt=dt) From 7f4fa2fa6418de224c14842cbe510275682c2653 Mon Sep 17 00:00:00 2001 From: Tulio Date: Wed, 13 Jul 2022 16:12:01 -0500 Subject: [PATCH 690/873] Adding mpi flag to example --- ...oiseuille-local_dt-lazy.py => poiseuille-local_dt-mpi-lazy.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/{poiseuille-local_dt-lazy.py => poiseuille-local_dt-mpi-lazy.py} (100%) diff --git a/examples/poiseuille-local_dt-lazy.py b/examples/poiseuille-local_dt-mpi-lazy.py similarity index 100% rename from examples/poiseuille-local_dt-lazy.py rename to examples/poiseuille-local_dt-mpi-lazy.py From e4a09529009b156390031f67af7a4eec51a79d1c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 13 Jul 2022 16:29:25 -0500 Subject: [PATCH 691/873] Unduplicate import --- mirgecom/simutil.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index a9084fa87..e8cc65cfe 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -77,7 +77,6 @@ from typing import List from grudge.discretization import DiscretizationCollection -from mirgecom.viscous import get_viscous_timestep logger = logging.getLogger(__name__) From bf6d67115e9247562894e671288d80a2a5b0f881 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 18 Jul 2022 20:07:56 -0500 Subject: [PATCH 692/873] SVM wave.py --- examples/wave.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/wave.py b/examples/wave.py index fa0c9d5a7..446a3c5a8 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -82,15 +82,15 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) actx = PyOpenCLProfilingArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + allocator=cl_tools.SVMAllocator(cl_ctx, cl.svm_mem_flags.READ_WRITE, queue=queue)) else: queue = cl.CommandQueue(cl_ctx) if lazy: actx = PytatoPyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + allocator=cl_tools.SVMAllocator(cl_ctx, cl.svm_mem_flags.READ_WRITE, queue=queue)) else: actx = PyOpenCLArrayContext(queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + allocator=cl_tools.SVMAllocator(cl_ctx, cl.svm_mem_flags.READ_WRITE, queue=queue)) dim = 2 nel_1d = 16 From c728bc454b2f892bdf50f3661f7eba6a018f2339 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 Aug 2022 09:09:00 -0500 Subject: [PATCH 693/873] Fix up linting ish. --- mirgecom/boundary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 747de8b17..53d301aa5 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -1257,7 +1257,7 @@ def viscous_wall_flux(self, discr, btag, gas_model, state_minus, def adiabatic_noslip_grad_av(self, grad_av_minus, **kwargs): """Get the exterior solution on the boundary for artificial viscosity.""" - return(-grad_av_minus) + return -grad_av_minus class SymmetryBoundary(PrescribedFluidBoundary): From 0f0f58e3144166e501f744306c05ba67f799fb16 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 2 Aug 2022 08:55:11 -0500 Subject: [PATCH 694/873] adjust to new SVM Mempool interface --- examples/wave.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/wave.py b/examples/wave.py index 4307eb039..07c139239 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -84,21 +84,21 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): actx = \ PyOpenCLProfilingArrayContext( queue, - allocator=cl_tools.SVMAllocator(cl_ctx, cl.svm_mem_flags.READ_WRITE, queue=queue)), - ) + allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, alignment=0, queue=queue))) + # ) else: queue = cl.CommandQueue(cl_ctx) if lazy: actx = \ PytatoPyOpenCLArrayContext( queue, - allocator=cl_tools.SVMAllocator(cl_ctx, cl.svm_mem_flags.READ_WRITE, queue=queue), + allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, alignment=0, queue=queue)), ) else: actx = \ PyOpenCLArrayContext( queue, - allocator=cl_tools.SVMAllocator(cl_ctx, cl.svm_mem_flags.READ_WRITE, queue=queue), + allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, alignment=0, queue=queue)), force_device_scalars=True ) From 9b2f298b56583042add57fd63c516c4119e0c473 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 8 Aug 2022 12:32:55 -0500 Subject: [PATCH 695/873] svm for pulse-mpi --- examples/pulse-mpi.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 290227ae9..1f5385bfa 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -103,10 +103,12 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, if lazy: actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, + alignment=0, queue=queue))) else: actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), + allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, + alignment=0, queue=queue)), force_device_scalars=True) # timestepping control From 9021a8d17b4440cb5439ef248b7121e826fca767 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 8 Aug 2022 19:19:13 -0500 Subject: [PATCH 696/873] add get_reasonable_memory_pool --- examples/pulse-mpi.py | 14 ++++++-------- examples/wave.py | 27 ++++++++++----------------- mirgecom/simutil.py | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 1f5385bfa..b938b13f9 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -29,7 +29,6 @@ import numpy as np from functools import partial import pyopencl as cl -import pyopencl.tools as cl_tools from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer @@ -90,6 +89,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, num_parts = comm.Get_size() from mirgecom.simutil import global_reduce as _global_reduce + from mirgecom.simutil import get_reasonable_memory_pool + global_reduce = partial(_global_reduce, comm=comm) logmgr = initialize_logmgr(use_logmgr, @@ -101,15 +102,12 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, - alignment=0, queue=queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, - alignment=0, queue=queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control current_step = 0 diff --git a/examples/wave.py b/examples/wave.py index 07c139239..9f275362e 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -26,7 +26,6 @@ import numpy.linalg as la # noqa import pyopencl as cl import pyopencl.array as cla # noqa -import pyopencl.tools as cl_tools from pytools.obj_array import flat_obj_array @@ -76,31 +75,25 @@ def main(use_profiling=False, use_logmgr=False, lazy: bool = False): logmgr = initialize_logmgr(use_logmgr, filename="wave.sqlite", mode="wu") + from mirgecom.simutil import get_reasonable_memory_pool + if use_profiling: if lazy: raise RuntimeError("Cannot run lazy with profiling.") queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - actx = \ - PyOpenCLProfilingArrayContext( - queue, - allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, alignment=0, queue=queue))) - # ) + + alloc = get_reasonable_memory_pool(cl_ctx, queue) + actx = PyOpenCLProfilingArrayContext(queue, allocator=alloc) else: queue = cl.CommandQueue(cl_ctx) + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = \ - PytatoPyOpenCLArrayContext( - queue, - allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, alignment=0, queue=queue)), - ) + actx = PytatoPyOpenCLArrayContext(queue, allocator=alloc) else: - actx = \ - PyOpenCLArrayContext( - queue, - allocator=cl_tools.SVMPool(cl_tools.SVMAllocator(cl_ctx, alignment=0, queue=queue)), - force_device_scalars=True - ) + actx = PyOpenCLArrayContext(queue, allocator=alloc, + force_device_scalars=True) dim = 2 nel_1d = 16 diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c7e3c5bd3..5c93e4f07 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -7,6 +7,7 @@ .. autofunction:: get_sim_timestep .. autofunction:: write_visfile .. autofunction:: global_reduce +.. autofunction:: get_reasonable_memory_pool Diagnostic utilities -------------------- @@ -434,6 +435,20 @@ def create_parallel_grid(comm, generate_grid): return generate_and_distribute_mesh(comm=comm, generate_mesh=generate_grid) +def get_reasonable_memory_pool(ctx, queue): + """Return an SVM or buffer memory pool based on what the device supports.""" + from pyopencl.characterize import has_coarse_grain_buffer_svm + import pyopencl.tools as cl_tools + + if has_coarse_grain_buffer_svm(queue.device) and hasattr(cl_tools, "SVMPool"): + return cl_tools.SVMPool(cl_tools.SVMAllocator( # pylint: disable=no-member + ctx, alignment=0, queue=queue)) + else: + from warnings import warn + warn("No SVM support, returning a CL buffer-based memory pool") + return cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) + + def configurate(config_key, config_object=None, default_value=None): """Return a configured item from a configuration object.""" if config_object is not None: From 371ff3310a4cffdd893c0218099fe641fd5e3f29 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 10 Aug 2022 15:57:21 -0500 Subject: [PATCH 697/873] modify remaining examples --- examples/autoignition-mpi.py | 11 +++++------ examples/doublemach-mpi.py | 12 +++++------- examples/heat-source-mpi.py | 11 +++++------ examples/hotplate-mpi.py | 12 +++++------- examples/lump-mpi.py | 11 +++++------ examples/mixture-mpi.py | 11 +++++------ examples/nsmix-mpi.py | 11 +++++------ examples/poiseuille-mpi.py | 11 +++++------ examples/pulse-mpi.py | 3 +-- examples/scalar-lump-mpi.py | 11 +++++------ examples/sod-mpi.py | 11 +++++------ examples/vortex-mpi.py | 11 +++++------ examples/wave-mpi.py | 12 +++++------- 13 files changed, 61 insertions(+), 77 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 440fba8f7..df033ed65 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -101,13 +100,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # Some discretization parameters dim = 2 diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index 788552e82..816ff0be7 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -27,7 +27,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -146,14 +145,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool( - cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # Timestepping control current_step = 0 diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index d8a3277f7..4aff5c7ff 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -39,7 +39,6 @@ NeumannDiffusionBoundary) from mirgecom.mpi import mpi_entry_point from mirgecom.utils import force_evaluation -import pyopencl.tools as cl_tools from mirgecom.logging_quantities import (initialize_logmgr, logmgr_add_cl_device_info, @@ -69,13 +68,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) from meshmode.distributed import MPIMeshDistributor, get_partition_by_pymetis mesh_dist = MPIMeshDistributor(comm) diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index b5e13884c..b31ca225c 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -111,14 +110,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool( - cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control timestepper = rk4_step diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index fcac632b6..16dd46e05 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -93,13 +92,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control if use_leap: diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index f2871c961..f0c67c36e 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -95,13 +94,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control if use_leap: diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index c46416eae..fc160a0dc 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from pytools.obj_array import make_obj_array @@ -102,13 +101,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # Timestepping control # This example runs only 3 steps by default (to keep CI ~short) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index e133d37ad..fe05bfab8 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from pytools.obj_array import make_obj_array from functools import partial @@ -111,13 +110,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control timestepper = rk4_step diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index b938b13f9..fee981624 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -89,8 +89,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, num_parts = comm.Get_size() from mirgecom.simutil import global_reduce as _global_reduce - from mirgecom.simutil import get_reasonable_memory_pool - global_reduce = partial(_global_reduce, comm=comm) logmgr = initialize_logmgr(use_logmgr, @@ -102,6 +100,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool alloc = get_reasonable_memory_pool(cl_ctx, queue) if lazy: diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 087b10704..3f7759e7b 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from pytools.obj_array import make_obj_array @@ -94,13 +93,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control current_step = 0 diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 122c4ec80..01802067c 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np # noqa import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -93,13 +92,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control if use_leap: diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index fccd7b7aa..cea15ed90 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa @@ -95,13 +94,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control current_step = 0 diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index b95fa643c..643c26c35 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -40,8 +40,6 @@ from mirgecom.wave import wave_operator from mirgecom.utils import force_evaluation -import pyopencl.tools as cl_tools - from logpyle import IntervalTimer, set_dt from mirgecom.logging_quantities import (initialize_logmgr, @@ -88,13 +86,13 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) if restart_step is None: From 1c83dc9323e612644f2115d45881bb56c330c78e Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 10 Aug 2022 16:02:13 -0500 Subject: [PATCH 698/873] undo req.txt change --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9e14a43ef..4dc2b033d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ pyyaml # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/inducer/loopy.git@svm-args#egg=loopy +--editable git+https://github.com/inducer/loopy.git#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy From b9af6b4ab246e33e16ff5b6e0a421b38fab998f0 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 11 Aug 2022 19:40:14 -0500 Subject: [PATCH 699/873] log that we are using an SVM pool --- mirgecom/simutil.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 5c93e4f07..550ed201d 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -441,6 +441,7 @@ def get_reasonable_memory_pool(ctx, queue): import pyopencl.tools as cl_tools if has_coarse_grain_buffer_svm(queue.device) and hasattr(cl_tools, "SVMPool"): + logger.info("Using SVM-based memory pool") return cl_tools.SVMPool(cl_tools.SVMAllocator( # pylint: disable=no-member ctx, alignment=0, queue=queue)) else: From 116533673ff18f592c3ac78065f9ccda21cfc5e3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 12 Aug 2022 16:12:21 -0500 Subject: [PATCH 700/873] Update added examples for SVM allocator option. --- examples/combozzle-mpi.py | 11 +++++------ examples/poiseuille-local_dt-mpi-lazy.py | 10 +++++----- examples/poiseuille-multispecies-mpi.py | 10 +++++----- examples/scalar-advdiff-mpi.py | 11 +++++------ 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index d85314f89..c42f4f769 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -27,7 +27,6 @@ import yaml import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from meshmode.array_context import PyOpenCLArrayContext @@ -597,13 +596,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) rst_path = "restart_data/" rst_pattern = ( diff --git a/examples/poiseuille-local_dt-mpi-lazy.py b/examples/poiseuille-local_dt-mpi-lazy.py index c46eacfa9..0fe7b15cf 100644 --- a/examples/poiseuille-local_dt-mpi-lazy.py +++ b/examples/poiseuille-local_dt-mpi-lazy.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from pytools.obj_array import make_obj_array from functools import partial @@ -103,12 +102,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control timestepper = rk4_step diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 7f96347e1..95887aaee 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from pytools.obj_array import make_obj_array from functools import partial @@ -114,12 +113,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, allocator=alloc, mpi_base_tag=12000) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control timestepper = rk4_step diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index b96b13879..fa0d6e0ea 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from functools import partial from pytools.obj_array import make_obj_array @@ -97,13 +96,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control current_step = 0 From f1d730382627431756ab2100ce4fc5893c2010ce Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 18 Aug 2022 15:44:36 -0500 Subject: [PATCH 701/873] Add initial time option to init msg --- mirgecom/io.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mirgecom/io.py b/mirgecom/io.py index e39564d30..a1ea418a2 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -37,7 +37,8 @@ def make_init_message(*, dim, order, dt, t_final, nstatus, nviz, cfl, constant_cfl, initname, eosname, casename, - nelements=0, global_nelements=0): + nelements=0, global_nelements=0, + t_initial=0): """Create a summary of some general simulation parameters and inputs.""" return ( f"Initialization for Case({casename})\n" @@ -45,6 +46,7 @@ def make_init_message(*, dim, order, dt, t_final, f"Num {dim}d order-{order} elements: {nelements}\n" f"Num global elements: {global_nelements}\n" f"Timestep: {dt}\n" + f"Initial time: {t_initial}\n" f"Final time: {t_final}\n" f"CFL: {cfl}\n" f"Constant CFL: {constant_cfl}\n" From b591623405437407b97cff16e377802710b3e95d Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Tue, 23 Aug 2022 10:14:25 -0500 Subject: [PATCH 702/873] rename a few more discrs that aren't in feeder branches --- examples/nsmix-mpi.py | 8 ++-- examples/poiseuille-multispecies-mpi.py | 56 ++++++++++++------------- mirgecom/simutil.py | 10 ++--- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 8e7d9e655..122ac7ae0 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -479,7 +479,7 @@ def my_pre_step(step, t, dt, state): if do_viz: from mirgecom.fluid import velocity_gradient ns_rhs, grad_cv, grad_t = \ - ns_operator(discr, state=fluid_state, time=t, + ns_operator(dcoll, state=fluid_state, time=t, boundaries=visc_bnds, gas_model=gas_model, return_gradients=True, quadrature_tag=quadrature_tag) grad_v = velocity_gradient(cv, grad_cv) @@ -525,10 +525,10 @@ def my_post_step(step, t, dt, state): def _num_flux_dissipative(u_minus, u_plus, beta): return num_flux_central(u_minus, u_plus) + beta*(u_plus - u_minus)/2 - def _viscous_facial_flux_dissipative(discr, state_pair, grad_cv_pair, + def _viscous_facial_flux_dissipative(dcoll, state_pair, grad_cv_pair, grad_t_pair, beta=0., gas_model=None): actx = state_pair.int.array_context - normal = actx.thaw(discr.normal(state_pair.dd)) + normal = actx.thaw(dcoll.normal(state_pair.dd)) f_int = viscous_flux(state_pair.int, grad_cv_pair.int, grad_t_pair.int) @@ -576,7 +576,7 @@ def my_rhs(t, state): current_cfl, t_final, constant_cfl) from mirgecom.fluid import velocity_gradient ns_rhs, grad_cv, grad_t = \ - ns_operator(discr, state=current_state, time=current_t, + ns_operator(dcoll, state=current_state, time=current_t, boundaries=visc_bnds, gas_model=gas_model, return_gradients=True) grad_v = velocity_gradient(current_state.cv, grad_cv) diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 95887aaee..680751443 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -179,7 +179,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, default_simplex_group_factory, QuadratureSimplexGroupFactory order = 2 - discr = EagerDGDiscretization( + dcoll = EagerDGDiscretization( actx, local_mesh, discr_tag_to_group_factory={ DISCR_TAG_BASE: default_simplex_group_factory( @@ -188,7 +188,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, }, mpi_communicator=comm ) - nodes = actx.thaw(discr.nodes()) + nodes = actx.thaw(dcoll.nodes()) if use_overintegration: quadrature_tag = DISCR_TAG_QUAD @@ -198,7 +198,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, discr, dim, + logmgr_add_many_discretization_quantities(logmgr, dcoll, dim, extract_vars_for_logging, units_for_logging) logmgr.add_watches([ @@ -269,9 +269,9 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): species_diffusivity=species_diffusivity)) exact = initializer(x_vec=nodes, eos=gas_model.eos) - def _exact_boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def _exact_boundary_solution(dcoll, btag, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = dcoll.discr_from_dd(btag) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, cv=state_minus.cv, **kwargs), gas_model) @@ -299,7 +299,7 @@ def _exact_boundary_solution(discr, btag, gas_model, state_minus, **kwargs): vis_timer = None - visualizer = make_visualizer(discr, order) + visualizer = make_visualizer(dcoll, order) eosname = gas_model.eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, @@ -315,16 +315,16 @@ def _exact_boundary_solution(discr, btag, gas_model, state_minus, **kwargs): def my_write_status(step, t, dt, state, component_errors): dv = state.dv from grudge.op import nodal_min, nodal_max - p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) - p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) - t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) - t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) + p_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.pressure)) + t_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.temperature)) if constant_cfl: cfl = current_cfl else: from mirgecom.viscous import get_viscous_cfl - cfl = actx.to_numpy(nodal_max(discr, "vol", - get_viscous_cfl(discr, dt, state))) + cfl = actx.to_numpy(nodal_max(dcoll, "vol", + get_viscous_cfl(dcoll, dt, state))) if rank == 0: logger.info(f"Step: {step}, T: {t}, DT: {dt}, CFL: {cfl}\n" f"----- Pressure({p_min}, {p_max})\n" @@ -340,7 +340,7 @@ def my_write_viz(step, t, state, dv): ("resid", resid)] from mirgecom.simutil import write_visfile - write_visfile(discr, viz_fields, visualizer, vizname=casename, + write_visfile(dcoll, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True) def my_write_restart(step, t, state): @@ -361,28 +361,28 @@ def my_write_restart(step, t, state): def my_health_check(state, dv, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", dv.pressure): + if check_naninf_local(dcoll, "vol", dv.pressure): health_error = True logger.info(f"{rank=}: NANs/Infs in pressure data.") - if global_reduce(check_range_local(discr, "vol", dv.pressure, 9.999e4, + if global_reduce(check_range_local(dcoll, "vol", dv.pressure, 9.999e4, 1.00101e5), op="lor"): health_error = False from grudge.op import nodal_max, nodal_min - p_min = actx.to_numpy(nodal_min(discr, "vol", dv.pressure)) - p_max = actx.to_numpy(nodal_max(discr, "vol", dv.pressure)) + p_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.pressure)) + p_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.pressure)) logger.info(f"Pressure range violation ({p_min=}, {p_max=})") - if check_naninf_local(discr, "vol", dv.temperature): + if check_naninf_local(dcoll, "vol", dv.temperature): health_error = True logger.info(f"{rank=}: NANs/INFs in temperature data.") - if global_reduce(check_range_local(discr, "vol", dv.temperature, 348, 350), + if global_reduce(check_range_local(dcoll, "vol", dv.temperature, 348, 350), op="lor"): health_error = False from grudge.op import nodal_max, nodal_min - t_min = actx.to_numpy(nodal_min(discr, "vol", dv.temperature)) - t_max = actx.to_numpy(nodal_max(discr, "vol", dv.temperature)) + t_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.temperature)) + t_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.temperature)) logger.info(f"Temperature range violation ({t_min=}, {t_max=})") exittol = 1e7 @@ -410,7 +410,7 @@ def my_pre_step(step, t, dt, state): if do_health: from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) + component_errors = compare_fluid_solutions(dcoll, state, exact) health_errors = global_reduce( my_health_check(state, dv, component_errors), op="lor") if health_errors: @@ -424,13 +424,13 @@ def my_pre_step(step, t, dt, state): if do_viz: my_write_viz(step=step, t=t, state=state, dv=dv) - dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, + dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, t_final, constant_cfl) if do_status: # needed because logging fails to make output if component_errors is None: from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, state, exact) + component_errors = compare_fluid_solutions(dcoll, state, exact) my_write_status(step=step, t=t, dt=dt, state=fluid_state, component_errors=component_errors) @@ -465,14 +465,14 @@ def acoustic_pulse(time, fluid_cv, gas_model): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return ns_operator(discr, gas_model=gas_model, boundaries=boundaries, + return ns_operator(dcoll, gas_model=gas_model, boundaries=boundaries, state=fluid_state, time=t, quadrature_tag=quadrature_tag) current_state = make_fluid_state( cv=acoustic_pulse(current_t, current_cv, gas_model), gas_model=gas_model) - current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ @@ -487,10 +487,10 @@ def my_rhs(t, state): if rank == 0: logger.info("Checkpointing final state ...") final_dv = current_state.dv - final_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + final_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(discr, current_state.cv, exact) + component_errors = compare_fluid_solutions(dcoll, current_state.cv, exact) my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) my_write_restart(step=current_step, t=current_t, state=current_state) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 94f2779b5..7f6d51251 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -474,9 +474,9 @@ def generate_and_distribute_mesh(comm, generate_mesh): return local_mesh, global_nelements -def boundary_report(discr, boundaries, outfile_name): +def boundary_report(dcoll, boundaries, outfile_name): """Generate a report of the grid boundaries.""" - comm = discr.mpi_communicator + comm = dcoll.mpi_communicator nproc = 1 rank = 0 if comm is not None: @@ -489,18 +489,18 @@ def boundary_report(discr, boundaries, outfile_name): local_report.seek(0, 2) for btag in boundaries: - boundary_discr = discr.discr_from_dd(btag) + boundary_discr = dcoll.discr_from_dd(btag) nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) local_report.write(f"{btag}: {nnodes}\n") if nproc > 1: from meshmode.mesh import BTAG_PARTITION from grudge.trace_pair import connected_ranks - remote_ranks = connected_ranks(discr) + remote_ranks = connected_ranks(dcoll) local_report.write(f"remote_ranks: {remote_ranks}\n") rank_nodes = [] for remote_rank in remote_ranks: - boundary_discr = discr.discr_from_dd(BTAG_PARTITION(remote_rank)) + boundary_discr = dcoll.discr_from_dd(BTAG_PARTITION(remote_rank)) nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) rank_nodes.append(nnodes) local_report.write(f"nnodes_pb: {rank_nodes}\n") From 33ab31dcba8867be9e6a4239fd08407dbefd6212 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 24 Aug 2022 14:49:29 -0500 Subject: [PATCH 703/873] rename discr to dcoll in a couple more examples --- examples/combozzle-mpi.py | 60 +++++++++++++++++----------------- examples/scalar-advdiff-mpi.py | 32 +++++++++--------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index c42f4f769..b8323102d 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -632,10 +632,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, if grid_only: return 0 - discr = create_discretization_collection(actx, local_mesh, order, + dcoll = create_discretization_collection(actx, local_mesh, order, mpi_communicator=comm) - nodes = actx.thaw(discr.nodes()) - ones = discr.zeros(actx) + 1.0 + nodes = actx.thaw(dcoll.nodes()) + ones = dcoll.zeros(actx) + 1.0 def _compiled_stepper_wrapper(state, t, dt, rhs): return compiled_lsrk45_step(actx, state, t, dt, rhs) @@ -654,14 +654,14 @@ def _compiled_stepper_wrapper(state, t, dt, rhs): def vol_min(x): from grudge.op import nodal_min - return actx.to_numpy(nodal_min(discr, "vol", x))[()] + return actx.to_numpy(nodal_min(dcoll, "vol", x))[()] def vol_max(x): from grudge.op import nodal_max - return actx.to_numpy(nodal_max(discr, "vol", x))[()] + return actx.to_numpy(nodal_max(dcoll, "vol", x))[()] from grudge.dt_utils import characteristic_lengthscales - length_scales = characteristic_lengthscales(actx, discr) + length_scales = characteristic_lengthscales(actx, dcoll) h_min = vol_min(length_scales) h_max = vol_max(length_scales) @@ -670,7 +670,7 @@ def vol_max(x): else: quadrature_tag = None - ones = discr.zeros(actx) + 1.0 + ones = dcoll.zeros(actx) + 1.0 if rank == 0: print("----- Discretization info ----") @@ -705,7 +705,7 @@ def vol_max(x): ]) if log_dependent: - logmgr_add_many_discretization_quantities(logmgr, discr, dim, + logmgr_add_many_discretization_quantities(logmgr, dcoll, dim, extract_vars_for_logging, units_for_logging) logmgr.add_watches([ @@ -865,7 +865,7 @@ def get_fluid_state(cv, tseed): if boundary_report: from mirgecom.simutil import boundary_report - boundary_report(discr, boundaries, f"{casename}_boundaries_np{nparts}.yaml") + boundary_report(dcoll, boundaries, f"{casename}_boundaries_np{nparts}.yaml") if rst_filename: current_step = rst_step @@ -878,12 +878,12 @@ def get_fluid_state(cv, tseed): temperature_seed = restart_data["temperature_seed"] else: rst_cv = restart_data["cv"] - old_discr = \ + old_dcoll = \ create_discretization_collection(actx, local_mesh, order=rst_order, mpi_communicator=comm) from meshmode.discretization.connection import make_same_mesh_connection - connection = make_same_mesh_connection(actx, discr.discr_from_dd("vol"), - old_discr.discr_from_dd("vol")) + connection = make_same_mesh_connection(actx, dcoll.discr_from_dd("vol"), + old_dcoll.discr_from_dd("vol")) current_cv = connection(rst_cv) temperature_seed = connection(restart_data["temperature_seed"]) else: @@ -916,7 +916,7 @@ def _sponge(cv): # }}} - visualizer = make_visualizer(discr) + visualizer = make_visualizer(dcoll) initname = initializer.__class__.__name__ eosname = gas_model.eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, @@ -950,13 +950,13 @@ def my_write_status(dt, cfl, dv=None): press = dv.pressure from grudge.op import nodal_min_loc, nodal_max_loc - tmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", temp)), + tmin = global_reduce(actx.to_numpy(nodal_min_loc(dcoll, "vol", temp)), op="min") - tmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", temp)), + tmax = global_reduce(actx.to_numpy(nodal_max_loc(dcoll, "vol", temp)), op="max") - pmin = global_reduce(actx.to_numpy(nodal_min_loc(discr, "vol", press)), + pmin = global_reduce(actx.to_numpy(nodal_min_loc(dcoll, "vol", press)), op="min") - pmax = global_reduce(actx.to_numpy(nodal_max_loc(discr, "vol", press)), + pmax = global_reduce(actx.to_numpy(nodal_max_loc(dcoll, "vol", press)), op="max") dv_status_msg = f"\nP({pmin}, {pmax}), T({tmin}, {tmax})" status_msg = status_msg + dv_status_msg @@ -966,7 +966,7 @@ def my_write_status(dt, cfl, dv=None): def my_write_viz(step, t, cv, dv): viz_fields = [("cv", cv), ("dv", dv)] - write_visfile(discr, viz_fields, visualizer, vizname=casename, + write_visfile(dcoll, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True, vis_timer=vis_timer) def my_write_restart(step, t, state, temperature_seed): @@ -996,18 +996,18 @@ def my_health_check(cv, dv): temperature = dv.temperature from mirgecom.simutil import check_naninf_local - if check_naninf_local(discr, "vol", pressure): + if check_naninf_local(dcoll, "vol", pressure): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - if check_naninf_local(discr, "vol", temperature): + if check_naninf_local(dcoll, "vol", temperature): health_error = True logger.info(f"{rank=}: Invalid temperature data found.") if inert_only == 0: # This check is the temperature convergence check temp_resid = compute_temperature_update(cv, temperature) / temperature - temp_err = (actx.to_numpy(op.nodal_max_loc(discr, "vol", temp_resid))) + temp_err = (actx.to_numpy(op.nodal_max_loc(dcoll, "vol", temp_resid))) if temp_err > 1e-8: health_error = True logger.info(f"{rank=}: Temperature is not converged {temp_resid=}.") @@ -1047,7 +1047,7 @@ def my_pre_step(step, t, dt, state): if any([do_viz, do_restart, do_health, do_status, constant_cfl]): fluid_state = force_evaluation(actx, fluid_state) - dt = get_sim_timestep(discr, fluid_state, t=t, dt=dt, + dt = get_sim_timestep(dcoll, fluid_state, t=t, dt=dt, cfl=current_cfl, t_final=t_final, constant_cfl=constant_cfl) @@ -1115,27 +1115,27 @@ def cfd_rhs(t, state): from mirgecom.gas_model import make_fluid_state fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) - fluid_operator_states = make_operator_fluid_states(discr, fluid_state, + fluid_operator_states = make_operator_fluid_states(dcoll, fluid_state, gas_model, boundaries, quadrature_tag) if inviscid_only: fluid_rhs = \ euler_operator( - discr, state=fluid_state, time=t, + dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, quadrature_tag=quadrature_tag, operator_states_quad=fluid_operator_states) else: - grad_cv = grad_cv_operator(discr, gas_model, boundaries, fluid_state, + grad_cv = grad_cv_operator(dcoll, gas_model, boundaries, fluid_state, time=t, numerical_flux_func=num_flux_central, quadrature_tag=quadrature_tag, operator_states_quad=fluid_operator_states) fluid_rhs = \ ns_operator( - discr, state=fluid_state, time=t, boundaries=boundaries, + dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov) @@ -1146,10 +1146,10 @@ def cfd_rhs(t, state): if av_on: alpha_f = compute_av_alpha_field(fluid_state) - indicator = smoothness_indicator(discr, fluid_state.mass_density, + indicator = smoothness_indicator(dcoll, fluid_state.mass_density, kappa=kappa_sc, s0=s0_sc) av_rhs = av_laplacian_operator( - discr, fluid_state=fluid_state, boundaries=boundaries, time=t, + dcoll, fluid_state=fluid_state, boundaries=boundaries, time=t, gas_model=gas_model, grad_cv=grad_cv, operator_states_quad=fluid_operator_states, alpha=alpha_f, s0=s0_sc, kappa=kappa_sc, @@ -1176,7 +1176,7 @@ def dummy_rhs(t, state): else: my_rhs = cfd_rhs - current_dt = get_sim_timestep(discr, current_fluid_state, current_t, current_dt, + current_dt = get_sim_timestep(dcoll, current_fluid_state, current_t, current_dt, current_cfl, t_final, constant_cfl) current_state = make_obj_array([current_cv, temperature_seed]) @@ -1201,7 +1201,7 @@ def dummy_rhs(t, state): final_fluid_state = force_evaluation(actx, final_fluid_state) final_dv = final_fluid_state.dv - dt = get_sim_timestep(discr, final_fluid_state, current_t, current_dt, + dt = get_sim_timestep(dcoll, final_fluid_state, current_t, current_dt, current_cfl, t_final, constant_cfl) my_write_viz(step=current_step, t=current_t, cv=final_cv, dv=final_dv) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index fa0d6e0ea..ac6d0902a 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -151,21 +151,21 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - discr = EagerDGDiscretization( + dcoll = EagerDGDiscretization( actx, local_mesh, order=order, mpi_communicator=comm ) - nodes = actx.thaw(discr.nodes()) + nodes = actx.thaw(dcoll.nodes()) def vol_min(x): from grudge.op import nodal_min - return actx.to_numpy(nodal_min(discr, "vol", x))[()] + return actx.to_numpy(nodal_min(dcoll, "vol", x))[()] def vol_max(x): from grudge.op import nodal_max - return actx.to_numpy(nodal_max(discr, "vol", x))[()] + return actx.to_numpy(nodal_max(dcoll, "vol", x))[()] from grudge.dt_utils import characteristic_lengthscales - dx = characteristic_lengthscales(actx, discr) + dx = characteristic_lengthscales(actx, dcoll) dx_min, dx_max = vol_min(dx), vol_max(dx) print(f"DX: ({dx_min}, {dx_max})") @@ -174,7 +174,7 @@ def vol_max(x): if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, discr, dim, + logmgr_add_many_discretization_quantities(logmgr, dcoll, dim, extract_vars_for_logging, units_for_logging) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") @@ -222,9 +222,9 @@ def vol_max(x): spec_diffusivities=spec_diffusivities, wave_vector=wave_vector) - def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): + def boundary_solution(dcoll, btag, gas_model, state_minus, **kwargs): actx = state_minus.array_context - bnd_discr = discr.discr_from_dd(btag) + bnd_discr = dcoll.discr_from_dd(btag) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model) @@ -252,7 +252,7 @@ def boundary_solution(discr, btag, gas_model, state_minus, **kwargs): print(f"Mach: {mach}") print(f"Cell Peclet: ({pe_min, pe_max})") - visualizer = make_visualizer(discr) + visualizer = make_visualizer(dcoll) initname = initializer.__class__.__name__ eosname = eos.__class__.__name__ init_message = make_init_message(dim=dim, order=order, @@ -278,7 +278,7 @@ def my_write_viz(step, t, cv, dv, exact): ("exact", exact), ("resid", resid)] from mirgecom.simutil import write_visfile - write_visfile(discr, viz_fields, visualizer, vizname=casename, + write_visfile(dcoll, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True, vis_timer=vis_timer) def my_write_restart(step, t, cv): @@ -299,8 +299,8 @@ def my_write_restart(step, t, cv): def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(discr, "vol", pressure) \ - or check_range_local(discr, "vol", pressure, .99999999, 1.00000001): + if check_naninf_local(dcoll, "vol", pressure) \ + or check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") @@ -332,7 +332,7 @@ def my_pre_step(step, t, dt, state): exact = initializer(x_vec=nodes, eos=eos, time=t) if do_health or do_status: - component_errors = compare_fluid_solutions(discr, cv, exact) + component_errors = compare_fluid_solutions(dcoll, cv, exact) if do_health: health_errors = global_reduce( @@ -356,7 +356,7 @@ def my_pre_step(step, t, dt, state): logger.info("Errors detected; attempting graceful exit.") raise - dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, + dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, t_final, constant_cfl) return state, dt @@ -371,10 +371,10 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return ns_operator(discr, state=fluid_state, time=t, + return ns_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model) - current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ From 8875865019b5c6fda9cc8db726e2d0b83b6b3a5b Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 24 Aug 2022 14:56:32 -0500 Subject: [PATCH 704/873] rename a few more --- test/test_eos.py | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/test/test_eos.py b/test/test_eos.py index 0ac0602e9..f3ac68ccb 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -98,8 +98,8 @@ def do_not_test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): logger.info(f"Number of elements {mesh.nelements}") - discr_eager = create_discretization_collection(actx_eager, mesh, order=order) - discr_lazy = create_discretization_collection(actx_lazy, mesh, order=order) + dcoll_eager = create_discretization_collection(actx_eager, mesh, order=order) + dcoll_lazy = create_discretization_collection(actx_lazy, mesh, order=order) # Pyrometheus initialization mech_input = get_mechanism_input(mechname) @@ -144,12 +144,12 @@ def get_temperature_lazy(energy, y, tguess): can_r = cantera_soln.net_rates_of_progress can_omega = cantera_soln.net_production_rates - ones_lazy = discr_lazy.zeros(actx_lazy) + 1.0 + ones_lazy = dcoll_lazy.zeros(actx_lazy) + 1.0 tin_lazy = can_t * ones_lazy pin_lazy = can_p * ones_lazy yin_lazy = make_obj_array([can_y[i] * ones_lazy for i in range(nspecies)]) - ones_eager = discr_eager.zeros(actx_eager) + 1.0 + ones_eager = dcoll_eager.zeros(actx_eager) + 1.0 tin_eager = can_t * ones_eager pin_eager = can_p * ones_eager yin_eager = make_obj_array([can_y[i] * ones_eager for i in range(nspecies)]) @@ -229,28 +229,28 @@ def get_temperature_lazy(energy, y, tguess): print(f"{omega_lazy=}") tol = 1e-10 - assert discr_eager.norm((pyro_c_eager - c_lazy), np.inf) < tol - assert discr_eager.norm((pyro_t_eager - t_lazy), np.inf) < tol - assert discr_eager.norm((pyro_rho_eager - rho_lazy), np.inf) < tol - assert discr_eager.norm((pyro_p_eager - p_lazy), np.inf) < 1e-9 - assert discr_eager.norm((pyro_e_eager - e_lazy), np.inf) < 1e-5 - assert discr_eager.norm((pyro_k_eager - k_lazy), np.inf) < 1e-5 - - assert discr_eager.norm((pyro_c_eager - can_c) / can_c, np.inf) < 1e-14 - assert discr_eager.norm((pyro_t_eager - can_t) / can_t, np.inf) < 1e-14 - assert discr_eager.norm((pyro_rho_eager - can_rho) / can_rho, np.inf) < 1e-14 - assert discr_eager.norm((pyro_p_eager - can_p) / can_p, np.inf) < 1e-14 - assert discr_eager.norm((pyro_e_eager - can_e) / can_e, np.inf) < 1e-6 - assert discr_eager.norm((pyro_k_eager - can_k) / can_k, np.inf) < 1e-10 + assert dcoll_eager.norm((pyro_c_eager - c_lazy), np.inf) < tol + assert dcoll_eager.norm((pyro_t_eager - t_lazy), np.inf) < tol + assert dcoll_eager.norm((pyro_rho_eager - rho_lazy), np.inf) < tol + assert dcoll_eager.norm((pyro_p_eager - p_lazy), np.inf) < 1e-9 + assert dcoll_eager.norm((pyro_e_eager - e_lazy), np.inf) < 1e-5 + assert dcoll_eager.norm((pyro_k_eager - k_lazy), np.inf) < 1e-5 + + assert dcoll_eager.norm((pyro_c_eager - can_c) / can_c, np.inf) < 1e-14 + assert dcoll_eager.norm((pyro_t_eager - can_t) / can_t, np.inf) < 1e-14 + assert dcoll_eager.norm((pyro_rho_eager - can_rho) / can_rho, np.inf) < 1e-14 + assert dcoll_eager.norm((pyro_p_eager - can_p) / can_p, np.inf) < 1e-14 + assert dcoll_eager.norm((pyro_e_eager - can_e) / can_e, np.inf) < 1e-6 + assert dcoll_eager.norm((pyro_k_eager - can_k) / can_k, np.inf) < 1e-10 # Pyro chem test comparisons for i, rate in enumerate(can_r): - assert discr_eager.norm((pyro_r_eager[i] - r_lazy[i]), np.inf) < tol - assert discr_eager.norm((pyro_r_eager[i] - rate), np.inf) < rate_tol + assert dcoll_eager.norm((pyro_r_eager[i] - r_lazy[i]), np.inf) < tol + assert dcoll_eager.norm((pyro_r_eager[i] - rate), np.inf) < rate_tol for i, rate in enumerate(can_omega): - assert discr_eager.norm( + assert dcoll_eager.norm( (pyro_omega_eager[i] - omega_lazy[i]), np.inf) < tol - assert discr_eager.norm((pyro_omega_eager[i] - rate), np.inf) < rate_tol + assert dcoll_eager.norm((pyro_omega_eager[i] - rate), np.inf) < rate_tol @pytest.mark.parametrize(("mechname", "rate_tol"), From bf256ece155caee71216b55952c4b1672bbf7c1a Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 8 Sep 2022 10:49:19 -0500 Subject: [PATCH 705/873] use automethod to inherit docstrings from base class instead of adding them explicitly --- mirgecom/diffusion.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index d6eea2e63..9d926335e 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -126,6 +126,8 @@ class DirichletDiffusionBoundary(DiffusionBoundary): to compute boundary fluxes as shown in [Hesthaven_2008]_, Section 7.1. .. automethod:: __init__ + .. automethod:: get_grad_flux + .. automethod:: get_diffusion_flux """ def __init__(self, value): @@ -141,7 +143,6 @@ def __init__(self, value): def get_grad_flux( self, dcoll, dd, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 - """Get gradient flux.""" u_int = op.project(dcoll, "vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=2*self.value-u_int) return grad_flux(dcoll, u_tpair, quadrature_tag=quadrature_tag) @@ -149,7 +150,6 @@ def get_grad_flux( def get_diffusion_flux( self, dcoll, dd, kappa, grad_u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 - """Get diffusion flux.""" kappa_int = op.project(dcoll, "vol", dd, kappa) kappa_tpair = TracePair(dd, interior=kappa_int, exterior=kappa_int) grad_u_int = op.project(dcoll, "vol", dd, grad_u) @@ -181,6 +181,8 @@ class NeumannDiffusionBoundary(DiffusionBoundary): when computing the boundary fluxes for $\nabla \cdot (\kappa \nabla u)$. .. automethod:: __init__ + .. automethod:: get_grad_flux + .. automethod:: get_diffusion_flux """ def __init__(self, value): @@ -196,7 +198,6 @@ def __init__(self, value): def get_grad_flux( self, dcoll, dd, u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 - """Get gradient flux.""" u_int = op.project(dcoll, "vol", dd, u) u_tpair = TracePair(dd, interior=u_int, exterior=u_int) return grad_flux(dcoll, u_tpair, quadrature_tag=quadrature_tag) @@ -204,7 +205,6 @@ def get_grad_flux( def get_diffusion_flux( self, dcoll, dd, kappa, grad_u, *, quadrature_tag=DISCR_TAG_BASE): # noqa: D102 - """Get diffusion flux.""" dd_quad = dd.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_quad.with_dtag("all_faces") # Compute the flux directly instead of constructing an external grad_u value From 98b93671eccc1a9ef8177940a16e06ed15c9204c Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Fri, 16 Sep 2022 11:10:23 -0700 Subject: [PATCH 706/873] Add better transitions, lassen support, parallel lazy tests, to examples runner. Run lazy autoignition. --- examples/autoignition-mpi-lazy.py | 1 + examples/run_examples.sh | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) create mode 120000 examples/autoignition-mpi-lazy.py diff --git a/examples/autoignition-mpi-lazy.py b/examples/autoignition-mpi-lazy.py new file mode 120000 index 000000000..aa50542f7 --- /dev/null +++ b/examples/autoignition-mpi-lazy.py @@ -0,0 +1 @@ +autoignition-mpi.py \ No newline at end of file diff --git a/examples/run_examples.sh b/examples/run_examples.sh index c56ef5898..97f75ea9f 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -9,33 +9,49 @@ origin=$(pwd) examples_dir=${1-$origin} declare -i numfail=0 declare -i numsuccess=0 +date echo "*** Running examples in $examples_dir ..." failed_examples="" succeeded_examples="" - +mpi_exec="mpiexec" +mpi_launcher="" if [[ $(hostname) == "porter" ]]; then mpi_launcher="bash $examples_dir/scripts/run_gpus_generic.sh" -else - mpi_launcher="" +elif [[ $(hostname) == "lassen"* ]]; then + export PYOPENCL_CTX="port:tesla" + export XDG_CACHE_HOME="/tmp/$USER/xdg-scratch" + mpi_exec="jsrun -g 1 -a 1" fi for example in $examples_dir/*.py do + date + printf "***\n***\n" if [[ "$example" == *"-mpi-lazy.py" ]] then echo "*** Running parallel lazy example (1 rank): $example" - mpiexec -n 1 python -m mpi4py ${example} --lazy + set -x + ${mpi_exec} -n 2 python -u -O -m mpi4py ${example} --lazy + set +x elif [[ "$example" == *"-mpi.py" ]]; then echo "*** Running parallel example (2 ranks): $example" - mpiexec -n 2 $mpi_launcher python -m mpi4py ${example} + set -x + ${mpi_exec} -n 2 $mpi_launcher python -u -O -m mpi4py ${example} + set +x elif [[ "$example" == *"-lazy.py" ]]; then echo "*** Running serial lazy example: $example" - python ${example} --lazy + set -x + python -u -O ${example} --lazy + set +x else echo "*** Running serial example: $example" - python ${example} + set -x + python -u -O ${example} + set +x fi + date + printf "***\n" if [[ $? -eq 0 ]] then ((numsuccess=numsuccess+1)) From 48c84df807884524fc11f7c9e9266cda591e2a75 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 19 Sep 2022 22:34:04 -0500 Subject: [PATCH 707/873] doublemach_physical_av: lazy fixes --- examples/doublemach_physical_av-mpi.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/examples/doublemach_physical_av-mpi.py b/examples/doublemach_physical_av-mpi.py index 59cea649b..4ab6d8933 100644 --- a/examples/doublemach_physical_av-mpi.py +++ b/examples/doublemach_physical_av-mpi.py @@ -550,17 +550,15 @@ def my_pre_step(step, t, dt, state): smoothness=no_smoothness) # recompute the dv to have the correct smoothness - # this is forcing a recompile, only do it at dump time - # not sure why the compiled version of grad_cv doesn't work if do_viz: # use the divergence to compute the smoothness field force_evaluation(actx, t) - grad_cv = grad_cv_operator( - dcoll, gas_model, boundaries, fluid_state, - time=t, quadrature_tag=quadrature_tag) - # grad_cv = grad_cv_operator_compiled(fluid_state, - # time=t) - smoothness = compute_smoothness(state, grad_cv) + # grad_cv = grad_cv_operator( + # dcoll, gas_model, boundaries, fluid_state, + # time=t, quadrature_tag=quadrature_tag) + grad_cv = grad_cv_operator_compiled(fluid_state, + t) + smoothness = compute_smoothness_compiled(state, grad_cv) # this works, but seems a lot of work, # not sure if it's really faster @@ -716,10 +714,10 @@ def _my_rhs_phys_visc_div_av(t, state): smoothness=no_smoothness) # use the divergence to compute the smoothness field - current_grad_cv = grad_cv_operator( - dcoll, gas_model, boundaries, current_state, time=current_t, - quadrature_tag=quadrature_tag) - # smoothness = compute_smoothness_compiled(current_cv, grad_cv) + # current_grad_cv = grad_cv_operator( + # dcoll, gas_model, boundaries, current_state, time=current_t, + # quadrature_tag=quadrature_tag) + current_grad_cv = grad_cv_operator_compiled(current_state, current_t) smoothness = compute_smoothness(current_cv, current_grad_cv) from dataclasses import replace From 96e9dd254e9ce93a8d22038102379a0130744a83 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 20 Sep 2022 07:42:45 -0500 Subject: [PATCH 708/873] Test getting app return code. --- examples/run_examples.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/run_examples.sh b/examples/run_examples.sh index 0f20216eb..6582838bf 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -33,26 +33,30 @@ do echo "*** Running parallel lazy example (2 ranks): $example" set -x ${mpi_exec} -n 2 python -u -O -m mpi4py ${example} --lazy + example_return_code=$? set +x elif [[ "$example" == *"-mpi.py" ]]; then echo "*** Running parallel example (2 ranks): $example" set -x ${mpi_exec} -n 2 $mpi_launcher python -u -O -m mpi4py ${example} + example_return_code=$? set +x elif [[ "$example" == *"-lazy.py" ]]; then echo "*** Running serial lazy example: $example" set -x python -u -O ${example} --lazy + example_return_code=$? set +x else echo "*** Running serial example: $example" set -x python -u -O ${example} + example_return_code=$? set +x fi date printf "***\n" - if [[ $? -eq 0 ]] + if [[ $example_return_code -eq 0 ]] then ((numsuccess=numsuccess+1)) echo "*** Example $example succeeded." From 1ab75dc92cf42fed34bb39d3299e1e81a1369bb7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 21 Sep 2022 09:35:54 -0500 Subject: [PATCH 709/873] use compiled function for ns viz --- examples/nsmix-mpi.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 616f91c63..03ddc71bf 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -283,8 +283,16 @@ def _get_fluid_state(cv, temp_seed): return make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=temp_seed) + def _ns_operator_for_viz(fluid_state, time): + ns_rhs, grad_cv, grad_t = \ + ns_operator(dcoll, state=fluid_state, time=time, + boundaries=visc_bnds, gas_model=gas_model, + return_gradients=True, quadrature_tag=quadrature_tag) + return make_obj_array([ns_rhs, grad_cv, grad_t]) + get_temperature_update = actx.compile(_get_temperature_update) get_fluid_state = actx.compile(_get_fluid_state) + get_ns_rhs_and_grads = actx.compile(_ns_operator_for_viz) tseed = can_t if rst_filename: @@ -475,11 +483,13 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=cv, tseed=tseed) if do_viz: + viz_stuff = \ + get_ns_rhs_and_grads(fluid_state, t) + ns_rhs = viz_stuff[0] + grad_cv = viz_stuff[1] + grad_t = viz_stuff[2] + from mirgecom.fluid import velocity_gradient - ns_rhs, grad_cv, grad_t = \ - ns_operator(dcoll, state=fluid_state, time=t, - boundaries=visc_bnds, gas_model=gas_model, - return_gradients=True, quadrature_tag=quadrature_tag) grad_v = velocity_gradient(cv, grad_cv) chem_rhs = \ pyro_eos.get_species_source_terms(cv, From f108f604bdb1e833680c073f660c07d192911019 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 22 Sep 2022 17:40:23 -0500 Subject: [PATCH 710/873] get_reasonable_memory_pool: also show device in 3rd case --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index e2e3943f5..fe9eacecb 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -458,7 +458,7 @@ def get_reasonable_memory_pool(ctx, queue): "your PoCL installation.") else: warn("No SVM memory pool support with your version of PyOpenCL, " - "returning a CL buffer-based memory pool. " + f"returning a CL buffer-based memory pool on {queue.device}. " "Please update your PyOpenCL version.") return cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) From 0f2a0f0c71de4ed26c50e1a2e7fd4b947e27495c Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Thu, 22 Sep 2022 17:48:29 -0700 Subject: [PATCH 711/873] Use YAML for get wrapper by mechname. --- mirgecom/thermochemistry.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index d23544da1..3ccd37058 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -138,10 +138,10 @@ def get_pyrometheus_wrapper_class_from_cantera(cantera_soln, temperature_niter=5 def get_thermochemistry_class_by_mechanism_name(mechanism_name: str, temperature_niter=5): """Grab a pyrometheus mechanism class from the mech name.""" - from mirgecom.mechanisms import get_mechanism_cti - mech_input_source = get_mechanism_cti(mechanism_name) + from mirgecom.mechanisms import get_mechanism_input + mech_input_source = get_mechanism_input(mechanism_name) from cantera import Solution - cantera_soln = Solution(phase_id="gas", source=mech_input_source) + cantera_soln = Solution(name="gas", yaml=mech_input_source) return \ get_pyrometheus_wrapper_class_from_cantera(cantera_soln, temperature_niter) From 72a20fe08756837a98078efcd5248c9fb5924ea8 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Thu, 22 Sep 2022 17:50:28 -0700 Subject: [PATCH 712/873] Update combozzle defaults. --- examples/combozzle-mpi.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 5e915c8a1..11e1e0e9c 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -191,10 +191,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, z_scale = 1 # - params for unscaled npts/axis - domain_xlen = 1. - domain_ylen = 1. - domain_zlen = 1. - chlen = .25 # default to 4 elements/axis = x_len/chlen + domain_xlen = .01 + domain_ylen = .01 + domain_zlen = .01 + chlen = .0025 # default to 4 elements/axis = x_len/chlen # }}} discretization params @@ -206,9 +206,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # Time loop control parameters current_step = 0 - t_final = 2e-8 + t_final = 2e-12 current_cfl = 0.05 - current_dt = 1e-9 + current_dt = 1e-13 current_t = 0 constant_cfl = False integrator = "euler" @@ -220,7 +220,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nrestart = 1000 do_checkpoint = 0 boundary_report = 0 - do_callbacks = 1 + do_callbacks = 0 # }}} Time stepping control @@ -723,10 +723,9 @@ def vol_max(x): # -- Pick up a CTI for the thermochemistry config # --- Note: Users may add their own CTI file by dropping it into # --- mirgecom/mechanisms alongside the other CTI files. - from mirgecom.mechanisms import get_mechanism_cti - mech_cti = get_mechanism_cti("uiuc") - - cantera_soln = cantera.Solution(phase_id="gas", source=mech_cti) + from mirgecom.mechanisms import get_mechanism_input + mech_input = get_mechanism_input("uiuc") + cantera_soln = cantera.Solution(name="gas", yaml=mech_input) nspecies = cantera_soln.n_species # Initial temperature, pressure, and mixutre mole fractions are needed From 7b647c859e7b69767b70b59c77948797d419de7d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 23 Sep 2022 06:20:09 -0500 Subject: [PATCH 713/873] bring back lazy mixture. --- examples/mixture-mpi-lazy.py | 1 + 1 file changed, 1 insertion(+) create mode 120000 examples/mixture-mpi-lazy.py diff --git a/examples/mixture-mpi-lazy.py b/examples/mixture-mpi-lazy.py new file mode 120000 index 000000000..ba2a10b20 --- /dev/null +++ b/examples/mixture-mpi-lazy.py @@ -0,0 +1 @@ +mixture-mpi.py \ No newline at end of file From a080a74759bfdf2fb1bde48681e1bf23f2a6fa87 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 23 Sep 2022 07:09:13 -0500 Subject: [PATCH 714/873] Reset local dt example to up-to-date version. --- examples/poiseuille-local_dt-mpi-lazy.py | 517 +---------------------- examples/poiseuille-local_dt-mpi.py | 10 +- 2 files changed, 6 insertions(+), 521 deletions(-) mode change 100644 => 120000 examples/poiseuille-local_dt-mpi-lazy.py diff --git a/examples/poiseuille-local_dt-mpi-lazy.py b/examples/poiseuille-local_dt-mpi-lazy.py deleted file mode 100644 index a9a275631..000000000 --- a/examples/poiseuille-local_dt-mpi-lazy.py +++ /dev/null @@ -1,516 +0,0 @@ -"""Demonstrate a planar Poiseuille flow example.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" -import logging -import numpy as np -import pyopencl as cl -from pytools.obj_array import make_obj_array -from functools import partial - -from arraycontext import thaw -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa - -from grudge.eager import EagerDGDiscretization -from grudge.shortcuts import make_visualizer -from grudge.dof_desc import BoundaryDomainTag - -from mirgecom.fluid import make_conserved -from mirgecom.navierstokes import ns_operator -from mirgecom.simutil import get_sim_timestep -from mirgecom.utils import force_evaluation - -from mirgecom.io import make_init_message -from mirgecom.mpi import mpi_entry_point -from mirgecom.integrators import rk4_step -from mirgecom.steppers import advance_state -from mirgecom.boundary import ( - PrescribedFluidBoundary, - AdiabaticNoslipMovingBoundary -) -from mirgecom.transport import SimpleTransport -from mirgecom.eos import IdealSingleGas -from mirgecom.gas_model import GasModel, make_fluid_state -from logpyle import IntervalTimer, set_dt -from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.logging_quantities import ( - initialize_logmgr, - logmgr_add_many_discretization_quantities, - logmgr_add_device_name, - logmgr_add_device_memory_usage -) - - -logger = logging.getLogger(__name__) - - -class MyRuntimeError(RuntimeError): - """Simple exception to kill the simulation.""" - - pass - - -@mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, lazy=False, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None): - """Drive the example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - - cl_ctx = ctx_factory() - - if casename is None: - casename = "mirgecom" - - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nparts = comm.Get_size() - - from mirgecom.simutil import global_reduce as _global_reduce - global_reduce = partial(_global_reduce, comm=comm) - - logmgr = initialize_logmgr(use_logmgr, - filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) - - if use_profiling: - queue = cl.CommandQueue( - cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - else: - queue = cl.CommandQueue(cl_ctx) - - from mirgecom.simutil import get_reasonable_memory_pool - alloc = get_reasonable_memory_pool(cl_ctx, queue) - - if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) - else: - actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) - - # timestepping control - timestepper = rk4_step - t_final = 1e-7 - current_cfl = 0.05 - current_dt = 1e-10 - current_t = 0 - constant_cfl = True - local_dt = True # XXX declaration necessary for local time stepping. - current_step = 0 - - # some i/o frequencies - nstatus = 1 - nviz = 1 - nrestart = 100 - nhealth = 1 - - # some geometry setup - dim = 2 - if dim != 2: - raise ValueError("This example must be run with dim = 2.") - left_boundary_location = 0 - right_boundary_location = 0.1 - ybottom = 0. - ytop = .02 - rst_path = "restart_data/" - rst_pattern = ( - rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" - ) - if rst_filename: # read the grid from restart data - rst_filename = f"{rst_filename}-{rank:04d}.pkl" - - from mirgecom.restart import read_restart_data - restart_data = read_restart_data(actx, rst_filename) - local_mesh = restart_data["local_mesh"] - local_nelements = local_mesh.nelements - global_nelements = restart_data["global_nelements"] - assert restart_data["nparts"] == nparts - else: # generate the grid from scratch - n_refine = 5 - npts_x = 10 * n_refine - npts_y = 6 * n_refine - - # create a stretched grid to force different grid cell size - xx = np.linspace(left_boundary_location, right_boundary_location, npts_x + 1) - yy = np.sqrt(np.linspace(0.0, 1.0, npts_y + 1))*(ytop - ybottom) - coords = tuple((xx, yy)) - - from meshmode.mesh.generation import generate_box_mesh - generate_mesh = partial(generate_box_mesh, - axis_coords=coords, - boundary_tag_to_face={ - "-1": ["-x"], - "+1": ["+x"], - "-2": ["-y"], - "+2": ["+y"]}) - - from mirgecom.simutil import generate_and_distribute_mesh - local_mesh, global_nelements = ( - generate_and_distribute_mesh(comm, generate_mesh)) - local_nelements = local_mesh.nelements - - from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD - from meshmode.discretization.poly_element import \ - default_simplex_group_factory, QuadratureSimplexGroupFactory - - order = 2 - dcoll = EagerDGDiscretization( - actx, local_mesh, - discr_tag_to_group_factory={ - DISCR_TAG_BASE: default_simplex_group_factory( - base_dim=local_mesh.dim, order=order), - DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) - }, - mpi_communicator=comm - ) - nodes = thaw(dcoll.nodes(), actx) - - if use_overintegration: - quadrature_tag = DISCR_TAG_QUAD - else: - quadrature_tag = None - - if logmgr: - logmgr_add_device_name(logmgr, queue) - logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, dcoll, dim, - extract_vars_for_logging, units_for_logging) - - logmgr.add_watches([ - ("step.max", "step = {value}, "), - ("t_sim.max", "sim time: {value:1.6e} s\n"), - ("t_step.max", "------- step walltime: {value:6g} s, "), - ("t_log.max", "log walltime: {value:6g} s") - ]) - - vis_timer = IntervalTimer("t_vis", "Time spent visualizing") - logmgr.add_quantity(vis_timer) - - base_pressure = 100000.0 - pressure_ratio = 1.001 - mu = 1.0 - - def poiseuille_2d(x_vec, eos, cv=None, **kwargs): - y = x_vec[1] - x = x_vec[0] - x0 = left_boundary_location - xmax = right_boundary_location - xlen = xmax - x0 - p_low = base_pressure - p_hi = pressure_ratio*base_pressure - dp = p_hi - p_low - dpdx = dp/xlen - h = ytop - ybottom - u_x = dpdx*y*(h - y)/(2*mu) - p_x = p_hi - dpdx*x - rho = 1.0 - mass = 0*x + rho - u_y = 0*x - velocity = make_obj_array([u_x, u_y]) - ke = .5*np.dot(velocity, velocity)*mass - gamma = eos.gamma() - if cv is not None: - mass = cv.mass - vel = cv.velocity - ke = .5*np.dot(vel, vel)*mass - - rho_e = p_x/(gamma-1) + ke - return make_conserved(2, mass=mass, energy=rho_e, - momentum=mass*velocity) - - initializer = poiseuille_2d - gas_model = GasModel(eos=IdealSingleGas(), - transport=SimpleTransport(viscosity=mu)) - exact = initializer(x_vec=nodes, eos=gas_model.eos) - - def _boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): - actx = state_minus.array_context - bnd_discr = dcoll.discr_from_dd(dd_bdry) - nodes = thaw(bnd_discr.nodes(), actx) - return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, - cv=state_minus.cv, **kwargs), gas_model) - - boundaries = { - BoundaryDomainTag("-1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_solution), - BoundaryDomainTag("+1"): - PrescribedFluidBoundary(boundary_state_func=_boundary_solution), - BoundaryDomainTag("-2"): AdiabaticNoslipMovingBoundary(), - BoundaryDomainTag("+2"): AdiabaticNoslipMovingBoundary()} - - if rst_filename: - if local_dt: - current_t = restart_data["step"] - else: - current_t = restart_data["t"] - current_step = restart_data["step"] - current_cv = restart_data["cv"] - if logmgr: - from mirgecom.logging_quantities import logmgr_set_time - logmgr_set_time(logmgr, current_step, current_t) - else: - # Set the current state from time 0 - current_cv = exact - - current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) - - vis_timer = None - - visualizer = make_visualizer(dcoll, order) - - eosname = gas_model.eos.__class__.__name__ - init_message = make_init_message(dim=dim, order=order, - nelements=local_nelements, - global_nelements=global_nelements, - dt=current_dt, t_final=t_final, nstatus=nstatus, - nviz=nviz, cfl=current_cfl, - constant_cfl=constant_cfl, initname=casename, - eosname=eosname, casename=casename) - if rank == 0: - logger.info(init_message) - - def my_write_status(step, t, dt, state, component_errors): - dv = state.dv - from grudge.op import nodal_min, nodal_max - p_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.pressure)) - p_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.pressure)) - t_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.temperature)) - t_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.temperature)) - if rank == 0: - logger.info(f"----- Pressure({p_min}, {p_max})\n" - f"----- Temperature({t_min}, {t_max})\n" - "----- errors=" - + ", ".join("%.3g" % en for en in component_errors)) - - def my_write_viz(step, t, state, dv): - resid = state - exact - viz_fields = [("cv", state), - ("dv", dv), - ("poiseuille", exact), - ("resid", resid)] - - from mirgecom.simutil import write_visfile - write_visfile(dcoll, viz_fields, visualizer, vizname=casename, - step=step, t=t, overwrite=True) - - def my_write_restart(step, t, state): - rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) - if rst_fname != rst_filename: - rst_data = { - "local_mesh": local_mesh, - "cv": state, - "t": t, - "step": step, - "order": order, - "global_nelements": global_nelements, - "num_parts": nparts - } - from mirgecom.restart import write_restart_file - write_restart_file(actx, rst_data, rst_fname, comm) - - def my_health_check(state, dv, component_errors): - health_error = False - from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(dcoll, "vol", dv.pressure): - health_error = True - logger.info(f"{rank=}: NANs/Infs in pressure data.") - - if global_reduce(check_range_local(dcoll, "vol", dv.pressure, 9.999e4, - 1.00101e5), op="lor"): - health_error = True - from grudge.op import nodal_max, nodal_min - p_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.pressure)) - p_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.pressure)) - logger.info(f"Pressure range violation ({p_min=}, {p_max=})") - - if check_naninf_local(dcoll, "vol", dv.temperature): - health_error = True - logger.info(f"{rank=}: NANs/INFs in temperature data.") - - if global_reduce(check_range_local(dcoll, "vol", dv.temperature, 348, 350), - op="lor"): - health_error = True - from grudge.op import nodal_max, nodal_min - t_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.temperature)) - t_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.temperature)) - logger.info(f"Temperature range violation ({t_min=}, {t_max=})") - - exittol = .1 - if max(component_errors) > exittol: - health_error = True - if rank == 0: - logger.info("Solution diverged from exact soln.") - - return health_error - - def my_pre_step(step, t, dt, state): - fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - dv = fluid_state.dv - - if constant_cfl: - dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, - t_final, constant_cfl, local_dt) - if local_dt: - t = force_evaluation(actx, t) - dt = force_evaluation(actx, get_sim_timestep(dcoll, fluid_state, t, dt, - current_cfl, constant_cfl=constant_cfl, local_dt=local_dt)) - - try: - component_errors = None - - if logmgr: - logmgr.tick_before() - - from mirgecom.simutil import check_step - do_viz = check_step(step=step, interval=nviz) - do_restart = check_step(step=step, interval=nrestart) - do_health = check_step(step=step, interval=nhealth) - do_status = check_step(step=step, interval=nstatus) - - if do_health: - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(dcoll, state, exact) - health_errors = global_reduce( - my_health_check(state, dv, component_errors), op="lor") - if health_errors: - if rank == 0: - logger.info("Fluid solution failed health check.") - raise MyRuntimeError("Failed simulation health check.") - - if do_restart: - my_write_restart(step=step, t=t, state=state) - - if do_viz: - my_write_viz(step=step, t=t, state=state, dv=dv) - - if do_status: # needed because logging fails to make output - if component_errors is None: - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(dcoll, state, exact) - my_write_status(step=step, t=t, dt=dt, state=fluid_state, - component_errors=component_errors) - - except MyRuntimeError: - if rank == 0: - logger.info("Errors detected; attempting graceful exit.") - my_write_viz(step=step, t=t, state=state, dv=dv) - my_write_restart(step=step, t=t, state=state) - raise - - return state, dt - - def my_post_step(step, t, dt, state): - if logmgr: - if local_dt: - set_dt(logmgr, 1.0) - else: - set_dt(logmgr, dt) - logmgr.tick_after() - return state, dt - - def my_rhs(t, state): - fluid_state = make_fluid_state(state, gas_model) - return ns_operator(dcoll, gas_model=gas_model, boundaries=boundaries, - state=fluid_state, time=t, - quadrature_tag=quadrature_tag) - - current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, - current_cfl, constant_cfl=constant_cfl, local_dt=local_dt) - if local_dt: - current_dt = force_evaluation(actx, current_dt) - - current_t = current_t + current_dt*0.0 - current_t = force_evaluation(actx, current_t) - - current_step, current_t, current_cv = \ - advance_state(rhs=my_rhs, timestepper=timestepper, - pre_step_callback=my_pre_step, - post_step_callback=my_post_step, dt=current_dt, - state=current_state.cv, t=current_t, t_final=t_final, - max_steps=20, local_dt=local_dt, - istep=current_step) - - current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) - - # Dump the final data - if rank == 0: - logger.info("Checkpointing final state ...") - final_dv = current_state.dv - final_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, - current_cfl, constant_cfl=constant_cfl, local_dt=local_dt) - from mirgecom.simutil import compare_fluid_solutions - component_errors = compare_fluid_solutions(dcoll, current_state.cv, exact) - - my_write_viz(step=current_step, t=current_t, state=current_state.cv, dv=final_dv) - my_write_restart(step=current_step, t=current_t, state=current_state) - my_write_status(step=current_step, t=current_t, dt=final_dt, - state=current_state, component_errors=component_errors) - - if logmgr: - logmgr.close() - elif use_profiling: - print(actx.tabulate_profiling_data()) - - exit() - - -if __name__ == "__main__": - import argparse - casename = "poiseuille" - parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") - parser.add_argument("--overintegration", action="store_true", - help="use overintegration in the RHS computations") - parser.add_argument("--lazy", action="store_true", - help="switch to a lazy computation mode") - parser.add_argument("--profiling", action="store_true", - help="turn on detailed performance profiling") - parser.add_argument("--log", action="store_true", default=True, - help="turn on logging") - parser.add_argument("--leap", action="store_true", - help="use leap timestepper") - parser.add_argument("--restart_file", help="root name of restart file") - parser.add_argument("--casename", help="casename to use for i/o") - args = parser.parse_args() - lazy = args.lazy - - if args.profiling: - if lazy: - raise ValueError("Can't use lazy and profiling together.") - - from grudge.array_context import get_reasonable_array_context_class - actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) - - logging.basicConfig(format="%(message)s", level=logging.INFO) - if args.casename: - casename = args.casename - rst_filename = None - if args.restart_file: - rst_filename = args.restart_file - - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) - -# vim: foldmethod=marker diff --git a/examples/poiseuille-local_dt-mpi-lazy.py b/examples/poiseuille-local_dt-mpi-lazy.py new file mode 120000 index 000000000..a338b4708 --- /dev/null +++ b/examples/poiseuille-local_dt-mpi-lazy.py @@ -0,0 +1 @@ +poiseuille-local_dt-mpi.py \ No newline at end of file diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py index 402adb581..a9a275631 100644 --- a/examples/poiseuille-local_dt-mpi.py +++ b/examples/poiseuille-local_dt-mpi.py @@ -26,7 +26,6 @@ import logging import numpy as np import pyopencl as cl -import pyopencl.tools as cl_tools from pytools.obj_array import make_obj_array from functools import partial @@ -103,12 +102,13 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000) + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) else: - actx = actx_class(comm, queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)), - force_device_scalars=True) + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) # timestepping control timestepper = rk4_step From fec813a766a0d9548a59ee7289b9720f3094a679 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 27 Sep 2022 12:48:40 -0700 Subject: [PATCH 715/873] Give timestamps from the main driver. --- examples/combozzle-mpi.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 11e1e0e9c..955ab5911 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -702,6 +702,11 @@ def vol_max(x): ("t_log.max", "log walltime: {value:6g} s") ]) + try: + logmgr.add_watches(["memory_usage_python.max", "memory_usage_gpu.max"]) + except KeyError: + pass + if log_dependent: logmgr_add_many_discretization_quantities(logmgr, dcoll, dim, extract_vars_for_logging, From 70a05e0787e273c568e4c72d354363fcca18d115 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 28 Sep 2022 06:23:33 -0700 Subject: [PATCH 716/873] Add some timestamps to combozzle code sections --- examples/combozzle-mpi.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 955ab5911..381980d0c 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -24,6 +24,7 @@ THE SOFTWARE. """ import logging +import time import yaml import numpy as np import pyopencl as cl @@ -177,6 +178,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nproc = comm.Get_size() nparts = nproc + comm.Barrier() + if rank == 0: + print(f"Main start: {time.ctime(time.time())}") + comm.Barrier() + from mirgecom.simutil import global_reduce as _global_reduce global_reduce = partial(_global_reduce, comm=comm) @@ -589,6 +595,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, temperature_seed = init_temperature debug = False + comm.Barrier() + if rank == 0: + print(f"ACTX setup start: {time.ctime(time.time())}") + comm.Barrier() + if use_profiling: queue = cl.CommandQueue(cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) @@ -635,6 +646,11 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, nodes = actx.thaw(dcoll.nodes()) ones = dcoll.zeros(actx) + 1.0 + comm.Barrier() + if rank == 0: + print(f"ACTX Setup end -> Solution init start: {time.ctime(time.time())}") + comm.Barrier() + def _compiled_stepper_wrapper(state, t, dt, rhs): return compiled_lsrk45_step(actx, state, t, dt, rhs) @@ -1182,6 +1198,11 @@ def dummy_rhs(t, state): current_state = make_obj_array([current_cv, temperature_seed]) + comm.Barrier() + if rank == 0: + print(f"Stepping start time: {time.ctime(time.time())}") + comm.Barrier() + if timestepping_on: if rank == 0: print(f"Timestepping: {current_step=}, {current_t=}, {t_final=}," @@ -1193,8 +1214,11 @@ def dummy_rhs(t, state): state=current_state, t=current_t, t_final=t_final, force_eval=force_eval) + comm.Barrier() + # Dump the final data if rank == 0: + print(f"Stepping end time: {time.ctime(time.time())}") logger.info("Checkpointing final state ...") final_cv, tseed = force_evaluation(actx, current_state) @@ -1227,6 +1251,10 @@ def dummy_rhs(t, state): logger.info("Fluid solution failed health check.") raise MyRuntimeError("Failed simulation health check.") + if rank == 0: + print(f"Simulation end time: {time.ctime(time.time())}") + + comm.Barrier() if __name__ == "__main__": import argparse @@ -1275,6 +1303,8 @@ def dummy_rhs(t, state): else: print("No user input file, using default values") + print(f"Calling main: {time.ctime(time.time())}") + main(use_logmgr=args.log, use_leap=args.leap, input_file=input_file, use_overintegration=args.overintegration, use_profiling=args.profiling, lazy=lazy, From a2305d296756e743519cc50e7c10bc94903ae405 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 28 Sep 2022 08:52:50 -0500 Subject: [PATCH 717/873] Deflake8 --- examples/combozzle-mpi.py | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 381980d0c..0957d9465 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -1256,6 +1256,7 @@ def dummy_rhs(t, state): comm.Barrier() + if __name__ == "__main__": import argparse casename = "combozzle" From 47164482569b6a61413e70973da2043ded523fb2 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Thu, 29 Sep 2022 16:52:51 -0500 Subject: [PATCH 718/873] limiter multi-volume bug fix --- mirgecom/limiter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/limiter.py b/mirgecom/limiter.py index f3822f7c2..bc0089b63 100644 --- a/mirgecom/limiter.py +++ b/mirgecom/limiter.py @@ -90,7 +90,7 @@ def bound_preserving_limiter(dcoll: DiscretizationCollection, field, @memoize_in(dcoll, (bound_preserving_limiter, "cell_volume", dd)) def cell_volumes(dcoll): - return op.elementwise_integral(dcoll, dd, dcoll.zeros(actx) + 1.0) + return op.elementwise_integral(dcoll, dd, dcoll.zeros(actx, dd=dd) + 1.0) cell_size = cell_volumes(dcoll) From cd2804606c437f05470b46a27a0f115c293196d3 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 19 Oct 2022 20:57:43 -0700 Subject: [PATCH 719/873] add missing comm tag forwarding --- mirgecom/diffusion.py | 3 ++- mirgecom/navierstokes.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mirgecom/diffusion.py b/mirgecom/diffusion.py index 6726e85e7..7b87aa58d 100644 --- a/mirgecom/diffusion.py +++ b/mirgecom/diffusion.py @@ -382,7 +382,8 @@ def diffusion_operator( if grad_u is None: grad_u = grad_operator( - dcoll, boundaries, u, quadrature_tag=quadrature_tag, dd=dd_vol) + dcoll, boundaries, u, quadrature_tag=quadrature_tag, dd=dd_vol, + comm_tag=comm_tag) kappa_quad = op.project(dcoll, dd_vol, dd_vol_quad, kappa) grad_u_quad = op.project(dcoll, dd_vol, dd_vol_quad, grad_u) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 91a01259a..8a4257350 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -450,7 +450,7 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, dcoll, gas_model, boundaries, state, time=time, numerical_flux_func=gradient_numerical_flux_func, quadrature_tag=quadrature_tag, dd=dd_vol, - operator_states_quad=operator_states_quad) + operator_states_quad=operator_states_quad, comm_tag=comm_tag) # Communicate grad(CV) and put it on the quadrature domain grad_cv_interior_pairs = [ @@ -470,7 +470,7 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, dcoll, gas_model, boundaries, state, time=time, numerical_flux_func=gradient_numerical_flux_func, quadrature_tag=quadrature_tag, dd=dd_vol, - operator_states_quad=operator_states_quad) + operator_states_quad=operator_states_quad, comm_tag=comm_tag) # Create the interior face trace pairs, perform MPI exchange, interp to quad grad_t_interior_pairs = [ From 276772958411618943e8a39a9d23d7034d325367 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 27 Oct 2022 17:34:58 -0500 Subject: [PATCH 720/873] Update boundaries in multiphysics example and test to use MengaldoBCs --- examples/thermally-coupled-mpi.py | 4 ++-- test/test_multiphysics.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/thermally-coupled-mpi.py b/examples/thermally-coupled-mpi.py index 2fbb5fa1f..6d8901438 100644 --- a/examples/thermally-coupled-mpi.py +++ b/examples/thermally-coupled-mpi.py @@ -54,7 +54,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( - IsothermalNoSlipBoundary, + IsothermalWallBoundary ) from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport @@ -302,7 +302,7 @@ def smooth_step(actx, x, epsilon=1e-12): current_state = make_obj_array([current_cv, current_wall_temperature]) fluid_boundaries = { - dd_vol_fluid.trace("Upper Sides").domain_tag: IsothermalNoSlipBoundary( + dd_vol_fluid.trace("Upper Sides").domain_tag: IsothermalWallBoundary( wall_temperature=isothermal_wall_temp)} wall_boundaries = { dd_vol_wall.trace("Lower Sides").domain_tag: NeumannDiffusionBoundary(0)} diff --git a/test/test_multiphysics.py b/test/test_multiphysics.py index 1de8a9bba..c9e7b8483 100644 --- a/test/test_multiphysics.py +++ b/test/test_multiphysics.py @@ -47,8 +47,8 @@ make_fluid_state ) from mirgecom.boundary import ( - AdiabaticNoslipMovingBoundary, - IsothermalNoSlipBoundary, + AdiabaticNoslipWallBoundary, + IsothermalWallBoundary, ) from mirgecom.multiphysics.thermally_coupled_fluid_wall import ( coupled_ns_heat_operator @@ -235,10 +235,10 @@ def test_thermally_coupled_fluid_wall( base_wall_temp = 600 fluid_boundaries = { - dd_vol_fluid.trace("-0").domain_tag: AdiabaticNoslipMovingBoundary(), - dd_vol_fluid.trace("+0").domain_tag: AdiabaticNoslipMovingBoundary(), + dd_vol_fluid.trace("-0").domain_tag: AdiabaticNoslipWallBoundary(), + dd_vol_fluid.trace("+0").domain_tag: AdiabaticNoslipWallBoundary(), dd_vol_fluid.trace("+1").domain_tag: - IsothermalNoSlipBoundary(wall_temperature=base_fluid_temp), + IsothermalWallBoundary(wall_temperature=base_fluid_temp), } wall_boundaries = { From d19bcdd7243290877df6b2d1145a709243384382 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 Oct 2022 09:32:28 -0500 Subject: [PATCH 721/873] Replace nozzle production test with prediction test. --- .ci-support/production-drivers-install.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh index dbc2a5ec6..3801fe4f4 100755 --- a/.ci-support/production-drivers-install.sh +++ b/.ci-support/production-drivers-install.sh @@ -12,7 +12,7 @@ # The default values result in an install of the Y1 nozzle driver and # Wyatt Hagen's isolator driver that work with current MIRGE-Com # production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y1-nozzle@main:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y2-prediction@main:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} # Loop over the production drivers, clone them, and prepare for execution set -x OIFS="$IFS" @@ -24,7 +24,11 @@ do PRODUCTION_DRIVER_DIR="production_driver_$PRODUCTION_DRIVER_NAME" git clone -b "$PRODUCTION_DRIVER_BRANCH" https\://github.com/"$PRODUCTION_DRIVER_REPO" "$PRODUCTION_DRIVER_DIR" cd "$PRODUCTION_DRIVER_DIR"/smoke_test - ln -s *.py driver.py # name the driver generically + if [ -f prediction.py ]; then + ln -s prediction.py driver.py + else + ln -s *.py driver.py # name the driver generically + fi cd ../.. done IFS="$OIFS" From 33c08d246f03889481326d40d923c5d91a1ee4d3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 Oct 2022 09:56:17 -0500 Subject: [PATCH 722/873] Add 1d partitioner --- mirgecom/simutil.py | 317 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 315 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index da38660a1..cb87297ca 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -23,6 +23,7 @@ -------------- .. autofunction:: distribute_mesh +.. autofunction:: geometric_mesh_partitioner Simulation support utilities ---------------------------- @@ -432,7 +433,319 @@ def max_component_norm(dcoll, fields, order=np.inf, *, dd=DD_VOLUME_ALL): componentwise_norms(dcoll, fields, order, dd=dd), actx))) -def generate_and_distribute_mesh(comm, generate_mesh): +def geometric_mesh_partitioner(mesh, num_ranks=1, *, tag_to_elements=None, + nranks_per_axis=None, auto_balance=False, + imbalance_tolerance=.01, debug=False): + """Partition a mesh uniformly along the X coordinate axis. + + The intent is to partition the mesh uniformly along user-specified + directions. In this current interation, the capability is demonstrated + by splitting along the X axis. + + Parameters + ---------- + mesh: :class:`meshmode.mesh.Mesh` + The serial mesh to partition + num_ranks: int + The number of partitions to make + tag_to_elements: + Maps volume tags to elements. Currently unused. + nranks_per_axis: numpy.ndarray + How many partitions per specified axis. Currently unused. + auto_balance: bool + Indicates whether to perform automatic balancing. If true, the + partitioner will try to balance the number of elements over + the partitions. + imbalance_tolerance: float + If *auto_balance* is True, this parameter indicates the acceptable + relative difference to the average number of elements per partition. + It defaults to balance within 1%. + debug: boolean + En/disable debugging/diagnostic print reporting. + + Returns + ------- + elem_to_rank: numpy.ndarray + Array indicating the MPI rank for each element + """ + mesh_dimension = mesh.dim + if nranks_per_axis is None: + nranks_per_axis = np.ones(mesh_dimension) + nranks_per_axis[0] = num_ranks + if len(nranks_per_axis) != mesh_dimension: + raise ValueError("nranks_per_axis must match mesh dimension.") + nranks_test = 1 + for i in range(mesh_dimension): + nranks_test = nranks_test * nranks_per_axis[i] + if nranks_test != num_ranks: + raise ValueError("nranks_per_axis must match num_ranks.") + + mesh_groups, = mesh.groups + mesh_verts = mesh.vertices + mesh_x = mesh_verts[0] + + x_min = np.min(mesh_x) + x_max = np.max(mesh_x) + x_interval = x_max - x_min + part_loc = np.linspace(x_min, x_max, num_ranks+1) + + part_interval = x_interval / nranks_per_axis[0] + elem_x = mesh_verts[0, mesh_groups.vertex_indices] + elem_centroids = np.sum(elem_x, axis=1)/elem_x.shape[1] + global_nelements = len(elem_centroids) + aver_part_nelem = global_nelements / num_ranks + + if debug: + print(f"Partitioning {global_nelements} elements in" + f" [{x_min},{x_max}]/{num_ranks}") + print(f"Average nelem/part: {aver_part_nelem}") + print(f"Initial part locs: {part_loc=}") + + # Create geometrically even partitions + elem_to_rank = ((elem_centroids-x_min) / part_interval).astype(int) + + # map partition id to list of elements in that partition + part_to_elements = {r: set((np.where(elem_to_rank == r))[0].flat) + for r in range(num_ranks)} + # make an array of the geometrically even partition sizes + # avoids calling "len" over and over on the element sets + nelem_part = [len(part_to_elements[r]) for r in range(num_ranks)] + + if debug: + print(f"Initial: {nelem_part=}") + + # Automatic load-balancing + if auto_balance: + + for r in range(num_ranks-1): + + # find the element reservoir (next part with elements in it) + adv_part = r + 1 + while nelem_part[adv_part] == 0: + adv_part = adv_part + 1 + + num_elem_needed = aver_part_nelem - nelem_part[r] + part_imbalance = np.abs(num_elem_needed) / float(aver_part_nelem) + + if debug: + print(f"Processing part({r=})") + print(f"{part_loc[r]=}, {adv_part=}") + print(f"{num_elem_needed=}, {part_imbalance=}") + print(f"{nelem_part=}") + + niter = 0 + total_change = 0 + moved_elements = set() + + while ((part_imbalance > imbalance_tolerance) + and (adv_part < num_ranks)): + # This partition needs to keep changing in size until it meets the + # specified imbalance tolerance, or gives up trying + + # seek out the element reservoir + while nelem_part[adv_part] == 0: + adv_part = adv_part + 1 + if adv_part >= num_ranks: + raise ValueError("Ran out of elements to partition.") + + if debug: + print(f"-{nelem_part[r]=}, adv_part({adv_part})," + f" {nelem_part[adv_part]=}") + print(f"-{part_loc[r+1]=},{part_loc[adv_part+1]=}") + print(f"-{num_elem_needed=},{part_imbalance=}") + + if niter > 100: + raise ValueError("Detected too many iterations in partitioning.") + + # The purpose of the next block is to populate the "moved_elements" + # data structure. Then those elements will be moved between the + # current partition being processed and the "reservoir," + # *and* to adjust the position of the "right" side of the current + # partition boundary. + moved_elements = set() + num_elements_added = 0 + + if num_elem_needed > 0: + + # Partition is SMALLER than it should be, grab elements from + # the reservoir + if debug: + print(f"-Grabbing elements from reservoir({adv_part})" + f", {nelem_part[adv_part]=}") + + portion_needed = (float(abs(num_elem_needed)) + / float(nelem_part[adv_part])) + portion_needed = min(portion_needed, 1.0) + + if debug: + print(f"--Chomping {portion_needed*100}% of" + f" reservoir({adv_part}) [by nelem].") + + if portion_needed == 1.0: # Chomp + new_loc = part_loc[adv_part+1] + moved_elements.update(part_to_elements[adv_part]) + + else: # Bite + # This is the spatial size of the reservoir + reserv_interval = part_loc[adv_part+1] - part_loc[r+1] + + # Find what portion of the reservoir to grab spatially + # This part is needed because the elements are not + # distributed uniformly in space. + fine_tuned = False + trial_portion_needed = portion_needed + while not fine_tuned: + pos_update = trial_portion_needed*reserv_interval + new_loc = part_loc[r+1] + pos_update + + moved_elements = set() + num_elem_mv = 0 + for e in part_to_elements[adv_part]: + if elem_centroids[e] <= new_loc: + moved_elements.add(e) + num_elem_mv = num_elem_mv + 1 + if num_elem_mv < num_elem_needed: + fine_tuned = True + else: + ovrsht = (num_elem_mv - num_elem_needed) + rel_ovrsht = ovrsht/float(num_elem_needed) + if rel_ovrsht > 0.8: + # bisect the space grabbed and try again + trial_portion_needed = trial_portion_needed/2.0 + else: + fine_tuned = True + + portion_needed = trial_portion_needed + new_loc = part_loc[r+1] + pos_update + if debug: + print(f"--Tuned: {portion_needed=} [by spatial volume]") + print(f"--Advancing part({r}) by +{pos_update}") + + num_elements_added = len(moved_elements) + if debug: + print(f"--Adding {num_elements_added} to part({r}).") + + else: + + # Partition is LARGER than it should be + # Grab the spatial size of the current partition + # to estimate the portion we need to shave off + # assuming uniform element density + part_interval = part_loc[r+1] - part_loc[r] + num_to_move = -num_elem_needed + portion_needed = num_to_move/float(nelem_part[r]) + + if debug: + print(f"--Shaving off {portion_needed*100}% of" + f" partition({r}) [by nelem].") + + # Tune the shaved portion to account for + # non-uniform element density + fine_tuned = False + while not fine_tuned: + pos_update = portion_needed*part_interval + new_pos = part_loc[r+1] - pos_update + moved_elements = set() + num_elem_mv = 0 + for e in part_to_elements[r]: + if elem_centroids[e] > new_pos: + moved_elements.add(e) + num_elem_mv = num_elem_mv + 1 + if num_elem_mv < num_to_move: + fine_tuned = True + else: + ovrsht = (num_elem_mv - num_to_move) + rel_ovrsht = ovrsht/float(num_to_move) + if rel_ovrsht > 0.8: + # bisect and try again + portion_needed = portion_needed/2.0 + else: + fine_tuned = True + + # new "right" wall location of shranken part + # and negative num_elements_added for removal + new_loc = new_pos + num_elements_added = -len(moved_elements) + if debug: + print(f"--Reducing partition size by {portion_needed*100}%" + " [by nelem].") + print(f"--Removing {-num_elements_added} from part({r}).") + + # Now "moved_elements", "num_elements_added", and "new_loc" + # are computed. Update the partition, and reservoir. + if debug: + print(f"--Number of elements to ADD: {num_elements_added}.") + + if num_elements_added > 0: + part_to_elements[r].update(moved_elements) + part_to_elements[adv_part].difference_update( + moved_elements) + for e in moved_elements: + elem_to_rank[e] = r + else: + part_to_elements[r].difference_update(moved_elements) + part_to_elements[adv_part].update(moved_elements) + for e in moved_elements: + elem_to_rank[e] = adv_part + + total_change = total_change + num_elements_added + part_loc[r+1] = new_loc + if debug: + print(f"--Before: {nelem_part=}") + nelem_part[r] = nelem_part[r] + num_elements_added + nelem_part[adv_part] = nelem_part[adv_part] - num_elements_added + if debug: + print(f"--After: {nelem_part=}") + + # Compute new nelem_needed and part_imbalance + num_elem_needed = num_elem_needed - num_elements_added + part_imbalance = \ + np.abs(num_elem_needed) / float(aver_part_nelem) + niter = niter + 1 + + # Summarize the total change and state of the partition + # and reservoir + if debug: + print(f"-Part({r}): {total_change=}") + print(f"-Part({r=}): {nelem_part[r]=}, {part_imbalance=}") + print(f"-Part({adv_part}): {nelem_part[adv_part]=}") + + # Validate the partitioning before returning + total_partitioned_elements = sum([len(part_to_elements[r]) + for r in range(num_ranks)]) + total_nelem_part = sum([nelem_part[r] for r in range(num_ranks)]) + + if debug: + print("Validating mesh parts.") + + if total_partitioned_elements != total_nelem_part: + raise ValueError("Validator: parted element counts dont match") + if total_partitioned_elements != global_nelements: + raise ValueError("Validator: global element counts dont match.") + if len(elem_to_rank) != global_nelements: + raise ValueError("Validator: elem-to-rank wrong size.") + if np.any(nelem_part) <= 0: + raise ValueError("Validator: empty partitions.") + + for e in range(global_nelements): + part = elem_to_rank[e] + if e not in part_to_elements[part]: + raise ValueError("Validator: part/element/part map mismatch.") + + part_counts = np.zeros(global_nelements) + for part_elements in part_to_elements.values(): + for element in part_elements: + part_counts[element] = part_counts[element] + 1 + + if np.any(part_counts > 1): + raise ValueError("Validator: degenerate elements") + if np.any(part_counts < 1): + raise ValueError("Validator: orphaned elements") + + return elem_to_rank + + +def generate_and_distribute_mesh(comm, generate_mesh, **kwargs): """Generate a mesh and distribute it among all ranks in *comm*. Generate the mesh with the user-supplied mesh generation function @@ -461,7 +774,7 @@ def generate_and_distribute_mesh(comm, generate_mesh): warn( "generate_and_distribute_mesh is deprecated and will go away Q4 2022. " "Use distribute_mesh instead.", DeprecationWarning, stacklevel=2) - return distribute_mesh(comm, generate_mesh) + return distribute_mesh(comm, generate_mesh, **kwargs) def distribute_mesh(comm, get_mesh_data, partition_generator_func=None): From db93e7c8d26aa20ebc120e5efb574e081890adb0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 Oct 2022 10:04:10 -0500 Subject: [PATCH 723/873] Fix boundary report for multivol --- mirgecom/simutil.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index cb87297ca..b7fb81ae7 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -915,7 +915,8 @@ def partition_generator_func(mesh, tag_to_elements, num_ranks): return local_mesh_data, global_nelements -def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL): +def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL, + mesh=None): """Generate a report of the grid boundaries.""" boundaries = normalize_boundaries(boundaries) @@ -926,7 +927,14 @@ def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL): nproc = comm.Get_size() rank = comm.Get_rank() - local_header = f"nproc: {nproc}\nrank: {rank}\n" + if mesh is not None: + nelem = 0 + for grp in mesh.groups: + nelem = nelem + grp.nelements + local_header = f"nproc: {nproc}\nrank: {rank}\nnelem: {nelem}\n" + else: + local_header = f"nproc: {nproc}\nrank: {rank}\n" + from io import StringIO local_report = StringIO(local_header) local_report.seek(0, 2) @@ -939,10 +947,12 @@ def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL): from meshmode.mesh import BTAG_PARTITION from meshmode.distributed import get_connected_parts connected_part_ids = get_connected_parts(dcoll.discr_from_dd(dd).mesh) + local_report.write(f"num_nbr_parts: {len(connected_part_ids)}\n") local_report.write(f"connected_part_ids: {connected_part_ids}\n") part_nodes = [] for connected_part_id in connected_part_ids: - boundary_discr = dcoll.discr_from_dd(BTAG_PARTITION(connected_part_id)) + boundary_discr = dcoll.discr_from_dd( + dd.trace(BTAG_PARTITION(connected_part_id))) nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) part_nodes.append(nnodes) if part_nodes: From 54ae07bc61cf9149319f6ca9fdca9c4e4f2967b9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 28 Oct 2022 10:16:10 -0500 Subject: [PATCH 724/873] Fix doc type misspelling --- mirgecom/simutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index b7fb81ae7..5feefc11e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -460,7 +460,7 @@ def geometric_mesh_partitioner(mesh, num_ranks=1, *, tag_to_elements=None, If *auto_balance* is True, this parameter indicates the acceptable relative difference to the average number of elements per partition. It defaults to balance within 1%. - debug: boolean + debug: bool En/disable debugging/diagnostic print reporting. Returns From 2fa133f0c8fb27d3613076500762d50419abbd23 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 25 Oct 2022 18:07:30 -0500 Subject: [PATCH 725/873] Python 3.10 --- conda-env.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-env.yml b/conda-env.yml index 6b96edb87..d376ca686 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -18,7 +18,7 @@ dependencies: - oct2py - pyopencl - pymetis -- python=3.9 +- python=3.10 - pip - pytest - pylint From 9047cd423e67025deee7d6023b5e5895fab347f9 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Thu, 27 Oct 2022 09:20:10 -0500 Subject: [PATCH 726/873] Python 3.11 --- conda-env.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conda-env.yml b/conda-env.yml index d376ca686..c107727fb 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -18,7 +18,7 @@ dependencies: - oct2py - pyopencl - pymetis -- python=3.10 +- python=3.11 - pip - pytest - pylint From 1bf8c7dca34dff0903964df7497cc9c766524654 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Sun, 30 Oct 2022 11:15:30 -0500 Subject: [PATCH 727/873] fixes --- .rtd-env-py3.yml | 2 +- conda-env.yml | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.rtd-env-py3.yml b/.rtd-env-py3.yml index 109a68408..6cedfc986 100644 --- a/.rtd-env-py3.yml +++ b/.rtd-env-py3.yml @@ -4,7 +4,7 @@ channels: - conda-forge - nodefaults dependencies: -- python=3.9 +- python=3.11 - mpi4py - islpy - pip diff --git a/conda-env.yml b/conda-env.yml index c107727fb..4cf1e3c37 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -9,7 +9,6 @@ channels: dependencies: - git - gh -- mypy - conda-forge::numpy - pocl - clinfo @@ -23,6 +22,4 @@ dependencies: - pytest - pylint - pydocstyle -- cantera -- h5py * nompi_* # Make sure cantera does not pull in MPI through h5py - gmsh From 011b40713c04f5b42a88fd0171e02d18a6b4a1e8 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Fri, 11 Nov 2022 09:13:49 -0600 Subject: [PATCH 728/873] restore original packages --- conda-env.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conda-env.yml b/conda-env.yml index 4cf1e3c37..c107727fb 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -9,6 +9,7 @@ channels: dependencies: - git - gh +- mypy - conda-forge::numpy - pocl - clinfo @@ -22,4 +23,6 @@ dependencies: - pytest - pylint - pydocstyle +- cantera +- h5py * nompi_* # Make sure cantera does not pull in MPI through h5py - gmsh From 71aac3f3ba6702e973f5c1b5325d4d4fd6e996b5 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Fri, 11 Nov 2022 15:09:42 -0600 Subject: [PATCH 729/873] use default_factory for species_mass --- mirgecom/fluid.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 6ac1bcc8e..9d9de8ef4 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -40,7 +40,7 @@ """ import numpy as np # noqa from meshmode.dof_array import DOFArray # noqa -from dataclasses import dataclass, fields +from dataclasses import dataclass, fields, field from arraycontext import ( dataclass_array_container, with_container_arithmetic, @@ -227,7 +227,8 @@ class ConservedVars: mass: DOFArray energy: DOFArray momentum: np.ndarray - species_mass: np.ndarray = np.empty((0,), dtype=object) # empty = immutable + species_mass: np.ndarray = field( + default_factory=lambda: np.empty((0,), dtype=object)) # empty = immutable @property def array_context(self): From f5e7b0cc1ad05d6af3e0f404b2c0489a2301736e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Nov 2022 13:05:31 -0600 Subject: [PATCH 730/873] debug example test fail --- mirgecom/fluid.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 50b8d45a3..876a8cc7c 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -38,7 +38,7 @@ """ import numpy as np # noqa from meshmode.dof_array import DOFArray # noqa -from dataclasses import dataclass, fields, field +from dataclasses import dataclass, fields # , field from arraycontext import ( dataclass_array_container, with_container_arithmetic, @@ -219,8 +219,9 @@ class ConservedVars: mass: DOFArray energy: DOFArray momentum: np.ndarray - species_mass: np.ndarray = field( - default_factory=lambda: np.empty((0,), dtype=object)) # empty = immutable + # species_mass: np.ndarray = field( + # default_factory=lambda: np.empty((0,), dtype=object)) # empty = immutable + species_mass: np.ndarray = np.empty((0,), dtype=object) @property def array_context(self): From 8b4b47b25a7d28970a8f13655b48013709026399 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Nov 2022 13:45:35 -0600 Subject: [PATCH 731/873] Revert to py310. --- .rtd-env-py3.yml | 2 +- conda-env.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.rtd-env-py3.yml b/.rtd-env-py3.yml index 6cedfc986..89c8fe1ea 100644 --- a/.rtd-env-py3.yml +++ b/.rtd-env-py3.yml @@ -4,7 +4,7 @@ channels: - conda-forge - nodefaults dependencies: -- python=3.11 +- python=3.10 - mpi4py - islpy - pip diff --git a/conda-env.yml b/conda-env.yml index c107727fb..d376ca686 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -18,7 +18,7 @@ dependencies: - oct2py - pyopencl - pymetis -- python=3.11 +- python=3.10 - pip - pytest - pylint From 2d45c109aa4686fe4b4f3cd7da3dd9a0bb6b9e7e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Nov 2022 14:55:53 -0600 Subject: [PATCH 732/873] Speed up CI a bit, disable debug, and examples on porter --- .github/workflows/ci.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 66e60591c..cb4213918 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -85,7 +85,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, porter] + os: [ubuntu-latest] steps: - uses: actions/checkout@v2 @@ -99,7 +99,8 @@ jobs: . "$MINIFORGE_INSTALL_DIR/bin/activate" testing conda install vtk # needed for the accuracy comparison export XDG_CACHE_HOME=/tmp - [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda && export POCL_DEBUG=cuda + [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda + # && export POCL_DEBUG=cuda cd examples && ./test_lazy_accuracy.sh - name: Run examples @@ -107,7 +108,8 @@ jobs: MINIFORGE_INSTALL_DIR=.miniforge3 . "$MINIFORGE_INSTALL_DIR/bin/activate" testing export XDG_CACHE_HOME=/tmp - [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda && export POCL_DEBUG=cuda + [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda + # && export POCL_DEBUG=cuda examples/run_examples.sh ./examples doc: From e02f6f58f31a0fa0b4ffad498d0d2f7fa320d016 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Nov 2022 21:54:13 -0600 Subject: [PATCH 733/873] Add run-integrated-tests --- scripts/run-integrated-tests.sh | 138 ++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100755 scripts/run-integrated-tests.sh diff --git a/scripts/run-integrated-tests.sh b/scripts/run-integrated-tests.sh new file mode 100755 index 000000000..f41dae410 --- /dev/null +++ b/scripts/run-integrated-tests.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +# +# Usage: run-integrated-tests.sh [path_to_mirgecom] +# +# This script is designed to run mirgecom tests and examples. +# Options: +# -e|--examples: Run the examples (default = No) +# -p|--production: Run the production tests (default = No) +# -l|--lazy-accuracy: Run lazy accuracy tests (default = No) +# -b|--batch: Run tests through a batch system (default = No) +# +# Each driver to test is expected to have a smoke test defined in: +# /driver_name_root_/scripts/smoke_test.sh +# +# See https://github.com/illinois-ceesd/drivers_y2-prediction/scripts/smoke_test.sh +# for an example `smoke_test.sh`. +# +origin=$(pwd) +MIRGE_HOME=${1:-"."} +cd ${MIRGE_HOME} +MIRGE_HOME=$(pwd) +cd - + +testing_env="${MIRGE_HOME}/scripts/mirge-testing-env.sh" + +declare -i numfail=0 +declare -i numsuccess=0 + +do_examples=false +do_lazy_accuracy=false +do_production_tests=false +do_batch_job=false + +NONOPT_ARGS=() +while [[ $# -gt 0 ]]; do + case $1 in + -e|--examples) + do_examples=true + shift + ;; + -l|--lazy-accuracy) + do_lazy_accuracy=true + shift + ;; + -p|--production) + do_production_tests=true + shift + ;; + -b|--batch) + do_batch_job=true + shift + ;; + -*|--*) + echo "run_integrated_tests: Unknown option $1" + exit 1 + ;; + *) + NONOPT_ARGS+=("$1") + shift + ;; + esac +done + +set -- "${NONOPT_ARGS[@]}" + +date + +echo "Running tests in ${MIRGE_HOME} ..." + +failed_tests="" +succeeded_tests="" + +if [[ "${do_examples}" = "true" ]]; then + + date + printf "\- Running Examples.\n" + . ${MIRGE_HOME}/examples/run_examples.sh ${MIRGE_HOME}/examples + test_result=$? + date + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- Example tests passed." + succeeded_tests="${succeeded_drivers} Examples" + else + ((numfail=numfail+1)) + printf "\-\- Example tests failed." + failed_tests="${failed_drivers} Examples" + fi +fi + +if [[ "${do_lazy_accuracy}" = "true" ]]; then + + date + printf "\- Testing Lazy Accuracy.\n" + . ${MIRGE_HOME}/examples/test_lazy_accuracy.sh + test_result=$? + date + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- Lazy accuracy tests passed." + succeeded_tests="${succeeded_drivers} LazyAccuracy" + else + ((numfail=numfail+1)) + printf "\-\- Lazy accuracy tests failed." + failed_tests="${failed_drivers} LazyAccuracy" + fi +fi + +if [[ "${do_production_tests}" = "true" ]]; then + + date + printf "\- Production testing (soon).\n" + # . ${MIRGE_HOME}/scripts/run-production-tests.sh ${MIRGE_HOME} + # test_result=$? + date + # if [[ $test_result -eq 0 ]]; then + # ((numsuccess=numsuccess+1)) + # printf "\-\- Lazy accuracy tests passed." + # succeeded_tests="${succeeded_drivers} LazyAccuracy" + # else + # ((numfail=numfail+1)) + # printf "\-\- Lazy accuracy tests failed." + # failed_drivers="${failed_drivers} LazyAccuracy" + #fi +fi + +if [[ $numfail -eq 0 ]] +then + echo "No failures." +else + echo "Failed tests(${numfail}): ${failed_tests}" +fi + +echo "Successful tests(${numsuccess}): ${succeeded_tests}" + +return $numfail + From ca5295bed86b3147120f0ad1743265b7edb64312 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 12 Nov 2022 21:57:15 -0600 Subject: [PATCH 734/873] Undo 311 merge. --- .rtd-env-py3.yml | 2 +- conda-env.yml | 2 +- mirgecom/fluid.py | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.rtd-env-py3.yml b/.rtd-env-py3.yml index 89c8fe1ea..109a68408 100644 --- a/.rtd-env-py3.yml +++ b/.rtd-env-py3.yml @@ -4,7 +4,7 @@ channels: - conda-forge - nodefaults dependencies: -- python=3.10 +- python=3.9 - mpi4py - islpy - pip diff --git a/conda-env.yml b/conda-env.yml index d376ca686..6b96edb87 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -18,7 +18,7 @@ dependencies: - oct2py - pyopencl - pymetis -- python=3.10 +- python=3.9 - pip - pytest - pylint diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 876a8cc7c..87084bc67 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -38,7 +38,7 @@ """ import numpy as np # noqa from meshmode.dof_array import DOFArray # noqa -from dataclasses import dataclass, fields # , field +from dataclasses import dataclass, fields from arraycontext import ( dataclass_array_container, with_container_arithmetic, @@ -219,9 +219,7 @@ class ConservedVars: mass: DOFArray energy: DOFArray momentum: np.ndarray - # species_mass: np.ndarray = field( - # default_factory=lambda: np.empty((0,), dtype=object)) # empty = immutable - species_mass: np.ndarray = np.empty((0,), dtype=object) + species_mass: np.ndarray = np.empty((0,), dtype=object) # empty = immutable @property def array_context(self): From 30585a98d888219df74636810ed35ddeeda7d8c8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 17:52:07 -0600 Subject: [PATCH 735/873] Squashed commit of the following: commit 3637549aefad9f4bc277e4a5365ea7373e5619bf Author: Michael Campbell Date: Sun Nov 13 16:43:32 2022 -0600 Clean up CI yaml commit d683be28d342c4dae0681829d2b1e96a59724968 Author: Michael Campbell Date: Sun Nov 13 15:24:28 2022 -0600 Update/debug commit 7b8aa5e001578fc3de908f22a83c7822f7bcae53 Author: Michael Campbell Date: Sun Nov 13 15:06:19 2022 -0600 Update/debug commit 13bac3e65ed91d089657aab9ddd293f20ed999e3 Author: Michael Campbell Date: Sun Nov 13 14:28:26 2022 -0600 Debug production install script commit 4528cc6b2f322cdfabee8d01f15bd15bc48684bd Author: Michael Campbell Date: Sun Nov 13 14:11:01 2022 -0600 Fix script bug commit 5a76ab1699efd00df84016fc4656fed68319d270 Author: Michael Campbell Date: Sun Nov 13 13:57:46 2022 -0600 Update testing scripts commit f1329054e39aec6581447da98d4fd3c4a944c186 Author: Michael Campbell Date: Sun Nov 13 12:15:04 2022 -0600 Make production runner script executable. commit c20ec9adbbac5382eaf5890b711c12830ec27979 Author: Michael Campbell Date: Sun Nov 13 12:03:29 2022 -0600 Add production test runner script. commit fb90f7d37f0328c8b574f38b0ae32f1a83173ee1 Author: Michael Campbell Date: Sun Nov 13 12:02:59 2022 -0600 Update testing scripts. --- .github/workflows/ci.yaml | 13 ++-- examples/run_examples.sh | 4 +- scripts/install-mirge-from-source.sh | 2 +- scripts/install-production-drivers.sh | 12 ++-- scripts/merge-install-production-branch.sh | 32 +++++++-- scripts/mirge-testing-env.sh | 9 ++- scripts/production-testing-env.sh | 5 +- scripts/run-driver-smoke-tests.sh | 10 +-- scripts/run-integrated-tests.sh | 76 +++++++++++++--------- scripts/run-production-tests.sh | 55 ++++++++++++++++ 10 files changed, 157 insertions(+), 61 deletions(-) create mode 100755 scripts/run-production-tests.sh diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index cb4213918..dfb3dd7b8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -85,7 +85,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest] + os: [ubuntu-latest, porter] steps: - uses: actions/checkout@v2 @@ -101,8 +101,7 @@ jobs: export XDG_CACHE_HOME=/tmp [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda # && export POCL_DEBUG=cuda - cd examples && ./test_lazy_accuracy.sh - + scripts/run-integrated-tests.sh --lazy-accuracy - name: Run examples run: | MINIFORGE_INSTALL_DIR=.miniforge3 @@ -110,7 +109,7 @@ jobs: export XDG_CACHE_HOME=/tmp [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda # && export POCL_DEBUG=cuda - examples/run_examples.sh ./examples + scripts/run-integrated-tests.sh --examples doc: name: Documentation @@ -188,11 +187,7 @@ jobs: git clone https://github.com/illinois-ceesd/emirge emirge.prod cd emirge.prod . ../mirgecom/scripts/install-mirge-from-source.sh ${MIRGEDIR}/.. - source ${MIRGEDIR}/../config/activate_env.sh - . ../mirgecom/scripts/merge-install-production-branch.sh ${MIRGEDIR} - name: Run production test run: | - . scripts/production-testing-env.sh source ../config/activate_env.sh - . scripts/install-production-drivers.sh . - . scripts/run-driver-smoke-tests.sh . production_driver + scripts/run-integrated-tests.sh --production diff --git a/examples/run_examples.sh b/examples/run_examples.sh index 08caa34a9..f1435f890 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -14,7 +14,9 @@ echo "*** Running examples in $examples_dir ..." failed_examples="" succeeded_examples="" -. ${examples_dir}/scripts/mirge-testing-env.sh ${examples_dir}/.. +if [[ -z "${MIRGE_PARALLEL_SPAWNER}" ]];then + . ${examples_dir}/scripts/mirge-testing-env.sh ${examples_dir}/.. +fi mpi_exec="${MIRGE_MPI_EXEC}" mpi_launcher="${MIRGE_PARALLEL_SPAWNER}" diff --git a/scripts/install-mirge-from-source.sh b/scripts/install-mirge-from-source.sh index bfa55dd08..c1e61495d 100755 --- a/scripts/install-mirge-from-source.sh +++ b/scripts/install-mirge-from-source.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x +# set -x # # This script is intended to install mirgecom from an uninstalled # mirgecom source gotten from a fresh clone. diff --git a/scripts/install-production-drivers.sh b/scripts/install-production-drivers.sh index c4ce0acd8..7b50279f7 100755 --- a/scripts/install-production-drivers.sh +++ b/scripts/install-production-drivers.sh @@ -8,12 +8,14 @@ # PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" # (See the example default value below) # -MIRGE_HOME=${1:-"."} -cd ${MIRGE_HOME} -MIRGE_HOME=$(pwd) -cd - +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y2-prediction@main"} +if [[ -z "${PRODUCTION_DRIVERS}" ]]; then + source ${MIRGE_HOME}/scripts/production-testing-env.sh +fi # Loop over the production drivers, clone them, and prepare for execution # set -x diff --git a/scripts/merge-install-production-branch.sh b/scripts/merge-install-production-branch.sh index 0a7756292..e1e74176e 100755 --- a/scripts/merge-install-production-branch.sh +++ b/scripts/merge-install-production-branch.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x +# set -x # # This script is designed to patch the CEESD production capability into # a proposed change to illinois-ceesd/mirgecom@main. It takes 1 input @@ -10,31 +10,49 @@ set -x # PRODUCTION_BRANCH = The production branch (default=production) # PRODUCTION_FORK = The production fork (default=illinois-ceesd) # -MIRGE_HOME=${1:-"."} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} -PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +if [[ -z "${PRODUCTION_BRANCH}" ]]; then + . ${MIRGE_HOME}/scripts/production-testing-env.sh +fi echo "MIRGE_HOME=${MIRGE_HOME}" echo "PRODUCTION_FORK=$PRODUCTION_FORK" echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" cd ${MIRGE_HOME} + git status +set -x + # This junk is needed to be able to execute git commands properly -git config user.email "ci-runner@ci.machine.com" -git config user.name "CI Runner" +GIT_USER="$(git config user.name)" +if [[ -z "${GIT_USER}" ]]; then + git config user.email "ci-runner@ci.machine.com" + git config user.name "CI Runner" +fi # Making a dedicated production remote adds production forks -if git config remote.production.url > /dev/null; then +PROD_URL="$(git config remote.production.url)" +if [[ ! -z "${PROD_URL}" ]]; then git remote remove production fi + git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production # Merge the production branch for testing the production drivers git merge production/${PRODUCTION_BRANCH} --no-edit + # Pick up any requirements.txt pip install -r requirements.txt +set +x + +export MIRGE_PRODUCTION_INSTALL="${PRODUCTION_FORK}/mirgecom@${PRODUCTION_BRANCH}" + cd - diff --git a/scripts/mirge-testing-env.sh b/scripts/mirge-testing-env.sh index d1a9f6a8e..35a260e29 100755 --- a/scripts/mirge-testing-env.sh +++ b/scripts/mirge-testing-env.sh @@ -4,9 +4,14 @@ # variables to make it more convenient to exercise parallel # mirgecom applications on various platforms. -MIRGE_HOME=${1:-"."} +# set -x + +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + MIRGE_HOME="." +fi cd ${MIRGE_HOME} -MIRGE_HOME=$(pwd) +MIRGE_HOME="$(pwd)" cd - MIRGE_PARALLEL_SPAWNER="" diff --git a/scripts/production-testing-env.sh b/scripts/production-testing-env.sh index 130a3c53e..fcbe37a34 100755 --- a/scripts/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x +# set -x # # This script is designed to help customize the production environment # under which CEESD production capability is tested under a proposed change @@ -20,3 +20,6 @@ set -x # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} +PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y2-prediction@main"} diff --git a/scripts/run-driver-smoke-tests.sh b/scripts/run-driver-smoke-tests.sh index 2bb8c4002..964f5cfd3 100755 --- a/scripts/run-driver-smoke-tests.sh +++ b/scripts/run-driver-smoke-tests.sh @@ -15,10 +15,10 @@ # for an example `smoke_test.sh`. # origin=$(pwd) -MIRGE_HOME=${1:-"."} -cd ${MIRGE_HOME} -MIRGE_HOME=$(pwd) -cd - +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi DRIVER_ROOT=${2:-"production_driver"} @@ -67,5 +67,5 @@ fi echo "Successful drivers(${numsuccess}): ${succeeded_drivers}" -return $numfail +exit $numfail diff --git a/scripts/run-integrated-tests.sh b/scripts/run-integrated-tests.sh index f41dae410..c96d867b2 100755 --- a/scripts/run-integrated-tests.sh +++ b/scripts/run-integrated-tests.sh @@ -16,25 +16,22 @@ # See https://github.com/illinois-ceesd/drivers_y2-prediction/scripts/smoke_test.sh # for an example `smoke_test.sh`. # -origin=$(pwd) -MIRGE_HOME=${1:-"."} -cd ${MIRGE_HOME} -MIRGE_HOME=$(pwd) -cd - - -testing_env="${MIRGE_HOME}/scripts/mirge-testing-env.sh" - -declare -i numfail=0 -declare -i numsuccess=0 - do_examples=false do_lazy_accuracy=false do_production_tests=false do_batch_job=false +all_args="$@" + NONOPT_ARGS=() while [[ $# -gt 0 ]]; do case $1 in + -a|--all) + do_examples=true + do_lazy_accuracy=true + do_production_tests=true + shift + ;; -e|--examples) do_examples=true shift @@ -64,6 +61,23 @@ done set -- "${NONOPT_ARGS[@]}" +origin=$(pwd) +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +printf "Running integrated tests. MIRGE_HOME=${MIRGE_HOME}\n" + +testing_env="${MIRGE_HOME}/scripts/mirge-testing-env.sh" +if [[ -z "$MIRGE_PARALLEL_SPAWNER" ]]; then + printf "Loading MIRGE testing env: ${testing_env}\n" + . ${testing_env} +fi + +declare -i numfail=0 +declare -i numsuccess=0 + date echo "Running tests in ${MIRGE_HOME} ..." @@ -75,17 +89,17 @@ if [[ "${do_examples}" = "true" ]]; then date printf "\- Running Examples.\n" - . ${MIRGE_HOME}/examples/run_examples.sh ${MIRGE_HOME}/examples + ${MIRGE_HOME}/examples/run_examples.sh ${MIRGE_HOME}/examples test_result=$? date if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) printf "\-\- Example tests passed." - succeeded_tests="${succeeded_drivers} Examples" + succeeded_tests="${succeeded_tests} Examples" else ((numfail=numfail+1)) printf "\-\- Example tests failed." - failed_tests="${failed_drivers} Examples" + failed_tests="${failed_tests} Examples" fi fi @@ -93,36 +107,38 @@ if [[ "${do_lazy_accuracy}" = "true" ]]; then date printf "\- Testing Lazy Accuracy.\n" - . ${MIRGE_HOME}/examples/test_lazy_accuracy.sh + cd ${MIRGE_HOME}/examples + ${MIRGE_HOME}/examples/test_lazy_accuracy.sh test_result=$? date + cd - if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) printf "\-\- Lazy accuracy tests passed." - succeeded_tests="${succeeded_drivers} LazyAccuracy" + succeeded_tests="${succeeded_tests} LazyAccuracy" else ((numfail=numfail+1)) printf "\-\- Lazy accuracy tests failed." - failed_tests="${failed_drivers} LazyAccuracy" + failed_tests="${failed_tests} LazyAccuracy" fi fi if [[ "${do_production_tests}" = "true" ]]; then date - printf "\- Production testing (soon).\n" - # . ${MIRGE_HOME}/scripts/run-production-tests.sh ${MIRGE_HOME} - # test_result=$? + printf "\- Testing production drivers.\n" + ${MIRGE_HOME}/scripts/run-production-tests.sh ${MIRGE_HOME} + test_result=$? date - # if [[ $test_result -eq 0 ]]; then - # ((numsuccess=numsuccess+1)) - # printf "\-\- Lazy accuracy tests passed." - # succeeded_tests="${succeeded_drivers} LazyAccuracy" - # else - # ((numfail=numfail+1)) - # printf "\-\- Lazy accuracy tests failed." - # failed_drivers="${failed_drivers} LazyAccuracy" - #fi + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- Production tests passed." + succeeded_tests="${succeeded_tests} Production" + else + ((numfail=numfail+1)) + printf "\-\- Production tests failed." + failed_tests="${failed_tests} Production" + fi fi if [[ $numfail -eq 0 ]] @@ -134,5 +150,5 @@ fi echo "Successful tests(${numsuccess}): ${succeeded_tests}" -return $numfail +exit $numfail diff --git a/scripts/run-production-tests.sh b/scripts/run-production-tests.sh new file mode 100755 index 000000000..4cb596c46 --- /dev/null +++ b/scripts/run-production-tests.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +#set -x +# +# Usage: run-driver-smoke-tests.sh [path_to_mirgecom] [driver_name_root] +# +# This script is designed to run the smoke tests for a collection of +# drivers. The drivers are each expected to be in the path: +# /path_to_mirgecom/driver_name_root_ +# +# Each driver to test is expected to have a smoke test defined in: +# /driver_name_root_/scripts/smoke_test.sh +# +# See https://github.com/illinois-ceesd/drivers_y2-prediction/scripts/smoke_test.sh +# for an example `smoke_test.sh`. +# +origin=$(pwd) +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +if [[ -z "${MIRGE_PARALLEL_SPAWNER}" ]]; then + source ${MIRGE_HOME}/scripts/mirge-testing-env.sh +fi + +cd ${MIRGE_HOME} + +date + +printf "Running production tests in ${MIRGE_HOME} ...\n" + +if [[ -z "${MIRGE_PRODUCTION_INSTALL}" ]]; then + + printf "... Installing production branch ...\n" + . scripts/merge-install-production-branch.sh + date +fi + +printf "... Installing production drivers ...\n" +. scripts/install-production-drivers.sh +date + +printf "... Running production driver smoke tests ...\n" +. scripts/run-driver-smoke-tests.sh . production_driver + +retval=$? + +printf "Production tests done.\n" +date + +cd ${origin} + +exit $retval + From 1aa77a6613dea7b0decdc01fa65a968fdf09a051 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 18:06:55 -0600 Subject: [PATCH 736/873] Overhaul script infrastructure for command line and CI testing. --- .ci-support/production-drivers-install.sh | 35 ---- .ci-support/production-drivers-run.sh | 46 ------ .github/workflows/ci.yaml | 23 ++- doc/development/pullrequests.rst | 62 +++++-- examples/run_examples.sh | 25 ++- examples/scripts | 1 + scripts/install-driver.sh | 27 +++ .../install-mirge-from-source.sh | 2 +- scripts/install-production-drivers.sh | 29 ++++ scripts/lassen-parallel-spawner.sh | 9 + {examples/scripts => scripts}/lassen.bsub.sh | 0 .../merge-install-production-branch.sh | 42 +++-- scripts/mirge-testing-env.sh | 39 +++++ scripts/porter-parallel-spawner.sh | 1 + .../production-testing-env.sh | 5 +- .../scripts => scripts}/quartz.sbatch.sh | 0 scripts/run-driver-smoke-tests.sh | 71 ++++++++ .../run-gpus-generic.sh | 10 +- scripts/run-integrated-tests.sh | 154 ++++++++++++++++++ scripts/run-production-tests.sh | 55 +++++++ 20 files changed, 497 insertions(+), 139 deletions(-) delete mode 100755 .ci-support/production-drivers-install.sh delete mode 100755 .ci-support/production-drivers-run.sh create mode 120000 examples/scripts create mode 100755 scripts/install-driver.sh rename {.ci-support => scripts}/install-mirge-from-source.sh (98%) create mode 100755 scripts/install-production-drivers.sh create mode 100755 scripts/lassen-parallel-spawner.sh rename {examples/scripts => scripts}/lassen.bsub.sh (100%) mode change 100644 => 100755 rename {.ci-support => scripts}/merge-install-production-branch.sh (52%) create mode 100755 scripts/mirge-testing-env.sh create mode 120000 scripts/porter-parallel-spawner.sh rename {.ci-support => scripts}/production-testing-env.sh (81%) rename {examples/scripts => scripts}/quartz.sbatch.sh (100%) mode change 100644 => 100755 create mode 100755 scripts/run-driver-smoke-tests.sh rename examples/scripts/run_gpus_generic.sh => scripts/run-gpus-generic.sh (82%) mode change 100644 => 100755 create mode 100755 scripts/run-integrated-tests.sh create mode 100755 scripts/run-production-tests.sh diff --git a/.ci-support/production-drivers-install.sh b/.ci-support/production-drivers-install.sh deleted file mode 100755 index 3801fe4f4..000000000 --- a/.ci-support/production-drivers-install.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# This script is designed to install the CEESD production test used to -# check that changes to main don't tear up the production capability. -# The script takes one argument, the production environment setup file, -# which is typically `.ci-support/production-env-setup.sh`. To specify -# what production test is installed, the env setup script should set -# the following: -# -# PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" -# (See the example default value below) -# -# The default values result in an install of the Y1 nozzle driver and -# Wyatt Hagen's isolator driver that work with current MIRGE-Com -# production branch: mirgecom@y1-production. -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y2-prediction@main:illinois-ceesd/drivers_y2-isolator@main:illinois-ceesd/drivers_flame1d@main"} -# Loop over the production drivers, clone them, and prepare for execution -set -x -OIFS="$IFS" -IFS=':'; for production_driver_string in $PRODUCTION_DRIVERS; -do - PRODUCTION_DRIVER_BRANCH=$(printf "$production_driver_string" | cut -d "@" -f 2) - PRODUCTION_DRIVER_REPO=$(printf "$production_driver_string" | cut -d "@" -f 1) - PRODUCTION_DRIVER_NAME=$(printf "$PRODUCTION_DRIVER_REPO" | cut -d "/" -f 2) - PRODUCTION_DRIVER_DIR="production_driver_$PRODUCTION_DRIVER_NAME" - git clone -b "$PRODUCTION_DRIVER_BRANCH" https\://github.com/"$PRODUCTION_DRIVER_REPO" "$PRODUCTION_DRIVER_DIR" - cd "$PRODUCTION_DRIVER_DIR"/smoke_test - if [ -f prediction.py ]; then - ln -s prediction.py driver.py - else - ln -s *.py driver.py # name the driver generically - fi - cd ../.. -done -IFS="$OIFS" -set +x diff --git a/.ci-support/production-drivers-run.sh b/.ci-support/production-drivers-run.sh deleted file mode 100755 index c153031d2..000000000 --- a/.ci-support/production-drivers-run.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -set -x -# This script is designed to run the CEESD "production" drivers after -# they have been prepared by an external helper script called -# production-drivers-install.sh. The drivers are each expected to be -# in a directory called "production_driver_*" and are expected to have -# a test driver in "production_driver_*/smoke_test/driver.py". -DRIVERS_HOME=${1:-"."} -cd ${DRIVERS_HOME} - -mpi_exec="mpiexec" -mpi_launcher="" - -if [[ $(hostname) == "porter" ]]; then - rm -rf run_gpus_generic.sh - cat < run_gpus_generic.sh -if [[ -n "\$OMPI_COMM_WORLD_NODE_RANK" ]]; then - # Open MPI - export CUDA_VISIBLE_DEVICES=\$OMPI_COMM_WORLD_LOCAL_RANK -elif [[ -n "\$MPI_LOCALRANKID" ]]; then - # mpich/mvapich - export CUDA_VISIBLE_DEVICES=\$MPI_LOCALRANKID -fi - -"\$@" -EOF - chmod +x run_gpus_generic.sh - mpi_launcher="bash ../../run_gpus_generic.sh" - - # Assumes POCL - export PYOPENCL_TEST="port:nv" - export PYOPENCL_CTX="port:nv" -elif [[ $(hostname) == "lassen"* ]]; then - export PYOPENCL_CTX="port:tesla" - export PYOPENCL_TEST="port:tesla" - export XDG_CACHE_HOME="/tmp/$USER/xdg-scratch" - mpi_exec="jsrun -g 1 -a 1" -fi - -for production_driver in $(ls | grep "production_driver_"); -do - cd "$production_driver"/smoke_test - ${mpi_exec} -n 2 ${mpi_launcher} python -m mpi4py ./driver.py -i run_params.yaml --log --lazy - cd ../../ -done -cd - diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 581d5a523..dfb3dd7b8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -99,16 +99,17 @@ jobs: . "$MINIFORGE_INSTALL_DIR/bin/activate" testing conda install vtk # needed for the accuracy comparison export XDG_CACHE_HOME=/tmp - [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda && export POCL_DEBUG=cuda - cd examples && ./test_lazy_accuracy.sh - + [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda + # && export POCL_DEBUG=cuda + scripts/run-integrated-tests.sh --lazy-accuracy - name: Run examples run: | MINIFORGE_INSTALL_DIR=.miniforge3 . "$MINIFORGE_INSTALL_DIR/bin/activate" testing export XDG_CACHE_HOME=/tmp - [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda && export POCL_DEBUG=cuda - examples/run_examples.sh ./examples + [[ $(hostname) == "porter" ]] && export PYOPENCL_TEST="port:nv" && unset XDG_CACHE_HOME && conda install pocl-cuda + # && export POCL_DEBUG=cuda + scripts/run-integrated-tests.sh --examples doc: name: Documentation @@ -175,8 +176,8 @@ jobs: [[ $(uname) == Linux ]] && [[ $(hostname) != "porter" ]] && sudo apt-get update && sudo apt-get install -y openmpi-bin libopenmpi-dev [[ $(uname) == Darwin ]] && brew update && brew install mpich MIRGEDIR=$(pwd) - cat .ci-support/production-testing-env.sh - . .ci-support/production-testing-env.sh + cat scripts/production-testing-env.sh + . scripts/production-testing-env.sh cd .. date printf "Removing stale install ..." @@ -185,12 +186,8 @@ jobs: date git clone https://github.com/illinois-ceesd/emirge emirge.prod cd emirge.prod - . ../mirgecom/.ci-support/install-mirge-from-source.sh ${MIRGEDIR}/.. - source ${MIRGEDIR}/../config/activate_env.sh - . ../mirgecom/.ci-support/merge-install-production-branch.sh ${MIRGEDIR} + . ../mirgecom/scripts/install-mirge-from-source.sh ${MIRGEDIR}/.. - name: Run production test run: | - . .ci-support/production-testing-env.sh source ../config/activate_env.sh - . .ci-support/production-drivers-install.sh . - . .ci-support/production-drivers-run.sh . + scripts/run-integrated-tests.sh --production diff --git a/doc/development/pullrequests.rst b/doc/development/pullrequests.rst index d994c1be9..7a740d6de 100644 --- a/doc/development/pullrequests.rst +++ b/doc/development/pullrequests.rst @@ -223,9 +223,21 @@ into accordance. To resolve CI production test failures for a development in PR, it is often useful to run the production tests manually. The production tests may be prepared and executed from anywhere by hand-executing the production test scripts found in -``.ci-support/``. The following is an example workflow adjacent to what CI itself +``scripts/``. Here is a quick-start summary of the commands needed to run +the production tests. These should be run from the top-level mirgecom source +directory: + +.. code:: bash + + $ . scripts/production-testing-env.sh + $ . scripts/merge-install-production-branch.sh + $ . scripts/install-production-drivers.sh + $ . scripts/run-driver-smoke-tests.sh + +The following is step-by-step example procedure adjacent to what CI itself does for executing the production tests. + 1. Check out the PR development (and optionally make a production branch) The PR development is assumed to be in a mirgecom branch called ``branch-name`` @@ -238,46 +250,66 @@ does for executing the production tests. $ # Or for developer fork: $ git clone -b branch-name git@github.com:/fork-name/mirgecom $ cd mirgecom # or loopy, meshmode, ... - $ git switch -c branch-name-production # Optional production branch + $ git checkout -b branch-name-production # Optional production branch 2. Set up the production environment and capability .. code:: bash $ # Load the customizable production environment - $ . .ci-support/production-testing-env.sh + $ . scripts/production-testing-env.sh $ # Merge the production branch - $ . .ci-support/merge-install-production-branch.sh . + $ . scripts/merge-install-production-branch.sh + + If Step 2 succeeds, then your development does not need a custom + production branch to pass production CI. Proceed to Step 3. If Step 2 fails, i.e. if there are merge conflicts, then those must - be resolved. Push the merged result to CEESD or a fork, and indicate - that version in the PRODUCTION_FORK, and PRODUCTION_BRANCH env vars in - ``.ci-support/production-testing-env.sh``. + be resolved. Resolve the conflicts by-hand in the usual way. Once the + conflicts are resolved, then proceed to Step 3, and iterate as needed + until Step 3 passes. Your development will require production environment + customization. After Step 3 passes, Push the conflict-resolved merged result + to CEESD or a fork as shown in Step 4, and indicate that version in the + PRODUCTION_FORK, and PRODUCTION_BRANCH env vars in + ``scripts/production-testing-env.sh`` as shown in Step 5. 3. Grab and run the production tests .. code:: bash $ # Load env if needed - $ . .ci-support/production-testing-env.sh + $ . scripts/production-testing-env.sh $ # Get the production tests - $ . .ci-support/production-drivers-install.sh . + $ . scripts/install-production-drivers.sh $ # Run the production tests - $ . .ci-support/production-drivers-run.sh . + $ . scripts/run-driver-smoke-tests.sh Step 3 will clone the production driver repos to the current directory, with each driver in its own directory. If any of the drivers fail to work with the current development, then they may be modified into working condition and then pushed to a repo/branch. Indicate the location of the working drivers in the PRODUCTION_DRIVERS env var customization in - ``.ci-support/production-testing-env.sh``. + ``scripts/production-testing-env.sh``. + +4. Push your updated "production" branch to the repo (or to your fork): -4. Update the PR to reflect the change in production environment (if any) + .. code:: bash + + $ git push -u origin branch-name-production + $ # Switch back to your development branch + $ git checkout branch-name + +5. Update the PR to reflect the change in production environment (if any) + + Push the customized production ``scripts/production-testing-env.sh`` + settings to the PR development branch. For example, set: + + .. code:: bash - Push the customized production ``.ci-support/production-testing-env.sh`` - settings to the PR development branch. Upon push, mirgecom CI will - try the production tests again, now with the customized environment. + $ PRODUCTION_BRANCH="branch-name-production" + Upon push, mirgecom CI will try the production tests again, + now with the customized environment. If the PR development requires production environment customization in order to pass production tests, then care and coordination will be required to get these diff --git a/examples/run_examples.sh b/examples/run_examples.sh index c0959ecd4..d47086225 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -14,17 +14,23 @@ echo "*** Running examples in $examples_dir ..." failed_examples="" succeeded_examples="" -mpi_exec="mpiexec" -mpi_launcher="" -if [[ $(hostname) == "porter" ]]; then - mpi_launcher="bash $examples_dir/scripts/run_gpus_generic.sh" -elif [[ $(hostname) == "lassen"* ]]; then - export PYOPENCL_CTX="port:tesla" - export XDG_CACHE_HOME="/tmp/$USER/xdg-scratch" - mpi_exec="jsrun -g 1 -a 1" +if [[ -z "${MIRGE_PARALLEL_SPAWNER}" ]];then + . ${examples_dir}/scripts/mirge-testing-env.sh ${examples_dir}/.. fi +mpi_exec="${MIRGE_MPI_EXEC}" +mpi_launcher="${MIRGE_PARALLEL_SPAWNER}" + +examples="" for example in $examples_dir/*.py +do + example_file=$(basename $example) + examples="$examples $example_file" +done + +cd $examples_dir + +for example in $examples do date printf "***\n***\n" @@ -69,6 +75,8 @@ do rm -rf *vtu *sqlite *pkl *-journal restart_data done ((numtests=numsuccess+numfail)) + +cd ${origin} echo "*** Done running examples!" if [[ $numfail -eq 0 ]] then @@ -78,5 +86,6 @@ else echo "*** Failed tests: ($numfail/$numtests): $failed_examples" fi echo "*** Successful tests: ($numsuccess/$numtests): $succeeded_examples" + exit $numfail #rm -f examples/*.vtu diff --git a/examples/scripts b/examples/scripts new file mode 120000 index 000000000..a339954df --- /dev/null +++ b/examples/scripts @@ -0,0 +1 @@ +../scripts \ No newline at end of file diff --git a/scripts/install-driver.sh b/scripts/install-driver.sh new file mode 100755 index 000000000..8a20d8609 --- /dev/null +++ b/scripts/install-driver.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Usage: install_driver.sh [driver_install_root] +# +# Install (clone) a driver from its repository using an input +# configuration string with format "fork/repo@branch" like this example: +# "illinois-ceesd/drivers_y2-prediction@main" +# +# The example driver will be installed to a directory like: +# ${driver_install_root}_drivers_y2-prediction +# +driver_config_string=${1} +driver_install_root=${2:-""} + +if [[ ! -z "${driver_install_root}" ]]; then + driver_install_root="${driver_install_root}_" +fi + +DRIVER_BRANCH=$(printf "$driver_config_string" | cut -d "@" -f 2) +DRIVER_REPO=$(printf "$driver_config_string" | cut -d "@" -f 1) +DRIVER_NAME=$(printf "$DRIVER_REPO" | cut -d "/" -f 2) +DRIVER_INSTALL_DIR="${driver_install_root}$DRIVER_NAME" + +printf "Cloning ${DRIVER_REPO}:/${DRIVER_NAME}@${DRIVER_BRANCH} to ${DRIVER_INSTALL_DIR}.\n" + +rm -rf $DRIVER_INSTALL_DIR +git clone -b "$DRIVER_BRANCH" https\://github.com/"$DRIVER_REPO" "$DRIVER_INSTALL_DIR" diff --git a/.ci-support/install-mirge-from-source.sh b/scripts/install-mirge-from-source.sh similarity index 98% rename from .ci-support/install-mirge-from-source.sh rename to scripts/install-mirge-from-source.sh index bfa55dd08..c1e61495d 100755 --- a/.ci-support/install-mirge-from-source.sh +++ b/scripts/install-mirge-from-source.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x +# set -x # # This script is intended to install mirgecom from an uninstalled # mirgecom source gotten from a fresh clone. diff --git a/scripts/install-production-drivers.sh b/scripts/install-production-drivers.sh new file mode 100755 index 000000000..7b50279f7 --- /dev/null +++ b/scripts/install-production-drivers.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# This script is designed to install the CEESD production tests used to +# check that changes to main don't tear up the production capability. +# The script takes one argument, the path to the mirgecom source, +# To control what production tests are installed, set the following: +# +# PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" +# (See the example default value below) +# +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +if [[ -z "${PRODUCTION_DRIVERS}" ]]; then + source ${MIRGE_HOME}/scripts/production-testing-env.sh +fi + +# Loop over the production drivers, clone them, and prepare for execution +# set -x +OIFS="$IFS" +IFS=':'; for production_driver_string in $PRODUCTION_DRIVERS; +do + printf "Installing from: ${production_driver_string}\n" + . ${MIRGE_HOME}/scripts/install-driver.sh "$production_driver_string" "production_driver" +done +IFS="$OIFS" +# set +x diff --git a/scripts/lassen-parallel-spawner.sh b/scripts/lassen-parallel-spawner.sh new file mode 100755 index 000000000..291be4ae4 --- /dev/null +++ b/scripts/lassen-parallel-spawner.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# +# Used to wrap the spawning of parallel mirgecom drivers on Lassen +# unset CUDA_CACHE_DISABLE +export XDG_CACHE_HOME=${XDG_CACHE_HOME:-"/tmp/$USER/xdg-scratch"} +POCL_CACHE_ROOT=${POCL_CACHE_ROOT:-"/tmp/$USER/pocl-scratch"} +export POCL_CACHE_DIR="${POCL_CACHE_ROOT}/$$" + +"$@" diff --git a/examples/scripts/lassen.bsub.sh b/scripts/lassen.bsub.sh old mode 100644 new mode 100755 similarity index 100% rename from examples/scripts/lassen.bsub.sh rename to scripts/lassen.bsub.sh diff --git a/.ci-support/merge-install-production-branch.sh b/scripts/merge-install-production-branch.sh similarity index 52% rename from .ci-support/merge-install-production-branch.sh rename to scripts/merge-install-production-branch.sh index 2d0ad3667..e1e74176e 100755 --- a/.ci-support/merge-install-production-branch.sh +++ b/scripts/merge-install-production-branch.sh @@ -1,42 +1,58 @@ #!/bin/bash -set -x +# set -x # # This script is designed to patch the CEESD production capability into -# a proposed change to illinois-ceesd/mirgecom@main. The script reads the -# environment config file `.ci-support/production-testing-env.sh`, that -# should set up the expected control variables. +# a proposed change to illinois-ceesd/mirgecom@main. It takes 1 input +# argument which is the file path to the mirgecom installation directory. # -# The production capability to test against may be specified outright, or -# patched by the incoming development. The following vars control the -# production environment: +# The following vars control the production environment: # # PRODUCTION_BRANCH = The production branch (default=production) # PRODUCTION_FORK = The production fork (default=illinois-ceesd) # -MIRGE_HOME=${1:-"."} -PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} -PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +if [[ -z "${PRODUCTION_BRANCH}" ]]; then + . ${MIRGE_HOME}/scripts/production-testing-env.sh +fi echo "MIRGE_HOME=${MIRGE_HOME}" echo "PRODUCTION_FORK=$PRODUCTION_FORK" echo "PRODUCTION_BRANCH=$PRODUCTION_BRANCH" cd ${MIRGE_HOME} + git status +set -x + # This junk is needed to be able to execute git commands properly -git config user.email "ci-runner@ci.machine.com" -git config user.name "CI Runner" +GIT_USER="$(git config user.name)" +if [[ -z "${GIT_USER}" ]]; then + git config user.email "ci-runner@ci.machine.com" + git config user.name "CI Runner" +fi # Making a dedicated production remote adds production forks -if git config remote.production.url > /dev/null; then +PROD_URL="$(git config remote.production.url)" +if [[ ! -z "${PROD_URL}" ]]; then git remote remove production fi + git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production # Merge the production branch for testing the production drivers git merge production/${PRODUCTION_BRANCH} --no-edit + # Pick up any requirements.txt pip install -r requirements.txt + +set +x + +export MIRGE_PRODUCTION_INSTALL="${PRODUCTION_FORK}/mirgecom@${PRODUCTION_BRANCH}" + cd - diff --git a/scripts/mirge-testing-env.sh b/scripts/mirge-testing-env.sh new file mode 100755 index 000000000..35a260e29 --- /dev/null +++ b/scripts/mirge-testing-env.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# +# Applications may source this file for a set of environment +# variables to make it more convenient to exercise parallel +# mirgecom applications on various platforms. + +# set -x + +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + MIRGE_HOME="." +fi +cd ${MIRGE_HOME} +MIRGE_HOME="$(pwd)" +cd - + +MIRGE_PARALLEL_SPAWNER="" +MIRGE_MPI_EXEC="mpiexec" +PYOPENCL_TEST="" +PYOPENCL_CTX="" + +if [[ $(hostname) == "porter" ]]; then + MIRGE_PARALLEL_SPAWNER="bash ${MIRGE_HOME}/scripts/run-gpus-generic.sh" + PYOPENCL_TEST="port:nv" + PYOPENCL_CTX="port:nv" + +elif [[ $(hostname) == "lassen"* ]]; then + MIRGE_PARALLEL_SPAWNER="bash ${MIRGE_HOME}/scripts/lassen-parallel-spawner.sh" + PYOPENCL_TEST="port:tesla" + PYOPENCL_CTX="port:tesla" + MIRGE_MPI_EXEC="jsrun -g 1 -a 1" +fi + +export MIRGE_HOME +export MIRGE_PARALLEL_SPAWNER +export MIRGE_MPI_EXEC +export PYOPENCL_TEST +export PYOPENCL_CTX + diff --git a/scripts/porter-parallel-spawner.sh b/scripts/porter-parallel-spawner.sh new file mode 120000 index 000000000..15936fe28 --- /dev/null +++ b/scripts/porter-parallel-spawner.sh @@ -0,0 +1 @@ +run-gpus-generic.sh \ No newline at end of file diff --git a/.ci-support/production-testing-env.sh b/scripts/production-testing-env.sh similarity index 81% rename from .ci-support/production-testing-env.sh rename to scripts/production-testing-env.sh index 130a3c53e..fcbe37a34 100755 --- a/.ci-support/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -x +# set -x # # This script is designed to help customize the production environment # under which CEESD production capability is tested under a proposed change @@ -20,3 +20,6 @@ set -x # # Example: # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" +PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} +PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y2-prediction@main"} diff --git a/examples/scripts/quartz.sbatch.sh b/scripts/quartz.sbatch.sh old mode 100644 new mode 100755 similarity index 100% rename from examples/scripts/quartz.sbatch.sh rename to scripts/quartz.sbatch.sh diff --git a/scripts/run-driver-smoke-tests.sh b/scripts/run-driver-smoke-tests.sh new file mode 100755 index 000000000..964f5cfd3 --- /dev/null +++ b/scripts/run-driver-smoke-tests.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +#set -x +# +# Usage: run-driver-smoke-tests.sh [path_to_mirgecom] [driver_name_root] +# +# This script is designed to run the smoke tests for a collection of +# drivers. The drivers are each expected to be in the path: +# /path_to_mirgecom/driver_name_root_ +# +# Each driver to test is expected to have a smoke test defined in: +# /driver_name_root_/scripts/smoke_test.sh +# +# See https://github.com/illinois-ceesd/drivers_y2-prediction/scripts/smoke_test.sh +# for an example `smoke_test.sh`. +# +origin=$(pwd) +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +DRIVER_ROOT=${2:-"production_driver"} + +testing_env="${MIRGE_HOME}/scripts/mirge-testing-env.sh" + +declare -i numfail=0 +declare -i numsuccess=0 + +date + +echo "Running drivers in ${MIRGE_HOME} matching ${DRIVER_ROOT} ..." + +failed_drivers="" +succeeded_drivers="" + +for driver in $(ls | grep "${DRIVER_ROOT}_"); +do + + driver_path="${origin}/${driver}" + date + printf "\- Running smoke tests in ${driver_path}.\n" + . ${driver}/scripts/smoke_test.sh "${testing_env}" "${driver_path}" + test_result=$? + + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- ${driver} smoke tests passed." + succeeded_drivers="${succeeded_drivers} ${driver}" + else + ((numfail=numfail+1)) + printf "\-\- ${driver} smoke tests failed." + failed_drivers="${failed_drivers} ${driver}" + fi + cd ${origin} + +done +# set +x +date + +if [[ $numfail -eq 0 ]] +then + echo "No failures." +else + echo "Failed drivers(${numfail}): ${failed_drivers}" +fi + +echo "Successful drivers(${numsuccess}): ${succeeded_drivers}" + +exit $numfail + diff --git a/examples/scripts/run_gpus_generic.sh b/scripts/run-gpus-generic.sh old mode 100644 new mode 100755 similarity index 82% rename from examples/scripts/run_gpus_generic.sh rename to scripts/run-gpus-generic.sh index 91613258e..39763f99b --- a/examples/scripts/run_gpus_generic.sh +++ b/scripts/run-gpus-generic.sh @@ -1,17 +1,16 @@ #!/bin/bash - +# # Generic script to run on multiple GPU ranks. # It works by "hiding" GPUs from CUDA that do not # correspond to the local rank ID on the nodes, such that # only a single GPU is visible to each process. +# # This is useful on systems such as 'porter' that have multiple # GPUs on a node but don't have an MPI process launcher that # handles GPU distribution. # # Run it like this: -# mpirun -n 2 bash run_gpus_generic.sh python -m mpi4py pulse-mpi.py --lazy - -set -ex +# mpiexec -n 2 bash run-gpus-generic.sh python -m mpi4py pulse-mpi.py --lazy if [[ -n "$OMPI_COMM_WORLD_NODE_RANK" ]]; then # Open MPI @@ -21,7 +20,4 @@ elif [[ -n "$MPI_LOCALRANKID" ]]; then export CUDA_VISIBLE_DEVICES=$MPI_LOCALRANKID fi -# Assumes POCL -export PYOPENCL_TEST="port:nv" - "$@" diff --git a/scripts/run-integrated-tests.sh b/scripts/run-integrated-tests.sh new file mode 100755 index 000000000..c96d867b2 --- /dev/null +++ b/scripts/run-integrated-tests.sh @@ -0,0 +1,154 @@ +#!/bin/bash + +# +# Usage: run-integrated-tests.sh [path_to_mirgecom] +# +# This script is designed to run mirgecom tests and examples. +# Options: +# -e|--examples: Run the examples (default = No) +# -p|--production: Run the production tests (default = No) +# -l|--lazy-accuracy: Run lazy accuracy tests (default = No) +# -b|--batch: Run tests through a batch system (default = No) +# +# Each driver to test is expected to have a smoke test defined in: +# /driver_name_root_/scripts/smoke_test.sh +# +# See https://github.com/illinois-ceesd/drivers_y2-prediction/scripts/smoke_test.sh +# for an example `smoke_test.sh`. +# +do_examples=false +do_lazy_accuracy=false +do_production_tests=false +do_batch_job=false + +all_args="$@" + +NONOPT_ARGS=() +while [[ $# -gt 0 ]]; do + case $1 in + -a|--all) + do_examples=true + do_lazy_accuracy=true + do_production_tests=true + shift + ;; + -e|--examples) + do_examples=true + shift + ;; + -l|--lazy-accuracy) + do_lazy_accuracy=true + shift + ;; + -p|--production) + do_production_tests=true + shift + ;; + -b|--batch) + do_batch_job=true + shift + ;; + -*|--*) + echo "run_integrated_tests: Unknown option $1" + exit 1 + ;; + *) + NONOPT_ARGS+=("$1") + shift + ;; + esac +done + +set -- "${NONOPT_ARGS[@]}" + +origin=$(pwd) +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +printf "Running integrated tests. MIRGE_HOME=${MIRGE_HOME}\n" + +testing_env="${MIRGE_HOME}/scripts/mirge-testing-env.sh" +if [[ -z "$MIRGE_PARALLEL_SPAWNER" ]]; then + printf "Loading MIRGE testing env: ${testing_env}\n" + . ${testing_env} +fi + +declare -i numfail=0 +declare -i numsuccess=0 + +date + +echo "Running tests in ${MIRGE_HOME} ..." + +failed_tests="" +succeeded_tests="" + +if [[ "${do_examples}" = "true" ]]; then + + date + printf "\- Running Examples.\n" + ${MIRGE_HOME}/examples/run_examples.sh ${MIRGE_HOME}/examples + test_result=$? + date + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- Example tests passed." + succeeded_tests="${succeeded_tests} Examples" + else + ((numfail=numfail+1)) + printf "\-\- Example tests failed." + failed_tests="${failed_tests} Examples" + fi +fi + +if [[ "${do_lazy_accuracy}" = "true" ]]; then + + date + printf "\- Testing Lazy Accuracy.\n" + cd ${MIRGE_HOME}/examples + ${MIRGE_HOME}/examples/test_lazy_accuracy.sh + test_result=$? + date + cd - + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- Lazy accuracy tests passed." + succeeded_tests="${succeeded_tests} LazyAccuracy" + else + ((numfail=numfail+1)) + printf "\-\- Lazy accuracy tests failed." + failed_tests="${failed_tests} LazyAccuracy" + fi +fi + +if [[ "${do_production_tests}" = "true" ]]; then + + date + printf "\- Testing production drivers.\n" + ${MIRGE_HOME}/scripts/run-production-tests.sh ${MIRGE_HOME} + test_result=$? + date + if [[ $test_result -eq 0 ]]; then + ((numsuccess=numsuccess+1)) + printf "\-\- Production tests passed." + succeeded_tests="${succeeded_tests} Production" + else + ((numfail=numfail+1)) + printf "\-\- Production tests failed." + failed_tests="${failed_tests} Production" + fi +fi + +if [[ $numfail -eq 0 ]] +then + echo "No failures." +else + echo "Failed tests(${numfail}): ${failed_tests}" +fi + +echo "Successful tests(${numsuccess}): ${succeeded_tests}" + +exit $numfail + diff --git a/scripts/run-production-tests.sh b/scripts/run-production-tests.sh new file mode 100755 index 000000000..4cb596c46 --- /dev/null +++ b/scripts/run-production-tests.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +#set -x +# +# Usage: run-driver-smoke-tests.sh [path_to_mirgecom] [driver_name_root] +# +# This script is designed to run the smoke tests for a collection of +# drivers. The drivers are each expected to be in the path: +# /path_to_mirgecom/driver_name_root_ +# +# Each driver to test is expected to have a smoke test defined in: +# /driver_name_root_/scripts/smoke_test.sh +# +# See https://github.com/illinois-ceesd/drivers_y2-prediction/scripts/smoke_test.sh +# for an example `smoke_test.sh`. +# +origin=$(pwd) +MIRGE_HOME=${1:-"${MIRGE_HOME}"} +if [[ -z "${MIRGE_HOME}" ]]; then + . scripts/mirge-testing-env.sh +fi + +if [[ -z "${MIRGE_PARALLEL_SPAWNER}" ]]; then + source ${MIRGE_HOME}/scripts/mirge-testing-env.sh +fi + +cd ${MIRGE_HOME} + +date + +printf "Running production tests in ${MIRGE_HOME} ...\n" + +if [[ -z "${MIRGE_PRODUCTION_INSTALL}" ]]; then + + printf "... Installing production branch ...\n" + . scripts/merge-install-production-branch.sh + date +fi + +printf "... Installing production drivers ...\n" +. scripts/install-production-drivers.sh +date + +printf "... Running production driver smoke tests ...\n" +. scripts/run-driver-smoke-tests.sh . production_driver + +retval=$? + +printf "Production tests done.\n" +date + +cd ${origin} + +exit $retval + From 6121006ca1968bbc11841a8591b2333bdef240ac Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 19:17:58 -0600 Subject: [PATCH 737/873] debug scripts --- scripts/install-production-drivers.sh | 2 ++ scripts/run-production-tests.sh | 3 +++ 2 files changed, 5 insertions(+) diff --git a/scripts/install-production-drivers.sh b/scripts/install-production-drivers.sh index 7b50279f7..af45bb8d7 100755 --- a/scripts/install-production-drivers.sh +++ b/scripts/install-production-drivers.sh @@ -8,10 +8,12 @@ # PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" # (See the example default value below) # +printf "ipd entry: MIRGE_HOME=${MIRGE_HOME}\n" MIRGE_HOME=${1:-"${MIRGE_HOME}"} if [[ -z "${MIRGE_HOME}" ]]; then . scripts/mirge-testing-env.sh fi +printf "ipd reset: MIRGE_HOME=${MIRGE_HOME}\n" if [[ -z "${PRODUCTION_DRIVERS}" ]]; then source ${MIRGE_HOME}/scripts/production-testing-env.sh diff --git a/scripts/run-production-tests.sh b/scripts/run-production-tests.sh index 4cb596c46..ffd8382d5 100755 --- a/scripts/run-production-tests.sh +++ b/scripts/run-production-tests.sh @@ -15,10 +15,12 @@ # for an example `smoke_test.sh`. # origin=$(pwd) +echo "rpt entry: MIRGE_HOME=${MIRGE_HOME}" MIRGE_HOME=${1:-"${MIRGE_HOME}"} if [[ -z "${MIRGE_HOME}" ]]; then . scripts/mirge-testing-env.sh fi +echo "rpt reset 1: MIRGE_HOME=${MIRGE_HOME}" if [[ -z "${MIRGE_PARALLEL_SPAWNER}" ]]; then source ${MIRGE_HOME}/scripts/mirge-testing-env.sh @@ -36,6 +38,7 @@ if [[ -z "${MIRGE_PRODUCTION_INSTALL}" ]]; then . scripts/merge-install-production-branch.sh date fi +echo "rpt reset 2: MIRGE_HOME=${MIRGE_HOME}" printf "... Installing production drivers ...\n" . scripts/install-production-drivers.sh From e81fb2a1eaa3f3a1d27bf5e4f8fb61f26742f98e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 19:33:31 -0600 Subject: [PATCH 738/873] Debug scripts --- scripts/install-production-drivers.sh | 2 -- scripts/merge-install-production-branch.sh | 2 ++ scripts/run-production-tests.sh | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/install-production-drivers.sh b/scripts/install-production-drivers.sh index af45bb8d7..7b50279f7 100755 --- a/scripts/install-production-drivers.sh +++ b/scripts/install-production-drivers.sh @@ -8,12 +8,10 @@ # PRODUCTION_DRIVERS = ':' delimited list "fork/repo@branch" # (See the example default value below) # -printf "ipd entry: MIRGE_HOME=${MIRGE_HOME}\n" MIRGE_HOME=${1:-"${MIRGE_HOME}"} if [[ -z "${MIRGE_HOME}" ]]; then . scripts/mirge-testing-env.sh fi -printf "ipd reset: MIRGE_HOME=${MIRGE_HOME}\n" if [[ -z "${PRODUCTION_DRIVERS}" ]]; then source ${MIRGE_HOME}/scripts/production-testing-env.sh diff --git a/scripts/merge-install-production-branch.sh b/scripts/merge-install-production-branch.sh index e1e74176e..c2764ba0f 100755 --- a/scripts/merge-install-production-branch.sh +++ b/scripts/merge-install-production-branch.sh @@ -45,12 +45,14 @@ fi git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production +set -e # Merge the production branch for testing the production drivers git merge production/${PRODUCTION_BRANCH} --no-edit # Pick up any requirements.txt pip install -r requirements.txt +set +e set +x export MIRGE_PRODUCTION_INSTALL="${PRODUCTION_FORK}/mirgecom@${PRODUCTION_BRANCH}" diff --git a/scripts/run-production-tests.sh b/scripts/run-production-tests.sh index ffd8382d5..5db10e0f3 100755 --- a/scripts/run-production-tests.sh +++ b/scripts/run-production-tests.sh @@ -15,12 +15,10 @@ # for an example `smoke_test.sh`. # origin=$(pwd) -echo "rpt entry: MIRGE_HOME=${MIRGE_HOME}" MIRGE_HOME=${1:-"${MIRGE_HOME}"} if [[ -z "${MIRGE_HOME}" ]]; then . scripts/mirge-testing-env.sh fi -echo "rpt reset 1: MIRGE_HOME=${MIRGE_HOME}" if [[ -z "${MIRGE_PARALLEL_SPAWNER}" ]]; then source ${MIRGE_HOME}/scripts/mirge-testing-env.sh From e7136c37c3108520b4927bcebf77d887087c78f1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 19:44:13 -0600 Subject: [PATCH 739/873] Add some end of line for prettier prints. --- scripts/run-integrated-tests.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/run-integrated-tests.sh b/scripts/run-integrated-tests.sh index c96d867b2..f93a83003 100755 --- a/scripts/run-integrated-tests.sh +++ b/scripts/run-integrated-tests.sh @@ -94,11 +94,11 @@ if [[ "${do_examples}" = "true" ]]; then date if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) - printf "\-\- Example tests passed." + printf "\-\- Example tests passed.\n" succeeded_tests="${succeeded_tests} Examples" else ((numfail=numfail+1)) - printf "\-\- Example tests failed." + printf "\-\- Example tests failed.\n" failed_tests="${failed_tests} Examples" fi fi @@ -114,11 +114,11 @@ if [[ "${do_lazy_accuracy}" = "true" ]]; then cd - if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) - printf "\-\- Lazy accuracy tests passed." + printf "\-\- Lazy accuracy tests passed.\n" succeeded_tests="${succeeded_tests} LazyAccuracy" else ((numfail=numfail+1)) - printf "\-\- Lazy accuracy tests failed." + printf "\-\- Lazy accuracy tests failed.\n" failed_tests="${failed_tests} LazyAccuracy" fi fi @@ -132,11 +132,11 @@ if [[ "${do_production_tests}" = "true" ]]; then date if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) - printf "\-\- Production tests passed." + printf "\-\- Production tests passed.\n" succeeded_tests="${succeeded_tests} Production" else ((numfail=numfail+1)) - printf "\-\- Production tests failed." + printf "\-\- Production tests failed.\n" failed_tests="${failed_tests} Production" fi fi From d2f804fc88f3a64c7ca8a33e33ff514677d0fd7b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 19:48:44 -0600 Subject: [PATCH 740/873] Merge upstream --- examples/run_examples.sh | 3 +++ scripts/merge-install-production-branch.sh | 2 ++ scripts/run-integrated-tests.sh | 12 ++++++------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/examples/run_examples.sh b/examples/run_examples.sh index f1435f890..bd01794d4 100755 --- a/examples/run_examples.sh +++ b/examples/run_examples.sh @@ -76,6 +76,8 @@ do # rm -rf *vtu *sqlite *pkl *-journal restart_data done ((numtests=numsuccess+numfail)) + +cd ${origin} echo "*** Done running examples!" if [[ $numfail -eq 0 ]] then @@ -85,5 +87,6 @@ else echo "*** Failed tests: ($numfail/$numtests): $failed_examples" fi echo "*** Successful tests: ($numsuccess/$numtests): $succeeded_examples" + exit $numfail #rm -f examples/*.vtu diff --git a/scripts/merge-install-production-branch.sh b/scripts/merge-install-production-branch.sh index e1e74176e..c2764ba0f 100755 --- a/scripts/merge-install-production-branch.sh +++ b/scripts/merge-install-production-branch.sh @@ -45,12 +45,14 @@ fi git remote add production https://github.com/${PRODUCTION_FORK}/mirgecom git fetch production +set -e # Merge the production branch for testing the production drivers git merge production/${PRODUCTION_BRANCH} --no-edit # Pick up any requirements.txt pip install -r requirements.txt +set +e set +x export MIRGE_PRODUCTION_INSTALL="${PRODUCTION_FORK}/mirgecom@${PRODUCTION_BRANCH}" diff --git a/scripts/run-integrated-tests.sh b/scripts/run-integrated-tests.sh index c96d867b2..f93a83003 100755 --- a/scripts/run-integrated-tests.sh +++ b/scripts/run-integrated-tests.sh @@ -94,11 +94,11 @@ if [[ "${do_examples}" = "true" ]]; then date if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) - printf "\-\- Example tests passed." + printf "\-\- Example tests passed.\n" succeeded_tests="${succeeded_tests} Examples" else ((numfail=numfail+1)) - printf "\-\- Example tests failed." + printf "\-\- Example tests failed.\n" failed_tests="${failed_tests} Examples" fi fi @@ -114,11 +114,11 @@ if [[ "${do_lazy_accuracy}" = "true" ]]; then cd - if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) - printf "\-\- Lazy accuracy tests passed." + printf "\-\- Lazy accuracy tests passed.\n" succeeded_tests="${succeeded_tests} LazyAccuracy" else ((numfail=numfail+1)) - printf "\-\- Lazy accuracy tests failed." + printf "\-\- Lazy accuracy tests failed.\n" failed_tests="${failed_tests} LazyAccuracy" fi fi @@ -132,11 +132,11 @@ if [[ "${do_production_tests}" = "true" ]]; then date if [[ $test_result -eq 0 ]]; then ((numsuccess=numsuccess+1)) - printf "\-\- Production tests passed." + printf "\-\- Production tests passed.\n" succeeded_tests="${succeeded_tests} Production" else ((numfail=numfail+1)) - printf "\-\- Production tests failed." + printf "\-\- Production tests failed.\n" failed_tests="${failed_tests} Production" fi fi From d01505ab60aad5f9d76429c9357dbf920696d2f4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 13 Nov 2022 20:01:18 -0600 Subject: [PATCH 741/873] remove debugging print --- scripts/run-production-tests.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/run-production-tests.sh b/scripts/run-production-tests.sh index 5db10e0f3..4cb596c46 100755 --- a/scripts/run-production-tests.sh +++ b/scripts/run-production-tests.sh @@ -36,7 +36,6 @@ if [[ -z "${MIRGE_PRODUCTION_INSTALL}" ]]; then . scripts/merge-install-production-branch.sh date fi -echo "rpt reset 2: MIRGE_HOME=${MIRGE_HOME}" printf "... Installing production drivers ...\n" . scripts/install-production-drivers.sh From eca598c1ea22c6a03bcb159c3f83fcdf2cc17e84 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 16 Nov 2022 07:47:11 -0600 Subject: [PATCH 742/873] Testing Python 3.11 (#801) Co-authored-by: Matthias Diener --- .rtd-env-py3.yml | 2 +- conda-env.yml | 2 +- mirgecom/fluid.py | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.rtd-env-py3.yml b/.rtd-env-py3.yml index 109a68408..6cedfc986 100644 --- a/.rtd-env-py3.yml +++ b/.rtd-env-py3.yml @@ -4,7 +4,7 @@ channels: - conda-forge - nodefaults dependencies: -- python=3.9 +- python=3.11 - mpi4py - islpy - pip diff --git a/conda-env.yml b/conda-env.yml index 6b96edb87..c107727fb 100644 --- a/conda-env.yml +++ b/conda-env.yml @@ -18,7 +18,7 @@ dependencies: - oct2py - pyopencl - pymetis -- python=3.9 +- python=3.11 - pip - pytest - pylint diff --git a/mirgecom/fluid.py b/mirgecom/fluid.py index 87084bc67..50b8d45a3 100644 --- a/mirgecom/fluid.py +++ b/mirgecom/fluid.py @@ -38,7 +38,7 @@ """ import numpy as np # noqa from meshmode.dof_array import DOFArray # noqa -from dataclasses import dataclass, fields +from dataclasses import dataclass, fields, field from arraycontext import ( dataclass_array_container, with_container_arithmetic, @@ -219,7 +219,8 @@ class ConservedVars: mass: DOFArray energy: DOFArray momentum: np.ndarray - species_mass: np.ndarray = np.empty((0,), dtype=object) # empty = immutable + species_mass: np.ndarray = field( + default_factory=lambda: np.empty((0,), dtype=object)) # empty = immutable @property def array_context(self): From 6d2d77c81cebff36f3c06e18c8d435877b8c4a3c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 17 Nov 2022 17:17:57 -0600 Subject: [PATCH 743/873] Sharpen the documentation for thermochem. --- mirgecom/thermochemistry.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index 3ccd37058..b7ed3a14b 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -1,5 +1,23 @@ r""":mod:`mirgecom.thermochemistry` provides a wrapper class for :mod:`pyrometheus`.. +This module provides an interface to the +`Pyrometheus Thermochemistry `_ package's +:class:`pyrometheus.Thermochemistry` object which provides a thermal and chemical +kinetics model for the the :class:`mirgecom.eos.MixtureEOS`, and some helper +routines to create the wrapper class. + + .. note:: + The wrapper addresses a couple of issues with the default interface: + + - Lazy eval is currently incapable of dealing with data-dependent + behavior (like that of an iterative Newton solve). This wrapper allows us to + hard-code the number of Newton iterations to *temperature_niter*. + + - Small species mass fractions can trigger reaction rates which drive species + fractions significantly negative over a single timestep. The wrapper provides + the *zero_level* parameter to set concentrations falling below *zero_level* + to be pinned to zero. + .. autofunction:: get_pyrometheus_wrapper_class .. autofunction:: get_pyrometheus_wrapper_class_from_cantera .. autofunction:: get_thermochemistry_class_by_mechanism_name @@ -38,11 +56,12 @@ def get_pyrometheus_wrapper_class(pyro_class, temperature_niter=5, zero_level=0. to adapt it to :mod:`mirgecom`'s needs. - get_concentrations: overrides :class:`pyrometheus.Thermochemistry` version - of the same function, pinning any negative concentrations due to slightly - negative massfractions (which are OK) back to 0. + of the same function, pinning any concentrations less than the *zero_level* + due to small or slightly negative massfractions (which are OK) back to 0. - get_temperature: MIRGE-specific interface to use a hard-coded Newton solver - to find a temperature from an input state. + to find a temperature from an input state. This routine hard-codes the number + of Newton solve iterations to *temperature_niter*. Parameters ---------- From abf5a0c83a1344b7c7fc0aedfbe01d3c2b845e86 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 2 Dec 2022 12:09:45 -0600 Subject: [PATCH 744/873] Default to NOT numerical flux funcs at bnd, pass correct BC state for gradient calcs. --- mirgecom/boundary.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index e12bb4688..fbc3beb51 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -67,6 +67,10 @@ from abc import ABCMeta, abstractmethod +def _ldg_bnd_flux_for_grad(internal_quantity, external_quantity): + return external_quantity + + class FluidBoundary(metaclass=ABCMeta): r"""Abstract interface to fluid boundary treatment. @@ -309,7 +313,8 @@ def __init__(self, if not self._bnd_temperature_func: self._bnd_temperature_func = self._temperature_for_prescribed_state if not self._grad_num_flux_func: - self._grad_num_flux_func = num_flux_central + # self._grad_num_flux_func = num_flux_central + self._grad_num_flux_func = _ldg_bnd_flux_for_grad if not self._cv_gradient_flux_func: self._cv_gradient_flux_func = self._gradient_flux_for_prescribed_cv @@ -1001,7 +1006,7 @@ def isothermal_wall_state( self, dcoll, dd_bdry, gas_model, state_minus, **kwargs): """Return state with zero-velocity and the respective internal energy.""" temperature_wall = self._wall_temp + 0*state_minus.mass_density - mom_plus = state_minus.mass_density*0.*state_minus.velocity + mom_plus = 0.*state_minus.momentum_density mass_frac_plus = state_minus.species_mass_fractions internal_energy_plus = gas_model.eos.get_internal_energy( @@ -1111,7 +1116,7 @@ class AdiabaticNoslipWallBoundary(PrescribedFluidBoundary): def __init__(self): """Initialize the boundary condition object.""" PrescribedFluidBoundary.__init__( - self, boundary_state_func=self.adiabatic_wall_state_for_advection, + self, boundary_state_func=self.adiabatic_wall_state_for_diffusion, inviscid_flux_func=self.inviscid_wall_flux, viscous_flux_func=self.viscous_wall_flux, boundary_temperature_func=self.temperature_bc, @@ -1121,7 +1126,6 @@ def __init__(self): def adiabatic_wall_state_for_advection(self, dcoll, dd_bdry, gas_model, state_minus, **kwargs): """Return state with zero-velocity.""" - dd_bdry = as_dofdesc(dd_bdry) mom_plus = -state_minus.momentum_density cv_plus = make_conserved( state_minus.dim, mass=state_minus.mass_density, @@ -1162,6 +1166,9 @@ def temperature_bc(self, state_minus, **kwargs): def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): """Return grad(CV) to be used in the boundary calculation of viscous flux.""" + # Note we don't need to tweak grad(rhoE) here as it is unused. + # Tweaks to grad(rhoV) (i.e. grad(V)) are ineffective as we have V=0 at + # the wall grad_species_mass_plus = 1.*grad_cv_minus.species_mass if state_minus.nspecies > 0: from mirgecom.fluid import species_mass_fraction_gradient @@ -1252,7 +1259,7 @@ class SymmetryBoundary(PrescribedFluidBoundary): def __init__(self): """Initialize the boundary condition object.""" PrescribedFluidBoundary.__init__( - self, boundary_state_func=self.adiabatic_wall_state_for_advection, + self, boundary_state_func=self.adiabatic_wall_state_for_diffusion, inviscid_flux_func=self.inviscid_wall_flux, viscous_flux_func=self.viscous_wall_flux, boundary_temperature_func=self.temperature_bc, @@ -1359,6 +1366,7 @@ def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): # the energy has to be modified accordingly: # first, get gradient of internal energy, i.e., no kinetic energy + # MTC: I think this is unneeded; these terms are unused in the flux calc grad_int_energy_minus = grad_cv_minus.energy \ - 0.5*(np.dot(v_minus, v_minus)*grad_cv_minus.mass + 2.0*state_minus.mass_density * np.dot(v_minus, grad_v_minus)) From 3a9b975975505abe12080a50ed22cadc2603d86e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 13 Dec 2022 09:44:06 -0600 Subject: [PATCH 745/873] Add rot mat util, test --- mirgecom/boundary.py | 20 +++++++++++++++++--- test/test_bc.py | 23 ++++++++++++++++++++++- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 7f32fe7d6..f8f722d57 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -74,7 +74,8 @@ def _ldg_bnd_flux_for_grad(internal_quantity, external_quantity): return external_quantity -def _get_normal_axes(actx, seed_vector): +def _get_normal_axes(seed_vector): + actx = get_container_context_recursively(seed_vector) vec_dim, = seed_vector.shape vec_mag = actx.np.sqrt(np.dot(seed_vector, seed_vector)) @@ -116,6 +117,20 @@ def _get_normal_axes(actx, seed_vector): return seed_vector, vector_2, vector_3 +def _get_rotation_matrix(principal_direction): + principal_axes = _get_normal_axes(principal_direction) + dim, = principal_direction.shape + comps = [] + + for d in range(dim): + axis = principal_axes[d] + for i in range(dim): + comps.append(axis[i]) + + comps = make_obj_array(comps) + return comps.reshape(dim, dim) + + class FluidBoundary(metaclass=ABCMeta): r"""Abstract interface to fluid boundary treatment. @@ -1571,7 +1586,6 @@ def temperature_bc(self, state_minus, **kwargs): def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): """Return grad(CV) to be used in the boundary calculation of viscous flux.""" - actx = state_minus.array_context dim = state_minus.dim grad_species_mass_plus = 1.*grad_cv_minus.species_mass @@ -1637,7 +1651,7 @@ def grad_cv_bc(self, state_minus, grad_cv_minus, normal, **kwargs): if dim == 3: - normal_set = _get_normal_axes(actx, normal) + normal_set = _get_normal_axes(normal) n_1_x = normal_set[0][0] n_1_y = normal_set[0][1] diff --git a/test/test_bc.py b/test/test_bc.py index 1fbaeca0c..b32d81264 100644 --- a/test/test_bc.py +++ b/test/test_bc.py @@ -28,6 +28,7 @@ import numpy.linalg as la # noqa import logging import pytest +from pytools.obj_array import make_obj_array from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from meshmode.discretization.connection import FACE_RESTR_ALL @@ -73,7 +74,7 @@ def test_normal_axes_utility(actx_factory, dim): dcoll = create_discretization_collection(actx, mesh, order=order) nodes = actx.thaw(dcoll.nodes()) normal_vectors = nodes / actx.np.sqrt(np.dot(nodes, nodes)) - normal_set = gna(actx, normal_vectors) + normal_set = gna(normal_vectors) nset = len(normal_set) assert nset == dim @@ -93,6 +94,26 @@ def vec_norm(vec, p=2): norm_comp = np.dot(normal_set[i], normal_set[next_index]) assert vec_norm(norm_comp, np.inf) < tol + if dim == 2: + rmat_exp = make_obj_array([normal_set[0][0], normal_set[0][1], + normal_set[1][0], normal_set[1][1]]) + else: + rmat_exp = make_obj_array( + [normal_set[0][0], normal_set[0][1], normal_set[0][2], + normal_set[1][0], normal_set[1][1], normal_set[1][2], + normal_set[2][0], normal_set[2][1], normal_set[2][2]]) + rmat_exp = rmat_exp.reshape(dim, dim) + print(f"{rmat_exp=}") + + from mirgecom.boundary import _get_rotation_matrix as grm + rotation_matrix = grm(normal_vectors) + print(f"{rotation_matrix.shape}") + print(f"{rotation_matrix=}") + print(f"{rmat_exp - rotation_matrix=}") + + resid = rmat_exp - rotation_matrix + assert vec_norm(resid).all() == 0 + @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("flux_func", [inviscid_facial_flux_rusanov, From 1ccc684144230b81963e90e73f4da12eb40b739b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 13 Dec 2022 10:54:00 -0600 Subject: [PATCH 746/873] Update docs for new boundary routine. --- doc/discretization.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/discretization.rst b/doc/discretization.rst index a87a6b451..71489083e 100644 --- a/doc/discretization.rst +++ b/doc/discretization.rst @@ -293,7 +293,7 @@ and :mod:`~mirgecom.navierstokes`, go to calculate the flux for the divergence o inviscid physical transport fluxes, they call the :meth:`~mirgecom.boundary.FluidBoundary.inviscid_divergence_flux` function, which for this adiabatic slip boundary, sets the boundary state, $\b{Q}^+$ by calling -:meth:`~mirgecom.boundary.AdiabaticSlipBoundary.adiabatic_slip_state`, and returns the +:meth:`~mirgecom.boundary.AdiabaticSlipBoundary.adiabatic_slip_wall_state`, and returns the numerical flux ${h}^*_e = h_{e}(\b{Q}^-, \b{Q}^+)$. From d266300323a50a7aeebbdfb61967cb27fabb1e36 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Jan 2023 16:25:56 -0600 Subject: [PATCH 747/873] Merge with current main, multiply by RT for species enthalpies --- mirgecom/eos.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index c0648f010..72d32fd4d 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -742,7 +742,9 @@ def get_species_molecular_weights(self): def species_enthalpies(self, cv: ConservedVars, temperature): """Get the species specific enthalpies.""" - return self._pyrometheus_mech.get_species_enthalpies_rt(temperature) + spec_r = self.gas_const(cv)/self._pyrometheus_mech.wts + return (spec_r * temperature + * self._pyrometheus_mech.get_species_enthalpies_rt(temperature)) def get_production_rates(self, cv: ConservedVars, temperature): r"""Get the production rate for each species. From bf787983426fdf57235afc5c9461133799e018ef Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 3 Jan 2023 16:47:58 -0600 Subject: [PATCH 748/873] Use universal gas constant not mixture R. --- mirgecom/eos.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 72d32fd4d..2aca152d9 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -742,7 +742,7 @@ def get_species_molecular_weights(self): def species_enthalpies(self, cv: ConservedVars, temperature): """Get the species specific enthalpies.""" - spec_r = self.gas_const(cv)/self._pyrometheus_mech.wts + spec_r = self._pyrometheus_mech.gas_constant/self._pyrometheus_mech.wts return (spec_r * temperature * self._pyrometheus_mech.get_species_enthalpies_rt(temperature)) From 07454d57c5e6ae409babfd2cc2b1f83fcbb3340b Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 4 Jan 2023 09:49:08 -0600 Subject: [PATCH 749/873] Add diffusive correction velocity. --- mirgecom/viscous.py | 14 ++++++++++---- test/test_viscous.py | 5 ++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index 08674f9b1..addd88b6f 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -105,8 +105,9 @@ def viscous_stress_tensor(state, grad_cv): # low level routine works with numpy arrays and can be tested without # a full grid + fluid state, etc -def _compute_diffusive_flux(density, d_alpha, grad_y): - return -density*d_alpha.reshape(-1, 1)*grad_y +def _compute_diffusive_flux(density, d_alpha, y, grad_y): + return -density*(d_alpha.reshape(-1, 1)*grad_y + - y*sum(d_alpha.reshape(-1, 1)*grad_y)) def diffusive_flux(state, grad_cv): @@ -138,8 +139,13 @@ def diffusive_flux(state, grad_cv): The species diffusive flux vector, $\mathbf{J}_{\alpha}$ """ - return _compute_diffusive_flux(state.mass_density, state.species_diffusivity, - species_mass_fraction_gradient(state.cv, grad_cv)) + grad_y = species_mass_fraction_gradient(state.cv, grad_cv) + rho = state.mass_density + d = state.species_diffusivity + y = state.species_mass_fractions + if state.is_mixture: + return _compute_diffusive_flux(rho, d, y, grad_y) + return -rho*(d.reshape(-1, 1)*grad_y) # dummy quantity with right shape # low level routine works with numpy arrays and can be tested without diff --git a/test/test_viscous.py b/test/test_viscous.py index 1b156b3e9..6b656b282 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -203,7 +203,7 @@ def cv_flux_boundary(dd_bdry): nodes = actx.thaw(dcoll.nodes()) def inf_norm(x): - return actx.to_numpy(op.norm(dcoll, x, np.inf)) + return actx.to_numpy(op.norm(dcoll, x, np.inf)) # noqa # compute max element size from grudge.dt_utils import h_max_from_volume @@ -409,9 +409,12 @@ def test_diffusive_heat_flux(actx_factory): mu_b = 1.0 mu = 0.5 kappa = 5.0 + # assemble d_alpha so that every species has a unique j d_alpha = np.array([(ispec+1) for ispec in range(nspecies)]) + # h_alpha = np.array([1./(ispec+1) for ispec in range(nspecies)]) + tv_model = SimpleTransport(bulk_viscosity=mu_b, viscosity=mu, thermal_conductivity=kappa, species_diffusivity=d_alpha) From 9ece71184f484553dbee99ee50efdee59e413a95 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 4 Jan 2023 15:11:41 -0600 Subject: [PATCH 750/873] Update docs and Tulio,s outer fix. --- doc/fluid.rst | 3 ++- mirgecom/viscous.py | 20 ++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/doc/fluid.rst b/doc/fluid.rst index 546e63fa0..0026f67be 100644 --- a/doc/fluid.rst +++ b/doc/fluid.rst @@ -113,7 +113,8 @@ Diffusive flux The species diffusive fluxes are given by: $$ -\b{J}_{\alpha} = -\rho{d}_{(\alpha)}\nabla{Y}_{\alpha}, +\b{J}_{\alpha} = -\rho\left({d}_{(\alpha)}\nabla{Y}_{(\alpha)}-Y_{(\alpha)}d_{\alpha} +\nabla{Y}_{\alpha}\right), $$ with gas density $\rho$, species diffusivities ${d}_{\alpha}$, and diff --git a/mirgecom/viscous.py b/mirgecom/viscous.py index addd88b6f..2b03ecc47 100644 --- a/mirgecom/viscous.py +++ b/mirgecom/viscous.py @@ -46,6 +46,7 @@ import numpy as np from grudge.trace_pair import TracePair +from arraycontext import outer from meshmode.dof_array import DOFArray from meshmode.discretization.connection import FACE_RESTR_ALL from grudge.dof_desc import ( @@ -107,7 +108,7 @@ def viscous_stress_tensor(state, grad_cv): # a full grid + fluid state, etc def _compute_diffusive_flux(density, d_alpha, y, grad_y): return -density*(d_alpha.reshape(-1, 1)*grad_y - - y*sum(d_alpha.reshape(-1, 1)*grad_y)) + - outer(y, sum(d_alpha.reshape(-1, 1)*grad_y))) def diffusive_flux(state, grad_cv): @@ -117,11 +118,12 @@ def diffusive_flux(state, grad_cv): .. math:: - \mathbf{J}_{\alpha} = -\rho{d}_{(\alpha)}\nabla{Y_{\alpha}}~~ - (\mathtt{no~implied~sum}), + \mathbf{J}_{\alpha} = -\rho\left({d}_{(\alpha)}\nabla{Y_{\alpha}} + -Y_{(\alpha)}{d}_{\alpha}\nabla{Y_{\alpha}}\right), - with species diffusivities ${d}_{\alpha}$, and species mass - fractions ${Y}_{\alpha}$. + with gas density $\rho$, species diffusivities ${d}_{\alpha}$, and + species mass fractions ${Y}_{\alpha}$. The parens $(\alpha)$ indicate no sum + over repeated indices is to be performed. Parameters ---------- @@ -201,13 +203,7 @@ def diffusive_heat_flux(state, j): \mathbf{J}_{\alpha}, with species specific enthalpy ${h}_{\alpha}$ and diffusive flux - ($\mathbf{J}_{\alpha}$) defined as: - - .. math:: - - \mathbf{J}_{\alpha} = -\rho{d}_{\alpha}\nabla{Y}_{\alpha}, - - where ${Y}_{\alpha}$ is the vector of species mass fractions. + ,$\mathbf{J}_{\alpha}$. Parameters ---------- From 05c0e6f40a8141b27996a8d22a5346d761cb8c9e Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 5 Jan 2023 18:05:46 -0600 Subject: [PATCH 751/873] Bring back POCL_DEBUG for some Porter tests. --- examples/test_lazy_accuracy.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/test_lazy_accuracy.sh b/examples/test_lazy_accuracy.sh index 5ba5785d5..25cc4c274 100755 --- a/examples/test_lazy_accuracy.sh +++ b/examples/test_lazy_accuracy.sh @@ -4,6 +4,8 @@ set -x set -e set -o pipefail +export POCL_DEBUG=cuda + test_list="vortex-mpi.py pulse-mpi.py" for file in ${test_list} do From d86176d72666ff85fdfaa0830079893106e15c1f Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 10 Jan 2023 13:57:46 -0600 Subject: [PATCH 752/873] debug CI failure --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index dfb3dd7b8..f5ce43b67 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -146,7 +146,7 @@ jobs: - name: Install emirge run: | [[ $(uname) == Linux ]] && sudo apt-get update && sudo apt-get install -y openmpi-bin libopenmpi-dev - [[ $(uname) == Darwin ]] && brew update && brew install mpich + [[ $(uname) == Darwin ]] && brew upgrade && brew install mpich cd .. git clone https://github.com/illinois-ceesd/emirge cd emirge From ea73350a1586013b221226cec6449094ebd1d551 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 10 Jan 2023 15:03:39 -0600 Subject: [PATCH 753/873] Apply (MD)s fix to installation issue. --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 01192b6d5..69b88ce1b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -174,7 +174,7 @@ jobs: - name: Prepare production environment run: | [[ $(uname) == Linux ]] && [[ $(hostname) != "porter" ]] && sudo apt-get update && sudo apt-get install -y openmpi-bin libopenmpi-dev - [[ $(uname) == Darwin ]] && brew update && brew install mpich + [[ $(uname) == Darwin ]] && brew upgrade && brew install mpich MIRGEDIR=$(pwd) cat scripts/production-testing-env.sh . scripts/production-testing-env.sh From bbcebe7c53206a9f512de8c4bfe17fbdb0a2db6d Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 10 Jan 2023 15:18:42 -0600 Subject: [PATCH 754/873] Fix the production test too. --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f5ce43b67..8064434fd 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -174,7 +174,7 @@ jobs: - name: Prepare production environment run: | [[ $(uname) == Linux ]] && [[ $(hostname) != "porter" ]] && sudo apt-get update && sudo apt-get install -y openmpi-bin libopenmpi-dev - [[ $(uname) == Darwin ]] && brew update && brew install mpich + [[ $(uname) == Darwin ]] && brew upgrade && brew install mpich MIRGEDIR=$(pwd) cat scripts/production-testing-env.sh . scripts/production-testing-env.sh From e1f19c948776da55c9add14a6130106c08176b16 Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Thu, 19 Jan 2023 19:40:50 -0800 Subject: [PATCH 755/873] remove tag_to_elements argument from geometric_mesh_partitioner tag_to_elements is problem-specific, so probably not likely that this could be used in a general way --- mirgecom/simutil.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index b296f541a..651e9e55f 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -433,9 +433,9 @@ def max_component_norm(dcoll, fields, order=np.inf, *, dd=DD_VOLUME_ALL): componentwise_norms(dcoll, fields, order, dd=dd), actx))) -def geometric_mesh_partitioner(mesh, num_ranks=1, *, tag_to_elements=None, - nranks_per_axis=None, auto_balance=False, - imbalance_tolerance=.01, debug=False): +def geometric_mesh_partitioner(mesh, num_ranks=1, *, nranks_per_axis=None, + auto_balance=False, imbalance_tolerance=.01, + debug=False): """Partition a mesh uniformly along the X coordinate axis. The intent is to partition the mesh uniformly along user-specified @@ -448,8 +448,6 @@ def geometric_mesh_partitioner(mesh, num_ranks=1, *, tag_to_elements=None, The serial mesh to partition num_ranks: int The number of partitions to make - tag_to_elements: - Maps volume tags to elements. Currently unused. nranks_per_axis: numpy.ndarray How many partitions per specified axis. Currently unused. auto_balance: bool From 89fa40c40086823f3ed6db574d97c7de6bb434fa Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Fri, 20 Jan 2023 08:35:13 -0800 Subject: [PATCH 756/873] change grudge branch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index bd0aacfb3..7321408ab 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode ---editable git+https://github.com/majosm/grudge.git@coupled-volumes#egg=grudge +--editable git+https://github.com/majosm/grudge.git@production#egg=grudge --editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 10dadfffd78a1113498be7f33ffcfe2ac69c2301 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sat, 21 Jan 2023 08:14:33 -0600 Subject: [PATCH 757/873] Enable mypy (#825) Co-authored-by: Matthias Diener --- .github/workflows/ci.yaml | 19 ++++++ mirgecom/eos.py | 16 ++--- mirgecom/gas_model.py | 4 +- mirgecom/logging_quantities.py | 17 +++--- mirgecom/mpi.py | 4 +- mirgecom/profiling.py | 42 ++++++++----- mirgecom/simutil.py | 4 +- mirgecom/transport.py | 25 ++++---- mirgecom/utils.py | 10 ++-- setup.cfg | 42 +++++++++++++ test/lazy_pyro_test.py | 106 --------------------------------- 11 files changed, 130 insertions(+), 159 deletions(-) delete mode 100644 test/lazy_pyro_test.py diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 21fbf5f2c..c7b414d33 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,6 +27,25 @@ jobs: python -m pip install flake8 pep8-naming flake8-quotes flake8-bugbear python -m flake8 --show-source --statistics "$(basename $GITHUB_REPOSITORY)" test examples setup.py doc/conf.py bin/ && echo "Flake8 found no errors." + mypy: + name: Mypy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Install + run: | + . .ci-support/install.sh + - name: Run mypy + run: | + MINIFORGE_INSTALL_DIR=.miniforge3 + . "$MINIFORGE_INSTALL_DIR/bin/activate" testing + python -m pip install types-psutil types-PyYAML + ./run-mypy.sh + pylint: name: Pylint runs-on: ubuntu-latest diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 36d2e29bc..abf0de2de 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -140,7 +140,7 @@ def heat_capacity_cp(self, cv: ConservedVars, temperature: DOFArray): r"""Get the specific heat capacity at constant pressure ($C_p$).""" @abstractmethod - def heat_capacity_cv(self, cv: ConservedVars): + def heat_capacity_cv(self, cv: ConservedVars, temperature: DOFArray): r"""Get the specific heat capacity at constant volume ($C_v$).""" @abstractmethod @@ -157,7 +157,7 @@ def kinetic_energy(self, cv: ConservedVars): """Get the kinetic energy for the gas.""" @abstractmethod - def gamma(self, cv: ConservedVars, temperature=None): + def gamma(self, cv: ConservedVars, temperature: DOFArray = None): """Get the ratio of gas specific heats Cp/Cv.""" @abstractmethod @@ -234,7 +234,7 @@ def get_production_rates(self, cv: ConservedVars, temperature: DOFArray): """Get the production rate for each species.""" @abstractmethod - def get_species_source_terms(self, cv: ConservedVars): + def get_species_source_terms(self, cv: ConservedVars, temperature: DOFArray): r"""Get the species mass source terms to be used on the RHS for chemistry.""" def dependent_vars( @@ -291,11 +291,11 @@ def __init__(self, gamma=1.4, gas_const=287.1): self._gamma = gamma self._gas_const = gas_const - def gamma(self, cv: ConservedVars = None, temperature=None): + def gamma(self, cv: Optional[ConservedVars] = None, temperature=None): """Get specific heat ratio Cp/Cv.""" return self._gamma - def heat_capacity_cp(self, cv: ConservedVars = None, temperature=None): + def heat_capacity_cp(self, cv: Optional[ConservedVars] = None, temperature=None): r"""Get specific heat capacity at constant pressure. Parameters @@ -307,7 +307,7 @@ def heat_capacity_cp(self, cv: ConservedVars = None, temperature=None): """ return self._gas_const * self._gamma / (self._gamma - 1) - def heat_capacity_cv(self, cv: ConservedVars = None, temperature=None): + def heat_capacity_cv(self, cv: Optional[ConservedVars] = None, temperature=None): r"""Get specific heat capacity at constant volume. Parameters @@ -319,7 +319,7 @@ def heat_capacity_cv(self, cv: ConservedVars = None, temperature=None): """ return self._gas_const / (self._gamma - 1) - def gas_const(self, cv: ConservedVars = None): + def gas_const(self, cv: Optional[ConservedVars] = None): """Get specific gas constant R.""" return self._gas_const @@ -623,7 +623,7 @@ def heat_capacity_cv(self, cv: ConservedVars, temperature): / self.gamma(cv, temperature) ) - def gamma(self, cv: ConservedVars, temperature): + def gamma(self, cv: ConservedVars, temperature): # type: ignore[override] r"""Get mixture-averaged heat capacity ratio, $\frac{C_p}{C_p - R_s}$. Parameters diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 53937808a..198793211 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -71,6 +71,8 @@ ) from mirgecom.utils import normalize_boundaries +from typing import Optional + @dataclass(frozen=True) class GasModel: @@ -87,7 +89,7 @@ class GasModel: """ eos: GasEOS - transport: TransportModel = None + transport: Optional[TransportModel] = None @dataclass_array_container diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index c8fff089f..2aecb8bbc 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -55,7 +55,7 @@ def initialize_logmgr(enable_logmgr: bool, - filename: str = None, mode: str = "wu", + filename: Optional[str] = None, mode: str = "wu", mpi_comm=None) -> LogManager: """Create and initialize a mirgecom-specific :class:`logpyle.LogManager`.""" if not enable_logmgr: @@ -129,7 +129,8 @@ def logmgr_add_many_discretization_quantities(logmgr: LogManager, dcoll, dim, # {{{ Package versions -def add_package_versions(mgr: LogManager, path_to_version_sh: str = None) -> None: +def add_package_versions(mgr: LogManager, path_to_version_sh: Optional[str] = None) \ + -> None: """Add the output of the emirge version.sh script to the log. Parameters @@ -231,7 +232,7 @@ def __init__(self, extract_vars_for_logging: Callable): state. """ self.extract_state_vars = extract_vars_for_logging - self.state_vars = None + self.state_vars: Optional[np.ndarray] = None def set_state_vars(self, state_vars: np.ndarray) -> None: """Update the state vector of the object.""" @@ -273,7 +274,7 @@ class DiscretizationBasedQuantity(PostLogQuantity, StateConsumer): """ def __init__(self, dcoll: DiscretizationCollection, quantity: str, op: str, - extract_vars_for_logging, units_logging, name: str = None, + extract_vars_for_logging, units_logging, name: Optional[str] = None, axis: Optional[int] = None, dd=DD_VOLUME_ALL): unit = units_logging(quantity) @@ -380,7 +381,7 @@ class PythonMemoryUsage(PostLogQuantity): Uses :mod:`psutil` to track memory usage. Virtually no overhead. """ - def __init__(self, name: str = None): + def __init__(self, name: Optional[str] = None): if name is None: name = "memory_usage_python" @@ -398,7 +399,7 @@ def __call__(self) -> float: class DeviceMemoryUsage(PostLogQuantity): """Logging support for GPU memory usage (Nvidia only currently).""" - def __init__(self, name: str = None) -> None: + def __init__(self, name: Optional[str] = None) -> None: if name is None: name = "memory_usage_gpu" @@ -413,11 +414,11 @@ def __init__(self, name: str = None) -> None: # See https://gist.github.com/f0k/63a664160d016a491b2cbea15913d549#gistcomment-3654335 # noqa # on why this calls cuMemGetInfo_v2 and not cuMemGetInfo libcuda = ctypes.cdll.LoadLibrary("libcuda.so") - self.mem_func = libcuda.cuMemGetInfo_v2 + self.mem_func: Optional[Callable] = libcuda.cuMemGetInfo_v2 except OSError: self.mem_func = None - def __call__(self) -> float: + def __call__(self) -> Optional[float]: """Return the memory usage in MByte.""" if self.mem_func is None: return None diff --git a/mirgecom/mpi.py b/mirgecom/mpi.py index de292ba1d..996f94d17 100644 --- a/mirgecom/mpi.py +++ b/mirgecom/mpi.py @@ -199,6 +199,6 @@ def rank_print(*args, **kwargs): __builtins__["oldprint"](out_str, *args, **kwargs) - if "oldprint" not in __builtins__: - __builtins__["oldprint"] = __builtins__["print"] + if "oldprint" not in __builtins__: # type: ignore[operator] + __builtins__["oldprint"] = __builtins__["print"] # type: ignore[index] __builtins__["print"] = rank_print diff --git a/mirgecom/profiling.py b/mirgecom/profiling.py index 8933a247a..b396daaa5 100644 --- a/mirgecom/profiling.py +++ b/mirgecom/profiling.py @@ -35,6 +35,8 @@ from mirgecom.logging_quantities import KernelProfile from mirgecom.utils import StatisticsAccumulator +from typing import List, Dict, Optional + __doc__ = """ .. autoclass:: PyOpenCLProfilingArrayContext .. autoclass:: SingleCallKernelProfile @@ -49,7 +51,7 @@ class SingleCallKernelProfile: time: int flops: int bytes_accessed: int - footprint_bytes: int + footprint_bytes: Optional[int] @dataclass @@ -99,13 +101,14 @@ def __init__(self, queue, allocator=None, logmgr: LogManager = None) -> None: "cl.command_queue_properties.PROFILING_ENABLE.") # list of ProfileEvents that haven't been transferred to profiled results yet - self.profile_events = [] + self.profile_events: List[ProfileEvent] = [] - # dict of kernel name -> SingleCallKernelProfile results - self.profile_results = {} + # dict of kernel name -> list of SingleCallKernelProfile results + self.profile_results: Dict[str, List[SingleCallKernelProfile]] = {} # dict of (Kernel, args_tuple) -> calculated number of flops, bytes - self.kernel_stats = {} + self.kernel_stats: Dict[lp.TranslationUnit, + Dict[tuple, SingleCallKernelProfile]] = {} self.logmgr = logmgr # Only store the first kernel exec hook for elwise kernels @@ -199,7 +202,8 @@ def get_profiling_data_for_kernel(self, kernel_name: str) \ time.add_value(r.time) gflops.add_value(r.flops) gbytes_accessed.add_value(r.bytes_accessed) - fprint_gbytes.add_value(r.footprint_bytes) + if r.footprint_bytes is not None: + fprint_gbytes.add_value(r.footprint_bytes) return MultiCallKernelProfile(num_calls, time, gflops, gbytes_accessed, fprint_gbytes) @@ -215,18 +219,18 @@ def tabulate_profiling_data(self) -> pytools.Table: tbl = pytools.Table() # Table header - tbl.add_row(["Function", "Calls", + tbl.add_row(("Function", "Calls", "Time_sum [s]", "Time_min [s]", "Time_avg [s]", "Time_max [s]", "GFlops/s_min", "GFlops/s_avg", "GFlops/s_max", "BWAcc_min [GByte/s]", "BWAcc_mean [GByte/s]", "BWAcc_max [GByte/s]", "BWFoot_min [GByte/s]", "BWFoot_mean [GByte/s]", "BWFoot_max [GByte/s]", - "Intensity (flops/byte)"]) + "Intensity (flops/byte)")) # Precision of results g = ".4g" total_calls = 0 - total_time = 0 + total_time = 0.0 for knl in self.profile_results.keys(): r = self.get_profiling_data_for_kernel(knl) @@ -244,9 +248,11 @@ def tabulate_profiling_data(self) -> pytools.Table: total_calls += r.num_calls - total_time += r.time.sum() + t_sum = r.time.sum() + if t_sum is not None: + total_time += t_sum - time_sum = f"{r.time.sum():{g}}" + time_sum = f"{t_sum:{g}}" time_min = f"{r.time.min():{g}}" time_avg = f"{r.time.mean():{g}}" time_max = f"{r.time.max():{g}}" @@ -260,8 +266,12 @@ def tabulate_profiling_data(self) -> pytools.Table: fprint_min = "--" fprint_max = "--" - if r.flops.sum() > 0: - bytes_per_flop_mean = f"{r.bytes_accessed.sum() / r.flops.sum():{g}}" + flop_sum = r.flops.sum() + bytes_accessed_sum = r.bytes_accessed.sum() + + if (bytes_accessed_sum is not None and flop_sum is not None + and flop_sum > 0): + bytes_per_flop_mean = f"{bytes_accessed_sum / flop_sum:{g}}" flops_per_sec_min = f"{flops_per_sec.min():{g}}" flops_per_sec_mean = f"{flops_per_sec.mean():{g}}" flops_per_sec_max = f"{flops_per_sec.max():{g}}" @@ -275,14 +285,14 @@ def tabulate_profiling_data(self) -> pytools.Table: bandwidth_access_mean = f"{bandwidth_access.sum():{g}}" bandwidth_access_max = f"{bandwidth_access.max():{g}}" - tbl.add_row([knl, r.num_calls, time_sum, + tbl.add_row((knl, r.num_calls, time_sum, time_min, time_avg, time_max, flops_per_sec_min, flops_per_sec_mean, flops_per_sec_max, bandwidth_access_min, bandwidth_access_mean, bandwidth_access_max, fprint_min, fprint_mean, fprint_max, - bytes_per_flop_mean]) + bytes_per_flop_mean)) - tbl.add_row(["Total", total_calls, f"{total_time:{g}}"] + ["--"] * 13) + tbl.add_row(("Total", total_calls, f"{total_time:{g}}") + tuple(["--"] * 13)) return tbl diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 651e9e55f..812fd040a 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -78,7 +78,7 @@ from meshmode.dof_array import DOFArray from mirgecom.viscous import get_viscous_timestep -from typing import List, Dict +from typing import List, Dict, Optional from grudge.discretization import DiscretizationCollection, PartID from grudge.dof_desc import DD_VOLUME_ALL from mirgecom.utils import normalize_boundaries @@ -1127,7 +1127,7 @@ def compare_files_vtu( second_file: str, file_type: str, tolerance: float = 1e-12, - field_tolerance: Dict[str, float] = None + field_tolerance: Optional[Dict[str, float]] = None ): """Compare files of vtu type. diff --git a/mirgecom/transport.py b/mirgecom/transport.py index d6b072a0e..0faad024b 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -244,7 +244,8 @@ def __init__(self, alpha=0.6, beta=4.093e-7, sigma=2.5, n=.666, self._d_alpha = species_diffusivity self._lewis = lewis - def bulk_viscosity(self, cv: ConservedVars, dv: GasDependentVars, + def bulk_viscosity(self, cv: ConservedVars, # type: ignore[override] + dv: GasDependentVars, eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the bulk viscosity for the gas, $\mu_{B}$. @@ -256,7 +257,8 @@ def bulk_viscosity(self, cv: ConservedVars, dv: GasDependentVars, return self._alpha * self.viscosity(cv, dv) # TODO: Should this be memoized? Avoid multiple calls? - def viscosity(self, cv: ConservedVars, dv: GasDependentVars, + def viscosity(self, cv: ConservedVars, # type: ignore[override] + dv: GasDependentVars, eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the gas dynamic viscosity, $\mu$. @@ -264,7 +266,8 @@ def viscosity(self, cv: ConservedVars, dv: GasDependentVars, """ return self._beta * dv.temperature**self._n - def volume_viscosity(self, cv: ConservedVars, dv: GasDependentVars, + def volume_viscosity(self, cv: ConservedVars, # type: ignore[override] + dv: GasDependentVars, eos: Optional[GasEOS] = None) -> DOFArray: r"""Get the 2nd viscosity coefficent, $\lambda$. @@ -277,8 +280,8 @@ def volume_viscosity(self, cv: ConservedVars, dv: GasDependentVars, """ return (self._alpha - 2.0/3.0)*self.viscosity(cv, dv) - def thermal_conductivity(self, cv: ConservedVars, dv: GasDependentVars, - eos: GasEOS) -> DOFArray: + def thermal_conductivity(self, cv: ConservedVars, # type: ignore[override] + dv: GasDependentVars, eos: GasEOS) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$. .. math:: @@ -291,8 +294,8 @@ def thermal_conductivity(self, cv: ConservedVars, dv: GasDependentVars, * eos.heat_capacity_cv(cv, dv.temperature) ) - def species_diffusivity(self, cv: ConservedVars, dv: GasDependentVars, - eos: GasEOS) -> DOFArray: + def species_diffusivity(self, cv: ConservedVars, # type: ignore[override] + dv: GasDependentVars, eos: GasEOS) -> DOFArray: r"""Get the vector of species diffusivities, ${d}_{\alpha}$. The species diffusivities can be specified directly or based on the @@ -348,20 +351,20 @@ def av_viscosity(self, cv, dv, eos): return self._av_mu*actx.np.sqrt(np.dot(cv.velocity, cv.velocity) + dv.speed_of_sound**2) - def bulk_viscosity(self, cv: ConservedVars, + def bulk_viscosity(self, cv: ConservedVars, # type: ignore[override] dv: GasDependentVars, eos: GasEOS) -> DOFArray: r"""Get the bulk viscosity for the gas, $\mu_{B}$.""" return self._physical_transport.bulk_viscosity(cv, dv) - def viscosity(self, cv: ConservedVars, + def viscosity(self, cv: ConservedVars, # type: ignore[override] dv: GasDependentVars, eos: GasEOS) -> DOFArray: r"""Get the gas dynamic viscosity, $\mu$.""" return (dv.smoothness*self.av_viscosity(cv, dv, eos) + self._physical_transport.viscosity(cv, dv)) - def volume_viscosity(self, cv: ConservedVars, + def volume_viscosity(self, cv: ConservedVars, # type: ignore[override] dv: GasDependentVars, eos: GasEOS) -> DOFArray: r"""Get the 2nd viscosity coefficent, $\lambda$. @@ -373,7 +376,7 @@ def volume_viscosity(self, cv: ConservedVars, return (dv.smoothness*self.av_viscosity(cv, dv, eos) + self._physical_transport.volume_viscosity(cv, dv)) - def thermal_conductivity(self, cv: ConservedVars, + def thermal_conductivity(self, cv: ConservedVars, # type: ignore[override] dv: GasDependentVars, eos: GasEOS) -> DOFArray: r"""Get the gas thermal_conductivity, $\kappa$.""" diff --git a/mirgecom/utils.py b/mirgecom/utils.py index b839990ee..d962070ce 100644 --- a/mirgecom/utils.py +++ b/mirgecom/utils.py @@ -68,9 +68,9 @@ def __init__(self, scale_factor: float = 1) -> None: # Number of values stored in the StatisticsAccumulator self.num_values: int = 0 - self._sum = 0 - self._min = None - self._max = None + self._sum: float = 0 + self._min: Optional[float] = None + self._max: Optional[float] = None self.scale_factor = scale_factor def add_value(self, v: float) -> None: @@ -100,14 +100,14 @@ def mean(self) -> Optional[float]: def max(self) -> Optional[float]: """Return the max of added values.""" - if self.num_values == 0: + if self.num_values == 0 or self._max is None: return None return self._max * self.scale_factor def min(self) -> Optional[float]: """Return the min of added values.""" - if self.num_values == 0: + if self.num_values == 0 or self._min is None: return None return self._min * self.scale_factor diff --git a/setup.cfg b/setup.cfg index a63fab49d..073453886 100644 --- a/setup.cfg +++ b/setup.cfg @@ -13,3 +13,45 @@ inherit=false match = .*\.py match_dir = (\.|mirgecom|test|examples|doc|bin) convention=numpy + +[mypy] +warn_unused_ignores = True + +[mypy-pyopencl.*] +ignore_missing_imports = True + +[mypy-meshmode.*] +ignore_missing_imports = True + +[mypy-grudge.*] +ignore_missing_imports = True + +[mypy-logpyle.*] +ignore_missing_imports = True + +[mypy-leap.*] +ignore_missing_imports = True + +[mypy-pymbolic.*] +ignore_missing_imports = True + +[mypy-loopy.*] +ignore_missing_imports = True + +[mypy-cantera.*] +ignore_missing_imports = True + +[mypy-pyrometheus.*] +ignore_missing_imports = True + +[mypy-dagrt.*] +ignore_missing_imports = True + +[mypy-pudb.*] +ignore_missing_imports = True + +[mypy-vtk.*] +ignore_missing_imports = True + +[mypy-h5py.*] +ignore_missing_imports = True diff --git a/test/lazy_pyro_test.py b/test/lazy_pyro_test.py deleted file mode 100644 index b94811539..000000000 --- a/test/lazy_pyro_test.py +++ /dev/null @@ -1,106 +0,0 @@ -"""Test lazy vs. eager pyrometheus.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" -import numpy as np -import pyopencl as cl -import pyopencl.tools as cl_tools - -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa -from meshmode.array_context import ( # noqa - PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from meshmode.array_context import ( # noqa - pytest_generate_tests_for_pyopencl_array_context - as pytest_generate_tests) - -import cantera - - -if __name__ == "__main__": - cl_ctx = cl.create_some_context() - queue = cl.CommandQueue(cl_ctx) - - eager_actx = PyOpenCLArrayContext( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - lazy_actx = PytatoPyOpenCLArrayContext( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - from mirgecom.mechanisms import get_mechanism_cti - mech_cti = get_mechanism_cti("uiuc") - cantera_soln1 = cantera.Solution(phase_id="gas", source=mech_cti) - cantera_soln2 = cantera.Solution(phase_id="gas", source=mech_cti) - - from mirgecom.thermochemistry import make_pyrometheus_mechanism - eager_pyro = make_pyrometheus_mechanism(eager_actx, cantera_soln1) - lazy_pyro = make_pyrometheus_mechanism(lazy_actx, cantera_soln2) - - from pytools.obj_array import make_obj_array - - def lazy_temperature(energy, y, tguess): - return make_obj_array([lazy_pyro.get_temperature(energy, y, tguess, - do_energy=True)]) - - lazy_temp = lazy_actx.compile(lazy_temperature) - - print(f"{type(lazy_temp)=}") - input_file = "pyro_state_data.txt" - input_data = np.loadtxt(input_file) - # num_samples = len(input_data) - num_samples = 1 - - print(f"{num_samples=}") - - # time = input_data[:num_samples, 0] - mass_frac = input_data[:num_samples, 1:-1] - temp = input_data[:num_samples, -1] - initial_temp = temp[0] - - use_old_temperature = False - - lazy_eager_diff_tol = 1e-4 - - for i, t, y in zip(range(num_samples), temp, mass_frac): - - t_old = initial_temp - if use_old_temperature and i > 0: - t_old = temp[i-1] - - # rho = ptk.get_density(cantera.one_atm, t, y) - e_int = eager_pyro.get_mixture_internal_energy_mass(t, y) - print(f"{type(e_int)=}") - print(f"{type(y)=}") - t_eager = eager_pyro.get_temperature(e_int, t_old, y, - do_energy=True) - t_lazy = lazy_actx.to_numpy(lazy_actx.freeze(lazy_temp(e_int, t_old, - np.asarray(lazy_actx.from_numpy(y)))[0])) - err = np.abs(t_eager - t_lazy)/t_eager - print(f"{err=}") - assert err < lazy_eager_diff_tol - # w_pyro = ptk.get_net_production_rates(rho, t_pyro, y) From c8d29d45b202e9ff2538ff01dd95c88d60ae7a6f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Feb 2023 09:13:32 -0600 Subject: [PATCH 758/873] Add get_num_nodes util --- mirgecom/simutil.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 812fd040a..f73ba0741 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -19,11 +19,12 @@ .. autofunction:: check_range_local .. autofunction:: boundary_report -Mesh utilities --------------- +Mesh and element utilities +-------------------------- .. autofunction:: distribute_mesh .. autofunction:: geometric_mesh_partitioner +.. autofunction:: get_number_of_nodes Simulation support utilities ---------------------------- @@ -86,6 +87,15 @@ logger = logging.getLogger(__name__) +def get_number_of_nodes(dim, order): + """Get number of nodes (modes) in *dim* Tetrahedron of *order*.""" + # number of {nodes, modes} see e.g.: + # JSH/TW Nodal DG Methods, Section 10.1 + # DOI: 10.1007/978-0-387-72067-8 + return int(np.math.factorial(dim+order) + / (np.math.factorial(dim) * np.math.factorial(order))) + + def check_step(step, interval): """ Check step number against a user-specified interval. From d0437e3c5da126889c2d306b76791cf647439b75 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 8 Feb 2023 09:14:30 -0600 Subject: [PATCH 759/873] Add some debugging info, use mode counting util. --- test/test_filter.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/test/test_filter.py b/test/test_filter.py index 6e3484b65..cb2a818cb 100644 --- a/test/test_filter.py +++ b/test/test_filter.py @@ -25,7 +25,6 @@ """ import logging -import math import pytest import numpy as np from functools import partial @@ -68,19 +67,17 @@ def test_filter_coeff(actx_factory, filter_order, order, dim): vol_discr = dcoll.discr_from_dd("vol") eta = .5 # just filter half the modes - # number of modes see e.g.: - # JSH/TW Nodal DG Methods, Section 10.1 - # DOI: 10.1007/978-0-387-72067-8 - nmodes = 1 - for d in range(1, dim+1): - nmodes *= (order + d) - nmodes /= math.factorial(int(dim)) - nmodes = int(nmodes) + + from mirgecom.simutil import get_number_of_nodes + nmodes = get_number_of_nodes(dim, order) + print(f"{nmodes=}") cutoff = int(eta * order) + print(f"{cutoff=}") # number of filtered modes nfilt = order - cutoff + print(f"{nfilt=}") # alpha = f(machine eps) # Alpha value suggested by: # JSH/TW Nodal DG Methods, Section 5.3 @@ -120,21 +117,30 @@ def test_filter_coeff(actx_factory, filter_order, order, dim): if nfilt <= 0: expected_high_coeff = 1.0 + print(f"{expected_high_coeff=}") + print(f"{expected_cutoff_coeff=}") + from mirgecom.filter import exponential_mode_response_function as xmrfunc frfunc = partial(xmrfunc, alpha=alpha, filter_order=filter_order) + print(f"{vol_discr.groups=}") + for group in vol_discr.groups: mode_ids = group.mode_ids() + print(f"{mode_ids=}") filter_coeff = actx.thaw( make_spectral_filter( actx, group, cutoff=cutoff, mode_response_function=frfunc ) ) + print(f"{filter_coeff=}") for mode_index, mode_id in enumerate(mode_ids): mode = mode_id + print(f"{mode_id=}") if dim > 1: mode = sum(mode_id) + print(f"{mode=}") if mode == cutoff: assert filter_coeff[mode_index] == expected_cutoff_coeff if mode == order: @@ -169,13 +175,10 @@ def test_filter_function(actx_factory, dim, order, do_viz=False): dcoll = create_discretization_collection(actx, mesh, order=order) nodes = actx.thaw(dcoll.nodes()) - # number of modes see e.g.: - # JSH/TW Nodal DG Methods, Section 10.1 - # DOI: 10.1007/978-0-387-72067-8 - nummodes = int(1) - for _ in range(dim): - nummodes *= int(order + dim + 1) - nummodes /= math.factorial(int(dim)) + from mirgecom.simutil import get_number_of_nodes + nummodes = get_number_of_nodes(dim, order) + print(f"{nummodes=}") + cutoff = int(eta * order) from mirgecom.filter import exponential_mode_response_function as xmrfunc From beba066007c010eae443dd75f3534a4aa5cf8e92 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 13 Feb 2023 18:03:28 -0600 Subject: [PATCH 760/873] get_reasonable_memory_pool: allow control over allocation --- mirgecom/simutil.py | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 7909525a8..ed1b60b7c 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -64,11 +64,14 @@ from meshmode.dof_array import DOFArray -from typing import List, Dict, Optional +from typing import List, Dict, Optional, TYPE_CHECKING from grudge.discretization import DiscretizationCollection from grudge.dof_desc import DD_VOLUME_ALL from mirgecom.viscous import get_viscous_timestep +if TYPE_CHECKING: + import pyopencl as cl + logger = logging.getLogger(__name__) @@ -477,11 +480,30 @@ def create_parallel_grid(comm, generate_grid): return generate_and_distribute_mesh(comm=comm, generate_mesh=generate_grid) -def get_reasonable_memory_pool(ctx, queue): - """Return an SVM or buffer memory pool based on what the device supports.""" +def get_reasonable_memory_pool(ctx: cl.Context, queue: cl.CommandQueue, + force_buffer: bool = False, + force_non_pool: bool = False): + """Return an SVM or buffer memory pool based on what the device supports. + + By default, it prefers SVM allocations over CL buffers, and memory + pools over direct allocations. + """ from pyopencl.characterize import has_coarse_grain_buffer_svm import pyopencl.tools as cl_tools + if force_buffer and force_non_pool: + logger.info(f"Using non-pooled CL buffer allocations on {queue.device}.") + return cl_tools.DeferredAllocator(ctx) + + if force_buffer: + logger.info(f"Using pooled CL buffer allocations on {queue.device}.") + return cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue)) + + if force_non_pool and has_coarse_grain_buffer_svm(queue.device): + logger.info(f"Using non-pooled SVM allocations on {queue.device}.") + return cl_tools.SVMAllocator( # pylint: disable=no-member + ctx, alignment=0, queue=queue) + if has_coarse_grain_buffer_svm(queue.device) and hasattr(cl_tools, "SVMPool"): logger.info(f"Using SVM-based memory pool on {queue.device}.") return cl_tools.SVMPool(cl_tools.SVMAllocator( # pylint: disable=no-member @@ -516,7 +538,7 @@ def compare_files_vtu( file_type: str, tolerance: float = 1e-12, field_tolerance: Optional[Dict[str, float]] = None - ): + ) -> None: """Compare files of vtu type. Parameters From b7327f96a2a2dc4876ba1c68cb5e89db38f6a21d Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 13 Feb 2023 18:15:12 -0600 Subject: [PATCH 761/873] fix --- mirgecom/simutil.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index ed1b60b7c..73e3b6d00 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -64,13 +64,12 @@ from meshmode.dof_array import DOFArray -from typing import List, Dict, Optional, TYPE_CHECKING +from typing import List, Dict, Optional from grudge.discretization import DiscretizationCollection from grudge.dof_desc import DD_VOLUME_ALL from mirgecom.viscous import get_viscous_timestep -if TYPE_CHECKING: - import pyopencl as cl +import pyopencl as cl logger = logging.getLogger(__name__) From 6503fc3f3b620927bf6528c0c244e1557a85b223 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Mon, 13 Feb 2023 18:23:09 -0600 Subject: [PATCH 762/873] ignore B028 --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index d73ed68ed..c86c16fdd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [flake8] -ignore = E127,E128,E123,E226,E241,W503,N818 +ignore = E127,E128,E123,E226,E241,W503,N818,B028 exclude = .*,\#* max-line-length=85 From 75dfe34d9b3595713c93d63d9b349d95e28c767f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 15 Feb 2023 15:49:12 -0600 Subject: [PATCH 763/873] Update filter test --- test/test_filter.py | 212 +++++++++++++++++++++++++++----------------- 1 file changed, 131 insertions(+), 81 deletions(-) diff --git a/test/test_filter.py b/test/test_filter.py index cb2a818cb..9e7bd121d 100644 --- a/test/test_filter.py +++ b/test/test_filter.py @@ -24,13 +24,11 @@ THE SOFTWARE. """ -import logging import pytest import numpy as np from functools import partial from mirgecom.discretization import create_discretization_collection -import grudge.op as op from meshmode.array_context import ( # noqa pytest_generate_tests_for_pyopencl_array_context as pytest_generate_tests) @@ -147,9 +145,9 @@ def test_filter_coeff(actx_factory, filter_order, order, dim): assert filter_coeff[mode_index] == expected_high_coeff -@pytest.mark.parametrize("dim", [2, 3]) -@pytest.mark.parametrize("order", [2, 3, 4]) -def test_filter_function(actx_factory, dim, order, do_viz=False): +@pytest.mark.parametrize("element_order", [2, 8, 10]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +def test_spectral_filter(actx_factory, element_order, dim): """ Test the stand-alone procedural interface to spectral filtering. @@ -157,53 +155,54 @@ def test_filter_function(actx_factory, dim, order, do_viz=False): """ actx = actx_factory() - logger = logging.getLogger(__name__) - filter_order = 1 nel_1d = 1 - eta = .5 # filter half the modes - # Alpha value suggested by: - # JSH/TW Nodal DG Methods, Seciton 5.3 - # DOI: 10.1007/978-0-387-72067-8 - alpha = -1.0*np.log(np.finfo(float).eps) from meshmode.mesh.generation import generate_regular_rect_mesh - + periodic = (False,)*dim mesh = generate_regular_rect_mesh( - a=(0.0,) * dim, b=(1.0,) * dim, nelements_per_axis=(nel_1d,) * dim + a=(-1.0,) * dim, b=(1.0,) * dim, nelements_per_axis=(nel_1d,) * dim, + periodic=periodic ) - - dcoll = create_discretization_collection(actx, mesh, order=order) - nodes = actx.thaw(dcoll.nodes()) - + numelem = mesh.nelements from mirgecom.simutil import get_number_of_nodes - nummodes = get_number_of_nodes(dim, order) + nummodes = get_number_of_nodes(dim, element_order) print(f"{nummodes=}") + print(f"{numelem=}") + print(f"{element_order=}") + # low_cutoff = 0 + # hi_cutoff = int(element_order - 1) + mid_cutoff = int(element_order/2) + test_field_orders = [0, 1, 2, 3, 8, 9, 10, 20] + print(f"{test_field_orders=}") + print(f"{mid_cutoff=}") + + dcoll = create_discretization_collection(actx, mesh, order=element_order) + nodes = actx.thaw(dcoll.nodes()) + vol_discr = dcoll.discr_from_dd("vol") - cutoff = int(eta * order) + emodes_to_pmodes = np.array([0 for _ in range(nummodes)], dtype=np.uint32) + for group in vol_discr.groups: + mode_ids = group.mode_ids() + print(f"{mode_ids=}") + for modi, mode in enumerate(mode_ids): + emodes_to_pmodes[modi] = sum(mode) + print(f"{emodes_to_pmodes=}") from mirgecom.filter import exponential_mode_response_function as xmrfunc - frfunc = partial(xmrfunc, alpha=alpha, filter_order=filter_order) - - # First test a uniform field, which should pass through - # the filter unharmed. - from mirgecom.initializers import Uniform - initr = Uniform(dim=dim) - uniform_soln = initr(t=0, x_vec=nodes) - from mirgecom.filter import filter_modally - filtered_soln = filter_modally(dcoll, cutoff, frfunc, uniform_soln) - soln_resid = uniform_soln - filtered_soln - from mirgecom.simutil import componentwise_norms - max_errors = componentwise_norms(dcoll, soln_resid, np.inf) + from grudge.dof_desc import DD_VOLUME_ALL, DD_VOLUME_ALL_MODAL + + # make it sharp + filter_order = 2 + alpha = -1000.0*np.log(np.finfo(float).eps) - tol = 1e-14 + frfunc = partial(xmrfunc, alpha=alpha, filter_order=filter_order) - logger.info(f"Max Errors (uniform field) = {max_errors}") - assert actx.np.less(np.max(max_errors), tol) + modal_map = dcoll.connection_from_dds(DD_VOLUME_ALL, DD_VOLUME_ALL_MODAL) # construct polynomial field: # a0 + a1*x + a2*x*x + .... - def polyfn(coeff): # , x_vec): + def poly_func(coeff): # , x_vec): # r = actx.np.sqrt(np.dot(nodes, nodes)) r = nodes[0] result = 0 @@ -211,48 +210,99 @@ def polyfn(coeff): # , x_vec): result = result + a * r ** n return make_obj_array([result]) - # Any order {cutoff} and below fields should be unharmed - tol = 1e-14 - field_order = int(cutoff) - coeff = [1.0 / (i + 1) for i in range(field_order + 1)] - field = polyfn(coeff=coeff) - filtered_field = filter_modally(dcoll, cutoff, frfunc, field) - soln_resid = field - filtered_field - max_errors = [actx.to_numpy(op.norm(dcoll, v, np.inf)) for v in soln_resid] - logger.info(f"Field = {field}") - logger.info(f"Filtered = {filtered_field}") - logger.info(f"Max Errors (poly) = {max_errors}") - assert np.max(max_errors) < tol - - # Any order > cutoff fields should have higher modes attenuated - threshold = 1e-3 - tol = 1e-1 - if do_viz is True: - from grudge.shortcuts import make_visualizer - vis = make_visualizer(dcoll, order) - - from grudge.dof_desc import DD_VOLUME_ALL, DD_VOLUME_ALL_MODAL - - modal_map = dcoll.connection_from_dds(DD_VOLUME_ALL, DD_VOLUME_ALL_MODAL) - - for field_order in range(cutoff+1, cutoff+4): - coeff = [1.0 / (i + 1) for i in range(field_order+1)] - field = polyfn(coeff=coeff) - filtered_field = filter_modally(dcoll, cutoff, frfunc, field) - - unfiltered_spectrum = modal_map(field) - filtered_spectrum = modal_map(filtered_field) - if do_viz is True: - spectrum_resid = unfiltered_spectrum - filtered_spectrum - io_fields = [ - ("unfiltered", field), - ("filtered", filtered_field), - ("unfiltered_spectrum", unfiltered_spectrum), - ("filtered_spectrum", filtered_spectrum), - ("residual", spectrum_resid) - ] - vis.write_vtk_file(f"filter_test_{field_order}.vtu", io_fields) - field_resid = unfiltered_spectrum - filtered_spectrum - max_errors = [actx.to_numpy(op.norm(dcoll, v, np.inf)) for v in field_resid] - # fields should be different, but not too different - assert (tol > np.max(max_errors) > threshold) + # ISO fields are for hand-testing, please don't remove + # iso_fields = [] # f(x) = x**order + # iso_cutoff = 2 + fields = [] # f(x) = a0 + a1*x + a2*x*x + .... + numfields = len(test_field_orders) + + for field_order in test_field_orders: + # iso_field_coeff = [1.0 if i == field_order else 0.0 + # for i in range(field_order+1)] + field_coeff = [1.0 / (i + 1) for i in range(field_order+1)] + fields.append(poly_func(field_coeff)) + # iso_fields.append(poly_func(iso_field_coeff)) + + unfiltered_fields = make_obj_array(fields) + # unfiltered_iso_fields = make_obj_array(iso_fields) + unfiltered_spectra = modal_map(unfiltered_fields) + spectra_numbers = actx.to_numpy(unfiltered_spectra) + + # print(f"{unfiltered_spectra=}") + # print(f"{spectra_numbers.shape=}") + # print(f"{spectra_numbers=}") + + element_spectra = make_obj_array([ + [np.array([0. for i in range(element_order+1)]) + for j in range(numfields)] for k in range(numelem)]) + + total_power = [np.array([0. for _ in range(element_order+1)]) + for e in range(numfields)] + + for fldi in range(numfields): + field_spectra = spectra_numbers[fldi][0][0] + for el in range(numelem): + spectral_storage = element_spectra[el][fldi] + el_spectrum = field_spectra[el] + for i in range(nummodes): + speci = emodes_to_pmodes[i] + spec_val = np.abs(float(el_spectrum[i])) + spectral_storage[speci] = spectral_storage[speci] + spec_val + total_power[fldi][speci] = total_power[fldi][speci] + spec_val + + print("Unfiltered expansions:") + print(f"{element_spectra=}") + print(f"{total_power=}") + + # unfiltered_iso_spectra = modal_map(unfiltered_iso_fields) + filtered_fields = filter_modally(dcoll, mid_cutoff, frfunc, unfiltered_fields) + filtered_spectra = modal_map(filtered_fields) + spectra_numbers = actx.to_numpy(filtered_spectra) + + # filtered_isofields = filter_modally(dcoll, iso_cutoff, frfunc, + # unfiltered_iso_fields) + # filtered_isospectra = modal_map(filtered_isofields) + + element_spectra = make_obj_array([ + [np.array([0. for i in range(element_order+1)]) + for j in range(numfields)] for k in range(numelem)]) + + tot_pow_filtered = [np.array([0. for _ in range(element_order+1)]) + for e in range(numfields)] + + for fldi in range(numfields): + field_spectra = spectra_numbers[fldi][0][0] + for el in range(numelem): + spectral_storage = element_spectra[el][fldi] + el_spectrum = field_spectra[el] + for i in range(nummodes): + speci = emodes_to_pmodes[i] + spec_val = np.abs(float(el_spectrum[i])) + spectral_storage[speci] = spectral_storage[speci] + spec_val + tot_pow_filtered[fldi][speci] = \ + tot_pow_filtered[fldi][speci] + spec_val + + print("Filtered expansions:") + print(f"{element_spectra=}") + print(f"{tot_pow_filtered=}") + nfilt = element_order - mid_cutoff + ckfn = partial(xmrfunc, alpha=alpha, cutoff=mid_cutoff, + filter_order=filter_order, nfilt=nfilt) + + # This checks that the total power in each mode has been + # either unaffected (n <= Nc) or squelched by the + # correct amount. + for i in range(numfields): + for n in range(element_order+1): + tp = total_power[i][n] + tpf = tot_pow_filtered[i][n] + tpdiff = np.abs(tp - tpf) + err = tpdiff + if n <= mid_cutoff: + if tp > 1e-12: + err = err / tp + else: + exp_rat = 1. - ckfn(n) + if tp > 1e-12: + err = np.abs(tpdiff/tp - exp_rat) + assert err < 1e-8 From f11f66923b1478dbcd633aab24cdf3fbd8439d64 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 15 Feb 2023 17:33:18 -0600 Subject: [PATCH 764/873] Revert "ignore B028" This reverts commit 6503fc3f3b620927bf6528c0c244e1557a85b223. --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index c86c16fdd..d73ed68ed 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [flake8] -ignore = E127,E128,E123,E226,E241,W503,N818,B028 +ignore = E127,E128,E123,E226,E241,W503,N818 exclude = .*,\#* max-line-length=85 From e176630b9cd41682255c66fbfab94cde288beb0e Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Tue, 21 Feb 2023 16:19:33 -0600 Subject: [PATCH 765/873] add MemoryPool logging --- examples/wave-mpi.py | 11 +++++++++- mirgecom/logging_quantities.py | 39 ++++++++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/examples/wave-mpi.py b/examples/wave-mpi.py index 696b6c804..00198b8d7 100644 --- a/examples/wave-mpi.py +++ b/examples/wave-mpi.py @@ -44,7 +44,8 @@ from mirgecom.logging_quantities import (initialize_logmgr, logmgr_add_cl_device_info, - logmgr_add_device_memory_usage) + logmgr_add_device_memory_usage, + logmgr_add_mempool_usage,) def bump(actx, nodes, t=0): @@ -170,6 +171,7 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", if logmgr: logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_mempool_usage(logmgr, alloc) logmgr.add_watches(["step.max", "t_step.max", "t_log.max"]) @@ -178,6 +180,13 @@ def main(actx_class, snapshot_pattern="wave-mpi-{step:04d}-{rank:04d}.pkl", except KeyError: pass + try: + logmgr.add_watches( + ["memory_usage_mempool_managed.max", + "memory_usage_mempool_active.max"]) + except KeyError: + pass + if use_profiling: logmgr.add_watches(["multiply_time.max"]) diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index 4e499e837..f94def9e4 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -34,6 +34,7 @@ .. autofunction:: logmgr_add_cl_device_info .. autofunction:: logmgr_add_device_memory_usage .. autofunction:: logmgr_add_many_discretization_quantities +.. autofunction:: logmgr_add_mempool_usage .. autofunction:: add_package_versions .. autofunction:: set_sim_state .. autofunction:: logmgr_set_time @@ -47,13 +48,15 @@ from grudge.discretization import DiscretizationCollection import pyopencl as cl -from typing import Optional, Callable +from typing import Optional, Callable, Union, Tuple import numpy as np from grudge.dof_desc import DD_VOLUME_ALL import grudge.op as oper from typing import List +MemPoolType = Union[cl.tools.MemoryPool, cl.tools.SVMPool] + def initialize_logmgr(enable_logmgr: bool, filename: Optional[str] = None, mode: str = "wu", @@ -79,7 +82,7 @@ def initialize_logmgr(enable_logmgr: bool, return logmgr -def logmgr_add_cl_device_info(logmgr: LogManager, queue: cl.CommandQueue): +def logmgr_add_cl_device_info(logmgr: LogManager, queue: cl.CommandQueue) -> None: """Add information about the OpenCL device to the log.""" dev = queue.device logmgr.set_constant("cl_device_name", str(dev)) @@ -96,15 +99,24 @@ def logmgr_add_device_name(logmgr: LogManager, queue: cl.CommandQueue): # noqa: logmgr_add_cl_device_info(logmgr, queue) -def logmgr_add_device_memory_usage(logmgr: LogManager, queue: cl.CommandQueue): +def logmgr_add_device_memory_usage(logmgr: LogManager, queue: cl.CommandQueue) \ + -> None: """Add the OpenCL device memory usage to the log.""" if not (queue.device.type & cl.device_type.GPU): return logmgr.add_quantity(DeviceMemoryUsage()) +def logmgr_add_mempool_usage(logmgr: LogManager, pool: MemPoolType) -> None: + """Add the memory pool usage to the log.""" + if (not isinstance(pool, cl.tools.MemoryPool) + and not isinstance(pool, cl.tools.SVMPool)): + return + logmgr.add_quantity(MempoolMemoryUsage(pool)) + + def logmgr_add_many_discretization_quantities(logmgr: LogManager, dcoll, dim, - extract_vars_for_logging, units_for_logging, dd=DD_VOLUME_ALL): + extract_vars_for_logging, units_for_logging, dd=DD_VOLUME_ALL) -> None: """Add default discretization quantities to the logmgr.""" if dd != DD_VOLUME_ALL: suffix = f"_{dd.domain_tag.tag}" @@ -410,4 +422,23 @@ def __call__(self) -> Optional[float]: else: return (self.total.value - self.free.value) / 1024 / 1024 + +class MempoolMemoryUsage(MultiPostLogQuantity): + """Logging support for memory pool usage.""" + + def __init__(self, pool: MemPoolType, names: Optional[List[str]] = None) -> None: + if names is None: + names = ["memory_usage_mempool_managed", "memory_usage_mempool_active"] + + descs = ["Memory pool managed", "Memory pool active"] + + super().__init__(names, ["MByte", "MByte"], descriptions=descs) + + self.pool = pool + + def __call__(self) -> Tuple[float, float]: + """Return the memory pool usage in MByte.""" + return (self.pool.managed_bytes/1024/1024, + self.pool.active_bytes/1024/1024) + # }}} From b9aae221be28b10948e3d9af21528b8487cbe063 Mon Sep 17 00:00:00 2001 From: Mike Anderson Date: Wed, 22 Feb 2023 11:36:18 -0600 Subject: [PATCH 766/873] add more zeros for viz file names --- mirgecom/io.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/io.py b/mirgecom/io.py index 0adc69b9c..dfbf9d42b 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -71,9 +71,9 @@ def make_status_message( def make_rank_fname(basename, rank=0, step=0, t=0): """Create a rank-specific filename.""" - return f"{basename}-{step:06d}-{{rank:04d}}.vtu" + return f"{basename}-{step:09d}-{{rank:04d}}.vtu" def make_par_fname(basename, step=0, t=0): r"""Make parallel visualization filename.""" - return f"{basename}-{step:06d}.pvtu" + return f"{basename}-{step:09d}.pvtu" From e4ac6dea7ffdbd21b8e3cd8ed9360bcda2fff1b9 Mon Sep 17 00:00:00 2001 From: Matthias Diener Date: Wed, 22 Feb 2023 13:24:41 -0600 Subject: [PATCH 767/873] also log in wave --- examples/wave.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/wave.py b/examples/wave.py index 0c8ee5259..8b3d53538 100644 --- a/examples/wave.py +++ b/examples/wave.py @@ -43,7 +43,8 @@ from mirgecom.logging_quantities import (initialize_logmgr, logmgr_add_cl_device_info, - logmgr_add_device_memory_usage) + logmgr_add_device_memory_usage, + logmgr_add_mempool_usage) def bump(actx, nodes, t=0): @@ -121,6 +122,7 @@ def main(actx_class, use_profiling=False, use_logmgr=False, lazy: bool = False): if logmgr: logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_mempool_usage(logmgr, alloc) logmgr.add_watches(["step.max", "t_step.max", "t_log.max"]) From d6d143a3821aaa01dfa78cfc92742547ae280b82 Mon Sep 17 00:00:00 2001 From: Matt Smith Date: Wed, 22 Feb 2023 13:31:02 -0600 Subject: [PATCH 768/873] Switch production over to new distributed DAG partitioner (#841) --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7321408ab..b4225ba77 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,7 +19,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode --editable git+https://github.com/majosm/grudge.git@production#egg=grudge ---editable git+https://github.com/kaushikcfd/pytato.git#egg=pytato +--editable git+https://github.com/majosm/pytato.git@production#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle --editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From c1ec99bec495d711e6ce978ca65d8712e7e50679 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 23 Feb 2023 12:33:37 -0600 Subject: [PATCH 769/873] Make viz file step field bigger --- mirgecom/io.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/io.py b/mirgecom/io.py index 03dc37b0e..ba8e162f9 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -74,12 +74,12 @@ def make_status_message( def make_rank_fname(basename, rank=0, step=0, t=0): """Create a rank-specific filename.""" - return f"{basename}-{step:06d}-{{rank:04d}}.vtu" + return f"{basename}-{step:09d}-{{rank:04d}}.vtu" def make_par_fname(basename, step=0, t=0): r"""Make parallel visualization filename.""" - return f"{basename}-{step:06d}.pvtu" + return f"{basename}-{step:09d}.pvtu" def read_and_distribute_yaml_data(mpi_comm, file_path): From ce281de9b41a66c1567ec6ffc71cc93ed9992b09 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Mon, 27 Feb 2023 09:09:39 -0800 Subject: [PATCH 770/873] Use process-specific XDG cache on lassen. --- scripts/lassen-parallel-spawner.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/lassen-parallel-spawner.sh b/scripts/lassen-parallel-spawner.sh index 291be4ae4..7d0a2f768 100755 --- a/scripts/lassen-parallel-spawner.sh +++ b/scripts/lassen-parallel-spawner.sh @@ -2,8 +2,9 @@ # # Used to wrap the spawning of parallel mirgecom drivers on Lassen # unset CUDA_CACHE_DISABLE -export XDG_CACHE_HOME=${XDG_CACHE_HOME:-"/tmp/$USER/xdg-scratch"} POCL_CACHE_ROOT=${POCL_CACHE_ROOT:-"/tmp/$USER/pocl-scratch"} +XDG_CACHE_ROOT=${XDG_CACHE_HOME:-"/tmp/$USER/xdg-scratch"} export POCL_CACHE_DIR="${POCL_CACHE_ROOT}/$$" +export XDG_CACHE_HOME="${XDG_CACHE_ROOT}/$$" "$@" From e3ef16a0c5022848a3ba1d21eaa4751253bdd8ac Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 1 Mar 2023 10:54:32 -0800 Subject: [PATCH 771/873] Uninspired intuitive typing for configurate --- mirgecom/simutil.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index e76531965..c25dc1f51 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -1148,7 +1148,10 @@ def configurate(config_key, config_object=None, default_value=None): d = config_object if isinstance(config_object, dict) else\ config_object.__dict__ if config_key in d: - return d[config_key] + value = d[config_key] + if default_value is not None: + return type(default_value)(value) + return value return default_value From 1c9dd154393bdc300086dc5aa00a05399d24f505 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 2 Mar 2023 16:34:00 -0600 Subject: [PATCH 772/873] Update pyro req to use Tulios transport properties --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b4225ba77..620e6bc70 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode --editable git+https://github.com/majosm/grudge.git@production#egg=grudge --editable git+https://github.com/majosm/pytato.git@production#egg=pytato ---editable git+https://github.com/pyrometheus/pyrometheus.git#egg=pyrometheus +--editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle --editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum --editable git+https://github.com/inducer/pyvisfile.git#egg=pyvisfile From ae638ead6c6047f9d9953b8bac3c36a8c3b200a8 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 4 Mar 2023 07:32:28 -0600 Subject: [PATCH 773/873] Optionally count face nodes for tet node counter. --- mirgecom/simutil.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c25dc1f51..ebb94b84e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -88,13 +88,16 @@ logger = logging.getLogger(__name__) -def get_number_of_tetrahedron_nodes(dim, order): +def get_number_of_tetrahedron_nodes(dim, order, include_faces=False): """Get number of nodes (modes) in *dim* Tetrahedron of *order*.""" # number of {nodes, modes} see e.g.: # JSH/TW Nodal DG Methods, Section 10.1 # DOI: 10.1007/978-0-387-72067-8 - return int(np.math.factorial(dim+order) - / (np.math.factorial(dim) * np.math.factorial(order))) + nnodes = int(np.math.factorial(dim+order) + / (np.math.factorial(dim) * np.math.factorial(order))) + if include_faces: + nnodes = nnodes + (dim+1)*get_number_of_tetrahedron_nodes(dim-1, order) + return nnodes def check_step(step, interval): From 94a51f4c476335a5a868b53aebfafc839a512626 Mon Sep 17 00:00:00 2001 From: tulioricci <72670026+tulioricci@users.noreply.github.com> Date: Sat, 4 Mar 2023 16:06:27 -0600 Subject: [PATCH 774/873] Update transport.py Remove parameter that was left behind. --- mirgecom/transport.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 57b1136d2..95c0704c4 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -340,7 +340,7 @@ class MixtureAveragedTransport(TransportModel): """ def __init__(self, pyrometheus_mech, alpha=0.6, factor=1.0, - prandtl=None, lewis=None, diff_switch=1.0e-7): + prandtl=None, lewis=None): r"""Initialize power law coefficients and parameters. Parameters @@ -368,18 +368,12 @@ def __init__(self, pyrometheus_mech, alpha=0.6, factor=1.0, lewis: numpy.ndarray If required, the Lewis number specify the relation between the thermal conductivity and the species diffusivities. - - diff_switch: float - Value when the dominant species self-diffusivity is used - instead of the mixture-rule to avoid a singularity when - $\epsilon = (1.0 - Yi) \to 0.0$. """ self._pyro_mech = pyrometheus_mech self._alpha = alpha self._factor = factor self._prandtl = prandtl self._lewis = lewis - self._diff_switch = diff_switch if self._lewis is not None: if (len(self._lewis) != self._pyro_mech.num_species): raise ValueError("Lewis number should match number of species") @@ -492,8 +486,7 @@ def species_diffusivity(self, cv: ConservedVars, # type: ignore[override] ) return self._factor*( self._pyro_mech.get_species_mass_diffusivities_mixavg( - dv.temperature, dv.pressure, cv.species_mass_fractions, - self._diff_switch) + dv.temperature, dv.pressure, cv.species_mass_fractions) ) From 4a02e1a1dd1344878f587d5da63ac8b576939c1a Mon Sep 17 00:00:00 2001 From: Tulio Date: Sat, 4 Mar 2023 16:12:15 -0600 Subject: [PATCH 775/873] Pressure and temperature were inverted --- mirgecom/transport.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/transport.py b/mirgecom/transport.py index 95c0704c4..4b860c9a6 100644 --- a/mirgecom/transport.py +++ b/mirgecom/transport.py @@ -486,7 +486,7 @@ def species_diffusivity(self, cv: ConservedVars, # type: ignore[override] ) return self._factor*( self._pyro_mech.get_species_mass_diffusivities_mixavg( - dv.temperature, dv.pressure, cv.species_mass_fractions) + dv.pressure, dv.temperature, cv.species_mass_fractions) ) From 4e905b8256e0a69a94b9a67bd4fdb75634422c74 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 5 Mar 2023 09:33:24 -0600 Subject: [PATCH 776/873] Spell num_species corretly. --- mirgecom/thermochemistry.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mirgecom/thermochemistry.py b/mirgecom/thermochemistry.py index f734e9f69..b3b13fba4 100644 --- a/mirgecom/thermochemistry.py +++ b/mirgecom/thermochemistry.py @@ -82,17 +82,17 @@ def get_species_mass_diffusivities_mixavg(self, pressure, temperature, mole_fracs = self.get_mole_fractions(mmw, mass_fractions) bdiff_ij = self.get_species_binary_mass_diffusivities(temperature) x_sum = [sum([mole_fracs[i] / bdiff_ij[i, j] - for i in range(self.nspecies)]) - for j in range(self.nspecies)] + for i in range(self.num_species)]) + for j in range(self.num_species)] x_sum = self._pyro_make_array(x_sum) denom = [x_sum[i] - mole_fracs[i]/bdiff_ij[i, i] - for i in range(self.nspecies)] + for i in range(self.num_species)] denom = self._pyro_mak_array(denom) tp = temperature**(3/2)/pressure d_list = [tp*self.usr_np.where(self.usr_np.greater(denom[i], 0), ((mmw-mole_fracs[i] * self.wts[i]) / (mmw * denom[i])), bdiff_ij[i, i]) - for i in range(self.nspecies)] + for i in range(self.num_species)] return self._pyro_make_array(d_list) # This bit disallows negative concentrations and instead From 0ba6cb2a464dd665b3558a2a1a63c1cc6bbd4c56 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 6 Mar 2023 17:34:17 -0600 Subject: [PATCH 777/873] Harden yaml getter --- mirgecom/io.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/mirgecom/io.py b/mirgecom/io.py index ba8e162f9..7c93a3451 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -82,14 +82,23 @@ def make_par_fname(basename, step=0, t=0): return f"{basename}-{step:09d}.pvtu" -def read_and_distribute_yaml_data(mpi_comm, file_path): +def read_and_distribute_yaml_data(mpi_comm=None, file_path=None): """Read a YAML file on one rank, broadcast result to world.""" import yaml - rank = mpi_comm.Get_rank() + + input_data = None + if file_path is None: + return input_data + + rank = 0 + if mpi_comm is not None: + rank = mpi_comm.Get_rank() + if rank == 0: with open(file_path) as f: input_data = yaml.load(f, Loader=yaml.FullLoader) - else: - input_data = None - mpi_comm.bcast(input_data, root=0) + + if mpi_comm is not None: + mpi_comm.bcast(input_data, root=0) + return input_data From bed4429e4844d5a207a64050bb552d0ef13def41 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 7 Mar 2023 14:07:06 -0800 Subject: [PATCH 778/873] Resolve prediction hang? --- mirgecom/io.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mirgecom/io.py b/mirgecom/io.py index 7c93a3451..db322687a 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -87,14 +87,11 @@ def read_and_distribute_yaml_data(mpi_comm=None, file_path=None): import yaml input_data = None - if file_path is None: - return input_data - rank = 0 if mpi_comm is not None: rank = mpi_comm.Get_rank() - if rank == 0: + if file_path is not None and rank == 0: with open(file_path) as f: input_data = yaml.load(f, Loader=yaml.FullLoader) From 9954aafa8f9ecc58a48827d83db5fa5014d178f2 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 7 Mar 2023 18:47:22 -0600 Subject: [PATCH 779/873] Fix up yaml getter --- mirgecom/io.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mirgecom/io.py b/mirgecom/io.py index db322687a..628605361 100644 --- a/mirgecom/io.py +++ b/mirgecom/io.py @@ -87,15 +87,19 @@ def read_and_distribute_yaml_data(mpi_comm=None, file_path=None): import yaml input_data = None + if file_path is None: + return input_data + rank = 0 + if mpi_comm is not None: rank = mpi_comm.Get_rank() - if file_path is not None and rank == 0: + if rank == 0: with open(file_path) as f: input_data = yaml.load(f, Loader=yaml.FullLoader) if mpi_comm is not None: - mpi_comm.bcast(input_data, root=0) + input_data = mpi_comm.bcast(input_data, root=0) return input_data From 7fbfd0e2d448a62b868060315fe3d44f82f9b003 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Sat, 11 Mar 2023 13:44:38 -0800 Subject: [PATCH 780/873] Fix bug in test scripting. --- scripts/mirge-testing-env.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/mirge-testing-env.sh b/scripts/mirge-testing-env.sh index 0bbb17723..baf8512aa 100755 --- a/scripts/mirge-testing-env.sh +++ b/scripts/mirge-testing-env.sh @@ -8,8 +8,10 @@ MIRGE_HOME=${1:-"${MIRGE_HOME:-}"} if [[ -z "${MIRGE_HOME}" ]]; then - MIRGE_HOME="." + THIS_LOC=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + MIRGE_HOME="${THIS_LOC}/../" fi + cd ${MIRGE_HOME} MIRGE_HOME="$(pwd)" cd - From b69b21586f10b319c32a429ef98e316810117c1f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 1 Apr 2023 19:09:40 -0500 Subject: [PATCH 781/873] Update to mengaldo bc --- examples/poiseuille-multispecies-mpi.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 7986ac796..6a197678e 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -45,8 +45,7 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedFluidBoundary, - # AdiabaticNoslipMovingBoundary, - IsothermalNoSlipBoundary + IsothermalWallBoundary ) from mirgecom.transport import SimpleTransport from mirgecom.eos import IdealSingleGas # , PyrometheusMixture @@ -282,9 +281,9 @@ def _exact_boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): BoundaryDomainTag("+1"): PrescribedFluidBoundary(boundary_state_func=_exact_boundary_solution), BoundaryDomainTag("-2"): - IsothermalNoSlipBoundary(wall_temperature=348.5), + IsothermalWallBoundary(wall_temperature=348.5), BoundaryDomainTag("+2"): - IsothermalNoSlipBoundary(wall_temperature=348.5)} + IsothermalWallBoundary(wall_temperature=348.5)} if rst_filename: current_t = restart_data["t"] From 30abcc619d70197c30526c11b63bb6e647d2d324 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 1 Apr 2023 19:30:24 -0500 Subject: [PATCH 782/873] Repydocstyle --- mirgecom/boundary.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index d7dfb1469..708c77b1c 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -495,7 +495,7 @@ def grad_cv_bc(self, dcoll, dd_bdry, gas_model, state_minus, grad_cv_minus, def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): # def grad_temperature_bc(self, dcoll, dd_bdry, gas_model, state_minus, # grad_cv_minus, grad_t_minus): - """Get the boundary condition on the temperature gradient. + r"""Get the boundary condition on the temperature gradient. This routine returns the boundary condition on the gradient of the temperature, $(\nabla{T})_\text{bc}$. This value is used in the @@ -538,7 +538,7 @@ def grad_temperature_bc(self, grad_t_minus, normal, **kwargs): @abstractmethod def temperature_bc(self, state_minus, **kwargs): - """Get boundary contition on the temperature. + r"""Get boundary contition on the temperature. This routine returns the temperature boundary condition, $T_\text{bc}$. This value is used in the calcuation of the temperature gradient, @@ -1068,6 +1068,7 @@ class AdiabaticSlipBoundary(MengaldoBoundaryCondition): .. automethod:: grad_temperature_bc .. automethod:: adiabatic_slip_grad_av """ + def __init__(self): self._slip = _SlipBoundaryComponent() self._impermeable = _ImpermeableBoundaryComponent() @@ -1716,6 +1717,7 @@ class AdiabaticNoslipWallBoundary(MengaldoBoundaryCondition): .. automethod:: grad_temperature_bc .. automethod:: adiabatic_noslip_grad_av """ + def __init__(self): self._no_slip = _NoSlipBoundaryComponent() self._impermeable = _ImpermeableBoundaryComponent() From 4b894c82922242d012ecb4e4076bce02c91525b3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 1 Apr 2023 22:27:54 -0500 Subject: [PATCH 783/873] Try this doc fix --- mirgecom/boundary.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 155f1743d..b7dd9f2eb 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -391,7 +391,11 @@ def temperature_gradient_flux(self, dcoll, dd_bdry, gas_model, state_minus, class MengaldoBoundaryCondition(FluidBoundary): - r"""Abstract interface to fluid boundary treatment. + r"""Abstract interface to fluid boundary treatment described in [Mengaldo_2014]_ + + + Mengaldo boundary conditions are those described by [Mengaldo_2014]_, and + with slight mods for flow boundaries from [Poinsot_1992]_ where noted. Base class implementations -------------------------- From b13cc4440c0b4ef78afe675e35e18820b156e057 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 1 Apr 2023 22:30:33 -0500 Subject: [PATCH 784/873] Repydocstyle --- mirgecom/boundary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index b7dd9f2eb..6d779daa1 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -391,7 +391,7 @@ def temperature_gradient_flux(self, dcoll, dd_bdry, gas_model, state_minus, class MengaldoBoundaryCondition(FluidBoundary): - r"""Abstract interface to fluid boundary treatment described in [Mengaldo_2014]_ + r"""Abstract interface to fluid boundary treatment described in [Mengaldo_2014]_. Mengaldo boundary conditions are those described by [Mengaldo_2014]_, and From b6849b21001e6fdde5576b75019ace40172222fd Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 1 Apr 2023 22:31:56 -0500 Subject: [PATCH 785/873] Repydocstyle --- mirgecom/boundary.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 6d779daa1..aa397b606 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -393,7 +393,6 @@ def temperature_gradient_flux(self, dcoll, dd_bdry, gas_model, state_minus, class MengaldoBoundaryCondition(FluidBoundary): r"""Abstract interface to fluid boundary treatment described in [Mengaldo_2014]_. - Mengaldo boundary conditions are those described by [Mengaldo_2014]_, and with slight mods for flow boundaries from [Poinsot_1992]_ where noted. From 35bf318bfbf00e838757e26198fcfa2579f47989 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 2 Apr 2023 07:50:41 -0500 Subject: [PATCH 786/873] Central num flux no longer used in boundary. --- mirgecom/boundary.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/boundary.py b/mirgecom/boundary.py index 8ec363824..4e6b422d6 100644 --- a/mirgecom/boundary.py +++ b/mirgecom/boundary.py @@ -57,7 +57,6 @@ from grudge.trace_pair import TracePair import grudge.op as op from mirgecom.viscous import viscous_facial_flux_central -from mirgecom.flux import num_flux_central from mirgecom.gas_model import make_fluid_state, replace_fluid_state from pytools.obj_array import make_obj_array From 98c9835379ae39946234812712f4a073daf4433e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 2 Apr 2023 08:05:40 -0500 Subject: [PATCH 787/873] Extricate old Laplacian AV from multiphysics --- .../thermally_coupled_fluid_wall.py | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index be46cac20..eb37b4f83 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -435,7 +435,6 @@ def __init__( PrescribedFluidBoundary.__init__( self, boundary_state_func=self.get_external_state, - boundary_grad_av_func=self.get_external_grad_av, boundary_temperature_func=self.get_external_t, boundary_gradient_temperature_func=self.get_external_grad_t, inviscid_flux_func=self.inviscid_wall_flux, @@ -509,38 +508,6 @@ def inviscid_wall_flux(self, dcoll, dd_bdry, gas_model, state_minus, return numerical_flux_func(state_pair, gas_model, nhat) - def get_external_grad_av(self, dcoll, dd_bdry, grad_av_minus, **kwargs): - """Get the exterior grad(Q) on the boundary.""" - # Grab some boundary-relevant data - actx = grad_av_minus.array_context - - # Grab a unit normal to the boundary - nhat = actx.thaw(dcoll.normal(dd_bdry)) - - # Apply a Neumann condition on the energy gradient - # Should probably compute external energy gradient using external temperature - # gradient, but that is a can of worms - ext_grad_energy = \ - grad_av_minus.energy - 2 * np.dot(grad_av_minus.energy, nhat) * nhat - - # uh oh - we don't have the necessary data to compute grad_y from grad_av - # from mirgecom.fluid import species_mass_fraction_gradient - # grad_y_minus = species_mass_fraction_gradient(state_minus.cv, - # grad_cv_minus) - # grad_y_plus = grad_y_minus - np.outer(grad_y_minus@normal, normal) - # grad_species_mass_plus = 0.*grad_y_plus - # This re-stuffs grad_y+ back into grad_cv+, skipit; we did not split AVs - # for i in range(state_minus.nspecies): - # grad_species_mass_plus[i] = (state_minus.mass_density*grad_y_plus[i] - # + state_minus.species_mass_fractions[i]*grad_cv_minus.mass) - ext_grad_species_mass = ( - grad_av_minus.species_mass - - np.outer(grad_av_minus.species_mass @ nhat, nhat)) - - return make_conserved( - grad_av_minus.dim, mass=grad_av_minus.mass, energy=ext_grad_energy, - momentum=grad_av_minus.momentum, species_mass=ext_grad_species_mass) - def get_external_grad_cv(self, state_minus, grad_cv_minus, normal, **kwargs): """Return grad(CV) to be used in the boundary calculation of viscous flux.""" from mirgecom.fluid import species_mass_fraction_gradient From af1c0cb37f15be889662bf6bfa16c40d4b5779ef Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sun, 2 Apr 2023 08:21:26 -0500 Subject: [PATCH 788/873] Extricate old Laplacian AV from multiphysics --- mirgecom/multiphysics/thermally_coupled_fluid_wall.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index eb37b4f83..208aa4572 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -178,7 +178,6 @@ def __init__( PrescribedFluidBoundary.__init__( self, boundary_state_func=self.get_external_state, - boundary_grad_av_func=self.get_external_grad_av, boundary_temperature_func=self.get_external_t, boundary_gradient_temperature_func=self.get_external_grad_t, inviscid_flux_func=self.inviscid_wall_flux, From 0b95df95609aa7258519117859a526b52dc7f57d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 3 Apr 2023 14:36:27 -0500 Subject: [PATCH 789/873] Update from upstream and use custom production drivers. --- scripts/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/production-testing-env.sh b/scripts/production-testing-env.sh index 943fe072b..6f141ccaf 100755 --- a/scripts/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -22,4 +22,4 @@ # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@main"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@udpate_av"} From 95ff1372d5695c54ec911dbfcb0331193f0d63fa Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Mon, 3 Apr 2023 14:56:18 -0500 Subject: [PATCH 790/873] Typo --- scripts/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/production-testing-env.sh b/scripts/production-testing-env.sh index 6f141ccaf..925f7806d 100755 --- a/scripts/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -22,4 +22,4 @@ # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@udpate_av"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@update_av"} From f586548dea0fb6082f175c5081dff38add497880 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 4 Apr 2023 10:26:20 -0500 Subject: [PATCH 791/873] Revert back to y3 driver main --- scripts/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/production-testing-env.sh b/scripts/production-testing-env.sh index 925f7806d..943fe072b 100755 --- a/scripts/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -22,4 +22,4 @@ # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@update_av"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@main"} From 96436a89d63ca377fac3bfccb7dba00d612221a6 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 10 Apr 2023 13:19:37 -0500 Subject: [PATCH 792/873] Remove unneeded, stale test. --- test/pyro_state_data.txt | 10000 ------------------------------------- test/test_eos.py | 190 - 2 files changed, 10190 deletions(-) delete mode 100644 test/pyro_state_data.txt diff --git a/test/pyro_state_data.txt b/test/pyro_state_data.txt deleted file mode 100644 index 4be149d9d..000000000 --- a/test/pyro_state_data.txt +++ /dev/null @@ -1,10000 +0,0 @@ -0.00000000e+00 6.37292457e-02 2.18073376e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 7.18197378e-01 1.50000000e+03 -1.00000000e-07 6.37250603e-02 2.18065301e-01 9.08101328e-06 2.57815625e-06 1.47915085e-11 6.01503734e-07 7.18197378e-01 1.50009239e+03 -2.00000000e-07 6.37208717e-02 2.18055813e-01 2.20375887e-05 2.69624743e-06 5.92134994e-11 1.20347687e-06 7.18197378e-01 1.50020690e+03 -3.00000000e-07 6.37166795e-02 2.18046254e-01 3.51800432e-05 2.70304914e-06 1.33341942e-10 1.80595154e-06 7.18197378e-01 1.50032214e+03 -4.00000000e-07 6.37124837e-02 2.18036683e-01 4.83414664e-05 2.70482326e-06 2.37253309e-10 2.40892990e-06 7.18197378e-01 1.50043827e+03 -5.00000000e-07 6.37082845e-02 2.18027104e-01 6.15143302e-05 2.70637249e-06 3.71024239e-10 3.01241278e-06 7.18197378e-01 1.50056963e+03 -6.00000000e-07 6.37040817e-02 2.18017517e-01 7.46983104e-05 2.70791399e-06 5.34731588e-10 3.61640095e-06 7.18197378e-01 1.50066530e+03 -7.00000000e-07 6.36998754e-02 2.18007922e-01 8.78934090e-05 2.70945703e-06 7.28452435e-10 4.22089514e-06 7.18197378e-01 1.50077577e+03 -8.00000000e-07 6.36956655e-02 2.17998319e-01 1.01099641e-04 2.71100275e-06 9.52264083e-10 4.82589614e-06 7.18197378e-01 1.50092320e+03 -9.00000000e-07 6.36914520e-02 2.17988708e-01 1.14317024e-04 2.71255059e-06 1.20624406e-09 5.43140470e-06 7.18197378e-01 1.50103856e+03 -1.00000000e-06 6.36872350e-02 2.17979089e-01 1.27545575e-04 2.71410082e-06 1.49047012e-09 6.03742158e-06 7.18197378e-01 1.50115400e+03 -1.10000000e-06 6.36830145e-02 2.17969461e-01 1.40785311e-04 2.71565337e-06 1.80502023e-09 6.64394755e-06 7.18197378e-01 1.50127473e+03 -1.20000000e-06 6.36787903e-02 2.17959825e-01 1.54036248e-04 2.71720825e-06 2.14997262e-09 7.25098338e-06 7.18197378e-01 1.50139556e+03 -1.30000000e-06 6.36745626e-02 2.17950181e-01 1.67298404e-04 2.71876548e-06 2.52540570e-09 7.85852983e-06 7.18197378e-01 1.50151649e+03 -1.40000000e-06 6.36703313e-02 2.17940529e-01 1.80571795e-04 2.72032508e-06 2.93139814e-09 8.46658768e-06 7.18197378e-01 1.50163753e+03 -1.50000000e-06 6.36660964e-02 2.17930869e-01 1.93856439e-04 2.72188704e-06 3.36802883e-09 9.07515770e-06 7.18197378e-01 1.50185381e+03 -1.60000000e-06 6.36618579e-02 2.17921200e-01 2.07152353e-04 2.72345137e-06 3.83537690e-09 9.68424067e-06 7.18197378e-01 1.50185381e+03 -1.70000000e-06 6.36576159e-02 2.17911524e-01 2.20459553e-04 2.72501808e-06 4.33352170e-09 1.02938373e-05 7.18197378e-01 1.50230870e+03 -1.80000000e-06 6.36533702e-02 2.17901839e-01 2.33778057e-04 2.72658717e-06 4.86254281e-09 1.09039485e-05 7.18197378e-01 1.50230870e+03 -1.90000000e-06 6.36491209e-02 2.17892145e-01 2.47107882e-04 2.72815866e-06 5.42252005e-09 1.15145750e-05 7.18197378e-01 1.50230870e+03 -2.00000000e-06 6.36448680e-02 2.17882444e-01 2.60449046e-04 2.72973253e-06 6.01353346e-09 1.21257175e-05 7.18197378e-01 1.50230870e+03 -2.10000000e-06 6.36406114e-02 2.17872734e-01 2.73801565e-04 2.73130881e-06 6.63566334e-09 1.27373768e-05 7.18197378e-01 1.50276510e+03 -2.20000000e-06 6.36363513e-02 2.17863016e-01 2.87165457e-04 2.73288750e-06 7.28899022e-09 1.33495538e-05 7.18197378e-01 1.50276510e+03 -2.30000000e-06 6.36320875e-02 2.17853289e-01 3.00540740e-04 2.73446860e-06 7.97359483e-09 1.39622491e-05 7.18197378e-01 1.50276510e+03 -2.40000000e-06 6.36278201e-02 2.17843554e-01 3.13927429e-04 2.73605211e-06 8.68955814e-09 1.45754637e-05 7.18197378e-01 1.50276510e+03 -2.50000000e-06 6.36235490e-02 2.17833811e-01 3.27325544e-04 2.73763805e-06 9.43696140e-09 1.51891982e-05 7.18197378e-01 1.50322303e+03 -2.60000000e-06 6.36192743e-02 2.17824060e-01 3.40735102e-04 2.73922642e-06 1.02158861e-08 1.58034536e-05 7.18197378e-01 1.50322303e+03 -2.70000000e-06 6.36149959e-02 2.17814300e-01 3.54156119e-04 2.74081724e-06 1.10264139e-08 1.64182305e-05 7.18197378e-01 1.50322303e+03 -2.80000000e-06 6.36107139e-02 2.17804532e-01 3.67588614e-04 2.74241050e-06 1.18686268e-08 1.70335297e-05 7.18197378e-01 1.50322303e+03 -2.90000000e-06 6.36064282e-02 2.17794755e-01 3.81032604e-04 2.74400621e-06 1.27426069e-08 1.76493521e-05 7.18197378e-01 1.50368248e+03 -3.00000000e-06 6.36021389e-02 2.17784970e-01 3.94488107e-04 2.74560438e-06 1.36484367e-08 1.82656985e-05 7.18197378e-01 1.50368248e+03 -3.10000000e-06 6.35978458e-02 2.17775177e-01 4.07955140e-04 2.74720501e-06 1.45861988e-08 1.88825696e-05 7.18197378e-01 1.50368248e+03 -3.20000000e-06 6.35935491e-02 2.17765375e-01 4.21433721e-04 2.74880812e-06 1.55559761e-08 1.94999662e-05 7.18197378e-01 1.50368248e+03 -3.30000000e-06 6.35892487e-02 2.17755565e-01 4.34923868e-04 2.75041370e-06 1.65578519e-08 2.01178892e-05 7.18197378e-01 1.50414348e+03 -3.40000000e-06 6.35849446e-02 2.17745746e-01 4.48425598e-04 2.75202177e-06 1.75919095e-08 2.07363394e-05 7.18197378e-01 1.50414348e+03 -3.50000000e-06 6.35806368e-02 2.17735919e-01 4.61938930e-04 2.75363232e-06 1.86582326e-08 2.13553176e-05 7.18197378e-01 1.50414348e+03 -3.60000000e-06 6.35763253e-02 2.17726083e-01 4.75463880e-04 2.75524538e-06 1.97569050e-08 2.19748245e-05 7.18197378e-01 1.50414348e+03 -3.70000000e-06 6.35720101e-02 2.17716239e-01 4.89000468e-04 2.75686093e-06 2.08880109e-08 2.25948610e-05 7.18197378e-01 1.50460603e+03 -3.80000000e-06 6.35676912e-02 2.17706386e-01 5.02548711e-04 2.75847900e-06 2.20516347e-08 2.32154280e-05 7.18197378e-01 1.50460603e+03 -3.90000000e-06 6.35633685e-02 2.17696525e-01 5.16108626e-04 2.76009959e-06 2.32478610e-08 2.38365261e-05 7.18197378e-01 1.50460603e+03 -4.00000000e-06 6.35590421e-02 2.17686655e-01 5.29680233e-04 2.76172269e-06 2.44767747e-08 2.44581563e-05 7.18197378e-01 1.50460603e+03 -4.10000000e-06 6.35547120e-02 2.17676777e-01 5.43263548e-04 2.76334833e-06 2.57384610e-08 2.50803193e-05 7.18197378e-01 1.50556911e+03 -4.20000000e-06 6.35503782e-02 2.17666890e-01 5.56858591e-04 2.76497650e-06 2.70330054e-08 2.57030159e-05 7.18197378e-01 1.50556911e+03 -4.30000000e-06 6.35460406e-02 2.17656995e-01 5.70465378e-04 2.76660722e-06 2.83604934e-08 2.63262471e-05 7.18197378e-01 1.50556911e+03 -4.40000000e-06 6.35416992e-02 2.17647091e-01 5.84083929e-04 2.76824049e-06 2.97210109e-08 2.69500136e-05 7.18197378e-01 1.50556911e+03 -4.50000000e-06 6.35373541e-02 2.17637178e-01 5.97714262e-04 2.76987631e-06 3.11146440e-08 2.75743162e-05 7.18197378e-01 1.50556911e+03 -4.60000000e-06 6.35330053e-02 2.17627257e-01 6.11356394e-04 2.77151470e-06 3.25414793e-08 2.81991557e-05 7.18197378e-01 1.50556911e+03 -4.70000000e-06 6.35286526e-02 2.17617327e-01 6.25010344e-04 2.77315565e-06 3.40016031e-08 2.88245331e-05 7.18197378e-01 1.50556911e+03 -4.80000000e-06 6.35242962e-02 2.17607389e-01 6.38676131e-04 2.77479918e-06 3.54951025e-08 2.94504490e-05 7.18197378e-01 1.50556911e+03 -4.90000000e-06 6.35199360e-02 2.17597442e-01 6.52353772e-04 2.77644530e-06 3.70220650e-08 3.00769045e-05 7.18197378e-01 1.50653898e+03 -5.00000000e-06 6.35155721e-02 2.17587486e-01 6.66043286e-04 2.77809401e-06 3.85825780e-08 3.07039002e-05 7.18197378e-01 1.50653898e+03 -5.10000000e-06 6.35112043e-02 2.17577522e-01 6.79744692e-04 2.77974531e-06 4.01767290e-08 3.13314370e-05 7.18197378e-01 1.50653898e+03 -5.20000000e-06 6.35068327e-02 2.17567549e-01 6.93458008e-04 2.78139922e-06 4.18046060e-08 3.19595158e-05 7.18197378e-01 1.50653898e+03 -5.30000000e-06 6.35024574e-02 2.17557567e-01 7.07183253e-04 2.78305574e-06 4.34662971e-08 3.25881373e-05 7.18197378e-01 1.50653898e+03 -5.40000000e-06 6.34980782e-02 2.17547576e-01 7.20920444e-04 2.78471488e-06 4.51618907e-08 3.32173025e-05 7.18197378e-01 1.50653898e+03 -5.50000000e-06 6.34936952e-02 2.17537577e-01 7.34669602e-04 2.78637665e-06 4.68914756e-08 3.38470122e-05 7.18197378e-01 1.50653898e+03 -5.60000000e-06 6.34893084e-02 2.17527569e-01 7.48430743e-04 2.78804104e-06 4.86551406e-08 3.44772672e-05 7.18197378e-01 1.50653898e+03 -5.70000000e-06 6.34849178e-02 2.17517552e-01 7.62203888e-04 2.78970808e-06 5.04529753e-08 3.51080684e-05 7.18197378e-01 1.50751570e+03 -5.80000000e-06 6.34805233e-02 2.17507527e-01 7.75989055e-04 2.79137776e-06 5.22850698e-08 3.57394166e-05 7.18197378e-01 1.50751570e+03 -5.90000000e-06 6.34761250e-02 2.17497492e-01 7.89786262e-04 2.79305010e-06 5.41515132e-08 3.63713126e-05 7.18197378e-01 1.50751570e+03 -6.00000000e-06 6.34717228e-02 2.17487449e-01 8.03595529e-04 2.79472509e-06 5.60523957e-08 3.70037574e-05 7.18197378e-01 1.50751570e+03 -6.10000000e-06 6.34673168e-02 2.17477397e-01 8.17416874e-04 2.79640276e-06 5.79878075e-08 3.76367518e-05 7.18197378e-01 1.50751570e+03 -6.20000000e-06 6.34629070e-02 2.17467337e-01 8.31250316e-04 2.79808310e-06 5.99578393e-08 3.82702966e-05 7.18197378e-01 1.50751570e+03 -6.30000000e-06 6.34584933e-02 2.17457267e-01 8.45095874e-04 2.79976612e-06 6.19625818e-08 3.89043927e-05 7.18197378e-01 1.50751570e+03 -6.40000000e-06 6.34540757e-02 2.17447188e-01 8.58953567e-04 2.80145183e-06 6.40021263e-08 3.95390409e-05 7.18197378e-01 1.50751570e+03 -6.50000000e-06 6.34496542e-02 2.17437101e-01 8.72823414e-04 2.80314023e-06 6.60765641e-08 4.01742421e-05 7.18197378e-01 1.50849938e+03 -6.60000000e-06 6.34452288e-02 2.17427005e-01 8.86705435e-04 2.80483135e-06 6.81859876e-08 4.08099973e-05 7.18197378e-01 1.50849938e+03 -6.70000000e-06 6.34407996e-02 2.17416900e-01 9.00599648e-04 2.80652517e-06 7.03304882e-08 4.14463071e-05 7.18197378e-01 1.50849938e+03 -6.80000000e-06 6.34363665e-02 2.17406786e-01 9.14506072e-04 2.80822171e-06 7.25101582e-08 4.20831726e-05 7.18197378e-01 1.50849938e+03 -6.90000000e-06 6.34319294e-02 2.17396663e-01 9.28424727e-04 2.80992098e-06 7.47250902e-08 4.27205945e-05 7.18197378e-01 1.50849938e+03 -7.00000000e-06 6.34274885e-02 2.17386531e-01 9.42355631e-04 2.81162298e-06 7.69753770e-08 4.33585738e-05 7.18197378e-01 1.50849938e+03 -7.10000000e-06 6.34230437e-02 2.17376390e-01 9.56298805e-04 2.81332772e-06 7.92611116e-08 4.39971114e-05 7.18197378e-01 1.50849938e+03 -7.20000000e-06 6.34185949e-02 2.17366240e-01 9.70254268e-04 2.81503520e-06 8.15823874e-08 4.46362080e-05 7.18197378e-01 1.50849938e+03 -7.30000000e-06 6.34141422e-02 2.17356081e-01 9.84222038e-04 2.81674545e-06 8.39392981e-08 4.52758646e-05 7.18197378e-01 1.50949010e+03 -7.40000000e-06 6.34096856e-02 2.17345914e-01 9.98202136e-04 2.81845846e-06 8.63319378e-08 4.59160820e-05 7.18197378e-01 1.50949010e+03 -7.50000000e-06 6.34052250e-02 2.17335737e-01 1.01219458e-03 2.82017423e-06 8.87604005e-08 4.65568612e-05 7.18197378e-01 1.50949010e+03 -7.60000000e-06 6.34007605e-02 2.17325551e-01 1.02619939e-03 2.82189279e-06 9.12247808e-08 4.71982030e-05 7.18197378e-01 1.50949010e+03 -7.70000000e-06 6.33962921e-02 2.17315356e-01 1.04021659e-03 2.82361413e-06 9.37251735e-08 4.78401084e-05 7.18197378e-01 1.50949010e+03 -7.80000000e-06 6.33918197e-02 2.17305152e-01 1.05424619e-03 2.82533827e-06 9.62616738e-08 4.84825781e-05 7.18197378e-01 1.50949010e+03 -7.90000000e-06 6.33873433e-02 2.17294939e-01 1.06828822e-03 2.82706520e-06 9.88343768e-08 4.91256131e-05 7.18197378e-01 1.50949010e+03 -8.00000000e-06 6.33828630e-02 2.17284717e-01 1.08234269e-03 2.82879495e-06 1.01443378e-07 4.97692143e-05 7.18197378e-01 1.50949010e+03 -8.10000000e-06 6.33783787e-02 2.17274486e-01 1.09640962e-03 2.83052751e-06 1.04088775e-07 5.04133825e-05 7.18197378e-01 1.50949010e+03 -8.20000000e-06 6.33738904e-02 2.17264246e-01 1.11048905e-03 2.83226290e-06 1.06770661e-07 5.10581187e-05 7.18197378e-01 1.51048795e+03 -8.30000000e-06 6.33693981e-02 2.17253996e-01 1.12458097e-03 2.83400112e-06 1.09489135e-07 5.17034238e-05 7.18197378e-01 1.51048795e+03 -8.40000000e-06 6.33649019e-02 2.17243738e-01 1.13868542e-03 2.83574217e-06 1.12244293e-07 5.23492986e-05 7.18197378e-01 1.51048795e+03 -8.50000000e-06 6.33604016e-02 2.17233470e-01 1.15280241e-03 2.83748608e-06 1.15036232e-07 5.29957441e-05 7.18197378e-01 1.51048795e+03 -8.60000000e-06 6.33558973e-02 2.17223193e-01 1.16693197e-03 2.83923284e-06 1.17865050e-07 5.36427612e-05 7.18197378e-01 1.51048795e+03 -8.70000000e-06 6.33513890e-02 2.17212907e-01 1.18107411e-03 2.84098246e-06 1.20730844e-07 5.42903507e-05 7.18197378e-01 1.51048795e+03 -8.80000000e-06 6.33468767e-02 2.17202612e-01 1.19522885e-03 2.84273496e-06 1.23633712e-07 5.49385136e-05 7.18197378e-01 1.51048795e+03 -8.90000000e-06 6.33423604e-02 2.17192307e-01 1.20939622e-03 2.84449033e-06 1.26573753e-07 5.55872508e-05 7.18197378e-01 1.51048795e+03 -9.00000000e-06 6.33378401e-02 2.17181993e-01 1.22357623e-03 2.84624859e-06 1.29551065e-07 5.62365632e-05 7.18197378e-01 1.51149302e+03 -9.10000000e-06 6.33333157e-02 2.17171671e-01 1.23776891e-03 2.84800975e-06 1.32565747e-07 5.68864517e-05 7.18197378e-01 1.51149302e+03 -9.20000000e-06 6.33287872e-02 2.17161338e-01 1.25197427e-03 2.84977381e-06 1.35617898e-07 5.75369173e-05 7.18197378e-01 1.51149302e+03 -9.30000000e-06 6.33242547e-02 2.17150997e-01 1.26619233e-03 2.85154078e-06 1.38707618e-07 5.81879608e-05 7.18197378e-01 1.51149302e+03 -9.40000000e-06 6.33197182e-02 2.17140646e-01 1.28042312e-03 2.85331067e-06 1.41835006e-07 5.88395832e-05 7.18197378e-01 1.51149302e+03 -9.50000000e-06 6.33151776e-02 2.17130286e-01 1.29466666e-03 2.85508348e-06 1.45000163e-07 5.94917853e-05 7.18197378e-01 1.51149302e+03 -9.60000000e-06 6.33106329e-02 2.17119917e-01 1.30892296e-03 2.85685924e-06 1.48203189e-07 6.01445682e-05 7.18197378e-01 1.51149302e+03 -9.70000000e-06 6.33060841e-02 2.17109538e-01 1.32319205e-03 2.85863793e-06 1.51444185e-07 6.07979328e-05 7.18197378e-01 1.51149302e+03 -9.80000000e-06 6.33015313e-02 2.17099150e-01 1.33747394e-03 2.86041958e-06 1.54723251e-07 6.14518799e-05 7.18197378e-01 1.51250542e+03 -9.90000000e-06 6.32969743e-02 2.17088752e-01 1.35176867e-03 2.86220419e-06 1.58040490e-07 6.21064105e-05 7.18197378e-01 1.51250542e+03 -1.00000000e-05 6.32924133e-02 2.17078346e-01 1.36607624e-03 2.86399177e-06 1.61396002e-07 6.27615255e-05 7.18197378e-01 1.51250542e+03 -1.01000000e-05 6.32878482e-02 2.17067929e-01 1.38039668e-03 2.86578232e-06 1.64789890e-07 6.34172259e-05 7.18197378e-01 1.51250542e+03 -1.02000000e-05 6.32832789e-02 2.17057504e-01 1.39473000e-03 2.86757586e-06 1.68222256e-07 6.40735126e-05 7.18197378e-01 1.51250542e+03 -1.03000000e-05 6.32787056e-02 2.17047069e-01 1.40907624e-03 2.86937239e-06 1.71693203e-07 6.47303866e-05 7.18197378e-01 1.51250542e+03 -1.04000000e-05 6.32741281e-02 2.17036624e-01 1.42343541e-03 2.87117192e-06 1.75202833e-07 6.53878488e-05 7.18197378e-01 1.51250542e+03 -1.05000000e-05 6.32695465e-02 2.17026170e-01 1.43780753e-03 2.87297447e-06 1.78751249e-07 6.60459001e-05 7.18197378e-01 1.51250542e+03 -1.06000000e-05 6.32649608e-02 2.17015707e-01 1.45219263e-03 2.87478003e-06 1.82338555e-07 6.67045414e-05 7.18197378e-01 1.51352523e+03 -1.07000000e-05 6.32603709e-02 2.17005234e-01 1.46659071e-03 2.87658862e-06 1.85964856e-07 6.73637738e-05 7.18197378e-01 1.51352523e+03 -1.08000000e-05 6.32557768e-02 2.16994752e-01 1.48100181e-03 2.87840024e-06 1.89630255e-07 6.80235982e-05 7.18197378e-01 1.51352523e+03 -1.09000000e-05 6.32511786e-02 2.16984260e-01 1.49542595e-03 2.88021491e-06 1.93334856e-07 6.86840155e-05 7.18197378e-01 1.51352523e+03 -1.10000000e-05 6.32465763e-02 2.16973759e-01 1.50986315e-03 2.88203264e-06 1.97078765e-07 6.93450267e-05 7.18197378e-01 1.51352523e+03 -1.11000000e-05 6.32419697e-02 2.16963248e-01 1.52431342e-03 2.88385342e-06 2.00862086e-07 7.00066328e-05 7.18197378e-01 1.51352523e+03 -1.12000000e-05 6.32373590e-02 2.16952727e-01 1.53877679e-03 2.88567728e-06 2.04684925e-07 7.06688346e-05 7.18197378e-01 1.51352523e+03 -1.13000000e-05 6.32327442e-02 2.16942197e-01 1.55325328e-03 2.88750421e-06 2.08547388e-07 7.13316332e-05 7.18197378e-01 1.51352523e+03 -1.14000000e-05 6.32281251e-02 2.16931657e-01 1.56774291e-03 2.88933423e-06 2.12449581e-07 7.19950295e-05 7.18197378e-01 1.51455256e+03 -1.15000000e-05 6.32235018e-02 2.16921108e-01 1.58224571e-03 2.89116735e-06 2.16391610e-07 7.26590245e-05 7.18197378e-01 1.51455256e+03 -1.16000000e-05 6.32188743e-02 2.16910549e-01 1.59676168e-03 2.89300358e-06 2.20373582e-07 7.33236192e-05 7.18197378e-01 1.51455256e+03 -1.17000000e-05 6.32142426e-02 2.16899981e-01 1.61129087e-03 2.89484292e-06 2.24395604e-07 7.39888145e-05 7.18197378e-01 1.51455256e+03 -1.18000000e-05 6.32096067e-02 2.16889402e-01 1.62583328e-03 2.89668538e-06 2.28457784e-07 7.46546114e-05 7.18197378e-01 1.51455256e+03 -1.19000000e-05 6.32049666e-02 2.16878815e-01 1.64038894e-03 2.89853097e-06 2.32560229e-07 7.53210109e-05 7.18197378e-01 1.51455256e+03 -1.20000000e-05 6.32003222e-02 2.16868217e-01 1.65495787e-03 2.90037970e-06 2.36703047e-07 7.59880139e-05 7.18197378e-01 1.51455256e+03 -1.21000000e-05 6.31956736e-02 2.16857610e-01 1.66954010e-03 2.90223159e-06 2.40886347e-07 7.66556214e-05 7.18197378e-01 1.51455256e+03 -1.22000000e-05 6.31910208e-02 2.16846993e-01 1.68413563e-03 2.90408663e-06 2.45110238e-07 7.73238345e-05 7.18197378e-01 1.51558750e+03 -1.23000000e-05 6.31863637e-02 2.16836366e-01 1.69874450e-03 2.90594484e-06 2.49374828e-07 7.79926541e-05 7.18197378e-01 1.51558750e+03 -1.24000000e-05 6.31817023e-02 2.16825730e-01 1.71336673e-03 2.90780623e-06 2.53680227e-07 7.86620812e-05 7.18197378e-01 1.51558750e+03 -1.25000000e-05 6.31770367e-02 2.16815083e-01 1.72800234e-03 2.90967080e-06 2.58026545e-07 7.93321167e-05 7.18197378e-01 1.51558750e+03 -1.26000000e-05 6.31723668e-02 2.16804427e-01 1.74265135e-03 2.91153857e-06 2.62413892e-07 8.00027617e-05 7.18197378e-01 1.51558750e+03 -1.27000000e-05 6.31676927e-02 2.16793761e-01 1.75731378e-03 2.91340954e-06 2.66842379e-07 8.06740171e-05 7.18197378e-01 1.51558750e+03 -1.28000000e-05 6.31630142e-02 2.16783086e-01 1.77198965e-03 2.91528373e-06 2.71312115e-07 8.13458840e-05 7.18197378e-01 1.51558750e+03 -1.29000000e-05 6.31583315e-02 2.16772400e-01 1.78667899e-03 2.91716114e-06 2.75823213e-07 8.20183634e-05 7.18197378e-01 1.51558750e+03 -1.30000000e-05 6.31536444e-02 2.16761705e-01 1.80138183e-03 2.91904178e-06 2.80375783e-07 8.26914562e-05 7.18197378e-01 1.51558750e+03 -1.31000000e-05 6.31489530e-02 2.16751000e-01 1.81609817e-03 2.92092567e-06 2.84969939e-07 8.33651634e-05 7.18197378e-01 1.51725489e+03 -1.32000000e-05 6.31442574e-02 2.16740285e-01 1.83082804e-03 2.92281280e-06 2.89605791e-07 8.40394861e-05 7.18197378e-01 1.51725489e+03 -1.33000000e-05 6.31395574e-02 2.16729560e-01 1.84557147e-03 2.92470320e-06 2.94283452e-07 8.47144253e-05 7.18197378e-01 1.51725489e+03 -1.34000000e-05 6.31348530e-02 2.16718825e-01 1.86032848e-03 2.92659687e-06 2.99003035e-07 8.53899819e-05 7.18197378e-01 1.51725489e+03 -1.35000000e-05 6.31301444e-02 2.16708080e-01 1.87509909e-03 2.92849381e-06 3.03764654e-07 8.60661571e-05 7.18197378e-01 1.51725489e+03 -1.36000000e-05 6.31254314e-02 2.16697326e-01 1.88988332e-03 2.93039404e-06 3.08568422e-07 8.67429517e-05 7.18197378e-01 1.51725489e+03 -1.37000000e-05 6.31207140e-02 2.16686561e-01 1.90468119e-03 2.93229758e-06 3.13414453e-07 8.74203668e-05 7.18197378e-01 1.51725489e+03 -1.38000000e-05 6.31159923e-02 2.16675786e-01 1.91949274e-03 2.93420442e-06 3.18302861e-07 8.80984035e-05 7.18197378e-01 1.51725489e+03 -1.39000000e-05 6.31112662e-02 2.16665002e-01 1.93431797e-03 2.93611458e-06 3.23233761e-07 8.87770627e-05 7.18197378e-01 1.51725489e+03 -1.40000000e-05 6.31065358e-02 2.16654207e-01 1.94915691e-03 2.93802806e-06 3.28207268e-07 8.94563455e-05 7.18197378e-01 1.51725489e+03 -1.41000000e-05 6.31018009e-02 2.16643402e-01 1.96400959e-03 2.93994488e-06 3.33223497e-07 9.01362529e-05 7.18197378e-01 1.51725489e+03 -1.42000000e-05 6.30970617e-02 2.16632587e-01 1.97887603e-03 2.94186505e-06 3.38282564e-07 9.08167860e-05 7.18197378e-01 1.51725489e+03 -1.43000000e-05 6.30923181e-02 2.16621763e-01 1.99375625e-03 2.94378858e-06 3.43384585e-07 9.14979457e-05 7.18197378e-01 1.51725489e+03 -1.44000000e-05 6.30875701e-02 2.16610928e-01 2.00865027e-03 2.94571547e-06 3.48529677e-07 9.21797331e-05 7.18197378e-01 1.51894237e+03 -1.45000000e-05 6.30828177e-02 2.16600083e-01 2.02355812e-03 2.94764574e-06 3.53717956e-07 9.28621493e-05 7.18197378e-01 1.51894237e+03 -1.46000000e-05 6.30780608e-02 2.16589228e-01 2.03847982e-03 2.94957940e-06 3.58949540e-07 9.35451952e-05 7.18197378e-01 1.51894237e+03 -1.47000000e-05 6.30732996e-02 2.16578363e-01 2.05341539e-03 2.95151645e-06 3.64224547e-07 9.42288719e-05 7.18197378e-01 1.51894237e+03 -1.48000000e-05 6.30685339e-02 2.16567487e-01 2.06836486e-03 2.95345691e-06 3.69543093e-07 9.49131805e-05 7.18197378e-01 1.51894237e+03 -1.49000000e-05 6.30637637e-02 2.16556602e-01 2.08332824e-03 2.95540078e-06 3.74905298e-07 9.55981220e-05 7.18197378e-01 1.51894237e+03 -1.50000000e-05 6.30589892e-02 2.16545706e-01 2.09830557e-03 2.95734808e-06 3.80311279e-07 9.62836974e-05 7.18197378e-01 1.51894237e+03 -1.51000000e-05 6.30542101e-02 2.16534800e-01 2.11329686e-03 2.95929882e-06 3.85761157e-07 9.69699079e-05 7.18197378e-01 1.51894237e+03 -1.52000000e-05 6.30494266e-02 2.16523884e-01 2.12830214e-03 2.96125300e-06 3.91255050e-07 9.76567543e-05 7.18197378e-01 1.51894237e+03 -1.53000000e-05 6.30446387e-02 2.16512958e-01 2.14332143e-03 2.96321065e-06 3.96793079e-07 9.83442380e-05 7.18197378e-01 1.51894237e+03 -1.54000000e-05 6.30398463e-02 2.16502021e-01 2.15835475e-03 2.96517176e-06 4.02375363e-07 9.90323597e-05 7.18197378e-01 1.51894237e+03 -1.55000000e-05 6.30350494e-02 2.16491074e-01 2.17340214e-03 2.96713634e-06 4.08002023e-07 9.97211207e-05 7.18197378e-01 1.51894237e+03 -1.56000000e-05 6.30302480e-02 2.16480117e-01 2.18846360e-03 2.96910442e-06 4.13673180e-07 1.00410522e-04 7.18197378e-01 1.51894237e+03 -1.57000000e-05 6.30254421e-02 2.16469150e-01 2.20353918e-03 2.97107599e-06 4.19388956e-07 1.01100565e-04 7.18197378e-01 1.52065035e+03 -1.58000000e-05 6.30206316e-02 2.16458172e-01 2.21862888e-03 2.97305107e-06 4.25149472e-07 1.01791250e-04 7.18197378e-01 1.52065035e+03 -1.59000000e-05 6.30158167e-02 2.16447184e-01 2.23373273e-03 2.97502967e-06 4.30954850e-07 1.02482578e-04 7.18197378e-01 1.52065035e+03 -1.60000000e-05 6.30109973e-02 2.16436186e-01 2.24885076e-03 2.97701180e-06 4.36805212e-07 1.03174551e-04 7.18197378e-01 1.52065035e+03 -1.61000000e-05 6.30061733e-02 2.16425177e-01 2.26398299e-03 2.97899747e-06 4.42700683e-07 1.03867170e-04 7.18197378e-01 1.52065035e+03 -1.62000000e-05 6.30013448e-02 2.16414158e-01 2.27912944e-03 2.98098669e-06 4.48641384e-07 1.04560436e-04 7.18197378e-01 1.52065035e+03 -1.63000000e-05 6.29965118e-02 2.16403128e-01 2.29429014e-03 2.98297947e-06 4.54627439e-07 1.05254349e-04 7.18197378e-01 1.52065035e+03 -1.64000000e-05 6.29916742e-02 2.16392088e-01 2.30946511e-03 2.98497582e-06 4.60658973e-07 1.05948911e-04 7.18197378e-01 1.52065035e+03 -1.65000000e-05 6.29868320e-02 2.16381038e-01 2.32465438e-03 2.98697576e-06 4.66736110e-07 1.06644123e-04 7.18197378e-01 1.52065035e+03 -1.66000000e-05 6.29819853e-02 2.16369977e-01 2.33985797e-03 2.98897928e-06 4.72858974e-07 1.07339987e-04 7.18197378e-01 1.52065035e+03 -1.67000000e-05 6.29771340e-02 2.16358906e-01 2.35507590e-03 2.99098642e-06 4.79027691e-07 1.08036502e-04 7.18197378e-01 1.52065035e+03 -1.68000000e-05 6.29722782e-02 2.16347824e-01 2.37030820e-03 2.99299716e-06 4.85242387e-07 1.08733671e-04 7.18197378e-01 1.52065035e+03 -1.69000000e-05 6.29674177e-02 2.16336732e-01 2.38555490e-03 2.99501154e-06 4.91503187e-07 1.09431494e-04 7.18197378e-01 1.52065035e+03 -1.70000000e-05 6.29625526e-02 2.16325629e-01 2.40081601e-03 2.99702955e-06 4.97810219e-07 1.10129972e-04 7.18197378e-01 1.52237929e+03 -1.71000000e-05 6.29576830e-02 2.16314515e-01 2.41609156e-03 2.99905121e-06 5.04163608e-07 1.10829107e-04 7.18197378e-01 1.52237929e+03 -1.72000000e-05 6.29528087e-02 2.16303391e-01 2.43138157e-03 3.00107652e-06 5.10563483e-07 1.11528900e-04 7.18197378e-01 1.52237929e+03 -1.73000000e-05 6.29479298e-02 2.16292257e-01 2.44668608e-03 3.00310551e-06 5.17009971e-07 1.12229351e-04 7.18197378e-01 1.52237929e+03 -1.74000000e-05 6.29430463e-02 2.16281112e-01 2.46200510e-03 3.00513818e-06 5.23503199e-07 1.12930463e-04 7.18197378e-01 1.52237929e+03 -1.75000000e-05 6.29381581e-02 2.16269956e-01 2.47733866e-03 3.00717453e-06 5.30043297e-07 1.13632235e-04 7.18197378e-01 1.52237929e+03 -1.76000000e-05 6.29332653e-02 2.16258790e-01 2.49268678e-03 3.00921460e-06 5.36630393e-07 1.14334669e-04 7.18197378e-01 1.52237929e+03 -1.77000000e-05 6.29283679e-02 2.16247612e-01 2.50804949e-03 3.01125837e-06 5.43264616e-07 1.15037767e-04 7.18197378e-01 1.52237929e+03 -1.78000000e-05 6.29234658e-02 2.16236425e-01 2.52342682e-03 3.01330588e-06 5.49946097e-07 1.15741529e-04 7.18197378e-01 1.52237929e+03 -1.79000000e-05 6.29185590e-02 2.16225226e-01 2.53881878e-03 3.01535712e-06 5.56674965e-07 1.16445956e-04 7.18197378e-01 1.52237929e+03 -1.80000000e-05 6.29136475e-02 2.16214017e-01 2.55422540e-03 3.01741211e-06 5.63451350e-07 1.17151050e-04 7.18197378e-01 1.52237929e+03 -1.81000000e-05 6.29087314e-02 2.16202797e-01 2.56964672e-03 3.01947086e-06 5.70275385e-07 1.17856812e-04 7.18197378e-01 1.52237929e+03 -1.82000000e-05 6.29038106e-02 2.16191567e-01 2.58508274e-03 3.02153338e-06 5.77147199e-07 1.18563243e-04 7.18197378e-01 1.52237929e+03 -1.83000000e-05 6.28988850e-02 2.16180326e-01 2.60053351e-03 3.02359968e-06 5.84066925e-07 1.19270343e-04 7.18197378e-01 1.52412966e+03 -1.84000000e-05 6.28939548e-02 2.16169074e-01 2.61599903e-03 3.02566978e-06 5.91034696e-07 1.19978115e-04 7.18197378e-01 1.52412966e+03 -1.85000000e-05 6.28890198e-02 2.16157811e-01 2.63147935e-03 3.02774368e-06 5.98050644e-07 1.20686559e-04 7.18197378e-01 1.52412966e+03 -1.86000000e-05 6.28840802e-02 2.16146537e-01 2.64697448e-03 3.02982141e-06 6.05114902e-07 1.21395676e-04 7.18197378e-01 1.52412966e+03 -1.87000000e-05 6.28791358e-02 2.16135252e-01 2.66248445e-03 3.03190296e-06 6.12227603e-07 1.22105468e-04 7.18197378e-01 1.52412966e+03 -1.88000000e-05 6.28741866e-02 2.16123957e-01 2.67800928e-03 3.03398835e-06 6.19388882e-07 1.22815936e-04 7.18197378e-01 1.52412966e+03 -1.89000000e-05 6.28692327e-02 2.16112651e-01 2.69354900e-03 3.03607760e-06 6.26598872e-07 1.23527080e-04 7.18197378e-01 1.52412966e+03 -1.90000000e-05 6.28642741e-02 2.16101334e-01 2.70910363e-03 3.03817071e-06 6.33857709e-07 1.24238902e-04 7.18197378e-01 1.52412966e+03 -1.91000000e-05 6.28593107e-02 2.16090005e-01 2.72467321e-03 3.04026770e-06 6.41165528e-07 1.24951404e-04 7.18197378e-01 1.52412966e+03 -1.92000000e-05 6.28543425e-02 2.16078666e-01 2.74025776e-03 3.04236858e-06 6.48522464e-07 1.25664586e-04 7.18197378e-01 1.52412966e+03 -1.93000000e-05 6.28493695e-02 2.16067317e-01 2.75585729e-03 3.04447336e-06 6.55928653e-07 1.26378449e-04 7.18197378e-01 1.52412966e+03 -1.94000000e-05 6.28443918e-02 2.16055956e-01 2.77147184e-03 3.04658205e-06 6.63384233e-07 1.27092995e-04 7.18197378e-01 1.52412966e+03 -1.95000000e-05 6.28394092e-02 2.16044584e-01 2.78710144e-03 3.04869467e-06 6.70889340e-07 1.27808225e-04 7.18197378e-01 1.52412966e+03 -1.96000000e-05 6.28344218e-02 2.16033201e-01 2.80274611e-03 3.05081122e-06 6.78444111e-07 1.28524140e-04 7.18197378e-01 1.52590195e+03 -1.97000000e-05 6.28294297e-02 2.16021807e-01 2.81840587e-03 3.05293173e-06 6.86048686e-07 1.29240741e-04 7.18197378e-01 1.52590195e+03 -1.98000000e-05 6.28244327e-02 2.16010402e-01 2.83408075e-03 3.05505619e-06 6.93703201e-07 1.29958029e-04 7.18197378e-01 1.52590195e+03 -1.99000000e-05 6.28194309e-02 2.15998986e-01 2.84977078e-03 3.05718464e-06 7.01407795e-07 1.30676006e-04 7.18197378e-01 1.52590195e+03 -2.00000000e-05 6.28144242e-02 2.15987559e-01 2.86547599e-03 3.05931706e-06 7.09162609e-07 1.31394673e-04 7.18197378e-01 1.52590195e+03 -2.01000000e-05 6.28094127e-02 2.15976121e-01 2.88119639e-03 3.06145349e-06 7.16967781e-07 1.32114030e-04 7.18197378e-01 1.52590195e+03 -2.02000000e-05 6.28043963e-02 2.15964671e-01 2.89693202e-03 3.06359393e-06 7.24823452e-07 1.32834080e-04 7.18197378e-01 1.52590195e+03 -2.03000000e-05 6.27993751e-02 2.15953211e-01 2.91268291e-03 3.06573839e-06 7.32729762e-07 1.33554823e-04 7.18197378e-01 1.52590195e+03 -2.04000000e-05 6.27943490e-02 2.15941739e-01 2.92844907e-03 3.06788689e-06 7.40686852e-07 1.34276260e-04 7.18197378e-01 1.52590195e+03 -2.05000000e-05 6.27893181e-02 2.15930256e-01 2.94423054e-03 3.07003944e-06 7.48694864e-07 1.34998393e-04 7.18197378e-01 1.52590195e+03 -2.06000000e-05 6.27842822e-02 2.15918762e-01 2.96002734e-03 3.07219605e-06 7.56753940e-07 1.35721223e-04 7.18197378e-01 1.52590195e+03 -2.07000000e-05 6.27792414e-02 2.15907257e-01 2.97583949e-03 3.07435674e-06 7.64864223e-07 1.36444751e-04 7.18197378e-01 1.52590195e+03 -2.08000000e-05 6.27741958e-02 2.15895741e-01 2.99166704e-03 3.07652151e-06 7.73025854e-07 1.37168978e-04 7.18197378e-01 1.52590195e+03 -2.09000000e-05 6.27691452e-02 2.15884213e-01 3.00750999e-03 3.07869038e-06 7.81238978e-07 1.37893905e-04 7.18197378e-01 1.52769664e+03 -2.10000000e-05 6.27640897e-02 2.15872674e-01 3.02336839e-03 3.08086337e-06 7.89503739e-07 1.38619535e-04 7.18197378e-01 1.52769664e+03 -2.11000000e-05 6.27590292e-02 2.15861124e-01 3.03924224e-03 3.08304049e-06 7.97820280e-07 1.39345867e-04 7.18197378e-01 1.52769664e+03 -2.12000000e-05 6.27539639e-02 2.15849562e-01 3.05513160e-03 3.08522174e-06 8.06188747e-07 1.40072903e-04 7.18197378e-01 1.52769664e+03 -2.13000000e-05 6.27488935e-02 2.15837989e-01 3.07103647e-03 3.08740715e-06 8.14609285e-07 1.40800645e-04 7.18197378e-01 1.52769664e+03 -2.14000000e-05 6.27438183e-02 2.15826405e-01 3.08695688e-03 3.08959672e-06 8.23082039e-07 1.41529093e-04 7.18197378e-01 1.52769664e+03 -2.15000000e-05 6.27387380e-02 2.15814810e-01 3.10289288e-03 3.09179047e-06 8.31607156e-07 1.42258249e-04 7.18197378e-01 1.52769664e+03 -2.16000000e-05 6.27336528e-02 2.15803203e-01 3.11884447e-03 3.09398841e-06 8.40184783e-07 1.42988114e-04 7.18197378e-01 1.52769664e+03 -2.17000000e-05 6.27285626e-02 2.15791584e-01 3.13481169e-03 3.09619056e-06 8.48815066e-07 1.43718689e-04 7.18197378e-01 1.52769664e+03 -2.18000000e-05 6.27234674e-02 2.15779954e-01 3.15079456e-03 3.09839693e-06 8.57498153e-07 1.44449976e-04 7.18197378e-01 1.52769664e+03 -2.19000000e-05 6.27183672e-02 2.15768313e-01 3.16679312e-03 3.10060753e-06 8.66234193e-07 1.45181976e-04 7.18197378e-01 1.52769664e+03 -2.20000000e-05 6.27132620e-02 2.15756660e-01 3.18280739e-03 3.10282237e-06 8.75023334e-07 1.45914689e-04 7.18197378e-01 1.52769664e+03 -2.21000000e-05 6.27081518e-02 2.15744996e-01 3.19883740e-03 3.10504148e-06 8.83865725e-07 1.46648118e-04 7.18197378e-01 1.52769664e+03 -2.22000000e-05 6.27030365e-02 2.15733320e-01 3.21488317e-03 3.10726486e-06 8.92761516e-07 1.47382263e-04 7.18197378e-01 1.52951425e+03 -2.23000000e-05 6.26979162e-02 2.15721633e-01 3.23094473e-03 3.10949252e-06 9.01710857e-07 1.48117126e-04 7.18197378e-01 1.52951425e+03 -2.24000000e-05 6.26927909e-02 2.15709934e-01 3.24702212e-03 3.11172448e-06 9.10713899e-07 1.48852708e-04 7.18197378e-01 1.52951425e+03 -2.25000000e-05 6.26876605e-02 2.15698224e-01 3.26311535e-03 3.11396076e-06 9.19770792e-07 1.49589010e-04 7.18197378e-01 1.52951425e+03 -2.26000000e-05 6.26825251e-02 2.15686501e-01 3.27922446e-03 3.11620137e-06 9.28881689e-07 1.50326034e-04 7.18197378e-01 1.52951425e+03 -2.27000000e-05 6.26773846e-02 2.15674768e-01 3.29534948e-03 3.11844632e-06 9.38046741e-07 1.51063780e-04 7.18197378e-01 1.52951425e+03 -2.28000000e-05 6.26722390e-02 2.15663023e-01 3.31149043e-03 3.12069562e-06 9.47266101e-07 1.51802251e-04 7.18197378e-01 1.52951425e+03 -2.29000000e-05 6.26670883e-02 2.15651266e-01 3.32764734e-03 3.12294930e-06 9.56539922e-07 1.52541447e-04 7.18197378e-01 1.52951425e+03 -2.30000000e-05 6.26619325e-02 2.15639497e-01 3.34382024e-03 3.12520736e-06 9.65868358e-07 1.53281369e-04 7.18197378e-01 1.52951425e+03 -2.31000000e-05 6.26567716e-02 2.15627717e-01 3.36000915e-03 3.12746981e-06 9.75251563e-07 1.54022019e-04 7.18197378e-01 1.52951425e+03 -2.32000000e-05 6.26516056e-02 2.15615925e-01 3.37621411e-03 3.12973668e-06 9.84689691e-07 1.54763399e-04 7.18197378e-01 1.52951425e+03 -2.33000000e-05 6.26464345e-02 2.15604121e-01 3.39243515e-03 3.13200797e-06 9.94182898e-07 1.55505508e-04 7.18197378e-01 1.52951425e+03 -2.34000000e-05 6.26412582e-02 2.15592305e-01 3.40867228e-03 3.13428371e-06 1.00373134e-06 1.56248350e-04 7.18197378e-01 1.52951425e+03 -2.35000000e-05 6.26360768e-02 2.15580478e-01 3.42492555e-03 3.13656390e-06 1.01333517e-06 1.56991924e-04 7.18197378e-01 1.53135532e+03 -2.36000000e-05 6.26308902e-02 2.15568639e-01 3.44119498e-03 3.13884856e-06 1.02299455e-06 1.57736233e-04 7.18197378e-01 1.53135532e+03 -2.37000000e-05 6.26256985e-02 2.15556788e-01 3.45748059e-03 3.14113771e-06 1.03270963e-06 1.58481277e-04 7.18197378e-01 1.53135532e+03 -2.38000000e-05 6.26205016e-02 2.15544925e-01 3.47378242e-03 3.14343135e-06 1.04248058e-06 1.59227059e-04 7.18197378e-01 1.53135532e+03 -2.39000000e-05 6.26152995e-02 2.15533051e-01 3.49010050e-03 3.14572951e-06 1.05230755e-06 1.59973578e-04 7.18197378e-01 1.53135532e+03 -2.40000000e-05 6.26100923e-02 2.15521164e-01 3.50643485e-03 3.14803219e-06 1.06219069e-06 1.60720837e-04 7.18197378e-01 1.53135532e+03 -2.41000000e-05 6.26048798e-02 2.15509266e-01 3.52278551e-03 3.15033942e-06 1.07213018e-06 1.61468837e-04 7.18197378e-01 1.53135532e+03 -2.42000000e-05 6.25996621e-02 2.15497355e-01 3.53915250e-03 3.15265121e-06 1.08212616e-06 1.62217579e-04 7.18197378e-01 1.53135532e+03 -2.43000000e-05 6.25944392e-02 2.15485433e-01 3.55553585e-03 3.15496757e-06 1.09217880e-06 1.62967064e-04 7.18197378e-01 1.53135532e+03 -2.44000000e-05 6.25892111e-02 2.15473499e-01 3.57193559e-03 3.15728852e-06 1.10228826e-06 1.63717294e-04 7.18197378e-01 1.53135532e+03 -2.45000000e-05 6.25839778e-02 2.15461552e-01 3.58835175e-03 3.15961407e-06 1.11245471e-06 1.64468270e-04 7.18197378e-01 1.53135532e+03 -2.46000000e-05 6.25787392e-02 2.15449594e-01 3.60478436e-03 3.16194423e-06 1.12267829e-06 1.65219994e-04 7.18197378e-01 1.53135532e+03 -2.47000000e-05 6.25734953e-02 2.15437624e-01 3.62123345e-03 3.16427903e-06 1.13295919e-06 1.65972466e-04 7.18197378e-01 1.53135532e+03 -2.48000000e-05 6.25682462e-02 2.15425641e-01 3.63769904e-03 3.16661848e-06 1.14329755e-06 1.66725688e-04 7.18197378e-01 1.53322038e+03 -2.49000000e-05 6.25629918e-02 2.15413647e-01 3.65418118e-03 3.16896260e-06 1.15369354e-06 1.67479662e-04 7.18197378e-01 1.53322038e+03 -2.50000000e-05 6.25577321e-02 2.15401640e-01 3.67067988e-03 3.17131139e-06 1.16414733e-06 1.68234389e-04 7.18197378e-01 1.53322038e+03 -2.51000000e-05 6.25524672e-02 2.15389622e-01 3.68719518e-03 3.17366487e-06 1.17465909e-06 1.68989869e-04 7.18197378e-01 1.53322038e+03 -2.52000000e-05 6.25471969e-02 2.15377591e-01 3.70372711e-03 3.17602307e-06 1.18522897e-06 1.69746105e-04 7.18197378e-01 1.53322038e+03 -2.53000000e-05 6.25419213e-02 2.15365548e-01 3.72027569e-03 3.17838599e-06 1.19585714e-06 1.70503098e-04 7.18197378e-01 1.53322038e+03 -2.54000000e-05 6.25366404e-02 2.15353493e-01 3.73684096e-03 3.18075365e-06 1.20654377e-06 1.71260849e-04 7.18197378e-01 1.53322038e+03 -2.55000000e-05 6.25313542e-02 2.15341425e-01 3.75342295e-03 3.18312607e-06 1.21728903e-06 1.72019360e-04 7.18197378e-01 1.53322038e+03 -2.56000000e-05 6.25260626e-02 2.15329346e-01 3.77002168e-03 3.18550326e-06 1.22809309e-06 1.72778631e-04 7.18197378e-01 1.53322038e+03 -2.57000000e-05 6.25207657e-02 2.15317254e-01 3.78663720e-03 3.18788524e-06 1.23895610e-06 1.73538664e-04 7.18197378e-01 1.53322038e+03 -2.58000000e-05 6.25154634e-02 2.15305150e-01 3.80326952e-03 3.19027203e-06 1.24987825e-06 1.74299462e-04 7.18197378e-01 1.53322038e+03 -2.59000000e-05 6.25101558e-02 2.15293033e-01 3.81991867e-03 3.19266363e-06 1.26085969e-06 1.75061024e-04 7.18197378e-01 1.53322038e+03 -2.60000000e-05 6.25048428e-02 2.15280904e-01 3.83658470e-03 3.19506008e-06 1.27190061e-06 1.75823352e-04 7.18197378e-01 1.53322038e+03 -2.61000000e-05 6.24995244e-02 2.15268763e-01 3.85326762e-03 3.19746137e-06 1.28300116e-06 1.76586449e-04 7.18197378e-01 1.53511001e+03 -2.62000000e-05 6.24942006e-02 2.15256610e-01 3.86996747e-03 3.19986753e-06 1.29416153e-06 1.77350314e-04 7.18197378e-01 1.53511001e+03 -2.63000000e-05 6.24888713e-02 2.15244444e-01 3.88668429e-03 3.20227858e-06 1.30538188e-06 1.78114950e-04 7.18197378e-01 1.53511001e+03 -2.64000000e-05 6.24835367e-02 2.15232266e-01 3.90341809e-03 3.20469453e-06 1.31666238e-06 1.78880357e-04 7.18197378e-01 1.53511001e+03 -2.65000000e-05 6.24781966e-02 2.15220075e-01 3.92016892e-03 3.20711540e-06 1.32800322e-06 1.79646538e-04 7.18197378e-01 1.53511001e+03 -2.66000000e-05 6.24728511e-02 2.15207872e-01 3.93693679e-03 3.20954120e-06 1.33940455e-06 1.80413494e-04 7.18197378e-01 1.53511001e+03 -2.67000000e-05 6.24675002e-02 2.15195656e-01 3.95372175e-03 3.21197196e-06 1.35086656e-06 1.81181226e-04 7.18197378e-01 1.53511001e+03 -2.68000000e-05 6.24621438e-02 2.15183428e-01 3.97052383e-03 3.21440768e-06 1.36238941e-06 1.81949735e-04 7.18197378e-01 1.53511001e+03 -2.69000000e-05 6.24567819e-02 2.15171187e-01 3.98734305e-03 3.21684839e-06 1.37397330e-06 1.82719023e-04 7.18197378e-01 1.53511001e+03 -2.70000000e-05 6.24514146e-02 2.15158934e-01 4.00417944e-03 3.21929410e-06 1.38561838e-06 1.83489091e-04 7.18197378e-01 1.53511001e+03 -2.71000000e-05 6.24460417e-02 2.15146668e-01 4.02103305e-03 3.22174482e-06 1.39732484e-06 1.84259941e-04 7.18197378e-01 1.53511001e+03 -2.72000000e-05 6.24406634e-02 2.15134390e-01 4.03790389e-03 3.22420058e-06 1.40909285e-06 1.85031575e-04 7.18197378e-01 1.53511001e+03 -2.73000000e-05 6.24352795e-02 2.15122099e-01 4.05479201e-03 3.22666140e-06 1.42092259e-06 1.85803992e-04 7.18197378e-01 1.53511001e+03 -2.74000000e-05 6.24298902e-02 2.15109795e-01 4.07169743e-03 3.22912728e-06 1.43281424e-06 1.86577196e-04 7.18197378e-01 1.53702480e+03 -2.75000000e-05 6.24244953e-02 2.15097479e-01 4.08862018e-03 3.23159825e-06 1.44476798e-06 1.87351187e-04 7.18197378e-01 1.53702480e+03 -2.76000000e-05 6.24190949e-02 2.15085150e-01 4.10556029e-03 3.23407433e-06 1.45678398e-06 1.88125967e-04 7.18197378e-01 1.53702480e+03 -2.77000000e-05 6.24136889e-02 2.15072808e-01 4.12251781e-03 3.23655552e-06 1.46886243e-06 1.88901537e-04 7.18197378e-01 1.53702480e+03 -2.78000000e-05 6.24082774e-02 2.15060454e-01 4.13949275e-03 3.23904186e-06 1.48100351e-06 1.89677899e-04 7.18197378e-01 1.53702480e+03 -2.79000000e-05 6.24028603e-02 2.15048087e-01 4.15648516e-03 3.24153335e-06 1.49320740e-06 1.90455054e-04 7.18197378e-01 1.53702480e+03 -2.80000000e-05 6.23974376e-02 2.15035707e-01 4.17349505e-03 3.24403001e-06 1.50547428e-06 1.91233004e-04 7.18197378e-01 1.53702480e+03 -2.81000000e-05 6.23920093e-02 2.15023314e-01 4.19052248e-03 3.24653186e-06 1.51780433e-06 1.92011750e-04 7.18197378e-01 1.53702480e+03 -2.82000000e-05 6.23865755e-02 2.15010909e-01 4.20756746e-03 3.24903893e-06 1.53019774e-06 1.92791293e-04 7.18197378e-01 1.53702480e+03 -2.83000000e-05 6.23811360e-02 2.14998490e-01 4.22463003e-03 3.25155122e-06 1.54265468e-06 1.93571635e-04 7.18197378e-01 1.53702480e+03 -2.84000000e-05 6.23756909e-02 2.14986059e-01 4.24171022e-03 3.25406876e-06 1.55517535e-06 1.94352778e-04 7.18197378e-01 1.53702480e+03 -2.85000000e-05 6.23702402e-02 2.14973615e-01 4.25880807e-03 3.25659156e-06 1.56775993e-06 1.95134723e-04 7.18197378e-01 1.53702480e+03 -2.86000000e-05 6.23647838e-02 2.14961158e-01 4.27592360e-03 3.25911964e-06 1.58040860e-06 1.95917471e-04 7.18197378e-01 1.53702480e+03 -2.87000000e-05 6.23593218e-02 2.14948688e-01 4.29305686e-03 3.26165302e-06 1.59312155e-06 1.96701023e-04 7.18197378e-01 1.53896535e+03 -2.88000000e-05 6.23538542e-02 2.14936205e-01 4.31020787e-03 3.26419172e-06 1.60589897e-06 1.97485383e-04 7.18197378e-01 1.53896535e+03 -2.89000000e-05 6.23483808e-02 2.14923709e-01 4.32737666e-03 3.26673575e-06 1.61874105e-06 1.98270550e-04 7.18197378e-01 1.53896535e+03 -2.90000000e-05 6.23429018e-02 2.14911200e-01 4.34456327e-03 3.26928514e-06 1.63164796e-06 1.99056526e-04 7.18197378e-01 1.53896535e+03 -2.91000000e-05 6.23374171e-02 2.14898678e-01 4.36176773e-03 3.27183990e-06 1.64461991e-06 1.99843313e-04 7.18197378e-01 1.53896535e+03 -2.92000000e-05 6.23319267e-02 2.14886142e-01 4.37899008e-03 3.27440005e-06 1.65765708e-06 2.00630912e-04 7.18197378e-01 1.53896535e+03 -2.93000000e-05 6.23264305e-02 2.14873594e-01 4.39623034e-03 3.27696561e-06 1.67075966e-06 2.01419325e-04 7.18197378e-01 1.53896535e+03 -2.94000000e-05 6.23209287e-02 2.14861033e-01 4.41348856e-03 3.27953661e-06 1.68392784e-06 2.02208554e-04 7.18197378e-01 1.53896535e+03 -2.95000000e-05 6.23154211e-02 2.14848458e-01 4.43076476e-03 3.28211305e-06 1.69716182e-06 2.02998599e-04 7.18197378e-01 1.53896535e+03 -2.96000000e-05 6.23099077e-02 2.14835871e-01 4.44805897e-03 3.28469495e-06 1.71046178e-06 2.03789463e-04 7.18197378e-01 1.53896535e+03 -2.97000000e-05 6.23043887e-02 2.14823270e-01 4.46537124e-03 3.28728235e-06 1.72382792e-06 2.04581146e-04 7.18197378e-01 1.53896535e+03 -2.98000000e-05 6.22988638e-02 2.14810656e-01 4.48270159e-03 3.28987525e-06 1.73726043e-06 2.05373651e-04 7.18197378e-01 1.53896535e+03 -2.99000000e-05 6.22933332e-02 2.14798029e-01 4.50005006e-03 3.29247367e-06 1.75075950e-06 2.06166978e-04 7.18197378e-01 1.53896535e+03 -3.00000000e-05 6.22877967e-02 2.14785388e-01 4.51741669e-03 3.29507763e-06 1.76432534e-06 2.06961130e-04 7.18197378e-01 1.54093228e+03 -3.01000000e-05 6.22822545e-02 2.14772734e-01 4.53480149e-03 3.29768716e-06 1.77795813e-06 2.07756108e-04 7.18197378e-01 1.54093228e+03 -3.02000000e-05 6.22767065e-02 2.14760067e-01 4.55220452e-03 3.30030227e-06 1.79165807e-06 2.08551913e-04 7.18197378e-01 1.54093228e+03 -3.03000000e-05 6.22711526e-02 2.14747387e-01 4.56962580e-03 3.30292298e-06 1.80542536e-06 2.09348547e-04 7.18197378e-01 1.54093228e+03 -3.04000000e-05 6.22655929e-02 2.14734693e-01 4.58706537e-03 3.30554932e-06 1.81926020e-06 2.10146012e-04 7.18197378e-01 1.54093228e+03 -3.05000000e-05 6.22600274e-02 2.14721986e-01 4.60452326e-03 3.30818129e-06 1.83316278e-06 2.10944309e-04 7.18197378e-01 1.54093228e+03 -3.06000000e-05 6.22544560e-02 2.14709265e-01 4.62199951e-03 3.31081893e-06 1.84713331e-06 2.11743440e-04 7.18197378e-01 1.54093228e+03 -3.07000000e-05 6.22488788e-02 2.14696531e-01 4.63949415e-03 3.31346225e-06 1.86117197e-06 2.12543405e-04 7.18197378e-01 1.54093228e+03 -3.08000000e-05 6.22432957e-02 2.14683784e-01 4.65700722e-03 3.31611126e-06 1.87527898e-06 2.13344208e-04 7.18197378e-01 1.54093228e+03 -3.09000000e-05 6.22377067e-02 2.14671023e-01 4.67453874e-03 3.31876600e-06 1.88945454e-06 2.14145849e-04 7.18197378e-01 1.54093228e+03 -3.10000000e-05 6.22321118e-02 2.14658248e-01 4.69208876e-03 3.32142648e-06 1.90369884e-06 2.14948329e-04 7.18197378e-01 1.54093228e+03 -3.11000000e-05 6.22265109e-02 2.14645460e-01 4.70965731e-03 3.32409272e-06 1.91801208e-06 2.15751651e-04 7.18197378e-01 1.54093228e+03 -3.12000000e-05 6.22209042e-02 2.14632659e-01 4.72724442e-03 3.32676475e-06 1.93239448e-06 2.16555816e-04 7.18197378e-01 1.54093228e+03 -3.13000000e-05 6.22152915e-02 2.14619843e-01 4.74485014e-03 3.32944257e-06 1.94684624e-06 2.17360826e-04 7.18197378e-01 1.54292626e+03 -3.14000000e-05 6.22096729e-02 2.14607015e-01 4.76247448e-03 3.33212622e-06 1.96136755e-06 2.18166682e-04 7.18197378e-01 1.54292626e+03 -3.15000000e-05 6.22040484e-02 2.14594172e-01 4.78011750e-03 3.33481572e-06 1.97595862e-06 2.18973386e-04 7.18197378e-01 1.54292626e+03 -3.16000000e-05 6.21984179e-02 2.14581316e-01 4.79777922e-03 3.33751108e-06 1.99061967e-06 2.19780939e-04 7.18197378e-01 1.54292626e+03 -3.17000000e-05 6.21927813e-02 2.14568446e-01 4.81545968e-03 3.34021232e-06 2.00535090e-06 2.20589343e-04 7.18197378e-01 1.54292626e+03 -3.18000000e-05 6.21871389e-02 2.14555563e-01 4.83315892e-03 3.34291948e-06 2.02015250e-06 2.21398599e-04 7.18197378e-01 1.54292626e+03 -3.19000000e-05 6.21814904e-02 2.14542665e-01 4.85087697e-03 3.34563256e-06 2.03502470e-06 2.22208710e-04 7.18197378e-01 1.54292626e+03 -3.20000000e-05 6.21758359e-02 2.14529754e-01 4.86861386e-03 3.34835159e-06 2.04996771e-06 2.23019677e-04 7.18197378e-01 1.54292626e+03 -3.21000000e-05 6.21701754e-02 2.14516830e-01 4.88636964e-03 3.35107659e-06 2.06498172e-06 2.23831501e-04 7.18197378e-01 1.54292626e+03 -3.22000000e-05 6.21645088e-02 2.14503891e-01 4.90414434e-03 3.35380758e-06 2.08006695e-06 2.24644184e-04 7.18197378e-01 1.54292626e+03 -3.23000000e-05 6.21588362e-02 2.14490938e-01 4.92193799e-03 3.35654459e-06 2.09522362e-06 2.25457727e-04 7.18197378e-01 1.54292626e+03 -3.24000000e-05 6.21531576e-02 2.14477972e-01 4.93975063e-03 3.35928764e-06 2.11045193e-06 2.26272133e-04 7.18197378e-01 1.54292626e+03 -3.25000000e-05 6.21474729e-02 2.14464992e-01 4.95758230e-03 3.36203674e-06 2.12575210e-06 2.27087403e-04 7.18197378e-01 1.54292626e+03 -3.26000000e-05 6.21417821e-02 2.14451998e-01 4.97543303e-03 3.36479192e-06 2.14112434e-06 2.27903538e-04 7.18197378e-01 1.54494795e+03 -3.27000000e-05 6.21360852e-02 2.14438989e-01 4.99330285e-03 3.36755319e-06 2.15656886e-06 2.28720541e-04 7.18197378e-01 1.54494795e+03 -3.28000000e-05 6.21303822e-02 2.14425967e-01 5.01119182e-03 3.37032059e-06 2.17208588e-06 2.29538412e-04 7.18197378e-01 1.54494795e+03 -3.29000000e-05 6.21246731e-02 2.14412931e-01 5.02909995e-03 3.37309414e-06 2.18767561e-06 2.30357154e-04 7.18197378e-01 1.54494795e+03 -3.30000000e-05 6.21189579e-02 2.14399881e-01 5.04702730e-03 3.37587385e-06 2.20333828e-06 2.31176768e-04 7.18197378e-01 1.54494795e+03 -3.31000000e-05 6.21132365e-02 2.14386817e-01 5.06497389e-03 3.37865975e-06 2.21907409e-06 2.31997256e-04 7.18197378e-01 1.54494795e+03 -3.32000000e-05 6.21075090e-02 2.14373738e-01 5.08293976e-03 3.38145186e-06 2.23488327e-06 2.32818619e-04 7.18197378e-01 1.54494795e+03 -3.33000000e-05 6.21017753e-02 2.14360646e-01 5.10092495e-03 3.38425021e-06 2.25076604e-06 2.33640859e-04 7.18197378e-01 1.54494795e+03 -3.34000000e-05 6.20960355e-02 2.14347539e-01 5.11892950e-03 3.38705481e-06 2.26672261e-06 2.34463978e-04 7.18197378e-01 1.54494795e+03 -3.35000000e-05 6.20902894e-02 2.14334419e-01 5.13695343e-03 3.38986569e-06 2.28275320e-06 2.35287978e-04 7.18197378e-01 1.54494795e+03 -3.36000000e-05 6.20845372e-02 2.14321284e-01 5.15499680e-03 3.39268288e-06 2.29885804e-06 2.36112860e-04 7.18197378e-01 1.54494795e+03 -3.37000000e-05 6.20787788e-02 2.14308135e-01 5.17305964e-03 3.39550639e-06 2.31503734e-06 2.36938625e-04 7.18197378e-01 1.54494795e+03 -3.38000000e-05 6.20730141e-02 2.14294971e-01 5.19114198e-03 3.39833624e-06 2.33129134e-06 2.37765276e-04 7.18197378e-01 1.54494795e+03 -3.39000000e-05 6.20672432e-02 2.14281793e-01 5.20924387e-03 3.40117247e-06 2.34762025e-06 2.38592815e-04 7.18197378e-01 1.54699804e+03 -3.40000000e-05 6.20614661e-02 2.14268601e-01 5.22736533e-03 3.40401510e-06 2.36402429e-06 2.39421242e-04 7.18197378e-01 1.54699804e+03 -3.41000000e-05 6.20556827e-02 2.14255395e-01 5.24550642e-03 3.40686414e-06 2.38050370e-06 2.40250560e-04 7.18197378e-01 1.54699804e+03 -3.42000000e-05 6.20498931e-02 2.14242174e-01 5.26366716e-03 3.40971963e-06 2.39705870e-06 2.41080770e-04 7.18197378e-01 1.54699804e+03 -3.43000000e-05 6.20440971e-02 2.14228939e-01 5.28184759e-03 3.41258159e-06 2.41368951e-06 2.41911874e-04 7.18197378e-01 1.54699804e+03 -3.44000000e-05 6.20382949e-02 2.14215690e-01 5.30004775e-03 3.41545003e-06 2.43039637e-06 2.42743874e-04 7.18197378e-01 1.54699804e+03 -3.45000000e-05 6.20324864e-02 2.14202426e-01 5.31826769e-03 3.41832499e-06 2.44717949e-06 2.43576772e-04 7.18197378e-01 1.54699804e+03 -3.46000000e-05 6.20266715e-02 2.14189147e-01 5.33650743e-03 3.42120649e-06 2.46403911e-06 2.44410569e-04 7.18197378e-01 1.54699804e+03 -3.47000000e-05 6.20208504e-02 2.14175854e-01 5.35476702e-03 3.42409455e-06 2.48097547e-06 2.45245267e-04 7.18197378e-01 1.54699804e+03 -3.48000000e-05 6.20150229e-02 2.14162547e-01 5.37304649e-03 3.42698920e-06 2.49798878e-06 2.46080867e-04 7.18197378e-01 1.54699804e+03 -3.49000000e-05 6.20091890e-02 2.14149225e-01 5.39134589e-03 3.42989047e-06 2.51507928e-06 2.46917372e-04 7.18197378e-01 1.54699804e+03 -3.50000000e-05 6.20033488e-02 2.14135888e-01 5.40966525e-03 3.43279837e-06 2.53224721e-06 2.47754783e-04 7.18197378e-01 1.54699804e+03 -3.51000000e-05 6.19975021e-02 2.14122537e-01 5.42800461e-03 3.43571293e-06 2.54949280e-06 2.48593102e-04 7.18197378e-01 1.54699804e+03 -3.52000000e-05 6.19916491e-02 2.14109171e-01 5.44636401e-03 3.43863417e-06 2.56681628e-06 2.49432331e-04 7.18197378e-01 1.54907727e+03 -3.53000000e-05 6.19857897e-02 2.14095791e-01 5.46474349e-03 3.44156213e-06 2.58421788e-06 2.50272471e-04 7.18197378e-01 1.54907727e+03 -3.54000000e-05 6.19799239e-02 2.14082395e-01 5.48314308e-03 3.44449681e-06 2.60169785e-06 2.51113525e-04 7.18197378e-01 1.54907727e+03 -3.55000000e-05 6.19740517e-02 2.14068985e-01 5.50156284e-03 3.44743825e-06 2.61925641e-06 2.51955493e-04 7.18197378e-01 1.54907727e+03 -3.56000000e-05 6.19681730e-02 2.14055561e-01 5.52000279e-03 3.45038648e-06 2.63689381e-06 2.52798378e-04 7.18197378e-01 1.54907727e+03 -3.57000000e-05 6.19622878e-02 2.14042121e-01 5.53846298e-03 3.45334152e-06 2.65461029e-06 2.53642182e-04 7.18197378e-01 1.54907727e+03 -3.58000000e-05 6.19563962e-02 2.14028667e-01 5.55694344e-03 3.45630339e-06 2.67240608e-06 2.54486906e-04 7.18197378e-01 1.54907727e+03 -3.59000000e-05 6.19504981e-02 2.14015198e-01 5.57544422e-03 3.45927212e-06 2.69028142e-06 2.55332552e-04 7.18197378e-01 1.54907727e+03 -3.60000000e-05 6.19445936e-02 2.14001714e-01 5.59396535e-03 3.46224774e-06 2.70823656e-06 2.56179123e-04 7.18197378e-01 1.54907727e+03 -3.61000000e-05 6.19386825e-02 2.13988215e-01 5.61250688e-03 3.46523027e-06 2.72627173e-06 2.57026618e-04 7.18197378e-01 1.54907727e+03 -3.62000000e-05 6.19327649e-02 2.13974701e-01 5.63106884e-03 3.46821974e-06 2.74438718e-06 2.57875042e-04 7.18197378e-01 1.54907727e+03 -3.63000000e-05 6.19268407e-02 2.13961172e-01 5.64965128e-03 3.47121616e-06 2.76258316e-06 2.58724395e-04 7.18197378e-01 1.54907727e+03 -3.64000000e-05 6.19209101e-02 2.13947628e-01 5.66825424e-03 3.47421958e-06 2.78085990e-06 2.59574679e-04 7.18197378e-01 1.54907727e+03 -3.65000000e-05 6.19149729e-02 2.13934069e-01 5.68687774e-03 3.47723001e-06 2.79921765e-06 2.60425896e-04 7.18197378e-01 1.55118637e+03 -3.66000000e-05 6.19090291e-02 2.13920495e-01 5.70552185e-03 3.48024750e-06 2.81765667e-06 2.61278048e-04 7.18197378e-01 1.55118637e+03 -3.67000000e-05 6.19030787e-02 2.13906906e-01 5.72418659e-03 3.48327206e-06 2.83617719e-06 2.62131136e-04 7.18197378e-01 1.55118637e+03 -3.68000000e-05 6.18971217e-02 2.13893302e-01 5.74287201e-03 3.48630372e-06 2.85477946e-06 2.62985163e-04 7.18197378e-01 1.55118637e+03 -3.69000000e-05 6.18911581e-02 2.13879683e-01 5.76157815e-03 3.48934251e-06 2.87346374e-06 2.63840130e-04 7.18197378e-01 1.55118637e+03 -3.70000000e-05 6.18851880e-02 2.13866048e-01 5.78030504e-03 3.49238845e-06 2.89223027e-06 2.64696040e-04 7.18197378e-01 1.55118637e+03 -3.71000000e-05 6.18792111e-02 2.13852399e-01 5.79905274e-03 3.49544157e-06 2.91107930e-06 2.65552893e-04 7.18197378e-01 1.55118637e+03 -3.72000000e-05 6.18732277e-02 2.13838734e-01 5.81782128e-03 3.49850190e-06 2.93001109e-06 2.66410693e-04 7.18197378e-01 1.55118637e+03 -3.73000000e-05 6.18672375e-02 2.13825054e-01 5.83661070e-03 3.50156947e-06 2.94902588e-06 2.67269440e-04 7.18197378e-01 1.55118637e+03 -3.74000000e-05 6.18612407e-02 2.13811358e-01 5.85542104e-03 3.50464430e-06 2.96812394e-06 2.68129137e-04 7.18197378e-01 1.55118637e+03 -3.75000000e-05 6.18552372e-02 2.13797648e-01 5.87425235e-03 3.50772643e-06 2.98730551e-06 2.68989785e-04 7.18197378e-01 1.55118637e+03 -3.76000000e-05 6.18492270e-02 2.13783922e-01 5.89310466e-03 3.51081589e-06 3.00657085e-06 2.69851387e-04 7.18197378e-01 1.55118637e+03 -3.77000000e-05 6.18432101e-02 2.13770180e-01 5.91197803e-03 3.51391269e-06 3.02592022e-06 2.70713943e-04 7.18197378e-01 1.55118637e+03 -3.78000000e-05 6.18371865e-02 2.13756423e-01 5.93087248e-03 3.51701687e-06 3.04535388e-06 2.71577457e-04 7.18197378e-01 1.55332614e+03 -3.79000000e-05 6.18311561e-02 2.13742651e-01 5.94978807e-03 3.52012844e-06 3.06487207e-06 2.72441931e-04 7.18197378e-01 1.55332614e+03 -3.80000000e-05 6.18251190e-02 2.13728863e-01 5.96872483e-03 3.52324743e-06 3.08447507e-06 2.73307365e-04 7.18197378e-01 1.55332614e+03 -3.81000000e-05 6.18190751e-02 2.13715060e-01 5.98768281e-03 3.52637388e-06 3.10416314e-06 2.74173762e-04 7.18197378e-01 1.55332614e+03 -3.82000000e-05 6.18130245e-02 2.13701241e-01 6.00666205e-03 3.52950781e-06 3.12393652e-06 2.75041123e-04 7.18197378e-01 1.55332614e+03 -3.83000000e-05 6.18069670e-02 2.13687407e-01 6.02566258e-03 3.53264925e-06 3.14379549e-06 2.75909452e-04 7.18197378e-01 1.55332614e+03 -3.84000000e-05 6.18009027e-02 2.13673557e-01 6.04468447e-03 3.53579824e-06 3.16374031e-06 2.76778749e-04 7.18197378e-01 1.55332614e+03 -3.85000000e-05 6.17948317e-02 2.13659691e-01 6.06372774e-03 3.53895480e-06 3.18377125e-06 2.77649016e-04 7.18197378e-01 1.55332614e+03 -3.86000000e-05 6.17887537e-02 2.13645810e-01 6.08279244e-03 3.54211895e-06 3.20388856e-06 2.78520256e-04 7.18197378e-01 1.55332614e+03 -3.87000000e-05 6.17826690e-02 2.13631913e-01 6.10187861e-03 3.54529073e-06 3.22409251e-06 2.79392470e-04 7.18197378e-01 1.55332614e+03 -3.88000000e-05 6.17765773e-02 2.13618000e-01 6.12098629e-03 3.54847017e-06 3.24438337e-06 2.80265661e-04 7.18197378e-01 1.55332614e+03 -3.89000000e-05 6.17704788e-02 2.13604072e-01 6.14011554e-03 3.55165728e-06 3.26476141e-06 2.81139830e-04 7.18197378e-01 1.55332614e+03 -3.90000000e-05 6.17643735e-02 2.13590127e-01 6.15926638e-03 3.55485211e-06 3.28522690e-06 2.82014979e-04 7.18197378e-01 1.55332614e+03 -3.91000000e-05 6.17582612e-02 2.13576167e-01 6.17843888e-03 3.55805468e-06 3.30578011e-06 2.82891111e-04 7.18197378e-01 1.55332614e+03 -3.92000000e-05 6.17521420e-02 2.13562191e-01 6.19763306e-03 3.56126507e-06 3.32642130e-06 2.83768227e-04 7.18197378e-01 1.55549737e+03 -3.93000000e-05 6.17460158e-02 2.13548199e-01 6.21684897e-03 3.56448328e-06 3.34715075e-06 2.84646328e-04 7.18197378e-01 1.55549737e+03 -3.94000000e-05 6.17398827e-02 2.13534192e-01 6.23608666e-03 3.56770934e-06 3.36796874e-06 2.85525418e-04 7.18197378e-01 1.55549737e+03 -3.95000000e-05 6.17337427e-02 2.13520168e-01 6.25534617e-03 3.57094327e-06 3.38887554e-06 2.86405498e-04 7.18197378e-01 1.55549737e+03 -3.96000000e-05 6.17275957e-02 2.13506128e-01 6.27462755e-03 3.57418512e-06 3.40987141e-06 2.87286570e-04 7.18197378e-01 1.55549737e+03 -3.97000000e-05 6.17214417e-02 2.13492073e-01 6.29393083e-03 3.57743491e-06 3.43095665e-06 2.88168637e-04 7.18197378e-01 1.55549737e+03 -3.98000000e-05 6.17152807e-02 2.13478001e-01 6.31325607e-03 3.58069267e-06 3.45213151e-06 2.89051699e-04 7.18197378e-01 1.55549737e+03 -3.99000000e-05 6.17091126e-02 2.13463913e-01 6.33260330e-03 3.58395845e-06 3.47339630e-06 2.89935760e-04 7.18197378e-01 1.55549737e+03 -4.00000000e-05 6.17029376e-02 2.13449809e-01 6.35197258e-03 3.58723226e-06 3.49475127e-06 2.90820820e-04 7.18197378e-01 1.55549737e+03 -4.01000000e-05 6.16967555e-02 2.13435689e-01 6.37136394e-03 3.59051415e-06 3.51619672e-06 2.91706883e-04 7.18197378e-01 1.55549737e+03 -4.02000000e-05 6.16905663e-02 2.13421553e-01 6.39077743e-03 3.59380415e-06 3.53773292e-06 2.92593950e-04 7.18197378e-01 1.55549737e+03 -4.03000000e-05 6.16843701e-02 2.13407400e-01 6.41021310e-03 3.59710230e-06 3.55936015e-06 2.93482023e-04 7.18197378e-01 1.55549737e+03 -4.04000000e-05 6.16781668e-02 2.13393232e-01 6.42967099e-03 3.60040862e-06 3.58107871e-06 2.94371104e-04 7.18197378e-01 1.55549737e+03 -4.05000000e-05 6.16719564e-02 2.13379047e-01 6.44915115e-03 3.60372311e-06 3.60288886e-06 2.95261195e-04 7.18197378e-01 1.55706512e+03 -4.06000000e-05 6.16657389e-02 2.13364846e-01 6.46865362e-03 3.60704581e-06 3.62479091e-06 2.96152299e-04 7.18197378e-01 1.55706512e+03 -4.07000000e-05 6.16595142e-02 2.13350628e-01 6.48817844e-03 3.61037677e-06 3.64678513e-06 2.97044418e-04 7.18197378e-01 1.55706512e+03 -4.08000000e-05 6.16532824e-02 2.13336394e-01 6.50772567e-03 3.61371602e-06 3.66887182e-06 2.97937552e-04 7.18197378e-01 1.55706512e+03 -4.09000000e-05 6.16470435e-02 2.13322144e-01 6.52729535e-03 3.61706358e-06 3.69105126e-06 2.98831705e-04 7.18197378e-01 1.55706512e+03 -4.10000000e-05 6.16407973e-02 2.13307877e-01 6.54688752e-03 3.62041949e-06 3.71332374e-06 2.99726879e-04 7.18197378e-01 1.55706512e+03 -4.11000000e-05 6.16345440e-02 2.13293593e-01 6.56650224e-03 3.62378377e-06 3.73568955e-06 3.00623075e-04 7.18197378e-01 1.55706512e+03 -4.12000000e-05 6.16282835e-02 2.13279294e-01 6.58613954e-03 3.62715645e-06 3.75814898e-06 3.01520296e-04 7.18197378e-01 1.55706512e+03 -4.13000000e-05 6.16220158e-02 2.13264977e-01 6.60579947e-03 3.63053756e-06 3.78070234e-06 3.02418544e-04 7.18197378e-01 1.55706512e+03 -4.14000000e-05 6.16157408e-02 2.13250644e-01 6.62548208e-03 3.63392718e-06 3.80334990e-06 3.03317821e-04 7.18197378e-01 1.55864959e+03 -4.15000000e-05 6.16094586e-02 2.13236295e-01 6.64518742e-03 3.63732534e-06 3.82609198e-06 3.04218129e-04 7.18197378e-01 1.55864959e+03 -4.16000000e-05 6.16031691e-02 2.13221928e-01 6.66491553e-03 3.64073206e-06 3.84892885e-06 3.05119470e-04 7.18197378e-01 1.55864959e+03 -4.17000000e-05 6.15968723e-02 2.13207546e-01 6.68466646e-03 3.64414738e-06 3.87186083e-06 3.06021846e-04 7.18197378e-01 1.55864959e+03 -4.18000000e-05 6.15905683e-02 2.13193146e-01 6.70444026e-03 3.64757132e-06 3.89488821e-06 3.06925259e-04 7.18197378e-01 1.55864959e+03 -4.19000000e-05 6.15842569e-02 2.13178730e-01 6.72423697e-03 3.65100392e-06 3.91801128e-06 3.07829712e-04 7.18197378e-01 1.55864959e+03 -4.20000000e-05 6.15779382e-02 2.13164296e-01 6.74405664e-03 3.65444523e-06 3.94123036e-06 3.08735207e-04 7.18197378e-01 1.55864959e+03 -4.21000000e-05 6.15716122e-02 2.13149846e-01 6.76389932e-03 3.65789527e-06 3.96454574e-06 3.09641745e-04 7.18197378e-01 1.55864959e+03 -4.22000000e-05 6.15652788e-02 2.13135380e-01 6.78376506e-03 3.66135409e-06 3.98795773e-06 3.10549329e-04 7.18197378e-01 1.55864959e+03 -4.23000000e-05 6.15589381e-02 2.13120896e-01 6.80365389e-03 3.66482172e-06 4.01146663e-06 3.11457961e-04 7.18197378e-01 1.56025112e+03 -4.24000000e-05 6.15525900e-02 2.13106395e-01 6.82356588e-03 3.66829816e-06 4.03507274e-06 3.12367644e-04 7.18197378e-01 1.56025112e+03 -4.25000000e-05 6.15462344e-02 2.13091878e-01 6.84350107e-03 3.67178349e-06 4.05877637e-06 3.13278379e-04 7.18197378e-01 1.56025112e+03 -4.26000000e-05 6.15398715e-02 2.13077343e-01 6.86345951e-03 3.67527772e-06 4.08257784e-06 3.14190168e-04 7.18197378e-01 1.56025112e+03 -4.27000000e-05 6.15335011e-02 2.13062792e-01 6.88344124e-03 3.67878091e-06 4.10647745e-06 3.15103014e-04 7.18197378e-01 1.56025112e+03 -4.28000000e-05 6.15271233e-02 2.13048223e-01 6.90344632e-03 3.68229308e-06 4.13047550e-06 3.16016919e-04 7.18197378e-01 1.56025112e+03 -4.29000000e-05 6.15207380e-02 2.13033637e-01 6.92347478e-03 3.68581428e-06 4.15457232e-06 3.16931885e-04 7.18197378e-01 1.56025112e+03 -4.30000000e-05 6.15143453e-02 2.13019034e-01 6.94352669e-03 3.68934454e-06 4.17876821e-06 3.17847914e-04 7.18197378e-01 1.56025112e+03 -4.31000000e-05 6.15079451e-02 2.13004414e-01 6.96360209e-03 3.69288391e-06 4.20306349e-06 3.18765009e-04 7.18197378e-01 1.56025112e+03 -4.32000000e-05 6.15015373e-02 2.12989777e-01 6.98370102e-03 3.69643241e-06 4.22745847e-06 3.19683171e-04 7.18197378e-01 1.56187004e+03 -4.33000000e-05 6.14951220e-02 2.12975122e-01 7.00382355e-03 3.69999008e-06 4.25195347e-06 3.20602404e-04 7.18197378e-01 1.56187004e+03 -4.34000000e-05 6.14886992e-02 2.12960450e-01 7.02396971e-03 3.70355696e-06 4.27654881e-06 3.21522708e-04 7.18197378e-01 1.56187004e+03 -4.35000000e-05 6.14822689e-02 2.12945761e-01 7.04413956e-03 3.70713309e-06 4.30124480e-06 3.22444087e-04 7.18197378e-01 1.56187004e+03 -4.36000000e-05 6.14758310e-02 2.12931055e-01 7.06433314e-03 3.71071851e-06 4.32604177e-06 3.23366543e-04 7.18197378e-01 1.56187004e+03 -4.37000000e-05 6.14693854e-02 2.12916331e-01 7.08455051e-03 3.71431325e-06 4.35094004e-06 3.24290077e-04 7.18197378e-01 1.56187004e+03 -4.38000000e-05 6.14629323e-02 2.12901590e-01 7.10479171e-03 3.71791736e-06 4.37593992e-06 3.25214692e-04 7.18197378e-01 1.56187004e+03 -4.39000000e-05 6.14564716e-02 2.12886831e-01 7.12505680e-03 3.72153088e-06 4.40104175e-06 3.26140391e-04 7.18197378e-01 1.56187004e+03 -4.40000000e-05 6.14500032e-02 2.12872055e-01 7.14534583e-03 3.72515384e-06 4.42624584e-06 3.27067175e-04 7.18197378e-01 1.56187004e+03 -4.41000000e-05 6.14435272e-02 2.12857261e-01 7.16565884e-03 3.72878627e-06 4.45155253e-06 3.27995048e-04 7.18197378e-01 1.56187004e+03 -4.42000000e-05 6.14370435e-02 2.12842449e-01 7.18599588e-03 3.73242823e-06 4.47696213e-06 3.28924010e-04 7.18197378e-01 1.56350669e+03 -4.43000000e-05 6.14305522e-02 2.12827620e-01 7.20635702e-03 3.73607974e-06 4.50247499e-06 3.29854065e-04 7.18197378e-01 1.56350669e+03 -4.44000000e-05 6.14240531e-02 2.12812774e-01 7.22674229e-03 3.73974085e-06 4.52809143e-06 3.30785214e-04 7.18197378e-01 1.56350669e+03 -4.45000000e-05 6.14175463e-02 2.12797909e-01 7.24715174e-03 3.74341159e-06 4.55381177e-06 3.31717461e-04 7.18197378e-01 1.56350669e+03 -4.46000000e-05 6.14110318e-02 2.12783027e-01 7.26758544e-03 3.74709200e-06 4.57963636e-06 3.32650807e-04 7.18197378e-01 1.56350669e+03 -4.47000000e-05 6.14045096e-02 2.12768128e-01 7.28804343e-03 3.75078213e-06 4.60556553e-06 3.33585254e-04 7.18197378e-01 1.56350669e+03 -4.48000000e-05 6.13979795e-02 2.12753210e-01 7.30852576e-03 3.75448201e-06 4.63159961e-06 3.34520806e-04 7.18197378e-01 1.56350669e+03 -4.49000000e-05 6.13914417e-02 2.12738275e-01 7.32903249e-03 3.75819168e-06 4.65773894e-06 3.35457463e-04 7.18197378e-01 1.56350669e+03 -4.50000000e-05 6.13848961e-02 2.12723321e-01 7.34956365e-03 3.76191117e-06 4.68398385e-06 3.36395230e-04 7.18197378e-01 1.56350669e+03 -4.51000000e-05 6.13783427e-02 2.12708350e-01 7.37011932e-03 3.76564055e-06 4.71033469e-06 3.37334107e-04 7.18197378e-01 1.56516141e+03 -4.52000000e-05 6.13717815e-02 2.12693361e-01 7.39069953e-03 3.76937988e-06 4.73679179e-06 3.38274097e-04 7.18197378e-01 1.56516141e+03 -4.53000000e-05 6.13652124e-02 2.12678354e-01 7.41130435e-03 3.77312917e-06 4.76335550e-06 3.39215203e-04 7.18197378e-01 1.56516141e+03 -4.54000000e-05 6.13586355e-02 2.12663329e-01 7.43193382e-03 3.77688848e-06 4.79002616e-06 3.40157428e-04 7.18197378e-01 1.56516141e+03 -4.55000000e-05 6.13520507e-02 2.12648285e-01 7.45258799e-03 3.78065784e-06 4.81680412e-06 3.41100772e-04 7.18197378e-01 1.56516141e+03 -4.56000000e-05 6.13454579e-02 2.12633224e-01 7.47326692e-03 3.78443730e-06 4.84368971e-06 3.42045239e-04 7.18197378e-01 1.56516141e+03 -4.57000000e-05 6.13388573e-02 2.12618144e-01 7.49397067e-03 3.78822691e-06 4.87068330e-06 3.42990832e-04 7.18197378e-01 1.56516141e+03 -4.58000000e-05 6.13322488e-02 2.12603047e-01 7.51469927e-03 3.79202671e-06 4.89778521e-06 3.43937552e-04 7.18197378e-01 1.56516141e+03 -4.59000000e-05 6.13256322e-02 2.12587931e-01 7.53545280e-03 3.79583674e-06 4.92499582e-06 3.44885401e-04 7.18197378e-01 1.56516141e+03 -4.60000000e-05 6.13190078e-02 2.12572797e-01 7.55623129e-03 3.79965706e-06 4.95231546e-06 3.45834384e-04 7.18197378e-01 1.56683457e+03 -4.61000000e-05 6.13123753e-02 2.12557644e-01 7.57703481e-03 3.80348763e-06 4.97974449e-06 3.46784500e-04 7.18197378e-01 1.56683457e+03 -4.62000000e-05 6.13057349e-02 2.12542474e-01 7.59786340e-03 3.80732854e-06 5.00728326e-06 3.47735754e-04 7.18197378e-01 1.56683457e+03 -4.63000000e-05 6.12990864e-02 2.12527284e-01 7.61871713e-03 3.81117984e-06 5.03493213e-06 3.48688148e-04 7.18197378e-01 1.56683457e+03 -4.64000000e-05 6.12924299e-02 2.12512077e-01 7.63959604e-03 3.81504157e-06 5.06269145e-06 3.49641683e-04 7.18197378e-01 1.56683457e+03 -4.65000000e-05 6.12857654e-02 2.12496851e-01 7.66050019e-03 3.81891376e-06 5.09056159e-06 3.50596363e-04 7.18197378e-01 1.56683457e+03 -4.66000000e-05 6.12790928e-02 2.12481606e-01 7.68142963e-03 3.82279646e-06 5.11854290e-06 3.51552190e-04 7.18197378e-01 1.56683457e+03 -4.67000000e-05 6.12724121e-02 2.12466343e-01 7.70238442e-03 3.82668970e-06 5.14663575e-06 3.52509166e-04 7.18197378e-01 1.56683457e+03 -4.68000000e-05 6.12657233e-02 2.12451062e-01 7.72336461e-03 3.83059354e-06 5.17484049e-06 3.53467294e-04 7.18197378e-01 1.56683457e+03 -4.69000000e-05 6.12590263e-02 2.12435761e-01 7.74437026e-03 3.83450799e-06 5.20315749e-06 3.54426576e-04 7.18197378e-01 1.56683457e+03 -4.70000000e-05 6.12523213e-02 2.12420442e-01 7.76540142e-03 3.83843321e-06 5.23158711e-06 3.55387015e-04 7.18197378e-01 1.56800765e+03 -4.71000000e-05 6.12456081e-02 2.12405105e-01 7.78645815e-03 3.84236922e-06 5.26012973e-06 3.56348613e-04 7.18197378e-01 1.56800765e+03 -4.72000000e-05 6.12388867e-02 2.12389748e-01 7.80754050e-03 3.84631607e-06 5.28878570e-06 3.57311373e-04 7.18197378e-01 1.56800765e+03 -4.73000000e-05 6.12321571e-02 2.12374373e-01 7.82864852e-03 3.85027382e-06 5.31755540e-06 3.58275297e-04 7.18197378e-01 1.56800765e+03 -4.74000000e-05 6.12254194e-02 2.12358979e-01 7.84978228e-03 3.85424255e-06 5.34643921e-06 3.59240387e-04 7.18197378e-01 1.56800765e+03 -4.75000000e-05 6.12186734e-02 2.12343567e-01 7.87094183e-03 3.85822232e-06 5.37543749e-06 3.60206647e-04 7.18197378e-01 1.56800765e+03 -4.76000000e-05 6.12119191e-02 2.12328135e-01 7.89212722e-03 3.86221316e-06 5.40455061e-06 3.61174079e-04 7.18197378e-01 1.56880051e+03 -4.77000000e-05 6.12051566e-02 2.12312684e-01 7.91333851e-03 3.86621498e-06 5.43377896e-06 3.62142685e-04 7.18197378e-01 1.56880051e+03 -4.78000000e-05 6.11983858e-02 2.12297215e-01 7.93457576e-03 3.87022785e-06 5.46312290e-06 3.63112468e-04 7.18197378e-01 1.56880051e+03 -4.79000000e-05 6.11916068e-02 2.12281726e-01 7.95583902e-03 3.87425176e-06 5.49258283e-06 3.64083430e-04 7.18197378e-01 1.56880051e+03 -4.80000000e-05 6.11848194e-02 2.12266218e-01 7.97712836e-03 3.87828668e-06 5.52215911e-06 3.65055574e-04 7.18197378e-01 1.56880051e+03 -4.81000000e-05 6.11780236e-02 2.12250692e-01 7.99844381e-03 3.88233285e-06 5.55185213e-06 3.66028903e-04 7.18197378e-01 1.56936559e+03 -4.82000000e-05 6.11712196e-02 2.12235146e-01 8.01978546e-03 3.88639032e-06 5.58166227e-06 3.67003418e-04 7.18197378e-01 1.56936559e+03 -4.83000000e-05 6.11644071e-02 2.12219581e-01 8.04115334e-03 3.89045924e-06 5.61158992e-06 3.67979124e-04 7.18197378e-01 1.56936559e+03 -4.84000000e-05 6.11575863e-02 2.12203996e-01 8.06254752e-03 3.89453954e-06 5.64163547e-06 3.68956021e-04 7.18197378e-01 1.56993280e+03 -4.85000000e-05 6.11507570e-02 2.12188393e-01 8.08396806e-03 3.89863130e-06 5.67179929e-06 3.69934114e-04 7.18197378e-01 1.56993280e+03 -4.86000000e-05 6.11439194e-02 2.12172770e-01 8.10541501e-03 3.90273460e-06 5.70208178e-06 3.70913403e-04 7.18197378e-01 1.56993280e+03 -4.87000000e-05 6.11370733e-02 2.12157127e-01 8.12688843e-03 3.90684944e-06 5.73248334e-06 3.71893893e-04 7.18197378e-01 1.57050214e+03 -4.88000000e-05 6.11302187e-02 2.12141466e-01 8.14838839e-03 3.91097583e-06 5.76300435e-06 3.72875586e-04 7.18197378e-01 1.57050214e+03 -4.89000000e-05 6.11233556e-02 2.12125784e-01 8.16991492e-03 3.91511374e-06 5.79364520e-06 3.73858483e-04 7.18197378e-01 1.57050214e+03 -4.90000000e-05 6.11164841e-02 2.12110084e-01 8.19146811e-03 3.91926332e-06 5.82440630e-06 3.74842589e-04 7.18197378e-01 1.57107363e+03 -4.91000000e-05 6.11096040e-02 2.12094363e-01 8.21304800e-03 3.92342467e-06 5.85528804e-06 3.75827905e-04 7.18197378e-01 1.57107363e+03 -4.92000000e-05 6.11027154e-02 2.12078624e-01 8.23465465e-03 3.92759784e-06 5.88629081e-06 3.76814434e-04 7.18197378e-01 1.57107363e+03 -4.93000000e-05 6.10958183e-02 2.12062864e-01 8.25628813e-03 3.93178286e-06 5.91741503e-06 3.77802180e-04 7.18197378e-01 1.57164728e+03 -4.94000000e-05 6.10889126e-02 2.12047085e-01 8.27794848e-03 3.93597975e-06 5.94866108e-06 3.78791143e-04 7.18197378e-01 1.57164728e+03 -4.95000000e-05 6.10819982e-02 2.12031287e-01 8.29963578e-03 3.94018860e-06 5.98002938e-06 3.79781328e-04 7.18197378e-01 1.57164728e+03 -4.96000000e-05 6.10750753e-02 2.12015468e-01 8.32135008e-03 3.94440947e-06 6.01152033e-06 3.80772737e-04 7.18197378e-01 1.57222311e+03 -4.97000000e-05 6.10681437e-02 2.11999630e-01 8.34309143e-03 3.94864245e-06 6.04313434e-06 3.81765372e-04 7.18197378e-01 1.57222311e+03 -4.98000000e-05 6.10612035e-02 2.11983772e-01 8.36485991e-03 3.95288761e-06 6.07487181e-06 3.82759237e-04 7.18197378e-01 1.57222311e+03 -4.99000000e-05 6.10542546e-02 2.11967894e-01 8.38665556e-03 3.95714496e-06 6.10673316e-06 3.83754334e-04 7.18197378e-01 1.57280114e+03 -5.00000000e-05 6.10472971e-02 2.11951996e-01 8.40847846e-03 3.96141446e-06 6.13871879e-06 3.84750665e-04 7.18197378e-01 1.57280114e+03 -5.01000000e-05 6.10403308e-02 2.11936078e-01 8.43032866e-03 3.96569611e-06 6.17082912e-06 3.85748234e-04 7.18197378e-01 1.57280114e+03 -5.02000000e-05 6.10333558e-02 2.11920140e-01 8.45220622e-03 3.96998998e-06 6.20306457e-06 3.86747043e-04 7.18197378e-01 1.57338138e+03 -5.03000000e-05 6.10263720e-02 2.11904182e-01 8.47411120e-03 3.97429632e-06 6.23542555e-06 3.87747095e-04 7.18197378e-01 1.57338138e+03 -5.04000000e-05 6.10193795e-02 2.11888204e-01 8.49604366e-03 3.97861520e-06 6.26791248e-06 3.88748393e-04 7.18197378e-01 1.57338138e+03 -5.05000000e-05 6.10123782e-02 2.11872206e-01 8.51800367e-03 3.98294670e-06 6.30052578e-06 3.89750939e-04 7.18197378e-01 1.57396384e+03 -5.06000000e-05 6.10053681e-02 2.11856187e-01 8.53999128e-03 3.98729070e-06 6.33326588e-06 3.90754736e-04 7.18197378e-01 1.57396384e+03 -5.07000000e-05 6.09983492e-02 2.11840149e-01 8.56200656e-03 3.99164732e-06 6.36613319e-06 3.91759787e-04 7.18197378e-01 1.57396384e+03 -5.08000000e-05 6.09913214e-02 2.11824090e-01 8.58404957e-03 3.99601658e-06 6.39912814e-06 3.92766095e-04 7.18197378e-01 1.57454854e+03 -5.09000000e-05 6.09842848e-02 2.11808011e-01 8.60612037e-03 4.00039858e-06 6.43225116e-06 3.93773663e-04 7.18197378e-01 1.57454854e+03 -5.10000000e-05 6.09772393e-02 2.11791911e-01 8.62821902e-03 4.00479332e-06 6.46550269e-06 3.94782493e-04 7.18197378e-01 1.57454854e+03 -5.11000000e-05 6.09701848e-02 2.11775791e-01 8.65034559e-03 4.00920083e-06 6.49888314e-06 3.95792588e-04 7.18197378e-01 1.57513550e+03 -5.12000000e-05 6.09631215e-02 2.11759651e-01 8.67250014e-03 4.01362125e-06 6.53239295e-06 3.96803951e-04 7.18197378e-01 1.57513550e+03 -5.13000000e-05 6.09560492e-02 2.11743490e-01 8.69468273e-03 4.01805465e-06 6.56603255e-06 3.97816585e-04 7.18197378e-01 1.57513550e+03 -5.14000000e-05 6.09489679e-02 2.11727308e-01 8.71689343e-03 4.02250111e-06 6.59980239e-06 3.98830493e-04 7.18197378e-01 1.57572473e+03 -5.15000000e-05 6.09418777e-02 2.11711106e-01 8.73913229e-03 4.02696056e-06 6.63370290e-06 3.99845677e-04 7.18197378e-01 1.57572473e+03 -5.16000000e-05 6.09347784e-02 2.11694883e-01 8.76139938e-03 4.03143309e-06 6.66773452e-06 4.00862140e-04 7.18197378e-01 1.57572473e+03 -5.17000000e-05 6.09276702e-02 2.11678640e-01 8.78369477e-03 4.03591871e-06 6.70189768e-06 4.01879886e-04 7.18197378e-01 1.57631624e+03 -5.18000000e-05 6.09205529e-02 2.11662375e-01 8.80601851e-03 4.04041772e-06 6.73619284e-06 4.02898917e-04 7.18197378e-01 1.57631624e+03 -5.19000000e-05 6.09134265e-02 2.11646090e-01 8.82837068e-03 4.04493021e-06 6.77062044e-06 4.03919236e-04 7.18197378e-01 1.57631624e+03 -5.20000000e-05 6.09062910e-02 2.11629784e-01 8.85075134e-03 4.04945637e-06 6.80518092e-06 4.04940846e-04 7.18197378e-01 1.57631624e+03 -5.21000000e-05 6.08991464e-02 2.11613458e-01 8.87316054e-03 4.05399588e-06 6.83987474e-06 4.05963750e-04 7.18197378e-01 1.57672839e+03 -5.22000000e-05 6.08919927e-02 2.11597110e-01 8.89559836e-03 4.05854846e-06 6.87470234e-06 4.06987951e-04 7.18197378e-01 1.57672839e+03 -5.23000000e-05 6.08848299e-02 2.11580741e-01 8.91806486e-03 4.06311431e-06 6.90966418e-06 4.08013451e-04 7.18197378e-01 1.57701440e+03 -5.24000000e-05 6.08776579e-02 2.11564351e-01 8.94056011e-03 4.06769415e-06 6.94476071e-06 4.09040254e-04 7.18197378e-01 1.57730093e+03 -5.25000000e-05 6.08704767e-02 2.11547941e-01 8.96308417e-03 4.07228787e-06 6.97999239e-06 4.10068362e-04 7.18197378e-01 1.57730093e+03 -5.26000000e-05 6.08632862e-02 2.11531509e-01 8.98563710e-03 4.07689545e-06 7.01535968e-06 4.11097779e-04 7.18197378e-01 1.57758801e+03 -5.27000000e-05 6.08560866e-02 2.11515056e-01 9.00821898e-03 4.08151650e-06 7.05086303e-06 4.12128507e-04 7.18197378e-01 1.57787562e+03 -5.28000000e-05 6.08488777e-02 2.11498581e-01 9.03082986e-03 4.08615143e-06 7.08650291e-06 4.13160550e-04 7.18197378e-01 1.57787562e+03 -5.29000000e-05 6.08416595e-02 2.11482086e-01 9.05346982e-03 4.09080028e-06 7.12227978e-06 4.14193910e-04 7.18197378e-01 1.57816378e+03 -5.30000000e-05 6.08344320e-02 2.11465569e-01 9.07613892e-03 4.09546328e-06 7.15819410e-06 4.15228591e-04 7.18197378e-01 1.57845248e+03 -5.31000000e-05 6.08271953e-02 2.11449031e-01 9.09883723e-03 4.10014043e-06 7.19424635e-06 4.16264595e-04 7.18197378e-01 1.57845248e+03 -5.32000000e-05 6.08199491e-02 2.11432471e-01 9.12156481e-03 4.10483179e-06 7.23043700e-06 4.17301926e-04 7.18197378e-01 1.57874173e+03 -5.33000000e-05 6.08126937e-02 2.11415890e-01 9.14432173e-03 4.10953734e-06 7.26676651e-06 4.18340586e-04 7.18197378e-01 1.57903153e+03 -5.34000000e-05 6.08054288e-02 2.11399287e-01 9.16710806e-03 4.11425704e-06 7.30323536e-06 4.19380578e-04 7.18197378e-01 1.57903153e+03 -5.35000000e-05 6.07981545e-02 2.11382663e-01 9.18992386e-03 4.11899104e-06 7.33984403e-06 4.20421906e-04 7.18197378e-01 1.57932187e+03 -5.36000000e-05 6.07908708e-02 2.11366017e-01 9.21276921e-03 4.12373951e-06 7.37659299e-06 4.21464572e-04 7.18197378e-01 1.57961277e+03 -5.37000000e-05 6.07835777e-02 2.11349350e-01 9.23564417e-03 4.12850229e-06 7.41348273e-06 4.22508581e-04 7.18197378e-01 1.57990422e+03 -5.38000000e-05 6.07762751e-02 2.11332661e-01 9.25854881e-03 4.13327980e-06 7.45051371e-06 4.23553933e-04 7.18197378e-01 1.57990422e+03 -5.39000000e-05 6.07689630e-02 2.11315950e-01 9.28148319e-03 4.13807216e-06 7.48768644e-06 4.24600634e-04 7.18197378e-01 1.58019622e+03 -5.40000000e-05 6.07616414e-02 2.11299217e-01 9.30444739e-03 4.14287854e-06 7.52500139e-06 4.25648685e-04 7.18197378e-01 1.58040296e+03 -5.41000000e-05 6.07543103e-02 2.11282462e-01 9.32744148e-03 4.14770005e-06 7.56245905e-06 4.26698091e-04 7.18197378e-01 1.58055231e+03 -5.42000000e-05 6.07469696e-02 2.11265686e-01 9.35046552e-03 4.15253678e-06 7.60005991e-06 4.27748853e-04 7.18197378e-01 1.58070180e+03 -5.43000000e-05 6.07396194e-02 2.11248887e-01 9.37351958e-03 4.15738783e-06 7.63780446e-06 4.28800976e-04 7.18197378e-01 1.58085144e+03 -5.44000000e-05 6.07322595e-02 2.11232067e-01 9.39660374e-03 4.16225405e-06 7.67569320e-06 4.29854462e-04 7.18197378e-01 1.58115115e+03 -5.45000000e-05 6.07248900e-02 2.11215224e-01 9.41971805e-03 4.16713540e-06 7.71372662e-06 4.30909315e-04 7.18197378e-01 1.58130123e+03 -5.46000000e-05 6.07175109e-02 2.11198359e-01 9.44286260e-03 4.17203167e-06 7.75190522e-06 4.31965537e-04 7.18197378e-01 1.58145146e+03 -5.47000000e-05 6.07101221e-02 2.11181472e-01 9.46603745e-03 4.17694308e-06 7.79022951e-06 4.33023132e-04 7.18197378e-01 1.58167829e+03 -5.48000000e-05 6.07027236e-02 2.11164563e-01 9.48924268e-03 4.18186985e-06 7.82869997e-06 4.34082103e-04 7.18197378e-01 1.58190547e+03 -5.49000000e-05 6.06953154e-02 2.11147632e-01 9.51247835e-03 4.18681200e-06 7.86731712e-06 4.35142453e-04 7.18197378e-01 1.58213298e+03 -5.50000000e-05 6.06878975e-02 2.11130678e-01 9.53574453e-03 4.19176953e-06 7.90608147e-06 4.36204185e-04 7.18197378e-01 1.58236083e+03 -5.51000000e-05 6.06804698e-02 2.11113702e-01 9.55904129e-03 4.19674251e-06 7.94499352e-06 4.37267303e-04 7.18197378e-01 1.58258901e+03 -5.52000000e-05 6.06730324e-02 2.11096703e-01 9.58236872e-03 4.20173102e-06 7.98405378e-06 4.38331810e-04 7.18197378e-01 1.58281753e+03 -5.53000000e-05 6.06655851e-02 2.11079682e-01 9.60572687e-03 4.20673514e-06 8.02326277e-06 4.39397709e-04 7.18197378e-01 1.58281753e+03 -5.54000000e-05 6.06581280e-02 2.11062639e-01 9.62911582e-03 4.21175494e-06 8.06262100e-06 4.40465003e-04 7.18197378e-01 1.58333730e+03 -5.55000000e-05 6.06506611e-02 2.11045573e-01 9.65253564e-03 4.21679051e-06 8.10212899e-06 4.41533695e-04 7.18197378e-01 1.58333730e+03 -5.56000000e-05 6.06431843e-02 2.11028484e-01 9.67598641e-03 4.22184194e-06 8.14178726e-06 4.42603789e-04 7.18197378e-01 1.58385882e+03 -5.57000000e-05 6.06356976e-02 2.11011373e-01 9.69946819e-03 4.22690928e-06 8.18159633e-06 4.43675288e-04 7.18197378e-01 1.58385882e+03 -5.58000000e-05 6.06282010e-02 2.10994238e-01 9.72298106e-03 4.23199263e-06 8.22155673e-06 4.44748196e-04 7.18197378e-01 1.58385882e+03 -5.59000000e-05 6.06206945e-02 2.10977081e-01 9.74652509e-03 4.23709206e-06 8.26166897e-06 4.45822515e-04 7.18197378e-01 1.58438211e+03 -5.60000000e-05 6.06131780e-02 2.10959901e-01 9.77010036e-03 4.24220764e-06 8.30193359e-06 4.46898249e-04 7.18197378e-01 1.58438211e+03 -5.61000000e-05 6.06056515e-02 2.10942699e-01 9.79370694e-03 4.24733945e-06 8.34235113e-06 4.47975401e-04 7.18197378e-01 1.58490718e+03 -5.62000000e-05 6.05981149e-02 2.10925473e-01 9.81734491e-03 4.25248757e-06 8.38292210e-06 4.49053974e-04 7.18197378e-01 1.58490718e+03 -5.63000000e-05 6.05905684e-02 2.10908224e-01 9.84101432e-03 4.25765209e-06 8.42364706e-06 4.50133972e-04 7.18197378e-01 1.58490718e+03 -5.64000000e-05 6.05830118e-02 2.10890952e-01 9.86471527e-03 4.26283307e-06 8.46452653e-06 4.51215399e-04 7.18197378e-01 1.58543405e+03 -5.65000000e-05 6.05754451e-02 2.10873657e-01 9.88844783e-03 4.26803060e-06 8.50556106e-06 4.52298257e-04 7.18197378e-01 1.58543405e+03 -5.66000000e-05 6.05678683e-02 2.10856339e-01 9.91221207e-03 4.27324476e-06 8.54675119e-06 4.53382550e-04 7.18197378e-01 1.58543405e+03 -5.67000000e-05 6.05602814e-02 2.10838998e-01 9.93600806e-03 4.27847563e-06 8.58809746e-06 4.54468281e-04 7.18197378e-01 1.58633603e+03 -5.68000000e-05 6.05526843e-02 2.10821633e-01 9.95983588e-03 4.28372330e-06 8.62960042e-06 4.55555454e-04 7.18197378e-01 1.58633603e+03 -5.69000000e-05 6.05450771e-02 2.10804245e-01 9.98369560e-03 4.28898785e-06 8.67126062e-06 4.56644072e-04 7.18197378e-01 1.58633603e+03 -5.70000000e-05 6.05374596e-02 2.10786834e-01 1.00075873e-02 4.29426936e-06 8.71307861e-06 4.57734139e-04 7.18197378e-01 1.58633603e+03 -5.71000000e-05 6.05298320e-02 2.10769399e-01 1.00315111e-02 4.29956791e-06 8.75505495e-06 4.58825657e-04 7.18197378e-01 1.58724329e+03 -5.72000000e-05 6.05221940e-02 2.10751940e-01 1.00554670e-02 4.30488359e-06 8.79719019e-06 4.59918631e-04 7.18197378e-01 1.58724329e+03 -5.73000000e-05 6.05145458e-02 2.10734458e-01 1.00794551e-02 4.31021648e-06 8.83948489e-06 4.61013063e-04 7.18197378e-01 1.58724329e+03 -5.74000000e-05 6.05068873e-02 2.10716953e-01 1.01034755e-02 4.31556667e-06 8.88193961e-06 4.62108958e-04 7.18197378e-01 1.58724329e+03 -5.75000000e-05 6.04992185e-02 2.10699424e-01 1.01275282e-02 4.32093424e-06 8.92455492e-06 4.63206319e-04 7.18197378e-01 1.58815590e+03 -5.76000000e-05 6.04915393e-02 2.10681871e-01 1.01516135e-02 4.32631928e-06 8.96733138e-06 4.64305148e-04 7.18197378e-01 1.58815590e+03 -5.77000000e-05 6.04838498e-02 2.10664294e-01 1.01757312e-02 4.33172187e-06 9.01026956e-06 4.65405451e-04 7.18197378e-01 1.58815590e+03 -5.78000000e-05 6.04761498e-02 2.10646693e-01 1.01998815e-02 4.33714211e-06 9.05337004e-06 4.66507230e-04 7.18197378e-01 1.58815590e+03 -5.79000000e-05 6.04684395e-02 2.10629068e-01 1.02240645e-02 4.34258008e-06 9.09663338e-06 4.67610488e-04 7.18197378e-01 1.58815590e+03 -5.80000000e-05 6.04607186e-02 2.10611420e-01 1.02482802e-02 4.34803587e-06 9.14006016e-06 4.68715230e-04 7.18197378e-01 1.58907392e+03 -5.81000000e-05 6.04529874e-02 2.10593747e-01 1.02725288e-02 4.35350957e-06 9.18365096e-06 4.69821458e-04 7.18197378e-01 1.58907392e+03 -5.82000000e-05 6.04452456e-02 2.10576051e-01 1.02968103e-02 4.35900126e-06 9.22740636e-06 4.70929177e-04 7.18197378e-01 1.58907392e+03 -5.83000000e-05 6.04374932e-02 2.10558330e-01 1.03211248e-02 4.36451104e-06 9.27132695e-06 4.72038390e-04 7.18197378e-01 1.58907392e+03 -5.84000000e-05 6.04297304e-02 2.10540585e-01 1.03454723e-02 4.37003900e-06 9.31541331e-06 4.73149100e-04 7.18197378e-01 1.59049794e+03 -5.85000000e-05 6.04219570e-02 2.10522816e-01 1.03698530e-02 4.37558523e-06 9.35966604e-06 4.74261312e-04 7.18197378e-01 1.59049794e+03 -5.86000000e-05 6.04141729e-02 2.10505022e-01 1.03942670e-02 4.38114981e-06 9.40408571e-06 4.75375028e-04 7.18197378e-01 1.59049794e+03 -5.87000000e-05 6.04063783e-02 2.10487204e-01 1.04187142e-02 4.38673285e-06 9.44867293e-06 4.76490253e-04 7.18197378e-01 1.59049794e+03 -5.88000000e-05 6.03985729e-02 2.10469362e-01 1.04431948e-02 4.39233444e-06 9.49342829e-06 4.77606989e-04 7.18197378e-01 1.59049794e+03 -5.89000000e-05 6.03907569e-02 2.10451495e-01 1.04677089e-02 4.39795467e-06 9.53835240e-06 4.78725241e-04 7.18197378e-01 1.59049794e+03 -5.90000000e-05 6.03829303e-02 2.10433603e-01 1.04922566e-02 4.40359363e-06 9.58344585e-06 4.79845012e-04 7.18197378e-01 1.59049794e+03 -5.91000000e-05 6.03750928e-02 2.10415687e-01 1.05168379e-02 4.40925141e-06 9.62870924e-06 4.80966307e-04 7.18197378e-01 1.59193512e+03 -5.92000000e-05 6.03672447e-02 2.10397746e-01 1.05414529e-02 4.41492813e-06 9.67414320e-06 4.82089128e-04 7.18197378e-01 1.59193512e+03 -5.93000000e-05 6.03593857e-02 2.10379781e-01 1.05661017e-02 4.42062386e-06 9.71974832e-06 4.83213479e-04 7.18197378e-01 1.59193512e+03 -5.94000000e-05 6.03515159e-02 2.10361791e-01 1.05907843e-02 4.42633871e-06 9.76552521e-06 4.84339364e-04 7.18197378e-01 1.59193512e+03 -5.95000000e-05 6.03436353e-02 2.10343776e-01 1.06155010e-02 4.43207277e-06 9.81147450e-06 4.85466787e-04 7.18197378e-01 1.59193512e+03 -5.96000000e-05 6.03357439e-02 2.10325735e-01 1.06402517e-02 4.43782614e-06 9.85759681e-06 4.86595751e-04 7.18197378e-01 1.59193512e+03 -5.97000000e-05 6.03278415e-02 2.10307670e-01 1.06650365e-02 4.44359892e-06 9.90389274e-06 4.87726260e-04 7.18197378e-01 1.59193512e+03 -5.98000000e-05 6.03199283e-02 2.10289580e-01 1.06898555e-02 4.44939121e-06 9.95036293e-06 4.88858319e-04 7.18197378e-01 1.59338566e+03 -5.99000000e-05 6.03120041e-02 2.10271465e-01 1.07147088e-02 4.45520311e-06 9.99700800e-06 4.89991930e-04 7.18197378e-01 1.59338566e+03 -6.00000000e-05 6.03040689e-02 2.10253325e-01 1.07395965e-02 4.46103472e-06 1.00438286e-05 4.91127097e-04 7.18197378e-01 1.59338566e+03 -6.01000000e-05 6.02961227e-02 2.10235159e-01 1.07645187e-02 4.46688613e-06 1.00908253e-05 4.92263825e-04 7.18197378e-01 1.59338566e+03 -6.02000000e-05 6.02881655e-02 2.10216968e-01 1.07894754e-02 4.47275746e-06 1.01379988e-05 4.93402117e-04 7.18197378e-01 1.59338566e+03 -6.03000000e-05 6.02801973e-02 2.10198752e-01 1.08144667e-02 4.47864880e-06 1.01853497e-05 4.94541977e-04 7.18197378e-01 1.59338566e+03 -6.04000000e-05 6.02722180e-02 2.10180511e-01 1.08394927e-02 4.48456026e-06 1.02328787e-05 4.95683409e-04 7.18197378e-01 1.59484978e+03 -6.05000000e-05 6.02642276e-02 2.10162243e-01 1.08645536e-02 4.49049194e-06 1.02805864e-05 4.96826416e-04 7.18197378e-01 1.59484978e+03 -6.06000000e-05 6.02562260e-02 2.10143951e-01 1.08896493e-02 4.49644394e-06 1.03284734e-05 4.97971003e-04 7.18197378e-01 1.59484978e+03 -6.07000000e-05 6.02482133e-02 2.10125633e-01 1.09147801e-02 4.50241638e-06 1.03765404e-05 4.99117173e-04 7.18197378e-01 1.59484978e+03 -6.08000000e-05 6.02401895e-02 2.10107289e-01 1.09399458e-02 4.50840935e-06 1.04247880e-05 5.00264930e-04 7.18197378e-01 1.59484978e+03 -6.09000000e-05 6.02321544e-02 2.10088919e-01 1.09651468e-02 4.51442296e-06 1.04732170e-05 5.01414279e-04 7.18197378e-01 1.59484978e+03 -6.10000000e-05 6.02241080e-02 2.10070524e-01 1.09903829e-02 4.52045732e-06 1.05218279e-05 5.02565222e-04 7.18197378e-01 1.59484978e+03 -6.11000000e-05 6.02160504e-02 2.10052102e-01 1.10156544e-02 4.52651254e-06 1.05706214e-05 5.03717764e-04 7.18197378e-01 1.59632773e+03 -6.12000000e-05 6.02079815e-02 2.10033655e-01 1.10409613e-02 4.53258872e-06 1.06195982e-05 5.04871910e-04 7.18197378e-01 1.59632773e+03 -6.13000000e-05 6.01999013e-02 2.10015182e-01 1.10663037e-02 4.53868598e-06 1.06687590e-05 5.06027662e-04 7.18197378e-01 1.59632773e+03 -6.14000000e-05 6.01918097e-02 2.09996683e-01 1.10916816e-02 4.54480442e-06 1.07181043e-05 5.07185025e-04 7.18197378e-01 1.59632773e+03 -6.15000000e-05 6.01837068e-02 2.09978157e-01 1.11170953e-02 4.55094416e-06 1.07676350e-05 5.08344003e-04 7.18197378e-01 1.59632773e+03 -6.16000000e-05 6.01755924e-02 2.09959606e-01 1.11425447e-02 4.55710531e-06 1.08173516e-05 5.09504600e-04 7.18197378e-01 1.59632773e+03 -6.17000000e-05 6.01674666e-02 2.09941028e-01 1.11680300e-02 4.56328797e-06 1.08672549e-05 5.10666819e-04 7.18197378e-01 1.59632773e+03 -6.18000000e-05 6.01593294e-02 2.09922424e-01 1.11935512e-02 4.56949227e-06 1.09173455e-05 5.11830666e-04 7.18197378e-01 1.59904982e+03 -6.19000000e-05 6.01511806e-02 2.09903794e-01 1.12191084e-02 4.57571831e-06 1.09676241e-05 5.12996143e-04 7.18197378e-01 1.59904982e+03 -6.20000000e-05 6.01430203e-02 2.09885137e-01 1.12447017e-02 4.58196621e-06 1.10180915e-05 5.14163255e-04 7.18197378e-01 1.59904982e+03 -6.21000000e-05 6.01348485e-02 2.09866453e-01 1.12703313e-02 4.58823609e-06 1.10687482e-05 5.15332007e-04 7.18197378e-01 1.59904982e+03 -6.22000000e-05 6.01266650e-02 2.09847743e-01 1.12959972e-02 4.59452806e-06 1.11195950e-05 5.16502401e-04 7.18197378e-01 1.59904982e+03 -6.23000000e-05 6.01184700e-02 2.09829007e-01 1.13216994e-02 4.60084224e-06 1.11706325e-05 5.17674443e-04 7.18197378e-01 1.59904982e+03 -6.24000000e-05 6.01102633e-02 2.09810243e-01 1.13474382e-02 4.60717874e-06 1.12218616e-05 5.18848136e-04 7.18197378e-01 1.59904982e+03 -6.25000000e-05 6.01020450e-02 2.09791453e-01 1.13732135e-02 4.61353769e-06 1.12732828e-05 5.20023485e-04 7.18197378e-01 1.59904982e+03 -6.26000000e-05 6.00938150e-02 2.09772636e-01 1.13990255e-02 4.61991920e-06 1.13248970e-05 5.21200493e-04 7.18197378e-01 1.59904982e+03 -6.27000000e-05 6.00855732e-02 2.09753793e-01 1.14248742e-02 4.62632339e-06 1.13767047e-05 5.22379165e-04 7.18197378e-01 1.59904982e+03 -6.28000000e-05 6.00773197e-02 2.09734922e-01 1.14507598e-02 4.63275039e-06 1.14287068e-05 5.23559505e-04 7.18197378e-01 1.59904982e+03 -6.29000000e-05 6.00690544e-02 2.09716024e-01 1.14766823e-02 4.63920031e-06 1.14809039e-05 5.24741517e-04 7.18197378e-01 1.59904982e+03 -6.30000000e-05 6.00607773e-02 2.09697099e-01 1.15026419e-02 4.64567328e-06 1.15332967e-05 5.25925205e-04 7.18197378e-01 1.60181978e+03 -6.31000000e-05 6.00524883e-02 2.09678147e-01 1.15286386e-02 4.65216942e-06 1.15858860e-05 5.27110574e-04 7.18197378e-01 1.60181978e+03 -6.32000000e-05 6.00441874e-02 2.09659167e-01 1.15546726e-02 4.65868885e-06 1.16386726e-05 5.28297628e-04 7.18197378e-01 1.60181978e+03 -6.33000000e-05 6.00358747e-02 2.09640160e-01 1.15807439e-02 4.66523170e-06 1.16916570e-05 5.29486371e-04 7.18197378e-01 1.60181978e+03 -6.34000000e-05 6.00275500e-02 2.09621126e-01 1.16068525e-02 4.67179810e-06 1.17448402e-05 5.30676807e-04 7.18197378e-01 1.60181978e+03 -6.35000000e-05 6.00192133e-02 2.09602065e-01 1.16329987e-02 4.67838818e-06 1.17982227e-05 5.31868941e-04 7.18197378e-01 1.60181978e+03 -6.36000000e-05 6.00108647e-02 2.09582975e-01 1.16591825e-02 4.68500205e-06 1.18518054e-05 5.33062776e-04 7.18197378e-01 1.60181978e+03 -6.37000000e-05 6.00025040e-02 2.09563859e-01 1.16854040e-02 4.69163984e-06 1.19055890e-05 5.34258318e-04 7.18197378e-01 1.60181978e+03 -6.38000000e-05 5.99941312e-02 2.09544714e-01 1.17116633e-02 4.69830169e-06 1.19595742e-05 5.35455570e-04 7.18197378e-01 1.60181978e+03 -6.39000000e-05 5.99857464e-02 2.09525542e-01 1.17379605e-02 4.70498773e-06 1.20137617e-05 5.36654538e-04 7.18197378e-01 1.60181978e+03 -6.40000000e-05 5.99773494e-02 2.09506342e-01 1.17642957e-02 4.71169809e-06 1.20681525e-05 5.37855224e-04 7.18197378e-01 1.60181978e+03 -6.41000000e-05 5.99689403e-02 2.09487114e-01 1.17906690e-02 4.71843289e-06 1.21227471e-05 5.39057634e-04 7.18197378e-01 1.60181978e+03 -6.42000000e-05 5.99605191e-02 2.09467858e-01 1.18170804e-02 4.72519227e-06 1.21775464e-05 5.40261772e-04 7.18197378e-01 1.60181978e+03 -6.43000000e-05 5.99520855e-02 2.09448574e-01 1.18435302e-02 4.73197637e-06 1.22325510e-05 5.41467642e-04 7.18197378e-01 1.60463911e+03 -6.44000000e-05 5.99436398e-02 2.09429262e-01 1.18700183e-02 4.73878532e-06 1.22877619e-05 5.42675249e-04 7.18197378e-01 1.60463911e+03 -6.45000000e-05 5.99351818e-02 2.09409922e-01 1.18965449e-02 4.74561926e-06 1.23431798e-05 5.43884598e-04 7.18197378e-01 1.60463911e+03 -6.46000000e-05 5.99267114e-02 2.09390554e-01 1.19231101e-02 4.75247831e-06 1.23988054e-05 5.45095692e-04 7.18197378e-01 1.60463911e+03 -6.47000000e-05 5.99182288e-02 2.09371157e-01 1.19497139e-02 4.75936263e-06 1.24546394e-05 5.46308536e-04 7.18197378e-01 1.60463911e+03 -6.48000000e-05 5.99097337e-02 2.09351732e-01 1.19763566e-02 4.76627234e-06 1.25106828e-05 5.47523135e-04 7.18197378e-01 1.60463911e+03 -6.49000000e-05 5.99012263e-02 2.09332278e-01 1.20030381e-02 4.77320759e-06 1.25669363e-05 5.48739493e-04 7.18197378e-01 1.60463911e+03 -6.50000000e-05 5.98927064e-02 2.09312796e-01 1.20297586e-02 4.78016851e-06 1.26234006e-05 5.49957615e-04 7.18197378e-01 1.60463911e+03 -6.51000000e-05 5.98841740e-02 2.09293285e-01 1.20565182e-02 4.78715525e-06 1.26800766e-05 5.51177505e-04 7.18197378e-01 1.60463911e+03 -6.52000000e-05 5.98756291e-02 2.09273746e-01 1.20833169e-02 4.79416794e-06 1.27369651e-05 5.52399168e-04 7.18197378e-01 1.60463911e+03 -6.53000000e-05 5.98670718e-02 2.09254178e-01 1.21101550e-02 4.80120674e-06 1.27940668e-05 5.53622608e-04 7.18197378e-01 1.60463911e+03 -6.54000000e-05 5.98585018e-02 2.09234580e-01 1.21370324e-02 4.80827178e-06 1.28513826e-05 5.54847830e-04 7.18197378e-01 1.60463911e+03 -6.55000000e-05 5.98499192e-02 2.09214955e-01 1.21639493e-02 4.81536321e-06 1.29089133e-05 5.56074839e-04 7.18197378e-01 1.60750941e+03 -6.56000000e-05 5.98413241e-02 2.09195300e-01 1.21909058e-02 4.82248119e-06 1.29666596e-05 5.57303638e-04 7.18197378e-01 1.60750941e+03 -6.57000000e-05 5.98327162e-02 2.09175615e-01 1.22179020e-02 4.82962585e-06 1.30246225e-05 5.58534234e-04 7.18197378e-01 1.60750941e+03 -6.58000000e-05 5.98240957e-02 2.09155902e-01 1.22449379e-02 4.83679734e-06 1.30828026e-05 5.59766630e-04 7.18197378e-01 1.60750941e+03 -6.59000000e-05 5.98154624e-02 2.09136160e-01 1.22720138e-02 4.84399582e-06 1.31412009e-05 5.61000831e-04 7.18197378e-01 1.60750941e+03 -6.60000000e-05 5.98068163e-02 2.09116388e-01 1.22991297e-02 4.85122143e-06 1.31998182e-05 5.62236841e-04 7.18197378e-01 1.60750941e+03 -6.61000000e-05 5.97981575e-02 2.09096587e-01 1.23262857e-02 4.85847432e-06 1.32586553e-05 5.63474667e-04 7.18197378e-01 1.60750941e+03 -6.62000000e-05 5.97894858e-02 2.09076757e-01 1.23534819e-02 4.86575465e-06 1.33177130e-05 5.64714311e-04 7.18197378e-01 1.60750941e+03 -6.63000000e-05 5.97808013e-02 2.09056897e-01 1.23807184e-02 4.87306257e-06 1.33769922e-05 5.65955779e-04 7.18197378e-01 1.60750941e+03 -6.64000000e-05 5.97721039e-02 2.09037007e-01 1.24079954e-02 4.88039823e-06 1.34364938e-05 5.67199077e-04 7.18197378e-01 1.60750941e+03 -6.65000000e-05 5.97633935e-02 2.09017088e-01 1.24353128e-02 4.88776179e-06 1.34962185e-05 5.68444207e-04 7.18197378e-01 1.60750941e+03 -6.66000000e-05 5.97546702e-02 2.08997138e-01 1.24626710e-02 4.89515341e-06 1.35561672e-05 5.69691176e-04 7.18197378e-01 1.60750941e+03 -6.67000000e-05 5.97459339e-02 2.08977160e-01 1.24900698e-02 4.90257324e-06 1.36163407e-05 5.70939988e-04 7.18197378e-01 1.61043233e+03 -6.68000000e-05 5.97371845e-02 2.08957151e-01 1.25175095e-02 4.91002144e-06 1.36767401e-05 5.72190648e-04 7.18197378e-01 1.61043233e+03 -6.69000000e-05 5.97284221e-02 2.08937112e-01 1.25449902e-02 4.91749817e-06 1.37373660e-05 5.73443161e-04 7.18197378e-01 1.61043233e+03 -6.70000000e-05 5.97196466e-02 2.08917043e-01 1.25725119e-02 4.92500359e-06 1.37982193e-05 5.74697531e-04 7.18197378e-01 1.61043233e+03 -6.71000000e-05 5.97108579e-02 2.08896944e-01 1.26000748e-02 4.93253787e-06 1.38593010e-05 5.75953764e-04 7.18197378e-01 1.61043233e+03 -6.72000000e-05 5.97020560e-02 2.08876815e-01 1.26276790e-02 4.94010117e-06 1.39206120e-05 5.77211864e-04 7.18197378e-01 1.61043233e+03 -6.73000000e-05 5.96932410e-02 2.08856655e-01 1.26553246e-02 4.94769365e-06 1.39821530e-05 5.78471837e-04 7.18197378e-01 1.61043233e+03 -6.74000000e-05 5.96844127e-02 2.08836465e-01 1.26830116e-02 4.95531547e-06 1.40439250e-05 5.79733687e-04 7.18197378e-01 1.61043233e+03 -6.75000000e-05 5.96755711e-02 2.08816244e-01 1.27107403e-02 4.96296681e-06 1.41059288e-05 5.80997419e-04 7.18197378e-01 1.61043233e+03 -6.76000000e-05 5.96667163e-02 2.08795993e-01 1.27385107e-02 4.97064783e-06 1.41681654e-05 5.82263038e-04 7.18197378e-01 1.61043233e+03 -6.77000000e-05 5.96578480e-02 2.08775712e-01 1.27663230e-02 4.97835870e-06 1.42306356e-05 5.83530550e-04 7.18197378e-01 1.61043233e+03 -6.78000000e-05 5.96489664e-02 2.08755399e-01 1.27941772e-02 4.98609959e-06 1.42933404e-05 5.84799958e-04 7.18197378e-01 1.61043233e+03 -6.79000000e-05 5.96400714e-02 2.08735056e-01 1.28220734e-02 4.99387067e-06 1.43562807e-05 5.86071269e-04 7.18197378e-01 1.61043233e+03 -6.80000000e-05 5.96311629e-02 2.08714682e-01 1.28500118e-02 5.00167213e-06 1.44194573e-05 5.87344488e-04 7.18197378e-01 1.61340961e+03 -6.81000000e-05 5.96222409e-02 2.08694277e-01 1.28779925e-02 5.00950413e-06 1.44828713e-05 5.88619618e-04 7.18197378e-01 1.61340961e+03 -6.82000000e-05 5.96133054e-02 2.08673841e-01 1.29060156e-02 5.01736686e-06 1.45465234e-05 5.89896666e-04 7.18197378e-01 1.61340961e+03 -6.83000000e-05 5.96043563e-02 2.08653373e-01 1.29340812e-02 5.02526047e-06 1.46104146e-05 5.91175637e-04 7.18197378e-01 1.61340961e+03 -6.84000000e-05 5.95953937e-02 2.08632875e-01 1.29621894e-02 5.03318517e-06 1.46745459e-05 5.92456536e-04 7.18197378e-01 1.61340961e+03 -6.85000000e-05 5.95864174e-02 2.08612345e-01 1.29903404e-02 5.04114111e-06 1.47389182e-05 5.93739367e-04 7.18197378e-01 1.61340961e+03 -6.86000000e-05 5.95774274e-02 2.08591784e-01 1.30185342e-02 5.04912849e-06 1.48035324e-05 5.95024136e-04 7.18197378e-01 1.61340961e+03 -6.87000000e-05 5.95684237e-02 2.08571191e-01 1.30467710e-02 5.05714749e-06 1.48683894e-05 5.96310849e-04 7.18197378e-01 1.61340961e+03 -6.88000000e-05 5.95594063e-02 2.08550567e-01 1.30750508e-02 5.06519829e-06 1.49334903e-05 5.97599509e-04 7.18197378e-01 1.61340961e+03 -6.89000000e-05 5.95503750e-02 2.08529911e-01 1.31033739e-02 5.07328107e-06 1.49988359e-05 5.98890124e-04 7.18197378e-01 1.61340961e+03 -6.90000000e-05 5.95413300e-02 2.08509223e-01 1.31317403e-02 5.08139603e-06 1.50644272e-05 6.00182697e-04 7.18197378e-01 1.61340961e+03 -6.91000000e-05 5.95322711e-02 2.08488504e-01 1.31601501e-02 5.08954334e-06 1.51302652e-05 6.01477235e-04 7.18197378e-01 1.61340961e+03 -6.92000000e-05 5.95231983e-02 2.08467753e-01 1.31886034e-02 5.09772319e-06 1.51963509e-05 6.02773742e-04 7.18197378e-01 1.61644309e+03 -6.93000000e-05 5.95141116e-02 2.08446969e-01 1.32171005e-02 5.10593576e-06 1.52626851e-05 6.04072224e-04 7.18197378e-01 1.61644309e+03 -6.94000000e-05 5.95050109e-02 2.08426154e-01 1.32456413e-02 5.11418126e-06 1.53292689e-05 6.05372685e-04 7.18197378e-01 1.61644309e+03 -6.95000000e-05 5.94958961e-02 2.08405306e-01 1.32742260e-02 5.12245987e-06 1.53961033e-05 6.06675133e-04 7.18197378e-01 1.61644309e+03 -6.96000000e-05 5.94867674e-02 2.08384427e-01 1.33028547e-02 5.13077179e-06 1.54631892e-05 6.07979571e-04 7.18197378e-01 1.61644309e+03 -6.97000000e-05 5.94776245e-02 2.08363514e-01 1.33315276e-02 5.13911721e-06 1.55305277e-05 6.09286005e-04 7.18197378e-01 1.61644309e+03 -6.98000000e-05 5.94684675e-02 2.08342570e-01 1.33602448e-02 5.14749634e-06 1.55981197e-05 6.10594441e-04 7.18197378e-01 1.61644309e+03 -6.99000000e-05 5.94592964e-02 2.08321593e-01 1.33890063e-02 5.15590935e-06 1.56659661e-05 6.11904883e-04 7.18197378e-01 1.61644309e+03 -7.00000000e-05 5.94501111e-02 2.08300583e-01 1.34178123e-02 5.16435646e-06 1.57340682e-05 6.13217339e-04 7.18197378e-01 1.61644309e+03 -7.01000000e-05 5.94409115e-02 2.08279541e-01 1.34466630e-02 5.17283787e-06 1.58024267e-05 6.14531812e-04 7.18197378e-01 1.61644309e+03 -7.02000000e-05 5.94316976e-02 2.08258465e-01 1.34755584e-02 5.18135377e-06 1.58710428e-05 6.15848308e-04 7.18197378e-01 1.61644309e+03 -7.03000000e-05 5.94224694e-02 2.08237357e-01 1.35044987e-02 5.18990437e-06 1.59399174e-05 6.17166834e-04 7.18197378e-01 1.61644309e+03 -7.04000000e-05 5.94132269e-02 2.08216216e-01 1.35334840e-02 5.19848988e-06 1.60090516e-05 6.18487394e-04 7.18197378e-01 1.61869251e+03 -7.05000000e-05 5.94039700e-02 2.08195042e-01 1.35625144e-02 5.20711054e-06 1.60784464e-05 6.19809994e-04 7.18197378e-01 1.61869251e+03 -7.06000000e-05 5.93946986e-02 2.08173835e-01 1.35915900e-02 5.21576653e-06 1.61481029e-05 6.21134640e-04 7.18197378e-01 1.61869251e+03 -7.07000000e-05 5.93854127e-02 2.08152595e-01 1.36207110e-02 5.22445807e-06 1.62180220e-05 6.22461337e-04 7.18197378e-01 1.61869251e+03 -7.08000000e-05 5.93761124e-02 2.08131321e-01 1.36498775e-02 5.23318538e-06 1.62882049e-05 6.23790091e-04 7.18197378e-01 1.61869251e+03 -7.09000000e-05 5.93667974e-02 2.08110014e-01 1.36790897e-02 5.24194866e-06 1.63586525e-05 6.25120907e-04 7.18197378e-01 1.61869251e+03 -7.10000000e-05 5.93574679e-02 2.08088673e-01 1.37083475e-02 5.25074814e-06 1.64293659e-05 6.26453792e-04 7.18197378e-01 1.61869251e+03 -7.11000000e-05 5.93481238e-02 2.08067298e-01 1.37376513e-02 5.25958403e-06 1.65003462e-05 6.27788750e-04 7.18197378e-01 1.61869251e+03 -7.12000000e-05 5.93387649e-02 2.08045890e-01 1.37670010e-02 5.26845657e-06 1.65715945e-05 6.29125788e-04 7.18197378e-01 1.61869251e+03 -7.13000000e-05 5.93293914e-02 2.08024449e-01 1.37963969e-02 5.27736596e-06 1.66431118e-05 6.30464911e-04 7.18197378e-01 1.62097361e+03 -7.14000000e-05 5.93200030e-02 2.08002973e-01 1.38258390e-02 5.28631236e-06 1.67148992e-05 6.31806125e-04 7.18197378e-01 1.62097361e+03 -7.15000000e-05 5.93105999e-02 2.07981463e-01 1.38553275e-02 5.29529606e-06 1.67869577e-05 6.33149437e-04 7.18197378e-01 1.62097361e+03 -7.16000000e-05 5.93011819e-02 2.07959919e-01 1.38848625e-02 5.30431726e-06 1.68592885e-05 6.34494850e-04 7.18197378e-01 1.62097361e+03 -7.17000000e-05 5.92917491e-02 2.07938341e-01 1.39144441e-02 5.31337619e-06 1.69318926e-05 6.35842373e-04 7.18197378e-01 1.62097361e+03 -7.18000000e-05 5.92823013e-02 2.07916729e-01 1.39440725e-02 5.32247308e-06 1.70047712e-05 6.37192009e-04 7.18197378e-01 1.62097361e+03 -7.19000000e-05 5.92728386e-02 2.07895082e-01 1.39737478e-02 5.33160815e-06 1.70779253e-05 6.38543766e-04 7.18197378e-01 1.62097361e+03 -7.20000000e-05 5.92633608e-02 2.07873401e-01 1.40034702e-02 5.34078163e-06 1.71513561e-05 6.39897649e-04 7.18197378e-01 1.62097361e+03 -7.21000000e-05 5.92538680e-02 2.07851686e-01 1.40332397e-02 5.34999375e-06 1.72250646e-05 6.41253664e-04 7.18197378e-01 1.62097361e+03 -7.22000000e-05 5.92443601e-02 2.07829935e-01 1.40630565e-02 5.35924476e-06 1.72990520e-05 6.42611816e-04 7.18197378e-01 1.62328721e+03 -7.23000000e-05 5.92348371e-02 2.07808150e-01 1.40929207e-02 5.36853494e-06 1.73733194e-05 6.43972113e-04 7.18197378e-01 1.62328721e+03 -7.24000000e-05 5.92252989e-02 2.07786330e-01 1.41228325e-02 5.37786449e-06 1.74478680e-05 6.45334560e-04 7.18197378e-01 1.62328721e+03 -7.25000000e-05 5.92157455e-02 2.07764476e-01 1.41527920e-02 5.38723365e-06 1.75226988e-05 6.46699162e-04 7.18197378e-01 1.62328721e+03 -7.26000000e-05 5.92061768e-02 2.07742586e-01 1.41827993e-02 5.39664267e-06 1.75978130e-05 6.48065927e-04 7.18197378e-01 1.62328721e+03 -7.27000000e-05 5.91965928e-02 2.07720661e-01 1.42128546e-02 5.40609179e-06 1.76732118e-05 6.49434859e-04 7.18197378e-01 1.62328721e+03 -7.28000000e-05 5.91869934e-02 2.07698700e-01 1.42429579e-02 5.41558127e-06 1.77488963e-05 6.50805966e-04 7.18197378e-01 1.62328721e+03 -7.29000000e-05 5.91773787e-02 2.07676705e-01 1.42731095e-02 5.42511134e-06 1.78248676e-05 6.52179253e-04 7.18197378e-01 1.62328721e+03 -7.30000000e-05 5.91677485e-02 2.07654674e-01 1.43033095e-02 5.43468226e-06 1.79011270e-05 6.53554726e-04 7.18197378e-01 1.62328721e+03 -7.31000000e-05 5.91581028e-02 2.07632607e-01 1.43335580e-02 5.44429428e-06 1.79776756e-05 6.54932391e-04 7.18197378e-01 1.62563412e+03 -7.32000000e-05 5.91484416e-02 2.07610505e-01 1.43638551e-02 5.45394761e-06 1.80545145e-05 6.56312256e-04 7.18197378e-01 1.62563412e+03 -7.33000000e-05 5.91387649e-02 2.07588367e-01 1.43942010e-02 5.46364254e-06 1.81316451e-05 6.57694325e-04 7.18197378e-01 1.62563412e+03 -7.34000000e-05 5.91290725e-02 2.07566193e-01 1.44245959e-02 5.47337931e-06 1.82090683e-05 6.59078605e-04 7.18197378e-01 1.62563412e+03 -7.35000000e-05 5.91193645e-02 2.07543983e-01 1.44550398e-02 5.48315819e-06 1.82867856e-05 6.60465103e-04 7.18197378e-01 1.62563412e+03 -7.36000000e-05 5.91096408e-02 2.07521737e-01 1.44855329e-02 5.49297943e-06 1.83647979e-05 6.61853824e-04 7.18197378e-01 1.62563412e+03 -7.37000000e-05 5.90999013e-02 2.07499455e-01 1.45160753e-02 5.50284330e-06 1.84431066e-05 6.63244775e-04 7.18197378e-01 1.62563412e+03 -7.38000000e-05 5.90901460e-02 2.07477136e-01 1.45466672e-02 5.51275006e-06 1.85217129e-05 6.64637963e-04 7.18197378e-01 1.62563412e+03 -7.39000000e-05 5.90803749e-02 2.07454782e-01 1.45773088e-02 5.52269996e-06 1.86006179e-05 6.66033393e-04 7.18197378e-01 1.62563412e+03 -7.40000000e-05 5.90705879e-02 2.07432391e-01 1.46080001e-02 5.53269330e-06 1.86798230e-05 6.67431072e-04 7.18197378e-01 1.62735588e+03 -7.41000000e-05 5.90607850e-02 2.07409963e-01 1.46387413e-02 5.54273041e-06 1.87593293e-05 6.68831007e-04 7.18197378e-01 1.62735588e+03 -7.42000000e-05 5.90509661e-02 2.07387498e-01 1.46695326e-02 5.55281154e-06 1.88391380e-05 6.70233204e-04 7.18197378e-01 1.62735588e+03 -7.43000000e-05 5.90411312e-02 2.07364997e-01 1.47003740e-02 5.56293698e-06 1.89192505e-05 6.71637669e-04 7.18197378e-01 1.62735588e+03 -7.44000000e-05 5.90312802e-02 2.07342459e-01 1.47312658e-02 5.57310701e-06 1.89996680e-05 6.73044409e-04 7.18197378e-01 1.62735588e+03 -7.45000000e-05 5.90214131e-02 2.07319884e-01 1.47622081e-02 5.58332195e-06 1.90803917e-05 6.74453430e-04 7.18197378e-01 1.62735588e+03 -7.46000000e-05 5.90115299e-02 2.07297272e-01 1.47932010e-02 5.59358209e-06 1.91614228e-05 6.75864739e-04 7.18197378e-01 1.62735588e+03 -7.47000000e-05 5.90016304e-02 2.07274622e-01 1.48242447e-02 5.60388761e-06 1.92427628e-05 6.77278343e-04 7.18197378e-01 1.62856271e+03 -7.48000000e-05 5.89917147e-02 2.07251935e-01 1.48553393e-02 5.61423878e-06 1.93244127e-05 6.78694247e-04 7.18197378e-01 1.62856271e+03 -7.49000000e-05 5.89817827e-02 2.07229211e-01 1.48864850e-02 5.62463588e-06 1.94063740e-05 6.80112460e-04 7.18197378e-01 1.62856271e+03 -7.50000000e-05 5.89718343e-02 2.07206449e-01 1.49176818e-02 5.63507916e-06 1.94886479e-05 6.81532986e-04 7.18197378e-01 1.62856271e+03 -7.51000000e-05 5.89618696e-02 2.07183650e-01 1.49489301e-02 5.64556888e-06 1.95712357e-05 6.82955834e-04 7.18197378e-01 1.62944601e+03 -7.52000000e-05 5.89518884e-02 2.07160813e-01 1.49802299e-02 5.65610550e-06 1.96541388e-05 6.84381010e-04 7.18197378e-01 1.62944601e+03 -7.53000000e-05 5.89418907e-02 2.07137938e-01 1.50115813e-02 5.66668931e-06 1.97373583e-05 6.85808519e-04 7.18197378e-01 1.62944601e+03 -7.54000000e-05 5.89318765e-02 2.07115025e-01 1.50429845e-02 5.67732069e-06 1.98208957e-05 6.87238371e-04 7.18197378e-01 1.63033409e+03 -7.55000000e-05 5.89218457e-02 2.07092073e-01 1.50744398e-02 5.68799978e-06 1.99047522e-05 6.88670570e-04 7.18197378e-01 1.63033409e+03 -7.56000000e-05 5.89117982e-02 2.07069084e-01 1.51059471e-02 5.69872697e-06 1.99889293e-05 6.90105124e-04 7.18197378e-01 1.63033409e+03 -7.57000000e-05 5.89017341e-02 2.07046056e-01 1.51375067e-02 5.70950255e-06 2.00734281e-05 6.91542039e-04 7.18197378e-01 1.63033409e+03 -7.58000000e-05 5.88916532e-02 2.07022990e-01 1.51691187e-02 5.72032684e-06 2.01582502e-05 6.92981323e-04 7.18197378e-01 1.63122699e+03 -7.59000000e-05 5.88815556e-02 2.06999886e-01 1.52007833e-02 5.73120011e-06 2.02433968e-05 6.94422983e-04 7.18197378e-01 1.63122699e+03 -7.60000000e-05 5.88714411e-02 2.06976742e-01 1.52325006e-02 5.74212264e-06 2.03288692e-05 6.95867025e-04 7.18197378e-01 1.63122699e+03 -7.61000000e-05 5.88613098e-02 2.06953560e-01 1.52642708e-02 5.75309475e-06 2.04146689e-05 6.97313456e-04 7.18197378e-01 1.63212475e+03 -7.62000000e-05 5.88511615e-02 2.06930339e-01 1.52960941e-02 5.76411688e-06 2.05007973e-05 6.98762284e-04 7.18197378e-01 1.63212475e+03 -7.63000000e-05 5.88409962e-02 2.06907079e-01 1.53279705e-02 5.77518933e-06 2.05872556e-05 7.00213515e-04 7.18197378e-01 1.63212475e+03 -7.64000000e-05 5.88308139e-02 2.06883780e-01 1.53599003e-02 5.78631245e-06 2.06740454e-05 7.01667156e-04 7.18197378e-01 1.63302743e+03 -7.65000000e-05 5.88206146e-02 2.06860442e-01 1.53918836e-02 5.79748639e-06 2.07611679e-05 7.03123215e-04 7.18197378e-01 1.63302743e+03 -7.66000000e-05 5.88103981e-02 2.06837064e-01 1.54239206e-02 5.80871148e-06 2.08486246e-05 7.04581698e-04 7.18197378e-01 1.63302743e+03 -7.67000000e-05 5.88001644e-02 2.06813647e-01 1.54560114e-02 5.81998800e-06 2.09364170e-05 7.06042613e-04 7.18197378e-01 1.63302743e+03 -7.68000000e-05 5.87899135e-02 2.06790191e-01 1.54881562e-02 5.83131650e-06 2.10245463e-05 7.07505967e-04 7.18197378e-01 1.63368964e+03 -7.69000000e-05 5.87796453e-02 2.06766694e-01 1.55203551e-02 5.84269752e-06 2.11130141e-05 7.08971767e-04 7.18197378e-01 1.63368964e+03 -7.70000000e-05 5.87693597e-02 2.06743158e-01 1.55526084e-02 5.85413151e-06 2.12018218e-05 7.10440020e-04 7.18197378e-01 1.63416016e+03 -7.71000000e-05 5.87590568e-02 2.06719582e-01 1.55849161e-02 5.86561826e-06 2.12909708e-05 7.11910734e-04 7.18197378e-01 1.63416016e+03 -7.72000000e-05 5.87487365e-02 2.06695966e-01 1.56172784e-02 5.87715807e-06 2.13804626e-05 7.13383915e-04 7.18197378e-01 1.63463202e+03 -7.73000000e-05 5.87383986e-02 2.06672309e-01 1.56496955e-02 5.88875148e-06 2.14702985e-05 7.14859572e-04 7.18197378e-01 1.63510524e+03 -7.74000000e-05 5.87280432e-02 2.06648613e-01 1.56821676e-02 5.90039886e-06 2.15604802e-05 7.16337711e-04 7.18197378e-01 1.63510524e+03 -7.75000000e-05 5.87176702e-02 2.06624876e-01 1.57146948e-02 5.91210083e-06 2.16510090e-05 7.17818340e-04 7.18197378e-01 1.63557981e+03 -7.76000000e-05 5.87072796e-02 2.06601098e-01 1.57472773e-02 5.92385744e-06 2.17418865e-05 7.19301466e-04 7.18197378e-01 1.63557981e+03 -7.77000000e-05 5.86968713e-02 2.06577280e-01 1.57799153e-02 5.93566913e-06 2.18331141e-05 7.20787097e-04 7.18197378e-01 1.63605574e+03 -7.78000000e-05 5.86864452e-02 2.06553421e-01 1.58126088e-02 5.94753665e-06 2.19246933e-05 7.22275240e-04 7.18197378e-01 1.63605574e+03 -7.79000000e-05 5.86760013e-02 2.06529521e-01 1.58453581e-02 5.95945978e-06 2.20166256e-05 7.23765903e-04 7.18197378e-01 1.63653304e+03 -7.80000000e-05 5.86655395e-02 2.06505580e-01 1.58781634e-02 5.97143834e-06 2.21089126e-05 7.25259093e-04 7.18197378e-01 1.63685858e+03 -7.81000000e-05 5.86550598e-02 2.06481598e-01 1.59110248e-02 5.98347422e-06 2.22015557e-05 7.26754817e-04 7.18197378e-01 1.63708453e+03 -7.82000000e-05 5.86445622e-02 2.06457574e-01 1.59439425e-02 5.99556724e-06 2.22945565e-05 7.28253084e-04 7.18197378e-01 1.63731079e+03 -7.83000000e-05 5.86340465e-02 2.06433509e-01 1.59769167e-02 6.00771700e-06 2.23879165e-05 7.29753901e-04 7.18197378e-01 1.63753736e+03 -7.84000000e-05 5.86235128e-02 2.06409403e-01 1.60099475e-02 6.01992475e-06 2.24816372e-05 7.31257276e-04 7.18197378e-01 1.63776424e+03 -7.85000000e-05 5.86129609e-02 2.06385255e-01 1.60430351e-02 6.03219065e-06 2.25757203e-05 7.32763216e-04 7.18197378e-01 1.63821892e+03 -7.86000000e-05 5.86023909e-02 2.06361065e-01 1.60761796e-02 6.04451485e-06 2.26701673e-05 7.34271729e-04 7.18197378e-01 1.63844673e+03 -7.87000000e-05 5.85918026e-02 2.06336834e-01 1.61093813e-02 6.05689799e-06 2.27649797e-05 7.35782824e-04 7.18197378e-01 1.63867485e+03 -7.88000000e-05 5.85811960e-02 2.06312560e-01 1.61426403e-02 6.06934043e-06 2.28601591e-05 7.37296506e-04 7.18197378e-01 1.63890328e+03 -7.89000000e-05 5.85705710e-02 2.06288244e-01 1.61759568e-02 6.08184248e-06 2.29557071e-05 7.38812785e-04 7.18197378e-01 1.63936109e+03 -7.90000000e-05 5.85599276e-02 2.06263886e-01 1.62093310e-02 6.09440460e-06 2.30516253e-05 7.40331669e-04 7.18197378e-01 1.63971216e+03 -7.91000000e-05 5.85492658e-02 2.06239485e-01 1.62427630e-02 6.10702721e-06 2.31479153e-05 7.41853165e-04 7.18197378e-01 1.64006396e+03 -7.92000000e-05 5.85385854e-02 2.06215042e-01 1.62762531e-02 6.11971070e-06 2.32445787e-05 7.43377281e-04 7.18197378e-01 1.64006396e+03 -7.93000000e-05 5.85278865e-02 2.06190556e-01 1.63098013e-02 6.13245550e-06 2.33416172e-05 7.44904025e-04 7.18197378e-01 1.64041651e+03 -7.94000000e-05 5.85171689e-02 2.06166028e-01 1.63434079e-02 6.14526201e-06 2.34390323e-05 7.46433405e-04 7.18197378e-01 1.64076981e+03 -7.95000000e-05 5.85064327e-02 2.06141456e-01 1.63770731e-02 6.15813063e-06 2.35368258e-05 7.47965430e-04 7.18197378e-01 1.64156001e+03 -7.96000000e-05 5.84956777e-02 2.06116841e-01 1.64107970e-02 6.17106182e-06 2.36349992e-05 7.49500106e-04 7.18197378e-01 1.64156001e+03 -7.97000000e-05 5.84849038e-02 2.06092183e-01 1.64445798e-02 6.18405598e-06 2.37335542e-05 7.51037443e-04 7.18197378e-01 1.64156001e+03 -7.98000000e-05 5.84741112e-02 2.06067482e-01 1.64784217e-02 6.19711354e-06 2.38324925e-05 7.52577449e-04 7.18197378e-01 1.64235397e+03 -7.99000000e-05 5.84632995e-02 2.06042738e-01 1.65123229e-02 6.21023496e-06 2.39318157e-05 7.54120131e-04 7.18197378e-01 1.64235397e+03 -8.00000000e-05 5.84524689e-02 2.06017949e-01 1.65462835e-02 6.22342065e-06 2.40315256e-05 7.55665498e-04 7.18197378e-01 1.64235397e+03 -8.01000000e-05 5.84416193e-02 2.05993117e-01 1.65803038e-02 6.23667106e-06 2.41316238e-05 7.57213558e-04 7.18197378e-01 1.64361165e+03 -8.02000000e-05 5.84307506e-02 2.05968241e-01 1.66143839e-02 6.24998664e-06 2.42321121e-05 7.58764320e-04 7.18197378e-01 1.64361165e+03 -8.03000000e-05 5.84198627e-02 2.05943321e-01 1.66485240e-02 6.26336784e-06 2.43329921e-05 7.60317791e-04 7.18197378e-01 1.64361165e+03 -8.04000000e-05 5.84089556e-02 2.05918357e-01 1.66827243e-02 6.27681509e-06 2.44342656e-05 7.61873981e-04 7.18197378e-01 1.64361165e+03 -8.05000000e-05 5.83980292e-02 2.05893349e-01 1.67169850e-02 6.29032887e-06 2.45359342e-05 7.63432897e-04 7.18197378e-01 1.64487882e+03 -8.06000000e-05 5.83870834e-02 2.05868296e-01 1.67513063e-02 6.30390963e-06 2.46379999e-05 7.64994548e-04 7.18197378e-01 1.64487882e+03 -8.07000000e-05 5.83761183e-02 2.05843199e-01 1.67856883e-02 6.31755784e-06 2.47404642e-05 7.66558942e-04 7.18197378e-01 1.64487882e+03 -8.08000000e-05 5.83651337e-02 2.05818056e-01 1.68201313e-02 6.33127396e-06 2.48433289e-05 7.68126088e-04 7.18197378e-01 1.64487882e+03 -8.09000000e-05 5.83541296e-02 2.05792870e-01 1.68546354e-02 6.34505846e-06 2.49465959e-05 7.69695994e-04 7.18197378e-01 1.64615563e+03 -8.10000000e-05 5.83431059e-02 2.05767638e-01 1.68892008e-02 6.35891182e-06 2.50502669e-05 7.71268670e-04 7.18197378e-01 1.64615563e+03 -8.11000000e-05 5.83320625e-02 2.05742360e-01 1.69238278e-02 6.37283453e-06 2.51543437e-05 7.72844123e-04 7.18197378e-01 1.64615563e+03 -8.12000000e-05 5.83209995e-02 2.05717038e-01 1.69585165e-02 6.38682706e-06 2.52588281e-05 7.74422362e-04 7.18197378e-01 1.64615563e+03 -8.13000000e-05 5.83099167e-02 2.05691670e-01 1.69932671e-02 6.40088990e-06 2.53637219e-05 7.76003396e-04 7.18197378e-01 1.64744221e+03 -8.14000000e-05 5.82988140e-02 2.05666257e-01 1.70280798e-02 6.41502355e-06 2.54690269e-05 7.77587234e-04 7.18197378e-01 1.64744221e+03 -8.15000000e-05 5.82876915e-02 2.05640798e-01 1.70629548e-02 6.42922850e-06 2.55747450e-05 7.79173885e-04 7.18197378e-01 1.64744221e+03 -8.16000000e-05 5.82765490e-02 2.05615293e-01 1.70978923e-02 6.44350525e-06 2.56808779e-05 7.80763357e-04 7.18197378e-01 1.64744221e+03 -8.17000000e-05 5.82653865e-02 2.05589742e-01 1.71328924e-02 6.45785430e-06 2.57874277e-05 7.82355658e-04 7.18197378e-01 1.64744221e+03 -8.18000000e-05 5.82542039e-02 2.05564145e-01 1.71679555e-02 6.47227617e-06 2.58943960e-05 7.83950799e-04 7.18197378e-01 1.64873867e+03 -8.19000000e-05 5.82430012e-02 2.05538502e-01 1.72030816e-02 6.48677137e-06 2.60017848e-05 7.85548788e-04 7.18197378e-01 1.64873867e+03 -8.20000000e-05 5.82317783e-02 2.05512812e-01 1.72382711e-02 6.50134042e-06 2.61095960e-05 7.87149633e-04 7.18197378e-01 1.64873867e+03 -8.21000000e-05 5.82205351e-02 2.05487076e-01 1.72735240e-02 6.51598384e-06 2.62178314e-05 7.88753345e-04 7.18197378e-01 1.64873867e+03 -8.22000000e-05 5.82092715e-02 2.05461293e-01 1.73088406e-02 6.53070216e-06 2.63264930e-05 7.90359931e-04 7.18197378e-01 1.65004517e+03 -8.23000000e-05 5.81979876e-02 2.05435463e-01 1.73442211e-02 6.54549590e-06 2.64355827e-05 7.91969402e-04 7.18197378e-01 1.65004517e+03 -8.24000000e-05 5.81866832e-02 2.05409586e-01 1.73796657e-02 6.56036561e-06 2.65451024e-05 7.93581765e-04 7.18197378e-01 1.65004517e+03 -8.25000000e-05 5.81753582e-02 2.05383662e-01 1.74151746e-02 6.57531183e-06 2.66550541e-05 7.95197031e-04 7.18197378e-01 1.65004517e+03 -8.26000000e-05 5.81640127e-02 2.05357690e-01 1.74507480e-02 6.59033510e-06 2.67654396e-05 7.96815209e-04 7.18197378e-01 1.65136184e+03 -8.27000000e-05 5.81526465e-02 2.05331672e-01 1.74863861e-02 6.60543597e-06 2.68762610e-05 7.98436307e-04 7.18197378e-01 1.65136184e+03 -8.28000000e-05 5.81412596e-02 2.05305605e-01 1.75220891e-02 6.62061500e-06 2.69875202e-05 8.00060335e-04 7.18197378e-01 1.65136184e+03 -8.29000000e-05 5.81298519e-02 2.05279491e-01 1.75578572e-02 6.63587275e-06 2.70992191e-05 8.01687303e-04 7.18197378e-01 1.65136184e+03 -8.30000000e-05 5.81184233e-02 2.05253328e-01 1.75936907e-02 6.65120979e-06 2.72113599e-05 8.03317220e-04 7.18197378e-01 1.65136184e+03 -8.31000000e-05 5.81069738e-02 2.05227118e-01 1.76295897e-02 6.66662667e-06 2.73239445e-05 8.04950094e-04 7.18197378e-01 1.65268882e+03 -8.32000000e-05 5.80955032e-02 2.05200859e-01 1.76655545e-02 6.68212399e-06 2.74369749e-05 8.06585937e-04 7.18197378e-01 1.65268882e+03 -8.33000000e-05 5.80840117e-02 2.05174552e-01 1.77015852e-02 6.69770231e-06 2.75504532e-05 8.08224757e-04 7.18197378e-01 1.65268882e+03 -8.34000000e-05 5.80724990e-02 2.05148197e-01 1.77376821e-02 6.71336223e-06 2.76643813e-05 8.09866563e-04 7.18197378e-01 1.65268882e+03 -8.35000000e-05 5.80609650e-02 2.05121792e-01 1.77738454e-02 6.72910433e-06 2.77787613e-05 8.11511366e-04 7.18197378e-01 1.65402626e+03 -8.36000000e-05 5.80494099e-02 2.05095339e-01 1.78100753e-02 6.74492921e-06 2.78935954e-05 8.13159175e-04 7.18197378e-01 1.65402626e+03 -8.37000000e-05 5.80378333e-02 2.05068837e-01 1.78463720e-02 6.76083748e-06 2.80088855e-05 8.14809999e-04 7.18197378e-01 1.65402626e+03 -8.38000000e-05 5.80262354e-02 2.05042286e-01 1.78827358e-02 6.77682973e-06 2.81246337e-05 8.16463849e-04 7.18197378e-01 1.65402626e+03 -8.39000000e-05 5.80146160e-02 2.05015685e-01 1.79191668e-02 6.79290658e-06 2.82408423e-05 8.18120734e-04 7.18197378e-01 1.65537429e+03 -8.40000000e-05 5.80029751e-02 2.04989035e-01 1.79556653e-02 6.80906864e-06 2.83575131e-05 8.19780664e-04 7.18197378e-01 1.65537429e+03 -8.41000000e-05 5.79913125e-02 2.04962335e-01 1.79922314e-02 6.82531655e-06 2.84746485e-05 8.21443648e-04 7.18197378e-01 1.65537429e+03 -8.42000000e-05 5.79796282e-02 2.04935585e-01 1.80288655e-02 6.84165092e-06 2.85922505e-05 8.23109698e-04 7.18197378e-01 1.65537429e+03 -8.43000000e-05 5.79679222e-02 2.04908785e-01 1.80655677e-02 6.85807239e-06 2.87103212e-05 8.24778822e-04 7.18197378e-01 1.65537429e+03 -8.44000000e-05 5.79561944e-02 2.04881935e-01 1.81023383e-02 6.87458160e-06 2.88288629e-05 8.26451031e-04 7.18197378e-01 1.65673307e+03 -8.45000000e-05 5.79444446e-02 2.04855035e-01 1.81391774e-02 6.89117920e-06 2.89478777e-05 8.28126334e-04 7.18197378e-01 1.65673307e+03 -8.46000000e-05 5.79326729e-02 2.04828084e-01 1.81760854e-02 6.90786583e-06 2.90673677e-05 8.29804742e-04 7.18197378e-01 1.65673307e+03 -8.47000000e-05 5.79208791e-02 2.04801082e-01 1.82130624e-02 6.92464215e-06 2.91873352e-05 8.31486266e-04 7.18197378e-01 1.65673307e+03 -8.48000000e-05 5.79090632e-02 2.04774030e-01 1.82501086e-02 6.94150883e-06 2.93077825e-05 8.33170914e-04 7.18197378e-01 1.65879260e+03 -8.49000000e-05 5.78972252e-02 2.04746927e-01 1.82872243e-02 6.95846654e-06 2.94287116e-05 8.34858698e-04 7.18197378e-01 1.65879260e+03 -8.50000000e-05 5.78853648e-02 2.04719772e-01 1.83244098e-02 6.97551595e-06 2.95501250e-05 8.36549627e-04 7.18197378e-01 1.65879260e+03 -8.51000000e-05 5.78734821e-02 2.04692566e-01 1.83616652e-02 6.99265773e-06 2.96720247e-05 8.38243713e-04 7.18197378e-01 1.65879260e+03 -8.52000000e-05 5.78615770e-02 2.04665309e-01 1.83989907e-02 7.00989258e-06 2.97944131e-05 8.39940964e-04 7.18197378e-01 1.65879260e+03 -8.53000000e-05 5.78496495e-02 2.04638000e-01 1.84363867e-02 7.02722119e-06 2.99172924e-05 8.41641393e-04 7.18197378e-01 1.65879260e+03 -8.54000000e-05 5.78376993e-02 2.04610639e-01 1.84738533e-02 7.04464425e-06 3.00406649e-05 8.43345008e-04 7.18197378e-01 1.66087721e+03 -8.55000000e-05 5.78257265e-02 2.04583226e-01 1.85113907e-02 7.06216248e-06 3.01645330e-05 8.45051822e-04 7.18197378e-01 1.66087721e+03 -8.56000000e-05 5.78137310e-02 2.04555761e-01 1.85489993e-02 7.07977660e-06 3.02888990e-05 8.46761844e-04 7.18197378e-01 1.66087721e+03 -8.57000000e-05 5.78017128e-02 2.04528244e-01 1.85866792e-02 7.09748730e-06 3.04137652e-05 8.48475084e-04 7.18197378e-01 1.66087721e+03 -8.58000000e-05 5.77896716e-02 2.04500674e-01 1.86244308e-02 7.11529533e-06 3.05391338e-05 8.50191555e-04 7.18197378e-01 1.66087721e+03 -8.59000000e-05 5.77776075e-02 2.04473051e-01 1.86622541e-02 7.13320141e-06 3.06650074e-05 8.51911265e-04 7.18197378e-01 1.66087721e+03 -8.60000000e-05 5.77655204e-02 2.04445375e-01 1.87001495e-02 7.15120628e-06 3.07913882e-05 8.53634227e-04 7.18197378e-01 1.66087721e+03 -8.61000000e-05 5.77534102e-02 2.04417647e-01 1.87381172e-02 7.16931069e-06 3.09182787e-05 8.55360451e-04 7.18197378e-01 1.66298744e+03 -8.62000000e-05 5.77412769e-02 2.04389865e-01 1.87761574e-02 7.18751539e-06 3.10456812e-05 8.57089947e-04 7.18197378e-01 1.66298744e+03 -8.63000000e-05 5.77291203e-02 2.04362029e-01 1.88142704e-02 7.20582115e-06 3.11735982e-05 8.58822727e-04 7.18197378e-01 1.66298744e+03 -8.64000000e-05 5.77169403e-02 2.04334140e-01 1.88524564e-02 7.22422872e-06 3.13020321e-05 8.60558802e-04 7.18197378e-01 1.66298744e+03 -8.65000000e-05 5.77047370e-02 2.04306198e-01 1.88907158e-02 7.24273887e-06 3.14309853e-05 8.62298183e-04 7.18197378e-01 1.66298744e+03 -8.66000000e-05 5.76925101e-02 2.04278201e-01 1.89290486e-02 7.26135240e-06 3.15604604e-05 8.64040880e-04 7.18197378e-01 1.66298744e+03 -8.67000000e-05 5.76802597e-02 2.04250150e-01 1.89674552e-02 7.28007008e-06 3.16904596e-05 8.65786905e-04 7.18197378e-01 1.66512384e+03 -8.68000000e-05 5.76679857e-02 2.04222044e-01 1.90059359e-02 7.29889271e-06 3.18209857e-05 8.67536269e-04 7.18197378e-01 1.66512384e+03 -8.69000000e-05 5.76556879e-02 2.04193885e-01 1.90444908e-02 7.31782110e-06 3.19520410e-05 8.69288984e-04 7.18197378e-01 1.66512384e+03 -8.70000000e-05 5.76433664e-02 2.04165670e-01 1.90831202e-02 7.33685605e-06 3.20836281e-05 8.71045060e-04 7.18197378e-01 1.66512384e+03 -8.71000000e-05 5.76310209e-02 2.04137401e-01 1.91218244e-02 7.35599838e-06 3.22157495e-05 8.72804509e-04 7.18197378e-01 1.66512384e+03 -8.72000000e-05 5.76186515e-02 2.04109076e-01 1.91606036e-02 7.37524891e-06 3.23484078e-05 8.74567343e-04 7.18197378e-01 1.66512384e+03 -8.73000000e-05 5.76062580e-02 2.04080696e-01 1.91994581e-02 7.39460848e-06 3.24816055e-05 8.76333572e-04 7.18197378e-01 1.66512384e+03 -8.74000000e-05 5.75938404e-02 2.04052261e-01 1.92383882e-02 7.41407792e-06 3.26153452e-05 8.78103209e-04 7.18197378e-01 1.66728700e+03 -8.75000000e-05 5.75813986e-02 2.04023770e-01 1.92773940e-02 7.43365810e-06 3.27496295e-05 8.79876265e-04 7.18197378e-01 1.66728700e+03 -8.76000000e-05 5.75689325e-02 2.03995223e-01 1.93164759e-02 7.45334987e-06 3.28844610e-05 8.81652751e-04 7.18197378e-01 1.66728700e+03 -8.77000000e-05 5.75564420e-02 2.03966620e-01 1.93556342e-02 7.47315408e-06 3.30198424e-05 8.83432679e-04 7.18197378e-01 1.66728700e+03 -8.78000000e-05 5.75439270e-02 2.03937961e-01 1.93948690e-02 7.49307162e-06 3.31557762e-05 8.85216061e-04 7.18197378e-01 1.66728700e+03 -8.79000000e-05 5.75313875e-02 2.03909246e-01 1.94341806e-02 7.51310337e-06 3.32922652e-05 8.87002909e-04 7.18197378e-01 1.66728700e+03 -8.80000000e-05 5.75188234e-02 2.03880474e-01 1.94735693e-02 7.53325021e-06 3.34293121e-05 8.88793235e-04 7.18197378e-01 1.66947751e+03 -8.81000000e-05 5.75062345e-02 2.03851645e-01 1.95130354e-02 7.55351303e-06 3.35669194e-05 8.90587050e-04 7.18197378e-01 1.66947751e+03 -8.82000000e-05 5.74936209e-02 2.03822759e-01 1.95525792e-02 7.57389274e-06 3.37050900e-05 8.92384366e-04 7.18197378e-01 1.66947751e+03 -8.83000000e-05 5.74809823e-02 2.03793816e-01 1.95922008e-02 7.59439026e-06 3.38438265e-05 8.94185196e-04 7.18197378e-01 1.66947751e+03 -8.84000000e-05 5.74683188e-02 2.03764815e-01 1.96319006e-02 7.61500650e-06 3.39831317e-05 8.95989552e-04 7.18197378e-01 1.66947751e+03 -8.85000000e-05 5.74556302e-02 2.03735757e-01 1.96716788e-02 7.63574240e-06 3.41230084e-05 8.97797445e-04 7.18197378e-01 1.66947751e+03 -8.86000000e-05 5.74429165e-02 2.03706641e-01 1.97115358e-02 7.65659890e-06 3.42634593e-05 8.99608888e-04 7.18197378e-01 1.66947751e+03 -8.87000000e-05 5.74301776e-02 2.03677467e-01 1.97514718e-02 7.67757696e-06 3.44044872e-05 9.01423893e-04 7.18197378e-01 1.67169598e+03 -8.88000000e-05 5.74174133e-02 2.03648235e-01 1.97914870e-02 7.69867754e-06 3.45460949e-05 9.03242472e-04 7.18197378e-01 1.67169598e+03 -8.89000000e-05 5.74046236e-02 2.03618944e-01 1.98315817e-02 7.71990161e-06 3.46882853e-05 9.05064638e-04 7.18197378e-01 1.67169598e+03 -8.90000000e-05 5.73918084e-02 2.03589595e-01 1.98717563e-02 7.74125015e-06 3.48310612e-05 9.06890404e-04 7.18197378e-01 1.67169598e+03 -8.91000000e-05 5.73789676e-02 2.03560187e-01 1.99120109e-02 7.76272414e-06 3.49744255e-05 9.08719781e-04 7.18197378e-01 1.67169598e+03 -8.92000000e-05 5.73661011e-02 2.03530720e-01 1.99523459e-02 7.78432459e-06 3.51183810e-05 9.10552783e-04 7.18197378e-01 1.67169598e+03 -8.93000000e-05 5.73532089e-02 2.03501193e-01 1.99927616e-02 7.80605249e-06 3.52629306e-05 9.12389421e-04 7.18197378e-01 1.67394306e+03 -8.94000000e-05 5.73402908e-02 2.03471607e-01 2.00332582e-02 7.82790883e-06 3.54080773e-05 9.14229710e-04 7.18197378e-01 1.67394306e+03 -8.95000000e-05 5.73273468e-02 2.03441962e-01 2.00738360e-02 7.84989465e-06 3.55538240e-05 9.16073660e-04 7.18197378e-01 1.67394306e+03 -8.96000000e-05 5.73143767e-02 2.03412257e-01 2.01144953e-02 7.87201099e-06 3.57001736e-05 9.17921286e-04 7.18197378e-01 1.67394306e+03 -8.97000000e-05 5.73013805e-02 2.03382491e-01 2.01552364e-02 7.89425888e-06 3.58471292e-05 9.19772600e-04 7.18197378e-01 1.67394306e+03 -8.98000000e-05 5.72883580e-02 2.03352666e-01 2.01960596e-02 7.91663938e-06 3.59946937e-05 9.21627614e-04 7.18197378e-01 1.67394306e+03 -8.99000000e-05 5.72753093e-02 2.03322779e-01 2.02369651e-02 7.93915353e-06 3.61428700e-05 9.23486343e-04 7.18197378e-01 1.67394306e+03 -9.00000000e-05 5.72622341e-02 2.03292832e-01 2.02779533e-02 7.96180250e-06 3.62916614e-05 9.25348799e-04 7.18197378e-01 1.67621939e+03 -9.01000000e-05 5.72491324e-02 2.03262825e-01 2.03190245e-02 7.98458733e-06 3.64410707e-05 9.27214994e-04 7.18197378e-01 1.67621939e+03 -9.02000000e-05 5.72360041e-02 2.03232756e-01 2.03601789e-02 8.00750913e-06 3.65911010e-05 9.29084944e-04 7.18197378e-01 1.67621939e+03 -9.03000000e-05 5.72228492e-02 2.03202625e-01 2.04014168e-02 8.03056902e-06 3.67417555e-05 9.30958660e-04 7.18197378e-01 1.67621939e+03 -9.04000000e-05 5.72096674e-02 2.03172433e-01 2.04427386e-02 8.05376811e-06 3.68930373e-05 9.32836155e-04 7.18197378e-01 1.67621939e+03 -9.05000000e-05 5.71964587e-02 2.03142179e-01 2.04841445e-02 8.07710756e-06 3.70449494e-05 9.34717445e-04 7.18197378e-01 1.67621939e+03 -9.06000000e-05 5.71832231e-02 2.03111864e-01 2.05256349e-02 8.10058847e-06 3.71974950e-05 9.36602541e-04 7.18197378e-01 1.67792526e+03 -9.07000000e-05 5.71699604e-02 2.03081485e-01 2.05672100e-02 8.12421193e-06 3.73506773e-05 9.38491457e-04 7.18197378e-01 1.67792526e+03 -9.08000000e-05 5.71566705e-02 2.03051045e-01 2.06088701e-02 8.14797912e-06 3.75044995e-05 9.40384207e-04 7.18197378e-01 1.67792526e+03 -9.09000000e-05 5.71433534e-02 2.03020542e-01 2.06506155e-02 8.17189119e-06 3.76589648e-05 9.42280805e-04 7.18197378e-01 1.67792526e+03 -9.10000000e-05 5.71300088e-02 2.02989975e-01 2.06924467e-02 8.19594929e-06 3.78140763e-05 9.44181265e-04 7.18197378e-01 1.67792526e+03 -9.11000000e-05 5.71166368e-02 2.02959346e-01 2.07343637e-02 8.22015468e-06 3.79698373e-05 9.46085599e-04 7.18197378e-01 1.67918608e+03 -9.12000000e-05 5.71032372e-02 2.02928653e-01 2.07763671e-02 8.24450866e-06 3.81262512e-05 9.47993823e-04 7.18197378e-01 1.67918608e+03 -9.13000000e-05 5.70898100e-02 2.02897897e-01 2.08184570e-02 8.26901246e-06 3.82833211e-05 9.49905949e-04 7.18197378e-01 1.67918608e+03 -9.14000000e-05 5.70763550e-02 2.02867077e-01 2.08606338e-02 8.29366739e-06 3.84410505e-05 9.51821993e-04 7.18197378e-01 1.68045599e+03 -9.15000000e-05 5.70628721e-02 2.02836192e-01 2.09028978e-02 8.31847449e-06 3.85994425e-05 9.53741967e-04 7.18197378e-01 1.68045599e+03 -9.16000000e-05 5.70493613e-02 2.02805244e-01 2.09452493e-02 8.34343511e-06 3.87585007e-05 9.55665887e-04 7.18197378e-01 1.68045599e+03 -9.17000000e-05 5.70358224e-02 2.02774231e-01 2.09876886e-02 8.36855046e-06 3.89182283e-05 9.57593767e-04 7.18197378e-01 1.68045599e+03 -9.18000000e-05 5.70222553e-02 2.02743153e-01 2.10302161e-02 8.39382188e-06 3.90786287e-05 9.59525620e-04 7.18197378e-01 1.68173511e+03 -9.19000000e-05 5.70086599e-02 2.02712010e-01 2.10728321e-02 8.41925067e-06 3.92397054e-05 9.61461461e-04 7.18197378e-01 1.68173511e+03 -9.20000000e-05 5.69950361e-02 2.02680802e-01 2.11155369e-02 8.44483810e-06 3.94014617e-05 9.63401305e-04 7.18197378e-01 1.68173511e+03 -9.21000000e-05 5.69813839e-02 2.02649528e-01 2.11583308e-02 8.47058549e-06 3.95639013e-05 9.65345166e-04 7.18197378e-01 1.68302356e+03 -9.22000000e-05 5.69677031e-02 2.02618188e-01 2.12012141e-02 8.49649420e-06 3.97270274e-05 9.67293059e-04 7.18197378e-01 1.68302356e+03 -9.23000000e-05 5.69539936e-02 2.02586783e-01 2.12441872e-02 8.52256555e-06 3.98908437e-05 9.69244999e-04 7.18197378e-01 1.68302356e+03 -9.24000000e-05 5.69402552e-02 2.02555311e-01 2.12872504e-02 8.54880092e-06 4.00553537e-05 9.71200999e-04 7.18197378e-01 1.68302356e+03 -9.25000000e-05 5.69264880e-02 2.02523773e-01 2.13304040e-02 8.57520169e-06 4.02205609e-05 9.73161076e-04 7.18197378e-01 1.68432145e+03 -9.26000000e-05 5.69126918e-02 2.02492168e-01 2.13736484e-02 8.60176928e-06 4.03864688e-05 9.75125243e-04 7.18197378e-01 1.68432145e+03 -9.27000000e-05 5.68988664e-02 2.02460497e-01 2.14169839e-02 8.62850512e-06 4.05530812e-05 9.77093516e-04 7.18197378e-01 1.68432145e+03 -9.28000000e-05 5.68850119e-02 2.02428758e-01 2.14604108e-02 8.65541064e-06 4.07204016e-05 9.79065911e-04 7.18197378e-01 1.68562890e+03 -9.29000000e-05 5.68711280e-02 2.02396951e-01 2.15039295e-02 8.68248719e-06 4.08884336e-05 9.81042441e-04 7.18197378e-01 1.68562890e+03 -9.30000000e-05 5.68572146e-02 2.02365077e-01 2.15475403e-02 8.70973624e-06 4.10571809e-05 9.83023123e-04 7.18197378e-01 1.68562890e+03 -9.31000000e-05 5.68432717e-02 2.02333135e-01 2.15912435e-02 8.73715923e-06 4.12266473e-05 9.85007971e-04 7.18197378e-01 1.68562890e+03 -9.32000000e-05 5.68292991e-02 2.02301125e-01 2.16350395e-02 8.76475768e-06 4.13968364e-05 9.86997002e-04 7.18197378e-01 1.68694605e+03 -9.33000000e-05 5.68152968e-02 2.02269046e-01 2.16789287e-02 8.79253317e-06 4.15677519e-05 9.88990229e-04 7.18197378e-01 1.68694605e+03 -9.34000000e-05 5.68012646e-02 2.02236899e-01 2.17229113e-02 8.82048720e-06 4.17393977e-05 9.90987670e-04 7.18197378e-01 1.68694605e+03 -9.35000000e-05 5.67872024e-02 2.02204682e-01 2.17669878e-02 8.84862133e-06 4.19117776e-05 9.92989339e-04 7.18197378e-01 1.68827302e+03 -9.36000000e-05 5.67731100e-02 2.02172397e-01 2.18111584e-02 8.87693686e-06 4.20848952e-05 9.94995253e-04 7.18197378e-01 1.68827302e+03 -9.37000000e-05 5.67589875e-02 2.02140041e-01 2.18554236e-02 8.90543537e-06 4.22587546e-05 9.97005427e-04 7.18197378e-01 1.68827302e+03 -9.38000000e-05 5.67448346e-02 2.02107617e-01 2.18997837e-02 8.93411832e-06 4.24333594e-05 9.99019876e-04 7.18197378e-01 1.68827302e+03 -9.39000000e-05 5.67306513e-02 2.02075122e-01 2.19442390e-02 8.96298740e-06 4.26087138e-05 1.00103862e-03 7.18197378e-01 1.68917753e+03 -9.40000000e-05 5.67164374e-02 2.02042556e-01 2.19887898e-02 8.99204462e-06 4.27848214e-05 1.00306167e-03 7.18197378e-01 1.68917753e+03 -9.41000000e-05 5.67021928e-02 2.02009921e-01 2.20334367e-02 9.02129186e-06 4.29616864e-05 1.00508904e-03 7.18197378e-01 1.68979135e+03 -9.42000000e-05 5.66879175e-02 2.01977214e-01 2.20781798e-02 9.05073011e-06 4.31393127e-05 1.00712075e-03 7.18197378e-01 1.68979135e+03 -9.43000000e-05 5.66736112e-02 2.01944436e-01 2.21230196e-02 9.08036059e-06 4.33177042e-05 1.00915683e-03 7.18197378e-01 1.69024149e+03 -9.44000000e-05 5.66592739e-02 2.01911587e-01 2.21679565e-02 9.11018564e-06 4.34968650e-05 1.01119727e-03 7.18197378e-01 1.69069278e+03 -9.45000000e-05 5.66449055e-02 2.01878667e-01 2.22129908e-02 9.14020704e-06 4.36767992e-05 1.01324210e-03 7.18197378e-01 1.69114520e+03 -9.46000000e-05 5.66305058e-02 2.01845674e-01 2.22581228e-02 9.17042617e-06 4.38575107e-05 1.01529134e-03 7.18197378e-01 1.69159877e+03 -9.47000000e-05 5.66160747e-02 2.01812610e-01 2.23033530e-02 9.20084504e-06 4.40390038e-05 1.01734500e-03 7.18197378e-01 1.69159877e+03 -9.48000000e-05 5.66016121e-02 2.01779472e-01 2.23486818e-02 9.23146505e-06 4.42212826e-05 1.01940310e-03 7.18197378e-01 1.69205349e+03 -9.49000000e-05 5.65871179e-02 2.01746263e-01 2.23941094e-02 9.26228789e-06 4.44043511e-05 1.02146566e-03 7.18197378e-01 1.69250937e+03 -9.50000000e-05 5.65725920e-02 2.01712980e-01 2.24396363e-02 9.29331654e-06 4.45882137e-05 1.02353269e-03 7.18197378e-01 1.69282548e+03 -9.51000000e-05 5.65580342e-02 2.01679624e-01 2.24852628e-02 9.32455065e-06 4.47728745e-05 1.02560421e-03 7.18197378e-01 1.69327863e+03 -9.52000000e-05 5.65434444e-02 2.01646194e-01 2.25309894e-02 9.35599401e-06 4.49583378e-05 1.02768023e-03 7.18197378e-01 1.69373292e+03 -9.53000000e-05 5.65288225e-02 2.01612690e-01 2.25768163e-02 9.38764740e-06 4.51446077e-05 1.02976079e-03 7.18197378e-01 1.69396050e+03 -9.54000000e-05 5.65141683e-02 2.01579113e-01 2.26227441e-02 9.41951314e-06 4.53316888e-05 1.03184588e-03 7.18197378e-01 1.69441652e+03 -9.55000000e-05 5.64994818e-02 2.01545461e-01 2.26687731e-02 9.45159304e-06 4.55195852e-05 1.03393553e-03 7.18197378e-01 1.69477169e+03 -9.56000000e-05 5.64847629e-02 2.01511734e-01 2.27149036e-02 9.48388877e-06 4.57083013e-05 1.03602976e-03 7.18197378e-01 1.69512757e+03 -9.57000000e-05 5.64700113e-02 2.01477932e-01 2.27611361e-02 9.51640230e-06 4.58978416e-05 1.03812858e-03 7.18197378e-01 1.69548415e+03 -9.58000000e-05 5.64552270e-02 2.01444055e-01 2.28074710e-02 9.54913570e-06 4.60882105e-05 1.04023201e-03 7.18197378e-01 1.69619943e+03 -9.59000000e-05 5.64404098e-02 2.01410102e-01 2.28539086e-02 9.58209092e-06 4.62794123e-05 1.04234008e-03 7.18197378e-01 1.69655814e+03 -9.60000000e-05 5.64255596e-02 2.01376074e-01 2.29004493e-02 9.61526992e-06 4.64714516e-05 1.04445279e-03 7.18197378e-01 1.69724498e+03 -9.61000000e-05 5.64106763e-02 2.01341969e-01 2.29470937e-02 9.64867471e-06 4.66643329e-05 1.04657016e-03 7.18197378e-01 1.69724498e+03 -9.62000000e-05 5.63957598e-02 2.01307788e-01 2.29938419e-02 9.68230728e-06 4.68580608e-05 1.04869222e-03 7.18197378e-01 1.69793444e+03 -9.63000000e-05 5.63808099e-02 2.01273530e-01 2.30406945e-02 9.71616968e-06 4.70526397e-05 1.05081898e-03 7.18197378e-01 1.69793444e+03 -9.64000000e-05 5.63658265e-02 2.01239195e-01 2.30876519e-02 9.75026399e-06 4.72480744e-05 1.05295046e-03 7.18197378e-01 1.69862654e+03 -9.65000000e-05 5.63508094e-02 2.01204783e-01 2.31347145e-02 9.78459230e-06 4.74443695e-05 1.05508668e-03 7.18197378e-01 1.69932130e+03 -9.66000000e-05 5.63357586e-02 2.01170293e-01 2.31818826e-02 9.81915673e-06 4.76415296e-05 1.05722765e-03 7.18197378e-01 1.69932130e+03 -9.67000000e-05 5.63206739e-02 2.01135725e-01 2.32291567e-02 9.85395941e-06 4.78395594e-05 1.05937340e-03 7.18197378e-01 1.70038288e+03 -9.68000000e-05 5.63055551e-02 2.01101078e-01 2.32765372e-02 9.88900250e-06 4.80384637e-05 1.06152394e-03 7.18197378e-01 1.70038288e+03 -9.69000000e-05 5.62904022e-02 2.01066354e-01 2.33240246e-02 9.92428819e-06 4.82382473e-05 1.06367930e-03 7.18197378e-01 1.70038288e+03 -9.70000000e-05 5.62752150e-02 2.01031550e-01 2.33716192e-02 9.95981867e-06 4.84389149e-05 1.06583948e-03 7.18197378e-01 1.70145070e+03 -9.71000000e-05 5.62599933e-02 2.00996667e-01 2.34193215e-02 9.99559619e-06 4.86404713e-05 1.06800452e-03 7.18197378e-01 1.70145070e+03 -9.72000000e-05 5.62447371e-02 2.00961704e-01 2.34671318e-02 1.00316230e-05 4.88429215e-05 1.07017442e-03 7.18197378e-01 1.70252484e+03 -9.73000000e-05 5.62294461e-02 2.00926662e-01 2.35150507e-02 1.00679014e-05 4.90462704e-05 1.07234921e-03 7.18197378e-01 1.70252484e+03 -9.74000000e-05 5.62141203e-02 2.00891539e-01 2.35630785e-02 1.01044336e-05 4.92505229e-05 1.07452891e-03 7.18197378e-01 1.70252484e+03 -9.75000000e-05 5.61987595e-02 2.00856336e-01 2.36112157e-02 1.01412220e-05 4.94556839e-05 1.07671354e-03 7.18197378e-01 1.70360537e+03 -9.76000000e-05 5.61833636e-02 2.00821053e-01 2.36594628e-02 1.01782690e-05 4.96617585e-05 1.07890312e-03 7.18197378e-01 1.70360537e+03 -9.77000000e-05 5.61679324e-02 2.00785688e-01 2.37078200e-02 1.02155769e-05 4.98687517e-05 1.08109766e-03 7.18197378e-01 1.70360537e+03 -9.78000000e-05 5.61524658e-02 2.00750241e-01 2.37562880e-02 1.02531482e-05 5.00766686e-05 1.08329718e-03 7.18197378e-01 1.70469234e+03 -9.79000000e-05 5.61369636e-02 2.00714713e-01 2.38048671e-02 1.02909853e-05 5.02855143e-05 1.08550171e-03 7.18197378e-01 1.70469234e+03 -9.80000000e-05 5.61214258e-02 2.00679103e-01 2.38535578e-02 1.03290906e-05 5.04952939e-05 1.08771127e-03 7.18197378e-01 1.70670370e+03 -9.81000000e-05 5.61058521e-02 2.00643410e-01 2.39023604e-02 1.03674666e-05 5.07060127e-05 1.08992587e-03 7.18197378e-01 1.70670370e+03 -9.82000000e-05 5.60902424e-02 2.00607635e-01 2.39512756e-02 1.04061159e-05 5.09176759e-05 1.09214554e-03 7.18197378e-01 1.70670370e+03 -9.83000000e-05 5.60745966e-02 2.00571776e-01 2.40003037e-02 1.04450410e-05 5.11302887e-05 1.09437029e-03 7.18197378e-01 1.70670370e+03 -9.84000000e-05 5.60589145e-02 2.00535834e-01 2.40494451e-02 1.04842445e-05 5.13438564e-05 1.09660015e-03 7.18197378e-01 1.70670370e+03 -9.85000000e-05 5.60431960e-02 2.00499808e-01 2.40987004e-02 1.05237289e-05 5.15583843e-05 1.09883514e-03 7.18197378e-01 1.70873743e+03 -9.86000000e-05 5.60274409e-02 2.00463699e-01 2.41480700e-02 1.05634970e-05 5.17738779e-05 1.10107528e-03 7.18197378e-01 1.70873743e+03 -9.87000000e-05 5.60116492e-02 2.00427504e-01 2.41975543e-02 1.06035513e-05 5.19903426e-05 1.10332058e-03 7.18197378e-01 1.70873743e+03 -9.88000000e-05 5.59958205e-02 2.00391225e-01 2.42471538e-02 1.06438945e-05 5.22077837e-05 1.10557107e-03 7.18197378e-01 1.70873743e+03 -9.89000000e-05 5.59799548e-02 2.00354861e-01 2.42968691e-02 1.06845295e-05 5.24262068e-05 1.10782677e-03 7.18197378e-01 1.70873743e+03 -9.90000000e-05 5.59640520e-02 2.00318411e-01 2.43467004e-02 1.07254588e-05 5.26456175e-05 1.11008770e-03 7.18197378e-01 1.71079395e+03 -9.91000000e-05 5.59481118e-02 2.00281875e-01 2.43966484e-02 1.07666854e-05 5.28660212e-05 1.11235389e-03 7.18197378e-01 1.71079395e+03 -9.92000000e-05 5.59321342e-02 2.00245253e-01 2.44467135e-02 1.08082120e-05 5.30874236e-05 1.11462535e-03 7.18197378e-01 1.71079395e+03 -9.93000000e-05 5.59161190e-02 2.00208545e-01 2.44968962e-02 1.08500415e-05 5.33098304e-05 1.11690210e-03 7.18197378e-01 1.71079395e+03 -9.94000000e-05 5.59000659e-02 2.00171750e-01 2.45471969e-02 1.08921768e-05 5.35332471e-05 1.11918417e-03 7.18197378e-01 1.71079395e+03 -9.95000000e-05 5.58839749e-02 2.00134867e-01 2.45976162e-02 1.09346207e-05 5.37576797e-05 1.12147158e-03 7.18197378e-01 1.71287373e+03 -9.96000000e-05 5.58678459e-02 2.00097897e-01 2.46481545e-02 1.09773763e-05 5.39831337e-05 1.12376434e-03 7.18197378e-01 1.71287373e+03 -9.97000000e-05 5.58516786e-02 2.00060839e-01 2.46988123e-02 1.10204464e-05 5.42096151e-05 1.12606249e-03 7.18197378e-01 1.71287373e+03 -9.98000000e-05 5.58354729e-02 2.00023692e-01 2.47495901e-02 1.10638341e-05 5.44371298e-05 1.12836605e-03 7.18197378e-01 1.71287373e+03 -9.99000000e-05 5.58192286e-02 1.99986457e-01 2.48004884e-02 1.11075425e-05 5.46656835e-05 1.13067503e-03 7.18197378e-01 1.71497723e+03 -1.00000000e-04 5.58029456e-02 1.99949133e-01 2.48515077e-02 1.11515746e-05 5.48952823e-05 1.13298946e-03 7.18197378e-01 1.71497723e+03 -1.00100000e-04 5.57866237e-02 1.99911719e-01 2.49026485e-02 1.11959336e-05 5.51259321e-05 1.13530936e-03 7.18197378e-01 1.71497723e+03 -1.00200000e-04 5.57702627e-02 1.99874215e-01 2.49539113e-02 1.12406226e-05 5.53576390e-05 1.13763475e-03 7.18197378e-01 1.71497723e+03 -1.00300000e-04 5.57538626e-02 1.99836621e-01 2.50052966e-02 1.12856447e-05 5.55904090e-05 1.13996566e-03 7.18197378e-01 1.71497723e+03 -1.00400000e-04 5.57374230e-02 1.99798937e-01 2.50568049e-02 1.13310034e-05 5.58242483e-05 1.14230211e-03 7.18197378e-01 1.71710492e+03 -1.00500000e-04 5.57209439e-02 1.99761161e-01 2.51084367e-02 1.13767017e-05 5.60591631e-05 1.14464413e-03 7.18197378e-01 1.71710492e+03 -1.00600000e-04 5.57044252e-02 1.99723295e-01 2.51601926e-02 1.14227430e-05 5.62951594e-05 1.14699172e-03 7.18197378e-01 1.71710492e+03 -1.00700000e-04 5.56878665e-02 1.99685336e-01 2.52120731e-02 1.14691306e-05 5.65322437e-05 1.14934493e-03 7.18197378e-01 1.71710492e+03 -1.00800000e-04 5.56712678e-02 1.99647286e-01 2.52640786e-02 1.15158680e-05 5.67704222e-05 1.15170377e-03 7.18197378e-01 1.71710492e+03 -1.00900000e-04 5.56546289e-02 1.99609143e-01 2.53162097e-02 1.15629584e-05 5.70097012e-05 1.15406826e-03 7.18197378e-01 1.71925729e+03 -1.01000000e-04 5.56379496e-02 1.99570907e-01 2.53684670e-02 1.16104055e-05 5.72500872e-05 1.15643843e-03 7.18197378e-01 1.71925729e+03 -1.01100000e-04 5.56212298e-02 1.99532577e-01 2.54208509e-02 1.16582127e-05 5.74915865e-05 1.15881431e-03 7.18197378e-01 1.71925729e+03 -1.01200000e-04 5.56044692e-02 1.99494154e-01 2.54733620e-02 1.17063835e-05 5.77342058e-05 1.16119591e-03 7.18197378e-01 1.71925729e+03 -1.01300000e-04 5.55876678e-02 1.99455637e-01 2.55260008e-02 1.17549216e-05 5.79779514e-05 1.16358327e-03 7.18197378e-01 1.71925729e+03 -1.01400000e-04 5.55708253e-02 1.99417026e-01 2.55787679e-02 1.18038305e-05 5.82228301e-05 1.16597639e-03 7.18197378e-01 1.72143485e+03 -1.01500000e-04 5.55539415e-02 1.99378319e-01 2.56316639e-02 1.18531139e-05 5.84688484e-05 1.16837532e-03 7.18197378e-01 1.72143485e+03 -1.01600000e-04 5.55370163e-02 1.99339518e-01 2.56846891e-02 1.19027756e-05 5.87160131e-05 1.17078008e-03 7.18197378e-01 1.72143485e+03 -1.01700000e-04 5.55200496e-02 1.99300620e-01 2.57378443e-02 1.19528192e-05 5.89643308e-05 1.17319068e-03 7.18197378e-01 1.72143485e+03 -1.01800000e-04 5.55030410e-02 1.99261627e-01 2.57911300e-02 1.20032485e-05 5.92138084e-05 1.17560715e-03 7.18197378e-01 1.72143485e+03 -1.01900000e-04 5.54859905e-02 1.99222537e-01 2.58445467e-02 1.20540675e-05 5.94644527e-05 1.17802953e-03 7.18197378e-01 1.72363811e+03 -1.02000000e-04 5.54688979e-02 1.99183350e-01 2.58980949e-02 1.21052801e-05 5.97162706e-05 1.18045783e-03 7.18197378e-01 1.72363811e+03 -1.02100000e-04 5.54517629e-02 1.99144066e-01 2.59517753e-02 1.21568901e-05 5.99692691e-05 1.18289208e-03 7.18197378e-01 1.72363811e+03 -1.02200000e-04 5.54345855e-02 1.99104684e-01 2.60055883e-02 1.22089015e-05 6.02234550e-05 1.18533230e-03 7.18197378e-01 1.72363811e+03 -1.02300000e-04 5.54173654e-02 1.99065203e-01 2.60595347e-02 1.22613185e-05 6.04788356e-05 1.18777852e-03 7.18197378e-01 1.72363811e+03 -1.02400000e-04 5.54001024e-02 1.99025625e-01 2.61136149e-02 1.23141450e-05 6.07354179e-05 1.19023077e-03 7.18197378e-01 1.72586761e+03 -1.02500000e-04 5.53827963e-02 1.98985947e-01 2.61678295e-02 1.23673852e-05 6.09932090e-05 1.19268907e-03 7.18197378e-01 1.72586761e+03 -1.02600000e-04 5.53654471e-02 1.98946169e-01 2.62221791e-02 1.24210432e-05 6.12522161e-05 1.19515344e-03 7.18197378e-01 1.72586761e+03 -1.02700000e-04 5.53480544e-02 1.98906292e-01 2.62766643e-02 1.24751232e-05 6.15124466e-05 1.19762392e-03 7.18197378e-01 1.72586761e+03 -1.02800000e-04 5.53306180e-02 1.98866314e-01 2.63312857e-02 1.25296295e-05 6.17739077e-05 1.20010054e-03 7.18197378e-01 1.72812390e+03 -1.02900000e-04 5.53131379e-02 1.98826236e-01 2.63860438e-02 1.25845667e-05 6.20366069e-05 1.20258330e-03 7.18197378e-01 1.72812390e+03 -1.03000000e-04 5.52956138e-02 1.98786056e-01 2.64409393e-02 1.26399389e-05 6.23005515e-05 1.20507226e-03 7.18197378e-01 1.72812390e+03 -1.03100000e-04 5.52780455e-02 1.98745775e-01 2.64959727e-02 1.26957508e-05 6.25657491e-05 1.20756742e-03 7.18197378e-01 1.72812390e+03 -1.03200000e-04 5.52604328e-02 1.98705392e-01 2.65511447e-02 1.27520067e-05 6.28322072e-05 1.21006882e-03 7.18197378e-01 1.72812390e+03 -1.03300000e-04 5.52427756e-02 1.98664906e-01 2.66064559e-02 1.28087113e-05 6.30999334e-05 1.21257648e-03 7.18197378e-01 1.72977462e+03 -1.03400000e-04 5.52250735e-02 1.98624317e-01 2.66619068e-02 1.28658690e-05 6.33689354e-05 1.21509044e-03 7.18197378e-01 1.72977462e+03 -1.03500000e-04 5.52073265e-02 1.98583624e-01 2.67174981e-02 1.29234844e-05 6.36392209e-05 1.21761071e-03 7.18197378e-01 1.72977462e+03 -1.03600000e-04 5.51895344e-02 1.98542828e-01 2.67732304e-02 1.29815621e-05 6.39107977e-05 1.22013733e-03 7.18197378e-01 1.72977462e+03 -1.03700000e-04 5.51716968e-02 1.98501927e-01 2.68291042e-02 1.30401072e-05 6.41836736e-05 1.22267033e-03 7.18197378e-01 1.73095673e+03 -1.03800000e-04 5.51538137e-02 1.98460921e-01 2.68851204e-02 1.30991245e-05 6.44578566e-05 1.22520973e-03 7.18197378e-01 1.73095673e+03 -1.03900000e-04 5.51358848e-02 1.98419810e-01 2.69412794e-02 1.31586191e-05 6.47333547e-05 1.22775556e-03 7.18197378e-01 1.73214628e+03 -1.04000000e-04 5.51179100e-02 1.98378594e-01 2.69975818e-02 1.32185957e-05 6.50101757e-05 1.23030785e-03 7.18197378e-01 1.73214628e+03 -1.04100000e-04 5.50998889e-02 1.98337271e-01 2.70540285e-02 1.32790592e-05 6.52883280e-05 1.23286663e-03 7.18197378e-01 1.73214628e+03 -1.04200000e-04 5.50818215e-02 1.98295841e-01 2.71106198e-02 1.33400149e-05 6.55678195e-05 1.23543192e-03 7.18197378e-01 1.73334335e+03 -1.04300000e-04 5.50637075e-02 1.98254304e-01 2.71673566e-02 1.34014677e-05 6.58486585e-05 1.23800376e-03 7.18197378e-01 1.73334335e+03 -1.04400000e-04 5.50455466e-02 1.98212660e-01 2.72242395e-02 1.34634230e-05 6.61308534e-05 1.24058218e-03 7.18197378e-01 1.73454802e+03 -1.04500000e-04 5.50273388e-02 1.98170907e-01 2.72812690e-02 1.35258860e-05 6.64144125e-05 1.24316720e-03 7.18197378e-01 1.73454802e+03 -1.04600000e-04 5.50090837e-02 1.98129045e-01 2.73384460e-02 1.35888619e-05 6.66993441e-05 1.24575885e-03 7.18197378e-01 1.73454802e+03 -1.04700000e-04 5.49907812e-02 1.98087075e-01 2.73957709e-02 1.36523563e-05 6.69856569e-05 1.24835717e-03 7.18197378e-01 1.73576037e+03 -1.04800000e-04 5.49724311e-02 1.98044995e-01 2.74532446e-02 1.37163746e-05 6.72733592e-05 1.25096217e-03 7.18197378e-01 1.73576037e+03 -1.04900000e-04 5.49540330e-02 1.98002804e-01 2.75108675e-02 1.37809225e-05 6.75624598e-05 1.25357391e-03 7.18197378e-01 1.73725749e+03 -1.05000000e-04 5.49355869e-02 1.97960503e-01 2.75686406e-02 1.38460054e-05 6.78529674e-05 1.25619239e-03 7.18197378e-01 1.73725749e+03 -1.05100000e-04 5.49170925e-02 1.97918091e-01 2.76265643e-02 1.39116291e-05 6.81448906e-05 1.25881766e-03 7.18197378e-01 1.73725749e+03 -1.05200000e-04 5.48985496e-02 1.97875567e-01 2.76846394e-02 1.39777992e-05 6.84382384e-05 1.26144974e-03 7.18197378e-01 1.73876645e+03 -1.05300000e-04 5.48799579e-02 1.97832931e-01 2.77428665e-02 1.40445217e-05 6.87330196e-05 1.26408866e-03 7.18197378e-01 1.73876645e+03 -1.05400000e-04 5.48613173e-02 1.97790183e-01 2.78012464e-02 1.41118023e-05 6.90292431e-05 1.26673447e-03 7.18197378e-01 1.73876645e+03 -1.05500000e-04 5.48426275e-02 1.97747321e-01 2.78597798e-02 1.41796471e-05 6.93269182e-05 1.26938718e-03 7.18197378e-01 1.74028743e+03 -1.05600000e-04 5.48238882e-02 1.97704346e-01 2.79184673e-02 1.42480622e-05 6.96260537e-05 1.27204682e-03 7.18197378e-01 1.74028743e+03 -1.05700000e-04 5.48050993e-02 1.97661256e-01 2.79773097e-02 1.43170537e-05 6.99266590e-05 1.27471344e-03 7.18197378e-01 1.74028743e+03 -1.05800000e-04 5.47862606e-02 1.97618052e-01 2.80363076e-02 1.43866277e-05 7.02287434e-05 1.27738706e-03 7.18197378e-01 1.74182057e+03 -1.05900000e-04 5.47673717e-02 1.97574732e-01 2.80954617e-02 1.44567906e-05 7.05323160e-05 1.28006771e-03 7.18197378e-01 1.74182057e+03 -1.06000000e-04 5.47484325e-02 1.97531296e-01 2.81547729e-02 1.45275487e-05 7.08373864e-05 1.28275543e-03 7.18197378e-01 1.74182057e+03 -1.06100000e-04 5.47294428e-02 1.97487745e-01 2.82142417e-02 1.45989084e-05 7.11439640e-05 1.28545024e-03 7.18197378e-01 1.74336606e+03 -1.06200000e-04 5.47104022e-02 1.97444076e-01 2.82738690e-02 1.46708763e-05 7.14520585e-05 1.28815219e-03 7.18197378e-01 1.74336606e+03 -1.06300000e-04 5.46913106e-02 1.97400290e-01 2.83336554e-02 1.47434590e-05 7.17616794e-05 1.29086130e-03 7.18197378e-01 1.74336606e+03 -1.06400000e-04 5.46721678e-02 1.97356385e-01 2.83936018e-02 1.48166633e-05 7.20728365e-05 1.29357761e-03 7.18197378e-01 1.74492407e+03 -1.06500000e-04 5.46529734e-02 1.97312363e-01 2.84537087e-02 1.48904958e-05 7.23855395e-05 1.29630114e-03 7.18197378e-01 1.74492407e+03 -1.06600000e-04 5.46337273e-02 1.97268221e-01 2.85139770e-02 1.49649634e-05 7.26997984e-05 1.29903194e-03 7.18197378e-01 1.74492407e+03 -1.06700000e-04 5.46144292e-02 1.97223960e-01 2.85744074e-02 1.50400730e-05 7.30156231e-05 1.30177004e-03 7.18197378e-01 1.74649478e+03 -1.06800000e-04 5.45950789e-02 1.97179578e-01 2.86350007e-02 1.51158319e-05 7.33330237e-05 1.30451546e-03 7.18197378e-01 1.74649478e+03 -1.06900000e-04 5.45756761e-02 1.97135076e-01 2.86957576e-02 1.51922473e-05 7.36520103e-05 1.30726826e-03 7.18197378e-01 1.74649478e+03 -1.07000000e-04 5.45562205e-02 1.97090452e-01 2.87566789e-02 1.52693265e-05 7.39725931e-05 1.31002845e-03 7.18197378e-01 1.74763122e+03 -1.07100000e-04 5.45367120e-02 1.97045707e-01 2.88177654e-02 1.53470764e-05 7.42947824e-05 1.31279607e-03 7.18197378e-01 1.74763122e+03 -1.07200000e-04 5.45171502e-02 1.97000839e-01 2.88790178e-02 1.54255042e-05 7.46185885e-05 1.31557116e-03 7.18197378e-01 1.74844231e+03 -1.07300000e-04 5.44975350e-02 1.96955848e-01 2.89404369e-02 1.55046178e-05 7.49440220e-05 1.31835376e-03 7.18197378e-01 1.74844231e+03 -1.07400000e-04 5.44778661e-02 1.96910733e-01 2.90020235e-02 1.55844253e-05 7.52710934e-05 1.32114389e-03 7.18197378e-01 1.74925682e+03 -1.07500000e-04 5.44581431e-02 1.96865494e-01 2.90637784e-02 1.56649341e-05 7.55998134e-05 1.32394160e-03 7.18197378e-01 1.74925682e+03 -1.07600000e-04 5.44383659e-02 1.96820131e-01 2.91257024e-02 1.57461520e-05 7.59301926e-05 1.32674692e-03 7.18197378e-01 1.75007476e+03 -1.07700000e-04 5.44185343e-02 1.96774641e-01 2.91877962e-02 1.58280866e-05 7.62622420e-05 1.32955989e-03 7.18197378e-01 1.75089616e+03 -1.07800000e-04 5.43986478e-02 1.96729026e-01 2.92500607e-02 1.59107464e-05 7.65959723e-05 1.33238053e-03 7.18197378e-01 1.75089616e+03 -1.07900000e-04 5.43787063e-02 1.96683285e-01 2.93124967e-02 1.59941392e-05 7.69313946e-05 1.33520890e-03 7.18197378e-01 1.75172104e+03 -1.08000000e-04 5.43587096e-02 1.96637416e-01 2.93751050e-02 1.60782733e-05 7.72685201e-05 1.33804502e-03 7.18197378e-01 1.75254944e+03 -1.08100000e-04 5.43386573e-02 1.96591419e-01 2.94378864e-02 1.61631575e-05 7.76073598e-05 1.34088893e-03 7.18197378e-01 1.75254944e+03 -1.08200000e-04 5.43185492e-02 1.96545294e-01 2.95008417e-02 1.62488004e-05 7.79479251e-05 1.34374067e-03 7.18197378e-01 1.75314903e+03 -1.08300000e-04 5.42983849e-02 1.96499040e-01 2.95639719e-02 1.63352092e-05 7.82902274e-05 1.34660028e-03 7.18197378e-01 1.75358282e+03 -1.08400000e-04 5.42781644e-02 1.96452656e-01 2.96272776e-02 1.64223942e-05 7.86342780e-05 1.34946779e-03 7.18197378e-01 1.75445329e+03 -1.08500000e-04 5.42578872e-02 1.96406141e-01 2.96907598e-02 1.65103636e-05 7.89800887e-05 1.35234324e-03 7.18197378e-01 1.75488999e+03 -1.08600000e-04 5.42375530e-02 1.96359496e-01 2.97544193e-02 1.65991262e-05 7.93276710e-05 1.35522667e-03 7.18197378e-01 1.75532767e+03 -1.08700000e-04 5.42171618e-02 1.96312720e-01 2.98182569e-02 1.66886914e-05 7.96770368e-05 1.35811813e-03 7.18197378e-01 1.75576632e+03 -1.08800000e-04 5.41967130e-02 1.96265811e-01 2.98822736e-02 1.67790681e-05 8.00281979e-05 1.36101764e-03 7.18197378e-01 1.75664660e+03 -1.08900000e-04 5.41762065e-02 1.96218769e-01 2.99464701e-02 1.68702658e-05 8.03811662e-05 1.36392524e-03 7.18197378e-01 1.75708823e+03 -1.09000000e-04 5.41556420e-02 1.96171594e-01 3.00108474e-02 1.69622938e-05 8.07359539e-05 1.36684098e-03 7.18197378e-01 1.75792732e+03 -1.09100000e-04 5.41350191e-02 1.96124284e-01 3.00754063e-02 1.70551618e-05 8.10925731e-05 1.36976490e-03 7.18197378e-01 1.75792732e+03 -1.09200000e-04 5.41143377e-02 1.96076840e-01 3.01401477e-02 1.71488794e-05 8.14510361e-05 1.37269703e-03 7.18197378e-01 1.75877002e+03 -1.09300000e-04 5.40935974e-02 1.96029260e-01 3.02050725e-02 1.72434566e-05 8.18113553e-05 1.37563741e-03 7.18197378e-01 1.75961635e+03 -1.09400000e-04 5.40727979e-02 1.95981544e-01 3.02701816e-02 1.73389032e-05 8.21735432e-05 1.37858609e-03 7.18197378e-01 1.75961635e+03 -1.09500000e-04 5.40519390e-02 1.95933691e-01 3.03354759e-02 1.74352294e-05 8.25376124e-05 1.38154310e-03 7.18197378e-01 1.76046633e+03 -1.09600000e-04 5.40310203e-02 1.95885701e-01 3.04009562e-02 1.75324454e-05 8.29035755e-05 1.38450850e-03 7.18197378e-01 1.76132000e+03 -1.09700000e-04 5.40100415e-02 1.95837573e-01 3.04666236e-02 1.76305617e-05 8.32714455e-05 1.38748230e-03 7.18197378e-01 1.76132000e+03 -1.09800000e-04 5.39890024e-02 1.95789305e-01 3.05324789e-02 1.77295886e-05 8.36412352e-05 1.39046457e-03 7.18197378e-01 1.76217738e+03 -1.09900000e-04 5.39679027e-02 1.95740899e-01 3.05985231e-02 1.78295370e-05 8.40129578e-05 1.39345534e-03 7.18197378e-01 1.76369415e+03 -1.10000000e-04 5.39467420e-02 1.95692351e-01 3.06647570e-02 1.79304176e-05 8.43866263e-05 1.39645465e-03 7.18197378e-01 1.76369415e+03 -1.10100000e-04 5.39255200e-02 1.95643663e-01 3.07311817e-02 1.80322414e-05 8.47622540e-05 1.39946254e-03 7.18197378e-01 1.76369415e+03 -1.10200000e-04 5.39042364e-02 1.95594834e-01 3.07977980e-02 1.81350196e-05 8.51398543e-05 1.40247906e-03 7.18197378e-01 1.76522264e+03 -1.10300000e-04 5.38828910e-02 1.95545862e-01 3.08646069e-02 1.82387635e-05 8.55194408e-05 1.40550425e-03 7.18197378e-01 1.76522264e+03 -1.10400000e-04 5.38614834e-02 1.95496747e-01 3.09316094e-02 1.83434844e-05 8.59010270e-05 1.40853816e-03 7.18197378e-01 1.76522264e+03 -1.10500000e-04 5.38400133e-02 1.95447488e-01 3.09988064e-02 1.84491941e-05 8.62846268e-05 1.41158082e-03 7.18197378e-01 1.76676301e+03 -1.10600000e-04 5.38184804e-02 1.95398084e-01 3.10661990e-02 1.85559042e-05 8.66702539e-05 1.41463228e-03 7.18197378e-01 1.76676301e+03 -1.10700000e-04 5.37968844e-02 1.95348536e-01 3.11337880e-02 1.86636267e-05 8.70579223e-05 1.41769259e-03 7.18197378e-01 1.76831542e+03 -1.10800000e-04 5.37752249e-02 1.95298841e-01 3.12015745e-02 1.87723737e-05 8.74476463e-05 1.42076178e-03 7.18197378e-01 1.76831542e+03 -1.10900000e-04 5.37535017e-02 1.95249000e-01 3.12695595e-02 1.88821575e-05 8.78394399e-05 1.42383991e-03 7.18197378e-01 1.76831542e+03 -1.11000000e-04 5.37317143e-02 1.95199011e-01 3.13377439e-02 1.89929906e-05 8.82333177e-05 1.42692701e-03 7.18197378e-01 1.76988003e+03 -1.11100000e-04 5.37098625e-02 1.95148874e-01 3.14061287e-02 1.91048855e-05 8.86292940e-05 1.43002314e-03 7.18197378e-01 1.76988003e+03 -1.11200000e-04 5.36879460e-02 1.95098588e-01 3.14747151e-02 1.92178551e-05 8.90273835e-05 1.43312834e-03 7.18197378e-01 1.76988003e+03 -1.11300000e-04 5.36659644e-02 1.95048152e-01 3.15435039e-02 1.93319123e-05 8.94276010e-05 1.43624266e-03 7.18197378e-01 1.77145700e+03 -1.11400000e-04 5.36439174e-02 1.94997565e-01 3.16124962e-02 1.94470704e-05 8.98299613e-05 1.43936613e-03 7.18197378e-01 1.77145700e+03 -1.11500000e-04 5.36218046e-02 1.94946828e-01 3.16816931e-02 1.95633427e-05 9.02344795e-05 1.44249882e-03 7.18197378e-01 1.77304652e+03 -1.11600000e-04 5.35996257e-02 1.94895938e-01 3.17510956e-02 1.96807428e-05 9.06411708e-05 1.44564076e-03 7.18197378e-01 1.77304652e+03 -1.11700000e-04 5.35773804e-02 1.94844896e-01 3.18207047e-02 1.97992844e-05 9.10500503e-05 1.44879200e-03 7.18197378e-01 1.77304652e+03 -1.11800000e-04 5.35550683e-02 1.94793700e-01 3.18905215e-02 1.99189814e-05 9.14611336e-05 1.45195259e-03 7.18197378e-01 1.77464875e+03 -1.11900000e-04 5.35326891e-02 1.94742349e-01 3.19605471e-02 2.00398481e-05 9.18744363e-05 1.45512258e-03 7.18197378e-01 1.77464875e+03 -1.12000000e-04 5.35102425e-02 1.94690843e-01 3.20307825e-02 2.01618988e-05 9.22899739e-05 1.45830201e-03 7.18197378e-01 1.77464875e+03 -1.12100000e-04 5.34877280e-02 1.94639182e-01 3.21012288e-02 2.02851480e-05 9.27077625e-05 1.46149094e-03 7.18197378e-01 1.77626386e+03 -1.12200000e-04 5.34651453e-02 1.94587363e-01 3.21718871e-02 2.04096106e-05 9.31278180e-05 1.46468942e-03 7.18197378e-01 1.77626386e+03 -1.12300000e-04 5.34424941e-02 1.94535387e-01 3.22427584e-02 2.05353015e-05 9.35501565e-05 1.46789749e-03 7.18197378e-01 1.77789204e+03 -1.12400000e-04 5.34197741e-02 1.94483252e-01 3.23138440e-02 2.06622359e-05 9.39747944e-05 1.47111520e-03 7.18197378e-01 1.77789204e+03 -1.12500000e-04 5.33969847e-02 1.94430958e-01 3.23851448e-02 2.07904293e-05 9.44017480e-05 1.47434260e-03 7.18197378e-01 1.77789204e+03 -1.12600000e-04 5.33741258e-02 1.94378504e-01 3.24566621e-02 2.09198974e-05 9.48310341e-05 1.47757975e-03 7.18197378e-01 1.77953347e+03 -1.12700000e-04 5.33511969e-02 1.94325888e-01 3.25283968e-02 2.10506561e-05 9.52626692e-05 1.48082669e-03 7.18197378e-01 1.77953347e+03 -1.12800000e-04 5.33281976e-02 1.94273111e-01 3.26003503e-02 2.11827214e-05 9.56966704e-05 1.48408348e-03 7.18197378e-01 1.77953347e+03 -1.12900000e-04 5.33051276e-02 1.94220172e-01 3.26725235e-02 2.13161097e-05 9.61330547e-05 1.48735016e-03 7.18197378e-01 1.78118834e+03 -1.13000000e-04 5.32819866e-02 1.94167068e-01 3.27449177e-02 2.14508377e-05 9.65718393e-05 1.49062679e-03 7.18197378e-01 1.78118834e+03 -1.13100000e-04 5.32587740e-02 1.94113801e-01 3.28175341e-02 2.15869222e-05 9.70130416e-05 1.49391342e-03 7.18197378e-01 1.78285683e+03 -1.13200000e-04 5.32354896e-02 1.94060368e-01 3.28903737e-02 2.17243804e-05 9.74566792e-05 1.49721011e-03 7.18197378e-01 1.78285683e+03 -1.13300000e-04 5.32121330e-02 1.94006769e-01 3.29634377e-02 2.18632296e-05 9.79027696e-05 1.50051690e-03 7.18197378e-01 1.78285683e+03 -1.13400000e-04 5.31887037e-02 1.93953002e-01 3.30367274e-02 2.20034873e-05 9.83513309e-05 1.50383386e-03 7.18197378e-01 1.78453915e+03 -1.13500000e-04 5.31652015e-02 1.93899068e-01 3.31102440e-02 2.21451716e-05 9.88023810e-05 1.50716103e-03 7.18197378e-01 1.78453915e+03 -1.13600000e-04 5.31416258e-02 1.93844965e-01 3.31839885e-02 2.22883005e-05 9.92559381e-05 1.51049846e-03 7.18197378e-01 1.78453915e+03 -1.13700000e-04 5.31179763e-02 1.93790692e-01 3.32579623e-02 2.24328925e-05 9.97120206e-05 1.51384622e-03 7.18197378e-01 1.78623549e+03 -1.13800000e-04 5.30942527e-02 1.93736249e-01 3.33321666e-02 2.25789663e-05 1.00170647e-04 1.51720436e-03 7.18197378e-01 1.78623549e+03 -1.13900000e-04 5.30704544e-02 1.93681634e-01 3.34066025e-02 2.27265408e-05 1.00631836e-04 1.52057293e-03 7.18197378e-01 1.78794604e+03 -1.14000000e-04 5.30465812e-02 1.93626846e-01 3.34812713e-02 2.28756355e-05 1.01095607e-04 1.52395199e-03 7.18197378e-01 1.78794604e+03 -1.14100000e-04 5.30226325e-02 1.93571885e-01 3.35561744e-02 2.30262698e-05 1.01561979e-04 1.52734160e-03 7.18197378e-01 1.78794604e+03 -1.14200000e-04 5.29986080e-02 1.93516750e-01 3.36313128e-02 2.31784635e-05 1.02030970e-04 1.53074181e-03 7.18197378e-01 1.78967103e+03 -1.14300000e-04 5.29745073e-02 1.93461439e-01 3.37066879e-02 2.33322370e-05 1.02502601e-04 1.53415268e-03 7.18197378e-01 1.78967103e+03 -1.14400000e-04 5.29503300e-02 1.93405952e-01 3.37823010e-02 2.34876106e-05 1.02976891e-04 1.53757426e-03 7.18197378e-01 1.78967103e+03 -1.14500000e-04 5.29260756e-02 1.93350288e-01 3.38581533e-02 2.36446051e-05 1.03453859e-04 1.54100662e-03 7.18197378e-01 1.79141065e+03 -1.14600000e-04 5.29017437e-02 1.93294446e-01 3.39342462e-02 2.38032417e-05 1.03933527e-04 1.54444982e-03 7.18197378e-01 1.79141065e+03 -1.14700000e-04 5.28773339e-02 1.93238424e-01 3.40105808e-02 2.39635417e-05 1.04415913e-04 1.54790391e-03 7.18197378e-01 1.79141065e+03 -1.14800000e-04 5.28528458e-02 1.93182222e-01 3.40871587e-02 2.41255271e-05 1.04901039e-04 1.55136895e-03 7.18197378e-01 1.79316512e+03 -1.14900000e-04 5.28282789e-02 1.93125839e-01 3.41639809e-02 2.42892198e-05 1.05388925e-04 1.55484500e-03 7.18197378e-01 1.79316512e+03 -1.15000000e-04 5.28036328e-02 1.93069274e-01 3.42410490e-02 2.44546422e-05 1.05879592e-04 1.55833212e-03 7.18197378e-01 1.79493466e+03 -1.15100000e-04 5.27789070e-02 1.93012526e-01 3.43183642e-02 2.46218173e-05 1.06373060e-04 1.56183038e-03 7.18197378e-01 1.79493466e+03 -1.15200000e-04 5.27541012e-02 1.92955593e-01 3.43959279e-02 2.47907682e-05 1.06869352e-04 1.56533982e-03 7.18197378e-01 1.79493466e+03 -1.15300000e-04 5.27292148e-02 1.92898475e-01 3.44737415e-02 2.49615183e-05 1.07368488e-04 1.56886053e-03 7.18197378e-01 1.79671950e+03 -1.15400000e-04 5.27042475e-02 1.92841171e-01 3.45518062e-02 2.51340916e-05 1.07870490e-04 1.57239255e-03 7.18197378e-01 1.79671950e+03 -1.15500000e-04 5.26791987e-02 1.92783680e-01 3.46301236e-02 2.53085121e-05 1.08375380e-04 1.57593596e-03 7.18197378e-01 1.79671950e+03 -1.15600000e-04 5.26540680e-02 1.92726000e-01 3.47086949e-02 2.54848047e-05 1.08883180e-04 1.57949080e-03 7.18197378e-01 1.79851986e+03 -1.15700000e-04 5.26288550e-02 1.92668131e-01 3.47875217e-02 2.56629944e-05 1.09393911e-04 1.58305715e-03 7.18197378e-01 1.79851986e+03 -1.15800000e-04 5.26035591e-02 1.92610072e-01 3.48666052e-02 2.58431065e-05 1.09907598e-04 1.58663508e-03 7.18197378e-01 1.80033598e+03 -1.15900000e-04 5.25781800e-02 1.92551821e-01 3.49459470e-02 2.60251669e-05 1.10424262e-04 1.59022464e-03 7.18197378e-01 1.80033598e+03 -1.16000000e-04 5.25527171e-02 1.92493378e-01 3.50255485e-02 2.62092018e-05 1.10943925e-04 1.59382590e-03 7.18197378e-01 1.80033598e+03 -1.16100000e-04 5.25271700e-02 1.92434740e-01 3.51054110e-02 2.63952378e-05 1.11466613e-04 1.59743892e-03 7.18197378e-01 1.80216809e+03 -1.16200000e-04 5.25015382e-02 1.92375908e-01 3.51855361e-02 2.65833020e-05 1.11992347e-04 1.60106378e-03 7.18197378e-01 1.80216809e+03 -1.16300000e-04 5.24758212e-02 1.92316880e-01 3.52659253e-02 2.67734218e-05 1.12521151e-04 1.60470054e-03 7.18197378e-01 1.80216809e+03 -1.16400000e-04 5.24500186e-02 1.92257656e-01 3.53465800e-02 2.69656253e-05 1.13053049e-04 1.60834926e-03 7.18197378e-01 1.80401643e+03 -1.16500000e-04 5.24241298e-02 1.92198233e-01 3.54275017e-02 2.71599408e-05 1.13588066e-04 1.61201002e-03 7.18197378e-01 1.80401643e+03 -1.16600000e-04 5.23981543e-02 1.92138610e-01 3.55086919e-02 2.73563971e-05 1.14126225e-04 1.61568287e-03 7.18197378e-01 1.80588126e+03 -1.16700000e-04 5.23720917e-02 1.92078788e-01 3.55901521e-02 2.75550236e-05 1.14667552e-04 1.61936790e-03 7.18197378e-01 1.80588126e+03 -1.16800000e-04 5.23459414e-02 1.92018764e-01 3.56718839e-02 2.77558500e-05 1.15212070e-04 1.62306517e-03 7.18197378e-01 1.80588126e+03 -1.16900000e-04 5.23197030e-02 1.91958537e-01 3.57538888e-02 2.79589065e-05 1.15759805e-04 1.62677475e-03 7.18197378e-01 1.80776282e+03 -1.17000000e-04 5.22933759e-02 1.91898106e-01 3.58361683e-02 2.81642240e-05 1.16310783e-04 1.63049670e-03 7.18197378e-01 1.80776282e+03 -1.17100000e-04 5.22669597e-02 1.91837471e-01 3.59187240e-02 2.83718336e-05 1.16865028e-04 1.63423111e-03 7.18197378e-01 1.80776282e+03 -1.17200000e-04 5.22404537e-02 1.91776629e-01 3.60015575e-02 2.85817672e-05 1.17422567e-04 1.63797804e-03 7.18197378e-01 1.80966137e+03 -1.17300000e-04 5.22138575e-02 1.91715579e-01 3.60846703e-02 2.87940570e-05 1.17983426e-04 1.64173756e-03 7.18197378e-01 1.80966137e+03 -1.17400000e-04 5.21871706e-02 1.91654321e-01 3.61680641e-02 2.90087357e-05 1.18547631e-04 1.64550975e-03 7.18197378e-01 1.81157719e+03 -1.17500000e-04 5.21603924e-02 1.91592854e-01 3.62517405e-02 2.92258368e-05 1.19115209e-04 1.64929468e-03 7.18197378e-01 1.81157719e+03 -1.17600000e-04 5.21335224e-02 1.91531175e-01 3.63357010e-02 2.94453942e-05 1.19686186e-04 1.65309243e-03 7.18197378e-01 1.81157719e+03 -1.17700000e-04 5.21065601e-02 1.91469284e-01 3.64199474e-02 2.96674423e-05 1.20260591e-04 1.65690306e-03 7.18197378e-01 1.81351053e+03 -1.17800000e-04 5.20795048e-02 1.91407179e-01 3.65044812e-02 2.98920161e-05 1.20838449e-04 1.66072666e-03 7.18197378e-01 1.81351053e+03 -1.17900000e-04 5.20523562e-02 1.91344860e-01 3.65893042e-02 3.01191509e-05 1.21419790e-04 1.66456329e-03 7.18197378e-01 1.81351053e+03 -1.18000000e-04 5.20251135e-02 1.91282324e-01 3.66744180e-02 3.03488833e-05 1.22004640e-04 1.66841304e-03 7.18197378e-01 1.81484535e+03 -1.18100000e-04 5.19977763e-02 1.91219571e-01 3.67598243e-02 3.05812500e-05 1.22593029e-04 1.67227598e-03 7.18197378e-01 1.81484535e+03 -1.18200000e-04 5.19703440e-02 1.91156600e-01 3.68455248e-02 3.08162884e-05 1.23184985e-04 1.67615219e-03 7.18197378e-01 1.81618861e+03 -1.18300000e-04 5.19428160e-02 1.91093409e-01 3.69315213e-02 3.10540364e-05 1.23780537e-04 1.68004175e-03 7.18197378e-01 1.81754041e+03 -1.18400000e-04 5.19151918e-02 1.91029996e-01 3.70178153e-02 3.12945329e-05 1.24379714e-04 1.68394473e-03 7.18197378e-01 1.81754041e+03 -1.18500000e-04 5.18874707e-02 1.90966361e-01 3.71044088e-02 3.15378172e-05 1.24982545e-04 1.68786122e-03 7.18197378e-01 1.81890085e+03 -1.18600000e-04 5.18596523e-02 1.90902502e-01 3.71913034e-02 3.17839289e-05 1.25589061e-04 1.69179129e-03 7.18197378e-01 1.81890085e+03 -1.18700000e-04 5.18317358e-02 1.90838418e-01 3.72785009e-02 3.20329087e-05 1.26199291e-04 1.69573503e-03 7.18197378e-01 1.82027001e+03 -1.18800000e-04 5.18037208e-02 1.90774108e-01 3.73660031e-02 3.22847984e-05 1.26813266e-04 1.69969252e-03 7.18197378e-01 1.82027001e+03 -1.18900000e-04 5.17756067e-02 1.90709569e-01 3.74538119e-02 3.25396397e-05 1.27431017e-04 1.70366383e-03 7.18197378e-01 1.82164798e+03 -1.19000000e-04 5.17473927e-02 1.90644801e-01 3.75419289e-02 3.27974754e-05 1.28052575e-04 1.70764906e-03 7.18197378e-01 1.82164798e+03 -1.19100000e-04 5.17190784e-02 1.90579803e-01 3.76303561e-02 3.30583490e-05 1.28677970e-04 1.71164829e-03 7.18197378e-01 1.82303488e+03 -1.19200000e-04 5.16906631e-02 1.90514573e-01 3.77190953e-02 3.33223049e-05 1.29307236e-04 1.71566159e-03 7.18197378e-01 1.82303488e+03 -1.19300000e-04 5.16621462e-02 1.90449109e-01 3.78081483e-02 3.35893878e-05 1.29940404e-04 1.71968906e-03 7.18197378e-01 1.82443079e+03 -1.19400000e-04 5.16335271e-02 1.90383410e-01 3.78975171e-02 3.38596432e-05 1.30577507e-04 1.72373077e-03 7.18197378e-01 1.82540229e+03 -1.19500000e-04 5.16048052e-02 1.90317475e-01 3.79872034e-02 3.41331182e-05 1.31218576e-04 1.72778683e-03 7.18197378e-01 1.82540229e+03 -1.19600000e-04 5.15759798e-02 1.90251302e-01 3.80772093e-02 3.44098601e-05 1.31863647e-04 1.73185730e-03 7.18197378e-01 1.82637819e+03 -1.19700000e-04 5.15470503e-02 1.90184890e-01 3.81675366e-02 3.46899168e-05 1.32512751e-04 1.73594229e-03 7.18197378e-01 1.82735853e+03 -1.19800000e-04 5.15180160e-02 1.90118238e-01 3.82581872e-02 3.49733372e-05 1.33165922e-04 1.74004188e-03 7.18197378e-01 1.82834333e+03 -1.19900000e-04 5.14888763e-02 1.90051343e-01 3.83491632e-02 3.52601714e-05 1.33823196e-04 1.74415615e-03 7.18197378e-01 1.82834333e+03 -1.20000000e-04 5.14596306e-02 1.89984205e-01 3.84404665e-02 3.55504701e-05 1.34484607e-04 1.74828520e-03 7.18197378e-01 1.82933264e+03 -1.20100000e-04 5.14302782e-02 1.89916821e-01 3.85320990e-02 3.58442848e-05 1.35150188e-04 1.75242912e-03 7.18197378e-01 1.83032649e+03 -1.20200000e-04 5.14008184e-02 1.89849191e-01 3.86240628e-02 3.61416680e-05 1.35819977e-04 1.75658800e-03 7.18197378e-01 1.83195783e+03 -1.20300000e-04 5.13712506e-02 1.89781313e-01 3.87163599e-02 3.64426732e-05 1.36494008e-04 1.76076193e-03 7.18197378e-01 1.83195783e+03 -1.20400000e-04 5.13415741e-02 1.89713185e-01 3.88089923e-02 3.67473547e-05 1.37172318e-04 1.76495100e-03 7.18197378e-01 1.83360151e+03 -1.20500000e-04 5.13117882e-02 1.89644806e-01 3.89019620e-02 3.70557678e-05 1.37854943e-04 1.76915532e-03 7.18197378e-01 1.83360151e+03 -1.20600000e-04 5.12818922e-02 1.89576174e-01 3.89952712e-02 3.73679688e-05 1.38541920e-04 1.77337497e-03 7.18197378e-01 1.83525768e+03 -1.20700000e-04 5.12518854e-02 1.89507288e-01 3.90889219e-02 3.76840150e-05 1.39233287e-04 1.77761004e-03 7.18197378e-01 1.83525768e+03 -1.20800000e-04 5.12217671e-02 1.89438145e-01 3.91829162e-02 3.80039648e-05 1.39929080e-04 1.78186064e-03 7.18197378e-01 1.83692650e+03 -1.20900000e-04 5.11915367e-02 1.89368745e-01 3.92772563e-02 3.83278775e-05 1.40629339e-04 1.78612687e-03 7.18197378e-01 1.83692650e+03 -1.21000000e-04 5.11611934e-02 1.89299086e-01 3.93719442e-02 3.86558134e-05 1.41334102e-04 1.79040881e-03 7.18197378e-01 1.83860813e+03 -1.21100000e-04 5.11307365e-02 1.89229166e-01 3.94669821e-02 3.89878342e-05 1.42043408e-04 1.79470657e-03 7.18197378e-01 1.83860813e+03 -1.21200000e-04 5.11001652e-02 1.89158983e-01 3.95623722e-02 3.93240022e-05 1.42757295e-04 1.79902025e-03 7.18197378e-01 1.84030276e+03 -1.21300000e-04 5.10694789e-02 1.89088536e-01 3.96581167e-02 3.96643815e-05 1.43475805e-04 1.80334995e-03 7.18197378e-01 1.84030276e+03 -1.21400000e-04 5.10386768e-02 1.89017824e-01 3.97542178e-02 4.00090366e-05 1.44198977e-04 1.80769577e-03 7.18197378e-01 1.84030276e+03 -1.21500000e-04 5.10077582e-02 1.88946844e-01 3.98506777e-02 4.03580338e-05 1.44926853e-04 1.81205781e-03 7.18197378e-01 1.84201053e+03 -1.21600000e-04 5.09767222e-02 1.88875594e-01 3.99474987e-02 4.07114402e-05 1.45659473e-04 1.81643617e-03 7.18197378e-01 1.84201053e+03 -1.21700000e-04 5.09455683e-02 1.88804074e-01 4.00446830e-02 4.10693243e-05 1.46396878e-04 1.82083096e-03 7.18197378e-01 1.84373164e+03 -1.21800000e-04 5.09142955e-02 1.88732281e-01 4.01422329e-02 4.14317558e-05 1.47139113e-04 1.82524229e-03 7.18197378e-01 1.84373164e+03 -1.21900000e-04 5.08829032e-02 1.88660213e-01 4.02401507e-02 4.17988057e-05 1.47886217e-04 1.82967026e-03 7.18197378e-01 1.84546625e+03 -1.22000000e-04 5.08513905e-02 1.88587869e-01 4.03384387e-02 4.21705462e-05 1.48638236e-04 1.83411497e-03 7.18197378e-01 1.84546625e+03 -1.22100000e-04 5.08197566e-02 1.88515247e-01 4.04370994e-02 4.25470510e-05 1.49395213e-04 1.83857654e-03 7.18197378e-01 1.84721455e+03 -1.22200000e-04 5.07880009e-02 1.88442346e-01 4.05361349e-02 4.29283951e-05 1.50157191e-04 1.84305507e-03 7.18197378e-01 1.84721455e+03 -1.22300000e-04 5.07561224e-02 1.88369162e-01 4.06355478e-02 4.33146546e-05 1.50924215e-04 1.84755067e-03 7.18197378e-01 1.84897671e+03 -1.22400000e-04 5.07241204e-02 1.88295696e-01 4.07353404e-02 4.37059075e-05 1.51696331e-04 1.85206345e-03 7.18197378e-01 1.84897671e+03 -1.22500000e-04 5.06919941e-02 1.88221944e-01 4.08355152e-02 4.41022329e-05 1.52473583e-04 1.85659353e-03 7.18197378e-01 1.85075293e+03 -1.22600000e-04 5.06597426e-02 1.88147904e-01 4.09360745e-02 4.45037115e-05 1.53256019e-04 1.86114102e-03 7.18197378e-01 1.85075293e+03 -1.22700000e-04 5.06273651e-02 1.88073576e-01 4.10370209e-02 4.49104254e-05 1.54043685e-04 1.86570603e-03 7.18197378e-01 1.85254339e+03 -1.22800000e-04 5.05948608e-02 1.87998957e-01 4.11383568e-02 4.53224584e-05 1.54836628e-04 1.87028867e-03 7.18197378e-01 1.85254339e+03 -1.22900000e-04 5.05622288e-02 1.87924045e-01 4.12400848e-02 4.57398957e-05 1.55634895e-04 1.87488906e-03 7.18197378e-01 1.85434828e+03 -1.23000000e-04 5.05294683e-02 1.87848838e-01 4.13422074e-02 4.61628242e-05 1.56438536e-04 1.87950732e-03 7.18197378e-01 1.85434828e+03 -1.23100000e-04 5.04965785e-02 1.87773334e-01 4.14447270e-02 4.65913323e-05 1.57247599e-04 1.88414357e-03 7.18197378e-01 1.85616782e+03 -1.23200000e-04 5.04635584e-02 1.87697532e-01 4.15476464e-02 4.70255104e-05 1.58062133e-04 1.88879792e-03 7.18197378e-01 1.85616782e+03 -1.23300000e-04 5.04304073e-02 1.87621429e-01 4.16509681e-02 4.74654502e-05 1.58882189e-04 1.89347050e-03 7.18197378e-01 1.85800218e+03 -1.23400000e-04 5.03971241e-02 1.87545023e-01 4.17546947e-02 4.79112454e-05 1.59707818e-04 1.89816142e-03 7.18197378e-01 1.85800218e+03 -1.23500000e-04 5.03637081e-02 1.87468312e-01 4.18588288e-02 4.83629914e-05 1.60539069e-04 1.90287080e-03 7.18197378e-01 1.85985159e+03 -1.23600000e-04 5.03301583e-02 1.87391295e-01 4.19633732e-02 4.88207855e-05 1.61375996e-04 1.90759878e-03 7.18197378e-01 1.85985159e+03 -1.23700000e-04 5.02964738e-02 1.87313969e-01 4.20683304e-02 4.92847266e-05 1.62218651e-04 1.91234547e-03 7.18197378e-01 1.86171624e+03 -1.23800000e-04 5.02626537e-02 1.87236332e-01 4.21737033e-02 4.97549160e-05 1.63067087e-04 1.91711100e-03 7.18197378e-01 1.86171624e+03 -1.23900000e-04 5.02286971e-02 1.87158382e-01 4.22794945e-02 5.02314563e-05 1.63921357e-04 1.92189550e-03 7.18197378e-01 1.86359635e+03 -1.24000000e-04 5.01946030e-02 1.87080117e-01 4.23857068e-02 5.07144527e-05 1.64781516e-04 1.92669909e-03 7.18197378e-01 1.86359635e+03 -1.24100000e-04 5.01603706e-02 1.87001535e-01 4.24923431e-02 5.12040119e-05 1.65647619e-04 1.93152191e-03 7.18197378e-01 1.86359635e+03 -1.24200000e-04 5.01259988e-02 1.86922633e-01 4.25994059e-02 5.17002432e-05 1.66519721e-04 1.93636408e-03 7.18197378e-01 1.86549214e+03 -1.24300000e-04 5.00914868e-02 1.86843410e-01 4.27068984e-02 5.22032574e-05 1.67397879e-04 1.94122573e-03 7.18197378e-01 1.86549214e+03 -1.24400000e-04 5.00568334e-02 1.86763863e-01 4.28148231e-02 5.27131680e-05 1.68282150e-04 1.94610700e-03 7.18197378e-01 1.86740382e+03 -1.24500000e-04 5.00220379e-02 1.86683990e-01 4.29231832e-02 5.32300905e-05 1.69172591e-04 1.95100803e-03 7.18197378e-01 1.86740382e+03 -1.24600000e-04 4.99870991e-02 1.86603789e-01 4.30319814e-02 5.37541426e-05 1.70069262e-04 1.95592893e-03 7.18197378e-01 1.86945238e+03 -1.24700000e-04 4.99520161e-02 1.86523258e-01 4.31412207e-02 5.42854445e-05 1.70972220e-04 1.96086987e-03 7.18197378e-01 1.86945238e+03 -1.24800000e-04 4.99167879e-02 1.86442394e-01 4.32509041e-02 5.48241187e-05 1.71881526e-04 1.96583096e-03 7.18197378e-01 1.87151941e+03 -1.24900000e-04 4.98814134e-02 1.86361194e-01 4.33610345e-02 5.53702899e-05 1.72797240e-04 1.97081235e-03 7.18197378e-01 1.87151941e+03 -1.25000000e-04 4.98458917e-02 1.86279658e-01 4.34716149e-02 5.59240855e-05 1.73719424e-04 1.97581418e-03 7.18197378e-01 1.87360518e+03 -1.25100000e-04 4.98102217e-02 1.86197782e-01 4.35826485e-02 5.64856355e-05 1.74648139e-04 1.98083659e-03 7.18197378e-01 1.87360518e+03 -1.25200000e-04 4.97744023e-02 1.86115563e-01 4.36941381e-02 5.70550722e-05 1.75583449e-04 1.98587973e-03 7.18197378e-01 1.87570998e+03 -1.25300000e-04 4.97384326e-02 1.86033001e-01 4.38060871e-02 5.76325307e-05 1.76525417e-04 1.99094373e-03 7.18197378e-01 1.87570998e+03 -1.25400000e-04 4.97023114e-02 1.85950091e-01 4.39184984e-02 5.82181488e-05 1.77474107e-04 1.99602875e-03 7.18197378e-01 1.87783411e+03 -1.25500000e-04 4.96660377e-02 1.85866833e-01 4.40313752e-02 5.88120671e-05 1.78429585e-04 2.00113493e-03 7.18197378e-01 1.87783411e+03 -1.25600000e-04 4.96296104e-02 1.85783222e-01 4.41447207e-02 5.94144290e-05 1.79391916e-04 2.00626241e-03 7.18197378e-01 1.87783411e+03 -1.25700000e-04 4.95930284e-02 1.85699258e-01 4.42585380e-02 6.00253809e-05 1.80361168e-04 2.01141136e-03 7.18197378e-01 1.87997785e+03 -1.25800000e-04 4.95562905e-02 1.85614937e-01 4.43728305e-02 6.06450718e-05 1.81337407e-04 2.01658191e-03 7.18197378e-01 1.87997785e+03 -1.25900000e-04 4.95193958e-02 1.85530256e-01 4.44876014e-02 6.12736541e-05 1.82320702e-04 2.02177423e-03 7.18197378e-01 1.88214152e+03 -1.26000000e-04 4.94823430e-02 1.85445214e-01 4.46028540e-02 6.19112833e-05 1.83311123e-04 2.02698847e-03 7.18197378e-01 1.88214152e+03 -1.26100000e-04 4.94451310e-02 1.85359808e-01 4.47185915e-02 6.25581179e-05 1.84308740e-04 2.03222478e-03 7.18197378e-01 1.88432542e+03 -1.26200000e-04 4.94077586e-02 1.85274035e-01 4.48348174e-02 6.32143193e-05 1.85313624e-04 2.03748331e-03 7.18197378e-01 1.88432542e+03 -1.26300000e-04 4.93702248e-02 1.85187892e-01 4.49515351e-02 6.38800525e-05 1.86325847e-04 2.04276424e-03 7.18197378e-01 1.88587412e+03 -1.26400000e-04 4.93325283e-02 1.85101377e-01 4.50687478e-02 6.45554867e-05 1.87345481e-04 2.04806772e-03 7.18197378e-01 1.88587412e+03 -1.26500000e-04 4.92946680e-02 1.85014488e-01 4.51864592e-02 6.52407941e-05 1.88372601e-04 2.05339390e-03 7.18197378e-01 1.88697192e+03 -1.26600000e-04 4.92566426e-02 1.84927221e-01 4.53046726e-02 6.59361490e-05 1.89407281e-04 2.05874296e-03 7.18197378e-01 1.88807487e+03 -1.26700000e-04 4.92184509e-02 1.84839573e-01 4.54233916e-02 6.66417311e-05 1.90449597e-04 2.06411506e-03 7.18197378e-01 1.88918301e+03 -1.26800000e-04 4.91800918e-02 1.84751543e-01 4.55426196e-02 6.73577235e-05 1.91499626e-04 2.06951037e-03 7.18197378e-01 1.89029638e+03 -1.26900000e-04 4.91415640e-02 1.84663127e-01 4.56623604e-02 6.80843127e-05 1.92557445e-04 2.07492905e-03 7.18197378e-01 1.89141502e+03 -1.27000000e-04 4.91028662e-02 1.84574322e-01 4.57826174e-02 6.88216898e-05 1.93623134e-04 2.08037127e-03 7.18197378e-01 1.89253897e+03 -1.27100000e-04 4.90639972e-02 1.84485127e-01 4.59033943e-02 6.95700482e-05 1.94696771e-04 2.08583720e-03 7.18197378e-01 1.89336209e+03 -1.27200000e-04 4.90249557e-02 1.84395537e-01 4.60246948e-02 7.03295876e-05 1.95778438e-04 2.09132703e-03 7.18197378e-01 1.89396993e+03 -1.27300000e-04 4.89857405e-02 1.84305549e-01 4.61465226e-02 7.11005106e-05 1.96868215e-04 2.09684092e-03 7.18197378e-01 1.89519028e+03 -1.27400000e-04 4.89463502e-02 1.84215162e-01 4.62688813e-02 7.18830240e-05 1.97966187e-04 2.10237905e-03 7.18197378e-01 1.89580281e+03 -1.27500000e-04 4.89067836e-02 1.84124372e-01 4.63917749e-02 7.26773401e-05 1.99072437e-04 2.10794160e-03 7.18197378e-01 1.89703262e+03 -1.27600000e-04 4.88670393e-02 1.84033176e-01 4.65152070e-02 7.34836739e-05 2.00187050e-04 2.11352875e-03 7.18197378e-01 1.89794573e+03 -1.27700000e-04 4.88271160e-02 1.83941572e-01 4.66391815e-02 7.43022471e-05 2.01310112e-04 2.11914067e-03 7.18197378e-01 1.89932196e+03 -1.27800000e-04 4.87870124e-02 1.83849555e-01 4.67637024e-02 7.51332840e-05 2.02441710e-04 2.12477757e-03 7.18197378e-01 1.90024386e+03 -1.27900000e-04 4.87467270e-02 1.83757123e-01 4.68887734e-02 7.59770157e-05 2.03581933e-04 2.13043961e-03 7.18197378e-01 1.90116932e+03 -1.28000000e-04 4.87062585e-02 1.83664273e-01 4.70143986e-02 7.68336766e-05 2.04730871e-04 2.13612699e-03 7.18197378e-01 1.90209836e+03 -1.28100000e-04 4.86656056e-02 1.83571003e-01 4.71405819e-02 7.77035075e-05 2.05888613e-04 2.14183990e-03 7.18197378e-01 1.90346387e+03 -1.28200000e-04 4.86247667e-02 1.83477307e-01 4.72673274e-02 7.85867533e-05 2.07055253e-04 2.14757853e-03 7.18197378e-01 1.90449310e+03 -1.28300000e-04 4.85837406e-02 1.83383185e-01 4.73946391e-02 7.94836648e-05 2.08230883e-04 2.15334308e-03 7.18197378e-01 1.90552674e+03 -1.28400000e-04 4.85425257e-02 1.83288632e-01 4.75225210e-02 8.03944984e-05 2.09415598e-04 2.15913373e-03 7.18197378e-01 1.90656481e+03 -1.28500000e-04 4.85011206e-02 1.83193644e-01 4.76509774e-02 8.13195155e-05 2.10609494e-04 2.16495068e-03 7.18197378e-01 1.90767775e+03 -1.28600000e-04 4.84595239e-02 1.83098220e-01 4.77800124e-02 8.22589837e-05 2.11812667e-04 2.17079414e-03 7.18197378e-01 1.90879581e+03 -1.28700000e-04 4.84177341e-02 1.83002355e-01 4.79096302e-02 8.32131764e-05 2.13025216e-04 2.17666431e-03 7.18197378e-01 1.91033214e+03 -1.28800000e-04 4.83757496e-02 1.82906047e-01 4.80398350e-02 8.41823727e-05 2.14247240e-04 2.18256138e-03 7.18197378e-01 1.91187823e+03 -1.28900000e-04 4.83335690e-02 1.82809291e-01 4.81706312e-02 8.51668581e-05 2.15478841e-04 2.18848557e-03 7.18197378e-01 1.91343418e+03 -1.29000000e-04 4.82911908e-02 1.82712084e-01 4.83020230e-02 8.61669245e-05 2.16720121e-04 2.19443708e-03 7.18197378e-01 1.91343418e+03 -1.29100000e-04 4.82486134e-02 1.82614424e-01 4.84340149e-02 8.71828700e-05 2.17971184e-04 2.20041613e-03 7.18197378e-01 1.91578751e+03 -1.29200000e-04 4.82058352e-02 1.82516306e-01 4.85666111e-02 8.82149996e-05 2.19232134e-04 2.20642291e-03 7.18197378e-01 1.91578751e+03 -1.29300000e-04 4.81628547e-02 1.82417727e-01 4.86998162e-02 8.92636246e-05 2.20503079e-04 2.21245766e-03 7.18197378e-01 1.91737677e+03 -1.29400000e-04 4.81196703e-02 1.82318683e-01 4.88336347e-02 9.03290641e-05 2.21784127e-04 2.21852058e-03 7.18197378e-01 1.91897637e+03 -1.29500000e-04 4.80762804e-02 1.82219172e-01 4.89680711e-02 9.14116436e-05 2.23075387e-04 2.22461189e-03 7.18197378e-01 1.91897637e+03 -1.29600000e-04 4.80326833e-02 1.82119188e-01 4.91031299e-02 9.25116963e-05 2.24376971e-04 2.23073182e-03 7.18197378e-01 1.92058640e+03 -1.29700000e-04 4.79888775e-02 1.82018730e-01 4.92388158e-02 9.36295628e-05 2.25688990e-04 2.23688059e-03 7.18197378e-01 1.92220700e+03 -1.29800000e-04 4.79448612e-02 1.81917792e-01 4.93751334e-02 9.47655912e-05 2.27011560e-04 2.24305841e-03 7.18197378e-01 1.92220700e+03 -1.29900000e-04 4.79006328e-02 1.81816372e-01 4.95120874e-02 9.59201379e-05 2.28344795e-04 2.24926553e-03 7.18197378e-01 1.92383826e+03 -1.30000000e-04 4.78561906e-02 1.81714464e-01 4.96496825e-02 9.70935671e-05 2.29688815e-04 2.25550217e-03 7.18197378e-01 1.92548030e+03 -1.30100000e-04 4.78115329e-02 1.81612067e-01 4.97879236e-02 9.82862515e-05 2.31043736e-04 2.26176856e-03 7.18197378e-01 1.92713325e+03 -1.30200000e-04 4.77666580e-02 1.81509175e-01 4.99268155e-02 9.94985721e-05 2.32409682e-04 2.26806494e-03 7.18197378e-01 1.92713325e+03 -1.30300000e-04 4.77215640e-02 1.81405786e-01 5.00663630e-02 1.00730919e-04 2.33786773e-04 2.27439155e-03 7.18197378e-01 1.92879721e+03 -1.30400000e-04 4.76762493e-02 1.81301894e-01 5.02065711e-02 1.01983690e-04 2.35175134e-04 2.28074862e-03 7.18197378e-01 1.93047230e+03 -1.30500000e-04 4.76307120e-02 1.81197497e-01 5.03474447e-02 1.03257295e-04 2.36574890e-04 2.28713640e-03 7.18197378e-01 1.93047230e+03 -1.30600000e-04 4.75849504e-02 1.81092589e-01 5.04889889e-02 1.04552150e-04 2.37986171e-04 2.29355514e-03 7.18197378e-01 1.93215866e+03 -1.30700000e-04 4.75389626e-02 1.80987168e-01 5.06312086e-02 1.05868682e-04 2.39409105e-04 2.30000507e-03 7.18197378e-01 1.93385639e+03 -1.30800000e-04 4.74927467e-02 1.80881229e-01 5.07741091e-02 1.07207329e-04 2.40843823e-04 2.30648646e-03 7.18197378e-01 1.93556563e+03 -1.30900000e-04 4.74463010e-02 1.80774767e-01 5.09176954e-02 1.08568538e-04 2.42290460e-04 2.31299956e-03 7.18197378e-01 1.93556563e+03 -1.31000000e-04 4.73996235e-02 1.80667779e-01 5.10619727e-02 1.09952767e-04 2.43749150e-04 2.31954461e-03 7.18197378e-01 1.93728650e+03 -1.31100000e-04 4.73527123e-02 1.80560261e-01 5.12069463e-02 1.11360483e-04 2.45220030e-04 2.32612189e-03 7.18197378e-01 1.93901913e+03 -1.31200000e-04 4.73055655e-02 1.80452208e-01 5.13526215e-02 1.12792167e-04 2.46703240e-04 2.33273165e-03 7.18197378e-01 1.94076365e+03 -1.31300000e-04 4.72581811e-02 1.80343616e-01 5.14990037e-02 1.14248310e-04 2.48198920e-04 2.33937415e-03 7.18197378e-01 1.94076365e+03 -1.31400000e-04 4.72105572e-02 1.80234480e-01 5.16460981e-02 1.15729413e-04 2.49707214e-04 2.34604967e-03 7.18197378e-01 1.94252019e+03 -1.31500000e-04 4.71626918e-02 1.80124797e-01 5.17939103e-02 1.17235991e-04 2.51228268e-04 2.35275847e-03 7.18197378e-01 1.94428888e+03 -1.31600000e-04 4.71145828e-02 1.80014562e-01 5.19424458e-02 1.18768571e-04 2.52762228e-04 2.35950082e-03 7.18197378e-01 1.94428888e+03 -1.31700000e-04 4.70662283e-02 1.79903770e-01 5.20917100e-02 1.20327692e-04 2.54309245e-04 2.36627701e-03 7.18197378e-01 1.94560367e+03 -1.31800000e-04 4.70176262e-02 1.79792417e-01 5.22417087e-02 1.21913906e-04 2.55869470e-04 2.37308731e-03 7.18197378e-01 1.94692521e+03 -1.31900000e-04 4.69687743e-02 1.79680498e-01 5.23924473e-02 1.23527778e-04 2.57443057e-04 2.37993199e-03 7.18197378e-01 1.94825358e+03 -1.32000000e-04 4.69196706e-02 1.79568008e-01 5.25439317e-02 1.25169887e-04 2.59030162e-04 2.38681136e-03 7.18197378e-01 1.94958883e+03 -1.32100000e-04 4.68703130e-02 1.79454944e-01 5.26961675e-02 1.26840826e-04 2.60630944e-04 2.39372569e-03 7.18197378e-01 1.95093101e+03 -1.32200000e-04 4.68206993e-02 1.79341300e-01 5.28491606e-02 1.28541203e-04 2.62245565e-04 2.40067528e-03 7.18197378e-01 1.95228019e+03 -1.32300000e-04 4.67708273e-02 1.79227072e-01 5.30029168e-02 1.30271639e-04 2.63874187e-04 2.40766042e-03 7.18197378e-01 1.95363641e+03 -1.32400000e-04 4.67206948e-02 1.79112254e-01 5.31574420e-02 1.32032772e-04 2.65516977e-04 2.41468140e-03 7.18197378e-01 1.95499974e+03 -1.32500000e-04 4.66702996e-02 1.78996842e-01 5.33127422e-02 1.33825253e-04 2.67174102e-04 2.42173854e-03 7.18197378e-01 1.95600755e+03 -1.32600000e-04 4.66196395e-02 1.78880832e-01 5.34688233e-02 1.35649754e-04 2.68845734e-04 2.42883213e-03 7.18197378e-01 1.95803491e+03 -1.32700000e-04 4.65687122e-02 1.78764217e-01 5.36256915e-02 1.37506957e-04 2.70532046e-04 2.43596248e-03 7.18197378e-01 1.95905451e+03 -1.32800000e-04 4.65175153e-02 1.78646993e-01 5.37833528e-02 1.39397564e-04 2.72233214e-04 2.44312991e-03 7.18197378e-01 1.96007809e+03 -1.32900000e-04 4.64660466e-02 1.78529156e-01 5.39418135e-02 1.41322297e-04 2.73949417e-04 2.45033472e-03 7.18197378e-01 1.96213728e+03 -1.33000000e-04 4.64143037e-02 1.78410699e-01 5.41010797e-02 1.43281891e-04 2.75680837e-04 2.45757724e-03 7.18197378e-01 1.96317294e+03 -1.33100000e-04 4.63622842e-02 1.78291618e-01 5.42611577e-02 1.45277102e-04 2.77427656e-04 2.46485778e-03 7.18197378e-01 1.96421268e+03 -1.33200000e-04 4.63099857e-02 1.78171907e-01 5.44220539e-02 1.47308705e-04 2.79190064e-04 2.47217667e-03 7.18197378e-01 1.96525652e+03 -1.33300000e-04 4.62574057e-02 1.78051562e-01 5.45837747e-02 1.49377493e-04 2.80968249e-04 2.47953425e-03 7.18197378e-01 1.96679599e+03 -1.33400000e-04 4.62045419e-02 1.77930576e-01 5.47463265e-02 1.51484279e-04 2.82762404e-04 2.48693083e-03 7.18197378e-01 1.96834444e+03 -1.33500000e-04 4.61513917e-02 1.77808945e-01 5.49097159e-02 1.53629898e-04 2.84572726e-04 2.49436677e-03 7.18197378e-01 1.96990194e+03 -1.33600000e-04 4.60979526e-02 1.77686663e-01 5.50739493e-02 1.55815205e-04 2.86399413e-04 2.50184239e-03 7.18197378e-01 1.97146858e+03 -1.33700000e-04 4.60442221e-02 1.77563725e-01 5.52390334e-02 1.58041077e-04 2.88242666e-04 2.50935805e-03 7.18197378e-01 1.97282572e+03 -1.33800000e-04 4.59901975e-02 1.77440125e-01 5.54049749e-02 1.60308411e-04 2.90102692e-04 2.51691408e-03 7.18197378e-01 1.97418975e+03 -1.33900000e-04 4.59358763e-02 1.77315857e-01 5.55717805e-02 1.62618131e-04 2.91979698e-04 2.52451085e-03 7.18197378e-01 1.97556075e+03 -1.34000000e-04 4.58812558e-02 1.77190916e-01 5.57394570e-02 1.64971181e-04 2.93873896e-04 2.53214870e-03 7.18197378e-01 1.97693875e+03 -1.34100000e-04 4.58263333e-02 1.77065296e-01 5.59080112e-02 1.67368531e-04 2.95785501e-04 2.53982800e-03 7.18197378e-01 1.97832383e+03 -1.34200000e-04 4.57711063e-02 1.76938991e-01 5.60774501e-02 1.69811174e-04 2.97714730e-04 2.54754911e-03 7.18197378e-01 1.97971603e+03 -1.34300000e-04 4.57155718e-02 1.76811995e-01 5.62477807e-02 1.72300131e-04 2.99661807e-04 2.55531240e-03 7.18197378e-01 1.98111541e+03 -1.34400000e-04 4.56597272e-02 1.76684303e-01 5.64190098e-02 1.74836448e-04 3.01626955e-04 2.56311823e-03 7.18197378e-01 1.98252203e+03 -1.34500000e-04 4.56035697e-02 1.76555909e-01 5.65911447e-02 1.77421198e-04 3.03610404e-04 2.57096699e-03 7.18197378e-01 1.98551478e+03 -1.34600000e-04 4.55470965e-02 1.76426806e-01 5.67641925e-02 1.80055481e-04 3.05612386e-04 2.57885906e-03 7.18197378e-01 1.98551478e+03 -1.34700000e-04 4.54903046e-02 1.76296989e-01 5.69381603e-02 1.82740428e-04 3.07633137e-04 2.58679481e-03 7.18197378e-01 1.98900103e+03 -1.34800000e-04 4.54331912e-02 1.76166451e-01 5.71130555e-02 1.85477198e-04 3.09672898e-04 2.59477465e-03 7.18197378e-01 1.98900103e+03 -1.34900000e-04 4.53757534e-02 1.76035186e-01 5.72888853e-02 1.88266979e-04 3.11731911e-04 2.60279895e-03 7.18197378e-01 1.99148185e+03 -1.35000000e-04 4.53179881e-02 1.75903187e-01 5.74656571e-02 1.91110993e-04 3.13810424e-04 2.61086813e-03 7.18197378e-01 1.99148185e+03 -1.35100000e-04 4.52598925e-02 1.75770450e-01 5.76433783e-02 1.94010492e-04 3.15908690e-04 2.61898258e-03 7.18197378e-01 1.99398511e+03 -1.35200000e-04 4.52014635e-02 1.75636966e-01 5.78220565e-02 1.96966761e-04 3.18026964e-04 2.62714270e-03 7.18197378e-01 1.99651114e+03 -1.35300000e-04 4.51426979e-02 1.75502729e-01 5.80016992e-02 1.99981121e-04 3.20165505e-04 2.63534892e-03 7.18197378e-01 1.99651114e+03 -1.35400000e-04 4.50835928e-02 1.75367734e-01 5.81823139e-02 2.03054926e-04 3.22324579e-04 2.64360165e-03 7.18197378e-01 1.99906026e+03 -1.35500000e-04 4.50241450e-02 1.75231973e-01 5.83639084e-02 2.06189566e-04 3.24504453e-04 2.65190130e-03 7.18197378e-01 1.99906026e+03 -1.35600000e-04 4.49643512e-02 1.75095440e-01 5.85464904e-02 2.09386470e-04 3.26705400e-04 2.66024831e-03 7.18197378e-01 2.00163277e+03 -1.35700000e-04 4.49042083e-02 1.74958128e-01 5.87300677e-02 2.12647102e-04 3.28927697e-04 2.66864311e-03 7.18197378e-01 2.00422902e+03 -1.35800000e-04 4.48437130e-02 1.74820030e-01 5.89146480e-02 2.15972969e-04 3.31171627e-04 2.67708612e-03 7.18197378e-01 2.00422902e+03 -1.35900000e-04 4.47828621e-02 1.74681140e-01 5.91002394e-02 2.19365616e-04 3.33437476e-04 2.68557780e-03 7.18197378e-01 2.00684933e+03 -1.36000000e-04 4.47216521e-02 1.74541450e-01 5.92868496e-02 2.22826629e-04 3.35725535e-04 2.69411859e-03 7.18197378e-01 2.00684933e+03 -1.36100000e-04 4.46600798e-02 1.74400953e-01 5.94744869e-02 2.26357640e-04 3.38036100e-04 2.70270894e-03 7.18197378e-01 2.00949404e+03 -1.36200000e-04 4.45981417e-02 1.74259642e-01 5.96631592e-02 2.29960323e-04 3.40369472e-04 2.71134930e-03 7.18197378e-01 2.01216350e+03 -1.36300000e-04 4.45358344e-02 1.74117511e-01 5.98528746e-02 2.33636396e-04 3.42725958e-04 2.72004014e-03 7.18197378e-01 2.01216350e+03 -1.36400000e-04 4.44731544e-02 1.73974551e-01 6.00436414e-02 2.37387628e-04 3.45105868e-04 2.72878192e-03 7.18197378e-01 2.01485805e+03 -1.36500000e-04 4.44100981e-02 1.73830756e-01 6.02354677e-02 2.41215832e-04 3.47509519e-04 2.73757512e-03 7.18197378e-01 2.01757806e+03 -1.36600000e-04 4.43466620e-02 1.73686118e-01 6.04283618e-02 2.45122873e-04 3.49937232e-04 2.74642022e-03 7.18197378e-01 2.01757806e+03 -1.36700000e-04 4.42828424e-02 1.73540630e-01 6.06223321e-02 2.49110667e-04 3.52389335e-04 2.75531769e-03 7.18197378e-01 2.02032387e+03 -1.36800000e-04 4.42186358e-02 1.73394284e-01 6.08173870e-02 2.53181183e-04 3.54866160e-04 2.76426802e-03 7.18197378e-01 2.02032387e+03 -1.36900000e-04 4.41540384e-02 1.73247073e-01 6.10135349e-02 2.57336442e-04 3.57368045e-04 2.77327172e-03 7.18197378e-01 2.02309586e+03 -1.37000000e-04 4.40890464e-02 1.73098988e-01 6.12107843e-02 2.61578524e-04 3.59895335e-04 2.78232928e-03 7.18197378e-01 2.02589439e+03 -1.37100000e-04 4.40236560e-02 1.72950023e-01 6.14091438e-02 2.65909564e-04 3.62448379e-04 2.79144120e-03 7.18197378e-01 2.02589439e+03 -1.37200000e-04 4.39578635e-02 1.72800169e-01 6.16086219e-02 2.70331758e-04 3.65027533e-04 2.80060800e-03 7.18197378e-01 2.02787896e+03 -1.37300000e-04 4.38916649e-02 1.72649419e-01 6.18092272e-02 2.74847365e-04 3.67633160e-04 2.80983020e-03 7.18197378e-01 2.02932693e+03 -1.37400000e-04 4.38250563e-02 1.72497765e-01 6.20109685e-02 2.79458703e-04 3.70265627e-04 2.81910832e-03 7.18197378e-01 2.03078203e+03 -1.37500000e-04 4.37580338e-02 1.72345197e-01 6.22138545e-02 2.84168156e-04 3.72925308e-04 2.82844288e-03 7.18197378e-01 2.03224431e+03 -1.37600000e-04 4.36905932e-02 1.72191710e-01 6.24178940e-02 2.88978177e-04 3.75612585e-04 2.83783443e-03 7.18197378e-01 2.03371382e+03 -1.37700000e-04 4.36227306e-02 1.72037293e-01 6.26230958e-02 2.93891288e-04 3.78327846e-04 2.84728351e-03 7.18197378e-01 2.03667474e+03 -1.37800000e-04 4.35544418e-02 1.71881939e-01 6.28294686e-02 2.98910078e-04 3.81071484e-04 2.85679066e-03 7.18197378e-01 2.03777272e+03 -1.37900000e-04 4.34857227e-02 1.71725640e-01 6.30370215e-02 3.04037215e-04 3.83843900e-04 2.86635644e-03 7.18197378e-01 2.03998080e+03 -1.38000000e-04 4.34165689e-02 1.71568387e-01 6.32457634e-02 3.09275438e-04 3.86645504e-04 2.87598141e-03 7.18197378e-01 2.04169740e+03 -1.38100000e-04 4.33469763e-02 1.71410172e-01 6.34557032e-02 3.14627566e-04 3.89476709e-04 2.88566613e-03 7.18197378e-01 2.04280205e+03 -1.38200000e-04 4.32769406e-02 1.71250986e-01 6.36668500e-02 3.20096498e-04 3.92337939e-04 2.89541119e-03 7.18197378e-01 2.04502350e+03 -1.38300000e-04 4.32064573e-02 1.71090820e-01 6.38792127e-02 3.25685216e-04 3.95229623e-04 2.90521716e-03 7.18197378e-01 2.04688182e+03 -1.38400000e-04 4.31355220e-02 1.70929666e-01 6.40928004e-02 3.31396785e-04 3.98152199e-04 2.91508462e-03 7.18197378e-01 2.04927191e+03 -1.38500000e-04 4.30641303e-02 1.70767515e-01 6.43076223e-02 3.37234362e-04 4.01106112e-04 2.92501418e-03 7.18197378e-01 2.05047398e+03 -1.38600000e-04 4.29922776e-02 1.70604358e-01 6.45236874e-02 3.43201191e-04 4.04091815e-04 2.93500643e-03 7.18197378e-01 2.05355214e+03 -1.38700000e-04 4.29199594e-02 1.70440186e-01 6.47410049e-02 3.49300611e-04 4.07109770e-04 2.94506197e-03 7.18197378e-01 2.05485653e+03 -1.38800000e-04 4.28471710e-02 1.70274989e-01 6.49595839e-02 3.55536058e-04 4.10160444e-04 2.95518143e-03 7.18197378e-01 2.05616643e+03 -1.38900000e-04 4.27739076e-02 1.70108760e-01 6.51794336e-02 3.61911065e-04 4.13244317e-04 2.96536543e-03 7.18197378e-01 2.05748188e+03 -1.39000000e-04 4.27001647e-02 1.69941489e-01 6.54005632e-02 3.68429269e-04 4.16361874e-04 2.97561458e-03 7.18197378e-01 2.06012952e+03 -1.39100000e-04 4.26259373e-02 1.69773165e-01 6.56229819e-02 3.75094412e-04 4.19513611e-04 2.98592954e-03 7.18197378e-01 2.06146179e+03 -1.39200000e-04 4.25512206e-02 1.69603781e-01 6.58466988e-02 3.81910347e-04 4.22700030e-04 2.99631093e-03 7.18197378e-01 2.06494372e+03 -1.39300000e-04 4.24760097e-02 1.69433327e-01 6.60717233e-02 3.88881035e-04 4.25921644e-04 3.00675941e-03 7.18197378e-01 2.06710233e+03 -1.39400000e-04 4.24002995e-02 1.69261793e-01 6.62980644e-02 3.96010557e-04 4.29178976e-04 3.01727564e-03 7.18197378e-01 2.06927572e+03 -1.39500000e-04 4.23240852e-02 1.69089170e-01 6.65257314e-02 4.03303109e-04 4.32472557e-04 3.02786028e-03 7.18197378e-01 2.06927572e+03 -1.39600000e-04 4.22473615e-02 1.68915447e-01 6.67547335e-02 4.10763015e-04 4.35802928e-04 3.03851399e-03 7.18197378e-01 2.07146400e+03 -1.39700000e-04 4.21701234e-02 1.68740616e-01 6.69850799e-02 4.18394721e-04 4.39170640e-04 3.04923747e-03 7.18197378e-01 2.07366733e+03 -1.39800000e-04 4.20923655e-02 1.68564666e-01 6.72167797e-02 4.26202807e-04 4.42576253e-04 3.06003140e-03 7.18197378e-01 2.07588583e+03 -1.39900000e-04 4.20140827e-02 1.68387589e-01 6.74498421e-02 4.34191987e-04 4.46020339e-04 3.07089646e-03 7.18197378e-01 2.07811966e+03 -1.40000000e-04 4.19352696e-02 1.68209373e-01 6.76842761e-02 4.42367113e-04 4.49503478e-04 3.08183337e-03 7.18197378e-01 2.08036894e+03 -1.40100000e-04 4.18559208e-02 1.68030008e-01 6.79200909e-02 4.50733182e-04 4.53026263e-04 3.09284283e-03 7.18197378e-01 2.08263383e+03 -1.40200000e-04 4.17760308e-02 1.67849486e-01 6.81572954e-02 4.59295338e-04 4.56589297e-04 3.10392556e-03 7.18197378e-01 2.08491446e+03 -1.40300000e-04 4.16955942e-02 1.67667795e-01 6.83958988e-02 4.68058877e-04 4.60193193e-04 3.11508228e-03 7.18197378e-01 2.08721097e+03 -1.40400000e-04 4.16146053e-02 1.67484925e-01 6.86359099e-02 4.77029254e-04 4.63838577e-04 3.12631372e-03 7.18197378e-01 2.08952352e+03 -1.40500000e-04 4.15330585e-02 1.67300867e-01 6.88773376e-02 4.86212083e-04 4.67526084e-04 3.13762063e-03 7.18197378e-01 2.08952352e+03 -1.40600000e-04 4.14509481e-02 1.67115610e-01 6.91201908e-02 4.95613147e-04 4.71256365e-04 3.14900376e-03 7.18197378e-01 2.09185224e+03 -1.40700000e-04 4.13682683e-02 1.66929143e-01 6.93644782e-02 5.05238403e-04 4.75030077e-04 3.16046385e-03 7.18197378e-01 2.09419728e+03 -1.40800000e-04 4.12850133e-02 1.66741457e-01 6.96102085e-02 5.15093982e-04 4.78847896e-04 3.17200168e-03 7.18197378e-01 2.09655879e+03 -1.40900000e-04 4.12011772e-02 1.66552540e-01 6.98573903e-02 5.25186200e-04 4.82710504e-04 3.18361801e-03 7.18197378e-01 2.09893690e+03 -1.41000000e-04 4.11167539e-02 1.66362382e-01 7.01060322e-02 5.35521562e-04 4.86618599e-04 3.19531363e-03 7.18197378e-01 2.10064549e+03 -1.41100000e-04 4.10317376e-02 1.66170973e-01 7.03561425e-02 5.46106768e-04 4.90572893e-04 3.20708932e-03 7.18197378e-01 2.10314664e+03 -1.41200000e-04 4.09461219e-02 1.65978302e-01 7.06077295e-02 5.56948717e-04 4.94574109e-04 3.21894588e-03 7.18197378e-01 2.10566615e+03 -1.41300000e-04 4.08599009e-02 1.65784358e-01 7.08608015e-02 5.68054516e-04 4.98622984e-04 3.23088412e-03 7.18197378e-01 2.10693285e+03 -1.41400000e-04 4.07730682e-02 1.65589131e-01 7.11153664e-02 5.79431484e-04 5.02720268e-04 3.24290484e-03 7.18197378e-01 2.10948022e+03 -1.41500000e-04 4.06856176e-02 1.65392609e-01 7.13714323e-02 5.91087161e-04 5.06866728e-04 3.25500887e-03 7.18197378e-01 2.11204637e+03 -1.41600000e-04 4.05975427e-02 1.65194783e-01 7.16290069e-02 6.03029314e-04 5.11063142e-04 3.26719703e-03 7.18197378e-01 2.11394790e+03 -1.41700000e-04 4.05088370e-02 1.64995641e-01 7.18880978e-02 6.15265941e-04 5.15310303e-04 3.27947016e-03 7.18197378e-01 2.11585977e+03 -1.41800000e-04 4.04194940e-02 1.64795172e-01 7.21487125e-02 6.27805282e-04 5.19609021e-04 3.29182911e-03 7.18197378e-01 2.11874710e+03 -1.41900000e-04 4.03295073e-02 1.64593366e-01 7.24108583e-02 6.40655824e-04 5.23960119e-04 3.30427472e-03 7.18197378e-01 2.12028119e+03 -1.42000000e-04 4.02388700e-02 1.64390211e-01 7.26745423e-02 6.53826310e-04 5.28364437e-04 3.31680787e-03 7.18197378e-01 2.12336928e+03 -1.42100000e-04 4.01475756e-02 1.64185697e-01 7.29397713e-02 6.67325746e-04 5.32822828e-04 3.32942940e-03 7.18197378e-01 2.12492333e+03 -1.42200000e-04 4.00556172e-02 1.63979813e-01 7.32065522e-02 6.81163408e-04 5.37336166e-04 3.34214022e-03 7.18197378e-01 2.12762144e+03 -1.42300000e-04 3.99629880e-02 1.63772548e-01 7.34748913e-02 6.95348852e-04 5.41905335e-04 3.35494118e-03 7.18197378e-01 2.13015735e+03 -1.42400000e-04 3.98696811e-02 1.63563890e-01 7.37447948e-02 7.09891921e-04 5.46531242e-04 3.36783320e-03 7.18197378e-01 2.13185779e+03 -1.42500000e-04 3.97756894e-02 1.63353829e-01 7.40162687e-02 7.24802752e-04 5.51214806e-04 3.38081717e-03 7.18197378e-01 2.13480682e+03 -1.42600000e-04 3.96810061e-02 1.63142354e-01 7.42893188e-02 7.40091790e-04 5.55956966e-04 3.39389399e-03 7.18197378e-01 2.13667567e+03 -1.42700000e-04 3.95856239e-02 1.62929455e-01 7.45639505e-02 7.55769791e-04 5.60758679e-04 3.40706459e-03 7.18197378e-01 2.14005926e+03 -1.42800000e-04 3.94895356e-02 1.62715119e-01 7.48401688e-02 7.71847835e-04 5.65620917e-04 3.42032989e-03 7.18197378e-01 2.14220391e+03 -1.42900000e-04 3.93927341e-02 1.62499337e-01 7.51179786e-02 7.88337334e-04 5.70544674e-04 3.43369081e-03 7.18197378e-01 2.14395116e+03 -1.43000000e-04 3.92952119e-02 1.62282096e-01 7.53973844e-02 8.05250042e-04 5.75530960e-04 3.44714829e-03 7.18197378e-01 2.14747001e+03 -1.43100000e-04 3.91969618e-02 1.62063388e-01 7.56783903e-02 8.22598064e-04 5.80580806e-04 3.46070329e-03 7.18197378e-01 2.14924168e+03 -1.43200000e-04 3.90979763e-02 1.61843200e-01 7.59610001e-02 8.40393869e-04 5.85695260e-04 3.47435675e-03 7.18197378e-01 2.15280967e+03 -1.43300000e-04 3.89982478e-02 1.61621522e-01 7.62452171e-02 8.58650294e-04 5.90875393e-04 3.48810963e-03 7.18197378e-01 2.15460608e+03 -1.43400000e-04 3.88977688e-02 1.61398343e-01 7.65310444e-02 8.77380563e-04 5.96122294e-04 3.50196290e-03 7.18197378e-01 2.15641081e+03 -1.43500000e-04 3.87965316e-02 1.61173653e-01 7.68184846e-02 8.96598291e-04 6.01437071e-04 3.51591753e-03 7.18197378e-01 2.16004536e+03 -1.43600000e-04 3.86945286e-02 1.60947441e-01 7.71075397e-02 9.16317498e-04 6.06820857e-04 3.52997451e-03 7.18197378e-01 2.16187527e+03 -1.43700000e-04 3.85917520e-02 1.60719697e-01 7.73982114e-02 9.36552620e-04 6.12274803e-04 3.54413482e-03 7.18197378e-01 2.16464736e+03 -1.43800000e-04 3.84881939e-02 1.60490409e-01 7.76905009e-02 9.57318518e-04 6.17800082e-04 3.55839944e-03 7.18197378e-01 2.16838631e+03 -1.43900000e-04 3.83838466e-02 1.60259569e-01 7.79844089e-02 9.78630493e-04 6.23397889e-04 3.57276939e-03 7.18197378e-01 2.17026883e+03 -1.44000000e-04 3.82787020e-02 1.60027165e-01 7.82799355e-02 1.00050430e-03 6.29069444e-04 3.58724566e-03 7.18197378e-01 2.17216009e+03 -1.44100000e-04 3.81727522e-02 1.59793188e-01 7.85770804e-02 1.02295614e-03 6.34815986e-04 3.60182926e-03 7.18197378e-01 2.17596898e+03 -1.44200000e-04 3.80659890e-02 1.59557628e-01 7.88758426e-02 1.04600272e-03 6.40638779e-04 3.61652122e-03 7.18197378e-01 2.17788667e+03 -1.44300000e-04 3.79584045e-02 1.59320474e-01 7.91762204e-02 1.06966119e-03 6.46539111e-04 3.63132254e-03 7.18197378e-01 2.17981323e+03 -1.44400000e-04 3.78499905e-02 1.59081718e-01 7.94782118e-02 1.09394925e-03 6.52518294e-04 3.64623426e-03 7.18197378e-01 2.18369308e+03 -1.44500000e-04 3.77407387e-02 1.58841349e-01 7.97818139e-02 1.11888506e-03 6.58577662e-04 3.66125740e-03 7.18197378e-01 2.18612402e+03 -1.44600000e-04 3.76306409e-02 1.58599359e-01 8.00870231e-02 1.14448734e-03 6.64718576e-04 3.67639300e-03 7.18197378e-01 2.18818744e+03 -1.44700000e-04 3.75196889e-02 1.58355738e-01 8.03938353e-02 1.17077534e-03 6.70942423e-04 3.69164209e-03 7.18197378e-01 2.19174208e+03 -1.44800000e-04 3.74078742e-02 1.58110477e-01 8.07022455e-02 1.19776886e-03 6.77250613e-04 3.70700571e-03 7.18197378e-01 2.19412811e+03 -1.44900000e-04 3.72951885e-02 1.57863568e-01 8.10122480e-02 1.22548824e-03 6.83644584e-04 3.72248492e-03 7.18197378e-01 2.19652721e+03 -1.45000000e-04 3.71816234e-02 1.57615001e-01 8.13238363e-02 1.25395444e-03 6.90125799e-04 3.73808074e-03 7.18197378e-01 2.19893941e+03 -1.45100000e-04 3.70671704e-02 1.57364770e-01 8.16370031e-02 1.28318897e-03 6.96695749e-04 3.75379424e-03 7.18197378e-01 2.20252516e+03 -1.45200000e-04 3.69518211e-02 1.57112864e-01 8.19517403e-02 1.31321397e-03 7.03355952e-04 3.76962646e-03 7.18197378e-01 2.20523334e+03 -1.45300000e-04 3.68355669e-02 1.56859278e-01 8.22680389e-02 1.34405218e-03 7.10107953e-04 3.78557845e-03 7.18197378e-01 2.20795776e+03 -1.45400000e-04 3.67183993e-02 1.56604002e-01 8.25858888e-02 1.37572698e-03 7.16953325e-04 3.80165127e-03 7.18197378e-01 2.21069845e+03 -1.45500000e-04 3.66003097e-02 1.56347031e-01 8.29052794e-02 1.40826237e-03 7.23893671e-04 3.81784596e-03 7.18197378e-01 2.21338172e+03 -1.45600000e-04 3.64812896e-02 1.56088357e-01 8.32261986e-02 1.44168305e-03 7.30930620e-04 3.83416358e-03 7.18197378e-01 2.21654847e+03 -1.45700000e-04 3.63613303e-02 1.55827973e-01 8.35486337e-02 1.47601434e-03 7.38065833e-04 3.85060517e-03 7.18197378e-01 2.21999754e+03 -1.45800000e-04 3.62404232e-02 1.55565873e-01 8.38725709e-02 1.51128226e-03 7.45301000e-04 3.86717178e-03 7.18197378e-01 2.22291788e+03 -1.45900000e-04 3.61185597e-02 1.55302051e-01 8.41979951e-02 1.54751355e-03 7.52637839e-04 3.88386447e-03 7.18197378e-01 2.22646743e+03 -1.46000000e-04 3.59957313e-02 1.55036502e-01 8.45248904e-02 1.58473560e-03 7.60078101e-04 3.90068427e-03 7.18197378e-01 2.22825190e+03 -1.46100000e-04 3.58719292e-02 1.54769221e-01 8.48532396e-02 1.62297658e-03 7.67623566e-04 3.91763223e-03 7.18197378e-01 2.23184027e+03 -1.46200000e-04 3.57471448e-02 1.54500202e-01 8.51830243e-02 1.66226534e-03 7.75276047e-04 3.93470937e-03 7.18197378e-01 2.23545452e+03 -1.46300000e-04 3.56213696e-02 1.54229442e-01 8.55142250e-02 1.70263149e-03 7.83037386e-04 3.95191673e-03 7.18197378e-01 2.23727136e+03 -1.46400000e-04 3.54945950e-02 1.53956936e-01 8.58468209e-02 1.74410541e-03 7.90909459e-04 3.96925534e-03 7.18197378e-01 2.24092446e+03 -1.46500000e-04 3.53668124e-02 1.53682681e-01 8.61807900e-02 1.78671821e-03 7.98894173e-04 3.98672620e-03 7.18197378e-01 2.24555939e+03 -1.46600000e-04 3.52380133e-02 1.53406674e-01 8.65161090e-02 1.83050180e-03 8.06993469e-04 4.00433033e-03 7.18197378e-01 2.24837294e+03 -1.46700000e-04 3.51081892e-02 1.53128913e-01 8.68527531e-02 1.87548886e-03 8.15209318e-04 4.02206874e-03 7.18197378e-01 2.25120134e+03 -1.46800000e-04 3.49773315e-02 1.52849395e-01 8.71906963e-02 1.92171285e-03 8.23543728e-04 4.03994240e-03 7.18197378e-01 2.25404457e+03 -1.46900000e-04 3.48454320e-02 1.52568120e-01 8.75299113e-02 1.96920805e-03 8.31998737e-04 4.05795230e-03 7.18197378e-01 2.25690259e+03 -1.47000000e-04 3.47124822e-02 1.52285086e-01 8.78703690e-02 2.01800953e-03 8.40576419e-04 4.07609942e-03 7.18197378e-01 2.25977538e+03 -1.47100000e-04 3.45784738e-02 1.52000292e-01 8.82120392e-02 2.06815318e-03 8.49278881e-04 4.09438470e-03 7.18197378e-01 2.26186272e+03 -1.47200000e-04 3.44433987e-02 1.51713740e-01 8.85548899e-02 2.11967570e-03 8.58108265e-04 4.11280910e-03 7.18197378e-01 2.26636201e+03 -1.47300000e-04 3.43072486e-02 1.51425431e-01 8.88988879e-02 2.17261462e-03 8.67066747e-04 4.13137354e-03 7.18197378e-01 2.26938106e+03 -1.47400000e-04 3.41700156e-02 1.51135365e-01 8.92439982e-02 2.22700830e-03 8.76156537e-04 4.15007892e-03 7.18197378e-01 2.27241565e+03 -1.47500000e-04 3.40316915e-02 1.50843544e-01 8.95901842e-02 2.28289590e-03 8.85379883e-04 4.16892616e-03 7.18197378e-01 2.27465040e+03 -1.47600000e-04 3.38922685e-02 1.50549973e-01 8.99374079e-02 2.34031745e-03 8.94739064e-04 4.18791612e-03 7.18197378e-01 2.27801806e+03 -1.47700000e-04 3.37517389e-02 1.50254654e-01 9.02856295e-02 2.39931377e-03 9.04236397e-04 4.20704967e-03 7.18197378e-01 2.28140425e+03 -1.47800000e-04 3.36100950e-02 1.49957591e-01 9.06348074e-02 2.45992652e-03 9.13874233e-04 4.22632763e-03 7.18197378e-01 2.28480885e+03 -1.47900000e-04 3.34673293e-02 1.49658790e-01 9.09848987e-02 2.52219818e-03 9.23654960e-04 4.24575083e-03 7.18197378e-01 2.28791724e+03 -1.48000000e-04 3.33234344e-02 1.49358256e-01 9.13358584e-02 2.58617206e-03 9.33581000e-04 4.26532006e-03 7.18197378e-01 2.29159062e+03 -1.48100000e-04 3.31784030e-02 1.49055996e-01 9.16876399e-02 2.65189226e-03 9.43654812e-04 4.28503607e-03 7.18197378e-01 2.29503381e+03 -1.48200000e-04 3.30322280e-02 1.48752017e-01 9.20401950e-02 2.71940370e-03 9.53878889e-04 4.30489962e-03 7.18197378e-01 2.29787470e+03 -1.48300000e-04 3.28849026e-02 1.48446327e-01 9.23934736e-02 2.78875209e-03 9.64255762e-04 4.32491141e-03 7.18197378e-01 2.30300355e+03 -1.48400000e-04 3.27364200e-02 1.48138934e-01 9.27474237e-02 2.85998390e-03 9.74787996e-04 4.34507213e-03 7.18197378e-01 2.30558206e+03 -1.48500000e-04 3.25867735e-02 1.47829850e-01 9.31019918e-02 2.93314638e-03 9.85478192e-04 4.36538242e-03 7.18197378e-01 2.30816987e+03 -1.48600000e-04 3.24359570e-02 1.47519083e-01 9.34571223e-02 3.00828754e-03 9.96328985e-04 4.38584291e-03 7.18197378e-01 2.31337303e+03 -1.48700000e-04 3.22839641e-02 1.47206647e-01 9.38127580e-02 3.08545610e-03 1.00734305e-03 4.40645418e-03 7.18197378e-01 2.31598820e+03 -1.48800000e-04 3.21307891e-02 1.46892552e-01 9.41688398e-02 3.16470151e-03 1.01852309e-03 4.42721678e-03 7.18197378e-01 2.31861230e+03 -1.48900000e-04 3.19764262e-02 1.46576812e-01 9.45253067e-02 3.24607388e-03 1.02987184e-03 4.44813122e-03 7.18197378e-01 2.32388694e+03 -1.49000000e-04 3.18208699e-02 1.46259442e-01 9.48820962e-02 3.32962401e-03 1.04139210e-03 4.46919797e-03 7.18197378e-01 2.32653726e+03 -1.49100000e-04 3.16641150e-02 1.45940456e-01 9.52391437e-02 3.41540332e-03 1.05308665e-03 4.49041747e-03 7.18197378e-01 2.32919611e+03 -1.49200000e-04 3.15061568e-02 1.45619870e-01 9.55963828e-02 3.50346381e-03 1.06495836e-03 4.51179010e-03 7.18197378e-01 2.33453893e+03 -1.49300000e-04 3.13469904e-02 1.45297702e-01 9.59537455e-02 3.59385810e-03 1.07701009e-03 4.53331620e-03 7.18197378e-01 2.33722267e+03 -1.49400000e-04 3.11866116e-02 1.44973968e-01 9.63111620e-02 3.68663928e-03 1.08924476e-03 4.55499608e-03 7.18197378e-01 2.33991447e+03 -1.49500000e-04 3.10250163e-02 1.44648689e-01 9.66685606e-02 3.78186100e-03 1.10166532e-03 4.57682999e-03 7.18197378e-01 2.34365945e+03 -1.49600000e-04 3.08622009e-02 1.44321883e-01 9.70258681e-02 3.87957730e-03 1.11427473e-03 4.59881812e-03 7.18197378e-01 2.34741932e+03 -1.49700000e-04 3.06981619e-02 1.43993572e-01 9.73830094e-02 3.97984267e-03 1.12707602e-03 4.62096062e-03 7.18197378e-01 2.35149748e+03 -1.49800000e-04 3.05328963e-02 1.43663776e-01 9.77399078e-02 4.08271194e-03 1.14007221e-03 4.64325759e-03 7.18197378e-01 2.35559213e+03 -1.49900000e-04 3.03664015e-02 1.43332520e-01 9.80964851e-02 4.18824027e-03 1.15326638e-03 4.66570906e-03 7.18197378e-01 2.35764547e+03 -1.50000000e-04 3.01986752e-02 1.42999826e-01 9.84526614e-02 4.29648306e-03 1.16666162e-03 4.68831503e-03 7.18197378e-01 2.36176390e+03 -1.50100000e-04 3.00297155e-02 1.42665719e-01 9.88083553e-02 4.40749592e-03 1.18026107e-03 4.71107540e-03 7.18197378e-01 2.36589754e+03 -1.50200000e-04 2.98595209e-02 1.42330225e-01 9.91634838e-02 4.52133461e-03 1.19406788e-03 4.73399005e-03 7.18197378e-01 2.37004585e+03 -1.50300000e-04 2.96880902e-02 1.41993370e-01 9.95179627e-02 4.63805496e-03 1.20808523e-03 4.75705877e-03 7.18197378e-01 2.37212533e+03 -1.50400000e-04 2.95154230e-02 1.41655183e-01 9.98717062e-02 4.75771283e-03 1.22231634e-03 4.78028130e-03 7.18197378e-01 2.37629460e+03 -1.50500000e-04 2.93415188e-02 1.41315690e-01 1.00224627e-01 4.88036403e-03 1.23676443e-03 4.80365730e-03 7.18197378e-01 2.37967561e+03 -1.50600000e-04 2.91663781e-02 1.40974923e-01 1.00576638e-01 5.00606425e-03 1.25143278e-03 4.82718637e-03 7.18197378e-01 2.38318230e+03 -1.50700000e-04 2.89900014e-02 1.40632911e-01 1.00927648e-01 5.13486900e-03 1.26632465e-03 4.85086805e-03 7.18197378e-01 2.38669756e+03 -1.50800000e-04 2.88123901e-02 1.40289686e-01 1.01277567e-01 5.26683352e-03 1.28144336e-03 4.87470179e-03 7.18197378e-01 2.39022103e+03 -1.50900000e-04 2.86335458e-02 1.39945280e-01 1.01626304e-01 5.40201272e-03 1.29679224e-03 4.89868697e-03 7.18197378e-01 2.39396653e+03 -1.51000000e-04 2.84534708e-02 1.39599727e-01 1.01973766e-01 5.54046109e-03 1.31237462e-03 4.92282291e-03 7.18197378e-01 2.39793507e+03 -1.51100000e-04 2.82721677e-02 1.39253059e-01 1.02319860e-01 5.68223260e-03 1.32819387e-03 4.94710882e-03 7.18197378e-01 2.40339308e+03 -1.51200000e-04 2.80896398e-02 1.38905313e-01 1.02664491e-01 5.82738069e-03 1.34425338e-03 4.97154388e-03 7.18197378e-01 2.40537610e+03 -1.51300000e-04 2.79058909e-02 1.38556524e-01 1.03007565e-01 5.97595809e-03 1.36055653e-03 4.99612714e-03 7.18197378e-01 2.40934781e+03 -1.51400000e-04 2.77209254e-02 1.38206729e-01 1.03348987e-01 6.12801679e-03 1.37710675e-03 5.02085760e-03 7.18197378e-01 2.41332660e+03 -1.51500000e-04 2.75347483e-02 1.37855965e-01 1.03688660e-01 6.28360796e-03 1.39390746e-03 5.04573417e-03 7.18197378e-01 2.41731190e+03 -1.51600000e-04 2.73473650e-02 1.37504270e-01 1.04026488e-01 6.44278183e-03 1.41096208e-03 5.07075567e-03 7.18197378e-01 2.42130310e+03 -1.51700000e-04 2.71587817e-02 1.37151684e-01 1.04362374e-01 6.60558761e-03 1.42827407e-03 5.09592082e-03 7.18197378e-01 2.42529962e+03 -1.51800000e-04 2.69690051e-02 1.36798245e-01 1.04696223e-01 6.77207342e-03 1.44584688e-03 5.12122830e-03 7.18197378e-01 2.42930086e+03 -1.51900000e-04 2.67780425e-02 1.36443996e-01 1.05027937e-01 6.94228616e-03 1.46368397e-03 5.14667664e-03 7.18197378e-01 2.43330619e+03 -1.52000000e-04 2.65859019e-02 1.36088976e-01 1.05357420e-01 7.11627147e-03 1.48178881e-03 5.17226432e-03 7.18197378e-01 2.43531020e+03 -1.52100000e-04 2.63925918e-02 1.35733227e-01 1.05684575e-01 7.29407359e-03 1.50016486e-03 5.19798973e-03 7.18197378e-01 2.43932053e+03 -1.52200000e-04 2.61981215e-02 1.35376793e-01 1.06009306e-01 7.47573530e-03 1.51881558e-03 5.22385114e-03 7.18197378e-01 2.44370958e+03 -1.52300000e-04 2.60025008e-02 1.35019715e-01 1.06331517e-01 7.66129781e-03 1.53774446e-03 5.24984675e-03 7.18197378e-01 2.44810085e+03 -1.52400000e-04 2.58057403e-02 1.34662037e-01 1.06651114e-01 7.85080069e-03 1.55695496e-03 5.27597467e-03 7.18197378e-01 2.45249351e+03 -1.52500000e-04 2.56078511e-02 1.34303804e-01 1.06968001e-01 8.04428175e-03 1.57645053e-03 5.30223288e-03 7.18197378e-01 2.45469009e+03 -1.52600000e-04 2.54088452e-02 1.33945060e-01 1.07282086e-01 8.24177701e-03 1.59623463e-03 5.32861931e-03 7.18197378e-01 2.45908325e+03 -1.52700000e-04 2.52087350e-02 1.33585850e-01 1.07593274e-01 8.44332052e-03 1.61631071e-03 5.35513177e-03 7.18197378e-01 2.46347568e+03 -1.52800000e-04 2.50075337e-02 1.33226220e-01 1.07901474e-01 8.64894438e-03 1.63668221e-03 5.38176797e-03 7.18197378e-01 2.46567137e+03 -1.52900000e-04 2.48052553e-02 1.32866214e-01 1.08206596e-01 8.85867857e-03 1.65735255e-03 5.40852554e-03 7.18197378e-01 2.47006114e+03 -1.53000000e-04 2.46019143e-02 1.32505880e-01 1.08508550e-01 9.07255094e-03 1.67832515e-03 5.43540199e-03 7.18197378e-01 2.47444807e+03 -1.53100000e-04 2.43975261e-02 1.32145263e-01 1.08807248e-01 9.29058706e-03 1.69960339e-03 5.46239475e-03 7.18197378e-01 2.47883132e+03 -1.53200000e-04 2.41921065e-02 1.31784411e-01 1.09102603e-01 9.51281020e-03 1.72119065e-03 5.48950115e-03 7.18197378e-01 2.48102130e+03 -1.53300000e-04 2.39856722e-02 1.31423370e-01 1.09394530e-01 9.73924124e-03 1.74309029e-03 5.51671841e-03 7.18197378e-01 2.48539744e+03 -1.53400000e-04 2.37782407e-02 1.31062188e-01 1.09682945e-01 9.96989858e-03 1.76530564e-03 5.54404368e-03 7.18197378e-01 2.48976779e+03 -1.53500000e-04 2.35698299e-02 1.30700912e-01 1.09967768e-01 1.02047981e-02 1.78784002e-03 5.57147397e-03 7.18197378e-01 2.49195053e+03 -1.53600000e-04 2.33604587e-02 1.30339589e-01 1.10248918e-01 1.04439531e-02 1.81069670e-03 5.59900624e-03 7.18197378e-01 2.49631062e+03 -1.53700000e-04 2.31501465e-02 1.29978268e-01 1.10526318e-01 1.06873742e-02 1.83387893e-03 5.62663731e-03 7.18197378e-01 2.50066283e+03 -1.53800000e-04 2.29389134e-02 1.29616995e-01 1.10799891e-01 1.09350693e-02 1.85738995e-03 5.65436394e-03 7.18197378e-01 2.50500634e+03 -1.53900000e-04 2.27267802e-02 1.29255818e-01 1.11069565e-01 1.11870436e-02 1.88123293e-03 5.68218277e-03 7.18197378e-01 2.50717457e+03 -1.54000000e-04 2.25137686e-02 1.28894785e-01 1.11335268e-01 1.14432993e-02 1.90541103e-03 5.71009035e-03 7.18197378e-01 2.51150350e+03 -1.54100000e-04 2.22999007e-02 1.28533943e-01 1.11596932e-01 1.17038361e-02 1.92992737e-03 5.73808314e-03 7.18197378e-01 2.51582169e+03 -1.54200000e-04 2.20851995e-02 1.28173341e-01 1.11854489e-01 1.19686504e-02 1.95478503e-03 5.76615751e-03 7.18197378e-01 2.52012836e+03 -1.54300000e-04 2.18696884e-02 1.27813025e-01 1.12107876e-01 1.22377359e-02 1.97998704e-03 5.79430972e-03 7.18197378e-01 2.52227713e+03 -1.54400000e-04 2.16533918e-02 1.27453043e-01 1.12357032e-01 1.25110833e-02 2.00553639e-03 5.82253596e-03 7.18197378e-01 2.52656504e+03 -1.54500000e-04 2.14363346e-02 1.27093442e-01 1.12601897e-01 1.27886803e-02 2.03143603e-03 5.85083232e-03 7.18197378e-01 2.53083947e+03 -1.54600000e-04 2.12185423e-02 1.26734268e-01 1.12842416e-01 1.30705115e-02 2.05768887e-03 5.87919481e-03 7.18197378e-01 2.53297141e+03 -1.54700000e-04 2.10000411e-02 1.26375570e-01 1.13078535e-01 1.33565585e-02 2.08429774e-03 5.90761932e-03 7.18197378e-01 2.53835099e+03 -1.54800000e-04 2.07808580e-02 1.26017393e-01 1.13310204e-01 1.36468000e-02 2.11126544e-03 5.93610169e-03 7.18197378e-01 2.54159320e+03 -1.54900000e-04 2.05610203e-02 1.25659784e-01 1.13537374e-01 1.39412114e-02 2.13859473e-03 5.96463767e-03 7.18197378e-01 2.54482597e+03 -1.55000000e-04 2.03405563e-02 1.25302789e-01 1.13760001e-01 1.42397652e-02 2.16628828e-03 5.99322290e-03 7.18197378e-01 2.54804899e+03 -1.55100000e-04 2.01194946e-02 1.24946453e-01 1.13978042e-01 1.45424308e-02 2.19434872e-03 6.02185298e-03 7.18197378e-01 2.55126195e+03 -1.55200000e-04 1.98978646e-02 1.24590821e-01 1.14191460e-01 1.48491745e-02 2.22277863e-03 6.05052338e-03 7.18197378e-01 2.55765642e+03 -1.55300000e-04 1.96756961e-02 1.24235940e-01 1.14400217e-01 1.51599596e-02 2.25158051e-03 6.07922955e-03 7.18197378e-01 2.56083734e+03 -1.55400000e-04 1.94530198e-02 1.23881853e-01 1.14604280e-01 1.54747462e-02 2.28075681e-03 6.10796680e-03 7.18197378e-01 2.56400697e+03 -1.55500000e-04 1.92298667e-02 1.23528605e-01 1.14803619e-01 1.57934915e-02 2.31030991e-03 6.13673042e-03 7.18197378e-01 2.56716504e+03 -1.55600000e-04 1.90062684e-02 1.23176239e-01 1.14998207e-01 1.61161498e-02 2.34024211e-03 6.16551561e-03 7.18197378e-01 2.57031125e+03 -1.55700000e-04 1.87822570e-02 1.22824800e-01 1.15188020e-01 1.64426722e-02 2.37055566e-03 6.19431747e-03 7.18197378e-01 2.57346583e+03 -1.55800000e-04 1.85578653e-02 1.22474330e-01 1.15373036e-01 1.67730069e-02 2.40125273e-03 6.22313108e-03 7.18197378e-01 2.57718514e+03 -1.55900000e-04 1.83331265e-02 1.22124872e-01 1.15553237e-01 1.71070993e-02 2.43233542e-03 6.25195143e-03 7.18197378e-01 2.57965465e+03 -1.56000000e-04 1.81080743e-02 1.21776469e-01 1.15728608e-01 1.74448917e-02 2.46380576e-03 6.28077344e-03 7.18197378e-01 2.58334357e+03 -1.56100000e-04 1.78827430e-02 1.21429161e-01 1.15899136e-01 1.77863237e-02 2.49566569e-03 6.30959197e-03 7.18197378e-01 2.58701367e+03 -1.56200000e-04 1.76571671e-02 1.21082991e-01 1.16064813e-01 1.81313320e-02 2.52791708e-03 6.33840184e-03 7.18197378e-01 2.59066453e+03 -1.56300000e-04 1.74313819e-02 1.20737999e-01 1.16225631e-01 1.84798506e-02 2.56056173e-03 6.36719779e-03 7.18197378e-01 2.59429573e+03 -1.56400000e-04 1.72054229e-02 1.20394226e-01 1.16381586e-01 1.88318108e-02 2.59360135e-03 6.39597452e-03 7.18197378e-01 2.59790686e+03 -1.56500000e-04 1.69793261e-02 1.20051711e-01 1.16532679e-01 1.91871411e-02 2.62703757e-03 6.42472667e-03 7.18197378e-01 2.60030295e+03 -1.56600000e-04 1.67531280e-02 1.19710494e-01 1.16678912e-01 1.95457674e-02 2.66087194e-03 6.45344884e-03 7.18197378e-01 2.60387979e+03 -1.56700000e-04 1.65268654e-02 1.19370614e-01 1.16820288e-01 1.99076131e-02 2.69510591e-03 6.48213556e-03 7.18197378e-01 2.60743554e+03 -1.56800000e-04 1.63005754e-02 1.19032110e-01 1.16956816e-01 2.02725992e-02 2.72974085e-03 6.51078134e-03 7.18197378e-01 2.61096984e+03 -1.56900000e-04 1.60742957e-02 1.18695018e-01 1.17088506e-01 2.06406440e-02 2.76477807e-03 6.53938063e-03 7.18197378e-01 2.61526524e+03 -1.57000000e-04 1.58480642e-02 1.18359377e-01 1.17215371e-01 2.10116636e-02 2.80021875e-03 6.56792786e-03 7.18197378e-01 2.61720963e+03 -1.57100000e-04 1.56219190e-02 1.18025224e-01 1.17337426e-01 2.13855716e-02 2.83606401e-03 6.59641740e-03 7.18197378e-01 2.62107750e+03 -1.57200000e-04 1.53958988e-02 1.17692595e-01 1.17454690e-01 2.17622796e-02 2.87231485e-03 6.62484359e-03 7.18197378e-01 2.62491711e+03 -1.57300000e-04 1.51700424e-02 1.17361526e-01 1.17567184e-01 2.21416967e-02 2.90897221e-03 6.65320076e-03 7.18197378e-01 2.62682618e+03 -1.57400000e-04 1.49443890e-02 1.17032053e-01 1.17674930e-01 2.25237301e-02 2.94603691e-03 6.68148317e-03 7.18197378e-01 2.63062259e+03 -1.57500000e-04 1.47189780e-02 1.16704211e-01 1.17777954e-01 2.29082849e-02 2.98350969e-03 6.70968509e-03 7.18197378e-01 2.63438969e+03 -1.57600000e-04 1.44938490e-02 1.16378033e-01 1.17876284e-01 2.32952641e-02 3.02139120e-03 6.73780074e-03 7.18197378e-01 2.63812708e+03 -1.57700000e-04 1.42690419e-02 1.16053555e-01 1.17969950e-01 2.36845689e-02 3.05968197e-03 6.76582433e-03 7.18197378e-01 2.63998451e+03 -1.57800000e-04 1.40445968e-02 1.15730810e-01 1.18058984e-01 2.40760986e-02 3.09838246e-03 6.79375004e-03 7.18197378e-01 2.64367662e+03 -1.57900000e-04 1.38205541e-02 1.15409831e-01 1.18143421e-01 2.44697508e-02 3.13749300e-03 6.82157205e-03 7.18197378e-01 2.64619155e+03 -1.58000000e-04 1.35969541e-02 1.15090650e-01 1.18223298e-01 2.48654212e-02 3.17701386e-03 6.84928450e-03 7.18197378e-01 2.64993667e+03 -1.58100000e-04 1.33738377e-02 1.14773301e-01 1.18298653e-01 2.52630041e-02 3.21694517e-03 6.87688154e-03 7.18197378e-01 2.65319605e+03 -1.58200000e-04 1.31512456e-02 1.14457813e-01 1.18369527e-01 2.56623922e-02 3.25728700e-03 6.90435730e-03 7.18197378e-01 2.65629616e+03 -1.58300000e-04 1.29292187e-02 1.14144220e-01 1.18435962e-01 2.60634765e-02 3.29803927e-03 6.93170589e-03 7.18197378e-01 2.65828253e+03 -1.58400000e-04 1.27077980e-02 1.13832551e-01 1.18498003e-01 2.64661469e-02 3.33920186e-03 6.95892144e-03 7.18197378e-01 2.66222536e+03 -1.58500000e-04 1.24870249e-02 1.13522838e-01 1.18555695e-01 2.68702918e-02 3.38077448e-03 6.98599806e-03 7.18197378e-01 2.66418171e+03 -1.58600000e-04 1.22669404e-02 1.13215109e-01 1.18609088e-01 2.72757983e-02 3.42275679e-03 7.01292985e-03 7.18197378e-01 2.66806404e+03 -1.58700000e-04 1.20475860e-02 1.12909395e-01 1.18658229e-01 2.76825525e-02 3.46514833e-03 7.03971094e-03 7.18197378e-01 2.66998992e+03 -1.58800000e-04 1.18290030e-02 1.12605725e-01 1.18703171e-01 2.80904391e-02 3.50794852e-03 7.06633543e-03 7.18197378e-01 2.67381088e+03 -1.58900000e-04 1.16112328e-02 1.12304127e-01 1.18743966e-01 2.84993420e-02 3.55115670e-03 7.09279746e-03 7.18197378e-01 2.67570586e+03 -1.59000000e-04 1.13943169e-02 1.12004630e-01 1.18780668e-01 2.89091441e-02 3.59477208e-03 7.11909115e-03 7.18197378e-01 2.67895343e+03 -1.59100000e-04 1.11782967e-02 1.11707261e-01 1.18813332e-01 2.93197273e-02 3.63879379e-03 7.14521064e-03 7.18197378e-01 2.68183850e+03 -1.59200000e-04 1.09632137e-02 1.11412049e-01 1.18842016e-01 2.97309726e-02 3.68322085e-03 7.17115008e-03 7.18197378e-01 2.68469835e+03 -1.59300000e-04 1.07491093e-02 1.11119020e-01 1.18866776e-01 3.01427605e-02 3.72805216e-03 7.19690365e-03 7.18197378e-01 2.68725605e+03 -1.59400000e-04 1.05360249e-02 1.10828201e-01 1.18887673e-01 3.05549707e-02 3.77328653e-03 7.22246553e-03 7.18197378e-01 2.68990279e+03 -1.59500000e-04 1.03240019e-02 1.10539619e-01 1.18904767e-01 3.09674821e-02 3.81892264e-03 7.24782992e-03 7.18197378e-01 2.69252684e+03 -1.59600000e-04 1.01130815e-02 1.10253299e-01 1.18918118e-01 3.13801733e-02 3.86495911e-03 7.27299105e-03 7.18197378e-01 2.69531445e+03 -1.59700000e-04 9.90330498e-03 1.09969268e-01 1.18927790e-01 3.17929222e-02 3.91139441e-03 7.29794315e-03 7.18197378e-01 2.69798855e+03 -1.59800000e-04 9.69471342e-03 1.09687550e-01 1.18933845e-01 3.22056065e-02 3.95822692e-03 7.32268051e-03 7.18197378e-01 2.70062075e+03 -1.59900000e-04 9.48734787e-03 1.09408170e-01 1.18936348e-01 3.26181034e-02 4.00545492e-03 7.34719742e-03 7.18197378e-01 2.70322834e+03 -1.60000000e-04 9.28124922e-03 1.09131154e-01 1.18935364e-01 3.30302899e-02 4.05307658e-03 7.37148820e-03 7.18197378e-01 2.70581122e+03 -1.60100000e-04 9.07645826e-03 1.08856525e-01 1.18930959e-01 3.34420425e-02 4.10108996e-03 7.39554722e-03 7.18197378e-01 2.70836927e+03 -1.60200000e-04 8.87301562e-03 1.08584308e-01 1.18923199e-01 3.38532380e-02 4.14949303e-03 7.41936885e-03 7.18197378e-01 2.71118849e+03 -1.60300000e-04 8.67096179e-03 1.08314526e-01 1.18912151e-01 3.42637526e-02 4.19828363e-03 7.44294753e-03 7.18197378e-01 2.71432016e+03 -1.60400000e-04 8.47033709e-03 1.08047202e-01 1.18897883e-01 3.46734629e-02 4.24745953e-03 7.46627771e-03 7.18197378e-01 2.71686994e+03 -1.60500000e-04 8.27118165e-03 1.07782360e-01 1.18880463e-01 3.50822452e-02 4.29701835e-03 7.48935388e-03 7.18197378e-01 2.71939287e+03 -1.60600000e-04 8.07353543e-03 1.07520023e-01 1.18859960e-01 3.54899760e-02 4.34695765e-03 7.51217058e-03 7.18197378e-01 2.72109511e+03 -1.60700000e-04 7.87743818e-03 1.07260212e-01 1.18836443e-01 3.58965319e-02 4.39727487e-03 7.53472238e-03 7.18197378e-01 2.72446202e+03 -1.60800000e-04 7.68292944e-03 1.07002950e-01 1.18809981e-01 3.63017898e-02 4.44796733e-03 7.55700390e-03 7.18197378e-01 2.72612663e+03 -1.60900000e-04 7.49004852e-03 1.06748260e-01 1.18780645e-01 3.67056265e-02 4.49903227e-03 7.57900979e-03 7.18197378e-01 2.72941802e+03 -1.61000000e-04 7.29883452e-03 1.06496162e-01 1.18748505e-01 3.71079195e-02 4.55046682e-03 7.60073477e-03 7.18197378e-01 2.73104474e+03 -1.61100000e-04 7.10932626e-03 1.06246678e-01 1.18713630e-01 3.75085464e-02 4.60226800e-03 7.62217357e-03 7.18197378e-01 2.73426009e+03 -1.61200000e-04 6.92156234e-03 1.05999829e-01 1.18676092e-01 3.79073853e-02 4.65443276e-03 7.64332101e-03 7.18197378e-01 2.73584867e+03 -1.61300000e-04 6.73558107e-03 1.05755635e-01 1.18635961e-01 3.83043146e-02 4.70695791e-03 7.66417192e-03 7.18197378e-01 2.73742448e+03 -1.61400000e-04 6.55142050e-03 1.05514119e-01 1.18593308e-01 3.86992134e-02 4.75984017e-03 7.68472121e-03 7.18197378e-01 2.74053772e+03 -1.61500000e-04 6.36911838e-03 1.05275299e-01 1.18548204e-01 3.90919612e-02 4.81307619e-03 7.70496383e-03 7.18197378e-01 2.74207508e+03 -1.61600000e-04 6.18871220e-03 1.05039196e-01 1.18500719e-01 3.94824380e-02 4.86666248e-03 7.72489478e-03 7.18197378e-01 2.74414600e+03 -1.61700000e-04 6.01023911e-03 1.04805830e-01 1.18450924e-01 3.98705247e-02 4.92059548e-03 7.74450911e-03 7.18197378e-01 2.74720760e+03 -1.61800000e-04 5.83373596e-03 1.04575220e-01 1.18398891e-01 4.02561026e-02 4.97487153e-03 7.76380195e-03 7.18197378e-01 2.74882159e+03 -1.61900000e-04 5.65923930e-03 1.04347385e-01 1.18344688e-01 4.06390539e-02 5.02948687e-03 7.78276846e-03 7.18197378e-01 2.75082413e+03 -1.62000000e-04 5.48678531e-03 1.04122346e-01 1.18288388e-01 4.10192615e-02 5.08443763e-03 7.80140387e-03 7.18197378e-01 2.75310142e+03 -1.62100000e-04 5.31640988e-03 1.03900120e-01 1.18230060e-01 4.13966092e-02 5.13971988e-03 7.81970346e-03 7.18197378e-01 2.75534632e+03 -1.62200000e-04 5.14814853e-03 1.03680726e-01 1.18169774e-01 4.17709813e-02 5.19532956e-03 7.83766260e-03 7.18197378e-01 2.75682488e+03 -1.62300000e-04 4.98203641e-03 1.03464184e-01 1.18107600e-01 4.21422635e-02 5.25126255e-03 7.85527667e-03 7.18197378e-01 2.75901559e+03 -1.62400000e-04 4.81810834e-03 1.03250510e-01 1.18043606e-01 4.25103419e-02 5.30751461e-03 7.87254116e-03 7.18197378e-01 2.76087839e+03 -1.62500000e-04 4.65639876e-03 1.03039723e-01 1.17977863e-01 4.28751039e-02 5.36408144e-03 7.88945160e-03 7.18197378e-01 2.76290678e+03 -1.62600000e-04 4.49694173e-03 1.02831842e-01 1.17910439e-01 4.32364379e-02 5.42095861e-03 7.90600359e-03 7.18197378e-01 2.76457441e+03 -1.62700000e-04 4.33977093e-03 1.02626882e-01 1.17841401e-01 4.35942330e-02 5.47814165e-03 7.92219278e-03 7.18197378e-01 2.76654828e+03 -1.62800000e-04 4.18491965e-03 1.02424863e-01 1.17770819e-01 4.39483797e-02 5.53562597e-03 7.93801491e-03 7.18197378e-01 2.76838878e+03 -1.62900000e-04 4.03242079e-03 1.02225801e-01 1.17698758e-01 4.42987695e-02 5.59340690e-03 7.95346577e-03 7.18197378e-01 2.77072459e+03 -1.63000000e-04 3.88230682e-03 1.02029712e-01 1.17625287e-01 4.46452949e-02 5.65147969e-03 7.96854122e-03 7.18197378e-01 2.77208091e+03 -1.63100000e-04 3.73460983e-03 1.01836615e-01 1.17550471e-01 4.49878498e-02 5.70983950e-03 7.98323720e-03 7.18197378e-01 2.77408615e+03 -1.63200000e-04 3.58936149e-03 1.01646525e-01 1.17474375e-01 4.53263289e-02 5.76848142e-03 7.99754970e-03 7.18197378e-01 2.77605626e+03 -1.63300000e-04 3.44659304e-03 1.01459459e-01 1.17397066e-01 4.56606286e-02 5.82740045e-03 8.01147480e-03 7.18197378e-01 2.77735010e+03 -1.63400000e-04 3.30633528e-03 1.01275433e-01 1.17318608e-01 4.59906461e-02 5.88659152e-03 8.02500863e-03 7.18197378e-01 2.77926145e+03 -1.63500000e-04 3.16861860e-03 1.01094463e-01 1.17239064e-01 4.63162803e-02 5.94604945e-03 8.03814741e-03 7.18197378e-01 2.78113743e+03 -1.63600000e-04 3.03347294e-03 1.00916565e-01 1.17158497e-01 4.66374310e-02 6.00576902e-03 8.05088741e-03 7.18197378e-01 2.78236839e+03 -1.63700000e-04 2.90092778e-03 1.00741754e-01 1.17076971e-01 4.69539995e-02 6.06574492e-03 8.06322500e-03 7.18197378e-01 2.78418524e+03 -1.63800000e-04 2.77101219e-03 1.00570046e-01 1.16994547e-01 4.72658886e-02 6.12597176e-03 8.07515660e-03 7.18197378e-01 2.78596648e+03 -1.63900000e-04 2.64375473e-03 1.00401456e-01 1.16911286e-01 4.75730022e-02 6.18644409e-03 8.08667872e-03 7.18197378e-01 2.78713416e+03 -1.64000000e-04 2.51918355e-03 1.00236000e-01 1.16827249e-01 4.78752458e-02 6.24715637e-03 8.09778792e-03 7.18197378e-01 2.78871572e+03 -1.64100000e-04 2.39732629e-03 1.00073691e-01 1.16742494e-01 4.81725263e-02 6.30810301e-03 8.10848087e-03 7.18197378e-01 2.79019922e+03 -1.64200000e-04 2.27821016e-03 9.99145458e-02 1.16657082e-01 4.84647520e-02 6.36927832e-03 8.11875429e-03 7.18197378e-01 2.79175873e+03 -1.64300000e-04 2.16186187e-03 9.97585776e-02 1.16571069e-01 4.87518326e-02 6.43067659e-03 8.12860497e-03 7.18197378e-01 2.79328644e+03 -1.64400000e-04 2.04830765e-03 9.96058010e-02 1.16484512e-01 4.90336796e-02 6.49229200e-03 8.13802981e-03 7.18197378e-01 2.79470573e+03 -1.64500000e-04 1.93757326e-03 9.94562302e-02 1.16397469e-01 4.93102055e-02 6.55411868e-03 8.14702576e-03 7.18197378e-01 2.79588195e+03 -1.64600000e-04 1.82968396e-03 9.93098791e-02 1.16309994e-01 4.95813249e-02 6.61615071e-03 8.15558984e-03 7.18197378e-01 2.79731485e+03 -1.64700000e-04 1.72466452e-03 9.91667616e-02 1.16222141e-01 4.98469535e-02 6.67838209e-03 8.16371917e-03 7.18197378e-01 2.79871598e+03 -1.64800000e-04 1.62253922e-03 9.90268913e-02 1.16133965e-01 5.01070089e-02 6.74080676e-03 8.17141094e-03 7.18197378e-01 2.80054380e+03 -1.64900000e-04 1.52333183e-03 9.88902816e-02 1.16045518e-01 5.03614101e-02 6.80341863e-03 8.17866242e-03 7.18197378e-01 2.80166045e+03 -1.65000000e-04 1.42706561e-03 9.87569456e-02 1.15956851e-01 5.06100777e-02 6.86621151e-03 8.18547095e-03 7.18197378e-01 2.80275453e+03 -1.65100000e-04 1.33376333e-03 9.86268966e-02 1.15868015e-01 5.08529342e-02 6.92917919e-03 8.19183395e-03 7.18197378e-01 2.80382599e+03 -1.65200000e-04 1.24344723e-03 9.85001473e-02 1.15779060e-01 5.10899033e-02 6.99231539e-03 8.19774894e-03 7.18197378e-01 2.80487479e+03 -1.65300000e-04 1.15613905e-03 9.83767106e-02 1.15690035e-01 5.13209107e-02 7.05561378e-03 8.20321349e-03 7.18197378e-01 2.80651514e+03 -1.65400000e-04 1.07185999e-03 9.82565988e-02 1.15600986e-01 5.15458838e-02 7.11906797e-03 8.20822528e-03 7.18197378e-01 2.80809652e+03 -1.65500000e-04 9.90630735e-04 9.81398243e-02 1.15511962e-01 5.17647514e-02 7.18267155e-03 8.21278205e-03 7.18197378e-01 2.80961874e+03 -1.65600000e-04 9.12471456e-04 9.80263994e-02 1.15423007e-01 5.19774443e-02 7.24641803e-03 8.21688162e-03 7.18197378e-01 2.80961874e+03 -1.65700000e-04 8.37401779e-04 9.79163359e-02 1.15334167e-01 5.21838950e-02 7.31030089e-03 8.22052191e-03 7.18197378e-01 2.81108162e+03 -1.65800000e-04 7.65440800e-04 9.78096456e-02 1.15245484e-01 5.23840375e-02 7.37431357e-03 8.22370090e-03 7.18197378e-01 2.81248500e+03 -1.65900000e-04 6.96607079e-04 9.77063403e-02 1.15157001e-01 5.25778079e-02 7.43844946e-03 8.22641668e-03 7.18197378e-01 2.81248500e+03 -1.66000000e-04 6.30918637e-04 9.76064313e-02 1.15068759e-01 5.27651438e-02 7.50270190e-03 8.22866738e-03 7.18197378e-01 2.81382868e+03 -1.66100000e-04 5.68392950e-04 9.75099298e-02 1.14980799e-01 5.29459847e-02 7.56706422e-03 8.23045125e-03 7.18197378e-01 2.81511250e+03 -1.66200000e-04 5.09046948e-04 9.74168469e-02 1.14893160e-01 5.31202720e-02 7.63152969e-03 8.23176662e-03 7.18197378e-01 2.81511250e+03 -1.66300000e-04 4.52897012e-04 9.73271935e-02 1.14805880e-01 5.32879486e-02 7.69609154e-03 8.23261187e-03 7.18197378e-01 2.81633628e+03 -1.66400000e-04 3.99958971e-04 9.72409802e-02 1.14718995e-01 5.34489595e-02 7.76074299e-03 8.23298549e-03 7.18197378e-01 2.81749982e+03 -1.66500000e-04 3.50248098e-04 9.71582176e-02 1.14632542e-01 5.36032515e-02 7.82547721e-03 8.23288606e-03 7.18197378e-01 2.81860296e+03 -1.66600000e-04 3.03779107e-04 9.70789159e-02 1.14546554e-01 5.37507732e-02 7.89028734e-03 8.23231223e-03 7.18197378e-01 2.81860296e+03 -1.66700000e-04 2.60566154e-04 9.70030854e-02 1.14461066e-01 5.38914750e-02 7.95516649e-03 8.23126273e-03 7.18197378e-01 2.81937765e+03 -1.66800000e-04 2.20622827e-04 9.69307358e-02 1.14376110e-01 5.40253094e-02 8.02010777e-03 8.22973639e-03 7.18197378e-01 2.81992032e+03 -1.66900000e-04 1.83962150e-04 9.68618769e-02 1.14291716e-01 5.41522306e-02 8.08510423e-03 8.22773210e-03 7.18197378e-01 2.82095317e+03 -1.67000000e-04 1.50596575e-04 9.67965183e-02 1.14207915e-01 5.42721946e-02 8.15014891e-03 8.22524886e-03 7.18197378e-01 2.82144328e+03 -1.67100000e-04 1.20537983e-04 9.67346693e-02 1.14124735e-01 5.43851596e-02 8.21523483e-03 8.22228573e-03 7.18197378e-01 2.82191581e+03 -1.67200000e-04 9.37976807e-05 9.66763391e-02 1.14042203e-01 5.44910856e-02 8.28035499e-03 8.21884189e-03 7.18197378e-01 2.82243761e+03 -1.67300000e-04 7.03863951e-05 9.66215366e-02 1.13960346e-01 5.45899344e-02 8.34550238e-03 8.21491657e-03 7.18197378e-01 2.82300883e+03 -1.67400000e-04 5.03142736e-05 9.65702705e-02 1.13879189e-01 5.46816698e-02 8.41066996e-03 8.21050910e-03 7.18197378e-01 2.82351560e+03 -1.67500000e-04 3.35908803e-05 9.65225494e-02 1.13798755e-01 5.47662578e-02 8.47585068e-03 8.20561890e-03 7.18197378e-01 2.82409492e+03 -1.67600000e-04 2.02251932e-05 9.64783816e-02 1.13719066e-01 5.48436660e-02 8.54103748e-03 8.20024546e-03 7.18197378e-01 2.82450301e+03 -1.67700000e-04 1.02256020e-05 9.64377752e-02 1.13640146e-01 5.49138641e-02 8.60622330e-03 8.19438837e-03 7.18197378e-01 2.82500205e+03 -1.67800000e-04 3.59990518e-06 9.64007383e-02 1.13562012e-01 5.49768240e-02 8.67140104e-03 8.18804730e-03 7.18197378e-01 2.82536281e+03 -1.67900000e-04 3.55307571e-07 9.63672785e-02 1.13484683e-01 5.50325194e-02 8.73656363e-03 8.18122202e-03 7.18197378e-01 2.82582840e+03 -1.68000000e-04 -1.66789552e-12 9.63368755e-02 1.13408066e-01 5.50819929e-02 8.80170417e-03 8.17398396e-03 7.18197378e-01 2.82615257e+03 -1.68100000e-04 -1.66102637e-12 9.63068573e-02 1.13331567e-01 5.51306814e-02 8.86681927e-03 8.16669769e-03 7.18197378e-01 2.82653451e+03 -1.68200000e-04 -1.66215530e-12 9.62768508e-02 1.13255098e-01 5.51793505e-02 8.93190876e-03 8.15941428e-03 7.18197378e-01 2.82682525e+03 -1.68300000e-04 -1.66250794e-12 9.62468560e-02 1.13178660e-01 5.52280002e-02 8.99697255e-03 8.15213375e-03 7.18197378e-01 2.82746874e+03 -1.68400000e-04 -1.66267333e-12 9.62168730e-02 1.13102252e-01 5.52766305e-02 9.06201055e-03 8.14485611e-03 7.18197378e-01 2.82832138e+03 -1.68500000e-04 -1.66309645e-12 9.61869018e-02 1.13025875e-01 5.53252411e-02 9.12702268e-03 8.13758136e-03 7.18197378e-01 2.82832138e+03 -1.68600000e-04 -1.66357187e-12 9.61569424e-02 1.12949529e-01 5.53738321e-02 9.19200886e-03 8.13030951e-03 7.18197378e-01 2.82832138e+03 -1.68700000e-04 -1.66439804e-12 9.61269948e-02 1.12873214e-01 5.54224034e-02 9.25696900e-03 8.12304058e-03 7.18197378e-01 2.82917319e+03 -1.68800000e-04 -1.66546573e-12 9.60970591e-02 1.12796931e-01 5.54709548e-02 9.32190302e-03 8.11577457e-03 7.18197378e-01 2.82917319e+03 -1.68900000e-04 -1.66612429e-12 9.60671353e-02 1.12720678e-01 5.55194862e-02 9.38681083e-03 8.10851150e-03 7.18197378e-01 2.83002418e+03 -1.69000000e-04 -1.66708579e-12 9.60372234e-02 1.12644457e-01 5.55679977e-02 9.45169235e-03 8.10125136e-03 7.18197378e-01 2.83002418e+03 -1.69100000e-04 -1.66756519e-12 9.60073235e-02 1.12568268e-01 5.56164890e-02 9.51654750e-03 8.09399418e-03 7.18197378e-01 2.83002418e+03 -1.69200000e-04 -1.66796395e-12 9.59774354e-02 1.12492110e-01 5.56649601e-02 9.58137619e-03 8.08673996e-03 7.18197378e-01 2.83087433e+03 -1.69300000e-04 -1.66817882e-12 9.59475594e-02 1.12415985e-01 5.57134109e-02 9.64617834e-03 8.07948870e-03 7.18197378e-01 2.83087433e+03 -1.69400000e-04 -1.66820811e-12 9.59176954e-02 1.12339891e-01 5.57618414e-02 9.71095386e-03 8.07224043e-03 7.18197378e-01 2.83172365e+03 -1.69500000e-04 -1.66815523e-12 9.58878434e-02 1.12263830e-01 5.58102513e-02 9.77570268e-03 8.06499514e-03 7.18197378e-01 2.83172365e+03 -1.69600000e-04 -1.66808840e-12 9.58580034e-02 1.12187800e-01 5.58586407e-02 9.84042471e-03 8.05775285e-03 7.18197378e-01 2.83323859e+03 -1.69700000e-04 -1.66776268e-12 9.58281756e-02 1.12111804e-01 5.59070095e-02 9.90511986e-03 8.05051357e-03 7.18197378e-01 2.83323859e+03 -1.69800000e-04 -1.66735586e-12 9.57983598e-02 1.12035839e-01 5.59553576e-02 9.96978805e-03 8.04327731e-03 7.18197378e-01 2.83323859e+03 -1.69900000e-04 -1.66697455e-12 9.57685561e-02 1.11959908e-01 5.60036848e-02 1.00344292e-02 8.03604407e-03 7.18197378e-01 2.83323859e+03 -1.70000000e-04 -1.66676510e-12 9.57387646e-02 1.11884009e-01 5.60519911e-02 1.00990432e-02 8.02881387e-03 7.18197378e-01 2.83323859e+03 -1.70100000e-04 -1.66634537e-12 9.57089853e-02 1.11808144e-01 5.61002764e-02 1.01636301e-02 8.02158671e-03 7.18197378e-01 2.83475084e+03 -1.70200000e-04 -1.66585384e-12 9.56792181e-02 1.11732311e-01 5.61485406e-02 1.02281896e-02 8.01436261e-03 7.18197378e-01 2.83475084e+03 -1.70300000e-04 -1.66543940e-12 9.56494632e-02 1.11656512e-01 5.61967837e-02 1.02927218e-02 8.00714156e-03 7.18197378e-01 2.83475084e+03 -1.70400000e-04 -1.66518875e-12 9.56197205e-02 1.11580746e-01 5.62450054e-02 1.03572265e-02 7.99992359e-03 7.18197378e-01 2.83475084e+03 -1.70500000e-04 -1.66489038e-12 9.55899901e-02 1.11505014e-01 5.62932059e-02 1.04217036e-02 7.99270871e-03 7.18197378e-01 2.83672409e+03 -1.70600000e-04 -1.66435340e-12 9.55602720e-02 1.11429315e-01 5.63413849e-02 1.04861532e-02 7.98549691e-03 7.18197378e-01 2.83672409e+03 -1.70700000e-04 -1.66378721e-12 9.55305661e-02 1.11353650e-01 5.63895424e-02 1.05505750e-02 7.97828821e-03 7.18197378e-01 2.83672409e+03 -1.70800000e-04 -1.66324474e-12 9.55008726e-02 1.11278020e-01 5.64376783e-02 1.06149691e-02 7.97108262e-03 7.18197378e-01 2.83672409e+03 -1.70900000e-04 -1.66281172e-12 9.54711915e-02 1.11202423e-01 5.64857925e-02 1.06793353e-02 7.96388015e-03 7.18197378e-01 2.83672409e+03 -1.71000000e-04 -1.66261275e-12 9.54415228e-02 1.11126860e-01 5.65338849e-02 1.07436735e-02 7.95668081e-03 7.18197378e-01 2.83672409e+03 -1.71100000e-04 -1.66201536e-12 9.54118664e-02 1.11051332e-01 5.65819555e-02 1.08079837e-02 7.94948460e-03 7.18197378e-01 2.83869265e+03 -1.71200000e-04 -1.66134565e-12 9.53822225e-02 1.10975838e-01 5.66300040e-02 1.08722658e-02 7.94229155e-03 7.18197378e-01 2.83869265e+03 -1.71300000e-04 -1.66069451e-12 9.53525911e-02 1.10900379e-01 5.66780306e-02 1.09365197e-02 7.93510164e-03 7.18197378e-01 2.83869265e+03 -1.71400000e-04 -1.66013208e-12 9.53229721e-02 1.10824955e-01 5.67260350e-02 1.10007453e-02 7.92791490e-03 7.18197378e-01 2.83869265e+03 -1.71500000e-04 -1.65975488e-12 9.52933656e-02 1.10749565e-01 5.67740173e-02 1.10649425e-02 7.92073134e-03 7.18197378e-01 2.83869265e+03 -1.71600000e-04 -1.65949827e-12 9.52637717e-02 1.10674211e-01 5.68219772e-02 1.11291113e-02 7.91355095e-03 7.18197378e-01 2.84065648e+03 -1.71700000e-04 -1.65898494e-12 9.52341903e-02 1.10598892e-01 5.68699147e-02 1.11932516e-02 7.90637376e-03 7.18197378e-01 2.84065648e+03 -1.71800000e-04 -1.65851488e-12 9.52046214e-02 1.10523608e-01 5.69178298e-02 1.12573633e-02 7.89919977e-03 7.18197378e-01 2.84065648e+03 -1.71900000e-04 -1.65811534e-12 9.51750652e-02 1.10448359e-01 5.69657223e-02 1.13214463e-02 7.89202900e-03 7.18197378e-01 2.84065648e+03 -1.72000000e-04 -1.65782047e-12 9.51455216e-02 1.10373146e-01 5.70135922e-02 1.13855005e-02 7.88486144e-03 7.18197378e-01 2.84065648e+03 -1.72100000e-04 -1.65767205e-12 9.51159906e-02 1.10297969e-01 5.70614394e-02 1.14495258e-02 7.87769711e-03 7.18197378e-01 2.84065648e+03 -1.72200000e-04 -1.65752873e-12 9.50864724e-02 1.10222828e-01 5.71092638e-02 1.15135222e-02 7.87053601e-03 7.18197378e-01 2.84261554e+03 -1.72300000e-04 -1.65738557e-12 9.50569668e-02 1.10147722e-01 5.71570652e-02 1.15774896e-02 7.86337817e-03 7.18197378e-01 2.84261554e+03 -1.72400000e-04 -1.65729260e-12 9.50274739e-02 1.10072653e-01 5.72048437e-02 1.16414279e-02 7.85622358e-03 7.18197378e-01 2.84261554e+03 -1.72500000e-04 -1.65724218e-12 9.49979938e-02 1.09997620e-01 5.72525991e-02 1.17053370e-02 7.84907225e-03 7.18197378e-01 2.84261554e+03 -1.72600000e-04 -1.65722322e-12 9.49685264e-02 1.09922623e-01 5.73003314e-02 1.17692169e-02 7.84192420e-03 7.18197378e-01 2.84261554e+03 -1.72700000e-04 -1.65722510e-12 9.49390718e-02 1.09847663e-01 5.73480405e-02 1.18330674e-02 7.83477944e-03 7.18197378e-01 2.84456978e+03 -1.72800000e-04 -1.65728236e-12 9.49096301e-02 1.09772739e-01 5.73957262e-02 1.18968885e-02 7.82763796e-03 7.18197378e-01 2.84456978e+03 -1.72900000e-04 -1.65735848e-12 9.48802011e-02 1.09697853e-01 5.74433886e-02 1.19606801e-02 7.82049979e-03 7.18197378e-01 2.84456978e+03 -1.73000000e-04 -1.65744067e-12 9.48507851e-02 1.09623003e-01 5.74910274e-02 1.20244421e-02 7.81336493e-03 7.18197378e-01 2.84456978e+03 -1.73100000e-04 -1.65751377e-12 9.48213819e-02 1.09548190e-01 5.75386427e-02 1.20881744e-02 7.80623338e-03 7.18197378e-01 2.84456978e+03 -1.73200000e-04 -1.65756018e-12 9.47919916e-02 1.09473414e-01 5.75862344e-02 1.21518770e-02 7.79910517e-03 7.18197378e-01 2.84456978e+03 -1.73300000e-04 -1.65759941e-12 9.47626143e-02 1.09398675e-01 5.76338023e-02 1.22155498e-02 7.79198029e-03 7.18197378e-01 2.84651915e+03 -1.73400000e-04 -1.65765741e-12 9.47332500e-02 1.09323974e-01 5.76813464e-02 1.22791926e-02 7.78485877e-03 7.18197378e-01 2.84651915e+03 -1.73500000e-04 -1.65770298e-12 9.47038986e-02 1.09249311e-01 5.77288666e-02 1.23428055e-02 7.77774059e-03 7.18197378e-01 2.84651915e+03 -1.73600000e-04 -1.65773459e-12 9.46745602e-02 1.09174685e-01 5.77763628e-02 1.24063882e-02 7.77062578e-03 7.18197378e-01 2.84651915e+03 -1.73700000e-04 -1.65775233e-12 9.46452349e-02 1.09100097e-01 5.78238350e-02 1.24699409e-02 7.76351435e-03 7.18197378e-01 2.84651915e+03 -1.73800000e-04 -1.65775810e-12 9.46159226e-02 1.09025547e-01 5.78712830e-02 1.25334633e-02 7.75640630e-03 7.18197378e-01 2.84651915e+03 -1.73900000e-04 -1.65774346e-12 9.45866234e-02 1.08951035e-01 5.79187068e-02 1.25969554e-02 7.74930164e-03 7.18197378e-01 2.84846362e+03 -1.74000000e-04 -1.65771542e-12 9.45573373e-02 1.08876561e-01 5.79661063e-02 1.26604171e-02 7.74220038e-03 7.18197378e-01 2.84846362e+03 -1.74100000e-04 -1.65768015e-12 9.45280643e-02 1.08802126e-01 5.80134813e-02 1.27238483e-02 7.73510253e-03 7.18197378e-01 2.84846362e+03 -1.74200000e-04 -1.65764465e-12 9.44988045e-02 1.08727729e-01 5.80608319e-02 1.27872490e-02 7.72800810e-03 7.18197378e-01 2.84846362e+03 -1.74300000e-04 -1.65761816e-12 9.44695579e-02 1.08653370e-01 5.81081580e-02 1.28506190e-02 7.72091710e-03 7.18197378e-01 2.84846362e+03 -1.74400000e-04 -1.65758691e-12 9.44403244e-02 1.08579050e-01 5.81554594e-02 1.29139583e-02 7.71382953e-03 7.18197378e-01 2.85158342e+03 -1.74500000e-04 -1.65748436e-12 9.44111042e-02 1.08504770e-01 5.82027361e-02 1.29772669e-02 7.70674541e-03 7.18197378e-01 2.85158342e+03 -1.74600000e-04 -1.65736097e-12 9.43818973e-02 1.08430528e-01 5.82499880e-02 1.30405445e-02 7.69966475e-03 7.18197378e-01 2.85158342e+03 -1.74700000e-04 -1.65722055e-12 9.43527036e-02 1.08356325e-01 5.82972150e-02 1.31037912e-02 7.69258755e-03 7.18197378e-01 2.85158342e+03 -1.74800000e-04 -1.65706911e-12 9.43235232e-02 1.08282161e-01 5.83444170e-02 1.31670069e-02 7.68551382e-03 7.18197378e-01 2.85158342e+03 -1.74900000e-04 -1.65691518e-12 9.42943562e-02 1.08208037e-01 5.83915940e-02 1.32301915e-02 7.67844357e-03 7.18197378e-01 2.85158342e+03 -1.75000000e-04 -1.65677005e-12 9.42652025e-02 1.08133952e-01 5.84387458e-02 1.32933448e-02 7.67137681e-03 7.18197378e-01 2.85158342e+03 -1.75100000e-04 -1.65664810e-12 9.42360621e-02 1.08059907e-01 5.84858725e-02 1.33564669e-02 7.66431355e-03 7.18197378e-01 2.85158342e+03 -1.75200000e-04 -1.65656707e-12 9.42069352e-02 1.07985902e-01 5.85329739e-02 1.34195577e-02 7.65725380e-03 7.18197378e-01 2.85158342e+03 -1.75300000e-04 -1.65649566e-12 9.41778217e-02 1.07911936e-01 5.85800499e-02 1.34826170e-02 7.65019757e-03 7.18197378e-01 2.85469019e+03 -1.75400000e-04 -1.65628098e-12 9.41487216e-02 1.07838010e-01 5.86271004e-02 1.35456448e-02 7.64314486e-03 7.18197378e-01 2.85469019e+03 -1.75500000e-04 -1.65605471e-12 9.41196350e-02 1.07764125e-01 5.86741254e-02 1.36086410e-02 7.63609569e-03 7.18197378e-01 2.85469019e+03 -1.75600000e-04 -1.65582282e-12 9.40905619e-02 1.07690280e-01 5.87211248e-02 1.36716056e-02 7.62905006e-03 7.18197378e-01 2.85469019e+03 -1.75700000e-04 -1.65559309e-12 9.40615023e-02 1.07616475e-01 5.87680986e-02 1.37345384e-02 7.62200798e-03 7.18197378e-01 2.85469019e+03 -1.75800000e-04 -1.65537535e-12 9.40324563e-02 1.07542710e-01 5.88150465e-02 1.37974394e-02 7.61496946e-03 7.18197378e-01 2.85469019e+03 -1.75900000e-04 -1.65518163e-12 9.40034238e-02 1.07468987e-01 5.88619686e-02 1.38603085e-02 7.60793452e-03 7.18197378e-01 2.85469019e+03 -1.76000000e-04 -1.65502637e-12 9.39744049e-02 1.07395304e-01 5.89088648e-02 1.39231456e-02 7.60090315e-03 7.18197378e-01 2.85469019e+03 -1.76100000e-04 -1.65492660e-12 9.39453997e-02 1.07321662e-01 5.89557350e-02 1.39859506e-02 7.59387537e-03 7.18197378e-01 2.85469019e+03 -1.76200000e-04 -1.65485808e-12 9.39164081e-02 1.07248060e-01 5.90025790e-02 1.40487235e-02 7.58685118e-03 7.18197378e-01 2.85778374e+03 -1.76300000e-04 -1.65466583e-12 9.38874301e-02 1.07174500e-01 5.90493970e-02 1.41114642e-02 7.57983060e-03 7.18197378e-01 2.85778374e+03 -1.76400000e-04 -1.65447948e-12 9.38584659e-02 1.07100981e-01 5.90961886e-02 1.41741726e-02 7.57281364e-03 7.18197378e-01 2.85778374e+03 -1.76500000e-04 -1.65430243e-12 9.38295153e-02 1.07027504e-01 5.91429540e-02 1.42368486e-02 7.56580030e-03 7.18197378e-01 2.85778374e+03 -1.76600000e-04 -1.65413868e-12 9.38005785e-02 1.06954068e-01 5.91896929e-02 1.42994922e-02 7.55879058e-03 7.18197378e-01 2.85778374e+03 -1.76700000e-04 -1.65399282e-12 9.37716555e-02 1.06880673e-01 5.92364054e-02 1.43621033e-02 7.55178451e-03 7.18197378e-01 2.85778374e+03 -1.76800000e-04 -1.65387007e-12 9.37427462e-02 1.06807321e-01 5.92830913e-02 1.44246817e-02 7.54478209e-03 7.18197378e-01 2.85778374e+03 -1.76900000e-04 -1.65377635e-12 9.37138508e-02 1.06734010e-01 5.93297506e-02 1.44872274e-02 7.53778332e-03 7.18197378e-01 2.85778374e+03 -1.77000000e-04 -1.65371834e-12 9.36849692e-02 1.06660741e-01 5.93763832e-02 1.45497404e-02 7.53078823e-03 7.18197378e-01 2.85778374e+03 -1.77100000e-04 -1.65368793e-12 9.36561015e-02 1.06587514e-01 5.94229890e-02 1.46122206e-02 7.52379680e-03 7.18197378e-01 2.86086388e+03 -1.77200000e-04 -1.65361647e-12 9.36272476e-02 1.06514330e-01 5.94695679e-02 1.46746678e-02 7.51680906e-03 7.18197378e-01 2.86086388e+03 -1.77300000e-04 -1.65355749e-12 9.35984077e-02 1.06441188e-01 5.95161199e-02 1.47370820e-02 7.50982501e-03 7.18197378e-01 2.86086388e+03 -1.77400000e-04 -1.65351052e-12 9.35695817e-02 1.06368088e-01 5.95626448e-02 1.47994632e-02 7.50284466e-03 7.18197378e-01 2.86086388e+03 -1.77500000e-04 -1.65347481e-12 9.35407697e-02 1.06295031e-01 5.96091426e-02 1.48618112e-02 7.49586803e-03 7.18197378e-01 2.86086388e+03 -1.77600000e-04 -1.65344937e-12 9.35119716e-02 1.06222016e-01 5.96556133e-02 1.49241259e-02 7.48889511e-03 7.18197378e-01 2.86086388e+03 -1.77700000e-04 -1.65343288e-12 9.34831876e-02 1.06149044e-01 5.97020567e-02 1.49864074e-02 7.48192591e-03 7.18197378e-01 2.86086388e+03 -1.77800000e-04 -1.65342374e-12 9.34544176e-02 1.06076116e-01 5.97484728e-02 1.50486555e-02 7.47496045e-03 7.18197378e-01 2.86086388e+03 -1.77900000e-04 -1.65342000e-12 9.34256617e-02 1.06003230e-01 5.97948615e-02 1.51108701e-02 7.46799874e-03 7.18197378e-01 2.86086388e+03 -1.78000000e-04 -1.65342157e-12 9.33969198e-02 1.05930388e-01 5.98412227e-02 1.51730512e-02 7.46104078e-03 7.18197378e-01 2.86393042e+03 -1.78100000e-04 -1.65343930e-12 9.33681921e-02 1.05857588e-01 5.98875563e-02 1.52351987e-02 7.45408658e-03 7.18197378e-01 2.86393042e+03 -1.78200000e-04 -1.65346252e-12 9.33394785e-02 1.05784833e-01 5.99338623e-02 1.52973125e-02 7.44713615e-03 7.18197378e-01 2.86393042e+03 -1.78300000e-04 -1.65348959e-12 9.33107791e-02 1.05712120e-01 5.99801406e-02 1.53593925e-02 7.44018950e-03 7.18197378e-01 2.86393042e+03 -1.78400000e-04 -1.65351869e-12 9.32820938e-02 1.05639452e-01 6.00263912e-02 1.54214387e-02 7.43324663e-03 7.18197378e-01 2.86393042e+03 -1.78500000e-04 -1.65354779e-12 9.32534227e-02 1.05566827e-01 6.00726138e-02 1.54834510e-02 7.42630756e-03 7.18197378e-01 2.86393042e+03 -1.78600000e-04 -1.65357464e-12 9.32247659e-02 1.05494246e-01 6.01188085e-02 1.55454292e-02 7.41937229e-03 7.18197378e-01 2.86393042e+03 -1.78700000e-04 -1.65359679e-12 9.31961234e-02 1.05421709e-01 6.01649752e-02 1.56073734e-02 7.41244084e-03 7.18197378e-01 2.86393042e+03 -1.78800000e-04 -1.65361156e-12 9.31674951e-02 1.05349217e-01 6.02111138e-02 1.56692835e-02 7.40551321e-03 7.18197378e-01 2.86393042e+03 -1.78900000e-04 -1.65361925e-12 9.31388811e-02 1.05276768e-01 6.02572243e-02 1.57311593e-02 7.39858941e-03 7.18197378e-01 2.86698316e+03 -1.79000000e-04 -1.65364249e-12 9.31102815e-02 1.05204364e-01 6.03033065e-02 1.57930008e-02 7.39166944e-03 7.18197378e-01 2.86698316e+03 -1.79100000e-04 -1.65366342e-12 9.30816962e-02 1.05132004e-01 6.03493604e-02 1.58548080e-02 7.38475332e-03 7.18197378e-01 2.86698316e+03 -1.79200000e-04 -1.65368163e-12 9.30531253e-02 1.05059689e-01 6.03953859e-02 1.59165807e-02 7.37784106e-03 7.18197378e-01 2.86698316e+03 -1.79300000e-04 -1.65369682e-12 9.30245689e-02 1.04987419e-01 6.04413830e-02 1.59783189e-02 7.37093266e-03 7.18197378e-01 2.86698316e+03 -1.79400000e-04 -1.65370881e-12 9.29960268e-02 1.04915193e-01 6.04873515e-02 1.60400225e-02 7.36402813e-03 7.18197378e-01 2.86698316e+03 -1.79500000e-04 -1.65371760e-12 9.29674992e-02 1.04843013e-01 6.05332915e-02 1.61016914e-02 7.35712749e-03 7.18197378e-01 2.86698316e+03 -1.79600000e-04 -1.65372332e-12 9.29389861e-02 1.04770877e-01 6.05792027e-02 1.61633255e-02 7.35023073e-03 7.18197378e-01 2.86698316e+03 -1.79700000e-04 -1.65372630e-12 9.29104875e-02 1.04698787e-01 6.06250852e-02 1.62249248e-02 7.34333786e-03 7.18197378e-01 2.86698316e+03 -1.79800000e-04 -1.65372663e-12 9.28820034e-02 1.04626742e-01 6.06709389e-02 1.62864892e-02 7.33644891e-03 7.18197378e-01 2.87002191e+03 -1.79900000e-04 -1.65372050e-12 9.28535339e-02 1.04554742e-01 6.07167636e-02 1.63480187e-02 7.32956387e-03 7.18197378e-01 2.87002191e+03 -1.80000000e-04 -1.65371134e-12 9.28250789e-02 1.04482788e-01 6.07625594e-02 1.64095131e-02 7.32268275e-03 7.18197378e-01 2.87002191e+03 -1.80100000e-04 -1.65369976e-12 9.27966386e-02 1.04410879e-01 6.08083262e-02 1.64709723e-02 7.31580556e-03 7.18197378e-01 2.87002191e+03 -1.80200000e-04 -1.65368654e-12 9.27682129e-02 1.04339017e-01 6.08540638e-02 1.65323964e-02 7.30893231e-03 7.18197378e-01 2.87002191e+03 -1.80300000e-04 -1.65367265e-12 9.27398019e-02 1.04267200e-01 6.08997722e-02 1.65937852e-02 7.30206300e-03 7.18197378e-01 2.87002191e+03 -1.80400000e-04 -1.65365927e-12 9.27114055e-02 1.04195429e-01 6.09454514e-02 1.66551386e-02 7.29519766e-03 7.18197378e-01 2.87002191e+03 -1.80500000e-04 -1.65364775e-12 9.26830238e-02 1.04123704e-01 6.09911013e-02 1.67164566e-02 7.28833627e-03 7.18197378e-01 2.87002191e+03 -1.80600000e-04 -1.65363969e-12 9.26546569e-02 1.04052026e-01 6.10367217e-02 1.67777391e-02 7.28147886e-03 7.18197378e-01 2.87002191e+03 -1.80700000e-04 -1.65363576e-12 9.26263047e-02 1.03980393e-01 6.10823127e-02 1.68389860e-02 7.27462543e-03 7.18197378e-01 2.87304646e+03 -1.80800000e-04 -1.65361951e-12 9.25979673e-02 1.03908807e-01 6.11278741e-02 1.69001973e-02 7.26777599e-03 7.18197378e-01 2.87304646e+03 -1.80900000e-04 -1.65360340e-12 9.25696447e-02 1.03837268e-01 6.11734059e-02 1.69613729e-02 7.26093055e-03 7.18197378e-01 2.87304646e+03 -1.81000000e-04 -1.65358787e-12 9.25413370e-02 1.03765775e-01 6.12189079e-02 1.70225126e-02 7.25408911e-03 7.18197378e-01 2.87304646e+03 -1.81100000e-04 -1.65357339e-12 9.25130441e-02 1.03694330e-01 6.12643803e-02 1.70836165e-02 7.24725168e-03 7.18197378e-01 2.87304646e+03 -1.81200000e-04 -1.65356044e-12 9.24847661e-02 1.03622931e-01 6.13098228e-02 1.71446845e-02 7.24041828e-03 7.18197378e-01 2.87304646e+03 -1.81300000e-04 -1.65354952e-12 9.24565029e-02 1.03551579e-01 6.13552354e-02 1.72057164e-02 7.23358891e-03 7.18197378e-01 2.87304646e+03 -1.81400000e-04 -1.65354112e-12 9.24282547e-02 1.03480274e-01 6.14006180e-02 1.72667123e-02 7.22676357e-03 7.18197378e-01 2.87304646e+03 -1.81500000e-04 -1.65353576e-12 9.24000215e-02 1.03409016e-01 6.14459705e-02 1.73276720e-02 7.21994228e-03 7.18197378e-01 2.87304646e+03 -1.81600000e-04 -1.65353377e-12 9.23718032e-02 1.03337805e-01 6.14912930e-02 1.73885954e-02 7.21312505e-03 7.18197378e-01 2.87605661e+03 -1.81700000e-04 -1.65352965e-12 9.23436000e-02 1.03266642e-01 6.15365852e-02 1.74494826e-02 7.20631188e-03 7.18197378e-01 2.87605661e+03 -1.81800000e-04 -1.65352722e-12 9.23154117e-02 1.03195527e-01 6.15818472e-02 1.75103333e-02 7.19950278e-03 7.18197378e-01 2.87605661e+03 -1.81900000e-04 -1.65352633e-12 9.22872386e-02 1.03124459e-01 6.16270789e-02 1.75711476e-02 7.19269776e-03 7.18197378e-01 2.87605661e+03 -1.82000000e-04 -1.65352677e-12 9.22590805e-02 1.03053439e-01 6.16722802e-02 1.76319254e-02 7.18589683e-03 7.18197378e-01 2.87605661e+03 -1.82100000e-04 -1.65352827e-12 9.22309375e-02 1.02982467e-01 6.17174510e-02 1.76926666e-02 7.17909999e-03 7.18197378e-01 2.87605661e+03 -1.82200000e-04 -1.65353043e-12 9.22028096e-02 1.02911543e-01 6.17625913e-02 1.77533711e-02 7.17230726e-03 7.18197378e-01 2.87605661e+03 -1.82300000e-04 -1.65353276e-12 9.21746969e-02 1.02840667e-01 6.18077010e-02 1.78140388e-02 7.16551864e-03 7.18197378e-01 2.87605661e+03 -1.82400000e-04 -1.65353467e-12 9.21465994e-02 1.02769839e-01 6.18527800e-02 1.78746698e-02 7.15873414e-03 7.18197378e-01 2.87605661e+03 -1.82500000e-04 -1.65353554e-12 9.21185170e-02 1.02699059e-01 6.18978283e-02 1.79352638e-02 7.15195376e-03 7.18197378e-01 2.87905217e+03 -1.82600000e-04 -1.65354208e-12 9.20904499e-02 1.02628328e-01 6.19428457e-02 1.79958209e-02 7.14517752e-03 7.18197378e-01 2.87905217e+03 -1.82700000e-04 -1.65354930e-12 9.20623981e-02 1.02557645e-01 6.19878323e-02 1.80563410e-02 7.13840543e-03 7.18197378e-01 2.87905217e+03 -1.82800000e-04 -1.65355690e-12 9.20343615e-02 1.02487011e-01 6.20327879e-02 1.81168239e-02 7.13163749e-03 7.18197378e-01 2.87905217e+03 -1.82900000e-04 -1.65356455e-12 9.20063403e-02 1.02416426e-01 6.20777126e-02 1.81772697e-02 7.12487371e-03 7.18197378e-01 2.87905217e+03 -1.83000000e-04 -1.65357189e-12 9.19783343e-02 1.02345889e-01 6.21226061e-02 1.82376782e-02 7.11811409e-03 7.18197378e-01 2.87905217e+03 -1.83100000e-04 -1.65357849e-12 9.19503437e-02 1.02275402e-01 6.21674685e-02 1.82980494e-02 7.11135866e-03 7.18197378e-01 2.87905217e+03 -1.83200000e-04 -1.65358390e-12 9.19223685e-02 1.02204963e-01 6.22122997e-02 1.83583832e-02 7.10460740e-03 7.18197378e-01 2.87905217e+03 -1.83300000e-04 -1.65358759e-12 9.18944087e-02 1.02134574e-01 6.22570996e-02 1.84186796e-02 7.09786034e-03 7.18197378e-01 2.87905217e+03 -1.83400000e-04 -1.65358899e-12 9.18664643e-02 1.02064234e-01 6.23018681e-02 1.84789384e-02 7.09111748e-03 7.18197378e-01 2.87905217e+03 -1.83500000e-04 -1.65359390e-12 9.18385354e-02 1.01993943e-01 6.23466052e-02 1.85391596e-02 7.08437883e-03 7.18197378e-01 2.88203294e+03 -1.83600000e-04 -1.65359835e-12 9.18106219e-02 1.01923702e-01 6.23913109e-02 1.85993431e-02 7.07764439e-03 7.18197378e-01 2.88203294e+03 -1.83700000e-04 -1.65360218e-12 9.17827240e-02 1.01853510e-01 6.24359850e-02 1.86594889e-02 7.07091418e-03 7.18197378e-01 2.88203294e+03 -1.83800000e-04 -1.65360535e-12 9.17548416e-02 1.01783368e-01 6.24806274e-02 1.87195968e-02 7.06418820e-03 7.18197378e-01 2.88203294e+03 -1.83900000e-04 -1.65360784e-12 9.17269747e-02 1.01713276e-01 6.25252382e-02 1.87796669e-02 7.05746646e-03 7.18197378e-01 2.88203294e+03 -1.84000000e-04 -1.65360967e-12 9.16991234e-02 1.01643233e-01 6.25698173e-02 1.88396990e-02 7.05074896e-03 7.18197378e-01 2.88203294e+03 -1.84100000e-04 -1.65361088e-12 9.16712877e-02 1.01573241e-01 6.26143645e-02 1.88996931e-02 7.04403572e-03 7.18197378e-01 2.88203294e+03 -1.84200000e-04 -1.65361153e-12 9.16434676e-02 1.01503299e-01 6.26588799e-02 1.89596491e-02 7.03732675e-03 7.18197378e-01 2.88203294e+03 -1.84300000e-04 -1.65361173e-12 9.16156632e-02 1.01433407e-01 6.27033633e-02 1.90195669e-02 7.03062204e-03 7.18197378e-01 2.88203294e+03 -1.84400000e-04 -1.65361127e-12 9.15878745e-02 1.01363565e-01 6.27478147e-02 1.90794465e-02 7.02392162e-03 7.18197378e-01 2.88415323e+03 -1.84500000e-04 -1.65361041e-12 9.15601015e-02 1.01293773e-01 6.27922340e-02 1.91392877e-02 7.01722548e-03 7.18197378e-01 2.88415323e+03 -1.84600000e-04 -1.65360933e-12 9.15323442e-02 1.01224033e-01 6.28366212e-02 1.91990906e-02 7.01053363e-03 7.18197378e-01 2.88415323e+03 -1.84700000e-04 -1.65360818e-12 9.15046026e-02 1.01154342e-01 6.28809762e-02 1.92588551e-02 7.00384609e-03 7.18197378e-01 2.88415323e+03 -1.84800000e-04 -1.65360717e-12 9.14768768e-02 1.01084703e-01 6.29252989e-02 1.93185810e-02 6.99716286e-03 7.18197378e-01 2.88415323e+03 -1.84900000e-04 -1.65360654e-12 9.14491668e-02 1.01015114e-01 6.29695892e-02 1.93782683e-02 6.99048395e-03 7.18197378e-01 2.88415323e+03 -1.85000000e-04 -1.65360613e-12 9.14214727e-02 1.00945576e-01 6.30138472e-02 1.94379170e-02 6.98380936e-03 7.18197378e-01 2.88570482e+03 -1.85100000e-04 -1.65360565e-12 9.13937944e-02 1.00876089e-01 6.30580727e-02 1.94975270e-02 6.97713911e-03 7.18197378e-01 2.88570482e+03 -1.85200000e-04 -1.65360536e-12 9.13661319e-02 1.00806653e-01 6.31022657e-02 1.95570981e-02 6.97047319e-03 7.18197378e-01 2.88570482e+03 -1.85300000e-04 -1.65360525e-12 9.13384854e-02 1.00737269e-01 6.31464261e-02 1.96166304e-02 6.96381163e-03 7.18197378e-01 2.88570482e+03 -1.85400000e-04 -1.65360524e-12 9.13108548e-02 1.00667935e-01 6.31905538e-02 1.96761237e-02 6.95715442e-03 7.18197378e-01 2.88570482e+03 -1.85500000e-04 -1.65360547e-12 9.12832402e-02 1.00598653e-01 6.32346488e-02 1.97355781e-02 6.95050158e-03 7.18197378e-01 2.88725221e+03 -1.85600000e-04 -1.65360588e-12 9.12556415e-02 1.00529423e-01 6.32787111e-02 1.97949934e-02 6.94385310e-03 7.18197378e-01 2.88725221e+03 -1.85700000e-04 -1.65360633e-12 9.12280588e-02 1.00460244e-01 6.33227405e-02 1.98543695e-02 6.93720901e-03 7.18197378e-01 2.88725221e+03 -1.85800000e-04 -1.65360671e-12 9.12004921e-02 1.00391117e-01 6.33667370e-02 1.99137065e-02 6.93056931e-03 7.18197378e-01 2.88725221e+03 -1.85900000e-04 -1.65360687e-12 9.11729415e-02 1.00322042e-01 6.34107005e-02 1.99730041e-02 6.92393399e-03 7.18197378e-01 2.88879539e+03 -1.86000000e-04 -1.65360727e-12 9.11454070e-02 1.00253019e-01 6.34546310e-02 2.00322625e-02 6.91730309e-03 7.18197378e-01 2.88879539e+03 -1.86100000e-04 -1.65360761e-12 9.11178886e-02 1.00184047e-01 6.34985285e-02 2.00914814e-02 6.91067659e-03 7.18197378e-01 2.88879539e+03 -1.86200000e-04 -1.65360786e-12 9.10903863e-02 1.00115128e-01 6.35423927e-02 2.01506608e-02 6.90405451e-03 7.18197378e-01 2.88879539e+03 -1.86300000e-04 -1.65360800e-12 9.10629001e-02 1.00046261e-01 6.35862238e-02 2.02098007e-02 6.89743685e-03 7.18197378e-01 2.88879539e+03 -1.86400000e-04 -1.65360803e-12 9.10354301e-02 9.99774459e-02 6.36300215e-02 2.02689010e-02 6.89082363e-03 7.18197378e-01 2.89033431e+03 -1.86500000e-04 -1.65360798e-12 9.10079764e-02 9.99086834e-02 6.36737860e-02 2.03279616e-02 6.88421485e-03 7.18197378e-01 2.89033431e+03 -1.86600000e-04 -1.65360787e-12 9.09805388e-02 9.98399734e-02 6.37175170e-02 2.03869824e-02 6.87761051e-03 7.18197378e-01 2.89033431e+03 -1.86700000e-04 -1.65360772e-12 9.09531175e-02 9.97713160e-02 6.37612146e-02 2.04459634e-02 6.87101063e-03 7.18197378e-01 2.89033431e+03 -1.86800000e-04 -1.65360762e-12 9.09257124e-02 9.97027113e-02 6.38048787e-02 2.05049046e-02 6.86441522e-03 7.18197378e-01 2.89033431e+03 -1.86900000e-04 -1.65360748e-12 9.08983237e-02 9.96341593e-02 6.38485091e-02 2.05638058e-02 6.85782427e-03 7.18197378e-01 2.89186895e+03 -1.87000000e-04 -1.65360725e-12 9.08709513e-02 9.95656601e-02 6.38921060e-02 2.06226670e-02 6.85123780e-03 7.18197378e-01 2.89186895e+03 -1.87100000e-04 -1.65360703e-12 9.08435952e-02 9.94972140e-02 6.39356691e-02 2.06814881e-02 6.84465582e-03 7.18197378e-01 2.89186895e+03 -1.87200000e-04 -1.65360686e-12 9.08162555e-02 9.94288208e-02 6.39791985e-02 2.07402690e-02 6.83807833e-03 7.18197378e-01 2.89186895e+03 -1.87300000e-04 -1.65360678e-12 9.07889322e-02 9.93604808e-02 6.40226940e-02 2.07990098e-02 6.83150534e-03 7.18197378e-01 2.89186895e+03 -1.87400000e-04 -1.65360670e-12 9.07616253e-02 9.92921941e-02 6.40661557e-02 2.08577102e-02 6.82493685e-03 7.18197378e-01 2.89339928e+03 -1.87500000e-04 -1.65360664e-12 9.07343349e-02 9.92239607e-02 6.41095834e-02 2.09163703e-02 6.81837288e-03 7.18197378e-01 2.89339928e+03 -1.87600000e-04 -1.65360662e-12 9.07070609e-02 9.91557807e-02 6.41529771e-02 2.09749900e-02 6.81181344e-03 7.18197378e-01 2.89339928e+03 -1.87700000e-04 -1.65360662e-12 9.06798034e-02 9.90876542e-02 6.41963368e-02 2.10335692e-02 6.80525852e-03 7.18197378e-01 2.89339928e+03 -1.87800000e-04 -1.65360663e-12 9.06525625e-02 9.90195813e-02 6.42396624e-02 2.10921079e-02 6.79870814e-03 7.18197378e-01 2.89492527e+03 -1.87900000e-04 -1.65360670e-12 9.06253381e-02 9.89515621e-02 6.42829538e-02 2.11506059e-02 6.79216230e-03 7.18197378e-01 2.89492527e+03 -1.88000000e-04 -1.65360680e-12 9.05981303e-02 9.88835966e-02 6.43262109e-02 2.12090633e-02 6.78562102e-03 7.18197378e-01 2.89492527e+03 -1.88100000e-04 -1.65360688e-12 9.05709390e-02 9.88156851e-02 6.43694338e-02 2.12674800e-02 6.77908429e-03 7.18197378e-01 2.89492527e+03 -1.88200000e-04 -1.65360695e-12 9.05437644e-02 9.87478275e-02 6.44126223e-02 2.13258558e-02 6.77255213e-03 7.18197378e-01 2.89492527e+03 -1.88300000e-04 -1.65360699e-12 9.05166064e-02 9.86800240e-02 6.44557764e-02 2.13841908e-02 6.76602455e-03 7.18197378e-01 2.89644689e+03 -1.88400000e-04 -1.65360706e-12 9.04894651e-02 9.86122747e-02 6.44988960e-02 2.14424848e-02 6.75950154e-03 7.18197378e-01 2.89644689e+03 -1.88500000e-04 -1.65360712e-12 9.04623405e-02 9.85445796e-02 6.45419811e-02 2.15007378e-02 6.75298313e-03 7.18197378e-01 2.89644689e+03 -1.88600000e-04 -1.65360716e-12 9.04352326e-02 9.84769388e-02 6.45850316e-02 2.15589498e-02 6.74646930e-03 7.18197378e-01 2.89644689e+03 -1.88700000e-04 -1.65360718e-12 9.04081415e-02 9.84093525e-02 6.46280475e-02 2.16171206e-02 6.73996008e-03 7.18197378e-01 2.89644689e+03 -1.88800000e-04 -1.65360718e-12 9.03810671e-02 9.83418206e-02 6.46710287e-02 2.16752502e-02 6.73345547e-03 7.18197378e-01 2.89796411e+03 -1.88900000e-04 -1.65360716e-12 9.03540095e-02 9.82743434e-02 6.47139751e-02 2.17333386e-02 6.72695548e-03 7.18197378e-01 2.89796411e+03 -1.89000000e-04 -1.65360714e-12 9.03269687e-02 9.82069209e-02 6.47568868e-02 2.17913857e-02 6.72046011e-03 7.18197378e-01 2.89796411e+03 -1.89100000e-04 -1.65360711e-12 9.02999448e-02 9.81395531e-02 6.47997635e-02 2.18493913e-02 6.71396937e-03 7.18197378e-01 2.89796411e+03 -1.89200000e-04 -1.65360710e-12 9.02729377e-02 9.80722402e-02 6.48426054e-02 2.19073556e-02 6.70748327e-03 7.18197378e-01 2.89796411e+03 -1.89300000e-04 -1.65360707e-12 9.02459475e-02 9.80049823e-02 6.48854123e-02 2.19652783e-02 6.70100182e-03 7.18197378e-01 2.89947690e+03 -1.89400000e-04 -1.65360703e-12 9.02189743e-02 9.79377794e-02 6.49281841e-02 2.20231594e-02 6.69452502e-03 7.18197378e-01 2.89947690e+03 -1.89500000e-04 -1.65360699e-12 9.01920179e-02 9.78706316e-02 6.49709209e-02 2.20809989e-02 6.68805287e-03 7.18197378e-01 2.89947690e+03 -1.89600000e-04 -1.65360697e-12 9.01650786e-02 9.78035390e-02 6.50136225e-02 2.21387967e-02 6.68158540e-03 7.18197378e-01 2.89947690e+03 -1.89700000e-04 -1.65360696e-12 9.01381562e-02 9.77365018e-02 6.50562889e-02 2.21965527e-02 6.67512260e-03 7.18197378e-01 2.90098524e+03 -1.89800000e-04 -1.65360694e-12 9.01112509e-02 9.76695199e-02 6.50989200e-02 2.22542669e-02 6.66866447e-03 7.18197378e-01 2.90098524e+03 -1.89900000e-04 -1.65360694e-12 9.00843625e-02 9.76025935e-02 6.51415159e-02 2.23119392e-02 6.66221104e-03 7.18197378e-01 2.90098524e+03 -1.90000000e-04 -1.65360694e-12 9.00574913e-02 9.75357227e-02 6.51840764e-02 2.23695695e-02 6.65576230e-03 7.18197378e-01 2.90098524e+03 -1.90100000e-04 -1.65360694e-12 9.00306371e-02 9.74689075e-02 6.52266015e-02 2.24271578e-02 6.64931826e-03 7.18197378e-01 2.90098524e+03 -1.90200000e-04 -1.65360694e-12 9.00038000e-02 9.74021481e-02 6.52690911e-02 2.24847041e-02 6.64287893e-03 7.18197378e-01 2.90248909e+03 -1.90300000e-04 -1.65360696e-12 8.99769801e-02 9.73354445e-02 6.53115451e-02 2.25422082e-02 6.63644432e-03 7.18197378e-01 2.90248909e+03 -1.90400000e-04 -1.65360698e-12 8.99501773e-02 9.72687967e-02 6.53539636e-02 2.25996700e-02 6.63001443e-03 7.18197378e-01 2.90248909e+03 -1.90500000e-04 -1.65360699e-12 8.99233917e-02 9.72022050e-02 6.53963465e-02 2.26570897e-02 6.62358927e-03 7.18197378e-01 2.90248909e+03 -1.90600000e-04 -1.65360700e-12 8.98966234e-02 9.71356693e-02 6.54386937e-02 2.27144670e-02 6.61716884e-03 7.18197378e-01 2.90248909e+03 -1.90700000e-04 -1.65360701e-12 8.98698722e-02 9.70691898e-02 6.54810051e-02 2.27718019e-02 6.61075316e-03 7.18197378e-01 2.90398842e+03 -1.90800000e-04 -1.65360702e-12 8.98431383e-02 9.70027665e-02 6.55232808e-02 2.28290943e-02 6.60434223e-03 7.18197378e-01 2.90398842e+03 -1.90900000e-04 -1.65360703e-12 8.98164217e-02 9.69363995e-02 6.55655206e-02 2.28863443e-02 6.59793606e-03 7.18197378e-01 2.90398842e+03 -1.91000000e-04 -1.65360704e-12 8.97897224e-02 9.68700889e-02 6.56077245e-02 2.29435517e-02 6.59153465e-03 7.18197378e-01 2.90398842e+03 -1.91100000e-04 -1.65360704e-12 8.97630405e-02 9.68038349e-02 6.56498924e-02 2.30007164e-02 6.58513801e-03 7.18197378e-01 2.90398842e+03 -1.91200000e-04 -1.65360704e-12 8.97363759e-02 9.67376373e-02 6.56920244e-02 2.30578384e-02 6.57874615e-03 7.18197378e-01 2.90548321e+03 -1.91300000e-04 -1.65360703e-12 8.97097286e-02 9.66714965e-02 6.57341203e-02 2.31149177e-02 6.57235907e-03 7.18197378e-01 2.90548321e+03 -1.91400000e-04 -1.65360703e-12 8.96830988e-02 9.66054123e-02 6.57761801e-02 2.31719542e-02 6.56597678e-03 7.18197378e-01 2.90548321e+03 -1.91500000e-04 -1.65360702e-12 8.96564864e-02 9.65393850e-02 6.58182037e-02 2.32289478e-02 6.55959930e-03 7.18197378e-01 2.90548321e+03 -1.91600000e-04 -1.65360702e-12 8.96298914e-02 9.64734146e-02 6.58601912e-02 2.32858984e-02 6.55322661e-03 7.18197378e-01 2.90658208e+03 -1.91700000e-04 -1.65360702e-12 8.96033139e-02 9.64075011e-02 6.59021423e-02 2.33428061e-02 6.54685874e-03 7.18197378e-01 2.90658208e+03 -1.91800000e-04 -1.65360702e-12 8.95767540e-02 9.63416447e-02 6.59440572e-02 2.33996707e-02 6.54049569e-03 7.18197378e-01 2.90658208e+03 -1.91900000e-04 -1.65360701e-12 8.95502115e-02 9.62758454e-02 6.59859357e-02 2.34564921e-02 6.53413746e-03 7.18197378e-01 2.90658208e+03 -1.92000000e-04 -1.65360701e-12 8.95236866e-02 9.62101033e-02 6.60277778e-02 2.35132704e-02 6.52778406e-03 7.18197378e-01 2.90736586e+03 -1.92100000e-04 -1.65360702e-12 8.94971793e-02 9.61444185e-02 6.60695834e-02 2.35700055e-02 6.52143550e-03 7.18197378e-01 2.90736586e+03 -1.92200000e-04 -1.65360702e-12 8.94706895e-02 9.60787911e-02 6.61113525e-02 2.36266972e-02 6.51509179e-03 7.18197378e-01 2.90793907e+03 -1.92300000e-04 -1.65360702e-12 8.94442174e-02 9.60132211e-02 6.61530851e-02 2.36833456e-02 6.50875292e-03 7.18197378e-01 2.90793907e+03 -1.92400000e-04 -1.65360702e-12 8.94177629e-02 9.59477086e-02 6.61947810e-02 2.37399506e-02 6.50241892e-03 7.18197378e-01 2.90851158e+03 -1.92500000e-04 -1.65360702e-12 8.93913261e-02 9.58822538e-02 6.62364403e-02 2.37965121e-02 6.49608978e-03 7.18197378e-01 2.90851158e+03 -1.92600000e-04 -1.65360702e-12 8.93649070e-02 9.58168566e-02 6.62780629e-02 2.38530301e-02 6.48976551e-03 7.18197378e-01 2.90908341e+03 -1.92700000e-04 -1.65360702e-12 8.93385056e-02 9.57515172e-02 6.63196487e-02 2.39095045e-02 6.48344612e-03 7.18197378e-01 2.90908341e+03 -1.92800000e-04 -1.65360702e-12 8.93121220e-02 9.56862356e-02 6.63611977e-02 2.39659353e-02 6.47713162e-03 7.18197378e-01 2.90965455e+03 -1.92900000e-04 -1.65360702e-12 8.92857561e-02 9.56210119e-02 6.64027098e-02 2.40223223e-02 6.47082200e-03 7.18197378e-01 2.90965455e+03 -1.93000000e-04 -1.65360702e-12 8.92594080e-02 9.55558463e-02 6.64441851e-02 2.40786655e-02 6.46451728e-03 7.18197378e-01 2.91022499e+03 -1.93100000e-04 -1.65360702e-12 8.92330777e-02 9.54907386e-02 6.64856233e-02 2.41349650e-02 6.45821747e-03 7.18197378e-01 2.91079474e+03 -1.93200000e-04 -1.65360702e-12 8.92067653e-02 9.54256892e-02 6.65270246e-02 2.41912205e-02 6.45192257e-03 7.18197378e-01 2.91079474e+03 -1.93300000e-04 -1.65360702e-12 8.91804707e-02 9.53606979e-02 6.65683888e-02 2.42474322e-02 6.44563258e-03 7.18197378e-01 2.91136379e+03 -1.93400000e-04 -1.65360702e-12 8.91541940e-02 9.52957649e-02 6.66097160e-02 2.43035998e-02 6.43934752e-03 7.18197378e-01 2.91136379e+03 -1.93500000e-04 -1.65360702e-12 8.91279352e-02 9.52308903e-02 6.66510060e-02 2.43597233e-02 6.43306738e-03 7.18197378e-01 2.91193215e+03 -1.93600000e-04 -1.65360702e-12 8.91016943e-02 9.51660741e-02 6.66922587e-02 2.44158028e-02 6.42679219e-03 7.18197378e-01 2.91193215e+03 -1.93700000e-04 -1.65360702e-12 8.90754714e-02 9.51013165e-02 6.67334743e-02 2.44718380e-02 6.42052193e-03 7.18197378e-01 2.91249981e+03 -1.93800000e-04 -1.65360702e-12 8.90492665e-02 9.50366174e-02 6.67746525e-02 2.45278291e-02 6.41425663e-03 7.18197378e-01 2.91249981e+03 -1.93900000e-04 -1.65360702e-12 8.90230796e-02 9.49719770e-02 6.68157935e-02 2.45837759e-02 6.40799628e-03 7.18197378e-01 2.91306676e+03 -1.94000000e-04 -1.65360702e-12 8.89969107e-02 9.49073953e-02 6.68568970e-02 2.46396783e-02 6.40174089e-03 7.18197378e-01 2.91306676e+03 -1.94100000e-04 -1.65360702e-12 8.89707598e-02 9.48428724e-02 6.68979631e-02 2.46955363e-02 6.39549047e-03 7.18197378e-01 2.91363301e+03 -1.94200000e-04 -1.65360702e-12 8.89446271e-02 9.47784084e-02 6.69389918e-02 2.47513499e-02 6.38924502e-03 7.18197378e-01 2.91419856e+03 -1.94300000e-04 -1.65360702e-12 8.89185124e-02 9.47140034e-02 6.69799829e-02 2.48071189e-02 6.38300456e-03 7.18197378e-01 2.91419856e+03 -1.94400000e-04 -1.65360702e-12 8.88924158e-02 9.46496573e-02 6.70209365e-02 2.48628434e-02 6.37676908e-03 7.18197378e-01 2.91476340e+03 -1.94500000e-04 -1.65360702e-12 8.88663374e-02 9.45853704e-02 6.70618524e-02 2.49185233e-02 6.37053859e-03 7.18197378e-01 2.91476340e+03 -1.94600000e-04 -1.65360702e-12 8.88402772e-02 9.45211426e-02 6.71027307e-02 2.49741585e-02 6.36431311e-03 7.18197378e-01 2.91532753e+03 -1.94700000e-04 -1.65360702e-12 8.88142352e-02 9.44569741e-02 6.71435713e-02 2.50297489e-02 6.35809263e-03 7.18197378e-01 2.91532753e+03 -1.94800000e-04 -1.65360702e-12 8.87882114e-02 9.43928649e-02 6.71843741e-02 2.50852946e-02 6.35187716e-03 7.18197378e-01 2.91589095e+03 -1.94900000e-04 -1.65360702e-12 8.87622058e-02 9.43288150e-02 6.72251392e-02 2.51407954e-02 6.34566671e-03 7.18197378e-01 2.91589095e+03 -1.95000000e-04 -1.65360702e-12 8.87362185e-02 9.42648246e-02 6.72658664e-02 2.51962514e-02 6.33946128e-03 7.18197378e-01 2.91645367e+03 -1.95100000e-04 -1.65360702e-12 8.87102494e-02 9.42008937e-02 6.73065558e-02 2.52516623e-02 6.33326088e-03 7.18197378e-01 2.91645367e+03 -1.95200000e-04 -1.65360702e-12 8.86842987e-02 9.41370224e-02 6.73472072e-02 2.53070283e-02 6.32706552e-03 7.18197378e-01 2.91701566e+03 -1.95300000e-04 -1.65360702e-12 8.86583663e-02 9.40732108e-02 6.73878206e-02 2.53623492e-02 6.32087521e-03 7.18197378e-01 2.91757695e+03 -1.95400000e-04 -1.65360702e-12 8.86324523e-02 9.40094588e-02 6.74283961e-02 2.54176250e-02 6.31468994e-03 7.18197378e-01 2.91757695e+03 -1.95500000e-04 -1.65360702e-12 8.86065567e-02 9.39457667e-02 6.74689335e-02 2.54728556e-02 6.30850973e-03 7.18197378e-01 2.91813752e+03 -1.95600000e-04 -1.65360702e-12 8.85806794e-02 9.38821344e-02 6.75094328e-02 2.55280410e-02 6.30233457e-03 7.18197378e-01 2.91813752e+03 -1.95700000e-04 -1.65360702e-12 8.85548206e-02 9.38185621e-02 6.75498939e-02 2.55831811e-02 6.29616449e-03 7.18197378e-01 2.91869737e+03 -1.95800000e-04 -1.65360702e-12 8.85289803e-02 9.37550497e-02 6.75903169e-02 2.56382758e-02 6.28999947e-03 7.18197378e-01 2.91869737e+03 -1.95900000e-04 -1.65360702e-12 8.85031584e-02 9.36915974e-02 6.76307016e-02 2.56933252e-02 6.28383954e-03 7.18197378e-01 2.91925650e+03 -1.96000000e-04 -1.65360702e-12 8.84773550e-02 9.36282052e-02 6.76710481e-02 2.57483292e-02 6.27768469e-03 7.18197378e-01 2.91925650e+03 -1.96100000e-04 -1.65360702e-12 8.84515701e-02 9.35648732e-02 6.77113563e-02 2.58032876e-02 6.27153493e-03 7.18197378e-01 2.91981491e+03 -1.96200000e-04 -1.65360702e-12 8.84258038e-02 9.35016015e-02 6.77516261e-02 2.58582005e-02 6.26539027e-03 7.18197378e-01 2.92037260e+03 -1.96300000e-04 -1.65360702e-12 8.84000560e-02 9.34383901e-02 6.77918575e-02 2.59130678e-02 6.25925071e-03 7.18197378e-01 2.92037260e+03 -1.96400000e-04 -1.65360702e-12 8.83743269e-02 9.33752391e-02 6.78320505e-02 2.59678894e-02 6.25311626e-03 7.18197378e-01 2.92092956e+03 -1.96500000e-04 -1.65360702e-12 8.83486163e-02 9.33121486e-02 6.78722050e-02 2.60226654e-02 6.24698692e-03 7.18197378e-01 2.92092956e+03 -1.96600000e-04 -1.65360702e-12 8.83229244e-02 9.32491185e-02 6.79123209e-02 2.60773955e-02 6.24086271e-03 7.18197378e-01 2.92148580e+03 -1.96700000e-04 -1.65360702e-12 8.82972512e-02 9.31861491e-02 6.79523984e-02 2.61320799e-02 6.23474362e-03 7.18197378e-01 2.92148580e+03 -1.96800000e-04 -1.65360702e-12 8.82715966e-02 9.31232403e-02 6.79924372e-02 2.61867184e-02 6.22862966e-03 7.18197378e-01 2.92204131e+03 -1.96900000e-04 -1.65360702e-12 8.82459608e-02 9.30603922e-02 6.80324374e-02 2.62413110e-02 6.22252084e-03 7.18197378e-01 2.92204131e+03 -1.97000000e-04 -1.65360702e-12 8.82203436e-02 9.29976049e-02 6.80723989e-02 2.62958576e-02 6.21641716e-03 7.18197378e-01 2.92259609e+03 -1.97100000e-04 -1.65360702e-12 8.81947452e-02 9.29348784e-02 6.81123216e-02 2.63503582e-02 6.21031864e-03 7.18197378e-01 2.92259609e+03 -1.97200000e-04 -1.65360702e-12 8.81691656e-02 9.28722129e-02 6.81522057e-02 2.64048127e-02 6.20422527e-03 7.18197378e-01 2.92315014e+03 -1.97300000e-04 -1.65360702e-12 8.81436048e-02 9.28096083e-02 6.81920509e-02 2.64592211e-02 6.19813706e-03 7.18197378e-01 2.92370346e+03 -1.97400000e-04 -1.65360702e-12 8.81180629e-02 9.27470647e-02 6.82318572e-02 2.65135833e-02 6.19205401e-03 7.18197378e-01 2.92370346e+03 -1.97500000e-04 -1.65360702e-12 8.80925397e-02 9.26845822e-02 6.82716247e-02 2.65678993e-02 6.18597614e-03 7.18197378e-01 2.92425604e+03 -1.97600000e-04 -1.65360702e-12 8.80670354e-02 9.26221609e-02 6.83113533e-02 2.66221691e-02 6.17990345e-03 7.18197378e-01 2.92425604e+03 -1.97700000e-04 -1.65360702e-12 8.80415501e-02 9.25598007e-02 6.83510429e-02 2.66763925e-02 6.17383594e-03 7.18197378e-01 2.92480789e+03 -1.97800000e-04 -1.65360702e-12 8.80160836e-02 9.24975019e-02 6.83906936e-02 2.67305695e-02 6.16777362e-03 7.18197378e-01 2.92480789e+03 -1.97900000e-04 -1.65360702e-12 8.79906361e-02 9.24352643e-02 6.84303051e-02 2.67847001e-02 6.16171650e-03 7.18197378e-01 2.92535900e+03 -1.98000000e-04 -1.65360702e-12 8.79652075e-02 9.23730882e-02 6.84698777e-02 2.68387842e-02 6.15566457e-03 7.18197378e-01 2.92535900e+03 -1.98100000e-04 -1.65360702e-12 8.79397979e-02 9.23109735e-02 6.85094111e-02 2.68928218e-02 6.14961786e-03 7.18197378e-01 2.92590937e+03 -1.98200000e-04 -1.65360702e-12 8.79144073e-02 9.22489204e-02 6.85489053e-02 2.69468128e-02 6.14357635e-03 7.18197378e-01 2.92590937e+03 -1.98300000e-04 -1.65360702e-12 8.78890357e-02 9.21869288e-02 6.85883604e-02 2.70007572e-02 6.13754006e-03 7.18197378e-01 2.92645901e+03 -1.98400000e-04 -1.65360702e-12 8.78636832e-02 9.21249988e-02 6.86277762e-02 2.70546549e-02 6.13150900e-03 7.18197378e-01 2.92686243e+03 -1.98500000e-04 -1.65360702e-12 8.78383497e-02 9.20631305e-02 6.86671528e-02 2.71085059e-02 6.12548316e-03 7.18197378e-01 2.92686243e+03 -1.98600000e-04 -1.65360702e-12 8.78130354e-02 9.20013240e-02 6.87064901e-02 2.71623102e-02 6.11946256e-03 7.18197378e-01 2.92715643e+03 -1.98700000e-04 -1.65360702e-12 8.77877401e-02 9.19395793e-02 6.87457880e-02 2.72160675e-02 6.11344719e-03 7.18197378e-01 2.92745020e+03 -1.98800000e-04 -1.65360702e-12 8.77624640e-02 9.18778964e-02 6.87850466e-02 2.72697781e-02 6.10743708e-03 7.18197378e-01 2.92774377e+03 -1.98900000e-04 -1.65360702e-12 8.77372071e-02 9.18162754e-02 6.88242657e-02 2.73234417e-02 6.10143221e-03 7.18197378e-01 2.92803712e+03 -1.99000000e-04 -1.65360702e-12 8.77119693e-02 9.17547164e-02 6.88634455e-02 2.73770583e-02 6.09543260e-03 7.18197378e-01 2.92833025e+03 -1.99100000e-04 -1.65360702e-12 8.76867508e-02 9.16932195e-02 6.89025857e-02 2.74306279e-02 6.08943825e-03 7.18197378e-01 2.92870386e+03 -1.99200000e-04 -1.65360702e-12 8.76615515e-02 9.16317846e-02 6.89416864e-02 2.74841505e-02 6.08344916e-03 7.18197378e-01 2.92901987e+03 -1.99300000e-04 -1.65360702e-12 8.76363714e-02 9.15704119e-02 6.89807476e-02 2.75376259e-02 6.07746535e-03 7.18197378e-01 2.92933563e+03 -1.99400000e-04 -1.65360702e-12 8.76112106e-02 9.15091014e-02 6.90197692e-02 2.75910542e-02 6.07148681e-03 7.18197378e-01 2.92949342e+03 -1.99500000e-04 -1.65360702e-12 8.75860691e-02 9.14478532e-02 6.90587511e-02 2.76444352e-02 6.06551356e-03 7.18197378e-01 2.92986820e+03 -1.99600000e-04 -1.65360702e-12 8.75609469e-02 9.13866672e-02 6.90976934e-02 2.76977690e-02 6.05954560e-03 7.18197378e-01 2.93012642e+03 -1.99700000e-04 -1.65360702e-12 8.75358440e-02 9.13255436e-02 6.91365960e-02 2.77510555e-02 6.05358293e-03 7.18197378e-01 2.93040759e+03 -1.99800000e-04 -1.65360702e-12 8.75107605e-02 9.12644825e-02 6.91754589e-02 2.78042947e-02 6.04762555e-03 7.18197378e-01 2.93068427e+03 -1.99900000e-04 -1.65360702e-12 8.74856964e-02 9.12034838e-02 6.92142820e-02 2.78574864e-02 6.04167348e-03 7.18197378e-01 2.93101801e+03 -2.00000000e-04 -1.65360702e-12 8.74606517e-02 9.11425476e-02 6.92530654e-02 2.79106307e-02 6.03572672e-03 7.18197378e-01 2.93147002e+03 -2.00100000e-04 -1.65360702e-12 8.74356264e-02 9.10816740e-02 6.92918089e-02 2.79637275e-02 6.02978528e-03 7.18197378e-01 2.93169290e+03 -2.00200000e-04 -1.65360702e-12 8.74106206e-02 9.10208631e-02 6.93305125e-02 2.80167768e-02 6.02384915e-03 7.18197378e-01 2.93191565e+03 -2.00300000e-04 -1.65360702e-12 8.73856342e-02 9.09601148e-02 6.93691762e-02 2.80697785e-02 6.01791835e-03 7.18197378e-01 2.93276301e+03 -2.00400000e-04 -1.65360702e-12 8.73606674e-02 9.08994293e-02 6.94078000e-02 2.81227326e-02 6.01199288e-03 7.18197378e-01 2.93276301e+03 -2.00500000e-04 -1.65360702e-12 8.73357200e-02 9.08388065e-02 6.94463839e-02 2.81756390e-02 6.00607274e-03 7.18197378e-01 2.93276301e+03 -2.00600000e-04 -1.65360702e-12 8.73107922e-02 9.07782466e-02 6.94849277e-02 2.82284976e-02 6.00015794e-03 7.18197378e-01 2.93338672e+03 -2.00700000e-04 -1.65360702e-12 8.72858840e-02 9.07177496e-02 6.95234315e-02 2.82813085e-02 5.99424849e-03 7.18197378e-01 2.93338672e+03 -2.00800000e-04 -1.65360702e-12 8.72609953e-02 9.06573156e-02 6.95618953e-02 2.83340716e-02 5.98834439e-03 7.18197378e-01 2.93400942e+03 -2.00900000e-04 -1.65360702e-12 8.72361262e-02 9.05969445e-02 6.96003190e-02 2.83867868e-02 5.98244564e-03 7.18197378e-01 2.93400942e+03 -2.01000000e-04 -1.65360702e-12 8.72112767e-02 9.05366365e-02 6.96387025e-02 2.84394542e-02 5.97655226e-03 7.18197378e-01 2.93463110e+03 -2.01100000e-04 -1.65360702e-12 8.71864469e-02 9.04763915e-02 6.96770459e-02 2.84920736e-02 5.97066423e-03 7.18197378e-01 2.93463110e+03 -2.01200000e-04 -1.65360702e-12 8.71616368e-02 9.04162097e-02 6.97153491e-02 2.85446449e-02 5.96478158e-03 7.18197378e-01 2.93556841e+03 -2.01300000e-04 -1.65360702e-12 8.71368463e-02 9.03560912e-02 6.97536121e-02 2.85971683e-02 5.95890431e-03 7.18197378e-01 2.93556841e+03 -2.01400000e-04 -1.65360702e-12 8.71120756e-02 9.02960358e-02 6.97918348e-02 2.86496436e-02 5.95303241e-03 7.18197378e-01 2.93556841e+03 -2.01500000e-04 -1.65360702e-12 8.70873246e-02 9.02360437e-02 6.98300172e-02 2.87020707e-02 5.94716590e-03 7.18197378e-01 2.93650338e+03 -2.01600000e-04 -1.65360702e-12 8.70625933e-02 9.01761150e-02 6.98681594e-02 2.87544497e-02 5.94130478e-03 7.18197378e-01 2.93650338e+03 -2.01700000e-04 -1.65360702e-12 8.70378818e-02 9.01162497e-02 6.99062611e-02 2.88067805e-02 5.93544905e-03 7.18197378e-01 2.93650338e+03 -2.01800000e-04 -1.65360702e-12 8.70131901e-02 9.00564478e-02 6.99443226e-02 2.88590630e-02 5.92959873e-03 7.18197378e-01 2.93743601e+03 -2.01900000e-04 -1.65360702e-12 8.69885182e-02 8.99967094e-02 6.99823436e-02 2.89112972e-02 5.92375380e-03 7.18197378e-01 2.93743601e+03 -2.02000000e-04 -1.65360702e-12 8.69638662e-02 8.99370345e-02 7.00203241e-02 2.89634831e-02 5.91791429e-03 7.18197378e-01 2.93743601e+03 -2.02100000e-04 -1.65360702e-12 8.69392340e-02 8.98774232e-02 7.00582642e-02 2.90156205e-02 5.91208019e-03 7.18197378e-01 2.93836627e+03 -2.02200000e-04 -1.65360702e-12 8.69146217e-02 8.98178755e-02 7.00961639e-02 2.90677096e-02 5.90625152e-03 7.18197378e-01 2.93836627e+03 -2.02300000e-04 -1.65360702e-12 8.68900293e-02 8.97583915e-02 7.01340230e-02 2.91197502e-02 5.90042826e-03 7.18197378e-01 2.93836627e+03 -2.02400000e-04 -1.65360702e-12 8.68654568e-02 8.96989712e-02 7.01718415e-02 2.91717422e-02 5.89461043e-03 7.18197378e-01 2.93836627e+03 -2.02500000e-04 -1.65360702e-12 8.68409043e-02 8.96396146e-02 7.02096195e-02 2.92236858e-02 5.88879804e-03 7.18197378e-01 2.93929418e+03 -2.02600000e-04 -1.65360702e-12 8.68163717e-02 8.95803219e-02 7.02473568e-02 2.92755807e-02 5.88299108e-03 7.18197378e-01 2.93929418e+03 -2.02700000e-04 -1.65360702e-12 8.67918591e-02 8.95210930e-02 7.02850535e-02 2.93274270e-02 5.87718957e-03 7.18197378e-01 2.93929418e+03 -2.02800000e-04 -1.65360702e-12 8.67673665e-02 8.94619280e-02 7.03227096e-02 2.93792246e-02 5.87139351e-03 7.18197378e-01 2.94087549e+03 -2.02900000e-04 -1.65360702e-12 8.67428940e-02 8.94028269e-02 7.03603249e-02 2.94309734e-02 5.86560289e-03 7.18197378e-01 2.94087549e+03 -2.03000000e-04 -1.65360702e-12 8.67184414e-02 8.93437899e-02 7.03978996e-02 2.94826735e-02 5.85981774e-03 7.18197378e-01 2.94087549e+03 -2.03100000e-04 -1.65360702e-12 8.66940090e-02 8.92848168e-02 7.04354334e-02 2.95343248e-02 5.85403804e-03 7.18197378e-01 2.94087549e+03 -2.03200000e-04 -1.65360702e-12 8.66695966e-02 8.92259078e-02 7.04729266e-02 2.95859273e-02 5.84826381e-03 7.18197378e-01 2.94087549e+03 -2.03300000e-04 -1.65360702e-12 8.66452044e-02 8.91670630e-02 7.05103789e-02 2.96374809e-02 5.84249505e-03 7.18197378e-01 2.94244983e+03 -2.03400000e-04 -1.65360702e-12 8.66208323e-02 8.91082823e-02 7.05477903e-02 2.96889855e-02 5.83673177e-03 7.18197378e-01 2.94244983e+03 -2.03500000e-04 -1.65360702e-12 8.65964803e-02 8.90495657e-02 7.05851609e-02 2.97404412e-02 5.83097396e-03 7.18197378e-01 2.94244983e+03 -2.03600000e-04 -1.65360702e-12 8.65721485e-02 8.89909135e-02 7.06224907e-02 2.97918479e-02 5.82522164e-03 7.18197378e-01 2.94244983e+03 -2.03700000e-04 -1.65360702e-12 8.65478369e-02 8.89323254e-02 7.06597795e-02 2.98432055e-02 5.81947481e-03 7.18197378e-01 2.94244983e+03 -2.03800000e-04 -1.65360702e-12 8.65235455e-02 8.88738018e-02 7.06970274e-02 2.98945140e-02 5.81373347e-03 7.18197378e-01 2.94244983e+03 -2.03900000e-04 -1.65360702e-12 8.64992744e-02 8.88153424e-02 7.07342343e-02 2.99457734e-02 5.80799763e-03 7.18197378e-01 2.94490927e+03 -2.04000000e-04 -1.65360702e-12 8.64750235e-02 8.87569475e-02 7.07714002e-02 2.99969836e-02 5.80226729e-03 7.18197378e-01 2.94490927e+03 -2.04100000e-04 -1.65360702e-12 8.64507929e-02 8.86986170e-02 7.08085251e-02 3.00481447e-02 5.79654245e-03 7.18197378e-01 2.94490927e+03 -2.04200000e-04 -1.65360702e-12 8.64265825e-02 8.86403510e-02 7.08456090e-02 3.00992564e-02 5.79082313e-03 7.18197378e-01 2.94490927e+03 -2.04300000e-04 -1.65360702e-12 8.64023925e-02 8.85821496e-02 7.08826518e-02 3.01503189e-02 5.78510932e-03 7.18197378e-01 2.94490927e+03 -2.04400000e-04 -1.65360702e-12 8.63782228e-02 8.85240127e-02 7.09196535e-02 3.02013321e-02 5.77940103e-03 7.18197378e-01 2.94490927e+03 -2.04500000e-04 -1.65360702e-12 8.63540735e-02 8.84659403e-02 7.09566141e-02 3.02522959e-02 5.77369827e-03 7.18197378e-01 2.94490927e+03 -2.04600000e-04 -1.65360702e-12 8.63299445e-02 8.84079327e-02 7.09935336e-02 3.03032103e-02 5.76800103e-03 7.18197378e-01 2.94490927e+03 -2.04700000e-04 -1.65360702e-12 8.63058360e-02 8.83499897e-02 7.10304119e-02 3.03540753e-02 5.76230932e-03 7.18197378e-01 2.94735125e+03 -2.04800000e-04 -1.65360702e-12 8.62817478e-02 8.82921114e-02 7.10672490e-02 3.04048908e-02 5.75662315e-03 7.18197378e-01 2.94735125e+03 -2.04900000e-04 -1.65360702e-12 8.62576801e-02 8.82342978e-02 7.11040449e-02 3.04556568e-02 5.75094253e-03 7.18197378e-01 2.94735125e+03 -2.05000000e-04 -1.65360702e-12 8.62336329e-02 8.81765491e-02 7.11407996e-02 3.05063732e-02 5.74526744e-03 7.18197378e-01 2.94735125e+03 -2.05100000e-04 -1.65360702e-12 8.62096061e-02 8.81188652e-02 7.11775130e-02 3.05570400e-02 5.73959791e-03 7.18197378e-01 2.94735125e+03 -2.05200000e-04 -1.65360702e-12 8.61855998e-02 8.80612461e-02 7.12141851e-02 3.06076572e-02 5.73393393e-03 7.18197378e-01 2.94735125e+03 -2.05300000e-04 -1.65360702e-12 8.61616140e-02 8.80036919e-02 7.12508159e-02 3.06582248e-02 5.72827550e-03 7.18197378e-01 2.94735125e+03 -2.05400000e-04 -1.65360702e-12 8.61376488e-02 8.79462027e-02 7.12874054e-02 3.07087426e-02 5.72262264e-03 7.18197378e-01 2.94735125e+03 -2.05500000e-04 -1.65360702e-12 8.61137041e-02 8.78887785e-02 7.13239536e-02 3.07592107e-02 5.71697534e-03 7.18197378e-01 2.94735125e+03 -2.05600000e-04 -1.65360702e-12 8.60897800e-02 8.78314192e-02 7.13604603e-02 3.08096290e-02 5.71133362e-03 7.18197378e-01 2.94977562e+03 -2.05700000e-04 -1.65360702e-12 8.60658765e-02 8.77741250e-02 7.13969257e-02 3.08599975e-02 5.70569746e-03 7.18197378e-01 2.94977562e+03 -2.05800000e-04 -1.65360702e-12 8.60419935e-02 8.77168958e-02 7.14333497e-02 3.09103162e-02 5.70006689e-03 7.18197378e-01 2.94977562e+03 -2.05900000e-04 -1.65360702e-12 8.60181313e-02 8.76597318e-02 7.14697322e-02 3.09605850e-02 5.69444189e-03 7.18197378e-01 2.94977562e+03 -2.06000000e-04 -1.65360702e-12 8.59942896e-02 8.76026329e-02 7.15060732e-02 3.10108038e-02 5.68882249e-03 7.18197378e-01 2.94977562e+03 -2.06100000e-04 -1.65360702e-12 8.59704687e-02 8.75455992e-02 7.15423728e-02 3.10609728e-02 5.68320867e-03 7.18197378e-01 2.94977562e+03 -2.06200000e-04 -1.65360702e-12 8.59466684e-02 8.74886307e-02 7.15786309e-02 3.11110917e-02 5.67760044e-03 7.18197378e-01 2.94977562e+03 -2.06300000e-04 -1.65360702e-12 8.59228889e-02 8.74317275e-02 7.16148474e-02 3.11611606e-02 5.67199782e-03 7.18197378e-01 2.94977562e+03 -2.06400000e-04 -1.65360702e-12 8.58991300e-02 8.73748895e-02 7.16510224e-02 3.12111794e-02 5.66640079e-03 7.18197378e-01 2.95218225e+03 -2.06500000e-04 -1.65360702e-12 8.58753919e-02 8.73181168e-02 7.16871559e-02 3.12611481e-02 5.66080937e-03 7.18197378e-01 2.95218225e+03 -2.06600000e-04 -1.65360702e-12 8.58516746e-02 8.72614095e-02 7.17232477e-02 3.13110668e-02 5.65522356e-03 7.18197378e-01 2.95218225e+03 -2.06700000e-04 -1.65360702e-12 8.58279781e-02 8.72047675e-02 7.17592980e-02 3.13609352e-02 5.64964337e-03 7.18197378e-01 2.95218225e+03 -2.06800000e-04 -1.65360702e-12 8.58043024e-02 8.71481910e-02 7.17953066e-02 3.14107535e-02 5.64406879e-03 7.18197378e-01 2.95218225e+03 -2.06900000e-04 -1.65360702e-12 8.57806475e-02 8.70916798e-02 7.18312736e-02 3.14605215e-02 5.63849983e-03 7.18197378e-01 2.95218225e+03 -2.07000000e-04 -1.65360702e-12 8.57570134e-02 8.70352342e-02 7.18671989e-02 3.15102392e-02 5.63293649e-03 7.18197378e-01 2.95218225e+03 -2.07100000e-04 -1.65360702e-12 8.57334002e-02 8.69788540e-02 7.19030825e-02 3.15599067e-02 5.62737879e-03 7.18197378e-01 2.95218225e+03 -2.07200000e-04 -1.65360702e-12 8.57098079e-02 8.69225394e-02 7.19389244e-02 3.16095238e-02 5.62182672e-03 7.18197378e-01 2.95218225e+03 -2.07300000e-04 -1.65360702e-12 8.56862365e-02 8.68662903e-02 7.19747246e-02 3.16590905e-02 5.61628028e-03 7.18197378e-01 2.95457098e+03 -2.07400000e-04 -1.65360702e-12 8.56626860e-02 8.68101068e-02 7.20104830e-02 3.17086069e-02 5.61073948e-03 7.18197378e-01 2.95457098e+03 -2.07500000e-04 -1.65360702e-12 8.56391564e-02 8.67539889e-02 7.20461997e-02 3.17580728e-02 5.60520433e-03 7.18197378e-01 2.95457098e+03 -2.07600000e-04 -1.65360702e-12 8.56156478e-02 8.66979367e-02 7.20818746e-02 3.18074882e-02 5.59967482e-03 7.18197378e-01 2.95457098e+03 -2.07700000e-04 -1.65360702e-12 8.55921601e-02 8.66419501e-02 7.21175078e-02 3.18568532e-02 5.59415096e-03 7.18197378e-01 2.95457098e+03 -2.07800000e-04 -1.65360702e-12 8.55686935e-02 8.65860292e-02 7.21530991e-02 3.19061676e-02 5.58863276e-03 7.18197378e-01 2.95457098e+03 -2.07900000e-04 -1.65360702e-12 8.55452478e-02 8.65301741e-02 7.21886485e-02 3.19554315e-02 5.58312022e-03 7.18197378e-01 2.95457098e+03 -2.08000000e-04 -1.65360702e-12 8.55218232e-02 8.64743847e-02 7.22241561e-02 3.20046448e-02 5.57761333e-03 7.18197378e-01 2.95457098e+03 -2.08100000e-04 -1.65360702e-12 8.54984197e-02 8.64186611e-02 7.22596219e-02 3.20538074e-02 5.57211212e-03 7.18197378e-01 2.95457098e+03 -2.08200000e-04 -1.65360702e-12 8.54750372e-02 8.63630033e-02 7.22950458e-02 3.21029194e-02 5.56661657e-03 7.18197378e-01 2.95694168e+03 -2.08300000e-04 -1.65360702e-12 8.54516758e-02 8.63074113e-02 7.23304277e-02 3.21519807e-02 5.56112669e-03 7.18197378e-01 2.95694168e+03 -2.08400000e-04 -1.65360702e-12 8.54283354e-02 8.62518852e-02 7.23657678e-02 3.22009912e-02 5.55564249e-03 7.18197378e-01 2.95694168e+03 -2.08500000e-04 -1.65360702e-12 8.54050162e-02 8.61964250e-02 7.24010659e-02 3.22499511e-02 5.55016396e-03 7.18197378e-01 2.95694168e+03 -2.08600000e-04 -1.65360702e-12 8.53817182e-02 8.61410307e-02 7.24363220e-02 3.22988601e-02 5.54469112e-03 7.18197378e-01 2.95694168e+03 -2.08700000e-04 -1.65360702e-12 8.53584413e-02 8.60857023e-02 7.24715362e-02 3.23477183e-02 5.53922397e-03 7.18197378e-01 2.95694168e+03 -2.08800000e-04 -1.65360702e-12 8.53351856e-02 8.60304399e-02 7.25067084e-02 3.23965257e-02 5.53376250e-03 7.18197378e-01 2.95694168e+03 -2.08900000e-04 -1.65360702e-12 8.53119510e-02 8.59752435e-02 7.25418386e-02 3.24452822e-02 5.52830673e-03 7.18197378e-01 2.95694168e+03 -2.09000000e-04 -1.65360702e-12 8.52887377e-02 8.59201131e-02 7.25769268e-02 3.24939878e-02 5.52285665e-03 7.18197378e-01 2.95929421e+03 -2.09100000e-04 -1.65360702e-12 8.52655456e-02 8.58650488e-02 7.26119730e-02 3.25426425e-02 5.51741228e-03 7.18197378e-01 2.95929421e+03 -2.09200000e-04 -1.65360702e-12 8.52423747e-02 8.58100505e-02 7.26469771e-02 3.25912462e-02 5.51197360e-03 7.18197378e-01 2.95929421e+03 -2.09300000e-04 -1.65360702e-12 8.52192251e-02 8.57551182e-02 7.26819392e-02 3.26397989e-02 5.50654063e-03 7.18197378e-01 2.95929421e+03 -2.09400000e-04 -1.65360702e-12 8.51960968e-02 8.57002521e-02 7.27168592e-02 3.26883006e-02 5.50111337e-03 7.18197378e-01 2.95929421e+03 -2.09500000e-04 -1.65360702e-12 8.51729898e-02 8.56454521e-02 7.27517371e-02 3.27367513e-02 5.49569183e-03 7.18197378e-01 2.95929421e+03 -2.09600000e-04 -1.65360702e-12 8.51499041e-02 8.55907183e-02 7.27865729e-02 3.27851509e-02 5.49027599e-03 7.18197378e-01 2.95929421e+03 -2.09700000e-04 -1.65360702e-12 8.51268397e-02 8.55360507e-02 7.28213666e-02 3.28334993e-02 5.48486588e-03 7.18197378e-01 2.95929421e+03 -2.09800000e-04 -1.65360702e-12 8.51037967e-02 8.54814492e-02 7.28561181e-02 3.28817966e-02 5.47946149e-03 7.18197378e-01 2.95929421e+03 -2.09900000e-04 -1.65360702e-12 8.50807750e-02 8.54269139e-02 7.28908275e-02 3.29300428e-02 5.47406282e-03 7.18197378e-01 2.96162844e+03 -2.10000000e-04 -1.65360702e-12 8.50577748e-02 8.53724449e-02 7.29254948e-02 3.29782378e-02 5.46866989e-03 7.18197378e-01 2.96162844e+03 -2.10100000e-04 -1.65360702e-12 8.50347959e-02 8.53180422e-02 7.29601199e-02 3.30263815e-02 5.46328268e-03 7.18197378e-01 2.96162844e+03 -2.10200000e-04 -1.65360702e-12 8.50118384e-02 8.52637057e-02 7.29947028e-02 3.30744740e-02 5.45790121e-03 7.18197378e-01 2.96162844e+03 -2.10300000e-04 -1.65360702e-12 8.49889024e-02 8.52094355e-02 7.30292435e-02 3.31225153e-02 5.45252548e-03 7.18197378e-01 2.96162844e+03 -2.10400000e-04 -1.65360702e-12 8.49659879e-02 8.51552317e-02 7.30637419e-02 3.31705052e-02 5.44715548e-03 7.18197378e-01 2.96162844e+03 -2.10500000e-04 -1.65360702e-12 8.49430948e-02 8.51010942e-02 7.30981982e-02 3.32184438e-02 5.44179123e-03 7.18197378e-01 2.96162844e+03 -2.10600000e-04 -1.65360702e-12 8.49202232e-02 8.50470230e-02 7.31326123e-02 3.32663310e-02 5.43643273e-03 7.18197378e-01 2.96162844e+03 -2.10700000e-04 -1.65360702e-12 8.48973730e-02 8.49930182e-02 7.31669840e-02 3.33141669e-02 5.43107998e-03 7.18197378e-01 2.96394423e+03 -2.10800000e-04 -1.65360702e-12 8.48745445e-02 8.49390798e-02 7.32013136e-02 3.33619513e-02 5.42573298e-03 7.18197378e-01 2.96394423e+03 -2.10900000e-04 -1.65360702e-12 8.48517374e-02 8.48852079e-02 7.32356008e-02 3.34096843e-02 5.42039173e-03 7.18197378e-01 2.96394423e+03 -2.11000000e-04 -1.65360702e-12 8.48289519e-02 8.48314023e-02 7.32698458e-02 3.34573659e-02 5.41505625e-03 7.18197378e-01 2.96394423e+03 -2.11100000e-04 -1.65360702e-12 8.48061880e-02 8.47776632e-02 7.33040485e-02 3.35049959e-02 5.40972652e-03 7.18197378e-01 2.96394423e+03 -2.11200000e-04 -1.65360702e-12 8.47834456e-02 8.47239906e-02 7.33382089e-02 3.35525745e-02 5.40440256e-03 7.18197378e-01 2.96394423e+03 -2.11300000e-04 -1.65360702e-12 8.47607249e-02 8.46703845e-02 7.33723269e-02 3.36001015e-02 5.39908437e-03 7.18197378e-01 2.96394423e+03 -2.11400000e-04 -1.65360702e-12 8.47380258e-02 8.46168449e-02 7.34064027e-02 3.36475769e-02 5.39377195e-03 7.18197378e-01 2.96394423e+03 -2.11500000e-04 -1.65360702e-12 8.47153483e-02 8.45633717e-02 7.34404361e-02 3.36950008e-02 5.38846530e-03 7.18197378e-01 2.96394423e+03 -2.11600000e-04 -1.65360702e-12 8.46926924e-02 8.45099652e-02 7.34744271e-02 3.37423730e-02 5.38316442e-03 7.18197378e-01 2.96624148e+03 -2.11700000e-04 -1.65360702e-12 8.46700583e-02 8.44566251e-02 7.35083759e-02 3.37896936e-02 5.37786932e-03 7.18197378e-01 2.96624148e+03 -2.11800000e-04 -1.65360702e-12 8.46474458e-02 8.44033516e-02 7.35422822e-02 3.38369625e-02 5.37258001e-03 7.18197378e-01 2.96624148e+03 -2.11900000e-04 -1.65360702e-12 8.46248550e-02 8.43501448e-02 7.35761462e-02 3.38841798e-02 5.36729648e-03 7.18197378e-01 2.96624148e+03 -2.12000000e-04 -1.65360702e-12 8.46022859e-02 8.42970045e-02 7.36099677e-02 3.39313453e-02 5.36201873e-03 7.18197378e-01 2.96624148e+03 -2.12100000e-04 -1.65360702e-12 8.45797386e-02 8.42439308e-02 7.36437469e-02 3.39784591e-02 5.35674678e-03 7.18197378e-01 2.96624148e+03 -2.12200000e-04 -1.65360702e-12 8.45572130e-02 8.41909237e-02 7.36774837e-02 3.40255211e-02 5.35148061e-03 7.18197378e-01 2.96624148e+03 -2.12300000e-04 -1.65360702e-12 8.45347091e-02 8.41379833e-02 7.37111781e-02 3.40725314e-02 5.34622024e-03 7.18197378e-01 2.96624148e+03 -2.12400000e-04 -1.65360702e-12 8.45122271e-02 8.40851095e-02 7.37448300e-02 3.41194899e-02 5.34096567e-03 7.18197378e-01 2.96852004e+03 -2.12500000e-04 -1.65360702e-12 8.44897668e-02 8.40323024e-02 7.37784396e-02 3.41663965e-02 5.33571690e-03 7.18197378e-01 2.96852004e+03 -2.12600000e-04 -1.65360702e-12 8.44673284e-02 8.39795620e-02 7.38120066e-02 3.42132512e-02 5.33047392e-03 7.18197378e-01 2.96852004e+03 -2.12700000e-04 -1.65360702e-12 8.44449118e-02 8.39268882e-02 7.38455313e-02 3.42600541e-02 5.32523676e-03 7.18197378e-01 2.96852004e+03 -2.12800000e-04 -1.65360702e-12 8.44225170e-02 8.38742812e-02 7.38790135e-02 3.43068051e-02 5.32000540e-03 7.18197378e-01 2.96852004e+03 -2.12900000e-04 -1.65360702e-12 8.44001441e-02 8.38217408e-02 7.39124532e-02 3.43535042e-02 5.31477985e-03 7.18197378e-01 2.96852004e+03 -2.13000000e-04 -1.65360702e-12 8.43777930e-02 8.37692673e-02 7.39458504e-02 3.44001513e-02 5.30956011e-03 7.18197378e-01 2.96852004e+03 -2.13100000e-04 -1.65360702e-12 8.43554638e-02 8.37168604e-02 7.39792052e-02 3.44467465e-02 5.30434619e-03 7.18197378e-01 2.96852004e+03 -2.13200000e-04 -1.65360702e-12 8.43331566e-02 8.36645203e-02 7.40125175e-02 3.44932897e-02 5.29913809e-03 7.18197378e-01 2.96852004e+03 -2.13300000e-04 -1.65360702e-12 8.43108712e-02 8.36122469e-02 7.40457873e-02 3.45397809e-02 5.29393580e-03 7.18197378e-01 2.97077982e+03 -2.13400000e-04 -1.65360702e-12 8.42886078e-02 8.35600403e-02 7.40790146e-02 3.45862200e-02 5.28873934e-03 7.18197378e-01 2.97077982e+03 -2.13500000e-04 -1.65360702e-12 8.42663664e-02 8.35079005e-02 7.41121994e-02 3.46326071e-02 5.28354870e-03 7.18197378e-01 2.97077982e+03 -2.13600000e-04 -1.65360702e-12 8.42441469e-02 8.34558275e-02 7.41453417e-02 3.46789422e-02 5.27836388e-03 7.18197378e-01 2.97077982e+03 -2.13700000e-04 -1.65360702e-12 8.42219493e-02 8.34038213e-02 7.41784415e-02 3.47252251e-02 5.27318490e-03 7.18197378e-01 2.97077982e+03 -2.13800000e-04 -1.65360702e-12 8.41997738e-02 8.33518819e-02 7.42114988e-02 3.47714559e-02 5.26801175e-03 7.18197378e-01 2.97077982e+03 -2.13900000e-04 -1.65360702e-12 8.41776203e-02 8.33000093e-02 7.42445135e-02 3.48176346e-02 5.26284443e-03 7.18197378e-01 2.97077982e+03 -2.14000000e-04 -1.65360702e-12 8.41554888e-02 8.32482036e-02 7.42774857e-02 3.48637612e-02 5.25768294e-03 7.18197378e-01 2.97077982e+03 -2.14100000e-04 -1.65360702e-12 8.41333793e-02 8.31964647e-02 7.43104154e-02 3.49098355e-02 5.25252730e-03 7.18197378e-01 2.97302068e+03 -2.14200000e-04 -1.65360702e-12 8.41112919e-02 8.31447926e-02 7.43433025e-02 3.49558577e-02 5.24737749e-03 7.18197378e-01 2.97302068e+03 -2.14300000e-04 -1.65360702e-12 8.40892265e-02 8.30931874e-02 7.43761471e-02 3.50018277e-02 5.24223353e-03 7.18197378e-01 2.97302068e+03 -2.14400000e-04 -1.65360702e-12 8.40671833e-02 8.30416490e-02 7.44089491e-02 3.50477454e-02 5.23709541e-03 7.18197378e-01 2.97302068e+03 -2.14500000e-04 -1.65360702e-12 8.40451621e-02 8.29901775e-02 7.44417085e-02 3.50936109e-02 5.23196314e-03 7.18197378e-01 2.97302068e+03 -2.14600000e-04 -1.65360702e-12 8.40231630e-02 8.29387729e-02 7.44744254e-02 3.51394241e-02 5.22683671e-03 7.18197378e-01 2.97302068e+03 -2.14700000e-04 -1.65360702e-12 8.40011861e-02 8.28874351e-02 7.45070998e-02 3.51851850e-02 5.22171614e-03 7.18197378e-01 2.97302068e+03 -2.14800000e-04 -1.65360702e-12 8.39792313e-02 8.28361643e-02 7.45397315e-02 3.52308937e-02 5.21660142e-03 7.18197378e-01 2.97302068e+03 -2.14900000e-04 -1.65360702e-12 8.39572986e-02 8.27849603e-02 7.45723207e-02 3.52765500e-02 5.21149256e-03 7.18197378e-01 2.97302068e+03 -2.15000000e-04 -1.65360702e-12 8.39353881e-02 8.27338232e-02 7.46048673e-02 3.53221539e-02 5.20638955e-03 7.18197378e-01 2.97524252e+03 -2.15100000e-04 -1.65360702e-12 8.39134998e-02 8.26827531e-02 7.46373713e-02 3.53677055e-02 5.20129240e-03 7.18197378e-01 2.97524252e+03 -2.15200000e-04 -1.65360702e-12 8.38916337e-02 8.26317498e-02 7.46698328e-02 3.54132048e-02 5.19620111e-03 7.18197378e-01 2.97524252e+03 -2.15300000e-04 -1.65360702e-12 8.38697898e-02 8.25808135e-02 7.47022516e-02 3.54586516e-02 5.19111569e-03 7.18197378e-01 2.97524252e+03 -2.15400000e-04 -1.65360702e-12 8.38479681e-02 8.25299441e-02 7.47346279e-02 3.55040460e-02 5.18603613e-03 7.18197378e-01 2.97524252e+03 -2.15500000e-04 -1.65360702e-12 8.38261686e-02 8.24791415e-02 7.47669616e-02 3.55493880e-02 5.18096244e-03 7.18197378e-01 2.97524252e+03 -2.15600000e-04 -1.65360702e-12 8.38043914e-02 8.24284060e-02 7.47992526e-02 3.55946775e-02 5.17589461e-03 7.18197378e-01 2.97524252e+03 -2.15700000e-04 -1.65360702e-12 8.37826364e-02 8.23777373e-02 7.48315011e-02 3.56399146e-02 5.17083266e-03 7.18197378e-01 2.97524252e+03 -2.15800000e-04 -1.65360702e-12 8.37609038e-02 8.23271356e-02 7.48637070e-02 3.56850992e-02 5.16577658e-03 7.18197378e-01 2.97524252e+03 -2.15900000e-04 -1.65360702e-12 8.37391934e-02 8.22766008e-02 7.48958703e-02 3.57302313e-02 5.16072637e-03 7.18197378e-01 2.97744523e+03 -2.16000000e-04 -1.65360702e-12 8.37175053e-02 8.22261330e-02 7.49279910e-02 3.57753109e-02 5.15568204e-03 7.18197378e-01 2.97744523e+03 -2.16100000e-04 -1.65360702e-12 8.36958395e-02 8.21757321e-02 7.49600690e-02 3.58203379e-02 5.15064359e-03 7.18197378e-01 2.97744523e+03 -2.16200000e-04 -1.65360702e-12 8.36741961e-02 8.21253981e-02 7.49921045e-02 3.58653125e-02 5.14561101e-03 7.18197378e-01 2.97744523e+03 -2.16300000e-04 -1.65360702e-12 8.36525750e-02 8.20751311e-02 7.50240973e-02 3.59102344e-02 5.14058432e-03 7.18197378e-01 2.97744523e+03 -2.16400000e-04 -1.65360702e-12 8.36309762e-02 8.20249311e-02 7.50560476e-02 3.59551038e-02 5.13556351e-03 7.18197378e-01 2.97744523e+03 -2.16500000e-04 -1.65360702e-12 8.36093998e-02 8.19747980e-02 7.50879552e-02 3.59999206e-02 5.13054858e-03 7.18197378e-01 2.97744523e+03 -2.16600000e-04 -1.65360702e-12 8.35878458e-02 8.19247318e-02 7.51198202e-02 3.60446848e-02 5.12553955e-03 7.18197378e-01 2.97744523e+03 -2.16700000e-04 -1.65360702e-12 8.35663142e-02 8.18747326e-02 7.51516426e-02 3.60893963e-02 5.12053640e-03 7.18197378e-01 2.97962872e+03 -2.16800000e-04 -1.65360702e-12 8.35448050e-02 8.18248003e-02 7.51834224e-02 3.61340553e-02 5.11553913e-03 7.18197378e-01 2.97962872e+03 -2.16900000e-04 -1.65360702e-12 8.35233182e-02 8.17749350e-02 7.52151596e-02 3.61786616e-02 5.11054776e-03 7.18197378e-01 2.97962872e+03 -2.17000000e-04 -1.65360702e-12 8.35018538e-02 8.17251366e-02 7.52468542e-02 3.62232152e-02 5.10556229e-03 7.18197378e-01 2.97962872e+03 -2.17100000e-04 -1.65360702e-12 8.34804119e-02 8.16754052e-02 7.52785062e-02 3.62677161e-02 5.10058271e-03 7.18197378e-01 2.97962872e+03 -2.17200000e-04 -1.65360702e-12 8.34589924e-02 8.16257407e-02 7.53101156e-02 3.63121644e-02 5.09560902e-03 7.18197378e-01 2.97962872e+03 -2.17300000e-04 -1.65360702e-12 8.34375954e-02 8.15761432e-02 7.53416823e-02 3.63565600e-02 5.09064123e-03 7.18197378e-01 2.97962872e+03 -2.17400000e-04 -1.65360702e-12 8.34162209e-02 8.15266126e-02 7.53732065e-02 3.64009028e-02 5.08567934e-03 7.18197378e-01 2.97962872e+03 -2.17500000e-04 -1.65360702e-12 8.33948689e-02 8.14771490e-02 7.54046880e-02 3.64451929e-02 5.08072335e-03 7.18197378e-01 2.97962872e+03 -2.17600000e-04 -1.65360702e-12 8.33735394e-02 8.14277523e-02 7.54361269e-02 3.64894303e-02 5.07577326e-03 7.18197378e-01 2.98179288e+03 -2.17700000e-04 -1.65360702e-12 8.33522324e-02 8.13784226e-02 7.54675233e-02 3.65336149e-02 5.07082908e-03 7.18197378e-01 2.98179288e+03 -2.17800000e-04 -1.65360702e-12 8.33309479e-02 8.13291597e-02 7.54988770e-02 3.65777467e-02 5.06589080e-03 7.18197378e-01 2.98179288e+03 -2.17900000e-04 -1.65360702e-12 8.33096860e-02 8.12799639e-02 7.55301881e-02 3.66218258e-02 5.06095842e-03 7.18197378e-01 2.98179288e+03 -2.18000000e-04 -1.65360702e-12 8.32884466e-02 8.12308349e-02 7.55614566e-02 3.66658521e-02 5.05603195e-03 7.18197378e-01 2.98179288e+03 -2.18100000e-04 -1.65360702e-12 8.32672298e-02 8.11817729e-02 7.55926825e-02 3.67098255e-02 5.05111140e-03 7.18197378e-01 2.98179288e+03 -2.18200000e-04 -1.65360702e-12 8.32460355e-02 8.11327778e-02 7.56238659e-02 3.67537462e-02 5.04619675e-03 7.18197378e-01 2.98179288e+03 -2.18300000e-04 -1.65360702e-12 8.32248639e-02 8.10838497e-02 7.56550066e-02 3.67976140e-02 5.04128801e-03 7.18197378e-01 2.98179288e+03 -2.18400000e-04 -1.65360702e-12 8.32037148e-02 8.10349884e-02 7.56861047e-02 3.68414290e-02 5.03638519e-03 7.18197378e-01 2.98325129e+03 -2.18500000e-04 -1.65360702e-12 8.31825884e-02 8.09861941e-02 7.57171603e-02 3.68851911e-02 5.03148827e-03 7.18197378e-01 2.98325129e+03 -2.18600000e-04 -1.65360702e-12 8.31614845e-02 8.09374666e-02 7.57481733e-02 3.69289004e-02 5.02659728e-03 7.18197378e-01 2.98325129e+03 -2.18700000e-04 -1.65360702e-12 8.31404033e-02 8.08888061e-02 7.57791437e-02 3.69725568e-02 5.02171220e-03 7.18197378e-01 2.98325129e+03 -2.18800000e-04 -1.65360702e-12 8.31193448e-02 8.08402125e-02 7.58100715e-02 3.70161604e-02 5.01683304e-03 7.18197378e-01 2.98325129e+03 -2.18900000e-04 -1.65360702e-12 8.30983089e-02 8.07916857e-02 7.58409567e-02 3.70597110e-02 5.01195979e-03 7.18197378e-01 2.98325129e+03 -2.19000000e-04 -1.65360702e-12 8.30772957e-02 8.07432258e-02 7.58717994e-02 3.71032087e-02 5.00709247e-03 7.18197378e-01 2.98421787e+03 -2.19100000e-04 -1.65360702e-12 8.30563051e-02 8.06948329e-02 7.59025995e-02 3.71466535e-02 5.00223106e-03 7.18197378e-01 2.98421787e+03 -2.19200000e-04 -1.65360702e-12 8.30353373e-02 8.06465067e-02 7.59333571e-02 3.71900454e-02 4.99737558e-03 7.18197378e-01 2.98421787e+03 -2.19300000e-04 -1.65360702e-12 8.30143921e-02 8.05982475e-02 7.59640721e-02 3.72333844e-02 4.99252602e-03 7.18197378e-01 2.98421787e+03 -2.19400000e-04 -1.65360702e-12 8.29934697e-02 8.05500551e-02 7.59947445e-02 3.72766704e-02 4.98768239e-03 7.18197378e-01 2.98518046e+03 -2.19500000e-04 -1.65360702e-12 8.29725699e-02 8.05019296e-02 7.60253744e-02 3.73199035e-02 4.98284468e-03 7.18197378e-01 2.98518046e+03 -2.19600000e-04 -1.65360702e-12 8.29516929e-02 8.04538709e-02 7.60559618e-02 3.73630837e-02 4.97801289e-03 7.18197378e-01 2.98518046e+03 -2.19700000e-04 -1.65360702e-12 8.29308387e-02 8.04058791e-02 7.60865066e-02 3.74062108e-02 4.97318704e-03 7.18197378e-01 2.98518046e+03 -2.19800000e-04 -1.65360702e-12 8.29100072e-02 8.03579540e-02 7.61170089e-02 3.74492850e-02 4.96836711e-03 7.18197378e-01 2.98613904e+03 -2.19900000e-04 -1.65360702e-12 8.28891984e-02 8.03100958e-02 7.61474686e-02 3.74923062e-02 4.96355311e-03 7.18197378e-01 2.98613904e+03 -2.20000000e-04 -1.65360702e-12 8.28684125e-02 8.02623044e-02 7.61778858e-02 3.75352744e-02 4.95874504e-03 7.18197378e-01 2.98613904e+03 -2.20100000e-04 -1.65360702e-12 8.28476493e-02 8.02145798e-02 7.62082605e-02 3.75781896e-02 4.95394289e-03 7.18197378e-01 2.98613904e+03 -2.20200000e-04 -1.65360702e-12 8.28269089e-02 8.01669220e-02 7.62385927e-02 3.76210518e-02 4.94914669e-03 7.18197378e-01 2.98709361e+03 -2.20300000e-04 -1.65360702e-12 8.28061913e-02 8.01193310e-02 7.62688824e-02 3.76638610e-02 4.94435641e-03 7.18197378e-01 2.98709361e+03 -2.20400000e-04 -1.65360702e-12 8.27854965e-02 8.00718068e-02 7.62991296e-02 3.77066172e-02 4.93957206e-03 7.18197378e-01 2.98709361e+03 -2.20500000e-04 -1.65360702e-12 8.27648246e-02 8.00243493e-02 7.63293344e-02 3.77493203e-02 4.93479365e-03 7.18197378e-01 2.98709361e+03 -2.20600000e-04 -1.65360702e-12 8.27441755e-02 7.99769585e-02 7.63594966e-02 3.77919704e-02 4.93002118e-03 7.18197378e-01 2.98804417e+03 -2.20700000e-04 -1.65360702e-12 8.27235492e-02 7.99296345e-02 7.63896163e-02 3.78345674e-02 4.92525464e-03 7.18197378e-01 2.98804417e+03 -2.20800000e-04 -1.65360702e-12 8.27029458e-02 7.98823773e-02 7.64196936e-02 3.78771114e-02 4.92049403e-03 7.18197378e-01 2.98804417e+03 -2.20900000e-04 -1.65360702e-12 8.26823652e-02 7.98351867e-02 7.64497284e-02 3.79196024e-02 4.91573937e-03 7.18197378e-01 2.98899071e+03 -2.21000000e-04 -1.65360702e-12 8.26618076e-02 7.97880629e-02 7.64797208e-02 3.79620403e-02 4.91099064e-03 7.18197378e-01 2.98899071e+03 -2.21100000e-04 -1.65360702e-12 8.26412728e-02 7.97410058e-02 7.65096707e-02 3.80044251e-02 4.90624785e-03 7.18197378e-01 2.98899071e+03 -2.21200000e-04 -1.65360702e-12 8.26207609e-02 7.96940153e-02 7.65395781e-02 3.80467569e-02 4.90151099e-03 7.18197378e-01 2.98899071e+03 -2.21300000e-04 -1.65360702e-12 8.26002719e-02 7.96470915e-02 7.65694432e-02 3.80890355e-02 4.89678008e-03 7.18197378e-01 2.98993321e+03 -2.21400000e-04 -1.65360702e-12 8.25798058e-02 7.96002344e-02 7.65992658e-02 3.81312611e-02 4.89205511e-03 7.18197378e-01 2.98993321e+03 -2.21500000e-04 -1.65360702e-12 8.25593626e-02 7.95534439e-02 7.66290460e-02 3.81734336e-02 4.88733607e-03 7.18197378e-01 2.98993321e+03 -2.21600000e-04 -1.65360702e-12 8.25389423e-02 7.95067201e-02 7.66587837e-02 3.82155530e-02 4.88262298e-03 7.18197378e-01 2.98993321e+03 -2.21700000e-04 -1.65360702e-12 8.25185450e-02 7.94600628e-02 7.66884791e-02 3.82576194e-02 4.87791583e-03 7.18197378e-01 2.99057783e+03 -2.21800000e-04 -1.65360702e-12 8.24981707e-02 7.94134722e-02 7.67181321e-02 3.82996326e-02 4.87321462e-03 7.18197378e-01 2.99057783e+03 -2.21900000e-04 -1.65360702e-12 8.24778192e-02 7.93669482e-02 7.67477427e-02 3.83415927e-02 4.86851936e-03 7.18197378e-01 2.99057783e+03 -2.22000000e-04 -1.65360702e-12 8.24574908e-02 7.93204907e-02 7.67773109e-02 3.83834997e-02 4.86383003e-03 7.18197378e-01 2.99122055e+03 -2.22100000e-04 -1.65360702e-12 8.24371853e-02 7.92740999e-02 7.68068368e-02 3.84253535e-02 4.85914665e-03 7.18197378e-01 2.99122055e+03 -2.22200000e-04 -1.65360702e-12 8.24169028e-02 7.92277755e-02 7.68363203e-02 3.84671543e-02 4.85446922e-03 7.18197378e-01 2.99122055e+03 -2.22300000e-04 -1.65360702e-12 8.23966433e-02 7.91815177e-02 7.68657614e-02 3.85089019e-02 4.84979773e-03 7.18197378e-01 2.99186136e+03 -2.22400000e-04 -1.65360702e-12 8.23764068e-02 7.91353264e-02 7.68951603e-02 3.85505964e-02 4.84513218e-03 7.18197378e-01 2.99186136e+03 -2.22500000e-04 -1.65360702e-12 8.23561933e-02 7.90892017e-02 7.69245168e-02 3.85922378e-02 4.84047258e-03 7.18197378e-01 2.99250026e+03 -2.22600000e-04 -1.65360702e-12 8.23360029e-02 7.90431434e-02 7.69538309e-02 3.86338261e-02 4.83581892e-03 7.18197378e-01 2.99250026e+03 -2.22700000e-04 -1.65360702e-12 8.23158354e-02 7.89971515e-02 7.69831028e-02 3.86753612e-02 4.83117121e-03 7.18197378e-01 2.99250026e+03 -2.22800000e-04 -1.65360702e-12 8.22956910e-02 7.89512262e-02 7.70123324e-02 3.87168431e-02 4.82652945e-03 7.18197378e-01 2.99353944e+03 -2.22900000e-04 -1.65360702e-12 8.22755696e-02 7.89053673e-02 7.70415197e-02 3.87582720e-02 4.82189363e-03 7.18197378e-01 2.99353944e+03 -2.23000000e-04 -1.65360702e-12 8.22554713e-02 7.88595747e-02 7.70706647e-02 3.87996477e-02 4.81726376e-03 7.18197378e-01 2.99353944e+03 -2.23100000e-04 -1.65360702e-12 8.22353960e-02 7.88138486e-02 7.70997675e-02 3.88409702e-02 4.81263983e-03 7.18197378e-01 2.99353944e+03 -2.23200000e-04 -1.65360702e-12 8.22153438e-02 7.87681889e-02 7.71288280e-02 3.88822396e-02 4.80802185e-03 7.18197378e-01 2.99457352e+03 -2.23300000e-04 -1.65360702e-12 8.21953146e-02 7.87225956e-02 7.71578462e-02 3.89234559e-02 4.80340982e-03 7.18197378e-01 2.99457352e+03 -2.23400000e-04 -1.65360702e-12 8.21753085e-02 7.86770686e-02 7.71868222e-02 3.89646190e-02 4.79880374e-03 7.18197378e-01 2.99457352e+03 -2.23500000e-04 -1.65360702e-12 8.21553256e-02 7.86316079e-02 7.72157561e-02 3.90057290e-02 4.79420360e-03 7.18197378e-01 2.99457352e+03 -2.23600000e-04 -1.65360702e-12 8.21353657e-02 7.85862136e-02 7.72446477e-02 3.90467858e-02 4.78960941e-03 7.18197378e-01 2.99457352e+03 -2.23700000e-04 -1.65360702e-12 8.21154289e-02 7.85408856e-02 7.72734971e-02 3.90877895e-02 4.78502117e-03 7.18197378e-01 2.99560249e+03 -2.23800000e-04 -1.65360702e-12 8.20955152e-02 7.84956238e-02 7.73023043e-02 3.91287400e-02 4.78043887e-03 7.18197378e-01 2.99560249e+03 -2.23900000e-04 -1.65360702e-12 8.20756246e-02 7.84504283e-02 7.73310693e-02 3.91696374e-02 4.77586253e-03 7.18197378e-01 2.99560249e+03 -2.24000000e-04 -1.65360702e-12 8.20557572e-02 7.84052990e-02 7.73597922e-02 3.92104816e-02 4.77129213e-03 7.18197378e-01 2.99560249e+03 -2.24100000e-04 -1.65360702e-12 8.20359129e-02 7.83602360e-02 7.73884730e-02 3.92512726e-02 4.76672767e-03 7.18197378e-01 2.99662634e+03 -2.24200000e-04 -1.65360702e-12 8.20160917e-02 7.83152391e-02 7.74171116e-02 3.92920105e-02 4.76216917e-03 7.18197378e-01 2.99662634e+03 -2.24300000e-04 -1.65360702e-12 8.19962937e-02 7.82703084e-02 7.74457081e-02 3.93326953e-02 4.75761661e-03 7.18197378e-01 2.99662634e+03 -2.24400000e-04 -1.65360702e-12 8.19765188e-02 7.82254439e-02 7.74742625e-02 3.93733269e-02 4.75307000e-03 7.18197378e-01 2.99662634e+03 -2.24500000e-04 -1.65360702e-12 8.19567671e-02 7.81806456e-02 7.75027748e-02 3.94139054e-02 4.74852934e-03 7.18197378e-01 2.99864455e+03 -2.24600000e-04 -1.65360702e-12 8.19370385e-02 7.81359133e-02 7.75312450e-02 3.94544307e-02 4.74399462e-03 7.18197378e-01 2.99864455e+03 -2.24700000e-04 -1.65360702e-12 8.19173332e-02 7.80912472e-02 7.75596731e-02 3.94949029e-02 4.73946586e-03 7.18197378e-01 2.99864455e+03 -2.24800000e-04 -1.65360702e-12 8.18976509e-02 7.80466471e-02 7.75880592e-02 3.95353219e-02 4.73494303e-03 7.18197378e-01 2.99864455e+03 -2.24900000e-04 -1.65360702e-12 8.18779919e-02 7.80021130e-02 7.76164033e-02 3.95756878e-02 4.73042616e-03 7.18197378e-01 2.99864455e+03 -2.25000000e-04 -1.65360702e-12 8.18583561e-02 7.79576451e-02 7.76447053e-02 3.96160005e-02 4.72591523e-03 7.18197378e-01 2.99864455e+03 -2.25100000e-04 -1.65360702e-12 8.18387435e-02 7.79132431e-02 7.76729653e-02 3.96562601e-02 4.72141025e-03 7.18197378e-01 2.99864455e+03 -2.25200000e-04 -1.65360702e-12 8.18191540e-02 7.78689071e-02 7.77011833e-02 3.96964665e-02 4.71691121e-03 7.18197378e-01 2.99864455e+03 -2.25300000e-04 -1.65360702e-12 8.17995878e-02 7.78246370e-02 7.77293593e-02 3.97366199e-02 4.71241812e-03 7.18197378e-01 2.99864455e+03 -2.25400000e-04 -1.65360702e-12 8.17800448e-02 7.77804329e-02 7.77574934e-02 3.97767200e-02 4.70793098e-03 7.18197378e-01 3.00064248e+03 -2.25500000e-04 -1.65360702e-12 8.17605250e-02 7.77362948e-02 7.77855855e-02 3.98167671e-02 4.70344978e-03 7.18197378e-01 3.00064248e+03 -2.25600000e-04 -1.65360702e-12 8.17410284e-02 7.76922225e-02 7.78136357e-02 3.98567610e-02 4.69897452e-03 7.18197378e-01 3.00064248e+03 -2.25700000e-04 -1.65360702e-12 8.17215551e-02 7.76482161e-02 7.78416439e-02 3.98967018e-02 4.69450521e-03 7.18197378e-01 3.00064248e+03 -2.25800000e-04 -1.65360702e-12 8.17021050e-02 7.76042755e-02 7.78696102e-02 3.99365895e-02 4.69004185e-03 7.18197378e-01 3.00064248e+03 -2.25900000e-04 -1.65360702e-12 8.16826782e-02 7.75604008e-02 7.78975347e-02 3.99764241e-02 4.68558443e-03 7.18197378e-01 3.00064248e+03 -2.26000000e-04 -1.65360702e-12 8.16632746e-02 7.75165919e-02 7.79254172e-02 4.00162055e-02 4.68113295e-03 7.18197378e-01 3.00064248e+03 -2.26100000e-04 -1.65360702e-12 8.16438942e-02 7.74728487e-02 7.79532579e-02 4.00559339e-02 4.67668741e-03 7.18197378e-01 3.00064248e+03 -2.26200000e-04 -1.65360702e-12 8.16245371e-02 7.74291713e-02 7.79810568e-02 4.00956091e-02 4.67224782e-03 7.18197378e-01 3.00262009e+03 -2.26300000e-04 -1.65360702e-12 8.16052033e-02 7.73855596e-02 7.80088138e-02 4.01352313e-02 4.66781417e-03 7.18197378e-01 3.00262009e+03 -2.26400000e-04 -1.65360702e-12 8.15858928e-02 7.73420136e-02 7.80365290e-02 4.01748003e-02 4.66338646e-03 7.18197378e-01 3.00262009e+03 -2.26500000e-04 -1.65360702e-12 8.15666055e-02 7.72985333e-02 7.80642024e-02 4.02143163e-02 4.65896469e-03 7.18197378e-01 3.00262009e+03 -2.26600000e-04 -1.65360702e-12 8.15473415e-02 7.72551186e-02 7.80918340e-02 4.02537791e-02 4.65454886e-03 7.18197378e-01 3.00262009e+03 -2.26700000e-04 -1.65360702e-12 8.15281008e-02 7.72117696e-02 7.81194239e-02 4.02931889e-02 4.65013897e-03 7.18197378e-01 3.00262009e+03 -2.26800000e-04 -1.65360702e-12 8.15088834e-02 7.71684861e-02 7.81469720e-02 4.03325456e-02 4.64573502e-03 7.18197378e-01 3.00262009e+03 -2.26900000e-04 -1.65360702e-12 8.14896893e-02 7.71252683e-02 7.81744784e-02 4.03718492e-02 4.64133701e-03 7.18197378e-01 3.00262009e+03 -2.27000000e-04 -1.65360702e-12 8.14705185e-02 7.70821159e-02 7.82019430e-02 4.04110998e-02 4.63694493e-03 7.18197378e-01 3.00262009e+03 -2.27100000e-04 -1.65360702e-12 8.14513709e-02 7.70390291e-02 7.82293660e-02 4.04502973e-02 4.63255880e-03 7.18197378e-01 3.00457732e+03 -2.27200000e-04 -1.65360702e-12 8.14322467e-02 7.69960078e-02 7.82567473e-02 4.04894418e-02 4.62817860e-03 7.18197378e-01 3.00457732e+03 -2.27300000e-04 -1.65360702e-12 8.14131459e-02 7.69530519e-02 7.82840869e-02 4.05285332e-02 4.62380433e-03 7.18197378e-01 3.00457732e+03 -2.27400000e-04 -1.65360702e-12 8.13940683e-02 7.69101615e-02 7.83113849e-02 4.05675715e-02 4.61943601e-03 7.18197378e-01 3.00457732e+03 -2.27500000e-04 -1.65360702e-12 8.13750140e-02 7.68673364e-02 7.83386412e-02 4.06065569e-02 4.61507361e-03 7.18197378e-01 3.00457732e+03 -2.27600000e-04 -1.65360702e-12 8.13559831e-02 7.68245768e-02 7.83658559e-02 4.06454892e-02 4.61071715e-03 7.18197378e-01 3.00457732e+03 -2.27700000e-04 -1.65360702e-12 8.13369755e-02 7.67818825e-02 7.83930291e-02 4.06843685e-02 4.60636663e-03 7.18197378e-01 3.00457732e+03 -2.27800000e-04 -1.65360702e-12 8.13179913e-02 7.67392535e-02 7.84201607e-02 4.07231947e-02 4.60202203e-03 7.18197378e-01 3.00457732e+03 -2.27900000e-04 -1.65360702e-12 8.12990304e-02 7.66966898e-02 7.84472507e-02 4.07619680e-02 4.59768337e-03 7.18197378e-01 3.00457732e+03 -2.28000000e-04 -1.65360702e-12 8.12800928e-02 7.66541913e-02 7.84742992e-02 4.08006882e-02 4.59335063e-03 7.18197378e-01 3.00651415e+03 -2.28100000e-04 -1.65360702e-12 8.12611786e-02 7.66117581e-02 7.85013061e-02 4.08393555e-02 4.58902383e-03 7.18197378e-01 3.00651415e+03 -2.28200000e-04 -1.65360702e-12 8.12422877e-02 7.65693901e-02 7.85282716e-02 4.08779698e-02 4.58470295e-03 7.18197378e-01 3.00651415e+03 -2.28300000e-04 -1.65360702e-12 8.12234202e-02 7.65270873e-02 7.85551956e-02 4.09165311e-02 4.58038801e-03 7.18197378e-01 3.00651415e+03 -2.28400000e-04 -1.65360702e-12 8.12045760e-02 7.64848496e-02 7.85820781e-02 4.09550395e-02 4.57607899e-03 7.18197378e-01 3.00651415e+03 -2.28500000e-04 -1.65360702e-12 8.11857552e-02 7.64426771e-02 7.86089192e-02 4.09934949e-02 4.57177589e-03 7.18197378e-01 3.00651415e+03 -2.28600000e-04 -1.65360702e-12 8.11669577e-02 7.64005696e-02 7.86357188e-02 4.10318973e-02 4.56747872e-03 7.18197378e-01 3.00651415e+03 -2.28700000e-04 -1.65360702e-12 8.11481837e-02 7.63585271e-02 7.86624771e-02 4.10702468e-02 4.56318748e-03 7.18197378e-01 3.00651415e+03 -2.28800000e-04 -1.65360702e-12 8.11294330e-02 7.63165497e-02 7.86891939e-02 4.11085434e-02 4.55890215e-03 7.18197378e-01 3.00843053e+03 -2.28900000e-04 -1.65360702e-12 8.11107056e-02 7.62746373e-02 7.87158695e-02 4.11467870e-02 4.55462275e-03 7.18197378e-01 3.00843053e+03 -2.29000000e-04 -1.65360702e-12 8.10920017e-02 7.62327898e-02 7.87425036e-02 4.11849777e-02 4.55034927e-03 7.18197378e-01 3.00843053e+03 -2.29100000e-04 -1.65360702e-12 8.10733211e-02 7.61910073e-02 7.87690965e-02 4.12231156e-02 4.54608171e-03 7.18197378e-01 3.00843053e+03 -2.29200000e-04 -1.65360702e-12 8.10546639e-02 7.61492896e-02 7.87956480e-02 4.12612005e-02 4.54182007e-03 7.18197378e-01 3.00843053e+03 -2.29300000e-04 -1.65360702e-12 8.10360301e-02 7.61076369e-02 7.88221583e-02 4.12992326e-02 4.53756435e-03 7.18197378e-01 3.00843053e+03 -2.29400000e-04 -1.65360702e-12 8.10174197e-02 7.60660489e-02 7.88486273e-02 4.13372117e-02 4.53331454e-03 7.18197378e-01 3.00843053e+03 -2.29500000e-04 -1.65360702e-12 8.09988327e-02 7.60245257e-02 7.88750550e-02 4.13751381e-02 4.52907065e-03 7.18197378e-01 3.00843053e+03 -2.29600000e-04 -1.65360702e-12 8.09802691e-02 7.59830674e-02 7.89014415e-02 4.14130115e-02 4.52483267e-03 7.18197378e-01 3.00843053e+03 -2.29700000e-04 -1.65360702e-12 8.09617288e-02 7.59416737e-02 7.89277869e-02 4.14508321e-02 4.52060061e-03 7.18197378e-01 3.01032644e+03 -2.29800000e-04 -1.65360702e-12 8.09432120e-02 7.59003448e-02 7.89540910e-02 4.14885999e-02 4.51637445e-03 7.18197378e-01 3.01032644e+03 -2.29900000e-04 -1.65360702e-12 8.09247185e-02 7.58590805e-02 7.89803540e-02 4.15263149e-02 4.51215421e-03 7.18197378e-01 3.01032644e+03 -2.30000000e-04 -1.65360702e-12 8.09062485e-02 7.58178808e-02 7.90065759e-02 4.15639771e-02 4.50793988e-03 7.18197378e-01 3.01032644e+03 -2.30100000e-04 -1.65360702e-12 8.08878019e-02 7.57767458e-02 7.90327566e-02 4.16015864e-02 4.50373145e-03 7.18197378e-01 3.01032644e+03 -2.30200000e-04 -1.65360702e-12 8.08693787e-02 7.57356753e-02 7.90588963e-02 4.16391430e-02 4.49952893e-03 7.18197378e-01 3.01032644e+03 -2.30300000e-04 -1.65360702e-12 8.08509788e-02 7.56946693e-02 7.90849949e-02 4.16766468e-02 4.49533232e-03 7.18197378e-01 3.01032644e+03 -2.30400000e-04 -1.65360702e-12 8.08326024e-02 7.56537278e-02 7.91110524e-02 4.17140979e-02 4.49114161e-03 7.18197378e-01 3.01032644e+03 -2.30500000e-04 -1.65360702e-12 8.08142495e-02 7.56128508e-02 7.91370689e-02 4.17514962e-02 4.48695680e-03 7.18197378e-01 3.01032644e+03 -2.30600000e-04 -1.65360702e-12 8.07959199e-02 7.55720383e-02 7.91630444e-02 4.17888417e-02 4.48277790e-03 7.18197378e-01 3.01220186e+03 -2.30700000e-04 -1.65360702e-12 8.07776137e-02 7.55312901e-02 7.91889789e-02 4.18261346e-02 4.47860489e-03 7.18197378e-01 3.01220186e+03 -2.30800000e-04 -1.65360702e-12 8.07593310e-02 7.54906062e-02 7.92148725e-02 4.18633747e-02 4.47443778e-03 7.18197378e-01 3.01220186e+03 -2.30900000e-04 -1.65360702e-12 8.07410717e-02 7.54499867e-02 7.92407251e-02 4.19005621e-02 4.47027657e-03 7.18197378e-01 3.01220186e+03 -2.31000000e-04 -1.65360702e-12 8.07228357e-02 7.54094315e-02 7.92665368e-02 4.19376968e-02 4.46612125e-03 7.18197378e-01 3.01220186e+03 -2.31100000e-04 -1.65360702e-12 8.07046233e-02 7.53689405e-02 7.92923076e-02 4.19747789e-02 4.46197183e-03 7.18197378e-01 3.01220186e+03 -2.31200000e-04 -1.65360702e-12 8.06864342e-02 7.53285138e-02 7.93180376e-02 4.20118083e-02 4.45782830e-03 7.18197378e-01 3.01220186e+03 -2.31300000e-04 -1.65360702e-12 8.06682686e-02 7.52881512e-02 7.93437267e-02 4.20487851e-02 4.45369067e-03 7.18197378e-01 3.01220186e+03 -2.31400000e-04 -1.65360702e-12 8.06501263e-02 7.52478528e-02 7.93693749e-02 4.20857092e-02 4.44955892e-03 7.18197378e-01 3.01405677e+03 -2.31500000e-04 -1.65360702e-12 8.06320076e-02 7.52076184e-02 7.93949824e-02 4.21225807e-02 4.44543306e-03 7.18197378e-01 3.01405677e+03 -2.31600000e-04 -1.65360702e-12 8.06139122e-02 7.51674482e-02 7.94205491e-02 4.21593996e-02 4.44131308e-03 7.18197378e-01 3.01405677e+03 -2.31700000e-04 -1.65360702e-12 8.05958403e-02 7.51273419e-02 7.94460751e-02 4.21961659e-02 4.43719899e-03 7.18197378e-01 3.01405677e+03 -2.31800000e-04 -1.65360702e-12 8.05777918e-02 7.50872997e-02 7.94715603e-02 4.22328797e-02 4.43309078e-03 7.18197378e-01 3.01405677e+03 -2.31900000e-04 -1.65360702e-12 8.05597667e-02 7.50473214e-02 7.94970048e-02 4.22695409e-02 4.42898846e-03 7.18197378e-01 3.01405677e+03 -2.32000000e-04 -1.65360702e-12 8.05417650e-02 7.50074070e-02 7.95224086e-02 4.23061495e-02 4.42489201e-03 7.18197378e-01 3.01405677e+03 -2.32100000e-04 -1.65360702e-12 8.05237868e-02 7.49675565e-02 7.95477718e-02 4.23427056e-02 4.42080144e-03 7.18197378e-01 3.01405677e+03 -2.32200000e-04 -1.65360702e-12 8.05058320e-02 7.49277699e-02 7.95730943e-02 4.23792092e-02 4.41671675e-03 7.18197378e-01 3.01405677e+03 -2.32300000e-04 -1.65360702e-12 8.04879007e-02 7.48880470e-02 7.95983763e-02 4.24156603e-02 4.41263794e-03 7.18197378e-01 3.01589116e+03 -2.32400000e-04 -1.65360702e-12 8.04699927e-02 7.48483879e-02 7.96236176e-02 4.24520589e-02 4.40856499e-03 7.18197378e-01 3.01589116e+03 -2.32500000e-04 -1.65360702e-12 8.04521082e-02 7.48087925e-02 7.96488184e-02 4.24884050e-02 4.40449792e-03 7.18197378e-01 3.01589116e+03 -2.32600000e-04 -1.65360702e-12 8.04342471e-02 7.47692609e-02 7.96739787e-02 4.25246987e-02 4.40043671e-03 7.18197378e-01 3.01589116e+03 -2.32700000e-04 -1.65360702e-12 8.04164095e-02 7.47297928e-02 7.96990984e-02 4.25609400e-02 4.39638138e-03 7.18197378e-01 3.01589116e+03 -2.32800000e-04 -1.65360702e-12 8.03985953e-02 7.46903884e-02 7.97241777e-02 4.25971288e-02 4.39233191e-03 7.18197378e-01 3.01589116e+03 -2.32900000e-04 -1.65360702e-12 8.03808045e-02 7.46510476e-02 7.97492165e-02 4.26332653e-02 4.38828830e-03 7.18197378e-01 3.01589116e+03 -2.33000000e-04 -1.65360702e-12 8.03630372e-02 7.46117702e-02 7.97742149e-02 4.26693493e-02 4.38425056e-03 7.18197378e-01 3.01589116e+03 -2.33100000e-04 -1.65360702e-12 8.03452932e-02 7.45725564e-02 7.97991729e-02 4.27053810e-02 4.38021867e-03 7.18197378e-01 3.01770502e+03 -2.33200000e-04 -1.65360702e-12 8.03275727e-02 7.45334060e-02 7.98240905e-02 4.27413603e-02 4.37619264e-03 7.18197378e-01 3.01770502e+03 -2.33300000e-04 -1.65360702e-12 8.03098757e-02 7.44943190e-02 7.98489677e-02 4.27772873e-02 4.37217247e-03 7.18197378e-01 3.01770502e+03 -2.33400000e-04 -1.65360702e-12 8.02922020e-02 7.44552954e-02 7.98738046e-02 4.28131620e-02 4.36815816e-03 7.18197378e-01 3.01770502e+03 -2.33500000e-04 -1.65360702e-12 8.02745518e-02 7.44163351e-02 7.98986012e-02 4.28489843e-02 4.36414969e-03 7.18197378e-01 3.01770502e+03 -2.33600000e-04 -1.65360702e-12 8.02569250e-02 7.43774381e-02 7.99233575e-02 4.28847544e-02 4.36014708e-03 7.18197378e-01 3.01770502e+03 -2.33700000e-04 -1.65360702e-12 8.02393217e-02 7.43386044e-02 7.99480736e-02 4.29204722e-02 4.35615031e-03 7.18197378e-01 3.01770502e+03 -2.33800000e-04 -1.65360702e-12 8.02217417e-02 7.42998338e-02 7.99727494e-02 4.29561378e-02 4.35215940e-03 7.18197378e-01 3.01770502e+03 -2.33900000e-04 -1.65360702e-12 8.02041852e-02 7.42611264e-02 7.99973850e-02 4.29917512e-02 4.34817432e-03 7.18197378e-01 3.01770502e+03 -2.34000000e-04 -1.65360702e-12 8.01866521e-02 7.42224822e-02 8.00219805e-02 4.30273123e-02 4.34419509e-03 7.18197378e-01 3.01949836e+03 -2.34100000e-04 -1.65360702e-12 8.01691424e-02 7.41839010e-02 8.00465358e-02 4.30628212e-02 4.34022170e-03 7.18197378e-01 3.01949836e+03 -2.34200000e-04 -1.65360702e-12 8.01516562e-02 7.41453828e-02 8.00710510e-02 4.30982780e-02 4.33625414e-03 7.18197378e-01 3.01949836e+03 -2.34300000e-04 -1.65360702e-12 8.01341933e-02 7.41069276e-02 8.00955261e-02 4.31336826e-02 4.33229243e-03 7.18197378e-01 3.01949836e+03 -2.34400000e-04 -1.65360702e-12 8.01167539e-02 7.40685354e-02 8.01199612e-02 4.31690351e-02 4.32833654e-03 7.18197378e-01 3.01949836e+03 -2.34500000e-04 -1.65360702e-12 8.00993379e-02 7.40302061e-02 8.01443562e-02 4.32043355e-02 4.32438649e-03 7.18197378e-01 3.01949836e+03 -2.34600000e-04 -1.65360702e-12 8.00819453e-02 7.39919397e-02 8.01687112e-02 4.32395837e-02 4.32044227e-03 7.18197378e-01 3.01949836e+03 -2.34700000e-04 -1.65360702e-12 8.00645761e-02 7.39537361e-02 8.01930262e-02 4.32747799e-02 4.31650387e-03 7.18197378e-01 3.01949836e+03 -2.34800000e-04 -1.65360702e-12 8.00472303e-02 7.39155953e-02 8.02173012e-02 4.33099241e-02 4.31257130e-03 7.18197378e-01 3.01949836e+03 -2.34900000e-04 -1.65360702e-12 8.00299080e-02 7.38775172e-02 8.02415363e-02 4.33450162e-02 4.30864455e-03 7.18197378e-01 3.02127117e+03 -2.35000000e-04 -1.65360702e-12 8.00126090e-02 7.38395018e-02 8.02657315e-02 4.33800562e-02 4.30472363e-03 7.18197378e-01 3.02127117e+03 -2.35100000e-04 -1.65360702e-12 7.99953334e-02 7.38015490e-02 8.02898869e-02 4.34150443e-02 4.30080852e-03 7.18197378e-01 3.02127117e+03 -2.35200000e-04 -1.65360702e-12 7.99780813e-02 7.37636589e-02 8.03140024e-02 4.34499804e-02 4.29689922e-03 7.18197378e-01 3.02127117e+03 -2.35300000e-04 -1.65360702e-12 7.99608525e-02 7.37258313e-02 8.03380781e-02 4.34848646e-02 4.29299575e-03 7.18197378e-01 3.02127117e+03 -2.35400000e-04 -1.65360702e-12 7.99436471e-02 7.36880662e-02 8.03621139e-02 4.35196968e-02 4.28909808e-03 7.18197378e-01 3.02127117e+03 -2.35500000e-04 -1.65360702e-12 7.99264651e-02 7.36503636e-02 8.03861101e-02 4.35544771e-02 4.28520622e-03 7.18197378e-01 3.02127117e+03 -2.35600000e-04 -1.65360702e-12 7.99093066e-02 7.36127235e-02 8.04100665e-02 4.35892055e-02 4.28132017e-03 7.18197378e-01 3.02127117e+03 -2.35700000e-04 -1.65360702e-12 7.98921714e-02 7.35751457e-02 8.04339831e-02 4.36238821e-02 4.27743992e-03 7.18197378e-01 3.02302347e+03 -2.35800000e-04 -1.65360702e-12 7.98750595e-02 7.35376302e-02 8.04578602e-02 4.36585067e-02 4.27356548e-03 7.18197378e-01 3.02302347e+03 -2.35900000e-04 -1.65360702e-12 7.98579711e-02 7.35001771e-02 8.04816975e-02 4.36930796e-02 4.26969683e-03 7.18197378e-01 3.02302347e+03 -2.36000000e-04 -1.65360702e-12 7.98409061e-02 7.34627862e-02 8.05054953e-02 4.37276007e-02 4.26583398e-03 7.18197378e-01 3.02302347e+03 -2.36100000e-04 -1.65360702e-12 7.98238644e-02 7.34254575e-02 8.05292534e-02 4.37620699e-02 4.26197693e-03 7.18197378e-01 3.02302347e+03 -2.36200000e-04 -1.65360702e-12 7.98068461e-02 7.33881909e-02 8.05529720e-02 4.37964874e-02 4.25812567e-03 7.18197378e-01 3.02302347e+03 -2.36300000e-04 -1.65360702e-12 7.97898512e-02 7.33509865e-02 8.05766511e-02 4.38308532e-02 4.25428019e-03 7.18197378e-01 3.02302347e+03 -2.36400000e-04 -1.65360702e-12 7.97728796e-02 7.33138441e-02 8.06002907e-02 4.38651672e-02 4.25044051e-03 7.18197378e-01 3.02302347e+03 -2.36500000e-04 -1.65360702e-12 7.97559314e-02 7.32767638e-02 8.06238908e-02 4.38994296e-02 4.24660661e-03 7.18197378e-01 3.02302347e+03 -2.36600000e-04 -1.65360702e-12 7.97390066e-02 7.32397454e-02 8.06474514e-02 4.39336403e-02 4.24277849e-03 7.18197378e-01 3.02475528e+03 -2.36700000e-04 -1.65360702e-12 7.97221051e-02 7.32027889e-02 8.06709727e-02 4.39677993e-02 4.23895615e-03 7.18197378e-01 3.02475528e+03 -2.36800000e-04 -1.65360702e-12 7.97052270e-02 7.31658944e-02 8.06944545e-02 4.40019067e-02 4.23513959e-03 7.18197378e-01 3.02475528e+03 -2.36900000e-04 -1.65360702e-12 7.96883722e-02 7.31290616e-02 8.07178970e-02 4.40359625e-02 4.23132880e-03 7.18197378e-01 3.02475528e+03 -2.37000000e-04 -1.65360702e-12 7.96715408e-02 7.30922907e-02 8.07413002e-02 4.40699667e-02 4.22752379e-03 7.18197378e-01 3.02475528e+03 -2.37100000e-04 -1.65360702e-12 7.96547327e-02 7.30555815e-02 8.07646641e-02 4.41039194e-02 4.22372454e-03 7.18197378e-01 3.02475528e+03 -2.37200000e-04 -1.65360702e-12 7.96379480e-02 7.30189339e-02 8.07879887e-02 4.41378205e-02 4.21993106e-03 7.18197378e-01 3.02475528e+03 -2.37300000e-04 -1.65360702e-12 7.96211866e-02 7.29823481e-02 8.08112741e-02 4.41716701e-02 4.21614335e-03 7.18197378e-01 3.02475528e+03 -2.37400000e-04 -1.65360702e-12 7.96044485e-02 7.29458238e-02 8.08345203e-02 4.42054682e-02 4.21236139e-03 7.18197378e-01 3.02475528e+03 -2.37500000e-04 -1.65360702e-12 7.95877338e-02 7.29093610e-02 8.08577273e-02 4.42392149e-02 4.20858519e-03 7.18197378e-01 3.02646661e+03 -2.37600000e-04 -1.65360702e-12 7.95710423e-02 7.28729598e-02 8.08808951e-02 4.42729101e-02 4.20481475e-03 7.18197378e-01 3.02646661e+03 -2.37700000e-04 -1.65360702e-12 7.95543742e-02 7.28366200e-02 8.09040239e-02 4.43065540e-02 4.20105007e-03 7.18197378e-01 3.02646661e+03 -2.37800000e-04 -1.65360702e-12 7.95377294e-02 7.28003416e-02 8.09271136e-02 4.43401464e-02 4.19729113e-03 7.18197378e-01 3.02646661e+03 -2.37900000e-04 -1.65360702e-12 7.95211080e-02 7.27641246e-02 8.09501642e-02 4.43736875e-02 4.19353794e-03 7.18197378e-01 3.02646661e+03 -2.38000000e-04 -1.65360702e-12 7.95045098e-02 7.27279689e-02 8.09731758e-02 4.44071772e-02 4.18979049e-03 7.18197378e-01 3.02646661e+03 -2.38100000e-04 -1.65360702e-12 7.94879349e-02 7.26918744e-02 8.09961484e-02 4.44406156e-02 4.18604879e-03 7.18197378e-01 3.02646661e+03 -2.38200000e-04 -1.65360702e-12 7.94713833e-02 7.26558411e-02 8.10190821e-02 4.44740027e-02 4.18231282e-03 7.18197378e-01 3.02646661e+03 -2.38300000e-04 -1.65360702e-12 7.94548551e-02 7.26198690e-02 8.10419768e-02 4.45073386e-02 4.17858259e-03 7.18197378e-01 3.02815750e+03 -2.38400000e-04 -1.65360702e-12 7.94383501e-02 7.25839580e-02 8.10648327e-02 4.45406233e-02 4.17485810e-03 7.18197378e-01 3.02815750e+03 -2.38500000e-04 -1.65360702e-12 7.94218684e-02 7.25481081e-02 8.10876497e-02 4.45738567e-02 4.17113933e-03 7.18197378e-01 3.02815750e+03 -2.38600000e-04 -1.65360702e-12 7.94054099e-02 7.25123192e-02 8.11104278e-02 4.46070389e-02 4.16742630e-03 7.18197378e-01 3.02815750e+03 -2.38700000e-04 -1.65360702e-12 7.93889748e-02 7.24765912e-02 8.11331672e-02 4.46401700e-02 4.16371898e-03 7.18197378e-01 3.02815750e+03 -2.38800000e-04 -1.65360702e-12 7.93725629e-02 7.24409242e-02 8.11558678e-02 4.46732500e-02 4.16001739e-03 7.18197378e-01 3.02815750e+03 -2.38900000e-04 -1.65360702e-12 7.93561742e-02 7.24053180e-02 8.11785296e-02 4.47062788e-02 4.15632152e-03 7.18197378e-01 3.02815750e+03 -2.39000000e-04 -1.65360702e-12 7.93398088e-02 7.23697726e-02 8.12011528e-02 4.47392566e-02 4.15263136e-03 7.18197378e-01 3.02815750e+03 -2.39100000e-04 -1.65360702e-12 7.93234667e-02 7.23342880e-02 8.12237373e-02 4.47721833e-02 4.14894691e-03 7.18197378e-01 3.02815750e+03 -2.39200000e-04 -1.65360702e-12 7.93071478e-02 7.22988641e-02 8.12462831e-02 4.48050590e-02 4.14526818e-03 7.18197378e-01 3.02982797e+03 -2.39300000e-04 -1.65360702e-12 7.92908522e-02 7.22635008e-02 8.12687903e-02 4.48378837e-02 4.14159515e-03 7.18197378e-01 3.02982797e+03 -2.39400000e-04 -1.65360702e-12 7.92745798e-02 7.22281982e-02 8.12912590e-02 4.48706574e-02 4.13792783e-03 7.18197378e-01 3.02982797e+03 -2.39500000e-04 -1.65360702e-12 7.92583306e-02 7.21929561e-02 8.13136891e-02 4.49033802e-02 4.13426620e-03 7.18197378e-01 3.02982797e+03 -2.39600000e-04 -1.65360702e-12 7.92421047e-02 7.21577745e-02 8.13360807e-02 4.49360520e-02 4.13061028e-03 7.18197378e-01 3.02982797e+03 -2.39700000e-04 -1.65360702e-12 7.92259019e-02 7.21226534e-02 8.13584339e-02 4.49686730e-02 4.12696004e-03 7.18197378e-01 3.02982797e+03 -2.39800000e-04 -1.65360702e-12 7.92097224e-02 7.20875926e-02 8.13807485e-02 4.50012431e-02 4.12331550e-03 7.18197378e-01 3.02982797e+03 -2.39900000e-04 -1.65360702e-12 7.91935661e-02 7.20525923e-02 8.14030248e-02 4.50337624e-02 4.11967665e-03 7.18197378e-01 3.02982797e+03 -2.40000000e-04 -1.65360702e-12 7.91774329e-02 7.20176522e-02 8.14252627e-02 4.50662308e-02 4.11604348e-03 7.18197378e-01 3.03147807e+03 -2.40100000e-04 -1.65360702e-12 7.91613230e-02 7.19827724e-02 8.14474623e-02 4.50986485e-02 4.11241600e-03 7.18197378e-01 3.03147807e+03 -2.40200000e-04 -1.65360702e-12 7.91452363e-02 7.19479527e-02 8.14696235e-02 4.51310155e-02 4.10879419e-03 7.18197378e-01 3.03147807e+03 -2.40300000e-04 -1.65360702e-12 7.91291727e-02 7.19131932e-02 8.14917465e-02 4.51633317e-02 4.10517806e-03 7.18197378e-01 3.03147807e+03 -2.40400000e-04 -1.65360702e-12 7.91131323e-02 7.18784938e-02 8.15138312e-02 4.51955972e-02 4.10156760e-03 7.18197378e-01 3.03147807e+03 -2.40500000e-04 -1.65360702e-12 7.90971151e-02 7.18438545e-02 8.15358777e-02 4.52278121e-02 4.09796281e-03 7.18197378e-01 3.03147807e+03 -2.40600000e-04 -1.65360702e-12 7.90811210e-02 7.18092751e-02 8.15578860e-02 4.52599763e-02 4.09436368e-03 7.18197378e-01 3.03147807e+03 -2.40700000e-04 -1.65360702e-12 7.90651501e-02 7.17747557e-02 8.15798562e-02 4.52920899e-02 4.09077022e-03 7.18197378e-01 3.03147807e+03 -2.40800000e-04 -1.65360702e-12 7.90492023e-02 7.17402961e-02 8.16017883e-02 4.53241530e-02 4.08718242e-03 7.18197378e-01 3.03147807e+03 -2.40900000e-04 -1.65360702e-12 7.90332777e-02 7.17058964e-02 8.16236823e-02 4.53561655e-02 4.08360027e-03 7.18197378e-01 3.03310783e+03 -2.41000000e-04 -1.65360702e-12 7.90173762e-02 7.16715564e-02 8.16455382e-02 4.53881275e-02 4.08002378e-03 7.18197378e-01 3.03310783e+03 -2.41100000e-04 -1.65360702e-12 7.90014979e-02 7.16372762e-02 8.16673562e-02 4.54200390e-02 4.07645293e-03 7.18197378e-01 3.03310783e+03 -2.41200000e-04 -1.65360702e-12 7.89856426e-02 7.16030556e-02 8.16891361e-02 4.54519001e-02 4.07288773e-03 7.18197378e-01 3.03310783e+03 -2.41300000e-04 -1.65360702e-12 7.89698105e-02 7.15688947e-02 8.17108781e-02 4.54837107e-02 4.06932818e-03 7.18197378e-01 3.03310783e+03 -2.41400000e-04 -1.65360702e-12 7.89540015e-02 7.15347933e-02 8.17325823e-02 4.55154709e-02 4.06577426e-03 7.18197378e-01 3.03310783e+03 -2.41500000e-04 -1.65360702e-12 7.89382155e-02 7.15007514e-02 8.17542485e-02 4.55471808e-02 4.06222598e-03 7.18197378e-01 3.03310783e+03 -2.41600000e-04 -1.65360702e-12 7.89224527e-02 7.14667689e-02 8.17758769e-02 4.55788403e-02 4.05868333e-03 7.18197378e-01 3.03310783e+03 -2.41700000e-04 -1.65360702e-12 7.89067129e-02 7.14328459e-02 8.17974675e-02 4.56104495e-02 4.05514631e-03 7.18197378e-01 3.03310783e+03 -2.41800000e-04 -1.65360702e-12 7.88909963e-02 7.13989822e-02 8.18190203e-02 4.56420084e-02 4.05161492e-03 7.18197378e-01 3.03471731e+03 -2.41900000e-04 -1.65360702e-12 7.88753027e-02 7.13651778e-02 8.18405354e-02 4.56735171e-02 4.04808915e-03 7.18197378e-01 3.03471731e+03 -2.42000000e-04 -1.65360702e-12 7.88596321e-02 7.13314326e-02 8.18620128e-02 4.57049756e-02 4.04456900e-03 7.18197378e-01 3.03471731e+03 -2.42100000e-04 -1.65360702e-12 7.88439846e-02 7.12977466e-02 8.18834526e-02 4.57363839e-02 4.04105446e-03 7.18197378e-01 3.03471731e+03 -2.42200000e-04 -1.65360702e-12 7.88283602e-02 7.12641197e-02 8.19048547e-02 4.57677421e-02 4.03754553e-03 7.18197378e-01 3.03471731e+03 -2.42300000e-04 -1.65360702e-12 7.88127587e-02 7.12305519e-02 8.19262192e-02 4.57990501e-02 4.03404222e-03 7.18197378e-01 3.03471731e+03 -2.42400000e-04 -1.65360702e-12 7.87971803e-02 7.11970432e-02 8.19475461e-02 4.58303080e-02 4.03054451e-03 7.18197378e-01 3.03471731e+03 -2.42500000e-04 -1.65360702e-12 7.87816250e-02 7.11635933e-02 8.19688355e-02 4.58615159e-02 4.02705239e-03 7.18197378e-01 3.03471731e+03 -2.42600000e-04 -1.65360702e-12 7.87660926e-02 7.11302024e-02 8.19900874e-02 4.58926738e-02 4.02356588e-03 7.18197378e-01 3.03630655e+03 -2.42700000e-04 -1.65360702e-12 7.87505833e-02 7.10968703e-02 8.20113019e-02 4.59237817e-02 4.02008496e-03 7.18197378e-01 3.03630655e+03 -2.42800000e-04 -1.65360702e-12 7.87350969e-02 7.10635971e-02 8.20324790e-02 4.59548396e-02 4.01660963e-03 7.18197378e-01 3.03630655e+03 -2.42900000e-04 -1.65360702e-12 7.87196335e-02 7.10303825e-02 8.20536186e-02 4.59858476e-02 4.01313989e-03 7.18197378e-01 3.03630655e+03 -2.43000000e-04 -1.65360702e-12 7.87041931e-02 7.09972267e-02 8.20747209e-02 4.60168057e-02 4.00967573e-03 7.18197378e-01 3.03630655e+03 -2.43100000e-04 -1.65360702e-12 7.86887757e-02 7.09641295e-02 8.20957859e-02 4.60477139e-02 4.00621715e-03 7.18197378e-01 3.03630655e+03 -2.43200000e-04 -1.65360702e-12 7.86733813e-02 7.09310908e-02 8.21168137e-02 4.60785723e-02 4.00276415e-03 7.18197378e-01 3.03630655e+03 -2.43300000e-04 -1.65360702e-12 7.86580098e-02 7.08981106e-02 8.21378042e-02 4.61093809e-02 3.99931672e-03 7.18197378e-01 3.03630655e+03 -2.43400000e-04 -1.65360702e-12 7.86426612e-02 7.08651890e-02 8.21587574e-02 4.61401397e-02 3.99587486e-03 7.18197378e-01 3.03630655e+03 -2.43500000e-04 -1.65360702e-12 7.86273356e-02 7.08323257e-02 8.21796735e-02 4.61708488e-02 3.99243856e-03 7.18197378e-01 3.03787563e+03 -2.43600000e-04 -1.65360702e-12 7.86120329e-02 7.07995207e-02 8.22005525e-02 4.62015082e-02 3.98900782e-03 7.18197378e-01 3.03787563e+03 -2.43700000e-04 -1.65360702e-12 7.85967531e-02 7.07667741e-02 8.22213944e-02 4.62321179e-02 3.98558264e-03 7.18197378e-01 3.03787563e+03 -2.43800000e-04 -1.65360702e-12 7.85814962e-02 7.07340857e-02 8.22421992e-02 4.62626780e-02 3.98216302e-03 7.18197378e-01 3.03787563e+03 -2.43900000e-04 -1.65360702e-12 7.85662622e-02 7.07014554e-02 8.22629670e-02 4.62931886e-02 3.97874894e-03 7.18197378e-01 3.03787563e+03 -2.44000000e-04 -1.65360702e-12 7.85510512e-02 7.06688833e-02 8.22836978e-02 4.63236495e-02 3.97534041e-03 7.18197378e-01 3.03787563e+03 -2.44100000e-04 -1.65360702e-12 7.85358630e-02 7.06363692e-02 8.23043917e-02 4.63540609e-02 3.97193743e-03 7.18197378e-01 3.03787563e+03 -2.44200000e-04 -1.65360702e-12 7.85206976e-02 7.06039131e-02 8.23250486e-02 4.63844228e-02 3.96853998e-03 7.18197378e-01 3.03787563e+03 -2.44300000e-04 -1.65360702e-12 7.85055552e-02 7.05715150e-02 8.23456686e-02 4.64147353e-02 3.96514807e-03 7.18197378e-01 3.03787563e+03 -2.44400000e-04 -1.65360702e-12 7.84904355e-02 7.05391748e-02 8.23662519e-02 4.64449983e-02 3.96176168e-03 7.18197378e-01 3.03942459e+03 -2.44500000e-04 -1.65360702e-12 7.84753388e-02 7.05068924e-02 8.23867983e-02 4.64752119e-02 3.95838083e-03 7.18197378e-01 3.03942459e+03 -2.44600000e-04 -1.65360702e-12 7.84602648e-02 7.04746677e-02 8.24073079e-02 4.65053762e-02 3.95500550e-03 7.18197378e-01 3.03942459e+03 -2.44700000e-04 -1.65360702e-12 7.84452137e-02 7.04425008e-02 8.24277808e-02 4.65354911e-02 3.95163568e-03 7.18197378e-01 3.03942459e+03 -2.44800000e-04 -1.65360702e-12 7.84301854e-02 7.04103916e-02 8.24482170e-02 4.65655568e-02 3.94827139e-03 7.18197378e-01 3.03942459e+03 -2.44900000e-04 -1.65360702e-12 7.84151799e-02 7.03783399e-02 8.24686165e-02 4.65955732e-02 3.94491260e-03 7.18197378e-01 3.03942459e+03 -2.45000000e-04 -1.65360702e-12 7.84001972e-02 7.03463458e-02 8.24889795e-02 4.66255404e-02 3.94155932e-03 7.18197378e-01 3.03942459e+03 -2.45100000e-04 -1.65360702e-12 7.83852373e-02 7.03144091e-02 8.25093058e-02 4.66554584e-02 3.93821155e-03 7.18197378e-01 3.03942459e+03 -2.45200000e-04 -1.65360702e-12 7.83703001e-02 7.02825299e-02 8.25295956e-02 4.66853272e-02 3.93486927e-03 7.18197378e-01 3.04095351e+03 -2.45300000e-04 -1.65360702e-12 7.83553857e-02 7.02507081e-02 8.25498489e-02 4.67151470e-02 3.93153250e-03 7.18197378e-01 3.04095351e+03 -2.45400000e-04 -1.65360702e-12 7.83404941e-02 7.02189435e-02 8.25700657e-02 4.67449176e-02 3.92820121e-03 7.18197378e-01 3.04095351e+03 -2.45500000e-04 -1.65360702e-12 7.83256252e-02 7.01872362e-02 8.25902460e-02 4.67746392e-02 3.92487541e-03 7.18197378e-01 3.04095351e+03 -2.45600000e-04 -1.65360702e-12 7.83107791e-02 7.01555861e-02 8.26103900e-02 4.68043118e-02 3.92155509e-03 7.18197378e-01 3.04095351e+03 -2.45700000e-04 -1.65360702e-12 7.82959556e-02 7.01239931e-02 8.26304976e-02 4.68339355e-02 3.91824026e-03 7.18197378e-01 3.04095351e+03 -2.45800000e-04 -1.65360702e-12 7.82811549e-02 7.00924572e-02 8.26505689e-02 4.68635102e-02 3.91493090e-03 7.18197378e-01 3.04095351e+03 -2.45900000e-04 -1.65360702e-12 7.82663769e-02 7.00609783e-02 8.26706039e-02 4.68930360e-02 3.91162701e-03 7.18197378e-01 3.04095351e+03 -2.46000000e-04 -1.65360702e-12 7.82516216e-02 7.00295564e-02 8.26906027e-02 4.69225129e-02 3.90832859e-03 7.18197378e-01 3.04095351e+03 -2.46100000e-04 -1.65360702e-12 7.82368889e-02 6.99981914e-02 8.27105652e-02 4.69519410e-02 3.90503563e-03 7.18197378e-01 3.04246247e+03 -2.46200000e-04 -1.65360702e-12 7.82221789e-02 6.99668831e-02 8.27304916e-02 4.69813203e-02 3.90174814e-03 7.18197378e-01 3.04246247e+03 -2.46300000e-04 -1.65360702e-12 7.82074916e-02 6.99356317e-02 8.27503818e-02 4.70106509e-02 3.89846609e-03 7.18197378e-01 3.04246247e+03 -2.46400000e-04 -1.65360702e-12 7.81928269e-02 6.99044370e-02 8.27702360e-02 4.70399328e-02 3.89518950e-03 7.18197378e-01 3.04246247e+03 -2.46500000e-04 -1.65360702e-12 7.81781849e-02 6.98732989e-02 8.27900540e-02 4.70691659e-02 3.89191836e-03 7.18197378e-01 3.04246247e+03 -2.46600000e-04 -1.65360702e-12 7.81635655e-02 6.98422174e-02 8.28098361e-02 4.70983505e-02 3.88865266e-03 7.18197378e-01 3.04246247e+03 -2.46700000e-04 -1.65360702e-12 7.81489687e-02 6.98111925e-02 8.28295822e-02 4.71274864e-02 3.88539240e-03 7.18197378e-01 3.04246247e+03 -2.46800000e-04 -1.65360702e-12 7.81343945e-02 6.97802240e-02 8.28492923e-02 4.71565737e-02 3.88213757e-03 7.18197378e-01 3.04246247e+03 -2.46900000e-04 -1.65360702e-12 7.81198429e-02 6.97493120e-02 8.28689665e-02 4.71856126e-02 3.87888817e-03 7.18197378e-01 3.04395154e+03 -2.47000000e-04 -1.65360702e-12 7.81053139e-02 6.97184563e-02 8.28886049e-02 4.72146029e-02 3.87564420e-03 7.18197378e-01 3.04395154e+03 -2.47100000e-04 -1.65360702e-12 7.80908074e-02 6.96876569e-02 8.29082074e-02 4.72435448e-02 3.87240565e-03 7.18197378e-01 3.04395154e+03 -2.47200000e-04 -1.65360702e-12 7.80763235e-02 6.96569137e-02 8.29277742e-02 4.72724382e-02 3.86917252e-03 7.18197378e-01 3.04395154e+03 -2.47300000e-04 -1.65360702e-12 7.80618621e-02 6.96262267e-02 8.29473052e-02 4.73012833e-02 3.86594481e-03 7.18197378e-01 3.04395154e+03 -2.47400000e-04 -1.65360702e-12 7.80474233e-02 6.95955958e-02 8.29668005e-02 4.73300801e-02 3.86272250e-03 7.18197378e-01 3.04395154e+03 -2.47500000e-04 -1.65360702e-12 7.80330070e-02 6.95650210e-02 8.29862601e-02 4.73588285e-02 3.85950560e-03 7.18197378e-01 3.04395154e+03 -2.47600000e-04 -1.65360702e-12 7.80186132e-02 6.95345021e-02 8.30056840e-02 4.73875287e-02 3.85629410e-03 7.18197378e-01 3.04395154e+03 -2.47700000e-04 -1.65360702e-12 7.80042419e-02 6.95040392e-02 8.30250724e-02 4.74161806e-02 3.85308799e-03 7.18197378e-01 3.04395154e+03 -2.47800000e-04 -1.65360702e-12 7.79898931e-02 6.94736322e-02 8.30444252e-02 4.74447844e-02 3.84988728e-03 7.18197378e-01 3.04542080e+03 -2.47900000e-04 -1.65360702e-12 7.79755668e-02 6.94432810e-02 8.30637425e-02 4.74733400e-02 3.84669195e-03 7.18197378e-01 3.04542080e+03 -2.48000000e-04 -1.65360702e-12 7.79612629e-02 6.94129855e-02 8.30830243e-02 4.75018475e-02 3.84350201e-03 7.18197378e-01 3.04542080e+03 -2.48100000e-04 -1.65360702e-12 7.79469815e-02 6.93827457e-02 8.31022707e-02 4.75303069e-02 3.84031745e-03 7.18197378e-01 3.04542080e+03 -2.48200000e-04 -1.65360702e-12 7.79327225e-02 6.93525615e-02 8.31214817e-02 4.75587183e-02 3.83713827e-03 7.18197378e-01 3.04542080e+03 -2.48300000e-04 -1.65360702e-12 7.79184859e-02 6.93224329e-02 8.31406573e-02 4.75870816e-02 3.83396445e-03 7.18197378e-01 3.04542080e+03 -2.48400000e-04 -1.65360702e-12 7.79042718e-02 6.92923597e-02 8.31597976e-02 4.76153971e-02 3.83079600e-03 7.18197378e-01 3.04542080e+03 -2.48500000e-04 -1.65360702e-12 7.78900800e-02 6.92623421e-02 8.31789026e-02 4.76436646e-02 3.82763291e-03 7.18197378e-01 3.04542080e+03 -2.48600000e-04 -1.65360702e-12 7.78759107e-02 6.92323798e-02 8.31979723e-02 4.76718842e-02 3.82447518e-03 7.18197378e-01 3.04542080e+03 -2.48700000e-04 -1.65360702e-12 7.78617637e-02 6.92024728e-02 8.32170069e-02 4.77000560e-02 3.82132280e-03 7.18197378e-01 3.04639686e+03 -2.48800000e-04 -1.65360702e-12 7.78476391e-02 6.91726210e-02 8.32360062e-02 4.77281800e-02 3.81817577e-03 7.18197378e-01 3.04639686e+03 -2.48900000e-04 -1.65360702e-12 7.78335368e-02 6.91428245e-02 8.32549705e-02 4.77562563e-02 3.81503409e-03 7.18197378e-01 3.04639686e+03 -2.49000000e-04 -1.65360702e-12 7.78194568e-02 6.91130831e-02 8.32738997e-02 4.77842848e-02 3.81189774e-03 7.18197378e-01 3.04639686e+03 -2.49100000e-04 -1.65360702e-12 7.78053992e-02 6.90833968e-02 8.32927938e-02 4.78122657e-02 3.80876673e-03 7.18197378e-01 3.04639686e+03 -2.49200000e-04 -1.65360702e-12 7.77913639e-02 6.90537654e-02 8.33116529e-02 4.78401989e-02 3.80564105e-03 7.18197378e-01 3.04736405e+03 -2.49300000e-04 -1.65360702e-12 7.77773509e-02 6.90241890e-02 8.33304770e-02 4.78680845e-02 3.80252070e-03 7.18197378e-01 3.04736405e+03 -2.49400000e-04 -1.65360702e-12 7.77633602e-02 6.89946675e-02 8.33492662e-02 4.78959225e-02 3.79940566e-03 7.18197378e-01 3.04736405e+03 -2.49500000e-04 -1.65360702e-12 7.77493918e-02 6.89652008e-02 8.33680205e-02 4.79237131e-02 3.79629595e-03 7.18197378e-01 3.04736405e+03 -2.49600000e-04 -1.65360702e-12 7.77354456e-02 6.89357889e-02 8.33867400e-02 4.79514561e-02 3.79319155e-03 7.18197378e-01 3.04736405e+03 -2.49700000e-04 -1.65360702e-12 7.77215216e-02 6.89064316e-02 8.34054247e-02 4.79791517e-02 3.79009245e-03 7.18197378e-01 3.04736405e+03 -2.49800000e-04 -1.65360702e-12 7.77076199e-02 6.88771290e-02 8.34240746e-02 4.80068000e-02 3.78699866e-03 7.18197378e-01 3.04832239e+03 -2.49900000e-04 -1.65360702e-12 7.76937404e-02 6.88478810e-02 8.34426897e-02 4.80344008e-02 3.78391017e-03 7.18197378e-01 3.04832239e+03 -2.50000000e-04 -1.65360702e-12 7.76798831e-02 6.88186874e-02 8.34612702e-02 4.80619544e-02 3.78082697e-03 7.18197378e-01 3.04832239e+03 -2.50100000e-04 -1.65360702e-12 7.76660481e-02 6.87895483e-02 8.34798160e-02 4.80894607e-02 3.77774907e-03 7.18197378e-01 3.04832239e+03 -2.50200000e-04 -1.65360702e-12 7.76522351e-02 6.87604636e-02 8.34983273e-02 4.81169197e-02 3.77467645e-03 7.18197378e-01 3.04832239e+03 -2.50300000e-04 -1.65360702e-12 7.76384444e-02 6.87314332e-02 8.35168039e-02 4.81443316e-02 3.77160910e-03 7.18197378e-01 3.04832239e+03 -2.50400000e-04 -1.65360702e-12 7.76246758e-02 6.87024570e-02 8.35352460e-02 4.81716963e-02 3.76854704e-03 7.18197378e-01 3.04927192e+03 -2.50500000e-04 -1.65360702e-12 7.76109293e-02 6.86735350e-02 8.35536536e-02 4.81990139e-02 3.76549025e-03 7.18197378e-01 3.04927192e+03 -2.50600000e-04 -1.65360702e-12 7.75972050e-02 6.86446672e-02 8.35720268e-02 4.82262844e-02 3.76243872e-03 7.18197378e-01 3.04927192e+03 -2.50700000e-04 -1.65360702e-12 7.75835028e-02 6.86158534e-02 8.35903656e-02 4.82535079e-02 3.75939245e-03 7.18197378e-01 3.04927192e+03 -2.50800000e-04 -1.65360702e-12 7.75698227e-02 6.85870936e-02 8.36086700e-02 4.82806844e-02 3.75635145e-03 7.18197378e-01 3.04927192e+03 -2.50900000e-04 -1.65360702e-12 7.75561646e-02 6.85583878e-02 8.36269401e-02 4.83078140e-02 3.75331569e-03 7.18197378e-01 3.04927192e+03 -2.51000000e-04 -1.65360702e-12 7.75425286e-02 6.85297358e-02 8.36451758e-02 4.83348967e-02 3.75028519e-03 7.18197378e-01 3.05021266e+03 -2.51100000e-04 -1.65360702e-12 7.75289147e-02 6.85011376e-02 8.36633774e-02 4.83619325e-02 3.74725992e-03 7.18197378e-01 3.05021266e+03 -2.51200000e-04 -1.65360702e-12 7.75153228e-02 6.84725932e-02 8.36815447e-02 4.83889215e-02 3.74423990e-03 7.18197378e-01 3.05021266e+03 -2.51300000e-04 -1.65360702e-12 7.75017530e-02 6.84441025e-02 8.36996779e-02 4.84158637e-02 3.74122511e-03 7.18197378e-01 3.05021266e+03 -2.51400000e-04 -1.65360702e-12 7.74882051e-02 6.84156653e-02 8.37177769e-02 4.84427592e-02 3.73821555e-03 7.18197378e-01 3.05021266e+03 -2.51500000e-04 -1.65360702e-12 7.74746793e-02 6.83872818e-02 8.37358419e-02 4.84696080e-02 3.73521121e-03 7.18197378e-01 3.05021266e+03 -2.51600000e-04 -1.65360702e-12 7.74611754e-02 6.83589517e-02 8.37538728e-02 4.84964102e-02 3.73221209e-03 7.18197378e-01 3.05114465e+03 -2.51700000e-04 -1.65360702e-12 7.74476935e-02 6.83306750e-02 8.37718697e-02 4.85231657e-02 3.72921819e-03 7.18197378e-01 3.05114465e+03 -2.51800000e-04 -1.65360702e-12 7.74342335e-02 6.83024517e-02 8.37898327e-02 4.85498747e-02 3.72622950e-03 7.18197378e-01 3.05114465e+03 -2.51900000e-04 -1.65360702e-12 7.74207955e-02 6.82742817e-02 8.38077617e-02 4.85765372e-02 3.72324601e-03 7.18197378e-01 3.05114465e+03 -2.52000000e-04 -1.65360702e-12 7.74073794e-02 6.82461649e-02 8.38256569e-02 4.86031532e-02 3.72026773e-03 7.18197378e-01 3.05114465e+03 -2.52100000e-04 -1.65360702e-12 7.73939853e-02 6.82181013e-02 8.38435182e-02 4.86297228e-02 3.71729464e-03 7.18197378e-01 3.05206792e+03 -2.52200000e-04 -1.65360702e-12 7.73806130e-02 6.81900908e-02 8.38613457e-02 4.86562459e-02 3.71432674e-03 7.18197378e-01 3.05206792e+03 -2.52300000e-04 -1.65360702e-12 7.73672626e-02 6.81621333e-02 8.38791395e-02 4.86827228e-02 3.71136402e-03 7.18197378e-01 3.05206792e+03 -2.52400000e-04 -1.65360702e-12 7.73539340e-02 6.81342288e-02 8.38968995e-02 4.87091533e-02 3.70840649e-03 7.18197378e-01 3.05206792e+03 -2.52500000e-04 -1.65360702e-12 7.73406273e-02 6.81063773e-02 8.39146259e-02 4.87355375e-02 3.70545414e-03 7.18197378e-01 3.05206792e+03 -2.52600000e-04 -1.65360702e-12 7.73273425e-02 6.80785785e-02 8.39323186e-02 4.87618756e-02 3.70250695e-03 7.18197378e-01 3.05206792e+03 -2.52700000e-04 -1.65360702e-12 7.73140794e-02 6.80508325e-02 8.39499778e-02 4.87881675e-02 3.69956494e-03 7.18197378e-01 3.05267786e+03 -2.52800000e-04 -1.65360702e-12 7.73008382e-02 6.80231393e-02 8.39676034e-02 4.88144132e-02 3.69662808e-03 7.18197378e-01 3.05267786e+03 -2.52900000e-04 -1.65360702e-12 7.72876188e-02 6.79954987e-02 8.39851955e-02 4.88406129e-02 3.69369638e-03 7.18197378e-01 3.05267786e+03 -2.53000000e-04 -1.65360702e-12 7.72744211e-02 6.79679107e-02 8.40027541e-02 4.88667665e-02 3.69076984e-03 7.18197378e-01 3.05267786e+03 -2.53100000e-04 -1.65360702e-12 7.72612452e-02 6.79403752e-02 8.40202793e-02 4.88928741e-02 3.68784844e-03 7.18197378e-01 3.05308513e+03 -2.53200000e-04 -1.65360702e-12 7.72480910e-02 6.79128922e-02 8.40377711e-02 4.89189357e-02 3.68493218e-03 7.18197378e-01 3.05308513e+03 -2.53300000e-04 -1.65360702e-12 7.72349585e-02 6.78854615e-02 8.40552295e-02 4.89449515e-02 3.68202106e-03 7.18197378e-01 3.05308513e+03 -2.53400000e-04 -1.65360702e-12 7.72218478e-02 6.78580832e-02 8.40726547e-02 4.89709214e-02 3.67911507e-03 7.18197378e-01 3.05349067e+03 -2.53500000e-04 -1.65360702e-12 7.72087588e-02 6.78307571e-02 8.40900466e-02 4.89968454e-02 3.67621421e-03 7.18197378e-01 3.05349067e+03 -2.53600000e-04 -1.65360702e-12 7.71956914e-02 6.78034833e-02 8.41074053e-02 4.90227237e-02 3.67331848e-03 7.18197378e-01 3.05389449e+03 -2.53700000e-04 -1.65360702e-12 7.71826457e-02 6.77762615e-02 8.41247308e-02 4.90485563e-02 3.67042786e-03 7.18197378e-01 3.05389449e+03 -2.53800000e-04 -1.65360702e-12 7.71696217e-02 6.77490918e-02 8.41420231e-02 4.90743431e-02 3.66754235e-03 7.18197378e-01 3.05389449e+03 -2.53900000e-04 -1.65360702e-12 7.71566193e-02 6.77219742e-02 8.41592824e-02 4.91000844e-02 3.66466195e-03 7.18197378e-01 3.05429659e+03 -2.54000000e-04 -1.65360702e-12 7.71436385e-02 6.76949084e-02 8.41765086e-02 4.91257800e-02 3.66178665e-03 7.18197378e-01 3.05429659e+03 -2.54100000e-04 -1.65360702e-12 7.71306793e-02 6.76678945e-02 8.41937018e-02 4.91514300e-02 3.65891645e-03 7.18197378e-01 3.05469697e+03 -2.54200000e-04 -1.65360702e-12 7.71177417e-02 6.76409325e-02 8.42108621e-02 4.91770346e-02 3.65605135e-03 7.18197378e-01 3.05469697e+03 -2.54300000e-04 -1.65360702e-12 7.71048256e-02 6.76140221e-02 8.42279894e-02 4.92025937e-02 3.65319133e-03 7.18197378e-01 3.05469697e+03 -2.54400000e-04 -1.65360702e-12 7.70919311e-02 6.75871635e-02 8.42450838e-02 4.92281074e-02 3.65033639e-03 7.18197378e-01 3.05509563e+03 -2.54500000e-04 -1.65360702e-12 7.70790582e-02 6.75603564e-02 8.42621454e-02 4.92535757e-02 3.64748653e-03 7.18197378e-01 3.05509563e+03 -2.54600000e-04 -1.65360702e-12 7.70662068e-02 6.75336009e-02 8.42791741e-02 4.92789986e-02 3.64464174e-03 7.18197378e-01 3.05509563e+03 -2.54700000e-04 -1.65360702e-12 7.70533768e-02 6.75068968e-02 8.42961702e-02 4.93043763e-02 3.64180202e-03 7.18197378e-01 3.05549258e+03 -2.54800000e-04 -1.65360702e-12 7.70405684e-02 6.74802442e-02 8.43131335e-02 4.93297088e-02 3.63896736e-03 7.18197378e-01 3.05549258e+03 -2.54900000e-04 -1.65360702e-12 7.70277814e-02 6.74536429e-02 8.43300641e-02 4.93549960e-02 3.63613776e-03 7.18197378e-01 3.05588782e+03 -2.55000000e-04 -1.65360702e-12 7.70150159e-02 6.74270928e-02 8.43469621e-02 4.93802381e-02 3.63331321e-03 7.18197378e-01 3.05588782e+03 -2.55100000e-04 -1.65360702e-12 7.70022719e-02 6.74005940e-02 8.43638274e-02 4.94054351e-02 3.63049371e-03 7.18197378e-01 3.05588782e+03 -2.55200000e-04 -1.65360702e-12 7.69895492e-02 6.73741464e-02 8.43806603e-02 4.94305871e-02 3.62767925e-03 7.18197378e-01 3.05616049e+03 -2.55300000e-04 -1.65360702e-12 7.69768480e-02 6.73477498e-02 8.43974606e-02 4.94556940e-02 3.62486982e-03 7.18197378e-01 3.05616049e+03 -2.55400000e-04 -1.65360702e-12 7.69641681e-02 6.73214042e-02 8.44142285e-02 4.94807560e-02 3.62206543e-03 7.18197378e-01 3.05634583e+03 -2.55500000e-04 -1.65360702e-12 7.69515096e-02 6.72951095e-02 8.44309639e-02 4.95057730e-02 3.61926606e-03 7.18197378e-01 3.05653079e+03 -2.55600000e-04 -1.65360702e-12 7.69388725e-02 6.72688658e-02 8.44476670e-02 4.95307452e-02 3.61647172e-03 7.18197378e-01 3.05671537e+03 -2.55700000e-04 -1.65360702e-12 7.69262567e-02 6.72426728e-02 8.44643377e-02 4.95556725e-02 3.61368239e-03 7.18197378e-01 3.05689957e+03 -2.55800000e-04 -1.65360702e-12 7.69136623e-02 6.72165306e-02 8.44809761e-02 4.95805551e-02 3.61089807e-03 7.18197378e-01 3.05708340e+03 -2.55900000e-04 -1.65360702e-12 7.69010891e-02 6.71904391e-02 8.44975823e-02 4.96053929e-02 3.60811876e-03 7.18197378e-01 3.05708340e+03 -2.56000000e-04 -1.65360702e-12 7.68885372e-02 6.71643982e-02 8.45141562e-02 4.96301861e-02 3.60534445e-03 7.18197378e-01 3.05755008e+03 -2.56100000e-04 -1.65360702e-12 7.68760066e-02 6.71384078e-02 8.45306980e-02 4.96549346e-02 3.60257513e-03 7.18197378e-01 3.05755008e+03 -2.56200000e-04 -1.65360702e-12 7.68634973e-02 6.71124679e-02 8.45472077e-02 4.96796385e-02 3.59981081e-03 7.18197378e-01 3.05755008e+03 -2.56300000e-04 -1.65360702e-12 7.68510092e-02 6.70865785e-02 8.45636852e-02 4.97042978e-02 3.59705146e-03 7.18197378e-01 3.05828503e+03 -2.56400000e-04 -1.65360702e-12 7.68385423e-02 6.70607394e-02 8.45801307e-02 4.97289127e-02 3.59429710e-03 7.18197378e-01 3.05828503e+03 -2.56500000e-04 -1.65360702e-12 7.68260966e-02 6.70349505e-02 8.45965443e-02 4.97534831e-02 3.59154772e-03 7.18197378e-01 3.05828503e+03 -2.56600000e-04 -1.65360702e-12 7.68136721e-02 6.70092119e-02 8.46129258e-02 4.97780091e-02 3.58880330e-03 7.18197378e-01 3.05828503e+03 -2.56700000e-04 -1.65360702e-12 7.68012687e-02 6.69835234e-02 8.46292755e-02 4.98024907e-02 3.58606384e-03 7.18197378e-01 3.05828503e+03 -2.56800000e-04 -1.65360702e-12 7.67888865e-02 6.69578850e-02 8.46455932e-02 4.98269280e-02 3.58332935e-03 7.18197378e-01 3.05901385e+03 -2.56900000e-04 -1.65360702e-12 7.67765255e-02 6.69322966e-02 8.46618792e-02 4.98513211e-02 3.58059981e-03 7.18197378e-01 3.05901385e+03 -2.57000000e-04 -1.65360702e-12 7.67641855e-02 6.69067582e-02 8.46781333e-02 4.98756699e-02 3.57787521e-03 7.18197378e-01 3.05901385e+03 -2.57100000e-04 -1.65360702e-12 7.67518667e-02 6.68812697e-02 8.46943557e-02 4.98999745e-02 3.57515556e-03 7.18197378e-01 3.05901385e+03 -2.57200000e-04 -1.65360702e-12 7.67395689e-02 6.68558309e-02 8.47105464e-02 4.99242351e-02 3.57244085e-03 7.18197378e-01 3.05901385e+03 -2.57300000e-04 -1.65360702e-12 7.67272922e-02 6.68304419e-02 8.47267054e-02 4.99484515e-02 3.56973107e-03 7.18197378e-01 3.05973658e+03 -2.57400000e-04 -1.65360702e-12 7.67150365e-02 6.68051026e-02 8.47428329e-02 4.99726239e-02 3.56702622e-03 7.18197378e-01 3.05973658e+03 -2.57500000e-04 -1.65360702e-12 7.67028019e-02 6.67798129e-02 8.47589287e-02 4.99967524e-02 3.56432629e-03 7.18197378e-01 3.05973658e+03 -2.57600000e-04 -1.65360702e-12 7.66905883e-02 6.67545728e-02 8.47749930e-02 5.00208368e-02 3.56163127e-03 7.18197378e-01 3.05973658e+03 -2.57700000e-04 -1.65360702e-12 7.66783956e-02 6.67293821e-02 8.47910258e-02 5.00448774e-02 3.55894117e-03 7.18197378e-01 3.05973658e+03 -2.57800000e-04 -1.65360702e-12 7.66662240e-02 6.67042408e-02 8.48070272e-02 5.00688742e-02 3.55625597e-03 7.18197378e-01 3.06045323e+03 -2.57900000e-04 -1.65360702e-12 7.66540733e-02 6.66791489e-02 8.48229971e-02 5.00928272e-02 3.55357568e-03 7.18197378e-01 3.06045323e+03 -2.58000000e-04 -1.65360702e-12 7.66419435e-02 6.66541063e-02 8.48389357e-02 5.01167364e-02 3.55090027e-03 7.18197378e-01 3.06045323e+03 -2.58100000e-04 -1.65360702e-12 7.66298346e-02 6.66291129e-02 8.48548430e-02 5.01406019e-02 3.54822976e-03 7.18197378e-01 3.06045323e+03 -2.58200000e-04 -1.65360702e-12 7.66177467e-02 6.66041686e-02 8.48707190e-02 5.01644237e-02 3.54556414e-03 7.18197378e-01 3.06045323e+03 -2.58300000e-04 -1.65360702e-12 7.66056796e-02 6.65792734e-02 8.48865637e-02 5.01882020e-02 3.54290339e-03 7.18197378e-01 3.06116384e+03 -2.58400000e-04 -1.65360702e-12 7.65936334e-02 6.65544272e-02 8.49023773e-02 5.02119367e-02 3.54024751e-03 7.18197378e-01 3.06116384e+03 -2.58500000e-04 -1.65360702e-12 7.65816081e-02 6.65296300e-02 8.49181597e-02 5.02356279e-02 3.53759651e-03 7.18197378e-01 3.06116384e+03 -2.58600000e-04 -1.65360702e-12 7.65696035e-02 6.65048816e-02 8.49339110e-02 5.02592757e-02 3.53495036e-03 7.18197378e-01 3.06116384e+03 -2.58700000e-04 -1.65360702e-12 7.65576198e-02 6.64801820e-02 8.49496312e-02 5.02828800e-02 3.53230908e-03 7.18197378e-01 3.06186842e+03 -2.58800000e-04 -1.65360702e-12 7.65456569e-02 6.64555312e-02 8.49653205e-02 5.03064409e-02 3.52967265e-03 7.18197378e-01 3.06186842e+03 -2.58900000e-04 -1.65360702e-12 7.65337147e-02 6.64309291e-02 8.49809787e-02 5.03299586e-02 3.52704106e-03 7.18197378e-01 3.06186842e+03 -2.59000000e-04 -1.65360702e-12 7.65217933e-02 6.64063755e-02 8.49966060e-02 5.03534330e-02 3.52441432e-03 7.18197378e-01 3.06186842e+03 -2.59100000e-04 -1.65360702e-12 7.65098927e-02 6.63818705e-02 8.50122024e-02 5.03768641e-02 3.52179241e-03 7.18197378e-01 3.06186842e+03 -2.59200000e-04 -1.65360702e-12 7.64980127e-02 6.63574140e-02 8.50277680e-02 5.04002521e-02 3.51917533e-03 7.18197378e-01 3.06256700e+03 -2.59300000e-04 -1.65360702e-12 7.64861535e-02 6.63330058e-02 8.50433027e-02 5.04235970e-02 3.51656308e-03 7.18197378e-01 3.06256700e+03 -2.59400000e-04 -1.65360702e-12 7.64743149e-02 6.63086461e-02 8.50588067e-02 5.04468988e-02 3.51395564e-03 7.18197378e-01 3.06256700e+03 -2.59500000e-04 -1.65360702e-12 7.64624970e-02 6.62843345e-02 8.50742800e-02 5.04701576e-02 3.51135302e-03 7.18197378e-01 3.06256700e+03 -2.59600000e-04 -1.65360702e-12 7.64506997e-02 6.62600712e-02 8.50897226e-02 5.04933734e-02 3.50875521e-03 7.18197378e-01 3.06256700e+03 -2.59700000e-04 -1.65360702e-12 7.64389231e-02 6.62358560e-02 8.51051345e-02 5.05165463e-02 3.50616221e-03 7.18197378e-01 3.06325962e+03 -2.59800000e-04 -1.65360702e-12 7.64271671e-02 6.62116889e-02 8.51205159e-02 5.05396763e-02 3.50357400e-03 7.18197378e-01 3.06325962e+03 -2.59900000e-04 -1.65360702e-12 7.64154316e-02 6.61875698e-02 8.51358667e-02 5.05627635e-02 3.50099058e-03 7.18197378e-01 3.06325962e+03 -2.60000000e-04 -1.65360702e-12 7.64037167e-02 6.61634986e-02 8.51511870e-02 5.05858079e-02 3.49841195e-03 7.18197378e-01 3.06325962e+03 -2.60100000e-04 -1.65360702e-12 7.63920224e-02 6.61394753e-02 8.51664769e-02 5.06088095e-02 3.49583810e-03 7.18197378e-01 3.06325962e+03 -2.60200000e-04 -1.65360702e-12 7.63803486e-02 6.61154998e-02 8.51817363e-02 5.06317685e-02 3.49326903e-03 7.18197378e-01 3.06394628e+03 -2.60300000e-04 -1.65360702e-12 7.63686953e-02 6.60915720e-02 8.51969653e-02 5.06546849e-02 3.49070473e-03 7.18197378e-01 3.06394628e+03 -2.60400000e-04 -1.65360702e-12 7.63570625e-02 6.60676918e-02 8.52121640e-02 5.06775586e-02 3.48814519e-03 7.18197378e-01 3.06394628e+03 -2.60500000e-04 -1.65360702e-12 7.63454501e-02 6.60438593e-02 8.52273324e-02 5.07003899e-02 3.48559042e-03 7.18197378e-01 3.06394628e+03 -2.60600000e-04 -1.65360702e-12 7.63338582e-02 6.60200743e-02 8.52424706e-02 5.07231786e-02 3.48304039e-03 7.18197378e-01 3.06394628e+03 -2.60700000e-04 -1.65360702e-12 7.63222868e-02 6.59963367e-02 8.52575786e-02 5.07459249e-02 3.48049512e-03 7.18197378e-01 3.06462703e+03 -2.60800000e-04 -1.65360702e-12 7.63107358e-02 6.59726466e-02 8.52726564e-02 5.07686289e-02 3.47795458e-03 7.18197378e-01 3.06462703e+03 -2.60900000e-04 -1.65360702e-12 7.62992051e-02 6.59490037e-02 8.52877041e-02 5.07912905e-02 3.47541879e-03 7.18197378e-01 3.06462703e+03 -2.61000000e-04 -1.65360702e-12 7.62876949e-02 6.59254081e-02 8.53027217e-02 5.08139098e-02 3.47288773e-03 7.18197378e-01 3.06462703e+03 -2.61100000e-04 -1.65360702e-12 7.62762049e-02 6.59018598e-02 8.53177092e-02 5.08364868e-02 3.47036139e-03 7.18197378e-01 3.06462703e+03 -2.61200000e-04 -1.65360702e-12 7.62647354e-02 6.58783585e-02 8.53326668e-02 5.08590217e-02 3.46783977e-03 7.18197378e-01 3.06530189e+03 -2.61300000e-04 -1.65360702e-12 7.62532861e-02 6.58549043e-02 8.53475944e-02 5.08815145e-02 3.46532287e-03 7.18197378e-01 3.06530189e+03 -2.61400000e-04 -1.65360702e-12 7.62418571e-02 6.58314970e-02 8.53624922e-02 5.09039651e-02 3.46281068e-03 7.18197378e-01 3.06530189e+03 -2.61500000e-04 -1.65360702e-12 7.62304485e-02 6.58081367e-02 8.53773600e-02 5.09263738e-02 3.46030319e-03 7.18197378e-01 3.06530189e+03 -2.61600000e-04 -1.65360702e-12 7.62190600e-02 6.57848232e-02 8.53921981e-02 5.09487404e-02 3.45780040e-03 7.18197378e-01 3.06530189e+03 -2.61700000e-04 -1.65360702e-12 7.62076919e-02 6.57615565e-02 8.54070064e-02 5.09710651e-02 3.45530231e-03 7.18197378e-01 3.06597088e+03 -2.61800000e-04 -1.65360702e-12 7.61963439e-02 6.57383366e-02 8.54217849e-02 5.09933479e-02 3.45280890e-03 7.18197378e-01 3.06597088e+03 -2.61900000e-04 -1.65360702e-12 7.61850161e-02 6.57151632e-02 8.54365338e-02 5.10155889e-02 3.45032017e-03 7.18197378e-01 3.06597088e+03 -2.62000000e-04 -1.65360702e-12 7.61737085e-02 6.56920365e-02 8.54512530e-02 5.10377880e-02 3.44783612e-03 7.18197378e-01 3.06597088e+03 -2.62100000e-04 -1.65360702e-12 7.61624211e-02 6.56689562e-02 8.54659426e-02 5.10599455e-02 3.44535674e-03 7.18197378e-01 3.06597088e+03 -2.62200000e-04 -1.65360702e-12 7.61511538e-02 6.56459225e-02 8.54806026e-02 5.10820612e-02 3.44288202e-03 7.18197378e-01 3.06663404e+03 -2.62300000e-04 -1.65360702e-12 7.61399066e-02 6.56229350e-02 8.54952332e-02 5.11041354e-02 3.44041196e-03 7.18197378e-01 3.06663404e+03 -2.62400000e-04 -1.65360702e-12 7.61286796e-02 6.55999939e-02 8.55098342e-02 5.11261679e-02 3.43794656e-03 7.18197378e-01 3.06663404e+03 -2.62500000e-04 -1.65360702e-12 7.61174726e-02 6.55770990e-02 8.55244059e-02 5.11481589e-02 3.43548580e-03 7.18197378e-01 3.06663404e+03 -2.62600000e-04 -1.65360702e-12 7.61062856e-02 6.55542503e-02 8.55389481e-02 5.11701084e-02 3.43302969e-03 7.18197378e-01 3.06663404e+03 -2.62700000e-04 -1.65360702e-12 7.60951187e-02 6.55314477e-02 8.55534610e-02 5.11920165e-02 3.43057821e-03 7.18197378e-01 3.06729138e+03 -2.62800000e-04 -1.65360702e-12 7.60839719e-02 6.55086912e-02 8.55679446e-02 5.12138831e-02 3.42813137e-03 7.18197378e-01 3.06729138e+03 -2.62900000e-04 -1.65360702e-12 7.60728450e-02 6.54859806e-02 8.55823990e-02 5.12357085e-02 3.42568915e-03 7.18197378e-01 3.06729138e+03 -2.63000000e-04 -1.65360702e-12 7.60617381e-02 6.54633159e-02 8.55968241e-02 5.12574925e-02 3.42325155e-03 7.18197378e-01 3.06729138e+03 -2.63100000e-04 -1.65360702e-12 7.60506512e-02 6.54406970e-02 8.56112200e-02 5.12792354e-02 3.42081856e-03 7.18197378e-01 3.06729138e+03 -2.63200000e-04 -1.65360702e-12 7.60395842e-02 6.54181239e-02 8.56255869e-02 5.13009370e-02 3.41839018e-03 7.18197378e-01 3.06794295e+03 -2.63300000e-04 -1.65360702e-12 7.60285371e-02 6.53955965e-02 8.56399246e-02 5.13225975e-02 3.41596641e-03 7.18197378e-01 3.06794295e+03 -2.63400000e-04 -1.65360702e-12 7.60175099e-02 6.53731147e-02 8.56542333e-02 5.13442169e-02 3.41354723e-03 7.18197378e-01 3.06794295e+03 -2.63500000e-04 -1.65360702e-12 7.60065026e-02 6.53506785e-02 8.56685131e-02 5.13657953e-02 3.41113265e-03 7.18197378e-01 3.06794295e+03 -2.63600000e-04 -1.65360702e-12 7.59955151e-02 6.53282878e-02 8.56827638e-02 5.13873327e-02 3.40872265e-03 7.18197378e-01 3.06794295e+03 -2.63700000e-04 -1.65360702e-12 7.59845475e-02 6.53059425e-02 8.56969857e-02 5.14088292e-02 3.40631723e-03 7.18197378e-01 3.06858876e+03 -2.63800000e-04 -1.65360702e-12 7.59735997e-02 6.52836426e-02 8.57111786e-02 5.14302848e-02 3.40391638e-03 7.18197378e-01 3.06858876e+03 -2.63900000e-04 -1.65360702e-12 7.59626717e-02 6.52613879e-02 8.57253428e-02 5.14516996e-02 3.40152010e-03 7.18197378e-01 3.06858876e+03 -2.64000000e-04 -1.65360702e-12 7.59517635e-02 6.52391785e-02 8.57394782e-02 5.14730736e-02 3.39912839e-03 7.18197378e-01 3.06858876e+03 -2.64100000e-04 -1.65360702e-12 7.59408751e-02 6.52170142e-02 8.57535848e-02 5.14944068e-02 3.39674123e-03 7.18197378e-01 3.06858876e+03 -2.64200000e-04 -1.65360702e-12 7.59300063e-02 6.51948951e-02 8.57676627e-02 5.15156994e-02 3.39435863e-03 7.18197378e-01 3.06922885e+03 -2.64300000e-04 -1.65360702e-12 7.59191573e-02 6.51728209e-02 8.57817120e-02 5.15369514e-02 3.39198057e-03 7.18197378e-01 3.06922885e+03 -2.64400000e-04 -1.65360702e-12 7.59083280e-02 6.51507917e-02 8.57957327e-02 5.15581628e-02 3.38960705e-03 7.18197378e-01 3.06922885e+03 -2.64500000e-04 -1.65360702e-12 7.58975183e-02 6.51288073e-02 8.58097248e-02 5.15793336e-02 3.38723806e-03 7.18197378e-01 3.06922885e+03 -2.64600000e-04 -1.65360702e-12 7.58867283e-02 6.51068678e-02 8.58236884e-02 5.16004640e-02 3.38487361e-03 7.18197378e-01 3.06922885e+03 -2.64700000e-04 -1.65360702e-12 7.58759579e-02 6.50849731e-02 8.58376235e-02 5.16215540e-02 3.38251368e-03 7.18197378e-01 3.06986325e+03 -2.64800000e-04 -1.65360702e-12 7.58652072e-02 6.50631230e-02 8.58515302e-02 5.16426036e-02 3.38015826e-03 7.18197378e-01 3.06986325e+03 -2.64900000e-04 -1.65360702e-12 7.58544760e-02 6.50413175e-02 8.58654084e-02 5.16636129e-02 3.37780736e-03 7.18197378e-01 3.06986325e+03 -2.65000000e-04 -1.65360702e-12 7.58437644e-02 6.50195565e-02 8.58792584e-02 5.16845819e-02 3.37546096e-03 7.18197378e-01 3.06986325e+03 -2.65100000e-04 -1.65360702e-12 7.58330723e-02 6.49978401e-02 8.58930800e-02 5.17055107e-02 3.37311906e-03 7.18197378e-01 3.06986325e+03 -2.65200000e-04 -1.65360702e-12 7.58223998e-02 6.49761680e-02 8.59068734e-02 5.17263993e-02 3.37078166e-03 7.18197378e-01 3.07049198e+03 -2.65300000e-04 -1.65360702e-12 7.58117468e-02 6.49545403e-02 8.59206385e-02 5.17472478e-02 3.36844874e-03 7.18197378e-01 3.07049198e+03 -2.65400000e-04 -1.65360702e-12 7.58011132e-02 6.49329569e-02 8.59343754e-02 5.17680563e-02 3.36612031e-03 7.18197378e-01 3.07049198e+03 -2.65500000e-04 -1.65360702e-12 7.57904991e-02 6.49114176e-02 8.59480843e-02 5.17888247e-02 3.36379636e-03 7.18197378e-01 3.07049198e+03 -2.65600000e-04 -1.65360702e-12 7.57799045e-02 6.48899225e-02 8.59617650e-02 5.18095532e-02 3.36147687e-03 7.18197378e-01 3.07049198e+03 -2.65700000e-04 -1.65360702e-12 7.57693293e-02 6.48684715e-02 8.59754177e-02 5.18302418e-02 3.35916185e-03 7.18197378e-01 3.07111507e+03 -2.65800000e-04 -1.65360702e-12 7.57587735e-02 6.48470645e-02 8.59890424e-02 5.18508905e-02 3.35685130e-03 7.18197378e-01 3.07111507e+03 -2.65900000e-04 -1.65360702e-12 7.57482370e-02 6.48257014e-02 8.60026391e-02 5.18714995e-02 3.35454519e-03 7.18197378e-01 3.07111507e+03 -2.66000000e-04 -1.65360702e-12 7.57377200e-02 6.48043822e-02 8.60162079e-02 5.18920686e-02 3.35224354e-03 7.18197378e-01 3.07111507e+03 -2.66100000e-04 -1.65360702e-12 7.57272222e-02 6.47831067e-02 8.60297488e-02 5.19125981e-02 3.34994632e-03 7.18197378e-01 3.07111507e+03 -2.66200000e-04 -1.65360702e-12 7.57167438e-02 6.47618750e-02 8.60432619e-02 5.19330879e-02 3.34765355e-03 7.18197378e-01 3.07173256e+03 -2.66300000e-04 -1.65360702e-12 7.57062846e-02 6.47406870e-02 8.60567472e-02 5.19535381e-02 3.34536520e-03 7.18197378e-01 3.07173256e+03 -2.66400000e-04 -1.65360702e-12 7.56958448e-02 6.47195425e-02 8.60702048e-02 5.19739488e-02 3.34308128e-03 7.18197378e-01 3.07173256e+03 -2.66500000e-04 -1.65360702e-12 7.56854242e-02 6.46984416e-02 8.60836346e-02 5.19943200e-02 3.34080178e-03 7.18197378e-01 3.07173256e+03 -2.66600000e-04 -1.65360702e-12 7.56750228e-02 6.46773842e-02 8.60970368e-02 5.20146517e-02 3.33852669e-03 7.18197378e-01 3.07234447e+03 -2.66700000e-04 -1.65360702e-12 7.56646406e-02 6.46563701e-02 8.61104114e-02 5.20349441e-02 3.33625601e-03 7.18197378e-01 3.07234447e+03 -2.66800000e-04 -1.65360702e-12 7.56542776e-02 6.46353994e-02 8.61237584e-02 5.20551971e-02 3.33398973e-03 7.18197378e-01 3.07234447e+03 -2.66900000e-04 -1.65360702e-12 7.56439338e-02 6.46144719e-02 8.61370778e-02 5.20754108e-02 3.33172785e-03 7.18197378e-01 3.07234447e+03 -2.67000000e-04 -1.65360702e-12 7.56336091e-02 6.45935876e-02 8.61503698e-02 5.20955853e-02 3.32947036e-03 7.18197378e-01 3.07234447e+03 -2.67100000e-04 -1.65360702e-12 7.56233035e-02 6.45727464e-02 8.61636344e-02 5.21157206e-02 3.32721725e-03 7.18197378e-01 3.07295083e+03 -2.67200000e-04 -1.65360702e-12 7.56130171e-02 6.45519483e-02 8.61768715e-02 5.21358167e-02 3.32496852e-03 7.18197378e-01 3.07295083e+03 -2.67300000e-04 -1.65360702e-12 7.56027497e-02 6.45311932e-02 8.61900813e-02 5.21558738e-02 3.32272417e-03 7.18197378e-01 3.07295083e+03 -2.67400000e-04 -1.65360702e-12 7.55925014e-02 6.45104810e-02 8.62032637e-02 5.21758919e-02 3.32048418e-03 7.18197378e-01 3.07295083e+03 -2.67500000e-04 -1.65360702e-12 7.55822721e-02 6.44898116e-02 8.62164189e-02 5.21958710e-02 3.31824855e-03 7.18197378e-01 3.07295083e+03 -2.67600000e-04 -1.65360702e-12 7.55720618e-02 6.44691850e-02 8.62295469e-02 5.22158111e-02 3.31601728e-03 7.18197378e-01 3.07355168e+03 -2.67700000e-04 -1.65360702e-12 7.55618705e-02 6.44486012e-02 8.62426476e-02 5.22357124e-02 3.31379036e-03 7.18197378e-01 3.07355168e+03 -2.67800000e-04 -1.65360702e-12 7.55516982e-02 6.44280600e-02 8.62557212e-02 5.22555749e-02 3.31156778e-03 7.18197378e-01 3.07355168e+03 -2.67900000e-04 -1.65360702e-12 7.55415449e-02 6.44075613e-02 8.62687678e-02 5.22753986e-02 3.30934954e-03 7.18197378e-01 3.07355168e+03 -2.68000000e-04 -1.65360702e-12 7.55314104e-02 6.43871052e-02 8.62817872e-02 5.22951836e-02 3.30713564e-03 7.18197378e-01 3.07355168e+03 -2.68100000e-04 -1.65360702e-12 7.55212949e-02 6.43666916e-02 8.62947797e-02 5.23149299e-02 3.30492605e-03 7.18197378e-01 3.07414705e+03 -2.68200000e-04 -1.65360702e-12 7.55111983e-02 6.43463203e-02 8.63077451e-02 5.23346377e-02 3.30272079e-03 7.18197378e-01 3.07414705e+03 -2.68300000e-04 -1.65360702e-12 7.55011205e-02 6.43259913e-02 8.63206837e-02 5.23543068e-02 3.30051985e-03 7.18197378e-01 3.07414705e+03 -2.68400000e-04 -1.65360702e-12 7.54910615e-02 6.43057046e-02 8.63335953e-02 5.23739375e-02 3.29832321e-03 7.18197378e-01 3.07414705e+03 -2.68500000e-04 -1.65360702e-12 7.54810214e-02 6.42854600e-02 8.63464801e-02 5.23935297e-02 3.29613088e-03 7.18197378e-01 3.07414705e+03 -2.68600000e-04 -1.65360702e-12 7.54710001e-02 6.42652576e-02 8.63593382e-02 5.24130835e-02 3.29394284e-03 7.18197378e-01 3.07473695e+03 -2.68700000e-04 -1.65360702e-12 7.54609975e-02 6.42450972e-02 8.63721694e-02 5.24325989e-02 3.29175909e-03 7.18197378e-01 3.07473695e+03 -2.68800000e-04 -1.65360702e-12 7.54510137e-02 6.42249788e-02 8.63849739e-02 5.24520761e-02 3.28957963e-03 7.18197378e-01 3.07473695e+03 -2.68900000e-04 -1.65360702e-12 7.54410487e-02 6.42049023e-02 8.63977518e-02 5.24715150e-02 3.28740445e-03 7.18197378e-01 3.07473695e+03 -2.69000000e-04 -1.65360702e-12 7.54311023e-02 6.41848676e-02 8.64105030e-02 5.24909157e-02 3.28523354e-03 7.18197378e-01 3.07473695e+03 -2.69100000e-04 -1.65360702e-12 7.54211746e-02 6.41648747e-02 8.64232277e-02 5.25102782e-02 3.28306690e-03 7.18197378e-01 3.07532144e+03 -2.69200000e-04 -1.65360702e-12 7.54112656e-02 6.41449235e-02 8.64359258e-02 5.25296027e-02 3.28090452e-03 7.18197378e-01 3.07532144e+03 -2.69300000e-04 -1.65360702e-12 7.54013752e-02 6.41250140e-02 8.64485974e-02 5.25488892e-02 3.27874640e-03 7.18197378e-01 3.07532144e+03 -2.69400000e-04 -1.65360702e-12 7.53915035e-02 6.41051460e-02 8.64612425e-02 5.25681376e-02 3.27659253e-03 7.18197378e-01 3.07532144e+03 -2.69500000e-04 -1.65360702e-12 7.53816503e-02 6.40853195e-02 8.64738612e-02 5.25873482e-02 3.27444290e-03 7.18197378e-01 3.07532144e+03 -2.69600000e-04 -1.65360702e-12 7.53718157e-02 6.40655345e-02 8.64864536e-02 5.26065208e-02 3.27229752e-03 7.18197378e-01 3.07590053e+03 -2.69700000e-04 -1.65360702e-12 7.53619997e-02 6.40457908e-02 8.64990196e-02 5.26256557e-02 3.27015636e-03 7.18197378e-01 3.07590053e+03 -2.69800000e-04 -1.65360702e-12 7.53522022e-02 6.40260885e-02 8.65115593e-02 5.26447527e-02 3.26801943e-03 7.18197378e-01 3.07590053e+03 -2.69900000e-04 -1.65360702e-12 7.53424232e-02 6.40064274e-02 8.65240728e-02 5.26638121e-02 3.26588672e-03 7.18197378e-01 3.07590053e+03 -2.70000000e-04 -1.65360702e-12 7.53326627e-02 6.39868074e-02 8.65365601e-02 5.26828337e-02 3.26375823e-03 7.18197378e-01 3.07590053e+03 -2.70100000e-04 -1.65360702e-12 7.53229207e-02 6.39672286e-02 8.65490212e-02 5.27018178e-02 3.26163395e-03 7.18197378e-01 3.07647426e+03 -2.70200000e-04 -1.65360702e-12 7.53131971e-02 6.39476908e-02 8.65614562e-02 5.27207643e-02 3.25951387e-03 7.18197378e-01 3.07647426e+03 -2.70300000e-04 -1.65360702e-12 7.53034919e-02 6.39281939e-02 8.65738651e-02 5.27396732e-02 3.25739798e-03 7.18197378e-01 3.07647426e+03 -2.70400000e-04 -1.65360702e-12 7.52938051e-02 6.39087380e-02 8.65862480e-02 5.27585448e-02 3.25528629e-03 7.18197378e-01 3.07647426e+03 -2.70500000e-04 -1.65360702e-12 7.52841367e-02 6.38893229e-02 8.65986049e-02 5.27773789e-02 3.25317878e-03 7.18197378e-01 3.07647426e+03 -2.70600000e-04 -1.65360702e-12 7.52744866e-02 6.38699486e-02 8.66109359e-02 5.27961756e-02 3.25107546e-03 7.18197378e-01 3.07704267e+03 -2.70700000e-04 -1.65360702e-12 7.52648549e-02 6.38506149e-02 8.66232409e-02 5.28149351e-02 3.24897631e-03 7.18197378e-01 3.07704267e+03 -2.70800000e-04 -1.65360702e-12 7.52552415e-02 6.38313219e-02 8.66355201e-02 5.28336573e-02 3.24688132e-03 7.18197378e-01 3.07704267e+03 -2.70900000e-04 -1.65360702e-12 7.52456464e-02 6.38120695e-02 8.66477734e-02 5.28523423e-02 3.24479050e-03 7.18197378e-01 3.07704267e+03 -2.71000000e-04 -1.65360702e-12 7.52360695e-02 6.37928576e-02 8.66600010e-02 5.28709902e-02 3.24270383e-03 7.18197378e-01 3.07704267e+03 -2.71100000e-04 -1.65360702e-12 7.52265109e-02 6.37736861e-02 8.66722029e-02 5.28896010e-02 3.24062132e-03 7.18197378e-01 3.07760577e+03 -2.71200000e-04 -1.65360702e-12 7.52169704e-02 6.37545550e-02 8.66843790e-02 5.29081747e-02 3.23854295e-03 7.18197378e-01 3.07760577e+03 -2.71300000e-04 -1.65360702e-12 7.52074482e-02 6.37354642e-02 8.66965295e-02 5.29267115e-02 3.23646871e-03 7.18197378e-01 3.07760577e+03 -2.71400000e-04 -1.65360702e-12 7.51979442e-02 6.37164136e-02 8.67086544e-02 5.29452113e-02 3.23439861e-03 7.18197378e-01 3.07760577e+03 -2.71500000e-04 -1.65360702e-12 7.51884583e-02 6.36974032e-02 8.67207538e-02 5.29636743e-02 3.23233264e-03 7.18197378e-01 3.07760577e+03 -2.71600000e-04 -1.65360702e-12 7.51789905e-02 6.36784329e-02 8.67328276e-02 5.29821004e-02 3.23027079e-03 7.18197378e-01 3.07816361e+03 -2.71700000e-04 -1.65360702e-12 7.51695408e-02 6.36595027e-02 8.67448759e-02 5.30004897e-02 3.22821305e-03 7.18197378e-01 3.07816361e+03 -2.71800000e-04 -1.65360702e-12 7.51601093e-02 6.36406124e-02 8.67568988e-02 5.30188423e-02 3.22615942e-03 7.18197378e-01 3.07816361e+03 -2.71900000e-04 -1.65360702e-12 7.51506957e-02 6.36217620e-02 8.67688963e-02 5.30371583e-02 3.22410990e-03 7.18197378e-01 3.07816361e+03 -2.72000000e-04 -1.65360702e-12 7.51413002e-02 6.36029514e-02 8.67808684e-02 5.30554376e-02 3.22206447e-03 7.18197378e-01 3.07816361e+03 -2.72100000e-04 -1.65360702e-12 7.51319228e-02 6.35841806e-02 8.67928152e-02 5.30736804e-02 3.22002313e-03 7.18197378e-01 3.07871621e+03 -2.72200000e-04 -1.65360702e-12 7.51225633e-02 6.35654496e-02 8.68047368e-02 5.30918867e-02 3.21798588e-03 7.18197378e-01 3.07871621e+03 -2.72300000e-04 -1.65360702e-12 7.51132218e-02 6.35467581e-02 8.68166331e-02 5.31100565e-02 3.21595271e-03 7.18197378e-01 3.07871621e+03 -2.72400000e-04 -1.65360702e-12 7.51038982e-02 6.35281063e-02 8.68285042e-02 5.31281899e-02 3.21392361e-03 7.18197378e-01 3.07871621e+03 -2.72500000e-04 -1.65360702e-12 7.50945925e-02 6.35094939e-02 8.68403502e-02 5.31462869e-02 3.21189858e-03 7.18197378e-01 3.07871621e+03 -2.72600000e-04 -1.65360702e-12 7.50853048e-02 6.34909210e-02 8.68521711e-02 5.31643477e-02 3.20987761e-03 7.18197378e-01 3.07926361e+03 -2.72700000e-04 -1.65360702e-12 7.50760349e-02 6.34723874e-02 8.68639669e-02 5.31823722e-02 3.20786070e-03 7.18197378e-01 3.07926361e+03 -2.72800000e-04 -1.65360702e-12 7.50667829e-02 6.34538932e-02 8.68757377e-02 5.32003605e-02 3.20584784e-03 7.18197378e-01 3.07926361e+03 -2.72900000e-04 -1.65360702e-12 7.50575487e-02 6.34354382e-02 8.68874836e-02 5.32183127e-02 3.20383902e-03 7.18197378e-01 3.07926361e+03 -2.73000000e-04 -1.65360702e-12 7.50483323e-02 6.34170224e-02 8.68992045e-02 5.32362287e-02 3.20183424e-03 7.18197378e-01 3.07926361e+03 -2.73100000e-04 -1.65360702e-12 7.50391337e-02 6.33986457e-02 8.69109005e-02 5.32541088e-02 3.19983350e-03 7.18197378e-01 3.07980584e+03 -2.73200000e-04 -1.65360702e-12 7.50299529e-02 6.33803080e-02 8.69225716e-02 5.32719528e-02 3.19783678e-03 7.18197378e-01 3.07980584e+03 -2.73300000e-04 -1.65360702e-12 7.50207898e-02 6.33620093e-02 8.69342180e-02 5.32897610e-02 3.19584408e-03 7.18197378e-01 3.07980584e+03 -2.73400000e-04 -1.65360702e-12 7.50116444e-02 6.33437495e-02 8.69458396e-02 5.33075332e-02 3.19385539e-03 7.18197378e-01 3.07980584e+03 -2.73500000e-04 -1.65360702e-12 7.50025168e-02 6.33255286e-02 8.69574364e-02 5.33252697e-02 3.19187071e-03 7.18197378e-01 3.07980584e+03 -2.73600000e-04 -1.65360702e-12 7.49934067e-02 6.33073465e-02 8.69690086e-02 5.33429703e-02 3.18989004e-03 7.18197378e-01 3.08034293e+03 -2.73700000e-04 -1.65360702e-12 7.49843144e-02 6.32892030e-02 8.69805561e-02 5.33606352e-02 3.18791336e-03 7.18197378e-01 3.08034293e+03 -2.73800000e-04 -1.65360702e-12 7.49752397e-02 6.32710982e-02 8.69920791e-02 5.33782645e-02 3.18594068e-03 7.18197378e-01 3.08034293e+03 -2.73900000e-04 -1.65360702e-12 7.49661825e-02 6.32530320e-02 8.70035775e-02 5.33958582e-02 3.18397198e-03 7.18197378e-01 3.08034293e+03 -2.74000000e-04 -1.65360702e-12 7.49571430e-02 6.32350044e-02 8.70150513e-02 5.34134162e-02 3.18200726e-03 7.18197378e-01 3.08087492e+03 -2.74100000e-04 -1.65360702e-12 7.49481210e-02 6.32170151e-02 8.70265007e-02 5.34309388e-02 3.18004651e-03 7.18197378e-01 3.08087492e+03 -2.74200000e-04 -1.65360702e-12 7.49391165e-02 6.31990643e-02 8.70379257e-02 5.34484260e-02 3.17808973e-03 7.18197378e-01 3.08087492e+03 -2.74300000e-04 -1.65360702e-12 7.49301296e-02 6.31811518e-02 8.70493263e-02 5.34658777e-02 3.17613691e-03 7.18197378e-01 3.08087492e+03 -2.74400000e-04 -1.65360702e-12 7.49211601e-02 6.31632775e-02 8.70607025e-02 5.34832940e-02 3.17418805e-03 7.18197378e-01 3.08087492e+03 -2.74500000e-04 -1.65360702e-12 7.49122081e-02 6.31454414e-02 8.70720544e-02 5.35006751e-02 3.17224313e-03 7.18197378e-01 3.08166467e+03 -2.74600000e-04 -1.65360702e-12 7.49032735e-02 6.31276435e-02 8.70833820e-02 5.35180210e-02 3.17030216e-03 7.18197378e-01 3.08166467e+03 -2.74700000e-04 -1.65360702e-12 7.48943564e-02 6.31098836e-02 8.70946855e-02 5.35353316e-02 3.16836513e-03 7.18197378e-01 3.08166467e+03 -2.74800000e-04 -1.65360702e-12 7.48854566e-02 6.30921617e-02 8.71059647e-02 5.35526071e-02 3.16643203e-03 7.18197378e-01 3.08166467e+03 -2.74900000e-04 -1.65360702e-12 7.48765742e-02 6.30744777e-02 8.71172198e-02 5.35698475e-02 3.16450286e-03 7.18197378e-01 3.08166467e+03 -2.75000000e-04 -1.65360702e-12 7.48677092e-02 6.30568316e-02 8.71284508e-02 5.35870529e-02 3.16257760e-03 7.18197378e-01 3.08166467e+03 -2.75100000e-04 -1.65360702e-12 7.48588615e-02 6.30392233e-02 8.71396578e-02 5.36042233e-02 3.16065626e-03 7.18197378e-01 3.08166467e+03 -2.75200000e-04 -1.65360702e-12 7.48500311e-02 6.30216527e-02 8.71508407e-02 5.36213587e-02 3.15873883e-03 7.18197378e-01 3.08166467e+03 -2.75300000e-04 -1.65360702e-12 7.48412180e-02 6.30041198e-02 8.71619997e-02 5.36384593e-02 3.15682531e-03 7.18197378e-01 3.08244308e+03 -2.75400000e-04 -1.65360702e-12 7.48324221e-02 6.29866245e-02 8.71731347e-02 5.36555251e-02 3.15491567e-03 7.18197378e-01 3.08244308e+03 -2.75500000e-04 -1.65360702e-12 7.48236435e-02 6.29691668e-02 8.71842458e-02 5.36725561e-02 3.15300993e-03 7.18197378e-01 3.08244308e+03 -2.75600000e-04 -1.65360702e-12 7.48148821e-02 6.29517465e-02 8.71953331e-02 5.36895524e-02 3.15110808e-03 7.18197378e-01 3.08244308e+03 -2.75700000e-04 -1.65360702e-12 7.48061378e-02 6.29343636e-02 8.72063966e-02 5.37065140e-02 3.14921010e-03 7.18197378e-01 3.08244308e+03 -2.75800000e-04 -1.65360702e-12 7.47974107e-02 6.29170181e-02 8.72174363e-02 5.37234410e-02 3.14731600e-03 7.18197378e-01 3.08244308e+03 -2.75900000e-04 -1.65360702e-12 7.47887008e-02 6.28997098e-02 8.72284523e-02 5.37403335e-02 3.14542576e-03 7.18197378e-01 3.08244308e+03 -2.76000000e-04 -1.65360702e-12 7.47800080e-02 6.28824388e-02 8.72394446e-02 5.37571914e-02 3.14353938e-03 7.18197378e-01 3.08321026e+03 -2.76100000e-04 -1.65360702e-12 7.47713323e-02 6.28652049e-02 8.72504132e-02 5.37740149e-02 3.14165686e-03 7.18197378e-01 3.08321026e+03 -2.76200000e-04 -1.65360702e-12 7.47626736e-02 6.28480081e-02 8.72613583e-02 5.37908040e-02 3.13977819e-03 7.18197378e-01 3.08321026e+03 -2.76300000e-04 -1.65360702e-12 7.47540320e-02 6.28308483e-02 8.72722798e-02 5.38075587e-02 3.13790337e-03 7.18197378e-01 3.08321026e+03 -2.76400000e-04 -1.65360702e-12 7.47454074e-02 6.28137255e-02 8.72831777e-02 5.38242792e-02 3.13603238e-03 7.18197378e-01 3.08321026e+03 -2.76500000e-04 -1.65360702e-12 7.47367998e-02 6.27966395e-02 8.72940522e-02 5.38409654e-02 3.13416522e-03 7.18197378e-01 3.08321026e+03 -2.76600000e-04 -1.65360702e-12 7.47282092e-02 6.27795904e-02 8.73049033e-02 5.38576174e-02 3.13230189e-03 7.18197378e-01 3.08321026e+03 -2.76700000e-04 -1.65360702e-12 7.47196355e-02 6.27625781e-02 8.73157309e-02 5.38742352e-02 3.13044237e-03 7.18197378e-01 3.08321026e+03 -2.76800000e-04 -1.65360702e-12 7.47110788e-02 6.27456024e-02 8.73265352e-02 5.38908190e-02 3.12858668e-03 7.18197378e-01 3.08396632e+03 -2.76900000e-04 -1.65360702e-12 7.47025390e-02 6.27286634e-02 8.73373162e-02 5.39073688e-02 3.12673479e-03 7.18197378e-01 3.08396632e+03 -2.77000000e-04 -1.65360702e-12 7.46940161e-02 6.27117610e-02 8.73480739e-02 5.39238845e-02 3.12488670e-03 7.18197378e-01 3.08396632e+03 -2.77100000e-04 -1.65360702e-12 7.46855100e-02 6.26948950e-02 8.73588084e-02 5.39403664e-02 3.12304241e-03 7.18197378e-01 3.08396632e+03 -2.77200000e-04 -1.65360702e-12 7.46770207e-02 6.26780655e-02 8.73695196e-02 5.39568143e-02 3.12120191e-03 7.18197378e-01 3.08396632e+03 -2.77300000e-04 -1.65360702e-12 7.46685483e-02 6.26612724e-02 8.73802078e-02 5.39732285e-02 3.11936519e-03 7.18197378e-01 3.08396632e+03 -2.77400000e-04 -1.65360702e-12 7.46600927e-02 6.26445156e-02 8.73908728e-02 5.39896089e-02 3.11753225e-03 7.18197378e-01 3.08396632e+03 -2.77500000e-04 -1.65360702e-12 7.46516538e-02 6.26277950e-02 8.74015147e-02 5.40059555e-02 3.11570309e-03 7.18197378e-01 3.08471138e+03 -2.77600000e-04 -1.65360702e-12 7.46432317e-02 6.26111106e-02 8.74121336e-02 5.40222685e-02 3.11387769e-03 7.18197378e-01 3.08471138e+03 -2.77700000e-04 -1.65360702e-12 7.46348263e-02 6.25944624e-02 8.74227295e-02 5.40385479e-02 3.11205606e-03 7.18197378e-01 3.08471138e+03 -2.77800000e-04 -1.65360702e-12 7.46264375e-02 6.25778502e-02 8.74333025e-02 5.40547937e-02 3.11023818e-03 7.18197378e-01 3.08471138e+03 -2.77900000e-04 -1.65360702e-12 7.46180655e-02 6.25612740e-02 8.74438526e-02 5.40710060e-02 3.10842405e-03 7.18197378e-01 3.08471138e+03 -2.78000000e-04 -1.65360702e-12 7.46097101e-02 6.25447337e-02 8.74543798e-02 5.40871849e-02 3.10661366e-03 7.18197378e-01 3.08471138e+03 -2.78100000e-04 -1.65360702e-12 7.46013714e-02 6.25282293e-02 8.74648841e-02 5.41033304e-02 3.10480701e-03 7.18197378e-01 3.08471138e+03 -2.78200000e-04 -1.65360702e-12 7.45930492e-02 6.25117607e-02 8.74753657e-02 5.41194425e-02 3.10300409e-03 7.18197378e-01 3.08471138e+03 -2.78300000e-04 -1.65360702e-12 7.45847436e-02 6.24953278e-02 8.74858246e-02 5.41355213e-02 3.10120490e-03 7.18197378e-01 3.08544555e+03 -2.78400000e-04 -1.65360702e-12 7.45764546e-02 6.24789306e-02 8.74962607e-02 5.41515668e-02 3.09940943e-03 7.18197378e-01 3.08544555e+03 -2.78500000e-04 -1.65360702e-12 7.45681821e-02 6.24625690e-02 8.75066742e-02 5.41675792e-02 3.09761767e-03 7.18197378e-01 3.08544555e+03 -2.78600000e-04 -1.65360702e-12 7.45599261e-02 6.24462430e-02 8.75170650e-02 5.41835584e-02 3.09582962e-03 7.18197378e-01 3.08544555e+03 -2.78700000e-04 -1.65360702e-12 7.45516866e-02 6.24299524e-02 8.75274333e-02 5.41995046e-02 3.09404527e-03 7.18197378e-01 3.08544555e+03 -2.78800000e-04 -1.65360702e-12 7.45434636e-02 6.24136973e-02 8.75377790e-02 5.42154177e-02 3.09226462e-03 7.18197378e-01 3.08544555e+03 -2.78900000e-04 -1.65360702e-12 7.45352570e-02 6.23974775e-02 8.75481022e-02 5.42312978e-02 3.09048766e-03 7.18197378e-01 3.08544555e+03 -2.79000000e-04 -1.65360702e-12 7.45270668e-02 6.23812930e-02 8.75584029e-02 5.42471450e-02 3.08871439e-03 7.18197378e-01 3.08616894e+03 -2.79100000e-04 -1.65360702e-12 7.45188930e-02 6.23651438e-02 8.75686813e-02 5.42629593e-02 3.08694479e-03 7.18197378e-01 3.08616894e+03 -2.79200000e-04 -1.65360702e-12 7.45107356e-02 6.23490297e-02 8.75789372e-02 5.42787408e-02 3.08517887e-03 7.18197378e-01 3.08616894e+03 -2.79300000e-04 -1.65360702e-12 7.45025945e-02 6.23329507e-02 8.75891708e-02 5.42944895e-02 3.08341662e-03 7.18197378e-01 3.08616894e+03 -2.79400000e-04 -1.65360702e-12 7.44944697e-02 6.23169068e-02 8.75993821e-02 5.43102055e-02 3.08165802e-03 7.18197378e-01 3.08616894e+03 -2.79500000e-04 -1.65360702e-12 7.44863613e-02 6.23008978e-02 8.76095711e-02 5.43258888e-02 3.07990308e-03 7.18197378e-01 3.08616894e+03 -2.79600000e-04 -1.65360702e-12 7.44782691e-02 6.22849238e-02 8.76197380e-02 5.43415395e-02 3.07815180e-03 7.18197378e-01 3.08616894e+03 -2.79700000e-04 -1.65360702e-12 7.44701932e-02 6.22689846e-02 8.76298826e-02 5.43571577e-02 3.07640415e-03 7.18197378e-01 3.08688166e+03 -2.79800000e-04 -1.65360702e-12 7.44621335e-02 6.22530802e-02 8.76400051e-02 5.43727433e-02 3.07466015e-03 7.18197378e-01 3.08688166e+03 -2.79900000e-04 -1.65360702e-12 7.44540899e-02 6.22372105e-02 8.76501055e-02 5.43882965e-02 3.07291977e-03 7.18197378e-01 3.08688166e+03 -2.80000000e-04 -1.65360702e-12 7.44460626e-02 6.22213755e-02 8.76601838e-02 5.44038172e-02 3.07118302e-03 7.18197378e-01 3.08688166e+03 -2.80100000e-04 -1.65360702e-12 7.44380515e-02 6.22055751e-02 8.76702401e-02 5.44193056e-02 3.06944990e-03 7.18197378e-01 3.08688166e+03 -2.80200000e-04 -1.65360702e-12 7.44300564e-02 6.21898092e-02 8.76802744e-02 5.44347617e-02 3.06772039e-03 7.18197378e-01 3.08688166e+03 -2.80300000e-04 -1.65360702e-12 7.44220775e-02 6.21740778e-02 8.76902868e-02 5.44501856e-02 3.06599448e-03 7.18197378e-01 3.08688166e+03 -2.80400000e-04 -1.65360702e-12 7.44141147e-02 6.21583808e-02 8.77002772e-02 5.44655772e-02 3.06427218e-03 7.18197378e-01 3.08688166e+03 -2.80500000e-04 -1.65360702e-12 7.44061679e-02 6.21427182e-02 8.77102458e-02 5.44809367e-02 3.06255348e-03 7.18197378e-01 3.08758383e+03 -2.80600000e-04 -1.65360702e-12 7.43982371e-02 6.21270899e-02 8.77201926e-02 5.44962641e-02 3.06083837e-03 7.18197378e-01 3.08758383e+03 -2.80700000e-04 -1.65360702e-12 7.43903224e-02 6.21114958e-02 8.77301176e-02 5.45115595e-02 3.05912684e-03 7.18197378e-01 3.08758383e+03 -2.80800000e-04 -1.65360702e-12 7.43824237e-02 6.20959358e-02 8.77400209e-02 5.45268229e-02 3.05741890e-03 7.18197378e-01 3.08758383e+03 -2.80900000e-04 -1.65360702e-12 7.43745409e-02 6.20804100e-02 8.77499024e-02 5.45420543e-02 3.05571453e-03 7.18197378e-01 3.08758383e+03 -2.81000000e-04 -1.65360702e-12 7.43666741e-02 6.20649182e-02 8.77597623e-02 5.45572538e-02 3.05401372e-03 7.18197378e-01 3.08758383e+03 -2.81100000e-04 -1.65360702e-12 7.43588232e-02 6.20494604e-02 8.77696006e-02 5.45724215e-02 3.05231648e-03 7.18197378e-01 3.08758383e+03 -2.81200000e-04 -1.65360702e-12 7.43509882e-02 6.20340365e-02 8.77794172e-02 5.45875574e-02 3.05062280e-03 7.18197378e-01 3.08827557e+03 -2.81300000e-04 -1.65360702e-12 7.43431691e-02 6.20186464e-02 8.77892124e-02 5.46026616e-02 3.04893267e-03 7.18197378e-01 3.08827557e+03 -2.81400000e-04 -1.65360702e-12 7.43353658e-02 6.20032901e-02 8.77989860e-02 5.46177341e-02 3.04724608e-03 7.18197378e-01 3.08827557e+03 -2.81500000e-04 -1.65360702e-12 7.43275784e-02 6.19879676e-02 8.78087381e-02 5.46327750e-02 3.04556303e-03 7.18197378e-01 3.08827557e+03 -2.81600000e-04 -1.65360702e-12 7.43198067e-02 6.19726787e-02 8.78184689e-02 5.46477843e-02 3.04388351e-03 7.18197378e-01 3.08827557e+03 -2.81700000e-04 -1.65360702e-12 7.43120509e-02 6.19574235e-02 8.78281782e-02 5.46627621e-02 3.04220752e-03 7.18197378e-01 3.08827557e+03 -2.81800000e-04 -1.65360702e-12 7.43043107e-02 6.19422018e-02 8.78378662e-02 5.46777084e-02 3.04053506e-03 7.18197378e-01 3.08827557e+03 -2.81900000e-04 -1.65360702e-12 7.42965864e-02 6.19270136e-02 8.78475329e-02 5.46926233e-02 3.03886611e-03 7.18197378e-01 3.08827557e+03 -2.82000000e-04 -1.65360702e-12 7.42888777e-02 6.19118587e-02 8.78571783e-02 5.47075068e-02 3.03720067e-03 7.18197378e-01 3.08895697e+03 -2.82100000e-04 -1.65360702e-12 7.42811847e-02 6.18967373e-02 8.78668024e-02 5.47223590e-02 3.03553873e-03 7.18197378e-01 3.08895697e+03 -2.82200000e-04 -1.65360702e-12 7.42735074e-02 6.18816492e-02 8.78764054e-02 5.47371799e-02 3.03388030e-03 7.18197378e-01 3.08895697e+03 -2.82300000e-04 -1.65360702e-12 7.42658457e-02 6.18665943e-02 8.78859872e-02 5.47519696e-02 3.03222535e-03 7.18197378e-01 3.08895697e+03 -2.82400000e-04 -1.65360702e-12 7.42581997e-02 6.18515725e-02 8.78955479e-02 5.47667281e-02 3.03057390e-03 7.18197378e-01 3.08895697e+03 -2.82500000e-04 -1.65360702e-12 7.42505692e-02 6.18365839e-02 8.79050875e-02 5.47814556e-02 3.02892592e-03 7.18197378e-01 3.08895697e+03 -2.82600000e-04 -1.65360702e-12 7.42429543e-02 6.18216284e-02 8.79146061e-02 5.47961520e-02 3.02728142e-03 7.18197378e-01 3.08895697e+03 -2.82700000e-04 -1.65360702e-12 7.42353549e-02 6.18067058e-02 8.79241037e-02 5.48108173e-02 3.02564039e-03 7.18197378e-01 3.08962816e+03 -2.82800000e-04 -1.65360702e-12 7.42277711e-02 6.17918162e-02 8.79335804e-02 5.48254517e-02 3.02400282e-03 7.18197378e-01 3.08962816e+03 -2.82900000e-04 -1.65360702e-12 7.42202028e-02 6.17769594e-02 8.79430361e-02 5.48400552e-02 3.02236872e-03 7.18197378e-01 3.08962816e+03 -2.83000000e-04 -1.65360702e-12 7.42126499e-02 6.17621354e-02 8.79524709e-02 5.48546279e-02 3.02073806e-03 7.18197378e-01 3.08962816e+03 -2.83100000e-04 -1.65360702e-12 7.42051125e-02 6.17473442e-02 8.79618849e-02 5.48691697e-02 3.01911085e-03 7.18197378e-01 3.08962816e+03 -2.83200000e-04 -1.65360702e-12 7.41975905e-02 6.17325857e-02 8.79712781e-02 5.48836808e-02 3.01748708e-03 7.18197378e-01 3.08962816e+03 -2.83300000e-04 -1.65360702e-12 7.41900839e-02 6.17178598e-02 8.79806505e-02 5.48981612e-02 3.01586675e-03 7.18197378e-01 3.08962816e+03 -2.83400000e-04 -1.65360702e-12 7.41825927e-02 6.17031665e-02 8.79900022e-02 5.49126110e-02 3.01424985e-03 7.18197378e-01 3.09028926e+03 -2.83500000e-04 -1.65360702e-12 7.41751168e-02 6.16885057e-02 8.79993332e-02 5.49270301e-02 3.01263637e-03 7.18197378e-01 3.09028926e+03 -2.83600000e-04 -1.65360702e-12 7.41676563e-02 6.16738773e-02 8.80086435e-02 5.49414187e-02 3.01102631e-03 7.18197378e-01 3.09028926e+03 -2.83700000e-04 -1.65360702e-12 7.41602111e-02 6.16592813e-02 8.80179333e-02 5.49557768e-02 3.00941966e-03 7.18197378e-01 3.09028926e+03 -2.83800000e-04 -1.65360702e-12 7.41527812e-02 6.16447176e-02 8.80272024e-02 5.49701045e-02 3.00781642e-03 7.18197378e-01 3.09028926e+03 -2.83900000e-04 -1.65360702e-12 7.41453665e-02 6.16301862e-02 8.80364511e-02 5.49844018e-02 3.00621658e-03 7.18197378e-01 3.09028926e+03 -2.84000000e-04 -1.65360702e-12 7.41379671e-02 6.16156870e-02 8.80456792e-02 5.49986687e-02 3.00462013e-03 7.18197378e-01 3.09028926e+03 -2.84100000e-04 -1.65360702e-12 7.41305829e-02 6.16012200e-02 8.80548869e-02 5.50129053e-02 3.00302708e-03 7.18197378e-01 3.09028926e+03 -2.84200000e-04 -1.65360702e-12 7.41232139e-02 6.15867850e-02 8.80640741e-02 5.50271117e-02 3.00143740e-03 7.18197378e-01 3.09073722e+03 -2.84300000e-04 -1.65360702e-12 7.41158601e-02 6.15723821e-02 8.80732410e-02 5.50412879e-02 2.99985111e-03 7.18197378e-01 3.09073722e+03 -2.84400000e-04 -1.65360702e-12 7.41085214e-02 6.15580111e-02 8.80823875e-02 5.50554340e-02 2.99826819e-03 7.18197378e-01 3.09073722e+03 -2.84500000e-04 -1.65360702e-12 7.41011978e-02 6.15436720e-02 8.80915138e-02 5.50695500e-02 2.99668863e-03 7.18197378e-01 3.09073722e+03 -2.84600000e-04 -1.65360702e-12 7.40938893e-02 6.15293647e-02 8.81006197e-02 5.50836360e-02 2.99511244e-03 7.18197378e-01 3.09073722e+03 -2.84700000e-04 -1.65360702e-12 7.40865959e-02 6.15150893e-02 8.81097055e-02 5.50976919e-02 2.99353960e-03 7.18197378e-01 3.09104380e+03 -2.84800000e-04 -1.65360702e-12 7.40793175e-02 6.15008455e-02 8.81187710e-02 5.51117180e-02 2.99197010e-03 7.18197378e-01 3.09104380e+03 -2.84900000e-04 -1.65360702e-12 7.40720542e-02 6.14866335e-02 8.81278164e-02 5.51257141e-02 2.99040396e-03 7.18197378e-01 3.09104380e+03 -2.85000000e-04 -1.65360702e-12 7.40648059e-02 6.14724530e-02 8.81368417e-02 5.51396805e-02 2.98884115e-03 7.18197378e-01 3.09134816e+03 -2.85100000e-04 -1.65360702e-12 7.40575725e-02 6.14583041e-02 8.81458469e-02 5.51536170e-02 2.98728167e-03 7.18197378e-01 3.09134816e+03 -2.85200000e-04 -1.65360702e-12 7.40503541e-02 6.14441866e-02 8.81548320e-02 5.51675238e-02 2.98572552e-03 7.18197378e-01 3.09134816e+03 -2.85300000e-04 -1.65360702e-12 7.40431507e-02 6.14301006e-02 8.81637972e-02 5.51814010e-02 2.98417269e-03 7.18197378e-01 3.09134816e+03 -2.85400000e-04 -1.65360702e-12 7.40359622e-02 6.14160460e-02 8.81727424e-02 5.51952485e-02 2.98262318e-03 7.18197378e-01 3.09165032e+03 -2.85500000e-04 -1.65360702e-12 7.40287885e-02 6.14020226e-02 8.81816677e-02 5.52090664e-02 2.98107698e-03 7.18197378e-01 3.09165032e+03 -2.85600000e-04 -1.65360702e-12 7.40216297e-02 6.13880305e-02 8.81905730e-02 5.52228548e-02 2.97953408e-03 7.18197378e-01 3.09165032e+03 -2.85700000e-04 -1.65360702e-12 7.40144858e-02 6.13740696e-02 8.81994586e-02 5.52366137e-02 2.97799448e-03 7.18197378e-01 3.09195029e+03 -2.85800000e-04 -1.65360702e-12 7.40073566e-02 6.13601398e-02 8.82083243e-02 5.52503432e-02 2.97645817e-03 7.18197378e-01 3.09195029e+03 -2.85900000e-04 -1.65360702e-12 7.40002423e-02 6.13462411e-02 8.82171703e-02 5.52640434e-02 2.97492515e-03 7.18197378e-01 3.09195029e+03 -2.86000000e-04 -1.65360702e-12 7.39931427e-02 6.13323734e-02 8.82259965e-02 5.52777142e-02 2.97339541e-03 7.18197378e-01 3.09195029e+03 -2.86100000e-04 -1.65360702e-12 7.39860579e-02 6.13185367e-02 8.82348030e-02 5.52913557e-02 2.97186894e-03 7.18197378e-01 3.09224809e+03 -2.86200000e-04 -1.65360702e-12 7.39789878e-02 6.13047308e-02 8.82435898e-02 5.53049680e-02 2.97034575e-03 7.18197378e-01 3.09224809e+03 -2.86300000e-04 -1.65360702e-12 7.39719324e-02 6.12909558e-02 8.82523571e-02 5.53185511e-02 2.96882582e-03 7.18197378e-01 3.09224809e+03 -2.86400000e-04 -1.65360702e-12 7.39648916e-02 6.12772115e-02 8.82611047e-02 5.53321051e-02 2.96730915e-03 7.18197378e-01 3.09224809e+03 -2.86500000e-04 -1.65360702e-12 7.39578655e-02 6.12634980e-02 8.82698328e-02 5.53456301e-02 2.96579573e-03 7.18197378e-01 3.09285960e+03 -2.86600000e-04 -1.65360702e-12 7.39508541e-02 6.12498151e-02 8.82785414e-02 5.53591260e-02 2.96428556e-03 7.18197378e-01 3.09285960e+03 -2.86700000e-04 -1.65360702e-12 7.39438573e-02 6.12361628e-02 8.82872305e-02 5.53725929e-02 2.96277863e-03 7.18197378e-01 3.09285960e+03 -2.86800000e-04 -1.65360702e-12 7.39368750e-02 6.12225411e-02 8.82959002e-02 5.53860310e-02 2.96127494e-03 7.18197378e-01 3.09285960e+03 -2.86900000e-04 -1.65360702e-12 7.39299073e-02 6.12089499e-02 8.83045504e-02 5.53994401e-02 2.95977447e-03 7.18197378e-01 3.09285960e+03 -2.87000000e-04 -1.65360702e-12 7.39229541e-02 6.11953890e-02 8.83131813e-02 5.54128204e-02 2.95827724e-03 7.18197378e-01 3.09285960e+03 -2.87100000e-04 -1.65360702e-12 7.39160155e-02 6.11818586e-02 8.83217929e-02 5.54261720e-02 2.95678322e-03 7.18197378e-01 3.09285960e+03 -2.87200000e-04 -1.65360702e-12 7.39090913e-02 6.11683584e-02 8.83303852e-02 5.54394948e-02 2.95529242e-03 7.18197378e-01 3.09346188e+03 -2.87300000e-04 -1.65360702e-12 7.39021816e-02 6.11548885e-02 8.83389582e-02 5.54527890e-02 2.95380482e-03 7.18197378e-01 3.09346188e+03 -2.87400000e-04 -1.65360702e-12 7.38952864e-02 6.11414488e-02 8.83475120e-02 5.54660546e-02 2.95232043e-03 7.18197378e-01 3.09346188e+03 -2.87500000e-04 -1.65360702e-12 7.38884055e-02 6.11280392e-02 8.83560467e-02 5.54792915e-02 2.95083923e-03 7.18197378e-01 3.09346188e+03 -2.87600000e-04 -1.65360702e-12 7.38815391e-02 6.11146597e-02 8.83645622e-02 5.54925000e-02 2.94936123e-03 7.18197378e-01 3.09346188e+03 -2.87700000e-04 -1.65360702e-12 7.38746870e-02 6.11013102e-02 8.83730586e-02 5.55056800e-02 2.94788641e-03 7.18197378e-01 3.09346188e+03 -2.87800000e-04 -1.65360702e-12 7.38678493e-02 6.10879906e-02 8.83815359e-02 5.55188315e-02 2.94641477e-03 7.18197378e-01 3.09346188e+03 -2.87900000e-04 -1.65360702e-12 7.38610259e-02 6.10747010e-02 8.83899942e-02 5.55319547e-02 2.94494631e-03 7.18197378e-01 3.09405504e+03 -2.88000000e-04 -1.65360702e-12 7.38542168e-02 6.10614412e-02 8.83984335e-02 5.55450496e-02 2.94348101e-03 7.18197378e-01 3.09405504e+03 -2.88100000e-04 -1.65360702e-12 7.38474220e-02 6.10482112e-02 8.84068539e-02 5.55581162e-02 2.94201888e-03 7.18197378e-01 3.09405504e+03 -2.88200000e-04 -1.65360702e-12 7.38406415e-02 6.10350109e-02 8.84152553e-02 5.55711546e-02 2.94055991e-03 7.18197378e-01 3.09405504e+03 -2.88300000e-04 -1.65360702e-12 7.38338751e-02 6.10218403e-02 8.84236378e-02 5.55841648e-02 2.93910409e-03 7.18197378e-01 3.09405504e+03 -2.88400000e-04 -1.65360702e-12 7.38271230e-02 6.10086993e-02 8.84320015e-02 5.55971469e-02 2.93765141e-03 7.18197378e-01 3.09405504e+03 -2.88500000e-04 -1.65360702e-12 7.38203851e-02 6.09955879e-02 8.84403464e-02 5.56101009e-02 2.93620188e-03 7.18197378e-01 3.09405504e+03 -2.88600000e-04 -1.65360702e-12 7.38136614e-02 6.09825059e-02 8.84486725e-02 5.56230269e-02 2.93475549e-03 7.18197378e-01 3.09463918e+03 -2.88700000e-04 -1.65360702e-12 7.38069517e-02 6.09694534e-02 8.84569799e-02 5.56359249e-02 2.93331222e-03 7.18197378e-01 3.09463918e+03 -2.88800000e-04 -1.65360702e-12 7.38002562e-02 6.09564303e-02 8.84652686e-02 5.56487950e-02 2.93187208e-03 7.18197378e-01 3.09463918e+03 -2.88900000e-04 -1.65360702e-12 7.37935748e-02 6.09434365e-02 8.84735386e-02 5.56616372e-02 2.93043505e-03 7.18197378e-01 3.09463918e+03 -2.89000000e-04 -1.65360702e-12 7.37869075e-02 6.09304720e-02 8.84817899e-02 5.56744516e-02 2.92900115e-03 7.18197378e-01 3.09463918e+03 -2.89100000e-04 -1.65360702e-12 7.37802542e-02 6.09175367e-02 8.84900227e-02 5.56872382e-02 2.92757034e-03 7.18197378e-01 3.09463918e+03 -2.89200000e-04 -1.65360702e-12 7.37736149e-02 6.09046305e-02 8.84982369e-02 5.56999971e-02 2.92614265e-03 7.18197378e-01 3.09463918e+03 -2.89300000e-04 -1.65360702e-12 7.37669897e-02 6.08917535e-02 8.85064327e-02 5.57127283e-02 2.92471805e-03 7.18197378e-01 3.09463918e+03 -2.89400000e-04 -1.65360702e-12 7.37603784e-02 6.08789055e-02 8.85146099e-02 5.57254319e-02 2.92329654e-03 7.18197378e-01 3.09521442e+03 -2.89500000e-04 -1.65360702e-12 7.37537811e-02 6.08660865e-02 8.85227686e-02 5.57381079e-02 2.92187811e-03 7.18197378e-01 3.09521442e+03 -2.89600000e-04 -1.65360702e-12 7.37471977e-02 6.08532964e-02 8.85309090e-02 5.57507563e-02 2.92046277e-03 7.18197378e-01 3.09521442e+03 -2.89700000e-04 -1.65360702e-12 7.37406282e-02 6.08405352e-02 8.85390310e-02 5.57633773e-02 2.91905050e-03 7.18197378e-01 3.09521442e+03 -2.89800000e-04 -1.65360702e-12 7.37340726e-02 6.08278028e-02 8.85471346e-02 5.57759709e-02 2.91764130e-03 7.18197378e-01 3.09521442e+03 -2.89900000e-04 -1.65360702e-12 7.37275308e-02 6.08150991e-02 8.85552200e-02 5.57885371e-02 2.91623517e-03 7.18197378e-01 3.09521442e+03 -2.90000000e-04 -1.65360702e-12 7.37210029e-02 6.08024242e-02 8.85632870e-02 5.58010759e-02 2.91483209e-03 7.18197378e-01 3.09521442e+03 -2.90100000e-04 -1.65360702e-12 7.37144888e-02 6.07897779e-02 8.85713359e-02 5.58135875e-02 2.91343207e-03 7.18197378e-01 3.09578085e+03 -2.90200000e-04 -1.65360702e-12 7.37079885e-02 6.07771602e-02 8.85793665e-02 5.58260718e-02 2.91203509e-03 7.18197378e-01 3.09578085e+03 -2.90300000e-04 -1.65360702e-12 7.37015020e-02 6.07645711e-02 8.85873790e-02 5.58385289e-02 2.91064116e-03 7.18197378e-01 3.09578085e+03 -2.90400000e-04 -1.65360702e-12 7.36950293e-02 6.07520104e-02 8.85953733e-02 5.58509589e-02 2.90925026e-03 7.18197378e-01 3.09578085e+03 -2.90500000e-04 -1.65360702e-12 7.36885702e-02 6.07394781e-02 8.86033496e-02 5.58633618e-02 2.90786240e-03 7.18197378e-01 3.09578085e+03 -2.90600000e-04 -1.65360702e-12 7.36821249e-02 6.07269742e-02 8.86113078e-02 5.58757377e-02 2.90647756e-03 7.18197378e-01 3.09578085e+03 -2.90700000e-04 -1.65360702e-12 7.36756932e-02 6.07144987e-02 8.86192479e-02 5.58880866e-02 2.90509574e-03 7.18197378e-01 3.09578085e+03 -2.90800000e-04 -1.65360702e-12 7.36692752e-02 6.07020513e-02 8.86271701e-02 5.59004085e-02 2.90371694e-03 7.18197378e-01 3.09667817e+03 -2.90900000e-04 -1.65360702e-12 7.36628708e-02 6.06896322e-02 8.86350744e-02 5.59127036e-02 2.90234114e-03 7.18197378e-01 3.09667817e+03 -2.91000000e-04 -1.65360702e-12 7.36564800e-02 6.06772413e-02 8.86429607e-02 5.59249718e-02 2.90096835e-03 7.18197378e-01 3.09667817e+03 -2.91100000e-04 -1.65360702e-12 7.36501029e-02 6.06648784e-02 8.86508292e-02 5.59372132e-02 2.89959856e-03 7.18197378e-01 3.09667817e+03 -2.91200000e-04 -1.65360702e-12 7.36437392e-02 6.06525435e-02 8.86586798e-02 5.59494278e-02 2.89823176e-03 7.18197378e-01 3.09667817e+03 -2.91300000e-04 -1.65360702e-12 7.36373892e-02 6.06402367e-02 8.86665126e-02 5.59616158e-02 2.89686795e-03 7.18197378e-01 3.09667817e+03 -2.91400000e-04 -1.65360702e-12 7.36310526e-02 6.06279577e-02 8.86743277e-02 5.59737771e-02 2.89550712e-03 7.18197378e-01 3.09667817e+03 -2.91500000e-04 -1.65360702e-12 7.36247295e-02 6.06157066e-02 8.86821250e-02 5.59859117e-02 2.89414927e-03 7.18197378e-01 3.09667817e+03 -2.91600000e-04 -1.65360702e-12 7.36184200e-02 6.06034834e-02 8.86899046e-02 5.59980199e-02 2.89279439e-03 7.18197378e-01 3.09667817e+03 -2.91700000e-04 -1.65360702e-12 7.36121238e-02 6.05912879e-02 8.86976665e-02 5.60101015e-02 2.89144247e-03 7.18197378e-01 3.09667817e+03 -2.91800000e-04 -1.65360702e-12 7.36058411e-02 6.05791201e-02 8.87054108e-02 5.60221567e-02 2.89009352e-03 7.18197378e-01 3.09667817e+03 -2.91900000e-04 -1.65360702e-12 7.35995718e-02 6.05669799e-02 8.87131375e-02 5.60341854e-02 2.88874752e-03 7.18197378e-01 3.09667817e+03 -2.92000000e-04 -1.65360702e-12 7.35933159e-02 6.05548673e-02 8.87208466e-02 5.60461878e-02 2.88740447e-03 7.18197378e-01 3.09755322e+03 -2.92100000e-04 -1.65360702e-12 7.35870733e-02 6.05427823e-02 8.87285382e-02 5.60581639e-02 2.88606437e-03 7.18197378e-01 3.09755322e+03 -2.92200000e-04 -1.65360702e-12 7.35808441e-02 6.05307248e-02 8.87362124e-02 5.60701137e-02 2.88472720e-03 7.18197378e-01 3.09755322e+03 -2.92300000e-04 -1.65360702e-12 7.35746281e-02 6.05186947e-02 8.87438690e-02 5.60820373e-02 2.88339297e-03 7.18197378e-01 3.09755322e+03 -2.92400000e-04 -1.65360702e-12 7.35684255e-02 6.05066919e-02 8.87515083e-02 5.60939348e-02 2.88206167e-03 7.18197378e-01 3.09755322e+03 -2.92500000e-04 -1.65360702e-12 7.35622361e-02 6.04947165e-02 8.87591301e-02 5.61058061e-02 2.88073329e-03 7.18197378e-01 3.09755322e+03 -2.92600000e-04 -1.65360702e-12 7.35560600e-02 6.04827684e-02 8.87667346e-02 5.61176513e-02 2.87940783e-03 7.18197378e-01 3.09755322e+03 -2.92700000e-04 -1.65360702e-12 7.35498971e-02 6.04708474e-02 8.87743218e-02 5.61294705e-02 2.87808528e-03 7.18197378e-01 3.09755322e+03 -2.92800000e-04 -1.65360702e-12 7.35437474e-02 6.04589536e-02 8.87818917e-02 5.61412637e-02 2.87676564e-03 7.18197378e-01 3.09755322e+03 -2.92900000e-04 -1.65360702e-12 7.35376109e-02 6.04470870e-02 8.87894443e-02 5.61530310e-02 2.87544890e-03 7.18197378e-01 3.09755322e+03 -2.93000000e-04 -1.65360702e-12 7.35314875e-02 6.04352473e-02 8.87969798e-02 5.61647725e-02 2.87413505e-03 7.18197378e-01 3.09755322e+03 -2.93100000e-04 -1.65360702e-12 7.35253773e-02 6.04234347e-02 8.88044980e-02 5.61764880e-02 2.87282410e-03 7.18197378e-01 3.09755322e+03 -2.93200000e-04 -1.65360702e-12 7.35192802e-02 6.04116490e-02 8.88119991e-02 5.61881778e-02 2.87151603e-03 7.18197378e-01 3.09840643e+03 -2.93300000e-04 -1.65360702e-12 7.35131961e-02 6.03998902e-02 8.88194831e-02 5.61998419e-02 2.87021084e-03 7.18197378e-01 3.09840643e+03 -2.93400000e-04 -1.65360702e-12 7.35071252e-02 6.03881582e-02 8.88269500e-02 5.62114802e-02 2.86890853e-03 7.18197378e-01 3.09840643e+03 -2.93500000e-04 -1.65360702e-12 7.35010672e-02 6.03764530e-02 8.88343999e-02 5.62230929e-02 2.86760909e-03 7.18197378e-01 3.09840643e+03 -2.93600000e-04 -1.65360702e-12 7.34950223e-02 6.03647746e-02 8.88418327e-02 5.62346800e-02 2.86631251e-03 7.18197378e-01 3.09840643e+03 -2.93700000e-04 -1.65360702e-12 7.34889904e-02 6.03531228e-02 8.88492486e-02 5.62462416e-02 2.86501879e-03 7.18197378e-01 3.09840643e+03 -2.93800000e-04 -1.65360702e-12 7.34829714e-02 6.03414976e-02 8.88566476e-02 5.62577776e-02 2.86372793e-03 7.18197378e-01 3.09840643e+03 -2.93900000e-04 -1.65360702e-12 7.34769654e-02 6.03298990e-02 8.88640296e-02 5.62692882e-02 2.86243991e-03 7.18197378e-01 3.09840643e+03 -2.94000000e-04 -1.65360702e-12 7.34709724e-02 6.03183269e-02 8.88713948e-02 5.62807734e-02 2.86115474e-03 7.18197378e-01 3.09840643e+03 -2.94100000e-04 -1.65360702e-12 7.34649922e-02 6.03067812e-02 8.88787431e-02 5.62922332e-02 2.85987240e-03 7.18197378e-01 3.09840643e+03 -2.94200000e-04 -1.65360702e-12 7.34590249e-02 6.02952620e-02 8.88860746e-02 5.63036677e-02 2.85859290e-03 7.18197378e-01 3.09840643e+03 -2.94300000e-04 -1.65360702e-12 7.34530705e-02 6.02837691e-02 8.88933893e-02 5.63150770e-02 2.85731622e-03 7.18197378e-01 3.09840643e+03 -2.94400000e-04 -1.65360702e-12 7.34471289e-02 6.02723025e-02 8.89006874e-02 5.63264610e-02 2.85604237e-03 7.18197378e-01 3.09923824e+03 -2.94500000e-04 -1.65360702e-12 7.34412002e-02 6.02608621e-02 8.89079687e-02 5.63378199e-02 2.85477133e-03 7.18197378e-01 3.09923824e+03 -2.94600000e-04 -1.65360702e-12 7.34352842e-02 6.02494480e-02 8.89152333e-02 5.63491536e-02 2.85350311e-03 7.18197378e-01 3.09923824e+03 -2.94700000e-04 -1.65360702e-12 7.34293810e-02 6.02380600e-02 8.89224813e-02 5.63604622e-02 2.85223769e-03 7.18197378e-01 3.09923824e+03 -2.94800000e-04 -1.65360702e-12 7.34234905e-02 6.02266981e-02 8.89297127e-02 5.63717458e-02 2.85097508e-03 7.18197378e-01 3.09923824e+03 -2.94900000e-04 -1.65360702e-12 7.34176128e-02 6.02153622e-02 8.89369275e-02 5.63830044e-02 2.84971525e-03 7.18197378e-01 3.09923824e+03 -2.95000000e-04 -1.65360702e-12 7.34117478e-02 6.02040523e-02 8.89441258e-02 5.63942381e-02 2.84845822e-03 7.18197378e-01 3.09923824e+03 -2.95100000e-04 -1.65360702e-12 7.34058954e-02 6.01927683e-02 8.89513076e-02 5.64054469e-02 2.84720398e-03 7.18197378e-01 3.09923824e+03 -2.95200000e-04 -1.65360702e-12 7.34000558e-02 6.01815102e-02 8.89584729e-02 5.64166308e-02 2.84595252e-03 7.18197378e-01 3.09923824e+03 -2.95300000e-04 -1.65360702e-12 7.33942287e-02 6.01702779e-02 8.89656218e-02 5.64277900e-02 2.84470383e-03 7.18197378e-01 3.09923824e+03 -2.95400000e-04 -1.65360702e-12 7.33884143e-02 6.01590714e-02 8.89727542e-02 5.64389244e-02 2.84345791e-03 7.18197378e-01 3.09923824e+03 -2.95500000e-04 -1.65360702e-12 7.33826124e-02 6.01478906e-02 8.89798703e-02 5.64500340e-02 2.84221475e-03 7.18197378e-01 3.10004910e+03 -2.95600000e-04 -1.65360702e-12 7.33768232e-02 6.01367355e-02 8.89869701e-02 5.64611190e-02 2.84097436e-03 7.18197378e-01 3.10004910e+03 -2.95700000e-04 -1.65360702e-12 7.33710465e-02 6.01256060e-02 8.89940536e-02 5.64721794e-02 2.83973672e-03 7.18197378e-01 3.10004910e+03 -2.95800000e-04 -1.65360702e-12 7.33652823e-02 6.01145020e-02 8.90011208e-02 5.64832153e-02 2.83850183e-03 7.18197378e-01 3.10004910e+03 -2.95900000e-04 -1.65360702e-12 7.33595306e-02 6.01034236e-02 8.90081717e-02 5.64942266e-02 2.83726968e-03 7.18197378e-01 3.10004910e+03 -2.96000000e-04 -1.65360702e-12 7.33537914e-02 6.00923706e-02 8.90152065e-02 5.65052134e-02 2.83604027e-03 7.18197378e-01 3.10004910e+03 -2.96100000e-04 -1.65360702e-12 7.33480646e-02 6.00813430e-02 8.90222251e-02 5.65161758e-02 2.83481360e-03 7.18197378e-01 3.10004910e+03 -2.96200000e-04 -1.65360702e-12 7.33423503e-02 6.00703408e-02 8.90292275e-02 5.65271138e-02 2.83358965e-03 7.18197378e-01 3.10004910e+03 -2.96300000e-04 -1.65360702e-12 7.33366484e-02 6.00593639e-02 8.90362139e-02 5.65380275e-02 2.83236843e-03 7.18197378e-01 3.10004910e+03 -2.96400000e-04 -1.65360702e-12 7.33309589e-02 6.00484123e-02 8.90431841e-02 5.65489169e-02 2.83114992e-03 7.18197378e-01 3.10004910e+03 -2.96500000e-04 -1.65360702e-12 7.33252818e-02 6.00374858e-02 8.90501384e-02 5.65597821e-02 2.82993413e-03 7.18197378e-01 3.10004910e+03 -2.96600000e-04 -1.65360702e-12 7.33196170e-02 6.00265845e-02 8.90570766e-02 5.65706230e-02 2.82872105e-03 7.18197378e-01 3.10004910e+03 -2.96700000e-04 -1.65360702e-12 7.33139645e-02 6.00157083e-02 8.90639989e-02 5.65814398e-02 2.82751066e-03 7.18197378e-01 3.10083943e+03 -2.96800000e-04 -1.65360702e-12 7.33083244e-02 6.00048571e-02 8.90709052e-02 5.65922325e-02 2.82630298e-03 7.18197378e-01 3.10083943e+03 -2.96900000e-04 -1.65360702e-12 7.33026965e-02 5.99940310e-02 8.90777956e-02 5.66030011e-02 2.82509799e-03 7.18197378e-01 3.10083943e+03 -2.97000000e-04 -1.65360702e-12 7.32970809e-02 5.99832297e-02 8.90846701e-02 5.66137457e-02 2.82389568e-03 7.18197378e-01 3.10083943e+03 -2.97100000e-04 -1.65360702e-12 7.32914775e-02 5.99724534e-02 8.90915288e-02 5.66244664e-02 2.82269606e-03 7.18197378e-01 3.10083943e+03 -2.97200000e-04 -1.65360702e-12 7.32858864e-02 5.99617019e-02 8.90983717e-02 5.66351631e-02 2.82149912e-03 7.18197378e-01 3.10083943e+03 -2.97300000e-04 -1.65360702e-12 7.32803074e-02 5.99509752e-02 8.91051987e-02 5.66458359e-02 2.82030485e-03 7.18197378e-01 3.10083943e+03 -2.97400000e-04 -1.65360702e-12 7.32747406e-02 5.99402733e-02 8.91120101e-02 5.66564849e-02 2.81911324e-03 7.18197378e-01 3.10083943e+03 -2.97500000e-04 -1.65360702e-12 7.32691860e-02 5.99295960e-02 8.91188057e-02 5.66671101e-02 2.81792430e-03 7.18197378e-01 3.10083943e+03 -2.97600000e-04 -1.65360702e-12 7.32636435e-02 5.99189434e-02 8.91255857e-02 5.66777116e-02 2.81673801e-03 7.18197378e-01 3.10083943e+03 -2.97700000e-04 -1.65360702e-12 7.32581131e-02 5.99083153e-02 8.91323500e-02 5.66882894e-02 2.81555438e-03 7.18197378e-01 3.10083943e+03 -2.97800000e-04 -1.65360702e-12 7.32525948e-02 5.98977118e-02 8.91390987e-02 5.66988435e-02 2.81437339e-03 7.18197378e-01 3.10083943e+03 -2.97900000e-04 -1.65360702e-12 7.32470885e-02 5.98871328e-02 8.91458318e-02 5.67093740e-02 2.81319504e-03 7.18197378e-01 3.10160966e+03 -2.98000000e-04 -1.65360702e-12 7.32415943e-02 5.98765782e-02 8.91525493e-02 5.67198810e-02 2.81201933e-03 7.18197378e-01 3.10160966e+03 -2.98100000e-04 -1.65360702e-12 7.32361121e-02 5.98660480e-02 8.91592513e-02 5.67303644e-02 2.81084625e-03 7.18197378e-01 3.10160966e+03 -2.98200000e-04 -1.65360702e-12 7.32306419e-02 5.98555422e-02 8.91659379e-02 5.67408243e-02 2.80967580e-03 7.18197378e-01 3.10160966e+03 -2.98300000e-04 -1.65360702e-12 7.32251837e-02 5.98450606e-02 8.91726090e-02 5.67512609e-02 2.80850797e-03 7.18197378e-01 3.10160966e+03 -2.98400000e-04 -1.65360702e-12 7.32197375e-02 5.98346033e-02 8.91792646e-02 5.67616740e-02 2.80734275e-03 7.18197378e-01 3.10160966e+03 -2.98500000e-04 -1.65360702e-12 7.32143031e-02 5.98241701e-02 8.91859049e-02 5.67720638e-02 2.80618015e-03 7.18197378e-01 3.10160966e+03 -2.98600000e-04 -1.65360702e-12 7.32088807e-02 5.98137611e-02 8.91925298e-02 5.67824304e-02 2.80502015e-03 7.18197378e-01 3.10160966e+03 -2.98700000e-04 -1.65360702e-12 7.32034702e-02 5.98033762e-02 8.91991394e-02 5.67927736e-02 2.80386276e-03 7.18197378e-01 3.10160966e+03 -2.98800000e-04 -1.65360702e-12 7.31980715e-02 5.97930153e-02 8.92057336e-02 5.68030937e-02 2.80270796e-03 7.18197378e-01 3.10160966e+03 -2.98900000e-04 -1.65360702e-12 7.31926847e-02 5.97826784e-02 8.92123126e-02 5.68133906e-02 2.80155575e-03 7.18197378e-01 3.10160966e+03 -2.99000000e-04 -1.65360702e-12 7.31873097e-02 5.97723654e-02 8.92188764e-02 5.68236644e-02 2.80040613e-03 7.18197378e-01 3.10160966e+03 -2.99100000e-04 -1.65360702e-12 7.31819466e-02 5.97620763e-02 8.92254250e-02 5.68339152e-02 2.79925909e-03 7.18197378e-01 3.10236021e+03 -2.99200000e-04 -1.65360702e-12 7.31765952e-02 5.97518111e-02 8.92319584e-02 5.68441429e-02 2.79811463e-03 7.18197378e-01 3.10236021e+03 -2.99300000e-04 -1.65360702e-12 7.31712555e-02 5.97415696e-02 8.92384766e-02 5.68543476e-02 2.79697273e-03 7.18197378e-01 3.10236021e+03 -2.99400000e-04 -1.65360702e-12 7.31659276e-02 5.97313519e-02 8.92449798e-02 5.68645294e-02 2.79583341e-03 7.18197378e-01 3.10236021e+03 -2.99500000e-04 -1.65360702e-12 7.31606114e-02 5.97211579e-02 8.92514679e-02 5.68746883e-02 2.79469664e-03 7.18197378e-01 3.10236021e+03 -2.99600000e-04 -1.65360702e-12 7.31553069e-02 5.97109875e-02 8.92579409e-02 5.68848244e-02 2.79356244e-03 7.18197378e-01 3.10236021e+03 -2.99700000e-04 -1.65360702e-12 7.31500141e-02 5.97008407e-02 8.92643989e-02 5.68949376e-02 2.79243078e-03 7.18197378e-01 3.10236021e+03 -2.99800000e-04 -1.65360702e-12 7.31447330e-02 5.96907175e-02 8.92708419e-02 5.69050281e-02 2.79130167e-03 7.18197378e-01 3.10236021e+03 -2.99900000e-04 -1.65360702e-12 7.31394634e-02 5.96806177e-02 8.92772700e-02 5.69150959e-02 2.79017510e-03 7.18197378e-01 3.10236021e+03 -3.00000000e-04 -1.65360702e-12 7.31342055e-02 5.96705414e-02 8.92836832e-02 5.69251410e-02 2.78905107e-03 7.18197378e-01 3.10236021e+03 -3.00100000e-04 -1.65360702e-12 7.31289592e-02 5.96604885e-02 8.92900814e-02 5.69351635e-02 2.78792957e-03 7.18197378e-01 3.10236021e+03 -3.00200000e-04 -1.65360702e-12 7.31237244e-02 5.96504589e-02 8.92964648e-02 5.69451634e-02 2.78681059e-03 7.18197378e-01 3.10236021e+03 -3.00300000e-04 -1.65360702e-12 7.31185012e-02 5.96404526e-02 8.93028334e-02 5.69551408e-02 2.78569414e-03 7.18197378e-01 3.10367303e+03 -3.00400000e-04 -1.65360702e-12 7.31132895e-02 5.96304696e-02 8.93091872e-02 5.69650957e-02 2.78458021e-03 7.18197378e-01 3.10367303e+03 -3.00500000e-04 -1.65360702e-12 7.31080893e-02 5.96205098e-02 8.93155262e-02 5.69750281e-02 2.78346879e-03 7.18197378e-01 3.10367303e+03 -3.00600000e-04 -1.65360702e-12 7.31029006e-02 5.96105731e-02 8.93218505e-02 5.69849381e-02 2.78235987e-03 7.18197378e-01 3.10367303e+03 -3.00700000e-04 -1.65360702e-12 7.30977233e-02 5.96006595e-02 8.93281600e-02 5.69948258e-02 2.78125346e-03 7.18197378e-01 3.10367303e+03 -3.00800000e-04 -1.65360702e-12 7.30925575e-02 5.95907690e-02 8.93344549e-02 5.70046911e-02 2.78014954e-03 7.18197378e-01 3.10367303e+03 -3.00900000e-04 -1.65360702e-12 7.30874031e-02 5.95809015e-02 8.93407352e-02 5.70145342e-02 2.77904812e-03 7.18197378e-01 3.10367303e+03 -3.01000000e-04 -1.65360702e-12 7.30822601e-02 5.95710570e-02 8.93470008e-02 5.70243550e-02 2.77794918e-03 7.18197378e-01 3.10367303e+03 -3.01100000e-04 -1.65360702e-12 7.30771285e-02 5.95612354e-02 8.93532519e-02 5.70341537e-02 2.77685273e-03 7.18197378e-01 3.10367303e+03 -3.01200000e-04 -1.65360702e-12 7.30720082e-02 5.95514366e-02 8.93594884e-02 5.70439302e-02 2.77575876e-03 7.18197378e-01 3.10367303e+03 -3.01300000e-04 -1.65360702e-12 7.30668993e-02 5.95416606e-02 8.93657104e-02 5.70536846e-02 2.77466725e-03 7.18197378e-01 3.10367303e+03 -3.01400000e-04 -1.65360702e-12 7.30618017e-02 5.95319074e-02 8.93719179e-02 5.70634169e-02 2.77357822e-03 7.18197378e-01 3.10367303e+03 -3.01500000e-04 -1.65360702e-12 7.30567153e-02 5.95221770e-02 8.93781109e-02 5.70731273e-02 2.77249165e-03 7.18197378e-01 3.10367303e+03 -3.01600000e-04 -1.65360702e-12 7.30516403e-02 5.95124692e-02 8.93842895e-02 5.70828156e-02 2.77140754e-03 7.18197378e-01 3.10367303e+03 -3.01700000e-04 -1.65360702e-12 7.30465764e-02 5.95027840e-02 8.93904537e-02 5.70924821e-02 2.77032588e-03 7.18197378e-01 3.10367303e+03 -3.01800000e-04 -1.65360702e-12 7.30415239e-02 5.94931214e-02 8.93966036e-02 5.71021266e-02 2.76924667e-03 7.18197378e-01 3.10367303e+03 -3.01900000e-04 -1.65360702e-12 7.30364825e-02 5.94834814e-02 8.94027391e-02 5.71117493e-02 2.76816991e-03 7.18197378e-01 3.10367303e+03 -3.02000000e-04 -1.65360702e-12 7.30314523e-02 5.94738638e-02 8.94088602e-02 5.71213502e-02 2.76709558e-03 7.18197378e-01 3.10367303e+03 -3.02100000e-04 -1.65360702e-12 7.30264333e-02 5.94642686e-02 8.94149672e-02 5.71309294e-02 2.76602369e-03 7.18197378e-01 3.10367303e+03 -3.02200000e-04 -1.65360702e-12 7.30214254e-02 5.94546959e-02 8.94210598e-02 5.71404868e-02 2.76495423e-03 7.18197378e-01 3.10367303e+03 -3.02300000e-04 -1.65360702e-12 7.30164286e-02 5.94451455e-02 8.94271383e-02 5.71500226e-02 2.76388719e-03 7.18197378e-01 3.10367303e+03 -3.02400000e-04 -1.65360702e-12 7.30114430e-02 5.94356173e-02 8.94332025e-02 5.71595368e-02 2.76282257e-03 7.18197378e-01 3.10492493e+03 -3.02500000e-04 -1.65360702e-12 7.30064684e-02 5.94261115e-02 8.94392526e-02 5.71690293e-02 2.76176037e-03 7.18197378e-01 3.10492493e+03 -3.02600000e-04 -1.65360702e-12 7.30015049e-02 5.94166278e-02 8.94452886e-02 5.71785004e-02 2.76070058e-03 7.18197378e-01 3.10492493e+03 -3.02700000e-04 -1.65360702e-12 7.29965524e-02 5.94071663e-02 8.94513104e-02 5.71879499e-02 2.75964319e-03 7.18197378e-01 3.10492493e+03 -3.02800000e-04 -1.65360702e-12 7.29916109e-02 5.93977269e-02 8.94573182e-02 5.71973779e-02 2.75858821e-03 7.18197378e-01 3.10492493e+03 -3.02900000e-04 -1.65360702e-12 7.29866805e-02 5.93883095e-02 8.94633120e-02 5.72067846e-02 2.75753562e-03 7.18197378e-01 3.10492493e+03 -3.03000000e-04 -1.65360702e-12 7.29817610e-02 5.93789141e-02 8.94692917e-02 5.72161699e-02 2.75648542e-03 7.18197378e-01 3.10492493e+03 -3.03100000e-04 -1.65360702e-12 7.29768525e-02 5.93695408e-02 8.94752575e-02 5.72255338e-02 2.75543761e-03 7.18197378e-01 3.10492493e+03 -3.03200000e-04 -1.65360702e-12 7.29719549e-02 5.93601893e-02 8.94812093e-02 5.72348765e-02 2.75439218e-03 7.18197378e-01 3.10492493e+03 -3.03300000e-04 -1.65360702e-12 7.29670682e-02 5.93508597e-02 8.94871472e-02 5.72441979e-02 2.75334913e-03 7.18197378e-01 3.10492493e+03 -3.03400000e-04 -1.65360702e-12 7.29621924e-02 5.93415520e-02 8.94930712e-02 5.72534981e-02 2.75230845e-03 7.18197378e-01 3.10492493e+03 -3.03500000e-04 -1.65360702e-12 7.29573275e-02 5.93322660e-02 8.94989813e-02 5.72627772e-02 2.75127014e-03 7.18197378e-01 3.10492493e+03 -3.03600000e-04 -1.65360702e-12 7.29524734e-02 5.93230017e-02 8.95048776e-02 5.72720351e-02 2.75023419e-03 7.18197378e-01 3.10492493e+03 -3.03700000e-04 -1.65360702e-12 7.29476302e-02 5.93137592e-02 8.95107601e-02 5.72812720e-02 2.74920060e-03 7.18197378e-01 3.10492493e+03 -3.03800000e-04 -1.65360702e-12 7.29427978e-02 5.93045383e-02 8.95166289e-02 5.72904878e-02 2.74816936e-03 7.18197378e-01 3.10492493e+03 -3.03900000e-04 -1.65360702e-12 7.29379762e-02 5.92953389e-02 8.95224839e-02 5.72996827e-02 2.74714048e-03 7.18197378e-01 3.10492493e+03 -3.04000000e-04 -1.65360702e-12 7.29331653e-02 5.92861612e-02 8.95283251e-02 5.73088566e-02 2.74611393e-03 7.18197378e-01 3.10492493e+03 -3.04100000e-04 -1.65360702e-12 7.29283653e-02 5.92770049e-02 8.95341527e-02 5.73180096e-02 2.74508973e-03 7.18197378e-01 3.10492493e+03 -3.04200000e-04 -1.65360702e-12 7.29235759e-02 5.92678701e-02 8.95399666e-02 5.73271417e-02 2.74406786e-03 7.18197378e-01 3.10492493e+03 -3.04300000e-04 -1.65360702e-12 7.29187972e-02 5.92587567e-02 8.95457669e-02 5.73362530e-02 2.74304832e-03 7.18197378e-01 3.10492493e+03 -3.04400000e-04 -1.65360702e-12 7.29140293e-02 5.92496647e-02 8.95515536e-02 5.73453435e-02 2.74203111e-03 7.18197378e-01 3.10492493e+03 -3.04500000e-04 -1.65360702e-12 7.29092720e-02 5.92405940e-02 8.95573267e-02 5.73544132e-02 2.74101622e-03 7.18197378e-01 3.10578656e+03 -3.04600000e-04 -1.65360702e-12 7.29045253e-02 5.92315446e-02 8.95630863e-02 5.73634623e-02 2.74000364e-03 7.18197378e-01 3.10578656e+03 -3.04700000e-04 -1.65360702e-12 7.28997893e-02 5.92225164e-02 8.95688324e-02 5.73724907e-02 2.73899338e-03 7.18197378e-01 3.10578656e+03 -3.04800000e-04 -1.65360702e-12 7.28950639e-02 5.92135094e-02 8.95745650e-02 5.73814985e-02 2.73798542e-03 7.18197378e-01 3.10578656e+03 -3.04900000e-04 -1.65360702e-12 7.28903490e-02 5.92045235e-02 8.95802841e-02 5.73904857e-02 2.73697976e-03 7.18197378e-01 3.10578656e+03 -3.05000000e-04 -1.65360702e-12 7.28856448e-02 5.91955587e-02 8.95859898e-02 5.73994524e-02 2.73597641e-03 7.18197378e-01 3.10578656e+03 -3.05100000e-04 -1.65360702e-12 7.28809511e-02 5.91866150e-02 8.95916821e-02 5.74083986e-02 2.73497534e-03 7.18197378e-01 3.10578656e+03 -3.05200000e-04 -1.65360702e-12 7.28762679e-02 5.91776923e-02 8.95973610e-02 5.74173244e-02 2.73397657e-03 7.18197378e-01 3.10578656e+03 -3.05300000e-04 -1.65360702e-12 7.28715952e-02 5.91687906e-02 8.96030266e-02 5.74262297e-02 2.73298007e-03 7.18197378e-01 3.10578656e+03 -3.05400000e-04 -1.65360702e-12 7.28669330e-02 5.91599097e-02 8.96086789e-02 5.74351147e-02 2.73198586e-03 7.18197378e-01 3.10578656e+03 -3.05500000e-04 -1.65360702e-12 7.28622813e-02 5.91510498e-02 8.96143179e-02 5.74439793e-02 2.73099392e-03 7.18197378e-01 3.10578656e+03 -3.05600000e-04 -1.65360702e-12 7.28576400e-02 5.91422106e-02 8.96199436e-02 5.74528237e-02 2.73000426e-03 7.18197378e-01 3.10578656e+03 -3.05700000e-04 -1.65360702e-12 7.28530091e-02 5.91333923e-02 8.96255561e-02 5.74616478e-02 2.72901685e-03 7.18197378e-01 3.10578656e+03 -3.05800000e-04 -1.65360702e-12 7.28483887e-02 5.91245947e-02 8.96311555e-02 5.74704517e-02 2.72803171e-03 7.18197378e-01 3.10578656e+03 -3.05900000e-04 -1.65360702e-12 7.28437786e-02 5.91158177e-02 8.96367416e-02 5.74792354e-02 2.72704883e-03 7.18197378e-01 3.10578656e+03 -3.06000000e-04 -1.65360702e-12 7.28391789e-02 5.91070615e-02 8.96423146e-02 5.74879990e-02 2.72606819e-03 7.18197378e-01 3.10578656e+03 -3.06100000e-04 -1.65360702e-12 7.28345895e-02 5.90983258e-02 8.96478745e-02 5.74967425e-02 2.72508981e-03 7.18197378e-01 3.10661898e+03 -3.06200000e-04 -1.65360702e-12 7.28300105e-02 5.90896107e-02 8.96534213e-02 5.75054660e-02 2.72411366e-03 7.18197378e-01 3.10661898e+03 -3.06300000e-04 -1.65360702e-12 7.28254418e-02 5.90809161e-02 8.96589550e-02 5.75141695e-02 2.72313976e-03 7.18197378e-01 3.10661898e+03 -3.06400000e-04 -1.65360702e-12 7.28208833e-02 5.90722420e-02 8.96644758e-02 5.75228530e-02 2.72216809e-03 7.18197378e-01 3.10661898e+03 -3.06500000e-04 -1.65360702e-12 7.28163351e-02 5.90635883e-02 8.96699835e-02 5.75315166e-02 2.72119864e-03 7.18197378e-01 3.10661898e+03 -3.06600000e-04 -1.65360702e-12 7.28117972e-02 5.90549550e-02 8.96754782e-02 5.75401603e-02 2.72023143e-03 7.18197378e-01 3.10661898e+03 -3.06700000e-04 -1.65360702e-12 7.28072695e-02 5.90463420e-02 8.96809600e-02 5.75487842e-02 2.71926643e-03 7.18197378e-01 3.10661898e+03 -3.06800000e-04 -1.65360702e-12 7.28027520e-02 5.90377493e-02 8.96864289e-02 5.75573883e-02 2.71830365e-03 7.18197378e-01 3.10661898e+03 -3.06900000e-04 -1.65360702e-12 7.27982447e-02 5.90291769e-02 8.96918849e-02 5.75659726e-02 2.71734307e-03 7.18197378e-01 3.10661898e+03 -3.07000000e-04 -1.65360702e-12 7.27937475e-02 5.90206247e-02 8.96973280e-02 5.75745372e-02 2.71638471e-03 7.18197378e-01 3.10661898e+03 -3.07100000e-04 -1.65360702e-12 7.27892605e-02 5.90120927e-02 8.97027583e-02 5.75830821e-02 2.71542855e-03 7.18197378e-01 3.10661898e+03 -3.07200000e-04 -1.65360702e-12 7.27847836e-02 5.90035807e-02 8.97081758e-02 5.75916074e-02 2.71447458e-03 7.18197378e-01 3.10661898e+03 -3.07300000e-04 -1.65360702e-12 7.27803169e-02 5.89950889e-02 8.97135805e-02 5.76001131e-02 2.71352281e-03 7.18197378e-01 3.10661898e+03 -3.07400000e-04 -1.65360702e-12 7.27758602e-02 5.89866171e-02 8.97189724e-02 5.76085992e-02 2.71257323e-03 7.18197378e-01 3.10661898e+03 -3.07500000e-04 -1.65360702e-12 7.27714136e-02 5.89781653e-02 8.97243516e-02 5.76170658e-02 2.71162583e-03 7.18197378e-01 3.10661898e+03 -3.07600000e-04 -1.65360702e-12 7.27669770e-02 5.89697334e-02 8.97297182e-02 5.76255130e-02 2.71068061e-03 7.18197378e-01 3.10742304e+03 -3.07700000e-04 -1.65360702e-12 7.27625504e-02 5.89613215e-02 8.97350720e-02 5.76339406e-02 2.70973756e-03 7.18197378e-01 3.10742304e+03 -3.07800000e-04 -1.65360702e-12 7.27581339e-02 5.89529294e-02 8.97404133e-02 5.76423489e-02 2.70879669e-03 7.18197378e-01 3.10742304e+03 -3.07900000e-04 -1.65360702e-12 7.27537274e-02 5.89445571e-02 8.97457419e-02 5.76507379e-02 2.70785798e-03 7.18197378e-01 3.10742304e+03 -3.08000000e-04 -1.65360702e-12 7.27493308e-02 5.89362046e-02 8.97510579e-02 5.76591075e-02 2.70692144e-03 7.18197378e-01 3.10742304e+03 -3.08100000e-04 -1.65360702e-12 7.27449441e-02 5.89278718e-02 8.97563613e-02 5.76674578e-02 2.70598705e-03 7.18197378e-01 3.10742304e+03 -3.08200000e-04 -1.65360702e-12 7.27405674e-02 5.89195588e-02 8.97616523e-02 5.76757889e-02 2.70505482e-03 7.18197378e-01 3.10742304e+03 -3.08300000e-04 -1.65360702e-12 7.27362007e-02 5.89112653e-02 8.97669307e-02 5.76841008e-02 2.70412473e-03 7.18197378e-01 3.10742304e+03 -3.08400000e-04 -1.65360702e-12 7.27318438e-02 5.89029915e-02 8.97721966e-02 5.76923935e-02 2.70319679e-03 7.18197378e-01 3.10742304e+03 -3.08500000e-04 -1.65360702e-12 7.27274967e-02 5.88947373e-02 8.97774501e-02 5.77006671e-02 2.70227099e-03 7.18197378e-01 3.10742304e+03 -3.08600000e-04 -1.65360702e-12 7.27231596e-02 5.88865025e-02 8.97826912e-02 5.77089216e-02 2.70134732e-03 7.18197378e-01 3.10742304e+03 -3.08700000e-04 -1.65360702e-12 7.27188322e-02 5.88782873e-02 8.97879198e-02 5.77171570e-02 2.70042579e-03 7.18197378e-01 3.10742304e+03 -3.08800000e-04 -1.65360702e-12 7.27145147e-02 5.88700915e-02 8.97931361e-02 5.77253735e-02 2.69950638e-03 7.18197378e-01 3.10742304e+03 -3.08900000e-04 -1.65360702e-12 7.27102069e-02 5.88619150e-02 8.97983401e-02 5.77335710e-02 2.69858909e-03 7.18197378e-01 3.10742304e+03 -3.09000000e-04 -1.65360702e-12 7.27059090e-02 5.88537580e-02 8.98035317e-02 5.77417496e-02 2.69767392e-03 7.18197378e-01 3.10742304e+03 -3.09100000e-04 -1.65360702e-12 7.27016208e-02 5.88456202e-02 8.98087111e-02 5.77499092e-02 2.69676087e-03 7.18197378e-01 3.10742304e+03 -3.09200000e-04 -1.65360702e-12 7.26973423e-02 5.88375017e-02 8.98138781e-02 5.77580501e-02 2.69584992e-03 7.18197378e-01 3.10819959e+03 -3.09300000e-04 -1.65360702e-12 7.26930736e-02 5.88294025e-02 8.98190330e-02 5.77661721e-02 2.69494108e-03 7.18197378e-01 3.10819959e+03 -3.09400000e-04 -1.65360702e-12 7.26888145e-02 5.88213224e-02 8.98241756e-02 5.77742753e-02 2.69403435e-03 7.18197378e-01 3.10819959e+03 -3.09500000e-04 -1.65360702e-12 7.26845651e-02 5.88132614e-02 8.98293061e-02 5.77823598e-02 2.69312970e-03 7.18197378e-01 3.10819959e+03 -3.09600000e-04 -1.65360702e-12 7.26803254e-02 5.88052196e-02 8.98344244e-02 5.77904257e-02 2.69222715e-03 7.18197378e-01 3.10819959e+03 -3.09700000e-04 -1.65360702e-12 7.26760953e-02 5.87971968e-02 8.98395305e-02 5.77984728e-02 2.69132669e-03 7.18197378e-01 3.10819959e+03 -3.09800000e-04 -1.65360702e-12 7.26718749e-02 5.87891931e-02 8.98446246e-02 5.78065014e-02 2.69042831e-03 7.18197378e-01 3.10819959e+03 -3.09900000e-04 -1.65360702e-12 7.26676640e-02 5.87812083e-02 8.98497065e-02 5.78145113e-02 2.68953201e-03 7.18197378e-01 3.10819959e+03 -3.10000000e-04 -1.65360702e-12 7.26634627e-02 5.87732424e-02 8.98547765e-02 5.78225027e-02 2.68863778e-03 7.18197378e-01 3.10819959e+03 -3.10100000e-04 -1.65360702e-12 7.26592710e-02 5.87652955e-02 8.98598344e-02 5.78304757e-02 2.68774562e-03 7.18197378e-01 3.10819959e+03 -3.10200000e-04 -1.65360702e-12 7.26550888e-02 5.87573674e-02 8.98648803e-02 5.78384301e-02 2.68685553e-03 7.18197378e-01 3.10819959e+03 -3.10300000e-04 -1.65360702e-12 7.26509162e-02 5.87494581e-02 8.98699142e-02 5.78463661e-02 2.68596750e-03 7.18197378e-01 3.10819959e+03 -3.10400000e-04 -1.65360702e-12 7.26467531e-02 5.87415676e-02 8.98749362e-02 5.78542838e-02 2.68508153e-03 7.18197378e-01 3.10819959e+03 -3.10500000e-04 -1.65360702e-12 7.26425994e-02 5.87336958e-02 8.98799463e-02 5.78621831e-02 2.68419762e-03 7.18197378e-01 3.10819959e+03 -3.10600000e-04 -1.65360702e-12 7.26384552e-02 5.87258427e-02 8.98849444e-02 5.78700640e-02 2.68331575e-03 7.18197378e-01 3.10819959e+03 -3.10700000e-04 -1.65360702e-12 7.26343205e-02 5.87180082e-02 8.98899307e-02 5.78779267e-02 2.68243592e-03 7.18197378e-01 3.10894943e+03 -3.10800000e-04 -1.65360702e-12 7.26301952e-02 5.87101924e-02 8.98949052e-02 5.78857712e-02 2.68155814e-03 7.18197378e-01 3.10894943e+03 -3.10900000e-04 -1.65360702e-12 7.26260793e-02 5.87023951e-02 8.98998678e-02 5.78935975e-02 2.68068239e-03 7.18197378e-01 3.10894943e+03 -3.11000000e-04 -1.65360702e-12 7.26219728e-02 5.86946164e-02 8.99048187e-02 5.79014056e-02 2.67980868e-03 7.18197378e-01 3.10894943e+03 -3.11100000e-04 -1.65360702e-12 7.26178757e-02 5.86868561e-02 8.99097578e-02 5.79091956e-02 2.67893699e-03 7.18197378e-01 3.10894943e+03 -3.11200000e-04 -1.65360702e-12 7.26137879e-02 5.86791143e-02 8.99146851e-02 5.79169675e-02 2.67806733e-03 7.18197378e-01 3.10894943e+03 -3.11300000e-04 -1.65360702e-12 7.26097095e-02 5.86713908e-02 8.99196008e-02 5.79247214e-02 2.67719968e-03 7.18197378e-01 3.10894943e+03 -3.11400000e-04 -1.65360702e-12 7.26056404e-02 5.86636858e-02 8.99245047e-02 5.79324572e-02 2.67633405e-03 7.18197378e-01 3.10894943e+03 -3.11500000e-04 -1.65360702e-12 7.26015806e-02 5.86559990e-02 8.99293970e-02 5.79401751e-02 2.67547044e-03 7.18197378e-01 3.10894943e+03 -3.11600000e-04 -1.65360702e-12 7.25975300e-02 5.86483306e-02 8.99342777e-02 5.79478750e-02 2.67460883e-03 7.18197378e-01 3.10894943e+03 -3.11700000e-04 -1.65360702e-12 7.25934888e-02 5.86406804e-02 8.99391467e-02 5.79555571e-02 2.67374922e-03 7.18197378e-01 3.10894943e+03 -3.11800000e-04 -1.65360702e-12 7.25894568e-02 5.86330483e-02 8.99440042e-02 5.79632213e-02 2.67289161e-03 7.18197378e-01 3.10894943e+03 -3.11900000e-04 -1.65360702e-12 7.25854340e-02 5.86254345e-02 8.99488501e-02 5.79708676e-02 2.67203599e-03 7.18197378e-01 3.10894943e+03 -3.12000000e-04 -1.65360702e-12 7.25814204e-02 5.86178388e-02 8.99536844e-02 5.79784962e-02 2.67118236e-03 7.18197378e-01 3.10894943e+03 -3.12100000e-04 -1.65360702e-12 7.25774159e-02 5.86102611e-02 8.99585073e-02 5.79861071e-02 2.67033072e-03 7.18197378e-01 3.10894943e+03 -3.12200000e-04 -1.65360702e-12 7.25734207e-02 5.86027015e-02 8.99633186e-02 5.79937002e-02 2.66948107e-03 7.18197378e-01 3.10967340e+03 -3.12300000e-04 -1.65360702e-12 7.25694346e-02 5.85951599e-02 8.99681186e-02 5.80012757e-02 2.66863339e-03 7.18197378e-01 3.10967340e+03 -3.12400000e-04 -1.65360702e-12 7.25654577e-02 5.85876363e-02 8.99729070e-02 5.80088335e-02 2.66778768e-03 7.18197378e-01 3.10967340e+03 -3.12500000e-04 -1.65360702e-12 7.25614898e-02 5.85801306e-02 8.99776841e-02 5.80163737e-02 2.66694394e-03 7.18197378e-01 3.10967340e+03 -3.12600000e-04 -1.65360702e-12 7.25575311e-02 5.85726428e-02 8.99824498e-02 5.80238963e-02 2.66610217e-03 7.18197378e-01 3.10967340e+03 -3.12700000e-04 -1.65360702e-12 7.25535814e-02 5.85651728e-02 8.99872041e-02 5.80314015e-02 2.66526236e-03 7.18197378e-01 3.10967340e+03 -3.12800000e-04 -1.65360702e-12 7.25496408e-02 5.85577206e-02 8.99919471e-02 5.80388891e-02 2.66442450e-03 7.18197378e-01 3.10967340e+03 -3.12900000e-04 -1.65360702e-12 7.25457092e-02 5.85502862e-02 8.99966788e-02 5.80463593e-02 2.66358860e-03 7.18197378e-01 3.10967340e+03 -3.13000000e-04 -1.65360702e-12 7.25417867e-02 5.85428695e-02 9.00013992e-02 5.80538121e-02 2.66275464e-03 7.18197378e-01 3.10967340e+03 -3.13100000e-04 -1.65360702e-12 7.25378731e-02 5.85354705e-02 9.00061084e-02 5.80612475e-02 2.66192264e-03 7.18197378e-01 3.10967340e+03 -3.13200000e-04 -1.65360702e-12 7.25339686e-02 5.85280892e-02 9.00108063e-02 5.80686655e-02 2.66109257e-03 7.18197378e-01 3.10967340e+03 -3.13300000e-04 -1.65360702e-12 7.25300730e-02 5.85207254e-02 9.00154930e-02 5.80760663e-02 2.66026444e-03 7.18197378e-01 3.10967340e+03 -3.13400000e-04 -1.65360702e-12 7.25261863e-02 5.85133793e-02 9.00201685e-02 5.80834498e-02 2.65943824e-03 7.18197378e-01 3.10967340e+03 -3.13500000e-04 -1.65360702e-12 7.25223086e-02 5.85060506e-02 9.00248329e-02 5.80908160e-02 2.65861397e-03 7.18197378e-01 3.10967340e+03 -3.13600000e-04 -1.65360702e-12 7.25184398e-02 5.84987395e-02 9.00294861e-02 5.80981651e-02 2.65779162e-03 7.18197378e-01 3.10967340e+03 -3.13700000e-04 -1.65360702e-12 7.25145799e-02 5.84914458e-02 9.00341283e-02 5.81054970e-02 2.65697119e-03 7.18197378e-01 3.10967340e+03 -3.13800000e-04 -1.65360702e-12 7.25107289e-02 5.84841695e-02 9.00387593e-02 5.81128117e-02 2.65615268e-03 7.18197378e-01 3.11037226e+03 -3.13900000e-04 -1.65360702e-12 7.25068867e-02 5.84769106e-02 9.00433793e-02 5.81201094e-02 2.65533608e-03 7.18197378e-01 3.11037226e+03 -3.14000000e-04 -1.65360702e-12 7.25030534e-02 5.84696691e-02 9.00479882e-02 5.81273901e-02 2.65452139e-03 7.18197378e-01 3.11037226e+03 -3.14100000e-04 -1.65360702e-12 7.24992289e-02 5.84624448e-02 9.00525862e-02 5.81346537e-02 2.65370861e-03 7.18197378e-01 3.11037226e+03 -3.14200000e-04 -1.65360702e-12 7.24954132e-02 5.84552378e-02 9.00571731e-02 5.81419003e-02 2.65289772e-03 7.18197378e-01 3.11037226e+03 -3.14300000e-04 -1.65360702e-12 7.24916062e-02 5.84480481e-02 9.00617491e-02 5.81491300e-02 2.65208873e-03 7.18197378e-01 3.11037226e+03 -3.14400000e-04 -1.65360702e-12 7.24878081e-02 5.84408755e-02 9.00663142e-02 5.81563428e-02 2.65128163e-03 7.18197378e-01 3.11037226e+03 -3.14500000e-04 -1.65360702e-12 7.24840187e-02 5.84337200e-02 9.00708683e-02 5.81635387e-02 2.65047642e-03 7.18197378e-01 3.11037226e+03 -3.14600000e-04 -1.65360702e-12 7.24802380e-02 5.84265817e-02 9.00754116e-02 5.81707178e-02 2.64967309e-03 7.18197378e-01 3.11037226e+03 -3.14700000e-04 -1.65360702e-12 7.24764661e-02 5.84194605e-02 9.00799439e-02 5.81778800e-02 2.64887165e-03 7.18197378e-01 3.11037226e+03 -3.14800000e-04 -1.65360702e-12 7.24727028e-02 5.84123562e-02 9.00844655e-02 5.81850256e-02 2.64807207e-03 7.18197378e-01 3.11037226e+03 -3.14900000e-04 -1.65360702e-12 7.24689482e-02 5.84052690e-02 9.00889762e-02 5.81921543e-02 2.64727438e-03 7.18197378e-01 3.11037226e+03 -3.15000000e-04 -1.65360702e-12 7.24652023e-02 5.83981987e-02 9.00934761e-02 5.81992664e-02 2.64647854e-03 7.18197378e-01 3.11037226e+03 -3.15100000e-04 -1.65360702e-12 7.24614650e-02 5.83911454e-02 9.00979653e-02 5.82063619e-02 2.64568458e-03 7.18197378e-01 3.11037226e+03 -3.15200000e-04 -1.65360702e-12 7.24577364e-02 5.83841089e-02 9.01024437e-02 5.82134407e-02 2.64489247e-03 7.18197378e-01 3.11037226e+03 -3.15300000e-04 -1.65360702e-12 7.24540163e-02 5.83770893e-02 9.01069114e-02 5.82205029e-02 2.64410222e-03 7.18197378e-01 3.11104681e+03 -3.15400000e-04 -1.65360702e-12 7.24503049e-02 5.83700865e-02 9.01113684e-02 5.82275486e-02 2.64331382e-03 7.18197378e-01 3.11104681e+03 -3.15500000e-04 -1.65360702e-12 7.24466020e-02 5.83631004e-02 9.01158148e-02 5.82345777e-02 2.64252727e-03 7.18197378e-01 3.11104681e+03 -3.15600000e-04 -1.65360702e-12 7.24429077e-02 5.83561311e-02 9.01202504e-02 5.82415904e-02 2.64174257e-03 7.18197378e-01 3.11104681e+03 -3.15700000e-04 -1.65360702e-12 7.24392219e-02 5.83491785e-02 9.01246755e-02 5.82485866e-02 2.64095970e-03 7.18197378e-01 3.11104681e+03 -3.15800000e-04 -1.65360702e-12 7.24355446e-02 5.83422425e-02 9.01290899e-02 5.82555664e-02 2.64017867e-03 7.18197378e-01 3.11104681e+03 -3.15900000e-04 -1.65360702e-12 7.24318759e-02 5.83353232e-02 9.01334938e-02 5.82625298e-02 2.63939947e-03 7.18197378e-01 3.11104681e+03 -3.16000000e-04 -1.65360702e-12 7.24282156e-02 5.83284204e-02 9.01378871e-02 5.82694769e-02 2.63862211e-03 7.18197378e-01 3.11104681e+03 -3.16100000e-04 -1.65360702e-12 7.24245638e-02 5.83215342e-02 9.01422699e-02 5.82764077e-02 2.63784656e-03 7.18197378e-01 3.11104681e+03 -3.16200000e-04 -1.65360702e-12 7.24209204e-02 5.83146645e-02 9.01466422e-02 5.82833222e-02 2.63707284e-03 7.18197378e-01 3.11104681e+03 -3.16300000e-04 -1.65360702e-12 7.24172855e-02 5.83078112e-02 9.01510040e-02 5.82902205e-02 2.63630093e-03 7.18197378e-01 3.11104681e+03 -3.16400000e-04 -1.65360702e-12 7.24136590e-02 5.83009744e-02 9.01553553e-02 5.82971026e-02 2.63553084e-03 7.18197378e-01 3.11104681e+03 -3.16500000e-04 -1.65360702e-12 7.24100408e-02 5.82941540e-02 9.01596962e-02 5.83039685e-02 2.63476256e-03 7.18197378e-01 3.11104681e+03 -3.16600000e-04 -1.65360702e-12 7.24064311e-02 5.82873500e-02 9.01640267e-02 5.83108182e-02 2.63399608e-03 7.18197378e-01 3.11104681e+03 -3.16700000e-04 -1.65360702e-12 7.24028297e-02 5.82805623e-02 9.01683468e-02 5.83176519e-02 2.63323140e-03 7.18197378e-01 3.11104681e+03 -3.16800000e-04 -1.65360702e-12 7.23992367e-02 5.82737909e-02 9.01726565e-02 5.83244695e-02 2.63246853e-03 7.18197378e-01 3.11169778e+03 -3.16900000e-04 -1.65360702e-12 7.23956520e-02 5.82670357e-02 9.01769559e-02 5.83312711e-02 2.63170744e-03 7.18197378e-01 3.11169778e+03 -3.17000000e-04 -1.65360702e-12 7.23920756e-02 5.82602967e-02 9.01812450e-02 5.83380567e-02 2.63094814e-03 7.18197378e-01 3.11169778e+03 -3.17100000e-04 -1.65360702e-12 7.23885075e-02 5.82535740e-02 9.01855238e-02 5.83448263e-02 2.63019064e-03 7.18197378e-01 3.11169778e+03 -3.17200000e-04 -1.65360702e-12 7.23849477e-02 5.82468673e-02 9.01897923e-02 5.83515800e-02 2.62943491e-03 7.18197378e-01 3.11169778e+03 -3.17300000e-04 -1.65360702e-12 7.23813961e-02 5.82401768e-02 9.01940505e-02 5.83583178e-02 2.62868096e-03 7.18197378e-01 3.11169778e+03 -3.17400000e-04 -1.65360702e-12 7.23778528e-02 5.82335024e-02 9.01982985e-02 5.83650397e-02 2.62792879e-03 7.18197378e-01 3.11169778e+03 -3.17500000e-04 -1.65360702e-12 7.23743177e-02 5.82268439e-02 9.02025363e-02 5.83717459e-02 2.62717838e-03 7.18197378e-01 3.11169778e+03 -3.17600000e-04 -1.65360702e-12 7.23707908e-02 5.82202015e-02 9.02067639e-02 5.83784362e-02 2.62642975e-03 7.18197378e-01 3.11169778e+03 -3.17700000e-04 -1.65360702e-12 7.23672721e-02 5.82135751e-02 9.02109814e-02 5.83851108e-02 2.62568287e-03 7.18197378e-01 3.11169778e+03 -3.17800000e-04 -1.65360702e-12 7.23637615e-02 5.82069645e-02 9.02151887e-02 5.83917696e-02 2.62493776e-03 7.18197378e-01 3.11169778e+03 -3.17900000e-04 -1.65360702e-12 7.23602592e-02 5.82003699e-02 9.02193859e-02 5.83984128e-02 2.62419440e-03 7.18197378e-01 3.11169778e+03 -3.18000000e-04 -1.65360702e-12 7.23567649e-02 5.81937911e-02 9.02235731e-02 5.84050403e-02 2.62345279e-03 7.18197378e-01 3.11169778e+03 -3.18100000e-04 -1.65360702e-12 7.23532788e-02 5.81872281e-02 9.02277501e-02 5.84116521e-02 2.62271294e-03 7.18197378e-01 3.11169778e+03 -3.18200000e-04 -1.65360702e-12 7.23498008e-02 5.81806810e-02 9.02319171e-02 5.84182484e-02 2.62197482e-03 7.18197378e-01 3.11169778e+03 -3.18300000e-04 -1.65360702e-12 7.23463309e-02 5.81741495e-02 9.02360741e-02 5.84248292e-02 2.62123845e-03 7.18197378e-01 3.11169778e+03 -3.18400000e-04 -1.65360702e-12 7.23428691e-02 5.81676338e-02 9.02402211e-02 5.84313944e-02 2.62050381e-03 7.18197378e-01 3.11232593e+03 -3.18500000e-04 -1.65360702e-12 7.23394153e-02 5.81611338e-02 9.02443581e-02 5.84379441e-02 2.61977091e-03 7.18197378e-01 3.11232593e+03 -3.18600000e-04 -1.65360702e-12 7.23359695e-02 5.81546494e-02 9.02484851e-02 5.84444784e-02 2.61903973e-03 7.18197378e-01 3.11232593e+03 -3.18700000e-04 -1.65360702e-12 7.23325318e-02 5.81481806e-02 9.02526022e-02 5.84509972e-02 2.61831028e-03 7.18197378e-01 3.11232593e+03 -3.18800000e-04 -1.65360702e-12 7.23291021e-02 5.81417274e-02 9.02567094e-02 5.84575007e-02 2.61758256e-03 7.18197378e-01 3.11232593e+03 -3.18900000e-04 -1.65360702e-12 7.23256803e-02 5.81352897e-02 9.02608068e-02 5.84639888e-02 2.61685655e-03 7.18197378e-01 3.11232593e+03 -3.19000000e-04 -1.65360702e-12 7.23222666e-02 5.81288675e-02 9.02648942e-02 5.84704616e-02 2.61613225e-03 7.18197378e-01 3.11232593e+03 -3.19100000e-04 -1.65360702e-12 7.23188607e-02 5.81224608e-02 9.02689718e-02 5.84769191e-02 2.61540967e-03 7.18197378e-01 3.11232593e+03 -3.19200000e-04 -1.65360702e-12 7.23154629e-02 5.81160696e-02 9.02730396e-02 5.84833614e-02 2.61468879e-03 7.18197378e-01 3.11232593e+03 -3.19300000e-04 -1.65360702e-12 7.23120729e-02 5.81096937e-02 9.02770976e-02 5.84897884e-02 2.61396962e-03 7.18197378e-01 3.11232593e+03 -3.19400000e-04 -1.65360702e-12 7.23086909e-02 5.81033332e-02 9.02811458e-02 5.84962002e-02 2.61325215e-03 7.18197378e-01 3.11232593e+03 -3.19500000e-04 -1.65360702e-12 7.23053167e-02 5.80969880e-02 9.02851842e-02 5.85025969e-02 2.61253637e-03 7.18197378e-01 3.11232593e+03 -3.19600000e-04 -1.65360702e-12 7.23019504e-02 5.80906581e-02 9.02892129e-02 5.85089785e-02 2.61182228e-03 7.18197378e-01 3.11232593e+03 -3.19700000e-04 -1.65360702e-12 7.22985920e-02 5.80843434e-02 9.02932319e-02 5.85153449e-02 2.61110988e-03 7.18197378e-01 3.11232593e+03 -3.19800000e-04 -1.65360702e-12 7.22952414e-02 5.80780440e-02 9.02972412e-02 5.85216963e-02 2.61039917e-03 7.18197378e-01 3.11232593e+03 -3.19900000e-04 -1.65360702e-12 7.22918986e-02 5.80717598e-02 9.03012409e-02 5.85280327e-02 2.60969014e-03 7.18197378e-01 3.11293198e+03 -3.20000000e-04 -1.65360702e-12 7.22885636e-02 5.80654907e-02 9.03052309e-02 5.85343541e-02 2.60898279e-03 7.18197378e-01 3.11293198e+03 -3.20100000e-04 -1.65360702e-12 7.22852364e-02 5.80592368e-02 9.03092113e-02 5.85406606e-02 2.60827711e-03 7.18197378e-01 3.11293198e+03 -3.20200000e-04 -1.65360702e-12 7.22819170e-02 5.80529979e-02 9.03131820e-02 5.85469521e-02 2.60757310e-03 7.18197378e-01 3.11293198e+03 -3.20300000e-04 -1.65360702e-12 7.22786054e-02 5.80467741e-02 9.03171432e-02 5.85532287e-02 2.60687075e-03 7.18197378e-01 3.11293198e+03 -3.20400000e-04 -1.65360702e-12 7.22753014e-02 5.80405654e-02 9.03210948e-02 5.85594904e-02 2.60617007e-03 7.18197378e-01 3.11293198e+03 -3.20500000e-04 -1.65360702e-12 7.22720052e-02 5.80343716e-02 9.03250369e-02 5.85657374e-02 2.60547105e-03 7.18197378e-01 3.11293198e+03 -3.20600000e-04 -1.65360702e-12 7.22687167e-02 5.80281927e-02 9.03289695e-02 5.85719695e-02 2.60477369e-03 7.18197378e-01 3.11293198e+03 -3.20700000e-04 -1.65360702e-12 7.22654359e-02 5.80220288e-02 9.03328926e-02 5.85781868e-02 2.60407798e-03 7.18197378e-01 3.11293198e+03 -3.20800000e-04 -1.65360702e-12 7.22621628e-02 5.80158797e-02 9.03368062e-02 5.85843895e-02 2.60338391e-03 7.18197378e-01 3.11293198e+03 -3.20900000e-04 -1.65360702e-12 7.22588973e-02 5.80097455e-02 9.03407104e-02 5.85905774e-02 2.60269150e-03 7.18197378e-01 3.11293198e+03 -3.21000000e-04 -1.65360702e-12 7.22556395e-02 5.80036261e-02 9.03446051e-02 5.85967507e-02 2.60200072e-03 7.18197378e-01 3.11293198e+03 -3.21100000e-04 -1.65360702e-12 7.22523893e-02 5.79975215e-02 9.03484904e-02 5.86029093e-02 2.60131158e-03 7.18197378e-01 3.11293198e+03 -3.21200000e-04 -1.65360702e-12 7.22491467e-02 5.79914317e-02 9.03523664e-02 5.86090533e-02 2.60062407e-03 7.18197378e-01 3.11293198e+03 -3.21300000e-04 -1.65360702e-12 7.22459117e-02 5.79853565e-02 9.03562330e-02 5.86151827e-02 2.59993820e-03 7.18197378e-01 3.11293198e+03 -3.21400000e-04 -1.65360702e-12 7.22426843e-02 5.79792961e-02 9.03600902e-02 5.86212976e-02 2.59925395e-03 7.18197378e-01 3.11351662e+03 -3.21500000e-04 -1.65360702e-12 7.22394644e-02 5.79732503e-02 9.03639381e-02 5.86273980e-02 2.59857133e-03 7.18197378e-01 3.11351662e+03 -3.21600000e-04 -1.65360702e-12 7.22362521e-02 5.79672191e-02 9.03677767e-02 5.86334839e-02 2.59789033e-03 7.18197378e-01 3.11351662e+03 -3.21700000e-04 -1.65360702e-12 7.22330473e-02 5.79612025e-02 9.03716060e-02 5.86395554e-02 2.59721094e-03 7.18197378e-01 3.11351662e+03 -3.21800000e-04 -1.65360702e-12 7.22298501e-02 5.79552004e-02 9.03754261e-02 5.86456125e-02 2.59653316e-03 7.18197378e-01 3.11351662e+03 -3.21900000e-04 -1.65360702e-12 7.22266603e-02 5.79492129e-02 9.03792369e-02 5.86516551e-02 2.59585700e-03 7.18197378e-01 3.11351662e+03 -3.22000000e-04 -1.65360702e-12 7.22234780e-02 5.79432398e-02 9.03830385e-02 5.86576834e-02 2.59518244e-03 7.18197378e-01 3.11351662e+03 -3.22100000e-04 -1.65360702e-12 7.22203031e-02 5.79372812e-02 9.03868309e-02 5.86636974e-02 2.59450948e-03 7.18197378e-01 3.11351662e+03 -3.22200000e-04 -1.65360702e-12 7.22171358e-02 5.79313370e-02 9.03906142e-02 5.86696971e-02 2.59383813e-03 7.18197378e-01 3.11351662e+03 -3.22300000e-04 -1.65360702e-12 7.22139758e-02 5.79254071e-02 9.03943882e-02 5.86756826e-02 2.59316837e-03 7.18197378e-01 3.11351662e+03 -3.22400000e-04 -1.65360702e-12 7.22108233e-02 5.79194917e-02 9.03981532e-02 5.86816538e-02 2.59250019e-03 7.18197378e-01 3.11351662e+03 -3.22500000e-04 -1.65360702e-12 7.22076781e-02 5.79135905e-02 9.04019090e-02 5.86876108e-02 2.59183361e-03 7.18197378e-01 3.11351662e+03 -3.22600000e-04 -1.65360702e-12 7.22045404e-02 5.79077037e-02 9.04056558e-02 5.86935537e-02 2.59116862e-03 7.18197378e-01 3.11351662e+03 -3.22700000e-04 -1.65360702e-12 7.22014100e-02 5.79018311e-02 9.04093934e-02 5.86994824e-02 2.59050520e-03 7.18197378e-01 3.11351662e+03 -3.22800000e-04 -1.65360702e-12 7.21982870e-02 5.78959727e-02 9.04131221e-02 5.87053971e-02 2.58984336e-03 7.18197378e-01 3.11351662e+03 -3.22900000e-04 -1.65360702e-12 7.21951713e-02 5.78901285e-02 9.04168417e-02 5.87112976e-02 2.58918310e-03 7.18197378e-01 3.11351662e+03 -3.23000000e-04 -1.65360702e-12 7.21920629e-02 5.78842984e-02 9.04205522e-02 5.87171842e-02 2.58852441e-03 7.18197378e-01 3.11408055e+03 -3.23100000e-04 -1.65360702e-12 7.21889619e-02 5.78784825e-02 9.04242538e-02 5.87230567e-02 2.58786728e-03 7.18197378e-01 3.11408055e+03 -3.23200000e-04 -1.65360702e-12 7.21858681e-02 5.78726806e-02 9.04279465e-02 5.87289152e-02 2.58721172e-03 7.18197378e-01 3.11408055e+03 -3.23300000e-04 -1.65360702e-12 7.21827816e-02 5.78668929e-02 9.04316301e-02 5.87347598e-02 2.58655772e-03 7.18197378e-01 3.11408055e+03 -3.23400000e-04 -1.65360702e-12 7.21797024e-02 5.78611191e-02 9.04353049e-02 5.87405905e-02 2.58590528e-03 7.18197378e-01 3.11408055e+03 -3.23500000e-04 -1.65360702e-12 7.21766304e-02 5.78553594e-02 9.04389707e-02 5.87464072e-02 2.58525439e-03 7.18197378e-01 3.11408055e+03 -3.23600000e-04 -1.65360702e-12 7.21735657e-02 5.78496136e-02 9.04426277e-02 5.87522102e-02 2.58460506e-03 7.18197378e-01 3.11408055e+03 -3.23700000e-04 -1.65360702e-12 7.21705081e-02 5.78438817e-02 9.04462758e-02 5.87579993e-02 2.58395726e-03 7.18197378e-01 3.11408055e+03 -3.23800000e-04 -1.65360702e-12 7.21674578e-02 5.78381637e-02 9.04499150e-02 5.87637746e-02 2.58331102e-03 7.18197378e-01 3.11408055e+03 -3.23900000e-04 -1.65360702e-12 7.21644146e-02 5.78324596e-02 9.04535454e-02 5.87695361e-02 2.58266631e-03 7.18197378e-01 3.11408055e+03 -3.24000000e-04 -1.65360702e-12 7.21613786e-02 5.78267694e-02 9.04571671e-02 5.87752839e-02 2.58202314e-03 7.18197378e-01 3.11408055e+03 -3.24100000e-04 -1.65360702e-12 7.21583498e-02 5.78210929e-02 9.04607799e-02 5.87810180e-02 2.58138150e-03 7.18197378e-01 3.11408055e+03 -3.24200000e-04 -1.65360702e-12 7.21553281e-02 5.78154302e-02 9.04643840e-02 5.87867385e-02 2.58074139e-03 7.18197378e-01 3.11408055e+03 -3.24300000e-04 -1.65360702e-12 7.21523135e-02 5.78097813e-02 9.04679793e-02 5.87924453e-02 2.58010281e-03 7.18197378e-01 3.11408055e+03 -3.24400000e-04 -1.65360702e-12 7.21493060e-02 5.78041460e-02 9.04715659e-02 5.87981385e-02 2.57946576e-03 7.18197378e-01 3.11408055e+03 -3.24500000e-04 -1.65360702e-12 7.21463056e-02 5.77985245e-02 9.04751438e-02 5.88038181e-02 2.57883022e-03 7.18197378e-01 3.11462444e+03 -3.24600000e-04 -1.65360702e-12 7.21433123e-02 5.77929166e-02 9.04787130e-02 5.88094841e-02 2.57819620e-03 7.18197378e-01 3.11462444e+03 -3.24700000e-04 -1.65360702e-12 7.21403261e-02 5.77873223e-02 9.04822735e-02 5.88151366e-02 2.57756369e-03 7.18197378e-01 3.11462444e+03 -3.24800000e-04 -1.65360702e-12 7.21373469e-02 5.77817415e-02 9.04858254e-02 5.88207757e-02 2.57693269e-03 7.18197378e-01 3.11462444e+03 -3.24900000e-04 -1.65360702e-12 7.21343747e-02 5.77761744e-02 9.04893687e-02 5.88264012e-02 2.57630320e-03 7.18197378e-01 3.11462444e+03 -3.25000000e-04 -1.65360702e-12 7.21314095e-02 5.77706207e-02 9.04929033e-02 5.88320134e-02 2.57567521e-03 7.18197378e-01 3.11462444e+03 -3.25100000e-04 -1.65360702e-12 7.21284514e-02 5.77650806e-02 9.04964294e-02 5.88376121e-02 2.57504872e-03 7.18197378e-01 3.11462444e+03 -3.25200000e-04 -1.65360702e-12 7.21255002e-02 5.77595539e-02 9.04999469e-02 5.88431974e-02 2.57442373e-03 7.18197378e-01 3.11462444e+03 -3.25300000e-04 -1.65360702e-12 7.21225560e-02 5.77540406e-02 9.05034559e-02 5.88487695e-02 2.57380023e-03 7.18197378e-01 3.11462444e+03 -3.25400000e-04 -1.65360702e-12 7.21196187e-02 5.77485407e-02 9.05069563e-02 5.88543282e-02 2.57317822e-03 7.18197378e-01 3.11462444e+03 -3.25500000e-04 -1.65360702e-12 7.21166884e-02 5.77430542e-02 9.05104483e-02 5.88598736e-02 2.57255770e-03 7.18197378e-01 3.11462444e+03 -3.25600000e-04 -1.65360702e-12 7.21137650e-02 5.77375810e-02 9.05139317e-02 5.88654057e-02 2.57193866e-03 7.18197378e-01 3.11462444e+03 -3.25700000e-04 -1.65360702e-12 7.21108485e-02 5.77321212e-02 9.05174067e-02 5.88709247e-02 2.57132110e-03 7.18197378e-01 3.11462444e+03 -3.25800000e-04 -1.65360702e-12 7.21079389e-02 5.77266746e-02 9.05208732e-02 5.88764304e-02 2.57070502e-03 7.18197378e-01 3.11462444e+03 -3.25900000e-04 -1.65360702e-12 7.21050362e-02 5.77212412e-02 9.05243313e-02 5.88819230e-02 2.57009041e-03 7.18197378e-01 3.11462444e+03 -3.26000000e-04 -1.65360702e-12 7.21021404e-02 5.77158211e-02 9.05277810e-02 5.88874024e-02 2.56947727e-03 7.18197378e-01 3.11501033e+03 -3.26100000e-04 -1.65360702e-12 7.20992514e-02 5.77104141e-02 9.05312223e-02 5.88928687e-02 2.56886560e-03 7.18197378e-01 3.11501033e+03 -3.26200000e-04 -1.65360702e-12 7.20963692e-02 5.77050203e-02 9.05346552e-02 5.88983220e-02 2.56825539e-03 7.18197378e-01 3.11501033e+03 -3.26300000e-04 -1.65360702e-12 7.20934939e-02 5.76996396e-02 9.05380798e-02 5.89037622e-02 2.56764664e-03 7.18197378e-01 3.11501033e+03 -3.26400000e-04 -1.65360702e-12 7.20906253e-02 5.76942721e-02 9.05414961e-02 5.89091893e-02 2.56703935e-03 7.18197378e-01 3.11501033e+03 -3.26500000e-04 -1.65360702e-12 7.20877636e-02 5.76889175e-02 9.05449040e-02 5.89146035e-02 2.56643351e-03 7.18197378e-01 3.11501033e+03 -3.26600000e-04 -1.65360702e-12 7.20849086e-02 5.76835760e-02 9.05483036e-02 5.89200047e-02 2.56582912e-03 7.18197378e-01 3.11501033e+03 -3.26700000e-04 -1.65360702e-12 7.20820604e-02 5.76782475e-02 9.05516950e-02 5.89253930e-02 2.56522618e-03 7.18197378e-01 3.11501033e+03 -3.26800000e-04 -1.65360702e-12 7.20792189e-02 5.76729320e-02 9.05550781e-02 5.89307684e-02 2.56462468e-03 7.18197378e-01 3.11501033e+03 -3.26900000e-04 -1.65360702e-12 7.20763842e-02 5.76676294e-02 9.05584530e-02 5.89361309e-02 2.56402463e-03 7.18197378e-01 3.11501033e+03 -3.27000000e-04 -1.65360702e-12 7.20735562e-02 5.76623398e-02 9.05618196e-02 5.89414806e-02 2.56342601e-03 7.18197378e-01 3.11501033e+03 -3.27100000e-04 -1.65360702e-12 7.20707348e-02 5.76570630e-02 9.05651781e-02 5.89468174e-02 2.56282883e-03 7.18197378e-01 3.11501033e+03 -3.27200000e-04 -1.65360702e-12 7.20679202e-02 5.76517991e-02 9.05685284e-02 5.89521414e-02 2.56223308e-03 7.18197378e-01 3.11527932e+03 -3.27300000e-04 -1.65360702e-12 7.20651122e-02 5.76465479e-02 9.05718705e-02 5.89574527e-02 2.56163875e-03 7.18197378e-01 3.11527932e+03 -3.27400000e-04 -1.65360702e-12 7.20623109e-02 5.76413096e-02 9.05752044e-02 5.89627513e-02 2.56104586e-03 7.18197378e-01 3.11527932e+03 -3.27500000e-04 -1.65360702e-12 7.20595163e-02 5.76360841e-02 9.05785303e-02 5.89680371e-02 2.56045438e-03 7.18197378e-01 3.11527932e+03 -3.27600000e-04 -1.65360702e-12 7.20567283e-02 5.76308712e-02 9.05818480e-02 5.89733103e-02 2.55986432e-03 7.18197378e-01 3.11527932e+03 -3.27700000e-04 -1.65360702e-12 7.20539469e-02 5.76256711e-02 9.05851577e-02 5.89785708e-02 2.55927568e-03 7.18197378e-01 3.11527932e+03 -3.27800000e-04 -1.65360702e-12 7.20511720e-02 5.76204837e-02 9.05884593e-02 5.89838187e-02 2.55868845e-03 7.18197378e-01 3.11527932e+03 -3.27900000e-04 -1.65360702e-12 7.20484038e-02 5.76153089e-02 9.05917528e-02 5.89890540e-02 2.55810262e-03 7.18197378e-01 3.11527932e+03 -3.28000000e-04 -1.65360702e-12 7.20456422e-02 5.76101467e-02 9.05950384e-02 5.89942767e-02 2.55751821e-03 7.18197378e-01 3.11547128e+03 -3.28100000e-04 -1.65360702e-12 7.20428871e-02 5.76049971e-02 9.05983159e-02 5.89994869e-02 2.55693519e-03 7.18197378e-01 3.11547128e+03 -3.28200000e-04 -1.65360702e-12 7.20401385e-02 5.75998600e-02 9.06015854e-02 5.90046846e-02 2.55635358e-03 7.18197378e-01 3.11547128e+03 -3.28300000e-04 -1.65360702e-12 7.20373965e-02 5.75947355e-02 9.06048469e-02 5.90098699e-02 2.55577336e-03 7.18197378e-01 3.11547128e+03 -3.28400000e-04 -1.65360702e-12 7.20346610e-02 5.75896235e-02 9.06081005e-02 5.90150426e-02 2.55519454e-03 7.18197378e-01 3.11547128e+03 -3.28500000e-04 -1.65360702e-12 7.20319319e-02 5.75845240e-02 9.06113461e-02 5.90202030e-02 2.55461710e-03 7.18197378e-01 3.11566061e+03 -3.28600000e-04 -1.65360702e-12 7.20292094e-02 5.75794369e-02 9.06145839e-02 5.90253509e-02 2.55404106e-03 7.18197378e-01 3.11566061e+03 -3.28700000e-04 -1.65360702e-12 7.20264934e-02 5.75743622e-02 9.06178137e-02 5.90304865e-02 2.55346639e-03 7.18197378e-01 3.11566061e+03 -3.28800000e-04 -1.65360702e-12 7.20237838e-02 5.75692999e-02 9.06210356e-02 5.90356097e-02 2.55289311e-03 7.18197378e-01 3.11566061e+03 -3.28900000e-04 -1.65360702e-12 7.20210806e-02 5.75642499e-02 9.06242497e-02 5.90407207e-02 2.55232121e-03 7.18197378e-01 3.11566061e+03 -3.29000000e-04 -1.65360702e-12 7.20183839e-02 5.75592123e-02 9.06274560e-02 5.90458193e-02 2.55175068e-03 7.18197378e-01 3.11566061e+03 -3.29100000e-04 -1.65360702e-12 7.20156936e-02 5.75541870e-02 9.06306544e-02 5.90509057e-02 2.55118152e-03 7.18197378e-01 3.11584734e+03 -3.29200000e-04 -1.65360702e-12 7.20130097e-02 5.75491739e-02 9.06338450e-02 5.90559799e-02 2.55061373e-03 7.18197378e-01 3.11584734e+03 -3.29300000e-04 -1.65360702e-12 7.20103321e-02 5.75441731e-02 9.06370278e-02 5.90610418e-02 2.55004731e-03 7.18197378e-01 3.11584734e+03 -3.29400000e-04 -1.65360702e-12 7.20076610e-02 5.75391845e-02 9.06402028e-02 5.90660916e-02 2.54948224e-03 7.18197378e-01 3.11584734e+03 -3.29500000e-04 -1.65360702e-12 7.20049962e-02 5.75342081e-02 9.06433701e-02 5.90711292e-02 2.54891854e-03 7.18197378e-01 3.11584734e+03 -3.29600000e-04 -1.65360702e-12 7.20023377e-02 5.75292438e-02 9.06465296e-02 5.90761547e-02 2.54835619e-03 7.18197378e-01 3.11584734e+03 -3.29700000e-04 -1.65360702e-12 7.19996856e-02 5.75242917e-02 9.06496815e-02 5.90811682e-02 2.54779520e-03 7.18197378e-01 3.11603150e+03 -3.29800000e-04 -1.65360702e-12 7.19970398e-02 5.75193517e-02 9.06528256e-02 5.90861695e-02 2.54723556e-03 7.18197378e-01 3.11603150e+03 -3.29900000e-04 -1.65360702e-12 7.19944003e-02 5.75144237e-02 9.06559620e-02 5.90911588e-02 2.54667726e-03 7.18197378e-01 3.11603150e+03 -3.30000000e-04 -1.65360702e-12 7.19917671e-02 5.75095078e-02 9.06590908e-02 5.90961361e-02 2.54612031e-03 7.18197378e-01 3.11603150e+03 -3.30100000e-04 -1.65360702e-12 7.19891402e-02 5.75046039e-02 9.06622119e-02 5.91011015e-02 2.54556470e-03 7.18197378e-01 3.11603150e+03 -3.30200000e-04 -1.65360702e-12 7.19865195e-02 5.74997120e-02 9.06653255e-02 5.91060548e-02 2.54501042e-03 7.18197378e-01 3.11603150e+03 -3.30300000e-04 -1.65360702e-12 7.19839051e-02 5.74948320e-02 9.06684313e-02 5.91109963e-02 2.54445749e-03 7.18197378e-01 3.11621312e+03 -3.30400000e-04 -1.65360702e-12 7.19812969e-02 5.74899640e-02 9.06715296e-02 5.91159258e-02 2.54390588e-03 7.18197378e-01 3.11621312e+03 -3.30500000e-04 -1.65360702e-12 7.19786949e-02 5.74851078e-02 9.06746204e-02 5.91208434e-02 2.54335560e-03 7.18197378e-01 3.11621312e+03 -3.30600000e-04 -1.65360702e-12 7.19760991e-02 5.74802636e-02 9.06777035e-02 5.91257493e-02 2.54280665e-03 7.18197378e-01 3.11621312e+03 -3.30700000e-04 -1.65360702e-12 7.19735095e-02 5.74754312e-02 9.06807791e-02 5.91306432e-02 2.54225902e-03 7.18197378e-01 3.11621312e+03 -3.30800000e-04 -1.65360702e-12 7.19709261e-02 5.74706106e-02 9.06838472e-02 5.91355254e-02 2.54171271e-03 7.18197378e-01 3.11621312e+03 -3.30900000e-04 -1.65360702e-12 7.19683489e-02 5.74658018e-02 9.06869078e-02 5.91403958e-02 2.54116772e-03 7.18197378e-01 3.11634163e+03 -3.31000000e-04 -1.65360702e-12 7.19657778e-02 5.74610048e-02 9.06899609e-02 5.91452545e-02 2.54062404e-03 7.18197378e-01 3.11634163e+03 -3.31100000e-04 -1.65360702e-12 7.19632129e-02 5.74562195e-02 9.06930066e-02 5.91501015e-02 2.54008168e-03 7.18197378e-01 3.11634163e+03 -3.31200000e-04 -1.65360702e-12 7.19606541e-02 5.74514460e-02 9.06960447e-02 5.91549368e-02 2.53954062e-03 7.18197378e-01 3.11634163e+03 -3.31300000e-04 -1.65360702e-12 7.19581014e-02 5.74466841e-02 9.06990755e-02 5.91597604e-02 2.53900086e-03 7.18197378e-01 3.11643151e+03 -3.31400000e-04 -1.65360702e-12 7.19555548e-02 5.74419338e-02 9.07020988e-02 5.91645723e-02 2.53846241e-03 7.18197378e-01 3.11643151e+03 -3.31500000e-04 -1.65360702e-12 7.19530142e-02 5.74371952e-02 9.07051148e-02 5.91693727e-02 2.53792526e-03 7.18197378e-01 3.11643151e+03 -3.31600000e-04 -1.65360702e-12 7.19504798e-02 5.74324682e-02 9.07081233e-02 5.91741615e-02 2.53738940e-03 7.18197378e-01 3.11649598e+03 -3.31700000e-04 -1.65360702e-12 7.19479514e-02 5.74277528e-02 9.07111245e-02 5.91789387e-02 2.53685484e-03 7.18197378e-01 3.11649598e+03 -3.31800000e-04 -1.65360702e-12 7.19454290e-02 5.74230489e-02 9.07141183e-02 5.91837044e-02 2.53632157e-03 7.18197378e-01 3.11656012e+03 -3.31900000e-04 -1.65360702e-12 7.19429127e-02 5.74183565e-02 9.07171048e-02 5.91884586e-02 2.53578958e-03 7.18197378e-01 3.11656012e+03 -3.32000000e-04 -1.65360702e-12 7.19404024e-02 5.74136757e-02 9.07200840e-02 5.91932013e-02 2.53525888e-03 7.18197378e-01 3.11662394e+03 -3.32100000e-04 -1.65360702e-12 7.19378981e-02 5.74090063e-02 9.07230558e-02 5.91979325e-02 2.53472946e-03 7.18197378e-01 3.11662394e+03 -3.32200000e-04 -1.65360702e-12 7.19353998e-02 5.74043483e-02 9.07260204e-02 5.92026523e-02 2.53420132e-03 7.18197378e-01 3.11668743e+03 -3.32300000e-04 -1.65360702e-12 7.19329074e-02 5.73997017e-02 9.07289778e-02 5.92073608e-02 2.53367446e-03 7.18197378e-01 3.11668743e+03 -3.32400000e-04 -1.65360702e-12 7.19304210e-02 5.73950666e-02 9.07319279e-02 5.92120578e-02 2.53314887e-03 7.18197378e-01 3.11675060e+03 -3.32500000e-04 -1.65360702e-12 7.19279406e-02 5.73904428e-02 9.07348707e-02 5.92167435e-02 2.53262455e-03 7.18197378e-01 3.11675060e+03 -3.32600000e-04 -1.65360702e-12 7.19254661e-02 5.73858303e-02 9.07378064e-02 5.92214179e-02 2.53210149e-03 7.18197378e-01 3.11679553e+03 -3.32700000e-04 -1.65360702e-12 7.19229975e-02 5.73812291e-02 9.07407348e-02 5.92260809e-02 2.53157970e-03 7.18197378e-01 3.11679553e+03 -3.32800000e-04 -1.65360702e-12 7.19205349e-02 5.73766393e-02 9.07436561e-02 5.92307328e-02 2.53105917e-03 7.18197378e-01 3.11682709e+03 -3.32900000e-04 -1.65360702e-12 7.19180781e-02 5.73720606e-02 9.07465702e-02 5.92353733e-02 2.53053990e-03 7.18197378e-01 3.11684981e+03 -3.33000000e-04 -1.65360702e-12 7.19156272e-02 5.73674932e-02 9.07494771e-02 5.92400026e-02 2.53002189e-03 7.18197378e-01 3.11687248e+03 -3.33100000e-04 -1.65360702e-12 7.19131822e-02 5.73629370e-02 9.07523770e-02 5.92446208e-02 2.52950512e-03 7.18197378e-01 3.11691771e+03 -3.33200000e-04 -1.65360702e-12 7.19107431e-02 5.73583920e-02 9.07552697e-02 5.92492277e-02 2.52898961e-03 7.18197378e-01 3.11694026e+03 -3.33300000e-04 -1.65360702e-12 7.19083098e-02 5.73538581e-02 9.07581553e-02 5.92538236e-02 2.52847535e-03 7.18197378e-01 3.11696277e+03 -3.33400000e-04 -1.65360702e-12 7.19058823e-02 5.73493354e-02 9.07610339e-02 5.92584083e-02 2.52796233e-03 7.18197378e-01 3.11707335e+03 -3.33500000e-04 -1.65360702e-12 7.19034607e-02 5.73448237e-02 9.07639054e-02 5.92629819e-02 2.52745055e-03 7.18197378e-01 3.11707335e+03 -3.33600000e-04 -1.65360702e-12 7.19010448e-02 5.73403231e-02 9.07667698e-02 5.92675444e-02 2.52694001e-03 7.18197378e-01 3.11707335e+03 -3.33700000e-04 -1.65360702e-12 7.18986347e-02 5.73358336e-02 9.07696272e-02 5.92720959e-02 2.52643070e-03 7.18197378e-01 3.11716084e+03 -3.33800000e-04 -1.65360702e-12 7.18962305e-02 5.73313550e-02 9.07724776e-02 5.92766364e-02 2.52592263e-03 7.18197378e-01 3.11716084e+03 -3.33900000e-04 -1.65360702e-12 7.18938320e-02 5.73268875e-02 9.07753210e-02 5.92811659e-02 2.52541579e-03 7.18197378e-01 3.11716084e+03 -3.34000000e-04 -1.65360702e-12 7.18914392e-02 5.73224309e-02 9.07781574e-02 5.92856844e-02 2.52491017e-03 7.18197378e-01 3.11724769e+03 -3.34100000e-04 -1.65360702e-12 7.18890522e-02 5.73179853e-02 9.07809869e-02 5.92901920e-02 2.52440578e-03 7.18197378e-01 3.11724769e+03 -3.34200000e-04 -1.65360702e-12 7.18866709e-02 5.73135506e-02 9.07838094e-02 5.92946887e-02 2.52390261e-03 7.18197378e-01 3.11724769e+03 -3.34300000e-04 -1.65360702e-12 7.18842953e-02 5.73091268e-02 9.07866250e-02 5.92991744e-02 2.52340066e-03 7.18197378e-01 3.11733391e+03 -3.34400000e-04 -1.65360702e-12 7.18819255e-02 5.73047138e-02 9.07894336e-02 5.93036493e-02 2.52289993e-03 7.18197378e-01 3.11733391e+03 -3.34500000e-04 -1.65360702e-12 7.18795613e-02 5.73003117e-02 9.07922354e-02 5.93081134e-02 2.52240041e-03 7.18197378e-01 3.11733391e+03 -3.34600000e-04 -1.65360702e-12 7.18772028e-02 5.72959204e-02 9.07950303e-02 5.93125666e-02 2.52190210e-03 7.18197378e-01 3.11733391e+03 -3.34700000e-04 -1.65360702e-12 7.18748499e-02 5.72915399e-02 9.07978183e-02 5.93170091e-02 2.52140500e-03 7.18197378e-01 3.11741950e+03 -3.34800000e-04 -1.65360702e-12 7.18725028e-02 5.72871701e-02 9.08005995e-02 5.93214407e-02 2.52090910e-03 7.18197378e-01 3.11741950e+03 -3.34900000e-04 -1.65360702e-12 7.18701612e-02 5.72828111e-02 9.08033738e-02 5.93258617e-02 2.52041440e-03 7.18197378e-01 3.11741950e+03 -3.35000000e-04 -1.65360702e-12 7.18678253e-02 5.72784628e-02 9.08061413e-02 5.93302719e-02 2.51992091e-03 7.18197378e-01 3.11764055e+03 -3.35100000e-04 -1.65360702e-12 7.18654950e-02 5.72741251e-02 9.08089020e-02 5.93346714e-02 2.51942861e-03 7.18197378e-01 3.11764055e+03 -3.35200000e-04 -1.65360702e-12 7.18631703e-02 5.72697982e-02 9.08116560e-02 5.93390602e-02 2.51893751e-03 7.18197378e-01 3.11764055e+03 -3.35300000e-04 -1.65360702e-12 7.18608512e-02 5.72654818e-02 9.08144031e-02 5.93434384e-02 2.51844759e-03 7.18197378e-01 3.11764055e+03 -3.35400000e-04 -1.65360702e-12 7.18585376e-02 5.72611761e-02 9.08171435e-02 5.93478060e-02 2.51795887e-03 7.18197378e-01 3.11764055e+03 -3.35500000e-04 -1.65360702e-12 7.18562296e-02 5.72568810e-02 9.08198772e-02 5.93521630e-02 2.51747133e-03 7.18197378e-01 3.11764055e+03 -3.35600000e-04 -1.65360702e-12 7.18539272e-02 5.72525964e-02 9.08226042e-02 5.93565094e-02 2.51698498e-03 7.18197378e-01 3.11764055e+03 -3.35700000e-04 -1.65360702e-12 7.18516303e-02 5.72483224e-02 9.08253244e-02 5.93608452e-02 2.51649980e-03 7.18197378e-01 3.11801516e+03 -3.35800000e-04 -1.65360702e-12 7.18493390e-02 5.72440589e-02 9.08280380e-02 5.93651706e-02 2.51601580e-03 7.18197378e-01 3.11801516e+03 -3.35900000e-04 -1.65360702e-12 7.18470531e-02 5.72398058e-02 9.08307449e-02 5.93694854e-02 2.51553298e-03 7.18197378e-01 3.11801516e+03 -3.36000000e-04 -1.65360702e-12 7.18447728e-02 5.72355632e-02 9.08334451e-02 5.93737897e-02 2.51505133e-03 7.18197378e-01 3.11801516e+03 -3.36100000e-04 -1.65360702e-12 7.18424979e-02 5.72313311e-02 9.08361387e-02 5.93780836e-02 2.51457085e-03 7.18197378e-01 3.11801516e+03 -3.36200000e-04 -1.65360702e-12 7.18402285e-02 5.72271094e-02 9.08388256e-02 5.93823671e-02 2.51409154e-03 7.18197378e-01 3.11801516e+03 -3.36300000e-04 -1.65360702e-12 7.18379646e-02 5.72228980e-02 9.08415059e-02 5.93866402e-02 2.51361339e-03 7.18197378e-01 3.11801516e+03 -3.36400000e-04 -1.65360702e-12 7.18357061e-02 5.72186971e-02 9.08441797e-02 5.93909029e-02 2.51313640e-03 7.18197378e-01 3.11801516e+03 -3.36500000e-04 -1.65360702e-12 7.18334531e-02 5.72145064e-02 9.08468469e-02 5.93951552e-02 2.51266057e-03 7.18197378e-01 3.11801516e+03 -3.36600000e-04 -1.65360702e-12 7.18312055e-02 5.72103261e-02 9.08495075e-02 5.93993972e-02 2.51218590e-03 7.18197378e-01 3.11801516e+03 -3.36700000e-04 -1.65360702e-12 7.18289633e-02 5.72061561e-02 9.08521615e-02 5.94036289e-02 2.51171238e-03 7.18197378e-01 3.11801516e+03 -3.36800000e-04 -1.65360702e-12 7.18267265e-02 5.72019963e-02 9.08548090e-02 5.94078503e-02 2.51124001e-03 7.18197378e-01 3.11801516e+03 -3.36900000e-04 -1.65360702e-12 7.18244951e-02 5.71978468e-02 9.08574500e-02 5.94120614e-02 2.51076879e-03 7.18197378e-01 3.11801516e+03 -3.37000000e-04 -1.65360702e-12 7.18222691e-02 5.71937075e-02 9.08600845e-02 5.94162623e-02 2.51029872e-03 7.18197378e-01 3.11801516e+03 -3.37100000e-04 -1.65360702e-12 7.18200485e-02 5.71895784e-02 9.08627125e-02 5.94204530e-02 2.50982979e-03 7.18197378e-01 3.11837750e+03 -3.37200000e-04 -1.65360702e-12 7.18178332e-02 5.71854594e-02 9.08653341e-02 5.94246335e-02 2.50936200e-03 7.18197378e-01 3.11837750e+03 -3.37300000e-04 -1.65360702e-12 7.18156232e-02 5.71813506e-02 9.08679492e-02 5.94288038e-02 2.50889534e-03 7.18197378e-01 3.11837750e+03 -3.37400000e-04 -1.65360702e-12 7.18134186e-02 5.71772519e-02 9.08705578e-02 5.94329640e-02 2.50842983e-03 7.18197378e-01 3.11837750e+03 -3.37500000e-04 -1.65360702e-12 7.18112193e-02 5.71731633e-02 9.08731600e-02 5.94371141e-02 2.50796544e-03 7.18197378e-01 3.11837750e+03 -3.37600000e-04 -1.65360702e-12 7.18090253e-02 5.71690848e-02 9.08757558e-02 5.94412541e-02 2.50750219e-03 7.18197378e-01 3.11837750e+03 -3.37700000e-04 -1.65360702e-12 7.18068366e-02 5.71650164e-02 9.08783452e-02 5.94453839e-02 2.50704006e-03 7.18197378e-01 3.11837750e+03 -3.37800000e-04 -1.65360702e-12 7.18046531e-02 5.71609579e-02 9.08809282e-02 5.94495038e-02 2.50657906e-03 7.18197378e-01 3.11837750e+03 -3.37900000e-04 -1.65360702e-12 7.18024750e-02 5.71569095e-02 9.08835049e-02 5.94536136e-02 2.50611917e-03 7.18197378e-01 3.11837750e+03 -3.38000000e-04 -1.65360702e-12 7.18003021e-02 5.71528710e-02 9.08860752e-02 5.94577134e-02 2.50566041e-03 7.18197378e-01 3.11837750e+03 -3.38100000e-04 -1.65360702e-12 7.17981344e-02 5.71488425e-02 9.08886392e-02 5.94618032e-02 2.50520277e-03 7.18197378e-01 3.11837750e+03 -3.38200000e-04 -1.65360702e-12 7.17959720e-02 5.71448240e-02 9.08911968e-02 5.94658831e-02 2.50474624e-03 7.18197378e-01 3.11837750e+03 -3.38300000e-04 -1.65360702e-12 7.17938148e-02 5.71408153e-02 9.08937482e-02 5.94699530e-02 2.50429082e-03 7.18197378e-01 3.11837750e+03 -3.38400000e-04 -1.65360702e-12 7.17916628e-02 5.71368165e-02 9.08962932e-02 5.94740131e-02 2.50383651e-03 7.18197378e-01 3.11837750e+03 -3.38500000e-04 -1.65360702e-12 7.17895160e-02 5.71328276e-02 9.08988320e-02 5.94780632e-02 2.50338331e-03 7.18197378e-01 3.11872796e+03 -3.38600000e-04 -1.65360702e-12 7.17873744e-02 5.71288485e-02 9.09013645e-02 5.94821034e-02 2.50293121e-03 7.18197378e-01 3.11872796e+03 -3.38700000e-04 -1.65360702e-12 7.17852380e-02 5.71248793e-02 9.09038908e-02 5.94861339e-02 2.50248021e-03 7.18197378e-01 3.11872796e+03 -3.38800000e-04 -1.65360702e-12 7.17831067e-02 5.71209198e-02 9.09064109e-02 5.94901545e-02 2.50203031e-03 7.18197378e-01 3.11872796e+03 -3.38900000e-04 -1.65360702e-12 7.17809806e-02 5.71169701e-02 9.09089247e-02 5.94941653e-02 2.50158151e-03 7.18197378e-01 3.11872796e+03 -3.39000000e-04 -1.65360702e-12 7.17788597e-02 5.71130301e-02 9.09114323e-02 5.94981663e-02 2.50113380e-03 7.18197378e-01 3.11872796e+03 -3.39100000e-04 -1.65360702e-12 7.17767438e-02 5.71090998e-02 9.09139338e-02 5.95021576e-02 2.50068718e-03 7.18197378e-01 3.11872796e+03 -3.39200000e-04 -1.65360702e-12 7.17746331e-02 5.71051793e-02 9.09164290e-02 5.95061391e-02 2.50024166e-03 7.18197378e-01 3.11872796e+03 -3.39300000e-04 -1.65360702e-12 7.17725275e-02 5.71012684e-02 9.09189181e-02 5.95101109e-02 2.49979722e-03 7.18197378e-01 3.11872796e+03 -3.39400000e-04 -1.65360702e-12 7.17704269e-02 5.70973672e-02 9.09214011e-02 5.95140731e-02 2.49935386e-03 7.18197378e-01 3.11872796e+03 -3.39500000e-04 -1.65360702e-12 7.17683315e-02 5.70934756e-02 9.09238779e-02 5.95180256e-02 2.49891158e-03 7.18197378e-01 3.11872796e+03 -3.39600000e-04 -1.65360702e-12 7.17662411e-02 5.70895936e-02 9.09263487e-02 5.95219684e-02 2.49847038e-03 7.18197378e-01 3.11872796e+03 -3.39700000e-04 -1.65360702e-12 7.17641558e-02 5.70857212e-02 9.09288133e-02 5.95259016e-02 2.49803026e-03 7.18197378e-01 3.11872796e+03 -3.39800000e-04 -1.65360702e-12 7.17620755e-02 5.70818584e-02 9.09312718e-02 5.95298253e-02 2.49759122e-03 7.18197378e-01 3.11872796e+03 -3.39900000e-04 -1.65360702e-12 7.17600003e-02 5.70780050e-02 9.09337243e-02 5.95337393e-02 2.49715324e-03 7.18197378e-01 3.11906690e+03 -3.40000000e-04 -1.65360702e-12 7.17579300e-02 5.70741613e-02 9.09361707e-02 5.95376438e-02 2.49671633e-03 7.18197378e-01 3.11906690e+03 -3.40100000e-04 -1.65360702e-12 7.17558648e-02 5.70703270e-02 9.09386111e-02 5.95415388e-02 2.49628049e-03 7.18197378e-01 3.11906690e+03 -3.40200000e-04 -1.65360702e-12 7.17538046e-02 5.70665021e-02 9.09410454e-02 5.95454243e-02 2.49584571e-03 7.18197378e-01 3.11906690e+03 -3.40300000e-04 -1.65360702e-12 7.17517494e-02 5.70626867e-02 9.09434738e-02 5.95493002e-02 2.49541200e-03 7.18197378e-01 3.11906690e+03 -3.40400000e-04 -1.65360702e-12 7.17496992e-02 5.70588808e-02 9.09458961e-02 5.95531668e-02 2.49497934e-03 7.18197378e-01 3.11906690e+03 -3.40500000e-04 -1.65360702e-12 7.17476539e-02 5.70550842e-02 9.09483124e-02 5.95570238e-02 2.49454774e-03 7.18197378e-01 3.11906690e+03 -3.40600000e-04 -1.65360702e-12 7.17456136e-02 5.70512970e-02 9.09507228e-02 5.95608715e-02 2.49411719e-03 7.18197378e-01 3.11906690e+03 -3.40700000e-04 -1.65360702e-12 7.17435782e-02 5.70475192e-02 9.09531272e-02 5.95647097e-02 2.49368770e-03 7.18197378e-01 3.11906690e+03 -3.40800000e-04 -1.65360702e-12 7.17415478e-02 5.70437507e-02 9.09555257e-02 5.95685386e-02 2.49325925e-03 7.18197378e-01 3.11906690e+03 -3.40900000e-04 -1.65360702e-12 7.17395223e-02 5.70399916e-02 9.09579183e-02 5.95723582e-02 2.49283185e-03 7.18197378e-01 3.11906690e+03 -3.41000000e-04 -1.65360702e-12 7.17375017e-02 5.70362417e-02 9.09603049e-02 5.95761684e-02 2.49240550e-03 7.18197378e-01 3.11906690e+03 -3.41100000e-04 -1.65360702e-12 7.17354860e-02 5.70325011e-02 9.09626857e-02 5.95799692e-02 2.49198019e-03 7.18197378e-01 3.11906690e+03 -3.41200000e-04 -1.65360702e-12 7.17334752e-02 5.70287697e-02 9.09650605e-02 5.95837608e-02 2.49155591e-03 7.18197378e-01 3.11906690e+03 -3.41300000e-04 -1.65360702e-12 7.17314692e-02 5.70250476e-02 9.09674295e-02 5.95875432e-02 2.49113268e-03 7.18197378e-01 3.11939468e+03 -3.41400000e-04 -1.65360702e-12 7.17294681e-02 5.70213346e-02 9.09697926e-02 5.95913163e-02 2.49071047e-03 7.18197378e-01 3.11939468e+03 -3.41500000e-04 -1.65360702e-12 7.17274719e-02 5.70176309e-02 9.09721499e-02 5.95950801e-02 2.49028930e-03 7.18197378e-01 3.11939468e+03 -3.41600000e-04 -1.65360702e-12 7.17254805e-02 5.70139363e-02 9.09745014e-02 5.95988348e-02 2.48986916e-03 7.18197378e-01 3.11939468e+03 -3.41700000e-04 -1.65360702e-12 7.17234940e-02 5.70102508e-02 9.09768470e-02 5.96025803e-02 2.48945005e-03 7.18197378e-01 3.11939468e+03 -3.41800000e-04 -1.65360702e-12 7.17215123e-02 5.70065745e-02 9.09791869e-02 5.96063166e-02 2.48903196e-03 7.18197378e-01 3.11939468e+03 -3.41900000e-04 -1.65360702e-12 7.17195354e-02 5.70029072e-02 9.09815209e-02 5.96100438e-02 2.48861490e-03 7.18197378e-01 3.11939468e+03 -3.42000000e-04 -1.65360702e-12 7.17175632e-02 5.69992490e-02 9.09838492e-02 5.96137618e-02 2.48819885e-03 7.18197378e-01 3.11939468e+03 -3.42100000e-04 -1.65360702e-12 7.17155959e-02 5.69955999e-02 9.09861717e-02 5.96174708e-02 2.48778383e-03 7.18197378e-01 3.11939468e+03 -3.42200000e-04 -1.65360702e-12 7.17136334e-02 5.69919598e-02 9.09884885e-02 5.96211707e-02 2.48736981e-03 7.18197378e-01 3.11939468e+03 -3.42300000e-04 -1.65360702e-12 7.17116756e-02 5.69883287e-02 9.09907996e-02 5.96248615e-02 2.48695681e-03 7.18197378e-01 3.11939468e+03 -3.42400000e-04 -1.65360702e-12 7.17097225e-02 5.69847066e-02 9.09931049e-02 5.96285433e-02 2.48654483e-03 7.18197378e-01 3.11939468e+03 -3.42500000e-04 -1.65360702e-12 7.17077743e-02 5.69810934e-02 9.09954045e-02 5.96322161e-02 2.48613385e-03 7.18197378e-01 3.11939468e+03 -3.42600000e-04 -1.65360702e-12 7.17058307e-02 5.69774892e-02 9.09976984e-02 5.96358799e-02 2.48572387e-03 7.18197378e-01 3.11971164e+03 -3.42700000e-04 -1.65360702e-12 7.17038919e-02 5.69738939e-02 9.09999867e-02 5.96395348e-02 2.48531490e-03 7.18197378e-01 3.11971164e+03 -3.42800000e-04 -1.65360702e-12 7.17019578e-02 5.69703075e-02 9.10022693e-02 5.96431807e-02 2.48490693e-03 7.18197378e-01 3.11971164e+03 -3.42900000e-04 -1.65360702e-12 7.17000283e-02 5.69667300e-02 9.10045462e-02 5.96468176e-02 2.48449996e-03 7.18197378e-01 3.11971164e+03 -3.43000000e-04 -1.65360702e-12 7.16981036e-02 5.69631614e-02 9.10068175e-02 5.96504457e-02 2.48409399e-03 7.18197378e-01 3.11971164e+03 -3.43100000e-04 -1.65360702e-12 7.16961836e-02 5.69596016e-02 9.10090832e-02 5.96540648e-02 2.48368901e-03 7.18197378e-01 3.11971164e+03 -3.43200000e-04 -1.65360702e-12 7.16942682e-02 5.69560506e-02 9.10113432e-02 5.96576752e-02 2.48328502e-03 7.18197378e-01 3.11971164e+03 -3.43300000e-04 -1.65360702e-12 7.16923574e-02 5.69525084e-02 9.10135977e-02 5.96612766e-02 2.48288203e-03 7.18197378e-01 3.11971164e+03 -3.43400000e-04 -1.65360702e-12 7.16904514e-02 5.69489749e-02 9.10158466e-02 5.96648693e-02 2.48248002e-03 7.18197378e-01 3.11971164e+03 -3.43500000e-04 -1.65360702e-12 7.16885499e-02 5.69454503e-02 9.10180899e-02 5.96684531e-02 2.48207899e-03 7.18197378e-01 3.11971164e+03 -3.43600000e-04 -1.65360702e-12 7.16866531e-02 5.69419343e-02 9.10203276e-02 5.96720281e-02 2.48167895e-03 7.18197378e-01 3.11971164e+03 -3.43700000e-04 -1.65360702e-12 7.16847609e-02 5.69384271e-02 9.10225598e-02 5.96755944e-02 2.48127989e-03 7.18197378e-01 3.11971164e+03 -3.43800000e-04 -1.65360702e-12 7.16828733e-02 5.69349285e-02 9.10247865e-02 5.96791520e-02 2.48088180e-03 7.18197378e-01 3.11971164e+03 -3.43900000e-04 -1.65360702e-12 7.16809903e-02 5.69314386e-02 9.10270077e-02 5.96827008e-02 2.48048469e-03 7.18197378e-01 3.11971164e+03 -3.44000000e-04 -1.65360702e-12 7.16791119e-02 5.69279574e-02 9.10292233e-02 5.96862409e-02 2.48008856e-03 7.18197378e-01 3.12001813e+03 -3.44100000e-04 -1.65360702e-12 7.16772380e-02 5.69244848e-02 9.10314335e-02 5.96897724e-02 2.47969340e-03 7.18197378e-01 3.12001813e+03 -3.44200000e-04 -1.65360702e-12 7.16753688e-02 5.69210208e-02 9.10336382e-02 5.96932952e-02 2.47929920e-03 7.18197378e-01 3.12001813e+03 -3.44300000e-04 -1.65360702e-12 7.16735040e-02 5.69175654e-02 9.10358374e-02 5.96968093e-02 2.47890597e-03 7.18197378e-01 3.12001813e+03 -3.44400000e-04 -1.65360702e-12 7.16716438e-02 5.69141185e-02 9.10380312e-02 5.97003149e-02 2.47851371e-03 7.18197378e-01 3.12001813e+03 -3.44500000e-04 -1.65360702e-12 7.16697882e-02 5.69106802e-02 9.10402196e-02 5.97038118e-02 2.47812241e-03 7.18197378e-01 3.12001813e+03 -3.44600000e-04 -1.65360702e-12 7.16679370e-02 5.69072504e-02 9.10424025e-02 5.97073002e-02 2.47773207e-03 7.18197378e-01 3.12001813e+03 -3.44700000e-04 -1.65360702e-12 7.16660904e-02 5.69038292e-02 9.10445800e-02 5.97107800e-02 2.47734268e-03 7.18197378e-01 3.12001813e+03 -3.44800000e-04 -1.65360702e-12 7.16642482e-02 5.69004164e-02 9.10467521e-02 5.97142512e-02 2.47695426e-03 7.18197378e-01 3.12001813e+03 -3.44900000e-04 -1.65360702e-12 7.16624106e-02 5.68970120e-02 9.10489188e-02 5.97177140e-02 2.47656678e-03 7.18197378e-01 3.12001813e+03 -3.45000000e-04 -1.65360702e-12 7.16605774e-02 5.68936161e-02 9.10510801e-02 5.97211682e-02 2.47618026e-03 7.18197378e-01 3.12001813e+03 -3.45100000e-04 -1.65360702e-12 7.16587487e-02 5.68902287e-02 9.10532361e-02 5.97246140e-02 2.47579468e-03 7.18197378e-01 3.12001813e+03 -3.45200000e-04 -1.65360702e-12 7.16569245e-02 5.68868496e-02 9.10553867e-02 5.97280513e-02 2.47541005e-03 7.18197378e-01 3.12001813e+03 -3.45300000e-04 -1.65360702e-12 7.16551047e-02 5.68834789e-02 9.10575320e-02 5.97314801e-02 2.47502637e-03 7.18197378e-01 3.12001813e+03 -3.45400000e-04 -1.65360702e-12 7.16532893e-02 5.68801166e-02 9.10596720e-02 5.97349006e-02 2.47464363e-03 7.18197378e-01 3.12031448e+03 -3.45500000e-04 -1.65360702e-12 7.16514784e-02 5.68767626e-02 9.10618067e-02 5.97383126e-02 2.47426182e-03 7.18197378e-01 3.12031448e+03 -3.45600000e-04 -1.65360702e-12 7.16496719e-02 5.68734170e-02 9.10639361e-02 5.97417163e-02 2.47388096e-03 7.18197378e-01 3.12031448e+03 -3.45700000e-04 -1.65360702e-12 7.16478698e-02 5.68700796e-02 9.10660602e-02 5.97451116e-02 2.47350103e-03 7.18197378e-01 3.12031448e+03 -3.45800000e-04 -1.65360702e-12 7.16460720e-02 5.68667505e-02 9.10681790e-02 5.97484986e-02 2.47312203e-03 7.18197378e-01 3.12031448e+03 -3.45900000e-04 -1.65360702e-12 7.16442787e-02 5.68634297e-02 9.10702925e-02 5.97518772e-02 2.47274397e-03 7.18197378e-01 3.12031448e+03 -3.46000000e-04 -1.65360702e-12 7.16424898e-02 5.68601171e-02 9.10724009e-02 5.97552476e-02 2.47236683e-03 7.18197378e-01 3.12031448e+03 -3.46100000e-04 -1.65360702e-12 7.16407052e-02 5.68568128e-02 9.10745039e-02 5.97586097e-02 2.47199062e-03 7.18197378e-01 3.12031448e+03 -3.46200000e-04 -1.65360702e-12 7.16389249e-02 5.68535166e-02 9.10766018e-02 5.97619635e-02 2.47161534e-03 7.18197378e-01 3.12031448e+03 -3.46300000e-04 -1.65360702e-12 7.16371490e-02 5.68502287e-02 9.10786944e-02 5.97653090e-02 2.47124097e-03 7.18197378e-01 3.12031448e+03 -3.46400000e-04 -1.65360702e-12 7.16353775e-02 5.68469489e-02 9.10807819e-02 5.97686464e-02 2.47086753e-03 7.18197378e-01 3.12031448e+03 -3.46500000e-04 -1.65360702e-12 7.16336103e-02 5.68436772e-02 9.10828642e-02 5.97719755e-02 2.47049500e-03 7.18197378e-01 3.12031448e+03 -3.46600000e-04 -1.65360702e-12 7.16318473e-02 5.68404137e-02 9.10849413e-02 5.97752965e-02 2.47012339e-03 7.18197378e-01 3.12031448e+03 -3.46700000e-04 -1.65360702e-12 7.16300887e-02 5.68371582e-02 9.10870132e-02 5.97786092e-02 2.46975270e-03 7.18197378e-01 3.12031448e+03 -3.46800000e-04 -1.65360702e-12 7.16283344e-02 5.68339109e-02 9.10890800e-02 5.97819139e-02 2.46938291e-03 7.18197378e-01 3.12060100e+03 -3.46900000e-04 -1.65360702e-12 7.16265844e-02 5.68306716e-02 9.10911417e-02 5.97852104e-02 2.46901404e-03 7.18197378e-01 3.12060100e+03 -3.47000000e-04 -1.65360702e-12 7.16248386e-02 5.68274404e-02 9.10931982e-02 5.97884988e-02 2.46864607e-03 7.18197378e-01 3.12060100e+03 -3.47100000e-04 -1.65360702e-12 7.16230971e-02 5.68242172e-02 9.10952497e-02 5.97917791e-02 2.46827901e-03 7.18197378e-01 3.12060100e+03 -3.47200000e-04 -1.65360702e-12 7.16213599e-02 5.68210020e-02 9.10972960e-02 5.97950514e-02 2.46791285e-03 7.18197378e-01 3.12060100e+03 -3.47300000e-04 -1.65360702e-12 7.16196269e-02 5.68177947e-02 9.10993373e-02 5.97983156e-02 2.46754759e-03 7.18197378e-01 3.12060100e+03 -3.47400000e-04 -1.65360702e-12 7.16178982e-02 5.68145955e-02 9.11013735e-02 5.98015718e-02 2.46718323e-03 7.18197378e-01 3.12060100e+03 -3.47500000e-04 -1.65360702e-12 7.16161736e-02 5.68114042e-02 9.11034046e-02 5.98048199e-02 2.46681977e-03 7.18197378e-01 3.12060100e+03 -3.47600000e-04 -1.65360702e-12 7.16144533e-02 5.68082208e-02 9.11054307e-02 5.98080601e-02 2.46645720e-03 7.18197378e-01 3.12060100e+03 -3.47700000e-04 -1.65360702e-12 7.16127372e-02 5.68050454e-02 9.11074517e-02 5.98112923e-02 2.46609552e-03 7.18197378e-01 3.12060100e+03 -3.47800000e-04 -1.65360702e-12 7.16110253e-02 5.68018778e-02 9.11094677e-02 5.98145165e-02 2.46573473e-03 7.18197378e-01 3.12060100e+03 -3.47900000e-04 -1.65360702e-12 7.16093176e-02 5.67987181e-02 9.11114788e-02 5.98177328e-02 2.46537483e-03 7.18197378e-01 3.12060100e+03 -3.48000000e-04 -1.65360702e-12 7.16076140e-02 5.67955663e-02 9.11134848e-02 5.98209412e-02 2.46501582e-03 7.18197378e-01 3.12060100e+03 -3.48100000e-04 -1.65360702e-12 7.16059147e-02 5.67924223e-02 9.11154858e-02 5.98241417e-02 2.46465769e-03 7.18197378e-01 3.12060100e+03 -3.48200000e-04 -1.65360702e-12 7.16042194e-02 5.67892861e-02 9.11174818e-02 5.98273343e-02 2.46430044e-03 7.18197378e-01 3.12090657e+03 -3.48300000e-04 -1.65360702e-12 7.16025284e-02 5.67861577e-02 9.11194729e-02 5.98305191e-02 2.46394408e-03 7.18197378e-01 3.12090657e+03 -3.48400000e-04 -1.65360702e-12 7.16008414e-02 5.67830371e-02 9.11214591e-02 5.98336960e-02 2.46358859e-03 7.18197378e-01 3.12090657e+03 -3.48500000e-04 -1.65360702e-12 7.15991586e-02 5.67799242e-02 9.11234403e-02 5.98368650e-02 2.46323397e-03 7.18197378e-01 3.12090657e+03 -3.48600000e-04 -1.65360702e-12 7.15974799e-02 5.67768191e-02 9.11254165e-02 5.98400263e-02 2.46288023e-03 7.18197378e-01 3.12090657e+03 -3.48700000e-04 -1.65360702e-12 7.15958053e-02 5.67737218e-02 9.11273879e-02 5.98431798e-02 2.46252736e-03 7.18197378e-01 3.12090657e+03 -3.48800000e-04 -1.65360702e-12 7.15941349e-02 5.67706321e-02 9.11293544e-02 5.98463255e-02 2.46217536e-03 7.18197378e-01 3.12090657e+03 -3.48900000e-04 -1.65360702e-12 7.15924685e-02 5.67675501e-02 9.11313159e-02 5.98494635e-02 2.46182423e-03 7.18197378e-01 3.12090657e+03 -3.49000000e-04 -1.65360702e-12 7.15908061e-02 5.67644757e-02 9.11332726e-02 5.98525937e-02 2.46147396e-03 7.18197378e-01 3.12090657e+03 -3.49100000e-04 -1.65360702e-12 7.15891479e-02 5.67614091e-02 9.11352244e-02 5.98557162e-02 2.46112456e-03 7.18197378e-01 3.12090657e+03 -3.49200000e-04 -1.65360702e-12 7.15874937e-02 5.67583500e-02 9.11371714e-02 5.98588310e-02 2.46077601e-03 7.18197378e-01 3.12090657e+03 -3.49300000e-04 -1.65360702e-12 7.15858436e-02 5.67552986e-02 9.11391135e-02 5.98619382e-02 2.46042833e-03 7.18197378e-01 3.12090657e+03 -3.49400000e-04 -1.65360702e-12 7.15841975e-02 5.67522547e-02 9.11410508e-02 5.98650377e-02 2.46008150e-03 7.18197378e-01 3.12090657e+03 -3.49500000e-04 -1.65360702e-12 7.15825554e-02 5.67492184e-02 9.11429832e-02 5.98681295e-02 2.45973553e-03 7.18197378e-01 3.12090657e+03 -3.49600000e-04 -1.65360702e-12 7.15809174e-02 5.67461897e-02 9.11449109e-02 5.98712137e-02 2.45939041e-03 7.18197378e-01 3.12090657e+03 -3.49700000e-04 -1.65360702e-12 7.15792834e-02 5.67431685e-02 9.11468337e-02 5.98742903e-02 2.45904614e-03 7.18197378e-01 3.12120094e+03 -3.49800000e-04 -1.65360702e-12 7.15776534e-02 5.67401549e-02 9.11487518e-02 5.98773594e-02 2.45870273e-03 7.18197378e-01 3.12120094e+03 -3.49900000e-04 -1.65360702e-12 7.15760274e-02 5.67371487e-02 9.11506651e-02 5.98804208e-02 2.45836015e-03 7.18197378e-01 3.12120094e+03 -3.50000000e-04 -1.65360702e-12 7.15744053e-02 5.67341500e-02 9.11525736e-02 5.98834747e-02 2.45801843e-03 7.18197378e-01 3.12120094e+03 -3.50100000e-04 -1.65360702e-12 7.15727873e-02 5.67311588e-02 9.11544774e-02 5.98865211e-02 2.45767754e-03 7.18197378e-01 3.12120094e+03 -3.50200000e-04 -1.65360702e-12 7.15711732e-02 5.67281751e-02 9.11563765e-02 5.98895599e-02 2.45733750e-03 7.18197378e-01 3.12120094e+03 -3.50300000e-04 -1.65360702e-12 7.15695630e-02 5.67251987e-02 9.11582708e-02 5.98925913e-02 2.45699830e-03 7.18197378e-01 3.12120094e+03 -3.50400000e-04 -1.65360702e-12 7.15679569e-02 5.67222298e-02 9.11601604e-02 5.98956152e-02 2.45665993e-03 7.18197378e-01 3.12120094e+03 -3.50500000e-04 -1.65360702e-12 7.15663546e-02 5.67192683e-02 9.11620453e-02 5.98986316e-02 2.45632240e-03 7.18197378e-01 3.12120094e+03 -3.50600000e-04 -1.65360702e-12 7.15647563e-02 5.67163141e-02 9.11639255e-02 5.99016406e-02 2.45598570e-03 7.18197378e-01 3.12120094e+03 -3.50700000e-04 -1.65360702e-12 7.15631619e-02 5.67133673e-02 9.11658010e-02 5.99046421e-02 2.45564983e-03 7.18197378e-01 3.12120094e+03 -3.50800000e-04 -1.65360702e-12 7.15615714e-02 5.67104279e-02 9.11676718e-02 5.99076363e-02 2.45531479e-03 7.18197378e-01 3.12120094e+03 -3.50900000e-04 -1.65360702e-12 7.15599848e-02 5.67074957e-02 9.11695380e-02 5.99106230e-02 2.45498058e-03 7.18197378e-01 3.12120094e+03 -3.51000000e-04 -1.65360702e-12 7.15584021e-02 5.67045709e-02 9.11713995e-02 5.99136024e-02 2.45464719e-03 7.18197378e-01 3.12120094e+03 -3.51100000e-04 -1.65360702e-12 7.15568233e-02 5.67016534e-02 9.11732564e-02 5.99165744e-02 2.45431463e-03 7.18197378e-01 3.12120094e+03 -3.51200000e-04 -1.65360702e-12 7.15552484e-02 5.66987431e-02 9.11751087e-02 5.99195391e-02 2.45398288e-03 7.18197378e-01 3.12148448e+03 -3.51300000e-04 -1.65360702e-12 7.15536773e-02 5.66958401e-02 9.11769563e-02 5.99224964e-02 2.45365196e-03 7.18197378e-01 3.12148448e+03 -3.51400000e-04 -1.65360702e-12 7.15521101e-02 5.66929443e-02 9.11787994e-02 5.99254465e-02 2.45332186e-03 7.18197378e-01 3.12148448e+03 -3.51500000e-04 -1.65360702e-12 7.15505468e-02 5.66900557e-02 9.11806378e-02 5.99283892e-02 2.45299256e-03 7.18197378e-01 3.12148448e+03 -3.51600000e-04 -1.65360702e-12 7.15489873e-02 5.66871743e-02 9.11824717e-02 5.99313247e-02 2.45266409e-03 7.18197378e-01 3.12148448e+03 -3.51700000e-04 -1.65360702e-12 7.15474316e-02 5.66843001e-02 9.11843010e-02 5.99342530e-02 2.45233642e-03 7.18197378e-01 3.12148448e+03 -3.51800000e-04 -1.65360702e-12 7.15458797e-02 5.66814331e-02 9.11861258e-02 5.99371740e-02 2.45200957e-03 7.18197378e-01 3.12148448e+03 -3.51900000e-04 -1.65360702e-12 7.15443316e-02 5.66785732e-02 9.11879460e-02 5.99400878e-02 2.45168352e-03 7.18197378e-01 3.12148448e+03 -3.52000000e-04 -1.65360702e-12 7.15427874e-02 5.66757205e-02 9.11897616e-02 5.99429944e-02 2.45135827e-03 7.18197378e-01 3.12148448e+03 -3.52100000e-04 -1.65360702e-12 7.15412469e-02 5.66728748e-02 9.11915728e-02 5.99458938e-02 2.45103383e-03 7.18197378e-01 3.12148448e+03 -3.52200000e-04 -1.65360702e-12 7.15397103e-02 5.66700363e-02 9.11933794e-02 5.99487860e-02 2.45071020e-03 7.18197378e-01 3.12148448e+03 -3.52300000e-04 -1.65360702e-12 7.15381774e-02 5.66672048e-02 9.11951815e-02 5.99516711e-02 2.45038736e-03 7.18197378e-01 3.12148448e+03 -3.52400000e-04 -1.65360702e-12 7.15366482e-02 5.66643804e-02 9.11969791e-02 5.99545491e-02 2.45006532e-03 7.18197378e-01 3.12148448e+03 -3.52500000e-04 -1.65360702e-12 7.15351228e-02 5.66615630e-02 9.11987722e-02 5.99574199e-02 2.44974408e-03 7.18197378e-01 3.12148448e+03 -3.52600000e-04 -1.65360702e-12 7.15336012e-02 5.66587527e-02 9.12005609e-02 5.99602837e-02 2.44942363e-03 7.18197378e-01 3.12148448e+03 -3.52700000e-04 -1.65360702e-12 7.15320833e-02 5.66559494e-02 9.12023451e-02 5.99631404e-02 2.44910397e-03 7.18197378e-01 3.12175758e+03 -3.52800000e-04 -1.65360702e-12 7.15305692e-02 5.66531530e-02 9.12041249e-02 5.99659900e-02 2.44878511e-03 7.18197378e-01 3.12175758e+03 -3.52900000e-04 -1.65360702e-12 7.15290587e-02 5.66503637e-02 9.12059002e-02 5.99688325e-02 2.44846703e-03 7.18197378e-01 3.12175758e+03 -3.53000000e-04 -1.65360702e-12 7.15275520e-02 5.66475813e-02 9.12076711e-02 5.99716681e-02 2.44814974e-03 7.18197378e-01 3.12175758e+03 -3.53100000e-04 -1.65360702e-12 7.15260490e-02 5.66448058e-02 9.12094375e-02 5.99744966e-02 2.44783323e-03 7.18197378e-01 3.12175758e+03 -3.53200000e-04 -1.65360702e-12 7.15245497e-02 5.66420372e-02 9.12111996e-02 5.99773181e-02 2.44751751e-03 7.18197378e-01 3.12175758e+03 -3.53300000e-04 -1.65360702e-12 7.15230541e-02 5.66392756e-02 9.12129573e-02 5.99801326e-02 2.44720257e-03 7.18197378e-01 3.12175758e+03 -3.53400000e-04 -1.65360702e-12 7.15215621e-02 5.66365209e-02 9.12147105e-02 5.99829402e-02 2.44688840e-03 7.18197378e-01 3.12175758e+03 -3.53500000e-04 -1.65360702e-12 7.15200739e-02 5.66337730e-02 9.12164594e-02 5.99857408e-02 2.44657502e-03 7.18197378e-01 3.12175758e+03 -3.53600000e-04 -1.65360702e-12 7.15185892e-02 5.66310320e-02 9.12182040e-02 5.99885345e-02 2.44626241e-03 7.18197378e-01 3.12175758e+03 -3.53700000e-04 -1.65360702e-12 7.15171083e-02 5.66282978e-02 9.12199442e-02 5.99913213e-02 2.44595057e-03 7.18197378e-01 3.12175758e+03 -3.53800000e-04 -1.65360702e-12 7.15156310e-02 5.66255705e-02 9.12216800e-02 5.99941012e-02 2.44563951e-03 7.18197378e-01 3.12175758e+03 -3.53900000e-04 -1.65360702e-12 7.15141573e-02 5.66228499e-02 9.12234115e-02 5.99968742e-02 2.44532921e-03 7.18197378e-01 3.12175758e+03 -3.54000000e-04 -1.65360702e-12 7.15126872e-02 5.66201362e-02 9.12251387e-02 5.99996404e-02 2.44501968e-03 7.18197378e-01 3.12175758e+03 -3.54100000e-04 -1.65360702e-12 7.15112208e-02 5.66174292e-02 9.12268616e-02 6.00023996e-02 2.44471092e-03 7.18197378e-01 3.12175758e+03 -3.54200000e-04 -1.65360702e-12 7.15097580e-02 5.66147290e-02 9.12285802e-02 6.00051521e-02 2.44440293e-03 7.18197378e-01 3.12175758e+03 -3.54300000e-04 -1.65360702e-12 7.15082987e-02 5.66120355e-02 9.12302945e-02 6.00078978e-02 2.44409569e-03 7.18197378e-01 3.12202061e+03 -3.54400000e-04 -1.65360702e-12 7.15068431e-02 5.66093487e-02 9.12320045e-02 6.00106366e-02 2.44378922e-03 7.18197378e-01 3.12202061e+03 -3.54500000e-04 -1.65360702e-12 7.15053911e-02 5.66066687e-02 9.12337102e-02 6.00133687e-02 2.44348351e-03 7.18197378e-01 3.12202061e+03 -3.54600000e-04 -1.65360702e-12 7.15039426e-02 5.66039954e-02 9.12354117e-02 6.00160940e-02 2.44317855e-03 7.18197378e-01 3.12202061e+03 -3.54700000e-04 -1.65360702e-12 7.15024977e-02 5.66013287e-02 9.12371089e-02 6.00188125e-02 2.44287435e-03 7.18197378e-01 3.12202061e+03 -3.54800000e-04 -1.65360702e-12 7.15010564e-02 5.65986687e-02 9.12388019e-02 6.00215243e-02 2.44257090e-03 7.18197378e-01 3.12202061e+03 -3.54900000e-04 -1.65360702e-12 7.14996186e-02 5.65960153e-02 9.12404906e-02 6.00242294e-02 2.44226821e-03 7.18197378e-01 3.12202061e+03 -3.55000000e-04 -1.65360702e-12 7.14981843e-02 5.65933685e-02 9.12421752e-02 6.00269278e-02 2.44196626e-03 7.18197378e-01 3.12202061e+03 -3.55100000e-04 -1.65360702e-12 7.14967536e-02 5.65907284e-02 9.12438555e-02 6.00296195e-02 2.44166506e-03 7.18197378e-01 3.12202061e+03 -3.55200000e-04 -1.65360702e-12 7.14953264e-02 5.65880949e-02 9.12455317e-02 6.00323046e-02 2.44136461e-03 7.18197378e-01 3.12202061e+03 -3.55300000e-04 -1.65360702e-12 7.14939028e-02 5.65854679e-02 9.12472036e-02 6.00349830e-02 2.44106490e-03 7.18197378e-01 3.12202061e+03 -3.55400000e-04 -1.65360702e-12 7.14924826e-02 5.65828475e-02 9.12488714e-02 6.00376547e-02 2.44076594e-03 7.18197378e-01 3.12202061e+03 -3.55500000e-04 -1.65360702e-12 7.14910659e-02 5.65802337e-02 9.12505350e-02 6.00403198e-02 2.44046772e-03 7.18197378e-01 3.12202061e+03 -3.55600000e-04 -1.65360702e-12 7.14896528e-02 5.65776264e-02 9.12521944e-02 6.00429784e-02 2.44017023e-03 7.18197378e-01 3.12202061e+03 -3.55700000e-04 -1.65360702e-12 7.14882431e-02 5.65750256e-02 9.12538497e-02 6.00456303e-02 2.43987349e-03 7.18197378e-01 3.12202061e+03 -3.55800000e-04 -1.65360702e-12 7.14868369e-02 5.65724312e-02 9.12555009e-02 6.00482757e-02 2.43957747e-03 7.18197378e-01 3.12227392e+03 -3.55900000e-04 -1.65360702e-12 7.14854341e-02 5.65698434e-02 9.12571479e-02 6.00509145e-02 2.43928220e-03 7.18197378e-01 3.12227392e+03 -3.56000000e-04 -1.65360702e-12 7.14840348e-02 5.65672621e-02 9.12587909e-02 6.00535467e-02 2.43898765e-03 7.18197378e-01 3.12227392e+03 -3.56100000e-04 -1.65360702e-12 7.14826390e-02 5.65646872e-02 9.12604297e-02 6.00561724e-02 2.43869384e-03 7.18197378e-01 3.12227392e+03 -3.56200000e-04 -1.65360702e-12 7.14812466e-02 5.65621187e-02 9.12620644e-02 6.00587917e-02 2.43840075e-03 7.18197378e-01 3.12227392e+03 -3.56300000e-04 -1.65360702e-12 7.14798577e-02 5.65595567e-02 9.12636950e-02 6.00614044e-02 2.43810839e-03 7.18197378e-01 3.12227392e+03 -3.56400000e-04 -1.65360702e-12 7.14784722e-02 5.65570010e-02 9.12653216e-02 6.00640106e-02 2.43781676e-03 7.18197378e-01 3.12227392e+03 -3.56500000e-04 -1.65360702e-12 7.14770901e-02 5.65544518e-02 9.12669441e-02 6.00666104e-02 2.43752585e-03 7.18197378e-01 3.12227392e+03 -3.56600000e-04 -1.65360702e-12 7.14757114e-02 5.65519089e-02 9.12685625e-02 6.00692037e-02 2.43723566e-03 7.18197378e-01 3.12227392e+03 -3.56700000e-04 -1.65360702e-12 7.14743361e-02 5.65493724e-02 9.12701769e-02 6.00717906e-02 2.43694619e-03 7.18197378e-01 3.12227392e+03 -3.56800000e-04 -1.65360702e-12 7.14729642e-02 5.65468422e-02 9.12717873e-02 6.00743711e-02 2.43665744e-03 7.18197378e-01 3.12227392e+03 -3.56900000e-04 -1.65360702e-12 7.14715957e-02 5.65443184e-02 9.12733936e-02 6.00769452e-02 2.43636941e-03 7.18197378e-01 3.12227392e+03 -3.57000000e-04 -1.65360702e-12 7.14702305e-02 5.65418008e-02 9.12749959e-02 6.00795128e-02 2.43608209e-03 7.18197378e-01 3.12227392e+03 -3.57100000e-04 -1.65360702e-12 7.14688688e-02 5.65392896e-02 9.12765942e-02 6.00820741e-02 2.43579548e-03 7.18197378e-01 3.12227392e+03 -3.57200000e-04 -1.65360702e-12 7.14675104e-02 5.65367846e-02 9.12781885e-02 6.00846291e-02 2.43550958e-03 7.18197378e-01 3.12227392e+03 -3.57300000e-04 -1.65360702e-12 7.14661553e-02 5.65342859e-02 9.12797788e-02 6.00871777e-02 2.43522440e-03 7.18197378e-01 3.12251787e+03 -3.57400000e-04 -1.65360702e-12 7.14648036e-02 5.65317935e-02 9.12813651e-02 6.00897200e-02 2.43493992e-03 7.18197378e-01 3.12251787e+03 -3.57500000e-04 -1.65360702e-12 7.14634552e-02 5.65293073e-02 9.12829475e-02 6.00922560e-02 2.43465615e-03 7.18197378e-01 3.12251787e+03 -3.57600000e-04 -1.65360702e-12 7.14621102e-02 5.65268273e-02 9.12845259e-02 6.00947857e-02 2.43437308e-03 7.18197378e-01 3.12251787e+03 -3.57700000e-04 -1.65360702e-12 7.14607685e-02 5.65243535e-02 9.12861004e-02 6.00973091e-02 2.43409072e-03 7.18197378e-01 3.12251787e+03 -3.57800000e-04 -1.65360702e-12 7.14594301e-02 5.65218859e-02 9.12876709e-02 6.00998262e-02 2.43380906e-03 7.18197378e-01 3.12251787e+03 -3.57900000e-04 -1.65360702e-12 7.14580950e-02 5.65194245e-02 9.12892375e-02 6.01023371e-02 2.43352809e-03 7.18197378e-01 3.12251787e+03 -3.58000000e-04 -1.65360702e-12 7.14567632e-02 5.65169692e-02 9.12908002e-02 6.01048417e-02 2.43324783e-03 7.18197378e-01 3.12251787e+03 -3.58100000e-04 -1.65360702e-12 7.14554347e-02 5.65145201e-02 9.12923589e-02 6.01073401e-02 2.43296826e-03 7.18197378e-01 3.12251787e+03 -3.58200000e-04 -1.65360702e-12 7.14541095e-02 5.65120771e-02 9.12939138e-02 6.01098324e-02 2.43268938e-03 7.18197378e-01 3.12251787e+03 -3.58300000e-04 -1.65360702e-12 7.14527876e-02 5.65096402e-02 9.12954648e-02 6.01123184e-02 2.43241120e-03 7.18197378e-01 3.12251787e+03 -3.58400000e-04 -1.65360702e-12 7.14514689e-02 5.65072094e-02 9.12970119e-02 6.01147982e-02 2.43213371e-03 7.18197378e-01 3.12251787e+03 -3.58500000e-04 -1.65360702e-12 7.14501535e-02 5.65047847e-02 9.12985551e-02 6.01172719e-02 2.43185690e-03 7.18197378e-01 3.12251787e+03 -3.58600000e-04 -1.65360702e-12 7.14488413e-02 5.65023661e-02 9.13000944e-02 6.01197395e-02 2.43158079e-03 7.18197378e-01 3.12251787e+03 -3.58700000e-04 -1.65360702e-12 7.14475324e-02 5.64999536e-02 9.13016299e-02 6.01222009e-02 2.43130536e-03 7.18197378e-01 3.12251787e+03 -3.58800000e-04 -1.65360702e-12 7.14462267e-02 5.64975470e-02 9.13031616e-02 6.01246562e-02 2.43103062e-03 7.18197378e-01 3.12275278e+03 -3.58900000e-04 -1.65360702e-12 7.14449243e-02 5.64951465e-02 9.13046894e-02 6.01271054e-02 2.43075656e-03 7.18197378e-01 3.12275278e+03 -3.59000000e-04 -1.65360702e-12 7.14436250e-02 5.64927520e-02 9.13062134e-02 6.01295485e-02 2.43048318e-03 7.18197378e-01 3.12275278e+03 -3.59100000e-04 -1.65360702e-12 7.14423290e-02 5.64903635e-02 9.13077336e-02 6.01319855e-02 2.43021048e-03 7.18197378e-01 3.12275278e+03 -3.59200000e-04 -1.65360702e-12 7.14410362e-02 5.64879810e-02 9.13092500e-02 6.01344165e-02 2.42993845e-03 7.18197378e-01 3.12275278e+03 -3.59300000e-04 -1.65360702e-12 7.14397466e-02 5.64856045e-02 9.13107625e-02 6.01368415e-02 2.42966711e-03 7.18197378e-01 3.12275278e+03 -3.59400000e-04 -1.65360702e-12 7.14384602e-02 5.64832339e-02 9.13122713e-02 6.01392604e-02 2.42939644e-03 7.18197378e-01 3.12275278e+03 -3.59500000e-04 -1.65360702e-12 7.14371769e-02 5.64808692e-02 9.13137763e-02 6.01416733e-02 2.42912644e-03 7.18197378e-01 3.12275278e+03 -3.59600000e-04 -1.65360702e-12 7.14358969e-02 5.64785104e-02 9.13152776e-02 6.01440802e-02 2.42885711e-03 7.18197378e-01 3.12275278e+03 -3.59700000e-04 -1.65360702e-12 7.14346200e-02 5.64761576e-02 9.13167751e-02 6.01464811e-02 2.42858845e-03 7.18197378e-01 3.12275278e+03 -3.59800000e-04 -1.65360702e-12 7.14333462e-02 5.64738107e-02 9.13182688e-02 6.01488760e-02 2.42832046e-03 7.18197378e-01 3.12275278e+03 -3.59900000e-04 -1.65360702e-12 7.14320756e-02 5.64714696e-02 9.13197588e-02 6.01512650e-02 2.42805314e-03 7.18197378e-01 3.12275278e+03 -3.60000000e-04 -1.65360702e-12 7.14308082e-02 5.64691344e-02 9.13212450e-02 6.01536480e-02 2.42778648e-03 7.18197378e-01 3.12275278e+03 -3.60100000e-04 -1.65360702e-12 7.14295439e-02 5.64668051e-02 9.13227276e-02 6.01560252e-02 2.42752048e-03 7.18197378e-01 3.12275278e+03 -3.60200000e-04 -1.65360702e-12 7.14282827e-02 5.64644816e-02 9.13242064e-02 6.01583964e-02 2.42725515e-03 7.18197378e-01 3.12275278e+03 -3.60300000e-04 -1.65360702e-12 7.14270247e-02 5.64621639e-02 9.13256815e-02 6.01607617e-02 2.42699048e-03 7.18197378e-01 3.12275278e+03 -3.60400000e-04 -1.65360702e-12 7.14257697e-02 5.64598520e-02 9.13271529e-02 6.01631211e-02 2.42672646e-03 7.18197378e-01 3.12309235e+03 -3.60500000e-04 -1.65360702e-12 7.14245179e-02 5.64575459e-02 9.13286206e-02 6.01654746e-02 2.42646310e-03 7.18197378e-01 3.12309235e+03 -3.60600000e-04 -1.65360702e-12 7.14232692e-02 5.64552456e-02 9.13300847e-02 6.01678223e-02 2.42620040e-03 7.18197378e-01 3.12309235e+03 -3.60700000e-04 -1.65360702e-12 7.14220235e-02 5.64529510e-02 9.13315451e-02 6.01701642e-02 2.42593835e-03 7.18197378e-01 3.12309235e+03 -3.60800000e-04 -1.65360702e-12 7.14207810e-02 5.64506623e-02 9.13330018e-02 6.01725002e-02 2.42567696e-03 7.18197378e-01 3.12309235e+03 -3.60900000e-04 -1.65360702e-12 7.14195415e-02 5.64483792e-02 9.13344549e-02 6.01748304e-02 2.42541621e-03 7.18197378e-01 3.12309235e+03 -3.61000000e-04 -1.65360702e-12 7.14183051e-02 5.64461019e-02 9.13359043e-02 6.01771548e-02 2.42515611e-03 7.18197378e-01 3.12309235e+03 -3.61100000e-04 -1.65360702e-12 7.14170718e-02 5.64438302e-02 9.13373501e-02 6.01794734e-02 2.42489666e-03 7.18197378e-01 3.12309235e+03 -3.61200000e-04 -1.65360702e-12 7.14158415e-02 5.64415643e-02 9.13387923e-02 6.01817863e-02 2.42463786e-03 7.18197378e-01 3.12309235e+03 -3.61300000e-04 -1.65360702e-12 7.14146142e-02 5.64393040e-02 9.13402308e-02 6.01840934e-02 2.42437970e-03 7.18197378e-01 3.12309235e+03 -3.61400000e-04 -1.65360702e-12 7.14133900e-02 5.64370495e-02 9.13416658e-02 6.01863947e-02 2.42412218e-03 7.18197378e-01 3.12309235e+03 -3.61500000e-04 -1.65360702e-12 7.14121689e-02 5.64348005e-02 9.13430971e-02 6.01886903e-02 2.42386531e-03 7.18197378e-01 3.12309235e+03 -3.61600000e-04 -1.65360702e-12 7.14109508e-02 5.64325572e-02 9.13445249e-02 6.01909802e-02 2.42360907e-03 7.18197378e-01 3.12309235e+03 -3.61700000e-04 -1.65360702e-12 7.14097356e-02 5.64303196e-02 9.13459491e-02 6.01932644e-02 2.42335347e-03 7.18197378e-01 3.12309235e+03 -3.61800000e-04 -1.65360702e-12 7.14085235e-02 5.64280875e-02 9.13473697e-02 6.01955429e-02 2.42309851e-03 7.18197378e-01 3.12309235e+03 -3.61900000e-04 -1.65360702e-12 7.14073144e-02 5.64258610e-02 9.13487867e-02 6.01978158e-02 2.42284418e-03 7.18197378e-01 3.12309235e+03 -3.62000000e-04 -1.65360702e-12 7.14061083e-02 5.64236402e-02 9.13502002e-02 6.02000829e-02 2.42259049e-03 7.18197378e-01 3.12309235e+03 -3.62100000e-04 -1.65360702e-12 7.14049052e-02 5.64214249e-02 9.13516102e-02 6.02023445e-02 2.42233743e-03 7.18197378e-01 3.12309235e+03 -3.62200000e-04 -1.65360702e-12 7.14037051e-02 5.64192151e-02 9.13530166e-02 6.02046004e-02 2.42208500e-03 7.18197378e-01 3.12309235e+03 -3.62300000e-04 -1.65360702e-12 7.14025080e-02 5.64170109e-02 9.13544195e-02 6.02068506e-02 2.42183320e-03 7.18197378e-01 3.12309235e+03 -3.62400000e-04 -1.65360702e-12 7.14013138e-02 5.64148122e-02 9.13558188e-02 6.02090953e-02 2.42158202e-03 7.18197378e-01 3.12309235e+03 -3.62500000e-04 -1.65360702e-12 7.14001226e-02 5.64126191e-02 9.13572147e-02 6.02113344e-02 2.42133147e-03 7.18197378e-01 3.12309235e+03 -3.62600000e-04 -1.65360702e-12 7.13989343e-02 5.64104314e-02 9.13586070e-02 6.02135679e-02 2.42108155e-03 7.18197378e-01 3.12309235e+03 -3.62700000e-04 -1.65360702e-12 7.13977490e-02 5.64082492e-02 9.13599959e-02 6.02157958e-02 2.42083225e-03 7.18197378e-01 3.12341299e+03 -3.62800000e-04 -1.65360702e-12 7.13965666e-02 5.64060725e-02 9.13613813e-02 6.02180182e-02 2.42058357e-03 7.18197378e-01 3.12341299e+03 -3.62900000e-04 -1.65360702e-12 7.13953872e-02 5.64039013e-02 9.13627632e-02 6.02202350e-02 2.42033551e-03 7.18197378e-01 3.12341299e+03 -3.63000000e-04 -1.65360702e-12 7.13942106e-02 5.64017355e-02 9.13641416e-02 6.02224463e-02 2.42008806e-03 7.18197378e-01 3.12341299e+03 -3.63100000e-04 -1.65360702e-12 7.13930370e-02 5.63995751e-02 9.13655166e-02 6.02246521e-02 2.41984124e-03 7.18197378e-01 3.12341299e+03 -3.63200000e-04 -1.65360702e-12 7.13918664e-02 5.63974202e-02 9.13668881e-02 6.02268524e-02 2.41959503e-03 7.18197378e-01 3.12341299e+03 -3.63300000e-04 -1.65360702e-12 7.13906986e-02 5.63952707e-02 9.13682562e-02 6.02290472e-02 2.41934943e-03 7.18197378e-01 3.12341299e+03 -3.63400000e-04 -1.65360702e-12 7.13895337e-02 5.63931265e-02 9.13696209e-02 6.02312366e-02 2.41910445e-03 7.18197378e-01 3.12341299e+03 -3.63500000e-04 -1.65360702e-12 7.13883717e-02 5.63909878e-02 9.13709821e-02 6.02334205e-02 2.41886008e-03 7.18197378e-01 3.12341299e+03 -3.63600000e-04 -1.65360702e-12 7.13872126e-02 5.63888544e-02 9.13723399e-02 6.02355989e-02 2.41861631e-03 7.18197378e-01 3.12341299e+03 -3.63700000e-04 -1.65360702e-12 7.13860564e-02 5.63867264e-02 9.13736943e-02 6.02377719e-02 2.41837316e-03 7.18197378e-01 3.12341299e+03 -3.63800000e-04 -1.65360702e-12 7.13849030e-02 5.63846037e-02 9.13750453e-02 6.02399395e-02 2.41813061e-03 7.18197378e-01 3.12341299e+03 -3.63900000e-04 -1.65360702e-12 7.13837525e-02 5.63824863e-02 9.13763929e-02 6.02421017e-02 2.41788866e-03 7.18197378e-01 3.12341299e+03 -3.64000000e-04 -1.65360702e-12 7.13826049e-02 5.63803743e-02 9.13777371e-02 6.02442585e-02 2.41764732e-03 7.18197378e-01 3.12341299e+03 -3.64100000e-04 -1.65360702e-12 7.13814601e-02 5.63782675e-02 9.13790780e-02 6.02464099e-02 2.41740658e-03 7.18197378e-01 3.12341299e+03 -3.64200000e-04 -1.65360702e-12 7.13803182e-02 5.63761661e-02 9.13804155e-02 6.02485559e-02 2.41716644e-03 7.18197378e-01 3.12341299e+03 -3.64300000e-04 -1.65360702e-12 7.13791791e-02 5.63740699e-02 9.13817496e-02 6.02506966e-02 2.41692690e-03 7.18197378e-01 3.12341299e+03 -3.64400000e-04 -1.65360702e-12 7.13780428e-02 5.63719790e-02 9.13830804e-02 6.02528320e-02 2.41668796e-03 7.18197378e-01 3.12341299e+03 -3.64500000e-04 -1.65360702e-12 7.13769094e-02 5.63698933e-02 9.13844078e-02 6.02549620e-02 2.41644961e-03 7.18197378e-01 3.12341299e+03 -3.64600000e-04 -1.65360702e-12 7.13757787e-02 5.63678129e-02 9.13857319e-02 6.02570867e-02 2.41621186e-03 7.18197378e-01 3.12341299e+03 -3.64700000e-04 -1.65360702e-12 7.13746509e-02 5.63657377e-02 9.13870527e-02 6.02592061e-02 2.41597470e-03 7.18197378e-01 3.12341299e+03 -3.64800000e-04 -1.65360702e-12 7.13735259e-02 5.63636677e-02 9.13883702e-02 6.02613202e-02 2.41573814e-03 7.18197378e-01 3.12341299e+03 -3.64900000e-04 -1.65360702e-12 7.13724036e-02 5.63616029e-02 9.13896843e-02 6.02634291e-02 2.41550216e-03 7.18197378e-01 3.12341299e+03 -3.65000000e-04 -1.65360702e-12 7.13712842e-02 5.63595433e-02 9.13909952e-02 6.02655327e-02 2.41526678e-03 7.18197378e-01 3.12371571e+03 -3.65100000e-04 -1.65360702e-12 7.13701675e-02 5.63574889e-02 9.13923027e-02 6.02676310e-02 2.41503198e-03 7.18197378e-01 3.12371571e+03 -3.65200000e-04 -1.65360702e-12 7.13690537e-02 5.63554396e-02 9.13936070e-02 6.02697241e-02 2.41479776e-03 7.18197378e-01 3.12371571e+03 -3.65300000e-04 -1.65360702e-12 7.13679426e-02 5.63533955e-02 9.13949080e-02 6.02718119e-02 2.41456413e-03 7.18197378e-01 3.12371571e+03 -3.65400000e-04 -1.65360702e-12 7.13668342e-02 5.63513565e-02 9.13962057e-02 6.02738946e-02 2.41433109e-03 7.18197378e-01 3.12371571e+03 -3.65500000e-04 -1.65360702e-12 7.13657286e-02 5.63493227e-02 9.13975002e-02 6.02759721e-02 2.41409862e-03 7.18197378e-01 3.12371571e+03 -3.65600000e-04 -1.65360702e-12 7.13646258e-02 5.63472939e-02 9.13987914e-02 6.02780443e-02 2.41386674e-03 7.18197378e-01 3.12371571e+03 -3.65700000e-04 -1.65360702e-12 7.13635257e-02 5.63452703e-02 9.14000794e-02 6.02801114e-02 2.41363544e-03 7.18197378e-01 3.12371571e+03 -3.65800000e-04 -1.65360702e-12 7.13624283e-02 5.63432517e-02 9.14013641e-02 6.02821733e-02 2.41340471e-03 7.18197378e-01 3.12371571e+03 -3.65900000e-04 -1.65360702e-12 7.13613336e-02 5.63412382e-02 9.14026456e-02 6.02842301e-02 2.41317456e-03 7.18197378e-01 3.12371571e+03 -3.66000000e-04 -1.65360702e-12 7.13602417e-02 5.63392298e-02 9.14039239e-02 6.02862818e-02 2.41294498e-03 7.18197378e-01 3.12371571e+03 -3.66100000e-04 -1.65360702e-12 7.13591525e-02 5.63372264e-02 9.14051990e-02 6.02883283e-02 2.41271598e-03 7.18197378e-01 3.12371571e+03 -3.66200000e-04 -1.65360702e-12 7.13580660e-02 5.63352280e-02 9.14064709e-02 6.02903697e-02 2.41248755e-03 7.18197378e-01 3.12371571e+03 -3.66300000e-04 -1.65360702e-12 7.13569822e-02 5.63332347e-02 9.14077395e-02 6.02924060e-02 2.41225969e-03 7.18197378e-01 3.12371571e+03 -3.66400000e-04 -1.65360702e-12 7.13559012e-02 5.63312463e-02 9.14090050e-02 6.02944372e-02 2.41203240e-03 7.18197378e-01 3.12371571e+03 -3.66500000e-04 -1.65360702e-12 7.13548227e-02 5.63292630e-02 9.14102673e-02 6.02964634e-02 2.41180568e-03 7.18197378e-01 3.12371571e+03 -3.66600000e-04 -1.65360702e-12 7.13537470e-02 5.63272847e-02 9.14115265e-02 6.02984845e-02 2.41157952e-03 7.18197378e-01 3.12371571e+03 -3.66700000e-04 -1.65360702e-12 7.13526740e-02 5.63253113e-02 9.14127824e-02 6.03005005e-02 2.41135393e-03 7.18197378e-01 3.12371571e+03 -3.66800000e-04 -1.65360702e-12 7.13516036e-02 5.63233429e-02 9.14140352e-02 6.03025115e-02 2.41112890e-03 7.18197378e-01 3.12371571e+03 -3.66900000e-04 -1.65360702e-12 7.13505359e-02 5.63213794e-02 9.14152849e-02 6.03045175e-02 2.41090444e-03 7.18197378e-01 3.12371571e+03 -3.67000000e-04 -1.65360702e-12 7.13494708e-02 5.63194209e-02 9.14165314e-02 6.03065184e-02 2.41068053e-03 7.18197378e-01 3.12371571e+03 -3.67100000e-04 -1.65360702e-12 7.13484084e-02 5.63174673e-02 9.14177748e-02 6.03085144e-02 2.41045719e-03 7.18197378e-01 3.12371571e+03 -3.67200000e-04 -1.65360702e-12 7.13473487e-02 5.63155186e-02 9.14190151e-02 6.03105054e-02 2.41023440e-03 7.18197378e-01 3.12371571e+03 -3.67300000e-04 -1.65360702e-12 7.13462916e-02 5.63135748e-02 9.14202522e-02 6.03124914e-02 2.41001217e-03 7.18197378e-01 3.12400148e+03 -3.67400000e-04 -1.65360702e-12 7.13452371e-02 5.63116359e-02 9.14214862e-02 6.03144724e-02 2.40979050e-03 7.18197378e-01 3.12400148e+03 -3.67500000e-04 -1.65360702e-12 7.13441852e-02 5.63097019e-02 9.14227172e-02 6.03164485e-02 2.40956938e-03 7.18197378e-01 3.12400148e+03 -3.67600000e-04 -1.65360702e-12 7.13431360e-02 5.63077727e-02 9.14239450e-02 6.03184196e-02 2.40934881e-03 7.18197378e-01 3.12400148e+03 -3.67700000e-04 -1.65360702e-12 7.13420893e-02 5.63058484e-02 9.14251697e-02 6.03203858e-02 2.40912879e-03 7.18197378e-01 3.12400148e+03 -3.67800000e-04 -1.65360702e-12 7.13410453e-02 5.63039290e-02 9.14263914e-02 6.03223471e-02 2.40890933e-03 7.18197378e-01 3.12400148e+03 -3.67900000e-04 -1.65360702e-12 7.13400039e-02 5.63020143e-02 9.14276100e-02 6.03243035e-02 2.40869041e-03 7.18197378e-01 3.12400148e+03 -3.68000000e-04 -1.65360702e-12 7.13389651e-02 5.63001045e-02 9.14288255e-02 6.03262550e-02 2.40847204e-03 7.18197378e-01 3.12400148e+03 -3.68100000e-04 -1.65360702e-12 7.13379288e-02 5.62981995e-02 9.14300380e-02 6.03282017e-02 2.40825422e-03 7.18197378e-01 3.12400148e+03 -3.68200000e-04 -1.65360702e-12 7.13368952e-02 5.62962992e-02 9.14312474e-02 6.03301434e-02 2.40803694e-03 7.18197378e-01 3.12400148e+03 -3.68300000e-04 -1.65360702e-12 7.13358641e-02 5.62944038e-02 9.14324538e-02 6.03320803e-02 2.40782020e-03 7.18197378e-01 3.12400148e+03 -3.68400000e-04 -1.65360702e-12 7.13348356e-02 5.62925131e-02 9.14336571e-02 6.03340124e-02 2.40760401e-03 7.18197378e-01 3.12400148e+03 -3.68500000e-04 -1.65360702e-12 7.13338096e-02 5.62906272e-02 9.14348574e-02 6.03359396e-02 2.40738836e-03 7.18197378e-01 3.12400148e+03 -3.68600000e-04 -1.65360702e-12 7.13327862e-02 5.62887460e-02 9.14360547e-02 6.03378620e-02 2.40717324e-03 7.18197378e-01 3.12400148e+03 -3.68700000e-04 -1.65360702e-12 7.13317654e-02 5.62868695e-02 9.14372490e-02 6.03397796e-02 2.40695867e-03 7.18197378e-01 3.12400148e+03 -3.68800000e-04 -1.65360702e-12 7.13307471e-02 5.62849978e-02 9.14384403e-02 6.03416924e-02 2.40674463e-03 7.18197378e-01 3.12400148e+03 -3.68900000e-04 -1.65360702e-12 7.13297313e-02 5.62831308e-02 9.14396286e-02 6.03436004e-02 2.40653113e-03 7.18197378e-01 3.12400148e+03 -3.69000000e-04 -1.65360702e-12 7.13287181e-02 5.62812685e-02 9.14408139e-02 6.03455036e-02 2.40631816e-03 7.18197378e-01 3.12400148e+03 -3.69100000e-04 -1.65360702e-12 7.13277073e-02 5.62794108e-02 9.14419962e-02 6.03474021e-02 2.40610572e-03 7.18197378e-01 3.12400148e+03 -3.69200000e-04 -1.65360702e-12 7.13266992e-02 5.62775579e-02 9.14431755e-02 6.03492958e-02 2.40589382e-03 7.18197378e-01 3.12400148e+03 -3.69300000e-04 -1.65360702e-12 7.13256935e-02 5.62757096e-02 9.14443519e-02 6.03511848e-02 2.40568244e-03 7.18197378e-01 3.12400148e+03 -3.69400000e-04 -1.65360702e-12 7.13246903e-02 5.62738659e-02 9.14455253e-02 6.03530691e-02 2.40547160e-03 7.18197378e-01 3.12400148e+03 -3.69500000e-04 -1.65360702e-12 7.13236896e-02 5.62720269e-02 9.14466957e-02 6.03549486e-02 2.40526128e-03 7.18197378e-01 3.12400148e+03 -3.69600000e-04 -1.65360702e-12 7.13226915e-02 5.62701926e-02 9.14478632e-02 6.03568234e-02 2.40505149e-03 7.18197378e-01 3.12427124e+03 -3.69700000e-04 -1.65360702e-12 7.13216958e-02 5.62683628e-02 9.14490278e-02 6.03586936e-02 2.40484222e-03 7.18197378e-01 3.12427124e+03 -3.69800000e-04 -1.65360702e-12 7.13207026e-02 5.62665377e-02 9.14501894e-02 6.03605590e-02 2.40463348e-03 7.18197378e-01 3.12427124e+03 -3.69900000e-04 -1.65360702e-12 7.13197119e-02 5.62647171e-02 9.14513481e-02 6.03624198e-02 2.40442526e-03 7.18197378e-01 3.12427124e+03 -3.70000000e-04 -1.65360702e-12 7.13187236e-02 5.62629011e-02 9.14525039e-02 6.03642760e-02 2.40421756e-03 7.18197378e-01 3.12427124e+03 -3.70100000e-04 -1.65360702e-12 7.13177378e-02 5.62610897e-02 9.14536568e-02 6.03661275e-02 2.40401038e-03 7.18197378e-01 3.12427124e+03 -3.70200000e-04 -1.65360702e-12 7.13167545e-02 5.62592829e-02 9.14548068e-02 6.03679743e-02 2.40380372e-03 7.18197378e-01 3.12427124e+03 -3.70300000e-04 -1.65360702e-12 7.13157736e-02 5.62574806e-02 9.14559538e-02 6.03698165e-02 2.40359758e-03 7.18197378e-01 3.12427124e+03 -3.70400000e-04 -1.65360702e-12 7.13147952e-02 5.62556828e-02 9.14570980e-02 6.03716541e-02 2.40339196e-03 7.18197378e-01 3.12427124e+03 -3.70500000e-04 -1.65360702e-12 7.13138192e-02 5.62538896e-02 9.14582394e-02 6.03734872e-02 2.40318685e-03 7.18197378e-01 3.12427124e+03 -3.70600000e-04 -1.65360702e-12 7.13128456e-02 5.62521009e-02 9.14593778e-02 6.03753156e-02 2.40298225e-03 7.18197378e-01 3.12427124e+03 -3.70700000e-04 -1.65360702e-12 7.13118745e-02 5.62503167e-02 9.14605134e-02 6.03771394e-02 2.40277816e-03 7.18197378e-01 3.12427124e+03 -3.70800000e-04 -1.65360702e-12 7.13109058e-02 5.62485370e-02 9.14616461e-02 6.03789587e-02 2.40257459e-03 7.18197378e-01 3.12427124e+03 -3.70900000e-04 -1.65360702e-12 7.13099395e-02 5.62467617e-02 9.14627759e-02 6.03807734e-02 2.40237152e-03 7.18197378e-01 3.12427124e+03 -3.71000000e-04 -1.65360702e-12 7.13089756e-02 5.62449910e-02 9.14639030e-02 6.03825836e-02 2.40216897e-03 7.18197378e-01 3.12427124e+03 -3.71100000e-04 -1.65360702e-12 7.13080142e-02 5.62432247e-02 9.14650271e-02 6.03843892e-02 2.40196692e-03 7.18197378e-01 3.12427124e+03 -3.71200000e-04 -1.65360702e-12 7.13070551e-02 5.62414628e-02 9.14661485e-02 6.03861904e-02 2.40176538e-03 7.18197378e-01 3.12427124e+03 -3.71300000e-04 -1.65360702e-12 7.13060984e-02 5.62397054e-02 9.14672670e-02 6.03879870e-02 2.40156434e-03 7.18197378e-01 3.12427124e+03 -3.71400000e-04 -1.65360702e-12 7.13051441e-02 5.62379524e-02 9.14683827e-02 6.03897791e-02 2.40136381e-03 7.18197378e-01 3.12427124e+03 -3.71500000e-04 -1.65360702e-12 7.13041922e-02 5.62362038e-02 9.14694956e-02 6.03915667e-02 2.40116378e-03 7.18197378e-01 3.12427124e+03 -3.71600000e-04 -1.65360702e-12 7.13032427e-02 5.62344597e-02 9.14706057e-02 6.03933498e-02 2.40096425e-03 7.18197378e-01 3.12427124e+03 -3.71700000e-04 -1.65360702e-12 7.13022956e-02 5.62327199e-02 9.14717130e-02 6.03951285e-02 2.40076522e-03 7.18197378e-01 3.12427124e+03 -3.71800000e-04 -1.65360702e-12 7.13013508e-02 5.62309845e-02 9.14728175e-02 6.03969027e-02 2.40056669e-03 7.18197378e-01 3.12427124e+03 -3.71900000e-04 -1.65360702e-12 7.13004083e-02 5.62292535e-02 9.14739192e-02 6.03986724e-02 2.40036865e-03 7.18197378e-01 3.12452585e+03 -3.72000000e-04 -1.65360702e-12 7.12994683e-02 5.62275268e-02 9.14750182e-02 6.04004378e-02 2.40017112e-03 7.18197378e-01 3.12452585e+03 -3.72100000e-04 -1.65360702e-12 7.12985305e-02 5.62258045e-02 9.14761143e-02 6.04021987e-02 2.39997407e-03 7.18197378e-01 3.12452585e+03 -3.72200000e-04 -1.65360702e-12 7.12975951e-02 5.62240866e-02 9.14772077e-02 6.04039552e-02 2.39977753e-03 7.18197378e-01 3.12452585e+03 -3.72300000e-04 -1.65360702e-12 7.12966621e-02 5.62223729e-02 9.14782984e-02 6.04057073e-02 2.39958147e-03 7.18197378e-01 3.12452585e+03 -3.72400000e-04 -1.65360702e-12 7.12957314e-02 5.62206636e-02 9.14793863e-02 6.04074549e-02 2.39938591e-03 7.18197378e-01 3.12452585e+03 -3.72500000e-04 -1.65360702e-12 7.12948030e-02 5.62189586e-02 9.14804715e-02 6.04091983e-02 2.39919083e-03 7.18197378e-01 3.12452585e+03 -3.72600000e-04 -1.65360702e-12 7.12938769e-02 5.62172579e-02 9.14815539e-02 6.04109372e-02 2.39899625e-03 7.18197378e-01 3.12452585e+03 -3.72700000e-04 -1.65360702e-12 7.12929531e-02 5.62155615e-02 9.14826336e-02 6.04126718e-02 2.39880215e-03 7.18197378e-01 3.12452585e+03 -3.72800000e-04 -1.65360702e-12 7.12920317e-02 5.62138693e-02 9.14837106e-02 6.04144020e-02 2.39860854e-03 7.18197378e-01 3.12452585e+03 -3.72900000e-04 -1.65360702e-12 7.12911125e-02 5.62121814e-02 9.14847849e-02 6.04161279e-02 2.39841542e-03 7.18197378e-01 3.12452585e+03 -3.73000000e-04 -1.65360702e-12 7.12901957e-02 5.62104978e-02 9.14858564e-02 6.04178495e-02 2.39822278e-03 7.18197378e-01 3.12452585e+03 -3.73100000e-04 -1.65360702e-12 7.12892811e-02 5.62088184e-02 9.14869253e-02 6.04195667e-02 2.39803062e-03 7.18197378e-01 3.12452585e+03 -3.73200000e-04 -1.65360702e-12 7.12883688e-02 5.62071432e-02 9.14879915e-02 6.04212797e-02 2.39783894e-03 7.18197378e-01 3.12452585e+03 -3.73300000e-04 -1.65360702e-12 7.12874588e-02 5.62054723e-02 9.14890549e-02 6.04229883e-02 2.39764775e-03 7.18197378e-01 3.12452585e+03 -3.73400000e-04 -1.65360702e-12 7.12865511e-02 5.62038056e-02 9.14901157e-02 6.04246927e-02 2.39745703e-03 7.18197378e-01 3.12452585e+03 -3.73500000e-04 -1.65360702e-12 7.12856456e-02 5.62021431e-02 9.14911739e-02 6.04263928e-02 2.39726680e-03 7.18197378e-01 3.12452585e+03 -3.73600000e-04 -1.65360702e-12 7.12847425e-02 5.62004847e-02 9.14922293e-02 6.04280886e-02 2.39707704e-03 7.18197378e-01 3.12452585e+03 -3.73700000e-04 -1.65360702e-12 7.12838415e-02 5.61988306e-02 9.14932821e-02 6.04297802e-02 2.39688775e-03 7.18197378e-01 3.12452585e+03 -3.73800000e-04 -1.65360702e-12 7.12829428e-02 5.61971806e-02 9.14943323e-02 6.04314675e-02 2.39669894e-03 7.18197378e-01 3.12452585e+03 -3.73900000e-04 -1.65360702e-12 7.12820464e-02 5.61955348e-02 9.14953798e-02 6.04331506e-02 2.39651061e-03 7.18197378e-01 3.12452585e+03 -3.74000000e-04 -1.65360702e-12 7.12811522e-02 5.61938931e-02 9.14964246e-02 6.04348294e-02 2.39632274e-03 7.18197378e-01 3.12452585e+03 -3.74100000e-04 -1.65360702e-12 7.12802603e-02 5.61922556e-02 9.14974668e-02 6.04365041e-02 2.39613535e-03 7.18197378e-01 3.12452585e+03 -3.74200000e-04 -1.65360702e-12 7.12793705e-02 5.61906222e-02 9.14985064e-02 6.04381746e-02 2.39594843e-03 7.18197378e-01 3.12476614e+03 -3.74300000e-04 -1.65360702e-12 7.12784830e-02 5.61889929e-02 9.14995434e-02 6.04398408e-02 2.39576198e-03 7.18197378e-01 3.12476614e+03 -3.74400000e-04 -1.65360702e-12 7.12775977e-02 5.61873678e-02 9.15005777e-02 6.04415029e-02 2.39557600e-03 7.18197378e-01 3.12476614e+03 -3.74500000e-04 -1.65360702e-12 7.12767147e-02 5.61857467e-02 9.15016095e-02 6.04431608e-02 2.39539048e-03 7.18197378e-01 3.12476614e+03 -3.74600000e-04 -1.65360702e-12 7.12758338e-02 5.61841297e-02 9.15026386e-02 6.04448146e-02 2.39520543e-03 7.18197378e-01 3.12476614e+03 -3.74700000e-04 -1.65360702e-12 7.12749552e-02 5.61825168e-02 9.15036652e-02 6.04464642e-02 2.39502084e-03 7.18197378e-01 3.12476614e+03 -3.74800000e-04 -1.65360702e-12 7.12740787e-02 5.61809080e-02 9.15046891e-02 6.04481096e-02 2.39483671e-03 7.18197378e-01 3.12476614e+03 -3.74900000e-04 -1.65360702e-12 7.12732044e-02 5.61793032e-02 9.15057105e-02 6.04497510e-02 2.39465305e-03 7.18197378e-01 3.12476614e+03 -3.75000000e-04 -1.65360702e-12 7.12723324e-02 5.61777025e-02 9.15067293e-02 6.04513882e-02 2.39446985e-03 7.18197378e-01 3.12476614e+03 -3.75100000e-04 -1.65360702e-12 7.12714625e-02 5.61761058e-02 9.15077455e-02 6.04530213e-02 2.39428711e-03 7.18197378e-01 3.12476614e+03 -3.75200000e-04 -1.65360702e-12 7.12705947e-02 5.61745131e-02 9.15087592e-02 6.04546503e-02 2.39410483e-03 7.18197378e-01 3.12476614e+03 -3.75300000e-04 -1.65360702e-12 7.12697292e-02 5.61729245e-02 9.15097703e-02 6.04562752e-02 2.39392300e-03 7.18197378e-01 3.12476614e+03 -3.75400000e-04 -1.65360702e-12 7.12688658e-02 5.61713399e-02 9.15107788e-02 6.04578960e-02 2.39374163e-03 7.18197378e-01 3.12476614e+03 -3.75500000e-04 -1.65360702e-12 7.12680046e-02 5.61697592e-02 9.15117848e-02 6.04595128e-02 2.39356072e-03 7.18197378e-01 3.12476614e+03 -3.75600000e-04 -1.65360702e-12 7.12671455e-02 5.61681826e-02 9.15127883e-02 6.04611255e-02 2.39338026e-03 7.18197378e-01 3.12476614e+03 -3.75700000e-04 -1.65360702e-12 7.12662886e-02 5.61666099e-02 9.15137892e-02 6.04627341e-02 2.39320026e-03 7.18197378e-01 3.12476614e+03 -3.75800000e-04 -1.65360702e-12 7.12654338e-02 5.61650412e-02 9.15147877e-02 6.04643387e-02 2.39302070e-03 7.18197378e-01 3.12476614e+03 -3.75900000e-04 -1.65360702e-12 7.12645812e-02 5.61634765e-02 9.15157835e-02 6.04659393e-02 2.39284160e-03 7.18197378e-01 3.12476614e+03 -3.76000000e-04 -1.65360702e-12 7.12637307e-02 5.61619157e-02 9.15167769e-02 6.04675359e-02 2.39266295e-03 7.18197378e-01 3.12476614e+03 -3.76100000e-04 -1.65360702e-12 7.12628823e-02 5.61603588e-02 9.15177678e-02 6.04691284e-02 2.39248474e-03 7.18197378e-01 3.12476614e+03 -3.76200000e-04 -1.65360702e-12 7.12620361e-02 5.61588059e-02 9.15187562e-02 6.04707170e-02 2.39230699e-03 7.18197378e-01 3.12476614e+03 -3.76300000e-04 -1.65360702e-12 7.12611920e-02 5.61572569e-02 9.15197421e-02 6.04723016e-02 2.39212968e-03 7.18197378e-01 3.12476614e+03 -3.76400000e-04 -1.65360702e-12 7.12603500e-02 5.61557118e-02 9.15207254e-02 6.04738822e-02 2.39195281e-03 7.18197378e-01 3.12476614e+03 -3.76500000e-04 -1.65360702e-12 7.12595101e-02 5.61541706e-02 9.15217064e-02 6.04754588e-02 2.39177639e-03 7.18197378e-01 3.12476614e+03 -3.76600000e-04 -1.65360702e-12 7.12586723e-02 5.61526333e-02 9.15226848e-02 6.04770314e-02 2.39160041e-03 7.18197378e-01 3.12499291e+03 -3.76700000e-04 -1.65360702e-12 7.12578366e-02 5.61510998e-02 9.15236608e-02 6.04786001e-02 2.39142488e-03 7.18197378e-01 3.12499291e+03 -3.76800000e-04 -1.65360702e-12 7.12570030e-02 5.61495703e-02 9.15246343e-02 6.04801649e-02 2.39124979e-03 7.18197378e-01 3.12499291e+03 -3.76900000e-04 -1.65360702e-12 7.12561714e-02 5.61480446e-02 9.15256053e-02 6.04817257e-02 2.39107513e-03 7.18197378e-01 3.12499291e+03 -3.77000000e-04 -1.65360702e-12 7.12553420e-02 5.61465227e-02 9.15265739e-02 6.04832826e-02 2.39090092e-03 7.18197378e-01 3.12499291e+03 -3.77100000e-04 -1.65360702e-12 7.12545146e-02 5.61450047e-02 9.15275400e-02 6.04848356e-02 2.39072714e-03 7.18197378e-01 3.12499291e+03 -3.77200000e-04 -1.65360702e-12 7.12536893e-02 5.61434906e-02 9.15285037e-02 6.04863847e-02 2.39055380e-03 7.18197378e-01 3.12499291e+03 -3.77300000e-04 -1.65360702e-12 7.12528661e-02 5.61419802e-02 9.15294650e-02 6.04879299e-02 2.39038089e-03 7.18197378e-01 3.12499291e+03 -3.77400000e-04 -1.65360702e-12 7.12520450e-02 5.61404737e-02 9.15304239e-02 6.04894712e-02 2.39020842e-03 7.18197378e-01 3.12499291e+03 -3.77500000e-04 -1.65360702e-12 7.12512259e-02 5.61389710e-02 9.15313803e-02 6.04910087e-02 2.39003638e-03 7.18197378e-01 3.12499291e+03 -3.77600000e-04 -1.65360702e-12 7.12504088e-02 5.61374720e-02 9.15323343e-02 6.04925422e-02 2.38986478e-03 7.18197378e-01 3.12499291e+03 -3.77700000e-04 -1.65360702e-12 7.12495938e-02 5.61359769e-02 9.15332859e-02 6.04940720e-02 2.38969360e-03 7.18197378e-01 3.12499291e+03 -3.77800000e-04 -1.65360702e-12 7.12487809e-02 5.61344855e-02 9.15342351e-02 6.04955978e-02 2.38952286e-03 7.18197378e-01 3.12499291e+03 -3.77900000e-04 -1.65360702e-12 7.12479699e-02 5.61329979e-02 9.15351819e-02 6.04971199e-02 2.38935255e-03 7.18197378e-01 3.12499291e+03 -3.78000000e-04 -1.65360702e-12 7.12471610e-02 5.61315140e-02 9.15361263e-02 6.04986381e-02 2.38918266e-03 7.18197378e-01 3.12499291e+03 -3.78100000e-04 -1.65360702e-12 7.12463542e-02 5.61300339e-02 9.15370683e-02 6.05001525e-02 2.38901320e-03 7.18197378e-01 3.12499291e+03 -3.78200000e-04 -1.65360702e-12 7.12455493e-02 5.61285576e-02 9.15380080e-02 6.05016631e-02 2.38884417e-03 7.18197378e-01 3.12499291e+03 -3.78300000e-04 -1.65360702e-12 7.12447465e-02 5.61270849e-02 9.15389452e-02 6.05031699e-02 2.38867556e-03 7.18197378e-01 3.12499291e+03 -3.78400000e-04 -1.65360702e-12 7.12439457e-02 5.61256160e-02 9.15398802e-02 6.05046729e-02 2.38850738e-03 7.18197378e-01 3.12499291e+03 -3.78500000e-04 -1.65360702e-12 7.12431469e-02 5.61241508e-02 9.15408127e-02 6.05061721e-02 2.38833962e-03 7.18197378e-01 3.12499291e+03 -3.78600000e-04 -1.65360702e-12 7.12423501e-02 5.61226893e-02 9.15417429e-02 6.05076676e-02 2.38817228e-03 7.18197378e-01 3.12499291e+03 -3.78700000e-04 -1.65360702e-12 7.12415553e-02 5.61212315e-02 9.15426707e-02 6.05091593e-02 2.38800536e-03 7.18197378e-01 3.12499291e+03 -3.78800000e-04 -1.65360702e-12 7.12407625e-02 5.61197773e-02 9.15435962e-02 6.05106472e-02 2.38783886e-03 7.18197378e-01 3.12499291e+03 -3.78900000e-04 -1.65360702e-12 7.12399717e-02 5.61183269e-02 9.15445194e-02 6.05121314e-02 2.38767278e-03 7.18197378e-01 3.12520689e+03 -3.79000000e-04 -1.65360702e-12 7.12391828e-02 5.61168801e-02 9.15454402e-02 6.05136119e-02 2.38750712e-03 7.18197378e-01 3.12520689e+03 -3.79100000e-04 -1.65360702e-12 7.12383960e-02 5.61154369e-02 9.15463587e-02 6.05150887e-02 2.38734187e-03 7.18197378e-01 3.12520689e+03 -3.79200000e-04 -1.65360702e-12 7.12376111e-02 5.61139974e-02 9.15472749e-02 6.05165617e-02 2.38717704e-03 7.18197378e-01 3.12520689e+03 -3.79300000e-04 -1.65360702e-12 7.12368282e-02 5.61125616e-02 9.15481887e-02 6.05180310e-02 2.38701263e-03 7.18197378e-01 3.12520689e+03 -3.79400000e-04 -1.65360702e-12 7.12360472e-02 5.61111293e-02 9.15491003e-02 6.05194967e-02 2.38684862e-03 7.18197378e-01 3.12520689e+03 -3.79500000e-04 -1.65360702e-12 7.12352682e-02 5.61097007e-02 9.15500096e-02 6.05209586e-02 2.38668503e-03 7.18197378e-01 3.12520689e+03 -3.79600000e-04 -1.65360702e-12 7.12344912e-02 5.61082757e-02 9.15509165e-02 6.05224169e-02 2.38652186e-03 7.18197378e-01 3.12520689e+03 -3.79700000e-04 -1.65360702e-12 7.12337161e-02 5.61068543e-02 9.15518212e-02 6.05238715e-02 2.38635909e-03 7.18197378e-01 3.12520689e+03 -3.79800000e-04 -1.65360702e-12 7.12329429e-02 5.61054365e-02 9.15527236e-02 6.05253224e-02 2.38619673e-03 7.18197378e-01 3.12520689e+03 -3.79900000e-04 -1.65360702e-12 7.12321717e-02 5.61040223e-02 9.15536236e-02 6.05267697e-02 2.38603478e-03 7.18197378e-01 3.12520689e+03 -3.80000000e-04 -1.65360702e-12 7.12314025e-02 5.61026116e-02 9.15545215e-02 6.05282134e-02 2.38587324e-03 7.18197378e-01 3.12520689e+03 -3.80100000e-04 -1.65360702e-12 7.12306351e-02 5.61012045e-02 9.15554170e-02 6.05296534e-02 2.38571210e-03 7.18197378e-01 3.12520689e+03 -3.80200000e-04 -1.65360702e-12 7.12298697e-02 5.60998010e-02 9.15563103e-02 6.05310898e-02 2.38555137e-03 7.18197378e-01 3.12520689e+03 -3.80300000e-04 -1.65360702e-12 7.12291062e-02 5.60984010e-02 9.15572013e-02 6.05325225e-02 2.38539105e-03 7.18197378e-01 3.12520689e+03 -3.80400000e-04 -1.65360702e-12 7.12283446e-02 5.60970046e-02 9.15580901e-02 6.05339517e-02 2.38523113e-03 7.18197378e-01 3.12520689e+03 -3.80500000e-04 -1.65360702e-12 7.12275849e-02 5.60956117e-02 9.15589767e-02 6.05353773e-02 2.38507161e-03 7.18197378e-01 3.12520689e+03 -3.80600000e-04 -1.65360702e-12 7.12268272e-02 5.60942223e-02 9.15598610e-02 6.05367993e-02 2.38491249e-03 7.18197378e-01 3.12520689e+03 -3.80700000e-04 -1.65360702e-12 7.12260713e-02 5.60928364e-02 9.15607430e-02 6.05382177e-02 2.38475377e-03 7.18197378e-01 3.12520689e+03 -3.80800000e-04 -1.65360702e-12 7.12253173e-02 5.60914540e-02 9.15616228e-02 6.05396325e-02 2.38459545e-03 7.18197378e-01 3.12520689e+03 -3.80900000e-04 -1.65360702e-12 7.12245653e-02 5.60900751e-02 9.15625004e-02 6.05410438e-02 2.38443753e-03 7.18197378e-01 3.12520689e+03 -3.81000000e-04 -1.65360702e-12 7.12238151e-02 5.60886997e-02 9.15633758e-02 6.05424515e-02 2.38428001e-03 7.18197378e-01 3.12520689e+03 -3.81100000e-04 -1.65360702e-12 7.12230668e-02 5.60873278e-02 9.15642490e-02 6.05438557e-02 2.38412289e-03 7.18197378e-01 3.12520689e+03 -3.81200000e-04 -1.65360702e-12 7.12223203e-02 5.60859593e-02 9.15651200e-02 6.05452564e-02 2.38396616e-03 7.18197378e-01 3.12540880e+03 -3.81300000e-04 -1.65360702e-12 7.12215758e-02 5.60845943e-02 9.15659887e-02 6.05466535e-02 2.38380982e-03 7.18197378e-01 3.12540880e+03 -3.81400000e-04 -1.65360702e-12 7.12208331e-02 5.60832328e-02 9.15668553e-02 6.05480471e-02 2.38365388e-03 7.18197378e-01 3.12540880e+03 -3.81500000e-04 -1.65360702e-12 7.12200923e-02 5.60818747e-02 9.15677197e-02 6.05494372e-02 2.38349833e-03 7.18197378e-01 3.12540880e+03 -3.81600000e-04 -1.65360702e-12 7.12193533e-02 5.60805200e-02 9.15685819e-02 6.05508238e-02 2.38334317e-03 7.18197378e-01 3.12540880e+03 -3.81700000e-04 -1.65360702e-12 7.12186162e-02 5.60791688e-02 9.15694419e-02 6.05522069e-02 2.38318841e-03 7.18197378e-01 3.12540880e+03 -3.81800000e-04 -1.65360702e-12 7.12178810e-02 5.60778209e-02 9.15702997e-02 6.05535865e-02 2.38303403e-03 7.18197378e-01 3.12540880e+03 -3.81900000e-04 -1.65360702e-12 7.12171476e-02 5.60764765e-02 9.15711554e-02 6.05549626e-02 2.38288004e-03 7.18197378e-01 3.12540880e+03 -3.82000000e-04 -1.65360702e-12 7.12164160e-02 5.60751355e-02 9.15720089e-02 6.05563353e-02 2.38272644e-03 7.18197378e-01 3.12540880e+03 -3.82100000e-04 -1.65360702e-12 7.12156863e-02 5.60737979e-02 9.15728602e-02 6.05577045e-02 2.38257323e-03 7.18197378e-01 3.12540880e+03 -3.82200000e-04 -1.65360702e-12 7.12149584e-02 5.60724636e-02 9.15737094e-02 6.05590703e-02 2.38242040e-03 7.18197378e-01 3.12540880e+03 -3.82300000e-04 -1.65360702e-12 7.12142323e-02 5.60711327e-02 9.15745565e-02 6.05604326e-02 2.38226796e-03 7.18197378e-01 3.12540880e+03 -3.82400000e-04 -1.65360702e-12 7.12135081e-02 5.60698052e-02 9.15754014e-02 6.05617915e-02 2.38211590e-03 7.18197378e-01 3.12540880e+03 -3.82500000e-04 -1.65360702e-12 7.12127857e-02 5.60684811e-02 9.15762441e-02 6.05631470e-02 2.38196422e-03 7.18197378e-01 3.12540880e+03 -3.82600000e-04 -1.65360702e-12 7.12120651e-02 5.60671603e-02 9.15770848e-02 6.05644991e-02 2.38181293e-03 7.18197378e-01 3.12540880e+03 -3.82700000e-04 -1.65360702e-12 7.12113463e-02 5.60658428e-02 9.15779233e-02 6.05658477e-02 2.38166201e-03 7.18197378e-01 3.12540880e+03 -3.82800000e-04 -1.65360702e-12 7.12106293e-02 5.60645287e-02 9.15787597e-02 6.05671930e-02 2.38151148e-03 7.18197378e-01 3.12540880e+03 -3.82900000e-04 -1.65360702e-12 7.12099141e-02 5.60632179e-02 9.15795939e-02 6.05685349e-02 2.38136133e-03 7.18197378e-01 3.12540880e+03 -3.83000000e-04 -1.65360702e-12 7.12092007e-02 5.60619104e-02 9.15804261e-02 6.05698734e-02 2.38121155e-03 7.18197378e-01 3.12540880e+03 -3.83100000e-04 -1.65360702e-12 7.12084891e-02 5.60606062e-02 9.15812561e-02 6.05712085e-02 2.38106215e-03 7.18197378e-01 3.12540880e+03 -3.83200000e-04 -1.65360702e-12 7.12077793e-02 5.60593054e-02 9.15820841e-02 6.05725403e-02 2.38091313e-03 7.18197378e-01 3.12540880e+03 -3.83300000e-04 -1.65360702e-12 7.12070713e-02 5.60580078e-02 9.15829100e-02 6.05738687e-02 2.38076449e-03 7.18197378e-01 3.12540880e+03 -3.83400000e-04 -1.65360702e-12 7.12063650e-02 5.60567135e-02 9.15837337e-02 6.05751937e-02 2.38061622e-03 7.18197378e-01 3.12540880e+03 -3.83500000e-04 -1.65360702e-12 7.12056605e-02 5.60554224e-02 9.15845554e-02 6.05765154e-02 2.38046832e-03 7.18197378e-01 3.12559930e+03 -3.83600000e-04 -1.65360702e-12 7.12049578e-02 5.60541347e-02 9.15853750e-02 6.05778338e-02 2.38032079e-03 7.18197378e-01 3.12559930e+03 -3.83700000e-04 -1.65360702e-12 7.12042569e-02 5.60528502e-02 9.15861926e-02 6.05791489e-02 2.38017364e-03 7.18197378e-01 3.12559930e+03 -3.83800000e-04 -1.65360702e-12 7.12035577e-02 5.60515689e-02 9.15870080e-02 6.05804606e-02 2.38002686e-03 7.18197378e-01 3.12559930e+03 -3.83900000e-04 -1.65360702e-12 7.12028603e-02 5.60502909e-02 9.15878214e-02 6.05817691e-02 2.37988045e-03 7.18197378e-01 3.12559930e+03 -3.84000000e-04 -1.65360702e-12 7.12021647e-02 5.60490161e-02 9.15886328e-02 6.05830742e-02 2.37973440e-03 7.18197378e-01 3.12559930e+03 -3.84100000e-04 -1.65360702e-12 7.12014707e-02 5.60477445e-02 9.15894421e-02 6.05843761e-02 2.37958873e-03 7.18197378e-01 3.12559930e+03 -3.84200000e-04 -1.65360702e-12 7.12007786e-02 5.60464762e-02 9.15902493e-02 6.05856746e-02 2.37944342e-03 7.18197378e-01 3.12559930e+03 -3.84300000e-04 -1.65360702e-12 7.12000881e-02 5.60452111e-02 9.15910545e-02 6.05869699e-02 2.37929848e-03 7.18197378e-01 3.12559930e+03 -3.84400000e-04 -1.65360702e-12 7.11993994e-02 5.60439491e-02 9.15918577e-02 6.05882620e-02 2.37915390e-03 7.18197378e-01 3.12559930e+03 -3.84500000e-04 -1.65360702e-12 7.11987125e-02 5.60426904e-02 9.15926588e-02 6.05895507e-02 2.37900969e-03 7.18197378e-01 3.12559930e+03 -3.84600000e-04 -1.65360702e-12 7.11980272e-02 5.60414349e-02 9.15934579e-02 6.05908363e-02 2.37886584e-03 7.18197378e-01 3.12559930e+03 -3.84700000e-04 -1.65360702e-12 7.11973437e-02 5.60401825e-02 9.15942550e-02 6.05921186e-02 2.37872235e-03 7.18197378e-01 3.12559930e+03 -3.84800000e-04 -1.65360702e-12 7.11966619e-02 5.60389333e-02 9.15950501e-02 6.05933976e-02 2.37857923e-03 7.18197378e-01 3.12559930e+03 -3.84900000e-04 -1.65360702e-12 7.11959819e-02 5.60376873e-02 9.15958431e-02 6.05946734e-02 2.37843647e-03 7.18197378e-01 3.12559930e+03 -3.85000000e-04 -1.65360702e-12 7.11953035e-02 5.60364444e-02 9.15966342e-02 6.05959461e-02 2.37829406e-03 7.18197378e-01 3.12559930e+03 -3.85100000e-04 -1.65360702e-12 7.11946268e-02 5.60352046e-02 9.15974232e-02 6.05972155e-02 2.37815202e-03 7.18197378e-01 3.12559930e+03 -3.85200000e-04 -1.65360702e-12 7.11939519e-02 5.60339680e-02 9.15982103e-02 6.05984817e-02 2.37801033e-03 7.18197378e-01 3.12559930e+03 -3.85300000e-04 -1.65360702e-12 7.11932786e-02 5.60327346e-02 9.15989953e-02 6.05997447e-02 2.37786900e-03 7.18197378e-01 3.12559930e+03 -3.85400000e-04 -1.65360702e-12 7.11926070e-02 5.60315042e-02 9.15997784e-02 6.06010045e-02 2.37772803e-03 7.18197378e-01 3.12559930e+03 -3.85500000e-04 -1.65360702e-12 7.11919372e-02 5.60302770e-02 9.16005595e-02 6.06022612e-02 2.37758741e-03 7.18197378e-01 3.12559930e+03 -3.85600000e-04 -1.65360702e-12 7.11912690e-02 5.60290528e-02 9.16013386e-02 6.06035146e-02 2.37744715e-03 7.18197378e-01 3.12559930e+03 -3.85700000e-04 -1.65360702e-12 7.11906024e-02 5.60278318e-02 9.16021157e-02 6.06047649e-02 2.37730724e-03 7.18197378e-01 3.12559930e+03 -3.85800000e-04 -1.65360702e-12 7.11899376e-02 5.60266139e-02 9.16028909e-02 6.06060121e-02 2.37716769e-03 7.18197378e-01 3.12577903e+03 -3.85900000e-04 -1.65360702e-12 7.11892744e-02 5.60253990e-02 9.16036641e-02 6.06072561e-02 2.37702848e-03 7.18197378e-01 3.12577903e+03 -3.86000000e-04 -1.65360702e-12 7.11886129e-02 5.60241872e-02 9.16044353e-02 6.06084970e-02 2.37688963e-03 7.18197378e-01 3.12577903e+03 -3.86100000e-04 -1.65360702e-12 7.11879531e-02 5.60229785e-02 9.16052046e-02 6.06097348e-02 2.37675113e-03 7.18197378e-01 3.12577903e+03 -3.86200000e-04 -1.65360702e-12 7.11872949e-02 5.60217729e-02 9.16059720e-02 6.06109694e-02 2.37661298e-03 7.18197378e-01 3.12577903e+03 -3.86300000e-04 -1.65360702e-12 7.11866384e-02 5.60205703e-02 9.16067374e-02 6.06122009e-02 2.37647517e-03 7.18197378e-01 3.12577903e+03 -3.86400000e-04 -1.65360702e-12 7.11859836e-02 5.60193707e-02 9.16075008e-02 6.06134293e-02 2.37633772e-03 7.18197378e-01 3.12577903e+03 -3.86500000e-04 -1.65360702e-12 7.11853303e-02 5.60181742e-02 9.16082624e-02 6.06146546e-02 2.37620061e-03 7.18197378e-01 3.12577903e+03 -3.86600000e-04 -1.65360702e-12 7.11846788e-02 5.60169807e-02 9.16090220e-02 6.06158768e-02 2.37606384e-03 7.18197378e-01 3.12577903e+03 -3.86700000e-04 -1.65360702e-12 7.11840288e-02 5.60157903e-02 9.16097796e-02 6.06170960e-02 2.37592742e-03 7.18197378e-01 3.12577903e+03 -3.86800000e-04 -1.65360702e-12 7.11833805e-02 5.60146028e-02 9.16105354e-02 6.06183120e-02 2.37579135e-03 7.18197378e-01 3.12577903e+03 -3.86900000e-04 -1.65360702e-12 7.11827339e-02 5.60134184e-02 9.16112893e-02 6.06195250e-02 2.37565562e-03 7.18197378e-01 3.12577903e+03 -3.87000000e-04 -1.65360702e-12 7.11820889e-02 5.60122369e-02 9.16120412e-02 6.06207349e-02 2.37552023e-03 7.18197378e-01 3.12577903e+03 -3.87100000e-04 -1.65360702e-12 7.11814454e-02 5.60110585e-02 9.16127912e-02 6.06219418e-02 2.37538518e-03 7.18197378e-01 3.12577903e+03 -3.87200000e-04 -1.65360702e-12 7.11808036e-02 5.60098830e-02 9.16135394e-02 6.06231456e-02 2.37525047e-03 7.18197378e-01 3.12577903e+03 -3.87300000e-04 -1.65360702e-12 7.11801635e-02 5.60087105e-02 9.16142856e-02 6.06243464e-02 2.37511611e-03 7.18197378e-01 3.12577903e+03 -3.87400000e-04 -1.65360702e-12 7.11795249e-02 5.60075410e-02 9.16150299e-02 6.06255442e-02 2.37498208e-03 7.18197378e-01 3.12577903e+03 -3.87500000e-04 -1.65360702e-12 7.11788879e-02 5.60063745e-02 9.16157724e-02 6.06267389e-02 2.37484839e-03 7.18197378e-01 3.12577903e+03 -3.87600000e-04 -1.65360702e-12 7.11782526e-02 5.60052109e-02 9.16165130e-02 6.06279307e-02 2.37471504e-03 7.18197378e-01 3.12577903e+03 -3.87700000e-04 -1.65360702e-12 7.11776188e-02 5.60040502e-02 9.16172517e-02 6.06291194e-02 2.37458202e-03 7.18197378e-01 3.12577903e+03 -3.87800000e-04 -1.65360702e-12 7.11769867e-02 5.60028925e-02 9.16179885e-02 6.06303051e-02 2.37444934e-03 7.18197378e-01 3.12577903e+03 -3.87900000e-04 -1.65360702e-12 7.11763561e-02 5.60017377e-02 9.16187235e-02 6.06314878e-02 2.37431700e-03 7.18197378e-01 3.12577903e+03 -3.88000000e-04 -1.65360702e-12 7.11757271e-02 5.60005859e-02 9.16194566e-02 6.06326675e-02 2.37418499e-03 7.18197378e-01 3.12577903e+03 -3.88100000e-04 -1.65360702e-12 7.11750997e-02 5.59994369e-02 9.16201879e-02 6.06338443e-02 2.37405331e-03 7.18197378e-01 3.12594858e+03 -3.88200000e-04 -1.65360702e-12 7.11744739e-02 5.59982909e-02 9.16209173e-02 6.06350181e-02 2.37392197e-03 7.18197378e-01 3.12594858e+03 -3.88300000e-04 -1.65360702e-12 7.11738497e-02 5.59971478e-02 9.16216448e-02 6.06361889e-02 2.37379095e-03 7.18197378e-01 3.12594858e+03 -3.88400000e-04 -1.65360702e-12 7.11732270e-02 5.59960075e-02 9.16223705e-02 6.06373568e-02 2.37366027e-03 7.18197378e-01 3.12594858e+03 -3.88500000e-04 -1.65360702e-12 7.11726059e-02 5.59948702e-02 9.16230944e-02 6.06385217e-02 2.37352992e-03 7.18197378e-01 3.12594858e+03 -3.88600000e-04 -1.65360702e-12 7.11719864e-02 5.59937357e-02 9.16238164e-02 6.06396837e-02 2.37339989e-03 7.18197378e-01 3.12594858e+03 -3.88700000e-04 -1.65360702e-12 7.11713684e-02 5.59926042e-02 9.16245366e-02 6.06408427e-02 2.37327020e-03 7.18197378e-01 3.12594858e+03 -3.88800000e-04 -1.65360702e-12 7.11707520e-02 5.59914754e-02 9.16252550e-02 6.06419988e-02 2.37314083e-03 7.18197378e-01 3.12594858e+03 -3.88900000e-04 -1.65360702e-12 7.11701371e-02 5.59903496e-02 9.16259716e-02 6.06431520e-02 2.37301179e-03 7.18197378e-01 3.12594858e+03 -3.89000000e-04 -1.65360702e-12 7.11695238e-02 5.59892266e-02 9.16266863e-02 6.06443023e-02 2.37288308e-03 7.18197378e-01 3.12594858e+03 -3.89100000e-04 -1.65360702e-12 7.11689121e-02 5.59881064e-02 9.16273993e-02 6.06454497e-02 2.37275469e-03 7.18197378e-01 3.12594858e+03 -3.89200000e-04 -1.65360702e-12 7.11683018e-02 5.59869891e-02 9.16281104e-02 6.06465942e-02 2.37262662e-03 7.18197378e-01 3.12594858e+03 -3.89300000e-04 -1.65360702e-12 7.11676932e-02 5.59858746e-02 9.16288197e-02 6.06477358e-02 2.37249888e-03 7.18197378e-01 3.12594858e+03 -3.89400000e-04 -1.65360702e-12 7.11670860e-02 5.59847630e-02 9.16295272e-02 6.06488745e-02 2.37237146e-03 7.18197378e-01 3.12594858e+03 -3.89500000e-04 -1.65360702e-12 7.11664804e-02 5.59836541e-02 9.16302330e-02 6.06500103e-02 2.37224436e-03 7.18197378e-01 3.12594858e+03 -3.89600000e-04 -1.65360702e-12 7.11658763e-02 5.59825481e-02 9.16309369e-02 6.06511433e-02 2.37211758e-03 7.18197378e-01 3.12594858e+03 -3.89700000e-04 -1.65360702e-12 7.11652737e-02 5.59814448e-02 9.16316391e-02 6.06522734e-02 2.37199112e-03 7.18197378e-01 3.12594858e+03 -3.89800000e-04 -1.65360702e-12 7.11646726e-02 5.59803444e-02 9.16323395e-02 6.06534007e-02 2.37186499e-03 7.18197378e-01 3.12594858e+03 -3.89900000e-04 -1.65360702e-12 7.11640731e-02 5.59792468e-02 9.16330381e-02 6.06545251e-02 2.37173917e-03 7.18197378e-01 3.12594858e+03 -3.90000000e-04 -1.65360702e-12 7.11634751e-02 5.59781519e-02 9.16337349e-02 6.06556466e-02 2.37161367e-03 7.18197378e-01 3.12594858e+03 -3.90100000e-04 -1.65360702e-12 7.11628785e-02 5.59770598e-02 9.16344300e-02 6.06567654e-02 2.37148848e-03 7.18197378e-01 3.12594858e+03 -3.90200000e-04 -1.65360702e-12 7.11622835e-02 5.59759705e-02 9.16351233e-02 6.06578813e-02 2.37136362e-03 7.18197378e-01 3.12594858e+03 -3.90300000e-04 -1.65360702e-12 7.11616900e-02 5.59748839e-02 9.16358148e-02 6.06589944e-02 2.37123906e-03 7.18197378e-01 3.12594858e+03 -3.90400000e-04 -1.65360702e-12 7.11610980e-02 5.59738001e-02 9.16365046e-02 6.06601046e-02 2.37111483e-03 7.18197378e-01 3.12610852e+03 -3.90500000e-04 -1.65360702e-12 7.11605074e-02 5.59727191e-02 9.16371927e-02 6.06612121e-02 2.37099090e-03 7.18197378e-01 3.12610852e+03 -3.90600000e-04 -1.65360702e-12 7.11599184e-02 5.59716407e-02 9.16378790e-02 6.06623168e-02 2.37086729e-03 7.18197378e-01 3.12610852e+03 -3.90700000e-04 -1.65360702e-12 7.11593308e-02 5.59705652e-02 9.16385635e-02 6.06634186e-02 2.37074399e-03 7.18197378e-01 3.12610852e+03 -3.90800000e-04 -1.65360702e-12 7.11587447e-02 5.59694923e-02 9.16392464e-02 6.06645177e-02 2.37062101e-03 7.18197378e-01 3.12610852e+03 -3.90900000e-04 -1.65360702e-12 7.11581601e-02 5.59684222e-02 9.16399275e-02 6.06656141e-02 2.37049833e-03 7.18197378e-01 3.12610852e+03 -3.91000000e-04 -1.65360702e-12 7.11575770e-02 5.59673547e-02 9.16406068e-02 6.06667076e-02 2.37037596e-03 7.18197378e-01 3.12610852e+03 -3.91100000e-04 -1.65360702e-12 7.11569954e-02 5.59662900e-02 9.16412845e-02 6.06677984e-02 2.37025391e-03 7.18197378e-01 3.12610852e+03 -3.91200000e-04 -1.65360702e-12 7.11564152e-02 5.59652280e-02 9.16419604e-02 6.06688864e-02 2.37013216e-03 7.18197378e-01 3.12610852e+03 -3.91300000e-04 -1.65360702e-12 7.11558364e-02 5.59641687e-02 9.16426346e-02 6.06699717e-02 2.37001072e-03 7.18197378e-01 3.12610852e+03 -3.91400000e-04 -1.65360702e-12 7.11552592e-02 5.59631120e-02 9.16433071e-02 6.06710542e-02 2.36988958e-03 7.18197378e-01 3.12610852e+03 -3.91500000e-04 -1.65360702e-12 7.11546834e-02 5.59620581e-02 9.16439780e-02 6.06721340e-02 2.36976876e-03 7.18197378e-01 3.12610852e+03 -3.91600000e-04 -1.65360702e-12 7.11541090e-02 5.59610068e-02 9.16446471e-02 6.06732111e-02 2.36964823e-03 7.18197378e-01 3.12610852e+03 -3.91700000e-04 -1.65360702e-12 7.11535361e-02 5.59599581e-02 9.16453145e-02 6.06742854e-02 2.36952802e-03 7.18197378e-01 3.12610852e+03 -3.91800000e-04 -1.65360702e-12 7.11529646e-02 5.59589122e-02 9.16459802e-02 6.06753571e-02 2.36940810e-03 7.18197378e-01 3.12610852e+03 -3.91900000e-04 -1.65360702e-12 7.11523946e-02 5.59578689e-02 9.16466442e-02 6.06764260e-02 2.36928849e-03 7.18197378e-01 3.12610852e+03 -3.92000000e-04 -1.65360702e-12 7.11518260e-02 5.59568282e-02 9.16473065e-02 6.06774922e-02 2.36916918e-03 7.18197378e-01 3.12610852e+03 -3.92100000e-04 -1.65360702e-12 7.11512589e-02 5.59557902e-02 9.16479672e-02 6.06785557e-02 2.36905018e-03 7.18197378e-01 3.12610852e+03 -3.92200000e-04 -1.65360702e-12 7.11506931e-02 5.59547548e-02 9.16486262e-02 6.06796166e-02 2.36893147e-03 7.18197378e-01 3.12610852e+03 -3.92300000e-04 -1.65360702e-12 7.11501288e-02 5.59537220e-02 9.16492835e-02 6.06806747e-02 2.36881306e-03 7.18197378e-01 3.12610852e+03 -3.92400000e-04 -1.65360702e-12 7.11495660e-02 5.59526919e-02 9.16499391e-02 6.06817302e-02 2.36869496e-03 7.18197378e-01 3.12610852e+03 -3.92500000e-04 -1.65360702e-12 7.11490045e-02 5.59516643e-02 9.16505931e-02 6.06827830e-02 2.36857715e-03 7.18197378e-01 3.12610852e+03 -3.92600000e-04 -1.65360702e-12 7.11484445e-02 5.59506394e-02 9.16512455e-02 6.06838332e-02 2.36845964e-03 7.18197378e-01 3.12610852e+03 -3.92700000e-04 -1.65360702e-12 7.11478859e-02 5.59496170e-02 9.16518961e-02 6.06848807e-02 2.36834243e-03 7.18197378e-01 3.12625939e+03 -3.92800000e-04 -1.65360702e-12 7.11473287e-02 5.59485973e-02 9.16525452e-02 6.06859255e-02 2.36822551e-03 7.18197378e-01 3.12625939e+03 -3.92900000e-04 -1.65360702e-12 7.11467728e-02 5.59475802e-02 9.16531925e-02 6.06869677e-02 2.36810889e-03 7.18197378e-01 3.12625939e+03 -3.93000000e-04 -1.65360702e-12 7.11462184e-02 5.59465656e-02 9.16538383e-02 6.06880073e-02 2.36799256e-03 7.18197378e-01 3.12625939e+03 -3.93100000e-04 -1.65360702e-12 7.11456654e-02 5.59455536e-02 9.16544824e-02 6.06890442e-02 2.36787653e-03 7.18197378e-01 3.12625939e+03 -3.93200000e-04 -1.65360702e-12 7.11451138e-02 5.59445442e-02 9.16551248e-02 6.06900786e-02 2.36776079e-03 7.18197378e-01 3.12625939e+03 -3.93300000e-04 -1.65360702e-12 7.11445636e-02 5.59435373e-02 9.16557657e-02 6.06911103e-02 2.36764535e-03 7.18197378e-01 3.12625939e+03 -3.93400000e-04 -1.65360702e-12 7.11440148e-02 5.59425330e-02 9.16564049e-02 6.06921394e-02 2.36753019e-03 7.18197378e-01 3.12625939e+03 -3.93500000e-04 -1.65360702e-12 7.11434673e-02 5.59415312e-02 9.16570424e-02 6.06931658e-02 2.36741533e-03 7.18197378e-01 3.12625939e+03 -3.93600000e-04 -1.65360702e-12 7.11429213e-02 5.59405320e-02 9.16576784e-02 6.06941897e-02 2.36730076e-03 7.18197378e-01 3.12625939e+03 -3.93700000e-04 -1.65360702e-12 7.11423766e-02 5.59395353e-02 9.16583128e-02 6.06952110e-02 2.36718648e-03 7.18197378e-01 3.12625939e+03 -3.93800000e-04 -1.65360702e-12 7.11418333e-02 5.59385411e-02 9.16589455e-02 6.06962298e-02 2.36707248e-03 7.18197378e-01 3.12625939e+03 -3.93900000e-04 -1.65360702e-12 7.11412913e-02 5.59375495e-02 9.16595766e-02 6.06972459e-02 2.36695878e-03 7.18197378e-01 3.12625939e+03 -3.94000000e-04 -1.65360702e-12 7.11407508e-02 5.59365603e-02 9.16602062e-02 6.06982595e-02 2.36684536e-03 7.18197378e-01 3.12625939e+03 -3.94100000e-04 -1.65360702e-12 7.11402116e-02 5.59355737e-02 9.16608341e-02 6.06992705e-02 2.36673223e-03 7.18197378e-01 3.12625939e+03 -3.94200000e-04 -1.65360702e-12 7.11396737e-02 5.59345896e-02 9.16614605e-02 6.07002790e-02 2.36661938e-03 7.18197378e-01 3.12625939e+03 -3.94300000e-04 -1.65360702e-12 7.11391372e-02 5.59336080e-02 9.16620852e-02 6.07012849e-02 2.36650683e-03 7.18197378e-01 3.12625939e+03 -3.94400000e-04 -1.65360702e-12 7.11386021e-02 5.59326289e-02 9.16627084e-02 6.07022882e-02 2.36639455e-03 7.18197378e-01 3.12625939e+03 -3.94500000e-04 -1.65360702e-12 7.11380683e-02 5.59316522e-02 9.16633300e-02 6.07032890e-02 2.36628256e-03 7.18197378e-01 3.12625939e+03 -3.94600000e-04 -1.65360702e-12 7.11375359e-02 5.59306781e-02 9.16639500e-02 6.07042873e-02 2.36617085e-03 7.18197378e-01 3.12625939e+03 -3.94700000e-04 -1.65360702e-12 7.11370048e-02 5.59297064e-02 9.16645685e-02 6.07052831e-02 2.36605943e-03 7.18197378e-01 3.12625939e+03 -3.94800000e-04 -1.65360702e-12 7.11364751e-02 5.59287371e-02 9.16651853e-02 6.07062763e-02 2.36594829e-03 7.18197378e-01 3.12625939e+03 -3.94900000e-04 -1.65360702e-12 7.11359466e-02 5.59277704e-02 9.16658006e-02 6.07072671e-02 2.36583743e-03 7.18197378e-01 3.12625939e+03 -3.95000000e-04 -1.65360702e-12 7.11354196e-02 5.59268061e-02 9.16664144e-02 6.07082553e-02 2.36572685e-03 7.18197378e-01 3.12640170e+03 -3.95100000e-04 -1.65360702e-12 7.11348938e-02 5.59258442e-02 9.16670266e-02 6.07092410e-02 2.36561654e-03 7.18197378e-01 3.12640170e+03 -3.95200000e-04 -1.65360702e-12 7.11343694e-02 5.59248848e-02 9.16676372e-02 6.07102243e-02 2.36550652e-03 7.18197378e-01 3.12640170e+03 -3.95300000e-04 -1.65360702e-12 7.11338463e-02 5.59239278e-02 9.16682463e-02 6.07112050e-02 2.36539678e-03 7.18197378e-01 3.12640170e+03 -3.95400000e-04 -1.65360702e-12 7.11333245e-02 5.59229732e-02 9.16688538e-02 6.07121833e-02 2.36528731e-03 7.18197378e-01 3.12640170e+03 -3.95500000e-04 -1.65360702e-12 7.11328041e-02 5.59220211e-02 9.16694598e-02 6.07131590e-02 2.36517812e-03 7.18197378e-01 3.12640170e+03 -3.95600000e-04 -1.65360702e-12 7.11322849e-02 5.59210714e-02 9.16700643e-02 6.07141324e-02 2.36506921e-03 7.18197378e-01 3.12640170e+03 -3.95700000e-04 -1.65360702e-12 7.11317671e-02 5.59201240e-02 9.16706672e-02 6.07151032e-02 2.36496057e-03 7.18197378e-01 3.12640170e+03 -3.95800000e-04 -1.65360702e-12 7.11312506e-02 5.59191791e-02 9.16712686e-02 6.07160716e-02 2.36485221e-03 7.18197378e-01 3.12640170e+03 -3.95900000e-04 -1.65360702e-12 7.11307354e-02 5.59182366e-02 9.16718685e-02 6.07170376e-02 2.36474413e-03 7.18197378e-01 3.12640170e+03 -3.96000000e-04 -1.65360702e-12 7.11302215e-02 5.59172965e-02 9.16724668e-02 6.07180011e-02 2.36463631e-03 7.18197378e-01 3.12640170e+03 -3.96100000e-04 -1.65360702e-12 7.11297089e-02 5.59163588e-02 9.16730636e-02 6.07189621e-02 2.36452877e-03 7.18197378e-01 3.12640170e+03 -3.96200000e-04 -1.65360702e-12 7.11291975e-02 5.59154234e-02 9.16736589e-02 6.07199207e-02 2.36442150e-03 7.18197378e-01 3.12640170e+03 -3.96300000e-04 -1.65360702e-12 7.11286875e-02 5.59144904e-02 9.16742527e-02 6.07208769e-02 2.36431450e-03 7.18197378e-01 3.12640170e+03 -3.96400000e-04 -1.65360702e-12 7.11281788e-02 5.59135598e-02 9.16748450e-02 6.07218307e-02 2.36420778e-03 7.18197378e-01 3.12640170e+03 -3.96500000e-04 -1.65360702e-12 7.11276713e-02 5.59126316e-02 9.16754358e-02 6.07227821e-02 2.36410132e-03 7.18197378e-01 3.12640170e+03 -3.96600000e-04 -1.65360702e-12 7.11271651e-02 5.59117057e-02 9.16760251e-02 6.07237311e-02 2.36399513e-03 7.18197378e-01 3.12640170e+03 -3.96700000e-04 -1.65360702e-12 7.11266602e-02 5.59107822e-02 9.16766129e-02 6.07246776e-02 2.36388922e-03 7.18197378e-01 3.12640170e+03 -3.96800000e-04 -1.65360702e-12 7.11261566e-02 5.59098610e-02 9.16771992e-02 6.07256218e-02 2.36378356e-03 7.18197378e-01 3.12640170e+03 -3.96900000e-04 -1.65360702e-12 7.11256543e-02 5.59089421e-02 9.16777840e-02 6.07265635e-02 2.36367818e-03 7.18197378e-01 3.12640170e+03 -3.97000000e-04 -1.65360702e-12 7.11251532e-02 5.59080256e-02 9.16783674e-02 6.07275029e-02 2.36357307e-03 7.18197378e-01 3.12640170e+03 -3.97100000e-04 -1.65360702e-12 7.11246534e-02 5.59071114e-02 9.16789492e-02 6.07284399e-02 2.36346822e-03 7.18197378e-01 3.12640170e+03 -3.97200000e-04 -1.65360702e-12 7.11241548e-02 5.59061995e-02 9.16795296e-02 6.07293746e-02 2.36336363e-03 7.18197378e-01 3.12640170e+03 -3.97300000e-04 -1.65360702e-12 7.11236575e-02 5.59052900e-02 9.16801085e-02 6.07303069e-02 2.36325931e-03 7.18197378e-01 3.12640170e+03 -3.97400000e-04 -1.65360702e-12 7.11231615e-02 5.59043827e-02 9.16806859e-02 6.07312368e-02 2.36315526e-03 7.18197378e-01 3.12653592e+03 -3.97500000e-04 -1.65360702e-12 7.11226667e-02 5.59034778e-02 9.16812619e-02 6.07321643e-02 2.36305147e-03 7.18197378e-01 3.12653592e+03 -3.97600000e-04 -1.65360702e-12 7.11221732e-02 5.59025751e-02 9.16818364e-02 6.07330895e-02 2.36294794e-03 7.18197378e-01 3.12653592e+03 -3.97700000e-04 -1.65360702e-12 7.11216809e-02 5.59016748e-02 9.16824094e-02 6.07340124e-02 2.36284467e-03 7.18197378e-01 3.12653592e+03 -3.97800000e-04 -1.65360702e-12 7.11211899e-02 5.59007767e-02 9.16829810e-02 6.07349329e-02 2.36274166e-03 7.18197378e-01 3.12653592e+03 -3.97900000e-04 -1.65360702e-12 7.11207001e-02 5.58998809e-02 9.16835511e-02 6.07358511e-02 2.36263892e-03 7.18197378e-01 3.12653592e+03 -3.98000000e-04 -1.65360702e-12 7.11202115e-02 5.58989874e-02 9.16841198e-02 6.07367670e-02 2.36253644e-03 7.18197378e-01 3.12653592e+03 -3.98100000e-04 -1.65360702e-12 7.11197242e-02 5.58980961e-02 9.16846870e-02 6.07376805e-02 2.36243421e-03 7.18197378e-01 3.12653592e+03 -3.98200000e-04 -1.65360702e-12 7.11192381e-02 5.58972072e-02 9.16852528e-02 6.07385918e-02 2.36233224e-03 7.18197378e-01 3.12653592e+03 -3.98300000e-04 -1.65360702e-12 7.11187533e-02 5.58963204e-02 9.16858172e-02 6.07395007e-02 2.36223054e-03 7.18197378e-01 3.12653592e+03 -3.98400000e-04 -1.65360702e-12 7.11182696e-02 5.58954360e-02 9.16863801e-02 6.07404073e-02 2.36212909e-03 7.18197378e-01 3.12653592e+03 -3.98500000e-04 -1.65360702e-12 7.11177872e-02 5.58945537e-02 9.16869416e-02 6.07413117e-02 2.36202789e-03 7.18197378e-01 3.12653592e+03 -3.98600000e-04 -1.65360702e-12 7.11173060e-02 5.58936738e-02 9.16875017e-02 6.07422137e-02 2.36192696e-03 7.18197378e-01 3.12653592e+03 -3.98700000e-04 -1.65360702e-12 7.11168261e-02 5.58927960e-02 9.16880604e-02 6.07431135e-02 2.36182627e-03 7.18197378e-01 3.12653592e+03 -3.98800000e-04 -1.65360702e-12 7.11163473e-02 5.58919205e-02 9.16886176e-02 6.07440109e-02 2.36172585e-03 7.18197378e-01 3.12653592e+03 -3.98900000e-04 -1.65360702e-12 7.11158697e-02 5.58910472e-02 9.16891734e-02 6.07449061e-02 2.36162568e-03 7.18197378e-01 3.12653592e+03 -3.99000000e-04 -1.65360702e-12 7.11153934e-02 5.58901761e-02 9.16897278e-02 6.07457991e-02 2.36152576e-03 7.18197378e-01 3.12653592e+03 -3.99100000e-04 -1.65360702e-12 7.11149183e-02 5.58893072e-02 9.16902808e-02 6.07466898e-02 2.36142609e-03 7.18197378e-01 3.12653592e+03 -3.99200000e-04 -1.65360702e-12 7.11144443e-02 5.58884406e-02 9.16908324e-02 6.07475782e-02 2.36132668e-03 7.18197378e-01 3.12653592e+03 -3.99300000e-04 -1.65360702e-12 7.11139716e-02 5.58875761e-02 9.16913826e-02 6.07484643e-02 2.36122752e-03 7.18197378e-01 3.12653592e+03 -3.99400000e-04 -1.65360702e-12 7.11135000e-02 5.58867138e-02 9.16919314e-02 6.07493483e-02 2.36112861e-03 7.18197378e-01 3.12653592e+03 -3.99500000e-04 -1.65360702e-12 7.11130297e-02 5.58858538e-02 9.16924788e-02 6.07502299e-02 2.36102995e-03 7.18197378e-01 3.12653592e+03 -3.99600000e-04 -1.65360702e-12 7.11125605e-02 5.58849959e-02 9.16930248e-02 6.07511094e-02 2.36093154e-03 7.18197378e-01 3.12653592e+03 -3.99700000e-04 -1.65360702e-12 7.11120925e-02 5.58841402e-02 9.16935694e-02 6.07519866e-02 2.36083338e-03 7.18197378e-01 3.12666251e+03 -3.99800000e-04 -1.65360702e-12 7.11116258e-02 5.58832866e-02 9.16941127e-02 6.07528616e-02 2.36073547e-03 7.18197378e-01 3.12666251e+03 -3.99900000e-04 -1.65360702e-12 7.11111601e-02 5.58824353e-02 9.16946545e-02 6.07537344e-02 2.36063781e-03 7.18197378e-01 3.12666251e+03 -4.00000000e-04 -1.65360702e-12 7.11106957e-02 5.58815861e-02 9.16951950e-02 6.07546050e-02 2.36054039e-03 7.18197378e-01 3.12666251e+03 -4.00100000e-04 -1.65360702e-12 7.11102324e-02 5.58807390e-02 9.16957341e-02 6.07554733e-02 2.36044323e-03 7.18197378e-01 3.12666251e+03 -4.00200000e-04 -1.65360702e-12 7.11097704e-02 5.58798941e-02 9.16962719e-02 6.07563395e-02 2.36034630e-03 7.18197378e-01 3.12666251e+03 -4.00300000e-04 -1.65360702e-12 7.11093094e-02 5.58790514e-02 9.16968082e-02 6.07572035e-02 2.36024963e-03 7.18197378e-01 3.12666251e+03 -4.00400000e-04 -1.65360702e-12 7.11088497e-02 5.58782108e-02 9.16973432e-02 6.07580652e-02 2.36015319e-03 7.18197378e-01 3.12666251e+03 -4.00500000e-04 -1.65360702e-12 7.11083911e-02 5.58773723e-02 9.16978769e-02 6.07589248e-02 2.36005701e-03 7.18197378e-01 3.12666251e+03 -4.00600000e-04 -1.65360702e-12 7.11079337e-02 5.58765360e-02 9.16984092e-02 6.07597823e-02 2.35996106e-03 7.18197378e-01 3.12666251e+03 -4.00700000e-04 -1.65360702e-12 7.11074774e-02 5.58757017e-02 9.16989401e-02 6.07606375e-02 2.35986536e-03 7.18197378e-01 3.12666251e+03 -4.00800000e-04 -1.65360702e-12 7.11070223e-02 5.58748696e-02 9.16994697e-02 6.07614906e-02 2.35976990e-03 7.18197378e-01 3.12666251e+03 -4.00900000e-04 -1.65360702e-12 7.11065683e-02 5.58740397e-02 9.16999980e-02 6.07623415e-02 2.35967469e-03 7.18197378e-01 3.12666251e+03 -4.01000000e-04 -1.65360702e-12 7.11061155e-02 5.58732118e-02 9.17005249e-02 6.07631903e-02 2.35957971e-03 7.18197378e-01 3.12666251e+03 -4.01100000e-04 -1.65360702e-12 7.11056638e-02 5.58723860e-02 9.17010505e-02 6.07640369e-02 2.35948498e-03 7.18197378e-01 3.12666251e+03 -4.01200000e-04 -1.65360702e-12 7.11052133e-02 5.58715623e-02 9.17015747e-02 6.07648813e-02 2.35939049e-03 7.18197378e-01 3.12666251e+03 -4.01300000e-04 -1.65360702e-12 7.11047639e-02 5.58707408e-02 9.17020976e-02 6.07657237e-02 2.35929623e-03 7.18197378e-01 3.12666251e+03 -4.01400000e-04 -1.65360702e-12 7.11043157e-02 5.58699213e-02 9.17026192e-02 6.07665638e-02 2.35920222e-03 7.18197378e-01 3.12666251e+03 -4.01500000e-04 -1.65360702e-12 7.11038685e-02 5.58691039e-02 9.17031394e-02 6.07674019e-02 2.35910844e-03 7.18197378e-01 3.12666251e+03 -4.01600000e-04 -1.65360702e-12 7.11034226e-02 5.58682885e-02 9.17036583e-02 6.07682378e-02 2.35901490e-03 7.18197378e-01 3.12666251e+03 -4.01700000e-04 -1.65360702e-12 7.11029777e-02 5.58674753e-02 9.17041759e-02 6.07690716e-02 2.35892160e-03 7.18197378e-01 3.12666251e+03 -4.01800000e-04 -1.65360702e-12 7.11025340e-02 5.58666641e-02 9.17046922e-02 6.07699033e-02 2.35882853e-03 7.18197378e-01 3.12666251e+03 -4.01900000e-04 -1.65360702e-12 7.11020914e-02 5.58658549e-02 9.17052072e-02 6.07707329e-02 2.35873570e-03 7.18197378e-01 3.12666251e+03 -4.02000000e-04 -1.65360702e-12 7.11016499e-02 5.58650479e-02 9.17057209e-02 6.07715604e-02 2.35864311e-03 7.18197378e-01 3.12678190e+03 -4.02100000e-04 -1.65360702e-12 7.11012095e-02 5.58642428e-02 9.17062332e-02 6.07723858e-02 2.35855075e-03 7.18197378e-01 3.12678190e+03 -4.02200000e-04 -1.65360702e-12 7.11007702e-02 5.58634399e-02 9.17067443e-02 6.07732091e-02 2.35845862e-03 7.18197378e-01 3.12678190e+03 -4.02300000e-04 -1.65360702e-12 7.11003321e-02 5.58626389e-02 9.17072541e-02 6.07740303e-02 2.35836673e-03 7.18197378e-01 3.12678190e+03 -4.02400000e-04 -1.65360702e-12 7.10998951e-02 5.58618400e-02 9.17077625e-02 6.07748495e-02 2.35827507e-03 7.18197378e-01 3.12678190e+03 -4.02500000e-04 -1.65360702e-12 7.10994591e-02 5.58610432e-02 9.17082697e-02 6.07756665e-02 2.35818364e-03 7.18197378e-01 3.12678190e+03 -4.02600000e-04 -1.65360702e-12 7.10990243e-02 5.58602483e-02 9.17087756e-02 6.07764815e-02 2.35809245e-03 7.18197378e-01 3.12678190e+03 -4.02700000e-04 -1.65360702e-12 7.10985906e-02 5.58594555e-02 9.17092802e-02 6.07772944e-02 2.35800148e-03 7.18197378e-01 3.12678190e+03 -4.02800000e-04 -1.65360702e-12 7.10981579e-02 5.58586647e-02 9.17097835e-02 6.07781053e-02 2.35791075e-03 7.18197378e-01 3.12678190e+03 -4.02900000e-04 -1.65360702e-12 7.10977264e-02 5.58578759e-02 9.17102856e-02 6.07789140e-02 2.35782025e-03 7.18197378e-01 3.12678190e+03 -4.03000000e-04 -1.65360702e-12 7.10972960e-02 5.58570891e-02 9.17107863e-02 6.07797208e-02 2.35772997e-03 7.18197378e-01 3.12678190e+03 -4.03100000e-04 -1.65360702e-12 7.10968666e-02 5.58563043e-02 9.17112858e-02 6.07805255e-02 2.35763993e-03 7.18197378e-01 3.12678190e+03 -4.03200000e-04 -1.65360702e-12 7.10964384e-02 5.58555215e-02 9.17117840e-02 6.07813282e-02 2.35755011e-03 7.18197378e-01 3.12678190e+03 -4.03300000e-04 -1.65360702e-12 7.10960112e-02 5.58547407e-02 9.17122810e-02 6.07821288e-02 2.35746052e-03 7.18197378e-01 3.12678190e+03 -4.03400000e-04 -1.65360702e-12 7.10955851e-02 5.58539619e-02 9.17127767e-02 6.07829274e-02 2.35737116e-03 7.18197378e-01 3.12678190e+03 -4.03500000e-04 -1.65360702e-12 7.10951601e-02 5.58531850e-02 9.17132711e-02 6.07837239e-02 2.35728203e-03 7.18197378e-01 3.12678190e+03 -4.03600000e-04 -1.65360702e-12 7.10947361e-02 5.58524101e-02 9.17137643e-02 6.07845185e-02 2.35719312e-03 7.18197378e-01 3.12678190e+03 -4.03700000e-04 -1.65360702e-12 7.10943133e-02 5.58516372e-02 9.17142562e-02 6.07853110e-02 2.35710444e-03 7.18197378e-01 3.12678190e+03 -4.03800000e-04 -1.65360702e-12 7.10938915e-02 5.58508663e-02 9.17147469e-02 6.07861015e-02 2.35701598e-03 7.18197378e-01 3.12678190e+03 -4.03900000e-04 -1.65360702e-12 7.10934707e-02 5.58500973e-02 9.17152363e-02 6.07868901e-02 2.35692775e-03 7.18197378e-01 3.12678190e+03 -4.04000000e-04 -1.65360702e-12 7.10930511e-02 5.58493303e-02 9.17157245e-02 6.07876766e-02 2.35683973e-03 7.18197378e-01 3.12678190e+03 -4.04100000e-04 -1.65360702e-12 7.10926325e-02 5.58485652e-02 9.17162114e-02 6.07884611e-02 2.35675195e-03 7.18197378e-01 3.12678190e+03 -4.04200000e-04 -1.65360702e-12 7.10922149e-02 5.58478021e-02 9.17166971e-02 6.07892436e-02 2.35666438e-03 7.18197378e-01 3.12678190e+03 -4.04300000e-04 -1.65360702e-12 7.10917984e-02 5.58470409e-02 9.17171816e-02 6.07900242e-02 2.35657704e-03 7.18197378e-01 3.12689450e+03 -4.04400000e-04 -1.65360702e-12 7.10913830e-02 5.58462817e-02 9.17176648e-02 6.07908028e-02 2.35648992e-03 7.18197378e-01 3.12689450e+03 -4.04500000e-04 -1.65360702e-12 7.10909686e-02 5.58455244e-02 9.17181468e-02 6.07915793e-02 2.35640302e-03 7.18197378e-01 3.12689450e+03 -4.04600000e-04 -1.65360702e-12 7.10905553e-02 5.58447690e-02 9.17186276e-02 6.07923540e-02 2.35631634e-03 7.18197378e-01 3.12689450e+03 -4.04700000e-04 -1.65360702e-12 7.10901430e-02 5.58440155e-02 9.17191071e-02 6.07931266e-02 2.35622988e-03 7.18197378e-01 3.12689450e+03 -4.04800000e-04 -1.65360702e-12 7.10897318e-02 5.58432639e-02 9.17195855e-02 6.07938973e-02 2.35614364e-03 7.18197378e-01 3.12689450e+03 -4.04900000e-04 -1.65360702e-12 7.10893216e-02 5.58425143e-02 9.17200626e-02 6.07946661e-02 2.35605762e-03 7.18197378e-01 3.12689450e+03 -4.05000000e-04 -1.65360702e-12 7.10889124e-02 5.58417665e-02 9.17205385e-02 6.07954329e-02 2.35597182e-03 7.18197378e-01 3.12689450e+03 -4.05100000e-04 -1.65360702e-12 7.10885043e-02 5.58410207e-02 9.17210132e-02 6.07961977e-02 2.35588623e-03 7.18197378e-01 3.12689450e+03 -4.05200000e-04 -1.65360702e-12 7.10880972e-02 5.58402768e-02 9.17214867e-02 6.07969606e-02 2.35580087e-03 7.18197378e-01 3.12689450e+03 -4.05300000e-04 -1.65360702e-12 7.10876912e-02 5.58395347e-02 9.17219589e-02 6.07977216e-02 2.35571571e-03 7.18197378e-01 3.12689450e+03 -4.05400000e-04 -1.65360702e-12 7.10872862e-02 5.58387945e-02 9.17224300e-02 6.07984806e-02 2.35563078e-03 7.18197378e-01 3.12689450e+03 -4.05500000e-04 -1.65360702e-12 7.10868822e-02 5.58380563e-02 9.17228999e-02 6.07992377e-02 2.35554606e-03 7.18197378e-01 3.12689450e+03 -4.05600000e-04 -1.65360702e-12 7.10864792e-02 5.58373199e-02 9.17233686e-02 6.07999929e-02 2.35546155e-03 7.18197378e-01 3.12689450e+03 -4.05700000e-04 -1.65360702e-12 7.10860772e-02 5.58365853e-02 9.17238361e-02 6.08007462e-02 2.35537726e-03 7.18197378e-01 3.12689450e+03 -4.05800000e-04 -1.65360702e-12 7.10856763e-02 5.58358527e-02 9.17243024e-02 6.08014976e-02 2.35529319e-03 7.18197378e-01 3.12689450e+03 -4.05900000e-04 -1.65360702e-12 7.10852764e-02 5.58351219e-02 9.17247675e-02 6.08022470e-02 2.35520932e-03 7.18197378e-01 3.12689450e+03 -4.06000000e-04 -1.65360702e-12 7.10848775e-02 5.58343929e-02 9.17252315e-02 6.08029946e-02 2.35512567e-03 7.18197378e-01 3.12689450e+03 -4.06100000e-04 -1.65360702e-12 7.10844796e-02 5.58336658e-02 9.17256942e-02 6.08037403e-02 2.35504224e-03 7.18197378e-01 3.12689450e+03 -4.06200000e-04 -1.65360702e-12 7.10840827e-02 5.58329406e-02 9.17261558e-02 6.08044840e-02 2.35495901e-03 7.18197378e-01 3.12689450e+03 -4.06300000e-04 -1.65360702e-12 7.10836868e-02 5.58322172e-02 9.17266162e-02 6.08052259e-02 2.35487599e-03 7.18197378e-01 3.12689450e+03 -4.06400000e-04 -1.65360702e-12 7.10832919e-02 5.58314957e-02 9.17270755e-02 6.08059659e-02 2.35479319e-03 7.18197378e-01 3.12689450e+03 -4.06500000e-04 -1.65360702e-12 7.10828980e-02 5.58307759e-02 9.17275335e-02 6.08067040e-02 2.35471059e-03 7.18197378e-01 3.12689450e+03 -4.06600000e-04 -1.65360702e-12 7.10825052e-02 5.58300581e-02 9.17279904e-02 6.08074403e-02 2.35462821e-03 7.18197378e-01 3.12700068e+03 -4.06700000e-04 -1.65360702e-12 7.10821133e-02 5.58293420e-02 9.17284462e-02 6.08081747e-02 2.35454603e-03 7.18197378e-01 3.12700068e+03 -4.06800000e-04 -1.65360702e-12 7.10817224e-02 5.58286278e-02 9.17289008e-02 6.08089072e-02 2.35446407e-03 7.18197378e-01 3.12700068e+03 -4.06900000e-04 -1.65360702e-12 7.10813325e-02 5.58279153e-02 9.17293542e-02 6.08096378e-02 2.35438231e-03 7.18197378e-01 3.12700068e+03 -4.07000000e-04 -1.65360702e-12 7.10809436e-02 5.58272047e-02 9.17298065e-02 6.08103666e-02 2.35430076e-03 7.18197378e-01 3.12700068e+03 -4.07100000e-04 -1.65360702e-12 7.10805556e-02 5.58264959e-02 9.17302576e-02 6.08110936e-02 2.35421941e-03 7.18197378e-01 3.12700068e+03 -4.07200000e-04 -1.65360702e-12 7.10801687e-02 5.58257889e-02 9.17307076e-02 6.08118187e-02 2.35413827e-03 7.18197378e-01 3.12700068e+03 -4.07300000e-04 -1.65360702e-12 7.10797827e-02 5.58250837e-02 9.17311564e-02 6.08125420e-02 2.35405734e-03 7.18197378e-01 3.12700068e+03 -4.07400000e-04 -1.65360702e-12 7.10793978e-02 5.58243803e-02 9.17316041e-02 6.08132634e-02 2.35397661e-03 7.18197378e-01 3.12700068e+03 -4.07500000e-04 -1.65360702e-12 7.10790137e-02 5.58236787e-02 9.17320506e-02 6.08139830e-02 2.35389609e-03 7.18197378e-01 3.12700068e+03 -4.07600000e-04 -1.65360702e-12 7.10786307e-02 5.58229789e-02 9.17324961e-02 6.08147008e-02 2.35381577e-03 7.18197378e-01 3.12700068e+03 -4.07700000e-04 -1.65360702e-12 7.10782486e-02 5.58222808e-02 9.17329403e-02 6.08154167e-02 2.35373566e-03 7.18197378e-01 3.12700068e+03 -4.07800000e-04 -1.65360702e-12 7.10778675e-02 5.58215845e-02 9.17333835e-02 6.08161308e-02 2.35365575e-03 7.18197378e-01 3.12700068e+03 -4.07900000e-04 -1.65360702e-12 7.10774874e-02 5.58208900e-02 9.17338255e-02 6.08168432e-02 2.35357604e-03 7.18197378e-01 3.12700068e+03 -4.08000000e-04 -1.65360702e-12 7.10771083e-02 5.58201973e-02 9.17342664e-02 6.08175537e-02 2.35349654e-03 7.18197378e-01 3.12700068e+03 -4.08100000e-04 -1.65360702e-12 7.10767300e-02 5.58195063e-02 9.17347062e-02 6.08182624e-02 2.35341724e-03 7.18197378e-01 3.12700068e+03 -4.08200000e-04 -1.65360702e-12 7.10763528e-02 5.58188171e-02 9.17351449e-02 6.08189693e-02 2.35333813e-03 7.18197378e-01 3.12700068e+03 -4.08300000e-04 -1.65360702e-12 7.10759765e-02 5.58181296e-02 9.17355824e-02 6.08196744e-02 2.35325923e-03 7.18197378e-01 3.12700068e+03 -4.08400000e-04 -1.65360702e-12 7.10756012e-02 5.58174439e-02 9.17360188e-02 6.08203777e-02 2.35318053e-03 7.18197378e-01 3.12700068e+03 -4.08500000e-04 -1.65360702e-12 7.10752268e-02 5.58167599e-02 9.17364541e-02 6.08210793e-02 2.35310203e-03 7.18197378e-01 3.12700068e+03 -4.08600000e-04 -1.65360702e-12 7.10748534e-02 5.58160777e-02 9.17368884e-02 6.08217790e-02 2.35302373e-03 7.18197378e-01 3.12700068e+03 -4.08700000e-04 -1.65360702e-12 7.10744809e-02 5.58153972e-02 9.17373215e-02 6.08224770e-02 2.35294563e-03 7.18197378e-01 3.12700068e+03 -4.08800000e-04 -1.65360702e-12 7.10741093e-02 5.58147184e-02 9.17377535e-02 6.08231732e-02 2.35286772e-03 7.18197378e-01 3.12700068e+03 -4.08900000e-04 -1.65360702e-12 7.10737387e-02 5.58140414e-02 9.17381844e-02 6.08238676e-02 2.35279002e-03 7.18197378e-01 3.12710081e+03 -4.09000000e-04 -1.65360702e-12 7.10733691e-02 5.58133661e-02 9.17386142e-02 6.08245603e-02 2.35271251e-03 7.18197378e-01 3.12710081e+03 -4.09100000e-04 -1.65360702e-12 7.10730003e-02 5.58126925e-02 9.17390429e-02 6.08252512e-02 2.35263519e-03 7.18197378e-01 3.12710081e+03 -4.09200000e-04 -1.65360702e-12 7.10726325e-02 5.58120206e-02 9.17394705e-02 6.08259404e-02 2.35255808e-03 7.18197378e-01 3.12710081e+03 -4.09300000e-04 -1.65360702e-12 7.10722657e-02 5.58113504e-02 9.17398971e-02 6.08266278e-02 2.35248116e-03 7.18197378e-01 3.12710081e+03 -4.09400000e-04 -1.65360702e-12 7.10718998e-02 5.58106820e-02 9.17403225e-02 6.08273135e-02 2.35240443e-03 7.18197378e-01 3.12710081e+03 -4.09500000e-04 -1.65360702e-12 7.10715348e-02 5.58100152e-02 9.17407469e-02 6.08279974e-02 2.35232790e-03 7.18197378e-01 3.12710081e+03 -4.09600000e-04 -1.65360702e-12 7.10711707e-02 5.58093501e-02 9.17411702e-02 6.08286796e-02 2.35225157e-03 7.18197378e-01 3.12710081e+03 -4.09700000e-04 -1.65360702e-12 7.10708075e-02 5.58086868e-02 9.17415924e-02 6.08293600e-02 2.35217542e-03 7.18197378e-01 3.12710081e+03 -4.09800000e-04 -1.65360702e-12 7.10704453e-02 5.58080251e-02 9.17420135e-02 6.08300388e-02 2.35209948e-03 7.18197378e-01 3.12710081e+03 -4.09900000e-04 -1.65360702e-12 7.10700840e-02 5.58073651e-02 9.17424336e-02 6.08307158e-02 2.35202372e-03 7.18197378e-01 3.12710081e+03 -4.10000000e-04 -1.65360702e-12 7.10697236e-02 5.58067068e-02 9.17428526e-02 6.08313911e-02 2.35194816e-03 7.18197378e-01 3.12710081e+03 -4.10100000e-04 -1.65360702e-12 7.10693641e-02 5.58060501e-02 9.17432705e-02 6.08320646e-02 2.35187279e-03 7.18197378e-01 3.12710081e+03 -4.10200000e-04 -1.65360702e-12 7.10690056e-02 5.58053951e-02 9.17436874e-02 6.08327365e-02 2.35179761e-03 7.18197378e-01 3.12710081e+03 -4.10300000e-04 -1.65360702e-12 7.10686479e-02 5.58047418e-02 9.17441032e-02 6.08334066e-02 2.35172262e-03 7.18197378e-01 3.12710081e+03 -4.10400000e-04 -1.65360702e-12 7.10682912e-02 5.58040902e-02 9.17445179e-02 6.08340751e-02 2.35164782e-03 7.18197378e-01 3.12710081e+03 -4.10500000e-04 -1.65360702e-12 7.10679353e-02 5.58034402e-02 9.17449316e-02 6.08347418e-02 2.35157321e-03 7.18197378e-01 3.12710081e+03 -4.10600000e-04 -1.65360702e-12 7.10675804e-02 5.58027918e-02 9.17453442e-02 6.08354069e-02 2.35149879e-03 7.18197378e-01 3.12710081e+03 -4.10700000e-04 -1.65360702e-12 7.10672263e-02 5.58021452e-02 9.17457558e-02 6.08360703e-02 2.35142456e-03 7.18197378e-01 3.12710081e+03 -4.10800000e-04 -1.65360702e-12 7.10668732e-02 5.58015001e-02 9.17461664e-02 6.08367320e-02 2.35135052e-03 7.18197378e-01 3.12710081e+03 -4.10900000e-04 -1.65360702e-12 7.10665209e-02 5.58008567e-02 9.17465759e-02 6.08373920e-02 2.35127667e-03 7.18197378e-01 3.12710081e+03 -4.11000000e-04 -1.65360702e-12 7.10661696e-02 5.58002150e-02 9.17469843e-02 6.08380503e-02 2.35120300e-03 7.18197378e-01 3.12710081e+03 -4.11100000e-04 -1.65360702e-12 7.10658191e-02 5.57995748e-02 9.17473917e-02 6.08387069e-02 2.35112952e-03 7.18197378e-01 3.12710081e+03 -4.11200000e-04 -1.65360702e-12 7.10654695e-02 5.57989363e-02 9.17477981e-02 6.08393619e-02 2.35105623e-03 7.18197378e-01 3.12719522e+03 -4.11300000e-04 -1.65360702e-12 7.10651209e-02 5.57982995e-02 9.17482035e-02 6.08400152e-02 2.35098312e-03 7.18197378e-01 3.12719522e+03 -4.11400000e-04 -1.65360702e-12 7.10647730e-02 5.57976642e-02 9.17486078e-02 6.08406669e-02 2.35091020e-03 7.18197378e-01 3.12719522e+03 -4.11500000e-04 -1.65360702e-12 7.10644261e-02 5.57970306e-02 9.17490110e-02 6.08413169e-02 2.35083747e-03 7.18197378e-01 3.12719522e+03 -4.11600000e-04 -1.65360702e-12 7.10640801e-02 5.57963986e-02 9.17494133e-02 6.08419653e-02 2.35076492e-03 7.18197378e-01 3.12719522e+03 -4.11700000e-04 -1.65360702e-12 7.10637349e-02 5.57957682e-02 9.17498145e-02 6.08426120e-02 2.35069255e-03 7.18197378e-01 3.12719522e+03 -4.11800000e-04 -1.65360702e-12 7.10633906e-02 5.57951394e-02 9.17502147e-02 6.08432570e-02 2.35062037e-03 7.18197378e-01 3.12719522e+03 -4.11900000e-04 -1.65360702e-12 7.10630472e-02 5.57945121e-02 9.17506139e-02 6.08439005e-02 2.35054837e-03 7.18197378e-01 3.12719522e+03 -4.12000000e-04 -1.65360702e-12 7.10627047e-02 5.57938865e-02 9.17510121e-02 6.08445423e-02 2.35047656e-03 7.18197378e-01 3.12719522e+03 -4.12100000e-04 -1.65360702e-12 7.10623630e-02 5.57932625e-02 9.17514093e-02 6.08451824e-02 2.35040493e-03 7.18197378e-01 3.12719522e+03 -4.12200000e-04 -1.65360702e-12 7.10620222e-02 5.57926401e-02 9.17518054e-02 6.08458210e-02 2.35033348e-03 7.18197378e-01 3.12719522e+03 -4.12300000e-04 -1.65360702e-12 7.10616823e-02 5.57920193e-02 9.17522006e-02 6.08464579e-02 2.35026221e-03 7.18197378e-01 3.12719522e+03 -4.12400000e-04 -1.65360702e-12 7.10613432e-02 5.57914000e-02 9.17525947e-02 6.08470932e-02 2.35019112e-03 7.18197378e-01 3.12719522e+03 -4.12500000e-04 -1.65360702e-12 7.10610050e-02 5.57907823e-02 9.17529878e-02 6.08477268e-02 2.35012021e-03 7.18197378e-01 3.12719522e+03 -4.12600000e-04 -1.65360702e-12 7.10606676e-02 5.57901662e-02 9.17533799e-02 6.08483589e-02 2.35004948e-03 7.18197378e-01 3.12719522e+03 -4.12700000e-04 -1.65360702e-12 7.10603311e-02 5.57895516e-02 9.17537711e-02 6.08489894e-02 2.34997894e-03 7.18197378e-01 3.12719522e+03 -4.12800000e-04 -1.65360702e-12 7.10599955e-02 5.57889387e-02 9.17541612e-02 6.08496182e-02 2.34990857e-03 7.18197378e-01 3.12719522e+03 -4.12900000e-04 -1.65360702e-12 7.10596607e-02 5.57883272e-02 9.17545504e-02 6.08502455e-02 2.34983838e-03 7.18197378e-01 3.12719522e+03 -4.13000000e-04 -1.65360702e-12 7.10593267e-02 5.57877174e-02 9.17549385e-02 6.08508712e-02 2.34976837e-03 7.18197378e-01 3.12719522e+03 -4.13100000e-04 -1.65360702e-12 7.10589936e-02 5.57871091e-02 9.17553257e-02 6.08514952e-02 2.34969853e-03 7.18197378e-01 3.12719522e+03 -4.13200000e-04 -1.65360702e-12 7.10586614e-02 5.57865023e-02 9.17557119e-02 6.08521177e-02 2.34962888e-03 7.18197378e-01 3.12719522e+03 -4.13300000e-04 -1.65360702e-12 7.10583300e-02 5.57858971e-02 9.17560970e-02 6.08527386e-02 2.34955940e-03 7.18197378e-01 3.12719522e+03 -4.13400000e-04 -1.65360702e-12 7.10579994e-02 5.57852934e-02 9.17564813e-02 6.08533580e-02 2.34949010e-03 7.18197378e-01 3.12719522e+03 -4.13500000e-04 -1.65360702e-12 7.10576697e-02 5.57846913e-02 9.17568645e-02 6.08539757e-02 2.34942097e-03 7.18197378e-01 3.12728425e+03 -4.13600000e-04 -1.65360702e-12 7.10573408e-02 5.57840907e-02 9.17572468e-02 6.08545919e-02 2.34935202e-03 7.18197378e-01 3.12728425e+03 -4.13700000e-04 -1.65360702e-12 7.10570127e-02 5.57834916e-02 9.17576280e-02 6.08552065e-02 2.34928324e-03 7.18197378e-01 3.12728425e+03 -4.13800000e-04 -1.65360702e-12 7.10566855e-02 5.57828941e-02 9.17580084e-02 6.08558196e-02 2.34921464e-03 7.18197378e-01 3.12728425e+03 -4.13900000e-04 -1.65360702e-12 7.10563591e-02 5.57822980e-02 9.17583877e-02 6.08564311e-02 2.34914622e-03 7.18197378e-01 3.12728425e+03 -4.14000000e-04 -1.65360702e-12 7.10560335e-02 5.57817035e-02 9.17587661e-02 6.08570411e-02 2.34907797e-03 7.18197378e-01 3.12728425e+03 -4.14100000e-04 -1.65360702e-12 7.10557088e-02 5.57811105e-02 9.17591435e-02 6.08576494e-02 2.34900989e-03 7.18197378e-01 3.12728425e+03 -4.14200000e-04 -1.65360702e-12 7.10553849e-02 5.57805190e-02 9.17595200e-02 6.08582563e-02 2.34894198e-03 7.18197378e-01 3.12728425e+03 -4.14300000e-04 -1.65360702e-12 7.10550618e-02 5.57799291e-02 9.17598955e-02 6.08588616e-02 2.34887425e-03 7.18197378e-01 3.12728425e+03 -4.14400000e-04 -1.65360702e-12 7.10547395e-02 5.57793406e-02 9.17602700e-02 6.08594654e-02 2.34880669e-03 7.18197378e-01 3.12728425e+03 -4.14500000e-04 -1.65360702e-12 7.10544181e-02 5.57787536e-02 9.17606436e-02 6.08600676e-02 2.34873930e-03 7.18197378e-01 3.12728425e+03 -4.14600000e-04 -1.65360702e-12 7.10540974e-02 5.57781681e-02 9.17610162e-02 6.08606683e-02 2.34867208e-03 7.18197378e-01 3.12728425e+03 -4.14700000e-04 -1.65360702e-12 7.10537776e-02 5.57775841e-02 9.17613879e-02 6.08612675e-02 2.34860503e-03 7.18197378e-01 3.12728425e+03 -4.14800000e-04 -1.65360702e-12 7.10534586e-02 5.57770016e-02 9.17617586e-02 6.08618651e-02 2.34853816e-03 7.18197378e-01 3.12728425e+03 -4.14900000e-04 -1.65360702e-12 7.10531404e-02 5.57764206e-02 9.17621284e-02 6.08624613e-02 2.34847145e-03 7.18197378e-01 3.12728425e+03 -4.15000000e-04 -1.65360702e-12 7.10528230e-02 5.57758411e-02 9.17624973e-02 6.08630559e-02 2.34840491e-03 7.18197378e-01 3.12728425e+03 -4.15100000e-04 -1.65360702e-12 7.10525064e-02 5.57752630e-02 9.17628652e-02 6.08636490e-02 2.34833855e-03 7.18197378e-01 3.12728425e+03 -4.15200000e-04 -1.65360702e-12 7.10521906e-02 5.57746864e-02 9.17632322e-02 6.08642406e-02 2.34827235e-03 7.18197378e-01 3.12728425e+03 -4.15300000e-04 -1.65360702e-12 7.10518756e-02 5.57741113e-02 9.17635982e-02 6.08648307e-02 2.34820632e-03 7.18197378e-01 3.12728425e+03 -4.15400000e-04 -1.65360702e-12 7.10515615e-02 5.57735376e-02 9.17639633e-02 6.08654193e-02 2.34814045e-03 7.18197378e-01 3.12728425e+03 -4.15500000e-04 -1.65360702e-12 7.10512481e-02 5.57729654e-02 9.17643275e-02 6.08660064e-02 2.34807476e-03 7.18197378e-01 3.12728425e+03 -4.15600000e-04 -1.65360702e-12 7.10509355e-02 5.57723947e-02 9.17646908e-02 6.08665920e-02 2.34800923e-03 7.18197378e-01 3.12728425e+03 -4.15700000e-04 -1.65360702e-12 7.10506237e-02 5.57718254e-02 9.17650531e-02 6.08671761e-02 2.34794387e-03 7.18197378e-01 3.12728425e+03 -4.15800000e-04 -1.65360702e-12 7.10503127e-02 5.57712575e-02 9.17654145e-02 6.08677587e-02 2.34787867e-03 7.18197378e-01 3.12728425e+03 -4.15900000e-04 -1.65360702e-12 7.10500025e-02 5.57706911e-02 9.17657750e-02 6.08683399e-02 2.34781364e-03 7.18197378e-01 3.12736820e+03 -4.16000000e-04 -1.65360702e-12 7.10496930e-02 5.57701262e-02 9.17661346e-02 6.08689196e-02 2.34774878e-03 7.18197378e-01 3.12736820e+03 -4.16100000e-04 -1.65360702e-12 7.10493844e-02 5.57695627e-02 9.17664932e-02 6.08694978e-02 2.34768408e-03 7.18197378e-01 3.12736820e+03 -4.16200000e-04 -1.65360702e-12 7.10490766e-02 5.57690006e-02 9.17668510e-02 6.08700745e-02 2.34761955e-03 7.18197378e-01 3.12736820e+03 -4.16300000e-04 -1.65360702e-12 7.10487695e-02 5.57684400e-02 9.17672078e-02 6.08706497e-02 2.34755518e-03 7.18197378e-01 3.12736820e+03 -4.16400000e-04 -1.65360702e-12 7.10484632e-02 5.57678807e-02 9.17675637e-02 6.08712235e-02 2.34749097e-03 7.18197378e-01 3.12736820e+03 -4.16500000e-04 -1.65360702e-12 7.10481577e-02 5.57673230e-02 9.17679187e-02 6.08717959e-02 2.34742692e-03 7.18197378e-01 3.12736820e+03 -4.16600000e-04 -1.65360702e-12 7.10478529e-02 5.57667666e-02 9.17682728e-02 6.08723668e-02 2.34736304e-03 7.18197378e-01 3.12736820e+03 -4.16700000e-04 -1.65360702e-12 7.10475490e-02 5.57662116e-02 9.17686260e-02 6.08729362e-02 2.34729933e-03 7.18197378e-01 3.12736820e+03 -4.16800000e-04 -1.65360702e-12 7.10472458e-02 5.57656581e-02 9.17689783e-02 6.08735042e-02 2.34723577e-03 7.18197378e-01 3.12736820e+03 -4.16900000e-04 -1.65360702e-12 7.10469434e-02 5.57651060e-02 9.17693297e-02 6.08740707e-02 2.34717237e-03 7.18197378e-01 3.12736820e+03 -4.17000000e-04 -1.65360702e-12 7.10466417e-02 5.57645552e-02 9.17696802e-02 6.08746358e-02 2.34710914e-03 7.18197378e-01 3.12736820e+03 -4.17100000e-04 -1.65360702e-12 7.10463408e-02 5.57640059e-02 9.17700299e-02 6.08751995e-02 2.34704607e-03 7.18197378e-01 3.12736820e+03 -4.17200000e-04 -1.65360702e-12 7.10460407e-02 5.57634580e-02 9.17703786e-02 6.08757617e-02 2.34698316e-03 7.18197378e-01 3.12736820e+03 -4.17300000e-04 -1.65360702e-12 7.10457413e-02 5.57629115e-02 9.17707264e-02 6.08763225e-02 2.34692040e-03 7.18197378e-01 3.12736820e+03 -4.17400000e-04 -1.65360702e-12 7.10454427e-02 5.57623664e-02 9.17710734e-02 6.08768819e-02 2.34685781e-03 7.18197378e-01 3.12736820e+03 -4.17500000e-04 -1.65360702e-12 7.10451449e-02 5.57618226e-02 9.17714195e-02 6.08774398e-02 2.34679538e-03 7.18197378e-01 3.12736820e+03 -4.17600000e-04 -1.65360702e-12 7.10448478e-02 5.57612803e-02 9.17717646e-02 6.08779964e-02 2.34673310e-03 7.18197378e-01 3.12736820e+03 -4.17700000e-04 -1.65360702e-12 7.10445515e-02 5.57607393e-02 9.17721090e-02 6.08785515e-02 2.34667099e-03 7.18197378e-01 3.12736820e+03 -4.17800000e-04 -1.65360702e-12 7.10442559e-02 5.57601997e-02 9.17724524e-02 6.08791052e-02 2.34660903e-03 7.18197378e-01 3.12736820e+03 -4.17900000e-04 -1.65360702e-12 7.10439611e-02 5.57596615e-02 9.17727949e-02 6.08796575e-02 2.34654723e-03 7.18197378e-01 3.12736820e+03 -4.18000000e-04 -1.65360702e-12 7.10436670e-02 5.57591246e-02 9.17731366e-02 6.08802084e-02 2.34648558e-03 7.18197378e-01 3.12736820e+03 -4.18100000e-04 -1.65360702e-12 7.10433737e-02 5.57585891e-02 9.17734774e-02 6.08807578e-02 2.34642410e-03 7.18197378e-01 3.12736820e+03 -4.18200000e-04 -1.65360702e-12 7.10430811e-02 5.57580550e-02 9.17738174e-02 6.08813059e-02 2.34636277e-03 7.18197378e-01 3.12744735e+03 -4.18300000e-04 -1.65360702e-12 7.10427892e-02 5.57575222e-02 9.17741565e-02 6.08818526e-02 2.34630159e-03 7.18197378e-01 3.12744735e+03 -4.18400000e-04 -1.65360702e-12 7.10424981e-02 5.57569908e-02 9.17744947e-02 6.08823979e-02 2.34624057e-03 7.18197378e-01 3.12744735e+03 -4.18500000e-04 -1.65360702e-12 7.10422078e-02 5.57564608e-02 9.17748320e-02 6.08829418e-02 2.34617971e-03 7.18197378e-01 3.12744735e+03 -4.18600000e-04 -1.65360702e-12 7.10419182e-02 5.57559321e-02 9.17751685e-02 6.08834844e-02 2.34611900e-03 7.18197378e-01 3.12744735e+03 -4.18700000e-04 -1.65360702e-12 7.10416293e-02 5.57554047e-02 9.17755042e-02 6.08840255e-02 2.34605845e-03 7.18197378e-01 3.12744735e+03 -4.18800000e-04 -1.65360702e-12 7.10413411e-02 5.57548787e-02 9.17758389e-02 6.08845653e-02 2.34599805e-03 7.18197378e-01 3.12744735e+03 -4.18900000e-04 -1.65360702e-12 7.10410537e-02 5.57543541e-02 9.17761729e-02 6.08851037e-02 2.34593780e-03 7.18197378e-01 3.12744735e+03 -4.19000000e-04 -1.65360702e-12 7.10407670e-02 5.57538308e-02 9.17765059e-02 6.08856408e-02 2.34587771e-03 7.18197378e-01 3.12744735e+03 -4.19100000e-04 -1.65360702e-12 7.10404810e-02 5.57533088e-02 9.17768382e-02 6.08861764e-02 2.34581777e-03 7.18197378e-01 3.12744735e+03 -4.19200000e-04 -1.65360702e-12 7.10401958e-02 5.57527881e-02 9.17771695e-02 6.08867107e-02 2.34575798e-03 7.18197378e-01 3.12744735e+03 -4.19300000e-04 -1.65360702e-12 7.10399113e-02 5.57522688e-02 9.17775001e-02 6.08872437e-02 2.34569834e-03 7.18197378e-01 3.12744735e+03 -4.19400000e-04 -1.65360702e-12 7.10396275e-02 5.57517507e-02 9.17778298e-02 6.08877753e-02 2.34563886e-03 7.18197378e-01 3.12744735e+03 -4.19500000e-04 -1.65360702e-12 7.10393444e-02 5.57512340e-02 9.17781586e-02 6.08883055e-02 2.34557953e-03 7.18197378e-01 3.12744735e+03 -4.19600000e-04 -1.65360702e-12 7.10390621e-02 5.57507187e-02 9.17784866e-02 6.08888344e-02 2.34552034e-03 7.18197378e-01 3.12744735e+03 -4.19700000e-04 -1.65360702e-12 7.10387805e-02 5.57502046e-02 9.17788138e-02 6.08893619e-02 2.34546131e-03 7.18197378e-01 3.12744735e+03 -4.19800000e-04 -1.65360702e-12 7.10384996e-02 5.57496919e-02 9.17791402e-02 6.08898881e-02 2.34540243e-03 7.18197378e-01 3.12744735e+03 -4.19900000e-04 -1.65360702e-12 7.10382194e-02 5.57491804e-02 9.17794657e-02 6.08904130e-02 2.34534370e-03 7.18197378e-01 3.12744735e+03 -4.20000000e-04 -1.65360702e-12 7.10379399e-02 5.57486703e-02 9.17797904e-02 6.08909365e-02 2.34528512e-03 7.18197378e-01 3.12744735e+03 -4.20100000e-04 -1.65360702e-12 7.10376611e-02 5.57481614e-02 9.17801142e-02 6.08914587e-02 2.34522669e-03 7.18197378e-01 3.12744735e+03 -4.20200000e-04 -1.65360702e-12 7.10373830e-02 5.57476539e-02 9.17804373e-02 6.08919796e-02 2.34516840e-03 7.18197378e-01 3.12744735e+03 -4.20300000e-04 -1.65360702e-12 7.10371057e-02 5.57471476e-02 9.17807595e-02 6.08924991e-02 2.34511027e-03 7.18197378e-01 3.12744735e+03 -4.20400000e-04 -1.65360702e-12 7.10368290e-02 5.57466427e-02 9.17810809e-02 6.08930173e-02 2.34505228e-03 7.18197378e-01 3.12744735e+03 -4.20500000e-04 -1.65360702e-12 7.10365531e-02 5.57461390e-02 9.17814014e-02 6.08935342e-02 2.34499444e-03 7.18197378e-01 3.12752198e+03 -4.20600000e-04 -1.65360702e-12 7.10362778e-02 5.57456366e-02 9.17817212e-02 6.08940498e-02 2.34493675e-03 7.18197378e-01 3.12752198e+03 -4.20700000e-04 -1.65360702e-12 7.10360033e-02 5.57451355e-02 9.17820401e-02 6.08945641e-02 2.34487920e-03 7.18197378e-01 3.12752198e+03 -4.20800000e-04 -1.65360702e-12 7.10357294e-02 5.57446356e-02 9.17823582e-02 6.08950771e-02 2.34482180e-03 7.18197378e-01 3.12752198e+03 -4.20900000e-04 -1.65360702e-12 7.10354563e-02 5.57441371e-02 9.17826756e-02 6.08955887e-02 2.34476455e-03 7.18197378e-01 3.12752198e+03 -4.21000000e-04 -1.65360702e-12 7.10351838e-02 5.57436398e-02 9.17829921e-02 6.08960991e-02 2.34470744e-03 7.18197378e-01 3.12752198e+03 -4.21100000e-04 -1.65360702e-12 7.10349120e-02 5.57431438e-02 9.17833078e-02 6.08966081e-02 2.34465048e-03 7.18197378e-01 3.12752198e+03 -4.21200000e-04 -1.65360702e-12 7.10346409e-02 5.57426490e-02 9.17836227e-02 6.08971159e-02 2.34459366e-03 7.18197378e-01 3.12752198e+03 -4.21300000e-04 -1.65360702e-12 7.10343706e-02 5.57421555e-02 9.17839367e-02 6.08976224e-02 2.34453698e-03 7.18197378e-01 3.12752198e+03 -4.21400000e-04 -1.65360702e-12 7.10341009e-02 5.57416633e-02 9.17842500e-02 6.08981275e-02 2.34448046e-03 7.18197378e-01 3.12752198e+03 -4.21500000e-04 -1.65360702e-12 7.10338318e-02 5.57411723e-02 9.17845625e-02 6.08986314e-02 2.34442407e-03 7.18197378e-01 3.12752198e+03 -4.21600000e-04 -1.65360702e-12 7.10335635e-02 5.57406825e-02 9.17848742e-02 6.08991340e-02 2.34436783e-03 7.18197378e-01 3.12752198e+03 -4.21700000e-04 -1.65360702e-12 7.10332959e-02 5.57401941e-02 9.17851851e-02 6.08996354e-02 2.34431173e-03 7.18197378e-01 3.12752198e+03 -4.21800000e-04 -1.65360702e-12 7.10330289e-02 5.57397068e-02 9.17854952e-02 6.09001354e-02 2.34425578e-03 7.18197378e-01 3.12752198e+03 -4.21900000e-04 -1.65360702e-12 7.10327626e-02 5.57392208e-02 9.17858045e-02 6.09006342e-02 2.34419996e-03 7.18197378e-01 3.12752198e+03 -4.22000000e-04 -1.65360702e-12 7.10324970e-02 5.57387361e-02 9.17861131e-02 6.09011317e-02 2.34414429e-03 7.18197378e-01 3.12752198e+03 -4.22100000e-04 -1.65360702e-12 7.10322320e-02 5.57382525e-02 9.17864208e-02 6.09016280e-02 2.34408876e-03 7.18197378e-01 3.12752198e+03 -4.22200000e-04 -1.65360702e-12 7.10319678e-02 5.57377703e-02 9.17867278e-02 6.09021230e-02 2.34403337e-03 7.18197378e-01 3.12752198e+03 -4.22300000e-04 -1.65360702e-12 7.10317042e-02 5.57372892e-02 9.17870340e-02 6.09026167e-02 2.34397813e-03 7.18197378e-01 3.12752198e+03 -4.22400000e-04 -1.65360702e-12 7.10314413e-02 5.57368094e-02 9.17873393e-02 6.09031092e-02 2.34392302e-03 7.18197378e-01 3.12752198e+03 -4.22500000e-04 -1.65360702e-12 7.10311790e-02 5.57363307e-02 9.17876440e-02 6.09036004e-02 2.34386805e-03 7.18197378e-01 3.12752198e+03 -4.22600000e-04 -1.65360702e-12 7.10309174e-02 5.57358534e-02 9.17879478e-02 6.09040903e-02 2.34381323e-03 7.18197378e-01 3.12752198e+03 -4.22700000e-04 -1.65360702e-12 7.10306565e-02 5.57353772e-02 9.17882509e-02 6.09045791e-02 2.34375854e-03 7.18197378e-01 3.12752198e+03 -4.22800000e-04 -1.65360702e-12 7.10303962e-02 5.57349022e-02 9.17885532e-02 6.09050665e-02 2.34370399e-03 7.18197378e-01 3.12759235e+03 -4.22900000e-04 -1.65360702e-12 7.10301367e-02 5.57344285e-02 9.17888547e-02 6.09055528e-02 2.34364959e-03 7.18197378e-01 3.12759235e+03 -4.23000000e-04 -1.65360702e-12 7.10298777e-02 5.57339559e-02 9.17891554e-02 6.09060378e-02 2.34359532e-03 7.18197378e-01 3.12759235e+03 -4.23100000e-04 -1.65360702e-12 7.10296194e-02 5.57334846e-02 9.17894554e-02 6.09065215e-02 2.34354118e-03 7.18197378e-01 3.12759235e+03 -4.23200000e-04 -1.65360702e-12 7.10293618e-02 5.57330144e-02 9.17897546e-02 6.09070040e-02 2.34348719e-03 7.18197378e-01 3.12759235e+03 -4.23300000e-04 -1.65360702e-12 7.10291049e-02 5.57325455e-02 9.17900531e-02 6.09074853e-02 2.34343333e-03 7.18197378e-01 3.12759235e+03 -4.23400000e-04 -1.65360702e-12 7.10288485e-02 5.57320778e-02 9.17903508e-02 6.09079654e-02 2.34337961e-03 7.18197378e-01 3.12759235e+03 -4.23500000e-04 -1.65360702e-12 7.10285929e-02 5.57316112e-02 9.17906477e-02 6.09084443e-02 2.34332603e-03 7.18197378e-01 3.12759235e+03 -4.23600000e-04 -1.65360702e-12 7.10283379e-02 5.57311459e-02 9.17909439e-02 6.09089219e-02 2.34327258e-03 7.18197378e-01 3.12759235e+03 -4.23700000e-04 -1.65360702e-12 7.10280835e-02 5.57306817e-02 9.17912394e-02 6.09093983e-02 2.34321927e-03 7.18197378e-01 3.12759235e+03 -4.23800000e-04 -1.65360702e-12 7.10278298e-02 5.57302187e-02 9.17915340e-02 6.09098735e-02 2.34316610e-03 7.18197378e-01 3.12759235e+03 -4.23900000e-04 -1.65360702e-12 7.10275767e-02 5.57297569e-02 9.17918279e-02 6.09103475e-02 2.34311306e-03 7.18197378e-01 3.12759235e+03 -4.24000000e-04 -1.65360702e-12 7.10273243e-02 5.57292963e-02 9.17921211e-02 6.09108203e-02 2.34306016e-03 7.18197378e-01 3.12759235e+03 -4.24100000e-04 -1.65360702e-12 7.10270725e-02 5.57288368e-02 9.17924135e-02 6.09112919e-02 2.34300739e-03 7.18197378e-01 3.12759235e+03 -4.24200000e-04 -1.65360702e-12 7.10268214e-02 5.57283785e-02 9.17927052e-02 6.09117623e-02 2.34295475e-03 7.18197378e-01 3.12759235e+03 -4.24300000e-04 -1.65360702e-12 7.10265709e-02 5.57279214e-02 9.17929962e-02 6.09122315e-02 2.34290225e-03 7.18197378e-01 3.12759235e+03 -4.24400000e-04 -1.65360702e-12 7.10263210e-02 5.57274654e-02 9.17932864e-02 6.09126995e-02 2.34284988e-03 7.18197378e-01 3.12759235e+03 -4.24500000e-04 -1.65360702e-12 7.10260718e-02 5.57270107e-02 9.17935758e-02 6.09131663e-02 2.34279765e-03 7.18197378e-01 3.12759235e+03 -4.24600000e-04 -1.65360702e-12 7.10258232e-02 5.57265570e-02 9.17938645e-02 6.09136319e-02 2.34274555e-03 7.18197378e-01 3.12759235e+03 -4.24700000e-04 -1.65360702e-12 7.10255752e-02 5.57261045e-02 9.17941525e-02 6.09140963e-02 2.34269358e-03 7.18197378e-01 3.12759235e+03 -4.24800000e-04 -1.65360702e-12 7.10253279e-02 5.57256532e-02 9.17944398e-02 6.09145595e-02 2.34264174e-03 7.18197378e-01 3.12759235e+03 -4.24900000e-04 -1.65360702e-12 7.10250812e-02 5.57252031e-02 9.17947263e-02 6.09150216e-02 2.34259004e-03 7.18197378e-01 3.12759235e+03 -4.25000000e-04 -1.65360702e-12 7.10248351e-02 5.57247540e-02 9.17950120e-02 6.09154825e-02 2.34253847e-03 7.18197378e-01 3.12759235e+03 -4.25100000e-04 -1.65360702e-12 7.10245897e-02 5.57243062e-02 9.17952971e-02 6.09159422e-02 2.34248702e-03 7.18197378e-01 3.12765869e+03 -4.25200000e-04 -1.65360702e-12 7.10243448e-02 5.57238594e-02 9.17955814e-02 6.09164007e-02 2.34243571e-03 7.18197378e-01 3.12765869e+03 -4.25300000e-04 -1.65360702e-12 7.10241006e-02 5.57234138e-02 9.17958650e-02 6.09168581e-02 2.34238454e-03 7.18197378e-01 3.12765869e+03 -4.25400000e-04 -1.65360702e-12 7.10238570e-02 5.57229694e-02 9.17961479e-02 6.09173143e-02 2.34233349e-03 7.18197378e-01 3.12765869e+03 -4.25500000e-04 -1.65360702e-12 7.10236141e-02 5.57225261e-02 9.17964301e-02 6.09177694e-02 2.34228257e-03 7.18197378e-01 3.12765869e+03 -4.25600000e-04 -1.65360702e-12 7.10233717e-02 5.57220839e-02 9.17967115e-02 6.09182233e-02 2.34223178e-03 7.18197378e-01 3.12765869e+03 -4.25700000e-04 -1.65360702e-12 7.10231300e-02 5.57216428e-02 9.17969922e-02 6.09186760e-02 2.34218112e-03 7.18197378e-01 3.12765869e+03 -4.25800000e-04 -1.65360702e-12 7.10228889e-02 5.57212028e-02 9.17972722e-02 6.09191276e-02 2.34213059e-03 7.18197378e-01 3.12765869e+03 -4.25900000e-04 -1.65360702e-12 7.10226484e-02 5.57207640e-02 9.17975515e-02 6.09195780e-02 2.34208018e-03 7.18197378e-01 3.12765869e+03 -4.26000000e-04 -1.65360702e-12 7.10224085e-02 5.57203263e-02 9.17978301e-02 6.09200273e-02 2.34202991e-03 7.18197378e-01 3.12765869e+03 -4.26100000e-04 -1.65360702e-12 7.10221692e-02 5.57198897e-02 9.17981080e-02 6.09204754e-02 2.34197976e-03 7.18197378e-01 3.12765869e+03 -4.26200000e-04 -1.65360702e-12 7.10219306e-02 5.57194543e-02 9.17983851e-02 6.09209224e-02 2.34192975e-03 7.18197378e-01 3.12765869e+03 -4.26300000e-04 -1.65360702e-12 7.10216925e-02 5.57190199e-02 9.17986616e-02 6.09213683e-02 2.34187985e-03 7.18197378e-01 3.12765869e+03 -4.26400000e-04 -1.65360702e-12 7.10214551e-02 5.57185867e-02 9.17989373e-02 6.09218130e-02 2.34183009e-03 7.18197378e-01 3.12765869e+03 -4.26500000e-04 -1.65360702e-12 7.10212182e-02 5.57181545e-02 9.17992124e-02 6.09222566e-02 2.34178045e-03 7.18197378e-01 3.12765869e+03 -4.26600000e-04 -1.65360702e-12 7.10209820e-02 5.57177235e-02 9.17994867e-02 6.09226991e-02 2.34173094e-03 7.18197378e-01 3.12765869e+03 -4.26700000e-04 -1.65360702e-12 7.10207463e-02 5.57172935e-02 9.17997604e-02 6.09231404e-02 2.34168156e-03 7.18197378e-01 3.12765869e+03 -4.26800000e-04 -1.65360702e-12 7.10205113e-02 5.57168647e-02 9.18000333e-02 6.09235806e-02 2.34163230e-03 7.18197378e-01 3.12765869e+03 -4.26900000e-04 -1.65360702e-12 7.10202768e-02 5.57164369e-02 9.18003056e-02 6.09240197e-02 2.34158317e-03 7.18197378e-01 3.12765869e+03 -4.27000000e-04 -1.65360702e-12 7.10200430e-02 5.57160102e-02 9.18005771e-02 6.09244577e-02 2.34153416e-03 7.18197378e-01 3.12765869e+03 -4.27100000e-04 -1.65360702e-12 7.10198097e-02 5.57155847e-02 9.18008480e-02 6.09248945e-02 2.34148527e-03 7.18197378e-01 3.12765869e+03 -4.27200000e-04 -1.65360702e-12 7.10195770e-02 5.57151602e-02 9.18011181e-02 6.09253303e-02 2.34143652e-03 7.18197378e-01 3.12765869e+03 -4.27300000e-04 -1.65360702e-12 7.10193450e-02 5.57147368e-02 9.18013876e-02 6.09257649e-02 2.34138788e-03 7.18197378e-01 3.12765869e+03 -4.27400000e-04 -1.65360702e-12 7.10191135e-02 5.57143144e-02 9.18016564e-02 6.09261984e-02 2.34133937e-03 7.18197378e-01 3.12772123e+03 -4.27500000e-04 -1.65360702e-12 7.10188826e-02 5.57138932e-02 9.18019245e-02 6.09266308e-02 2.34129098e-03 7.18197378e-01 3.12772123e+03 -4.27600000e-04 -1.65360702e-12 7.10186523e-02 5.57134730e-02 9.18021920e-02 6.09270622e-02 2.34124272e-03 7.18197378e-01 3.12772123e+03 -4.27700000e-04 -1.65360702e-12 7.10184226e-02 5.57130539e-02 9.18024587e-02 6.09274924e-02 2.34119458e-03 7.18197378e-01 3.12772123e+03 -4.27800000e-04 -1.65360702e-12 7.10181935e-02 5.57126359e-02 9.18027248e-02 6.09279215e-02 2.34114656e-03 7.18197378e-01 3.12772123e+03 -4.27900000e-04 -1.65360702e-12 7.10179649e-02 5.57122189e-02 9.18029901e-02 6.09283495e-02 2.34109866e-03 7.18197378e-01 3.12772123e+03 -4.28000000e-04 -1.65360702e-12 7.10177369e-02 5.57118030e-02 9.18032549e-02 6.09287765e-02 2.34105089e-03 7.18197378e-01 3.12772123e+03 -4.28100000e-04 -1.65360702e-12 7.10175095e-02 5.57113881e-02 9.18035189e-02 6.09292023e-02 2.34100324e-03 7.18197378e-01 3.12772123e+03 -4.28200000e-04 -1.65360702e-12 7.10172827e-02 5.57109744e-02 9.18037822e-02 6.09296271e-02 2.34095571e-03 7.18197378e-01 3.12772123e+03 -4.28300000e-04 -1.65360702e-12 7.10170565e-02 5.57105616e-02 9.18040449e-02 6.09300508e-02 2.34090830e-03 7.18197378e-01 3.12772123e+03 -4.28400000e-04 -1.65360702e-12 7.10168309e-02 5.57101499e-02 9.18043069e-02 6.09304734e-02 2.34086101e-03 7.18197378e-01 3.12772123e+03 -4.28500000e-04 -1.65360702e-12 7.10166058e-02 5.57097393e-02 9.18045683e-02 6.09308949e-02 2.34081384e-03 7.18197378e-01 3.12772123e+03 -4.28600000e-04 -1.65360702e-12 7.10163813e-02 5.57093297e-02 9.18048290e-02 6.09313154e-02 2.34076679e-03 7.18197378e-01 3.12772123e+03 -4.28700000e-04 -1.65360702e-12 7.10161573e-02 5.57089212e-02 9.18050890e-02 6.09317348e-02 2.34071986e-03 7.18197378e-01 3.12772123e+03 -4.28800000e-04 -1.65360702e-12 7.10159340e-02 5.57085137e-02 9.18053483e-02 6.09321531e-02 2.34067305e-03 7.18197378e-01 3.12772123e+03 -4.28900000e-04 -1.65360702e-12 7.10157112e-02 5.57081072e-02 9.18056070e-02 6.09325703e-02 2.34062636e-03 7.18197378e-01 3.12772123e+03 -4.29000000e-04 -1.65360702e-12 7.10154889e-02 5.57077018e-02 9.18058651e-02 6.09329865e-02 2.34057979e-03 7.18197378e-01 3.12772123e+03 -4.29100000e-04 -1.65360702e-12 7.10152673e-02 5.57072974e-02 9.18061224e-02 6.09334017e-02 2.34053334e-03 7.18197378e-01 3.12772123e+03 -4.29200000e-04 -1.65360702e-12 7.10150462e-02 5.57068941e-02 9.18063792e-02 6.09338157e-02 2.34048701e-03 7.18197378e-01 3.12772123e+03 -4.29300000e-04 -1.65360702e-12 7.10148256e-02 5.57064918e-02 9.18066352e-02 6.09342287e-02 2.34044079e-03 7.18197378e-01 3.12772123e+03 -4.29400000e-04 -1.65360702e-12 7.10146056e-02 5.57060905e-02 9.18068906e-02 6.09346407e-02 2.34039469e-03 7.18197378e-01 3.12772123e+03 -4.29500000e-04 -1.65360702e-12 7.10143862e-02 5.57056902e-02 9.18071454e-02 6.09350516e-02 2.34034871e-03 7.18197378e-01 3.12772123e+03 -4.29600000e-04 -1.65360702e-12 7.10141674e-02 5.57052909e-02 9.18073995e-02 6.09354615e-02 2.34030285e-03 7.18197378e-01 3.12772123e+03 -4.29700000e-04 -1.65360702e-12 7.10139491e-02 5.57048927e-02 9.18076530e-02 6.09358703e-02 2.34025710e-03 7.18197378e-01 3.12778020e+03 -4.29800000e-04 -1.65360702e-12 7.10137313e-02 5.57044955e-02 9.18079058e-02 6.09362781e-02 2.34021147e-03 7.18197378e-01 3.12778020e+03 -4.29900000e-04 -1.65360702e-12 7.10135141e-02 5.57040993e-02 9.18081579e-02 6.09366848e-02 2.34016596e-03 7.18197378e-01 3.12778020e+03 -4.30000000e-04 -1.65360702e-12 7.10132975e-02 5.57037041e-02 9.18084095e-02 6.09370905e-02 2.34012056e-03 7.18197378e-01 3.12778020e+03 -4.30100000e-04 -1.65360702e-12 7.10130814e-02 5.57033099e-02 9.18086603e-02 6.09374952e-02 2.34007528e-03 7.18197378e-01 3.12778020e+03 -4.30200000e-04 -1.65360702e-12 7.10128659e-02 5.57029167e-02 9.18089106e-02 6.09378988e-02 2.34003011e-03 7.18197378e-01 3.12778020e+03 -4.30300000e-04 -1.65360702e-12 7.10126509e-02 5.57025245e-02 9.18091602e-02 6.09383015e-02 2.33998506e-03 7.18197378e-01 3.12778020e+03 -4.30400000e-04 -1.65360702e-12 7.10124364e-02 5.57021334e-02 9.18094092e-02 6.09387030e-02 2.33994012e-03 7.18197378e-01 3.12778020e+03 -4.30500000e-04 -1.65360702e-12 7.10122226e-02 5.57017432e-02 9.18096575e-02 6.09391036e-02 2.33989530e-03 7.18197378e-01 3.12778020e+03 -4.30600000e-04 -1.65360702e-12 7.10120092e-02 5.57013540e-02 9.18099052e-02 6.09395032e-02 2.33985059e-03 7.18197378e-01 3.12778020e+03 -4.30700000e-04 -1.65360702e-12 7.10117964e-02 5.57009658e-02 9.18101523e-02 6.09399017e-02 2.33980600e-03 7.18197378e-01 3.12778020e+03 -4.30800000e-04 -1.65360702e-12 7.10115841e-02 5.57005786e-02 9.18103987e-02 6.09402992e-02 2.33976152e-03 7.18197378e-01 3.12778020e+03 -4.30900000e-04 -1.65360702e-12 7.10113724e-02 5.57001924e-02 9.18106445e-02 6.09406957e-02 2.33971715e-03 7.18197378e-01 3.12778020e+03 -4.31000000e-04 -1.65360702e-12 7.10111612e-02 5.56998072e-02 9.18108897e-02 6.09410912e-02 2.33967290e-03 7.18197378e-01 3.12778020e+03 -4.31100000e-04 -1.65360702e-12 7.10109506e-02 5.56994229e-02 9.18111342e-02 6.09414856e-02 2.33962876e-03 7.18197378e-01 3.12778020e+03 -4.31200000e-04 -1.65360702e-12 7.10107405e-02 5.56990397e-02 9.18113782e-02 6.09418791e-02 2.33958473e-03 7.18197378e-01 3.12778020e+03 -4.31300000e-04 -1.65360702e-12 7.10105309e-02 5.56986574e-02 9.18116215e-02 6.09422716e-02 2.33954081e-03 7.18197378e-01 3.12778020e+03 -4.31400000e-04 -1.65360702e-12 7.10103219e-02 5.56982761e-02 9.18118642e-02 6.09426630e-02 2.33949701e-03 7.18197378e-01 3.12778020e+03 -4.31500000e-04 -1.65360702e-12 7.10101133e-02 5.56978957e-02 9.18121062e-02 6.09430535e-02 2.33945331e-03 7.18197378e-01 3.12778020e+03 -4.31600000e-04 -1.65360702e-12 7.10099054e-02 5.56975164e-02 9.18123477e-02 6.09434430e-02 2.33940973e-03 7.18197378e-01 3.12778020e+03 -4.31700000e-04 -1.65360702e-12 7.10096979e-02 5.56971380e-02 9.18125885e-02 6.09438315e-02 2.33936626e-03 7.18197378e-01 3.12778020e+03 -4.31800000e-04 -1.65360702e-12 7.10094910e-02 5.56967605e-02 9.18128287e-02 6.09442190e-02 2.33932290e-03 7.18197378e-01 3.12778020e+03 -4.31900000e-04 -1.65360702e-12 7.10092846e-02 5.56963841e-02 9.18130684e-02 6.09446055e-02 2.33927965e-03 7.18197378e-01 3.12778020e+03 -4.32000000e-04 -1.65360702e-12 7.10090787e-02 5.56960086e-02 9.18133073e-02 6.09449910e-02 2.33923651e-03 7.18197378e-01 3.12783579e+03 -4.32100000e-04 -1.65360702e-12 7.10088734e-02 5.56956340e-02 9.18135457e-02 6.09453755e-02 2.33919348e-03 7.18197378e-01 3.12783579e+03 -4.32200000e-04 -1.65360702e-12 7.10086686e-02 5.56952604e-02 9.18137835e-02 6.09457591e-02 2.33915056e-03 7.18197378e-01 3.12783579e+03 -4.32300000e-04 -1.65360702e-12 7.10084643e-02 5.56948878e-02 9.18140207e-02 6.09461417e-02 2.33910775e-03 7.18197378e-01 3.12783579e+03 -4.32400000e-04 -1.65360702e-12 7.10082605e-02 5.56945161e-02 9.18142572e-02 6.09465233e-02 2.33906505e-03 7.18197378e-01 3.12783579e+03 -4.32500000e-04 -1.65360702e-12 7.10080572e-02 5.56941453e-02 9.18144932e-02 6.09469039e-02 2.33902246e-03 7.18197378e-01 3.12783579e+03 -4.32600000e-04 -1.65360702e-12 7.10078545e-02 5.56937755e-02 9.18147286e-02 6.09472836e-02 2.33897998e-03 7.18197378e-01 3.12783579e+03 -4.32700000e-04 -1.65360702e-12 7.10076523e-02 5.56934067e-02 9.18149633e-02 6.09476623e-02 2.33893760e-03 7.18197378e-01 3.12783579e+03 -4.32800000e-04 -1.65360702e-12 7.10074506e-02 5.56930388e-02 9.18151975e-02 6.09480400e-02 2.33889534e-03 7.18197378e-01 3.12783579e+03 -4.32900000e-04 -1.65360702e-12 7.10072494e-02 5.56926718e-02 9.18154311e-02 6.09484168e-02 2.33885318e-03 7.18197378e-01 3.12783579e+03 -4.33000000e-04 -1.65360702e-12 7.10070487e-02 5.56923058e-02 9.18156640e-02 6.09487926e-02 2.33881112e-03 7.18197378e-01 3.12783579e+03 -4.33100000e-04 -1.65360702e-12 7.10068485e-02 5.56919407e-02 9.18158964e-02 6.09491674e-02 2.33876918e-03 7.18197378e-01 3.12783579e+03 -4.33200000e-04 -1.65360702e-12 7.10066488e-02 5.56915765e-02 9.18161282e-02 6.09495413e-02 2.33872734e-03 7.18197378e-01 3.12783579e+03 -4.33300000e-04 -1.65360702e-12 7.10064497e-02 5.56912133e-02 9.18163594e-02 6.09499142e-02 2.33868561e-03 7.18197378e-01 3.12783579e+03 -4.33400000e-04 -1.65360702e-12 7.10062510e-02 5.56908509e-02 9.18165900e-02 6.09502862e-02 2.33864399e-03 7.18197378e-01 3.12783579e+03 -4.33500000e-04 -1.65360702e-12 7.10060529e-02 5.56904896e-02 9.18168200e-02 6.09506573e-02 2.33860247e-03 7.18197378e-01 3.12783579e+03 -4.33600000e-04 -1.65360702e-12 7.10058553e-02 5.56901291e-02 9.18170494e-02 6.09510274e-02 2.33856105e-03 7.18197378e-01 3.12783579e+03 -4.33700000e-04 -1.65360702e-12 7.10056581e-02 5.56897695e-02 9.18172782e-02 6.09513965e-02 2.33851975e-03 7.18197378e-01 3.12783579e+03 -4.33800000e-04 -1.65360702e-12 7.10054615e-02 5.56894109e-02 9.18175065e-02 6.09517647e-02 2.33847854e-03 7.18197378e-01 3.12783579e+03 -4.33900000e-04 -1.65360702e-12 7.10052654e-02 5.56890532e-02 9.18177341e-02 6.09521320e-02 2.33843745e-03 7.18197378e-01 3.12783579e+03 -4.34000000e-04 -1.65360702e-12 7.10050697e-02 5.56886964e-02 9.18179612e-02 6.09524983e-02 2.33839645e-03 7.18197378e-01 3.12783579e+03 -4.34100000e-04 -1.65360702e-12 7.10048746e-02 5.56883405e-02 9.18181877e-02 6.09528637e-02 2.33835557e-03 7.18197378e-01 3.12783579e+03 -4.34200000e-04 -1.65360702e-12 7.10046800e-02 5.56879855e-02 9.18184137e-02 6.09532282e-02 2.33831478e-03 7.18197378e-01 3.12783579e+03 -4.34300000e-04 -1.65360702e-12 7.10044858e-02 5.56876314e-02 9.18186390e-02 6.09535917e-02 2.33827410e-03 7.18197378e-01 3.12788820e+03 -4.34400000e-04 -1.65360702e-12 7.10042922e-02 5.56872783e-02 9.18188638e-02 6.09539543e-02 2.33823353e-03 7.18197378e-01 3.12788820e+03 -4.34500000e-04 -1.65360702e-12 7.10040990e-02 5.56869260e-02 9.18190880e-02 6.09543160e-02 2.33819306e-03 7.18197378e-01 3.12788820e+03 -4.34600000e-04 -1.65360702e-12 7.10039064e-02 5.56865746e-02 9.18193117e-02 6.09546768e-02 2.33815269e-03 7.18197378e-01 3.12788820e+03 -4.34700000e-04 -1.65360702e-12 7.10037142e-02 5.56862241e-02 9.18195347e-02 6.09550367e-02 2.33811242e-03 7.18197378e-01 3.12788820e+03 -4.34800000e-04 -1.65360702e-12 7.10035225e-02 5.56858746e-02 9.18197572e-02 6.09553956e-02 2.33807226e-03 7.18197378e-01 3.12788820e+03 -4.34900000e-04 -1.65360702e-12 7.10033313e-02 5.56855259e-02 9.18199791e-02 6.09557536e-02 2.33803220e-03 7.18197378e-01 3.12788820e+03 -4.35000000e-04 -1.65360702e-12 7.10031406e-02 5.56851781e-02 9.18202005e-02 6.09561107e-02 2.33799224e-03 7.18197378e-01 3.12788820e+03 -4.35100000e-04 -1.65360702e-12 7.10029504e-02 5.56848312e-02 9.18204213e-02 6.09564669e-02 2.33795238e-03 7.18197378e-01 3.12788820e+03 -4.35200000e-04 -1.65360702e-12 7.10027607e-02 5.56844851e-02 9.18206415e-02 6.09568222e-02 2.33791262e-03 7.18197378e-01 3.12788820e+03 -4.35300000e-04 -1.65360702e-12 7.10025714e-02 5.56841400e-02 9.18208612e-02 6.09571765e-02 2.33787297e-03 7.18197378e-01 3.12788820e+03 -4.35400000e-04 -1.65360702e-12 7.10023827e-02 5.56837957e-02 9.18210803e-02 6.09575300e-02 2.33783342e-03 7.18197378e-01 3.12788820e+03 -4.35500000e-04 -1.65360702e-12 7.10021944e-02 5.56834524e-02 9.18212988e-02 6.09578826e-02 2.33779396e-03 7.18197378e-01 3.12788820e+03 -4.35600000e-04 -1.65360702e-12 7.10020066e-02 5.56831098e-02 9.18215168e-02 6.09582343e-02 2.33775461e-03 7.18197378e-01 3.12788820e+03 -4.35700000e-04 -1.65360702e-12 7.10018193e-02 5.56827682e-02 9.18217343e-02 6.09585850e-02 2.33771536e-03 7.18197378e-01 3.12788820e+03 -4.35800000e-04 -1.65360702e-12 7.10016324e-02 5.56824275e-02 9.18219512e-02 6.09589349e-02 2.33767621e-03 7.18197378e-01 3.12788820e+03 -4.35900000e-04 -1.65360702e-12 7.10014460e-02 5.56820876e-02 9.18221675e-02 6.09592839e-02 2.33763716e-03 7.18197378e-01 3.12788820e+03 -4.36000000e-04 -1.65360702e-12 7.10012601e-02 5.56817485e-02 9.18223833e-02 6.09596320e-02 2.33759821e-03 7.18197378e-01 3.12788820e+03 -4.36100000e-04 -1.65360702e-12 7.10010747e-02 5.56814104e-02 9.18225985e-02 6.09599792e-02 2.33755935e-03 7.18197378e-01 3.12788820e+03 -4.36200000e-04 -1.65360702e-12 7.10008898e-02 5.56810731e-02 9.18228132e-02 6.09603256e-02 2.33752060e-03 7.18197378e-01 3.12788820e+03 -4.36300000e-04 -1.65360702e-12 7.10007053e-02 5.56807367e-02 9.18230273e-02 6.09606710e-02 2.33748195e-03 7.18197378e-01 3.12788820e+03 -4.36400000e-04 -1.65360702e-12 7.10005213e-02 5.56804011e-02 9.18232409e-02 6.09610156e-02 2.33744339e-03 7.18197378e-01 3.12788820e+03 -4.36500000e-04 -1.65360702e-12 7.10003377e-02 5.56800664e-02 9.18234539e-02 6.09613592e-02 2.33740493e-03 7.18197378e-01 3.12788820e+03 -4.36600000e-04 -1.65360702e-12 7.10001546e-02 5.56797325e-02 9.18236664e-02 6.09617021e-02 2.33736657e-03 7.18197378e-01 3.12788820e+03 -4.36700000e-04 -1.65360702e-12 7.09999720e-02 5.56793995e-02 9.18238783e-02 6.09620440e-02 2.33732831e-03 7.18197378e-01 3.12793760e+03 -4.36800000e-04 -1.65360702e-12 7.09997899e-02 5.56790673e-02 9.18240897e-02 6.09623851e-02 2.33729015e-03 7.18197378e-01 3.12793760e+03 -4.36900000e-04 -1.65360702e-12 7.09996082e-02 5.56787360e-02 9.18243006e-02 6.09627252e-02 2.33725208e-03 7.18197378e-01 3.12793760e+03 -4.37000000e-04 -1.65360702e-12 7.09994270e-02 5.56784055e-02 9.18245109e-02 6.09630646e-02 2.33721411e-03 7.18197378e-01 3.12793760e+03 -4.37100000e-04 -1.65360702e-12 7.09992462e-02 5.56780759e-02 9.18247207e-02 6.09634030e-02 2.33717624e-03 7.18197378e-01 3.12793760e+03 -4.37200000e-04 -1.65360702e-12 7.09990659e-02 5.56777471e-02 9.18249300e-02 6.09637406e-02 2.33713846e-03 7.18197378e-01 3.12793760e+03 -4.37300000e-04 -1.65360702e-12 7.09988861e-02 5.56774192e-02 9.18251387e-02 6.09640774e-02 2.33710078e-03 7.18197378e-01 3.12793760e+03 -4.37400000e-04 -1.65360702e-12 7.09987067e-02 5.56770921e-02 9.18253469e-02 6.09644132e-02 2.33706320e-03 7.18197378e-01 3.12793760e+03 -4.37500000e-04 -1.65360702e-12 7.09985278e-02 5.56767658e-02 9.18255545e-02 6.09647483e-02 2.33702571e-03 7.18197378e-01 3.12793760e+03 -4.37600000e-04 -1.65360702e-12 7.09983494e-02 5.56764404e-02 9.18257617e-02 6.09650824e-02 2.33698831e-03 7.18197378e-01 3.12793760e+03 -4.37700000e-04 -1.65360702e-12 7.09981713e-02 5.56761158e-02 9.18259683e-02 6.09654157e-02 2.33695102e-03 7.18197378e-01 3.12793760e+03 -4.37800000e-04 -1.65360702e-12 7.09979938e-02 5.56757920e-02 9.18261743e-02 6.09657482e-02 2.33691382e-03 7.18197378e-01 3.12793760e+03 -4.37900000e-04 -1.65360702e-12 7.09978167e-02 5.56754690e-02 9.18263799e-02 6.09660798e-02 2.33687671e-03 7.18197378e-01 3.12793760e+03 -4.38000000e-04 -1.65360702e-12 7.09976400e-02 5.56751469e-02 9.18265849e-02 6.09664106e-02 2.33683970e-03 7.18197378e-01 3.12793760e+03 -4.38100000e-04 -1.65360702e-12 7.09974638e-02 5.56748256e-02 9.18267894e-02 6.09667405e-02 2.33680278e-03 7.18197378e-01 3.12793760e+03 -4.38200000e-04 -1.65360702e-12 7.09972881e-02 5.56745051e-02 9.18269934e-02 6.09670696e-02 2.33676595e-03 7.18197378e-01 3.12793760e+03 -4.38300000e-04 -1.65360702e-12 7.09971128e-02 5.56741855e-02 9.18271968e-02 6.09673978e-02 2.33672922e-03 7.18197378e-01 3.12793760e+03 -4.38400000e-04 -1.65360702e-12 7.09969379e-02 5.56738666e-02 9.18273998e-02 6.09677253e-02 2.33669259e-03 7.18197378e-01 3.12793760e+03 -4.38500000e-04 -1.65360702e-12 7.09967635e-02 5.56735486e-02 9.18276022e-02 6.09680518e-02 2.33665604e-03 7.18197378e-01 3.12793760e+03 -4.38600000e-04 -1.65360702e-12 7.09965896e-02 5.56732313e-02 9.18278041e-02 6.09683776e-02 2.33661959e-03 7.18197378e-01 3.12793760e+03 -4.38700000e-04 -1.65360702e-12 7.09964160e-02 5.56729149e-02 9.18280055e-02 6.09687025e-02 2.33658324e-03 7.18197378e-01 3.12793760e+03 -4.38800000e-04 -1.65360702e-12 7.09962429e-02 5.56725993e-02 9.18282063e-02 6.09690266e-02 2.33654697e-03 7.18197378e-01 3.12793760e+03 -4.38900000e-04 -1.65360702e-12 7.09960703e-02 5.56722845e-02 9.18284067e-02 6.09693498e-02 2.33651080e-03 7.18197378e-01 3.12793760e+03 -4.39000000e-04 -1.65360702e-12 7.09958981e-02 5.56719705e-02 9.18286066e-02 6.09696722e-02 2.33647472e-03 7.18197378e-01 3.12798418e+03 -4.39100000e-04 -1.65360702e-12 7.09957263e-02 5.56716573e-02 9.18288059e-02 6.09699938e-02 2.33643873e-03 7.18197378e-01 3.12798418e+03 -4.39200000e-04 -1.65360702e-12 7.09955550e-02 5.56713449e-02 9.18290047e-02 6.09703146e-02 2.33640284e-03 7.18197378e-01 3.12798418e+03 -4.39300000e-04 -1.65360702e-12 7.09953841e-02 5.56710333e-02 9.18292030e-02 6.09706346e-02 2.33636704e-03 7.18197378e-01 3.12798418e+03 -4.39400000e-04 -1.65360702e-12 7.09952137e-02 5.56707225e-02 9.18294008e-02 6.09709538e-02 2.33633132e-03 7.18197378e-01 3.12798418e+03 -4.39500000e-04 -1.65360702e-12 7.09950437e-02 5.56704125e-02 9.18295982e-02 6.09712721e-02 2.33629570e-03 7.18197378e-01 3.12798418e+03 -4.39600000e-04 -1.65360702e-12 7.09948741e-02 5.56701033e-02 9.18297950e-02 6.09715896e-02 2.33626017e-03 7.18197378e-01 3.12798418e+03 -4.39700000e-04 -1.65360702e-12 7.09947049e-02 5.56697949e-02 9.18299913e-02 6.09719063e-02 2.33622473e-03 7.18197378e-01 3.12798418e+03 -4.39800000e-04 -1.65360702e-12 7.09945362e-02 5.56694872e-02 9.18301871e-02 6.09722222e-02 2.33618938e-03 7.18197378e-01 3.12798418e+03 -4.39900000e-04 -1.65360702e-12 7.09943679e-02 5.56691804e-02 9.18303824e-02 6.09725373e-02 2.33615412e-03 7.18197378e-01 3.12798418e+03 -4.40000000e-04 -1.65360702e-12 7.09942001e-02 5.56688743e-02 9.18305772e-02 6.09728516e-02 2.33611895e-03 7.18197378e-01 3.12798418e+03 -4.40100000e-04 -1.65360702e-12 7.09940326e-02 5.56685690e-02 9.18307715e-02 6.09731651e-02 2.33608387e-03 7.18197378e-01 3.12798418e+03 -4.40200000e-04 -1.65360702e-12 7.09938656e-02 5.56682645e-02 9.18309653e-02 6.09734778e-02 2.33604888e-03 7.18197378e-01 3.12798418e+03 -4.40300000e-04 -1.65360702e-12 7.09936991e-02 5.56679608e-02 9.18311586e-02 6.09737897e-02 2.33601398e-03 7.18197378e-01 3.12798418e+03 -4.40400000e-04 -1.65360702e-12 7.09935329e-02 5.56676578e-02 9.18313514e-02 6.09741008e-02 2.33597917e-03 7.18197378e-01 3.12798418e+03 -4.40500000e-04 -1.65360702e-12 7.09933672e-02 5.56673556e-02 9.18315437e-02 6.09744112e-02 2.33594445e-03 7.18197378e-01 3.12798418e+03 -4.40600000e-04 -1.65360702e-12 7.09932019e-02 5.56670542e-02 9.18317356e-02 6.09747207e-02 2.33590981e-03 7.18197378e-01 3.12798418e+03 -4.40700000e-04 -1.65360702e-12 7.09930370e-02 5.56667536e-02 9.18319269e-02 6.09750294e-02 2.33587526e-03 7.18197378e-01 3.12798418e+03 -4.40800000e-04 -1.65360702e-12 7.09928725e-02 5.56664537e-02 9.18321178e-02 6.09753373e-02 2.33584081e-03 7.18197378e-01 3.12798418e+03 -4.40900000e-04 -1.65360702e-12 7.09927085e-02 5.56661546e-02 9.18323082e-02 6.09756445e-02 2.33580644e-03 7.18197378e-01 3.12798418e+03 -4.41000000e-04 -1.65360702e-12 7.09925448e-02 5.56658562e-02 9.18324980e-02 6.09759509e-02 2.33577215e-03 7.18197378e-01 3.12798418e+03 -4.41100000e-04 -1.65360702e-12 7.09923816e-02 5.56655587e-02 9.18326874e-02 6.09762565e-02 2.33573796e-03 7.18197378e-01 3.12798418e+03 -4.41200000e-04 -1.65360702e-12 7.09922188e-02 5.56652618e-02 9.18328764e-02 6.09765613e-02 2.33570385e-03 7.18197378e-01 3.12798418e+03 -4.41300000e-04 -1.65360702e-12 7.09920565e-02 5.56649658e-02 9.18330648e-02 6.09768653e-02 2.33566983e-03 7.18197378e-01 3.12802809e+03 -4.41400000e-04 -1.65360702e-12 7.09918945e-02 5.56646705e-02 9.18332527e-02 6.09771686e-02 2.33563590e-03 7.18197378e-01 3.12802809e+03 -4.41500000e-04 -1.65360702e-12 7.09917329e-02 5.56643759e-02 9.18334402e-02 6.09774710e-02 2.33560205e-03 7.18197378e-01 3.12802809e+03 -4.41600000e-04 -1.65360702e-12 7.09915718e-02 5.56640821e-02 9.18336272e-02 6.09777728e-02 2.33556829e-03 7.18197378e-01 3.12802809e+03 -4.41700000e-04 -1.65360702e-12 7.09914111e-02 5.56637890e-02 9.18338137e-02 6.09780737e-02 2.33553461e-03 7.18197378e-01 3.12802809e+03 -4.41800000e-04 -1.65360702e-12 7.09912507e-02 5.56634967e-02 9.18339998e-02 6.09783739e-02 2.33550102e-03 7.18197378e-01 3.12802809e+03 -4.41900000e-04 -1.65360702e-12 7.09910908e-02 5.56632052e-02 9.18341853e-02 6.09786733e-02 2.33546752e-03 7.18197378e-01 3.12802809e+03 -4.42000000e-04 -1.65360702e-12 7.09909313e-02 5.56629144e-02 9.18343704e-02 6.09789719e-02 2.33543410e-03 7.18197378e-01 3.12802809e+03 -4.42100000e-04 -1.65360702e-12 7.09907722e-02 5.56626243e-02 9.18345550e-02 6.09792698e-02 2.33540077e-03 7.18197378e-01 3.12802809e+03 -4.42200000e-04 -1.65360702e-12 7.09906135e-02 5.56623350e-02 9.18347392e-02 6.09795669e-02 2.33536752e-03 7.18197378e-01 3.12802809e+03 -4.42300000e-04 -1.65360702e-12 7.09904553e-02 5.56620464e-02 9.18349229e-02 6.09798633e-02 2.33533436e-03 7.18197378e-01 3.12802809e+03 -4.42400000e-04 -1.65360702e-12 7.09902974e-02 5.56617585e-02 9.18351061e-02 6.09801589e-02 2.33530128e-03 7.18197378e-01 3.12802809e+03 -4.42500000e-04 -1.65360702e-12 7.09901399e-02 5.56614714e-02 9.18352888e-02 6.09804538e-02 2.33526829e-03 7.18197378e-01 3.12802809e+03 -4.42600000e-04 -1.65360702e-12 7.09899828e-02 5.56611850e-02 9.18354711e-02 6.09807479e-02 2.33523538e-03 7.18197378e-01 3.12802809e+03 -4.42700000e-04 -1.65360702e-12 7.09898261e-02 5.56608994e-02 9.18356529e-02 6.09810412e-02 2.33520255e-03 7.18197378e-01 3.12802809e+03 -4.42800000e-04 -1.65360702e-12 7.09896698e-02 5.56606144e-02 9.18358342e-02 6.09813338e-02 2.33516981e-03 7.18197378e-01 3.12802809e+03 -4.42900000e-04 -1.65360702e-12 7.09895140e-02 5.56603302e-02 9.18360151e-02 6.09816257e-02 2.33513715e-03 7.18197378e-01 3.12802809e+03 -4.43000000e-04 -1.65360702e-12 7.09893585e-02 5.56600468e-02 9.18361955e-02 6.09819168e-02 2.33510458e-03 7.18197378e-01 3.12802809e+03 -4.43100000e-04 -1.65360702e-12 7.09892034e-02 5.56597640e-02 9.18363755e-02 6.09822072e-02 2.33507208e-03 7.18197378e-01 3.12802809e+03 -4.43200000e-04 -1.65360702e-12 7.09890487e-02 5.56594820e-02 9.18365550e-02 6.09824968e-02 2.33503968e-03 7.18197378e-01 3.12802809e+03 -4.43300000e-04 -1.65360702e-12 7.09888944e-02 5.56592007e-02 9.18367340e-02 6.09827857e-02 2.33500735e-03 7.18197378e-01 3.12802809e+03 -4.43400000e-04 -1.65360702e-12 7.09887405e-02 5.56589201e-02 9.18369126e-02 6.09830738e-02 2.33497511e-03 7.18197378e-01 3.12802809e+03 -4.43500000e-04 -1.65360702e-12 7.09885870e-02 5.56586402e-02 9.18370907e-02 6.09833613e-02 2.33494294e-03 7.18197378e-01 3.12802809e+03 -4.43600000e-04 -1.65360702e-12 7.09884339e-02 5.56583611e-02 9.18372684e-02 6.09836479e-02 2.33491087e-03 7.18197378e-01 3.12806948e+03 -4.43700000e-04 -1.65360702e-12 7.09882811e-02 5.56580826e-02 9.18374456e-02 6.09839339e-02 2.33487887e-03 7.18197378e-01 3.12806948e+03 -4.43800000e-04 -1.65360702e-12 7.09881288e-02 5.56578049e-02 9.18376224e-02 6.09842191e-02 2.33484695e-03 7.18197378e-01 3.12806948e+03 -4.43900000e-04 -1.65360702e-12 7.09879769e-02 5.56575279e-02 9.18377987e-02 6.09845036e-02 2.33481512e-03 7.18197378e-01 3.12806948e+03 -4.44000000e-04 -1.65360702e-12 7.09878253e-02 5.56572516e-02 9.18379746e-02 6.09847874e-02 2.33478336e-03 7.18197378e-01 3.12806948e+03 -4.44100000e-04 -1.65360702e-12 7.09876741e-02 5.56569759e-02 9.18381500e-02 6.09850704e-02 2.33475169e-03 7.18197378e-01 3.12806948e+03 -4.44200000e-04 -1.65360702e-12 7.09875233e-02 5.56567010e-02 9.18383249e-02 6.09853527e-02 2.33472010e-03 7.18197378e-01 3.12806948e+03 -4.44300000e-04 -1.65360702e-12 7.09873729e-02 5.56564268e-02 9.18384995e-02 6.09856343e-02 2.33468859e-03 7.18197378e-01 3.12806948e+03 -4.44400000e-04 -1.65360702e-12 7.09872229e-02 5.56561533e-02 9.18386735e-02 6.09859152e-02 2.33465716e-03 7.18197378e-01 3.12806948e+03 -4.44500000e-04 -1.65360702e-12 7.09870733e-02 5.56558805e-02 9.18388472e-02 6.09861954e-02 2.33462581e-03 7.18197378e-01 3.12806948e+03 -4.44600000e-04 -1.65360702e-12 7.09869240e-02 5.56556084e-02 9.18390203e-02 6.09864748e-02 2.33459454e-03 7.18197378e-01 3.12806948e+03 -4.44700000e-04 -1.65360702e-12 7.09867751e-02 5.56553370e-02 9.18391931e-02 6.09867536e-02 2.33456335e-03 7.18197378e-01 3.12806948e+03 -4.44800000e-04 -1.65360702e-12 7.09866266e-02 5.56550663e-02 9.18393654e-02 6.09870316e-02 2.33453224e-03 7.18197378e-01 3.12806948e+03 -4.44900000e-04 -1.65360702e-12 7.09864785e-02 5.56547963e-02 9.18395373e-02 6.09873089e-02 2.33450121e-03 7.18197378e-01 3.12806948e+03 -4.45000000e-04 -1.65360702e-12 7.09863308e-02 5.56545269e-02 9.18397087e-02 6.09875855e-02 2.33447025e-03 7.18197378e-01 3.12806948e+03 -4.45100000e-04 -1.65360702e-12 7.09861834e-02 5.56542583e-02 9.18398797e-02 6.09878614e-02 2.33443938e-03 7.18197378e-01 3.12806948e+03 -4.45200000e-04 -1.65360702e-12 7.09860364e-02 5.56539903e-02 9.18400502e-02 6.09881366e-02 2.33440859e-03 7.18197378e-01 3.12806948e+03 -4.45300000e-04 -1.65360702e-12 7.09858898e-02 5.56537230e-02 9.18402203e-02 6.09884111e-02 2.33437787e-03 7.18197378e-01 3.12806948e+03 -4.45400000e-04 -1.65360702e-12 7.09857436e-02 5.56534564e-02 9.18403900e-02 6.09886849e-02 2.33434723e-03 7.18197378e-01 3.12806948e+03 -4.45500000e-04 -1.65360702e-12 7.09855977e-02 5.56531905e-02 9.18405592e-02 6.09889580e-02 2.33431668e-03 7.18197378e-01 3.12806948e+03 -4.45600000e-04 -1.65360702e-12 7.09854522e-02 5.56529253e-02 9.18407281e-02 6.09892304e-02 2.33428619e-03 7.18197378e-01 3.12806948e+03 -4.45700000e-04 -1.65360702e-12 7.09853071e-02 5.56526607e-02 9.18408964e-02 6.09895021e-02 2.33425579e-03 7.18197378e-01 3.12806948e+03 -4.45800000e-04 -1.65360702e-12 7.09851623e-02 5.56523968e-02 9.18410644e-02 6.09897731e-02 2.33422546e-03 7.18197378e-01 3.12806948e+03 -4.45900000e-04 -1.65360702e-12 7.09850179e-02 5.56521336e-02 9.18412319e-02 6.09900435e-02 2.33419522e-03 7.18197378e-01 3.12810849e+03 -4.46000000e-04 -1.65360702e-12 7.09848739e-02 5.56518711e-02 9.18413990e-02 6.09903131e-02 2.33416505e-03 7.18197378e-01 3.12810849e+03 -4.46100000e-04 -1.65360702e-12 7.09847303e-02 5.56516092e-02 9.18415657e-02 6.09905820e-02 2.33413495e-03 7.18197378e-01 3.12810849e+03 -4.46200000e-04 -1.65360702e-12 7.09845870e-02 5.56513480e-02 9.18417319e-02 6.09908503e-02 2.33410493e-03 7.18197378e-01 3.12810849e+03 -4.46300000e-04 -1.65360702e-12 7.09844441e-02 5.56510875e-02 9.18418977e-02 6.09911179e-02 2.33407499e-03 7.18197378e-01 3.12810849e+03 -4.46400000e-04 -1.65360702e-12 7.09843015e-02 5.56508276e-02 9.18420631e-02 6.09913847e-02 2.33404513e-03 7.18197378e-01 3.12810849e+03 -4.46500000e-04 -1.65360702e-12 7.09841593e-02 5.56505684e-02 9.18422281e-02 6.09916510e-02 2.33401534e-03 7.18197378e-01 3.12810849e+03 -4.46600000e-04 -1.65360702e-12 7.09840175e-02 5.56503099e-02 9.18423926e-02 6.09919165e-02 2.33398563e-03 7.18197378e-01 3.12810849e+03 -4.46700000e-04 -1.65360702e-12 7.09838760e-02 5.56500520e-02 9.18425568e-02 6.09921813e-02 2.33395599e-03 7.18197378e-01 3.12810849e+03 -4.46800000e-04 -1.65360702e-12 7.09837349e-02 5.56497948e-02 9.18427205e-02 6.09924455e-02 2.33392643e-03 7.18197378e-01 3.12810849e+03 -4.46900000e-04 -1.65360702e-12 7.09835942e-02 5.56495382e-02 9.18428838e-02 6.09927090e-02 2.33389695e-03 7.18197378e-01 3.12810849e+03 -4.47000000e-04 -1.65360702e-12 7.09834538e-02 5.56492823e-02 9.18430466e-02 6.09929718e-02 2.33386754e-03 7.18197378e-01 3.12810849e+03 -4.47100000e-04 -1.65360702e-12 7.09833138e-02 5.56490271e-02 9.18432091e-02 6.09932340e-02 2.33383820e-03 7.18197378e-01 3.12810849e+03 -4.47200000e-04 -1.65360702e-12 7.09831741e-02 5.56487725e-02 9.18433711e-02 6.09934955e-02 2.33380894e-03 7.18197378e-01 3.12810849e+03 -4.47300000e-04 -1.65360702e-12 7.09830348e-02 5.56485185e-02 9.18435328e-02 6.09937563e-02 2.33377976e-03 7.18197378e-01 3.12810849e+03 -4.47400000e-04 -1.65360702e-12 7.09828959e-02 5.56482652e-02 9.18436940e-02 6.09940164e-02 2.33375065e-03 7.18197378e-01 3.12810849e+03 -4.47500000e-04 -1.65360702e-12 7.09827572e-02 5.56480126e-02 9.18438548e-02 6.09942759e-02 2.33372161e-03 7.18197378e-01 3.12810849e+03 -4.47600000e-04 -1.65360702e-12 7.09826190e-02 5.56477605e-02 9.18440152e-02 6.09945348e-02 2.33369265e-03 7.18197378e-01 3.12810849e+03 -4.47700000e-04 -1.65360702e-12 7.09824811e-02 5.56475092e-02 9.18441752e-02 6.09947929e-02 2.33366376e-03 7.18197378e-01 3.12810849e+03 -4.47800000e-04 -1.65360702e-12 7.09823436e-02 5.56472585e-02 9.18443348e-02 6.09950504e-02 2.33363494e-03 7.18197378e-01 3.12810849e+03 -4.47900000e-04 -1.65360702e-12 7.09822064e-02 5.56470084e-02 9.18444939e-02 6.09953073e-02 2.33360620e-03 7.18197378e-01 3.12810849e+03 -4.48000000e-04 -1.65360702e-12 7.09820695e-02 5.56467589e-02 9.18446527e-02 6.09955635e-02 2.33357754e-03 7.18197378e-01 3.12810849e+03 -4.48100000e-04 -1.65360702e-12 7.09819330e-02 5.56465101e-02 9.18448110e-02 6.09958190e-02 2.33354894e-03 7.18197378e-01 3.12810849e+03 -4.48200000e-04 -1.65360702e-12 7.09817969e-02 5.56462620e-02 9.18449690e-02 6.09960739e-02 2.33352042e-03 7.18197378e-01 3.12814527e+03 -4.48300000e-04 -1.65360702e-12 7.09816611e-02 5.56460144e-02 9.18451265e-02 6.09963281e-02 2.33349197e-03 7.18197378e-01 3.12814527e+03 -4.48400000e-04 -1.65360702e-12 7.09815256e-02 5.56457675e-02 9.18452837e-02 6.09965817e-02 2.33346359e-03 7.18197378e-01 3.12814527e+03 -4.48500000e-04 -1.65360702e-12 7.09813905e-02 5.56455212e-02 9.18454404e-02 6.09968347e-02 2.33343529e-03 7.18197378e-01 3.12814527e+03 -4.48600000e-04 -1.65360702e-12 7.09812558e-02 5.56452756e-02 9.18455968e-02 6.09970870e-02 2.33340706e-03 7.18197378e-01 3.12814527e+03 -4.48700000e-04 -1.65360702e-12 7.09811213e-02 5.56450306e-02 9.18457527e-02 6.09973386e-02 2.33337890e-03 7.18197378e-01 3.12814527e+03 -4.48800000e-04 -1.65360702e-12 7.09809873e-02 5.56447862e-02 9.18459083e-02 6.09975896e-02 2.33335081e-03 7.18197378e-01 3.12814527e+03 -4.48900000e-04 -1.65360702e-12 7.09808535e-02 5.56445424e-02 9.18460634e-02 6.09978400e-02 2.33332280e-03 7.18197378e-01 3.12814527e+03 -4.49000000e-04 -1.65360702e-12 7.09807202e-02 5.56442993e-02 9.18462182e-02 6.09980897e-02 2.33329485e-03 7.18197378e-01 3.12814527e+03 -4.49100000e-04 -1.65360702e-12 7.09805871e-02 5.56440567e-02 9.18463725e-02 6.09983388e-02 2.33326698e-03 7.18197378e-01 3.12814527e+03 -4.49200000e-04 -1.65360702e-12 7.09804544e-02 5.56438148e-02 9.18465265e-02 6.09985873e-02 2.33323918e-03 7.18197378e-01 3.12814527e+03 -4.49300000e-04 -1.65360702e-12 7.09803220e-02 5.56435736e-02 9.18466800e-02 6.09988351e-02 2.33321145e-03 7.18197378e-01 3.12814527e+03 -4.49400000e-04 -1.65360702e-12 7.09801900e-02 5.56433329e-02 9.18468332e-02 6.09990823e-02 2.33318379e-03 7.18197378e-01 3.12814527e+03 -4.49500000e-04 -1.65360702e-12 7.09800583e-02 5.56430928e-02 9.18469860e-02 6.09993288e-02 2.33315620e-03 7.18197378e-01 3.12814527e+03 -4.49600000e-04 -1.65360702e-12 7.09799269e-02 5.56428534e-02 9.18471384e-02 6.09995748e-02 2.33312868e-03 7.18197378e-01 3.12814527e+03 -4.49700000e-04 -1.65360702e-12 7.09797959e-02 5.56426146e-02 9.18472904e-02 6.09998201e-02 2.33310123e-03 7.18197378e-01 3.12814527e+03 -4.49800000e-04 -1.65360702e-12 7.09796652e-02 5.56423763e-02 9.18474420e-02 6.10000647e-02 2.33307385e-03 7.18197378e-01 3.12814527e+03 -4.49900000e-04 -1.65360702e-12 7.09795348e-02 5.56421387e-02 9.18475932e-02 6.10003088e-02 2.33304654e-03 7.18197378e-01 3.12814527e+03 -4.50000000e-04 -1.65360702e-12 7.09794048e-02 5.56419017e-02 9.18477441e-02 6.10005522e-02 2.33301930e-03 7.18197378e-01 3.12814527e+03 -4.50100000e-04 -1.65360702e-12 7.09792751e-02 5.56416653e-02 9.18478945e-02 6.10007950e-02 2.33299213e-03 7.18197378e-01 3.12814527e+03 -4.50200000e-04 -1.65360702e-12 7.09791458e-02 5.56414295e-02 9.18480446e-02 6.10010372e-02 2.33296503e-03 7.18197378e-01 3.12814527e+03 -4.50300000e-04 -1.65360702e-12 7.09790167e-02 5.56411943e-02 9.18481943e-02 6.10012788e-02 2.33293800e-03 7.18197378e-01 3.12814527e+03 -4.50400000e-04 -1.65360702e-12 7.09788880e-02 5.56409597e-02 9.18483436e-02 6.10015197e-02 2.33291104e-03 7.18197378e-01 3.12814527e+03 -4.50500000e-04 -1.65360702e-12 7.09787596e-02 5.56407258e-02 9.18484925e-02 6.10017601e-02 2.33288415e-03 7.18197378e-01 3.12817994e+03 -4.50600000e-04 -1.65360702e-12 7.09786316e-02 5.56404924e-02 9.18486411e-02 6.10019998e-02 2.33285732e-03 7.18197378e-01 3.12817994e+03 -4.50700000e-04 -1.65360702e-12 7.09785039e-02 5.56402596e-02 9.18487893e-02 6.10022389e-02 2.33283057e-03 7.18197378e-01 3.12817994e+03 -4.50800000e-04 -1.65360702e-12 7.09783765e-02 5.56400274e-02 9.18489370e-02 6.10024774e-02 2.33280388e-03 7.18197378e-01 3.12817994e+03 -4.50900000e-04 -1.65360702e-12 7.09782494e-02 5.56397958e-02 9.18490845e-02 6.10027153e-02 2.33277726e-03 7.18197378e-01 3.12817994e+03 -4.51000000e-04 -1.65360702e-12 7.09781227e-02 5.56395647e-02 9.18492315e-02 6.10029526e-02 2.33275071e-03 7.18197378e-01 3.12817994e+03 -4.51100000e-04 -1.65360702e-12 7.09779962e-02 5.56393343e-02 9.18493781e-02 6.10031892e-02 2.33272423e-03 7.18197378e-01 3.12817994e+03 -4.51200000e-04 -1.65360702e-12 7.09778701e-02 5.56391045e-02 9.18495244e-02 6.10034253e-02 2.33269781e-03 7.18197378e-01 3.12817994e+03 -4.51300000e-04 -1.65360702e-12 7.09777444e-02 5.56388752e-02 9.18496703e-02 6.10036608e-02 2.33267146e-03 7.18197378e-01 3.12817994e+03 -4.51400000e-04 -1.65360702e-12 7.09776189e-02 5.56386466e-02 9.18498159e-02 6.10038956e-02 2.33264518e-03 7.18197378e-01 3.12817994e+03 -4.51500000e-04 -1.65360702e-12 7.09774938e-02 5.56384185e-02 9.18499610e-02 6.10041299e-02 2.33261897e-03 7.18197378e-01 3.12817994e+03 -4.51600000e-04 -1.65360702e-12 7.09773690e-02 5.56381910e-02 9.18501058e-02 6.10043636e-02 2.33259282e-03 7.18197378e-01 3.12817994e+03 -4.51700000e-04 -1.65360702e-12 7.09772445e-02 5.56379641e-02 9.18502502e-02 6.10045967e-02 2.33256674e-03 7.18197378e-01 3.12817994e+03 -4.51800000e-04 -1.65360702e-12 7.09771203e-02 5.56377377e-02 9.18503943e-02 6.10048291e-02 2.33254072e-03 7.18197378e-01 3.12817994e+03 -4.51900000e-04 -1.65360702e-12 7.09769964e-02 5.56375120e-02 9.18505380e-02 6.10050610e-02 2.33251478e-03 7.18197378e-01 3.12817994e+03 -4.52000000e-04 -1.65360702e-12 7.09768729e-02 5.56372868e-02 9.18506813e-02 6.10052923e-02 2.33248890e-03 7.18197378e-01 3.12817994e+03 -4.52100000e-04 -1.65360702e-12 7.09767496e-02 5.56370622e-02 9.18508243e-02 6.10055230e-02 2.33246308e-03 7.18197378e-01 3.12817994e+03 -4.52200000e-04 -1.65360702e-12 7.09766267e-02 5.56368381e-02 9.18509668e-02 6.10057531e-02 2.33243733e-03 7.18197378e-01 3.12817994e+03 -4.52300000e-04 -1.65360702e-12 7.09765041e-02 5.56366147e-02 9.18511091e-02 6.10059826e-02 2.33241165e-03 7.18197378e-01 3.12817994e+03 -4.52400000e-04 -1.65360702e-12 7.09763818e-02 5.56363918e-02 9.18512509e-02 6.10062116e-02 2.33238603e-03 7.18197378e-01 3.12817994e+03 -4.52500000e-04 -1.65360702e-12 7.09762598e-02 5.56361695e-02 9.18513924e-02 6.10064399e-02 2.33236048e-03 7.18197378e-01 3.12817994e+03 -4.52600000e-04 -1.65360702e-12 7.09761382e-02 5.56359477e-02 9.18515336e-02 6.10066677e-02 2.33233499e-03 7.18197378e-01 3.12817994e+03 -4.52700000e-04 -1.65360702e-12 7.09760168e-02 5.56357265e-02 9.18516743e-02 6.10068949e-02 2.33230957e-03 7.18197378e-01 3.12817994e+03 -4.52800000e-04 -1.65360702e-12 7.09758958e-02 5.56355059e-02 9.18518148e-02 6.10071215e-02 2.33228421e-03 7.18197378e-01 3.12821262e+03 -4.52900000e-04 -1.65360702e-12 7.09757750e-02 5.56352859e-02 9.18519548e-02 6.10073475e-02 2.33225892e-03 7.18197378e-01 3.12821262e+03 -4.53000000e-04 -1.65360702e-12 7.09756546e-02 5.56350664e-02 9.18520945e-02 6.10075730e-02 2.33223369e-03 7.18197378e-01 3.12821262e+03 -4.53100000e-04 -1.65360702e-12 7.09755345e-02 5.56348474e-02 9.18522338e-02 6.10077979e-02 2.33220853e-03 7.18197378e-01 3.12821262e+03 -4.53200000e-04 -1.65360702e-12 7.09754146e-02 5.56346291e-02 9.18523728e-02 6.10080222e-02 2.33218343e-03 7.18197378e-01 3.12821262e+03 -4.53300000e-04 -1.65360702e-12 7.09752951e-02 5.56344113e-02 9.18525115e-02 6.10082459e-02 2.33215839e-03 7.18197378e-01 3.12821262e+03 -4.53400000e-04 -1.65360702e-12 7.09751759e-02 5.56341940e-02 9.18526497e-02 6.10084691e-02 2.33213342e-03 7.18197378e-01 3.12821262e+03 -4.53500000e-04 -1.65360702e-12 7.09750570e-02 5.56339773e-02 9.18527877e-02 6.10086917e-02 2.33210851e-03 7.18197378e-01 3.12821262e+03 -4.53600000e-04 -1.65360702e-12 7.09749384e-02 5.56337611e-02 9.18529252e-02 6.10089137e-02 2.33208367e-03 7.18197378e-01 3.12821262e+03 -4.53700000e-04 -1.65360702e-12 7.09748201e-02 5.56335455e-02 9.18530624e-02 6.10091351e-02 2.33205889e-03 7.18197378e-01 3.12821262e+03 -4.53800000e-04 -1.65360702e-12 7.09747021e-02 5.56333305e-02 9.18531993e-02 6.10093560e-02 2.33203417e-03 7.18197378e-01 3.12821262e+03 -4.53900000e-04 -1.65360702e-12 7.09745845e-02 5.56331160e-02 9.18533358e-02 6.10095763e-02 2.33200952e-03 7.18197378e-01 3.12821262e+03 -4.54000000e-04 -1.65360702e-12 7.09744671e-02 5.56329021e-02 9.18534720e-02 6.10097961e-02 2.33198493e-03 7.18197378e-01 3.12821262e+03 -4.54100000e-04 -1.65360702e-12 7.09743500e-02 5.56326887e-02 9.18536078e-02 6.10100153e-02 2.33196040e-03 7.18197378e-01 3.12821262e+03 -4.54200000e-04 -1.65360702e-12 7.09742332e-02 5.56324758e-02 9.18537433e-02 6.10102339e-02 2.33193593e-03 7.18197378e-01 3.12821262e+03 -4.54300000e-04 -1.65360702e-12 7.09741167e-02 5.56322635e-02 9.18538784e-02 6.10104520e-02 2.33191153e-03 7.18197378e-01 3.12821262e+03 -4.54400000e-04 -1.65360702e-12 7.09740005e-02 5.56320517e-02 9.18540132e-02 6.10106696e-02 2.33188719e-03 7.18197378e-01 3.12821262e+03 -4.54500000e-04 -1.65360702e-12 7.09738846e-02 5.56318405e-02 9.18541476e-02 6.10108865e-02 2.33186291e-03 7.18197378e-01 3.12821262e+03 -4.54600000e-04 -1.65360702e-12 7.09737690e-02 5.56316298e-02 9.18542817e-02 6.10111029e-02 2.33183870e-03 7.18197378e-01 3.12821262e+03 -4.54700000e-04 -1.65360702e-12 7.09736537e-02 5.56314196e-02 9.18544155e-02 6.10113188e-02 2.33181454e-03 7.18197378e-01 3.12821262e+03 -4.54800000e-04 -1.65360702e-12 7.09735387e-02 5.56312100e-02 9.18545489e-02 6.10115341e-02 2.33179045e-03 7.18197378e-01 3.12821262e+03 -4.54900000e-04 -1.65360702e-12 7.09734239e-02 5.56310010e-02 9.18546820e-02 6.10117489e-02 2.33176642e-03 7.18197378e-01 3.12821262e+03 -4.55000000e-04 -1.65360702e-12 7.09733095e-02 5.56307924e-02 9.18548147e-02 6.10119631e-02 2.33174245e-03 7.18197378e-01 3.12821262e+03 -4.55100000e-04 -1.65360702e-12 7.09731954e-02 5.56305844e-02 9.18549471e-02 6.10121768e-02 2.33171854e-03 7.18197378e-01 3.12821262e+03 -4.55200000e-04 -1.65360702e-12 7.09730815e-02 5.56303769e-02 9.18550791e-02 6.10123899e-02 2.33169469e-03 7.18197378e-01 3.12824343e+03 -4.55300000e-04 -1.65360702e-12 7.09729680e-02 5.56301700e-02 9.18552109e-02 6.10126024e-02 2.33167090e-03 7.18197378e-01 3.12824343e+03 -4.55400000e-04 -1.65360702e-12 7.09728547e-02 5.56299636e-02 9.18553422e-02 6.10128145e-02 2.33164718e-03 7.18197378e-01 3.12824343e+03 -4.55500000e-04 -1.65360702e-12 7.09727417e-02 5.56297577e-02 9.18554733e-02 6.10130260e-02 2.33162351e-03 7.18197378e-01 3.12824343e+03 -4.55600000e-04 -1.65360702e-12 7.09726290e-02 5.56295523e-02 9.18556040e-02 6.10132369e-02 2.33159991e-03 7.18197378e-01 3.12824343e+03 -4.55700000e-04 -1.65360702e-12 7.09725166e-02 5.56293475e-02 9.18557344e-02 6.10134473e-02 2.33157636e-03 7.18197378e-01 3.12824343e+03 -4.55800000e-04 -1.65360702e-12 7.09724045e-02 5.56291431e-02 9.18558644e-02 6.10136572e-02 2.33155288e-03 7.18197378e-01 3.12824343e+03 -4.55900000e-04 -1.65360702e-12 7.09722927e-02 5.56289393e-02 9.18559941e-02 6.10138666e-02 2.33152945e-03 7.18197378e-01 3.12824343e+03 -4.56000000e-04 -1.65360702e-12 7.09721812e-02 5.56287361e-02 9.18561235e-02 6.10140754e-02 2.33150609e-03 7.18197378e-01 3.12824343e+03 -4.56100000e-04 -1.65360702e-12 7.09720699e-02 5.56285333e-02 9.18562525e-02 6.10142836e-02 2.33148278e-03 7.18197378e-01 3.12824343e+03 -4.56200000e-04 -1.65360702e-12 7.09719589e-02 5.56283311e-02 9.18563812e-02 6.10144914e-02 2.33145954e-03 7.18197378e-01 3.12824343e+03 -4.56300000e-04 -1.65360702e-12 7.09718482e-02 5.56281294e-02 9.18565096e-02 6.10146986e-02 2.33143635e-03 7.18197378e-01 3.12824343e+03 -4.56400000e-04 -1.65360702e-12 7.09717378e-02 5.56279282e-02 9.18566377e-02 6.10149053e-02 2.33141322e-03 7.18197378e-01 3.12824343e+03 -4.56500000e-04 -1.65360702e-12 7.09716277e-02 5.56277275e-02 9.18567654e-02 6.10151114e-02 2.33139015e-03 7.18197378e-01 3.12824343e+03 -4.56600000e-04 -1.65360702e-12 7.09715179e-02 5.56275273e-02 9.18568928e-02 6.10153170e-02 2.33136715e-03 7.18197378e-01 3.12824343e+03 -4.56700000e-04 -1.65360702e-12 7.09714083e-02 5.56273276e-02 9.18570199e-02 6.10155221e-02 2.33134420e-03 7.18197378e-01 3.12824343e+03 -4.56800000e-04 -1.65360702e-12 7.09712990e-02 5.56271285e-02 9.18571467e-02 6.10157267e-02 2.33132130e-03 7.18197378e-01 3.12824343e+03 -4.56900000e-04 -1.65360702e-12 7.09711900e-02 5.56269298e-02 9.18572731e-02 6.10159308e-02 2.33129847e-03 7.18197378e-01 3.12824343e+03 -4.57000000e-04 -1.65360702e-12 7.09710813e-02 5.56267317e-02 9.18573992e-02 6.10161343e-02 2.33127570e-03 7.18197378e-01 3.12824343e+03 -4.57100000e-04 -1.65360702e-12 7.09709728e-02 5.56265340e-02 9.18575250e-02 6.10163373e-02 2.33125298e-03 7.18197378e-01 3.12824343e+03 -4.57200000e-04 -1.65360702e-12 7.09708647e-02 5.56263369e-02 9.18576504e-02 6.10165398e-02 2.33123032e-03 7.18197378e-01 3.12824343e+03 -4.57300000e-04 -1.65360702e-12 7.09707568e-02 5.56261403e-02 9.18577756e-02 6.10167418e-02 2.33120772e-03 7.18197378e-01 3.12824343e+03 -4.57400000e-04 -1.65360702e-12 7.09706492e-02 5.56259442e-02 9.18579004e-02 6.10169432e-02 2.33118518e-03 7.18197378e-01 3.12824343e+03 -4.57500000e-04 -1.65360702e-12 7.09705418e-02 5.56257486e-02 9.18580249e-02 6.10171442e-02 2.33116269e-03 7.18197378e-01 3.12827246e+03 -4.57600000e-04 -1.65360702e-12 7.09704347e-02 5.56255534e-02 9.18581491e-02 6.10173446e-02 2.33114026e-03 7.18197378e-01 3.12827246e+03 -4.57700000e-04 -1.65360702e-12 7.09703279e-02 5.56253588e-02 9.18582730e-02 6.10175445e-02 2.33111789e-03 7.18197378e-01 3.12827246e+03 -4.57800000e-04 -1.65360702e-12 7.09702214e-02 5.56251647e-02 9.18583965e-02 6.10177439e-02 2.33109558e-03 7.18197378e-01 3.12827246e+03 -4.57900000e-04 -1.65360702e-12 7.09701152e-02 5.56249711e-02 9.18585197e-02 6.10179428e-02 2.33107332e-03 7.18197378e-01 3.12827246e+03 -4.58000000e-04 -1.65360702e-12 7.09700092e-02 5.56247779e-02 9.18586427e-02 6.10181412e-02 2.33105112e-03 7.18197378e-01 3.12827246e+03 -4.58100000e-04 -1.65360702e-12 7.09699035e-02 5.56245853e-02 9.18587653e-02 6.10183391e-02 2.33102898e-03 7.18197378e-01 3.12827246e+03 -4.58200000e-04 -1.65360702e-12 7.09697980e-02 5.56243932e-02 9.18588876e-02 6.10185365e-02 2.33100689e-03 7.18197378e-01 3.12827246e+03 -4.58300000e-04 -1.65360702e-12 7.09696929e-02 5.56242015e-02 9.18590095e-02 6.10187334e-02 2.33098486e-03 7.18197378e-01 3.12827246e+03 -4.58400000e-04 -1.65360702e-12 7.09695880e-02 5.56240103e-02 9.18591312e-02 6.10189298e-02 2.33096289e-03 7.18197378e-01 3.12827246e+03 -4.58500000e-04 -1.65360702e-12 7.09694833e-02 5.56238197e-02 9.18592526e-02 6.10191256e-02 2.33094097e-03 7.18197378e-01 3.12827246e+03 -4.58600000e-04 -1.65360702e-12 7.09693790e-02 5.56236295e-02 9.18593736e-02 6.10193210e-02 2.33091911e-03 7.18197378e-01 3.12827246e+03 -4.58700000e-04 -1.65360702e-12 7.09692749e-02 5.56234398e-02 9.18594944e-02 6.10195159e-02 2.33089730e-03 7.18197378e-01 3.12827246e+03 -4.58800000e-04 -1.65360702e-12 7.09691710e-02 5.56232505e-02 9.18596148e-02 6.10197102e-02 2.33087555e-03 7.18197378e-01 3.12827246e+03 -4.58900000e-04 -1.65360702e-12 7.09690675e-02 5.56230618e-02 9.18597349e-02 6.10199041e-02 2.33085386e-03 7.18197378e-01 3.12827246e+03 -4.59000000e-04 -1.65360702e-12 7.09689641e-02 5.56228736e-02 9.18598547e-02 6.10200975e-02 2.33083222e-03 7.18197378e-01 3.12827246e+03 -4.59100000e-04 -1.65360702e-12 7.09688611e-02 5.56226858e-02 9.18599742e-02 6.10202904e-02 2.33081064e-03 7.18197378e-01 3.12827246e+03 -4.59200000e-04 -1.65360702e-12 7.09687583e-02 5.56224985e-02 9.18600934e-02 6.10204828e-02 2.33078911e-03 7.18197378e-01 3.12827246e+03 -4.59300000e-04 -1.65360702e-12 7.09686558e-02 5.56223117e-02 9.18602123e-02 6.10206747e-02 2.33076763e-03 7.18197378e-01 3.12827246e+03 -4.59400000e-04 -1.65360702e-12 7.09685536e-02 5.56221254e-02 9.18603309e-02 6.10208661e-02 2.33074621e-03 7.18197378e-01 3.12827246e+03 -4.59500000e-04 -1.65360702e-12 7.09684516e-02 5.56219395e-02 9.18604492e-02 6.10210570e-02 2.33072485e-03 7.18197378e-01 3.12827246e+03 -4.59600000e-04 -1.65360702e-12 7.09683498e-02 5.56217541e-02 9.18605672e-02 6.10212475e-02 2.33070354e-03 7.18197378e-01 3.12827246e+03 -4.59700000e-04 -1.65360702e-12 7.09682484e-02 5.56215692e-02 9.18606849e-02 6.10214374e-02 2.33068229e-03 7.18197378e-01 3.12827246e+03 -4.59800000e-04 -1.65360702e-12 7.09681471e-02 5.56213848e-02 9.18608023e-02 6.10216269e-02 2.33066108e-03 7.18197378e-01 3.12829983e+03 -4.59900000e-04 -1.65360702e-12 7.09680462e-02 5.56212008e-02 9.18609194e-02 6.10218159e-02 2.33063994e-03 7.18197378e-01 3.12829983e+03 -4.60000000e-04 -1.65360702e-12 7.09679455e-02 5.56210173e-02 9.18610361e-02 6.10220044e-02 2.33061884e-03 7.18197378e-01 3.12829983e+03 -4.60100000e-04 -1.65360702e-12 7.09678451e-02 5.56208343e-02 9.18611526e-02 6.10221924e-02 2.33059781e-03 7.18197378e-01 3.12829983e+03 -4.60200000e-04 -1.65360702e-12 7.09677449e-02 5.56206517e-02 9.18612688e-02 6.10223799e-02 2.33057682e-03 7.18197378e-01 3.12829983e+03 -4.60300000e-04 -1.65360702e-12 7.09676449e-02 5.56204696e-02 9.18613847e-02 6.10225670e-02 2.33055589e-03 7.18197378e-01 3.12829983e+03 -4.60400000e-04 -1.65360702e-12 7.09675453e-02 5.56202880e-02 9.18615003e-02 6.10227535e-02 2.33053501e-03 7.18197378e-01 3.12829983e+03 -4.60500000e-04 -1.65360702e-12 7.09674458e-02 5.56201068e-02 9.18616156e-02 6.10229396e-02 2.33051419e-03 7.18197378e-01 3.12829983e+03 -4.60600000e-04 -1.65360702e-12 7.09673467e-02 5.56199261e-02 9.18617306e-02 6.10231253e-02 2.33049342e-03 7.18197378e-01 3.12829983e+03 -4.60700000e-04 -1.65360702e-12 7.09672478e-02 5.56197459e-02 9.18618453e-02 6.10233104e-02 2.33047270e-03 7.18197378e-01 3.12829983e+03 -4.60800000e-04 -1.65360702e-12 7.09671491e-02 5.56195661e-02 9.18619598e-02 6.10234951e-02 2.33045203e-03 7.18197378e-01 3.12829983e+03 -4.60900000e-04 -1.65360702e-12 7.09670507e-02 5.56193868e-02 9.18620739e-02 6.10236793e-02 2.33043142e-03 7.18197378e-01 3.12829983e+03 -4.61000000e-04 -1.65360702e-12 7.09669526e-02 5.56192080e-02 9.18621877e-02 6.10238631e-02 2.33041086e-03 7.18197378e-01 3.12829983e+03 -4.61100000e-04 -1.65360702e-12 7.09668546e-02 5.56190296e-02 9.18623013e-02 6.10240463e-02 2.33039035e-03 7.18197378e-01 3.12829983e+03 -4.61200000e-04 -1.65360702e-12 7.09667570e-02 5.56188516e-02 9.18624145e-02 6.10242291e-02 2.33036990e-03 7.18197378e-01 3.12829983e+03 -4.61300000e-04 -1.65360702e-12 7.09666596e-02 5.56186741e-02 9.18625275e-02 6.10244115e-02 2.33034949e-03 7.18197378e-01 3.12829983e+03 -4.61400000e-04 -1.65360702e-12 7.09665624e-02 5.56184971e-02 9.18626402e-02 6.10245933e-02 2.33032914e-03 7.18197378e-01 3.12829983e+03 -4.61500000e-04 -1.65360702e-12 7.09664655e-02 5.56183205e-02 9.18627525e-02 6.10247747e-02 2.33030885e-03 7.18197378e-01 3.12829983e+03 -4.61600000e-04 -1.65360702e-12 7.09663689e-02 5.56181444e-02 9.18628646e-02 6.10249557e-02 2.33028860e-03 7.18197378e-01 3.12829983e+03 -4.61700000e-04 -1.65360702e-12 7.09662724e-02 5.56179687e-02 9.18629765e-02 6.10251361e-02 2.33026840e-03 7.18197378e-01 3.12829983e+03 -4.61800000e-04 -1.65360702e-12 7.09661763e-02 5.56177935e-02 9.18630880e-02 6.10253162e-02 2.33024826e-03 7.18197378e-01 3.12829983e+03 -4.61900000e-04 -1.65360702e-12 7.09660804e-02 5.56176187e-02 9.18631992e-02 6.10254957e-02 2.33022817e-03 7.18197378e-01 3.12829983e+03 -4.62000000e-04 -1.65360702e-12 7.09659847e-02 5.56174443e-02 9.18633102e-02 6.10256748e-02 2.33020813e-03 7.18197378e-01 3.12829983e+03 -4.62100000e-04 -1.65360702e-12 7.09658892e-02 5.56172704e-02 9.18634209e-02 6.10258534e-02 2.33018814e-03 7.18197378e-01 3.12832563e+03 -4.62200000e-04 -1.65360702e-12 7.09657941e-02 5.56170970e-02 9.18635313e-02 6.10260316e-02 2.33016820e-03 7.18197378e-01 3.12832563e+03 -4.62300000e-04 -1.65360702e-12 7.09656991e-02 5.56169240e-02 9.18636414e-02 6.10262094e-02 2.33014831e-03 7.18197378e-01 3.12832563e+03 -4.62400000e-04 -1.65360702e-12 7.09656044e-02 5.56167514e-02 9.18637512e-02 6.10263866e-02 2.33012848e-03 7.18197378e-01 3.12832563e+03 -4.62500000e-04 -1.65360702e-12 7.09655099e-02 5.56165793e-02 9.18638607e-02 6.10265634e-02 2.33010869e-03 7.18197378e-01 3.12832563e+03 -4.62600000e-04 -1.65360702e-12 7.09654157e-02 5.56164076e-02 9.18639700e-02 6.10267398e-02 2.33008895e-03 7.18197378e-01 3.12832563e+03 -4.62700000e-04 -1.65360702e-12 7.09653218e-02 5.56162364e-02 9.18640790e-02 6.10269157e-02 2.33006927e-03 7.18197378e-01 3.12832563e+03 -4.62800000e-04 -1.65360702e-12 7.09652280e-02 5.56160656e-02 9.18641877e-02 6.10270912e-02 2.33004964e-03 7.18197378e-01 3.12832563e+03 -4.62900000e-04 -1.65360702e-12 7.09651345e-02 5.56158952e-02 9.18642961e-02 6.10272662e-02 2.33003005e-03 7.18197378e-01 3.12832563e+03 -4.63000000e-04 -1.65360702e-12 7.09650413e-02 5.56157253e-02 9.18644043e-02 6.10274408e-02 2.33001052e-03 7.18197378e-01 3.12832563e+03 -4.63100000e-04 -1.65360702e-12 7.09649482e-02 5.56155558e-02 9.18645122e-02 6.10276149e-02 2.32999103e-03 7.18197378e-01 3.12832563e+03 -4.63200000e-04 -1.65360702e-12 7.09648554e-02 5.56153867e-02 9.18646198e-02 6.10277886e-02 2.32997160e-03 7.18197378e-01 3.12832563e+03 -4.63300000e-04 -1.65360702e-12 7.09647629e-02 5.56152181e-02 9.18647271e-02 6.10279618e-02 2.32995221e-03 7.18197378e-01 3.12832563e+03 -4.63400000e-04 -1.65360702e-12 7.09646706e-02 5.56150499e-02 9.18648342e-02 6.10281346e-02 2.32993288e-03 7.18197378e-01 3.12832563e+03 -4.63500000e-04 -1.65360702e-12 7.09645785e-02 5.56148821e-02 9.18649409e-02 6.10283070e-02 2.32991359e-03 7.18197378e-01 3.12832563e+03 -4.63600000e-04 -1.65360702e-12 7.09644867e-02 5.56147148e-02 9.18650474e-02 6.10284789e-02 2.32989435e-03 7.18197378e-01 3.12832563e+03 -4.63700000e-04 -1.65360702e-12 7.09643951e-02 5.56145479e-02 9.18651537e-02 6.10286504e-02 2.32987517e-03 7.18197378e-01 3.12832563e+03 -4.63800000e-04 -1.65360702e-12 7.09643037e-02 5.56143814e-02 9.18652596e-02 6.10288214e-02 2.32985603e-03 7.18197378e-01 3.12832563e+03 -4.63900000e-04 -1.65360702e-12 7.09642125e-02 5.56142153e-02 9.18653653e-02 6.10289920e-02 2.32983694e-03 7.18197378e-01 3.12832563e+03 -4.64000000e-04 -1.65360702e-12 7.09641216e-02 5.56140497e-02 9.18654707e-02 6.10291622e-02 2.32981790e-03 7.18197378e-01 3.12832563e+03 -4.64100000e-04 -1.65360702e-12 7.09640310e-02 5.56138845e-02 9.18655759e-02 6.10293319e-02 2.32979890e-03 7.18197378e-01 3.12832563e+03 -4.64200000e-04 -1.65360702e-12 7.09639405e-02 5.56137197e-02 9.18656808e-02 6.10295012e-02 2.32977996e-03 7.18197378e-01 3.12832563e+03 -4.64300000e-04 -1.65360702e-12 7.09638503e-02 5.56135553e-02 9.18657854e-02 6.10296701e-02 2.32976107e-03 7.18197378e-01 3.12832563e+03 -4.64400000e-04 -1.65360702e-12 7.09637603e-02 5.56133914e-02 9.18658897e-02 6.10298385e-02 2.32974222e-03 7.18197378e-01 3.12834995e+03 -4.64500000e-04 -1.65360702e-12 7.09636706e-02 5.56132278e-02 9.18659938e-02 6.10300065e-02 2.32972342e-03 7.18197378e-01 3.12834995e+03 -4.64600000e-04 -1.65360702e-12 7.09635811e-02 5.56130647e-02 9.18660976e-02 6.10301741e-02 2.32970467e-03 7.18197378e-01 3.12834995e+03 -4.64700000e-04 -1.65360702e-12 7.09634918e-02 5.56129020e-02 9.18662012e-02 6.10303412e-02 2.32968597e-03 7.18197378e-01 3.12834995e+03 -4.64800000e-04 -1.65360702e-12 7.09634027e-02 5.56127397e-02 9.18663045e-02 6.10305079e-02 2.32966731e-03 7.18197378e-01 3.12834995e+03 -4.64900000e-04 -1.65360702e-12 7.09633139e-02 5.56125779e-02 9.18664075e-02 6.10306742e-02 2.32964870e-03 7.18197378e-01 3.12834995e+03 -4.65000000e-04 -1.65360702e-12 7.09632253e-02 5.56124164e-02 9.18665102e-02 6.10308401e-02 2.32963014e-03 7.18197378e-01 3.12834995e+03 -4.65100000e-04 -1.65360702e-12 7.09631369e-02 5.56122554e-02 9.18666127e-02 6.10310055e-02 2.32961163e-03 7.18197378e-01 3.12834995e+03 -4.65200000e-04 -1.65360702e-12 7.09630487e-02 5.56120948e-02 9.18667150e-02 6.10311705e-02 2.32959317e-03 7.18197378e-01 3.12834995e+03 -4.65300000e-04 -1.65360702e-12 7.09629608e-02 5.56119346e-02 9.18668169e-02 6.10313351e-02 2.32957475e-03 7.18197378e-01 3.12834995e+03 -4.65400000e-04 -1.65360702e-12 7.09628731e-02 5.56117748e-02 9.18669186e-02 6.10314993e-02 2.32955638e-03 7.18197378e-01 3.12834995e+03 -4.65500000e-04 -1.65360702e-12 7.09627856e-02 5.56116154e-02 9.18670201e-02 6.10316631e-02 2.32953805e-03 7.18197378e-01 3.12834995e+03 -4.65600000e-04 -1.65360702e-12 7.09626983e-02 5.56114564e-02 9.18671213e-02 6.10318264e-02 2.32951978e-03 7.18197378e-01 3.12834995e+03 -4.65700000e-04 -1.65360702e-12 7.09626113e-02 5.56112978e-02 9.18672222e-02 6.10319893e-02 2.32950155e-03 7.18197378e-01 3.12834995e+03 -4.65800000e-04 -1.65360702e-12 7.09625245e-02 5.56111396e-02 9.18673229e-02 6.10321518e-02 2.32948336e-03 7.18197378e-01 3.12834995e+03 -4.65900000e-04 -1.65360702e-12 7.09624379e-02 5.56109818e-02 9.18674233e-02 6.10323139e-02 2.32946522e-03 7.18197378e-01 3.12834995e+03 -4.66000000e-04 -1.65360702e-12 7.09623515e-02 5.56108245e-02 9.18675235e-02 6.10324756e-02 2.32944713e-03 7.18197378e-01 3.12834995e+03 -4.66100000e-04 -1.65360702e-12 7.09622654e-02 5.56106675e-02 9.18676234e-02 6.10326368e-02 2.32942909e-03 7.18197378e-01 3.12834995e+03 -4.66200000e-04 -1.65360702e-12 7.09621794e-02 5.56105109e-02 9.18677230e-02 6.10327977e-02 2.32941109e-03 7.18197378e-01 3.12834995e+03 -4.66300000e-04 -1.65360702e-12 7.09620937e-02 5.56103548e-02 9.18678224e-02 6.10329581e-02 2.32939314e-03 7.18197378e-01 3.12834995e+03 -4.66400000e-04 -1.65360702e-12 7.09620082e-02 5.56101990e-02 9.18679216e-02 6.10331181e-02 2.32937523e-03 7.18197378e-01 3.12834995e+03 -4.66500000e-04 -1.65360702e-12 7.09619229e-02 5.56100436e-02 9.18680204e-02 6.10332778e-02 2.32935737e-03 7.18197378e-01 3.12834995e+03 -4.66600000e-04 -1.65360702e-12 7.09618379e-02 5.56098887e-02 9.18681191e-02 6.10334370e-02 2.32933955e-03 7.18197378e-01 3.12834995e+03 -4.66700000e-04 -1.65360702e-12 7.09617531e-02 5.56097341e-02 9.18682174e-02 6.10335958e-02 2.32932178e-03 7.18197378e-01 3.12837287e+03 -4.66800000e-04 -1.65360702e-12 7.09616684e-02 5.56095799e-02 9.18683156e-02 6.10337542e-02 2.32930406e-03 7.18197378e-01 3.12837287e+03 -4.66900000e-04 -1.65360702e-12 7.09615840e-02 5.56094261e-02 9.18684135e-02 6.10339122e-02 2.32928638e-03 7.18197378e-01 3.12837287e+03 -4.67000000e-04 -1.65360702e-12 7.09614998e-02 5.56092727e-02 9.18685111e-02 6.10340698e-02 2.32926875e-03 7.18197378e-01 3.12837287e+03 -4.67100000e-04 -1.65360702e-12 7.09614159e-02 5.56091197e-02 9.18686085e-02 6.10342269e-02 2.32925116e-03 7.18197378e-01 3.12837287e+03 -4.67200000e-04 -1.65360702e-12 7.09613321e-02 5.56089671e-02 9.18687056e-02 6.10343837e-02 2.32923361e-03 7.18197378e-01 3.12837287e+03 -4.67300000e-04 -1.65360702e-12 7.09612485e-02 5.56088149e-02 9.18688025e-02 6.10345401e-02 2.32921611e-03 7.18197378e-01 3.12837287e+03 -4.67400000e-04 -1.65360702e-12 7.09611652e-02 5.56086631e-02 9.18688991e-02 6.10346961e-02 2.32919866e-03 7.18197378e-01 3.12837287e+03 -4.67500000e-04 -1.65360702e-12 7.09610821e-02 5.56085116e-02 9.18689955e-02 6.10348517e-02 2.32918125e-03 7.18197378e-01 3.12837287e+03 -4.67600000e-04 -1.65360702e-12 7.09609992e-02 5.56083606e-02 9.18690916e-02 6.10350069e-02 2.32916389e-03 7.18197378e-01 3.12837287e+03 -4.67700000e-04 -1.65360702e-12 7.09609165e-02 5.56082099e-02 9.18691875e-02 6.10351617e-02 2.32914656e-03 7.18197378e-01 3.12837287e+03 -4.67800000e-04 -1.65360702e-12 7.09608340e-02 5.56080596e-02 9.18692832e-02 6.10353161e-02 2.32912929e-03 7.18197378e-01 3.12837287e+03 -4.67900000e-04 -1.65360702e-12 7.09607517e-02 5.56079097e-02 9.18693786e-02 6.10354701e-02 2.32911206e-03 7.18197378e-01 3.12837287e+03 -4.68000000e-04 -1.65360702e-12 7.09606697e-02 5.56077602e-02 9.18694737e-02 6.10356237e-02 2.32909487e-03 7.18197378e-01 3.12837287e+03 -4.68100000e-04 -1.65360702e-12 7.09605878e-02 5.56076111e-02 9.18695686e-02 6.10357769e-02 2.32907772e-03 7.18197378e-01 3.12837287e+03 -4.68200000e-04 -1.65360702e-12 7.09605062e-02 5.56074623e-02 9.18696633e-02 6.10359297e-02 2.32906062e-03 7.18197378e-01 3.12837287e+03 -4.68300000e-04 -1.65360702e-12 7.09604247e-02 5.56073140e-02 9.18697578e-02 6.10360821e-02 2.32904356e-03 7.18197378e-01 3.12837287e+03 -4.68400000e-04 -1.65360702e-12 7.09603435e-02 5.56071660e-02 9.18698519e-02 6.10362342e-02 2.32902655e-03 7.18197378e-01 3.12837287e+03 -4.68500000e-04 -1.65360702e-12 7.09602625e-02 5.56070184e-02 9.18699459e-02 6.10363858e-02 2.32900958e-03 7.18197378e-01 3.12837287e+03 -4.68600000e-04 -1.65360702e-12 7.09601817e-02 5.56068711e-02 9.18700396e-02 6.10365371e-02 2.32899266e-03 7.18197378e-01 3.12837287e+03 -4.68700000e-04 -1.65360702e-12 7.09601011e-02 5.56067243e-02 9.18701331e-02 6.10366880e-02 2.32897577e-03 7.18197378e-01 3.12837287e+03 -4.68800000e-04 -1.65360702e-12 7.09600207e-02 5.56065778e-02 9.18702263e-02 6.10368385e-02 2.32895893e-03 7.18197378e-01 3.12837287e+03 -4.68900000e-04 -1.65360702e-12 7.09599405e-02 5.56064317e-02 9.18703193e-02 6.10369886e-02 2.32894213e-03 7.18197378e-01 3.12837287e+03 -4.69000000e-04 -1.65360702e-12 7.09598605e-02 5.56062859e-02 9.18704120e-02 6.10371383e-02 2.32892538e-03 7.18197378e-01 3.12839448e+03 -4.69100000e-04 -1.65360702e-12 7.09597807e-02 5.56061406e-02 9.18705046e-02 6.10372877e-02 2.32890867e-03 7.18197378e-01 3.12839448e+03 -4.69200000e-04 -1.65360702e-12 7.09597011e-02 5.56059956e-02 9.18705968e-02 6.10374366e-02 2.32889200e-03 7.18197378e-01 3.12839448e+03 -4.69300000e-04 -1.65360702e-12 7.09596217e-02 5.56058510e-02 9.18706889e-02 6.10375852e-02 2.32887537e-03 7.18197378e-01 3.12839448e+03 -4.69400000e-04 -1.65360702e-12 7.09595425e-02 5.56057067e-02 9.18707807e-02 6.10377334e-02 2.32885879e-03 7.18197378e-01 3.12839448e+03 -4.69500000e-04 -1.65360702e-12 7.09594636e-02 5.56055628e-02 9.18708723e-02 6.10378812e-02 2.32884225e-03 7.18197378e-01 3.12839448e+03 -4.69600000e-04 -1.65360702e-12 7.09593848e-02 5.56054193e-02 9.18709636e-02 6.10380287e-02 2.32882575e-03 7.18197378e-01 3.12839448e+03 -4.69700000e-04 -1.65360702e-12 7.09593062e-02 5.56052762e-02 9.18710547e-02 6.10381757e-02 2.32880929e-03 7.18197378e-01 3.12839448e+03 -4.69800000e-04 -1.65360702e-12 7.09592279e-02 5.56051334e-02 9.18711456e-02 6.10383224e-02 2.32879288e-03 7.18197378e-01 3.12839448e+03 -4.69900000e-04 -1.65360702e-12 7.09591497e-02 5.56049910e-02 9.18712362e-02 6.10384687e-02 2.32877651e-03 7.18197378e-01 3.12839448e+03 -4.70000000e-04 -1.65360702e-12 7.09590717e-02 5.56048489e-02 9.18713266e-02 6.10386147e-02 2.32876018e-03 7.18197378e-01 3.12839448e+03 -4.70100000e-04 -1.65360702e-12 7.09589939e-02 5.56047072e-02 9.18714168e-02 6.10387603e-02 2.32874389e-03 7.18197378e-01 3.12839448e+03 -4.70200000e-04 -1.65360702e-12 7.09589164e-02 5.56045659e-02 9.18715068e-02 6.10389055e-02 2.32872764e-03 7.18197378e-01 3.12839448e+03 -4.70300000e-04 -1.65360702e-12 7.09588390e-02 5.56044250e-02 9.18715965e-02 6.10390503e-02 2.32871143e-03 7.18197378e-01 3.12839448e+03 -4.70400000e-04 -1.65360702e-12 7.09587618e-02 5.56042844e-02 9.18716860e-02 6.10391947e-02 2.32869527e-03 7.18197378e-01 3.12839448e+03 -4.70500000e-04 -1.65360702e-12 7.09586848e-02 5.56041441e-02 9.18717752e-02 6.10393388e-02 2.32867915e-03 7.18197378e-01 3.12839448e+03 -4.70600000e-04 -1.65360702e-12 7.09586081e-02 5.56040042e-02 9.18718643e-02 6.10394825e-02 2.32866307e-03 7.18197378e-01 3.12839448e+03 -4.70700000e-04 -1.65360702e-12 7.09585315e-02 5.56038647e-02 9.18719531e-02 6.10396259e-02 2.32864702e-03 7.18197378e-01 3.12839448e+03 -4.70800000e-04 -1.65360702e-12 7.09584551e-02 5.56037255e-02 9.18720416e-02 6.10397689e-02 2.32863102e-03 7.18197378e-01 3.12839448e+03 -4.70900000e-04 -1.65360702e-12 7.09583789e-02 5.56035867e-02 9.18721300e-02 6.10399115e-02 2.32861507e-03 7.18197378e-01 3.12839448e+03 -4.71000000e-04 -1.65360702e-12 7.09583029e-02 5.56034483e-02 9.18722181e-02 6.10400538e-02 2.32859915e-03 7.18197378e-01 3.12839448e+03 -4.71100000e-04 -1.65360702e-12 7.09582271e-02 5.56033102e-02 9.18723060e-02 6.10401956e-02 2.32858327e-03 7.18197378e-01 3.12839448e+03 -4.71200000e-04 -1.65360702e-12 7.09581515e-02 5.56031724e-02 9.18723937e-02 6.10403372e-02 2.32856743e-03 7.18197378e-01 3.12839448e+03 -4.71300000e-04 -1.65360702e-12 7.09580760e-02 5.56030350e-02 9.18724811e-02 6.10404783e-02 2.32855164e-03 7.18197378e-01 3.12841484e+03 -4.71400000e-04 -1.65360702e-12 7.09580008e-02 5.56028980e-02 9.18725684e-02 6.10406191e-02 2.32853588e-03 7.18197378e-01 3.12841484e+03 -4.71500000e-04 -1.65360702e-12 7.09579258e-02 5.56027613e-02 9.18726554e-02 6.10407596e-02 2.32852017e-03 7.18197378e-01 3.12841484e+03 -4.71600000e-04 -1.65360702e-12 7.09578509e-02 5.56026249e-02 9.18727421e-02 6.10408997e-02 2.32850449e-03 7.18197378e-01 3.12841484e+03 -4.71700000e-04 -1.65360702e-12 7.09577763e-02 5.56024889e-02 9.18728287e-02 6.10410394e-02 2.32848885e-03 7.18197378e-01 3.12841484e+03 -4.71800000e-04 -1.65360702e-12 7.09577018e-02 5.56023533e-02 9.18729150e-02 6.10411788e-02 2.32847326e-03 7.18197378e-01 3.12841484e+03 -4.71900000e-04 -1.65360702e-12 7.09576275e-02 5.56022179e-02 9.18730012e-02 6.10413178e-02 2.32845770e-03 7.18197378e-01 3.12841484e+03 -4.72000000e-04 -1.65360702e-12 7.09575535e-02 5.56020830e-02 9.18730871e-02 6.10414565e-02 2.32844219e-03 7.18197378e-01 3.12841484e+03 -4.72100000e-04 -1.65360702e-12 7.09574796e-02 5.56019484e-02 9.18731727e-02 6.10415948e-02 2.32842671e-03 7.18197378e-01 3.12841484e+03 -4.72200000e-04 -1.65360702e-12 7.09574059e-02 5.56018141e-02 9.18732582e-02 6.10417327e-02 2.32841127e-03 7.18197378e-01 3.12841484e+03 -4.72300000e-04 -1.65360702e-12 7.09573324e-02 5.56016802e-02 9.18733434e-02 6.10418703e-02 2.32839588e-03 7.18197378e-01 3.12841484e+03 -4.72400000e-04 -1.65360702e-12 7.09572590e-02 5.56015466e-02 9.18734284e-02 6.10420076e-02 2.32838052e-03 7.18197378e-01 3.12841484e+03 -4.72500000e-04 -1.65360702e-12 7.09571859e-02 5.56014134e-02 9.18735132e-02 6.10421445e-02 2.32836520e-03 7.18197378e-01 3.12841484e+03 -4.72600000e-04 -1.65360702e-12 7.09571129e-02 5.56012804e-02 9.18735978e-02 6.10422810e-02 2.32834992e-03 7.18197378e-01 3.12841484e+03 -4.72700000e-04 -1.65360702e-12 7.09570402e-02 5.56011479e-02 9.18736822e-02 6.10424172e-02 2.32833468e-03 7.18197378e-01 3.12841484e+03 -4.72800000e-04 -1.65360702e-12 7.09569676e-02 5.56010157e-02 9.18737664e-02 6.10425530e-02 2.32831948e-03 7.18197378e-01 3.12841484e+03 -4.72900000e-04 -1.65360702e-12 7.09568952e-02 5.56008838e-02 9.18738503e-02 6.10426886e-02 2.32830432e-03 7.18197378e-01 3.12841484e+03 -4.73000000e-04 -1.65360702e-12 7.09568230e-02 5.56007522e-02 9.18739340e-02 6.10428237e-02 2.32828919e-03 7.18197378e-01 3.12841484e+03 -4.73100000e-04 -1.65360702e-12 7.09567510e-02 5.56006210e-02 9.18740175e-02 6.10429585e-02 2.32827411e-03 7.18197378e-01 3.12841484e+03 -4.73200000e-04 -1.65360702e-12 7.09566791e-02 5.56004901e-02 9.18741008e-02 6.10430930e-02 2.32825906e-03 7.18197378e-01 3.12841484e+03 -4.73300000e-04 -1.65360702e-12 7.09566075e-02 5.56003596e-02 9.18741839e-02 6.10432271e-02 2.32824405e-03 7.18197378e-01 3.12841484e+03 -4.73400000e-04 -1.65360702e-12 7.09565360e-02 5.56002294e-02 9.18742668e-02 6.10433609e-02 2.32822908e-03 7.18197378e-01 3.12841484e+03 -4.73500000e-04 -1.65360702e-12 7.09564647e-02 5.56000995e-02 9.18743494e-02 6.10434943e-02 2.32821415e-03 7.18197378e-01 3.12841484e+03 -4.73600000e-04 -1.65360702e-12 7.09563936e-02 5.55999700e-02 9.18744319e-02 6.10436274e-02 2.32819926e-03 7.18197378e-01 3.12843404e+03 -4.73700000e-04 -1.65360702e-12 7.09563227e-02 5.55998408e-02 9.18745141e-02 6.10437602e-02 2.32818441e-03 7.18197378e-01 3.12843404e+03 -4.73800000e-04 -1.65360702e-12 7.09562519e-02 5.55997119e-02 9.18745962e-02 6.10438926e-02 2.32816959e-03 7.18197378e-01 3.12843404e+03 -4.73900000e-04 -1.65360702e-12 7.09561814e-02 5.55995833e-02 9.18746780e-02 6.10440247e-02 2.32815481e-03 7.18197378e-01 3.12843404e+03 -4.74000000e-04 -1.65360702e-12 7.09561110e-02 5.55994551e-02 9.18747596e-02 6.10441564e-02 2.32814007e-03 7.18197378e-01 3.12843404e+03 -4.74100000e-04 -1.65360702e-12 7.09560408e-02 5.55993272e-02 9.18748410e-02 6.10442878e-02 2.32812536e-03 7.18197378e-01 3.12843404e+03 -4.74200000e-04 -1.65360702e-12 7.09559707e-02 5.55991997e-02 9.18749222e-02 6.10444189e-02 2.32811070e-03 7.18197378e-01 3.12843404e+03 -4.74300000e-04 -1.65360702e-12 7.09559009e-02 5.55990724e-02 9.18750031e-02 6.10445496e-02 2.32809607e-03 7.18197378e-01 3.12843404e+03 -4.74400000e-04 -1.65360702e-12 7.09558312e-02 5.55989455e-02 9.18750839e-02 6.10446800e-02 2.32808148e-03 7.18197378e-01 3.12843404e+03 -4.74500000e-04 -1.65360702e-12 7.09557617e-02 5.55988189e-02 9.18751645e-02 6.10448101e-02 2.32806692e-03 7.18197378e-01 3.12843404e+03 -4.74600000e-04 -1.65360702e-12 7.09556924e-02 5.55986927e-02 9.18752449e-02 6.10449398e-02 2.32805241e-03 7.18197378e-01 3.12843404e+03 -4.74700000e-04 -1.65360702e-12 7.09556233e-02 5.55985667e-02 9.18753250e-02 6.10450692e-02 2.32803793e-03 7.18197378e-01 3.12843404e+03 -4.74800000e-04 -1.65360702e-12 7.09555543e-02 5.55984411e-02 9.18754050e-02 6.10451983e-02 2.32802348e-03 7.18197378e-01 3.12843404e+03 -4.74900000e-04 -1.65360702e-12 7.09554855e-02 5.55983158e-02 9.18754847e-02 6.10453270e-02 2.32800908e-03 7.18197378e-01 3.12843404e+03 -4.75000000e-04 -1.65360702e-12 7.09554169e-02 5.55981908e-02 9.18755643e-02 6.10454554e-02 2.32799471e-03 7.18197378e-01 3.12843404e+03 -4.75100000e-04 -1.65360702e-12 7.09553485e-02 5.55980662e-02 9.18756436e-02 6.10455835e-02 2.32798038e-03 7.18197378e-01 3.12843404e+03 -4.75200000e-04 -1.65360702e-12 7.09552803e-02 5.55979418e-02 9.18757227e-02 6.10457113e-02 2.32796608e-03 7.18197378e-01 3.12843404e+03 -4.75300000e-04 -1.65360702e-12 7.09552122e-02 5.55978178e-02 9.18758017e-02 6.10458387e-02 2.32795182e-03 7.18197378e-01 3.12843404e+03 -4.75400000e-04 -1.65360702e-12 7.09551443e-02 5.55976941e-02 9.18758804e-02 6.10459658e-02 2.32793760e-03 7.18197378e-01 3.12843404e+03 -4.75500000e-04 -1.65360702e-12 7.09550765e-02 5.55975707e-02 9.18759589e-02 6.10460926e-02 2.32792341e-03 7.18197378e-01 3.12843404e+03 -4.75600000e-04 -1.65360702e-12 7.09550090e-02 5.55974476e-02 9.18760373e-02 6.10462190e-02 2.32790926e-03 7.18197378e-01 3.12843404e+03 -4.75700000e-04 -1.65360702e-12 7.09549416e-02 5.55973249e-02 9.18761154e-02 6.10463452e-02 2.32789515e-03 7.18197378e-01 3.12843404e+03 -4.75800000e-04 -1.65360702e-12 7.09548744e-02 5.55972024e-02 9.18761933e-02 6.10464710e-02 2.32788107e-03 7.18197378e-01 3.12843404e+03 -4.75900000e-04 -1.65360702e-12 7.09548073e-02 5.55970803e-02 9.18762711e-02 6.10465964e-02 2.32786703e-03 7.18197378e-01 3.12843404e+03 -4.76000000e-04 -1.65360702e-12 7.09547405e-02 5.55969585e-02 9.18763486e-02 6.10467216e-02 2.32785302e-03 7.18197378e-01 3.12845213e+03 -4.76100000e-04 -1.65360702e-12 7.09546737e-02 5.55968370e-02 9.18764259e-02 6.10468465e-02 2.32783905e-03 7.18197378e-01 3.12845213e+03 -4.76200000e-04 -1.65360702e-12 7.09546072e-02 5.55967158e-02 9.18765031e-02 6.10469710e-02 2.32782512e-03 7.18197378e-01 3.12845213e+03 -4.76300000e-04 -1.65360702e-12 7.09545409e-02 5.55965949e-02 9.18765800e-02 6.10470952e-02 2.32781122e-03 7.18197378e-01 3.12845213e+03 -4.76400000e-04 -1.65360702e-12 7.09544747e-02 5.55964743e-02 9.18766568e-02 6.10472191e-02 2.32779736e-03 7.18197378e-01 3.12845213e+03 -4.76500000e-04 -1.65360702e-12 7.09544086e-02 5.55963540e-02 9.18767333e-02 6.10473427e-02 2.32778353e-03 7.18197378e-01 3.12845213e+03 -4.76600000e-04 -1.65360702e-12 7.09543428e-02 5.55962341e-02 9.18768096e-02 6.10474659e-02 2.32776974e-03 7.18197378e-01 3.12845213e+03 -4.76700000e-04 -1.65360702e-12 7.09542771e-02 5.55961144e-02 9.18768858e-02 6.10475889e-02 2.32775598e-03 7.18197378e-01 3.12845213e+03 -4.76800000e-04 -1.65360702e-12 7.09542116e-02 5.55959951e-02 9.18769618e-02 6.10477115e-02 2.32774226e-03 7.18197378e-01 3.12845213e+03 -4.76900000e-04 -1.65360702e-12 7.09541462e-02 5.55958760e-02 9.18770375e-02 6.10478338e-02 2.32772857e-03 7.18197378e-01 3.12845213e+03 -4.77000000e-04 -1.65360702e-12 7.09540811e-02 5.55957573e-02 9.18771131e-02 6.10479558e-02 2.32771492e-03 7.18197378e-01 3.12845213e+03 -4.77100000e-04 -1.65360702e-12 7.09540160e-02 5.55956388e-02 9.18771885e-02 6.10480775e-02 2.32770130e-03 7.18197378e-01 3.12845213e+03 -4.77200000e-04 -1.65360702e-12 7.09539512e-02 5.55955207e-02 9.18772637e-02 6.10481989e-02 2.32768772e-03 7.18197378e-01 3.12845213e+03 -4.77300000e-04 -1.65360702e-12 7.09538865e-02 5.55954029e-02 9.18773387e-02 6.10483199e-02 2.32767418e-03 7.18197378e-01 3.12845213e+03 -4.77400000e-04 -1.65360702e-12 7.09538220e-02 5.55952853e-02 9.18774135e-02 6.10484407e-02 2.32766066e-03 7.18197378e-01 3.12845213e+03 -4.77500000e-04 -1.65360702e-12 7.09537576e-02 5.55951681e-02 9.18774881e-02 6.10485611e-02 2.32764718e-03 7.18197378e-01 3.12845213e+03 -4.77600000e-04 -1.65360702e-12 7.09536934e-02 5.55950512e-02 9.18775625e-02 6.10486813e-02 2.32763374e-03 7.18197378e-01 3.12845213e+03 -4.77700000e-04 -1.65360702e-12 7.09536294e-02 5.55949346e-02 9.18776367e-02 6.10488011e-02 2.32762033e-03 7.18197378e-01 3.12845213e+03 -4.77800000e-04 -1.65360702e-12 7.09535656e-02 5.55948182e-02 9.18777108e-02 6.10489206e-02 2.32760696e-03 7.18197378e-01 3.12845213e+03 -4.77900000e-04 -1.65360702e-12 7.09535019e-02 5.55947022e-02 9.18777846e-02 6.10490399e-02 2.32759362e-03 7.18197378e-01 3.12845213e+03 -4.78000000e-04 -1.65360702e-12 7.09534383e-02 5.55945865e-02 9.18778583e-02 6.10491588e-02 2.32758031e-03 7.18197378e-01 3.12845213e+03 -4.78100000e-04 -1.65360702e-12 7.09533749e-02 5.55944710e-02 9.18779318e-02 6.10492774e-02 2.32756704e-03 7.18197378e-01 3.12845213e+03 -4.78200000e-04 -1.65360702e-12 7.09533117e-02 5.55943559e-02 9.18780050e-02 6.10493957e-02 2.32755380e-03 7.18197378e-01 3.12845213e+03 -4.78300000e-04 -1.65360702e-12 7.09532487e-02 5.55942410e-02 9.18780781e-02 6.10495137e-02 2.32754059e-03 7.18197378e-01 3.12846918e+03 -4.78400000e-04 -1.65360702e-12 7.09531858e-02 5.55941265e-02 9.18781510e-02 6.10496314e-02 2.32752742e-03 7.18197378e-01 3.12846918e+03 -4.78500000e-04 -1.65360702e-12 7.09531231e-02 5.55940122e-02 9.18782238e-02 6.10497488e-02 2.32751428e-03 7.18197378e-01 3.12846918e+03 -4.78600000e-04 -1.65360702e-12 7.09530605e-02 5.55938982e-02 9.18782963e-02 6.10498659e-02 2.32750118e-03 7.18197378e-01 3.12846918e+03 -4.78700000e-04 -1.65360702e-12 7.09529981e-02 5.55937845e-02 9.18783687e-02 6.10499827e-02 2.32748811e-03 7.18197378e-01 3.12846918e+03 -4.78800000e-04 -1.65360702e-12 7.09529358e-02 5.55936712e-02 9.18784408e-02 6.10500992e-02 2.32747507e-03 7.18197378e-01 3.12846918e+03 -4.78900000e-04 -1.65360702e-12 7.09528738e-02 5.55935581e-02 9.18785128e-02 6.10502155e-02 2.32746207e-03 7.18197378e-01 3.12846918e+03 -4.79000000e-04 -1.65360702e-12 7.09528118e-02 5.55934452e-02 9.18785846e-02 6.10503314e-02 2.32744910e-03 7.18197378e-01 3.12846918e+03 -4.79100000e-04 -1.65360702e-12 7.09527501e-02 5.55933327e-02 9.18786562e-02 6.10504470e-02 2.32743616e-03 7.18197378e-01 3.12846918e+03 -4.79200000e-04 -1.65360702e-12 7.09526884e-02 5.55932205e-02 9.18787277e-02 6.10505623e-02 2.32742326e-03 7.18197378e-01 3.12846918e+03 -4.79300000e-04 -1.65360702e-12 7.09526270e-02 5.55931085e-02 9.18787989e-02 6.10506773e-02 2.32741039e-03 7.18197378e-01 3.12846918e+03 -4.79400000e-04 -1.65360702e-12 7.09525657e-02 5.55929969e-02 9.18788700e-02 6.10507921e-02 2.32739755e-03 7.18197378e-01 3.12846918e+03 -4.79500000e-04 -1.65360702e-12 7.09525045e-02 5.55928855e-02 9.18789409e-02 6.10509065e-02 2.32738474e-03 7.18197378e-01 3.12846918e+03 -4.79600000e-04 -1.65360702e-12 7.09524436e-02 5.55927744e-02 9.18790116e-02 6.10510206e-02 2.32737197e-03 7.18197378e-01 3.12846918e+03 -4.79700000e-04 -1.65360702e-12 7.09523827e-02 5.55926636e-02 9.18790821e-02 6.10511345e-02 2.32735923e-03 7.18197378e-01 3.12846918e+03 -4.79800000e-04 -1.65360702e-12 7.09523220e-02 5.55925531e-02 9.18791524e-02 6.10512481e-02 2.32734652e-03 7.18197378e-01 3.12846918e+03 -4.79900000e-04 -1.65360702e-12 7.09522615e-02 5.55924429e-02 9.18792226e-02 6.10513613e-02 2.32733385e-03 7.18197378e-01 3.12846918e+03 -4.80000000e-04 -1.65360702e-12 7.09522012e-02 5.55923329e-02 9.18792926e-02 6.10514743e-02 2.32732121e-03 7.18197378e-01 3.12846918e+03 -4.80100000e-04 -1.65360702e-12 7.09521410e-02 5.55922232e-02 9.18793624e-02 6.10515870e-02 2.32730860e-03 7.18197378e-01 3.12846918e+03 -4.80200000e-04 -1.65360702e-12 7.09520809e-02 5.55921138e-02 9.18794320e-02 6.10516994e-02 2.32729602e-03 7.18197378e-01 3.12846918e+03 -4.80300000e-04 -1.65360702e-12 7.09520210e-02 5.55920047e-02 9.18795015e-02 6.10518115e-02 2.32728347e-03 7.18197378e-01 3.12846918e+03 -4.80400000e-04 -1.65360702e-12 7.09519612e-02 5.55918959e-02 9.18795707e-02 6.10519233e-02 2.32727096e-03 7.18197378e-01 3.12846918e+03 -4.80500000e-04 -1.65360702e-12 7.09519016e-02 5.55917873e-02 9.18796398e-02 6.10520349e-02 2.32725848e-03 7.18197378e-01 3.12846918e+03 -4.80600000e-04 -1.65360702e-12 7.09518422e-02 5.55916790e-02 9.18797087e-02 6.10521462e-02 2.32724603e-03 7.18197378e-01 3.12848525e+03 -4.80700000e-04 -1.65360702e-12 7.09517829e-02 5.55915710e-02 9.18797775e-02 6.10522571e-02 2.32723361e-03 7.18197378e-01 3.12848525e+03 -4.80800000e-04 -1.65360702e-12 7.09517238e-02 5.55914633e-02 9.18798460e-02 6.10523678e-02 2.32722122e-03 7.18197378e-01 3.12848525e+03 -4.80900000e-04 -1.65360702e-12 7.09516648e-02 5.55913558e-02 9.18799144e-02 6.10524782e-02 2.32720887e-03 7.18197378e-01 3.12848525e+03 -4.81000000e-04 -1.65360702e-12 7.09516059e-02 5.55912487e-02 9.18799826e-02 6.10525884e-02 2.32719655e-03 7.18197378e-01 3.12848525e+03 -4.81100000e-04 -1.65360702e-12 7.09515472e-02 5.55911418e-02 9.18800507e-02 6.10526982e-02 2.32718426e-03 7.18197378e-01 3.12848525e+03 -4.81200000e-04 -1.65360702e-12 7.09514887e-02 5.55910351e-02 9.18801185e-02 6.10528078e-02 2.32717200e-03 7.18197378e-01 3.12848525e+03 -4.81300000e-04 -1.65360702e-12 7.09514303e-02 5.55909288e-02 9.18801862e-02 6.10529170e-02 2.32715977e-03 7.18197378e-01 3.12848525e+03 -4.81400000e-04 -1.65360702e-12 7.09513721e-02 5.55908227e-02 9.18802538e-02 6.10530260e-02 2.32714757e-03 7.18197378e-01 3.12848525e+03 -4.81500000e-04 -1.65360702e-12 7.09513140e-02 5.55907169e-02 9.18803211e-02 6.10531348e-02 2.32713540e-03 7.18197378e-01 3.12848525e+03 -4.81600000e-04 -1.65360702e-12 7.09512560e-02 5.55906113e-02 9.18803883e-02 6.10532432e-02 2.32712327e-03 7.18197378e-01 3.12848525e+03 -4.81700000e-04 -1.65360702e-12 7.09511983e-02 5.55905061e-02 9.18804553e-02 6.10533514e-02 2.32711116e-03 7.18197378e-01 3.12848525e+03 -4.81800000e-04 -1.65360702e-12 7.09511406e-02 5.55904011e-02 9.18805221e-02 6.10534593e-02 2.32709909e-03 7.18197378e-01 3.12848525e+03 -4.81900000e-04 -1.65360702e-12 7.09510831e-02 5.55902963e-02 9.18805888e-02 6.10535669e-02 2.32708705e-03 7.18197378e-01 3.12848525e+03 -4.82000000e-04 -1.65360702e-12 7.09510258e-02 5.55901919e-02 9.18806553e-02 6.10536742e-02 2.32707504e-03 7.18197378e-01 3.12848525e+03 -4.82100000e-04 -1.65360702e-12 7.09509685e-02 5.55900877e-02 9.18807216e-02 6.10537813e-02 2.32706306e-03 7.18197378e-01 3.12848525e+03 -4.82200000e-04 -1.65360702e-12 7.09509115e-02 5.55899837e-02 9.18807877e-02 6.10538881e-02 2.32705111e-03 7.18197378e-01 3.12848525e+03 -4.82300000e-04 -1.65360702e-12 7.09508546e-02 5.55898801e-02 9.18808537e-02 6.10539946e-02 2.32703919e-03 7.18197378e-01 3.12848525e+03 -4.82400000e-04 -1.65360702e-12 7.09507978e-02 5.55897767e-02 9.18809195e-02 6.10541009e-02 2.32702730e-03 7.18197378e-01 3.12848525e+03 -4.82500000e-04 -1.65360702e-12 7.09507412e-02 5.55896735e-02 9.18809852e-02 6.10542068e-02 2.32701544e-03 7.18197378e-01 3.12848525e+03 -4.82600000e-04 -1.65360702e-12 7.09506847e-02 5.55895707e-02 9.18810506e-02 6.10543125e-02 2.32700361e-03 7.18197378e-01 3.12848525e+03 -4.82700000e-04 -1.65360702e-12 7.09506284e-02 5.55894680e-02 9.18811159e-02 6.10544180e-02 2.32699181e-03 7.18197378e-01 3.12848525e+03 -4.82800000e-04 -1.65360702e-12 7.09505722e-02 5.55893657e-02 9.18811811e-02 6.10545231e-02 2.32698005e-03 7.18197378e-01 3.12848525e+03 -4.82900000e-04 -1.65360702e-12 7.09505161e-02 5.55892636e-02 9.18812461e-02 6.10546280e-02 2.32696831e-03 7.18197378e-01 3.12850040e+03 -4.83000000e-04 -1.65360702e-12 7.09504602e-02 5.55891618e-02 9.18813109e-02 6.10547327e-02 2.32695660e-03 7.18197378e-01 3.12850040e+03 -4.83100000e-04 -1.65360702e-12 7.09504045e-02 5.55890602e-02 9.18813755e-02 6.10548370e-02 2.32694492e-03 7.18197378e-01 3.12850040e+03 -4.83200000e-04 -1.65360702e-12 7.09503489e-02 5.55889589e-02 9.18814400e-02 6.10549411e-02 2.32693328e-03 7.18197378e-01 3.12850040e+03 -4.83300000e-04 -1.65360702e-12 7.09502934e-02 5.55888579e-02 9.18815043e-02 6.10550450e-02 2.32692166e-03 7.18197378e-01 3.12850040e+03 -4.83400000e-04 -1.65360702e-12 7.09502381e-02 5.55887571e-02 9.18815684e-02 6.10551485e-02 2.32691007e-03 7.18197378e-01 3.12850040e+03 -4.83500000e-04 -1.65360702e-12 7.09501829e-02 5.55886566e-02 9.18816324e-02 6.10552518e-02 2.32689851e-03 7.18197378e-01 3.12850040e+03 -4.83600000e-04 -1.65360702e-12 7.09501278e-02 5.55885563e-02 9.18816962e-02 6.10553548e-02 2.32688698e-03 7.18197378e-01 3.12850040e+03 -4.83700000e-04 -1.65360702e-12 7.09500729e-02 5.55884563e-02 9.18817599e-02 6.10554576e-02 2.32687548e-03 7.18197378e-01 3.12850040e+03 -4.83800000e-04 -1.65360702e-12 7.09500181e-02 5.55883565e-02 9.18818234e-02 6.10555601e-02 2.32686401e-03 7.18197378e-01 3.12850040e+03 -4.83900000e-04 -1.65360702e-12 7.09499635e-02 5.55882570e-02 9.18818867e-02 6.10556624e-02 2.32685257e-03 7.18197378e-01 3.12850040e+03 -4.84000000e-04 -1.65360702e-12 7.09499090e-02 5.55881578e-02 9.18819499e-02 6.10557643e-02 2.32684116e-03 7.18197378e-01 3.12850040e+03 -4.84100000e-04 -1.65360702e-12 7.09498547e-02 5.55880588e-02 9.18820129e-02 6.10558661e-02 2.32682978e-03 7.18197378e-01 3.12850040e+03 -4.84200000e-04 -1.65360702e-12 7.09498004e-02 5.55879600e-02 9.18820757e-02 6.10559675e-02 2.32681842e-03 7.18197378e-01 3.12850040e+03 -4.84300000e-04 -1.65360702e-12 7.09497464e-02 5.55878615e-02 9.18821384e-02 6.10560687e-02 2.32680710e-03 7.18197378e-01 3.12850040e+03 -4.84400000e-04 -1.65360702e-12 7.09496924e-02 5.55877633e-02 9.18822009e-02 6.10561697e-02 2.32679580e-03 7.18197378e-01 3.12850040e+03 -4.84500000e-04 -1.65360702e-12 7.09496386e-02 5.55876653e-02 9.18822633e-02 6.10562704e-02 2.32678454e-03 7.18197378e-01 3.12850040e+03 -4.84600000e-04 -1.65360702e-12 7.09495850e-02 5.55875676e-02 9.18823255e-02 6.10563708e-02 2.32677330e-03 7.18197378e-01 3.12850040e+03 -4.84700000e-04 -1.65360702e-12 7.09495315e-02 5.55874701e-02 9.18823876e-02 6.10564710e-02 2.32676209e-03 7.18197378e-01 3.12850040e+03 -4.84800000e-04 -1.65360702e-12 7.09494781e-02 5.55873728e-02 9.18824494e-02 6.10565709e-02 2.32675091e-03 7.18197378e-01 3.12850040e+03 -4.84900000e-04 -1.65360702e-12 7.09494248e-02 5.55872759e-02 9.18825112e-02 6.10566705e-02 2.32673976e-03 7.18197378e-01 3.12850040e+03 -4.85000000e-04 -1.65360702e-12 7.09493717e-02 5.55871791e-02 9.18825727e-02 6.10567699e-02 2.32672863e-03 7.18197378e-01 3.12850040e+03 -4.85100000e-04 -1.65360702e-12 7.09493187e-02 5.55870826e-02 9.18826342e-02 6.10568691e-02 2.32671754e-03 7.18197378e-01 3.12850040e+03 -4.85200000e-04 -1.65360702e-12 7.09492659e-02 5.55869864e-02 9.18826954e-02 6.10569680e-02 2.32670647e-03 7.18197378e-01 3.12851468e+03 -4.85300000e-04 -1.65360702e-12 7.09492132e-02 5.55868904e-02 9.18827565e-02 6.10570666e-02 2.32669544e-03 7.18197378e-01 3.12851468e+03 -4.85400000e-04 -1.65360702e-12 7.09491606e-02 5.55867946e-02 9.18828175e-02 6.10571650e-02 2.32668443e-03 7.18197378e-01 3.12851468e+03 -4.85500000e-04 -1.65360702e-12 7.09491082e-02 5.55866991e-02 9.18828782e-02 6.10572632e-02 2.32667344e-03 7.18197378e-01 3.12851468e+03 -4.85600000e-04 -1.65360702e-12 7.09490559e-02 5.55866039e-02 9.18829389e-02 6.10573610e-02 2.32666249e-03 7.18197378e-01 3.12851468e+03 -4.85700000e-04 -1.65360702e-12 7.09490037e-02 5.55865088e-02 9.18829994e-02 6.10574587e-02 2.32665156e-03 7.18197378e-01 3.12851468e+03 -4.85800000e-04 -1.65360702e-12 7.09489517e-02 5.55864141e-02 9.18830597e-02 6.10575561e-02 2.32664067e-03 7.18197378e-01 3.12851468e+03 -4.85900000e-04 -1.65360702e-12 7.09488998e-02 5.55863195e-02 9.18831198e-02 6.10576532e-02 2.32662980e-03 7.18197378e-01 3.12851468e+03 -4.86000000e-04 -1.65360702e-12 7.09488480e-02 5.55862252e-02 9.18831799e-02 6.10577501e-02 2.32661896e-03 7.18197378e-01 3.12851468e+03 -4.86100000e-04 -1.65360702e-12 7.09487964e-02 5.55861312e-02 9.18832397e-02 6.10578467e-02 2.32660814e-03 7.18197378e-01 3.12851468e+03 -4.86200000e-04 -1.65360702e-12 7.09487449e-02 5.55860374e-02 9.18832994e-02 6.10579431e-02 2.32659735e-03 7.18197378e-01 3.12851468e+03 -4.86300000e-04 -1.65360702e-12 7.09486935e-02 5.55859438e-02 9.18833590e-02 6.10580393e-02 2.32658660e-03 7.18197378e-01 3.12851468e+03 -4.86400000e-04 -1.65360702e-12 7.09486423e-02 5.55858505e-02 9.18834184e-02 6.10581352e-02 2.32657586e-03 7.18197378e-01 3.12851468e+03 -4.86500000e-04 -1.65360702e-12 7.09485911e-02 5.55857574e-02 9.18834776e-02 6.10582309e-02 2.32656516e-03 7.18197378e-01 3.12851468e+03 -4.86600000e-04 -1.65360702e-12 7.09485402e-02 5.55856645e-02 9.18835367e-02 6.10583263e-02 2.32655448e-03 7.18197378e-01 3.12851468e+03 -4.86700000e-04 -1.65360702e-12 7.09484893e-02 5.55855719e-02 9.18835957e-02 6.10584214e-02 2.32654383e-03 7.18197378e-01 3.12851468e+03 -4.86800000e-04 -1.65360702e-12 7.09484386e-02 5.55854795e-02 9.18836545e-02 6.10585164e-02 2.32653321e-03 7.18197378e-01 3.12851468e+03 -4.86900000e-04 -1.65360702e-12 7.09483880e-02 5.55853874e-02 9.18837131e-02 6.10586110e-02 2.32652262e-03 7.18197378e-01 3.12851468e+03 -4.87000000e-04 -1.65360702e-12 7.09483375e-02 5.55852955e-02 9.18837716e-02 6.10587055e-02 2.32651205e-03 7.18197378e-01 3.12851468e+03 -4.87100000e-04 -1.65360702e-12 7.09482872e-02 5.55852038e-02 9.18838300e-02 6.10587997e-02 2.32650151e-03 7.18197378e-01 3.12851468e+03 -4.87200000e-04 -1.65360702e-12 7.09482370e-02 5.55851123e-02 9.18838882e-02 6.10588936e-02 2.32649099e-03 7.18197378e-01 3.12851468e+03 -4.87300000e-04 -1.65360702e-12 7.09481869e-02 5.55850211e-02 9.18839462e-02 6.10589874e-02 2.32648051e-03 7.18197378e-01 3.12851468e+03 -4.87400000e-04 -1.65360702e-12 7.09481370e-02 5.55849302e-02 9.18840041e-02 6.10590808e-02 2.32647005e-03 7.18197378e-01 3.12851468e+03 -4.87500000e-04 -1.65360702e-12 7.09480872e-02 5.55848394e-02 9.18840619e-02 6.10591741e-02 2.32645961e-03 7.18197378e-01 3.12852814e+03 -4.87600000e-04 -1.65360702e-12 7.09480375e-02 5.55847489e-02 9.18841195e-02 6.10592671e-02 2.32644921e-03 7.18197378e-01 3.12852814e+03 -4.87700000e-04 -1.65360702e-12 7.09479879e-02 5.55846587e-02 9.18841769e-02 6.10593598e-02 2.32643883e-03 7.18197378e-01 3.12852814e+03 -4.87800000e-04 -1.65360702e-12 7.09479385e-02 5.55845686e-02 9.18842342e-02 6.10594524e-02 2.32642847e-03 7.18197378e-01 3.12852814e+03 -4.87900000e-04 -1.65360702e-12 7.09478892e-02 5.55844788e-02 9.18842914e-02 6.10595447e-02 2.32641815e-03 7.18197378e-01 3.12852814e+03 -4.88000000e-04 -1.65360702e-12 7.09478400e-02 5.55843892e-02 9.18843484e-02 6.10596367e-02 2.32640785e-03 7.18197378e-01 3.12852814e+03 -4.88100000e-04 -1.65360702e-12 7.09477909e-02 5.55842999e-02 9.18844053e-02 6.10597285e-02 2.32639757e-03 7.18197378e-01 3.12852814e+03 -4.88200000e-04 -1.65360702e-12 7.09477420e-02 5.55842107e-02 9.18844620e-02 6.10598201e-02 2.32638732e-03 7.18197378e-01 3.12852814e+03 -4.88300000e-04 -1.65360702e-12 7.09476932e-02 5.55841218e-02 9.18845186e-02 6.10599115e-02 2.32637710e-03 7.18197378e-01 3.12852814e+03 -4.88400000e-04 -1.65360702e-12 7.09476445e-02 5.55840332e-02 9.18845750e-02 6.10600026e-02 2.32636691e-03 7.18197378e-01 3.12852814e+03 -4.88500000e-04 -1.65360702e-12 7.09475959e-02 5.55839447e-02 9.18846313e-02 6.10600935e-02 2.32635674e-03 7.18197378e-01 3.12852814e+03 -4.88600000e-04 -1.65360702e-12 7.09475475e-02 5.55838565e-02 9.18846874e-02 6.10601841e-02 2.32634659e-03 7.18197378e-01 3.12852814e+03 -4.88700000e-04 -1.65360702e-12 7.09474992e-02 5.55837685e-02 9.18847435e-02 6.10602745e-02 2.32633648e-03 7.18197378e-01 3.12852814e+03 -4.88800000e-04 -1.65360702e-12 7.09474510e-02 5.55836807e-02 9.18847993e-02 6.10603647e-02 2.32632638e-03 7.18197378e-01 3.12852814e+03 -4.88900000e-04 -1.65360702e-12 7.09474029e-02 5.55835932e-02 9.18848550e-02 6.10604547e-02 2.32631632e-03 7.18197378e-01 3.12852814e+03 -4.89000000e-04 -1.65360702e-12 7.09473550e-02 5.55835059e-02 9.18849106e-02 6.10605444e-02 2.32630628e-03 7.18197378e-01 3.12852814e+03 -4.89100000e-04 -1.65360702e-12 7.09473072e-02 5.55834188e-02 9.18849660e-02 6.10606339e-02 2.32629626e-03 7.18197378e-01 3.12852814e+03 -4.89200000e-04 -1.65360702e-12 7.09472595e-02 5.55833319e-02 9.18850213e-02 6.10607232e-02 2.32628628e-03 7.18197378e-01 3.12852814e+03 -4.89300000e-04 -1.65360702e-12 7.09472119e-02 5.55832453e-02 9.18850765e-02 6.10608122e-02 2.32627631e-03 7.18197378e-01 3.12852814e+03 -4.89400000e-04 -1.65360702e-12 7.09471644e-02 5.55831588e-02 9.18851315e-02 6.10609010e-02 2.32626637e-03 7.18197378e-01 3.12852814e+03 -4.89500000e-04 -1.65360702e-12 7.09471171e-02 5.55830726e-02 9.18851863e-02 6.10609896e-02 2.32625646e-03 7.18197378e-01 3.12852814e+03 -4.89600000e-04 -1.65360702e-12 7.09470699e-02 5.55829866e-02 9.18852411e-02 6.10610780e-02 2.32624657e-03 7.18197378e-01 3.12852814e+03 -4.89700000e-04 -1.65360702e-12 7.09470228e-02 5.55829009e-02 9.18852957e-02 6.10611661e-02 2.32623671e-03 7.18197378e-01 3.12852814e+03 -4.89800000e-04 -1.65360702e-12 7.09469758e-02 5.55828153e-02 9.18853501e-02 6.10612540e-02 2.32622688e-03 7.18197378e-01 3.12854082e+03 -4.89900000e-04 -1.65360702e-12 7.09469290e-02 5.55827300e-02 9.18854044e-02 6.10613417e-02 2.32621706e-03 7.18197378e-01 3.12854082e+03 -4.90000000e-04 -1.65360702e-12 7.09468823e-02 5.55826449e-02 9.18854586e-02 6.10614291e-02 2.32620728e-03 7.18197378e-01 3.12854082e+03 -4.90100000e-04 -1.65360702e-12 7.09468357e-02 5.55825600e-02 9.18855126e-02 6.10615164e-02 2.32619752e-03 7.18197378e-01 3.12854082e+03 -4.90200000e-04 -1.65360702e-12 7.09467892e-02 5.55824753e-02 9.18855665e-02 6.10616034e-02 2.32618778e-03 7.18197378e-01 3.12854082e+03 -4.90300000e-04 -1.65360702e-12 7.09467428e-02 5.55823909e-02 9.18856203e-02 6.10616902e-02 2.32617807e-03 7.18197378e-01 3.12854082e+03 -4.90400000e-04 -1.65360702e-12 7.09466965e-02 5.55823066e-02 9.18856739e-02 6.10617767e-02 2.32616838e-03 7.18197378e-01 3.12854082e+03 -4.90500000e-04 -1.65360702e-12 7.09466504e-02 5.55822226e-02 9.18857274e-02 6.10618631e-02 2.32615872e-03 7.18197378e-01 3.12854082e+03 -4.90600000e-04 -1.65360702e-12 7.09466044e-02 5.55821388e-02 9.18857807e-02 6.10619492e-02 2.32614908e-03 7.18197378e-01 3.12854082e+03 -4.90700000e-04 -1.65360702e-12 7.09465585e-02 5.55820552e-02 9.18858339e-02 6.10620351e-02 2.32613947e-03 7.18197378e-01 3.12854082e+03 -4.90800000e-04 -1.65360702e-12 7.09465127e-02 5.55819718e-02 9.18858870e-02 6.10621208e-02 2.32612988e-03 7.18197378e-01 3.12854082e+03 -4.90900000e-04 -1.65360702e-12 7.09464670e-02 5.55818886e-02 9.18859399e-02 6.10622062e-02 2.32612032e-03 7.18197378e-01 3.12854082e+03 -4.91000000e-04 -1.65360702e-12 7.09464215e-02 5.55818057e-02 9.18859927e-02 6.10622915e-02 2.32611078e-03 7.18197378e-01 3.12854082e+03 -4.91100000e-04 -1.65360702e-12 7.09463761e-02 5.55817229e-02 9.18860454e-02 6.10623765e-02 2.32610127e-03 7.18197378e-01 3.12854082e+03 -4.91200000e-04 -1.65360702e-12 7.09463307e-02 5.55816404e-02 9.18860979e-02 6.10624613e-02 2.32609178e-03 7.18197378e-01 3.12854082e+03 -4.91300000e-04 -1.65360702e-12 7.09462855e-02 5.55815581e-02 9.18861503e-02 6.10625459e-02 2.32608231e-03 7.18197378e-01 3.12854082e+03 -4.91400000e-04 -1.65360702e-12 7.09462405e-02 5.55814760e-02 9.18862026e-02 6.10626303e-02 2.32607287e-03 7.18197378e-01 3.12854082e+03 -4.91500000e-04 -1.65360702e-12 7.09461955e-02 5.55813941e-02 9.18862547e-02 6.10627145e-02 2.32606345e-03 7.18197378e-01 3.12854082e+03 -4.91600000e-04 -1.65360702e-12 7.09461506e-02 5.55813124e-02 9.18863067e-02 6.10627984e-02 2.32605406e-03 7.18197378e-01 3.12854082e+03 -4.91700000e-04 -1.65360702e-12 7.09461059e-02 5.55812309e-02 9.18863585e-02 6.10628821e-02 2.32604469e-03 7.18197378e-01 3.12854082e+03 -4.91800000e-04 -1.65360702e-12 7.09460613e-02 5.55811496e-02 9.18864103e-02 6.10629656e-02 2.32603534e-03 7.18197378e-01 3.12854082e+03 -4.91900000e-04 -1.65360702e-12 7.09460168e-02 5.55810686e-02 9.18864619e-02 6.10630489e-02 2.32602602e-03 7.18197378e-01 3.12854082e+03 -4.92000000e-04 -1.65360702e-12 7.09459724e-02 5.55809877e-02 9.18865133e-02 6.10631320e-02 2.32601673e-03 7.18197378e-01 3.12854082e+03 -4.92100000e-04 -1.65360702e-12 7.09459281e-02 5.55809071e-02 9.18865647e-02 6.10632149e-02 2.32600745e-03 7.18197378e-01 3.12855277e+03 -4.92200000e-04 -1.65360702e-12 7.09458839e-02 5.55808266e-02 9.18866159e-02 6.10632976e-02 2.32599820e-03 7.18197378e-01 3.12855277e+03 -4.92300000e-04 -1.65360702e-12 7.09458399e-02 5.55807464e-02 9.18866669e-02 6.10633800e-02 2.32598898e-03 7.18197378e-01 3.12855277e+03 -4.92400000e-04 -1.65360702e-12 7.09457959e-02 5.55806663e-02 9.18867179e-02 6.10634623e-02 2.32597977e-03 7.18197378e-01 3.12855277e+03 -4.92500000e-04 -1.65360702e-12 7.09457521e-02 5.55805865e-02 9.18867687e-02 6.10635443e-02 2.32597059e-03 7.18197378e-01 3.12855277e+03 -4.92600000e-04 -1.65360702e-12 7.09457084e-02 5.55805069e-02 9.18868193e-02 6.10636261e-02 2.32596144e-03 7.18197378e-01 3.12855277e+03 -4.92700000e-04 -1.65360702e-12 7.09456647e-02 5.55804275e-02 9.18868699e-02 6.10637077e-02 2.32595230e-03 7.18197378e-01 3.12855277e+03 -4.92800000e-04 -1.65360702e-12 7.09456213e-02 5.55803482e-02 9.18869203e-02 6.10637891e-02 2.32594320e-03 7.18197378e-01 3.12855277e+03 -4.92900000e-04 -1.65360702e-12 7.09455779e-02 5.55802692e-02 9.18869706e-02 6.10638703e-02 2.32593411e-03 7.18197378e-01 3.12855277e+03 -4.93000000e-04 -1.65360702e-12 7.09455346e-02 5.55801904e-02 9.18870208e-02 6.10639513e-02 2.32592505e-03 7.18197378e-01 3.12855277e+03 -4.93100000e-04 -1.65360702e-12 7.09454914e-02 5.55801118e-02 9.18870708e-02 6.10640321e-02 2.32591601e-03 7.18197378e-01 3.12855277e+03 -4.93200000e-04 -1.65360702e-12 7.09454484e-02 5.55800334e-02 9.18871207e-02 6.10641127e-02 2.32590699e-03 7.18197378e-01 3.12855277e+03 -4.93300000e-04 -1.65360702e-12 7.09454054e-02 5.55799552e-02 9.18871705e-02 6.10641931e-02 2.32589800e-03 7.18197378e-01 3.12855277e+03 -4.93400000e-04 -1.65360702e-12 7.09453626e-02 5.55798772e-02 9.18872201e-02 6.10642732e-02 2.32588903e-03 7.18197378e-01 3.12855277e+03 -4.93500000e-04 -1.65360702e-12 7.09453199e-02 5.55797994e-02 9.18872697e-02 6.10643532e-02 2.32588008e-03 7.18197378e-01 3.12855277e+03 -4.93600000e-04 -1.65360702e-12 7.09452773e-02 5.55797217e-02 9.18873190e-02 6.10644329e-02 2.32587116e-03 7.18197378e-01 3.12855277e+03 -4.93700000e-04 -1.65360702e-12 7.09452348e-02 5.55796443e-02 9.18873683e-02 6.10645125e-02 2.32586226e-03 7.18197378e-01 3.12855277e+03 -4.93800000e-04 -1.65360702e-12 7.09451924e-02 5.55795671e-02 9.18874175e-02 6.10645918e-02 2.32585338e-03 7.18197378e-01 3.12855277e+03 -4.93900000e-04 -1.65360702e-12 7.09451501e-02 5.55794901e-02 9.18874665e-02 6.10646710e-02 2.32584452e-03 7.18197378e-01 3.12855277e+03 -4.94000000e-04 -1.65360702e-12 7.09451079e-02 5.55794133e-02 9.18875154e-02 6.10647499e-02 2.32583569e-03 7.18197378e-01 3.12855277e+03 -4.94100000e-04 -1.65360702e-12 7.09450658e-02 5.55793367e-02 9.18875641e-02 6.10648286e-02 2.32582688e-03 7.18197378e-01 3.12855277e+03 -4.94200000e-04 -1.65360702e-12 7.09450239e-02 5.55792602e-02 9.18876128e-02 6.10649072e-02 2.32581809e-03 7.18197378e-01 3.12855277e+03 -4.94300000e-04 -1.65360702e-12 7.09449820e-02 5.55791840e-02 9.18876613e-02 6.10649855e-02 2.32580932e-03 7.18197378e-01 3.12855277e+03 -4.94400000e-04 -1.65360702e-12 7.09449402e-02 5.55791080e-02 9.18877097e-02 6.10650637e-02 2.32580058e-03 7.18197378e-01 3.12855277e+03 -4.94500000e-04 -1.65360702e-12 7.09448986e-02 5.55790321e-02 9.18877580e-02 6.10651416e-02 2.32579186e-03 7.18197378e-01 3.12856404e+03 -4.94600000e-04 -1.65360702e-12 7.09448571e-02 5.55789565e-02 9.18878061e-02 6.10652193e-02 2.32578316e-03 7.18197378e-01 3.12856404e+03 -4.94700000e-04 -1.65360702e-12 7.09448156e-02 5.55788810e-02 9.18878541e-02 6.10652969e-02 2.32577448e-03 7.18197378e-01 3.12856404e+03 -4.94800000e-04 -1.65360702e-12 7.09447743e-02 5.55788058e-02 9.18879020e-02 6.10653742e-02 2.32576583e-03 7.18197378e-01 3.12856404e+03 -4.94900000e-04 -1.65360702e-12 7.09447331e-02 5.55787307e-02 9.18879498e-02 6.10654513e-02 2.32575720e-03 7.18197378e-01 3.12856404e+03 -4.95000000e-04 -1.65360702e-12 7.09446920e-02 5.55786558e-02 9.18879975e-02 6.10655283e-02 2.32574859e-03 7.18197378e-01 3.12856404e+03 -4.95100000e-04 -1.65360702e-12 7.09446510e-02 5.55785811e-02 9.18880450e-02 6.10656050e-02 2.32574000e-03 7.18197378e-01 3.12856404e+03 -4.95200000e-04 -1.65360702e-12 7.09446101e-02 5.55785066e-02 9.18880924e-02 6.10656816e-02 2.32573143e-03 7.18197378e-01 3.12856404e+03 -4.95300000e-04 -1.65360702e-12 7.09445693e-02 5.55784323e-02 9.18881397e-02 6.10657579e-02 2.32572289e-03 7.18197378e-01 3.12856404e+03 -4.95400000e-04 -1.65360702e-12 7.09445286e-02 5.55783582e-02 9.18881869e-02 6.10658341e-02 2.32571437e-03 7.18197378e-01 3.12856404e+03 -4.95500000e-04 -1.65360702e-12 7.09444880e-02 5.55782843e-02 9.18882339e-02 6.10659101e-02 2.32570587e-03 7.18197378e-01 3.12856404e+03 -4.95600000e-04 -1.65360702e-12 7.09444475e-02 5.55782106e-02 9.18882809e-02 6.10659858e-02 2.32569739e-03 7.18197378e-01 3.12856404e+03 -4.95700000e-04 -1.65360702e-12 7.09444071e-02 5.55781370e-02 9.18883277e-02 6.10660614e-02 2.32568893e-03 7.18197378e-01 3.12856404e+03 -4.95800000e-04 -1.65360702e-12 7.09443668e-02 5.55780637e-02 9.18883744e-02 6.10661368e-02 2.32568050e-03 7.18197378e-01 3.12856404e+03 -4.95900000e-04 -1.65360702e-12 7.09443267e-02 5.55779905e-02 9.18884209e-02 6.10662120e-02 2.32567208e-03 7.18197378e-01 3.12856404e+03 -4.96000000e-04 -1.65360702e-12 7.09442866e-02 5.55779175e-02 9.18884674e-02 6.10662870e-02 2.32566369e-03 7.18197378e-01 3.12856404e+03 -4.96100000e-04 -1.65360702e-12 7.09442466e-02 5.55778447e-02 9.18885137e-02 6.10663618e-02 2.32565532e-03 7.18197378e-01 3.12856404e+03 -4.96200000e-04 -1.65360702e-12 7.09442067e-02 5.55777721e-02 9.18885599e-02 6.10664364e-02 2.32564697e-03 7.18197378e-01 3.12856404e+03 -4.96300000e-04 -1.65360702e-12 7.09441670e-02 5.55776997e-02 9.18886060e-02 6.10665108e-02 2.32563864e-03 7.18197378e-01 3.12856404e+03 -4.96400000e-04 -1.65360702e-12 7.09441273e-02 5.55776274e-02 9.18886520e-02 6.10665851e-02 2.32563034e-03 7.18197378e-01 3.12856404e+03 -4.96500000e-04 -1.65360702e-12 7.09440878e-02 5.55775554e-02 9.18886978e-02 6.10666591e-02 2.32562205e-03 7.18197378e-01 3.12856404e+03 -4.96600000e-04 -1.65360702e-12 7.09440483e-02 5.55774835e-02 9.18887436e-02 6.10667330e-02 2.32561379e-03 7.18197378e-01 3.12856404e+03 -4.96700000e-04 -1.65360702e-12 7.09440089e-02 5.55774118e-02 9.18887892e-02 6.10668066e-02 2.32560554e-03 7.18197378e-01 3.12856404e+03 -4.96800000e-04 -1.65360702e-12 7.09439697e-02 5.55773403e-02 9.18888347e-02 6.10668801e-02 2.32559732e-03 7.18197378e-01 3.12857466e+03 -4.96900000e-04 -1.65360702e-12 7.09439305e-02 5.55772690e-02 9.18888801e-02 6.10669534e-02 2.32558912e-03 7.18197378e-01 3.12857466e+03 -4.97000000e-04 -1.65360702e-12 7.09438914e-02 5.55771979e-02 9.18889254e-02 6.10670265e-02 2.32558094e-03 7.18197378e-01 3.12857466e+03 -4.97100000e-04 -1.65360702e-12 7.09438525e-02 5.55771269e-02 9.18889705e-02 6.10670994e-02 2.32557278e-03 7.18197378e-01 3.12857466e+03 -4.97200000e-04 -1.65360702e-12 7.09438136e-02 5.55770562e-02 9.18890156e-02 6.10671721e-02 2.32556464e-03 7.18197378e-01 3.12857466e+03 -4.97300000e-04 -1.65360702e-12 7.09437749e-02 5.55769856e-02 9.18890605e-02 6.10672447e-02 2.32555653e-03 7.18197378e-01 3.12857466e+03 -4.97400000e-04 -1.65360702e-12 7.09437362e-02 5.55769151e-02 9.18891053e-02 6.10673170e-02 2.32554843e-03 7.18197378e-01 3.12857466e+03 -4.97500000e-04 -1.65360702e-12 7.09436976e-02 5.55768449e-02 9.18891500e-02 6.10673892e-02 2.32554035e-03 7.18197378e-01 3.12857466e+03 -4.97600000e-04 -1.65360702e-12 7.09436592e-02 5.55767749e-02 9.18891946e-02 6.10674612e-02 2.32553230e-03 7.18197378e-01 3.12857466e+03 -4.97700000e-04 -1.65360702e-12 7.09436208e-02 5.55767050e-02 9.18892391e-02 6.10675330e-02 2.32552427e-03 7.18197378e-01 3.12857466e+03 -4.97800000e-04 -1.65360702e-12 7.09435825e-02 5.55766353e-02 9.18892834e-02 6.10676046e-02 2.32551625e-03 7.18197378e-01 3.12857466e+03 -4.97900000e-04 -1.65360702e-12 7.09435444e-02 5.55765658e-02 9.18893277e-02 6.10676761e-02 2.32550826e-03 7.18197378e-01 3.12857466e+03 -4.98000000e-04 -1.65360702e-12 7.09435063e-02 5.55764965e-02 9.18893718e-02 6.10677473e-02 2.32550028e-03 7.18197378e-01 3.12857466e+03 -4.98100000e-04 -1.65360702e-12 7.09434683e-02 5.55764273e-02 9.18894158e-02 6.10678184e-02 2.32549233e-03 7.18197378e-01 3.12857466e+03 -4.98200000e-04 -1.65360702e-12 7.09434304e-02 5.55763583e-02 9.18894597e-02 6.10678893e-02 2.32548440e-03 7.18197378e-01 3.12857466e+03 -4.98300000e-04 -1.65360702e-12 7.09433927e-02 5.55762895e-02 9.18895035e-02 6.10679600e-02 2.32547649e-03 7.18197378e-01 3.12857466e+03 -4.98400000e-04 -1.65360702e-12 7.09433550e-02 5.55762209e-02 9.18895472e-02 6.10680305e-02 2.32546860e-03 7.18197378e-01 3.12857466e+03 -4.98500000e-04 -1.65360702e-12 7.09433174e-02 5.55761524e-02 9.18895908e-02 6.10681008e-02 2.32546072e-03 7.18197378e-01 3.12857466e+03 -4.98600000e-04 -1.65360702e-12 7.09432799e-02 5.55760841e-02 9.18896342e-02 6.10681710e-02 2.32545287e-03 7.18197378e-01 3.12857466e+03 -4.98700000e-04 -1.65360702e-12 7.09432425e-02 5.55760160e-02 9.18896776e-02 6.10682410e-02 2.32544504e-03 7.18197378e-01 3.12857466e+03 -4.98800000e-04 -1.65360702e-12 7.09432052e-02 5.55759481e-02 9.18897208e-02 6.10683108e-02 2.32543723e-03 7.18197378e-01 3.12857466e+03 -4.98900000e-04 -1.65360702e-12 7.09431680e-02 5.55758804e-02 9.18897639e-02 6.10683804e-02 2.32542944e-03 7.18197378e-01 3.12857466e+03 -4.99000000e-04 -1.65360702e-12 7.09431309e-02 5.55758128e-02 9.18898070e-02 6.10684499e-02 2.32542167e-03 7.18197378e-01 3.12857466e+03 -4.99100000e-04 -1.65360702e-12 7.09430939e-02 5.55757454e-02 9.18898499e-02 6.10685192e-02 2.32541392e-03 7.18197378e-01 3.12858467e+03 -4.99200000e-04 -1.65360702e-12 7.09430569e-02 5.55756781e-02 9.18898926e-02 6.10685883e-02 2.32540618e-03 7.18197378e-01 3.12858467e+03 -4.99300000e-04 -1.65360702e-12 7.09430201e-02 5.55756111e-02 9.18899353e-02 6.10686572e-02 2.32539847e-03 7.18197378e-01 3.12858467e+03 -4.99400000e-04 -1.65360702e-12 7.09429834e-02 5.55755442e-02 9.18899779e-02 6.10687259e-02 2.32539078e-03 7.18197378e-01 3.12858467e+03 -4.99500000e-04 -1.65360702e-12 7.09429468e-02 5.55754774e-02 9.18900204e-02 6.10687945e-02 2.32538311e-03 7.18197378e-01 3.12858467e+03 -4.99600000e-04 -1.65360702e-12 7.09429102e-02 5.55754109e-02 9.18900627e-02 6.10688629e-02 2.32537545e-03 7.18197378e-01 3.12858467e+03 -4.99700000e-04 -1.65360702e-12 7.09428738e-02 5.55753445e-02 9.18901050e-02 6.10689311e-02 2.32536782e-03 7.18197378e-01 3.12858467e+03 -4.99800000e-04 -1.65360702e-12 7.09428374e-02 5.55752783e-02 9.18901471e-02 6.10689991e-02 2.32536021e-03 7.18197378e-01 3.12858467e+03 -4.99900000e-04 -1.65360702e-12 7.09428011e-02 5.55752123e-02 9.18901892e-02 6.10690670e-02 2.32535261e-03 7.18197378e-01 3.12858467e+03 -5.00000000e-04 -1.65360702e-12 7.09427650e-02 5.55751464e-02 9.18902311e-02 6.10691347e-02 2.32534504e-03 7.18197378e-01 3.12858467e+03 -5.00100000e-04 -1.65360702e-12 7.09427289e-02 5.55750807e-02 9.18902729e-02 6.10692022e-02 2.32533748e-03 7.18197378e-01 3.12858467e+03 -5.00200000e-04 -1.65360702e-12 7.09426929e-02 5.55750151e-02 9.18903146e-02 6.10692696e-02 2.32532995e-03 7.18197378e-01 3.12858467e+03 -5.00300000e-04 -1.65360702e-12 7.09426570e-02 5.55749498e-02 9.18903562e-02 6.10693367e-02 2.32532243e-03 7.18197378e-01 3.12858467e+03 -5.00400000e-04 -1.65360702e-12 7.09426212e-02 5.55748846e-02 9.18903977e-02 6.10694037e-02 2.32531493e-03 7.18197378e-01 3.12858467e+03 -5.00500000e-04 -1.65360702e-12 7.09425855e-02 5.55748195e-02 9.18904391e-02 6.10694706e-02 2.32530745e-03 7.18197378e-01 3.12858467e+03 -5.00600000e-04 -1.65360702e-12 7.09425499e-02 5.55747547e-02 9.18904804e-02 6.10695372e-02 2.32530000e-03 7.18197378e-01 3.12858467e+03 -5.00700000e-04 -1.65360702e-12 7.09425143e-02 5.55746900e-02 9.18905216e-02 6.10696037e-02 2.32529255e-03 7.18197378e-01 3.12858467e+03 -5.00800000e-04 -1.65360702e-12 7.09424789e-02 5.55746254e-02 9.18905626e-02 6.10696700e-02 2.32528513e-03 7.18197378e-01 3.12858467e+03 -5.00900000e-04 -1.65360702e-12 7.09424436e-02 5.55745611e-02 9.18906036e-02 6.10697362e-02 2.32527773e-03 7.18197378e-01 3.12858467e+03 -5.01000000e-04 -1.65360702e-12 7.09424083e-02 5.55744968e-02 9.18906445e-02 6.10698022e-02 2.32527035e-03 7.18197378e-01 3.12858467e+03 -5.01100000e-04 -1.65360702e-12 7.09423731e-02 5.55744328e-02 9.18906852e-02 6.10698680e-02 2.32526298e-03 7.18197378e-01 3.12858467e+03 -5.01200000e-04 -1.65360702e-12 7.09423381e-02 5.55743689e-02 9.18907259e-02 6.10699336e-02 2.32525564e-03 7.18197378e-01 3.12858467e+03 -5.01300000e-04 -1.65360702e-12 7.09423031e-02 5.55743052e-02 9.18907664e-02 6.10699991e-02 2.32524831e-03 7.18197378e-01 3.12858467e+03 -5.01400000e-04 -1.65360702e-12 7.09422682e-02 5.55742417e-02 9.18908069e-02 6.10700644e-02 2.32524100e-03 7.18197378e-01 3.12859410e+03 -5.01500000e-04 -1.65360702e-12 7.09422334e-02 5.55741783e-02 9.18908472e-02 6.10701296e-02 2.32523371e-03 7.18197378e-01 3.12859410e+03 -5.01600000e-04 -1.65360702e-12 7.09421986e-02 5.55741150e-02 9.18908875e-02 6.10701945e-02 2.32522644e-03 7.18197378e-01 3.12859410e+03 -5.01700000e-04 -1.65360702e-12 7.09421640e-02 5.55740520e-02 9.18909276e-02 6.10702593e-02 2.32521919e-03 7.18197378e-01 3.12859410e+03 -5.01800000e-04 -1.65360702e-12 7.09421295e-02 5.55739891e-02 9.18909677e-02 6.10703240e-02 2.32521196e-03 7.18197378e-01 3.12859410e+03 -5.01900000e-04 -1.65360702e-12 7.09420950e-02 5.55739263e-02 9.18910076e-02 6.10703885e-02 2.32520474e-03 7.18197378e-01 3.12859410e+03 -5.02000000e-04 -1.65360702e-12 7.09420607e-02 5.55738638e-02 9.18910474e-02 6.10704528e-02 2.32519755e-03 7.18197378e-01 3.12859410e+03 -5.02100000e-04 -1.65360702e-12 7.09420264e-02 5.55738013e-02 9.18910871e-02 6.10705169e-02 2.32519037e-03 7.18197378e-01 3.12859410e+03 -5.02200000e-04 -1.65360702e-12 7.09419922e-02 5.55737391e-02 9.18911268e-02 6.10705809e-02 2.32518321e-03 7.18197378e-01 3.12859410e+03 -5.02300000e-04 -1.65360702e-12 7.09419581e-02 5.55736770e-02 9.18911663e-02 6.10706447e-02 2.32517607e-03 7.18197378e-01 3.12859410e+03 -5.02400000e-04 -1.65360702e-12 7.09419241e-02 5.55736150e-02 9.18912057e-02 6.10707084e-02 2.32516894e-03 7.18197378e-01 3.12859410e+03 -5.02500000e-04 -1.65360702e-12 7.09418901e-02 5.55735532e-02 9.18912450e-02 6.10707719e-02 2.32516184e-03 7.18197378e-01 3.12859410e+03 -5.02600000e-04 -1.65360702e-12 7.09418563e-02 5.55734916e-02 9.18912843e-02 6.10708352e-02 2.32515475e-03 7.18197378e-01 3.12859410e+03 -5.02700000e-04 -1.65360702e-12 7.09418225e-02 5.55734301e-02 9.18913234e-02 6.10708984e-02 2.32514768e-03 7.18197378e-01 3.12859410e+03 -5.02800000e-04 -1.65360702e-12 7.09417889e-02 5.55733688e-02 9.18913624e-02 6.10709614e-02 2.32514063e-03 7.18197378e-01 3.12859410e+03 -5.02900000e-04 -1.65360702e-12 7.09417553e-02 5.55733077e-02 9.18914013e-02 6.10710242e-02 2.32513360e-03 7.18197378e-01 3.12859410e+03 -5.03000000e-04 -1.65360702e-12 7.09417218e-02 5.55732467e-02 9.18914402e-02 6.10710869e-02 2.32512659e-03 7.18197378e-01 3.12859410e+03 -5.03100000e-04 -1.65360702e-12 7.09416884e-02 5.55731858e-02 9.18914789e-02 6.10711495e-02 2.32511959e-03 7.18197378e-01 3.12859410e+03 -5.03200000e-04 -1.65360702e-12 7.09416551e-02 5.55731251e-02 9.18915175e-02 6.10712118e-02 2.32511261e-03 7.18197378e-01 3.12859410e+03 -5.03300000e-04 -1.65360702e-12 7.09416218e-02 5.55730646e-02 9.18915560e-02 6.10712740e-02 2.32510565e-03 7.18197378e-01 3.12859410e+03 -5.03400000e-04 -1.65360702e-12 7.09415887e-02 5.55730042e-02 9.18915945e-02 6.10713361e-02 2.32509871e-03 7.18197378e-01 3.12859410e+03 -5.03500000e-04 -1.65360702e-12 7.09415556e-02 5.55729440e-02 9.18916328e-02 6.10713980e-02 2.32509178e-03 7.18197378e-01 3.12859410e+03 -5.03600000e-04 -1.65360702e-12 7.09415226e-02 5.55728839e-02 9.18916710e-02 6.10714597e-02 2.32508488e-03 7.18197378e-01 3.12859410e+03 -5.03700000e-04 -1.65360702e-12 7.09414897e-02 5.55728240e-02 9.18917092e-02 6.10715213e-02 2.32507799e-03 7.18197378e-01 3.12860732e+03 -5.03800000e-04 -1.65360702e-12 7.09414569e-02 5.55727643e-02 9.18917472e-02 6.10715827e-02 2.32507111e-03 7.18197378e-01 3.12860732e+03 -5.03900000e-04 -1.65360702e-12 7.09414242e-02 5.55727047e-02 9.18917851e-02 6.10716439e-02 2.32506426e-03 7.18197378e-01 3.12860732e+03 -5.04000000e-04 -1.65360702e-12 7.09413915e-02 5.55726452e-02 9.18918230e-02 6.10717050e-02 2.32505742e-03 7.18197378e-01 3.12860732e+03 -5.04100000e-04 -1.65360702e-12 7.09413590e-02 5.55725859e-02 9.18918607e-02 6.10717660e-02 2.32505060e-03 7.18197378e-01 3.12860732e+03 -5.04200000e-04 -1.65360702e-12 7.09413265e-02 5.55725267e-02 9.18918984e-02 6.10718268e-02 2.32504380e-03 7.18197378e-01 3.12860732e+03 -5.04300000e-04 -1.65360702e-12 7.09412941e-02 5.55724677e-02 9.18919359e-02 6.10718874e-02 2.32503702e-03 7.18197378e-01 3.12860732e+03 -5.04400000e-04 -1.65360702e-12 7.09412618e-02 5.55724089e-02 9.18919734e-02 6.10719479e-02 2.32503025e-03 7.18197378e-01 3.12860732e+03 -5.04500000e-04 -1.65360702e-12 7.09412295e-02 5.55723502e-02 9.18920107e-02 6.10720082e-02 2.32502350e-03 7.18197378e-01 3.12860732e+03 -5.04600000e-04 -1.65360702e-12 7.09411974e-02 5.55722916e-02 9.18920480e-02 6.10720684e-02 2.32501677e-03 7.18197378e-01 3.12860732e+03 -5.04700000e-04 -1.65360702e-12 7.09411653e-02 5.55722332e-02 9.18920852e-02 6.10721284e-02 2.32501005e-03 7.18197378e-01 3.12860732e+03 -5.04800000e-04 -1.65360702e-12 7.09411333e-02 5.55721750e-02 9.18921222e-02 6.10721882e-02 2.32500335e-03 7.18197378e-01 3.12860732e+03 -5.04900000e-04 -1.65360702e-12 7.09411014e-02 5.55721169e-02 9.18921592e-02 6.10722480e-02 2.32499667e-03 7.18197378e-01 3.12860732e+03 -5.05000000e-04 -1.65360702e-12 7.09410696e-02 5.55720589e-02 9.18921961e-02 6.10723075e-02 2.32499001e-03 7.18197378e-01 3.12860732e+03 -5.05100000e-04 -1.65360702e-12 7.09410378e-02 5.55720011e-02 9.18922329e-02 6.10723669e-02 2.32498336e-03 7.18197378e-01 3.12860732e+03 -5.05200000e-04 -1.65360702e-12 7.09410062e-02 5.55719435e-02 9.18922696e-02 6.10724262e-02 2.32497673e-03 7.18197378e-01 3.12860732e+03 -5.05300000e-04 -1.65360702e-12 7.09409746e-02 5.55718860e-02 9.18923062e-02 6.10724853e-02 2.32497012e-03 7.18197378e-01 3.12860732e+03 -5.05400000e-04 -1.65360702e-12 7.09409431e-02 5.55718286e-02 9.18923427e-02 6.10725442e-02 2.32496352e-03 7.18197378e-01 3.12860732e+03 -5.05500000e-04 -1.65360702e-12 7.09409117e-02 5.55717714e-02 9.18923791e-02 6.10726030e-02 2.32495694e-03 7.18197378e-01 3.12860732e+03 -5.05600000e-04 -1.65360702e-12 7.09408804e-02 5.55717143e-02 9.18924154e-02 6.10726616e-02 2.32495038e-03 7.18197378e-01 3.12860732e+03 -5.05700000e-04 -1.65360702e-12 7.09408491e-02 5.55716574e-02 9.18924517e-02 6.10727201e-02 2.32494383e-03 7.18197378e-01 3.12860732e+03 -5.05800000e-04 -1.65360702e-12 7.09408179e-02 5.55716006e-02 9.18924878e-02 6.10727785e-02 2.32493730e-03 7.18197378e-01 3.12860732e+03 -5.05900000e-04 -1.65360702e-12 7.09407868e-02 5.55715440e-02 9.18925238e-02 6.10728367e-02 2.32493079e-03 7.18197378e-01 3.12860732e+03 -5.06000000e-04 -1.65360702e-12 7.09407558e-02 5.55714875e-02 9.18925598e-02 6.10728947e-02 2.32492430e-03 7.18197378e-01 3.12860732e+03 -5.06100000e-04 -1.65360702e-12 7.09407249e-02 5.55714312e-02 9.18925956e-02 6.10729526e-02 2.32491782e-03 7.18197378e-01 3.12860732e+03 -5.06200000e-04 -1.65360702e-12 7.09406940e-02 5.55713750e-02 9.18926314e-02 6.10730104e-02 2.32491135e-03 7.18197378e-01 3.12860732e+03 -5.06300000e-04 -1.65360702e-12 7.09406632e-02 5.55713189e-02 9.18926671e-02 6.10730680e-02 2.32490491e-03 7.18197378e-01 3.12860732e+03 -5.06400000e-04 -1.65360702e-12 7.09406325e-02 5.55712630e-02 9.18927027e-02 6.10731255e-02 2.32489848e-03 7.18197378e-01 3.12860732e+03 -5.06500000e-04 -1.65360702e-12 7.09406019e-02 5.55712073e-02 9.18927382e-02 6.10731828e-02 2.32489207e-03 7.18197378e-01 3.12860732e+03 -5.06600000e-04 -1.65360702e-12 7.09405714e-02 5.55711516e-02 9.18927736e-02 6.10732399e-02 2.32488567e-03 7.18197378e-01 3.12860732e+03 -5.06700000e-04 -1.65360702e-12 7.09405409e-02 5.55710962e-02 9.18928089e-02 6.10732969e-02 2.32487929e-03 7.18197378e-01 3.12860732e+03 -5.06800000e-04 -1.65360702e-12 7.09405105e-02 5.55710408e-02 9.18928441e-02 6.10733538e-02 2.32487293e-03 7.18197378e-01 3.12860732e+03 -5.06900000e-04 -1.65360702e-12 7.09404802e-02 5.55709856e-02 9.18928792e-02 6.10734105e-02 2.32486658e-03 7.18197378e-01 3.12860732e+03 -5.07000000e-04 -1.65360702e-12 7.09404500e-02 5.55709306e-02 9.18929143e-02 6.10734671e-02 2.32486025e-03 7.18197378e-01 3.12860732e+03 -5.07100000e-04 -1.65360702e-12 7.09404198e-02 5.55708756e-02 9.18929492e-02 6.10735236e-02 2.32485393e-03 7.18197378e-01 3.12860732e+03 -5.07200000e-04 -1.65360702e-12 7.09403897e-02 5.55708209e-02 9.18929841e-02 6.10735798e-02 2.32484763e-03 7.18197378e-01 3.12861940e+03 -5.07300000e-04 -1.65360702e-12 7.09403597e-02 5.55707662e-02 9.18930189e-02 6.10736360e-02 2.32484135e-03 7.18197378e-01 3.12861940e+03 -5.07400000e-04 -1.65360702e-12 7.09403298e-02 5.55707117e-02 9.18930535e-02 6.10736920e-02 2.32483508e-03 7.18197378e-01 3.12861940e+03 -5.07500000e-04 -1.65360702e-12 7.09402999e-02 5.55706574e-02 9.18930881e-02 6.10737479e-02 2.32482883e-03 7.18197378e-01 3.12861940e+03 -5.07600000e-04 -1.65360702e-12 7.09402702e-02 5.55706032e-02 9.18931226e-02 6.10738036e-02 2.32482260e-03 7.18197378e-01 3.12861940e+03 -5.07700000e-04 -1.65360702e-12 7.09402405e-02 5.55705491e-02 9.18931571e-02 6.10738591e-02 2.32481638e-03 7.18197378e-01 3.12861940e+03 -5.07800000e-04 -1.65360702e-12 7.09402109e-02 5.55704951e-02 9.18931914e-02 6.10739146e-02 2.32481018e-03 7.18197378e-01 3.12861940e+03 -5.07900000e-04 -1.65360702e-12 7.09401813e-02 5.55704413e-02 9.18932256e-02 6.10739699e-02 2.32480399e-03 7.18197378e-01 3.12861940e+03 -5.08000000e-04 -1.65360702e-12 7.09401518e-02 5.55703877e-02 9.18932598e-02 6.10740250e-02 2.32479782e-03 7.18197378e-01 3.12861940e+03 -5.08100000e-04 -1.65360702e-12 7.09401224e-02 5.55703342e-02 9.18932939e-02 6.10740800e-02 2.32479166e-03 7.18197378e-01 3.12861940e+03 -5.08200000e-04 -1.65360702e-12 7.09400931e-02 5.55702808e-02 9.18933278e-02 6.10741349e-02 2.32478552e-03 7.18197378e-01 3.12861940e+03 -5.08300000e-04 -1.65360702e-12 7.09400639e-02 5.55702275e-02 9.18933617e-02 6.10741896e-02 2.32477940e-03 7.18197378e-01 3.12861940e+03 -5.08400000e-04 -1.65360702e-12 7.09400347e-02 5.55701744e-02 9.18933955e-02 6.10742442e-02 2.32477329e-03 7.18197378e-01 3.12861940e+03 -5.08500000e-04 -1.65360702e-12 7.09400056e-02 5.55701214e-02 9.18934293e-02 6.10742987e-02 2.32476720e-03 7.18197378e-01 3.12861940e+03 -5.08600000e-04 -1.65360702e-12 7.09399766e-02 5.55700686e-02 9.18934629e-02 6.10743530e-02 2.32476112e-03 7.18197378e-01 3.12861940e+03 -5.08700000e-04 -1.65360702e-12 7.09399477e-02 5.55700159e-02 9.18934964e-02 6.10744071e-02 2.32475506e-03 7.18197378e-01 3.12861940e+03 -5.08800000e-04 -1.65360702e-12 7.09399188e-02 5.55699633e-02 9.18935299e-02 6.10744612e-02 2.32474902e-03 7.18197378e-01 3.12861940e+03 -5.08900000e-04 -1.65360702e-12 7.09398900e-02 5.55699109e-02 9.18935633e-02 6.10745150e-02 2.32474299e-03 7.18197378e-01 3.12861940e+03 -5.09000000e-04 -1.65360702e-12 7.09398613e-02 5.55698585e-02 9.18935966e-02 6.10745688e-02 2.32473697e-03 7.18197378e-01 3.12861940e+03 -5.09100000e-04 -1.65360702e-12 7.09398326e-02 5.55698064e-02 9.18936298e-02 6.10746224e-02 2.32473097e-03 7.18197378e-01 3.12861940e+03 -5.09200000e-04 -1.65360702e-12 7.09398040e-02 5.55697543e-02 9.18936629e-02 6.10746759e-02 2.32472499e-03 7.18197378e-01 3.12861940e+03 -5.09300000e-04 -1.65360702e-12 7.09397755e-02 5.55697024e-02 9.18936959e-02 6.10747292e-02 2.32471902e-03 7.18197378e-01 3.12861940e+03 -5.09400000e-04 -1.65360702e-12 7.09397471e-02 5.55696507e-02 9.18937289e-02 6.10747824e-02 2.32471306e-03 7.18197378e-01 3.12861940e+03 -5.09500000e-04 -1.65360702e-12 7.09397187e-02 5.55695990e-02 9.18937617e-02 6.10748355e-02 2.32470713e-03 7.18197378e-01 3.12861940e+03 -5.09600000e-04 -1.65360702e-12 7.09396905e-02 5.55695475e-02 9.18937945e-02 6.10748884e-02 2.32470120e-03 7.18197378e-01 3.12861940e+03 -5.09700000e-04 -1.65360702e-12 7.09396622e-02 5.55694961e-02 9.18938272e-02 6.10749412e-02 2.32469529e-03 7.18197378e-01 3.12861940e+03 -5.09800000e-04 -1.65360702e-12 7.09396341e-02 5.55694449e-02 9.18938598e-02 6.10749939e-02 2.32468940e-03 7.18197378e-01 3.12861940e+03 -5.09900000e-04 -1.65360702e-12 7.09396060e-02 5.55693938e-02 9.18938924e-02 6.10750464e-02 2.32468352e-03 7.18197378e-01 3.12861940e+03 -5.10000000e-04 -1.65360702e-12 7.09395780e-02 5.55693428e-02 9.18939248e-02 6.10750988e-02 2.32467766e-03 7.18197378e-01 3.12861940e+03 -5.10100000e-04 -1.65360702e-12 7.09395501e-02 5.55692919e-02 9.18939572e-02 6.10751511e-02 2.32467181e-03 7.18197378e-01 3.12861940e+03 -5.10200000e-04 -1.65360702e-12 7.09395223e-02 5.55692412e-02 9.18939895e-02 6.10752032e-02 2.32466598e-03 7.18197378e-01 3.12861940e+03 -5.10300000e-04 -1.65360702e-12 7.09394945e-02 5.55691906e-02 9.18940217e-02 6.10752552e-02 2.32466016e-03 7.18197378e-01 3.12861940e+03 -5.10400000e-04 -1.65360702e-12 7.09394668e-02 5.55691402e-02 9.18940538e-02 6.10753071e-02 2.32465436e-03 7.18197378e-01 3.12861940e+03 -5.10500000e-04 -1.65360702e-12 7.09394391e-02 5.55690898e-02 9.18940858e-02 6.10753588e-02 2.32464857e-03 7.18197378e-01 3.12861940e+03 -5.10600000e-04 -1.65360702e-12 7.09394116e-02 5.55690396e-02 9.18941178e-02 6.10754104e-02 2.32464280e-03 7.18197378e-01 3.12861940e+03 -5.10700000e-04 -1.65360702e-12 7.09393841e-02 5.55689896e-02 9.18941496e-02 6.10754619e-02 2.32463704e-03 7.18197378e-01 3.12863046e+03 -5.10800000e-04 -1.65360702e-12 7.09393566e-02 5.55689396e-02 9.18941814e-02 6.10755132e-02 2.32463130e-03 7.18197378e-01 3.12863046e+03 -5.10900000e-04 -1.65360702e-12 7.09393293e-02 5.55688898e-02 9.18942131e-02 6.10755644e-02 2.32462557e-03 7.18197378e-01 3.12863046e+03 -5.11000000e-04 -1.65360702e-12 7.09393020e-02 5.55688401e-02 9.18942448e-02 6.10756155e-02 2.32461985e-03 7.18197378e-01 3.12863046e+03 -5.11100000e-04 -1.65360702e-12 7.09392748e-02 5.55687905e-02 9.18942763e-02 6.10756664e-02 2.32461415e-03 7.18197378e-01 3.12863046e+03 -5.11200000e-04 -1.65360702e-12 7.09392476e-02 5.55687411e-02 9.18943078e-02 6.10757172e-02 2.32460847e-03 7.18197378e-01 3.12863046e+03 -5.11300000e-04 -1.65360702e-12 7.09392205e-02 5.55686918e-02 9.18943392e-02 6.10757679e-02 2.32460280e-03 7.18197378e-01 3.12863046e+03 -5.11400000e-04 -1.65360702e-12 7.09391935e-02 5.55686426e-02 9.18943705e-02 6.10758184e-02 2.32459714e-03 7.18197378e-01 3.12863046e+03 -5.11500000e-04 -1.65360702e-12 7.09391666e-02 5.55685935e-02 9.18944017e-02 6.10758688e-02 2.32459150e-03 7.18197378e-01 3.12863046e+03 -5.11600000e-04 -1.65360702e-12 7.09391397e-02 5.55685446e-02 9.18944328e-02 6.10759191e-02 2.32458587e-03 7.18197378e-01 3.12863046e+03 -5.11700000e-04 -1.65360702e-12 7.09391129e-02 5.55684958e-02 9.18944639e-02 6.10759693e-02 2.32458026e-03 7.18197378e-01 3.12863046e+03 -5.11800000e-04 -1.65360702e-12 7.09390862e-02 5.55684471e-02 9.18944949e-02 6.10760193e-02 2.32457466e-03 7.18197378e-01 3.12863046e+03 -5.11900000e-04 -1.65360702e-12 7.09390595e-02 5.55683985e-02 9.18945258e-02 6.10760692e-02 2.32456907e-03 7.18197378e-01 3.12863046e+03 -5.12000000e-04 -1.65360702e-12 7.09390329e-02 5.55683501e-02 9.18945566e-02 6.10761190e-02 2.32456350e-03 7.18197378e-01 3.12863046e+03 -5.12100000e-04 -1.65360702e-12 7.09390064e-02 5.55683018e-02 9.18945874e-02 6.10761687e-02 2.32455795e-03 7.18197378e-01 3.12863046e+03 -5.12200000e-04 -1.65360702e-12 7.09389799e-02 5.55682536e-02 9.18946180e-02 6.10762182e-02 2.32455241e-03 7.18197378e-01 3.12863046e+03 -5.12300000e-04 -1.65360702e-12 7.09389535e-02 5.55682055e-02 9.18946486e-02 6.10762676e-02 2.32454688e-03 7.18197378e-01 3.12863046e+03 -5.12400000e-04 -1.65360702e-12 7.09389272e-02 5.55681576e-02 9.18946791e-02 6.10763168e-02 2.32454137e-03 7.18197378e-01 3.12863046e+03 -5.12500000e-04 -1.65360702e-12 7.09389009e-02 5.55681098e-02 9.18947096e-02 6.10763660e-02 2.32453587e-03 7.18197378e-01 3.12863046e+03 -5.12600000e-04 -1.65360702e-12 7.09388747e-02 5.55680621e-02 9.18947399e-02 6.10764150e-02 2.32453038e-03 7.18197378e-01 3.12863046e+03 -5.12700000e-04 -1.65360702e-12 7.09388486e-02 5.55680145e-02 9.18947702e-02 6.10764639e-02 2.32452491e-03 7.18197378e-01 3.12863046e+03 -5.12800000e-04 -1.65360702e-12 7.09388226e-02 5.55679671e-02 9.18948004e-02 6.10765127e-02 2.32451946e-03 7.18197378e-01 3.12863046e+03 -5.12900000e-04 -1.65360702e-12 7.09387966e-02 5.55679197e-02 9.18948305e-02 6.10765613e-02 2.32451401e-03 7.18197378e-01 3.12863046e+03 -5.13000000e-04 -1.65360702e-12 7.09387706e-02 5.55678725e-02 9.18948606e-02 6.10766098e-02 2.32450858e-03 7.18197378e-01 3.12863046e+03 -5.13100000e-04 -1.65360702e-12 7.09387448e-02 5.55678254e-02 9.18948906e-02 6.10766582e-02 2.32450317e-03 7.18197378e-01 3.12863046e+03 -5.13200000e-04 -1.65360702e-12 7.09387190e-02 5.55677785e-02 9.18949204e-02 6.10767065e-02 2.32449777e-03 7.18197378e-01 3.12863046e+03 -5.13300000e-04 -1.65360702e-12 7.09386933e-02 5.55677316e-02 9.18949503e-02 6.10767546e-02 2.32449238e-03 7.18197378e-01 3.12863046e+03 -5.13400000e-04 -1.65360702e-12 7.09386676e-02 5.55676849e-02 9.18949800e-02 6.10768027e-02 2.32448701e-03 7.18197378e-01 3.12863046e+03 -5.13500000e-04 -1.65360702e-12 7.09386420e-02 5.55676383e-02 9.18950097e-02 6.10768506e-02 2.32448165e-03 7.18197378e-01 3.12863046e+03 -5.13600000e-04 -1.65360702e-12 7.09386165e-02 5.55675918e-02 9.18950393e-02 6.10768983e-02 2.32447630e-03 7.18197378e-01 3.12863046e+03 -5.13700000e-04 -1.65360702e-12 7.09385910e-02 5.55675454e-02 9.18950688e-02 6.10769460e-02 2.32447097e-03 7.18197378e-01 3.12863046e+03 -5.13800000e-04 -1.65360702e-12 7.09385656e-02 5.55674992e-02 9.18950982e-02 6.10769935e-02 2.32446565e-03 7.18197378e-01 3.12863046e+03 -5.13900000e-04 -1.65360702e-12 7.09385403e-02 5.55674530e-02 9.18951276e-02 6.10770409e-02 2.32446034e-03 7.18197378e-01 3.12863046e+03 -5.14000000e-04 -1.65360702e-12 7.09385150e-02 5.55674070e-02 9.18951569e-02 6.10770882e-02 2.32445505e-03 7.18197378e-01 3.12863046e+03 -5.14100000e-04 -1.65360702e-12 7.09384898e-02 5.55673611e-02 9.18951861e-02 6.10771354e-02 2.32444977e-03 7.18197378e-01 3.12863046e+03 -5.14200000e-04 -1.65360702e-12 7.09384647e-02 5.55673153e-02 9.18952152e-02 6.10771824e-02 2.32444451e-03 7.18197378e-01 3.12864056e+03 -5.14300000e-04 -1.65360702e-12 7.09384396e-02 5.55672697e-02 9.18952443e-02 6.10772294e-02 2.32443926e-03 7.18197378e-01 3.12864056e+03 -5.14400000e-04 -1.65360702e-12 7.09384146e-02 5.55672241e-02 9.18952733e-02 6.10772762e-02 2.32443402e-03 7.18197378e-01 3.12864056e+03 -5.14500000e-04 -1.65360702e-12 7.09383896e-02 5.55671787e-02 9.18953022e-02 6.10773229e-02 2.32442880e-03 7.18197378e-01 3.12864056e+03 -5.14600000e-04 -1.65360702e-12 7.09383647e-02 5.55671334e-02 9.18953310e-02 6.10773694e-02 2.32442358e-03 7.18197378e-01 3.12864056e+03 -5.14700000e-04 -1.65360702e-12 7.09383399e-02 5.55670882e-02 9.18953598e-02 6.10774159e-02 2.32441839e-03 7.18197378e-01 3.12864056e+03 -5.14800000e-04 -1.65360702e-12 7.09383152e-02 5.55670431e-02 9.18953885e-02 6.10774622e-02 2.32441320e-03 7.18197378e-01 3.12864056e+03 -5.14900000e-04 -1.65360702e-12 7.09382905e-02 5.55669981e-02 9.18954171e-02 6.10775084e-02 2.32440803e-03 7.18197378e-01 3.12864056e+03 -5.15000000e-04 -1.65360702e-12 7.09382658e-02 5.55669533e-02 9.18954456e-02 6.10775545e-02 2.32440287e-03 7.18197378e-01 3.12864056e+03 -5.15100000e-04 -1.65360702e-12 7.09382413e-02 5.55669086e-02 9.18954741e-02 6.10776005e-02 2.32439773e-03 7.18197378e-01 3.12864056e+03 -5.15200000e-04 -1.65360702e-12 7.09382168e-02 5.55668639e-02 9.18955025e-02 6.10776463e-02 2.32439260e-03 7.18197378e-01 3.12864056e+03 -5.15300000e-04 -1.65360702e-12 7.09381923e-02 5.55668194e-02 9.18955308e-02 6.10776921e-02 2.32438748e-03 7.18197378e-01 3.12864056e+03 -5.15400000e-04 -1.65360702e-12 7.09381679e-02 5.55667750e-02 9.18955591e-02 6.10777377e-02 2.32438237e-03 7.18197378e-01 3.12864056e+03 -5.15500000e-04 -1.65360702e-12 7.09381436e-02 5.55667308e-02 9.18955873e-02 6.10777832e-02 2.32437728e-03 7.18197378e-01 3.12864056e+03 -5.15600000e-04 -1.65360702e-12 7.09381194e-02 5.55666866e-02 9.18956154e-02 6.10778286e-02 2.32437220e-03 7.18197378e-01 3.12864056e+03 -5.15700000e-04 -1.65360702e-12 7.09380952e-02 5.55666425e-02 9.18956434e-02 6.10778739e-02 2.32436714e-03 7.18197378e-01 3.12864056e+03 -5.15800000e-04 -1.65360702e-12 7.09380710e-02 5.55665986e-02 9.18956714e-02 6.10779190e-02 2.32436208e-03 7.18197378e-01 3.12864056e+03 -5.15900000e-04 -1.65360702e-12 7.09380470e-02 5.55665548e-02 9.18956993e-02 6.10779641e-02 2.32435704e-03 7.18197378e-01 3.12864056e+03 -5.16000000e-04 -1.65360702e-12 7.09380230e-02 5.55665111e-02 9.18957271e-02 6.10780090e-02 2.32435202e-03 7.18197378e-01 3.12864056e+03 -5.16100000e-04 -1.65360702e-12 7.09379990e-02 5.55664675e-02 9.18957549e-02 6.10780538e-02 2.32434700e-03 7.18197378e-01 3.12864056e+03 -5.16200000e-04 -1.65360702e-12 7.09379751e-02 5.55664240e-02 9.18957825e-02 6.10780985e-02 2.32434200e-03 7.18197378e-01 3.12864056e+03 -5.16300000e-04 -1.65360702e-12 7.09379513e-02 5.55663806e-02 9.18958101e-02 6.10781431e-02 2.32433701e-03 7.18197378e-01 3.12864056e+03 -5.16400000e-04 -1.65360702e-12 7.09379275e-02 5.55663373e-02 9.18958377e-02 6.10781876e-02 2.32433204e-03 7.18197378e-01 3.12864056e+03 -5.16500000e-04 -1.65360702e-12 7.09379038e-02 5.55662941e-02 9.18958652e-02 6.10782319e-02 2.32432707e-03 7.18197378e-01 3.12864056e+03 -5.16600000e-04 -1.65360702e-12 7.09378802e-02 5.55662511e-02 9.18958926e-02 6.10782762e-02 2.32432212e-03 7.18197378e-01 3.12864056e+03 -5.16700000e-04 -1.65360702e-12 7.09378566e-02 5.55662082e-02 9.18959199e-02 6.10783203e-02 2.32431718e-03 7.18197378e-01 3.12864056e+03 -5.16800000e-04 -1.65360702e-12 7.09378331e-02 5.55661653e-02 9.18959471e-02 6.10783643e-02 2.32431226e-03 7.18197378e-01 3.12864056e+03 -5.16900000e-04 -1.65360702e-12 7.09378096e-02 5.55661226e-02 9.18959743e-02 6.10784082e-02 2.32430735e-03 7.18197378e-01 3.12864056e+03 -5.17000000e-04 -1.65360702e-12 7.09377862e-02 5.55660800e-02 9.18960014e-02 6.10784520e-02 2.32430245e-03 7.18197378e-01 3.12864056e+03 -5.17100000e-04 -1.65360702e-12 7.09377629e-02 5.55660375e-02 9.18960285e-02 6.10784957e-02 2.32429756e-03 7.18197378e-01 3.12864056e+03 -5.17200000e-04 -1.65360702e-12 7.09377396e-02 5.55659951e-02 9.18960555e-02 6.10785393e-02 2.32429268e-03 7.18197378e-01 3.12864056e+03 -5.17300000e-04 -1.65360702e-12 7.09377164e-02 5.55659528e-02 9.18960824e-02 6.10785827e-02 2.32428782e-03 7.18197378e-01 3.12864056e+03 -5.17400000e-04 -1.65360702e-12 7.09376932e-02 5.55659106e-02 9.18961092e-02 6.10786261e-02 2.32428297e-03 7.18197378e-01 3.12864056e+03 -5.17500000e-04 -1.65360702e-12 7.09376701e-02 5.55658686e-02 9.18961360e-02 6.10786693e-02 2.32427813e-03 7.18197378e-01 3.12864056e+03 -5.17600000e-04 -1.65360702e-12 7.09376471e-02 5.55658266e-02 9.18961627e-02 6.10787124e-02 2.32427331e-03 7.18197378e-01 3.12864056e+03 -5.17700000e-04 -1.65360702e-12 7.09376241e-02 5.55657848e-02 9.18961894e-02 6.10787554e-02 2.32426849e-03 7.18197378e-01 3.12864981e+03 -5.17800000e-04 -1.65360702e-12 7.09376012e-02 5.55657430e-02 9.18962159e-02 6.10787983e-02 2.32426369e-03 7.18197378e-01 3.12864981e+03 -5.17900000e-04 -1.65360702e-12 7.09375783e-02 5.55657014e-02 9.18962424e-02 6.10788411e-02 2.32425891e-03 7.18197378e-01 3.12864981e+03 -5.18000000e-04 -1.65360702e-12 7.09375555e-02 5.55656599e-02 9.18962689e-02 6.10788838e-02 2.32425413e-03 7.18197378e-01 3.12864981e+03 -5.18100000e-04 -1.65360702e-12 7.09375328e-02 5.55656184e-02 9.18962952e-02 6.10789264e-02 2.32424936e-03 7.18197378e-01 3.12864981e+03 -5.18200000e-04 -1.65360702e-12 7.09375101e-02 5.55655771e-02 9.18963215e-02 6.10789688e-02 2.32424461e-03 7.18197378e-01 3.12864981e+03 -5.18300000e-04 -1.65360702e-12 7.09374874e-02 5.55655359e-02 9.18963477e-02 6.10790112e-02 2.32423987e-03 7.18197378e-01 3.12864981e+03 -5.18400000e-04 -1.65360702e-12 7.09374649e-02 5.55654948e-02 9.18963739e-02 6.10790534e-02 2.32423515e-03 7.18197378e-01 3.12864981e+03 -5.18500000e-04 -1.65360702e-12 7.09374423e-02 5.55654538e-02 9.18964000e-02 6.10790956e-02 2.32423043e-03 7.18197378e-01 3.12864981e+03 -5.18600000e-04 -1.65360702e-12 7.09374199e-02 5.55654129e-02 9.18964260e-02 6.10791376e-02 2.32422573e-03 7.18197378e-01 3.12864981e+03 -5.18700000e-04 -1.65360702e-12 7.09373975e-02 5.55653721e-02 9.18964520e-02 6.10791795e-02 2.32422104e-03 7.18197378e-01 3.12864981e+03 -5.18800000e-04 -1.65360702e-12 7.09373751e-02 5.55653314e-02 9.18964779e-02 6.10792214e-02 2.32421636e-03 7.18197378e-01 3.12864981e+03 -5.18900000e-04 -1.65360702e-12 7.09373528e-02 5.55652908e-02 9.18965037e-02 6.10792631e-02 2.32421169e-03 7.18197378e-01 3.12864981e+03 -5.19000000e-04 -1.65360702e-12 7.09373306e-02 5.55652503e-02 9.18965295e-02 6.10793047e-02 2.32420703e-03 7.18197378e-01 3.12864981e+03 -5.19100000e-04 -1.65360702e-12 7.09373084e-02 5.55652100e-02 9.18965552e-02 6.10793462e-02 2.32420239e-03 7.18197378e-01 3.12864981e+03 -5.19200000e-04 -1.65360702e-12 7.09372863e-02 5.55651697e-02 9.18965808e-02 6.10793876e-02 2.32419776e-03 7.18197378e-01 3.12864981e+03 -5.19300000e-04 -1.65360702e-12 7.09372643e-02 5.55651295e-02 9.18966064e-02 6.10794288e-02 2.32419314e-03 7.18197378e-01 3.12864981e+03 -5.19400000e-04 -1.65360702e-12 7.09372423e-02 5.55650894e-02 9.18966319e-02 6.10794700e-02 2.32418853e-03 7.18197378e-01 3.12864981e+03 -5.19500000e-04 -1.65360702e-12 7.09372203e-02 5.55650495e-02 9.18966573e-02 6.10795111e-02 2.32418394e-03 7.18197378e-01 3.12864981e+03 -5.19600000e-04 -1.65360702e-12 7.09371984e-02 5.55650096e-02 9.18966827e-02 6.10795521e-02 2.32417935e-03 7.18197378e-01 3.12864981e+03 -5.19700000e-04 -1.65360702e-12 7.09371766e-02 5.55649699e-02 9.18967080e-02 6.10795929e-02 2.32417478e-03 7.18197378e-01 3.12864981e+03 -5.19800000e-04 -1.65360702e-12 7.09371548e-02 5.55649302e-02 9.18967332e-02 6.10796337e-02 2.32417022e-03 7.18197378e-01 3.12864981e+03 -5.19900000e-04 -1.65360702e-12 7.09371331e-02 5.55648906e-02 9.18967584e-02 6.10796743e-02 2.32416567e-03 7.18197378e-01 3.12864981e+03 -5.20000000e-04 -1.65360702e-12 7.09371114e-02 5.55648512e-02 9.18967835e-02 6.10797149e-02 2.32416113e-03 7.18197378e-01 3.12864981e+03 -5.20100000e-04 -1.65360702e-12 7.09370898e-02 5.55648118e-02 9.18968086e-02 6.10797553e-02 2.32415661e-03 7.18197378e-01 3.12864981e+03 -5.20200000e-04 -1.65360702e-12 7.09370682e-02 5.55647726e-02 9.18968336e-02 6.10797957e-02 2.32415209e-03 7.18197378e-01 3.12864981e+03 -5.20300000e-04 -1.65360702e-12 7.09370467e-02 5.55647334e-02 9.18968585e-02 6.10798359e-02 2.32414759e-03 7.18197378e-01 3.12864981e+03 -5.20400000e-04 -1.65360702e-12 7.09370253e-02 5.55646944e-02 9.18968833e-02 6.10798761e-02 2.32414310e-03 7.18197378e-01 3.12864981e+03 -5.20500000e-04 -1.65360702e-12 7.09370039e-02 5.55646554e-02 9.18969081e-02 6.10799161e-02 2.32413862e-03 7.18197378e-01 3.12864981e+03 -5.20600000e-04 -1.65360702e-12 7.09369825e-02 5.55646166e-02 9.18969329e-02 6.10799560e-02 2.32413415e-03 7.18197378e-01 3.12864981e+03 -5.20700000e-04 -1.65360702e-12 7.09369613e-02 5.55645778e-02 9.18969575e-02 6.10799959e-02 2.32412969e-03 7.18197378e-01 3.12864981e+03 -5.20800000e-04 -1.65360702e-12 7.09369400e-02 5.55645391e-02 9.18969821e-02 6.10800356e-02 2.32412525e-03 7.18197378e-01 3.12864981e+03 -5.20900000e-04 -1.65360702e-12 7.09369189e-02 5.55645006e-02 9.18970067e-02 6.10800752e-02 2.32412081e-03 7.18197378e-01 3.12864981e+03 -5.21000000e-04 -1.65360702e-12 7.09368977e-02 5.55644621e-02 9.18970312e-02 6.10801147e-02 2.32411639e-03 7.18197378e-01 3.12864981e+03 -5.21100000e-04 -1.65360702e-12 7.09368767e-02 5.55644238e-02 9.18970556e-02 6.10801542e-02 2.32411198e-03 7.18197378e-01 3.12865826e+03 -5.21200000e-04 -1.65360702e-12 7.09368557e-02 5.55643855e-02 9.18970799e-02 6.10801935e-02 2.32410758e-03 7.18197378e-01 3.12865826e+03 -5.21300000e-04 -1.65360702e-12 7.09368347e-02 5.55643473e-02 9.18971042e-02 6.10802327e-02 2.32410319e-03 7.18197378e-01 3.12865826e+03 -5.21400000e-04 -1.65360702e-12 7.09368138e-02 5.55643093e-02 9.18971284e-02 6.10802718e-02 2.32409881e-03 7.18197378e-01 3.12865826e+03 -5.21500000e-04 -1.65360702e-12 7.09367929e-02 5.55642713e-02 9.18971526e-02 6.10803108e-02 2.32409445e-03 7.18197378e-01 3.12865826e+03 -5.21600000e-04 -1.65360702e-12 7.09367721e-02 5.55642334e-02 9.18971767e-02 6.10803498e-02 2.32409009e-03 7.18197378e-01 3.12865826e+03 -5.21700000e-04 -1.65360702e-12 7.09367514e-02 5.55641957e-02 9.18972007e-02 6.10803886e-02 2.32408575e-03 7.18197378e-01 3.12865826e+03 -5.21800000e-04 -1.65360702e-12 7.09367307e-02 5.55641580e-02 9.18972247e-02 6.10804273e-02 2.32408141e-03 7.18197378e-01 3.12865826e+03 -5.21900000e-04 -1.65360702e-12 7.09367101e-02 5.55641204e-02 9.18972486e-02 6.10804659e-02 2.32407709e-03 7.18197378e-01 3.12865826e+03 -5.22000000e-04 -1.65360702e-12 7.09366895e-02 5.55640829e-02 9.18972725e-02 6.10805045e-02 2.32407278e-03 7.18197378e-01 3.12865826e+03 -5.22100000e-04 -1.65360702e-12 7.09366689e-02 5.55640455e-02 9.18972963e-02 6.10805429e-02 2.32406848e-03 7.18197378e-01 3.12865826e+03 -5.22200000e-04 -1.65360702e-12 7.09366485e-02 5.55640082e-02 9.18973200e-02 6.10805812e-02 2.32406419e-03 7.18197378e-01 3.12865826e+03 -5.22300000e-04 -1.65360702e-12 7.09366280e-02 5.55639710e-02 9.18973437e-02 6.10806194e-02 2.32405991e-03 7.18197378e-01 3.12865826e+03 -5.22400000e-04 -1.65360702e-12 7.09366077e-02 5.55639339e-02 9.18973673e-02 6.10806576e-02 2.32405565e-03 7.18197378e-01 3.12865826e+03 -5.22500000e-04 -1.65360702e-12 7.09365873e-02 5.55638969e-02 9.18973909e-02 6.10806956e-02 2.32405139e-03 7.18197378e-01 3.12865826e+03 -5.22600000e-04 -1.65360702e-12 7.09365671e-02 5.55638600e-02 9.18974144e-02 6.10807335e-02 2.32404715e-03 7.18197378e-01 3.12865826e+03 -5.22700000e-04 -1.65360702e-12 7.09365468e-02 5.55638232e-02 9.18974378e-02 6.10807714e-02 2.32404291e-03 7.18197378e-01 3.12865826e+03 -5.22800000e-04 -1.65360702e-12 7.09365267e-02 5.55637865e-02 9.18974612e-02 6.10808091e-02 2.32403869e-03 7.18197378e-01 3.12865826e+03 -5.22900000e-04 -1.65360702e-12 7.09365066e-02 5.55637498e-02 9.18974845e-02 6.10808468e-02 2.32403448e-03 7.18197378e-01 3.12865826e+03 -5.23000000e-04 -1.65360702e-12 7.09364865e-02 5.55637133e-02 9.18975077e-02 6.10808843e-02 2.32403027e-03 7.18197378e-01 3.12865826e+03 -5.23100000e-04 -1.65360702e-12 7.09364665e-02 5.55636769e-02 9.18975309e-02 6.10809218e-02 2.32402608e-03 7.18197378e-01 3.12865826e+03 -5.23200000e-04 -1.65360702e-12 7.09364465e-02 5.55636405e-02 9.18975541e-02 6.10809591e-02 2.32402190e-03 7.18197378e-01 3.12865826e+03 -5.23300000e-04 -1.65360702e-12 7.09364266e-02 5.55636043e-02 9.18975772e-02 6.10809964e-02 2.32401773e-03 7.18197378e-01 3.12865826e+03 -5.23400000e-04 -1.65360702e-12 7.09364067e-02 5.55635681e-02 9.18976002e-02 6.10810336e-02 2.32401357e-03 7.18197378e-01 3.12865826e+03 -5.23500000e-04 -1.65360702e-12 7.09363869e-02 5.55635320e-02 9.18976231e-02 6.10810706e-02 2.32400943e-03 7.18197378e-01 3.12865826e+03 -5.23600000e-04 -1.65360702e-12 7.09363672e-02 5.55634960e-02 9.18976460e-02 6.10811076e-02 2.32400529e-03 7.18197378e-01 3.12865826e+03 -5.23700000e-04 -1.65360702e-12 7.09363475e-02 5.55634602e-02 9.18976689e-02 6.10811445e-02 2.32400116e-03 7.18197378e-01 3.12865826e+03 -5.23800000e-04 -1.65360702e-12 7.09363278e-02 5.55634244e-02 9.18976917e-02 6.10811813e-02 2.32399705e-03 7.18197378e-01 3.12865826e+03 -5.23900000e-04 -1.65360702e-12 7.09363082e-02 5.55633887e-02 9.18977144e-02 6.10812180e-02 2.32399294e-03 7.18197378e-01 3.12865826e+03 -5.24000000e-04 -1.65360702e-12 7.09362886e-02 5.55633531e-02 9.18977370e-02 6.10812546e-02 2.32398884e-03 7.18197378e-01 3.12865826e+03 -5.24100000e-04 -1.65360702e-12 7.09362691e-02 5.55633175e-02 9.18977596e-02 6.10812911e-02 2.32398476e-03 7.18197378e-01 3.12865826e+03 -5.24200000e-04 -1.65360702e-12 7.09362497e-02 5.55632821e-02 9.18977822e-02 6.10813275e-02 2.32398068e-03 7.18197378e-01 3.12865826e+03 -5.24300000e-04 -1.65360702e-12 7.09362303e-02 5.55632468e-02 9.18978047e-02 6.10813638e-02 2.32397662e-03 7.18197378e-01 3.12865826e+03 -5.24400000e-04 -1.65360702e-12 7.09362109e-02 5.55632115e-02 9.18978271e-02 6.10814000e-02 2.32397257e-03 7.18197378e-01 3.12865826e+03 -5.24500000e-04 -1.65360702e-12 7.09361916e-02 5.55631764e-02 9.18978495e-02 6.10814362e-02 2.32396852e-03 7.18197378e-01 3.12865826e+03 -5.24600000e-04 -1.65360702e-12 7.09361723e-02 5.55631413e-02 9.18978718e-02 6.10814722e-02 2.32396449e-03 7.18197378e-01 3.12866599e+03 -5.24700000e-04 -1.65360702e-12 7.09361531e-02 5.55631063e-02 9.18978941e-02 6.10815082e-02 2.32396047e-03 7.18197378e-01 3.12866599e+03 -5.24800000e-04 -1.65360702e-12 7.09361340e-02 5.55630714e-02 9.18979163e-02 6.10815440e-02 2.32395646e-03 7.18197378e-01 3.12866599e+03 -5.24900000e-04 -1.65360702e-12 7.09361149e-02 5.55630366e-02 9.18979384e-02 6.10815798e-02 2.32395245e-03 7.18197378e-01 3.12866599e+03 -5.25000000e-04 -1.65360702e-12 7.09360958e-02 5.55630019e-02 9.18979605e-02 6.10816155e-02 2.32394846e-03 7.18197378e-01 3.12866599e+03 -5.25100000e-04 -1.65360702e-12 7.09360768e-02 5.55629673e-02 9.18979826e-02 6.10816510e-02 2.32394448e-03 7.18197378e-01 3.12866599e+03 -5.25200000e-04 -1.65360702e-12 7.09360578e-02 5.55629328e-02 9.18980045e-02 6.10816865e-02 2.32394051e-03 7.18197378e-01 3.12866599e+03 -5.25300000e-04 -1.65360702e-12 7.09360389e-02 5.55628983e-02 9.18980265e-02 6.10817219e-02 2.32393655e-03 7.18197378e-01 3.12866599e+03 -5.25400000e-04 -1.65360702e-12 7.09360200e-02 5.55628639e-02 9.18980483e-02 6.10817572e-02 2.32393260e-03 7.18197378e-01 3.12866599e+03 -5.25500000e-04 -1.65360702e-12 7.09360012e-02 5.55628297e-02 9.18980701e-02 6.10817925e-02 2.32392865e-03 7.18197378e-01 3.12866599e+03 -5.25600000e-04 -1.65360702e-12 7.09359824e-02 5.55627955e-02 9.18980919e-02 6.10818276e-02 2.32392472e-03 7.18197378e-01 3.12866599e+03 -5.25700000e-04 -1.65360702e-12 7.09359637e-02 5.55627614e-02 9.18981136e-02 6.10818626e-02 2.32392080e-03 7.18197378e-01 3.12866599e+03 -5.25800000e-04 -1.65360702e-12 7.09359450e-02 5.55627274e-02 9.18981352e-02 6.10818976e-02 2.32391689e-03 7.18197378e-01 3.12866599e+03 -5.25900000e-04 -1.65360702e-12 7.09359264e-02 5.55626935e-02 9.18981568e-02 6.10819324e-02 2.32391299e-03 7.18197378e-01 3.12866599e+03 -5.26000000e-04 -1.65360702e-12 7.09359078e-02 5.55626596e-02 9.18981784e-02 6.10819672e-02 2.32390910e-03 7.18197378e-01 3.12866599e+03 -5.26100000e-04 -1.65360702e-12 7.09358893e-02 5.55626259e-02 9.18981998e-02 6.10820019e-02 2.32390522e-03 7.18197378e-01 3.12866599e+03 -5.26200000e-04 -1.65360702e-12 7.09358708e-02 5.55625922e-02 9.18982213e-02 6.10820365e-02 2.32390135e-03 7.18197378e-01 3.12866599e+03 -5.26300000e-04 -1.65360702e-12 7.09358524e-02 5.55625587e-02 9.18982426e-02 6.10820710e-02 2.32389749e-03 7.18197378e-01 3.12866599e+03 -5.26400000e-04 -1.65360702e-12 7.09358340e-02 5.55625252e-02 9.18982639e-02 6.10821054e-02 2.32389364e-03 7.18197378e-01 3.12866599e+03 -5.26500000e-04 -1.65360702e-12 7.09358156e-02 5.55624918e-02 9.18982852e-02 6.10821397e-02 2.32388980e-03 7.18197378e-01 3.12866599e+03 -5.26600000e-04 -1.65360702e-12 7.09357973e-02 5.55624585e-02 9.18983064e-02 6.10821740e-02 2.32388596e-03 7.18197378e-01 3.12866599e+03 -5.26700000e-04 -1.65360702e-12 7.09357791e-02 5.55624252e-02 9.18983276e-02 6.10822081e-02 2.32388214e-03 7.18197378e-01 3.12866599e+03 -5.26800000e-04 -1.65360702e-12 7.09357609e-02 5.55623921e-02 9.18983487e-02 6.10822422e-02 2.32387833e-03 7.18197378e-01 3.12866599e+03 -5.26900000e-04 -1.65360702e-12 7.09357427e-02 5.55623590e-02 9.18983697e-02 6.10822762e-02 2.32387453e-03 7.18197378e-01 3.12866599e+03 -5.27000000e-04 -1.65360702e-12 7.09357246e-02 5.55623260e-02 9.18983907e-02 6.10823101e-02 2.32387074e-03 7.18197378e-01 3.12866599e+03 -5.27100000e-04 -1.65360702e-12 7.09357066e-02 5.55622932e-02 9.18984116e-02 6.10823439e-02 2.32386695e-03 7.18197378e-01 3.12866599e+03 -5.27200000e-04 -1.65360702e-12 7.09356885e-02 5.55622604e-02 9.18984325e-02 6.10823776e-02 2.32386318e-03 7.18197378e-01 3.12866599e+03 -5.27300000e-04 -1.65360702e-12 7.09356706e-02 5.55622276e-02 9.18984533e-02 6.10824112e-02 2.32385942e-03 7.18197378e-01 3.12866599e+03 -5.27400000e-04 -1.65360702e-12 7.09356526e-02 5.55621950e-02 9.18984741e-02 6.10824448e-02 2.32385566e-03 7.18197378e-01 3.12866599e+03 -5.27500000e-04 -1.65360702e-12 7.09356348e-02 5.55621624e-02 9.18984948e-02 6.10824782e-02 2.32385192e-03 7.18197378e-01 3.12866599e+03 -5.27600000e-04 -1.65360702e-12 7.09356169e-02 5.55621300e-02 9.18985155e-02 6.10825116e-02 2.32384818e-03 7.18197378e-01 3.12866599e+03 -5.27700000e-04 -1.65360702e-12 7.09355991e-02 5.55620976e-02 9.18985361e-02 6.10825449e-02 2.32384446e-03 7.18197378e-01 3.12866599e+03 -5.27800000e-04 -1.65360702e-12 7.09355814e-02 5.55620653e-02 9.18985567e-02 6.10825781e-02 2.32384074e-03 7.18197378e-01 3.12866599e+03 -5.27900000e-04 -1.65360702e-12 7.09355637e-02 5.55620330e-02 9.18985772e-02 6.10826112e-02 2.32383704e-03 7.18197378e-01 3.12866599e+03 -5.28000000e-04 -1.65360702e-12 7.09355460e-02 5.55620009e-02 9.18985976e-02 6.10826442e-02 2.32383334e-03 7.18197378e-01 3.12866599e+03 -5.28100000e-04 -1.65360702e-12 7.09355284e-02 5.55619688e-02 9.18986180e-02 6.10826772e-02 2.32382966e-03 7.18197378e-01 3.12867306e+03 -5.28200000e-04 -1.65360702e-12 7.09355109e-02 5.55619369e-02 9.18986384e-02 6.10827101e-02 2.32382598e-03 7.18197378e-01 3.12867306e+03 -5.28300000e-04 -1.65360702e-12 7.09354934e-02 5.55619050e-02 9.18986587e-02 6.10827428e-02 2.32382231e-03 7.18197378e-01 3.12867306e+03 -5.28400000e-04 -1.65360702e-12 7.09354759e-02 5.55618731e-02 9.18986789e-02 6.10827755e-02 2.32381865e-03 7.18197378e-01 3.12867306e+03 -5.28500000e-04 -1.65360702e-12 7.09354585e-02 5.55618414e-02 9.18986991e-02 6.10828081e-02 2.32381500e-03 7.18197378e-01 3.12867306e+03 -5.28600000e-04 -1.65360702e-12 7.09354411e-02 5.55618098e-02 9.18987193e-02 6.10828407e-02 2.32381136e-03 7.18197378e-01 3.12867306e+03 -5.28700000e-04 -1.65360702e-12 7.09354237e-02 5.55617782e-02 9.18987394e-02 6.10828731e-02 2.32380773e-03 7.18197378e-01 3.12867306e+03 -5.28800000e-04 -1.65360702e-12 7.09354064e-02 5.55617467e-02 9.18987594e-02 6.10829055e-02 2.32380411e-03 7.18197378e-01 3.12867306e+03 -5.28900000e-04 -1.65360702e-12 7.09353892e-02 5.55617153e-02 9.18987794e-02 6.10829378e-02 2.32380050e-03 7.18197378e-01 3.12867306e+03 -5.29000000e-04 -1.65360702e-12 7.09353720e-02 5.55616840e-02 9.18987993e-02 6.10829700e-02 2.32379689e-03 7.18197378e-01 3.12867306e+03 -5.29100000e-04 -1.65360702e-12 7.09353548e-02 5.55616527e-02 9.18988192e-02 6.10830021e-02 2.32379330e-03 7.18197378e-01 3.12867306e+03 -5.29200000e-04 -1.65360702e-12 7.09353377e-02 5.55616215e-02 9.18988391e-02 6.10830341e-02 2.32378972e-03 7.18197378e-01 3.12867306e+03 -5.29300000e-04 -1.65360702e-12 7.09353206e-02 5.55615905e-02 9.18988589e-02 6.10830661e-02 2.32378614e-03 7.18197378e-01 3.12867306e+03 -5.29400000e-04 -1.65360702e-12 7.09353036e-02 5.55615595e-02 9.18988786e-02 6.10830979e-02 2.32378257e-03 7.18197378e-01 3.12867306e+03 -5.29500000e-04 -1.65360702e-12 7.09352866e-02 5.55615285e-02 9.18988983e-02 6.10831297e-02 2.32377902e-03 7.18197378e-01 3.12867306e+03 -5.29600000e-04 -1.65360702e-12 7.09352697e-02 5.55614977e-02 9.18989179e-02 6.10831614e-02 2.32377547e-03 7.18197378e-01 3.12867306e+03 -5.29700000e-04 -1.65360702e-12 7.09352528e-02 5.55614669e-02 9.18989375e-02 6.10831931e-02 2.32377193e-03 7.18197378e-01 3.12867306e+03 -5.29800000e-04 -1.65360702e-12 7.09352359e-02 5.55614362e-02 9.18989570e-02 6.10832246e-02 2.32376840e-03 7.18197378e-01 3.12867306e+03 -5.29900000e-04 -1.65360702e-12 7.09352191e-02 5.55614056e-02 9.18989765e-02 6.10832561e-02 2.32376488e-03 7.18197378e-01 3.12867306e+03 -5.30000000e-04 -1.65360702e-12 7.09352023e-02 5.55613751e-02 9.18989959e-02 6.10832874e-02 2.32376137e-03 7.18197378e-01 3.12867306e+03 -5.30100000e-04 -1.65360702e-12 7.09351856e-02 5.55613446e-02 9.18990153e-02 6.10833187e-02 2.32375787e-03 7.18197378e-01 3.12867306e+03 -5.30200000e-04 -1.65360702e-12 7.09351689e-02 5.55613142e-02 9.18990347e-02 6.10833500e-02 2.32375437e-03 7.18197378e-01 3.12867306e+03 -5.30300000e-04 -1.65360702e-12 7.09351523e-02 5.55612839e-02 9.18990540e-02 6.10833811e-02 2.32375089e-03 7.18197378e-01 3.12867306e+03 -5.30400000e-04 -1.65360702e-12 7.09351357e-02 5.55612537e-02 9.18990732e-02 6.10834122e-02 2.32374741e-03 7.18197378e-01 3.12867306e+03 -5.30500000e-04 -1.65360702e-12 7.09351191e-02 5.55612235e-02 9.18990924e-02 6.10834432e-02 2.32374394e-03 7.18197378e-01 3.12867306e+03 -5.30600000e-04 -1.65360702e-12 7.09351026e-02 5.55611935e-02 9.18991115e-02 6.10834741e-02 2.32374049e-03 7.18197378e-01 3.12867306e+03 -5.30700000e-04 -1.65360702e-12 7.09350861e-02 5.55611635e-02 9.18991306e-02 6.10835049e-02 2.32373704e-03 7.18197378e-01 3.12867306e+03 -5.30800000e-04 -1.65360702e-12 7.09350697e-02 5.55611336e-02 9.18991496e-02 6.10835356e-02 2.32373360e-03 7.18197378e-01 3.12867306e+03 -5.30900000e-04 -1.65360702e-12 7.09350533e-02 5.55611037e-02 9.18991686e-02 6.10835663e-02 2.32373016e-03 7.18197378e-01 3.12867306e+03 -5.31000000e-04 -1.65360702e-12 7.09350370e-02 5.55610740e-02 9.18991876e-02 6.10835969e-02 2.32372674e-03 7.18197378e-01 3.12867306e+03 -5.31100000e-04 -1.65360702e-12 7.09350207e-02 5.55610443e-02 9.18992065e-02 6.10836274e-02 2.32372333e-03 7.18197378e-01 3.12867306e+03 -5.31200000e-04 -1.65360702e-12 7.09350044e-02 5.55610147e-02 9.18992253e-02 6.10836578e-02 2.32371992e-03 7.18197378e-01 3.12867306e+03 -5.31300000e-04 -1.65360702e-12 7.09349882e-02 5.55609851e-02 9.18992441e-02 6.10836882e-02 2.32371653e-03 7.18197378e-01 3.12867306e+03 -5.31400000e-04 -1.65360702e-12 7.09349720e-02 5.55609557e-02 9.18992629e-02 6.10837185e-02 2.32371314e-03 7.18197378e-01 3.12867306e+03 -5.31500000e-04 -1.65360702e-12 7.09349559e-02 5.55609263e-02 9.18992816e-02 6.10837487e-02 2.32370976e-03 7.18197378e-01 3.12867306e+03 -5.31600000e-04 -1.65360702e-12 7.09349398e-02 5.55608970e-02 9.18993002e-02 6.10837788e-02 2.32370639e-03 7.18197378e-01 3.12867953e+03 -5.31700000e-04 -1.65360702e-12 7.09349237e-02 5.55608677e-02 9.18993188e-02 6.10838088e-02 2.32370303e-03 7.18197378e-01 3.12867953e+03 -5.31800000e-04 -1.65360702e-12 7.09349077e-02 5.55608386e-02 9.18993374e-02 6.10838388e-02 2.32369967e-03 7.18197378e-01 3.12867953e+03 -5.31900000e-04 -1.65360702e-12 7.09348917e-02 5.55608095e-02 9.18993559e-02 6.10838687e-02 2.32369633e-03 7.18197378e-01 3.12867953e+03 -5.32000000e-04 -1.65360702e-12 7.09348758e-02 5.55607805e-02 9.18993744e-02 6.10838985e-02 2.32369299e-03 7.18197378e-01 3.12867953e+03 -5.32100000e-04 -1.65360702e-12 7.09348599e-02 5.55607516e-02 9.18993928e-02 6.10839283e-02 2.32368966e-03 7.18197378e-01 3.12867953e+03 -5.32200000e-04 -1.65360702e-12 7.09348440e-02 5.55607227e-02 9.18994111e-02 6.10839579e-02 2.32368634e-03 7.18197378e-01 3.12867953e+03 -5.32300000e-04 -1.65360702e-12 7.09348282e-02 5.55606939e-02 9.18994295e-02 6.10839875e-02 2.32368303e-03 7.18197378e-01 3.12867953e+03 -5.32400000e-04 -1.65360702e-12 7.09348125e-02 5.55606652e-02 9.18994477e-02 6.10840170e-02 2.32367973e-03 7.18197378e-01 3.12867953e+03 -5.32500000e-04 -1.65360702e-12 7.09347967e-02 5.55606366e-02 9.18994660e-02 6.10840464e-02 2.32367644e-03 7.18197378e-01 3.12867953e+03 -5.32600000e-04 -1.65360702e-12 7.09347810e-02 5.55606080e-02 9.18994842e-02 6.10840758e-02 2.32367315e-03 7.18197378e-01 3.12867953e+03 -5.32700000e-04 -1.65360702e-12 7.09347654e-02 5.55605795e-02 9.18995023e-02 6.10841051e-02 2.32366988e-03 7.18197378e-01 3.12867953e+03 -5.32800000e-04 -1.65360702e-12 7.09347498e-02 5.55605511e-02 9.18995204e-02 6.10841343e-02 2.32366661e-03 7.18197378e-01 3.12867953e+03 -5.32900000e-04 -1.65360702e-12 7.09347342e-02 5.55605227e-02 9.18995384e-02 6.10841634e-02 2.32366335e-03 7.18197378e-01 3.12867953e+03 -5.33000000e-04 -1.65360702e-12 7.09347187e-02 5.55604945e-02 9.18995564e-02 6.10841925e-02 2.32366010e-03 7.18197378e-01 3.12867953e+03 -5.33100000e-04 -1.65360702e-12 7.09347032e-02 5.55604662e-02 9.18995744e-02 6.10842215e-02 2.32365685e-03 7.18197378e-01 3.12867953e+03 -5.33200000e-04 -1.65360702e-12 7.09346877e-02 5.55604381e-02 9.18995923e-02 6.10842504e-02 2.32365362e-03 7.18197378e-01 3.12867953e+03 -5.33300000e-04 -1.65360702e-12 7.09346723e-02 5.55604101e-02 9.18996101e-02 6.10842792e-02 2.32365039e-03 7.18197378e-01 3.12867953e+03 -5.33400000e-04 -1.65360702e-12 7.09346570e-02 5.55603821e-02 9.18996279e-02 6.10843080e-02 2.32364717e-03 7.18197378e-01 3.12867953e+03 -5.33500000e-04 -1.65360702e-12 7.09346416e-02 5.55603542e-02 9.18996457e-02 6.10843367e-02 2.32364396e-03 7.18197378e-01 3.12867953e+03 -5.33600000e-04 -1.65360702e-12 7.09346263e-02 5.55603263e-02 9.18996634e-02 6.10843653e-02 2.32364076e-03 7.18197378e-01 3.12867953e+03 -5.33700000e-04 -1.65360702e-12 7.09346111e-02 5.55602985e-02 9.18996811e-02 6.10843938e-02 2.32363756e-03 7.18197378e-01 3.12867953e+03 -5.33800000e-04 -1.65360702e-12 7.09345959e-02 5.55602708e-02 9.18996987e-02 6.10844223e-02 2.32363438e-03 7.18197378e-01 3.12867953e+03 -5.33900000e-04 -1.65360702e-12 7.09345807e-02 5.55602432e-02 9.18997163e-02 6.10844507e-02 2.32363120e-03 7.18197378e-01 3.12867953e+03 -5.34000000e-04 -1.65360702e-12 7.09345656e-02 5.55602156e-02 9.18997339e-02 6.10844790e-02 2.32362803e-03 7.18197378e-01 3.12867953e+03 -5.34100000e-04 -1.65360702e-12 7.09345505e-02 5.55601882e-02 9.18997514e-02 6.10845073e-02 2.32362487e-03 7.18197378e-01 3.12867953e+03 -5.34200000e-04 -1.65360702e-12 7.09345354e-02 5.55601607e-02 9.18997688e-02 6.10845355e-02 2.32362172e-03 7.18197378e-01 3.12867953e+03 -5.34300000e-04 -1.65360702e-12 7.09345204e-02 5.55601334e-02 9.18997862e-02 6.10845636e-02 2.32361857e-03 7.18197378e-01 3.12867953e+03 -5.34400000e-04 -1.65360702e-12 7.09345054e-02 5.55601061e-02 9.18998036e-02 6.10845916e-02 2.32361543e-03 7.18197378e-01 3.12867953e+03 -5.34500000e-04 -1.65360702e-12 7.09344905e-02 5.55600789e-02 9.18998209e-02 6.10846196e-02 2.32361230e-03 7.18197378e-01 3.12867953e+03 -5.34600000e-04 -1.65360702e-12 7.09344756e-02 5.55600518e-02 9.18998382e-02 6.10846475e-02 2.32360918e-03 7.18197378e-01 3.12867953e+03 -5.34700000e-04 -1.65360702e-12 7.09344607e-02 5.55600247e-02 9.18998554e-02 6.10846753e-02 2.32360607e-03 7.18197378e-01 3.12867953e+03 -5.34800000e-04 -1.65360702e-12 7.09344459e-02 5.55599977e-02 9.18998726e-02 6.10847031e-02 2.32360296e-03 7.18197378e-01 3.12867953e+03 -5.34900000e-04 -1.65360702e-12 7.09344311e-02 5.55599708e-02 9.18998897e-02 6.10847307e-02 2.32359987e-03 7.18197378e-01 3.12867953e+03 -5.35000000e-04 -1.65360702e-12 7.09344163e-02 5.55599439e-02 9.18999068e-02 6.10847583e-02 2.32359678e-03 7.18197378e-01 3.12867953e+03 -5.35100000e-04 -1.65360702e-12 7.09344016e-02 5.55599171e-02 9.18999239e-02 6.10847859e-02 2.32359370e-03 7.18197378e-01 3.12868544e+03 -5.35200000e-04 -1.65360702e-12 7.09343869e-02 5.55598904e-02 9.18999409e-02 6.10848133e-02 2.32359062e-03 7.18197378e-01 3.12868544e+03 -5.35300000e-04 -1.65360702e-12 7.09343723e-02 5.55598637e-02 9.18999579e-02 6.10848407e-02 2.32358756e-03 7.18197378e-01 3.12868544e+03 -5.35400000e-04 -1.65360702e-12 7.09343577e-02 5.55598371e-02 9.18999748e-02 6.10848681e-02 2.32358450e-03 7.18197378e-01 3.12868544e+03 -5.35500000e-04 -1.65360702e-12 7.09343431e-02 5.55598106e-02 9.18999917e-02 6.10848953e-02 2.32358145e-03 7.18197378e-01 3.12868544e+03 -5.35600000e-04 -1.65360702e-12 7.09343286e-02 5.55597842e-02 9.19000085e-02 6.10849225e-02 2.32357841e-03 7.18197378e-01 3.12868544e+03 -5.35700000e-04 -1.65360702e-12 7.09343141e-02 5.55597578e-02 9.19000253e-02 6.10849496e-02 2.32357537e-03 7.18197378e-01 3.12868544e+03 -5.35800000e-04 -1.65360702e-12 7.09342996e-02 5.55597315e-02 9.19000420e-02 6.10849767e-02 2.32357235e-03 7.18197378e-01 3.12868544e+03 -5.35900000e-04 -1.65360702e-12 7.09342852e-02 5.55597052e-02 9.19000587e-02 6.10850037e-02 2.32356933e-03 7.18197378e-01 3.12868544e+03 -5.36000000e-04 -1.65360702e-12 7.09342708e-02 5.55596790e-02 9.19000754e-02 6.10850306e-02 2.32356632e-03 7.18197378e-01 3.12868544e+03 -5.36100000e-04 -1.65360702e-12 7.09342565e-02 5.55596529e-02 9.19000920e-02 6.10850574e-02 2.32356331e-03 7.18197378e-01 3.12868544e+03 -5.36200000e-04 -1.65360702e-12 7.09342422e-02 5.55596269e-02 9.19001086e-02 6.10850842e-02 2.32356032e-03 7.18197378e-01 3.12868544e+03 -5.36300000e-04 -1.65360702e-12 7.09342279e-02 5.55596009e-02 9.19001251e-02 6.10851109e-02 2.32355733e-03 7.18197378e-01 3.12868544e+03 -5.36400000e-04 -1.65360702e-12 7.09342137e-02 5.55595750e-02 9.19001416e-02 6.10851375e-02 2.32355435e-03 7.18197378e-01 3.12868544e+03 -5.36500000e-04 -1.65360702e-12 7.09341995e-02 5.55595491e-02 9.19001581e-02 6.10851641e-02 2.32355138e-03 7.18197378e-01 3.12868544e+03 -5.36600000e-04 -1.65360702e-12 7.09341853e-02 5.55595233e-02 9.19001745e-02 6.10851906e-02 2.32354841e-03 7.18197378e-01 3.12868544e+03 -5.36700000e-04 -1.65360702e-12 7.09341712e-02 5.55594976e-02 9.19001909e-02 6.10852170e-02 2.32354545e-03 7.18197378e-01 3.12868544e+03 -5.36800000e-04 -1.65360702e-12 7.09341571e-02 5.55594720e-02 9.19002072e-02 6.10852434e-02 2.32354250e-03 7.18197378e-01 3.12868544e+03 -5.36900000e-04 -1.65360702e-12 7.09341431e-02 5.55594464e-02 9.19002235e-02 6.10852697e-02 2.32353956e-03 7.18197378e-01 3.12868544e+03 -5.37000000e-04 -1.65360702e-12 7.09341290e-02 5.55594209e-02 9.19002397e-02 6.10852959e-02 2.32353663e-03 7.18197378e-01 3.12868544e+03 -5.37100000e-04 -1.65360702e-12 7.09341151e-02 5.55593954e-02 9.19002559e-02 6.10853221e-02 2.32353370e-03 7.18197378e-01 3.12868544e+03 -5.37200000e-04 -1.65360702e-12 7.09341011e-02 5.55593700e-02 9.19002721e-02 6.10853482e-02 2.32353078e-03 7.18197378e-01 3.12868544e+03 -5.37300000e-04 -1.65360702e-12 7.09340872e-02 5.55593447e-02 9.19002882e-02 6.10853742e-02 2.32352787e-03 7.18197378e-01 3.12868544e+03 -5.37400000e-04 -1.65360702e-12 7.09340733e-02 5.55593194e-02 9.19003043e-02 6.10854002e-02 2.32352496e-03 7.18197378e-01 3.12868544e+03 -5.37500000e-04 -1.65360702e-12 7.09340595e-02 5.55592942e-02 9.19003203e-02 6.10854260e-02 2.32352206e-03 7.18197378e-01 3.12868544e+03 -5.37600000e-04 -1.65360702e-12 7.09340457e-02 5.55592691e-02 9.19003363e-02 6.10854519e-02 2.32351917e-03 7.18197378e-01 3.12868544e+03 -5.37700000e-04 -1.65360702e-12 7.09340319e-02 5.55592440e-02 9.19003523e-02 6.10854776e-02 2.32351629e-03 7.18197378e-01 3.12868544e+03 -5.37800000e-04 -1.65360702e-12 7.09340182e-02 5.55592190e-02 9.19003682e-02 6.10855033e-02 2.32351341e-03 7.18197378e-01 3.12868544e+03 -5.37900000e-04 -1.65360702e-12 7.09340045e-02 5.55591941e-02 9.19003840e-02 6.10855290e-02 2.32351055e-03 7.18197378e-01 3.12868544e+03 -5.38000000e-04 -1.65360702e-12 7.09339908e-02 5.55591692e-02 9.19003999e-02 6.10855545e-02 2.32350769e-03 7.18197378e-01 3.12868544e+03 -5.38100000e-04 -1.65360702e-12 7.09339772e-02 5.55591444e-02 9.19004157e-02 6.10855800e-02 2.32350483e-03 7.18197378e-01 3.12868544e+03 -5.38200000e-04 -1.65360702e-12 7.09339636e-02 5.55591197e-02 9.19004314e-02 6.10856055e-02 2.32350199e-03 7.18197378e-01 3.12868544e+03 -5.38300000e-04 -1.65360702e-12 7.09339501e-02 5.55590950e-02 9.19004471e-02 6.10856308e-02 2.32349915e-03 7.18197378e-01 3.12868544e+03 -5.38400000e-04 -1.65360702e-12 7.09339365e-02 5.55590704e-02 9.19004628e-02 6.10856561e-02 2.32349632e-03 7.18197378e-01 3.12868544e+03 -5.38500000e-04 -1.65360702e-12 7.09339231e-02 5.55590458e-02 9.19004784e-02 6.10856814e-02 2.32349349e-03 7.18197378e-01 3.12868544e+03 -5.38600000e-04 -1.65360702e-12 7.09339096e-02 5.55590213e-02 9.19004940e-02 6.10857066e-02 2.32349067e-03 7.18197378e-01 3.12869085e+03 -5.38700000e-04 -1.65360702e-12 7.09338962e-02 5.55589969e-02 9.19005096e-02 6.10857317e-02 2.32348786e-03 7.18197378e-01 3.12869085e+03 -5.38800000e-04 -1.65360702e-12 7.09338828e-02 5.55589725e-02 9.19005251e-02 6.10857567e-02 2.32348506e-03 7.18197378e-01 3.12869085e+03 -5.38900000e-04 -1.65360702e-12 7.09338694e-02 5.55589482e-02 9.19005405e-02 6.10857817e-02 2.32348227e-03 7.18197378e-01 3.12869085e+03 -5.39000000e-04 -1.65360702e-12 7.09338561e-02 5.55589239e-02 9.19005560e-02 6.10858066e-02 2.32347948e-03 7.18197378e-01 3.12869085e+03 -5.39100000e-04 -1.65360702e-12 7.09338429e-02 5.55588998e-02 9.19005714e-02 6.10858315e-02 2.32347670e-03 7.18197378e-01 3.12869085e+03 -5.39200000e-04 -1.65360702e-12 7.09338296e-02 5.55588756e-02 9.19005867e-02 6.10858563e-02 2.32347392e-03 7.18197378e-01 3.12869085e+03 -5.39300000e-04 -1.65360702e-12 7.09338164e-02 5.55588516e-02 9.19006020e-02 6.10858810e-02 2.32347116e-03 7.18197378e-01 3.12869085e+03 -5.39400000e-04 -1.65360702e-12 7.09338032e-02 5.55588276e-02 9.19006173e-02 6.10859056e-02 2.32346840e-03 7.18197378e-01 3.12869085e+03 -5.39500000e-04 -1.65360702e-12 7.09337901e-02 5.55588037e-02 9.19006325e-02 6.10859302e-02 2.32346564e-03 7.18197378e-01 3.12869085e+03 -5.39600000e-04 -1.65360702e-12 7.09337770e-02 5.55587798e-02 9.19006477e-02 6.10859548e-02 2.32346290e-03 7.18197378e-01 3.12869085e+03 -5.39700000e-04 -1.65360702e-12 7.09337639e-02 5.55587560e-02 9.19006629e-02 6.10859793e-02 2.32346016e-03 7.18197378e-01 3.12869085e+03 -5.39800000e-04 -1.65360702e-12 7.09337508e-02 5.55587322e-02 9.19006780e-02 6.10860037e-02 2.32345743e-03 7.18197378e-01 3.12869085e+03 -5.39900000e-04 -1.65360702e-12 7.09337378e-02 5.55587085e-02 9.19006931e-02 6.10860280e-02 2.32345470e-03 7.18197378e-01 3.12869085e+03 -5.40000000e-04 -1.65360702e-12 7.09337248e-02 5.55586849e-02 9.19007081e-02 6.10860523e-02 2.32345198e-03 7.18197378e-01 3.12869085e+03 -5.40100000e-04 -1.65360702e-12 7.09337119e-02 5.55586613e-02 9.19007231e-02 6.10860765e-02 2.32344927e-03 7.18197378e-01 3.12869085e+03 -5.40200000e-04 -1.65360702e-12 7.09336990e-02 5.55586378e-02 9.19007381e-02 6.10861007e-02 2.32344657e-03 7.18197378e-01 3.12869085e+03 -5.40300000e-04 -1.65360702e-12 7.09336861e-02 5.55586144e-02 9.19007530e-02 6.10861248e-02 2.32344387e-03 7.18197378e-01 3.12869085e+03 -5.40400000e-04 -1.65360702e-12 7.09336732e-02 5.55585910e-02 9.19007679e-02 6.10861488e-02 2.32344118e-03 7.18197378e-01 3.12869085e+03 -5.40500000e-04 -1.65360702e-12 7.09336604e-02 5.55585676e-02 9.19007828e-02 6.10861728e-02 2.32343850e-03 7.18197378e-01 3.12869085e+03 -5.40600000e-04 -1.65360702e-12 7.09336477e-02 5.55585444e-02 9.19007976e-02 6.10861967e-02 2.32343582e-03 7.18197378e-01 3.12869085e+03 -5.40700000e-04 -1.65360702e-12 7.09336349e-02 5.55585212e-02 9.19008123e-02 6.10862206e-02 2.32343315e-03 7.18197378e-01 3.12869085e+03 -5.40800000e-04 -1.65360702e-12 7.09336222e-02 5.55584980e-02 9.19008271e-02 6.10862444e-02 2.32343049e-03 7.18197378e-01 3.12869085e+03 -5.40900000e-04 -1.65360702e-12 7.09336095e-02 5.55584749e-02 9.19008418e-02 6.10862681e-02 2.32342784e-03 7.18197378e-01 3.12869085e+03 -5.41000000e-04 -1.65360702e-12 7.09335969e-02 5.55584519e-02 9.19008564e-02 6.10862918e-02 2.32342519e-03 7.18197378e-01 3.12869085e+03 -5.41100000e-04 -1.65360702e-12 7.09335842e-02 5.55584289e-02 9.19008711e-02 6.10863154e-02 2.32342254e-03 7.18197378e-01 3.12869085e+03 -5.41200000e-04 -1.65360702e-12 7.09335717e-02 5.55584060e-02 9.19008856e-02 6.10863390e-02 2.32341991e-03 7.18197378e-01 3.12869085e+03 -5.41300000e-04 -1.65360702e-12 7.09335591e-02 5.55583831e-02 9.19009002e-02 6.10863625e-02 2.32341728e-03 7.18197378e-01 3.12869085e+03 -5.41400000e-04 -1.65360702e-12 7.09335466e-02 5.55583603e-02 9.19009147e-02 6.10863859e-02 2.32341466e-03 7.18197378e-01 3.12869085e+03 -5.41500000e-04 -1.65360702e-12 7.09335341e-02 5.55583376e-02 9.19009292e-02 6.10864093e-02 2.32341204e-03 7.18197378e-01 3.12869085e+03 -5.41600000e-04 -1.65360702e-12 7.09335216e-02 5.55583149e-02 9.19009436e-02 6.10864326e-02 2.32340943e-03 7.18197378e-01 3.12869085e+03 -5.41700000e-04 -1.65360702e-12 7.09335092e-02 5.55582923e-02 9.19009580e-02 6.10864558e-02 2.32340683e-03 7.18197378e-01 3.12869085e+03 -5.41800000e-04 -1.65360702e-12 7.09334968e-02 5.55582697e-02 9.19009724e-02 6.10864790e-02 2.32340424e-03 7.18197378e-01 3.12869085e+03 -5.41900000e-04 -1.65360702e-12 7.09334845e-02 5.55582472e-02 9.19009867e-02 6.10865021e-02 2.32340165e-03 7.18197378e-01 3.12869085e+03 -5.42000000e-04 -1.65360702e-12 7.09334721e-02 5.55582248e-02 9.19010010e-02 6.10865252e-02 2.32339907e-03 7.18197378e-01 3.12869085e+03 -5.42100000e-04 -1.65360702e-12 7.09334598e-02 5.55582024e-02 9.19010152e-02 6.10865482e-02 2.32339649e-03 7.18197378e-01 3.12869579e+03 -5.42200000e-04 -1.65360702e-12 7.09334476e-02 5.55581800e-02 9.19010295e-02 6.10865712e-02 2.32339392e-03 7.18197378e-01 3.12869579e+03 -5.42300000e-04 -1.65360702e-12 7.09334353e-02 5.55581578e-02 9.19010436e-02 6.10865941e-02 2.32339136e-03 7.18197378e-01 3.12869579e+03 -5.42400000e-04 -1.65360702e-12 7.09334231e-02 5.55581355e-02 9.19010578e-02 6.10866169e-02 2.32338881e-03 7.18197378e-01 3.12869579e+03 -5.42500000e-04 -1.65360702e-12 7.09334109e-02 5.55581134e-02 9.19010719e-02 6.10866397e-02 2.32338626e-03 7.18197378e-01 3.12869579e+03 -5.42600000e-04 -1.65360702e-12 7.09333988e-02 5.55580913e-02 9.19010860e-02 6.10866624e-02 2.32338371e-03 7.18197378e-01 3.12869579e+03 -5.42700000e-04 -1.65360702e-12 7.09333867e-02 5.55580692e-02 9.19011000e-02 6.10866851e-02 2.32338118e-03 7.18197378e-01 3.12869579e+03 -5.42800000e-04 -1.65360702e-12 7.09333746e-02 5.55580472e-02 9.19011140e-02 6.10867077e-02 2.32337865e-03 7.18197378e-01 3.12869579e+03 -5.42900000e-04 -1.65360702e-12 7.09333626e-02 5.55580253e-02 9.19011279e-02 6.10867302e-02 2.32337613e-03 7.18197378e-01 3.12869579e+03 -5.43000000e-04 -1.65360702e-12 7.09333505e-02 5.55580034e-02 9.19011419e-02 6.10867527e-02 2.32337361e-03 7.18197378e-01 3.12869579e+03 -5.43100000e-04 -1.65360702e-12 7.09333386e-02 5.55579816e-02 9.19011558e-02 6.10867752e-02 2.32337110e-03 7.18197378e-01 3.12869579e+03 -5.43200000e-04 -1.65360702e-12 7.09333266e-02 5.55579598e-02 9.19011696e-02 6.10867975e-02 2.32336859e-03 7.18197378e-01 3.12869579e+03 -5.43300000e-04 -1.65360702e-12 7.09333147e-02 5.55579381e-02 9.19011834e-02 6.10868199e-02 2.32336610e-03 7.18197378e-01 3.12869579e+03 -5.43400000e-04 -1.65360702e-12 7.09333028e-02 5.55579164e-02 9.19011972e-02 6.10868421e-02 2.32336361e-03 7.18197378e-01 3.12869579e+03 -5.43500000e-04 -1.65360702e-12 7.09332909e-02 5.55578948e-02 9.19012110e-02 6.10868643e-02 2.32336112e-03 7.18197378e-01 3.12869579e+03 -5.43600000e-04 -1.65360702e-12 7.09332791e-02 5.55578733e-02 9.19012247e-02 6.10868865e-02 2.32335864e-03 7.18197378e-01 3.12869579e+03 -5.43700000e-04 -1.65360702e-12 7.09332673e-02 5.55578518e-02 9.19012384e-02 6.10869086e-02 2.32335617e-03 7.18197378e-01 3.12869579e+03 -5.43800000e-04 -1.65360702e-12 7.09332555e-02 5.55578303e-02 9.19012520e-02 6.10869306e-02 2.32335371e-03 7.18197378e-01 3.12869579e+03 -5.43900000e-04 -1.65360702e-12 7.09332437e-02 5.55578090e-02 9.19012656e-02 6.10869526e-02 2.32335125e-03 7.18197378e-01 3.12869579e+03 -5.44000000e-04 -1.65360702e-12 7.09332320e-02 5.55577876e-02 9.19012792e-02 6.10869745e-02 2.32334879e-03 7.18197378e-01 3.12869579e+03 -5.44100000e-04 -1.65360702e-12 7.09332203e-02 5.55577664e-02 9.19012927e-02 6.10869964e-02 2.32334635e-03 7.18197378e-01 3.12869579e+03 -5.44200000e-04 -1.65360702e-12 7.09332087e-02 5.55577451e-02 9.19013062e-02 6.10870182e-02 2.32334391e-03 7.18197378e-01 3.12869579e+03 -5.44300000e-04 -1.65360702e-12 7.09331971e-02 5.55577240e-02 9.19013197e-02 6.10870399e-02 2.32334147e-03 7.18197378e-01 3.12869579e+03 -5.44400000e-04 -1.65360702e-12 7.09331855e-02 5.55577029e-02 9.19013332e-02 6.10870616e-02 2.32333905e-03 7.18197378e-01 3.12869579e+03 -5.44500000e-04 -1.65360702e-12 7.09331739e-02 5.55576818e-02 9.19013466e-02 6.10870833e-02 2.32333662e-03 7.18197378e-01 3.12869579e+03 -5.44600000e-04 -1.65360702e-12 7.09331624e-02 5.55576608e-02 9.19013599e-02 6.10871048e-02 2.32333421e-03 7.18197378e-01 3.12869579e+03 -5.44700000e-04 -1.65360702e-12 7.09331509e-02 5.55576399e-02 9.19013733e-02 6.10871264e-02 2.32333180e-03 7.18197378e-01 3.12869579e+03 -5.44800000e-04 -1.65360702e-12 7.09331394e-02 5.55576190e-02 9.19013866e-02 6.10871479e-02 2.32332940e-03 7.18197378e-01 3.12869579e+03 -5.44900000e-04 -1.65360702e-12 7.09331279e-02 5.55575981e-02 9.19013998e-02 6.10871693e-02 2.32332700e-03 7.18197378e-01 3.12869579e+03 -5.45000000e-04 -1.65360702e-12 7.09331165e-02 5.55575773e-02 9.19014130e-02 6.10871906e-02 2.32332461e-03 7.18197378e-01 3.12869579e+03 -5.45100000e-04 -1.65360702e-12 7.09331051e-02 5.55575566e-02 9.19014262e-02 6.10872120e-02 2.32332222e-03 7.18197378e-01 3.12869579e+03 -5.45200000e-04 -1.65360702e-12 7.09330938e-02 5.55575359e-02 9.19014394e-02 6.10872332e-02 2.32331984e-03 7.18197378e-01 3.12869579e+03 -5.45300000e-04 -1.65360702e-12 7.09330824e-02 5.55575153e-02 9.19014525e-02 6.10872544e-02 2.32331747e-03 7.18197378e-01 3.12869579e+03 -5.45400000e-04 -1.65360702e-12 7.09330711e-02 5.55574947e-02 9.19014656e-02 6.10872756e-02 2.32331511e-03 7.18197378e-01 3.12869579e+03 -5.45500000e-04 -1.65360702e-12 7.09330599e-02 5.55574742e-02 9.19014787e-02 6.10872967e-02 2.32331274e-03 7.18197378e-01 3.12869579e+03 -5.45600000e-04 -1.65360702e-12 7.09330486e-02 5.55574537e-02 9.19014917e-02 6.10873177e-02 2.32331039e-03 7.18197378e-01 3.12870031e+03 -5.45700000e-04 -1.65360702e-12 7.09330374e-02 5.55574333e-02 9.19015047e-02 6.10873387e-02 2.32330804e-03 7.18197378e-01 3.12870031e+03 -5.45800000e-04 -1.65360702e-12 7.09330262e-02 5.55574129e-02 9.19015177e-02 6.10873596e-02 2.32330570e-03 7.18197378e-01 3.12870031e+03 -5.45900000e-04 -1.65360702e-12 7.09330151e-02 5.55573926e-02 9.19015306e-02 6.10873805e-02 2.32330336e-03 7.18197378e-01 3.12870031e+03 -5.46000000e-04 -1.65360702e-12 7.09330039e-02 5.55573723e-02 9.19015435e-02 6.10874013e-02 2.32330103e-03 7.18197378e-01 3.12870031e+03 -5.46100000e-04 -1.65360702e-12 7.09329928e-02 5.55573521e-02 9.19015564e-02 6.10874221e-02 2.32329871e-03 7.18197378e-01 3.12870031e+03 -5.46200000e-04 -1.65360702e-12 7.09329818e-02 5.55573320e-02 9.19015692e-02 6.10874428e-02 2.32329639e-03 7.18197378e-01 3.12870031e+03 -5.46300000e-04 -1.65360702e-12 7.09329707e-02 5.55573119e-02 9.19015820e-02 6.10874635e-02 2.32329408e-03 7.18197378e-01 3.12870031e+03 -5.46400000e-04 -1.65360702e-12 7.09329597e-02 5.55572918e-02 9.19015948e-02 6.10874841e-02 2.32329177e-03 7.18197378e-01 3.12870031e+03 -5.46500000e-04 -1.65360702e-12 7.09329487e-02 5.55572718e-02 9.19016075e-02 6.10875046e-02 2.32328947e-03 7.18197378e-01 3.12870031e+03 -5.46600000e-04 -1.65360702e-12 7.09329378e-02 5.55572519e-02 9.19016202e-02 6.10875252e-02 2.32328718e-03 7.18197378e-01 3.12870031e+03 -5.46700000e-04 -1.65360702e-12 7.09329268e-02 5.55572320e-02 9.19016329e-02 6.10875456e-02 2.32328489e-03 7.18197378e-01 3.12870031e+03 -5.46800000e-04 -1.65360702e-12 7.09329159e-02 5.55572121e-02 9.19016455e-02 6.10875660e-02 2.32328260e-03 7.18197378e-01 3.12870031e+03 -5.46900000e-04 -1.65360702e-12 7.09329051e-02 5.55571923e-02 9.19016581e-02 6.10875864e-02 2.32328033e-03 7.18197378e-01 3.12870031e+03 -5.47000000e-04 -1.65360702e-12 7.09328942e-02 5.55571726e-02 9.19016707e-02 6.10876067e-02 2.32327806e-03 7.18197378e-01 3.12870031e+03 -5.47100000e-04 -1.65360702e-12 7.09328834e-02 5.55571529e-02 9.19016832e-02 6.10876269e-02 2.32327579e-03 7.18197378e-01 3.12870031e+03 -5.47200000e-04 -1.65360702e-12 7.09328726e-02 5.55571332e-02 9.19016957e-02 6.10876471e-02 2.32327353e-03 7.18197378e-01 3.12870031e+03 -5.47300000e-04 -1.65360702e-12 7.09328618e-02 5.55571136e-02 9.19017082e-02 6.10876672e-02 2.32327128e-03 7.18197378e-01 3.12870031e+03 -5.47400000e-04 -1.65360702e-12 7.09328511e-02 5.55570941e-02 9.19017206e-02 6.10876873e-02 2.32326903e-03 7.18197378e-01 3.12870031e+03 -5.47500000e-04 -1.65360702e-12 7.09328404e-02 5.55570746e-02 9.19017330e-02 6.10877074e-02 2.32326679e-03 7.18197378e-01 3.12870031e+03 -5.47600000e-04 -1.65360702e-12 7.09328297e-02 5.55570551e-02 9.19017454e-02 6.10877274e-02 2.32326455e-03 7.18197378e-01 3.12870031e+03 -5.47700000e-04 -1.65360702e-12 7.09328191e-02 5.55570357e-02 9.19017578e-02 6.10877473e-02 2.32326232e-03 7.18197378e-01 3.12870031e+03 -5.47800000e-04 -1.65360702e-12 7.09328084e-02 5.55570164e-02 9.19017701e-02 6.10877672e-02 2.32326009e-03 7.18197378e-01 3.12870031e+03 -5.47900000e-04 -1.65360702e-12 7.09327978e-02 5.55569971e-02 9.19017824e-02 6.10877870e-02 2.32325787e-03 7.18197378e-01 3.12870031e+03 -5.48000000e-04 -1.65360702e-12 7.09327873e-02 5.55569778e-02 9.19017946e-02 6.10878068e-02 2.32325566e-03 7.18197378e-01 3.12870031e+03 -5.48100000e-04 -1.65360702e-12 7.09327767e-02 5.55569586e-02 9.19018068e-02 6.10878265e-02 2.32325345e-03 7.18197378e-01 3.12870031e+03 -5.48200000e-04 -1.65360702e-12 7.09327662e-02 5.55569395e-02 9.19018190e-02 6.10878462e-02 2.32325125e-03 7.18197378e-01 3.12870031e+03 -5.48300000e-04 -1.65360702e-12 7.09327557e-02 5.55569204e-02 9.19018312e-02 6.10878659e-02 2.32324905e-03 7.18197378e-01 3.12870031e+03 -5.48400000e-04 -1.65360702e-12 7.09327452e-02 5.55569013e-02 9.19018433e-02 6.10878854e-02 2.32324686e-03 7.18197378e-01 3.12870031e+03 -5.48500000e-04 -1.65360702e-12 7.09327348e-02 5.55568823e-02 9.19018554e-02 6.10879050e-02 2.32324467e-03 7.18197378e-01 3.12870031e+03 -5.48600000e-04 -1.65360702e-12 7.09327244e-02 5.55568633e-02 9.19018675e-02 6.10879245e-02 2.32324249e-03 7.18197378e-01 3.12870031e+03 -5.48700000e-04 -1.65360702e-12 7.09327140e-02 5.55568444e-02 9.19018795e-02 6.10879439e-02 2.32324032e-03 7.18197378e-01 3.12870031e+03 -5.48800000e-04 -1.65360702e-12 7.09327036e-02 5.55568256e-02 9.19018915e-02 6.10879633e-02 2.32323815e-03 7.18197378e-01 3.12870031e+03 -5.48900000e-04 -1.65360702e-12 7.09326933e-02 5.55568068e-02 9.19019035e-02 6.10879826e-02 2.32323599e-03 7.18197378e-01 3.12870031e+03 -5.49000000e-04 -1.65360702e-12 7.09326830e-02 5.55567880e-02 9.19019154e-02 6.10880019e-02 2.32323383e-03 7.18197378e-01 3.12870445e+03 -5.49100000e-04 -1.65360702e-12 7.09326727e-02 5.55567693e-02 9.19019273e-02 6.10880211e-02 2.32323168e-03 7.18197378e-01 3.12870445e+03 -5.49200000e-04 -1.65360702e-12 7.09326625e-02 5.55567506e-02 9.19019392e-02 6.10880403e-02 2.32322953e-03 7.18197378e-01 3.12870445e+03 -5.49300000e-04 -1.65360702e-12 7.09326522e-02 5.55567320e-02 9.19019511e-02 6.10880595e-02 2.32322739e-03 7.18197378e-01 3.12870445e+03 -5.49400000e-04 -1.65360702e-12 7.09326420e-02 5.55567134e-02 9.19019629e-02 6.10880785e-02 2.32322525e-03 7.18197378e-01 3.12870445e+03 -5.49500000e-04 -1.65360702e-12 7.09326319e-02 5.55566949e-02 9.19019747e-02 6.10880976e-02 2.32322312e-03 7.18197378e-01 3.12870445e+03 -5.49600000e-04 -1.65360702e-12 7.09326217e-02 5.55566764e-02 9.19019864e-02 6.10881166e-02 2.32322100e-03 7.18197378e-01 3.12870445e+03 -5.49700000e-04 -1.65360702e-12 7.09326116e-02 5.55566580e-02 9.19019982e-02 6.10881355e-02 2.32321888e-03 7.18197378e-01 3.12870445e+03 -5.49800000e-04 -1.65360702e-12 7.09326015e-02 5.55566396e-02 9.19020099e-02 6.10881544e-02 2.32321676e-03 7.18197378e-01 3.12870445e+03 -5.49900000e-04 -1.65360702e-12 7.09325914e-02 5.55566213e-02 9.19020215e-02 6.10881732e-02 2.32321466e-03 7.18197378e-01 3.12870445e+03 -5.50000000e-04 -1.65360702e-12 7.09325814e-02 5.55566030e-02 9.19020332e-02 6.10881920e-02 2.32321255e-03 7.18197378e-01 3.12870445e+03 -5.50100000e-04 -1.65360702e-12 7.09325714e-02 5.55565848e-02 9.19020448e-02 6.10882108e-02 2.32321045e-03 7.18197378e-01 3.12870445e+03 -5.50200000e-04 -1.65360702e-12 7.09325614e-02 5.55565666e-02 9.19020564e-02 6.10882295e-02 2.32320836e-03 7.18197378e-01 3.12870445e+03 -5.50300000e-04 -1.65360702e-12 7.09325514e-02 5.55565484e-02 9.19020679e-02 6.10882481e-02 2.32320627e-03 7.18197378e-01 3.12870445e+03 -5.50400000e-04 -1.65360702e-12 7.09325415e-02 5.55565303e-02 9.19020794e-02 6.10882667e-02 2.32320419e-03 7.18197378e-01 3.12870445e+03 -5.50500000e-04 -1.65360702e-12 7.09325316e-02 5.55565123e-02 9.19020909e-02 6.10882853e-02 2.32320212e-03 7.18197378e-01 3.12870445e+03 -5.50600000e-04 -1.65360702e-12 7.09325217e-02 5.55564943e-02 9.19021024e-02 6.10883038e-02 2.32320005e-03 7.18197378e-01 3.12870445e+03 -5.50700000e-04 -1.65360702e-12 7.09325118e-02 5.55564763e-02 9.19021138e-02 6.10883223e-02 2.32319798e-03 7.18197378e-01 3.12870445e+03 -5.50800000e-04 -1.65360702e-12 7.09325020e-02 5.55564584e-02 9.19021252e-02 6.10883407e-02 2.32319592e-03 7.18197378e-01 3.12870445e+03 -5.50900000e-04 -1.65360702e-12 7.09324921e-02 5.55564405e-02 9.19021366e-02 6.10883591e-02 2.32319386e-03 7.18197378e-01 3.12870445e+03 -5.51000000e-04 -1.65360702e-12 7.09324823e-02 5.55564227e-02 9.19021479e-02 6.10883774e-02 2.32319181e-03 7.18197378e-01 3.12870445e+03 -5.51100000e-04 -1.65360702e-12 7.09324726e-02 5.55564049e-02 9.19021593e-02 6.10883957e-02 2.32318977e-03 7.18197378e-01 3.12870445e+03 -5.51200000e-04 -1.65360702e-12 7.09324628e-02 5.55563872e-02 9.19021705e-02 6.10884139e-02 2.32318773e-03 7.18197378e-01 3.12870445e+03 -5.51300000e-04 -1.65360702e-12 7.09324531e-02 5.55563695e-02 9.19021818e-02 6.10884321e-02 2.32318570e-03 7.18197378e-01 3.12870445e+03 -5.51400000e-04 -1.65360702e-12 7.09324434e-02 5.55563518e-02 9.19021930e-02 6.10884502e-02 2.32318367e-03 7.18197378e-01 3.12870445e+03 -5.51500000e-04 -1.65360702e-12 7.09324338e-02 5.55563342e-02 9.19022042e-02 6.10884683e-02 2.32318164e-03 7.18197378e-01 3.12870445e+03 -5.51600000e-04 -1.65360702e-12 7.09324241e-02 5.55563167e-02 9.19022154e-02 6.10884863e-02 2.32317962e-03 7.18197378e-01 3.12870445e+03 -5.51700000e-04 -1.65360702e-12 7.09324145e-02 5.55562992e-02 9.19022265e-02 6.10885043e-02 2.32317761e-03 7.18197378e-01 3.12870445e+03 -5.51800000e-04 -1.65360702e-12 7.09324049e-02 5.55562817e-02 9.19022377e-02 6.10885223e-02 2.32317560e-03 7.18197378e-01 3.12870445e+03 -5.51900000e-04 -1.65360702e-12 7.09323954e-02 5.55562643e-02 9.19022487e-02 6.10885402e-02 2.32317360e-03 7.18197378e-01 3.12870445e+03 -5.52000000e-04 -1.65360702e-12 7.09323858e-02 5.55562469e-02 9.19022598e-02 6.10885580e-02 2.32317160e-03 7.18197378e-01 3.12870445e+03 -5.52100000e-04 -1.65360702e-12 7.09323763e-02 5.55562296e-02 9.19022708e-02 6.10885758e-02 2.32316961e-03 7.18197378e-01 3.12870445e+03 -5.52200000e-04 -1.65360702e-12 7.09323668e-02 5.55562123e-02 9.19022818e-02 6.10885936e-02 2.32316762e-03 7.18197378e-01 3.12870445e+03 -5.52300000e-04 -1.65360702e-12 7.09323573e-02 5.55561951e-02 9.19022928e-02 6.10886113e-02 2.32316564e-03 7.18197378e-01 3.12870445e+03 -5.52400000e-04 -1.65360702e-12 7.09323479e-02 5.55561779e-02 9.19023037e-02 6.10886290e-02 2.32316366e-03 7.18197378e-01 3.12870445e+03 -5.52500000e-04 -1.65360702e-12 7.09323385e-02 5.55561607e-02 9.19023147e-02 6.10886466e-02 2.32316169e-03 7.18197378e-01 3.12870823e+03 -5.52600000e-04 -1.65360702e-12 7.09323291e-02 5.55561436e-02 9.19023256e-02 6.10886642e-02 2.32315972e-03 7.18197378e-01 3.12870823e+03 -5.52700000e-04 -1.65360702e-12 7.09323197e-02 5.55561265e-02 9.19023364e-02 6.10886817e-02 2.32315776e-03 7.18197378e-01 3.12870823e+03 -5.52800000e-04 -1.65360702e-12 7.09323103e-02 5.55561095e-02 9.19023472e-02 6.10886992e-02 2.32315580e-03 7.18197378e-01 3.12870823e+03 -5.52900000e-04 -1.65360702e-12 7.09323010e-02 5.55560925e-02 9.19023581e-02 6.10887167e-02 2.32315385e-03 7.18197378e-01 3.12870823e+03 -5.53000000e-04 -1.65360702e-12 7.09322917e-02 5.55560756e-02 9.19023688e-02 6.10887341e-02 2.32315190e-03 7.18197378e-01 3.12870823e+03 -5.53100000e-04 -1.65360702e-12 7.09322824e-02 5.55560587e-02 9.19023796e-02 6.10887515e-02 2.32314996e-03 7.18197378e-01 3.12870823e+03 -5.53200000e-04 -1.65360702e-12 7.09322732e-02 5.55560419e-02 9.19023903e-02 6.10887688e-02 2.32314802e-03 7.18197378e-01 3.12870823e+03 -5.53300000e-04 -1.65360702e-12 7.09322640e-02 5.55560251e-02 9.19024010e-02 6.10887860e-02 2.32314608e-03 7.18197378e-01 3.12870823e+03 -5.53400000e-04 -1.65360702e-12 7.09322548e-02 5.55560083e-02 9.19024117e-02 6.10888033e-02 2.32314416e-03 7.18197378e-01 3.12870823e+03 -5.53500000e-04 -1.65360702e-12 7.09322456e-02 5.55559916e-02 9.19024223e-02 6.10888205e-02 2.32314223e-03 7.18197378e-01 3.12870823e+03 -5.53600000e-04 -1.65360702e-12 7.09322364e-02 5.55559749e-02 9.19024329e-02 6.10888376e-02 2.32314032e-03 7.18197378e-01 3.12870823e+03 -5.53700000e-04 -1.65360702e-12 7.09322273e-02 5.55559583e-02 9.19024435e-02 6.10888547e-02 2.32313840e-03 7.18197378e-01 3.12870823e+03 -5.53800000e-04 -1.65360702e-12 7.09322182e-02 5.55559417e-02 9.19024541e-02 6.10888717e-02 2.32313650e-03 7.18197378e-01 3.12870823e+03 -5.53900000e-04 -1.65360702e-12 7.09322091e-02 5.55559251e-02 9.19024646e-02 6.10888887e-02 2.32313459e-03 7.18197378e-01 3.12870823e+03 -5.54000000e-04 -1.65360702e-12 7.09322000e-02 5.55559086e-02 9.19024751e-02 6.10889057e-02 2.32313269e-03 7.18197378e-01 3.12870823e+03 -5.54100000e-04 -1.65360702e-12 7.09321910e-02 5.55558922e-02 9.19024856e-02 6.10889226e-02 2.32313080e-03 7.18197378e-01 3.12870823e+03 -5.54200000e-04 -1.65360702e-12 7.09321819e-02 5.55558757e-02 9.19024960e-02 6.10889395e-02 2.32312891e-03 7.18197378e-01 3.12870823e+03 -5.54300000e-04 -1.65360702e-12 7.09321730e-02 5.55558594e-02 9.19025065e-02 6.10889563e-02 2.32312703e-03 7.18197378e-01 3.12870823e+03 -5.54400000e-04 -1.65360702e-12 7.09321640e-02 5.55558430e-02 9.19025169e-02 6.10889731e-02 2.32312515e-03 7.18197378e-01 3.12870823e+03 -5.54500000e-04 -1.65360702e-12 7.09321550e-02 5.55558267e-02 9.19025272e-02 6.10889899e-02 2.32312328e-03 7.18197378e-01 3.12870823e+03 -5.54600000e-04 -1.65360702e-12 7.09321461e-02 5.55558105e-02 9.19025376e-02 6.10890066e-02 2.32312141e-03 7.18197378e-01 3.12870823e+03 -5.54700000e-04 -1.65360702e-12 7.09321372e-02 5.55557943e-02 9.19025479e-02 6.10890233e-02 2.32311954e-03 7.18197378e-01 3.12870823e+03 -5.54800000e-04 -1.65360702e-12 7.09321283e-02 5.55557781e-02 9.19025582e-02 6.10890399e-02 2.32311768e-03 7.18197378e-01 3.12870823e+03 -5.54900000e-04 -1.65360702e-12 7.09321195e-02 5.55557620e-02 9.19025684e-02 6.10890565e-02 2.32311583e-03 7.18197378e-01 3.12870823e+03 -5.55000000e-04 -1.65360702e-12 7.09321106e-02 5.55557459e-02 9.19025787e-02 6.10890730e-02 2.32311398e-03 7.18197378e-01 3.12870823e+03 -5.55100000e-04 -1.65360702e-12 7.09321018e-02 5.55557298e-02 9.19025889e-02 6.10890895e-02 2.32311213e-03 7.18197378e-01 3.12870823e+03 -5.55200000e-04 -1.65360702e-12 7.09320930e-02 5.55557138e-02 9.19025991e-02 6.10891059e-02 2.32311029e-03 7.18197378e-01 3.12870823e+03 -5.55300000e-04 -1.65360702e-12 7.09320842e-02 5.55556979e-02 9.19026092e-02 6.10891223e-02 2.32310845e-03 7.18197378e-01 3.12870823e+03 -5.55400000e-04 -1.65360702e-12 7.09320755e-02 5.55556819e-02 9.19026194e-02 6.10891387e-02 2.32310662e-03 7.18197378e-01 3.12870823e+03 -5.55500000e-04 -1.65360702e-12 7.09320668e-02 5.55556661e-02 9.19026295e-02 6.10891550e-02 2.32310480e-03 7.18197378e-01 3.12870823e+03 -5.55600000e-04 -1.65360702e-12 7.09320581e-02 5.55556502e-02 9.19026396e-02 6.10891713e-02 2.32310297e-03 7.18197378e-01 3.12870823e+03 -5.55700000e-04 -1.65360702e-12 7.09320494e-02 5.55556344e-02 9.19026496e-02 6.10891876e-02 2.32310116e-03 7.18197378e-01 3.12870823e+03 -5.55800000e-04 -1.65360702e-12 7.09320407e-02 5.55556187e-02 9.19026597e-02 6.10892038e-02 2.32309934e-03 7.18197378e-01 3.12870823e+03 -5.55900000e-04 -1.65360702e-12 7.09320321e-02 5.55556029e-02 9.19026697e-02 6.10892199e-02 2.32309754e-03 7.18197378e-01 3.12870823e+03 -5.56000000e-04 -1.65360702e-12 7.09320235e-02 5.55555873e-02 9.19026796e-02 6.10892360e-02 2.32309573e-03 7.18197378e-01 3.12871169e+03 -5.56100000e-04 -1.65360702e-12 7.09320149e-02 5.55555716e-02 9.19026896e-02 6.10892521e-02 2.32309393e-03 7.18197378e-01 3.12871169e+03 -5.56200000e-04 -1.65360702e-12 7.09320063e-02 5.55555560e-02 9.19026995e-02 6.10892681e-02 2.32309214e-03 7.18197378e-01 3.12871169e+03 -5.56300000e-04 -1.65360702e-12 7.09319978e-02 5.55555404e-02 9.19027094e-02 6.10892841e-02 2.32309035e-03 7.18197378e-01 3.12871169e+03 -5.56400000e-04 -1.65360702e-12 7.09319893e-02 5.55555249e-02 9.19027193e-02 6.10893001e-02 2.32308856e-03 7.18197378e-01 3.12871169e+03 -5.56500000e-04 -1.65360702e-12 7.09319808e-02 5.55555094e-02 9.19027292e-02 6.10893160e-02 2.32308678e-03 7.18197378e-01 3.12871169e+03 -5.56600000e-04 -1.65360702e-12 7.09319723e-02 5.55554940e-02 9.19027390e-02 6.10893319e-02 2.32308501e-03 7.18197378e-01 3.12871169e+03 -5.56700000e-04 -1.65360702e-12 7.09319638e-02 5.55554786e-02 9.19027488e-02 6.10893477e-02 2.32308324e-03 7.18197378e-01 3.12871169e+03 -5.56800000e-04 -1.65360702e-12 7.09319554e-02 5.55554632e-02 9.19027586e-02 6.10893635e-02 2.32308147e-03 7.18197378e-01 3.12871169e+03 -5.56900000e-04 -1.65360702e-12 7.09319470e-02 5.55554479e-02 9.19027683e-02 6.10893792e-02 2.32307971e-03 7.18197378e-01 3.12871169e+03 -5.57000000e-04 -1.65360702e-12 7.09319386e-02 5.55554326e-02 9.19027781e-02 6.10893949e-02 2.32307795e-03 7.18197378e-01 3.12871169e+03 -5.57100000e-04 -1.65360702e-12 7.09319302e-02 5.55554174e-02 9.19027878e-02 6.10894106e-02 2.32307620e-03 7.18197378e-01 3.12871169e+03 -5.57200000e-04 -1.65360702e-12 7.09319218e-02 5.55554022e-02 9.19027974e-02 6.10894262e-02 2.32307445e-03 7.18197378e-01 3.12871169e+03 -5.57300000e-04 -1.65360702e-12 7.09319135e-02 5.55553870e-02 9.19028071e-02 6.10894418e-02 2.32307270e-03 7.18197378e-01 3.12871169e+03 -5.57400000e-04 -1.65360702e-12 7.09319052e-02 5.55553719e-02 9.19028167e-02 6.10894574e-02 2.32307096e-03 7.18197378e-01 3.12871169e+03 -5.57500000e-04 -1.65360702e-12 7.09318969e-02 5.55553568e-02 9.19028263e-02 6.10894729e-02 2.32306923e-03 7.18197378e-01 3.12871169e+03 -5.57600000e-04 -1.65360702e-12 7.09318887e-02 5.55553418e-02 9.19028359e-02 6.10894884e-02 2.32306750e-03 7.18197378e-01 3.12871169e+03 -5.57700000e-04 -1.65360702e-12 7.09318804e-02 5.55553267e-02 9.19028455e-02 6.10895038e-02 2.32306577e-03 7.18197378e-01 3.12871169e+03 -5.57800000e-04 -1.65360702e-12 7.09318722e-02 5.55553118e-02 9.19028550e-02 6.10895192e-02 2.32306405e-03 7.18197378e-01 3.12871169e+03 -5.57900000e-04 -1.65360702e-12 7.09318640e-02 5.55552968e-02 9.19028645e-02 6.10895345e-02 2.32306233e-03 7.18197378e-01 3.12871169e+03 -5.58000000e-04 -1.65360702e-12 7.09318558e-02 5.55552819e-02 9.19028740e-02 6.10895498e-02 2.32306062e-03 7.18197378e-01 3.12871169e+03 -5.58100000e-04 -1.65360702e-12 7.09318476e-02 5.55552671e-02 9.19028834e-02 6.10895651e-02 2.32305891e-03 7.18197378e-01 3.12871169e+03 -5.58200000e-04 -1.65360702e-12 7.09318395e-02 5.55552523e-02 9.19028929e-02 6.10895803e-02 2.32305720e-03 7.18197378e-01 3.12871169e+03 -5.58300000e-04 -1.65360702e-12 7.09318314e-02 5.55552375e-02 9.19029023e-02 6.10895955e-02 2.32305550e-03 7.18197378e-01 3.12871169e+03 -5.58400000e-04 -1.65360702e-12 7.09318233e-02 5.55552227e-02 9.19029117e-02 6.10896107e-02 2.32305381e-03 7.18197378e-01 3.12871169e+03 -5.58500000e-04 -1.65360702e-12 7.09318152e-02 5.55552080e-02 9.19029210e-02 6.10896258e-02 2.32305212e-03 7.18197378e-01 3.12871169e+03 -5.58600000e-04 -1.65360702e-12 7.09318071e-02 5.55551933e-02 9.19029303e-02 6.10896409e-02 2.32305043e-03 7.18197378e-01 3.12871169e+03 -5.58700000e-04 -1.65360702e-12 7.09317991e-02 5.55551787e-02 9.19029397e-02 6.10896559e-02 2.32304875e-03 7.18197378e-01 3.12871169e+03 -5.58800000e-04 -1.65360702e-12 7.09317911e-02 5.55551641e-02 9.19029490e-02 6.10896709e-02 2.32304707e-03 7.18197378e-01 3.12871169e+03 -5.58900000e-04 -1.65360702e-12 7.09317831e-02 5.55551496e-02 9.19029582e-02 6.10896859e-02 2.32304539e-03 7.18197378e-01 3.12871169e+03 -5.59000000e-04 -1.65360702e-12 7.09317751e-02 5.55551350e-02 9.19029675e-02 6.10897008e-02 2.32304372e-03 7.18197378e-01 3.12871169e+03 -5.59100000e-04 -1.65360702e-12 7.09317672e-02 5.55551206e-02 9.19029767e-02 6.10897157e-02 2.32304206e-03 7.18197378e-01 3.12871169e+03 -5.59200000e-04 -1.65360702e-12 7.09317592e-02 5.55551061e-02 9.19029859e-02 6.10897305e-02 2.32304040e-03 7.18197378e-01 3.12871169e+03 -5.59300000e-04 -1.65360702e-12 7.09317513e-02 5.55550917e-02 9.19029950e-02 6.10897453e-02 2.32303874e-03 7.18197378e-01 3.12871169e+03 -5.59400000e-04 -1.65360702e-12 7.09317434e-02 5.55550773e-02 9.19030042e-02 6.10897601e-02 2.32303709e-03 7.18197378e-01 3.12871169e+03 -5.59500000e-04 -1.65360702e-12 7.09317355e-02 5.55550630e-02 9.19030133e-02 6.10897749e-02 2.32303544e-03 7.18197378e-01 3.12871485e+03 -5.59600000e-04 -1.65360702e-12 7.09317277e-02 5.55550487e-02 9.19030224e-02 6.10897895e-02 2.32303379e-03 7.18197378e-01 3.12871485e+03 -5.59700000e-04 -1.65360702e-12 7.09317199e-02 5.55550344e-02 9.19030315e-02 6.10898042e-02 2.32303215e-03 7.18197378e-01 3.12871485e+03 -5.59800000e-04 -1.65360702e-12 7.09317120e-02 5.55550202e-02 9.19030405e-02 6.10898188e-02 2.32303052e-03 7.18197378e-01 3.12871485e+03 -5.59900000e-04 -1.65360702e-12 7.09317043e-02 5.55550060e-02 9.19030496e-02 6.10898334e-02 2.32302889e-03 7.18197378e-01 3.12871485e+03 -5.60000000e-04 -1.65360702e-12 7.09316965e-02 5.55549919e-02 9.19030586e-02 6.10898480e-02 2.32302726e-03 7.18197378e-01 3.12871485e+03 -5.60100000e-04 -1.65360702e-12 7.09316887e-02 5.55549778e-02 9.19030676e-02 6.10898625e-02 2.32302564e-03 7.18197378e-01 3.12871485e+03 -5.60200000e-04 -1.65360702e-12 7.09316810e-02 5.55549637e-02 9.19030765e-02 6.10898769e-02 2.32302402e-03 7.18197378e-01 3.12871485e+03 -5.60300000e-04 -1.65360702e-12 7.09316733e-02 5.55549496e-02 9.19030855e-02 6.10898914e-02 2.32302240e-03 7.18197378e-01 3.12871485e+03 -5.60400000e-04 -1.65360702e-12 7.09316656e-02 5.55549356e-02 9.19030944e-02 6.10899058e-02 2.32302079e-03 7.18197378e-01 3.12871485e+03 -5.60500000e-04 -1.65360702e-12 7.09316579e-02 5.55549217e-02 9.19031033e-02 6.10899201e-02 2.32301918e-03 7.18197378e-01 3.12871485e+03 -5.60600000e-04 -1.65360702e-12 7.09316503e-02 5.55549077e-02 9.19031121e-02 6.10899345e-02 2.32301758e-03 7.18197378e-01 3.12871485e+03 -5.60700000e-04 -1.65360702e-12 7.09316426e-02 5.55548938e-02 9.19031210e-02 6.10899487e-02 2.32301598e-03 7.18197378e-01 3.12871485e+03 -5.60800000e-04 -1.65360702e-12 7.09316350e-02 5.55548800e-02 9.19031298e-02 6.10899630e-02 2.32301439e-03 7.18197378e-01 3.12871485e+03 -5.60900000e-04 -1.65360702e-12 7.09316274e-02 5.55548661e-02 9.19031386e-02 6.10899772e-02 2.32301280e-03 7.18197378e-01 3.12871485e+03 -5.61000000e-04 -1.65360702e-12 7.09316198e-02 5.55548523e-02 9.19031474e-02 6.10899914e-02 2.32301121e-03 7.18197378e-01 3.12871485e+03 -5.61100000e-04 -1.65360702e-12 7.09316123e-02 5.55548386e-02 9.19031562e-02 6.10900055e-02 2.32300963e-03 7.18197378e-01 3.12871485e+03 -5.61200000e-04 -1.65360702e-12 7.09316047e-02 5.55548248e-02 9.19031649e-02 6.10900196e-02 2.32300805e-03 7.18197378e-01 3.12871485e+03 -5.61300000e-04 -1.65360702e-12 7.09315972e-02 5.55548112e-02 9.19031736e-02 6.10900337e-02 2.32300647e-03 7.18197378e-01 3.12871485e+03 -5.61400000e-04 -1.65360702e-12 7.09315897e-02 5.55547975e-02 9.19031823e-02 6.10900477e-02 2.32300490e-03 7.18197378e-01 3.12871485e+03 -5.61500000e-04 -1.65360702e-12 7.09315822e-02 5.55547839e-02 9.19031910e-02 6.10900617e-02 2.32300334e-03 7.18197378e-01 3.12871485e+03 -5.61600000e-04 -1.65360702e-12 7.09315748e-02 5.55547703e-02 9.19031996e-02 6.10900757e-02 2.32300178e-03 7.18197378e-01 3.12871485e+03 -5.61700000e-04 -1.65360702e-12 7.09315673e-02 5.55547568e-02 9.19032082e-02 6.10900896e-02 2.32300022e-03 7.18197378e-01 3.12871485e+03 -5.61800000e-04 -1.65360702e-12 7.09315599e-02 5.55547432e-02 9.19032168e-02 6.10901035e-02 2.32299866e-03 7.18197378e-01 3.12871485e+03 -5.61900000e-04 -1.65360702e-12 7.09315525e-02 5.55547298e-02 9.19032254e-02 6.10901174e-02 2.32299711e-03 7.18197378e-01 3.12871485e+03 -5.62000000e-04 -1.65360702e-12 7.09315451e-02 5.55547163e-02 9.19032340e-02 6.10901312e-02 2.32299557e-03 7.18197378e-01 3.12871485e+03 -5.62100000e-04 -1.65360702e-12 7.09315378e-02 5.55547029e-02 9.19032425e-02 6.10901450e-02 2.32299402e-03 7.18197378e-01 3.12871485e+03 -5.62200000e-04 -1.65360702e-12 7.09315304e-02 5.55546895e-02 9.19032510e-02 6.10901587e-02 2.32299249e-03 7.18197378e-01 3.12871485e+03 -5.62300000e-04 -1.65360702e-12 7.09315231e-02 5.55546762e-02 9.19032595e-02 6.10901724e-02 2.32299095e-03 7.18197378e-01 3.12871485e+03 -5.62400000e-04 -1.65360702e-12 7.09315158e-02 5.55546629e-02 9.19032680e-02 6.10901861e-02 2.32298942e-03 7.18197378e-01 3.12871485e+03 -5.62500000e-04 -1.65360702e-12 7.09315085e-02 5.55546496e-02 9.19032764e-02 6.10901997e-02 2.32298789e-03 7.18197378e-01 3.12871485e+03 -5.62600000e-04 -1.65360702e-12 7.09315012e-02 5.55546364e-02 9.19032848e-02 6.10902134e-02 2.32298637e-03 7.18197378e-01 3.12871485e+03 -5.62700000e-04 -1.65360702e-12 7.09314940e-02 5.55546232e-02 9.19032933e-02 6.10902269e-02 2.32298485e-03 7.18197378e-01 3.12871485e+03 -5.62800000e-04 -1.65360702e-12 7.09314867e-02 5.55546100e-02 9.19033016e-02 6.10902405e-02 2.32298334e-03 7.18197378e-01 3.12871485e+03 -5.62900000e-04 -1.65360702e-12 7.09314795e-02 5.55545968e-02 9.19033100e-02 6.10902540e-02 2.32298183e-03 7.18197378e-01 3.12871485e+03 -5.63000000e-04 -1.65360702e-12 7.09314723e-02 5.55545837e-02 9.19033183e-02 6.10902674e-02 2.32298032e-03 7.18197378e-01 3.12871774e+03 -5.63100000e-04 -1.65360702e-12 7.09314651e-02 5.55545707e-02 9.19033267e-02 6.10902809e-02 2.32297882e-03 7.18197378e-01 3.12871774e+03 -5.63200000e-04 -1.65360702e-12 7.09314580e-02 5.55545576e-02 9.19033350e-02 6.10902943e-02 2.32297732e-03 7.18197378e-01 3.12871774e+03 -5.63300000e-04 -1.65360702e-12 7.09314508e-02 5.55545446e-02 9.19033432e-02 6.10903076e-02 2.32297582e-03 7.18197378e-01 3.12871774e+03 -5.63400000e-04 -1.65360702e-12 7.09314437e-02 5.55545317e-02 9.19033515e-02 6.10903210e-02 2.32297433e-03 7.18197378e-01 3.12871774e+03 -5.63500000e-04 -1.65360702e-12 7.09314366e-02 5.55545187e-02 9.19033597e-02 6.10903343e-02 2.32297284e-03 7.18197378e-01 3.12871774e+03 -5.63600000e-04 -1.65360702e-12 7.09314295e-02 5.55545058e-02 9.19033679e-02 6.10903475e-02 2.32297136e-03 7.18197378e-01 3.12871774e+03 -5.63700000e-04 -1.65360702e-12 7.09314224e-02 5.55544929e-02 9.19033761e-02 6.10903608e-02 2.32296988e-03 7.18197378e-01 3.12871774e+03 -5.63800000e-04 -1.65360702e-12 7.09314154e-02 5.55544801e-02 9.19033843e-02 6.10903740e-02 2.32296840e-03 7.18197378e-01 3.12871774e+03 -5.63900000e-04 -1.65360702e-12 7.09314084e-02 5.55544673e-02 9.19033925e-02 6.10903871e-02 2.32296693e-03 7.18197378e-01 3.12871774e+03 -5.64000000e-04 -1.65360702e-12 7.09314013e-02 5.55544545e-02 9.19034006e-02 6.10904003e-02 2.32296546e-03 7.18197378e-01 3.12871774e+03 -5.64100000e-04 -1.65360702e-12 7.09313943e-02 5.55544418e-02 9.19034087e-02 6.10904133e-02 2.32296399e-03 7.18197378e-01 3.12871774e+03 -5.64200000e-04 -1.65360702e-12 7.09313874e-02 5.55544291e-02 9.19034168e-02 6.10904264e-02 2.32296253e-03 7.18197378e-01 3.12871774e+03 -5.64300000e-04 -1.65360702e-12 7.09313804e-02 5.55544164e-02 9.19034248e-02 6.10904394e-02 2.32296107e-03 7.18197378e-01 3.12871774e+03 -5.64400000e-04 -1.65360702e-12 7.09313735e-02 5.55544038e-02 9.19034329e-02 6.10904524e-02 2.32295962e-03 7.18197378e-01 3.12871774e+03 -5.64500000e-04 -1.65360702e-12 7.09313665e-02 5.55543911e-02 9.19034409e-02 6.10904654e-02 2.32295817e-03 7.18197378e-01 3.12871774e+03 -5.64600000e-04 -1.65360702e-12 7.09313596e-02 5.55543786e-02 9.19034489e-02 6.10904783e-02 2.32295672e-03 7.18197378e-01 3.12871774e+03 -5.64700000e-04 -1.65360702e-12 7.09313527e-02 5.55543660e-02 9.19034569e-02 6.10904912e-02 2.32295528e-03 7.18197378e-01 3.12871774e+03 -5.64800000e-04 -1.65360702e-12 7.09313459e-02 5.55543535e-02 9.19034649e-02 6.10905041e-02 2.32295384e-03 7.18197378e-01 3.12871774e+03 -5.64900000e-04 -1.65360702e-12 7.09313390e-02 5.55543410e-02 9.19034728e-02 6.10905169e-02 2.32295240e-03 7.18197378e-01 3.12871774e+03 -5.65000000e-04 -1.65360702e-12 7.09313322e-02 5.55543286e-02 9.19034807e-02 6.10905297e-02 2.32295097e-03 7.18197378e-01 3.12871774e+03 -5.65100000e-04 -1.65360702e-12 7.09313253e-02 5.55543162e-02 9.19034886e-02 6.10905425e-02 2.32294954e-03 7.18197378e-01 3.12871774e+03 -5.65200000e-04 -1.65360702e-12 7.09313185e-02 5.55543038e-02 9.19034965e-02 6.10905552e-02 2.32294812e-03 7.18197378e-01 3.12871774e+03 -5.65300000e-04 -1.65360702e-12 7.09313117e-02 5.55542914e-02 9.19035044e-02 6.10905679e-02 2.32294670e-03 7.18197378e-01 3.12871774e+03 -5.65400000e-04 -1.65360702e-12 7.09313050e-02 5.55542791e-02 9.19035122e-02 6.10905806e-02 2.32294528e-03 7.18197378e-01 3.12871774e+03 -5.65500000e-04 -1.65360702e-12 7.09312982e-02 5.55542668e-02 9.19035201e-02 6.10905932e-02 2.32294387e-03 7.18197378e-01 3.12871774e+03 -5.65600000e-04 -1.65360702e-12 7.09312915e-02 5.55542545e-02 9.19035279e-02 6.10906058e-02 2.32294246e-03 7.18197378e-01 3.12871774e+03 -5.65700000e-04 -1.65360702e-12 7.09312848e-02 5.55542423e-02 9.19035356e-02 6.10906184e-02 2.32294105e-03 7.18197378e-01 3.12871774e+03 -5.65800000e-04 -1.65360702e-12 7.09312781e-02 5.55542301e-02 9.19035434e-02 6.10906309e-02 2.32293965e-03 7.18197378e-01 3.12871774e+03 -5.65900000e-04 -1.65360702e-12 7.09312714e-02 5.55542180e-02 9.19035511e-02 6.10906434e-02 2.32293825e-03 7.18197378e-01 3.12871774e+03 -5.66000000e-04 -1.65360702e-12 7.09312647e-02 5.55542058e-02 9.19035589e-02 6.10906559e-02 2.32293685e-03 7.18197378e-01 3.12871774e+03 -5.66100000e-04 -1.65360702e-12 7.09312581e-02 5.55541937e-02 9.19035666e-02 6.10906683e-02 2.32293546e-03 7.18197378e-01 3.12871774e+03 -5.66200000e-04 -1.65360702e-12 7.09312515e-02 5.55541816e-02 9.19035743e-02 6.10906807e-02 2.32293407e-03 7.18197378e-01 3.12871774e+03 -5.66300000e-04 -1.65360702e-12 7.09312448e-02 5.55541696e-02 9.19035819e-02 6.10906931e-02 2.32293269e-03 7.18197378e-01 3.12871774e+03 -5.66400000e-04 -1.65360702e-12 7.09312382e-02 5.55541576e-02 9.19035896e-02 6.10907054e-02 2.32293131e-03 7.18197378e-01 3.12871774e+03 -5.66500000e-04 -1.65360702e-12 7.09312317e-02 5.55541456e-02 9.19035972e-02 6.10907178e-02 2.32292993e-03 7.18197378e-01 3.12872039e+03 -5.66600000e-04 -1.65360702e-12 7.09312251e-02 5.55541337e-02 9.19036048e-02 6.10907300e-02 2.32292855e-03 7.18197378e-01 3.12872039e+03 -5.66700000e-04 -1.65360702e-12 7.09312186e-02 5.55541217e-02 9.19036124e-02 6.10907423e-02 2.32292718e-03 7.18197378e-01 3.12872039e+03 -5.66800000e-04 -1.65360702e-12 7.09312120e-02 5.55541099e-02 9.19036200e-02 6.10907545e-02 2.32292582e-03 7.18197378e-01 3.12872039e+03 -5.66900000e-04 -1.65360702e-12 7.09312055e-02 5.55540980e-02 9.19036275e-02 6.10907667e-02 2.32292445e-03 7.18197378e-01 3.12872039e+03 -5.67000000e-04 -1.65360702e-12 7.09311990e-02 5.55540862e-02 9.19036350e-02 6.10907789e-02 2.32292309e-03 7.18197378e-01 3.12872039e+03 -5.67100000e-04 -1.65360702e-12 7.09311925e-02 5.55540744e-02 9.19036425e-02 6.10907910e-02 2.32292174e-03 7.18197378e-01 3.12872039e+03 -5.67200000e-04 -1.65360702e-12 7.09311861e-02 5.55540626e-02 9.19036500e-02 6.10908031e-02 2.32292038e-03 7.18197378e-01 3.12872039e+03 -5.67300000e-04 -1.65360702e-12 7.09311796e-02 5.55540509e-02 9.19036575e-02 6.10908151e-02 2.32291903e-03 7.18197378e-01 3.12872039e+03 -5.67400000e-04 -1.65360702e-12 7.09311732e-02 5.55540392e-02 9.19036649e-02 6.10908272e-02 2.32291769e-03 7.18197378e-01 3.12872039e+03 -5.67500000e-04 -1.65360702e-12 7.09311668e-02 5.55540275e-02 9.19036724e-02 6.10908392e-02 2.32291634e-03 7.18197378e-01 3.12872039e+03 -5.67600000e-04 -1.65360702e-12 7.09311604e-02 5.55540158e-02 9.19036798e-02 6.10908511e-02 2.32291500e-03 7.18197378e-01 3.12872039e+03 -5.67700000e-04 -1.65360702e-12 7.09311540e-02 5.55540042e-02 9.19036872e-02 6.10908631e-02 2.32291367e-03 7.18197378e-01 3.12872039e+03 -5.67800000e-04 -1.65360702e-12 7.09311476e-02 5.55539926e-02 9.19036946e-02 6.10908750e-02 2.32291234e-03 7.18197378e-01 3.12872039e+03 -5.67900000e-04 -1.65360702e-12 7.09311413e-02 5.55539811e-02 9.19037019e-02 6.10908869e-02 2.32291101e-03 7.18197378e-01 3.12872039e+03 -5.68000000e-04 -1.65360702e-12 7.09311350e-02 5.55539695e-02 9.19037093e-02 6.10908987e-02 2.32290968e-03 7.18197378e-01 3.12872039e+03 -5.68100000e-04 -1.65360702e-12 7.09311286e-02 5.55539580e-02 9.19037166e-02 6.10909105e-02 2.32290836e-03 7.18197378e-01 3.12872039e+03 -5.68200000e-04 -1.65360702e-12 7.09311223e-02 5.55539466e-02 9.19037239e-02 6.10909223e-02 2.32290704e-03 7.18197378e-01 3.12872039e+03 -5.68300000e-04 -1.65360702e-12 7.09311161e-02 5.55539351e-02 9.19037312e-02 6.10909341e-02 2.32290572e-03 7.18197378e-01 3.12872039e+03 -5.68400000e-04 -1.65360702e-12 7.09311098e-02 5.55539237e-02 9.19037384e-02 6.10909458e-02 2.32290441e-03 7.18197378e-01 3.12872039e+03 -5.68500000e-04 -1.65360702e-12 7.09311035e-02 5.55539123e-02 9.19037457e-02 6.10909575e-02 2.32290310e-03 7.18197378e-01 3.12872039e+03 -5.68600000e-04 -1.65360702e-12 7.09310973e-02 5.55539010e-02 9.19037529e-02 6.10909692e-02 2.32290180e-03 7.18197378e-01 3.12872039e+03 -5.68700000e-04 -1.65360702e-12 7.09310911e-02 5.55538897e-02 9.19037601e-02 6.10909808e-02 2.32290049e-03 7.18197378e-01 3.12872039e+03 -5.68800000e-04 -1.65360702e-12 7.09310849e-02 5.55538784e-02 9.19037673e-02 6.10909924e-02 2.32289919e-03 7.18197378e-01 3.12872039e+03 -5.68900000e-04 -1.65360702e-12 7.09310787e-02 5.55538671e-02 9.19037744e-02 6.10910040e-02 2.32289790e-03 7.18197378e-01 3.12872039e+03 -5.69000000e-04 -1.65360702e-12 7.09310725e-02 5.55538559e-02 9.19037816e-02 6.10910156e-02 2.32289661e-03 7.18197378e-01 3.12872039e+03 -5.69100000e-04 -1.65360702e-12 7.09310664e-02 5.55538447e-02 9.19037887e-02 6.10910271e-02 2.32289532e-03 7.18197378e-01 3.12872039e+03 -5.69200000e-04 -1.65360702e-12 7.09310602e-02 5.55538335e-02 9.19037958e-02 6.10910386e-02 2.32289403e-03 7.18197378e-01 3.12872039e+03 -5.69300000e-04 -1.65360702e-12 7.09310541e-02 5.55538223e-02 9.19038029e-02 6.10910500e-02 2.32289275e-03 7.18197378e-01 3.12872039e+03 -5.69400000e-04 -1.65360702e-12 7.09310480e-02 5.55538112e-02 9.19038100e-02 6.10910615e-02 2.32289147e-03 7.18197378e-01 3.12872039e+03 -5.69500000e-04 -1.65360702e-12 7.09310419e-02 5.55538001e-02 9.19038171e-02 6.10910729e-02 2.32289019e-03 7.18197378e-01 3.12872039e+03 -5.69600000e-04 -1.65360702e-12 7.09310358e-02 5.55537891e-02 9.19038241e-02 6.10910842e-02 2.32288892e-03 7.18197378e-01 3.12872039e+03 -5.69700000e-04 -1.65360702e-12 7.09310298e-02 5.55537780e-02 9.19038311e-02 6.10910956e-02 2.32288765e-03 7.18197378e-01 3.12872039e+03 -5.69800000e-04 -1.65360702e-12 7.09310237e-02 5.55537670e-02 9.19038382e-02 6.10911069e-02 2.32288639e-03 7.18197378e-01 3.12872039e+03 -5.69900000e-04 -1.65360702e-12 7.09310177e-02 5.55537560e-02 9.19038451e-02 6.10911182e-02 2.32288512e-03 7.18197378e-01 3.12872039e+03 -5.70000000e-04 -1.65360702e-12 7.09310117e-02 5.55537451e-02 9.19038521e-02 6.10911294e-02 2.32288386e-03 7.18197378e-01 3.12872280e+03 -5.70100000e-04 -1.65360702e-12 7.09310057e-02 5.55537342e-02 9.19038591e-02 6.10911407e-02 2.32288261e-03 7.18197378e-01 3.12872280e+03 -5.70200000e-04 -1.65360702e-12 7.09309997e-02 5.55537233e-02 9.19038660e-02 6.10911519e-02 2.32288135e-03 7.18197378e-01 3.12872280e+03 -5.70300000e-04 -1.65360702e-12 7.09309937e-02 5.55537124e-02 9.19038729e-02 6.10911630e-02 2.32288010e-03 7.18197378e-01 3.12872280e+03 -5.70400000e-04 -1.65360702e-12 7.09309878e-02 5.55537015e-02 9.19038798e-02 6.10911742e-02 2.32287886e-03 7.18197378e-01 3.12872280e+03 -5.70500000e-04 -1.65360702e-12 7.09309818e-02 5.55536907e-02 9.19038867e-02 6.10911853e-02 2.32287761e-03 7.18197378e-01 3.12872280e+03 -5.70600000e-04 -1.65360702e-12 7.09309759e-02 5.55536799e-02 9.19038936e-02 6.10911964e-02 2.32287637e-03 7.18197378e-01 3.12872280e+03 -5.70700000e-04 -1.65360702e-12 7.09309700e-02 5.55536692e-02 9.19039004e-02 6.10912074e-02 2.32287514e-03 7.18197378e-01 3.12872280e+03 -5.70800000e-04 -1.65360702e-12 7.09309641e-02 5.55536585e-02 9.19039072e-02 6.10912185e-02 2.32287390e-03 7.18197378e-01 3.12872280e+03 -5.70900000e-04 -1.65360702e-12 7.09309582e-02 5.55536478e-02 9.19039141e-02 6.10912295e-02 2.32287267e-03 7.18197378e-01 3.12872280e+03 -5.71000000e-04 -1.65360702e-12 7.09309524e-02 5.55536371e-02 9.19039208e-02 6.10912404e-02 2.32287144e-03 7.18197378e-01 3.12872280e+03 -5.71100000e-04 -1.65360702e-12 7.09309465e-02 5.55536264e-02 9.19039276e-02 6.10912514e-02 2.32287022e-03 7.18197378e-01 3.12872280e+03 -5.71200000e-04 -1.65360702e-12 7.09309407e-02 5.55536158e-02 9.19039344e-02 6.10912623e-02 2.32286900e-03 7.18197378e-01 3.12872280e+03 -5.71300000e-04 -1.65360702e-12 7.09309348e-02 5.55536052e-02 9.19039411e-02 6.10912732e-02 2.32286778e-03 7.18197378e-01 3.12872280e+03 -5.71400000e-04 -1.65360702e-12 7.09309290e-02 5.55535947e-02 9.19039478e-02 6.10912840e-02 2.32286656e-03 7.18197378e-01 3.12872280e+03 -5.71500000e-04 -1.65360702e-12 7.09309233e-02 5.55535841e-02 9.19039546e-02 6.10912949e-02 2.32286535e-03 7.18197378e-01 3.12872280e+03 -5.71600000e-04 -1.65360702e-12 7.09309175e-02 5.55535736e-02 9.19039612e-02 6.10913057e-02 2.32286414e-03 7.18197378e-01 3.12872280e+03 -5.71700000e-04 -1.65360702e-12 7.09309117e-02 5.55535631e-02 9.19039679e-02 6.10913164e-02 2.32286294e-03 7.18197378e-01 3.12872280e+03 -5.71800000e-04 -1.65360702e-12 7.09309060e-02 5.55535527e-02 9.19039746e-02 6.10913272e-02 2.32286173e-03 7.18197378e-01 3.12872280e+03 -5.71900000e-04 -1.65360702e-12 7.09309003e-02 5.55535422e-02 9.19039812e-02 6.10913379e-02 2.32286053e-03 7.18197378e-01 3.12872280e+03 -5.72000000e-04 -1.65360702e-12 7.09308945e-02 5.55535318e-02 9.19039878e-02 6.10913486e-02 2.32285934e-03 7.18197378e-01 3.12872280e+03 -5.72100000e-04 -1.65360702e-12 7.09308888e-02 5.55535215e-02 9.19039944e-02 6.10913593e-02 2.32285814e-03 7.18197378e-01 3.12872280e+03 -5.72200000e-04 -1.65360702e-12 7.09308832e-02 5.55535111e-02 9.19040010e-02 6.10913699e-02 2.32285695e-03 7.18197378e-01 3.12872280e+03 -5.72300000e-04 -1.65360702e-12 7.09308775e-02 5.55535008e-02 9.19040076e-02 6.10913805e-02 2.32285577e-03 7.18197378e-01 3.12872280e+03 -5.72400000e-04 -1.65360702e-12 7.09308718e-02 5.55534905e-02 9.19040142e-02 6.10913911e-02 2.32285458e-03 7.18197378e-01 3.12872280e+03 -5.72500000e-04 -1.65360702e-12 7.09308662e-02 5.55534802e-02 9.19040207e-02 6.10914017e-02 2.32285340e-03 7.18197378e-01 3.12872280e+03 -5.72600000e-04 -1.65360702e-12 7.09308606e-02 5.55534700e-02 9.19040272e-02 6.10914122e-02 2.32285222e-03 7.18197378e-01 3.12872280e+03 -5.72700000e-04 -1.65360702e-12 7.09308549e-02 5.55534597e-02 9.19040337e-02 6.10914227e-02 2.32285105e-03 7.18197378e-01 3.12872280e+03 -5.72800000e-04 -1.65360702e-12 7.09308493e-02 5.55534495e-02 9.19040402e-02 6.10914332e-02 2.32284987e-03 7.18197378e-01 3.12872280e+03 -5.72900000e-04 -1.65360702e-12 7.09308438e-02 5.55534394e-02 9.19040467e-02 6.10914436e-02 2.32284871e-03 7.18197378e-01 3.12872280e+03 -5.73000000e-04 -1.65360702e-12 7.09308382e-02 5.55534292e-02 9.19040531e-02 6.10914541e-02 2.32284754e-03 7.18197378e-01 3.12872280e+03 -5.73100000e-04 -1.65360702e-12 7.09308326e-02 5.55534191e-02 9.19040596e-02 6.10914645e-02 2.32284638e-03 7.18197378e-01 3.12872280e+03 -5.73200000e-04 -1.65360702e-12 7.09308271e-02 5.55534090e-02 9.19040660e-02 6.10914748e-02 2.32284521e-03 7.18197378e-01 3.12872280e+03 -5.73300000e-04 -1.65360702e-12 7.09308216e-02 5.55533990e-02 9.19040724e-02 6.10914852e-02 2.32284406e-03 7.18197378e-01 3.12872280e+03 -5.73400000e-04 -1.65360702e-12 7.09308160e-02 5.55533889e-02 9.19040788e-02 6.10914955e-02 2.32284290e-03 7.18197378e-01 3.12872280e+03 -5.73500000e-04 -1.65360702e-12 7.09308105e-02 5.55533789e-02 9.19040852e-02 6.10915058e-02 2.32284175e-03 7.18197378e-01 3.12872502e+03 -5.73600000e-04 -1.65360702e-12 7.09308051e-02 5.55533689e-02 9.19040915e-02 6.10915160e-02 2.32284060e-03 7.18197378e-01 3.12872502e+03 -5.73700000e-04 -1.65360702e-12 7.09307996e-02 5.55533590e-02 9.19040979e-02 6.10915263e-02 2.32283946e-03 7.18197378e-01 3.12872502e+03 -5.73800000e-04 -1.65360702e-12 7.09307941e-02 5.55533490e-02 9.19041042e-02 6.10915365e-02 2.32283831e-03 7.18197378e-01 3.12872502e+03 -5.73900000e-04 -1.65360702e-12 7.09307887e-02 5.55533391e-02 9.19041105e-02 6.10915467e-02 2.32283717e-03 7.18197378e-01 3.12872502e+03 -5.74000000e-04 -1.65360702e-12 7.09307833e-02 5.55533292e-02 9.19041168e-02 6.10915568e-02 2.32283604e-03 7.18197378e-01 3.12872502e+03 -5.74100000e-04 -1.65360702e-12 7.09307778e-02 5.55533194e-02 9.19041231e-02 6.10915670e-02 2.32283490e-03 7.18197378e-01 3.12872502e+03 -5.74200000e-04 -1.65360702e-12 7.09307724e-02 5.55533095e-02 9.19041293e-02 6.10915771e-02 2.32283377e-03 7.18197378e-01 3.12872502e+03 -5.74300000e-04 -1.65360702e-12 7.09307671e-02 5.55532997e-02 9.19041356e-02 6.10915872e-02 2.32283264e-03 7.18197378e-01 3.12872502e+03 -5.74400000e-04 -1.65360702e-12 7.09307617e-02 5.55532900e-02 9.19041418e-02 6.10915972e-02 2.32283152e-03 7.18197378e-01 3.12872502e+03 -5.74500000e-04 -1.65360702e-12 7.09307563e-02 5.55532802e-02 9.19041480e-02 6.10916072e-02 2.32283040e-03 7.18197378e-01 3.12872502e+03 -5.74600000e-04 -1.65360702e-12 7.09307510e-02 5.55532705e-02 9.19041542e-02 6.10916172e-02 2.32282928e-03 7.18197378e-01 3.12872502e+03 -5.74700000e-04 -1.65360702e-12 7.09307456e-02 5.55532608e-02 9.19041604e-02 6.10916272e-02 2.32282816e-03 7.18197378e-01 3.12872502e+03 -5.74800000e-04 -1.65360702e-12 7.09307403e-02 5.55532511e-02 9.19041665e-02 6.10916372e-02 2.32282705e-03 7.18197378e-01 3.12872502e+03 -5.74900000e-04 -1.65360702e-12 7.09307350e-02 5.55532414e-02 9.19041727e-02 6.10916471e-02 2.32282594e-03 7.18197378e-01 3.12872502e+03 -5.75000000e-04 -1.65360702e-12 7.09307297e-02 5.55532318e-02 9.19041788e-02 6.10916570e-02 2.32282483e-03 7.18197378e-01 3.12872502e+03 -5.75100000e-04 -1.65360702e-12 7.09307244e-02 5.55532222e-02 9.19041849e-02 6.10916669e-02 2.32282372e-03 7.18197378e-01 3.12872502e+03 -5.75200000e-04 -1.65360702e-12 7.09307192e-02 5.55532126e-02 9.19041910e-02 6.10916767e-02 2.32282262e-03 7.18197378e-01 3.12872502e+03 -5.75300000e-04 -1.65360702e-12 7.09307139e-02 5.55532030e-02 9.19041971e-02 6.10916866e-02 2.32282152e-03 7.18197378e-01 3.12872502e+03 -5.75400000e-04 -1.65360702e-12 7.09307087e-02 5.55531935e-02 9.19042032e-02 6.10916964e-02 2.32282042e-03 7.18197378e-01 3.12872502e+03 -5.75500000e-04 -1.65360702e-12 7.09307035e-02 5.55531840e-02 9.19042092e-02 6.10917061e-02 2.32281933e-03 7.18197378e-01 3.12872502e+03 -5.75600000e-04 -1.65360702e-12 7.09306983e-02 5.55531745e-02 9.19042153e-02 6.10917159e-02 2.32281824e-03 7.18197378e-01 3.12872502e+03 -5.75700000e-04 -1.65360702e-12 7.09306931e-02 5.55531650e-02 9.19042213e-02 6.10917256e-02 2.32281715e-03 7.18197378e-01 3.12872502e+03 -5.75800000e-04 -1.65360702e-12 7.09306879e-02 5.55531556e-02 9.19042273e-02 6.10917353e-02 2.32281607e-03 7.18197378e-01 3.12872502e+03 -5.75900000e-04 -1.65360702e-12 7.09306827e-02 5.55531462e-02 9.19042333e-02 6.10917450e-02 2.32281498e-03 7.18197378e-01 3.12872502e+03 -5.76000000e-04 -1.65360702e-12 7.09306775e-02 5.55531368e-02 9.19042393e-02 6.10917547e-02 2.32281390e-03 7.18197378e-01 3.12872502e+03 -5.76100000e-04 -1.65360702e-12 7.09306724e-02 5.55531274e-02 9.19042452e-02 6.10917643e-02 2.32281283e-03 7.18197378e-01 3.12872502e+03 -5.76200000e-04 -1.65360702e-12 7.09306673e-02 5.55531181e-02 9.19042512e-02 6.10917739e-02 2.32281175e-03 7.18197378e-01 3.12872502e+03 -5.76300000e-04 -1.65360702e-12 7.09306622e-02 5.55531087e-02 9.19042571e-02 6.10917835e-02 2.32281068e-03 7.18197378e-01 3.12872502e+03 -5.76400000e-04 -1.65360702e-12 7.09306570e-02 5.55530995e-02 9.19042630e-02 6.10917930e-02 2.32280961e-03 7.18197378e-01 3.12872502e+03 -5.76500000e-04 -1.65360702e-12 7.09306520e-02 5.55530902e-02 9.19042689e-02 6.10918025e-02 2.32280854e-03 7.18197378e-01 3.12872502e+03 -5.76600000e-04 -1.65360702e-12 7.09306469e-02 5.55530809e-02 9.19042748e-02 6.10918120e-02 2.32280748e-03 7.18197378e-01 3.12872502e+03 -5.76700000e-04 -1.65360702e-12 7.09306418e-02 5.55530717e-02 9.19042807e-02 6.10918215e-02 2.32280642e-03 7.18197378e-01 3.12872502e+03 -5.76800000e-04 -1.65360702e-12 7.09306368e-02 5.55530625e-02 9.19042865e-02 6.10918310e-02 2.32280536e-03 7.18197378e-01 3.12872502e+03 -5.76900000e-04 -1.65360702e-12 7.09306317e-02 5.55530533e-02 9.19042924e-02 6.10918404e-02 2.32280431e-03 7.18197378e-01 3.12872704e+03 -5.77000000e-04 -1.65360702e-12 7.09306267e-02 5.55530442e-02 9.19042982e-02 6.10918498e-02 2.32280325e-03 7.18197378e-01 3.12872704e+03 -5.77100000e-04 -1.65360702e-12 7.09306217e-02 5.55530351e-02 9.19043040e-02 6.10918592e-02 2.32280220e-03 7.18197378e-01 3.12872704e+03 -5.77200000e-04 -1.65360702e-12 7.09306167e-02 5.55530259e-02 9.19043098e-02 6.10918686e-02 2.32280116e-03 7.18197378e-01 3.12872704e+03 -5.77300000e-04 -1.65360702e-12 7.09306117e-02 5.55530169e-02 9.19043156e-02 6.10918779e-02 2.32280011e-03 7.18197378e-01 3.12872704e+03 -5.77400000e-04 -1.65360702e-12 7.09306067e-02 5.55530078e-02 9.19043214e-02 6.10918872e-02 2.32279907e-03 7.18197378e-01 3.12872704e+03 -5.77500000e-04 -1.65360702e-12 7.09306017e-02 5.55529988e-02 9.19043271e-02 6.10918965e-02 2.32279803e-03 7.18197378e-01 3.12872704e+03 -5.77600000e-04 -1.65360702e-12 7.09305968e-02 5.55529898e-02 9.19043328e-02 6.10919058e-02 2.32279699e-03 7.18197378e-01 3.12872704e+03 -5.77700000e-04 -1.65360702e-12 7.09305919e-02 5.55529808e-02 9.19043386e-02 6.10919150e-02 2.32279596e-03 7.18197378e-01 3.12872704e+03 -5.77800000e-04 -1.65360702e-12 7.09305869e-02 5.55529718e-02 9.19043443e-02 6.10919242e-02 2.32279493e-03 7.18197378e-01 3.12872704e+03 -5.77900000e-04 -1.65360702e-12 7.09305820e-02 5.55529629e-02 9.19043500e-02 6.10919334e-02 2.32279390e-03 7.18197378e-01 3.12872704e+03 -5.78000000e-04 -1.65360702e-12 7.09305771e-02 5.55529539e-02 9.19043556e-02 6.10919426e-02 2.32279287e-03 7.18197378e-01 3.12872704e+03 -5.78100000e-04 -1.65360702e-12 7.09305722e-02 5.55529450e-02 9.19043613e-02 6.10919517e-02 2.32279185e-03 7.18197378e-01 3.12872704e+03 -5.78200000e-04 -1.65360702e-12 7.09305674e-02 5.55529362e-02 9.19043670e-02 6.10919609e-02 2.32279083e-03 7.18197378e-01 3.12872704e+03 -5.78300000e-04 -1.65360702e-12 7.09305625e-02 5.55529273e-02 9.19043726e-02 6.10919700e-02 2.32278981e-03 7.18197378e-01 3.12872704e+03 -5.78400000e-04 -1.65360702e-12 7.09305576e-02 5.55529185e-02 9.19043782e-02 6.10919790e-02 2.32278880e-03 7.18197378e-01 3.12872704e+03 -5.78500000e-04 -1.65360702e-12 7.09305528e-02 5.55529097e-02 9.19043838e-02 6.10919881e-02 2.32278778e-03 7.18197378e-01 3.12872704e+03 -5.78600000e-04 -1.65360702e-12 7.09305480e-02 5.55529009e-02 9.19043894e-02 6.10919971e-02 2.32278677e-03 7.18197378e-01 3.12872704e+03 -5.78700000e-04 -1.65360702e-12 7.09305432e-02 5.55528921e-02 9.19043950e-02 6.10920061e-02 2.32278576e-03 7.18197378e-01 3.12872704e+03 -5.78800000e-04 -1.65360702e-12 7.09305384e-02 5.55528834e-02 9.19044005e-02 6.10920151e-02 2.32278476e-03 7.18197378e-01 3.12872704e+03 -5.78900000e-04 -1.65360702e-12 7.09305336e-02 5.55528747e-02 9.19044061e-02 6.10920241e-02 2.32278376e-03 7.18197378e-01 3.12872704e+03 -5.79000000e-04 -1.65360702e-12 7.09305288e-02 5.55528660e-02 9.19044116e-02 6.10920330e-02 2.32278276e-03 7.18197378e-01 3.12872704e+03 -5.79100000e-04 -1.65360702e-12 7.09305240e-02 5.55528573e-02 9.19044172e-02 6.10920419e-02 2.32278176e-03 7.18197378e-01 3.12872704e+03 -5.79200000e-04 -1.65360702e-12 7.09305193e-02 5.55528486e-02 9.19044227e-02 6.10920508e-02 2.32278076e-03 7.18197378e-01 3.12872704e+03 -5.79300000e-04 -1.65360702e-12 7.09305145e-02 5.55528400e-02 9.19044282e-02 6.10920597e-02 2.32277977e-03 7.18197378e-01 3.12872704e+03 -5.79400000e-04 -1.65360702e-12 7.09305098e-02 5.55528314e-02 9.19044336e-02 6.10920685e-02 2.32277878e-03 7.18197378e-01 3.12872704e+03 -5.79500000e-04 -1.65360702e-12 7.09305051e-02 5.55528228e-02 9.19044391e-02 6.10920773e-02 2.32277779e-03 7.18197378e-01 3.12872704e+03 -5.79600000e-04 -1.65360702e-12 7.09305004e-02 5.55528143e-02 9.19044445e-02 6.10920861e-02 2.32277681e-03 7.18197378e-01 3.12872704e+03 -5.79700000e-04 -1.65360702e-12 7.09304957e-02 5.55528057e-02 9.19044500e-02 6.10920949e-02 2.32277583e-03 7.18197378e-01 3.12872704e+03 -5.79800000e-04 -1.65360702e-12 7.09304910e-02 5.55527972e-02 9.19044554e-02 6.10921037e-02 2.32277485e-03 7.18197378e-01 3.12872704e+03 -5.79900000e-04 -1.65360702e-12 7.09304864e-02 5.55527887e-02 9.19044608e-02 6.10921124e-02 2.32277387e-03 7.18197378e-01 3.12872704e+03 -5.80000000e-04 -1.65360702e-12 7.09304817e-02 5.55527802e-02 9.19044662e-02 6.10921211e-02 2.32277289e-03 7.18197378e-01 3.12872704e+03 -5.80100000e-04 -1.65360702e-12 7.09304771e-02 5.55527718e-02 9.19044716e-02 6.10921298e-02 2.32277192e-03 7.18197378e-01 3.12872704e+03 -5.80200000e-04 -1.65360702e-12 7.09304724e-02 5.55527633e-02 9.19044769e-02 6.10921385e-02 2.32277095e-03 7.18197378e-01 3.12872704e+03 -5.80300000e-04 -1.65360702e-12 7.09304678e-02 5.55527549e-02 9.19044823e-02 6.10921471e-02 2.32276999e-03 7.18197378e-01 3.12872704e+03 -5.80400000e-04 -1.65360702e-12 7.09304632e-02 5.55527465e-02 9.19044876e-02 6.10921557e-02 2.32276902e-03 7.18197378e-01 3.12872889e+03 -5.80500000e-04 -1.65360702e-12 7.09304586e-02 5.55527382e-02 9.19044930e-02 6.10921643e-02 2.32276806e-03 7.18197378e-01 3.12872889e+03 -5.80600000e-04 -1.65360702e-12 7.09304540e-02 5.55527298e-02 9.19044983e-02 6.10921729e-02 2.32276710e-03 7.18197378e-01 3.12872889e+03 -5.80700000e-04 -1.65360702e-12 7.09304494e-02 5.55527215e-02 9.19045036e-02 6.10921815e-02 2.32276614e-03 7.18197378e-01 3.12872889e+03 -5.80800000e-04 -1.65360702e-12 7.09304449e-02 5.55527132e-02 9.19045089e-02 6.10921900e-02 2.32276519e-03 7.18197378e-01 3.12872889e+03 -5.80900000e-04 -1.65360702e-12 7.09304403e-02 5.55527049e-02 9.19045141e-02 6.10921985e-02 2.32276423e-03 7.18197378e-01 3.12872889e+03 -5.81000000e-04 -1.65360702e-12 7.09304358e-02 5.55526967e-02 9.19045194e-02 6.10922070e-02 2.32276328e-03 7.18197378e-01 3.12872889e+03 -5.81100000e-04 -1.65360702e-12 7.09304313e-02 5.55526884e-02 9.19045246e-02 6.10922155e-02 2.32276234e-03 7.18197378e-01 3.12872889e+03 -5.81200000e-04 -1.65360702e-12 7.09304268e-02 5.55526802e-02 9.19045299e-02 6.10922239e-02 2.32276139e-03 7.18197378e-01 3.12872889e+03 -5.81300000e-04 -1.65360702e-12 7.09304223e-02 5.55526720e-02 9.19045351e-02 6.10922324e-02 2.32276045e-03 7.18197378e-01 3.12872889e+03 -5.81400000e-04 -1.65360702e-12 7.09304178e-02 5.55526638e-02 9.19045403e-02 6.10922408e-02 2.32275951e-03 7.18197378e-01 3.12872889e+03 -5.81500000e-04 -1.65360702e-12 7.09304133e-02 5.55526557e-02 9.19045455e-02 6.10922491e-02 2.32275857e-03 7.18197378e-01 3.12872889e+03 -5.81600000e-04 -1.65360702e-12 7.09304088e-02 5.55526475e-02 9.19045507e-02 6.10922575e-02 2.32275763e-03 7.18197378e-01 3.12872889e+03 -5.81700000e-04 -1.65360702e-12 7.09304044e-02 5.55526394e-02 9.19045558e-02 6.10922658e-02 2.32275670e-03 7.18197378e-01 3.12872889e+03 -5.81800000e-04 -1.65360702e-12 7.09303999e-02 5.55526313e-02 9.19045610e-02 6.10922742e-02 2.32275577e-03 7.18197378e-01 3.12872889e+03 -5.81900000e-04 -1.65360702e-12 7.09303955e-02 5.55526233e-02 9.19045661e-02 6.10922825e-02 2.32275484e-03 7.18197378e-01 3.12872889e+03 -5.82000000e-04 -1.65360702e-12 7.09303911e-02 5.55526152e-02 9.19045712e-02 6.10922907e-02 2.32275392e-03 7.18197378e-01 3.12872889e+03 -5.82100000e-04 -1.65360702e-12 7.09303867e-02 5.55526072e-02 9.19045763e-02 6.10922990e-02 2.32275299e-03 7.18197378e-01 3.12872889e+03 -5.82200000e-04 -1.65360702e-12 7.09303823e-02 5.55525992e-02 9.19045814e-02 6.10923072e-02 2.32275207e-03 7.18197378e-01 3.12872889e+03 -5.82300000e-04 -1.65360702e-12 7.09303779e-02 5.55525912e-02 9.19045865e-02 6.10923154e-02 2.32275115e-03 7.18197378e-01 3.12872889e+03 -5.82400000e-04 -1.65360702e-12 7.09303735e-02 5.55525832e-02 9.19045916e-02 6.10923236e-02 2.32275023e-03 7.18197378e-01 3.12872889e+03 -5.82500000e-04 -1.65360702e-12 7.09303691e-02 5.55525753e-02 9.19045967e-02 6.10923318e-02 2.32274932e-03 7.18197378e-01 3.12872889e+03 -5.82600000e-04 -1.65360702e-12 7.09303648e-02 5.55525673e-02 9.19046017e-02 6.10923400e-02 2.32274841e-03 7.18197378e-01 3.12872889e+03 -5.82700000e-04 -1.65360702e-12 7.09303604e-02 5.55525594e-02 9.19046067e-02 6.10923481e-02 2.32274750e-03 7.18197378e-01 3.12872889e+03 -5.82800000e-04 -1.65360702e-12 7.09303561e-02 5.55525515e-02 9.19046118e-02 6.10923562e-02 2.32274659e-03 7.18197378e-01 3.12872889e+03 -5.82900000e-04 -1.65360702e-12 7.09303518e-02 5.55525437e-02 9.19046168e-02 6.10923643e-02 2.32274569e-03 7.18197378e-01 3.12872889e+03 -5.83000000e-04 -1.65360702e-12 7.09303475e-02 5.55525358e-02 9.19046218e-02 6.10923723e-02 2.32274478e-03 7.18197378e-01 3.12872889e+03 -5.83100000e-04 -1.65360702e-12 7.09303432e-02 5.55525280e-02 9.19046267e-02 6.10923804e-02 2.32274388e-03 7.18197378e-01 3.12872889e+03 -5.83200000e-04 -1.65360702e-12 7.09303389e-02 5.55525202e-02 9.19046317e-02 6.10923884e-02 2.32274299e-03 7.18197378e-01 3.12872889e+03 -5.83300000e-04 -1.65360702e-12 7.09303346e-02 5.55525124e-02 9.19046367e-02 6.10923964e-02 2.32274209e-03 7.18197378e-01 3.12872889e+03 -5.83400000e-04 -1.65360702e-12 7.09303303e-02 5.55525046e-02 9.19046416e-02 6.10924044e-02 2.32274120e-03 7.18197378e-01 3.12872889e+03 -5.83500000e-04 -1.65360702e-12 7.09303261e-02 5.55524969e-02 9.19046465e-02 6.10924124e-02 2.32274031e-03 7.18197378e-01 3.12872889e+03 -5.83600000e-04 -1.65360702e-12 7.09303218e-02 5.55524891e-02 9.19046515e-02 6.10924203e-02 2.32273942e-03 7.18197378e-01 3.12872889e+03 -5.83700000e-04 -1.65360702e-12 7.09303176e-02 5.55524814e-02 9.19046564e-02 6.10924282e-02 2.32273853e-03 7.18197378e-01 3.12872889e+03 -5.83800000e-04 -1.65360702e-12 7.09303134e-02 5.55524737e-02 9.19046613e-02 6.10924361e-02 2.32273765e-03 7.18197378e-01 3.12872889e+03 -5.83900000e-04 -1.65360702e-12 7.09303092e-02 5.55524661e-02 9.19046661e-02 6.10924440e-02 2.32273676e-03 7.18197378e-01 3.12873058e+03 -5.84000000e-04 -1.65360702e-12 7.09303049e-02 5.55524584e-02 9.19046710e-02 6.10924519e-02 2.32273588e-03 7.18197378e-01 3.12873058e+03 -5.84100000e-04 -1.65360702e-12 7.09303008e-02 5.55524508e-02 9.19046759e-02 6.10924597e-02 2.32273501e-03 7.18197378e-01 3.12873058e+03 -5.84200000e-04 -1.65360702e-12 7.09302966e-02 5.55524432e-02 9.19046807e-02 6.10924675e-02 2.32273413e-03 7.18197378e-01 3.12873058e+03 -5.84300000e-04 -1.65360702e-12 7.09302924e-02 5.55524356e-02 9.19046855e-02 6.10924753e-02 2.32273326e-03 7.18197378e-01 3.12873058e+03 -5.84400000e-04 -1.65360702e-12 7.09302883e-02 5.55524280e-02 9.19046904e-02 6.10924831e-02 2.32273239e-03 7.18197378e-01 3.12873058e+03 -5.84500000e-04 -1.65360702e-12 7.09302841e-02 5.55524205e-02 9.19046952e-02 6.10924909e-02 2.32273152e-03 7.18197378e-01 3.12873058e+03 -5.84600000e-04 -1.65360702e-12 7.09302800e-02 5.55524129e-02 9.19047000e-02 6.10924986e-02 2.32273065e-03 7.18197378e-01 3.12873058e+03 -5.84700000e-04 -1.65360702e-12 7.09302758e-02 5.55524054e-02 9.19047047e-02 6.10925064e-02 2.32272979e-03 7.18197378e-01 3.12873058e+03 -5.84800000e-04 -1.65360702e-12 7.09302717e-02 5.55523979e-02 9.19047095e-02 6.10925141e-02 2.32272893e-03 7.18197378e-01 3.12873058e+03 -5.84900000e-04 -1.65360702e-12 7.09302676e-02 5.55523905e-02 9.19047143e-02 6.10925217e-02 2.32272807e-03 7.18197378e-01 3.12873058e+03 -5.85000000e-04 -1.65360702e-12 7.09302635e-02 5.55523830e-02 9.19047190e-02 6.10925294e-02 2.32272721e-03 7.18197378e-01 3.12873058e+03 -5.85100000e-04 -1.65360702e-12 7.09302594e-02 5.55523756e-02 9.19047238e-02 6.10925370e-02 2.32272635e-03 7.18197378e-01 3.12873058e+03 -5.85200000e-04 -1.65360702e-12 7.09302554e-02 5.55523681e-02 9.19047285e-02 6.10925447e-02 2.32272550e-03 7.18197378e-01 3.12873058e+03 -5.85300000e-04 -1.65360702e-12 7.09302513e-02 5.55523607e-02 9.19047332e-02 6.10925523e-02 2.32272465e-03 7.18197378e-01 3.12873058e+03 -5.85400000e-04 -1.65360702e-12 7.09302472e-02 5.55523534e-02 9.19047379e-02 6.10925599e-02 2.32272380e-03 7.18197378e-01 3.12873058e+03 -5.85500000e-04 -1.65360702e-12 7.09302432e-02 5.55523460e-02 9.19047426e-02 6.10925674e-02 2.32272295e-03 7.18197378e-01 3.12873058e+03 -5.85600000e-04 -1.65360702e-12 7.09302392e-02 5.55523387e-02 9.19047472e-02 6.10925750e-02 2.32272211e-03 7.18197378e-01 3.12873058e+03 -5.85700000e-04 -1.65360702e-12 7.09302351e-02 5.55523313e-02 9.19047519e-02 6.10925825e-02 2.32272127e-03 7.18197378e-01 3.12873058e+03 -5.85800000e-04 -1.65360702e-12 7.09302311e-02 5.55523240e-02 9.19047565e-02 6.10925900e-02 2.32272043e-03 7.18197378e-01 3.12873058e+03 -5.85900000e-04 -1.65360702e-12 7.09302271e-02 5.55523168e-02 9.19047612e-02 6.10925975e-02 2.32271959e-03 7.18197378e-01 3.12873058e+03 -5.86000000e-04 -1.65360702e-12 7.09302231e-02 5.55523095e-02 9.19047658e-02 6.10926050e-02 2.32271875e-03 7.18197378e-01 3.12873058e+03 -5.86100000e-04 -1.65360702e-12 7.09302192e-02 5.55523022e-02 9.19047704e-02 6.10926124e-02 2.32271792e-03 7.18197378e-01 3.12873058e+03 -5.86200000e-04 -1.65360702e-12 7.09302152e-02 5.55522950e-02 9.19047750e-02 6.10926198e-02 2.32271709e-03 7.18197378e-01 3.12873058e+03 -5.86300000e-04 -1.65360702e-12 7.09302112e-02 5.55522878e-02 9.19047796e-02 6.10926273e-02 2.32271626e-03 7.18197378e-01 3.12873058e+03 -5.86400000e-04 -1.65360702e-12 7.09302073e-02 5.55522806e-02 9.19047842e-02 6.10926346e-02 2.32271543e-03 7.18197378e-01 3.12873058e+03 -5.86500000e-04 -1.65360702e-12 7.09302033e-02 5.55522734e-02 9.19047888e-02 6.10926420e-02 2.32271461e-03 7.18197378e-01 3.12873058e+03 -5.86600000e-04 -1.65360702e-12 7.09301994e-02 5.55522663e-02 9.19047933e-02 6.10926494e-02 2.32271378e-03 7.18197378e-01 3.12873058e+03 -5.86700000e-04 -1.65360702e-12 7.09301955e-02 5.55522591e-02 9.19047979e-02 6.10926567e-02 2.32271296e-03 7.18197378e-01 3.12873058e+03 -5.86800000e-04 -1.65360702e-12 7.09301916e-02 5.55522520e-02 9.19048024e-02 6.10926640e-02 2.32271214e-03 7.18197378e-01 3.12873058e+03 -5.86900000e-04 -1.65360702e-12 7.09301877e-02 5.55522449e-02 9.19048069e-02 6.10926713e-02 2.32271133e-03 7.18197378e-01 3.12873058e+03 -5.87000000e-04 -1.65360702e-12 7.09301838e-02 5.55522378e-02 9.19048114e-02 6.10926786e-02 2.32271051e-03 7.18197378e-01 3.12873058e+03 -5.87100000e-04 -1.65360702e-12 7.09301799e-02 5.55522308e-02 9.19048159e-02 6.10926859e-02 2.32270970e-03 7.18197378e-01 3.12873058e+03 -5.87200000e-04 -1.65360702e-12 7.09301760e-02 5.55522237e-02 9.19048204e-02 6.10926931e-02 2.32270889e-03 7.18197378e-01 3.12873058e+03 -5.87300000e-04 -1.65360702e-12 7.09301722e-02 5.55522167e-02 9.19048249e-02 6.10927003e-02 2.32270808e-03 7.18197378e-01 3.12873058e+03 -5.87400000e-04 -1.65360702e-12 7.09301683e-02 5.55522097e-02 9.19048293e-02 6.10927075e-02 2.32270728e-03 7.18197378e-01 3.12873213e+03 -5.87500000e-04 -1.65360702e-12 7.09301645e-02 5.55522027e-02 9.19048338e-02 6.10927147e-02 2.32270647e-03 7.18197378e-01 3.12873213e+03 -5.87600000e-04 -1.65360702e-12 7.09301606e-02 5.55521957e-02 9.19048382e-02 6.10927219e-02 2.32270567e-03 7.18197378e-01 3.12873213e+03 -5.87700000e-04 -1.65360702e-12 7.09301568e-02 5.55521888e-02 9.19048426e-02 6.10927291e-02 2.32270487e-03 7.18197378e-01 3.12873213e+03 -5.87800000e-04 -1.65360702e-12 7.09301530e-02 5.55521818e-02 9.19048471e-02 6.10927362e-02 2.32270407e-03 7.18197378e-01 3.12873213e+03 -5.87900000e-04 -1.65360702e-12 7.09301492e-02 5.55521749e-02 9.19048515e-02 6.10927433e-02 2.32270327e-03 7.18197378e-01 3.12873213e+03 -5.88000000e-04 -1.65360702e-12 7.09301454e-02 5.55521680e-02 9.19048559e-02 6.10927504e-02 2.32270248e-03 7.18197378e-01 3.12873213e+03 -5.88100000e-04 -1.65360702e-12 7.09301416e-02 5.55521611e-02 9.19048602e-02 6.10927575e-02 2.32270169e-03 7.18197378e-01 3.12873213e+03 -5.88200000e-04 -1.65360702e-12 7.09301379e-02 5.55521542e-02 9.19048646e-02 6.10927645e-02 2.32270090e-03 7.18197378e-01 3.12873213e+03 -5.88300000e-04 -1.65360702e-12 7.09301341e-02 5.55521474e-02 9.19048690e-02 6.10927716e-02 2.32270011e-03 7.18197378e-01 3.12873213e+03 -5.88400000e-04 -1.65360702e-12 7.09301303e-02 5.55521406e-02 9.19048733e-02 6.10927786e-02 2.32269932e-03 7.18197378e-01 3.12873213e+03 -5.88500000e-04 -1.65360702e-12 7.09301266e-02 5.55521337e-02 9.19048777e-02 6.10927856e-02 2.32269854e-03 7.18197378e-01 3.12873213e+03 -5.88600000e-04 -1.65360702e-12 7.09301229e-02 5.55521269e-02 9.19048820e-02 6.10927926e-02 2.32269776e-03 7.18197378e-01 3.12873213e+03 -5.88700000e-04 -1.65360702e-12 7.09301191e-02 5.55521202e-02 9.19048863e-02 6.10927996e-02 2.32269698e-03 7.18197378e-01 3.12873213e+03 -5.88800000e-04 -1.65360702e-12 7.09301154e-02 5.55521134e-02 9.19048906e-02 6.10928065e-02 2.32269620e-03 7.18197378e-01 3.12873213e+03 -5.88900000e-04 -1.65360702e-12 7.09301117e-02 5.55521066e-02 9.19048949e-02 6.10928134e-02 2.32269543e-03 7.18197378e-01 3.12873213e+03 -5.89000000e-04 -1.65360702e-12 7.09301080e-02 5.55520999e-02 9.19048992e-02 6.10928204e-02 2.32269465e-03 7.18197378e-01 3.12873213e+03 -5.89100000e-04 -1.65360702e-12 7.09301043e-02 5.55520932e-02 9.19049035e-02 6.10928273e-02 2.32269388e-03 7.18197378e-01 3.12873213e+03 -5.89200000e-04 -1.65360702e-12 7.09301007e-02 5.55520865e-02 9.19049077e-02 6.10928341e-02 2.32269311e-03 7.18197378e-01 3.12873213e+03 -5.89300000e-04 -1.65360702e-12 7.09300970e-02 5.55520798e-02 9.19049120e-02 6.10928410e-02 2.32269234e-03 7.18197378e-01 3.12873213e+03 -5.89400000e-04 -1.65360702e-12 7.09300933e-02 5.55520732e-02 9.19049162e-02 6.10928479e-02 2.32269158e-03 7.18197378e-01 3.12873213e+03 -5.89500000e-04 -1.65360702e-12 7.09300897e-02 5.55520665e-02 9.19049204e-02 6.10928547e-02 2.32269081e-03 7.18197378e-01 3.12873213e+03 -5.89600000e-04 -1.65360702e-12 7.09300861e-02 5.55520599e-02 9.19049247e-02 6.10928615e-02 2.32269005e-03 7.18197378e-01 3.12873213e+03 -5.89700000e-04 -1.65360702e-12 7.09300824e-02 5.55520533e-02 9.19049289e-02 6.10928683e-02 2.32268929e-03 7.18197378e-01 3.12873213e+03 -5.89800000e-04 -1.65360702e-12 7.09300788e-02 5.55520467e-02 9.19049331e-02 6.10928751e-02 2.32268853e-03 7.18197378e-01 3.12873213e+03 -5.89900000e-04 -1.65360702e-12 7.09300752e-02 5.55520401e-02 9.19049372e-02 6.10928818e-02 2.32268777e-03 7.18197378e-01 3.12873213e+03 -5.90000000e-04 -1.65360702e-12 7.09300716e-02 5.55520336e-02 9.19049414e-02 6.10928886e-02 2.32268702e-03 7.18197378e-01 3.12873213e+03 -5.90100000e-04 -1.65360702e-12 7.09300680e-02 5.55520270e-02 9.19049456e-02 6.10928953e-02 2.32268627e-03 7.18197378e-01 3.12873213e+03 -5.90200000e-04 -1.65360702e-12 7.09300644e-02 5.55520205e-02 9.19049497e-02 6.10929020e-02 2.32268552e-03 7.18197378e-01 3.12873213e+03 -5.90300000e-04 -1.65360702e-12 7.09300608e-02 5.55520140e-02 9.19049539e-02 6.10929087e-02 2.32268477e-03 7.18197378e-01 3.12873213e+03 -5.90400000e-04 -1.65360702e-12 7.09300573e-02 5.55520075e-02 9.19049580e-02 6.10929154e-02 2.32268402e-03 7.18197378e-01 3.12873213e+03 -5.90500000e-04 -1.65360702e-12 7.09300537e-02 5.55520010e-02 9.19049621e-02 6.10929220e-02 2.32268328e-03 7.18197378e-01 3.12873213e+03 -5.90600000e-04 -1.65360702e-12 7.09300502e-02 5.55519946e-02 9.19049662e-02 6.10929286e-02 2.32268253e-03 7.18197378e-01 3.12873213e+03 -5.90700000e-04 -1.65360702e-12 7.09300466e-02 5.55519881e-02 9.19049703e-02 6.10929353e-02 2.32268179e-03 7.18197378e-01 3.12873213e+03 -5.90800000e-04 -1.65360702e-12 7.09300431e-02 5.55519817e-02 9.19049744e-02 6.10929419e-02 2.32268105e-03 7.18197378e-01 3.12873213e+03 -5.90900000e-04 -1.65360702e-12 7.09300396e-02 5.55519753e-02 9.19049785e-02 6.10929485e-02 2.32268032e-03 7.18197378e-01 3.12873354e+03 -5.91000000e-04 -1.65360702e-12 7.09300361e-02 5.55519689e-02 9.19049826e-02 6.10929550e-02 2.32267958e-03 7.18197378e-01 3.12873354e+03 -5.91100000e-04 -1.65360702e-12 7.09300326e-02 5.55519625e-02 9.19049866e-02 6.10929616e-02 2.32267885e-03 7.18197378e-01 3.12873354e+03 -5.91200000e-04 -1.65360702e-12 7.09300291e-02 5.55519562e-02 9.19049907e-02 6.10929681e-02 2.32267812e-03 7.18197378e-01 3.12873354e+03 -5.91300000e-04 -1.65360702e-12 7.09300256e-02 5.55519498e-02 9.19049947e-02 6.10929746e-02 2.32267739e-03 7.18197378e-01 3.12873354e+03 -5.91400000e-04 -1.65360702e-12 7.09300221e-02 5.55519435e-02 9.19049987e-02 6.10929811e-02 2.32267666e-03 7.18197378e-01 3.12873354e+03 -5.91500000e-04 -1.65360702e-12 7.09300186e-02 5.55519372e-02 9.19050028e-02 6.10929876e-02 2.32267593e-03 7.18197378e-01 3.12873354e+03 -5.91600000e-04 -1.65360702e-12 7.09300152e-02 5.55519309e-02 9.19050068e-02 6.10929941e-02 2.32267521e-03 7.18197378e-01 3.12873354e+03 -5.91700000e-04 -1.65360702e-12 7.09300117e-02 5.55519246e-02 9.19050108e-02 6.10930006e-02 2.32267449e-03 7.18197378e-01 3.12873354e+03 -5.91800000e-04 -1.65360702e-12 7.09300083e-02 5.55519183e-02 9.19050148e-02 6.10930070e-02 2.32267377e-03 7.18197378e-01 3.12873354e+03 -5.91900000e-04 -1.65360702e-12 7.09300049e-02 5.55519121e-02 9.19050187e-02 6.10930134e-02 2.32267305e-03 7.18197378e-01 3.12873354e+03 -5.92000000e-04 -1.65360702e-12 7.09300014e-02 5.55519059e-02 9.19050227e-02 6.10930198e-02 2.32267233e-03 7.18197378e-01 3.12873354e+03 -5.92100000e-04 -1.65360702e-12 7.09299980e-02 5.55518996e-02 9.19050267e-02 6.10930262e-02 2.32267162e-03 7.18197378e-01 3.12873354e+03 -5.92200000e-04 -1.65360702e-12 7.09299946e-02 5.55518934e-02 9.19050306e-02 6.10930326e-02 2.32267090e-03 7.18197378e-01 3.12873354e+03 -5.92300000e-04 -1.65360702e-12 7.09299912e-02 5.55518873e-02 9.19050345e-02 6.10930389e-02 2.32267019e-03 7.18197378e-01 3.12873354e+03 -5.92400000e-04 -1.65360702e-12 7.09299878e-02 5.55518811e-02 9.19050385e-02 6.10930453e-02 2.32266948e-03 7.18197378e-01 3.12873354e+03 -5.92500000e-04 -1.65360702e-12 7.09299845e-02 5.55518749e-02 9.19050424e-02 6.10930516e-02 2.32266878e-03 7.18197378e-01 3.12873354e+03 -5.92600000e-04 -1.65360702e-12 7.09299811e-02 5.55518688e-02 9.19050463e-02 6.10930579e-02 2.32266807e-03 7.18197378e-01 3.12873354e+03 -5.92700000e-04 -1.65360702e-12 7.09299777e-02 5.55518627e-02 9.19050502e-02 6.10930642e-02 2.32266737e-03 7.18197378e-01 3.12873354e+03 -5.92800000e-04 -1.65360702e-12 7.09299744e-02 5.55518566e-02 9.19050541e-02 6.10930705e-02 2.32266667e-03 7.18197378e-01 3.12873354e+03 -5.92900000e-04 -1.65360702e-12 7.09299710e-02 5.55518505e-02 9.19050579e-02 6.10930767e-02 2.32266596e-03 7.18197378e-01 3.12873354e+03 -5.93000000e-04 -1.65360702e-12 7.09299677e-02 5.55518444e-02 9.19050618e-02 6.10930830e-02 2.32266527e-03 7.18197378e-01 3.12873354e+03 -5.93100000e-04 -1.65360702e-12 7.09299644e-02 5.55518384e-02 9.19050657e-02 6.10930892e-02 2.32266457e-03 7.18197378e-01 3.12873354e+03 -5.93200000e-04 -1.65360702e-12 7.09299610e-02 5.55518323e-02 9.19050695e-02 6.10930954e-02 2.32266387e-03 7.18197378e-01 3.12873354e+03 -5.93300000e-04 -1.65360702e-12 7.09299577e-02 5.55518263e-02 9.19050733e-02 6.10931016e-02 2.32266318e-03 7.18197378e-01 3.12873354e+03 -5.93400000e-04 -1.65360702e-12 7.09299544e-02 5.55518203e-02 9.19050772e-02 6.10931078e-02 2.32266249e-03 7.18197378e-01 3.12873354e+03 -5.93500000e-04 -1.65360702e-12 7.09299511e-02 5.55518143e-02 9.19050810e-02 6.10931139e-02 2.32266180e-03 7.18197378e-01 3.12873354e+03 -5.93600000e-04 -1.65360702e-12 7.09299479e-02 5.55518083e-02 9.19050848e-02 6.10931201e-02 2.32266111e-03 7.18197378e-01 3.12873354e+03 -5.93700000e-04 -1.65360702e-12 7.09299446e-02 5.55518023e-02 9.19050886e-02 6.10931262e-02 2.32266043e-03 7.18197378e-01 3.12873354e+03 -5.93800000e-04 -1.65360702e-12 7.09299413e-02 5.55517964e-02 9.19050924e-02 6.10931323e-02 2.32265974e-03 7.18197378e-01 3.12873354e+03 -5.93900000e-04 -1.65360702e-12 7.09299381e-02 5.55517905e-02 9.19050961e-02 6.10931384e-02 2.32265906e-03 7.18197378e-01 3.12873354e+03 -5.94000000e-04 -1.65360702e-12 7.09299348e-02 5.55517845e-02 9.19050999e-02 6.10931445e-02 2.32265838e-03 7.18197378e-01 3.12873354e+03 -5.94100000e-04 -1.65360702e-12 7.09299316e-02 5.55517786e-02 9.19051037e-02 6.10931506e-02 2.32265770e-03 7.18197378e-01 3.12873354e+03 -5.94200000e-04 -1.65360702e-12 7.09299283e-02 5.55517727e-02 9.19051074e-02 6.10931566e-02 2.32265702e-03 7.18197378e-01 3.12873354e+03 -5.94300000e-04 -1.65360702e-12 7.09299251e-02 5.55517669e-02 9.19051112e-02 6.10931627e-02 2.32265635e-03 7.18197378e-01 3.12873354e+03 -5.94400000e-04 -1.65360702e-12 7.09299219e-02 5.55517610e-02 9.19051149e-02 6.10931687e-02 2.32265567e-03 7.18197378e-01 3.12873483e+03 -5.94500000e-04 -1.65360702e-12 7.09299187e-02 5.55517552e-02 9.19051186e-02 6.10931747e-02 2.32265500e-03 7.18197378e-01 3.12873483e+03 -5.94600000e-04 -1.65360702e-12 7.09299155e-02 5.55517493e-02 9.19051223e-02 6.10931807e-02 2.32265433e-03 7.18197378e-01 3.12873483e+03 -5.94700000e-04 -1.65360702e-12 7.09299123e-02 5.55517435e-02 9.19051260e-02 6.10931867e-02 2.32265366e-03 7.18197378e-01 3.12873483e+03 -5.94800000e-04 -1.65360702e-12 7.09299091e-02 5.55517377e-02 9.19051297e-02 6.10931926e-02 2.32265299e-03 7.18197378e-01 3.12873483e+03 -5.94900000e-04 -1.65360702e-12 7.09299059e-02 5.55517319e-02 9.19051334e-02 6.10931986e-02 2.32265233e-03 7.18197378e-01 3.12873483e+03 -5.95000000e-04 -1.65360702e-12 7.09299027e-02 5.55517262e-02 9.19051371e-02 6.10932045e-02 2.32265167e-03 7.18197378e-01 3.12873483e+03 -5.95100000e-04 -1.65360702e-12 7.09298996e-02 5.55517204e-02 9.19051407e-02 6.10932104e-02 2.32265100e-03 7.18197378e-01 3.12873483e+03 -5.95200000e-04 -1.65360702e-12 7.09298964e-02 5.55517147e-02 9.19051444e-02 6.10932163e-02 2.32265034e-03 7.18197378e-01 3.12873483e+03 -5.95300000e-04 -1.65360702e-12 7.09298933e-02 5.55517090e-02 9.19051480e-02 6.10932222e-02 2.32264969e-03 7.18197378e-01 3.12873483e+03 -5.95400000e-04 -1.65360702e-12 7.09298901e-02 5.55517032e-02 9.19051517e-02 6.10932281e-02 2.32264903e-03 7.18197378e-01 3.12873483e+03 -5.95500000e-04 -1.65360702e-12 7.09298870e-02 5.55516975e-02 9.19051553e-02 6.10932339e-02 2.32264837e-03 7.18197378e-01 3.12873483e+03 -5.95600000e-04 -1.65360702e-12 7.09298839e-02 5.55516919e-02 9.19051589e-02 6.10932398e-02 2.32264772e-03 7.18197378e-01 3.12873483e+03 -5.95700000e-04 -1.65360702e-12 7.09298808e-02 5.55516862e-02 9.19051625e-02 6.10932456e-02 2.32264707e-03 7.18197378e-01 3.12873483e+03 -5.95800000e-04 -1.65360702e-12 7.09298777e-02 5.55516805e-02 9.19051661e-02 6.10932514e-02 2.32264642e-03 7.18197378e-01 3.12873483e+03 -5.95900000e-04 -1.65360702e-12 7.09298746e-02 5.55516749e-02 9.19051697e-02 6.10932572e-02 2.32264577e-03 7.18197378e-01 3.12873483e+03 -5.96000000e-04 -1.65360702e-12 7.09298715e-02 5.55516693e-02 9.19051733e-02 6.10932630e-02 2.32264512e-03 7.18197378e-01 3.12873483e+03 -5.96100000e-04 -1.65360702e-12 7.09298684e-02 5.55516637e-02 9.19051768e-02 6.10932687e-02 2.32264448e-03 7.18197378e-01 3.12873483e+03 -5.96200000e-04 -1.65360702e-12 7.09298653e-02 5.55516581e-02 9.19051804e-02 6.10932745e-02 2.32264383e-03 7.18197378e-01 3.12873483e+03 -5.96300000e-04 -1.65360702e-12 7.09298623e-02 5.55516525e-02 9.19051840e-02 6.10932802e-02 2.32264319e-03 7.18197378e-01 3.12873483e+03 -5.96400000e-04 -1.65360702e-12 7.09298592e-02 5.55516469e-02 9.19051875e-02 6.10932860e-02 2.32264255e-03 7.18197378e-01 3.12873483e+03 -5.96500000e-04 -1.65360702e-12 7.09298562e-02 5.55516414e-02 9.19051910e-02 6.10932917e-02 2.32264191e-03 7.18197378e-01 3.12873483e+03 -5.96600000e-04 -1.65360702e-12 7.09298531e-02 5.55516358e-02 9.19051946e-02 6.10932974e-02 2.32264128e-03 7.18197378e-01 3.12873483e+03 -5.96700000e-04 -1.65360702e-12 7.09298501e-02 5.55516303e-02 9.19051981e-02 6.10933030e-02 2.32264064e-03 7.18197378e-01 3.12873483e+03 -5.96800000e-04 -1.65360702e-12 7.09298471e-02 5.55516248e-02 9.19052016e-02 6.10933087e-02 2.32264001e-03 7.18197378e-01 3.12873483e+03 -5.96900000e-04 -1.65360702e-12 7.09298440e-02 5.55516193e-02 9.19052051e-02 6.10933143e-02 2.32263938e-03 7.18197378e-01 3.12873483e+03 -5.97000000e-04 -1.65360702e-12 7.09298410e-02 5.55516138e-02 9.19052086e-02 6.10933200e-02 2.32263875e-03 7.18197378e-01 3.12873483e+03 -5.97100000e-04 -1.65360702e-12 7.09298380e-02 5.55516084e-02 9.19052120e-02 6.10933256e-02 2.32263812e-03 7.18197378e-01 3.12873483e+03 -5.97200000e-04 -1.65360702e-12 7.09298350e-02 5.55516029e-02 9.19052155e-02 6.10933312e-02 2.32263749e-03 7.18197378e-01 3.12873483e+03 -5.97300000e-04 -1.65360702e-12 7.09298320e-02 5.55515975e-02 9.19052190e-02 6.10933368e-02 2.32263686e-03 7.18197378e-01 3.12873483e+03 -5.97400000e-04 -1.65360702e-12 7.09298291e-02 5.55515920e-02 9.19052224e-02 6.10933424e-02 2.32263624e-03 7.18197378e-01 3.12873483e+03 -5.97500000e-04 -1.65360702e-12 7.09298261e-02 5.55515866e-02 9.19052259e-02 6.10933479e-02 2.32263562e-03 7.18197378e-01 3.12873483e+03 -5.97600000e-04 -1.65360702e-12 7.09298231e-02 5.55515812e-02 9.19052293e-02 6.10933535e-02 2.32263500e-03 7.18197378e-01 3.12873483e+03 -5.97700000e-04 -1.65360702e-12 7.09298202e-02 5.55515759e-02 9.19052327e-02 6.10933590e-02 2.32263438e-03 7.18197378e-01 3.12873483e+03 -5.97800000e-04 -1.65360702e-12 7.09298172e-02 5.55515705e-02 9.19052362e-02 6.10933645e-02 2.32263376e-03 7.18197378e-01 3.12873483e+03 -5.97900000e-04 -1.65360702e-12 7.09298143e-02 5.55515651e-02 9.19052396e-02 6.10933700e-02 2.32263314e-03 7.18197378e-01 3.12873602e+03 -5.98000000e-04 -1.65360702e-12 7.09298113e-02 5.55515598e-02 9.19052430e-02 6.10933755e-02 2.32263253e-03 7.18197378e-01 3.12873602e+03 -5.98100000e-04 -1.65360702e-12 7.09298084e-02 5.55515545e-02 9.19052464e-02 6.10933810e-02 2.32263192e-03 7.18197378e-01 3.12873602e+03 -5.98200000e-04 -1.65360702e-12 7.09298055e-02 5.55515491e-02 9.19052497e-02 6.10933865e-02 2.32263131e-03 7.18197378e-01 3.12873602e+03 -5.98300000e-04 -1.65360702e-12 7.09298026e-02 5.55515438e-02 9.19052531e-02 6.10933919e-02 2.32263070e-03 7.18197378e-01 3.12873602e+03 -5.98400000e-04 -1.65360702e-12 7.09297997e-02 5.55515386e-02 9.19052565e-02 6.10933973e-02 2.32263009e-03 7.18197378e-01 3.12873602e+03 -5.98500000e-04 -1.65360702e-12 7.09297968e-02 5.55515333e-02 9.19052598e-02 6.10934028e-02 2.32262948e-03 7.18197378e-01 3.12873602e+03 -5.98600000e-04 -1.65360702e-12 7.09297939e-02 5.55515280e-02 9.19052632e-02 6.10934082e-02 2.32262888e-03 7.18197378e-01 3.12873602e+03 -5.98700000e-04 -1.65360702e-12 7.09297910e-02 5.55515228e-02 9.19052665e-02 6.10934136e-02 2.32262827e-03 7.18197378e-01 3.12873602e+03 -5.98800000e-04 -1.65360702e-12 7.09297881e-02 5.55515175e-02 9.19052699e-02 6.10934190e-02 2.32262767e-03 7.18197378e-01 3.12873602e+03 -5.98900000e-04 -1.65360702e-12 7.09297853e-02 5.55515123e-02 9.19052732e-02 6.10934243e-02 2.32262707e-03 7.18197378e-01 3.12873602e+03 -5.99000000e-04 -1.65360702e-12 7.09297824e-02 5.55515071e-02 9.19052765e-02 6.10934297e-02 2.32262647e-03 7.18197378e-01 3.12873602e+03 -5.99100000e-04 -1.65360702e-12 7.09297796e-02 5.55515019e-02 9.19052798e-02 6.10934350e-02 2.32262587e-03 7.18197378e-01 3.12873602e+03 -5.99200000e-04 -1.65360702e-12 7.09297767e-02 5.55514967e-02 9.19052831e-02 6.10934403e-02 2.32262528e-03 7.18197378e-01 3.12873602e+03 -5.99300000e-04 -1.65360702e-12 7.09297739e-02 5.55514916e-02 9.19052864e-02 6.10934456e-02 2.32262468e-03 7.18197378e-01 3.12873602e+03 -5.99400000e-04 -1.65360702e-12 7.09297710e-02 5.55514864e-02 9.19052897e-02 6.10934509e-02 2.32262409e-03 7.18197378e-01 3.12873602e+03 -5.99500000e-04 -1.65360702e-12 7.09297682e-02 5.55514813e-02 9.19052929e-02 6.10934562e-02 2.32262350e-03 7.18197378e-01 3.12873602e+03 -5.99600000e-04 -1.65360702e-12 7.09297654e-02 5.55514761e-02 9.19052962e-02 6.10934615e-02 2.32262291e-03 7.18197378e-01 3.12873602e+03 -5.99700000e-04 -1.65360702e-12 7.09297626e-02 5.55514710e-02 9.19052995e-02 6.10934668e-02 2.32262232e-03 7.18197378e-01 3.12873602e+03 -5.99800000e-04 -1.65360702e-12 7.09297598e-02 5.55514659e-02 9.19053027e-02 6.10934720e-02 2.32262173e-03 7.18197378e-01 3.12873602e+03 -5.99900000e-04 -1.65360702e-12 7.09297570e-02 5.55514608e-02 9.19053059e-02 6.10934772e-02 2.32262115e-03 7.18197378e-01 3.12873602e+03 -6.00000000e-04 -1.65360702e-12 7.09297542e-02 5.55514558e-02 9.19053092e-02 6.10934824e-02 2.32262057e-03 7.18197378e-01 3.12873602e+03 -6.00100000e-04 -1.65360702e-12 7.09297514e-02 5.55514507e-02 9.19053124e-02 6.10934876e-02 2.32261998e-03 7.18197378e-01 3.12873602e+03 -6.00200000e-04 -1.65360702e-12 7.09297487e-02 5.55514457e-02 9.19053156e-02 6.10934928e-02 2.32261940e-03 7.18197378e-01 3.12873602e+03 -6.00300000e-04 -1.65360702e-12 7.09297459e-02 5.55514406e-02 9.19053188e-02 6.10934980e-02 2.32261882e-03 7.18197378e-01 3.12873602e+03 -6.00400000e-04 -1.65360702e-12 7.09297431e-02 5.55514356e-02 9.19053220e-02 6.10935032e-02 2.32261825e-03 7.18197378e-01 3.12873602e+03 -6.00500000e-04 -1.65360702e-12 7.09297404e-02 5.55514306e-02 9.19053252e-02 6.10935083e-02 2.32261767e-03 7.18197378e-01 3.12873602e+03 -6.00600000e-04 -1.65360702e-12 7.09297376e-02 5.55514256e-02 9.19053284e-02 6.10935135e-02 2.32261709e-03 7.18197378e-01 3.12873602e+03 -6.00700000e-04 -1.65360702e-12 7.09297349e-02 5.55514206e-02 9.19053315e-02 6.10935186e-02 2.32261652e-03 7.18197378e-01 3.12873602e+03 -6.00800000e-04 -1.65360702e-12 7.09297322e-02 5.55514156e-02 9.19053347e-02 6.10935237e-02 2.32261595e-03 7.18197378e-01 3.12873602e+03 -6.00900000e-04 -1.65360702e-12 7.09297294e-02 5.55514107e-02 9.19053379e-02 6.10935288e-02 2.32261538e-03 7.18197378e-01 3.12873602e+03 -6.01000000e-04 -1.65360702e-12 7.09297267e-02 5.55514057e-02 9.19053410e-02 6.10935339e-02 2.32261481e-03 7.18197378e-01 3.12873602e+03 -6.01100000e-04 -1.65360702e-12 7.09297240e-02 5.55514008e-02 9.19053442e-02 6.10935390e-02 2.32261424e-03 7.18197378e-01 3.12873602e+03 -6.01200000e-04 -1.65360702e-12 7.09297213e-02 5.55513959e-02 9.19053473e-02 6.10935440e-02 2.32261368e-03 7.18197378e-01 3.12873602e+03 -6.01300000e-04 -1.65360702e-12 7.09297186e-02 5.55513910e-02 9.19053504e-02 6.10935491e-02 2.32261311e-03 7.18197378e-01 3.12873602e+03 -6.01400000e-04 -1.65360702e-12 7.09297159e-02 5.55513861e-02 9.19053535e-02 6.10935541e-02 2.32261255e-03 7.18197378e-01 3.12873710e+03 -6.01500000e-04 -1.65360702e-12 7.09297132e-02 5.55513812e-02 9.19053566e-02 6.10935591e-02 2.32261199e-03 7.18197378e-01 3.12873710e+03 -6.01600000e-04 -1.65360702e-12 7.09297106e-02 5.55513763e-02 9.19053597e-02 6.10935641e-02 2.32261143e-03 7.18197378e-01 3.12873710e+03 -6.01700000e-04 -1.65360702e-12 7.09297079e-02 5.55513714e-02 9.19053628e-02 6.10935691e-02 2.32261087e-03 7.18197378e-01 3.12873710e+03 -6.01800000e-04 -1.65360702e-12 7.09297052e-02 5.55513666e-02 9.19053659e-02 6.10935741e-02 2.32261031e-03 7.18197378e-01 3.12873710e+03 -6.01900000e-04 -1.65360702e-12 7.09297026e-02 5.55513618e-02 9.19053690e-02 6.10935791e-02 2.32260975e-03 7.18197378e-01 3.12873710e+03 -6.02000000e-04 -1.65360702e-12 7.09296999e-02 5.55513569e-02 9.19053721e-02 6.10935840e-02 2.32260920e-03 7.18197378e-01 3.12873710e+03 -6.02100000e-04 -1.65360702e-12 7.09296973e-02 5.55513521e-02 9.19053751e-02 6.10935890e-02 2.32260865e-03 7.18197378e-01 3.12873710e+03 -6.02200000e-04 -1.65360702e-12 7.09296947e-02 5.55513473e-02 9.19053782e-02 6.10935939e-02 2.32260809e-03 7.18197378e-01 3.12873710e+03 -6.02300000e-04 -1.65360702e-12 7.09296920e-02 5.55513425e-02 9.19053812e-02 6.10935988e-02 2.32260754e-03 7.18197378e-01 3.12873710e+03 -6.02400000e-04 -1.65360702e-12 7.09296894e-02 5.55513378e-02 9.19053843e-02 6.10936037e-02 2.32260700e-03 7.18197378e-01 3.12873710e+03 -6.02500000e-04 -1.65360702e-12 7.09296868e-02 5.55513330e-02 9.19053873e-02 6.10936086e-02 2.32260645e-03 7.18197378e-01 3.12873710e+03 -6.02600000e-04 -1.65360702e-12 7.09296842e-02 5.55513283e-02 9.19053903e-02 6.10936135e-02 2.32260590e-03 7.18197378e-01 3.12873710e+03 -6.02700000e-04 -1.65360702e-12 7.09296816e-02 5.55513235e-02 9.19053933e-02 6.10936184e-02 2.32260536e-03 7.18197378e-01 3.12873710e+03 -6.02800000e-04 -1.65360702e-12 7.09296790e-02 5.55513188e-02 9.19053963e-02 6.10936232e-02 2.32260481e-03 7.18197378e-01 3.12873710e+03 -6.02900000e-04 -1.65360702e-12 7.09296764e-02 5.55513141e-02 9.19053993e-02 6.10936281e-02 2.32260427e-03 7.18197378e-01 3.12873710e+03 -6.03000000e-04 -1.65360702e-12 7.09296738e-02 5.55513094e-02 9.19054023e-02 6.10936329e-02 2.32260373e-03 7.18197378e-01 3.12873710e+03 -6.03100000e-04 -1.65360702e-12 7.09296712e-02 5.55513047e-02 9.19054053e-02 6.10936377e-02 2.32260319e-03 7.18197378e-01 3.12873710e+03 -6.03200000e-04 -1.65360702e-12 7.09296687e-02 5.55513000e-02 9.19054083e-02 6.10936425e-02 2.32260265e-03 7.18197378e-01 3.12873710e+03 -6.03300000e-04 -1.65360702e-12 7.09296661e-02 5.55512954e-02 9.19054113e-02 6.10936473e-02 2.32260212e-03 7.18197378e-01 3.12873710e+03 -6.03400000e-04 -1.65360702e-12 7.09296636e-02 5.55512907e-02 9.19054142e-02 6.10936521e-02 2.32260158e-03 7.18197378e-01 3.12873710e+03 -6.03500000e-04 -1.65360702e-12 7.09296610e-02 5.55512861e-02 9.19054172e-02 6.10936569e-02 2.32260105e-03 7.18197378e-01 3.12873710e+03 -6.03600000e-04 -1.65360702e-12 7.09296585e-02 5.55512814e-02 9.19054201e-02 6.10936616e-02 2.32260052e-03 7.18197378e-01 3.12873710e+03 -6.03700000e-04 -1.65360702e-12 7.09296559e-02 5.55512768e-02 9.19054230e-02 6.10936664e-02 2.32259999e-03 7.18197378e-01 3.12873710e+03 -6.03800000e-04 -1.65360702e-12 7.09296534e-02 5.55512722e-02 9.19054260e-02 6.10936711e-02 2.32259946e-03 7.18197378e-01 3.12873710e+03 -6.03900000e-04 -1.65360702e-12 7.09296509e-02 5.55512676e-02 9.19054289e-02 6.10936758e-02 2.32259893e-03 7.18197378e-01 3.12873710e+03 -6.04000000e-04 -1.65360702e-12 7.09296484e-02 5.55512631e-02 9.19054318e-02 6.10936805e-02 2.32259840e-03 7.18197378e-01 3.12873710e+03 -6.04100000e-04 -1.65360702e-12 7.09296458e-02 5.55512585e-02 9.19054347e-02 6.10936852e-02 2.32259788e-03 7.18197378e-01 3.12873710e+03 -6.04200000e-04 -1.65360702e-12 7.09296433e-02 5.55512539e-02 9.19054376e-02 6.10936899e-02 2.32259735e-03 7.18197378e-01 3.12873710e+03 -6.04300000e-04 -1.65360702e-12 7.09296408e-02 5.55512494e-02 9.19054405e-02 6.10936946e-02 2.32259683e-03 7.18197378e-01 3.12873710e+03 -6.04400000e-04 -1.65360702e-12 7.09296384e-02 5.55512448e-02 9.19054434e-02 6.10936992e-02 2.32259631e-03 7.18197378e-01 3.12873710e+03 -6.04500000e-04 -1.65360702e-12 7.09296359e-02 5.55512403e-02 9.19054463e-02 6.10937039e-02 2.32259579e-03 7.18197378e-01 3.12873710e+03 -6.04600000e-04 -1.65360702e-12 7.09296334e-02 5.55512358e-02 9.19054492e-02 6.10937085e-02 2.32259527e-03 7.18197378e-01 3.12873710e+03 -6.04700000e-04 -1.65360702e-12 7.09296309e-02 5.55512313e-02 9.19054520e-02 6.10937131e-02 2.32259475e-03 7.18197378e-01 3.12873710e+03 -6.04800000e-04 -1.65360702e-12 7.09296285e-02 5.55512268e-02 9.19054549e-02 6.10937178e-02 2.32259423e-03 7.18197378e-01 3.12873856e+03 -6.04900000e-04 -1.65360702e-12 7.09296260e-02 5.55512223e-02 9.19054577e-02 6.10937224e-02 2.32259372e-03 7.18197378e-01 3.12873856e+03 -6.05000000e-04 -1.65360702e-12 7.09296235e-02 5.55512179e-02 9.19054606e-02 6.10937269e-02 2.32259321e-03 7.18197378e-01 3.12873856e+03 -6.05100000e-04 -1.65360702e-12 7.09296211e-02 5.55512134e-02 9.19054634e-02 6.10937315e-02 2.32259269e-03 7.18197378e-01 3.12873856e+03 -6.05200000e-04 -1.65360702e-12 7.09296187e-02 5.55512090e-02 9.19054662e-02 6.10937361e-02 2.32259218e-03 7.18197378e-01 3.12873856e+03 -6.05300000e-04 -1.65360702e-12 7.09296162e-02 5.55512046e-02 9.19054690e-02 6.10937406e-02 2.32259167e-03 7.18197378e-01 3.12873856e+03 -6.05400000e-04 -1.65360702e-12 7.09296138e-02 5.55512001e-02 9.19054719e-02 6.10937452e-02 2.32259117e-03 7.18197378e-01 3.12873856e+03 -6.05500000e-04 -1.65360702e-12 7.09296114e-02 5.55511957e-02 9.19054747e-02 6.10937497e-02 2.32259066e-03 7.18197378e-01 3.12873856e+03 -6.05600000e-04 -1.65360702e-12 7.09296090e-02 5.55511913e-02 9.19054775e-02 6.10937542e-02 2.32259015e-03 7.18197378e-01 3.12873856e+03 -6.05700000e-04 -1.65360702e-12 7.09296066e-02 5.55511869e-02 9.19054803e-02 6.10937587e-02 2.32258965e-03 7.18197378e-01 3.12873856e+03 -6.05800000e-04 -1.65360702e-12 7.09296042e-02 5.55511826e-02 9.19054830e-02 6.10937632e-02 2.32258915e-03 7.18197378e-01 3.12873856e+03 -6.05900000e-04 -1.65360702e-12 7.09296018e-02 5.55511782e-02 9.19054858e-02 6.10937677e-02 2.32258864e-03 7.18197378e-01 3.12873856e+03 -6.06000000e-04 -1.65360702e-12 7.09295994e-02 5.55511739e-02 9.19054886e-02 6.10937722e-02 2.32258814e-03 7.18197378e-01 3.12873856e+03 -6.06100000e-04 -1.65360702e-12 7.09295970e-02 5.55511695e-02 9.19054913e-02 6.10937767e-02 2.32258764e-03 7.18197378e-01 3.12873856e+03 -6.06200000e-04 -1.65360702e-12 7.09295946e-02 5.55511652e-02 9.19054941e-02 6.10937811e-02 2.32258715e-03 7.18197378e-01 3.12873856e+03 -6.06300000e-04 -1.65360702e-12 7.09295922e-02 5.55511609e-02 9.19054969e-02 6.10937855e-02 2.32258665e-03 7.18197378e-01 3.12873856e+03 -6.06400000e-04 -1.65360702e-12 7.09295899e-02 5.55511566e-02 9.19054996e-02 6.10937900e-02 2.32258615e-03 7.18197378e-01 3.12873856e+03 -6.06500000e-04 -1.65360702e-12 7.09295875e-02 5.55511523e-02 9.19055023e-02 6.10937944e-02 2.32258566e-03 7.18197378e-01 3.12873856e+03 -6.06600000e-04 -1.65360702e-12 7.09295852e-02 5.55511480e-02 9.19055051e-02 6.10937988e-02 2.32258517e-03 7.18197378e-01 3.12873856e+03 -6.06700000e-04 -1.65360702e-12 7.09295828e-02 5.55511437e-02 9.19055078e-02 6.10938032e-02 2.32258467e-03 7.18197378e-01 3.12873856e+03 -6.06800000e-04 -1.65360702e-12 7.09295805e-02 5.55511394e-02 9.19055105e-02 6.10938076e-02 2.32258418e-03 7.18197378e-01 3.12873856e+03 -6.06900000e-04 -1.65360702e-12 7.09295781e-02 5.55511352e-02 9.19055132e-02 6.10938119e-02 2.32258370e-03 7.18197378e-01 3.12873856e+03 -6.07000000e-04 -1.65360702e-12 7.09295758e-02 5.55511310e-02 9.19055159e-02 6.10938163e-02 2.32258321e-03 7.18197378e-01 3.12873856e+03 -6.07100000e-04 -1.65360702e-12 7.09295735e-02 5.55511267e-02 9.19055186e-02 6.10938206e-02 2.32258272e-03 7.18197378e-01 3.12873856e+03 -6.07200000e-04 -1.65360702e-12 7.09295712e-02 5.55511225e-02 9.19055213e-02 6.10938250e-02 2.32258224e-03 7.18197378e-01 3.12873856e+03 -6.07300000e-04 -1.65360702e-12 7.09295688e-02 5.55511183e-02 9.19055240e-02 6.10938293e-02 2.32258175e-03 7.18197378e-01 3.12873856e+03 -6.07400000e-04 -1.65360702e-12 7.09295665e-02 5.55511141e-02 9.19055266e-02 6.10938336e-02 2.32258127e-03 7.18197378e-01 3.12873856e+03 -6.07500000e-04 -1.65360702e-12 7.09295642e-02 5.55511099e-02 9.19055293e-02 6.10938379e-02 2.32258079e-03 7.18197378e-01 3.12873856e+03 -6.07600000e-04 -1.65360702e-12 7.09295619e-02 5.55511057e-02 9.19055319e-02 6.10938422e-02 2.32258031e-03 7.18197378e-01 3.12873856e+03 -6.07700000e-04 -1.65360702e-12 7.09295597e-02 5.55511016e-02 9.19055346e-02 6.10938465e-02 2.32257983e-03 7.18197378e-01 3.12873856e+03 -6.07800000e-04 -1.65360702e-12 7.09295574e-02 5.55510974e-02 9.19055372e-02 6.10938508e-02 2.32257935e-03 7.18197378e-01 3.12873856e+03 -6.07900000e-04 -1.65360702e-12 7.09295551e-02 5.55510933e-02 9.19055399e-02 6.10938550e-02 2.32257887e-03 7.18197378e-01 3.12873856e+03 -6.08000000e-04 -1.65360702e-12 7.09295528e-02 5.55510891e-02 9.19055425e-02 6.10938593e-02 2.32257840e-03 7.18197378e-01 3.12873856e+03 -6.08100000e-04 -1.65360702e-12 7.09295506e-02 5.55510850e-02 9.19055451e-02 6.10938635e-02 2.32257792e-03 7.18197378e-01 3.12873856e+03 -6.08200000e-04 -1.65360702e-12 7.09295483e-02 5.55510809e-02 9.19055478e-02 6.10938678e-02 2.32257745e-03 7.18197378e-01 3.12873856e+03 -6.08300000e-04 -1.65360702e-12 7.09295460e-02 5.55510768e-02 9.19055504e-02 6.10938720e-02 2.32257698e-03 7.18197378e-01 3.12873856e+03 -6.08400000e-04 -1.65360702e-12 7.09295438e-02 5.55510727e-02 9.19055530e-02 6.10938762e-02 2.32257651e-03 7.18197378e-01 3.12873856e+03 -6.08500000e-04 -1.65360702e-12 7.09295416e-02 5.55510686e-02 9.19055556e-02 6.10938804e-02 2.32257604e-03 7.18197378e-01 3.12873856e+03 -6.08600000e-04 -1.65360702e-12 7.09295393e-02 5.55510645e-02 9.19055582e-02 6.10938846e-02 2.32257557e-03 7.18197378e-01 3.12873856e+03 -6.08700000e-04 -1.65360702e-12 7.09295371e-02 5.55510605e-02 9.19055607e-02 6.10938887e-02 2.32257510e-03 7.18197378e-01 3.12873856e+03 -6.08800000e-04 -1.65360702e-12 7.09295349e-02 5.55510564e-02 9.19055633e-02 6.10938929e-02 2.32257464e-03 7.18197378e-01 3.12873856e+03 -6.08900000e-04 -1.65360702e-12 7.09295326e-02 5.55510524e-02 9.19055659e-02 6.10938970e-02 2.32257417e-03 7.18197378e-01 3.12873856e+03 -6.09000000e-04 -1.65360702e-12 7.09295304e-02 5.55510484e-02 9.19055685e-02 6.10939012e-02 2.32257371e-03 7.18197378e-01 3.12873856e+03 -6.09100000e-04 -1.65360702e-12 7.09295282e-02 5.55510443e-02 9.19055710e-02 6.10939053e-02 2.32257325e-03 7.18197378e-01 3.12873856e+03 -6.09200000e-04 -1.65360702e-12 7.09295260e-02 5.55510403e-02 9.19055736e-02 6.10939094e-02 2.32257279e-03 7.18197378e-01 3.12873856e+03 -6.09300000e-04 -1.65360702e-12 7.09295238e-02 5.55510363e-02 9.19055761e-02 6.10939135e-02 2.32257233e-03 7.18197378e-01 3.12873856e+03 -6.09400000e-04 -1.65360702e-12 7.09295216e-02 5.55510323e-02 9.19055787e-02 6.10939176e-02 2.32257187e-03 7.18197378e-01 3.12873856e+03 -6.09500000e-04 -1.65360702e-12 7.09295194e-02 5.55510284e-02 9.19055812e-02 6.10939217e-02 2.32257141e-03 7.18197378e-01 3.12873856e+03 -6.09600000e-04 -1.65360702e-12 7.09295173e-02 5.55510244e-02 9.19055837e-02 6.10939258e-02 2.32257095e-03 7.18197378e-01 3.12873856e+03 -6.09700000e-04 -1.65360702e-12 7.09295151e-02 5.55510204e-02 9.19055862e-02 6.10939299e-02 2.32257050e-03 7.18197378e-01 3.12873856e+03 -6.09800000e-04 -1.65360702e-12 7.09295129e-02 5.55510165e-02 9.19055887e-02 6.10939339e-02 2.32257004e-03 7.18197378e-01 3.12873856e+03 -6.09900000e-04 -1.65360702e-12 7.09295108e-02 5.55510126e-02 9.19055912e-02 6.10939380e-02 2.32256959e-03 7.18197378e-01 3.12873856e+03 -6.10000000e-04 -1.65360702e-12 7.09295086e-02 5.55510086e-02 9.19055937e-02 6.10939420e-02 2.32256914e-03 7.18197378e-01 3.12873856e+03 -6.10100000e-04 -1.65360702e-12 7.09295065e-02 5.55510047e-02 9.19055962e-02 6.10939461e-02 2.32256869e-03 7.18197378e-01 3.12873984e+03 -6.10200000e-04 -1.65360702e-12 7.09295043e-02 5.55510008e-02 9.19055987e-02 6.10939501e-02 2.32256824e-03 7.18197378e-01 3.12873984e+03 -6.10300000e-04 -1.65360702e-12 7.09295022e-02 5.55509969e-02 9.19056012e-02 6.10939541e-02 2.32256779e-03 7.18197378e-01 3.12873984e+03 -6.10400000e-04 -1.65360702e-12 7.09295000e-02 5.55509930e-02 9.19056037e-02 6.10939581e-02 2.32256734e-03 7.18197378e-01 3.12873984e+03 -6.10500000e-04 -1.65360702e-12 7.09294979e-02 5.55509891e-02 9.19056062e-02 6.10939621e-02 2.32256690e-03 7.18197378e-01 3.12873984e+03 -6.10600000e-04 -1.65360702e-12 7.09294958e-02 5.55509853e-02 9.19056086e-02 6.10939660e-02 2.32256645e-03 7.18197378e-01 3.12873984e+03 -6.10700000e-04 -1.65360702e-12 7.09294937e-02 5.55509814e-02 9.19056111e-02 6.10939700e-02 2.32256601e-03 7.18197378e-01 3.12873984e+03 -6.10800000e-04 -1.65360702e-12 7.09294915e-02 5.55509776e-02 9.19056135e-02 6.10939740e-02 2.32256557e-03 7.18197378e-01 3.12873984e+03 -6.10900000e-04 -1.65360702e-12 7.09294894e-02 5.55509737e-02 9.19056160e-02 6.10939779e-02 2.32256513e-03 7.18197378e-01 3.12873984e+03 -6.11000000e-04 -1.65360702e-12 7.09294873e-02 5.55509699e-02 9.19056184e-02 6.10939818e-02 2.32256468e-03 7.18197378e-01 3.12873984e+03 -6.11100000e-04 -1.65360702e-12 7.09294852e-02 5.55509661e-02 9.19056208e-02 6.10939858e-02 2.32256425e-03 7.18197378e-01 3.12873984e+03 -6.11200000e-04 -1.65360702e-12 7.09294831e-02 5.55509623e-02 9.19056233e-02 6.10939897e-02 2.32256381e-03 7.18197378e-01 3.12873984e+03 -6.11300000e-04 -1.65360702e-12 7.09294811e-02 5.55509585e-02 9.19056257e-02 6.10939936e-02 2.32256337e-03 7.18197378e-01 3.12873984e+03 -6.11400000e-04 -1.65360702e-12 7.09294790e-02 5.55509547e-02 9.19056281e-02 6.10939975e-02 2.32256293e-03 7.18197378e-01 3.12873984e+03 -6.11500000e-04 -1.65360702e-12 7.09294769e-02 5.55509509e-02 9.19056305e-02 6.10940014e-02 2.32256250e-03 7.18197378e-01 3.12873984e+03 -6.11600000e-04 -1.65360702e-12 7.09294748e-02 5.55509471e-02 9.19056329e-02 6.10940052e-02 2.32256207e-03 7.18197378e-01 3.12873984e+03 -6.11700000e-04 -1.65360702e-12 7.09294728e-02 5.55509434e-02 9.19056353e-02 6.10940091e-02 2.32256163e-03 7.18197378e-01 3.12873984e+03 -6.11800000e-04 -1.65360702e-12 7.09294707e-02 5.55509396e-02 9.19056377e-02 6.10940129e-02 2.32256120e-03 7.18197378e-01 3.12873984e+03 -6.11900000e-04 -1.65360702e-12 7.09294687e-02 5.55509359e-02 9.19056400e-02 6.10940168e-02 2.32256077e-03 7.18197378e-01 3.12873984e+03 -6.12000000e-04 -1.65360702e-12 7.09294666e-02 5.55509322e-02 9.19056424e-02 6.10940206e-02 2.32256034e-03 7.18197378e-01 3.12873984e+03 -6.12100000e-04 -1.65360702e-12 7.09294646e-02 5.55509284e-02 9.19056448e-02 6.10940245e-02 2.32255992e-03 7.18197378e-01 3.12873984e+03 -6.12200000e-04 -1.65360702e-12 7.09294625e-02 5.55509247e-02 9.19056472e-02 6.10940283e-02 2.32255949e-03 7.18197378e-01 3.12873984e+03 -6.12300000e-04 -1.65360702e-12 7.09294605e-02 5.55509210e-02 9.19056495e-02 6.10940321e-02 2.32255906e-03 7.18197378e-01 3.12873984e+03 -6.12400000e-04 -1.65360702e-12 7.09294585e-02 5.55509173e-02 9.19056519e-02 6.10940359e-02 2.32255864e-03 7.18197378e-01 3.12873984e+03 -6.12500000e-04 -1.65360702e-12 7.09294564e-02 5.55509136e-02 9.19056542e-02 6.10940397e-02 2.32255821e-03 7.18197378e-01 3.12873984e+03 -6.12600000e-04 -1.65360702e-12 7.09294544e-02 5.55509100e-02 9.19056565e-02 6.10940434e-02 2.32255779e-03 7.18197378e-01 3.12873984e+03 -6.12700000e-04 -1.65360702e-12 7.09294524e-02 5.55509063e-02 9.19056589e-02 6.10940472e-02 2.32255737e-03 7.18197378e-01 3.12873984e+03 -6.12800000e-04 -1.65360702e-12 7.09294504e-02 5.55509026e-02 9.19056612e-02 6.10940510e-02 2.32255695e-03 7.18197378e-01 3.12873984e+03 -6.12900000e-04 -1.65360702e-12 7.09294484e-02 5.55508990e-02 9.19056635e-02 6.10940547e-02 2.32255653e-03 7.18197378e-01 3.12873984e+03 -6.13000000e-04 -1.65360702e-12 7.09294464e-02 5.55508954e-02 9.19056658e-02 6.10940584e-02 2.32255611e-03 7.18197378e-01 3.12873984e+03 -6.13100000e-04 -1.65360702e-12 7.09294444e-02 5.55508917e-02 9.19056681e-02 6.10940622e-02 2.32255569e-03 7.18197378e-01 3.12873984e+03 -6.13200000e-04 -1.65360702e-12 7.09294424e-02 5.55508881e-02 9.19056705e-02 6.10940659e-02 2.32255528e-03 7.18197378e-01 3.12873984e+03 -6.13300000e-04 -1.65360702e-12 7.09294404e-02 5.55508845e-02 9.19056727e-02 6.10940696e-02 2.32255486e-03 7.18197378e-01 3.12873984e+03 -6.13400000e-04 -1.65360702e-12 7.09294385e-02 5.55508809e-02 9.19056750e-02 6.10940733e-02 2.32255445e-03 7.18197378e-01 3.12873984e+03 -6.13500000e-04 -1.65360702e-12 7.09294365e-02 5.55508773e-02 9.19056773e-02 6.10940770e-02 2.32255404e-03 7.18197378e-01 3.12873984e+03 -6.13600000e-04 -1.65360702e-12 7.09294345e-02 5.55508737e-02 9.19056796e-02 6.10940807e-02 2.32255362e-03 7.18197378e-01 3.12873984e+03 -6.13700000e-04 -1.65360702e-12 7.09294326e-02 5.55508702e-02 9.19056819e-02 6.10940843e-02 2.32255321e-03 7.18197378e-01 3.12873984e+03 -6.13800000e-04 -1.65360702e-12 7.09294306e-02 5.55508666e-02 9.19056841e-02 6.10940880e-02 2.32255280e-03 7.18197378e-01 3.12873984e+03 -6.13900000e-04 -1.65360702e-12 7.09294286e-02 5.55508630e-02 9.19056864e-02 6.10940917e-02 2.32255240e-03 7.18197378e-01 3.12873984e+03 -6.14000000e-04 -1.65360702e-12 7.09294267e-02 5.55508595e-02 9.19056887e-02 6.10940953e-02 2.32255199e-03 7.18197378e-01 3.12873984e+03 -6.14100000e-04 -1.65360702e-12 7.09294248e-02 5.55508560e-02 9.19056909e-02 6.10940989e-02 2.32255158e-03 7.18197378e-01 3.12873984e+03 -6.14200000e-04 -1.65360702e-12 7.09294228e-02 5.55508524e-02 9.19056932e-02 6.10941026e-02 2.32255118e-03 7.18197378e-01 3.12873984e+03 -6.14300000e-04 -1.65360702e-12 7.09294209e-02 5.55508489e-02 9.19056954e-02 6.10941062e-02 2.32255077e-03 7.18197378e-01 3.12873984e+03 -6.14400000e-04 -1.65360702e-12 7.09294190e-02 5.55508454e-02 9.19056976e-02 6.10941098e-02 2.32255037e-03 7.18197378e-01 3.12873984e+03 -6.14500000e-04 -1.65360702e-12 7.09294170e-02 5.55508419e-02 9.19056999e-02 6.10941134e-02 2.32254996e-03 7.18197378e-01 3.12873984e+03 -6.14600000e-04 -1.65360702e-12 7.09294151e-02 5.55508384e-02 9.19057021e-02 6.10941170e-02 2.32254956e-03 7.18197378e-01 3.12873984e+03 -6.14700000e-04 -1.65360702e-12 7.09294132e-02 5.55508349e-02 9.19057043e-02 6.10941205e-02 2.32254916e-03 7.18197378e-01 3.12873984e+03 -6.14800000e-04 -1.65360702e-12 7.09294113e-02 5.55508315e-02 9.19057065e-02 6.10941241e-02 2.32254876e-03 7.18197378e-01 3.12873984e+03 -6.14900000e-04 -1.65360702e-12 7.09294094e-02 5.55508280e-02 9.19057087e-02 6.10941277e-02 2.32254836e-03 7.18197378e-01 3.12873984e+03 -6.15000000e-04 -1.65360702e-12 7.09294075e-02 5.55508245e-02 9.19057109e-02 6.10941312e-02 2.32254797e-03 7.18197378e-01 3.12873984e+03 -6.15100000e-04 -1.65360702e-12 7.09294056e-02 5.55508211e-02 9.19057131e-02 6.10941348e-02 2.32254757e-03 7.18197378e-01 3.12873984e+03 -6.15200000e-04 -1.65360702e-12 7.09294037e-02 5.55508177e-02 9.19057153e-02 6.10941383e-02 2.32254718e-03 7.18197378e-01 3.12873984e+03 -6.15300000e-04 -1.65360702e-12 7.09294018e-02 5.55508142e-02 9.19057175e-02 6.10941418e-02 2.32254678e-03 7.18197378e-01 3.12873984e+03 -6.15400000e-04 -1.65360702e-12 7.09294000e-02 5.55508108e-02 9.19057196e-02 6.10941453e-02 2.32254639e-03 7.18197378e-01 3.12874095e+03 -6.15500000e-04 -1.65360702e-12 7.09293981e-02 5.55508074e-02 9.19057218e-02 6.10941489e-02 2.32254600e-03 7.18197378e-01 3.12874095e+03 -6.15600000e-04 -1.65360702e-12 7.09293962e-02 5.55508040e-02 9.19057240e-02 6.10941523e-02 2.32254560e-03 7.18197378e-01 3.12874095e+03 -6.15700000e-04 -1.65360702e-12 7.09293943e-02 5.55508006e-02 9.19057261e-02 6.10941558e-02 2.32254521e-03 7.18197378e-01 3.12874095e+03 -6.15800000e-04 -1.65360702e-12 7.09293925e-02 5.55507972e-02 9.19057283e-02 6.10941593e-02 2.32254482e-03 7.18197378e-01 3.12874095e+03 -6.15900000e-04 -1.65360702e-12 7.09293906e-02 5.55507938e-02 9.19057304e-02 6.10941628e-02 2.32254444e-03 7.18197378e-01 3.12874095e+03 -6.16000000e-04 -1.65360702e-12 7.09293888e-02 5.55507905e-02 9.19057326e-02 6.10941662e-02 2.32254405e-03 7.18197378e-01 3.12874095e+03 -6.16100000e-04 -1.65360702e-12 7.09293869e-02 5.55507871e-02 9.19057347e-02 6.10941697e-02 2.32254366e-03 7.18197378e-01 3.12874095e+03 -6.16200000e-04 -1.65360702e-12 7.09293851e-02 5.55507838e-02 9.19057369e-02 6.10941731e-02 2.32254328e-03 7.18197378e-01 3.12874095e+03 -6.16300000e-04 -1.65360702e-12 7.09293833e-02 5.55507804e-02 9.19057390e-02 6.10941766e-02 2.32254289e-03 7.18197378e-01 3.12874095e+03 -6.16400000e-04 -1.65360702e-12 7.09293814e-02 5.55507771e-02 9.19057411e-02 6.10941800e-02 2.32254251e-03 7.18197378e-01 3.12874095e+03 -6.16500000e-04 -1.65360702e-12 7.09293796e-02 5.55507738e-02 9.19057432e-02 6.10941834e-02 2.32254213e-03 7.18197378e-01 3.12874095e+03 -6.16600000e-04 -1.65360702e-12 7.09293778e-02 5.55507705e-02 9.19057453e-02 6.10941868e-02 2.32254175e-03 7.18197378e-01 3.12874095e+03 -6.16700000e-04 -1.65360702e-12 7.09293760e-02 5.55507671e-02 9.19057474e-02 6.10941902e-02 2.32254137e-03 7.18197378e-01 3.12874095e+03 -6.16800000e-04 -1.65360702e-12 7.09293742e-02 5.55507638e-02 9.19057495e-02 6.10941936e-02 2.32254099e-03 7.18197378e-01 3.12874095e+03 -6.16900000e-04 -1.65360702e-12 7.09293723e-02 5.55507606e-02 9.19057516e-02 6.10941970e-02 2.32254061e-03 7.18197378e-01 3.12874095e+03 -6.17000000e-04 -1.65360702e-12 7.09293705e-02 5.55507573e-02 9.19057537e-02 6.10942004e-02 2.32254023e-03 7.18197378e-01 3.12874095e+03 -6.17100000e-04 -1.65360702e-12 7.09293687e-02 5.55507540e-02 9.19057558e-02 6.10942037e-02 2.32253985e-03 7.18197378e-01 3.12874095e+03 -6.17200000e-04 -1.65360702e-12 7.09293670e-02 5.55507507e-02 9.19057579e-02 6.10942071e-02 2.32253948e-03 7.18197378e-01 3.12874095e+03 -6.17300000e-04 -1.65360702e-12 7.09293652e-02 5.55507475e-02 9.19057600e-02 6.10942104e-02 2.32253910e-03 7.18197378e-01 3.12874095e+03 -6.17400000e-04 -1.65360702e-12 7.09293634e-02 5.55507442e-02 9.19057620e-02 6.10942138e-02 2.32253873e-03 7.18197378e-01 3.12874095e+03 -6.17500000e-04 -1.65360702e-12 7.09293616e-02 5.55507410e-02 9.19057641e-02 6.10942171e-02 2.32253836e-03 7.18197378e-01 3.12874095e+03 -6.17600000e-04 -1.65360702e-12 7.09293598e-02 5.55507378e-02 9.19057661e-02 6.10942204e-02 2.32253799e-03 7.18197378e-01 3.12874095e+03 -6.17700000e-04 -1.65360702e-12 7.09293581e-02 5.55507345e-02 9.19057682e-02 6.10942238e-02 2.32253761e-03 7.18197378e-01 3.12874095e+03 -6.17800000e-04 -1.65360702e-12 7.09293563e-02 5.55507313e-02 9.19057702e-02 6.10942271e-02 2.32253724e-03 7.18197378e-01 3.12874095e+03 -6.17900000e-04 -1.65360702e-12 7.09293545e-02 5.55507281e-02 9.19057723e-02 6.10942304e-02 2.32253688e-03 7.18197378e-01 3.12874095e+03 -6.18000000e-04 -1.65360702e-12 7.09293528e-02 5.55507249e-02 9.19057743e-02 6.10942336e-02 2.32253651e-03 7.18197378e-01 3.12874095e+03 -6.18100000e-04 -1.65360702e-12 7.09293510e-02 5.55507217e-02 9.19057764e-02 6.10942369e-02 2.32253614e-03 7.18197378e-01 3.12874095e+03 -6.18200000e-04 -1.65360702e-12 7.09293493e-02 5.55507185e-02 9.19057784e-02 6.10942402e-02 2.32253577e-03 7.18197378e-01 3.12874095e+03 -6.18300000e-04 -1.65360702e-12 7.09293475e-02 5.55507154e-02 9.19057804e-02 6.10942435e-02 2.32253541e-03 7.18197378e-01 3.12874095e+03 -6.18400000e-04 -1.65360702e-12 7.09293458e-02 5.55507122e-02 9.19057824e-02 6.10942467e-02 2.32253505e-03 7.18197378e-01 3.12874095e+03 -6.18500000e-04 -1.65360702e-12 7.09293440e-02 5.55507090e-02 9.19057844e-02 6.10942500e-02 2.32253468e-03 7.18197378e-01 3.12874095e+03 -6.18600000e-04 -1.65360702e-12 7.09293423e-02 5.55507059e-02 9.19057864e-02 6.10942532e-02 2.32253432e-03 7.18197378e-01 3.12874095e+03 -6.18700000e-04 -1.65360702e-12 7.09293406e-02 5.55507027e-02 9.19057884e-02 6.10942564e-02 2.32253396e-03 7.18197378e-01 3.12874095e+03 -6.18800000e-04 -1.65360702e-12 7.09293389e-02 5.55506996e-02 9.19057904e-02 6.10942596e-02 2.32253360e-03 7.18197378e-01 3.12874095e+03 -6.18900000e-04 -1.65360702e-12 7.09293372e-02 5.55506965e-02 9.19057924e-02 6.10942629e-02 2.32253324e-03 7.18197378e-01 3.12874095e+03 -6.19000000e-04 -1.65360702e-12 7.09293354e-02 5.55506934e-02 9.19057944e-02 6.10942661e-02 2.32253288e-03 7.18197378e-01 3.12874095e+03 -6.19100000e-04 -1.65360702e-12 7.09293337e-02 5.55506903e-02 9.19057964e-02 6.10942693e-02 2.32253252e-03 7.18197378e-01 3.12874095e+03 -6.19200000e-04 -1.65360702e-12 7.09293320e-02 5.55506872e-02 9.19057984e-02 6.10942725e-02 2.32253216e-03 7.18197378e-01 3.12874095e+03 -6.19300000e-04 -1.65360702e-12 7.09293303e-02 5.55506841e-02 9.19058003e-02 6.10942756e-02 2.32253181e-03 7.18197378e-01 3.12874095e+03 -6.19400000e-04 -1.65360702e-12 7.09293286e-02 5.55506810e-02 9.19058023e-02 6.10942788e-02 2.32253145e-03 7.18197378e-01 3.12874095e+03 -6.19500000e-04 -1.65360702e-12 7.09293269e-02 5.55506779e-02 9.19058042e-02 6.10942820e-02 2.32253110e-03 7.18197378e-01 3.12874095e+03 -6.19600000e-04 -1.65360702e-12 7.09293253e-02 5.55506748e-02 9.19058062e-02 6.10942851e-02 2.32253075e-03 7.18197378e-01 3.12874095e+03 -6.19700000e-04 -1.65360702e-12 7.09293236e-02 5.55506718e-02 9.19058082e-02 6.10942883e-02 2.32253039e-03 7.18197378e-01 3.12874095e+03 -6.19800000e-04 -1.65360702e-12 7.09293219e-02 5.55506687e-02 9.19058101e-02 6.10942914e-02 2.32253004e-03 7.18197378e-01 3.12874095e+03 -6.19900000e-04 -1.65360702e-12 7.09293202e-02 5.55506657e-02 9.19058120e-02 6.10942945e-02 2.32252969e-03 7.18197378e-01 3.12874095e+03 -6.20000000e-04 -1.65360702e-12 7.09293185e-02 5.55506626e-02 9.19058140e-02 6.10942977e-02 2.32252934e-03 7.18197378e-01 3.12874095e+03 -6.20100000e-04 -1.65360702e-12 7.09293169e-02 5.55506596e-02 9.19058159e-02 6.10943008e-02 2.32252899e-03 7.18197378e-01 3.12874095e+03 -6.20200000e-04 -1.65360702e-12 7.09293152e-02 5.55506566e-02 9.19058178e-02 6.10943039e-02 2.32252865e-03 7.18197378e-01 3.12874095e+03 -6.20300000e-04 -1.65360702e-12 7.09293136e-02 5.55506535e-02 9.19058197e-02 6.10943070e-02 2.32252830e-03 7.18197378e-01 3.12874095e+03 -6.20400000e-04 -1.65360702e-12 7.09293119e-02 5.55506505e-02 9.19058217e-02 6.10943101e-02 2.32252795e-03 7.18197378e-01 3.12874095e+03 -6.20500000e-04 -1.65360702e-12 7.09293103e-02 5.55506475e-02 9.19058236e-02 6.10943132e-02 2.32252761e-03 7.18197378e-01 3.12874095e+03 -6.20600000e-04 -1.65360702e-12 7.09293086e-02 5.55506445e-02 9.19058255e-02 6.10943162e-02 2.32252726e-03 7.18197378e-01 3.12874095e+03 -6.20700000e-04 -1.65360702e-12 7.09293070e-02 5.55506416e-02 9.19058274e-02 6.10943193e-02 2.32252692e-03 7.18197378e-01 3.12874193e+03 -6.20800000e-04 -1.65360702e-12 7.09293053e-02 5.55506386e-02 9.19058293e-02 6.10943224e-02 2.32252658e-03 7.18197378e-01 3.12874193e+03 -6.20900000e-04 -1.65360702e-12 7.09293037e-02 5.55506356e-02 9.19058312e-02 6.10943254e-02 2.32252624e-03 7.18197378e-01 3.12874193e+03 -6.21000000e-04 -1.65360702e-12 7.09293021e-02 5.55506326e-02 9.19058330e-02 6.10943285e-02 2.32252590e-03 7.18197378e-01 3.12874193e+03 -6.21100000e-04 -1.65360702e-12 7.09293005e-02 5.55506297e-02 9.19058349e-02 6.10943315e-02 2.32252556e-03 7.18197378e-01 3.12874193e+03 -6.21200000e-04 -1.65360702e-12 7.09292988e-02 5.55506267e-02 9.19058368e-02 6.10943345e-02 2.32252522e-03 7.18197378e-01 3.12874193e+03 -6.21300000e-04 -1.65360702e-12 7.09292972e-02 5.55506238e-02 9.19058387e-02 6.10943376e-02 2.32252488e-03 7.18197378e-01 3.12874193e+03 -6.21400000e-04 -1.65360702e-12 7.09292956e-02 5.55506209e-02 9.19058405e-02 6.10943406e-02 2.32252454e-03 7.18197378e-01 3.12874193e+03 -6.21500000e-04 -1.65360702e-12 7.09292940e-02 5.55506179e-02 9.19058424e-02 6.10943436e-02 2.32252421e-03 7.18197378e-01 3.12874193e+03 -6.21600000e-04 -1.65360702e-12 7.09292924e-02 5.55506150e-02 9.19058443e-02 6.10943466e-02 2.32252387e-03 7.18197378e-01 3.12874193e+03 -6.21700000e-04 -1.65360702e-12 7.09292908e-02 5.55506121e-02 9.19058461e-02 6.10943496e-02 2.32252354e-03 7.18197378e-01 3.12874193e+03 -6.21800000e-04 -1.65360702e-12 7.09292892e-02 5.55506092e-02 9.19058480e-02 6.10943526e-02 2.32252320e-03 7.18197378e-01 3.12874193e+03 -6.21900000e-04 -1.65360702e-12 7.09292876e-02 5.55506063e-02 9.19058498e-02 6.10943555e-02 2.32252287e-03 7.18197378e-01 3.12874193e+03 -6.22000000e-04 -1.65360702e-12 7.09292860e-02 5.55506034e-02 9.19058516e-02 6.10943585e-02 2.32252254e-03 7.18197378e-01 3.12874193e+03 -6.22100000e-04 -1.65360702e-12 7.09292845e-02 5.55506006e-02 9.19058535e-02 6.10943615e-02 2.32252221e-03 7.18197378e-01 3.12874193e+03 -6.22200000e-04 -1.65360702e-12 7.09292829e-02 5.55505977e-02 9.19058553e-02 6.10943644e-02 2.32252187e-03 7.18197378e-01 3.12874193e+03 -6.22300000e-04 -1.65360702e-12 7.09292813e-02 5.55505948e-02 9.19058571e-02 6.10943674e-02 2.32252155e-03 7.18197378e-01 3.12874193e+03 -6.22400000e-04 -1.65360702e-12 7.09292797e-02 5.55505920e-02 9.19058589e-02 6.10943703e-02 2.32252122e-03 7.18197378e-01 3.12874193e+03 -6.22500000e-04 -1.65360702e-12 7.09292782e-02 5.55505891e-02 9.19058608e-02 6.10943732e-02 2.32252089e-03 7.18197378e-01 3.12874193e+03 -6.22600000e-04 -1.65360702e-12 7.09292766e-02 5.55505863e-02 9.19058626e-02 6.10943761e-02 2.32252056e-03 7.18197378e-01 3.12874193e+03 -6.22700000e-04 -1.65360702e-12 7.09292751e-02 5.55505834e-02 9.19058644e-02 6.10943791e-02 2.32252024e-03 7.18197378e-01 3.12874193e+03 -6.22800000e-04 -1.65360702e-12 7.09292735e-02 5.55505806e-02 9.19058662e-02 6.10943820e-02 2.32251991e-03 7.18197378e-01 3.12874193e+03 -6.22900000e-04 -1.65360702e-12 7.09292719e-02 5.55505778e-02 9.19058680e-02 6.10943849e-02 2.32251959e-03 7.18197378e-01 3.12874193e+03 -6.23000000e-04 -1.65360702e-12 7.09292704e-02 5.55505750e-02 9.19058698e-02 6.10943878e-02 2.32251926e-03 7.18197378e-01 3.12874193e+03 -6.23100000e-04 -1.65360702e-12 7.09292689e-02 5.55505722e-02 9.19058715e-02 6.10943906e-02 2.32251894e-03 7.18197378e-01 3.12874193e+03 -6.23200000e-04 -1.65360702e-12 7.09292673e-02 5.55505694e-02 9.19058733e-02 6.10943935e-02 2.32251862e-03 7.18197378e-01 3.12874193e+03 -6.23300000e-04 -1.65360702e-12 7.09292658e-02 5.55505666e-02 9.19058751e-02 6.10943964e-02 2.32251830e-03 7.18197378e-01 3.12874193e+03 -6.23400000e-04 -1.65360702e-12 7.09292643e-02 5.55505638e-02 9.19058769e-02 6.10943993e-02 2.32251798e-03 7.18197378e-01 3.12874193e+03 -6.23500000e-04 -1.65360702e-12 7.09292627e-02 5.55505610e-02 9.19058786e-02 6.10944021e-02 2.32251766e-03 7.18197378e-01 3.12874193e+03 -6.23600000e-04 -1.65360702e-12 7.09292612e-02 5.55505582e-02 9.19058804e-02 6.10944050e-02 2.32251734e-03 7.18197378e-01 3.12874193e+03 -6.23700000e-04 -1.65360702e-12 7.09292597e-02 5.55505555e-02 9.19058822e-02 6.10944078e-02 2.32251702e-03 7.18197378e-01 3.12874193e+03 -6.23800000e-04 -1.65360702e-12 7.09292582e-02 5.55505527e-02 9.19058839e-02 6.10944106e-02 2.32251670e-03 7.18197378e-01 3.12874193e+03 -6.23900000e-04 -1.65360702e-12 7.09292567e-02 5.55505500e-02 9.19058857e-02 6.10944135e-02 2.32251639e-03 7.18197378e-01 3.12874193e+03 -6.24000000e-04 -1.65360702e-12 7.09292552e-02 5.55505472e-02 9.19058874e-02 6.10944163e-02 2.32251607e-03 7.18197378e-01 3.12874193e+03 -6.24100000e-04 -1.65360702e-12 7.09292537e-02 5.55505445e-02 9.19058892e-02 6.10944191e-02 2.32251576e-03 7.18197378e-01 3.12874193e+03 -6.24200000e-04 -1.65360702e-12 7.09292522e-02 5.55505417e-02 9.19058909e-02 6.10944219e-02 2.32251544e-03 7.18197378e-01 3.12874193e+03 -6.24300000e-04 -1.65360702e-12 7.09292507e-02 5.55505390e-02 9.19058926e-02 6.10944247e-02 2.32251513e-03 7.18197378e-01 3.12874193e+03 -6.24400000e-04 -1.65360702e-12 7.09292492e-02 5.55505363e-02 9.19058944e-02 6.10944275e-02 2.32251482e-03 7.18197378e-01 3.12874193e+03 -6.24500000e-04 -1.65360702e-12 7.09292477e-02 5.55505336e-02 9.19058961e-02 6.10944303e-02 2.32251450e-03 7.18197378e-01 3.12874193e+03 -6.24600000e-04 -1.65360702e-12 7.09292462e-02 5.55505309e-02 9.19058978e-02 6.10944331e-02 2.32251419e-03 7.18197378e-01 3.12874193e+03 -6.24700000e-04 -1.65360702e-12 7.09292447e-02 5.55505282e-02 9.19058995e-02 6.10944358e-02 2.32251388e-03 7.18197378e-01 3.12874193e+03 -6.24800000e-04 -1.65360702e-12 7.09292432e-02 5.55505255e-02 9.19059012e-02 6.10944386e-02 2.32251358e-03 7.18197378e-01 3.12874193e+03 -6.24900000e-04 -1.65360702e-12 7.09292418e-02 5.55505228e-02 9.19059029e-02 6.10944413e-02 2.32251327e-03 7.18197378e-01 3.12874193e+03 -6.25000000e-04 -1.65360702e-12 7.09292403e-02 5.55505202e-02 9.19059046e-02 6.10944441e-02 2.32251296e-03 7.18197378e-01 3.12874193e+03 -6.25100000e-04 -1.65360702e-12 7.09292388e-02 5.55505175e-02 9.19059063e-02 6.10944468e-02 2.32251265e-03 7.18197378e-01 3.12874193e+03 -6.25200000e-04 -1.65360702e-12 7.09292374e-02 5.55505148e-02 9.19059080e-02 6.10944496e-02 2.32251235e-03 7.18197378e-01 3.12874193e+03 -6.25300000e-04 -1.65360702e-12 7.09292359e-02 5.55505122e-02 9.19059097e-02 6.10944523e-02 2.32251204e-03 7.18197378e-01 3.12874193e+03 -6.25400000e-04 -1.65360702e-12 7.09292345e-02 5.55505095e-02 9.19059114e-02 6.10944550e-02 2.32251174e-03 7.18197378e-01 3.12874193e+03 -6.25500000e-04 -1.65360702e-12 7.09292330e-02 5.55505069e-02 9.19059131e-02 6.10944577e-02 2.32251143e-03 7.18197378e-01 3.12874193e+03 -6.25600000e-04 -1.65360702e-12 7.09292316e-02 5.55505043e-02 9.19059148e-02 6.10944604e-02 2.32251113e-03 7.18197378e-01 3.12874193e+03 -6.25700000e-04 -1.65360702e-12 7.09292301e-02 5.55505016e-02 9.19059164e-02 6.10944631e-02 2.32251083e-03 7.18197378e-01 3.12874193e+03 -6.25800000e-04 -1.65360702e-12 7.09292287e-02 5.55504990e-02 9.19059181e-02 6.10944658e-02 2.32251053e-03 7.18197378e-01 3.12874193e+03 -6.25900000e-04 -1.65360702e-12 7.09292273e-02 5.55504964e-02 9.19059198e-02 6.10944685e-02 2.32251023e-03 7.18197378e-01 3.12874278e+03 -6.26000000e-04 -1.65360702e-12 7.09292258e-02 5.55504938e-02 9.19059214e-02 6.10944712e-02 2.32250993e-03 7.18197378e-01 3.12874278e+03 -6.26100000e-04 -1.65360702e-12 7.09292244e-02 5.55504912e-02 9.19059231e-02 6.10944739e-02 2.32250963e-03 7.18197378e-01 3.12874278e+03 -6.26200000e-04 -1.65360702e-12 7.09292230e-02 5.55504886e-02 9.19059247e-02 6.10944765e-02 2.32250933e-03 7.18197378e-01 3.12874278e+03 -6.26300000e-04 -1.65360702e-12 7.09292215e-02 5.55504860e-02 9.19059264e-02 6.10944792e-02 2.32250903e-03 7.18197378e-01 3.12874278e+03 -6.26400000e-04 -1.65360702e-12 7.09292201e-02 5.55504834e-02 9.19059280e-02 6.10944818e-02 2.32250874e-03 7.18197378e-01 3.12874278e+03 -6.26500000e-04 -1.65360702e-12 7.09292187e-02 5.55504809e-02 9.19059296e-02 6.10944845e-02 2.32250844e-03 7.18197378e-01 3.12874278e+03 -6.26600000e-04 -1.65360702e-12 7.09292173e-02 5.55504783e-02 9.19059313e-02 6.10944871e-02 2.32250814e-03 7.18197378e-01 3.12874278e+03 -6.26700000e-04 -1.65360702e-12 7.09292159e-02 5.55504757e-02 9.19059329e-02 6.10944897e-02 2.32250785e-03 7.18197378e-01 3.12874278e+03 -6.26800000e-04 -1.65360702e-12 7.09292145e-02 5.55504732e-02 9.19059345e-02 6.10944924e-02 2.32250756e-03 7.18197378e-01 3.12874278e+03 -6.26900000e-04 -1.65360702e-12 7.09292131e-02 5.55504706e-02 9.19059362e-02 6.10944950e-02 2.32250726e-03 7.18197378e-01 3.12874278e+03 -6.27000000e-04 -1.65360702e-12 7.09292117e-02 5.55504681e-02 9.19059378e-02 6.10944976e-02 2.32250697e-03 7.18197378e-01 3.12874278e+03 -6.27100000e-04 -1.65360702e-12 7.09292103e-02 5.55504656e-02 9.19059394e-02 6.10945002e-02 2.32250668e-03 7.18197378e-01 3.12874278e+03 -6.27200000e-04 -1.65360702e-12 7.09292089e-02 5.55504630e-02 9.19059410e-02 6.10945028e-02 2.32250639e-03 7.18197378e-01 3.12874278e+03 -6.27300000e-04 -1.65360702e-12 7.09292075e-02 5.55504605e-02 9.19059426e-02 6.10945054e-02 2.32250610e-03 7.18197378e-01 3.12874278e+03 -6.27400000e-04 -1.65360702e-12 7.09292062e-02 5.55504580e-02 9.19059442e-02 6.10945080e-02 2.32250581e-03 7.18197378e-01 3.12874278e+03 -6.27500000e-04 -1.65360702e-12 7.09292048e-02 5.55504555e-02 9.19059458e-02 6.10945106e-02 2.32250552e-03 7.18197378e-01 3.12874278e+03 -6.27600000e-04 -1.65360702e-12 7.09292034e-02 5.55504530e-02 9.19059474e-02 6.10945131e-02 2.32250523e-03 7.18197378e-01 3.12874278e+03 -6.27700000e-04 -1.65360702e-12 7.09292020e-02 5.55504505e-02 9.19059490e-02 6.10945157e-02 2.32250495e-03 7.18197378e-01 3.12874278e+03 -6.27800000e-04 -1.65360702e-12 7.09292007e-02 5.55504480e-02 9.19059506e-02 6.10945182e-02 2.32250466e-03 7.18197378e-01 3.12874278e+03 -6.27900000e-04 -1.65360702e-12 7.09291993e-02 5.55504455e-02 9.19059521e-02 6.10945208e-02 2.32250438e-03 7.18197378e-01 3.12874278e+03 -6.28000000e-04 -1.65360702e-12 7.09291979e-02 5.55504431e-02 9.19059537e-02 6.10945233e-02 2.32250409e-03 7.18197378e-01 3.12874278e+03 -6.28100000e-04 -1.65360702e-12 7.09291966e-02 5.55504406e-02 9.19059553e-02 6.10945259e-02 2.32250381e-03 7.18197378e-01 3.12874278e+03 -6.28200000e-04 -1.65360702e-12 7.09291952e-02 5.55504381e-02 9.19059568e-02 6.10945284e-02 2.32250352e-03 7.18197378e-01 3.12874278e+03 -6.28300000e-04 -1.65360702e-12 7.09291939e-02 5.55504357e-02 9.19059584e-02 6.10945309e-02 2.32250324e-03 7.18197378e-01 3.12874278e+03 -6.28400000e-04 -1.65360702e-12 7.09291925e-02 5.55504332e-02 9.19059600e-02 6.10945335e-02 2.32250296e-03 7.18197378e-01 3.12874278e+03 -6.28500000e-04 -1.65360702e-12 7.09291912e-02 5.55504308e-02 9.19059615e-02 6.10945360e-02 2.32250268e-03 7.18197378e-01 3.12874278e+03 -6.28600000e-04 -1.65360702e-12 7.09291899e-02 5.55504283e-02 9.19059631e-02 6.10945385e-02 2.32250240e-03 7.18197378e-01 3.12874278e+03 -6.28700000e-04 -1.65360702e-12 7.09291885e-02 5.55504259e-02 9.19059646e-02 6.10945410e-02 2.32250212e-03 7.18197378e-01 3.12874278e+03 -6.28800000e-04 -1.65360702e-12 7.09291872e-02 5.55504235e-02 9.19059662e-02 6.10945435e-02 2.32250184e-03 7.18197378e-01 3.12874278e+03 -6.28900000e-04 -1.65360702e-12 7.09291859e-02 5.55504211e-02 9.19059677e-02 6.10945460e-02 2.32250156e-03 7.18197378e-01 3.12874278e+03 -6.29000000e-04 -1.65360702e-12 7.09291845e-02 5.55504186e-02 9.19059692e-02 6.10945484e-02 2.32250128e-03 7.18197378e-01 3.12874278e+03 -6.29100000e-04 -1.65360702e-12 7.09291832e-02 5.55504162e-02 9.19059708e-02 6.10945509e-02 2.32250101e-03 7.18197378e-01 3.12874278e+03 -6.29200000e-04 -1.65360702e-12 7.09291819e-02 5.55504138e-02 9.19059723e-02 6.10945534e-02 2.32250073e-03 7.18197378e-01 3.12874278e+03 -6.29300000e-04 -1.65360702e-12 7.09291806e-02 5.55504114e-02 9.19059738e-02 6.10945558e-02 2.32250045e-03 7.18197378e-01 3.12874278e+03 -6.29400000e-04 -1.65360702e-12 7.09291793e-02 5.55504091e-02 9.19059754e-02 6.10945583e-02 2.32250018e-03 7.18197378e-01 3.12874278e+03 -6.29500000e-04 -1.65360702e-12 7.09291780e-02 5.55504067e-02 9.19059769e-02 6.10945607e-02 2.32249991e-03 7.18197378e-01 3.12874278e+03 -6.29600000e-04 -1.65360702e-12 7.09291767e-02 5.55504043e-02 9.19059784e-02 6.10945632e-02 2.32249963e-03 7.18197378e-01 3.12874278e+03 -6.29700000e-04 -1.65360702e-12 7.09291754e-02 5.55504019e-02 9.19059799e-02 6.10945656e-02 2.32249936e-03 7.18197378e-01 3.12874278e+03 -6.29800000e-04 -1.65360702e-12 7.09291741e-02 5.55503996e-02 9.19059814e-02 6.10945680e-02 2.32249909e-03 7.18197378e-01 3.12874278e+03 -6.29900000e-04 -1.65360702e-12 7.09291728e-02 5.55503972e-02 9.19059829e-02 6.10945705e-02 2.32249882e-03 7.18197378e-01 3.12874278e+03 -6.30000000e-04 -1.65360702e-12 7.09291715e-02 5.55503949e-02 9.19059844e-02 6.10945729e-02 2.32249855e-03 7.18197378e-01 3.12874278e+03 -6.30100000e-04 -1.65360702e-12 7.09291702e-02 5.55503925e-02 9.19059859e-02 6.10945753e-02 2.32249828e-03 7.18197378e-01 3.12874278e+03 -6.30200000e-04 -1.65360702e-12 7.09291689e-02 5.55503902e-02 9.19059874e-02 6.10945777e-02 2.32249801e-03 7.18197378e-01 3.12874278e+03 -6.30300000e-04 -1.65360702e-12 7.09291676e-02 5.55503878e-02 9.19059889e-02 6.10945801e-02 2.32249774e-03 7.18197378e-01 3.12874278e+03 -6.30400000e-04 -1.65360702e-12 7.09291663e-02 5.55503855e-02 9.19059903e-02 6.10945825e-02 2.32249747e-03 7.18197378e-01 3.12874278e+03 -6.30500000e-04 -1.65360702e-12 7.09291651e-02 5.55503832e-02 9.19059918e-02 6.10945849e-02 2.32249720e-03 7.18197378e-01 3.12874278e+03 -6.30600000e-04 -1.65360702e-12 7.09291638e-02 5.55503809e-02 9.19059933e-02 6.10945873e-02 2.32249694e-03 7.18197378e-01 3.12874278e+03 -6.30700000e-04 -1.65360702e-12 7.09291625e-02 5.55503786e-02 9.19059948e-02 6.10945896e-02 2.32249667e-03 7.18197378e-01 3.12874278e+03 -6.30800000e-04 -1.65360702e-12 7.09291613e-02 5.55503763e-02 9.19059962e-02 6.10945920e-02 2.32249641e-03 7.18197378e-01 3.12874278e+03 -6.30900000e-04 -1.65360702e-12 7.09291600e-02 5.55503740e-02 9.19059977e-02 6.10945944e-02 2.32249614e-03 7.18197378e-01 3.12874278e+03 -6.31000000e-04 -1.65360702e-12 7.09291587e-02 5.55503717e-02 9.19059992e-02 6.10945967e-02 2.32249588e-03 7.18197378e-01 3.12874278e+03 -6.31100000e-04 -1.65360702e-12 7.09291575e-02 5.55503694e-02 9.19060006e-02 6.10945991e-02 2.32249562e-03 7.18197378e-01 3.12874278e+03 -6.31200000e-04 -1.65360702e-12 7.09291562e-02 5.55503671e-02 9.19060021e-02 6.10946014e-02 2.32249535e-03 7.18197378e-01 3.12874352e+03 -6.31300000e-04 -1.65360702e-12 7.09291550e-02 5.55503648e-02 9.19060035e-02 6.10946038e-02 2.32249509e-03 7.18197378e-01 3.12874352e+03 -6.31400000e-04 -1.65360702e-12 7.09291537e-02 5.55503626e-02 9.19060050e-02 6.10946061e-02 2.32249483e-03 7.18197378e-01 3.12874352e+03 -6.31500000e-04 -1.65360702e-12 7.09291525e-02 5.55503603e-02 9.19060064e-02 6.10946084e-02 2.32249457e-03 7.18197378e-01 3.12874352e+03 -6.31600000e-04 -1.65360702e-12 7.09291512e-02 5.55503580e-02 9.19060078e-02 6.10946107e-02 2.32249431e-03 7.18197378e-01 3.12874352e+03 -6.31700000e-04 -1.65360702e-12 7.09291500e-02 5.55503558e-02 9.19060093e-02 6.10946131e-02 2.32249405e-03 7.18197378e-01 3.12874352e+03 -6.31800000e-04 -1.65360702e-12 7.09291488e-02 5.55503535e-02 9.19060107e-02 6.10946154e-02 2.32249379e-03 7.18197378e-01 3.12874352e+03 -6.31900000e-04 -1.65360702e-12 7.09291475e-02 5.55503513e-02 9.19060121e-02 6.10946177e-02 2.32249354e-03 7.18197378e-01 3.12874352e+03 -6.32000000e-04 -1.65360702e-12 7.09291463e-02 5.55503491e-02 9.19060135e-02 6.10946200e-02 2.32249328e-03 7.18197378e-01 3.12874352e+03 -6.32100000e-04 -1.65360702e-12 7.09291451e-02 5.55503468e-02 9.19060150e-02 6.10946223e-02 2.32249302e-03 7.18197378e-01 3.12874352e+03 -6.32200000e-04 -1.65360702e-12 7.09291439e-02 5.55503446e-02 9.19060164e-02 6.10946245e-02 2.32249277e-03 7.18197378e-01 3.12874352e+03 -6.32300000e-04 -1.65360702e-12 7.09291427e-02 5.55503424e-02 9.19060178e-02 6.10946268e-02 2.32249251e-03 7.18197378e-01 3.12874352e+03 -6.32400000e-04 -1.65360702e-12 7.09291414e-02 5.55503402e-02 9.19060192e-02 6.10946291e-02 2.32249226e-03 7.18197378e-01 3.12874352e+03 -6.32500000e-04 -1.65360702e-12 7.09291402e-02 5.55503380e-02 9.19060206e-02 6.10946314e-02 2.32249200e-03 7.18197378e-01 3.12874352e+03 -6.32600000e-04 -1.65360702e-12 7.09291390e-02 5.55503358e-02 9.19060220e-02 6.10946336e-02 2.32249175e-03 7.18197378e-01 3.12874352e+03 -6.32700000e-04 -1.65360702e-12 7.09291378e-02 5.55503336e-02 9.19060234e-02 6.10946359e-02 2.32249150e-03 7.18197378e-01 3.12874352e+03 -6.32800000e-04 -1.65360702e-12 7.09291366e-02 5.55503314e-02 9.19060248e-02 6.10946381e-02 2.32249125e-03 7.18197378e-01 3.12874352e+03 -6.32900000e-04 -1.65360702e-12 7.09291354e-02 5.55503292e-02 9.19060262e-02 6.10946404e-02 2.32249100e-03 7.18197378e-01 3.12874352e+03 -6.33000000e-04 -1.65360702e-12 7.09291342e-02 5.55503270e-02 9.19060276e-02 6.10946426e-02 2.32249075e-03 7.18197378e-01 3.12874352e+03 -6.33100000e-04 -1.65360702e-12 7.09291330e-02 5.55503249e-02 9.19060289e-02 6.10946448e-02 2.32249050e-03 7.18197378e-01 3.12874352e+03 -6.33200000e-04 -1.65360702e-12 7.09291318e-02 5.55503227e-02 9.19060303e-02 6.10946471e-02 2.32249025e-03 7.18197378e-01 3.12874352e+03 -6.33300000e-04 -1.65360702e-12 7.09291306e-02 5.55503205e-02 9.19060317e-02 6.10946493e-02 2.32249000e-03 7.18197378e-01 3.12874352e+03 -6.33400000e-04 -1.65360702e-12 7.09291295e-02 5.55503184e-02 9.19060331e-02 6.10946515e-02 2.32248975e-03 7.18197378e-01 3.12874352e+03 -6.33500000e-04 -1.65360702e-12 7.09291283e-02 5.55503162e-02 9.19060344e-02 6.10946537e-02 2.32248950e-03 7.18197378e-01 3.12874352e+03 -6.33600000e-04 -1.65360702e-12 7.09291271e-02 5.55503141e-02 9.19060358e-02 6.10946559e-02 2.32248926e-03 7.18197378e-01 3.12874352e+03 -6.33700000e-04 -1.65360702e-12 7.09291259e-02 5.55503119e-02 9.19060372e-02 6.10946581e-02 2.32248901e-03 7.18197378e-01 3.12874352e+03 -6.33800000e-04 -1.65360702e-12 7.09291248e-02 5.55503098e-02 9.19060385e-02 6.10946603e-02 2.32248876e-03 7.18197378e-01 3.12874352e+03 -6.33900000e-04 -1.65360702e-12 7.09291236e-02 5.55503077e-02 9.19060399e-02 6.10946625e-02 2.32248852e-03 7.18197378e-01 3.12874352e+03 -6.34000000e-04 -1.65360702e-12 7.09291224e-02 5.55503056e-02 9.19060412e-02 6.10946647e-02 2.32248828e-03 7.18197378e-01 3.12874352e+03 -6.34100000e-04 -1.65360702e-12 7.09291213e-02 5.55503034e-02 9.19060426e-02 6.10946669e-02 2.32248803e-03 7.18197378e-01 3.12874352e+03 -6.34200000e-04 -1.65360702e-12 7.09291201e-02 5.55503013e-02 9.19060439e-02 6.10946690e-02 2.32248779e-03 7.18197378e-01 3.12874352e+03 -6.34300000e-04 -1.65360702e-12 7.09291189e-02 5.55502992e-02 9.19060453e-02 6.10946712e-02 2.32248755e-03 7.18197378e-01 3.12874352e+03 -6.34400000e-04 -1.65360702e-12 7.09291178e-02 5.55502971e-02 9.19060466e-02 6.10946734e-02 2.32248730e-03 7.18197378e-01 3.12874352e+03 -6.34500000e-04 -1.65360702e-12 7.09291166e-02 5.55502950e-02 9.19060479e-02 6.10946755e-02 2.32248706e-03 7.18197378e-01 3.12874352e+03 -6.34600000e-04 -1.65360702e-12 7.09291155e-02 5.55502929e-02 9.19060493e-02 6.10946777e-02 2.32248682e-03 7.18197378e-01 3.12874352e+03 -6.34700000e-04 -1.65360702e-12 7.09291143e-02 5.55502908e-02 9.19060506e-02 6.10946798e-02 2.32248658e-03 7.18197378e-01 3.12874352e+03 -6.34800000e-04 -1.65360702e-12 7.09291132e-02 5.55502888e-02 9.19060519e-02 6.10946819e-02 2.32248634e-03 7.18197378e-01 3.12874352e+03 -6.34900000e-04 -1.65360702e-12 7.09291121e-02 5.55502867e-02 9.19060532e-02 6.10946841e-02 2.32248611e-03 7.18197378e-01 3.12874352e+03 -6.35000000e-04 -1.65360702e-12 7.09291109e-02 5.55502846e-02 9.19060546e-02 6.10946862e-02 2.32248587e-03 7.18197378e-01 3.12874352e+03 -6.35100000e-04 -1.65360702e-12 7.09291098e-02 5.55502826e-02 9.19060559e-02 6.10946883e-02 2.32248563e-03 7.18197378e-01 3.12874352e+03 -6.35200000e-04 -1.65360702e-12 7.09291087e-02 5.55502805e-02 9.19060572e-02 6.10946904e-02 2.32248539e-03 7.18197378e-01 3.12874352e+03 -6.35300000e-04 -1.65360702e-12 7.09291075e-02 5.55502784e-02 9.19060585e-02 6.10946925e-02 2.32248516e-03 7.18197378e-01 3.12874352e+03 -6.35400000e-04 -1.65360702e-12 7.09291064e-02 5.55502764e-02 9.19060598e-02 6.10946946e-02 2.32248492e-03 7.18197378e-01 3.12874352e+03 -6.35500000e-04 -1.65360702e-12 7.09291053e-02 5.55502744e-02 9.19060611e-02 6.10946967e-02 2.32248469e-03 7.18197378e-01 3.12874352e+03 -6.35600000e-04 -1.65360702e-12 7.09291042e-02 5.55502723e-02 9.19060624e-02 6.10946988e-02 2.32248445e-03 7.18197378e-01 3.12874352e+03 -6.35700000e-04 -1.65360702e-12 7.09291030e-02 5.55502703e-02 9.19060637e-02 6.10947009e-02 2.32248422e-03 7.18197378e-01 3.12874352e+03 -6.35800000e-04 -1.65360702e-12 7.09291019e-02 5.55502683e-02 9.19060650e-02 6.10947030e-02 2.32248399e-03 7.18197378e-01 3.12874352e+03 -6.35900000e-04 -1.65360702e-12 7.09291008e-02 5.55502662e-02 9.19060663e-02 6.10947051e-02 2.32248375e-03 7.18197378e-01 3.12874352e+03 -6.36000000e-04 -1.65360702e-12 7.09290997e-02 5.55502642e-02 9.19060675e-02 6.10947072e-02 2.32248352e-03 7.18197378e-01 3.12874352e+03 -6.36100000e-04 -1.65360702e-12 7.09290986e-02 5.55502622e-02 9.19060688e-02 6.10947092e-02 2.32248329e-03 7.18197378e-01 3.12874352e+03 -6.36200000e-04 -1.65360702e-12 7.09290975e-02 5.55502602e-02 9.19060701e-02 6.10947113e-02 2.32248306e-03 7.18197378e-01 3.12874352e+03 -6.36300000e-04 -1.65360702e-12 7.09290964e-02 5.55502582e-02 9.19060714e-02 6.10947133e-02 2.32248283e-03 7.18197378e-01 3.12874352e+03 -6.36400000e-04 -1.65360702e-12 7.09290953e-02 5.55502562e-02 9.19060726e-02 6.10947154e-02 2.32248260e-03 7.18197378e-01 3.12874352e+03 -6.36500000e-04 -1.65360702e-12 7.09290942e-02 5.55502542e-02 9.19060739e-02 6.10947174e-02 2.32248237e-03 7.18197378e-01 3.12874417e+03 -6.36600000e-04 -1.65360702e-12 7.09290931e-02 5.55502522e-02 9.19060752e-02 6.10947195e-02 2.32248214e-03 7.18197378e-01 3.12874417e+03 -6.36700000e-04 -1.65360702e-12 7.09290920e-02 5.55502502e-02 9.19060764e-02 6.10947215e-02 2.32248191e-03 7.18197378e-01 3.12874417e+03 -6.36800000e-04 -1.65360702e-12 7.09290910e-02 5.55502483e-02 9.19060777e-02 6.10947236e-02 2.32248169e-03 7.18197378e-01 3.12874417e+03 -6.36900000e-04 -1.65360702e-12 7.09290899e-02 5.55502463e-02 9.19060789e-02 6.10947256e-02 2.32248146e-03 7.18197378e-01 3.12874417e+03 -6.37000000e-04 -1.65360702e-12 7.09290888e-02 5.55502443e-02 9.19060802e-02 6.10947276e-02 2.32248123e-03 7.18197378e-01 3.12874417e+03 -6.37100000e-04 -1.65360702e-12 7.09290877e-02 5.55502424e-02 9.19060814e-02 6.10947296e-02 2.32248101e-03 7.18197378e-01 3.12874417e+03 -6.37200000e-04 -1.65360702e-12 7.09290866e-02 5.55502404e-02 9.19060827e-02 6.10947316e-02 2.32248078e-03 7.18197378e-01 3.12874417e+03 -6.37300000e-04 -1.65360702e-12 7.09290856e-02 5.55502385e-02 9.19060839e-02 6.10947336e-02 2.32248056e-03 7.18197378e-01 3.12874417e+03 -6.37400000e-04 -1.65360702e-12 7.09290845e-02 5.55502365e-02 9.19060852e-02 6.10947356e-02 2.32248034e-03 7.18197378e-01 3.12874417e+03 -6.37500000e-04 -1.65360702e-12 7.09290834e-02 5.55502346e-02 9.19060864e-02 6.10947376e-02 2.32248011e-03 7.18197378e-01 3.12874417e+03 -6.37600000e-04 -1.65360702e-12 7.09290824e-02 5.55502326e-02 9.19060876e-02 6.10947396e-02 2.32247989e-03 7.18197378e-01 3.12874417e+03 -6.37700000e-04 -1.65360702e-12 7.09290813e-02 5.55502307e-02 9.19060889e-02 6.10947416e-02 2.32247967e-03 7.18197378e-01 3.12874417e+03 -6.37800000e-04 -1.65360702e-12 7.09290803e-02 5.55502288e-02 9.19060901e-02 6.10947436e-02 2.32247945e-03 7.18197378e-01 3.12874417e+03 -6.37900000e-04 -1.65360702e-12 7.09290792e-02 5.55502269e-02 9.19060913e-02 6.10947456e-02 2.32247923e-03 7.18197378e-01 3.12874417e+03 -6.38000000e-04 -1.65360702e-12 7.09290781e-02 5.55502250e-02 9.19060925e-02 6.10947475e-02 2.32247901e-03 7.18197378e-01 3.12874417e+03 -6.38100000e-04 -1.65360702e-12 7.09290771e-02 5.55502230e-02 9.19060937e-02 6.10947495e-02 2.32247879e-03 7.18197378e-01 3.12874417e+03 -6.38200000e-04 -1.65360702e-12 7.09290760e-02 5.55502211e-02 9.19060950e-02 6.10947514e-02 2.32247857e-03 7.18197378e-01 3.12874417e+03 -6.38300000e-04 -1.65360702e-12 7.09290750e-02 5.55502192e-02 9.19060962e-02 6.10947534e-02 2.32247835e-03 7.18197378e-01 3.12874417e+03 -6.38400000e-04 -1.65360702e-12 7.09290740e-02 5.55502173e-02 9.19060974e-02 6.10947553e-02 2.32247813e-03 7.18197378e-01 3.12874417e+03 -6.38500000e-04 -1.65360702e-12 7.09290729e-02 5.55502154e-02 9.19060986e-02 6.10947573e-02 2.32247791e-03 7.18197378e-01 3.12874417e+03 -6.38600000e-04 -1.65360702e-12 7.09290719e-02 5.55502136e-02 9.19060998e-02 6.10947592e-02 2.32247769e-03 7.18197378e-01 3.12874417e+03 -6.38700000e-04 -1.65360702e-12 7.09290709e-02 5.55502117e-02 9.19061010e-02 6.10947612e-02 2.32247748e-03 7.18197378e-01 3.12874417e+03 -6.38800000e-04 -1.65360702e-12 7.09290698e-02 5.55502098e-02 9.19061022e-02 6.10947631e-02 2.32247726e-03 7.18197378e-01 3.12874417e+03 -6.38900000e-04 -1.65360702e-12 7.09290688e-02 5.55502079e-02 9.19061034e-02 6.10947650e-02 2.32247705e-03 7.18197378e-01 3.12874417e+03 -6.39000000e-04 -1.65360702e-12 7.09290678e-02 5.55502061e-02 9.19061046e-02 6.10947669e-02 2.32247683e-03 7.18197378e-01 3.12874417e+03 -6.39100000e-04 -1.65360702e-12 7.09290667e-02 5.55502042e-02 9.19061057e-02 6.10947689e-02 2.32247662e-03 7.18197378e-01 3.12874417e+03 -6.39200000e-04 -1.65360702e-12 7.09290657e-02 5.55502023e-02 9.19061069e-02 6.10947708e-02 2.32247640e-03 7.18197378e-01 3.12874417e+03 -6.39300000e-04 -1.65360702e-12 7.09290647e-02 5.55502005e-02 9.19061081e-02 6.10947727e-02 2.32247619e-03 7.18197378e-01 3.12874417e+03 -6.39400000e-04 -1.65360702e-12 7.09290637e-02 5.55501986e-02 9.19061093e-02 6.10947746e-02 2.32247598e-03 7.18197378e-01 3.12874417e+03 -6.39500000e-04 -1.65360702e-12 7.09290627e-02 5.55501968e-02 9.19061104e-02 6.10947765e-02 2.32247577e-03 7.18197378e-01 3.12874417e+03 -6.39600000e-04 -1.65360702e-12 7.09290617e-02 5.55501950e-02 9.19061116e-02 6.10947784e-02 2.32247556e-03 7.18197378e-01 3.12874417e+03 -6.39700000e-04 -1.65360702e-12 7.09290607e-02 5.55501931e-02 9.19061128e-02 6.10947802e-02 2.32247534e-03 7.18197378e-01 3.12874417e+03 -6.39800000e-04 -1.65360702e-12 7.09290597e-02 5.55501913e-02 9.19061140e-02 6.10947821e-02 2.32247513e-03 7.18197378e-01 3.12874417e+03 -6.39900000e-04 -1.65360702e-12 7.09290587e-02 5.55501895e-02 9.19061151e-02 6.10947840e-02 2.32247492e-03 7.18197378e-01 3.12874417e+03 -6.40000000e-04 -1.65360702e-12 7.09290577e-02 5.55501876e-02 9.19061163e-02 6.10947859e-02 2.32247471e-03 7.18197378e-01 3.12874417e+03 -6.40100000e-04 -1.65360702e-12 7.09290567e-02 5.55501858e-02 9.19061174e-02 6.10947877e-02 2.32247451e-03 7.18197378e-01 3.12874417e+03 -6.40200000e-04 -1.65360702e-12 7.09290557e-02 5.55501840e-02 9.19061186e-02 6.10947896e-02 2.32247430e-03 7.18197378e-01 3.12874417e+03 -6.40300000e-04 -1.65360702e-12 7.09290547e-02 5.55501822e-02 9.19061197e-02 6.10947914e-02 2.32247409e-03 7.18197378e-01 3.12874417e+03 -6.40400000e-04 -1.65360702e-12 7.09290537e-02 5.55501804e-02 9.19061209e-02 6.10947933e-02 2.32247388e-03 7.18197378e-01 3.12874417e+03 -6.40500000e-04 -1.65360702e-12 7.09290527e-02 5.55501786e-02 9.19061220e-02 6.10947951e-02 2.32247368e-03 7.18197378e-01 3.12874417e+03 -6.40600000e-04 -1.65360702e-12 7.09290517e-02 5.55501768e-02 9.19061232e-02 6.10947970e-02 2.32247347e-03 7.18197378e-01 3.12874417e+03 -6.40700000e-04 -1.65360702e-12 7.09290507e-02 5.55501750e-02 9.19061243e-02 6.10947988e-02 2.32247326e-03 7.18197378e-01 3.12874417e+03 -6.40800000e-04 -1.65360702e-12 7.09290497e-02 5.55501733e-02 9.19061254e-02 6.10948007e-02 2.32247306e-03 7.18197378e-01 3.12874417e+03 -6.40900000e-04 -1.65360702e-12 7.09290488e-02 5.55501715e-02 9.19061266e-02 6.10948025e-02 2.32247285e-03 7.18197378e-01 3.12874417e+03 -6.41000000e-04 -1.65360702e-12 7.09290478e-02 5.55501697e-02 9.19061277e-02 6.10948043e-02 2.32247265e-03 7.18197378e-01 3.12874417e+03 -6.41100000e-04 -1.65360702e-12 7.09290468e-02 5.55501679e-02 9.19061288e-02 6.10948061e-02 2.32247245e-03 7.18197378e-01 3.12874417e+03 -6.41200000e-04 -1.65360702e-12 7.09290459e-02 5.55501662e-02 9.19061299e-02 6.10948079e-02 2.32247224e-03 7.18197378e-01 3.12874417e+03 -6.41300000e-04 -1.65360702e-12 7.09290449e-02 5.55501644e-02 9.19061311e-02 6.10948098e-02 2.32247204e-03 7.18197378e-01 3.12874417e+03 -6.41400000e-04 -1.65360702e-12 7.09290439e-02 5.55501626e-02 9.19061322e-02 6.10948116e-02 2.32247184e-03 7.18197378e-01 3.12874417e+03 -6.41500000e-04 -1.65360702e-12 7.09290430e-02 5.55501609e-02 9.19061333e-02 6.10948134e-02 2.32247164e-03 7.18197378e-01 3.12874417e+03 -6.41600000e-04 -1.65360702e-12 7.09290420e-02 5.55501591e-02 9.19061344e-02 6.10948152e-02 2.32247144e-03 7.18197378e-01 3.12874417e+03 -6.41700000e-04 -1.65360702e-12 7.09290410e-02 5.55501574e-02 9.19061355e-02 6.10948169e-02 2.32247124e-03 7.18197378e-01 3.12874474e+03 -6.41800000e-04 -1.65360702e-12 7.09290401e-02 5.55501557e-02 9.19061366e-02 6.10948187e-02 2.32247104e-03 7.18197378e-01 3.12874474e+03 -6.41900000e-04 -1.65360702e-12 7.09290391e-02 5.55501539e-02 9.19061377e-02 6.10948205e-02 2.32247084e-03 7.18197378e-01 3.12874474e+03 -6.42000000e-04 -1.65360702e-12 7.09290382e-02 5.55501522e-02 9.19061388e-02 6.10948223e-02 2.32247064e-03 7.18197378e-01 3.12874474e+03 -6.42100000e-04 -1.65360702e-12 7.09290372e-02 5.55501505e-02 9.19061399e-02 6.10948241e-02 2.32247044e-03 7.18197378e-01 3.12874474e+03 -6.42200000e-04 -1.65360702e-12 7.09290363e-02 5.55501488e-02 9.19061410e-02 6.10948258e-02 2.32247024e-03 7.18197378e-01 3.12874474e+03 -6.42300000e-04 -1.65360702e-12 7.09290354e-02 5.55501470e-02 9.19061421e-02 6.10948276e-02 2.32247005e-03 7.18197378e-01 3.12874474e+03 -6.42400000e-04 -1.65360702e-12 7.09290344e-02 5.55501453e-02 9.19061432e-02 6.10948294e-02 2.32246985e-03 7.18197378e-01 3.12874474e+03 -6.42500000e-04 -1.65360702e-12 7.09290335e-02 5.55501436e-02 9.19061443e-02 6.10948311e-02 2.32246965e-03 7.18197378e-01 3.12874474e+03 -6.42600000e-04 -1.65360702e-12 7.09290325e-02 5.55501419e-02 9.19061454e-02 6.10948329e-02 2.32246946e-03 7.18197378e-01 3.12874474e+03 -6.42700000e-04 -1.65360702e-12 7.09290316e-02 5.55501402e-02 9.19061465e-02 6.10948346e-02 2.32246926e-03 7.18197378e-01 3.12874474e+03 -6.42800000e-04 -1.65360702e-12 7.09290307e-02 5.55501385e-02 9.19061475e-02 6.10948363e-02 2.32246907e-03 7.18197378e-01 3.12874474e+03 -6.42900000e-04 -1.65360702e-12 7.09290297e-02 5.55501368e-02 9.19061486e-02 6.10948381e-02 2.32246887e-03 7.18197378e-01 3.12874474e+03 -6.43000000e-04 -1.65360702e-12 7.09290288e-02 5.55501352e-02 9.19061497e-02 6.10948398e-02 2.32246868e-03 7.18197378e-01 3.12874474e+03 -6.43100000e-04 -1.65360702e-12 7.09290279e-02 5.55501335e-02 9.19061507e-02 6.10948415e-02 2.32246848e-03 7.18197378e-01 3.12874474e+03 -6.43200000e-04 -1.65360702e-12 7.09290270e-02 5.55501318e-02 9.19061518e-02 6.10948433e-02 2.32246829e-03 7.18197378e-01 3.12874474e+03 -6.43300000e-04 -1.65360702e-12 7.09290261e-02 5.55501301e-02 9.19061529e-02 6.10948450e-02 2.32246810e-03 7.18197378e-01 3.12874474e+03 -6.43400000e-04 -1.65360702e-12 7.09290251e-02 5.55501285e-02 9.19061539e-02 6.10948467e-02 2.32246791e-03 7.18197378e-01 3.12874474e+03 -6.43500000e-04 -1.65360702e-12 7.09290242e-02 5.55501268e-02 9.19061550e-02 6.10948484e-02 2.32246772e-03 7.18197378e-01 3.12874474e+03 -6.43600000e-04 -1.65360702e-12 7.09290233e-02 5.55501251e-02 9.19061561e-02 6.10948501e-02 2.32246753e-03 7.18197378e-01 3.12874474e+03 -6.43700000e-04 -1.65360702e-12 7.09290224e-02 5.55501235e-02 9.19061571e-02 6.10948518e-02 2.32246733e-03 7.18197378e-01 3.12874474e+03 -6.43800000e-04 -1.65360702e-12 7.09290215e-02 5.55501218e-02 9.19061582e-02 6.10948535e-02 2.32246714e-03 7.18197378e-01 3.12874474e+03 -6.43900000e-04 -1.65360702e-12 7.09290206e-02 5.55501202e-02 9.19061592e-02 6.10948552e-02 2.32246696e-03 7.18197378e-01 3.12874474e+03 -6.44000000e-04 -1.65360702e-12 7.09290197e-02 5.55501185e-02 9.19061603e-02 6.10948569e-02 2.32246677e-03 7.18197378e-01 3.12874474e+03 -6.44100000e-04 -1.65360702e-12 7.09290188e-02 5.55501169e-02 9.19061613e-02 6.10948586e-02 2.32246658e-03 7.18197378e-01 3.12874474e+03 -6.44200000e-04 -1.65360702e-12 7.09290179e-02 5.55501153e-02 9.19061623e-02 6.10948603e-02 2.32246639e-03 7.18197378e-01 3.12874474e+03 -6.44300000e-04 -1.65360702e-12 7.09290170e-02 5.55501136e-02 9.19061634e-02 6.10948619e-02 2.32246620e-03 7.18197378e-01 3.12874474e+03 -6.44400000e-04 -1.65360702e-12 7.09290161e-02 5.55501120e-02 9.19061644e-02 6.10948636e-02 2.32246602e-03 7.18197378e-01 3.12874474e+03 -6.44500000e-04 -1.65360702e-12 7.09290152e-02 5.55501104e-02 9.19061654e-02 6.10948653e-02 2.32246583e-03 7.18197378e-01 3.12874474e+03 -6.44600000e-04 -1.65360702e-12 7.09290143e-02 5.55501088e-02 9.19061665e-02 6.10948669e-02 2.32246564e-03 7.18197378e-01 3.12874474e+03 -6.44700000e-04 -1.65360702e-12 7.09290134e-02 5.55501072e-02 9.19061675e-02 6.10948686e-02 2.32246546e-03 7.18197378e-01 3.12874474e+03 -6.44800000e-04 -1.65360702e-12 7.09290126e-02 5.55501055e-02 9.19061685e-02 6.10948702e-02 2.32246527e-03 7.18197378e-01 3.12874474e+03 -6.44900000e-04 -1.65360702e-12 7.09290117e-02 5.55501039e-02 9.19061695e-02 6.10948719e-02 2.32246509e-03 7.18197378e-01 3.12874474e+03 -6.45000000e-04 -1.65360702e-12 7.09290108e-02 5.55501023e-02 9.19061706e-02 6.10948735e-02 2.32246490e-03 7.18197378e-01 3.12874474e+03 -6.45100000e-04 -1.65360702e-12 7.09290099e-02 5.55501007e-02 9.19061716e-02 6.10948752e-02 2.32246472e-03 7.18197378e-01 3.12874474e+03 -6.45200000e-04 -1.65360702e-12 7.09290090e-02 5.55500992e-02 9.19061726e-02 6.10948768e-02 2.32246454e-03 7.18197378e-01 3.12874474e+03 -6.45300000e-04 -1.65360702e-12 7.09290082e-02 5.55500976e-02 9.19061736e-02 6.10948785e-02 2.32246435e-03 7.18197378e-01 3.12874474e+03 -6.45400000e-04 -1.65360702e-12 7.09290073e-02 5.55500960e-02 9.19061746e-02 6.10948801e-02 2.32246417e-03 7.18197378e-01 3.12874474e+03 -6.45500000e-04 -1.65360702e-12 7.09290064e-02 5.55500944e-02 9.19061756e-02 6.10948817e-02 2.32246399e-03 7.18197378e-01 3.12874474e+03 -6.45600000e-04 -1.65360702e-12 7.09290056e-02 5.55500928e-02 9.19061766e-02 6.10948833e-02 2.32246381e-03 7.18197378e-01 3.12874474e+03 -6.45700000e-04 -1.65360702e-12 7.09290047e-02 5.55500912e-02 9.19061776e-02 6.10948849e-02 2.32246363e-03 7.18197378e-01 3.12874474e+03 -6.45800000e-04 -1.65360702e-12 7.09290038e-02 5.55500897e-02 9.19061786e-02 6.10948866e-02 2.32246345e-03 7.18197378e-01 3.12874474e+03 -6.45900000e-04 -1.65360702e-12 7.09290030e-02 5.55500881e-02 9.19061796e-02 6.10948882e-02 2.32246327e-03 7.18197378e-01 3.12874474e+03 -6.46000000e-04 -1.65360702e-12 7.09290021e-02 5.55500866e-02 9.19061806e-02 6.10948898e-02 2.32246309e-03 7.18197378e-01 3.12874474e+03 -6.46100000e-04 -1.65360702e-12 7.09290013e-02 5.55500850e-02 9.19061816e-02 6.10948914e-02 2.32246291e-03 7.18197378e-01 3.12874474e+03 -6.46200000e-04 -1.65360702e-12 7.09290004e-02 5.55500834e-02 9.19061826e-02 6.10948930e-02 2.32246273e-03 7.18197378e-01 3.12874474e+03 -6.46300000e-04 -1.65360702e-12 7.09289996e-02 5.55500819e-02 9.19061836e-02 6.10948946e-02 2.32246255e-03 7.18197378e-01 3.12874474e+03 -6.46400000e-04 -1.65360702e-12 7.09289987e-02 5.55500804e-02 9.19061846e-02 6.10948961e-02 2.32246237e-03 7.18197378e-01 3.12874474e+03 -6.46500000e-04 -1.65360702e-12 7.09289979e-02 5.55500788e-02 9.19061855e-02 6.10948977e-02 2.32246220e-03 7.18197378e-01 3.12874474e+03 -6.46600000e-04 -1.65360702e-12 7.09289970e-02 5.55500773e-02 9.19061865e-02 6.10948993e-02 2.32246202e-03 7.18197378e-01 3.12874474e+03 -6.46700000e-04 -1.65360702e-12 7.09289962e-02 5.55500757e-02 9.19061875e-02 6.10949009e-02 2.32246184e-03 7.18197378e-01 3.12874474e+03 -6.46800000e-04 -1.65360702e-12 7.09289953e-02 5.55500742e-02 9.19061885e-02 6.10949025e-02 2.32246167e-03 7.18197378e-01 3.12874474e+03 -6.46900000e-04 -1.65360702e-12 7.09289945e-02 5.55500727e-02 9.19061894e-02 6.10949040e-02 2.32246149e-03 7.18197378e-01 3.12874474e+03 -6.47000000e-04 -1.65360702e-12 7.09289937e-02 5.55500712e-02 9.19061904e-02 6.10949056e-02 2.32246132e-03 7.18197378e-01 3.12874523e+03 -6.47100000e-04 -1.65360702e-12 7.09289928e-02 5.55500696e-02 9.19061914e-02 6.10949071e-02 2.32246114e-03 7.18197378e-01 3.12874523e+03 -6.47200000e-04 -1.65360702e-12 7.09289920e-02 5.55500681e-02 9.19061923e-02 6.10949087e-02 2.32246097e-03 7.18197378e-01 3.12874523e+03 -6.47300000e-04 -1.65360702e-12 7.09289912e-02 5.55500666e-02 9.19061933e-02 6.10949103e-02 2.32246080e-03 7.18197378e-01 3.12874523e+03 -6.47400000e-04 -1.65360702e-12 7.09289904e-02 5.55500651e-02 9.19061943e-02 6.10949118e-02 2.32246062e-03 7.18197378e-01 3.12874523e+03 -6.47500000e-04 -1.65360702e-12 7.09289895e-02 5.55500636e-02 9.19061952e-02 6.10949133e-02 2.32246045e-03 7.18197378e-01 3.12874523e+03 -6.47600000e-04 -1.65360702e-12 7.09289887e-02 5.55500621e-02 9.19061962e-02 6.10949149e-02 2.32246028e-03 7.18197378e-01 3.12874523e+03 -6.47700000e-04 -1.65360702e-12 7.09289879e-02 5.55500606e-02 9.19061971e-02 6.10949164e-02 2.32246011e-03 7.18197378e-01 3.12874523e+03 -6.47800000e-04 -1.65360702e-12 7.09289871e-02 5.55500591e-02 9.19061981e-02 6.10949180e-02 2.32245993e-03 7.18197378e-01 3.12874523e+03 -6.47900000e-04 -1.65360702e-12 7.09289862e-02 5.55500576e-02 9.19061990e-02 6.10949195e-02 2.32245976e-03 7.18197378e-01 3.12874523e+03 -6.48000000e-04 -1.65360702e-12 7.09289854e-02 5.55500562e-02 9.19062000e-02 6.10949210e-02 2.32245959e-03 7.18197378e-01 3.12874523e+03 -6.48100000e-04 -1.65360702e-12 7.09289846e-02 5.55500547e-02 9.19062009e-02 6.10949225e-02 2.32245942e-03 7.18197378e-01 3.12874523e+03 -6.48200000e-04 -1.65360702e-12 7.09289838e-02 5.55500532e-02 9.19062018e-02 6.10949240e-02 2.32245925e-03 7.18197378e-01 3.12874523e+03 -6.48300000e-04 -1.65360702e-12 7.09289830e-02 5.55500517e-02 9.19062028e-02 6.10949256e-02 2.32245908e-03 7.18197378e-01 3.12874523e+03 -6.48400000e-04 -1.65360702e-12 7.09289822e-02 5.55500503e-02 9.19062037e-02 6.10949271e-02 2.32245892e-03 7.18197378e-01 3.12874523e+03 -6.48500000e-04 -1.65360702e-12 7.09289814e-02 5.55500488e-02 9.19062046e-02 6.10949286e-02 2.32245875e-03 7.18197378e-01 3.12874523e+03 -6.48600000e-04 -1.65360702e-12 7.09289806e-02 5.55500474e-02 9.19062056e-02 6.10949301e-02 2.32245858e-03 7.18197378e-01 3.12874523e+03 -6.48700000e-04 -1.65360702e-12 7.09289798e-02 5.55500459e-02 9.19062065e-02 6.10949316e-02 2.32245841e-03 7.18197378e-01 3.12874523e+03 -6.48800000e-04 -1.65360702e-12 7.09289790e-02 5.55500444e-02 9.19062074e-02 6.10949331e-02 2.32245824e-03 7.18197378e-01 3.12874523e+03 -6.48900000e-04 -1.65360702e-12 7.09289782e-02 5.55500430e-02 9.19062083e-02 6.10949345e-02 2.32245808e-03 7.18197378e-01 3.12874523e+03 -6.49000000e-04 -1.65360702e-12 7.09289774e-02 5.55500415e-02 9.19062093e-02 6.10949360e-02 2.32245791e-03 7.18197378e-01 3.12874523e+03 -6.49100000e-04 -1.65360702e-12 7.09289766e-02 5.55500401e-02 9.19062102e-02 6.10949375e-02 2.32245775e-03 7.18197378e-01 3.12874523e+03 -6.49200000e-04 -1.65360702e-12 7.09289758e-02 5.55500387e-02 9.19062111e-02 6.10949390e-02 2.32245758e-03 7.18197378e-01 3.12874523e+03 -6.49300000e-04 -1.65360702e-12 7.09289750e-02 5.55500372e-02 9.19062120e-02 6.10949405e-02 2.32245742e-03 7.18197378e-01 3.12874523e+03 -6.49400000e-04 -1.65360702e-12 7.09289742e-02 5.55500358e-02 9.19062129e-02 6.10949419e-02 2.32245725e-03 7.18197378e-01 3.12874523e+03 -6.49500000e-04 -1.65360702e-12 7.09289735e-02 5.55500344e-02 9.19062138e-02 6.10949434e-02 2.32245709e-03 7.18197378e-01 3.12874523e+03 -6.49600000e-04 -1.65360702e-12 7.09289727e-02 5.55500330e-02 9.19062147e-02 6.10949449e-02 2.32245692e-03 7.18197378e-01 3.12874523e+03 -6.49700000e-04 -1.65360702e-12 7.09289719e-02 5.55500315e-02 9.19062156e-02 6.10949463e-02 2.32245676e-03 7.18197378e-01 3.12874523e+03 -6.49800000e-04 -1.65360702e-12 7.09289711e-02 5.55500301e-02 9.19062165e-02 6.10949478e-02 2.32245660e-03 7.18197378e-01 3.12874523e+03 -6.49900000e-04 -1.65360702e-12 7.09289704e-02 5.55500287e-02 9.19062174e-02 6.10949492e-02 2.32245643e-03 7.18197378e-01 3.12874523e+03 -6.50000000e-04 -1.65360702e-12 7.09289696e-02 5.55500273e-02 9.19062183e-02 6.10949507e-02 2.32245627e-03 7.18197378e-01 3.12874523e+03 -6.50100000e-04 -1.65360702e-12 7.09289688e-02 5.55500259e-02 9.19062192e-02 6.10949521e-02 2.32245611e-03 7.18197378e-01 3.12874523e+03 -6.50200000e-04 -1.65360702e-12 7.09289680e-02 5.55500245e-02 9.19062201e-02 6.10949536e-02 2.32245595e-03 7.18197378e-01 3.12874523e+03 -6.50300000e-04 -1.65360702e-12 7.09289673e-02 5.55500231e-02 9.19062210e-02 6.10949550e-02 2.32245579e-03 7.18197378e-01 3.12874523e+03 -6.50400000e-04 -1.65360702e-12 7.09289665e-02 5.55500217e-02 9.19062219e-02 6.10949564e-02 2.32245563e-03 7.18197378e-01 3.12874523e+03 -6.50500000e-04 -1.65360702e-12 7.09289657e-02 5.55500203e-02 9.19062228e-02 6.10949579e-02 2.32245547e-03 7.18197378e-01 3.12874523e+03 -6.50600000e-04 -1.65360702e-12 7.09289650e-02 5.55500189e-02 9.19062237e-02 6.10949593e-02 2.32245531e-03 7.18197378e-01 3.12874523e+03 -6.50700000e-04 -1.65360702e-12 7.09289642e-02 5.55500175e-02 9.19062245e-02 6.10949607e-02 2.32245515e-03 7.18197378e-01 3.12874523e+03 -6.50800000e-04 -1.65360702e-12 7.09289635e-02 5.55500162e-02 9.19062254e-02 6.10949621e-02 2.32245499e-03 7.18197378e-01 3.12874523e+03 -6.50900000e-04 -1.65360702e-12 7.09289627e-02 5.55500148e-02 9.19062263e-02 6.10949635e-02 2.32245483e-03 7.18197378e-01 3.12874523e+03 -6.51000000e-04 -1.65360702e-12 7.09289619e-02 5.55500134e-02 9.19062272e-02 6.10949650e-02 2.32245468e-03 7.18197378e-01 3.12874523e+03 -6.51100000e-04 -1.65360702e-12 7.09289612e-02 5.55500120e-02 9.19062280e-02 6.10949664e-02 2.32245452e-03 7.18197378e-01 3.12874523e+03 -6.51200000e-04 -1.65360702e-12 7.09289604e-02 5.55500107e-02 9.19062289e-02 6.10949678e-02 2.32245436e-03 7.18197378e-01 3.12874523e+03 -6.51300000e-04 -1.65360702e-12 7.09289597e-02 5.55500093e-02 9.19062298e-02 6.10949692e-02 2.32245420e-03 7.18197378e-01 3.12874523e+03 -6.51400000e-04 -1.65360702e-12 7.09289590e-02 5.55500080e-02 9.19062306e-02 6.10949706e-02 2.32245405e-03 7.18197378e-01 3.12874523e+03 -6.51500000e-04 -1.65360702e-12 7.09289582e-02 5.55500066e-02 9.19062315e-02 6.10949720e-02 2.32245389e-03 7.18197378e-01 3.12874523e+03 -6.51600000e-04 -1.65360702e-12 7.09289575e-02 5.55500052e-02 9.19062324e-02 6.10949733e-02 2.32245374e-03 7.18197378e-01 3.12874523e+03 -6.51700000e-04 -1.65360702e-12 7.09289567e-02 5.55500039e-02 9.19062332e-02 6.10949747e-02 2.32245358e-03 7.18197378e-01 3.12874523e+03 -6.51800000e-04 -1.65360702e-12 7.09289560e-02 5.55500026e-02 9.19062341e-02 6.10949761e-02 2.32245343e-03 7.18197378e-01 3.12874523e+03 -6.51900000e-04 -1.65360702e-12 7.09289552e-02 5.55500012e-02 9.19062349e-02 6.10949775e-02 2.32245327e-03 7.18197378e-01 3.12874523e+03 -6.52000000e-04 -1.65360702e-12 7.09289545e-02 5.55499999e-02 9.19062358e-02 6.10949789e-02 2.32245312e-03 7.18197378e-01 3.12874523e+03 -6.52100000e-04 -1.65360702e-12 7.09289538e-02 5.55499985e-02 9.19062366e-02 6.10949802e-02 2.32245296e-03 7.18197378e-01 3.12874523e+03 -6.52200000e-04 -1.65360702e-12 7.09289530e-02 5.55499972e-02 9.19062375e-02 6.10949816e-02 2.32245281e-03 7.18197378e-01 3.12874523e+03 -6.52300000e-04 -1.65360702e-12 7.09289523e-02 5.55499959e-02 9.19062383e-02 6.10949830e-02 2.32245266e-03 7.18197378e-01 3.12874567e+03 -6.52400000e-04 -1.65360702e-12 7.09289516e-02 5.55499946e-02 9.19062392e-02 6.10949843e-02 2.32245251e-03 7.18197378e-01 3.12874567e+03 -6.52500000e-04 -1.65360702e-12 7.09289509e-02 5.55499932e-02 9.19062400e-02 6.10949857e-02 2.32245235e-03 7.18197378e-01 3.12874567e+03 -6.52600000e-04 -1.65360702e-12 7.09289501e-02 5.55499919e-02 9.19062408e-02 6.10949870e-02 2.32245220e-03 7.18197378e-01 3.12874567e+03 -6.52700000e-04 -1.65360702e-12 7.09289494e-02 5.55499906e-02 9.19062417e-02 6.10949884e-02 2.32245205e-03 7.18197378e-01 3.12874567e+03 -6.52800000e-04 -1.65360702e-12 7.09289487e-02 5.55499893e-02 9.19062425e-02 6.10949897e-02 2.32245190e-03 7.18197378e-01 3.12874567e+03 -6.52900000e-04 -1.65360702e-12 7.09289480e-02 5.55499880e-02 9.19062433e-02 6.10949911e-02 2.32245175e-03 7.18197378e-01 3.12874567e+03 -6.53000000e-04 -1.65360702e-12 7.09289473e-02 5.55499867e-02 9.19062442e-02 6.10949924e-02 2.32245160e-03 7.18197378e-01 3.12874567e+03 -6.53100000e-04 -1.65360702e-12 7.09289466e-02 5.55499854e-02 9.19062450e-02 6.10949938e-02 2.32245145e-03 7.18197378e-01 3.12874567e+03 -6.53200000e-04 -1.65360702e-12 7.09289458e-02 5.55499841e-02 9.19062458e-02 6.10949951e-02 2.32245130e-03 7.18197378e-01 3.12874567e+03 -6.53300000e-04 -1.65360702e-12 7.09289451e-02 5.55499828e-02 9.19062467e-02 6.10949964e-02 2.32245115e-03 7.18197378e-01 3.12874567e+03 -6.53400000e-04 -1.65360702e-12 7.09289444e-02 5.55499815e-02 9.19062475e-02 6.10949978e-02 2.32245100e-03 7.18197378e-01 3.12874567e+03 -6.53500000e-04 -1.65360702e-12 7.09289437e-02 5.55499802e-02 9.19062483e-02 6.10949991e-02 2.32245086e-03 7.18197378e-01 3.12874567e+03 -6.53600000e-04 -1.65360702e-12 7.09289430e-02 5.55499789e-02 9.19062491e-02 6.10950004e-02 2.32245071e-03 7.18197378e-01 3.12874567e+03 -6.53700000e-04 -1.65360702e-12 7.09289423e-02 5.55499776e-02 9.19062499e-02 6.10950017e-02 2.32245056e-03 7.18197378e-01 3.12874567e+03 -6.53800000e-04 -1.65360702e-12 7.09289416e-02 5.55499764e-02 9.19062507e-02 6.10950030e-02 2.32245041e-03 7.18197378e-01 3.12874567e+03 -6.53900000e-04 -1.65360702e-12 7.09289409e-02 5.55499751e-02 9.19062516e-02 6.10950043e-02 2.32245027e-03 7.18197378e-01 3.12874567e+03 -6.54000000e-04 -1.65360702e-12 7.09289402e-02 5.55499738e-02 9.19062524e-02 6.10950056e-02 2.32245012e-03 7.18197378e-01 3.12874567e+03 -6.54100000e-04 -1.65360702e-12 7.09289395e-02 5.55499726e-02 9.19062532e-02 6.10950069e-02 2.32244998e-03 7.18197378e-01 3.12874567e+03 -6.54200000e-04 -1.65360702e-12 7.09289388e-02 5.55499713e-02 9.19062540e-02 6.10950082e-02 2.32244983e-03 7.18197378e-01 3.12874567e+03 -6.54300000e-04 -1.65360702e-12 7.09289381e-02 5.55499700e-02 9.19062548e-02 6.10950095e-02 2.32244969e-03 7.18197378e-01 3.12874567e+03 -6.54400000e-04 -1.65360702e-12 7.09289374e-02 5.55499688e-02 9.19062556e-02 6.10950108e-02 2.32244954e-03 7.18197378e-01 3.12874567e+03 -6.54500000e-04 -1.65360702e-12 7.09289367e-02 5.55499675e-02 9.19062564e-02 6.10950121e-02 2.32244940e-03 7.18197378e-01 3.12874567e+03 -6.54600000e-04 -1.65360702e-12 7.09289360e-02 5.55499663e-02 9.19062572e-02 6.10950134e-02 2.32244925e-03 7.18197378e-01 3.12874567e+03 -6.54700000e-04 -1.65360702e-12 7.09289354e-02 5.55499650e-02 9.19062580e-02 6.10950147e-02 2.32244911e-03 7.18197378e-01 3.12874567e+03 -6.54800000e-04 -1.65360702e-12 7.09289347e-02 5.55499638e-02 9.19062588e-02 6.10950160e-02 2.32244897e-03 7.18197378e-01 3.12874567e+03 -6.54900000e-04 -1.65360702e-12 7.09289340e-02 5.55499625e-02 9.19062596e-02 6.10950173e-02 2.32244882e-03 7.18197378e-01 3.12874567e+03 -6.55000000e-04 -1.65360702e-12 7.09289333e-02 5.55499613e-02 9.19062603e-02 6.10950185e-02 2.32244868e-03 7.18197378e-01 3.12874567e+03 -6.55100000e-04 -1.65360702e-12 7.09289326e-02 5.55499601e-02 9.19062611e-02 6.10950198e-02 2.32244854e-03 7.18197378e-01 3.12874567e+03 -6.55200000e-04 -1.65360702e-12 7.09289320e-02 5.55499588e-02 9.19062619e-02 6.10950211e-02 2.32244840e-03 7.18197378e-01 3.12874567e+03 -6.55300000e-04 -1.65360702e-12 7.09289313e-02 5.55499576e-02 9.19062627e-02 6.10950223e-02 2.32244825e-03 7.18197378e-01 3.12874567e+03 -6.55400000e-04 -1.65360702e-12 7.09289306e-02 5.55499564e-02 9.19062635e-02 6.10950236e-02 2.32244811e-03 7.18197378e-01 3.12874567e+03 -6.55500000e-04 -1.65360702e-12 7.09289299e-02 5.55499551e-02 9.19062643e-02 6.10950248e-02 2.32244797e-03 7.18197378e-01 3.12874567e+03 -6.55600000e-04 -1.65360702e-12 7.09289293e-02 5.55499539e-02 9.19062650e-02 6.10950261e-02 2.32244783e-03 7.18197378e-01 3.12874567e+03 -6.55700000e-04 -1.65360702e-12 7.09289286e-02 5.55499527e-02 9.19062658e-02 6.10950274e-02 2.32244769e-03 7.18197378e-01 3.12874567e+03 -6.55800000e-04 -1.65360702e-12 7.09289279e-02 5.55499515e-02 9.19062666e-02 6.10950286e-02 2.32244755e-03 7.18197378e-01 3.12874567e+03 -6.55900000e-04 -1.65360702e-12 7.09289273e-02 5.55499503e-02 9.19062673e-02 6.10950298e-02 2.32244741e-03 7.18197378e-01 3.12874567e+03 -6.56000000e-04 -1.65360702e-12 7.09289266e-02 5.55499491e-02 9.19062681e-02 6.10950311e-02 2.32244727e-03 7.18197378e-01 3.12874567e+03 -6.56100000e-04 -1.65360702e-12 7.09289259e-02 5.55499479e-02 9.19062689e-02 6.10950323e-02 2.32244714e-03 7.18197378e-01 3.12874567e+03 -6.56200000e-04 -1.65360702e-12 7.09289253e-02 5.55499467e-02 9.19062696e-02 6.10950336e-02 2.32244700e-03 7.18197378e-01 3.12874567e+03 -6.56300000e-04 -1.65360702e-12 7.09289246e-02 5.55499455e-02 9.19062704e-02 6.10950348e-02 2.32244686e-03 7.18197378e-01 3.12874567e+03 -6.56400000e-04 -1.65360702e-12 7.09289240e-02 5.55499443e-02 9.19062712e-02 6.10950360e-02 2.32244672e-03 7.18197378e-01 3.12874567e+03 -6.56500000e-04 -1.65360702e-12 7.09289233e-02 5.55499431e-02 9.19062719e-02 6.10950372e-02 2.32244659e-03 7.18197378e-01 3.12874567e+03 -6.56600000e-04 -1.65360702e-12 7.09289227e-02 5.55499419e-02 9.19062727e-02 6.10950385e-02 2.32244645e-03 7.18197378e-01 3.12874567e+03 -6.56700000e-04 -1.65360702e-12 7.09289220e-02 5.55499407e-02 9.19062734e-02 6.10950397e-02 2.32244631e-03 7.18197378e-01 3.12874567e+03 -6.56800000e-04 -1.65360702e-12 7.09289214e-02 5.55499395e-02 9.19062742e-02 6.10950409e-02 2.32244618e-03 7.18197378e-01 3.12874567e+03 -6.56900000e-04 -1.65360702e-12 7.09289207e-02 5.55499383e-02 9.19062749e-02 6.10950421e-02 2.32244604e-03 7.18197378e-01 3.12874567e+03 -6.57000000e-04 -1.65360702e-12 7.09289201e-02 5.55499372e-02 9.19062757e-02 6.10950433e-02 2.32244591e-03 7.18197378e-01 3.12874567e+03 -6.57100000e-04 -1.65360702e-12 7.09289194e-02 5.55499360e-02 9.19062764e-02 6.10950445e-02 2.32244577e-03 7.18197378e-01 3.12874567e+03 -6.57200000e-04 -1.65360702e-12 7.09289188e-02 5.55499348e-02 9.19062772e-02 6.10950457e-02 2.32244564e-03 7.18197378e-01 3.12874567e+03 -6.57300000e-04 -1.65360702e-12 7.09289181e-02 5.55499336e-02 9.19062779e-02 6.10950469e-02 2.32244550e-03 7.18197378e-01 3.12874567e+03 -6.57400000e-04 -1.65360702e-12 7.09289175e-02 5.55499325e-02 9.19062787e-02 6.10950481e-02 2.32244537e-03 7.18197378e-01 3.12874567e+03 -6.57500000e-04 -1.65360702e-12 7.09289169e-02 5.55499313e-02 9.19062794e-02 6.10950493e-02 2.32244523e-03 7.18197378e-01 3.12874605e+03 -6.57600000e-04 -1.65360702e-12 7.09289162e-02 5.55499302e-02 9.19062801e-02 6.10950505e-02 2.32244510e-03 7.18197378e-01 3.12874605e+03 -6.57700000e-04 -1.65360702e-12 7.09289156e-02 5.55499290e-02 9.19062809e-02 6.10950517e-02 2.32244497e-03 7.18197378e-01 3.12874605e+03 -6.57800000e-04 -1.65360702e-12 7.09289150e-02 5.55499279e-02 9.19062816e-02 6.10950529e-02 2.32244483e-03 7.18197378e-01 3.12874605e+03 -6.57900000e-04 -1.65360702e-12 7.09289143e-02 5.55499267e-02 9.19062824e-02 6.10950541e-02 2.32244470e-03 7.18197378e-01 3.12874605e+03 -6.58000000e-04 -1.65360702e-12 7.09289137e-02 5.55499256e-02 9.19062831e-02 6.10950553e-02 2.32244457e-03 7.18197378e-01 3.12874605e+03 -6.58100000e-04 -1.65360702e-12 7.09289131e-02 5.55499244e-02 9.19062838e-02 6.10950564e-02 2.32244444e-03 7.18197378e-01 3.12874605e+03 -6.58200000e-04 -1.65360702e-12 7.09289124e-02 5.55499233e-02 9.19062845e-02 6.10950576e-02 2.32244431e-03 7.18197378e-01 3.12874605e+03 -6.58300000e-04 -1.65360702e-12 7.09289118e-02 5.55499221e-02 9.19062853e-02 6.10950588e-02 2.32244418e-03 7.18197378e-01 3.12874605e+03 -6.58400000e-04 -1.65360702e-12 7.09289112e-02 5.55499210e-02 9.19062860e-02 6.10950599e-02 2.32244405e-03 7.18197378e-01 3.12874605e+03 -6.58500000e-04 -1.65360702e-12 7.09289106e-02 5.55499199e-02 9.19062867e-02 6.10950611e-02 2.32244392e-03 7.18197378e-01 3.12874605e+03 -6.58600000e-04 -1.65360702e-12 7.09289099e-02 5.55499187e-02 9.19062874e-02 6.10950623e-02 2.32244379e-03 7.18197378e-01 3.12874605e+03 -6.58700000e-04 -1.65360702e-12 7.09289093e-02 5.55499176e-02 9.19062881e-02 6.10950634e-02 2.32244366e-03 7.18197378e-01 3.12874605e+03 -6.58800000e-04 -1.65360702e-12 7.09289087e-02 5.55499165e-02 9.19062889e-02 6.10950646e-02 2.32244353e-03 7.18197378e-01 3.12874605e+03 -6.58900000e-04 -1.65360702e-12 7.09289081e-02 5.55499154e-02 9.19062896e-02 6.10950657e-02 2.32244340e-03 7.18197378e-01 3.12874605e+03 -6.59000000e-04 -1.65360702e-12 7.09289075e-02 5.55499142e-02 9.19062903e-02 6.10950669e-02 2.32244327e-03 7.18197378e-01 3.12874605e+03 -6.59100000e-04 -1.65360702e-12 7.09289069e-02 5.55499131e-02 9.19062910e-02 6.10950680e-02 2.32244314e-03 7.18197378e-01 3.12874605e+03 -6.59200000e-04 -1.65360702e-12 7.09289063e-02 5.55499120e-02 9.19062917e-02 6.10950692e-02 2.32244301e-03 7.18197378e-01 3.12874605e+03 -6.59300000e-04 -1.65360702e-12 7.09289056e-02 5.55499109e-02 9.19062924e-02 6.10950703e-02 2.32244289e-03 7.18197378e-01 3.12874605e+03 -6.59400000e-04 -1.65360702e-12 7.09289050e-02 5.55499098e-02 9.19062931e-02 6.10950715e-02 2.32244276e-03 7.18197378e-01 3.12874605e+03 -6.59500000e-04 -1.65360702e-12 7.09289044e-02 5.55499087e-02 9.19062938e-02 6.10950726e-02 2.32244263e-03 7.18197378e-01 3.12874605e+03 -6.59600000e-04 -1.65360702e-12 7.09289038e-02 5.55499076e-02 9.19062945e-02 6.10950737e-02 2.32244250e-03 7.18197378e-01 3.12874605e+03 -6.59700000e-04 -1.65360702e-12 7.09289032e-02 5.55499065e-02 9.19062952e-02 6.10950748e-02 2.32244238e-03 7.18197378e-01 3.12874605e+03 -6.59800000e-04 -1.65360702e-12 7.09289026e-02 5.55499054e-02 9.19062959e-02 6.10950760e-02 2.32244225e-03 7.18197378e-01 3.12874605e+03 -6.59900000e-04 -1.65360702e-12 7.09289020e-02 5.55499043e-02 9.19062966e-02 6.10950771e-02 2.32244213e-03 7.18197378e-01 3.12874605e+03 -6.60000000e-04 -1.65360702e-12 7.09289014e-02 5.55499032e-02 9.19062973e-02 6.10950782e-02 2.32244200e-03 7.18197378e-01 3.12874605e+03 -6.60100000e-04 -1.65360702e-12 7.09289008e-02 5.55499021e-02 9.19062980e-02 6.10950793e-02 2.32244188e-03 7.18197378e-01 3.12874605e+03 -6.60200000e-04 -1.65360702e-12 7.09289002e-02 5.55499010e-02 9.19062987e-02 6.10950804e-02 2.32244175e-03 7.18197378e-01 3.12874605e+03 -6.60300000e-04 -1.65360702e-12 7.09288996e-02 5.55499000e-02 9.19062994e-02 6.10950816e-02 2.32244163e-03 7.18197378e-01 3.12874605e+03 -6.60400000e-04 -1.65360702e-12 7.09288990e-02 5.55498989e-02 9.19063001e-02 6.10950827e-02 2.32244150e-03 7.18197378e-01 3.12874605e+03 -6.60500000e-04 -1.65360702e-12 7.09288984e-02 5.55498978e-02 9.19063007e-02 6.10950838e-02 2.32244138e-03 7.18197378e-01 3.12874605e+03 -6.60600000e-04 -1.65360702e-12 7.09288979e-02 5.55498967e-02 9.19063014e-02 6.10950849e-02 2.32244126e-03 7.18197378e-01 3.12874605e+03 -6.60700000e-04 -1.65360702e-12 7.09288973e-02 5.55498957e-02 9.19063021e-02 6.10950860e-02 2.32244113e-03 7.18197378e-01 3.12874605e+03 -6.60800000e-04 -1.65360702e-12 7.09288967e-02 5.55498946e-02 9.19063028e-02 6.10950871e-02 2.32244101e-03 7.18197378e-01 3.12874605e+03 -6.60900000e-04 -1.65360702e-12 7.09288961e-02 5.55498935e-02 9.19063035e-02 6.10950882e-02 2.32244089e-03 7.18197378e-01 3.12874605e+03 -6.61000000e-04 -1.65360702e-12 7.09288955e-02 5.55498925e-02 9.19063041e-02 6.10950893e-02 2.32244076e-03 7.18197378e-01 3.12874605e+03 -6.61100000e-04 -1.65360702e-12 7.09288949e-02 5.55498914e-02 9.19063048e-02 6.10950904e-02 2.32244064e-03 7.18197378e-01 3.12874605e+03 -6.61200000e-04 -1.65360702e-12 7.09288944e-02 5.55498904e-02 9.19063055e-02 6.10950914e-02 2.32244052e-03 7.18197378e-01 3.12874605e+03 -6.61300000e-04 -1.65360702e-12 7.09288938e-02 5.55498893e-02 9.19063062e-02 6.10950925e-02 2.32244040e-03 7.18197378e-01 3.12874605e+03 -6.61400000e-04 -1.65360702e-12 7.09288932e-02 5.55498882e-02 9.19063068e-02 6.10950936e-02 2.32244028e-03 7.18197378e-01 3.12874605e+03 -6.61500000e-04 -1.65360702e-12 7.09288926e-02 5.55498872e-02 9.19063075e-02 6.10950947e-02 2.32244016e-03 7.18197378e-01 3.12874605e+03 -6.61600000e-04 -1.65360702e-12 7.09288920e-02 5.55498862e-02 9.19063082e-02 6.10950958e-02 2.32244004e-03 7.18197378e-01 3.12874605e+03 -6.61700000e-04 -1.65360702e-12 7.09288915e-02 5.55498851e-02 9.19063088e-02 6.10950968e-02 2.32243992e-03 7.18197378e-01 3.12874605e+03 -6.61800000e-04 -1.65360702e-12 7.09288909e-02 5.55498841e-02 9.19063095e-02 6.10950979e-02 2.32243980e-03 7.18197378e-01 3.12874605e+03 -6.61900000e-04 -1.65360702e-12 7.09288903e-02 5.55498830e-02 9.19063101e-02 6.10950990e-02 2.32243968e-03 7.18197378e-01 3.12874605e+03 -6.62000000e-04 -1.65360702e-12 7.09288898e-02 5.55498820e-02 9.19063108e-02 6.10951000e-02 2.32243956e-03 7.18197378e-01 3.12874605e+03 -6.62100000e-04 -1.65360702e-12 7.09288892e-02 5.55498810e-02 9.19063115e-02 6.10951011e-02 2.32243944e-03 7.18197378e-01 3.12874605e+03 -6.62200000e-04 -1.65360702e-12 7.09288886e-02 5.55498799e-02 9.19063121e-02 6.10951022e-02 2.32243932e-03 7.18197378e-01 3.12874605e+03 -6.62300000e-04 -1.65360702e-12 7.09288881e-02 5.55498789e-02 9.19063128e-02 6.10951032e-02 2.32243920e-03 7.18197378e-01 3.12874605e+03 -6.62400000e-04 -1.65360702e-12 7.09288875e-02 5.55498779e-02 9.19063134e-02 6.10951043e-02 2.32243909e-03 7.18197378e-01 3.12874605e+03 -6.62500000e-04 -1.65360702e-12 7.09288869e-02 5.55498769e-02 9.19063141e-02 6.10951053e-02 2.32243897e-03 7.18197378e-01 3.12874605e+03 -6.62600000e-04 -1.65360702e-12 7.09288864e-02 5.55498758e-02 9.19063147e-02 6.10951064e-02 2.32243885e-03 7.18197378e-01 3.12874605e+03 -6.62700000e-04 -1.65360702e-12 7.09288858e-02 5.55498748e-02 9.19063154e-02 6.10951074e-02 2.32243874e-03 7.18197378e-01 3.12874605e+03 -6.62800000e-04 -1.65360702e-12 7.09288853e-02 5.55498738e-02 9.19063160e-02 6.10951084e-02 2.32243862e-03 7.18197378e-01 3.12874638e+03 -6.62900000e-04 -1.65360702e-12 7.09288847e-02 5.55498728e-02 9.19063167e-02 6.10951095e-02 2.32243850e-03 7.18197378e-01 3.12874638e+03 -6.63000000e-04 -1.65360702e-12 7.09288842e-02 5.55498718e-02 9.19063173e-02 6.10951105e-02 2.32243839e-03 7.18197378e-01 3.12874638e+03 -6.63100000e-04 -1.65360702e-12 7.09288836e-02 5.55498708e-02 9.19063179e-02 6.10951116e-02 2.32243827e-03 7.18197378e-01 3.12874638e+03 -6.63200000e-04 -1.65360702e-12 7.09288830e-02 5.55498698e-02 9.19063186e-02 6.10951126e-02 2.32243815e-03 7.18197378e-01 3.12874638e+03 -6.63300000e-04 -1.65360702e-12 7.09288825e-02 5.55498688e-02 9.19063192e-02 6.10951136e-02 2.32243804e-03 7.18197378e-01 3.12874638e+03 -6.63400000e-04 -1.65360702e-12 7.09288819e-02 5.55498678e-02 9.19063199e-02 6.10951146e-02 2.32243792e-03 7.18197378e-01 3.12874638e+03 -6.63500000e-04 -1.65360702e-12 7.09288814e-02 5.55498668e-02 9.19063205e-02 6.10951157e-02 2.32243781e-03 7.18197378e-01 3.12874638e+03 -6.63600000e-04 -1.65360702e-12 7.09288809e-02 5.55498658e-02 9.19063211e-02 6.10951167e-02 2.32243770e-03 7.18197378e-01 3.12874638e+03 -6.63700000e-04 -1.65360702e-12 7.09288803e-02 5.55498648e-02 9.19063218e-02 6.10951177e-02 2.32243758e-03 7.18197378e-01 3.12874638e+03 -6.63800000e-04 -1.65360702e-12 7.09288798e-02 5.55498638e-02 9.19063224e-02 6.10951187e-02 2.32243747e-03 7.18197378e-01 3.12874638e+03 -6.63900000e-04 -1.65360702e-12 7.09288792e-02 5.55498628e-02 9.19063230e-02 6.10951197e-02 2.32243735e-03 7.18197378e-01 3.12874638e+03 -6.64000000e-04 -1.65360702e-12 7.09288787e-02 5.55498618e-02 9.19063236e-02 6.10951208e-02 2.32243724e-03 7.18197378e-01 3.12874638e+03 -6.64100000e-04 -1.65360702e-12 7.09288781e-02 5.55498608e-02 9.19063243e-02 6.10951218e-02 2.32243713e-03 7.18197378e-01 3.12874638e+03 -6.64200000e-04 -1.65360702e-12 7.09288776e-02 5.55498599e-02 9.19063249e-02 6.10951228e-02 2.32243702e-03 7.18197378e-01 3.12874638e+03 -6.64300000e-04 -1.65360702e-12 7.09288771e-02 5.55498589e-02 9.19063255e-02 6.10951238e-02 2.32243690e-03 7.18197378e-01 3.12874638e+03 -6.64400000e-04 -1.65360702e-12 7.09288765e-02 5.55498579e-02 9.19063261e-02 6.10951248e-02 2.32243679e-03 7.18197378e-01 3.12874638e+03 -6.64500000e-04 -1.65360702e-12 7.09288760e-02 5.55498569e-02 9.19063267e-02 6.10951258e-02 2.32243668e-03 7.18197378e-01 3.12874638e+03 -6.64600000e-04 -1.65360702e-12 7.09288755e-02 5.55498560e-02 9.19063274e-02 6.10951268e-02 2.32243657e-03 7.18197378e-01 3.12874638e+03 -6.64700000e-04 -1.65360702e-12 7.09288749e-02 5.55498550e-02 9.19063280e-02 6.10951278e-02 2.32243646e-03 7.18197378e-01 3.12874638e+03 -6.64800000e-04 -1.65360702e-12 7.09288744e-02 5.55498541e-02 9.19063286e-02 6.10951287e-02 2.32243635e-03 7.18197378e-01 3.12874638e+03 -6.64900000e-04 -1.65360702e-12 7.09288739e-02 5.55498531e-02 9.19063292e-02 6.10951297e-02 2.32243624e-03 7.18197378e-01 3.12874638e+03 -6.65000000e-04 -1.65360702e-12 7.09288734e-02 5.55498521e-02 9.19063298e-02 6.10951307e-02 2.32243613e-03 7.18197378e-01 3.12874638e+03 -6.65100000e-04 -1.65360702e-12 7.09288728e-02 5.55498512e-02 9.19063304e-02 6.10951317e-02 2.32243602e-03 7.18197378e-01 3.12874638e+03 -6.65200000e-04 -1.65360702e-12 7.09288723e-02 5.55498502e-02 9.19063310e-02 6.10951327e-02 2.32243591e-03 7.18197378e-01 3.12874638e+03 -6.65300000e-04 -1.65360702e-12 7.09288718e-02 5.55498493e-02 9.19063316e-02 6.10951337e-02 2.32243580e-03 7.18197378e-01 3.12874638e+03 -6.65400000e-04 -1.65360702e-12 7.09288713e-02 5.55498483e-02 9.19063322e-02 6.10951346e-02 2.32243569e-03 7.18197378e-01 3.12874638e+03 -6.65500000e-04 -1.65360702e-12 7.09288707e-02 5.55498474e-02 9.19063328e-02 6.10951356e-02 2.32243558e-03 7.18197378e-01 3.12874638e+03 -6.65600000e-04 -1.65360702e-12 7.09288702e-02 5.55498464e-02 9.19063334e-02 6.10951366e-02 2.32243547e-03 7.18197378e-01 3.12874638e+03 -6.65700000e-04 -1.65360702e-12 7.09288697e-02 5.55498455e-02 9.19063340e-02 6.10951376e-02 2.32243536e-03 7.18197378e-01 3.12874638e+03 -6.65800000e-04 -1.65360702e-12 7.09288692e-02 5.55498445e-02 9.19063346e-02 6.10951385e-02 2.32243525e-03 7.18197378e-01 3.12874638e+03 -6.65900000e-04 -1.65360702e-12 7.09288687e-02 5.55498436e-02 9.19063352e-02 6.10951395e-02 2.32243515e-03 7.18197378e-01 3.12874638e+03 -6.66000000e-04 -1.65360702e-12 7.09288682e-02 5.55498427e-02 9.19063358e-02 6.10951404e-02 2.32243504e-03 7.18197378e-01 3.12874638e+03 -6.66100000e-04 -1.65360702e-12 7.09288677e-02 5.55498417e-02 9.19063364e-02 6.10951414e-02 2.32243493e-03 7.18197378e-01 3.12874638e+03 -6.66200000e-04 -1.65360702e-12 7.09288671e-02 5.55498408e-02 9.19063370e-02 6.10951424e-02 2.32243482e-03 7.18197378e-01 3.12874638e+03 -6.66300000e-04 -1.65360702e-12 7.09288666e-02 5.55498399e-02 9.19063376e-02 6.10951433e-02 2.32243472e-03 7.18197378e-01 3.12874638e+03 -6.66400000e-04 -1.65360702e-12 7.09288661e-02 5.55498390e-02 9.19063382e-02 6.10951443e-02 2.32243461e-03 7.18197378e-01 3.12874638e+03 -6.66500000e-04 -1.65360702e-12 7.09288656e-02 5.55498380e-02 9.19063388e-02 6.10951452e-02 2.32243450e-03 7.18197378e-01 3.12874638e+03 -6.66600000e-04 -1.65360702e-12 7.09288651e-02 5.55498371e-02 9.19063394e-02 6.10951462e-02 2.32243440e-03 7.18197378e-01 3.12874638e+03 -6.66700000e-04 -1.65360702e-12 7.09288646e-02 5.55498362e-02 9.19063400e-02 6.10951471e-02 2.32243429e-03 7.18197378e-01 3.12874638e+03 -6.66800000e-04 -1.65360702e-12 7.09288641e-02 5.55498353e-02 9.19063405e-02 6.10951480e-02 2.32243419e-03 7.18197378e-01 3.12874638e+03 -6.66900000e-04 -1.65360702e-12 7.09288636e-02 5.55498344e-02 9.19063411e-02 6.10951490e-02 2.32243408e-03 7.18197378e-01 3.12874638e+03 -6.67000000e-04 -1.65360702e-12 7.09288631e-02 5.55498335e-02 9.19063417e-02 6.10951499e-02 2.32243398e-03 7.18197378e-01 3.12874638e+03 -6.67100000e-04 -1.65360702e-12 7.09288626e-02 5.55498326e-02 9.19063423e-02 6.10951508e-02 2.32243387e-03 7.18197378e-01 3.12874638e+03 -6.67200000e-04 -1.65360702e-12 7.09288621e-02 5.55498316e-02 9.19063428e-02 6.10951518e-02 2.32243377e-03 7.18197378e-01 3.12874638e+03 -6.67300000e-04 -1.65360702e-12 7.09288616e-02 5.55498307e-02 9.19063434e-02 6.10951527e-02 2.32243367e-03 7.18197378e-01 3.12874638e+03 -6.67400000e-04 -1.65360702e-12 7.09288611e-02 5.55498298e-02 9.19063440e-02 6.10951536e-02 2.32243356e-03 7.18197378e-01 3.12874638e+03 -6.67500000e-04 -1.65360702e-12 7.09288606e-02 5.55498289e-02 9.19063446e-02 6.10951546e-02 2.32243346e-03 7.18197378e-01 3.12874638e+03 -6.67600000e-04 -1.65360702e-12 7.09288601e-02 5.55498280e-02 9.19063451e-02 6.10951555e-02 2.32243336e-03 7.18197378e-01 3.12874638e+03 -6.67700000e-04 -1.65360702e-12 7.09288596e-02 5.55498272e-02 9.19063457e-02 6.10951564e-02 2.32243325e-03 7.18197378e-01 3.12874638e+03 -6.67800000e-04 -1.65360702e-12 7.09288591e-02 5.55498263e-02 9.19063463e-02 6.10951573e-02 2.32243315e-03 7.18197378e-01 3.12874638e+03 -6.67900000e-04 -1.65360702e-12 7.09288587e-02 5.55498254e-02 9.19063468e-02 6.10951582e-02 2.32243305e-03 7.18197378e-01 3.12874638e+03 -6.68000000e-04 -1.65360702e-12 7.09288582e-02 5.55498245e-02 9.19063474e-02 6.10951591e-02 2.32243295e-03 7.18197378e-01 3.12874638e+03 -6.68100000e-04 -1.65360702e-12 7.09288577e-02 5.55498236e-02 9.19063480e-02 6.10951601e-02 2.32243284e-03 7.18197378e-01 3.12874667e+03 -6.68200000e-04 -1.65360702e-12 7.09288572e-02 5.55498227e-02 9.19063485e-02 6.10951610e-02 2.32243274e-03 7.18197378e-01 3.12874667e+03 -6.68300000e-04 -1.65360702e-12 7.09288567e-02 5.55498218e-02 9.19063491e-02 6.10951619e-02 2.32243264e-03 7.18197378e-01 3.12874667e+03 -6.68400000e-04 -1.65360702e-12 7.09288562e-02 5.55498210e-02 9.19063497e-02 6.10951628e-02 2.32243254e-03 7.18197378e-01 3.12874667e+03 -6.68500000e-04 -1.65360702e-12 7.09288557e-02 5.55498201e-02 9.19063502e-02 6.10951637e-02 2.32243244e-03 7.18197378e-01 3.12874667e+03 -6.68600000e-04 -1.65360702e-12 7.09288553e-02 5.55498192e-02 9.19063508e-02 6.10951646e-02 2.32243234e-03 7.18197378e-01 3.12874667e+03 -6.68700000e-04 -1.65360702e-12 7.09288548e-02 5.55498183e-02 9.19063513e-02 6.10951655e-02 2.32243224e-03 7.18197378e-01 3.12874667e+03 -6.68800000e-04 -1.65360702e-12 7.09288543e-02 5.55498175e-02 9.19063519e-02 6.10951664e-02 2.32243214e-03 7.18197378e-01 3.12874667e+03 -6.68900000e-04 -1.65360702e-12 7.09288538e-02 5.55498166e-02 9.19063524e-02 6.10951673e-02 2.32243204e-03 7.18197378e-01 3.12874667e+03 -6.69000000e-04 -1.65360702e-12 7.09288534e-02 5.55498157e-02 9.19063530e-02 6.10951681e-02 2.32243194e-03 7.18197378e-01 3.12874667e+03 -6.69100000e-04 -1.65360702e-12 7.09288529e-02 5.55498149e-02 9.19063535e-02 6.10951690e-02 2.32243184e-03 7.18197378e-01 3.12874667e+03 -6.69200000e-04 -1.65360702e-12 7.09288524e-02 5.55498140e-02 9.19063541e-02 6.10951699e-02 2.32243174e-03 7.18197378e-01 3.12874667e+03 -6.69300000e-04 -1.65360702e-12 7.09288519e-02 5.55498131e-02 9.19063546e-02 6.10951708e-02 2.32243164e-03 7.18197378e-01 3.12874667e+03 -6.69400000e-04 -1.65360702e-12 7.09288515e-02 5.55498123e-02 9.19063552e-02 6.10951717e-02 2.32243154e-03 7.18197378e-01 3.12874667e+03 -6.69500000e-04 -1.65360702e-12 7.09288510e-02 5.55498114e-02 9.19063557e-02 6.10951726e-02 2.32243144e-03 7.18197378e-01 3.12874667e+03 -6.69600000e-04 -1.65360702e-12 7.09288505e-02 5.55498106e-02 9.19063563e-02 6.10951734e-02 2.32243135e-03 7.18197378e-01 3.12874667e+03 -6.69700000e-04 -1.65360702e-12 7.09288501e-02 5.55498097e-02 9.19063568e-02 6.10951743e-02 2.32243125e-03 7.18197378e-01 3.12874667e+03 -6.69800000e-04 -1.65360702e-12 7.09288496e-02 5.55498089e-02 9.19063573e-02 6.10951752e-02 2.32243115e-03 7.18197378e-01 3.12874667e+03 -6.69900000e-04 -1.65360702e-12 7.09288491e-02 5.55498080e-02 9.19063579e-02 6.10951760e-02 2.32243105e-03 7.18197378e-01 3.12874667e+03 -6.70000000e-04 -1.65360702e-12 7.09288487e-02 5.55498072e-02 9.19063584e-02 6.10951769e-02 2.32243096e-03 7.18197378e-01 3.12874667e+03 -6.70100000e-04 -1.65360702e-12 7.09288482e-02 5.55498064e-02 9.19063589e-02 6.10951778e-02 2.32243086e-03 7.18197378e-01 3.12874667e+03 -6.70200000e-04 -1.65360702e-12 7.09288478e-02 5.55498055e-02 9.19063595e-02 6.10951786e-02 2.32243076e-03 7.18197378e-01 3.12874667e+03 -6.70300000e-04 -1.65360702e-12 7.09288473e-02 5.55498047e-02 9.19063600e-02 6.10951795e-02 2.32243067e-03 7.18197378e-01 3.12874667e+03 -6.70400000e-04 -1.65360702e-12 7.09288468e-02 5.55498038e-02 9.19063605e-02 6.10951804e-02 2.32243057e-03 7.18197378e-01 3.12874667e+03 -6.70500000e-04 -1.65360702e-12 7.09288464e-02 5.55498030e-02 9.19063611e-02 6.10951812e-02 2.32243048e-03 7.18197378e-01 3.12874667e+03 -6.70600000e-04 -1.65360702e-12 7.09288459e-02 5.55498022e-02 9.19063616e-02 6.10951821e-02 2.32243038e-03 7.18197378e-01 3.12874667e+03 -6.70700000e-04 -1.65360702e-12 7.09288455e-02 5.55498013e-02 9.19063621e-02 6.10951829e-02 2.32243029e-03 7.18197378e-01 3.12874667e+03 -6.70800000e-04 -1.65360702e-12 7.09288450e-02 5.55498005e-02 9.19063627e-02 6.10951838e-02 2.32243019e-03 7.18197378e-01 3.12874667e+03 -6.70900000e-04 -1.65360702e-12 7.09288446e-02 5.55497997e-02 9.19063632e-02 6.10951846e-02 2.32243010e-03 7.18197378e-01 3.12874667e+03 -6.71000000e-04 -1.65360702e-12 7.09288441e-02 5.55497989e-02 9.19063637e-02 6.10951855e-02 2.32243000e-03 7.18197378e-01 3.12874667e+03 -6.71100000e-04 -1.65360702e-12 7.09288437e-02 5.55497981e-02 9.19063642e-02 6.10951863e-02 2.32242991e-03 7.18197378e-01 3.12874667e+03 -6.71200000e-04 -1.65360702e-12 7.09288432e-02 5.55497972e-02 9.19063647e-02 6.10951871e-02 2.32242981e-03 7.18197378e-01 3.12874667e+03 -6.71300000e-04 -1.65360702e-12 7.09288428e-02 5.55497964e-02 9.19063653e-02 6.10951880e-02 2.32242972e-03 7.18197378e-01 3.12874667e+03 -6.71400000e-04 -1.65360702e-12 7.09288423e-02 5.55497956e-02 9.19063658e-02 6.10951888e-02 2.32242962e-03 7.18197378e-01 3.12874667e+03 -6.71500000e-04 -1.65360702e-12 7.09288419e-02 5.55497948e-02 9.19063663e-02 6.10951897e-02 2.32242953e-03 7.18197378e-01 3.12874667e+03 -6.71600000e-04 -1.65360702e-12 7.09288414e-02 5.55497940e-02 9.19063668e-02 6.10951905e-02 2.32242944e-03 7.18197378e-01 3.12874667e+03 -6.71700000e-04 -1.65360702e-12 7.09288410e-02 5.55497932e-02 9.19063673e-02 6.10951913e-02 2.32242935e-03 7.18197378e-01 3.12874667e+03 -6.71800000e-04 -1.65360702e-12 7.09288405e-02 5.55497924e-02 9.19063678e-02 6.10951921e-02 2.32242925e-03 7.18197378e-01 3.12874667e+03 -6.71900000e-04 -1.65360702e-12 7.09288401e-02 5.55497916e-02 9.19063684e-02 6.10951930e-02 2.32242916e-03 7.18197378e-01 3.12874667e+03 -6.72000000e-04 -1.65360702e-12 7.09288397e-02 5.55497908e-02 9.19063689e-02 6.10951938e-02 2.32242907e-03 7.18197378e-01 3.12874667e+03 -6.72100000e-04 -1.65360702e-12 7.09288392e-02 5.55497900e-02 9.19063694e-02 6.10951946e-02 2.32242898e-03 7.18197378e-01 3.12874667e+03 -6.72200000e-04 -1.65360702e-12 7.09288388e-02 5.55497892e-02 9.19063699e-02 6.10951954e-02 2.32242888e-03 7.18197378e-01 3.12874667e+03 -6.72300000e-04 -1.65360702e-12 7.09288383e-02 5.55497884e-02 9.19063704e-02 6.10951963e-02 2.32242879e-03 7.18197378e-01 3.12874667e+03 -6.72400000e-04 -1.65360702e-12 7.09288379e-02 5.55497876e-02 9.19063709e-02 6.10951971e-02 2.32242870e-03 7.18197378e-01 3.12874667e+03 -6.72500000e-04 -1.65360702e-12 7.09288375e-02 5.55497868e-02 9.19063714e-02 6.10951979e-02 2.32242861e-03 7.18197378e-01 3.12874667e+03 -6.72600000e-04 -1.65360702e-12 7.09288370e-02 5.55497860e-02 9.19063719e-02 6.10951987e-02 2.32242852e-03 7.18197378e-01 3.12874667e+03 -6.72700000e-04 -1.65360702e-12 7.09288366e-02 5.55497852e-02 9.19063724e-02 6.10951995e-02 2.32242843e-03 7.18197378e-01 3.12874667e+03 -6.72800000e-04 -1.65360702e-12 7.09288362e-02 5.55497844e-02 9.19063729e-02 6.10952003e-02 2.32242834e-03 7.18197378e-01 3.12874667e+03 -6.72900000e-04 -1.65360702e-12 7.09288357e-02 5.55497837e-02 9.19063734e-02 6.10952011e-02 2.32242825e-03 7.18197378e-01 3.12874667e+03 -6.73000000e-04 -1.65360702e-12 7.09288353e-02 5.55497829e-02 9.19063739e-02 6.10952019e-02 2.32242816e-03 7.18197378e-01 3.12874667e+03 -6.73100000e-04 -1.65360702e-12 7.09288349e-02 5.55497821e-02 9.19063744e-02 6.10952027e-02 2.32242807e-03 7.18197378e-01 3.12874667e+03 -6.73200000e-04 -1.65360702e-12 7.09288345e-02 5.55497813e-02 9.19063749e-02 6.10952035e-02 2.32242798e-03 7.18197378e-01 3.12874667e+03 -6.73300000e-04 -1.65360702e-12 7.09288340e-02 5.55497805e-02 9.19063754e-02 6.10952043e-02 2.32242789e-03 7.18197378e-01 3.12874692e+03 -6.73400000e-04 -1.65360702e-12 7.09288336e-02 5.55497798e-02 9.19063759e-02 6.10952051e-02 2.32242780e-03 7.18197378e-01 3.12874692e+03 -6.73500000e-04 -1.65360702e-12 7.09288332e-02 5.55497790e-02 9.19063764e-02 6.10952059e-02 2.32242771e-03 7.18197378e-01 3.12874692e+03 -6.73600000e-04 -1.65360702e-12 7.09288328e-02 5.55497782e-02 9.19063768e-02 6.10952067e-02 2.32242763e-03 7.18197378e-01 3.12874692e+03 -6.73700000e-04 -1.65360702e-12 7.09288323e-02 5.55497775e-02 9.19063773e-02 6.10952075e-02 2.32242754e-03 7.18197378e-01 3.12874692e+03 -6.73800000e-04 -1.65360702e-12 7.09288319e-02 5.55497767e-02 9.19063778e-02 6.10952083e-02 2.32242745e-03 7.18197378e-01 3.12874692e+03 -6.73900000e-04 -1.65360702e-12 7.09288315e-02 5.55497759e-02 9.19063783e-02 6.10952090e-02 2.32242736e-03 7.18197378e-01 3.12874692e+03 -6.74000000e-04 -1.65360702e-12 7.09288311e-02 5.55497752e-02 9.19063788e-02 6.10952098e-02 2.32242727e-03 7.18197378e-01 3.12874692e+03 -6.74100000e-04 -1.65360702e-12 7.09288307e-02 5.55497744e-02 9.19063793e-02 6.10952106e-02 2.32242719e-03 7.18197378e-01 3.12874692e+03 -6.74200000e-04 -1.65360702e-12 7.09288302e-02 5.55497737e-02 9.19063798e-02 6.10952114e-02 2.32242710e-03 7.18197378e-01 3.12874692e+03 -6.74300000e-04 -1.65360702e-12 7.09288298e-02 5.55497729e-02 9.19063802e-02 6.10952122e-02 2.32242701e-03 7.18197378e-01 3.12874692e+03 -6.74400000e-04 -1.65360702e-12 7.09288294e-02 5.55497721e-02 9.19063807e-02 6.10952129e-02 2.32242693e-03 7.18197378e-01 3.12874692e+03 -6.74500000e-04 -1.65360702e-12 7.09288290e-02 5.55497714e-02 9.19063812e-02 6.10952137e-02 2.32242684e-03 7.18197378e-01 3.12874692e+03 -6.74600000e-04 -1.65360702e-12 7.09288286e-02 5.55497706e-02 9.19063817e-02 6.10952145e-02 2.32242675e-03 7.18197378e-01 3.12874692e+03 -6.74700000e-04 -1.65360702e-12 7.09288282e-02 5.55497699e-02 9.19063822e-02 6.10952153e-02 2.32242667e-03 7.18197378e-01 3.12874692e+03 -6.74800000e-04 -1.65360702e-12 7.09288278e-02 5.55497691e-02 9.19063826e-02 6.10952160e-02 2.32242658e-03 7.18197378e-01 3.12874692e+03 -6.74900000e-04 -1.65360702e-12 7.09288274e-02 5.55497684e-02 9.19063831e-02 6.10952168e-02 2.32242650e-03 7.18197378e-01 3.12874692e+03 -6.75000000e-04 -1.65360702e-12 7.09288270e-02 5.55497677e-02 9.19063836e-02 6.10952175e-02 2.32242641e-03 7.18197378e-01 3.12874692e+03 -6.75100000e-04 -1.65360702e-12 7.09288266e-02 5.55497669e-02 9.19063840e-02 6.10952183e-02 2.32242633e-03 7.18197378e-01 3.12874692e+03 -6.75200000e-04 -1.65360702e-12 7.09288261e-02 5.55497662e-02 9.19063845e-02 6.10952191e-02 2.32242624e-03 7.18197378e-01 3.12874692e+03 -6.75300000e-04 -1.65360702e-12 7.09288257e-02 5.55497654e-02 9.19063850e-02 6.10952198e-02 2.32242616e-03 7.18197378e-01 3.12874692e+03 -6.75400000e-04 -1.65360702e-12 7.09288253e-02 5.55497647e-02 9.19063854e-02 6.10952206e-02 2.32242607e-03 7.18197378e-01 3.12874692e+03 -6.75500000e-04 -1.65360702e-12 7.09288249e-02 5.55497640e-02 9.19063859e-02 6.10952213e-02 2.32242599e-03 7.18197378e-01 3.12874692e+03 -6.75600000e-04 -1.65360702e-12 7.09288245e-02 5.55497632e-02 9.19063864e-02 6.10952221e-02 2.32242590e-03 7.18197378e-01 3.12874692e+03 -6.75700000e-04 -1.65360702e-12 7.09288241e-02 5.55497625e-02 9.19063868e-02 6.10952228e-02 2.32242582e-03 7.18197378e-01 3.12874692e+03 -6.75800000e-04 -1.65360702e-12 7.09288237e-02 5.55497618e-02 9.19063873e-02 6.10952236e-02 2.32242574e-03 7.18197378e-01 3.12874692e+03 -6.75900000e-04 -1.65360702e-12 7.09288233e-02 5.55497611e-02 9.19063878e-02 6.10952243e-02 2.32242565e-03 7.18197378e-01 3.12874692e+03 -6.76000000e-04 -1.65360702e-12 7.09288229e-02 5.55497603e-02 9.19063882e-02 6.10952251e-02 2.32242557e-03 7.18197378e-01 3.12874692e+03 -6.76100000e-04 -1.65360702e-12 7.09288225e-02 5.55497596e-02 9.19063887e-02 6.10952258e-02 2.32242549e-03 7.18197378e-01 3.12874692e+03 -6.76200000e-04 -1.65360702e-12 7.09288221e-02 5.55497589e-02 9.19063891e-02 6.10952265e-02 2.32242540e-03 7.18197378e-01 3.12874692e+03 -6.76300000e-04 -1.65360702e-12 7.09288218e-02 5.55497582e-02 9.19063896e-02 6.10952273e-02 2.32242532e-03 7.18197378e-01 3.12874692e+03 -6.76400000e-04 -1.65360702e-12 7.09288214e-02 5.55497575e-02 9.19063901e-02 6.10952280e-02 2.32242524e-03 7.18197378e-01 3.12874692e+03 -6.76500000e-04 -1.65360702e-12 7.09288210e-02 5.55497568e-02 9.19063905e-02 6.10952288e-02 2.32242516e-03 7.18197378e-01 3.12874692e+03 -6.76600000e-04 -1.65360702e-12 7.09288206e-02 5.55497560e-02 9.19063910e-02 6.10952295e-02 2.32242507e-03 7.18197378e-01 3.12874692e+03 -6.76700000e-04 -1.65360702e-12 7.09288202e-02 5.55497553e-02 9.19063914e-02 6.10952302e-02 2.32242499e-03 7.18197378e-01 3.12874692e+03 -6.76800000e-04 -1.65360702e-12 7.09288198e-02 5.55497546e-02 9.19063919e-02 6.10952309e-02 2.32242491e-03 7.18197378e-01 3.12874692e+03 -6.76900000e-04 -1.65360702e-12 7.09288194e-02 5.55497539e-02 9.19063923e-02 6.10952317e-02 2.32242483e-03 7.18197378e-01 3.12874692e+03 -6.77000000e-04 -1.65360702e-12 7.09288190e-02 5.55497532e-02 9.19063928e-02 6.10952324e-02 2.32242475e-03 7.18197378e-01 3.12874692e+03 -6.77100000e-04 -1.65360702e-12 7.09288186e-02 5.55497525e-02 9.19063932e-02 6.10952331e-02 2.32242467e-03 7.18197378e-01 3.12874692e+03 -6.77200000e-04 -1.65360702e-12 7.09288183e-02 5.55497518e-02 9.19063937e-02 6.10952338e-02 2.32242459e-03 7.18197378e-01 3.12874692e+03 -6.77300000e-04 -1.65360702e-12 7.09288179e-02 5.55497511e-02 9.19063941e-02 6.10952346e-02 2.32242451e-03 7.18197378e-01 3.12874692e+03 -6.77400000e-04 -1.65360702e-12 7.09288175e-02 5.55497504e-02 9.19063946e-02 6.10952353e-02 2.32242443e-03 7.18197378e-01 3.12874692e+03 -6.77500000e-04 -1.65360702e-12 7.09288171e-02 5.55497497e-02 9.19063950e-02 6.10952360e-02 2.32242435e-03 7.18197378e-01 3.12874692e+03 -6.77600000e-04 -1.65360702e-12 7.09288167e-02 5.55497490e-02 9.19063954e-02 6.10952367e-02 2.32242427e-03 7.18197378e-01 3.12874692e+03 -6.77700000e-04 -1.65360702e-12 7.09288163e-02 5.55497483e-02 9.19063959e-02 6.10952374e-02 2.32242419e-03 7.18197378e-01 3.12874692e+03 -6.77800000e-04 -1.65360702e-12 7.09288160e-02 5.55497476e-02 9.19063963e-02 6.10952381e-02 2.32242411e-03 7.18197378e-01 3.12874692e+03 -6.77900000e-04 -1.65360702e-12 7.09288156e-02 5.55497470e-02 9.19063968e-02 6.10952388e-02 2.32242403e-03 7.18197378e-01 3.12874692e+03 -6.78000000e-04 -1.65360702e-12 7.09288152e-02 5.55497463e-02 9.19063972e-02 6.10952395e-02 2.32242395e-03 7.18197378e-01 3.12874692e+03 -6.78100000e-04 -1.65360702e-12 7.09288148e-02 5.55497456e-02 9.19063976e-02 6.10952402e-02 2.32242387e-03 7.18197378e-01 3.12874692e+03 -6.78200000e-04 -1.65360702e-12 7.09288145e-02 5.55497449e-02 9.19063981e-02 6.10952409e-02 2.32242379e-03 7.18197378e-01 3.12874692e+03 -6.78300000e-04 -1.65360702e-12 7.09288141e-02 5.55497442e-02 9.19063985e-02 6.10952416e-02 2.32242371e-03 7.18197378e-01 3.12874692e+03 -6.78400000e-04 -1.65360702e-12 7.09288137e-02 5.55497435e-02 9.19063989e-02 6.10952423e-02 2.32242364e-03 7.18197378e-01 3.12874692e+03 -6.78500000e-04 -1.65360702e-12 7.09288133e-02 5.55497429e-02 9.19063994e-02 6.10952430e-02 2.32242356e-03 7.18197378e-01 3.12874692e+03 -6.78600000e-04 -1.65360702e-12 7.09288130e-02 5.55497422e-02 9.19063998e-02 6.10952437e-02 2.32242348e-03 7.18197378e-01 3.12874714e+03 -6.78700000e-04 -1.65360702e-12 7.09288126e-02 5.55497415e-02 9.19064002e-02 6.10952444e-02 2.32242340e-03 7.18197378e-01 3.12874714e+03 -6.78800000e-04 -1.65360702e-12 7.09288122e-02 5.55497408e-02 9.19064006e-02 6.10952451e-02 2.32242332e-03 7.18197378e-01 3.12874714e+03 -6.78900000e-04 -1.65360702e-12 7.09288119e-02 5.55497402e-02 9.19064011e-02 6.10952458e-02 2.32242325e-03 7.18197378e-01 3.12874714e+03 -6.79000000e-04 -1.65360702e-12 7.09288115e-02 5.55497395e-02 9.19064015e-02 6.10952465e-02 2.32242317e-03 7.18197378e-01 3.12874714e+03 -6.79100000e-04 -1.65360702e-12 7.09288111e-02 5.55497388e-02 9.19064019e-02 6.10952472e-02 2.32242309e-03 7.18197378e-01 3.12874714e+03 -6.79200000e-04 -1.65360702e-12 7.09288108e-02 5.55497382e-02 9.19064024e-02 6.10952479e-02 2.32242302e-03 7.18197378e-01 3.12874714e+03 -6.79300000e-04 -1.65360702e-12 7.09288104e-02 5.55497375e-02 9.19064028e-02 6.10952486e-02 2.32242294e-03 7.18197378e-01 3.12874714e+03 -6.79400000e-04 -1.65360702e-12 7.09288100e-02 5.55497368e-02 9.19064032e-02 6.10952492e-02 2.32242286e-03 7.18197378e-01 3.12874714e+03 -6.79500000e-04 -1.65360702e-12 7.09288097e-02 5.55497362e-02 9.19064036e-02 6.10952499e-02 2.32242279e-03 7.18197378e-01 3.12874714e+03 -6.79600000e-04 -1.65360702e-12 7.09288093e-02 5.55497355e-02 9.19064040e-02 6.10952506e-02 2.32242271e-03 7.18197378e-01 3.12874714e+03 -6.79700000e-04 -1.65360702e-12 7.09288089e-02 5.55497349e-02 9.19064045e-02 6.10952513e-02 2.32242264e-03 7.18197378e-01 3.12874714e+03 -6.79800000e-04 -1.65360702e-12 7.09288086e-02 5.55497342e-02 9.19064049e-02 6.10952519e-02 2.32242256e-03 7.18197378e-01 3.12874714e+03 -6.79900000e-04 -1.65360702e-12 7.09288082e-02 5.55497335e-02 9.19064053e-02 6.10952526e-02 2.32242249e-03 7.18197378e-01 3.12874714e+03 -6.80000000e-04 -1.65360702e-12 7.09288079e-02 5.55497329e-02 9.19064057e-02 6.10952533e-02 2.32242241e-03 7.18197378e-01 3.12874714e+03 -6.80100000e-04 -1.65360702e-12 7.09288075e-02 5.55497322e-02 9.19064061e-02 6.10952540e-02 2.32242234e-03 7.18197378e-01 3.12874714e+03 -6.80200000e-04 -1.65360702e-12 7.09288071e-02 5.55497316e-02 9.19064065e-02 6.10952546e-02 2.32242226e-03 7.18197378e-01 3.12874714e+03 -6.80300000e-04 -1.65360702e-12 7.09288068e-02 5.55497309e-02 9.19064069e-02 6.10952553e-02 2.32242219e-03 7.18197378e-01 3.12874714e+03 -6.80400000e-04 -1.65360702e-12 7.09288064e-02 5.55497303e-02 9.19064074e-02 6.10952560e-02 2.32242211e-03 7.18197378e-01 3.12874714e+03 -6.80500000e-04 -1.65360702e-12 7.09288061e-02 5.55497296e-02 9.19064078e-02 6.10952566e-02 2.32242204e-03 7.18197378e-01 3.12874714e+03 -6.80600000e-04 -1.65360702e-12 7.09288057e-02 5.55497290e-02 9.19064082e-02 6.10952573e-02 2.32242196e-03 7.18197378e-01 3.12874714e+03 -6.80700000e-04 -1.65360702e-12 7.09288054e-02 5.55497284e-02 9.19064086e-02 6.10952579e-02 2.32242189e-03 7.18197378e-01 3.12874714e+03 -6.80800000e-04 -1.65360702e-12 7.09288050e-02 5.55497277e-02 9.19064090e-02 6.10952586e-02 2.32242182e-03 7.18197378e-01 3.12874714e+03 -6.80900000e-04 -1.65360702e-12 7.09288047e-02 5.55497271e-02 9.19064094e-02 6.10952592e-02 2.32242174e-03 7.18197378e-01 3.12874714e+03 -6.81000000e-04 -1.65360702e-12 7.09288043e-02 5.55497265e-02 9.19064098e-02 6.10952599e-02 2.32242167e-03 7.18197378e-01 3.12874714e+03 -6.81100000e-04 -1.65360702e-12 7.09288040e-02 5.55497258e-02 9.19064102e-02 6.10952606e-02 2.32242160e-03 7.18197378e-01 3.12874714e+03 -6.81200000e-04 -1.65360702e-12 7.09288036e-02 5.55497252e-02 9.19064106e-02 6.10952612e-02 2.32242152e-03 7.18197378e-01 3.12874714e+03 -6.81300000e-04 -1.65360702e-12 7.09288033e-02 5.55497246e-02 9.19064110e-02 6.10952619e-02 2.32242145e-03 7.18197378e-01 3.12874714e+03 -6.81400000e-04 -1.65360702e-12 7.09288029e-02 5.55497239e-02 9.19064114e-02 6.10952625e-02 2.32242138e-03 7.18197378e-01 3.12874714e+03 -6.81500000e-04 -1.65360702e-12 7.09288026e-02 5.55497233e-02 9.19064118e-02 6.10952631e-02 2.32242131e-03 7.18197378e-01 3.12874714e+03 -6.81600000e-04 -1.65360702e-12 7.09288022e-02 5.55497227e-02 9.19064122e-02 6.10952638e-02 2.32242124e-03 7.18197378e-01 3.12874714e+03 -6.81700000e-04 -1.65360702e-12 7.09288019e-02 5.55497220e-02 9.19064126e-02 6.10952644e-02 2.32242116e-03 7.18197378e-01 3.12874714e+03 -6.81800000e-04 -1.65360702e-12 7.09288016e-02 5.55497214e-02 9.19064130e-02 6.10952651e-02 2.32242109e-03 7.18197378e-01 3.12874714e+03 -6.81900000e-04 -1.65360702e-12 7.09288012e-02 5.55497208e-02 9.19064134e-02 6.10952657e-02 2.32242102e-03 7.18197378e-01 3.12874714e+03 -6.82000000e-04 -1.65360702e-12 7.09288009e-02 5.55497202e-02 9.19064138e-02 6.10952664e-02 2.32242095e-03 7.18197378e-01 3.12874714e+03 -6.82100000e-04 -1.65360702e-12 7.09288005e-02 5.55497196e-02 9.19064142e-02 6.10952670e-02 2.32242088e-03 7.18197378e-01 3.12874714e+03 -6.82200000e-04 -1.65360702e-12 7.09288002e-02 5.55497189e-02 9.19064146e-02 6.10952676e-02 2.32242081e-03 7.18197378e-01 3.12874714e+03 -6.82300000e-04 -1.65360702e-12 7.09287999e-02 5.55497183e-02 9.19064150e-02 6.10952683e-02 2.32242074e-03 7.18197378e-01 3.12874714e+03 -6.82400000e-04 -1.65360702e-12 7.09287995e-02 5.55497177e-02 9.19064154e-02 6.10952689e-02 2.32242067e-03 7.18197378e-01 3.12874714e+03 -6.82500000e-04 -1.65360702e-12 7.09287992e-02 5.55497171e-02 9.19064158e-02 6.10952695e-02 2.32242060e-03 7.18197378e-01 3.12874714e+03 -6.82600000e-04 -1.65360702e-12 7.09287989e-02 5.55497165e-02 9.19064161e-02 6.10952701e-02 2.32242053e-03 7.18197378e-01 3.12874714e+03 -6.82700000e-04 -1.65360702e-12 7.09287985e-02 5.55497159e-02 9.19064165e-02 6.10952708e-02 2.32242046e-03 7.18197378e-01 3.12874714e+03 -6.82800000e-04 -1.65360702e-12 7.09287982e-02 5.55497153e-02 9.19064169e-02 6.10952714e-02 2.32242039e-03 7.18197378e-01 3.12874714e+03 -6.82900000e-04 -1.65360702e-12 7.09287979e-02 5.55497147e-02 9.19064173e-02 6.10952720e-02 2.32242032e-03 7.18197378e-01 3.12874714e+03 -6.83000000e-04 -1.65360702e-12 7.09287975e-02 5.55497141e-02 9.19064177e-02 6.10952726e-02 2.32242025e-03 7.18197378e-01 3.12874714e+03 -6.83100000e-04 -1.65360702e-12 7.09287972e-02 5.55497135e-02 9.19064181e-02 6.10952733e-02 2.32242018e-03 7.18197378e-01 3.12874714e+03 -6.83200000e-04 -1.65360702e-12 7.09287969e-02 5.55497129e-02 9.19064185e-02 6.10952739e-02 2.32242011e-03 7.18197378e-01 3.12874714e+03 -6.83300000e-04 -1.65360702e-12 7.09287965e-02 5.55497123e-02 9.19064188e-02 6.10952745e-02 2.32242004e-03 7.18197378e-01 3.12874714e+03 -6.83400000e-04 -1.65360702e-12 7.09287962e-02 5.55497117e-02 9.19064192e-02 6.10952751e-02 2.32241997e-03 7.18197378e-01 3.12874714e+03 -6.83500000e-04 -1.65360702e-12 7.09287959e-02 5.55497111e-02 9.19064196e-02 6.10952757e-02 2.32241990e-03 7.18197378e-01 3.12874714e+03 -6.83600000e-04 -1.65360702e-12 7.09287955e-02 5.55497105e-02 9.19064200e-02 6.10952763e-02 2.32241983e-03 7.18197378e-01 3.12874714e+03 -6.83700000e-04 -1.65360702e-12 7.09287952e-02 5.55497099e-02 9.19064204e-02 6.10952769e-02 2.32241976e-03 7.18197378e-01 3.12874714e+03 -6.83800000e-04 -1.65360702e-12 7.09287949e-02 5.55497093e-02 9.19064207e-02 6.10952775e-02 2.32241970e-03 7.18197378e-01 3.12874714e+03 -6.83900000e-04 -1.65360702e-12 7.09287946e-02 5.55497087e-02 9.19064211e-02 6.10952782e-02 2.32241963e-03 7.18197378e-01 3.12874733e+03 -6.84000000e-04 -1.65360702e-12 7.09287942e-02 5.55497081e-02 9.19064215e-02 6.10952788e-02 2.32241956e-03 7.18197378e-01 3.12874733e+03 -6.84100000e-04 -1.65360702e-12 7.09287939e-02 5.55497075e-02 9.19064219e-02 6.10952794e-02 2.32241949e-03 7.18197378e-01 3.12874733e+03 -6.84200000e-04 -1.65360702e-12 7.09287936e-02 5.55497069e-02 9.19064222e-02 6.10952800e-02 2.32241943e-03 7.18197378e-01 3.12874733e+03 -6.84300000e-04 -1.65360702e-12 7.09287933e-02 5.55497063e-02 9.19064226e-02 6.10952806e-02 2.32241936e-03 7.18197378e-01 3.12874733e+03 -6.84400000e-04 -1.65360702e-12 7.09287930e-02 5.55497058e-02 9.19064230e-02 6.10952812e-02 2.32241929e-03 7.18197378e-01 3.12874733e+03 -6.84500000e-04 -1.65360702e-12 7.09287926e-02 5.55497052e-02 9.19064233e-02 6.10952818e-02 2.32241922e-03 7.18197378e-01 3.12874733e+03 -6.84600000e-04 -1.65360702e-12 7.09287923e-02 5.55497046e-02 9.19064237e-02 6.10952824e-02 2.32241916e-03 7.18197378e-01 3.12874733e+03 -6.84700000e-04 -1.65360702e-12 7.09287920e-02 5.55497040e-02 9.19064241e-02 6.10952830e-02 2.32241909e-03 7.18197378e-01 3.12874733e+03 -6.84800000e-04 -1.65360702e-12 7.09287917e-02 5.55497034e-02 9.19064244e-02 6.10952835e-02 2.32241902e-03 7.18197378e-01 3.12874733e+03 -6.84900000e-04 -1.65360702e-12 7.09287914e-02 5.55497029e-02 9.19064248e-02 6.10952841e-02 2.32241896e-03 7.18197378e-01 3.12874733e+03 -6.85000000e-04 -1.65360702e-12 7.09287911e-02 5.55497023e-02 9.19064252e-02 6.10952847e-02 2.32241889e-03 7.18197378e-01 3.12874733e+03 -6.85100000e-04 -1.65360702e-12 7.09287907e-02 5.55497017e-02 9.19064255e-02 6.10952853e-02 2.32241883e-03 7.18197378e-01 3.12874733e+03 -6.85200000e-04 -1.65360702e-12 7.09287904e-02 5.55497012e-02 9.19064259e-02 6.10952859e-02 2.32241876e-03 7.18197378e-01 3.12874733e+03 -6.85300000e-04 -1.65360702e-12 7.09287901e-02 5.55497006e-02 9.19064263e-02 6.10952865e-02 2.32241870e-03 7.18197378e-01 3.12874733e+03 -6.85400000e-04 -1.65360702e-12 7.09287898e-02 5.55497000e-02 9.19064266e-02 6.10952871e-02 2.32241863e-03 7.18197378e-01 3.12874733e+03 -6.85500000e-04 -1.65360702e-12 7.09287895e-02 5.55496994e-02 9.19064270e-02 6.10952877e-02 2.32241856e-03 7.18197378e-01 3.12874733e+03 -6.85600000e-04 -1.65360702e-12 7.09287892e-02 5.55496989e-02 9.19064273e-02 6.10952882e-02 2.32241850e-03 7.18197378e-01 3.12874733e+03 -6.85700000e-04 -1.65360702e-12 7.09287889e-02 5.55496983e-02 9.19064277e-02 6.10952888e-02 2.32241843e-03 7.18197378e-01 3.12874733e+03 -6.85800000e-04 -1.65360702e-12 7.09287886e-02 5.55496978e-02 9.19064281e-02 6.10952894e-02 2.32241837e-03 7.18197378e-01 3.12874733e+03 -6.85900000e-04 -1.65360702e-12 7.09287883e-02 5.55496972e-02 9.19064284e-02 6.10952900e-02 2.32241831e-03 7.18197378e-01 3.12874733e+03 -6.86000000e-04 -1.65360702e-12 7.09287879e-02 5.55496966e-02 9.19064288e-02 6.10952906e-02 2.32241824e-03 7.18197378e-01 3.12874733e+03 -6.86100000e-04 -1.65360702e-12 7.09287876e-02 5.55496961e-02 9.19064291e-02 6.10952911e-02 2.32241818e-03 7.18197378e-01 3.12874733e+03 -6.86200000e-04 -1.65360702e-12 7.09287873e-02 5.55496955e-02 9.19064295e-02 6.10952917e-02 2.32241811e-03 7.18197378e-01 3.12874733e+03 -6.86300000e-04 -1.65360702e-12 7.09287870e-02 5.55496950e-02 9.19064298e-02 6.10952923e-02 2.32241805e-03 7.18197378e-01 3.12874733e+03 -6.86400000e-04 -1.65360702e-12 7.09287867e-02 5.55496944e-02 9.19064302e-02 6.10952928e-02 2.32241799e-03 7.18197378e-01 3.12874733e+03 -6.86500000e-04 -1.65360702e-12 7.09287864e-02 5.55496939e-02 9.19064305e-02 6.10952934e-02 2.32241792e-03 7.18197378e-01 3.12874733e+03 -6.86600000e-04 -1.65360702e-12 7.09287861e-02 5.55496933e-02 9.19064309e-02 6.10952940e-02 2.32241786e-03 7.18197378e-01 3.12874733e+03 -6.86700000e-04 -1.65360702e-12 7.09287858e-02 5.55496928e-02 9.19064312e-02 6.10952945e-02 2.32241780e-03 7.18197378e-01 3.12874733e+03 -6.86800000e-04 -1.65360702e-12 7.09287855e-02 5.55496922e-02 9.19064316e-02 6.10952951e-02 2.32241773e-03 7.18197378e-01 3.12874733e+03 -6.86900000e-04 -1.65360702e-12 7.09287852e-02 5.55496917e-02 9.19064319e-02 6.10952957e-02 2.32241767e-03 7.18197378e-01 3.12874733e+03 -6.87000000e-04 -1.65360702e-12 7.09287849e-02 5.55496911e-02 9.19064323e-02 6.10952962e-02 2.32241761e-03 7.18197378e-01 3.12874733e+03 -6.87100000e-04 -1.65360702e-12 7.09287846e-02 5.55496906e-02 9.19064326e-02 6.10952968e-02 2.32241754e-03 7.18197378e-01 3.12874733e+03 -6.87200000e-04 -1.65360702e-12 7.09287843e-02 5.55496900e-02 9.19064330e-02 6.10952973e-02 2.32241748e-03 7.18197378e-01 3.12874733e+03 -6.87300000e-04 -1.65360702e-12 7.09287840e-02 5.55496895e-02 9.19064333e-02 6.10952979e-02 2.32241742e-03 7.18197378e-01 3.12874733e+03 -6.87400000e-04 -1.65360702e-12 7.09287837e-02 5.55496889e-02 9.19064337e-02 6.10952985e-02 2.32241736e-03 7.18197378e-01 3.12874733e+03 -6.87500000e-04 -1.65360702e-12 7.09287834e-02 5.55496884e-02 9.19064340e-02 6.10952990e-02 2.32241730e-03 7.18197378e-01 3.12874733e+03 -6.87600000e-04 -1.65360702e-12 7.09287831e-02 5.55496879e-02 9.19064344e-02 6.10952996e-02 2.32241723e-03 7.18197378e-01 3.12874733e+03 -6.87700000e-04 -1.65360702e-12 7.09287828e-02 5.55496873e-02 9.19064347e-02 6.10953001e-02 2.32241717e-03 7.18197378e-01 3.12874733e+03 -6.87800000e-04 -1.65360702e-12 7.09287825e-02 5.55496868e-02 9.19064350e-02 6.10953007e-02 2.32241711e-03 7.18197378e-01 3.12874733e+03 -6.87900000e-04 -1.65360702e-12 7.09287823e-02 5.55496863e-02 9.19064354e-02 6.10953012e-02 2.32241705e-03 7.18197378e-01 3.12874733e+03 -6.88000000e-04 -1.65360702e-12 7.09287820e-02 5.55496857e-02 9.19064357e-02 6.10953018e-02 2.32241699e-03 7.18197378e-01 3.12874733e+03 -6.88100000e-04 -1.65360702e-12 7.09287817e-02 5.55496852e-02 9.19064361e-02 6.10953023e-02 2.32241693e-03 7.18197378e-01 3.12874733e+03 -6.88200000e-04 -1.65360702e-12 7.09287814e-02 5.55496847e-02 9.19064364e-02 6.10953028e-02 2.32241687e-03 7.18197378e-01 3.12874733e+03 -6.88300000e-04 -1.65360702e-12 7.09287811e-02 5.55496842e-02 9.19064367e-02 6.10953034e-02 2.32241681e-03 7.18197378e-01 3.12874733e+03 -6.88400000e-04 -1.65360702e-12 7.09287808e-02 5.55496836e-02 9.19064371e-02 6.10953039e-02 2.32241674e-03 7.18197378e-01 3.12874733e+03 -6.88500000e-04 -1.65360702e-12 7.09287805e-02 5.55496831e-02 9.19064374e-02 6.10953045e-02 2.32241668e-03 7.18197378e-01 3.12874733e+03 -6.88600000e-04 -1.65360702e-12 7.09287802e-02 5.55496826e-02 9.19064377e-02 6.10953050e-02 2.32241662e-03 7.18197378e-01 3.12874733e+03 -6.88700000e-04 -1.65360702e-12 7.09287799e-02 5.55496821e-02 9.19064381e-02 6.10953055e-02 2.32241656e-03 7.18197378e-01 3.12874733e+03 -6.88800000e-04 -1.65360702e-12 7.09287796e-02 5.55496815e-02 9.19064384e-02 6.10953061e-02 2.32241650e-03 7.18197378e-01 3.12874733e+03 -6.88900000e-04 -1.65360702e-12 7.09287794e-02 5.55496810e-02 9.19064387e-02 6.10953066e-02 2.32241644e-03 7.18197378e-01 3.12874733e+03 -6.89000000e-04 -1.65360702e-12 7.09287791e-02 5.55496805e-02 9.19064391e-02 6.10953071e-02 2.32241639e-03 7.18197378e-01 3.12874733e+03 -6.89100000e-04 -1.65360702e-12 7.09287788e-02 5.55496800e-02 9.19064394e-02 6.10953077e-02 2.32241633e-03 7.18197378e-01 3.12874733e+03 -6.89200000e-04 -1.65360702e-12 7.09287785e-02 5.55496795e-02 9.19064397e-02 6.10953082e-02 2.32241627e-03 7.18197378e-01 3.12874750e+03 -6.89300000e-04 -1.65360702e-12 7.09287782e-02 5.55496789e-02 9.19064400e-02 6.10953087e-02 2.32241621e-03 7.18197378e-01 3.12874750e+03 -6.89400000e-04 -1.65360702e-12 7.09287779e-02 5.55496784e-02 9.19064404e-02 6.10953093e-02 2.32241615e-03 7.18197378e-01 3.12874750e+03 -6.89500000e-04 -1.65360702e-12 7.09287777e-02 5.55496779e-02 9.19064407e-02 6.10953098e-02 2.32241609e-03 7.18197378e-01 3.12874750e+03 -6.89600000e-04 -1.65360702e-12 7.09287774e-02 5.55496774e-02 9.19064410e-02 6.10953103e-02 2.32241603e-03 7.18197378e-01 3.12874750e+03 -6.89700000e-04 -1.65360702e-12 7.09287771e-02 5.55496769e-02 9.19064413e-02 6.10953108e-02 2.32241597e-03 7.18197378e-01 3.12874750e+03 -6.89800000e-04 -1.65360702e-12 7.09287768e-02 5.55496764e-02 9.19064417e-02 6.10953114e-02 2.32241591e-03 7.18197378e-01 3.12874750e+03 -6.89900000e-04 -1.65360702e-12 7.09287766e-02 5.55496759e-02 9.19064420e-02 6.10953119e-02 2.32241586e-03 7.18197378e-01 3.12874750e+03 -6.90000000e-04 -1.65360702e-12 7.09287763e-02 5.55496754e-02 9.19064423e-02 6.10953124e-02 2.32241580e-03 7.18197378e-01 3.12874750e+03 -6.90100000e-04 -1.65360702e-12 7.09287760e-02 5.55496749e-02 9.19064426e-02 6.10953129e-02 2.32241574e-03 7.18197378e-01 3.12874750e+03 -6.90200000e-04 -1.65360702e-12 7.09287757e-02 5.55496744e-02 9.19064429e-02 6.10953134e-02 2.32241568e-03 7.18197378e-01 3.12874750e+03 -6.90300000e-04 -1.65360702e-12 7.09287754e-02 5.55496739e-02 9.19064433e-02 6.10953139e-02 2.32241562e-03 7.18197378e-01 3.12874750e+03 -6.90400000e-04 -1.65360702e-12 7.09287752e-02 5.55496734e-02 9.19064436e-02 6.10953145e-02 2.32241557e-03 7.18197378e-01 3.12874750e+03 -6.90500000e-04 -1.65360702e-12 7.09287749e-02 5.55496729e-02 9.19064439e-02 6.10953150e-02 2.32241551e-03 7.18197378e-01 3.12874750e+03 -6.90600000e-04 -1.65360702e-12 7.09287746e-02 5.55496724e-02 9.19064442e-02 6.10953155e-02 2.32241545e-03 7.18197378e-01 3.12874750e+03 -6.90700000e-04 -1.65360702e-12 7.09287744e-02 5.55496719e-02 9.19064445e-02 6.10953160e-02 2.32241539e-03 7.18197378e-01 3.12874750e+03 -6.90800000e-04 -1.65360702e-12 7.09287741e-02 5.55496714e-02 9.19064448e-02 6.10953165e-02 2.32241534e-03 7.18197378e-01 3.12874750e+03 -6.90900000e-04 -1.65360702e-12 7.09287738e-02 5.55496709e-02 9.19064452e-02 6.10953170e-02 2.32241528e-03 7.18197378e-01 3.12874750e+03 -6.91000000e-04 -1.65360702e-12 7.09287735e-02 5.55496704e-02 9.19064455e-02 6.10953175e-02 2.32241522e-03 7.18197378e-01 3.12874750e+03 -6.91100000e-04 -1.65360702e-12 7.09287733e-02 5.55496699e-02 9.19064458e-02 6.10953180e-02 2.32241517e-03 7.18197378e-01 3.12874750e+03 -6.91200000e-04 -1.65360702e-12 7.09287730e-02 5.55496694e-02 9.19064461e-02 6.10953185e-02 2.32241511e-03 7.18197378e-01 3.12874750e+03 -6.91300000e-04 -1.65360702e-12 7.09287727e-02 5.55496689e-02 9.19064464e-02 6.10953190e-02 2.32241506e-03 7.18197378e-01 3.12874750e+03 -6.91400000e-04 -1.65360702e-12 7.09287725e-02 5.55496684e-02 9.19064467e-02 6.10953195e-02 2.32241500e-03 7.18197378e-01 3.12874750e+03 -6.91500000e-04 -1.65360702e-12 7.09287722e-02 5.55496680e-02 9.19064470e-02 6.10953200e-02 2.32241494e-03 7.18197378e-01 3.12874750e+03 -6.91600000e-04 -1.65360702e-12 7.09287719e-02 5.55496675e-02 9.19064473e-02 6.10953205e-02 2.32241489e-03 7.18197378e-01 3.12874750e+03 -6.91700000e-04 -1.65360702e-12 7.09287717e-02 5.55496670e-02 9.19064476e-02 6.10953210e-02 2.32241483e-03 7.18197378e-01 3.12874750e+03 -6.91800000e-04 -1.65360702e-12 7.09287714e-02 5.55496665e-02 9.19064480e-02 6.10953215e-02 2.32241478e-03 7.18197378e-01 3.12874750e+03 -6.91900000e-04 -1.65360702e-12 7.09287711e-02 5.55496660e-02 9.19064483e-02 6.10953220e-02 2.32241472e-03 7.18197378e-01 3.12874750e+03 -6.92000000e-04 -1.65360702e-12 7.09287709e-02 5.55496656e-02 9.19064486e-02 6.10953225e-02 2.32241467e-03 7.18197378e-01 3.12874750e+03 -6.92100000e-04 -1.65360702e-12 7.09287706e-02 5.55496651e-02 9.19064489e-02 6.10953230e-02 2.32241461e-03 7.18197378e-01 3.12874750e+03 -6.92200000e-04 -1.65360702e-12 7.09287703e-02 5.55496646e-02 9.19064492e-02 6.10953235e-02 2.32241456e-03 7.18197378e-01 3.12874750e+03 -6.92300000e-04 -1.65360702e-12 7.09287701e-02 5.55496641e-02 9.19064495e-02 6.10953240e-02 2.32241450e-03 7.18197378e-01 3.12874750e+03 -6.92400000e-04 -1.65360702e-12 7.09287698e-02 5.55496636e-02 9.19064498e-02 6.10953245e-02 2.32241445e-03 7.18197378e-01 3.12874750e+03 -6.92500000e-04 -1.65360702e-12 7.09287696e-02 5.55496632e-02 9.19064501e-02 6.10953249e-02 2.32241439e-03 7.18197378e-01 3.12874750e+03 -6.92600000e-04 -1.65360702e-12 7.09287693e-02 5.55496627e-02 9.19064504e-02 6.10953254e-02 2.32241434e-03 7.18197378e-01 3.12874750e+03 -6.92700000e-04 -1.65360702e-12 7.09287690e-02 5.55496622e-02 9.19064507e-02 6.10953259e-02 2.32241428e-03 7.18197378e-01 3.12874750e+03 -6.92800000e-04 -1.65360702e-12 7.09287688e-02 5.55496618e-02 9.19064510e-02 6.10953264e-02 2.32241423e-03 7.18197378e-01 3.12874750e+03 -6.92900000e-04 -1.65360702e-12 7.09287685e-02 5.55496613e-02 9.19064513e-02 6.10953269e-02 2.32241418e-03 7.18197378e-01 3.12874750e+03 -6.93000000e-04 -1.65360702e-12 7.09287683e-02 5.55496608e-02 9.19064516e-02 6.10953274e-02 2.32241412e-03 7.18197378e-01 3.12874750e+03 -6.93100000e-04 -1.65360702e-12 7.09287680e-02 5.55496604e-02 9.19064519e-02 6.10953278e-02 2.32241407e-03 7.18197378e-01 3.12874750e+03 -6.93200000e-04 -1.65360702e-12 7.09287678e-02 5.55496599e-02 9.19064522e-02 6.10953283e-02 2.32241401e-03 7.18197378e-01 3.12874750e+03 -6.93300000e-04 -1.65360702e-12 7.09287675e-02 5.55496594e-02 9.19064525e-02 6.10953288e-02 2.32241396e-03 7.18197378e-01 3.12874750e+03 -6.93400000e-04 -1.65360702e-12 7.09287673e-02 5.55496590e-02 9.19064528e-02 6.10953293e-02 2.32241391e-03 7.18197378e-01 3.12874750e+03 -6.93500000e-04 -1.65360702e-12 7.09287670e-02 5.55496585e-02 9.19064531e-02 6.10953297e-02 2.32241386e-03 7.18197378e-01 3.12874750e+03 -6.93600000e-04 -1.65360702e-12 7.09287667e-02 5.55496580e-02 9.19064533e-02 6.10953302e-02 2.32241380e-03 7.18197378e-01 3.12874750e+03 -6.93700000e-04 -1.65360702e-12 7.09287665e-02 5.55496576e-02 9.19064536e-02 6.10953307e-02 2.32241375e-03 7.18197378e-01 3.12874750e+03 -6.93800000e-04 -1.65360702e-12 7.09287662e-02 5.55496571e-02 9.19064539e-02 6.10953312e-02 2.32241370e-03 7.18197378e-01 3.12874750e+03 -6.93900000e-04 -1.65360702e-12 7.09287660e-02 5.55496567e-02 9.19064542e-02 6.10953316e-02 2.32241364e-03 7.18197378e-01 3.12874750e+03 -6.94000000e-04 -1.65360702e-12 7.09287657e-02 5.55496562e-02 9.19064545e-02 6.10953321e-02 2.32241359e-03 7.18197378e-01 3.12874750e+03 -6.94100000e-04 -1.65360702e-12 7.09287655e-02 5.55496558e-02 9.19064548e-02 6.10953326e-02 2.32241354e-03 7.18197378e-01 3.12874750e+03 -6.94200000e-04 -1.65360702e-12 7.09287652e-02 5.55496553e-02 9.19064551e-02 6.10953330e-02 2.32241349e-03 7.18197378e-01 3.12874750e+03 -6.94300000e-04 -1.65360702e-12 7.09287650e-02 5.55496548e-02 9.19064554e-02 6.10953335e-02 2.32241344e-03 7.18197378e-01 3.12874750e+03 -6.94400000e-04 -1.65360702e-12 7.09287647e-02 5.55496544e-02 9.19064557e-02 6.10953340e-02 2.32241338e-03 7.18197378e-01 3.12874765e+03 -6.94500000e-04 -1.65360702e-12 7.09287645e-02 5.55496539e-02 9.19064559e-02 6.10953344e-02 2.32241333e-03 7.18197378e-01 3.12874765e+03 -6.94600000e-04 -1.65360702e-12 7.09287642e-02 5.55496535e-02 9.19064562e-02 6.10953349e-02 2.32241328e-03 7.18197378e-01 3.12874765e+03 -6.94700000e-04 -1.65360702e-12 7.09287640e-02 5.55496530e-02 9.19064565e-02 6.10953353e-02 2.32241323e-03 7.18197378e-01 3.12874765e+03 -6.94800000e-04 -1.65360702e-12 7.09287638e-02 5.55496526e-02 9.19064568e-02 6.10953358e-02 2.32241318e-03 7.18197378e-01 3.12874765e+03 -6.94900000e-04 -1.65360702e-12 7.09287635e-02 5.55496522e-02 9.19064571e-02 6.10953363e-02 2.32241313e-03 7.18197378e-01 3.12874765e+03 -6.95000000e-04 -1.65360702e-12 7.09287633e-02 5.55496517e-02 9.19064574e-02 6.10953367e-02 2.32241307e-03 7.18197378e-01 3.12874765e+03 -6.95100000e-04 -1.65360702e-12 7.09287630e-02 5.55496513e-02 9.19064577e-02 6.10953372e-02 2.32241302e-03 7.18197378e-01 3.12874765e+03 -6.95200000e-04 -1.65360702e-12 7.09287628e-02 5.55496508e-02 9.19064579e-02 6.10953376e-02 2.32241297e-03 7.18197378e-01 3.12874765e+03 -6.95300000e-04 -1.65360702e-12 7.09287625e-02 5.55496504e-02 9.19064582e-02 6.10953381e-02 2.32241292e-03 7.18197378e-01 3.12874765e+03 -6.95400000e-04 -1.65360702e-12 7.09287623e-02 5.55496499e-02 9.19064585e-02 6.10953385e-02 2.32241287e-03 7.18197378e-01 3.12874765e+03 -6.95500000e-04 -1.65360702e-12 7.09287621e-02 5.55496495e-02 9.19064588e-02 6.10953390e-02 2.32241282e-03 7.18197378e-01 3.12874765e+03 -6.95600000e-04 -1.65360702e-12 7.09287618e-02 5.55496491e-02 9.19064591e-02 6.10953394e-02 2.32241277e-03 7.18197378e-01 3.12874765e+03 -6.95700000e-04 -1.65360702e-12 7.09287616e-02 5.55496486e-02 9.19064593e-02 6.10953399e-02 2.32241272e-03 7.18197378e-01 3.12874765e+03 -6.95800000e-04 -1.65360702e-12 7.09287613e-02 5.55496482e-02 9.19064596e-02 6.10953403e-02 2.32241267e-03 7.18197378e-01 3.12874765e+03 -6.95900000e-04 -1.65360702e-12 7.09287611e-02 5.55496478e-02 9.19064599e-02 6.10953408e-02 2.32241262e-03 7.18197378e-01 3.12874765e+03 -6.96000000e-04 -1.65360702e-12 7.09287609e-02 5.55496473e-02 9.19064602e-02 6.10953412e-02 2.32241257e-03 7.18197378e-01 3.12874765e+03 -6.96100000e-04 -1.65360702e-12 7.09287606e-02 5.55496469e-02 9.19064604e-02 6.10953417e-02 2.32241252e-03 7.18197378e-01 3.12874765e+03 -6.96200000e-04 -1.65360702e-12 7.09287604e-02 5.55496465e-02 9.19064607e-02 6.10953421e-02 2.32241247e-03 7.18197378e-01 3.12874765e+03 -6.96300000e-04 -1.65360702e-12 7.09287602e-02 5.55496460e-02 9.19064610e-02 6.10953426e-02 2.32241242e-03 7.18197378e-01 3.12874765e+03 -6.96400000e-04 -1.65360702e-12 7.09287599e-02 5.55496456e-02 9.19064613e-02 6.10953430e-02 2.32241237e-03 7.18197378e-01 3.12874765e+03 -6.96500000e-04 -1.65360702e-12 7.09287597e-02 5.55496452e-02 9.19064615e-02 6.10953434e-02 2.32241232e-03 7.18197378e-01 3.12874765e+03 -6.96600000e-04 -1.65360702e-12 7.09287594e-02 5.55496448e-02 9.19064618e-02 6.10953439e-02 2.32241227e-03 7.18197378e-01 3.12874765e+03 -6.96700000e-04 -1.65360702e-12 7.09287592e-02 5.55496443e-02 9.19064621e-02 6.10953443e-02 2.32241223e-03 7.18197378e-01 3.12874765e+03 -6.96800000e-04 -1.65360702e-12 7.09287590e-02 5.55496439e-02 9.19064623e-02 6.10953447e-02 2.32241218e-03 7.18197378e-01 3.12874765e+03 -6.96900000e-04 -1.65360702e-12 7.09287587e-02 5.55496435e-02 9.19064626e-02 6.10953452e-02 2.32241213e-03 7.18197378e-01 3.12874765e+03 -6.97000000e-04 -1.65360702e-12 7.09287585e-02 5.55496431e-02 9.19064629e-02 6.10953456e-02 2.32241208e-03 7.18197378e-01 3.12874765e+03 -6.97100000e-04 -1.65360702e-12 7.09287583e-02 5.55496426e-02 9.19064631e-02 6.10953460e-02 2.32241203e-03 7.18197378e-01 3.12874765e+03 -6.97200000e-04 -1.65360702e-12 7.09287581e-02 5.55496422e-02 9.19064634e-02 6.10953465e-02 2.32241198e-03 7.18197378e-01 3.12874765e+03 -6.97300000e-04 -1.65360702e-12 7.09287578e-02 5.55496418e-02 9.19064637e-02 6.10953469e-02 2.32241193e-03 7.18197378e-01 3.12874765e+03 -6.97400000e-04 -1.65360702e-12 7.09287576e-02 5.55496414e-02 9.19064639e-02 6.10953473e-02 2.32241189e-03 7.18197378e-01 3.12874765e+03 -6.97500000e-04 -1.65360702e-12 7.09287574e-02 5.55496410e-02 9.19064642e-02 6.10953478e-02 2.32241184e-03 7.18197378e-01 3.12874765e+03 -6.97600000e-04 -1.65360702e-12 7.09287571e-02 5.55496406e-02 9.19064645e-02 6.10953482e-02 2.32241179e-03 7.18197378e-01 3.12874765e+03 -6.97700000e-04 -1.65360702e-12 7.09287569e-02 5.55496401e-02 9.19064647e-02 6.10953486e-02 2.32241174e-03 7.18197378e-01 3.12874765e+03 -6.97800000e-04 -1.65360702e-12 7.09287567e-02 5.55496397e-02 9.19064650e-02 6.10953490e-02 2.32241170e-03 7.18197378e-01 3.12874765e+03 -6.97900000e-04 -1.65360702e-12 7.09287565e-02 5.55496393e-02 9.19064653e-02 6.10953495e-02 2.32241165e-03 7.18197378e-01 3.12874765e+03 -6.98000000e-04 -1.65360702e-12 7.09287562e-02 5.55496389e-02 9.19064655e-02 6.10953499e-02 2.32241160e-03 7.18197378e-01 3.12874765e+03 -6.98100000e-04 -1.65360702e-12 7.09287560e-02 5.55496385e-02 9.19064658e-02 6.10953503e-02 2.32241155e-03 7.18197378e-01 3.12874765e+03 -6.98200000e-04 -1.65360702e-12 7.09287558e-02 5.55496381e-02 9.19064660e-02 6.10953507e-02 2.32241151e-03 7.18197378e-01 3.12874765e+03 -6.98300000e-04 -1.65360702e-12 7.09287556e-02 5.55496377e-02 9.19064663e-02 6.10953512e-02 2.32241146e-03 7.18197378e-01 3.12874765e+03 -6.98400000e-04 -1.65360702e-12 7.09287553e-02 5.55496373e-02 9.19064666e-02 6.10953516e-02 2.32241141e-03 7.18197378e-01 3.12874765e+03 -6.98500000e-04 -1.65360702e-12 7.09287551e-02 5.55496369e-02 9.19064668e-02 6.10953520e-02 2.32241137e-03 7.18197378e-01 3.12874765e+03 -6.98600000e-04 -1.65360702e-12 7.09287549e-02 5.55496365e-02 9.19064671e-02 6.10953524e-02 2.32241132e-03 7.18197378e-01 3.12874765e+03 -6.98700000e-04 -1.65360702e-12 7.09287547e-02 5.55496360e-02 9.19064673e-02 6.10953528e-02 2.32241127e-03 7.18197378e-01 3.12874765e+03 -6.98800000e-04 -1.65360702e-12 7.09287544e-02 5.55496356e-02 9.19064676e-02 6.10953532e-02 2.32241123e-03 7.18197378e-01 3.12874765e+03 -6.98900000e-04 -1.65360702e-12 7.09287542e-02 5.55496352e-02 9.19064679e-02 6.10953537e-02 2.32241118e-03 7.18197378e-01 3.12874765e+03 -6.99000000e-04 -1.65360702e-12 7.09287540e-02 5.55496348e-02 9.19064681e-02 6.10953541e-02 2.32241113e-03 7.18197378e-01 3.12874765e+03 -6.99100000e-04 -1.65360702e-12 7.09287538e-02 5.55496344e-02 9.19064684e-02 6.10953545e-02 2.32241109e-03 7.18197378e-01 3.12874765e+03 -6.99200000e-04 -1.65360702e-12 7.09287536e-02 5.55496340e-02 9.19064686e-02 6.10953549e-02 2.32241104e-03 7.18197378e-01 3.12874765e+03 -6.99300000e-04 -1.65360702e-12 7.09287533e-02 5.55496336e-02 9.19064689e-02 6.10953553e-02 2.32241100e-03 7.18197378e-01 3.12874765e+03 -6.99400000e-04 -1.65360702e-12 7.09287531e-02 5.55496332e-02 9.19064691e-02 6.10953557e-02 2.32241095e-03 7.18197378e-01 3.12874765e+03 -6.99500000e-04 -1.65360702e-12 7.09287529e-02 5.55496329e-02 9.19064694e-02 6.10953561e-02 2.32241091e-03 7.18197378e-01 3.12874765e+03 -6.99600000e-04 -1.65360702e-12 7.09287527e-02 5.55496325e-02 9.19064696e-02 6.10953565e-02 2.32241086e-03 7.18197378e-01 3.12874765e+03 -6.99700000e-04 -1.65360702e-12 7.09287525e-02 5.55496321e-02 9.19064699e-02 6.10953569e-02 2.32241081e-03 7.18197378e-01 3.12874777e+03 -6.99800000e-04 -1.65360702e-12 7.09287523e-02 5.55496317e-02 9.19064701e-02 6.10953573e-02 2.32241077e-03 7.18197378e-01 3.12874777e+03 -6.99900000e-04 -1.65360702e-12 7.09287520e-02 5.55496313e-02 9.19064704e-02 6.10953577e-02 2.32241072e-03 7.18197378e-01 3.12874777e+03 -7.00000000e-04 -1.65360702e-12 7.09287518e-02 5.55496309e-02 9.19064706e-02 6.10953581e-02 2.32241068e-03 7.18197378e-01 3.12874777e+03 -7.00100000e-04 -1.65360702e-12 7.09287516e-02 5.55496305e-02 9.19064709e-02 6.10953585e-02 2.32241063e-03 7.18197378e-01 3.12874777e+03 -7.00200000e-04 -1.65360702e-12 7.09287514e-02 5.55496301e-02 9.19064711e-02 6.10953589e-02 2.32241059e-03 7.18197378e-01 3.12874777e+03 -7.00300000e-04 -1.65360702e-12 7.09287512e-02 5.55496297e-02 9.19064714e-02 6.10953593e-02 2.32241055e-03 7.18197378e-01 3.12874777e+03 -7.00400000e-04 -1.65360702e-12 7.09287510e-02 5.55496293e-02 9.19064716e-02 6.10953597e-02 2.32241050e-03 7.18197378e-01 3.12874777e+03 -7.00500000e-04 -1.65360702e-12 7.09287508e-02 5.55496289e-02 9.19064719e-02 6.10953601e-02 2.32241046e-03 7.18197378e-01 3.12874777e+03 -7.00600000e-04 -1.65360702e-12 7.09287506e-02 5.55496286e-02 9.19064721e-02 6.10953605e-02 2.32241041e-03 7.18197378e-01 3.12874777e+03 -7.00700000e-04 -1.65360702e-12 7.09287503e-02 5.55496282e-02 9.19064723e-02 6.10953609e-02 2.32241037e-03 7.18197378e-01 3.12874777e+03 -7.00800000e-04 -1.65360702e-12 7.09287501e-02 5.55496278e-02 9.19064726e-02 6.10953613e-02 2.32241032e-03 7.18197378e-01 3.12874777e+03 -7.00900000e-04 -1.65360702e-12 7.09287499e-02 5.55496274e-02 9.19064728e-02 6.10953617e-02 2.32241028e-03 7.18197378e-01 3.12874777e+03 -7.01000000e-04 -1.65360702e-12 7.09287497e-02 5.55496270e-02 9.19064731e-02 6.10953621e-02 2.32241024e-03 7.18197378e-01 3.12874777e+03 -7.01100000e-04 -1.65360702e-12 7.09287495e-02 5.55496267e-02 9.19064733e-02 6.10953625e-02 2.32241019e-03 7.18197378e-01 3.12874777e+03 -7.01200000e-04 -1.65360702e-12 7.09287493e-02 5.55496263e-02 9.19064736e-02 6.10953629e-02 2.32241015e-03 7.18197378e-01 3.12874777e+03 -7.01300000e-04 -1.65360702e-12 7.09287491e-02 5.55496259e-02 9.19064738e-02 6.10953633e-02 2.32241011e-03 7.18197378e-01 3.12874777e+03 -7.01400000e-04 -1.65360702e-12 7.09287489e-02 5.55496255e-02 9.19064740e-02 6.10953636e-02 2.32241006e-03 7.18197378e-01 3.12874777e+03 -7.01500000e-04 -1.65360702e-12 7.09287487e-02 5.55496251e-02 9.19064743e-02 6.10953640e-02 2.32241002e-03 7.18197378e-01 3.12874777e+03 -7.01600000e-04 -1.65360702e-12 7.09287485e-02 5.55496248e-02 9.19064745e-02 6.10953644e-02 2.32240998e-03 7.18197378e-01 3.12874777e+03 -7.01700000e-04 -1.65360702e-12 7.09287483e-02 5.55496244e-02 9.19064748e-02 6.10953648e-02 2.32240993e-03 7.18197378e-01 3.12874777e+03 -7.01800000e-04 -1.65360702e-12 7.09287481e-02 5.55496240e-02 9.19064750e-02 6.10953652e-02 2.32240989e-03 7.18197378e-01 3.12874777e+03 -7.01900000e-04 -1.65360702e-12 7.09287479e-02 5.55496236e-02 9.19064752e-02 6.10953656e-02 2.32240985e-03 7.18197378e-01 3.12874777e+03 -7.02000000e-04 -1.65360702e-12 7.09287477e-02 5.55496233e-02 9.19064755e-02 6.10953659e-02 2.32240980e-03 7.18197378e-01 3.12874777e+03 -7.02100000e-04 -1.65360702e-12 7.09287474e-02 5.55496229e-02 9.19064757e-02 6.10953663e-02 2.32240976e-03 7.18197378e-01 3.12874777e+03 -7.02200000e-04 -1.65360702e-12 7.09287472e-02 5.55496225e-02 9.19064759e-02 6.10953667e-02 2.32240972e-03 7.18197378e-01 3.12874777e+03 -7.02300000e-04 -1.65360702e-12 7.09287470e-02 5.55496222e-02 9.19064762e-02 6.10953671e-02 2.32240968e-03 7.18197378e-01 3.12874777e+03 -7.02400000e-04 -1.65360702e-12 7.09287468e-02 5.55496218e-02 9.19064764e-02 6.10953675e-02 2.32240963e-03 7.18197378e-01 3.12874777e+03 -7.02500000e-04 -1.65360702e-12 7.09287466e-02 5.55496214e-02 9.19064766e-02 6.10953678e-02 2.32240959e-03 7.18197378e-01 3.12874777e+03 -7.02600000e-04 -1.65360702e-12 7.09287464e-02 5.55496211e-02 9.19064769e-02 6.10953682e-02 2.32240955e-03 7.18197378e-01 3.12874777e+03 -7.02700000e-04 -1.65360702e-12 7.09287462e-02 5.55496207e-02 9.19064771e-02 6.10953686e-02 2.32240951e-03 7.18197378e-01 3.12874777e+03 -7.02800000e-04 -1.65360702e-12 7.09287460e-02 5.55496203e-02 9.19064773e-02 6.10953690e-02 2.32240947e-03 7.18197378e-01 3.12874777e+03 -7.02900000e-04 -1.65360702e-12 7.09287458e-02 5.55496200e-02 9.19064776e-02 6.10953693e-02 2.32240942e-03 7.18197378e-01 3.12874777e+03 -7.03000000e-04 -1.65360702e-12 7.09287456e-02 5.55496196e-02 9.19064778e-02 6.10953697e-02 2.32240938e-03 7.18197378e-01 3.12874777e+03 -7.03100000e-04 -1.65360702e-12 7.09287454e-02 5.55496193e-02 9.19064780e-02 6.10953701e-02 2.32240934e-03 7.18197378e-01 3.12874777e+03 -7.03200000e-04 -1.65360702e-12 7.09287452e-02 5.55496189e-02 9.19064783e-02 6.10953705e-02 2.32240930e-03 7.18197378e-01 3.12874777e+03 -7.03300000e-04 -1.65360702e-12 7.09287450e-02 5.55496185e-02 9.19064785e-02 6.10953708e-02 2.32240926e-03 7.18197378e-01 3.12874777e+03 -7.03400000e-04 -1.65360702e-12 7.09287448e-02 5.55496182e-02 9.19064787e-02 6.10953712e-02 2.32240922e-03 7.18197378e-01 3.12874777e+03 -7.03500000e-04 -1.65360702e-12 7.09287447e-02 5.55496178e-02 9.19064789e-02 6.10953716e-02 2.32240918e-03 7.18197378e-01 3.12874777e+03 -7.03600000e-04 -1.65360702e-12 7.09287445e-02 5.55496175e-02 9.19064792e-02 6.10953719e-02 2.32240914e-03 7.18197378e-01 3.12874777e+03 -7.03700000e-04 -1.65360702e-12 7.09287443e-02 5.55496171e-02 9.19064794e-02 6.10953723e-02 2.32240909e-03 7.18197378e-01 3.12874777e+03 -7.03800000e-04 -1.65360702e-12 7.09287441e-02 5.55496168e-02 9.19064796e-02 6.10953727e-02 2.32240905e-03 7.18197378e-01 3.12874777e+03 -7.03900000e-04 -1.65360702e-12 7.09287439e-02 5.55496164e-02 9.19064798e-02 6.10953730e-02 2.32240901e-03 7.18197378e-01 3.12874777e+03 -7.04000000e-04 -1.65360702e-12 7.09287437e-02 5.55496160e-02 9.19064801e-02 6.10953734e-02 2.32240897e-03 7.18197378e-01 3.12874777e+03 -7.04100000e-04 -1.65360702e-12 7.09287435e-02 5.55496157e-02 9.19064803e-02 6.10953737e-02 2.32240893e-03 7.18197378e-01 3.12874777e+03 -7.04200000e-04 -1.65360702e-12 7.09287433e-02 5.55496153e-02 9.19064805e-02 6.10953741e-02 2.32240889e-03 7.18197378e-01 3.12874777e+03 -7.04300000e-04 -1.65360702e-12 7.09287431e-02 5.55496150e-02 9.19064807e-02 6.10953745e-02 2.32240885e-03 7.18197378e-01 3.12874777e+03 -7.04400000e-04 -1.65360702e-12 7.09287429e-02 5.55496146e-02 9.19064810e-02 6.10953748e-02 2.32240881e-03 7.18197378e-01 3.12874777e+03 -7.04500000e-04 -1.65360702e-12 7.09287427e-02 5.55496143e-02 9.19064812e-02 6.10953752e-02 2.32240877e-03 7.18197378e-01 3.12874777e+03 -7.04600000e-04 -1.65360702e-12 7.09287425e-02 5.55496139e-02 9.19064814e-02 6.10953755e-02 2.32240873e-03 7.18197378e-01 3.12874777e+03 -7.04700000e-04 -1.65360702e-12 7.09287423e-02 5.55496136e-02 9.19064816e-02 6.10953759e-02 2.32240869e-03 7.18197378e-01 3.12874777e+03 -7.04800000e-04 -1.65360702e-12 7.09287421e-02 5.55496133e-02 9.19064818e-02 6.10953762e-02 2.32240865e-03 7.18197378e-01 3.12874777e+03 -7.04900000e-04 -1.65360702e-12 7.09287420e-02 5.55496129e-02 9.19064821e-02 6.10953766e-02 2.32240861e-03 7.18197378e-01 3.12874777e+03 -7.05000000e-04 -1.65360702e-12 7.09287418e-02 5.55496126e-02 9.19064823e-02 6.10953770e-02 2.32240857e-03 7.18197378e-01 3.12874789e+03 -7.05100000e-04 -1.65360702e-12 7.09287416e-02 5.55496122e-02 9.19064825e-02 6.10953773e-02 2.32240853e-03 7.18197378e-01 3.12874789e+03 -7.05200000e-04 -1.65360702e-12 7.09287414e-02 5.55496119e-02 9.19064827e-02 6.10953777e-02 2.32240849e-03 7.18197378e-01 3.12874789e+03 -7.05300000e-04 -1.65360702e-12 7.09287412e-02 5.55496115e-02 9.19064829e-02 6.10953780e-02 2.32240845e-03 7.18197378e-01 3.12874789e+03 -7.05400000e-04 -1.65360702e-12 7.09287410e-02 5.55496112e-02 9.19064832e-02 6.10953784e-02 2.32240842e-03 7.18197378e-01 3.12874789e+03 -7.05500000e-04 -1.65360702e-12 7.09287408e-02 5.55496109e-02 9.19064834e-02 6.10953787e-02 2.32240838e-03 7.18197378e-01 3.12874789e+03 -7.05600000e-04 -1.65360702e-12 7.09287406e-02 5.55496105e-02 9.19064836e-02 6.10953791e-02 2.32240834e-03 7.18197378e-01 3.12874789e+03 -7.05700000e-04 -1.65360702e-12 7.09287405e-02 5.55496102e-02 9.19064838e-02 6.10953794e-02 2.32240830e-03 7.18197378e-01 3.12874789e+03 -7.05800000e-04 -1.65360702e-12 7.09287403e-02 5.55496098e-02 9.19064840e-02 6.10953798e-02 2.32240826e-03 7.18197378e-01 3.12874789e+03 -7.05900000e-04 -1.65360702e-12 7.09287401e-02 5.55496095e-02 9.19064842e-02 6.10953801e-02 2.32240822e-03 7.18197378e-01 3.12874789e+03 -7.06000000e-04 -1.65360702e-12 7.09287399e-02 5.55496092e-02 9.19064844e-02 6.10953804e-02 2.32240818e-03 7.18197378e-01 3.12874789e+03 -7.06100000e-04 -1.65360702e-12 7.09287397e-02 5.55496088e-02 9.19064847e-02 6.10953808e-02 2.32240814e-03 7.18197378e-01 3.12874789e+03 -7.06200000e-04 -1.65360702e-12 7.09287395e-02 5.55496085e-02 9.19064849e-02 6.10953811e-02 2.32240811e-03 7.18197378e-01 3.12874789e+03 -7.06300000e-04 -1.65360702e-12 7.09287394e-02 5.55496082e-02 9.19064851e-02 6.10953815e-02 2.32240807e-03 7.18197378e-01 3.12874789e+03 -7.06400000e-04 -1.65360702e-12 7.09287392e-02 5.55496078e-02 9.19064853e-02 6.10953818e-02 2.32240803e-03 7.18197378e-01 3.12874789e+03 -7.06500000e-04 -1.65360702e-12 7.09287390e-02 5.55496075e-02 9.19064855e-02 6.10953822e-02 2.32240799e-03 7.18197378e-01 3.12874789e+03 -7.06600000e-04 -1.65360702e-12 7.09287388e-02 5.55496072e-02 9.19064857e-02 6.10953825e-02 2.32240795e-03 7.18197378e-01 3.12874789e+03 -7.06700000e-04 -1.65360702e-12 7.09287386e-02 5.55496069e-02 9.19064859e-02 6.10953828e-02 2.32240792e-03 7.18197378e-01 3.12874789e+03 -7.06800000e-04 -1.65360702e-12 7.09287385e-02 5.55496065e-02 9.19064861e-02 6.10953832e-02 2.32240788e-03 7.18197378e-01 3.12874789e+03 -7.06900000e-04 -1.65360702e-12 7.09287383e-02 5.55496062e-02 9.19064863e-02 6.10953835e-02 2.32240784e-03 7.18197378e-01 3.12874789e+03 -7.07000000e-04 -1.65360702e-12 7.09287381e-02 5.55496059e-02 9.19064865e-02 6.10953838e-02 2.32240780e-03 7.18197378e-01 3.12874789e+03 -7.07100000e-04 -1.65360702e-12 7.09287379e-02 5.55496055e-02 9.19064868e-02 6.10953842e-02 2.32240777e-03 7.18197378e-01 3.12874789e+03 -7.07200000e-04 -1.65360702e-12 7.09287377e-02 5.55496052e-02 9.19064870e-02 6.10953845e-02 2.32240773e-03 7.18197378e-01 3.12874789e+03 -7.07300000e-04 -1.65360702e-12 7.09287376e-02 5.55496049e-02 9.19064872e-02 6.10953848e-02 2.32240769e-03 7.18197378e-01 3.12874789e+03 -7.07400000e-04 -1.65360702e-12 7.09287374e-02 5.55496046e-02 9.19064874e-02 6.10953852e-02 2.32240765e-03 7.18197378e-01 3.12874789e+03 -7.07500000e-04 -1.65360702e-12 7.09287372e-02 5.55496043e-02 9.19064876e-02 6.10953855e-02 2.32240762e-03 7.18197378e-01 3.12874789e+03 -7.07600000e-04 -1.65360702e-12 7.09287370e-02 5.55496039e-02 9.19064878e-02 6.10953858e-02 2.32240758e-03 7.18197378e-01 3.12874789e+03 -7.07700000e-04 -1.65360702e-12 7.09287368e-02 5.55496036e-02 9.19064880e-02 6.10953862e-02 2.32240754e-03 7.18197378e-01 3.12874789e+03 -7.07800000e-04 -1.65360702e-12 7.09287367e-02 5.55496033e-02 9.19064882e-02 6.10953865e-02 2.32240751e-03 7.18197378e-01 3.12874789e+03 -7.07900000e-04 -1.65360702e-12 7.09287365e-02 5.55496030e-02 9.19064884e-02 6.10953868e-02 2.32240747e-03 7.18197378e-01 3.12874789e+03 -7.08000000e-04 -1.65360702e-12 7.09287363e-02 5.55496027e-02 9.19064886e-02 6.10953871e-02 2.32240743e-03 7.18197378e-01 3.12874789e+03 -7.08100000e-04 -1.65360702e-12 7.09287361e-02 5.55496023e-02 9.19064888e-02 6.10953875e-02 2.32240740e-03 7.18197378e-01 3.12874789e+03 -7.08200000e-04 -1.65360702e-12 7.09287360e-02 5.55496020e-02 9.19064890e-02 6.10953878e-02 2.32240736e-03 7.18197378e-01 3.12874789e+03 -7.08300000e-04 -1.65360702e-12 7.09287358e-02 5.55496017e-02 9.19064892e-02 6.10953881e-02 2.32240732e-03 7.18197378e-01 3.12874789e+03 -7.08400000e-04 -1.65360702e-12 7.09287356e-02 5.55496014e-02 9.19064894e-02 6.10953884e-02 2.32240729e-03 7.18197378e-01 3.12874789e+03 -7.08500000e-04 -1.65360702e-12 7.09287355e-02 5.55496011e-02 9.19064896e-02 6.10953888e-02 2.32240725e-03 7.18197378e-01 3.12874789e+03 -7.08600000e-04 -1.65360702e-12 7.09287353e-02 5.55496008e-02 9.19064898e-02 6.10953891e-02 2.32240721e-03 7.18197378e-01 3.12874789e+03 -7.08700000e-04 -1.65360702e-12 7.09287351e-02 5.55496004e-02 9.19064900e-02 6.10953894e-02 2.32240718e-03 7.18197378e-01 3.12874789e+03 -7.08800000e-04 -1.65360702e-12 7.09287349e-02 5.55496001e-02 9.19064902e-02 6.10953897e-02 2.32240714e-03 7.18197378e-01 3.12874789e+03 -7.08900000e-04 -1.65360702e-12 7.09287348e-02 5.55495998e-02 9.19064904e-02 6.10953901e-02 2.32240711e-03 7.18197378e-01 3.12874789e+03 -7.09000000e-04 -1.65360702e-12 7.09287346e-02 5.55495995e-02 9.19064906e-02 6.10953904e-02 2.32240707e-03 7.18197378e-01 3.12874789e+03 -7.09100000e-04 -1.65360702e-12 7.09287344e-02 5.55495992e-02 9.19064908e-02 6.10953907e-02 2.32240704e-03 7.18197378e-01 3.12874789e+03 -7.09200000e-04 -1.65360702e-12 7.09287343e-02 5.55495989e-02 9.19064910e-02 6.10953910e-02 2.32240700e-03 7.18197378e-01 3.12874789e+03 -7.09300000e-04 -1.65360702e-12 7.09287341e-02 5.55495986e-02 9.19064912e-02 6.10953913e-02 2.32240696e-03 7.18197378e-01 3.12874789e+03 -7.09400000e-04 -1.65360702e-12 7.09287339e-02 5.55495983e-02 9.19064914e-02 6.10953916e-02 2.32240693e-03 7.18197378e-01 3.12874789e+03 -7.09500000e-04 -1.65360702e-12 7.09287338e-02 5.55495980e-02 9.19064916e-02 6.10953920e-02 2.32240689e-03 7.18197378e-01 3.12874789e+03 -7.09600000e-04 -1.65360702e-12 7.09287336e-02 5.55495977e-02 9.19064918e-02 6.10953923e-02 2.32240686e-03 7.18197378e-01 3.12874789e+03 -7.09700000e-04 -1.65360702e-12 7.09287334e-02 5.55495974e-02 9.19064920e-02 6.10953926e-02 2.32240682e-03 7.18197378e-01 3.12874789e+03 -7.09800000e-04 -1.65360702e-12 7.09287332e-02 5.55495971e-02 9.19064922e-02 6.10953929e-02 2.32240679e-03 7.18197378e-01 3.12874789e+03 -7.09900000e-04 -1.65360702e-12 7.09287331e-02 5.55495968e-02 9.19064923e-02 6.10953932e-02 2.32240675e-03 7.18197378e-01 3.12874789e+03 -7.10000000e-04 -1.65360702e-12 7.09287329e-02 5.55495965e-02 9.19064925e-02 6.10953935e-02 2.32240672e-03 7.18197378e-01 3.12874789e+03 -7.10100000e-04 -1.65360702e-12 7.09287328e-02 5.55495962e-02 9.19064927e-02 6.10953938e-02 2.32240668e-03 7.18197378e-01 3.12874789e+03 -7.10200000e-04 -1.65360702e-12 7.09287326e-02 5.55495959e-02 9.19064929e-02 6.10953941e-02 2.32240665e-03 7.18197378e-01 3.12874803e+03 -7.10300000e-04 -1.65360702e-12 7.09287324e-02 5.55495956e-02 9.19064931e-02 6.10953944e-02 2.32240662e-03 7.18197378e-01 3.12874803e+03 -7.10400000e-04 -1.65360702e-12 7.09287323e-02 5.55495953e-02 9.19064933e-02 6.10953948e-02 2.32240658e-03 7.18197378e-01 3.12874803e+03 -7.10500000e-04 -1.65360702e-12 7.09287321e-02 5.55495950e-02 9.19064935e-02 6.10953951e-02 2.32240655e-03 7.18197378e-01 3.12874803e+03 -7.10600000e-04 -1.65360702e-12 7.09287319e-02 5.55495947e-02 9.19064937e-02 6.10953954e-02 2.32240651e-03 7.18197378e-01 3.12874803e+03 -7.10700000e-04 -1.65360702e-12 7.09287318e-02 5.55495944e-02 9.19064939e-02 6.10953957e-02 2.32240648e-03 7.18197378e-01 3.12874803e+03 -7.10800000e-04 -1.65360702e-12 7.09287316e-02 5.55495941e-02 9.19064941e-02 6.10953960e-02 2.32240644e-03 7.18197378e-01 3.12874803e+03 -7.10900000e-04 -1.65360702e-12 7.09287314e-02 5.55495938e-02 9.19064942e-02 6.10953963e-02 2.32240641e-03 7.18197378e-01 3.12874803e+03 -7.11000000e-04 -1.65360702e-12 7.09287313e-02 5.55495935e-02 9.19064944e-02 6.10953966e-02 2.32240638e-03 7.18197378e-01 3.12874803e+03 -7.11100000e-04 -1.65360702e-12 7.09287311e-02 5.55495932e-02 9.19064946e-02 6.10953969e-02 2.32240634e-03 7.18197378e-01 3.12874803e+03 -7.11200000e-04 -1.65360702e-12 7.09287310e-02 5.55495929e-02 9.19064948e-02 6.10953972e-02 2.32240631e-03 7.18197378e-01 3.12874803e+03 -7.11300000e-04 -1.65360702e-12 7.09287308e-02 5.55495926e-02 9.19064950e-02 6.10953975e-02 2.32240627e-03 7.18197378e-01 3.12874803e+03 -7.11400000e-04 -1.65360702e-12 7.09287306e-02 5.55495923e-02 9.19064952e-02 6.10953978e-02 2.32240624e-03 7.18197378e-01 3.12874803e+03 -7.11500000e-04 -1.65360702e-12 7.09287305e-02 5.55495920e-02 9.19064954e-02 6.10953981e-02 2.32240621e-03 7.18197378e-01 3.12874803e+03 -7.11600000e-04 -1.65360702e-12 7.09287303e-02 5.55495917e-02 9.19064956e-02 6.10953984e-02 2.32240617e-03 7.18197378e-01 3.12874803e+03 -7.11700000e-04 -1.65360702e-12 7.09287302e-02 5.55495914e-02 9.19064957e-02 6.10953987e-02 2.32240614e-03 7.18197378e-01 3.12874803e+03 -7.11800000e-04 -1.65360702e-12 7.09287300e-02 5.55495911e-02 9.19064959e-02 6.10953990e-02 2.32240611e-03 7.18197378e-01 3.12874803e+03 -7.11900000e-04 -1.65360702e-12 7.09287298e-02 5.55495909e-02 9.19064961e-02 6.10953993e-02 2.32240607e-03 7.18197378e-01 3.12874803e+03 -7.12000000e-04 -1.65360702e-12 7.09287297e-02 5.55495906e-02 9.19064963e-02 6.10953996e-02 2.32240604e-03 7.18197378e-01 3.12874803e+03 -7.12100000e-04 -1.65360702e-12 7.09287295e-02 5.55495903e-02 9.19064965e-02 6.10953999e-02 2.32240601e-03 7.18197378e-01 3.12874803e+03 -7.12200000e-04 -1.65360702e-12 7.09287294e-02 5.55495900e-02 9.19064967e-02 6.10954002e-02 2.32240598e-03 7.18197378e-01 3.12874803e+03 -7.12300000e-04 -1.65360702e-12 7.09287292e-02 5.55495897e-02 9.19064968e-02 6.10954005e-02 2.32240594e-03 7.18197378e-01 3.12874803e+03 -7.12400000e-04 -1.65360702e-12 7.09287291e-02 5.55495894e-02 9.19064970e-02 6.10954007e-02 2.32240591e-03 7.18197378e-01 3.12874803e+03 -7.12500000e-04 -1.65360702e-12 7.09287289e-02 5.55495891e-02 9.19064972e-02 6.10954010e-02 2.32240588e-03 7.18197378e-01 3.12874803e+03 -7.12600000e-04 -1.65360702e-12 7.09287287e-02 5.55495889e-02 9.19064974e-02 6.10954013e-02 2.32240585e-03 7.18197378e-01 3.12874803e+03 -7.12700000e-04 -1.65360702e-12 7.09287286e-02 5.55495886e-02 9.19064976e-02 6.10954016e-02 2.32240581e-03 7.18197378e-01 3.12874803e+03 -7.12800000e-04 -1.65360702e-12 7.09287284e-02 5.55495883e-02 9.19064977e-02 6.10954019e-02 2.32240578e-03 7.18197378e-01 3.12874803e+03 -7.12900000e-04 -1.65360702e-12 7.09287283e-02 5.55495880e-02 9.19064979e-02 6.10954022e-02 2.32240575e-03 7.18197378e-01 3.12874803e+03 -7.13000000e-04 -1.65360702e-12 7.09287281e-02 5.55495877e-02 9.19064981e-02 6.10954025e-02 2.32240572e-03 7.18197378e-01 3.12874803e+03 -7.13100000e-04 -1.65360702e-12 7.09287280e-02 5.55495875e-02 9.19064983e-02 6.10954028e-02 2.32240568e-03 7.18197378e-01 3.12874803e+03 -7.13200000e-04 -1.65360702e-12 7.09287278e-02 5.55495872e-02 9.19064984e-02 6.10954031e-02 2.32240565e-03 7.18197378e-01 3.12874803e+03 -7.13300000e-04 -1.65360702e-12 7.09287277e-02 5.55495869e-02 9.19064986e-02 6.10954033e-02 2.32240562e-03 7.18197378e-01 3.12874803e+03 -7.13400000e-04 -1.65360702e-12 7.09287275e-02 5.55495866e-02 9.19064988e-02 6.10954036e-02 2.32240559e-03 7.18197378e-01 3.12874803e+03 -7.13500000e-04 -1.65360702e-12 7.09287274e-02 5.55495863e-02 9.19064990e-02 6.10954039e-02 2.32240556e-03 7.18197378e-01 3.12874803e+03 -7.13600000e-04 -1.65360702e-12 7.09287272e-02 5.55495861e-02 9.19064992e-02 6.10954042e-02 2.32240552e-03 7.18197378e-01 3.12874803e+03 -7.13700000e-04 -1.65360702e-12 7.09287271e-02 5.55495858e-02 9.19064993e-02 6.10954045e-02 2.32240549e-03 7.18197378e-01 3.12874803e+03 -7.13800000e-04 -1.65360702e-12 7.09287269e-02 5.55495855e-02 9.19064995e-02 6.10954048e-02 2.32240546e-03 7.18197378e-01 3.12874803e+03 -7.13900000e-04 -1.65360702e-12 7.09287268e-02 5.55495852e-02 9.19064997e-02 6.10954050e-02 2.32240543e-03 7.18197378e-01 3.12874803e+03 -7.14000000e-04 -1.65360702e-12 7.09287266e-02 5.55495850e-02 9.19064998e-02 6.10954053e-02 2.32240540e-03 7.18197378e-01 3.12874803e+03 -7.14100000e-04 -1.65360702e-12 7.09287265e-02 5.55495847e-02 9.19065000e-02 6.10954056e-02 2.32240537e-03 7.18197378e-01 3.12874803e+03 -7.14200000e-04 -1.65360702e-12 7.09287263e-02 5.55495844e-02 9.19065002e-02 6.10954059e-02 2.32240534e-03 7.18197378e-01 3.12874803e+03 -7.14300000e-04 -1.65360702e-12 7.09287262e-02 5.55495842e-02 9.19065004e-02 6.10954062e-02 2.32240530e-03 7.18197378e-01 3.12874803e+03 -7.14400000e-04 -1.65360702e-12 7.09287260e-02 5.55495839e-02 9.19065005e-02 6.10954064e-02 2.32240527e-03 7.18197378e-01 3.12874803e+03 -7.14500000e-04 -1.65360702e-12 7.09287259e-02 5.55495836e-02 9.19065007e-02 6.10954067e-02 2.32240524e-03 7.18197378e-01 3.12874803e+03 -7.14600000e-04 -1.65360702e-12 7.09287257e-02 5.55495833e-02 9.19065009e-02 6.10954070e-02 2.32240521e-03 7.18197378e-01 3.12874803e+03 -7.14700000e-04 -1.65360702e-12 7.09287256e-02 5.55495831e-02 9.19065011e-02 6.10954073e-02 2.32240518e-03 7.18197378e-01 3.12874803e+03 -7.14800000e-04 -1.65360702e-12 7.09287254e-02 5.55495828e-02 9.19065012e-02 6.10954075e-02 2.32240515e-03 7.18197378e-01 3.12874803e+03 -7.14900000e-04 -1.65360702e-12 7.09287253e-02 5.55495825e-02 9.19065014e-02 6.10954078e-02 2.32240512e-03 7.18197378e-01 3.12874803e+03 -7.15000000e-04 -1.65360702e-12 7.09287251e-02 5.55495823e-02 9.19065016e-02 6.10954081e-02 2.32240509e-03 7.18197378e-01 3.12874803e+03 -7.15100000e-04 -1.65360702e-12 7.09287250e-02 5.55495820e-02 9.19065017e-02 6.10954084e-02 2.32240506e-03 7.18197378e-01 3.12874803e+03 -7.15200000e-04 -1.65360702e-12 7.09287248e-02 5.55495817e-02 9.19065019e-02 6.10954086e-02 2.32240503e-03 7.18197378e-01 3.12874803e+03 -7.15300000e-04 -1.65360702e-12 7.09287247e-02 5.55495815e-02 9.19065021e-02 6.10954089e-02 2.32240500e-03 7.18197378e-01 3.12874803e+03 -7.15400000e-04 -1.65360702e-12 7.09287245e-02 5.55495812e-02 9.19065022e-02 6.10954092e-02 2.32240497e-03 7.18197378e-01 3.12874803e+03 -7.15500000e-04 -1.65360702e-12 7.09287244e-02 5.55495810e-02 9.19065024e-02 6.10954094e-02 2.32240494e-03 7.18197378e-01 3.12874803e+03 -7.15600000e-04 -1.65360702e-12 7.09287243e-02 5.55495807e-02 9.19065026e-02 6.10954097e-02 2.32240491e-03 7.18197378e-01 3.12874803e+03 -7.15700000e-04 -1.65360702e-12 7.09287241e-02 5.55495804e-02 9.19065027e-02 6.10954100e-02 2.32240488e-03 7.18197378e-01 3.12874803e+03 -7.15800000e-04 -1.65360702e-12 7.09287240e-02 5.55495802e-02 9.19065029e-02 6.10954103e-02 2.32240485e-03 7.18197378e-01 3.12874803e+03 -7.15900000e-04 -1.65360702e-12 7.09287238e-02 5.55495799e-02 9.19065031e-02 6.10954105e-02 2.32240482e-03 7.18197378e-01 3.12874803e+03 -7.16000000e-04 -1.65360702e-12 7.09287237e-02 5.55495797e-02 9.19065032e-02 6.10954108e-02 2.32240479e-03 7.18197378e-01 3.12874803e+03 -7.16100000e-04 -1.65360702e-12 7.09287235e-02 5.55495794e-02 9.19065034e-02 6.10954111e-02 2.32240476e-03 7.18197378e-01 3.12874803e+03 -7.16200000e-04 -1.65360702e-12 7.09287234e-02 5.55495791e-02 9.19065036e-02 6.10954113e-02 2.32240473e-03 7.18197378e-01 3.12874803e+03 -7.16300000e-04 -1.65360702e-12 7.09287233e-02 5.55495789e-02 9.19065037e-02 6.10954116e-02 2.32240470e-03 7.18197378e-01 3.12874803e+03 -7.16400000e-04 -1.65360702e-12 7.09287231e-02 5.55495786e-02 9.19065039e-02 6.10954118e-02 2.32240467e-03 7.18197378e-01 3.12874803e+03 -7.16500000e-04 -1.65360702e-12 7.09287230e-02 5.55495784e-02 9.19065041e-02 6.10954121e-02 2.32240464e-03 7.18197378e-01 3.12874803e+03 -7.16600000e-04 -1.65360702e-12 7.09287228e-02 5.55495781e-02 9.19065042e-02 6.10954124e-02 2.32240461e-03 7.18197378e-01 3.12874803e+03 -7.16700000e-04 -1.65360702e-12 7.09287227e-02 5.55495779e-02 9.19065044e-02 6.10954126e-02 2.32240458e-03 7.18197378e-01 3.12874803e+03 -7.16800000e-04 -1.65360702e-12 7.09287226e-02 5.55495776e-02 9.19065045e-02 6.10954129e-02 2.32240455e-03 7.18197378e-01 3.12874803e+03 -7.16900000e-04 -1.65360702e-12 7.09287224e-02 5.55495774e-02 9.19065047e-02 6.10954132e-02 2.32240452e-03 7.18197378e-01 3.12874803e+03 -7.17000000e-04 -1.65360702e-12 7.09287223e-02 5.55495771e-02 9.19065049e-02 6.10954134e-02 2.32240449e-03 7.18197378e-01 3.12874803e+03 -7.17100000e-04 -1.65360702e-12 7.09287221e-02 5.55495768e-02 9.19065050e-02 6.10954137e-02 2.32240446e-03 7.18197378e-01 3.12874803e+03 -7.17200000e-04 -1.65360702e-12 7.09287220e-02 5.55495766e-02 9.19065052e-02 6.10954139e-02 2.32240443e-03 7.18197378e-01 3.12874803e+03 -7.17300000e-04 -1.65360702e-12 7.09287219e-02 5.55495763e-02 9.19065053e-02 6.10954142e-02 2.32240441e-03 7.18197378e-01 3.12874803e+03 -7.17400000e-04 -1.65360702e-12 7.09287217e-02 5.55495761e-02 9.19065055e-02 6.10954144e-02 2.32240438e-03 7.18197378e-01 3.12874803e+03 -7.17500000e-04 -1.65360702e-12 7.09287216e-02 5.55495758e-02 9.19065057e-02 6.10954147e-02 2.32240435e-03 7.18197378e-01 3.12874803e+03 -7.17600000e-04 -1.65360702e-12 7.09287215e-02 5.55495756e-02 9.19065058e-02 6.10954150e-02 2.32240432e-03 7.18197378e-01 3.12874803e+03 -7.17700000e-04 -1.65360702e-12 7.09287213e-02 5.55495753e-02 9.19065060e-02 6.10954152e-02 2.32240429e-03 7.18197378e-01 3.12874803e+03 -7.17800000e-04 -1.65360702e-12 7.09287212e-02 5.55495751e-02 9.19065061e-02 6.10954155e-02 2.32240426e-03 7.18197378e-01 3.12874803e+03 -7.17900000e-04 -1.65360702e-12 7.09287211e-02 5.55495749e-02 9.19065063e-02 6.10954157e-02 2.32240423e-03 7.18197378e-01 3.12874803e+03 -7.18000000e-04 -1.65360702e-12 7.09287209e-02 5.55495746e-02 9.19065064e-02 6.10954160e-02 2.32240421e-03 7.18197378e-01 3.12874803e+03 -7.18100000e-04 -1.65360702e-12 7.09287208e-02 5.55495744e-02 9.19065066e-02 6.10954162e-02 2.32240418e-03 7.18197378e-01 3.12874803e+03 -7.18200000e-04 -1.65360702e-12 7.09287206e-02 5.55495741e-02 9.19065068e-02 6.10954165e-02 2.32240415e-03 7.18197378e-01 3.12874803e+03 -7.18300000e-04 -1.65360702e-12 7.09287205e-02 5.55495739e-02 9.19065069e-02 6.10954167e-02 2.32240412e-03 7.18197378e-01 3.12874815e+03 -7.18400000e-04 -1.65360702e-12 7.09287204e-02 5.55495736e-02 9.19065071e-02 6.10954170e-02 2.32240409e-03 7.18197378e-01 3.12874815e+03 -7.18500000e-04 -1.65360702e-12 7.09287202e-02 5.55495734e-02 9.19065072e-02 6.10954172e-02 2.32240407e-03 7.18197378e-01 3.12874815e+03 -7.18600000e-04 -1.65360702e-12 7.09287201e-02 5.55495731e-02 9.19065074e-02 6.10954175e-02 2.32240404e-03 7.18197378e-01 3.12874815e+03 -7.18700000e-04 -1.65360702e-12 7.09287200e-02 5.55495729e-02 9.19065075e-02 6.10954177e-02 2.32240401e-03 7.18197378e-01 3.12874815e+03 -7.18800000e-04 -1.65360702e-12 7.09287198e-02 5.55495727e-02 9.19065077e-02 6.10954180e-02 2.32240398e-03 7.18197378e-01 3.12874815e+03 -7.18900000e-04 -1.65360702e-12 7.09287197e-02 5.55495724e-02 9.19065078e-02 6.10954182e-02 2.32240395e-03 7.18197378e-01 3.12874815e+03 -7.19000000e-04 -1.65360702e-12 7.09287196e-02 5.55495722e-02 9.19065080e-02 6.10954185e-02 2.32240393e-03 7.18197378e-01 3.12874815e+03 -7.19100000e-04 -1.65360702e-12 7.09287194e-02 5.55495719e-02 9.19065081e-02 6.10954187e-02 2.32240390e-03 7.18197378e-01 3.12874815e+03 -7.19200000e-04 -1.65360702e-12 7.09287193e-02 5.55495717e-02 9.19065083e-02 6.10954190e-02 2.32240387e-03 7.18197378e-01 3.12874815e+03 -7.19300000e-04 -1.65360702e-12 7.09287192e-02 5.55495715e-02 9.19065084e-02 6.10954192e-02 2.32240384e-03 7.18197378e-01 3.12874815e+03 -7.19400000e-04 -1.65360702e-12 7.09287191e-02 5.55495712e-02 9.19065086e-02 6.10954195e-02 2.32240382e-03 7.18197378e-01 3.12874815e+03 -7.19500000e-04 -1.65360702e-12 7.09287189e-02 5.55495710e-02 9.19065087e-02 6.10954197e-02 2.32240379e-03 7.18197378e-01 3.12874815e+03 -7.19600000e-04 -1.65360702e-12 7.09287188e-02 5.55495707e-02 9.19065089e-02 6.10954199e-02 2.32240376e-03 7.18197378e-01 3.12874815e+03 -7.19700000e-04 -1.65360702e-12 7.09287187e-02 5.55495705e-02 9.19065091e-02 6.10954202e-02 2.32240374e-03 7.18197378e-01 3.12874815e+03 -7.19800000e-04 -1.65360702e-12 7.09287185e-02 5.55495703e-02 9.19065092e-02 6.10954204e-02 2.32240371e-03 7.18197378e-01 3.12874815e+03 -7.19900000e-04 -1.65360702e-12 7.09287184e-02 5.55495700e-02 9.19065093e-02 6.10954207e-02 2.32240368e-03 7.18197378e-01 3.12874815e+03 -7.20000000e-04 -1.65360702e-12 7.09287183e-02 5.55495698e-02 9.19065095e-02 6.10954209e-02 2.32240365e-03 7.18197378e-01 3.12874815e+03 -7.20100000e-04 -1.65360702e-12 7.09287182e-02 5.55495696e-02 9.19065096e-02 6.10954211e-02 2.32240363e-03 7.18197378e-01 3.12874815e+03 -7.20200000e-04 -1.65360702e-12 7.09287180e-02 5.55495693e-02 9.19065098e-02 6.10954214e-02 2.32240360e-03 7.18197378e-01 3.12874815e+03 -7.20300000e-04 -1.65360702e-12 7.09287179e-02 5.55495691e-02 9.19065099e-02 6.10954216e-02 2.32240357e-03 7.18197378e-01 3.12874815e+03 -7.20400000e-04 -1.65360702e-12 7.09287178e-02 5.55495689e-02 9.19065101e-02 6.10954219e-02 2.32240355e-03 7.18197378e-01 3.12874815e+03 -7.20500000e-04 -1.65360702e-12 7.09287176e-02 5.55495686e-02 9.19065102e-02 6.10954221e-02 2.32240352e-03 7.18197378e-01 3.12874815e+03 -7.20600000e-04 -1.65360702e-12 7.09287175e-02 5.55495684e-02 9.19065104e-02 6.10954223e-02 2.32240349e-03 7.18197378e-01 3.12874815e+03 -7.20700000e-04 -1.65360702e-12 7.09287174e-02 5.55495682e-02 9.19065105e-02 6.10954226e-02 2.32240347e-03 7.18197378e-01 3.12874815e+03 -7.20800000e-04 -1.65360702e-12 7.09287173e-02 5.55495680e-02 9.19065107e-02 6.10954228e-02 2.32240344e-03 7.18197378e-01 3.12874815e+03 -7.20900000e-04 -1.65360702e-12 7.09287171e-02 5.55495677e-02 9.19065108e-02 6.10954230e-02 2.32240342e-03 7.18197378e-01 3.12874815e+03 -7.21000000e-04 -1.65360702e-12 7.09287170e-02 5.55495675e-02 9.19065110e-02 6.10954233e-02 2.32240339e-03 7.18197378e-01 3.12874815e+03 -7.21100000e-04 -1.65360702e-12 7.09287169e-02 5.55495673e-02 9.19065111e-02 6.10954235e-02 2.32240336e-03 7.18197378e-01 3.12874815e+03 -7.21200000e-04 -1.65360702e-12 7.09287168e-02 5.55495670e-02 9.19065113e-02 6.10954237e-02 2.32240334e-03 7.18197378e-01 3.12874815e+03 -7.21300000e-04 -1.65360702e-12 7.09287166e-02 5.55495668e-02 9.19065114e-02 6.10954240e-02 2.32240331e-03 7.18197378e-01 3.12874815e+03 -7.21400000e-04 -1.65360702e-12 7.09287165e-02 5.55495666e-02 9.19065115e-02 6.10954242e-02 2.32240328e-03 7.18197378e-01 3.12874815e+03 -7.21500000e-04 -1.65360702e-12 7.09287164e-02 5.55495664e-02 9.19065117e-02 6.10954244e-02 2.32240326e-03 7.18197378e-01 3.12874815e+03 -7.21600000e-04 -1.65360702e-12 7.09287163e-02 5.55495661e-02 9.19065118e-02 6.10954247e-02 2.32240323e-03 7.18197378e-01 3.12874815e+03 -7.21700000e-04 -1.65360702e-12 7.09287161e-02 5.55495659e-02 9.19065120e-02 6.10954249e-02 2.32240321e-03 7.18197378e-01 3.12874815e+03 -7.21800000e-04 -1.65360702e-12 7.09287160e-02 5.55495657e-02 9.19065121e-02 6.10954251e-02 2.32240318e-03 7.18197378e-01 3.12874815e+03 -7.21900000e-04 -1.65360702e-12 7.09287159e-02 5.55495655e-02 9.19065123e-02 6.10954254e-02 2.32240316e-03 7.18197378e-01 3.12874815e+03 -7.22000000e-04 -1.65360702e-12 7.09287158e-02 5.55495653e-02 9.19065124e-02 6.10954256e-02 2.32240313e-03 7.18197378e-01 3.12874815e+03 -7.22100000e-04 -1.65360702e-12 7.09287157e-02 5.55495650e-02 9.19065125e-02 6.10954258e-02 2.32240310e-03 7.18197378e-01 3.12874815e+03 -7.22200000e-04 -1.65360702e-12 7.09287155e-02 5.55495648e-02 9.19065127e-02 6.10954260e-02 2.32240308e-03 7.18197378e-01 3.12874815e+03 -7.22300000e-04 -1.65360702e-12 7.09287154e-02 5.55495646e-02 9.19065128e-02 6.10954263e-02 2.32240305e-03 7.18197378e-01 3.12874815e+03 -7.22400000e-04 -1.65360702e-12 7.09287153e-02 5.55495644e-02 9.19065130e-02 6.10954265e-02 2.32240303e-03 7.18197378e-01 3.12874815e+03 -7.22500000e-04 -1.65360702e-12 7.09287152e-02 5.55495641e-02 9.19065131e-02 6.10954267e-02 2.32240300e-03 7.18197378e-01 3.12874815e+03 -7.22600000e-04 -1.65360702e-12 7.09287151e-02 5.55495639e-02 9.19065132e-02 6.10954270e-02 2.32240298e-03 7.18197378e-01 3.12874815e+03 -7.22700000e-04 -1.65360702e-12 7.09287149e-02 5.55495637e-02 9.19065134e-02 6.10954272e-02 2.32240295e-03 7.18197378e-01 3.12874815e+03 -7.22800000e-04 -1.65360702e-12 7.09287148e-02 5.55495635e-02 9.19065135e-02 6.10954274e-02 2.32240293e-03 7.18197378e-01 3.12874815e+03 -7.22900000e-04 -1.65360702e-12 7.09287147e-02 5.55495633e-02 9.19065137e-02 6.10954276e-02 2.32240290e-03 7.18197378e-01 3.12874815e+03 -7.23000000e-04 -1.65360702e-12 7.09287146e-02 5.55495631e-02 9.19065138e-02 6.10954278e-02 2.32240288e-03 7.18197378e-01 3.12874815e+03 -7.23100000e-04 -1.65360702e-12 7.09287145e-02 5.55495628e-02 9.19065139e-02 6.10954281e-02 2.32240285e-03 7.18197378e-01 3.12874815e+03 -7.23200000e-04 -1.65360702e-12 7.09287143e-02 5.55495626e-02 9.19065141e-02 6.10954283e-02 2.32240283e-03 7.18197378e-01 3.12874815e+03 -7.23300000e-04 -1.65360702e-12 7.09287142e-02 5.55495624e-02 9.19065142e-02 6.10954285e-02 2.32240280e-03 7.18197378e-01 3.12874815e+03 -7.23400000e-04 -1.65360702e-12 7.09287141e-02 5.55495622e-02 9.19065143e-02 6.10954287e-02 2.32240278e-03 7.18197378e-01 3.12874815e+03 -7.23500000e-04 -1.65360702e-12 7.09287140e-02 5.55495620e-02 9.19065145e-02 6.10954290e-02 2.32240275e-03 7.18197378e-01 3.12874815e+03 -7.23600000e-04 -1.65360702e-12 7.09287139e-02 5.55495618e-02 9.19065146e-02 6.10954292e-02 2.32240273e-03 7.18197378e-01 3.12874815e+03 -7.23700000e-04 -1.65360702e-12 7.09287137e-02 5.55495616e-02 9.19065147e-02 6.10954294e-02 2.32240271e-03 7.18197378e-01 3.12874815e+03 -7.23800000e-04 -1.65360702e-12 7.09287136e-02 5.55495613e-02 9.19065149e-02 6.10954296e-02 2.32240268e-03 7.18197378e-01 3.12874815e+03 -7.23900000e-04 -1.65360702e-12 7.09287135e-02 5.55495611e-02 9.19065150e-02 6.10954298e-02 2.32240266e-03 7.18197378e-01 3.12874815e+03 -7.24000000e-04 -1.65360702e-12 7.09287134e-02 5.55495609e-02 9.19065152e-02 6.10954300e-02 2.32240263e-03 7.18197378e-01 3.12874815e+03 -7.24100000e-04 -1.65360702e-12 7.09287133e-02 5.55495607e-02 9.19065153e-02 6.10954303e-02 2.32240261e-03 7.18197378e-01 3.12874815e+03 -7.24200000e-04 -1.65360702e-12 7.09287132e-02 5.55495605e-02 9.19065154e-02 6.10954305e-02 2.32240258e-03 7.18197378e-01 3.12874815e+03 -7.24300000e-04 -1.65360702e-12 7.09287131e-02 5.55495603e-02 9.19065156e-02 6.10954307e-02 2.32240256e-03 7.18197378e-01 3.12874815e+03 -7.24400000e-04 -1.65360702e-12 7.09287129e-02 5.55495601e-02 9.19065157e-02 6.10954309e-02 2.32240254e-03 7.18197378e-01 3.12874815e+03 -7.24500000e-04 -1.65360702e-12 7.09287128e-02 5.55495599e-02 9.19065158e-02 6.10954311e-02 2.32240251e-03 7.18197378e-01 3.12874815e+03 -7.24600000e-04 -1.65360702e-12 7.09287127e-02 5.55495597e-02 9.19065160e-02 6.10954313e-02 2.32240249e-03 7.18197378e-01 3.12874815e+03 -7.24700000e-04 -1.65360702e-12 7.09287126e-02 5.55495595e-02 9.19065161e-02 6.10954315e-02 2.32240246e-03 7.18197378e-01 3.12874815e+03 -7.24800000e-04 -1.65360702e-12 7.09287125e-02 5.55495593e-02 9.19065162e-02 6.10954318e-02 2.32240244e-03 7.18197378e-01 3.12874815e+03 -7.24900000e-04 -1.65360702e-12 7.09287124e-02 5.55495590e-02 9.19065163e-02 6.10954320e-02 2.32240242e-03 7.18197378e-01 3.12874815e+03 -7.25000000e-04 -1.65360702e-12 7.09287123e-02 5.55495588e-02 9.19065165e-02 6.10954322e-02 2.32240239e-03 7.18197378e-01 3.12874815e+03 -7.25100000e-04 -1.65360702e-12 7.09287121e-02 5.55495586e-02 9.19065166e-02 6.10954324e-02 2.32240237e-03 7.18197378e-01 3.12874815e+03 -7.25200000e-04 -1.65360702e-12 7.09287120e-02 5.55495584e-02 9.19065167e-02 6.10954326e-02 2.32240235e-03 7.18197378e-01 3.12874815e+03 -7.25300000e-04 -1.65360702e-12 7.09287119e-02 5.55495582e-02 9.19065169e-02 6.10954328e-02 2.32240232e-03 7.18197378e-01 3.12874815e+03 -7.25400000e-04 -1.65360702e-12 7.09287118e-02 5.55495580e-02 9.19065170e-02 6.10954330e-02 2.32240230e-03 7.18197378e-01 3.12874815e+03 -7.25500000e-04 -1.65360702e-12 7.09287117e-02 5.55495578e-02 9.19065171e-02 6.10954332e-02 2.32240228e-03 7.18197378e-01 3.12874815e+03 -7.25600000e-04 -1.65360702e-12 7.09287116e-02 5.55495576e-02 9.19065173e-02 6.10954334e-02 2.32240225e-03 7.18197378e-01 3.12874815e+03 -7.25700000e-04 -1.65360702e-12 7.09287115e-02 5.55495574e-02 9.19065174e-02 6.10954336e-02 2.32240223e-03 7.18197378e-01 3.12874815e+03 -7.25800000e-04 -1.65360702e-12 7.09287114e-02 5.55495572e-02 9.19065175e-02 6.10954339e-02 2.32240221e-03 7.18197378e-01 3.12874815e+03 -7.25900000e-04 -1.65360702e-12 7.09287113e-02 5.55495570e-02 9.19065176e-02 6.10954341e-02 2.32240218e-03 7.18197378e-01 3.12874815e+03 -7.26000000e-04 -1.65360702e-12 7.09287111e-02 5.55495568e-02 9.19065178e-02 6.10954343e-02 2.32240216e-03 7.18197378e-01 3.12874815e+03 -7.26100000e-04 -1.65360702e-12 7.09287110e-02 5.55495566e-02 9.19065179e-02 6.10954345e-02 2.32240214e-03 7.18197378e-01 3.12874815e+03 -7.26200000e-04 -1.65360702e-12 7.09287109e-02 5.55495564e-02 9.19065180e-02 6.10954347e-02 2.32240211e-03 7.18197378e-01 3.12874815e+03 -7.26300000e-04 -1.65360702e-12 7.09287108e-02 5.55495562e-02 9.19065182e-02 6.10954349e-02 2.32240209e-03 7.18197378e-01 3.12874815e+03 -7.26400000e-04 -1.65360702e-12 7.09287107e-02 5.55495560e-02 9.19065183e-02 6.10954351e-02 2.32240207e-03 7.18197378e-01 3.12874825e+03 -7.26500000e-04 -1.65360702e-12 7.09287106e-02 5.55495558e-02 9.19065184e-02 6.10954353e-02 2.32240204e-03 7.18197378e-01 3.12874825e+03 -7.26600000e-04 -1.65360702e-12 7.09287105e-02 5.55495556e-02 9.19065185e-02 6.10954355e-02 2.32240202e-03 7.18197378e-01 3.12874825e+03 -7.26700000e-04 -1.65360702e-12 7.09287104e-02 5.55495554e-02 9.19065187e-02 6.10954357e-02 2.32240200e-03 7.18197378e-01 3.12874825e+03 -7.26800000e-04 -1.65360702e-12 7.09287103e-02 5.55495552e-02 9.19065188e-02 6.10954359e-02 2.32240198e-03 7.18197378e-01 3.12874825e+03 -7.26900000e-04 -1.65360702e-12 7.09287102e-02 5.55495550e-02 9.19065189e-02 6.10954361e-02 2.32240195e-03 7.18197378e-01 3.12874825e+03 -7.27000000e-04 -1.65360702e-12 7.09287101e-02 5.55495548e-02 9.19065190e-02 6.10954363e-02 2.32240193e-03 7.18197378e-01 3.12874825e+03 -7.27100000e-04 -1.65360702e-12 7.09287099e-02 5.55495546e-02 9.19065192e-02 6.10954365e-02 2.32240191e-03 7.18197378e-01 3.12874825e+03 -7.27200000e-04 -1.65360702e-12 7.09287098e-02 5.55495544e-02 9.19065193e-02 6.10954367e-02 2.32240189e-03 7.18197378e-01 3.12874825e+03 -7.27300000e-04 -1.65360702e-12 7.09287097e-02 5.55495542e-02 9.19065194e-02 6.10954369e-02 2.32240186e-03 7.18197378e-01 3.12874825e+03 -7.27400000e-04 -1.65360702e-12 7.09287096e-02 5.55495541e-02 9.19065195e-02 6.10954371e-02 2.32240184e-03 7.18197378e-01 3.12874825e+03 -7.27500000e-04 -1.65360702e-12 7.09287095e-02 5.55495539e-02 9.19065196e-02 6.10954373e-02 2.32240182e-03 7.18197378e-01 3.12874825e+03 -7.27600000e-04 -1.65360702e-12 7.09287094e-02 5.55495537e-02 9.19065198e-02 6.10954375e-02 2.32240180e-03 7.18197378e-01 3.12874825e+03 -7.27700000e-04 -1.65360702e-12 7.09287093e-02 5.55495535e-02 9.19065199e-02 6.10954377e-02 2.32240178e-03 7.18197378e-01 3.12874825e+03 -7.27800000e-04 -1.65360702e-12 7.09287092e-02 5.55495533e-02 9.19065200e-02 6.10954379e-02 2.32240175e-03 7.18197378e-01 3.12874825e+03 -7.27900000e-04 -1.65360702e-12 7.09287091e-02 5.55495531e-02 9.19065201e-02 6.10954381e-02 2.32240173e-03 7.18197378e-01 3.12874825e+03 -7.28000000e-04 -1.65360702e-12 7.09287090e-02 5.55495529e-02 9.19065203e-02 6.10954383e-02 2.32240171e-03 7.18197378e-01 3.12874825e+03 -7.28100000e-04 -1.65360702e-12 7.09287089e-02 5.55495527e-02 9.19065204e-02 6.10954385e-02 2.32240169e-03 7.18197378e-01 3.12874825e+03 -7.28200000e-04 -1.65360702e-12 7.09287088e-02 5.55495525e-02 9.19065205e-02 6.10954387e-02 2.32240167e-03 7.18197378e-01 3.12874825e+03 -7.28300000e-04 -1.65360702e-12 7.09287087e-02 5.55495523e-02 9.19065206e-02 6.10954389e-02 2.32240164e-03 7.18197378e-01 3.12874825e+03 -7.28400000e-04 -1.65360702e-12 7.09287086e-02 5.55495521e-02 9.19065207e-02 6.10954391e-02 2.32240162e-03 7.18197378e-01 3.12874825e+03 -7.28500000e-04 -1.65360702e-12 7.09287085e-02 5.55495520e-02 9.19065209e-02 6.10954393e-02 2.32240160e-03 7.18197378e-01 3.12874825e+03 -7.28600000e-04 -1.65360702e-12 7.09287084e-02 5.55495518e-02 9.19065210e-02 6.10954395e-02 2.32240158e-03 7.18197378e-01 3.12874825e+03 -7.28700000e-04 -1.65360702e-12 7.09287083e-02 5.55495516e-02 9.19065211e-02 6.10954396e-02 2.32240156e-03 7.18197378e-01 3.12874825e+03 -7.28800000e-04 -1.65360702e-12 7.09287082e-02 5.55495514e-02 9.19065212e-02 6.10954398e-02 2.32240154e-03 7.18197378e-01 3.12874825e+03 -7.28900000e-04 -1.65360702e-12 7.09287081e-02 5.55495512e-02 9.19065213e-02 6.10954400e-02 2.32240152e-03 7.18197378e-01 3.12874825e+03 -7.29000000e-04 -1.65360702e-12 7.09287080e-02 5.55495510e-02 9.19065215e-02 6.10954402e-02 2.32240149e-03 7.18197378e-01 3.12874825e+03 -7.29100000e-04 -1.65360702e-12 7.09287079e-02 5.55495508e-02 9.19065216e-02 6.10954404e-02 2.32240147e-03 7.18197378e-01 3.12874825e+03 -7.29200000e-04 -1.65360702e-12 7.09287078e-02 5.55495507e-02 9.19065217e-02 6.10954406e-02 2.32240145e-03 7.18197378e-01 3.12874825e+03 -7.29300000e-04 -1.65360702e-12 7.09287077e-02 5.55495505e-02 9.19065218e-02 6.10954408e-02 2.32240143e-03 7.18197378e-01 3.12874825e+03 -7.29400000e-04 -1.65360702e-12 7.09287076e-02 5.55495503e-02 9.19065219e-02 6.10954410e-02 2.32240141e-03 7.18197378e-01 3.12874825e+03 -7.29500000e-04 -1.65360702e-12 7.09287075e-02 5.55495501e-02 9.19065220e-02 6.10954412e-02 2.32240139e-03 7.18197378e-01 3.12874825e+03 -7.29600000e-04 -1.65360702e-12 7.09287074e-02 5.55495499e-02 9.19065222e-02 6.10954414e-02 2.32240137e-03 7.18197378e-01 3.12874825e+03 -7.29700000e-04 -1.65360702e-12 7.09287073e-02 5.55495497e-02 9.19065223e-02 6.10954415e-02 2.32240135e-03 7.18197378e-01 3.12874825e+03 -7.29800000e-04 -1.65360702e-12 7.09287072e-02 5.55495496e-02 9.19065224e-02 6.10954417e-02 2.32240132e-03 7.18197378e-01 3.12874825e+03 -7.29900000e-04 -1.65360702e-12 7.09287071e-02 5.55495494e-02 9.19065225e-02 6.10954419e-02 2.32240130e-03 7.18197378e-01 3.12874825e+03 -7.30000000e-04 -1.65360702e-12 7.09287070e-02 5.55495492e-02 9.19065226e-02 6.10954421e-02 2.32240128e-03 7.18197378e-01 3.12874825e+03 -7.30100000e-04 -1.65360702e-12 7.09287069e-02 5.55495490e-02 9.19065227e-02 6.10954423e-02 2.32240126e-03 7.18197378e-01 3.12874825e+03 -7.30200000e-04 -1.65360702e-12 7.09287068e-02 5.55495488e-02 9.19065229e-02 6.10954425e-02 2.32240124e-03 7.18197378e-01 3.12874825e+03 -7.30300000e-04 -1.65360702e-12 7.09287067e-02 5.55495486e-02 9.19065230e-02 6.10954427e-02 2.32240122e-03 7.18197378e-01 3.12874825e+03 -7.30400000e-04 -1.65360702e-12 7.09287066e-02 5.55495485e-02 9.19065231e-02 6.10954428e-02 2.32240120e-03 7.18197378e-01 3.12874825e+03 -7.30500000e-04 -1.65360702e-12 7.09287065e-02 5.55495483e-02 9.19065232e-02 6.10954430e-02 2.32240118e-03 7.18197378e-01 3.12874825e+03 -7.30600000e-04 -1.65360702e-12 7.09287064e-02 5.55495481e-02 9.19065233e-02 6.10954432e-02 2.32240116e-03 7.18197378e-01 3.12874825e+03 -7.30700000e-04 -1.65360702e-12 7.09287063e-02 5.55495479e-02 9.19065234e-02 6.10954434e-02 2.32240114e-03 7.18197378e-01 3.12874825e+03 -7.30800000e-04 -1.65360702e-12 7.09287062e-02 5.55495478e-02 9.19065235e-02 6.10954436e-02 2.32240112e-03 7.18197378e-01 3.12874825e+03 -7.30900000e-04 -1.65360702e-12 7.09287061e-02 5.55495476e-02 9.19065236e-02 6.10954438e-02 2.32240110e-03 7.18197378e-01 3.12874825e+03 -7.31000000e-04 -1.65360702e-12 7.09287060e-02 5.55495474e-02 9.19065238e-02 6.10954439e-02 2.32240108e-03 7.18197378e-01 3.12874825e+03 -7.31100000e-04 -1.65360702e-12 7.09287059e-02 5.55495472e-02 9.19065239e-02 6.10954441e-02 2.32240106e-03 7.18197378e-01 3.12874825e+03 -7.31200000e-04 -1.65360702e-12 7.09287058e-02 5.55495471e-02 9.19065240e-02 6.10954443e-02 2.32240104e-03 7.18197378e-01 3.12874825e+03 -7.31300000e-04 -1.65360702e-12 7.09287057e-02 5.55495469e-02 9.19065241e-02 6.10954445e-02 2.32240102e-03 7.18197378e-01 3.12874825e+03 -7.31400000e-04 -1.65360702e-12 7.09287056e-02 5.55495467e-02 9.19065242e-02 6.10954447e-02 2.32240100e-03 7.18197378e-01 3.12874825e+03 -7.31500000e-04 -1.65360702e-12 7.09287055e-02 5.55495465e-02 9.19065243e-02 6.10954448e-02 2.32240098e-03 7.18197378e-01 3.12874825e+03 -7.31600000e-04 -1.65360702e-12 7.09287054e-02 5.55495464e-02 9.19065244e-02 6.10954450e-02 2.32240096e-03 7.18197378e-01 3.12874825e+03 -7.31700000e-04 -1.65360702e-12 7.09287053e-02 5.55495462e-02 9.19065245e-02 6.10954452e-02 2.32240094e-03 7.18197378e-01 3.12874825e+03 -7.31800000e-04 -1.65360702e-12 7.09287052e-02 5.55495460e-02 9.19065246e-02 6.10954454e-02 2.32240092e-03 7.18197378e-01 3.12874825e+03 -7.31900000e-04 -1.65360702e-12 7.09287051e-02 5.55495458e-02 9.19065248e-02 6.10954455e-02 2.32240090e-03 7.18197378e-01 3.12874825e+03 -7.32000000e-04 -1.65360702e-12 7.09287050e-02 5.55495457e-02 9.19065249e-02 6.10954457e-02 2.32240088e-03 7.18197378e-01 3.12874825e+03 -7.32100000e-04 -1.65360702e-12 7.09287049e-02 5.55495455e-02 9.19065250e-02 6.10954459e-02 2.32240086e-03 7.18197378e-01 3.12874825e+03 -7.32200000e-04 -1.65360702e-12 7.09287048e-02 5.55495453e-02 9.19065251e-02 6.10954461e-02 2.32240084e-03 7.18197378e-01 3.12874825e+03 -7.32300000e-04 -1.65360702e-12 7.09287047e-02 5.55495452e-02 9.19065252e-02 6.10954463e-02 2.32240082e-03 7.18197378e-01 3.12874825e+03 -7.32400000e-04 -1.65360702e-12 7.09287046e-02 5.55495450e-02 9.19065253e-02 6.10954464e-02 2.32240080e-03 7.18197378e-01 3.12874825e+03 -7.32500000e-04 -1.65360702e-12 7.09287045e-02 5.55495448e-02 9.19065254e-02 6.10954466e-02 2.32240078e-03 7.18197378e-01 3.12874825e+03 -7.32600000e-04 -1.65360702e-12 7.09287045e-02 5.55495446e-02 9.19065255e-02 6.10954468e-02 2.32240076e-03 7.18197378e-01 3.12874825e+03 -7.32700000e-04 -1.65360702e-12 7.09287044e-02 5.55495445e-02 9.19065256e-02 6.10954470e-02 2.32240074e-03 7.18197378e-01 3.12874825e+03 -7.32800000e-04 -1.65360702e-12 7.09287043e-02 5.55495443e-02 9.19065257e-02 6.10954471e-02 2.32240072e-03 7.18197378e-01 3.12874825e+03 -7.32900000e-04 -1.65360702e-12 7.09287042e-02 5.55495441e-02 9.19065258e-02 6.10954473e-02 2.32240070e-03 7.18197378e-01 3.12874825e+03 -7.33000000e-04 -1.65360702e-12 7.09287041e-02 5.55495440e-02 9.19065259e-02 6.10954475e-02 2.32240068e-03 7.18197378e-01 3.12874825e+03 -7.33100000e-04 -1.65360702e-12 7.09287040e-02 5.55495438e-02 9.19065261e-02 6.10954476e-02 2.32240066e-03 7.18197378e-01 3.12874825e+03 -7.33200000e-04 -1.65360702e-12 7.09287039e-02 5.55495436e-02 9.19065262e-02 6.10954478e-02 2.32240064e-03 7.18197378e-01 3.12874825e+03 -7.33300000e-04 -1.65360702e-12 7.09287038e-02 5.55495435e-02 9.19065263e-02 6.10954480e-02 2.32240062e-03 7.18197378e-01 3.12874825e+03 -7.33400000e-04 -1.65360702e-12 7.09287037e-02 5.55495433e-02 9.19065264e-02 6.10954482e-02 2.32240061e-03 7.18197378e-01 3.12874825e+03 -7.33500000e-04 -1.65360702e-12 7.09287036e-02 5.55495431e-02 9.19065265e-02 6.10954483e-02 2.32240059e-03 7.18197378e-01 3.12874825e+03 -7.33600000e-04 -1.65360702e-12 7.09287035e-02 5.55495430e-02 9.19065266e-02 6.10954485e-02 2.32240057e-03 7.18197378e-01 3.12874825e+03 -7.33700000e-04 -1.65360702e-12 7.09287034e-02 5.55495428e-02 9.19065267e-02 6.10954487e-02 2.32240055e-03 7.18197378e-01 3.12874825e+03 -7.33800000e-04 -1.65360702e-12 7.09287034e-02 5.55495426e-02 9.19065268e-02 6.10954488e-02 2.32240053e-03 7.18197378e-01 3.12874825e+03 -7.33900000e-04 -1.65360702e-12 7.09287033e-02 5.55495425e-02 9.19065269e-02 6.10954490e-02 2.32240051e-03 7.18197378e-01 3.12874825e+03 -7.34000000e-04 -1.65360702e-12 7.09287032e-02 5.55495423e-02 9.19065270e-02 6.10954492e-02 2.32240049e-03 7.18197378e-01 3.12874825e+03 -7.34100000e-04 -1.65360702e-12 7.09287031e-02 5.55495422e-02 9.19065271e-02 6.10954493e-02 2.32240047e-03 7.18197378e-01 3.12874825e+03 -7.34200000e-04 -1.65360702e-12 7.09287030e-02 5.55495420e-02 9.19065272e-02 6.10954495e-02 2.32240045e-03 7.18197378e-01 3.12874825e+03 -7.34300000e-04 -1.65360702e-12 7.09287029e-02 5.55495418e-02 9.19065273e-02 6.10954497e-02 2.32240044e-03 7.18197378e-01 3.12874825e+03 -7.34400000e-04 -1.65360702e-12 7.09287028e-02 5.55495417e-02 9.19065274e-02 6.10954498e-02 2.32240042e-03 7.18197378e-01 3.12874825e+03 -7.34500000e-04 -1.65360702e-12 7.09287027e-02 5.55495415e-02 9.19065275e-02 6.10954500e-02 2.32240040e-03 7.18197378e-01 3.12874832e+03 -7.34600000e-04 -1.65360702e-12 7.09287026e-02 5.55495413e-02 9.19065276e-02 6.10954502e-02 2.32240038e-03 7.18197378e-01 3.12874832e+03 -7.34700000e-04 -1.65360702e-12 7.09287026e-02 5.55495412e-02 9.19065277e-02 6.10954503e-02 2.32240036e-03 7.18197378e-01 3.12874832e+03 -7.34800000e-04 -1.65360702e-12 7.09287025e-02 5.55495410e-02 9.19065278e-02 6.10954505e-02 2.32240034e-03 7.18197378e-01 3.12874832e+03 -7.34900000e-04 -1.65360702e-12 7.09287024e-02 5.55495409e-02 9.19065279e-02 6.10954507e-02 2.32240033e-03 7.18197378e-01 3.12874832e+03 -7.35000000e-04 -1.65360702e-12 7.09287023e-02 5.55495407e-02 9.19065280e-02 6.10954508e-02 2.32240031e-03 7.18197378e-01 3.12874832e+03 -7.35100000e-04 -1.65360702e-12 7.09287022e-02 5.55495405e-02 9.19065281e-02 6.10954510e-02 2.32240029e-03 7.18197378e-01 3.12874832e+03 -7.35200000e-04 -1.65360702e-12 7.09287021e-02 5.55495404e-02 9.19065282e-02 6.10954512e-02 2.32240027e-03 7.18197378e-01 3.12874832e+03 -7.35300000e-04 -1.65360702e-12 7.09287020e-02 5.55495402e-02 9.19065283e-02 6.10954513e-02 2.32240025e-03 7.18197378e-01 3.12874832e+03 -7.35400000e-04 -1.65360702e-12 7.09287019e-02 5.55495401e-02 9.19065284e-02 6.10954515e-02 2.32240023e-03 7.18197378e-01 3.12874832e+03 -7.35500000e-04 -1.65360702e-12 7.09287019e-02 5.55495399e-02 9.19065285e-02 6.10954516e-02 2.32240022e-03 7.18197378e-01 3.12874832e+03 -7.35600000e-04 -1.65360702e-12 7.09287018e-02 5.55495398e-02 9.19065286e-02 6.10954518e-02 2.32240020e-03 7.18197378e-01 3.12874832e+03 -7.35700000e-04 -1.65360702e-12 7.09287017e-02 5.55495396e-02 9.19065287e-02 6.10954520e-02 2.32240018e-03 7.18197378e-01 3.12874832e+03 -7.35800000e-04 -1.65360702e-12 7.09287016e-02 5.55495394e-02 9.19065288e-02 6.10954521e-02 2.32240016e-03 7.18197378e-01 3.12874832e+03 -7.35900000e-04 -1.65360702e-12 7.09287015e-02 5.55495393e-02 9.19065289e-02 6.10954523e-02 2.32240014e-03 7.18197378e-01 3.12874832e+03 -7.36000000e-04 -1.65360702e-12 7.09287014e-02 5.55495391e-02 9.19065290e-02 6.10954524e-02 2.32240013e-03 7.18197378e-01 3.12874832e+03 -7.36100000e-04 -1.65360702e-12 7.09287013e-02 5.55495390e-02 9.19065291e-02 6.10954526e-02 2.32240011e-03 7.18197378e-01 3.12874832e+03 -7.36200000e-04 -1.65360702e-12 7.09287013e-02 5.55495388e-02 9.19065292e-02 6.10954528e-02 2.32240009e-03 7.18197378e-01 3.12874832e+03 -7.36300000e-04 -1.65360702e-12 7.09287012e-02 5.55495387e-02 9.19065293e-02 6.10954529e-02 2.32240007e-03 7.18197378e-01 3.12874832e+03 -7.36400000e-04 -1.65360702e-12 7.09287011e-02 5.55495385e-02 9.19065294e-02 6.10954531e-02 2.32240006e-03 7.18197378e-01 3.12874832e+03 -7.36500000e-04 -1.65360702e-12 7.09287010e-02 5.55495384e-02 9.19065295e-02 6.10954532e-02 2.32240004e-03 7.18197378e-01 3.12874832e+03 -7.36600000e-04 -1.65360702e-12 7.09287009e-02 5.55495382e-02 9.19065296e-02 6.10954534e-02 2.32240002e-03 7.18197378e-01 3.12874832e+03 -7.36700000e-04 -1.65360702e-12 7.09287008e-02 5.55495381e-02 9.19065297e-02 6.10954535e-02 2.32240000e-03 7.18197378e-01 3.12874832e+03 -7.36800000e-04 -1.65360702e-12 7.09287008e-02 5.55495379e-02 9.19065298e-02 6.10954537e-02 2.32239998e-03 7.18197378e-01 3.12874832e+03 -7.36900000e-04 -1.65360702e-12 7.09287007e-02 5.55495378e-02 9.19065299e-02 6.10954539e-02 2.32239997e-03 7.18197378e-01 3.12874832e+03 -7.37000000e-04 -1.65360702e-12 7.09287006e-02 5.55495376e-02 9.19065300e-02 6.10954540e-02 2.32239995e-03 7.18197378e-01 3.12874832e+03 -7.37100000e-04 -1.65360702e-12 7.09287005e-02 5.55495374e-02 9.19065301e-02 6.10954542e-02 2.32239993e-03 7.18197378e-01 3.12874832e+03 -7.37200000e-04 -1.65360702e-12 7.09287004e-02 5.55495373e-02 9.19065302e-02 6.10954543e-02 2.32239992e-03 7.18197378e-01 3.12874832e+03 -7.37300000e-04 -1.65360702e-12 7.09287003e-02 5.55495371e-02 9.19065303e-02 6.10954545e-02 2.32239990e-03 7.18197378e-01 3.12874832e+03 -7.37400000e-04 -1.65360702e-12 7.09287003e-02 5.55495370e-02 9.19065304e-02 6.10954546e-02 2.32239988e-03 7.18197378e-01 3.12874832e+03 -7.37500000e-04 -1.65360702e-12 7.09287002e-02 5.55495368e-02 9.19065305e-02 6.10954548e-02 2.32239986e-03 7.18197378e-01 3.12874832e+03 -7.37600000e-04 -1.65360702e-12 7.09287001e-02 5.55495367e-02 9.19065306e-02 6.10954549e-02 2.32239985e-03 7.18197378e-01 3.12874832e+03 -7.37700000e-04 -1.65360702e-12 7.09287000e-02 5.55495366e-02 9.19065307e-02 6.10954551e-02 2.32239983e-03 7.18197378e-01 3.12874832e+03 -7.37800000e-04 -1.65360702e-12 7.09286999e-02 5.55495364e-02 9.19065308e-02 6.10954552e-02 2.32239981e-03 7.18197378e-01 3.12874832e+03 -7.37900000e-04 -1.65360702e-12 7.09286998e-02 5.55495363e-02 9.19065309e-02 6.10954554e-02 2.32239980e-03 7.18197378e-01 3.12874832e+03 -7.38000000e-04 -1.65360702e-12 7.09286998e-02 5.55495361e-02 9.19065309e-02 6.10954555e-02 2.32239978e-03 7.18197378e-01 3.12874832e+03 -7.38100000e-04 -1.65360702e-12 7.09286997e-02 5.55495360e-02 9.19065310e-02 6.10954557e-02 2.32239976e-03 7.18197378e-01 3.12874832e+03 -7.38200000e-04 -1.65360702e-12 7.09286996e-02 5.55495358e-02 9.19065311e-02 6.10954558e-02 2.32239974e-03 7.18197378e-01 3.12874832e+03 -7.38300000e-04 -1.65360702e-12 7.09286995e-02 5.55495357e-02 9.19065312e-02 6.10954560e-02 2.32239973e-03 7.18197378e-01 3.12874832e+03 -7.38400000e-04 -1.65360702e-12 7.09286994e-02 5.55495355e-02 9.19065313e-02 6.10954562e-02 2.32239971e-03 7.18197378e-01 3.12874832e+03 -7.38500000e-04 -1.65360702e-12 7.09286994e-02 5.55495354e-02 9.19065314e-02 6.10954563e-02 2.32239969e-03 7.18197378e-01 3.12874832e+03 -7.38600000e-04 -1.65360702e-12 7.09286993e-02 5.55495352e-02 9.19065315e-02 6.10954564e-02 2.32239968e-03 7.18197378e-01 3.12874832e+03 -7.38700000e-04 -1.65360702e-12 7.09286992e-02 5.55495351e-02 9.19065316e-02 6.10954566e-02 2.32239966e-03 7.18197378e-01 3.12874832e+03 -7.38800000e-04 -1.65360702e-12 7.09286991e-02 5.55495349e-02 9.19065317e-02 6.10954567e-02 2.32239964e-03 7.18197378e-01 3.12874832e+03 -7.38900000e-04 -1.65360702e-12 7.09286990e-02 5.55495348e-02 9.19065318e-02 6.10954569e-02 2.32239963e-03 7.18197378e-01 3.12874832e+03 -7.39000000e-04 -1.65360702e-12 7.09286990e-02 5.55495347e-02 9.19065319e-02 6.10954570e-02 2.32239961e-03 7.18197378e-01 3.12874832e+03 -7.39100000e-04 -1.65360702e-12 7.09286989e-02 5.55495345e-02 9.19065320e-02 6.10954572e-02 2.32239959e-03 7.18197378e-01 3.12874832e+03 -7.39200000e-04 -1.65360702e-12 7.09286988e-02 5.55495344e-02 9.19065321e-02 6.10954573e-02 2.32239958e-03 7.18197378e-01 3.12874832e+03 -7.39300000e-04 -1.65360702e-12 7.09286987e-02 5.55495342e-02 9.19065321e-02 6.10954575e-02 2.32239956e-03 7.18197378e-01 3.12874832e+03 -7.39400000e-04 -1.65360702e-12 7.09286987e-02 5.55495341e-02 9.19065322e-02 6.10954576e-02 2.32239955e-03 7.18197378e-01 3.12874832e+03 -7.39500000e-04 -1.65360702e-12 7.09286986e-02 5.55495339e-02 9.19065323e-02 6.10954578e-02 2.32239953e-03 7.18197378e-01 3.12874832e+03 -7.39600000e-04 -1.65360702e-12 7.09286985e-02 5.55495338e-02 9.19065324e-02 6.10954579e-02 2.32239951e-03 7.18197378e-01 3.12874832e+03 -7.39700000e-04 -1.65360702e-12 7.09286984e-02 5.55495337e-02 9.19065325e-02 6.10954581e-02 2.32239950e-03 7.18197378e-01 3.12874832e+03 -7.39800000e-04 -1.65360702e-12 7.09286983e-02 5.55495335e-02 9.19065326e-02 6.10954582e-02 2.32239948e-03 7.18197378e-01 3.12874832e+03 -7.39900000e-04 -1.65360702e-12 7.09286983e-02 5.55495334e-02 9.19065327e-02 6.10954584e-02 2.32239946e-03 7.18197378e-01 3.12874832e+03 -7.40000000e-04 -1.65360702e-12 7.09286982e-02 5.55495332e-02 9.19065328e-02 6.10954585e-02 2.32239945e-03 7.18197378e-01 3.12874832e+03 -7.40100000e-04 -1.65360702e-12 7.09286981e-02 5.55495331e-02 9.19065329e-02 6.10954586e-02 2.32239943e-03 7.18197378e-01 3.12874832e+03 -7.40200000e-04 -1.65360702e-12 7.09286980e-02 5.55495330e-02 9.19065330e-02 6.10954588e-02 2.32239942e-03 7.18197378e-01 3.12874832e+03 -7.40300000e-04 -1.65360702e-12 7.09286980e-02 5.55495328e-02 9.19065330e-02 6.10954589e-02 2.32239940e-03 7.18197378e-01 3.12874832e+03 -7.40400000e-04 -1.65360702e-12 7.09286979e-02 5.55495327e-02 9.19065331e-02 6.10954591e-02 2.32239938e-03 7.18197378e-01 3.12874832e+03 -7.40500000e-04 -1.65360702e-12 7.09286978e-02 5.55495325e-02 9.19065332e-02 6.10954592e-02 2.32239937e-03 7.18197378e-01 3.12874832e+03 -7.40600000e-04 -1.65360702e-12 7.09286977e-02 5.55495324e-02 9.19065333e-02 6.10954594e-02 2.32239935e-03 7.18197378e-01 3.12874832e+03 -7.40700000e-04 -1.65360702e-12 7.09286977e-02 5.55495323e-02 9.19065334e-02 6.10954595e-02 2.32239934e-03 7.18197378e-01 3.12874832e+03 -7.40800000e-04 -1.65360702e-12 7.09286976e-02 5.55495321e-02 9.19065335e-02 6.10954596e-02 2.32239932e-03 7.18197378e-01 3.12874832e+03 -7.40900000e-04 -1.65360702e-12 7.09286975e-02 5.55495320e-02 9.19065336e-02 6.10954598e-02 2.32239930e-03 7.18197378e-01 3.12874832e+03 -7.41000000e-04 -1.65360702e-12 7.09286974e-02 5.55495319e-02 9.19065337e-02 6.10954599e-02 2.32239929e-03 7.18197378e-01 3.12874832e+03 -7.41100000e-04 -1.65360702e-12 7.09286974e-02 5.55495317e-02 9.19065337e-02 6.10954601e-02 2.32239927e-03 7.18197378e-01 3.12874832e+03 -7.41200000e-04 -1.65360702e-12 7.09286973e-02 5.55495316e-02 9.19065338e-02 6.10954602e-02 2.32239926e-03 7.18197378e-01 3.12874832e+03 -7.41300000e-04 -1.65360702e-12 7.09286972e-02 5.55495314e-02 9.19065339e-02 6.10954603e-02 2.32239924e-03 7.18197378e-01 3.12874832e+03 -7.41400000e-04 -1.65360702e-12 7.09286971e-02 5.55495313e-02 9.19065340e-02 6.10954605e-02 2.32239923e-03 7.18197378e-01 3.12874832e+03 -7.41500000e-04 -1.65360702e-12 7.09286971e-02 5.55495312e-02 9.19065341e-02 6.10954606e-02 2.32239921e-03 7.18197378e-01 3.12874832e+03 -7.41600000e-04 -1.65360702e-12 7.09286970e-02 5.55495310e-02 9.19065342e-02 6.10954608e-02 2.32239920e-03 7.18197378e-01 3.12874832e+03 -7.41700000e-04 -1.65360702e-12 7.09286969e-02 5.55495309e-02 9.19065343e-02 6.10954609e-02 2.32239918e-03 7.18197378e-01 3.12874832e+03 -7.41800000e-04 -1.65360702e-12 7.09286968e-02 5.55495308e-02 9.19065343e-02 6.10954610e-02 2.32239916e-03 7.18197378e-01 3.12874832e+03 -7.41900000e-04 -1.65360702e-12 7.09286968e-02 5.55495306e-02 9.19065344e-02 6.10954612e-02 2.32239915e-03 7.18197378e-01 3.12874832e+03 -7.42000000e-04 -1.65360702e-12 7.09286967e-02 5.55495305e-02 9.19065345e-02 6.10954613e-02 2.32239913e-03 7.18197378e-01 3.12874832e+03 -7.42100000e-04 -1.65360702e-12 7.09286966e-02 5.55495304e-02 9.19065346e-02 6.10954614e-02 2.32239912e-03 7.18197378e-01 3.12874832e+03 -7.42200000e-04 -1.65360702e-12 7.09286965e-02 5.55495302e-02 9.19065347e-02 6.10954616e-02 2.32239910e-03 7.18197378e-01 3.12874832e+03 -7.42300000e-04 -1.65360702e-12 7.09286965e-02 5.55495301e-02 9.19065348e-02 6.10954617e-02 2.32239909e-03 7.18197378e-01 3.12874832e+03 -7.42400000e-04 -1.65360702e-12 7.09286964e-02 5.55495300e-02 9.19065348e-02 6.10954618e-02 2.32239907e-03 7.18197378e-01 3.12874832e+03 -7.42500000e-04 -1.65360702e-12 7.09286963e-02 5.55495298e-02 9.19065349e-02 6.10954620e-02 2.32239906e-03 7.18197378e-01 3.12874832e+03 -7.42600000e-04 -1.65360702e-12 7.09286963e-02 5.55495297e-02 9.19065350e-02 6.10954621e-02 2.32239904e-03 7.18197378e-01 3.12874839e+03 -7.42700000e-04 -1.65360702e-12 7.09286962e-02 5.55495296e-02 9.19065351e-02 6.10954623e-02 2.32239903e-03 7.18197378e-01 3.12874839e+03 -7.42800000e-04 -1.65360702e-12 7.09286961e-02 5.55495295e-02 9.19065352e-02 6.10954624e-02 2.32239901e-03 7.18197378e-01 3.12874839e+03 -7.42900000e-04 -1.65360702e-12 7.09286960e-02 5.55495293e-02 9.19065353e-02 6.10954625e-02 2.32239900e-03 7.18197378e-01 3.12874839e+03 -7.43000000e-04 -1.65360702e-12 7.09286960e-02 5.55495292e-02 9.19065353e-02 6.10954627e-02 2.32239898e-03 7.18197378e-01 3.12874839e+03 -7.43100000e-04 -1.65360702e-12 7.09286959e-02 5.55495291e-02 9.19065354e-02 6.10954628e-02 2.32239897e-03 7.18197378e-01 3.12874839e+03 -7.43200000e-04 -1.65360702e-12 7.09286958e-02 5.55495289e-02 9.19065355e-02 6.10954629e-02 2.32239895e-03 7.18197378e-01 3.12874839e+03 -7.43300000e-04 -1.65360702e-12 7.09286958e-02 5.55495288e-02 9.19065356e-02 6.10954631e-02 2.32239894e-03 7.18197378e-01 3.12874839e+03 -7.43400000e-04 -1.65360702e-12 7.09286957e-02 5.55495287e-02 9.19065357e-02 6.10954632e-02 2.32239892e-03 7.18197378e-01 3.12874839e+03 -7.43500000e-04 -1.65360702e-12 7.09286956e-02 5.55495285e-02 9.19065358e-02 6.10954633e-02 2.32239891e-03 7.18197378e-01 3.12874839e+03 -7.43600000e-04 -1.65360702e-12 7.09286955e-02 5.55495284e-02 9.19065358e-02 6.10954634e-02 2.32239889e-03 7.18197378e-01 3.12874839e+03 -7.43700000e-04 -1.65360702e-12 7.09286955e-02 5.55495283e-02 9.19065359e-02 6.10954636e-02 2.32239888e-03 7.18197378e-01 3.12874839e+03 -7.43800000e-04 -1.65360702e-12 7.09286954e-02 5.55495282e-02 9.19065360e-02 6.10954637e-02 2.32239886e-03 7.18197378e-01 3.12874839e+03 -7.43900000e-04 -1.65360702e-12 7.09286953e-02 5.55495280e-02 9.19065361e-02 6.10954638e-02 2.32239885e-03 7.18197378e-01 3.12874839e+03 -7.44000000e-04 -1.65360702e-12 7.09286953e-02 5.55495279e-02 9.19065362e-02 6.10954640e-02 2.32239884e-03 7.18197378e-01 3.12874839e+03 -7.44100000e-04 -1.65360702e-12 7.09286952e-02 5.55495278e-02 9.19065362e-02 6.10954641e-02 2.32239882e-03 7.18197378e-01 3.12874839e+03 -7.44200000e-04 -1.65360702e-12 7.09286951e-02 5.55495277e-02 9.19065363e-02 6.10954642e-02 2.32239881e-03 7.18197378e-01 3.12874839e+03 -7.44300000e-04 -1.65360702e-12 7.09286951e-02 5.55495275e-02 9.19065364e-02 6.10954644e-02 2.32239879e-03 7.18197378e-01 3.12874839e+03 -7.44400000e-04 -1.65360702e-12 7.09286950e-02 5.55495274e-02 9.19065365e-02 6.10954645e-02 2.32239878e-03 7.18197378e-01 3.12874839e+03 -7.44500000e-04 -1.65360702e-12 7.09286949e-02 5.55495273e-02 9.19065366e-02 6.10954646e-02 2.32239876e-03 7.18197378e-01 3.12874839e+03 -7.44600000e-04 -1.65360702e-12 7.09286949e-02 5.55495272e-02 9.19065366e-02 6.10954647e-02 2.32239875e-03 7.18197378e-01 3.12874839e+03 -7.44700000e-04 -1.65360702e-12 7.09286948e-02 5.55495270e-02 9.19065367e-02 6.10954649e-02 2.32239874e-03 7.18197378e-01 3.12874839e+03 -7.44800000e-04 -1.65360702e-12 7.09286947e-02 5.55495269e-02 9.19065368e-02 6.10954650e-02 2.32239872e-03 7.18197378e-01 3.12874839e+03 -7.44900000e-04 -1.65360702e-12 7.09286946e-02 5.55495268e-02 9.19065369e-02 6.10954651e-02 2.32239871e-03 7.18197378e-01 3.12874839e+03 -7.45000000e-04 -1.65360702e-12 7.09286946e-02 5.55495267e-02 9.19065370e-02 6.10954653e-02 2.32239869e-03 7.18197378e-01 3.12874839e+03 -7.45100000e-04 -1.65360702e-12 7.09286945e-02 5.55495265e-02 9.19065370e-02 6.10954654e-02 2.32239868e-03 7.18197378e-01 3.12874839e+03 -7.45200000e-04 -1.65360702e-12 7.09286944e-02 5.55495264e-02 9.19065371e-02 6.10954655e-02 2.32239866e-03 7.18197378e-01 3.12874839e+03 -7.45300000e-04 -1.65360702e-12 7.09286944e-02 5.55495263e-02 9.19065372e-02 6.10954656e-02 2.32239865e-03 7.18197378e-01 3.12874839e+03 -7.45400000e-04 -1.65360702e-12 7.09286943e-02 5.55495262e-02 9.19065373e-02 6.10954658e-02 2.32239864e-03 7.18197378e-01 3.12874839e+03 -7.45500000e-04 -1.65360702e-12 7.09286942e-02 5.55495261e-02 9.19065373e-02 6.10954659e-02 2.32239862e-03 7.18197378e-01 3.12874839e+03 -7.45600000e-04 -1.65360702e-12 7.09286942e-02 5.55495259e-02 9.19065374e-02 6.10954660e-02 2.32239861e-03 7.18197378e-01 3.12874839e+03 -7.45700000e-04 -1.65360702e-12 7.09286941e-02 5.55495258e-02 9.19065375e-02 6.10954661e-02 2.32239859e-03 7.18197378e-01 3.12874839e+03 -7.45800000e-04 -1.65360702e-12 7.09286940e-02 5.55495257e-02 9.19065376e-02 6.10954663e-02 2.32239858e-03 7.18197378e-01 3.12874839e+03 -7.45900000e-04 -1.65360702e-12 7.09286940e-02 5.55495256e-02 9.19065377e-02 6.10954664e-02 2.32239857e-03 7.18197378e-01 3.12874839e+03 -7.46000000e-04 -1.65360702e-12 7.09286939e-02 5.55495254e-02 9.19065377e-02 6.10954665e-02 2.32239855e-03 7.18197378e-01 3.12874839e+03 -7.46100000e-04 -1.65360702e-12 7.09286938e-02 5.55495253e-02 9.19065378e-02 6.10954666e-02 2.32239854e-03 7.18197378e-01 3.12874839e+03 -7.46200000e-04 -1.65360702e-12 7.09286938e-02 5.55495252e-02 9.19065379e-02 6.10954667e-02 2.32239853e-03 7.18197378e-01 3.12874839e+03 -7.46300000e-04 -1.65360702e-12 7.09286937e-02 5.55495251e-02 9.19065380e-02 6.10954669e-02 2.32239851e-03 7.18197378e-01 3.12874839e+03 -7.46400000e-04 -1.65360702e-12 7.09286937e-02 5.55495250e-02 9.19065380e-02 6.10954670e-02 2.32239850e-03 7.18197378e-01 3.12874839e+03 -7.46500000e-04 -1.65360702e-12 7.09286936e-02 5.55495249e-02 9.19065381e-02 6.10954671e-02 2.32239848e-03 7.18197378e-01 3.12874839e+03 -7.46600000e-04 -1.65360702e-12 7.09286935e-02 5.55495247e-02 9.19065382e-02 6.10954672e-02 2.32239847e-03 7.18197378e-01 3.12874839e+03 -7.46700000e-04 -1.65360702e-12 7.09286935e-02 5.55495246e-02 9.19065383e-02 6.10954674e-02 2.32239846e-03 7.18197378e-01 3.12874839e+03 -7.46800000e-04 -1.65360702e-12 7.09286934e-02 5.55495245e-02 9.19065383e-02 6.10954675e-02 2.32239844e-03 7.18197378e-01 3.12874839e+03 -7.46900000e-04 -1.65360702e-12 7.09286933e-02 5.55495244e-02 9.19065384e-02 6.10954676e-02 2.32239843e-03 7.18197378e-01 3.12874839e+03 -7.47000000e-04 -1.65360702e-12 7.09286933e-02 5.55495243e-02 9.19065385e-02 6.10954677e-02 2.32239842e-03 7.18197378e-01 3.12874839e+03 -7.47100000e-04 -1.65360702e-12 7.09286932e-02 5.55495241e-02 9.19065386e-02 6.10954678e-02 2.32239840e-03 7.18197378e-01 3.12874839e+03 -7.47200000e-04 -1.65360702e-12 7.09286931e-02 5.55495240e-02 9.19065386e-02 6.10954680e-02 2.32239839e-03 7.18197378e-01 3.12874839e+03 -7.47300000e-04 -1.65360702e-12 7.09286931e-02 5.55495239e-02 9.19065387e-02 6.10954681e-02 2.32239838e-03 7.18197378e-01 3.12874839e+03 -7.47400000e-04 -1.65360702e-12 7.09286930e-02 5.55495238e-02 9.19065388e-02 6.10954682e-02 2.32239836e-03 7.18197378e-01 3.12874839e+03 -7.47500000e-04 -1.65360702e-12 7.09286929e-02 5.55495237e-02 9.19065389e-02 6.10954683e-02 2.32239835e-03 7.18197378e-01 3.12874839e+03 -7.47600000e-04 -1.65360702e-12 7.09286929e-02 5.55495236e-02 9.19065389e-02 6.10954684e-02 2.32239834e-03 7.18197378e-01 3.12874839e+03 -7.47700000e-04 -1.65360702e-12 7.09286928e-02 5.55495235e-02 9.19065390e-02 6.10954686e-02 2.32239832e-03 7.18197378e-01 3.12874839e+03 -7.47800000e-04 -1.65360702e-12 7.09286928e-02 5.55495233e-02 9.19065391e-02 6.10954687e-02 2.32239831e-03 7.18197378e-01 3.12874839e+03 -7.47900000e-04 -1.65360702e-12 7.09286927e-02 5.55495232e-02 9.19065391e-02 6.10954688e-02 2.32239830e-03 7.18197378e-01 3.12874839e+03 -7.48000000e-04 -1.65360702e-12 7.09286926e-02 5.55495231e-02 9.19065392e-02 6.10954689e-02 2.32239828e-03 7.18197378e-01 3.12874839e+03 -7.48100000e-04 -1.65360702e-12 7.09286926e-02 5.55495230e-02 9.19065393e-02 6.10954690e-02 2.32239827e-03 7.18197378e-01 3.12874839e+03 -7.48200000e-04 -1.65360702e-12 7.09286925e-02 5.55495229e-02 9.19065394e-02 6.10954691e-02 2.32239826e-03 7.18197378e-01 3.12874839e+03 -7.48300000e-04 -1.65360702e-12 7.09286924e-02 5.55495228e-02 9.19065394e-02 6.10954693e-02 2.32239824e-03 7.18197378e-01 3.12874839e+03 -7.48400000e-04 -1.65360702e-12 7.09286924e-02 5.55495227e-02 9.19065395e-02 6.10954694e-02 2.32239823e-03 7.18197378e-01 3.12874839e+03 -7.48500000e-04 -1.65360702e-12 7.09286923e-02 5.55495225e-02 9.19065396e-02 6.10954695e-02 2.32239822e-03 7.18197378e-01 3.12874839e+03 -7.48600000e-04 -1.65360702e-12 7.09286923e-02 5.55495224e-02 9.19065397e-02 6.10954696e-02 2.32239821e-03 7.18197378e-01 3.12874839e+03 -7.48700000e-04 -1.65360702e-12 7.09286922e-02 5.55495223e-02 9.19065397e-02 6.10954697e-02 2.32239819e-03 7.18197378e-01 3.12874839e+03 -7.48800000e-04 -1.65360702e-12 7.09286921e-02 5.55495222e-02 9.19065398e-02 6.10954698e-02 2.32239818e-03 7.18197378e-01 3.12874839e+03 -7.48900000e-04 -1.65360702e-12 7.09286921e-02 5.55495221e-02 9.19065399e-02 6.10954700e-02 2.32239817e-03 7.18197378e-01 3.12874839e+03 -7.49000000e-04 -1.65360702e-12 7.09286920e-02 5.55495220e-02 9.19065399e-02 6.10954701e-02 2.32239815e-03 7.18197378e-01 3.12874839e+03 -7.49100000e-04 -1.65360702e-12 7.09286919e-02 5.55495219e-02 9.19065400e-02 6.10954702e-02 2.32239814e-03 7.18197378e-01 3.12874839e+03 -7.49200000e-04 -1.65360702e-12 7.09286919e-02 5.55495218e-02 9.19065401e-02 6.10954703e-02 2.32239813e-03 7.18197378e-01 3.12874839e+03 -7.49300000e-04 -1.65360702e-12 7.09286918e-02 5.55495217e-02 9.19065401e-02 6.10954704e-02 2.32239812e-03 7.18197378e-01 3.12874839e+03 -7.49400000e-04 -1.65360702e-12 7.09286918e-02 5.55495215e-02 9.19065402e-02 6.10954705e-02 2.32239810e-03 7.18197378e-01 3.12874839e+03 -7.49500000e-04 -1.65360702e-12 7.09286917e-02 5.55495214e-02 9.19065403e-02 6.10954706e-02 2.32239809e-03 7.18197378e-01 3.12874839e+03 -7.49600000e-04 -1.65360702e-12 7.09286916e-02 5.55495213e-02 9.19065404e-02 6.10954707e-02 2.32239808e-03 7.18197378e-01 3.12874839e+03 -7.49700000e-04 -1.65360702e-12 7.09286916e-02 5.55495212e-02 9.19065404e-02 6.10954709e-02 2.32239807e-03 7.18197378e-01 3.12874839e+03 -7.49800000e-04 -1.65360702e-12 7.09286915e-02 5.55495211e-02 9.19065405e-02 6.10954710e-02 2.32239805e-03 7.18197378e-01 3.12874839e+03 -7.49900000e-04 -1.65360702e-12 7.09286915e-02 5.55495210e-02 9.19065406e-02 6.10954711e-02 2.32239804e-03 7.18197378e-01 3.12874839e+03 -7.50000000e-04 -1.65360702e-12 7.09286914e-02 5.55495209e-02 9.19065406e-02 6.10954712e-02 2.32239803e-03 7.18197378e-01 3.12874839e+03 -7.50100000e-04 -1.65360702e-12 7.09286913e-02 5.55495208e-02 9.19065407e-02 6.10954713e-02 2.32239802e-03 7.18197378e-01 3.12874839e+03 -7.50200000e-04 -1.65360702e-12 7.09286913e-02 5.55495207e-02 9.19065408e-02 6.10954714e-02 2.32239800e-03 7.18197378e-01 3.12874839e+03 -7.50300000e-04 -1.65360702e-12 7.09286912e-02 5.55495206e-02 9.19065408e-02 6.10954715e-02 2.32239799e-03 7.18197378e-01 3.12874839e+03 -7.50400000e-04 -1.65360702e-12 7.09286912e-02 5.55495205e-02 9.19065409e-02 6.10954716e-02 2.32239798e-03 7.18197378e-01 3.12874839e+03 -7.50500000e-04 -1.65360702e-12 7.09286911e-02 5.55495203e-02 9.19065410e-02 6.10954717e-02 2.32239797e-03 7.18197378e-01 3.12874839e+03 -7.50600000e-04 -1.65360702e-12 7.09286911e-02 5.55495202e-02 9.19065410e-02 6.10954719e-02 2.32239795e-03 7.18197378e-01 3.12874839e+03 -7.50700000e-04 -1.65360702e-12 7.09286910e-02 5.55495201e-02 9.19065411e-02 6.10954720e-02 2.32239794e-03 7.18197378e-01 3.12874844e+03 -7.50800000e-04 -1.65360702e-12 7.09286909e-02 5.55495200e-02 9.19065412e-02 6.10954721e-02 2.32239793e-03 7.18197378e-01 3.12874844e+03 -7.50900000e-04 -1.65360702e-12 7.09286909e-02 5.55495199e-02 9.19065412e-02 6.10954722e-02 2.32239792e-03 7.18197378e-01 3.12874844e+03 -7.51000000e-04 -1.65360702e-12 7.09286908e-02 5.55495198e-02 9.19065413e-02 6.10954723e-02 2.32239790e-03 7.18197378e-01 3.12874844e+03 -7.51100000e-04 -1.65360702e-12 7.09286908e-02 5.55495197e-02 9.19065414e-02 6.10954724e-02 2.32239789e-03 7.18197378e-01 3.12874844e+03 -7.51200000e-04 -1.65360702e-12 7.09286907e-02 5.55495196e-02 9.19065414e-02 6.10954725e-02 2.32239788e-03 7.18197378e-01 3.12874844e+03 -7.51300000e-04 -1.65360702e-12 7.09286906e-02 5.55495195e-02 9.19065415e-02 6.10954726e-02 2.32239787e-03 7.18197378e-01 3.12874844e+03 -7.51400000e-04 -1.65360702e-12 7.09286906e-02 5.55495194e-02 9.19065416e-02 6.10954727e-02 2.32239786e-03 7.18197378e-01 3.12874844e+03 -7.51500000e-04 -1.65360702e-12 7.09286905e-02 5.55495193e-02 9.19065416e-02 6.10954728e-02 2.32239784e-03 7.18197378e-01 3.12874844e+03 -7.51600000e-04 -1.65360702e-12 7.09286905e-02 5.55495192e-02 9.19065417e-02 6.10954729e-02 2.32239783e-03 7.18197378e-01 3.12874844e+03 -7.51700000e-04 -1.65360702e-12 7.09286904e-02 5.55495191e-02 9.19065418e-02 6.10954730e-02 2.32239782e-03 7.18197378e-01 3.12874844e+03 -7.51800000e-04 -1.65360702e-12 7.09286904e-02 5.55495190e-02 9.19065418e-02 6.10954732e-02 2.32239781e-03 7.18197378e-01 3.12874844e+03 -7.51900000e-04 -1.65360702e-12 7.09286903e-02 5.55495189e-02 9.19065419e-02 6.10954733e-02 2.32239780e-03 7.18197378e-01 3.12874844e+03 -7.52000000e-04 -1.65360702e-12 7.09286902e-02 5.55495188e-02 9.19065420e-02 6.10954734e-02 2.32239778e-03 7.18197378e-01 3.12874844e+03 -7.52100000e-04 -1.65360702e-12 7.09286902e-02 5.55495187e-02 9.19065420e-02 6.10954735e-02 2.32239777e-03 7.18197378e-01 3.12874844e+03 -7.52200000e-04 -1.65360702e-12 7.09286901e-02 5.55495186e-02 9.19065421e-02 6.10954736e-02 2.32239776e-03 7.18197378e-01 3.12874844e+03 -7.52300000e-04 -1.65360702e-12 7.09286901e-02 5.55495185e-02 9.19065422e-02 6.10954737e-02 2.32239775e-03 7.18197378e-01 3.12874844e+03 -7.52400000e-04 -1.65360702e-12 7.09286900e-02 5.55495184e-02 9.19065422e-02 6.10954738e-02 2.32239774e-03 7.18197378e-01 3.12874844e+03 -7.52500000e-04 -1.65360702e-12 7.09286900e-02 5.55495183e-02 9.19065423e-02 6.10954739e-02 2.32239773e-03 7.18197378e-01 3.12874844e+03 -7.52600000e-04 -1.65360702e-12 7.09286899e-02 5.55495182e-02 9.19065424e-02 6.10954740e-02 2.32239771e-03 7.18197378e-01 3.12874844e+03 -7.52700000e-04 -1.65360702e-12 7.09286899e-02 5.55495181e-02 9.19065424e-02 6.10954741e-02 2.32239770e-03 7.18197378e-01 3.12874844e+03 -7.52800000e-04 -1.65360702e-12 7.09286898e-02 5.55495180e-02 9.19065425e-02 6.10954742e-02 2.32239769e-03 7.18197378e-01 3.12874844e+03 -7.52900000e-04 -1.65360702e-12 7.09286897e-02 5.55495179e-02 9.19065426e-02 6.10954743e-02 2.32239768e-03 7.18197378e-01 3.12874844e+03 -7.53000000e-04 -1.65360702e-12 7.09286897e-02 5.55495178e-02 9.19065426e-02 6.10954744e-02 2.32239767e-03 7.18197378e-01 3.12874844e+03 -7.53100000e-04 -1.65360702e-12 7.09286896e-02 5.55495177e-02 9.19065427e-02 6.10954745e-02 2.32239766e-03 7.18197378e-01 3.12874844e+03 -7.53200000e-04 -1.65360702e-12 7.09286896e-02 5.55495176e-02 9.19065428e-02 6.10954746e-02 2.32239764e-03 7.18197378e-01 3.12874844e+03 -7.53300000e-04 -1.65360702e-12 7.09286895e-02 5.55495175e-02 9.19065428e-02 6.10954747e-02 2.32239763e-03 7.18197378e-01 3.12874844e+03 -7.53400000e-04 -1.65360702e-12 7.09286895e-02 5.55495174e-02 9.19065429e-02 6.10954748e-02 2.32239762e-03 7.18197378e-01 3.12874844e+03 -7.53500000e-04 -1.65360702e-12 7.09286894e-02 5.55495173e-02 9.19065429e-02 6.10954749e-02 2.32239761e-03 7.18197378e-01 3.12874844e+03 -7.53600000e-04 -1.65360702e-12 7.09286894e-02 5.55495172e-02 9.19065430e-02 6.10954750e-02 2.32239760e-03 7.18197378e-01 3.12874844e+03 -7.53700000e-04 -1.65360702e-12 7.09286893e-02 5.55495171e-02 9.19065431e-02 6.10954751e-02 2.32239759e-03 7.18197378e-01 3.12874844e+03 -7.53800000e-04 -1.65360702e-12 7.09286893e-02 5.55495170e-02 9.19065431e-02 6.10954752e-02 2.32239758e-03 7.18197378e-01 3.12874844e+03 -7.53900000e-04 -1.65360702e-12 7.09286892e-02 5.55495169e-02 9.19065432e-02 6.10954753e-02 2.32239757e-03 7.18197378e-01 3.12874844e+03 -7.54000000e-04 -1.65360702e-12 7.09286891e-02 5.55495168e-02 9.19065433e-02 6.10954754e-02 2.32239755e-03 7.18197378e-01 3.12874844e+03 -7.54100000e-04 -1.65360702e-12 7.09286891e-02 5.55495167e-02 9.19065433e-02 6.10954755e-02 2.32239754e-03 7.18197378e-01 3.12874844e+03 -7.54200000e-04 -1.65360702e-12 7.09286890e-02 5.55495166e-02 9.19065434e-02 6.10954756e-02 2.32239753e-03 7.18197378e-01 3.12874844e+03 -7.54300000e-04 -1.65360702e-12 7.09286890e-02 5.55495165e-02 9.19065434e-02 6.10954757e-02 2.32239752e-03 7.18197378e-01 3.12874844e+03 -7.54400000e-04 -1.65360702e-12 7.09286889e-02 5.55495164e-02 9.19065435e-02 6.10954758e-02 2.32239751e-03 7.18197378e-01 3.12874844e+03 -7.54500000e-04 -1.65360702e-12 7.09286889e-02 5.55495163e-02 9.19065436e-02 6.10954759e-02 2.32239750e-03 7.18197378e-01 3.12874844e+03 -7.54600000e-04 -1.65360702e-12 7.09286888e-02 5.55495162e-02 9.19065436e-02 6.10954760e-02 2.32239749e-03 7.18197378e-01 3.12874844e+03 -7.54700000e-04 -1.65360702e-12 7.09286888e-02 5.55495161e-02 9.19065437e-02 6.10954761e-02 2.32239748e-03 7.18197378e-01 3.12874844e+03 -7.54800000e-04 -1.65360702e-12 7.09286887e-02 5.55495160e-02 9.19065437e-02 6.10954762e-02 2.32239746e-03 7.18197378e-01 3.12874844e+03 -7.54900000e-04 -1.65360702e-12 7.09286887e-02 5.55495159e-02 9.19065438e-02 6.10954763e-02 2.32239745e-03 7.18197378e-01 3.12874844e+03 -7.55000000e-04 -1.65360702e-12 7.09286886e-02 5.55495158e-02 9.19065439e-02 6.10954764e-02 2.32239744e-03 7.18197378e-01 3.12874844e+03 -7.55100000e-04 -1.65360702e-12 7.09286886e-02 5.55495157e-02 9.19065439e-02 6.10954765e-02 2.32239743e-03 7.18197378e-01 3.12874844e+03 -7.55200000e-04 -1.65360702e-12 7.09286885e-02 5.55495156e-02 9.19065440e-02 6.10954766e-02 2.32239742e-03 7.18197378e-01 3.12874844e+03 -7.55300000e-04 -1.65360702e-12 7.09286885e-02 5.55495155e-02 9.19065441e-02 6.10954767e-02 2.32239741e-03 7.18197378e-01 3.12874844e+03 -7.55400000e-04 -1.65360702e-12 7.09286884e-02 5.55495154e-02 9.19065441e-02 6.10954768e-02 2.32239740e-03 7.18197378e-01 3.12874844e+03 -7.55500000e-04 -1.65360702e-12 7.09286884e-02 5.55495153e-02 9.19065442e-02 6.10954769e-02 2.32239739e-03 7.18197378e-01 3.12874844e+03 -7.55600000e-04 -1.65360702e-12 7.09286883e-02 5.55495152e-02 9.19065442e-02 6.10954770e-02 2.32239738e-03 7.18197378e-01 3.12874844e+03 -7.55700000e-04 -1.65360702e-12 7.09286883e-02 5.55495151e-02 9.19065443e-02 6.10954771e-02 2.32239737e-03 7.18197378e-01 3.12874844e+03 -7.55800000e-04 -1.65360702e-12 7.09286882e-02 5.55495150e-02 9.19065444e-02 6.10954772e-02 2.32239736e-03 7.18197378e-01 3.12874844e+03 -7.55900000e-04 -1.65360702e-12 7.09286881e-02 5.55495150e-02 9.19065444e-02 6.10954773e-02 2.32239735e-03 7.18197378e-01 3.12874844e+03 -7.56000000e-04 -1.65360702e-12 7.09286881e-02 5.55495149e-02 9.19065445e-02 6.10954774e-02 2.32239733e-03 7.18197378e-01 3.12874844e+03 -7.56100000e-04 -1.65360702e-12 7.09286880e-02 5.55495148e-02 9.19065445e-02 6.10954775e-02 2.32239732e-03 7.18197378e-01 3.12874844e+03 -7.56200000e-04 -1.65360702e-12 7.09286880e-02 5.55495147e-02 9.19065446e-02 6.10954776e-02 2.32239731e-03 7.18197378e-01 3.12874844e+03 -7.56300000e-04 -1.65360702e-12 7.09286879e-02 5.55495146e-02 9.19065446e-02 6.10954777e-02 2.32239730e-03 7.18197378e-01 3.12874844e+03 -7.56400000e-04 -1.65360702e-12 7.09286879e-02 5.55495145e-02 9.19065447e-02 6.10954778e-02 2.32239729e-03 7.18197378e-01 3.12874844e+03 -7.56500000e-04 -1.65360702e-12 7.09286878e-02 5.55495144e-02 9.19065448e-02 6.10954779e-02 2.32239728e-03 7.18197378e-01 3.12874844e+03 -7.56600000e-04 -1.65360702e-12 7.09286878e-02 5.55495143e-02 9.19065448e-02 6.10954780e-02 2.32239727e-03 7.18197378e-01 3.12874844e+03 -7.56700000e-04 -1.65360702e-12 7.09286877e-02 5.55495142e-02 9.19065449e-02 6.10954780e-02 2.32239726e-03 7.18197378e-01 3.12874844e+03 -7.56800000e-04 -1.65360702e-12 7.09286877e-02 5.55495141e-02 9.19065449e-02 6.10954781e-02 2.32239725e-03 7.18197378e-01 3.12874844e+03 -7.56900000e-04 -1.65360702e-12 7.09286876e-02 5.55495140e-02 9.19065450e-02 6.10954782e-02 2.32239724e-03 7.18197378e-01 3.12874844e+03 -7.57000000e-04 -1.65360702e-12 7.09286876e-02 5.55495139e-02 9.19065451e-02 6.10954783e-02 2.32239723e-03 7.18197378e-01 3.12874844e+03 -7.57100000e-04 -1.65360702e-12 7.09286875e-02 5.55495139e-02 9.19065451e-02 6.10954784e-02 2.32239722e-03 7.18197378e-01 3.12874844e+03 -7.57200000e-04 -1.65360702e-12 7.09286875e-02 5.55495138e-02 9.19065452e-02 6.10954785e-02 2.32239721e-03 7.18197378e-01 3.12874844e+03 -7.57300000e-04 -1.65360702e-12 7.09286874e-02 5.55495137e-02 9.19065452e-02 6.10954786e-02 2.32239720e-03 7.18197378e-01 3.12874844e+03 -7.57400000e-04 -1.65360702e-12 7.09286874e-02 5.55495136e-02 9.19065453e-02 6.10954787e-02 2.32239719e-03 7.18197378e-01 3.12874844e+03 -7.57500000e-04 -1.65360702e-12 7.09286873e-02 5.55495135e-02 9.19065453e-02 6.10954788e-02 2.32239718e-03 7.18197378e-01 3.12874844e+03 -7.57600000e-04 -1.65360702e-12 7.09286873e-02 5.55495134e-02 9.19065454e-02 6.10954789e-02 2.32239717e-03 7.18197378e-01 3.12874844e+03 -7.57700000e-04 -1.65360702e-12 7.09286872e-02 5.55495133e-02 9.19065455e-02 6.10954790e-02 2.32239716e-03 7.18197378e-01 3.12874844e+03 -7.57800000e-04 -1.65360702e-12 7.09286872e-02 5.55495132e-02 9.19065455e-02 6.10954791e-02 2.32239715e-03 7.18197378e-01 3.12874844e+03 -7.57900000e-04 -1.65360702e-12 7.09286872e-02 5.55495131e-02 9.19065456e-02 6.10954792e-02 2.32239714e-03 7.18197378e-01 3.12874844e+03 -7.58000000e-04 -1.65360702e-12 7.09286871e-02 5.55495131e-02 9.19065456e-02 6.10954792e-02 2.32239713e-03 7.18197378e-01 3.12874844e+03 -7.58100000e-04 -1.65360702e-12 7.09286871e-02 5.55495130e-02 9.19065457e-02 6.10954793e-02 2.32239712e-03 7.18197378e-01 3.12874844e+03 -7.58200000e-04 -1.65360702e-12 7.09286870e-02 5.55495129e-02 9.19065457e-02 6.10954794e-02 2.32239711e-03 7.18197378e-01 3.12874844e+03 -7.58300000e-04 -1.65360702e-12 7.09286870e-02 5.55495128e-02 9.19065458e-02 6.10954795e-02 2.32239710e-03 7.18197378e-01 3.12874844e+03 -7.58400000e-04 -1.65360702e-12 7.09286869e-02 5.55495127e-02 9.19065458e-02 6.10954796e-02 2.32239709e-03 7.18197378e-01 3.12874844e+03 -7.58500000e-04 -1.65360702e-12 7.09286869e-02 5.55495126e-02 9.19065459e-02 6.10954797e-02 2.32239708e-03 7.18197378e-01 3.12874844e+03 -7.58600000e-04 -1.65360702e-12 7.09286868e-02 5.55495125e-02 9.19065460e-02 6.10954798e-02 2.32239707e-03 7.18197378e-01 3.12874844e+03 -7.58700000e-04 -1.65360702e-12 7.09286868e-02 5.55495124e-02 9.19065460e-02 6.10954799e-02 2.32239706e-03 7.18197378e-01 3.12874848e+03 -7.58800000e-04 -1.65360702e-12 7.09286867e-02 5.55495124e-02 9.19065461e-02 6.10954800e-02 2.32239705e-03 7.18197378e-01 3.12874848e+03 -7.58900000e-04 -1.65360702e-12 7.09286867e-02 5.55495123e-02 9.19065461e-02 6.10954801e-02 2.32239704e-03 7.18197378e-01 3.12874848e+03 -7.59000000e-04 -1.65360702e-12 7.09286866e-02 5.55495122e-02 9.19065462e-02 6.10954801e-02 2.32239703e-03 7.18197378e-01 3.12874848e+03 -7.59100000e-04 -1.65360702e-12 7.09286866e-02 5.55495121e-02 9.19065462e-02 6.10954802e-02 2.32239702e-03 7.18197378e-01 3.12874848e+03 -7.59200000e-04 -1.65360702e-12 7.09286865e-02 5.55495120e-02 9.19065463e-02 6.10954803e-02 2.32239701e-03 7.18197378e-01 3.12874848e+03 -7.59300000e-04 -1.65360702e-12 7.09286865e-02 5.55495119e-02 9.19065463e-02 6.10954804e-02 2.32239700e-03 7.18197378e-01 3.12874848e+03 -7.59400000e-04 -1.65360702e-12 7.09286864e-02 5.55495118e-02 9.19065464e-02 6.10954805e-02 2.32239699e-03 7.18197378e-01 3.12874848e+03 -7.59500000e-04 -1.65360702e-12 7.09286864e-02 5.55495118e-02 9.19065464e-02 6.10954806e-02 2.32239698e-03 7.18197378e-01 3.12874848e+03 -7.59600000e-04 -1.65360702e-12 7.09286863e-02 5.55495117e-02 9.19065465e-02 6.10954807e-02 2.32239697e-03 7.18197378e-01 3.12874848e+03 -7.59700000e-04 -1.65360702e-12 7.09286863e-02 5.55495116e-02 9.19065466e-02 6.10954808e-02 2.32239696e-03 7.18197378e-01 3.12874848e+03 -7.59800000e-04 -1.65360702e-12 7.09286863e-02 5.55495115e-02 9.19065466e-02 6.10954808e-02 2.32239695e-03 7.18197378e-01 3.12874848e+03 -7.59900000e-04 -1.65360702e-12 7.09286862e-02 5.55495114e-02 9.19065467e-02 6.10954809e-02 2.32239694e-03 7.18197378e-01 3.12874848e+03 -7.60000000e-04 -1.65360702e-12 7.09286862e-02 5.55495113e-02 9.19065467e-02 6.10954810e-02 2.32239693e-03 7.18197378e-01 3.12874848e+03 -7.60100000e-04 -1.65360702e-12 7.09286861e-02 5.55495112e-02 9.19065468e-02 6.10954811e-02 2.32239692e-03 7.18197378e-01 3.12874848e+03 -7.60200000e-04 -1.65360702e-12 7.09286861e-02 5.55495112e-02 9.19065468e-02 6.10954812e-02 2.32239691e-03 7.18197378e-01 3.12874848e+03 -7.60300000e-04 -1.65360702e-12 7.09286860e-02 5.55495111e-02 9.19065469e-02 6.10954813e-02 2.32239690e-03 7.18197378e-01 3.12874848e+03 -7.60400000e-04 -1.65360702e-12 7.09286860e-02 5.55495110e-02 9.19065469e-02 6.10954814e-02 2.32239689e-03 7.18197378e-01 3.12874848e+03 -7.60500000e-04 -1.65360702e-12 7.09286859e-02 5.55495109e-02 9.19065470e-02 6.10954814e-02 2.32239688e-03 7.18197378e-01 3.12874848e+03 -7.60600000e-04 -1.65360702e-12 7.09286859e-02 5.55495108e-02 9.19065470e-02 6.10954815e-02 2.32239687e-03 7.18197378e-01 3.12874848e+03 -7.60700000e-04 -1.65360702e-12 7.09286858e-02 5.55495107e-02 9.19065471e-02 6.10954816e-02 2.32239686e-03 7.18197378e-01 3.12874848e+03 -7.60800000e-04 -1.65360702e-12 7.09286858e-02 5.55495107e-02 9.19065471e-02 6.10954817e-02 2.32239685e-03 7.18197378e-01 3.12874848e+03 -7.60900000e-04 -1.65360702e-12 7.09286857e-02 5.55495106e-02 9.19065472e-02 6.10954818e-02 2.32239684e-03 7.18197378e-01 3.12874848e+03 -7.61000000e-04 -1.65360702e-12 7.09286857e-02 5.55495105e-02 9.19065472e-02 6.10954819e-02 2.32239683e-03 7.18197378e-01 3.12874848e+03 -7.61100000e-04 -1.65360702e-12 7.09286857e-02 5.55495104e-02 9.19065473e-02 6.10954819e-02 2.32239682e-03 7.18197378e-01 3.12874848e+03 -7.61200000e-04 -1.65360702e-12 7.09286856e-02 5.55495103e-02 9.19065473e-02 6.10954820e-02 2.32239681e-03 7.18197378e-01 3.12874848e+03 -7.61300000e-04 -1.65360702e-12 7.09286856e-02 5.55495103e-02 9.19065474e-02 6.10954821e-02 2.32239681e-03 7.18197378e-01 3.12874848e+03 -7.61400000e-04 -1.65360702e-12 7.09286855e-02 5.55495102e-02 9.19065475e-02 6.10954822e-02 2.32239680e-03 7.18197378e-01 3.12874848e+03 -7.61500000e-04 -1.65360702e-12 7.09286855e-02 5.55495101e-02 9.19065475e-02 6.10954823e-02 2.32239679e-03 7.18197378e-01 3.12874848e+03 -7.61600000e-04 -1.65360702e-12 7.09286854e-02 5.55495100e-02 9.19065476e-02 6.10954824e-02 2.32239678e-03 7.18197378e-01 3.12874848e+03 -7.61700000e-04 -1.65360702e-12 7.09286854e-02 5.55495099e-02 9.19065476e-02 6.10954824e-02 2.32239677e-03 7.18197378e-01 3.12874848e+03 -7.61800000e-04 -1.65360702e-12 7.09286853e-02 5.55495099e-02 9.19065477e-02 6.10954825e-02 2.32239676e-03 7.18197378e-01 3.12874848e+03 -7.61900000e-04 -1.65360702e-12 7.09286853e-02 5.55495098e-02 9.19065477e-02 6.10954826e-02 2.32239675e-03 7.18197378e-01 3.12874848e+03 -7.62000000e-04 -1.65360702e-12 7.09286853e-02 5.55495097e-02 9.19065478e-02 6.10954827e-02 2.32239674e-03 7.18197378e-01 3.12874848e+03 -7.62100000e-04 -1.65360702e-12 7.09286852e-02 5.55495096e-02 9.19065478e-02 6.10954828e-02 2.32239673e-03 7.18197378e-01 3.12874848e+03 -7.62200000e-04 -1.65360702e-12 7.09286852e-02 5.55495095e-02 9.19065479e-02 6.10954829e-02 2.32239672e-03 7.18197378e-01 3.12874848e+03 -7.62300000e-04 -1.65360702e-12 7.09286851e-02 5.55495095e-02 9.19065479e-02 6.10954829e-02 2.32239671e-03 7.18197378e-01 3.12874848e+03 -7.62400000e-04 -1.65360702e-12 7.09286851e-02 5.55495094e-02 9.19065480e-02 6.10954830e-02 2.32239670e-03 7.18197378e-01 3.12874848e+03 -7.62500000e-04 -1.65360702e-12 7.09286850e-02 5.55495093e-02 9.19065480e-02 6.10954831e-02 2.32239670e-03 7.18197378e-01 3.12874848e+03 -7.62600000e-04 -1.65360702e-12 7.09286850e-02 5.55495092e-02 9.19065481e-02 6.10954832e-02 2.32239669e-03 7.18197378e-01 3.12874848e+03 -7.62700000e-04 -1.65360702e-12 7.09286850e-02 5.55495091e-02 9.19065481e-02 6.10954833e-02 2.32239668e-03 7.18197378e-01 3.12874848e+03 -7.62800000e-04 -1.65360702e-12 7.09286849e-02 5.55495091e-02 9.19065482e-02 6.10954833e-02 2.32239667e-03 7.18197378e-01 3.12874848e+03 -7.62900000e-04 -1.65360702e-12 7.09286849e-02 5.55495090e-02 9.19065482e-02 6.10954834e-02 2.32239666e-03 7.18197378e-01 3.12874848e+03 -7.63000000e-04 -1.65360702e-12 7.09286848e-02 5.55495089e-02 9.19065483e-02 6.10954835e-02 2.32239665e-03 7.18197378e-01 3.12874848e+03 -7.63100000e-04 -1.65360702e-12 7.09286848e-02 5.55495088e-02 9.19065483e-02 6.10954836e-02 2.32239664e-03 7.18197378e-01 3.12874848e+03 -7.63200000e-04 -1.65360702e-12 7.09286847e-02 5.55495088e-02 9.19065484e-02 6.10954837e-02 2.32239663e-03 7.18197378e-01 3.12874848e+03 -7.63300000e-04 -1.65360702e-12 7.09286847e-02 5.55495087e-02 9.19065484e-02 6.10954837e-02 2.32239662e-03 7.18197378e-01 3.12874848e+03 -7.63400000e-04 -1.65360702e-12 7.09286847e-02 5.55495086e-02 9.19065485e-02 6.10954838e-02 2.32239661e-03 7.18197378e-01 3.12874848e+03 -7.63500000e-04 -1.65360702e-12 7.09286846e-02 5.55495085e-02 9.19065485e-02 6.10954839e-02 2.32239661e-03 7.18197378e-01 3.12874848e+03 -7.63600000e-04 -1.65360702e-12 7.09286846e-02 5.55495084e-02 9.19065486e-02 6.10954840e-02 2.32239660e-03 7.18197378e-01 3.12874848e+03 -7.63700000e-04 -1.65360702e-12 7.09286845e-02 5.55495084e-02 9.19065486e-02 6.10954841e-02 2.32239659e-03 7.18197378e-01 3.12874848e+03 -7.63800000e-04 -1.65360702e-12 7.09286845e-02 5.55495083e-02 9.19065486e-02 6.10954841e-02 2.32239658e-03 7.18197378e-01 3.12874848e+03 -7.63900000e-04 -1.65360702e-12 7.09286844e-02 5.55495082e-02 9.19065487e-02 6.10954842e-02 2.32239657e-03 7.18197378e-01 3.12874848e+03 -7.64000000e-04 -1.65360702e-12 7.09286844e-02 5.55495081e-02 9.19065487e-02 6.10954843e-02 2.32239656e-03 7.18197378e-01 3.12874848e+03 -7.64100000e-04 -1.65360702e-12 7.09286844e-02 5.55495081e-02 9.19065488e-02 6.10954844e-02 2.32239655e-03 7.18197378e-01 3.12874848e+03 -7.64200000e-04 -1.65360702e-12 7.09286843e-02 5.55495080e-02 9.19065488e-02 6.10954844e-02 2.32239654e-03 7.18197378e-01 3.12874848e+03 -7.64300000e-04 -1.65360702e-12 7.09286843e-02 5.55495079e-02 9.19065489e-02 6.10954845e-02 2.32239654e-03 7.18197378e-01 3.12874848e+03 -7.64400000e-04 -1.65360702e-12 7.09286842e-02 5.55495078e-02 9.19065489e-02 6.10954846e-02 2.32239653e-03 7.18197378e-01 3.12874848e+03 -7.64500000e-04 -1.65360702e-12 7.09286842e-02 5.55495078e-02 9.19065490e-02 6.10954847e-02 2.32239652e-03 7.18197378e-01 3.12874848e+03 -7.64600000e-04 -1.65360702e-12 7.09286842e-02 5.55495077e-02 9.19065490e-02 6.10954848e-02 2.32239651e-03 7.18197378e-01 3.12874848e+03 -7.64700000e-04 -1.65360702e-12 7.09286841e-02 5.55495076e-02 9.19065491e-02 6.10954848e-02 2.32239650e-03 7.18197378e-01 3.12874848e+03 -7.64800000e-04 -1.65360702e-12 7.09286841e-02 5.55495075e-02 9.19065491e-02 6.10954849e-02 2.32239649e-03 7.18197378e-01 3.12874848e+03 -7.64900000e-04 -1.65360702e-12 7.09286840e-02 5.55495075e-02 9.19065492e-02 6.10954850e-02 2.32239648e-03 7.18197378e-01 3.12874848e+03 -7.65000000e-04 -1.65360702e-12 7.09286840e-02 5.55495074e-02 9.19065492e-02 6.10954851e-02 2.32239648e-03 7.18197378e-01 3.12874848e+03 -7.65100000e-04 -1.65360702e-12 7.09286840e-02 5.55495073e-02 9.19065493e-02 6.10954851e-02 2.32239647e-03 7.18197378e-01 3.12874848e+03 -7.65200000e-04 -1.65360702e-12 7.09286839e-02 5.55495072e-02 9.19065493e-02 6.10954852e-02 2.32239646e-03 7.18197378e-01 3.12874848e+03 -7.65300000e-04 -1.65360702e-12 7.09286839e-02 5.55495072e-02 9.19065494e-02 6.10954853e-02 2.32239645e-03 7.18197378e-01 3.12874848e+03 -7.65400000e-04 -1.65360702e-12 7.09286838e-02 5.55495071e-02 9.19065494e-02 6.10954854e-02 2.32239644e-03 7.18197378e-01 3.12874848e+03 -7.65500000e-04 -1.65360702e-12 7.09286838e-02 5.55495070e-02 9.19065495e-02 6.10954854e-02 2.32239643e-03 7.18197378e-01 3.12874848e+03 -7.65600000e-04 -1.65360702e-12 7.09286838e-02 5.55495070e-02 9.19065495e-02 6.10954855e-02 2.32239643e-03 7.18197378e-01 3.12874848e+03 -7.65700000e-04 -1.65360702e-12 7.09286837e-02 5.55495069e-02 9.19065495e-02 6.10954856e-02 2.32239642e-03 7.18197378e-01 3.12874848e+03 -7.65800000e-04 -1.65360702e-12 7.09286837e-02 5.55495068e-02 9.19065496e-02 6.10954857e-02 2.32239641e-03 7.18197378e-01 3.12874848e+03 -7.65900000e-04 -1.65360702e-12 7.09286836e-02 5.55495067e-02 9.19065496e-02 6.10954857e-02 2.32239640e-03 7.18197378e-01 3.12874848e+03 -7.66000000e-04 -1.65360702e-12 7.09286836e-02 5.55495067e-02 9.19065497e-02 6.10954858e-02 2.32239639e-03 7.18197378e-01 3.12874848e+03 -7.66100000e-04 -1.65360702e-12 7.09286836e-02 5.55495066e-02 9.19065497e-02 6.10954859e-02 2.32239638e-03 7.18197378e-01 3.12874848e+03 -7.66200000e-04 -1.65360702e-12 7.09286835e-02 5.55495065e-02 9.19065498e-02 6.10954860e-02 2.32239638e-03 7.18197378e-01 3.12874848e+03 -7.66300000e-04 -1.65360702e-12 7.09286835e-02 5.55495065e-02 9.19065498e-02 6.10954860e-02 2.32239637e-03 7.18197378e-01 3.12874848e+03 -7.66400000e-04 -1.65360702e-12 7.09286834e-02 5.55495064e-02 9.19065499e-02 6.10954861e-02 2.32239636e-03 7.18197378e-01 3.12874848e+03 -7.66500000e-04 -1.65360702e-12 7.09286834e-02 5.55495063e-02 9.19065499e-02 6.10954862e-02 2.32239635e-03 7.18197378e-01 3.12874848e+03 -7.66600000e-04 -1.65360702e-12 7.09286834e-02 5.55495062e-02 9.19065500e-02 6.10954862e-02 2.32239634e-03 7.18197378e-01 3.12874848e+03 -7.66700000e-04 -1.65360702e-12 7.09286833e-02 5.55495062e-02 9.19065500e-02 6.10954863e-02 2.32239634e-03 7.18197378e-01 3.12874848e+03 -7.66800000e-04 -1.65360702e-12 7.09286833e-02 5.55495061e-02 9.19065500e-02 6.10954864e-02 2.32239633e-03 7.18197378e-01 3.12874851e+03 -7.66900000e-04 -1.65360702e-12 7.09286832e-02 5.55495060e-02 9.19065501e-02 6.10954865e-02 2.32239632e-03 7.18197378e-01 3.12874851e+03 -7.67000000e-04 -1.65360702e-12 7.09286832e-02 5.55495060e-02 9.19065501e-02 6.10954865e-02 2.32239631e-03 7.18197378e-01 3.12874851e+03 -7.67100000e-04 -1.65360702e-12 7.09286832e-02 5.55495059e-02 9.19065502e-02 6.10954866e-02 2.32239630e-03 7.18197378e-01 3.12874851e+03 -7.67200000e-04 -1.65360702e-12 7.09286831e-02 5.55495058e-02 9.19065502e-02 6.10954867e-02 2.32239629e-03 7.18197378e-01 3.12874851e+03 -7.67300000e-04 -1.65360702e-12 7.09286831e-02 5.55495057e-02 9.19065503e-02 6.10954868e-02 2.32239629e-03 7.18197378e-01 3.12874851e+03 -7.67400000e-04 -1.65360702e-12 7.09286831e-02 5.55495057e-02 9.19065503e-02 6.10954868e-02 2.32239628e-03 7.18197378e-01 3.12874851e+03 -7.67500000e-04 -1.65360702e-12 7.09286830e-02 5.55495056e-02 9.19065504e-02 6.10954869e-02 2.32239627e-03 7.18197378e-01 3.12874851e+03 -7.67600000e-04 -1.65360702e-12 7.09286830e-02 5.55495055e-02 9.19065504e-02 6.10954870e-02 2.32239626e-03 7.18197378e-01 3.12874851e+03 -7.67700000e-04 -1.65360702e-12 7.09286829e-02 5.55495055e-02 9.19065504e-02 6.10954870e-02 2.32239625e-03 7.18197378e-01 3.12874851e+03 -7.67800000e-04 -1.65360702e-12 7.09286829e-02 5.55495054e-02 9.19065505e-02 6.10954871e-02 2.32239625e-03 7.18197378e-01 3.12874851e+03 -7.67900000e-04 -1.65360702e-12 7.09286829e-02 5.55495053e-02 9.19065505e-02 6.10954872e-02 2.32239624e-03 7.18197378e-01 3.12874851e+03 -7.68000000e-04 -1.65360702e-12 7.09286828e-02 5.55495053e-02 9.19065506e-02 6.10954872e-02 2.32239623e-03 7.18197378e-01 3.12874851e+03 -7.68100000e-04 -1.65360702e-12 7.09286828e-02 5.55495052e-02 9.19065506e-02 6.10954873e-02 2.32239622e-03 7.18197378e-01 3.12874851e+03 -7.68200000e-04 -1.65360702e-12 7.09286828e-02 5.55495051e-02 9.19065507e-02 6.10954874e-02 2.32239622e-03 7.18197378e-01 3.12874851e+03 -7.68300000e-04 -1.65360702e-12 7.09286827e-02 5.55495051e-02 9.19065507e-02 6.10954875e-02 2.32239621e-03 7.18197378e-01 3.12874851e+03 -7.68400000e-04 -1.65360702e-12 7.09286827e-02 5.55495050e-02 9.19065507e-02 6.10954875e-02 2.32239620e-03 7.18197378e-01 3.12874851e+03 -7.68500000e-04 -1.65360702e-12 7.09286826e-02 5.55495049e-02 9.19065508e-02 6.10954876e-02 2.32239619e-03 7.18197378e-01 3.12874851e+03 -7.68600000e-04 -1.65360702e-12 7.09286826e-02 5.55495049e-02 9.19065508e-02 6.10954877e-02 2.32239618e-03 7.18197378e-01 3.12874851e+03 -7.68700000e-04 -1.65360702e-12 7.09286826e-02 5.55495048e-02 9.19065509e-02 6.10954877e-02 2.32239618e-03 7.18197378e-01 3.12874851e+03 -7.68800000e-04 -1.65360702e-12 7.09286825e-02 5.55495047e-02 9.19065509e-02 6.10954878e-02 2.32239617e-03 7.18197378e-01 3.12874851e+03 -7.68900000e-04 -1.65360702e-12 7.09286825e-02 5.55495047e-02 9.19065510e-02 6.10954879e-02 2.32239616e-03 7.18197378e-01 3.12874851e+03 -7.69000000e-04 -1.65360702e-12 7.09286825e-02 5.55495046e-02 9.19065510e-02 6.10954879e-02 2.32239615e-03 7.18197378e-01 3.12874851e+03 -7.69100000e-04 -1.65360702e-12 7.09286824e-02 5.55495045e-02 9.19065510e-02 6.10954880e-02 2.32239615e-03 7.18197378e-01 3.12874851e+03 -7.69200000e-04 -1.65360702e-12 7.09286824e-02 5.55495045e-02 9.19065511e-02 6.10954881e-02 2.32239614e-03 7.18197378e-01 3.12874851e+03 -7.69300000e-04 -1.65360702e-12 7.09286823e-02 5.55495044e-02 9.19065511e-02 6.10954881e-02 2.32239613e-03 7.18197378e-01 3.12874851e+03 -7.69400000e-04 -1.65360702e-12 7.09286823e-02 5.55495043e-02 9.19065512e-02 6.10954882e-02 2.32239612e-03 7.18197378e-01 3.12874851e+03 -7.69500000e-04 -1.65360702e-12 7.09286823e-02 5.55495043e-02 9.19065512e-02 6.10954883e-02 2.32239612e-03 7.18197378e-01 3.12874851e+03 -7.69600000e-04 -1.65360702e-12 7.09286822e-02 5.55495042e-02 9.19065513e-02 6.10954883e-02 2.32239611e-03 7.18197378e-01 3.12874851e+03 -7.69700000e-04 -1.65360702e-12 7.09286822e-02 5.55495041e-02 9.19065513e-02 6.10954884e-02 2.32239610e-03 7.18197378e-01 3.12874851e+03 -7.69800000e-04 -1.65360702e-12 7.09286822e-02 5.55495041e-02 9.19065513e-02 6.10954885e-02 2.32239609e-03 7.18197378e-01 3.12874851e+03 -7.69900000e-04 -1.65360702e-12 7.09286821e-02 5.55495040e-02 9.19065514e-02 6.10954885e-02 2.32239609e-03 7.18197378e-01 3.12874851e+03 -7.70000000e-04 -1.65360702e-12 7.09286821e-02 5.55495039e-02 9.19065514e-02 6.10954886e-02 2.32239608e-03 7.18197378e-01 3.12874851e+03 -7.70100000e-04 -1.65360702e-12 7.09286821e-02 5.55495039e-02 9.19065515e-02 6.10954887e-02 2.32239607e-03 7.18197378e-01 3.12874851e+03 -7.70200000e-04 -1.65360702e-12 7.09286820e-02 5.55495038e-02 9.19065515e-02 6.10954887e-02 2.32239606e-03 7.18197378e-01 3.12874851e+03 -7.70300000e-04 -1.65360702e-12 7.09286820e-02 5.55495037e-02 9.19065515e-02 6.10954888e-02 2.32239606e-03 7.18197378e-01 3.12874851e+03 -7.70400000e-04 -1.65360702e-12 7.09286820e-02 5.55495037e-02 9.19065516e-02 6.10954889e-02 2.32239605e-03 7.18197378e-01 3.12874851e+03 -7.70500000e-04 -1.65360702e-12 7.09286819e-02 5.55495036e-02 9.19065516e-02 6.10954889e-02 2.32239604e-03 7.18197378e-01 3.12874851e+03 -7.70600000e-04 -1.65360702e-12 7.09286819e-02 5.55495035e-02 9.19065517e-02 6.10954890e-02 2.32239603e-03 7.18197378e-01 3.12874851e+03 -7.70700000e-04 -1.65360702e-12 7.09286818e-02 5.55495035e-02 9.19065517e-02 6.10954891e-02 2.32239603e-03 7.18197378e-01 3.12874851e+03 -7.70800000e-04 -1.65360702e-12 7.09286818e-02 5.55495034e-02 9.19065518e-02 6.10954891e-02 2.32239602e-03 7.18197378e-01 3.12874851e+03 -7.70900000e-04 -1.65360702e-12 7.09286818e-02 5.55495034e-02 9.19065518e-02 6.10954892e-02 2.32239601e-03 7.18197378e-01 3.12874851e+03 -7.71000000e-04 -1.65360702e-12 7.09286817e-02 5.55495033e-02 9.19065518e-02 6.10954893e-02 2.32239600e-03 7.18197378e-01 3.12874851e+03 -7.71100000e-04 -1.65360702e-12 7.09286817e-02 5.55495032e-02 9.19065519e-02 6.10954893e-02 2.32239600e-03 7.18197378e-01 3.12874851e+03 -7.71200000e-04 -1.65360702e-12 7.09286817e-02 5.55495032e-02 9.19065519e-02 6.10954894e-02 2.32239599e-03 7.18197378e-01 3.12874851e+03 -7.71300000e-04 -1.65360702e-12 7.09286816e-02 5.55495031e-02 9.19065520e-02 6.10954895e-02 2.32239598e-03 7.18197378e-01 3.12874851e+03 -7.71400000e-04 -1.65360702e-12 7.09286816e-02 5.55495030e-02 9.19065520e-02 6.10954895e-02 2.32239598e-03 7.18197378e-01 3.12874851e+03 -7.71500000e-04 -1.65360702e-12 7.09286816e-02 5.55495030e-02 9.19065520e-02 6.10954896e-02 2.32239597e-03 7.18197378e-01 3.12874851e+03 -7.71600000e-04 -1.65360702e-12 7.09286815e-02 5.55495029e-02 9.19065521e-02 6.10954897e-02 2.32239596e-03 7.18197378e-01 3.12874851e+03 -7.71700000e-04 -1.65360702e-12 7.09286815e-02 5.55495029e-02 9.19065521e-02 6.10954897e-02 2.32239595e-03 7.18197378e-01 3.12874851e+03 -7.71800000e-04 -1.65360702e-12 7.09286815e-02 5.55495028e-02 9.19065521e-02 6.10954898e-02 2.32239595e-03 7.18197378e-01 3.12874851e+03 -7.71900000e-04 -1.65360702e-12 7.09286814e-02 5.55495027e-02 9.19065522e-02 6.10954899e-02 2.32239594e-03 7.18197378e-01 3.12874851e+03 -7.72000000e-04 -1.65360702e-12 7.09286814e-02 5.55495027e-02 9.19065522e-02 6.10954899e-02 2.32239593e-03 7.18197378e-01 3.12874851e+03 -7.72100000e-04 -1.65360702e-12 7.09286814e-02 5.55495026e-02 9.19065523e-02 6.10954900e-02 2.32239593e-03 7.18197378e-01 3.12874851e+03 -7.72200000e-04 -1.65360702e-12 7.09286813e-02 5.55495025e-02 9.19065523e-02 6.10954900e-02 2.32239592e-03 7.18197378e-01 3.12874851e+03 -7.72300000e-04 -1.65360702e-12 7.09286813e-02 5.55495025e-02 9.19065523e-02 6.10954901e-02 2.32239591e-03 7.18197378e-01 3.12874851e+03 -7.72400000e-04 -1.65360702e-12 7.09286813e-02 5.55495024e-02 9.19065524e-02 6.10954902e-02 2.32239590e-03 7.18197378e-01 3.12874851e+03 -7.72500000e-04 -1.65360702e-12 7.09286812e-02 5.55495024e-02 9.19065524e-02 6.10954902e-02 2.32239590e-03 7.18197378e-01 3.12874851e+03 -7.72600000e-04 -1.65360702e-12 7.09286812e-02 5.55495023e-02 9.19065525e-02 6.10954903e-02 2.32239589e-03 7.18197378e-01 3.12874851e+03 -7.72700000e-04 -1.65360702e-12 7.09286812e-02 5.55495022e-02 9.19065525e-02 6.10954904e-02 2.32239588e-03 7.18197378e-01 3.12874851e+03 -7.72800000e-04 -1.65360702e-12 7.09286811e-02 5.55495022e-02 9.19065525e-02 6.10954904e-02 2.32239588e-03 7.18197378e-01 3.12874851e+03 -7.72900000e-04 -1.65360702e-12 7.09286811e-02 5.55495021e-02 9.19065526e-02 6.10954905e-02 2.32239587e-03 7.18197378e-01 3.12874851e+03 -7.73000000e-04 -1.65360702e-12 7.09286811e-02 5.55495021e-02 9.19065526e-02 6.10954905e-02 2.32239586e-03 7.18197378e-01 3.12874851e+03 -7.73100000e-04 -1.65360702e-12 7.09286810e-02 5.55495020e-02 9.19065527e-02 6.10954906e-02 2.32239586e-03 7.18197378e-01 3.12874851e+03 -7.73200000e-04 -1.65360702e-12 7.09286810e-02 5.55495019e-02 9.19065527e-02 6.10954907e-02 2.32239585e-03 7.18197378e-01 3.12874851e+03 -7.73300000e-04 -1.65360702e-12 7.09286810e-02 5.55495019e-02 9.19065527e-02 6.10954907e-02 2.32239584e-03 7.18197378e-01 3.12874851e+03 -7.73400000e-04 -1.65360702e-12 7.09286809e-02 5.55495018e-02 9.19065528e-02 6.10954908e-02 2.32239584e-03 7.18197378e-01 3.12874851e+03 -7.73500000e-04 -1.65360702e-12 7.09286809e-02 5.55495018e-02 9.19065528e-02 6.10954908e-02 2.32239583e-03 7.18197378e-01 3.12874851e+03 -7.73600000e-04 -1.65360702e-12 7.09286809e-02 5.55495017e-02 9.19065528e-02 6.10954909e-02 2.32239582e-03 7.18197378e-01 3.12874851e+03 -7.73700000e-04 -1.65360702e-12 7.09286808e-02 5.55495016e-02 9.19065529e-02 6.10954910e-02 2.32239581e-03 7.18197378e-01 3.12874851e+03 -7.73800000e-04 -1.65360702e-12 7.09286808e-02 5.55495016e-02 9.19065529e-02 6.10954910e-02 2.32239581e-03 7.18197378e-01 3.12874851e+03 -7.73900000e-04 -1.65360702e-12 7.09286808e-02 5.55495015e-02 9.19065530e-02 6.10954911e-02 2.32239580e-03 7.18197378e-01 3.12874851e+03 -7.74000000e-04 -1.65360702e-12 7.09286807e-02 5.55495015e-02 9.19065530e-02 6.10954912e-02 2.32239579e-03 7.18197378e-01 3.12874851e+03 -7.74100000e-04 -1.65360702e-12 7.09286807e-02 5.55495014e-02 9.19065530e-02 6.10954912e-02 2.32239579e-03 7.18197378e-01 3.12874851e+03 -7.74200000e-04 -1.65360702e-12 7.09286807e-02 5.55495014e-02 9.19065531e-02 6.10954913e-02 2.32239578e-03 7.18197378e-01 3.12874851e+03 -7.74300000e-04 -1.65360702e-12 7.09286806e-02 5.55495013e-02 9.19065531e-02 6.10954913e-02 2.32239577e-03 7.18197378e-01 3.12874851e+03 -7.74400000e-04 -1.65360702e-12 7.09286806e-02 5.55495012e-02 9.19065531e-02 6.10954914e-02 2.32239577e-03 7.18197378e-01 3.12874851e+03 -7.74500000e-04 -1.65360702e-12 7.09286806e-02 5.55495012e-02 9.19065532e-02 6.10954914e-02 2.32239576e-03 7.18197378e-01 3.12874851e+03 -7.74600000e-04 -1.65360702e-12 7.09286806e-02 5.55495011e-02 9.19065532e-02 6.10954915e-02 2.32239575e-03 7.18197378e-01 3.12874851e+03 -7.74700000e-04 -1.65360702e-12 7.09286805e-02 5.55495011e-02 9.19065533e-02 6.10954916e-02 2.32239575e-03 7.18197378e-01 3.12874851e+03 -7.74800000e-04 -1.65360702e-12 7.09286805e-02 5.55495010e-02 9.19065533e-02 6.10954916e-02 2.32239574e-03 7.18197378e-01 3.12874851e+03 -7.74900000e-04 -1.65360702e-12 7.09286805e-02 5.55495009e-02 9.19065533e-02 6.10954917e-02 2.32239573e-03 7.18197378e-01 3.12874854e+03 -7.75000000e-04 -1.65360702e-12 7.09286804e-02 5.55495009e-02 9.19065534e-02 6.10954917e-02 2.32239573e-03 7.18197378e-01 3.12874854e+03 -7.75100000e-04 -1.65360702e-12 7.09286804e-02 5.55495008e-02 9.19065534e-02 6.10954918e-02 2.32239572e-03 7.18197378e-01 3.12874854e+03 -7.75200000e-04 -1.65360702e-12 7.09286804e-02 5.55495008e-02 9.19065534e-02 6.10954919e-02 2.32239571e-03 7.18197378e-01 3.12874854e+03 -7.75300000e-04 -1.65360702e-12 7.09286803e-02 5.55495007e-02 9.19065535e-02 6.10954919e-02 2.32239571e-03 7.18197378e-01 3.12874854e+03 -7.75400000e-04 -1.65360702e-12 7.09286803e-02 5.55495007e-02 9.19065535e-02 6.10954920e-02 2.32239570e-03 7.18197378e-01 3.12874854e+03 -7.75500000e-04 -1.65360702e-12 7.09286803e-02 5.55495006e-02 9.19065535e-02 6.10954920e-02 2.32239570e-03 7.18197378e-01 3.12874854e+03 -7.75600000e-04 -1.65360702e-12 7.09286802e-02 5.55495006e-02 9.19065536e-02 6.10954921e-02 2.32239569e-03 7.18197378e-01 3.12874854e+03 -7.75700000e-04 -1.65360702e-12 7.09286802e-02 5.55495005e-02 9.19065536e-02 6.10954922e-02 2.32239568e-03 7.18197378e-01 3.12874854e+03 -7.75800000e-04 -1.65360702e-12 7.09286802e-02 5.55495004e-02 9.19065536e-02 6.10954922e-02 2.32239568e-03 7.18197378e-01 3.12874854e+03 -7.75900000e-04 -1.65360702e-12 7.09286801e-02 5.55495004e-02 9.19065537e-02 6.10954923e-02 2.32239567e-03 7.18197378e-01 3.12874854e+03 -7.76000000e-04 -1.65360702e-12 7.09286801e-02 5.55495003e-02 9.19065537e-02 6.10954923e-02 2.32239566e-03 7.18197378e-01 3.12874854e+03 -7.76100000e-04 -1.65360702e-12 7.09286801e-02 5.55495003e-02 9.19065538e-02 6.10954924e-02 2.32239566e-03 7.18197378e-01 3.12874854e+03 -7.76200000e-04 -1.65360702e-12 7.09286801e-02 5.55495002e-02 9.19065538e-02 6.10954924e-02 2.32239565e-03 7.18197378e-01 3.12874854e+03 -7.76300000e-04 -1.65360702e-12 7.09286800e-02 5.55495002e-02 9.19065538e-02 6.10954925e-02 2.32239564e-03 7.18197378e-01 3.12874854e+03 -7.76400000e-04 -1.65360702e-12 7.09286800e-02 5.55495001e-02 9.19065539e-02 6.10954926e-02 2.32239564e-03 7.18197378e-01 3.12874854e+03 -7.76500000e-04 -1.65360702e-12 7.09286800e-02 5.55495001e-02 9.19065539e-02 6.10954926e-02 2.32239563e-03 7.18197378e-01 3.12874854e+03 -7.76600000e-04 -1.65360702e-12 7.09286799e-02 5.55495000e-02 9.19065539e-02 6.10954927e-02 2.32239563e-03 7.18197378e-01 3.12874854e+03 -7.76700000e-04 -1.65360702e-12 7.09286799e-02 5.55494999e-02 9.19065540e-02 6.10954927e-02 2.32239562e-03 7.18197378e-01 3.12874854e+03 -7.76800000e-04 -1.65360702e-12 7.09286799e-02 5.55494999e-02 9.19065540e-02 6.10954928e-02 2.32239561e-03 7.18197378e-01 3.12874854e+03 -7.76900000e-04 -1.65360702e-12 7.09286798e-02 5.55494998e-02 9.19065540e-02 6.10954928e-02 2.32239561e-03 7.18197378e-01 3.12874854e+03 -7.77000000e-04 -1.65360702e-12 7.09286798e-02 5.55494998e-02 9.19065541e-02 6.10954929e-02 2.32239560e-03 7.18197378e-01 3.12874854e+03 -7.77100000e-04 -1.65360702e-12 7.09286798e-02 5.55494997e-02 9.19065541e-02 6.10954929e-02 2.32239559e-03 7.18197378e-01 3.12874854e+03 -7.77200000e-04 -1.65360702e-12 7.09286798e-02 5.55494997e-02 9.19065541e-02 6.10954930e-02 2.32239559e-03 7.18197378e-01 3.12874854e+03 -7.77300000e-04 -1.65360702e-12 7.09286797e-02 5.55494996e-02 9.19065542e-02 6.10954931e-02 2.32239558e-03 7.18197378e-01 3.12874854e+03 -7.77400000e-04 -1.65360702e-12 7.09286797e-02 5.55494996e-02 9.19065542e-02 6.10954931e-02 2.32239558e-03 7.18197378e-01 3.12874854e+03 -7.77500000e-04 -1.65360702e-12 7.09286797e-02 5.55494995e-02 9.19065542e-02 6.10954932e-02 2.32239557e-03 7.18197378e-01 3.12874854e+03 -7.77600000e-04 -1.65360702e-12 7.09286796e-02 5.55494995e-02 9.19065543e-02 6.10954932e-02 2.32239556e-03 7.18197378e-01 3.12874854e+03 -7.77700000e-04 -1.65360702e-12 7.09286796e-02 5.55494994e-02 9.19065543e-02 6.10954933e-02 2.32239556e-03 7.18197378e-01 3.12874854e+03 -7.77800000e-04 -1.65360702e-12 7.09286796e-02 5.55494993e-02 9.19065543e-02 6.10954933e-02 2.32239555e-03 7.18197378e-01 3.12874854e+03 -7.77900000e-04 -1.65360702e-12 7.09286795e-02 5.55494993e-02 9.19065544e-02 6.10954934e-02 2.32239554e-03 7.18197378e-01 3.12874854e+03 -7.78000000e-04 -1.65360702e-12 7.09286795e-02 5.55494992e-02 9.19065544e-02 6.10954934e-02 2.32239554e-03 7.18197378e-01 3.12874854e+03 -7.78100000e-04 -1.65360702e-12 7.09286795e-02 5.55494992e-02 9.19065544e-02 6.10954935e-02 2.32239553e-03 7.18197378e-01 3.12874854e+03 -7.78200000e-04 -1.65360702e-12 7.09286795e-02 5.55494991e-02 9.19065545e-02 6.10954935e-02 2.32239553e-03 7.18197378e-01 3.12874854e+03 -7.78300000e-04 -1.65360702e-12 7.09286794e-02 5.55494991e-02 9.19065545e-02 6.10954936e-02 2.32239552e-03 7.18197378e-01 3.12874854e+03 -7.78400000e-04 -1.65360702e-12 7.09286794e-02 5.55494990e-02 9.19065545e-02 6.10954937e-02 2.32239551e-03 7.18197378e-01 3.12874854e+03 -7.78500000e-04 -1.65360702e-12 7.09286794e-02 5.55494990e-02 9.19065546e-02 6.10954937e-02 2.32239551e-03 7.18197378e-01 3.12874854e+03 -7.78600000e-04 -1.65360702e-12 7.09286793e-02 5.55494989e-02 9.19065546e-02 6.10954938e-02 2.32239550e-03 7.18197378e-01 3.12874854e+03 -7.78700000e-04 -1.65360702e-12 7.09286793e-02 5.55494989e-02 9.19065546e-02 6.10954938e-02 2.32239550e-03 7.18197378e-01 3.12874854e+03 -7.78800000e-04 -1.65360702e-12 7.09286793e-02 5.55494988e-02 9.19065547e-02 6.10954939e-02 2.32239549e-03 7.18197378e-01 3.12874854e+03 -7.78900000e-04 -1.65360702e-12 7.09286793e-02 5.55494988e-02 9.19065547e-02 6.10954939e-02 2.32239548e-03 7.18197378e-01 3.12874854e+03 -7.79000000e-04 -1.65360702e-12 7.09286792e-02 5.55494987e-02 9.19065547e-02 6.10954940e-02 2.32239548e-03 7.18197378e-01 3.12874854e+03 -7.79100000e-04 -1.65360702e-12 7.09286792e-02 5.55494987e-02 9.19065548e-02 6.10954940e-02 2.32239547e-03 7.18197378e-01 3.12874854e+03 -7.79200000e-04 -1.65360702e-12 7.09286792e-02 5.55494986e-02 9.19065548e-02 6.10954941e-02 2.32239547e-03 7.18197378e-01 3.12874854e+03 -7.79300000e-04 -1.65360702e-12 7.09286791e-02 5.55494986e-02 9.19065548e-02 6.10954941e-02 2.32239546e-03 7.18197378e-01 3.12874854e+03 -7.79400000e-04 -1.65360702e-12 7.09286791e-02 5.55494985e-02 9.19065549e-02 6.10954942e-02 2.32239545e-03 7.18197378e-01 3.12874854e+03 -7.79500000e-04 -1.65360702e-12 7.09286791e-02 5.55494985e-02 9.19065549e-02 6.10954942e-02 2.32239545e-03 7.18197378e-01 3.12874854e+03 -7.79600000e-04 -1.65360702e-12 7.09286791e-02 5.55494984e-02 9.19065549e-02 6.10954943e-02 2.32239544e-03 7.18197378e-01 3.12874854e+03 -7.79700000e-04 -1.65360702e-12 7.09286790e-02 5.55494984e-02 9.19065550e-02 6.10954943e-02 2.32239544e-03 7.18197378e-01 3.12874854e+03 -7.79800000e-04 -1.65360702e-12 7.09286790e-02 5.55494983e-02 9.19065550e-02 6.10954944e-02 2.32239543e-03 7.18197378e-01 3.12874854e+03 -7.79900000e-04 -1.65360702e-12 7.09286790e-02 5.55494983e-02 9.19065550e-02 6.10954944e-02 2.32239543e-03 7.18197378e-01 3.12874854e+03 -7.80000000e-04 -1.65360702e-12 7.09286790e-02 5.55494982e-02 9.19065551e-02 6.10954945e-02 2.32239542e-03 7.18197378e-01 3.12874854e+03 -7.80100000e-04 -1.65360702e-12 7.09286789e-02 5.55494982e-02 9.19065551e-02 6.10954945e-02 2.32239541e-03 7.18197378e-01 3.12874854e+03 -7.80200000e-04 -1.65360702e-12 7.09286789e-02 5.55494981e-02 9.19065551e-02 6.10954946e-02 2.32239541e-03 7.18197378e-01 3.12874854e+03 -7.80300000e-04 -1.65360702e-12 7.09286789e-02 5.55494981e-02 9.19065552e-02 6.10954947e-02 2.32239540e-03 7.18197378e-01 3.12874854e+03 -7.80400000e-04 -1.65360702e-12 7.09286788e-02 5.55494980e-02 9.19065552e-02 6.10954947e-02 2.32239540e-03 7.18197378e-01 3.12874854e+03 -7.80500000e-04 -1.65360702e-12 7.09286788e-02 5.55494980e-02 9.19065552e-02 6.10954948e-02 2.32239539e-03 7.18197378e-01 3.12874854e+03 -7.80600000e-04 -1.65360702e-12 7.09286788e-02 5.55494979e-02 9.19065553e-02 6.10954948e-02 2.32239539e-03 7.18197378e-01 3.12874854e+03 -7.80700000e-04 -1.65360702e-12 7.09286788e-02 5.55494979e-02 9.19065553e-02 6.10954949e-02 2.32239538e-03 7.18197378e-01 3.12874854e+03 -7.80800000e-04 -1.65360702e-12 7.09286787e-02 5.55494978e-02 9.19065553e-02 6.10954949e-02 2.32239537e-03 7.18197378e-01 3.12874854e+03 -7.80900000e-04 -1.65360702e-12 7.09286787e-02 5.55494978e-02 9.19065553e-02 6.10954950e-02 2.32239537e-03 7.18197378e-01 3.12874854e+03 -7.81000000e-04 -1.65360702e-12 7.09286787e-02 5.55494977e-02 9.19065554e-02 6.10954950e-02 2.32239536e-03 7.18197378e-01 3.12874854e+03 -7.81100000e-04 -1.65360702e-12 7.09286787e-02 5.55494977e-02 9.19065554e-02 6.10954951e-02 2.32239536e-03 7.18197378e-01 3.12874854e+03 -7.81200000e-04 -1.65360702e-12 7.09286786e-02 5.55494976e-02 9.19065554e-02 6.10954951e-02 2.32239535e-03 7.18197378e-01 3.12874854e+03 -7.81300000e-04 -1.65360702e-12 7.09286786e-02 5.55494976e-02 9.19065555e-02 6.10954952e-02 2.32239535e-03 7.18197378e-01 3.12874854e+03 -7.81400000e-04 -1.65360702e-12 7.09286786e-02 5.55494975e-02 9.19065555e-02 6.10954952e-02 2.32239534e-03 7.18197378e-01 3.12874854e+03 -7.81500000e-04 -1.65360702e-12 7.09286785e-02 5.55494975e-02 9.19065555e-02 6.10954953e-02 2.32239533e-03 7.18197378e-01 3.12874854e+03 -7.81600000e-04 -1.65360702e-12 7.09286785e-02 5.55494974e-02 9.19065556e-02 6.10954953e-02 2.32239533e-03 7.18197378e-01 3.12874854e+03 -7.81700000e-04 -1.65360702e-12 7.09286785e-02 5.55494974e-02 9.19065556e-02 6.10954954e-02 2.32239532e-03 7.18197378e-01 3.12874854e+03 -7.81800000e-04 -1.65360702e-12 7.09286785e-02 5.55494973e-02 9.19065556e-02 6.10954954e-02 2.32239532e-03 7.18197378e-01 3.12874854e+03 -7.81900000e-04 -1.65360702e-12 7.09286784e-02 5.55494973e-02 9.19065557e-02 6.10954955e-02 2.32239531e-03 7.18197378e-01 3.12874854e+03 -7.82000000e-04 -1.65360702e-12 7.09286784e-02 5.55494972e-02 9.19065557e-02 6.10954955e-02 2.32239531e-03 7.18197378e-01 3.12874854e+03 -7.82100000e-04 -1.65360702e-12 7.09286784e-02 5.55494972e-02 9.19065557e-02 6.10954956e-02 2.32239530e-03 7.18197378e-01 3.12874854e+03 -7.82200000e-04 -1.65360702e-12 7.09286784e-02 5.55494971e-02 9.19065557e-02 6.10954956e-02 2.32239530e-03 7.18197378e-01 3.12874854e+03 -7.82300000e-04 -1.65360702e-12 7.09286783e-02 5.55494971e-02 9.19065558e-02 6.10954956e-02 2.32239529e-03 7.18197378e-01 3.12874854e+03 -7.82400000e-04 -1.65360702e-12 7.09286783e-02 5.55494970e-02 9.19065558e-02 6.10954957e-02 2.32239529e-03 7.18197378e-01 3.12874854e+03 -7.82500000e-04 -1.65360702e-12 7.09286783e-02 5.55494970e-02 9.19065558e-02 6.10954957e-02 2.32239528e-03 7.18197378e-01 3.12874854e+03 -7.82600000e-04 -1.65360702e-12 7.09286783e-02 5.55494970e-02 9.19065559e-02 6.10954958e-02 2.32239527e-03 7.18197378e-01 3.12874854e+03 -7.82700000e-04 -1.65360702e-12 7.09286782e-02 5.55494969e-02 9.19065559e-02 6.10954958e-02 2.32239527e-03 7.18197378e-01 3.12874854e+03 -7.82800000e-04 -1.65360702e-12 7.09286782e-02 5.55494969e-02 9.19065559e-02 6.10954959e-02 2.32239526e-03 7.18197378e-01 3.12874854e+03 -7.82900000e-04 -1.65360702e-12 7.09286782e-02 5.55494968e-02 9.19065560e-02 6.10954959e-02 2.32239526e-03 7.18197378e-01 3.12874854e+03 -7.83000000e-04 -1.65360702e-12 7.09286782e-02 5.55494968e-02 9.19065560e-02 6.10954960e-02 2.32239525e-03 7.18197378e-01 3.12874856e+03 -7.83100000e-04 -1.65360702e-12 7.09286781e-02 5.55494967e-02 9.19065560e-02 6.10954960e-02 2.32239525e-03 7.18197378e-01 3.12874856e+03 -7.83200000e-04 -1.65360702e-12 7.09286781e-02 5.55494967e-02 9.19065560e-02 6.10954961e-02 2.32239524e-03 7.18197378e-01 3.12874856e+03 -7.83300000e-04 -1.65360702e-12 7.09286781e-02 5.55494966e-02 9.19065561e-02 6.10954961e-02 2.32239524e-03 7.18197378e-01 3.12874856e+03 -7.83400000e-04 -1.65360702e-12 7.09286781e-02 5.55494966e-02 9.19065561e-02 6.10954962e-02 2.32239523e-03 7.18197378e-01 3.12874856e+03 -7.83500000e-04 -1.65360702e-12 7.09286780e-02 5.55494965e-02 9.19065561e-02 6.10954962e-02 2.32239523e-03 7.18197378e-01 3.12874856e+03 -7.83600000e-04 -1.65360702e-12 7.09286780e-02 5.55494965e-02 9.19065562e-02 6.10954963e-02 2.32239522e-03 7.18197378e-01 3.12874856e+03 -7.83700000e-04 -1.65360702e-12 7.09286780e-02 5.55494964e-02 9.19065562e-02 6.10954963e-02 2.32239522e-03 7.18197378e-01 3.12874856e+03 -7.83800000e-04 -1.65360702e-12 7.09286780e-02 5.55494964e-02 9.19065562e-02 6.10954964e-02 2.32239521e-03 7.18197378e-01 3.12874856e+03 -7.83900000e-04 -1.65360702e-12 7.09286779e-02 5.55494964e-02 9.19065563e-02 6.10954964e-02 2.32239521e-03 7.18197378e-01 3.12874856e+03 -7.84000000e-04 -1.65360702e-12 7.09286779e-02 5.55494963e-02 9.19065563e-02 6.10954965e-02 2.32239520e-03 7.18197378e-01 3.12874856e+03 -7.84100000e-04 -1.65360702e-12 7.09286779e-02 5.55494963e-02 9.19065563e-02 6.10954965e-02 2.32239520e-03 7.18197378e-01 3.12874856e+03 -7.84200000e-04 -1.65360702e-12 7.09286779e-02 5.55494962e-02 9.19065563e-02 6.10954966e-02 2.32239519e-03 7.18197378e-01 3.12874856e+03 -7.84300000e-04 -1.65360702e-12 7.09286778e-02 5.55494962e-02 9.19065564e-02 6.10954966e-02 2.32239518e-03 7.18197378e-01 3.12874856e+03 -7.84400000e-04 -1.65360702e-12 7.09286778e-02 5.55494961e-02 9.19065564e-02 6.10954966e-02 2.32239518e-03 7.18197378e-01 3.12874856e+03 -7.84500000e-04 -1.65360702e-12 7.09286778e-02 5.55494961e-02 9.19065564e-02 6.10954967e-02 2.32239517e-03 7.18197378e-01 3.12874856e+03 -7.84600000e-04 -1.65360702e-12 7.09286778e-02 5.55494960e-02 9.19065565e-02 6.10954967e-02 2.32239517e-03 7.18197378e-01 3.12874856e+03 -7.84700000e-04 -1.65360702e-12 7.09286777e-02 5.55494960e-02 9.19065565e-02 6.10954968e-02 2.32239516e-03 7.18197378e-01 3.12874856e+03 -7.84800000e-04 -1.65360702e-12 7.09286777e-02 5.55494959e-02 9.19065565e-02 6.10954968e-02 2.32239516e-03 7.18197378e-01 3.12874856e+03 -7.84900000e-04 -1.65360702e-12 7.09286777e-02 5.55494959e-02 9.19065565e-02 6.10954969e-02 2.32239515e-03 7.18197378e-01 3.12874856e+03 -7.85000000e-04 -1.65360702e-12 7.09286777e-02 5.55494959e-02 9.19065566e-02 6.10954969e-02 2.32239515e-03 7.18197378e-01 3.12874856e+03 -7.85100000e-04 -1.65360702e-12 7.09286776e-02 5.55494958e-02 9.19065566e-02 6.10954970e-02 2.32239514e-03 7.18197378e-01 3.12874856e+03 -7.85200000e-04 -1.65360702e-12 7.09286776e-02 5.55494958e-02 9.19065566e-02 6.10954970e-02 2.32239514e-03 7.18197378e-01 3.12874856e+03 -7.85300000e-04 -1.65360702e-12 7.09286776e-02 5.55494957e-02 9.19065566e-02 6.10954971e-02 2.32239513e-03 7.18197378e-01 3.12874856e+03 -7.85400000e-04 -1.65360702e-12 7.09286776e-02 5.55494957e-02 9.19065567e-02 6.10954971e-02 2.32239513e-03 7.18197378e-01 3.12874856e+03 -7.85500000e-04 -1.65360702e-12 7.09286775e-02 5.55494956e-02 9.19065567e-02 6.10954971e-02 2.32239512e-03 7.18197378e-01 3.12874856e+03 -7.85600000e-04 -1.65360702e-12 7.09286775e-02 5.55494956e-02 9.19065567e-02 6.10954972e-02 2.32239512e-03 7.18197378e-01 3.12874856e+03 -7.85700000e-04 -1.65360702e-12 7.09286775e-02 5.55494956e-02 9.19065568e-02 6.10954972e-02 2.32239511e-03 7.18197378e-01 3.12874856e+03 -7.85800000e-04 -1.65360702e-12 7.09286775e-02 5.55494955e-02 9.19065568e-02 6.10954973e-02 2.32239511e-03 7.18197378e-01 3.12874856e+03 -7.85900000e-04 -1.65360702e-12 7.09286774e-02 5.55494955e-02 9.19065568e-02 6.10954973e-02 2.32239510e-03 7.18197378e-01 3.12874856e+03 -7.86000000e-04 -1.65360702e-12 7.09286774e-02 5.55494954e-02 9.19065568e-02 6.10954974e-02 2.32239510e-03 7.18197378e-01 3.12874856e+03 -7.86100000e-04 -1.65360702e-12 7.09286774e-02 5.55494954e-02 9.19065569e-02 6.10954974e-02 2.32239509e-03 7.18197378e-01 3.12874856e+03 -7.86200000e-04 -1.65360702e-12 7.09286774e-02 5.55494953e-02 9.19065569e-02 6.10954975e-02 2.32239509e-03 7.18197378e-01 3.12874856e+03 -7.86300000e-04 -1.65360702e-12 7.09286773e-02 5.55494953e-02 9.19065569e-02 6.10954975e-02 2.32239508e-03 7.18197378e-01 3.12874856e+03 -7.86400000e-04 -1.65360702e-12 7.09286773e-02 5.55494952e-02 9.19065570e-02 6.10954975e-02 2.32239508e-03 7.18197378e-01 3.12874856e+03 -7.86500000e-04 -1.65360702e-12 7.09286773e-02 5.55494952e-02 9.19065570e-02 6.10954976e-02 2.32239507e-03 7.18197378e-01 3.12874856e+03 -7.86600000e-04 -1.65360702e-12 7.09286773e-02 5.55494952e-02 9.19065570e-02 6.10954976e-02 2.32239507e-03 7.18197378e-01 3.12874856e+03 -7.86700000e-04 -1.65360702e-12 7.09286773e-02 5.55494951e-02 9.19065570e-02 6.10954977e-02 2.32239506e-03 7.18197378e-01 3.12874856e+03 -7.86800000e-04 -1.65360702e-12 7.09286772e-02 5.55494951e-02 9.19065571e-02 6.10954977e-02 2.32239506e-03 7.18197378e-01 3.12874856e+03 -7.86900000e-04 -1.65360702e-12 7.09286772e-02 5.55494950e-02 9.19065571e-02 6.10954978e-02 2.32239505e-03 7.18197378e-01 3.12874856e+03 -7.87000000e-04 -1.65360702e-12 7.09286772e-02 5.55494950e-02 9.19065571e-02 6.10954978e-02 2.32239505e-03 7.18197378e-01 3.12874856e+03 -7.87100000e-04 -1.65360702e-12 7.09286772e-02 5.55494950e-02 9.19065571e-02 6.10954978e-02 2.32239505e-03 7.18197378e-01 3.12874856e+03 -7.87200000e-04 -1.65360702e-12 7.09286771e-02 5.55494949e-02 9.19065572e-02 6.10954979e-02 2.32239504e-03 7.18197378e-01 3.12874856e+03 -7.87300000e-04 -1.65360702e-12 7.09286771e-02 5.55494949e-02 9.19065572e-02 6.10954979e-02 2.32239504e-03 7.18197378e-01 3.12874856e+03 -7.87400000e-04 -1.65360702e-12 7.09286771e-02 5.55494948e-02 9.19065572e-02 6.10954980e-02 2.32239503e-03 7.18197378e-01 3.12874856e+03 -7.87500000e-04 -1.65360702e-12 7.09286771e-02 5.55494948e-02 9.19065572e-02 6.10954980e-02 2.32239503e-03 7.18197378e-01 3.12874856e+03 -7.87600000e-04 -1.65360702e-12 7.09286770e-02 5.55494947e-02 9.19065573e-02 6.10954981e-02 2.32239502e-03 7.18197378e-01 3.12874856e+03 -7.87700000e-04 -1.65360702e-12 7.09286770e-02 5.55494947e-02 9.19065573e-02 6.10954981e-02 2.32239502e-03 7.18197378e-01 3.12874856e+03 -7.87800000e-04 -1.65360702e-12 7.09286770e-02 5.55494947e-02 9.19065573e-02 6.10954981e-02 2.32239501e-03 7.18197378e-01 3.12874856e+03 -7.87900000e-04 -1.65360702e-12 7.09286770e-02 5.55494946e-02 9.19065574e-02 6.10954982e-02 2.32239501e-03 7.18197378e-01 3.12874856e+03 -7.88000000e-04 -1.65360702e-12 7.09286770e-02 5.55494946e-02 9.19065574e-02 6.10954982e-02 2.32239500e-03 7.18197378e-01 3.12874856e+03 -7.88100000e-04 -1.65360702e-12 7.09286769e-02 5.55494945e-02 9.19065574e-02 6.10954983e-02 2.32239500e-03 7.18197378e-01 3.12874856e+03 -7.88200000e-04 -1.65360702e-12 7.09286769e-02 5.55494945e-02 9.19065574e-02 6.10954983e-02 2.32239499e-03 7.18197378e-01 3.12874856e+03 -7.88300000e-04 -1.65360702e-12 7.09286769e-02 5.55494945e-02 9.19065575e-02 6.10954984e-02 2.32239499e-03 7.18197378e-01 3.12874856e+03 -7.88400000e-04 -1.65360702e-12 7.09286769e-02 5.55494944e-02 9.19065575e-02 6.10954984e-02 2.32239498e-03 7.18197378e-01 3.12874856e+03 -7.88500000e-04 -1.65360702e-12 7.09286768e-02 5.55494944e-02 9.19065575e-02 6.10954984e-02 2.32239498e-03 7.18197378e-01 3.12874856e+03 -7.88600000e-04 -1.65360702e-12 7.09286768e-02 5.55494943e-02 9.19065575e-02 6.10954985e-02 2.32239497e-03 7.18197378e-01 3.12874856e+03 -7.88700000e-04 -1.65360702e-12 7.09286768e-02 5.55494943e-02 9.19065576e-02 6.10954985e-02 2.32239497e-03 7.18197378e-01 3.12874856e+03 -7.88800000e-04 -1.65360702e-12 7.09286768e-02 5.55494943e-02 9.19065576e-02 6.10954986e-02 2.32239497e-03 7.18197378e-01 3.12874856e+03 -7.88900000e-04 -1.65360702e-12 7.09286768e-02 5.55494942e-02 9.19065576e-02 6.10954986e-02 2.32239496e-03 7.18197378e-01 3.12874856e+03 -7.89000000e-04 -1.65360702e-12 7.09286767e-02 5.55494942e-02 9.19065576e-02 6.10954986e-02 2.32239496e-03 7.18197378e-01 3.12874856e+03 -7.89100000e-04 -1.65360702e-12 7.09286767e-02 5.55494941e-02 9.19065577e-02 6.10954987e-02 2.32239495e-03 7.18197378e-01 3.12874856e+03 -7.89200000e-04 -1.65360702e-12 7.09286767e-02 5.55494941e-02 9.19065577e-02 6.10954987e-02 2.32239495e-03 7.18197378e-01 3.12874856e+03 -7.89300000e-04 -1.65360702e-12 7.09286767e-02 5.55494941e-02 9.19065577e-02 6.10954988e-02 2.32239494e-03 7.18197378e-01 3.12874856e+03 -7.89400000e-04 -1.65360702e-12 7.09286766e-02 5.55494940e-02 9.19065577e-02 6.10954988e-02 2.32239494e-03 7.18197378e-01 3.12874856e+03 -7.89500000e-04 -1.65360702e-12 7.09286766e-02 5.55494940e-02 9.19065578e-02 6.10954988e-02 2.32239493e-03 7.18197378e-01 3.12874856e+03 -7.89600000e-04 -1.65360702e-12 7.09286766e-02 5.55494939e-02 9.19065578e-02 6.10954989e-02 2.32239493e-03 7.18197378e-01 3.12874856e+03 -7.89700000e-04 -1.65360702e-12 7.09286766e-02 5.55494939e-02 9.19065578e-02 6.10954989e-02 2.32239492e-03 7.18197378e-01 3.12874856e+03 -7.89800000e-04 -1.65360702e-12 7.09286766e-02 5.55494939e-02 9.19065578e-02 6.10954990e-02 2.32239492e-03 7.18197378e-01 3.12874856e+03 -7.89900000e-04 -1.65360702e-12 7.09286765e-02 5.55494938e-02 9.19065579e-02 6.10954990e-02 2.32239492e-03 7.18197378e-01 3.12874856e+03 -7.90000000e-04 -1.65360702e-12 7.09286765e-02 5.55494938e-02 9.19065579e-02 6.10954990e-02 2.32239491e-03 7.18197378e-01 3.12874856e+03 -7.90100000e-04 -1.65360702e-12 7.09286765e-02 5.55494937e-02 9.19065579e-02 6.10954991e-02 2.32239491e-03 7.18197378e-01 3.12874856e+03 -7.90200000e-04 -1.65360702e-12 7.09286765e-02 5.55494937e-02 9.19065579e-02 6.10954991e-02 2.32239490e-03 7.18197378e-01 3.12874856e+03 -7.90300000e-04 -1.65360702e-12 7.09286765e-02 5.55494937e-02 9.19065580e-02 6.10954992e-02 2.32239490e-03 7.18197378e-01 3.12874856e+03 -7.90400000e-04 -1.65360702e-12 7.09286764e-02 5.55494936e-02 9.19065580e-02 6.10954992e-02 2.32239489e-03 7.18197378e-01 3.12874856e+03 -7.90500000e-04 -1.65360702e-12 7.09286764e-02 5.55494936e-02 9.19065580e-02 6.10954992e-02 2.32239489e-03 7.18197378e-01 3.12874856e+03 -7.90600000e-04 -1.65360702e-12 7.09286764e-02 5.55494936e-02 9.19065580e-02 6.10954993e-02 2.32239488e-03 7.18197378e-01 3.12874856e+03 -7.90700000e-04 -1.65360702e-12 7.09286764e-02 5.55494935e-02 9.19065581e-02 6.10954993e-02 2.32239488e-03 7.18197378e-01 3.12874856e+03 -7.90800000e-04 -1.65360702e-12 7.09286764e-02 5.55494935e-02 9.19065581e-02 6.10954994e-02 2.32239488e-03 7.18197378e-01 3.12874856e+03 -7.90900000e-04 -1.65360702e-12 7.09286763e-02 5.55494934e-02 9.19065581e-02 6.10954994e-02 2.32239487e-03 7.18197378e-01 3.12874856e+03 -7.91000000e-04 -1.65360702e-12 7.09286763e-02 5.55494934e-02 9.19065581e-02 6.10954994e-02 2.32239487e-03 7.18197378e-01 3.12874856e+03 -7.91100000e-04 -1.65360702e-12 7.09286763e-02 5.55494934e-02 9.19065582e-02 6.10954995e-02 2.32239486e-03 7.18197378e-01 3.12874858e+03 -7.91200000e-04 -1.65360702e-12 7.09286763e-02 5.55494933e-02 9.19065582e-02 6.10954995e-02 2.32239486e-03 7.18197378e-01 3.12874858e+03 -7.91300000e-04 -1.65360702e-12 7.09286762e-02 5.55494933e-02 9.19065582e-02 6.10954996e-02 2.32239485e-03 7.18197378e-01 3.12874858e+03 -7.91400000e-04 -1.65360702e-12 7.09286762e-02 5.55494933e-02 9.19065582e-02 6.10954996e-02 2.32239485e-03 7.18197378e-01 3.12874858e+03 -7.91500000e-04 -1.65360702e-12 7.09286762e-02 5.55494932e-02 9.19065582e-02 6.10954996e-02 2.32239484e-03 7.18197378e-01 3.12874858e+03 -7.91600000e-04 -1.65360702e-12 7.09286762e-02 5.55494932e-02 9.19065583e-02 6.10954997e-02 2.32239484e-03 7.18197378e-01 3.12874858e+03 -7.91700000e-04 -1.65360702e-12 7.09286762e-02 5.55494931e-02 9.19065583e-02 6.10954997e-02 2.32239484e-03 7.18197378e-01 3.12874858e+03 -7.91800000e-04 -1.65360702e-12 7.09286761e-02 5.55494931e-02 9.19065583e-02 6.10954998e-02 2.32239483e-03 7.18197378e-01 3.12874858e+03 -7.91900000e-04 -1.65360702e-12 7.09286761e-02 5.55494931e-02 9.19065583e-02 6.10954998e-02 2.32239483e-03 7.18197378e-01 3.12874858e+03 -7.92000000e-04 -1.65360702e-12 7.09286761e-02 5.55494930e-02 9.19065584e-02 6.10954998e-02 2.32239482e-03 7.18197378e-01 3.12874858e+03 -7.92100000e-04 -1.65360702e-12 7.09286761e-02 5.55494930e-02 9.19065584e-02 6.10954999e-02 2.32239482e-03 7.18197378e-01 3.12874858e+03 -7.92200000e-04 -1.65360702e-12 7.09286761e-02 5.55494930e-02 9.19065584e-02 6.10954999e-02 2.32239482e-03 7.18197378e-01 3.12874858e+03 -7.92300000e-04 -1.65360702e-12 7.09286760e-02 5.55494929e-02 9.19065584e-02 6.10954999e-02 2.32239481e-03 7.18197378e-01 3.12874858e+03 -7.92400000e-04 -1.65360702e-12 7.09286760e-02 5.55494929e-02 9.19065585e-02 6.10955000e-02 2.32239481e-03 7.18197378e-01 3.12874858e+03 -7.92500000e-04 -1.65360702e-12 7.09286760e-02 5.55494928e-02 9.19065585e-02 6.10955000e-02 2.32239480e-03 7.18197378e-01 3.12874858e+03 -7.92600000e-04 -1.65360702e-12 7.09286760e-02 5.55494928e-02 9.19065585e-02 6.10955001e-02 2.32239480e-03 7.18197378e-01 3.12874858e+03 -7.92700000e-04 -1.65360702e-12 7.09286760e-02 5.55494928e-02 9.19065585e-02 6.10955001e-02 2.32239479e-03 7.18197378e-01 3.12874858e+03 -7.92800000e-04 -1.65360702e-12 7.09286759e-02 5.55494927e-02 9.19065586e-02 6.10955001e-02 2.32239479e-03 7.18197378e-01 3.12874858e+03 -7.92900000e-04 -1.65360702e-12 7.09286759e-02 5.55494927e-02 9.19065586e-02 6.10955002e-02 2.32239479e-03 7.18197378e-01 3.12874858e+03 -7.93000000e-04 -1.65360702e-12 7.09286759e-02 5.55494927e-02 9.19065586e-02 6.10955002e-02 2.32239478e-03 7.18197378e-01 3.12874858e+03 -7.93100000e-04 -1.65360702e-12 7.09286759e-02 5.55494926e-02 9.19065586e-02 6.10955002e-02 2.32239478e-03 7.18197378e-01 3.12874858e+03 -7.93200000e-04 -1.65360702e-12 7.09286759e-02 5.55494926e-02 9.19065586e-02 6.10955003e-02 2.32239477e-03 7.18197378e-01 3.12874858e+03 -7.93300000e-04 -1.65360702e-12 7.09286758e-02 5.55494926e-02 9.19065587e-02 6.10955003e-02 2.32239477e-03 7.18197378e-01 3.12874858e+03 -7.93400000e-04 -1.65360702e-12 7.09286758e-02 5.55494925e-02 9.19065587e-02 6.10955003e-02 2.32239477e-03 7.18197378e-01 3.12874858e+03 -7.93500000e-04 -1.65360702e-12 7.09286758e-02 5.55494925e-02 9.19065587e-02 6.10955004e-02 2.32239476e-03 7.18197378e-01 3.12874858e+03 -7.93600000e-04 -1.65360702e-12 7.09286758e-02 5.55494924e-02 9.19065587e-02 6.10955004e-02 2.32239476e-03 7.18197378e-01 3.12874858e+03 -7.93700000e-04 -1.65360702e-12 7.09286758e-02 5.55494924e-02 9.19065588e-02 6.10955005e-02 2.32239475e-03 7.18197378e-01 3.12874858e+03 -7.93800000e-04 -1.65360702e-12 7.09286757e-02 5.55494924e-02 9.19065588e-02 6.10955005e-02 2.32239475e-03 7.18197378e-01 3.12874858e+03 -7.93900000e-04 -1.65360702e-12 7.09286757e-02 5.55494923e-02 9.19065588e-02 6.10955005e-02 2.32239474e-03 7.18197378e-01 3.12874858e+03 -7.94000000e-04 -1.65360702e-12 7.09286757e-02 5.55494923e-02 9.19065588e-02 6.10955006e-02 2.32239474e-03 7.18197378e-01 3.12874858e+03 -7.94100000e-04 -1.65360702e-12 7.09286757e-02 5.55494923e-02 9.19065588e-02 6.10955006e-02 2.32239474e-03 7.18197378e-01 3.12874858e+03 -7.94200000e-04 -1.65360702e-12 7.09286757e-02 5.55494922e-02 9.19065589e-02 6.10955006e-02 2.32239473e-03 7.18197378e-01 3.12874858e+03 -7.94300000e-04 -1.65360702e-12 7.09286757e-02 5.55494922e-02 9.19065589e-02 6.10955007e-02 2.32239473e-03 7.18197378e-01 3.12874858e+03 -7.94400000e-04 -1.65360702e-12 7.09286756e-02 5.55494922e-02 9.19065589e-02 6.10955007e-02 2.32239472e-03 7.18197378e-01 3.12874858e+03 -7.94500000e-04 -1.65360702e-12 7.09286756e-02 5.55494921e-02 9.19065589e-02 6.10955007e-02 2.32239472e-03 7.18197378e-01 3.12874858e+03 -7.94600000e-04 -1.65360702e-12 7.09286756e-02 5.55494921e-02 9.19065590e-02 6.10955008e-02 2.32239472e-03 7.18197378e-01 3.12874858e+03 -7.94700000e-04 -1.65360702e-12 7.09286756e-02 5.55494921e-02 9.19065590e-02 6.10955008e-02 2.32239471e-03 7.18197378e-01 3.12874858e+03 -7.94800000e-04 -1.65360702e-12 7.09286756e-02 5.55494920e-02 9.19065590e-02 6.10955009e-02 2.32239471e-03 7.18197378e-01 3.12874858e+03 -7.94900000e-04 -1.65360702e-12 7.09286755e-02 5.55494920e-02 9.19065590e-02 6.10955009e-02 2.32239470e-03 7.18197378e-01 3.12874858e+03 -7.95000000e-04 -1.65360702e-12 7.09286755e-02 5.55494920e-02 9.19065590e-02 6.10955009e-02 2.32239470e-03 7.18197378e-01 3.12874858e+03 -7.95100000e-04 -1.65360702e-12 7.09286755e-02 5.55494919e-02 9.19065591e-02 6.10955010e-02 2.32239470e-03 7.18197378e-01 3.12874858e+03 -7.95200000e-04 -1.65360702e-12 7.09286755e-02 5.55494919e-02 9.19065591e-02 6.10955010e-02 2.32239469e-03 7.18197378e-01 3.12874858e+03 -7.95300000e-04 -1.65360702e-12 7.09286755e-02 5.55494919e-02 9.19065591e-02 6.10955010e-02 2.32239469e-03 7.18197378e-01 3.12874858e+03 -7.95400000e-04 -1.65360702e-12 7.09286754e-02 5.55494918e-02 9.19065591e-02 6.10955011e-02 2.32239469e-03 7.18197378e-01 3.12874858e+03 -7.95500000e-04 -1.65360702e-12 7.09286754e-02 5.55494918e-02 9.19065592e-02 6.10955011e-02 2.32239468e-03 7.18197378e-01 3.12874858e+03 -7.95600000e-04 -1.65360702e-12 7.09286754e-02 5.55494918e-02 9.19065592e-02 6.10955011e-02 2.32239468e-03 7.18197378e-01 3.12874858e+03 -7.95700000e-04 -1.65360702e-12 7.09286754e-02 5.55494917e-02 9.19065592e-02 6.10955012e-02 2.32239467e-03 7.18197378e-01 3.12874858e+03 -7.95800000e-04 -1.65360702e-12 7.09286754e-02 5.55494917e-02 9.19065592e-02 6.10955012e-02 2.32239467e-03 7.18197378e-01 3.12874858e+03 -7.95900000e-04 -1.65360702e-12 7.09286754e-02 5.55494917e-02 9.19065592e-02 6.10955012e-02 2.32239467e-03 7.18197378e-01 3.12874858e+03 -7.96000000e-04 -1.65360702e-12 7.09286753e-02 5.55494916e-02 9.19065593e-02 6.10955013e-02 2.32239466e-03 7.18197378e-01 3.12874858e+03 -7.96100000e-04 -1.65360702e-12 7.09286753e-02 5.55494916e-02 9.19065593e-02 6.10955013e-02 2.32239466e-03 7.18197378e-01 3.12874858e+03 -7.96200000e-04 -1.65360702e-12 7.09286753e-02 5.55494916e-02 9.19065593e-02 6.10955013e-02 2.32239465e-03 7.18197378e-01 3.12874858e+03 -7.96300000e-04 -1.65360702e-12 7.09286753e-02 5.55494915e-02 9.19065593e-02 6.10955014e-02 2.32239465e-03 7.18197378e-01 3.12874858e+03 -7.96400000e-04 -1.65360702e-12 7.09286753e-02 5.55494915e-02 9.19065593e-02 6.10955014e-02 2.32239465e-03 7.18197378e-01 3.12874858e+03 -7.96500000e-04 -1.65360702e-12 7.09286752e-02 5.55494915e-02 9.19065594e-02 6.10955014e-02 2.32239464e-03 7.18197378e-01 3.12874858e+03 -7.96600000e-04 -1.65360702e-12 7.09286752e-02 5.55494914e-02 9.19065594e-02 6.10955015e-02 2.32239464e-03 7.18197378e-01 3.12874858e+03 -7.96700000e-04 -1.65360702e-12 7.09286752e-02 5.55494914e-02 9.19065594e-02 6.10955015e-02 2.32239464e-03 7.18197378e-01 3.12874858e+03 -7.96800000e-04 -1.65360702e-12 7.09286752e-02 5.55494914e-02 9.19065594e-02 6.10955015e-02 2.32239463e-03 7.18197378e-01 3.12874858e+03 -7.96900000e-04 -1.65360702e-12 7.09286752e-02 5.55494913e-02 9.19065594e-02 6.10955016e-02 2.32239463e-03 7.18197378e-01 3.12874858e+03 -7.97000000e-04 -1.65360702e-12 7.09286752e-02 5.55494913e-02 9.19065595e-02 6.10955016e-02 2.32239462e-03 7.18197378e-01 3.12874858e+03 -7.97100000e-04 -1.65360702e-12 7.09286751e-02 5.55494913e-02 9.19065595e-02 6.10955016e-02 2.32239462e-03 7.18197378e-01 3.12874858e+03 -7.97200000e-04 -1.65360702e-12 7.09286751e-02 5.55494912e-02 9.19065595e-02 6.10955017e-02 2.32239462e-03 7.18197378e-01 3.12874858e+03 -7.97300000e-04 -1.65360702e-12 7.09286751e-02 5.55494912e-02 9.19065595e-02 6.10955017e-02 2.32239461e-03 7.18197378e-01 3.12874858e+03 -7.97400000e-04 -1.65360702e-12 7.09286751e-02 5.55494912e-02 9.19065596e-02 6.10955017e-02 2.32239461e-03 7.18197378e-01 3.12874858e+03 -7.97500000e-04 -1.65360702e-12 7.09286751e-02 5.55494911e-02 9.19065596e-02 6.10955018e-02 2.32239461e-03 7.18197378e-01 3.12874858e+03 -7.97600000e-04 -1.65360702e-12 7.09286750e-02 5.55494911e-02 9.19065596e-02 6.10955018e-02 2.32239460e-03 7.18197378e-01 3.12874858e+03 -7.97700000e-04 -1.65360702e-12 7.09286750e-02 5.55494911e-02 9.19065596e-02 6.10955018e-02 2.32239460e-03 7.18197378e-01 3.12874858e+03 -7.97800000e-04 -1.65360702e-12 7.09286750e-02 5.55494910e-02 9.19065596e-02 6.10955019e-02 2.32239459e-03 7.18197378e-01 3.12874858e+03 -7.97900000e-04 -1.65360702e-12 7.09286750e-02 5.55494910e-02 9.19065597e-02 6.10955019e-02 2.32239459e-03 7.18197378e-01 3.12874858e+03 -7.98000000e-04 -1.65360702e-12 7.09286750e-02 5.55494910e-02 9.19065597e-02 6.10955019e-02 2.32239459e-03 7.18197378e-01 3.12874858e+03 -7.98100000e-04 -1.65360702e-12 7.09286750e-02 5.55494909e-02 9.19065597e-02 6.10955020e-02 2.32239458e-03 7.18197378e-01 3.12874858e+03 -7.98200000e-04 -1.65360702e-12 7.09286749e-02 5.55494909e-02 9.19065597e-02 6.10955020e-02 2.32239458e-03 7.18197378e-01 3.12874858e+03 -7.98300000e-04 -1.65360702e-12 7.09286749e-02 5.55494909e-02 9.19065597e-02 6.10955020e-02 2.32239458e-03 7.18197378e-01 3.12874858e+03 -7.98400000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955021e-02 2.32239457e-03 7.18197378e-01 3.12874858e+03 -7.98500000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955021e-02 2.32239457e-03 7.18197378e-01 3.12874858e+03 -7.98600000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955021e-02 2.32239457e-03 7.18197378e-01 3.12874858e+03 -7.98700000e-04 -1.65360702e-12 7.09286749e-02 5.55494908e-02 9.19065598e-02 6.10955022e-02 2.32239456e-03 7.18197378e-01 3.12874858e+03 -7.98800000e-04 -1.65360702e-12 7.09286748e-02 5.55494907e-02 9.19065598e-02 6.10955022e-02 2.32239456e-03 7.18197378e-01 3.12874858e+03 -7.98900000e-04 -1.65360702e-12 7.09286748e-02 5.55494907e-02 9.19065599e-02 6.10955022e-02 2.32239456e-03 7.18197378e-01 3.12874858e+03 -7.99000000e-04 -1.65360702e-12 7.09286748e-02 5.55494907e-02 9.19065599e-02 6.10955023e-02 2.32239455e-03 7.18197378e-01 3.12874858e+03 -7.99100000e-04 -1.65360702e-12 7.09286748e-02 5.55494906e-02 9.19065599e-02 6.10955023e-02 2.32239455e-03 7.18197378e-01 3.12874858e+03 -7.99200000e-04 -1.65360702e-12 7.09286748e-02 5.55494906e-02 9.19065599e-02 6.10955023e-02 2.32239454e-03 7.18197378e-01 3.12874860e+03 -7.99300000e-04 -1.65360702e-12 7.09286748e-02 5.55494906e-02 9.19065599e-02 6.10955024e-02 2.32239454e-03 7.18197378e-01 3.12874860e+03 -7.99400000e-04 -1.65360702e-12 7.09286747e-02 5.55494905e-02 9.19065599e-02 6.10955024e-02 2.32239454e-03 7.18197378e-01 3.12874860e+03 -7.99500000e-04 -1.65360702e-12 7.09286747e-02 5.55494905e-02 9.19065600e-02 6.10955024e-02 2.32239453e-03 7.18197378e-01 3.12874860e+03 -7.99600000e-04 -1.65360702e-12 7.09286747e-02 5.55494905e-02 9.19065600e-02 6.10955024e-02 2.32239453e-03 7.18197378e-01 3.12874860e+03 -7.99700000e-04 -1.65360702e-12 7.09286747e-02 5.55494904e-02 9.19065600e-02 6.10955025e-02 2.32239453e-03 7.18197378e-01 3.12874860e+03 -7.99800000e-04 -1.65360702e-12 7.09286747e-02 5.55494904e-02 9.19065600e-02 6.10955025e-02 2.32239452e-03 7.18197378e-01 3.12874860e+03 -7.99900000e-04 -1.65360702e-12 7.09286747e-02 5.55494904e-02 9.19065600e-02 6.10955025e-02 2.32239452e-03 7.18197378e-01 3.12874860e+03 -8.00000000e-04 -1.65360702e-12 7.09286746e-02 5.55494904e-02 9.19065601e-02 6.10955026e-02 2.32239452e-03 7.18197378e-01 3.12874860e+03 -8.00100000e-04 -1.65360702e-12 7.09286746e-02 5.55494903e-02 9.19065601e-02 6.10955026e-02 2.32239451e-03 7.18197378e-01 3.12874860e+03 -8.00200000e-04 -1.65360702e-12 7.09286746e-02 5.55494903e-02 9.19065601e-02 6.10955026e-02 2.32239451e-03 7.18197378e-01 3.12874860e+03 -8.00300000e-04 -1.65360702e-12 7.09286746e-02 5.55494903e-02 9.19065601e-02 6.10955027e-02 2.32239451e-03 7.18197378e-01 3.12874860e+03 -8.00400000e-04 -1.65360702e-12 7.09286746e-02 5.55494902e-02 9.19065601e-02 6.10955027e-02 2.32239450e-03 7.18197378e-01 3.12874860e+03 -8.00500000e-04 -1.65360702e-12 7.09286746e-02 5.55494902e-02 9.19065602e-02 6.10955027e-02 2.32239450e-03 7.18197378e-01 3.12874860e+03 -8.00600000e-04 -1.65360702e-12 7.09286745e-02 5.55494902e-02 9.19065602e-02 6.10955028e-02 2.32239450e-03 7.18197378e-01 3.12874860e+03 -8.00700000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065602e-02 6.10955028e-02 2.32239449e-03 7.18197378e-01 3.12874860e+03 -8.00800000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065602e-02 6.10955028e-02 2.32239449e-03 7.18197378e-01 3.12874860e+03 -8.00900000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065602e-02 6.10955028e-02 2.32239449e-03 7.18197378e-01 3.12874860e+03 -8.01000000e-04 -1.65360702e-12 7.09286745e-02 5.55494901e-02 9.19065603e-02 6.10955029e-02 2.32239448e-03 7.18197378e-01 3.12874860e+03 -8.01100000e-04 -1.65360702e-12 7.09286745e-02 5.55494900e-02 9.19065603e-02 6.10955029e-02 2.32239448e-03 7.18197378e-01 3.12874860e+03 -8.01200000e-04 -1.65360702e-12 7.09286744e-02 5.55494900e-02 9.19065603e-02 6.10955029e-02 2.32239448e-03 7.18197378e-01 3.12874860e+03 -8.01300000e-04 -1.65360702e-12 7.09286744e-02 5.55494900e-02 9.19065603e-02 6.10955030e-02 2.32239447e-03 7.18197378e-01 3.12874860e+03 -8.01400000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065603e-02 6.10955030e-02 2.32239447e-03 7.18197378e-01 3.12874860e+03 -8.01500000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065603e-02 6.10955030e-02 2.32239447e-03 7.18197378e-01 3.12874860e+03 -8.01600000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065604e-02 6.10955031e-02 2.32239446e-03 7.18197378e-01 3.12874860e+03 -8.01700000e-04 -1.65360702e-12 7.09286744e-02 5.55494899e-02 9.19065604e-02 6.10955031e-02 2.32239446e-03 7.18197378e-01 3.12874860e+03 -8.01800000e-04 -1.65360702e-12 7.09286743e-02 5.55494898e-02 9.19065604e-02 6.10955031e-02 2.32239446e-03 7.18197378e-01 3.12874860e+03 -8.01900000e-04 -1.65360702e-12 7.09286743e-02 5.55494898e-02 9.19065604e-02 6.10955031e-02 2.32239445e-03 7.18197378e-01 3.12874860e+03 -8.02000000e-04 -1.65360702e-12 7.09286743e-02 5.55494898e-02 9.19065604e-02 6.10955032e-02 2.32239445e-03 7.18197378e-01 3.12874860e+03 -8.02100000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955032e-02 2.32239445e-03 7.18197378e-01 3.12874860e+03 -8.02200000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955032e-02 2.32239444e-03 7.18197378e-01 3.12874860e+03 -8.02300000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955033e-02 2.32239444e-03 7.18197378e-01 3.12874860e+03 -8.02400000e-04 -1.65360702e-12 7.09286743e-02 5.55494897e-02 9.19065605e-02 6.10955033e-02 2.32239444e-03 7.18197378e-01 3.12874860e+03 -8.02500000e-04 -1.65360702e-12 7.09286742e-02 5.55494896e-02 9.19065605e-02 6.10955033e-02 2.32239443e-03 7.18197378e-01 3.12874860e+03 -8.02600000e-04 -1.65360702e-12 7.09286742e-02 5.55494896e-02 9.19065605e-02 6.10955033e-02 2.32239443e-03 7.18197378e-01 3.12874860e+03 -8.02700000e-04 -1.65360702e-12 7.09286742e-02 5.55494896e-02 9.19065606e-02 6.10955034e-02 2.32239443e-03 7.18197378e-01 3.12874860e+03 -8.02800000e-04 -1.65360702e-12 7.09286742e-02 5.55494895e-02 9.19065606e-02 6.10955034e-02 2.32239442e-03 7.18197378e-01 3.12874860e+03 -8.02900000e-04 -1.65360702e-12 7.09286742e-02 5.55494895e-02 9.19065606e-02 6.10955034e-02 2.32239442e-03 7.18197378e-01 3.12874860e+03 -8.03000000e-04 -1.65360702e-12 7.09286742e-02 5.55494895e-02 9.19065606e-02 6.10955035e-02 2.32239442e-03 7.18197378e-01 3.12874860e+03 -8.03100000e-04 -1.65360702e-12 7.09286741e-02 5.55494895e-02 9.19065606e-02 6.10955035e-02 2.32239441e-03 7.18197378e-01 3.12874860e+03 -8.03200000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955035e-02 2.32239441e-03 7.18197378e-01 3.12874860e+03 -8.03300000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955035e-02 2.32239441e-03 7.18197378e-01 3.12874860e+03 -8.03400000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955036e-02 2.32239440e-03 7.18197378e-01 3.12874860e+03 -8.03500000e-04 -1.65360702e-12 7.09286741e-02 5.55494894e-02 9.19065607e-02 6.10955036e-02 2.32239440e-03 7.18197378e-01 3.12874860e+03 -8.03600000e-04 -1.65360702e-12 7.09286741e-02 5.55494893e-02 9.19065607e-02 6.10955036e-02 2.32239440e-03 7.18197378e-01 3.12874860e+03 -8.03700000e-04 -1.65360702e-12 7.09286741e-02 5.55494893e-02 9.19065607e-02 6.10955037e-02 2.32239439e-03 7.18197378e-01 3.12874860e+03 -8.03800000e-04 -1.65360702e-12 7.09286740e-02 5.55494893e-02 9.19065608e-02 6.10955037e-02 2.32239439e-03 7.18197378e-01 3.12874860e+03 -8.03900000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955037e-02 2.32239439e-03 7.18197378e-01 3.12874860e+03 -8.04000000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955037e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 -8.04100000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955038e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 -8.04200000e-04 -1.65360702e-12 7.09286740e-02 5.55494892e-02 9.19065608e-02 6.10955038e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 -8.04300000e-04 -1.65360702e-12 7.09286740e-02 5.55494891e-02 9.19065608e-02 6.10955038e-02 2.32239438e-03 7.18197378e-01 3.12874860e+03 -8.04400000e-04 -1.65360702e-12 7.09286740e-02 5.55494891e-02 9.19065609e-02 6.10955039e-02 2.32239437e-03 7.18197378e-01 3.12874860e+03 -8.04500000e-04 -1.65360702e-12 7.09286739e-02 5.55494891e-02 9.19065609e-02 6.10955039e-02 2.32239437e-03 7.18197378e-01 3.12874860e+03 -8.04600000e-04 -1.65360702e-12 7.09286739e-02 5.55494891e-02 9.19065609e-02 6.10955039e-02 2.32239437e-03 7.18197378e-01 3.12874860e+03 -8.04700000e-04 -1.65360702e-12 7.09286739e-02 5.55494890e-02 9.19065609e-02 6.10955039e-02 2.32239436e-03 7.18197378e-01 3.12874860e+03 -8.04800000e-04 -1.65360702e-12 7.09286739e-02 5.55494890e-02 9.19065609e-02 6.10955040e-02 2.32239436e-03 7.18197378e-01 3.12874860e+03 -8.04900000e-04 -1.65360702e-12 7.09286739e-02 5.55494890e-02 9.19065609e-02 6.10955040e-02 2.32239436e-03 7.18197378e-01 3.12874860e+03 -8.05000000e-04 -1.65360702e-12 7.09286739e-02 5.55494889e-02 9.19065610e-02 6.10955040e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 -8.05100000e-04 -1.65360702e-12 7.09286738e-02 5.55494889e-02 9.19065610e-02 6.10955040e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 -8.05200000e-04 -1.65360702e-12 7.09286738e-02 5.55494889e-02 9.19065610e-02 6.10955041e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 -8.05300000e-04 -1.65360702e-12 7.09286738e-02 5.55494889e-02 9.19065610e-02 6.10955041e-02 2.32239435e-03 7.18197378e-01 3.12874860e+03 -8.05400000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065610e-02 6.10955041e-02 2.32239434e-03 7.18197378e-01 3.12874860e+03 -8.05500000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065610e-02 6.10955042e-02 2.32239434e-03 7.18197378e-01 3.12874860e+03 -8.05600000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065611e-02 6.10955042e-02 2.32239434e-03 7.18197378e-01 3.12874860e+03 -8.05700000e-04 -1.65360702e-12 7.09286738e-02 5.55494888e-02 9.19065611e-02 6.10955042e-02 2.32239433e-03 7.18197378e-01 3.12874860e+03 -8.05800000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955042e-02 2.32239433e-03 7.18197378e-01 3.12874860e+03 -8.05900000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955043e-02 2.32239433e-03 7.18197378e-01 3.12874860e+03 -8.06000000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955043e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 -8.06100000e-04 -1.65360702e-12 7.09286737e-02 5.55494887e-02 9.19065611e-02 6.10955043e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 -8.06200000e-04 -1.65360702e-12 7.09286737e-02 5.55494886e-02 9.19065612e-02 6.10955043e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 -8.06300000e-04 -1.65360702e-12 7.09286737e-02 5.55494886e-02 9.19065612e-02 6.10955044e-02 2.32239432e-03 7.18197378e-01 3.12874860e+03 -8.06400000e-04 -1.65360702e-12 7.09286737e-02 5.55494886e-02 9.19065612e-02 6.10955044e-02 2.32239431e-03 7.18197378e-01 3.12874860e+03 -8.06500000e-04 -1.65360702e-12 7.09286736e-02 5.55494886e-02 9.19065612e-02 6.10955044e-02 2.32239431e-03 7.18197378e-01 3.12874860e+03 -8.06600000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065612e-02 6.10955044e-02 2.32239431e-03 7.18197378e-01 3.12874860e+03 -8.06700000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065612e-02 6.10955045e-02 2.32239430e-03 7.18197378e-01 3.12874860e+03 -8.06800000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065613e-02 6.10955045e-02 2.32239430e-03 7.18197378e-01 3.12874860e+03 -8.06900000e-04 -1.65360702e-12 7.09286736e-02 5.55494885e-02 9.19065613e-02 6.10955045e-02 2.32239430e-03 7.18197378e-01 3.12874860e+03 -8.07000000e-04 -1.65360702e-12 7.09286736e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874860e+03 -8.07100000e-04 -1.65360702e-12 7.09286736e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874860e+03 -8.07200000e-04 -1.65360702e-12 7.09286736e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874861e+03 -8.07300000e-04 -1.65360702e-12 7.09286735e-02 5.55494884e-02 9.19065613e-02 6.10955046e-02 2.32239429e-03 7.18197378e-01 3.12874861e+03 -8.07400000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239428e-03 7.18197378e-01 3.12874861e+03 -8.07500000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239428e-03 7.18197378e-01 3.12874861e+03 -8.07600000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239428e-03 7.18197378e-01 3.12874861e+03 -8.07700000e-04 -1.65360702e-12 7.09286735e-02 5.55494883e-02 9.19065614e-02 6.10955047e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 -8.07800000e-04 -1.65360702e-12 7.09286735e-02 5.55494882e-02 9.19065614e-02 6.10955048e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 -8.07900000e-04 -1.65360702e-12 7.09286735e-02 5.55494882e-02 9.19065614e-02 6.10955048e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 -8.08000000e-04 -1.65360702e-12 7.09286734e-02 5.55494882e-02 9.19065614e-02 6.10955048e-02 2.32239427e-03 7.18197378e-01 3.12874861e+03 -8.08100000e-04 -1.65360702e-12 7.09286734e-02 5.55494882e-02 9.19065615e-02 6.10955048e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 -8.08200000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 -8.08300000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 -8.08400000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239426e-03 7.18197378e-01 3.12874861e+03 -8.08500000e-04 -1.65360702e-12 7.09286734e-02 5.55494881e-02 9.19065615e-02 6.10955049e-02 2.32239425e-03 7.18197378e-01 3.12874861e+03 -8.08600000e-04 -1.65360702e-12 7.09286734e-02 5.55494880e-02 9.19065615e-02 6.10955050e-02 2.32239425e-03 7.18197378e-01 3.12874861e+03 -8.08700000e-04 -1.65360702e-12 7.09286734e-02 5.55494880e-02 9.19065616e-02 6.10955050e-02 2.32239425e-03 7.18197378e-01 3.12874861e+03 -8.08800000e-04 -1.65360702e-12 7.09286733e-02 5.55494880e-02 9.19065616e-02 6.10955050e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 -8.08900000e-04 -1.65360702e-12 7.09286733e-02 5.55494880e-02 9.19065616e-02 6.10955050e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 -8.09000000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 -8.09100000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239424e-03 7.18197378e-01 3.12874861e+03 -8.09200000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239423e-03 7.18197378e-01 3.12874861e+03 -8.09300000e-04 -1.65360702e-12 7.09286733e-02 5.55494879e-02 9.19065616e-02 6.10955051e-02 2.32239423e-03 7.18197378e-01 3.12874861e+03 -8.09400000e-04 -1.65360702e-12 7.09286733e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239423e-03 7.18197378e-01 3.12874861e+03 -8.09500000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 -8.09600000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 -8.09700000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 -8.09800000e-04 -1.65360702e-12 7.09286732e-02 5.55494878e-02 9.19065617e-02 6.10955052e-02 2.32239422e-03 7.18197378e-01 3.12874861e+03 -8.09900000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065617e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 -8.10000000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065618e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 -8.10100000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065618e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 -8.10200000e-04 -1.65360702e-12 7.09286732e-02 5.55494877e-02 9.19065618e-02 6.10955053e-02 2.32239421e-03 7.18197378e-01 3.12874861e+03 -8.10300000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 -8.10400000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 -8.10500000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 -8.10600000e-04 -1.65360702e-12 7.09286731e-02 5.55494876e-02 9.19065618e-02 6.10955054e-02 2.32239420e-03 7.18197378e-01 3.12874861e+03 -8.10700000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239419e-03 7.18197378e-01 3.12874861e+03 -8.10800000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239419e-03 7.18197378e-01 3.12874861e+03 -8.10900000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239419e-03 7.18197378e-01 3.12874861e+03 -8.11000000e-04 -1.65360702e-12 7.09286731e-02 5.55494875e-02 9.19065619e-02 6.10955055e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 -8.11100000e-04 -1.65360702e-12 7.09286730e-02 5.55494875e-02 9.19065619e-02 6.10955056e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 -8.11200000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065619e-02 6.10955056e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 -8.11300000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065619e-02 6.10955056e-02 2.32239418e-03 7.18197378e-01 3.12874861e+03 -8.11400000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065620e-02 6.10955056e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 -8.11500000e-04 -1.65360702e-12 7.09286730e-02 5.55494874e-02 9.19065620e-02 6.10955056e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 -8.11600000e-04 -1.65360702e-12 7.09286730e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 -8.11700000e-04 -1.65360702e-12 7.09286730e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239417e-03 7.18197378e-01 3.12874861e+03 -8.11800000e-04 -1.65360702e-12 7.09286730e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 -8.11900000e-04 -1.65360702e-12 7.09286729e-02 5.55494873e-02 9.19065620e-02 6.10955057e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 -8.12000000e-04 -1.65360702e-12 7.09286729e-02 5.55494873e-02 9.19065620e-02 6.10955058e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 -8.12100000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955058e-02 2.32239416e-03 7.18197378e-01 3.12874861e+03 -8.12200000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955058e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 -8.12300000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955058e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 -8.12400000e-04 -1.65360702e-12 7.09286729e-02 5.55494872e-02 9.19065621e-02 6.10955059e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 -8.12500000e-04 -1.65360702e-12 7.09286729e-02 5.55494871e-02 9.19065621e-02 6.10955059e-02 2.32239415e-03 7.18197378e-01 3.12874861e+03 -8.12600000e-04 -1.65360702e-12 7.09286729e-02 5.55494871e-02 9.19065621e-02 6.10955059e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 -8.12700000e-04 -1.65360702e-12 7.09286728e-02 5.55494871e-02 9.19065621e-02 6.10955059e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 -8.12800000e-04 -1.65360702e-12 7.09286728e-02 5.55494871e-02 9.19065622e-02 6.10955059e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 -8.12900000e-04 -1.65360702e-12 7.09286728e-02 5.55494871e-02 9.19065622e-02 6.10955060e-02 2.32239414e-03 7.18197378e-01 3.12874861e+03 -8.13000000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955060e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 -8.13100000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955060e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 -8.13200000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955060e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 -8.13300000e-04 -1.65360702e-12 7.09286728e-02 5.55494870e-02 9.19065622e-02 6.10955061e-02 2.32239413e-03 7.18197378e-01 3.12874861e+03 -8.13400000e-04 -1.65360702e-12 7.09286728e-02 5.55494869e-02 9.19065622e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 -8.13500000e-04 -1.65360702e-12 7.09286728e-02 5.55494869e-02 9.19065622e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 -8.13600000e-04 -1.65360702e-12 7.09286727e-02 5.55494869e-02 9.19065623e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 -8.13700000e-04 -1.65360702e-12 7.09286727e-02 5.55494869e-02 9.19065623e-02 6.10955061e-02 2.32239412e-03 7.18197378e-01 3.12874861e+03 -8.13800000e-04 -1.65360702e-12 7.09286727e-02 5.55494869e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 -8.13900000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 -8.14000000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 -8.14100000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239411e-03 7.18197378e-01 3.12874861e+03 -8.14200000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065623e-02 6.10955062e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 -8.14300000e-04 -1.65360702e-12 7.09286727e-02 5.55494868e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 -8.14400000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 -8.14500000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 -8.14600000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955063e-02 2.32239410e-03 7.18197378e-01 3.12874861e+03 -8.14700000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 -8.14800000e-04 -1.65360702e-12 7.09286726e-02 5.55494867e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 -8.14900000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 -8.15000000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065624e-02 6.10955064e-02 2.32239409e-03 7.18197378e-01 3.12874861e+03 -8.15100000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065625e-02 6.10955064e-02 2.32239408e-03 7.18197378e-01 3.12874861e+03 -8.15200000e-04 -1.65360702e-12 7.09286726e-02 5.55494866e-02 9.19065625e-02 6.10955065e-02 2.32239408e-03 7.18197378e-01 3.12874861e+03 -8.15300000e-04 -1.65360702e-12 7.09286725e-02 5.55494866e-02 9.19065625e-02 6.10955065e-02 2.32239408e-03 7.18197378e-01 3.12874862e+03 -8.15400000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955065e-02 2.32239408e-03 7.18197378e-01 3.12874862e+03 -8.15500000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955065e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 -8.15600000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955065e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 -8.15700000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065625e-02 6.10955066e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 -8.15800000e-04 -1.65360702e-12 7.09286725e-02 5.55494865e-02 9.19065626e-02 6.10955066e-02 2.32239407e-03 7.18197378e-01 3.12874862e+03 -8.15900000e-04 -1.65360702e-12 7.09286725e-02 5.55494864e-02 9.19065626e-02 6.10955066e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 -8.16000000e-04 -1.65360702e-12 7.09286725e-02 5.55494864e-02 9.19065626e-02 6.10955066e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 -8.16100000e-04 -1.65360702e-12 7.09286725e-02 5.55494864e-02 9.19065626e-02 6.10955066e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 -8.16200000e-04 -1.65360702e-12 7.09286724e-02 5.55494864e-02 9.19065626e-02 6.10955067e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 -8.16300000e-04 -1.65360702e-12 7.09286724e-02 5.55494864e-02 9.19065626e-02 6.10955067e-02 2.32239406e-03 7.18197378e-01 3.12874862e+03 -8.16400000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065626e-02 6.10955067e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 -8.16500000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065626e-02 6.10955067e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 -8.16600000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065627e-02 6.10955067e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 -8.16700000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065627e-02 6.10955068e-02 2.32239405e-03 7.18197378e-01 3.12874862e+03 -8.16800000e-04 -1.65360702e-12 7.09286724e-02 5.55494863e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 -8.16900000e-04 -1.65360702e-12 7.09286724e-02 5.55494862e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 -8.17000000e-04 -1.65360702e-12 7.09286724e-02 5.55494862e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 -8.17100000e-04 -1.65360702e-12 7.09286724e-02 5.55494862e-02 9.19065627e-02 6.10955068e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 -8.17200000e-04 -1.65360702e-12 7.09286723e-02 5.55494862e-02 9.19065627e-02 6.10955069e-02 2.32239404e-03 7.18197378e-01 3.12874862e+03 -8.17300000e-04 -1.65360702e-12 7.09286723e-02 5.55494862e-02 9.19065627e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 -8.17400000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 -8.17500000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 -8.17600000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955069e-02 2.32239403e-03 7.18197378e-01 3.12874862e+03 -8.17700000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 -8.17800000e-04 -1.65360702e-12 7.09286723e-02 5.55494861e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 -8.17900000e-04 -1.65360702e-12 7.09286723e-02 5.55494860e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 -8.18000000e-04 -1.65360702e-12 7.09286723e-02 5.55494860e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 -8.18100000e-04 -1.65360702e-12 7.09286722e-02 5.55494860e-02 9.19065628e-02 6.10955070e-02 2.32239402e-03 7.18197378e-01 3.12874862e+03 -8.18200000e-04 -1.65360702e-12 7.09286722e-02 5.55494860e-02 9.19065628e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 -8.18300000e-04 -1.65360702e-12 7.09286722e-02 5.55494860e-02 9.19065629e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 -8.18400000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 -8.18500000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955071e-02 2.32239401e-03 7.18197378e-01 3.12874862e+03 -8.18600000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955071e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 -8.18700000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 -8.18800000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 -8.18900000e-04 -1.65360702e-12 7.09286722e-02 5.55494859e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 -8.19000000e-04 -1.65360702e-12 7.09286722e-02 5.55494858e-02 9.19065629e-02 6.10955072e-02 2.32239400e-03 7.18197378e-01 3.12874862e+03 -8.19100000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955072e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 -8.19200000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 -8.19300000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 -8.19400000e-04 -1.65360702e-12 7.09286721e-02 5.55494858e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 -8.19500000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955073e-02 2.32239399e-03 7.18197378e-01 3.12874862e+03 -8.19600000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955073e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 -8.19700000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 -8.19800000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 -8.19900000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065630e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 -8.20000000e-04 -1.65360702e-12 7.09286721e-02 5.55494857e-02 9.19065631e-02 6.10955074e-02 2.32239398e-03 7.18197378e-01 3.12874862e+03 -8.20100000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955074e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 -8.20200000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955074e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 -8.20300000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955075e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 -8.20400000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955075e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 -8.20500000e-04 -1.65360702e-12 7.09286720e-02 5.55494856e-02 9.19065631e-02 6.10955075e-02 2.32239397e-03 7.18197378e-01 3.12874862e+03 -8.20600000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065631e-02 6.10955075e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 -8.20700000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065631e-02 6.10955075e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 -8.20800000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 -8.20900000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239396e-03 7.18197378e-01 3.12874862e+03 -8.21000000e-04 -1.65360702e-12 7.09286720e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 -8.21100000e-04 -1.65360702e-12 7.09286719e-02 5.55494855e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 -8.21200000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 -8.21300000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955076e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 -8.21400000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955077e-02 2.32239395e-03 7.18197378e-01 3.12874862e+03 -8.21500000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 -8.21600000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065632e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 -8.21700000e-04 -1.65360702e-12 7.09286719e-02 5.55494854e-02 9.19065633e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 -8.21800000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955077e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 -8.21900000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239394e-03 7.18197378e-01 3.12874862e+03 -8.22000000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 -8.22100000e-04 -1.65360702e-12 7.09286719e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 -8.22200000e-04 -1.65360702e-12 7.09286718e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 -8.22300000e-04 -1.65360702e-12 7.09286718e-02 5.55494853e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 -8.22400000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065633e-02 6.10955078e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 -8.22500000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065633e-02 6.10955079e-02 2.32239393e-03 7.18197378e-01 3.12874862e+03 -8.22600000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065633e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 -8.22700000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 -8.22800000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 -8.22900000e-04 -1.65360702e-12 7.09286718e-02 5.55494852e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 -8.23000000e-04 -1.65360702e-12 7.09286718e-02 5.55494851e-02 9.19065634e-02 6.10955079e-02 2.32239392e-03 7.18197378e-01 3.12874862e+03 -8.23100000e-04 -1.65360702e-12 7.09286718e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874862e+03 -8.23200000e-04 -1.65360702e-12 7.09286718e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874862e+03 -8.23300000e-04 -1.65360702e-12 7.09286717e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874862e+03 -8.23400000e-04 -1.65360702e-12 7.09286717e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874863e+03 -8.23500000e-04 -1.65360702e-12 7.09286717e-02 5.55494851e-02 9.19065634e-02 6.10955080e-02 2.32239391e-03 7.18197378e-01 3.12874863e+03 -8.23600000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955080e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 -8.23700000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 -8.23800000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 -8.23900000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 -8.24000000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239390e-03 7.18197378e-01 3.12874863e+03 -8.24100000e-04 -1.65360702e-12 7.09286717e-02 5.55494850e-02 9.19065635e-02 6.10955081e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 -8.24200000e-04 -1.65360702e-12 7.09286717e-02 5.55494849e-02 9.19065635e-02 6.10955081e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 -8.24300000e-04 -1.65360702e-12 7.09286717e-02 5.55494849e-02 9.19065635e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 -8.24400000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065635e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 -8.24500000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065635e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 -8.24600000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065636e-02 6.10955082e-02 2.32239389e-03 7.18197378e-01 3.12874863e+03 -8.24700000e-04 -1.65360702e-12 7.09286716e-02 5.55494849e-02 9.19065636e-02 6.10955082e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 -8.24800000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955082e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 -8.24900000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 -8.25000000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 -8.25100000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239388e-03 7.18197378e-01 3.12874863e+03 -8.25200000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 -8.25300000e-04 -1.65360702e-12 7.09286716e-02 5.55494848e-02 9.19065636e-02 6.10955083e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 -8.25400000e-04 -1.65360702e-12 7.09286716e-02 5.55494847e-02 9.19065636e-02 6.10955083e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 -8.25500000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065636e-02 6.10955084e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 -8.25600000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 -8.25700000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239387e-03 7.18197378e-01 3.12874863e+03 -8.25800000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 -8.25900000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 -8.26000000e-04 -1.65360702e-12 7.09286715e-02 5.55494847e-02 9.19065637e-02 6.10955084e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 -8.26100000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 -8.26200000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239386e-03 7.18197378e-01 3.12874863e+03 -8.26300000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 -8.26400000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 -8.26500000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065637e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 -8.26600000e-04 -1.65360702e-12 7.09286715e-02 5.55494846e-02 9.19065638e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 -8.26700000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955085e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 -8.26800000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239385e-03 7.18197378e-01 3.12874863e+03 -8.26900000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 -8.27000000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 -8.27100000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 -8.27200000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 -8.27300000e-04 -1.65360702e-12 7.09286714e-02 5.55494845e-02 9.19065638e-02 6.10955086e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 -8.27400000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065638e-02 6.10955087e-02 2.32239384e-03 7.18197378e-01 3.12874863e+03 -8.27500000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065638e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 -8.27600000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 -8.27700000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 -8.27800000e-04 -1.65360702e-12 7.09286714e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 -8.27900000e-04 -1.65360702e-12 7.09286713e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 -8.28000000e-04 -1.65360702e-12 7.09286713e-02 5.55494844e-02 9.19065639e-02 6.10955087e-02 2.32239383e-03 7.18197378e-01 3.12874863e+03 -8.28100000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 -8.28200000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 -8.28300000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 -8.28400000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 -8.28500000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 -8.28600000e-04 -1.65360702e-12 7.09286713e-02 5.55494843e-02 9.19065639e-02 6.10955088e-02 2.32239382e-03 7.18197378e-01 3.12874863e+03 -8.28700000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 -8.28800000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 -8.28900000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 -8.29000000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 -8.29100000e-04 -1.65360702e-12 7.09286713e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 -8.29200000e-04 -1.65360702e-12 7.09286712e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239381e-03 7.18197378e-01 3.12874863e+03 -8.29300000e-04 -1.65360702e-12 7.09286712e-02 5.55494842e-02 9.19065640e-02 6.10955089e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 -8.29400000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 -8.29500000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 -8.29600000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 -8.29700000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065640e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 -8.29800000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955090e-02 2.32239380e-03 7.18197378e-01 3.12874863e+03 -8.29900000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955090e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 -8.30000000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955090e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 -8.30100000e-04 -1.65360702e-12 7.09286712e-02 5.55494841e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 -8.30200000e-04 -1.65360702e-12 7.09286712e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 -8.30300000e-04 -1.65360702e-12 7.09286712e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 -8.30400000e-04 -1.65360702e-12 7.09286712e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239379e-03 7.18197378e-01 3.12874863e+03 -8.30500000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.30600000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.30700000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955091e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.30800000e-04 -1.65360702e-12 7.09286711e-02 5.55494840e-02 9.19065641e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.30900000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065641e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.31000000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.31100000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239378e-03 7.18197378e-01 3.12874863e+03 -8.31200000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 -8.31300000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 -8.31400000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 -8.31500000e-04 -1.65360702e-12 7.09286711e-02 5.55494839e-02 9.19065642e-02 6.10955092e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 -8.31600000e-04 -1.65360702e-12 7.09286711e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 -8.31700000e-04 -1.65360702e-12 7.09286711e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239377e-03 7.18197378e-01 3.12874863e+03 -8.31800000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.31900000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.32000000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065642e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.32100000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065643e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.32200000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065643e-02 6.10955093e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.32300000e-04 -1.65360702e-12 7.09286710e-02 5.55494838e-02 9.19065643e-02 6.10955094e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.32400000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239376e-03 7.18197378e-01 3.12874863e+03 -8.32500000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 -8.32600000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 -8.32700000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 -8.32800000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 -8.32900000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955094e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 -8.33000000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955095e-02 2.32239375e-03 7.18197378e-01 3.12874863e+03 -8.33100000e-04 -1.65360702e-12 7.09286710e-02 5.55494837e-02 9.19065643e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33200000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065643e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33300000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33400000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33500000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33600000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33700000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955095e-02 2.32239374e-03 7.18197378e-01 3.12874863e+03 -8.33800000e-04 -1.65360702e-12 7.09286709e-02 5.55494836e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.33900000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.34000000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.34100000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.34200000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.34300000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.34400000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239373e-03 7.18197378e-01 3.12874863e+03 -8.34500000e-04 -1.65360702e-12 7.09286709e-02 5.55494835e-02 9.19065644e-02 6.10955096e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.34600000e-04 -1.65360702e-12 7.09286708e-02 5.55494835e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.34700000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.34800000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.34900000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.35000000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.35100000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239372e-03 7.18197378e-01 3.12874863e+03 -8.35200000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 -8.35300000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955097e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 -8.35400000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 -8.35500000e-04 -1.65360702e-12 7.09286708e-02 5.55494834e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 -8.35600000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 -8.35700000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874863e+03 -8.35800000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065645e-02 6.10955098e-02 2.32239371e-03 7.18197378e-01 3.12874864e+03 -8.35900000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065646e-02 6.10955098e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36000000e-04 -1.65360702e-12 7.09286708e-02 5.55494833e-02 9.19065646e-02 6.10955098e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36100000e-04 -1.65360702e-12 7.09286707e-02 5.55494833e-02 9.19065646e-02 6.10955098e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36200000e-04 -1.65360702e-12 7.09286707e-02 5.55494833e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36300000e-04 -1.65360702e-12 7.09286707e-02 5.55494833e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36400000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36500000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36600000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239370e-03 7.18197378e-01 3.12874864e+03 -8.36700000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.36800000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.36900000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955099e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.37000000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.37100000e-04 -1.65360702e-12 7.09286707e-02 5.55494832e-02 9.19065646e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.37200000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.37300000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239369e-03 7.18197378e-01 3.12874864e+03 -8.37400000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.37500000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.37600000e-04 -1.65360702e-12 7.09286707e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.37700000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955100e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.37800000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.37900000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.38000000e-04 -1.65360702e-12 7.09286706e-02 5.55494831e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.38100000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239368e-03 7.18197378e-01 3.12874864e+03 -8.38200000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38300000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38400000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38500000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065647e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38600000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955101e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38700000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955102e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38800000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955102e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.38900000e-04 -1.65360702e-12 7.09286706e-02 5.55494830e-02 9.19065648e-02 6.10955102e-02 2.32239367e-03 7.18197378e-01 3.12874864e+03 -8.39000000e-04 -1.65360702e-12 7.09286706e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39100000e-04 -1.65360702e-12 7.09286706e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39200000e-04 -1.65360702e-12 7.09286706e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39300000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39400000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39500000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955102e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39600000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955103e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39700000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955103e-02 2.32239366e-03 7.18197378e-01 3.12874864e+03 -8.39800000e-04 -1.65360702e-12 7.09286705e-02 5.55494829e-02 9.19065648e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.39900000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065648e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40000000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40100000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40200000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40300000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40400000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955103e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40500000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239365e-03 7.18197378e-01 3.12874864e+03 -8.40600000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.40700000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.40800000e-04 -1.65360702e-12 7.09286705e-02 5.55494828e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.40900000e-04 -1.65360702e-12 7.09286705e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.41000000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.41100000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.41200000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.41300000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955104e-02 2.32239364e-03 7.18197378e-01 3.12874864e+03 -8.41400000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065649e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.41500000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.41600000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.41700000e-04 -1.65360702e-12 7.09286704e-02 5.55494827e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.41800000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.41900000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.42000000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.42100000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239363e-03 7.18197378e-01 3.12874864e+03 -8.42200000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42300000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955105e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42400000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42500000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42600000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42700000e-04 -1.65360702e-12 7.09286704e-02 5.55494826e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42800000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.42900000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.43000000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065650e-02 6.10955106e-02 2.32239362e-03 7.18197378e-01 3.12874864e+03 -8.43100000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955106e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43200000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955106e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43300000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43400000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43500000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43600000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43700000e-04 -1.65360702e-12 7.09286703e-02 5.55494825e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43800000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.43900000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239361e-03 7.18197378e-01 3.12874864e+03 -8.44000000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44100000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44200000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955107e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44300000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44400000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44500000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44600000e-04 -1.65360702e-12 7.09286703e-02 5.55494824e-02 9.19065651e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44700000e-04 -1.65360702e-12 7.09286702e-02 5.55494824e-02 9.19065652e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44800000e-04 -1.65360702e-12 7.09286702e-02 5.55494824e-02 9.19065652e-02 6.10955108e-02 2.32239360e-03 7.18197378e-01 3.12874864e+03 -8.44900000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45000000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45100000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45200000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955108e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45300000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45400000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45500000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45600000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45700000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239359e-03 7.18197378e-01 3.12874864e+03 -8.45800000e-04 -1.65360702e-12 7.09286702e-02 5.55494823e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.45900000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46000000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46100000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46200000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065652e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46300000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065653e-02 6.10955109e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46400000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46500000e-04 -1.65360702e-12 7.09286702e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46600000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46700000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239358e-03 7.18197378e-01 3.12874864e+03 -8.46800000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.46900000e-04 -1.65360702e-12 7.09286701e-02 5.55494822e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47000000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47100000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47200000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47300000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47400000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955110e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47500000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47600000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239357e-03 7.18197378e-01 3.12874864e+03 -8.47700000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 -8.47800000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 -8.47900000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 -8.48000000e-04 -1.65360702e-12 7.09286701e-02 5.55494821e-02 9.19065653e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 -8.48100000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874864e+03 -8.48200000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 -8.48300000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 -8.48400000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 -8.48500000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955111e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 -8.48600000e-04 -1.65360702e-12 7.09286701e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239356e-03 7.18197378e-01 3.12874865e+03 -8.48700000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.48800000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.48900000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49000000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49100000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49200000e-04 -1.65360702e-12 7.09286700e-02 5.55494820e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49300000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49400000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49500000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49600000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955112e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49700000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955113e-02 2.32239355e-03 7.18197378e-01 3.12874865e+03 -8.49800000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065654e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.49900000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50000000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50100000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50200000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50300000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50400000e-04 -1.65360702e-12 7.09286700e-02 5.55494819e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50500000e-04 -1.65360702e-12 7.09286700e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50600000e-04 -1.65360702e-12 7.09286700e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50700000e-04 -1.65360702e-12 7.09286700e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239354e-03 7.18197378e-01 3.12874865e+03 -8.50800000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955113e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.50900000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51000000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51100000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51200000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51300000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51400000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51500000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51600000e-04 -1.65360702e-12 7.09286699e-02 5.55494818e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51700000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065655e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51800000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955114e-02 2.32239353e-03 7.18197378e-01 3.12874865e+03 -8.51900000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955114e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52000000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955114e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52100000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52200000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52300000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52400000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52500000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52600000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52700000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52800000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.52900000e-04 -1.65360702e-12 7.09286699e-02 5.55494817e-02 9.19065656e-02 6.10955115e-02 2.32239352e-03 7.18197378e-01 3.12874865e+03 -8.53000000e-04 -1.65360702e-12 7.09286699e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53100000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53200000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53300000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955115e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53400000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53500000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53600000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53700000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53800000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065656e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.53900000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.54000000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239351e-03 7.18197378e-01 3.12874865e+03 -8.54100000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54200000e-04 -1.65360702e-12 7.09286698e-02 5.55494816e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54300000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54400000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54500000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955116e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54600000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54700000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54800000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.54900000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.55000000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.55100000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.55200000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239350e-03 7.18197378e-01 3.12874865e+03 -8.55300000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.55400000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.55500000e-04 -1.65360702e-12 7.09286698e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.55600000e-04 -1.65360702e-12 7.09286697e-02 5.55494815e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.55700000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.55800000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.55900000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065657e-02 6.10955117e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.56000000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.56100000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.56200000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.56300000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.56400000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239349e-03 7.18197378e-01 3.12874865e+03 -8.56500000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.56600000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.56700000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.56800000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.56900000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57000000e-04 -1.65360702e-12 7.09286697e-02 5.55494814e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57100000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57200000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57300000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955118e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57400000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57500000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57600000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57700000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239348e-03 7.18197378e-01 3.12874865e+03 -8.57800000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.57900000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58000000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58100000e-04 -1.65360702e-12 7.09286697e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58200000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065658e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58300000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58400000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58500000e-04 -1.65360702e-12 7.09286696e-02 5.55494813e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58600000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58700000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955119e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58800000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.58900000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.59000000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239347e-03 7.18197378e-01 3.12874865e+03 -8.59100000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59200000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59300000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59400000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59500000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59600000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59700000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59800000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.59900000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.60000000e-04 -1.65360702e-12 7.09286696e-02 5.55494812e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.60100000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.60200000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955120e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.60300000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239346e-03 7.18197378e-01 3.12874865e+03 -8.60400000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.60500000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.60600000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065659e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.60700000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.60800000e-04 -1.65360702e-12 7.09286696e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.60900000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61000000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61100000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61200000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61300000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61400000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61500000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61600000e-04 -1.65360702e-12 7.09286695e-02 5.55494811e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61700000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955121e-02 2.32239345e-03 7.18197378e-01 3.12874865e+03 -8.61800000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.61900000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62000000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62100000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62200000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62300000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62400000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62500000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62600000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62700000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62800000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.62900000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.63000000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.63100000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065660e-02 6.10955122e-02 2.32239344e-03 7.18197378e-01 3.12874865e+03 -8.63200000e-04 -1.65360702e-12 7.09286695e-02 5.55494810e-02 9.19065661e-02 6.10955122e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63300000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955122e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63400000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63500000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63600000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63700000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63800000e-04 -1.65360702e-12 7.09286695e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.63900000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64000000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64100000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64200000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64300000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64400000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64500000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64600000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239343e-03 7.18197378e-01 3.12874865e+03 -8.64700000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.64800000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.64900000e-04 -1.65360702e-12 7.09286694e-02 5.55494809e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65000000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955123e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65100000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65200000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65300000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65400000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65500000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65600000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65700000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65800000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.65900000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065661e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.66000000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.66100000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.66200000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239342e-03 7.18197378e-01 3.12874865e+03 -8.66300000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.66400000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.66500000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.66600000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.66700000e-04 -1.65360702e-12 7.09286694e-02 5.55494808e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.66800000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955124e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.66900000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67000000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67100000e-04 -1.65360702e-12 7.09286694e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67200000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67300000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67400000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67500000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67600000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67700000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67800000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239341e-03 7.18197378e-01 3.12874865e+03 -8.67900000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68000000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68100000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68200000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68300000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68400000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68500000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68600000e-04 -1.65360702e-12 7.09286693e-02 5.55494807e-02 9.19065662e-02 6.10955125e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68700000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065662e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68800000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065662e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.68900000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.69000000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.69100000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.69200000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.69300000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.69400000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239340e-03 7.18197378e-01 3.12874865e+03 -8.69500000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.69600000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.69700000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.69800000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.69900000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70000000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70100000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70200000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70300000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70400000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70500000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955126e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70600000e-04 -1.65360702e-12 7.09286693e-02 5.55494806e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70700000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70800000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.70900000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.71000000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.71100000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.71200000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239339e-03 7.18197378e-01 3.12874865e+03 -8.71300000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.71400000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.71500000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.71600000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.71700000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.71800000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.71900000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72000000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065663e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72100000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72200000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72300000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72400000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72500000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72600000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955127e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72700000e-04 -1.65360702e-12 7.09286692e-02 5.55494805e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72800000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.72900000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.73000000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239338e-03 7.18197378e-01 3.12874865e+03 -8.73100000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73200000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73300000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73400000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73500000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73600000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73700000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73800000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.73900000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74000000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74100000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74200000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74300000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74400000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74500000e-04 -1.65360702e-12 7.09286692e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74600000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74700000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955128e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74800000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955129e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.74900000e-04 -1.65360702e-12 7.09286691e-02 5.55494804e-02 9.19065664e-02 6.10955129e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.75000000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239337e-03 7.18197378e-01 3.12874865e+03 -8.75100000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75200000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75300000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75400000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065664e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75500000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75600000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75700000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75800000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.75900000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76000000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76100000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76200000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76300000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76400000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76500000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76600000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76700000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76800000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.76900000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.77000000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955129e-02 2.32239336e-03 7.18197378e-01 3.12874865e+03 -8.77100000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77200000e-04 -1.65360702e-12 7.09286691e-02 5.55494803e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77300000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77400000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77500000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77600000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77700000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77800000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.77900000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78000000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78100000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78200000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78300000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78400000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78500000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78600000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78700000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78800000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.78900000e-04 -1.65360702e-12 7.09286691e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.79000000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.79100000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239335e-03 7.18197378e-01 3.12874865e+03 -8.79200000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065665e-02 6.10955130e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79300000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955130e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79400000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955130e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79500000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79600000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79700000e-04 -1.65360702e-12 7.09286690e-02 5.55494802e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79800000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.79900000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80000000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80100000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80200000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80300000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80400000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80500000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80600000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80700000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80800000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.80900000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.81000000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.81100000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.81200000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.81300000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.81400000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239334e-03 7.18197378e-01 3.12874865e+03 -8.81500000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.81600000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.81700000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.81800000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.81900000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955131e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82000000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82100000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82200000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82300000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82400000e-04 -1.65360702e-12 7.09286690e-02 5.55494801e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82500000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82600000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82700000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82800000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.82900000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83000000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83100000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83200000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83300000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83400000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065666e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83500000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83600000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83700000e-04 -1.65360702e-12 7.09286690e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83800000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239333e-03 7.18197378e-01 3.12874865e+03 -8.83900000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84000000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84100000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84200000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84300000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84400000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84500000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84600000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84700000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955132e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84800000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.84900000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.85000000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.85100000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.85200000e-04 -1.65360702e-12 7.09286689e-02 5.55494800e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874865e+03 -8.85300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.85400000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.85500000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.85600000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.85700000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.85800000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.85900000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.86000000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.86100000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.86200000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.86300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.86400000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239332e-03 7.18197378e-01 3.12874866e+03 -8.86500000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.86600000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.86700000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.86800000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.86900000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87000000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87100000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87200000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87400000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87500000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87600000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955133e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87700000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87800000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.87900000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88000000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88100000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065667e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88200000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88300000e-04 -1.65360702e-12 7.09286689e-02 5.55494799e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88400000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88500000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88600000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88700000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88800000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.88900000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.89000000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.89100000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239331e-03 7.18197378e-01 3.12874866e+03 -8.89200000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89300000e-04 -1.65360702e-12 7.09286689e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89400000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89500000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89600000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89700000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89800000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.89900000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90000000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90100000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90200000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90300000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90400000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90500000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90600000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90700000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90800000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955134e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.90900000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91000000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91100000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91200000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91300000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91400000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91500000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91600000e-04 -1.65360702e-12 7.09286688e-02 5.55494798e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.91900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.92000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.92100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239330e-03 7.18197378e-01 3.12874866e+03 -8.92200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92400000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92500000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92600000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.92900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93400000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93500000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065668e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93600000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.93900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955135e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94400000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94500000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94600000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94700000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94800000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.94900000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.95000000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.95100000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.95200000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239329e-03 7.18197378e-01 3.12874866e+03 -8.95300000e-04 -1.65360702e-12 7.09286688e-02 5.55494797e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.95400000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.95500000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.95600000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.95700000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.95800000e-04 -1.65360702e-12 7.09286688e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.95900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96400000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96500000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96600000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96700000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96800000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.96900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97400000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97500000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97600000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97700000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97800000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.97900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955136e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98400000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98500000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98600000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98700000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239328e-03 7.18197378e-01 3.12874866e+03 -8.98800000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.98900000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99000000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99100000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99200000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99300000e-04 -1.65360702e-12 7.09286687e-02 5.55494796e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065669e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -8.99900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.00900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.01900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955137e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239327e-03 7.18197378e-01 3.12874866e+03 -9.02600000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.02700000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.02800000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.02900000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03000000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03100000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03200000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03300000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03400000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03500000e-04 -1.65360702e-12 7.09286687e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03600000e-04 -1.65360702e-12 7.09286686e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03700000e-04 -1.65360702e-12 7.09286686e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03800000e-04 -1.65360702e-12 7.09286686e-02 5.55494795e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.03900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.04900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.05900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239326e-03 7.18197378e-01 3.12874866e+03 -9.06900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065670e-02 6.10955138e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.07900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08000000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08100000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08200000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08300000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08400000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08500000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08600000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08700000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08800000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.08900000e-04 -1.65360702e-12 7.09286686e-02 5.55494794e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.09900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.10900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239325e-03 7.18197378e-01 3.12874866e+03 -9.11700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.11800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.11900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12400000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12500000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955139e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12600000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12700000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12800000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.12900000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13000000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13100000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13200000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13300000e-04 -1.65360702e-12 7.09286686e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13400000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13500000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13600000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13700000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13800000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.13900000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14000000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14100000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14200000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14300000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14400000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14500000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14600000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14700000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14800000e-04 -1.65360702e-12 7.09286685e-02 5.55494793e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.14900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.15900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065671e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.16900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.17000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239324e-03 7.18197378e-01 3.12874866e+03 -9.17100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.17900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955140e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.18900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.19900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20800000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.20900000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21000000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21100000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21200000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21300000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21400000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21500000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21600000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21700000e-04 -1.65360702e-12 7.09286685e-02 5.55494792e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.21900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.22900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.23000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.23100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.23200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.23300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.23400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239323e-03 7.18197378e-01 3.12874866e+03 -9.23500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.23600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.23700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.23800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.23900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.24900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25600000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25700000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25800000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.25900000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26000000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26100000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26200000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26300000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26400000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955141e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26500000e-04 -1.65360702e-12 7.09286685e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.26900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27300000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27400000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27500000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.27900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28300000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28400000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28500000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065672e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.28900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29300000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29400000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29500000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29600000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29700000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29800000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.29900000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30000000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30100000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30200000e-04 -1.65360702e-12 7.09286684e-02 5.55494791e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.30900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.31000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239322e-03 7.18197378e-01 3.12874866e+03 -9.31100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.31900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.32900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.33900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.34900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955142e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.35900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.36900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.37900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.38900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.39900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.40000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.40100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.40200000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.40300000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.40400000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239321e-03 7.18197378e-01 3.12874866e+03 -9.40500000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.40600000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.40700000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.40800000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.40900000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41000000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41100000e-04 -1.65360702e-12 7.09286684e-02 5.55494790e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.41900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.42900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.43900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.44900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45600000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45700000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45800000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.45900000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46000000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46100000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46200000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065673e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46300000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46400000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46500000e-04 -1.65360702e-12 7.09286684e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.46900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.47900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955143e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.48900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.49900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.50900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.51900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.52900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239320e-03 7.18197378e-01 3.12874866e+03 -9.53000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.53900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.54900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55200000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55300000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55400000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55500000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55600000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55700000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55800000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.55900000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56000000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56100000e-04 -1.65360702e-12 7.09286683e-02 5.55494789e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.56900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.57900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.58900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.59900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.60900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.61900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.62900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.63900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.64900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.65900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955144e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.66900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.67900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.68900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.69900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.70900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239319e-03 7.18197378e-01 3.12874866e+03 -9.71000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.71900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.72900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.73900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.74900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.75900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.76900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.77900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065674e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.78900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79100000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79200000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79300000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79400000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79500000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79600000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79700000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79800000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.79900000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80000000e-04 -1.65360702e-12 7.09286683e-02 5.55494788e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.80900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.81900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.82900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.83900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.84900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.85900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.86900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87200000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87300000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87400000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87500000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87600000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87700000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87800000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.87900000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88000000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88100000e-04 -1.65360702e-12 7.09286683e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.88900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.89900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.90900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.91900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.92900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.93900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.94900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.95900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.96900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.97900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.98900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955145e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99000000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99100000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99200000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99300000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99400000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99500000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99600000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99700000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99800000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 -9.99900000e-04 -1.65360702e-12 7.09286682e-02 5.55494787e-02 9.19065675e-02 6.10955146e-02 2.32239318e-03 7.18197378e-01 3.12874866e+03 diff --git a/test/test_eos.py b/test/test_eos.py index 3f9b8b259..2b41a488d 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -30,7 +30,6 @@ import pyopencl as cl import pyopencl.clrandom import pyopencl.clmath -import pyopencl.tools as cl_tools import pytest from pytools.obj_array import make_obj_array @@ -188,195 +187,6 @@ def inf_norm(x): assert err_diff < 1.0e-12 -@pytest.mark.parametrize(("mechname", "rate_tol"), - [("uiuc", 1e-12), ]) -@pytest.mark.parametrize("y0", [0, 1]) -def do_not_test_lazy_pyro(ctx_factory, mechname, rate_tol, y0): - """Test lazy pyrometheus mechanisms. - - This test reproduces a pyrometheus-native test in the MIRGE context using both - eager and lazy evaluation protocols. The purpose of this test is making sure that - lazy evaluation mode is getting the same answers as eager (within a tolerance). - - Some sanity checks to make sure eager is matching Cantera are also performed. - """ - cl_ctx = ctx_factory() - queue = cl.CommandQueue(cl_ctx) - actx_eager = PyOpenCLArrayContext( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - actx_lazy = PytatoPyOpenCLArrayContext( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) - - dim = 2 - nel_1d = 2 - - from meshmode.mesh.generation import generate_regular_rect_mesh - mesh = generate_regular_rect_mesh( - a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim - ) - - order = 2 - - logger.info(f"Number of elements {mesh.nelements}") - - dcoll_eager = create_discretization_collection(actx_eager, mesh, order=order) - dcoll_lazy = create_discretization_collection(actx_lazy, mesh, order=order) - - # Pyrometheus initialization - mech_input = get_mechanism_input(mechname) - sol = cantera.Solution(name="gas", yaml=mech_input) - - from mirgecom.thermochemistry import make_pyrometheus_mechanism_class - pyro_eager = make_pyrometheus_mechanism_class(sol)(actx_eager.np) - pyro_lazy = make_pyrometheus_mechanism_class(sol)(actx_lazy.np) - - nspecies = pyro_eager.num_species - print(f"PyrometheusMixture::NumSpecies = {nspecies}") - - press0 = 101500.0 - temp0 = 300.0 - y0s = np.zeros(shape=(nspecies,)) - for i in range(nspecies-1): - y0s[i] = y0 / (10.0 ** (i + 1)) - y0s[-1] = 1.0 - np.sum(y0s[:-1]) - - def get_temperature_lazy(energy, y, tguess): - return make_obj_array( - [pyro_lazy.get_temperature(energy, y, tguess)] - ) - - temp_lazy = actx_lazy.compile(get_temperature_lazy) - - for fac in range(1, 11): - pressin = fac * press0 - tempin = fac * temp0 - - print(f"Testing (t,P) = ({tempin}, {pressin})") - cantera_soln = cantera.Solution(phase_id="gas", source=mech_input) - cantera_soln.TPY = tempin, pressin, y0s - cantera_soln.equilibrate("UV") - can_t, can_rho, can_y = cantera_soln.TDY - can_p = cantera_soln.P - can_e = cantera_soln.int_energy_mass - can_k = cantera_soln.forward_rate_constants - can_c = cantera_soln.concentrations - - # Chemistry functions for testing pyro chem - can_r = cantera_soln.net_rates_of_progress - can_omega = cantera_soln.net_production_rates - - ones_lazy = dcoll_lazy.zeros(actx_lazy) + 1.0 - tin_lazy = can_t * ones_lazy - pin_lazy = can_p * ones_lazy - yin_lazy = make_obj_array([can_y[i] * ones_lazy for i in range(nspecies)]) - - ones_eager = dcoll_eager.zeros(actx_eager) + 1.0 - tin_eager = can_t * ones_eager - pin_eager = can_p * ones_eager - yin_eager = make_obj_array([can_y[i] * ones_eager for i in range(nspecies)]) - - pyro_rho_eager = pyro_eager.get_density(pin_eager, tin_eager, yin_eager) - pyro_rho_lazy = pyro_lazy.get_density(pin_lazy, tin_lazy, yin_lazy) - - from arraycontext import to_numpy - rho_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_rho_lazy)) - ) - - pyro_e_eager = pyro_eager.get_mixture_internal_energy_mass(tin_eager, - yin_eager) - pyro_e_lazy = pyro_lazy.get_mixture_internal_energy_mass(tin_lazy, yin_lazy) - e_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_e_lazy)) - ) - - # These both take 5 Newton iterations - pyro_t_eager = pyro_eager.get_temperature(pyro_e_eager, tin_eager, yin_eager) - pyro_t_lazy = temp_lazy(pyro_e_lazy, tin_lazy, yin_lazy) - - t_lazy = to_numpy(actx_eager.thaw(actx_lazy.freeze(pyro_t_lazy))) - - pyro_p_eager = pyro_eager.get_pressure(pyro_rho_eager, tin_eager, yin_eager) - pyro_c_eager = pyro_eager.get_concentrations(pyro_rho_eager, yin_eager) - pyro_k_eager = pyro_eager.get_fwd_rate_coefficients(pyro_t_eager, - pyro_c_eager) - - pyro_p_lazy = pyro_lazy.get_pressure(pyro_rho_lazy, tin_lazy, yin_lazy) - pyro_c_lazy = pyro_lazy.get_concentrations(pyro_rho_lazy, yin_lazy) - pyro_k_lazy = pyro_lazy.get_fwd_rate_coefficients(pyro_t_lazy, pyro_c_lazy) - - c_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_c_lazy)) - ) - p_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_p_lazy)) - ) - k_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_k_lazy)) - ) - - # Pyro chemistry functions - pyro_r_eager = pyro_eager.get_net_rates_of_progress(pyro_t_eager, - pyro_c_eager) - pyro_omega_eager = pyro_eager.get_net_production_rates(pyro_rho_eager, - pyro_t_eager, - yin_eager) - - pyro_r_lazy = pyro_lazy.get_net_rates_of_progress(pyro_t_lazy, - pyro_c_lazy) - pyro_omega_lazy = pyro_lazy.get_net_production_rates(pyro_rho_lazy, - pyro_t_lazy, - yin_lazy) - r_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_r_lazy)) - ) - omega_lazy = to_numpy( - actx_eager.thaw(actx_lazy.freeze(pyro_omega_lazy)) - ) - - print(f"can(rho, y, p, t, e, k) = ({can_rho}, {can_y}, " - f"{can_p}, {can_t}, {can_e}, {can_k})") - print(f"pyro_eager(rho, y, p, t, e, k) = ({pyro_rho_eager}, {y0s}, " - f"{pyro_p_eager}, {pyro_t_eager}, {pyro_e_eager}, {pyro_k_eager})") - print(f"pyro_lazy(rho, y, p, t, e, k) = ({rho_lazy}, {y0s}, " - f"{p_lazy}, {t_lazy}, {e_lazy}, {k_lazy})") - - # For pyro chem testing - print(f"{can_r=}") - print(f"{pyro_r_eager=}") - print(f"{r_lazy=}") - print(f"{can_omega=}") - print(f"{pyro_omega_eager=}") - print(f"{omega_lazy=}") - - tol = 1e-10 - assert dcoll_eager.norm((pyro_c_eager - c_lazy), np.inf) < tol - assert dcoll_eager.norm((pyro_t_eager - t_lazy), np.inf) < tol - assert dcoll_eager.norm((pyro_rho_eager - rho_lazy), np.inf) < tol - assert dcoll_eager.norm((pyro_p_eager - p_lazy), np.inf) < 1e-9 - assert dcoll_eager.norm((pyro_e_eager - e_lazy), np.inf) < 1e-5 - assert dcoll_eager.norm((pyro_k_eager - k_lazy), np.inf) < 1e-5 - - assert dcoll_eager.norm((pyro_c_eager - can_c) / can_c, np.inf) < 1e-14 - assert dcoll_eager.norm((pyro_t_eager - can_t) / can_t, np.inf) < 1e-14 - assert dcoll_eager.norm((pyro_rho_eager - can_rho) / can_rho, np.inf) < 1e-14 - assert dcoll_eager.norm((pyro_p_eager - can_p) / can_p, np.inf) < 1e-14 - assert dcoll_eager.norm((pyro_e_eager - can_e) / can_e, np.inf) < 1e-6 - assert dcoll_eager.norm((pyro_k_eager - can_k) / can_k, np.inf) < 1e-10 - - # Pyro chem test comparisons - for i, rate in enumerate(can_r): - assert dcoll_eager.norm((pyro_r_eager[i] - r_lazy[i]), np.inf) < tol - assert dcoll_eager.norm((pyro_r_eager[i] - rate), np.inf) < rate_tol - for i, rate in enumerate(can_omega): - assert dcoll_eager.norm( - (pyro_omega_eager[i] - omega_lazy[i]), np.inf) < tol - assert dcoll_eager.norm((pyro_omega_eager[i] - rate), np.inf) < rate_tol - - @pytest.mark.parametrize(("mechname", "rate_tol"), [("uiuc", 1e-12), ("sandiego", 1e-8)]) From d2011b4bb6bd220ac1dd0d6cf657540c49b9aecc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 10 Apr 2023 13:30:37 -0500 Subject: [PATCH 793/873] Remove stale UserQuantities --- mirgecom/logging_quantities.py | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index 8d8e246ea..5fcc4c911 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -261,29 +261,6 @@ def set_state_vars(self, state_vars: np.ndarray) -> None: # }}} -# {{{ User-defined quantities - - -class LogUserQuantity(LogQuantity): - """Logging support for arbitrary user quantities.""" - - def __init__(self, name="user_quantity", value=None, user_function=None) -> None: - """Initialize the user's log quantity.""" - LogQuantity.__init__(self, name, "1") - self._value = value - self._uf = user_function - - def set_quantity(self, value) -> None: - """Set the user quantity to be used in calculating the logged value.""" - self._value = value - - def __call__(self) -> float: - """Return the value of cfl.""" - if self._uf: - return self._uf(self._value) - return self._value - -# }}} # {{{ Discretization-based quantities From be6b9c681f6e35cb413b40aa64dd3aaf91201af4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Sat, 15 Apr 2023 01:14:18 -0500 Subject: [PATCH 794/873] update per inducers thg revival --- mirgecom/eos.py | 126 +++++++++++++++++++ mirgecom/euler.py | 170 ++++++++++++++++++++++++++ mirgecom/gas_model.py | 273 ++++++++++++++++++++++++++++++++++++++++++ mirgecom/inviscid.py | 115 +++++++++++++++++- 4 files changed, 683 insertions(+), 1 deletion(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 032b89721..2a06fcbcf 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -531,6 +531,45 @@ def get_internal_energy(self, temperature, species_mass_fractions=None): """ return self._gas_const * temperature / (self._gamma - 1) + def conservative_to_entropy_vars(self, cv, temperature): + """Compute the entropy variables from conserved variables. + + Converts from conserved variables (density, momentum, total energy) + into entropy variables. + + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + The full fluid conserved and thermal state + + Returns + ------- + ConservedVars + The entropy variables + """ + dim = cv.dim + actx = cv.array_context + + rho = cv.mass + v = cv.velocity + v2 = np.dot(v, v) + p = self.pressure(cv=cv, temperature=temperature) + gamma = self.gamma(cv=cv, temperature=temperature) + rho_y = cv.species_mass + + # Hrm? How about let the EOS return the entropy vars? + s = actx.np.log(p) - gamma*actx.np.log(rho) + s_gam = (gamma - s) / (gamma - 1) + + ev_mass = s_gam - 0.5 * rho * v2 / p + ev_energy = -rho / p + ev_mom = cv.momentum / p + ev_spec = s_gam - 0.5 * rho_y * v2 / p + + return make_conserved( + dim=dim, mass=ev_mass, energy=ev_energy, momentum=ev_mom, + species_mass=ev_spec) + class PyrometheusMixture(MixtureEOS): r"""Ideal gas mixture ($p = \rho{R}_\mathtt{mix}{T}$). @@ -938,3 +977,90 @@ def get_species_source_terms(self, cv: ConservedVars, temperature): return make_conserved(dim, rho_source, energy_source, mom_source, species_sources) + + def conservative_to_entropy_vars(self, cv, temperature): + """Compute the entropy variables from conserved variables. + + Converts from conserved variables (density, momentum, total energy) + into entropy variables. + + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + The full fluid conserved and thermal state + + Returns + ------- + ConservedVars + The entropy variables + """ + dim = cv.dim + actx = cv.array_context + + rho = cv.mass + v = cv.velocity + v2 = np.dot(v, v) + p = self.pressure(cv=cv, temperature=temperature) + gamma = self.gamma(cv=cv, temperature=temperature) + rho_y = cv.species_mass + + # Hrm? How about let the EOS return the entropy vars? + s = actx.np.log(p) - gamma*actx.np.log(rho) + s_gam = (gamma - s) / (gamma - 1) + + ev_mass = s_gam - 0.5 * rho * v2 / p + ev_energy = -rho / p + ev_mom = cv.momentum / p + ev_spec = s_gam - 0.5 * rho_y * v2 / p + + return make_conserved( + dim=dim, mass=ev_mass, energy=ev_energy, momentum=ev_mom, + species_mass=ev_spec) + + +def entropy_to_conservative_vars(self, cv: ConservedVars, ev: ConservedVars, + temperature): + """Compute the conserved variables from entropy variables *ev*. + Converts from entropy variables into conserved variables + (density, momentum, total energy). + Parameters + ---------- + ev: ConservedVars + The entropy variables + Returns + ------- + ConservedVars + The fluid conserved variables + """ + from mirgecom.fluid import make_conserved + + dim = ev.dim + actx = ev.array_context + gamma = self.gamma(cv=cv, temperature=temperature) + + # See Hughes, Franca, Mallet (1986) A new finite element + # formulation for CFD: (DOI: 10.1016/0045-7825(86)90127-1) + inv_gamma_minus_one = 1/(gamma - 1) + + # Convert to entropy `-rho * s` used by Hughes, France, Mallet (1986) + ev_state = ev * (gamma - 1) + + v1 = ev_state.mass + v234 = ev_state.momentum + v5 = ev_state.energy + v6ns = ev_state.species_mass + + v_square = sum(v**2 for v in v234) + s = gamma - v1 + v_square/(2*v5) + s_species = gamma - v6ns + v_square/(2*v5) + iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) + rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) + rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) + + return make_conserved( + dim, + mass=-rho_iota * v5, + energy=rho_iota * (1 - v_square/(2*v5)), + momentum=rho_iota * v234, + species_mass=-rho_iota_species * v5 + ) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index e583367a5..f463d44f2 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -158,6 +158,176 @@ def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, inviscid_flux_vol, inviscid_flux_bnd) +def entropy_stable_euler_operator( + discr, state, gas_model, boundaries, time=0.0, + inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, + quadrature_tag=None): + """Compute RHS of the Euler flow equations using flux-differencing. + + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + + Fluid state object with the conserved state, and dependent + quantities. + + boundaries + + Dictionary of boundary functions, one for each valid btag + + time + + Time + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + Physical gas model including equation of state, transport, + and kinetic properties as required by fluid state + + quadrature_tag + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + The default value is *None*. + + Returns + ------- + :class:`mirgecom.fluid.ConservedVars` + + Agglomerated object array of DOF arrays representing the RHS of the Euler + flow equations. + """ + dd_base = as_dofdesc("vol") + dd_vol = DOFDesc("vol", quadrature_tag) + dd_faces = DOFDesc("all_faces", quadrature_tag) + # NOTE: For single-gas this is just a fixed scalar. + # However, for mixtures, gamma is a DOFArray. For now, + # we are re-using gamma from here and *not* recomputing + # after applying entropy projections. It is unclear at this + # time whether it's strictly necessary or if this is good enough + gamma = gas_model.eos.gamma(state.cv, state.temperature) + + # Interpolate state to vol quad grid + state_quad = project_fluid_state(discr, "vol", dd_vol, state, gas_model) + + # Compute the projected (nodal) entropy variables + entropy_vars = volume_quadrature_project( + discr, dd_vol, + # Map to entropy variables + conservative_to_entropy_vars(gamma, state_quad)) + + modified_conserved_fluid_state = \ + make_entropy_projected_fluid_state(discr, dd_vol, dd_faces, + state, entropy_vars, gamma, gas_model) + + def _reshape(shape, ary): + if not isinstance(ary, DOFArray): + return map_array_container(partial(_reshape, shape), ary) + + return DOFArray(ary.array_context, data=tuple( + subary.reshape(grp.nelements, *shape) + # Just need group for determining the number of elements + for grp, subary in zip(discr.discr_from_dd("vol").groups, ary))) + + flux_matrices = entropy_conserving_flux_chandrashekar( + gas_model, + _reshape((1, -1), modified_conserved_fluid_state), + _reshape((-1, 1), modified_conserved_fluid_state)) + + # Compute volume derivatives using flux differencing + inviscid_flux_vol = \ + -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) + + def interp_to_surf_quad(utpair): + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + return TracePair( + local_dd_quad, + interior=op.project(discr, local_dd, local_dd_quad, utpair.int), + exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + ) + + tseed_interior_pairs = None + if state.is_mixture: + # If this is a mixture, we need to exchange the temperature field because + # mixture pressure (used in the inviscid flux calculations) depends on + # temperature and we need to seed the temperature calculation for the + # (+) part of the partition boundary with the remote temperature data. + tseed_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.temperature) + ] + + def interp_to_surf_modified_conservedvars(gamma, utpair): + """Takes a trace pair containing the projected entropy variables + and converts them into conserved variables on the quadrature grid. + """ + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + # Interpolate entropy variables to the surface quadrature grid + vtilde_tpair = op.project(discr, local_dd, local_dd_quad, utpair) + if isinstance(gamma, DOFArray): + gamma = op.project(discr, dd_base, local_dd_quad, gamma) + return TracePair( + local_dd_quad, + # Convert interior and exterior states to conserved variables + interior=entropy_to_conservative_vars(gamma, vtilde_tpair.int), + exterior=entropy_to_conservative_vars(gamma, vtilde_tpair.ext) + ) + + cv_interior_pairs = [ + # Compute interior trace pairs using modified conservative + # variables on the quadrature grid + # (obtaining state from projected entropy variables) + interp_to_surf_modified_conservedvars(gamma, tpair) + for tpair in interior_trace_pairs(discr, entropy_vars) + ] + + boundary_states = { + # TODO: Use modified conserved vars as the input state? + # Would need to make an "entropy-projection" variant + # of *project_fluid_state* + btag: project_fluid_state( + discr, dd_base, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + state, gas_model) for btag in boundaries + } + + # Interior interface state pairs consisting of modified conservative + # variables and the corresponding temperature seeds + interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, + gas_model, + tseed_interior_pairs) + + # Surface contributions + inviscid_flux_bnd = ( + + # Domain boundaries + sum(boundaries[btag].inviscid_divergence_flux( + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model, + state_minus=boundary_states[btag], + time=time, + numerical_flux_func=inviscid_numerical_flux_func) + for btag in boundaries) + + # Interior boundaries (using entropy stable numerical flux) + + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, + numerical_flux_func=inviscid_numerical_flux_func) + for state_pair in interior_states) + ) + + return op.inverse_mass( + discr, + inviscid_flux_vol - op.face_mass(discr, dd_faces, inviscid_flux_bnd) + ) + # By default, run unitless NAME_TO_UNITS = { "mass": "", diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 7ae828067..d887dd628 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -743,3 +743,276 @@ def replace_fluid_state( smoothness_beta=state.smoothness_beta, limiter_func=limiter_func, limiter_dd=limiter_dd) + + +def make_entropy_projected_fluid_state( + discr, dd_vol, dd_faces, state, entropy_vars, gamma, gas_model): + + from grudge.interpolation import volume_and_surface_quadrature_interpolation + + # Interpolate to the volume and surface (concatenated) quadrature + # discretizations: v = [v_vol, v_surf] + ev_quad = volume_and_surface_quadrature_interpolation( + discr, dd_vol, dd_faces, entropy_vars) + + temperature_seed = None + if state.is_mixture: + temperature_seed = volume_and_surface_quadrature_interpolation( + discr, dd_vol, dd_faces, state.temperature) + gamma = volume_and_surface_quadrature_interpolation( + discr, dd_vol, dd_faces, gamma) + + # Convert back to conserved varaibles and use to make the new fluid state + cv_modified = entropy_to_conservative_vars(gamma, ev_quad) + + return make_fluid_state(cv=cv_modified, + gas_model=gas_model, + temperature_seed=temperature_seed) + + +def conservative_to_entropy_vars(gamma, state): + """Compute the entropy variables from conserved variables. + Converts from conserved variables (density, momentum, total energy) + into entropy variables. + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + The full fluid conserved and thermal state + Returns + ------- + ConservedVars + The entropy variables + """ + from mirgecom.fluid import make_conserved + + dim = state.dim + actx = state.array_context + + rho = state.mass_density + u = state.velocity + p = state.pressure + rho_species = state.species_mass_density + + u_square = sum(v ** 2 for v in u) + s = actx.np.log(p) - gamma*actx.np.log(rho) + rho_p = rho / p + rho_species_p = rho_species / p + + return make_conserved( + dim, + mass=((gamma - s)/(gamma - 1)) - 0.5 * rho_p * u_square, + energy=-rho_p, + momentum=rho_p * u, + species_mass=((gamma - s)/(gamma - 1)) - 0.5 * rho_species_p * u_square + ) + + +def entropy_to_conservative_vars(gamma, ev: ConservedVars): + """Compute the conserved variables from entropy variables *ev*. + Converts from entropy variables into conserved variables + (density, momentum, total energy). + Parameters + ---------- + ev: ConservedVars + The entropy variables + Returns + ------- + ConservedVars + The fluid conserved variables + """ + from mirgecom.fluid import make_conserved + + dim = ev.dim + actx = ev.array_context + # See Hughes, Franca, Mallet (1986) A new finite element + # formulation for CFD: (DOI: 10.1016/0045-7825(86)90127-1) + inv_gamma_minus_one = 1/(gamma - 1) + + # Convert to entropy `-rho * s` used by Hughes, France, Mallet (1986) + ev_state = ev * (gamma - 1) + v1 = ev_state.mass + v234 = ev_state.momentum + v5 = ev_state.energy + v6ns = ev_state.species_mass + + v_square = sum(v**2 for v in v234) + s = gamma - v1 + v_square/(2*v5) + s_species = gamma - v6ns + v_square/(2*v5) + iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) + rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) + rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) + + return make_conserved( + dim, + mass=-rho_iota * v5, + energy=rho_iota * (1 - v_square/(2*v5)), + momentum=rho_iota * v234, + species_mass=-rho_iota_species * v5 + ) + + +def make_entropy_stable_operator_fluid_states( + dcoll, volume_state, entropy_vars, dd_vol, dd_faces, gas_model, + boundaries, quadrature_tag=DISCR_TAG_BASE, comm_tag=None, limiter_func=None): + """Prepare gas model-consistent fluid states for use in fluid operators. + + This routine prepares a model-consistent fluid state for each of the volume and + all interior and domain boundaries, using the quadrature representation if + one is given. The input *volume_state* is projected to the quadrature domain + (if any), along with the model-consistent dependent quantities. + + .. note:: + + When running MPI-distributed, volume state conserved quantities + (ConservedVars), and for mixtures, temperatures will be communicated over + partition boundaries inside this routine. + + Parameters + ---------- + dcoll: :class:`~grudge.discretization.DiscretizationCollection` + + A discretization collection encapsulating the DG elements + + volume_state: :class:`~mirgecom.gas_model.FluidState` + + The full fluid conserved and thermal state + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + The physical model constructs for the gas_model + + boundaries + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag`. + + quadrature_tag + An identifier denoting a particular quadrature discretization to use during + operator evaluations. + + dd: grudge.dof_desc.DOFDesc + the DOF descriptor of the discretization on which *volume_state* lives. Must + be a volume on the base discretization. + + comm_tag: Hashable + Tag for distributed communication + + limiter_func: + + Callable function to limit the fluid conserved quantities to physically + valid and realizable values. + + Returns + ------- + (:class:`~mirgecom.gas_model.FluidState`, :class:`~grudge.trace_pair.TracePair`, + dict) + + Thermally consistent fluid state for the volume, fluid state trace pairs + for the internal boundaries, and a dictionary of fluid states keyed by + boundary domain tags in *boundaries*, all on the quadrature grid (if + specified). + """ + boundaries = normalize_boundaries(boundaries) + + # ================ + from grudge.interpolation import volume_and_surface_quadrature_interpolation + + # Interpolate to the volume and surface (concatenated) quadrature + # discretizations: v = [v_vol, v_surf] + ev_quad = volume_and_surface_quadrature_interpolation( + discr, dd_vol, dd_faces, entropy_vars) + + temperature_seed = None + if state.is_mixture: + temperature_seed = volume_and_surface_quadrature_interpolation( + discr, dd_vol, dd_faces, state.temperature) + gamma = volume_and_surface_quadrature_interpolation( + discr, dd_vol, dd_faces, gamma) + + # Convert back to conserved varaibles and use to make the new fluid state + cv_modified = entropy_to_conservative_vars(gamma, ev_quad) + + # return make_fluid_state(cv=cv_modified, + # gas_model=gas_model, + # temperature_seed=temperature_seed) + + # ==== 0000 + if not isinstance(dd.domain_tag, VolumeDomainTag): + raise TypeError("dd must represent a volume") + if dd.discretization_tag != DISCR_TAG_BASE: + raise ValueError("dd must belong to the base discretization") + + dd_vol = dd + dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) + + # project pair to the quadrature discretization and update dd to quad + interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll, quadrature_tag) + + domain_boundary_states_quad = { + bdtag: project_fluid_state(dcoll, dd_vol, + dd_vol_quad.with_domain_tag(bdtag), + volume_state, gas_model, limiter_func=limiter_func) + for bdtag in boundaries + } + + # performs MPI communication of CV if needed + cv_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, volume_state.cv, volume_dd=dd_vol, + comm_tag=(_FluidCVTag, comm_tag)) + ] + + tseed_interior_pairs = None + if volume_state.is_mixture: + # If this is a mixture, we need to exchange the temperature field because + # mixture pressure (used in the inviscid flux calculations) depends on + # temperature and we need to seed the temperature calculation for the + # (+) part of the partition boundary with the remote temperature data. + tseed_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, volume_state.temperature, volume_dd=dd_vol, + comm_tag=(_FluidTemperatureTag, comm_tag))] + + smoothness_mu_interior_pairs = None + if volume_state.smoothness_mu is not None: + smoothness_mu_interior_pairs = [ + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, volume_state.smoothness_mu, volume_dd=dd_vol, + tag=(_FluidSmoothnessMuTag, comm_tag))] + smoothness_kappa_interior_pairs = None + if volume_state.smoothness_kappa is not None: + smoothness_kappa_interior_pairs = [ + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, volume_state.smoothness_kappa, volume_dd=dd_vol, + tag=(_FluidSmoothnessKappaTag, comm_tag))] + smoothness_beta_interior_pairs = None + if volume_state.smoothness_beta is not None: + smoothness_beta_interior_pairs = [ + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, volume_state.smoothness_beta, volume_dd=dd_vol, + tag=(_FluidSmoothnessBetaTag, comm_tag))] + + interior_boundary_states_quad = \ + make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, + tseed_interior_pairs, + smoothness_mu_interior_pairs, + smoothness_kappa_interior_pairs, + smoothness_beta_interior_pairs, + limiter_func=limiter_func) + + # Interpolate the fluid state to the volume quadrature grid + # (this includes the conserved and dependent quantities) + volume_state_quad = project_fluid_state(dcoll, dd_vol, dd_vol_quad, + volume_state, gas_model, + limiter_func=limiter_func) + + return \ + volume_state_quad, interior_boundary_states_quad, domain_boundary_states_quad diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index c245ee635..e96010822 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -7,6 +7,8 @@ .. autofunction:: inviscid_facial_flux_rusanov .. autofunction:: inviscid_facial_flux_hll .. autofunction:: inviscid_flux_on_element_boundary +.. autofunction:: entropy_conserving_flux_chandrashekar +.. autofunciton:: entropy_stable_facial_flux Inviscid Time Step Computation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -47,9 +49,16 @@ DISCR_TAG_BASE, ) import grudge.op as op -from mirgecom.fluid import make_conserved +from mirgecom.fluid import ( + make_conserved, + ConservedVars +) from mirgecom.utils import normalize_boundaries +from arraycontext import outer +from meshmode.dof_array import DOFArray +from pytools.obj_array import make_obj_array + def inviscid_flux(state): r"""Compute the inviscid flux vectors from fluid conserved vars *cv*. @@ -388,3 +397,107 @@ def get_inviscid_cfl(dcoll, state, dt): The CFL at each node. """ return dt / get_inviscid_timestep(dcoll, state=state) + + +def entropy_conserving_flux_chandrashekar(gas_model, state_ll, state_rr): + """Compute the entropy conservative fluxes from states *cv_ll* and *cv_rr*. + This routine implements the two-point volume flux based on the entropy + conserving and kinetic energy preserving two-point flux in: + - Chandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite + Volume Schemes for Compressible Euler and Navier-Stokes Equations + [DOI](https://doi.org/10.4208/cicp.170712.010313a) + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + A CV object containing the matrix-valued two-point flux vectors + for each conservation equation. + """ + dim = state_ll.dim + actx = state_ll.array_context + gamma_ll = gas_model.eos.gamma(state_ll.cv, state_ll.temperature) + gamma_rr = gas_model.eos.gamma(state_rr.cv, state_rr.temperature) + + def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): + f2 = (x * (x - 2 * y) + y * y) / (x * (x + 2 * y) + y * y) + return actx.np.where( + actx.np.less(f2, epsilon), + (x + y) / (2 + f2*2/3 + f2*f2*2/5 + f2*f2*f2*2/7), + (y - x) / actx.np.log(y / x) + ) + + # Primitive variables for left and right states + rho_ll = state_ll.mass_density + u_ll = state_ll.velocity + p_ll = state_ll.pressure + rho_species_ll = state_ll.species_mass_density + + rho_rr = state_rr.mass_density + u_rr = state_rr.velocity + p_rr = state_rr.pressure + rho_species_rr = state_rr.species_mass_density + + beta_ll = 0.5 * rho_ll / p_ll + beta_rr = 0.5 * rho_rr / p_rr + specific_kin_ll = 0.5 * sum(v**2 for v in u_ll) + specific_kin_rr = 0.5 * sum(v**2 for v in u_rr) + + rho_avg = 0.5 * (rho_ll + rho_rr) + rho_mean = ln_mean(rho_ll, rho_rr) + rho_species_mean = make_obj_array( + [ln_mean(y_ll_i, y_rr_i) + for y_ll_i, y_rr_i in zip(rho_species_ll, rho_species_rr)]) + + beta_mean = ln_mean(beta_ll, beta_rr) + beta_avg = 0.5 * (beta_ll + beta_rr) + + u_avg = 0.5 * (u_ll + u_rr) + p_mean = 0.5 * rho_avg / beta_avg + velocity_square_avg = specific_kin_ll + specific_kin_rr + + mass_flux = rho_mean * u_avg + momentum_flux = outer(mass_flux, u_avg) + np.eye(dim) * p_mean + gamma = 0.5 * (gamma_ll + gamma_rr) + energy_flux = ( + mass_flux * 0.5 * ( + 1/(gamma - 1)/beta_mean - velocity_square_avg) + + np.dot(momentum_flux, u_avg) + ) + species_mass_flux = rho_species_mean.reshape(-1, 1) * u_avg + + return ConservedVars(mass=mass_flux, + energy=energy_flux, + momentum=momentum_flux, + species_mass=species_mass_flux) + + +def entropy_stable_inviscid_flux_rusanov(state_pair, gas_model, normal, **kwargs): + r"""Return the entropy stable inviscid numerical flux. + This facial flux routine is "entropy stable" in the sense that + it computes the flux average component of the interface fluxes + using an entropy conservative two-point flux + (e.g. :func:`entropy_conserving_flux_chandrashekar`). Additional + dissipation is imposed by penalizing the "jump" of the state across + interfaces. + Parameters + ---------- + state_pair: :class:`~grudge.trace_pair.TracePair` + Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon + which the flux calculation is to be performed + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + A CV object containing the scalar numerical fluxes at the input faces. + """ + from mirgecom.inviscid import entropy_conserving_flux_chandrashekar + + actx = state_pair.int.array_context + flux = entropy_conserving_flux_chandrashekar(gas_model, + state_pair.int, + state_pair.ext) + + # This calculates the local maximum eigenvalue of the flux Jacobian + # for a single component gas, i.e. the element-local max wavespeed |v| + c. + lam = actx.np.maximum(state_pair.int.wavespeed, state_pair.ext.wavespeed) + dissipation = -0.5*lam*outer(state_pair.ext.cv - state_pair.int.cv, normal) + + return (flux + dissipation) @ normal From 26d2873c09a9cdc6bb44ab9b19cf37c5a633e8aa Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 17 Apr 2023 09:57:36 -0500 Subject: [PATCH 795/873] Update EOS to have entropy var conversions. --- mirgecom/eos.py | 139 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 94 insertions(+), 45 deletions(-) diff --git a/mirgecom/eos.py b/mirgecom/eos.py index 2a06fcbcf..aba72fc11 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -570,6 +570,56 @@ def conservative_to_entropy_vars(self, cv, temperature): dim=dim, mass=ev_mass, energy=ev_energy, momentum=ev_mom, species_mass=ev_spec) + def entropy_to_conservative_vars(self, cv: ConservedVars, ev: ConservedVars, + temperature): + """Compute the conserved variables from entropy variables *ev*. + + Converts from entropy variables into conserved variables + (density, momentum, total energy). + + Parameters + ---------- + ev: ConservedVars + The entropy variables + + Returns + ------- + ConservedVars + The fluid conserved variables + """ + from mirgecom.fluid import make_conserved + + dim = ev.dim + actx = ev.array_context + gamma = self.gamma(cv=cv, temperature=temperature) + + # See Hughes, Franca, Mallet (1986) A new finite element + # formulation for CFD: (DOI: 10.1016/0045-7825(86)90127-1) + inv_gamma_minus_one = 1/(gamma - 1) + + # Convert to entropy `-rho * s` used by Hughes, France, Mallet (1986) + ev_state = ev * (gamma - 1) + + v1 = ev_state.mass + v234 = ev_state.momentum + v5 = ev_state.energy + v6ns = ev_state.species_mass + + v_square = np.dot(v234, v234) + s = gamma - v1 + v_square/(2*v5) + s_species = gamma - v6ns + v_square/(2*v5) + iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) + rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) + rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) + + return make_conserved( + dim, + mass=-rho_iota * v5, + energy=rho_iota * (1 - v_square/(2*v5)), + momentum=rho_iota * v234, + species_mass=-rho_iota_species * v5 + ) + class PyrometheusMixture(MixtureEOS): r"""Ideal gas mixture ($p = \rho{R}_\mathtt{mix}{T}$). @@ -1017,50 +1067,49 @@ def conservative_to_entropy_vars(self, cv, temperature): dim=dim, mass=ev_mass, energy=ev_energy, momentum=ev_mom, species_mass=ev_spec) - -def entropy_to_conservative_vars(self, cv: ConservedVars, ev: ConservedVars, - temperature): - """Compute the conserved variables from entropy variables *ev*. - Converts from entropy variables into conserved variables - (density, momentum, total energy). - Parameters - ---------- - ev: ConservedVars + def entropy_to_conservative_vars(self, cv: ConservedVars, ev: ConservedVars, + temperature): + """Compute the conserved variables from entropy variables *ev*. + Converts from entropy variables into conserved variables + (density, momentum, total energy). + Parameters + ---------- + ev: ConservedVars The entropy variables - Returns - ------- - ConservedVars + Returns + ------- + ConservedVars The fluid conserved variables - """ - from mirgecom.fluid import make_conserved - - dim = ev.dim - actx = ev.array_context - gamma = self.gamma(cv=cv, temperature=temperature) - - # See Hughes, Franca, Mallet (1986) A new finite element - # formulation for CFD: (DOI: 10.1016/0045-7825(86)90127-1) - inv_gamma_minus_one = 1/(gamma - 1) - - # Convert to entropy `-rho * s` used by Hughes, France, Mallet (1986) - ev_state = ev * (gamma - 1) - - v1 = ev_state.mass - v234 = ev_state.momentum - v5 = ev_state.energy - v6ns = ev_state.species_mass - - v_square = sum(v**2 for v in v234) - s = gamma - v1 + v_square/(2*v5) - s_species = gamma - v6ns + v_square/(2*v5) - iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) - rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) - rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) - - return make_conserved( - dim, - mass=-rho_iota * v5, - energy=rho_iota * (1 - v_square/(2*v5)), - momentum=rho_iota * v234, - species_mass=-rho_iota_species * v5 - ) + """ + from mirgecom.fluid import make_conserved + + dim = ev.dim + actx = ev.array_context + gamma = self.gamma(cv=cv, temperature=temperature) + + # See Hughes, Franca, Mallet (1986) A new finite element + # formulation for CFD: (DOI: 10.1016/0045-7825(86)90127-1) + inv_gamma_minus_one = 1/(gamma - 1) + + # Convert to entropy `-rho * s` used by Hughes, France, Mallet (1986) + ev_state = ev * (gamma - 1) + + v1 = ev_state.mass + v234 = ev_state.momentum + v5 = ev_state.energy + v6ns = ev_state.species_mass + + v_square = np.dot(v234, v234) + s = gamma - v1 + v_square/(2*v5) + s_species = gamma - v6ns + v_square/(2*v5) + iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) + rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) + rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) + + return make_conserved( + dim, + mass=-rho_iota * v5, + energy=rho_iota * (1 - v_square/(2*v5)), + momentum=rho_iota * v234, + species_mass=-rho_iota_species * v5 + ) From 1668e6874c4cd308f008933d37d48f8cd6815bda Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 17 Apr 2023 13:13:44 -0500 Subject: [PATCH 796/873] Update THGs ESDG Euler operator --- mirgecom/euler.py | 57 ++++++++------ mirgecom/gas_model.py | 167 ------------------------------------------ 2 files changed, 34 insertions(+), 190 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index f463d44f2..615965860 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -65,11 +65,35 @@ from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux_rusanov, - inviscid_flux_on_element_boundary + inviscid_flux_on_element_boundary, + entropy_conserving_flux_chandrashekar, + entropy_stable_inviscid_flux_rusanov ) from mirgecom.operators import div_operator from mirgecom.utils import normalize_boundaries +from arraycontext import map_array_container +from mirgecom.gas_model import ( + project_fluid_state, + make_fluid_state_trace_pairs, + make_entropy_projected_fluid_state, + conservative_to_entropy_vars, + entropy_to_conservative_vars +) + +from meshmode.dof_array import DOFArray + +from functools import partial + +from grudge.trace_pair import ( + TracePair, + interior_trace_pairs +) +from grudge.dof_desc import DOFDesc, as_dofdesc +from grudge.projection import volume_quadrature_project +from grudge.flux_differencing import volume_flux_differencing + +import grudge.op as op def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, @@ -234,7 +258,7 @@ def _reshape(shape, ary): _reshape((-1, 1), modified_conserved_fluid_state)) # Compute volume derivatives using flux differencing - inviscid_flux_vol = \ + inviscid_vol_term = \ -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) def interp_to_surf_quad(utpair): @@ -302,32 +326,19 @@ def interp_to_surf_modified_conservedvars(gamma, utpair): gas_model, tseed_interior_pairs) - # Surface contributions - inviscid_flux_bnd = ( - - # Domain boundaries - sum(boundaries[btag].inviscid_divergence_flux( - discr, - # Make sure we get the state on the quadrature grid - # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), - gas_model, - state_minus=boundary_states[btag], - time=time, - numerical_flux_func=inviscid_numerical_flux_func) - for btag in boundaries) - - # Interior boundaries (using entropy stable numerical flux) - + sum(inviscid_facial_flux(discr, gas_model=gas_model, state_pair=state_pair, - numerical_flux_func=inviscid_numerical_flux_func) - for state_pair in interior_states) - ) + # Compute interface contributions + inviscid_flux_bnd = inviscid_flux_on_element_boundary( + discr, gas_model, boundaries, interior_states, + boundary_states, quadrature_tag=quadrature_tag, + numerical_flux_func=inviscid_numerical_flux_func, time=time, + dd=dd_vol) return op.inverse_mass( discr, - inviscid_flux_vol - op.face_mass(discr, dd_faces, inviscid_flux_bnd) + inviscid_vol_term - op.face_mass(discr, dd_faces, inviscid_flux_bnd) ) + # By default, run unitless NAME_TO_UNITS = { "mass": "", diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index d887dd628..b3f0a3b89 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -849,170 +849,3 @@ def entropy_to_conservative_vars(gamma, ev: ConservedVars): momentum=rho_iota * v234, species_mass=-rho_iota_species * v5 ) - - -def make_entropy_stable_operator_fluid_states( - dcoll, volume_state, entropy_vars, dd_vol, dd_faces, gas_model, - boundaries, quadrature_tag=DISCR_TAG_BASE, comm_tag=None, limiter_func=None): - """Prepare gas model-consistent fluid states for use in fluid operators. - - This routine prepares a model-consistent fluid state for each of the volume and - all interior and domain boundaries, using the quadrature representation if - one is given. The input *volume_state* is projected to the quadrature domain - (if any), along with the model-consistent dependent quantities. - - .. note:: - - When running MPI-distributed, volume state conserved quantities - (ConservedVars), and for mixtures, temperatures will be communicated over - partition boundaries inside this routine. - - Parameters - ---------- - dcoll: :class:`~grudge.discretization.DiscretizationCollection` - - A discretization collection encapsulating the DG elements - - volume_state: :class:`~mirgecom.gas_model.FluidState` - - The full fluid conserved and thermal state - - gas_model: :class:`~mirgecom.gas_model.GasModel` - - The physical model constructs for the gas_model - - boundaries - Dictionary of boundary functions, one for each valid - :class:`~grudge.dof_desc.BoundaryDomainTag`. - - quadrature_tag - An identifier denoting a particular quadrature discretization to use during - operator evaluations. - - dd: grudge.dof_desc.DOFDesc - the DOF descriptor of the discretization on which *volume_state* lives. Must - be a volume on the base discretization. - - comm_tag: Hashable - Tag for distributed communication - - limiter_func: - - Callable function to limit the fluid conserved quantities to physically - valid and realizable values. - - Returns - ------- - (:class:`~mirgecom.gas_model.FluidState`, :class:`~grudge.trace_pair.TracePair`, - dict) - - Thermally consistent fluid state for the volume, fluid state trace pairs - for the internal boundaries, and a dictionary of fluid states keyed by - boundary domain tags in *boundaries*, all on the quadrature grid (if - specified). - """ - boundaries = normalize_boundaries(boundaries) - - # ================ - from grudge.interpolation import volume_and_surface_quadrature_interpolation - - # Interpolate to the volume and surface (concatenated) quadrature - # discretizations: v = [v_vol, v_surf] - ev_quad = volume_and_surface_quadrature_interpolation( - discr, dd_vol, dd_faces, entropy_vars) - - temperature_seed = None - if state.is_mixture: - temperature_seed = volume_and_surface_quadrature_interpolation( - discr, dd_vol, dd_faces, state.temperature) - gamma = volume_and_surface_quadrature_interpolation( - discr, dd_vol, dd_faces, gamma) - - # Convert back to conserved varaibles and use to make the new fluid state - cv_modified = entropy_to_conservative_vars(gamma, ev_quad) - - # return make_fluid_state(cv=cv_modified, - # gas_model=gas_model, - # temperature_seed=temperature_seed) - - # ==== 0000 - if not isinstance(dd.domain_tag, VolumeDomainTag): - raise TypeError("dd must represent a volume") - if dd.discretization_tag != DISCR_TAG_BASE: - raise ValueError("dd must belong to the base discretization") - - dd_vol = dd - dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) - - # project pair to the quadrature discretization and update dd to quad - interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll, quadrature_tag) - - domain_boundary_states_quad = { - bdtag: project_fluid_state(dcoll, dd_vol, - dd_vol_quad.with_domain_tag(bdtag), - volume_state, gas_model, limiter_func=limiter_func) - for bdtag in boundaries - } - - # performs MPI communication of CV if needed - cv_interior_pairs = [ - # Get the interior trace pairs onto the surface quadrature - # discretization (if any) - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, volume_state.cv, volume_dd=dd_vol, - comm_tag=(_FluidCVTag, comm_tag)) - ] - - tseed_interior_pairs = None - if volume_state.is_mixture: - # If this is a mixture, we need to exchange the temperature field because - # mixture pressure (used in the inviscid flux calculations) depends on - # temperature and we need to seed the temperature calculation for the - # (+) part of the partition boundary with the remote temperature data. - tseed_interior_pairs = [ - # Get the interior trace pairs onto the surface quadrature - # discretization (if any) - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, volume_state.temperature, volume_dd=dd_vol, - comm_tag=(_FluidTemperatureTag, comm_tag))] - - smoothness_mu_interior_pairs = None - if volume_state.smoothness_mu is not None: - smoothness_mu_interior_pairs = [ - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, volume_state.smoothness_mu, volume_dd=dd_vol, - tag=(_FluidSmoothnessMuTag, comm_tag))] - smoothness_kappa_interior_pairs = None - if volume_state.smoothness_kappa is not None: - smoothness_kappa_interior_pairs = [ - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, volume_state.smoothness_kappa, volume_dd=dd_vol, - tag=(_FluidSmoothnessKappaTag, comm_tag))] - smoothness_beta_interior_pairs = None - if volume_state.smoothness_beta is not None: - smoothness_beta_interior_pairs = [ - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, volume_state.smoothness_beta, volume_dd=dd_vol, - tag=(_FluidSmoothnessBetaTag, comm_tag))] - - interior_boundary_states_quad = \ - make_fluid_state_trace_pairs(cv_interior_pairs, gas_model, - tseed_interior_pairs, - smoothness_mu_interior_pairs, - smoothness_kappa_interior_pairs, - smoothness_beta_interior_pairs, - limiter_func=limiter_func) - - # Interpolate the fluid state to the volume quadrature grid - # (this includes the conserved and dependent quantities) - volume_state_quad = project_fluid_state(dcoll, dd_vol, dd_vol_quad, - volume_state, gas_model, - limiter_func=limiter_func) - - return \ - volume_state_quad, interior_boundary_states_quad, domain_boundary_states_quad From 75689cd1f7368e26e81650a004a19d5b3b1af56a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 17 Apr 2023 19:48:24 -0500 Subject: [PATCH 797/873] Add several inviscid esdg examples. --- examples/sod-mpi.py | 29 ++- examples/taylor-green-mpi.py | 397 +++++++++++++++++++++++++++++++++++ examples/vortex-mpi.py | 35 ++- mirgecom/euler.py | 4 +- mirgecom/initializers.py | 57 +++++ 5 files changed, 510 insertions(+), 12 deletions(-) create mode 100644 examples/taylor-green-mpi.py diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index a8de0e204..048a59e13 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -32,7 +32,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import euler_operator +from mirgecom.euler import euler_operator, entropy_stable_euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -68,7 +68,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, lazy=False, - rst_filename=None): + rst_filename=None, use_overintegration=False, use_esdg=False): """Drive the example.""" cl_ctx = ctx_factory() @@ -147,6 +147,19 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) + if use_esdg: + print("Using ESDG, enabling overintegration.") + use_overintegration = True + operator_rhs = entropy_stable_euler_operator + else: + operator_rhs = euler_operator + + from grudge.dof_desc import DISCR_TAG_QUAD + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + vis_timer = None if logmgr: @@ -331,8 +344,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - return euler_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + return operator_rhs(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -376,6 +390,10 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations"), + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() @@ -395,6 +413,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, - use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, + use_overintegration=args.overintegration, use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/taylor-green-mpi.py b/examples/taylor-green-mpi.py new file mode 100644 index 000000000..0a80d6dd8 --- /dev/null +++ b/examples/taylor-green-mpi.py @@ -0,0 +1,397 @@ +"""Demonstrate the inviscid Taylor-Green vortex problem.""" + +__copyright__ = """ +Copyright (C) 2021 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" + +import numpy as np +import logging +import pyopencl as cl +import pyopencl.tools as cl_tools + +from mirgecom.mpi import mpi_entry_point + +from functools import partial + +from meshmode.array_context import ( + PyOpenCLArrayContext, + SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext +) +from mirgecom.profiling import PyOpenCLProfilingArrayContext +from arraycontext import thaw +from grudge.eager import EagerDGDiscretization +from grudge.shortcuts import make_visualizer + +from mirgecom.euler import euler_operator, entropy_stable_euler_operator +from mirgecom.simutil import ( + get_sim_timestep, + generate_and_distribute_mesh +) +from mirgecom.io import make_init_message + +from mirgecom.integrators import lsrk54_step +from mirgecom.steppers import advance_state +from mirgecom.initializers import InviscidTaylorGreenVortex +from mirgecom.eos import IdealSingleGas +from mirgecom.gas_model import ( + GasModel, + make_fluid_state +) +from logpyle import IntervalTimer, set_dt +from mirgecom.euler import extract_vars_for_logging, units_for_logging +from mirgecom.logging_quantities import ( + initialize_logmgr, + logmgr_add_many_discretization_quantities, + logmgr_add_device_name, + logmgr_add_device_memory_usage, + set_sim_state +) + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, + order=1, t_final=1, resolution=8, + use_logmgr=True, + use_overintegration=False, use_esdg=False, + use_profiling=False, casename=None, + rst_filename=None, actx_class=PyOpenCLArrayContext): + """Drive the example.""" + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + num_parts = comm.Get_size() + + from mirgecom.simutil import global_reduce as _global_reduce + global_reduce = partial(_global_reduce, comm=comm) + + logmgr = initialize_logmgr(use_logmgr, + filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + actx = actx_class( + queue, + allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + + if use_esdg and not actx.supports_nonscalar_broadcasting: + raise RuntimeError( + f"{actx} is not a suitable array context for using flux-differencing. " + "The underlying array context must be capable of performing basic " + "array broadcasting operations. Use PytatoPyOpenCLArrayContext instead." + ) + + # timestepping control + current_step = 0 + timestepper = lsrk54_step + t_final = 1 + current_cfl = 1.0 + current_dt = 1e-3 + current_t = 0 + constant_cfl = False + + # some i/o frequencies + nstatus = 100000 + nrestart = 100 + nviz = 100 + nhealth = 100 + + dim = 3 + rst_path = "restart_data/" + rst_pattern = ( + rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" + ) + if rst_filename: # read the grid from restart data + rst_filename = f"{rst_filename}-{rank:04d}.pkl" + from mirgecom.restart import read_restart_data + restart_data = read_restart_data(actx, rst_filename) + local_mesh = restart_data["local_mesh"] + local_nelements = local_mesh.nelements + global_nelements = restart_data["global_nelements"] + assert restart_data["num_parts"] == num_parts + else: # generate the grid from scratch + from meshmode.mesh.generation import generate_regular_rect_mesh + box_ll = -np.pi + box_ur = np.pi + generate_mesh = partial(generate_regular_rect_mesh, + a=(box_ll,)*dim, + b=(box_ur,) * dim, + nelements_per_axis=(resolution,)*dim, + periodic=(True,)*dim) + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD + from meshmode.discretization.poly_element import \ + default_simplex_group_factory, QuadratureSimplexGroupFactory + + discr = EagerDGDiscretization( + actx, local_mesh, + discr_tag_to_group_factory={ + DISCR_TAG_BASE: default_simplex_group_factory( + base_dim=local_mesh.dim, order=order), + DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) + }, + mpi_communicator=comm + ) + nodes = thaw(discr.nodes(), actx) + + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + vis_timer = None + + if logmgr: + logmgr_add_device_name(logmgr, queue) + logmgr_add_device_memory_usage(logmgr, queue) + logmgr_add_many_discretization_quantities(logmgr, discr, dim, + extract_vars_for_logging, units_for_logging) + + vis_timer = IntervalTimer("t_vis", "Time spent visualizing") + logmgr.add_quantity(vis_timer) + + logmgr.add_watches([ + ("step.max", "step = {value}, "), + ("t_sim.max", "sim time: {value:1.6e} s\n"), + ("min_pressure", "------- P (min, max) (Pa) = ({value:1.9e}, "), + ("max_pressure", "{value:1.9e})\n"), + ("t_step.max", "------- step walltime: {value:6g} s, "), + ("t_log.max", "log walltime: {value:6g} s") + ]) + + eos = IdealSingleGas() + gas_model = GasModel(eos=eos) + + # Periodic domain, no boundary conditions (yay!) + boundaries = {} + + initial_condition = InviscidTaylorGreenVortex(dim=dim) + + if use_esdg: + operator_rhs = entropy_stable_euler_operator + else: + operator_rhs = euler_operator + + if rst_filename: + current_t = restart_data["t"] + current_step = restart_data["step"] + current_cv = restart_data["cv"] + if logmgr: + from mirgecom.logging_quantities import logmgr_set_time + logmgr_set_time(logmgr, current_step, current_t) + else: + # Set the current state from time 0 + current_cv = initial_condition(x_vec=nodes, eos=eos) + + current_state = make_fluid_state(current_cv, gas_model) + + visualizer = make_visualizer(discr) + + initname = "taylorgreen" + eosname = eos.__class__.__name__ + init_message = make_init_message(dim=dim, order=order, + nelements=local_nelements, + global_nelements=global_nelements, + dt=current_dt, t_final=t_final, nstatus=nstatus, + nviz=nviz, cfl=current_cfl, + constant_cfl=constant_cfl, initname=initname, + eosname=eosname, casename=casename) + if rank == 0: + logger.info(init_message) + + def my_write_viz(step, t, state, dv=None): + if dv is None: + dv = eos.dependent_vars(state) + viz_fields = [("cv", state), + ("dv", dv)] + from mirgecom.simutil import write_visfile + write_visfile(discr, viz_fields, visualizer, vizname=casename, + step=step, t=t, overwrite=True, vis_timer=vis_timer) + + def my_write_restart(step, t, state): + rst_fname = rst_pattern.format(cname=casename, step=step, rank=rank) + if rst_fname != rst_filename: + rst_data = { + "local_mesh": local_mesh, + "cv": state, + "t": t, + "step": step, + "order": order, + "global_nelements": global_nelements, + "num_parts": num_parts + } + from mirgecom.restart import write_restart_file + write_restart_file(actx, rst_data, rst_fname, comm) + + def my_health_check(pressure): + health_error = False + from mirgecom.simutil import check_naninf_local + if check_naninf_local(discr, "vol", pressure): + health_error = True + logger.info(f"{rank=}: Invalid pressure data found.") + return health_error + + def my_pre_step(step, t, dt, state): + fluid_state = make_fluid_state(state, gas_model) + dv = fluid_state.dv + + try: + + if logmgr: + logmgr.tick_before() + + from mirgecom.simutil import check_step + do_viz = check_step(step=step, interval=nviz) + do_restart = check_step(step=step, interval=nrestart) + do_health = check_step(step=step, interval=nhealth) + + if do_health: + health_errors = global_reduce(my_health_check(dv.pressure), op="lor") + if health_errors: + if rank == 0: + logger.info("Fluid solution failed health check.") + raise MyRuntimeError("Failed simulation health check.") + + if do_restart: + my_write_restart(step=step, t=t, state=state) + + if do_viz: + my_write_viz(step=step, t=t, state=state, dv=dv) + + except MyRuntimeError: + if rank == 0: + logger.info("Errors detected; attempting graceful exit.") + my_write_viz(step=step, t=t, state=state) + my_write_restart(step=step, t=t, state=state) + raise + + dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, + constant_cfl) + return state, dt + + def my_post_step(step, t, dt, state): + # Logmgr needs to know about EOS, dt, dim? + # imo this is a design/scope flaw + if logmgr: + set_dt(logmgr, dt) + set_sim_state(logmgr, dim, state, eos) + logmgr.tick_after() + return state, dt + + def my_rhs(t, state): + fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + return operator_rhs(discr, state=fluid_state, time=t, + boundaries=boundaries, + gas_model=gas_model, + quadrature_tag=quadrature_tag) + + current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, + current_cfl, t_final, constant_cfl) + + current_step, current_t, current_cv = \ + advance_state(rhs=my_rhs, timestepper=timestepper, + pre_step_callback=my_pre_step, + post_step_callback=my_post_step, dt=current_dt, + state=current_cv, t=current_t, t_final=t_final) + + # Dump the final data + if rank == 0: + logger.info("Checkpointing final state ...") + final_state = make_fluid_state(current_cv, gas_model) + final_dv = final_state.dv + + my_write_viz(step=current_step, t=current_t, state=current_cv, dv=final_dv) + my_write_restart(step=current_step, t=current_t, state=current_cv) + + if logmgr: + logmgr.close() + elif use_profiling: + print(actx.tabulate_profiling_data()) + + finish_tol = 1e-16 + assert np.abs(current_t - t_final) < finish_tol + + +if __name__ == "__main__": + import argparse + casename = "taylor-green-vortex" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--order", default=3, type=int, + help="specify the polynomial order of the DG method") + parser.add_argument("--tfinal", default=20., type=float, + help="specify final time for the simulation") + parser.add_argument("--resolution", default=8, type=int, + help="resolution in each spatial direction") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations"), + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + if args.profiling: + if args.lazy: + raise ValueError("Can't use lazy and profiling together.") + actx_class = PyOpenCLProfilingArrayContext + else: + actx_class = PytatoPyOpenCLArrayContext if args.lazy \ + else PyOpenCLArrayContext + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(order=args.order, t_final=args.tfinal, resolution=args.resolution, + use_logmgr=args.log, use_overintegration=args.overintegration, + use_esdg=args.esdg, use_profiling=args.profiling, + casename=casename, rst_filename=rst_filename, actx_class=actx_class) + +# vim: foldmethod=marker diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 47b69d933..0b9aa1921 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -32,7 +32,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import euler_operator +from mirgecom.euler import euler_operator, entropy_stable_euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, @@ -70,7 +70,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, lazy=False, - rst_filename=None): + rst_filename=None, use_overintegration=False, use_esdg=False): """Drive the example.""" cl_ctx = ctx_factory() @@ -102,7 +102,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) - # timestepping control + if use_esdg and not actx.supports_nonscalar_broadcasting: + raise RuntimeError( + f"{actx} is not a suitable array context for using flux-differencing. " + "The underlying array context must be capable of performing basic " + "array broadcasting operations. Use PytatoPyOpenCLArrayContext instead." + ) # timestepping control + current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder @@ -152,6 +158,17 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) + from grudge.dof_desc import DISCR_TAG_QUAD + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + if use_esdg: + operator_rhs = entropy_stable_euler_operator + else: + operator_rhs = euler_operator + vis_timer = None if logmgr: @@ -356,8 +373,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return euler_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + return operator_rhs(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -401,6 +419,10 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations"), + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() @@ -420,6 +442,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, - use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, + use_overintegration=args.overintegration, use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 615965860..94f5a845d 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -220,6 +220,8 @@ def entropy_stable_euler_operator( Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ + boundaries = normalize_boundaries(boundaries) + dd_base = as_dofdesc("vol") dd_vol = DOFDesc("vol", quadrature_tag) dd_faces = DOFDesc("all_faces", quadrature_tag) @@ -331,7 +333,7 @@ def interp_to_surf_modified_conservedvars(gamma, utpair): discr, gas_model, boundaries, interior_states, boundary_states, quadrature_tag=quadrature_tag, numerical_flux_func=inviscid_numerical_flux_func, time=time, - dd=dd_vol) + dd=dd_base) return op.inverse_mass( discr, diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 4513c5105..ab3aa6cad 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -1552,3 +1552,60 @@ def __call__(self, x, **kwargs): return make_conserved(dim=self._dim, mass=density, momentum=mom, energy=total_energy) + + +class InviscidTaylorGreenVortex: + """todo. + """ + + def __init__( + self, *, dim=3, mach_number=0.05, domain_lengthscale=1, v0=1, p0=1 + ): + """Initialize vortex parameters.""" + self._dim = dim + self._mach_number = mach_number + self._domain_lengthscale = domain_lengthscale + self._v0 = v0 + self._p0 = p0 + + def __call__(self, x_vec, *, eos=None, **kwargs): + """ + Create the 3D Taylor-Green initial profile at locations *x_vec*. + + Parameters + ---------- + x_vec: numpy.ndarray + Nodal coordinates + eos: :class:`mirgecom.eos.IdealSingleGas` + Equation of state class with method to supply gas *gamma*. + """ + if eos is None: + eos = IdealSingleGas() + + length = self._domain_lengthscale + gamma = eos.gamma() + v0 = self._v0 + p0 = self._p0 + rho0 = gamma * self._mach_number ** 2 + + x, y, z = x_vec + zeros = 0 * z + actx = x.array_context + + p = p0 + rho0 * (v0 ** 2) / 16 * ( + actx.np.cos(2*x / length + actx.np.cos(2*y / length)) + ) * actx.np.cos(2*z / length + 2) + u = ( + v0 * actx.np.sin(x / length) * actx.np.cos(y / length) + ) * actx.np.cos(z / length) + v = ( + -v0 * actx.np.cos(x / length) * actx.np.sin(y / length) + ) * actx.np.cos(z / length) + w = zeros + momentum = rho0 * make_obj_array([u, v, w]) + energy = p / (gamma - 1) + rho0 / 2 * (u ** 2 + v ** 2 + w ** 2) + + return make_conserved(dim=self._dim, + mass=rho0 * (1 + zeros), + energy=energy, + momentum=momentum) From 8d06ee9ef8c05ccf7524ef12eee907e9b8f69df9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 17 Apr 2023 19:51:09 -0500 Subject: [PATCH 798/873] Use majosm/inducer merged grudge. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 620e6bc70..0710bb757 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode ---editable git+https://github.com/majosm/grudge.git@production#egg=grudge +--editable git+https://github.com/mtcam/grudge.git@grudge-esdg#egg=grudge --editable git+https://github.com/majosm/pytato.git@production#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From aa867c4475fa77e7f654e6a345ed4bee48b71f14 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 07:36:41 -0500 Subject: [PATCH 799/873] Relint --- examples/taylor-green-mpi.py | 37 ++++++++++++++++++------------------ examples/vortex-mpi.py | 2 +- mirgecom/eos.py | 15 +++++++++------ mirgecom/euler.py | 13 ++++--------- mirgecom/gas_model.py | 8 +++++++- mirgecom/inviscid.py | 5 +++++ 6 files changed, 44 insertions(+), 36 deletions(-) diff --git a/examples/taylor-green-mpi.py b/examples/taylor-green-mpi.py index 0a80d6dd8..820ecf29e 100644 --- a/examples/taylor-green-mpi.py +++ b/examples/taylor-green-mpi.py @@ -27,17 +27,11 @@ import numpy as np import logging import pyopencl as cl -import pyopencl.tools as cl_tools from mirgecom.mpi import mpi_entry_point from functools import partial -from meshmode.array_context import ( - PyOpenCLArrayContext, - SingleGridWorkBalancingPytatoArrayContext as PytatoPyOpenCLArrayContext -) -from mirgecom.profiling import PyOpenCLProfilingArrayContext from arraycontext import thaw from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer @@ -77,12 +71,12 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point -def main(ctx_factory=cl.create_some_context, +def main(actx_class, ctx_factory=cl.create_some_context, order=1, t_final=1, resolution=8, - use_logmgr=True, + use_logmgr=True, lazy=False, use_overintegration=False, use_esdg=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=PyOpenCLArrayContext): + rst_filename=None): """Drive the example.""" cl_ctx = ctx_factory() @@ -106,9 +100,13 @@ def main(ctx_factory=cl.create_some_context, else: queue = cl.CommandQueue(cl_ctx) - actx = actx_class( - queue, - allocator=cl_tools.MemoryPool(cl_tools.ImmediateAllocator(queue))) + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) + else: + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) if use_esdg and not actx.supports_nonscalar_broadcasting: raise RuntimeError( @@ -374,13 +372,13 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + lazy = args.lazy if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - actx_class = PyOpenCLProfilingArrayContext - else: - actx_class = PytatoPyOpenCLArrayContext if args.lazy \ - else PyOpenCLArrayContext + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -389,9 +387,10 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(order=args.order, t_final=args.tfinal, resolution=args.resolution, + main(actx_class, order=args.order, t_final=args.tfinal, + resolution=args.resolution, lazy=args.lazy, use_logmgr=args.log, use_overintegration=args.overintegration, use_esdg=args.esdg, use_profiling=args.profiling, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 0b9aa1921..5003736a9 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -158,7 +158,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) - from grudge.dof_desc import DISCR_TAG_QUAD + from grudge.dof_desc import DISCR_TAG_QUAD if use_overintegration: quadrature_tag = DISCR_TAG_QUAD else: diff --git a/mirgecom/eos.py b/mirgecom/eos.py index aba72fc11..f0d530752 100644 --- a/mirgecom/eos.py +++ b/mirgecom/eos.py @@ -540,12 +540,12 @@ def conservative_to_entropy_vars(self, cv, temperature): Parameters ---------- state: :class:`~mirgecom.gas_model.FluidState` - The full fluid conserved and thermal state + The full fluid conserved and thermal state Returns ------- ConservedVars - The entropy variables + The entropy variables """ dim = cv.dim actx = cv.array_context @@ -1037,12 +1037,12 @@ def conservative_to_entropy_vars(self, cv, temperature): Parameters ---------- state: :class:`~mirgecom.gas_model.FluidState` - The full fluid conserved and thermal state + The full fluid conserved and thermal state Returns ------- ConservedVars - The entropy variables + The entropy variables """ dim = cv.dim actx = cv.array_context @@ -1070,16 +1070,19 @@ def conservative_to_entropy_vars(self, cv, temperature): def entropy_to_conservative_vars(self, cv: ConservedVars, ev: ConservedVars, temperature): """Compute the conserved variables from entropy variables *ev*. + Converts from entropy variables into conserved variables (density, momentum, total energy). + Parameters ---------- ev: ConservedVars - The entropy variables + The entropy variables + Returns ------- ConservedVars - The fluid conserved variables + The fluid conserved variables """ from mirgecom.fluid import make_conserved diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 94f5a845d..9256d3b78 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -191,12 +191,10 @@ def entropy_stable_euler_operator( Parameters ---------- state: :class:`~mirgecom.gas_model.FluidState` - Fluid state object with the conserved state, and dependent quantities. boundaries - Dictionary of boundary functions, one for each valid btag time @@ -204,7 +202,6 @@ def entropy_stable_euler_operator( Time gas_model: :class:`~mirgecom.gas_model.GasModel` - Physical gas model including equation of state, transport, and kinetic properties as required by fluid state @@ -216,7 +213,6 @@ def entropy_stable_euler_operator( Returns ------- :class:`mirgecom.fluid.ConservedVars` - Agglomerated object array of DOF arrays representing the RHS of the Euler flow equations. """ @@ -285,10 +281,9 @@ def interp_to_surf_quad(utpair): for tpair in interior_trace_pairs(discr, state.temperature) ] - def interp_to_surf_modified_conservedvars(gamma, utpair): - """Takes a trace pair containing the projected entropy variables - and converts them into conserved variables on the quadrature grid. - """ + def _interp_to_surf_modified_conservedvars(gamma, utpair): + # Takes a trace pair containing the projected entropy variables + # and converts them into conserved variables on the quadrature grid. local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) # Interpolate entropy variables to the surface quadrature grid @@ -306,7 +301,7 @@ def interp_to_surf_modified_conservedvars(gamma, utpair): # Compute interior trace pairs using modified conservative # variables on the quadrature grid # (obtaining state from projected entropy variables) - interp_to_surf_modified_conservedvars(gamma, tpair) + _interp_to_surf_modified_conservedvars(gamma, tpair) for tpair in interior_trace_pairs(discr, entropy_vars) ] diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index b3f0a3b89..1ff85b344 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -747,7 +747,7 @@ def replace_fluid_state( def make_entropy_projected_fluid_state( discr, dd_vol, dd_faces, state, entropy_vars, gamma, gas_model): - + """Projects the entropy vars to target manifold, computes the CV from that.""" from grudge.interpolation import volume_and_surface_quadrature_interpolation # Interpolate to the volume and surface (concatenated) quadrature @@ -772,12 +772,15 @@ def make_entropy_projected_fluid_state( def conservative_to_entropy_vars(gamma, state): """Compute the entropy variables from conserved variables. + Converts from conserved variables (density, momentum, total energy) into entropy variables. + Parameters ---------- state: :class:`~mirgecom.gas_model.FluidState` The full fluid conserved and thermal state + Returns ------- ConservedVars @@ -809,12 +812,15 @@ def conservative_to_entropy_vars(gamma, state): def entropy_to_conservative_vars(gamma, ev: ConservedVars): """Compute the conserved variables from entropy variables *ev*. + Converts from entropy variables into conserved variables (density, momentum, total energy). + Parameters ---------- ev: ConservedVars The entropy variables + Returns ------- ConservedVars diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index e96010822..d1ad6e862 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -401,11 +401,13 @@ def get_inviscid_cfl(dcoll, state, dt): def entropy_conserving_flux_chandrashekar(gas_model, state_ll, state_rr): """Compute the entropy conservative fluxes from states *cv_ll* and *cv_rr*. + This routine implements the two-point volume flux based on the entropy conserving and kinetic energy preserving two-point flux in: - Chandrashekar (2013) Kinetic Energy Preserving and Entropy Stable Finite Volume Schemes for Compressible Euler and Navier-Stokes Equations [DOI](https://doi.org/10.4208/cicp.170712.010313a) + Returns ------- :class:`~mirgecom.fluid.ConservedVars` @@ -472,17 +474,20 @@ def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): def entropy_stable_inviscid_flux_rusanov(state_pair, gas_model, normal, **kwargs): r"""Return the entropy stable inviscid numerical flux. + This facial flux routine is "entropy stable" in the sense that it computes the flux average component of the interface fluxes using an entropy conservative two-point flux (e.g. :func:`entropy_conserving_flux_chandrashekar`). Additional dissipation is imposed by penalizing the "jump" of the state across interfaces. + Parameters ---------- state_pair: :class:`~grudge.trace_pair.TracePair` Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon which the flux calculation is to be performed + Returns ------- :class:`~mirgecom.fluid.ConservedVars` From 54b059b9d127788f7f22ef0b5482805bb4647acb Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 07:38:09 -0500 Subject: [PATCH 800/873] fix doc typo --- mirgecom/inviscid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index d1ad6e862..59e8c44c2 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -8,7 +8,7 @@ .. autofunction:: inviscid_facial_flux_hll .. autofunction:: inviscid_flux_on_element_boundary .. autofunction:: entropy_conserving_flux_chandrashekar -.. autofunciton:: entropy_stable_facial_flux +.. autofunction:: entropy_stable_facial_flux Inviscid Time Step Computation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 64fb6c08a4db2eba793ab9873bdb2ec03a9ef230 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 08:10:06 -0500 Subject: [PATCH 801/873] Redoco --- mirgecom/initializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index ab3aa6cad..7391a1deb 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -15,6 +15,7 @@ .. autoclass:: ShearFlow .. autoclass:: PlanarDiscontinuity .. autoclass:: MulticomponentTrig +.. autoclass:: InviscidTaylorGreenVortex State Initializers ^^^^^^^^^^^^^^^^^^ @@ -1555,8 +1556,7 @@ def __call__(self, x, **kwargs): class InviscidTaylorGreenVortex: - """todo. - """ + """Initialize Taylor-Green Vortex.""" def __init__( self, *, dim=3, mach_number=0.05, domain_lengthscale=1, v0=1, p0=1 From 149ba29bbbd142147ec0e6d5f16e1fe453ad4117 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 09:54:35 -0500 Subject: [PATCH 802/873] Add ESDG-NS operator. --- mirgecom/navierstokes.py | 289 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index de8d6a48a..dd013f519 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -520,3 +520,292 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, return ns_rhs # }}} NS RHS + + +def entropy_stable_ns_operator( + discr, state, gas_model, boundaries, time=0.0, + inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, + gradient_numerical_flux_func=gradient_flux_central, + viscous_numerical_flux_func=viscous_flux_central, + quadrature_tag=None): + r"""Compute RHS of the Navier-Stokes equations using flux-differencing. + + Returns + ------- + numpy.ndarray + The right-hand-side of the Navier-Stokes equations: + + .. math:: + + \partial_t \mathbf{Q} = \nabla\cdot(\mathbf{F}_V - \mathbf{F}_I) + + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + + Fluid state object with the conserved state, and dependent + quantities. + + boundaries + Dictionary of boundary functions, one for each valid btag + + time + Time + + eos: mirgecom.eos.GasEOS + Implementing the pressure and temperature functions for + returning pressure and temperature as a function of the state q. + Implementing the transport properties including heat conductivity, + and species diffusivities type(mirgecom.transport.TransportModel). + + quadrature_tag + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + The default value is *None*. + + Returns + ------- + :class:`mirgecom.fluid.ConservedVars` + + Agglomerated object array of DOF arrays representing the RHS of the + Navier-Stokes equations. + """ + if not state.is_viscous: + raise ValueError("Navier-Stokes operator expects viscous gas model.") + + boundaries = normalize_boundaries(boundaries) + + actx = state.array_context + dd_base = as_dofdesc("vol") + dd_vol = DOFDesc("vol", quadrature_tag) + dd_faces = DOFDesc("all_faces", quadrature_tag) + # NOTE: For single-gas this is just a fixed scalar. + # However, for mixtures, gamma is a DOFArray. For now, + # we are re-using gamma from here and *not* recomputing + # after applying entropy projections. It is unclear at this + # time whether it's strictly necessary or if this is good enough + gamma = gas_model.eos.gamma(state.cv, state.temperature) + + # Interpolate state to vol quad grid + quadrature_state = \ + project_fluid_state(discr, dd_base, dd_vol, state, gas_model) + + # Compute the projected (nodal) entropy variables + entropy_vars = volume_quadrature_project( + discr, dd_vol, + # Map to entropy variables + conservative_to_entropy_vars(gamma, quadrature_state)) + + modified_conserved_fluid_state = \ + make_entropy_projected_fluid_state(discr, dd_vol, dd_faces, + state, entropy_vars, gamma, gas_model) + + def _reshape(shape, ary): + if not isinstance(ary, DOFArray): + return map_array_container(partial(_reshape, shape), ary) + + return DOFArray(ary.array_context, data=tuple( + subary.reshape(grp.nelements, *shape) + # Just need group for determining the number of elements + for grp, subary in zip(discr.discr_from_dd("vol").groups, ary))) + + flux_matrices = entropy_conserving_flux_chandrashekar( + gas_model, + _reshape((1, -1), modified_conserved_fluid_state), + _reshape((-1, 1), modified_conserved_fluid_state)) + + # Compute volume derivatives using flux differencing + inviscid_vol_term = \ + -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) + + def interp_to_surf_quad(utpair): + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + return TracePair( + local_dd_quad, + interior=op.project(discr, local_dd, local_dd_quad, utpair.int), + exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + ) + + tseed_interior_pairs = None + if state.is_mixture: + # If this is a mixture, we need to exchange the temperature field because + # mixture pressure (used in the inviscid flux calculations) depends on + # temperature and we need to seed the temperature calculation for the + # (+) part of the partition boundary with the remote temperature data. + tseed_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, state.temperature) + ] + + def interp_to_surf_modified_conservedvars(gamma, utpair): + """Takes a trace pair containing the projected entropy variables + and converts them into conserved variables on the quadrature grid. + """ + local_dd = utpair.dd + local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + # Interpolate entropy variables to the surface quadrature grid + vtilde_tpair = op.project(discr, local_dd, local_dd_quad, utpair) + if isinstance(gamma, DOFArray): + gamma = op.project(discr, dd_base, local_dd_quad, gamma) + return TracePair( + local_dd_quad, + # Convert interior and exterior states to conserved variables + interior=entropy_to_conservative_vars(gamma, vtilde_tpair.int), + exterior=entropy_to_conservative_vars(gamma, vtilde_tpair.ext) + ) + + cv_interior_pairs = [ + # Compute interior trace pairs using modified conservative + # variables on the quadrature grid + # (obtaining state from projected entropy variables) + interp_to_surf_modified_conservedvars(gamma, tpair) + for tpair in interior_trace_pairs(discr, entropy_vars) + ] + + boundary_states = { + # TODO: Use modified conserved vars as the input state? + # Would need to make an "entropy-projection" variant + # of *project_fluid_state* + btag: project_fluid_state( + discr, dd_base, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + state, gas_model) for btag in boundaries + } + + # Interior interface state pairs consisting of modified conservative + # variables and the corresponding temperature seeds + interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, + gas_model, + tseed_interior_pairs) + + # Inviscid surface contributions + inviscid_flux_bnd = inviscid_flux_on_element_boundary( + discr, gas_model, boundaries, interior_states, + boundary_states, quadrature_tag=quadrature_tag, + numerical_flux_func=inviscid_numerical_flux_func, time=time, + dd=dd_base) + + inviscid_term = op.inverse_mass( + discr, + inviscid_vol_term - op.face_mass(discr, dd_faces, inviscid_flux_bnd) + ) + + def gradient_flux_interior(tpair): + dd = tpair.dd + normal = thaw(discr.normal(dd), actx) + flux = gradient_numerical_flux_func(tpair, normal) + return op.project(discr, dd, dd.with_dtag("all_faces"), flux) + + cv_flux_bnd = ( + + # Domain boundaries + sum(boundaries[btag].cv_gradient_flux( + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model=gas_model, + state_minus=boundary_states[btag], + time=time, + numerical_flux_func=gradient_numerical_flux_func) + for btag in boundary_states) + + # Interior boundaries + + sum(gradient_flux_interior(tpair) for tpair in cv_interior_pairs) + ) + + # [Bassi_1997]_ eqn 15 (s = grad_q) + grad_cv = grad_operator(discr, dd_vol, dd_faces, + quadrature_state.cv, cv_flux_bnd) + + grad_cv_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, grad_cv) + ] + + # Temperature gradient for conductive heat flux: [Ihme_2014]_ eqn (3b) + # Capture the temperature for the interior faces for grad(T) calc + # Note this is *all interior faces*, including partition boundaries + # due to the use of *interior_state_pairs*. + t_interior_pairs = [TracePair(state_pair.dd, + interior=state_pair.int.temperature, + exterior=state_pair.ext.temperature) + for state_pair in interior_states] + + t_flux_bnd = ( + + # Domain boundaries + sum(boundaries[btag].temperature_gradient_flux( + discr, + # Make sure we get the state on the quadrature grid + # restricted to the tag *btag* + as_dofdesc(btag).with_discr_tag(quadrature_tag), + gas_model=gas_model, + state_minus=boundary_states[btag], + time=time) + for btag in boundary_states) + + # Interior boundaries + + sum(gradient_flux_interior(tpair) for tpair in t_interior_pairs) + ) + + # Fluxes in-hand, compute the gradient of temperature and mpi exchange it + grad_t = grad_operator(discr, dd_vol, dd_faces, + quadrature_state.temperature, t_flux_bnd) + + grad_t_interior_pairs = [ + # Get the interior trace pairs onto the surface quadrature + # discretization (if any) + interp_to_surf_quad(tpair) + for tpair in interior_trace_pairs(discr, grad_t) + ] + + # viscous fluxes across interior faces (including partition and periodic bnd) + def fvisc_divergence_flux_interior(state_pair, grad_cv_pair, grad_t_pair): + return viscous_facial_flux(discr=discr, gas_model=gas_model, + state_pair=state_pair, grad_cv_pair=grad_cv_pair, + grad_t_pair=grad_t_pair, + numerical_flux_func=viscous_numerical_flux_func) + + # viscous part of bcs applied here + def fvisc_divergence_flux_boundary(btag, boundary_state): + # Make sure we fields on the quadrature grid + # restricted to the tag *btag* + dd_btag = as_dofdesc(btag).with_discr_tag(quadrature_tag) + return boundaries[btag].viscous_divergence_flux( + discr=discr, + btag=dd_btag, + gas_model=gas_model, + state_minus=boundary_state, + grad_cv_minus=op.project(discr, dd_base, dd_btag, grad_cv), + grad_t_minus=op.project(discr, dd_base, dd_btag, grad_t), + time=time, + numerical_flux_func=viscous_numerical_flux_func + ) + + visc_vol_term = viscous_flux( + state=quadrature_state, + # Interpolate gradients to the quadrature grid + grad_cv=op.project(discr, dd_base, dd_vol, grad_cv), + grad_t=op.project(discr, dd_base, dd_vol, grad_t)) + + # Physical viscous flux (f .dot. n) is the boundary term for the div op + visc_bnd_term = viscous_flux_on_element_boundary( + dcoll, gas_model, boundaries, interior_states, + boundary_states, grad_cv, grad_cv_interior_pairs, + grad_t, grad_t_interior_pairs, quadrature_tag=quadrature_tag, + numerical_flux_func=viscous_numerical_flux_func, time=time, + dd=dd_base) + + viscous_term = div_operator(discr, dd_vol, dd_faces, + visc_vol_term, visc_bnd_term) + + # NS RHS + return viscous_term + inviscid_term From 7fea0f4ec961b0f402df7f3c8495eca29126c875 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 10:22:16 -0500 Subject: [PATCH 803/873] Fix bunch of errors in ESDGNS. --- mirgecom/navierstokes.py | 50 ++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index dd013f519..640845067 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -77,7 +77,9 @@ from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux_rusanov, - inviscid_flux_on_element_boundary + inviscid_flux_on_element_boundary, + entropy_conserving_flux_chandrashekar, + entropy_stable_inviscid_flux_rusanov ) from mirgecom.viscous import ( viscous_flux, @@ -92,6 +94,21 @@ from mirgecom.gas_model import make_operator_fluid_states from mirgecom.utils import normalize_boundaries +from arraycontext import map_array_container +from mirgecom.gas_model import ( + project_fluid_state, + make_fluid_state_trace_pairs, + make_entropy_projected_fluid_state, + conservative_to_entropy_vars, + entropy_to_conservative_vars +) + +from meshmode.dof_array import DOFArray + +from grudge.dof_desc import DOFDesc, as_dofdesc +from grudge.projection import volume_quadrature_project +from grudge.flux_differencing import volume_flux_differencing + class _NSGradCVTag: pass @@ -525,8 +542,8 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, def entropy_stable_ns_operator( discr, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, - gradient_numerical_flux_func=gradient_flux_central, - viscous_numerical_flux_func=viscous_flux_central, + gradient_numerical_flux_func=num_flux_central, + viscous_numerical_flux_func=viscous_facial_flux_central, quadrature_tag=None): r"""Compute RHS of the Navier-Stokes equations using flux-differencing. @@ -697,7 +714,7 @@ def interp_to_surf_modified_conservedvars(gamma, utpair): def gradient_flux_interior(tpair): dd = tpair.dd - normal = thaw(discr.normal(dd), actx) + normal = actx.thaw(discr.normal(dd)) flux = gradient_numerical_flux_func(tpair, normal) return op.project(discr, dd, dd.with_dtag("all_faces"), flux) @@ -767,29 +784,6 @@ def gradient_flux_interior(tpair): for tpair in interior_trace_pairs(discr, grad_t) ] - # viscous fluxes across interior faces (including partition and periodic bnd) - def fvisc_divergence_flux_interior(state_pair, grad_cv_pair, grad_t_pair): - return viscous_facial_flux(discr=discr, gas_model=gas_model, - state_pair=state_pair, grad_cv_pair=grad_cv_pair, - grad_t_pair=grad_t_pair, - numerical_flux_func=viscous_numerical_flux_func) - - # viscous part of bcs applied here - def fvisc_divergence_flux_boundary(btag, boundary_state): - # Make sure we fields on the quadrature grid - # restricted to the tag *btag* - dd_btag = as_dofdesc(btag).with_discr_tag(quadrature_tag) - return boundaries[btag].viscous_divergence_flux( - discr=discr, - btag=dd_btag, - gas_model=gas_model, - state_minus=boundary_state, - grad_cv_minus=op.project(discr, dd_base, dd_btag, grad_cv), - grad_t_minus=op.project(discr, dd_base, dd_btag, grad_t), - time=time, - numerical_flux_func=viscous_numerical_flux_func - ) - visc_vol_term = viscous_flux( state=quadrature_state, # Interpolate gradients to the quadrature grid @@ -798,7 +792,7 @@ def fvisc_divergence_flux_boundary(btag, boundary_state): # Physical viscous flux (f .dot. n) is the boundary term for the div op visc_bnd_term = viscous_flux_on_element_boundary( - dcoll, gas_model, boundaries, interior_states, + discr, gas_model, boundaries, interior_states, boundary_states, grad_cv, grad_cv_interior_pairs, grad_t, grad_t_interior_pairs, quadrature_tag=quadrature_tag, numerical_flux_func=viscous_numerical_flux_func, time=time, From 1246b6754b10394c7fe4b6589ae7f10786707af9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 10:26:28 -0500 Subject: [PATCH 804/873] Redoco --- mirgecom/navierstokes.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 640845067..c670fc7d0 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -657,10 +657,9 @@ def interp_to_surf_quad(utpair): for tpair in interior_trace_pairs(discr, state.temperature) ] - def interp_to_surf_modified_conservedvars(gamma, utpair): - """Takes a trace pair containing the projected entropy variables - and converts them into conserved variables on the quadrature grid. - """ + def _interp_to_surf_modified_conservedvars(gamma, utpair): + # Takes a trace pair containing the projected entropy variables + # and converts them into conserved variables on the quadrature grid. local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) # Interpolate entropy variables to the surface quadrature grid @@ -678,7 +677,7 @@ def interp_to_surf_modified_conservedvars(gamma, utpair): # Compute interior trace pairs using modified conservative # variables on the quadrature grid # (obtaining state from projected entropy variables) - interp_to_surf_modified_conservedvars(gamma, tpair) + _interp_to_surf_modified_conservedvars(gamma, tpair) for tpair in interior_trace_pairs(discr, entropy_vars) ] From 069c87b7f122ed3de2b8e4c3365db8b58149599e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 18 Apr 2023 11:04:35 -0500 Subject: [PATCH 805/873] Fix misspelling of ES numflux. --- mirgecom/inviscid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 59e8c44c2..44c831863 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -8,7 +8,7 @@ .. autofunction:: inviscid_facial_flux_hll .. autofunction:: inviscid_flux_on_element_boundary .. autofunction:: entropy_conserving_flux_chandrashekar -.. autofunction:: entropy_stable_facial_flux +.. autofunction:: entropy_stable_inviscid_flux_rusanov Inviscid Time Step Computation ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 94efaf576662d152eea5ab9ab8e139e1ef562d4c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 19 Apr 2023 11:57:20 -0500 Subject: [PATCH 806/873] Update examps --- examples/sod-mpi.py | 31 +++++++++++++++++-------------- mirgecom/initializers.py | 2 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 048a59e13..259d0b5b5 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -106,18 +106,18 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.01 + t_final = 1.0 current_cfl = 1.0 - current_dt = .0001 + current_dt = 1e-6 current_t = 0 constant_cfl = False current_step = 0 # some i/o frequencies - nstatus = 10 - nrestart = 5 - nviz = 10 - nhealth = 10 + nstatus = 100 + nrestart = 1000 + nviz = 100 + nhealth = 100 dim = 1 rst_path = "restart_data/" @@ -134,9 +134,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, assert restart_data["num_parts"] == num_parts else: # generate the grid from scratch from meshmode.mesh.generation import generate_regular_rect_mesh - nel_1d = 24 - box_ll = -5.0 - box_ur = 5.0 + nel_1d = 64 + box_ll = 0 + box_ur = 1.0 generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) local_mesh, global_nelements = generate_and_distribute_mesh(comm, @@ -194,6 +194,7 @@ def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): boundaries = { BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=boundary_solution) } + if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] @@ -218,6 +219,7 @@ def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): nviz=nviz, cfl=current_cfl, constant_cfl=constant_cfl, initname=initname, eosname=eosname, casename=casename) + if rank == 0: logger.info(init_message) @@ -239,6 +241,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): ("dv", dv), ("exact", exact), ("residual", resid)] + from mirgecom.simutil import write_visfile write_visfile(dcoll, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True, vis_timer=vis_timer, @@ -267,11 +270,11 @@ def my_health_check(pressure, component_errors): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - exittol = .09 - if max(component_errors) > exittol: - health_error = True - if rank == 0: - logger.info("Solution diverged from exact soln.") + # exittol = .09 + # if max(component_errors) > exittol: + # health_error = True + # if rank == 0: + # logger.info("Solution diverged from exact soln.") return health_error diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 7391a1deb..e0d81c45f 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -322,7 +322,7 @@ def __call__(self, x_vec, *, eos=None, **kwargs): energy = actx.np.where(yesno, energyr, energyl) mom = make_obj_array( [ - 0*x_rel + 1.*zeros for i in range(self._dim) ] ) From c708409b4087df4ba70676f31f4f2f9f812f8a93 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 19 Apr 2023 15:50:58 -0500 Subject: [PATCH 807/873] Bring back missing doc --- mirgecom/simutil.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index c86fce30c..d8f5d34a7 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -22,6 +22,7 @@ Mesh and element utilities -------------------------- +.. autofunction:: distribute_mesh .. autofunction:: geometric_mesh_partitioner .. autofunction:: generate_and_distribute_mesh .. autofunction:: get_number_of_tetrahedron_nodes From 5cd51775145cf353545a9cc9144361d8e1fc9c2f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 19 Apr 2023 15:52:25 -0500 Subject: [PATCH 808/873] Relocate chunk --- mirgecom/simutil.py | 110 ++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index d8f5d34a7..51e95b7b6 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -928,6 +928,61 @@ def partition_generator_func(mesh, tag_to_elements, num_ranks): return local_mesh_data, global_nelements +def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL, + mesh=None): + """Generate a report of the grid boundaries.""" + boundaries = normalize_boundaries(boundaries) + + comm = dcoll.mpi_communicator + nproc = 1 + rank = 0 + if comm is not None: + nproc = comm.Get_size() + rank = comm.Get_rank() + + if mesh is not None: + nelem = 0 + for grp in mesh.groups: + nelem = nelem + grp.nelements + local_header = f"nproc: {nproc}\nrank: {rank}\nnelem: {nelem}\n" + else: + local_header = f"nproc: {nproc}\nrank: {rank}\n" + + from io import StringIO + local_report = StringIO(local_header) + local_report.seek(0, 2) + + for bdtag in boundaries: + boundary_discr = dcoll.discr_from_dd(bdtag) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + local_report.write(f"{bdtag}: {nnodes}\n") + + from meshmode.mesh import BTAG_PARTITION + from meshmode.distributed import get_connected_parts + connected_part_ids = get_connected_parts(dcoll.discr_from_dd(dd).mesh) + local_report.write(f"num_nbr_parts: {len(connected_part_ids)}\n") + local_report.write(f"connected_part_ids: {connected_part_ids}\n") + part_nodes = [] + for connected_part_id in connected_part_ids: + boundary_discr = dcoll.discr_from_dd( + dd.trace(BTAG_PARTITION(connected_part_id))) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + part_nodes.append(nnodes) + if part_nodes: + local_report.write(f"nnodes_pb: {part_nodes}\n") + + local_report.write("-----\n") + local_report.seek(0) + + for irank in range(nproc): + if irank == rank: + f = open(outfile_name, "a+") + f.write(local_report.read()) + f.close() + if comm is not None: + comm.barrier() + + def extract_volumes(mesh, tag_to_elements, selected_tags, boundary_tag): r""" Create a mesh containing a subset of another mesh's volumes. @@ -1002,61 +1057,6 @@ def force_evaluation(actx, expn): return actx.thaw(actx.freeze(expn)) -def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL, - mesh=None): - """Generate a report of the grid boundaries.""" - boundaries = normalize_boundaries(boundaries) - - comm = dcoll.mpi_communicator - nproc = 1 - rank = 0 - if comm is not None: - nproc = comm.Get_size() - rank = comm.Get_rank() - - if mesh is not None: - nelem = 0 - for grp in mesh.groups: - nelem = nelem + grp.nelements - local_header = f"nproc: {nproc}\nrank: {rank}\nnelem: {nelem}\n" - else: - local_header = f"nproc: {nproc}\nrank: {rank}\n" - - from io import StringIO - local_report = StringIO(local_header) - local_report.seek(0, 2) - - for bdtag in boundaries: - boundary_discr = dcoll.discr_from_dd(bdtag) - nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) - local_report.write(f"{bdtag}: {nnodes}\n") - - from meshmode.mesh import BTAG_PARTITION - from meshmode.distributed import get_connected_parts - connected_part_ids = get_connected_parts(dcoll.discr_from_dd(dd).mesh) - local_report.write(f"num_nbr_parts: {len(connected_part_ids)}\n") - local_report.write(f"connected_part_ids: {connected_part_ids}\n") - part_nodes = [] - for connected_part_id in connected_part_ids: - boundary_discr = dcoll.discr_from_dd( - dd.trace(BTAG_PARTITION(connected_part_id))) - nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) - part_nodes.append(nnodes) - if part_nodes: - local_report.write(f"nnodes_pb: {part_nodes}\n") - - local_report.write("-----\n") - local_report.seek(0) - - for irank in range(nproc): - if irank == rank: - f = open(outfile_name, "a+") - f.write(local_report.read()) - f.close() - if comm is not None: - comm.barrier() - - def get_reasonable_memory_pool(ctx: cl.Context, queue: cl.CommandQueue, force_buffer: bool = False, force_non_pool: bool = False): From 5faf5524d7801000361be7f15d61670f4cb9a982 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Thu, 20 Apr 2023 07:50:46 -0700 Subject: [PATCH 809/873] Use rank-local cache. --- scripts/lassen-parallel-spawner.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/lassen-parallel-spawner.sh b/scripts/lassen-parallel-spawner.sh index 7d0a2f768..920b46d16 100755 --- a/scripts/lassen-parallel-spawner.sh +++ b/scripts/lassen-parallel-spawner.sh @@ -4,7 +4,7 @@ # unset CUDA_CACHE_DISABLE POCL_CACHE_ROOT=${POCL_CACHE_ROOT:-"/tmp/$USER/pocl-scratch"} XDG_CACHE_ROOT=${XDG_CACHE_HOME:-"/tmp/$USER/xdg-scratch"} -export POCL_CACHE_DIR="${POCL_CACHE_ROOT}/$$" -export XDG_CACHE_HOME="${XDG_CACHE_ROOT}/$$" +export POCL_CACHE_DIR="${POCL_CACHE_ROOT}/$OMPI_COMM_WORLD_RANK" +export XDG_CACHE_HOME="${XDG_CACHE_ROOT}/$OMPI_COMM_WORLD_RANK" "$@" From 3cb9e3909ba827fbfeb6ae725fcd40bb2fa2ea9d Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 20 Apr 2023 10:40:26 -0500 Subject: [PATCH 810/873] Be more like grudge sod example. --- examples/sod-mpi.py | 9 ++++---- mirgecom/initializers.py | 45 ++++++++++++++++++++++++---------------- mirgecom/simutil.py | 2 +- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 259d0b5b5..21d8fb61c 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -106,7 +106,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 1.0 + t_final = 0.2 current_cfl = 1.0 current_dt = 1e-6 current_t = 0 @@ -134,8 +134,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, assert restart_data["num_parts"] == num_parts else: # generate the grid from scratch from meshmode.mesh.generation import generate_regular_rect_mesh - nel_1d = 64 - box_ll = 0 + nel_1d = 32 + box_ll = 0.0 box_ur = 1.0 generate_mesh = partial(generate_regular_rect_mesh, a=(box_ll,)*dim, b=(box_ur,) * dim, nelements_per_axis=(nel_1d,)*dim) @@ -143,7 +143,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - order = 1 + order = 4 dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) @@ -238,6 +238,7 @@ def my_write_viz(step, t, state, dv=None, exact=None, resid=None): if resid is None: resid = state - exact viz_fields = [("cv", state), + ("vel", state.velocity), ("dv", dv), ("exact", exact), ("residual", resid)] diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index e0d81c45f..a5d3a5d32 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -262,7 +262,7 @@ class SodShock1D: """ def __init__( - self, *, dim=2, xdir=0, x0=0.5, rhol=1.0, + self, *, dim=1, xdir=0, x0=0.5, rhol=1.0, rhor=0.125, pleft=1.0, pright=0.1, ): """Initialize shock parameters. @@ -285,8 +285,8 @@ def __init__( self._x0 = x0 self._rhol = rhol self._rhor = rhor - self._energyl = pleft - self._energyr = pright + self._pl = pleft + self._pr = pright self._dim = dim self._xdir = xdir if self._xdir >= self._dim: @@ -305,30 +305,39 @@ def __call__(self, x_vec, *, eos=None, **kwargs): """ if eos is None: eos = IdealSingleGas() + gm1 = eos.gamma() - 1.0 gmn1 = 1.0 / gm1 - x_rel = x_vec[self._xdir] - actx = x_rel.array_context + x = x_vec[self._xdir] + actx = x.array_context - zeros = 0*x_rel + zeros = 0*x rhor = zeros + self._rhor rhol = zeros + self._rhol x0 = zeros + self._x0 - energyl = zeros + gmn1 * self._energyl - energyr = zeros + gmn1 * self._energyr - yesno = actx.np.greater(x_rel, x0) - mass = actx.np.where(yesno, rhor, rhol) - energy = actx.np.where(yesno, energyr, energyl) - mom = make_obj_array( - [ - 1.*zeros - for i in range(self._dim) - ] - ) + energyl = zeros + gmn1 * self._pl + energyr = zeros + gmn1 * self._pr + + sigma = 1e-13 + weight = 0.5 * (1.0 - actx.np.tanh(1.0/sigma * (x - x0))) + + mass = rhor + (rhol - rhor)*weight + energy = energyr + (energyl - energyr)*weight + momentum = make_obj_array([1.*zeros for _ in range(self._dim)]) + + # yesno = actx.np.greater(x_rel, x0) + # mass = actx.np.where(yesno, rhor, rhol) + # energy = actx.np.where(yesno, energyr, energyl) + # mom = make_obj_array( + # [ + # 0*x_rel + # for i in range(self._dim) + # ] + # ) return make_conserved(dim=self._dim, mass=mass, energy=energy, - momentum=mom) + momentum=momentum) class DoubleMachReflection: diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 51e95b7b6..871e85a8e 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -517,7 +517,7 @@ def geometric_mesh_partitioner(mesh, num_ranks=1, *, nranks_per_axis=None, elem_to_rank = ((elem_centroids-x_min) / part_interval).astype(int) # map partition id to list of elements in that partition - part_to_elements = {r: set((np.where(elem_to_rank == r))[0].flat) + part_to_elements = {r: set(np.where(elem_to_rank == r)[0]) for r in range(num_ranks)} # make an array of the geometrically even partition sizes # avoids calling "len" over and over on the element sets From 737e0e176dc8d598dde0efb895ddbff9523b2807 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 20 Apr 2023 13:00:38 -0500 Subject: [PATCH 811/873] Match grudge sod. --- examples/sod-mpi.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 21d8fb61c..3dc7b5765 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -107,17 +107,17 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: timestepper = rk4_step t_final = 0.2 - current_cfl = 1.0 + current_cfl = 0.01 current_dt = 1e-6 current_t = 0 constant_cfl = False current_step = 0 # some i/o frequencies - nstatus = 100 + nstatus = 1 nrestart = 1000 - nviz = 100 - nhealth = 100 + nviz = 1 + nhealth = 1 dim = 1 rst_path = "restart_data/" @@ -144,9 +144,15 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, local_nelements = local_mesh.nelements order = 4 - dcoll = create_discretization_collection(actx, local_mesh, order=order) + dcoll = create_discretization_collection(actx, local_mesh, order=order, + quadrature_order=order+2) nodes = actx.thaw(dcoll.nodes()) + # TODO: Fix this wonky dt estimate + from grudge.dt_utils import h_min_from_volume + cn = 0.5*(order + 1)**2 + current_dt = current_cfl * actx.to_numpy(h_min_from_volume(dcoll)) / cn + if use_esdg: print("Using ESDG, enabling overintegration.") use_overintegration = True From 4996edc93c805345a98faa6eb1721589a96f7256 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 20 Apr 2023 13:20:25 -0500 Subject: [PATCH 812/873] Use rank-local cache --- scripts/lassen-parallel-spawner.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/lassen-parallel-spawner.sh b/scripts/lassen-parallel-spawner.sh index 7d0a2f768..920b46d16 100755 --- a/scripts/lassen-parallel-spawner.sh +++ b/scripts/lassen-parallel-spawner.sh @@ -4,7 +4,7 @@ # unset CUDA_CACHE_DISABLE POCL_CACHE_ROOT=${POCL_CACHE_ROOT:-"/tmp/$USER/pocl-scratch"} XDG_CACHE_ROOT=${XDG_CACHE_HOME:-"/tmp/$USER/xdg-scratch"} -export POCL_CACHE_DIR="${POCL_CACHE_ROOT}/$$" -export XDG_CACHE_HOME="${XDG_CACHE_ROOT}/$$" +export POCL_CACHE_DIR="${POCL_CACHE_ROOT}/$OMPI_COMM_WORLD_RANK" +export XDG_CACHE_HOME="${XDG_CACHE_ROOT}/$OMPI_COMM_WORLD_RANK" "$@" From 316fd6159da9999063ab029b8dd04d45eee021a5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 20 Apr 2023 16:10:06 -0500 Subject: [PATCH 813/873] Update esdg euler closer to modern mirgecom. --- examples/sod-mpi.py | 6 +++--- mirgecom/euler.py | 47 +++++++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 3dc7b5765..9d236ca50 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -187,7 +187,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, ]) initializer = SodShock1D(dim=dim) - eos = IdealSingleGas() + eos = IdealSingleGas(gas_const=1.0) gas_model = GasModel(eos=eos) def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): @@ -272,8 +272,8 @@ def my_write_restart(state, step, t): def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(dcoll, "vol", pressure) \ - or check_range_local(dcoll, "vol", pressure, .09, 1.1): + # or check_range_local(dcoll, "vol", pressure, .09, 1.1): + if check_naninf_local(dcoll, "vol", pressure): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 9256d3b78..53e5325b3 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -183,9 +183,9 @@ def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, def entropy_stable_euler_operator( - discr, state, gas_model, boundaries, time=0.0, + dcoll, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, - quadrature_tag=None): + dd=DD_VOLUME_ALL, quadrature_tag=None): """Compute RHS of the Euler flow equations using flux-differencing. Parameters @@ -218,9 +218,13 @@ def entropy_stable_euler_operator( """ boundaries = normalize_boundaries(boundaries) - dd_base = as_dofdesc("vol") - dd_vol = DOFDesc("vol", quadrature_tag) - dd_faces = DOFDesc("all_faces", quadrature_tag) + dd_vol = dd + dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) + + # dd_base = as_dofdesc("vol") + # dd_vol = DOFDesc("vol", quadrature_tag) + # dd_faces = DOFDesc("all_faces", quadrature_tag) # NOTE: For single-gas this is just a fixed scalar. # However, for mixtures, gamma is a DOFArray. For now, # we are re-using gamma from here and *not* recomputing @@ -229,16 +233,16 @@ def entropy_stable_euler_operator( gamma = gas_model.eos.gamma(state.cv, state.temperature) # Interpolate state to vol quad grid - state_quad = project_fluid_state(discr, "vol", dd_vol, state, gas_model) + state_quad = project_fluid_state(dcoll, dd_vol, dd_vol_quad, state, gas_model) # Compute the projected (nodal) entropy variables entropy_vars = volume_quadrature_project( - discr, dd_vol, + dcoll, dd_vol_quad, # Map to entropy variables conservative_to_entropy_vars(gamma, state_quad)) modified_conserved_fluid_state = \ - make_entropy_projected_fluid_state(discr, dd_vol, dd_faces, + make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, state, entropy_vars, gamma, gas_model) def _reshape(shape, ary): @@ -248,7 +252,7 @@ def _reshape(shape, ary): return DOFArray(ary.array_context, data=tuple( subary.reshape(grp.nelements, *shape) # Just need group for determining the number of elements - for grp, subary in zip(discr.discr_from_dd("vol").groups, ary))) + for grp, subary in zip(dcoll.discr_from_dd("vol").groups, ary))) flux_matrices = entropy_conserving_flux_chandrashekar( gas_model, @@ -257,15 +261,16 @@ def _reshape(shape, ary): # Compute volume derivatives using flux differencing inviscid_vol_term = \ - -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) + -volume_flux_differencing(dcoll, dd_vol_quad, dd_allfaces_quad, + flux_matrices) def interp_to_surf_quad(utpair): local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) return TracePair( local_dd_quad, - interior=op.project(discr, local_dd, local_dd_quad, utpair.int), - exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + interior=op.project(dcoll, local_dd, local_dd_quad, utpair.int), + exterior=op.project(dcoll, local_dd, local_dd_quad, utpair.ext) ) tseed_interior_pairs = None @@ -278,7 +283,7 @@ def interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, state.temperature) + for tpair in interior_trace_pairs(dcoll, state.temperature) ] def _interp_to_surf_modified_conservedvars(gamma, utpair): @@ -287,9 +292,9 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) # Interpolate entropy variables to the surface quadrature grid - vtilde_tpair = op.project(discr, local_dd, local_dd_quad, utpair) + vtilde_tpair = op.project(dcoll, local_dd, local_dd_quad, utpair) if isinstance(gamma, DOFArray): - gamma = op.project(discr, dd_base, local_dd_quad, gamma) + gamma = op.project(dcoll, dd_vol, local_dd_quad, gamma) return TracePair( local_dd_quad, # Convert interior and exterior states to conserved variables @@ -302,7 +307,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # variables on the quadrature grid # (obtaining state from projected entropy variables) _interp_to_surf_modified_conservedvars(gamma, tpair) - for tpair in interior_trace_pairs(discr, entropy_vars) + for tpair in interior_trace_pairs(dcoll, entropy_vars) ] boundary_states = { @@ -310,7 +315,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # Would need to make an "entropy-projection" variant # of *project_fluid_state* btag: project_fluid_state( - discr, dd_base, + dcoll, dd_vol, # Make sure we get the state on the quadrature grid # restricted to the tag *btag* as_dofdesc(btag).with_discr_tag(quadrature_tag), @@ -325,14 +330,14 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # Compute interface contributions inviscid_flux_bnd = inviscid_flux_on_element_boundary( - discr, gas_model, boundaries, interior_states, + dcoll, gas_model, boundaries, interior_states, boundary_states, quadrature_tag=quadrature_tag, numerical_flux_func=inviscid_numerical_flux_func, time=time, - dd=dd_base) + dd=dd_vol) return op.inverse_mass( - discr, - inviscid_vol_term - op.face_mass(discr, dd_faces, inviscid_flux_bnd) + dcoll, + inviscid_vol_term - op.face_mass(dcoll, dd_allfaces_quad, inviscid_flux_bnd) ) From 5c5497bc489a1bfb75fa64f7cf9ba6a0a19f2359 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 25 Apr 2023 07:26:39 -0500 Subject: [PATCH 814/873] Remove trivial changes --- examples/doublemach_physical_av-mpi.py | 2 ++ examples/thermally-coupled-mpi.py | 2 +- mirgecom/integrators/lsrk.py | 1 + mirgecom/logging_quantities.py | 1 - 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/doublemach_physical_av-mpi.py b/examples/doublemach_physical_av-mpi.py index 352374663..d667da451 100644 --- a/examples/doublemach_physical_av-mpi.py +++ b/examples/doublemach_physical_av-mpi.py @@ -535,6 +535,8 @@ def my_pre_step(step, t, dt, state): smoothness_mu=no_smoothness) if use_av > 1: # recompute the dv to have the correct smoothness + # this is forcing a recompile, only do it at dump time + # not sure why the compiled version of grad_cv doesn't work if do_viz: # use the divergence to compute the smoothness field force_evaluation(actx, t) diff --git a/examples/thermally-coupled-mpi.py b/examples/thermally-coupled-mpi.py index 0fec6a8a9..e70675cff 100644 --- a/examples/thermally-coupled-mpi.py +++ b/examples/thermally-coupled-mpi.py @@ -54,7 +54,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import ( - IsothermalWallBoundary + IsothermalWallBoundary, ) from mirgecom.eos import IdealSingleGas from mirgecom.transport import SimpleTransport diff --git a/mirgecom/integrators/lsrk.py b/mirgecom/integrators/lsrk.py index 52b451d75..2c733de5f 100644 --- a/mirgecom/integrators/lsrk.py +++ b/mirgecom/integrators/lsrk.py @@ -52,6 +52,7 @@ def lsrk_step(coefs, state, t, dt, rhs): for i in range(len(coefs.A)): k = coefs.A[i]*k + dt*rhs(t + coefs.C[i]*dt, state) state = state + coefs.B[i]*k + return state diff --git a/mirgecom/logging_quantities.py b/mirgecom/logging_quantities.py index 3c7cf2523..64154c34f 100644 --- a/mirgecom/logging_quantities.py +++ b/mirgecom/logging_quantities.py @@ -261,7 +261,6 @@ def set_state_vars(self, state_vars: np.ndarray) -> None: # }}} - # {{{ Discretization-based quantities From 53395c22a4dd4f684b96e698cbbe61f5235c6b1f Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 25 Apr 2023 08:06:13 -0500 Subject: [PATCH 815/873] Use upstream simutil --- mirgecom/simutil.py | 111 ++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/mirgecom/simutil.py b/mirgecom/simutil.py index 2afeb7316..434fcda37 100644 --- a/mirgecom/simutil.py +++ b/mirgecom/simutil.py @@ -22,7 +22,6 @@ Mesh and element utilities -------------------------- -.. autofunction:: distribute_mesh .. autofunction:: geometric_mesh_partitioner .. autofunction:: generate_and_distribute_mesh .. autofunction:: get_number_of_tetrahedron_nodes @@ -937,61 +936,6 @@ def partition_generator_func(mesh, tag_to_elements, num_ranks): return local_mesh_data, global_nelements -def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL, - mesh=None): - """Generate a report of the grid boundaries.""" - boundaries = normalize_boundaries(boundaries) - - comm = dcoll.mpi_communicator - nproc = 1 - rank = 0 - if comm is not None: - nproc = comm.Get_size() - rank = comm.Get_rank() - - if mesh is not None: - nelem = 0 - for grp in mesh.groups: - nelem = nelem + grp.nelements - local_header = f"nproc: {nproc}\nrank: {rank}\nnelem: {nelem}\n" - else: - local_header = f"nproc: {nproc}\nrank: {rank}\n" - - from io import StringIO - local_report = StringIO(local_header) - local_report.seek(0, 2) - - for bdtag in boundaries: - boundary_discr = dcoll.discr_from_dd(bdtag) - nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) - local_report.write(f"{bdtag}: {nnodes}\n") - - from meshmode.mesh import BTAG_PARTITION - from meshmode.distributed import get_connected_parts - connected_part_ids = get_connected_parts(dcoll.discr_from_dd(dd).mesh) - local_report.write(f"num_nbr_parts: {len(connected_part_ids)}\n") - local_report.write(f"connected_part_ids: {connected_part_ids}\n") - part_nodes = [] - for connected_part_id in connected_part_ids: - boundary_discr = dcoll.discr_from_dd( - dd.trace(BTAG_PARTITION(connected_part_id))) - nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) - part_nodes.append(nnodes) - if part_nodes: - local_report.write(f"nnodes_pb: {part_nodes}\n") - - local_report.write("-----\n") - local_report.seek(0) - - for irank in range(nproc): - if irank == rank: - f = open(outfile_name, "a+") - f.write(local_report.read()) - f.close() - if comm is not None: - comm.barrier() - - def extract_volumes(mesh, tag_to_elements, selected_tags, boundary_tag): r""" Create a mesh containing a subset of another mesh's volumes. @@ -1066,6 +1010,61 @@ def force_evaluation(actx, expn): return actx.thaw(actx.freeze(expn)) +def boundary_report(dcoll, boundaries, outfile_name, *, dd=DD_VOLUME_ALL, + mesh=None): + """Generate a report of the grid boundaries.""" + boundaries = normalize_boundaries(boundaries) + + comm = dcoll.mpi_communicator + nproc = 1 + rank = 0 + if comm is not None: + nproc = comm.Get_size() + rank = comm.Get_rank() + + if mesh is not None: + nelem = 0 + for grp in mesh.groups: + nelem = nelem + grp.nelements + local_header = f"nproc: {nproc}\nrank: {rank}\nnelem: {nelem}\n" + else: + local_header = f"nproc: {nproc}\nrank: {rank}\n" + + from io import StringIO + local_report = StringIO(local_header) + local_report.seek(0, 2) + + for bdtag in boundaries: + boundary_discr = dcoll.discr_from_dd(bdtag) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + local_report.write(f"{bdtag}: {nnodes}\n") + + from meshmode.mesh import BTAG_PARTITION + from meshmode.distributed import get_connected_parts + connected_part_ids = get_connected_parts(dcoll.discr_from_dd(dd).mesh) + local_report.write(f"num_nbr_parts: {len(connected_part_ids)}\n") + local_report.write(f"connected_part_ids: {connected_part_ids}\n") + part_nodes = [] + for connected_part_id in connected_part_ids: + boundary_discr = dcoll.discr_from_dd( + dd.trace(BTAG_PARTITION(connected_part_id))) + nnodes = sum([grp.ndofs for grp in boundary_discr.groups]) + part_nodes.append(nnodes) + if part_nodes: + local_report.write(f"nnodes_pb: {part_nodes}\n") + + local_report.write("-----\n") + local_report.seek(0) + + for irank in range(nproc): + if irank == rank: + f = open(outfile_name, "a+") + f.write(local_report.read()) + f.close() + if comm is not None: + comm.barrier() + + def get_reasonable_memory_pool(ctx: cl.Context, queue: cl.CommandQueue, force_buffer: bool = False, force_non_pool: bool = False): From 9f46ff9b58172591f19a273d2accfc9ead158a0c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 25 Apr 2023 18:23:30 -0500 Subject: [PATCH 816/873] update esdg csn --- examples/poiseuille-mpi.py | 52 +++++----- mirgecom/navierstokes.py | 197 ++++++++++++++++++++----------------- 2 files changed, 134 insertions(+), 115 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index fdbf119e9..405c1efb9 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -36,7 +36,7 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.fluid import make_conserved -from mirgecom.navierstokes import ns_operator +from mirgecom.navierstokes import ns_operator, entropy_stable_ns_operator from mirgecom.simutil import get_sim_timestep from mirgecom.io import make_init_message @@ -85,7 +85,7 @@ def _get_box_mesh(dim, a, b, n, t=None): def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None): + rst_filename=None, actx_class=None, use_esdg=False): """Drive the example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -157,7 +157,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, global_nelements = restart_data["global_nelements"] assert restart_data["nparts"] == nparts else: # generate the grid from scratch - n_refine = 5 + n_refine = 2 npts_x = 10 * n_refine npts_y = 6 * n_refine npts_axis = (npts_x, npts_y) @@ -169,8 +169,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - order = 2 - dcoll = create_discretization_collection(actx, local_mesh, order=order) + order = 4 + dcoll = create_discretization_collection(actx, local_mesh, order=order, + quadrature_order=order+2) nodes = actx.thaw(dcoll.nodes()) if use_overintegration: @@ -333,27 +334,27 @@ def my_health_check(state, dv, component_errors): health_error = True logger.info(f"{rank=}: NANs/Infs in pressure data.") - if global_reduce(check_range_local(dcoll, "vol", dv.pressure, 9.999e4, - 1.00101e5), op="lor"): - health_error = True - from grudge.op import nodal_max, nodal_min - p_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.pressure)) - p_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.pressure)) - logger.info(f"Pressure range violation ({p_min=}, {p_max=})") + # if global_reduce(check_range_local(dcoll, "vol", dv.pressure, 9.999e4, + # 1.00101e5), op="lor"): + # health_error = True + # from grudge.op import nodal_max, nodal_min + # p_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.pressure)) + # p_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.pressure)) + # logger.info(f"Pressure range violation ({p_min=}, {p_max=})") if check_naninf_local(dcoll, "vol", dv.temperature): health_error = True logger.info(f"{rank=}: NANs/INFs in temperature data.") - if global_reduce(check_range_local(dcoll, "vol", dv.temperature, 348, 350), - op="lor"): - health_error = True - from grudge.op import nodal_max, nodal_min - t_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.temperature)) - t_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.temperature)) - logger.info(f"Temperature range violation ({t_min=}, {t_max=})") + # if global_reduce(check_range_local(dcoll, "vol", dv.temperature, 348, 350), + # op="lor"): + # health_error = True + # from grudge.op import nodal_max, nodal_min + # t_min = actx.to_numpy(nodal_min(dcoll, "vol", dv.temperature)) + # t_max = actx.to_numpy(nodal_max(dcoll, "vol", dv.temperature)) + # logger.info(f"Temperature range violation ({t_min=}, {t_max=})") - exittol = .1 + exittol = 100.00 if max(component_errors) > exittol: health_error = True if rank == 0: @@ -420,15 +421,19 @@ def my_post_step(step, t, dt, state): logmgr.tick_after() return state, dt + rhs_operator = entropy_stable_ns_operator if use_esdg else ns_operator + def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return ns_operator(dcoll, gas_model=gas_model, boundaries=boundaries, + return rhs_operator(dcoll, gas_model=gas_model, boundaries=boundaries, state=fluid_state, time=t, quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) + from mirgecom.simutil import force_evaluation + current_state = force_evaluation(actx, current_state) current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, @@ -468,6 +473,8 @@ def my_rhs(t, state): help="use overintegration in the RHS computations") parser.add_argument("--lazy", action="store_true", help="switch to a lazy computation mode") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, @@ -495,6 +502,7 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, use_overintegration=args.overintegration, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index c670fc7d0..6a575c80a 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -105,7 +105,7 @@ from meshmode.dof_array import DOFArray -from grudge.dof_desc import DOFDesc, as_dofdesc +from grudge.dof_desc import as_dofdesc from grudge.projection import volume_quadrature_project from grudge.flux_differencing import volume_flux_differencing @@ -540,11 +540,13 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, def entropy_stable_ns_operator( - discr, state, gas_model, boundaries, time=0.0, + dcoll, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, gradient_numerical_flux_func=num_flux_central, viscous_numerical_flux_func=viscous_facial_flux_central, - quadrature_tag=None): + dd=DD_VOLUME_ALL, quadrature_tag=None, + comm_tag=None, grad_cv=None, grad_t=None, + operator_states_quad=None, return_gradients=False): r"""Compute RHS of the Navier-Stokes equations using flux-differencing. Returns @@ -592,10 +594,14 @@ def entropy_stable_ns_operator( boundaries = normalize_boundaries(boundaries) - actx = state.array_context - dd_base = as_dofdesc("vol") - dd_vol = DOFDesc("vol", quadrature_tag) - dd_faces = DOFDesc("all_faces", quadrature_tag) + dd_vol = dd + dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) + + # dd_base = as_dofdesc("vol") + # dd_vol = DOFDesc("vol", quadrature_tag) + # dd_faces = DOFDesc("all_faces", quadrature_tag) + # NOTE: For single-gas this is just a fixed scalar. # However, for mixtures, gamma is a DOFArray. For now, # we are re-using gamma from here and *not* recomputing @@ -604,17 +610,16 @@ def entropy_stable_ns_operator( gamma = gas_model.eos.gamma(state.cv, state.temperature) # Interpolate state to vol quad grid - quadrature_state = \ - project_fluid_state(discr, dd_base, dd_vol, state, gas_model) + state_quad = project_fluid_state(dcoll, dd_vol, dd_vol_quad, state, gas_model) # Compute the projected (nodal) entropy variables entropy_vars = volume_quadrature_project( - discr, dd_vol, + dcoll, dd_vol_quad, # Map to entropy variables - conservative_to_entropy_vars(gamma, quadrature_state)) + conservative_to_entropy_vars(gamma, state_quad)) modified_conserved_fluid_state = \ - make_entropy_projected_fluid_state(discr, dd_vol, dd_faces, + make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, state, entropy_vars, gamma, gas_model) def _reshape(shape, ary): @@ -624,7 +629,7 @@ def _reshape(shape, ary): return DOFArray(ary.array_context, data=tuple( subary.reshape(grp.nelements, *shape) # Just need group for determining the number of elements - for grp, subary in zip(discr.discr_from_dd("vol").groups, ary))) + for grp, subary in zip(dcoll.discr_from_dd("vol").groups, ary))) flux_matrices = entropy_conserving_flux_chandrashekar( gas_model, @@ -633,15 +638,20 @@ def _reshape(shape, ary): # Compute volume derivatives using flux differencing inviscid_vol_term = \ - -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) + -volume_flux_differencing(dcoll, dd_vol_quad, dd_allfaces_quad, + flux_matrices) + + # Compute volume derivatives using flux differencing + # inviscid_vol_term = \ + # -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) def interp_to_surf_quad(utpair): local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) return TracePair( local_dd_quad, - interior=op.project(discr, local_dd, local_dd_quad, utpair.int), - exterior=op.project(discr, local_dd, local_dd_quad, utpair.ext) + interior=op.project(dcoll, local_dd, local_dd_quad, utpair.int), + exterior=op.project(dcoll, local_dd, local_dd_quad, utpair.ext) ) tseed_interior_pairs = None @@ -654,7 +664,7 @@ def interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, state.temperature) + for tpair in interior_trace_pairs(dcoll, state.temperature) ] def _interp_to_surf_modified_conservedvars(gamma, utpair): @@ -663,9 +673,9 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): local_dd = utpair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) # Interpolate entropy variables to the surface quadrature grid - vtilde_tpair = op.project(discr, local_dd, local_dd_quad, utpair) + vtilde_tpair = op.project(dcoll, local_dd, local_dd_quad, utpair) if isinstance(gamma, DOFArray): - gamma = op.project(discr, dd_base, local_dd_quad, gamma) + gamma = op.project(dcoll, dd_vol, local_dd_quad, gamma) return TracePair( local_dd_quad, # Convert interior and exterior states to conserved variables @@ -678,7 +688,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # variables on the quadrature grid # (obtaining state from projected entropy variables) _interp_to_surf_modified_conservedvars(gamma, tpair) - for tpair in interior_trace_pairs(discr, entropy_vars) + for tpair in interior_trace_pairs(dcoll, entropy_vars) ] boundary_states = { @@ -686,7 +696,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # Would need to make an "entropy-projection" variant # of *project_fluid_state* btag: project_fluid_state( - discr, dd_base, + dcoll, dd_vol, # Make sure we get the state on the quadrature grid # restricted to the tag *btag* as_dofdesc(btag).with_discr_tag(quadrature_tag), @@ -699,106 +709,107 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): gas_model, tseed_interior_pairs) - # Inviscid surface contributions + # Interior interface state pairs consisting of modified conservative + # variables and the corresponding temperature seeds + interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, + gas_model, + tseed_interior_pairs) + + # Compute interface contributions inviscid_flux_bnd = inviscid_flux_on_element_boundary( - discr, gas_model, boundaries, interior_states, + dcoll, gas_model, boundaries, interior_states, boundary_states, quadrature_tag=quadrature_tag, numerical_flux_func=inviscid_numerical_flux_func, time=time, - dd=dd_base) + dd=dd_vol) inviscid_term = op.inverse_mass( - discr, - inviscid_vol_term - op.face_mass(discr, dd_faces, inviscid_flux_bnd) + dcoll, + inviscid_vol_term - op.face_mass(dcoll, dd_allfaces_quad, inviscid_flux_bnd) ) - def gradient_flux_interior(tpair): - dd = tpair.dd - normal = actx.thaw(discr.normal(dd)) - flux = gradient_numerical_flux_func(tpair, normal) - return op.project(discr, dd, dd.with_dtag("all_faces"), flux) + # Make model-consistent fluid state data (i.e. CV *and* DV) for: + # - Volume: vol_state_quad + # - Element-element boundary face trace pairs: inter_elem_bnd_states_quad + # - Interior states (Q_minus) on the domain boundary: domain_bnd_states_quad + # + # Note: these states will live on the quadrature domain if one is given, + # otherwise they stay on the interpolatory/base domain. + if operator_states_quad is None: + operator_states_quad = make_operator_fluid_states( + dcoll, state, gas_model, boundaries, quadrature_tag, + dd=dd_vol, comm_tag=comm_tag) + + vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ + operator_states_quad - cv_flux_bnd = ( + # {{{ Local utilities - # Domain boundaries - sum(boundaries[btag].cv_gradient_flux( - discr, - # Make sure we get the state on the quadrature grid - # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), - gas_model=gas_model, - state_minus=boundary_states[btag], - time=time, - numerical_flux_func=gradient_numerical_flux_func) - for btag in boundary_states) + # transfer trace pairs to quad grid, update pair dd + interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll, quadrature_tag) - # Interior boundaries - + sum(gradient_flux_interior(tpair) for tpair in cv_interior_pairs) - ) + # }}} - # [Bassi_1997]_ eqn 15 (s = grad_q) - grad_cv = grad_operator(discr, dd_vol, dd_faces, - quadrature_state.cv, cv_flux_bnd) + # {{{ === Compute grad(CV) === + + if grad_cv is None: + grad_cv = grad_cv_operator( + dcoll, gas_model, boundaries, state, time=time, + numerical_flux_func=gradient_numerical_flux_func, + quadrature_tag=quadrature_tag, dd=dd_vol, + operator_states_quad=operator_states_quad, comm_tag=comm_tag) + # Communicate grad(CV) and put it on the quadrature domain grad_cv_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature # discretization (if any) - interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, grad_cv) + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, grad_cv, volume_dd=dd_vol, comm_tag=(_NSGradCVTag, comm_tag)) ] - # Temperature gradient for conductive heat flux: [Ihme_2014]_ eqn (3b) - # Capture the temperature for the interior faces for grad(T) calc - # Note this is *all interior faces*, including partition boundaries - # due to the use of *interior_state_pairs*. - t_interior_pairs = [TracePair(state_pair.dd, - interior=state_pair.int.temperature, - exterior=state_pair.ext.temperature) - for state_pair in interior_states] - - t_flux_bnd = ( - - # Domain boundaries - sum(boundaries[btag].temperature_gradient_flux( - discr, - # Make sure we get the state on the quadrature grid - # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), - gas_model=gas_model, - state_minus=boundary_states[btag], - time=time) - for btag in boundary_states) + # }}} Compute grad(CV) - # Interior boundaries - + sum(gradient_flux_interior(tpair) for tpair in t_interior_pairs) - ) + # {{{ === Compute grad(temperature) === - # Fluxes in-hand, compute the gradient of temperature and mpi exchange it - grad_t = grad_operator(discr, dd_vol, dd_faces, - quadrature_state.temperature, t_flux_bnd) + if grad_t is None: + grad_t = grad_t_operator( + dcoll, gas_model, boundaries, state, time=time, + numerical_flux_func=gradient_numerical_flux_func, + quadrature_tag=quadrature_tag, dd=dd_vol, + operator_states_quad=operator_states_quad, comm_tag=comm_tag) + # Create the interior face trace pairs, perform MPI exchange, interp to quad grad_t_interior_pairs = [ # Get the interior trace pairs onto the surface quadrature # discretization (if any) - interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(discr, grad_t) + interp_to_surf_quad(tpair=tpair) + for tpair in interior_trace_pairs( + dcoll, grad_t, volume_dd=dd_vol, + comm_tag=(_NSGradTemperatureTag, comm_tag)) ] - visc_vol_term = viscous_flux( - state=quadrature_state, - # Interpolate gradients to the quadrature grid - grad_cv=op.project(discr, dd_base, dd_vol, grad_cv), - grad_t=op.project(discr, dd_base, dd_vol, grad_t)) + # }}} compute grad(temperature) + + # {{{ === Navier-Stokes RHS === + + # Physical viscous flux in the element volume + vol_term = viscous_flux(state=vol_state_quad, + # Interpolate gradients to the quadrature grid + grad_cv=op.project(dcoll, dd_vol, dd_vol_quad, grad_cv), + grad_t=op.project(dcoll, dd_vol, dd_vol_quad, grad_t)) # Physical viscous flux (f .dot. n) is the boundary term for the div op - visc_bnd_term = viscous_flux_on_element_boundary( - discr, gas_model, boundaries, interior_states, - boundary_states, grad_cv, grad_cv_interior_pairs, + bnd_term = viscous_flux_on_element_boundary( + dcoll, gas_model, boundaries, inter_elem_bnd_states_quad, + domain_bnd_states_quad, grad_cv, grad_cv_interior_pairs, grad_t, grad_t_interior_pairs, quadrature_tag=quadrature_tag, numerical_flux_func=viscous_numerical_flux_func, time=time, - dd=dd_base) + dd=dd_vol) - viscous_term = div_operator(discr, dd_vol, dd_faces, - visc_vol_term, visc_bnd_term) + ns_rhs = \ + (div_operator(dcoll, dd_vol_quad, dd_allfaces_quad, vol_term, bnd_term) + + inviscid_term) - # NS RHS - return viscous_term + inviscid_term + if return_gradients: + return ns_rhs, grad_cv, grad_t + return ns_rhs From a45dfdb17b76fb1126a248227867074abc8a1416 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 26 Apr 2023 08:43:59 -0700 Subject: [PATCH 817/873] Update for multivol, esdg on prediction --- .../multiphysics/thermally_coupled_fluid_wall.py | 11 ++++++----- mirgecom/navierstokes.py | 15 ++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index e53668ba2..35f51759d 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -62,7 +62,7 @@ ) from mirgecom.navierstokes import ( grad_t_operator as fluid_grad_t_operator, - ns_operator, + ns_operator ) from mirgecom.diffusion import ( DiffusionBoundary, @@ -919,6 +919,7 @@ def coupled_ns_heat_operator( use_kappa_weighted_grad_flux_in_fluid=False, return_gradients=False, wall_penalty_amount=None, + fluid_operator=ns_operator, quadrature_tag=DISCR_TAG_BASE): # FIXME: Incomplete docs """Compute RHS of the coupled fluid-wall system.""" @@ -1009,18 +1010,18 @@ def coupled_ns_heat_operator( wall_all_boundaries.update(wall_boundaries) wall_all_boundaries.update(wall_interface_boundaries) - ns_result = ns_operator( + fluid_op_result = fluid_operator( dcoll, gas_model, fluid_state, fluid_all_boundaries, time=time, quadrature_tag=quadrature_tag, dd=fluid_dd, viscous_numerical_flux_func=viscous_numerical_flux_func, return_gradients=return_gradients, operator_states_quad=fluid_operator_states_quad, grad_t=fluid_grad_temperature, comm_tag=_FluidOperatorTag) - + if return_gradients: - fluid_rhs, fluid_grad_cv, fluid_grad_temperature = ns_result + fluid_rhs, fluid_grad_cv, fluid_grad_temperature = fluid_op_result else: - fluid_rhs = ns_result + fluid_rhs = fluid_op_result diffusion_result = diffusion_operator( dcoll, wall_kappa, wall_all_boundaries, wall_temperature, diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 6a575c80a..4ea5d2cdc 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -540,11 +540,11 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, def entropy_stable_ns_operator( - dcoll, state, gas_model, boundaries, time=0.0, + dcoll, gas_model, state, boundaries, *, time=0.0, inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, gradient_numerical_flux_func=num_flux_central, viscous_numerical_flux_func=viscous_facial_flux_central, - dd=DD_VOLUME_ALL, quadrature_tag=None, + dd=DD_VOLUME_ALL, quadrature_tag=DISCR_TAG_BASE, comm_tag=None, grad_cv=None, grad_t=None, operator_states_quad=None, return_gradients=False): r"""Compute RHS of the Navier-Stokes equations using flux-differencing. @@ -591,6 +591,8 @@ def entropy_stable_ns_operator( """ if not state.is_viscous: raise ValueError("Navier-Stokes operator expects viscous gas model.") + if not state.is_viscous: + raise ValueError("Navier-Stokes operator expects viscous gas model.") boundaries = normalize_boundaries(boundaries) @@ -598,9 +600,8 @@ def entropy_stable_ns_operator( dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) - # dd_base = as_dofdesc("vol") - # dd_vol = DOFDesc("vol", quadrature_tag) - # dd_faces = DOFDesc("all_faces", quadrature_tag) + from grudge.dof_desc import DISCR_TAG_BASE + dd_vol_base = dd_vol.with_discr_tag(DISCR_TAG_BASE) # NOTE: For single-gas this is just a fixed scalar. # However, for mixtures, gamma is a DOFArray. For now, @@ -619,7 +620,7 @@ def entropy_stable_ns_operator( conservative_to_entropy_vars(gamma, state_quad)) modified_conserved_fluid_state = \ - make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, + make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, state, entropy_vars, gamma, gas_model) def _reshape(shape, ary): @@ -629,7 +630,7 @@ def _reshape(shape, ary): return DOFArray(ary.array_context, data=tuple( subary.reshape(grp.nelements, *shape) # Just need group for determining the number of elements - for grp, subary in zip(dcoll.discr_from_dd("vol").groups, ary))) + for grp, subary in zip(dcoll.discr_from_dd(dd_vol_base).groups, ary))) flux_matrices = entropy_conserving_flux_chandrashekar( gas_model, From 52895b22a143a75b79e7b2f3a85a996b3358af70 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 26 Apr 2023 12:10:20 -0500 Subject: [PATCH 818/873] Deflake8 --- examples/poiseuille-mpi.py | 3 ++- examples/sod-mpi.py | 3 ++- mirgecom/euler.py | 2 +- mirgecom/multiphysics/thermally_coupled_fluid_wall.py | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 405c1efb9..9a3fa0343 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -329,7 +329,8 @@ def my_write_restart(step, t, state): def my_health_check(state, dv, component_errors): health_error = False - from mirgecom.simutil import check_naninf_local, check_range_local + # from mirgecom.simutil import check_naninf_local, check_range_local + from mirgecom.simutil import check_naninf_local if check_naninf_local(dcoll, "vol", dv.pressure): health_error = True logger.info(f"{rank=}: NANs/Infs in pressure data.") diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 9d236ca50..b8baa3f16 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -271,7 +271,8 @@ def my_write_restart(state, step, t): def my_health_check(pressure, component_errors): health_error = False - from mirgecom.simutil import check_naninf_local, check_range_local + # from mirgecom.simutil import check_naninf_local, check_range_local + from mirgecom.simutil import check_naninf_local # or check_range_local(dcoll, "vol", pressure, .09, 1.1): if check_naninf_local(dcoll, "vol", pressure): health_error = True diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 53e5325b3..ba6128d15 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -89,7 +89,7 @@ TracePair, interior_trace_pairs ) -from grudge.dof_desc import DOFDesc, as_dofdesc +from grudge.dof_desc import as_dofdesc from grudge.projection import volume_quadrature_project from grudge.flux_differencing import volume_flux_differencing diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index c12270a1e..99ae9bf9d 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -1279,7 +1279,7 @@ def coupled_ns_heat_operator( return_gradients=return_gradients, operator_states_quad=fluid_operator_states_quad, grad_t=fluid_grad_temperature, comm_tag=_FluidOperatorTag) - + if return_gradients: fluid_rhs, fluid_grad_cv, fluid_grad_temperature = fluid_op_result else: From 2e64fcea2541f3faae2b8525e75c15884c85f944 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 26 Apr 2023 12:17:28 -0500 Subject: [PATCH 819/873] Deflake8 --- mirgecom/navierstokes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 4ea5d2cdc..f48ae37f2 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -620,7 +620,7 @@ def entropy_stable_ns_operator( conservative_to_entropy_vars(gamma, state_quad)) modified_conserved_fluid_state = \ - make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, + make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, state, entropy_vars, gamma, gas_model) def _reshape(shape, ary): From 15a84edc285fb9f4343f8f0298f7e2ca87e05978 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 26 Apr 2023 13:54:35 -0500 Subject: [PATCH 820/873] More updates for multivol, better args handling. --- examples/poiseuille-mpi.py | 4 ++-- examples/sod-mpi.py | 11 +++-------- examples/taylor-green-mpi.py | 5 +++-- examples/vortex-mpi.py | 4 ++-- mirgecom/navierstokes.py | 7 +++++-- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 9a3fa0343..b2fd59f84 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -486,7 +486,7 @@ def my_rhs(t, state): parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -502,7 +502,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=lazy, + use_overintegration=args.overintegration or args.esdg, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class, use_esdg=args.esdg) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index b8baa3f16..b39155fd0 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -153,12 +153,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, cn = 0.5*(order + 1)**2 current_dt = current_cfl * actx.to_numpy(h_min_from_volume(dcoll)) / cn - if use_esdg: - print("Using ESDG, enabling overintegration.") - use_overintegration = True - operator_rhs = entropy_stable_euler_operator - else: - operator_rhs = euler_operator + operator_rhs = entropy_stable_euler_operator if use_esdg else euler_operator from grudge.dof_desc import DISCR_TAG_QUAD if use_overintegration: @@ -408,7 +403,7 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -425,6 +420,6 @@ def my_rhs(t, state): main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, - use_overintegration=args.overintegration, use_esdg=args.esdg) + use_overintegration=args.overintegration or args.esdg, use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/taylor-green-mpi.py b/examples/taylor-green-mpi.py index 820ecf29e..fdb50ce60 100644 --- a/examples/taylor-green-mpi.py +++ b/examples/taylor-green-mpi.py @@ -372,7 +372,7 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -389,7 +389,8 @@ def my_rhs(t, state): main(actx_class, order=args.order, t_final=args.tfinal, resolution=args.resolution, lazy=args.lazy, - use_logmgr=args.log, use_overintegration=args.overintegration, + use_logmgr=args.log, + use_overintegration=args.overintegration or args.esdg, use_esdg=args.esdg, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 5003736a9..9f650f3cf 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -426,7 +426,7 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -443,6 +443,6 @@ def my_rhs(t, state): main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, - use_overintegration=args.overintegration, use_esdg=args.esdg) + use_overintegration=args.overintegration or args.esdg, use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index f48ae37f2..8d9e71227 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -665,7 +665,8 @@ def interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(dcoll, state.temperature) + for tpair in interior_trace_pairs(dcoll, state.temperature, + volume_dd=dd_vol) ] def _interp_to_surf_modified_conservedvars(gamma, utpair): @@ -689,7 +690,8 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # variables on the quadrature grid # (obtaining state from projected entropy variables) _interp_to_surf_modified_conservedvars(gamma, tpair) - for tpair in interior_trace_pairs(dcoll, entropy_vars) + for tpair in interior_trace_pairs(dcoll, entropy_vars, + volume_dd=dd_vol) ] boundary_states = { @@ -725,6 +727,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): inviscid_term = op.inverse_mass( dcoll, + dd_vol, inviscid_vol_term - op.face_mass(dcoll, dd_allfaces_quad, inviscid_flux_bnd) ) From 3d4bd8136fd2f495d979165788a566056912f58a Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 26 Apr 2023 14:51:13 -0500 Subject: [PATCH 821/873] Add esdg for multiphysics case. --- examples/thermally-coupled-mpi.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/examples/thermally-coupled-mpi.py b/examples/thermally-coupled-mpi.py index e70675cff..4ccd05bbc 100644 --- a/examples/thermally-coupled-mpi.py +++ b/examples/thermally-coupled-mpi.py @@ -72,7 +72,9 @@ logmgr_add_device_memory_usage, set_sim_state ) - +from mirgecom.navierstokes import ( + ns_operator, entropy_stable_ns_operator +) from mirgecom.multiphysics.thermally_coupled_fluid_wall import ( coupled_ns_heat_operator, ) @@ -90,7 +92,8 @@ class MyRuntimeError(RuntimeError): def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None, lazy=False): + rst_filename=None, actx_class=None, lazy=False, + use_esdg=False): """Drive the example.""" cl_ctx = ctx_factory() @@ -114,6 +117,8 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) + fluid_operator = entropy_stable_ns_operator if use_esdg else ns_operator + from mirgecom.simutil import get_reasonable_memory_pool alloc = get_reasonable_memory_pool(cl_ctx, queue) @@ -190,7 +195,8 @@ def partition_generator_func(mesh, tag_to_elements, num_ranks): order = 3 dcoll = create_discretization_collection( - actx, volume_to_local_mesh, order=order) + actx, volume_to_local_mesh, order=order, + quadrature_order=order+2) dd_vol_fluid = DOFDesc(VolumeDomainTag("Fluid"), DISCR_TAG_BASE) dd_vol_wall = DOFDesc(VolumeDomainTag("Wall"), DISCR_TAG_BASE) @@ -520,7 +526,8 @@ def my_rhs(t, state, return_gradients=False): wall_kappa, wall_temperature, time=t, return_gradients=return_gradients, - quadrature_tag=quadrature_tag) + quadrature_tag=quadrature_tag, + fluid_operator=fluid_operator) if return_gradients: ( @@ -589,6 +596,8 @@ def my_rhs_and_gradients(t, state): help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") + parser.add_argument("--esdg", action="store_true", default=True, + help="use entropy-stable operator") parser.add_argument("--leap", action="store_true", help="use leap timestepper") parser.add_argument("--restart_file", help="root name of restart file") @@ -599,8 +608,9 @@ def my_rhs_and_gradients(t, state): if args.lazy: raise ValueError("Can't use lazy and profiling together.") + lazy = args.lazy or args.esdg from grudge.array_context import get_reasonable_array_context_class - actx_class = get_reasonable_array_context_class(lazy=args.lazy, distributed=True) + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) logging.basicConfig(format="%(message)s", level=logging.INFO) if args.casename: @@ -609,9 +619,9 @@ def my_rhs_and_gradients(t, state): if args.restart_file: rst_filename = args.restart_file - main(use_logmgr=args.log, use_overintegration=args.overintegration, + main(use_logmgr=args.log, use_overintegration=args.overintegration or args.esdg, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - lazy=args.lazy) + lazy=lazy, use_esdg=args.esdg) # vim: foldmethod=marker From 5299c3a4571bf399b895599ed62b077b9fc0ea20 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 27 Apr 2023 08:44:43 -0500 Subject: [PATCH 822/873] changes --- examples/combozzle-mpi.py | 52 +++++++++++---------- examples/poiseuille-mpi.py | 46 ++++++++++++------ examples/poiseuille-multispecies-mpi.py | 2 +- examples/scalar-advdiff-mpi.py | 30 +++++++++--- examples/taylor-green-mpi.py | 62 ++++++++++--------------- mirgecom/euler.py | 2 +- mirgecom/gas_model.py | 11 ++++- mirgecom/initializers.py | 60 +++++++++++++++--------- mirgecom/navierstokes.py | 4 +- 9 files changed, 158 insertions(+), 111 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index 0957d9465..a2c8bec7e 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -40,8 +40,14 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.euler import euler_operator -from mirgecom.navierstokes import ns_operator +from mirgecom.euler import ( + euler_operator, + entropy_stable_euler_operator +) +from mirgecom.navierstokes import ( + ns_operator, + entropy_stable_ns_operator +) from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, @@ -165,7 +171,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_profiling=False, casename=None, lazy=False, rst_filename=None, actx_class=PyOpenCLArrayContext, log_dependent=False, input_file=None, - force_eval=True): + force_eval=True, use_esdg=False): """Drive example.""" cl_ctx = ctx_factory() @@ -188,7 +194,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, # {{{ Some discretization parameters - dim = 3 + dim = 2 order = 3 # - scales the size of the domain @@ -257,10 +263,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, grid_only = 0 discr_only = 0 inviscid_only = 0 - inert_only = 0 + inert_only = 1 init_only = 0 - single_gas_only = 0 - nspecies = 7 + single_gas_only = 1 + nspecies = 0 use_cantera = 0 # }}} @@ -1123,6 +1129,11 @@ def dummy_post_step(step, t, dt, state): pre_step_func = my_pre_step post_step_func = my_post_step + inviscid_operator = \ + entropy_stable_euler_operator if use_esdg else euler_operator + viscous_operator = \ + entropy_stable_ns_operator if use_esdg else ns_operator + from mirgecom.flux import num_flux_central from mirgecom.gas_model import make_operator_fluid_states from mirgecom.navierstokes import grad_cv_operator @@ -1132,13 +1143,12 @@ def cfd_rhs(t, state): from mirgecom.gas_model import make_fluid_state fluid_state = make_fluid_state(cv=cv, gas_model=gas_model, temperature_seed=tseed) - fluid_operator_states = make_operator_fluid_states(dcoll, fluid_state, - gas_model, boundaries, - quadrature_tag) + fluid_operator_states = make_operator_fluid_states( + dcoll, fluid_state, gas_model, boundaries, quadrature_tag=quadrature_tag) if inviscid_only: fluid_rhs = \ - euler_operator( + inviscid_operator( dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, @@ -1151,36 +1161,30 @@ def cfd_rhs(t, state): quadrature_tag=quadrature_tag, operator_states_quad=fluid_operator_states) fluid_rhs = \ - ns_operator( + viscous_operator( dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov) - if inert_only: - chem_rhs = 0*fluid_rhs - else: - chem_rhs = eos.get_species_source_terms(cv, fluid_state.temperature) + if not inert_only: + fluid_rhs = fluid_rhs + eos.get_species_source_terms( + cv, fluid_state.temperature) if av_on: alpha_f = compute_av_alpha_field(fluid_state) indicator = smoothness_indicator(dcoll, fluid_state.mass_density, kappa=kappa_sc, s0=s0_sc) - av_rhs = av_laplacian_operator( + fluid_rhs = fluid_rhs + av_laplacian_operator( dcoll, fluid_state=fluid_state, boundaries=boundaries, time=t, gas_model=gas_model, grad_cv=grad_cv, operator_states_quad=fluid_operator_states, alpha=alpha_f, s0=s0_sc, kappa=kappa_sc, indicator=indicator) - else: - av_rhs = 0*fluid_rhs if sponge_on: - sponge_rhs = _sponge(fluid_state.cv) - else: - sponge_rhs = 0*fluid_rhs + fluid_rhs = fluid_rhs + _sponge(fluid_state.cv) - fluid_rhs = fluid_rhs + chem_rhs + av_rhs + sponge_rhs - tseed_rhs = fluid_state.temperature - tseed + tseed_rhs = actx.zeros_like(fluid_state.temperature) return make_obj_array([fluid_rhs, tseed_rhs]) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index b2fd59f84..1ae6b2cd3 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -45,7 +45,8 @@ from mirgecom.steppers import advance_state from mirgecom.boundary import ( PrescribedFluidBoundary, - AdiabaticNoslipWallBoundary + AdiabaticNoslipWallBoundary, + IsothermalWallBoundary ) from mirgecom.transport import SimpleTransport from mirgecom.eos import IdealSingleGas @@ -130,10 +131,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, current_step = 0 # some i/o frequencies - nstatus = 1 - nviz = 1 + nstatus = 10000 + nviz = 100 nrestart = 100 - nhealth = 1 + nhealth = 100 # some geometry setup dim = 2 @@ -222,10 +223,10 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): velocity = make_obj_array([u_x, u_y]) ke = .5*np.dot(velocity, velocity)*mass gamma = eos.gamma() - if cv is not None: - mass = cv.mass - vel = cv.velocity - ke = .5*np.dot(vel, vel)*mass + # if cv is not None: + # mass = cv.mass + # vel = cv.velocity + # ke = .5*np.dot(vel, vel)*mass rho_e = p_x/(gamma-1) + ke return make_conserved(2, mass=mass, energy=rho_e, @@ -234,7 +235,9 @@ def poiseuille_2d(x_vec, eos, cv=None, **kwargs): initializer = poiseuille_2d gas_model = GasModel(eos=IdealSingleGas(), transport=SimpleTransport(viscosity=mu)) - exact = initializer(x_vec=nodes, eos=gas_model.eos) + + from mirgecom.simutil import force_evaluation + exact = force_evaluation(actx, initializer(x_vec=nodes, eos=gas_model.eos)) def _boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context @@ -243,6 +246,12 @@ def _boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, cv=state_minus.cv, **kwargs), gas_model) + use_adiabatic = False + if use_adiabatic: + wall_boundary = AdiabaticNoslipWallBoundary() + else: + wall_boundary = IsothermalWallBoundary(wall_temperature=300) + boundaries = { BoundaryDomainTag("-1"): PrescribedFluidBoundary( @@ -250,8 +259,8 @@ def _boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): BoundaryDomainTag("+1"): PrescribedFluidBoundary( boundary_state_func=_boundary_solution), - BoundaryDomainTag("-2"): AdiabaticNoslipWallBoundary(), - BoundaryDomainTag("+2"): AdiabaticNoslipWallBoundary()} + BoundaryDomainTag("-2"): wall_boundary, + BoundaryDomainTag("+2"): wall_boundary} if rst_filename: current_t = restart_data["t"] @@ -264,7 +273,12 @@ def _boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): # Set the current state from time 0 current_cv = exact - current_state = make_fluid_state(cv=current_cv, gas_model=gas_model) + def _make_fluid_state(cv): + return make_fluid_state(cv=cv, gas_model=gas_model) + + make_fluid_state_compiled = actx.compile(_make_fluid_state) + + current_state = make_fluid_state_compiled(current_cv) vis_timer = None @@ -364,8 +378,10 @@ def my_health_check(state, dv, component_errors): return health_error def my_pre_step(step, t, dt, state): - fluid_state = make_fluid_state(cv=state, gas_model=gas_model) + + fluid_state = make_fluid_state_compiled(cv=state) dv = fluid_state.dv + try: component_errors = None @@ -394,8 +410,8 @@ def my_pre_step(step, t, dt, state): if do_viz: my_write_viz(step=step, t=t, state=state, dv=dv) - dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, - t_final, constant_cfl) + # dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, + # t_final, constant_cfl) if do_status: # needed because logging fails to make output if component_errors is None: diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 6a197678e..4062b791f 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -85,7 +85,7 @@ def _get_box_mesh(dim, a, b, n, t=None): def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None): + rst_filename=None, actx_class=None, use_esdg=False): """Drive the example.""" if actx_class is None: raise RuntimeError("Array context class missing.") diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 9b88de6e6..77f710e31 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -35,7 +35,10 @@ from mirgecom.transport import SimpleTransport -from mirgecom.navierstokes import ns_operator +from mirgecom.navierstokes import ( + ns_operator, + entropy_stable_ns_operator +) from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, @@ -72,7 +75,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, lazy=False): + rst_filename=None, lazy=False, use_esdg=False, + use_overintegration=False): """Drive example.""" cl_ctx = ctx_factory() @@ -104,6 +108,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) + rhs_operator = entropy_stable_ns_operator if use_esdg else ns_operator + # timestepping control current_step = 0 if use_leap: @@ -125,7 +131,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dim = 2 nel_1d = 4 - order = 1 + order = 3 rst_path = "restart_data/" rst_pattern = ( @@ -154,6 +160,12 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) + from grudge.dof_desc import DISCR_TAG_QUAD + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + def vol_min(x): from grudge.op import nodal_min return actx.to_numpy(nodal_min(dcoll, "vol", x))[()] @@ -369,8 +381,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return ns_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + return rhs_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -415,10 +428,14 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use entropy-stable rhs operator") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -434,6 +451,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, + use_overintegration=args.overintegration or args.esdg, use_esdg=args.esdg, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) # vim: foldmethod=marker diff --git a/examples/taylor-green-mpi.py b/examples/taylor-green-mpi.py index fdb50ce60..af80d60c3 100644 --- a/examples/taylor-green-mpi.py +++ b/examples/taylor-green-mpi.py @@ -1,4 +1,4 @@ -"""Demonstrate the inviscid Taylor-Green vortex problem.""" +"""Demonstratefl the inviscid Taylor-Green vortex problem.""" __copyright__ = """ Copyright (C) 2021 University of Illinois Board of Trustees @@ -32,17 +32,14 @@ from functools import partial -from arraycontext import thaw -from grudge.eager import EagerDGDiscretization from grudge.shortcuts import make_visualizer from mirgecom.euler import euler_operator, entropy_stable_euler_operator from mirgecom.simutil import ( - get_sim_timestep, generate_and_distribute_mesh ) from mirgecom.io import make_init_message - +from mirgecom.discretization import create_discretization_collection from mirgecom.integrators import lsrk54_step from mirgecom.steppers import advance_state from mirgecom.initializers import InviscidTaylorGreenVortex @@ -130,7 +127,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, nviz = 100 nhealth = 100 - dim = 3 + dim = 2 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" @@ -156,20 +153,10 @@ def main(actx_class, ctx_factory=cl.create_some_context, generate_mesh) local_nelements = local_mesh.nelements - from grudge.dof_desc import DISCR_TAG_BASE, DISCR_TAG_QUAD - from meshmode.discretization.poly_element import \ - default_simplex_group_factory, QuadratureSimplexGroupFactory - - discr = EagerDGDiscretization( - actx, local_mesh, - discr_tag_to_group_factory={ - DISCR_TAG_BASE: default_simplex_group_factory( - base_dim=local_mesh.dim, order=order), - DISCR_TAG_QUAD: QuadratureSimplexGroupFactory(2*order + 1) - }, - mpi_communicator=comm - ) - nodes = thaw(discr.nodes(), actx) + from grudge.dof_desc import DISCR_TAG_QUAD + + dcoll = create_discretization_collection(actx, local_mesh, order=order) + nodes = actx.thaw(dcoll.nodes()) if use_overintegration: quadrature_tag = DISCR_TAG_QUAD @@ -181,7 +168,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, if logmgr: logmgr_add_device_name(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) - logmgr_add_many_discretization_quantities(logmgr, discr, dim, + logmgr_add_many_discretization_quantities(logmgr, dcoll, dim, extract_vars_for_logging, units_for_logging) vis_timer = IntervalTimer("t_vis", "Time spent visualizing") @@ -202,7 +189,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, # Periodic domain, no boundary conditions (yay!) boundaries = {} - initial_condition = InviscidTaylorGreenVortex(dim=dim) + initial_condition = InviscidTaylorGreenVortex() if use_esdg: operator_rhs = entropy_stable_euler_operator @@ -218,11 +205,11 @@ def main(actx_class, ctx_factory=cl.create_some_context, logmgr_set_time(logmgr, current_step, current_t) else: # Set the current state from time 0 - current_cv = initial_condition(x_vec=nodes, eos=eos) - - current_state = make_fluid_state(current_cv, gas_model) + from mirgecom.simutil import force_evaluation + current_cv = force_evaluation(actx, + initial_condition(x_vec=nodes, eos=eos)) - visualizer = make_visualizer(discr) + visualizer = make_visualizer(dcoll) initname = "taylorgreen" eosname = eos.__class__.__name__ @@ -236,13 +223,19 @@ def main(actx_class, ctx_factory=cl.create_some_context, if rank == 0: logger.info(init_message) + def _make_fluid_state(cv, tseed): + return make_fluid_state(cv=cv, gas_model=gas_model) + + make_fluid_state_compiled = actx.compile(_make_fluid_state) + # current_state = make_fluid_state_compiled(current_cv, gas_model) + def my_write_viz(step, t, state, dv=None): if dv is None: dv = eos.dependent_vars(state) viz_fields = [("cv", state), ("dv", dv)] from mirgecom.simutil import write_visfile - write_visfile(discr, viz_fields, visualizer, vizname=casename, + write_visfile(dcoll, viz_fields, visualizer, vizname=casename, step=step, t=t, overwrite=True, vis_timer=vis_timer) def my_write_restart(step, t, state): @@ -263,13 +256,13 @@ def my_write_restart(step, t, state): def my_health_check(pressure): health_error = False from mirgecom.simutil import check_naninf_local - if check_naninf_local(discr, "vol", pressure): + if check_naninf_local(dcoll, "vol", pressure): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") return health_error def my_pre_step(step, t, dt, state): - fluid_state = make_fluid_state(state, gas_model) + fluid_state = make_fluid_state_compiled(state, gas_model) dv = fluid_state.dv try: @@ -302,13 +295,11 @@ def my_pre_step(step, t, dt, state): my_write_restart(step=step, t=t, state=state) raise - dt = get_sim_timestep(discr, fluid_state, t, dt, current_cfl, t_final, - constant_cfl) + # dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, t_final, + # constant_cfl) return state, dt def my_post_step(step, t, dt, state): - # Logmgr needs to know about EOS, dt, dim? - # imo this is a design/scope flaw if logmgr: set_dt(logmgr, dt) set_sim_state(logmgr, dim, state, eos) @@ -317,14 +308,11 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - return operator_rhs(discr, state=fluid_state, time=t, + return operator_rhs(dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag) - current_dt = get_sim_timestep(discr, current_state, current_t, current_dt, - current_cfl, t_final, constant_cfl) - current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, diff --git a/mirgecom/euler.py b/mirgecom/euler.py index ba6128d15..d92e674d4 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -319,7 +319,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # Make sure we get the state on the quadrature grid # restricted to the tag *btag* as_dofdesc(btag).with_discr_tag(quadrature_tag), - state, gas_model) for btag in boundaries + state, gas_model, entropy_stable=True) for btag in boundaries } # Interior interface state pairs consisting of modified conservative diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 1ff85b344..32f5122e2 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -352,7 +352,8 @@ def make_fluid_state(cv, gas_model, temperature_seed=None, return FluidState(cv=cv, dv=dv) -def project_fluid_state(dcoll, src, tgt, state, gas_model, limiter_func=None): +def project_fluid_state(dcoll, src, tgt, state, gas_model, limiter_func=None, + entropy_stable=False): """Project a fluid state onto a boundary consistent with the gas model. If required by the gas model, (e.g. gas is a mixture), this routine will @@ -396,10 +397,18 @@ def project_fluid_state(dcoll, src, tgt, state, gas_model, limiter_func=None): Thermally consistent fluid state """ cv_sd = op.project(dcoll, src, tgt, state.cv) + temperature_seed = None if state.is_mixture: temperature_seed = op.project(dcoll, src, tgt, state.dv.temperature) + if entropy_stable: + gamma = gas_model.eos.gamma(state.cv, state.temperature) + if isinstance(gamma, DOFArray): + gamma = op.project(dcoll, src, tgt, gamma) + ev_sd = conservative_to_entropy_vars(gamma, cv_sd) + cv_sd = entropy_to_conservative_vars(gamma, ev_sd) + smoothness_mu = None if state.dv.smoothness_mu is not None: smoothness_mu = op.project(dcoll, src, tgt, state.dv.smoothness_mu) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index a5d3a5d32..630cf6ae1 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -1568,16 +1568,17 @@ class InviscidTaylorGreenVortex: """Initialize Taylor-Green Vortex.""" def __init__( - self, *, dim=3, mach_number=0.05, domain_lengthscale=1, v0=1, p0=1 + self, *, mach_number=0.05, domain_lengthscale=1, v0=1, p0=1, + viscosity=1e-5 ): """Initialize vortex parameters.""" - self._dim = dim self._mach_number = mach_number self._domain_lengthscale = domain_lengthscale self._v0 = v0 self._p0 = p0 + self._mu = viscosity - def __call__(self, x_vec, *, eos=None, **kwargs): + def __call__(self, x_vec, *, eos=None, time=0, **kwargs): """ Create the 3D Taylor-Green initial profile at locations *x_vec*. @@ -1596,25 +1597,38 @@ def __call__(self, x_vec, *, eos=None, **kwargs): v0 = self._v0 p0 = self._p0 rho0 = gamma * self._mach_number ** 2 + dim = len(x_vec) + x = x_vec[0] + y = x_vec[1] + actx = x_vec[0].array_context + zeros = actx.zeros_like(x) + ones = 1 + zeros + nu = self._mu/rho0 + ft = actx.np.exp(-2*nu*time) + + if dim == 3: + z = x_vec[0] + + p = p0 + rho0 * (v0 ** 2) / 16 * ( + actx.np.cos(2*x / length + actx.np.cos(2*y / length)) + ) * actx.np.cos(2*z / length + 2) + u = ( + v0 * actx.np.sin(x / length) * actx.np.cos(y / length) + ) * actx.np.cos(z / length) + v = ( + -v0 * actx.np.cos(x / length) * actx.np.sin(y / length) + ) * actx.np.cos(z / length) + w = zeros + velocity = make_obj_array([u, v, w]) + else: + u = actx.np.sin(x)*actx.np.cos(y)*ft + v = -actx.np.cos(x)*actx.np.sin(y)*ft + p = rho0/4.0 * (actx.np.cos(2*x) + actx.np.sin(2*y)) * ft * ft + velocity = make_obj_array([u, v]) - x, y, z = x_vec - zeros = 0 * z - actx = x.array_context + momentum = rho0 * velocity + energy = p / (gamma - 1) + rho0 / 2 * np.dot(velocity, velocity) + rho = rho0 * ones - p = p0 + rho0 * (v0 ** 2) / 16 * ( - actx.np.cos(2*x / length + actx.np.cos(2*y / length)) - ) * actx.np.cos(2*z / length + 2) - u = ( - v0 * actx.np.sin(x / length) * actx.np.cos(y / length) - ) * actx.np.cos(z / length) - v = ( - -v0 * actx.np.cos(x / length) * actx.np.sin(y / length) - ) * actx.np.cos(z / length) - w = zeros - momentum = rho0 * make_obj_array([u, v, w]) - energy = p / (gamma - 1) + rho0 / 2 * (u ** 2 + v ** 2 + w ** 2) - - return make_conserved(dim=self._dim, - mass=rho0 * (1 + zeros), - energy=energy, - momentum=momentum) + return make_conserved(dim=self._dim, mass=rho, + energy=energy, momentum=momentum) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 8d9e71227..5ebfd66bc 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -591,8 +591,6 @@ def entropy_stable_ns_operator( """ if not state.is_viscous: raise ValueError("Navier-Stokes operator expects viscous gas model.") - if not state.is_viscous: - raise ValueError("Navier-Stokes operator expects viscous gas model.") boundaries = normalize_boundaries(boundaries) @@ -703,7 +701,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # Make sure we get the state on the quadrature grid # restricted to the tag *btag* as_dofdesc(btag).with_discr_tag(quadrature_tag), - state, gas_model) for btag in boundaries + state, gas_model, entropy_stable=True) for btag in boundaries } # Interior interface state pairs consisting of modified conservative From 602efa359f383609ac959e4b8bbee2839c119afe Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 May 2023 08:15:51 -0500 Subject: [PATCH 823/873] Bring back constant cfl, even though it recompiles. --- examples/poiseuille-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 1ae6b2cd3..67b761ce3 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -410,8 +410,8 @@ def my_pre_step(step, t, dt, state): if do_viz: my_write_viz(step=step, t=t, state=state, dv=dv) - # dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, - # t_final, constant_cfl) + dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, + t_final, constant_cfl) if do_status: # needed because logging fails to make output if component_errors is None: From 7b6e51615911bfa78ae95957e2fa87f14c342feb Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 May 2023 11:22:08 -0500 Subject: [PATCH 824/873] Apply stash --- mirgecom/euler.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index d92e674d4..2c9b2097d 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -61,7 +61,10 @@ DISCR_TAG_BASE, ) -from mirgecom.gas_model import make_operator_fluid_states +from mirgecom.gas_model import ( + make_operator_fluid_states, + make_fluid_state +) from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux_rusanov, @@ -310,6 +313,14 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): for tpair in interior_trace_pairs(dcoll, entropy_vars) ] + def _project_ev_to_modified_fluid_state(dd_bnd): + ev_bnd = op.project(dcoll, dd_vol_quad, dd_bnd, entropy_vars) + gamma_bnd = op.project(dcoll, dd_vol, dd_bnd, gamma) + cv_mod_bnd = entropy_to_conservative_vars(gamma_bnd, ev_bnd) + tseed_bnd = op.project(dcoll, dd_vol, dd_bnd, state.temperature) + return make_fluid_state(cv_mod_bnd, gas_model=gas_model, + temperature_seed=tseed_bnd) + boundary_states = { # TODO: Use modified conserved vars as the input state? # Would need to make an "entropy-projection" variant @@ -322,6 +333,18 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): state, gas_model, entropy_stable=True) for btag in boundaries } + # boundary_states = { + # # TODO: Use modified conserved vars as the input state? + # # Would need to make an "entropy-projection" variant + # # of *project_fluid_state* + # btag: project_fluid_state( + # dcoll, dd_vol, + # # Make sure we get the state on the quadrature grid + # # restricted to the tag *btag* + # as_dofdesc(btag).with_discr_tag(quadrature_tag), + # state, gas_model) for btag in boundaries + # } + # Interior interface state pairs consisting of modified conservative # variables and the corresponding temperature seeds interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, From 8427ba68541b3509b44521b821fef45b4bf2471e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 May 2023 11:27:22 -0500 Subject: [PATCH 825/873] Applied stash --- mirgecom/euler.py | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 2c9b2097d..d92e674d4 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -61,10 +61,7 @@ DISCR_TAG_BASE, ) -from mirgecom.gas_model import ( - make_operator_fluid_states, - make_fluid_state -) +from mirgecom.gas_model import make_operator_fluid_states from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux_rusanov, @@ -313,14 +310,6 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): for tpair in interior_trace_pairs(dcoll, entropy_vars) ] - def _project_ev_to_modified_fluid_state(dd_bnd): - ev_bnd = op.project(dcoll, dd_vol_quad, dd_bnd, entropy_vars) - gamma_bnd = op.project(dcoll, dd_vol, dd_bnd, gamma) - cv_mod_bnd = entropy_to_conservative_vars(gamma_bnd, ev_bnd) - tseed_bnd = op.project(dcoll, dd_vol, dd_bnd, state.temperature) - return make_fluid_state(cv_mod_bnd, gas_model=gas_model, - temperature_seed=tseed_bnd) - boundary_states = { # TODO: Use modified conserved vars as the input state? # Would need to make an "entropy-projection" variant @@ -333,18 +322,6 @@ def _project_ev_to_modified_fluid_state(dd_bnd): state, gas_model, entropy_stable=True) for btag in boundaries } - # boundary_states = { - # # TODO: Use modified conserved vars as the input state? - # # Would need to make an "entropy-projection" variant - # # of *project_fluid_state* - # btag: project_fluid_state( - # dcoll, dd_vol, - # # Make sure we get the state on the quadrature grid - # # restricted to the tag *btag* - # as_dofdesc(btag).with_discr_tag(quadrature_tag), - # state, gas_model) for btag in boundaries - # } - # Interior interface state pairs consisting of modified conservative # variables and the corresponding temperature seeds interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, From cffe57e2c9b2d02cf1cb1211a7aa53fc370014a5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 1 May 2023 16:12:08 -0500 Subject: [PATCH 826/873] Rotate poiseuille pass-through multiphysics inviscid num flux. --- examples/poiseuille-mpi.py | 3 +++ mirgecom/multiphysics/thermally_coupled_fluid_wall.py | 1 + 2 files changed, 4 insertions(+) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 67b761ce3..138209662 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -170,6 +170,9 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements + from meshmode.mesh.processing import rotate_mesh_around_axis + local_mesh = rotate_mesh_around_axis(local_mesh, theta=-np.pi/4) + order = 4 dcoll = create_discretization_collection(actx, local_mesh, order=order, quadrature_order=order+2) diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index 99ae9bf9d..38f1c7dba 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -1275,6 +1275,7 @@ def coupled_ns_heat_operator( fluid_op_result = fluid_operator( dcoll, gas_model, fluid_state, fluid_all_boundaries, time=time, quadrature_tag=quadrature_tag, dd=fluid_dd, + inviscid_numerical_flux_func=inviscid_numerical_flux_func, viscous_numerical_flux_func=viscous_numerical_flux_func, return_gradients=return_gradients, operator_states_quad=fluid_operator_states_quad, From 7cf39b8e327476b2b67f4cfb22fc5c268b7b8512 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 3 May 2023 07:27:56 -0500 Subject: [PATCH 827/873] Updates to esdg --- mirgecom/euler.py | 27 ++++++++++++++++++++------- mirgecom/gas_model.py | 17 ++++++++++------- mirgecom/inviscid.py | 4 ++-- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index d92e674d4..310e75acc 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -96,6 +96,14 @@ import grudge.op as op +class _ESFluidCVTag(): + pass + + +class _ESFluidTemperatureTag(): + pass + + def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, quadrature_tag=DISCR_TAG_BASE, dd=DD_VOLUME_ALL, @@ -183,9 +191,9 @@ def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, def entropy_stable_euler_operator( - dcoll, state, gas_model, boundaries, time=0.0, + dcoll, gas_model, state, boundaries, time=0.0, inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, - dd=DD_VOLUME_ALL, quadrature_tag=None): + dd=DD_VOLUME_ALL, quadrature_tag=None, comm_tag=None): """Compute RHS of the Euler flow equations using flux-differencing. Parameters @@ -252,7 +260,7 @@ def _reshape(shape, ary): return DOFArray(ary.array_context, data=tuple( subary.reshape(grp.nelements, *shape) # Just need group for determining the number of elements - for grp, subary in zip(dcoll.discr_from_dd("vol").groups, ary))) + for grp, subary in zip(dcoll.discr_from_dd(dd_vol).groups, ary))) flux_matrices = entropy_conserving_flux_chandrashekar( gas_model, @@ -283,7 +291,10 @@ def interp_to_surf_quad(utpair): # Get the interior trace pairs onto the surface quadrature # discretization (if any) interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(dcoll, state.temperature) + for tpair in interior_trace_pairs(dcoll, state.temperature, + volume_dd=dd_vol, + comm_tag=(_ESFluidTemperatureTag, + comm_tag)) ] def _interp_to_surf_modified_conservedvars(gamma, utpair): @@ -307,8 +318,8 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # variables on the quadrature grid # (obtaining state from projected entropy variables) _interp_to_surf_modified_conservedvars(gamma, tpair) - for tpair in interior_trace_pairs(dcoll, entropy_vars) - ] + for tpair in interior_trace_pairs(dcoll, entropy_vars, volume_dd=dd_vol, + comm_tag=(_ESFluidCVTag, comm_tag))] boundary_states = { # TODO: Use modified conserved vars as the input state? @@ -337,7 +348,9 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): return op.inverse_mass( dcoll, - inviscid_vol_term - op.face_mass(dcoll, dd_allfaces_quad, inviscid_flux_bnd) + dd_vol, + inviscid_vol_term - op.face_mass(dcoll, dd_allfaces_quad, + inviscid_flux_bnd) ) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 32f5122e2..0237cad17 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -403,11 +403,14 @@ def project_fluid_state(dcoll, src, tgt, state, gas_model, limiter_func=None, temperature_seed = op.project(dcoll, src, tgt, state.dv.temperature) if entropy_stable: - gamma = gas_model.eos.gamma(state.cv, state.temperature) - if isinstance(gamma, DOFArray): - gamma = op.project(dcoll, src, tgt, gamma) - ev_sd = conservative_to_entropy_vars(gamma, cv_sd) - cv_sd = entropy_to_conservative_vars(gamma, ev_sd) + temp_state = make_fluid_state(cv=cv_sd, gas_model=gas_model, + temperature_seed=temperature_seed, + limiter_func=limiter_func, limiter_dd=tgt) + gamma = gas_model.eos.gamma(temp_state.cv, temp_state.temperature) + # if isinstance(gamma, DOFArray): + # gamma = op.project(dcoll, src, tgt, gamma) + ev_sd = conservative_to_entropy_vars(gamma, temp_state) + cv_sd = entropy_to_conservative_vars(gamma, ev_sd) smoothness_mu = None if state.dv.smoothness_mu is not None: @@ -805,7 +808,7 @@ def conservative_to_entropy_vars(gamma, state): p = state.pressure rho_species = state.species_mass_density - u_square = sum(v ** 2 for v in u) + u_square = np.dot(u, u) s = actx.np.log(p) - gamma*actx.np.log(rho) rho_p = rho / p rho_species_p = rho_species / p @@ -850,7 +853,7 @@ def entropy_to_conservative_vars(gamma, ev: ConservedVars): v5 = ev_state.energy v6ns = ev_state.species_mass - v_square = sum(v**2 for v in v234) + v_square = np.dot(v234, v234) s = gamma - v1 + v_square/(2*v5) s_species = gamma - v6ns + v_square/(2*v5) iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 44c831863..c69ca2553 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -440,8 +440,8 @@ def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): beta_ll = 0.5 * rho_ll / p_ll beta_rr = 0.5 * rho_rr / p_rr - specific_kin_ll = 0.5 * sum(v**2 for v in u_ll) - specific_kin_rr = 0.5 * sum(v**2 for v in u_rr) + specific_kin_ll = 0.5 * np.dot(u_ll, u_ll) + specific_kin_rr = 0.5 * np.dot(u_rr, u_rr) rho_avg = 0.5 * (rho_ll + rho_rr) rho_mean = ln_mean(rho_ll, rho_rr) From d8d6e2a656a075a9aedcc246d3a0e2fc464dcf8e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 3 May 2023 09:23:41 -0500 Subject: [PATCH 828/873] Add esdg to more examples. --- examples/lump-mpi.py | 54 ++++++++++++++++++++++++++++--------- examples/scalar-lump-mpi.py | 47 +++++++++++++++++++++++++------- 2 files changed, 80 insertions(+), 21 deletions(-) diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index b26d9a58f..39791fb78 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -28,11 +28,15 @@ import pyopencl as cl from functools import partial +from grudge.dof_desc import DISCR_TAG_QUAD from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import euler_operator +from mirgecom.euler import ( + euler_operator, + entropy_stable_euler_operator +) from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -43,7 +47,7 @@ from mirgecom.integrators import rk4_step from mirgecom.steppers import advance_state from mirgecom.boundary import PrescribedFluidBoundary -from mirgecom.initializers import Lump +from mirgecom.initializers import Lump, Uniform from mirgecom.eos import IdealSingleGas from logpyle import IntervalTimer, set_dt @@ -68,7 +72,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, lazy=False, - rst_filename=None): + rst_filename=None, use_esdg=False, use_overintegration=False): """Drive example.""" cl_ctx = ctx_factory() @@ -106,7 +110,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.01 + t_final = 10.0 current_cfl = 1.0 current_dt = .001 current_t = 0 @@ -149,6 +153,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + rhs_operator = entropy_stable_euler_operator if use_esdg else euler_operator + vis_timer = None if logmgr: @@ -174,7 +185,9 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, vel = np.zeros(shape=(dim,)) orig = np.zeros(shape=(dim,)) vel[:dim] = 1.0 - initializer = Lump(dim=dim, center=orig, velocity=vel) + if False: + initializer = Lump(dim=dim, center=orig, velocity=vel) + initializer = Uniform(dim=dim, velocity=vel) from mirgecom.gas_model import GasModel, make_fluid_state gas_model = GasModel(eos=eos) @@ -248,16 +261,19 @@ def my_write_restart(state, step, t): def my_health_check(dv, state, exact): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(dcoll, "vol", dv.pressure) \ - or check_range_local(dcoll, "vol", dv.pressure, .9999999999, 1.00000001): + if check_naninf_local(dcoll, "vol", dv.pressure): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") + if check_range_local(dcoll, "vol", dv.pressure, .9999999999, 1.00000001): + health_error = True + logger.info(f"{rank=}: Pressure range violation.") + from mirgecom.simutil import compare_fluid_solutions component_errors = compare_fluid_solutions(dcoll, state, exact) exittol = .09 if max(component_errors) > exittol: - health_error = True + # health_error = True if rank == 0: logger.info("Solution diverged from exact soln.") @@ -330,8 +346,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return euler_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + return rhs_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -377,10 +394,22 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use entropy-stable Euler operator") + parser.add_argument("--overintegration", action="store_true", + help="use over-integration") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -396,6 +425,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, - use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, + use_esdg=args.esdg, use_overintegration=args.esdg or args.overintegration) # vim: foldmethod=marker diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 6b0ee947c..9e528a172 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -29,11 +29,15 @@ from functools import partial from pytools.obj_array import make_obj_array +from grudge.dof_desc import DISCR_TAG_QUAD from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import euler_operator +from mirgecom.euler import ( + euler_operator, + entropy_stable_euler_operator +) from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -69,7 +73,8 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, lazy=False): + rst_filename=None, lazy=False, use_overintegration=False, + use_esdg=False): """Drive example.""" cl_ctx = ctx_factory() @@ -148,6 +153,13 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + + rhs_operator = entropy_stable_euler_operator if use_esdg else euler_operator + vis_timer = None if logmgr: @@ -259,14 +271,17 @@ def my_write_restart(step, t, state): def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(dcoll, "vol", pressure) \ - or check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): + if check_naninf_local(dcoll, "vol", pressure): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") + if check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): + health_error = True + logger.info(f"{rank=}: Pressure range violation.") + exittol = .09 if max(component_errors) > exittol: - health_error = True + # health_error = True if rank == 0: logger.info("Solution diverged from exact soln.") @@ -341,8 +356,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return euler_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model) + return rhs_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -388,10 +404,22 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use entropy-stable Euler operator") + parser.add_argument("--overintegration", action="store_true", + help="use over-integration") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -407,6 +435,7 @@ def my_rhs(t, state): rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, - use_profiling=args.profiling, casename=casename, rst_filename=rst_filename) + use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, + use_esdg=args.esdg, use_overintegration=args.esdg or args.overintegration) # vim: foldmethod=marker From 72a9f9deba4426862d88806253834066b1f78e13 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 3 May 2023 10:40:14 -0500 Subject: [PATCH 829/873] Add missing comm tags in ESDG CNS! --- mirgecom/navierstokes.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 5ebfd66bc..d2b972a45 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -118,6 +118,14 @@ class _NSGradTemperatureTag: pass +class _ESFluidCVTag(): + pass + + +class _ESFluidTemperatureTag(): + pass + + def _gradient_flux_interior(dcoll, numerical_flux_func, tpair): """Compute interior face flux for gradient operator.""" from arraycontext import outer @@ -664,7 +672,9 @@ def interp_to_surf_quad(utpair): # discretization (if any) interp_to_surf_quad(tpair) for tpair in interior_trace_pairs(dcoll, state.temperature, - volume_dd=dd_vol) + volume_dd=dd_vol, + comm_tag=(_ESFluidTemperatureTag, + comm_tag)) ] def _interp_to_surf_modified_conservedvars(gamma, utpair): @@ -688,8 +698,8 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # variables on the quadrature grid # (obtaining state from projected entropy variables) _interp_to_surf_modified_conservedvars(gamma, tpair) - for tpair in interior_trace_pairs(dcoll, entropy_vars, - volume_dd=dd_vol) + for tpair in interior_trace_pairs(dcoll, entropy_vars, volume_dd=dd_vol, + comm_tag=(_ESFluidCVTag, comm_tag)) ] boundary_states = { From bd7ec90f7f8762fd99a92fb51459fa95030ad0ff Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 3 May 2023 14:41:55 -0500 Subject: [PATCH 830/873] Update mirgecom/euler.py Co-authored-by: Matt Smith --- mirgecom/euler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 310e75acc..9c5541e4b 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -203,7 +203,8 @@ def entropy_stable_euler_operator( quantities. boundaries - Dictionary of boundary functions, one for each valid btag + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag` time From c0d5144b1016d6cb471e623aca4fb73a5a7b9768 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 13:28:17 -0500 Subject: [PATCH 831/873] Add esdg option to classic dg euler_operator --- mirgecom/euler.py | 201 +++++++++++++++++++++++++--------------------- 1 file changed, 110 insertions(+), 91 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 310e75acc..3aab23905 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -104,95 +104,10 @@ class _ESFluidTemperatureTag(): pass -def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, - inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, - quadrature_tag=DISCR_TAG_BASE, dd=DD_VOLUME_ALL, - comm_tag=None, - operator_states_quad=None): - r"""Compute RHS of the Euler flow equations. - - Returns - ------- - :class:`~mirgecom.fluid.ConservedVars` - - The right-hand-side of the Euler flow equations: - - .. math:: - - \dot{\mathbf{q}} = - \nabla\cdot\mathbf{F} + - (\mathbf{F}\cdot\hat{n})_{\partial\Omega} - - Parameters - ---------- - state: :class:`~mirgecom.gas_model.FluidState` - - Fluid state object with the conserved state, and dependent - quantities. - - boundaries - - Dictionary of boundary functions, one for each valid - :class:`~grudge.dof_desc.BoundaryDomainTag` - - time - - Time - - gas_model: :class:`~mirgecom.gas_model.GasModel` - - Physical gas model including equation of state, transport, - and kinetic properties as required by fluid state - - quadrature_tag - - An optional identifier denoting a particular quadrature - discretization to use during operator evaluations. - - dd: grudge.dof_desc.DOFDesc - - the DOF descriptor of the discretization on which *state* lives. Must be a - volume on the base discretization. - - comm_tag: Hashable - - Tag for distributed communication - """ - boundaries = normalize_boundaries(boundaries) - - if not isinstance(dd.domain_tag, VolumeDomainTag): - raise TypeError("dd must represent a volume") - if dd.discretization_tag != DISCR_TAG_BASE: - raise ValueError("dd must belong to the base discretization") - - dd_vol = dd - dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) - dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) - - if operator_states_quad is None: - operator_states_quad = make_operator_fluid_states( - dcoll, state, gas_model, boundaries, quadrature_tag, - dd=dd_vol, comm_tag=comm_tag) - - volume_state_quad, interior_state_pairs_quad, domain_boundary_states_quad = \ - operator_states_quad - - # Compute volume contributions - inviscid_flux_vol = inviscid_flux(volume_state_quad) - - # Compute interface contributions - inviscid_flux_bnd = inviscid_flux_on_element_boundary( - dcoll, gas_model, boundaries, interior_state_pairs_quad, - domain_boundary_states_quad, quadrature_tag=quadrature_tag, - numerical_flux_func=inviscid_numerical_flux_func, time=time, - dd=dd_vol) - - return -div_operator(dcoll, dd_vol_quad, dd_allfaces_quad, - inviscid_flux_vol, inviscid_flux_bnd) - - def entropy_stable_euler_operator( dcoll, gas_model, state, boundaries, time=0.0, inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, + operator_states_quad=None, dd=DD_VOLUME_ALL, quadrature_tag=None, comm_tag=None): """Compute RHS of the Euler flow equations using flux-differencing. @@ -238,20 +153,27 @@ def entropy_stable_euler_operator( # we are re-using gamma from here and *not* recomputing # after applying entropy projections. It is unclear at this # time whether it's strictly necessary or if this is good enough - gamma = gas_model.eos.gamma(state.cv, state.temperature) + gamma_base = gas_model.eos.gamma(state.cv, state.temperature) # Interpolate state to vol quad grid - state_quad = project_fluid_state(dcoll, dd_vol, dd_vol_quad, state, gas_model) + if operator_states_quad is not None: + state_quad = operator_states_quad[0] + else: + state_quad = project_fluid_state( + dcoll, dd_vol, dd_vol_quad, state, gas_model) + + gamma_quad = gas_model.eos.gamma(state_quad.cv, state_quad.temperature) # Compute the projected (nodal) entropy variables entropy_vars = volume_quadrature_project( dcoll, dd_vol_quad, # Map to entropy variables - conservative_to_entropy_vars(gamma, state_quad)) + conservative_to_entropy_vars(gamma_quad, state_quad)) modified_conserved_fluid_state = \ make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, - state, entropy_vars, gamma, gas_model) + state, entropy_vars, gamma_base, + gas_model) def _reshape(shape, ary): if not isinstance(ary, DOFArray): @@ -317,7 +239,7 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): # Compute interior trace pairs using modified conservative # variables on the quadrature grid # (obtaining state from projected entropy variables) - _interp_to_surf_modified_conservedvars(gamma, tpair) + _interp_to_surf_modified_conservedvars(gamma_base, tpair) for tpair in interior_trace_pairs(dcoll, entropy_vars, volume_dd=dd_vol, comm_tag=(_ESFluidCVTag, comm_tag))] @@ -354,6 +276,103 @@ def _interp_to_surf_modified_conservedvars(gamma, utpair): ) +def euler_operator(dcoll, state, gas_model, boundaries, time=0.0, + inviscid_numerical_flux_func=None, + quadrature_tag=DISCR_TAG_BASE, dd=DD_VOLUME_ALL, + comm_tag=None, use_esdg=False, operator_states_quad=None): + r"""Compute RHS of the Euler flow equations. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + + The right-hand-side of the Euler flow equations: + + .. math:: + + \dot{\mathbf{q}} = - \nabla\cdot\mathbf{F} + + (\mathbf{F}\cdot\hat{n})_{\partial\Omega} + + Parameters + ---------- + state: :class:`~mirgecom.gas_model.FluidState` + + Fluid state object with the conserved state, and dependent + quantities. + + boundaries + + Dictionary of boundary functions, one for each valid + :class:`~grudge.dof_desc.BoundaryDomainTag` + + time + + Time + + gas_model: :class:`~mirgecom.gas_model.GasModel` + + Physical gas model including equation of state, transport, + and kinetic properties as required by fluid state + + quadrature_tag + + An optional identifier denoting a particular quadrature + discretization to use during operator evaluations. + + dd: grudge.dof_desc.DOFDesc + + the DOF descriptor of the discretization on which *state* lives. Must be a + volume on the base discretization. + + comm_tag: Hashable + + Tag for distributed communication + """ + boundaries = normalize_boundaries(boundaries) + + if not isinstance(dd.domain_tag, VolumeDomainTag): + raise TypeError("dd must represent a volume") + if dd.discretization_tag != DISCR_TAG_BASE: + raise ValueError("dd must belong to the base discretization") + + dd_vol = dd + dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) + dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) + + if operator_states_quad is None: + operator_states_quad = make_operator_fluid_states( + dcoll, state, gas_model, boundaries, quadrature_tag, + dd=dd_vol, comm_tag=comm_tag) + + if use_esdg: + if inviscid_numerical_flux_func is None: + inviscid_numerical_flux_func = entropy_stable_inviscid_flux_rusanov + return entropy_stable_euler_operator( + dcoll, gas_model=gas_model, state=state, boundaries=boundaries, + time=time, operator_states_quad=operator_states_quad, dd=dd, + inviscid_numerical_flux_func=inviscid_numerical_flux_func, + quadrature_tag=quadrature_tag, comm_tag=comm_tag) + + if inviscid_numerical_flux_func is None: + inviscid_numerical_flux_func = inviscid_facial_flux_rusanov + + volume_state_quad, interior_state_pairs_quad, domain_boundary_states_quad = \ + operator_states_quad + + # Compute volume contributions + inviscid_flux_vol = inviscid_flux(volume_state_quad) + + # Compute interface contributions + inviscid_flux_bnd = inviscid_flux_on_element_boundary( + dcoll, gas_model, boundaries, interior_state_pairs_quad, + domain_boundary_states_quad, quadrature_tag=quadrature_tag, + numerical_flux_func=inviscid_numerical_flux_func, time=time, + dd=dd_vol) + + return -div_operator(dcoll, dd_vol_quad, dd_allfaces_quad, + inviscid_flux_vol, inviscid_flux_bnd) + + # By default, run unitless NAME_TO_UNITS = { "mass": "", From c3485e464e63a205cca54c7e04737d5ebf98e2c5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 13:29:04 -0500 Subject: [PATCH 832/873] Use Euler operator for inviscid rhs part of CNS, esdg option --- mirgecom/navierstokes.py | 319 +++------------------------------------ 1 file changed, 20 insertions(+), 299 deletions(-) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index d2b972a45..28eedd38a 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -74,12 +74,14 @@ import grudge.op as op +from mirgecom.euler import ( + euler_operator, + entropy_stable_euler_operator +) from mirgecom.inviscid import ( inviscid_flux, inviscid_facial_flux_rusanov, inviscid_flux_on_element_boundary, - entropy_conserving_flux_chandrashekar, - entropy_stable_inviscid_flux_rusanov ) from mirgecom.viscous import ( viscous_flux, @@ -94,21 +96,6 @@ from mirgecom.gas_model import make_operator_fluid_states from mirgecom.utils import normalize_boundaries -from arraycontext import map_array_container -from mirgecom.gas_model import ( - project_fluid_state, - make_fluid_state_trace_pairs, - make_entropy_projected_fluid_state, - conservative_to_entropy_vars, - entropy_to_conservative_vars -) - -from meshmode.dof_array import DOFArray - -from grudge.dof_desc import as_dofdesc -from grudge.projection import volume_quadrature_project -from grudge.flux_differencing import volume_flux_differencing - class _NSGradCVTag: pass @@ -345,6 +332,7 @@ def grad_t_operator( def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, + inviscid_fluid_operator=euler_operator, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, gradient_numerical_flux_func=num_flux_central, viscous_numerical_flux_func=viscous_facial_flux_central, @@ -352,7 +340,7 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, dd=DD_VOLUME_ALL, comm_tag=None, # Added to avoid repeated computation # FIXME: See if there's a better way to do this - operator_states_quad=None, + operator_states_quad=None, use_esdg=False, grad_cv=None, grad_t=None, inviscid_terms_on=True): r"""Compute RHS of the Navier-Stokes equations. @@ -446,6 +434,9 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, if dd.discretization_tag != DISCR_TAG_BASE: raise ValueError("dd must belong to the base discretization") + if use_esdg: + inviscid_fluid_operator = entropy_stable_euler_operator + dd_vol = dd dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) @@ -530,7 +521,10 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, dd=dd_vol) # Add corresponding inviscid parts if enabled - if inviscid_terms_on: + # Note that the caller must explicitly set inviscid_fluid_operator=None + # to get this path. It forces the caller to _choose_ native inviscid + # terms if desired. + if inviscid_terms_on and inviscid_fluid_operator is None: vol_term = vol_term - inviscid_flux(state=vol_state_quad) bnd_term = bnd_term - inviscid_flux_on_element_boundary( dcoll, gas_model, boundaries, inter_elem_bnd_states_quad, @@ -540,288 +534,15 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, ns_rhs = div_operator(dcoll, dd_vol_quad, dd_allfaces_quad, vol_term, bnd_term) + # Call an external operator for the invsicid terms (Euler by default) + if inviscid_terms_on and inviscid_fluid_operator is not None: + ns_rhs = ns_rhs + inviscid_fluid_operator( + dcoll, state=state, gas_model=gas_model, boundaries=boundaries, + time=time, dd=dd, comm_tag=comm_tag, quadrature_tag=quadrature_tag, + operator_states_quad=operator_states_quad) + if return_gradients: return ns_rhs, grad_cv, grad_t return ns_rhs # }}} NS RHS - - -def entropy_stable_ns_operator( - dcoll, gas_model, state, boundaries, *, time=0.0, - inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, - gradient_numerical_flux_func=num_flux_central, - viscous_numerical_flux_func=viscous_facial_flux_central, - dd=DD_VOLUME_ALL, quadrature_tag=DISCR_TAG_BASE, - comm_tag=None, grad_cv=None, grad_t=None, - operator_states_quad=None, return_gradients=False): - r"""Compute RHS of the Navier-Stokes equations using flux-differencing. - - Returns - ------- - numpy.ndarray - The right-hand-side of the Navier-Stokes equations: - - .. math:: - - \partial_t \mathbf{Q} = \nabla\cdot(\mathbf{F}_V - \mathbf{F}_I) - - Parameters - ---------- - state: :class:`~mirgecom.gas_model.FluidState` - - Fluid state object with the conserved state, and dependent - quantities. - - boundaries - Dictionary of boundary functions, one for each valid btag - - time - Time - - eos: mirgecom.eos.GasEOS - Implementing the pressure and temperature functions for - returning pressure and temperature as a function of the state q. - Implementing the transport properties including heat conductivity, - and species diffusivities type(mirgecom.transport.TransportModel). - - quadrature_tag - An optional identifier denoting a particular quadrature - discretization to use during operator evaluations. - The default value is *None*. - - Returns - ------- - :class:`mirgecom.fluid.ConservedVars` - - Agglomerated object array of DOF arrays representing the RHS of the - Navier-Stokes equations. - """ - if not state.is_viscous: - raise ValueError("Navier-Stokes operator expects viscous gas model.") - - boundaries = normalize_boundaries(boundaries) - - dd_vol = dd - dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) - dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) - - from grudge.dof_desc import DISCR_TAG_BASE - dd_vol_base = dd_vol.with_discr_tag(DISCR_TAG_BASE) - - # NOTE: For single-gas this is just a fixed scalar. - # However, for mixtures, gamma is a DOFArray. For now, - # we are re-using gamma from here and *not* recomputing - # after applying entropy projections. It is unclear at this - # time whether it's strictly necessary or if this is good enough - gamma = gas_model.eos.gamma(state.cv, state.temperature) - - # Interpolate state to vol quad grid - state_quad = project_fluid_state(dcoll, dd_vol, dd_vol_quad, state, gas_model) - - # Compute the projected (nodal) entropy variables - entropy_vars = volume_quadrature_project( - dcoll, dd_vol_quad, - # Map to entropy variables - conservative_to_entropy_vars(gamma, state_quad)) - - modified_conserved_fluid_state = \ - make_entropy_projected_fluid_state(dcoll, dd_vol_quad, dd_allfaces_quad, - state, entropy_vars, gamma, gas_model) - - def _reshape(shape, ary): - if not isinstance(ary, DOFArray): - return map_array_container(partial(_reshape, shape), ary) - - return DOFArray(ary.array_context, data=tuple( - subary.reshape(grp.nelements, *shape) - # Just need group for determining the number of elements - for grp, subary in zip(dcoll.discr_from_dd(dd_vol_base).groups, ary))) - - flux_matrices = entropy_conserving_flux_chandrashekar( - gas_model, - _reshape((1, -1), modified_conserved_fluid_state), - _reshape((-1, 1), modified_conserved_fluid_state)) - - # Compute volume derivatives using flux differencing - inviscid_vol_term = \ - -volume_flux_differencing(dcoll, dd_vol_quad, dd_allfaces_quad, - flux_matrices) - - # Compute volume derivatives using flux differencing - # inviscid_vol_term = \ - # -volume_flux_differencing(discr, dd_vol, dd_faces, flux_matrices) - - def interp_to_surf_quad(utpair): - local_dd = utpair.dd - local_dd_quad = local_dd.with_discr_tag(quadrature_tag) - return TracePair( - local_dd_quad, - interior=op.project(dcoll, local_dd, local_dd_quad, utpair.int), - exterior=op.project(dcoll, local_dd, local_dd_quad, utpair.ext) - ) - - tseed_interior_pairs = None - if state.is_mixture: - # If this is a mixture, we need to exchange the temperature field because - # mixture pressure (used in the inviscid flux calculations) depends on - # temperature and we need to seed the temperature calculation for the - # (+) part of the partition boundary with the remote temperature data. - tseed_interior_pairs = [ - # Get the interior trace pairs onto the surface quadrature - # discretization (if any) - interp_to_surf_quad(tpair) - for tpair in interior_trace_pairs(dcoll, state.temperature, - volume_dd=dd_vol, - comm_tag=(_ESFluidTemperatureTag, - comm_tag)) - ] - - def _interp_to_surf_modified_conservedvars(gamma, utpair): - # Takes a trace pair containing the projected entropy variables - # and converts them into conserved variables on the quadrature grid. - local_dd = utpair.dd - local_dd_quad = local_dd.with_discr_tag(quadrature_tag) - # Interpolate entropy variables to the surface quadrature grid - vtilde_tpair = op.project(dcoll, local_dd, local_dd_quad, utpair) - if isinstance(gamma, DOFArray): - gamma = op.project(dcoll, dd_vol, local_dd_quad, gamma) - return TracePair( - local_dd_quad, - # Convert interior and exterior states to conserved variables - interior=entropy_to_conservative_vars(gamma, vtilde_tpair.int), - exterior=entropy_to_conservative_vars(gamma, vtilde_tpair.ext) - ) - - cv_interior_pairs = [ - # Compute interior trace pairs using modified conservative - # variables on the quadrature grid - # (obtaining state from projected entropy variables) - _interp_to_surf_modified_conservedvars(gamma, tpair) - for tpair in interior_trace_pairs(dcoll, entropy_vars, volume_dd=dd_vol, - comm_tag=(_ESFluidCVTag, comm_tag)) - ] - - boundary_states = { - # TODO: Use modified conserved vars as the input state? - # Would need to make an "entropy-projection" variant - # of *project_fluid_state* - btag: project_fluid_state( - dcoll, dd_vol, - # Make sure we get the state on the quadrature grid - # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), - state, gas_model, entropy_stable=True) for btag in boundaries - } - - # Interior interface state pairs consisting of modified conservative - # variables and the corresponding temperature seeds - interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, - gas_model, - tseed_interior_pairs) - - # Interior interface state pairs consisting of modified conservative - # variables and the corresponding temperature seeds - interior_states = make_fluid_state_trace_pairs(cv_interior_pairs, - gas_model, - tseed_interior_pairs) - - # Compute interface contributions - inviscid_flux_bnd = inviscid_flux_on_element_boundary( - dcoll, gas_model, boundaries, interior_states, - boundary_states, quadrature_tag=quadrature_tag, - numerical_flux_func=inviscid_numerical_flux_func, time=time, - dd=dd_vol) - - inviscid_term = op.inverse_mass( - dcoll, - dd_vol, - inviscid_vol_term - op.face_mass(dcoll, dd_allfaces_quad, inviscid_flux_bnd) - ) - - # Make model-consistent fluid state data (i.e. CV *and* DV) for: - # - Volume: vol_state_quad - # - Element-element boundary face trace pairs: inter_elem_bnd_states_quad - # - Interior states (Q_minus) on the domain boundary: domain_bnd_states_quad - # - # Note: these states will live on the quadrature domain if one is given, - # otherwise they stay on the interpolatory/base domain. - if operator_states_quad is None: - operator_states_quad = make_operator_fluid_states( - dcoll, state, gas_model, boundaries, quadrature_tag, - dd=dd_vol, comm_tag=comm_tag) - - vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ - operator_states_quad - - # {{{ Local utilities - - # transfer trace pairs to quad grid, update pair dd - interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll, quadrature_tag) - - # }}} - - # {{{ === Compute grad(CV) === - - if grad_cv is None: - grad_cv = grad_cv_operator( - dcoll, gas_model, boundaries, state, time=time, - numerical_flux_func=gradient_numerical_flux_func, - quadrature_tag=quadrature_tag, dd=dd_vol, - operator_states_quad=operator_states_quad, comm_tag=comm_tag) - - # Communicate grad(CV) and put it on the quadrature domain - grad_cv_interior_pairs = [ - # Get the interior trace pairs onto the surface quadrature - # discretization (if any) - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, grad_cv, volume_dd=dd_vol, comm_tag=(_NSGradCVTag, comm_tag)) - ] - - # }}} Compute grad(CV) - - # {{{ === Compute grad(temperature) === - - if grad_t is None: - grad_t = grad_t_operator( - dcoll, gas_model, boundaries, state, time=time, - numerical_flux_func=gradient_numerical_flux_func, - quadrature_tag=quadrature_tag, dd=dd_vol, - operator_states_quad=operator_states_quad, comm_tag=comm_tag) - - # Create the interior face trace pairs, perform MPI exchange, interp to quad - grad_t_interior_pairs = [ - # Get the interior trace pairs onto the surface quadrature - # discretization (if any) - interp_to_surf_quad(tpair=tpair) - for tpair in interior_trace_pairs( - dcoll, grad_t, volume_dd=dd_vol, - comm_tag=(_NSGradTemperatureTag, comm_tag)) - ] - - # }}} compute grad(temperature) - - # {{{ === Navier-Stokes RHS === - - # Physical viscous flux in the element volume - vol_term = viscous_flux(state=vol_state_quad, - # Interpolate gradients to the quadrature grid - grad_cv=op.project(dcoll, dd_vol, dd_vol_quad, grad_cv), - grad_t=op.project(dcoll, dd_vol, dd_vol_quad, grad_t)) - - # Physical viscous flux (f .dot. n) is the boundary term for the div op - bnd_term = viscous_flux_on_element_boundary( - dcoll, gas_model, boundaries, inter_elem_bnd_states_quad, - domain_bnd_states_quad, grad_cv, grad_cv_interior_pairs, - grad_t, grad_t_interior_pairs, quadrature_tag=quadrature_tag, - numerical_flux_func=viscous_numerical_flux_func, time=time, - dd=dd_vol) - - ns_rhs = \ - (div_operator(dcoll, dd_vol_quad, dd_allfaces_quad, vol_term, bnd_term) - + inviscid_term) - - if return_gradients: - return ns_rhs, grad_cv, grad_t - return ns_rhs From 4b9396f28446e3257021a456a7fe730dc73da263 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 13:29:49 -0500 Subject: [PATCH 833/873] Change fluid_operator --> ns_operator --- mirgecom/multiphysics/thermally_coupled_fluid_wall.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index d045f6712..5da3643a9 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -1065,7 +1065,7 @@ def coupled_ns_heat_operator( interface_noslip=True, return_gradients=False, wall_penalty_amount=None, - fluid_operator=ns_operator): + ns_operator=ns_operator): r"""Compute the RHS of the fluid and wall subdomains. Augments *fluid_boundaries* and *wall_boundaries* with the boundaries for the @@ -1281,7 +1281,7 @@ def coupled_ns_heat_operator( wall_all_boundaries.update(wall_interface_boundaries) # Compute the subdomain NS/diffusion operators using the augmented boundaries - fluid_op_result = fluid_operator( + ns_op_result = ns_operator( dcoll, gas_model, fluid_state, fluid_all_boundaries, time=time, quadrature_tag=quadrature_tag, dd=fluid_dd, inviscid_numerical_flux_func=inviscid_numerical_flux_func, @@ -1291,9 +1291,9 @@ def coupled_ns_heat_operator( grad_t=fluid_grad_temperature, comm_tag=_FluidOperatorTag) if return_gradients: - fluid_rhs, fluid_grad_cv, fluid_grad_temperature = fluid_op_result + fluid_rhs, fluid_grad_cv, fluid_grad_temperature = ns_op_result else: - fluid_rhs = fluid_op_result + fluid_rhs = ns_op_result diffusion_result = diffusion_operator( dcoll, wall_kappa, wall_all_boundaries, wall_temperature, From 4ab754b1cc7af748b8eea1f44fb4681711d255f7 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 13:30:15 -0500 Subject: [PATCH 834/873] Add ESDG option to examples. --- examples/autoignition-mpi.py | 17 +++++++--- examples/combozzle-mpi.py | 44 ++++++++++++++----------- examples/doublemach-mpi.py | 21 +++++++++--- examples/doublemach_physical_av-mpi.py | 29 ++++++++++++---- examples/heat-source-mpi.py | 11 +++++-- examples/hotplate-mpi.py | 29 +++++++++++++--- examples/lump-mpi.py | 13 +++----- examples/mixture-mpi.py | 22 ++++++++++--- examples/multiple-volumes-mpi.py | 17 +++++++--- examples/nsmix-mpi.py | 24 ++++++++++---- examples/poiseuille-local_dt-mpi.py | 20 ++++++++--- examples/poiseuille-mpi.py | 18 ++++++---- examples/poiseuille-multispecies-mpi.py | 19 ++++++++--- examples/pulse-mpi.py | 19 ++++++++--- examples/scalar-advdiff-mpi.py | 21 +++++++----- examples/scalar-lump-mpi.py | 13 +++----- examples/sod-mpi.py | 19 +++++++---- examples/taylor-green-mpi.py | 30 ++++++++--------- examples/thermally-coupled-mpi.py | 20 +++++++---- examples/vortex-mpi.py | 28 +++++++--------- 20 files changed, 283 insertions(+), 151 deletions(-) diff --git a/examples/autoignition-mpi.py b/examples/autoignition-mpi.py index 16dfe379b..bdfe788a3 100644 --- a/examples/autoignition-mpi.py +++ b/examples/autoignition-mpi.py @@ -78,7 +78,7 @@ class MyRuntimeError(RuntimeError): def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_overintegration=False, use_profiling=False, casename=None, lazy=False, rst_filename=None, log_dependent=True, - viscous_terms_on=False): + viscous_terms_on=False, use_esdg=False): """Drive example.""" cl_ctx = ctx_factory() @@ -618,8 +618,9 @@ def my_rhs(t, state): fluid_rhs = fluid_operator( dcoll, state=fluid_state, gas_model=gas_model, time=t, boundaries=boundaries, operator_states_quad=fluid_operator_states, - quadrature_tag=quadrature_tag, + quadrature_tag=quadrature_tag, use_esdg=use_esdg, inviscid_numerical_flux_func=inv_num_flux_func) + chem_rhs = eos.get_species_source_terms(cv, fluid_state.temperature) tseed_rhs = fluid_state.temperature - tseed cv_rhs = fluid_rhs + chem_rhs @@ -674,6 +675,8 @@ def my_rhs(t, state): help="turns on compressible Navier-Stokes RHS") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") parser.add_argument("--leap", action="store_true", @@ -683,8 +686,13 @@ def my_rhs(t, state): args = parser.parse_args() from warnings import warn warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") log_dependent = False - lazy = args.lazy + lazy = args.lazy or args.esdg viscous_terms_on = args.navierstokes if args.profiling: if lazy: @@ -701,7 +709,8 @@ def my_rhs(t, state): rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, - use_overintegration=args.overintegration, use_profiling=args.profiling, + use_overintegration=args.overintegration or args.esdg, + use_profiling=args.profiling, use_esdg=args.esdg, lazy=lazy, casename=casename, rst_filename=rst_filename, log_dependent=log_dependent, viscous_terms_on=args.navierstokes) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index a2c8bec7e..c5a07e5fc 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -40,14 +40,9 @@ from logpyle import IntervalTimer, set_dt from mirgecom.euler import extract_vars_for_logging, units_for_logging -from mirgecom.euler import ( - euler_operator, - entropy_stable_euler_operator -) -from mirgecom.navierstokes import ( - ns_operator, - entropy_stable_ns_operator -) +from mirgecom.euler import euler_operator +from mirgecom.navierstokes import ns_operator + from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, @@ -1129,11 +1124,6 @@ def dummy_post_step(step, t, dt, state): pre_step_func = my_pre_step post_step_func = my_post_step - inviscid_operator = \ - entropy_stable_euler_operator if use_esdg else euler_operator - viscous_operator = \ - entropy_stable_ns_operator if use_esdg else ns_operator - from mirgecom.flux import num_flux_central from mirgecom.gas_model import make_operator_fluid_states from mirgecom.navierstokes import grad_cv_operator @@ -1148,12 +1138,13 @@ def cfd_rhs(t, state): if inviscid_only: fluid_rhs = \ - inviscid_operator( + euler_operator( dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, quadrature_tag=quadrature_tag, - operator_states_quad=fluid_operator_states) + operator_states_quad=fluid_operator_states, + use_esdg=use_esdg) else: grad_cv = grad_cv_operator(dcoll, gas_model, boundaries, fluid_state, time=t, @@ -1161,10 +1152,12 @@ def cfd_rhs(t, state): quadrature_tag=quadrature_tag, operator_states_quad=fluid_operator_states) fluid_rhs = \ - viscous_operator( + ns_operator( dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag, - inviscid_numerical_flux_func=inviscid_facial_flux_rusanov) + inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, + operator_states_quad=fluid_operator_states, + use_esdg=use_esdg) if not inert_only: fluid_rhs = fluid_rhs + eos.get_species_source_terms( @@ -1275,6 +1268,8 @@ def dummy_rhs(t, state): help="Turn off force lazy eval between timesteps") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") + parser.add_argument("--esdg", action="store_true", default=True, + help="use entropy-stable for inviscid terms") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") parser.add_argument("--leap", action="store_true", @@ -1282,11 +1277,20 @@ def dummy_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + from warnings import warn warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") - lazy = args.lazy + + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg log_dependent = False force_eval = not args.no_force + if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -1311,9 +1315,9 @@ def dummy_rhs(t, state): print(f"Calling main: {time.ctime(time.time())}") main(use_logmgr=args.log, use_leap=args.leap, input_file=input_file, - use_overintegration=args.overintegration, + use_overintegration=args.overintegration or args.esdg, use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent, force_eval=force_eval) + log_dependent=log_dependent, force_eval=force_eval, use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/doublemach-mpi.py b/examples/doublemach-mpi.py index f249c7d80..618a35a79 100644 --- a/examples/doublemach-mpi.py +++ b/examples/doublemach-mpi.py @@ -118,7 +118,8 @@ def get_doublemach_mesh(): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, use_overintegration=False, - casename=None, rst_filename=None, actx_class=None, lazy=False): + casename=None, rst_filename=None, actx_class=None, lazy=False, + use_esdg=False): """Drive the example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -403,7 +404,8 @@ def my_rhs(t, state): return ( euler_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, quadrature_tag=quadrature_tag) + gas_model=gas_model, quadrature_tag=quadrature_tag, + use_esdg=use_esdg) + av_laplacian_operator(dcoll, fluid_state=fluid_state, boundaries=boundaries, time=t, gas_model=gas_model, @@ -451,12 +453,20 @@ def my_rhs(t, state): help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--leap", action="store_true", help="use leap timestepper") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -472,7 +482,8 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + use_overintegration=args.overintegration or args.esdg, lazy=lazy, + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/doublemach_physical_av-mpi.py b/examples/doublemach_physical_av-mpi.py index d667da451..096c20042 100644 --- a/examples/doublemach_physical_av-mpi.py +++ b/examples/doublemach_physical_av-mpi.py @@ -122,7 +122,8 @@ def get_doublemach_mesh(): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, use_overintegration=False, - casename=None, rst_filename=None, actx_class=None, lazy=False): + casename=None, rst_filename=None, actx_class=None, lazy=False, + use_esdg=False): """Drive the example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -607,7 +608,8 @@ def _my_rhs(t, state): return ( euler_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, quadrature_tag=quadrature_tag) + gas_model=gas_model, quadrature_tag=quadrature_tag, + use_esdg=use_esdg) ) def _my_rhs_av(t, state): @@ -617,7 +619,8 @@ def _my_rhs_av(t, state): return ( euler_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, quadrature_tag=quadrature_tag) + gas_model=gas_model, quadrature_tag=quadrature_tag, + use_esdg=use_esdg) + av_laplacian_operator(dcoll, fluid_state=fluid_state, boundaries=boundaries, time=t, gas_model=gas_model, @@ -635,7 +638,8 @@ def _my_rhs_phys_visc_av(t, state): return ( ns_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, quadrature_tag=quadrature_tag) + gas_model=gas_model, quadrature_tag=quadrature_tag, + use_esdg=use_esdg) ) def _my_rhs_phys_visc_div_av(t, state): @@ -659,7 +663,7 @@ def _my_rhs_phys_visc_div_av(t, state): ns_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag, - grad_cv=grad_cv) + grad_cv=grad_cv, use_esdg=use_esdg) ) my_rhs = (_my_rhs if use_av == 0 else _my_rhs_av if use_av == 1 else @@ -720,6 +724,8 @@ def _my_rhs_phys_visc_div_av(t, state): help="switch to a lazy computation mode") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") parser.add_argument("--leap", action="store_true", @@ -727,7 +733,15 @@ def _my_rhs_phys_visc_div_av(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -744,7 +758,8 @@ def _my_rhs_phys_visc_div_av(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=lazy, + use_overintegration=args.overintegration or args.esdg, + use_esdg=args.esdg, lazy=lazy, casename=casename, rst_filename=rst_filename, actx_class=actx_class) # vim: foldmethod=marker diff --git a/examples/heat-source-mpi.py b/examples/heat-source-mpi.py index 0772ed2f6..c0732cbf2 100644 --- a/examples/heat-source-mpi.py +++ b/examples/heat-source-mpi.py @@ -50,7 +50,7 @@ @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, lazy=False, - rst_filename=None): + rst_filename=None, use_overintegration=False): """Run the example.""" cl_ctx = cl.create_some_context() queue = cl.CommandQueue(cl_ctx) @@ -113,6 +113,12 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) + from grudge.dof_desc import DISCR_TAG_QUAD + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None # noqa + if dim == 2: # no deep meaning here, just a fudge factor dt = 0.0025/(nel_1d*order**2) @@ -151,7 +157,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, def rhs(t, u): return ( - diffusion_operator(dcoll, kappa=1, boundaries=boundaries, u=u) + diffusion_operator(dcoll, kappa=1, boundaries=boundaries, u=u, + quadrature_tag=quadrature_tag) + actx.np.exp(-np.dot(nodes, nodes)/source_width**2)) compiled_rhs = actx.compile(rhs) diff --git a/examples/hotplate-mpi.py b/examples/hotplate-mpi.py index e08fda011..c54752f72 100644 --- a/examples/hotplate-mpi.py +++ b/examples/hotplate-mpi.py @@ -83,7 +83,8 @@ def _get_box_mesh(dim, a, b, n, t=None): @mpi_entry_point def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None, lazy=False): + rst_filename=None, actx_class=None, lazy=False, + use_esdg=False, use_overintegration=False): """Drive the example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -171,6 +172,12 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) + from grudge.dof_desc import DISCR_TAG_QUAD + if use_overintegration: + quadrature_tag = DISCR_TAG_QUAD + else: + quadrature_tag = None + if logmgr: logmgr_add_cl_device_info(logmgr, queue) logmgr_add_device_memory_usage(logmgr, queue) @@ -410,7 +417,8 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) return ns_operator(dcoll, boundaries=boundaries, state=fluid_state, - time=t, gas_model=gas_model) + time=t, gas_model=gas_model, use_esdg=use_esdg, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -455,12 +463,24 @@ def my_rhs(t, state): help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--leap", action="store_true", help="use leap timestepper") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -477,6 +497,7 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - lazy=lazy) + lazy=lazy, use_overintegration=args.overintegration or args.esdg, + use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 39791fb78..3ab05186b 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -33,10 +33,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import ( - euler_operator, - entropy_stable_euler_operator -) +from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -158,8 +155,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: quadrature_tag = None - rhs_operator = entropy_stable_euler_operator if use_esdg else euler_operator - vis_timer = None if logmgr: @@ -346,9 +341,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return rhs_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag) + return euler_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag, use_esdg=use_esdg) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) diff --git a/examples/mixture-mpi.py b/examples/mixture-mpi.py index 5a8215f78..738fb5c02 100644 --- a/examples/mixture-mpi.py +++ b/examples/mixture-mpi.py @@ -74,7 +74,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, rst_filename=None, - log_dependent=False, lazy=False): + log_dependent=False, lazy=False, use_esdg=False, use_overintegration=False): """Drive example.""" cl_ctx = ctx_factory() @@ -154,7 +154,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, dcoll = create_discretization_collection(actx, local_mesh, order=order) nodes = actx.thaw(dcoll.nodes()) - use_overintegration = False if use_overintegration: quadrature_tag = DISCR_TAG_QUAD else: @@ -404,7 +403,7 @@ def my_rhs(t, state): return make_obj_array( [euler_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag), + quadrature_tag=quadrature_tag, use_esdg=use_esdg), 0*tseed]) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, @@ -451,6 +450,10 @@ def my_rhs(t, state): help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations"), + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--leap", action="store_true", help="use leap timestepper") parser.add_argument("--restart_file", help="root name of restart file") @@ -459,7 +462,14 @@ def my_rhs(t, state): from warnings import warn warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False - lazy = args.lazy + + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -471,11 +481,13 @@ def my_rhs(t, state): if args.casename: casename = args.casename rst_filename = None + if args.restart_file: rst_filename = args.restart_file main(actx_class, use_logmgr=args.log, use_leap=args.leap, lazy=lazy, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, - log_dependent=log_dependent) + log_dependent=log_dependent, use_esdg=args.esdg, + use_overintegration=args.overintegration or args.esdg) # vim: foldmethod=marker diff --git a/examples/multiple-volumes-mpi.py b/examples/multiple-volumes-mpi.py index 67d466d80..0688b8a45 100644 --- a/examples/multiple-volumes-mpi.py +++ b/examples/multiple-volumes-mpi.py @@ -84,7 +84,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, - casename=None, rst_filename=None): + casename=None, rst_filename=None, use_esdg=False): """Drive the example.""" cl_ctx = ctx_factory() @@ -356,7 +356,7 @@ def my_rhs(t, state): dcoll, state=fluid_state, time=t, boundaries={dd.trace(BTAG_ALL).domain_tag: wall}, gas_model=gas_model, quadrature_tag=quadrature_tag, - dd=dd, comm_tag=dd) + dd=dd, comm_tag=dd, use_esdg=use_esdg) for dd, fluid_state in zip(volume_dds, fluid_states)]) current_dt = my_get_timestep( @@ -403,7 +403,15 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -418,7 +426,8 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(actx_class, use_logmgr=args.log, use_overintegration=args.overintegration, + main(actx_class, use_logmgr=args.log, use_esdg=args.esdg, + use_overintegration=args.overintegration or args.esdg, use_leap=args.leap, use_profiling=args.profiling, lazy=lazy, casename=casename, rst_filename=rst_filename) diff --git a/examples/nsmix-mpi.py b/examples/nsmix-mpi.py index 4e88b1910..4418ef2ab 100644 --- a/examples/nsmix-mpi.py +++ b/examples/nsmix-mpi.py @@ -81,7 +81,8 @@ class MyRuntimeError(RuntimeError): def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_leap=False, use_profiling=False, casename=None, rst_filename=None, actx_class=None, lazy=False, - log_dependent=True, use_overintegration=False): + log_dependent=True, use_overintegration=False, + use_esdg=False): """Drive example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -294,7 +295,8 @@ def _ns_operator_for_viz(fluid_state, time): ns_rhs, grad_cv, grad_t = \ ns_operator(dcoll, state=fluid_state, time=time, boundaries=visc_bnds, gas_model=gas_model, - return_gradients=True, quadrature_tag=quadrature_tag) + return_gradients=True, quadrature_tag=quadrature_tag, + use_esdg=use_esdg) return make_obj_array([ns_rhs, grad_cv, grad_t]) get_temperature_update = actx.compile(_get_temperature_update) @@ -564,7 +566,7 @@ def my_rhs(t, state): boundaries=visc_bnds, gas_model=gas_model, gradient_numerical_flux_func=grad_num_flux_func, viscous_numerical_flux_func=viscous_num_flux_func, - quadrature_tag=quadrature_tag) + quadrature_tag=quadrature_tag, use_esdg=use_esdg) cv_rhs = ns_rhs + pyro_eos.get_species_source_terms(cv, fluid_state.temperature) return make_obj_array([cv_rhs, 0*tseed]) @@ -593,7 +595,7 @@ def my_rhs(t, state): ns_rhs, grad_cv, grad_t = \ ns_operator(dcoll, state=current_state, time=current_t, boundaries=visc_bnds, gas_model=gas_model, - return_gradients=True) + return_gradients=True, use_esdg=use_esdg) grad_v = velocity_gradient(current_state.cv, grad_cv) chem_rhs = \ pyro_eos.get_species_source_terms(current_state.cv, @@ -629,12 +631,20 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg + warn("Automatically turning off DV logging. MIRGE-Com Issue(578)") log_dependent = False @@ -655,7 +665,7 @@ def my_rhs(t, state): main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, casename=casename, rst_filename=rst_filename, actx_class=actx_class, - log_dependent=log_dependent, lazy=lazy, - use_overintegration=args.overintegration) + log_dependent=log_dependent, lazy=lazy, use_esdg=args.esdg, + use_overintegration=args.overintegration or args.esdg) # vim: foldmethod=marker diff --git a/examples/poiseuille-local_dt-mpi.py b/examples/poiseuille-local_dt-mpi.py index 0b04656cc..3adadb407 100644 --- a/examples/poiseuille-local_dt-mpi.py +++ b/examples/poiseuille-local_dt-mpi.py @@ -75,7 +75,7 @@ class MyRuntimeError(RuntimeError): def main(ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None): + rst_filename=None, actx_class=None, use_esdg=False): """Drive the example.""" if actx_class is None: raise RuntimeError("Array context class missing.") @@ -433,7 +433,7 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) return ns_operator(dcoll, gas_model=gas_model, boundaries=boundaries, - state=fluid_state, time=t, + state=fluid_state, time=t, use_esdg=use_esdg, quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, @@ -490,10 +490,19 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: @@ -510,7 +519,8 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + use_overintegration=args.overintegration or args.esdg, lazy=lazy, + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index 138209662..b29f59672 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -36,7 +36,7 @@ from mirgecom.discretization import create_discretization_collection from mirgecom.fluid import make_conserved -from mirgecom.navierstokes import ns_operator, entropy_stable_ns_operator +from mirgecom.navierstokes import ns_operator from mirgecom.simutil import get_sim_timestep from mirgecom.io import make_init_message @@ -441,13 +441,12 @@ def my_post_step(step, t, dt, state): logmgr.tick_after() return state, dt - rhs_operator = entropy_stable_ns_operator if use_esdg else ns_operator - def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return rhs_operator(dcoll, gas_model=gas_model, boundaries=boundaries, - state=fluid_state, time=t, - quadrature_tag=quadrature_tag) + return ns_operator(dcoll, gas_model=gas_model, + boundaries=boundaries, + state=fluid_state, time=t, use_esdg=use_esdg, + quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -505,6 +504,13 @@ def my_rhs(t, state): parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: diff --git a/examples/poiseuille-multispecies-mpi.py b/examples/poiseuille-multispecies-mpi.py index 4062b791f..8e622ce4a 100644 --- a/examples/poiseuille-multispecies-mpi.py +++ b/examples/poiseuille-multispecies-mpi.py @@ -465,7 +465,7 @@ def acoustic_pulse(time, fluid_cv, gas_model): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) return ns_operator(dcoll, gas_model=gas_model, boundaries=boundaries, - state=fluid_state, time=t, + state=fluid_state, time=t, use_esdg=use_esdg, quadrature_tag=quadrature_tag) current_state = make_fluid_state( @@ -519,10 +519,20 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: @@ -539,7 +549,8 @@ def my_rhs(t, state): rst_filename = args.restart_file main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class) + use_overintegration=args.overintegration or args.esdg, lazy=lazy, + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index 5674ab57e..d2977d0c3 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -80,7 +80,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, use_overintegration=False, lazy=False, use_leap=False, use_profiling=False, - casename=None, rst_filename=None): + casename=None, rst_filename=None, use_esdg=False): """Drive the example.""" cl_ctx = ctx_factory() @@ -341,7 +341,7 @@ def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) return euler_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, - gas_model=gas_model, + gas_model=gas_model, use_esdg=use_esdg, quadrature_tag=quadrature_tag) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, @@ -388,7 +388,15 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() - lazy = args.lazy + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg if args.profiling: if lazy: raise ValueError("Can't use lazy and profiling together.") @@ -403,8 +411,9 @@ def my_rhs(t, state): if args.restart_file: rst_filename = args.restart_file - main(actx_class, use_logmgr=args.log, use_overintegration=args.overintegration, + main(actx_class, use_logmgr=args.log, + use_overintegration=args.overintegration or args.esdg, use_leap=args.leap, use_profiling=args.profiling, lazy=lazy, - casename=casename, rst_filename=rst_filename) + casename=casename, rst_filename=rst_filename, use_esdg=args.esdg) # vim: foldmethod=marker diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 77f710e31..93aafcec3 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -35,10 +35,7 @@ from mirgecom.transport import SimpleTransport -from mirgecom.navierstokes import ( - ns_operator, - entropy_stable_ns_operator -) +from mirgecom.navierstokes import ns_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, @@ -108,8 +105,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) - rhs_operator = entropy_stable_ns_operator if use_esdg else ns_operator - # timestepping control current_step = 0 if use_leap: @@ -381,9 +376,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return rhs_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag) + return ns_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag, use_esdg=use_esdg) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -435,6 +430,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 9e528a172..25d0806a1 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -34,10 +34,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import ( - euler_operator, - entropy_stable_euler_operator -) +from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -158,8 +155,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: quadrature_tag = None - rhs_operator = entropy_stable_euler_operator if use_esdg else euler_operator - vis_timer = None if logmgr: @@ -356,9 +351,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return rhs_operator(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag) + return euler_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag, use_esdg=use_esdg) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index b39155fd0..0dcf13406 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -32,7 +32,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import euler_operator, entropy_stable_euler_operator +from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh @@ -153,8 +153,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, cn = 0.5*(order + 1)**2 current_dt = current_cfl * actx.to_numpy(h_min_from_volume(dcoll)) / cn - operator_rhs = entropy_stable_euler_operator if use_esdg else euler_operator - from grudge.dof_desc import DISCR_TAG_QUAD if use_overintegration: quadrature_tag = DISCR_TAG_QUAD @@ -350,9 +348,10 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - return operator_rhs(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag) + return euler_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag, + use_esdg=use_esdg) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -403,6 +402,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: diff --git a/examples/taylor-green-mpi.py b/examples/taylor-green-mpi.py index af80d60c3..0ae590bbb 100644 --- a/examples/taylor-green-mpi.py +++ b/examples/taylor-green-mpi.py @@ -34,7 +34,7 @@ from grudge.shortcuts import make_visualizer -from mirgecom.euler import euler_operator, entropy_stable_euler_operator +from mirgecom.euler import euler_operator from mirgecom.simutil import ( generate_and_distribute_mesh ) @@ -105,13 +105,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, else: actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) - if use_esdg and not actx.supports_nonscalar_broadcasting: - raise RuntimeError( - f"{actx} is not a suitable array context for using flux-differencing. " - "The underlying array context must be capable of performing basic " - "array broadcasting operations. Use PytatoPyOpenCLArrayContext instead." - ) - # timestepping control current_step = 0 timestepper = lsrk54_step @@ -191,11 +184,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, initial_condition = InviscidTaylorGreenVortex() - if use_esdg: - operator_rhs = entropy_stable_euler_operator - else: - operator_rhs = euler_operator - if rst_filename: current_t = restart_data["t"] current_step = restart_data["step"] @@ -308,10 +296,10 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(cv=state, gas_model=gas_model) - return operator_rhs(dcoll, state=fluid_state, time=t, - boundaries=boundaries, - gas_model=gas_model, - quadrature_tag=quadrature_tag) + return euler_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, + gas_model=gas_model, use_esdg=use_esdg, + quadrature_tag=quadrature_tag) current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, @@ -360,6 +348,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: diff --git a/examples/thermally-coupled-mpi.py b/examples/thermally-coupled-mpi.py index 4ccd05bbc..d9547ef74 100644 --- a/examples/thermally-coupled-mpi.py +++ b/examples/thermally-coupled-mpi.py @@ -72,9 +72,7 @@ logmgr_add_device_memory_usage, set_sim_state ) -from mirgecom.navierstokes import ( - ns_operator, entropy_stable_ns_operator -) +from mirgecom.navierstokes import ns_operator from mirgecom.multiphysics.thermally_coupled_fluid_wall import ( coupled_ns_heat_operator, ) @@ -117,7 +115,7 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - fluid_operator = entropy_stable_ns_operator if use_esdg else ns_operator + ns_op = partial(ns_operator, use_esdg=use_esdg) from mirgecom.simutil import get_reasonable_memory_pool alloc = get_reasonable_memory_pool(cl_ctx, queue) @@ -527,7 +525,7 @@ def my_rhs(t, state, return_gradients=False): time=t, return_gradients=return_gradients, quadrature_tag=quadrature_tag, - fluid_operator=fluid_operator) + ns_operator=ns_op) if return_gradients: ( @@ -604,11 +602,19 @@ def my_rhs_and_gradients(t, state): parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg + if args.profiling: - if args.lazy: + if lazy: raise ValueError("Can't use lazy and profiling together.") - lazy = args.lazy or args.esdg from grudge.array_context import get_reasonable_array_context_class actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) diff --git a/examples/vortex-mpi.py b/examples/vortex-mpi.py index 9f650f3cf..add6d84af 100644 --- a/examples/vortex-mpi.py +++ b/examples/vortex-mpi.py @@ -32,7 +32,7 @@ from grudge.shortcuts import make_visualizer from mirgecom.discretization import create_discretization_collection -from mirgecom.euler import euler_operator, entropy_stable_euler_operator +from mirgecom.euler import euler_operator from mirgecom.simutil import ( get_sim_timestep, generate_and_distribute_mesh, @@ -102,13 +102,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) - if use_esdg and not actx.supports_nonscalar_broadcasting: - raise RuntimeError( - f"{actx} is not a suitable array context for using flux-differencing. " - "The underlying array context must be capable of performing basic " - "array broadcasting operations. Use PytatoPyOpenCLArrayContext instead." - ) # timestepping control - current_step = 0 if use_leap: from leap.rk import RK4MethodBuilder @@ -164,11 +157,6 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: quadrature_tag = None - if use_esdg: - operator_rhs = entropy_stable_euler_operator - else: - operator_rhs = euler_operator - vis_timer = None if logmgr: @@ -373,9 +361,9 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model) - return operator_rhs(dcoll, state=fluid_state, time=t, - boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag) + return euler_operator(dcoll, state=fluid_state, time=t, + boundaries=boundaries, gas_model=gas_model, + quadrature_tag=quadrature_tag, use_esdg=use_esdg) current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) @@ -426,6 +414,14 @@ def my_rhs(t, state): parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + lazy = args.lazy or args.esdg if args.profiling: if lazy: From 5d215359b12d5fcc3f8de4d468ad14487fa401bc Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 21:03:16 -0500 Subject: [PATCH 835/873] Add missing esdg arg. --- examples/pulse-mpi.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/pulse-mpi.py b/examples/pulse-mpi.py index d2977d0c3..35c348458 100644 --- a/examples/pulse-mpi.py +++ b/examples/pulse-mpi.py @@ -385,6 +385,8 @@ def my_rhs(t, state): help="turn on logging") parser.add_argument("--leap", action="store_true", help="use leap timestepper") + parser.add_argument("--esdg", action="store_true", + help="use entropy-stable dg for inviscid terms.") parser.add_argument("--restart_file", help="root name of restart file") parser.add_argument("--casename", help="casename to use for i/o") args = parser.parse_args() From f661edf95099d02fc94a72bc1e5806aa7251b0c1 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 21:04:02 -0500 Subject: [PATCH 836/873] Use partial to customize CNS operator --- examples/thermally-coupled-mpi.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/examples/thermally-coupled-mpi.py b/examples/thermally-coupled-mpi.py index d9547ef74..1607089dd 100644 --- a/examples/thermally-coupled-mpi.py +++ b/examples/thermally-coupled-mpi.py @@ -27,7 +27,7 @@ import logging from mirgecom.mpi import mpi_entry_point import numpy as np -from functools import partial +from functools import partial, update_wrapper from pytools.obj_array import make_obj_array import pyopencl as cl @@ -115,8 +115,14 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, else: queue = cl.CommandQueue(cl_ctx) - ns_op = partial(ns_operator, use_esdg=use_esdg) - + from mirgecom.inviscid import inviscid_facial_flux_rusanov + from mirgecom.viscous import viscous_facial_flux_harmonic + inviscid_numerical_flux_func = inviscid_facial_flux_rusanov + viscous_numerical_flux_func = viscous_facial_flux_harmonic + ns_op = partial(ns_operator, use_esdg=use_esdg, + inviscid_numerical_flux_func=inviscid_numerical_flux_func, + viscous_numerical_flux_func=viscous_numerical_flux_func) + update_wrapper(ns_op, ns_operator) from mirgecom.simutil import get_reasonable_memory_pool alloc = get_reasonable_memory_pool(cl_ctx, queue) From 50d1830aa070f07f7cbabcf40202e27a4da6a6d3 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 21:04:50 -0500 Subject: [PATCH 837/873] Add missing dim param to TaylorGreen --- mirgecom/initializers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index 630cf6ae1..e15217f0e 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -1568,7 +1568,7 @@ class InviscidTaylorGreenVortex: """Initialize Taylor-Green Vortex.""" def __init__( - self, *, mach_number=0.05, domain_lengthscale=1, v0=1, p0=1, + self, *, dim=3, mach_number=0.05, domain_lengthscale=1, v0=1, p0=1, viscosity=1e-5 ): """Initialize vortex parameters.""" @@ -1577,6 +1577,7 @@ def __init__( self._v0 = v0 self._p0 = p0 self._mu = viscosity + self._dim = dim def __call__(self, x_vec, *, eos=None, time=0, **kwargs): """ From c0c6f0f54e00a5d1241427abee3d7dc81cfd74e0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 21:08:05 -0500 Subject: [PATCH 838/873] Remove stale interface params. --- mirgecom/multiphysics/thermally_coupled_fluid_wall.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py index 5da3643a9..2a3f17fe7 100644 --- a/mirgecom/multiphysics/thermally_coupled_fluid_wall.py +++ b/mirgecom/multiphysics/thermally_coupled_fluid_wall.py @@ -68,7 +68,6 @@ _NoSlipBoundaryComponent, _ImpermeableBoundaryComponent) from mirgecom.flux import num_flux_central -from mirgecom.inviscid import inviscid_facial_flux_rusanov from mirgecom.viscous import viscous_facial_flux_harmonic from mirgecom.gas_model import ( replace_fluid_state, @@ -1060,8 +1059,6 @@ def coupled_ns_heat_operator( quadrature_tag=DISCR_TAG_BASE, limiter_func=None, fluid_gradient_numerical_flux_func=num_flux_central, - inviscid_numerical_flux_func=inviscid_facial_flux_rusanov, - viscous_numerical_flux_func=viscous_facial_flux_harmonic, interface_noslip=True, return_gradients=False, wall_penalty_amount=None, @@ -1284,8 +1281,6 @@ def coupled_ns_heat_operator( ns_op_result = ns_operator( dcoll, gas_model, fluid_state, fluid_all_boundaries, time=time, quadrature_tag=quadrature_tag, dd=fluid_dd, - inviscid_numerical_flux_func=inviscid_numerical_flux_func, - viscous_numerical_flux_func=viscous_numerical_flux_func, return_gradients=return_gradients, operator_states_quad=fluid_operator_states_quad, grad_t=fluid_grad_temperature, comm_tag=_FluidOperatorTag) From d7e45b6e7aaf1c864ad5b3edfb8df6d6e7c6b36e Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 4 May 2023 22:09:39 -0500 Subject: [PATCH 839/873] Force eval earlier, use grudge tracepair interp. --- examples/poiseuille-mpi.py | 6 ++++-- mirgecom/euler.py | 29 ++++++++++++----------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index b29f59672..ad5132c23 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -448,11 +448,12 @@ def my_rhs(t, state): state=fluid_state, time=t, use_esdg=use_esdg, quadrature_tag=quadrature_tag) + from mirgecom.simutil import force_evaluation + current_state = force_evaluation(actx, current_state) + current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) - from mirgecom.simutil import force_evaluation - current_state = force_evaluation(actx, current_state) current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, pre_step_callback=my_pre_step, @@ -464,6 +465,7 @@ def my_rhs(t, state): # Dump the final data if rank == 0: logger.info("Checkpointing final state ...") + final_dv = current_state.dv final_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, current_cfl, t_final, constant_cfl) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index d7b5a4284..81cf63107 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -87,7 +87,8 @@ from grudge.trace_pair import ( TracePair, - interior_trace_pairs + interior_trace_pairs, + tracepair_with_discr_tag ) from grudge.dof_desc import as_dofdesc from grudge.projection import volume_quadrature_project @@ -146,9 +147,6 @@ def entropy_stable_euler_operator( dd_vol_quad = dd_vol.with_discr_tag(quadrature_tag) dd_allfaces_quad = dd_vol_quad.trace(FACE_RESTR_ALL) - # dd_base = as_dofdesc("vol") - # dd_vol = DOFDesc("vol", quadrature_tag) - # dd_faces = DOFDesc("all_faces", quadrature_tag) # NOTE: For single-gas this is just a fixed scalar. # However, for mixtures, gamma is a DOFArray. For now, # we are re-using gamma from here and *not* recomputing @@ -195,14 +193,8 @@ def _reshape(shape, ary): -volume_flux_differencing(dcoll, dd_vol_quad, dd_allfaces_quad, flux_matrices) - def interp_to_surf_quad(utpair): - local_dd = utpair.dd - local_dd_quad = local_dd.with_discr_tag(quadrature_tag) - return TracePair( - local_dd_quad, - interior=op.project(dcoll, local_dd, local_dd_quad, utpair.int), - exterior=op.project(dcoll, local_dd, local_dd_quad, utpair.ext) - ) + # transfer trace pairs to quad grid, update pair dd + interp_to_surf_quad = partial(tracepair_with_discr_tag, dcoll, quadrature_tag) tseed_interior_pairs = None if state.is_mixture: @@ -220,20 +212,23 @@ def interp_to_surf_quad(utpair): comm_tag)) ] - def _interp_to_surf_modified_conservedvars(gamma, utpair): + def _interp_to_surf_modified_conservedvars(gamma, ev_pair): # Takes a trace pair containing the projected entropy variables # and converts them into conserved variables on the quadrature grid. - local_dd = utpair.dd + local_dd = ev_pair.dd local_dd_quad = local_dd.with_discr_tag(quadrature_tag) + # Interpolate entropy variables to the surface quadrature grid - vtilde_tpair = op.project(dcoll, local_dd, local_dd_quad, utpair) + ev_pair_surf = op.project(dcoll, local_dd, local_dd_quad, ev_pair) + if isinstance(gamma, DOFArray): gamma = op.project(dcoll, dd_vol, local_dd_quad, gamma) + return TracePair( local_dd_quad, # Convert interior and exterior states to conserved variables - interior=entropy_to_conservative_vars(gamma, vtilde_tpair.int), - exterior=entropy_to_conservative_vars(gamma, vtilde_tpair.ext) + interior=entropy_to_conservative_vars(gamma, ev_pair_surf.int), + exterior=entropy_to_conservative_vars(gamma, ev_pair_surf.ext) ) cv_interior_pairs = [ From e31407b72698e926ee800e01b099ceddefa4a03c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 5 May 2023 06:43:49 -0500 Subject: [PATCH 840/873] Reset examples from debugging config to CI config --- examples/combozzle-mpi.py | 2 +- examples/lump-mpi.py | 2 +- examples/sod-mpi.py | 2 +- examples/taylor-green-mpi.py | 6 +++--- examples/thermally-coupled-mpi.py | 2 +- scripts/production-testing-env.sh | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index c5a07e5fc..c3f024799 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -1268,7 +1268,7 @@ def dummy_rhs(t, state): help="Turn off force lazy eval between timesteps") parser.add_argument("--profiling", action="store_true", help="turn on detailed performance profiling") - parser.add_argument("--esdg", action="store_true", default=True, + parser.add_argument("--esdg", action="store_true", help="use entropy-stable for inviscid terms") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 3ab05186b..4f37d10af 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -107,7 +107,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 10.0 + t_final = .005 current_cfl = 1.0 current_dt = .001 current_t = 0 diff --git a/examples/sod-mpi.py b/examples/sod-mpi.py index 0dcf13406..130fef78a 100644 --- a/examples/sod-mpi.py +++ b/examples/sod-mpi.py @@ -106,7 +106,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.2 + t_final = 1e-4 current_cfl = 0.01 current_dt = 1e-6 current_t = 0 diff --git a/examples/taylor-green-mpi.py b/examples/taylor-green-mpi.py index 0ae590bbb..a820ceb6f 100644 --- a/examples/taylor-green-mpi.py +++ b/examples/taylor-green-mpi.py @@ -69,7 +69,7 @@ class MyRuntimeError(RuntimeError): @mpi_entry_point def main(actx_class, ctx_factory=cl.create_some_context, - order=1, t_final=1, resolution=8, + order=1, t_final=1, resolution=4, use_logmgr=True, lazy=False, use_overintegration=False, use_esdg=False, use_profiling=False, casename=None, @@ -108,7 +108,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, # timestepping control current_step = 0 timestepper = lsrk54_step - t_final = 1 + t_final = 5e-3 current_cfl = 1.0 current_dt = 1e-3 current_t = 0 @@ -120,7 +120,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, nviz = 100 nhealth = 100 - dim = 2 + dim = 3 rst_path = "restart_data/" rst_pattern = ( rst_path + "{cname}-{step:04d}-{rank:04d}.pkl" diff --git a/examples/thermally-coupled-mpi.py b/examples/thermally-coupled-mpi.py index 1607089dd..84aeba4c6 100644 --- a/examples/thermally-coupled-mpi.py +++ b/examples/thermally-coupled-mpi.py @@ -600,7 +600,7 @@ def my_rhs_and_gradients(t, state): help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") - parser.add_argument("--esdg", action="store_true", default=True, + parser.add_argument("--esdg", action="store_true", help="use entropy-stable operator") parser.add_argument("--leap", action="store_true", help="use leap timestepper") diff --git a/scripts/production-testing-env.sh b/scripts/production-testing-env.sh index 943fe072b..dd4b0153b 100755 --- a/scripts/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -22,4 +22,4 @@ # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@main"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@add-esdg-option"} From bc70512ef4d5fc7532bb5037c2c41707ad249cab Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 5 May 2023 07:43:38 -0500 Subject: [PATCH 841/873] Add missing cl arg. --- examples/multiple-volumes-mpi.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/multiple-volumes-mpi.py b/examples/multiple-volumes-mpi.py index 0688b8a45..adbf68e2e 100644 --- a/examples/multiple-volumes-mpi.py +++ b/examples/multiple-volumes-mpi.py @@ -398,6 +398,8 @@ def my_rhs(t, state): help="turn on detailed performance profiling") parser.add_argument("--log", action="store_true", default=True, help="turn on logging") + parser.add_argument("--esdg", action="store_true", + help="use entropy-stable DG for inviscid terms") parser.add_argument("--leap", action="store_true", help="use leap timestepper") parser.add_argument("--restart_file", help="root name of restart file") From a3e085d31b21586037e7618d38dec3f1bae71ab4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 5 May 2023 08:06:55 -0500 Subject: [PATCH 842/873] Update project call dd spec --- mirgecom/euler.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 81cf63107..1801a6db4 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -243,12 +243,12 @@ def _interp_to_surf_modified_conservedvars(gamma, ev_pair): # TODO: Use modified conserved vars as the input state? # Would need to make an "entropy-projection" variant # of *project_fluid_state* - btag: project_fluid_state( + bdtag: project_fluid_state( dcoll, dd_vol, # Make sure we get the state on the quadrature grid # restricted to the tag *btag* - as_dofdesc(btag).with_discr_tag(quadrature_tag), - state, gas_model, entropy_stable=True) for btag in boundaries + dd_vol_quad.with_domain_tag(bdtag), + state, gas_model, entropy_stable=True) for bdtag in boundaries } # Interior interface state pairs consisting of modified conservative From 4632eb7b7f52a7fea195469a149632530fb9b374 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 5 May 2023 13:56:49 -0500 Subject: [PATCH 843/873] Deflake8 --- mirgecom/euler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 1801a6db4..280e3c4fe 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -90,7 +90,6 @@ interior_trace_pairs, tracepair_with_discr_tag ) -from grudge.dof_desc import as_dofdesc from grudge.projection import volume_quadrature_project from grudge.flux_differencing import volume_flux_differencing From 5a2eb198d4e30ef1435c28fe0451161b63386d6c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Mon, 8 May 2023 11:56:04 -0500 Subject: [PATCH 844/873] Update scalar advdiff with better rez. --- examples/scalar-advdiff-mpi.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 93aafcec3..f6abd4339 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -112,20 +112,20 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.1 + t_final = 1e-3 current_cfl = 0.1 - current_dt = .001 + current_dt = 1e-6 current_t = 0 - constant_cfl = True + constant_cfl = False # some i/o frequencies - nstatus = 1 - nrestart = 5 + nstatus = 100 + nrestart = 100 nviz = 100 - nhealth = 1 + nhealth = 100 dim = 2 - nel_1d = 4 + nel_1d = 8 order = 3 rst_path = "restart_data/" @@ -208,10 +208,10 @@ def vol_max(x): spec_omegas = 2. * np.pi * np.ones(shape=(nspecies,)) kappa = 1e-5 - sigma = 1e-5 - spec_diff = .1 + mu = 1e-5 + spec_diff = mu spec_diffusivities = spec_diff * np.ones(nspecies) - transport_model = SimpleTransport(viscosity=sigma, thermal_conductivity=kappa, + transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, species_diffusivity=spec_diffusivities) eos = IdealSingleGas() @@ -361,8 +361,9 @@ def my_pre_step(step, t, dt, state): logger.info("Errors detected; attempting graceful exit.") raise - dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, t_final, - constant_cfl) + # dt = get_sim_timestep(dcoll, fluid_state, t, dt, current_cfl, t_final, + # constant_cfl) + return state, dt def my_post_step(step, t, dt, state): @@ -380,8 +381,8 @@ def my_rhs(t, state): boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag, use_esdg=use_esdg) - current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, - current_cfl, t_final, constant_cfl) + # current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, + # current_cfl, t_final, constant_cfl) current_step, current_t, current_cv = \ advance_state(rhs=my_rhs, timestepper=timestepper, From 6829e2f8907d33f450c20c7bf7df97d6a32b90c9 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 9 May 2023 10:05:56 -0500 Subject: [PATCH 845/873] Update scalar advdiff params. --- examples/scalar-advdiff-mpi.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index f6abd4339..58f9cc288 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -112,7 +112,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 1e-3 + t_final = 1e-2 current_cfl = 0.1 current_dt = 1e-6 current_t = 0 @@ -195,7 +195,7 @@ def vol_max(x): ]) # soln setup and init - nspecies = 1 + nspecies = 4 centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) velocity = np.zeros(shape=(dim,)) velocity[0] = 1. @@ -210,7 +210,8 @@ def vol_max(x): kappa = 1e-5 mu = 1e-5 spec_diff = mu - spec_diffusivities = spec_diff * np.ones(nspecies) + spec_diffusivities = np.array([spec_diff * 1./float(j+1) + for j in range(nspecies)]) transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, species_diffusivity=spec_diffusivities) From 7b42fb8fc5a3e8ef143a4d2d7a2ac7e989b93c60 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 9 May 2023 14:32:20 -0500 Subject: [PATCH 846/873] Use old arraycontext. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 620e6bc70..99884280a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/inducer/arraycontext.git#egg=arraycontext +--editable git+https://github.com/mtcam/arraycontext.git@temp-bugfix#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode --editable git+https://github.com/majosm/grudge.git@production#egg=grudge --editable git+https://github.com/majosm/pytato.git@production#egg=pytato From 511a1497795a142c34f14ac7c85a2a1adf9b8525 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 9 May 2023 14:34:00 -0500 Subject: [PATCH 847/873] Deflake8 --- examples/scalar-advdiff-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 58f9cc288..b21a0773d 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -37,7 +37,7 @@ from mirgecom.transport import SimpleTransport from mirgecom.navierstokes import ns_operator from mirgecom.simutil import ( - get_sim_timestep, + # get_sim_timestep, generate_and_distribute_mesh, compare_fluid_solutions ) From 21a3104360ae43f28b9d88808c2474c8265fa2f4 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 10 May 2023 07:27:26 -0500 Subject: [PATCH 848/873] Lower t_final for CI --- examples/scalar-advdiff-mpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index b21a0773d..01125d942 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -112,7 +112,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 1e-2 + t_final = 2e-5 current_cfl = 0.1 current_dt = 1e-6 current_t = 0 From 3002c89b1ce4ec1b93f410184e9bd0e039044b03 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 17 May 2023 11:38:32 -0500 Subject: [PATCH 849/873] Debug scalaradvdiff --- examples/scalar-advdiff-mpi.py | 67 +++++++++++++++++++++++++++------- mirgecom/gas_model.py | 5 ++- mirgecom/initializers.py | 2 +- mirgecom/navierstokes.py | 4 +- 4 files changed, 61 insertions(+), 17 deletions(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 01125d942..7362d9de5 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -41,6 +41,8 @@ generate_and_distribute_mesh, compare_fluid_solutions ) +from mirgecom.limiter import bound_preserving_limiter +from mirgecom.fluid import make_conserved from mirgecom.io import make_init_message from mirgecom.mpi import mpi_entry_point @@ -112,16 +114,16 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 2e-5 + t_final = 1.0 current_cfl = 0.1 - current_dt = 1e-6 + current_dt = 1e-5 current_t = 0 constant_cfl = False # some i/o frequencies nstatus = 100 nrestart = 100 - nviz = 100 + nviz = 1 nhealth = 100 dim = 2 @@ -161,6 +163,39 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, else: quadrature_tag = None + def _limit_fluid_cv(cv, pressure, temperature, dd=None): + # if True: + # return cv + actx = cv.array_context + # limit species + spec_lim = make_obj_array([ + bound_preserving_limiter(dcoll, cv.species_mass_fractions[i], mmin=0.0, + dd=dd) + for i in range(nspecies) + ]) + spec_lim = actx.np.where(actx.np.greater(spec_lim, 0.0), spec_lim, 0.0) + + # normalize to ensure sum_Yi = 1.0 + # aux = cv.mass*0.0 + # for i in range(0, nspecies): + # aux = aux + spec_lim[i] + # spec_lim = spec_lim/aux + + # recompute density + # mass_lim = eos.get_density(pressure=pressure, + # temperature=temperature, species_mass_fractions=spec_lim) + + # recompute energy + # energy_lim = mass_lim*(gas_model.eos.get_internal_energy( + # temperature, species_mass_fractions=spec_lim) + # + 0.5*np.dot(cv.velocity, cv.velocity) + # ) + + # make a new CV with the limited variables + return make_conserved(dim=dim, mass=cv.mass, energy=cv.energy, + momentum=cv.momentum, + species_mass=cv.mass*spec_lim) + def vol_min(x): from grudge.op import nodal_min return actx.to_numpy(nodal_min(dcoll, "vol", x))[()] @@ -198,18 +233,18 @@ def vol_max(x): nspecies = 4 centers = make_obj_array([np.zeros(shape=(dim,)) for i in range(nspecies)]) velocity = np.zeros(shape=(dim,)) - velocity[0] = 1. + velocity[0] = 300. wave_vector = np.zeros(shape=(dim,)) wave_vector[0] = 1. wave_vector = wave_vector / np.sqrt(np.dot(wave_vector, wave_vector)) - spec_y0s = np.ones(shape=(nspecies,)) + spec_y0s = 2.0*np.ones(shape=(nspecies,)) spec_amplitudes = np.ones(shape=(nspecies,)) spec_omegas = 2. * np.pi * np.ones(shape=(nspecies,)) - kappa = 1e-5 + kappa = 0.0 mu = 1e-5 - spec_diff = mu + spec_diff = 1e-1 spec_diffusivities = np.array([spec_diff * 1./float(j+1) for j in range(nspecies)]) transport_model = SimpleTransport(viscosity=mu, thermal_conductivity=kappa, @@ -221,6 +256,7 @@ def vol_max(x): from mirgecom.initializers import MulticomponentTrig initializer = MulticomponentTrig(dim=dim, nspecies=nspecies, + p0=101325, rho0=1.3, spec_centers=centers, velocity=velocity, spec_y0s=spec_y0s, spec_amplitudes=spec_amplitudes, @@ -233,7 +269,9 @@ def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): bnd_discr = dcoll.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, - **kwargs), gas_model) + **kwargs), gas_model, + limiter_func=_limit_fluid_cv, + limiter_dd=dd_bdry) boundaries = {} @@ -248,7 +286,8 @@ def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): # Set the current state from time 0 current_cv = initializer(nodes) - current_state = make_fluid_state(current_cv, gas_model) + current_state = make_fluid_state(current_cv, gas_model, + limiter_func=_limit_fluid_cv) convective_speed = np.sqrt(np.dot(velocity, velocity)) c = current_state.speed_of_sound mach = vol_max(convective_speed / c) @@ -305,8 +344,8 @@ def my_write_restart(step, t, cv): def my_health_check(pressure, component_errors): health_error = False from mirgecom.simutil import check_naninf_local, check_range_local - if check_naninf_local(dcoll, "vol", pressure) \ - or check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): + if check_naninf_local(dcoll, "vol", pressure): + # or check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") @@ -377,10 +416,12 @@ def my_post_step(step, t, dt, state): return state, dt def my_rhs(t, state): - fluid_state = make_fluid_state(state, gas_model) + fluid_state = make_fluid_state(state, gas_model, + limiter_func=_limit_fluid_cv) return ns_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, - quadrature_tag=quadrature_tag, use_esdg=use_esdg) + quadrature_tag=quadrature_tag, use_esdg=use_esdg, + limiter_func=_limit_fluid_cv) # current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, # current_cfl, t_final, constant_cfl) diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index 0237cad17..baab10201 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -807,6 +807,7 @@ def conservative_to_entropy_vars(gamma, state): u = state.velocity p = state.pressure rho_species = state.species_mass_density + rho_species = actx.np.where(actx.np.greater(rho_species, 0.), rho_species, 0.0) u_square = np.dot(u, u) s = actx.np.log(p) - gamma*actx.np.log(rho) @@ -859,11 +860,13 @@ def entropy_to_conservative_vars(gamma, ev: ConservedVars): iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) + spec_mod = -rho_iota_species * v5 + spec_mod = actx.np.where(actx.np.greater(spec_mod, 0.), spec_mod, 0.0) return make_conserved( dim, mass=-rho_iota * v5, energy=rho_iota * (1 - v_square/(2*v5)), momentum=rho_iota * v234, - species_mass=-rho_iota_species * v5 + species_mass=spec_mod ) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index e15217f0e..ce1928615 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -853,7 +853,7 @@ def __init__( if center.shape != (dim,) or velocity.shape != (dim,): raise ValueError(f"Expected {dim}-dimensional vector inputs.") if spec_y0s is None: - spec_y0s = np.ones(shape=(nspecies,)) + spec_y0s = 2.0*np.ones(shape=(nspecies,)) if spec_centers is None: spec_centers = make_obj_array([np.zeros(shape=dim,) for i in range(nspecies)]) diff --git a/mirgecom/navierstokes.py b/mirgecom/navierstokes.py index 28eedd38a..72cb83800 100644 --- a/mirgecom/navierstokes.py +++ b/mirgecom/navierstokes.py @@ -337,7 +337,7 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, gradient_numerical_flux_func=num_flux_central, viscous_numerical_flux_func=viscous_facial_flux_central, return_gradients=False, quadrature_tag=DISCR_TAG_BASE, - dd=DD_VOLUME_ALL, comm_tag=None, + dd=DD_VOLUME_ALL, comm_tag=None, limiter_func=None, # Added to avoid repeated computation # FIXME: See if there's a better way to do this operator_states_quad=None, use_esdg=False, @@ -451,7 +451,7 @@ def ns_operator(dcoll, gas_model, state, boundaries, *, time=0.0, if operator_states_quad is None: operator_states_quad = make_operator_fluid_states( dcoll, state, gas_model, boundaries, quadrature_tag, - dd=dd_vol, comm_tag=comm_tag) + limiter_func=limiter_func, dd=dd_vol, comm_tag=comm_tag) vol_state_quad, inter_elem_bnd_states_quad, domain_bnd_states_quad = \ operator_states_quad From 1e7432b110606f090122e2ec1c6678be35e002e0 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 19 May 2023 16:05:26 -0500 Subject: [PATCH 850/873] Fix passive scalars advection in esdg --- examples/make_uniform_nodes.py | 185 +++++++++++++++++++++++++++++++++ examples/scalar-advdiff-mpi.py | 22 ++-- examples/scalar-lump-mpi.py | 13 +-- mirgecom/gas_model.py | 36 ++++--- mirgecom/initializers.py | 17 ++- mirgecom/inviscid.py | 16 +-- test/test_euler.py | 180 +++++++++++++++++++++++++++++++- 7 files changed, 423 insertions(+), 46 deletions(-) create mode 100644 examples/make_uniform_nodes.py diff --git a/examples/make_uniform_nodes.py b/examples/make_uniform_nodes.py new file mode 100644 index 000000000..bc67b8fd7 --- /dev/null +++ b/examples/make_uniform_nodes.py @@ -0,0 +1,185 @@ +"""Demonstrate a 3D periodic box mesh generation.""" + +__copyright__ = """ +Copyright (C) 2020 University of Illinois Board of Trustees +""" + +__license__ = """ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +""" +import logging +import numpy as np +import pyopencl as cl +from functools import partial + +from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa + +from mirgecom.discretization import create_discretization_collection + +from mirgecom.mpi import mpi_entry_point + + +logger = logging.getLogger(__name__) + + +class MyRuntimeError(RuntimeError): + """Simple exception to kill the simulation.""" + + pass + + +# Box grid generator widget lifted from @majosm and slightly bent +def _get_box_mesh(dim, a, b, n, t=None, periodic=None): + if periodic is None: + periodic = (False,)*dim + + dim_names = ["x", "y", "z"] + bttf = {} + for i in range(dim): + bttf["-"+str(i+1)] = ["-"+dim_names[i]] + bttf["+"+str(i+1)] = ["+"+dim_names[i]] + from meshmode.mesh.generation import generate_regular_rect_mesh as gen + return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t, + periodic=periodic) + + +@mpi_entry_point +def main(ctx_factory=cl.create_some_context, use_logmgr=True, + use_overintegration=False, lazy=False, + use_leap=False, use_profiling=False, casename=None, + rst_filename=None, actx_class=None, use_esdg=False): + """Drive the example.""" + if actx_class is None: + raise RuntimeError("Array context class missing.") + + cl_ctx = ctx_factory() + + if casename is None: + casename = "mirgecom" + + from mpi4py import MPI + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + nparts = comm.Get_size() + + # from mirgecom.simutil import global_reduce as _global_reduce + # global_reduce = partial(_global_reduce, comm=comm) + + # logmgr = initialize_logmgr(use_logmgr, + # filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) + + if use_profiling: + queue = cl.CommandQueue( + cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) + else: + queue = cl.CommandQueue(cl_ctx) + + from mirgecom.simutil import get_reasonable_memory_pool + alloc = get_reasonable_memory_pool(cl_ctx, queue) + + if lazy: + actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) + else: + actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) + + # some geometry setup + dim = 2 + + left_boundary_location = tuple([0. for _ in range(dim)]) + right_boundary_location = tuple([2*np.pi for _ in range(dim)]) + periodic = (True,)*dim + + n_refine = 1 + pts_per_axis = 16 + npts_axis = tuple([n_refine * pts_per_axis for _ in range(dim)]) + # npts_axis = (npts_x, npts_y) + box_ll = left_boundary_location + box_ur = right_boundary_location + generate_mesh = partial(_get_box_mesh, dim=dim, a=box_ll, b=box_ur, n=npts_axis, + periodic=periodic) + print(f"{left_boundary_location=}") + print(f"{right_boundary_location=}") + print(f"{npts_axis=}") + from mirgecom.simutil import generate_and_distribute_mesh + local_mesh, global_nelements = generate_and_distribute_mesh(comm, + generate_mesh) + local_nelements = local_mesh.nelements + + # from meshmode.mesh.processing import rotate_mesh_around_axis + # local_mesh = rotate_mesh_around_axis(local_mesh, theta=-np.pi/4) + + order = 1 + dcoll = create_discretization_collection(actx, local_mesh, order=order, + quadrature_order=order+2) + nodes = actx.thaw(dcoll.nodes()) + + print(f"{rank=}/{nparts=}") + print(f"{global_nelements=}") + print(f"{local_nelements=}") + print(f"{nodes=}") + + +if __name__ == "__main__": + import argparse + casename = "poiseuille" + parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") + parser.add_argument("--overintegration", action="store_true", + help="use overintegration in the RHS computations") + parser.add_argument("--lazy", action="store_true", + help="switch to a lazy computation mode") + parser.add_argument("--esdg", action="store_true", + help="use flux-differencing/entropy stable DG for inviscid computations.") + parser.add_argument("--profiling", action="store_true", + help="turn on detailed performance profiling") + parser.add_argument("--log", action="store_true", default=True, + help="turn on logging") + parser.add_argument("--leap", action="store_true", + help="use leap timestepper") + parser.add_argument("--restart_file", help="root name of restart file") + parser.add_argument("--casename", help="casename to use for i/o") + args = parser.parse_args() + + from warnings import warn + if args.esdg: + if not args.lazy: + warn("ESDG requires lazy-evaluation, enabling --lazy.") + if not args.overintegration: + warn("ESDG requires overintegration, enabling --overintegration.") + + lazy = args.lazy or args.esdg + if args.profiling: + if lazy: + raise ValueError("Can't use lazy and profiling together.") + + from grudge.array_context import get_reasonable_array_context_class + actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) + + logging.basicConfig(format="%(message)s", level=logging.INFO) + if args.casename: + casename = args.casename + rst_filename = None + if args.restart_file: + rst_filename = args.restart_file + + main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, + use_overintegration=args.overintegration or args.esdg, lazy=lazy, + casename=casename, rst_filename=rst_filename, actx_class=actx_class, + use_esdg=args.esdg) + +# vim: foldmethod=marker diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 7362d9de5..acf62c4c5 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -114,7 +114,8 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 1.0 + + t_final = 2e-4 current_cfl = 0.1 current_dt = 1e-5 current_t = 0 @@ -123,7 +124,7 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, # some i/o frequencies nstatus = 100 nrestart = 100 - nviz = 1 + nviz = 10 nhealth = 100 dim = 2 @@ -195,6 +196,8 @@ def _limit_fluid_cv(cv, pressure, temperature, dd=None): return make_conserved(dim=dim, mass=cv.mass, energy=cv.energy, momentum=cv.momentum, species_mass=cv.mass*spec_lim) + use_limiter = False + limiter_function = _limit_fluid_cv if use_limiter else None def vol_min(x): from grudge.op import nodal_min @@ -238,7 +241,7 @@ def vol_max(x): wave_vector[0] = 1. wave_vector = wave_vector / np.sqrt(np.dot(wave_vector, wave_vector)) - spec_y0s = 2.0*np.ones(shape=(nspecies,)) + spec_y0s = np.zeros(shape=(nspecies,)) spec_amplitudes = np.ones(shape=(nspecies,)) spec_omegas = 2. * np.pi * np.ones(shape=(nspecies,)) @@ -262,7 +265,8 @@ def vol_max(x): spec_amplitudes=spec_amplitudes, spec_omegas=spec_omegas, spec_diffusivities=spec_diffusivities, - wave_vector=wave_vector) + wave_vector=wave_vector, + trig_function=actx.np.sin) def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context @@ -270,7 +274,7 @@ def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): nodes = actx.thaw(bnd_discr.nodes()) return make_fluid_state(initializer(x_vec=nodes, eos=gas_model.eos, **kwargs), gas_model, - limiter_func=_limit_fluid_cv, + limiter_func=limiter_function, limiter_dd=dd_bdry) boundaries = {} @@ -287,7 +291,7 @@ def boundary_solution(dcoll, dd_bdry, gas_model, state_minus, **kwargs): current_cv = initializer(nodes) current_state = make_fluid_state(current_cv, gas_model, - limiter_func=_limit_fluid_cv) + limiter_func=limiter_function) convective_speed = np.sqrt(np.dot(velocity, velocity)) c = current_state.speed_of_sound mach = vol_max(convective_speed / c) @@ -343,7 +347,7 @@ def my_write_restart(step, t, cv): def my_health_check(pressure, component_errors): health_error = False - from mirgecom.simutil import check_naninf_local, check_range_local + from mirgecom.simutil import check_naninf_local # , check_range_local if check_naninf_local(dcoll, "vol", pressure): # or check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): health_error = True @@ -417,11 +421,11 @@ def my_post_step(step, t, dt, state): def my_rhs(t, state): fluid_state = make_fluid_state(state, gas_model, - limiter_func=_limit_fluid_cv) + limiter_func=limiter_function) return ns_operator(dcoll, state=fluid_state, time=t, boundaries=boundaries, gas_model=gas_model, quadrature_tag=quadrature_tag, use_esdg=use_esdg, - limiter_func=_limit_fluid_cv) + limiter_func=limiter_function) # current_dt = get_sim_timestep(dcoll, current_state, current_t, current_dt, # current_cfl, t_final, constant_cfl) diff --git a/examples/scalar-lump-mpi.py b/examples/scalar-lump-mpi.py index 25d0806a1..a024330dd 100644 --- a/examples/scalar-lump-mpi.py +++ b/examples/scalar-lump-mpi.py @@ -110,17 +110,18 @@ def main(actx_class, ctx_factory=cl.create_some_context, use_logmgr=True, timestepper = RK4MethodBuilder("state") else: timestepper = rk4_step - t_final = 0.005 + + t_final = 2e-2 current_cfl = 1.0 - current_dt = .001 + current_dt = 1e-3 current_t = 0 constant_cfl = False # some i/o frequencies - nstatus = 1 - nrestart = 5 - nviz = 1 - nhealth = 1 + nstatus = 100 + nrestart = 10000 + nviz = 10 + nhealth = 100 dim = 2 rst_path = "restart_data/" diff --git a/mirgecom/gas_model.py b/mirgecom/gas_model.py index baab10201..ffdcbbe44 100644 --- a/mirgecom/gas_model.py +++ b/mirgecom/gas_model.py @@ -806,21 +806,21 @@ def conservative_to_entropy_vars(gamma, state): rho = state.mass_density u = state.velocity p = state.pressure - rho_species = state.species_mass_density - rho_species = actx.np.where(actx.np.greater(rho_species, 0.), rho_species, 0.0) + y_species = state.species_mass_fractions + # y_species = actx.np.where(actx.np.greater(y_species, 0.), y_species, 0.0) + # spec_mass_test = state.species_mass_fractions u_square = np.dot(u, u) s = actx.np.log(p) - gamma*actx.np.log(rho) rho_p = rho / p - rho_species_p = rho_species / p - - return make_conserved( - dim, - mass=((gamma - s)/(gamma - 1)) - 0.5 * rho_p * u_square, - energy=-rho_p, - momentum=rho_p * u, - species_mass=((gamma - s)/(gamma - 1)) - 0.5 * rho_species_p * u_square - ) + # rho_species_p = rho_species / p / (gamma - 1) + ev_mass = ((gamma - s) / (gamma - 1)) - 0.5 * rho_p * u_square + # ev_spec = -s/(gamma - 1) + y_species*ev_mass + ev_spec = y_species / (gamma - 1) + # return make_conserved(dim, mass=ev_mass, energy=-rho_p, momentum=rho_p * u, + # species_mass=ev_mass*y_species/(gamma-1)) + return make_conserved(dim, mass=ev_mass, energy=-rho_p, momentum=rho_p * u, + species_mass=ev_spec) def entropy_to_conservative_vars(gamma, ev: ConservedVars): @@ -853,20 +853,22 @@ def entropy_to_conservative_vars(gamma, ev: ConservedVars): v234 = ev_state.momentum v5 = ev_state.energy v6ns = ev_state.species_mass + # spec_mod = actx.np.where(actx.np.greater(v6ns, 0.), v6ns, 0.0) v_square = np.dot(v234, v234) s = gamma - v1 + v_square/(2*v5) - s_species = gamma - v6ns + v_square/(2*v5) + # s_species = gamma - v6ns + v_square/(2*v5) iota = ((gamma - 1) / (-v5)**gamma)**(inv_gamma_minus_one) rho_iota = iota * actx.np.exp(-s * inv_gamma_minus_one) - rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) - spec_mod = -rho_iota_species * v5 - spec_mod = actx.np.where(actx.np.greater(spec_mod, 0.), spec_mod, 0.0) + # rho_iota_species = iota * actx.np.exp(-s_species * inv_gamma_minus_one) + # spec_mod = -rho_iota_species * v5 * v6ns + mass = -rho_iota * v5 + spec_mass = mass * v6ns return make_conserved( dim, - mass=-rho_iota * v5, + mass=mass, energy=rho_iota * (1 - v_square/(2*v5)), momentum=rho_iota * v234, - species_mass=spec_mod + species_mass=spec_mass ) diff --git a/mirgecom/initializers.py b/mirgecom/initializers.py index ce1928615..498752714 100644 --- a/mirgecom/initializers.py +++ b/mirgecom/initializers.py @@ -828,7 +828,8 @@ def __init__( spec_centers=None, spec_omegas=None, spec_diffusivities=None, - wave_vector=None + wave_vector=None, + trig_function=None ): r"""Initialize MulticomponentLump parameters. @@ -845,6 +846,10 @@ def __init__( velocity: numpy.ndarray fixed flow velocity used for exact solution at t != 0, shape ``(dim,)`` + wave_vector: numpy.ndarray + optional fixed vector indicating normal direction of wave + trig_function + callable trig function """ if center is None: center = np.zeros(shape=(dim,)) @@ -862,6 +867,7 @@ def __init__( if spec_amplitudes is None: spec_amplitudes = np.ones(shape=(nspecies,)) + if spec_diffusivities is None: spec_diffusivities = np.ones(shape=(nspecies,)) @@ -869,6 +875,10 @@ def __init__( wave_vector = np.zeros(shape=(dim,)) wave_vector[0] = 1 + import mirgecom.math as mm + if trig_function is None: + trig_function = mm.sin + if len(spec_y0s) != nspecies or\ len(spec_amplitudes) != nspecies or\ len(spec_centers) != nspecies: @@ -891,6 +901,7 @@ def __init__( self._spec_omegas = spec_omegas self._d = spec_diffusivities self._wave_vector = wave_vector + self._trig_func = trig_function def __call__(self, x_vec, *, eos=None, time=0, **kwargs): """ @@ -920,15 +931,15 @@ def __call__(self, x_vec, *, eos=None, time=0, **kwargs): energy = ((self._p0 / (self._gamma - 1.0)) + 0.5*mass*np.dot(self._velocity, self._velocity)) - import mirgecom.math as mm vel_t = t * self._velocity + import mirgecom.math as mm spec_mass = np.empty((self._nspecies,), dtype=object) for i in range(self._nspecies): spec_x = x_vec - self._spec_centers[i] wave_r = spec_x - vel_t wave_x = np.dot(wave_r, self._wave_vector) expterm = mm.exp(-t*self._d[i]*self._spec_omegas[i]**2) - trigterm = mm.sin(self._spec_omegas[i]*wave_x) + trigterm = self._trig_func(self._spec_omegas[i]*wave_x) spec_y = self._spec_y0s[i] + self._spec_amps[i]*expterm*trigterm spec_mass[i] = mass * spec_y diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index c69ca2553..22e51ee42 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -57,7 +57,7 @@ from arraycontext import outer from meshmode.dof_array import DOFArray -from pytools.obj_array import make_obj_array +# from pytools.obj_array import make_obj_array def inviscid_flux(state): @@ -431,12 +431,14 @@ def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): rho_ll = state_ll.mass_density u_ll = state_ll.velocity p_ll = state_ll.pressure - rho_species_ll = state_ll.species_mass_density + # rho_species_ll = state_ll.species_mass_density + y_ll = state_ll.species_mass_fractions rho_rr = state_rr.mass_density u_rr = state_rr.velocity p_rr = state_rr.pressure - rho_species_rr = state_rr.species_mass_density + # rho_species_rr = state_rr.species_mass_density + y_rr = state_rr.species_mass_fractions beta_ll = 0.5 * rho_ll / p_ll beta_rr = 0.5 * rho_rr / p_rr @@ -445,9 +447,11 @@ def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): rho_avg = 0.5 * (rho_ll + rho_rr) rho_mean = ln_mean(rho_ll, rho_rr) - rho_species_mean = make_obj_array( - [ln_mean(y_ll_i, y_rr_i) - for y_ll_i, y_rr_i in zip(rho_species_ll, rho_species_rr)]) + y_mean = 0.5 * (y_ll + y_rr) + rho_species_mean = rho_mean * y_mean + # rho_species_mean = make_obj_array( + # [ln_mean(y_ll_i, y_rr_i) + # for y_ll_i, y_rr_i in zip(rho_species_ll, rho_species_rr)]) beta_mean = ln_mean(beta_ll, beta_rr) beta_avg = 0.5 * (beta_ll + beta_rr) diff --git a/test/test_euler.py b/test/test_euler.py index cefbad856..54e6f7b6e 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -166,7 +166,7 @@ def test_uniform_rhs(actx_factory, nspecies, dim, order, use_overintegration, ) def inf_norm(x): - return actx.to_numpy(op.norm(dcoll, x, np.inf)) + return actx.to_numpy(op.norm(dcoll, x, np.inf)) # noqa assert inf_norm(rho_resid) < tolerance assert inf_norm(rhoe_resid) < tolerance @@ -225,6 +225,176 @@ def inf_norm(x): ) +@pytest.mark.parametrize("nspecies", [0, 10]) +@pytest.mark.parametrize("dim", [1, 2, 3]) +@pytest.mark.parametrize("order", [2, 3, 4]) +def test_uniform_rhs_esdg(actx_factory, nspecies, dim, order): + """Test the inviscid rhs using a trivial constant/uniform state. + + This state should yield rhs = 0 to FP. The test is performed for 1, 2, + and 3 dimensions, with orders 1, 2, and 3, with and without passive species. + """ + actx = actx_factory() + + tolerance = 1e-9 + + from pytools.convergence import EOCRecorder + eoc_rec0 = EOCRecorder() + eoc_rec1 = EOCRecorder() + + # for nel_1d in [4, 8, 12]: + for nel_1d in [4, 8]: + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,) * dim, b=(0.5,) * dim, nelements_per_axis=(nel_1d,) * dim + ) + + logger.info( + f"Number of {dim}d elements: {mesh.nelements}" + ) + + dcoll = create_discretization_collection(actx, mesh, order=order, + quadrature_order=2*order+1) + # quadrature_tag = DISCR_TAG_QUAD + + zeros = dcoll.zeros(actx) + ones = zeros + 1.0 + + mass_input = dcoll.zeros(actx) + 1 + energy_input = dcoll.zeros(actx) + 2.5 + + mom_input = make_obj_array( + [dcoll.zeros(actx) for i in range(dcoll.dim)] + ) + + mass_frac_input = flat_obj_array( + [ones / ((i + 1) * 10) for i in range(nspecies)] + ) + species_mass_input = mass_input * mass_frac_input + num_equations = dim + 2 + len(species_mass_input) + + cv = make_conserved( + dim, mass=mass_input, energy=energy_input, momentum=mom_input, + species_mass=species_mass_input) + gas_model = GasModel(eos=IdealSingleGas()) + # fluid_state = make_fluid_state(cv, gas_model) + + from mirgecom.gas_model import ( + conservative_to_entropy_vars, + entropy_to_conservative_vars + ) + temp_state = make_fluid_state(cv, gas_model) + gamma = gas_model.eos.gamma(temp_state.cv, temp_state.temperature) + # if isinstance(gamma, DOFArray): + # gamma = op.project(dcoll, src, tgt, gamma) + ev_sd = conservative_to_entropy_vars(gamma, temp_state) + cv_sd = entropy_to_conservative_vars(gamma, ev_sd) + cv_resid = cv - cv_sd + + # expected_cv_diff = make_conserved( + # dim, q=make_obj_array([dcoll.zeros(actx) + # for i in range(num_equations)]) + # ) + + expected_rhs = make_conserved( + dim, q=make_obj_array([dcoll.zeros(actx) + for i in range(num_equations)]) + ) + + # boundaries = {BTAG_ALL: DummyBoundary()} + # inviscid_rhs = \ + # euler_operator(dcoll, state=fluid_state, gas_model=gas_model, + # boundaries=boundaries, time=0.0, + # quadrature_tag=quadrature_tag, use_esdg=True) + + # rhs_resid = inviscid_rhs - expected_rhs + + rho_resid = cv_resid.mass + rhoe_resid = cv_resid.energy + mom_resid = cv_resid.momentum + rhoy_resid = cv_resid.species_mass + + rho_mcv = cv_sd.mass + rhoe_mcv = cv_sd.energy + rhov_mcv = cv_sd.momentum + rhoy_mcv = cv_sd.species_mass + + print( + f"{rho_mcv=}\n" + f"{rhoe_mcv=}\n" + f"{rhov_mcv=}\n" + f"{rhoy_mcv=}\n" + ) + + def inf_norm(x): + return actx.to_numpy(op.norm(dcoll, x, np.inf)) # noqa + + assert inf_norm(rho_resid) < tolerance + assert inf_norm(rhoe_resid) < tolerance + for i in range(dim): + assert inf_norm(mom_resid[i]) < tolerance + for i in range(nspecies): + assert inf_norm(rhoy_resid[i]) < tolerance + + err_max = inf_norm(rho_resid) + eoc_rec0.add_data_point(1.0 / nel_1d, err_max) + + # set a non-zero, but uniform velocity component + for i in range(len(mom_input)): + mom_input[i] = dcoll.zeros(actx) + (-1.0) ** i + + cv = make_conserved( + dim, mass=mass_input, energy=energy_input, momentum=mom_input, + species_mass=species_mass_input) + gas_model = GasModel(eos=IdealSingleGas()) + # fluid_state = make_fluid_state(cv, gas_model) + + temp_state = make_fluid_state(cv, gas_model) + gamma = gas_model.eos.gamma(temp_state.cv, temp_state.temperature) + # if isinstance(gamma, DOFArray): + # gamma = op.project(dcoll, src, tgt, gamma) + ev_sd = conservative_to_entropy_vars(gamma, temp_state) + cv_sd = entropy_to_conservative_vars(gamma, ev_sd) + cv_resid = cv - cv_sd + + # boundaries = {BTAG_ALL: DummyBoundary()} + # inviscid_rhs = 0 + # inviscid_rhs = euler_operator( + # dcoll, state=fluid_state, gas_model=gas_model, boundaries=boundaries, + # time=0.0, inviscid_numerical_flux_func=numerical_flux_func) + # rhs_resid = inviscid_rhs - expected_rhs + + rho_resid = cv_resid.mass + rhoe_resid = cv_resid.energy + mom_resid = cv_resid.momentum + rhoy_resid = cv_resid.species_mass + + assert inf_norm(rho_resid) < tolerance + assert inf_norm(rhoe_resid) < tolerance + + for i in range(dim): + assert inf_norm(mom_resid[i]) < tolerance + for i in range(nspecies): + assert inf_norm(rhoy_resid[i]) < tolerance + + err_max = inf_norm(rho_resid) + eoc_rec1.add_data_point(1.0 / nel_1d, err_max) + + logger.info( + f"V == 0 Errors:\n{eoc_rec0}" + f"V != 0 Errors:\n{eoc_rec1}" + ) + + assert ( + eoc_rec0.order_estimate() >= order - 0.5 + or eoc_rec0.max_error() < 1e-9 + ) + assert ( + eoc_rec1.order_estimate() >= order - 0.5 + or eoc_rec1.max_error() < 1e-9 + ) + + @pytest.mark.parametrize("order", [1, 2, 3]) @pytest.mark.parametrize("use_overintegration", [True, False]) @pytest.mark.parametrize("numerical_flux_func", @@ -274,7 +444,7 @@ def _vortex_boundary(dcoll, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context bnd_discr = dcoll.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) - return make_fluid_state(vortex(x_vec=nodes, **kwargs), gas_model) + return make_fluid_state(vortex(x_vec=nodes, **kwargs), gas_model) # noqa boundaries = { BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_vortex_boundary) @@ -354,7 +524,7 @@ def _lump_boundary(dcoll, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context bnd_discr = dcoll.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) - return make_fluid_state(lump(x_vec=nodes, cv=state_minus, **kwargs), + return make_fluid_state(lump(x_vec=nodes, cv=state_minus, **kwargs), # noqa gas_model) boundaries = { @@ -449,7 +619,7 @@ def _my_boundary(dcoll, dd_bdry, gas_model, state_minus, **kwargs): actx = state_minus.array_context bnd_discr = dcoll.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) - return make_fluid_state(lump(x_vec=nodes, **kwargs), gas_model) + return make_fluid_state(lump(x_vec=nodes, **kwargs), gas_model) # noqa boundaries = { BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_my_boundary) @@ -668,7 +838,7 @@ def _vortex_boundary(dcoll, dd_bdry, state_minus, gas_model, **kwargs): actx = state_minus.array_context bnd_discr = dcoll.discr_from_dd(dd_bdry) nodes = actx.thaw(bnd_discr.nodes()) - return make_fluid_state(initializer(x_vec=nodes, **kwargs), gas_model) + return make_fluid_state(initializer(x_vec=nodes, **kwargs), gas_model) # noqa boundaries = { BTAG_ALL: PrescribedFluidBoundary(boundary_state_func=_vortex_boundary) From 2cf46b17d54c003326107d0a906c44c134f4c5f0 Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Tue, 23 May 2023 05:54:38 -0700 Subject: [PATCH 851/873] Add isothermal wall to AV boundaries. --- mirgecom/artificial_viscosity.py | 36 +++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 71d6b1519..37b3352c2 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -155,7 +155,8 @@ from mirgecom.boundary import ( AdiabaticNoslipWallBoundary, - PrescribedFluidBoundary + PrescribedFluidBoundary, + IsothermalWallBoundary ) @@ -200,6 +201,39 @@ def av_flux(self, dcoll, dd_bdry, diffusion, **kwargs): return self._boundary_quantity(dcoll, dd_bdry, num_flux, **kwargs) +class IsothermalWallAV(IsothermalWallBoundary): + r"""Interface to a prescribed adiabatic noslip fluid boundary with AV. + + .. automethod:: __init__ + .. automethod:: av_flux + """ + + def __init__(self, boundary_grad_av_func=_identical_grad_av, + av_num_flux_func=num_flux_central, **kwargs): + """Initialize the PrescribedFluidBoundaryAV and methods.""" + self._bnd_grad_av_func = boundary_grad_av_func + self._av_num_flux_func = av_num_flux_func + AdiabaticNoslipWallBoundary.__init__(self, **kwargs) + + def _boundary_quantity(self, dcoll, dd_bdry, quantity, local=False, **kwargs): + """Get a boundary quantity on local boundary, or projected to "all_faces".""" + dd_allfaces = dd_bdry.with_boundary_tag(FACE_RESTR_ALL) + return quantity if local else op.project(dcoll, + dd_bdry, dd_allfaces, quantity) + + def av_flux(self, dcoll, dd_bdry, diffusion, **kwargs): + """Get the diffusive fluxes for the AV operator API.""" + dd_bdry = as_dofdesc(dd_bdry) + grad_av_minus = op.project(dcoll, dd_bdry.untrace(), dd_bdry, diffusion) + actx = get_container_context_recursively(grad_av_minus) + nhat = actx.thaw(dcoll.normal(dd_bdry)) + grad_av_plus = grad_av_minus + bnd_grad_pair = TracePair(dd_bdry, interior=grad_av_minus, + exterior=grad_av_plus) + num_flux = self._av_num_flux_func(bnd_grad_pair.int, bnd_grad_pair.ext)@nhat + return self._boundary_quantity(dcoll, dd_bdry, num_flux, **kwargs) + + # This class is a FluidBoundary that provides default implementations of # the abstract methods in FluidBoundary. This class will be eliminated # by resolution of https://github.com/illinois-ceesd/mirgecom/issues/576. From 31dc40420c8c7b69581f234f8f2733800a2344fa Mon Sep 17 00:00:00 2001 From: "Michael T. Campbell" Date: Wed, 24 May 2023 08:16:05 -0700 Subject: [PATCH 852/873] Fix bug in boundary inheritance --- mirgecom/artificial_viscosity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 37b3352c2..441037f8e 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -213,7 +213,7 @@ def __init__(self, boundary_grad_av_func=_identical_grad_av, """Initialize the PrescribedFluidBoundaryAV and methods.""" self._bnd_grad_av_func = boundary_grad_av_func self._av_num_flux_func = av_num_flux_func - AdiabaticNoslipWallBoundary.__init__(self, **kwargs) + IsothermalWallBoundary.__init__(self, **kwargs) def _boundary_quantity(self, dcoll, dd_bdry, quantity, local=False, **kwargs): """Get a boundary quantity on local boundary, or projected to "all_faces".""" From fcbe303551fa061ab3a0bc067382662e9067fc0d Mon Sep 17 00:00:00 2001 From: Matthew Smith Date: Wed, 24 May 2023 20:49:14 -0700 Subject: [PATCH 853/873] temporarily switch arraycontext branch --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 99884280a..78c6a2924 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/mtcam/arraycontext.git@temp-bugfix#egg=arraycontext +--editable git+https://github.com/majosm/arraycontext.git@temp-zeros-like-fix#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode --editable git+https://github.com/majosm/grudge.git@production#egg=grudge --editable git+https://github.com/majosm/pytato.git@production#egg=pytato From 4040c6039f703466cb1a9b8ff7d2f04a3c6eb205 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 25 May 2023 13:23:16 -0500 Subject: [PATCH 854/873] Update from upstream --- mirgecom/artificial_viscosity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirgecom/artificial_viscosity.py b/mirgecom/artificial_viscosity.py index 37b3352c2..441037f8e 100644 --- a/mirgecom/artificial_viscosity.py +++ b/mirgecom/artificial_viscosity.py @@ -213,7 +213,7 @@ def __init__(self, boundary_grad_av_func=_identical_grad_av, """Initialize the PrescribedFluidBoundaryAV and methods.""" self._bnd_grad_av_func = boundary_grad_av_func self._av_num_flux_func = av_num_flux_func - AdiabaticNoslipWallBoundary.__init__(self, **kwargs) + IsothermalWallBoundary.__init__(self, **kwargs) def _boundary_quantity(self, dcoll, dd_bdry, quantity, local=False, **kwargs): """Get a boundary quantity on local boundary, or projected to "all_faces".""" From b9741641e30739f5f740b8646141091f4e59ed99 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 16 Jun 2023 06:22:11 -0500 Subject: [PATCH 855/873] Add Renac flux implementation --- mirgecom/inviscid.py | 101 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 22e51ee42..9e5de6031 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -476,6 +476,107 @@ def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): species_mass=species_mass_flux) +def entropy_conserving_flux_renac(gas_model, state_ll, state_rr): + """Compute the entropy conservative fluxes from states *cv_ll* and *cv_rr*. + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + A CV object containing the matrix-valued two-point flux vectors + for each conservation equation. + """ + dim = state_ll.dim + actx = state_ll.array_context + t_ll = state_ll.temperature + t_rr = state_rr.temperature + p_ll = state_ll.pressure + p_rr = state_rr.pressure + gamma_ll = gas_model.eos.gamma(state_ll.cv, state_ll.temperature) + gamma_rr = gas_model.eos.gamma(state_rr.cv, state_rr.temperature) + theta_ll = 1.0/t_ll + theta_rr = 1.0/t_rr + # theta_avg = 0.5*(theta_ll + theta_rr) + # p_avg = 0.5*(p_ll + p_rr) + t_avg = 0.5*(t_ll + t_rr) + + pot_ll = p_ll * theta_ll + pot_rr = p_rr * theta_rr + pot_avg = 0.5*(pot_ll + pot_rr) + + def ln_mean(x: DOFArray, y: DOFArray, epsilon=1e-4): + f2 = (x * (x - 2 * y) + y * y) / (x * (x + 2 * y) + y * y) + return actx.np.where( + actx.np.less(f2, epsilon), + (x + y) / (2 + f2*2/3 + f2*f2*2/5 + f2*f2*f2*2/7), + (y - x) / actx.np.log(y / x) + ) + + # pot_mean = ln_mean(pot_ll, pot_rr) + theta_mean = ln_mean(theta_ll, theta_rr) + t_mean = 1.0/theta_mean + pec_avg = pot_avg * t_avg + p_mean = ln_mean(p_ll, p_rr) + + # Primitive variables for left and right states + rho_ll = state_ll.mass_density + u_ll = state_ll.velocity + p_ll = state_ll.pressure + # rho_species_ll = state_ll.species_mass_density + y_ll = state_ll.species_mass_fractions + + rho_rr = state_rr.mass_density + u_rr = state_rr.velocity + p_rr = state_rr.pressure + # rho_species_rr = state_rr.species_mass_density + y_rr = state_rr.species_mass_fractions + + # beta_ll = 0.5 * rho_ll / p_ll + # beta_rr = 0.5 * rho_rr / p_rr + # specific_kin_ll = 0.5 * np.dot(u_ll, u_ll) + # specific_kin_rr = 0.5 * np.dot(u_rr, u_rr) + kin_comb = 0.5 * np.dot(u_ll, u_rr) + + # rho_avg = 0.5 * (rho_ll + rho_rr) + rho_mean = ln_mean(rho_ll, rho_rr) + y_avg = 0.5 * (y_ll + y_rr) + species_mass_mean = rho_mean * y_avg + + # species_mass_mean = make_obj_array( + # [ln_mean(y_ll_i, y_rr_i) + # for y_ll_i, y_rr_i in zip(rho_species_ll, rho_species_rr)]) + + # beta_mean = ln_mean(beta_ll, beta_rr) + # beta_avg = 0.5 * (beta_ll + beta_rr) + + u_avg = 0.5 * (u_ll + u_rr) + # p_mean = 0.5 * rho_avg / beta_avg + # velocity_square_avg = specific_kin_ll + specific_kin_rr + + mass_flux = rho_mean * u_avg + momentum_flux = outer(mass_flux, u_avg) + np.eye(dim) * pec_avg + + gamma_avg = 0.5 * (gamma_ll + gamma_rr) + ener_es = p_mean / (gamma_avg - 1) + 0.5 * rho_mean * np.dot(u_avg, u_avg) + cv_es = ConservedVars(mass=rho_mean, momentum=rho_mean*u_avg, + species_mass=species_mass_mean, energy=ener_es) + heat_cap_cv_es_mix = gas_model.eos.heat_capacity_cv(cv_es, t_mean) + ener_term = (heat_cap_cv_es_mix * t_mean + kin_comb) * mass_flux + energy_flux = ener_term + pec_avg * u_avg + + # energy_flux = ( + # mass_flux * 0.5 * ( + # 1/(gamma_avg - 1)/beta_mean - velocity_square_avg) + # + np.dot(momentum_flux, u_avg) + # ) + + species_mass_flux = species_mass_mean.reshape(-1, 1) * u_avg + + return ConservedVars(mass=mass_flux, + energy=energy_flux, + momentum=momentum_flux, + species_mass=species_mass_flux) + + def entropy_stable_inviscid_flux_rusanov(state_pair, gas_model, normal, **kwargs): r"""Return the entropy stable inviscid numerical flux. From a3b4c8bbbeb37a5678b09ca4434fc6e70710f274 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 16 Jun 2023 08:55:40 -0500 Subject: [PATCH 856/873] Add (switch to) Renac flux for testing. --- mirgecom/euler.py | 8 +++++--- mirgecom/inviscid.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index bd65333fe..3201de6b4 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -68,7 +68,9 @@ inviscid_facial_flux_rusanov, inviscid_flux_on_element_boundary, entropy_conserving_flux_chandrashekar, - entropy_stable_inviscid_flux_rusanov + entropy_conserving_flux_renac, + entropy_stable_inviscid_flux_rusanov, + entropy_stable_inviscid_flux_renac ) from mirgecom.operators import div_operator @@ -107,7 +109,7 @@ class _ESFluidTemperatureTag(): def entropy_stable_euler_operator( dcoll, gas_model, state, boundaries, time=0.0, - inviscid_numerical_flux_func=entropy_stable_inviscid_flux_rusanov, + inviscid_numerical_flux_func=entropy_stable_inviscid_flux_renac, operator_states_quad=None, dd=DD_VOLUME_ALL, quadrature_tag=None, comm_tag=None): """Compute RHS of the Euler flow equations using flux-differencing. @@ -183,7 +185,7 @@ def _reshape(shape, ary): # Just need group for determining the number of elements for grp, subary in zip(dcoll.discr_from_dd(dd_vol).groups, ary))) - flux_matrices = entropy_conserving_flux_chandrashekar( + flux_matrices = entropy_conserving_flux_renac( gas_model, _reshape((1, -1), modified_conserved_fluid_state), _reshape((-1, 1), modified_conserved_fluid_state)) diff --git a/mirgecom/inviscid.py b/mirgecom/inviscid.py index 9e5de6031..0202812b2 100644 --- a/mirgecom/inviscid.py +++ b/mirgecom/inviscid.py @@ -611,3 +611,39 @@ def entropy_stable_inviscid_flux_rusanov(state_pair, gas_model, normal, **kwargs dissipation = -0.5*lam*outer(state_pair.ext.cv - state_pair.int.cv, normal) return (flux + dissipation) @ normal + + +def entropy_stable_inviscid_flux_renac(state_pair, gas_model, normal, **kwargs): + r"""Return the entropy stable inviscid numerical flux. + + This facial flux routine is "entropy stable" in the sense that + it computes the flux average component of the interface fluxes + using an entropy conservative two-point flux + (e.g. :func:`entropy_conserving_flux_chandrashekar`). Additional + dissipation is imposed by penalizing the "jump" of the state across + interfaces. + + Parameters + ---------- + state_pair: :class:`~grudge.trace_pair.TracePair` + Trace pair of :class:`~mirgecom.gas_model.FluidState` for the face upon + which the flux calculation is to be performed + + Returns + ------- + :class:`~mirgecom.fluid.ConservedVars` + A CV object containing the scalar numerical fluxes at the input faces. + """ + from mirgecom.inviscid import entropy_conserving_flux_renac + + actx = state_pair.int.array_context + flux = entropy_conserving_flux_renac(gas_model, + state_pair.int, + state_pair.ext) + + # This calculates the local maximum eigenvalue of the flux Jacobian + # for a single component gas, i.e. the element-local max wavespeed |v| + c. + lam = actx.np.maximum(state_pair.int.wavespeed, state_pair.ext.wavespeed) + dissipation = -0.5*lam*outer(state_pair.ext.cv - state_pair.int.cv, normal) + + return (flux + dissipation) @ normal From 93e0e8176b191439e9defb8bd70673c75123b9d5 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Fri, 16 Jun 2023 08:56:22 -0500 Subject: [PATCH 857/873] Switch to updated grudge to capture upstream mods. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4feee5eef..443d0e155 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/majosm/arraycontext.git@temp-zeros-like-fix#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode ---editable git+https://github.com/mtcam/grudge.git@grudge-esdg#egg=grudge +--editable git+https://github.com/mtcam/grudge.git@production-esdg#egg=grudge --editable git+https://github.com/majosm/pytato.git@production#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 6e8ce01c23a0520aebd6794fafe476addb637b5c Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Tue, 20 Jun 2023 12:49:29 -0500 Subject: [PATCH 858/873] Test switch to ceesd fork. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 78c6a2924..c82ad3b5c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren --editable git+https://github.com/inducer/modepy.git#egg=modepy --editable git+https://github.com/majosm/arraycontext.git@temp-zeros-like-fix#egg=arraycontext --editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode ---editable git+https://github.com/majosm/grudge.git@production#egg=grudge +--editable git+https://github.com/illinois-ceesd/grudge.git@production#egg=grudge --editable git+https://github.com/majosm/pytato.git@production#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle From 7017d9bed79b6d66a84622221c0dd87c813a2913 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Wed, 21 Jun 2023 16:00:24 -0500 Subject: [PATCH 859/873] Switch to illinois-ceesd forks for subpkgs --- requirements.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index c82ad3b5c..aa8aed495 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,14 +12,14 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/kaushikcfd/loopy.git#egg=loopy +--editable git+https://github.com/illinois-ceesd/loopy.git@production#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/majosm/arraycontext.git@temp-zeros-like-fix#egg=arraycontext ---editable git+https://github.com/majosm/meshmode.git@production#egg=meshmode +--editable git+https://github.com/illinois-ceesd/arraycontext.git@production#egg=arraycontext +--editable git+https://github.com/illinois-ceesd/meshmode.git@production#egg=meshmode --editable git+https://github.com/illinois-ceesd/grudge.git@production#egg=grudge ---editable git+https://github.com/majosm/pytato.git@production#egg=pytato +--editable git+https://github.com/illinois-ceesd/pytato.git@production#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle --editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From 90a20941f40666216eaa94d8bbbb982ea29320e0 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 27 Jun 2023 10:16:14 -0500 Subject: [PATCH 860/873] Use pilot upstream collection --- requirements.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3e46abce9..82bb05bfe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,14 +12,14 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/illinois-ceesd/loopy.git@production#egg=loopy +--editable git+https://github.com/illinois-ceesd/loopy.git@production-pilot#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/illinois-ceesd/arraycontext.git@production#egg=arraycontext ---editable git+https://github.com/illinois-ceesd/meshmode.git@production#egg=meshmode ---editable git+https://github.com/illinois-ceesd/grudge.git@production-esdg#egg=grudge ---editable git+https://github.com/illinois-ceesd/pytato.git@production#egg=pytato +--editable git+https://github.com/illinois-ceesd/arraycontext.git@production-pilot#egg=arraycontext +--editable git+https://github.com/illinois-ceesd/meshmode.git@production-pilot#egg=meshmode +--editable git+https://github.com/illinois-ceesd/grudge.git@production-pilot#egg=grudge +--editable git+https://github.com/illinois-ceesd/pytato.git@production-pilot#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle --editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From 3f21116812c67c00755008172d9e8b2c987ebfbd Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 27 Jun 2023 12:14:20 -0500 Subject: [PATCH 861/873] Remove stale example --- examples/make_uniform_nodes.py | 185 --------------------------------- 1 file changed, 185 deletions(-) delete mode 100644 examples/make_uniform_nodes.py diff --git a/examples/make_uniform_nodes.py b/examples/make_uniform_nodes.py deleted file mode 100644 index bc67b8fd7..000000000 --- a/examples/make_uniform_nodes.py +++ /dev/null @@ -1,185 +0,0 @@ -"""Demonstrate a 3D periodic box mesh generation.""" - -__copyright__ = """ -Copyright (C) 2020 University of Illinois Board of Trustees -""" - -__license__ = """ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -""" -import logging -import numpy as np -import pyopencl as cl -from functools import partial - -from meshmode.mesh import BTAG_ALL, BTAG_NONE # noqa - -from mirgecom.discretization import create_discretization_collection - -from mirgecom.mpi import mpi_entry_point - - -logger = logging.getLogger(__name__) - - -class MyRuntimeError(RuntimeError): - """Simple exception to kill the simulation.""" - - pass - - -# Box grid generator widget lifted from @majosm and slightly bent -def _get_box_mesh(dim, a, b, n, t=None, periodic=None): - if periodic is None: - periodic = (False,)*dim - - dim_names = ["x", "y", "z"] - bttf = {} - for i in range(dim): - bttf["-"+str(i+1)] = ["-"+dim_names[i]] - bttf["+"+str(i+1)] = ["+"+dim_names[i]] - from meshmode.mesh.generation import generate_regular_rect_mesh as gen - return gen(a=a, b=b, n=n, boundary_tag_to_face=bttf, mesh_type=t, - periodic=periodic) - - -@mpi_entry_point -def main(ctx_factory=cl.create_some_context, use_logmgr=True, - use_overintegration=False, lazy=False, - use_leap=False, use_profiling=False, casename=None, - rst_filename=None, actx_class=None, use_esdg=False): - """Drive the example.""" - if actx_class is None: - raise RuntimeError("Array context class missing.") - - cl_ctx = ctx_factory() - - if casename is None: - casename = "mirgecom" - - from mpi4py import MPI - comm = MPI.COMM_WORLD - rank = comm.Get_rank() - nparts = comm.Get_size() - - # from mirgecom.simutil import global_reduce as _global_reduce - # global_reduce = partial(_global_reduce, comm=comm) - - # logmgr = initialize_logmgr(use_logmgr, - # filename=f"{casename}.sqlite", mode="wu", mpi_comm=comm) - - if use_profiling: - queue = cl.CommandQueue( - cl_ctx, properties=cl.command_queue_properties.PROFILING_ENABLE) - else: - queue = cl.CommandQueue(cl_ctx) - - from mirgecom.simutil import get_reasonable_memory_pool - alloc = get_reasonable_memory_pool(cl_ctx, queue) - - if lazy: - actx = actx_class(comm, queue, mpi_base_tag=12000, allocator=alloc) - else: - actx = actx_class(comm, queue, allocator=alloc, force_device_scalars=True) - - # some geometry setup - dim = 2 - - left_boundary_location = tuple([0. for _ in range(dim)]) - right_boundary_location = tuple([2*np.pi for _ in range(dim)]) - periodic = (True,)*dim - - n_refine = 1 - pts_per_axis = 16 - npts_axis = tuple([n_refine * pts_per_axis for _ in range(dim)]) - # npts_axis = (npts_x, npts_y) - box_ll = left_boundary_location - box_ur = right_boundary_location - generate_mesh = partial(_get_box_mesh, dim=dim, a=box_ll, b=box_ur, n=npts_axis, - periodic=periodic) - print(f"{left_boundary_location=}") - print(f"{right_boundary_location=}") - print(f"{npts_axis=}") - from mirgecom.simutil import generate_and_distribute_mesh - local_mesh, global_nelements = generate_and_distribute_mesh(comm, - generate_mesh) - local_nelements = local_mesh.nelements - - # from meshmode.mesh.processing import rotate_mesh_around_axis - # local_mesh = rotate_mesh_around_axis(local_mesh, theta=-np.pi/4) - - order = 1 - dcoll = create_discretization_collection(actx, local_mesh, order=order, - quadrature_order=order+2) - nodes = actx.thaw(dcoll.nodes()) - - print(f"{rank=}/{nparts=}") - print(f"{global_nelements=}") - print(f"{local_nelements=}") - print(f"{nodes=}") - - -if __name__ == "__main__": - import argparse - casename = "poiseuille" - parser = argparse.ArgumentParser(description=f"MIRGE-Com Example: {casename}") - parser.add_argument("--overintegration", action="store_true", - help="use overintegration in the RHS computations") - parser.add_argument("--lazy", action="store_true", - help="switch to a lazy computation mode") - parser.add_argument("--esdg", action="store_true", - help="use flux-differencing/entropy stable DG for inviscid computations.") - parser.add_argument("--profiling", action="store_true", - help="turn on detailed performance profiling") - parser.add_argument("--log", action="store_true", default=True, - help="turn on logging") - parser.add_argument("--leap", action="store_true", - help="use leap timestepper") - parser.add_argument("--restart_file", help="root name of restart file") - parser.add_argument("--casename", help="casename to use for i/o") - args = parser.parse_args() - - from warnings import warn - if args.esdg: - if not args.lazy: - warn("ESDG requires lazy-evaluation, enabling --lazy.") - if not args.overintegration: - warn("ESDG requires overintegration, enabling --overintegration.") - - lazy = args.lazy or args.esdg - if args.profiling: - if lazy: - raise ValueError("Can't use lazy and profiling together.") - - from grudge.array_context import get_reasonable_array_context_class - actx_class = get_reasonable_array_context_class(lazy=lazy, distributed=True) - - logging.basicConfig(format="%(message)s", level=logging.INFO) - if args.casename: - casename = args.casename - rst_filename = None - if args.restart_file: - rst_filename = args.restart_file - - main(use_logmgr=args.log, use_leap=args.leap, use_profiling=args.profiling, - use_overintegration=args.overintegration or args.esdg, lazy=lazy, - casename=casename, rst_filename=rst_filename, actx_class=actx_class, - use_esdg=args.esdg) - -# vim: foldmethod=marker From ec885bc8a396629747f717cbf28c27e65b926d94 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 27 Jun 2023 12:21:43 -0500 Subject: [PATCH 862/873] Switch back to production upstream branches. --- requirements.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 82bb05bfe..aa8aed495 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,14 +12,14 @@ git+https://github.com/pythological/kanren.git#egg=miniKanren # The following packages will be git cloned by emirge: --editable git+https://github.com/inducer/pymbolic.git#egg=pymbolic #--editable git+https://github.com/inducer/pyopencl.git#egg=pyopencl ---editable git+https://github.com/illinois-ceesd/loopy.git@production-pilot#egg=loopy +--editable git+https://github.com/illinois-ceesd/loopy.git@production#egg=loopy --editable git+https://github.com/inducer/dagrt.git#egg=dagrt --editable git+https://github.com/inducer/leap.git#egg=leap --editable git+https://github.com/inducer/modepy.git#egg=modepy ---editable git+https://github.com/illinois-ceesd/arraycontext.git@production-pilot#egg=arraycontext ---editable git+https://github.com/illinois-ceesd/meshmode.git@production-pilot#egg=meshmode ---editable git+https://github.com/illinois-ceesd/grudge.git@production-pilot#egg=grudge ---editable git+https://github.com/illinois-ceesd/pytato.git@production-pilot#egg=pytato +--editable git+https://github.com/illinois-ceesd/arraycontext.git@production#egg=arraycontext +--editable git+https://github.com/illinois-ceesd/meshmode.git@production#egg=meshmode +--editable git+https://github.com/illinois-ceesd/grudge.git@production#egg=grudge +--editable git+https://github.com/illinois-ceesd/pytato.git@production#egg=pytato --editable git+https://github.com/pyrometheus/pyrometheus.git@tulio-transport#egg=pyrometheus --editable git+https://github.com/illinois-ceesd/logpyle.git#egg=logpyle --editable git+https://github.com/kaushikcfd/feinsum.git#egg=feinsum From f51403d79ed2129c6d219f91db9c3ca88944b418 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 27 Jun 2023 12:25:14 -0500 Subject: [PATCH 863/873] Deflake8 --- mirgecom/euler.py | 2 +- test/test_euler.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mirgecom/euler.py b/mirgecom/euler.py index 3201de6b4..4660ac390 100644 --- a/mirgecom/euler.py +++ b/mirgecom/euler.py @@ -63,7 +63,7 @@ ) from mirgecom.gas_model import make_operator_fluid_states -from mirgecom.inviscid import ( +from mirgecom.inviscid import ( # noqa inviscid_flux, inviscid_facial_flux_rusanov, inviscid_flux_on_element_boundary, diff --git a/test/test_euler.py b/test/test_euler.py index 54e6f7b6e..48c26bd21 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -296,7 +296,7 @@ def test_uniform_rhs_esdg(actx_factory, nspecies, dim, order): # for i in range(num_equations)]) # ) - expected_rhs = make_conserved( + expected_rhs = make_conserved( # noqa dim, q=make_obj_array([dcoll.zeros(actx) for i in range(num_equations)]) ) From d15da259c2af12e03933fa1cc169e4cd0ff0baab Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Tue, 27 Jun 2023 22:26:29 -0500 Subject: [PATCH 864/873] Update from upstream --- scripts/production-testing-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/production-testing-env.sh b/scripts/production-testing-env.sh index dd4b0153b..943fe072b 100755 --- a/scripts/production-testing-env.sh +++ b/scripts/production-testing-env.sh @@ -22,4 +22,4 @@ # PRODUCTION_DRIVERS="illinois-ceesd/drivers_y1-nozzle@main:w-hagen/isolator@NS" PRODUCTION_BRANCH=${PRODUCTION_BRANCH:-"production"} PRODUCTION_FORK=${PRODUCTION_FORK:-"illinois-ceesd"} -PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@add-esdg-option"} +PRODUCTION_DRIVERS=${PRODUCTION_DRIVERS:-"illinois-ceesd/drivers_y3-prediction@main"} From 291e236ebf320ac6e410642873f4f84bbe41f016 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 29 Jun 2023 08:22:30 -0500 Subject: [PATCH 865/873] Remove rotation, testing stuff --- examples/poiseuille-mpi.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/poiseuille-mpi.py b/examples/poiseuille-mpi.py index ae139098a..810dcf5a2 100644 --- a/examples/poiseuille-mpi.py +++ b/examples/poiseuille-mpi.py @@ -170,10 +170,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, generate_mesh) local_nelements = local_mesh.nelements - from meshmode.mesh.processing import rotate_mesh_around_axis - local_mesh = rotate_mesh_around_axis(local_mesh, theta=-np.pi/4) + # from meshmode.mesh.processing import rotate_mesh_around_axis + # local_mesh = rotate_mesh_around_axis(local_mesh, theta=-np.pi/4) - order = 4 + order = 2 dcoll = create_discretization_collection(actx, local_mesh, order=order, quadrature_order=order+2) nodes = actx.thaw(dcoll.nodes()) From 19c9523fa3b8d8123bf74261fe67581179ed3d5a Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 29 Jun 2023 08:34:08 -0500 Subject: [PATCH 866/873] Reset pressure range for advdiff --- examples/scalar-advdiff-mpi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/scalar-advdiff-mpi.py b/examples/scalar-advdiff-mpi.py index 1cffd3d14..9caad93c8 100644 --- a/examples/scalar-advdiff-mpi.py +++ b/examples/scalar-advdiff-mpi.py @@ -352,9 +352,9 @@ def my_health_check(pressure, component_errors): health_error = True logger.info(f"{rank=}: Invalid pressure data found.") - if check_range_local(dcoll, "vol", pressure, .99999999, 1.00000001): + if check_range_local(dcoll, "vol", pressure, 101324.99, 101325.01): health_error = True - logger.info(f"{rank=}: Solution diverged from exact.") + logger.info(f"{rank=}: Pressure out of expected range.") exittol = .09 if max(component_errors) > exittol: From 1da762310b4e7bae1d6c751bd16c62ab956602b8 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 29 Jun 2023 09:13:43 -0500 Subject: [PATCH 867/873] Sync with ESDG examples --- examples/combozzle-mpi.py | 6 +++--- examples/lump-mpi.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/combozzle-mpi.py b/examples/combozzle-mpi.py index d04b65f7c..0dcde1bd1 100644 --- a/examples/combozzle-mpi.py +++ b/examples/combozzle-mpi.py @@ -258,10 +258,10 @@ def main(ctx_factory=cl.create_some_context, use_logmgr=True, grid_only = 0 discr_only = 0 inviscid_only = 0 - inert_only = 1 + inert_only = 0 init_only = 0 - single_gas_only = 1 - nspecies = 0 + single_gas_only = 0 + nspecies = 7 use_cantera = 0 # }}} diff --git a/examples/lump-mpi.py b/examples/lump-mpi.py index 5ed95426a..2f98f9aa5 100644 --- a/examples/lump-mpi.py +++ b/examples/lump-mpi.py @@ -268,7 +268,7 @@ def my_health_check(dv, state, exact): component_errors = compare_fluid_solutions(dcoll, state, exact) exittol = .09 if max(component_errors) > exittol: - # health_error = True + health_error = True if rank == 0: logger.info("Solution diverged from exact soln.") From ceb8b9752f7e1af055fef531e880ace74ad8df02 Mon Sep 17 00:00:00 2001 From: tulioricci <72670026+tulioricci@users.noreply.github.com> Date: Tue, 28 Nov 2023 08:31:41 -0800 Subject: [PATCH 868/873] Remove blank line in test_viscous (fix conflict) (#982) --- test/test_viscous.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_viscous.py b/test/test_viscous.py index ab03c6733..914acfa40 100644 --- a/test/test_viscous.py +++ b/test/test_viscous.py @@ -398,7 +398,6 @@ def test_diffusive_heat_flux(actx_factory): mu_b = 1.0 mu = 0.5 kappa = 5.0 - # assemble d_alpha so that every species has a unique j d_alpha = np.array([(ispec+1) for ispec in range(nspecies)]) From 1ec961177f28b24d61d4557dce0a3aa7f9b74127 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Wed, 29 Nov 2023 15:26:06 -0600 Subject: [PATCH 869/873] Rename esdg conversion test. --- test/test_euler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_euler.py b/test/test_euler.py index 48c26bd21..e0af9a108 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -228,7 +228,7 @@ def inf_norm(x): @pytest.mark.parametrize("nspecies", [0, 10]) @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [2, 3, 4]) -def test_uniform_rhs_esdg(actx_factory, nspecies, dim, order): +def test_entropy_to_conserved_conversion(actx_factory, nspecies, dim, order): """Test the inviscid rhs using a trivial constant/uniform state. This state should yield rhs = 0 to FP. The test is performed for 1, 2, From 08b67110e4f344561b53974d34aa68a6eb7cd2b2 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Fri, 1 Dec 2023 14:35:50 -0600 Subject: [PATCH 870/873] Sharpen comment per Tulio review. --- test/test_euler.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_euler.py b/test/test_euler.py index e0af9a108..4caf23165 100644 --- a/test/test_euler.py +++ b/test/test_euler.py @@ -229,10 +229,10 @@ def inf_norm(x): @pytest.mark.parametrize("dim", [1, 2, 3]) @pytest.mark.parametrize("order", [2, 3, 4]) def test_entropy_to_conserved_conversion(actx_factory, nspecies, dim, order): - """Test the inviscid rhs using a trivial constant/uniform state. + """Test the entropy-to-conservative vars conversion utility. - This state should yield rhs = 0 to FP. The test is performed for 1, 2, - and 3 dimensions, with orders 1, 2, and 3, with and without passive species. + The test is performed for 1, 2, and 3 dimensions, with orders 2, 3, and 4, + with and without passive species. """ actx = actx_factory() From c39167189017eae13ac5e332456502844629e23e Mon Sep 17 00:00:00 2001 From: tulioricci <72670026+tulioricci@users.noreply.github.com> Date: Tue, 2 Jan 2024 11:12:11 -0600 Subject: [PATCH 871/873] Keep commented line in test_eos (fix conflict) (#991) --- test/test_eos.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_eos.py b/test/test_eos.py index cf28770bf..1b1c176bc 100644 --- a/test/test_eos.py +++ b/test/test_eos.py @@ -611,6 +611,7 @@ def test_pyrometheus_kinetics(ctx_factory, mechname, rate_tol, y0): mech_input = get_mechanism_input(mechname) cantera_soln = cantera.Solution(name="gas", yaml=mech_input) from mirgecom.thermochemistry import make_pyrometheus_mechanism_class + # pyro_obj = pyro.get_thermochem_class(cantera_soln)(actx.np) pyro_obj = make_pyrometheus_mechanism_class(cantera_soln)(actx.np) nspecies = pyro_obj.num_species From 3106d6b2f8ad7c7a80f728d9035b43ddbad3e4d9 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Thu, 11 Apr 2024 02:32:44 -0500 Subject: [PATCH 872/873] Kick CI From 0e7906f7df729f51b1b30f9f1a0e67e46c47be61 Mon Sep 17 00:00:00 2001 From: Mike Campbell Date: Sat, 27 Apr 2024 09:14:24 -0500 Subject: [PATCH 873/873] Disable pylint unpacking error --- examples/blasius.py | 1 + examples/thermally-coupled.py | 1 + 2 files changed, 2 insertions(+) diff --git a/examples/blasius.py b/examples/blasius.py index ccbe3ef9a..ba702f1e8 100644 --- a/examples/blasius.py +++ b/examples/blasius.py @@ -208,6 +208,7 @@ def _compiled_stepper_wrapper(state, t, dt, rhs): def get_mesh_data(): from meshmode.mesh.io import read_gmsh + # pylint: disable=unpacking-non-sequence mesh, tag_to_elements = read_gmsh( mesh_path, force_ambient_dim=dim, return_tag_to_elements_map=True) diff --git a/examples/thermally-coupled.py b/examples/thermally-coupled.py index 7ede40452..7ef400f1e 100644 --- a/examples/thermally-coupled.py +++ b/examples/thermally-coupled.py @@ -145,6 +145,7 @@ def main(actx_class, use_esdg=False, use_overintegration=False, else: # generate the grid from scratch def get_mesh_data(): from meshmode.mesh.io import read_gmsh + # pylint: disable=unpacking-non-sequence mesh, tag_to_elements = read_gmsh( f"{local_path}/multivolume.msh", force_ambient_dim=2, return_tag_to_elements_map=True)