From 1d8aa88418ae06ef7d3e6aa1f729b00bf9196a71 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Thu, 20 Jun 2024 13:50:44 -0700 Subject: [PATCH 01/29] init commit of vof --- src/Make.incflo | 1 + src/incflo.H | 20 +- src/incflo.cpp | 2 + src/incflo_apply_predictor.cpp | 6 + src/incflo_regrid.cpp | 5 + src/prob/incflo_prob_I.H | 9 + src/prob/prob_init_fluid.cpp | 52 ++ src/utilities/io.cpp | 4 +- src/vof/CMakeLists.txt | 8 + src/vof/Make.package | 4 + src/vof/VolumeOfFluid.H | 40 ++ src/vof/VolumeOfFluid.cpp | 895 ++++++++++++++++++++++++++++ src/vof/incflo_vof.cpp | 23 + test_3d/GNUmakefile | 4 + test_3d/benchmark.lid_driven_cavity | 5 +- 15 files changed, 1073 insertions(+), 5 deletions(-) create mode 100644 src/vof/CMakeLists.txt create mode 100644 src/vof/Make.package create mode 100644 src/vof/VolumeOfFluid.H create mode 100644 src/vof/VolumeOfFluid.cpp create mode 100644 src/vof/incflo_vof.cpp diff --git a/src/Make.incflo b/src/Make.incflo index 0d08a8141..28db81d18 100644 --- a/src/Make.incflo +++ b/src/Make.incflo @@ -14,6 +14,7 @@ Bdirs += src/projection Bdirs += src/rheology Bdirs += src/setup Bdirs += src/utilities +Bdirs += src/vof ifeq ($(USE_PARTICLES), TRUE) DEFINES += -DINCFLO_USE_PARTICLES diff --git a/src/incflo.H b/src/incflo.H index 73891cb52..2b03853cd 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -20,6 +20,7 @@ #include #include +#include class incflo : public amrex::AmrCore { @@ -27,6 +28,7 @@ public: friend DiffusionTensorOp; friend DiffusionScalarOp; + friend VolumeOfFluid; enum struct FluidModel { Newtonian, powerlaw, Bingham, HerschelBulkley, deSouzaMendesDutra @@ -198,6 +200,18 @@ public: amrex::Vector const& eta, amrex::Real dt_diff); + /////////////////////////////////////////////////////////////////////////// + // + // tacer advection by VOF method + // + //////////////////////////////////////////////////////////////////////////// + + void tracer_vof_advection (amrex::Vector const& tracer, + AMREX_D_DECL(amrex::Vector const& u_mac, + amrex::Vector const& v_mac, + amrex::Vector const& w_mac)); + + [[nodiscard]] amrex::Array average_scalar_eta_to_faces (int lev, int comp, amrex::MultiFab const& cc_eta) const; @@ -656,7 +670,9 @@ private: std::unique_ptr m_diffusion_tensor_op; std::unique_ptr m_diffusion_scalar_op; - + + //vof class pointer + std::unique_ptr p_volume_of_fluid; // // end of member variables // @@ -736,6 +752,8 @@ private: DiffusionTensorOp* get_diffusion_tensor_op (); DiffusionScalarOp* get_diffusion_scalar_op (); + + VolumeOfFluid* get_volume_of_fluid (); amrex::Vector get_velocity_old () noexcept; amrex::Vector get_velocity_new () noexcept; diff --git a/src/incflo.cpp b/src/incflo.cpp index fd6ba7317..fea2940f5 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -160,6 +160,8 @@ void incflo::Evolve() if (writeNow()) { WritePlotFile(); + get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); + get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); m_last_plt = m_nstep; } diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index 077a1e22b..920eb46b3 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -465,4 +465,10 @@ void incflo::ApplyPredictor (bool incremental_projection) AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), GetVecOfConstPtrs(w_mac))); #endif + +// use vof to advect tracer + + tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), + GetVecOfConstPtrs(w_mac))); + } diff --git a/src/incflo_regrid.cpp b/src/incflo_regrid.cpp index 4e912df51..bdf4f4179 100644 --- a/src/incflo_regrid.cpp +++ b/src/incflo_regrid.cpp @@ -45,6 +45,8 @@ void incflo::MakeNewLevelFromCoarse (int lev, m_diffusion_tensor_op.reset(); m_diffusion_scalar_op.reset(); + + p_volume_of_fluid.reset(); // Note: finest_level has not yet been updated and so we use lev #ifdef AMREX_USE_EB @@ -99,6 +101,8 @@ void incflo::RemakeLevel (int lev, Real time, const BoxArray& ba, m_diffusion_tensor_op.reset(); m_diffusion_scalar_op.reset(); + + p_volume_of_fluid.reset(); #ifdef AMREX_USE_EB macproj = std::make_unique(Geom(0,finest_level), @@ -123,5 +127,6 @@ void incflo::ClearLevel (int lev) m_factory[lev].reset(); m_diffusion_tensor_op.reset(); m_diffusion_scalar_op.reset(); + p_volume_of_fluid.reset(); macproj.reset(); } diff --git a/src/prob/incflo_prob_I.H b/src/prob/incflo_prob_I.H index 080c17366..8bb89b2ce 100644 --- a/src/prob/incflo_prob_I.H +++ b/src/prob/incflo_prob_I.H @@ -164,4 +164,13 @@ amrex::GpuArray const& dx, amrex::GpuArray const& problo, amrex::GpuArray const& probhi) const; + + void droplet (amrex::Box const& vbx, amrex::Box const& gbx, + amrex::Array4 const& vel, + amrex::Array4 const& density, + amrex::Array4 const& tracer, + amrex::Box const& domain, + amrex::GpuArray const& dx, + amrex::GpuArray const& problo, + amrex::GpuArray const& probhi); #endif diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index c6f142997..17e17558d 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -184,6 +184,15 @@ void incflo::prob_init_fluid (int lev) ld.tracer.array(mfi), domain, dx, problo, probhi); + } + else if (1109 == m_probtype) + { + droplet (vbx, gbx, + ld.velocity.array(mfi), + ld.density.array(mfi), + ld.tracer.array(mfi), + domain, dx, problo, probhi); + } else { @@ -1093,3 +1102,46 @@ void incflo::init_burggraf (Box const& vbx, Box const& /*gbx*/, #endif }); } + +void incflo::droplet (Box const& vbx, Box const& /*gbx*/, + Array4 const& vel, + Array4 const& /*density*/, + Array4 const& tracer, + Box const& /*domain*/, + GpuArray const& dx, + GpuArray const& problo, + GpuArray const& probhi) +{ + amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real x = problo[0] + Real(i+0.5)*dx[0]; + Real y = problo[1] + Real(j+0.5)*dx[1]; + Real z = problo[2] + Real(k+0.5)*dx[2]; + + Real r = std::sqrt(x*x + y*y + z*z); + + Real rad = 5.0*dx[0]; + Real dia = 10.0*dx[0]; + + Real cenx = 0.5*(problo[0] + probhi[0]); + Real ceny = 0.5*(problo[1] + probhi[1]); + Real cenz = 0.5*(problo[2] + probhi[2]); + + Real xs = x - cenx; + Real ys = y - ceny; + Real zs = z - cenz; + + Real rs = (std::sqrt(xs*xs + ys*ys + zs*zs) - rad)/std::sqrt(dx[0]*dx[0] + dx[1]*dx[1] + dx[2]*dx[2]); + + if (rs > 0.5) tracer(i,j,k) = 0.0; + else if (rs < -.5) tracer(i,j,k) = 1.0; + else tracer(i,j,k) = 0.5-rs; + + // clockwise rotation with flow decreasing to 0 at cylinder boundary + vel(i,j,k,0) = Real(0.0); + vel(i,j,k,1) = Real(0.0); +#if (AMREX_SPACEDIM == 3) + vel(i,j,k,2) = Real(0.0); +#endif + }); +} diff --git a/src/utilities/io.cpp b/src/utilities/io.cpp index e000d2033..399888a63 100644 --- a/src/utilities/io.cpp +++ b/src/utilities/io.cpp @@ -339,8 +339,6 @@ void incflo::WritePlotFile() const std::string& plotfilename = amrex::Concatenate(m_plot_file, m_nstep); - amrex::Print() << " Writing plotfile " << plotfilename << " at time " << m_cur_time << std::endl; - int ncomp = 0; // Velocity components @@ -674,3 +672,5 @@ void incflo::WritePlotFile() particleData.Checkpoint(plotfilename); #endif } + + diff --git a/src/vof/CMakeLists.txt b/src/vof/CMakeLists.txt new file mode 100644 index 000000000..bdcc44b63 --- /dev/null +++ b/src/vof/CMakeLists.txt @@ -0,0 +1,8 @@ +target_include_directories(incflo PRIVATE ${CMAKE_CURRENT_LIST_DIR}) + +target_sources(incflo + PRIVATE + VolumeOfFluid.H + VolumeOfFluid.cpp + incflo_vof.cpp + ) diff --git a/src/vof/Make.package b/src/vof/Make.package new file mode 100644 index 000000000..40c2078bc --- /dev/null +++ b/src/vof/Make.package @@ -0,0 +1,4 @@ +CEXE_sources += VolumeOfFluid.cpp +CEXE_sources += incflo_vof.cpp +CEXE_headers += VolumeOfFluid.H + diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H new file mode 100644 index 000000000..8a07b8b02 --- /dev/null +++ b/src/vof/VolumeOfFluid.H @@ -0,0 +1,40 @@ +//struct TracerVOF { +// GfsVariableTracer parent; +// +// GfsVariable * m[FTT_DIMENSION], * alpha; +//}; +// Header file (VolumeOfFluid class) +#ifndef INCFLO_VOF_ +#define INCFLO_VOF_ +class incflo; + +class VolumeOfFluid +{ +public: + VolumeOfFluid (incflo* a_incflo); + void tracer_vof_advection(amrex::Vector const& tracer, + AMREX_D_DECL(amrex::Vector const& u_mac, + amrex::Vector const& v_mac, + amrex::Vector const& w_mac), + amrex::Real dt); + void tracer_vof_init_fraction(amrex::Vector const& tracer); + void write_tecplot_surface(amrex::Real time, int nstep); + void WriteTecPlotFile (amrex::Real time, int nstep); + +// normal vector of interface + amrex::Vector normal; +// the plane defined by @m.@x = @alpha + amrex::Vector alpha; +private: +incflo* v_incflo; //incflo object +int finest_level; +#if AMREX_SPACEDIM == 2 +# define F(x,y,z) f[x][y] +#else +# define F(x,y,z) f[x][y][z] +#endif + +void tracer_vof_update(amrex::Vector const& tracer); +}; + +#endif diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp new file mode 100644 index 000000000..1a5f4d849 --- /dev/null +++ b/src/vof/VolumeOfFluid.cpp @@ -0,0 +1,895 @@ +#include +#include +#include + +using namespace amrex; +#define EPS 1e-4 +#define THRESHOLD(c) {if ((c) < 0.) c = 0.; else if ((c) > 1.) c = 1.;} +#define CELL_IS_FULL(f) ((f) == 0. || (f) == 1.) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) + +VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) +{ + finest_level = v_incflo->finestLevel(); + // ************************************************************************************* + // Allocate space for the information of the interface segments + // ************************************************************************************* + for (int lev = 0; lev <= finest_level; ++lev){ + normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, 1, MFInfo(), v_incflo->Factory(lev)); + alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, 1, MFInfo(), v_incflo->Factory(lev)); + } + + +} +static XDim3 edge[12][2] = { + {{0.,0.,0.},{1.,0.,0.}},{{0.,0.,1.},{1.,0.,1.}},{{0.,1.,1.},{1.,1.,1.}},{{0.,1.,0.},{1.,1.,0.}}, + {{0.,0.,0.},{0.,1.,0.}},{{0.,0.,1.},{0.,1.,1.}},{{1.,0.,1.},{1.,1.,1.}},{{1.,0.,0.},{1.,1.,0.}}, + {{0.,0.,0.},{0.,0.,1.}},{{1.,0.,0.},{1.,0.,1.}},{{1.,1.,0.},{1.,1.,1.}},{{0.,1.,0.},{0.,1.,1.}} +}; +/* first index is the edge number, second index is the edge orientation + (0 or 1), third index are the edges which this edge may connect to + in order and the corresponding face direction */ +static int connect[12][2][4] = { + {{9, 1, 8, 3}, {4, 3, 7, 5}}, /* 0 */ + {{6, 2, 5, 4}, {8, 0, 9, 3}}, /* 1 */ + {{10, 3, 11, 2}, {5, 1, 6, 4}}, /* 2 */ + {{7, 0, 4, 5}, {11, 2, 10, 2}}, /* 3 */ + {{3, 7, 0, 5}, {8, 5, 11, 1}}, /* 4 */ + {{11, 4, 8, 1}, {1, 6, 2, 4}}, /* 5 */ + {{2, 5, 1, 4}, {9, 7, 10, 1}}, /* 6 */ + {{10, 6, 9, 1}, {0, 4, 3, 5}}, /* 7 */ + {{5, 11, 4, 1}, {0, 9, 1, 3}}, /* 8 */ + {{1, 8, 0, 3}, {7, 10, 6, 1}}, /* 9 */ + {{6, 9, 7, 1}, {3, 11, 2, 2}}, /* 10 */ + {{2, 10, 3, 2}, {4, 8, 5, 1}} /* 11 */ +}; + +static void cube_plane_intersection (XDim3 cell, GpuArray dx, + XDim3 const * O, XDim3 const * n, XDim3 p[12], + int orient[12]) +{ + XDim3 o; + int i; + for (i=0; ix*(e.x - d.x) + n->y*(e.y - d.y) + n->z*(e.z - d.z); + orient[i] = -1; + if (fabs (den) > 1e-10) { + Real t = (n->x*(O->x - d.x) + n->y*(O->y - d.y) + n->z*(O->z - d.z))/den; + if (t >= 0. && t < 1.) { + p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); + orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); + } + } + } +} +using NODE_CUT=Array; +/** + * vof_cut_cube_vertices: + * @cell: a #FttCell. + * @p: a point on the plane. + * @n: the normal to the plane. + * @v: where to return the vertices coordinates. + * @d: where to return the direction. + * + * Fills @v, @d and @val with the coordinates/values of the vertices, + * intersections of @cell with the plane defined by @p and @n. + * + * The vertices are ordered consistently to define a consistent, + * oriented polygon. + * + * Returns: the number of vertices (0 if the plane does not cut the cell). + */ +static int vof_cut_cube_vertices (XDim3 cell, GpuArray dx, + XDim3 const * p, XDim3 const * n, + NODE_CUT & v, int d[12]) +{ + XDim3 a[12]; + int orient[12]; + int i; + + AMREX_ASSERT (p != NULL); + + + + cube_plane_intersection (cell, dx, p, n, a, orient); + for (i = 0; i < 12; i++) { + int nv = 0, e = i; + while (orient[e] >= 0) { + int m = 0, * ne = connect[e][orient[e]]; + d[nv] = ne[3]; + v[nv++] = a[e]; + orient[e] = -1; + while (m < 3 && orient[e] < 0) + e = ne[m++]; + } + if (nv > 2) + return nv; + } + return 0; +} + +struct Segment{ + int nnodes; /* number of nodes (2, 3 or 4) */ +#if AMREX_SPACEDIM==2 + XDim3 node[2]; /* node coordinates */ +#else + XDim3 node[4]; +#endif + XDim3 mv; + Real alpha, vof; + // Constructor to initialize the Segment + Segment(int n, NODE_CUT const& nodes, XDim3 m, Real a, Real f, int ns=0) + : nnodes(n), mv (m), alpha (a), vof(f) { + for (int i = 0; i < n; ++i) + node[i]= nodes[ns==0?i:(i + 3)%(n + 2)]; + } +}; + +static void add_segment (XDim3 const & cell, GpuArray const & dx, + Real alpha, XDim3 const * o, XDim3 const * m, + Vector & segments, int & nt, Real vof) +{ + int d[12]; + /* array of node coordinates for a cut face */ + NODE_CUT nodecutface; + int inode, inode2, jnode_max_sintheta = 0, + nnodecutface = vof_cut_cube_vertices (cell, dx, o, m, nodecutface, d); + AMREX_ASSERT (nnodecutface <= 6); + if (nnodecutface > 3) { /* reorder faces if necessary */ + /* Tecplot can think that opposite vertices of the quadrilateral surface + element are connected. This may result in ugly X-shaped surface elements. + Reorder the array of node if necessary, using bubble sort, + to maximize the sine of the angle between the vector from each + intersection point to the cell center and the vector from this point + to the next point in the array */ + int i_switchnodes = 0; /* counter to avoid infinite loop */ + bool switchnodes = false; /* logical variable used to reorder cut face nodes */ + + do { + i_switchnodes++; + + for (inode = 0; inode < nnodecutface; inode++) { + XDim3 node = nodecutface[inode]; /* face node coordinates */ + XDim3 diff1 = {o->x - node.x, o->y - node.y, o->z - node.z}; + Real length_diff1 = vector_norm (&diff1); + Real max_sintheta = 0.; + /* cycle through all other nodes (jnode) where cut face intersects cell edges */ + for (inode2 = 1; inode2 < nnodecutface; inode2++) { + int jnode = (inode + inode2)%nnodecutface; + XDim3 diff2 = {nodecutface[jnode].x - node.x, + nodecutface[jnode].y - node.y, + nodecutface[jnode].z - node.z}; + Real length_diff2 = vector_norm (&diff2); + if (length_diff2 < 1e-20) /*Hua Tan(11-1-2016)*/ + return; + Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m->x + + (diff1.z*diff2.x - diff1.x*diff2.z)*m->y + + (diff1.x*diff2.y - diff1.y*diff2.x)*m->z)/ + (length_diff1*length_diff2); + + if (sintheta > max_sintheta) { + max_sintheta = sintheta; + jnode_max_sintheta = jnode; + } + } + /* terminate if cannot find positive angle between cut face nodes */ + AMREX_ASSERT (max_sintheta != 0.); + inode2 = (inode + 1)%nnodecutface; + if (jnode_max_sintheta != inode2) { + node = nodecutface[jnode_max_sintheta]; + nodecutface[jnode_max_sintheta] = nodecutface[inode2]; + nodecutface[inode2] = node; + switchnodes = true; + } + } /* inode-loop */ + } while (switchnodes && i_switchnodes < 1000); /* avoid infinite loop */ + } /* reorder faces if necessary */ + // Print()<<"inside add_segment"<z = 0.; + if (alpha <= 0. || alpha >= n.x + n.y) { + p->x = p->y = 0.; + return 0.; + } + + if (n.x < EPS) { + p->x = 0.5; + p->y = m->y < 0. ? 1. - alpha : alpha; + return 1.; + } + + if (n.y < EPS) { + p->y = 0.5; + p->x = m->x < 0. ? 1. - alpha : alpha; + return 1.; + } + + p->x = p->y = 0.; + + if (alpha >= n.x) { + p->x += 1.; + p->y += (alpha - n.x)/n.y; + } + else + p->x += alpha/n.x; + + Real ax = p->x, ay = p->y; + if (alpha >= n.y) { + p->y += 1.; + ay -= 1.; + p->x += (alpha - n.y)/n.x; + ax -= (alpha - n.y)/n.x; + } + else { + p->y += alpha/n.y; + ay -= alpha/n.y; + } + + p->x /= 2.; + p->y /= 2.; + + THRESHOLD (p->x); + THRESHOLD (p->y); + + if (m->x < 0.) + p->x = 1. - p->x; + if (m->y < 0.) + p->y = 1. - p->y; + + return sqrt (ax*ax + ay*ay); + +} + + +/** + * vof_plane_area_center: + * @m: normal to the plane. + * @alpha: plane constant. + * @p: a #amrex::XDim3. + * + * Fills @p with the position of the center of area of the fraction of + * a cubic cell lying under the plane (@m,@alpha). + * + * Returns: the area of the facet. + */ +Real vof_plane_area_center (XDim3 const * m, Real alpha, XDim3 * p) +{ + + if (fabs (m->x) < EPS) { + XDim3 n, q; + n.x = m->y; + n.y = m->z; + Real area = vof_line_area_center (&n, alpha, &q); + p->x = 0.5; + p->y = q.x; + p->z = q.y; + return area; + } + if (fabs (m->y) < EPS) { + XDim3 n, q; + n.x = m->z; + n.y = m->x; + Real area = vof_line_area_center (&n, alpha, &q); + p->x = q.y; + p->y = 0.5; + p->z = q.x; + return area; + } + if (fabs (m->z) < EPS) { + Real area = vof_line_area_center (m, alpha, p); + p->z = 0.5; + return area; + } + + XDim3 n = *m; + if (n.x < 0.) { + alpha -= n.x; + n.x = - n.x; + } + if (n.y < 0.) { + alpha -= n.y; + n.y = - n.y; + } + if (n.z < 0.) { + alpha -= n.z; + n.z = - n.z; + } + + Real amax = n.x + n.y + n.z; + if (alpha <= 0. || alpha >= amax) { + p->x = p->y = p->z = 0.; + return 0.; + } + + Real area = alpha*alpha; + p->x = p->y = p->z = area*alpha; + + Real b = alpha - n.x; + if (b > 0.) { + area -= b*b; + p->x -= b*b*(2.*n.x + alpha); + p->y -= b*b*b; + p->z -= b*b*b; + } + b = alpha - n.y; + if (b > 0.) { + area -= b*b; + p->y -= b*b*(2.*n.y + alpha); + p->x -= b*b*b; + p->z -= b*b*b; + } + b = alpha - n.z; + if (b > 0.) { + area -= b*b; + p->z -= b*b*(2.*n.z + alpha); + p->x -= b*b*b; + p->y -= b*b*b; + } + + amax = alpha - amax; + b = amax + n.x; + if (b > 0.) { + area += b*b; + p->y += b*b*(2.*n.y + alpha - n.z); + p->z += b*b*(2.*n.z + alpha - n.y); + p->x += b*b*b; + } + b = amax + n.y; + if (b > 0.) { + area += b*b; + p->x += b*b*(2.*n.x + alpha - n.z); + p->z += b*b*(2.*n.z + alpha - n.x); + p->y += b*b*b; + } + b = amax + n.z; + if (b > 0.) { + area += b*b; + p->x += b*b*(2.*n.x + alpha - n.y); + p->y += b*b*(2.*n.y + alpha - n.x); + p->z += b*b*b; + } + + area *= 3.; + p->x /= area*n.x; + p->y /= area*n.y; + p->z /= area*n.z; + + THRESHOLD (p->x); + THRESHOLD (p->y); + THRESHOLD (p->z); + + if (m->x < 0.) p->x = 1. - p->x; + if (m->y < 0.) p->y = 1. - p->y; + if (m->z < 0.) p->z = 1. - p->z; + + return area*sqrt (1./(n.x*n.x*n.y*n.y) + 1./(n.x*n.x*n.z*n.z) + 1./(n.z*n.z*n.y*n.y))/6.; +} + + +/** + * vof_plane_alpha: + * + * Returns: the value @alpha such that the volume of a cubic cell + * lying under the plane defined by @m.@x = @alpha is equal to @c. + */ +Real vof_plane_alpha (XDim3 * m, Real c) +{ + + AMREX_ASSERT(c >= 0. && c <= 1.); + AMREX_ASSERT(m != NULL); + Real alpha; + XDim3 n; + + n.x = fabs (m->x); n.y = fabs (m->y); n.z = fabs (m->z); + + Real m1, m2, m3; + m1 = MIN(n.x, n.y); + m3 = MAX(n.x, n.y); + m2 = n.z; + if (m2 < m1) { + Real tmp = m1; + m1 = m2; + m2 = tmp; + } + else if (m2 > m3) { + Real tmp = m3; + m3 = m2; + m2 = tmp; + } + Real m12 = m1 + m2; + Real pr = MAX(6.*m1*m2*m3, 1e-50); + Real V1 = m1*m1*m1/pr; + Real V2 = V1 + (m2 - m1)/(2.*m3), V3; + Real mm; + if (m3 < m12) { + mm = m3; + V3 = (m3*m3*(3.*m12 - m3) + m1*m1*(m1 - 3.*m3) + m2*m2*(m2 - 3.*m3))/pr; + } + else { + mm = m12; + V3 = mm/(2.*m3); + } + + Real ch = MIN(c, 1. - c); + if (ch < V1) + alpha = pow (pr*ch, 1./3.); + else if (ch < V2) + alpha = (m1 + sqrt(m1*m1 + 8.*m2*m3*(ch - V1)))/2.; + else if (ch < V3) { + Real p = 2.*m1*m2; + Real q = 3.*m1*m2*(m12 - 2.*m3*ch)/2.; + Real p12 = sqrt (p); + Real teta = acos(q/(p*p12))/3.; + Real cs = cos(teta); + alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + m12; + } + else if (m12 < m3) + alpha = m3*ch + mm/2.; + else { + Real p = m1*(m2 + m3) + m2*m3 - 1./4.; + Real q = 3.*m1*m2*m3*(1./2. - ch)/2.; + Real p12 = sqrt(p); + Real teta = acos(q/(p*p12))/3.; + Real cs = cos(teta); + alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + 1./2.; + } + if (c > 1./2.) alpha = 1. - alpha; + + if (m->x < 0.) + alpha += m->x; + if (m->y < 0.) + alpha += m->y; + if (m->z < 0.) + alpha += m->z; + + return alpha; +} + +#if AMREX_SPACEDIM == 2 +#include "myc2D.h" +//# define F(x,y,z) f[x][y] +#else +#include "myc.h" +//# define F(x,y,z) f[x][y][z] +#endif + +void stencil (AMREX_D_DECL(int const i, int const j, int const k), + Array4 const & v, Real F(3,3,3)) +{ + int x, y, z = 0; + F(1,1,1) = v (AMREX_D_DECL(i,j,k)); +#if AMREX_SPACEDIM == 3 + for (z = -1; z <= 1; z++) +#endif + for (x = -1; x <= 1; x++) + for (y = -1; y <= 1; y++) + if (x != 0 || y != 0 || z != 0) + F(x + 1, y + 1, z + 1) = v(AMREX_D_DECL(i+x,j+y,k+z)); + /* boundary conditions (symmetry) */ +#if AMREX_SPACEDIM == 2 + for (x = 0; x <= 2; x++) { + if (f[x][0] < 0.) f[x][0] = f[x][1]; + if (f[x][2] < 0.) f[x][2] = f[x][1]; + } + for (y = 0; y <= 2; y++) { + if (f[0][y] < 0.) f[0][y] = f[1][y]; + if (f[2][y] < 0.) f[2][y] = f[1][y]; + } +#else /* 3D */ + for (x = 0; x <= 2; x++) + for (y = 0; y <= 2; y++) { + if (f[x][y][0] < 0.) f[x][y][0] = f[x][y][1]; + if (f[x][y][2] < 0.) f[x][y][2] = f[x][y][1]; + } + for (x = 0; x <= 2; x++) + for (z = 0; z <= 2; z++) { + if (f[x][0][z] < 0.) f[x][0][z] = f[x][1][z]; + if (f[x][2][z] < 0.) f[x][2][z] = f[x][1][z]; + } + for (z = 0; z <= 2; z++) + for (y = 0; y <= 2; y++) { + if (f[0][y][z] < 0.) f[0][y][z] = f[1][y][z]; + if (f[2][y][z] < 0.) f[2][y][z] = f[1][y][z]; + } +#endif /* 3D */ +} + +void +VolumeOfFluid::tracer_vof_update(Vector const& tracer) +{ + for (int lev = 0; lev <= finest_level; ++lev) { + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + + auto& vof_mf = tracer[lev]; + + for (MFIter mfi(*vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& vof = vof_mf->array(mfi); + Array4 const& mv = normal[lev].array(mfi); + Array4 const& al = alpha[lev].array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + auto fvol = vof(i,j,k,0); + THRESHOLD(fvol); + if (CELL_IS_FULL(fvol)) { + AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); + al(i,j,k) = fvol; + } + else { + Real F(3,3,3); + XDim3 m; + stencil (AMREX_D_DECL(i,j,k), vof, f); + mycs (f, &m.x); + Real n = 0.; + for (int d = 0; d < AMREX_SPACEDIM; d++) + n += fabs ((&m.x)[d]); + if (n > 0.) + for (int d = 0; d < AMREX_SPACEDIM; d++) + mv(i,j,k,d)= (&m.x)[d]/n; + else {/* fixme: this is a small fragment */ + AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); + } + for (int d = 0; d < AMREX_SPACEDIM; d++) + (&m.x)[d]= mv(i,j,k,d); + al(i,j,k)= vof_plane_alpha (&m, fvol); + + //if (std::fabs(mv(i,j,k,1)) > 2) + // Print() << " normal direction " << m[0]<<" "< const& tracer, + AMREX_D_DECL(Vector const& u_mac, + Vector const& v_mac, + Vector const& w_mac), + Real dt) +{ + + amrex::Print() << " VOF Level#" << finest_level<<"\n"; + tracer_vof_update(tracer); +} +//////////////////////////////////////////////////////////////////// +////// Initialize the VOF value using the implicit surface function +///////////////////////////////////////////////////////////////////// +void +VolumeOfFluid::tracer_vof_init_fraction(Vector const& tracer) +{ + + +} + + +/////////////////////////////////////////////////////////////////////////////////////////////// +///////// +//////// output results in tecplot format +//////// +/////////////////////////////////////////////////////////////////////////////////////////////// +void +VolumeOfFluid::write_tecplot_surface(Real time, int nstep) +{ + + int myproc = ParallelDescriptor::MyProc(); + int nprocs = ParallelDescriptor::NProcs(); + amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; + const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+ + (nprocs>1?("_"+ std::to_string(myproc)+".dat") : ".dat"); + +// Print()<<"surface_plot"<< nstep<<" "<< tecplotfilename<<"\n"; + std::ofstream TecplotFile; + TecplotFile.open(tecplotfilename.c_str(), std::ios::out); + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<"\n"; + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Box const& domain = v_incflo->geom[lev].Domain(); + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab + int nb = ba.size(); + const DistributionMapping& dm = ld.tracer.DistributionMap(); + + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + + for (MFIter mfi(ld.tracer); mfi.isValid(); ++mfi) { + Box const& bx = mfi.validbox(); + const auto lo = lbound(bx); + const auto hi = ubound(bx); + Array4 const& vof = ld.tracer.const_array(mfi); + Array4 const& mv = normal[lev].array(mfi); + Array4 const& al = alpha[lev].array(mfi); + Vector segments; + int totalnodes = 0; + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + auto fvol = vof(i,j,k,0); + + if (!CELL_IS_FULL(fvol)){ + Real alpha; + XDim3 m, p, cell; + for (int d = 0; d < AMREX_SPACEDIM; d++) { + (&m.x)[d]= mv(i,j,k,d); + } + alpha= al(i,j,k,0); + vof_plane_area_center(&m, alpha, &p); + /* convert the coord. of the center to the global sys*/ + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); + (&cell.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); + } + add_segment (cell, dx, alpha, &p, &m, segments, totalnodes, fvol); + + //Print() << " normal direction " <<"("<1?("_"+ std::to_string(myproc)+".dat") : ".dat"); + + + std::ofstream TecplotFile; + TecplotFile.open(tecplotfilename.c_str(), std::ios::out); + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<"\n"; + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Box const& domain = v_incflo->geom[lev].Domain(); + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + auto const& ijk_min= domain.smallEnd(); + auto const& ijk_max= domain.bigEnd(); + const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab + int nb = ba.size(); + const DistributionMapping& dm = ld.tracer.DistributionMap(); + std::string IJK = "IJK"; + // amrex::Print() << " process#" << myproc<<" " << ld.tracer.nGrow()<<" " << nb<<"\n"; +//amrex::Print() << " process#" << myproc<<" " << (IJK[0]+std::string("= "))<<"\n"; + //amrex::Print() << " process#" << myproc<<" " << dm.size()<<"\n"; + //Output data for each box in boxarray according to Tecplot data format +// for (int ibox = 0; ibox const& tracer = ld.tracer.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + + int nn=0; + //write coordinate variables + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z +1; ++k) { + for (int j = lo.y; j <= hi.y +1; ++j) { + for (int i = lo.x; i <= hi.x +1; ++i) { + TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << tracer(i,j,k,0)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + + //write variables of the normal direction of the interface + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << mv(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + + + TecplotFile <<"\n"; + } // end MFIter + +// }// end box +// +// +// } + } // end lev + + + + + + TecplotFile.close(); + + +} diff --git a/src/vof/incflo_vof.cpp b/src/vof/incflo_vof.cpp new file mode 100644 index 000000000..fa48908dc --- /dev/null +++ b/src/vof/incflo_vof.cpp @@ -0,0 +1,23 @@ +#include +#include + +using namespace amrex; + +void +incflo::tracer_vof_advection(Vector const& tracer, + AMREX_D_DECL(Vector const& u_mac, + Vector const& v_mac, + Vector const& w_mac)) +{ + get_volume_of_fluid()->tracer_vof_advection(tracer, + AMREX_D_DECL(u_mac,v_mac,w_mac), m_dt); +} + + + +VolumeOfFluid* +incflo::get_volume_of_fluid () +{ + if (!p_volume_of_fluid) p_volume_of_fluid = std::make_unique(this); + return p_volume_of_fluid.get(); +} diff --git a/test_3d/GNUmakefile b/test_3d/GNUmakefile index df7e424ea..44a90ac0d 100644 --- a/test_3d/GNUmakefile +++ b/test_3d/GNUmakefile @@ -13,6 +13,10 @@ TINY_PROFILE = FALSE DEBUG = TRUE DEBUG = FALSE +TEST=TRUE +USE_ASSERTION=TRUE +BOUND_CHECK=FALSE + COMP = gnu USE_MPI = TRUE diff --git a/test_3d/benchmark.lid_driven_cavity b/test_3d/benchmark.lid_driven_cavity index 0bf2d135c..4f63a6fe1 100644 --- a/test_3d/benchmark.lid_driven_cavity +++ b/test_3d/benchmark.lid_driven_cavity @@ -32,6 +32,7 @@ incflo.mu = 1000. # Dynamic viscosity coefficient #.......................................# amr.n_cell = 128 128 8 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy +amr.max_grid_size = 64 64 8 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # @@ -56,7 +57,7 @@ incflo.steady_state_tol = 1.e-5 # Tolerance for steady-state # VERBOSITY # #.......................................# incflo.verbose = 2 # incflo_level -mac_proj.verbose = 0 # MAC Projector -nodal_proj.verbose = 0 # Nodal Projector +mac_proj.verbose = 2 # MAC Projector +nodal_proj.verbose = 2 # Nodal Projector amr.plt_ccse_regtest = 1 From 35b3fc2c922ec07e2666ee4136e4a552a8381407 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Thu, 20 Jun 2024 14:13:30 -0700 Subject: [PATCH 02/29] add missing files --- src/vof/myc.h | 149 +++++++++++++++++++++++++++++++++++++++++ src/vof/myc2d.h | 66 ++++++++++++++++++ test_3d/inputs.droplet | 63 +++++++++++++++++ 3 files changed, 278 insertions(+) create mode 100644 src/vof/myc.h create mode 100644 src/vof/myc2d.h create mode 100644 test_3d/inputs.droplet diff --git a/src/vof/myc.h b/src/vof/myc.h new file mode 100644 index 000000000..ea4b317e0 --- /dev/null +++ b/src/vof/myc.h @@ -0,0 +1,149 @@ +#define NOT_ZERO 1.e-30 + +/*-----------------------------------------------------* + *MYC - Mixed Youngs and Central Scheme * + *-----------------------------------------------------*/ +/* + +Known problems: the index [1][1][1], i.e. the central cell +in the block, never occurs: neither in the central scheme +nor in Youngs' method. Therefore an isolated droplet will have +a normal with all components to zero. I took care of the +division-by-zero issue, but not of this one. + +Ruben + +*/ +static void mycs(double c[3][3][3],double mxyz[3]) +{ + double m1,m2,m[4][3],t0,t1,t2; + int cn; + + /* write the plane as: sgn(mx) X = my Y + mz Z + alpha + m00 X = m01 Y + m02 Z + alpha */ + m1 = c[0][1][0] + c[0][1][2] + c[0][0][1] + c[0][2][1] + + c[0][1][1]; + m2 = c[2][1][0] + c[2][1][2] + c[2][0][1] + c[2][2][1] + + c[2][1][1]; + m[0][0] = m1 > m2 ? 1. : -1.; + + m1 = c[0][0][1]+ c[2][0][1]+ c[1][0][1]; + m2 = c[0][2][1]+ c[2][2][1]+ c[1][2][1]; + m[0][1] = 0.5*(m1-m2); + + m1 = c[0][1][0]+ c[2][1][0]+ c[1][1][0]; + m2 = c[0][1][2]+ c[2][1][2]+ c[1][1][2]; + m[0][2] = 0.5*(m1-m2); + + /* write the plane as: sgn(my) Y = mx X + mz Z + alpha + m11 Y = m10 X + m12 Z + alpha */ + m1 = c[0][0][1] + c[0][2][1] + c[0][1][1]; + m2 = c[2][0][1] + c[2][2][1] + c[2][1][1]; + m[1][0] = 0.5*(m1-m2); + + m1 = c[1][0][0] + c[1][0][2] + c[2][0][1] + c[0][0][1] + + c[1][0][1]; + m2 = c[1][2][0] + c[1][2][2] + c[2][2][1] + c[0][2][1] + + c[1][2][1]; + m[1][1] = m1 > m2 ? 1. : -1.; + + m1 = c[1][0][0]+ c[1][1][0]+ c[1][2][0]; + m2 = c[1][0][2]+ c[1][1][2]+ c[1][2][2]; + m[1][2] = 0.5*(m1-m2); + + /* write the plane as: sgn(mz) Z = mx X + my Y + alpha + m22 Z = m20 X + m21 Y + alpha */ + + m1 = c[0][1][0]+ c[0][1][2]+ c[0][1][1]; + m2 = c[2][1][0]+ c[2][1][2]+ c[2][1][1]; + m[2][0] = 0.5*(m1-m2); + + m1 = c[1][0][0]+ c[1][0][2]+ c[1][0][1]; + m2 = c[1][2][0]+ c[1][2][2]+ c[1][2][1]; + m[2][1] = 0.5*(m1-m2); + + m1 = c[0][1][0] + c[2][1][0] + c[1][0][0] + c[1][2][0] + + c[1][1][0]; + m2 = c[0][1][2] + c[2][1][2] + c[1][0][2] + c[1][2][2] + + c[1][1][2]; + m[2][2] = m1 > m2 ? 1. : -1.; + + /* normalize each set (mx,my,mz): |mx|+|my|+|mz| = 1 */ + t0 = fabs(m[0][0]) + fabs(m[0][1]) + fabs(m[0][2]); + m[0][0] /= t0; + m[0][1] /= t0; + m[0][2] /= t0; + + t0 = fabs(m[1][0]) + fabs(m[1][1]) + fabs(m[1][2]); + m[1][0] /= t0; + m[1][1] /= t0; + m[1][2] /= t0; + + t0 = fabs(m[2][0]) + fabs(m[2][1]) + fabs(m[2][2]); + m[2][0] /= t0; + m[2][1] /= t0; + m[2][2] /= t0; + + /* choose among the three central scheme */ + t0 = fabs(m[0][0]); + t1 = fabs(m[1][1]); + t2 = fabs(m[2][2]); + + cn = 0; + if (t1 > t0) { + t0 = t1; + cn = 1; + } + if (t2 > t0) + cn = 2; + + /* Youngs-CIAM scheme */ + m1 = c[0][0][0] + c[0][2][0] + c[0][0][2] + c[0][2][2] + + 2.*(c[0][0][1] + c[0][2][1] + c[0][1][0] + c[0][1][2]) + + 4.*c[0][1][1]; + m2 = c[2][0][0] + c[2][2][0] + c[2][0][2] + c[2][2][2] + + 2.*(c[2][0][1] + c[2][2][1] + c[2][1][0] + c[2][1][2]) + + 4.*c[2][1][1]; + m[3][0] = m1-m2; + + m1 = c[0][0][0] + c[0][0][2] + c[2][0][0] + c[2][0][2] + + 2.*( c[0][0][1] + c[2][0][1] + c[1][0][0] + c[1][0][2]) + + 4.*c[1][0][1]; + m2 = c[0][2][0] + c[0][2][2] + c[2][2][0] + c[2][2][2] + + 2.*(c[0][2][1] + c[2][2][1] + c[1][2][0] + c[1][2][2]) + + 4.*c[1][2][1]; + m[3][1] = m1-m2; + + m1 = c[0][0][0] + c[0][2][0] + c[2][0][0] + c[2][2][0] + + 2.*(c[0][1][0] + c[2][1][0] + c[1][0][0] + c[1][2][0]) + + 4.*c[1][1][0]; + m2 = c[0][0][2] + c[0][2][2] + c[2][0][2] + c[2][2][2] + + 2.*(c[0][1][2] + c[2][1][2] + c[1][0][2] + c[1][2][2]) + + 4.*c[1][1][2]; + m[3][2] = m1-m2; + + /* normalize the set (mx,my,mz): |mx|+|my|+|mz| = 1 */ + t0 = fabs(m[3][0]) + fabs(m[3][1]) + fabs(m[3][2]) + NOT_ZERO; + m[3][0] /= t0; + m[3][1] /= t0; + m[3][2] /= t0; + + /* choose between the previous choice and Youngs-CIAM */ + t0 = fabs (m[3][0]); + t1 = fabs (m[3][1]); + t2 = fabs (m[3][2]); + if (t1 > t0) + t0 = t1; + if (t2 > t0) + t0 = t2; + + if (fabs(m[cn][cn]) > t0) + cn = 3; + + /* components of the normal vector */ + mxyz[0] = m[cn][0]; + mxyz[1] = m[cn][1]; + mxyz[2] = m[cn][2]; + + return; +} diff --git a/src/vof/myc2d.h b/src/vof/myc2d.h new file mode 100644 index 000000000..7caf5402b --- /dev/null +++ b/src/vof/myc2d.h @@ -0,0 +1,66 @@ +#define NOT_ZERO 1.e-30 + +/*-----------------------------------------------------* + *MYC - Mixed Youngs and Central Scheme (2D) * + *-----------------------------------------------------*/ +static void mycs(double c[3][3],double mxy[2]) +{ + int ix; + double c_t,c_b,c_r,c_l; + double mx0,my0,mx1,my1,mm1,mm2; + + /* top, bottom, right and left sums of c values */ + c_t = c[0][2] + c[1][2] + c[2][2]; + c_b = c[0][0] + c[1][0] + c[2][0]; + c_r = c[2][0] + c[2][1] + c[2][2]; + c_l = c[0][0] + c[0][1] + c[0][2]; + + /* consider two lines: sgn(my) Y = mx0 X + alpha, + and: sgn(mx) X = my0 Y + alpha */ + mx0 = 0.5*(c_l-c_r); + my0 = 0.5*(c_b-c_t); + + /* minimum coefficient between mx0 and my0 wins */ + if (fabs(mx0) <= fabs(my0)) { + my0 = my0 > 0. ? 1. : -1.; + ix = 1; + } + else { + mx0 = mx0 > 0. ? 1. : -1.; + ix = 0; + } + + /* Youngs' normal to the interface */ + mm1 = c[0][0] + 2.0*c[0][1] + c[0][2]; + mm2 = c[2][0] + 2.0*c[2][1] + c[2][2]; + mx1 = mm1 - mm2; + mm1 = c[0][0] + 2.0*c[1][0] + c[2][0]; + mm2 = c[0][2] + 2.0*c[1][2] + c[2][2]; + my1 = mm1 - mm2; + + /* choose between the best central and Youngs' scheme */ + if (ix) { + mm1 = fabs(my1) + NOT_ZERO; + mm1 = fabs(mx1)/mm1; + if (mm1 > fabs(mx0)) { + mx0 = mx1; + my0 = my1; + } + } + else { + mm1 = fabs(mx1) + NOT_ZERO; + mm1 = fabs(my1)/mm1; + if (mm1 > fabs(my0)) { + mx0 = mx1; + my0 = my1; + } + } + + /* normalize the set (mx0,my0): |mx0|+|my0|=1 and + write the two components of the normal vector */ + mm1 = fabs(mx0) + fabs(my0) + NOT_ZERO; + mxy[0] = mx0/mm1; + mxy[1] = my0/mm1; + + return; +} diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet new file mode 100644 index 000000000..38f73c3b1 --- /dev/null +++ b/test_3d/inputs.droplet @@ -0,0 +1,63 @@ +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# SIMULATION STOP # +#.......................................# +stop_time = -1. # Max (simulated) time to evolve +max_step = 1 # Max number of time steps +steady_state = 0 # Steady-state solver? + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# TIME STEP COMPUTATION # +#.......................................# +#incflo.fixed_dt = 1.0e-7 # Use this constant dt if > 0 +incflo.cfl = 0.45 # CFL factor + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INPUT AND OUTPUT # +#.......................................# +amr.plot_int = 1 # Steps between plot files +amr.check_int = 1000 # Steps between checkpoint files +amr.restart = "" # Checkpoint to restart from + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# PHYSICS # +#.......................................# +incflo.gravity = 0. 0. 0. # Gravitational force (3D) +incflo.ro_0 = 1.0 # Reference density + +incflo.fluid_model = "newtonian" # Fluid model (rheology) +incflo.mu = 1.0 # Dynamic viscosity coefficient + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# ADAPTIVE MESH REFINEMENT # +#.......................................# +amr.n_cell = 64 64 64 # Grid cells at coarsest AMRlevel +amr.max_level = 0 # Max AMR level in hierarchy +amr.max_grid_size = 32 32 32 + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# GEOMETRY # +#.......................................# +geometry.prob_lo = 0. 0. 0. # Lo corner coordinates +geometry.prob_hi = 1. 1. 1. # Hi corner coordinates +geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) + + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INITIAL CONDITIONS # +#.......................................# +incflo.probtype = 1109 # + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# NUMERICAL PARAMETERS # +#.......................................# +incflo.steady_state_tol = 1.e-5 # Tolerance for steady-state +amrex.fpe_trap_invalid = 1 # Trap NaNs + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# VERBOSITY # +#.......................................# +incflo.verbose = 2 # incflo_level + +amrex.fpe_trap_invalid=1 +amrex.fpe_trap_overflow=1 +amrex.fpe_trap_zero=1 From 547d70d3b95e00fe8ace052ef0a47a1509f29745 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Thu, 20 Jun 2024 15:28:16 -0700 Subject: [PATCH 03/29] use eb to build tracer (#1) --- src/prob/prob_init_fluid.cpp | 53 +- src/vof/VolumeOfFluid.H | 82 +- src/vof/VolumeOfFluid.cpp | 1862 ++++++++++++++++++---------------- 3 files changed, 1013 insertions(+), 984 deletions(-) diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 17e17558d..2850c75b3 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -187,18 +187,16 @@ void incflo::prob_init_fluid (int lev) } else if (1109 == m_probtype) { - droplet (vbx, gbx, - ld.velocity.array(mfi), - ld.density.array(mfi), - ld.tracer.array(mfi), - domain, dx, problo, probhi); - } else { amrex::Abort("prob_init_fluid: unknown m_probtype"); }; } + + if (1109 == m_probtype) { + tracer_vof_init_fraction(lev, ld.tracer, this); + } } void incflo::init_rotating_flow (Box const& vbx, Box const& /*gbx*/, @@ -1102,46 +1100,3 @@ void incflo::init_burggraf (Box const& vbx, Box const& /*gbx*/, #endif }); } - -void incflo::droplet (Box const& vbx, Box const& /*gbx*/, - Array4 const& vel, - Array4 const& /*density*/, - Array4 const& tracer, - Box const& /*domain*/, - GpuArray const& dx, - GpuArray const& problo, - GpuArray const& probhi) -{ - amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Real x = problo[0] + Real(i+0.5)*dx[0]; - Real y = problo[1] + Real(j+0.5)*dx[1]; - Real z = problo[2] + Real(k+0.5)*dx[2]; - - Real r = std::sqrt(x*x + y*y + z*z); - - Real rad = 5.0*dx[0]; - Real dia = 10.0*dx[0]; - - Real cenx = 0.5*(problo[0] + probhi[0]); - Real ceny = 0.5*(problo[1] + probhi[1]); - Real cenz = 0.5*(problo[2] + probhi[2]); - - Real xs = x - cenx; - Real ys = y - ceny; - Real zs = z - cenz; - - Real rs = (std::sqrt(xs*xs + ys*ys + zs*zs) - rad)/std::sqrt(dx[0]*dx[0] + dx[1]*dx[1] + dx[2]*dx[2]); - - if (rs > 0.5) tracer(i,j,k) = 0.0; - else if (rs < -.5) tracer(i,j,k) = 1.0; - else tracer(i,j,k) = 0.5-rs; - - // clockwise rotation with flow decreasing to 0 at cylinder boundary - vel(i,j,k,0) = Real(0.0); - vel(i,j,k,1) = Real(0.0); -#if (AMREX_SPACEDIM == 3) - vel(i,j,k,2) = Real(0.0); -#endif - }); -} diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index 8a07b8b02..e871702c6 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -1,40 +1,42 @@ -//struct TracerVOF { -// GfsVariableTracer parent; -// -// GfsVariable * m[FTT_DIMENSION], * alpha; -//}; -// Header file (VolumeOfFluid class) -#ifndef INCFLO_VOF_ -#define INCFLO_VOF_ -class incflo; - -class VolumeOfFluid -{ -public: - VolumeOfFluid (incflo* a_incflo); - void tracer_vof_advection(amrex::Vector const& tracer, - AMREX_D_DECL(amrex::Vector const& u_mac, - amrex::Vector const& v_mac, - amrex::Vector const& w_mac), - amrex::Real dt); - void tracer_vof_init_fraction(amrex::Vector const& tracer); - void write_tecplot_surface(amrex::Real time, int nstep); - void WriteTecPlotFile (amrex::Real time, int nstep); - -// normal vector of interface - amrex::Vector normal; -// the plane defined by @m.@x = @alpha - amrex::Vector alpha; -private: -incflo* v_incflo; //incflo object -int finest_level; -#if AMREX_SPACEDIM == 2 -# define F(x,y,z) f[x][y] -#else -# define F(x,y,z) f[x][y][z] -#endif - -void tracer_vof_update(amrex::Vector const& tracer); -}; - -#endif +//struct TracerVOF { +// GfsVariableTracer parent; +// +// GfsVariable * m[FTT_DIMENSION], * alpha; +//}; +// Header file (VolumeOfFluid class) +#ifndef INCFLO_VOF_ +#define INCFLO_VOF_ +class incflo; + +class VolumeOfFluid +{ +public: + VolumeOfFluid (incflo* a_incflo); + void tracer_vof_advection(amrex::Vector const& tracer, + AMREX_D_DECL(amrex::Vector const& u_mac, + amrex::Vector const& v_mac, + amrex::Vector const& w_mac), + amrex::Real dt); + void write_tecplot_surface(amrex::Real time, int nstep); + void WriteTecPlotFile (amrex::Real time, int nstep); + +// normal vector of interface + amrex::Vector normal; +// the plane defined by @m.@x = @alpha + amrex::Vector alpha; +private: +incflo* v_incflo; //incflo object +int finest_level; +#if AMREX_SPACEDIM == 2 +# define F(x,y,z) f[x][y] +#else +# define F(x,y,z) f[x][y][z] +#endif + +void tracer_vof_update(amrex::Vector const& tracer); + +}; + +void tracer_vof_init_fraction(int lev, amrex::MultiFab& a_tracer, incflo const* a_incflo); + +#endif diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 1a5f4d849..4c93fc7d7 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -1,895 +1,967 @@ -#include -#include -#include - -using namespace amrex; -#define EPS 1e-4 -#define THRESHOLD(c) {if ((c) < 0.) c = 0.; else if ((c) > 1.) c = 1.;} -#define CELL_IS_FULL(f) ((f) == 0. || (f) == 1.) -#define MIN(a,b) ((a) < (b) ? (a) : (b)) -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) - -VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) -{ - finest_level = v_incflo->finestLevel(); - // ************************************************************************************* - // Allocate space for the information of the interface segments - // ************************************************************************************* - for (int lev = 0; lev <= finest_level; ++lev){ - normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, 1, MFInfo(), v_incflo->Factory(lev)); - alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, 1, MFInfo(), v_incflo->Factory(lev)); - } - - -} -static XDim3 edge[12][2] = { - {{0.,0.,0.},{1.,0.,0.}},{{0.,0.,1.},{1.,0.,1.}},{{0.,1.,1.},{1.,1.,1.}},{{0.,1.,0.},{1.,1.,0.}}, - {{0.,0.,0.},{0.,1.,0.}},{{0.,0.,1.},{0.,1.,1.}},{{1.,0.,1.},{1.,1.,1.}},{{1.,0.,0.},{1.,1.,0.}}, - {{0.,0.,0.},{0.,0.,1.}},{{1.,0.,0.},{1.,0.,1.}},{{1.,1.,0.},{1.,1.,1.}},{{0.,1.,0.},{0.,1.,1.}} -}; -/* first index is the edge number, second index is the edge orientation - (0 or 1), third index are the edges which this edge may connect to - in order and the corresponding face direction */ -static int connect[12][2][4] = { - {{9, 1, 8, 3}, {4, 3, 7, 5}}, /* 0 */ - {{6, 2, 5, 4}, {8, 0, 9, 3}}, /* 1 */ - {{10, 3, 11, 2}, {5, 1, 6, 4}}, /* 2 */ - {{7, 0, 4, 5}, {11, 2, 10, 2}}, /* 3 */ - {{3, 7, 0, 5}, {8, 5, 11, 1}}, /* 4 */ - {{11, 4, 8, 1}, {1, 6, 2, 4}}, /* 5 */ - {{2, 5, 1, 4}, {9, 7, 10, 1}}, /* 6 */ - {{10, 6, 9, 1}, {0, 4, 3, 5}}, /* 7 */ - {{5, 11, 4, 1}, {0, 9, 1, 3}}, /* 8 */ - {{1, 8, 0, 3}, {7, 10, 6, 1}}, /* 9 */ - {{6, 9, 7, 1}, {3, 11, 2, 2}}, /* 10 */ - {{2, 10, 3, 2}, {4, 8, 5, 1}} /* 11 */ -}; - -static void cube_plane_intersection (XDim3 cell, GpuArray dx, - XDim3 const * O, XDim3 const * n, XDim3 p[12], - int orient[12]) -{ - XDim3 o; - int i; - for (i=0; ix*(e.x - d.x) + n->y*(e.y - d.y) + n->z*(e.z - d.z); - orient[i] = -1; - if (fabs (den) > 1e-10) { - Real t = (n->x*(O->x - d.x) + n->y*(O->y - d.y) + n->z*(O->z - d.z))/den; - if (t >= 0. && t < 1.) { - p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); - orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); - } - } - } -} -using NODE_CUT=Array; -/** - * vof_cut_cube_vertices: - * @cell: a #FttCell. - * @p: a point on the plane. - * @n: the normal to the plane. - * @v: where to return the vertices coordinates. - * @d: where to return the direction. - * - * Fills @v, @d and @val with the coordinates/values of the vertices, - * intersections of @cell with the plane defined by @p and @n. - * - * The vertices are ordered consistently to define a consistent, - * oriented polygon. - * - * Returns: the number of vertices (0 if the plane does not cut the cell). - */ -static int vof_cut_cube_vertices (XDim3 cell, GpuArray dx, - XDim3 const * p, XDim3 const * n, - NODE_CUT & v, int d[12]) -{ - XDim3 a[12]; - int orient[12]; - int i; - - AMREX_ASSERT (p != NULL); - - - - cube_plane_intersection (cell, dx, p, n, a, orient); - for (i = 0; i < 12; i++) { - int nv = 0, e = i; - while (orient[e] >= 0) { - int m = 0, * ne = connect[e][orient[e]]; - d[nv] = ne[3]; - v[nv++] = a[e]; - orient[e] = -1; - while (m < 3 && orient[e] < 0) - e = ne[m++]; - } - if (nv > 2) - return nv; - } - return 0; -} - -struct Segment{ - int nnodes; /* number of nodes (2, 3 or 4) */ -#if AMREX_SPACEDIM==2 - XDim3 node[2]; /* node coordinates */ -#else - XDim3 node[4]; -#endif - XDim3 mv; - Real alpha, vof; - // Constructor to initialize the Segment - Segment(int n, NODE_CUT const& nodes, XDim3 m, Real a, Real f, int ns=0) - : nnodes(n), mv (m), alpha (a), vof(f) { - for (int i = 0; i < n; ++i) - node[i]= nodes[ns==0?i:(i + 3)%(n + 2)]; - } -}; - -static void add_segment (XDim3 const & cell, GpuArray const & dx, - Real alpha, XDim3 const * o, XDim3 const * m, - Vector & segments, int & nt, Real vof) -{ - int d[12]; - /* array of node coordinates for a cut face */ - NODE_CUT nodecutface; - int inode, inode2, jnode_max_sintheta = 0, - nnodecutface = vof_cut_cube_vertices (cell, dx, o, m, nodecutface, d); - AMREX_ASSERT (nnodecutface <= 6); - if (nnodecutface > 3) { /* reorder faces if necessary */ - /* Tecplot can think that opposite vertices of the quadrilateral surface - element are connected. This may result in ugly X-shaped surface elements. - Reorder the array of node if necessary, using bubble sort, - to maximize the sine of the angle between the vector from each - intersection point to the cell center and the vector from this point - to the next point in the array */ - int i_switchnodes = 0; /* counter to avoid infinite loop */ - bool switchnodes = false; /* logical variable used to reorder cut face nodes */ - - do { - i_switchnodes++; - - for (inode = 0; inode < nnodecutface; inode++) { - XDim3 node = nodecutface[inode]; /* face node coordinates */ - XDim3 diff1 = {o->x - node.x, o->y - node.y, o->z - node.z}; - Real length_diff1 = vector_norm (&diff1); - Real max_sintheta = 0.; - /* cycle through all other nodes (jnode) where cut face intersects cell edges */ - for (inode2 = 1; inode2 < nnodecutface; inode2++) { - int jnode = (inode + inode2)%nnodecutface; - XDim3 diff2 = {nodecutface[jnode].x - node.x, - nodecutface[jnode].y - node.y, - nodecutface[jnode].z - node.z}; - Real length_diff2 = vector_norm (&diff2); - if (length_diff2 < 1e-20) /*Hua Tan(11-1-2016)*/ - return; - Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m->x + - (diff1.z*diff2.x - diff1.x*diff2.z)*m->y + - (diff1.x*diff2.y - diff1.y*diff2.x)*m->z)/ - (length_diff1*length_diff2); - - if (sintheta > max_sintheta) { - max_sintheta = sintheta; - jnode_max_sintheta = jnode; - } - } - /* terminate if cannot find positive angle between cut face nodes */ - AMREX_ASSERT (max_sintheta != 0.); - inode2 = (inode + 1)%nnodecutface; - if (jnode_max_sintheta != inode2) { - node = nodecutface[jnode_max_sintheta]; - nodecutface[jnode_max_sintheta] = nodecutface[inode2]; - nodecutface[inode2] = node; - switchnodes = true; - } - } /* inode-loop */ - } while (switchnodes && i_switchnodes < 1000); /* avoid infinite loop */ - } /* reorder faces if necessary */ - // Print()<<"inside add_segment"<z = 0.; - if (alpha <= 0. || alpha >= n.x + n.y) { - p->x = p->y = 0.; - return 0.; - } - - if (n.x < EPS) { - p->x = 0.5; - p->y = m->y < 0. ? 1. - alpha : alpha; - return 1.; - } - - if (n.y < EPS) { - p->y = 0.5; - p->x = m->x < 0. ? 1. - alpha : alpha; - return 1.; - } - - p->x = p->y = 0.; - - if (alpha >= n.x) { - p->x += 1.; - p->y += (alpha - n.x)/n.y; - } - else - p->x += alpha/n.x; - - Real ax = p->x, ay = p->y; - if (alpha >= n.y) { - p->y += 1.; - ay -= 1.; - p->x += (alpha - n.y)/n.x; - ax -= (alpha - n.y)/n.x; - } - else { - p->y += alpha/n.y; - ay -= alpha/n.y; - } - - p->x /= 2.; - p->y /= 2.; - - THRESHOLD (p->x); - THRESHOLD (p->y); - - if (m->x < 0.) - p->x = 1. - p->x; - if (m->y < 0.) - p->y = 1. - p->y; - - return sqrt (ax*ax + ay*ay); - -} - - -/** - * vof_plane_area_center: - * @m: normal to the plane. - * @alpha: plane constant. - * @p: a #amrex::XDim3. - * - * Fills @p with the position of the center of area of the fraction of - * a cubic cell lying under the plane (@m,@alpha). - * - * Returns: the area of the facet. - */ -Real vof_plane_area_center (XDim3 const * m, Real alpha, XDim3 * p) -{ - - if (fabs (m->x) < EPS) { - XDim3 n, q; - n.x = m->y; - n.y = m->z; - Real area = vof_line_area_center (&n, alpha, &q); - p->x = 0.5; - p->y = q.x; - p->z = q.y; - return area; - } - if (fabs (m->y) < EPS) { - XDim3 n, q; - n.x = m->z; - n.y = m->x; - Real area = vof_line_area_center (&n, alpha, &q); - p->x = q.y; - p->y = 0.5; - p->z = q.x; - return area; - } - if (fabs (m->z) < EPS) { - Real area = vof_line_area_center (m, alpha, p); - p->z = 0.5; - return area; - } - - XDim3 n = *m; - if (n.x < 0.) { - alpha -= n.x; - n.x = - n.x; - } - if (n.y < 0.) { - alpha -= n.y; - n.y = - n.y; - } - if (n.z < 0.) { - alpha -= n.z; - n.z = - n.z; - } - - Real amax = n.x + n.y + n.z; - if (alpha <= 0. || alpha >= amax) { - p->x = p->y = p->z = 0.; - return 0.; - } - - Real area = alpha*alpha; - p->x = p->y = p->z = area*alpha; - - Real b = alpha - n.x; - if (b > 0.) { - area -= b*b; - p->x -= b*b*(2.*n.x + alpha); - p->y -= b*b*b; - p->z -= b*b*b; - } - b = alpha - n.y; - if (b > 0.) { - area -= b*b; - p->y -= b*b*(2.*n.y + alpha); - p->x -= b*b*b; - p->z -= b*b*b; - } - b = alpha - n.z; - if (b > 0.) { - area -= b*b; - p->z -= b*b*(2.*n.z + alpha); - p->x -= b*b*b; - p->y -= b*b*b; - } - - amax = alpha - amax; - b = amax + n.x; - if (b > 0.) { - area += b*b; - p->y += b*b*(2.*n.y + alpha - n.z); - p->z += b*b*(2.*n.z + alpha - n.y); - p->x += b*b*b; - } - b = amax + n.y; - if (b > 0.) { - area += b*b; - p->x += b*b*(2.*n.x + alpha - n.z); - p->z += b*b*(2.*n.z + alpha - n.x); - p->y += b*b*b; - } - b = amax + n.z; - if (b > 0.) { - area += b*b; - p->x += b*b*(2.*n.x + alpha - n.y); - p->y += b*b*(2.*n.y + alpha - n.x); - p->z += b*b*b; - } - - area *= 3.; - p->x /= area*n.x; - p->y /= area*n.y; - p->z /= area*n.z; - - THRESHOLD (p->x); - THRESHOLD (p->y); - THRESHOLD (p->z); - - if (m->x < 0.) p->x = 1. - p->x; - if (m->y < 0.) p->y = 1. - p->y; - if (m->z < 0.) p->z = 1. - p->z; - - return area*sqrt (1./(n.x*n.x*n.y*n.y) + 1./(n.x*n.x*n.z*n.z) + 1./(n.z*n.z*n.y*n.y))/6.; -} - - -/** - * vof_plane_alpha: - * - * Returns: the value @alpha such that the volume of a cubic cell - * lying under the plane defined by @m.@x = @alpha is equal to @c. - */ -Real vof_plane_alpha (XDim3 * m, Real c) -{ - - AMREX_ASSERT(c >= 0. && c <= 1.); - AMREX_ASSERT(m != NULL); - Real alpha; - XDim3 n; - - n.x = fabs (m->x); n.y = fabs (m->y); n.z = fabs (m->z); - - Real m1, m2, m3; - m1 = MIN(n.x, n.y); - m3 = MAX(n.x, n.y); - m2 = n.z; - if (m2 < m1) { - Real tmp = m1; - m1 = m2; - m2 = tmp; - } - else if (m2 > m3) { - Real tmp = m3; - m3 = m2; - m2 = tmp; - } - Real m12 = m1 + m2; - Real pr = MAX(6.*m1*m2*m3, 1e-50); - Real V1 = m1*m1*m1/pr; - Real V2 = V1 + (m2 - m1)/(2.*m3), V3; - Real mm; - if (m3 < m12) { - mm = m3; - V3 = (m3*m3*(3.*m12 - m3) + m1*m1*(m1 - 3.*m3) + m2*m2*(m2 - 3.*m3))/pr; - } - else { - mm = m12; - V3 = mm/(2.*m3); - } - - Real ch = MIN(c, 1. - c); - if (ch < V1) - alpha = pow (pr*ch, 1./3.); - else if (ch < V2) - alpha = (m1 + sqrt(m1*m1 + 8.*m2*m3*(ch - V1)))/2.; - else if (ch < V3) { - Real p = 2.*m1*m2; - Real q = 3.*m1*m2*(m12 - 2.*m3*ch)/2.; - Real p12 = sqrt (p); - Real teta = acos(q/(p*p12))/3.; - Real cs = cos(teta); - alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + m12; - } - else if (m12 < m3) - alpha = m3*ch + mm/2.; - else { - Real p = m1*(m2 + m3) + m2*m3 - 1./4.; - Real q = 3.*m1*m2*m3*(1./2. - ch)/2.; - Real p12 = sqrt(p); - Real teta = acos(q/(p*p12))/3.; - Real cs = cos(teta); - alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + 1./2.; - } - if (c > 1./2.) alpha = 1. - alpha; - - if (m->x < 0.) - alpha += m->x; - if (m->y < 0.) - alpha += m->y; - if (m->z < 0.) - alpha += m->z; - - return alpha; -} - -#if AMREX_SPACEDIM == 2 -#include "myc2D.h" -//# define F(x,y,z) f[x][y] -#else -#include "myc.h" -//# define F(x,y,z) f[x][y][z] -#endif - -void stencil (AMREX_D_DECL(int const i, int const j, int const k), - Array4 const & v, Real F(3,3,3)) -{ - int x, y, z = 0; - F(1,1,1) = v (AMREX_D_DECL(i,j,k)); -#if AMREX_SPACEDIM == 3 - for (z = -1; z <= 1; z++) -#endif - for (x = -1; x <= 1; x++) - for (y = -1; y <= 1; y++) - if (x != 0 || y != 0 || z != 0) - F(x + 1, y + 1, z + 1) = v(AMREX_D_DECL(i+x,j+y,k+z)); - /* boundary conditions (symmetry) */ -#if AMREX_SPACEDIM == 2 - for (x = 0; x <= 2; x++) { - if (f[x][0] < 0.) f[x][0] = f[x][1]; - if (f[x][2] < 0.) f[x][2] = f[x][1]; - } - for (y = 0; y <= 2; y++) { - if (f[0][y] < 0.) f[0][y] = f[1][y]; - if (f[2][y] < 0.) f[2][y] = f[1][y]; - } -#else /* 3D */ - for (x = 0; x <= 2; x++) - for (y = 0; y <= 2; y++) { - if (f[x][y][0] < 0.) f[x][y][0] = f[x][y][1]; - if (f[x][y][2] < 0.) f[x][y][2] = f[x][y][1]; - } - for (x = 0; x <= 2; x++) - for (z = 0; z <= 2; z++) { - if (f[x][0][z] < 0.) f[x][0][z] = f[x][1][z]; - if (f[x][2][z] < 0.) f[x][2][z] = f[x][1][z]; - } - for (z = 0; z <= 2; z++) - for (y = 0; y <= 2; y++) { - if (f[0][y][z] < 0.) f[0][y][z] = f[1][y][z]; - if (f[2][y][z] < 0.) f[2][y][z] = f[1][y][z]; - } -#endif /* 3D */ -} - -void -VolumeOfFluid::tracer_vof_update(Vector const& tracer) -{ - for (int lev = 0; lev <= finest_level; ++lev) { - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); - - auto& vof_mf = tracer[lev]; - - for (MFIter mfi(*vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { - Box const& bx = mfi.tilebox(); - Array4 const& vof = vof_mf->array(mfi); - Array4 const& mv = normal[lev].array(mfi); - Array4 const& al = alpha[lev].array(mfi); - ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof(i,j,k,0); - THRESHOLD(fvol); - if (CELL_IS_FULL(fvol)) { - AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, - mv(i,j,k,1) = Real(0.);, - mv(i,j,k,2) = Real(0.);); - al(i,j,k) = fvol; - } - else { - Real F(3,3,3); - XDim3 m; - stencil (AMREX_D_DECL(i,j,k), vof, f); - mycs (f, &m.x); - Real n = 0.; - for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); - if (n > 0.) - for (int d = 0; d < AMREX_SPACEDIM; d++) - mv(i,j,k,d)= (&m.x)[d]/n; - else {/* fixme: this is a small fragment */ - AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, - mv(i,j,k,1) = Real(0.);, - mv(i,j,k,2) = Real(0.);); - } - for (int d = 0; d < AMREX_SPACEDIM; d++) - (&m.x)[d]= mv(i,j,k,d); - al(i,j,k)= vof_plane_alpha (&m, fvol); - - //if (std::fabs(mv(i,j,k,1)) > 2) - // Print() << " normal direction " << m[0]<<" "< const& tracer, - AMREX_D_DECL(Vector const& u_mac, - Vector const& v_mac, - Vector const& w_mac), - Real dt) -{ - - amrex::Print() << " VOF Level#" << finest_level<<"\n"; - tracer_vof_update(tracer); -} -//////////////////////////////////////////////////////////////////// -////// Initialize the VOF value using the implicit surface function -///////////////////////////////////////////////////////////////////// -void -VolumeOfFluid::tracer_vof_init_fraction(Vector const& tracer) -{ - - -} - - -/////////////////////////////////////////////////////////////////////////////////////////////// -///////// -//////// output results in tecplot format -//////// -/////////////////////////////////////////////////////////////////////////////////////////////// -void -VolumeOfFluid::write_tecplot_surface(Real time, int nstep) -{ - - int myproc = ParallelDescriptor::MyProc(); - int nprocs = ParallelDescriptor::NProcs(); - amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; - const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+ - (nprocs>1?("_"+ std::to_string(myproc)+".dat") : ".dat"); - -// Print()<<"surface_plot"<< nstep<<" "<< tecplotfilename<<"\n"; - std::ofstream TecplotFile; - TecplotFile.open(tecplotfilename.c_str(), std::ios::out); - TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; - //spatial coordinates - TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); - //output varibles - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<"\n"; - - for (int lev = 0; lev <= finest_level; ++lev) { - auto& ld = *v_incflo->m_leveldata[lev]; - Box const& domain = v_incflo->geom[lev].Domain(); - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); - const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab - int nb = ba.size(); - const DistributionMapping& dm = ld.tracer.DistributionMap(); - - -#ifdef _OPENMP -#pragma omp parallel if (Gpu::notInLaunchRegion()) -#endif - - for (MFIter mfi(ld.tracer); mfi.isValid(); ++mfi) { - Box const& bx = mfi.validbox(); - const auto lo = lbound(bx); - const auto hi = ubound(bx); - Array4 const& vof = ld.tracer.const_array(mfi); - Array4 const& mv = normal[lev].array(mfi); - Array4 const& al = alpha[lev].array(mfi); - Vector segments; - int totalnodes = 0; - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - auto fvol = vof(i,j,k,0); - - if (!CELL_IS_FULL(fvol)){ - Real alpha; - XDim3 m, p, cell; - for (int d = 0; d < AMREX_SPACEDIM; d++) { - (&m.x)[d]= mv(i,j,k,d); - } - alpha= al(i,j,k,0); - vof_plane_area_center(&m, alpha, &p); - /* convert the coord. of the center to the global sys*/ - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); - (&cell.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); - } - add_segment (cell, dx, alpha, &p, &m, segments, totalnodes, fvol); - - //Print() << " normal direction " <<"("<1?("_"+ std::to_string(myproc)+".dat") : ".dat"); - - - std::ofstream TecplotFile; - TecplotFile.open(tecplotfilename.c_str(), std::ios::out); - TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; - //spatial coordinates - TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); - //output varibles - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<"\n"; - - for (int lev = 0; lev <= finest_level; ++lev) { - auto& ld = *v_incflo->m_leveldata[lev]; - Box const& domain = v_incflo->geom[lev].Domain(); - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); - auto const& ijk_min= domain.smallEnd(); - auto const& ijk_max= domain.bigEnd(); - const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab - int nb = ba.size(); - const DistributionMapping& dm = ld.tracer.DistributionMap(); - std::string IJK = "IJK"; - // amrex::Print() << " process#" << myproc<<" " << ld.tracer.nGrow()<<" " << nb<<"\n"; -//amrex::Print() << " process#" << myproc<<" " << (IJK[0]+std::string("= "))<<"\n"; - //amrex::Print() << " process#" << myproc<<" " << dm.size()<<"\n"; - //Output data for each box in boxarray according to Tecplot data format -// for (int ibox = 0; ibox const& tracer = ld.tracer.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - - int nn=0; - //write coordinate variables - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z +1; ++k) { - for (int j = lo.y; j <= hi.y +1; ++j) { - for (int i = lo.x; i <= hi.x +1; ++i) { - TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } - } - }// - - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - TecplotFile << tracer(i,j,k,0)<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } - } - - //write variables of the normal direction of the interface - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - TecplotFile << mv(i,j,k,dim)<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } - } - }// - - - TecplotFile <<"\n"; - } // end MFIter - -// }// end box -// -// -// } - } // end lev - - - - - - TecplotFile.close(); - - -} +#include +#include +#include + +#ifdef AMREX_USE_EB +#include +#include +#endif + +using namespace amrex; +#define EPS 1e-4 +#define THRESHOLD(c) {if ((c) < 0.) c = 0.; else if ((c) > 1.) c = 1.;} +#define CELL_IS_FULL(f) ((f) == 0. || (f) == 1.) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) + +VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) +{ + finest_level = v_incflo->finestLevel(); + // ************************************************************************************* + // Allocate space for the information of the interface segments + // ************************************************************************************* + for (int lev = 0; lev <= finest_level; ++lev){ + normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, 1, MFInfo(), v_incflo->Factory(lev)); + alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, 1, MFInfo(), v_incflo->Factory(lev)); + } + + +} +static XDim3 edge[12][2] = { + {{0.,0.,0.},{1.,0.,0.}},{{0.,0.,1.},{1.,0.,1.}},{{0.,1.,1.},{1.,1.,1.}},{{0.,1.,0.},{1.,1.,0.}}, + {{0.,0.,0.},{0.,1.,0.}},{{0.,0.,1.},{0.,1.,1.}},{{1.,0.,1.},{1.,1.,1.}},{{1.,0.,0.},{1.,1.,0.}}, + {{0.,0.,0.},{0.,0.,1.}},{{1.,0.,0.},{1.,0.,1.}},{{1.,1.,0.},{1.,1.,1.}},{{0.,1.,0.},{0.,1.,1.}} +}; +/* first index is the edge number, second index is the edge orientation + (0 or 1), third index are the edges which this edge may connect to + in order and the corresponding face direction */ +static int connect[12][2][4] = { + {{9, 1, 8, 3}, {4, 3, 7, 5}}, /* 0 */ + {{6, 2, 5, 4}, {8, 0, 9, 3}}, /* 1 */ + {{10, 3, 11, 2}, {5, 1, 6, 4}}, /* 2 */ + {{7, 0, 4, 5}, {11, 2, 10, 2}}, /* 3 */ + {{3, 7, 0, 5}, {8, 5, 11, 1}}, /* 4 */ + {{11, 4, 8, 1}, {1, 6, 2, 4}}, /* 5 */ + {{2, 5, 1, 4}, {9, 7, 10, 1}}, /* 6 */ + {{10, 6, 9, 1}, {0, 4, 3, 5}}, /* 7 */ + {{5, 11, 4, 1}, {0, 9, 1, 3}}, /* 8 */ + {{1, 8, 0, 3}, {7, 10, 6, 1}}, /* 9 */ + {{6, 9, 7, 1}, {3, 11, 2, 2}}, /* 10 */ + {{2, 10, 3, 2}, {4, 8, 5, 1}} /* 11 */ +}; + +static void cube_plane_intersection (XDim3 cell, GpuArray dx, + XDim3 const * O, XDim3 const * n, XDim3 p[12], + int orient[12]) +{ + XDim3 o; + int i; + for (i=0; ix*(e.x - d.x) + n->y*(e.y - d.y) + n->z*(e.z - d.z); + orient[i] = -1; + if (fabs (den) > 1e-10) { + Real t = (n->x*(O->x - d.x) + n->y*(O->y - d.y) + n->z*(O->z - d.z))/den; + if (t >= 0. && t < 1.) { + p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); + orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); + } + } + } +} +using NODE_CUT=Array; +/** + * vof_cut_cube_vertices: + * @cell: a #FttCell. + * @p: a point on the plane. + * @n: the normal to the plane. + * @v: where to return the vertices coordinates. + * @d: where to return the direction. + * + * Fills @v, @d and @val with the coordinates/values of the vertices, + * intersections of @cell with the plane defined by @p and @n. + * + * The vertices are ordered consistently to define a consistent, + * oriented polygon. + * + * Returns: the number of vertices (0 if the plane does not cut the cell). + */ +static int vof_cut_cube_vertices (XDim3 cell, GpuArray dx, + XDim3 const * p, XDim3 const * n, + NODE_CUT & v, int d[12]) +{ + XDim3 a[12]; + int orient[12]; + int i; + + AMREX_ASSERT (p != NULL); + + + + cube_plane_intersection (cell, dx, p, n, a, orient); + for (i = 0; i < 12; i++) { + int nv = 0, e = i; + while (orient[e] >= 0) { + int m = 0, * ne = connect[e][orient[e]]; + d[nv] = ne[3]; + v[nv++] = a[e]; + orient[e] = -1; + while (m < 3 && orient[e] < 0) + e = ne[m++]; + } + if (nv > 2) + return nv; + } + return 0; +} + +struct Segment{ + int nnodes; /* number of nodes (2, 3 or 4) */ +#if AMREX_SPACEDIM==2 + XDim3 node[2]; /* node coordinates */ +#else + XDim3 node[4]; +#endif + XDim3 mv; + Real alpha, vof; + // Constructor to initialize the Segment + Segment(int n, NODE_CUT const& nodes, XDim3 m, Real a, Real f, int ns=0) + : nnodes(n), mv (m), alpha (a), vof(f) { + for (int i = 0; i < n; ++i) + node[i]= nodes[ns==0?i:(i + 3)%(n + 2)]; + } +}; + +static void add_segment (XDim3 const & cell, GpuArray const & dx, + Real alpha, XDim3 const * o, XDim3 const * m, + Vector & segments, int & nt, Real vof) +{ + int d[12]; + /* array of node coordinates for a cut face */ + NODE_CUT nodecutface; + int inode, inode2, jnode_max_sintheta = 0, + nnodecutface = vof_cut_cube_vertices (cell, dx, o, m, nodecutface, d); + AMREX_ASSERT (nnodecutface <= 6); + if (nnodecutface > 3) { /* reorder faces if necessary */ + /* Tecplot can think that opposite vertices of the quadrilateral surface + element are connected. This may result in ugly X-shaped surface elements. + Reorder the array of node if necessary, using bubble sort, + to maximize the sine of the angle between the vector from each + intersection point to the cell center and the vector from this point + to the next point in the array */ + int i_switchnodes = 0; /* counter to avoid infinite loop */ + bool switchnodes = false; /* logical variable used to reorder cut face nodes */ + + do { + i_switchnodes++; + + for (inode = 0; inode < nnodecutface; inode++) { + XDim3 node = nodecutface[inode]; /* face node coordinates */ + XDim3 diff1 = {o->x - node.x, o->y - node.y, o->z - node.z}; + Real length_diff1 = vector_norm (&diff1); + Real max_sintheta = 0.; + /* cycle through all other nodes (jnode) where cut face intersects cell edges */ + for (inode2 = 1; inode2 < nnodecutface; inode2++) { + int jnode = (inode + inode2)%nnodecutface; + XDim3 diff2 = {nodecutface[jnode].x - node.x, + nodecutface[jnode].y - node.y, + nodecutface[jnode].z - node.z}; + Real length_diff2 = vector_norm (&diff2); + if (length_diff2 < 1e-20) /*Hua Tan(11-1-2016)*/ + return; + Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m->x + + (diff1.z*diff2.x - diff1.x*diff2.z)*m->y + + (diff1.x*diff2.y - diff1.y*diff2.x)*m->z)/ + (length_diff1*length_diff2); + + if (sintheta > max_sintheta) { + max_sintheta = sintheta; + jnode_max_sintheta = jnode; + } + } + /* terminate if cannot find positive angle between cut face nodes */ + AMREX_ASSERT (max_sintheta != 0.); + inode2 = (inode + 1)%nnodecutface; + if (jnode_max_sintheta != inode2) { + node = nodecutface[jnode_max_sintheta]; + nodecutface[jnode_max_sintheta] = nodecutface[inode2]; + nodecutface[inode2] = node; + switchnodes = true; + } + } /* inode-loop */ + } while (switchnodes && i_switchnodes < 1000); /* avoid infinite loop */ + } /* reorder faces if necessary */ + // Print()<<"inside add_segment"<z = 0.; + if (alpha <= 0. || alpha >= n.x + n.y) { + p->x = p->y = 0.; + return 0.; + } + + if (n.x < EPS) { + p->x = 0.5; + p->y = m->y < 0. ? 1. - alpha : alpha; + return 1.; + } + + if (n.y < EPS) { + p->y = 0.5; + p->x = m->x < 0. ? 1. - alpha : alpha; + return 1.; + } + + p->x = p->y = 0.; + + if (alpha >= n.x) { + p->x += 1.; + p->y += (alpha - n.x)/n.y; + } + else + p->x += alpha/n.x; + + Real ax = p->x, ay = p->y; + if (alpha >= n.y) { + p->y += 1.; + ay -= 1.; + p->x += (alpha - n.y)/n.x; + ax -= (alpha - n.y)/n.x; + } + else { + p->y += alpha/n.y; + ay -= alpha/n.y; + } + + p->x /= 2.; + p->y /= 2.; + + THRESHOLD (p->x); + THRESHOLD (p->y); + + if (m->x < 0.) + p->x = 1. - p->x; + if (m->y < 0.) + p->y = 1. - p->y; + + return sqrt (ax*ax + ay*ay); + +} + + +/** + * vof_plane_area_center: + * @m: normal to the plane. + * @alpha: plane constant. + * @p: a #amrex::XDim3. + * + * Fills @p with the position of the center of area of the fraction of + * a cubic cell lying under the plane (@m,@alpha). + * + * Returns: the area of the facet. + */ +Real vof_plane_area_center (XDim3 const * m, Real alpha, XDim3 * p) +{ + + if (fabs (m->x) < EPS) { + XDim3 n, q; + n.x = m->y; + n.y = m->z; + Real area = vof_line_area_center (&n, alpha, &q); + p->x = 0.5; + p->y = q.x; + p->z = q.y; + return area; + } + if (fabs (m->y) < EPS) { + XDim3 n, q; + n.x = m->z; + n.y = m->x; + Real area = vof_line_area_center (&n, alpha, &q); + p->x = q.y; + p->y = 0.5; + p->z = q.x; + return area; + } + if (fabs (m->z) < EPS) { + Real area = vof_line_area_center (m, alpha, p); + p->z = 0.5; + return area; + } + + XDim3 n = *m; + if (n.x < 0.) { + alpha -= n.x; + n.x = - n.x; + } + if (n.y < 0.) { + alpha -= n.y; + n.y = - n.y; + } + if (n.z < 0.) { + alpha -= n.z; + n.z = - n.z; + } + + Real amax = n.x + n.y + n.z; + if (alpha <= 0. || alpha >= amax) { + p->x = p->y = p->z = 0.; + return 0.; + } + + Real area = alpha*alpha; + p->x = p->y = p->z = area*alpha; + + Real b = alpha - n.x; + if (b > 0.) { + area -= b*b; + p->x -= b*b*(2.*n.x + alpha); + p->y -= b*b*b; + p->z -= b*b*b; + } + b = alpha - n.y; + if (b > 0.) { + area -= b*b; + p->y -= b*b*(2.*n.y + alpha); + p->x -= b*b*b; + p->z -= b*b*b; + } + b = alpha - n.z; + if (b > 0.) { + area -= b*b; + p->z -= b*b*(2.*n.z + alpha); + p->x -= b*b*b; + p->y -= b*b*b; + } + + amax = alpha - amax; + b = amax + n.x; + if (b > 0.) { + area += b*b; + p->y += b*b*(2.*n.y + alpha - n.z); + p->z += b*b*(2.*n.z + alpha - n.y); + p->x += b*b*b; + } + b = amax + n.y; + if (b > 0.) { + area += b*b; + p->x += b*b*(2.*n.x + alpha - n.z); + p->z += b*b*(2.*n.z + alpha - n.x); + p->y += b*b*b; + } + b = amax + n.z; + if (b > 0.) { + area += b*b; + p->x += b*b*(2.*n.x + alpha - n.y); + p->y += b*b*(2.*n.y + alpha - n.x); + p->z += b*b*b; + } + + area *= 3.; + p->x /= area*n.x; + p->y /= area*n.y; + p->z /= area*n.z; + + THRESHOLD (p->x); + THRESHOLD (p->y); + THRESHOLD (p->z); + + if (m->x < 0.) p->x = 1. - p->x; + if (m->y < 0.) p->y = 1. - p->y; + if (m->z < 0.) p->z = 1. - p->z; + + return area*sqrt (1./(n.x*n.x*n.y*n.y) + 1./(n.x*n.x*n.z*n.z) + 1./(n.z*n.z*n.y*n.y))/6.; +} + + +/** + * vof_plane_alpha: + * + * Returns: the value @alpha such that the volume of a cubic cell + * lying under the plane defined by @m.@x = @alpha is equal to @c. + */ +Real vof_plane_alpha (XDim3 * m, Real c) +{ + + AMREX_ASSERT(c >= 0. && c <= 1.); + AMREX_ASSERT(m != NULL); + Real alpha; + XDim3 n; + + n.x = fabs (m->x); n.y = fabs (m->y); n.z = fabs (m->z); + + Real m1, m2, m3; + m1 = MIN(n.x, n.y); + m3 = MAX(n.x, n.y); + m2 = n.z; + if (m2 < m1) { + Real tmp = m1; + m1 = m2; + m2 = tmp; + } + else if (m2 > m3) { + Real tmp = m3; + m3 = m2; + m2 = tmp; + } + Real m12 = m1 + m2; + Real pr = MAX(6.*m1*m2*m3, 1e-50); + Real V1 = m1*m1*m1/pr; + Real V2 = V1 + (m2 - m1)/(2.*m3), V3; + Real mm; + if (m3 < m12) { + mm = m3; + V3 = (m3*m3*(3.*m12 - m3) + m1*m1*(m1 - 3.*m3) + m2*m2*(m2 - 3.*m3))/pr; + } + else { + mm = m12; + V3 = mm/(2.*m3); + } + + Real ch = MIN(c, 1. - c); + if (ch < V1) + alpha = pow (pr*ch, 1./3.); + else if (ch < V2) + alpha = (m1 + sqrt(m1*m1 + 8.*m2*m3*(ch - V1)))/2.; + else if (ch < V3) { + Real p = 2.*m1*m2; + Real q = 3.*m1*m2*(m12 - 2.*m3*ch)/2.; + Real p12 = sqrt (p); + Real teta = acos(q/(p*p12))/3.; + Real cs = cos(teta); + alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + m12; + } + else if (m12 < m3) + alpha = m3*ch + mm/2.; + else { + Real p = m1*(m2 + m3) + m2*m3 - 1./4.; + Real q = 3.*m1*m2*m3*(1./2. - ch)/2.; + Real p12 = sqrt(p); + Real teta = acos(q/(p*p12))/3.; + Real cs = cos(teta); + alpha = p12*(sqrt(3.*(1. - cs*cs)) - cs) + 1./2.; + } + if (c > 1./2.) alpha = 1. - alpha; + + if (m->x < 0.) + alpha += m->x; + if (m->y < 0.) + alpha += m->y; + if (m->z < 0.) + alpha += m->z; + + return alpha; +} + +#if AMREX_SPACEDIM == 2 +#include "myc2D.h" +//# define F(x,y,z) f[x][y] +#else +#include "myc.h" +//# define F(x,y,z) f[x][y][z] +#endif + +void stencil (AMREX_D_DECL(int const i, int const j, int const k), + Array4 const & v, Real F(3,3,3)) +{ + int x, y, z = 0; + F(1,1,1) = v (AMREX_D_DECL(i,j,k)); +#if AMREX_SPACEDIM == 3 + for (z = -1; z <= 1; z++) +#endif + for (x = -1; x <= 1; x++) + for (y = -1; y <= 1; y++) + if (x != 0 || y != 0 || z != 0) + F(x + 1, y + 1, z + 1) = v(AMREX_D_DECL(i+x,j+y,k+z)); + /* boundary conditions (symmetry) */ +#if AMREX_SPACEDIM == 2 + for (x = 0; x <= 2; x++) { + if (f[x][0] < 0.) f[x][0] = f[x][1]; + if (f[x][2] < 0.) f[x][2] = f[x][1]; + } + for (y = 0; y <= 2; y++) { + if (f[0][y] < 0.) f[0][y] = f[1][y]; + if (f[2][y] < 0.) f[2][y] = f[1][y]; + } +#else /* 3D */ + for (x = 0; x <= 2; x++) + for (y = 0; y <= 2; y++) { + if (f[x][y][0] < 0.) f[x][y][0] = f[x][y][1]; + if (f[x][y][2] < 0.) f[x][y][2] = f[x][y][1]; + } + for (x = 0; x <= 2; x++) + for (z = 0; z <= 2; z++) { + if (f[x][0][z] < 0.) f[x][0][z] = f[x][1][z]; + if (f[x][2][z] < 0.) f[x][2][z] = f[x][1][z]; + } + for (z = 0; z <= 2; z++) + for (y = 0; y <= 2; y++) { + if (f[0][y][z] < 0.) f[0][y][z] = f[1][y][z]; + if (f[2][y][z] < 0.) f[2][y][z] = f[1][y][z]; + } +#endif /* 3D */ +} + +void +VolumeOfFluid::tracer_vof_update(Vector const& tracer) +{ + for (int lev = 0; lev <= finest_level; ++lev) { + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + + auto& vof_mf = tracer[lev]; + + for (MFIter mfi(*vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& vof = vof_mf->array(mfi); + Array4 const& mv = normal[lev].array(mfi); + Array4 const& al = alpha[lev].array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + auto fvol = vof(i,j,k,0); + THRESHOLD(fvol); + if (CELL_IS_FULL(fvol)) { + AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); + al(i,j,k) = fvol; + } + else { + Real F(3,3,3); + XDim3 m; + stencil (AMREX_D_DECL(i,j,k), vof, f); + mycs (f, &m.x); + Real n = 0.; + for (int d = 0; d < AMREX_SPACEDIM; d++) + n += fabs ((&m.x)[d]); + if (n > 0.) + for (int d = 0; d < AMREX_SPACEDIM; d++) + mv(i,j,k,d)= (&m.x)[d]/n; + else {/* fixme: this is a small fragment */ + AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); + } + for (int d = 0; d < AMREX_SPACEDIM; d++) + (&m.x)[d]= mv(i,j,k,d); + al(i,j,k)= vof_plane_alpha (&m, fvol); + + //if (std::fabs(mv(i,j,k,1)) > 2) + // Print() << " normal direction " << m[0]<<" "< const& tracer, + AMREX_D_DECL(Vector const& u_mac, + Vector const& v_mac, + Vector const& w_mac), + Real dt) +{ + + amrex::Print() << " VOF Level#" << finest_level<<"\n"; + tracer_vof_update(tracer); +} +//////////////////////////////////////////////////////////////////// +////// Initialize the VOF value using the implicit surface function +///////////////////////////////////////////////////////////////////// +void +tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) +{ + int vof_init_with_eb = 1; + ParmParse pp("incflo"); + pp.query("vof_init_with_eb", vof_init_with_eb); + + Geometry const& geom = a_incflo->Geom(lev); + auto const& dx = geom.CellSizeArray(); + auto const& problo = geom.ProbLoArray(); + auto const& probhi = geom.ProbHiArray(); + +#ifdef AMREX_USE_EB + if (vof_init_with_eb) { + if (lev == 0) { + Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), + 0.5*(problo[1]+probhi[1]), + 0.5*(problo[2]+probhi[2]))}; + Real radius = 5.0*dx[0]; + bool fluid_is_inside = true; + + EB2::SphereIF my_sphere(radius, center, fluid_is_inside); + auto gshop = EB2::makeShop(my_sphere); + int max_level = a_incflo->maxLevel(); + EB2::Build(gshop, a_incflo->Geom(max_level), max_level, max_level); + } + + auto fact = amrex::makeEBFabFactory(geom, a_tracer.boxArray(), a_tracer.DistributionMap(), + {1,0,0}, EBSupport::volume); + auto const& volfrac = fact->getVolFrac(); + MultiFab::Copy(a_tracer, volfrac, 0, 0, 1, 0); + + if (lev == a_incflo->finestLevel()) { + EB2::IndexSpace::pop(); + } + } else +#endif + { +#ifdef AMRE_USE_OMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(a_tracer); mfi.isValid(); ++mfi) + { + Box const& vbx = mfi.validbox(); + auto const& tracer = a_tracer.array(mfi); + amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real x = problo[0] + Real(i+0.5)*dx[0]; + Real y = problo[1] + Real(j+0.5)*dx[1]; + Real z = problo[2] + Real(k+0.5)*dx[2]; + + Real r = std::sqrt(x*x + y*y + z*z); + + Real rad = 5.0*dx[0]; + Real dia = 10.0*dx[0]; + + Real cenx = 0.5*(problo[0] + probhi[0]); + Real ceny = 0.5*(problo[1] + probhi[1]); + Real cenz = 0.5*(problo[2] + probhi[2]); + + Real xs = x - cenx; + Real ys = y - ceny; + Real zs = z - cenz; + + Real rs = (std::sqrt(xs*xs + ys*ys + zs*zs) - rad)/std::sqrt(dx[0]*dx[0] + dx[1]*dx[1] + dx[2]*dx[2]); + + if (rs > 0.5) tracer(i,j,k) = 0.0; + else if (rs < -.5) tracer(i,j,k) = 1.0; + else tracer(i,j,k) = 0.5-rs; + }); + } + } +} + + +/////////////////////////////////////////////////////////////////////////////////////////////// +///////// +//////// output results in tecplot format +//////// +/////////////////////////////////////////////////////////////////////////////////////////////// +void +VolumeOfFluid::write_tecplot_surface(Real time, int nstep) +{ + + int myproc = ParallelDescriptor::MyProc(); + int nprocs = ParallelDescriptor::NProcs(); + amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; + const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+ + (nprocs>1?("_"+ std::to_string(myproc)+".dat") : ".dat"); + +// Print()<<"surface_plot"<< nstep<<" "<< tecplotfilename<<"\n"; + std::ofstream TecplotFile; + TecplotFile.open(tecplotfilename.c_str(), std::ios::out); + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<"\n"; + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Box const& domain = v_incflo->geom[lev].Domain(); + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab + int nb = ba.size(); + const DistributionMapping& dm = ld.tracer.DistributionMap(); + + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + + for (MFIter mfi(ld.tracer); mfi.isValid(); ++mfi) { + Box const& bx = mfi.validbox(); + const auto lo = lbound(bx); + const auto hi = ubound(bx); + Array4 const& vof = ld.tracer.const_array(mfi); + Array4 const& mv = normal[lev].array(mfi); + Array4 const& al = alpha[lev].array(mfi); + Vector segments; + int totalnodes = 0; + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + auto fvol = vof(i,j,k,0); + + if (!CELL_IS_FULL(fvol)){ + Real alpha; + XDim3 m, p, cell; + for (int d = 0; d < AMREX_SPACEDIM; d++) { + (&m.x)[d]= mv(i,j,k,d); + } + alpha= al(i,j,k,0); + vof_plane_area_center(&m, alpha, &p); + /* convert the coord. of the center to the global sys*/ + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); + (&cell.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); + } + add_segment (cell, dx, alpha, &p, &m, segments, totalnodes, fvol); + + //Print() << " normal direction " <<"("<1?("_"+ std::to_string(myproc)+".dat") : ".dat"); + + + std::ofstream TecplotFile; + TecplotFile.open(tecplotfilename.c_str(), std::ios::out); + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<"\n"; + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Box const& domain = v_incflo->geom[lev].Domain(); + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + auto const& ijk_min= domain.smallEnd(); + auto const& ijk_max= domain.bigEnd(); + const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab + int nb = ba.size(); + const DistributionMapping& dm = ld.tracer.DistributionMap(); + std::string IJK = "IJK"; + // amrex::Print() << " process#" << myproc<<" " << ld.tracer.nGrow()<<" " << nb<<"\n"; +//amrex::Print() << " process#" << myproc<<" " << (IJK[0]+std::string("= "))<<"\n"; + //amrex::Print() << " process#" << myproc<<" " << dm.size()<<"\n"; + //Output data for each box in boxarray according to Tecplot data format +// for (int ibox = 0; ibox const& tracer = ld.tracer.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + + int nn=0; + //write coordinate variables + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z +1; ++k) { + for (int j = lo.y; j <= hi.y +1; ++j) { + for (int i = lo.x; i <= hi.x +1; ++i) { + TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << tracer(i,j,k,0)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + + //write variables of the normal direction of the interface + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << mv(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + + + TecplotFile <<"\n"; + } // end MFIter + +// }// end box +// +// +// } + } // end lev + + + + + + TecplotFile.close(); + + +} From 3e693fb586330d6c17a6240ae9ddc8ebb60bb854 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Thu, 20 Jun 2024 16:43:55 -0700 Subject: [PATCH 04/29] Tecplot: use nfiles (#2) --- src/vof/VolumeOfFluid.cpp | 337 ++++++++++++++++++-------------------- 1 file changed, 163 insertions(+), 174 deletions(-) diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 4c93fc7d7..04aff0298 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -725,102 +725,100 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) int myproc = ParallelDescriptor::MyProc(); int nprocs = ParallelDescriptor::NProcs(); amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; - const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+ - (nprocs>1?("_"+ std::to_string(myproc)+".dat") : ".dat"); + const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep); -// Print()<<"surface_plot"<< nstep<<" "<< tecplotfilename<<"\n"; - std::ofstream TecplotFile; - TecplotFile.open(tecplotfilename.c_str(), std::ios::out); - TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; - //spatial coordinates - TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); - //output varibles - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<"\n"; + const int nfiles = 1; - for (int lev = 0; lev <= finest_level; ++lev) { - auto& ld = *v_incflo->m_leveldata[lev]; - Box const& domain = v_incflo->geom[lev].Domain(); - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); - const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab - int nb = ba.size(); - const DistributionMapping& dm = ld.tracer.DistributionMap(); + for (NFilesIter nfi(nfiles, tecplotfilename, false, true); nfi.ReadyToWrite(); ++nfi) + { +// Print()<<"surface_plot"<< nstep<<" "<< tecplotfilename<<"\n"; + auto& TecplotFile = (std::ofstream&) nfi.Stream(); + + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<"\n"; + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Box const& domain = v_incflo->geom[lev].Domain(); + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab + int nb = ba.size(); + const DistributionMapping& dm = ld.tracer.DistributionMap(); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif + for (MFIter mfi(ld.tracer); mfi.isValid(); ++mfi) { + Box const& bx = mfi.validbox(); + const auto lo = lbound(bx); + const auto hi = ubound(bx); + Array4 const& vof = ld.tracer.const_array(mfi); + Array4 const& mv = normal[lev].array(mfi); + Array4 const& al = alpha[lev].array(mfi); + Vector segments; + int totalnodes = 0; + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + auto fvol = vof(i,j,k,0); + + if (!CELL_IS_FULL(fvol)){ + Real alpha; + XDim3 m, p, cell; + for (int d = 0; d < AMREX_SPACEDIM; d++) { + (&m.x)[d]= mv(i,j,k,d); + } + alpha= al(i,j,k,0); + vof_plane_area_center(&m, alpha, &p); + /* convert the coord. of the center to the global sys*/ + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); + (&cell.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); + } + add_segment (cell, dx, alpha, &p, &m, segments, totalnodes, fvol); + + //Print() << " normal direction " <<"("< const& vof = ld.tracer.const_array(mfi); - Array4 const& mv = normal[lev].array(mfi); - Array4 const& al = alpha[lev].array(mfi); - Vector segments; - int totalnodes = 0; - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - auto fvol = vof(i,j,k,0); - - if (!CELL_IS_FULL(fvol)){ - Real alpha; - XDim3 m, p, cell; - for (int d = 0; d < AMREX_SPACEDIM; d++) { - (&m.x)[d]= mv(i,j,k,d); - } - alpha= al(i,j,k,0); - vof_plane_area_center(&m, alpha, &p); - /* convert the coord. of the center to the global sys*/ - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); - (&cell.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); - } - add_segment (cell, dx, alpha, &p, &m, segments, totalnodes, fvol); - - //Print() << " normal direction " <<"("<1?("_"+ std::to_string(myproc)+".dat") : ".dat"); - + const std::string& tecplotfilename = amrex::Concatenate(m_tecplot_file, nstep); - std::ofstream TecplotFile; - TecplotFile.open(tecplotfilename.c_str(), std::ios::out); - TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; - //spatial coordinates - TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); - //output varibles - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<"\n"; + const int nfiles = 1; - for (int lev = 0; lev <= finest_level; ++lev) { - auto& ld = *v_incflo->m_leveldata[lev]; - Box const& domain = v_incflo->geom[lev].Domain(); - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); - auto const& ijk_min= domain.smallEnd(); - auto const& ijk_max= domain.bigEnd(); - const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab - int nb = ba.size(); - const DistributionMapping& dm = ld.tracer.DistributionMap(); - std::string IJK = "IJK"; + for (NFilesIter nfi(nfiles, tecplotfilename, false, true); nfi.ReadyToWrite(); ++nfi) + { + auto& TecplotFile = (std::ofstream&) nfi.Stream(); + + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<"\n"; + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Box const& domain = v_incflo->geom[lev].Domain(); + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + auto const& problo = v_incflo->geom[lev].ProbLoArray(); + auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + auto const& ijk_min= domain.smallEnd(); + auto const& ijk_max= domain.bigEnd(); + const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab + int nb = ba.size(); + const DistributionMapping& dm = ld.tracer.DistributionMap(); + std::string IJK = "IJK"; // amrex::Print() << " process#" << myproc<<" " << ld.tracer.nGrow()<<" " << nb<<"\n"; //amrex::Print() << " process#" << myproc<<" " << (IJK[0]+std::string("= "))<<"\n"; //amrex::Print() << " process#" << myproc<<" " << dm.size()<<"\n"; @@ -883,85 +883,74 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) //for (MFIter mfi(ld.tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& bx = mfi.tilebox(); - for (MFIter mfi(ld.tracer); mfi.isValid(); ++mfi) { - Box const& bx = mfi.validbox(); - const auto lo = lbound(bx); - const auto hi = ubound(bx); - - auto const& ijk_min= bx.smallEnd(); - auto const& ijk_max= bx.bigEnd(); - std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index())); - TecplotFile <<(std::string("ZONE T=")+zonetitle); - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+1)<<"-"<<7<<"]=CELLCENTERED)" - <<", SOLUTIONTIME="< const& tracer = ld.tracer.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - - int nn=0; - //write coordinate variables - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z +1; ++k) { - for (int j = lo.y; j <= hi.y +1; ++j) { + Array4 const& tracer = ld.tracer.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + + int nn=0; + //write coordinate variables + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z +1; ++k) { + for (int j = lo.y; j <= hi.y +1; ++j) { for (int i = lo.x; i <= hi.x +1; ++i) { - TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } + TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << tracer(i,j,k,0)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; } - } } - }// - - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - TecplotFile << tracer(i,j,k,0)<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } - } + } + } - //write variables of the normal direction of the interface - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { + //write variables of the normal direction of the interface + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { - TecplotFile << mv(i,j,k,dim)<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } + TecplotFile << mv(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } } - } - } - }// - - - TecplotFile <<"\n"; - } // end MFIter - -// }// end box -// -// -// } - } // end lev - - - - + } + } + }// - TecplotFile.close(); + TecplotFile <<"\n"; + } // end MFIter + } // end lev + } } From 087aba04e73be023e6944ba1ae71ebfefe78db4f Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 21 Jun 2024 16:05:03 -0700 Subject: [PATCH 05/29] update VolumeOfFluid.H and .cpp --- src/vof/VolumeOfFluid.H | 6 -- src/vof/VolumeOfFluid.cpp | 171 +++++++++++++++++++++++++++----------- 2 files changed, 121 insertions(+), 56 deletions(-) diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index e871702c6..7b2e04b4f 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -27,12 +27,6 @@ public: private: incflo* v_incflo; //incflo object int finest_level; -#if AMREX_SPACEDIM == 2 -# define F(x,y,z) f[x][y] -#else -# define F(x,y,z) f[x][y][z] -#endif - void tracer_vof_update(amrex::Vector const& tracer); }; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 04aff0298..e57fa8553 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -142,12 +142,19 @@ static void add_segment (XDim3 const & cell, GpuArray cons Real alpha, XDim3 const * o, XDim3 const * m, Vector & segments, int & nt, Real vof) { + + /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m + <<"vof"<<" "< 3) { /* reorder faces if necessary */ /* Tecplot can think that opposite vertices of the quadrilateral surface element are connected. This may result in ugly X-shaped surface elements. @@ -187,7 +194,7 @@ static void add_segment (XDim3 const & cell, GpuArray cons } /* terminate if cannot find positive angle between cut face nodes */ AMREX_ASSERT (max_sintheta != 0.); - inode2 = (inode + 1)%nnodecutface; + inode2 = (inode + 1)%nnodecutface; if (jnode_max_sintheta != inode2) { node = nodecutface[jnode_max_sintheta]; nodecutface[jnode_max_sintheta] = nodecutface[inode2]; @@ -252,7 +259,9 @@ Real vof_line_area_center (XDim3 const * m, Real alpha, XDim3 * p) } p->z = 0.; - if (alpha <= 0. || alpha >= n.x + n.y) { + //made change from "alpha>=n.x+n.y" to consider + //the extreme cases + if (alpha <= 0. || alpha > n.x + n.y) { p->x = p->y = 0.; return 0.; } @@ -361,7 +370,8 @@ Real vof_plane_area_center (XDim3 const * m, Real alpha, XDim3 * p) } Real amax = n.x + n.y + n.z; - if (alpha <= 0. || alpha >= amax) { +// Print() << " plane_area_center " <<"("< amax) { p->x = p->y = p->z = 0.; return 0.; } @@ -442,15 +452,22 @@ Real vof_plane_alpha (XDim3 * m, Real c) AMREX_ASSERT(c >= 0. && c <= 1.); AMREX_ASSERT(m != NULL); + // made change to avoid the numerical issue for + // full cell that has empty cell in the face neighbor. + if (c == 1. ) + c =1.-EPS; + Real alpha; XDim3 n; - +// m->x =1., m->y=0., m->z=0., c=1.; +// Print()<<"vector"<x<<" "<y<<" "<z<<" "<<"vof "<x); n.y = fabs (m->y); n.z = fabs (m->z); Real m1, m2, m3; m1 = MIN(n.x, n.y); m3 = MAX(n.x, n.y); m2 = n.z; +// Print()<<"vector 1 "<y < 0.) alpha += m->y; if (m->z < 0.) - alpha += m->z; - + alpha += m->z; +// Print()<<"alpha---- "< const & v, Real F(3,3,3)) + Array4 const & v, + AMREX_D_PICK( , + Real fv[3][3], + Real fv[3][3][3])) { int x, y, z = 0; - F(1,1,1) = v (AMREX_D_DECL(i,j,k)); + AMREX_D_PICK(0,fv[1][1],fv[1][1][1]) = v (AMREX_D_DECL(i,j,k)); #if AMREX_SPACEDIM == 3 for (z = -1; z <= 1; z++) #endif for (x = -1; x <= 1; x++) for (y = -1; y <= 1; y++) if (x != 0 || y != 0 || z != 0) - F(x + 1, y + 1, z + 1) = v(AMREX_D_DECL(i+x,j+y,k+z)); + AMREX_D_PICK(,fv[x + 1][y+1],fv[x + 1][y+1][z+1])=v(AMREX_D_DECL(i+x,j+y,k+z)); + + /* boundary conditions (symmetry) */ #if AMREX_SPACEDIM == 2 for (x = 0; x <= 2; x++) { - if (f[x][0] < 0.) f[x][0] = f[x][1]; - if (f[x][2] < 0.) f[x][2] = f[x][1]; + if (fv[x][0] < 0.) fv[x][0] = fv[x][1]; + if (fv[x][2] < 0.) fv[x][2] = fv[x][1]; } for (y = 0; y <= 2; y++) { - if (f[0][y] < 0.) f[0][y] = f[1][y]; - if (f[2][y] < 0.) f[2][y] = f[1][y]; + if (fv[0][y] < 0.) fv[0][y] = fv[1][y]; + if (fv[2][y] < 0.) fv[2][y] = fv[1][y]; } #else /* 3D */ for (x = 0; x <= 2; x++) for (y = 0; y <= 2; y++) { - if (f[x][y][0] < 0.) f[x][y][0] = f[x][y][1]; - if (f[x][y][2] < 0.) f[x][y][2] = f[x][y][1]; + if (fv[x][y][0] < 0.) fv[x][y][0] = fv[x][y][1]; + if (fv[x][y][2] < 0.) fv[x][y][2] = fv[x][y][1]; } for (x = 0; x <= 2; x++) for (z = 0; z <= 2; z++) { - if (f[x][0][z] < 0.) f[x][0][z] = f[x][1][z]; - if (f[x][2][z] < 0.) f[x][2][z] = f[x][1][z]; + if (fv[x][0][z] < 0.) fv[x][0][z] = fv[x][1][z]; + if (fv[x][2][z] < 0.) fv[x][2][z] = fv[x][1][z]; } for (z = 0; z <= 2; z++) for (y = 0; y <= 2; y++) { - if (f[0][y][z] < 0.) f[0][y][z] = f[1][y][z]; - if (f[2][y][z] < 0.) f[2][y][z] = f[1][y][z]; + if (fv[0][y][z] < 0.) fv[0][y][z] = fv[1][y][z]; + if (fv[2][y][z] < 0.) fv[2][y][z] = fv[1][y][z]; } #endif /* 3D */ } +bool interface_cell (AMREX_D_DECL(int const i, int const j, int const k), + Array4 const & v, Real fc) +{ + if (fc == 1.){ +//when a full cell has an empty cell in its face neighbor (i.e., +-x,+-y,+-z) +// we also need to +// calculate the normal and alpha of the cut plane. + for (int dim=0; dim const& tracer) { @@ -578,38 +625,40 @@ VolumeOfFluid::tracer_vof_update(Vector const& tracer) { auto fvol = vof(i,j,k,0); THRESHOLD(fvol); - if (CELL_IS_FULL(fvol)) { + if (!interface_cell (AMREX_D_DECL(i,j,k), vof, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, mv(i,j,k,2) = Real(0.);); al(i,j,k) = fvol; } else { - Real F(3,3,3); - XDim3 m; + AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) + XDim3 m; stencil (AMREX_D_DECL(i,j,k), vof, f); mycs (f, &m.x); Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) - for (int d = 0; d < AMREX_SPACEDIM; d++) - mv(i,j,k,d)= (&m.x)[d]/n; + for (int d = 0; d < AMREX_SPACEDIM; d++) + mv(i,j,k,d)= (&m.x)[d]/n; else {/* fixme: this is a small fragment */ - AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, - mv(i,j,k,1) = Real(0.);, - mv(i,j,k,2) = Real(0.);); + AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); } for (int d = 0; d < AMREX_SPACEDIM; d++) (&m.x)[d]= mv(i,j,k,d); + // Print() <<" normal direction "<< m.x<<" "< 2) - // Print() << " normal direction " << m[0]<<" "<maxLevel(); - EB2::Build(gshop, a_incflo->Geom(max_level), max_level, max_level); + EB2::Build(gshop, a_incflo->Geom(max_level), max_level, max_level); + + + } auto fact = amrex::makeEBFabFactory(geom, a_tracer.boxArray(), a_tracer.DistributionMap(), - {1,0,0}, EBSupport::volume); + {1,1,0}, EBSupport::volume); auto const& volfrac = fact->getVolFrac(); - MultiFab::Copy(a_tracer, volfrac, 0, 0, 1, 0); + MultiFab::Copy(a_tracer, volfrac, 0, 0, 1, 1); if (lev == a_incflo->finestLevel()) { EB2::IndexSpace::pop(); @@ -725,7 +795,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) int myproc = ParallelDescriptor::MyProc(); int nprocs = ParallelDescriptor::NProcs(); amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; - const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep); + const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+"_"; const int nfiles = 1; @@ -768,23 +838,23 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) for (int i = lo.x; i <= hi.x; ++i) { auto fvol = vof(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ + if (interface_cell (AMREX_D_DECL(i,j,k), vof, fvol)){ Real alpha; XDim3 m, p, cell; for (int d = 0; d < AMREX_SPACEDIM; d++) { (&m.x)[d]= mv(i,j,k,d); } alpha= al(i,j,k,0); + //Print() << " ijk index " <<"("< Date: Fri, 21 Jun 2024 22:13:52 -0700 Subject: [PATCH 06/29] VOF module with required format --- src/incflo.H | 18 +-- src/incflo.cpp | 2 +- src/incflo_apply_predictor.cpp | 2 +- src/incflo_regrid.cpp | 10 +- src/vof/VolumeOfFluid.H | 2 +- src/vof/VolumeOfFluid.cpp | 200 ++++++++++++++++----------------- src/vof/incflo_vof.cpp | 2 +- src/vof/myc.h | 22 ++-- src/vof/myc2d.h | 16 +-- test_3d/inputs.droplet | 4 +- 10 files changed, 139 insertions(+), 139 deletions(-) diff --git a/src/incflo.H b/src/incflo.H index 2b03853cd..660e73cf6 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -201,12 +201,12 @@ public: amrex::Real dt_diff); /////////////////////////////////////////////////////////////////////////// - // - // tacer advection by VOF method - // - //////////////////////////////////////////////////////////////////////////// + // + // tacer advection by VOF method + // + //////////////////////////////////////////////////////////////////////////// - void tracer_vof_advection (amrex::Vector const& tracer, + void tracer_vof_advection (amrex::Vector const& tracer, AMREX_D_DECL(amrex::Vector const& u_mac, amrex::Vector const& v_mac, amrex::Vector const& w_mac)); @@ -670,8 +670,8 @@ private: std::unique_ptr m_diffusion_tensor_op; std::unique_ptr m_diffusion_scalar_op; - - //vof class pointer + + //vof class pointer std::unique_ptr p_volume_of_fluid; // // end of member variables @@ -752,8 +752,8 @@ private: DiffusionTensorOp* get_diffusion_tensor_op (); DiffusionScalarOp* get_diffusion_scalar_op (); - - VolumeOfFluid* get_volume_of_fluid (); + + VolumeOfFluid* get_volume_of_fluid (); amrex::Vector get_velocity_old () noexcept; amrex::Vector get_velocity_new () noexcept; diff --git a/src/incflo.cpp b/src/incflo.cpp index fea2940f5..7ef8f9e3e 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -161,7 +161,7 @@ void incflo::Evolve() { WritePlotFile(); get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); - get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); + get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); m_last_plt = m_nstep; } diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index 920eb46b3..52d6ba545 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -469,6 +469,6 @@ void incflo::ApplyPredictor (bool incremental_projection) // use vof to advect tracer tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), - GetVecOfConstPtrs(w_mac))); + GetVecOfConstPtrs(w_mac))); } diff --git a/src/incflo_regrid.cpp b/src/incflo_regrid.cpp index bdf4f4179..ff1eb3d0e 100644 --- a/src/incflo_regrid.cpp +++ b/src/incflo_regrid.cpp @@ -45,8 +45,8 @@ void incflo::MakeNewLevelFromCoarse (int lev, m_diffusion_tensor_op.reset(); m_diffusion_scalar_op.reset(); - - p_volume_of_fluid.reset(); + + p_volume_of_fluid.reset(); // Note: finest_level has not yet been updated and so we use lev #ifdef AMREX_USE_EB @@ -101,8 +101,8 @@ void incflo::RemakeLevel (int lev, Real time, const BoxArray& ba, m_diffusion_tensor_op.reset(); m_diffusion_scalar_op.reset(); - - p_volume_of_fluid.reset(); + + p_volume_of_fluid.reset(); #ifdef AMREX_USE_EB macproj = std::make_unique(Geom(0,finest_level), @@ -127,6 +127,6 @@ void incflo::ClearLevel (int lev) m_factory[lev].reset(); m_diffusion_tensor_op.reset(); m_diffusion_scalar_op.reset(); - p_volume_of_fluid.reset(); + p_volume_of_fluid.reset(); macproj.reset(); } diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index 7b2e04b4f..6eecae4be 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -16,7 +16,7 @@ public: AMREX_D_DECL(amrex::Vector const& u_mac, amrex::Vector const& v_mac, amrex::Vector const& w_mac), - amrex::Real dt); + amrex::Real dt); void write_tecplot_surface(amrex::Real time, int nstep); void WriteTecPlotFile (amrex::Real time, int nstep); diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index e57fa8553..4fe6c9024 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -52,8 +52,8 @@ static int connect[12][2][4] = { }; static void cube_plane_intersection (XDim3 cell, GpuArray dx, - XDim3 const * O, XDim3 const * n, XDim3 p[12], - int orient[12]) + XDim3 const * O, XDim3 const * n, XDim3 p[12], + int orient[12]) { XDim3 o; int i; @@ -61,7 +61,7 @@ static void cube_plane_intersection (XDim3 cell, GpuArray (&o.x)[i] = (&cell.x)[i]-Real(0.5)*dx[i]; for (i = 0; i < 12; i++) { XDim3 e, d; - Real h= i<4? dx[0]:(i<8?dx[1]:dx[2]); + Real h= i<4? dx[0]:(i<8?dx[1]:dx[2]); d.x = o.x + h*edge[i][0].x; d.y = o.y + h*edge[i][0].y; d.z = o.z + h*edge[i][0].z; e.x = o.x + h*edge[i][1].x; e.y = o.y + h*edge[i][1].y; e.z = o.z + h*edge[i][1].z; Real den = n->x*(e.x - d.x) + n->y*(e.y - d.y) + n->z*(e.z - d.z); @@ -69,8 +69,8 @@ static void cube_plane_intersection (XDim3 cell, GpuArray if (fabs (den) > 1e-10) { Real t = (n->x*(O->x - d.x) + n->y*(O->y - d.y) + n->z*(O->z - d.z))/den; if (t >= 0. && t < 1.) { - p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); - orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); + p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); + orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); } } } @@ -94,7 +94,7 @@ using NODE_CUT=Array; */ static int vof_cut_cube_vertices (XDim3 cell, GpuArray dx, XDim3 const * p, XDim3 const * n, - NODE_CUT & v, int d[12]) + NODE_CUT & v, int d[12]) { XDim3 a[12]; int orient[12]; @@ -113,7 +113,7 @@ static int vof_cut_cube_vertices (XDim3 cell, GpuArray dx, v[nv++] = a[e]; orient[e] = -1; while (m < 3 && orient[e] < 0) - e = ne[m++]; + e = ne[m++]; } if (nv > 2) return nv; @@ -140,12 +140,12 @@ struct Segment{ static void add_segment (XDim3 const & cell, GpuArray const & dx, Real alpha, XDim3 const * o, XDim3 const * m, - Vector & segments, int & nt, Real vof) + Vector & segments, int & nt, Real vof) { /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m - <<"vof"<<" "< cons AMREX_ASSERT (nnodecutface <= 6); /* Print()<<" add_segment "< 3) { /* reorder faces if necessary */ /* Tecplot can think that opposite vertices of the quadrilateral surface element are connected. This may result in ugly X-shaped surface elements. @@ -169,38 +169,38 @@ static void add_segment (XDim3 const & cell, GpuArray cons i_switchnodes++; for (inode = 0; inode < nnodecutface; inode++) { - XDim3 node = nodecutface[inode]; /* face node coordinates */ - XDim3 diff1 = {o->x - node.x, o->y - node.y, o->z - node.z}; - Real length_diff1 = vector_norm (&diff1); - Real max_sintheta = 0.; - /* cycle through all other nodes (jnode) where cut face intersects cell edges */ - for (inode2 = 1; inode2 < nnodecutface; inode2++) { - int jnode = (inode + inode2)%nnodecutface; - XDim3 diff2 = {nodecutface[jnode].x - node.x, - nodecutface[jnode].y - node.y, - nodecutface[jnode].z - node.z}; - Real length_diff2 = vector_norm (&diff2); - if (length_diff2 < 1e-20) /*Hua Tan(11-1-2016)*/ - return; - Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m->x + - (diff1.z*diff2.x - diff1.x*diff2.z)*m->y + - (diff1.x*diff2.y - diff1.y*diff2.x)*m->z)/ - (length_diff1*length_diff2); - - if (sintheta > max_sintheta) { - max_sintheta = sintheta; - jnode_max_sintheta = jnode; - } - } - /* terminate if cannot find positive angle between cut face nodes */ - AMREX_ASSERT (max_sintheta != 0.); + XDim3 node = nodecutface[inode]; /* face node coordinates */ + XDim3 diff1 = {o->x - node.x, o->y - node.y, o->z - node.z}; + Real length_diff1 = vector_norm (&diff1); + Real max_sintheta = 0.; + /* cycle through all other nodes (jnode) where cut face intersects cell edges */ + for (inode2 = 1; inode2 < nnodecutface; inode2++) { + int jnode = (inode + inode2)%nnodecutface; + XDim3 diff2 = {nodecutface[jnode].x - node.x, + nodecutface[jnode].y - node.y, + nodecutface[jnode].z - node.z}; + Real length_diff2 = vector_norm (&diff2); + if (length_diff2 < 1e-20) /*Hua Tan(11-1-2016)*/ + return; + Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m->x + + (diff1.z*diff2.x - diff1.x*diff2.z)*m->y + + (diff1.x*diff2.y - diff1.y*diff2.x)*m->z)/ + (length_diff1*length_diff2); + + if (sintheta > max_sintheta) { + max_sintheta = sintheta; + jnode_max_sintheta = jnode; + } + } + /* terminate if cannot find positive angle between cut face nodes */ + AMREX_ASSERT (max_sintheta != 0.); inode2 = (inode + 1)%nnodecutface; - if (jnode_max_sintheta != inode2) { - node = nodecutface[jnode_max_sintheta]; - nodecutface[jnode_max_sintheta] = nodecutface[inode2]; - nodecutface[inode2] = node; - switchnodes = true; - } + if (jnode_max_sintheta != inode2) { + node = nodecutface[jnode_max_sintheta]; + nodecutface[jnode_max_sintheta] = nodecutface[inode2]; + nodecutface[inode2] = node; + switchnodes = true; + } } /* inode-loop */ } while (switchnodes && i_switchnodes < 1000); /* avoid infinite loop */ } /* reorder faces if necessary */ @@ -259,7 +259,7 @@ Real vof_line_area_center (XDim3 const * m, Real alpha, XDim3 * p) } p->z = 0.; - //made change from "alpha>=n.x+n.y" to consider + //made change from "alpha>=n.x+n.y" to consider //the extreme cases if (alpha <= 0. || alpha > n.x + n.y) { p->x = p->y = 0.; @@ -455,8 +455,8 @@ Real vof_plane_alpha (XDim3 * m, Real c) // made change to avoid the numerical issue for // full cell that has empty cell in the face neighbor. if (c == 1. ) - c =1.-EPS; - + c =1.-EPS; + Real alpha; XDim3 n; // m->x =1., m->y=0., m->z=0., c=1.; @@ -492,9 +492,9 @@ Real vof_plane_alpha (XDim3 * m, Real c) mm = m12; V3 = mm/(2.*m3); } - + Real ch = MIN(c, 1. - c); -// Print()<<"vector 3 "<y < 0.) alpha += m->y; if (m->z < 0.) - alpha += m->z; + alpha += m->z; // Print()<<"alpha---- "< const & v, + Array4 const & v, AMREX_D_PICK( , Real fv[3][3], - Real fv[3][3][3])) + Real fv[3][3][3])) { int x, y, z = 0; AMREX_D_PICK(0,fv[1][1],fv[1][1][1]) = v (AMREX_D_DECL(i,j,k)); @@ -549,10 +549,10 @@ void stencil (AMREX_D_DECL(int const i, int const j, int const k), #endif for (x = -1; x <= 1; x++) for (y = -1; y <= 1; y++) - if (x != 0 || y != 0 || z != 0) - AMREX_D_PICK(,fv[x + 1][y+1],fv[x + 1][y+1][z+1])=v(AMREX_D_DECL(i+x,j+y,k+z)); + if (x != 0 || y != 0 || z != 0) + AMREX_D_PICK(,fv[x + 1][y+1],fv[x + 1][y+1][z+1])=v(AMREX_D_DECL(i+x,j+y,k+z)); + - /* boundary conditions (symmetry) */ #if AMREX_SPACEDIM == 2 for (x = 0; x <= 2; x++) { @@ -588,16 +588,16 @@ bool interface_cell (AMREX_D_DECL(int const i, int const j, int const k), if (fc == 1.){ //when a full cell has an empty cell in its face neighbor (i.e., +-x,+-y,+-z) // we also need to -// calculate the normal and alpha of the cut plane. +// calculate the normal and alpha of the cut plane. for (int dim=0; dim const& tracer) } else { AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) - XDim3 m; + XDim3 m; stencil (AMREX_D_DECL(i,j,k), vof, f); mycs (f, &m.x); Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) - for (int d = 0; d < AMREX_SPACEDIM; d++) - mv(i,j,k,d)= (&m.x)[d]/n; + for (int d = 0; d < AMREX_SPACEDIM; d++) + mv(i,j,k,d)= (&m.x)[d]/n; else {/* fixme: this is a small fragment */ - AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, mv(i,j,k,1) = Real(0.);, mv(i,j,k,2) = Real(0.);); - } - for (int d = 0; d < AMREX_SPACEDIM; d++) - (&m.x)[d]= mv(i,j,k,d); - // Print() <<" normal direction "<< m.x<<" "< const& tracer, AMREX_D_DECL(Vector const& u_mac, Vector const& v_mac, Vector const& w_mac), - Real dt) + Real dt) { amrex::Print() << " VOF Level#" << finest_level<<"\n"; @@ -711,7 +711,7 @@ tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) // EB2::SphereIF my_sphere(radius, center, fluid_is_inside); // auto gshop = EB2::makeShop(my_sphere); - + // Initialise cylinder parameters int direction = 0; @@ -726,13 +726,13 @@ tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) // auto my_cyl_rot = EB2::rotate(my_cyl, rotation, rotation_axe); // Generate GeometryShop - auto gshop = EB2::makeShop(my_cyl); - + auto gshop = EB2::makeShop(my_cyl); + int max_level = a_incflo->maxLevel(); - EB2::Build(gshop, a_incflo->Geom(max_level), max_level, max_level); - - - + EB2::Build(gshop, a_incflo->Geom(max_level), max_level, max_level); + + + } auto fact = amrex::makeEBFabFactory(geom, a_tracer.boxArray(), a_tracer.DistributionMap(), @@ -840,7 +840,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) if (interface_cell (AMREX_D_DECL(i,j,k), vof, fvol)){ Real alpha; - XDim3 m, p, cell; + XDim3 m, p, cell; for (int d = 0; d < AMREX_SPACEDIM; d++) { (&m.x)[d]= mv(i,j,k,d); } @@ -868,7 +868,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) TecplotFile <<", DATAPACKING=POINT"<<", NODES="< const& tracer = ld.tracer.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); @@ -1023,5 +1023,5 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } // end lev } - std::rename("output.txt", "x.out"); + std::rename("output.txt", "x.out"); } diff --git a/src/vof/incflo_vof.cpp b/src/vof/incflo_vof.cpp index fa48908dc..4166fa579 100644 --- a/src/vof/incflo_vof.cpp +++ b/src/vof/incflo_vof.cpp @@ -10,7 +10,7 @@ incflo::tracer_vof_advection(Vector const& tracer, Vector const& w_mac)) { get_volume_of_fluid()->tracer_vof_advection(tracer, - AMREX_D_DECL(u_mac,v_mac,w_mac), m_dt); + AMREX_D_DECL(u_mac,v_mac,w_mac), m_dt); } diff --git a/src/vof/myc.h b/src/vof/myc.h index ea4b317e0..508481cb8 100644 --- a/src/vof/myc.h +++ b/src/vof/myc.h @@ -1,9 +1,9 @@ #define NOT_ZERO 1.e-30 -/*-----------------------------------------------------* +/*-----------------------------------------------------* *MYC - Mixed Youngs and Central Scheme * *-----------------------------------------------------*/ -/* +/* Known problems: the index [1][1][1], i.e. the central cell in the block, never occurs: neither in the central scheme @@ -15,15 +15,15 @@ Ruben */ static void mycs(double c[3][3][3],double mxyz[3]) -{ +{ double m1,m2,m[4][3],t0,t1,t2; int cn; - /* write the plane as: sgn(mx) X = my Y + mz Z + alpha + /* write the plane as: sgn(mx) X = my Y + mz Z + alpha m00 X = m01 Y + m02 Z + alpha */ - m1 = c[0][1][0] + c[0][1][2] + c[0][0][1] + c[0][2][1] + + m1 = c[0][1][0] + c[0][1][2] + c[0][0][1] + c[0][2][1] + c[0][1][1]; - m2 = c[2][1][0] + c[2][1][2] + c[2][0][1] + c[2][2][1] + + m2 = c[2][1][0] + c[2][1][2] + c[2][0][1] + c[2][2][1] + c[2][1][1]; m[0][0] = m1 > m2 ? 1. : -1.; @@ -35,7 +35,7 @@ static void mycs(double c[3][3][3],double mxyz[3]) m2 = c[0][1][2]+ c[2][1][2]+ c[1][1][2]; m[0][2] = 0.5*(m1-m2); - /* write the plane as: sgn(my) Y = mx X + mz Z + alpha + /* write the plane as: sgn(my) Y = mx X + mz Z + alpha m11 Y = m10 X + m12 Z + alpha */ m1 = c[0][0][1] + c[0][2][1] + c[0][1][1]; m2 = c[2][0][1] + c[2][2][1] + c[2][1][1]; @@ -51,7 +51,7 @@ static void mycs(double c[3][3][3],double mxyz[3]) m2 = c[1][0][2]+ c[1][1][2]+ c[1][2][2]; m[1][2] = 0.5*(m1-m2); - /* write the plane as: sgn(mz) Z = mx X + my Y + alpha + /* write the plane as: sgn(mz) Z = mx X + my Y + alpha m22 Z = m20 X + m21 Y + alpha */ m1 = c[0][1][0]+ c[0][1][2]+ c[0][1][1]; @@ -84,7 +84,7 @@ static void mycs(double c[3][3][3],double mxyz[3]) m[2][1] /= t0; m[2][2] /= t0; - /* choose among the three central scheme */ + /* choose among the three central scheme */ t0 = fabs(m[0][0]); t1 = fabs(m[1][1]); t2 = fabs(m[2][2]); @@ -97,7 +97,7 @@ static void mycs(double c[3][3][3],double mxyz[3]) if (t2 > t0) cn = 2; - /* Youngs-CIAM scheme */ + /* Youngs-CIAM scheme */ m1 = c[0][0][0] + c[0][2][0] + c[0][0][2] + c[0][2][2] + 2.*(c[0][0][1] + c[0][2][1] + c[0][1][0] + c[0][1][2]) + 4.*c[0][1][1]; @@ -145,5 +145,5 @@ static void mycs(double c[3][3][3],double mxyz[3]) mxyz[1] = m[cn][1]; mxyz[2] = m[cn][2]; - return; + return; } diff --git a/src/vof/myc2d.h b/src/vof/myc2d.h index 7caf5402b..ad4b10881 100644 --- a/src/vof/myc2d.h +++ b/src/vof/myc2d.h @@ -8,7 +8,7 @@ static void mycs(double c[3][3],double mxy[2]) int ix; double c_t,c_b,c_r,c_l; double mx0,my0,mx1,my1,mm1,mm2; - + /* top, bottom, right and left sums of c values */ c_t = c[0][2] + c[1][2] + c[2][2]; c_b = c[0][0] + c[1][0] + c[2][0]; @@ -16,7 +16,7 @@ static void mycs(double c[3][3],double mxy[2]) c_l = c[0][0] + c[0][1] + c[0][2]; /* consider two lines: sgn(my) Y = mx0 X + alpha, - and: sgn(mx) X = my0 Y + alpha */ + and: sgn(mx) X = my0 Y + alpha */ mx0 = 0.5*(c_l-c_r); my0 = 0.5*(c_b-c_t); @@ -38,9 +38,9 @@ static void mycs(double c[3][3],double mxy[2]) mm2 = c[0][2] + 2.0*c[1][2] + c[2][2]; my1 = mm1 - mm2; - /* choose between the best central and Youngs' scheme */ + /* choose between the best central and Youngs' scheme */ if (ix) { - mm1 = fabs(my1) + NOT_ZERO; + mm1 = fabs(my1) + NOT_ZERO; mm1 = fabs(mx1)/mm1; if (mm1 > fabs(mx0)) { mx0 = mx1; @@ -48,19 +48,19 @@ static void mycs(double c[3][3],double mxy[2]) } } else { - mm1 = fabs(mx1) + NOT_ZERO; + mm1 = fabs(mx1) + NOT_ZERO; mm1 = fabs(my1)/mm1; if (mm1 > fabs(my0)) { mx0 = mx1; my0 = my1; } } - + /* normalize the set (mx0,my0): |mx0|+|my0|=1 and write the two components of the normal vector */ - mm1 = fabs(mx0) + fabs(my0) + NOT_ZERO; + mm1 = fabs(mx0) + fabs(my0) + NOT_ZERO; mxy[0] = mx0/mm1; mxy[1] = my0/mm1; - + return; } diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 38f73c3b1..c0b3e868d 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -30,9 +30,9 @@ incflo.mu = 1.0 # Dynamic viscosity coefficient #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 64 64 64 # Grid cells at coarsest AMRlevel +amr.n_cell = 32 32 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 32 32 32 +amr.max_grid_size = 16 16 16 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # From 62578c355447662a573bac956f83dbe6ebae5d6f Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Wed, 10 Jul 2024 10:45:58 -0700 Subject: [PATCH 07/29] vof advection is done w/o BCs --- src/incflo.cpp | 11 +- src/incflo_apply_predictor.cpp | 8 +- src/prob/incflo_prob_I.H | 2 +- src/prob/prob_init_fluid.cpp | 31 +- src/vof/VolumeOfFluid.H | 11 +- src/vof/VolumeOfFluid.cpp | 1621 ++++++++++++++++++++++++++------ test_3d/inputs.droplet | 25 +- 7 files changed, 1398 insertions(+), 311 deletions(-) diff --git a/src/incflo.cpp b/src/incflo.cpp index c2feec3c8..d53edaf18 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -155,7 +155,12 @@ void incflo::Evolve() printGridSummary(amrex::OutStream(), 0, finest_level); } } - + get_volume_of_fluid()->output_droplet(m_cur_time,m_nstep); + get_volume_of_fluid()->apply_velocity_field(m_cur_time,m_nstep); + if (writeNow()){ + get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); + get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); + } // Advance to time t + dt Advance(); m_nstep++; @@ -164,8 +169,8 @@ void incflo::Evolve() if (writeNow()) { WritePlotFile(); - get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); - get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); + //get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); + //get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); m_last_plt = m_nstep; } diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index 546029d1d..00ef06a35 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -194,7 +194,7 @@ void incflo::ApplyPredictor (bool incremental_projection) // ********************************************************************************************** // Project velocity field, update pressure // ********************************************************************************************** - ApplyProjection(get_density_nph_const(),new_time,m_dt,incremental_projection); +//Hua ApplyProjection(get_density_nph_const(),new_time,m_dt,incremental_projection); #ifdef INCFLO_USE_PARTICLES // ************************************************************************************** @@ -217,8 +217,8 @@ void incflo::ApplyPredictor (bool incremental_projection) #endif // use vof to advect tracer - - tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), - GetVecOfConstPtrs(w_mac))); + if (!incremental_projection) + tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), + GetVecOfConstPtrs(w_mac))); } diff --git a/src/prob/incflo_prob_I.H b/src/prob/incflo_prob_I.H index f056831fd..31cf42a14 100644 --- a/src/prob/incflo_prob_I.H +++ b/src/prob/incflo_prob_I.H @@ -165,7 +165,7 @@ amrex::GpuArray const& problo, amrex::GpuArray const& probhi) const; - void droplet (amrex::Box const& vbx, amrex::Box const& gbx, + void init_droplet (amrex::Box const& vbx, amrex::Box const& gbx, amrex::Array4 const& vel, amrex::Array4 const& density, amrex::Array4 const& tracer, diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 9e9383123..73f7876da 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -187,6 +187,12 @@ void incflo::prob_init_fluid (int lev) } else if (1109 == m_probtype) { + /*init_droplet(vbx, gbx, + ld.velocity.array(mfi), + ld.density.array(mfi), + ld.tracer.array(mfi), + domain, dx, problo, probhi);*/ + } else { @@ -195,7 +201,7 @@ void incflo::prob_init_fluid (int lev) } if (1109 == m_probtype) { - tracer_vof_init_fraction(lev, ld.tracer, this); + get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); } } @@ -1127,3 +1133,26 @@ void incflo::init_burggraf (Box const& vbx, Box const& /*gbx*/, #endif }); } + +void incflo::init_droplet (Box const& vbx, Box const& /*gbx*/, + Array4 const& vel, + Array4 const& /*density*/, + Array4 const& /*tracer*/, + Box const& /*domain*/, + GpuArray const& dx, + GpuArray const& /*problo*/, + GpuArray const& /*probhi*/) +{ + ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real x = Real(i+0.5)*dx[0]; + Real y = Real(j+0.5)*dx[1]; + Real z = Real(k+0.5)*dx[2]; + Real pi = 3.14159265357; + vel(i,j,k,0) = 2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); + vel(i,j,k,1) = -sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); +#if (AMREX_SPACEDIM == 3) + vel(i,j,k,2) = -sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*0./3.); +#endif + }); +} diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index 6eecae4be..b87c52349 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -17,20 +17,25 @@ public: amrex::Vector const& v_mac, amrex::Vector const& w_mac), amrex::Real dt); + void tracer_vof_init_fraction(int lev, amrex::MultiFab& a_tracer); + void tracer_vof_update(int lev, amrex::MultiFab & a_tracer); void write_tecplot_surface(amrex::Real time, int nstep); void WriteTecPlotFile (amrex::Real time, int nstep); + void output_droplet (amrex::Real time, int nstep); + void apply_velocity_field(amrex::Real time, int nstep); // normal vector of interface amrex::Vector normal; // the plane defined by @m.@x = @alpha amrex::Vector alpha; +// the tag for droplets + amrex::Vector tag; private: incflo* v_incflo; //incflo object int finest_level; -void tracer_vof_update(amrex::Vector const& tracer); - +int n_tag = 0; }; -void tracer_vof_init_fraction(int lev, amrex::MultiFab& a_tracer, incflo const* a_incflo); + #endif diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 4fe6c9024..63d2cfeaa 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -14,19 +14,25 @@ using namespace amrex; #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) +#define CLAMP(x,a,b) ((x) < (a) ? (a) : (x) > (b) ? (b) : (x)) +////////////////////////////////////////////////////////////////////////////// +//// +//// +///////////////////////////////////////////////////////////////////////////// VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) { finest_level = v_incflo->finestLevel(); + // ************************************************************************************* // Allocate space for the information of the interface segments // ************************************************************************************* for (int lev = 0; lev <= finest_level; ++lev){ - normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, 1, MFInfo(), v_incflo->Factory(lev)); - alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, 1, MFInfo(), v_incflo->Factory(lev)); + normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); } - } static XDim3 edge[12][2] = { {{0.,0.,0.},{1.,0.,0.}},{{0.,0.,1.},{1.,0.,1.}},{{0.,1.,1.},{1.,1.,1.}},{{0.,1.,0.},{1.,1.,0.}}, @@ -51,34 +57,51 @@ static int connect[12][2][4] = { {{2, 10, 3, 2}, {4, 8, 5, 1}} /* 11 */ }; -static void cube_plane_intersection (XDim3 cell, GpuArray dx, - XDim3 const * O, XDim3 const * n, XDim3 p[12], - int orient[12]) +static void cube_plane_intersection (XDim3 center, GpuArray dx, + XDim3 const & O, XDim3 const & n, Array & p, int orient[12]) { XDim3 o; int i; + /* use the corner of the cube as origin of the coordinate sys*/ for (i=0; ix*(e.x - d.x) + n->y*(e.y - d.y) + n->z*(e.z - d.z); + /* calculate the product of the edge vector and the intersecting plane normal vector */ + Real den = n.x*(e.x - d.x) + n.y*(e.y - d.y) + n.z*(e.z - d.z); orient[i] = -1; + /* only when the edge is not parallel with the plane */ if (fabs (den) > 1e-10) { - Real t = (n->x*(O->x - d.x) + n->y*(O->y - d.y) + n->z*(O->z - d.z))/den; - if (t >= 0. && t < 1.) { + Real t = (n.x*(O.x - d.x) + n.y*(O.y - d.y) + n.z*(O.z - d.z))/den; + if (t >= 0. && t <= 1.) { p[i].x = d.x + t*(e.x - d.x); p[i].y = d.y + t*(e.y - d.y); p[i].z = d.z + t*(e.z - d.z); - orient[i] = (n->x*(e.x - O->x) + n->y*(e.y - O->y) + n->z*(e.z - O->z) > 0.); + orient[i] = (n.x*(e.x - O.x) + n.y*(e.y - O.y) + n.z*(e.z - O.z) >= 0.); } } } + + /* for (i = 0; i < 12; i++) + if(orient[i]>=0) + for (int j=i+1; j<12; j++) + if(orient[j]>=0) { + Real dist = (p[i].x-p[j].x)*(p[i].x-p[j].x)+ + (p[i].y-p[j].y)*(p[i].y-p[j].y)+ + (p[i].z-p[j].z)*(p[i].z-p[j].z); + if (dist < EPS*(dx[0]*dx[0]+dx[1]*dx[1]+dx[2]*dx[2])) + orient[j]=-1; + }*/ + + } -using NODE_CUT=Array; + /** - * vof_cut_cube_vertices: - * @cell: a #FttCell. + * cut_cube_vertices: + * @center: the coordinates of the cell center * @p: a point on the plane. * @n: the normal to the plane. * @v: where to return the vertices coordinates. @@ -92,31 +115,61 @@ using NODE_CUT=Array; * * Returns: the number of vertices (0 if the plane does not cut the cell). */ -static int vof_cut_cube_vertices (XDim3 cell, GpuArray dx, - XDim3 const * p, XDim3 const * n, - NODE_CUT & v, int d[12]) +static int cut_cube_vertices (XDim3 center, GpuArray dx, + XDim3 const & p, XDim3 const & n, + Array & v, int d[12]) { - XDim3 a[12]; + Array a; int orient[12]; int i; - AMREX_ASSERT (p != NULL); - - - - cube_plane_intersection (cell, dx, p, n, a, orient); + cube_plane_intersection (center, dx, p, n, a, orient); for (i = 0; i < 12; i++) { int nv = 0, e = i; + bool duplicate = false; while (orient[e] >= 0) { int m = 0, * ne = connect[e][orient[e]]; d[nv] = ne[3]; v[nv++] = a[e]; orient[e] = -1; while (m < 3 && orient[e] < 0) - e = ne[m++]; + e = ne[m++]; } - if (nv > 2) + if (nv > 2){ + + if (nv > 4){ + /* there may exists duplicate points stored in v[] */ + int fnv=0; + for (i = 0; i < nv; i++) { + if (d[i]>=0) + for (int j=i+1; j=0) { + Real dist = (v[i].x-v[j].x)*(v[i].x-v[j].x)+ + (v[i].y-v[j].y)*(v[i].y-v[j].y)+ + (v[i].z-v[j].z)*(v[i].z-v[j].z); + if (dist < EPS*(dx[0]*dx[0]+dx[1]*dx[1]+dx[2]*dx[2])){ + d[j]=-1; + fnv++; + } + } + } + if (fnv > 0){ + i=1; + while (i const& nodes, XDim3 m, Real a, Real f, Real t, int ns=0) + : nnodes(n), mv (m), alpha (a), vof(f), tag(t) { for (int i = 0; i < n; ++i) node[i]= nodes[ns==0?i:(i + 3)%(n + 2)]; } }; -static void add_segment (XDim3 const & cell, GpuArray const & dx, - Real alpha, XDim3 const * o, XDim3 const * m, - Vector & segments, int & nt, Real vof) +static void add_segment (XDim3 const & center, GpuArray const & dx, + Real alpha, XDim3 const & o, XDim3 const & m, + Vector & segments, int & nt, Real vof, Real tag) { /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m @@ -148,9 +201,9 @@ static void add_segment (XDim3 const & cell, GpuArray cons int d[12]; /* array of node coordinates for a cut face */ - NODE_CUT nodecutface; + Array nodecutface; int inode, inode2, jnode_max_sintheta = 0, - nnodecutface = vof_cut_cube_vertices (cell, dx, o, m, nodecutface, d); + nnodecutface = cut_cube_vertices (center, dx, o, m, nodecutface, d); AMREX_ASSERT (nnodecutface <= 6); /* Print()<<" add_segment "< cons for (inode = 0; inode < nnodecutface; inode++) { XDim3 node = nodecutface[inode]; /* face node coordinates */ - XDim3 diff1 = {o->x - node.x, o->y - node.y, o->z - node.z}; + XDim3 diff1 = {o.x - node.x, o.y - node.y, o.z - node.z}; Real length_diff1 = vector_norm (&diff1); + if (length_diff1 < 1e-20) /*degenerated case*/ + return; Real max_sintheta = 0.; /* cycle through all other nodes (jnode) where cut face intersects cell edges */ for (inode2 = 1; inode2 < nnodecutface; inode2++) { @@ -180,11 +235,11 @@ static void add_segment (XDim3 const & cell, GpuArray cons nodecutface[jnode].y - node.y, nodecutface[jnode].z - node.z}; Real length_diff2 = vector_norm (&diff2); - if (length_diff2 < 1e-20) /*Hua Tan(11-1-2016)*/ + if (length_diff2 < 1e-20) return; - Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m->x + - (diff1.z*diff2.x - diff1.x*diff2.z)*m->y + - (diff1.x*diff2.y - diff1.y*diff2.x)*m->z)/ + Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m.x + + (diff1.z*diff2.x - diff1.x*diff2.z)*m.y + + (diff1.x*diff2.y - diff1.y*diff2.x)*m.z)/ (length_diff1*length_diff2); if (sintheta > max_sintheta) { @@ -193,8 +248,10 @@ static void add_segment (XDim3 const & cell, GpuArray cons } } /* terminate if cannot find positive angle between cut face nodes */ + if (max_sintheta == 0.) + return; AMREX_ASSERT (max_sintheta != 0.); - inode2 = (inode + 1)%nnodecutface; + inode2 = (inode + 1)%nnodecutface; if (jnode_max_sintheta != inode2) { node = nodecutface[jnode_max_sintheta]; nodecutface[jnode_max_sintheta] = nodecutface[inode2]; @@ -214,26 +271,26 @@ static void add_segment (XDim3 const & cell, GpuArray cons /* assign data to nodeinfo array, increment number of wall faces and number of nodes */ if (nnodecutface <= 4) { nt += nnodecutface; - segments.emplace_back(nnodecutface, nodecutface, *m, alpha, vof); + segments.emplace_back(nnodecutface, nodecutface, m, alpha, vof, tag); //Print() << " normal direction " < cons * * Returns: the length of the facet. */ -Real vof_line_area_center (XDim3 const * m, Real alpha, XDim3 * p) +Real line_area_center (XDim3 const & m, Real alpha, XDim3 & p) { XDim3 n; - n = *m; + n = m; if (n.x < 0.) { alpha -= n.x; n.x = - n.x; @@ -258,57 +315,57 @@ Real vof_line_area_center (XDim3 const * m, Real alpha, XDim3 * p) n.y = - n.y; } - p->z = 0.; + p.z = 0.; //made change from "alpha>=n.x+n.y" to consider //the extreme cases if (alpha <= 0. || alpha > n.x + n.y) { - p->x = p->y = 0.; + p.x = p.y = 0.; return 0.; } if (n.x < EPS) { - p->x = 0.5; - p->y = m->y < 0. ? 1. - alpha : alpha; + p.x = 0.5; + p.y = m.y < 0. ? 1. - alpha : alpha; return 1.; } if (n.y < EPS) { - p->y = 0.5; - p->x = m->x < 0. ? 1. - alpha : alpha; + p.y = 0.5; + p.x = m.x < 0. ? 1. - alpha : alpha; return 1.; } - p->x = p->y = 0.; + p.x = p.y = 0.; if (alpha >= n.x) { - p->x += 1.; - p->y += (alpha - n.x)/n.y; + p.x += 1.; + p.y += (alpha - n.x)/n.y; } else - p->x += alpha/n.x; + p.x += alpha/n.x; - Real ax = p->x, ay = p->y; + Real ax = p.x, ay = p.y; if (alpha >= n.y) { - p->y += 1.; + p.y += 1.; ay -= 1.; - p->x += (alpha - n.y)/n.x; + p.x += (alpha - n.y)/n.x; ax -= (alpha - n.y)/n.x; } else { - p->y += alpha/n.y; + p.y += alpha/n.y; ay -= alpha/n.y; } - p->x /= 2.; - p->y /= 2.; + p.x /= 2.; + p.y /= 2.; - THRESHOLD (p->x); - THRESHOLD (p->y); + THRESHOLD (p.x); + THRESHOLD (p.y); - if (m->x < 0.) - p->x = 1. - p->x; - if (m->y < 0.) - p->y = 1. - p->y; + if (m.x < 0.) + p.x = 1. - p.x; + if (m.y < 0.) + p.y = 1. - p.y; return sqrt (ax*ax + ay*ay); @@ -316,7 +373,7 @@ Real vof_line_area_center (XDim3 const * m, Real alpha, XDim3 * p) /** - * vof_plane_area_center: + * plane_area_center: * @m: normal to the plane. * @alpha: plane constant. * @p: a #amrex::XDim3. @@ -326,36 +383,36 @@ Real vof_line_area_center (XDim3 const * m, Real alpha, XDim3 * p) * * Returns: the area of the facet. */ -Real vof_plane_area_center (XDim3 const * m, Real alpha, XDim3 * p) +Real plane_area_center (XDim3 const & m, Real alpha, XDim3 & p) { - if (fabs (m->x) < EPS) { + if (fabs (m.x) < EPS) { XDim3 n, q; - n.x = m->y; - n.y = m->z; - Real area = vof_line_area_center (&n, alpha, &q); - p->x = 0.5; - p->y = q.x; - p->z = q.y; + n.x = m.y; + n.y = m.z; + Real area = line_area_center (n, alpha, q); + p.x = 0.5; + p.y = q.x; + p.z = q.y; return area; } - if (fabs (m->y) < EPS) { + if (fabs (m.y) < EPS) { XDim3 n, q; - n.x = m->z; - n.y = m->x; - Real area = vof_line_area_center (&n, alpha, &q); - p->x = q.y; - p->y = 0.5; - p->z = q.x; + n.x = m.z; + n.y = m.x; + Real area = line_area_center (n, alpha, q); + p.x = q.y; + p.y = 0.5; + p.z = q.x; return area; } - if (fabs (m->z) < EPS) { - Real area = vof_line_area_center (m, alpha, p); - p->z = 0.5; + if (fabs (m.z) < EPS) { + Real area = line_area_center (m, alpha, p); + p.z = 0.5; return area; } - XDim3 n = *m; + XDim3 n = m; if (n.x < 0.) { alpha -= n.x; n.x = - n.x; @@ -372,86 +429,138 @@ Real vof_plane_area_center (XDim3 const * m, Real alpha, XDim3 * p) Real amax = n.x + n.y + n.z; // Print() << " plane_area_center " <<"("< amax) { - p->x = p->y = p->z = 0.; + p.x = p.y = p.z = 0.; return 0.; } Real area = alpha*alpha; - p->x = p->y = p->z = area*alpha; + p.x = p.y = p.z = area*alpha; Real b = alpha - n.x; if (b > 0.) { area -= b*b; - p->x -= b*b*(2.*n.x + alpha); - p->y -= b*b*b; - p->z -= b*b*b; + p.x -= b*b*(2.*n.x + alpha); + p.y -= b*b*b; + p.z -= b*b*b; } b = alpha - n.y; if (b > 0.) { area -= b*b; - p->y -= b*b*(2.*n.y + alpha); - p->x -= b*b*b; - p->z -= b*b*b; + p.y -= b*b*(2.*n.y + alpha); + p.x -= b*b*b; + p.z -= b*b*b; } b = alpha - n.z; if (b > 0.) { area -= b*b; - p->z -= b*b*(2.*n.z + alpha); - p->x -= b*b*b; - p->y -= b*b*b; + p.z -= b*b*(2.*n.z + alpha); + p.x -= b*b*b; + p.y -= b*b*b; } amax = alpha - amax; b = amax + n.x; if (b > 0.) { area += b*b; - p->y += b*b*(2.*n.y + alpha - n.z); - p->z += b*b*(2.*n.z + alpha - n.y); - p->x += b*b*b; + p.y += b*b*(2.*n.y + alpha - n.z); + p.z += b*b*(2.*n.z + alpha - n.y); + p.x += b*b*b; } b = amax + n.y; if (b > 0.) { area += b*b; - p->x += b*b*(2.*n.x + alpha - n.z); - p->z += b*b*(2.*n.z + alpha - n.x); - p->y += b*b*b; + p.x += b*b*(2.*n.x + alpha - n.z); + p.z += b*b*(2.*n.z + alpha - n.x); + p.y += b*b*b; } b = amax + n.z; if (b > 0.) { area += b*b; - p->x += b*b*(2.*n.x + alpha - n.y); - p->y += b*b*(2.*n.y + alpha - n.x); - p->z += b*b*b; + p.x += b*b*(2.*n.x + alpha - n.y); + p.y += b*b*(2.*n.y + alpha - n.x); + p.z += b*b*b; } area *= 3.; - p->x /= area*n.x; - p->y /= area*n.y; - p->z /= area*n.z; + p.x /= area*n.x; + p.y /= area*n.y; + p.z /= area*n.z; - THRESHOLD (p->x); - THRESHOLD (p->y); - THRESHOLD (p->z); + THRESHOLD (p.x); + THRESHOLD (p.y); + THRESHOLD (p.z); - if (m->x < 0.) p->x = 1. - p->x; - if (m->y < 0.) p->y = 1. - p->y; - if (m->z < 0.) p->z = 1. - p->z; + if (m.x < 0.) p.x = 1. - p.x; + if (m.y < 0.) p.y = 1. - p.y; + if (m.z < 0.) p.z = 1. - p.z; return area*sqrt (1./(n.x*n.x*n.y*n.y) + 1./(n.x*n.x*n.z*n.z) + 1./(n.z*n.z*n.y*n.y))/6.; } /** - * vof_plane_alpha: + * plane_volume: + * @m: normal to the plane. + * @alpha: plane constant. + * + * Returns: the volume of a cell lying under the plane (@m,@alpha). + */ +Real plane_volume (Array &m, Real alpha) +{ + + Real al = alpha + MAX(0., -m[0]) + MAX(0., -m[1]) + MAX(0., -m[2]); + if (al <= 0.) + return 0.; + Real tmp = fabs(m[0]) + fabs(m[1]) + fabs(m[2]); + if (al >= tmp) + return 1.; + AMREX_ASSERT (tmp > 0.); + Real n1 = fabs(m[0])/tmp; + Real n2 = fabs(m[1])/tmp; + Real n3 = fabs(m[2])/tmp; + al = MAX(0., MIN(1., al/tmp)); + Real al0 = MIN(al, 1. - al); + Real b1 = MIN(n1*1, n2); + Real b3 = MAX(n1*1, n2); + Real b2 = n3; + if (b2 < b1) { + tmp = b1; + b1 = b2; + b2 = tmp; + } + else if (b2 > b3) { + tmp = b3; + b3 = b2; + b2 = tmp; + } + Real b12 = b1 + b2; + Real bm = MIN(b12, b3); + Real pr = MAX(6.*b1*b2*b3, 1e-50); + if (al0 < b1) + tmp = al0*al0*al0/pr; + else if (al0 < b2) + tmp = 0.5*al0*(al0 - b1)/(b2*b3) + b1*b1*b1/pr; + else if (al0 < bm) + tmp = (al0*al0*(3.*b12 - al0) + b1*b1*(b1 - 3.*al0) + b2*b2*(b2 - 3.*al0))/pr; + else if (b12 < b3) + tmp = (al0 - 0.5*bm)/b3; + else + tmp = (al0*al0*(3. - 2.*al0) + b1*b1*(b1 - 3.*al0) + + b2*b2*(b2 - 3.*al0) + b3*b3*(b3 - 3.*al0))/pr; + + Real volume = al <= 0.5 ? tmp : 1. - tmp; + return CLAMP (volume, 0., 1.); +} +/** + * plane_alpha: * * Returns: the value @alpha such that the volume of a cubic cell * lying under the plane defined by @m.@x = @alpha is equal to @c. */ -Real vof_plane_alpha (XDim3 * m, Real c) +Real plane_alpha (XDim3 & m, Real c) { AMREX_ASSERT(c >= 0. && c <= 1.); - AMREX_ASSERT(m != NULL); // made change to avoid the numerical issue for // full cell that has empty cell in the face neighbor. if (c == 1. ) @@ -459,9 +568,9 @@ Real vof_plane_alpha (XDim3 * m, Real c) Real alpha; XDim3 n; -// m->x =1., m->y=0., m->z=0., c=1.; -// Print()<<"vector"<x<<" "<y<<" "<z<<" "<<"vof "<x); n.y = fabs (m->y); n.z = fabs (m->z); +// m.x =0., m.y=-0.5, m.z=0.5, c=.5; +// Print()<<"vector"< 1./2.) alpha = 1. - alpha; - if (m->x < 0.) - alpha += m->x; - if (m->y < 0.) - alpha += m->y; - if (m->z < 0.) - alpha += m->z; + if (m.x < 0.) + alpha += m.x; + if (m.y < 0.) + alpha += m.y; + if (m.z < 0.) + alpha += m.z; // Print()<<"alpha---- "< const & v, AMREX_D_PICK( , Real fv[3][3], Real fv[3][3][3])) { int x, y, z = 0; - AMREX_D_PICK(0,fv[1][1],fv[1][1][1]) = v (AMREX_D_DECL(i,j,k)); + AMREX_D_PICK(0,fv[1][1],fv[1][1][1]) = v (i,j,k); #if AMREX_SPACEDIM == 3 for (z = -1; z <= 1; z++) #endif for (x = -1; x <= 1; x++) for (y = -1; y <= 1; y++) if (x != 0 || y != 0 || z != 0) - AMREX_D_PICK(,fv[x + 1][y+1],fv[x + 1][y+1][z+1])=v(AMREX_D_DECL(i+x,j+y,k+z)); + AMREX_D_PICK(,fv[x + 1][y+1],fv[x + 1][y+1][z+1])=v(i+x,j+y,k+z); /* boundary conditions (symmetry) */ @@ -582,7 +691,7 @@ void stencil (AMREX_D_DECL(int const i, int const j, int const k), #endif /* 3D */ } -bool interface_cell (AMREX_D_DECL(int const i, int const j, int const k), +bool interface_cell (int const i, int const j, int const k, Array4 const & v, Real fc) { if (fc == 1.){ @@ -591,9 +700,9 @@ bool interface_cell (AMREX_D_DECL(int const i, int const j, int const k), // calculate the normal and alpha of the cut plane. for (int dim=0; dim const& tracer) +VolumeOfFluid::tracer_vof_update(int lev, MultiFab & vof_mf) { - for (int lev = 0; lev <= finest_level; ++lev) { - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); - - auto& vof_mf = tracer[lev]; - - for (MFIter mfi(*vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { - Box const& bx = mfi.tilebox(); - Array4 const& vof = vof_mf->array(mfi); - Array4 const& mv = normal[lev].array(mfi); - Array4 const& al = alpha[lev].array(mfi); - ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof(i,j,k,0); - THRESHOLD(fvol); - if (!interface_cell (AMREX_D_DECL(i,j,k), vof, fvol)) { - AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, - mv(i,j,k,1) = Real(0.);, - mv(i,j,k,2) = Real(0.);); - al(i,j,k) = fvol; - } - else { - AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) - XDim3 m; - stencil (AMREX_D_DECL(i,j,k), vof, f); - mycs (f, &m.x); - Real n = 0.; - for (int d = 0; d < AMREX_SPACEDIM; d++) + + auto const& dx = v_incflo->geom[lev].CellSizeArray(); + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& vof = vof_mf.const_array(mfi); + Array4 const& mv = normal[lev].array(mfi); + Array4 const& al = alpha[lev].array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + auto fvol = vof(i,j,k,0); + THRESHOLD(fvol); + if (!interface_cell (i,j,k, vof, fvol)) { + AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); + al(i,j,k) = fvol; + } + else { + AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) + XDim3 m; + stencil (i,j,k, vof, f); + mycs (f, &m.x); + Real n = 0.; + for (int d = 0; d < AMREX_SPACEDIM; d++) n += fabs ((&m.x)[d]); - if (n > 0.) - for (int d = 0; d < AMREX_SPACEDIM; d++) - mv(i,j,k,d)= (&m.x)[d]/n; - else {/* fixme: this is a small fragment */ - AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, - mv(i,j,k,1) = Real(0.);, - mv(i,j,k,2) = Real(0.);); + if (n > 0.) + for (int d = 0; d < AMREX_SPACEDIM; d++) + mv(i,j,k,d)= (&m.x)[d]/n; + else {/* fixme: this is a small fragment */ + AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); } for (int d = 0; d < AMREX_SPACEDIM; d++) (&m.x)[d]= mv(i,j,k,d); - // Print() <<" normal direction "<< m.x<<" "< const& tracer, AMREX_D_DECL(Vector const& u_mac, Vector const& v_mac, Vector const& w_mac), - Real dt) + Real dt) { + static int start = 0; + //amrex::Print() << " VOF Level#" << finest_level<<"\n"; + + + // ************************************************************************************* + // Allocate space for the fluxes for vof advection + // ************************************************************************************* + Vector m_total_flux, vof_total_flux; + //auto& ld = *v_incflo->m_leveldata[lev]; + for (int lev = 0; lev <= finest_level; ++lev) { + m_total_flux.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), + MFInfo(), v_incflo->Factory(lev)); + vof_total_flux.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), + MFInfo(), v_incflo->Factory(lev)); + } + int myproc = ParallelDescriptor::MyProc(); + int nprocs = ParallelDescriptor::NProcs(); + +//The vof advection is to scheme is to use dimension-splitting i.e. advect the vof tracer +//along each dimension successively using a one-dimensional scheme. + for (int lev = 0; lev <= finest_level; ++lev) { + Geometry const& geom = v_incflo->Geom(lev); + auto const& dx = geom.CellSizeArray(); + +//define the effective volume 'vol_eff' to consider the non-zero for the MAC velocity at +//the cell face in the sweep direction due to dimension splitting scheme (see Lörstad &Fuchs +// JCP, 200(2004),pp153-176). + MultiFab vol_eff(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), + MFInfo(), v_incflo->Factory(lev)); +// set its initial value to be 1. when the MAC velocity is divergence free, 'vol_eff' will +// be still one after the sweep of all dimensions. + vol_eff.setVal(1.0); + for (int d = 0; d < AMREX_SPACEDIM; d++){ + // the starting direction of the sweep for i,j,k direction for vof advection is alternated + // during the solution to minimize the errors associated with the sweep direction. + int dir = (start+d)%AMREX_SPACEDIM; + m_total_flux[lev].setVal(0.0); + vof_total_flux[lev].setVal(0.0); + MultiFab const * U_MF = dir < 1? u_mac[lev]: + dir < 2? v_mac[lev]:w_mac[lev]; + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*U_MF,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { +//The following note is not relevant.It helps me remember some key concepts of +//indexing space implemented in AMREX. +// +//note 'tracer' is a cell-centered MultiFab, so the index of the titlebox() +//(i.e., object 'bx' defined in the following) is cell-centered indexing space. +//In order to calculate the vof flux, we need to sweep along the cell faces, +//i.e. the node-centered indexing space.It is why we grow the titlebox() along the +//sweep direction by 1. So the grown box size (i.e., object 'bxg') can equivalently cover the same +//node-centered indexing space of the computational grid as required by calculation +//of flux over cell faces in the sweep direction. (a side issue is that the sweep can +// start with left/bottom/back face of the ghost cells of the computational domain, which is +//not necessary for the flux calculation. As we will apply BCs for ghost cells, it does not +//really matter.) + +// use for calculating cell-centered MultiFabs + Box const& bx = mfi.tilebox(); + //auto const& ijk_min= bx.smallEnd(); + //auto const& ijk_max= bx.bigEnd(); + // use for calculating the vof flux over the cell faces + //Box const& bxg = amrex::grow(bx,IntVect::TheDimensionVector(dir)); + Array4 const& vof = tracer[lev]->array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& al = alpha[lev].const_array(mfi); + Array4 const& m_flux_arr = m_total_flux[lev].array(mfi); + Array4 const& vof_flux_arr = vof_total_flux[lev].array(mfi); + Array4 const& vof_eff_arr = vol_eff.array(mfi); + Array4 const& vel_mac_arr = U_MF->const_array(mfi); + // calculate the vof flux by doing the scanning of the cell faces + // i.e., loop through the node-centered MultiFab. + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + /* if (i==4 &&j==8 &&k==4&& v_incflo->m_cur_time>1.99) { + Print() <<" vof_advection---dir "< 0); + /* if (fabs (un) > 0.51) { + Real x = Real(i+0.5)*dx[0]; + Real y = Real(j+0.5)*dx[1]; + Real z = Real(k+0.5)*dx[2]; + Print()<< "Warning: CFL "< index={i,j,k}, // store upwinding index + index_d={i,j,k}; // store downwinding index + // index for upwinding/downwinding cell + index[dir]+=det_u;index_d[dir]+=det_d; + Real fvol = vof(index[0],index[1],index[2]), cf; + if (fvol <= 0. || fvol >= 1.) + cf = fvol; + else{ + // the normal vector and alpha of the interface in upwinding cell + Array m_v ={AMREX_D_DECL( + mv(index[0],index[1],index[2],0), + mv(index[0],index[1],index[2],1), + mv(index[0],index[1],index[2],2) + )}; + Real alpha_v = al(index[0],index[1],index[2]); + if (un < 0.) { + m_v[dir]=-m_v[dir]; + alpha_v+=m_v[dir]; + } + Array q0={AMREX_D_DECL(0.,0.,0.)},q1={AMREX_D_DECL(1.,1.,1.)}; + q0[dir]=1.-fabs(un); + for (int dd = 0; dd < AMREX_SPACEDIM; dd++) { + alpha_v -= m_v[dd]*q0[dd]; + m_v[dd] *= q1[dd] - q0[dd]; + } + cf = plane_volume (m_v, alpha_v); + } + //Make sure we just update the cells in the valid box + //upwinding cells + //if (AMREX_D_TERM(index[0]>=ijk_min[0] && index[0]<=ijk_max[0], + // && index[1]>=ijk_min[1] && index[1]<=ijk_max[1], + // && index[2]>=ijk_min[2] && index[2]<=ijk_max[2])){ + m_flux_arr(index[0],index[1],index[2]) -=fabs(un); + vof_flux_arr(index[0],index[1],index[2]) -=fabs(un)*cf; + // } + //downstream cells + //if (AMREX_D_TERM(index_d[0]>=ijk_min[0] && index_d[0]<=ijk_max[0], + // && index_d[1]>=ijk_min[1] && index_d[1]<=ijk_max[1], + // && index_d[2]>=ijk_min[2] && index_d[2]<=ijk_max[2])){ + m_flux_arr(index_d[0],index_d[1],index_d[2]) +=fabs(un); + vof_flux_arr(index_d[0],index_d[1],index_d[2]) +=fabs(un)*cf; + //} + }); // end ParallelFor + + //loop through cell-centered MultiFab to update their value + //Box const& bxc = mfi.tilebox(IntVect::TheZeroVector()); + //ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + // { + // vof(AMREX_D_DECL(i,j,k))*=vof_eff_arr(AMREX_D_DECL(i,j,k)); + // vof(AMREX_D_DECL(i,j,k))+=vof_flux_arr(AMREX_D_DECL(i,j,k)); + // vof_eff_arr(AMREX_D_DECL(i,j,k))+= m_flux_arr(AMREX_D_DECL(i,j,k)); + // Real f = vof(AMREX_D_DECL(i,j,k))/vof_eff_arr(AMREX_D_DECL(i,j,k)); + // vof(AMREX_D_DECL(i,j,k))= f< 1e-10? 0.:f>1.-1e-10? 1.:f; + //}); // end ParallelFor + }// end MFIter + //fix me: temporary solution for MPI boundary + m_total_flux[lev].FillBoundary(); + vof_total_flux[lev].FillBoundary(); + + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*tracer[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + //loop through cell-centered MultiFab to update their value + //Box const& bxc = mfi.tilebox(IntVect::TheZeroVector()); + Box const& bx = mfi.tilebox(); + Array4 const& vof = tracer[lev]->array(mfi); + Array4 const& m_flux_arr = m_total_flux[lev].array(mfi); + Array4 const& vof_flux_arr = vof_total_flux[lev].array(mfi); + Array4 const& vof_eff_arr = vol_eff.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + vof(i,j,k)*=vof_eff_arr(i,j,k); + vof(i,j,k)+=vof_flux_arr(i,j,k); + vof_eff_arr(i,j,k)+= m_flux_arr(i,j,k); + Real f = vof(i,j,k)/vof_eff_arr(i,j,k); + vof(i,j,k)= f< 1e-10? 0.:f>1.-1e-10? 1.:f; + /*if (f > 0. && f < 1.) + Print() <<" vof_advection---dir "<FillBoundary(); + + + + // update the normal and alpha of the plane in each interface cell + // after each sweep + tracer_vof_update(lev, *tracer[lev]); + + + }// end i-,j-,k-sweep: calculation of vof advection + + + }// end lev + start = (start + 1) % AMREX_SPACEDIM; + + // determine the normal direction and alpha of the plane segment intersecting each interface cell. + // tracer_vof_update(tracer); - amrex::Print() << " VOF Level#" << finest_level<<"\n"; - tracer_vof_update(tracer); } //////////////////////////////////////////////////////////////////// -////// Initialize the VOF value using the implicit surface function +/////// +/////// Initialize the VOF value using the EB implicit surface function +/////// ///////////////////////////////////////////////////////////////////// void -tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) +VolumeOfFluid::tracer_vof_init_fraction(int lev, MultiFab& a_tracer) { int vof_init_with_eb = 1; ParmParse pp("incflo"); pp.query("vof_init_with_eb", vof_init_with_eb); - Geometry const& geom = a_incflo->Geom(lev); + Geometry const& geom = v_incflo->Geom(lev); auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); @@ -702,34 +1008,55 @@ tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) #ifdef AMREX_USE_EB if (vof_init_with_eb) { if (lev == 0) { - Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), - 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; - Real radius = 5.0*dx[0]; + Array center{AMREX_D_DECL((problo[0]+.35), + (problo[1]+.35), + (problo[2]+.35))}; + Real radius = .15; //5.0*dx[0]; bool fluid_is_inside = true; - // EB2::SphereIF my_sphere(radius, center, fluid_is_inside); + EB2::SphereIF my_sphere(radius, center, fluid_is_inside); // auto gshop = EB2::makeShop(my_sphere); // Initialise cylinder parameters - int direction = 0; - Real rotation = 0, height = 11.*dx[0]; - int rotation_axe = 0; - rotation = (rotation/180.)*M_PI; + int direction = 1; + Real height = 14.5*dx[0]; + center[0]=0.5*(problo[0]+probhi[0]); + center[1]=0.5*(problo[1]+probhi[1]); + center[2]=0.75*(problo[1]+probhi[1]); // Build the Cylinder implficit function representing the curved walls - EB2::CylinderIF my_cyl(radius, height, direction, center, fluid_is_inside); - - // auto my_cyl_rot = EB2::rotate(my_cyl, rotation, rotation_axe); + EB2::CylinderIF my_cyl(radius, height, direction, center, false); + radius = 8.0*dx[0]; + EB2::CylinderIF my_cyl_1(radius, height, direction, center, fluid_is_inside); + + //box + /* Array low{AMREX_D_DECL((problo[0]+10.3*dx[0]), + (problo[1]+10.3*dx[1]), + (problo[2]+10.3*dx[2]))}; + Array high{AMREX_D_DECL((probhi[0]-11.2*dx[0]), + (probhi[1]-11.2*dx[1]), + (probhi[2]-11.2*dx[2]))}; */ + Array low{AMREX_D_DECL( (problo[0]+.5/16.), + (problo[1]+.5/16.), + (problo[2]+.5/16.))}; + Array high{AMREX_D_DECL((problo[0]+5.5/16.), + (problo[1]+5.5/16.), + (problo[2]+5.5/16.))}; + auto my_box= EB2::BoxIF( low, high, fluid_is_inside); + //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); + auto my_box1= EB2::rotate(my_box, .3, 0); + auto my_box2= EB2::rotate(my_box1, .2, 2); + //auto two =EB2::makeUnion(my_cyl_1, my_cyl); + //auto two = EB2::makeComplement(EB2::makeUnion(my_cyl_1, my_cyl)); // Generate GeometryShop - auto gshop = EB2::makeShop(my_cyl); - - int max_level = a_incflo->maxLevel(); - EB2::Build(gshop, a_incflo->Geom(max_level), max_level, max_level); + //auto gshop = EB2::makeShop(two); + auto gshop = EB2::makeShop(my_sphere); + int max_level = v_incflo->maxLevel(); + EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -740,7 +1067,7 @@ tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) auto const& volfrac = fact->getVolFrac(); MultiFab::Copy(a_tracer, volfrac, 0, 0, 1, 1); - if (lev == a_incflo->finestLevel()) { + if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } } else @@ -780,6 +1107,11 @@ tracer_vof_init_fraction(int lev, MultiFab& a_tracer, incflo const* a_incflo) }); } } + + // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment + // intersecting each interface cell. + v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer); + } @@ -794,29 +1126,23 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) int myproc = ParallelDescriptor::MyProc(); int nprocs = ParallelDescriptor::NProcs(); - amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; - const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+"_"; +// amrex::AllPrint() << " Output surface file at process#" << myproc<<" " << nprocs << " at time " << time << std::endl; + const std::string& tecplotfilename = amrex::Concatenate("tecplot_surface_", nstep)+"_";//+std::to_string(myproc); const int nfiles = 1; for (NFilesIter nfi(nfiles, tecplotfilename, false, true); nfi.ReadyToWrite(); ++nfi) { - + auto& TecplotFile = (std::ofstream&) nfi.Stream(); // Print()<<"surface_plot"<< nstep<<" "<< tecplotfilename<<"\n"; - auto& TecplotFile = (std::ofstream&) nfi.Stream(); - - TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; - //spatial coordinates - TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); - //output varibles - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<"\n"; for (int lev = 0; lev <= finest_level; ++lev) { auto& ld = *v_incflo->m_leveldata[lev]; - Box const& domain = v_incflo->geom[lev].Domain(); - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + Geometry const& geom = v_incflo->Geom(lev); + Box const& domain = geom.Domain(); + auto const& dx = geom.CellSizeArray(); + auto const& problo = geom.ProbLoArray(); + auto const& probhi = geom.ProbHiArray(); const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab int nb = ba.size(); const DistributionMapping& dm = ld.tracer.DistributionMap(); @@ -829,8 +1155,9 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) const auto lo = lbound(bx); const auto hi = ubound(bx); Array4 const& vof = ld.tracer.const_array(mfi); - Array4 const& mv = normal[lev].array(mfi); - Array4 const& al = alpha[lev].array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& al = alpha[lev].const_array(mfi); + Array4 const& tag_arr = tag[lev].const_array(mfi); Vector segments; int totalnodes = 0; for (int k = lo.z; k <= hi.z; ++k) { @@ -838,53 +1165,65 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) for (int i = lo.x; i <= hi.x; ++i) { auto fvol = vof(i,j,k,0); - if (interface_cell (AMREX_D_DECL(i,j,k), vof, fvol)){ + if (interface_cell (i,j,k, vof, fvol)){ Real alpha; - XDim3 m, p, cell; + XDim3 m, p, center; for (int d = 0; d < AMREX_SPACEDIM; d++) { (&m.x)[d]= mv(i,j,k,d); } alpha= al(i,j,k,0); //Print() << " ijk index " <<"("< 0) { + // std::ofstream TecplotFile; + // TecplotFile.open(tecplotfilename, std::ios_base::trunc); + TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + //spatial coordinates + TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); + //output varibles + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<", \"tag\""<<"\n"; + std::string zonetitle=("Level_"+std::to_string(lev)+ + "_Box_" +std::to_string(mfi.index())+ + "_Proc_"+std::to_string(myproc)); + TecplotFile <<(std::string("ZONE T=")+zonetitle); + TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_leveldata[lev]; - Box const& domain = v_incflo->geom[lev].Domain(); - auto const& dx = v_incflo->geom[lev].CellSizeArray(); - auto const& problo = v_incflo->geom[lev].ProbLoArray(); - auto const& probhi = v_incflo->geom[lev].ProbHiArray(); + Geometry const& geom = v_incflo->Geom(lev); + Box const& domain = geom.Domain(); + auto const& dx = geom.CellSizeArray(); + auto const& problo = geom.ProbLoArray(); + auto const& probhi = geom.ProbHiArray(); auto const& ijk_min= domain.smallEnd(); auto const& ijk_max= domain.bigEnd(); const BoxArray& ba = ld.tracer.boxArray(); //cell-centered multifab int nb = ba.size(); const DistributionMapping& dm = ld.tracer.DistributionMap(); std::string IJK = "IJK"; - // amrex::Print() << " process#" << myproc<<" " << ld.tracer.nGrow()<<" " << nb<<"\n"; -//amrex::Print() << " process#" << myproc<<" " << (IJK[0]+std::string("= "))<<"\n"; -// Print() << " process#" << myproc<<" " << problo[0]<<" dx "<< dx[0]<<" -------"<<"\n"; - //Output data for each box in boxarray according to Tecplot data format -// for (int ibox = 0; ibox const& tracer = ld.tracer.const_array(mfi); + Array4 const& vel = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - + Array4 const& al = alpha[lev].const_array(mfi); + Array4 const& tag_arr = tag[lev].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -1000,6 +1322,21 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } + //write velocity + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << vel(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// //write variables of the normal direction of the interface for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -1017,11 +1354,721 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } }// + //write alpha of the interface + + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << al(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + + //write alpha of the interface + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << tag_arr(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } TecplotFile <<"\n"; } // end MFIter } // end lev } - std::rename("output.txt", "x.out"); + + +} + +#include + +#define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[2]< min[2]||c[0]>max[0]||c[1]> max[1]||c[2]> max[2]) +#define ORTHOGONAL_COMPONENT(c) (((c) + 1) % AMREX_SPACEDIM) + +// @touch defines the touching connectivity. This function updates +// @touch with the info that region tagged with @tag1 touches the +// region tagged with @tag2 */ +static void touching_regions (int tag1, int tag2, int * touch) +{ + if (tag2 < tag1) { + int tmp = tag1; + tag1 = tag2; + tag2 = tmp; + } + else if (tag2 == tag1) + return; + int ntag = touch[tag2]; + if (ntag == tag1) + return; + if (ntag == 0) + touch[tag2] = tag1; + else { + if (tag1 < ntag) + touch[tag2] = tag1; + touching_regions (tag1, ntag, touch); + } +} + +static void reduce_touching_regions (void * in, void * inout, int * len, MPI_Datatype * type) +{ + int * ltouch = (int *) in; + int * gtouch = (int *) inout; + int i; + + for (i = 1; i < *len; i++) + if (ltouch[i] > 0) + touching_regions (i, ltouch[i], gtouch); +} +//////////////////////////////////////////////////////////////////////////////////////// +// domain_tag_droplets +// Simple flood fill algorithm is used to find the cells that belong to the same droplet. +// +// Fills the @tag variable of the cells of @domain with the (strictly +// positive) index of the droplet they belong to. The cells belonging +// to the background phase have an index of zero. +// +// Note that the volume fraction @c must be defined on all levels. +// +// Returns: the number of droplets. +//////////////////////////////////////////////////////////////////////////////// + +int domain_tag_droplets (int finest_level, Vector const &grids, Vector const& geom, + Vector const& vof,Vector const& tag) +{ + + //fix me: a temporary solution for one level mesh + int ntag = 0; + for (int lev = 0; lev <= finest_level; ++lev) { + tag[lev]->setVal(0.); + auto const& dx = geom[lev].CellSizeArray(); + bool touching = false; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*vof[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); +// const auto lo = lbound(bx); +// const auto hi = ubound(bx); + //note: we use the limit of the validbox to avoid include the ghost + //cells in the FIFO queue + Box const& bxv = mfi.validbox(); + auto const& ijk_min= bxv.smallEnd(); + auto const& ijk_max= bxv.bigEnd(); + Array4 const& vof_arr = vof[lev]->const_array(mfi); + Array4 const& tag_arr = tag[lev]->array(mfi); + //fix me: not compatible with GPUs + ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + /* if(i==7&&j==11&&k==11){ + Print()<<"----- "<EPS && tag_arr(i,j,k)==0.){ + std::queue fifo; + tag_arr(i,j,k)=++ntag; + fifo.push({i,j,k}); + while (!fifo.empty()){ + IntVect cell=fifo.front(),ncell=cell; + for (int d = 0; d < AMREX_SPACEDIM; d++) + for (int det =-1;det<=1;det+=2){ + ncell[d]=cell[d]+det; + /*Print()<EPS&& + !CELL_IS_BOUNDARY(ncell,ijk_min,ijk_max)&& + tag_arr(ncell[0],ncell[1],ncell[2])==0.){ + tag_arr(ncell[0],ncell[1],ncell[2])=ntag; + fifo.push(ncell); + } + } + fifo.pop(); + }// end while + } // end if + }); + + }// end MFIter + // the rest of the algorithm deals with periodic and parallel BCs + if (ParallelDescriptor::NProcs() > 1){ + int myproc = ParallelDescriptor::MyProc(); + int nprocs = ParallelDescriptor::NProcs(); + int tags[nprocs]; + MPI_Allgather (&ntag, 1, MPI_INT, tags, 1, MPI_INT, MPI_COMM_WORLD); + // tags[] now contains the 'ntag' value on each PE + int i; + ntag = 0; + for (i = 0; i < nprocs; i++) + ntag += tags[i]; + // shift tag values to get a single tag space across all PEs + if (myproc > 0) { + int tagshift = 0; + for (i = 0; i < myproc; i++) + tagshift += tags[i]; + //AllPrint()<<"tagshift--- "< const& tag_arr = tag[lev]->array(mfi); + ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if (tag_arr(i,j,k)>0) + tag_arr(i,j,k) +=tagshift; + }); + } + } + }//end if (algorithm to deal with the parallel process) + //fix me: temporary solution for MPI boundary + tag[lev]->FillBoundary(); + int touch[ntag + 1]={}; +//We search the cells in the box boundaries to determine if the tag value +//of the cell and tag value of its neighboring ghost cell are connected by +//the same droplet/bubble. +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*vof[lev]); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.validbox(); + auto const& ijk_min= bx.smallEnd(); + auto const& ijk_max= bx.bigEnd(); + Array4 const& tag_arr = tag[lev]->array(mfi); + Array dim_limit={ijk_min,ijk_max}; + // we search the cells on the 6 boundaries of the 3D box. + for (int d = 0; d < AMREX_SPACEDIM; d++){ + int ort1=ORTHOGONAL_COMPONENT(d) // 1st transverse direction + ,ort2=ORTHOGONAL_COMPONENT(ort1);//2nd transverse direction + for (int n=0;n<2;n++){ + int k0=dim_limit[n][d],gd=k0+(n==0?-1:1); + for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++) + for(int j0=ijk_min[ort2];j0<=ijk_max[ort2];j0++){ + Real tag_cell=(d==0?tag_arr(k0,i0,j0): + d==1?tag_arr(j0,k0,i0): + tag_arr(i0,j0,k0)); + if(tag_cell > 0){ + Real tag_gcell=(d==0?tag_arr(gd,i0,j0): + d==1?tag_arr(j0,gd,i0): + tag_arr(i0,j0,gd)); + if(tag_gcell > 0){ + touching_regions (tag_cell, tag_gcell, touch); + } + } + + }// end for-loop for searching cells in the boundaries. + }// end for-loop for low and high boundary + }// end for-loop for AMREX_SPACEDIM + } + if (ParallelDescriptor::NProcs() > 1){ + //int gtouch[ntag + 1]={}; + MPI_Op op; + MPI_Op_create (reduce_touching_regions, false, &op); + //MPI_Allreduce (touch, gtouch, ntag + 1, MPI_INT, op, MPI_COMM_WORLD); + ParallelDescriptor::detail::DoAllReduce(touch,op,ntag+1); + MPI_Op_free (&op); + //std::memcpy(touch, gtouch, sizeof(gtouch)); + } + /*Print()<<"-----touching----- "<<"\n"; + for (int i=0;i 0) { + touch[i] = itouch; + itouch = touch[itouch]; + touching = true; + } + if (touch[i] == 0 && i > maxtag) + maxtag = i; + } +// fix touching regions + if (touching) { + int n_tag = 0; /* fresh tag index */ + int ntags[maxtag + 1]; + ntags[0] = 0; + for (int i = 1; i <= maxtag; i++) + if (touch[i] == 0) { /* this region is not touching any other */ + touch[i] = i; + ntags[i] = ++n_tag; + } + maxtag = n_tag; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*vof[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + Array4 const& tag_arr = tag[lev]->array(mfi); + //fix me: not compatible with GPUs + ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + int ttag=tag_arr(i,j,k); + tag_arr(i,j,k)=ntags[touch[ttag]]; + }); + + } + //fix me: temporary solution for MPI boundary + tag[lev]->FillBoundary(); + ntag=maxtag; + } + + }//end lev + + return ntag; + +} + +typedef struct { + Real min, max, sum, sum2, mean, stddev; + int n; +} VofRange; +// +// gts_range_init: +// @r: a #VofRange. +// +// Initializes a #VofRange. +// +void range_init (VofRange * r) +{ + r->max = - 10.e30; + r->min = 10.e30; + r->sum = r->sum2 = 0.0; + r->n = 0; +} +/** + * range_add_value: + * @r: a #GtsRange. + * @val: a value to add to @r. + * + * Adds @val to @r. + */ +void range_add_value (VofRange * r, Real val) +{ + if (val < r->min) r->min = val; + if (val > r->max) r->max = val; + r->sum += val; + r->sum2 += val*val; + r->n++; +} +static void range_reduce (void * i, void * o, + int * len, + MPI_Datatype * type) +{ + Real * in = (Real *) i; + Real * inout = (Real *) o; + if (in[0] < inout[0]) /* min */ + inout[0] = in[0]; + if (in[1] > inout[1]) /* max */ + inout[1] = in[1]; + inout[2] += in[2]; /* sum */ + inout[3] += in[3]; /* sum2 */ + inout[4] += in[4]; /* n */ +} + +static void domain_range_reduce ( VofRange * s) +{ + + double in[5]; + double out[5] = { 10.e30, - 10.e30, 0., 0., 0. }; + MPI_Op op; + + MPI_Op_create (range_reduce, true, &op); + in[0] = s->min; in[1] = s->max; in[2] = s->sum; in[3] = s->sum2; + in[4] = s->n; + MPI_Allreduce (in, out, 5, MPI_DOUBLE, op, MPI_COMM_WORLD); + MPI_Op_free (&op); + s->min = out[0]; s->max = out[1]; s->sum = out[2]; s->sum2 = out[3]; + s->n = out[4]; + +} + +////////////////////////////////////////////////////////////////////////////// +//// +//// Computing sums for each droplet. +//// +////////////////////////////////////////////////////////////////////////////// + +void VolumeOfFluid::output_droplet (Real time, int nstep) +{ + static int first = 1; + int myproc = ParallelDescriptor::MyProc(); + int nprocs = ParallelDescriptor::NProcs(); + const std::string& filename = "droplet_his.dat"; + + + for (int lev = 0; lev <= finest_level; ++lev) { + auto& ld = *v_incflo->m_leveldata[lev]; + Geometry const& geom = v_incflo->Geom(lev); + auto const& dx = geom.CellSizeArray(); + auto const& problo = geom.ProbLoArray(); + auto const& probhi = geom.ProbHiArray(); + + auto tvol = ld.tracer.sum()*AMREX_D_TERM(dx[0],*dx[1],*dx[2]); + //Print() <<" total vof--- "<<" "<< tvol<<"\n"; + + int n_tag=domain_tag_droplets (finest_level, v_incflo->grids, + v_incflo->geom, v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); + Print()<<"number of droplets "<< n_tag<<"\n"; + // 'mcent' is mass center of each droplet + Real vols[n_tag], vels[n_tag], mcent[AMREX_SPACEDIM][n_tag],surfA[n_tag]; + int ncell[n_tag]; + // find the max and min location of interface */ + VofRange s[AMREX_SPACEDIM][n_tag]; + // the range of location of interfacial cells */ + Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; + for (int n = 0; n < n_tag; n++){ + ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; + for(int d = 0; d < AMREX_SPACEDIM; d++) { + mcent[d][n]=0.; + range_init (&s[d][n]); + range[d][0][n] = 0.; + range[d][1][n] = 0.; + } + } +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(ld.tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + const auto lo = lbound(bx); + const auto hi = ubound(bx); + Array4 const& tag_arr = tag[lev].const_array(mfi); + Array4 const& fv = ld.tracer.const_array(mfi); + Array4 const& vel_arr = ld.velocity.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& al = alpha[lev].const_array(mfi); + //fix me: not compatable with GPUs + // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + // { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + int itag=tag_arr(i,j,k); + if(itag > 0){ + /* count number */ + ncell[itag - 1]++; + /* calculate the cell volume */ + Real dV = AMREX_D_TERM(dx[0],*dx[1],*dx[2])*fv(i,j,k); + vols[itag - 1] += dV; + /* calculate the momentum */ + Real vel = sqrt(AMREX_D_TERM(vel_arr(i,j,k,0)*vel_arr(i,j,k,0), + +vel_arr(i,j,k,1)*vel_arr(i,j,k,1), + +vel_arr(i,j,k,2)*vel_arr(i,j,k,2))); + vels[itag - 1] += vel * dV; + XDim3 center; + for (int d = 0; d < AMREX_SPACEDIM; d++) + (¢er.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+Real(0.5)); + /* calculate the mass center */ + for(int d = 0; d < AMREX_SPACEDIM; d++) + mcent[d][itag - 1] += (¢er.x)[d] * dV; + + if (interface_cell (i,j,k, fv, fv(i,j,k))){ + Real alpha; + XDim3 m, p; + for (int d = 0; d < AMREX_SPACEDIM; d++) + (&m.x)[d]= mv(i,j,k,d); + alpha= al(i,j,k,0); + //Print() << " ijk index " <<"("< 1){ + Real sum[n_tag]; + /*sum number of cells of each drop from different pid*/ + ParallelDescriptor::ReduceIntSum(ncell,n_tag); + /*sum drop volume from different pid*/ + ParallelDescriptor::ReduceRealSum (vols, n_tag); + //Print()<<"drople volume "< o0={0.1875,0.1875,0.1875},o, + cube_min,cube_max; + for (int d = 0; d < AMREX_SPACEDIM; d++){ + o[d] = o0[d]+1.0*time; + cube_min[d]=o[d]-lencube*.5; + cube_max[d]=o[d]+lencube*.5; + } + Print()<<"cube center"< const& fv = ld.tracer.const_array(mfi); + + //fix me: not compatable with GPUs + ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if (fv(i,j,k)>0.){ + Real vertex[3][8]; + //Print() << " ijk index " <<"("<cube_max[d]){ + nn++; + dd+=(vertex[d][n]-cube_max[d])/dx[d]; + } + } + if (nn>0) + vof*=(1.-dd/nn); + } + error+=fabs(fv(i,j,k)-vof)*AMREX_D_TERM(dx[0],*dx[1],*dx[2]); + } + }); + + }//end MFIter + if (time > .15){ + // Print()<<"test----"<<"\n"; + } + //AllPrint()<<"error ----"<< error<<"\n"; + //ParallelDescriptor::ReduceRealSum (&error, 1); + //Print()< const& fv = ld.tracer.const_array(mfi); + + //fix me: not compatable with GPUs + ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + //if (fv(i,j,k)>0.){ + + error+=fabs(fv(i,j,k,1)-fv(i,j,k,0))*AMREX_D_TERM(dx[0],*dx[1],*dx[2]); + //} + }); + + }//end MFIter + error /=sphere_vol; +} +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/* for parallel run, only master process outputs the data */ + if (ParallelDescriptor::IOProcessor()) { + /* average values of each drop */ + for (int n = 0; n < n_tag; n++) + if (vols[n] > 0.) { + vels[n] /= vols[n]; + for (int d = 0; d < AMREX_SPACEDIM; d++) + mcent[d][n] /= vols[n]; + } + /* sort the drops */ + for (int n = 0; n < n_tag - 1; n++) + for (int m = n + 1; m < n_tag; m++){ + Real xx,yy; + //fix me: hard coded + if (true){ /* sort according to the volume*/ + xx = vols[n], yy = vols[m]; + } + else { /* sort according to the location*/ + //fix me: hard coded + int c=0; + if (true){ //positive direction + xx = mcent[c][m],yy = mcent[c][n]; + } + else { + xx = mcent[c][n],yy = mcent[c][m]; + } + } + if (xx < yy) { + int id = ncell[n]; + ncell[n] = ncell[m]; + ncell[m] = id; + Real t = vols[n]; + vols[n] = vols[m]; vols[m] = t; + t = vels[n]; + vels[n] = vels[m]; vels[m] = t; + for (int d = 0; d < AMREX_SPACEDIM; d++) { + t = mcent[d][n]; + mcent[d][n] = mcent[d][m]; + mcent[d][m] = t; + } + VofRange ss; + for (int d = 0; d < AMREX_SPACEDIM; d++) { + ss = s[d][n]; + s[d][n] = s[d][m]; + s[d][m] = ss; + } + t = surfA[n]; + surfA[n] = surfA[m]; surfA[m] = t; + } + } /*end of sort*/ + + int ndrops = 0; + Real sumtotal = 0.; + for (int n = 0; n < n_tag; n++){ + ndrops++; + sumtotal += vols[n]; + } + for (int n = 0; n < n_tag; n++) + for(int d = 0; d < AMREX_SPACEDIM; d++) { + if (s[d][n].min<10.e30) + range[d][0][n] = s[d][n].min; + if (s[d][n].max>-10.e30) + range[d][1][n] = s[d][n].max; + } + Real pos_limit[AMREX_SPACEDIM][2]; + for(int d = 0; d < AMREX_SPACEDIM; d++){ + pos_limit[d][0]=10.e30,pos_limit[d][1]=-10.e30; + for (int n = 0; n < n_tag; n++){ + if (pos_limit[d][0]>range[d][0][n]) + pos_limit[d][0]=range[d][0][n]; + if (pos_limit[d][1]m_leveldata[lev]; + Geometry const& geom = v_incflo->Geom(lev); + auto const& dx = geom.CellSizeArray(); +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(ld.velocity,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + Array4 const& vel = ld.velocity.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real x = Real(i+0.5)*dx[0]; + Real y = Real(j+0.5)*dx[1]; + Real z = Real(k+0.5)*dx[2]; + Real pi = 3.14159265357; + vel(i,j,k,0) = 2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*time/3.); + vel(i,j,k,1) = -sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*time/3.); +#if (AMREX_SPACEDIM == 3) + vel(i,j,k,2) = -sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*time/3.); +#endif + }); + }//end MFIter + } //end lev } + diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index c0b3e868d..18547f546 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -1,20 +1,20 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = -1. # Max (simulated) time to evolve -max_step = 1 # Max number of time steps +stop_time = 3.1 # Max (simulated) time to evolve +max_step = -1 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # TIME STEP COMPUTATION # #.......................................# -#incflo.fixed_dt = 1.0e-7 # Use this constant dt if > 0 -incflo.cfl = 0.45 # CFL factor +incflo.fixed_dt = .0005 # Use this constant dt if > 0 +#incflo.cfl = 0.5 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 1 # Steps between plot files +amr.plot_int = 100 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -22,23 +22,23 @@ amr.restart = "" # Checkpoint to restart from # PHYSICS # #.......................................# incflo.gravity = 0. 0. 0. # Gravitational force (3D) -incflo.ro_0 = 1.0 # Reference density - +incflo.ro_0 = 1.0 # Reference density +incflo.ntrac = 2 incflo.fluid_model = "newtonian" # Fluid model (rheology) incflo.mu = 1.0 # Dynamic viscosity coefficient #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 32 32 32 # Grid cells at coarsest AMRlevel +amr.n_cell = 256 256 256 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 16 16 16 +amr.max_grid_size = 32 32 32 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # #.......................................# geometry.prob_lo = 0. 0. 0. # Lo corner coordinates -geometry.prob_hi = 1. 1. 1. # Hi corner coordinates +geometry.prob_hi = 1. 1. 1. # Hi corner coordinates geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) @@ -46,7 +46,9 @@ geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) # INITIAL CONDITIONS # #.......................................# incflo.probtype = 1109 # - +incflo.ic_u = 1. +incflo.ic_v = 1. +incflo.ic_w = 1. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # NUMERICAL PARAMETERS # #.......................................# @@ -58,6 +60,5 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs #.......................................# incflo.verbose = 2 # incflo_level -amrex.fpe_trap_invalid=1 amrex.fpe_trap_overflow=1 amrex.fpe_trap_zero=1 From 915eb86c32ec9e7bd6807ca71f561704f84cc835 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 26 Jul 2024 12:47:19 -0700 Subject: [PATCH 08/29] implementation of the height function --- src/incflo.cpp | 2 +- src/prob/prob_init_fluid.cpp | 6 +- src/vof/VolumeOfFluid.H | 4 +- src/vof/VolumeOfFluid.cpp | 544 +++++++++++++++++++++++++++++------ test_3d/inputs.droplet | 14 +- 5 files changed, 474 insertions(+), 96 deletions(-) diff --git a/src/incflo.cpp b/src/incflo.cpp index d53edaf18..469a566ad 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -156,7 +156,7 @@ void incflo::Evolve() } } get_volume_of_fluid()->output_droplet(m_cur_time,m_nstep); - get_volume_of_fluid()->apply_velocity_field(m_cur_time,m_nstep); + // get_volume_of_fluid()->apply_velocity_field(m_cur_time,m_nstep); if (writeNow()){ get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 215986fc6..5fc0433dc 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -1149,10 +1149,10 @@ void incflo::init_droplet (Box const& vbx, Box const& /*gbx*/, Real y = Real(j+0.5)*dx[1]; Real z = Real(k+0.5)*dx[2]; Real pi = 3.14159265357; - vel(i,j,k,0) = 2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); - vel(i,j,k,1) = -sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); + vel(i,j,k,0) = 1.;//2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); + vel(i,j,k,1) = 0.;//-sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); #if (AMREX_SPACEDIM == 3) - vel(i,j,k,2) = -sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*0./3.); + vel(i,j,k,2) = 0.;//-sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*0./3.); #endif }); } diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index b87c52349..aafc97f20 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -18,7 +18,7 @@ public: amrex::Vector const& w_mac), amrex::Real dt); void tracer_vof_init_fraction(int lev, amrex::MultiFab& a_tracer); - void tracer_vof_update(int lev, amrex::MultiFab & a_tracer); + void tracer_vof_update(int lev, amrex::MultiFab & a_tracer, amrex::Array & a_height); void write_tecplot_surface(amrex::Real time, int nstep); void WriteTecPlotFile (amrex::Real time, int nstep); void output_droplet (amrex::Real time, int nstep); @@ -28,6 +28,8 @@ public: amrex::Vector normal; // the plane defined by @m.@x = @alpha amrex::Vector alpha; +// the heights used for calculation of curvature + amrex::Vector> height; // the tag for droplets amrex::Vector tag; private: diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 63d2cfeaa..b22439255 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -15,6 +15,9 @@ using namespace amrex; #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) #define CLAMP(x,a,b) ((x) < (a) ? (a) : (x) > (b) ? (b) : (x)) +#define VOF_NODATA std::numeric_limits::max() +#define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[2]< min[2]||c[0]>max[0]||c[1]> max[1]||c[2]> max[2]) + ////////////////////////////////////////////////////////////////////////////// //// //// @@ -31,6 +34,14 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + //height_hb.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + //height_ht.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + + Array new_height={ + MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), + MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) + }; + height.emplace_back(std::move(new_height)); } } @@ -696,8 +707,7 @@ bool interface_cell (int const i, int const j, int const k, { if (fc == 1.){ //when a full cell has an empty cell in its face neighbor (i.e., +-x,+-y,+-z) -// we also need to -// calculate the normal and alpha of the cut plane. +// we also need to calculate the normal and alpha of the cut plane. for (int dim=0; dim 0. ? 1. : -1.) +#define BOUNDARY_HIT (2.*HMAX) + + +static int half_height (Array cell, Array4 const & fv, int d, + Real & H, int & n, Array range) +{ + int s = 0, dim=d/2; + n = 0; + cell[dim]+=d%2?-1:1; + while (n < HMAX && !s) { + Real f = fv (cell[0],cell[1],cell[2],0); + if (!CELL_IS_FULL(f)) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + //hit the boundary + if (cell[dim]range[1]) + return 2; + H += f; + n++; + } + else /* full or empty cell */ + s = (f - 0.5)>0.? 1.: -1; + cell[dim]+=d%2?-1:1; + } + return s; +} + +#define DMAX 3.5 + +static void height_propagation (Array cell, int dim, Array4 const & fv, + Array4 const & hght, Array range, Real orientation) +{ + for (int d = 1; d >= -1; d-=2, orientation = - orientation) { + Array neighbor=cell; + Real H = hght(cell[0],cell[1],cell[2],dim); + neighbor[dim]+=d; + bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + H -= orientation; + hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + interface = !CELL_IS_FULL(fvol); + neighbor[dim]+=d; + } + } +} + +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, + Array4 const & hb, Array4 const & ht, Array range) +{ + Real H = vof(i,j,k,0); + Array cell={i,j,k}; + // top part of the column + int nt, st = half_height (cell, vof, 2*dim, H, nt, range); + if (!st) /* still an interfacial cell */ + return; + // bottom part of the column + int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); + if (!sb) /* still an interfacial cell */ + return; + if (sb != 2 && st != 2) { + if (st*sb > 0) /* the column does not cross the interface */ + return; + } + else { /* column hit a boundary */ + if (sb == 2 && st == 2) /* cannot hit a boundary on both sides */ + return; + if (sb == 2) + sb = st > 0.? -1.: 1; + H += BOUNDARY_HIT; + } + if (sb > 0) { + hb(i,j,k,dim) = H - 0.5 - nb; + height_propagation (cell, dim, vof, hb, range, 1.); + } + else { + ht(i,j,k,dim) = H - 0.5 - nt; + height_propagation (cell, dim, vof, ht, range, -1.); + } +} + +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, + Array4 const & ht) +{ + if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) + return &hb; + if (ht(i,j,k,d)!= VOF_NODATA && ht(i,j,k,d)> BOUNDARY_HIT/2.) + return &ht; + return nullptr; +} + + +static void height_propagation_from_boundary (Array cell, int dim, int d, Array4 const & fv, + Array4 const & hght, Array range, int hb) +{ + Real orientation = (d % 2 ? -1 : 1)*hb; + Real H = hght(cell[0],cell[1],cell[2],dim);; + cell[dim]+=(d % 2 ? 1 : -1); + Real H0=hght(cell[0],cell[1],cell[2],dim); + while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { + H += orientation; + hght(cell[0],cell[1],cell[2],dim) = H; + cell[dim]+=(d % 2 ? 1 : -1); + H0=hght(cell[0],cell[1],cell[2],dim); + } + /* propagate to non-interfacial cells up to DMAX */ + auto fvol = fv(cell[0],cell[1],cell[2],0); + bool interface = !CELL_IS_FULL(fvol); + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { + H += orientation; + hght(cell[0],cell[1],cell[2],dim) = H; + cell[dim]+=(d % 2 ? 1 : -1); + } +} + +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, + Array4 const & ht, Real * orientation) +{ + Array4 const * hv = nullptr; + Real o = 0.; + if (hb(i,j,k,d)!=VOF_NODATA) { + hv = &hb; o = 1.; + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + hv = & ht; o = -1.; + } + } + else if (ht(i,j,k,d)!=VOF_NODATA) { + hv = & ht; o = -1.; + } + if (orientation) *orientation = o; + return hv; +} +/* Returns: the height @h of the neighboring column in direction @d or + GFS_NODATA if it is undefined. Also fills @x with the coordinates + of the cell */ +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , + int d, Real * x) +{ + Array neighbor={i,j,k}; + neighbor[d/2]+=d%2?-1:1; + Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); + if (height!=VOF_NODATA) { + *x = 1.; + return height; + } + return VOF_NODATA; +} + +static bool height_normal (int i,int j,int k, Array4 const & hb, + Array4 const & ht, XDim3 & m ) +{ + Real slope = VOF_NODATA; + static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; + for (int d = 0; d < AMREX_SPACEDIM; d++){ + Real orientation; + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Real H = (*hv)(i,j,k,d); + Real x[2], h[2][2], hd[2]; + for (int nd = 0; nd < 2; nd++) { + h[nd][0] = neighboring_column (i,j,k, d, hv, 2*oc[d][nd], &x[0]); + if (h[nd][0] == VOF_NODATA) + break; + h[nd][1] = neighboring_column (i,j,k, d, hv, 2*oc[d][nd] + 1, &x[1]); + if (h[nd][1] == VOF_NODATA) + break; + x[1] = - x[1]; + Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); + hd[nd] = (x[0]*b - x[1]*a)/det; + } + if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || + h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) + continue; + if (hd[0]*hd[0] + hd[1]*hd[1] < slope) { + slope = hd[0]*hd[0] + hd[1]*hd[1]; + (&m.x)[d] = orientation; + (&m.x)[oc[d][0]] = - hd[0]; + (&m.x)[oc[d][1]] = - hd[1]; + } + + } + } + //Print()<<"-------slope---"< & height ) { + Geometry const& geom =v_incflo->geom[lev]; + //auto const& dx = geom.CellSizeArray(); + +//update height using vof value + + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + + height[0].setVal(VOF_NODATA,dim,1); + height[1].setVal(VOF_NODATA,dim,1); + //height[0].setVal(0.,dim,1); + //height[1].setVal(0.,dim,1); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + Box const& bx = mfi.validbox(); + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& hb_arr = height[0].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if + }); //end ParallelFor + + } //end MFIter + //fix me: temperary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + +//deal with the situation where interface goes across the MPI or periodic boundaries. +if(1){ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + Box const& bx = mfi.validbox(); + Array face_min_max; + Array4 const& hb_arr = height[0].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); + //seach the cells on each boundary of the validbox + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + auto ijk_min= bx.smallEnd(); + auto ijk_max= bx.bigEnd(); +//only loop through cells on two faces in the axis (defined by 'dim') + for (int nn = 0; nn < 2; nn++){ +//Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) +// FACE direction = 0,1,2,3,4,5 in 3D +// X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 +// direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) +// therefore, 'nn=0' here means the positive direction. + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; + Box bbx(ijk_min, ijk_max); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "<geom[lev].CellSizeArray(); + // column hit boundary + if(h){ + // column hit boundary + Array4 const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); + Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; + (*h)(i,j,k,dim) += Hn; + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ + // column did not hit a boundary, propagate height across PE boundary */ + if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) + height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); + } + //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temperary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + }//end for dim + + +//update the normal and alpha for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); - Array4 const& vof = vof_mf.const_array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); + Array4 const& hb_arr = height[0].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - auto fvol = vof(i,j,k,0); + XDim3 m; + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); - if (!interface_cell (i,j,k, vof, fvol)) { - AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, - mv(i,j,k,1) = Real(0.);, - mv(i,j,k,2) = Real(0.);); - al(i,j,k) = fvol; - } - else { - AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) - XDim3 m; - stencil (i,j,k, vof, f); - mycs (f, &m.x); - Real n = 0.; - for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); - if (n > 0.) - for (int d = 0; d < AMREX_SPACEDIM; d++) - mv(i,j,k,d)= (&m.x)[d]/n; - else {/* fixme: this is a small fragment */ - AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ + if (!interface_cell (i,j,k, vof_arr, fvol)) { + AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, mv(i,j,k,2) = Real(0.);); - } - for (int d = 0; d < AMREX_SPACEDIM; d++) - (&m.x)[d]= mv(i,j,k,d); - /* Print() <<" normal direction "<< m.x<<" "< 0.) + for (int d = 0; d < AMREX_SPACEDIM; d++) + mv(i,j,k,d)= (&m.x)[d]/n; + else {/* fixme: this is a small fragment */ + AMREX_D_TERM(mv(i,j,k,0) = Real(1.);, + mv(i,j,k,1) = Real(0.);, + mv(i,j,k,2) = Real(0.);); + } + for (int d = 0; d < AMREX_SPACEDIM; d++) + (&m.x)[d]= mv(i,j,k,d); + /* Print() <<" normal direction "<< m.x<<" "< const& tracer, //}); // end ParallelFor }// end MFIter //fix me: temporary solution for MPI boundary - m_total_flux[lev].FillBoundary(); - vof_total_flux[lev].FillBoundary(); + m_total_flux[lev].FillBoundary(geom.periodicity()); + vof_total_flux[lev].FillBoundary(geom.periodicity()); #ifdef _OPENMP @@ -969,13 +1301,13 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, }); // end ParallelFor }// end MFIter //fix me: temporary solution for MPI boundary - tracer[lev]->FillBoundary(); + tracer[lev]->FillBoundary(geom.periodicity()); // update the normal and alpha of the plane in each interface cell // after each sweep - tracer_vof_update(lev, *tracer[lev]); + tracer_vof_update (lev, *tracer[lev], height[lev]); }// end i-,j-,k-sweep: calculation of vof advection @@ -984,9 +1316,6 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, }// end lev start = (start + 1) % AMREX_SPACEDIM; - // determine the normal direction and alpha of the plane segment intersecting each interface cell. - // tracer_vof_update(tracer); - } //////////////////////////////////////////////////////////////////// /////// @@ -994,7 +1323,7 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, /////// ///////////////////////////////////////////////////////////////////// void -VolumeOfFluid::tracer_vof_init_fraction(int lev, MultiFab& a_tracer) +VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) { int vof_init_with_eb = 1; ParmParse pp("incflo"); @@ -1008,13 +1337,20 @@ VolumeOfFluid::tracer_vof_init_fraction(int lev, MultiFab& a_tracer) #ifdef AMREX_USE_EB if (vof_init_with_eb) { if (lev == 0) { - Array center{AMREX_D_DECL((problo[0]+.35), - (problo[1]+.35), - (problo[2]+.35))}; - Real radius = .15; //5.0*dx[0]; + Array center{AMREX_D_DECL((problo[0]+.45), + (problo[1]+.1), + (problo[2]+.45))}; + Array center1{AMREX_D_DECL((problo[0]+.45), + (problo[1]+1.1), + (problo[2]+.45))}; + /* Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), + 0.5*(problo[1]+probhi[1]), + 0.5*(problo[2]+probhi[2]))}; */ + Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // auto gshop = EB2::makeShop(my_sphere); @@ -1034,14 +1370,14 @@ VolumeOfFluid::tracer_vof_init_fraction(int lev, MultiFab& a_tracer) //box /* Array low{AMREX_D_DECL((problo[0]+10.3*dx[0]), - (problo[1]+10.3*dx[1]), + (problo[1]+10.3*dx[1]), (problo[2]+10.3*dx[2]))}; Array high{AMREX_D_DECL((probhi[0]-11.2*dx[0]), (probhi[1]-11.2*dx[1]), (probhi[2]-11.2*dx[2]))}; */ - Array low{AMREX_D_DECL( (problo[0]+.5/16.), - (problo[1]+.5/16.), - (problo[2]+.5/16.))}; + Array low{AMREX_D_DECL( (problo[0]+0.5/16.), + (problo[1]+0.5/16.), + (problo[2]+0.5/16.))}; Array high{AMREX_D_DECL((problo[0]+5.5/16.), (problo[1]+5.5/16.), (problo[2]+5.5/16.))}; @@ -1049,17 +1385,14 @@ VolumeOfFluid::tracer_vof_init_fraction(int lev, MultiFab& a_tracer) //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); auto my_box1= EB2::rotate(my_box, .3, 0); auto my_box2= EB2::rotate(my_box1, .2, 2); - //auto two =EB2::makeUnion(my_cyl_1, my_cyl); + auto two =EB2::makeIntersection(my_sphere, my_sphere1); //auto two = EB2::makeComplement(EB2::makeUnion(my_cyl_1, my_cyl)); // Generate GeometryShop - //auto gshop = EB2::makeShop(two); - auto gshop = EB2::makeShop(my_sphere); + auto gshop = EB2::makeShop(two); + //auto gshop = EB2::makeShop(my_sphere1); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); - - - } auto fact = amrex::makeEBFabFactory(geom, a_tracer.boxArray(), a_tracer.DistributionMap(), @@ -1110,7 +1443,7 @@ VolumeOfFluid::tracer_vof_init_fraction(int lev, MultiFab& a_tracer) // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. - v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer); + v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); } @@ -1200,7 +1533,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<", \"tag\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ - "_Proc_"+std::to_string(myproc)); + "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_leveldata[lev]; @@ -1280,11 +1615,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); - std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index())); + std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+1)<<"-"<<12<<"]=CELLCENTERED)" + TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+1)<<"-"<<18<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -1369,7 +1707,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } - //write alpha of the interface + //write id of the droplets or bubbles for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -1382,6 +1720,36 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } + //write height function values + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << hb_arr(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << ht_arr(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// TecplotFile <<"\n"; } // end MFIter @@ -1394,7 +1762,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) #include -#define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[2]< min[2]||c[0]>max[0]||c[1]> max[1]||c[2]> max[2]) + #define ORTHOGONAL_COMPONENT(c) (((c) + 1) % AMREX_SPACEDIM) // @touch defines the touching connectivity. This function updates @@ -1478,11 +1846,11 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto }*/ if(vof_arr(i,j,k)>EPS && tag_arr(i,j,k)==0.){ - std::queue fifo; + std::queue > fifo; tag_arr(i,j,k)=++ntag; fifo.push({i,j,k}); while (!fifo.empty()){ - IntVect cell=fifo.front(),ncell=cell; + Array cell=fifo.front(),ncell=cell; for (int d = 0; d < AMREX_SPACEDIM; d++) for (int det =-1;det<=1;det+=2){ ncell[d]=cell[d]+det; @@ -1536,7 +1904,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto } }//end if (algorithm to deal with the parallel process) //fix me: temporary solution for MPI boundary - tag[lev]->FillBoundary(); + tag[lev]->FillBoundary(geom[lev].periodicity()); int touch[ntag + 1]={}; //We search the cells in the box boundaries to determine if the tag value //of the cell and tag value of its neighboring ghost cell are connected by @@ -1628,7 +1996,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto } //fix me: temporary solution for MPI boundary - tag[lev]->FillBoundary(); + tag[lev]->FillBoundary(geom[lev].periodicity()); ntag=maxtag; } @@ -1650,8 +2018,8 @@ typedef struct { // void range_init (VofRange * r) { - r->max = - 10.e30; - r->min = 10.e30; + r->max = std::numeric_limits::lowest(); + r->min = std::numeric_limits::max(); r->sum = r->sum2 = 0.0; r->n = 0; } @@ -1689,7 +2057,8 @@ static void domain_range_reduce ( VofRange * s) { double in[5]; - double out[5] = { 10.e30, - 10.e30, 0., 0., 0. }; + double out[5] = { std::numeric_limits::max(), + std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; MPI_Op_create (range_reduce, true, &op); @@ -1829,15 +2198,22 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) ////// Estimate the phase error for cube case ////// //////////////////////////////////////////////////////////////////// + +////Translation of a cube Real error=0.; -if (false){ +if (0){ Real lencube=5./16., cube_vol=lencube*lencube*lencube; Array o0={0.1875,0.1875,0.1875},o, cube_min,cube_max; + //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; + int np=cube_min[d]/(probhi[d]-problo[d]); + cube_min[d]-=np*(probhi[d]-problo[d]); + np=cube_max[d]/(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< .15){ + // if (time > .15){ // Print()<<"test----"<<"\n"; - } + // } //AllPrint()<<"error ----"<< error<<"\n"; - //ParallelDescriptor::ReduceRealSum (&error, 1); + ParallelDescriptor::ReduceRealSum (&error, 1); //Print()<::max()) range[d][0][n] = s[d][n].min; - if (s[d][n].max>-10.e30) + if (s[d][n].max>-std::numeric_limits::max()) range[d][1][n] = s[d][n].max; } Real pos_limit[AMREX_SPACEDIM][2]; for(int d = 0; d < AMREX_SPACEDIM; d++){ - pos_limit[d][0]=10.e30,pos_limit[d][1]=-10.e30; + pos_limit[d][0]=std::numeric_limits::max(),pos_limit[d][1]=std::numeric_limits::lowest(); for (int n = 0; n < n_tag; n++){ if (pos_limit[d][0]>range[d][0][n]) pos_limit[d][0]=range[d][0][n]; @@ -2034,11 +2411,10 @@ if (true){ } outputFile <<"\n"; outputFile.close(); - first =0; } } // end lev // Close the file - + first =0; } void VolumeOfFluid::apply_velocity_field (Real time, int nstep) diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 18547f546..09d922c86 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -1,20 +1,20 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 3.1 # Max (simulated) time to evolve -max_step = -1 # Max number of time steps +stop_time = 2.4 # Max (simulated) time to evolve +max_step = 1 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # TIME STEP COMPUTATION # #.......................................# -incflo.fixed_dt = .0005 # Use this constant dt if > 0 +incflo.fixed_dt = .00390625 # Use this constant dt if > 0 #incflo.cfl = 0.5 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 100 # Steps between plot files +amr.plot_int = 1 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -23,16 +23,16 @@ amr.restart = "" # Checkpoint to restart from #.......................................# incflo.gravity = 0. 0. 0. # Gravitational force (3D) incflo.ro_0 = 1.0 # Reference density -incflo.ntrac = 2 +incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) incflo.mu = 1.0 # Dynamic viscosity coefficient #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 256 256 256 # Grid cells at coarsest AMRlevel +amr.n_cell = 16 16 16 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 32 32 32 +amr.max_grid_size = 16 16 16 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # From b5cd7842e2a5589df3f9593a576d38154de97d5b Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Tue, 6 Aug 2024 21:43:13 -0700 Subject: [PATCH 09/29] curvature calculation is done --- src/vof/VolumeOfFluid.H | 16 +- src/vof/VolumeOfFluid.cpp | 1164 ++++++++++++++++++++++++++++++++----- src/vof/partstr.H | 1000 +++++++++++++++++++++++++++++++ test_3d/inputs.droplet | 9 +- 4 files changed, 2041 insertions(+), 148 deletions(-) create mode 100644 src/vof/partstr.H diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index aafc97f20..81ae83e3a 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -6,6 +6,7 @@ // Header file (VolumeOfFluid class) #ifndef INCFLO_VOF_ #define INCFLO_VOF_ + class incflo; class VolumeOfFluid @@ -16,9 +17,11 @@ public: AMREX_D_DECL(amrex::Vector const& u_mac, amrex::Vector const& v_mac, amrex::Vector const& w_mac), - amrex::Real dt); + amrex::Real dt); void tracer_vof_init_fraction(int lev, amrex::MultiFab& a_tracer); void tracer_vof_update(int lev, amrex::MultiFab & a_tracer, amrex::Array & a_height); + void curvature_calculation(int lev, amrex::MultiFab & a_tracer, amrex::Array & a_height, + amrex::MultiFab & a_kappa); void write_tecplot_surface(amrex::Real time, int nstep); void WriteTecPlotFile (amrex::Real time, int nstep); void output_droplet (amrex::Real time, int nstep); @@ -28,8 +31,17 @@ public: amrex::Vector normal; // the plane defined by @m.@x = @alpha amrex::Vector alpha; -// the heights used for calculation of curvature +// stores the height values for calculation of curvature +// note the height is the distance between the cetroid of the current +// and the interface in the axis direction (x-, y-, z-). Therefore, +// each element in 'height' is a MultiFab of three components. +// height[lev][0] stores the height values in the positive direction of the axis. +// it means the empty cell on the top and full cell on the bottom. +// height[lev][1] stores the height values in the negative direction of the axis +// it means the empty cell on the bottom and full cell on the top. amrex::Vector> height; +// Curvature + amrex::Vector kappa; // the tag for droplets amrex::Vector tag; private: diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index b22439255..72cb4e1c1 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -13,10 +13,96 @@ using namespace amrex; #define CELL_IS_FULL(f) ((f) == 0. || (f) == 1.) #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) -#define vector_norm(v) (sqrt((v)->x*(v)->x + (v)->y*(v)->y + (v)->z*(v)->z)) #define CLAMP(x,a,b) ((x) < (a) ? (a) : (x) > (b) ? (b) : (x)) #define VOF_NODATA std::numeric_limits::max() #define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[2]< min[2]||c[0]>max[0]||c[1]> max[1]||c[2]> max[2]) +// Define VofVector as an array of 3 doubles +using VofVector = Array; +static_assert(sizeof(XDim3)==3*sizeof(Real)); +typedef struct { + Real min, max, sum, sum2, mean, stddev; + int n; +} VofRange; +// +// range_init: +// @r: a #VofRange. +// +// Initializes a #VofRange. +// +void range_init (VofRange & r) +{ + r.max = std::numeric_limits::lowest(); + r.min = std::numeric_limits::max(); + r.sum = r.sum2 = 0.0; + r.n = 0; +} +/** + * range_add_value: + * @r: a #VofRange. + * @val: a value to add to @r. + * + * Adds @val to @r. + */ +void range_add_value (VofRange & r, Real val) +{ + if (val < r.min) r.min = val; + if (val > r.max) r.max = val; + r.sum += val; + r.sum2 += val*val; + r.n++; +} +/** + * range_update: + * @r: a #VofRange. + * + * Updates the fields of @r. + */ +void range_update (VofRange & r) +{ + if (r.n > 0) { + if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) + r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) + /(Real) r.n); + else + r.stddev = 0.; + r.mean = r.sum/(Real) r.n; + } + else + r.min = r.max = r.mean = r.stddev = 0.; +} + +static void range_reduce (void * i, void * o, int * len, + MPI_Datatype * type) +{ + Real * in = (Real *) i; + Real * inout = (Real *) o; + if (in[0] < inout[0]) /* min */ + inout[0] = in[0]; + if (in[1] > inout[1]) /* max */ + inout[1] = in[1]; + inout[2] += in[2]; /* sum */ + inout[3] += in[3]; /* sum2 */ + inout[4] += in[4]; /* n */ +} + +static void domain_range_reduce ( VofRange & s) +{ + + double in[5]; + double out[5] = { std::numeric_limits::max(), + std::numeric_limits::lowest(), 0., 0., 0. }; + MPI_Op op; + + MPI_Op_create (range_reduce, true, &op); + in[0] = s.min; in[1] = s.max; in[2] = s.sum; in[3] = s.sum2; + in[4] = s.n; + MPI_Allreduce (in, out, 5, MPI_DOUBLE, op, MPI_COMM_WORLD); + MPI_Op_free (&op); + s.min = out[0]; s.max = out[1]; s.sum = out[2]; s.sum2 = out[3]; + s.n = out[4]; + +} + ////////////////////////////////////////////////////////////////////////////// //// @@ -34,14 +120,12 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - //height_hb.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - //height_ht.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); } } @@ -185,6 +269,8 @@ static int cut_cube_vertices (XDim3 center, GpuArray dx, return 0; } + + struct Segment{ int nnodes; /* number of nodes (2, 3 or 4) */ #if AMREX_SPACEDIM==2 @@ -193,10 +279,12 @@ struct Segment{ XDim3 node[4]; #endif XDim3 mv; - Real alpha, vof, tag; + Real alpha; + //vof, tag + Array vars; // Constructor to initialize the Segment - Segment(int n, Array const& nodes, XDim3 m, Real a, Real f, Real t, int ns=0) - : nnodes(n), mv (m), alpha (a), vof(f), tag(t) { + Segment(int n, Array const& nodes, XDim3 m, Real a, Array v, int ns=0) + : nnodes(n), mv (m), alpha(a), vars(v) { for (int i = 0; i < n; ++i) node[i]= nodes[ns==0?i:(i + 3)%(n + 2)]; } @@ -204,7 +292,7 @@ struct Segment{ static void add_segment (XDim3 const & center, GpuArray const & dx, Real alpha, XDim3 const & o, XDim3 const & m, - Vector & segments, int & nt, Real vof, Real tag) + Vector & segments, int & nt, Array vars) { /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m @@ -235,7 +323,7 @@ static void add_segment (XDim3 const & center, GpuArray co for (inode = 0; inode < nnodecutface; inode++) { XDim3 node = nodecutface[inode]; /* face node coordinates */ XDim3 diff1 = {o.x - node.x, o.y - node.y, o.z - node.z}; - Real length_diff1 = vector_norm (&diff1); + Real length_diff1 = sqrt(diff1.x*diff1.x+diff1.y*diff1.y+diff1.z*diff1.z); if (length_diff1 < 1e-20) /*degenerated case*/ return; Real max_sintheta = 0.; @@ -245,7 +333,7 @@ static void add_segment (XDim3 const & center, GpuArray co XDim3 diff2 = {nodecutface[jnode].x - node.x, nodecutface[jnode].y - node.y, nodecutface[jnode].z - node.z}; - Real length_diff2 = vector_norm (&diff2); + Real length_diff2 = sqrt(diff2.x*diff2.x+diff2.y*diff2.y+diff2.z*diff2.z); if (length_diff2 < 1e-20) return; Real sintheta = ((diff1.y*diff2.z - diff1.z*diff2.y)*m.x + @@ -282,20 +370,20 @@ static void add_segment (XDim3 const & center, GpuArray co /* assign data to nodeinfo array, increment number of wall faces and number of nodes */ if (nnodecutface <= 4) { nt += nnodecutface; - segments.emplace_back(nnodecutface, nodecutface, m, alpha, vof, tag); + segments.emplace_back(nnodecutface, nodecutface, m, alpha, vars); //Print() << " normal direction " < + void stencil (int const i, int const j, int const k, Array4 const & v, AMREX_D_PICK( , @@ -862,12 +951,11 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , - int d, Real * x) + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -878,6 +966,28 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } +/* + The function is similar to neighboring_column(). + The difference is that neighboring_column_corner() returns height @h of the neighboring column in + direction @(d[0], d[1]). kind of corner neighbors + */ + +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) +{ + Array neighbor={i,j,k}; + neighbor[d[0]/2]+=d[0]%2?-1:1; + neighbor[d[1]/2]+=d[1]%2?-1:1; + Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); + if (height!=VOF_NODATA) { + (*x)[0] = d[0] % 2 ? -1. : 1.; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; + } + else + return VOF_NODATA; + +} static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) @@ -918,20 +1028,429 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, } -void -VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array & height ) +static Real curvature_from_h (Real *x, Real *h, int c) { - Geometry const& geom =v_incflo->geom[lev]; - //auto const& dx = geom.CellSizeArray(); + Real det, a, b, hxx,hx,hyy,hy,hxy; + /*det = x[0]*x[1]*(x[0] - x[1]); a = x[1]*(h[0] - h[8]); b = x[0]*(h[1] - h[8]); + Real hxx = 2.*(a - b)/det; + Real hx = (x[0]*b - x[1]*a)/det; + + det = x[2]*x[3]*(x[2] - x[3]); a = x[3]*(h[2] - h[8]); b = x[2]*(h[3] - h[8]); + Real hyy = 2.*(a - b)/det; + Real hy = (x[2]*b - x[3]*a)/det; + + det = x[4]*x[5]*(x[4] - x[5]); a = x[5]*(h[4] - h[2]); b = x[4]*(h[5] - h[2]); + Real hx0 = (x[4]*b - x[5]*a)/det; + det = x[6]*x[7]*(x[6] - x[7]); a = x[7]*(h[6] - h[3]); b = x[6]*(h[7] - h[3]); + Real hx1 = (x[6]*b - x[7]*a)/det; + det = x[2]*x[3]*(x[2] - x[3]); a = x[3]*(hx0 - hx); b = x[2]*(hx1 - hx); + Real hxy = (x[2]*b - x[3]*a)/det;*/ + + hxx = h[0] - 2.*h[8] + h[1]; + hyy = h[2] - 2.*h[8] + h[3]; + hx = (h[0] - h[1])/2.; + hy = (h[2] - h[3])/2.; + hxy = (h[4] + h[7] - h[5] - h[6])/4.; + + /*hxx = (h[4] - 2.*h[8] + h[7])/2.; + hyy = (h[5] - 2.*h[8] + h[6])/2.; + hx = (h[4] - h[7])/2./sqrt(2.); + hy = (h[5] - h[6])/2./sqrt(2.); + hxy = (h[2] + h[3] - h[1] - h[0])/2.;*/ + + Real dnm = 1. + hx*hx + hy*hy; + Real kappa = (hxx + hyy + hxx*hy*hy + hyy*hx*hx - 2.*hxy*hx*hy)/sqrt (dnm*dnm*dnm); + return kappa; +} + + +/** + * curvature_along_direction: + * @(i,j,k): current cell. + * @d: x, y or z. + * @kappa: the curvature. + * + * Tries to compute an interface curvature for @cell using + * height-functions on equally-spaced columns in direction @d. + * + * Returns: %true if the curvature was successfully computed, %false + * otherwise. + */ + +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) +{ + Real x[9], h[9]; + Real orientation; + static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + + + if (!hv) { + bool loop=true; + /* no data for either directions, look four neighbors to collect potential interface positions */ + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { + Array neighbor={i,j,k}; + neighbor[oc[d][nd]]+=ndd%2?-1:1; + hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ + return false; + } + else if (fabs((*hv)(i,j,k,d))>1.) + return false; + int n=0; + for (int nd = 0; nd < 2; nd++) { + h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); + if (h[n] == VOF_NODATA ) + break; + n++; + h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd]+1, &x[n]); + if (h[n] == VOF_NODATA ) + break; + x[n] = - x[n]; + n++; + } + if (n == 4) { + int od[2]; + Real xd[2]; + bool search = true; + for (int nd = 0; nd < 2 && search; nd++) + for (int nj = 0; nj < 2 && search; nj++) { + od[0] = 2*oc[d][0] + nj; + od[1] = 2*oc[d][1] + nd; + h[n] = neighboring_column_corner (i, j, k, d, hv, od, &xd); + x[n] = xd[0]; + if (h[n] == VOF_NODATA || fabs (x[n]) != 1.) { + search = false; + break; + } + n++; + } + if (n == 8) { + /* all nine height function are found + * use 9-point stensil to calculate curvature + */ + h[n] = (*hv)(i,j,k,d); x[n] = 0.; + if(h[n] != VOF_NODATA) { + kappa = curvature_from_h (x, h, d)/dx[0]; + return true; + } + } + else { + h[4] = (*hv)(i,j,k,d); x[4] = 1.; + int ni; + for (ni = 0; ni < 5; ni++) + if (h[ni] == VOF_NODATA || fabs(x[ni])<1e-20) + break; + if (ni == 5 ) { + Real s[4]; + for (int nk=0; nk<4; nk++){ + s[nk] = (h[nk]-h[4])/x[nk]; + s[nk] = s[nk] /sqrt(1 + s[nk]*s[nk]); + } + kappa = (s[0] - s[1] + s[2] - s[3]) /dx[0]; + return true; + } + } + } + return false; +} -//update height using vof value +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) +{ + Real x[9], h[9]; + Real orientation; + static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + + + if (!hv) { + bool loop=true; + /* no data for either directions, look four neighbors to collect potential interface positions */ + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { + Array neighbor={i,j,k}; + neighbor[oc[d][nd]]+=ndd%2?-1:1; + hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ + return false; + } + else if (fabs((*hv)(i,j,k,d))>1.) + return false; + int n=0; + for (int nd = 0; nd < 2; nd++) { + h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); + n++; + h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd]+1, &x[n]); + x[n] = - x[n]; + n++; + } + int od[2],m=0; + Real xd[4][2]; + for (int nd = 0; nd < 2 ; nd++) + for (int nj = 0; nj < 2 ; nj++) { + od[0] = 2*oc[d][0] + nj; + od[1] = 2*oc[d][1] + nd; + h[n] = neighboring_column_corner (i, j, k, d, hv, od, &xd[m]); + x[n] = xd[m][0]; + n++,m++; + } + h[n] = (*hv)(i,j,k,d); x[n] = 0.; + for (n = 0; n < 9; n++) + if (h[n] == VOF_NODATA) + break; + if (n == 9) { + /* all nine height functions are found */ + kappa = curvature_from_h (x, h, d)/dx[0]; + return true; + } + else { + /* collect interface positions (based on height function) */ + VofVector pos; + for (n = 0; n < 9; n++) + if (h[n] != VOF_NODATA) { + if (n < 2) { + pos[oc[d][0]] = x[n]; + pos[oc[d][1]] = 0.; + } + else if (n < 4) { + pos[oc[d][1]] = x[n]; + pos[oc[d][0]] = 0.; + } + else if (n == 8) { + pos[oc[d][0]] = 0.; + pos[oc[d][1]] = 0.; + } + else { + pos[oc[d][0]] = xd[n-4][0]; + pos[oc[d][1]] = xd[n-4][1]; + } + pos[d] = orientation*h[n]; + interface.emplace_back(std::move(pos)); + } + return false; + } + + return false; +} + +static void orientation (VofVector m, Array &c) +{ + int i, j; + for (i = 0; i < AMREX_SPACEDIM; i++) + c[i] = i; + for (i = 0; i < AMREX_SPACEDIM - 1; i++) + for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) + if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; + } +} + +static int independent_positions (Vector &interface) +{ + if (interface.size() < 2) + return interface.size(); + + int j, ni = 1; + for (j = 1; j < interface.size() ; j++) { + int i; + bool depends = false; + for (i = 0; i < j && !depends; i++) { + Real d2 = 0.; + for (int c = 0; c < AMREX_SPACEDIM; c++) + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + depends = d2 < 0.5*0.5; + } + ni += !depends; + } + return ni; +} + + + +/** + * height_curvature_combined: + * @(i,j,k): current cell containing an interface. + * @dx: the grid size of the box. + * @hb: stores the height values in the axis positive direction. + * @ht: stores the height values in the axis negative direction. + * @mv: sotres the normal direction of interface. + * @aplha: stores the plane constant of reconstructed segement. + * + * Tries to estimate the curvature of an interface using + * height-functions, either on equally-spaced columns, + * or using parabola fits of interface positions + * defined using the height-functions in all directions. + * + * + * Returns: (double in 3D) the mean curvature of the interface + * contained in @(i,j,k), or %VOF_NODATA if the HF method could not + * compute a consistent curvature. + */ +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Array4 const & mv, + Array4 const & alpha) +{ + VofVector m; + Array try_dir; + for (int d = 0; d < AMREX_SPACEDIM; d++) + m[d] = mv(i,j,k,d); + + orientation (m, try_dir); /* sort directions according to normal */ + + Real kappa = 0.; + Vector interface; + for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ + if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) + return kappa; + /* Could not compute curvature from the simple algorithm along any direction: + * Try parabola fitting of the collected interface positions */ + + if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) + return VOF_NODATA; + + ParabolaFit fit; + XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; + + Real area=plane_area_center (mx, alpha(i,j,k,0),p); + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the + //coordinates of area center with the coordinate origin as (0.,0.,0.) + //After shifting, the origin becomes cell center. + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] -= 0.5; + // initialize the parameters for parabola fit + parabola_fit_init (fit, p, mx); + +////#if AMREX_SPACEDIM==2 +//// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); +////#elif !PARABOLA_SIMPLER + parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area*100.); +////#endif + for (int c = 0; c < interface.size(); c++) + parabola_fit_add (fit, interface[c], 1.); + parabola_fit_solve (fit); + kappa = parabola_fit_curvature (fit, 2.)/dx[0]; +# if PARABOLA_SIMPLER + int nn=3; +# else + int nn=6; +# endif + for (int c = 0; c < nn; c++) + delete[] fit.M[c]; // Delete each row + delete[] fit.M; // Delete the array of pointers + return kappa; +} + +/** + * curvature_fit: + * @(i,j,k): current cell containing an interface. + * @dx: the grid size of the box + * @vof: sotres the volume fraction value of the cell. + * @mv: sotres the normal direction of interface. + * @aplha: stores the plane constant of reconstructed segement. + * + * Computes an approximation of the curvature of the interface + * contained in @cell(i,j,k) using paraboloid fitting of the centroids of the + * reconstructed interface segments. + * + * + * Returns: (double in 3D) the mean curvature of the interface contained in @cell. + */ +Real curvature_fit (int i,int j,int k, GpuArray dx, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) +{ + VofVector m; + + for (int d = 0; d < AMREX_SPACEDIM; d++) + m[d] = mv(i,j,k,d); + + ParabolaFit fit; + XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; + + Real area=plane_area_center (mx, alpha(i,j,k,0),p); + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the + //coordinates of area center with the coordinate origin as (0.,0.,0.) + //After shifting, the origin becomes cell center. + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] -= 0.5; + // initialize the parameters for parabola fit + parabola_fit_init (fit, p, mx); + // add the center of the segment with the area of the segment as weight + parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); + int di=0,dj=0,dk=0; +#if AMREX_SPACEDIM==3 + for (dk = -2; dk <= 2; dk++) +#endif + for (dj = -2; dj <= 2; dj++) + for (di = -2; di <= 2; di++) + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + Real fvol=vof(ni,nj,nk,0); + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } + parabola_fit_solve (fit); + Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; +# if PARABOLA_SIMPLER + int nn=3; +# else + int nn=6; +# endif + for (int c = 0; c < nn; c++) + delete[] fit.M[c]; // Delete each row + delete[] fit.M; // Delete the array of pointers + return kappa; +} +////////////////////////////////////////////////////////////////////////////////////////////////// +/////// +/////// Update VOF properties including height values and normal direction +/////// +///////////////////////////////////////////////////////////////////////////////////////////////// + +void +VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array & height) +{ + Geometry const& geom =v_incflo->geom[lev]; + auto const& dx = geom.CellSizeArray(); + auto const& problo = geom.ProbLoArray(); + auto const& probhi = geom.ProbHiArray(); +/////////////////////////////////////////////////// +// update height using vof field +/////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ height[0].setVal(VOF_NODATA,dim,1); height[1].setVal(VOF_NODATA,dim,1); - //height[0].setVal(0.,dim,1); - //height[1].setVal(0.,dim,1); //fix me: have not thought of a way to deal with the MFIter with tiling //an option is to use similar way as MPI's implementation. for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { @@ -949,7 +1468,7 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array }); //end ParallelFor } //end MFIter - //fix me: temperary solution for MPI boundaries + //fix me: temporary solution for MPI boundaries height[0].FillBoundary(geom.periodicity()); height[1].FillBoundary(geom.periodicity()); @@ -961,7 +1480,7 @@ if(1){ Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); Array4 const& vof_arr = vof_mf.const_array(mfi); - //seach the cells on each boundary of the validbox + //search the cells on each boundary of the validbox //we do it by creating a new indexing space (i.e., bbx) with a constant //value for one coordinate direction. i.e., for +X face of the box, we can // set i=imax and just vary j and k index. @@ -986,12 +1505,10 @@ if(1){ Array cell={i,j,k}, ghost=cell; ghost[dim]+=nn%2?-1:1; Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - if (i==7 && j==0 && k==5){ + /*if (i==7 && j==0 && k==5){ AllPrint()<<"test_height_function "<<"hb "< const& vof_arr = vof_mf.const_array(mfi); @@ -1056,10 +1575,13 @@ if(1){ Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - XDim3 m; + XDim3 m={0.,0.,0.}; auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); - + if (i==5&&j==6&&k==8){ + int dddd; + Print()<<"------------"<<"\n"; + } if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ // if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { @@ -1100,12 +1622,367 @@ if(1){ } // end MFIter - //!!!!!!!!fix me: a temperary solution for the normal and alpha!!!!!!!!!!! + //!!!!!!!!fix me: a temporary solution for the normal and alpha!!!!!!!!!!! // fill value of ghost cells (BCs, MPI infor) normal[lev].FillBoundary(geom.periodicity()); alpha[lev].FillBoundary(geom.periodicity()); } +/////////////////////////////////////////////////////////////////////////////////////////////// +///// +///// curvature calculation +///// +/////////////////////////////////////////////////////////////////////////////////////////////// +void +VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) +{ + + Geometry const& geom =v_incflo->geom[lev]; + auto const& dx = geom.CellSizeArray(); + auto const& problo = geom.ProbLoArray(); + auto const& probhi = geom.ProbHiArray(); + MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), + MFInfo(), v_incflo->Factory(lev)); + + kappa.setVal(VOF_NODATA); + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& hb_arr = height[0].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& kappa_arr = kappa.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ + /* if (i==44&&j==35&&k==31){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { + if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { + kappa_arr(i,j,k,0) = kappa0; + nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); + } + //propagate the curvature + Real orientation; + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + for (int d = 0; d <= 1; d++) { + Array neighbor={i,j,k}; + neighbor[dim]+=d?-1:1; + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; + nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); + } + neighbor[dim]+=d?-1:1; + } + } + } + } + }); // ParallelFor + }//end MFIter + } + +//remaining_curvatures + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& hb_arr = height[0].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& kappa_arr = kappa.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + auto fvol = vof_arr(i,j,k,0); + + if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ + int dddd; + Print()<<"------------"<<"\n"; + } + + + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting + Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter + //!!!!!!!!fix me: a temporary solution for the curvature!!!!!!!!!!! + // fill value of ghost cells (BCs, MPI infor) + kappa.FillBoundary(geom.periodicity()); +// diffuse curvatures + int iter = 1; + MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); + while (iter--){ + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& temp_arr = temp_K.array(mfi); + Array4 const& kappa_arr = kappa.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; +/*#if AMREX_SPACEDIM==3 + for (int dk = -1; dk <= 1; dk++) +#endif + for (int dj = -1; dj <= 1; dj++) + for (int di = -1; di <= 1; di++) + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ + Arraynei; + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) + temp_arr(i,j,k,0)=s/sa; + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter + //for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + // Box const& bx = mfi.tilebox(); + // Array4 const& temp_arr = temp_K.array(mfi); + // Array4 const& kappa_arr = kappa.array(mfi); + // ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + // { + // kappa_arr(i,j,k,0)=temp_arr(i,j,k,0); + //}); // ParallelFor + //}//end MFIter + + } + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + +//fit_curvatures using paraboloid fitting of the centroids of the +//reconstructed interface segments + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& hb_arr = height[0].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& kappa_arr = kappa.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + /* if (i==4&&j==0&&k==4){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // paraboloid fitting of the centroids of the reconstructed interface segments + kappa_arr(i,j,k,0) = curvature_fit (i,j,k,dx,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter + + //!!!!!!!!fix me: a temporary solution for the curvature!!!!!!!!!!! + // fill value of ghost cells (BCs, MPI infor) + kappa.FillBoundary(geom.periodicity()); + + +///////////////////////////////////////////////////////////////////////// +/// The following is used to do statistics of calculated curvature +/// for numerical tests. +///////////////////////////////////////////////////////////////////////// +if (1){ + VofRange kappa_range; + range_init(kappa_range); + + struct KappaPrint{ + Real kappa, angle; + XDim3 center; + int i,j,k; + // Default constructor + KappaPrint() : kappa(0), angle(0), center(), i(0), j(0), k(0) {} + // Constructor to initialize the KappaPrint + KappaPrint(Real ka, Real a, XDim3 o,int i, int j, int k): kappa(ka),angle(a),center(o), + i(i),j(j),k(k){} + // Copy assignment operator + KappaPrint& operator=(const KappaPrint& other) { + if (this != &other) { // self-assignment check + kappa = other.kappa; + angle = other.angle; + i = other.i; + j = other.j; + k = other.k; + for (int c = 0; c < AMREX_SPACEDIM; c++) + (¢er.x)[c]=(&other.center.x)[c]; + } + return *this; + } + }; + Vector kout,removed_elements; + Box const& domain = geom.Domain(); + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), + 0.5*(problo[1]+probhi[1]), + 0.5*(problo[2]+probhi[2]))}; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + const auto lo = lbound(bx); + const auto hi = ubound(bx); + + Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& kappa_arr = kappa.const_array(mfi); + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + /* if(i==6&&j==4&&k==7) + Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ + MPI_Datatype mpi_kappa_type; + // Define the lengths of each block + int lengths[6] = {1, 1, 3, 1, 1, 1}; + + // Define the displacements of each block + const MPI_Aint base = offsetof(KappaPrint, kappa); + MPI_Aint disp[6] = { + offsetof(KappaPrint, kappa) - base, + offsetof(KappaPrint, angle) - base, + offsetof(KappaPrint, center) - base, + offsetof(KappaPrint, i) - base, + offsetof(KappaPrint, j) - base, + offsetof(KappaPrint, k) - base + }; + + // Define the types of each block + MPI_Datatype types[6] = {MPI_DOUBLE, MPI_DOUBLE, MPI_DOUBLE, MPI_INT, MPI_INT, MPI_INT}; + + // Create the MPI datatype + MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); + MPI_Type_commit(&mpi_kappa_type); + +// Gather data from all processes + Vector recvcounts(nprocs); + Vector displs(nprocs, 0); + MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); + for (int i = 1; i < nprocs; ++i) + displs[i] = displs[i-1] + recvcounts[i-1]; + + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ +// Sort the vector by center.x from high to low + std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { + return a.center.x > b.center.x; + }); + + // Use remove_if and copy elements that match center.y<0. to removed_elements + auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { + if (kp.center.z < 0.) { + removed_elements.push_back(kp); + return true; + } + return false; + }); + // Erase the removed elements from the original vector + kout.erase(it, kout.end()); + // Append the removed elements back to the original vector + kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); + + + Print()<<"# of interfacial cells"< const& tracer, //amrex::Print() << " VOF Level#" << finest_level<<"\n"; - // ************************************************************************************* + // *********************************************************************** // Allocate space for the fluxes for vof advection - // ************************************************************************************* + // *********************************************************************** Vector m_total_flux, vof_total_flux; //auto& ld = *v_incflo->m_leveldata[lev]; for (int lev = 0; lev <= finest_level; ++lev) { @@ -1180,7 +2057,7 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, //really matter.) // use for calculating cell-centered MultiFabs - Box const& bx = mfi.tilebox(); + Box const& bx = mfi.tilebox(); //auto const& ijk_min= bx.smallEnd(); //auto const& ijk_max= bx.bigEnd(); // use for calculating the vof flux over the cell faces @@ -1305,14 +2182,10 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, - // update the normal and alpha of the plane in each interface cell - // after each sweep + // update the normal and alpha of the plane in each interface cell after each sweep tracer_vof_update (lev, *tracer[lev], height[lev]); - - }// end i-,j-,k-sweep: calculation of vof advection - - + curvature_calculation (lev, *tracer[lev], height[lev], kappa[lev]); }// end lev start = (start + 1) % AMREX_SPACEDIM; @@ -1337,34 +2210,31 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) #ifdef AMREX_USE_EB if (vof_init_with_eb) { if (lev == 0) { - Array center{AMREX_D_DECL((problo[0]+.45), + /* Array center{AMREX_D_DECL((problo[0]+.45), (problo[1]+.1), - (problo[2]+.45))}; + (problo[2]+.45))};*/ Array center1{AMREX_D_DECL((problo[0]+.45), (problo[1]+1.1), (problo[2]+.45))}; - /* Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), + Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; */ + 0.5*(problo[2]+probhi[2]))}; Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); - // auto gshop = EB2::makeShop(my_sphere); - - // Initialise cylinder parameters - int direction = 1; - Real height = 14.5*dx[0]; + int direction = 2; + Real height = 1.6; center[0]=0.5*(problo[0]+probhi[0]); center[1]=0.5*(problo[1]+probhi[1]); - center[2]=0.75*(problo[1]+probhi[1]); + center[2]=0.5*(problo[1]+probhi[1]); // Build the Cylinder implficit function representing the curved walls - EB2::CylinderIF my_cyl(radius, height, direction, center, false); + EB2::CylinderIF my_cyl(radius, height, direction, center, true); radius = 8.0*dx[0]; EB2::CylinderIF my_cyl_1(radius, height, direction, center, fluid_is_inside); @@ -1389,8 +2259,9 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) //auto two = EB2::makeComplement(EB2::makeUnion(my_cyl_1, my_cyl)); // Generate GeometryShop - auto gshop = EB2::makeShop(two); - //auto gshop = EB2::makeShop(my_sphere1); + //auto gshop = EB2::makeShop(two); + auto gshop = EB2::makeShop(my_sphere); + //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); } @@ -1406,14 +2277,66 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) } else #endif { + + struct VOFPrint{ + Real vof; + int i,j,k; + // Default constructor + VOFPrint() : vof(0), i(0), j(0), k(0) {} + // Constructor to initialize the VOFPrint + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} +// Copy assignment operator + VOFPrint& operator=(const VOFPrint& other) { + if (this != &other) { // self-assignment check + vof = other.vof; + i = other.i; + j = other.j; + k = other.k; + } + return *this; + } + }; + Vector vout; + // Define the file name + std::string filename = "vof_value-16.dat"; + // Open the file + std::ifstream infile(filename); + + if (!infile) { + std::cerr << "Unable to open file " << filename << std::endl; + exit; + } + // Read the file line by line + std::string line; + while (std::getline(infile, line)) { + std::istringstream iss(line); + int i, j, k; + Real value; + if (!(iss >> i >> j >> k >> value)) { + std::cerr << "Error reading line: " << line << std::endl; + continue; + } + vout.emplace_back(value,i,j,k); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif - for (MFIter mfi(a_tracer); mfi.isValid(); ++mfi) + for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { - Box const& vbx = mfi.validbox(); + //Box const& vbx = mfi.validbox(); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -1437,13 +2360,16 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (rs > 0.5) tracer(i,j,k) = 0.0; else if (rs < -.5) tracer(i,j,k) = 1.0; else tracer(i,j,k) = 0.5-rs; - }); + });*/ } + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -1491,6 +2417,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0; for (int k = lo.z; k <= hi.z; ++k) { @@ -1512,12 +2439,12 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("< 0) { // std::ofstream TecplotFile; // TecplotFile.open(tecplotfilename, std::ios_base::trunc); - TecplotFile << "TITLE = \"incflow simulation from processer# " << myproc << "\" "<< "\n"; + TecplotFile << "TITLE = \"incflow simulation from processor# " << myproc << "\" "<< "\n"; //spatial coordinates TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); - //output varibles - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<", \"tag\""<<"\n"; + //output variables + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\"" + <<", \"tag\""<<", \"kappa\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); @@ -1543,8 +2471,8 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) for (const auto& seg : segments) { for (int in = 0; in < seg.nnodes; in++) TecplotFile <m_leveldata[lev]; @@ -1620,7 +2549,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+1)<<"-"<<18<<"]=CELLCENTERED)" + TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+1)<<"-"<<19<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& tag_arr = tag[lev].const_array(mfi); Array4 const& hb_arr = height[lev][0].const_array(mfi); Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -1750,6 +2680,19 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } }// + //write curvature + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << kappa_arr(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } TecplotFile <<"\n"; } // end MFIter @@ -2006,70 +2949,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto } -typedef struct { - Real min, max, sum, sum2, mean, stddev; - int n; -} VofRange; -// -// gts_range_init: -// @r: a #VofRange. -// -// Initializes a #VofRange. -// -void range_init (VofRange * r) -{ - r->max = std::numeric_limits::lowest(); - r->min = std::numeric_limits::max(); - r->sum = r->sum2 = 0.0; - r->n = 0; -} -/** - * range_add_value: - * @r: a #GtsRange. - * @val: a value to add to @r. - * - * Adds @val to @r. - */ -void range_add_value (VofRange * r, Real val) -{ - if (val < r->min) r->min = val; - if (val > r->max) r->max = val; - r->sum += val; - r->sum2 += val*val; - r->n++; -} -static void range_reduce (void * i, void * o, - int * len, - MPI_Datatype * type) -{ - Real * in = (Real *) i; - Real * inout = (Real *) o; - if (in[0] < inout[0]) /* min */ - inout[0] = in[0]; - if (in[1] > inout[1]) /* max */ - inout[1] = in[1]; - inout[2] += in[2]; /* sum */ - inout[3] += in[3]; /* sum2 */ - inout[4] += in[4]; /* n */ -} - -static void domain_range_reduce ( VofRange * s) -{ - double in[5]; - double out[5] = { std::numeric_limits::max(), - std::numeric_limits::lowest(), 0., 0., 0. }; - MPI_Op op; - - MPI_Op_create (range_reduce, true, &op); - in[0] = s->min; in[1] = s->max; in[2] = s->sum; in[3] = s->sum2; - in[4] = s->n; - MPI_Allreduce (in, out, 5, MPI_DOUBLE, op, MPI_COMM_WORLD); - MPI_Op_free (&op); - s->min = out[0]; s->max = out[1]; s->sum = out[2]; s->sum2 = out[3]; - s->n = out[4]; - -} ////////////////////////////////////////////////////////////////////////////// //// @@ -2109,7 +2989,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; - range_init (&s[d][n]); + range_init (s[d][n]); range[d][0][n] = 0.; range[d][1][n] = 0.; } @@ -2127,7 +3007,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - //fix me: not compatable with GPUs + //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { for (int k = lo.z; k <= hi.z; ++k) { @@ -2165,7 +3045,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int d = 0; d < AMREX_SPACEDIM; d++) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) - range_add_value (&s[d][itag-1], (&p.x)[d]); + range_add_value (s[d][itag-1], (&p.x)[d]); } } // }); @@ -2190,7 +3070,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int d = 0; d < AMREX_SPACEDIM; d++) { ParallelDescriptor::ReduceRealSum (mcent[d], n_tag); for (int n = 0; n < n_tag; n++) - domain_range_reduce(&s[d][n]); + domain_range_reduce(s[d][n]); } } //////////////////////////////////////////////////////////////////// @@ -2227,7 +3107,7 @@ if (0){ const auto hi = ubound(bx); Array4 const& fv = ld.tracer.const_array(mfi); - //fix me: not compatable with GPUs + //fix me: not compatible with GPUs ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { if (fv(i,j,k)>0.){ @@ -2290,7 +3170,7 @@ if (0){ Box const& bx = mfi.tilebox(); Array4 const& fv = ld.tracer.const_array(mfi); - //fix me: not compatable with GPUs + //fix me: not compatible with GPUs ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { //if (fv(i,j,k)>0.){ diff --git a/src/vof/partstr.H b/src/vof/partstr.H new file mode 100644 index 000000000..fc0a093a0 --- /dev/null +++ b/src/vof/partstr.H @@ -0,0 +1,1000 @@ +#ifndef PI +#define PI 3.14159265358979323846 +#endif + +typedef struct { + int Np; // number of particles per string + int Ns; // number of strings (cross sections) per cell + Real Hp; // length of string relative to cell size + Real eps; // threshold for convergence + int itermax; // maximum number of iterations + Real eta; // relaxation factor + bool nohf; // disable height functions, always use particles + int stat_sh; // number of cells with height functions + int stat_sc; // number of cells with particles +} Partstr; + +// Transformation of coordinates. +// |n +// | +// | +// o-----t +// / +// /u +typedef struct { + XDim3 o; // origin + XDim3 t, n, u; // orthonormal positive-oriented base +} Trans; + +const int kMaxSection = 125 * 2; // maximum number of endpoints + // from neighbor cells + // (5x5x5 stencil and 2 endpoints in each) +const int kMaxFacet = 12; // maximum number of vertices per facet + +const int kMaxNp = 31; // maximum value of partstr_conf.Np + + +#if AMREX_SPACEDIM==2 +#define kNs 1 +#else +#define kNs 3 +#endif +static Partstr partstr_conf = {7, kNs, 4., 1e-5, 20, 0.5, false}; +#undef kNs + +// Unit vector at angle ph +static XDim3 Unit(Real ph) { + XDim3 p; + p.x = cos(ph); + p.y = sin(ph); + p.z = 0; + return p; +} + +// Rotate planar vector e by planar unit vector de +static XDim3 Rotate(XDim3 e, XDim3 de) { + XDim3 p; + p.x = e.x * de.x - e.y * de.y; + p.y = e.x * de.y + e.y * de.x; + p.z = 0; + return p; +} + +// Rotate planar vector e by planar unit vector de in the negative direction +static XDim3 Rotatem(XDim3 e, XDim3 de) { + XDim3 p; + p.x = e.x * de.x + e.y * de.y; + p.y = -e.x * de.y + e.y * de.x; + p.z = 0; + return p; +} + +// Third component of cross product +static double Cross3(XDim3 a, XDim3 b) { + return a.x * b.y - a.y * b.x; +} + +static XDim3 Cross(XDim3 a, XDim3 b) { + XDim3 r; + r.x = a.y * b.z - a.z * b.y; + r.y = a.z * b.x - a.x * b.z; + r.z = a.x * b.y - a.y * b.x; + return r; +} + +static XDim3 Add(XDim3 a, XDim3 b) { + a.x += b.x; + a.y += b.y; + a.z += b.z; + return a; +} + +static XDim3 Sub(XDim3 a, XDim3 b) { + a.x -= b.x; + a.y -= b.y; + a.z -= b.z; + return a; +} + +static XDim3 Mul(XDim3 a, Real k) { + a.x *= k; + a.y *= k; + a.z *= k; + return a; +} + +static XDim3 Div(XDim3 a, Real k) { + a.x /= k; + a.y /= k; + a.z /= k; + return a; +} + +static XDim3 Coord(Real x, Real y, Real z) { + XDim3 r = {x, y, z}; + return r; +} + +static XDim3 Zero() { + XDim3 r; + r.x = 0; + r.y = 0; + r.z = 0; + return r; +} + +static Real Dot(XDim3 a, XDim3 b) { + Real s = 0; + s += a.x * b.x; + s += a.y * b.y; + s += a.z * b.z; + return s; +} + +static Real Sqnorm(XDim3 a) { + return Dot(a, a); +} + +static Real Norm(XDim3 a) { + return sqrt(Sqnorm(a)); +} + +static Real Norm1(XDim3 a) { + return fabs(a.x) + fabs(a.y) + fabs(a.z); +} + +static Real NormMax(XDim3 a) { + Real r = fabs(a.x); + if (fabs(a.y) > r) { + r = fabs(a.y); + } + if (fabs(a.z) > r) { + r = fabs(a.z); + } + return r; +} + +static Real Sqdist(XDim3 a, XDim3 b) { + return Sqnorm(Sub(a, b)); +} + +static Real Dist(XDim3 a, XDim3 b) { + return sqrt(Sqdist(a, b)); +} + +static Real Dotv(int np, const XDim3* aa, const XDim3* bb) { + Real s = 0; + int i; + for (i = 0; i < np; ++i) { + s += Dot(aa[i], bb[i]); + } + return s; +} + +// Positions of particles. +// p: central particle +// ph: orientation angle (phi) +// th: bending angel (theta) +// np: number of particles +// hp: distance between particles +// Output: +// xx: array of length np +static void XX(XDim3 p, Real ph, Real th, int np, Real hp, XDim3* xx) { + int c = np / 2, j; + xx[c] = p; + XDim3 ep = Mul(Unit(ph + 0.5 * th), hp); + XDim3 em = Mul(Unit(ph - 0.5 * th), -hp); + XDim3 de = Unit(th); + for (j = 0; j < c; ++j) { + xx[c + j + 1] = Add(xx[c + j], ep); + xx[c - j - 1] = Add(xx[c - j], em); + ep = Rotate(ep, de); + em = Rotatem(em, de); + } +} + +// Returns nearest to x point on line segment [a, b]. +static XDim3 Nearest(XDim3 a, XDim3 b, XDim3 x) { + b = Sub(b, a); + x = Sub(x, a); + Real q = Dot(b, x) / Dot(b, b); + q = CLAMP(q, 0., 1.); + a.x += b.x * q; + a.y += b.y * q; + a.z = 0; + return a; +} + +// Derivative dX/dph +static void DxDph(XDim3 p, Real ph, Real th, int np, Real hp, XDim3* xx) { + (void)p; + int c = np / 2, j; + xx[c] = Zero(); + XDim3 ep = Mul(Unit(ph + 0.5 * th + PI * 0.5), hp); + XDim3 em = Mul(Unit(ph - 0.5 * th + PI * 0.5), -hp); + XDim3 de = Unit(th); + for (j = 0; j < c; ++j) { + xx[c + j + 1] = Add(xx[c + j], ep); + xx[c - j - 1] = Add(xx[c - j], em); + ep = Rotate(ep, de); + em = Rotatem(em, de); + } +} + +// Derivative dX/dth +static void DxDth(XDim3 p, Real ph, Real th, int np, Real hp, XDim3* xx) { + (void)p; + int c = np / 2; + xx[c] = Zero(); + XDim3 ep = Mul(Unit(ph + 0.5 * th + PI * 0.5), hp); + XDim3 em = Mul(Unit(ph - 0.5 * th + PI * 0.5), hp); + XDim3 de = Unit(th); + for (int j = 0; j < c; ++j) { + Real jp = j + 0.5; + xx[c + j + 1] = Add(xx[c + j], Mul(ep, jp)); + xx[c - j - 1] = Add(xx[c - j], Mul(em, jp)); + ep = Rotate(ep, de); + em = Rotatem(em, de); + } +} + +// Forces on particles. +// np: number of particles +// xx: positions +// nl: number of points in ll +// ll: flat array of endpoints of line segments +// eta: relaxation factor +// k: curvature +// Output: +// ff: forces +static void FF(int np, const XDim3* xx, int nl, + const XDim3 * ll, Real eta, Real k,XDim3* ff){ + if (nl == 0) { + for (int i = 0; i < np; ++i) { + ff[i] = Zero(); + } + return; + } + for (int i = 0; i < np; ++i) { + const XDim3 x = xx[i]; + XDim3 pm; + Real distm = -1; + + for (int l = 0; l < nl; l += 2) { + const XDim3 p = Nearest(ll[l], ll[l + 1], x); + const Real dist = Sqdist(x, p); + if (distm < 0 || dist < distm) { + pm = p; + distm = dist; + } + } + ff[i] = Mul(Sub(pm, x), eta); + } +} + +// Iteration of evolution of particles. +// p_,ph_,th_: current configuration +// np: number of particles +// hp: distance between particles +// ff: forces (output of F()) +// xx: buffer of size np +// Output: +// p_,ph_,th_: new configuration +// ff, xx: modified +// Returns maximum absolute difference. +static double Iter(XDim3& p_, Real& ph_, Real& th_, + int np, Real hp, XDim3* ff, XDim3 * xx) +{ + XDim3 p = p_; + Real ph = ph_; + Real th = th_; + + XDim3 tt[kMaxNp]; + int c = np / 2; + + XX(p, ph, th, np, hp, xx); + + // Skip correction of p, assume that p is initialized on a line segment + // // correct p + // p = Add(p, ff[c]); + // X(p, ph, th, np, hp, tt); + // for (int i = 0; i < np; ++i) { + // XDim3 dx = Sub(tt[i], xx[i]); + // xx[i] = Add(xx[i], dx); + // ff[i] = Sub(ff[i], dx); + // } + + // correct phi + DxDph(p, ph, th, np, hp, tt); + ph += Dotv(np, tt, ff) / Dotv(np, tt, tt); + XX(p, ph, th, np, hp, tt); + for (int i = 0; i < np; ++i) { + XDim3 dx = Sub(tt[i], xx[i]); + xx[i] = Add(xx[i], dx); + ff[i] = Sub(ff[i], dx); + } + + // correct theta + DxDth(p, ph, th, np, hp, tt); + th += Dotv(np, tt, ff) / Dotv(np, tt, tt); + XX(p, ph, th, np, hp, tt); + + Real r = 0; + for (int i = 0; i < np; ++i) { + r = MAX(r, NormMax(Sub(xx[i], tt[i]))); + } + p_ = p; + ph_ = ph; + th_ = th; + return r; +} + +static Real Curv(Real hp, Real th) { + return 2. * sin(th * 0.5) / hp; +} + +static void Swap(XDim3& a, XDim3& b) { + XDim3 t; + t = a; + a = b; + b = t; +} + +static XDim3 Abs(XDim3 p) { + p.x = fabs(p.x); + p.y = fabs(p.y); + p.z = fabs(p.z); + return p; +} + +static Real Get(XDim3 p, int i) { + return i == 0 ? p.x : i == 1 ? p.y : p.z; +} + +// Index of minimal component. +static int Argmin(XDim3 p) { + int im = 0; + for (int i = 1; i < 3; ++i) { + if (Get(p, i) < Get(p, im)) { + im = i; + } + } + return im; +} + +// Sets component i of point p to a +static void Set(XDim3& p, int i, Real a) { + if (i == 0) { + p.x = a; + } else if (i == 1) { + p.y = a; + } else { + p.z = a; + } +} + +// Returns 3D base aligned with mesh directions. +// n: unit vector +// Output: +// *t, *u: vectors to form orthonormal base +static void GetBase(XDim3 n, XDim3& t, XDim3& u) { + int i = Argmin(Abs(n)); + XDim3 e = Zero(); + Set(e, i, 1); + n = Div(n, Norm(n)); + t = Cross(n, e); + t = Div(t, Norm(t)); + u = Cross(t, n); +} + +// Transformation from global to local coordinates. +// p: global coordinates +// o: origin +// t,n,u: orthonormal base +// Output: +// l: local coordinates of p in +static XDim3 GlbToLoc(XDim3 p, const Trans& w) { + p = Sub(p, w.o); + XDim3 l = {Dot(w.t, p), Dot(w.n, p), Dot(w.u, p)}; + return l; +} + +// Transformation from local to global coordinates. +// l: local coordinates in +// t,n,u: orthonormal base +// o: origin +// Output: +// *p: global coordinates +static XDim3 LocToGlb(XDim3 l, const Trans& w) { + XDim3 p = w.o; + p = Add(p, Mul(w.t, l.x)); + p = Add(p, Mul(w.n, l.y)); + p = Add(p, Mul(w.u, l.z)); + return p; +} + +// Set z-component to zero if 2D. +static void SetZeroZ(XDim3 & p) { +#if AMREX_SPACEDIM==2 + p.z = 0; +#endif +} + +/** + * vof_facet: + * @dx: grid size in x-,y-, z-direction. + * @q: cell center. + * @p: return the vertices coordinates (of size 2 in 2D and 6 in 3D) + * @m: the normal to the interface. + + * Fills @p with the coordinates of points defining the + * VOF-reconstructed interface facet defined by @t. + * + * Returns: the number of points defining the facet. + */ +int vof_facet (GpuArray dx, + XDim3 q, XDim3 m, Real alpha, XDim3 * p) + +{ + + int c; + XDim3 o=q; +#if AMREX_SPACEDIM==2 + Real x, y; +#else /* 3D */ + Real max = fabs (m.x); + c = 0; + if (fabs (m.y) > max) { + max = fabs (m.y); + c = 1; + } + if (fabs (m.z) > max) + c = 2; + q.x -= dx[0]/2.; q.y -= dx[1]/2.; q.z -= dx[2]/2.; + (&q.x)[c] += dx[c]*alpha/(&m.x)[c]; + + int d[12]; + /* array of node coordinates for a cut face */ + Array nodecutface; + int n = cut_cube_vertices (o, dx, q, m, nodecutface, d); + for (c=0; c & cell, const Trans& w, XDim3* ll, int& nl, + GpuArray dx, + GpuArray problo, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) +{ + + for (int dk = -2; dk <= 2; ++dk) { + for (int dj = -2; dj <= 2; ++dj) { + for (int di = -2; di <= 2; ++di) { + if (dk==0 &&dj==0&&di==0) + continue; + Array ncell={cell[0]+di,cell[1]+dj, cell[2]+dk}; + Real fvol = vof(ncell[0],ncell[1],ncell[2]); + if (!CELL_IS_FULL (fvol)) { + int q = 0; // number of intersections found + XDim3 rn;// neighbor cell center + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&rn.x)[c] = problo[c] + dx[c]*(ncell[c] + .5); + // if cell intersects plane + if (fabs(Dot(w.u, Sub(w.o, rn))) <= dx[0] * Norm1(w.u) * 0.5) { + // normal to facet + XDim3 m={mv(ncell[0],ncell[1],ncell[2],0), + mv(ncell[0],ncell[1],ncell[2],1), + mv(ncell[0],ncell[1],ncell[2],2)}; + Real al = alpha(ncell[0],ncell[1],ncell[2],0); + XDim3 pp[kMaxFacet]; + int nf = vof_facet(dx, rn, m, al, pp); + /*Print()<<"vof_facet"< 0) + nl += 2; + } + } + } + } + } + } + } + } +} + +// Cross-section of interface from neighbor cells in plane coordinates. +// point: center cell +// w: transformation +// ll: buffer for at least kMaxSection more points +// *nl: current size of ll +// Output: +// ll: appended by local coordinates of endpoints, +// p = o + t*l.x + t*l.y , [pa,pb] is one line segment +// *nl: new size of ll +static void Section(Array & cell, const Trans & w, XDim3* ll, int& nl, + GpuArray dx, + GpuArray problo, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) +{ +#if AMREX_SPACEDIM==2 + Section2(cell, w, ll, nl, dx, problo, vof, mv, alpha); +#else + Section3(cell, w, ll, nl, dx, problo, vof, mv, alpha); +#endif +} + +// Curvature of a set line segments. +// ll: flat array endpoints of line segments +// nl: size of ll +// delta: cell size +// Output: +// res_: difference at last iteration +// it_: number of iterations +static double GetLinesCurv(XDim3 *ll, int nl, Real delta, const Partstr* conf, + Real& res_, int& it_, const Trans& w) +{ + if (nl >= 4) { // require at least two segments + const int Np = conf->Np; + const Real eta = conf->eta; + const int itermax = conf->itermax; + const Real hp = conf->Hp * delta / (Np - 1); + + XDim3 xx[kMaxNp]; // positions + XDim3 ff[kMaxNp]; // forces + XDim3 p = {0., 0, 0.}; + Real ph = 0.; + Real th = 0.; + Real kappa = 0; + Real res = 0; + int it = 0; + for (it = 0; it < itermax; ++it) { + XX(p, ph, th, Np, hp, xx); + FF(Np, xx, nl, ll, eta, kappa, ff); + + kappa = Curv(hp, th); + res = Iter(p, ph, th, Np, hp, ff, xx); + if (res / (eta * delta) < conf->eps) { + break; + } + } + res_ = res; + it_ = it; + // write the file of particle coordinates + FILE* o; + o = fopen("particle.txt", "w"); + fprintf(o, " x,y,z\n"); + + for (int i = 0; i < Np; ++i){ + xx[i] = LocToGlb(xx[i], w); + } + + for (int i = 0; i < Np; ++i) { + fprintf(o, "%g,%g,%g", xx[i].x, xx[i].y, xx[i].z); + fprintf(o, "\n"); + } + fclose(o); + return kappa; + } + return 0; +} + +// Curvature of cross section by plane through a.n,a.t and point a.o +// point: target cell +// nn: normal +// w: transformation to local coordinates +static Real GetCrossCurv(Array & cell, const Trans & w, const Partstr* conf, + GpuArray dx, + GpuArray problo, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) +{ + XDim3 ll[kMaxSection]; + int nl = 0; + Section(cell, w, ll, nl, dx, problo, vof, mv, alpha); + Real res; + int it; + //fix me: grid size + return GetLinesCurv(ll, nl, dx[0], conf, res, it, w); + +} + + +// Transformation b rotated at angle. +// s: index of cross section +// Ns: number of cross sections +static Trans GetSectionTrans(int s, int Ns, const Trans & b) { + const Real g = PI * s / Ns; + Trans w = b; + w.t = Add(Mul(b.t, cos(g)), Mul(b.u, sin(g))); + w.u = Cross(w.t, w.n); + return w; +} + +// Mean curvature over multiple cross sections by planes rotated around b.n +static Real GetMeanCurv(Array &cell, const Trans & b, const Partstr* conf, + GpuArray dx, + GpuArray problo, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) +{ + Real ksum = 0; + const int Ns = conf->Ns; + for (int s = 0; s < Ns; ++s) { + const Trans w = GetSectionTrans(s, Ns, b); + ksum += GetCrossCurv(cell, w, conf, dx, problo, vof, mv, alpha); + } + return ksum / Ns; +} + +void CheckConf(const Partstr* conf) { + if (!(conf->Np <= kMaxNp)) { + fprintf( + stderr, "error: Too many particles per string Np=%d > %d\n", conf->Np, + kMaxNp); + exit(1); + } + if (!(conf->Np % 2 == 1)) { + fprintf(stderr, "error: Np=%d is not an odd number\n", conf->Np); + exit(1); + } +} + +// Method of connected particles for curvature estimation (January 13, 2020) +// based on paper +// Karnakov P., Litvinov S. and Koumoutsakos P., +// A hybrid particle volume-of-fluid method for curvature estimation in +// multiphase flows. International Journal of Multiphase Flow. 2020 +// https://doi.org/10.1016/j.ijmultiphaseflow.2020.103209 +Real partstr_curvature (int i,int j,int k, + GpuArray dx, + GpuArray problo, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) +{ + + Partstr* conf = &partstr_conf; + CheckConf(conf); + XDim3 m={mv(i,j,k,0),mv(i,j,k,1),mv(i,j,k,2)},p; + //find transformation to local coordinates at the interface. + Trans b; + plane_area_center (m, alpha(i,j,k,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] = problo[c] + dx[c]*((&p.x)[c] + (c<1?i:c<2?j:k)); + SetZeroZ(p); + + b.o = p; + b.n = Div(m, Norm(m)); + GetBase(b.n, b.t, b.u); + Array cell={i,j,k}; + Real kappa = GetMeanCurv(cell, b, conf, dx, problo, vof,mv, alpha); + return kappa; +} + + +#define PARABOLA_FIT_CENTER_WEIGHT .1 +#define PARABOLA_SIMPLER 0 +// Function to calculate the norm of the vector +Real vector_norm(const VofVector& v) { + return std::sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); +} + +// Function to normalize the vector +void vector_normalize(VofVector& v) { + Real norm = vector_norm(v); + if (norm > 0.0) { + v[0] /= norm; + v[1] /= norm; + v[2] /= norm; + } +} +// Function to calculate the cross product of two vectors +void vector_cross(VofVector& C, const VofVector& A, const VofVector& B) { + C[0] = A[1] * B[2] - A[2] * B[1]; + C[1] = A[2] * B[0] - A[0] * B[2]; + C[2] = A[0] * B[1] - A[1] * B[0]; +} + +/** + * matrix_inverse: + * @m: a square matrix. + * @n: size of the matrix. + * @pivmin: the minimum value of the pivoting coefficient. + * + * Replaces @m with its inverse. + * + * Returns: 0. if the inversion encounters a pivot coefficient smaller + * than or equal to @pivmin (i.e. @m is non-invertible), the minimum + * absolute value of the pivoting coefficient otherwise. + */ +Real matrix_inverse (Real ** m, int n, Real pivmin) +{ + std::vector indxc(n), indxr(n), ipiv(n, -1); + int i, icol = 0, irow = 0, j, k, l, ll; + Real big, dum, pivinv, temp, minpiv = VOF_NODATA; + +#define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} + if (n>3){ + for (i = 0; i < n; i++) { + big = 0.0; + for (j = 0; j < n; j++) + if (ipiv[j] != 0) + for (k = 0; k < n; k++) { + if (ipiv[k] == -1) { + if (fabs (m[j][k]) >= big) { + big = fabs (m[j][k]); + irow = j; + icol = k; + } + } + } + ipiv[icol]++; + if (irow != icol) + for (l = 0; l < n; l++) + SWAP (m[irow][l], m[icol][l]); + indxr[i] = irow; + indxc[i] = icol; + if (fabs (m[icol][icol]) <= pivmin) { + return 0.; + } + if (fabs (m[icol][icol]) < minpiv) + minpiv = fabs (m[icol][icol]); + pivinv = 1.0/m[icol][icol]; + m[icol][icol] = 1.0; + for (l = 0; l < n; l++) m[icol][l] *= pivinv; + for (ll = 0; ll < n; ll++) + if (ll != icol) { + dum = m[ll][icol]; + m[ll][icol] = 0.0; + for (l = 0; l < n; l++) + m[ll][l] -= m[icol][l]*dum; + } + } + for (l = n - 1; l >= 0; l--) { + if (indxr[l] != indxc[l]) + for (k = 0; k < n; k++) + SWAP (m[k][indxr[l]], m[k][indxc[l]]); + } + return minpiv; + } + else if (n==3){ + + Real det = (m[0][0]*(m[1][1]*m[2][2] - m[2][1]*m[1][2]) - + m[0][1]*(m[1][0]*m[2][2] - m[2][0]*m[1][2]) + + m[0][2]*(m[1][0]*m[2][1] - m[2][0]*m[1][1])); + if (det == 0.0) + return 0.; + + Array,3> mi; + + mi[0][0] = (m[1][1]*m[2][2] - m[1][2]*m[2][1])/det; + mi[0][1] = (m[2][1]*m[0][2] - m[0][1]*m[2][2])/det; + mi[0][2] = (m[0][1]*m[1][2] - m[1][1]*m[0][2])/det; + mi[1][0] = (m[1][2]*m[2][0] - m[1][0]*m[2][2])/det; + mi[1][1] = (m[0][0]*m[2][2] - m[2][0]*m[0][2])/det; + mi[1][2] = (m[1][0]*m[0][2] - m[0][0]*m[1][2])/det; + mi[2][0] = (m[1][0]*m[2][1] - m[2][0]*m[1][1])/det; + mi[2][1] = (m[2][0]*m[0][1] - m[0][0]*m[2][1])/det; + mi[2][2] = (m[0][0]*m[1][1] - m[0][1]*m[1][0])/det; + for (i=0;i<3;i++) + for (j=0;j<3;j++) + m[i][j]=mi[i][j]; + return 1.; + } + return 0.; +} + + +typedef struct { + VofVector o; + Real ** M; +# if PARABOLA_SIMPLER /* z = a[0]*x^2 + a[1]*y^2 + a[2]*x*y */ + VofVector rhs, a; +# else /* z = a[0]*x^2 + a[1]*y^2 + a[2]*x*y + a[3]*x + a[4]*y + a[5] */ + Real rhs[6], a[6]; +# endif + VofVector t[3]; +} ParabolaFit; + +static void parabola_fit_init (ParabolaFit & p, XDim3 & o, XDim3 & m) +{ + p.o[0] = o.x; p.o[1] = o.y; p.o[2] = o.z; + Real max; + VofVector nx = {0., 0., 0.}, ny, nz; + int d = 0; + + nz[0] = m.x; nz[1] = m.y; nz[2] = m.z; + vector_normalize (nz); + max = nz[0]*nz[0]; + /* build a vector orthogonal to nz */ + if (nz[1]*nz[1] > max) { max = nz[1]*nz[1]; d = 1; } + if (nz[2]*nz[2] > max) d = 2; + switch (d) { + case 0: nx[0] = - nz[2]/nz[0]; nx[2] = 1.0; break; + case 1: nx[1] = - nz[2]/nz[1]; nx[2] = 1.0; break; + case 2: nx[2] = - nz[0]/nz[2]; nx[0] = 1.0; break; + } + vector_normalize (nx); + + /* build a second vector orthogonal to nx and nz */ + vector_cross (ny, nz, nx); + + /* transformation matrix from (i,j,k) to (nx, ny, nz) */ + p.t[0][0] = nx[0]; p.t[0][1] = nx[1]; p.t[0][2] = nx[2]; + p.t[1][0] = ny[0]; p.t[1][1] = ny[1]; p.t[1][2] = ny[2]; + p.t[2][0] = nz[0]; p.t[2][1] = nz[1]; p.t[2][2] = nz[2]; + +# if PARABOLA_SIMPLER + int nn=3; +# else + int nn=6; +# endif + p.M = new Real*[nn]; + for (int i = 0; i < nn; ++i) { + p.M[i] = new Real[nn](); + p.rhs[i] =0.; + } + +} + +static void parabola_fit_add (ParabolaFit & p, VofVector const & m, Real w) +{ +#if AMREX_SPACEDIM==2 + Real x1 = m[0] - p.o[0]; + Real y1 = m[1] - p.o[1]; + Real x = p.m[1]*x1 - p.m[0]*y1; + Real y = p.m[0]*x1 + p.m[1]*y1; + Real x2 = w*x*x, x3 = x2*x, x4 = x3*x; + p.M[0][0] += x4; + p.M[1][0] += x3; p.M[1][1] += x2; + p.M[2][1] += w*x; p.M[2][2] += w; + p.rhs[0] += x2*y; + p.rhs[1] += w*x*y; + p.rhs[2] += w*y; +#else /* 3D */ + Real x1 = m[0] - p.o[0]; + Real y1 = m[1] - p.o[1]; + Real z1 = m[2] - p.o[2]; + Real x = p.t[0][0]*x1 + p.t[0][1]*y1 + p.t[0][2]*z1; + Real y = p.t[1][0]*x1 + p.t[1][1]*y1 + p.t[1][2]*z1; + Real z = p.t[2][0]*x1 + p.t[2][1]*y1 + p.t[2][2]*z1; + Real x2 = x*x, x3 = x2*x, x4 = x3*x; + Real y2 = y*y, y3 = y2*y, y4 = y3*y; +# if PARABOLA_SIMPLER + p.M[0][0] += w*x4; + p.M[1][0] += w*x2*y2; p.M[1][1] += w*y4; + p.M[2][0] += w*x3*y; p.M[2][1] += w*x*y3; + p.rhs[0] += w*z*x2; p.rhs[1] += w*z*y2; p.rhs[2] += w*z*x*y; +# else + p.M[0][0] += w*x4; p.M[1][1] += w*y4; p.M[2][2] += w*x2*y2; + p.M[3][3] += w*x2; p.M[4][4] += w*y2; p.M[5][5] += w; + p.M[0][2] += w*x3*y; p.M[0][3] += w*x3; p.M[0][4] += w*x2*y; + p.M[1][2] += w*x*y3; p.M[1][3] += w*x*y2; p.M[1][4] += w*y3; + p.M[2][5] += w*x*y; + p.M[3][5] += w*x; + p.M[4][5] += w*y; + p.rhs[0] += w*x2*z; p.rhs[1] += w*y2*z; p.rhs[2] += w*x*y*z; + p.rhs[3] += w*x*z; p.rhs[4] += w*y*z; p.rhs[5] += w*z; +# endif +#endif /* 3D */ +} + +static void parabola_fit_solve (ParabolaFit & p) +{ +#if AMREX_SPACEDIM==2 + p.M[0][1] = p.M[1][0]; + p.M[0][2] = p.M[2][0] = p.M[1][1]; + p.M[1][2] = p.M[2][1]; + if (matrix_inverse (p.M, 3, 1e-10)) { + p.a[0] = p.M[0][0]*p.rhs[0] + p.M[0][1]*p.rhs[1] + p.M[0][2]*p.rhs[2]; + p.a[1] = p.M[1][0]*p.rhs[0] + p.M[1][1]*p.rhs[1] + p.M[1][2]*p.rhs[2]; + + } + else /* this may be a degenerate/isolated interface fragment */ + p.a[0] = p.a[1] = 0.; +#else /* 3D */ +# if PARABOLA_SIMPLER + p.M[0][1] = p.M[1][0]; p.M[0][2] = p.M[2][0]; + p.M[1][2] = p.M[2][1]; p.M[2][2] = p.M[1][0]; + if (matrix_inverse (p.M, 3, 1e-10)) { + p.a[0] = p.M[0][0]*p.rhs[0] + p.M[0][1]*p.rhs[1] + p.M[0][2]*p.rhs[2]; + p.a[1] = p.M[1][0]*p.rhs[0] + p.M[1][1]*p.rhs[1] + p.M[1][2]*p.rhs[2]; + p.a[2] = p.M[2][0]*p.rhs[0] + p.M[2][1]*p.rhs[1] + p.M[2][2]*p.rhs[2]; + } + else /* this may be a degenerate/isolated interface fragment */ + p.a[0] = p.a[1] = p.a[2] = 0.; +# else + p.M[0][1] = p.M[2][2]; p.M[0][5] = p.M[3][3]; + p.M[1][5] = p.M[4][4]; + p.M[2][3] = p.M[0][4]; p.M[2][4] = p.M[1][3]; + p.M[3][4] = p.M[2][5]; + int i, j; + for (i = 1; i < 6; i++) + for (j = 0; j < i; j++) + p.M[i][j] = p.M[j][i]; + if (matrix_inverse (p.M, 6, 1e-10)) { + for (i = 0; i < 6; i++) { + p.a[i] = 0.; + for (j = 0; j < 6; j++) + p.a[i] += p.M[i][j]*p.rhs[j]; + } + } + else { /* this may be a degenerate/isolated interface fragment */ + AllPrint()<<"warning: singular matrix in parabola_fit_solve"<<"\n"; + //amrex_error_module::amrex_warning("warning: singular matrix in parabola_fit_solve"); + p.a[0] = p.a[1] = p.a[2] = 0.; + } +# endif +#endif /* 3D */ +} + +static Real parabola_fit_curvature (ParabolaFit & p, Real kappamax) +{ + Real kappa; +#if AMREX_SPACEDIM==2 + Real dnm = 1. + p.a[1]*p.a[1]; + kappa = 2.*p.a[0]/sqrt (dnm*dnm*dnm); +#else /* 3D */ + Real hxx = 2.*p.a[0]; + Real hyy = 2.*p.a[1]; + Real hxy = p.a[2]; + Real hx, hy; +# if PARABOLA_SIMPLER + hx = hy = 0.; +# else + hx = p.a[3]; + hy = p.a[4]; +# endif + Real dnm = 1. + hx*hx + hy*hy; + kappa = (hxx + hyy + hxx*hy*hy + hyy*hx*hx - 2.*hxy*hx*hy)/sqrt (dnm*dnm*dnm); +#endif /* 3D */ + if (fabs (kappa) > kappamax) + return kappa > 0. ? kappamax : - kappamax; + return kappa; +} \ No newline at end of file diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 09d922c86..6cf866396 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -32,7 +32,7 @@ incflo.mu = 1.0 # Dynamic viscosity coefficient #.......................................# amr.n_cell = 16 16 16 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 16 16 16 +amr.max_grid_size = 128 128 128 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # @@ -46,9 +46,9 @@ geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) # INITIAL CONDITIONS # #.......................................# incflo.probtype = 1109 # -incflo.ic_u = 1. -incflo.ic_v = 1. -incflo.ic_w = 1. +incflo.ic_u = 0. +incflo.ic_v = 0. +incflo.ic_w = 0. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # NUMERICAL PARAMETERS # #.......................................# @@ -62,3 +62,4 @@ incflo.verbose = 2 # incflo_level amrex.fpe_trap_overflow=1 amrex.fpe_trap_zero=1 +incflo.vof_init_with_eb=0 From fdc0d6299c4b5e7be59660bafd13fdc638568c87 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Sat, 17 Aug 2024 02:02:37 -0700 Subject: [PATCH 10/29] light modification --- src/vof/VolumeOfFluid.cpp | 941 +++++++++++++++++++------------------- 1 file changed, 471 insertions(+), 470 deletions(-) diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 72cb4e1c1..94115edfc 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -54,7 +54,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -62,12 +62,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -89,7 +89,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -119,13 +119,13 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); } } @@ -820,7 +820,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -828,12 +828,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -846,36 +846,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -897,7 +897,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -916,32 +916,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -954,8 +954,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -966,14 +966,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -981,23 +981,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2], hd[2]; for (int nd = 0; nd < 2; nd++) { @@ -1010,7 +1010,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1019,13 +1019,13 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; (&m.x)[oc[d][1]] = - hd[1]; - } - - } + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[9], h[9]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < 2; nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1146,7 +1146,7 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[9], h[9]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < 2; nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1220,15 +1220,15 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1259,9 +1259,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1277,7 +1277,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1293,8 +1293,8 @@ static int independent_positions (Vector &interface) * @dx: the grid size of the box. * @hb: stores the height values in the axis positive direction. * @ht: stores the height values in the axis negative direction. - * @mv: sotres the normal direction of interface. - * @aplha: stores the plane constant of reconstructed segement. + * @mv: stores the normal direction of interface. + * @alpha: stores the plane constant of reconstructed segment. * * Tries to estimate the curvature of an interface using * height-functions, either on equally-spaced columns, @@ -1306,43 +1306,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1357,11 +1357,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1408,17 +1408,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER @@ -1426,11 +1426,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1444,146 +1444,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1); - height[1].setVal(VOF_NODATA,dim,1); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - } - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + } + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1594,11 +1594,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1623,7 +1623,7 @@ if(1){ } // end MFIter //!!!!!!!!fix me: a temporary solution for the normal and alpha!!!!!!!!!!! - // fill value of ghost cells (BCs, MPI infor) + // fill value of ghost cells (BCs, MPI info.) normal[lev].FillBoundary(geom.periodicity()); alpha[lev].FillBoundary(geom.periodicity()); } @@ -1635,19 +1635,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - + MFInfo(), v_incflo->Factory(lev)); + kappa.setVal(VOF_NODATA); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1655,42 +1655,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if (i==44&&j==35&&k==31){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1698,36 +1698,34 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - - if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ - int dddd; - Print()<<"------------"<<"\n"; - } - - - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + { + auto fvol = vof_arr(i,j,k,0); + + /*if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fix me: a temporary solution for the curvature!!!!!!!!!!! - // fill value of ghost cells (BCs, MPI infor) - kappa.FillBoundary(geom.periodicity()); + // fill value of ghost cells (BCs, MPI info.) + kappa.FillBoundary(geom.periodicity()); // diffuse curvatures int iter = 1; MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); @@ -1737,53 +1735,43 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter - //for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { - // Box const& bx = mfi.tilebox(); - // Array4 const& temp_arr = temp_K.array(mfi); - // Array4 const& kappa_arr = kappa.array(mfi); - // ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - // { - // kappa_arr(i,j,k,0)=temp_arr(i,j,k,0); - //}); // ParallelFor - //}//end MFIter - + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -1791,48 +1779,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /* if (i==4&&j==0&&k==4){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // paraboloid fitting of the centroids of the reconstructed interface segments + int dddd; + Print()<<"------------"<<"\n"; + }*/ + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // paraboloid fitting of the centroids of the reconstructed interface segments kappa_arr(i,j,k,0) = curvature_fit (i,j,k,dx,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fix me: a temporary solution for the curvature!!!!!!!!!!! - // fill value of ghost cells (BCs, MPI infor) - kappa.FillBoundary(geom.periodicity()); - - + // fill value of ghost cells (BCs, MPI info.) + kappa.FillBoundary(geom.periodicity()); + ///////////////////////////////////////////////////////////////////////// /// The following is used to do statistics of calculated curvature /// for numerical tests. ///////////////////////////////////////////////////////////////////////// -if (1){ +if (0){ VofRange kappa_range; range_init(kappa_range); - + struct KappaPrint{ - Real kappa, angle; + Real kappa, angle; XDim3 center; int i,j,k; // Default constructor KappaPrint() : kappa(0), angle(0), center(), i(0), j(0), k(0) {} // Constructor to initialize the KappaPrint KappaPrint(Real ka, Real a, XDim3 o,int i, int j, int k): kappa(ka),angle(a),center(o), - i(i),j(j),k(k){} + i(i),j(j),k(k){} // Copy assignment operator KappaPrint& operator=(const KappaPrint& other) { if (this != &other) { // self-assignment check @@ -1841,18 +1828,18 @@ if (1){ i = other.i; j = other.j; k = other.k; - for (int c = 0; c < AMREX_SPACEDIM; c++) - (¢er.x)[c]=(&other.center.x)[c]; + for (int c = 0; c < AMREX_SPACEDIM; c++) + (¢er.x)[c]=(&other.center.x)[c]; } return *this; - } - }; - Vector kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -1861,47 +1848,47 @@ if (1){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -1926,27 +1913,27 @@ if (1){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -1956,31 +1943,31 @@ if (1){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, AMREX_D_DECL(Vector const& u_mac, Vector const& v_mac, Vector const& w_mac), - Real dt) + Real dt) { static int start = 0; //amrex::Print() << " VOF Level#" << finest_level<<"\n"; @@ -2215,15 +2202,15 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (problo[2]+.45))};*/ Array center1{AMREX_D_DECL((problo[0]+.45), (problo[1]+1.1), - (problo[2]+.45))}; + (problo[2]+.45))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2279,12 +2266,12 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2294,18 +2281,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-16.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2315,28 +2302,28 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - - } - infile.close(); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){ - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2362,14 +2349,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -2417,7 +2404,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0; for (int k = lo.z; k <= hi.z; ++k) { @@ -2439,7 +2426,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("<m_leveldata[lev]; @@ -2545,7 +2532,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); @@ -2558,9 +2545,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -2654,7 +2641,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -2664,7 +2651,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { @@ -2679,7 +2666,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { @@ -2692,8 +2679,8 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } - + } + TecplotFile <<"\n"; } // end MFIter @@ -2981,12 +2968,13 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) // 'mcent' is mass center of each droplet Real vols[n_tag], vels[n_tag], mcent[AMREX_SPACEDIM][n_tag],surfA[n_tag]; int ncell[n_tag]; - // find the max and min location of interface */ - VofRange s[AMREX_SPACEDIM][n_tag]; + // find the max and min location of interface and curvature*/ + VofRange s[AMREX_SPACEDIM][n_tag], kappa_range[n_tag]; // the range of location of interfacial cells */ Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3007,6 +2995,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3046,15 +3035,18 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - + for (int n = 0; n < n_tag; n++) + range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs - if (ParallelDescriptor::NProcs() > 1){ + if (ParallelDescriptor::NProcs()> 1){ Real sum[n_tag]; /*sum number of cells of each drop from different pid*/ ParallelDescriptor::ReduceIntSum(ncell,n_tag); @@ -3072,6 +3064,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } + // sum curvature info. + for (int n = 0; n < n_tag; n++){ + domain_range_reduce(kappa_range[n]); + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3087,13 +3084,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< Date: Sat, 17 Aug 2024 02:13:01 -0700 Subject: [PATCH 11/29] light modification --- src/vof/VolumeOfFluid.cpp | 908 +++++++++++++++++++------------------- 1 file changed, 454 insertions(+), 454 deletions(-) diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 94115edfc..9474c0061 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -54,7 +54,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -62,12 +62,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -89,7 +89,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -119,13 +119,13 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); } } @@ -820,7 +820,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -828,12 +828,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -846,36 +846,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -897,7 +897,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -916,32 +916,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -954,8 +954,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -966,14 +966,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -981,23 +981,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2], hd[2]; for (int nd = 0; nd < 2; nd++) { @@ -1010,7 +1010,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1019,13 +1019,13 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; (&m.x)[oc[d][1]] = - hd[1]; - } - - } + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[9], h[9]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < 2; nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1146,7 +1146,7 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[9], h[9]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < 2; nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1220,15 +1220,15 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1259,9 +1259,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1277,7 +1277,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1306,43 +1306,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1357,11 +1357,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1408,17 +1408,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER @@ -1426,11 +1426,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1444,146 +1444,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1); - height[1].setVal(VOF_NODATA,dim,1); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - } - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + } + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1594,11 +1594,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1635,19 +1635,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - + MFInfo(), v_incflo->Factory(lev)); + kappa.setVal(VOF_NODATA); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1655,42 +1655,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if (i==44&&j==35&&k==31){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1698,34 +1698,34 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); + { + auto fvol = vof_arr(i,j,k,0); /*if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fix me: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); + kappa.FillBoundary(geom.periodicity()); // diffuse curvatures int iter = 1; MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); @@ -1735,43 +1735,43 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -1779,47 +1779,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /* if (i==4&&j==0&&k==4){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // paraboloid fitting of the centroids of the reconstructed interface segments + int dddd; + Print()<<"------------"<<"\n"; + }*/ + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // paraboloid fitting of the centroids of the reconstructed interface segments kappa_arr(i,j,k,0) = curvature_fit (i,j,k,dx,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fix me: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + ///////////////////////////////////////////////////////////////////////// /// The following is used to do statistics of calculated curvature /// for numerical tests. ///////////////////////////////////////////////////////////////////////// -if (0){ +if (0){ VofRange kappa_range; range_init(kappa_range); - + struct KappaPrint{ - Real kappa, angle; + Real kappa, angle; XDim3 center; int i,j,k; // Default constructor KappaPrint() : kappa(0), angle(0), center(), i(0), j(0), k(0) {} // Constructor to initialize the KappaPrint KappaPrint(Real ka, Real a, XDim3 o,int i, int j, int k): kappa(ka),angle(a),center(o), - i(i),j(j),k(k){} + i(i),j(j),k(k){} // Copy assignment operator KappaPrint& operator=(const KappaPrint& other) { if (this != &other) { // self-assignment check @@ -1828,18 +1828,18 @@ if (0){ i = other.i; j = other.j; k = other.k; - for (int c = 0; c < AMREX_SPACEDIM; c++) - (¢er.x)[c]=(&other.center.x)[c]; + for (int c = 0; c < AMREX_SPACEDIM; c++) + (¢er.x)[c]=(&other.center.x)[c]; } return *this; - } - }; - Vector kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -1848,47 +1848,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -1913,27 +1913,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -1943,31 +1943,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< center1{AMREX_D_DECL((problo[0]+.45), (problo[1]+1.1), - (problo[2]+.45))}; + (problo[2]+.45))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2266,12 +2266,12 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2281,18 +2281,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-16.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2302,28 +2302,28 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - - } - infile.close(); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){ - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2349,14 +2349,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -2404,7 +2404,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0; for (int k = lo.z; k <= hi.z; ++k) { @@ -2426,7 +2426,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("<m_leveldata[lev]; @@ -2532,7 +2532,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); @@ -2545,9 +2545,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -2641,7 +2641,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -2651,7 +2651,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { @@ -2666,7 +2666,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { @@ -2679,8 +2679,8 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } - + } + TecplotFile <<"\n"; } // end MFIter @@ -2974,7 +2974,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -2995,7 +2995,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3035,15 +3035,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3064,11 +3064,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3084,13 +3084,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< Date: Mon, 26 Aug 2024 14:35:03 -0700 Subject: [PATCH 12/29] implement surface-tension force --- ...ncflo_compute_MAC_projected_velocities.cpp | 7 +- src/incflo.H | 13 +- src/incflo_apply_corrector.cpp | 2 +- src/incflo_apply_predictor.cpp | 8 +- src/incflo_compute_forces.cpp | 38 +++- src/prob/prob_init_fluid.cpp | 1 + .../incflo_apply_nodal_projection.cpp | 4 +- src/rheology/incflo_rheology.cpp | 21 +- src/setup/init.cpp | 10 + src/utilities/io.cpp | 1 + src/vof/VolumeOfFluid.H | 7 +- src/vof/VolumeOfFluid.cpp | 208 +++++++++++++----- src/vof/incflo_vof.cpp | 24 +- test_3d/inputs.droplet | 15 +- 14 files changed, 280 insertions(+), 79 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index f0c1d3ff7..c80808ea5 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -123,7 +123,7 @@ incflo::compute_MAC_projected_velocities ( } } else { #ifndef AMREX_USE_EB - if (m_constant_density) { + if (m_constant_density&&!m_vof_advect_tracer) { macproj->updateBeta(l_dt/m_ro_0); // unnecessary unless m_ro_0 changes. } else #endif @@ -176,6 +176,11 @@ incflo::compute_MAC_projected_velocities ( m_godunov_ppm, m_godunov_use_forces_in_trans, l_advection_type, PPM::default_limiter, allow_inflow_on_outflow, BC_MF.get()); + + //add surface tension + //if(m_vof_advect_tracer) + // get_volume_of_fluid ()->velocity_face_source(lev,AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); + } Vector > mac_vec(finest_level+1); diff --git a/src/incflo.H b/src/incflo.H index 8e6ac3467..5561b23c2 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -215,7 +215,7 @@ public: /////////////////////////////////////////////////////////////////////////// // - // tacer advection by VOF method + // tracer advection by VOF method // //////////////////////////////////////////////////////////////////////////// @@ -223,6 +223,8 @@ public: AMREX_D_DECL(amrex::Vector const& u_mac, amrex::Vector const& v_mac, amrex::Vector const& w_mac)); + void update_vof_density (amrex::Vector const& density, + amrex::Vector const& tracer); [[nodiscard]] amrex::Array @@ -291,11 +293,13 @@ public: void compute_viscosity (amrex::Vector const& eta, amrex::Vector const& rho, amrex::Vector const& vel, + amrex::Vector const& tracer, amrex::Real time, int nghost); void compute_viscosity_at_level (int lev, amrex::MultiFab* eta, amrex::MultiFab* rho, amrex::MultiFab* vel, + amrex::MultiFab* tracer, amrex::Geometry& lev_geom, amrex::Real time, int nghost); void compute_tracer_diff_coeff (amrex::Vector const& tra_eta, int nghost); @@ -532,6 +536,13 @@ private: amrex::Real m_papa_reg = 0.0; amrex::Real m_eta_0 = 0.0; + // VOF advection parameters + bool m_vof_advect_tracer = false; + // density of the phase represented by VOF=1 + amrex::Vector m_ro_s; + // surface tension + amrex::Vector m_sigma; + int m_plot_int = -1; // Dump plotfiles at as close as possible to the designated period *without* changing dt diff --git a/src/incflo_apply_corrector.cpp b/src/incflo_apply_corrector.cpp index 9b0c6e3f6..75deb51ea 100644 --- a/src/incflo_apply_corrector.cpp +++ b/src/incflo_apply_corrector.cpp @@ -133,7 +133,7 @@ void incflo::ApplyCorrector() // ************************************************************************************* // Compute viscosity / diffusive coefficients // ************************************************************************************* - compute_viscosity(GetVecOfPtrs(vel_eta), get_density_new(), get_velocity_new(), new_time, 1); + compute_viscosity(GetVecOfPtrs(vel_eta), get_density_new(), get_velocity_new(),get_tracer_new(), new_time, 1); // Here we create divtau of the (n+1,*) state that was computed in the predictor if ( (m_diff_type == DiffusionType::Explicit) || use_tensor_correction ) diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index 00ef06a35..1572a8f1b 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -123,8 +123,12 @@ void incflo::ApplyPredictor (bool incremental_projection) // Compute viscosity / diffusive coefficients // ************************************************************************************* compute_viscosity(GetVecOfPtrs(vel_eta), - get_density_old(), get_velocity_old(), + get_density_old(), get_velocity_old(),get_tracer_old(), m_cur_time, 1); + //when VOF method is used to advect the tracer, density and viscosity of each cell will + // depend the VOF field value of the cell. + if (m_vof_advect_tracer) + update_vof_density (get_density_old(),get_tracer_old()); // ************************************************************************************* // Compute explicit viscous term @@ -194,7 +198,7 @@ void incflo::ApplyPredictor (bool incremental_projection) // ********************************************************************************************** // Project velocity field, update pressure // ********************************************************************************************** -//Hua ApplyProjection(get_density_nph_const(),new_time,m_dt,incremental_projection); + ApplyProjection(get_density_nph_const(),new_time,m_dt,incremental_projection); #ifdef INCFLO_USE_PARTICLES // ************************************************************************************** diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 8ad6af7b1..d6e5811f7 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -1,7 +1,7 @@ #include using namespace amrex; - +#define VOF_NODATA std::numeric_limits::max() void incflo::compute_tra_forces (Vector const& tra_forces, Vector const& density) { @@ -148,4 +148,40 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } + // add surface tension + //fixme: we just consider the surface tension for first tracer +if(1){ + if (m_vof_advect_tracer && m_sigma[0]!=0.){ + VolumeOfFluid* vof_p = get_volume_of_fluid (); + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if(kappa(i,j,k,0)!=VOF_NODATA){ + Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + } + }); + + + } + + + + } + +} } diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index ee209a9b0..85f659afb 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -202,6 +202,7 @@ void incflo::prob_init_fluid (int lev) if (1109 == m_probtype) { get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); + MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); } } diff --git a/src/projection/incflo_apply_nodal_projection.cpp b/src/projection/incflo_apply_nodal_projection.cpp index 3759a8a58..cc76d88b2 100644 --- a/src/projection/incflo_apply_nodal_projection.cpp +++ b/src/projection/incflo_apply_nodal_projection.cpp @@ -98,7 +98,7 @@ void incflo::ApplyNodalProjection (Vector const& density, bool set_inflow_bc) { Vector sigma(finest_level+1); - if (!m_constant_density) + if (!m_constant_density||m_vof_advect_tracer) { for (int lev = 0; lev <= finest_level; ++lev ) { @@ -160,7 +160,7 @@ void incflo::ApplyNodalProjection (Vector const& density, LPInfo info; info.setMaxCoarseningLevel(m_nodal_mg_max_coarsening_level); - if (m_constant_density) + if (m_constant_density&&!m_vof_advect_tracer) { Real constant_sigma = scaling_factor / m_ro_0; nodal_projector = std::make_unique(vel, constant_sigma, diff --git a/src/rheology/incflo_rheology.cpp b/src/rheology/incflo_rheology.cpp index ca2d4b231..5b5980049 100644 --- a/src/rheology/incflo_rheology.cpp +++ b/src/rheology/incflo_rheology.cpp @@ -50,11 +50,12 @@ struct NonNewtonianViscosity void incflo::compute_viscosity (Vector const& vel_eta, Vector const& rho, Vector const& vel, + Vector const& tracer, Real time, int nghost) { for (int lev = 0; lev <= finest_level; ++lev) { - compute_viscosity_at_level(lev, vel_eta[lev], rho[lev], vel[lev], geom[lev], time, nghost); + compute_viscosity_at_level(lev, vel_eta[lev], rho[lev], vel[lev], tracer[lev], geom[lev], time, nghost); } } @@ -66,12 +67,30 @@ void incflo::compute_viscosity_at_level (int /*lev*/, MultiFab* vel_eta, MultiFab* /*rho*/, MultiFab* vel, + MultiFab* tracer, Geometry& lev_geom, Real /*time*/, int nghost) { if (m_fluid_model == FluidModel::Newtonian) { + if (!m_vof_advect_tracer) vel_eta->setVal(m_mu, 0, 1, nghost); + else{ +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*vel_eta,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.growntilebox(nghost); + Array4 const& eta_arr = vel_eta->array(mfi); + Array4 const& tracer_arr = tracer->const_array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { //fixme: we use the property of the tracer 0. + eta_arr(i,j,k) = m_mu*(1.-tracer_arr(i,j,k,0))+m_mu_s[0]*tracer_arr(i,j,k,0); + }); + } + + } } else { diff --git a/src/setup/init.cpp b/src/setup/init.cpp index a7ded2b4c..c7d610ca0 100644 --- a/src/setup/init.cpp +++ b/src/setup/init.cpp @@ -154,6 +154,16 @@ void incflo::ReadParameters () for (int i = 0; i < m_ntrac; i++) { amrex::Print() << "Tracer diffusion coeff: " << i << ":" << m_mu_s[i] << std::endl; } + //vof parameters + pp.query("vof_advect_tracer", m_vof_advect_tracer); + if (m_vof_advect_tracer){ + //the default of the density of VOF phase is same as the background fluid + m_ro_s.resize(m_ntrac, m_ro_0); + pp.queryarr("ro_s", m_ro_s, 0, m_ntrac ); + // the default of the surface tension is zero + m_sigma.resize(m_ntrac, 0.); + pp.queryarr("sigma", m_sigma, 0, m_ntrac ); + } } // end prefix incflo ReadIOParameters(); diff --git a/src/utilities/io.cpp b/src/utilities/io.cpp index 67bbe8e1f..5d35dd025 100644 --- a/src/utilities/io.cpp +++ b/src/utilities/io.cpp @@ -588,6 +588,7 @@ void incflo::WritePlotFile() &vel_eta, &m_leveldata[lev]->density, &m_leveldata[lev]->velocity, + &m_leveldata[lev]->tracer, Geom(lev), m_cur_time, 0); } diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index 81ae83e3a..a11de8c22 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -1,8 +1,3 @@ -//struct TracerVOF { -// GfsVariableTracer parent; -// -// GfsVariable * m[FTT_DIMENSION], * alpha; -//}; // Header file (VolumeOfFluid class) #ifndef INCFLO_VOF_ #define INCFLO_VOF_ @@ -26,6 +21,8 @@ public: void WriteTecPlotFile (amrex::Real time, int nstep); void output_droplet (amrex::Real time, int nstep); void apply_velocity_field(amrex::Real time, int nstep); + void velocity_face_source(int lev,AMREX_D_DECL(amrex::MultiFab& u_mac, amrex::MultiFab& v_mac, + amrex::MultiFab& w_mac)); // normal vector of interface amrex::Vector normal; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 9474c0061..1b1306b45 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -1578,10 +1578,10 @@ if(1){ XDim3 m={0.,0.,0.}; auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); - if (i==5&&j==6&&k==8){ + /*if (i==5&&j==6&&k==8){ int dddd; Print()<<"------------"<<"\n"; - } + }*/ if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ // if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { @@ -2022,7 +2022,7 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, m_total_flux[lev].setVal(0.0); vof_total_flux[lev].setVal(0.0); MultiFab const * U_MF = dir < 1? u_mac[lev]: - dir < 2? v_mac[lev]:w_mac[lev]; + dir < 2? v_mac[lev]:w_mac[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2177,11 +2177,81 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, start = (start + 1) % AMREX_SPACEDIM; } -//////////////////////////////////////////////////////////////////// + + +void +VolumeOfFluid:: velocity_face_source (int lev, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, + MultiFab& w_mac)) +{ + auto& ld = *v_incflo->m_leveldata[lev]; + Geometry const& geom = v_incflo->Geom(lev); + auto const& dx = geom.CellSizeArray(); + Real sigma = v_incflo->m_sigma[0]; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(kappa[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + Box const& xbx = mfi.nodaltilebox(0); + Box const& ybx = mfi.nodaltilebox(1); + Box const& zbx = mfi.nodaltilebox(2); + Array4 const& rho = ld.density.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& kap = kappa[lev].const_array(mfi); + Array4 const& umac = u_mac.array(mfi); + Array4 const& vmac = v_mac.array(mfi); + Array4 const& wmac = w_mac.array(mfi); + + ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) + kaf=kap(i-1,j,k); + else + kaf=0.; + umac(i,j,k) += Real(2.)*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + }); + + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) + kaf=kap(i,j-1,k); + else + kaf=0.; + vmac(i,j,k) += Real(2.)*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + }); + + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) + kaf=kap(i,j,k-1); + else + kaf=0.; + wmac(i,j,k) += Real(2.)*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); + } + +} +////////////////////////////////////////////////////////////////////////////////// /////// /////// Initialize the VOF value using the EB implicit surface function /////// -///////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) { @@ -2232,12 +2302,12 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) Array high{AMREX_D_DECL((probhi[0]-11.2*dx[0]), (probhi[1]-11.2*dx[1]), (probhi[2]-11.2*dx[2]))}; */ - Array low{AMREX_D_DECL( (problo[0]+0.5/16.), - (problo[1]+0.5/16.), - (problo[2]+0.5/16.))}; - Array high{AMREX_D_DECL((problo[0]+5.5/16.), - (problo[1]+5.5/16.), - (problo[2]+5.5/16.))}; + Array low{AMREX_D_DECL( (0.5*(problo[0]+probhi[0])-.2), + (0.5*(problo[1]+probhi[1])-.2), + (0.5*(problo[2]+probhi[2])-.2))}; + Array high{AMREX_D_DECL((0.5*(problo[0]+probhi[0])+.2), + (0.5*(problo[1]+probhi[1])+.2), + (0.5*(problo[2]+probhi[2])+.2))}; auto my_box= EB2::BoxIF( low, high, fluid_is_inside); //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); auto my_box1= EB2::rotate(my_box, .3, 0); @@ -2261,7 +2331,8 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } else + } + else #endif { @@ -2497,11 +2568,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) //spatial coordinates TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); //output variables - TecplotFile <<", \"F\""<<", \"v_x\""<<", \"v_y\""<<", \"v_z\""<< + TecplotFile <<", \"P\""<<", \"F\""<<", \"v_x\""<<", \"v_y\""<<", \"v_z\""<< ", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<", \"tag\""<< ", \"hb_x\""<<", \"hb_y\""<<", \"hb_z\""<< ", \"ht_x\""<<", \"ht_y\""<<", \"ht_z\""<< - ", \"kappa\""<<"\n"; + ", \"kappa\""<<", \"rho\""<<"\n"; for (int lev = 0; lev <= finest_level; ++lev) { auto& ld = *v_incflo->m_leveldata[lev]; @@ -2536,10 +2607,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+1)<<"-"<<19<<"]=CELLCENTERED)" + TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-"<<21<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& pa = ld.p_nd.const_array(mfi); Array4 const& tracer = ld.tracer.const_array(mfi); Array4 const& vel = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); @@ -2548,23 +2620,37 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) Array4 const& hb_arr = height[lev][0].const_array(mfi); Array4 const& ht_arr = height[lev][1].const_array(mfi); Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z +1; ++k) { - for (int j = lo.y; j <= hi.y +1; ++j) { - for (int i = lo.x; i <= hi.x +1; ++i) { - TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } - } + for (int k = lo.z; k <= hi.z +1; ++k) { + for (int j = lo.y; j <= hi.y +1; ++j) { + for (int i = lo.x; i <= hi.x +1; ++i) { + TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } }// - + //write presure + for (int k = lo.z; k <= hi.z+1; ++k) { + for (int j = lo.y; j <= hi.y+1; ++j) { + for (int i = lo.x; i <= hi.x+1; ++i) { + TecplotFile << pa(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + //write VOF for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -2611,32 +2697,32 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) //write alpha of the interface - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - TecplotFile << al(i,j,k)<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << al(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; } + } + } + } //write id of the droplets or bubbles - for (int k = lo.z; k <= hi.z; ++k) { - for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { - TecplotFile << tag_arr(i,j,k)<<" "; - ++nn; - if (nn > 100) { - TecplotFile <<"\n"; - nn=0; - } - } - } + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << tag_arr(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; } + } + } + } //write height function values for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { @@ -2680,7 +2766,19 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write density + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << density_arr(i,j,k)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } TecplotFile <<"\n"; } // end MFIter @@ -3273,7 +3371,7 @@ if (0){ // If the file was just created, write the header if (outputFile.tellp() == 0) { outputFile << "The file contains the data of drops \n" - <<"Time, Num of Drops, Volume, Speed, Centroid, Range, Surface area, Curvature range (mean, min,max,stddev)\n"; + <<"Time, Num of Drops, Volume, Speed, Centroid, Range, Surface area, Curvature range (mean,min,max,stddev)\n"; } // Write data to file @@ -3282,13 +3380,11 @@ if (0){ for (int n = 0; n < n_tag && n < 7; n++){ outputFile <<" #"< const& tracer, +incflo::tracer_vof_advection (Vector const& tracer, AMREX_D_DECL(Vector const& u_mac, Vector const& v_mac, Vector const& w_mac)) @@ -13,10 +13,28 @@ incflo::tracer_vof_advection(Vector const& tracer, AMREX_D_DECL(u_mac,v_mac,w_mac), m_dt); } +void +incflo::update_vof_density (Vector const& density,Vector const& tracer) +{ + for (int lev = 0; lev <= finest_level; ++lev) { +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*tracer[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.growntilebox(1); + Array4 const& density_arr = density[lev]->array(mfi); + Array4 const& tracer_arr = tracer[lev]->const_array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { //fixme: we use the property of the tracer 0. + density_arr(i,j,k) = m_ro_0*(1.-tracer_arr(i,j,k,0))+m_ro_s[0]*tracer_arr(i,j,k,0); + }); + } + } +} -VolumeOfFluid* -incflo::get_volume_of_fluid () +VolumeOfFluid* incflo::get_volume_of_fluid () { if (!p_volume_of_fluid) p_volume_of_fluid = std::make_unique(this); return p_volume_of_fluid.get(); diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 6cf866396..c2b951feb 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -2,19 +2,19 @@ # SIMULATION STOP # #.......................................# stop_time = 2.4 # Max (simulated) time to evolve -max_step = 1 # Max number of time steps +max_step = 100 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # TIME STEP COMPUTATION # #.......................................# -incflo.fixed_dt = .00390625 # Use this constant dt if > 0 -#incflo.cfl = 0.5 # CFL factor +#incflo.fixed_dt = .00390625 # Use this constant dt if > 0 +incflo.cfl = 0.5 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 1 # Steps between plot files +amr.plot_int = 50 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -26,11 +26,15 @@ incflo.ro_0 = 1.0 # Reference density incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) incflo.mu = 1.0 # Dynamic viscosity coefficient +incflo.vof_advect_tracer= 1 +incflo.mu_s = 2.0 +incflo.ro_s = 1000.0 +incflo.sigma = 10. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 16 16 16 # Grid cells at coarsest AMRlevel +amr.n_cell = 16 16 16 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy amr.max_grid_size = 128 128 128 @@ -62,4 +66,3 @@ incflo.verbose = 2 # incflo_level amrex.fpe_trap_overflow=1 amrex.fpe_trap_zero=1 -incflo.vof_init_with_eb=0 From 6c9cba067d6a2271b13f6f598e85c0fb54e3fb86 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Thu, 5 Sep 2024 19:18:39 -0700 Subject: [PATCH 13/29] update implementation of surface tension force --- ...ncflo_compute_MAC_projected_velocities.cpp | 4 +- src/incflo.H | 2 +- src/incflo_compute_forces.cpp | 385 +++++++++++++++++- src/incflo_update_velocity.cpp | 185 +++++++++ src/vof/VolumeOfFluid.H | 4 +- src/vof/VolumeOfFluid.cpp | 131 +++--- src/vof/incflo_vof.cpp | 4 + test_3d/inputs.droplet | 33 +- 8 files changed, 679 insertions(+), 69 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index c80808ea5..48a35f417 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -178,8 +178,8 @@ incflo::compute_MAC_projected_velocities ( allow_inflow_on_outflow, BC_MF.get()); //add surface tension - //if(m_vof_advect_tracer) - // get_volume_of_fluid ()->velocity_face_source(lev,AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); + if(m_vof_advect_tracer) + get_volume_of_fluid ()->velocity_face_source(lev,l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); } diff --git a/src/incflo.H b/src/incflo.H index 5561b23c2..ddb1a2f6e 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -21,7 +21,7 @@ #include #include #include - +#define VOF_NODATA std::numeric_limits::max() enum struct StepType { Predictor, Corrector }; diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index d6e5811f7..74b2e8b4e 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -1,7 +1,7 @@ #include using namespace amrex; -#define VOF_NODATA std::numeric_limits::max() + void incflo::compute_tra_forces (Vector const& tra_forces, Vector const& density) { @@ -148,12 +148,373 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } +/////////////////////////////////////////////////////////////////////////// // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + //fixme: we just consider the surface tension for first tracer -if(1){ if (m_vof_advect_tracer && m_sigma[0]!=0.){ - VolumeOfFluid* vof_p = get_volume_of_fluid (); + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. + // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); + const auto& dm = density.DistributionMap(); + const auto& fact = density.Factory(); + Array face_val{AMREX_D_DECL( + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + dm, 1, 0, MFInfo(), fact), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), + dm, 1, 0, MFInfo(), fact), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), + dm, 1, 0, MFInfo(), fact))}; + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + if (choice==1) { + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { + face_val[idim].invert(m_sigma[0], 0); + } + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kap = vof_p->kappa[lev].const_array(mfi); + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( + ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) + kaf=kap(i-1,j,k); + else + kaf=0.; + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) + kaf=kap(i,j-1,k); + else + kaf=0.; + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) + kaf=kap(i,j,k-1); + else + kaf=0.; + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + + }); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } + else if (choice ==2){ + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The face-centered values are then averaged to the cell node. + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { + face_val[idim].invert(m_sigma[0], 0); + } + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + Box const& xbx = mfi.nodaltilebox(0); + Box const& ybx = mfi.nodaltilebox(1); + Box const& zbx = mfi.nodaltilebox(2); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kap = vof_p->kappa[lev].const_array(mfi); + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( + ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) + kaf=kap(i-1,j,k); + else + kaf=0.; + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) + kaf=kap(i,j-1,k); + else + kaf=0.; + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) + kaf=kap(i,j,k-1); + else + kaf=0.; + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + + }); + ) // end AMREX_D_TERM + + } + static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); + ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) + for (int deti = 0; deti < 2; ++deti){ + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); + forarr(i,j,k,dim) =-Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); + + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); +static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + //nv(i,j,k,0)=0.25*(xfv(i,j,k,0)+xfv(i,j-1,k,0)+xfv(i,j,k-1,0)+xfv(i,j-1,k-1,0)); + //nv(i,j,k,1)=0.25*(yfv(i,j,k,0)+yfv(i,j,k-1,0)+yfv(i-1,j,k,0)+yfv(i-1,j,k-1,0)); + //nv(i,j,k,2)=0.25*(zfv(i,j,k,0)+zfv(i-1,j,k,0)+zfv(i,j-1,k,0)+zfv(i-1,j-1,k,0)); + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) + for (int detj = 0; detj > -2; --detj) + for (int deti = 0; deti > -2; --deti) { + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + for (int detj = 0; detj < 2; ++detj) + for (int deti = 0; deti < 2; ++deti){ + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in0[oct[dim][1]]+=detj; + in1[oct[dim][0]]+=deti,in1[oct[dim][1]]+=detj; + in1[dim] +=1; + gradVof[dim] +=Real(.25)*(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + } + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + // if(kappa(i,j,k,0)!=VOF_NODATA){ + vel_f(i,j,k,dim) -= m_sigma[0]*center(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*center(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + /* } + else { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) + forarr(i,j,k,dim) = 0.; + }*/ + } + }); + + + } + } + else if(choice==4) { +//cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -164,6 +525,7 @@ if(1){ Array4 const& rho = density.const_array(mfi); Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { if(kappa(i,j,k,0)!=VOF_NODATA){ @@ -173,15 +535,24 @@ if(1){ vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } + else { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) + forarr(i,j,k,dim) = 0.; } }); + } - - } + } - } -} + }// end if (m_vof_advect_tracer) } diff --git a/src/incflo_update_velocity.cpp b/src/incflo_update_velocity.cpp index 281329b19..f593eb7b1 100644 --- a/src/incflo_update_velocity.cpp +++ b/src/incflo_update_velocity.cpp @@ -337,5 +337,190 @@ void incflo::update_velocity (StepType step_type, Vector& vel_eta, Vec Real dt_diff = (m_diff_type == DiffusionType::Implicit) ? m_dt : l_half*m_dt; diffuse_velocity(get_velocity_new(), get_density_new(), GetVecOfConstPtrs(vel_eta), dt_diff); } + + // add surface tension + //fixme: we just consider the surface tension for first tracer +if(0){ + if (m_vof_advect_tracer && m_sigma[0]!=0.){ + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + + for (int lev = 0; lev <= finest_level; lev++) + { + auto& ld = *m_leveldata[lev]; + auto const dx = geom[lev].CellSizeArray(); + + const auto& ba = ld.density.boxArray(); + const auto& dm = ld.density.DistributionMap(); + const auto& fact = ld.density.Factory(); + Array face_val{AMREX_D_DECL( + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + dm, 1, 0, MFInfo(), fact), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), + dm, 1, 0, MFInfo(), fact), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), + dm, 1, 0, MFInfo(), fact))}; + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM, 0 , MFInfo(), fact); + + average_cellcenter_to_face(GetArrOfPtrs(face_val), ld.density, Geom(lev)); + for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { + face_val[idim].invert(m_sigma[0], 0); + //face_val[idim].setVal(1.0); + } + +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(ld.density,TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is good that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + Box const& xbx = mfi.nodaltilebox(0); + Box const& ybx = mfi.nodaltilebox(1); + Box const& zbx = mfi.nodaltilebox(2); + Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& kap = vof_p->kappa[lev].const_array(mfi); + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) + kaf=kap(i-1,j,k); + else + kaf=0.; + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + }); + + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) + kaf=kap(i,j-1,k); + else + kaf=0.; + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + }); + + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Real kaf; + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) + kaf=kap(i,j,k-1); + else + kaf=0.; + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + + /* if(i==8&&j==2&&k==8){ + Print()<<"zbx "<<"low "< const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); + ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + //nv(i,j,k,0)=0.25*(xfv(i,j,k,0)+xfv(i,j-1,k,0)+xfv(i,j,k-1,0)+xfv(i,j-1,k-1,0)); + //nv(i,j,k,1)=0.25*(yfv(i,j,k,0)+yfv(i,j,k-1,0)+yfv(i-1,j,k,0)+yfv(i-1,j,k-1,0)); + //nv(i,j,k,2)=0.25*(zfv(i,j,k,0)+zfv(i-1,j,k,0)+zfv(i,j-1,k,0)+zfv(i-1,j-1,k,0)); + + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int nn=0; nn<4;++nn){ + Array in{i, j, k}; + if(nn==1) + in[oct[dim][0]]-=1; + else if (nn==2) + in[oct[dim][1]]-=1; + else if (nn==3) { + in[oct[dim][0]]-=1; + in[oct[dim][1]]-=1; + } + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } + } + nv(i,j,k,dim)/= nt; + + } + }); + + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel = ld.velocity.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + vel(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim))*m_dt; + forarr(i,j,k,dim) = -Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); + } + + }); + + + } + + + + + } // end lev + + } + } + + } diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index a11de8c22..47643df75 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -21,7 +21,7 @@ public: void WriteTecPlotFile (amrex::Real time, int nstep); void output_droplet (amrex::Real time, int nstep); void apply_velocity_field(amrex::Real time, int nstep); - void velocity_face_source(int lev,AMREX_D_DECL(amrex::MultiFab& u_mac, amrex::MultiFab& v_mac, + void velocity_face_source(int lev,amrex::Real dt, AMREX_D_DECL(amrex::MultiFab& u_mac, amrex::MultiFab& v_mac, amrex::MultiFab& w_mac)); // normal vector of interface @@ -41,6 +41,8 @@ public: amrex::Vector kappa; // the tag for droplets amrex::Vector tag; + + amrex::Vector force; private: incflo* v_incflo; //incflo object int finest_level; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 1b1306b45..c925d884d 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -126,6 +126,9 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) }; height.emplace_back(std::move(new_height)); kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + //fixme + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); } } @@ -1449,8 +1452,8 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - height[0].setVal(VOF_NODATA,dim,1); - height[1].setVal(VOF_NODATA,dim,1); + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); //fix me: have not thought of a way to deal with the MFIter with tiling //an option is to use similar way as MPI's implementation. for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { @@ -1643,8 +1646,8 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Arraygrids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - - kappa.setVal(VOF_NODATA); + //fixme: need to change for BCs + kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); n_max.setVal(-1.0); // use height function method to calculate curvature for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ @@ -1723,22 +1726,26 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& temp_arr = temp_K.array(mfi); - Array4 const& kappa_arr = kappa.array(mfi); - ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ + int iter = 0; + if (iter >0){ + MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + while (iter--){ + for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { + Box const& bx = mfi.tilebox(); + Array4 const& temp_arr = temp_K.array(mfi); + Array4 const& kappa_arr = kappa.array(mfi); + ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) @@ -1752,27 +1759,27 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; + Arraynei; + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } } - } - } - if (sa > 0.) - temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + } + if (sa > 0.) + temp_arr(i,j,k,0)=s/sa; + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter + } + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); - //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { @@ -1785,9 +1792,9 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - /* if (i==4&&j==0&&k==4){ + /*if (i==0&&j==0&&k==0){ int dddd; - Print()<<"------------"<<"\n"; + Print()<<"------------"< const& tracer, start = (start + 1) % AMREX_SPACEDIM; } - - +// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle +// of time step (n+1/2). +// F^n+1/2 = (1/2*dt)*sigma*kappa*grad(VOF)/rho +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// values of two neighboring cells dilimited by the face is used to calculate the face-centered value. +// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0] void -VolumeOfFluid:: velocity_face_source (int lev, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, +VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, MultiFab& w_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; @@ -2214,7 +2226,8 @@ VolumeOfFluid:: velocity_face_source (int lev, AMREX_D_DECL(MultiFab& u_mac, Mul kaf=kap(i-1,j,k); else kaf=0.; - umac(i,j,k) += Real(2.)*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 + umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; }); ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept @@ -2228,7 +2241,7 @@ VolumeOfFluid:: velocity_face_source (int lev, AMREX_D_DECL(MultiFab& u_mac, Mul kaf=kap(i,j-1,k); else kaf=0.; - vmac(i,j,k) += Real(2.)*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; }); ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept @@ -2242,7 +2255,7 @@ VolumeOfFluid:: velocity_face_source (int lev, AMREX_D_DECL(MultiFab& u_mac, Mul kaf=kap(i,j,k-1); else kaf=0.; - wmac(i,j,k) += Real(2.)*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; }); } @@ -2317,7 +2330,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Generate GeometryShop //auto gshop = EB2::makeShop(two); - auto gshop = EB2::makeShop(my_sphere); + auto gshop = EB2::makeShop(my_box); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2388,9 +2401,10 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) auto const& tracer = a_tracer.array(mfi); for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + /* if(vout[n].i>=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){ + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ + if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; } @@ -2572,7 +2586,8 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) ", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\""<<", \"tag\""<< ", \"hb_x\""<<", \"hb_y\""<<", \"hb_z\""<< ", \"ht_x\""<<", \"ht_y\""<<", \"ht_z\""<< - ", \"kappa\""<<", \"rho\""<<"\n"; + ", \"kappa\""<<", \"rho\""<< + ", \"f_x\""<<", \"f_y\""<<", \"f_z\""<<"\n"; for (int lev = 0; lev <= finest_level; ++lev) { auto& ld = *v_incflo->m_leveldata[lev]; @@ -2607,7 +2622,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-"<<21<<"]=CELLCENTERED)" + TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-"<<24<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& ht_arr = height[lev][1].const_array(mfi); Array4 const& kappa_arr = kappa[lev].const_array(mfi); Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -2779,6 +2795,23 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } + + //write force vector + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { + for (int k = lo.z; k <= hi.z; ++k) { + for (int j = lo.y; j <= hi.y; ++j) { + for (int i = lo.x; i <= hi.x; ++i) { + TecplotFile << force_arr(i,j,k,dim)<<" "; + ++nn; + if (nn > 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } + } + }// + TecplotFile <<"\n"; } // end MFIter diff --git a/src/vof/incflo_vof.cpp b/src/vof/incflo_vof.cpp index 333cf7929..a35f8a9b0 100644 --- a/src/vof/incflo_vof.cpp +++ b/src/vof/incflo_vof.cpp @@ -30,7 +30,11 @@ incflo::update_vof_density (Vector const& density,Vector c density_arr(i,j,k) = m_ro_0*(1.-tracer_arr(i,j,k,0))+m_ro_s[0]*tracer_arr(i,j,k,0); }); } + //fixme: BCs + density[lev]->FillBoundary(geom[lev].periodicity()); } + + } diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index c2b951feb..beb261fa0 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -1,20 +1,20 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 2.4 # Max (simulated) time to evolve -max_step = 100 # Max number of time steps +stop_time = 1 # Max (simulated) time to evolve +#max_step = 1 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # TIME STEP COMPUTATION # #.......................................# -#incflo.fixed_dt = .00390625 # Use this constant dt if > 0 -incflo.cfl = 0.5 # CFL factor +#incflo.fixed_dt = .001 # Use this constant dt if > 0 +incflo.cfl = 0.2 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 50 # Steps between plot files +amr.plot_int = 30 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -25,7 +25,7 @@ incflo.gravity = 0. 0. 0. # Gravitational force (3D) incflo.ro_0 = 1.0 # Reference density incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) -incflo.mu = 1.0 # Dynamic viscosity coefficient +incflo.mu = 1.0e-3 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 incflo.mu_s = 2.0 incflo.ro_s = 1000.0 @@ -34,7 +34,7 @@ incflo.sigma = 10. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 16 16 16 # Grid cells at coarsest AMRlevel +amr.n_cell = 32 32 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy amr.max_grid_size = 128 128 128 @@ -43,7 +43,7 @@ amr.max_grid_size = 128 128 128 #.......................................# geometry.prob_lo = 0. 0. 0. # Lo corner coordinates geometry.prob_hi = 1. 1. 1. # Hi corner coordinates -geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) +geometry.is_periodic = 0 0 0 # Periodicity x y z (0/1) #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -53,6 +53,21 @@ incflo.probtype = 1109 # incflo.ic_u = 0. incflo.ic_v = 0. incflo.ic_w = 0. +# Boundary conditions +ylo.type = "po" +ylo.pressure = 0. +yhi.type = "po" +yhi.pressure = 0. +xlo.type = "po" +xlo.pressure = 0. +xhi.type = "po" +xhi.pressure = 0.0 +zlo.type = "po" +zlo.pressure = 0. +zhi.type = "po" +zhi.pressure = 0.0 + + #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # NUMERICAL PARAMETERS # #.......................................# @@ -63,6 +78,6 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs # VERBOSITY # #.......................................# incflo.verbose = 2 # incflo_level - +incflo.vof_init_with_eb = 1 amrex.fpe_trap_overflow=1 amrex.fpe_trap_zero=1 From 1fc9cde88b7087ef1c13ccbfcda68a319d881d19 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 13 Sep 2024 22:52:28 -0700 Subject: [PATCH 14/29] test --- ...ncflo_compute_MAC_projected_velocities.cpp | 4 +- src/incflo_compute_forces.cpp | 594 +++++----- src/vof/VolumeOfFluid.cpp | 1024 ++++++++--------- src/vof/incflo_vof.cpp | 49 +- test_3d/inputs.droplet | 4 +- 5 files changed, 855 insertions(+), 820 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index 2407bcd6f..53b842af9 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -178,8 +178,8 @@ incflo::compute_MAC_projected_velocities ( allow_inflow_on_outflow, BC_MF.get()); //add surface tension - if(m_vof_advect_tracer) - get_volume_of_fluid ()->velocity_face_source(lev,l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); + //if(m_vof_advect_tracer) + // get_volume_of_fluid ()->velocity_face_source(lev,l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); } diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 74b2e8b4e..4800f188b 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -148,254 +148,254 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } -/////////////////////////////////////////////////////////////////////////// - // add surface tension - // surface tension = sigma*kappa*grad(VOF)/rho - // sigma: surface tension coefficient - // kappa: curvature of the interface - // grad(VOF): gradient of VOF field variable - // rho: density - - //fixme: we just consider the surface tension for first tracer +/////////////////////////////////////////////////////////////////////////// + // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + + //fixme: we just consider the surface tension for first tracer if (m_vof_advect_tracer && m_sigma[0]!=0.){ - - VolumeOfFluid* vof_p = get_volume_of_fluid (); - - //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and - // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. - //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. - // the node-centered SF is finally averaged to cell center. - //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). - //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - - int choice = 3; - - - const auto& ba = density.boxArray(); + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); const auto& dm = density.DistributionMap(); const auto& fact = density.Factory(); Array face_val{AMREX_D_DECL( - MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), dm, 1, 0, MFInfo(), fact))}; - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); if (choice==1) { - // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. - // The cell-centered force is then obtained by averaging the face-centered value. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM( - Box const& xbx = surroundingNodes(bx,0);, - Box const& ybx = surroundingNodes(bx,1);, - Box const& zbx = surroundingNodes(bx,2);); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - AMREX_D_TERM( + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - // immediately calculate the cell-centered surface tension force using the face-centered value - // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., - // xbx, ybx, zbx) for cell faces in the beginning. - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - }); - } - } + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } else if (choice ==2){ // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. // The face-centered values are then averaged to the cell node. - // Finally, the nodal values are averaged to the cell center. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then - // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the - // repeated calculation of face-centered values at cell faces which are shared by two tiles. - Box const& xbx = mfi.nodaltilebox(0); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); - Array4 const& tra = tracer_new.const_array(mfi); + Box const& zbx = mfi.nodaltilebox(2); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - - AMREX_D_TERM( + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - } + ) // end AMREX_D_TERM + + } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - AMREX_D_TERM( - Box const& xvbx = surroundingNodes(vbx,0);, - Box const& yvbx = surroundingNodes(vbx,1);, - Box const& zvbx = surroundingNodes(vbx,2);); - AMREX_D_TERM( - Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - Array4 const& nv = node_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - nv(i,j,k,dim)=0.; - int nt=0; - for (int detj = 0; detj < 2; ++detj) + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in{i, j, k}; - in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; - if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); - nt++; - } - } - if(nt>0) nv(i,j,k,dim)/= Real(nt); - } - }); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) @@ -404,117 +404,115 @@ void incflo::compute_vel_forces_on_level (int lev, + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); - - } - }); - } - } - else if (choice ==3){ - MultiFab center_val(ba,dm,2,0,MFInfo(), fact); + + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - //nv(i,j,k,0)=0.25*(xfv(i,j,k,0)+xfv(i,j-1,k,0)+xfv(i,j,k-1,0)+xfv(i,j-1,k-1,0)); - //nv(i,j,k,1)=0.25*(yfv(i,j,k,0)+yfv(i,j,k-1,0)+yfv(i-1,j,k,0)+yfv(i-1,j,k-1,0)); - //nv(i,j,k,2)=0.25*(zfv(i,j,k,0)+zfv(i-1,j,k,0)+zfv(i,j-1,k,0)+zfv(i-1,j-1,k,0)); - /* if(i==8&&j==8&&k==8){ - Print()<<"zbx "<<"low "< -2; --detk) - for (int detj = 0; detj > -2; --detj) + { + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) + for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //if (vbx.contains(in[0],in[1],in[2])){ - // averaging VOF to nodes - nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); - nt++; - //averaging kappa to nodes - if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ - nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); - nkap++; - } - //averaging density to nodes - nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); - if(nkap>0) - nv(i,j,k,0)/= Real(nkap); - else - nv(i,j,k,0)=0.; - nv(i,j,k,1)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); - Array4 const& center = center_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array gradVof{0.}; - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - for (int detj = 0; detj < 2; ++detj) + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in0{i, j, k},in1{i, j, k}; - in0[oct[dim][0]]+=deti,in0[oct[dim][1]]+=detj; + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in0[oct[dim][1]]+=detj; in1[oct[dim][0]]+=deti,in1[oct[dim][1]]+=detj; - in1[dim] +=1; - gradVof[dim] +=Real(.25)*(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- - nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; - } - /*Array in0{i, j, k},in1{i, j, k}; - in1[dim] +=1,in0[dim] -=1;; - gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ - } - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - // if(kappa(i,j,k,0)!=VOF_NODATA){ - vel_f(i,j,k,dim) -= m_sigma[0]*center(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - forarr(i,j,k,dim) =-m_sigma[0]*center(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - /* } + in1[dim] +=1; + gradVof[dim] +=Real(.25)*(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + } + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + if(kappa(i,j,k,0)!=VOF_NODATA){ + vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - }*/ - } - }); - - - } - } + forarr(i,j,k,dim) = 0.; + } + } + }); + + + } + } else if(choice==4) { -//cell-centered surface tension force +//cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -523,36 +521,36 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Box const& bx = mfi.tilebox(); Array4 const& vel_f = vel_forces.array(mfi); Array4 const& rho = density.const_array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if(kappa(i,j,k,0)!=VOF_NODATA){ + { + if(kappa(i,j,k,0)!=VOF_NODATA){ Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); - //note: the minus sign is used because of the way curvature is calculated - AMREX_D_TERM( - vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - AMREX_D_TERM( - forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - } + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - }); - } - - } - - - - - }// end if (m_vof_advect_tracer) + forarr(i,j,k,dim) = 0.; + } + }); + } + + } + + + + + }// end if (m_vof_advect_tracer) } diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index c925d884d..5df321873 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -54,7 +54,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -62,12 +62,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -89,7 +89,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -119,17 +119,17 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); //fixme - force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); - } + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); + } } static XDim3 edge[12][2] = { @@ -823,7 +823,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -831,12 +831,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -849,36 +849,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -900,7 +900,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -919,32 +919,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -957,8 +957,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -969,14 +969,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -984,23 +984,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2], hd[2]; for (int nd = 0; nd < 2; nd++) { @@ -1013,7 +1013,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1022,13 +1022,13 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; (&m.x)[oc[d][1]] = - hd[1]; - } - - } + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[9], h[9]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < 2; nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1149,7 +1149,7 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[9], h[9]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < 2 && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < 2; nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1223,15 +1223,15 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1262,9 +1262,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1280,7 +1280,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1309,43 +1309,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1360,11 +1360,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1411,17 +1411,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER @@ -1429,11 +1429,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1447,146 +1447,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); /*if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1597,11 +1597,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1638,19 +1638,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - //fixme: need to change for BCs + MFInfo(), v_incflo->Factory(lev)); + //fixme: need to change for BCs kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1658,42 +1658,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if (i==44&&j==35&&k==31){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1701,84 +1701,84 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); + { + auto fvol = vof_arr(i,j,k,0); /*if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fixme: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + // diffuse curvatures int iter = 0; if (iter >0){ MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); - //fixme: need to change for BCs - temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); while (iter--){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -1786,47 +1786,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /*if (i==0&&j==0&&k==0){ - int dddd; - Print()<<"------------"< kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -1855,47 +1855,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -1920,27 +1920,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -1950,31 +1950,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, start = (start + 1) % AMREX_SPACEDIM; } -// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle +// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle // of time step (n+1/2). // F^n+1/2 = (1/2*dt)*sigma*kappa*grad(VOF)/rho -// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. -// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// grad(VOF) is also estimated at the face center using the center-difference method for two cells // i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0] -void -VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, - MultiFab& w_mac)) +void +VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, + MultiFab& w_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); - auto const& dx = geom.CellSizeArray(); + auto const& dx = geom.CellSizeArray(); Real sigma = v_incflo->m_sigma[0]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2207,58 +2207,58 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u Box const& bx = mfi.tilebox(); Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); + Box const& zbx = mfi.nodaltilebox(2); Array4 const& rho = ld.density.const_array(mfi); - Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); Array4 const& kap = kappa[lev].const_array(mfi); - Array4 const& umac = u_mac.array(mfi); - Array4 const& vmac = v_mac.array(mfi); - Array4 const& wmac = w_mac.array(mfi); - + Array4 const& umac = u_mac.array(mfi); + Array4 const& vmac = v_mac.array(mfi); + Array4 const& wmac = w_mac.array(mfi); + ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 + umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; }); - - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - }); + vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + }); - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - }); - } - + wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); + } + } ////////////////////////////////////////////////////////////////////////////////// /////// @@ -2285,15 +2285,15 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (problo[2]+.45))};*/ Array center1{AMREX_D_DECL((problo[0]+.45), (problo[1]+1.1), - (problo[2]+.45))}; + (problo[2]+.45))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2330,7 +2330,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Generate GeometryShop //auto gshop = EB2::makeShop(two); - auto gshop = EB2::makeShop(my_box); + auto gshop = EB2::makeShop(my_sphere); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2344,18 +2344,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } - else + } + else #endif { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2365,18 +2365,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-16.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2386,29 +2386,29 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - - } - infile.close(); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ - if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ + if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2434,14 +2434,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -2489,7 +2489,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0; for (int k = lo.z; k <= hi.z; ++k) { @@ -2511,7 +2511,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("<m_leveldata[lev]; @@ -2618,7 +2618,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); @@ -2632,11 +2632,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); - Array4 const& density_arr = ld.density.const_array(mfi); - Array4 const& force_arr = force[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); int nn=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { @@ -2666,7 +2666,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - //write VOF + //write VOF for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -2743,7 +2743,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -2753,7 +2753,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { for (int k = lo.z; k <= hi.z; ++k) { @@ -2768,7 +2768,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { @@ -2781,7 +2781,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + } //write density for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { @@ -2811,7 +2811,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } }// - + TecplotFile <<"\n"; } // end MFIter @@ -3105,7 +3105,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3126,7 +3126,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3166,15 +3166,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3195,11 +3195,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3215,13 +3215,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< const& density,Vector c ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { //fixme: we use the property of the tracer 0. density_arr(i,j,k) = m_ro_0*(1.-tracer_arr(i,j,k,0))+m_ro_s[0]*tracer_arr(i,j,k,0); - }); + }); } - //fixme: BCs - density[lev]->FillBoundary(geom[lev].periodicity()); - } - - + //fixme: BCs + density[lev]->FillBoundary(geom[lev].periodicity()); +if(0){ + const auto& ba = density[lev]->boxArray(); + const auto& dm = density[lev]->DistributionMap(); + const auto& fact = density[lev]->Factory(); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0 , MFInfo(), fact); + MultiFab center_val(ba,dm,1,0,MFInfo(), fact); +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*density[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Array4 const& nv = node_val.array(mfi); + Array4 const& rho = density[lev]->const_array(mfi); + ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + + // calculate the node-centered VOF + nv(i,j,k,0)=0.; + int nrho=0; + for (int detk = 0; detk > -2; --detk) + for (int detj = 0; detj > -2; --detj) + for (int deti = 0; deti > -2; --deti) { + Array in{i+deti,j+detj,k+detk}; + //averaging density to nodes + nv(i,j,k,0)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + nv(i,j,k,0)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 1); + MultiFab::Copy(*density[lev], center_val , 0, 0, 1, 0); + //fixme: BCs + density[lev]->FillBoundary(geom[lev].periodicity()); + } + } + } diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index beb261fa0..f738987a1 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -1,8 +1,8 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 1 # Max (simulated) time to evolve -#max_step = 1 # Max number of time steps +stop_time = 6 # Max (simulated) time to evolve +max_step = 2000 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# From 178953099215b0d1a70cd818fd6f1e265ec77956 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Wed, 18 Sep 2024 21:09:28 -0700 Subject: [PATCH 15/29] implement 2D --- test_2d/inputs.droplet | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 test_2d/inputs.droplet diff --git a/test_2d/inputs.droplet b/test_2d/inputs.droplet new file mode 100644 index 000000000..88a1dd87e --- /dev/null +++ b/test_2d/inputs.droplet @@ -0,0 +1,83 @@ +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# SIMULATION STOP # +#.......................................# +stop_time = 8.1 # Max (simulated) time to evolve +max_step = 1 # Max number of time steps +steady_state = 0 # Steady-state solver? + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# TIME STEP COMPUTATION # +#.......................................# +#incflo.fixed_dt = .1 # Use this constant dt if > 0 +incflo.cfl = 0.1 # CFL factor + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INPUT AND OUTPUT # +#.......................................# +amr.plot_int = 40 # Steps between plot files +amr.check_int = 1000 # Steps between checkpoint files +amr.restart = "" # Checkpoint to restart from + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# PHYSICS # +#.......................................# +incflo.gravity = 0. 0. # Gravitational force (3D) +incflo.ro_0 = 1.0 # Reference density +incflo.ntrac = 1 +incflo.fluid_model = "newtonian" # Fluid model (rheology) +incflo.mu = 1.e-3 # Dynamic viscosity coefficient +incflo.vof_advect_tracer= 1 +incflo.mu_s = 1.0 +incflo.ro_s = 1000.0 +incflo.sigma = 10. + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# ADAPTIVE MESH REFINEMENT # +#.......................................# +amr.n_cell = 16 16 # Grid cells at coarsest AMRlevel +amr.max_level = 0 # Max AMR level in hierarchy +amr.max_grid_size = 64 64 + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# GEOMETRY # +#.......................................# +geometry.prob_lo = 0. 0. # Lo corner coordinates +geometry.prob_hi = 1. 1. # Hi corner coordinates +geometry.is_periodic = 1 1 # Periodicity x y z (0/1) + + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INITIAL CONDITIONS # +#.......................................# +incflo.probtype = 1109 # +incflo.ic_u = 1. +incflo.ic_v = 1. +incflo.ic_w = 0. +# Boundary conditions +#ylo.type = "po" +#ylo.pressure = 0. +#yhi.type = "po" +#yhi.pressure = 0. +#xlo.type = "po" +#xlo.pressure = 0. +#xhi.type = "po" +#xhi.pressure = 0.0 +#zlo.type = "po" +#zlo.pressure = 0. +#zhi.type = "po" +#zhi.pressure = 0.0 + + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# NUMERICAL PARAMETERS # +#.......................................# +incflo.steady_state_tol = 1.e-5 # Tolerance for steady-state +amrex.fpe_trap_invalid = 1 # Trap NaNs + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# VERBOSITY # +#.......................................# +incflo.verbose = 2 # incflo_level +incflo.vof_init_with_eb = 1 +amrex.fpe_trap_overflow=1 +amrex.fpe_trap_zero=1 From b9df26d53ccfbffe2893f0c5d97937fb10dc6dfe Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Wed, 18 Sep 2024 21:41:32 -0700 Subject: [PATCH 16/29] implement 2D --- ...ncflo_compute_MAC_projected_velocities.cpp | 44 +- src/incflo_compute_forces.cpp | 594 +++---- src/incflo_update_velocity.cpp | 6 +- src/vof/VolumeOfFluid.cpp | 1477 ++++++++++------- src/vof/incflo_vof.cpp | 54 +- src/vof/partstr.H | 130 +- 6 files changed, 1357 insertions(+), 948 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index 53b842af9..981b2fe54 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -165,7 +165,7 @@ incflo::compute_MAC_projected_velocities ( // Predict normal velocity to faces -- note that the {u_mac, v_mac, w_mac} // returned from this call are on face CENTROIDS bool allow_inflow_on_outflow = false; - HydroUtils::ExtrapVelToFaces(*vel[lev], *vel_forces[lev], + /*HydroUtils::ExtrapVelToFaces(*vel[lev], *vel_forces[lev], AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), get_velocity_bcrec(), get_velocity_bcrec_device_ptr(), geom[lev], l_dt, @@ -175,12 +175,52 @@ incflo::compute_MAC_projected_velocities ( #endif m_godunov_ppm, m_godunov_use_forces_in_trans, l_advection_type, PPM::default_limiter, - allow_inflow_on_outflow, BC_MF.get()); + allow_inflow_on_outflow, BC_MF.get());*/ //add surface tension //if(m_vof_advect_tracer) // get_volume_of_fluid ()->velocity_face_source(lev,l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); + +if(0){ +//The following is only used for testing the pure advection of VOF algorithm +//Average the cell-centered velocity to face center as MAC velocity +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*vel[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + Box const& ybx = mfi.nodaltilebox(1);, + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& velocity = vel[lev]->const_array(mfi); + AMREX_D_TERM(Array4 const& xfv = u_mac[lev]->array(mfi);, + Array4 const& yfv = v_mac[lev]->array(mfi);, + Array4 const& zfv = w_mac[lev]->array(mfi);); + AMREX_D_TERM( + ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + xfv(i,j,k) = .5*(velocity(i,j,k,0)+velocity(i-1,j,k,0)); + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + yfv(i,j,k) = .5*(velocity(i,j,k,1)+velocity(i,j-1,k,1)); + });, + + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + zfv(i,j,k) = .5*(velocity(i,j,k,2)+velocity(i,j,k-1,2)); + }); + ) // end AMREX_D_TERM + + } + return; +}//test } Vector > mac_vec(finest_level+1); diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 4800f188b..70fb219b2 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -148,254 +148,256 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } -/////////////////////////////////////////////////////////////////////////// - // add surface tension - // surface tension = sigma*kappa*grad(VOF)/rho - // sigma: surface tension coefficient - // kappa: curvature of the interface - // grad(VOF): gradient of VOF field variable - // rho: density - - //fixme: we just consider the surface tension for first tracer +/////////////////////////////////////////////////////////////////////////// + // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + + //fixme: we just consider the surface tension for first tracer if (m_vof_advect_tracer && m_sigma[0]!=0.){ - - VolumeOfFluid* vof_p = get_volume_of_fluid (); - - //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and - // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. - //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. - // the node-centered SF is finally averaged to cell center. - //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). - //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - - int choice = 3; - - - const auto& ba = density.boxArray(); + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); const auto& dm = density.DistributionMap(); const auto& fact = density.Factory(); Array face_val{AMREX_D_DECL( - MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), dm, 1, 0, MFInfo(), fact))}; - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); if (choice==1) { - // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. - // The cell-centered force is then obtained by averaging the face-centered value. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM( - Box const& xbx = surroundingNodes(bx,0);, - Box const& ybx = surroundingNodes(bx,1);, - Box const& zbx = surroundingNodes(bx,2);); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - AMREX_D_TERM( + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - // immediately calculate the cell-centered surface tension force using the face-centered value - // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., - // xbx, ybx, zbx) for cell faces in the beginning. - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - }); - } - } + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } else if (choice ==2){ // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. // The face-centered values are then averaged to the cell node. - // Finally, the nodal values are averaged to the cell center. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then - // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the - // repeated calculation of face-centered values at cell faces which are shared by two tiles. - Box const& xbx = mfi.nodaltilebox(0); - Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + Box const& ybx = mfi.nodaltilebox(1);, + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - - AMREX_D_TERM( + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - } + ) // end AMREX_D_TERM + + } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - AMREX_D_TERM( - Box const& xvbx = surroundingNodes(vbx,0);, - Box const& yvbx = surroundingNodes(vbx,1);, - Box const& zvbx = surroundingNodes(vbx,2);); - AMREX_D_TERM( - Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - Array4 const& nv = node_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - nv(i,j,k,dim)=0.; - int nt=0; - for (int detj = 0; detj < 2; ++detj) + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in{i, j, k}; - in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; - if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); - nt++; - } - } - if(nt>0) nv(i,j,k,dim)/= Real(nt); - } - }); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } +#if AMREX_SPACEDIM == 3 + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } +#endif + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) @@ -404,115 +406,115 @@ void incflo::compute_vel_forces_on_level (int lev, + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); - - } - }); - } - } - else if (choice ==3){ - MultiFab center_val(ba,dm,2,0,MFInfo(), fact); + + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - /* if(i==8&&j==8&&k==8){ - Print()<<"zbx "<<"low "< -2; --detk) - for (int detj = 0; detj > -2; --detj) + { + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) + for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //if (vbx.contains(in[0],in[1],in[2])){ - // averaging VOF to nodes - nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); - nt++; - //averaging kappa to nodes - if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ - nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); - nkap++; - } - //averaging density to nodes - nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); - if(nkap>0) - nv(i,j,k,0)/= Real(nkap); - else - nv(i,j,k,0)=0.; - nv(i,j,k,1)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 2); - //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); - Array4 const& center = center_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array gradVof{0.}; - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - for (int detj = 0; detj < 2; ++detj) + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in0{i, j, k},in1{i, j, k}; - in0[oct[dim][0]]+=deti,in0[oct[dim][1]]+=detj; + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in0[oct[dim][1]]+=detj; in1[oct[dim][0]]+=deti,in1[oct[dim][1]]+=detj; - in1[dim] +=1; - gradVof[dim] +=Real(.25)*(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- - nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; - } - /*Array in0{i, j, k},in1{i, j, k}; - in1[dim] +=1,in0[dim] -=1;; - gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ - } - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + in1[dim] +=1; + gradVof[dim] +=Real(.25)*(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + } + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ if(kappa(i,j,k,0)!=VOF_NODATA){ - vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - } + vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - } - }); - - - } - } + forarr(i,j,k,dim) = 0.; + } + } + }); + + + } + } else if(choice==4) { -//cell-centered surface tension force +//cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -521,36 +523,36 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Box const& bx = mfi.tilebox(); Array4 const& vel_f = vel_forces.array(mfi); Array4 const& rho = density.const_array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if(kappa(i,j,k,0)!=VOF_NODATA){ + { + if(kappa(i,j,k,0)!=VOF_NODATA){ Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); - //note: the minus sign is used because of the way curvature is calculated - AMREX_D_TERM( - vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - AMREX_D_TERM( - forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - } + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - }); - } - - } - - - - - }// end if (m_vof_advect_tracer) + forarr(i,j,k,dim) = 0.; + } + }); + } + + } + + + + + }// end if (m_vof_advect_tracer) } diff --git a/src/incflo_update_velocity.cpp b/src/incflo_update_velocity.cpp index f593eb7b1..c8a0cd1ea 100644 --- a/src/incflo_update_velocity.cpp +++ b/src/incflo_update_velocity.cpp @@ -415,7 +415,7 @@ if(0){ kaf=0.; yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; }); - +#if AMREX_SPACEDIM == 3 ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; @@ -435,7 +435,7 @@ if(0){ } */ }); - +#endif } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP @@ -483,10 +483,12 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); nt++; } +#if AMREX_SPACEDIM == 3 else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); nt++; } +#endif } nv(i,j,k,dim)/= nt; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 5df321873..efd4d98ae 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -15,7 +15,11 @@ using namespace amrex; #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define CLAMP(x,a,b) ((x) < (a) ? (a) : (x) > (b) ? (b) : (x)) #define VOF_NODATA std::numeric_limits::max() -#define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[2]< min[2]||c[0]>max[0]||c[1]> max[1]||c[2]> max[2]) +#if AMREX_SPACEDIM==2 +#define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[0]>max[0]||c[1]> max[1]) +#else +#define CELL_IS_BOUNDARY(c,min,max) (c[0]< min[0]||c[1]< min[1]||c[0]>max[0]||c[1]> max[1]||c[2]< min[2]||c[2]> max[2]) +#endif // Define VofVector as an array of 3 doubles using VofVector = Array; static_assert(sizeof(XDim3)==3*sizeof(Real)); @@ -54,7 +58,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -62,12 +66,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -89,7 +93,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -119,17 +123,17 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); //fixme - force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); - } + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); + } } static XDim3 edge[12][2] = { @@ -275,10 +279,10 @@ static int cut_cube_vertices (XDim3 center, GpuArray dx, struct Segment{ - int nnodes; /* number of nodes (2, 3 or 4) */ -#if AMREX_SPACEDIM==2 + int nnodes; /* number of nodes (2, 3 or 4) */ +#if AMREX_SPACEDIM==2 /* 2D */ XDim3 node[2]; /* node coordinates */ -#else +#else /* 3D */ XDim3 node[4]; #endif XDim3 mv; @@ -286,7 +290,13 @@ struct Segment{ //vof, tag Array vars; // Constructor to initialize the Segment - Segment(int n, Array const& nodes, XDim3 m, Real a, Array v, int ns=0) + Segment(int n, +#if AMREX_SPACEDIM==2 /* 2D */ + Array const& nodes, +#else /* 3D */ + Array const& nodes, +#endif + XDim3 m, Real a, Array v, int ns=0) : nnodes(n), mv (m), alpha(a), vars(v) { for (int i = 0; i < n; ++i) node[i]= nodes[ns==0?i:(i + 3)%(n + 2)]; @@ -301,6 +311,69 @@ static void add_segment (XDim3 const & center, GpuArray co /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m <<"vof"<<" "< nodecutface; + Real x, y, h=dx[0]; + int n=0, nnodecutface; + if (fabs (m.y) > EPS) { + y = (alpha - m.x)/m.y; + if (y >= 0. && y <= 1.) { + nodecutface[n].x = center.x + h/2.; nodecutface[n].y = center.y + h*(y - 0.5); nodecutface[n++].z = 0.; + } + } + if (fabs (m.x) > EPS) { + x = (alpha - m.y)/m.x; + if (x >= 0. && x <= 1.) { + nodecutface[n].x = center.x + h*(x - 0.5); nodecutface[n].y = center.y + h/2.; nodecutface[n++].z = 0.; + } + } + if (fabs (m.y) > EPS) { + y = alpha/m.y; + if (y >= 0. && y <= 1.) { + nodecutface[n].x = center.x - h/2.; nodecutface[n].y = center.y + h*(y - 0.5); nodecutface[n++].z = 0.; + } + } + if (fabs (m.x) > EPS) { + x = alpha/m.x; + if (x >= 0. && x <= 1.) { + nodecutface[n].x = center.x + h*(x - 0.5); nodecutface[n].y = center.y - h/2.; nodecutface[n++].z = 0.; + } + } + nnodecutface = n; + if (n > 2) { + /*check if there are duplicated points*/ + int i,j; + bool ok[n]; + for (i=0; i nodecutface; @@ -389,6 +462,162 @@ static void add_segment (XDim3 const & center, GpuArray co segments.emplace_back(nnodecutface, nodecutface, m, alpha, vars, 3); } /* cut face must be divided into 2 quadrilateral/triangular faces */ +#endif + +} +/** + * line_area: + * @m: normal to the line. + * @alpha: line constant. + * + * Returns: the area of the fraction of a cell lying under the line + * (@m,@alpha). + */ +Real line_area (Array &m, Real alpha) +{ + XDim3 n; + Real alpha1, a, v, area; + + n.x = m[0], n.y = m[1]; + alpha1 = alpha; + if (n.x < 0.) { + alpha1 -= n.x; + n.x = - n.x; + } + if (n.y < 0.) { + alpha1 -= n.y; + n.y = - n.y; + } + + if (alpha1 <= 0.) + return 0.; + + if (alpha1 >= n.x + n.y) + return 1.; + + if (n.x == 0.) + area = alpha1/n.y; + else if (n.y == 0.) + area = alpha1/n.x; + else { + v = alpha1*alpha1; + + a = alpha1 - n.x; + if (a > 0.) + v -= a*a; + + a = alpha1 - n.y; + if (a > 0.) + v -= a*a; + + area = v/(2.*n.x*n.y); + } + + return CLAMP (area, 0., 1.); +} + +/** + * line_alpha: + * @m: a #FttVector. + * @c: a volume fraction. + * + * Returns: the value @alpha such that the area of a square cell + * lying under the line defined by @m.@x = @alpha is equal to @c. + */ +Real line_alpha (XDim3 & m, Real c) +{ + Real alpha, m1, m2, v1; + + m1 = fabs (m.x); m2 = fabs (m.y); + if (m1 > m2) { + v1 = m1; m1 = m2; m2 = v1; + } + + v1 = m1/2.; + if (c <= v1/m2) + alpha = sqrt (2.*c*m1*m2); + else if (c <= 1. - v1/m2) + alpha = c*m2 + v1; + else + alpha = m1 + m2 - sqrt (2.*m1*m2*(1. - c)); + + if (m.x < 0.) + alpha += m.x; + if (m.y < 0.) + alpha += m.y; + + return alpha; +} + +/** + * line_center: + * @m: normal to the line. + * @alpha: line constant. + * @a: area of cell fraction. + * @p: a #coordinates. + * + * Fills @p with the position of the center of mass of the fraction of + * a square cell lying under the line (@m,@alpha). + */ +void line_center (XDim3 const & m, Real alpha, Real a, XDim3 & p) +{ + XDim3 n; + Real b; + n = m; + if (n.x < 0.) { + alpha -= n.x; + n.x = - n.x; + } + if (n.y < 0.) { + alpha -= n.y; + n.y = - n.y; + } + + p.z = 0.; + if (alpha <= 0.) { + p.x = p.y = 0.; + return; + } + + if (alpha >= n.x + n.y) { + p.x = p.y = 0.5; + return; + } + + + if (n.x < EPS) { + p.x = 0.5; + p.y = m.y < 0. ? 1. - a/2. : a/2.; + return; + } + + if (n.y < EPS) { + p.y = 0.5; + p.x = m.x < 0. ? 1. - a/2. : a/2.; + return; + } + + p.x = p.y = alpha*alpha*alpha; + + b = alpha - n.x; + if (b > 0.) { + p.x -= b*b*(alpha + 2.*n.x); + p.y -= b*b*b; + } + + b = alpha - n.y; + if (b > 0.) { + p.y -= b*b*(alpha + 2.*n.y); + p.x -= b*b*b; + } + + p.x /= 6.*n.x*n.x*n.y*a; + p.y /= 6.*n.x*n.y*n.y*a; + + if (m.x < 0.) + p.x = 1. - p.x; + if (m.y < 0.) + p.y = 1. - p.y; } /** @@ -472,6 +701,12 @@ Real line_area_center (XDim3 const & m, Real alpha, XDim3 & p) } +#if AMREX_SPACEDIM == 2 /* 3D */ +# define plane_volume line_area +# define plane_alpha line_alpha +# define plane_center line_center +# define plane_area_center line_area_center +#else /* 3D */ /** * plane_area_center: @@ -740,8 +975,10 @@ Real plane_alpha (XDim3 & m, Real c) return alpha; } +#endif + #if AMREX_SPACEDIM == 2 -#include "myc2D.h" +#include "myc2d.h" #else #include "myc.h" #endif @@ -823,7 +1060,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -831,12 +1068,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -849,36 +1086,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -900,7 +1137,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -919,32 +1156,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -957,8 +1194,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -969,14 +1206,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -984,23 +1221,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2], hd[2]; for (int nd = 0; nd < 2; nd++) { @@ -1013,7 +1250,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1022,26 +1259,33 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; (&m.x)[oc[d][1]] = - hd[1]; - } - - } + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { - Real x[9], h[9]; - Real orientation; + Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; - for (int nd = 0; nd < 2; nd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); if (h[n] == VOF_NODATA ) break; @@ -1121,6 +1365,15 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { - Real x[9], h[9]; - Real orientation; + Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < 2 && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; - for (int nd = 0; nd < 2; nd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); n++; h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd]+1, &x[n]); x[n] = - x[n]; n++; } + +#if AMREX_SPACEDIM==2 /* 2D */ + h[n] = (*hv)(i,j,k,d); x[n] = 0.; + if (h[2] != VOF_NODATA && h[0] != VOF_NODATA && h[1] != VOF_NODATA) { + kappa = curvature_from_h (x, h, d)/dx[0]; + return true; + } + else { /* h[2] == VOF_NODATA || h[0] == VOF_NODATA || h[1] == VOF_NODATA */ + /* collect interface positions (based on height function) */ + VofVector pos; + for (n = 0; n < 3; n++) + if (h[n] != VOF_NODATA) { + pos[oc[d][0]] = x[n]; + pos[d] = orientation*h[n]; + interface.emplace_back(std::move(pos)); + } + return false; + } +#else /* 3D */ int od[2],m=0; Real xd[4][2]; for (int nd = 0; nd < 2 ; nd++) @@ -1223,15 +1495,15 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1262,9 +1534,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1280,7 +1552,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1309,43 +1581,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1355,16 +1627,16 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1411,29 +1683,29 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; -# if PARABOLA_SIMPLER +# if PARABOLA_SIMPLER || AMREX_SPACEDIM==2 int nn=3; # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1447,146 +1719,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); /*if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1597,11 +1869,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1638,19 +1910,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - //fixme: need to change for BCs + MFInfo(), v_incflo->Factory(lev)); + //fixme: need to change for BCs kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1658,42 +1930,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if (i==44&&j==35&&k==31){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1701,84 +1973,84 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); + { + auto fvol = vof_arr(i,j,k,0); /*if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fixme: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + // diffuse curvatures int iter = 0; if (iter >0){ MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); - //fixme: need to change for BCs - temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); while (iter--){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -1786,47 +2058,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /*if (i==0&&j==0&&k==0){ - int dddd; - Print()<<"------------"< kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -1855,47 +2127,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -1920,27 +2192,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -1950,31 +2222,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, m_total_flux[lev].setVal(0.0); vof_total_flux[lev].setVal(0.0); MultiFab const * U_MF = dir < 1? u_mac[lev]: - dir < 2? v_mac[lev]:w_mac[lev]; +#if AMREX_SPACEDIM == 3 + dir >= 2? w_mac[lev]: +#endif + v_mac[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2184,20 +2459,20 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, start = (start + 1) % AMREX_SPACEDIM; } -// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle +// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle // of time step (n+1/2). // F^n+1/2 = (1/2*dt)*sigma*kappa*grad(VOF)/rho -// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. -// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// grad(VOF) is also estimated at the face center using the center-difference method for two cells // i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0] -void -VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, - MultiFab& w_mac)) +void +VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, + MultiFab& w_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); - auto const& dx = geom.CellSizeArray(); + auto const& dx = geom.CellSizeArray(); Real sigma = v_incflo->m_sigma[0]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2207,58 +2482,58 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u Box const& bx = mfi.tilebox(); Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); + Box const& zbx = mfi.nodaltilebox(2); Array4 const& rho = ld.density.const_array(mfi); - Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); Array4 const& kap = kappa[lev].const_array(mfi); - Array4 const& umac = u_mac.array(mfi); - Array4 const& vmac = v_mac.array(mfi); - Array4 const& wmac = w_mac.array(mfi); - + AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, + Array4 const& vmac = v_mac.array(mfi);, + Array4 const& wmac = w_mac.array(mfi);); ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 + umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; }); - - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - }); - - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + }); +#if AMREX_SPACEDIM==3 /* 3D */ + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - }); - } - + wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); +#endif + } + } ////////////////////////////////////////////////////////////////////////////////// /////// @@ -2283,17 +2558,17 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) /* Array center{AMREX_D_DECL((problo[0]+.45), (problo[1]+.1), (problo[2]+.45))};*/ - Array center1{AMREX_D_DECL((problo[0]+.45), - (problo[1]+1.1), - (problo[2]+.45))}; + Array center1{AMREX_D_DECL((problo[0]+.5), + (problo[1]+.75), + (problo[2]+.35))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; - Real radius = .2; //5.0*dx[0]; + 0.5*(problo[2]+probhi[2]))}; + Real radius = .15; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2330,7 +2605,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Generate GeometryShop //auto gshop = EB2::makeShop(two); - auto gshop = EB2::makeShop(my_sphere); + auto gshop = EB2::makeShop(my_box); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2344,18 +2619,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } - else + } + else #endif { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2365,18 +2640,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-16.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2386,29 +2661,29 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - - } - infile.close(); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ - if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ + if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2434,14 +2709,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -2489,10 +2764,12 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; - int totalnodes = 0; - for (int k = lo.z; k <= hi.z; ++k) { + int totalnodes = 0, k=0; +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { auto fvol = vof(i,j,k,0); @@ -2511,7 +2788,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("< 0) { // std::ofstream TecplotFile; @@ -2529,21 +2805,31 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) //spatial coordinates TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); //output variables - TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\""<<", \"m_z\""<<", \"alpha\"" - <<", \"tag\""<<", \"kappa\""<<"\n"; + TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\"" +#if AMREX_SPACEDIM==3 + <<", \"m_z\"" +#endif + <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_leveldata[lev]; @@ -2618,11 +2919,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-"<<24<<"]=CELLCENTERED)" + TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); + TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-" + <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); - Array4 const& density_arr = ld.density.const_array(mfi); - Array4 const& force_arr = force[lev].const_array(mfi); - int nn=0; + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); + int nn=0, k=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z +1; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z +1; ++k) +#endif for (int j = lo.y; j <= hi.y +1; ++j) { for (int i = lo.x; i <= hi.x +1; ++i) { TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; @@ -2651,10 +2955,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + }// //write presure - for (int k = lo.z; k <= hi.z+1; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z+1; ++k) +#endif for (int j = lo.y; j <= hi.y+1; ++j) { for (int i = lo.x; i <= hi.x+1; ++i) { TecplotFile << pa(i,j,k)<<" "; @@ -2665,9 +2971,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } - //write VOF - for (int k = lo.z; k <= hi.z; ++k) { + + //write VOF +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tracer(i,j,k,0)<<" "; @@ -2678,10 +2986,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + //write velocity for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << vel(i,j,k,dim)<<" "; @@ -2692,12 +3002,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + }// //write variables of the normal direction of the interface for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << mv(i,j,k,dim)<<" "; @@ -2708,12 +3020,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + }// //write alpha of the interface - - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << al(i,j,k)<<" "; @@ -2724,10 +3037,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + //write id of the droplets or bubbles - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tag_arr(i,j,k)<<" "; @@ -2738,12 +3053,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + //write height function values for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -2752,11 +3069,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << ht_arr(i,j,k,dim)<<" "; @@ -2767,10 +3085,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } - }// + }// //write curvature - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << kappa_arr(i,j,k)<<" "; @@ -2781,9 +3100,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + //write density - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << density_arr(i,j,k)<<" "; @@ -2794,11 +3115,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + //write force vector for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { - for (int k = lo.z; k <= hi.z; ++k) { +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << force_arr(i,j,k,dim)<<" "; @@ -2809,9 +3132,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - } + }// - + TecplotFile <<"\n"; } // end MFIter @@ -2986,7 +3309,15 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto ,ort2=ORTHOGONAL_COMPONENT(ort1);//2nd transverse direction for (int n=0;n<2;n++){ int k0=dim_limit[n][d],gd=k0+(n==0?-1:1); - for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++) + for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ +#if AMREX_SPACEDIM==2 /*2D*/ + Real tag_cell=(d==0?tag_arr(k0,i0,0):tag_arr(i0,k0,0)); + if(tag_cell > 0){ + Real tag_gcell=(d==0?tag_arr(gd,i0,0):tag_arr(i0,gd,0)); + if(tag_gcell > 0) + touching_regions (tag_cell, tag_gcell, touch); + } +#else /*3D */ for(int j0=ijk_min[ort2];j0<=ijk_max[ort2];j0++){ Real tag_cell=(d==0?tag_arr(k0,i0,j0): d==1?tag_arr(j0,k0,i0): @@ -2995,12 +3326,12 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto Real tag_gcell=(d==0?tag_arr(gd,i0,j0): d==1?tag_arr(j0,gd,i0): tag_arr(i0,j0,gd)); - if(tag_gcell > 0){ + if(tag_gcell > 0) touching_regions (tag_cell, tag_gcell, touch); - } } - }// end for-loop for searching cells in the boundaries. +#endif + } }// end for-loop for low and high boundary }// end for-loop for AMREX_SPACEDIM } @@ -3105,7 +3436,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3126,7 +3457,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3166,15 +3497,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3195,11 +3526,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3211,17 +3542,17 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real error=0.; if (0){ Real lencube=5./16., cube_vol=lencube*lencube*lencube; - Array o0={0.1875,0.1875,0.1875},o, + Array o0={0.1875},o, cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< const& density,Vector c density_arr(i,j,k) = m_ro_0*(1.-tracer_arr(i,j,k,0))+m_ro_s[0]*tracer_arr(i,j,k,0); }); } - //fixme: BCs - density[lev]->FillBoundary(geom[lev].periodicity()); -if(0){ + //fixme: BCs + density[lev]->FillBoundary(geom[lev].periodicity()); +if(0){ const auto& ba = density[lev]->boxArray(); const auto& dm = density[lev]->DistributionMap(); const auto& fact = density[lev]->Factory(); // store the nodal values (the last component stores the node-centered VOF) MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0 , MFInfo(), fact); - MultiFab center_val(ba,dm,1,0,MFInfo(), fact); + MultiFab center_val(ba,dm,1,0,MFInfo(), fact); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(*density[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Array4 const& nv = node_val.array(mfi); - Array4 const& rho = density[lev]->const_array(mfi); + Box const& nbx = surroundingNodes(mfi.tilebox()); + Array4 const& nv = node_val.array(mfi); + Array4 const& rho = density[lev]->const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - // calculate the node-centered VOF - nv(i,j,k,0)=0.; - int nrho=0; - for (int detk = 0; detk > -2; --detk) + { + + // calculate the node-centered VOF + nv(i,j,k,0)=0.; + int nrho=0; + for (int detk = 0; detk > -2; --detk) for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //averaging density to nodes - nv(i,j,k,0)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - nv(i,j,k,0)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 1); + Array in{i+deti,j+detj,k+detk}; + //averaging density to nodes + nv(i,j,k,0)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + nv(i,j,k,0)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 1); MultiFab::Copy(*density[lev], center_val , 0, 0, 1, 0); - //fixme: BCs - density[lev]->FillBoundary(geom[lev].periodicity()); - } + //fixme: BCs + density[lev]->FillBoundary(geom[lev].periodicity()); + } } - + } diff --git a/src/vof/partstr.H b/src/vof/partstr.H index fc0a093a0..f065646d9 100644 --- a/src/vof/partstr.H +++ b/src/vof/partstr.H @@ -419,7 +419,7 @@ static void SetZeroZ(XDim3 & p) { p.z = 0; #endif } - +#define EPS 1e-4 /** * vof_facet: * @dx: grid size in x-,y-, z-direction. @@ -436,11 +436,36 @@ int vof_facet (GpuArray dx, XDim3 q, XDim3 m, Real alpha, XDim3 * p) { - - int c; + int c,n =0; XDim3 o=q; #if AMREX_SPACEDIM==2 Real x, y; + + if (fabs (m.y) > EPS) { + y = (alpha - m.x)/m.y; + if (y >= 0. && y <= 1.) { + p[n].x = q.x + dx[0]/2.; p[n].y = q.y + dx[1]*(y - 0.5); p[n++].z = 0.; + } + } + if (fabs (m.x) > EPS) { + x = (alpha - m.y)/m.x; + if (x >= 0. && x <= 1.) { + p[n].x = q.x + dx[0]*(x - 0.5); p[n].y = q.y + dx[1]/2.; p[n++].z = 0.; + } + } + if (fabs (m.y) > EPS) { + y = alpha/m.y; + if (y >= 0. && y <= 1.) { + p[n].x = q.x - dx[0]/2.; p[n].y = q.y + dx[1]*(y - 0.5); p[n++].z = 0.; + } + } + if (fabs (m.x) > EPS) { + x = alpha/m.x; + if (x >= 0. && x <= 1.) { + p[n].x = q.x + dx[0]*(x - 0.5); p[n].y = q.y - dx[1]/2.; p[n++].z = 0.; + } + } + AMREX_ASSERT (n <= 2); #else /* 3D */ Real max = fabs (m.x); c = 0; @@ -456,39 +481,39 @@ int vof_facet (GpuArray dx, int d[12]; /* array of node coordinates for a cut face */ Array nodecutface; - int n = cut_cube_vertices (o, dx, q, m, nodecutface, d); + n = cut_cube_vertices (o, dx, q, m, nodecutface, d); for (c=0; c & cell, const Trans& w, XDim3* ll, int& nl, - GpuArray dx, - GpuArray problo, - Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) +static void Section(Array & cell, const Trans & w, XDim3* ll, int& nl, + GpuArray dx, + GpuArray problo, + Array4 const & vof, + Array4 const & mv, + Array4 const & alpha) { - +#if AMREX_SPACEDIM==3 /* 3D */ for (int dk = -2; dk <= 2; ++dk) { +#else /* 2D */ + int dk=0; +#endif for (int dj = -2; dj <= 2; ++dj) { for (int di = -2; di <= 2; ++di) { - if (dk==0 &&dj==0&&di==0) + if (dk==0&&dj==0&&di==0) continue; Array ncell={cell[0]+di,cell[1]+dj, cell[2]+dk}; Real fvol = vof(ncell[0],ncell[1],ncell[2]); @@ -497,8 +522,10 @@ static void Section3(Array & cell, const Trans& w, XDim3* ll, int& nl, XDim3 rn;// neighbor cell center for (int c = 0; c < AMREX_SPACEDIM; c++) (&rn.x)[c] = problo[c] + dx[c]*(ncell[c] + .5); +#if AMREX_SPACEDIM==3 // if cell intersects plane if (fabs(Dot(w.u, Sub(w.o, rn))) <= dx[0] * Norm1(w.u) * 0.5) { +#endif // normal to facet XDim3 m={mv(ncell[0],ncell[1],ncell[2],0), mv(ncell[0],ncell[1],ncell[2],1), @@ -510,6 +537,24 @@ static void Section3(Array & cell, const Trans& w, XDim3* ll, int& nl, << ncell[0]<<" "< 0) { + ll[nl] = l; + ll[nl + 1] = lb; + nl += 2; + } + } +#else /* 3D */ AMREX_ASSERT(nf <= kMaxFacet); // find two intersections with facet edge and plane for (int i = 0; i < nf && q < 2; ++i) { @@ -536,35 +581,15 @@ static void Section3(Array & cell, const Trans& w, XDim3* ll, int& nl, nl += 2; } } - } + } } +#endif } } } - } -} - -// Cross-section of interface from neighbor cells in plane coordinates. -// point: center cell -// w: transformation -// ll: buffer for at least kMaxSection more points -// *nl: current size of ll -// Output: -// ll: appended by local coordinates of endpoints, -// p = o + t*l.x + t*l.y , [pa,pb] is one line segment -// *nl: new size of ll -static void Section(Array & cell, const Trans & w, XDim3* ll, int& nl, - GpuArray dx, - GpuArray problo, - Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) -{ -#if AMREX_SPACEDIM==2 - Section2(cell, w, ll, nl, dx, problo, vof, mv, alpha); -#else - Section3(cell, w, ll, nl, dx, problo, vof, mv, alpha); -#endif +#if AMREX_SPACEDIM==3 + } +#endif } // Curvature of a set line segments. @@ -832,23 +857,31 @@ Real matrix_inverse (Real ** m, int n, Real pivmin) typedef struct { - VofVector o; + VofVector o; Real ** M; +#if AMREX_SPACEDIM==2 /* y = a[0]*x^2 + a[0]*x + a[1] */ + VofVector m, rhs, a; +#else /* 3D */ # if PARABOLA_SIMPLER /* z = a[0]*x^2 + a[1]*y^2 + a[2]*x*y */ VofVector rhs, a; # else /* z = a[0]*x^2 + a[1]*y^2 + a[2]*x*y + a[3]*x + a[4]*y + a[5] */ Real rhs[6], a[6]; # endif VofVector t[3]; +#endif /* 3D */ } ParabolaFit; static void parabola_fit_init (ParabolaFit & p, XDim3 & o, XDim3 & m) { p.o[0] = o.x; p.o[1] = o.y; p.o[2] = o.z; + int nn = 3; +#if AMREX_SPACEDIM==2 /* 2D */ + p.m[0] = m.x; p.m[1] = m.y; p.m[2] = 0.; + vector_normalize (p.m); +#else /* 3D */ Real max; VofVector nx = {0., 0., 0.}, ny, nz; int d = 0; - nz[0] = m.x; nz[1] = m.y; nz[2] = m.z; vector_normalize (nz); max = nz[0]*nz[0]; @@ -870,11 +903,10 @@ static void parabola_fit_init (ParabolaFit & p, XDim3 & o, XDim3 & m) p.t[1][0] = ny[0]; p.t[1][1] = ny[1]; p.t[1][2] = ny[2]; p.t[2][0] = nz[0]; p.t[2][1] = nz[1]; p.t[2][2] = nz[2]; -# if PARABOLA_SIMPLER - int nn=3; -# else - int nn=6; +# if !PARABOLA_SIMPLER + nn=6; # endif +#endif /* 3D */ p.M = new Real*[nn]; for (int i = 0; i < nn; ++i) { p.M[i] = new Real[nn](); From 5c37b099e47c91e579839bbc0f9a964a4f4b2bdf Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Thu, 19 Sep 2024 23:48:18 -0700 Subject: [PATCH 17/29] update 2D implementation --- src/incflo_compute_forces.cpp | 617 ++++++++-------- src/vof/VolumeOfFluid.cpp | 1258 +++++++++++++++++---------------- test_2d/inputs.droplet | 10 +- 3 files changed, 951 insertions(+), 934 deletions(-) diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 70fb219b2..125563b7c 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -148,256 +148,262 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } -/////////////////////////////////////////////////////////////////////////// - // add surface tension - // surface tension = sigma*kappa*grad(VOF)/rho - // sigma: surface tension coefficient - // kappa: curvature of the interface - // grad(VOF): gradient of VOF field variable - // rho: density - - //fixme: we just consider the surface tension for first tracer +/////////////////////////////////////////////////////////////////////////// + // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + + //fixme: we just consider the surface tension for first tracer if (m_vof_advect_tracer && m_sigma[0]!=0.){ - - VolumeOfFluid* vof_p = get_volume_of_fluid (); - - //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and - // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. - //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. - // the node-centered SF is finally averaged to cell center. - //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). - //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - - int choice = 3; - - - const auto& ba = density.boxArray(); + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); const auto& dm = density.DistributionMap(); const auto& fact = density.Factory(); Array face_val{AMREX_D_DECL( - MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), dm, 1, 0, MFInfo(), fact))}; - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); if (choice==1) { - // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. - // The cell-centered force is then obtained by averaging the face-centered value. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM( - Box const& xbx = surroundingNodes(bx,0);, - Box const& ybx = surroundingNodes(bx,1);, - Box const& zbx = surroundingNodes(bx,2);); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - AMREX_D_TERM( + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - // immediately calculate the cell-centered surface tension force using the face-centered value - // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., - // xbx, ybx, zbx) for cell faces in the beginning. - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - }); - } - } + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } else if (choice ==2){ // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. // The face-centered values are then averaged to the cell node. - // Finally, the nodal values are averaged to the cell center. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then - // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the - // repeated calculation of face-centered values at cell faces which are shared by two tiles. - AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, - Box const& ybx = mfi.nodaltilebox(1);, - Box const& zbx = mfi.nodaltilebox(2);); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - - AMREX_D_TERM( + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + Box const& ybx = mfi.nodaltilebox(1);, + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kap = vof_p->kappa[lev].const_array(mfi); + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - } + ) // end AMREX_D_TERM + + } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - AMREX_D_TERM( - Box const& xvbx = surroundingNodes(vbx,0);, - Box const& yvbx = surroundingNodes(vbx,1);, - Box const& zvbx = surroundingNodes(vbx,2);); - AMREX_D_TERM( - Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - Array4 const& nv = node_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - nv(i,j,k,dim)=0.; - int nt=0; - for (int detj = 0; detj < 2; ++detj) + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in{i, j, k}; - in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; - if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); - nt++; - } -#if AMREX_SPACEDIM == 3 - else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); - nt++; - } -#endif - } - if(nt>0) nv(i,j,k,dim)/= Real(nt); - } - }); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } +#if AMREX_SPACEDIM == 3 + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } +#endif + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ +#if AMREX_SPACEDIM==2 /* 2D */ + vel_f(i,j,k,dim) -= Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); + forarr(i,j,k,dim) =-Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); +#else /* 3D */ vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) @@ -406,115 +412,124 @@ void incflo::compute_vel_forces_on_level (int lev, + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); - - } - }); - } - } - else if (choice ==3){ - MultiFab center_val(ba,dm,2,0,MFInfo(), fact); +#endif + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - /* if(i==8&&j==8&&k==8){ - Print()<<"zbx "<<"low "< -2; --detk) - for (int detj = 0; detj > -2; --detj) + { + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) +#endif + for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //if (vbx.contains(in[0],in[1],in[2])){ - // averaging VOF to nodes - nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); - nt++; - //averaging kappa to nodes - if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ - nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); - nkap++; - } - //averaging density to nodes - nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); - if(nkap>0) - nv(i,j,k,0)/= Real(nkap); - else - nv(i,j,k,0)=0.; - nv(i,j,k,1)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 2); - //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); - Array4 const& center = center_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array gradVof{0.}; - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - for (int detj = 0; detj < 2; ++detj) - for (int deti = 0; deti < 2; ++deti){ - Array in0{i, j, k},in1{i, j, k}; - in0[oct[dim][0]]+=deti,in0[oct[dim][1]]+=detj; - in1[oct[dim][0]]+=deti,in1[oct[dim][1]]+=detj; - in1[dim] +=1; - gradVof[dim] +=Real(.25)*(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- - nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; - } - /*Array in0{i, j, k},in1{i, j, k}; - in1[dim] +=1,in0[dim] -=1;; - gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ - } - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + int ng=0; +#if AMREX_SPACEDIM==3 + for (int detj = 0; detj < 2; ++detj) +#endif + for (int deti = 0; deti < 2; ++deti){ + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; +#if AMREX_SPACEDIM==3 + in0[oct[dim][1]]+=detj,in1[oct[dim][1]]+=detj; +#endif + in1[dim] +=1; + gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + ng++; + } + gradVof[dim]/=Real(ng); + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ if(kappa(i,j,k,0)!=VOF_NODATA){ - vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - } + vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - } - }); - - - } - } + forarr(i,j,k,dim) = 0.; + } + } + }); + + + } + } else if(choice==4) { -//cell-centered surface tension force +//cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -523,36 +538,36 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Box const& bx = mfi.tilebox(); Array4 const& vel_f = vel_forces.array(mfi); Array4 const& rho = density.const_array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if(kappa(i,j,k,0)!=VOF_NODATA){ + { + if(kappa(i,j,k,0)!=VOF_NODATA){ Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); - //note: the minus sign is used because of the way curvature is calculated - AMREX_D_TERM( - vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - AMREX_D_TERM( - forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - } + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - }); - } - - } - - - - - }// end if (m_vof_advect_tracer) + forarr(i,j,k,dim) = 0.; + } + }); + } + + } + + + + + }// end if (m_vof_advect_tracer) } diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index efd4d98ae..ff2535ee9 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -58,7 +58,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -66,12 +66,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -93,7 +93,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -123,17 +123,17 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); //fixme - force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); - } + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); + } } static XDim3 edge[12][2] = { @@ -290,12 +290,12 @@ struct Segment{ //vof, tag Array vars; // Constructor to initialize the Segment - Segment(int n, + Segment(int n, #if AMREX_SPACEDIM==2 /* 2D */ - Array const& nodes, + Array const& nodes, #else /* 3D */ Array const& nodes, -#endif +#endif XDim3 m, Real a, Array v, int ns=0) : nnodes(n), mv (m), alpha(a), vars(v) { for (int i = 0; i < n; ++i) @@ -310,12 +310,12 @@ static void add_segment (XDim3 const & center, GpuArray co /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m <<"vof"<<" "< nodecutface; + Array nodecutface; Real x, y, h=dx[0]; - int n=0, nnodecutface; + int n=0, nnodecutface; if (fabs (m.y) > EPS) { y = (alpha - m.x)/m.y; if (y >= 0. && y <= 1.) { @@ -339,18 +339,18 @@ static void add_segment (XDim3 const & center, GpuArray co if (x >= 0. && x <= 1.) { nodecutface[n].x = center.x + h*(x - 0.5); nodecutface[n].y = center.y - h/2.; nodecutface[n++].z = 0.; } - } + } nnodecutface = n; if (n > 2) { /*check if there are duplicated points*/ int i,j; bool ok[n]; for (i=0; i co if (!ok[i]){ if (i!=n-1) for (j=i+1; j nodecutface; @@ -461,8 +461,8 @@ static void add_segment (XDim3 const & center, GpuArray co nt += nnodecutface; segments.emplace_back(nnodecutface, nodecutface, m, alpha, vars, 3); } /* cut face must be divided into 2 quadrilateral/triangular faces */ - -#endif + +#endif } /** @@ -505,7 +505,7 @@ Real line_area (Array &m, Real alpha) a = alpha1 - n.x; if (a > 0.) v -= a*a; - + a = alpha1 - n.y; if (a > 0.) v -= a*a; @@ -522,17 +522,17 @@ Real line_area (Array &m, Real alpha) * @c: a volume fraction. * * Returns: the value @alpha such that the area of a square cell - * lying under the line defined by @m.@x = @alpha is equal to @c. + * lying under the line defined by @m.@x = @alpha is equal to @c. */ Real line_alpha (XDim3 & m, Real c) { Real alpha, m1, m2, v1; - + m1 = fabs (m.x); m2 = fabs (m.y); if (m1 > m2) { v1 = m1; m1 = m2; m2 = v1; } - + v1 = m1/2.; if (c <= v1/m2) alpha = sqrt (2.*c*m1*m2); @@ -610,7 +610,7 @@ void line_center (XDim3 const & m, Real alpha, Real a, XDim3 & p) p.y -= b*b*(alpha + 2.*n.y); p.x -= b*b*b; } - + p.x /= 6.*n.x*n.x*n.y*a; p.y /= 6.*n.x*n.y*n.y*a; @@ -1060,7 +1060,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -1068,12 +1068,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -1086,36 +1086,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -1137,7 +1137,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -1156,32 +1156,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -1194,8 +1194,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -1206,14 +1206,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -1221,26 +1221,26 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); - Real x[2], h[2][2], hd[2]; - for (int nd = 0; nd < 2; nd++) { + Real x[2], h[2][2]={0.}, hd[2]={0.}; + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[nd][0] = neighboring_column (i,j,k, d, hv, 2*oc[d][nd], &x[0]); if (h[nd][0] == VOF_NODATA) break; @@ -1250,7 +1250,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1258,14 +1258,16 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, slope = hd[0]*hd[0] + hd[1]*hd[1]; (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; +#if AMREX_SPACEDIM==3 (&m.x)[oc[d][1]] = - hd[1]; - } - - } +#endif + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1367,13 +1369,13 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1458,25 +1460,25 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1534,9 +1536,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1552,7 +1554,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1581,43 +1583,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1632,11 +1634,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1683,17 +1685,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += c==0?di:c==1?dj:dk - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER || AMREX_SPACEDIM==2 @@ -1701,11 +1703,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1719,146 +1721,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); /*if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1869,11 +1871,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1910,19 +1912,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - //fixme: need to change for BCs + MFInfo(), v_incflo->Factory(lev)); + //fixme: need to change for BCs kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1930,42 +1932,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ - /* if (i==44&&j==35&&k==31){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ + /* if ((i==4||i==11)&&j==9&&k==0){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1973,84 +1975,84 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - - /*if ((i==10&&j==7&&k==6)||(i==8&&j==5&&k==6)){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + { + auto fvol = vof_arr(i,j,k,0); + + /*if ((i==4||i==11)&&j==11&&k==0){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fixme: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + // diffuse curvatures int iter = 0; if (iter >0){ MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); - //fixme: need to change for BCs - temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); while (iter--){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -2058,47 +2060,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - /*if (i==0&&j==0&&k==0){ - int dddd; - Print()<<"------------"< kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -2127,47 +2129,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -2192,27 +2194,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -2222,31 +2224,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, m_total_flux[lev].setVal(0.0); vof_total_flux[lev].setVal(0.0); MultiFab const * U_MF = dir < 1? u_mac[lev]: -#if AMREX_SPACEDIM == 3 +#if AMREX_SPACEDIM == 3 dir >= 2? w_mac[lev]: -#endif - v_mac[lev]; +#endif + v_mac[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2459,20 +2461,20 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, start = (start + 1) % AMREX_SPACEDIM; } -// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle +// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle // of time step (n+1/2). // F^n+1/2 = (1/2*dt)*sigma*kappa*grad(VOF)/rho -// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. -// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// grad(VOF) is also estimated at the face center using the center-difference method for two cells // i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0] -void -VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, - MultiFab& w_mac)) +void +VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, + MultiFab& w_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); - auto const& dx = geom.CellSizeArray(); + auto const& dx = geom.CellSizeArray(); Real sigma = v_incflo->m_sigma[0]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2482,58 +2484,58 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u Box const& bx = mfi.tilebox(); Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); + Box const& zbx = mfi.nodaltilebox(2); Array4 const& rho = ld.density.const_array(mfi); - Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); Array4 const& kap = kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, - Array4 const& vmac = v_mac.array(mfi);, - Array4 const& wmac = w_mac.array(mfi);); + AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, + Array4 const& vmac = v_mac.array(mfi);, + Array4 const& wmac = w_mac.array(mfi);); ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 + umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; }); - - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - }); -#if AMREX_SPACEDIM==3 /* 3D */ - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + }); +#if AMREX_SPACEDIM==3 /* 3D */ + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; }); -#endif - } - +#endif + } + } ////////////////////////////////////////////////////////////////////////////////// /////// @@ -2560,15 +2562,15 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (problo[2]+.45))};*/ Array center1{AMREX_D_DECL((problo[0]+.5), (problo[1]+.75), - (problo[2]+.35))}; + (problo[2]+.35))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; - Real radius = .15; //5.0*dx[0]; + 0.5*(problo[2]+probhi[2]))}; + Real radius = .3; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2579,9 +2581,9 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) center[1]=0.5*(problo[1]+probhi[1]); center[2]=0.5*(problo[1]+probhi[1]); // Build the Cylinder implficit function representing the curved walls - EB2::CylinderIF my_cyl(radius, height, direction, center, true); - radius = 8.0*dx[0]; - EB2::CylinderIF my_cyl_1(radius, height, direction, center, fluid_is_inside); + //EB2::CylinderIF my_cyl(radius, height, direction, center, true); + //radius = 8.0*dx[0]; + //EB2::CylinderIF my_cyl_1(radius, height, direction, center, fluid_is_inside); //box /* Array low{AMREX_D_DECL((problo[0]+10.3*dx[0]), @@ -2619,18 +2621,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } - else + } + else #endif { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2640,18 +2642,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-16.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2661,29 +2663,29 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - - } - infile.close(); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ - if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ + if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2709,14 +2711,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -2764,11 +2766,11 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0, k=0; -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -2788,7 +2790,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("< 0) { // std::ofstream TecplotFile; @@ -2806,30 +2808,30 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); //output variables TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\"" -#if AMREX_SPACEDIM==3 - <<", \"m_z\"" +#if AMREX_SPACEDIM==3 + <<", \"m_z\"" #endif - <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; + <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); - TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_leveldata[lev]; @@ -2919,12 +2921,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-" - <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" + <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); - Array4 const& density_arr = ld.density.const_array(mfi); - Array4 const& force_arr = force[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); int nn=0, k=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z +1; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y +1; ++j) { for (int i = lo.x; i <= hi.x +1; ++i) { TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; @@ -2955,12 +2957,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write presure -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z+1; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y+1; ++j) { for (int i = lo.x; i <= hi.x+1; ++i) { TecplotFile << pa(i,j,k)<<" "; @@ -2971,11 +2973,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - - //write VOF -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + + //write VOF +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tracer(i,j,k,0)<<" "; @@ -2986,12 +2988,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write velocity for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << vel(i,j,k,dim)<<" "; @@ -3002,14 +3004,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write variables of the normal direction of the interface for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << mv(i,j,k,dim)<<" "; @@ -3020,13 +3022,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write alpha of the interface #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << al(i,j,k)<<" "; @@ -3037,12 +3039,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write id of the droplets or bubbles -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tag_arr(i,j,k)<<" "; @@ -3053,14 +3055,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write height function values for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -3069,12 +3071,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << ht_arr(i,j,k,dim)<<" "; @@ -3085,11 +3087,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << kappa_arr(i,j,k)<<" "; @@ -3100,11 +3102,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write density -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << density_arr(i,j,k)<<" "; @@ -3115,13 +3117,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write force vector for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << force_arr(i,j,k,dim)<<" "; @@ -3132,9 +3134,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// - + TecplotFile <<"\n"; } // end MFIter @@ -3309,7 +3311,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto ,ort2=ORTHOGONAL_COMPONENT(ort1);//2nd transverse direction for (int n=0;n<2;n++){ int k0=dim_limit[n][d],gd=k0+(n==0?-1:1); - for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ + for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ #if AMREX_SPACEDIM==2 /*2D*/ Real tag_cell=(d==0?tag_arr(k0,i0,0):tag_arr(i0,k0,0)); if(tag_cell > 0){ @@ -3317,7 +3319,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto if(tag_gcell > 0) touching_regions (tag_cell, tag_gcell, touch); } -#else /*3D */ +#else /*3D */ for(int j0=ijk_min[ort2];j0<=ijk_max[ort2];j0++){ Real tag_cell=(d==0?tag_arr(k0,i0,j0): d==1?tag_arr(j0,k0,i0): @@ -3330,8 +3332,8 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto touching_regions (tag_cell, tag_gcell, touch); } }// end for-loop for searching cells in the boundaries. -#endif - } +#endif + } }// end for-loop for low and high boundary }// end for-loop for AMREX_SPACEDIM } @@ -3436,7 +3438,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3457,7 +3459,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3497,15 +3499,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3526,11 +3528,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3546,13 +3548,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< Date: Thu, 19 Sep 2024 23:50:20 -0700 Subject: [PATCH 18/29] update 2D implementation --- src/incflo_compute_forces.cpp | 614 ++++++++-------- src/vof/VolumeOfFluid.cpp | 1240 ++++++++++++++++----------------- 2 files changed, 927 insertions(+), 927 deletions(-) diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 125563b7c..6b29b02bd 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -148,262 +148,262 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } -/////////////////////////////////////////////////////////////////////////// - // add surface tension - // surface tension = sigma*kappa*grad(VOF)/rho - // sigma: surface tension coefficient - // kappa: curvature of the interface - // grad(VOF): gradient of VOF field variable - // rho: density - - //fixme: we just consider the surface tension for first tracer +/////////////////////////////////////////////////////////////////////////// + // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + + //fixme: we just consider the surface tension for first tracer if (m_vof_advect_tracer && m_sigma[0]!=0.){ - - VolumeOfFluid* vof_p = get_volume_of_fluid (); - - //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and - // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. - //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. - // the node-centered SF is finally averaged to cell center. - //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). - //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - - int choice = 3; - - - const auto& ba = density.boxArray(); + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); const auto& dm = density.DistributionMap(); const auto& fact = density.Factory(); Array face_val{AMREX_D_DECL( - MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), dm, 1, 0, MFInfo(), fact))}; - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); if (choice==1) { - // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. - // The cell-centered force is then obtained by averaging the face-centered value. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM( - Box const& xbx = surroundingNodes(bx,0);, - Box const& ybx = surroundingNodes(bx,1);, - Box const& zbx = surroundingNodes(bx,2);); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - AMREX_D_TERM( + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - // immediately calculate the cell-centered surface tension force using the face-centered value - // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., - // xbx, ybx, zbx) for cell faces in the beginning. - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - }); - } - } + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } else if (choice ==2){ // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. // The face-centered values are then averaged to the cell node. - // Finally, the nodal values are averaged to the cell center. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then - // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the - // repeated calculation of face-centered values at cell faces which are shared by two tiles. - AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, Box const& ybx = mfi.nodaltilebox(1);, - Box const& zbx = mfi.nodaltilebox(2);); - Array4 const& tra = tracer_new.const_array(mfi); + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - - AMREX_D_TERM( + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - } + ) // end AMREX_D_TERM + + } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - AMREX_D_TERM( - Box const& xvbx = surroundingNodes(vbx,0);, - Box const& yvbx = surroundingNodes(vbx,1);, - Box const& zvbx = surroundingNodes(vbx,2);); - AMREX_D_TERM( - Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - Array4 const& nv = node_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - nv(i,j,k,dim)=0.; - int nt=0; - for (int detj = 0; detj < 2; ++detj) + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in{i, j, k}; - in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; - if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); - nt++; - } -#if AMREX_SPACEDIM == 3 - else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); - nt++; - } -#endif - } - if(nt>0) nv(i,j,k,dim)/= Real(nt); - } - }); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } +#if AMREX_SPACEDIM == 3 + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } +#endif + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ #if AMREX_SPACEDIM==2 /* 2D */ vel_f(i,j,k,dim) -= Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); forarr(i,j,k,dim) =-Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); -#else /* 3D */ +#else /* 3D */ vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) @@ -412,124 +412,124 @@ void incflo::compute_vel_forces_on_level (int lev, + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); -#endif - } - }); - } - } - else if (choice ==3){ - MultiFab center_val(ba,dm,2,0,MFInfo(), fact); +#endif + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - /* if(i==8&&j==8&&k==8){ - Print()<<"zbx "<<"low "< -2; --detk) -#endif - for (int detj = 0; detj > -2; --detj) + { + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) +#endif + for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //if (vbx.contains(in[0],in[1],in[2])){ - // averaging VOF to nodes - nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); - nt++; - //averaging kappa to nodes - if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ - nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); - nkap++; - } - //averaging density to nodes - nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); - if(nkap>0) - nv(i,j,k,0)/= Real(nkap); - else - nv(i,j,k,0)=0.; - nv(i,j,k,1)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 2); - //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); - Array4 const& center = center_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array gradVof{0.}; - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - int ng=0; -#if AMREX_SPACEDIM==3 - for (int detj = 0; detj < 2; ++detj) -#endif + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + int ng=0; +#if AMREX_SPACEDIM==3 + for (int detj = 0; detj < 2; ++detj) +#endif for (int deti = 0; deti < 2; ++deti){ - Array in0{i, j, k},in1{i, j, k}; - in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; -#if AMREX_SPACEDIM==3 + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; +#if AMREX_SPACEDIM==3 in0[oct[dim][1]]+=detj,in1[oct[dim][1]]+=detj; -#endif - in1[dim] +=1; - gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- - nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; - ng++; - } - gradVof[dim]/=Real(ng); - /*Array in0{i, j, k},in1{i, j, k}; - in1[dim] +=1,in0[dim] -=1;; - gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ - } - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ +#endif + in1[dim] +=1; + gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + ng++; + } + gradVof[dim]/=Real(ng); + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ if(kappa(i,j,k,0)!=VOF_NODATA){ - vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - } + vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - } - }); - - - } - } + forarr(i,j,k,dim) = 0.; + } + } + }); + + + } + } else if(choice==4) { -//cell-centered surface tension force +//cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -538,36 +538,36 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Box const& bx = mfi.tilebox(); Array4 const& vel_f = vel_forces.array(mfi); Array4 const& rho = density.const_array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if(kappa(i,j,k,0)!=VOF_NODATA){ + { + if(kappa(i,j,k,0)!=VOF_NODATA){ Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); - //note: the minus sign is used because of the way curvature is calculated - AMREX_D_TERM( - vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - AMREX_D_TERM( - forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - } + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - }); - } - - } - - - - - }// end if (m_vof_advect_tracer) + forarr(i,j,k,dim) = 0.; + } + }); + } + + } + + + + + }// end if (m_vof_advect_tracer) } diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index ff2535ee9..5fda51931 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -58,7 +58,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -66,12 +66,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -93,7 +93,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -123,17 +123,17 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); //fixme - force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); - } + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); + } } static XDim3 edge[12][2] = { @@ -290,12 +290,12 @@ struct Segment{ //vof, tag Array vars; // Constructor to initialize the Segment - Segment(int n, + Segment(int n, #if AMREX_SPACEDIM==2 /* 2D */ - Array const& nodes, + Array const& nodes, #else /* 3D */ Array const& nodes, -#endif +#endif XDim3 m, Real a, Array v, int ns=0) : nnodes(n), mv (m), alpha(a), vars(v) { for (int i = 0; i < n; ++i) @@ -310,12 +310,12 @@ static void add_segment (XDim3 const & center, GpuArray co /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m <<"vof"<<" "< nodecutface; + Array nodecutface; Real x, y, h=dx[0]; - int n=0, nnodecutface; + int n=0, nnodecutface; if (fabs (m.y) > EPS) { y = (alpha - m.x)/m.y; if (y >= 0. && y <= 1.) { @@ -339,18 +339,18 @@ static void add_segment (XDim3 const & center, GpuArray co if (x >= 0. && x <= 1.) { nodecutface[n].x = center.x + h*(x - 0.5); nodecutface[n].y = center.y - h/2.; nodecutface[n++].z = 0.; } - } + } nnodecutface = n; if (n > 2) { /*check if there are duplicated points*/ int i,j; bool ok[n]; for (i=0; i co if (!ok[i]){ if (i!=n-1) for (j=i+1; j nodecutface; @@ -461,8 +461,8 @@ static void add_segment (XDim3 const & center, GpuArray co nt += nnodecutface; segments.emplace_back(nnodecutface, nodecutface, m, alpha, vars, 3); } /* cut face must be divided into 2 quadrilateral/triangular faces */ - -#endif + +#endif } /** @@ -505,7 +505,7 @@ Real line_area (Array &m, Real alpha) a = alpha1 - n.x; if (a > 0.) v -= a*a; - + a = alpha1 - n.y; if (a > 0.) v -= a*a; @@ -522,17 +522,17 @@ Real line_area (Array &m, Real alpha) * @c: a volume fraction. * * Returns: the value @alpha such that the area of a square cell - * lying under the line defined by @m.@x = @alpha is equal to @c. + * lying under the line defined by @m.@x = @alpha is equal to @c. */ Real line_alpha (XDim3 & m, Real c) { Real alpha, m1, m2, v1; - + m1 = fabs (m.x); m2 = fabs (m.y); if (m1 > m2) { v1 = m1; m1 = m2; m2 = v1; } - + v1 = m1/2.; if (c <= v1/m2) alpha = sqrt (2.*c*m1*m2); @@ -610,7 +610,7 @@ void line_center (XDim3 const & m, Real alpha, Real a, XDim3 & p) p.y -= b*b*(alpha + 2.*n.y); p.x -= b*b*b; } - + p.x /= 6.*n.x*n.x*n.y*a; p.y /= 6.*n.x*n.y*n.y*a; @@ -1060,7 +1060,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -1068,12 +1068,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -1086,36 +1086,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -1137,7 +1137,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -1156,32 +1156,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -1194,8 +1194,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -1206,14 +1206,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -1221,23 +1221,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2]={0.}, hd[2]={0.}; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { @@ -1250,7 +1250,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1258,16 +1258,16 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, slope = hd[0]*hd[0] + hd[1]*hd[1]; (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 (&m.x)[oc[d][1]] = - hd[1]; -#endif - } - - } +#endif + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1369,13 +1369,13 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1460,25 +1460,25 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1536,9 +1536,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1554,7 +1554,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1583,43 +1583,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1634,11 +1634,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1685,17 +1685,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER || AMREX_SPACEDIM==2 @@ -1703,11 +1703,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1721,146 +1721,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); /*if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1871,11 +1871,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1912,19 +1912,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - //fixme: need to change for BCs + MFInfo(), v_incflo->Factory(lev)); + //fixme: need to change for BCs kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1932,42 +1932,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if ((i==4||i==11)&&j==9&&k==0){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1975,84 +1975,84 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); + { + auto fvol = vof_arr(i,j,k,0); /*if ((i==4||i==11)&&j==11&&k==0){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fixme: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + // diffuse curvatures int iter = 0; if (iter >0){ MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); - //fixme: need to change for BCs - temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); while (iter--){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -2060,47 +2060,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /*if ((i==4||i==11)&&j==11&&k==0){ - int dddd; - Print()<<"------------"< kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -2129,47 +2129,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -2194,27 +2194,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -2224,31 +2224,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, m_total_flux[lev].setVal(0.0); vof_total_flux[lev].setVal(0.0); MultiFab const * U_MF = dir < 1? u_mac[lev]: -#if AMREX_SPACEDIM == 3 +#if AMREX_SPACEDIM == 3 dir >= 2? w_mac[lev]: -#endif - v_mac[lev]; +#endif + v_mac[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2461,20 +2461,20 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, start = (start + 1) % AMREX_SPACEDIM; } -// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle +// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle // of time step (n+1/2). // F^n+1/2 = (1/2*dt)*sigma*kappa*grad(VOF)/rho -// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. -// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// grad(VOF) is also estimated at the face center using the center-difference method for two cells // i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0] -void -VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, - MultiFab& w_mac)) +void +VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, + MultiFab& w_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); - auto const& dx = geom.CellSizeArray(); + auto const& dx = geom.CellSizeArray(); Real sigma = v_incflo->m_sigma[0]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2484,58 +2484,58 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u Box const& bx = mfi.tilebox(); Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); + Box const& zbx = mfi.nodaltilebox(2); Array4 const& rho = ld.density.const_array(mfi); - Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); Array4 const& kap = kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, - Array4 const& vmac = v_mac.array(mfi);, - Array4 const& wmac = w_mac.array(mfi);); + AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, + Array4 const& vmac = v_mac.array(mfi);, + Array4 const& wmac = w_mac.array(mfi);); ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 + umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; }); - - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - }); -#if AMREX_SPACEDIM==3 /* 3D */ - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + vmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j-1,k))*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + }); +#if AMREX_SPACEDIM==3 /* 3D */ + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + wmac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i,j,k-1))*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; }); -#endif - } - +#endif + } + } ////////////////////////////////////////////////////////////////////////////////// /////// @@ -2562,15 +2562,15 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (problo[2]+.45))};*/ Array center1{AMREX_D_DECL((problo[0]+.5), (problo[1]+.75), - (problo[2]+.35))}; + (problo[2]+.35))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; Real radius = .3; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2621,18 +2621,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } - else + } + else #endif { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2642,18 +2642,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-16.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2663,29 +2663,29 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - - } - infile.close(); + + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ - if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& + vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ + if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2711,14 +2711,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + } @@ -2766,11 +2766,11 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0, k=0; -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -2790,7 +2790,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("< 0) { // std::ofstream TecplotFile; @@ -2808,30 +2808,30 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); //output variables TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\"" -#if AMREX_SPACEDIM==3 - <<", \"m_z\"" +#if AMREX_SPACEDIM==3 + <<", \"m_z\"" #endif - <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; + <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); - TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_leveldata[lev]; @@ -2921,12 +2921,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-" - <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" + <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); - Array4 const& density_arr = ld.density.const_array(mfi); - Array4 const& force_arr = force[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); int nn=0, k=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z +1; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y +1; ++j) { for (int i = lo.x; i <= hi.x +1; ++i) { TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; @@ -2957,12 +2957,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write presure -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z+1; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y+1; ++j) { for (int i = lo.x; i <= hi.x+1; ++i) { TecplotFile << pa(i,j,k)<<" "; @@ -2973,11 +2973,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - - //write VOF -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + + //write VOF +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tracer(i,j,k,0)<<" "; @@ -2988,12 +2988,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write velocity for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << vel(i,j,k,dim)<<" "; @@ -3004,14 +3004,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write variables of the normal direction of the interface for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << mv(i,j,k,dim)<<" "; @@ -3022,13 +3022,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write alpha of the interface #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << al(i,j,k)<<" "; @@ -3039,12 +3039,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write id of the droplets or bubbles -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tag_arr(i,j,k)<<" "; @@ -3055,14 +3055,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write height function values for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -3071,12 +3071,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << ht_arr(i,j,k,dim)<<" "; @@ -3087,11 +3087,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << kappa_arr(i,j,k)<<" "; @@ -3102,11 +3102,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write density -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << density_arr(i,j,k)<<" "; @@ -3117,13 +3117,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write force vector for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << force_arr(i,j,k,dim)<<" "; @@ -3134,9 +3134,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// - + TecplotFile <<"\n"; } // end MFIter @@ -3311,7 +3311,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto ,ort2=ORTHOGONAL_COMPONENT(ort1);//2nd transverse direction for (int n=0;n<2;n++){ int k0=dim_limit[n][d],gd=k0+(n==0?-1:1); - for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ + for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ #if AMREX_SPACEDIM==2 /*2D*/ Real tag_cell=(d==0?tag_arr(k0,i0,0):tag_arr(i0,k0,0)); if(tag_cell > 0){ @@ -3319,7 +3319,7 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto if(tag_gcell > 0) touching_regions (tag_cell, tag_gcell, touch); } -#else /*3D */ +#else /*3D */ for(int j0=ijk_min[ort2];j0<=ijk_max[ort2];j0++){ Real tag_cell=(d==0?tag_arr(k0,i0,j0): d==1?tag_arr(j0,k0,i0): @@ -3332,8 +3332,8 @@ int domain_tag_droplets (int finest_level, Vector const &grids, Vecto touching_regions (tag_cell, tag_gcell, touch); } }// end for-loop for searching cells in the boundaries. -#endif - } +#endif + } }// end for-loop for low and high boundary }// end for-loop for AMREX_SPACEDIM } @@ -3438,7 +3438,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3459,7 +3459,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3499,15 +3499,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3528,11 +3528,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3548,13 +3548,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< Date: Tue, 24 Sep 2024 13:22:47 -0700 Subject: [PATCH 19/29] update 2D implementation --- ...ncflo_compute_MAC_projected_velocities.cpp | 4 +- src/vof/VolumeOfFluid.cpp | 38 +++++++++++-------- test_2d/inputs.droplet | 30 +++++++-------- test_3d/inputs.droplet | 2 +- 4 files changed, 41 insertions(+), 33 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index 981b2fe54..f6ea74f94 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -165,7 +165,7 @@ incflo::compute_MAC_projected_velocities ( // Predict normal velocity to faces -- note that the {u_mac, v_mac, w_mac} // returned from this call are on face CENTROIDS bool allow_inflow_on_outflow = false; - /*HydroUtils::ExtrapVelToFaces(*vel[lev], *vel_forces[lev], + HydroUtils::ExtrapVelToFaces(*vel[lev], *vel_forces[lev], AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), get_velocity_bcrec(), get_velocity_bcrec_device_ptr(), geom[lev], l_dt, @@ -175,7 +175,7 @@ incflo::compute_MAC_projected_velocities ( #endif m_godunov_ppm, m_godunov_use_forces_in_trans, l_advection_type, PPM::default_limiter, - allow_inflow_on_outflow, BC_MF.get());*/ + allow_inflow_on_outflow, BC_MF.get()); //add surface tension //if(m_vof_advect_tracer) diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 5fda51931..cb21de26d 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -2566,7 +2566,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), 0.5*(problo[2]+probhi[2]))}; - Real radius = .3; //5.0*dx[0]; + Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); @@ -2602,7 +2602,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); auto my_box1= EB2::rotate(my_box, .3, 0); auto my_box2= EB2::rotate(my_box1, .2, 2); - auto two =EB2::makeIntersection(my_sphere, my_sphere1); + auto two =EB2::makeIntersection(my_sphere, my_box); //auto two = EB2::makeComplement(EB2::makeUnion(my_cyl_1, my_cyl)); // Generate GeometryShop @@ -2657,15 +2657,14 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Read the file line by line std::string line; while (std::getline(infile, line)) { - std::istringstream iss(line); - int i, j, k; - Real value; - if (!(iss >> i >> j >> k >> value)) { - std::cerr << "Error reading line: " << line << std::endl; - continue; - } + std::istringstream iss(line); + int i, j, k; + Real value; + if (!(iss >> i >> j >> k >> value)) { + std::cerr << "Error reading line: " << line << std::endl; + continue; + } vout.emplace_back(value,i,j,k); - } infile.close(); #ifdef AMRE_USE_OMP @@ -2678,12 +2677,21 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) auto const& tracer = a_tracer.array(mfi); for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1]&& - vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]){*/ - if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ + if(vout[n].i>=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1] +#if AMREX_SPACEDIM==2 + &&vout[n].k==7) +#else + &&vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]) +#endif + { + //if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ +#if AMREX_SPACEDIM==2 + tracer(vout[n].i,vout[n].j,0,0)=vout[n].vof; +#else tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; - } +#endif + } /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { diff --git a/test_2d/inputs.droplet b/test_2d/inputs.droplet index f6256b710..e7bd2b09c 100644 --- a/test_2d/inputs.droplet +++ b/test_2d/inputs.droplet @@ -1,8 +1,8 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 8.1 # Max (simulated) time to evolve -max_step = 20 # Max number of time steps +stop_time = 8 # Max (simulated) time to evolve +max_step = 10000 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -14,7 +14,7 @@ incflo.cfl = 0.1 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 2 # Steps between plot files +amr.plot_int = 5 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -29,12 +29,12 @@ incflo.mu = 1.e-3 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 incflo.mu_s = 1.0 incflo.ro_s = 1000.0 -incflo.sigma = 0. +incflo.sigma = 10. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 16 16 # Grid cells at coarsest AMRlevel +amr.n_cell = 32 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy amr.max_grid_size = 64 64 @@ -43,8 +43,8 @@ amr.max_grid_size = 64 64 #.......................................# geometry.prob_lo = 0. 0. # Lo corner coordinates geometry.prob_hi = 1. 1. # Hi corner coordinates -geometry.is_periodic = 1 1 # Periodicity x y z (0/1) - +geometry.is_periodic = 0 0 # Periodicity x y z (0/1) +geometry.coord_sys = 1 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INITIAL CONDITIONS # @@ -54,14 +54,14 @@ incflo.ic_u = 0. incflo.ic_v = 0. incflo.ic_w = 0. # Boundary conditions -#ylo.type = "po" -#ylo.pressure = 0. -#yhi.type = "po" -#yhi.pressure = 0. -#xlo.type = "po" -#xlo.pressure = 0. -#xhi.type = "po" -#xhi.pressure = 0.0 +ylo.type = "po" +ylo.pressure = 0. +yhi.type = "po" +yhi.pressure = 0. +xlo.type = "po" +xlo.pressure = 0. +xhi.type = "po" +xhi.pressure = 0.0 #zlo.type = "po" #zlo.pressure = 0. #zhi.type = "po" diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index f738987a1..8056d8488 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -2,7 +2,7 @@ # SIMULATION STOP # #.......................................# stop_time = 6 # Max (simulated) time to evolve -max_step = 2000 # Max number of time steps +max_step = 20000 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# From c8e1cd3b32a8d6173109f3fe0c97e04ffebbd5f8 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Tue, 1 Oct 2024 16:54:07 -0700 Subject: [PATCH 20/29] use cc project and face-centered SF --- ...ncflo_compute_MAC_projected_velocities.cpp | 5 +- src/incflo.H | 11 +- src/incflo.cpp | 3 +- src/incflo_apply_predictor.cpp | 3 +- src/incflo_compute_forces.cpp | 14 +- src/prob/prob_init_fluid.cpp | 7 + src/projection/incflo_apply_cc_projection.cpp | 66 +- src/vof/VolumeOfFluid.H | 5 +- src/vof/VolumeOfFluid.cpp | 73 +- src/vof/incflo_vof.cpp | 10 +- test_3d/inputs.droplet | 11 +- test_3d/vof_value-128.dat | 76656 ++++++++++++++++ test_3d/vof_value-16.dat | 280 + test_3d/vof_value-32.dat | 1472 + test_3d/vof_value-64.dat | 10336 +++ 15 files changed, 88898 insertions(+), 54 deletions(-) create mode 100644 test_3d/vof_value-128.dat create mode 100644 test_3d/vof_value-16.dat create mode 100644 test_3d/vof_value-32.dat create mode 100644 test_3d/vof_value-64.dat diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index f6ea74f94..0ba9aae1a 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -178,8 +178,9 @@ incflo::compute_MAC_projected_velocities ( allow_inflow_on_outflow, BC_MF.get()); //add surface tension - //if(m_vof_advect_tracer) - // get_volume_of_fluid ()->velocity_face_source(lev,l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev])); + if(m_vof_advect_tracer && m_use_cc_proj) + get_volume_of_fluid ()->velocity_face_source(lev,0.5*l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), + AMREX_D_DECL(nullptr, nullptr, nullptr)); if(0){ diff --git a/src/incflo.H b/src/incflo.H index adb4f6790..a1d2b1f12 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -103,14 +103,16 @@ public: amrex::Vector const& density, amrex::Vector const& tracer_old, amrex::Vector const& tracer_new, - bool include_pressure_gradient = true); + bool include_pressure_gradient = true, + bool include_SF = false); void compute_vel_forces_on_level ( int lev, amrex::MultiFab& vel_forces, const amrex::MultiFab& velocity, const amrex::MultiFab& density, const amrex::MultiFab& tracer_old, const amrex::MultiFab& tracer_new, - bool include_pressure_gradient = true); + bool include_pressure_gradient = true, + bool include_SF = false); /////////////////////////////////////////////////////////////////////////// @@ -225,8 +227,8 @@ public: AMREX_D_DECL(amrex::Vector const& u_mac, amrex::Vector const& v_mac, amrex::Vector const& w_mac)); - void update_vof_density (amrex::Vector const& density, - amrex::Vector const& tracer); + void update_vof_density (int lev, amrex::Vector const& density, + amrex::Vector const& tracer); [[nodiscard]] amrex::Array @@ -662,6 +664,7 @@ private: // cell-centered pressure gradient amrex::MultiFab gp; + amrex::MultiFab gp_mac; amrex::MultiFab conv_velocity; amrex::MultiFab conv_velocity_o; diff --git a/src/incflo.cpp b/src/incflo.cpp index f90fd5fb0..275b81569 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -82,7 +82,8 @@ void incflo::InitData () } InitialIterations(); - +//get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); +//amrex::Abort("finish initial projection"); // Set m_nstep to 0 before entering time loop m_nstep = 0; diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index 8eed0dfd8..fb7115f91 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -128,7 +128,8 @@ void incflo::ApplyPredictor (bool incremental_projection) //when VOF method is used to advect the tracer, density and viscosity of each cell will // depend the VOF field value of the cell. if (m_vof_advect_tracer) - update_vof_density (get_density_old(),get_tracer_old()); + for (int lev = 0; lev <= finest_level; ++lev) + update_vof_density (lev, get_density_old(),get_tracer_old()); // ************************************************************************************* // Compute explicit viscous term diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 6b29b02bd..ec13e68a8 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -40,11 +40,12 @@ void incflo::compute_vel_forces (Vector const& vel_forces, Vector const& density, Vector const& tracer_old, Vector const& tracer_new, - bool include_pressure_gradient) + bool include_pressure_gradient, + bool include_SF) { for (int lev = 0; lev <= finest_level; ++lev) compute_vel_forces_on_level (lev, *vel_forces[lev], *velocity[lev], *density[lev], - *tracer_old[lev], *tracer_new[lev], include_pressure_gradient); + *tracer_old[lev], *tracer_new[lev], include_pressure_gradient, include_SF); } void incflo::compute_vel_forces_on_level (int lev, @@ -53,7 +54,8 @@ void incflo::compute_vel_forces_on_level (int lev, const MultiFab& density, const MultiFab& tracer_old, const MultiFab& tracer_new, - bool include_pressure_gradient) + bool include_pressure_gradient, + bool include_SF) { GpuArray l_gravity{m_gravity[0],m_gravity[1],m_gravity[2]}; GpuArray l_gp0{m_gp0[0], m_gp0[1], m_gp0[2]}; @@ -157,7 +159,7 @@ void incflo::compute_vel_forces_on_level (int lev, // rho: density //fixme: we just consider the surface tension for first tracer - if (m_vof_advect_tracer && m_sigma[0]!=0.){ + if (m_vof_advect_tracer && m_sigma[0]!=0.&&!m_use_cc_proj&&include_SF){ VolumeOfFluid* vof_p = get_volume_of_fluid (); @@ -528,8 +530,8 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; } } - else if(choice==4) { -//cell-centered surface tension force + else if (choice ==4) { + //cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 4014f9b21..6ea3c38b1 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -207,6 +207,13 @@ void incflo::prob_init_fluid (int lev) if (1109 == m_probtype) { get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); + ld.tracer_o.FillBoundary(geom[lev].periodicity()); + if (m_vof_advect_tracer){ + update_vof_density (lev, get_density_new(),get_tracer_new()); + MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); + fillpatch_density(lev, m_t_new[lev], ld.density_o, 3); + } + } } diff --git a/src/projection/incflo_apply_cc_projection.cpp b/src/projection/incflo_apply_cc_projection.cpp index 46da30581..ac3cfa336 100644 --- a/src/projection/incflo_apply_cc_projection.cpp +++ b/src/projection/incflo_apply_cc_projection.cpp @@ -297,7 +297,7 @@ void incflo::ApplyCCProjection (Vector density, LPInfo lp_info; lp_info.setMaxCoarseningLevel(m_mac_mg_max_coarsening_level); #ifndef AMREX_USE_EB - if (m_constant_density) { + if (m_constant_density&&!m_vof_advect_tracer) { Vector ba; Vector dm; for (auto const& ir : inv_rho) { @@ -340,13 +340,14 @@ void incflo::ApplyCCProjection (Vector density, mac_vec[lev][2] = w_mac[lev];); } + Vector sfu_mac(finest_level+1), sfv_mac(finest_level+1), sfw_mac(finest_level+1); // Compute velocity on faces for (int lev = 0; lev <= finest_level; ++lev) { // Predict normal velocity to faces -- note that the {u_mac, v_mac, w_mac} // returned from this call are on face CENTROIDS vel[lev]->FillBoundary(geom[lev].periodicity()); -#if 1 +#if 0 MOL::ExtrapVelToFaces(*vel[lev], AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), geom[lev], @@ -355,10 +356,27 @@ void incflo::ApplyCCProjection (Vector density, #else average_ccvel_to_mac( mac_vec[lev], *vel[lev]); #endif + + + //add surface tension + AMREX_D_TERM(sfu_mac[lev].define(u_mac[lev]->boxArray(), dmap[lev], 1, u_mac[lev]->nGrow(), MFInfo(), Factory(lev));, + sfv_mac[lev].define(v_mac[lev]->boxArray(), dmap[lev], 1, v_mac[lev]->nGrow(), MFInfo(), Factory(lev));, + sfw_mac[lev].define(w_mac[lev]->boxArray(), dmap[lev], 1, w_mac[lev]->nGrow(), MFInfo(), Factory(lev));); + + AMREX_D_TERM(sfu_mac[lev].setVal(0.0);, + sfv_mac[lev].setVal(0.0);, + sfw_mac[lev].setVal(0.0);); + + + if(m_vof_advect_tracer) + get_volume_of_fluid ()->velocity_face_source(lev, scaling_factor, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), + AMREX_D_DECL(&sfu_mac[lev], &sfv_mac[lev], &sfw_mac[lev])); + } macproj->setUMAC(mac_vec); + if (m_verbose > 2) amrex::Print() << "CC Projection:\n"; // // Perform MAC projection: - del dot (dt/rho) grad phi = div(U) @@ -391,12 +409,22 @@ void incflo::ApplyCCProjection (Vector density, for (int lev=0; lev <= finest_level; ++lev) { -#ifdef AMREX_USE_EB - amrex::Abort("Haven't written mac_to_ccvel for EB"); -#else +//#ifdef AMREX_USE_EB +// amrex::Abort("Haven't written mac_to_ccvel for EB"); +//#else average_mac_to_ccvel(GetArrOfPtrs(m_fluxes[lev]),*cc_gphi[lev]); -#endif +//#endif } + // computer the cell-centered surface tension term (see note in VolumeOfFluid:: velocity_face_source) + VolumeOfFluid* vof_p = get_volume_of_fluid (); + if(m_vof_advect_tracer) + for (int lev=0; lev <= finest_level; ++lev) + { + AMREX_D_TERM(Copy(m_fluxes[lev][0],sfu_mac[lev], 0, 0, 1, 0);, + Copy(m_fluxes[lev][1],sfv_mac[lev], 0, 0, 1, 0);, + Copy(m_fluxes[lev][2],sfw_mac[lev], 0, 0, 1, 0);); + average_mac_to_ccvel(GetArrOfPtrs(m_fluxes[lev]),vof_p->force[lev]); + } for(int lev = 0; lev <= finest_level; lev++) { @@ -413,21 +441,28 @@ void incflo::ApplyCCProjection (Vector density, Array4 const& u = ld.velocity.array(mfi); Array4 const& rho = density[lev]->const_array(mfi); + Array4 const& gsf = vof_p->force[lev].const_array(mfi); Real r0 = m_ro_0; - amrex::ParallelFor(tbx, [u,gphi,p_cc,phi,incremental] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + amrex::ParallelFor(tbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { AMREX_D_TERM(u(i,j,k,0) += gphi(i,j,k,0);, u(i,j,k,1) += gphi(i,j,k,1);, u(i,j,k,2) += gphi(i,j,k,2);); + //we need to add the surface-tension effect to the cell-centered velocity + if(m_vof_advect_tracer){ + AMREX_D_TERM(u(i,j,k,0) -= gsf(i,j,k,0)*scaling_factor;, + u(i,j,k,1) -= gsf(i,j,k,1)*scaling_factor;, + u(i,j,k,2) -= gsf(i,j,k,2)*scaling_factor;); + } if (incremental) p_cc (i,j,k) += phi(i,j,k); else p_cc (i,j,k) = phi(i,j,k); }); - if (incremental && m_constant_density) { + if (incremental && m_constant_density&&!m_vof_advect_tracer) { amrex::ParallelFor(tbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { AMREX_D_TERM(gp_cc(i,j,k,0) -= gphi(i,j,k,0) * r0 / scaling_factor;, @@ -435,26 +470,32 @@ void incflo::ApplyCCProjection (Vector density, gp_cc(i,j,k,2) -= gphi(i,j,k,2) * r0 / scaling_factor;); }); - } else if (incremental && !m_constant_density) { + } else if (incremental && (!m_constant_density||m_vof_advect_tracer)) { amrex::ParallelFor(tbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { AMREX_D_TERM(gp_cc(i,j,k,0) -= gphi(i,j,k,0) * rho(i,j,k) / scaling_factor;, gp_cc(i,j,k,1) -= gphi(i,j,k,1) * rho(i,j,k) / scaling_factor;, gp_cc(i,j,k,2) -= gphi(i,j,k,2) * rho(i,j,k) / scaling_factor;); }); - } else if (!incremental && m_constant_density) { + } else if (!incremental && m_constant_density&&!m_vof_advect_tracer) { amrex::ParallelFor(tbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { AMREX_D_TERM(gp_cc(i,j,k,0) = -gphi(i,j,k,0) * r0 / scaling_factor;, gp_cc(i,j,k,1) = -gphi(i,j,k,1) * r0 / scaling_factor;, gp_cc(i,j,k,2) = -gphi(i,j,k,2) * r0 / scaling_factor;); }); - } else if (!incremental && !m_constant_density) { + } else if (!incremental && (!m_constant_density||m_vof_advect_tracer)) { amrex::ParallelFor(tbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { AMREX_D_TERM(gp_cc(i,j,k,0) = -gphi(i,j,k,0) * rho(i,j,k) / scaling_factor;, gp_cc(i,j,k,1) = -gphi(i,j,k,1) * rho(i,j,k) / scaling_factor;, gp_cc(i,j,k,2) = -gphi(i,j,k,2) * rho(i,j,k) / scaling_factor;); + if(m_vof_advect_tracer){ + AMREX_D_TERM(gp_cc(i,j,k,0) += gsf(i,j,k,0) * rho(i,j,k);, + gp_cc(i,j,k,1) += gsf(i,j,k,1) * rho(i,j,k);, + gp_cc(i,j,k,2) += gsf(i,j,k,2) * rho(i,j,k);); + } + }); } } @@ -462,6 +503,9 @@ void incflo::ApplyCCProjection (Vector density, ld.p_cc.FillBoundary(geom[lev].periodicity()); } +//get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); +//amrex::Abort("finish initial projection"); + // *************************************************************************************** // END OF MAC STUFF // *************************************************************************************** diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index 47643df75..fc67c4d17 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -20,9 +20,12 @@ public: void write_tecplot_surface(amrex::Real time, int nstep); void WriteTecPlotFile (amrex::Real time, int nstep); void output_droplet (amrex::Real time, int nstep); + int domain_tag_droplets (int finest_level, amrex::Vector const &grids, amrex::Vector const& geom, + amrex::Vector const& vof,amrex::Vector const& tag); void apply_velocity_field(amrex::Real time, int nstep); void velocity_face_source(int lev,amrex::Real dt, AMREX_D_DECL(amrex::MultiFab& u_mac, amrex::MultiFab& v_mac, - amrex::MultiFab& w_mac)); + amrex::MultiFab& w_mac), + AMREX_D_DECL(amrex::MultiFab* sfu_mac, amrex::MultiFab* sfv_mac, amrex::MultiFab* sfw_mac)); // normal vector of interface amrex::Vector normal; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index cb21de26d..bfd79ab7c 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -2461,16 +2461,21 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, start = (start + 1) % AMREX_SPACEDIM; } -// add surface tension force (F) to the MAC velocity at the center of cell faces at the middle -// of time step (n+1/2). -// F^n+1/2 = (1/2*dt)*sigma*kappa*grad(VOF)/rho +// add surface tension force (F) to the MAC velocity at the center of cell faces. +// F = dt*sigma*kappa*grad(VOF)/rho +// Umac <- Uma-F, note minus sign before F because of the way which curvature being calculated. // kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. // grad(VOF) is also estimated at the face center using the center-difference method for two cells -// i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0] +// i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0]. +// u_mac/v_mac/w_mac stores the face-centered velocity (MAC). +// +// gu_mac/gv_mac/gw_mac stores the face-centered value of F/dt (i.e., sigma*kappa*grad(VOF)/rho) +// gu_mac/gv_mac/gw_mac will be averaged to the cell center when correcting the cell-centered velocity +// after final cell-centered projection. void -VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, - MultiFab& w_mac)) +VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, MultiFab& w_mac), + AMREX_D_DECL(MultiFab* gu_mac, MultiFab* gv_mac, MultiFab* gw_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); @@ -2491,6 +2496,10 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, Array4 const& vmac = v_mac.array(mfi);, Array4 const& wmac = w_mac.array(mfi);); + AMREX_D_TERM(Array4 gumac;, Array4 gvmac;,Array4 gwmac;); + AMREX_D_TERM(if(gu_mac) gumac = gu_mac->array(mfi);, + if(gv_mac) gvmac = gv_mac->array(mfi);, + if(gw_mac) gwmac = gw_mac->array(mfi);); ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; @@ -2503,7 +2512,12 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u else kaf=0.; // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - umac(i,j,k) += dt*kaf/(rho(i,j,k)+rho(i-1,j,k))*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + //Print()< radii{AMREX_D_DECL(.2, .3, .25)}; + EB2::EllipsoidIF my_ellipsoid(radii, center, fluid_is_inside); + // Initialise cylinder parameters int direction = 2; Real height = 1.6; @@ -2602,12 +2624,13 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); auto my_box1= EB2::rotate(my_box, .3, 0); auto my_box2= EB2::rotate(my_box1, .2, 2); - auto two =EB2::makeIntersection(my_sphere, my_box); + auto two = EB2::makeIntersection(my_sphere, my_box); //auto two = EB2::makeComplement(EB2::makeUnion(my_cyl_1, my_cyl)); // Generate GeometryShop //auto gshop = EB2::makeShop(two); - auto gshop = EB2::makeShop(my_box); + //auto gshop = EB2::makeShop(my_box); + auto gshop = EB2::makeShop(my_box); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2646,7 +2669,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) }; Vector vout; // Define the file name - std::string filename = "vof_value-16.dat"; + std::string filename = "vof_value-32.dat"; // Open the file std::ifstream infile(filename); @@ -2724,9 +2747,10 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. - v_incflo->p_volume_of_fluid->tracer_vof_update(lev, a_tracer, height[lev]); - v_incflo->p_volume_of_fluid->curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - + tracer_vof_update(lev, a_tracer, height[lev]); + curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + int n_tag=domain_tag_droplets (finest_level, v_incflo->grids,v_incflo->geom, + v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); } @@ -2901,6 +2925,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) "\n"; for (int lev = 0; lev <= finest_level; ++lev) { + bool m_use_cc_proj=v_incflo->m_use_cc_proj; auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); Box const& domain = geom.Domain(); @@ -2933,12 +2958,15 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); - TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(AMREX_SPACEDIM+2)<<"-" + TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(m_use_cc_proj?AMREX_SPACEDIM+1:AMREX_SPACEDIM+2)<<"-" <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& pa = ld.p_nd.const_array(mfi); + + Array4 const& pa_nd = ld.p_nd.const_array(mfi); + Array4 const& pa_cc = ld.p_cc.const_array(mfi); + Array4 const& pa_mac = ld.mac_phi.const_array(mfi); Array4 const& tracer = ld.tracer.const_array(mfi); Array4 const& vel = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); @@ -2968,12 +2996,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) }// //write presure + int nt=m_use_cc_proj?0:1; #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z+1; ++k) + for (k = lo.z; k <= hi.z+nt; ++k) #endif - for (int j = lo.y; j <= hi.y+1; ++j) { - for (int i = lo.x; i <= hi.x+1; ++i) { - TecplotFile << pa(i,j,k)<<" "; + for (int j = lo.y; j <= hi.y+nt; ++j) { + for (int i = lo.x; i <= hi.x+nt; ++i) { + TecplotFile << (m_use_cc_proj?pa_cc(i,j,k):pa_nd(i,j,k))<<" "; ++nn; if (nn > 100) { TecplotFile <<"\n"; @@ -3206,7 +3235,7 @@ static void reduce_touching_regions (void * in, void * inout, int * len, MPI_Dat // Returns: the number of droplets. //////////////////////////////////////////////////////////////////////////////// -int domain_tag_droplets (int finest_level, Vector const &grids, Vector const& geom, +int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector const &grids, Vector const& geom, Vector const& vof,Vector const& tag) { diff --git a/src/vof/incflo_vof.cpp b/src/vof/incflo_vof.cpp index 3b1ec3cad..73f7abadc 100644 --- a/src/vof/incflo_vof.cpp +++ b/src/vof/incflo_vof.cpp @@ -14,9 +14,9 @@ incflo::tracer_vof_advection (Vector const& tracer, } void -incflo::update_vof_density (Vector const& density,Vector const& tracer) +incflo::update_vof_density (int lev, Vector const& density,Vector const& tracer) { - for (int lev = 0; lev <= finest_level; ++lev) { +// for (int lev = 0; lev <= finest_level; ++lev) { #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -27,7 +27,9 @@ incflo::update_vof_density (Vector const& density,Vector c Array4 const& tracer_arr = tracer[lev]->const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { //fixme: we use the property of the tracer 0. - density_arr(i,j,k) = m_ro_0*(1.-tracer_arr(i,j,k,0))+m_ro_s[0]*tracer_arr(i,j,k,0); + // Print()<FillBoundary(geom[lev].periodicity()); } - } +// } } diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 8056d8488..7be85588f 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -2,7 +2,7 @@ # SIMULATION STOP # #.......................................# stop_time = 6 # Max (simulated) time to evolve -max_step = 20000 # Max number of time steps +max_step = 10000 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -14,7 +14,7 @@ incflo.cfl = 0.2 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 30 # Steps between plot files +amr.plot_int = 20 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -79,5 +79,12 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs #.......................................# incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 +incflo.use_cc_proj = 1 +incflo.advect_momentum = 0 +incflo.godunov_include_diff_in_forcing = 1 +incflo.use_mac_phi_in_godunov = 0 +incflo.godunov_use_forces_in_trans = 0 +incflo.initial_iterations =0 +incflo.do_initial_proj = 0 amrex.fpe_trap_overflow=1 amrex.fpe_trap_zero=1 diff --git a/test_3d/vof_value-128.dat b/test_3d/vof_value-128.dat new file mode 100644 index 000000000..55210c217 --- /dev/null +++ b/test_3d/vof_value-128.dat @@ -0,0 +1,76656 @@ + 38 58 61 0.000200097 + 38 58 62 0.0096893 + 38 58 63 0.0245266 + 38 58 64 0.0245266 + 38 58 65 0.0096893 + 38 58 66 0.000200097 + 38 59 60 0.00961546 + 38 59 61 0.0765779 + 38 59 62 0.153337 + 38 59 63 0.193067 + 38 59 64 0.193067 + 38 59 65 0.153337 + 38 59 66 0.0765779 + 38 59 67 0.00961546 + 38 60 59 0.00961546 + 38 60 60 0.11378 + 38 60 61 0.232735 + 38 60 62 0.311883 + 38 60 63 0.351365 + 38 60 64 0.351365 + 38 60 65 0.311883 + 38 60 66 0.232735 + 38 60 67 0.11378 + 38 60 68 0.00961546 + 38 61 58 0.000200097 + 38 61 59 0.0765779 + 38 61 60 0.232735 + 38 61 61 0.351365 + 38 61 62 0.430144 + 38 61 63 0.469442 + 38 61 64 0.469442 + 38 61 65 0.430144 + 38 61 66 0.351365 + 38 61 67 0.232735 + 38 61 68 0.0765779 + 38 61 69 0.000200097 + 38 62 58 0.0096893 + 38 62 59 0.153337 + 38 62 60 0.311883 + 38 62 61 0.430144 + 38 62 62 0.50868 + 38 62 63 0.547857 + 38 62 64 0.547857 + 38 62 65 0.50868 + 38 62 66 0.430144 + 38 62 67 0.311883 + 38 62 68 0.153337 + 38 62 69 0.0096893 + 38 63 58 0.0245266 + 38 63 59 0.193067 + 38 63 60 0.351365 + 38 63 61 0.469442 + 38 63 62 0.547857 + 38 63 63 0.586975 + 38 63 64 0.586975 + 38 63 65 0.547857 + 38 63 66 0.469442 + 38 63 67 0.351365 + 38 63 68 0.193067 + 38 63 69 0.0245266 + 38 64 58 0.0245266 + 38 64 59 0.193067 + 38 64 60 0.351365 + 38 64 61 0.469442 + 38 64 62 0.547857 + 38 64 63 0.586975 + 38 64 64 0.586975 + 38 64 65 0.547857 + 38 64 66 0.469442 + 38 64 67 0.351365 + 38 64 68 0.193067 + 38 64 69 0.0245266 + 38 65 58 0.0096893 + 38 65 59 0.153337 + 38 65 60 0.311883 + 38 65 61 0.430144 + 38 65 62 0.50868 + 38 65 63 0.547857 + 38 65 64 0.547857 + 38 65 65 0.50868 + 38 65 66 0.430144 + 38 65 67 0.311883 + 38 65 68 0.153337 + 38 65 69 0.0096893 + 38 66 58 0.000200097 + 38 66 59 0.0765779 + 38 66 60 0.232735 + 38 66 61 0.351365 + 38 66 62 0.430144 + 38 66 63 0.469442 + 38 66 64 0.469442 + 38 66 65 0.430144 + 38 66 66 0.351365 + 38 66 67 0.232735 + 38 66 68 0.0765779 + 38 66 69 0.000200097 + 38 67 59 0.00961546 + 38 67 60 0.11378 + 38 67 61 0.232735 + 38 67 62 0.311883 + 38 67 63 0.351365 + 38 67 64 0.351365 + 38 67 65 0.311883 + 38 67 66 0.232735 + 38 67 67 0.11378 + 38 67 68 0.00961546 + 38 68 60 0.00961546 + 38 68 61 0.0765779 + 38 68 62 0.153337 + 38 68 63 0.193067 + 38 68 64 0.193067 + 38 68 65 0.153337 + 38 68 66 0.0765779 + 38 68 67 0.00961546 + 38 69 61 0.000200097 + 38 69 62 0.0096893 + 38 69 63 0.0245266 + 38 69 64 0.0245266 + 38 69 65 0.0096893 + 38 69 66 0.000200097 + 39 55 60 0.00850155 + 39 55 61 0.0529903 + 39 55 62 0.10703 + 39 55 63 0.141143 + 39 55 64 0.141143 + 39 55 65 0.10703 + 39 55 66 0.0529903 + 39 55 67 0.00850155 + 39 56 58 0.00366907 + 39 56 59 0.0767609 + 39 56 60 0.221559 + 39 56 61 0.345113 + 39 56 62 0.42714 + 39 56 63 0.46805 + 39 56 64 0.46805 + 39 56 65 0.42714 + 39 56 66 0.345113 + 39 56 67 0.221559 + 39 56 68 0.0767609 + 39 56 69 0.00366907 + 39 57 57 0.00913973 + 39 57 58 0.142672 + 39 57 59 0.345113 + 39 57 60 0.508892 + 39 57 61 0.63101 + 39 57 62 0.712087 + 39 57 63 0.752526 + 39 57 64 0.752526 + 39 57 65 0.712087 + 39 57 66 0.63101 + 39 57 67 0.508892 + 39 57 68 0.345113 + 39 57 69 0.142672 + 39 57 70 0.00913973 + 39 58 56 0.00366907 + 39 58 57 0.142672 + 39 58 58 0.386161 + 39 58 59 0.590371 + 39 58 60 0.752526 + 39 58 61 0.873248 + 39 58 62 0.944047 + 39 58 63 0.969258 + 39 58 64 0.969258 + 39 58 65 0.944047 + 39 58 66 0.873248 + 39 58 67 0.752526 + 39 58 68 0.590371 + 39 58 69 0.386161 + 39 58 70 0.142672 + 39 58 71 0.00366907 + 39 59 56 0.0767609 + 39 59 57 0.345113 + 39 59 58 0.590371 + 39 59 59 0.792899 + 39 59 60 0.944121 + 39 59 61 0.99711 + 39 59 62 1 + 39 59 63 1 + 39 59 64 1 + 39 59 65 1 + 39 59 66 0.99711 + 39 59 67 0.944121 + 39 59 68 0.792899 + 39 59 69 0.590371 + 39 59 70 0.345113 + 39 59 71 0.0767609 + 39 60 55 0.00850155 + 39 60 56 0.221559 + 39 60 57 0.508892 + 39 60 58 0.752526 + 39 60 59 0.944121 + 39 60 60 0.999764 + 39 60 61 1 + 39 60 62 1 + 39 60 63 1 + 39 60 64 1 + 39 60 65 1 + 39 60 66 1 + 39 60 67 0.999764 + 39 60 68 0.944121 + 39 60 69 0.752526 + 39 60 70 0.508892 + 39 60 71 0.221559 + 39 60 72 0.00850155 + 39 61 55 0.0529903 + 39 61 56 0.345113 + 39 61 57 0.63101 + 39 61 58 0.873248 + 39 61 59 0.99711 + 39 61 60 1 + 39 61 61 1 + 39 61 62 1 + 39 61 63 1 + 39 61 64 1 + 39 61 65 1 + 39 61 66 1 + 39 61 67 1 + 39 61 68 0.99711 + 39 61 69 0.873248 + 39 61 70 0.63101 + 39 61 71 0.345113 + 39 61 72 0.0529903 + 39 62 55 0.10703 + 39 62 56 0.42714 + 39 62 57 0.712087 + 39 62 58 0.944047 + 39 62 59 1 + 39 62 60 1 + 39 62 61 1 + 39 62 62 1 + 39 62 63 1 + 39 62 64 1 + 39 62 65 1 + 39 62 66 1 + 39 62 67 1 + 39 62 68 1 + 39 62 69 0.944047 + 39 62 70 0.712087 + 39 62 71 0.42714 + 39 62 72 0.10703 + 39 63 55 0.141143 + 39 63 56 0.46805 + 39 63 57 0.752526 + 39 63 58 0.969258 + 39 63 59 1 + 39 63 60 1 + 39 63 61 1 + 39 63 62 1 + 39 63 63 1 + 39 63 64 1 + 39 63 65 1 + 39 63 66 1 + 39 63 67 1 + 39 63 68 1 + 39 63 69 0.969258 + 39 63 70 0.752526 + 39 63 71 0.46805 + 39 63 72 0.141143 + 39 64 55 0.141143 + 39 64 56 0.46805 + 39 64 57 0.752526 + 39 64 58 0.969258 + 39 64 59 1 + 39 64 60 1 + 39 64 61 1 + 39 64 62 1 + 39 64 63 1 + 39 64 64 1 + 39 64 65 1 + 39 64 66 1 + 39 64 67 1 + 39 64 68 1 + 39 64 69 0.969258 + 39 64 70 0.752526 + 39 64 71 0.46805 + 39 64 72 0.141143 + 39 65 55 0.10703 + 39 65 56 0.42714 + 39 65 57 0.712087 + 39 65 58 0.944047 + 39 65 59 1 + 39 65 60 1 + 39 65 61 1 + 39 65 62 1 + 39 65 63 1 + 39 65 64 1 + 39 65 65 1 + 39 65 66 1 + 39 65 67 1 + 39 65 68 1 + 39 65 69 0.944047 + 39 65 70 0.712087 + 39 65 71 0.42714 + 39 65 72 0.10703 + 39 66 55 0.0529903 + 39 66 56 0.345113 + 39 66 57 0.63101 + 39 66 58 0.873248 + 39 66 59 0.99711 + 39 66 60 1 + 39 66 61 1 + 39 66 62 1 + 39 66 63 1 + 39 66 64 1 + 39 66 65 1 + 39 66 66 1 + 39 66 67 1 + 39 66 68 0.99711 + 39 66 69 0.873248 + 39 66 70 0.63101 + 39 66 71 0.345113 + 39 66 72 0.0529903 + 39 67 55 0.00850155 + 39 67 56 0.221559 + 39 67 57 0.508892 + 39 67 58 0.752526 + 39 67 59 0.944121 + 39 67 60 0.999764 + 39 67 61 1 + 39 67 62 1 + 39 67 63 1 + 39 67 64 1 + 39 67 65 1 + 39 67 66 1 + 39 67 67 0.999764 + 39 67 68 0.944121 + 39 67 69 0.752526 + 39 67 70 0.508892 + 39 67 71 0.221559 + 39 67 72 0.00850155 + 39 68 56 0.0767609 + 39 68 57 0.345113 + 39 68 58 0.590371 + 39 68 59 0.792899 + 39 68 60 0.944121 + 39 68 61 0.99711 + 39 68 62 1 + 39 68 63 1 + 39 68 64 1 + 39 68 65 1 + 39 68 66 0.99711 + 39 68 67 0.944121 + 39 68 68 0.792899 + 39 68 69 0.590371 + 39 68 70 0.345113 + 39 68 71 0.0767609 + 39 69 56 0.00366907 + 39 69 57 0.142672 + 39 69 58 0.386161 + 39 69 59 0.590371 + 39 69 60 0.752526 + 39 69 61 0.873248 + 39 69 62 0.944047 + 39 69 63 0.969258 + 39 69 64 0.969258 + 39 69 65 0.944047 + 39 69 66 0.873248 + 39 69 67 0.752526 + 39 69 68 0.590371 + 39 69 69 0.386161 + 39 69 70 0.142672 + 39 69 71 0.00366907 + 39 70 57 0.00913973 + 39 70 58 0.142672 + 39 70 59 0.345113 + 39 70 60 0.508892 + 39 70 61 0.63101 + 39 70 62 0.712087 + 39 70 63 0.752526 + 39 70 64 0.752526 + 39 70 65 0.712087 + 39 70 66 0.63101 + 39 70 67 0.508892 + 39 70 68 0.345113 + 39 70 69 0.142672 + 39 70 70 0.00913973 + 39 71 58 0.00366907 + 39 71 59 0.0767609 + 39 71 60 0.221559 + 39 71 61 0.345113 + 39 71 62 0.42714 + 39 71 63 0.46805 + 39 71 64 0.46805 + 39 71 65 0.42714 + 39 71 66 0.345113 + 39 71 67 0.221559 + 39 71 68 0.0767609 + 39 71 69 0.00366907 + 39 72 60 0.00850155 + 39 72 61 0.0529903 + 39 72 62 0.10703 + 39 72 63 0.141143 + 39 72 64 0.141143 + 39 72 65 0.10703 + 39 72 66 0.0529903 + 39 72 67 0.00850155 + 40 52 61 9.9388e-05 + 40 52 62 0.00487084 + 40 52 63 0.012422 + 40 52 64 0.012422 + 40 52 65 0.00487084 + 40 52 66 9.9388e-05 + 40 53 58 4.51737e-05 + 40 53 59 0.0230554 + 40 53 60 0.106145 + 40 53 61 0.210787 + 40 53 62 0.295408 + 40 53 63 0.338304 + 40 53 64 0.338304 + 40 53 65 0.295408 + 40 53 66 0.210787 + 40 53 67 0.106145 + 40 53 68 0.0230554 + 40 53 69 4.51737e-05 + 40 54 57 0.013123 + 40 54 58 0.137253 + 40 54 59 0.338304 + 40 54 60 0.509102 + 40 54 61 0.63639 + 40 54 62 0.720869 + 40 54 63 0.762996 + 40 54 64 0.762996 + 40 54 65 0.720869 + 40 54 66 0.63639 + 40 54 67 0.509102 + 40 54 68 0.338304 + 40 54 69 0.137253 + 40 54 70 0.013123 + 40 55 56 0.036314 + 40 55 57 0.253138 + 40 55 58 0.509102 + 40 55 59 0.720869 + 40 55 60 0.880429 + 40 55 61 0.961214 + 40 55 62 0.990327 + 40 55 63 0.997684 + 40 55 64 0.997684 + 40 55 65 0.990327 + 40 55 66 0.961214 + 40 55 67 0.880429 + 40 55 68 0.720869 + 40 55 69 0.509102 + 40 55 70 0.253138 + 40 55 71 0.036314 + 40 56 55 0.036314 + 40 56 56 0.295471 + 40 56 57 0.594037 + 40 56 58 0.843357 + 40 56 59 0.979056 + 40 56 60 0.999993 + 40 56 61 1 + 40 56 62 1 + 40 56 63 1 + 40 56 64 1 + 40 56 65 1 + 40 56 66 1 + 40 56 67 0.999993 + 40 56 68 0.979056 + 40 56 69 0.843357 + 40 56 70 0.594037 + 40 56 71 0.295471 + 40 56 72 0.036314 + 40 57 54 0.013123 + 40 57 55 0.253138 + 40 57 56 0.594037 + 40 57 57 0.87979 + 40 57 58 0.996155 + 40 57 59 1 + 40 57 60 1 + 40 57 61 1 + 40 57 62 1 + 40 57 63 1 + 40 57 64 1 + 40 57 65 1 + 40 57 66 1 + 40 57 67 1 + 40 57 68 1 + 40 57 69 0.996155 + 40 57 70 0.87979 + 40 57 71 0.594037 + 40 57 72 0.253138 + 40 57 73 0.013123 + 40 58 53 4.51737e-05 + 40 58 54 0.137253 + 40 58 55 0.509102 + 40 58 56 0.843357 + 40 58 57 0.996155 + 40 58 58 1 + 40 58 59 1 + 40 58 60 1 + 40 58 61 1 + 40 58 62 1 + 40 58 63 1 + 40 58 64 1 + 40 58 65 1 + 40 58 66 1 + 40 58 67 1 + 40 58 68 1 + 40 58 69 1 + 40 58 70 0.996155 + 40 58 71 0.843357 + 40 58 72 0.509102 + 40 58 73 0.137253 + 40 58 74 4.51737e-05 + 40 59 53 0.0230554 + 40 59 54 0.338304 + 40 59 55 0.720869 + 40 59 56 0.979056 + 40 59 57 1 + 40 59 58 1 + 40 59 59 1 + 40 59 60 1 + 40 59 61 1 + 40 59 62 1 + 40 59 63 1 + 40 59 64 1 + 40 59 65 1 + 40 59 66 1 + 40 59 67 1 + 40 59 68 1 + 40 59 69 1 + 40 59 70 1 + 40 59 71 0.979056 + 40 59 72 0.720869 + 40 59 73 0.338304 + 40 59 74 0.0230554 + 40 60 53 0.106145 + 40 60 54 0.509102 + 40 60 55 0.880429 + 40 60 56 0.999993 + 40 60 57 1 + 40 60 58 1 + 40 60 59 1 + 40 60 60 1 + 40 60 61 1 + 40 60 62 1 + 40 60 63 1 + 40 60 64 1 + 40 60 65 1 + 40 60 66 1 + 40 60 67 1 + 40 60 68 1 + 40 60 69 1 + 40 60 70 1 + 40 60 71 0.999993 + 40 60 72 0.880429 + 40 60 73 0.509102 + 40 60 74 0.106145 + 40 61 52 9.9388e-05 + 40 61 53 0.210787 + 40 61 54 0.63639 + 40 61 55 0.961214 + 40 61 56 1 + 40 61 57 1 + 40 61 58 1 + 40 61 59 1 + 40 61 60 1 + 40 61 61 1 + 40 61 62 1 + 40 61 63 1 + 40 61 64 1 + 40 61 65 1 + 40 61 66 1 + 40 61 67 1 + 40 61 68 1 + 40 61 69 1 + 40 61 70 1 + 40 61 71 1 + 40 61 72 0.961214 + 40 61 73 0.63639 + 40 61 74 0.210787 + 40 61 75 9.9388e-05 + 40 62 52 0.00487084 + 40 62 53 0.295408 + 40 62 54 0.720869 + 40 62 55 0.990327 + 40 62 56 1 + 40 62 57 1 + 40 62 58 1 + 40 62 59 1 + 40 62 60 1 + 40 62 61 1 + 40 62 62 1 + 40 62 63 1 + 40 62 64 1 + 40 62 65 1 + 40 62 66 1 + 40 62 67 1 + 40 62 68 1 + 40 62 69 1 + 40 62 70 1 + 40 62 71 1 + 40 62 72 0.990327 + 40 62 73 0.720869 + 40 62 74 0.295408 + 40 62 75 0.00487084 + 40 63 52 0.012422 + 40 63 53 0.338304 + 40 63 54 0.762996 + 40 63 55 0.997684 + 40 63 56 1 + 40 63 57 1 + 40 63 58 1 + 40 63 59 1 + 40 63 60 1 + 40 63 61 1 + 40 63 62 1 + 40 63 63 1 + 40 63 64 1 + 40 63 65 1 + 40 63 66 1 + 40 63 67 1 + 40 63 68 1 + 40 63 69 1 + 40 63 70 1 + 40 63 71 1 + 40 63 72 0.997684 + 40 63 73 0.762996 + 40 63 74 0.338304 + 40 63 75 0.012422 + 40 64 52 0.012422 + 40 64 53 0.338304 + 40 64 54 0.762996 + 40 64 55 0.997684 + 40 64 56 1 + 40 64 57 1 + 40 64 58 1 + 40 64 59 1 + 40 64 60 1 + 40 64 61 1 + 40 64 62 1 + 40 64 63 1 + 40 64 64 1 + 40 64 65 1 + 40 64 66 1 + 40 64 67 1 + 40 64 68 1 + 40 64 69 1 + 40 64 70 1 + 40 64 71 1 + 40 64 72 0.997684 + 40 64 73 0.762996 + 40 64 74 0.338304 + 40 64 75 0.012422 + 40 65 52 0.00487084 + 40 65 53 0.295408 + 40 65 54 0.720869 + 40 65 55 0.990327 + 40 65 56 1 + 40 65 57 1 + 40 65 58 1 + 40 65 59 1 + 40 65 60 1 + 40 65 61 1 + 40 65 62 1 + 40 65 63 1 + 40 65 64 1 + 40 65 65 1 + 40 65 66 1 + 40 65 67 1 + 40 65 68 1 + 40 65 69 1 + 40 65 70 1 + 40 65 71 1 + 40 65 72 0.990327 + 40 65 73 0.720869 + 40 65 74 0.295408 + 40 65 75 0.00487084 + 40 66 52 9.9388e-05 + 40 66 53 0.210787 + 40 66 54 0.63639 + 40 66 55 0.961214 + 40 66 56 1 + 40 66 57 1 + 40 66 58 1 + 40 66 59 1 + 40 66 60 1 + 40 66 61 1 + 40 66 62 1 + 40 66 63 1 + 40 66 64 1 + 40 66 65 1 + 40 66 66 1 + 40 66 67 1 + 40 66 68 1 + 40 66 69 1 + 40 66 70 1 + 40 66 71 1 + 40 66 72 0.961214 + 40 66 73 0.63639 + 40 66 74 0.210787 + 40 66 75 9.9388e-05 + 40 67 53 0.106145 + 40 67 54 0.509102 + 40 67 55 0.880429 + 40 67 56 0.999993 + 40 67 57 1 + 40 67 58 1 + 40 67 59 1 + 40 67 60 1 + 40 67 61 1 + 40 67 62 1 + 40 67 63 1 + 40 67 64 1 + 40 67 65 1 + 40 67 66 1 + 40 67 67 1 + 40 67 68 1 + 40 67 69 1 + 40 67 70 1 + 40 67 71 0.999993 + 40 67 72 0.880429 + 40 67 73 0.509102 + 40 67 74 0.106145 + 40 68 53 0.0230554 + 40 68 54 0.338304 + 40 68 55 0.720869 + 40 68 56 0.979056 + 40 68 57 1 + 40 68 58 1 + 40 68 59 1 + 40 68 60 1 + 40 68 61 1 + 40 68 62 1 + 40 68 63 1 + 40 68 64 1 + 40 68 65 1 + 40 68 66 1 + 40 68 67 1 + 40 68 68 1 + 40 68 69 1 + 40 68 70 1 + 40 68 71 0.979056 + 40 68 72 0.720869 + 40 68 73 0.338304 + 40 68 74 0.0230554 + 40 69 53 4.51737e-05 + 40 69 54 0.137253 + 40 69 55 0.509102 + 40 69 56 0.843357 + 40 69 57 0.996155 + 40 69 58 1 + 40 69 59 1 + 40 69 60 1 + 40 69 61 1 + 40 69 62 1 + 40 69 63 1 + 40 69 64 1 + 40 69 65 1 + 40 69 66 1 + 40 69 67 1 + 40 69 68 1 + 40 69 69 1 + 40 69 70 0.996155 + 40 69 71 0.843357 + 40 69 72 0.509102 + 40 69 73 0.137253 + 40 69 74 4.51737e-05 + 40 70 54 0.013123 + 40 70 55 0.253138 + 40 70 56 0.594037 + 40 70 57 0.87979 + 40 70 58 0.996155 + 40 70 59 1 + 40 70 60 1 + 40 70 61 1 + 40 70 62 1 + 40 70 63 1 + 40 70 64 1 + 40 70 65 1 + 40 70 66 1 + 40 70 67 1 + 40 70 68 1 + 40 70 69 0.996155 + 40 70 70 0.87979 + 40 70 71 0.594037 + 40 70 72 0.253138 + 40 70 73 0.013123 + 40 71 55 0.036314 + 40 71 56 0.295471 + 40 71 57 0.594037 + 40 71 58 0.843357 + 40 71 59 0.979056 + 40 71 60 0.999993 + 40 71 61 1 + 40 71 62 1 + 40 71 63 1 + 40 71 64 1 + 40 71 65 1 + 40 71 66 1 + 40 71 67 0.999993 + 40 71 68 0.979056 + 40 71 69 0.843357 + 40 71 70 0.594037 + 40 71 71 0.295471 + 40 71 72 0.036314 + 40 72 56 0.036314 + 40 72 57 0.253138 + 40 72 58 0.509102 + 40 72 59 0.720869 + 40 72 60 0.880429 + 40 72 61 0.961214 + 40 72 62 0.990327 + 40 72 63 0.997684 + 40 72 64 0.997684 + 40 72 65 0.990327 + 40 72 66 0.961214 + 40 72 67 0.880429 + 40 72 68 0.720869 + 40 72 69 0.509102 + 40 72 70 0.253138 + 40 72 71 0.036314 + 40 73 57 0.013123 + 40 73 58 0.137253 + 40 73 59 0.338304 + 40 73 60 0.509102 + 40 73 61 0.63639 + 40 73 62 0.720869 + 40 73 63 0.762996 + 40 73 64 0.762996 + 40 73 65 0.720869 + 40 73 66 0.63639 + 40 73 67 0.509102 + 40 73 68 0.338304 + 40 73 69 0.137253 + 40 73 70 0.013123 + 40 74 58 4.51737e-05 + 40 74 59 0.0230554 + 40 74 60 0.106145 + 40 74 61 0.210787 + 40 74 62 0.295408 + 40 74 63 0.338304 + 40 74 64 0.338304 + 40 74 65 0.295408 + 40 74 66 0.210787 + 40 74 67 0.106145 + 40 74 68 0.0230554 + 40 74 69 4.51737e-05 + 40 75 61 9.9388e-05 + 40 75 62 0.00487084 + 40 75 63 0.012422 + 40 75 64 0.012422 + 40 75 65 0.00487084 + 40 75 66 9.9388e-05 + 41 50 62 0.000160193 + 41 50 63 0.00182891 + 41 50 64 0.00182891 + 41 50 65 0.000160193 + 41 51 58 0.000204528 + 41 51 59 0.0262369 + 41 51 60 0.106397 + 41 51 61 0.203942 + 41 51 62 0.286191 + 41 51 63 0.330857 + 41 51 64 0.330857 + 41 51 65 0.286191 + 41 51 66 0.203942 + 41 51 67 0.106397 + 41 51 68 0.0262369 + 41 51 69 0.000204528 + 41 52 56 3.07754e-05 + 41 52 57 0.0398206 + 41 52 58 0.204921 + 41 52 59 0.42026 + 41 52 60 0.598003 + 41 52 61 0.730298 + 41 52 62 0.813363 + 41 52 63 0.849603 + 41 52 64 0.849603 + 41 52 65 0.813363 + 41 52 66 0.730298 + 41 52 67 0.598003 + 41 52 68 0.42026 + 41 52 69 0.204921 + 41 52 70 0.0398206 + 41 52 71 3.07754e-05 + 41 53 55 0.00460294 + 41 53 56 0.134362 + 41 53 57 0.42026 + 41 53 58 0.686307 + 41 53 59 0.882677 + 41 53 60 0.97359 + 41 53 61 0.998593 + 41 53 62 1 + 41 53 63 1 + 41 53 64 1 + 41 53 65 1 + 41 53 66 0.998593 + 41 53 67 0.97359 + 41 53 68 0.882677 + 41 53 69 0.686307 + 41 53 70 0.42026 + 41 53 71 0.134362 + 41 53 72 0.00460294 + 41 54 54 0.0092981 + 41 54 55 0.205791 + 41 54 56 0.553699 + 41 54 57 0.848902 + 41 54 58 0.985777 + 41 54 59 1 + 41 54 60 1 + 41 54 61 1 + 41 54 62 1 + 41 54 63 1 + 41 54 64 1 + 41 54 65 1 + 41 54 66 1 + 41 54 67 1 + 41 54 68 1 + 41 54 69 0.985777 + 41 54 70 0.848902 + 41 54 71 0.553699 + 41 54 72 0.205791 + 41 54 73 0.0092981 + 41 55 53 0.00460294 + 41 55 54 0.205791 + 41 55 55 0.598003 + 41 55 56 0.913043 + 41 55 57 0.999295 + 41 55 58 1 + 41 55 59 1 + 41 55 60 1 + 41 55 61 1 + 41 55 62 1 + 41 55 63 1 + 41 55 64 1 + 41 55 65 1 + 41 55 66 1 + 41 55 67 1 + 41 55 68 1 + 41 55 69 1 + 41 55 70 0.999295 + 41 55 71 0.913043 + 41 55 72 0.598003 + 41 55 73 0.205791 + 41 55 74 0.00460294 + 41 56 52 3.07754e-05 + 41 56 53 0.134362 + 41 56 54 0.553699 + 41 56 55 0.913043 + 41 56 56 0.999937 + 41 56 57 1 + 41 56 58 1 + 41 56 59 1 + 41 56 60 1 + 41 56 61 1 + 41 56 62 1 + 41 56 63 1 + 41 56 64 1 + 41 56 65 1 + 41 56 66 1 + 41 56 67 1 + 41 56 68 1 + 41 56 69 1 + 41 56 70 1 + 41 56 71 0.999937 + 41 56 72 0.913043 + 41 56 73 0.553699 + 41 56 74 0.134362 + 41 56 75 3.07754e-05 + 41 57 52 0.0398206 + 41 57 53 0.42026 + 41 57 54 0.848902 + 41 57 55 0.999295 + 41 57 56 1 + 41 57 57 1 + 41 57 58 1 + 41 57 59 1 + 41 57 60 1 + 41 57 61 1 + 41 57 62 1 + 41 57 63 1 + 41 57 64 1 + 41 57 65 1 + 41 57 66 1 + 41 57 67 1 + 41 57 68 1 + 41 57 69 1 + 41 57 70 1 + 41 57 71 1 + 41 57 72 0.999295 + 41 57 73 0.848902 + 41 57 74 0.42026 + 41 57 75 0.0398206 + 41 58 51 0.000204528 + 41 58 52 0.204921 + 41 58 53 0.686307 + 41 58 54 0.985777 + 41 58 55 1 + 41 58 56 1 + 41 58 57 1 + 41 58 58 1 + 41 58 59 1 + 41 58 60 1 + 41 58 61 1 + 41 58 62 1 + 41 58 63 1 + 41 58 64 1 + 41 58 65 1 + 41 58 66 1 + 41 58 67 1 + 41 58 68 1 + 41 58 69 1 + 41 58 70 1 + 41 58 71 1 + 41 58 72 1 + 41 58 73 0.985777 + 41 58 74 0.686307 + 41 58 75 0.204921 + 41 58 76 0.000204528 + 41 59 51 0.0262369 + 41 59 52 0.42026 + 41 59 53 0.882677 + 41 59 54 1 + 41 59 55 1 + 41 59 56 1 + 41 59 57 1 + 41 59 58 1 + 41 59 59 1 + 41 59 60 1 + 41 59 61 1 + 41 59 62 1 + 41 59 63 1 + 41 59 64 1 + 41 59 65 1 + 41 59 66 1 + 41 59 67 1 + 41 59 68 1 + 41 59 69 1 + 41 59 70 1 + 41 59 71 1 + 41 59 72 1 + 41 59 73 1 + 41 59 74 0.882677 + 41 59 75 0.42026 + 41 59 76 0.0262369 + 41 60 51 0.106397 + 41 60 52 0.598003 + 41 60 53 0.97359 + 41 60 54 1 + 41 60 55 1 + 41 60 56 1 + 41 60 57 1 + 41 60 58 1 + 41 60 59 1 + 41 60 60 1 + 41 60 61 1 + 41 60 62 1 + 41 60 63 1 + 41 60 64 1 + 41 60 65 1 + 41 60 66 1 + 41 60 67 1 + 41 60 68 1 + 41 60 69 1 + 41 60 70 1 + 41 60 71 1 + 41 60 72 1 + 41 60 73 1 + 41 60 74 0.97359 + 41 60 75 0.598003 + 41 60 76 0.106397 + 41 61 51 0.203942 + 41 61 52 0.730298 + 41 61 53 0.998593 + 41 61 54 1 + 41 61 55 1 + 41 61 56 1 + 41 61 57 1 + 41 61 58 1 + 41 61 59 1 + 41 61 60 1 + 41 61 61 1 + 41 61 62 1 + 41 61 63 1 + 41 61 64 1 + 41 61 65 1 + 41 61 66 1 + 41 61 67 1 + 41 61 68 1 + 41 61 69 1 + 41 61 70 1 + 41 61 71 1 + 41 61 72 1 + 41 61 73 1 + 41 61 74 0.998593 + 41 61 75 0.730298 + 41 61 76 0.203942 + 41 62 50 0.000160193 + 41 62 51 0.286191 + 41 62 52 0.813363 + 41 62 53 1 + 41 62 54 1 + 41 62 55 1 + 41 62 56 1 + 41 62 57 1 + 41 62 58 1 + 41 62 59 1 + 41 62 60 1 + 41 62 61 1 + 41 62 62 1 + 41 62 63 1 + 41 62 64 1 + 41 62 65 1 + 41 62 66 1 + 41 62 67 1 + 41 62 68 1 + 41 62 69 1 + 41 62 70 1 + 41 62 71 1 + 41 62 72 1 + 41 62 73 1 + 41 62 74 1 + 41 62 75 0.813363 + 41 62 76 0.286191 + 41 62 77 0.000160193 + 41 63 50 0.00182891 + 41 63 51 0.330857 + 41 63 52 0.849603 + 41 63 53 1 + 41 63 54 1 + 41 63 55 1 + 41 63 56 1 + 41 63 57 1 + 41 63 58 1 + 41 63 59 1 + 41 63 60 1 + 41 63 61 1 + 41 63 62 1 + 41 63 63 1 + 41 63 64 1 + 41 63 65 1 + 41 63 66 1 + 41 63 67 1 + 41 63 68 1 + 41 63 69 1 + 41 63 70 1 + 41 63 71 1 + 41 63 72 1 + 41 63 73 1 + 41 63 74 1 + 41 63 75 0.849603 + 41 63 76 0.330857 + 41 63 77 0.00182891 + 41 64 50 0.00182891 + 41 64 51 0.330857 + 41 64 52 0.849603 + 41 64 53 1 + 41 64 54 1 + 41 64 55 1 + 41 64 56 1 + 41 64 57 1 + 41 64 58 1 + 41 64 59 1 + 41 64 60 1 + 41 64 61 1 + 41 64 62 1 + 41 64 63 1 + 41 64 64 1 + 41 64 65 1 + 41 64 66 1 + 41 64 67 1 + 41 64 68 1 + 41 64 69 1 + 41 64 70 1 + 41 64 71 1 + 41 64 72 1 + 41 64 73 1 + 41 64 74 1 + 41 64 75 0.849603 + 41 64 76 0.330857 + 41 64 77 0.00182891 + 41 65 50 0.000160193 + 41 65 51 0.286191 + 41 65 52 0.813363 + 41 65 53 1 + 41 65 54 1 + 41 65 55 1 + 41 65 56 1 + 41 65 57 1 + 41 65 58 1 + 41 65 59 1 + 41 65 60 1 + 41 65 61 1 + 41 65 62 1 + 41 65 63 1 + 41 65 64 1 + 41 65 65 1 + 41 65 66 1 + 41 65 67 1 + 41 65 68 1 + 41 65 69 1 + 41 65 70 1 + 41 65 71 1 + 41 65 72 1 + 41 65 73 1 + 41 65 74 1 + 41 65 75 0.813363 + 41 65 76 0.286191 + 41 65 77 0.000160193 + 41 66 51 0.203942 + 41 66 52 0.730298 + 41 66 53 0.998593 + 41 66 54 1 + 41 66 55 1 + 41 66 56 1 + 41 66 57 1 + 41 66 58 1 + 41 66 59 1 + 41 66 60 1 + 41 66 61 1 + 41 66 62 1 + 41 66 63 1 + 41 66 64 1 + 41 66 65 1 + 41 66 66 1 + 41 66 67 1 + 41 66 68 1 + 41 66 69 1 + 41 66 70 1 + 41 66 71 1 + 41 66 72 1 + 41 66 73 1 + 41 66 74 0.998593 + 41 66 75 0.730298 + 41 66 76 0.203942 + 41 67 51 0.106397 + 41 67 52 0.598003 + 41 67 53 0.97359 + 41 67 54 1 + 41 67 55 1 + 41 67 56 1 + 41 67 57 1 + 41 67 58 1 + 41 67 59 1 + 41 67 60 1 + 41 67 61 1 + 41 67 62 1 + 41 67 63 1 + 41 67 64 1 + 41 67 65 1 + 41 67 66 1 + 41 67 67 1 + 41 67 68 1 + 41 67 69 1 + 41 67 70 1 + 41 67 71 1 + 41 67 72 1 + 41 67 73 1 + 41 67 74 0.97359 + 41 67 75 0.598003 + 41 67 76 0.106397 + 41 68 51 0.0262369 + 41 68 52 0.42026 + 41 68 53 0.882677 + 41 68 54 1 + 41 68 55 1 + 41 68 56 1 + 41 68 57 1 + 41 68 58 1 + 41 68 59 1 + 41 68 60 1 + 41 68 61 1 + 41 68 62 1 + 41 68 63 1 + 41 68 64 1 + 41 68 65 1 + 41 68 66 1 + 41 68 67 1 + 41 68 68 1 + 41 68 69 1 + 41 68 70 1 + 41 68 71 1 + 41 68 72 1 + 41 68 73 1 + 41 68 74 0.882677 + 41 68 75 0.42026 + 41 68 76 0.0262369 + 41 69 51 0.000204528 + 41 69 52 0.204921 + 41 69 53 0.686307 + 41 69 54 0.985777 + 41 69 55 1 + 41 69 56 1 + 41 69 57 1 + 41 69 58 1 + 41 69 59 1 + 41 69 60 1 + 41 69 61 1 + 41 69 62 1 + 41 69 63 1 + 41 69 64 1 + 41 69 65 1 + 41 69 66 1 + 41 69 67 1 + 41 69 68 1 + 41 69 69 1 + 41 69 70 1 + 41 69 71 1 + 41 69 72 1 + 41 69 73 0.985777 + 41 69 74 0.686307 + 41 69 75 0.204921 + 41 69 76 0.000204528 + 41 70 52 0.0398206 + 41 70 53 0.42026 + 41 70 54 0.848902 + 41 70 55 0.999295 + 41 70 56 1 + 41 70 57 1 + 41 70 58 1 + 41 70 59 1 + 41 70 60 1 + 41 70 61 1 + 41 70 62 1 + 41 70 63 1 + 41 70 64 1 + 41 70 65 1 + 41 70 66 1 + 41 70 67 1 + 41 70 68 1 + 41 70 69 1 + 41 70 70 1 + 41 70 71 1 + 41 70 72 0.999295 + 41 70 73 0.848902 + 41 70 74 0.42026 + 41 70 75 0.0398206 + 41 71 52 3.07754e-05 + 41 71 53 0.134362 + 41 71 54 0.553699 + 41 71 55 0.913043 + 41 71 56 0.999937 + 41 71 57 1 + 41 71 58 1 + 41 71 59 1 + 41 71 60 1 + 41 71 61 1 + 41 71 62 1 + 41 71 63 1 + 41 71 64 1 + 41 71 65 1 + 41 71 66 1 + 41 71 67 1 + 41 71 68 1 + 41 71 69 1 + 41 71 70 1 + 41 71 71 0.999937 + 41 71 72 0.913043 + 41 71 73 0.553699 + 41 71 74 0.134362 + 41 71 75 3.07754e-05 + 41 72 53 0.00460294 + 41 72 54 0.205791 + 41 72 55 0.598003 + 41 72 56 0.913043 + 41 72 57 0.999295 + 41 72 58 1 + 41 72 59 1 + 41 72 60 1 + 41 72 61 1 + 41 72 62 1 + 41 72 63 1 + 41 72 64 1 + 41 72 65 1 + 41 72 66 1 + 41 72 67 1 + 41 72 68 1 + 41 72 69 1 + 41 72 70 0.999295 + 41 72 71 0.913043 + 41 72 72 0.598003 + 41 72 73 0.205791 + 41 72 74 0.00460294 + 41 73 54 0.0092981 + 41 73 55 0.205791 + 41 73 56 0.553699 + 41 73 57 0.848902 + 41 73 58 0.985777 + 41 73 59 1 + 41 73 60 1 + 41 73 61 1 + 41 73 62 1 + 41 73 63 1 + 41 73 64 1 + 41 73 65 1 + 41 73 66 1 + 41 73 67 1 + 41 73 68 1 + 41 73 69 0.985777 + 41 73 70 0.848902 + 41 73 71 0.553699 + 41 73 72 0.205791 + 41 73 73 0.0092981 + 41 74 55 0.00460294 + 41 74 56 0.134362 + 41 74 57 0.42026 + 41 74 58 0.686307 + 41 74 59 0.882677 + 41 74 60 0.97359 + 41 74 61 0.998593 + 41 74 62 1 + 41 74 63 1 + 41 74 64 1 + 41 74 65 1 + 41 74 66 0.998593 + 41 74 67 0.97359 + 41 74 68 0.882677 + 41 74 69 0.686307 + 41 74 70 0.42026 + 41 74 71 0.134362 + 41 74 72 0.00460294 + 41 75 56 3.07754e-05 + 41 75 57 0.0398206 + 41 75 58 0.204921 + 41 75 59 0.42026 + 41 75 60 0.598003 + 41 75 61 0.730298 + 41 75 62 0.813363 + 41 75 63 0.849603 + 41 75 64 0.849603 + 41 75 65 0.813363 + 41 75 66 0.730298 + 41 75 67 0.598003 + 41 75 68 0.42026 + 41 75 69 0.204921 + 41 75 70 0.0398206 + 41 75 71 3.07754e-05 + 41 76 58 0.000204528 + 41 76 59 0.0262369 + 41 76 60 0.106397 + 41 76 61 0.203942 + 41 76 62 0.286191 + 41 76 63 0.330857 + 41 76 64 0.330857 + 41 76 65 0.286191 + 41 76 66 0.203942 + 41 76 67 0.106397 + 41 76 68 0.0262369 + 41 76 69 0.000204528 + 41 77 62 0.000160193 + 41 77 63 0.00182891 + 41 77 64 0.00182891 + 41 77 65 0.000160193 + 42 49 59 0.000228244 + 42 49 60 0.0170305 + 42 49 61 0.061458 + 42 49 62 0.10742 + 42 49 63 0.135234 + 42 49 64 0.135234 + 42 49 65 0.10742 + 42 49 66 0.061458 + 42 49 67 0.0170305 + 42 49 68 0.000228244 + 42 50 57 0.0100187 + 42 50 58 0.105685 + 42 50 59 0.28004 + 42 50 60 0.462948 + 42 50 61 0.602307 + 42 50 62 0.694555 + 42 50 63 0.738943 + 42 50 64 0.738943 + 42 50 65 0.694555 + 42 50 66 0.602307 + 42 50 67 0.462948 + 42 50 68 0.28004 + 42 50 69 0.105685 + 42 50 70 0.0100187 + 42 51 55 0.00260739 + 42 51 56 0.104302 + 42 51 57 0.370069 + 42 51 58 0.648356 + 42 51 59 0.852122 + 42 51 60 0.954076 + 42 51 61 0.992135 + 42 51 62 0.99983 + 42 51 63 1 + 42 51 64 1 + 42 51 65 0.99983 + 42 51 66 0.992135 + 42 51 67 0.954076 + 42 51 68 0.852122 + 42 51 69 0.648356 + 42 51 70 0.370069 + 42 51 71 0.104302 + 42 51 72 0.00260739 + 42 52 54 0.0182812 + 42 52 55 0.240042 + 42 52 56 0.602276 + 42 52 57 0.884209 + 42 52 58 0.991156 + 42 52 59 1 + 42 52 60 1 + 42 52 61 1 + 42 52 62 1 + 42 52 63 1 + 42 52 64 1 + 42 52 65 1 + 42 52 66 1 + 42 52 67 1 + 42 52 68 1 + 42 52 69 0.991156 + 42 52 70 0.884209 + 42 52 71 0.602276 + 42 52 72 0.240042 + 42 52 73 0.0182812 + 42 53 53 0.0282569 + 42 53 54 0.325363 + 42 53 55 0.736168 + 42 53 56 0.971405 + 42 53 57 1 + 42 53 58 1 + 42 53 59 1 + 42 53 60 1 + 42 53 61 1 + 42 53 62 1 + 42 53 63 1 + 42 53 64 1 + 42 53 65 1 + 42 53 66 1 + 42 53 67 1 + 42 53 68 1 + 42 53 69 1 + 42 53 70 1 + 42 53 71 0.971405 + 42 53 72 0.736168 + 42 53 73 0.325363 + 42 53 74 0.0282569 + 42 54 52 0.0182812 + 42 54 53 0.325363 + 42 54 54 0.777432 + 42 54 55 0.990286 + 42 54 56 1 + 42 54 57 1 + 42 54 58 1 + 42 54 59 1 + 42 54 60 1 + 42 54 61 1 + 42 54 62 1 + 42 54 63 1 + 42 54 64 1 + 42 54 65 1 + 42 54 66 1 + 42 54 67 1 + 42 54 68 1 + 42 54 69 1 + 42 54 70 1 + 42 54 71 1 + 42 54 72 0.990286 + 42 54 73 0.777432 + 42 54 74 0.325363 + 42 54 75 0.0182812 + 42 55 51 0.00260739 + 42 55 52 0.240042 + 42 55 53 0.736168 + 42 55 54 0.990286 + 42 55 55 1 + 42 55 56 1 + 42 55 57 1 + 42 55 58 1 + 42 55 59 1 + 42 55 60 1 + 42 55 61 1 + 42 55 62 1 + 42 55 63 1 + 42 55 64 1 + 42 55 65 1 + 42 55 66 1 + 42 55 67 1 + 42 55 68 1 + 42 55 69 1 + 42 55 70 1 + 42 55 71 1 + 42 55 72 1 + 42 55 73 0.990286 + 42 55 74 0.736168 + 42 55 75 0.240042 + 42 55 76 0.00260739 + 42 56 51 0.104302 + 42 56 52 0.602276 + 42 56 53 0.971405 + 42 56 54 1 + 42 56 55 1 + 42 56 56 1 + 42 56 57 1 + 42 56 58 1 + 42 56 59 1 + 42 56 60 1 + 42 56 61 1 + 42 56 62 1 + 42 56 63 1 + 42 56 64 1 + 42 56 65 1 + 42 56 66 1 + 42 56 67 1 + 42 56 68 1 + 42 56 69 1 + 42 56 70 1 + 42 56 71 1 + 42 56 72 1 + 42 56 73 1 + 42 56 74 0.971405 + 42 56 75 0.602276 + 42 56 76 0.104302 + 42 57 50 0.0100187 + 42 57 51 0.370069 + 42 57 52 0.884209 + 42 57 53 1 + 42 57 54 1 + 42 57 55 1 + 42 57 56 1 + 42 57 57 1 + 42 57 58 1 + 42 57 59 1 + 42 57 60 1 + 42 57 61 1 + 42 57 62 1 + 42 57 63 1 + 42 57 64 1 + 42 57 65 1 + 42 57 66 1 + 42 57 67 1 + 42 57 68 1 + 42 57 69 1 + 42 57 70 1 + 42 57 71 1 + 42 57 72 1 + 42 57 73 1 + 42 57 74 1 + 42 57 75 0.884209 + 42 57 76 0.370069 + 42 57 77 0.0100187 + 42 58 50 0.105685 + 42 58 51 0.648356 + 42 58 52 0.991156 + 42 58 53 1 + 42 58 54 1 + 42 58 55 1 + 42 58 56 1 + 42 58 57 1 + 42 58 58 1 + 42 58 59 1 + 42 58 60 1 + 42 58 61 1 + 42 58 62 1 + 42 58 63 1 + 42 58 64 1 + 42 58 65 1 + 42 58 66 1 + 42 58 67 1 + 42 58 68 1 + 42 58 69 1 + 42 58 70 1 + 42 58 71 1 + 42 58 72 1 + 42 58 73 1 + 42 58 74 1 + 42 58 75 0.991156 + 42 58 76 0.648356 + 42 58 77 0.105685 + 42 59 49 0.000228244 + 42 59 50 0.28004 + 42 59 51 0.852122 + 42 59 52 1 + 42 59 53 1 + 42 59 54 1 + 42 59 55 1 + 42 59 56 1 + 42 59 57 1 + 42 59 58 1 + 42 59 59 1 + 42 59 60 1 + 42 59 61 1 + 42 59 62 1 + 42 59 63 1 + 42 59 64 1 + 42 59 65 1 + 42 59 66 1 + 42 59 67 1 + 42 59 68 1 + 42 59 69 1 + 42 59 70 1 + 42 59 71 1 + 42 59 72 1 + 42 59 73 1 + 42 59 74 1 + 42 59 75 1 + 42 59 76 0.852122 + 42 59 77 0.28004 + 42 59 78 0.000228244 + 42 60 49 0.0170305 + 42 60 50 0.462948 + 42 60 51 0.954076 + 42 60 52 1 + 42 60 53 1 + 42 60 54 1 + 42 60 55 1 + 42 60 56 1 + 42 60 57 1 + 42 60 58 1 + 42 60 59 1 + 42 60 60 1 + 42 60 61 1 + 42 60 62 1 + 42 60 63 1 + 42 60 64 1 + 42 60 65 1 + 42 60 66 1 + 42 60 67 1 + 42 60 68 1 + 42 60 69 1 + 42 60 70 1 + 42 60 71 1 + 42 60 72 1 + 42 60 73 1 + 42 60 74 1 + 42 60 75 1 + 42 60 76 0.954076 + 42 60 77 0.462948 + 42 60 78 0.0170305 + 42 61 49 0.061458 + 42 61 50 0.602307 + 42 61 51 0.992135 + 42 61 52 1 + 42 61 53 1 + 42 61 54 1 + 42 61 55 1 + 42 61 56 1 + 42 61 57 1 + 42 61 58 1 + 42 61 59 1 + 42 61 60 1 + 42 61 61 1 + 42 61 62 1 + 42 61 63 1 + 42 61 64 1 + 42 61 65 1 + 42 61 66 1 + 42 61 67 1 + 42 61 68 1 + 42 61 69 1 + 42 61 70 1 + 42 61 71 1 + 42 61 72 1 + 42 61 73 1 + 42 61 74 1 + 42 61 75 1 + 42 61 76 0.992135 + 42 61 77 0.602307 + 42 61 78 0.061458 + 42 62 49 0.10742 + 42 62 50 0.694555 + 42 62 51 0.99983 + 42 62 52 1 + 42 62 53 1 + 42 62 54 1 + 42 62 55 1 + 42 62 56 1 + 42 62 57 1 + 42 62 58 1 + 42 62 59 1 + 42 62 60 1 + 42 62 61 1 + 42 62 62 1 + 42 62 63 1 + 42 62 64 1 + 42 62 65 1 + 42 62 66 1 + 42 62 67 1 + 42 62 68 1 + 42 62 69 1 + 42 62 70 1 + 42 62 71 1 + 42 62 72 1 + 42 62 73 1 + 42 62 74 1 + 42 62 75 1 + 42 62 76 0.99983 + 42 62 77 0.694555 + 42 62 78 0.10742 + 42 63 49 0.135234 + 42 63 50 0.738943 + 42 63 51 1 + 42 63 52 1 + 42 63 53 1 + 42 63 54 1 + 42 63 55 1 + 42 63 56 1 + 42 63 57 1 + 42 63 58 1 + 42 63 59 1 + 42 63 60 1 + 42 63 61 1 + 42 63 62 1 + 42 63 63 1 + 42 63 64 1 + 42 63 65 1 + 42 63 66 1 + 42 63 67 1 + 42 63 68 1 + 42 63 69 1 + 42 63 70 1 + 42 63 71 1 + 42 63 72 1 + 42 63 73 1 + 42 63 74 1 + 42 63 75 1 + 42 63 76 1 + 42 63 77 0.738943 + 42 63 78 0.135234 + 42 64 49 0.135234 + 42 64 50 0.738943 + 42 64 51 1 + 42 64 52 1 + 42 64 53 1 + 42 64 54 1 + 42 64 55 1 + 42 64 56 1 + 42 64 57 1 + 42 64 58 1 + 42 64 59 1 + 42 64 60 1 + 42 64 61 1 + 42 64 62 1 + 42 64 63 1 + 42 64 64 1 + 42 64 65 1 + 42 64 66 1 + 42 64 67 1 + 42 64 68 1 + 42 64 69 1 + 42 64 70 1 + 42 64 71 1 + 42 64 72 1 + 42 64 73 1 + 42 64 74 1 + 42 64 75 1 + 42 64 76 1 + 42 64 77 0.738943 + 42 64 78 0.135234 + 42 65 49 0.10742 + 42 65 50 0.694555 + 42 65 51 0.99983 + 42 65 52 1 + 42 65 53 1 + 42 65 54 1 + 42 65 55 1 + 42 65 56 1 + 42 65 57 1 + 42 65 58 1 + 42 65 59 1 + 42 65 60 1 + 42 65 61 1 + 42 65 62 1 + 42 65 63 1 + 42 65 64 1 + 42 65 65 1 + 42 65 66 1 + 42 65 67 1 + 42 65 68 1 + 42 65 69 1 + 42 65 70 1 + 42 65 71 1 + 42 65 72 1 + 42 65 73 1 + 42 65 74 1 + 42 65 75 1 + 42 65 76 0.99983 + 42 65 77 0.694555 + 42 65 78 0.10742 + 42 66 49 0.061458 + 42 66 50 0.602307 + 42 66 51 0.992135 + 42 66 52 1 + 42 66 53 1 + 42 66 54 1 + 42 66 55 1 + 42 66 56 1 + 42 66 57 1 + 42 66 58 1 + 42 66 59 1 + 42 66 60 1 + 42 66 61 1 + 42 66 62 1 + 42 66 63 1 + 42 66 64 1 + 42 66 65 1 + 42 66 66 1 + 42 66 67 1 + 42 66 68 1 + 42 66 69 1 + 42 66 70 1 + 42 66 71 1 + 42 66 72 1 + 42 66 73 1 + 42 66 74 1 + 42 66 75 1 + 42 66 76 0.992135 + 42 66 77 0.602307 + 42 66 78 0.061458 + 42 67 49 0.0170305 + 42 67 50 0.462948 + 42 67 51 0.954076 + 42 67 52 1 + 42 67 53 1 + 42 67 54 1 + 42 67 55 1 + 42 67 56 1 + 42 67 57 1 + 42 67 58 1 + 42 67 59 1 + 42 67 60 1 + 42 67 61 1 + 42 67 62 1 + 42 67 63 1 + 42 67 64 1 + 42 67 65 1 + 42 67 66 1 + 42 67 67 1 + 42 67 68 1 + 42 67 69 1 + 42 67 70 1 + 42 67 71 1 + 42 67 72 1 + 42 67 73 1 + 42 67 74 1 + 42 67 75 1 + 42 67 76 0.954076 + 42 67 77 0.462948 + 42 67 78 0.0170305 + 42 68 49 0.000228244 + 42 68 50 0.28004 + 42 68 51 0.852122 + 42 68 52 1 + 42 68 53 1 + 42 68 54 1 + 42 68 55 1 + 42 68 56 1 + 42 68 57 1 + 42 68 58 1 + 42 68 59 1 + 42 68 60 1 + 42 68 61 1 + 42 68 62 1 + 42 68 63 1 + 42 68 64 1 + 42 68 65 1 + 42 68 66 1 + 42 68 67 1 + 42 68 68 1 + 42 68 69 1 + 42 68 70 1 + 42 68 71 1 + 42 68 72 1 + 42 68 73 1 + 42 68 74 1 + 42 68 75 1 + 42 68 76 0.852122 + 42 68 77 0.28004 + 42 68 78 0.000228244 + 42 69 50 0.105685 + 42 69 51 0.648356 + 42 69 52 0.991156 + 42 69 53 1 + 42 69 54 1 + 42 69 55 1 + 42 69 56 1 + 42 69 57 1 + 42 69 58 1 + 42 69 59 1 + 42 69 60 1 + 42 69 61 1 + 42 69 62 1 + 42 69 63 1 + 42 69 64 1 + 42 69 65 1 + 42 69 66 1 + 42 69 67 1 + 42 69 68 1 + 42 69 69 1 + 42 69 70 1 + 42 69 71 1 + 42 69 72 1 + 42 69 73 1 + 42 69 74 1 + 42 69 75 0.991156 + 42 69 76 0.648356 + 42 69 77 0.105685 + 42 70 50 0.0100187 + 42 70 51 0.370069 + 42 70 52 0.884209 + 42 70 53 1 + 42 70 54 1 + 42 70 55 1 + 42 70 56 1 + 42 70 57 1 + 42 70 58 1 + 42 70 59 1 + 42 70 60 1 + 42 70 61 1 + 42 70 62 1 + 42 70 63 1 + 42 70 64 1 + 42 70 65 1 + 42 70 66 1 + 42 70 67 1 + 42 70 68 1 + 42 70 69 1 + 42 70 70 1 + 42 70 71 1 + 42 70 72 1 + 42 70 73 1 + 42 70 74 1 + 42 70 75 0.884209 + 42 70 76 0.370069 + 42 70 77 0.0100187 + 42 71 51 0.104302 + 42 71 52 0.602276 + 42 71 53 0.971405 + 42 71 54 1 + 42 71 55 1 + 42 71 56 1 + 42 71 57 1 + 42 71 58 1 + 42 71 59 1 + 42 71 60 1 + 42 71 61 1 + 42 71 62 1 + 42 71 63 1 + 42 71 64 1 + 42 71 65 1 + 42 71 66 1 + 42 71 67 1 + 42 71 68 1 + 42 71 69 1 + 42 71 70 1 + 42 71 71 1 + 42 71 72 1 + 42 71 73 1 + 42 71 74 0.971405 + 42 71 75 0.602276 + 42 71 76 0.104302 + 42 72 51 0.00260739 + 42 72 52 0.240042 + 42 72 53 0.736168 + 42 72 54 0.990286 + 42 72 55 1 + 42 72 56 1 + 42 72 57 1 + 42 72 58 1 + 42 72 59 1 + 42 72 60 1 + 42 72 61 1 + 42 72 62 1 + 42 72 63 1 + 42 72 64 1 + 42 72 65 1 + 42 72 66 1 + 42 72 67 1 + 42 72 68 1 + 42 72 69 1 + 42 72 70 1 + 42 72 71 1 + 42 72 72 1 + 42 72 73 0.990286 + 42 72 74 0.736168 + 42 72 75 0.240042 + 42 72 76 0.00260739 + 42 73 52 0.0182812 + 42 73 53 0.325363 + 42 73 54 0.777432 + 42 73 55 0.990286 + 42 73 56 1 + 42 73 57 1 + 42 73 58 1 + 42 73 59 1 + 42 73 60 1 + 42 73 61 1 + 42 73 62 1 + 42 73 63 1 + 42 73 64 1 + 42 73 65 1 + 42 73 66 1 + 42 73 67 1 + 42 73 68 1 + 42 73 69 1 + 42 73 70 1 + 42 73 71 1 + 42 73 72 0.990286 + 42 73 73 0.777432 + 42 73 74 0.325363 + 42 73 75 0.0182812 + 42 74 53 0.0282569 + 42 74 54 0.325363 + 42 74 55 0.736168 + 42 74 56 0.971405 + 42 74 57 1 + 42 74 58 1 + 42 74 59 1 + 42 74 60 1 + 42 74 61 1 + 42 74 62 1 + 42 74 63 1 + 42 74 64 1 + 42 74 65 1 + 42 74 66 1 + 42 74 67 1 + 42 74 68 1 + 42 74 69 1 + 42 74 70 1 + 42 74 71 0.971405 + 42 74 72 0.736168 + 42 74 73 0.325363 + 42 74 74 0.0282569 + 42 75 54 0.0182812 + 42 75 55 0.240042 + 42 75 56 0.602276 + 42 75 57 0.884209 + 42 75 58 0.991156 + 42 75 59 1 + 42 75 60 1 + 42 75 61 1 + 42 75 62 1 + 42 75 63 1 + 42 75 64 1 + 42 75 65 1 + 42 75 66 1 + 42 75 67 1 + 42 75 68 1 + 42 75 69 0.991156 + 42 75 70 0.884209 + 42 75 71 0.602276 + 42 75 72 0.240042 + 42 75 73 0.0182812 + 42 76 55 0.00260739 + 42 76 56 0.104302 + 42 76 57 0.370069 + 42 76 58 0.648356 + 42 76 59 0.852122 + 42 76 60 0.954076 + 42 76 61 0.992135 + 42 76 62 0.99983 + 42 76 63 1 + 42 76 64 1 + 42 76 65 0.99983 + 42 76 66 0.992135 + 42 76 67 0.954076 + 42 76 68 0.852122 + 42 76 69 0.648356 + 42 76 70 0.370069 + 42 76 71 0.104302 + 42 76 72 0.00260739 + 42 77 57 0.0100187 + 42 77 58 0.105685 + 42 77 59 0.28004 + 42 77 60 0.462948 + 42 77 61 0.602307 + 42 77 62 0.694555 + 42 77 63 0.738943 + 42 77 64 0.738943 + 42 77 65 0.694555 + 42 77 66 0.602307 + 42 77 67 0.462948 + 42 77 68 0.28004 + 42 77 69 0.105685 + 42 77 70 0.0100187 + 42 78 59 0.000228244 + 42 78 60 0.0170305 + 42 78 61 0.061458 + 42 78 62 0.10742 + 42 78 63 0.135234 + 42 78 64 0.135234 + 42 78 65 0.10742 + 42 78 66 0.061458 + 42 78 67 0.0170305 + 42 78 68 0.000228244 + 43 48 58 0.00207515 + 43 48 59 0.0441313 + 43 48 60 0.134257 + 43 48 61 0.234894 + 43 48 62 0.317411 + 43 48 63 0.363238 + 43 48 64 0.363238 + 43 48 65 0.317411 + 43 48 66 0.234894 + 43 48 67 0.134257 + 43 48 68 0.0441313 + 43 48 69 0.00207515 + 43 49 56 0.0114126 + 43 49 57 0.132621 + 43 49 58 0.364963 + 43 49 59 0.606763 + 43 49 60 0.783221 + 43 49 61 0.882567 + 43 49 62 0.931908 + 43 49 63 0.951583 + 43 49 64 0.951583 + 43 49 65 0.931908 + 43 49 66 0.882567 + 43 49 67 0.783221 + 43 49 68 0.606763 + 43 49 69 0.364963 + 43 49 70 0.132621 + 43 49 71 0.0114126 + 43 50 54 0.00135226 + 43 50 55 0.103719 + 43 50 56 0.41284 + 43 50 57 0.742086 + 43 50 58 0.933643 + 43 50 59 0.995674 + 43 50 60 1 + 43 50 61 1 + 43 50 62 1 + 43 50 63 1 + 43 50 64 1 + 43 50 65 1 + 43 50 66 1 + 43 50 67 1 + 43 50 68 0.995674 + 43 50 69 0.933643 + 43 50 70 0.742086 + 43 50 71 0.41284 + 43 50 72 0.103719 + 43 50 73 0.00135226 + 43 51 53 0.0123857 + 43 51 54 0.23592 + 43 51 55 0.652868 + 43 51 56 0.935026 + 43 51 57 0.999467 + 43 51 58 1 + 43 51 59 1 + 43 51 60 1 + 43 51 61 1 + 43 51 62 1 + 43 51 63 1 + 43 51 64 1 + 43 51 65 1 + 43 51 66 1 + 43 51 67 1 + 43 51 68 1 + 43 51 69 1 + 43 51 70 0.999467 + 43 51 71 0.935026 + 43 51 72 0.652868 + 43 51 73 0.23592 + 43 51 74 0.0123857 + 43 52 52 0.0199 + 43 52 53 0.320873 + 43 52 54 0.78197 + 43 52 55 0.988606 + 43 52 56 1 + 43 52 57 1 + 43 52 58 1 + 43 52 59 1 + 43 52 60 1 + 43 52 61 1 + 43 52 62 1 + 43 52 63 1 + 43 52 64 1 + 43 52 65 1 + 43 52 66 1 + 43 52 67 1 + 43 52 68 1 + 43 52 69 1 + 43 52 70 1 + 43 52 71 1 + 43 52 72 0.988606 + 43 52 73 0.78197 + 43 52 74 0.320873 + 43 52 75 0.0199 + 43 53 51 0.0123857 + 43 53 52 0.320873 + 43 53 53 0.820029 + 43 53 54 0.997314 + 43 53 55 1 + 43 53 56 1 + 43 53 57 1 + 43 53 58 1 + 43 53 59 1 + 43 53 60 1 + 43 53 61 1 + 43 53 62 1 + 43 53 63 1 + 43 53 64 1 + 43 53 65 1 + 43 53 66 1 + 43 53 67 1 + 43 53 68 1 + 43 53 69 1 + 43 53 70 1 + 43 53 71 1 + 43 53 72 1 + 43 53 73 0.997314 + 43 53 74 0.820029 + 43 53 75 0.320873 + 43 53 76 0.0123857 + 43 54 50 0.00135226 + 43 54 51 0.23592 + 43 54 52 0.78197 + 43 54 53 0.997314 + 43 54 54 1 + 43 54 55 1 + 43 54 56 1 + 43 54 57 1 + 43 54 58 1 + 43 54 59 1 + 43 54 60 1 + 43 54 61 1 + 43 54 62 1 + 43 54 63 1 + 43 54 64 1 + 43 54 65 1 + 43 54 66 1 + 43 54 67 1 + 43 54 68 1 + 43 54 69 1 + 43 54 70 1 + 43 54 71 1 + 43 54 72 1 + 43 54 73 1 + 43 54 74 0.997314 + 43 54 75 0.78197 + 43 54 76 0.23592 + 43 54 77 0.00135226 + 43 55 50 0.103719 + 43 55 51 0.652868 + 43 55 52 0.988606 + 43 55 53 1 + 43 55 54 1 + 43 55 55 1 + 43 55 56 1 + 43 55 57 1 + 43 55 58 1 + 43 55 59 1 + 43 55 60 1 + 43 55 61 1 + 43 55 62 1 + 43 55 63 1 + 43 55 64 1 + 43 55 65 1 + 43 55 66 1 + 43 55 67 1 + 43 55 68 1 + 43 55 69 1 + 43 55 70 1 + 43 55 71 1 + 43 55 72 1 + 43 55 73 1 + 43 55 74 1 + 43 55 75 0.988606 + 43 55 76 0.652868 + 43 55 77 0.103719 + 43 56 49 0.0114126 + 43 56 50 0.41284 + 43 56 51 0.935026 + 43 56 52 1 + 43 56 53 1 + 43 56 54 1 + 43 56 55 1 + 43 56 56 1 + 43 56 57 1 + 43 56 58 1 + 43 56 59 1 + 43 56 60 1 + 43 56 61 1 + 43 56 62 1 + 43 56 63 1 + 43 56 64 1 + 43 56 65 1 + 43 56 66 1 + 43 56 67 1 + 43 56 68 1 + 43 56 69 1 + 43 56 70 1 + 43 56 71 1 + 43 56 72 1 + 43 56 73 1 + 43 56 74 1 + 43 56 75 1 + 43 56 76 0.935026 + 43 56 77 0.41284 + 43 56 78 0.0114126 + 43 57 49 0.132621 + 43 57 50 0.742086 + 43 57 51 0.999467 + 43 57 52 1 + 43 57 53 1 + 43 57 54 1 + 43 57 55 1 + 43 57 56 1 + 43 57 57 1 + 43 57 58 1 + 43 57 59 1 + 43 57 60 1 + 43 57 61 1 + 43 57 62 1 + 43 57 63 1 + 43 57 64 1 + 43 57 65 1 + 43 57 66 1 + 43 57 67 1 + 43 57 68 1 + 43 57 69 1 + 43 57 70 1 + 43 57 71 1 + 43 57 72 1 + 43 57 73 1 + 43 57 74 1 + 43 57 75 1 + 43 57 76 0.999467 + 43 57 77 0.742086 + 43 57 78 0.132621 + 43 58 48 0.00207515 + 43 58 49 0.364963 + 43 58 50 0.933643 + 43 58 51 1 + 43 58 52 1 + 43 58 53 1 + 43 58 54 1 + 43 58 55 1 + 43 58 56 1 + 43 58 57 1 + 43 58 58 1 + 43 58 59 1 + 43 58 60 1 + 43 58 61 1 + 43 58 62 1 + 43 58 63 1 + 43 58 64 1 + 43 58 65 1 + 43 58 66 1 + 43 58 67 1 + 43 58 68 1 + 43 58 69 1 + 43 58 70 1 + 43 58 71 1 + 43 58 72 1 + 43 58 73 1 + 43 58 74 1 + 43 58 75 1 + 43 58 76 1 + 43 58 77 0.933643 + 43 58 78 0.364963 + 43 58 79 0.00207515 + 43 59 48 0.0441313 + 43 59 49 0.606763 + 43 59 50 0.995674 + 43 59 51 1 + 43 59 52 1 + 43 59 53 1 + 43 59 54 1 + 43 59 55 1 + 43 59 56 1 + 43 59 57 1 + 43 59 58 1 + 43 59 59 1 + 43 59 60 1 + 43 59 61 1 + 43 59 62 1 + 43 59 63 1 + 43 59 64 1 + 43 59 65 1 + 43 59 66 1 + 43 59 67 1 + 43 59 68 1 + 43 59 69 1 + 43 59 70 1 + 43 59 71 1 + 43 59 72 1 + 43 59 73 1 + 43 59 74 1 + 43 59 75 1 + 43 59 76 1 + 43 59 77 0.995674 + 43 59 78 0.606763 + 43 59 79 0.0441313 + 43 60 48 0.134257 + 43 60 49 0.783221 + 43 60 50 1 + 43 60 51 1 + 43 60 52 1 + 43 60 53 1 + 43 60 54 1 + 43 60 55 1 + 43 60 56 1 + 43 60 57 1 + 43 60 58 1 + 43 60 59 1 + 43 60 60 1 + 43 60 61 1 + 43 60 62 1 + 43 60 63 1 + 43 60 64 1 + 43 60 65 1 + 43 60 66 1 + 43 60 67 1 + 43 60 68 1 + 43 60 69 1 + 43 60 70 1 + 43 60 71 1 + 43 60 72 1 + 43 60 73 1 + 43 60 74 1 + 43 60 75 1 + 43 60 76 1 + 43 60 77 1 + 43 60 78 0.783221 + 43 60 79 0.134257 + 43 61 48 0.234894 + 43 61 49 0.882567 + 43 61 50 1 + 43 61 51 1 + 43 61 52 1 + 43 61 53 1 + 43 61 54 1 + 43 61 55 1 + 43 61 56 1 + 43 61 57 1 + 43 61 58 1 + 43 61 59 1 + 43 61 60 1 + 43 61 61 1 + 43 61 62 1 + 43 61 63 1 + 43 61 64 1 + 43 61 65 1 + 43 61 66 1 + 43 61 67 1 + 43 61 68 1 + 43 61 69 1 + 43 61 70 1 + 43 61 71 1 + 43 61 72 1 + 43 61 73 1 + 43 61 74 1 + 43 61 75 1 + 43 61 76 1 + 43 61 77 1 + 43 61 78 0.882567 + 43 61 79 0.234894 + 43 62 48 0.317411 + 43 62 49 0.931908 + 43 62 50 1 + 43 62 51 1 + 43 62 52 1 + 43 62 53 1 + 43 62 54 1 + 43 62 55 1 + 43 62 56 1 + 43 62 57 1 + 43 62 58 1 + 43 62 59 1 + 43 62 60 1 + 43 62 61 1 + 43 62 62 1 + 43 62 63 1 + 43 62 64 1 + 43 62 65 1 + 43 62 66 1 + 43 62 67 1 + 43 62 68 1 + 43 62 69 1 + 43 62 70 1 + 43 62 71 1 + 43 62 72 1 + 43 62 73 1 + 43 62 74 1 + 43 62 75 1 + 43 62 76 1 + 43 62 77 1 + 43 62 78 0.931908 + 43 62 79 0.317411 + 43 63 48 0.363238 + 43 63 49 0.951583 + 43 63 50 1 + 43 63 51 1 + 43 63 52 1 + 43 63 53 1 + 43 63 54 1 + 43 63 55 1 + 43 63 56 1 + 43 63 57 1 + 43 63 58 1 + 43 63 59 1 + 43 63 60 1 + 43 63 61 1 + 43 63 62 1 + 43 63 63 1 + 43 63 64 1 + 43 63 65 1 + 43 63 66 1 + 43 63 67 1 + 43 63 68 1 + 43 63 69 1 + 43 63 70 1 + 43 63 71 1 + 43 63 72 1 + 43 63 73 1 + 43 63 74 1 + 43 63 75 1 + 43 63 76 1 + 43 63 77 1 + 43 63 78 0.951583 + 43 63 79 0.363238 + 43 64 48 0.363238 + 43 64 49 0.951583 + 43 64 50 1 + 43 64 51 1 + 43 64 52 1 + 43 64 53 1 + 43 64 54 1 + 43 64 55 1 + 43 64 56 1 + 43 64 57 1 + 43 64 58 1 + 43 64 59 1 + 43 64 60 1 + 43 64 61 1 + 43 64 62 1 + 43 64 63 1 + 43 64 64 1 + 43 64 65 1 + 43 64 66 1 + 43 64 67 1 + 43 64 68 1 + 43 64 69 1 + 43 64 70 1 + 43 64 71 1 + 43 64 72 1 + 43 64 73 1 + 43 64 74 1 + 43 64 75 1 + 43 64 76 1 + 43 64 77 1 + 43 64 78 0.951583 + 43 64 79 0.363238 + 43 65 48 0.317411 + 43 65 49 0.931908 + 43 65 50 1 + 43 65 51 1 + 43 65 52 1 + 43 65 53 1 + 43 65 54 1 + 43 65 55 1 + 43 65 56 1 + 43 65 57 1 + 43 65 58 1 + 43 65 59 1 + 43 65 60 1 + 43 65 61 1 + 43 65 62 1 + 43 65 63 1 + 43 65 64 1 + 43 65 65 1 + 43 65 66 1 + 43 65 67 1 + 43 65 68 1 + 43 65 69 1 + 43 65 70 1 + 43 65 71 1 + 43 65 72 1 + 43 65 73 1 + 43 65 74 1 + 43 65 75 1 + 43 65 76 1 + 43 65 77 1 + 43 65 78 0.931908 + 43 65 79 0.317411 + 43 66 48 0.234894 + 43 66 49 0.882567 + 43 66 50 1 + 43 66 51 1 + 43 66 52 1 + 43 66 53 1 + 43 66 54 1 + 43 66 55 1 + 43 66 56 1 + 43 66 57 1 + 43 66 58 1 + 43 66 59 1 + 43 66 60 1 + 43 66 61 1 + 43 66 62 1 + 43 66 63 1 + 43 66 64 1 + 43 66 65 1 + 43 66 66 1 + 43 66 67 1 + 43 66 68 1 + 43 66 69 1 + 43 66 70 1 + 43 66 71 1 + 43 66 72 1 + 43 66 73 1 + 43 66 74 1 + 43 66 75 1 + 43 66 76 1 + 43 66 77 1 + 43 66 78 0.882567 + 43 66 79 0.234894 + 43 67 48 0.134257 + 43 67 49 0.783221 + 43 67 50 1 + 43 67 51 1 + 43 67 52 1 + 43 67 53 1 + 43 67 54 1 + 43 67 55 1 + 43 67 56 1 + 43 67 57 1 + 43 67 58 1 + 43 67 59 1 + 43 67 60 1 + 43 67 61 1 + 43 67 62 1 + 43 67 63 1 + 43 67 64 1 + 43 67 65 1 + 43 67 66 1 + 43 67 67 1 + 43 67 68 1 + 43 67 69 1 + 43 67 70 1 + 43 67 71 1 + 43 67 72 1 + 43 67 73 1 + 43 67 74 1 + 43 67 75 1 + 43 67 76 1 + 43 67 77 1 + 43 67 78 0.783221 + 43 67 79 0.134257 + 43 68 48 0.0441313 + 43 68 49 0.606763 + 43 68 50 0.995674 + 43 68 51 1 + 43 68 52 1 + 43 68 53 1 + 43 68 54 1 + 43 68 55 1 + 43 68 56 1 + 43 68 57 1 + 43 68 58 1 + 43 68 59 1 + 43 68 60 1 + 43 68 61 1 + 43 68 62 1 + 43 68 63 1 + 43 68 64 1 + 43 68 65 1 + 43 68 66 1 + 43 68 67 1 + 43 68 68 1 + 43 68 69 1 + 43 68 70 1 + 43 68 71 1 + 43 68 72 1 + 43 68 73 1 + 43 68 74 1 + 43 68 75 1 + 43 68 76 1 + 43 68 77 0.995674 + 43 68 78 0.606763 + 43 68 79 0.0441313 + 43 69 48 0.00207515 + 43 69 49 0.364963 + 43 69 50 0.933643 + 43 69 51 1 + 43 69 52 1 + 43 69 53 1 + 43 69 54 1 + 43 69 55 1 + 43 69 56 1 + 43 69 57 1 + 43 69 58 1 + 43 69 59 1 + 43 69 60 1 + 43 69 61 1 + 43 69 62 1 + 43 69 63 1 + 43 69 64 1 + 43 69 65 1 + 43 69 66 1 + 43 69 67 1 + 43 69 68 1 + 43 69 69 1 + 43 69 70 1 + 43 69 71 1 + 43 69 72 1 + 43 69 73 1 + 43 69 74 1 + 43 69 75 1 + 43 69 76 1 + 43 69 77 0.933643 + 43 69 78 0.364963 + 43 69 79 0.00207515 + 43 70 49 0.132621 + 43 70 50 0.742086 + 43 70 51 0.999467 + 43 70 52 1 + 43 70 53 1 + 43 70 54 1 + 43 70 55 1 + 43 70 56 1 + 43 70 57 1 + 43 70 58 1 + 43 70 59 1 + 43 70 60 1 + 43 70 61 1 + 43 70 62 1 + 43 70 63 1 + 43 70 64 1 + 43 70 65 1 + 43 70 66 1 + 43 70 67 1 + 43 70 68 1 + 43 70 69 1 + 43 70 70 1 + 43 70 71 1 + 43 70 72 1 + 43 70 73 1 + 43 70 74 1 + 43 70 75 1 + 43 70 76 0.999467 + 43 70 77 0.742086 + 43 70 78 0.132621 + 43 71 49 0.0114126 + 43 71 50 0.41284 + 43 71 51 0.935026 + 43 71 52 1 + 43 71 53 1 + 43 71 54 1 + 43 71 55 1 + 43 71 56 1 + 43 71 57 1 + 43 71 58 1 + 43 71 59 1 + 43 71 60 1 + 43 71 61 1 + 43 71 62 1 + 43 71 63 1 + 43 71 64 1 + 43 71 65 1 + 43 71 66 1 + 43 71 67 1 + 43 71 68 1 + 43 71 69 1 + 43 71 70 1 + 43 71 71 1 + 43 71 72 1 + 43 71 73 1 + 43 71 74 1 + 43 71 75 1 + 43 71 76 0.935026 + 43 71 77 0.41284 + 43 71 78 0.0114126 + 43 72 50 0.103719 + 43 72 51 0.652868 + 43 72 52 0.988606 + 43 72 53 1 + 43 72 54 1 + 43 72 55 1 + 43 72 56 1 + 43 72 57 1 + 43 72 58 1 + 43 72 59 1 + 43 72 60 1 + 43 72 61 1 + 43 72 62 1 + 43 72 63 1 + 43 72 64 1 + 43 72 65 1 + 43 72 66 1 + 43 72 67 1 + 43 72 68 1 + 43 72 69 1 + 43 72 70 1 + 43 72 71 1 + 43 72 72 1 + 43 72 73 1 + 43 72 74 1 + 43 72 75 0.988606 + 43 72 76 0.652868 + 43 72 77 0.103719 + 43 73 50 0.00135226 + 43 73 51 0.23592 + 43 73 52 0.78197 + 43 73 53 0.997314 + 43 73 54 1 + 43 73 55 1 + 43 73 56 1 + 43 73 57 1 + 43 73 58 1 + 43 73 59 1 + 43 73 60 1 + 43 73 61 1 + 43 73 62 1 + 43 73 63 1 + 43 73 64 1 + 43 73 65 1 + 43 73 66 1 + 43 73 67 1 + 43 73 68 1 + 43 73 69 1 + 43 73 70 1 + 43 73 71 1 + 43 73 72 1 + 43 73 73 1 + 43 73 74 0.997314 + 43 73 75 0.78197 + 43 73 76 0.23592 + 43 73 77 0.00135226 + 43 74 51 0.0123857 + 43 74 52 0.320873 + 43 74 53 0.820029 + 43 74 54 0.997314 + 43 74 55 1 + 43 74 56 1 + 43 74 57 1 + 43 74 58 1 + 43 74 59 1 + 43 74 60 1 + 43 74 61 1 + 43 74 62 1 + 43 74 63 1 + 43 74 64 1 + 43 74 65 1 + 43 74 66 1 + 43 74 67 1 + 43 74 68 1 + 43 74 69 1 + 43 74 70 1 + 43 74 71 1 + 43 74 72 1 + 43 74 73 0.997314 + 43 74 74 0.820029 + 43 74 75 0.320873 + 43 74 76 0.0123857 + 43 75 52 0.0199 + 43 75 53 0.320873 + 43 75 54 0.78197 + 43 75 55 0.988606 + 43 75 56 1 + 43 75 57 1 + 43 75 58 1 + 43 75 59 1 + 43 75 60 1 + 43 75 61 1 + 43 75 62 1 + 43 75 63 1 + 43 75 64 1 + 43 75 65 1 + 43 75 66 1 + 43 75 67 1 + 43 75 68 1 + 43 75 69 1 + 43 75 70 1 + 43 75 71 1 + 43 75 72 0.988606 + 43 75 73 0.78197 + 43 75 74 0.320873 + 43 75 75 0.0199 + 43 76 53 0.0123857 + 43 76 54 0.23592 + 43 76 55 0.652868 + 43 76 56 0.935026 + 43 76 57 0.999467 + 43 76 58 1 + 43 76 59 1 + 43 76 60 1 + 43 76 61 1 + 43 76 62 1 + 43 76 63 1 + 43 76 64 1 + 43 76 65 1 + 43 76 66 1 + 43 76 67 1 + 43 76 68 1 + 43 76 69 1 + 43 76 70 0.999467 + 43 76 71 0.935026 + 43 76 72 0.652868 + 43 76 73 0.23592 + 43 76 74 0.0123857 + 43 77 54 0.00135226 + 43 77 55 0.103719 + 43 77 56 0.41284 + 43 77 57 0.742086 + 43 77 58 0.933643 + 43 77 59 0.995674 + 43 77 60 1 + 43 77 61 1 + 43 77 62 1 + 43 77 63 1 + 43 77 64 1 + 43 77 65 1 + 43 77 66 1 + 43 77 67 1 + 43 77 68 0.995674 + 43 77 69 0.933643 + 43 77 70 0.742086 + 43 77 71 0.41284 + 43 77 72 0.103719 + 43 77 73 0.00135226 + 43 78 56 0.0114126 + 43 78 57 0.132621 + 43 78 58 0.364963 + 43 78 59 0.606763 + 43 78 60 0.783221 + 43 78 61 0.882567 + 43 78 62 0.931908 + 43 78 63 0.951583 + 43 78 64 0.951583 + 43 78 65 0.931908 + 43 78 66 0.882567 + 43 78 67 0.783221 + 43 78 68 0.606763 + 43 78 69 0.364963 + 43 78 70 0.132621 + 43 78 71 0.0114126 + 43 79 58 0.00207515 + 43 79 59 0.0441313 + 43 79 60 0.134257 + 43 79 61 0.234894 + 43 79 62 0.317411 + 43 79 63 0.363238 + 43 79 64 0.363238 + 43 79 65 0.317411 + 43 79 66 0.234894 + 43 79 67 0.134257 + 43 79 68 0.0441313 + 43 79 69 0.00207515 + 44 46 61 7.7901e-05 + 44 46 62 0.00382379 + 44 46 63 0.00976158 + 44 46 64 0.00976158 + 44 46 65 0.00382379 + 44 46 66 7.7901e-05 + 44 47 57 0.000148631 + 44 47 58 0.0302985 + 44 47 59 0.133628 + 44 47 60 0.27231 + 44 47 61 0.408101 + 44 47 62 0.509823 + 44 47 63 0.561032 + 44 47 64 0.561032 + 44 47 65 0.509823 + 44 47 66 0.408101 + 44 47 67 0.27231 + 44 47 68 0.133628 + 44 47 69 0.0302985 + 44 47 70 0.000148631 + 44 48 55 0.00138601 + 44 48 56 0.0811434 + 44 48 57 0.315874 + 44 48 58 0.610031 + 44 48 59 0.821374 + 44 48 60 0.93166 + 44 48 61 0.980027 + 44 48 62 0.996238 + 44 48 63 0.999595 + 44 48 64 0.999595 + 44 48 65 0.996238 + 44 48 66 0.980027 + 44 48 67 0.93166 + 44 48 68 0.821374 + 44 48 69 0.610031 + 44 48 70 0.315874 + 44 48 71 0.0811434 + 44 48 72 0.00138601 + 44 49 54 0.0436378 + 44 49 55 0.316818 + 44 49 56 0.702444 + 44 49 57 0.933296 + 44 49 58 0.99787 + 44 49 59 1 + 44 49 60 1 + 44 49 61 1 + 44 49 62 1 + 44 49 63 1 + 44 49 64 1 + 44 49 65 1 + 44 49 66 1 + 44 49 67 1 + 44 49 68 1 + 44 49 69 0.99787 + 44 49 70 0.933296 + 44 49 71 0.702444 + 44 49 72 0.316818 + 44 49 73 0.0436378 + 44 50 52 0.00062971 + 44 50 53 0.129326 + 44 50 54 0.559714 + 44 50 55 0.912283 + 44 50 56 0.999058 + 44 50 57 1 + 44 50 58 1 + 44 50 59 1 + 44 50 60 1 + 44 50 61 1 + 44 50 62 1 + 44 50 63 1 + 44 50 64 1 + 44 50 65 1 + 44 50 66 1 + 44 50 67 1 + 44 50 68 1 + 44 50 69 1 + 44 50 70 1 + 44 50 71 0.999058 + 44 50 72 0.912283 + 44 50 73 0.559714 + 44 50 74 0.129326 + 44 50 75 0.00062971 + 44 51 51 0.00193335 + 44 51 52 0.194777 + 44 51 53 0.701471 + 44 51 54 0.979001 + 44 51 55 1 + 44 51 56 1 + 44 51 57 1 + 44 51 58 1 + 44 51 59 1 + 44 51 60 1 + 44 51 61 1 + 44 51 62 1 + 44 51 63 1 + 44 51 64 1 + 44 51 65 1 + 44 51 66 1 + 44 51 67 1 + 44 51 68 1 + 44 51 69 1 + 44 51 70 1 + 44 51 71 1 + 44 51 72 1 + 44 51 73 0.979001 + 44 51 74 0.701471 + 44 51 75 0.194777 + 44 51 76 0.00193335 + 44 52 50 0.00062971 + 44 52 51 0.194777 + 44 52 52 0.744636 + 44 52 53 0.992776 + 44 52 54 1 + 44 52 55 1 + 44 52 56 1 + 44 52 57 1 + 44 52 58 1 + 44 52 59 1 + 44 52 60 1 + 44 52 61 1 + 44 52 62 1 + 44 52 63 1 + 44 52 64 1 + 44 52 65 1 + 44 52 66 1 + 44 52 67 1 + 44 52 68 1 + 44 52 69 1 + 44 52 70 1 + 44 52 71 1 + 44 52 72 1 + 44 52 73 1 + 44 52 74 0.992776 + 44 52 75 0.744636 + 44 52 76 0.194777 + 44 52 77 0.00062971 + 44 53 50 0.129326 + 44 53 51 0.701471 + 44 53 52 0.992776 + 44 53 53 1 + 44 53 54 1 + 44 53 55 1 + 44 53 56 1 + 44 53 57 1 + 44 53 58 1 + 44 53 59 1 + 44 53 60 1 + 44 53 61 1 + 44 53 62 1 + 44 53 63 1 + 44 53 64 1 + 44 53 65 1 + 44 53 66 1 + 44 53 67 1 + 44 53 68 1 + 44 53 69 1 + 44 53 70 1 + 44 53 71 1 + 44 53 72 1 + 44 53 73 1 + 44 53 74 1 + 44 53 75 0.992776 + 44 53 76 0.701471 + 44 53 77 0.129326 + 44 54 49 0.0436378 + 44 54 50 0.559714 + 44 54 51 0.979001 + 44 54 52 1 + 44 54 53 1 + 44 54 54 1 + 44 54 55 1 + 44 54 56 1 + 44 54 57 1 + 44 54 58 1 + 44 54 59 1 + 44 54 60 1 + 44 54 61 1 + 44 54 62 1 + 44 54 63 1 + 44 54 64 1 + 44 54 65 1 + 44 54 66 1 + 44 54 67 1 + 44 54 68 1 + 44 54 69 1 + 44 54 70 1 + 44 54 71 1 + 44 54 72 1 + 44 54 73 1 + 44 54 74 1 + 44 54 75 1 + 44 54 76 0.979001 + 44 54 77 0.559714 + 44 54 78 0.0436378 + 44 55 48 0.00138601 + 44 55 49 0.316818 + 44 55 50 0.912283 + 44 55 51 1 + 44 55 52 1 + 44 55 53 1 + 44 55 54 1 + 44 55 55 1 + 44 55 56 1 + 44 55 57 1 + 44 55 58 1 + 44 55 59 1 + 44 55 60 1 + 44 55 61 1 + 44 55 62 1 + 44 55 63 1 + 44 55 64 1 + 44 55 65 1 + 44 55 66 1 + 44 55 67 1 + 44 55 68 1 + 44 55 69 1 + 44 55 70 1 + 44 55 71 1 + 44 55 72 1 + 44 55 73 1 + 44 55 74 1 + 44 55 75 1 + 44 55 76 1 + 44 55 77 0.912283 + 44 55 78 0.316818 + 44 55 79 0.00138601 + 44 56 48 0.0811434 + 44 56 49 0.702444 + 44 56 50 0.999058 + 44 56 51 1 + 44 56 52 1 + 44 56 53 1 + 44 56 54 1 + 44 56 55 1 + 44 56 56 1 + 44 56 57 1 + 44 56 58 1 + 44 56 59 1 + 44 56 60 1 + 44 56 61 1 + 44 56 62 1 + 44 56 63 1 + 44 56 64 1 + 44 56 65 1 + 44 56 66 1 + 44 56 67 1 + 44 56 68 1 + 44 56 69 1 + 44 56 70 1 + 44 56 71 1 + 44 56 72 1 + 44 56 73 1 + 44 56 74 1 + 44 56 75 1 + 44 56 76 1 + 44 56 77 0.999058 + 44 56 78 0.702444 + 44 56 79 0.0811434 + 44 57 47 0.000148631 + 44 57 48 0.315874 + 44 57 49 0.933296 + 44 57 50 1 + 44 57 51 1 + 44 57 52 1 + 44 57 53 1 + 44 57 54 1 + 44 57 55 1 + 44 57 56 1 + 44 57 57 1 + 44 57 58 1 + 44 57 59 1 + 44 57 60 1 + 44 57 61 1 + 44 57 62 1 + 44 57 63 1 + 44 57 64 1 + 44 57 65 1 + 44 57 66 1 + 44 57 67 1 + 44 57 68 1 + 44 57 69 1 + 44 57 70 1 + 44 57 71 1 + 44 57 72 1 + 44 57 73 1 + 44 57 74 1 + 44 57 75 1 + 44 57 76 1 + 44 57 77 1 + 44 57 78 0.933296 + 44 57 79 0.315874 + 44 57 80 0.000148631 + 44 58 47 0.0302985 + 44 58 48 0.610031 + 44 58 49 0.99787 + 44 58 50 1 + 44 58 51 1 + 44 58 52 1 + 44 58 53 1 + 44 58 54 1 + 44 58 55 1 + 44 58 56 1 + 44 58 57 1 + 44 58 58 1 + 44 58 59 1 + 44 58 60 1 + 44 58 61 1 + 44 58 62 1 + 44 58 63 1 + 44 58 64 1 + 44 58 65 1 + 44 58 66 1 + 44 58 67 1 + 44 58 68 1 + 44 58 69 1 + 44 58 70 1 + 44 58 71 1 + 44 58 72 1 + 44 58 73 1 + 44 58 74 1 + 44 58 75 1 + 44 58 76 1 + 44 58 77 1 + 44 58 78 0.99787 + 44 58 79 0.610031 + 44 58 80 0.0302985 + 44 59 47 0.133628 + 44 59 48 0.821374 + 44 59 49 1 + 44 59 50 1 + 44 59 51 1 + 44 59 52 1 + 44 59 53 1 + 44 59 54 1 + 44 59 55 1 + 44 59 56 1 + 44 59 57 1 + 44 59 58 1 + 44 59 59 1 + 44 59 60 1 + 44 59 61 1 + 44 59 62 1 + 44 59 63 1 + 44 59 64 1 + 44 59 65 1 + 44 59 66 1 + 44 59 67 1 + 44 59 68 1 + 44 59 69 1 + 44 59 70 1 + 44 59 71 1 + 44 59 72 1 + 44 59 73 1 + 44 59 74 1 + 44 59 75 1 + 44 59 76 1 + 44 59 77 1 + 44 59 78 1 + 44 59 79 0.821374 + 44 59 80 0.133628 + 44 60 47 0.27231 + 44 60 48 0.93166 + 44 60 49 1 + 44 60 50 1 + 44 60 51 1 + 44 60 52 1 + 44 60 53 1 + 44 60 54 1 + 44 60 55 1 + 44 60 56 1 + 44 60 57 1 + 44 60 58 1 + 44 60 59 1 + 44 60 60 1 + 44 60 61 1 + 44 60 62 1 + 44 60 63 1 + 44 60 64 1 + 44 60 65 1 + 44 60 66 1 + 44 60 67 1 + 44 60 68 1 + 44 60 69 1 + 44 60 70 1 + 44 60 71 1 + 44 60 72 1 + 44 60 73 1 + 44 60 74 1 + 44 60 75 1 + 44 60 76 1 + 44 60 77 1 + 44 60 78 1 + 44 60 79 0.93166 + 44 60 80 0.27231 + 44 61 46 7.7901e-05 + 44 61 47 0.408101 + 44 61 48 0.980027 + 44 61 49 1 + 44 61 50 1 + 44 61 51 1 + 44 61 52 1 + 44 61 53 1 + 44 61 54 1 + 44 61 55 1 + 44 61 56 1 + 44 61 57 1 + 44 61 58 1 + 44 61 59 1 + 44 61 60 1 + 44 61 61 1 + 44 61 62 1 + 44 61 63 1 + 44 61 64 1 + 44 61 65 1 + 44 61 66 1 + 44 61 67 1 + 44 61 68 1 + 44 61 69 1 + 44 61 70 1 + 44 61 71 1 + 44 61 72 1 + 44 61 73 1 + 44 61 74 1 + 44 61 75 1 + 44 61 76 1 + 44 61 77 1 + 44 61 78 1 + 44 61 79 0.980027 + 44 61 80 0.408101 + 44 61 81 7.7901e-05 + 44 62 46 0.00382379 + 44 62 47 0.509823 + 44 62 48 0.996238 + 44 62 49 1 + 44 62 50 1 + 44 62 51 1 + 44 62 52 1 + 44 62 53 1 + 44 62 54 1 + 44 62 55 1 + 44 62 56 1 + 44 62 57 1 + 44 62 58 1 + 44 62 59 1 + 44 62 60 1 + 44 62 61 1 + 44 62 62 1 + 44 62 63 1 + 44 62 64 1 + 44 62 65 1 + 44 62 66 1 + 44 62 67 1 + 44 62 68 1 + 44 62 69 1 + 44 62 70 1 + 44 62 71 1 + 44 62 72 1 + 44 62 73 1 + 44 62 74 1 + 44 62 75 1 + 44 62 76 1 + 44 62 77 1 + 44 62 78 1 + 44 62 79 0.996238 + 44 62 80 0.509823 + 44 62 81 0.00382379 + 44 63 46 0.00976158 + 44 63 47 0.561032 + 44 63 48 0.999595 + 44 63 49 1 + 44 63 50 1 + 44 63 51 1 + 44 63 52 1 + 44 63 53 1 + 44 63 54 1 + 44 63 55 1 + 44 63 56 1 + 44 63 57 1 + 44 63 58 1 + 44 63 59 1 + 44 63 60 1 + 44 63 61 1 + 44 63 62 1 + 44 63 63 1 + 44 63 64 1 + 44 63 65 1 + 44 63 66 1 + 44 63 67 1 + 44 63 68 1 + 44 63 69 1 + 44 63 70 1 + 44 63 71 1 + 44 63 72 1 + 44 63 73 1 + 44 63 74 1 + 44 63 75 1 + 44 63 76 1 + 44 63 77 1 + 44 63 78 1 + 44 63 79 0.999595 + 44 63 80 0.561032 + 44 63 81 0.00976158 + 44 64 46 0.00976158 + 44 64 47 0.561032 + 44 64 48 0.999595 + 44 64 49 1 + 44 64 50 1 + 44 64 51 1 + 44 64 52 1 + 44 64 53 1 + 44 64 54 1 + 44 64 55 1 + 44 64 56 1 + 44 64 57 1 + 44 64 58 1 + 44 64 59 1 + 44 64 60 1 + 44 64 61 1 + 44 64 62 1 + 44 64 63 1 + 44 64 64 1 + 44 64 65 1 + 44 64 66 1 + 44 64 67 1 + 44 64 68 1 + 44 64 69 1 + 44 64 70 1 + 44 64 71 1 + 44 64 72 1 + 44 64 73 1 + 44 64 74 1 + 44 64 75 1 + 44 64 76 1 + 44 64 77 1 + 44 64 78 1 + 44 64 79 0.999595 + 44 64 80 0.561032 + 44 64 81 0.00976158 + 44 65 46 0.00382379 + 44 65 47 0.509823 + 44 65 48 0.996238 + 44 65 49 1 + 44 65 50 1 + 44 65 51 1 + 44 65 52 1 + 44 65 53 1 + 44 65 54 1 + 44 65 55 1 + 44 65 56 1 + 44 65 57 1 + 44 65 58 1 + 44 65 59 1 + 44 65 60 1 + 44 65 61 1 + 44 65 62 1 + 44 65 63 1 + 44 65 64 1 + 44 65 65 1 + 44 65 66 1 + 44 65 67 1 + 44 65 68 1 + 44 65 69 1 + 44 65 70 1 + 44 65 71 1 + 44 65 72 1 + 44 65 73 1 + 44 65 74 1 + 44 65 75 1 + 44 65 76 1 + 44 65 77 1 + 44 65 78 1 + 44 65 79 0.996238 + 44 65 80 0.509823 + 44 65 81 0.00382379 + 44 66 46 7.7901e-05 + 44 66 47 0.408101 + 44 66 48 0.980027 + 44 66 49 1 + 44 66 50 1 + 44 66 51 1 + 44 66 52 1 + 44 66 53 1 + 44 66 54 1 + 44 66 55 1 + 44 66 56 1 + 44 66 57 1 + 44 66 58 1 + 44 66 59 1 + 44 66 60 1 + 44 66 61 1 + 44 66 62 1 + 44 66 63 1 + 44 66 64 1 + 44 66 65 1 + 44 66 66 1 + 44 66 67 1 + 44 66 68 1 + 44 66 69 1 + 44 66 70 1 + 44 66 71 1 + 44 66 72 1 + 44 66 73 1 + 44 66 74 1 + 44 66 75 1 + 44 66 76 1 + 44 66 77 1 + 44 66 78 1 + 44 66 79 0.980027 + 44 66 80 0.408101 + 44 66 81 7.7901e-05 + 44 67 47 0.27231 + 44 67 48 0.93166 + 44 67 49 1 + 44 67 50 1 + 44 67 51 1 + 44 67 52 1 + 44 67 53 1 + 44 67 54 1 + 44 67 55 1 + 44 67 56 1 + 44 67 57 1 + 44 67 58 1 + 44 67 59 1 + 44 67 60 1 + 44 67 61 1 + 44 67 62 1 + 44 67 63 1 + 44 67 64 1 + 44 67 65 1 + 44 67 66 1 + 44 67 67 1 + 44 67 68 1 + 44 67 69 1 + 44 67 70 1 + 44 67 71 1 + 44 67 72 1 + 44 67 73 1 + 44 67 74 1 + 44 67 75 1 + 44 67 76 1 + 44 67 77 1 + 44 67 78 1 + 44 67 79 0.93166 + 44 67 80 0.27231 + 44 68 47 0.133628 + 44 68 48 0.821374 + 44 68 49 1 + 44 68 50 1 + 44 68 51 1 + 44 68 52 1 + 44 68 53 1 + 44 68 54 1 + 44 68 55 1 + 44 68 56 1 + 44 68 57 1 + 44 68 58 1 + 44 68 59 1 + 44 68 60 1 + 44 68 61 1 + 44 68 62 1 + 44 68 63 1 + 44 68 64 1 + 44 68 65 1 + 44 68 66 1 + 44 68 67 1 + 44 68 68 1 + 44 68 69 1 + 44 68 70 1 + 44 68 71 1 + 44 68 72 1 + 44 68 73 1 + 44 68 74 1 + 44 68 75 1 + 44 68 76 1 + 44 68 77 1 + 44 68 78 1 + 44 68 79 0.821374 + 44 68 80 0.133628 + 44 69 47 0.0302985 + 44 69 48 0.610031 + 44 69 49 0.99787 + 44 69 50 1 + 44 69 51 1 + 44 69 52 1 + 44 69 53 1 + 44 69 54 1 + 44 69 55 1 + 44 69 56 1 + 44 69 57 1 + 44 69 58 1 + 44 69 59 1 + 44 69 60 1 + 44 69 61 1 + 44 69 62 1 + 44 69 63 1 + 44 69 64 1 + 44 69 65 1 + 44 69 66 1 + 44 69 67 1 + 44 69 68 1 + 44 69 69 1 + 44 69 70 1 + 44 69 71 1 + 44 69 72 1 + 44 69 73 1 + 44 69 74 1 + 44 69 75 1 + 44 69 76 1 + 44 69 77 1 + 44 69 78 0.99787 + 44 69 79 0.610031 + 44 69 80 0.0302985 + 44 70 47 0.000148631 + 44 70 48 0.315874 + 44 70 49 0.933296 + 44 70 50 1 + 44 70 51 1 + 44 70 52 1 + 44 70 53 1 + 44 70 54 1 + 44 70 55 1 + 44 70 56 1 + 44 70 57 1 + 44 70 58 1 + 44 70 59 1 + 44 70 60 1 + 44 70 61 1 + 44 70 62 1 + 44 70 63 1 + 44 70 64 1 + 44 70 65 1 + 44 70 66 1 + 44 70 67 1 + 44 70 68 1 + 44 70 69 1 + 44 70 70 1 + 44 70 71 1 + 44 70 72 1 + 44 70 73 1 + 44 70 74 1 + 44 70 75 1 + 44 70 76 1 + 44 70 77 1 + 44 70 78 0.933296 + 44 70 79 0.315874 + 44 70 80 0.000148631 + 44 71 48 0.0811434 + 44 71 49 0.702444 + 44 71 50 0.999058 + 44 71 51 1 + 44 71 52 1 + 44 71 53 1 + 44 71 54 1 + 44 71 55 1 + 44 71 56 1 + 44 71 57 1 + 44 71 58 1 + 44 71 59 1 + 44 71 60 1 + 44 71 61 1 + 44 71 62 1 + 44 71 63 1 + 44 71 64 1 + 44 71 65 1 + 44 71 66 1 + 44 71 67 1 + 44 71 68 1 + 44 71 69 1 + 44 71 70 1 + 44 71 71 1 + 44 71 72 1 + 44 71 73 1 + 44 71 74 1 + 44 71 75 1 + 44 71 76 1 + 44 71 77 0.999058 + 44 71 78 0.702444 + 44 71 79 0.0811434 + 44 72 48 0.00138601 + 44 72 49 0.316818 + 44 72 50 0.912283 + 44 72 51 1 + 44 72 52 1 + 44 72 53 1 + 44 72 54 1 + 44 72 55 1 + 44 72 56 1 + 44 72 57 1 + 44 72 58 1 + 44 72 59 1 + 44 72 60 1 + 44 72 61 1 + 44 72 62 1 + 44 72 63 1 + 44 72 64 1 + 44 72 65 1 + 44 72 66 1 + 44 72 67 1 + 44 72 68 1 + 44 72 69 1 + 44 72 70 1 + 44 72 71 1 + 44 72 72 1 + 44 72 73 1 + 44 72 74 1 + 44 72 75 1 + 44 72 76 1 + 44 72 77 0.912283 + 44 72 78 0.316818 + 44 72 79 0.00138601 + 44 73 49 0.0436378 + 44 73 50 0.559714 + 44 73 51 0.979001 + 44 73 52 1 + 44 73 53 1 + 44 73 54 1 + 44 73 55 1 + 44 73 56 1 + 44 73 57 1 + 44 73 58 1 + 44 73 59 1 + 44 73 60 1 + 44 73 61 1 + 44 73 62 1 + 44 73 63 1 + 44 73 64 1 + 44 73 65 1 + 44 73 66 1 + 44 73 67 1 + 44 73 68 1 + 44 73 69 1 + 44 73 70 1 + 44 73 71 1 + 44 73 72 1 + 44 73 73 1 + 44 73 74 1 + 44 73 75 1 + 44 73 76 0.979001 + 44 73 77 0.559714 + 44 73 78 0.0436378 + 44 74 50 0.129326 + 44 74 51 0.701471 + 44 74 52 0.992776 + 44 74 53 1 + 44 74 54 1 + 44 74 55 1 + 44 74 56 1 + 44 74 57 1 + 44 74 58 1 + 44 74 59 1 + 44 74 60 1 + 44 74 61 1 + 44 74 62 1 + 44 74 63 1 + 44 74 64 1 + 44 74 65 1 + 44 74 66 1 + 44 74 67 1 + 44 74 68 1 + 44 74 69 1 + 44 74 70 1 + 44 74 71 1 + 44 74 72 1 + 44 74 73 1 + 44 74 74 1 + 44 74 75 0.992776 + 44 74 76 0.701471 + 44 74 77 0.129326 + 44 75 50 0.00062971 + 44 75 51 0.194777 + 44 75 52 0.744636 + 44 75 53 0.992776 + 44 75 54 1 + 44 75 55 1 + 44 75 56 1 + 44 75 57 1 + 44 75 58 1 + 44 75 59 1 + 44 75 60 1 + 44 75 61 1 + 44 75 62 1 + 44 75 63 1 + 44 75 64 1 + 44 75 65 1 + 44 75 66 1 + 44 75 67 1 + 44 75 68 1 + 44 75 69 1 + 44 75 70 1 + 44 75 71 1 + 44 75 72 1 + 44 75 73 1 + 44 75 74 0.992776 + 44 75 75 0.744636 + 44 75 76 0.194777 + 44 75 77 0.00062971 + 44 76 51 0.00193335 + 44 76 52 0.194777 + 44 76 53 0.701471 + 44 76 54 0.979001 + 44 76 55 1 + 44 76 56 1 + 44 76 57 1 + 44 76 58 1 + 44 76 59 1 + 44 76 60 1 + 44 76 61 1 + 44 76 62 1 + 44 76 63 1 + 44 76 64 1 + 44 76 65 1 + 44 76 66 1 + 44 76 67 1 + 44 76 68 1 + 44 76 69 1 + 44 76 70 1 + 44 76 71 1 + 44 76 72 1 + 44 76 73 0.979001 + 44 76 74 0.701471 + 44 76 75 0.194777 + 44 76 76 0.00193335 + 44 77 52 0.00062971 + 44 77 53 0.129326 + 44 77 54 0.559714 + 44 77 55 0.912283 + 44 77 56 0.999058 + 44 77 57 1 + 44 77 58 1 + 44 77 59 1 + 44 77 60 1 + 44 77 61 1 + 44 77 62 1 + 44 77 63 1 + 44 77 64 1 + 44 77 65 1 + 44 77 66 1 + 44 77 67 1 + 44 77 68 1 + 44 77 69 1 + 44 77 70 1 + 44 77 71 0.999058 + 44 77 72 0.912283 + 44 77 73 0.559714 + 44 77 74 0.129326 + 44 77 75 0.00062971 + 44 78 54 0.0436378 + 44 78 55 0.316818 + 44 78 56 0.702444 + 44 78 57 0.933296 + 44 78 58 0.99787 + 44 78 59 1 + 44 78 60 1 + 44 78 61 1 + 44 78 62 1 + 44 78 63 1 + 44 78 64 1 + 44 78 65 1 + 44 78 66 1 + 44 78 67 1 + 44 78 68 1 + 44 78 69 0.99787 + 44 78 70 0.933296 + 44 78 71 0.702444 + 44 78 72 0.316818 + 44 78 73 0.0436378 + 44 79 55 0.00138601 + 44 79 56 0.0811434 + 44 79 57 0.315874 + 44 79 58 0.610031 + 44 79 59 0.821374 + 44 79 60 0.93166 + 44 79 61 0.980027 + 44 79 62 0.996238 + 44 79 63 0.999595 + 44 79 64 0.999595 + 44 79 65 0.996238 + 44 79 66 0.980027 + 44 79 67 0.93166 + 44 79 68 0.821374 + 44 79 69 0.610031 + 44 79 70 0.315874 + 44 79 71 0.0811434 + 44 79 72 0.00138601 + 44 80 57 0.000148631 + 44 80 58 0.0302985 + 44 80 59 0.133628 + 44 80 60 0.27231 + 44 80 61 0.408101 + 44 80 62 0.509823 + 44 80 63 0.561032 + 44 80 64 0.561032 + 44 80 65 0.509823 + 44 80 66 0.408101 + 44 80 67 0.27231 + 44 80 68 0.133628 + 44 80 69 0.0302985 + 44 80 70 0.000148631 + 44 81 61 7.7901e-05 + 44 81 62 0.00382379 + 44 81 63 0.00976158 + 44 81 64 0.00976158 + 44 81 65 0.00382379 + 44 81 66 7.7901e-05 + 45 45 61 0.0011128 + 45 45 62 0.00998524 + 45 45 63 0.0189458 + 45 45 64 0.0189458 + 45 45 65 0.00998524 + 45 45 66 0.0011128 + 45 46 57 0.00284305 + 45 46 58 0.0622884 + 45 46 59 0.196147 + 45 46 60 0.358249 + 45 46 61 0.509943 + 45 46 62 0.613886 + 45 46 63 0.661608 + 45 46 64 0.661608 + 45 46 65 0.613886 + 45 46 66 0.509943 + 45 46 67 0.358249 + 45 46 68 0.196147 + 45 46 69 0.0622884 + 45 46 70 0.00284305 + 45 47 55 0.0128488 + 45 47 56 0.16137 + 45 47 57 0.458559 + 45 47 58 0.747928 + 45 47 59 0.909115 + 45 47 60 0.979426 + 45 47 61 0.9989 + 45 47 62 1 + 45 47 63 1 + 45 47 64 1 + 45 47 65 1 + 45 47 66 0.9989 + 45 47 67 0.979426 + 45 47 68 0.909115 + 45 47 69 0.747928 + 45 47 70 0.458559 + 45 47 71 0.16137 + 45 47 72 0.0128488 + 45 48 53 0.00195783 + 45 48 54 0.129721 + 45 48 55 0.51 + 45 48 56 0.856237 + 45 48 57 0.987756 + 45 48 58 1 + 45 48 59 1 + 45 48 60 1 + 45 48 61 1 + 45 48 62 1 + 45 48 63 1 + 45 48 64 1 + 45 48 65 1 + 45 48 66 1 + 45 48 67 1 + 45 48 68 1 + 45 48 69 1 + 45 48 70 0.987756 + 45 48 71 0.856237 + 45 48 72 0.51 + 45 48 73 0.129721 + 45 48 74 0.00195783 + 45 49 52 0.0216196 + 45 49 53 0.315112 + 45 49 54 0.78779 + 45 49 55 0.986811 + 45 49 56 1 + 45 49 57 1 + 45 49 58 1 + 45 49 59 1 + 45 49 60 1 + 45 49 61 1 + 45 49 62 1 + 45 49 63 1 + 45 49 64 1 + 45 49 65 1 + 45 49 66 1 + 45 49 67 1 + 45 49 68 1 + 45 49 69 1 + 45 49 70 1 + 45 49 71 1 + 45 49 72 0.986811 + 45 49 73 0.78779 + 45 49 74 0.315112 + 45 49 75 0.0216196 + 45 50 51 0.0443033 + 45 50 52 0.459682 + 45 50 53 0.913417 + 45 50 54 0.999965 + 45 50 55 1 + 45 50 56 1 + 45 50 57 1 + 45 50 58 1 + 45 50 59 1 + 45 50 60 1 + 45 50 61 1 + 45 50 62 1 + 45 50 63 1 + 45 50 64 1 + 45 50 65 1 + 45 50 66 1 + 45 50 67 1 + 45 50 68 1 + 45 50 69 1 + 45 50 70 1 + 45 50 71 1 + 45 50 72 1 + 45 50 73 0.999965 + 45 50 74 0.913417 + 45 50 75 0.459682 + 45 50 76 0.0443033 + 45 51 50 0.0443033 + 45 51 51 0.51002 + 45 51 52 0.952748 + 45 51 53 1 + 45 51 54 1 + 45 51 55 1 + 45 51 56 1 + 45 51 57 1 + 45 51 58 1 + 45 51 59 1 + 45 51 60 1 + 45 51 61 1 + 45 51 62 1 + 45 51 63 1 + 45 51 64 1 + 45 51 65 1 + 45 51 66 1 + 45 51 67 1 + 45 51 68 1 + 45 51 69 1 + 45 51 70 1 + 45 51 71 1 + 45 51 72 1 + 45 51 73 1 + 45 51 74 1 + 45 51 75 0.952748 + 45 51 76 0.51002 + 45 51 77 0.0443033 + 45 52 49 0.0216196 + 45 52 50 0.459682 + 45 52 51 0.952748 + 45 52 52 1 + 45 52 53 1 + 45 52 54 1 + 45 52 55 1 + 45 52 56 1 + 45 52 57 1 + 45 52 58 1 + 45 52 59 1 + 45 52 60 1 + 45 52 61 1 + 45 52 62 1 + 45 52 63 1 + 45 52 64 1 + 45 52 65 1 + 45 52 66 1 + 45 52 67 1 + 45 52 68 1 + 45 52 69 1 + 45 52 70 1 + 45 52 71 1 + 45 52 72 1 + 45 52 73 1 + 45 52 74 1 + 45 52 75 1 + 45 52 76 0.952748 + 45 52 77 0.459682 + 45 52 78 0.0216196 + 45 53 48 0.00195783 + 45 53 49 0.315112 + 45 53 50 0.913417 + 45 53 51 1 + 45 53 52 1 + 45 53 53 1 + 45 53 54 1 + 45 53 55 1 + 45 53 56 1 + 45 53 57 1 + 45 53 58 1 + 45 53 59 1 + 45 53 60 1 + 45 53 61 1 + 45 53 62 1 + 45 53 63 1 + 45 53 64 1 + 45 53 65 1 + 45 53 66 1 + 45 53 67 1 + 45 53 68 1 + 45 53 69 1 + 45 53 70 1 + 45 53 71 1 + 45 53 72 1 + 45 53 73 1 + 45 53 74 1 + 45 53 75 1 + 45 53 76 1 + 45 53 77 0.913417 + 45 53 78 0.315112 + 45 53 79 0.00195783 + 45 54 48 0.129721 + 45 54 49 0.78779 + 45 54 50 0.999965 + 45 54 51 1 + 45 54 52 1 + 45 54 53 1 + 45 54 54 1 + 45 54 55 1 + 45 54 56 1 + 45 54 57 1 + 45 54 58 1 + 45 54 59 1 + 45 54 60 1 + 45 54 61 1 + 45 54 62 1 + 45 54 63 1 + 45 54 64 1 + 45 54 65 1 + 45 54 66 1 + 45 54 67 1 + 45 54 68 1 + 45 54 69 1 + 45 54 70 1 + 45 54 71 1 + 45 54 72 1 + 45 54 73 1 + 45 54 74 1 + 45 54 75 1 + 45 54 76 1 + 45 54 77 0.999965 + 45 54 78 0.78779 + 45 54 79 0.129721 + 45 55 47 0.0128488 + 45 55 48 0.51 + 45 55 49 0.986811 + 45 55 50 1 + 45 55 51 1 + 45 55 52 1 + 45 55 53 1 + 45 55 54 1 + 45 55 55 1 + 45 55 56 1 + 45 55 57 1 + 45 55 58 1 + 45 55 59 1 + 45 55 60 1 + 45 55 61 1 + 45 55 62 1 + 45 55 63 1 + 45 55 64 1 + 45 55 65 1 + 45 55 66 1 + 45 55 67 1 + 45 55 68 1 + 45 55 69 1 + 45 55 70 1 + 45 55 71 1 + 45 55 72 1 + 45 55 73 1 + 45 55 74 1 + 45 55 75 1 + 45 55 76 1 + 45 55 77 1 + 45 55 78 0.986811 + 45 55 79 0.51 + 45 55 80 0.0128488 + 45 56 47 0.16137 + 45 56 48 0.856237 + 45 56 49 1 + 45 56 50 1 + 45 56 51 1 + 45 56 52 1 + 45 56 53 1 + 45 56 54 1 + 45 56 55 1 + 45 56 56 1 + 45 56 57 1 + 45 56 58 1 + 45 56 59 1 + 45 56 60 1 + 45 56 61 1 + 45 56 62 1 + 45 56 63 1 + 45 56 64 1 + 45 56 65 1 + 45 56 66 1 + 45 56 67 1 + 45 56 68 1 + 45 56 69 1 + 45 56 70 1 + 45 56 71 1 + 45 56 72 1 + 45 56 73 1 + 45 56 74 1 + 45 56 75 1 + 45 56 76 1 + 45 56 77 1 + 45 56 78 1 + 45 56 79 0.856237 + 45 56 80 0.16137 + 45 57 46 0.00284305 + 45 57 47 0.458559 + 45 57 48 0.987756 + 45 57 49 1 + 45 57 50 1 + 45 57 51 1 + 45 57 52 1 + 45 57 53 1 + 45 57 54 1 + 45 57 55 1 + 45 57 56 1 + 45 57 57 1 + 45 57 58 1 + 45 57 59 1 + 45 57 60 1 + 45 57 61 1 + 45 57 62 1 + 45 57 63 1 + 45 57 64 1 + 45 57 65 1 + 45 57 66 1 + 45 57 67 1 + 45 57 68 1 + 45 57 69 1 + 45 57 70 1 + 45 57 71 1 + 45 57 72 1 + 45 57 73 1 + 45 57 74 1 + 45 57 75 1 + 45 57 76 1 + 45 57 77 1 + 45 57 78 1 + 45 57 79 0.987756 + 45 57 80 0.458559 + 45 57 81 0.00284305 + 45 58 46 0.0622884 + 45 58 47 0.747928 + 45 58 48 1 + 45 58 49 1 + 45 58 50 1 + 45 58 51 1 + 45 58 52 1 + 45 58 53 1 + 45 58 54 1 + 45 58 55 1 + 45 58 56 1 + 45 58 57 1 + 45 58 58 1 + 45 58 59 1 + 45 58 60 1 + 45 58 61 1 + 45 58 62 1 + 45 58 63 1 + 45 58 64 1 + 45 58 65 1 + 45 58 66 1 + 45 58 67 1 + 45 58 68 1 + 45 58 69 1 + 45 58 70 1 + 45 58 71 1 + 45 58 72 1 + 45 58 73 1 + 45 58 74 1 + 45 58 75 1 + 45 58 76 1 + 45 58 77 1 + 45 58 78 1 + 45 58 79 1 + 45 58 80 0.747928 + 45 58 81 0.0622884 + 45 59 46 0.196147 + 45 59 47 0.909115 + 45 59 48 1 + 45 59 49 1 + 45 59 50 1 + 45 59 51 1 + 45 59 52 1 + 45 59 53 1 + 45 59 54 1 + 45 59 55 1 + 45 59 56 1 + 45 59 57 1 + 45 59 58 1 + 45 59 59 1 + 45 59 60 1 + 45 59 61 1 + 45 59 62 1 + 45 59 63 1 + 45 59 64 1 + 45 59 65 1 + 45 59 66 1 + 45 59 67 1 + 45 59 68 1 + 45 59 69 1 + 45 59 70 1 + 45 59 71 1 + 45 59 72 1 + 45 59 73 1 + 45 59 74 1 + 45 59 75 1 + 45 59 76 1 + 45 59 77 1 + 45 59 78 1 + 45 59 79 1 + 45 59 80 0.909115 + 45 59 81 0.196147 + 45 60 46 0.358249 + 45 60 47 0.979426 + 45 60 48 1 + 45 60 49 1 + 45 60 50 1 + 45 60 51 1 + 45 60 52 1 + 45 60 53 1 + 45 60 54 1 + 45 60 55 1 + 45 60 56 1 + 45 60 57 1 + 45 60 58 1 + 45 60 59 1 + 45 60 60 1 + 45 60 61 1 + 45 60 62 1 + 45 60 63 1 + 45 60 64 1 + 45 60 65 1 + 45 60 66 1 + 45 60 67 1 + 45 60 68 1 + 45 60 69 1 + 45 60 70 1 + 45 60 71 1 + 45 60 72 1 + 45 60 73 1 + 45 60 74 1 + 45 60 75 1 + 45 60 76 1 + 45 60 77 1 + 45 60 78 1 + 45 60 79 1 + 45 60 80 0.979426 + 45 60 81 0.358249 + 45 61 45 0.0011128 + 45 61 46 0.509943 + 45 61 47 0.9989 + 45 61 48 1 + 45 61 49 1 + 45 61 50 1 + 45 61 51 1 + 45 61 52 1 + 45 61 53 1 + 45 61 54 1 + 45 61 55 1 + 45 61 56 1 + 45 61 57 1 + 45 61 58 1 + 45 61 59 1 + 45 61 60 1 + 45 61 61 1 + 45 61 62 1 + 45 61 63 1 + 45 61 64 1 + 45 61 65 1 + 45 61 66 1 + 45 61 67 1 + 45 61 68 1 + 45 61 69 1 + 45 61 70 1 + 45 61 71 1 + 45 61 72 1 + 45 61 73 1 + 45 61 74 1 + 45 61 75 1 + 45 61 76 1 + 45 61 77 1 + 45 61 78 1 + 45 61 79 1 + 45 61 80 0.9989 + 45 61 81 0.509943 + 45 61 82 0.0011128 + 45 62 45 0.00998524 + 45 62 46 0.613886 + 45 62 47 1 + 45 62 48 1 + 45 62 49 1 + 45 62 50 1 + 45 62 51 1 + 45 62 52 1 + 45 62 53 1 + 45 62 54 1 + 45 62 55 1 + 45 62 56 1 + 45 62 57 1 + 45 62 58 1 + 45 62 59 1 + 45 62 60 1 + 45 62 61 1 + 45 62 62 1 + 45 62 63 1 + 45 62 64 1 + 45 62 65 1 + 45 62 66 1 + 45 62 67 1 + 45 62 68 1 + 45 62 69 1 + 45 62 70 1 + 45 62 71 1 + 45 62 72 1 + 45 62 73 1 + 45 62 74 1 + 45 62 75 1 + 45 62 76 1 + 45 62 77 1 + 45 62 78 1 + 45 62 79 1 + 45 62 80 1 + 45 62 81 0.613886 + 45 62 82 0.00998524 + 45 63 45 0.0189458 + 45 63 46 0.661608 + 45 63 47 1 + 45 63 48 1 + 45 63 49 1 + 45 63 50 1 + 45 63 51 1 + 45 63 52 1 + 45 63 53 1 + 45 63 54 1 + 45 63 55 1 + 45 63 56 1 + 45 63 57 1 + 45 63 58 1 + 45 63 59 1 + 45 63 60 1 + 45 63 61 1 + 45 63 62 1 + 45 63 63 1 + 45 63 64 1 + 45 63 65 1 + 45 63 66 1 + 45 63 67 1 + 45 63 68 1 + 45 63 69 1 + 45 63 70 1 + 45 63 71 1 + 45 63 72 1 + 45 63 73 1 + 45 63 74 1 + 45 63 75 1 + 45 63 76 1 + 45 63 77 1 + 45 63 78 1 + 45 63 79 1 + 45 63 80 1 + 45 63 81 0.661608 + 45 63 82 0.0189458 + 45 64 45 0.0189458 + 45 64 46 0.661608 + 45 64 47 1 + 45 64 48 1 + 45 64 49 1 + 45 64 50 1 + 45 64 51 1 + 45 64 52 1 + 45 64 53 1 + 45 64 54 1 + 45 64 55 1 + 45 64 56 1 + 45 64 57 1 + 45 64 58 1 + 45 64 59 1 + 45 64 60 1 + 45 64 61 1 + 45 64 62 1 + 45 64 63 1 + 45 64 64 1 + 45 64 65 1 + 45 64 66 1 + 45 64 67 1 + 45 64 68 1 + 45 64 69 1 + 45 64 70 1 + 45 64 71 1 + 45 64 72 1 + 45 64 73 1 + 45 64 74 1 + 45 64 75 1 + 45 64 76 1 + 45 64 77 1 + 45 64 78 1 + 45 64 79 1 + 45 64 80 1 + 45 64 81 0.661608 + 45 64 82 0.0189458 + 45 65 45 0.00998524 + 45 65 46 0.613886 + 45 65 47 1 + 45 65 48 1 + 45 65 49 1 + 45 65 50 1 + 45 65 51 1 + 45 65 52 1 + 45 65 53 1 + 45 65 54 1 + 45 65 55 1 + 45 65 56 1 + 45 65 57 1 + 45 65 58 1 + 45 65 59 1 + 45 65 60 1 + 45 65 61 1 + 45 65 62 1 + 45 65 63 1 + 45 65 64 1 + 45 65 65 1 + 45 65 66 1 + 45 65 67 1 + 45 65 68 1 + 45 65 69 1 + 45 65 70 1 + 45 65 71 1 + 45 65 72 1 + 45 65 73 1 + 45 65 74 1 + 45 65 75 1 + 45 65 76 1 + 45 65 77 1 + 45 65 78 1 + 45 65 79 1 + 45 65 80 1 + 45 65 81 0.613886 + 45 65 82 0.00998524 + 45 66 45 0.0011128 + 45 66 46 0.509943 + 45 66 47 0.9989 + 45 66 48 1 + 45 66 49 1 + 45 66 50 1 + 45 66 51 1 + 45 66 52 1 + 45 66 53 1 + 45 66 54 1 + 45 66 55 1 + 45 66 56 1 + 45 66 57 1 + 45 66 58 1 + 45 66 59 1 + 45 66 60 1 + 45 66 61 1 + 45 66 62 1 + 45 66 63 1 + 45 66 64 1 + 45 66 65 1 + 45 66 66 1 + 45 66 67 1 + 45 66 68 1 + 45 66 69 1 + 45 66 70 1 + 45 66 71 1 + 45 66 72 1 + 45 66 73 1 + 45 66 74 1 + 45 66 75 1 + 45 66 76 1 + 45 66 77 1 + 45 66 78 1 + 45 66 79 1 + 45 66 80 0.9989 + 45 66 81 0.509943 + 45 66 82 0.0011128 + 45 67 46 0.358249 + 45 67 47 0.979426 + 45 67 48 1 + 45 67 49 1 + 45 67 50 1 + 45 67 51 1 + 45 67 52 1 + 45 67 53 1 + 45 67 54 1 + 45 67 55 1 + 45 67 56 1 + 45 67 57 1 + 45 67 58 1 + 45 67 59 1 + 45 67 60 1 + 45 67 61 1 + 45 67 62 1 + 45 67 63 1 + 45 67 64 1 + 45 67 65 1 + 45 67 66 1 + 45 67 67 1 + 45 67 68 1 + 45 67 69 1 + 45 67 70 1 + 45 67 71 1 + 45 67 72 1 + 45 67 73 1 + 45 67 74 1 + 45 67 75 1 + 45 67 76 1 + 45 67 77 1 + 45 67 78 1 + 45 67 79 1 + 45 67 80 0.979426 + 45 67 81 0.358249 + 45 68 46 0.196147 + 45 68 47 0.909115 + 45 68 48 1 + 45 68 49 1 + 45 68 50 1 + 45 68 51 1 + 45 68 52 1 + 45 68 53 1 + 45 68 54 1 + 45 68 55 1 + 45 68 56 1 + 45 68 57 1 + 45 68 58 1 + 45 68 59 1 + 45 68 60 1 + 45 68 61 1 + 45 68 62 1 + 45 68 63 1 + 45 68 64 1 + 45 68 65 1 + 45 68 66 1 + 45 68 67 1 + 45 68 68 1 + 45 68 69 1 + 45 68 70 1 + 45 68 71 1 + 45 68 72 1 + 45 68 73 1 + 45 68 74 1 + 45 68 75 1 + 45 68 76 1 + 45 68 77 1 + 45 68 78 1 + 45 68 79 1 + 45 68 80 0.909115 + 45 68 81 0.196147 + 45 69 46 0.0622884 + 45 69 47 0.747928 + 45 69 48 1 + 45 69 49 1 + 45 69 50 1 + 45 69 51 1 + 45 69 52 1 + 45 69 53 1 + 45 69 54 1 + 45 69 55 1 + 45 69 56 1 + 45 69 57 1 + 45 69 58 1 + 45 69 59 1 + 45 69 60 1 + 45 69 61 1 + 45 69 62 1 + 45 69 63 1 + 45 69 64 1 + 45 69 65 1 + 45 69 66 1 + 45 69 67 1 + 45 69 68 1 + 45 69 69 1 + 45 69 70 1 + 45 69 71 1 + 45 69 72 1 + 45 69 73 1 + 45 69 74 1 + 45 69 75 1 + 45 69 76 1 + 45 69 77 1 + 45 69 78 1 + 45 69 79 1 + 45 69 80 0.747928 + 45 69 81 0.0622884 + 45 70 46 0.00284305 + 45 70 47 0.458559 + 45 70 48 0.987756 + 45 70 49 1 + 45 70 50 1 + 45 70 51 1 + 45 70 52 1 + 45 70 53 1 + 45 70 54 1 + 45 70 55 1 + 45 70 56 1 + 45 70 57 1 + 45 70 58 1 + 45 70 59 1 + 45 70 60 1 + 45 70 61 1 + 45 70 62 1 + 45 70 63 1 + 45 70 64 1 + 45 70 65 1 + 45 70 66 1 + 45 70 67 1 + 45 70 68 1 + 45 70 69 1 + 45 70 70 1 + 45 70 71 1 + 45 70 72 1 + 45 70 73 1 + 45 70 74 1 + 45 70 75 1 + 45 70 76 1 + 45 70 77 1 + 45 70 78 1 + 45 70 79 0.987756 + 45 70 80 0.458559 + 45 70 81 0.00284305 + 45 71 47 0.16137 + 45 71 48 0.856237 + 45 71 49 1 + 45 71 50 1 + 45 71 51 1 + 45 71 52 1 + 45 71 53 1 + 45 71 54 1 + 45 71 55 1 + 45 71 56 1 + 45 71 57 1 + 45 71 58 1 + 45 71 59 1 + 45 71 60 1 + 45 71 61 1 + 45 71 62 1 + 45 71 63 1 + 45 71 64 1 + 45 71 65 1 + 45 71 66 1 + 45 71 67 1 + 45 71 68 1 + 45 71 69 1 + 45 71 70 1 + 45 71 71 1 + 45 71 72 1 + 45 71 73 1 + 45 71 74 1 + 45 71 75 1 + 45 71 76 1 + 45 71 77 1 + 45 71 78 1 + 45 71 79 0.856237 + 45 71 80 0.16137 + 45 72 47 0.0128488 + 45 72 48 0.51 + 45 72 49 0.986811 + 45 72 50 1 + 45 72 51 1 + 45 72 52 1 + 45 72 53 1 + 45 72 54 1 + 45 72 55 1 + 45 72 56 1 + 45 72 57 1 + 45 72 58 1 + 45 72 59 1 + 45 72 60 1 + 45 72 61 1 + 45 72 62 1 + 45 72 63 1 + 45 72 64 1 + 45 72 65 1 + 45 72 66 1 + 45 72 67 1 + 45 72 68 1 + 45 72 69 1 + 45 72 70 1 + 45 72 71 1 + 45 72 72 1 + 45 72 73 1 + 45 72 74 1 + 45 72 75 1 + 45 72 76 1 + 45 72 77 1 + 45 72 78 0.986811 + 45 72 79 0.51 + 45 72 80 0.0128488 + 45 73 48 0.129721 + 45 73 49 0.78779 + 45 73 50 0.999965 + 45 73 51 1 + 45 73 52 1 + 45 73 53 1 + 45 73 54 1 + 45 73 55 1 + 45 73 56 1 + 45 73 57 1 + 45 73 58 1 + 45 73 59 1 + 45 73 60 1 + 45 73 61 1 + 45 73 62 1 + 45 73 63 1 + 45 73 64 1 + 45 73 65 1 + 45 73 66 1 + 45 73 67 1 + 45 73 68 1 + 45 73 69 1 + 45 73 70 1 + 45 73 71 1 + 45 73 72 1 + 45 73 73 1 + 45 73 74 1 + 45 73 75 1 + 45 73 76 1 + 45 73 77 0.999965 + 45 73 78 0.78779 + 45 73 79 0.129721 + 45 74 48 0.00195783 + 45 74 49 0.315112 + 45 74 50 0.913417 + 45 74 51 1 + 45 74 52 1 + 45 74 53 1 + 45 74 54 1 + 45 74 55 1 + 45 74 56 1 + 45 74 57 1 + 45 74 58 1 + 45 74 59 1 + 45 74 60 1 + 45 74 61 1 + 45 74 62 1 + 45 74 63 1 + 45 74 64 1 + 45 74 65 1 + 45 74 66 1 + 45 74 67 1 + 45 74 68 1 + 45 74 69 1 + 45 74 70 1 + 45 74 71 1 + 45 74 72 1 + 45 74 73 1 + 45 74 74 1 + 45 74 75 1 + 45 74 76 1 + 45 74 77 0.913417 + 45 74 78 0.315112 + 45 74 79 0.00195783 + 45 75 49 0.0216196 + 45 75 50 0.459682 + 45 75 51 0.952748 + 45 75 52 1 + 45 75 53 1 + 45 75 54 1 + 45 75 55 1 + 45 75 56 1 + 45 75 57 1 + 45 75 58 1 + 45 75 59 1 + 45 75 60 1 + 45 75 61 1 + 45 75 62 1 + 45 75 63 1 + 45 75 64 1 + 45 75 65 1 + 45 75 66 1 + 45 75 67 1 + 45 75 68 1 + 45 75 69 1 + 45 75 70 1 + 45 75 71 1 + 45 75 72 1 + 45 75 73 1 + 45 75 74 1 + 45 75 75 1 + 45 75 76 0.952748 + 45 75 77 0.459682 + 45 75 78 0.0216196 + 45 76 50 0.0443033 + 45 76 51 0.51002 + 45 76 52 0.952748 + 45 76 53 1 + 45 76 54 1 + 45 76 55 1 + 45 76 56 1 + 45 76 57 1 + 45 76 58 1 + 45 76 59 1 + 45 76 60 1 + 45 76 61 1 + 45 76 62 1 + 45 76 63 1 + 45 76 64 1 + 45 76 65 1 + 45 76 66 1 + 45 76 67 1 + 45 76 68 1 + 45 76 69 1 + 45 76 70 1 + 45 76 71 1 + 45 76 72 1 + 45 76 73 1 + 45 76 74 1 + 45 76 75 0.952748 + 45 76 76 0.51002 + 45 76 77 0.0443033 + 45 77 51 0.0443033 + 45 77 52 0.459682 + 45 77 53 0.913417 + 45 77 54 0.999965 + 45 77 55 1 + 45 77 56 1 + 45 77 57 1 + 45 77 58 1 + 45 77 59 1 + 45 77 60 1 + 45 77 61 1 + 45 77 62 1 + 45 77 63 1 + 45 77 64 1 + 45 77 65 1 + 45 77 66 1 + 45 77 67 1 + 45 77 68 1 + 45 77 69 1 + 45 77 70 1 + 45 77 71 1 + 45 77 72 1 + 45 77 73 0.999965 + 45 77 74 0.913417 + 45 77 75 0.459682 + 45 77 76 0.0443033 + 45 78 52 0.0216196 + 45 78 53 0.315112 + 45 78 54 0.78779 + 45 78 55 0.986811 + 45 78 56 1 + 45 78 57 1 + 45 78 58 1 + 45 78 59 1 + 45 78 60 1 + 45 78 61 1 + 45 78 62 1 + 45 78 63 1 + 45 78 64 1 + 45 78 65 1 + 45 78 66 1 + 45 78 67 1 + 45 78 68 1 + 45 78 69 1 + 45 78 70 1 + 45 78 71 1 + 45 78 72 0.986811 + 45 78 73 0.78779 + 45 78 74 0.315112 + 45 78 75 0.0216196 + 45 79 53 0.00195783 + 45 79 54 0.129721 + 45 79 55 0.51 + 45 79 56 0.856237 + 45 79 57 0.987756 + 45 79 58 1 + 45 79 59 1 + 45 79 60 1 + 45 79 61 1 + 45 79 62 1 + 45 79 63 1 + 45 79 64 1 + 45 79 65 1 + 45 79 66 1 + 45 79 67 1 + 45 79 68 1 + 45 79 69 1 + 45 79 70 0.987756 + 45 79 71 0.856237 + 45 79 72 0.51 + 45 79 73 0.129721 + 45 79 74 0.00195783 + 45 80 55 0.0128488 + 45 80 56 0.16137 + 45 80 57 0.458559 + 45 80 58 0.747928 + 45 80 59 0.909115 + 45 80 60 0.979426 + 45 80 61 0.9989 + 45 80 62 1 + 45 80 63 1 + 45 80 64 1 + 45 80 65 1 + 45 80 66 0.9989 + 45 80 67 0.979426 + 45 80 68 0.909115 + 45 80 69 0.747928 + 45 80 70 0.458559 + 45 80 71 0.16137 + 45 80 72 0.0128488 + 45 81 57 0.00284305 + 45 81 58 0.0622884 + 45 81 59 0.196147 + 45 81 60 0.358249 + 45 81 61 0.509943 + 45 81 62 0.613886 + 45 81 63 0.661608 + 45 81 64 0.661608 + 45 81 65 0.613886 + 45 81 66 0.509943 + 45 81 67 0.358249 + 45 81 68 0.196147 + 45 81 69 0.0622884 + 45 81 70 0.00284305 + 45 82 61 0.0011128 + 45 82 62 0.00998524 + 45 82 63 0.0189458 + 45 82 64 0.0189458 + 45 82 65 0.00998524 + 45 82 66 0.0011128 + 46 44 61 7.7901e-05 + 46 44 62 0.00382379 + 46 44 63 0.00976158 + 46 44 64 0.00976158 + 46 44 65 0.00382379 + 46 44 66 7.7901e-05 + 46 45 57 0.00284305 + 46 45 58 0.0622884 + 46 45 59 0.196147 + 46 45 60 0.358249 + 46 45 61 0.509943 + 46 45 62 0.613886 + 46 45 63 0.661608 + 46 45 64 0.661608 + 46 45 65 0.613886 + 46 45 66 0.509943 + 46 45 67 0.358249 + 46 45 68 0.196147 + 46 45 69 0.0622884 + 46 45 70 0.00284305 + 46 46 55 0.0207198 + 46 46 56 0.194293 + 46 46 57 0.510026 + 46 46 58 0.787228 + 46 46 59 0.931469 + 46 46 60 0.988806 + 46 46 61 0.999903 + 46 46 62 1 + 46 46 63 1 + 46 46 64 1 + 46 46 65 1 + 46 46 66 0.999903 + 46 46 67 0.988806 + 46 46 68 0.931469 + 46 46 69 0.787228 + 46 46 70 0.510026 + 46 46 71 0.194293 + 46 46 72 0.0207198 + 46 47 53 0.00833029 + 46 47 54 0.192797 + 46 47 55 0.611412 + 46 47 56 0.910969 + 46 47 57 0.997087 + 46 47 58 1 + 46 47 59 1 + 46 47 60 1 + 46 47 61 1 + 46 47 62 1 + 46 47 63 1 + 46 47 64 1 + 46 47 65 1 + 46 47 66 1 + 46 47 67 1 + 46 47 68 1 + 46 47 69 1 + 46 47 70 0.997087 + 46 47 71 0.910969 + 46 47 72 0.611412 + 46 47 73 0.192797 + 46 47 74 0.00833029 + 46 48 52 0.0602217 + 46 48 53 0.459326 + 46 48 54 0.887171 + 46 48 55 0.998538 + 46 48 56 1 + 46 48 57 1 + 46 48 58 1 + 46 48 59 1 + 46 48 60 1 + 46 48 61 1 + 46 48 62 1 + 46 48 63 1 + 46 48 64 1 + 46 48 65 1 + 46 48 66 1 + 46 48 67 1 + 46 48 68 1 + 46 48 69 1 + 46 48 70 1 + 46 48 71 1 + 46 48 72 0.998538 + 46 48 73 0.887171 + 46 48 74 0.459326 + 46 48 75 0.0602217 + 46 49 50 1.68961e-05 + 46 49 51 0.127131 + 46 49 52 0.659059 + 46 49 53 0.977331 + 46 49 54 1 + 46 49 55 1 + 46 49 56 1 + 46 49 57 1 + 46 49 58 1 + 46 49 59 1 + 46 49 60 1 + 46 49 61 1 + 46 49 62 1 + 46 49 63 1 + 46 49 64 1 + 46 49 65 1 + 46 49 66 1 + 46 49 67 1 + 46 49 68 1 + 46 49 69 1 + 46 49 70 1 + 46 49 71 1 + 46 49 72 1 + 46 49 73 1 + 46 49 74 0.977331 + 46 49 75 0.659059 + 46 49 76 0.127131 + 46 49 77 1.68961e-05 + 46 50 49 1.68961e-05 + 46 50 50 0.156902 + 46 50 51 0.749071 + 46 50 52 0.995483 + 46 50 53 1 + 46 50 54 1 + 46 50 55 1 + 46 50 56 1 + 46 50 57 1 + 46 50 58 1 + 46 50 59 1 + 46 50 60 1 + 46 50 61 1 + 46 50 62 1 + 46 50 63 1 + 46 50 64 1 + 46 50 65 1 + 46 50 66 1 + 46 50 67 1 + 46 50 68 1 + 46 50 69 1 + 46 50 70 1 + 46 50 71 1 + 46 50 72 1 + 46 50 73 1 + 46 50 74 1 + 46 50 75 0.995483 + 46 50 76 0.749071 + 46 50 77 0.156902 + 46 50 78 1.68961e-05 + 46 51 49 0.127131 + 46 51 50 0.749071 + 46 51 51 0.99797 + 46 51 52 1 + 46 51 53 1 + 46 51 54 1 + 46 51 55 1 + 46 51 56 1 + 46 51 57 1 + 46 51 58 1 + 46 51 59 1 + 46 51 60 1 + 46 51 61 1 + 46 51 62 1 + 46 51 63 1 + 46 51 64 1 + 46 51 65 1 + 46 51 66 1 + 46 51 67 1 + 46 51 68 1 + 46 51 69 1 + 46 51 70 1 + 46 51 71 1 + 46 51 72 1 + 46 51 73 1 + 46 51 74 1 + 46 51 75 1 + 46 51 76 0.99797 + 46 51 77 0.749071 + 46 51 78 0.127131 + 46 52 48 0.0602217 + 46 52 49 0.659059 + 46 52 50 0.995483 + 46 52 51 1 + 46 52 52 1 + 46 52 53 1 + 46 52 54 1 + 46 52 55 1 + 46 52 56 1 + 46 52 57 1 + 46 52 58 1 + 46 52 59 1 + 46 52 60 1 + 46 52 61 1 + 46 52 62 1 + 46 52 63 1 + 46 52 64 1 + 46 52 65 1 + 46 52 66 1 + 46 52 67 1 + 46 52 68 1 + 46 52 69 1 + 46 52 70 1 + 46 52 71 1 + 46 52 72 1 + 46 52 73 1 + 46 52 74 1 + 46 52 75 1 + 46 52 76 1 + 46 52 77 0.995483 + 46 52 78 0.659059 + 46 52 79 0.0602217 + 46 53 47 0.00833029 + 46 53 48 0.459326 + 46 53 49 0.977331 + 46 53 50 1 + 46 53 51 1 + 46 53 52 1 + 46 53 53 1 + 46 53 54 1 + 46 53 55 1 + 46 53 56 1 + 46 53 57 1 + 46 53 58 1 + 46 53 59 1 + 46 53 60 1 + 46 53 61 1 + 46 53 62 1 + 46 53 63 1 + 46 53 64 1 + 46 53 65 1 + 46 53 66 1 + 46 53 67 1 + 46 53 68 1 + 46 53 69 1 + 46 53 70 1 + 46 53 71 1 + 46 53 72 1 + 46 53 73 1 + 46 53 74 1 + 46 53 75 1 + 46 53 76 1 + 46 53 77 1 + 46 53 78 0.977331 + 46 53 79 0.459326 + 46 53 80 0.00833029 + 46 54 47 0.192797 + 46 54 48 0.887171 + 46 54 49 1 + 46 54 50 1 + 46 54 51 1 + 46 54 52 1 + 46 54 53 1 + 46 54 54 1 + 46 54 55 1 + 46 54 56 1 + 46 54 57 1 + 46 54 58 1 + 46 54 59 1 + 46 54 60 1 + 46 54 61 1 + 46 54 62 1 + 46 54 63 1 + 46 54 64 1 + 46 54 65 1 + 46 54 66 1 + 46 54 67 1 + 46 54 68 1 + 46 54 69 1 + 46 54 70 1 + 46 54 71 1 + 46 54 72 1 + 46 54 73 1 + 46 54 74 1 + 46 54 75 1 + 46 54 76 1 + 46 54 77 1 + 46 54 78 1 + 46 54 79 0.887171 + 46 54 80 0.192797 + 46 55 46 0.0207198 + 46 55 47 0.611412 + 46 55 48 0.998538 + 46 55 49 1 + 46 55 50 1 + 46 55 51 1 + 46 55 52 1 + 46 55 53 1 + 46 55 54 1 + 46 55 55 1 + 46 55 56 1 + 46 55 57 1 + 46 55 58 1 + 46 55 59 1 + 46 55 60 1 + 46 55 61 1 + 46 55 62 1 + 46 55 63 1 + 46 55 64 1 + 46 55 65 1 + 46 55 66 1 + 46 55 67 1 + 46 55 68 1 + 46 55 69 1 + 46 55 70 1 + 46 55 71 1 + 46 55 72 1 + 46 55 73 1 + 46 55 74 1 + 46 55 75 1 + 46 55 76 1 + 46 55 77 1 + 46 55 78 1 + 46 55 79 0.998538 + 46 55 80 0.611412 + 46 55 81 0.0207198 + 46 56 46 0.194293 + 46 56 47 0.910969 + 46 56 48 1 + 46 56 49 1 + 46 56 50 1 + 46 56 51 1 + 46 56 52 1 + 46 56 53 1 + 46 56 54 1 + 46 56 55 1 + 46 56 56 1 + 46 56 57 1 + 46 56 58 1 + 46 56 59 1 + 46 56 60 1 + 46 56 61 1 + 46 56 62 1 + 46 56 63 1 + 46 56 64 1 + 46 56 65 1 + 46 56 66 1 + 46 56 67 1 + 46 56 68 1 + 46 56 69 1 + 46 56 70 1 + 46 56 71 1 + 46 56 72 1 + 46 56 73 1 + 46 56 74 1 + 46 56 75 1 + 46 56 76 1 + 46 56 77 1 + 46 56 78 1 + 46 56 79 1 + 46 56 80 0.910969 + 46 56 81 0.194293 + 46 57 45 0.00284305 + 46 57 46 0.510026 + 46 57 47 0.997087 + 46 57 48 1 + 46 57 49 1 + 46 57 50 1 + 46 57 51 1 + 46 57 52 1 + 46 57 53 1 + 46 57 54 1 + 46 57 55 1 + 46 57 56 1 + 46 57 57 1 + 46 57 58 1 + 46 57 59 1 + 46 57 60 1 + 46 57 61 1 + 46 57 62 1 + 46 57 63 1 + 46 57 64 1 + 46 57 65 1 + 46 57 66 1 + 46 57 67 1 + 46 57 68 1 + 46 57 69 1 + 46 57 70 1 + 46 57 71 1 + 46 57 72 1 + 46 57 73 1 + 46 57 74 1 + 46 57 75 1 + 46 57 76 1 + 46 57 77 1 + 46 57 78 1 + 46 57 79 1 + 46 57 80 0.997087 + 46 57 81 0.510026 + 46 57 82 0.00284305 + 46 58 45 0.0622884 + 46 58 46 0.787228 + 46 58 47 1 + 46 58 48 1 + 46 58 49 1 + 46 58 50 1 + 46 58 51 1 + 46 58 52 1 + 46 58 53 1 + 46 58 54 1 + 46 58 55 1 + 46 58 56 1 + 46 58 57 1 + 46 58 58 1 + 46 58 59 1 + 46 58 60 1 + 46 58 61 1 + 46 58 62 1 + 46 58 63 1 + 46 58 64 1 + 46 58 65 1 + 46 58 66 1 + 46 58 67 1 + 46 58 68 1 + 46 58 69 1 + 46 58 70 1 + 46 58 71 1 + 46 58 72 1 + 46 58 73 1 + 46 58 74 1 + 46 58 75 1 + 46 58 76 1 + 46 58 77 1 + 46 58 78 1 + 46 58 79 1 + 46 58 80 1 + 46 58 81 0.787228 + 46 58 82 0.0622884 + 46 59 45 0.196147 + 46 59 46 0.931469 + 46 59 47 1 + 46 59 48 1 + 46 59 49 1 + 46 59 50 1 + 46 59 51 1 + 46 59 52 1 + 46 59 53 1 + 46 59 54 1 + 46 59 55 1 + 46 59 56 1 + 46 59 57 1 + 46 59 58 1 + 46 59 59 1 + 46 59 60 1 + 46 59 61 1 + 46 59 62 1 + 46 59 63 1 + 46 59 64 1 + 46 59 65 1 + 46 59 66 1 + 46 59 67 1 + 46 59 68 1 + 46 59 69 1 + 46 59 70 1 + 46 59 71 1 + 46 59 72 1 + 46 59 73 1 + 46 59 74 1 + 46 59 75 1 + 46 59 76 1 + 46 59 77 1 + 46 59 78 1 + 46 59 79 1 + 46 59 80 1 + 46 59 81 0.931469 + 46 59 82 0.196147 + 46 60 45 0.358249 + 46 60 46 0.988806 + 46 60 47 1 + 46 60 48 1 + 46 60 49 1 + 46 60 50 1 + 46 60 51 1 + 46 60 52 1 + 46 60 53 1 + 46 60 54 1 + 46 60 55 1 + 46 60 56 1 + 46 60 57 1 + 46 60 58 1 + 46 60 59 1 + 46 60 60 1 + 46 60 61 1 + 46 60 62 1 + 46 60 63 1 + 46 60 64 1 + 46 60 65 1 + 46 60 66 1 + 46 60 67 1 + 46 60 68 1 + 46 60 69 1 + 46 60 70 1 + 46 60 71 1 + 46 60 72 1 + 46 60 73 1 + 46 60 74 1 + 46 60 75 1 + 46 60 76 1 + 46 60 77 1 + 46 60 78 1 + 46 60 79 1 + 46 60 80 1 + 46 60 81 0.988806 + 46 60 82 0.358249 + 46 61 44 7.7901e-05 + 46 61 45 0.509943 + 46 61 46 0.999903 + 46 61 47 1 + 46 61 48 1 + 46 61 49 1 + 46 61 50 1 + 46 61 51 1 + 46 61 52 1 + 46 61 53 1 + 46 61 54 1 + 46 61 55 1 + 46 61 56 1 + 46 61 57 1 + 46 61 58 1 + 46 61 59 1 + 46 61 60 1 + 46 61 61 1 + 46 61 62 1 + 46 61 63 1 + 46 61 64 1 + 46 61 65 1 + 46 61 66 1 + 46 61 67 1 + 46 61 68 1 + 46 61 69 1 + 46 61 70 1 + 46 61 71 1 + 46 61 72 1 + 46 61 73 1 + 46 61 74 1 + 46 61 75 1 + 46 61 76 1 + 46 61 77 1 + 46 61 78 1 + 46 61 79 1 + 46 61 80 1 + 46 61 81 0.999903 + 46 61 82 0.509943 + 46 61 83 7.7901e-05 + 46 62 44 0.00382379 + 46 62 45 0.613886 + 46 62 46 1 + 46 62 47 1 + 46 62 48 1 + 46 62 49 1 + 46 62 50 1 + 46 62 51 1 + 46 62 52 1 + 46 62 53 1 + 46 62 54 1 + 46 62 55 1 + 46 62 56 1 + 46 62 57 1 + 46 62 58 1 + 46 62 59 1 + 46 62 60 1 + 46 62 61 1 + 46 62 62 1 + 46 62 63 1 + 46 62 64 1 + 46 62 65 1 + 46 62 66 1 + 46 62 67 1 + 46 62 68 1 + 46 62 69 1 + 46 62 70 1 + 46 62 71 1 + 46 62 72 1 + 46 62 73 1 + 46 62 74 1 + 46 62 75 1 + 46 62 76 1 + 46 62 77 1 + 46 62 78 1 + 46 62 79 1 + 46 62 80 1 + 46 62 81 1 + 46 62 82 0.613886 + 46 62 83 0.00382379 + 46 63 44 0.00976158 + 46 63 45 0.661608 + 46 63 46 1 + 46 63 47 1 + 46 63 48 1 + 46 63 49 1 + 46 63 50 1 + 46 63 51 1 + 46 63 52 1 + 46 63 53 1 + 46 63 54 1 + 46 63 55 1 + 46 63 56 1 + 46 63 57 1 + 46 63 58 1 + 46 63 59 1 + 46 63 60 1 + 46 63 61 1 + 46 63 62 1 + 46 63 63 1 + 46 63 64 1 + 46 63 65 1 + 46 63 66 1 + 46 63 67 1 + 46 63 68 1 + 46 63 69 1 + 46 63 70 1 + 46 63 71 1 + 46 63 72 1 + 46 63 73 1 + 46 63 74 1 + 46 63 75 1 + 46 63 76 1 + 46 63 77 1 + 46 63 78 1 + 46 63 79 1 + 46 63 80 1 + 46 63 81 1 + 46 63 82 0.661608 + 46 63 83 0.00976158 + 46 64 44 0.00976158 + 46 64 45 0.661608 + 46 64 46 1 + 46 64 47 1 + 46 64 48 1 + 46 64 49 1 + 46 64 50 1 + 46 64 51 1 + 46 64 52 1 + 46 64 53 1 + 46 64 54 1 + 46 64 55 1 + 46 64 56 1 + 46 64 57 1 + 46 64 58 1 + 46 64 59 1 + 46 64 60 1 + 46 64 61 1 + 46 64 62 1 + 46 64 63 1 + 46 64 64 1 + 46 64 65 1 + 46 64 66 1 + 46 64 67 1 + 46 64 68 1 + 46 64 69 1 + 46 64 70 1 + 46 64 71 1 + 46 64 72 1 + 46 64 73 1 + 46 64 74 1 + 46 64 75 1 + 46 64 76 1 + 46 64 77 1 + 46 64 78 1 + 46 64 79 1 + 46 64 80 1 + 46 64 81 1 + 46 64 82 0.661608 + 46 64 83 0.00976158 + 46 65 44 0.00382379 + 46 65 45 0.613886 + 46 65 46 1 + 46 65 47 1 + 46 65 48 1 + 46 65 49 1 + 46 65 50 1 + 46 65 51 1 + 46 65 52 1 + 46 65 53 1 + 46 65 54 1 + 46 65 55 1 + 46 65 56 1 + 46 65 57 1 + 46 65 58 1 + 46 65 59 1 + 46 65 60 1 + 46 65 61 1 + 46 65 62 1 + 46 65 63 1 + 46 65 64 1 + 46 65 65 1 + 46 65 66 1 + 46 65 67 1 + 46 65 68 1 + 46 65 69 1 + 46 65 70 1 + 46 65 71 1 + 46 65 72 1 + 46 65 73 1 + 46 65 74 1 + 46 65 75 1 + 46 65 76 1 + 46 65 77 1 + 46 65 78 1 + 46 65 79 1 + 46 65 80 1 + 46 65 81 1 + 46 65 82 0.613886 + 46 65 83 0.00382379 + 46 66 44 7.7901e-05 + 46 66 45 0.509943 + 46 66 46 0.999903 + 46 66 47 1 + 46 66 48 1 + 46 66 49 1 + 46 66 50 1 + 46 66 51 1 + 46 66 52 1 + 46 66 53 1 + 46 66 54 1 + 46 66 55 1 + 46 66 56 1 + 46 66 57 1 + 46 66 58 1 + 46 66 59 1 + 46 66 60 1 + 46 66 61 1 + 46 66 62 1 + 46 66 63 1 + 46 66 64 1 + 46 66 65 1 + 46 66 66 1 + 46 66 67 1 + 46 66 68 1 + 46 66 69 1 + 46 66 70 1 + 46 66 71 1 + 46 66 72 1 + 46 66 73 1 + 46 66 74 1 + 46 66 75 1 + 46 66 76 1 + 46 66 77 1 + 46 66 78 1 + 46 66 79 1 + 46 66 80 1 + 46 66 81 0.999903 + 46 66 82 0.509943 + 46 66 83 7.7901e-05 + 46 67 45 0.358249 + 46 67 46 0.988806 + 46 67 47 1 + 46 67 48 1 + 46 67 49 1 + 46 67 50 1 + 46 67 51 1 + 46 67 52 1 + 46 67 53 1 + 46 67 54 1 + 46 67 55 1 + 46 67 56 1 + 46 67 57 1 + 46 67 58 1 + 46 67 59 1 + 46 67 60 1 + 46 67 61 1 + 46 67 62 1 + 46 67 63 1 + 46 67 64 1 + 46 67 65 1 + 46 67 66 1 + 46 67 67 1 + 46 67 68 1 + 46 67 69 1 + 46 67 70 1 + 46 67 71 1 + 46 67 72 1 + 46 67 73 1 + 46 67 74 1 + 46 67 75 1 + 46 67 76 1 + 46 67 77 1 + 46 67 78 1 + 46 67 79 1 + 46 67 80 1 + 46 67 81 0.988806 + 46 67 82 0.358249 + 46 68 45 0.196147 + 46 68 46 0.931469 + 46 68 47 1 + 46 68 48 1 + 46 68 49 1 + 46 68 50 1 + 46 68 51 1 + 46 68 52 1 + 46 68 53 1 + 46 68 54 1 + 46 68 55 1 + 46 68 56 1 + 46 68 57 1 + 46 68 58 1 + 46 68 59 1 + 46 68 60 1 + 46 68 61 1 + 46 68 62 1 + 46 68 63 1 + 46 68 64 1 + 46 68 65 1 + 46 68 66 1 + 46 68 67 1 + 46 68 68 1 + 46 68 69 1 + 46 68 70 1 + 46 68 71 1 + 46 68 72 1 + 46 68 73 1 + 46 68 74 1 + 46 68 75 1 + 46 68 76 1 + 46 68 77 1 + 46 68 78 1 + 46 68 79 1 + 46 68 80 1 + 46 68 81 0.931469 + 46 68 82 0.196147 + 46 69 45 0.0622884 + 46 69 46 0.787228 + 46 69 47 1 + 46 69 48 1 + 46 69 49 1 + 46 69 50 1 + 46 69 51 1 + 46 69 52 1 + 46 69 53 1 + 46 69 54 1 + 46 69 55 1 + 46 69 56 1 + 46 69 57 1 + 46 69 58 1 + 46 69 59 1 + 46 69 60 1 + 46 69 61 1 + 46 69 62 1 + 46 69 63 1 + 46 69 64 1 + 46 69 65 1 + 46 69 66 1 + 46 69 67 1 + 46 69 68 1 + 46 69 69 1 + 46 69 70 1 + 46 69 71 1 + 46 69 72 1 + 46 69 73 1 + 46 69 74 1 + 46 69 75 1 + 46 69 76 1 + 46 69 77 1 + 46 69 78 1 + 46 69 79 1 + 46 69 80 1 + 46 69 81 0.787228 + 46 69 82 0.0622884 + 46 70 45 0.00284305 + 46 70 46 0.510026 + 46 70 47 0.997087 + 46 70 48 1 + 46 70 49 1 + 46 70 50 1 + 46 70 51 1 + 46 70 52 1 + 46 70 53 1 + 46 70 54 1 + 46 70 55 1 + 46 70 56 1 + 46 70 57 1 + 46 70 58 1 + 46 70 59 1 + 46 70 60 1 + 46 70 61 1 + 46 70 62 1 + 46 70 63 1 + 46 70 64 1 + 46 70 65 1 + 46 70 66 1 + 46 70 67 1 + 46 70 68 1 + 46 70 69 1 + 46 70 70 1 + 46 70 71 1 + 46 70 72 1 + 46 70 73 1 + 46 70 74 1 + 46 70 75 1 + 46 70 76 1 + 46 70 77 1 + 46 70 78 1 + 46 70 79 1 + 46 70 80 0.997087 + 46 70 81 0.510026 + 46 70 82 0.00284305 + 46 71 46 0.194293 + 46 71 47 0.910969 + 46 71 48 1 + 46 71 49 1 + 46 71 50 1 + 46 71 51 1 + 46 71 52 1 + 46 71 53 1 + 46 71 54 1 + 46 71 55 1 + 46 71 56 1 + 46 71 57 1 + 46 71 58 1 + 46 71 59 1 + 46 71 60 1 + 46 71 61 1 + 46 71 62 1 + 46 71 63 1 + 46 71 64 1 + 46 71 65 1 + 46 71 66 1 + 46 71 67 1 + 46 71 68 1 + 46 71 69 1 + 46 71 70 1 + 46 71 71 1 + 46 71 72 1 + 46 71 73 1 + 46 71 74 1 + 46 71 75 1 + 46 71 76 1 + 46 71 77 1 + 46 71 78 1 + 46 71 79 1 + 46 71 80 0.910969 + 46 71 81 0.194293 + 46 72 46 0.0207198 + 46 72 47 0.611412 + 46 72 48 0.998538 + 46 72 49 1 + 46 72 50 1 + 46 72 51 1 + 46 72 52 1 + 46 72 53 1 + 46 72 54 1 + 46 72 55 1 + 46 72 56 1 + 46 72 57 1 + 46 72 58 1 + 46 72 59 1 + 46 72 60 1 + 46 72 61 1 + 46 72 62 1 + 46 72 63 1 + 46 72 64 1 + 46 72 65 1 + 46 72 66 1 + 46 72 67 1 + 46 72 68 1 + 46 72 69 1 + 46 72 70 1 + 46 72 71 1 + 46 72 72 1 + 46 72 73 1 + 46 72 74 1 + 46 72 75 1 + 46 72 76 1 + 46 72 77 1 + 46 72 78 1 + 46 72 79 0.998538 + 46 72 80 0.611412 + 46 72 81 0.0207198 + 46 73 47 0.192797 + 46 73 48 0.887171 + 46 73 49 1 + 46 73 50 1 + 46 73 51 1 + 46 73 52 1 + 46 73 53 1 + 46 73 54 1 + 46 73 55 1 + 46 73 56 1 + 46 73 57 1 + 46 73 58 1 + 46 73 59 1 + 46 73 60 1 + 46 73 61 1 + 46 73 62 1 + 46 73 63 1 + 46 73 64 1 + 46 73 65 1 + 46 73 66 1 + 46 73 67 1 + 46 73 68 1 + 46 73 69 1 + 46 73 70 1 + 46 73 71 1 + 46 73 72 1 + 46 73 73 1 + 46 73 74 1 + 46 73 75 1 + 46 73 76 1 + 46 73 77 1 + 46 73 78 1 + 46 73 79 0.887171 + 46 73 80 0.192797 + 46 74 47 0.00833029 + 46 74 48 0.459326 + 46 74 49 0.977331 + 46 74 50 1 + 46 74 51 1 + 46 74 52 1 + 46 74 53 1 + 46 74 54 1 + 46 74 55 1 + 46 74 56 1 + 46 74 57 1 + 46 74 58 1 + 46 74 59 1 + 46 74 60 1 + 46 74 61 1 + 46 74 62 1 + 46 74 63 1 + 46 74 64 1 + 46 74 65 1 + 46 74 66 1 + 46 74 67 1 + 46 74 68 1 + 46 74 69 1 + 46 74 70 1 + 46 74 71 1 + 46 74 72 1 + 46 74 73 1 + 46 74 74 1 + 46 74 75 1 + 46 74 76 1 + 46 74 77 1 + 46 74 78 0.977331 + 46 74 79 0.459326 + 46 74 80 0.00833029 + 46 75 48 0.0602217 + 46 75 49 0.659059 + 46 75 50 0.995483 + 46 75 51 1 + 46 75 52 1 + 46 75 53 1 + 46 75 54 1 + 46 75 55 1 + 46 75 56 1 + 46 75 57 1 + 46 75 58 1 + 46 75 59 1 + 46 75 60 1 + 46 75 61 1 + 46 75 62 1 + 46 75 63 1 + 46 75 64 1 + 46 75 65 1 + 46 75 66 1 + 46 75 67 1 + 46 75 68 1 + 46 75 69 1 + 46 75 70 1 + 46 75 71 1 + 46 75 72 1 + 46 75 73 1 + 46 75 74 1 + 46 75 75 1 + 46 75 76 1 + 46 75 77 0.995483 + 46 75 78 0.659059 + 46 75 79 0.0602217 + 46 76 49 0.127131 + 46 76 50 0.749071 + 46 76 51 0.99797 + 46 76 52 1 + 46 76 53 1 + 46 76 54 1 + 46 76 55 1 + 46 76 56 1 + 46 76 57 1 + 46 76 58 1 + 46 76 59 1 + 46 76 60 1 + 46 76 61 1 + 46 76 62 1 + 46 76 63 1 + 46 76 64 1 + 46 76 65 1 + 46 76 66 1 + 46 76 67 1 + 46 76 68 1 + 46 76 69 1 + 46 76 70 1 + 46 76 71 1 + 46 76 72 1 + 46 76 73 1 + 46 76 74 1 + 46 76 75 1 + 46 76 76 0.99797 + 46 76 77 0.749071 + 46 76 78 0.127131 + 46 77 49 1.68961e-05 + 46 77 50 0.156902 + 46 77 51 0.749071 + 46 77 52 0.995483 + 46 77 53 1 + 46 77 54 1 + 46 77 55 1 + 46 77 56 1 + 46 77 57 1 + 46 77 58 1 + 46 77 59 1 + 46 77 60 1 + 46 77 61 1 + 46 77 62 1 + 46 77 63 1 + 46 77 64 1 + 46 77 65 1 + 46 77 66 1 + 46 77 67 1 + 46 77 68 1 + 46 77 69 1 + 46 77 70 1 + 46 77 71 1 + 46 77 72 1 + 46 77 73 1 + 46 77 74 1 + 46 77 75 0.995483 + 46 77 76 0.749071 + 46 77 77 0.156902 + 46 77 78 1.68961e-05 + 46 78 50 1.68961e-05 + 46 78 51 0.127131 + 46 78 52 0.659059 + 46 78 53 0.977331 + 46 78 54 1 + 46 78 55 1 + 46 78 56 1 + 46 78 57 1 + 46 78 58 1 + 46 78 59 1 + 46 78 60 1 + 46 78 61 1 + 46 78 62 1 + 46 78 63 1 + 46 78 64 1 + 46 78 65 1 + 46 78 66 1 + 46 78 67 1 + 46 78 68 1 + 46 78 69 1 + 46 78 70 1 + 46 78 71 1 + 46 78 72 1 + 46 78 73 1 + 46 78 74 0.977331 + 46 78 75 0.659059 + 46 78 76 0.127131 + 46 78 77 1.68961e-05 + 46 79 52 0.0602217 + 46 79 53 0.459326 + 46 79 54 0.887171 + 46 79 55 0.998538 + 46 79 56 1 + 46 79 57 1 + 46 79 58 1 + 46 79 59 1 + 46 79 60 1 + 46 79 61 1 + 46 79 62 1 + 46 79 63 1 + 46 79 64 1 + 46 79 65 1 + 46 79 66 1 + 46 79 67 1 + 46 79 68 1 + 46 79 69 1 + 46 79 70 1 + 46 79 71 1 + 46 79 72 0.998538 + 46 79 73 0.887171 + 46 79 74 0.459326 + 46 79 75 0.0602217 + 46 80 53 0.00833029 + 46 80 54 0.192797 + 46 80 55 0.611412 + 46 80 56 0.910969 + 46 80 57 0.997087 + 46 80 58 1 + 46 80 59 1 + 46 80 60 1 + 46 80 61 1 + 46 80 62 1 + 46 80 63 1 + 46 80 64 1 + 46 80 65 1 + 46 80 66 1 + 46 80 67 1 + 46 80 68 1 + 46 80 69 1 + 46 80 70 0.997087 + 46 80 71 0.910969 + 46 80 72 0.611412 + 46 80 73 0.192797 + 46 80 74 0.00833029 + 46 81 55 0.0207198 + 46 81 56 0.194293 + 46 81 57 0.510026 + 46 81 58 0.787228 + 46 81 59 0.931469 + 46 81 60 0.988806 + 46 81 61 0.999903 + 46 81 62 1 + 46 81 63 1 + 46 81 64 1 + 46 81 65 1 + 46 81 66 0.999903 + 46 81 67 0.988806 + 46 81 68 0.931469 + 46 81 69 0.787228 + 46 81 70 0.510026 + 46 81 71 0.194293 + 46 81 72 0.0207198 + 46 82 57 0.00284305 + 46 82 58 0.0622884 + 46 82 59 0.196147 + 46 82 60 0.358249 + 46 82 61 0.509943 + 46 82 62 0.613886 + 46 82 63 0.661608 + 46 82 64 0.661608 + 46 82 65 0.613886 + 46 82 66 0.509943 + 46 82 67 0.358249 + 46 82 68 0.196147 + 46 82 69 0.0622884 + 46 82 70 0.00284305 + 46 83 61 7.7901e-05 + 46 83 62 0.00382379 + 46 83 63 0.00976158 + 46 83 64 0.00976158 + 46 83 65 0.00382379 + 46 83 66 7.7901e-05 + 47 44 57 0.000148631 + 47 44 58 0.0302985 + 47 44 59 0.133628 + 47 44 60 0.27231 + 47 44 61 0.408101 + 47 44 62 0.509823 + 47 44 63 0.561032 + 47 44 64 0.561032 + 47 44 65 0.509823 + 47 44 66 0.408101 + 47 44 67 0.27231 + 47 44 68 0.133628 + 47 44 69 0.0302985 + 47 44 70 0.000148631 + 47 45 55 0.0128488 + 47 45 56 0.16137 + 47 45 57 0.458559 + 47 45 58 0.747928 + 47 45 59 0.909115 + 47 45 60 0.979426 + 47 45 61 0.9989 + 47 45 62 1 + 47 45 63 1 + 47 45 64 1 + 47 45 65 1 + 47 45 66 0.9989 + 47 45 67 0.979426 + 47 45 68 0.909115 + 47 45 69 0.747928 + 47 45 70 0.458559 + 47 45 71 0.16137 + 47 45 72 0.0128488 + 47 46 53 0.00833029 + 47 46 54 0.192797 + 47 46 55 0.611412 + 47 46 56 0.910969 + 47 46 57 0.997087 + 47 46 58 1 + 47 46 59 1 + 47 46 60 1 + 47 46 61 1 + 47 46 62 1 + 47 46 63 1 + 47 46 64 1 + 47 46 65 1 + 47 46 66 1 + 47 46 67 1 + 47 46 68 1 + 47 46 69 1 + 47 46 70 0.997087 + 47 46 71 0.910969 + 47 46 72 0.611412 + 47 46 73 0.192797 + 47 46 74 0.00833029 + 47 47 52 0.0791732 + 47 47 53 0.510119 + 47 47 54 0.912465 + 47 47 55 0.99961 + 47 47 56 1 + 47 47 57 1 + 47 47 58 1 + 47 47 59 1 + 47 47 60 1 + 47 47 61 1 + 47 47 62 1 + 47 47 63 1 + 47 47 64 1 + 47 47 65 1 + 47 47 66 1 + 47 47 67 1 + 47 47 68 1 + 47 47 69 1 + 47 47 70 1 + 47 47 71 1 + 47 47 72 0.99961 + 47 47 73 0.912465 + 47 47 74 0.510119 + 47 47 75 0.0791732 + 47 48 50 0.00101852 + 47 48 51 0.190365 + 47 48 52 0.749996 + 47 48 53 0.991434 + 47 48 54 1 + 47 48 55 1 + 47 48 56 1 + 47 48 57 1 + 47 48 58 1 + 47 48 59 1 + 47 48 60 1 + 47 48 61 1 + 47 48 62 1 + 47 48 63 1 + 47 48 64 1 + 47 48 65 1 + 47 48 66 1 + 47 48 67 1 + 47 48 68 1 + 47 48 69 1 + 47 48 70 1 + 47 48 71 1 + 47 48 72 1 + 47 48 73 1 + 47 48 74 0.991434 + 47 48 75 0.749996 + 47 48 76 0.190365 + 47 48 77 0.00101852 + 47 49 49 0.00261469 + 47 49 50 0.269165 + 47 49 51 0.860729 + 47 49 52 0.999874 + 47 49 53 1 + 47 49 54 1 + 47 49 55 1 + 47 49 56 1 + 47 49 57 1 + 47 49 58 1 + 47 49 59 1 + 47 49 60 1 + 47 49 61 1 + 47 49 62 1 + 47 49 63 1 + 47 49 64 1 + 47 49 65 1 + 47 49 66 1 + 47 49 67 1 + 47 49 68 1 + 47 49 69 1 + 47 49 70 1 + 47 49 71 1 + 47 49 72 1 + 47 49 73 1 + 47 49 74 1 + 47 49 75 0.999874 + 47 49 76 0.860729 + 47 49 77 0.269165 + 47 49 78 0.00261469 + 47 50 48 0.00101852 + 47 50 49 0.269165 + 47 50 50 0.88976 + 47 50 51 1 + 47 50 52 1 + 47 50 53 1 + 47 50 54 1 + 47 50 55 1 + 47 50 56 1 + 47 50 57 1 + 47 50 58 1 + 47 50 59 1 + 47 50 60 1 + 47 50 61 1 + 47 50 62 1 + 47 50 63 1 + 47 50 64 1 + 47 50 65 1 + 47 50 66 1 + 47 50 67 1 + 47 50 68 1 + 47 50 69 1 + 47 50 70 1 + 47 50 71 1 + 47 50 72 1 + 47 50 73 1 + 47 50 74 1 + 47 50 75 1 + 47 50 76 1 + 47 50 77 0.88976 + 47 50 78 0.269165 + 47 50 79 0.00101852 + 47 51 48 0.190365 + 47 51 49 0.860729 + 47 51 50 1 + 47 51 51 1 + 47 51 52 1 + 47 51 53 1 + 47 51 54 1 + 47 51 55 1 + 47 51 56 1 + 47 51 57 1 + 47 51 58 1 + 47 51 59 1 + 47 51 60 1 + 47 51 61 1 + 47 51 62 1 + 47 51 63 1 + 47 51 64 1 + 47 51 65 1 + 47 51 66 1 + 47 51 67 1 + 47 51 68 1 + 47 51 69 1 + 47 51 70 1 + 47 51 71 1 + 47 51 72 1 + 47 51 73 1 + 47 51 74 1 + 47 51 75 1 + 47 51 76 1 + 47 51 77 1 + 47 51 78 0.860729 + 47 51 79 0.190365 + 47 52 47 0.0791732 + 47 52 48 0.749996 + 47 52 49 0.999874 + 47 52 50 1 + 47 52 51 1 + 47 52 52 1 + 47 52 53 1 + 47 52 54 1 + 47 52 55 1 + 47 52 56 1 + 47 52 57 1 + 47 52 58 1 + 47 52 59 1 + 47 52 60 1 + 47 52 61 1 + 47 52 62 1 + 47 52 63 1 + 47 52 64 1 + 47 52 65 1 + 47 52 66 1 + 47 52 67 1 + 47 52 68 1 + 47 52 69 1 + 47 52 70 1 + 47 52 71 1 + 47 52 72 1 + 47 52 73 1 + 47 52 74 1 + 47 52 75 1 + 47 52 76 1 + 47 52 77 1 + 47 52 78 0.999874 + 47 52 79 0.749996 + 47 52 80 0.0791732 + 47 53 46 0.00833029 + 47 53 47 0.510119 + 47 53 48 0.991434 + 47 53 49 1 + 47 53 50 1 + 47 53 51 1 + 47 53 52 1 + 47 53 53 1 + 47 53 54 1 + 47 53 55 1 + 47 53 56 1 + 47 53 57 1 + 47 53 58 1 + 47 53 59 1 + 47 53 60 1 + 47 53 61 1 + 47 53 62 1 + 47 53 63 1 + 47 53 64 1 + 47 53 65 1 + 47 53 66 1 + 47 53 67 1 + 47 53 68 1 + 47 53 69 1 + 47 53 70 1 + 47 53 71 1 + 47 53 72 1 + 47 53 73 1 + 47 53 74 1 + 47 53 75 1 + 47 53 76 1 + 47 53 77 1 + 47 53 78 1 + 47 53 79 0.991434 + 47 53 80 0.510119 + 47 53 81 0.00833029 + 47 54 46 0.192797 + 47 54 47 0.912465 + 47 54 48 1 + 47 54 49 1 + 47 54 50 1 + 47 54 51 1 + 47 54 52 1 + 47 54 53 1 + 47 54 54 1 + 47 54 55 1 + 47 54 56 1 + 47 54 57 1 + 47 54 58 1 + 47 54 59 1 + 47 54 60 1 + 47 54 61 1 + 47 54 62 1 + 47 54 63 1 + 47 54 64 1 + 47 54 65 1 + 47 54 66 1 + 47 54 67 1 + 47 54 68 1 + 47 54 69 1 + 47 54 70 1 + 47 54 71 1 + 47 54 72 1 + 47 54 73 1 + 47 54 74 1 + 47 54 75 1 + 47 54 76 1 + 47 54 77 1 + 47 54 78 1 + 47 54 79 1 + 47 54 80 0.912465 + 47 54 81 0.192797 + 47 55 45 0.0128488 + 47 55 46 0.611412 + 47 55 47 0.99961 + 47 55 48 1 + 47 55 49 1 + 47 55 50 1 + 47 55 51 1 + 47 55 52 1 + 47 55 53 1 + 47 55 54 1 + 47 55 55 1 + 47 55 56 1 + 47 55 57 1 + 47 55 58 1 + 47 55 59 1 + 47 55 60 1 + 47 55 61 1 + 47 55 62 1 + 47 55 63 1 + 47 55 64 1 + 47 55 65 1 + 47 55 66 1 + 47 55 67 1 + 47 55 68 1 + 47 55 69 1 + 47 55 70 1 + 47 55 71 1 + 47 55 72 1 + 47 55 73 1 + 47 55 74 1 + 47 55 75 1 + 47 55 76 1 + 47 55 77 1 + 47 55 78 1 + 47 55 79 1 + 47 55 80 0.99961 + 47 55 81 0.611412 + 47 55 82 0.0128488 + 47 56 45 0.16137 + 47 56 46 0.910969 + 47 56 47 1 + 47 56 48 1 + 47 56 49 1 + 47 56 50 1 + 47 56 51 1 + 47 56 52 1 + 47 56 53 1 + 47 56 54 1 + 47 56 55 1 + 47 56 56 1 + 47 56 57 1 + 47 56 58 1 + 47 56 59 1 + 47 56 60 1 + 47 56 61 1 + 47 56 62 1 + 47 56 63 1 + 47 56 64 1 + 47 56 65 1 + 47 56 66 1 + 47 56 67 1 + 47 56 68 1 + 47 56 69 1 + 47 56 70 1 + 47 56 71 1 + 47 56 72 1 + 47 56 73 1 + 47 56 74 1 + 47 56 75 1 + 47 56 76 1 + 47 56 77 1 + 47 56 78 1 + 47 56 79 1 + 47 56 80 1 + 47 56 81 0.910969 + 47 56 82 0.16137 + 47 57 44 0.000148631 + 47 57 45 0.458559 + 47 57 46 0.997087 + 47 57 47 1 + 47 57 48 1 + 47 57 49 1 + 47 57 50 1 + 47 57 51 1 + 47 57 52 1 + 47 57 53 1 + 47 57 54 1 + 47 57 55 1 + 47 57 56 1 + 47 57 57 1 + 47 57 58 1 + 47 57 59 1 + 47 57 60 1 + 47 57 61 1 + 47 57 62 1 + 47 57 63 1 + 47 57 64 1 + 47 57 65 1 + 47 57 66 1 + 47 57 67 1 + 47 57 68 1 + 47 57 69 1 + 47 57 70 1 + 47 57 71 1 + 47 57 72 1 + 47 57 73 1 + 47 57 74 1 + 47 57 75 1 + 47 57 76 1 + 47 57 77 1 + 47 57 78 1 + 47 57 79 1 + 47 57 80 1 + 47 57 81 0.997087 + 47 57 82 0.458559 + 47 57 83 0.000148631 + 47 58 44 0.0302985 + 47 58 45 0.747928 + 47 58 46 1 + 47 58 47 1 + 47 58 48 1 + 47 58 49 1 + 47 58 50 1 + 47 58 51 1 + 47 58 52 1 + 47 58 53 1 + 47 58 54 1 + 47 58 55 1 + 47 58 56 1 + 47 58 57 1 + 47 58 58 1 + 47 58 59 1 + 47 58 60 1 + 47 58 61 1 + 47 58 62 1 + 47 58 63 1 + 47 58 64 1 + 47 58 65 1 + 47 58 66 1 + 47 58 67 1 + 47 58 68 1 + 47 58 69 1 + 47 58 70 1 + 47 58 71 1 + 47 58 72 1 + 47 58 73 1 + 47 58 74 1 + 47 58 75 1 + 47 58 76 1 + 47 58 77 1 + 47 58 78 1 + 47 58 79 1 + 47 58 80 1 + 47 58 81 1 + 47 58 82 0.747928 + 47 58 83 0.0302985 + 47 59 44 0.133628 + 47 59 45 0.909115 + 47 59 46 1 + 47 59 47 1 + 47 59 48 1 + 47 59 49 1 + 47 59 50 1 + 47 59 51 1 + 47 59 52 1 + 47 59 53 1 + 47 59 54 1 + 47 59 55 1 + 47 59 56 1 + 47 59 57 1 + 47 59 58 1 + 47 59 59 1 + 47 59 60 1 + 47 59 61 1 + 47 59 62 1 + 47 59 63 1 + 47 59 64 1 + 47 59 65 1 + 47 59 66 1 + 47 59 67 1 + 47 59 68 1 + 47 59 69 1 + 47 59 70 1 + 47 59 71 1 + 47 59 72 1 + 47 59 73 1 + 47 59 74 1 + 47 59 75 1 + 47 59 76 1 + 47 59 77 1 + 47 59 78 1 + 47 59 79 1 + 47 59 80 1 + 47 59 81 1 + 47 59 82 0.909115 + 47 59 83 0.133628 + 47 60 44 0.27231 + 47 60 45 0.979426 + 47 60 46 1 + 47 60 47 1 + 47 60 48 1 + 47 60 49 1 + 47 60 50 1 + 47 60 51 1 + 47 60 52 1 + 47 60 53 1 + 47 60 54 1 + 47 60 55 1 + 47 60 56 1 + 47 60 57 1 + 47 60 58 1 + 47 60 59 1 + 47 60 60 1 + 47 60 61 1 + 47 60 62 1 + 47 60 63 1 + 47 60 64 1 + 47 60 65 1 + 47 60 66 1 + 47 60 67 1 + 47 60 68 1 + 47 60 69 1 + 47 60 70 1 + 47 60 71 1 + 47 60 72 1 + 47 60 73 1 + 47 60 74 1 + 47 60 75 1 + 47 60 76 1 + 47 60 77 1 + 47 60 78 1 + 47 60 79 1 + 47 60 80 1 + 47 60 81 1 + 47 60 82 0.979426 + 47 60 83 0.27231 + 47 61 44 0.408101 + 47 61 45 0.9989 + 47 61 46 1 + 47 61 47 1 + 47 61 48 1 + 47 61 49 1 + 47 61 50 1 + 47 61 51 1 + 47 61 52 1 + 47 61 53 1 + 47 61 54 1 + 47 61 55 1 + 47 61 56 1 + 47 61 57 1 + 47 61 58 1 + 47 61 59 1 + 47 61 60 1 + 47 61 61 1 + 47 61 62 1 + 47 61 63 1 + 47 61 64 1 + 47 61 65 1 + 47 61 66 1 + 47 61 67 1 + 47 61 68 1 + 47 61 69 1 + 47 61 70 1 + 47 61 71 1 + 47 61 72 1 + 47 61 73 1 + 47 61 74 1 + 47 61 75 1 + 47 61 76 1 + 47 61 77 1 + 47 61 78 1 + 47 61 79 1 + 47 61 80 1 + 47 61 81 1 + 47 61 82 0.9989 + 47 61 83 0.408101 + 47 62 44 0.509823 + 47 62 45 1 + 47 62 46 1 + 47 62 47 1 + 47 62 48 1 + 47 62 49 1 + 47 62 50 1 + 47 62 51 1 + 47 62 52 1 + 47 62 53 1 + 47 62 54 1 + 47 62 55 1 + 47 62 56 1 + 47 62 57 1 + 47 62 58 1 + 47 62 59 1 + 47 62 60 1 + 47 62 61 1 + 47 62 62 1 + 47 62 63 1 + 47 62 64 1 + 47 62 65 1 + 47 62 66 1 + 47 62 67 1 + 47 62 68 1 + 47 62 69 1 + 47 62 70 1 + 47 62 71 1 + 47 62 72 1 + 47 62 73 1 + 47 62 74 1 + 47 62 75 1 + 47 62 76 1 + 47 62 77 1 + 47 62 78 1 + 47 62 79 1 + 47 62 80 1 + 47 62 81 1 + 47 62 82 1 + 47 62 83 0.509823 + 47 63 44 0.561032 + 47 63 45 1 + 47 63 46 1 + 47 63 47 1 + 47 63 48 1 + 47 63 49 1 + 47 63 50 1 + 47 63 51 1 + 47 63 52 1 + 47 63 53 1 + 47 63 54 1 + 47 63 55 1 + 47 63 56 1 + 47 63 57 1 + 47 63 58 1 + 47 63 59 1 + 47 63 60 1 + 47 63 61 1 + 47 63 62 1 + 47 63 63 1 + 47 63 64 1 + 47 63 65 1 + 47 63 66 1 + 47 63 67 1 + 47 63 68 1 + 47 63 69 1 + 47 63 70 1 + 47 63 71 1 + 47 63 72 1 + 47 63 73 1 + 47 63 74 1 + 47 63 75 1 + 47 63 76 1 + 47 63 77 1 + 47 63 78 1 + 47 63 79 1 + 47 63 80 1 + 47 63 81 1 + 47 63 82 1 + 47 63 83 0.561032 + 47 64 44 0.561032 + 47 64 45 1 + 47 64 46 1 + 47 64 47 1 + 47 64 48 1 + 47 64 49 1 + 47 64 50 1 + 47 64 51 1 + 47 64 52 1 + 47 64 53 1 + 47 64 54 1 + 47 64 55 1 + 47 64 56 1 + 47 64 57 1 + 47 64 58 1 + 47 64 59 1 + 47 64 60 1 + 47 64 61 1 + 47 64 62 1 + 47 64 63 1 + 47 64 64 1 + 47 64 65 1 + 47 64 66 1 + 47 64 67 1 + 47 64 68 1 + 47 64 69 1 + 47 64 70 1 + 47 64 71 1 + 47 64 72 1 + 47 64 73 1 + 47 64 74 1 + 47 64 75 1 + 47 64 76 1 + 47 64 77 1 + 47 64 78 1 + 47 64 79 1 + 47 64 80 1 + 47 64 81 1 + 47 64 82 1 + 47 64 83 0.561032 + 47 65 44 0.509823 + 47 65 45 1 + 47 65 46 1 + 47 65 47 1 + 47 65 48 1 + 47 65 49 1 + 47 65 50 1 + 47 65 51 1 + 47 65 52 1 + 47 65 53 1 + 47 65 54 1 + 47 65 55 1 + 47 65 56 1 + 47 65 57 1 + 47 65 58 1 + 47 65 59 1 + 47 65 60 1 + 47 65 61 1 + 47 65 62 1 + 47 65 63 1 + 47 65 64 1 + 47 65 65 1 + 47 65 66 1 + 47 65 67 1 + 47 65 68 1 + 47 65 69 1 + 47 65 70 1 + 47 65 71 1 + 47 65 72 1 + 47 65 73 1 + 47 65 74 1 + 47 65 75 1 + 47 65 76 1 + 47 65 77 1 + 47 65 78 1 + 47 65 79 1 + 47 65 80 1 + 47 65 81 1 + 47 65 82 1 + 47 65 83 0.509823 + 47 66 44 0.408101 + 47 66 45 0.9989 + 47 66 46 1 + 47 66 47 1 + 47 66 48 1 + 47 66 49 1 + 47 66 50 1 + 47 66 51 1 + 47 66 52 1 + 47 66 53 1 + 47 66 54 1 + 47 66 55 1 + 47 66 56 1 + 47 66 57 1 + 47 66 58 1 + 47 66 59 1 + 47 66 60 1 + 47 66 61 1 + 47 66 62 1 + 47 66 63 1 + 47 66 64 1 + 47 66 65 1 + 47 66 66 1 + 47 66 67 1 + 47 66 68 1 + 47 66 69 1 + 47 66 70 1 + 47 66 71 1 + 47 66 72 1 + 47 66 73 1 + 47 66 74 1 + 47 66 75 1 + 47 66 76 1 + 47 66 77 1 + 47 66 78 1 + 47 66 79 1 + 47 66 80 1 + 47 66 81 1 + 47 66 82 0.9989 + 47 66 83 0.408101 + 47 67 44 0.27231 + 47 67 45 0.979426 + 47 67 46 1 + 47 67 47 1 + 47 67 48 1 + 47 67 49 1 + 47 67 50 1 + 47 67 51 1 + 47 67 52 1 + 47 67 53 1 + 47 67 54 1 + 47 67 55 1 + 47 67 56 1 + 47 67 57 1 + 47 67 58 1 + 47 67 59 1 + 47 67 60 1 + 47 67 61 1 + 47 67 62 1 + 47 67 63 1 + 47 67 64 1 + 47 67 65 1 + 47 67 66 1 + 47 67 67 1 + 47 67 68 1 + 47 67 69 1 + 47 67 70 1 + 47 67 71 1 + 47 67 72 1 + 47 67 73 1 + 47 67 74 1 + 47 67 75 1 + 47 67 76 1 + 47 67 77 1 + 47 67 78 1 + 47 67 79 1 + 47 67 80 1 + 47 67 81 1 + 47 67 82 0.979426 + 47 67 83 0.27231 + 47 68 44 0.133628 + 47 68 45 0.909115 + 47 68 46 1 + 47 68 47 1 + 47 68 48 1 + 47 68 49 1 + 47 68 50 1 + 47 68 51 1 + 47 68 52 1 + 47 68 53 1 + 47 68 54 1 + 47 68 55 1 + 47 68 56 1 + 47 68 57 1 + 47 68 58 1 + 47 68 59 1 + 47 68 60 1 + 47 68 61 1 + 47 68 62 1 + 47 68 63 1 + 47 68 64 1 + 47 68 65 1 + 47 68 66 1 + 47 68 67 1 + 47 68 68 1 + 47 68 69 1 + 47 68 70 1 + 47 68 71 1 + 47 68 72 1 + 47 68 73 1 + 47 68 74 1 + 47 68 75 1 + 47 68 76 1 + 47 68 77 1 + 47 68 78 1 + 47 68 79 1 + 47 68 80 1 + 47 68 81 1 + 47 68 82 0.909115 + 47 68 83 0.133628 + 47 69 44 0.0302985 + 47 69 45 0.747928 + 47 69 46 1 + 47 69 47 1 + 47 69 48 1 + 47 69 49 1 + 47 69 50 1 + 47 69 51 1 + 47 69 52 1 + 47 69 53 1 + 47 69 54 1 + 47 69 55 1 + 47 69 56 1 + 47 69 57 1 + 47 69 58 1 + 47 69 59 1 + 47 69 60 1 + 47 69 61 1 + 47 69 62 1 + 47 69 63 1 + 47 69 64 1 + 47 69 65 1 + 47 69 66 1 + 47 69 67 1 + 47 69 68 1 + 47 69 69 1 + 47 69 70 1 + 47 69 71 1 + 47 69 72 1 + 47 69 73 1 + 47 69 74 1 + 47 69 75 1 + 47 69 76 1 + 47 69 77 1 + 47 69 78 1 + 47 69 79 1 + 47 69 80 1 + 47 69 81 1 + 47 69 82 0.747928 + 47 69 83 0.0302985 + 47 70 44 0.000148631 + 47 70 45 0.458559 + 47 70 46 0.997087 + 47 70 47 1 + 47 70 48 1 + 47 70 49 1 + 47 70 50 1 + 47 70 51 1 + 47 70 52 1 + 47 70 53 1 + 47 70 54 1 + 47 70 55 1 + 47 70 56 1 + 47 70 57 1 + 47 70 58 1 + 47 70 59 1 + 47 70 60 1 + 47 70 61 1 + 47 70 62 1 + 47 70 63 1 + 47 70 64 1 + 47 70 65 1 + 47 70 66 1 + 47 70 67 1 + 47 70 68 1 + 47 70 69 1 + 47 70 70 1 + 47 70 71 1 + 47 70 72 1 + 47 70 73 1 + 47 70 74 1 + 47 70 75 1 + 47 70 76 1 + 47 70 77 1 + 47 70 78 1 + 47 70 79 1 + 47 70 80 1 + 47 70 81 0.997087 + 47 70 82 0.458559 + 47 70 83 0.000148631 + 47 71 45 0.16137 + 47 71 46 0.910969 + 47 71 47 1 + 47 71 48 1 + 47 71 49 1 + 47 71 50 1 + 47 71 51 1 + 47 71 52 1 + 47 71 53 1 + 47 71 54 1 + 47 71 55 1 + 47 71 56 1 + 47 71 57 1 + 47 71 58 1 + 47 71 59 1 + 47 71 60 1 + 47 71 61 1 + 47 71 62 1 + 47 71 63 1 + 47 71 64 1 + 47 71 65 1 + 47 71 66 1 + 47 71 67 1 + 47 71 68 1 + 47 71 69 1 + 47 71 70 1 + 47 71 71 1 + 47 71 72 1 + 47 71 73 1 + 47 71 74 1 + 47 71 75 1 + 47 71 76 1 + 47 71 77 1 + 47 71 78 1 + 47 71 79 1 + 47 71 80 1 + 47 71 81 0.910969 + 47 71 82 0.16137 + 47 72 45 0.0128488 + 47 72 46 0.611412 + 47 72 47 0.99961 + 47 72 48 1 + 47 72 49 1 + 47 72 50 1 + 47 72 51 1 + 47 72 52 1 + 47 72 53 1 + 47 72 54 1 + 47 72 55 1 + 47 72 56 1 + 47 72 57 1 + 47 72 58 1 + 47 72 59 1 + 47 72 60 1 + 47 72 61 1 + 47 72 62 1 + 47 72 63 1 + 47 72 64 1 + 47 72 65 1 + 47 72 66 1 + 47 72 67 1 + 47 72 68 1 + 47 72 69 1 + 47 72 70 1 + 47 72 71 1 + 47 72 72 1 + 47 72 73 1 + 47 72 74 1 + 47 72 75 1 + 47 72 76 1 + 47 72 77 1 + 47 72 78 1 + 47 72 79 1 + 47 72 80 0.99961 + 47 72 81 0.611412 + 47 72 82 0.0128488 + 47 73 46 0.192797 + 47 73 47 0.912465 + 47 73 48 1 + 47 73 49 1 + 47 73 50 1 + 47 73 51 1 + 47 73 52 1 + 47 73 53 1 + 47 73 54 1 + 47 73 55 1 + 47 73 56 1 + 47 73 57 1 + 47 73 58 1 + 47 73 59 1 + 47 73 60 1 + 47 73 61 1 + 47 73 62 1 + 47 73 63 1 + 47 73 64 1 + 47 73 65 1 + 47 73 66 1 + 47 73 67 1 + 47 73 68 1 + 47 73 69 1 + 47 73 70 1 + 47 73 71 1 + 47 73 72 1 + 47 73 73 1 + 47 73 74 1 + 47 73 75 1 + 47 73 76 1 + 47 73 77 1 + 47 73 78 1 + 47 73 79 1 + 47 73 80 0.912465 + 47 73 81 0.192797 + 47 74 46 0.00833029 + 47 74 47 0.510119 + 47 74 48 0.991434 + 47 74 49 1 + 47 74 50 1 + 47 74 51 1 + 47 74 52 1 + 47 74 53 1 + 47 74 54 1 + 47 74 55 1 + 47 74 56 1 + 47 74 57 1 + 47 74 58 1 + 47 74 59 1 + 47 74 60 1 + 47 74 61 1 + 47 74 62 1 + 47 74 63 1 + 47 74 64 1 + 47 74 65 1 + 47 74 66 1 + 47 74 67 1 + 47 74 68 1 + 47 74 69 1 + 47 74 70 1 + 47 74 71 1 + 47 74 72 1 + 47 74 73 1 + 47 74 74 1 + 47 74 75 1 + 47 74 76 1 + 47 74 77 1 + 47 74 78 1 + 47 74 79 0.991434 + 47 74 80 0.510119 + 47 74 81 0.00833029 + 47 75 47 0.0791732 + 47 75 48 0.749996 + 47 75 49 0.999874 + 47 75 50 1 + 47 75 51 1 + 47 75 52 1 + 47 75 53 1 + 47 75 54 1 + 47 75 55 1 + 47 75 56 1 + 47 75 57 1 + 47 75 58 1 + 47 75 59 1 + 47 75 60 1 + 47 75 61 1 + 47 75 62 1 + 47 75 63 1 + 47 75 64 1 + 47 75 65 1 + 47 75 66 1 + 47 75 67 1 + 47 75 68 1 + 47 75 69 1 + 47 75 70 1 + 47 75 71 1 + 47 75 72 1 + 47 75 73 1 + 47 75 74 1 + 47 75 75 1 + 47 75 76 1 + 47 75 77 1 + 47 75 78 0.999874 + 47 75 79 0.749996 + 47 75 80 0.0791732 + 47 76 48 0.190365 + 47 76 49 0.860729 + 47 76 50 1 + 47 76 51 1 + 47 76 52 1 + 47 76 53 1 + 47 76 54 1 + 47 76 55 1 + 47 76 56 1 + 47 76 57 1 + 47 76 58 1 + 47 76 59 1 + 47 76 60 1 + 47 76 61 1 + 47 76 62 1 + 47 76 63 1 + 47 76 64 1 + 47 76 65 1 + 47 76 66 1 + 47 76 67 1 + 47 76 68 1 + 47 76 69 1 + 47 76 70 1 + 47 76 71 1 + 47 76 72 1 + 47 76 73 1 + 47 76 74 1 + 47 76 75 1 + 47 76 76 1 + 47 76 77 1 + 47 76 78 0.860729 + 47 76 79 0.190365 + 47 77 48 0.00101852 + 47 77 49 0.269165 + 47 77 50 0.88976 + 47 77 51 1 + 47 77 52 1 + 47 77 53 1 + 47 77 54 1 + 47 77 55 1 + 47 77 56 1 + 47 77 57 1 + 47 77 58 1 + 47 77 59 1 + 47 77 60 1 + 47 77 61 1 + 47 77 62 1 + 47 77 63 1 + 47 77 64 1 + 47 77 65 1 + 47 77 66 1 + 47 77 67 1 + 47 77 68 1 + 47 77 69 1 + 47 77 70 1 + 47 77 71 1 + 47 77 72 1 + 47 77 73 1 + 47 77 74 1 + 47 77 75 1 + 47 77 76 1 + 47 77 77 0.88976 + 47 77 78 0.269165 + 47 77 79 0.00101852 + 47 78 49 0.00261469 + 47 78 50 0.269165 + 47 78 51 0.860729 + 47 78 52 0.999874 + 47 78 53 1 + 47 78 54 1 + 47 78 55 1 + 47 78 56 1 + 47 78 57 1 + 47 78 58 1 + 47 78 59 1 + 47 78 60 1 + 47 78 61 1 + 47 78 62 1 + 47 78 63 1 + 47 78 64 1 + 47 78 65 1 + 47 78 66 1 + 47 78 67 1 + 47 78 68 1 + 47 78 69 1 + 47 78 70 1 + 47 78 71 1 + 47 78 72 1 + 47 78 73 1 + 47 78 74 1 + 47 78 75 0.999874 + 47 78 76 0.860729 + 47 78 77 0.269165 + 47 78 78 0.00261469 + 47 79 50 0.00101852 + 47 79 51 0.190365 + 47 79 52 0.749996 + 47 79 53 0.991434 + 47 79 54 1 + 47 79 55 1 + 47 79 56 1 + 47 79 57 1 + 47 79 58 1 + 47 79 59 1 + 47 79 60 1 + 47 79 61 1 + 47 79 62 1 + 47 79 63 1 + 47 79 64 1 + 47 79 65 1 + 47 79 66 1 + 47 79 67 1 + 47 79 68 1 + 47 79 69 1 + 47 79 70 1 + 47 79 71 1 + 47 79 72 1 + 47 79 73 1 + 47 79 74 0.991434 + 47 79 75 0.749996 + 47 79 76 0.190365 + 47 79 77 0.00101852 + 47 80 52 0.0791732 + 47 80 53 0.510119 + 47 80 54 0.912465 + 47 80 55 0.99961 + 47 80 56 1 + 47 80 57 1 + 47 80 58 1 + 47 80 59 1 + 47 80 60 1 + 47 80 61 1 + 47 80 62 1 + 47 80 63 1 + 47 80 64 1 + 47 80 65 1 + 47 80 66 1 + 47 80 67 1 + 47 80 68 1 + 47 80 69 1 + 47 80 70 1 + 47 80 71 1 + 47 80 72 0.99961 + 47 80 73 0.912465 + 47 80 74 0.510119 + 47 80 75 0.0791732 + 47 81 53 0.00833029 + 47 81 54 0.192797 + 47 81 55 0.611412 + 47 81 56 0.910969 + 47 81 57 0.997087 + 47 81 58 1 + 47 81 59 1 + 47 81 60 1 + 47 81 61 1 + 47 81 62 1 + 47 81 63 1 + 47 81 64 1 + 47 81 65 1 + 47 81 66 1 + 47 81 67 1 + 47 81 68 1 + 47 81 69 1 + 47 81 70 0.997087 + 47 81 71 0.910969 + 47 81 72 0.611412 + 47 81 73 0.192797 + 47 81 74 0.00833029 + 47 82 55 0.0128488 + 47 82 56 0.16137 + 47 82 57 0.458559 + 47 82 58 0.747928 + 47 82 59 0.909115 + 47 82 60 0.979426 + 47 82 61 0.9989 + 47 82 62 1 + 47 82 63 1 + 47 82 64 1 + 47 82 65 1 + 47 82 66 0.9989 + 47 82 67 0.979426 + 47 82 68 0.909115 + 47 82 69 0.747928 + 47 82 70 0.458559 + 47 82 71 0.16137 + 47 82 72 0.0128488 + 47 83 57 0.000148631 + 47 83 58 0.0302985 + 47 83 59 0.133628 + 47 83 60 0.27231 + 47 83 61 0.408101 + 47 83 62 0.509823 + 47 83 63 0.561032 + 47 83 64 0.561032 + 47 83 65 0.509823 + 47 83 66 0.408101 + 47 83 67 0.27231 + 47 83 68 0.133628 + 47 83 69 0.0302985 + 47 83 70 0.000148631 + 48 43 58 0.00207515 + 48 43 59 0.0441313 + 48 43 60 0.134257 + 48 43 61 0.234894 + 48 43 62 0.317411 + 48 43 63 0.363238 + 48 43 64 0.363238 + 48 43 65 0.317411 + 48 43 66 0.234894 + 48 43 67 0.134257 + 48 43 68 0.0441313 + 48 43 69 0.00207515 + 48 44 55 0.00138601 + 48 44 56 0.0811434 + 48 44 57 0.315874 + 48 44 58 0.610031 + 48 44 59 0.821374 + 48 44 60 0.93166 + 48 44 61 0.980027 + 48 44 62 0.996238 + 48 44 63 0.999595 + 48 44 64 0.999595 + 48 44 65 0.996238 + 48 44 66 0.980027 + 48 44 67 0.93166 + 48 44 68 0.821374 + 48 44 69 0.610031 + 48 44 70 0.315874 + 48 44 71 0.0811434 + 48 44 72 0.00138601 + 48 45 53 0.00195783 + 48 45 54 0.129721 + 48 45 55 0.51 + 48 45 56 0.856237 + 48 45 57 0.987756 + 48 45 58 1 + 48 45 59 1 + 48 45 60 1 + 48 45 61 1 + 48 45 62 1 + 48 45 63 1 + 48 45 64 1 + 48 45 65 1 + 48 45 66 1 + 48 45 67 1 + 48 45 68 1 + 48 45 69 1 + 48 45 70 0.987756 + 48 45 71 0.856237 + 48 45 72 0.51 + 48 45 73 0.129721 + 48 45 74 0.00195783 + 48 46 52 0.0602217 + 48 46 53 0.459326 + 48 46 54 0.887171 + 48 46 55 0.998538 + 48 46 56 1 + 48 46 57 1 + 48 46 58 1 + 48 46 59 1 + 48 46 60 1 + 48 46 61 1 + 48 46 62 1 + 48 46 63 1 + 48 46 64 1 + 48 46 65 1 + 48 46 66 1 + 48 46 67 1 + 48 46 68 1 + 48 46 69 1 + 48 46 70 1 + 48 46 71 1 + 48 46 72 0.998538 + 48 46 73 0.887171 + 48 46 74 0.459326 + 48 46 75 0.0602217 + 48 47 50 0.00101852 + 48 47 51 0.190365 + 48 47 52 0.749996 + 48 47 53 0.991434 + 48 47 54 1 + 48 47 55 1 + 48 47 56 1 + 48 47 57 1 + 48 47 58 1 + 48 47 59 1 + 48 47 60 1 + 48 47 61 1 + 48 47 62 1 + 48 47 63 1 + 48 47 64 1 + 48 47 65 1 + 48 47 66 1 + 48 47 67 1 + 48 47 68 1 + 48 47 69 1 + 48 47 70 1 + 48 47 71 1 + 48 47 72 1 + 48 47 73 1 + 48 47 74 0.991434 + 48 47 75 0.749996 + 48 47 76 0.190365 + 48 47 77 0.00101852 + 48 48 49 0.0053362 + 48 48 50 0.313512 + 48 48 51 0.889603 + 48 48 52 0.999998 + 48 48 53 1 + 48 48 54 1 + 48 48 55 1 + 48 48 56 1 + 48 48 57 1 + 48 48 58 1 + 48 48 59 1 + 48 48 60 1 + 48 48 61 1 + 48 48 62 1 + 48 48 63 1 + 48 48 64 1 + 48 48 65 1 + 48 48 66 1 + 48 48 67 1 + 48 48 68 1 + 48 48 69 1 + 48 48 70 1 + 48 48 71 1 + 48 48 72 1 + 48 48 73 1 + 48 48 74 1 + 48 48 75 0.999998 + 48 48 76 0.889603 + 48 48 77 0.313512 + 48 48 78 0.0053362 + 48 49 48 0.0053362 + 48 49 49 0.360555 + 48 49 50 0.934786 + 48 49 51 1 + 48 49 52 1 + 48 49 53 1 + 48 49 54 1 + 48 49 55 1 + 48 49 56 1 + 48 49 57 1 + 48 49 58 1 + 48 49 59 1 + 48 49 60 1 + 48 49 61 1 + 48 49 62 1 + 48 49 63 1 + 48 49 64 1 + 48 49 65 1 + 48 49 66 1 + 48 49 67 1 + 48 49 68 1 + 48 49 69 1 + 48 49 70 1 + 48 49 71 1 + 48 49 72 1 + 48 49 73 1 + 48 49 74 1 + 48 49 75 1 + 48 49 76 1 + 48 49 77 0.934786 + 48 49 78 0.360555 + 48 49 79 0.0053362 + 48 50 47 0.00101852 + 48 50 48 0.313512 + 48 50 49 0.934786 + 48 50 50 1 + 48 50 51 1 + 48 50 52 1 + 48 50 53 1 + 48 50 54 1 + 48 50 55 1 + 48 50 56 1 + 48 50 57 1 + 48 50 58 1 + 48 50 59 1 + 48 50 60 1 + 48 50 61 1 + 48 50 62 1 + 48 50 63 1 + 48 50 64 1 + 48 50 65 1 + 48 50 66 1 + 48 50 67 1 + 48 50 68 1 + 48 50 69 1 + 48 50 70 1 + 48 50 71 1 + 48 50 72 1 + 48 50 73 1 + 48 50 74 1 + 48 50 75 1 + 48 50 76 1 + 48 50 77 1 + 48 50 78 0.934786 + 48 50 79 0.313512 + 48 50 80 0.00101852 + 48 51 47 0.190365 + 48 51 48 0.889603 + 48 51 49 1 + 48 51 50 1 + 48 51 51 1 + 48 51 52 1 + 48 51 53 1 + 48 51 54 1 + 48 51 55 1 + 48 51 56 1 + 48 51 57 1 + 48 51 58 1 + 48 51 59 1 + 48 51 60 1 + 48 51 61 1 + 48 51 62 1 + 48 51 63 1 + 48 51 64 1 + 48 51 65 1 + 48 51 66 1 + 48 51 67 1 + 48 51 68 1 + 48 51 69 1 + 48 51 70 1 + 48 51 71 1 + 48 51 72 1 + 48 51 73 1 + 48 51 74 1 + 48 51 75 1 + 48 51 76 1 + 48 51 77 1 + 48 51 78 1 + 48 51 79 0.889603 + 48 51 80 0.190365 + 48 52 46 0.0602217 + 48 52 47 0.749996 + 48 52 48 0.999998 + 48 52 49 1 + 48 52 50 1 + 48 52 51 1 + 48 52 52 1 + 48 52 53 1 + 48 52 54 1 + 48 52 55 1 + 48 52 56 1 + 48 52 57 1 + 48 52 58 1 + 48 52 59 1 + 48 52 60 1 + 48 52 61 1 + 48 52 62 1 + 48 52 63 1 + 48 52 64 1 + 48 52 65 1 + 48 52 66 1 + 48 52 67 1 + 48 52 68 1 + 48 52 69 1 + 48 52 70 1 + 48 52 71 1 + 48 52 72 1 + 48 52 73 1 + 48 52 74 1 + 48 52 75 1 + 48 52 76 1 + 48 52 77 1 + 48 52 78 1 + 48 52 79 0.999998 + 48 52 80 0.749996 + 48 52 81 0.0602217 + 48 53 45 0.00195783 + 48 53 46 0.459326 + 48 53 47 0.991434 + 48 53 48 1 + 48 53 49 1 + 48 53 50 1 + 48 53 51 1 + 48 53 52 1 + 48 53 53 1 + 48 53 54 1 + 48 53 55 1 + 48 53 56 1 + 48 53 57 1 + 48 53 58 1 + 48 53 59 1 + 48 53 60 1 + 48 53 61 1 + 48 53 62 1 + 48 53 63 1 + 48 53 64 1 + 48 53 65 1 + 48 53 66 1 + 48 53 67 1 + 48 53 68 1 + 48 53 69 1 + 48 53 70 1 + 48 53 71 1 + 48 53 72 1 + 48 53 73 1 + 48 53 74 1 + 48 53 75 1 + 48 53 76 1 + 48 53 77 1 + 48 53 78 1 + 48 53 79 1 + 48 53 80 0.991434 + 48 53 81 0.459326 + 48 53 82 0.00195783 + 48 54 45 0.129721 + 48 54 46 0.887171 + 48 54 47 1 + 48 54 48 1 + 48 54 49 1 + 48 54 50 1 + 48 54 51 1 + 48 54 52 1 + 48 54 53 1 + 48 54 54 1 + 48 54 55 1 + 48 54 56 1 + 48 54 57 1 + 48 54 58 1 + 48 54 59 1 + 48 54 60 1 + 48 54 61 1 + 48 54 62 1 + 48 54 63 1 + 48 54 64 1 + 48 54 65 1 + 48 54 66 1 + 48 54 67 1 + 48 54 68 1 + 48 54 69 1 + 48 54 70 1 + 48 54 71 1 + 48 54 72 1 + 48 54 73 1 + 48 54 74 1 + 48 54 75 1 + 48 54 76 1 + 48 54 77 1 + 48 54 78 1 + 48 54 79 1 + 48 54 80 1 + 48 54 81 0.887171 + 48 54 82 0.129721 + 48 55 44 0.00138601 + 48 55 45 0.51 + 48 55 46 0.998538 + 48 55 47 1 + 48 55 48 1 + 48 55 49 1 + 48 55 50 1 + 48 55 51 1 + 48 55 52 1 + 48 55 53 1 + 48 55 54 1 + 48 55 55 1 + 48 55 56 1 + 48 55 57 1 + 48 55 58 1 + 48 55 59 1 + 48 55 60 1 + 48 55 61 1 + 48 55 62 1 + 48 55 63 1 + 48 55 64 1 + 48 55 65 1 + 48 55 66 1 + 48 55 67 1 + 48 55 68 1 + 48 55 69 1 + 48 55 70 1 + 48 55 71 1 + 48 55 72 1 + 48 55 73 1 + 48 55 74 1 + 48 55 75 1 + 48 55 76 1 + 48 55 77 1 + 48 55 78 1 + 48 55 79 1 + 48 55 80 1 + 48 55 81 0.998538 + 48 55 82 0.51 + 48 55 83 0.00138601 + 48 56 44 0.0811434 + 48 56 45 0.856237 + 48 56 46 1 + 48 56 47 1 + 48 56 48 1 + 48 56 49 1 + 48 56 50 1 + 48 56 51 1 + 48 56 52 1 + 48 56 53 1 + 48 56 54 1 + 48 56 55 1 + 48 56 56 1 + 48 56 57 1 + 48 56 58 1 + 48 56 59 1 + 48 56 60 1 + 48 56 61 1 + 48 56 62 1 + 48 56 63 1 + 48 56 64 1 + 48 56 65 1 + 48 56 66 1 + 48 56 67 1 + 48 56 68 1 + 48 56 69 1 + 48 56 70 1 + 48 56 71 1 + 48 56 72 1 + 48 56 73 1 + 48 56 74 1 + 48 56 75 1 + 48 56 76 1 + 48 56 77 1 + 48 56 78 1 + 48 56 79 1 + 48 56 80 1 + 48 56 81 1 + 48 56 82 0.856237 + 48 56 83 0.0811434 + 48 57 44 0.315874 + 48 57 45 0.987756 + 48 57 46 1 + 48 57 47 1 + 48 57 48 1 + 48 57 49 1 + 48 57 50 1 + 48 57 51 1 + 48 57 52 1 + 48 57 53 1 + 48 57 54 1 + 48 57 55 1 + 48 57 56 1 + 48 57 57 1 + 48 57 58 1 + 48 57 59 1 + 48 57 60 1 + 48 57 61 1 + 48 57 62 1 + 48 57 63 1 + 48 57 64 1 + 48 57 65 1 + 48 57 66 1 + 48 57 67 1 + 48 57 68 1 + 48 57 69 1 + 48 57 70 1 + 48 57 71 1 + 48 57 72 1 + 48 57 73 1 + 48 57 74 1 + 48 57 75 1 + 48 57 76 1 + 48 57 77 1 + 48 57 78 1 + 48 57 79 1 + 48 57 80 1 + 48 57 81 1 + 48 57 82 0.987756 + 48 57 83 0.315874 + 48 58 43 0.00207515 + 48 58 44 0.610031 + 48 58 45 1 + 48 58 46 1 + 48 58 47 1 + 48 58 48 1 + 48 58 49 1 + 48 58 50 1 + 48 58 51 1 + 48 58 52 1 + 48 58 53 1 + 48 58 54 1 + 48 58 55 1 + 48 58 56 1 + 48 58 57 1 + 48 58 58 1 + 48 58 59 1 + 48 58 60 1 + 48 58 61 1 + 48 58 62 1 + 48 58 63 1 + 48 58 64 1 + 48 58 65 1 + 48 58 66 1 + 48 58 67 1 + 48 58 68 1 + 48 58 69 1 + 48 58 70 1 + 48 58 71 1 + 48 58 72 1 + 48 58 73 1 + 48 58 74 1 + 48 58 75 1 + 48 58 76 1 + 48 58 77 1 + 48 58 78 1 + 48 58 79 1 + 48 58 80 1 + 48 58 81 1 + 48 58 82 1 + 48 58 83 0.610031 + 48 58 84 0.00207515 + 48 59 43 0.0441313 + 48 59 44 0.821374 + 48 59 45 1 + 48 59 46 1 + 48 59 47 1 + 48 59 48 1 + 48 59 49 1 + 48 59 50 1 + 48 59 51 1 + 48 59 52 1 + 48 59 53 1 + 48 59 54 1 + 48 59 55 1 + 48 59 56 1 + 48 59 57 1 + 48 59 58 1 + 48 59 59 1 + 48 59 60 1 + 48 59 61 1 + 48 59 62 1 + 48 59 63 1 + 48 59 64 1 + 48 59 65 1 + 48 59 66 1 + 48 59 67 1 + 48 59 68 1 + 48 59 69 1 + 48 59 70 1 + 48 59 71 1 + 48 59 72 1 + 48 59 73 1 + 48 59 74 1 + 48 59 75 1 + 48 59 76 1 + 48 59 77 1 + 48 59 78 1 + 48 59 79 1 + 48 59 80 1 + 48 59 81 1 + 48 59 82 1 + 48 59 83 0.821374 + 48 59 84 0.0441313 + 48 60 43 0.134257 + 48 60 44 0.93166 + 48 60 45 1 + 48 60 46 1 + 48 60 47 1 + 48 60 48 1 + 48 60 49 1 + 48 60 50 1 + 48 60 51 1 + 48 60 52 1 + 48 60 53 1 + 48 60 54 1 + 48 60 55 1 + 48 60 56 1 + 48 60 57 1 + 48 60 58 1 + 48 60 59 1 + 48 60 60 1 + 48 60 61 1 + 48 60 62 1 + 48 60 63 1 + 48 60 64 1 + 48 60 65 1 + 48 60 66 1 + 48 60 67 1 + 48 60 68 1 + 48 60 69 1 + 48 60 70 1 + 48 60 71 1 + 48 60 72 1 + 48 60 73 1 + 48 60 74 1 + 48 60 75 1 + 48 60 76 1 + 48 60 77 1 + 48 60 78 1 + 48 60 79 1 + 48 60 80 1 + 48 60 81 1 + 48 60 82 1 + 48 60 83 0.93166 + 48 60 84 0.134257 + 48 61 43 0.234894 + 48 61 44 0.980027 + 48 61 45 1 + 48 61 46 1 + 48 61 47 1 + 48 61 48 1 + 48 61 49 1 + 48 61 50 1 + 48 61 51 1 + 48 61 52 1 + 48 61 53 1 + 48 61 54 1 + 48 61 55 1 + 48 61 56 1 + 48 61 57 1 + 48 61 58 1 + 48 61 59 1 + 48 61 60 1 + 48 61 61 1 + 48 61 62 1 + 48 61 63 1 + 48 61 64 1 + 48 61 65 1 + 48 61 66 1 + 48 61 67 1 + 48 61 68 1 + 48 61 69 1 + 48 61 70 1 + 48 61 71 1 + 48 61 72 1 + 48 61 73 1 + 48 61 74 1 + 48 61 75 1 + 48 61 76 1 + 48 61 77 1 + 48 61 78 1 + 48 61 79 1 + 48 61 80 1 + 48 61 81 1 + 48 61 82 1 + 48 61 83 0.980027 + 48 61 84 0.234894 + 48 62 43 0.317411 + 48 62 44 0.996238 + 48 62 45 1 + 48 62 46 1 + 48 62 47 1 + 48 62 48 1 + 48 62 49 1 + 48 62 50 1 + 48 62 51 1 + 48 62 52 1 + 48 62 53 1 + 48 62 54 1 + 48 62 55 1 + 48 62 56 1 + 48 62 57 1 + 48 62 58 1 + 48 62 59 1 + 48 62 60 1 + 48 62 61 1 + 48 62 62 1 + 48 62 63 1 + 48 62 64 1 + 48 62 65 1 + 48 62 66 1 + 48 62 67 1 + 48 62 68 1 + 48 62 69 1 + 48 62 70 1 + 48 62 71 1 + 48 62 72 1 + 48 62 73 1 + 48 62 74 1 + 48 62 75 1 + 48 62 76 1 + 48 62 77 1 + 48 62 78 1 + 48 62 79 1 + 48 62 80 1 + 48 62 81 1 + 48 62 82 1 + 48 62 83 0.996238 + 48 62 84 0.317411 + 48 63 43 0.363238 + 48 63 44 0.999595 + 48 63 45 1 + 48 63 46 1 + 48 63 47 1 + 48 63 48 1 + 48 63 49 1 + 48 63 50 1 + 48 63 51 1 + 48 63 52 1 + 48 63 53 1 + 48 63 54 1 + 48 63 55 1 + 48 63 56 1 + 48 63 57 1 + 48 63 58 1 + 48 63 59 1 + 48 63 60 1 + 48 63 61 1 + 48 63 62 1 + 48 63 63 1 + 48 63 64 1 + 48 63 65 1 + 48 63 66 1 + 48 63 67 1 + 48 63 68 1 + 48 63 69 1 + 48 63 70 1 + 48 63 71 1 + 48 63 72 1 + 48 63 73 1 + 48 63 74 1 + 48 63 75 1 + 48 63 76 1 + 48 63 77 1 + 48 63 78 1 + 48 63 79 1 + 48 63 80 1 + 48 63 81 1 + 48 63 82 1 + 48 63 83 0.999595 + 48 63 84 0.363238 + 48 64 43 0.363238 + 48 64 44 0.999595 + 48 64 45 1 + 48 64 46 1 + 48 64 47 1 + 48 64 48 1 + 48 64 49 1 + 48 64 50 1 + 48 64 51 1 + 48 64 52 1 + 48 64 53 1 + 48 64 54 1 + 48 64 55 1 + 48 64 56 1 + 48 64 57 1 + 48 64 58 1 + 48 64 59 1 + 48 64 60 1 + 48 64 61 1 + 48 64 62 1 + 48 64 63 1 + 48 64 64 1 + 48 64 65 1 + 48 64 66 1 + 48 64 67 1 + 48 64 68 1 + 48 64 69 1 + 48 64 70 1 + 48 64 71 1 + 48 64 72 1 + 48 64 73 1 + 48 64 74 1 + 48 64 75 1 + 48 64 76 1 + 48 64 77 1 + 48 64 78 1 + 48 64 79 1 + 48 64 80 1 + 48 64 81 1 + 48 64 82 1 + 48 64 83 0.999595 + 48 64 84 0.363238 + 48 65 43 0.317411 + 48 65 44 0.996238 + 48 65 45 1 + 48 65 46 1 + 48 65 47 1 + 48 65 48 1 + 48 65 49 1 + 48 65 50 1 + 48 65 51 1 + 48 65 52 1 + 48 65 53 1 + 48 65 54 1 + 48 65 55 1 + 48 65 56 1 + 48 65 57 1 + 48 65 58 1 + 48 65 59 1 + 48 65 60 1 + 48 65 61 1 + 48 65 62 1 + 48 65 63 1 + 48 65 64 1 + 48 65 65 1 + 48 65 66 1 + 48 65 67 1 + 48 65 68 1 + 48 65 69 1 + 48 65 70 1 + 48 65 71 1 + 48 65 72 1 + 48 65 73 1 + 48 65 74 1 + 48 65 75 1 + 48 65 76 1 + 48 65 77 1 + 48 65 78 1 + 48 65 79 1 + 48 65 80 1 + 48 65 81 1 + 48 65 82 1 + 48 65 83 0.996238 + 48 65 84 0.317411 + 48 66 43 0.234894 + 48 66 44 0.980027 + 48 66 45 1 + 48 66 46 1 + 48 66 47 1 + 48 66 48 1 + 48 66 49 1 + 48 66 50 1 + 48 66 51 1 + 48 66 52 1 + 48 66 53 1 + 48 66 54 1 + 48 66 55 1 + 48 66 56 1 + 48 66 57 1 + 48 66 58 1 + 48 66 59 1 + 48 66 60 1 + 48 66 61 1 + 48 66 62 1 + 48 66 63 1 + 48 66 64 1 + 48 66 65 1 + 48 66 66 1 + 48 66 67 1 + 48 66 68 1 + 48 66 69 1 + 48 66 70 1 + 48 66 71 1 + 48 66 72 1 + 48 66 73 1 + 48 66 74 1 + 48 66 75 1 + 48 66 76 1 + 48 66 77 1 + 48 66 78 1 + 48 66 79 1 + 48 66 80 1 + 48 66 81 1 + 48 66 82 1 + 48 66 83 0.980027 + 48 66 84 0.234894 + 48 67 43 0.134257 + 48 67 44 0.93166 + 48 67 45 1 + 48 67 46 1 + 48 67 47 1 + 48 67 48 1 + 48 67 49 1 + 48 67 50 1 + 48 67 51 1 + 48 67 52 1 + 48 67 53 1 + 48 67 54 1 + 48 67 55 1 + 48 67 56 1 + 48 67 57 1 + 48 67 58 1 + 48 67 59 1 + 48 67 60 1 + 48 67 61 1 + 48 67 62 1 + 48 67 63 1 + 48 67 64 1 + 48 67 65 1 + 48 67 66 1 + 48 67 67 1 + 48 67 68 1 + 48 67 69 1 + 48 67 70 1 + 48 67 71 1 + 48 67 72 1 + 48 67 73 1 + 48 67 74 1 + 48 67 75 1 + 48 67 76 1 + 48 67 77 1 + 48 67 78 1 + 48 67 79 1 + 48 67 80 1 + 48 67 81 1 + 48 67 82 1 + 48 67 83 0.93166 + 48 67 84 0.134257 + 48 68 43 0.0441313 + 48 68 44 0.821374 + 48 68 45 1 + 48 68 46 1 + 48 68 47 1 + 48 68 48 1 + 48 68 49 1 + 48 68 50 1 + 48 68 51 1 + 48 68 52 1 + 48 68 53 1 + 48 68 54 1 + 48 68 55 1 + 48 68 56 1 + 48 68 57 1 + 48 68 58 1 + 48 68 59 1 + 48 68 60 1 + 48 68 61 1 + 48 68 62 1 + 48 68 63 1 + 48 68 64 1 + 48 68 65 1 + 48 68 66 1 + 48 68 67 1 + 48 68 68 1 + 48 68 69 1 + 48 68 70 1 + 48 68 71 1 + 48 68 72 1 + 48 68 73 1 + 48 68 74 1 + 48 68 75 1 + 48 68 76 1 + 48 68 77 1 + 48 68 78 1 + 48 68 79 1 + 48 68 80 1 + 48 68 81 1 + 48 68 82 1 + 48 68 83 0.821374 + 48 68 84 0.0441313 + 48 69 43 0.00207515 + 48 69 44 0.610031 + 48 69 45 1 + 48 69 46 1 + 48 69 47 1 + 48 69 48 1 + 48 69 49 1 + 48 69 50 1 + 48 69 51 1 + 48 69 52 1 + 48 69 53 1 + 48 69 54 1 + 48 69 55 1 + 48 69 56 1 + 48 69 57 1 + 48 69 58 1 + 48 69 59 1 + 48 69 60 1 + 48 69 61 1 + 48 69 62 1 + 48 69 63 1 + 48 69 64 1 + 48 69 65 1 + 48 69 66 1 + 48 69 67 1 + 48 69 68 1 + 48 69 69 1 + 48 69 70 1 + 48 69 71 1 + 48 69 72 1 + 48 69 73 1 + 48 69 74 1 + 48 69 75 1 + 48 69 76 1 + 48 69 77 1 + 48 69 78 1 + 48 69 79 1 + 48 69 80 1 + 48 69 81 1 + 48 69 82 1 + 48 69 83 0.610031 + 48 69 84 0.00207515 + 48 70 44 0.315874 + 48 70 45 0.987756 + 48 70 46 1 + 48 70 47 1 + 48 70 48 1 + 48 70 49 1 + 48 70 50 1 + 48 70 51 1 + 48 70 52 1 + 48 70 53 1 + 48 70 54 1 + 48 70 55 1 + 48 70 56 1 + 48 70 57 1 + 48 70 58 1 + 48 70 59 1 + 48 70 60 1 + 48 70 61 1 + 48 70 62 1 + 48 70 63 1 + 48 70 64 1 + 48 70 65 1 + 48 70 66 1 + 48 70 67 1 + 48 70 68 1 + 48 70 69 1 + 48 70 70 1 + 48 70 71 1 + 48 70 72 1 + 48 70 73 1 + 48 70 74 1 + 48 70 75 1 + 48 70 76 1 + 48 70 77 1 + 48 70 78 1 + 48 70 79 1 + 48 70 80 1 + 48 70 81 1 + 48 70 82 0.987756 + 48 70 83 0.315874 + 48 71 44 0.0811434 + 48 71 45 0.856237 + 48 71 46 1 + 48 71 47 1 + 48 71 48 1 + 48 71 49 1 + 48 71 50 1 + 48 71 51 1 + 48 71 52 1 + 48 71 53 1 + 48 71 54 1 + 48 71 55 1 + 48 71 56 1 + 48 71 57 1 + 48 71 58 1 + 48 71 59 1 + 48 71 60 1 + 48 71 61 1 + 48 71 62 1 + 48 71 63 1 + 48 71 64 1 + 48 71 65 1 + 48 71 66 1 + 48 71 67 1 + 48 71 68 1 + 48 71 69 1 + 48 71 70 1 + 48 71 71 1 + 48 71 72 1 + 48 71 73 1 + 48 71 74 1 + 48 71 75 1 + 48 71 76 1 + 48 71 77 1 + 48 71 78 1 + 48 71 79 1 + 48 71 80 1 + 48 71 81 1 + 48 71 82 0.856237 + 48 71 83 0.0811434 + 48 72 44 0.00138601 + 48 72 45 0.51 + 48 72 46 0.998538 + 48 72 47 1 + 48 72 48 1 + 48 72 49 1 + 48 72 50 1 + 48 72 51 1 + 48 72 52 1 + 48 72 53 1 + 48 72 54 1 + 48 72 55 1 + 48 72 56 1 + 48 72 57 1 + 48 72 58 1 + 48 72 59 1 + 48 72 60 1 + 48 72 61 1 + 48 72 62 1 + 48 72 63 1 + 48 72 64 1 + 48 72 65 1 + 48 72 66 1 + 48 72 67 1 + 48 72 68 1 + 48 72 69 1 + 48 72 70 1 + 48 72 71 1 + 48 72 72 1 + 48 72 73 1 + 48 72 74 1 + 48 72 75 1 + 48 72 76 1 + 48 72 77 1 + 48 72 78 1 + 48 72 79 1 + 48 72 80 1 + 48 72 81 0.998538 + 48 72 82 0.51 + 48 72 83 0.00138601 + 48 73 45 0.129721 + 48 73 46 0.887171 + 48 73 47 1 + 48 73 48 1 + 48 73 49 1 + 48 73 50 1 + 48 73 51 1 + 48 73 52 1 + 48 73 53 1 + 48 73 54 1 + 48 73 55 1 + 48 73 56 1 + 48 73 57 1 + 48 73 58 1 + 48 73 59 1 + 48 73 60 1 + 48 73 61 1 + 48 73 62 1 + 48 73 63 1 + 48 73 64 1 + 48 73 65 1 + 48 73 66 1 + 48 73 67 1 + 48 73 68 1 + 48 73 69 1 + 48 73 70 1 + 48 73 71 1 + 48 73 72 1 + 48 73 73 1 + 48 73 74 1 + 48 73 75 1 + 48 73 76 1 + 48 73 77 1 + 48 73 78 1 + 48 73 79 1 + 48 73 80 1 + 48 73 81 0.887171 + 48 73 82 0.129721 + 48 74 45 0.00195783 + 48 74 46 0.459326 + 48 74 47 0.991434 + 48 74 48 1 + 48 74 49 1 + 48 74 50 1 + 48 74 51 1 + 48 74 52 1 + 48 74 53 1 + 48 74 54 1 + 48 74 55 1 + 48 74 56 1 + 48 74 57 1 + 48 74 58 1 + 48 74 59 1 + 48 74 60 1 + 48 74 61 1 + 48 74 62 1 + 48 74 63 1 + 48 74 64 1 + 48 74 65 1 + 48 74 66 1 + 48 74 67 1 + 48 74 68 1 + 48 74 69 1 + 48 74 70 1 + 48 74 71 1 + 48 74 72 1 + 48 74 73 1 + 48 74 74 1 + 48 74 75 1 + 48 74 76 1 + 48 74 77 1 + 48 74 78 1 + 48 74 79 1 + 48 74 80 0.991434 + 48 74 81 0.459326 + 48 74 82 0.00195783 + 48 75 46 0.0602217 + 48 75 47 0.749996 + 48 75 48 0.999998 + 48 75 49 1 + 48 75 50 1 + 48 75 51 1 + 48 75 52 1 + 48 75 53 1 + 48 75 54 1 + 48 75 55 1 + 48 75 56 1 + 48 75 57 1 + 48 75 58 1 + 48 75 59 1 + 48 75 60 1 + 48 75 61 1 + 48 75 62 1 + 48 75 63 1 + 48 75 64 1 + 48 75 65 1 + 48 75 66 1 + 48 75 67 1 + 48 75 68 1 + 48 75 69 1 + 48 75 70 1 + 48 75 71 1 + 48 75 72 1 + 48 75 73 1 + 48 75 74 1 + 48 75 75 1 + 48 75 76 1 + 48 75 77 1 + 48 75 78 1 + 48 75 79 0.999998 + 48 75 80 0.749996 + 48 75 81 0.0602217 + 48 76 47 0.190365 + 48 76 48 0.889603 + 48 76 49 1 + 48 76 50 1 + 48 76 51 1 + 48 76 52 1 + 48 76 53 1 + 48 76 54 1 + 48 76 55 1 + 48 76 56 1 + 48 76 57 1 + 48 76 58 1 + 48 76 59 1 + 48 76 60 1 + 48 76 61 1 + 48 76 62 1 + 48 76 63 1 + 48 76 64 1 + 48 76 65 1 + 48 76 66 1 + 48 76 67 1 + 48 76 68 1 + 48 76 69 1 + 48 76 70 1 + 48 76 71 1 + 48 76 72 1 + 48 76 73 1 + 48 76 74 1 + 48 76 75 1 + 48 76 76 1 + 48 76 77 1 + 48 76 78 1 + 48 76 79 0.889603 + 48 76 80 0.190365 + 48 77 47 0.00101852 + 48 77 48 0.313512 + 48 77 49 0.934786 + 48 77 50 1 + 48 77 51 1 + 48 77 52 1 + 48 77 53 1 + 48 77 54 1 + 48 77 55 1 + 48 77 56 1 + 48 77 57 1 + 48 77 58 1 + 48 77 59 1 + 48 77 60 1 + 48 77 61 1 + 48 77 62 1 + 48 77 63 1 + 48 77 64 1 + 48 77 65 1 + 48 77 66 1 + 48 77 67 1 + 48 77 68 1 + 48 77 69 1 + 48 77 70 1 + 48 77 71 1 + 48 77 72 1 + 48 77 73 1 + 48 77 74 1 + 48 77 75 1 + 48 77 76 1 + 48 77 77 1 + 48 77 78 0.934786 + 48 77 79 0.313512 + 48 77 80 0.00101852 + 48 78 48 0.0053362 + 48 78 49 0.360555 + 48 78 50 0.934786 + 48 78 51 1 + 48 78 52 1 + 48 78 53 1 + 48 78 54 1 + 48 78 55 1 + 48 78 56 1 + 48 78 57 1 + 48 78 58 1 + 48 78 59 1 + 48 78 60 1 + 48 78 61 1 + 48 78 62 1 + 48 78 63 1 + 48 78 64 1 + 48 78 65 1 + 48 78 66 1 + 48 78 67 1 + 48 78 68 1 + 48 78 69 1 + 48 78 70 1 + 48 78 71 1 + 48 78 72 1 + 48 78 73 1 + 48 78 74 1 + 48 78 75 1 + 48 78 76 1 + 48 78 77 0.934786 + 48 78 78 0.360555 + 48 78 79 0.0053362 + 48 79 49 0.0053362 + 48 79 50 0.313512 + 48 79 51 0.889603 + 48 79 52 0.999998 + 48 79 53 1 + 48 79 54 1 + 48 79 55 1 + 48 79 56 1 + 48 79 57 1 + 48 79 58 1 + 48 79 59 1 + 48 79 60 1 + 48 79 61 1 + 48 79 62 1 + 48 79 63 1 + 48 79 64 1 + 48 79 65 1 + 48 79 66 1 + 48 79 67 1 + 48 79 68 1 + 48 79 69 1 + 48 79 70 1 + 48 79 71 1 + 48 79 72 1 + 48 79 73 1 + 48 79 74 1 + 48 79 75 0.999998 + 48 79 76 0.889603 + 48 79 77 0.313512 + 48 79 78 0.0053362 + 48 80 50 0.00101852 + 48 80 51 0.190365 + 48 80 52 0.749996 + 48 80 53 0.991434 + 48 80 54 1 + 48 80 55 1 + 48 80 56 1 + 48 80 57 1 + 48 80 58 1 + 48 80 59 1 + 48 80 60 1 + 48 80 61 1 + 48 80 62 1 + 48 80 63 1 + 48 80 64 1 + 48 80 65 1 + 48 80 66 1 + 48 80 67 1 + 48 80 68 1 + 48 80 69 1 + 48 80 70 1 + 48 80 71 1 + 48 80 72 1 + 48 80 73 1 + 48 80 74 0.991434 + 48 80 75 0.749996 + 48 80 76 0.190365 + 48 80 77 0.00101852 + 48 81 52 0.0602217 + 48 81 53 0.459326 + 48 81 54 0.887171 + 48 81 55 0.998538 + 48 81 56 1 + 48 81 57 1 + 48 81 58 1 + 48 81 59 1 + 48 81 60 1 + 48 81 61 1 + 48 81 62 1 + 48 81 63 1 + 48 81 64 1 + 48 81 65 1 + 48 81 66 1 + 48 81 67 1 + 48 81 68 1 + 48 81 69 1 + 48 81 70 1 + 48 81 71 1 + 48 81 72 0.998538 + 48 81 73 0.887171 + 48 81 74 0.459326 + 48 81 75 0.0602217 + 48 82 53 0.00195783 + 48 82 54 0.129721 + 48 82 55 0.51 + 48 82 56 0.856237 + 48 82 57 0.987756 + 48 82 58 1 + 48 82 59 1 + 48 82 60 1 + 48 82 61 1 + 48 82 62 1 + 48 82 63 1 + 48 82 64 1 + 48 82 65 1 + 48 82 66 1 + 48 82 67 1 + 48 82 68 1 + 48 82 69 1 + 48 82 70 0.987756 + 48 82 71 0.856237 + 48 82 72 0.51 + 48 82 73 0.129721 + 48 82 74 0.00195783 + 48 83 55 0.00138601 + 48 83 56 0.0811434 + 48 83 57 0.315874 + 48 83 58 0.610031 + 48 83 59 0.821374 + 48 83 60 0.93166 + 48 83 61 0.980027 + 48 83 62 0.996238 + 48 83 63 0.999595 + 48 83 64 0.999595 + 48 83 65 0.996238 + 48 83 66 0.980027 + 48 83 67 0.93166 + 48 83 68 0.821374 + 48 83 69 0.610031 + 48 83 70 0.315874 + 48 83 71 0.0811434 + 48 83 72 0.00138601 + 48 84 58 0.00207515 + 48 84 59 0.0441313 + 48 84 60 0.134257 + 48 84 61 0.234894 + 48 84 62 0.317411 + 48 84 63 0.363238 + 48 84 64 0.363238 + 48 84 65 0.317411 + 48 84 66 0.234894 + 48 84 67 0.134257 + 48 84 68 0.0441313 + 48 84 69 0.00207515 + 49 42 59 0.000228244 + 49 42 60 0.0170305 + 49 42 61 0.061458 + 49 42 62 0.10742 + 49 42 63 0.135234 + 49 42 64 0.135234 + 49 42 65 0.10742 + 49 42 66 0.061458 + 49 42 67 0.0170305 + 49 42 68 0.000228244 + 49 43 56 0.0114126 + 49 43 57 0.132621 + 49 43 58 0.364963 + 49 43 59 0.606763 + 49 43 60 0.783221 + 49 43 61 0.882567 + 49 43 62 0.931908 + 49 43 63 0.951583 + 49 43 64 0.951583 + 49 43 65 0.931908 + 49 43 66 0.882567 + 49 43 67 0.783221 + 49 43 68 0.606763 + 49 43 69 0.364963 + 49 43 70 0.132621 + 49 43 71 0.0114126 + 49 44 54 0.0436378 + 49 44 55 0.316818 + 49 44 56 0.702444 + 49 44 57 0.933296 + 49 44 58 0.99787 + 49 44 59 1 + 49 44 60 1 + 49 44 61 1 + 49 44 62 1 + 49 44 63 1 + 49 44 64 1 + 49 44 65 1 + 49 44 66 1 + 49 44 67 1 + 49 44 68 1 + 49 44 69 0.99787 + 49 44 70 0.933296 + 49 44 71 0.702444 + 49 44 72 0.316818 + 49 44 73 0.0436378 + 49 45 52 0.0216196 + 49 45 53 0.315112 + 49 45 54 0.78779 + 49 45 55 0.986811 + 49 45 56 1 + 49 45 57 1 + 49 45 58 1 + 49 45 59 1 + 49 45 60 1 + 49 45 61 1 + 49 45 62 1 + 49 45 63 1 + 49 45 64 1 + 49 45 65 1 + 49 45 66 1 + 49 45 67 1 + 49 45 68 1 + 49 45 69 1 + 49 45 70 1 + 49 45 71 1 + 49 45 72 0.986811 + 49 45 73 0.78779 + 49 45 74 0.315112 + 49 45 75 0.0216196 + 49 46 50 1.68961e-05 + 49 46 51 0.127131 + 49 46 52 0.659059 + 49 46 53 0.977331 + 49 46 54 1 + 49 46 55 1 + 49 46 56 1 + 49 46 57 1 + 49 46 58 1 + 49 46 59 1 + 49 46 60 1 + 49 46 61 1 + 49 46 62 1 + 49 46 63 1 + 49 46 64 1 + 49 46 65 1 + 49 46 66 1 + 49 46 67 1 + 49 46 68 1 + 49 46 69 1 + 49 46 70 1 + 49 46 71 1 + 49 46 72 1 + 49 46 73 1 + 49 46 74 0.977331 + 49 46 75 0.659059 + 49 46 76 0.127131 + 49 46 77 1.68961e-05 + 49 47 49 0.00261469 + 49 47 50 0.269165 + 49 47 51 0.860729 + 49 47 52 0.999874 + 49 47 53 1 + 49 47 54 1 + 49 47 55 1 + 49 47 56 1 + 49 47 57 1 + 49 47 58 1 + 49 47 59 1 + 49 47 60 1 + 49 47 61 1 + 49 47 62 1 + 49 47 63 1 + 49 47 64 1 + 49 47 65 1 + 49 47 66 1 + 49 47 67 1 + 49 47 68 1 + 49 47 69 1 + 49 47 70 1 + 49 47 71 1 + 49 47 72 1 + 49 47 73 1 + 49 47 74 1 + 49 47 75 0.999874 + 49 47 76 0.860729 + 49 47 77 0.269165 + 49 47 78 0.00261469 + 49 48 48 0.0053362 + 49 48 49 0.360555 + 49 48 50 0.934786 + 49 48 51 1 + 49 48 52 1 + 49 48 53 1 + 49 48 54 1 + 49 48 55 1 + 49 48 56 1 + 49 48 57 1 + 49 48 58 1 + 49 48 59 1 + 49 48 60 1 + 49 48 61 1 + 49 48 62 1 + 49 48 63 1 + 49 48 64 1 + 49 48 65 1 + 49 48 66 1 + 49 48 67 1 + 49 48 68 1 + 49 48 69 1 + 49 48 70 1 + 49 48 71 1 + 49 48 72 1 + 49 48 73 1 + 49 48 74 1 + 49 48 75 1 + 49 48 76 1 + 49 48 77 0.934786 + 49 48 78 0.360555 + 49 48 79 0.0053362 + 49 49 47 0.00261469 + 49 49 48 0.360555 + 49 49 49 0.95165 + 49 49 50 1 + 49 49 51 1 + 49 49 52 1 + 49 49 53 1 + 49 49 54 1 + 49 49 55 1 + 49 49 56 1 + 49 49 57 1 + 49 49 58 1 + 49 49 59 1 + 49 49 60 1 + 49 49 61 1 + 49 49 62 1 + 49 49 63 1 + 49 49 64 1 + 49 49 65 1 + 49 49 66 1 + 49 49 67 1 + 49 49 68 1 + 49 49 69 1 + 49 49 70 1 + 49 49 71 1 + 49 49 72 1 + 49 49 73 1 + 49 49 74 1 + 49 49 75 1 + 49 49 76 1 + 49 49 77 1 + 49 49 78 0.95165 + 49 49 79 0.360555 + 49 49 80 0.00261469 + 49 50 46 1.68961e-05 + 49 50 47 0.269165 + 49 50 48 0.934786 + 49 50 49 1 + 49 50 50 1 + 49 50 51 1 + 49 50 52 1 + 49 50 53 1 + 49 50 54 1 + 49 50 55 1 + 49 50 56 1 + 49 50 57 1 + 49 50 58 1 + 49 50 59 1 + 49 50 60 1 + 49 50 61 1 + 49 50 62 1 + 49 50 63 1 + 49 50 64 1 + 49 50 65 1 + 49 50 66 1 + 49 50 67 1 + 49 50 68 1 + 49 50 69 1 + 49 50 70 1 + 49 50 71 1 + 49 50 72 1 + 49 50 73 1 + 49 50 74 1 + 49 50 75 1 + 49 50 76 1 + 49 50 77 1 + 49 50 78 1 + 49 50 79 0.934786 + 49 50 80 0.269165 + 49 50 81 1.68961e-05 + 49 51 46 0.127131 + 49 51 47 0.860729 + 49 51 48 1 + 49 51 49 1 + 49 51 50 1 + 49 51 51 1 + 49 51 52 1 + 49 51 53 1 + 49 51 54 1 + 49 51 55 1 + 49 51 56 1 + 49 51 57 1 + 49 51 58 1 + 49 51 59 1 + 49 51 60 1 + 49 51 61 1 + 49 51 62 1 + 49 51 63 1 + 49 51 64 1 + 49 51 65 1 + 49 51 66 1 + 49 51 67 1 + 49 51 68 1 + 49 51 69 1 + 49 51 70 1 + 49 51 71 1 + 49 51 72 1 + 49 51 73 1 + 49 51 74 1 + 49 51 75 1 + 49 51 76 1 + 49 51 77 1 + 49 51 78 1 + 49 51 79 1 + 49 51 80 0.860729 + 49 51 81 0.127131 + 49 52 45 0.0216196 + 49 52 46 0.659059 + 49 52 47 0.999874 + 49 52 48 1 + 49 52 49 1 + 49 52 50 1 + 49 52 51 1 + 49 52 52 1 + 49 52 53 1 + 49 52 54 1 + 49 52 55 1 + 49 52 56 1 + 49 52 57 1 + 49 52 58 1 + 49 52 59 1 + 49 52 60 1 + 49 52 61 1 + 49 52 62 1 + 49 52 63 1 + 49 52 64 1 + 49 52 65 1 + 49 52 66 1 + 49 52 67 1 + 49 52 68 1 + 49 52 69 1 + 49 52 70 1 + 49 52 71 1 + 49 52 72 1 + 49 52 73 1 + 49 52 74 1 + 49 52 75 1 + 49 52 76 1 + 49 52 77 1 + 49 52 78 1 + 49 52 79 1 + 49 52 80 0.999874 + 49 52 81 0.659059 + 49 52 82 0.0216196 + 49 53 45 0.315112 + 49 53 46 0.977331 + 49 53 47 1 + 49 53 48 1 + 49 53 49 1 + 49 53 50 1 + 49 53 51 1 + 49 53 52 1 + 49 53 53 1 + 49 53 54 1 + 49 53 55 1 + 49 53 56 1 + 49 53 57 1 + 49 53 58 1 + 49 53 59 1 + 49 53 60 1 + 49 53 61 1 + 49 53 62 1 + 49 53 63 1 + 49 53 64 1 + 49 53 65 1 + 49 53 66 1 + 49 53 67 1 + 49 53 68 1 + 49 53 69 1 + 49 53 70 1 + 49 53 71 1 + 49 53 72 1 + 49 53 73 1 + 49 53 74 1 + 49 53 75 1 + 49 53 76 1 + 49 53 77 1 + 49 53 78 1 + 49 53 79 1 + 49 53 80 1 + 49 53 81 0.977331 + 49 53 82 0.315112 + 49 54 44 0.0436378 + 49 54 45 0.78779 + 49 54 46 1 + 49 54 47 1 + 49 54 48 1 + 49 54 49 1 + 49 54 50 1 + 49 54 51 1 + 49 54 52 1 + 49 54 53 1 + 49 54 54 1 + 49 54 55 1 + 49 54 56 1 + 49 54 57 1 + 49 54 58 1 + 49 54 59 1 + 49 54 60 1 + 49 54 61 1 + 49 54 62 1 + 49 54 63 1 + 49 54 64 1 + 49 54 65 1 + 49 54 66 1 + 49 54 67 1 + 49 54 68 1 + 49 54 69 1 + 49 54 70 1 + 49 54 71 1 + 49 54 72 1 + 49 54 73 1 + 49 54 74 1 + 49 54 75 1 + 49 54 76 1 + 49 54 77 1 + 49 54 78 1 + 49 54 79 1 + 49 54 80 1 + 49 54 81 1 + 49 54 82 0.78779 + 49 54 83 0.0436378 + 49 55 44 0.316818 + 49 55 45 0.986811 + 49 55 46 1 + 49 55 47 1 + 49 55 48 1 + 49 55 49 1 + 49 55 50 1 + 49 55 51 1 + 49 55 52 1 + 49 55 53 1 + 49 55 54 1 + 49 55 55 1 + 49 55 56 1 + 49 55 57 1 + 49 55 58 1 + 49 55 59 1 + 49 55 60 1 + 49 55 61 1 + 49 55 62 1 + 49 55 63 1 + 49 55 64 1 + 49 55 65 1 + 49 55 66 1 + 49 55 67 1 + 49 55 68 1 + 49 55 69 1 + 49 55 70 1 + 49 55 71 1 + 49 55 72 1 + 49 55 73 1 + 49 55 74 1 + 49 55 75 1 + 49 55 76 1 + 49 55 77 1 + 49 55 78 1 + 49 55 79 1 + 49 55 80 1 + 49 55 81 1 + 49 55 82 0.986811 + 49 55 83 0.316818 + 49 56 43 0.0114126 + 49 56 44 0.702444 + 49 56 45 1 + 49 56 46 1 + 49 56 47 1 + 49 56 48 1 + 49 56 49 1 + 49 56 50 1 + 49 56 51 1 + 49 56 52 1 + 49 56 53 1 + 49 56 54 1 + 49 56 55 1 + 49 56 56 1 + 49 56 57 1 + 49 56 58 1 + 49 56 59 1 + 49 56 60 1 + 49 56 61 1 + 49 56 62 1 + 49 56 63 1 + 49 56 64 1 + 49 56 65 1 + 49 56 66 1 + 49 56 67 1 + 49 56 68 1 + 49 56 69 1 + 49 56 70 1 + 49 56 71 1 + 49 56 72 1 + 49 56 73 1 + 49 56 74 1 + 49 56 75 1 + 49 56 76 1 + 49 56 77 1 + 49 56 78 1 + 49 56 79 1 + 49 56 80 1 + 49 56 81 1 + 49 56 82 1 + 49 56 83 0.702444 + 49 56 84 0.0114126 + 49 57 43 0.132621 + 49 57 44 0.933296 + 49 57 45 1 + 49 57 46 1 + 49 57 47 1 + 49 57 48 1 + 49 57 49 1 + 49 57 50 1 + 49 57 51 1 + 49 57 52 1 + 49 57 53 1 + 49 57 54 1 + 49 57 55 1 + 49 57 56 1 + 49 57 57 1 + 49 57 58 1 + 49 57 59 1 + 49 57 60 1 + 49 57 61 1 + 49 57 62 1 + 49 57 63 1 + 49 57 64 1 + 49 57 65 1 + 49 57 66 1 + 49 57 67 1 + 49 57 68 1 + 49 57 69 1 + 49 57 70 1 + 49 57 71 1 + 49 57 72 1 + 49 57 73 1 + 49 57 74 1 + 49 57 75 1 + 49 57 76 1 + 49 57 77 1 + 49 57 78 1 + 49 57 79 1 + 49 57 80 1 + 49 57 81 1 + 49 57 82 1 + 49 57 83 0.933296 + 49 57 84 0.132621 + 49 58 43 0.364963 + 49 58 44 0.99787 + 49 58 45 1 + 49 58 46 1 + 49 58 47 1 + 49 58 48 1 + 49 58 49 1 + 49 58 50 1 + 49 58 51 1 + 49 58 52 1 + 49 58 53 1 + 49 58 54 1 + 49 58 55 1 + 49 58 56 1 + 49 58 57 1 + 49 58 58 1 + 49 58 59 1 + 49 58 60 1 + 49 58 61 1 + 49 58 62 1 + 49 58 63 1 + 49 58 64 1 + 49 58 65 1 + 49 58 66 1 + 49 58 67 1 + 49 58 68 1 + 49 58 69 1 + 49 58 70 1 + 49 58 71 1 + 49 58 72 1 + 49 58 73 1 + 49 58 74 1 + 49 58 75 1 + 49 58 76 1 + 49 58 77 1 + 49 58 78 1 + 49 58 79 1 + 49 58 80 1 + 49 58 81 1 + 49 58 82 1 + 49 58 83 0.99787 + 49 58 84 0.364963 + 49 59 42 0.000228244 + 49 59 43 0.606763 + 49 59 44 1 + 49 59 45 1 + 49 59 46 1 + 49 59 47 1 + 49 59 48 1 + 49 59 49 1 + 49 59 50 1 + 49 59 51 1 + 49 59 52 1 + 49 59 53 1 + 49 59 54 1 + 49 59 55 1 + 49 59 56 1 + 49 59 57 1 + 49 59 58 1 + 49 59 59 1 + 49 59 60 1 + 49 59 61 1 + 49 59 62 1 + 49 59 63 1 + 49 59 64 1 + 49 59 65 1 + 49 59 66 1 + 49 59 67 1 + 49 59 68 1 + 49 59 69 1 + 49 59 70 1 + 49 59 71 1 + 49 59 72 1 + 49 59 73 1 + 49 59 74 1 + 49 59 75 1 + 49 59 76 1 + 49 59 77 1 + 49 59 78 1 + 49 59 79 1 + 49 59 80 1 + 49 59 81 1 + 49 59 82 1 + 49 59 83 1 + 49 59 84 0.606763 + 49 59 85 0.000228244 + 49 60 42 0.0170305 + 49 60 43 0.783221 + 49 60 44 1 + 49 60 45 1 + 49 60 46 1 + 49 60 47 1 + 49 60 48 1 + 49 60 49 1 + 49 60 50 1 + 49 60 51 1 + 49 60 52 1 + 49 60 53 1 + 49 60 54 1 + 49 60 55 1 + 49 60 56 1 + 49 60 57 1 + 49 60 58 1 + 49 60 59 1 + 49 60 60 1 + 49 60 61 1 + 49 60 62 1 + 49 60 63 1 + 49 60 64 1 + 49 60 65 1 + 49 60 66 1 + 49 60 67 1 + 49 60 68 1 + 49 60 69 1 + 49 60 70 1 + 49 60 71 1 + 49 60 72 1 + 49 60 73 1 + 49 60 74 1 + 49 60 75 1 + 49 60 76 1 + 49 60 77 1 + 49 60 78 1 + 49 60 79 1 + 49 60 80 1 + 49 60 81 1 + 49 60 82 1 + 49 60 83 1 + 49 60 84 0.783221 + 49 60 85 0.0170305 + 49 61 42 0.061458 + 49 61 43 0.882567 + 49 61 44 1 + 49 61 45 1 + 49 61 46 1 + 49 61 47 1 + 49 61 48 1 + 49 61 49 1 + 49 61 50 1 + 49 61 51 1 + 49 61 52 1 + 49 61 53 1 + 49 61 54 1 + 49 61 55 1 + 49 61 56 1 + 49 61 57 1 + 49 61 58 1 + 49 61 59 1 + 49 61 60 1 + 49 61 61 1 + 49 61 62 1 + 49 61 63 1 + 49 61 64 1 + 49 61 65 1 + 49 61 66 1 + 49 61 67 1 + 49 61 68 1 + 49 61 69 1 + 49 61 70 1 + 49 61 71 1 + 49 61 72 1 + 49 61 73 1 + 49 61 74 1 + 49 61 75 1 + 49 61 76 1 + 49 61 77 1 + 49 61 78 1 + 49 61 79 1 + 49 61 80 1 + 49 61 81 1 + 49 61 82 1 + 49 61 83 1 + 49 61 84 0.882567 + 49 61 85 0.061458 + 49 62 42 0.10742 + 49 62 43 0.931908 + 49 62 44 1 + 49 62 45 1 + 49 62 46 1 + 49 62 47 1 + 49 62 48 1 + 49 62 49 1 + 49 62 50 1 + 49 62 51 1 + 49 62 52 1 + 49 62 53 1 + 49 62 54 1 + 49 62 55 1 + 49 62 56 1 + 49 62 57 1 + 49 62 58 1 + 49 62 59 1 + 49 62 60 1 + 49 62 61 1 + 49 62 62 1 + 49 62 63 1 + 49 62 64 1 + 49 62 65 1 + 49 62 66 1 + 49 62 67 1 + 49 62 68 1 + 49 62 69 1 + 49 62 70 1 + 49 62 71 1 + 49 62 72 1 + 49 62 73 1 + 49 62 74 1 + 49 62 75 1 + 49 62 76 1 + 49 62 77 1 + 49 62 78 1 + 49 62 79 1 + 49 62 80 1 + 49 62 81 1 + 49 62 82 1 + 49 62 83 1 + 49 62 84 0.931908 + 49 62 85 0.10742 + 49 63 42 0.135234 + 49 63 43 0.951583 + 49 63 44 1 + 49 63 45 1 + 49 63 46 1 + 49 63 47 1 + 49 63 48 1 + 49 63 49 1 + 49 63 50 1 + 49 63 51 1 + 49 63 52 1 + 49 63 53 1 + 49 63 54 1 + 49 63 55 1 + 49 63 56 1 + 49 63 57 1 + 49 63 58 1 + 49 63 59 1 + 49 63 60 1 + 49 63 61 1 + 49 63 62 1 + 49 63 63 1 + 49 63 64 1 + 49 63 65 1 + 49 63 66 1 + 49 63 67 1 + 49 63 68 1 + 49 63 69 1 + 49 63 70 1 + 49 63 71 1 + 49 63 72 1 + 49 63 73 1 + 49 63 74 1 + 49 63 75 1 + 49 63 76 1 + 49 63 77 1 + 49 63 78 1 + 49 63 79 1 + 49 63 80 1 + 49 63 81 1 + 49 63 82 1 + 49 63 83 1 + 49 63 84 0.951583 + 49 63 85 0.135234 + 49 64 42 0.135234 + 49 64 43 0.951583 + 49 64 44 1 + 49 64 45 1 + 49 64 46 1 + 49 64 47 1 + 49 64 48 1 + 49 64 49 1 + 49 64 50 1 + 49 64 51 1 + 49 64 52 1 + 49 64 53 1 + 49 64 54 1 + 49 64 55 1 + 49 64 56 1 + 49 64 57 1 + 49 64 58 1 + 49 64 59 1 + 49 64 60 1 + 49 64 61 1 + 49 64 62 1 + 49 64 63 1 + 49 64 64 1 + 49 64 65 1 + 49 64 66 1 + 49 64 67 1 + 49 64 68 1 + 49 64 69 1 + 49 64 70 1 + 49 64 71 1 + 49 64 72 1 + 49 64 73 1 + 49 64 74 1 + 49 64 75 1 + 49 64 76 1 + 49 64 77 1 + 49 64 78 1 + 49 64 79 1 + 49 64 80 1 + 49 64 81 1 + 49 64 82 1 + 49 64 83 1 + 49 64 84 0.951583 + 49 64 85 0.135234 + 49 65 42 0.10742 + 49 65 43 0.931908 + 49 65 44 1 + 49 65 45 1 + 49 65 46 1 + 49 65 47 1 + 49 65 48 1 + 49 65 49 1 + 49 65 50 1 + 49 65 51 1 + 49 65 52 1 + 49 65 53 1 + 49 65 54 1 + 49 65 55 1 + 49 65 56 1 + 49 65 57 1 + 49 65 58 1 + 49 65 59 1 + 49 65 60 1 + 49 65 61 1 + 49 65 62 1 + 49 65 63 1 + 49 65 64 1 + 49 65 65 1 + 49 65 66 1 + 49 65 67 1 + 49 65 68 1 + 49 65 69 1 + 49 65 70 1 + 49 65 71 1 + 49 65 72 1 + 49 65 73 1 + 49 65 74 1 + 49 65 75 1 + 49 65 76 1 + 49 65 77 1 + 49 65 78 1 + 49 65 79 1 + 49 65 80 1 + 49 65 81 1 + 49 65 82 1 + 49 65 83 1 + 49 65 84 0.931908 + 49 65 85 0.10742 + 49 66 42 0.061458 + 49 66 43 0.882567 + 49 66 44 1 + 49 66 45 1 + 49 66 46 1 + 49 66 47 1 + 49 66 48 1 + 49 66 49 1 + 49 66 50 1 + 49 66 51 1 + 49 66 52 1 + 49 66 53 1 + 49 66 54 1 + 49 66 55 1 + 49 66 56 1 + 49 66 57 1 + 49 66 58 1 + 49 66 59 1 + 49 66 60 1 + 49 66 61 1 + 49 66 62 1 + 49 66 63 1 + 49 66 64 1 + 49 66 65 1 + 49 66 66 1 + 49 66 67 1 + 49 66 68 1 + 49 66 69 1 + 49 66 70 1 + 49 66 71 1 + 49 66 72 1 + 49 66 73 1 + 49 66 74 1 + 49 66 75 1 + 49 66 76 1 + 49 66 77 1 + 49 66 78 1 + 49 66 79 1 + 49 66 80 1 + 49 66 81 1 + 49 66 82 1 + 49 66 83 1 + 49 66 84 0.882567 + 49 66 85 0.061458 + 49 67 42 0.0170305 + 49 67 43 0.783221 + 49 67 44 1 + 49 67 45 1 + 49 67 46 1 + 49 67 47 1 + 49 67 48 1 + 49 67 49 1 + 49 67 50 1 + 49 67 51 1 + 49 67 52 1 + 49 67 53 1 + 49 67 54 1 + 49 67 55 1 + 49 67 56 1 + 49 67 57 1 + 49 67 58 1 + 49 67 59 1 + 49 67 60 1 + 49 67 61 1 + 49 67 62 1 + 49 67 63 1 + 49 67 64 1 + 49 67 65 1 + 49 67 66 1 + 49 67 67 1 + 49 67 68 1 + 49 67 69 1 + 49 67 70 1 + 49 67 71 1 + 49 67 72 1 + 49 67 73 1 + 49 67 74 1 + 49 67 75 1 + 49 67 76 1 + 49 67 77 1 + 49 67 78 1 + 49 67 79 1 + 49 67 80 1 + 49 67 81 1 + 49 67 82 1 + 49 67 83 1 + 49 67 84 0.783221 + 49 67 85 0.0170305 + 49 68 42 0.000228244 + 49 68 43 0.606763 + 49 68 44 1 + 49 68 45 1 + 49 68 46 1 + 49 68 47 1 + 49 68 48 1 + 49 68 49 1 + 49 68 50 1 + 49 68 51 1 + 49 68 52 1 + 49 68 53 1 + 49 68 54 1 + 49 68 55 1 + 49 68 56 1 + 49 68 57 1 + 49 68 58 1 + 49 68 59 1 + 49 68 60 1 + 49 68 61 1 + 49 68 62 1 + 49 68 63 1 + 49 68 64 1 + 49 68 65 1 + 49 68 66 1 + 49 68 67 1 + 49 68 68 1 + 49 68 69 1 + 49 68 70 1 + 49 68 71 1 + 49 68 72 1 + 49 68 73 1 + 49 68 74 1 + 49 68 75 1 + 49 68 76 1 + 49 68 77 1 + 49 68 78 1 + 49 68 79 1 + 49 68 80 1 + 49 68 81 1 + 49 68 82 1 + 49 68 83 1 + 49 68 84 0.606763 + 49 68 85 0.000228244 + 49 69 43 0.364963 + 49 69 44 0.99787 + 49 69 45 1 + 49 69 46 1 + 49 69 47 1 + 49 69 48 1 + 49 69 49 1 + 49 69 50 1 + 49 69 51 1 + 49 69 52 1 + 49 69 53 1 + 49 69 54 1 + 49 69 55 1 + 49 69 56 1 + 49 69 57 1 + 49 69 58 1 + 49 69 59 1 + 49 69 60 1 + 49 69 61 1 + 49 69 62 1 + 49 69 63 1 + 49 69 64 1 + 49 69 65 1 + 49 69 66 1 + 49 69 67 1 + 49 69 68 1 + 49 69 69 1 + 49 69 70 1 + 49 69 71 1 + 49 69 72 1 + 49 69 73 1 + 49 69 74 1 + 49 69 75 1 + 49 69 76 1 + 49 69 77 1 + 49 69 78 1 + 49 69 79 1 + 49 69 80 1 + 49 69 81 1 + 49 69 82 1 + 49 69 83 0.99787 + 49 69 84 0.364963 + 49 70 43 0.132621 + 49 70 44 0.933296 + 49 70 45 1 + 49 70 46 1 + 49 70 47 1 + 49 70 48 1 + 49 70 49 1 + 49 70 50 1 + 49 70 51 1 + 49 70 52 1 + 49 70 53 1 + 49 70 54 1 + 49 70 55 1 + 49 70 56 1 + 49 70 57 1 + 49 70 58 1 + 49 70 59 1 + 49 70 60 1 + 49 70 61 1 + 49 70 62 1 + 49 70 63 1 + 49 70 64 1 + 49 70 65 1 + 49 70 66 1 + 49 70 67 1 + 49 70 68 1 + 49 70 69 1 + 49 70 70 1 + 49 70 71 1 + 49 70 72 1 + 49 70 73 1 + 49 70 74 1 + 49 70 75 1 + 49 70 76 1 + 49 70 77 1 + 49 70 78 1 + 49 70 79 1 + 49 70 80 1 + 49 70 81 1 + 49 70 82 1 + 49 70 83 0.933296 + 49 70 84 0.132621 + 49 71 43 0.0114126 + 49 71 44 0.702444 + 49 71 45 1 + 49 71 46 1 + 49 71 47 1 + 49 71 48 1 + 49 71 49 1 + 49 71 50 1 + 49 71 51 1 + 49 71 52 1 + 49 71 53 1 + 49 71 54 1 + 49 71 55 1 + 49 71 56 1 + 49 71 57 1 + 49 71 58 1 + 49 71 59 1 + 49 71 60 1 + 49 71 61 1 + 49 71 62 1 + 49 71 63 1 + 49 71 64 1 + 49 71 65 1 + 49 71 66 1 + 49 71 67 1 + 49 71 68 1 + 49 71 69 1 + 49 71 70 1 + 49 71 71 1 + 49 71 72 1 + 49 71 73 1 + 49 71 74 1 + 49 71 75 1 + 49 71 76 1 + 49 71 77 1 + 49 71 78 1 + 49 71 79 1 + 49 71 80 1 + 49 71 81 1 + 49 71 82 1 + 49 71 83 0.702444 + 49 71 84 0.0114126 + 49 72 44 0.316818 + 49 72 45 0.986811 + 49 72 46 1 + 49 72 47 1 + 49 72 48 1 + 49 72 49 1 + 49 72 50 1 + 49 72 51 1 + 49 72 52 1 + 49 72 53 1 + 49 72 54 1 + 49 72 55 1 + 49 72 56 1 + 49 72 57 1 + 49 72 58 1 + 49 72 59 1 + 49 72 60 1 + 49 72 61 1 + 49 72 62 1 + 49 72 63 1 + 49 72 64 1 + 49 72 65 1 + 49 72 66 1 + 49 72 67 1 + 49 72 68 1 + 49 72 69 1 + 49 72 70 1 + 49 72 71 1 + 49 72 72 1 + 49 72 73 1 + 49 72 74 1 + 49 72 75 1 + 49 72 76 1 + 49 72 77 1 + 49 72 78 1 + 49 72 79 1 + 49 72 80 1 + 49 72 81 1 + 49 72 82 0.986811 + 49 72 83 0.316818 + 49 73 44 0.0436378 + 49 73 45 0.78779 + 49 73 46 1 + 49 73 47 1 + 49 73 48 1 + 49 73 49 1 + 49 73 50 1 + 49 73 51 1 + 49 73 52 1 + 49 73 53 1 + 49 73 54 1 + 49 73 55 1 + 49 73 56 1 + 49 73 57 1 + 49 73 58 1 + 49 73 59 1 + 49 73 60 1 + 49 73 61 1 + 49 73 62 1 + 49 73 63 1 + 49 73 64 1 + 49 73 65 1 + 49 73 66 1 + 49 73 67 1 + 49 73 68 1 + 49 73 69 1 + 49 73 70 1 + 49 73 71 1 + 49 73 72 1 + 49 73 73 1 + 49 73 74 1 + 49 73 75 1 + 49 73 76 1 + 49 73 77 1 + 49 73 78 1 + 49 73 79 1 + 49 73 80 1 + 49 73 81 1 + 49 73 82 0.78779 + 49 73 83 0.0436378 + 49 74 45 0.315112 + 49 74 46 0.977331 + 49 74 47 1 + 49 74 48 1 + 49 74 49 1 + 49 74 50 1 + 49 74 51 1 + 49 74 52 1 + 49 74 53 1 + 49 74 54 1 + 49 74 55 1 + 49 74 56 1 + 49 74 57 1 + 49 74 58 1 + 49 74 59 1 + 49 74 60 1 + 49 74 61 1 + 49 74 62 1 + 49 74 63 1 + 49 74 64 1 + 49 74 65 1 + 49 74 66 1 + 49 74 67 1 + 49 74 68 1 + 49 74 69 1 + 49 74 70 1 + 49 74 71 1 + 49 74 72 1 + 49 74 73 1 + 49 74 74 1 + 49 74 75 1 + 49 74 76 1 + 49 74 77 1 + 49 74 78 1 + 49 74 79 1 + 49 74 80 1 + 49 74 81 0.977331 + 49 74 82 0.315112 + 49 75 45 0.0216196 + 49 75 46 0.659059 + 49 75 47 0.999874 + 49 75 48 1 + 49 75 49 1 + 49 75 50 1 + 49 75 51 1 + 49 75 52 1 + 49 75 53 1 + 49 75 54 1 + 49 75 55 1 + 49 75 56 1 + 49 75 57 1 + 49 75 58 1 + 49 75 59 1 + 49 75 60 1 + 49 75 61 1 + 49 75 62 1 + 49 75 63 1 + 49 75 64 1 + 49 75 65 1 + 49 75 66 1 + 49 75 67 1 + 49 75 68 1 + 49 75 69 1 + 49 75 70 1 + 49 75 71 1 + 49 75 72 1 + 49 75 73 1 + 49 75 74 1 + 49 75 75 1 + 49 75 76 1 + 49 75 77 1 + 49 75 78 1 + 49 75 79 1 + 49 75 80 0.999874 + 49 75 81 0.659059 + 49 75 82 0.0216196 + 49 76 46 0.127131 + 49 76 47 0.860729 + 49 76 48 1 + 49 76 49 1 + 49 76 50 1 + 49 76 51 1 + 49 76 52 1 + 49 76 53 1 + 49 76 54 1 + 49 76 55 1 + 49 76 56 1 + 49 76 57 1 + 49 76 58 1 + 49 76 59 1 + 49 76 60 1 + 49 76 61 1 + 49 76 62 1 + 49 76 63 1 + 49 76 64 1 + 49 76 65 1 + 49 76 66 1 + 49 76 67 1 + 49 76 68 1 + 49 76 69 1 + 49 76 70 1 + 49 76 71 1 + 49 76 72 1 + 49 76 73 1 + 49 76 74 1 + 49 76 75 1 + 49 76 76 1 + 49 76 77 1 + 49 76 78 1 + 49 76 79 1 + 49 76 80 0.860729 + 49 76 81 0.127131 + 49 77 46 1.68961e-05 + 49 77 47 0.269165 + 49 77 48 0.934786 + 49 77 49 1 + 49 77 50 1 + 49 77 51 1 + 49 77 52 1 + 49 77 53 1 + 49 77 54 1 + 49 77 55 1 + 49 77 56 1 + 49 77 57 1 + 49 77 58 1 + 49 77 59 1 + 49 77 60 1 + 49 77 61 1 + 49 77 62 1 + 49 77 63 1 + 49 77 64 1 + 49 77 65 1 + 49 77 66 1 + 49 77 67 1 + 49 77 68 1 + 49 77 69 1 + 49 77 70 1 + 49 77 71 1 + 49 77 72 1 + 49 77 73 1 + 49 77 74 1 + 49 77 75 1 + 49 77 76 1 + 49 77 77 1 + 49 77 78 1 + 49 77 79 0.934786 + 49 77 80 0.269165 + 49 77 81 1.68961e-05 + 49 78 47 0.00261469 + 49 78 48 0.360555 + 49 78 49 0.95165 + 49 78 50 1 + 49 78 51 1 + 49 78 52 1 + 49 78 53 1 + 49 78 54 1 + 49 78 55 1 + 49 78 56 1 + 49 78 57 1 + 49 78 58 1 + 49 78 59 1 + 49 78 60 1 + 49 78 61 1 + 49 78 62 1 + 49 78 63 1 + 49 78 64 1 + 49 78 65 1 + 49 78 66 1 + 49 78 67 1 + 49 78 68 1 + 49 78 69 1 + 49 78 70 1 + 49 78 71 1 + 49 78 72 1 + 49 78 73 1 + 49 78 74 1 + 49 78 75 1 + 49 78 76 1 + 49 78 77 1 + 49 78 78 0.95165 + 49 78 79 0.360555 + 49 78 80 0.00261469 + 49 79 48 0.0053362 + 49 79 49 0.360555 + 49 79 50 0.934786 + 49 79 51 1 + 49 79 52 1 + 49 79 53 1 + 49 79 54 1 + 49 79 55 1 + 49 79 56 1 + 49 79 57 1 + 49 79 58 1 + 49 79 59 1 + 49 79 60 1 + 49 79 61 1 + 49 79 62 1 + 49 79 63 1 + 49 79 64 1 + 49 79 65 1 + 49 79 66 1 + 49 79 67 1 + 49 79 68 1 + 49 79 69 1 + 49 79 70 1 + 49 79 71 1 + 49 79 72 1 + 49 79 73 1 + 49 79 74 1 + 49 79 75 1 + 49 79 76 1 + 49 79 77 0.934786 + 49 79 78 0.360555 + 49 79 79 0.0053362 + 49 80 49 0.00261469 + 49 80 50 0.269165 + 49 80 51 0.860729 + 49 80 52 0.999874 + 49 80 53 1 + 49 80 54 1 + 49 80 55 1 + 49 80 56 1 + 49 80 57 1 + 49 80 58 1 + 49 80 59 1 + 49 80 60 1 + 49 80 61 1 + 49 80 62 1 + 49 80 63 1 + 49 80 64 1 + 49 80 65 1 + 49 80 66 1 + 49 80 67 1 + 49 80 68 1 + 49 80 69 1 + 49 80 70 1 + 49 80 71 1 + 49 80 72 1 + 49 80 73 1 + 49 80 74 1 + 49 80 75 0.999874 + 49 80 76 0.860729 + 49 80 77 0.269165 + 49 80 78 0.00261469 + 49 81 50 1.68961e-05 + 49 81 51 0.127131 + 49 81 52 0.659059 + 49 81 53 0.977331 + 49 81 54 1 + 49 81 55 1 + 49 81 56 1 + 49 81 57 1 + 49 81 58 1 + 49 81 59 1 + 49 81 60 1 + 49 81 61 1 + 49 81 62 1 + 49 81 63 1 + 49 81 64 1 + 49 81 65 1 + 49 81 66 1 + 49 81 67 1 + 49 81 68 1 + 49 81 69 1 + 49 81 70 1 + 49 81 71 1 + 49 81 72 1 + 49 81 73 1 + 49 81 74 0.977331 + 49 81 75 0.659059 + 49 81 76 0.127131 + 49 81 77 1.68961e-05 + 49 82 52 0.0216196 + 49 82 53 0.315112 + 49 82 54 0.78779 + 49 82 55 0.986811 + 49 82 56 1 + 49 82 57 1 + 49 82 58 1 + 49 82 59 1 + 49 82 60 1 + 49 82 61 1 + 49 82 62 1 + 49 82 63 1 + 49 82 64 1 + 49 82 65 1 + 49 82 66 1 + 49 82 67 1 + 49 82 68 1 + 49 82 69 1 + 49 82 70 1 + 49 82 71 1 + 49 82 72 0.986811 + 49 82 73 0.78779 + 49 82 74 0.315112 + 49 82 75 0.0216196 + 49 83 54 0.0436378 + 49 83 55 0.316818 + 49 83 56 0.702444 + 49 83 57 0.933296 + 49 83 58 0.99787 + 49 83 59 1 + 49 83 60 1 + 49 83 61 1 + 49 83 62 1 + 49 83 63 1 + 49 83 64 1 + 49 83 65 1 + 49 83 66 1 + 49 83 67 1 + 49 83 68 1 + 49 83 69 0.99787 + 49 83 70 0.933296 + 49 83 71 0.702444 + 49 83 72 0.316818 + 49 83 73 0.0436378 + 49 84 56 0.0114126 + 49 84 57 0.132621 + 49 84 58 0.364963 + 49 84 59 0.606763 + 49 84 60 0.783221 + 49 84 61 0.882567 + 49 84 62 0.931908 + 49 84 63 0.951583 + 49 84 64 0.951583 + 49 84 65 0.931908 + 49 84 66 0.882567 + 49 84 67 0.783221 + 49 84 68 0.606763 + 49 84 69 0.364963 + 49 84 70 0.132621 + 49 84 71 0.0114126 + 49 85 59 0.000228244 + 49 85 60 0.0170305 + 49 85 61 0.061458 + 49 85 62 0.10742 + 49 85 63 0.135234 + 49 85 64 0.135234 + 49 85 65 0.10742 + 49 85 66 0.061458 + 49 85 67 0.0170305 + 49 85 68 0.000228244 + 50 41 62 0.000160193 + 50 41 63 0.00182891 + 50 41 64 0.00182891 + 50 41 65 0.000160193 + 50 42 57 0.0100187 + 50 42 58 0.105685 + 50 42 59 0.28004 + 50 42 60 0.462948 + 50 42 61 0.602307 + 50 42 62 0.694555 + 50 42 63 0.738943 + 50 42 64 0.738943 + 50 42 65 0.694555 + 50 42 66 0.602307 + 50 42 67 0.462948 + 50 42 68 0.28004 + 50 42 69 0.105685 + 50 42 70 0.0100187 + 50 43 54 0.00135226 + 50 43 55 0.103719 + 50 43 56 0.41284 + 50 43 57 0.742086 + 50 43 58 0.933643 + 50 43 59 0.995674 + 50 43 60 1 + 50 43 61 1 + 50 43 62 1 + 50 43 63 1 + 50 43 64 1 + 50 43 65 1 + 50 43 66 1 + 50 43 67 1 + 50 43 68 0.995674 + 50 43 69 0.933643 + 50 43 70 0.742086 + 50 43 71 0.41284 + 50 43 72 0.103719 + 50 43 73 0.00135226 + 50 44 52 0.00062971 + 50 44 53 0.129326 + 50 44 54 0.559714 + 50 44 55 0.912283 + 50 44 56 0.999058 + 50 44 57 1 + 50 44 58 1 + 50 44 59 1 + 50 44 60 1 + 50 44 61 1 + 50 44 62 1 + 50 44 63 1 + 50 44 64 1 + 50 44 65 1 + 50 44 66 1 + 50 44 67 1 + 50 44 68 1 + 50 44 69 1 + 50 44 70 1 + 50 44 71 0.999058 + 50 44 72 0.912283 + 50 44 73 0.559714 + 50 44 74 0.129326 + 50 44 75 0.00062971 + 50 45 51 0.0443033 + 50 45 52 0.459682 + 50 45 53 0.913417 + 50 45 54 0.999965 + 50 45 55 1 + 50 45 56 1 + 50 45 57 1 + 50 45 58 1 + 50 45 59 1 + 50 45 60 1 + 50 45 61 1 + 50 45 62 1 + 50 45 63 1 + 50 45 64 1 + 50 45 65 1 + 50 45 66 1 + 50 45 67 1 + 50 45 68 1 + 50 45 69 1 + 50 45 70 1 + 50 45 71 1 + 50 45 72 1 + 50 45 73 0.999965 + 50 45 74 0.913417 + 50 45 75 0.459682 + 50 45 76 0.0443033 + 50 46 49 1.68961e-05 + 50 46 50 0.156902 + 50 46 51 0.749071 + 50 46 52 0.995483 + 50 46 53 1 + 50 46 54 1 + 50 46 55 1 + 50 46 56 1 + 50 46 57 1 + 50 46 58 1 + 50 46 59 1 + 50 46 60 1 + 50 46 61 1 + 50 46 62 1 + 50 46 63 1 + 50 46 64 1 + 50 46 65 1 + 50 46 66 1 + 50 46 67 1 + 50 46 68 1 + 50 46 69 1 + 50 46 70 1 + 50 46 71 1 + 50 46 72 1 + 50 46 73 1 + 50 46 74 1 + 50 46 75 0.995483 + 50 46 76 0.749071 + 50 46 77 0.156902 + 50 46 78 1.68961e-05 + 50 47 48 0.00101852 + 50 47 49 0.269165 + 50 47 50 0.88976 + 50 47 51 1 + 50 47 52 1 + 50 47 53 1 + 50 47 54 1 + 50 47 55 1 + 50 47 56 1 + 50 47 57 1 + 50 47 58 1 + 50 47 59 1 + 50 47 60 1 + 50 47 61 1 + 50 47 62 1 + 50 47 63 1 + 50 47 64 1 + 50 47 65 1 + 50 47 66 1 + 50 47 67 1 + 50 47 68 1 + 50 47 69 1 + 50 47 70 1 + 50 47 71 1 + 50 47 72 1 + 50 47 73 1 + 50 47 74 1 + 50 47 75 1 + 50 47 76 1 + 50 47 77 0.88976 + 50 47 78 0.269165 + 50 47 79 0.00101852 + 50 48 47 0.00101852 + 50 48 48 0.313512 + 50 48 49 0.934786 + 50 48 50 1 + 50 48 51 1 + 50 48 52 1 + 50 48 53 1 + 50 48 54 1 + 50 48 55 1 + 50 48 56 1 + 50 48 57 1 + 50 48 58 1 + 50 48 59 1 + 50 48 60 1 + 50 48 61 1 + 50 48 62 1 + 50 48 63 1 + 50 48 64 1 + 50 48 65 1 + 50 48 66 1 + 50 48 67 1 + 50 48 68 1 + 50 48 69 1 + 50 48 70 1 + 50 48 71 1 + 50 48 72 1 + 50 48 73 1 + 50 48 74 1 + 50 48 75 1 + 50 48 76 1 + 50 48 77 1 + 50 48 78 0.934786 + 50 48 79 0.313512 + 50 48 80 0.00101852 + 50 49 46 1.68961e-05 + 50 49 47 0.269165 + 50 49 48 0.934786 + 50 49 49 1 + 50 49 50 1 + 50 49 51 1 + 50 49 52 1 + 50 49 53 1 + 50 49 54 1 + 50 49 55 1 + 50 49 56 1 + 50 49 57 1 + 50 49 58 1 + 50 49 59 1 + 50 49 60 1 + 50 49 61 1 + 50 49 62 1 + 50 49 63 1 + 50 49 64 1 + 50 49 65 1 + 50 49 66 1 + 50 49 67 1 + 50 49 68 1 + 50 49 69 1 + 50 49 70 1 + 50 49 71 1 + 50 49 72 1 + 50 49 73 1 + 50 49 74 1 + 50 49 75 1 + 50 49 76 1 + 50 49 77 1 + 50 49 78 1 + 50 49 79 0.934786 + 50 49 80 0.269165 + 50 49 81 1.68961e-05 + 50 50 46 0.156902 + 50 50 47 0.88976 + 50 50 48 1 + 50 50 49 1 + 50 50 50 1 + 50 50 51 1 + 50 50 52 1 + 50 50 53 1 + 50 50 54 1 + 50 50 55 1 + 50 50 56 1 + 50 50 57 1 + 50 50 58 1 + 50 50 59 1 + 50 50 60 1 + 50 50 61 1 + 50 50 62 1 + 50 50 63 1 + 50 50 64 1 + 50 50 65 1 + 50 50 66 1 + 50 50 67 1 + 50 50 68 1 + 50 50 69 1 + 50 50 70 1 + 50 50 71 1 + 50 50 72 1 + 50 50 73 1 + 50 50 74 1 + 50 50 75 1 + 50 50 76 1 + 50 50 77 1 + 50 50 78 1 + 50 50 79 1 + 50 50 80 0.88976 + 50 50 81 0.156902 + 50 51 45 0.0443033 + 50 51 46 0.749071 + 50 51 47 1 + 50 51 48 1 + 50 51 49 1 + 50 51 50 1 + 50 51 51 1 + 50 51 52 1 + 50 51 53 1 + 50 51 54 1 + 50 51 55 1 + 50 51 56 1 + 50 51 57 1 + 50 51 58 1 + 50 51 59 1 + 50 51 60 1 + 50 51 61 1 + 50 51 62 1 + 50 51 63 1 + 50 51 64 1 + 50 51 65 1 + 50 51 66 1 + 50 51 67 1 + 50 51 68 1 + 50 51 69 1 + 50 51 70 1 + 50 51 71 1 + 50 51 72 1 + 50 51 73 1 + 50 51 74 1 + 50 51 75 1 + 50 51 76 1 + 50 51 77 1 + 50 51 78 1 + 50 51 79 1 + 50 51 80 1 + 50 51 81 0.749071 + 50 51 82 0.0443033 + 50 52 44 0.00062971 + 50 52 45 0.459682 + 50 52 46 0.995483 + 50 52 47 1 + 50 52 48 1 + 50 52 49 1 + 50 52 50 1 + 50 52 51 1 + 50 52 52 1 + 50 52 53 1 + 50 52 54 1 + 50 52 55 1 + 50 52 56 1 + 50 52 57 1 + 50 52 58 1 + 50 52 59 1 + 50 52 60 1 + 50 52 61 1 + 50 52 62 1 + 50 52 63 1 + 50 52 64 1 + 50 52 65 1 + 50 52 66 1 + 50 52 67 1 + 50 52 68 1 + 50 52 69 1 + 50 52 70 1 + 50 52 71 1 + 50 52 72 1 + 50 52 73 1 + 50 52 74 1 + 50 52 75 1 + 50 52 76 1 + 50 52 77 1 + 50 52 78 1 + 50 52 79 1 + 50 52 80 1 + 50 52 81 0.995483 + 50 52 82 0.459682 + 50 52 83 0.00062971 + 50 53 44 0.129326 + 50 53 45 0.913417 + 50 53 46 1 + 50 53 47 1 + 50 53 48 1 + 50 53 49 1 + 50 53 50 1 + 50 53 51 1 + 50 53 52 1 + 50 53 53 1 + 50 53 54 1 + 50 53 55 1 + 50 53 56 1 + 50 53 57 1 + 50 53 58 1 + 50 53 59 1 + 50 53 60 1 + 50 53 61 1 + 50 53 62 1 + 50 53 63 1 + 50 53 64 1 + 50 53 65 1 + 50 53 66 1 + 50 53 67 1 + 50 53 68 1 + 50 53 69 1 + 50 53 70 1 + 50 53 71 1 + 50 53 72 1 + 50 53 73 1 + 50 53 74 1 + 50 53 75 1 + 50 53 76 1 + 50 53 77 1 + 50 53 78 1 + 50 53 79 1 + 50 53 80 1 + 50 53 81 1 + 50 53 82 0.913417 + 50 53 83 0.129326 + 50 54 43 0.00135226 + 50 54 44 0.559714 + 50 54 45 0.999965 + 50 54 46 1 + 50 54 47 1 + 50 54 48 1 + 50 54 49 1 + 50 54 50 1 + 50 54 51 1 + 50 54 52 1 + 50 54 53 1 + 50 54 54 1 + 50 54 55 1 + 50 54 56 1 + 50 54 57 1 + 50 54 58 1 + 50 54 59 1 + 50 54 60 1 + 50 54 61 1 + 50 54 62 1 + 50 54 63 1 + 50 54 64 1 + 50 54 65 1 + 50 54 66 1 + 50 54 67 1 + 50 54 68 1 + 50 54 69 1 + 50 54 70 1 + 50 54 71 1 + 50 54 72 1 + 50 54 73 1 + 50 54 74 1 + 50 54 75 1 + 50 54 76 1 + 50 54 77 1 + 50 54 78 1 + 50 54 79 1 + 50 54 80 1 + 50 54 81 1 + 50 54 82 0.999965 + 50 54 83 0.559714 + 50 54 84 0.00135226 + 50 55 43 0.103719 + 50 55 44 0.912283 + 50 55 45 1 + 50 55 46 1 + 50 55 47 1 + 50 55 48 1 + 50 55 49 1 + 50 55 50 1 + 50 55 51 1 + 50 55 52 1 + 50 55 53 1 + 50 55 54 1 + 50 55 55 1 + 50 55 56 1 + 50 55 57 1 + 50 55 58 1 + 50 55 59 1 + 50 55 60 1 + 50 55 61 1 + 50 55 62 1 + 50 55 63 1 + 50 55 64 1 + 50 55 65 1 + 50 55 66 1 + 50 55 67 1 + 50 55 68 1 + 50 55 69 1 + 50 55 70 1 + 50 55 71 1 + 50 55 72 1 + 50 55 73 1 + 50 55 74 1 + 50 55 75 1 + 50 55 76 1 + 50 55 77 1 + 50 55 78 1 + 50 55 79 1 + 50 55 80 1 + 50 55 81 1 + 50 55 82 1 + 50 55 83 0.912283 + 50 55 84 0.103719 + 50 56 43 0.41284 + 50 56 44 0.999058 + 50 56 45 1 + 50 56 46 1 + 50 56 47 1 + 50 56 48 1 + 50 56 49 1 + 50 56 50 1 + 50 56 51 1 + 50 56 52 1 + 50 56 53 1 + 50 56 54 1 + 50 56 55 1 + 50 56 56 1 + 50 56 57 1 + 50 56 58 1 + 50 56 59 1 + 50 56 60 1 + 50 56 61 1 + 50 56 62 1 + 50 56 63 1 + 50 56 64 1 + 50 56 65 1 + 50 56 66 1 + 50 56 67 1 + 50 56 68 1 + 50 56 69 1 + 50 56 70 1 + 50 56 71 1 + 50 56 72 1 + 50 56 73 1 + 50 56 74 1 + 50 56 75 1 + 50 56 76 1 + 50 56 77 1 + 50 56 78 1 + 50 56 79 1 + 50 56 80 1 + 50 56 81 1 + 50 56 82 1 + 50 56 83 0.999058 + 50 56 84 0.41284 + 50 57 42 0.0100187 + 50 57 43 0.742086 + 50 57 44 1 + 50 57 45 1 + 50 57 46 1 + 50 57 47 1 + 50 57 48 1 + 50 57 49 1 + 50 57 50 1 + 50 57 51 1 + 50 57 52 1 + 50 57 53 1 + 50 57 54 1 + 50 57 55 1 + 50 57 56 1 + 50 57 57 1 + 50 57 58 1 + 50 57 59 1 + 50 57 60 1 + 50 57 61 1 + 50 57 62 1 + 50 57 63 1 + 50 57 64 1 + 50 57 65 1 + 50 57 66 1 + 50 57 67 1 + 50 57 68 1 + 50 57 69 1 + 50 57 70 1 + 50 57 71 1 + 50 57 72 1 + 50 57 73 1 + 50 57 74 1 + 50 57 75 1 + 50 57 76 1 + 50 57 77 1 + 50 57 78 1 + 50 57 79 1 + 50 57 80 1 + 50 57 81 1 + 50 57 82 1 + 50 57 83 1 + 50 57 84 0.742086 + 50 57 85 0.0100187 + 50 58 42 0.105685 + 50 58 43 0.933643 + 50 58 44 1 + 50 58 45 1 + 50 58 46 1 + 50 58 47 1 + 50 58 48 1 + 50 58 49 1 + 50 58 50 1 + 50 58 51 1 + 50 58 52 1 + 50 58 53 1 + 50 58 54 1 + 50 58 55 1 + 50 58 56 1 + 50 58 57 1 + 50 58 58 1 + 50 58 59 1 + 50 58 60 1 + 50 58 61 1 + 50 58 62 1 + 50 58 63 1 + 50 58 64 1 + 50 58 65 1 + 50 58 66 1 + 50 58 67 1 + 50 58 68 1 + 50 58 69 1 + 50 58 70 1 + 50 58 71 1 + 50 58 72 1 + 50 58 73 1 + 50 58 74 1 + 50 58 75 1 + 50 58 76 1 + 50 58 77 1 + 50 58 78 1 + 50 58 79 1 + 50 58 80 1 + 50 58 81 1 + 50 58 82 1 + 50 58 83 1 + 50 58 84 0.933643 + 50 58 85 0.105685 + 50 59 42 0.28004 + 50 59 43 0.995674 + 50 59 44 1 + 50 59 45 1 + 50 59 46 1 + 50 59 47 1 + 50 59 48 1 + 50 59 49 1 + 50 59 50 1 + 50 59 51 1 + 50 59 52 1 + 50 59 53 1 + 50 59 54 1 + 50 59 55 1 + 50 59 56 1 + 50 59 57 1 + 50 59 58 1 + 50 59 59 1 + 50 59 60 1 + 50 59 61 1 + 50 59 62 1 + 50 59 63 1 + 50 59 64 1 + 50 59 65 1 + 50 59 66 1 + 50 59 67 1 + 50 59 68 1 + 50 59 69 1 + 50 59 70 1 + 50 59 71 1 + 50 59 72 1 + 50 59 73 1 + 50 59 74 1 + 50 59 75 1 + 50 59 76 1 + 50 59 77 1 + 50 59 78 1 + 50 59 79 1 + 50 59 80 1 + 50 59 81 1 + 50 59 82 1 + 50 59 83 1 + 50 59 84 0.995674 + 50 59 85 0.28004 + 50 60 42 0.462948 + 50 60 43 1 + 50 60 44 1 + 50 60 45 1 + 50 60 46 1 + 50 60 47 1 + 50 60 48 1 + 50 60 49 1 + 50 60 50 1 + 50 60 51 1 + 50 60 52 1 + 50 60 53 1 + 50 60 54 1 + 50 60 55 1 + 50 60 56 1 + 50 60 57 1 + 50 60 58 1 + 50 60 59 1 + 50 60 60 1 + 50 60 61 1 + 50 60 62 1 + 50 60 63 1 + 50 60 64 1 + 50 60 65 1 + 50 60 66 1 + 50 60 67 1 + 50 60 68 1 + 50 60 69 1 + 50 60 70 1 + 50 60 71 1 + 50 60 72 1 + 50 60 73 1 + 50 60 74 1 + 50 60 75 1 + 50 60 76 1 + 50 60 77 1 + 50 60 78 1 + 50 60 79 1 + 50 60 80 1 + 50 60 81 1 + 50 60 82 1 + 50 60 83 1 + 50 60 84 1 + 50 60 85 0.462948 + 50 61 42 0.602307 + 50 61 43 1 + 50 61 44 1 + 50 61 45 1 + 50 61 46 1 + 50 61 47 1 + 50 61 48 1 + 50 61 49 1 + 50 61 50 1 + 50 61 51 1 + 50 61 52 1 + 50 61 53 1 + 50 61 54 1 + 50 61 55 1 + 50 61 56 1 + 50 61 57 1 + 50 61 58 1 + 50 61 59 1 + 50 61 60 1 + 50 61 61 1 + 50 61 62 1 + 50 61 63 1 + 50 61 64 1 + 50 61 65 1 + 50 61 66 1 + 50 61 67 1 + 50 61 68 1 + 50 61 69 1 + 50 61 70 1 + 50 61 71 1 + 50 61 72 1 + 50 61 73 1 + 50 61 74 1 + 50 61 75 1 + 50 61 76 1 + 50 61 77 1 + 50 61 78 1 + 50 61 79 1 + 50 61 80 1 + 50 61 81 1 + 50 61 82 1 + 50 61 83 1 + 50 61 84 1 + 50 61 85 0.602307 + 50 62 41 0.000160193 + 50 62 42 0.694555 + 50 62 43 1 + 50 62 44 1 + 50 62 45 1 + 50 62 46 1 + 50 62 47 1 + 50 62 48 1 + 50 62 49 1 + 50 62 50 1 + 50 62 51 1 + 50 62 52 1 + 50 62 53 1 + 50 62 54 1 + 50 62 55 1 + 50 62 56 1 + 50 62 57 1 + 50 62 58 1 + 50 62 59 1 + 50 62 60 1 + 50 62 61 1 + 50 62 62 1 + 50 62 63 1 + 50 62 64 1 + 50 62 65 1 + 50 62 66 1 + 50 62 67 1 + 50 62 68 1 + 50 62 69 1 + 50 62 70 1 + 50 62 71 1 + 50 62 72 1 + 50 62 73 1 + 50 62 74 1 + 50 62 75 1 + 50 62 76 1 + 50 62 77 1 + 50 62 78 1 + 50 62 79 1 + 50 62 80 1 + 50 62 81 1 + 50 62 82 1 + 50 62 83 1 + 50 62 84 1 + 50 62 85 0.694555 + 50 62 86 0.000160193 + 50 63 41 0.00182891 + 50 63 42 0.738943 + 50 63 43 1 + 50 63 44 1 + 50 63 45 1 + 50 63 46 1 + 50 63 47 1 + 50 63 48 1 + 50 63 49 1 + 50 63 50 1 + 50 63 51 1 + 50 63 52 1 + 50 63 53 1 + 50 63 54 1 + 50 63 55 1 + 50 63 56 1 + 50 63 57 1 + 50 63 58 1 + 50 63 59 1 + 50 63 60 1 + 50 63 61 1 + 50 63 62 1 + 50 63 63 1 + 50 63 64 1 + 50 63 65 1 + 50 63 66 1 + 50 63 67 1 + 50 63 68 1 + 50 63 69 1 + 50 63 70 1 + 50 63 71 1 + 50 63 72 1 + 50 63 73 1 + 50 63 74 1 + 50 63 75 1 + 50 63 76 1 + 50 63 77 1 + 50 63 78 1 + 50 63 79 1 + 50 63 80 1 + 50 63 81 1 + 50 63 82 1 + 50 63 83 1 + 50 63 84 1 + 50 63 85 0.738943 + 50 63 86 0.00182891 + 50 64 41 0.00182891 + 50 64 42 0.738943 + 50 64 43 1 + 50 64 44 1 + 50 64 45 1 + 50 64 46 1 + 50 64 47 1 + 50 64 48 1 + 50 64 49 1 + 50 64 50 1 + 50 64 51 1 + 50 64 52 1 + 50 64 53 1 + 50 64 54 1 + 50 64 55 1 + 50 64 56 1 + 50 64 57 1 + 50 64 58 1 + 50 64 59 1 + 50 64 60 1 + 50 64 61 1 + 50 64 62 1 + 50 64 63 1 + 50 64 64 1 + 50 64 65 1 + 50 64 66 1 + 50 64 67 1 + 50 64 68 1 + 50 64 69 1 + 50 64 70 1 + 50 64 71 1 + 50 64 72 1 + 50 64 73 1 + 50 64 74 1 + 50 64 75 1 + 50 64 76 1 + 50 64 77 1 + 50 64 78 1 + 50 64 79 1 + 50 64 80 1 + 50 64 81 1 + 50 64 82 1 + 50 64 83 1 + 50 64 84 1 + 50 64 85 0.738943 + 50 64 86 0.00182891 + 50 65 41 0.000160193 + 50 65 42 0.694555 + 50 65 43 1 + 50 65 44 1 + 50 65 45 1 + 50 65 46 1 + 50 65 47 1 + 50 65 48 1 + 50 65 49 1 + 50 65 50 1 + 50 65 51 1 + 50 65 52 1 + 50 65 53 1 + 50 65 54 1 + 50 65 55 1 + 50 65 56 1 + 50 65 57 1 + 50 65 58 1 + 50 65 59 1 + 50 65 60 1 + 50 65 61 1 + 50 65 62 1 + 50 65 63 1 + 50 65 64 1 + 50 65 65 1 + 50 65 66 1 + 50 65 67 1 + 50 65 68 1 + 50 65 69 1 + 50 65 70 1 + 50 65 71 1 + 50 65 72 1 + 50 65 73 1 + 50 65 74 1 + 50 65 75 1 + 50 65 76 1 + 50 65 77 1 + 50 65 78 1 + 50 65 79 1 + 50 65 80 1 + 50 65 81 1 + 50 65 82 1 + 50 65 83 1 + 50 65 84 1 + 50 65 85 0.694555 + 50 65 86 0.000160193 + 50 66 42 0.602307 + 50 66 43 1 + 50 66 44 1 + 50 66 45 1 + 50 66 46 1 + 50 66 47 1 + 50 66 48 1 + 50 66 49 1 + 50 66 50 1 + 50 66 51 1 + 50 66 52 1 + 50 66 53 1 + 50 66 54 1 + 50 66 55 1 + 50 66 56 1 + 50 66 57 1 + 50 66 58 1 + 50 66 59 1 + 50 66 60 1 + 50 66 61 1 + 50 66 62 1 + 50 66 63 1 + 50 66 64 1 + 50 66 65 1 + 50 66 66 1 + 50 66 67 1 + 50 66 68 1 + 50 66 69 1 + 50 66 70 1 + 50 66 71 1 + 50 66 72 1 + 50 66 73 1 + 50 66 74 1 + 50 66 75 1 + 50 66 76 1 + 50 66 77 1 + 50 66 78 1 + 50 66 79 1 + 50 66 80 1 + 50 66 81 1 + 50 66 82 1 + 50 66 83 1 + 50 66 84 1 + 50 66 85 0.602307 + 50 67 42 0.462948 + 50 67 43 1 + 50 67 44 1 + 50 67 45 1 + 50 67 46 1 + 50 67 47 1 + 50 67 48 1 + 50 67 49 1 + 50 67 50 1 + 50 67 51 1 + 50 67 52 1 + 50 67 53 1 + 50 67 54 1 + 50 67 55 1 + 50 67 56 1 + 50 67 57 1 + 50 67 58 1 + 50 67 59 1 + 50 67 60 1 + 50 67 61 1 + 50 67 62 1 + 50 67 63 1 + 50 67 64 1 + 50 67 65 1 + 50 67 66 1 + 50 67 67 1 + 50 67 68 1 + 50 67 69 1 + 50 67 70 1 + 50 67 71 1 + 50 67 72 1 + 50 67 73 1 + 50 67 74 1 + 50 67 75 1 + 50 67 76 1 + 50 67 77 1 + 50 67 78 1 + 50 67 79 1 + 50 67 80 1 + 50 67 81 1 + 50 67 82 1 + 50 67 83 1 + 50 67 84 1 + 50 67 85 0.462948 + 50 68 42 0.28004 + 50 68 43 0.995674 + 50 68 44 1 + 50 68 45 1 + 50 68 46 1 + 50 68 47 1 + 50 68 48 1 + 50 68 49 1 + 50 68 50 1 + 50 68 51 1 + 50 68 52 1 + 50 68 53 1 + 50 68 54 1 + 50 68 55 1 + 50 68 56 1 + 50 68 57 1 + 50 68 58 1 + 50 68 59 1 + 50 68 60 1 + 50 68 61 1 + 50 68 62 1 + 50 68 63 1 + 50 68 64 1 + 50 68 65 1 + 50 68 66 1 + 50 68 67 1 + 50 68 68 1 + 50 68 69 1 + 50 68 70 1 + 50 68 71 1 + 50 68 72 1 + 50 68 73 1 + 50 68 74 1 + 50 68 75 1 + 50 68 76 1 + 50 68 77 1 + 50 68 78 1 + 50 68 79 1 + 50 68 80 1 + 50 68 81 1 + 50 68 82 1 + 50 68 83 1 + 50 68 84 0.995674 + 50 68 85 0.28004 + 50 69 42 0.105685 + 50 69 43 0.933643 + 50 69 44 1 + 50 69 45 1 + 50 69 46 1 + 50 69 47 1 + 50 69 48 1 + 50 69 49 1 + 50 69 50 1 + 50 69 51 1 + 50 69 52 1 + 50 69 53 1 + 50 69 54 1 + 50 69 55 1 + 50 69 56 1 + 50 69 57 1 + 50 69 58 1 + 50 69 59 1 + 50 69 60 1 + 50 69 61 1 + 50 69 62 1 + 50 69 63 1 + 50 69 64 1 + 50 69 65 1 + 50 69 66 1 + 50 69 67 1 + 50 69 68 1 + 50 69 69 1 + 50 69 70 1 + 50 69 71 1 + 50 69 72 1 + 50 69 73 1 + 50 69 74 1 + 50 69 75 1 + 50 69 76 1 + 50 69 77 1 + 50 69 78 1 + 50 69 79 1 + 50 69 80 1 + 50 69 81 1 + 50 69 82 1 + 50 69 83 1 + 50 69 84 0.933643 + 50 69 85 0.105685 + 50 70 42 0.0100187 + 50 70 43 0.742086 + 50 70 44 1 + 50 70 45 1 + 50 70 46 1 + 50 70 47 1 + 50 70 48 1 + 50 70 49 1 + 50 70 50 1 + 50 70 51 1 + 50 70 52 1 + 50 70 53 1 + 50 70 54 1 + 50 70 55 1 + 50 70 56 1 + 50 70 57 1 + 50 70 58 1 + 50 70 59 1 + 50 70 60 1 + 50 70 61 1 + 50 70 62 1 + 50 70 63 1 + 50 70 64 1 + 50 70 65 1 + 50 70 66 1 + 50 70 67 1 + 50 70 68 1 + 50 70 69 1 + 50 70 70 1 + 50 70 71 1 + 50 70 72 1 + 50 70 73 1 + 50 70 74 1 + 50 70 75 1 + 50 70 76 1 + 50 70 77 1 + 50 70 78 1 + 50 70 79 1 + 50 70 80 1 + 50 70 81 1 + 50 70 82 1 + 50 70 83 1 + 50 70 84 0.742086 + 50 70 85 0.0100187 + 50 71 43 0.41284 + 50 71 44 0.999058 + 50 71 45 1 + 50 71 46 1 + 50 71 47 1 + 50 71 48 1 + 50 71 49 1 + 50 71 50 1 + 50 71 51 1 + 50 71 52 1 + 50 71 53 1 + 50 71 54 1 + 50 71 55 1 + 50 71 56 1 + 50 71 57 1 + 50 71 58 1 + 50 71 59 1 + 50 71 60 1 + 50 71 61 1 + 50 71 62 1 + 50 71 63 1 + 50 71 64 1 + 50 71 65 1 + 50 71 66 1 + 50 71 67 1 + 50 71 68 1 + 50 71 69 1 + 50 71 70 1 + 50 71 71 1 + 50 71 72 1 + 50 71 73 1 + 50 71 74 1 + 50 71 75 1 + 50 71 76 1 + 50 71 77 1 + 50 71 78 1 + 50 71 79 1 + 50 71 80 1 + 50 71 81 1 + 50 71 82 1 + 50 71 83 0.999058 + 50 71 84 0.41284 + 50 72 43 0.103719 + 50 72 44 0.912283 + 50 72 45 1 + 50 72 46 1 + 50 72 47 1 + 50 72 48 1 + 50 72 49 1 + 50 72 50 1 + 50 72 51 1 + 50 72 52 1 + 50 72 53 1 + 50 72 54 1 + 50 72 55 1 + 50 72 56 1 + 50 72 57 1 + 50 72 58 1 + 50 72 59 1 + 50 72 60 1 + 50 72 61 1 + 50 72 62 1 + 50 72 63 1 + 50 72 64 1 + 50 72 65 1 + 50 72 66 1 + 50 72 67 1 + 50 72 68 1 + 50 72 69 1 + 50 72 70 1 + 50 72 71 1 + 50 72 72 1 + 50 72 73 1 + 50 72 74 1 + 50 72 75 1 + 50 72 76 1 + 50 72 77 1 + 50 72 78 1 + 50 72 79 1 + 50 72 80 1 + 50 72 81 1 + 50 72 82 1 + 50 72 83 0.912283 + 50 72 84 0.103719 + 50 73 43 0.00135226 + 50 73 44 0.559714 + 50 73 45 0.999965 + 50 73 46 1 + 50 73 47 1 + 50 73 48 1 + 50 73 49 1 + 50 73 50 1 + 50 73 51 1 + 50 73 52 1 + 50 73 53 1 + 50 73 54 1 + 50 73 55 1 + 50 73 56 1 + 50 73 57 1 + 50 73 58 1 + 50 73 59 1 + 50 73 60 1 + 50 73 61 1 + 50 73 62 1 + 50 73 63 1 + 50 73 64 1 + 50 73 65 1 + 50 73 66 1 + 50 73 67 1 + 50 73 68 1 + 50 73 69 1 + 50 73 70 1 + 50 73 71 1 + 50 73 72 1 + 50 73 73 1 + 50 73 74 1 + 50 73 75 1 + 50 73 76 1 + 50 73 77 1 + 50 73 78 1 + 50 73 79 1 + 50 73 80 1 + 50 73 81 1 + 50 73 82 0.999965 + 50 73 83 0.559714 + 50 73 84 0.00135226 + 50 74 44 0.129326 + 50 74 45 0.913417 + 50 74 46 1 + 50 74 47 1 + 50 74 48 1 + 50 74 49 1 + 50 74 50 1 + 50 74 51 1 + 50 74 52 1 + 50 74 53 1 + 50 74 54 1 + 50 74 55 1 + 50 74 56 1 + 50 74 57 1 + 50 74 58 1 + 50 74 59 1 + 50 74 60 1 + 50 74 61 1 + 50 74 62 1 + 50 74 63 1 + 50 74 64 1 + 50 74 65 1 + 50 74 66 1 + 50 74 67 1 + 50 74 68 1 + 50 74 69 1 + 50 74 70 1 + 50 74 71 1 + 50 74 72 1 + 50 74 73 1 + 50 74 74 1 + 50 74 75 1 + 50 74 76 1 + 50 74 77 1 + 50 74 78 1 + 50 74 79 1 + 50 74 80 1 + 50 74 81 1 + 50 74 82 0.913417 + 50 74 83 0.129326 + 50 75 44 0.00062971 + 50 75 45 0.459682 + 50 75 46 0.995483 + 50 75 47 1 + 50 75 48 1 + 50 75 49 1 + 50 75 50 1 + 50 75 51 1 + 50 75 52 1 + 50 75 53 1 + 50 75 54 1 + 50 75 55 1 + 50 75 56 1 + 50 75 57 1 + 50 75 58 1 + 50 75 59 1 + 50 75 60 1 + 50 75 61 1 + 50 75 62 1 + 50 75 63 1 + 50 75 64 1 + 50 75 65 1 + 50 75 66 1 + 50 75 67 1 + 50 75 68 1 + 50 75 69 1 + 50 75 70 1 + 50 75 71 1 + 50 75 72 1 + 50 75 73 1 + 50 75 74 1 + 50 75 75 1 + 50 75 76 1 + 50 75 77 1 + 50 75 78 1 + 50 75 79 1 + 50 75 80 1 + 50 75 81 0.995483 + 50 75 82 0.459682 + 50 75 83 0.00062971 + 50 76 45 0.0443033 + 50 76 46 0.749071 + 50 76 47 1 + 50 76 48 1 + 50 76 49 1 + 50 76 50 1 + 50 76 51 1 + 50 76 52 1 + 50 76 53 1 + 50 76 54 1 + 50 76 55 1 + 50 76 56 1 + 50 76 57 1 + 50 76 58 1 + 50 76 59 1 + 50 76 60 1 + 50 76 61 1 + 50 76 62 1 + 50 76 63 1 + 50 76 64 1 + 50 76 65 1 + 50 76 66 1 + 50 76 67 1 + 50 76 68 1 + 50 76 69 1 + 50 76 70 1 + 50 76 71 1 + 50 76 72 1 + 50 76 73 1 + 50 76 74 1 + 50 76 75 1 + 50 76 76 1 + 50 76 77 1 + 50 76 78 1 + 50 76 79 1 + 50 76 80 1 + 50 76 81 0.749071 + 50 76 82 0.0443033 + 50 77 46 0.156902 + 50 77 47 0.88976 + 50 77 48 1 + 50 77 49 1 + 50 77 50 1 + 50 77 51 1 + 50 77 52 1 + 50 77 53 1 + 50 77 54 1 + 50 77 55 1 + 50 77 56 1 + 50 77 57 1 + 50 77 58 1 + 50 77 59 1 + 50 77 60 1 + 50 77 61 1 + 50 77 62 1 + 50 77 63 1 + 50 77 64 1 + 50 77 65 1 + 50 77 66 1 + 50 77 67 1 + 50 77 68 1 + 50 77 69 1 + 50 77 70 1 + 50 77 71 1 + 50 77 72 1 + 50 77 73 1 + 50 77 74 1 + 50 77 75 1 + 50 77 76 1 + 50 77 77 1 + 50 77 78 1 + 50 77 79 1 + 50 77 80 0.88976 + 50 77 81 0.156902 + 50 78 46 1.68961e-05 + 50 78 47 0.269165 + 50 78 48 0.934786 + 50 78 49 1 + 50 78 50 1 + 50 78 51 1 + 50 78 52 1 + 50 78 53 1 + 50 78 54 1 + 50 78 55 1 + 50 78 56 1 + 50 78 57 1 + 50 78 58 1 + 50 78 59 1 + 50 78 60 1 + 50 78 61 1 + 50 78 62 1 + 50 78 63 1 + 50 78 64 1 + 50 78 65 1 + 50 78 66 1 + 50 78 67 1 + 50 78 68 1 + 50 78 69 1 + 50 78 70 1 + 50 78 71 1 + 50 78 72 1 + 50 78 73 1 + 50 78 74 1 + 50 78 75 1 + 50 78 76 1 + 50 78 77 1 + 50 78 78 1 + 50 78 79 0.934786 + 50 78 80 0.269165 + 50 78 81 1.68961e-05 + 50 79 47 0.00101852 + 50 79 48 0.313512 + 50 79 49 0.934786 + 50 79 50 1 + 50 79 51 1 + 50 79 52 1 + 50 79 53 1 + 50 79 54 1 + 50 79 55 1 + 50 79 56 1 + 50 79 57 1 + 50 79 58 1 + 50 79 59 1 + 50 79 60 1 + 50 79 61 1 + 50 79 62 1 + 50 79 63 1 + 50 79 64 1 + 50 79 65 1 + 50 79 66 1 + 50 79 67 1 + 50 79 68 1 + 50 79 69 1 + 50 79 70 1 + 50 79 71 1 + 50 79 72 1 + 50 79 73 1 + 50 79 74 1 + 50 79 75 1 + 50 79 76 1 + 50 79 77 1 + 50 79 78 0.934786 + 50 79 79 0.313512 + 50 79 80 0.00101852 + 50 80 48 0.00101852 + 50 80 49 0.269165 + 50 80 50 0.88976 + 50 80 51 1 + 50 80 52 1 + 50 80 53 1 + 50 80 54 1 + 50 80 55 1 + 50 80 56 1 + 50 80 57 1 + 50 80 58 1 + 50 80 59 1 + 50 80 60 1 + 50 80 61 1 + 50 80 62 1 + 50 80 63 1 + 50 80 64 1 + 50 80 65 1 + 50 80 66 1 + 50 80 67 1 + 50 80 68 1 + 50 80 69 1 + 50 80 70 1 + 50 80 71 1 + 50 80 72 1 + 50 80 73 1 + 50 80 74 1 + 50 80 75 1 + 50 80 76 1 + 50 80 77 0.88976 + 50 80 78 0.269165 + 50 80 79 0.00101852 + 50 81 49 1.68961e-05 + 50 81 50 0.156902 + 50 81 51 0.749071 + 50 81 52 0.995483 + 50 81 53 1 + 50 81 54 1 + 50 81 55 1 + 50 81 56 1 + 50 81 57 1 + 50 81 58 1 + 50 81 59 1 + 50 81 60 1 + 50 81 61 1 + 50 81 62 1 + 50 81 63 1 + 50 81 64 1 + 50 81 65 1 + 50 81 66 1 + 50 81 67 1 + 50 81 68 1 + 50 81 69 1 + 50 81 70 1 + 50 81 71 1 + 50 81 72 1 + 50 81 73 1 + 50 81 74 1 + 50 81 75 0.995483 + 50 81 76 0.749071 + 50 81 77 0.156902 + 50 81 78 1.68961e-05 + 50 82 51 0.0443033 + 50 82 52 0.459682 + 50 82 53 0.913417 + 50 82 54 0.999965 + 50 82 55 1 + 50 82 56 1 + 50 82 57 1 + 50 82 58 1 + 50 82 59 1 + 50 82 60 1 + 50 82 61 1 + 50 82 62 1 + 50 82 63 1 + 50 82 64 1 + 50 82 65 1 + 50 82 66 1 + 50 82 67 1 + 50 82 68 1 + 50 82 69 1 + 50 82 70 1 + 50 82 71 1 + 50 82 72 1 + 50 82 73 0.999965 + 50 82 74 0.913417 + 50 82 75 0.459682 + 50 82 76 0.0443033 + 50 83 52 0.00062971 + 50 83 53 0.129326 + 50 83 54 0.559714 + 50 83 55 0.912283 + 50 83 56 0.999058 + 50 83 57 1 + 50 83 58 1 + 50 83 59 1 + 50 83 60 1 + 50 83 61 1 + 50 83 62 1 + 50 83 63 1 + 50 83 64 1 + 50 83 65 1 + 50 83 66 1 + 50 83 67 1 + 50 83 68 1 + 50 83 69 1 + 50 83 70 1 + 50 83 71 0.999058 + 50 83 72 0.912283 + 50 83 73 0.559714 + 50 83 74 0.129326 + 50 83 75 0.00062971 + 50 84 54 0.00135226 + 50 84 55 0.103719 + 50 84 56 0.41284 + 50 84 57 0.742086 + 50 84 58 0.933643 + 50 84 59 0.995674 + 50 84 60 1 + 50 84 61 1 + 50 84 62 1 + 50 84 63 1 + 50 84 64 1 + 50 84 65 1 + 50 84 66 1 + 50 84 67 1 + 50 84 68 0.995674 + 50 84 69 0.933643 + 50 84 70 0.742086 + 50 84 71 0.41284 + 50 84 72 0.103719 + 50 84 73 0.00135226 + 50 85 57 0.0100187 + 50 85 58 0.105685 + 50 85 59 0.28004 + 50 85 60 0.462948 + 50 85 61 0.602307 + 50 85 62 0.694555 + 50 85 63 0.738943 + 50 85 64 0.738943 + 50 85 65 0.694555 + 50 85 66 0.602307 + 50 85 67 0.462948 + 50 85 68 0.28004 + 50 85 69 0.105685 + 50 85 70 0.0100187 + 50 86 62 0.000160193 + 50 86 63 0.00182891 + 50 86 64 0.00182891 + 50 86 65 0.000160193 + 51 41 58 0.000204528 + 51 41 59 0.0262369 + 51 41 60 0.106397 + 51 41 61 0.203942 + 51 41 62 0.286191 + 51 41 63 0.330857 + 51 41 64 0.330857 + 51 41 65 0.286191 + 51 41 66 0.203942 + 51 41 67 0.106397 + 51 41 68 0.0262369 + 51 41 69 0.000204528 + 51 42 55 0.00260739 + 51 42 56 0.104302 + 51 42 57 0.370069 + 51 42 58 0.648356 + 51 42 59 0.852122 + 51 42 60 0.954076 + 51 42 61 0.992135 + 51 42 62 0.99983 + 51 42 63 1 + 51 42 64 1 + 51 42 65 0.99983 + 51 42 66 0.992135 + 51 42 67 0.954076 + 51 42 68 0.852122 + 51 42 69 0.648356 + 51 42 70 0.370069 + 51 42 71 0.104302 + 51 42 72 0.00260739 + 51 43 53 0.0123857 + 51 43 54 0.23592 + 51 43 55 0.652868 + 51 43 56 0.935026 + 51 43 57 0.999467 + 51 43 58 1 + 51 43 59 1 + 51 43 60 1 + 51 43 61 1 + 51 43 62 1 + 51 43 63 1 + 51 43 64 1 + 51 43 65 1 + 51 43 66 1 + 51 43 67 1 + 51 43 68 1 + 51 43 69 1 + 51 43 70 0.999467 + 51 43 71 0.935026 + 51 43 72 0.652868 + 51 43 73 0.23592 + 51 43 74 0.0123857 + 51 44 51 0.00193335 + 51 44 52 0.194777 + 51 44 53 0.701471 + 51 44 54 0.979001 + 51 44 55 1 + 51 44 56 1 + 51 44 57 1 + 51 44 58 1 + 51 44 59 1 + 51 44 60 1 + 51 44 61 1 + 51 44 62 1 + 51 44 63 1 + 51 44 64 1 + 51 44 65 1 + 51 44 66 1 + 51 44 67 1 + 51 44 68 1 + 51 44 69 1 + 51 44 70 1 + 51 44 71 1 + 51 44 72 1 + 51 44 73 0.979001 + 51 44 74 0.701471 + 51 44 75 0.194777 + 51 44 76 0.00193335 + 51 45 50 0.0443033 + 51 45 51 0.51002 + 51 45 52 0.952748 + 51 45 53 1 + 51 45 54 1 + 51 45 55 1 + 51 45 56 1 + 51 45 57 1 + 51 45 58 1 + 51 45 59 1 + 51 45 60 1 + 51 45 61 1 + 51 45 62 1 + 51 45 63 1 + 51 45 64 1 + 51 45 65 1 + 51 45 66 1 + 51 45 67 1 + 51 45 68 1 + 51 45 69 1 + 51 45 70 1 + 51 45 71 1 + 51 45 72 1 + 51 45 73 1 + 51 45 74 1 + 51 45 75 0.952748 + 51 45 76 0.51002 + 51 45 77 0.0443033 + 51 46 49 0.127131 + 51 46 50 0.749071 + 51 46 51 0.99797 + 51 46 52 1 + 51 46 53 1 + 51 46 54 1 + 51 46 55 1 + 51 46 56 1 + 51 46 57 1 + 51 46 58 1 + 51 46 59 1 + 51 46 60 1 + 51 46 61 1 + 51 46 62 1 + 51 46 63 1 + 51 46 64 1 + 51 46 65 1 + 51 46 66 1 + 51 46 67 1 + 51 46 68 1 + 51 46 69 1 + 51 46 70 1 + 51 46 71 1 + 51 46 72 1 + 51 46 73 1 + 51 46 74 1 + 51 46 75 1 + 51 46 76 0.99797 + 51 46 77 0.749071 + 51 46 78 0.127131 + 51 47 48 0.190365 + 51 47 49 0.860729 + 51 47 50 1 + 51 47 51 1 + 51 47 52 1 + 51 47 53 1 + 51 47 54 1 + 51 47 55 1 + 51 47 56 1 + 51 47 57 1 + 51 47 58 1 + 51 47 59 1 + 51 47 60 1 + 51 47 61 1 + 51 47 62 1 + 51 47 63 1 + 51 47 64 1 + 51 47 65 1 + 51 47 66 1 + 51 47 67 1 + 51 47 68 1 + 51 47 69 1 + 51 47 70 1 + 51 47 71 1 + 51 47 72 1 + 51 47 73 1 + 51 47 74 1 + 51 47 75 1 + 51 47 76 1 + 51 47 77 1 + 51 47 78 0.860729 + 51 47 79 0.190365 + 51 48 47 0.190365 + 51 48 48 0.889603 + 51 48 49 1 + 51 48 50 1 + 51 48 51 1 + 51 48 52 1 + 51 48 53 1 + 51 48 54 1 + 51 48 55 1 + 51 48 56 1 + 51 48 57 1 + 51 48 58 1 + 51 48 59 1 + 51 48 60 1 + 51 48 61 1 + 51 48 62 1 + 51 48 63 1 + 51 48 64 1 + 51 48 65 1 + 51 48 66 1 + 51 48 67 1 + 51 48 68 1 + 51 48 69 1 + 51 48 70 1 + 51 48 71 1 + 51 48 72 1 + 51 48 73 1 + 51 48 74 1 + 51 48 75 1 + 51 48 76 1 + 51 48 77 1 + 51 48 78 1 + 51 48 79 0.889603 + 51 48 80 0.190365 + 51 49 46 0.127131 + 51 49 47 0.860729 + 51 49 48 1 + 51 49 49 1 + 51 49 50 1 + 51 49 51 1 + 51 49 52 1 + 51 49 53 1 + 51 49 54 1 + 51 49 55 1 + 51 49 56 1 + 51 49 57 1 + 51 49 58 1 + 51 49 59 1 + 51 49 60 1 + 51 49 61 1 + 51 49 62 1 + 51 49 63 1 + 51 49 64 1 + 51 49 65 1 + 51 49 66 1 + 51 49 67 1 + 51 49 68 1 + 51 49 69 1 + 51 49 70 1 + 51 49 71 1 + 51 49 72 1 + 51 49 73 1 + 51 49 74 1 + 51 49 75 1 + 51 49 76 1 + 51 49 77 1 + 51 49 78 1 + 51 49 79 1 + 51 49 80 0.860729 + 51 49 81 0.127131 + 51 50 45 0.0443033 + 51 50 46 0.749071 + 51 50 47 1 + 51 50 48 1 + 51 50 49 1 + 51 50 50 1 + 51 50 51 1 + 51 50 52 1 + 51 50 53 1 + 51 50 54 1 + 51 50 55 1 + 51 50 56 1 + 51 50 57 1 + 51 50 58 1 + 51 50 59 1 + 51 50 60 1 + 51 50 61 1 + 51 50 62 1 + 51 50 63 1 + 51 50 64 1 + 51 50 65 1 + 51 50 66 1 + 51 50 67 1 + 51 50 68 1 + 51 50 69 1 + 51 50 70 1 + 51 50 71 1 + 51 50 72 1 + 51 50 73 1 + 51 50 74 1 + 51 50 75 1 + 51 50 76 1 + 51 50 77 1 + 51 50 78 1 + 51 50 79 1 + 51 50 80 1 + 51 50 81 0.749071 + 51 50 82 0.0443033 + 51 51 44 0.00193335 + 51 51 45 0.51002 + 51 51 46 0.99797 + 51 51 47 1 + 51 51 48 1 + 51 51 49 1 + 51 51 50 1 + 51 51 51 1 + 51 51 52 1 + 51 51 53 1 + 51 51 54 1 + 51 51 55 1 + 51 51 56 1 + 51 51 57 1 + 51 51 58 1 + 51 51 59 1 + 51 51 60 1 + 51 51 61 1 + 51 51 62 1 + 51 51 63 1 + 51 51 64 1 + 51 51 65 1 + 51 51 66 1 + 51 51 67 1 + 51 51 68 1 + 51 51 69 1 + 51 51 70 1 + 51 51 71 1 + 51 51 72 1 + 51 51 73 1 + 51 51 74 1 + 51 51 75 1 + 51 51 76 1 + 51 51 77 1 + 51 51 78 1 + 51 51 79 1 + 51 51 80 1 + 51 51 81 0.99797 + 51 51 82 0.51002 + 51 51 83 0.00193335 + 51 52 44 0.194777 + 51 52 45 0.952748 + 51 52 46 1 + 51 52 47 1 + 51 52 48 1 + 51 52 49 1 + 51 52 50 1 + 51 52 51 1 + 51 52 52 1 + 51 52 53 1 + 51 52 54 1 + 51 52 55 1 + 51 52 56 1 + 51 52 57 1 + 51 52 58 1 + 51 52 59 1 + 51 52 60 1 + 51 52 61 1 + 51 52 62 1 + 51 52 63 1 + 51 52 64 1 + 51 52 65 1 + 51 52 66 1 + 51 52 67 1 + 51 52 68 1 + 51 52 69 1 + 51 52 70 1 + 51 52 71 1 + 51 52 72 1 + 51 52 73 1 + 51 52 74 1 + 51 52 75 1 + 51 52 76 1 + 51 52 77 1 + 51 52 78 1 + 51 52 79 1 + 51 52 80 1 + 51 52 81 1 + 51 52 82 0.952748 + 51 52 83 0.194777 + 51 53 43 0.0123857 + 51 53 44 0.701471 + 51 53 45 1 + 51 53 46 1 + 51 53 47 1 + 51 53 48 1 + 51 53 49 1 + 51 53 50 1 + 51 53 51 1 + 51 53 52 1 + 51 53 53 1 + 51 53 54 1 + 51 53 55 1 + 51 53 56 1 + 51 53 57 1 + 51 53 58 1 + 51 53 59 1 + 51 53 60 1 + 51 53 61 1 + 51 53 62 1 + 51 53 63 1 + 51 53 64 1 + 51 53 65 1 + 51 53 66 1 + 51 53 67 1 + 51 53 68 1 + 51 53 69 1 + 51 53 70 1 + 51 53 71 1 + 51 53 72 1 + 51 53 73 1 + 51 53 74 1 + 51 53 75 1 + 51 53 76 1 + 51 53 77 1 + 51 53 78 1 + 51 53 79 1 + 51 53 80 1 + 51 53 81 1 + 51 53 82 1 + 51 53 83 0.701471 + 51 53 84 0.0123857 + 51 54 43 0.23592 + 51 54 44 0.979001 + 51 54 45 1 + 51 54 46 1 + 51 54 47 1 + 51 54 48 1 + 51 54 49 1 + 51 54 50 1 + 51 54 51 1 + 51 54 52 1 + 51 54 53 1 + 51 54 54 1 + 51 54 55 1 + 51 54 56 1 + 51 54 57 1 + 51 54 58 1 + 51 54 59 1 + 51 54 60 1 + 51 54 61 1 + 51 54 62 1 + 51 54 63 1 + 51 54 64 1 + 51 54 65 1 + 51 54 66 1 + 51 54 67 1 + 51 54 68 1 + 51 54 69 1 + 51 54 70 1 + 51 54 71 1 + 51 54 72 1 + 51 54 73 1 + 51 54 74 1 + 51 54 75 1 + 51 54 76 1 + 51 54 77 1 + 51 54 78 1 + 51 54 79 1 + 51 54 80 1 + 51 54 81 1 + 51 54 82 1 + 51 54 83 0.979001 + 51 54 84 0.23592 + 51 55 42 0.00260739 + 51 55 43 0.652868 + 51 55 44 1 + 51 55 45 1 + 51 55 46 1 + 51 55 47 1 + 51 55 48 1 + 51 55 49 1 + 51 55 50 1 + 51 55 51 1 + 51 55 52 1 + 51 55 53 1 + 51 55 54 1 + 51 55 55 1 + 51 55 56 1 + 51 55 57 1 + 51 55 58 1 + 51 55 59 1 + 51 55 60 1 + 51 55 61 1 + 51 55 62 1 + 51 55 63 1 + 51 55 64 1 + 51 55 65 1 + 51 55 66 1 + 51 55 67 1 + 51 55 68 1 + 51 55 69 1 + 51 55 70 1 + 51 55 71 1 + 51 55 72 1 + 51 55 73 1 + 51 55 74 1 + 51 55 75 1 + 51 55 76 1 + 51 55 77 1 + 51 55 78 1 + 51 55 79 1 + 51 55 80 1 + 51 55 81 1 + 51 55 82 1 + 51 55 83 1 + 51 55 84 0.652868 + 51 55 85 0.00260739 + 51 56 42 0.104302 + 51 56 43 0.935026 + 51 56 44 1 + 51 56 45 1 + 51 56 46 1 + 51 56 47 1 + 51 56 48 1 + 51 56 49 1 + 51 56 50 1 + 51 56 51 1 + 51 56 52 1 + 51 56 53 1 + 51 56 54 1 + 51 56 55 1 + 51 56 56 1 + 51 56 57 1 + 51 56 58 1 + 51 56 59 1 + 51 56 60 1 + 51 56 61 1 + 51 56 62 1 + 51 56 63 1 + 51 56 64 1 + 51 56 65 1 + 51 56 66 1 + 51 56 67 1 + 51 56 68 1 + 51 56 69 1 + 51 56 70 1 + 51 56 71 1 + 51 56 72 1 + 51 56 73 1 + 51 56 74 1 + 51 56 75 1 + 51 56 76 1 + 51 56 77 1 + 51 56 78 1 + 51 56 79 1 + 51 56 80 1 + 51 56 81 1 + 51 56 82 1 + 51 56 83 1 + 51 56 84 0.935026 + 51 56 85 0.104302 + 51 57 42 0.370069 + 51 57 43 0.999467 + 51 57 44 1 + 51 57 45 1 + 51 57 46 1 + 51 57 47 1 + 51 57 48 1 + 51 57 49 1 + 51 57 50 1 + 51 57 51 1 + 51 57 52 1 + 51 57 53 1 + 51 57 54 1 + 51 57 55 1 + 51 57 56 1 + 51 57 57 1 + 51 57 58 1 + 51 57 59 1 + 51 57 60 1 + 51 57 61 1 + 51 57 62 1 + 51 57 63 1 + 51 57 64 1 + 51 57 65 1 + 51 57 66 1 + 51 57 67 1 + 51 57 68 1 + 51 57 69 1 + 51 57 70 1 + 51 57 71 1 + 51 57 72 1 + 51 57 73 1 + 51 57 74 1 + 51 57 75 1 + 51 57 76 1 + 51 57 77 1 + 51 57 78 1 + 51 57 79 1 + 51 57 80 1 + 51 57 81 1 + 51 57 82 1 + 51 57 83 1 + 51 57 84 0.999467 + 51 57 85 0.370069 + 51 58 41 0.000204528 + 51 58 42 0.648356 + 51 58 43 1 + 51 58 44 1 + 51 58 45 1 + 51 58 46 1 + 51 58 47 1 + 51 58 48 1 + 51 58 49 1 + 51 58 50 1 + 51 58 51 1 + 51 58 52 1 + 51 58 53 1 + 51 58 54 1 + 51 58 55 1 + 51 58 56 1 + 51 58 57 1 + 51 58 58 1 + 51 58 59 1 + 51 58 60 1 + 51 58 61 1 + 51 58 62 1 + 51 58 63 1 + 51 58 64 1 + 51 58 65 1 + 51 58 66 1 + 51 58 67 1 + 51 58 68 1 + 51 58 69 1 + 51 58 70 1 + 51 58 71 1 + 51 58 72 1 + 51 58 73 1 + 51 58 74 1 + 51 58 75 1 + 51 58 76 1 + 51 58 77 1 + 51 58 78 1 + 51 58 79 1 + 51 58 80 1 + 51 58 81 1 + 51 58 82 1 + 51 58 83 1 + 51 58 84 1 + 51 58 85 0.648356 + 51 58 86 0.000204528 + 51 59 41 0.0262369 + 51 59 42 0.852122 + 51 59 43 1 + 51 59 44 1 + 51 59 45 1 + 51 59 46 1 + 51 59 47 1 + 51 59 48 1 + 51 59 49 1 + 51 59 50 1 + 51 59 51 1 + 51 59 52 1 + 51 59 53 1 + 51 59 54 1 + 51 59 55 1 + 51 59 56 1 + 51 59 57 1 + 51 59 58 1 + 51 59 59 1 + 51 59 60 1 + 51 59 61 1 + 51 59 62 1 + 51 59 63 1 + 51 59 64 1 + 51 59 65 1 + 51 59 66 1 + 51 59 67 1 + 51 59 68 1 + 51 59 69 1 + 51 59 70 1 + 51 59 71 1 + 51 59 72 1 + 51 59 73 1 + 51 59 74 1 + 51 59 75 1 + 51 59 76 1 + 51 59 77 1 + 51 59 78 1 + 51 59 79 1 + 51 59 80 1 + 51 59 81 1 + 51 59 82 1 + 51 59 83 1 + 51 59 84 1 + 51 59 85 0.852122 + 51 59 86 0.0262369 + 51 60 41 0.106397 + 51 60 42 0.954076 + 51 60 43 1 + 51 60 44 1 + 51 60 45 1 + 51 60 46 1 + 51 60 47 1 + 51 60 48 1 + 51 60 49 1 + 51 60 50 1 + 51 60 51 1 + 51 60 52 1 + 51 60 53 1 + 51 60 54 1 + 51 60 55 1 + 51 60 56 1 + 51 60 57 1 + 51 60 58 1 + 51 60 59 1 + 51 60 60 1 + 51 60 61 1 + 51 60 62 1 + 51 60 63 1 + 51 60 64 1 + 51 60 65 1 + 51 60 66 1 + 51 60 67 1 + 51 60 68 1 + 51 60 69 1 + 51 60 70 1 + 51 60 71 1 + 51 60 72 1 + 51 60 73 1 + 51 60 74 1 + 51 60 75 1 + 51 60 76 1 + 51 60 77 1 + 51 60 78 1 + 51 60 79 1 + 51 60 80 1 + 51 60 81 1 + 51 60 82 1 + 51 60 83 1 + 51 60 84 1 + 51 60 85 0.954076 + 51 60 86 0.106397 + 51 61 41 0.203942 + 51 61 42 0.992135 + 51 61 43 1 + 51 61 44 1 + 51 61 45 1 + 51 61 46 1 + 51 61 47 1 + 51 61 48 1 + 51 61 49 1 + 51 61 50 1 + 51 61 51 1 + 51 61 52 1 + 51 61 53 1 + 51 61 54 1 + 51 61 55 1 + 51 61 56 1 + 51 61 57 1 + 51 61 58 1 + 51 61 59 1 + 51 61 60 1 + 51 61 61 1 + 51 61 62 1 + 51 61 63 1 + 51 61 64 1 + 51 61 65 1 + 51 61 66 1 + 51 61 67 1 + 51 61 68 1 + 51 61 69 1 + 51 61 70 1 + 51 61 71 1 + 51 61 72 1 + 51 61 73 1 + 51 61 74 1 + 51 61 75 1 + 51 61 76 1 + 51 61 77 1 + 51 61 78 1 + 51 61 79 1 + 51 61 80 1 + 51 61 81 1 + 51 61 82 1 + 51 61 83 1 + 51 61 84 1 + 51 61 85 0.992135 + 51 61 86 0.203942 + 51 62 41 0.286191 + 51 62 42 0.99983 + 51 62 43 1 + 51 62 44 1 + 51 62 45 1 + 51 62 46 1 + 51 62 47 1 + 51 62 48 1 + 51 62 49 1 + 51 62 50 1 + 51 62 51 1 + 51 62 52 1 + 51 62 53 1 + 51 62 54 1 + 51 62 55 1 + 51 62 56 1 + 51 62 57 1 + 51 62 58 1 + 51 62 59 1 + 51 62 60 1 + 51 62 61 1 + 51 62 62 1 + 51 62 63 1 + 51 62 64 1 + 51 62 65 1 + 51 62 66 1 + 51 62 67 1 + 51 62 68 1 + 51 62 69 1 + 51 62 70 1 + 51 62 71 1 + 51 62 72 1 + 51 62 73 1 + 51 62 74 1 + 51 62 75 1 + 51 62 76 1 + 51 62 77 1 + 51 62 78 1 + 51 62 79 1 + 51 62 80 1 + 51 62 81 1 + 51 62 82 1 + 51 62 83 1 + 51 62 84 1 + 51 62 85 0.99983 + 51 62 86 0.286191 + 51 63 41 0.330857 + 51 63 42 1 + 51 63 43 1 + 51 63 44 1 + 51 63 45 1 + 51 63 46 1 + 51 63 47 1 + 51 63 48 1 + 51 63 49 1 + 51 63 50 1 + 51 63 51 1 + 51 63 52 1 + 51 63 53 1 + 51 63 54 1 + 51 63 55 1 + 51 63 56 1 + 51 63 57 1 + 51 63 58 1 + 51 63 59 1 + 51 63 60 1 + 51 63 61 1 + 51 63 62 1 + 51 63 63 1 + 51 63 64 1 + 51 63 65 1 + 51 63 66 1 + 51 63 67 1 + 51 63 68 1 + 51 63 69 1 + 51 63 70 1 + 51 63 71 1 + 51 63 72 1 + 51 63 73 1 + 51 63 74 1 + 51 63 75 1 + 51 63 76 1 + 51 63 77 1 + 51 63 78 1 + 51 63 79 1 + 51 63 80 1 + 51 63 81 1 + 51 63 82 1 + 51 63 83 1 + 51 63 84 1 + 51 63 85 1 + 51 63 86 0.330857 + 51 64 41 0.330857 + 51 64 42 1 + 51 64 43 1 + 51 64 44 1 + 51 64 45 1 + 51 64 46 1 + 51 64 47 1 + 51 64 48 1 + 51 64 49 1 + 51 64 50 1 + 51 64 51 1 + 51 64 52 1 + 51 64 53 1 + 51 64 54 1 + 51 64 55 1 + 51 64 56 1 + 51 64 57 1 + 51 64 58 1 + 51 64 59 1 + 51 64 60 1 + 51 64 61 1 + 51 64 62 1 + 51 64 63 1 + 51 64 64 1 + 51 64 65 1 + 51 64 66 1 + 51 64 67 1 + 51 64 68 1 + 51 64 69 1 + 51 64 70 1 + 51 64 71 1 + 51 64 72 1 + 51 64 73 1 + 51 64 74 1 + 51 64 75 1 + 51 64 76 1 + 51 64 77 1 + 51 64 78 1 + 51 64 79 1 + 51 64 80 1 + 51 64 81 1 + 51 64 82 1 + 51 64 83 1 + 51 64 84 1 + 51 64 85 1 + 51 64 86 0.330857 + 51 65 41 0.286191 + 51 65 42 0.99983 + 51 65 43 1 + 51 65 44 1 + 51 65 45 1 + 51 65 46 1 + 51 65 47 1 + 51 65 48 1 + 51 65 49 1 + 51 65 50 1 + 51 65 51 1 + 51 65 52 1 + 51 65 53 1 + 51 65 54 1 + 51 65 55 1 + 51 65 56 1 + 51 65 57 1 + 51 65 58 1 + 51 65 59 1 + 51 65 60 1 + 51 65 61 1 + 51 65 62 1 + 51 65 63 1 + 51 65 64 1 + 51 65 65 1 + 51 65 66 1 + 51 65 67 1 + 51 65 68 1 + 51 65 69 1 + 51 65 70 1 + 51 65 71 1 + 51 65 72 1 + 51 65 73 1 + 51 65 74 1 + 51 65 75 1 + 51 65 76 1 + 51 65 77 1 + 51 65 78 1 + 51 65 79 1 + 51 65 80 1 + 51 65 81 1 + 51 65 82 1 + 51 65 83 1 + 51 65 84 1 + 51 65 85 0.99983 + 51 65 86 0.286191 + 51 66 41 0.203942 + 51 66 42 0.992135 + 51 66 43 1 + 51 66 44 1 + 51 66 45 1 + 51 66 46 1 + 51 66 47 1 + 51 66 48 1 + 51 66 49 1 + 51 66 50 1 + 51 66 51 1 + 51 66 52 1 + 51 66 53 1 + 51 66 54 1 + 51 66 55 1 + 51 66 56 1 + 51 66 57 1 + 51 66 58 1 + 51 66 59 1 + 51 66 60 1 + 51 66 61 1 + 51 66 62 1 + 51 66 63 1 + 51 66 64 1 + 51 66 65 1 + 51 66 66 1 + 51 66 67 1 + 51 66 68 1 + 51 66 69 1 + 51 66 70 1 + 51 66 71 1 + 51 66 72 1 + 51 66 73 1 + 51 66 74 1 + 51 66 75 1 + 51 66 76 1 + 51 66 77 1 + 51 66 78 1 + 51 66 79 1 + 51 66 80 1 + 51 66 81 1 + 51 66 82 1 + 51 66 83 1 + 51 66 84 1 + 51 66 85 0.992135 + 51 66 86 0.203942 + 51 67 41 0.106397 + 51 67 42 0.954076 + 51 67 43 1 + 51 67 44 1 + 51 67 45 1 + 51 67 46 1 + 51 67 47 1 + 51 67 48 1 + 51 67 49 1 + 51 67 50 1 + 51 67 51 1 + 51 67 52 1 + 51 67 53 1 + 51 67 54 1 + 51 67 55 1 + 51 67 56 1 + 51 67 57 1 + 51 67 58 1 + 51 67 59 1 + 51 67 60 1 + 51 67 61 1 + 51 67 62 1 + 51 67 63 1 + 51 67 64 1 + 51 67 65 1 + 51 67 66 1 + 51 67 67 1 + 51 67 68 1 + 51 67 69 1 + 51 67 70 1 + 51 67 71 1 + 51 67 72 1 + 51 67 73 1 + 51 67 74 1 + 51 67 75 1 + 51 67 76 1 + 51 67 77 1 + 51 67 78 1 + 51 67 79 1 + 51 67 80 1 + 51 67 81 1 + 51 67 82 1 + 51 67 83 1 + 51 67 84 1 + 51 67 85 0.954076 + 51 67 86 0.106397 + 51 68 41 0.0262369 + 51 68 42 0.852122 + 51 68 43 1 + 51 68 44 1 + 51 68 45 1 + 51 68 46 1 + 51 68 47 1 + 51 68 48 1 + 51 68 49 1 + 51 68 50 1 + 51 68 51 1 + 51 68 52 1 + 51 68 53 1 + 51 68 54 1 + 51 68 55 1 + 51 68 56 1 + 51 68 57 1 + 51 68 58 1 + 51 68 59 1 + 51 68 60 1 + 51 68 61 1 + 51 68 62 1 + 51 68 63 1 + 51 68 64 1 + 51 68 65 1 + 51 68 66 1 + 51 68 67 1 + 51 68 68 1 + 51 68 69 1 + 51 68 70 1 + 51 68 71 1 + 51 68 72 1 + 51 68 73 1 + 51 68 74 1 + 51 68 75 1 + 51 68 76 1 + 51 68 77 1 + 51 68 78 1 + 51 68 79 1 + 51 68 80 1 + 51 68 81 1 + 51 68 82 1 + 51 68 83 1 + 51 68 84 1 + 51 68 85 0.852122 + 51 68 86 0.0262369 + 51 69 41 0.000204528 + 51 69 42 0.648356 + 51 69 43 1 + 51 69 44 1 + 51 69 45 1 + 51 69 46 1 + 51 69 47 1 + 51 69 48 1 + 51 69 49 1 + 51 69 50 1 + 51 69 51 1 + 51 69 52 1 + 51 69 53 1 + 51 69 54 1 + 51 69 55 1 + 51 69 56 1 + 51 69 57 1 + 51 69 58 1 + 51 69 59 1 + 51 69 60 1 + 51 69 61 1 + 51 69 62 1 + 51 69 63 1 + 51 69 64 1 + 51 69 65 1 + 51 69 66 1 + 51 69 67 1 + 51 69 68 1 + 51 69 69 1 + 51 69 70 1 + 51 69 71 1 + 51 69 72 1 + 51 69 73 1 + 51 69 74 1 + 51 69 75 1 + 51 69 76 1 + 51 69 77 1 + 51 69 78 1 + 51 69 79 1 + 51 69 80 1 + 51 69 81 1 + 51 69 82 1 + 51 69 83 1 + 51 69 84 1 + 51 69 85 0.648356 + 51 69 86 0.000204528 + 51 70 42 0.370069 + 51 70 43 0.999467 + 51 70 44 1 + 51 70 45 1 + 51 70 46 1 + 51 70 47 1 + 51 70 48 1 + 51 70 49 1 + 51 70 50 1 + 51 70 51 1 + 51 70 52 1 + 51 70 53 1 + 51 70 54 1 + 51 70 55 1 + 51 70 56 1 + 51 70 57 1 + 51 70 58 1 + 51 70 59 1 + 51 70 60 1 + 51 70 61 1 + 51 70 62 1 + 51 70 63 1 + 51 70 64 1 + 51 70 65 1 + 51 70 66 1 + 51 70 67 1 + 51 70 68 1 + 51 70 69 1 + 51 70 70 1 + 51 70 71 1 + 51 70 72 1 + 51 70 73 1 + 51 70 74 1 + 51 70 75 1 + 51 70 76 1 + 51 70 77 1 + 51 70 78 1 + 51 70 79 1 + 51 70 80 1 + 51 70 81 1 + 51 70 82 1 + 51 70 83 1 + 51 70 84 0.999467 + 51 70 85 0.370069 + 51 71 42 0.104302 + 51 71 43 0.935026 + 51 71 44 1 + 51 71 45 1 + 51 71 46 1 + 51 71 47 1 + 51 71 48 1 + 51 71 49 1 + 51 71 50 1 + 51 71 51 1 + 51 71 52 1 + 51 71 53 1 + 51 71 54 1 + 51 71 55 1 + 51 71 56 1 + 51 71 57 1 + 51 71 58 1 + 51 71 59 1 + 51 71 60 1 + 51 71 61 1 + 51 71 62 1 + 51 71 63 1 + 51 71 64 1 + 51 71 65 1 + 51 71 66 1 + 51 71 67 1 + 51 71 68 1 + 51 71 69 1 + 51 71 70 1 + 51 71 71 1 + 51 71 72 1 + 51 71 73 1 + 51 71 74 1 + 51 71 75 1 + 51 71 76 1 + 51 71 77 1 + 51 71 78 1 + 51 71 79 1 + 51 71 80 1 + 51 71 81 1 + 51 71 82 1 + 51 71 83 1 + 51 71 84 0.935026 + 51 71 85 0.104302 + 51 72 42 0.00260739 + 51 72 43 0.652868 + 51 72 44 1 + 51 72 45 1 + 51 72 46 1 + 51 72 47 1 + 51 72 48 1 + 51 72 49 1 + 51 72 50 1 + 51 72 51 1 + 51 72 52 1 + 51 72 53 1 + 51 72 54 1 + 51 72 55 1 + 51 72 56 1 + 51 72 57 1 + 51 72 58 1 + 51 72 59 1 + 51 72 60 1 + 51 72 61 1 + 51 72 62 1 + 51 72 63 1 + 51 72 64 1 + 51 72 65 1 + 51 72 66 1 + 51 72 67 1 + 51 72 68 1 + 51 72 69 1 + 51 72 70 1 + 51 72 71 1 + 51 72 72 1 + 51 72 73 1 + 51 72 74 1 + 51 72 75 1 + 51 72 76 1 + 51 72 77 1 + 51 72 78 1 + 51 72 79 1 + 51 72 80 1 + 51 72 81 1 + 51 72 82 1 + 51 72 83 1 + 51 72 84 0.652868 + 51 72 85 0.00260739 + 51 73 43 0.23592 + 51 73 44 0.979001 + 51 73 45 1 + 51 73 46 1 + 51 73 47 1 + 51 73 48 1 + 51 73 49 1 + 51 73 50 1 + 51 73 51 1 + 51 73 52 1 + 51 73 53 1 + 51 73 54 1 + 51 73 55 1 + 51 73 56 1 + 51 73 57 1 + 51 73 58 1 + 51 73 59 1 + 51 73 60 1 + 51 73 61 1 + 51 73 62 1 + 51 73 63 1 + 51 73 64 1 + 51 73 65 1 + 51 73 66 1 + 51 73 67 1 + 51 73 68 1 + 51 73 69 1 + 51 73 70 1 + 51 73 71 1 + 51 73 72 1 + 51 73 73 1 + 51 73 74 1 + 51 73 75 1 + 51 73 76 1 + 51 73 77 1 + 51 73 78 1 + 51 73 79 1 + 51 73 80 1 + 51 73 81 1 + 51 73 82 1 + 51 73 83 0.979001 + 51 73 84 0.23592 + 51 74 43 0.0123857 + 51 74 44 0.701471 + 51 74 45 1 + 51 74 46 1 + 51 74 47 1 + 51 74 48 1 + 51 74 49 1 + 51 74 50 1 + 51 74 51 1 + 51 74 52 1 + 51 74 53 1 + 51 74 54 1 + 51 74 55 1 + 51 74 56 1 + 51 74 57 1 + 51 74 58 1 + 51 74 59 1 + 51 74 60 1 + 51 74 61 1 + 51 74 62 1 + 51 74 63 1 + 51 74 64 1 + 51 74 65 1 + 51 74 66 1 + 51 74 67 1 + 51 74 68 1 + 51 74 69 1 + 51 74 70 1 + 51 74 71 1 + 51 74 72 1 + 51 74 73 1 + 51 74 74 1 + 51 74 75 1 + 51 74 76 1 + 51 74 77 1 + 51 74 78 1 + 51 74 79 1 + 51 74 80 1 + 51 74 81 1 + 51 74 82 1 + 51 74 83 0.701471 + 51 74 84 0.0123857 + 51 75 44 0.194777 + 51 75 45 0.952748 + 51 75 46 1 + 51 75 47 1 + 51 75 48 1 + 51 75 49 1 + 51 75 50 1 + 51 75 51 1 + 51 75 52 1 + 51 75 53 1 + 51 75 54 1 + 51 75 55 1 + 51 75 56 1 + 51 75 57 1 + 51 75 58 1 + 51 75 59 1 + 51 75 60 1 + 51 75 61 1 + 51 75 62 1 + 51 75 63 1 + 51 75 64 1 + 51 75 65 1 + 51 75 66 1 + 51 75 67 1 + 51 75 68 1 + 51 75 69 1 + 51 75 70 1 + 51 75 71 1 + 51 75 72 1 + 51 75 73 1 + 51 75 74 1 + 51 75 75 1 + 51 75 76 1 + 51 75 77 1 + 51 75 78 1 + 51 75 79 1 + 51 75 80 1 + 51 75 81 1 + 51 75 82 0.952748 + 51 75 83 0.194777 + 51 76 44 0.00193335 + 51 76 45 0.51002 + 51 76 46 0.99797 + 51 76 47 1 + 51 76 48 1 + 51 76 49 1 + 51 76 50 1 + 51 76 51 1 + 51 76 52 1 + 51 76 53 1 + 51 76 54 1 + 51 76 55 1 + 51 76 56 1 + 51 76 57 1 + 51 76 58 1 + 51 76 59 1 + 51 76 60 1 + 51 76 61 1 + 51 76 62 1 + 51 76 63 1 + 51 76 64 1 + 51 76 65 1 + 51 76 66 1 + 51 76 67 1 + 51 76 68 1 + 51 76 69 1 + 51 76 70 1 + 51 76 71 1 + 51 76 72 1 + 51 76 73 1 + 51 76 74 1 + 51 76 75 1 + 51 76 76 1 + 51 76 77 1 + 51 76 78 1 + 51 76 79 1 + 51 76 80 1 + 51 76 81 0.99797 + 51 76 82 0.51002 + 51 76 83 0.00193335 + 51 77 45 0.0443033 + 51 77 46 0.749071 + 51 77 47 1 + 51 77 48 1 + 51 77 49 1 + 51 77 50 1 + 51 77 51 1 + 51 77 52 1 + 51 77 53 1 + 51 77 54 1 + 51 77 55 1 + 51 77 56 1 + 51 77 57 1 + 51 77 58 1 + 51 77 59 1 + 51 77 60 1 + 51 77 61 1 + 51 77 62 1 + 51 77 63 1 + 51 77 64 1 + 51 77 65 1 + 51 77 66 1 + 51 77 67 1 + 51 77 68 1 + 51 77 69 1 + 51 77 70 1 + 51 77 71 1 + 51 77 72 1 + 51 77 73 1 + 51 77 74 1 + 51 77 75 1 + 51 77 76 1 + 51 77 77 1 + 51 77 78 1 + 51 77 79 1 + 51 77 80 1 + 51 77 81 0.749071 + 51 77 82 0.0443033 + 51 78 46 0.127131 + 51 78 47 0.860729 + 51 78 48 1 + 51 78 49 1 + 51 78 50 1 + 51 78 51 1 + 51 78 52 1 + 51 78 53 1 + 51 78 54 1 + 51 78 55 1 + 51 78 56 1 + 51 78 57 1 + 51 78 58 1 + 51 78 59 1 + 51 78 60 1 + 51 78 61 1 + 51 78 62 1 + 51 78 63 1 + 51 78 64 1 + 51 78 65 1 + 51 78 66 1 + 51 78 67 1 + 51 78 68 1 + 51 78 69 1 + 51 78 70 1 + 51 78 71 1 + 51 78 72 1 + 51 78 73 1 + 51 78 74 1 + 51 78 75 1 + 51 78 76 1 + 51 78 77 1 + 51 78 78 1 + 51 78 79 1 + 51 78 80 0.860729 + 51 78 81 0.127131 + 51 79 47 0.190365 + 51 79 48 0.889603 + 51 79 49 1 + 51 79 50 1 + 51 79 51 1 + 51 79 52 1 + 51 79 53 1 + 51 79 54 1 + 51 79 55 1 + 51 79 56 1 + 51 79 57 1 + 51 79 58 1 + 51 79 59 1 + 51 79 60 1 + 51 79 61 1 + 51 79 62 1 + 51 79 63 1 + 51 79 64 1 + 51 79 65 1 + 51 79 66 1 + 51 79 67 1 + 51 79 68 1 + 51 79 69 1 + 51 79 70 1 + 51 79 71 1 + 51 79 72 1 + 51 79 73 1 + 51 79 74 1 + 51 79 75 1 + 51 79 76 1 + 51 79 77 1 + 51 79 78 1 + 51 79 79 0.889603 + 51 79 80 0.190365 + 51 80 48 0.190365 + 51 80 49 0.860729 + 51 80 50 1 + 51 80 51 1 + 51 80 52 1 + 51 80 53 1 + 51 80 54 1 + 51 80 55 1 + 51 80 56 1 + 51 80 57 1 + 51 80 58 1 + 51 80 59 1 + 51 80 60 1 + 51 80 61 1 + 51 80 62 1 + 51 80 63 1 + 51 80 64 1 + 51 80 65 1 + 51 80 66 1 + 51 80 67 1 + 51 80 68 1 + 51 80 69 1 + 51 80 70 1 + 51 80 71 1 + 51 80 72 1 + 51 80 73 1 + 51 80 74 1 + 51 80 75 1 + 51 80 76 1 + 51 80 77 1 + 51 80 78 0.860729 + 51 80 79 0.190365 + 51 81 49 0.127131 + 51 81 50 0.749071 + 51 81 51 0.99797 + 51 81 52 1 + 51 81 53 1 + 51 81 54 1 + 51 81 55 1 + 51 81 56 1 + 51 81 57 1 + 51 81 58 1 + 51 81 59 1 + 51 81 60 1 + 51 81 61 1 + 51 81 62 1 + 51 81 63 1 + 51 81 64 1 + 51 81 65 1 + 51 81 66 1 + 51 81 67 1 + 51 81 68 1 + 51 81 69 1 + 51 81 70 1 + 51 81 71 1 + 51 81 72 1 + 51 81 73 1 + 51 81 74 1 + 51 81 75 1 + 51 81 76 0.99797 + 51 81 77 0.749071 + 51 81 78 0.127131 + 51 82 50 0.0443033 + 51 82 51 0.51002 + 51 82 52 0.952748 + 51 82 53 1 + 51 82 54 1 + 51 82 55 1 + 51 82 56 1 + 51 82 57 1 + 51 82 58 1 + 51 82 59 1 + 51 82 60 1 + 51 82 61 1 + 51 82 62 1 + 51 82 63 1 + 51 82 64 1 + 51 82 65 1 + 51 82 66 1 + 51 82 67 1 + 51 82 68 1 + 51 82 69 1 + 51 82 70 1 + 51 82 71 1 + 51 82 72 1 + 51 82 73 1 + 51 82 74 1 + 51 82 75 0.952748 + 51 82 76 0.51002 + 51 82 77 0.0443033 + 51 83 51 0.00193335 + 51 83 52 0.194777 + 51 83 53 0.701471 + 51 83 54 0.979001 + 51 83 55 1 + 51 83 56 1 + 51 83 57 1 + 51 83 58 1 + 51 83 59 1 + 51 83 60 1 + 51 83 61 1 + 51 83 62 1 + 51 83 63 1 + 51 83 64 1 + 51 83 65 1 + 51 83 66 1 + 51 83 67 1 + 51 83 68 1 + 51 83 69 1 + 51 83 70 1 + 51 83 71 1 + 51 83 72 1 + 51 83 73 0.979001 + 51 83 74 0.701471 + 51 83 75 0.194777 + 51 83 76 0.00193335 + 51 84 53 0.0123857 + 51 84 54 0.23592 + 51 84 55 0.652868 + 51 84 56 0.935026 + 51 84 57 0.999467 + 51 84 58 1 + 51 84 59 1 + 51 84 60 1 + 51 84 61 1 + 51 84 62 1 + 51 84 63 1 + 51 84 64 1 + 51 84 65 1 + 51 84 66 1 + 51 84 67 1 + 51 84 68 1 + 51 84 69 1 + 51 84 70 0.999467 + 51 84 71 0.935026 + 51 84 72 0.652868 + 51 84 73 0.23592 + 51 84 74 0.0123857 + 51 85 55 0.00260739 + 51 85 56 0.104302 + 51 85 57 0.370069 + 51 85 58 0.648356 + 51 85 59 0.852122 + 51 85 60 0.954076 + 51 85 61 0.992135 + 51 85 62 0.99983 + 51 85 63 1 + 51 85 64 1 + 51 85 65 0.99983 + 51 85 66 0.992135 + 51 85 67 0.954076 + 51 85 68 0.852122 + 51 85 69 0.648356 + 51 85 70 0.370069 + 51 85 71 0.104302 + 51 85 72 0.00260739 + 51 86 58 0.000204528 + 51 86 59 0.0262369 + 51 86 60 0.106397 + 51 86 61 0.203942 + 51 86 62 0.286191 + 51 86 63 0.330857 + 51 86 64 0.330857 + 51 86 65 0.286191 + 51 86 66 0.203942 + 51 86 67 0.106397 + 51 86 68 0.0262369 + 51 86 69 0.000204528 + 52 40 61 9.9388e-05 + 52 40 62 0.00487084 + 52 40 63 0.012422 + 52 40 64 0.012422 + 52 40 65 0.00487084 + 52 40 66 9.9388e-05 + 52 41 56 3.07754e-05 + 52 41 57 0.0398206 + 52 41 58 0.204921 + 52 41 59 0.42026 + 52 41 60 0.598003 + 52 41 61 0.730298 + 52 41 62 0.813363 + 52 41 63 0.849603 + 52 41 64 0.849603 + 52 41 65 0.813363 + 52 41 66 0.730298 + 52 41 67 0.598003 + 52 41 68 0.42026 + 52 41 69 0.204921 + 52 41 70 0.0398206 + 52 41 71 3.07754e-05 + 52 42 54 0.0182812 + 52 42 55 0.240042 + 52 42 56 0.602276 + 52 42 57 0.884209 + 52 42 58 0.991156 + 52 42 59 1 + 52 42 60 1 + 52 42 61 1 + 52 42 62 1 + 52 42 63 1 + 52 42 64 1 + 52 42 65 1 + 52 42 66 1 + 52 42 67 1 + 52 42 68 1 + 52 42 69 0.991156 + 52 42 70 0.884209 + 52 42 71 0.602276 + 52 42 72 0.240042 + 52 42 73 0.0182812 + 52 43 52 0.0199 + 52 43 53 0.320873 + 52 43 54 0.78197 + 52 43 55 0.988606 + 52 43 56 1 + 52 43 57 1 + 52 43 58 1 + 52 43 59 1 + 52 43 60 1 + 52 43 61 1 + 52 43 62 1 + 52 43 63 1 + 52 43 64 1 + 52 43 65 1 + 52 43 66 1 + 52 43 67 1 + 52 43 68 1 + 52 43 69 1 + 52 43 70 1 + 52 43 71 1 + 52 43 72 0.988606 + 52 43 73 0.78197 + 52 43 74 0.320873 + 52 43 75 0.0199 + 52 44 50 0.00062971 + 52 44 51 0.194777 + 52 44 52 0.744636 + 52 44 53 0.992776 + 52 44 54 1 + 52 44 55 1 + 52 44 56 1 + 52 44 57 1 + 52 44 58 1 + 52 44 59 1 + 52 44 60 1 + 52 44 61 1 + 52 44 62 1 + 52 44 63 1 + 52 44 64 1 + 52 44 65 1 + 52 44 66 1 + 52 44 67 1 + 52 44 68 1 + 52 44 69 1 + 52 44 70 1 + 52 44 71 1 + 52 44 72 1 + 52 44 73 1 + 52 44 74 0.992776 + 52 44 75 0.744636 + 52 44 76 0.194777 + 52 44 77 0.00062971 + 52 45 49 0.0216196 + 52 45 50 0.459682 + 52 45 51 0.952748 + 52 45 52 1 + 52 45 53 1 + 52 45 54 1 + 52 45 55 1 + 52 45 56 1 + 52 45 57 1 + 52 45 58 1 + 52 45 59 1 + 52 45 60 1 + 52 45 61 1 + 52 45 62 1 + 52 45 63 1 + 52 45 64 1 + 52 45 65 1 + 52 45 66 1 + 52 45 67 1 + 52 45 68 1 + 52 45 69 1 + 52 45 70 1 + 52 45 71 1 + 52 45 72 1 + 52 45 73 1 + 52 45 74 1 + 52 45 75 1 + 52 45 76 0.952748 + 52 45 77 0.459682 + 52 45 78 0.0216196 + 52 46 48 0.0602217 + 52 46 49 0.659059 + 52 46 50 0.995483 + 52 46 51 1 + 52 46 52 1 + 52 46 53 1 + 52 46 54 1 + 52 46 55 1 + 52 46 56 1 + 52 46 57 1 + 52 46 58 1 + 52 46 59 1 + 52 46 60 1 + 52 46 61 1 + 52 46 62 1 + 52 46 63 1 + 52 46 64 1 + 52 46 65 1 + 52 46 66 1 + 52 46 67 1 + 52 46 68 1 + 52 46 69 1 + 52 46 70 1 + 52 46 71 1 + 52 46 72 1 + 52 46 73 1 + 52 46 74 1 + 52 46 75 1 + 52 46 76 1 + 52 46 77 0.995483 + 52 46 78 0.659059 + 52 46 79 0.0602217 + 52 47 47 0.0791732 + 52 47 48 0.749996 + 52 47 49 0.999874 + 52 47 50 1 + 52 47 51 1 + 52 47 52 1 + 52 47 53 1 + 52 47 54 1 + 52 47 55 1 + 52 47 56 1 + 52 47 57 1 + 52 47 58 1 + 52 47 59 1 + 52 47 60 1 + 52 47 61 1 + 52 47 62 1 + 52 47 63 1 + 52 47 64 1 + 52 47 65 1 + 52 47 66 1 + 52 47 67 1 + 52 47 68 1 + 52 47 69 1 + 52 47 70 1 + 52 47 71 1 + 52 47 72 1 + 52 47 73 1 + 52 47 74 1 + 52 47 75 1 + 52 47 76 1 + 52 47 77 1 + 52 47 78 0.999874 + 52 47 79 0.749996 + 52 47 80 0.0791732 + 52 48 46 0.0602217 + 52 48 47 0.749996 + 52 48 48 0.999998 + 52 48 49 1 + 52 48 50 1 + 52 48 51 1 + 52 48 52 1 + 52 48 53 1 + 52 48 54 1 + 52 48 55 1 + 52 48 56 1 + 52 48 57 1 + 52 48 58 1 + 52 48 59 1 + 52 48 60 1 + 52 48 61 1 + 52 48 62 1 + 52 48 63 1 + 52 48 64 1 + 52 48 65 1 + 52 48 66 1 + 52 48 67 1 + 52 48 68 1 + 52 48 69 1 + 52 48 70 1 + 52 48 71 1 + 52 48 72 1 + 52 48 73 1 + 52 48 74 1 + 52 48 75 1 + 52 48 76 1 + 52 48 77 1 + 52 48 78 1 + 52 48 79 0.999998 + 52 48 80 0.749996 + 52 48 81 0.0602217 + 52 49 45 0.0216196 + 52 49 46 0.659059 + 52 49 47 0.999874 + 52 49 48 1 + 52 49 49 1 + 52 49 50 1 + 52 49 51 1 + 52 49 52 1 + 52 49 53 1 + 52 49 54 1 + 52 49 55 1 + 52 49 56 1 + 52 49 57 1 + 52 49 58 1 + 52 49 59 1 + 52 49 60 1 + 52 49 61 1 + 52 49 62 1 + 52 49 63 1 + 52 49 64 1 + 52 49 65 1 + 52 49 66 1 + 52 49 67 1 + 52 49 68 1 + 52 49 69 1 + 52 49 70 1 + 52 49 71 1 + 52 49 72 1 + 52 49 73 1 + 52 49 74 1 + 52 49 75 1 + 52 49 76 1 + 52 49 77 1 + 52 49 78 1 + 52 49 79 1 + 52 49 80 0.999874 + 52 49 81 0.659059 + 52 49 82 0.0216196 + 52 50 44 0.00062971 + 52 50 45 0.459682 + 52 50 46 0.995483 + 52 50 47 1 + 52 50 48 1 + 52 50 49 1 + 52 50 50 1 + 52 50 51 1 + 52 50 52 1 + 52 50 53 1 + 52 50 54 1 + 52 50 55 1 + 52 50 56 1 + 52 50 57 1 + 52 50 58 1 + 52 50 59 1 + 52 50 60 1 + 52 50 61 1 + 52 50 62 1 + 52 50 63 1 + 52 50 64 1 + 52 50 65 1 + 52 50 66 1 + 52 50 67 1 + 52 50 68 1 + 52 50 69 1 + 52 50 70 1 + 52 50 71 1 + 52 50 72 1 + 52 50 73 1 + 52 50 74 1 + 52 50 75 1 + 52 50 76 1 + 52 50 77 1 + 52 50 78 1 + 52 50 79 1 + 52 50 80 1 + 52 50 81 0.995483 + 52 50 82 0.459682 + 52 50 83 0.00062971 + 52 51 44 0.194777 + 52 51 45 0.952748 + 52 51 46 1 + 52 51 47 1 + 52 51 48 1 + 52 51 49 1 + 52 51 50 1 + 52 51 51 1 + 52 51 52 1 + 52 51 53 1 + 52 51 54 1 + 52 51 55 1 + 52 51 56 1 + 52 51 57 1 + 52 51 58 1 + 52 51 59 1 + 52 51 60 1 + 52 51 61 1 + 52 51 62 1 + 52 51 63 1 + 52 51 64 1 + 52 51 65 1 + 52 51 66 1 + 52 51 67 1 + 52 51 68 1 + 52 51 69 1 + 52 51 70 1 + 52 51 71 1 + 52 51 72 1 + 52 51 73 1 + 52 51 74 1 + 52 51 75 1 + 52 51 76 1 + 52 51 77 1 + 52 51 78 1 + 52 51 79 1 + 52 51 80 1 + 52 51 81 1 + 52 51 82 0.952748 + 52 51 83 0.194777 + 52 52 43 0.0199 + 52 52 44 0.744636 + 52 52 45 1 + 52 52 46 1 + 52 52 47 1 + 52 52 48 1 + 52 52 49 1 + 52 52 50 1 + 52 52 51 1 + 52 52 52 1 + 52 52 53 1 + 52 52 54 1 + 52 52 55 1 + 52 52 56 1 + 52 52 57 1 + 52 52 58 1 + 52 52 59 1 + 52 52 60 1 + 52 52 61 1 + 52 52 62 1 + 52 52 63 1 + 52 52 64 1 + 52 52 65 1 + 52 52 66 1 + 52 52 67 1 + 52 52 68 1 + 52 52 69 1 + 52 52 70 1 + 52 52 71 1 + 52 52 72 1 + 52 52 73 1 + 52 52 74 1 + 52 52 75 1 + 52 52 76 1 + 52 52 77 1 + 52 52 78 1 + 52 52 79 1 + 52 52 80 1 + 52 52 81 1 + 52 52 82 1 + 52 52 83 0.744636 + 52 52 84 0.0199 + 52 53 43 0.320873 + 52 53 44 0.992776 + 52 53 45 1 + 52 53 46 1 + 52 53 47 1 + 52 53 48 1 + 52 53 49 1 + 52 53 50 1 + 52 53 51 1 + 52 53 52 1 + 52 53 53 1 + 52 53 54 1 + 52 53 55 1 + 52 53 56 1 + 52 53 57 1 + 52 53 58 1 + 52 53 59 1 + 52 53 60 1 + 52 53 61 1 + 52 53 62 1 + 52 53 63 1 + 52 53 64 1 + 52 53 65 1 + 52 53 66 1 + 52 53 67 1 + 52 53 68 1 + 52 53 69 1 + 52 53 70 1 + 52 53 71 1 + 52 53 72 1 + 52 53 73 1 + 52 53 74 1 + 52 53 75 1 + 52 53 76 1 + 52 53 77 1 + 52 53 78 1 + 52 53 79 1 + 52 53 80 1 + 52 53 81 1 + 52 53 82 1 + 52 53 83 0.992776 + 52 53 84 0.320873 + 52 54 42 0.0182812 + 52 54 43 0.78197 + 52 54 44 1 + 52 54 45 1 + 52 54 46 1 + 52 54 47 1 + 52 54 48 1 + 52 54 49 1 + 52 54 50 1 + 52 54 51 1 + 52 54 52 1 + 52 54 53 1 + 52 54 54 1 + 52 54 55 1 + 52 54 56 1 + 52 54 57 1 + 52 54 58 1 + 52 54 59 1 + 52 54 60 1 + 52 54 61 1 + 52 54 62 1 + 52 54 63 1 + 52 54 64 1 + 52 54 65 1 + 52 54 66 1 + 52 54 67 1 + 52 54 68 1 + 52 54 69 1 + 52 54 70 1 + 52 54 71 1 + 52 54 72 1 + 52 54 73 1 + 52 54 74 1 + 52 54 75 1 + 52 54 76 1 + 52 54 77 1 + 52 54 78 1 + 52 54 79 1 + 52 54 80 1 + 52 54 81 1 + 52 54 82 1 + 52 54 83 1 + 52 54 84 0.78197 + 52 54 85 0.0182812 + 52 55 42 0.240042 + 52 55 43 0.988606 + 52 55 44 1 + 52 55 45 1 + 52 55 46 1 + 52 55 47 1 + 52 55 48 1 + 52 55 49 1 + 52 55 50 1 + 52 55 51 1 + 52 55 52 1 + 52 55 53 1 + 52 55 54 1 + 52 55 55 1 + 52 55 56 1 + 52 55 57 1 + 52 55 58 1 + 52 55 59 1 + 52 55 60 1 + 52 55 61 1 + 52 55 62 1 + 52 55 63 1 + 52 55 64 1 + 52 55 65 1 + 52 55 66 1 + 52 55 67 1 + 52 55 68 1 + 52 55 69 1 + 52 55 70 1 + 52 55 71 1 + 52 55 72 1 + 52 55 73 1 + 52 55 74 1 + 52 55 75 1 + 52 55 76 1 + 52 55 77 1 + 52 55 78 1 + 52 55 79 1 + 52 55 80 1 + 52 55 81 1 + 52 55 82 1 + 52 55 83 1 + 52 55 84 0.988606 + 52 55 85 0.240042 + 52 56 41 3.07754e-05 + 52 56 42 0.602276 + 52 56 43 1 + 52 56 44 1 + 52 56 45 1 + 52 56 46 1 + 52 56 47 1 + 52 56 48 1 + 52 56 49 1 + 52 56 50 1 + 52 56 51 1 + 52 56 52 1 + 52 56 53 1 + 52 56 54 1 + 52 56 55 1 + 52 56 56 1 + 52 56 57 1 + 52 56 58 1 + 52 56 59 1 + 52 56 60 1 + 52 56 61 1 + 52 56 62 1 + 52 56 63 1 + 52 56 64 1 + 52 56 65 1 + 52 56 66 1 + 52 56 67 1 + 52 56 68 1 + 52 56 69 1 + 52 56 70 1 + 52 56 71 1 + 52 56 72 1 + 52 56 73 1 + 52 56 74 1 + 52 56 75 1 + 52 56 76 1 + 52 56 77 1 + 52 56 78 1 + 52 56 79 1 + 52 56 80 1 + 52 56 81 1 + 52 56 82 1 + 52 56 83 1 + 52 56 84 1 + 52 56 85 0.602276 + 52 56 86 3.07754e-05 + 52 57 41 0.0398206 + 52 57 42 0.884209 + 52 57 43 1 + 52 57 44 1 + 52 57 45 1 + 52 57 46 1 + 52 57 47 1 + 52 57 48 1 + 52 57 49 1 + 52 57 50 1 + 52 57 51 1 + 52 57 52 1 + 52 57 53 1 + 52 57 54 1 + 52 57 55 1 + 52 57 56 1 + 52 57 57 1 + 52 57 58 1 + 52 57 59 1 + 52 57 60 1 + 52 57 61 1 + 52 57 62 1 + 52 57 63 1 + 52 57 64 1 + 52 57 65 1 + 52 57 66 1 + 52 57 67 1 + 52 57 68 1 + 52 57 69 1 + 52 57 70 1 + 52 57 71 1 + 52 57 72 1 + 52 57 73 1 + 52 57 74 1 + 52 57 75 1 + 52 57 76 1 + 52 57 77 1 + 52 57 78 1 + 52 57 79 1 + 52 57 80 1 + 52 57 81 1 + 52 57 82 1 + 52 57 83 1 + 52 57 84 1 + 52 57 85 0.884209 + 52 57 86 0.0398206 + 52 58 41 0.204921 + 52 58 42 0.991156 + 52 58 43 1 + 52 58 44 1 + 52 58 45 1 + 52 58 46 1 + 52 58 47 1 + 52 58 48 1 + 52 58 49 1 + 52 58 50 1 + 52 58 51 1 + 52 58 52 1 + 52 58 53 1 + 52 58 54 1 + 52 58 55 1 + 52 58 56 1 + 52 58 57 1 + 52 58 58 1 + 52 58 59 1 + 52 58 60 1 + 52 58 61 1 + 52 58 62 1 + 52 58 63 1 + 52 58 64 1 + 52 58 65 1 + 52 58 66 1 + 52 58 67 1 + 52 58 68 1 + 52 58 69 1 + 52 58 70 1 + 52 58 71 1 + 52 58 72 1 + 52 58 73 1 + 52 58 74 1 + 52 58 75 1 + 52 58 76 1 + 52 58 77 1 + 52 58 78 1 + 52 58 79 1 + 52 58 80 1 + 52 58 81 1 + 52 58 82 1 + 52 58 83 1 + 52 58 84 1 + 52 58 85 0.991156 + 52 58 86 0.204921 + 52 59 41 0.42026 + 52 59 42 1 + 52 59 43 1 + 52 59 44 1 + 52 59 45 1 + 52 59 46 1 + 52 59 47 1 + 52 59 48 1 + 52 59 49 1 + 52 59 50 1 + 52 59 51 1 + 52 59 52 1 + 52 59 53 1 + 52 59 54 1 + 52 59 55 1 + 52 59 56 1 + 52 59 57 1 + 52 59 58 1 + 52 59 59 1 + 52 59 60 1 + 52 59 61 1 + 52 59 62 1 + 52 59 63 1 + 52 59 64 1 + 52 59 65 1 + 52 59 66 1 + 52 59 67 1 + 52 59 68 1 + 52 59 69 1 + 52 59 70 1 + 52 59 71 1 + 52 59 72 1 + 52 59 73 1 + 52 59 74 1 + 52 59 75 1 + 52 59 76 1 + 52 59 77 1 + 52 59 78 1 + 52 59 79 1 + 52 59 80 1 + 52 59 81 1 + 52 59 82 1 + 52 59 83 1 + 52 59 84 1 + 52 59 85 1 + 52 59 86 0.42026 + 52 60 41 0.598003 + 52 60 42 1 + 52 60 43 1 + 52 60 44 1 + 52 60 45 1 + 52 60 46 1 + 52 60 47 1 + 52 60 48 1 + 52 60 49 1 + 52 60 50 1 + 52 60 51 1 + 52 60 52 1 + 52 60 53 1 + 52 60 54 1 + 52 60 55 1 + 52 60 56 1 + 52 60 57 1 + 52 60 58 1 + 52 60 59 1 + 52 60 60 1 + 52 60 61 1 + 52 60 62 1 + 52 60 63 1 + 52 60 64 1 + 52 60 65 1 + 52 60 66 1 + 52 60 67 1 + 52 60 68 1 + 52 60 69 1 + 52 60 70 1 + 52 60 71 1 + 52 60 72 1 + 52 60 73 1 + 52 60 74 1 + 52 60 75 1 + 52 60 76 1 + 52 60 77 1 + 52 60 78 1 + 52 60 79 1 + 52 60 80 1 + 52 60 81 1 + 52 60 82 1 + 52 60 83 1 + 52 60 84 1 + 52 60 85 1 + 52 60 86 0.598003 + 52 61 40 9.9388e-05 + 52 61 41 0.730298 + 52 61 42 1 + 52 61 43 1 + 52 61 44 1 + 52 61 45 1 + 52 61 46 1 + 52 61 47 1 + 52 61 48 1 + 52 61 49 1 + 52 61 50 1 + 52 61 51 1 + 52 61 52 1 + 52 61 53 1 + 52 61 54 1 + 52 61 55 1 + 52 61 56 1 + 52 61 57 1 + 52 61 58 1 + 52 61 59 1 + 52 61 60 1 + 52 61 61 1 + 52 61 62 1 + 52 61 63 1 + 52 61 64 1 + 52 61 65 1 + 52 61 66 1 + 52 61 67 1 + 52 61 68 1 + 52 61 69 1 + 52 61 70 1 + 52 61 71 1 + 52 61 72 1 + 52 61 73 1 + 52 61 74 1 + 52 61 75 1 + 52 61 76 1 + 52 61 77 1 + 52 61 78 1 + 52 61 79 1 + 52 61 80 1 + 52 61 81 1 + 52 61 82 1 + 52 61 83 1 + 52 61 84 1 + 52 61 85 1 + 52 61 86 0.730298 + 52 61 87 9.9388e-05 + 52 62 40 0.00487084 + 52 62 41 0.813363 + 52 62 42 1 + 52 62 43 1 + 52 62 44 1 + 52 62 45 1 + 52 62 46 1 + 52 62 47 1 + 52 62 48 1 + 52 62 49 1 + 52 62 50 1 + 52 62 51 1 + 52 62 52 1 + 52 62 53 1 + 52 62 54 1 + 52 62 55 1 + 52 62 56 1 + 52 62 57 1 + 52 62 58 1 + 52 62 59 1 + 52 62 60 1 + 52 62 61 1 + 52 62 62 1 + 52 62 63 1 + 52 62 64 1 + 52 62 65 1 + 52 62 66 1 + 52 62 67 1 + 52 62 68 1 + 52 62 69 1 + 52 62 70 1 + 52 62 71 1 + 52 62 72 1 + 52 62 73 1 + 52 62 74 1 + 52 62 75 1 + 52 62 76 1 + 52 62 77 1 + 52 62 78 1 + 52 62 79 1 + 52 62 80 1 + 52 62 81 1 + 52 62 82 1 + 52 62 83 1 + 52 62 84 1 + 52 62 85 1 + 52 62 86 0.813363 + 52 62 87 0.00487084 + 52 63 40 0.012422 + 52 63 41 0.849603 + 52 63 42 1 + 52 63 43 1 + 52 63 44 1 + 52 63 45 1 + 52 63 46 1 + 52 63 47 1 + 52 63 48 1 + 52 63 49 1 + 52 63 50 1 + 52 63 51 1 + 52 63 52 1 + 52 63 53 1 + 52 63 54 1 + 52 63 55 1 + 52 63 56 1 + 52 63 57 1 + 52 63 58 1 + 52 63 59 1 + 52 63 60 1 + 52 63 61 1 + 52 63 62 1 + 52 63 63 1 + 52 63 64 1 + 52 63 65 1 + 52 63 66 1 + 52 63 67 1 + 52 63 68 1 + 52 63 69 1 + 52 63 70 1 + 52 63 71 1 + 52 63 72 1 + 52 63 73 1 + 52 63 74 1 + 52 63 75 1 + 52 63 76 1 + 52 63 77 1 + 52 63 78 1 + 52 63 79 1 + 52 63 80 1 + 52 63 81 1 + 52 63 82 1 + 52 63 83 1 + 52 63 84 1 + 52 63 85 1 + 52 63 86 0.849603 + 52 63 87 0.012422 + 52 64 40 0.012422 + 52 64 41 0.849603 + 52 64 42 1 + 52 64 43 1 + 52 64 44 1 + 52 64 45 1 + 52 64 46 1 + 52 64 47 1 + 52 64 48 1 + 52 64 49 1 + 52 64 50 1 + 52 64 51 1 + 52 64 52 1 + 52 64 53 1 + 52 64 54 1 + 52 64 55 1 + 52 64 56 1 + 52 64 57 1 + 52 64 58 1 + 52 64 59 1 + 52 64 60 1 + 52 64 61 1 + 52 64 62 1 + 52 64 63 1 + 52 64 64 1 + 52 64 65 1 + 52 64 66 1 + 52 64 67 1 + 52 64 68 1 + 52 64 69 1 + 52 64 70 1 + 52 64 71 1 + 52 64 72 1 + 52 64 73 1 + 52 64 74 1 + 52 64 75 1 + 52 64 76 1 + 52 64 77 1 + 52 64 78 1 + 52 64 79 1 + 52 64 80 1 + 52 64 81 1 + 52 64 82 1 + 52 64 83 1 + 52 64 84 1 + 52 64 85 1 + 52 64 86 0.849603 + 52 64 87 0.012422 + 52 65 40 0.00487084 + 52 65 41 0.813363 + 52 65 42 1 + 52 65 43 1 + 52 65 44 1 + 52 65 45 1 + 52 65 46 1 + 52 65 47 1 + 52 65 48 1 + 52 65 49 1 + 52 65 50 1 + 52 65 51 1 + 52 65 52 1 + 52 65 53 1 + 52 65 54 1 + 52 65 55 1 + 52 65 56 1 + 52 65 57 1 + 52 65 58 1 + 52 65 59 1 + 52 65 60 1 + 52 65 61 1 + 52 65 62 1 + 52 65 63 1 + 52 65 64 1 + 52 65 65 1 + 52 65 66 1 + 52 65 67 1 + 52 65 68 1 + 52 65 69 1 + 52 65 70 1 + 52 65 71 1 + 52 65 72 1 + 52 65 73 1 + 52 65 74 1 + 52 65 75 1 + 52 65 76 1 + 52 65 77 1 + 52 65 78 1 + 52 65 79 1 + 52 65 80 1 + 52 65 81 1 + 52 65 82 1 + 52 65 83 1 + 52 65 84 1 + 52 65 85 1 + 52 65 86 0.813363 + 52 65 87 0.00487084 + 52 66 40 9.9388e-05 + 52 66 41 0.730298 + 52 66 42 1 + 52 66 43 1 + 52 66 44 1 + 52 66 45 1 + 52 66 46 1 + 52 66 47 1 + 52 66 48 1 + 52 66 49 1 + 52 66 50 1 + 52 66 51 1 + 52 66 52 1 + 52 66 53 1 + 52 66 54 1 + 52 66 55 1 + 52 66 56 1 + 52 66 57 1 + 52 66 58 1 + 52 66 59 1 + 52 66 60 1 + 52 66 61 1 + 52 66 62 1 + 52 66 63 1 + 52 66 64 1 + 52 66 65 1 + 52 66 66 1 + 52 66 67 1 + 52 66 68 1 + 52 66 69 1 + 52 66 70 1 + 52 66 71 1 + 52 66 72 1 + 52 66 73 1 + 52 66 74 1 + 52 66 75 1 + 52 66 76 1 + 52 66 77 1 + 52 66 78 1 + 52 66 79 1 + 52 66 80 1 + 52 66 81 1 + 52 66 82 1 + 52 66 83 1 + 52 66 84 1 + 52 66 85 1 + 52 66 86 0.730298 + 52 66 87 9.9388e-05 + 52 67 41 0.598003 + 52 67 42 1 + 52 67 43 1 + 52 67 44 1 + 52 67 45 1 + 52 67 46 1 + 52 67 47 1 + 52 67 48 1 + 52 67 49 1 + 52 67 50 1 + 52 67 51 1 + 52 67 52 1 + 52 67 53 1 + 52 67 54 1 + 52 67 55 1 + 52 67 56 1 + 52 67 57 1 + 52 67 58 1 + 52 67 59 1 + 52 67 60 1 + 52 67 61 1 + 52 67 62 1 + 52 67 63 1 + 52 67 64 1 + 52 67 65 1 + 52 67 66 1 + 52 67 67 1 + 52 67 68 1 + 52 67 69 1 + 52 67 70 1 + 52 67 71 1 + 52 67 72 1 + 52 67 73 1 + 52 67 74 1 + 52 67 75 1 + 52 67 76 1 + 52 67 77 1 + 52 67 78 1 + 52 67 79 1 + 52 67 80 1 + 52 67 81 1 + 52 67 82 1 + 52 67 83 1 + 52 67 84 1 + 52 67 85 1 + 52 67 86 0.598003 + 52 68 41 0.42026 + 52 68 42 1 + 52 68 43 1 + 52 68 44 1 + 52 68 45 1 + 52 68 46 1 + 52 68 47 1 + 52 68 48 1 + 52 68 49 1 + 52 68 50 1 + 52 68 51 1 + 52 68 52 1 + 52 68 53 1 + 52 68 54 1 + 52 68 55 1 + 52 68 56 1 + 52 68 57 1 + 52 68 58 1 + 52 68 59 1 + 52 68 60 1 + 52 68 61 1 + 52 68 62 1 + 52 68 63 1 + 52 68 64 1 + 52 68 65 1 + 52 68 66 1 + 52 68 67 1 + 52 68 68 1 + 52 68 69 1 + 52 68 70 1 + 52 68 71 1 + 52 68 72 1 + 52 68 73 1 + 52 68 74 1 + 52 68 75 1 + 52 68 76 1 + 52 68 77 1 + 52 68 78 1 + 52 68 79 1 + 52 68 80 1 + 52 68 81 1 + 52 68 82 1 + 52 68 83 1 + 52 68 84 1 + 52 68 85 1 + 52 68 86 0.42026 + 52 69 41 0.204921 + 52 69 42 0.991156 + 52 69 43 1 + 52 69 44 1 + 52 69 45 1 + 52 69 46 1 + 52 69 47 1 + 52 69 48 1 + 52 69 49 1 + 52 69 50 1 + 52 69 51 1 + 52 69 52 1 + 52 69 53 1 + 52 69 54 1 + 52 69 55 1 + 52 69 56 1 + 52 69 57 1 + 52 69 58 1 + 52 69 59 1 + 52 69 60 1 + 52 69 61 1 + 52 69 62 1 + 52 69 63 1 + 52 69 64 1 + 52 69 65 1 + 52 69 66 1 + 52 69 67 1 + 52 69 68 1 + 52 69 69 1 + 52 69 70 1 + 52 69 71 1 + 52 69 72 1 + 52 69 73 1 + 52 69 74 1 + 52 69 75 1 + 52 69 76 1 + 52 69 77 1 + 52 69 78 1 + 52 69 79 1 + 52 69 80 1 + 52 69 81 1 + 52 69 82 1 + 52 69 83 1 + 52 69 84 1 + 52 69 85 0.991156 + 52 69 86 0.204921 + 52 70 41 0.0398206 + 52 70 42 0.884209 + 52 70 43 1 + 52 70 44 1 + 52 70 45 1 + 52 70 46 1 + 52 70 47 1 + 52 70 48 1 + 52 70 49 1 + 52 70 50 1 + 52 70 51 1 + 52 70 52 1 + 52 70 53 1 + 52 70 54 1 + 52 70 55 1 + 52 70 56 1 + 52 70 57 1 + 52 70 58 1 + 52 70 59 1 + 52 70 60 1 + 52 70 61 1 + 52 70 62 1 + 52 70 63 1 + 52 70 64 1 + 52 70 65 1 + 52 70 66 1 + 52 70 67 1 + 52 70 68 1 + 52 70 69 1 + 52 70 70 1 + 52 70 71 1 + 52 70 72 1 + 52 70 73 1 + 52 70 74 1 + 52 70 75 1 + 52 70 76 1 + 52 70 77 1 + 52 70 78 1 + 52 70 79 1 + 52 70 80 1 + 52 70 81 1 + 52 70 82 1 + 52 70 83 1 + 52 70 84 1 + 52 70 85 0.884209 + 52 70 86 0.0398206 + 52 71 41 3.07754e-05 + 52 71 42 0.602276 + 52 71 43 1 + 52 71 44 1 + 52 71 45 1 + 52 71 46 1 + 52 71 47 1 + 52 71 48 1 + 52 71 49 1 + 52 71 50 1 + 52 71 51 1 + 52 71 52 1 + 52 71 53 1 + 52 71 54 1 + 52 71 55 1 + 52 71 56 1 + 52 71 57 1 + 52 71 58 1 + 52 71 59 1 + 52 71 60 1 + 52 71 61 1 + 52 71 62 1 + 52 71 63 1 + 52 71 64 1 + 52 71 65 1 + 52 71 66 1 + 52 71 67 1 + 52 71 68 1 + 52 71 69 1 + 52 71 70 1 + 52 71 71 1 + 52 71 72 1 + 52 71 73 1 + 52 71 74 1 + 52 71 75 1 + 52 71 76 1 + 52 71 77 1 + 52 71 78 1 + 52 71 79 1 + 52 71 80 1 + 52 71 81 1 + 52 71 82 1 + 52 71 83 1 + 52 71 84 1 + 52 71 85 0.602276 + 52 71 86 3.07754e-05 + 52 72 42 0.240042 + 52 72 43 0.988606 + 52 72 44 1 + 52 72 45 1 + 52 72 46 1 + 52 72 47 1 + 52 72 48 1 + 52 72 49 1 + 52 72 50 1 + 52 72 51 1 + 52 72 52 1 + 52 72 53 1 + 52 72 54 1 + 52 72 55 1 + 52 72 56 1 + 52 72 57 1 + 52 72 58 1 + 52 72 59 1 + 52 72 60 1 + 52 72 61 1 + 52 72 62 1 + 52 72 63 1 + 52 72 64 1 + 52 72 65 1 + 52 72 66 1 + 52 72 67 1 + 52 72 68 1 + 52 72 69 1 + 52 72 70 1 + 52 72 71 1 + 52 72 72 1 + 52 72 73 1 + 52 72 74 1 + 52 72 75 1 + 52 72 76 1 + 52 72 77 1 + 52 72 78 1 + 52 72 79 1 + 52 72 80 1 + 52 72 81 1 + 52 72 82 1 + 52 72 83 1 + 52 72 84 0.988606 + 52 72 85 0.240042 + 52 73 42 0.0182812 + 52 73 43 0.78197 + 52 73 44 1 + 52 73 45 1 + 52 73 46 1 + 52 73 47 1 + 52 73 48 1 + 52 73 49 1 + 52 73 50 1 + 52 73 51 1 + 52 73 52 1 + 52 73 53 1 + 52 73 54 1 + 52 73 55 1 + 52 73 56 1 + 52 73 57 1 + 52 73 58 1 + 52 73 59 1 + 52 73 60 1 + 52 73 61 1 + 52 73 62 1 + 52 73 63 1 + 52 73 64 1 + 52 73 65 1 + 52 73 66 1 + 52 73 67 1 + 52 73 68 1 + 52 73 69 1 + 52 73 70 1 + 52 73 71 1 + 52 73 72 1 + 52 73 73 1 + 52 73 74 1 + 52 73 75 1 + 52 73 76 1 + 52 73 77 1 + 52 73 78 1 + 52 73 79 1 + 52 73 80 1 + 52 73 81 1 + 52 73 82 1 + 52 73 83 1 + 52 73 84 0.78197 + 52 73 85 0.0182812 + 52 74 43 0.320873 + 52 74 44 0.992776 + 52 74 45 1 + 52 74 46 1 + 52 74 47 1 + 52 74 48 1 + 52 74 49 1 + 52 74 50 1 + 52 74 51 1 + 52 74 52 1 + 52 74 53 1 + 52 74 54 1 + 52 74 55 1 + 52 74 56 1 + 52 74 57 1 + 52 74 58 1 + 52 74 59 1 + 52 74 60 1 + 52 74 61 1 + 52 74 62 1 + 52 74 63 1 + 52 74 64 1 + 52 74 65 1 + 52 74 66 1 + 52 74 67 1 + 52 74 68 1 + 52 74 69 1 + 52 74 70 1 + 52 74 71 1 + 52 74 72 1 + 52 74 73 1 + 52 74 74 1 + 52 74 75 1 + 52 74 76 1 + 52 74 77 1 + 52 74 78 1 + 52 74 79 1 + 52 74 80 1 + 52 74 81 1 + 52 74 82 1 + 52 74 83 0.992776 + 52 74 84 0.320873 + 52 75 43 0.0199 + 52 75 44 0.744636 + 52 75 45 1 + 52 75 46 1 + 52 75 47 1 + 52 75 48 1 + 52 75 49 1 + 52 75 50 1 + 52 75 51 1 + 52 75 52 1 + 52 75 53 1 + 52 75 54 1 + 52 75 55 1 + 52 75 56 1 + 52 75 57 1 + 52 75 58 1 + 52 75 59 1 + 52 75 60 1 + 52 75 61 1 + 52 75 62 1 + 52 75 63 1 + 52 75 64 1 + 52 75 65 1 + 52 75 66 1 + 52 75 67 1 + 52 75 68 1 + 52 75 69 1 + 52 75 70 1 + 52 75 71 1 + 52 75 72 1 + 52 75 73 1 + 52 75 74 1 + 52 75 75 1 + 52 75 76 1 + 52 75 77 1 + 52 75 78 1 + 52 75 79 1 + 52 75 80 1 + 52 75 81 1 + 52 75 82 1 + 52 75 83 0.744636 + 52 75 84 0.0199 + 52 76 44 0.194777 + 52 76 45 0.952748 + 52 76 46 1 + 52 76 47 1 + 52 76 48 1 + 52 76 49 1 + 52 76 50 1 + 52 76 51 1 + 52 76 52 1 + 52 76 53 1 + 52 76 54 1 + 52 76 55 1 + 52 76 56 1 + 52 76 57 1 + 52 76 58 1 + 52 76 59 1 + 52 76 60 1 + 52 76 61 1 + 52 76 62 1 + 52 76 63 1 + 52 76 64 1 + 52 76 65 1 + 52 76 66 1 + 52 76 67 1 + 52 76 68 1 + 52 76 69 1 + 52 76 70 1 + 52 76 71 1 + 52 76 72 1 + 52 76 73 1 + 52 76 74 1 + 52 76 75 1 + 52 76 76 1 + 52 76 77 1 + 52 76 78 1 + 52 76 79 1 + 52 76 80 1 + 52 76 81 1 + 52 76 82 0.952748 + 52 76 83 0.194777 + 52 77 44 0.00062971 + 52 77 45 0.459682 + 52 77 46 0.995483 + 52 77 47 1 + 52 77 48 1 + 52 77 49 1 + 52 77 50 1 + 52 77 51 1 + 52 77 52 1 + 52 77 53 1 + 52 77 54 1 + 52 77 55 1 + 52 77 56 1 + 52 77 57 1 + 52 77 58 1 + 52 77 59 1 + 52 77 60 1 + 52 77 61 1 + 52 77 62 1 + 52 77 63 1 + 52 77 64 1 + 52 77 65 1 + 52 77 66 1 + 52 77 67 1 + 52 77 68 1 + 52 77 69 1 + 52 77 70 1 + 52 77 71 1 + 52 77 72 1 + 52 77 73 1 + 52 77 74 1 + 52 77 75 1 + 52 77 76 1 + 52 77 77 1 + 52 77 78 1 + 52 77 79 1 + 52 77 80 1 + 52 77 81 0.995483 + 52 77 82 0.459682 + 52 77 83 0.00062971 + 52 78 45 0.0216196 + 52 78 46 0.659059 + 52 78 47 0.999874 + 52 78 48 1 + 52 78 49 1 + 52 78 50 1 + 52 78 51 1 + 52 78 52 1 + 52 78 53 1 + 52 78 54 1 + 52 78 55 1 + 52 78 56 1 + 52 78 57 1 + 52 78 58 1 + 52 78 59 1 + 52 78 60 1 + 52 78 61 1 + 52 78 62 1 + 52 78 63 1 + 52 78 64 1 + 52 78 65 1 + 52 78 66 1 + 52 78 67 1 + 52 78 68 1 + 52 78 69 1 + 52 78 70 1 + 52 78 71 1 + 52 78 72 1 + 52 78 73 1 + 52 78 74 1 + 52 78 75 1 + 52 78 76 1 + 52 78 77 1 + 52 78 78 1 + 52 78 79 1 + 52 78 80 0.999874 + 52 78 81 0.659059 + 52 78 82 0.0216196 + 52 79 46 0.0602217 + 52 79 47 0.749996 + 52 79 48 0.999998 + 52 79 49 1 + 52 79 50 1 + 52 79 51 1 + 52 79 52 1 + 52 79 53 1 + 52 79 54 1 + 52 79 55 1 + 52 79 56 1 + 52 79 57 1 + 52 79 58 1 + 52 79 59 1 + 52 79 60 1 + 52 79 61 1 + 52 79 62 1 + 52 79 63 1 + 52 79 64 1 + 52 79 65 1 + 52 79 66 1 + 52 79 67 1 + 52 79 68 1 + 52 79 69 1 + 52 79 70 1 + 52 79 71 1 + 52 79 72 1 + 52 79 73 1 + 52 79 74 1 + 52 79 75 1 + 52 79 76 1 + 52 79 77 1 + 52 79 78 1 + 52 79 79 0.999998 + 52 79 80 0.749996 + 52 79 81 0.0602217 + 52 80 47 0.0791732 + 52 80 48 0.749996 + 52 80 49 0.999874 + 52 80 50 1 + 52 80 51 1 + 52 80 52 1 + 52 80 53 1 + 52 80 54 1 + 52 80 55 1 + 52 80 56 1 + 52 80 57 1 + 52 80 58 1 + 52 80 59 1 + 52 80 60 1 + 52 80 61 1 + 52 80 62 1 + 52 80 63 1 + 52 80 64 1 + 52 80 65 1 + 52 80 66 1 + 52 80 67 1 + 52 80 68 1 + 52 80 69 1 + 52 80 70 1 + 52 80 71 1 + 52 80 72 1 + 52 80 73 1 + 52 80 74 1 + 52 80 75 1 + 52 80 76 1 + 52 80 77 1 + 52 80 78 0.999874 + 52 80 79 0.749996 + 52 80 80 0.0791732 + 52 81 48 0.0602217 + 52 81 49 0.659059 + 52 81 50 0.995483 + 52 81 51 1 + 52 81 52 1 + 52 81 53 1 + 52 81 54 1 + 52 81 55 1 + 52 81 56 1 + 52 81 57 1 + 52 81 58 1 + 52 81 59 1 + 52 81 60 1 + 52 81 61 1 + 52 81 62 1 + 52 81 63 1 + 52 81 64 1 + 52 81 65 1 + 52 81 66 1 + 52 81 67 1 + 52 81 68 1 + 52 81 69 1 + 52 81 70 1 + 52 81 71 1 + 52 81 72 1 + 52 81 73 1 + 52 81 74 1 + 52 81 75 1 + 52 81 76 1 + 52 81 77 0.995483 + 52 81 78 0.659059 + 52 81 79 0.0602217 + 52 82 49 0.0216196 + 52 82 50 0.459682 + 52 82 51 0.952748 + 52 82 52 1 + 52 82 53 1 + 52 82 54 1 + 52 82 55 1 + 52 82 56 1 + 52 82 57 1 + 52 82 58 1 + 52 82 59 1 + 52 82 60 1 + 52 82 61 1 + 52 82 62 1 + 52 82 63 1 + 52 82 64 1 + 52 82 65 1 + 52 82 66 1 + 52 82 67 1 + 52 82 68 1 + 52 82 69 1 + 52 82 70 1 + 52 82 71 1 + 52 82 72 1 + 52 82 73 1 + 52 82 74 1 + 52 82 75 1 + 52 82 76 0.952748 + 52 82 77 0.459682 + 52 82 78 0.0216196 + 52 83 50 0.00062971 + 52 83 51 0.194777 + 52 83 52 0.744636 + 52 83 53 0.992776 + 52 83 54 1 + 52 83 55 1 + 52 83 56 1 + 52 83 57 1 + 52 83 58 1 + 52 83 59 1 + 52 83 60 1 + 52 83 61 1 + 52 83 62 1 + 52 83 63 1 + 52 83 64 1 + 52 83 65 1 + 52 83 66 1 + 52 83 67 1 + 52 83 68 1 + 52 83 69 1 + 52 83 70 1 + 52 83 71 1 + 52 83 72 1 + 52 83 73 1 + 52 83 74 0.992776 + 52 83 75 0.744636 + 52 83 76 0.194777 + 52 83 77 0.00062971 + 52 84 52 0.0199 + 52 84 53 0.320873 + 52 84 54 0.78197 + 52 84 55 0.988606 + 52 84 56 1 + 52 84 57 1 + 52 84 58 1 + 52 84 59 1 + 52 84 60 1 + 52 84 61 1 + 52 84 62 1 + 52 84 63 1 + 52 84 64 1 + 52 84 65 1 + 52 84 66 1 + 52 84 67 1 + 52 84 68 1 + 52 84 69 1 + 52 84 70 1 + 52 84 71 1 + 52 84 72 0.988606 + 52 84 73 0.78197 + 52 84 74 0.320873 + 52 84 75 0.0199 + 52 85 54 0.0182812 + 52 85 55 0.240042 + 52 85 56 0.602276 + 52 85 57 0.884209 + 52 85 58 0.991156 + 52 85 59 1 + 52 85 60 1 + 52 85 61 1 + 52 85 62 1 + 52 85 63 1 + 52 85 64 1 + 52 85 65 1 + 52 85 66 1 + 52 85 67 1 + 52 85 68 1 + 52 85 69 0.991156 + 52 85 70 0.884209 + 52 85 71 0.602276 + 52 85 72 0.240042 + 52 85 73 0.0182812 + 52 86 56 3.07754e-05 + 52 86 57 0.0398206 + 52 86 58 0.204921 + 52 86 59 0.42026 + 52 86 60 0.598003 + 52 86 61 0.730298 + 52 86 62 0.813363 + 52 86 63 0.849603 + 52 86 64 0.849603 + 52 86 65 0.813363 + 52 86 66 0.730298 + 52 86 67 0.598003 + 52 86 68 0.42026 + 52 86 69 0.204921 + 52 86 70 0.0398206 + 52 86 71 3.07754e-05 + 52 87 61 9.9388e-05 + 52 87 62 0.00487084 + 52 87 63 0.012422 + 52 87 64 0.012422 + 52 87 65 0.00487084 + 52 87 66 9.9388e-05 + 53 40 58 4.51737e-05 + 53 40 59 0.0230554 + 53 40 60 0.106145 + 53 40 61 0.210787 + 53 40 62 0.295408 + 53 40 63 0.338304 + 53 40 64 0.338304 + 53 40 65 0.295408 + 53 40 66 0.210787 + 53 40 67 0.106145 + 53 40 68 0.0230554 + 53 40 69 4.51737e-05 + 53 41 55 0.00460294 + 53 41 56 0.134362 + 53 41 57 0.42026 + 53 41 58 0.686307 + 53 41 59 0.882677 + 53 41 60 0.97359 + 53 41 61 0.998593 + 53 41 62 1 + 53 41 63 1 + 53 41 64 1 + 53 41 65 1 + 53 41 66 0.998593 + 53 41 67 0.97359 + 53 41 68 0.882677 + 53 41 69 0.686307 + 53 41 70 0.42026 + 53 41 71 0.134362 + 53 41 72 0.00460294 + 53 42 53 0.0282569 + 53 42 54 0.325363 + 53 42 55 0.736168 + 53 42 56 0.971405 + 53 42 57 1 + 53 42 58 1 + 53 42 59 1 + 53 42 60 1 + 53 42 61 1 + 53 42 62 1 + 53 42 63 1 + 53 42 64 1 + 53 42 65 1 + 53 42 66 1 + 53 42 67 1 + 53 42 68 1 + 53 42 69 1 + 53 42 70 1 + 53 42 71 0.971405 + 53 42 72 0.736168 + 53 42 73 0.325363 + 53 42 74 0.0282569 + 53 43 51 0.0123857 + 53 43 52 0.320873 + 53 43 53 0.820029 + 53 43 54 0.997314 + 53 43 55 1 + 53 43 56 1 + 53 43 57 1 + 53 43 58 1 + 53 43 59 1 + 53 43 60 1 + 53 43 61 1 + 53 43 62 1 + 53 43 63 1 + 53 43 64 1 + 53 43 65 1 + 53 43 66 1 + 53 43 67 1 + 53 43 68 1 + 53 43 69 1 + 53 43 70 1 + 53 43 71 1 + 53 43 72 1 + 53 43 73 0.997314 + 53 43 74 0.820029 + 53 43 75 0.320873 + 53 43 76 0.0123857 + 53 44 50 0.129326 + 53 44 51 0.701471 + 53 44 52 0.992776 + 53 44 53 1 + 53 44 54 1 + 53 44 55 1 + 53 44 56 1 + 53 44 57 1 + 53 44 58 1 + 53 44 59 1 + 53 44 60 1 + 53 44 61 1 + 53 44 62 1 + 53 44 63 1 + 53 44 64 1 + 53 44 65 1 + 53 44 66 1 + 53 44 67 1 + 53 44 68 1 + 53 44 69 1 + 53 44 70 1 + 53 44 71 1 + 53 44 72 1 + 53 44 73 1 + 53 44 74 1 + 53 44 75 0.992776 + 53 44 76 0.701471 + 53 44 77 0.129326 + 53 45 48 0.00195783 + 53 45 49 0.315112 + 53 45 50 0.913417 + 53 45 51 1 + 53 45 52 1 + 53 45 53 1 + 53 45 54 1 + 53 45 55 1 + 53 45 56 1 + 53 45 57 1 + 53 45 58 1 + 53 45 59 1 + 53 45 60 1 + 53 45 61 1 + 53 45 62 1 + 53 45 63 1 + 53 45 64 1 + 53 45 65 1 + 53 45 66 1 + 53 45 67 1 + 53 45 68 1 + 53 45 69 1 + 53 45 70 1 + 53 45 71 1 + 53 45 72 1 + 53 45 73 1 + 53 45 74 1 + 53 45 75 1 + 53 45 76 1 + 53 45 77 0.913417 + 53 45 78 0.315112 + 53 45 79 0.00195783 + 53 46 47 0.00833029 + 53 46 48 0.459326 + 53 46 49 0.977331 + 53 46 50 1 + 53 46 51 1 + 53 46 52 1 + 53 46 53 1 + 53 46 54 1 + 53 46 55 1 + 53 46 56 1 + 53 46 57 1 + 53 46 58 1 + 53 46 59 1 + 53 46 60 1 + 53 46 61 1 + 53 46 62 1 + 53 46 63 1 + 53 46 64 1 + 53 46 65 1 + 53 46 66 1 + 53 46 67 1 + 53 46 68 1 + 53 46 69 1 + 53 46 70 1 + 53 46 71 1 + 53 46 72 1 + 53 46 73 1 + 53 46 74 1 + 53 46 75 1 + 53 46 76 1 + 53 46 77 1 + 53 46 78 0.977331 + 53 46 79 0.459326 + 53 46 80 0.00833029 + 53 47 46 0.00833029 + 53 47 47 0.510119 + 53 47 48 0.991434 + 53 47 49 1 + 53 47 50 1 + 53 47 51 1 + 53 47 52 1 + 53 47 53 1 + 53 47 54 1 + 53 47 55 1 + 53 47 56 1 + 53 47 57 1 + 53 47 58 1 + 53 47 59 1 + 53 47 60 1 + 53 47 61 1 + 53 47 62 1 + 53 47 63 1 + 53 47 64 1 + 53 47 65 1 + 53 47 66 1 + 53 47 67 1 + 53 47 68 1 + 53 47 69 1 + 53 47 70 1 + 53 47 71 1 + 53 47 72 1 + 53 47 73 1 + 53 47 74 1 + 53 47 75 1 + 53 47 76 1 + 53 47 77 1 + 53 47 78 1 + 53 47 79 0.991434 + 53 47 80 0.510119 + 53 47 81 0.00833029 + 53 48 45 0.00195783 + 53 48 46 0.459326 + 53 48 47 0.991434 + 53 48 48 1 + 53 48 49 1 + 53 48 50 1 + 53 48 51 1 + 53 48 52 1 + 53 48 53 1 + 53 48 54 1 + 53 48 55 1 + 53 48 56 1 + 53 48 57 1 + 53 48 58 1 + 53 48 59 1 + 53 48 60 1 + 53 48 61 1 + 53 48 62 1 + 53 48 63 1 + 53 48 64 1 + 53 48 65 1 + 53 48 66 1 + 53 48 67 1 + 53 48 68 1 + 53 48 69 1 + 53 48 70 1 + 53 48 71 1 + 53 48 72 1 + 53 48 73 1 + 53 48 74 1 + 53 48 75 1 + 53 48 76 1 + 53 48 77 1 + 53 48 78 1 + 53 48 79 1 + 53 48 80 0.991434 + 53 48 81 0.459326 + 53 48 82 0.00195783 + 53 49 45 0.315112 + 53 49 46 0.977331 + 53 49 47 1 + 53 49 48 1 + 53 49 49 1 + 53 49 50 1 + 53 49 51 1 + 53 49 52 1 + 53 49 53 1 + 53 49 54 1 + 53 49 55 1 + 53 49 56 1 + 53 49 57 1 + 53 49 58 1 + 53 49 59 1 + 53 49 60 1 + 53 49 61 1 + 53 49 62 1 + 53 49 63 1 + 53 49 64 1 + 53 49 65 1 + 53 49 66 1 + 53 49 67 1 + 53 49 68 1 + 53 49 69 1 + 53 49 70 1 + 53 49 71 1 + 53 49 72 1 + 53 49 73 1 + 53 49 74 1 + 53 49 75 1 + 53 49 76 1 + 53 49 77 1 + 53 49 78 1 + 53 49 79 1 + 53 49 80 1 + 53 49 81 0.977331 + 53 49 82 0.315112 + 53 50 44 0.129326 + 53 50 45 0.913417 + 53 50 46 1 + 53 50 47 1 + 53 50 48 1 + 53 50 49 1 + 53 50 50 1 + 53 50 51 1 + 53 50 52 1 + 53 50 53 1 + 53 50 54 1 + 53 50 55 1 + 53 50 56 1 + 53 50 57 1 + 53 50 58 1 + 53 50 59 1 + 53 50 60 1 + 53 50 61 1 + 53 50 62 1 + 53 50 63 1 + 53 50 64 1 + 53 50 65 1 + 53 50 66 1 + 53 50 67 1 + 53 50 68 1 + 53 50 69 1 + 53 50 70 1 + 53 50 71 1 + 53 50 72 1 + 53 50 73 1 + 53 50 74 1 + 53 50 75 1 + 53 50 76 1 + 53 50 77 1 + 53 50 78 1 + 53 50 79 1 + 53 50 80 1 + 53 50 81 1 + 53 50 82 0.913417 + 53 50 83 0.129326 + 53 51 43 0.0123857 + 53 51 44 0.701471 + 53 51 45 1 + 53 51 46 1 + 53 51 47 1 + 53 51 48 1 + 53 51 49 1 + 53 51 50 1 + 53 51 51 1 + 53 51 52 1 + 53 51 53 1 + 53 51 54 1 + 53 51 55 1 + 53 51 56 1 + 53 51 57 1 + 53 51 58 1 + 53 51 59 1 + 53 51 60 1 + 53 51 61 1 + 53 51 62 1 + 53 51 63 1 + 53 51 64 1 + 53 51 65 1 + 53 51 66 1 + 53 51 67 1 + 53 51 68 1 + 53 51 69 1 + 53 51 70 1 + 53 51 71 1 + 53 51 72 1 + 53 51 73 1 + 53 51 74 1 + 53 51 75 1 + 53 51 76 1 + 53 51 77 1 + 53 51 78 1 + 53 51 79 1 + 53 51 80 1 + 53 51 81 1 + 53 51 82 1 + 53 51 83 0.701471 + 53 51 84 0.0123857 + 53 52 43 0.320873 + 53 52 44 0.992776 + 53 52 45 1 + 53 52 46 1 + 53 52 47 1 + 53 52 48 1 + 53 52 49 1 + 53 52 50 1 + 53 52 51 1 + 53 52 52 1 + 53 52 53 1 + 53 52 54 1 + 53 52 55 1 + 53 52 56 1 + 53 52 57 1 + 53 52 58 1 + 53 52 59 1 + 53 52 60 1 + 53 52 61 1 + 53 52 62 1 + 53 52 63 1 + 53 52 64 1 + 53 52 65 1 + 53 52 66 1 + 53 52 67 1 + 53 52 68 1 + 53 52 69 1 + 53 52 70 1 + 53 52 71 1 + 53 52 72 1 + 53 52 73 1 + 53 52 74 1 + 53 52 75 1 + 53 52 76 1 + 53 52 77 1 + 53 52 78 1 + 53 52 79 1 + 53 52 80 1 + 53 52 81 1 + 53 52 82 1 + 53 52 83 0.992776 + 53 52 84 0.320873 + 53 53 42 0.0282569 + 53 53 43 0.820029 + 53 53 44 1 + 53 53 45 1 + 53 53 46 1 + 53 53 47 1 + 53 53 48 1 + 53 53 49 1 + 53 53 50 1 + 53 53 51 1 + 53 53 52 1 + 53 53 53 1 + 53 53 54 1 + 53 53 55 1 + 53 53 56 1 + 53 53 57 1 + 53 53 58 1 + 53 53 59 1 + 53 53 60 1 + 53 53 61 1 + 53 53 62 1 + 53 53 63 1 + 53 53 64 1 + 53 53 65 1 + 53 53 66 1 + 53 53 67 1 + 53 53 68 1 + 53 53 69 1 + 53 53 70 1 + 53 53 71 1 + 53 53 72 1 + 53 53 73 1 + 53 53 74 1 + 53 53 75 1 + 53 53 76 1 + 53 53 77 1 + 53 53 78 1 + 53 53 79 1 + 53 53 80 1 + 53 53 81 1 + 53 53 82 1 + 53 53 83 1 + 53 53 84 0.820029 + 53 53 85 0.0282569 + 53 54 42 0.325363 + 53 54 43 0.997314 + 53 54 44 1 + 53 54 45 1 + 53 54 46 1 + 53 54 47 1 + 53 54 48 1 + 53 54 49 1 + 53 54 50 1 + 53 54 51 1 + 53 54 52 1 + 53 54 53 1 + 53 54 54 1 + 53 54 55 1 + 53 54 56 1 + 53 54 57 1 + 53 54 58 1 + 53 54 59 1 + 53 54 60 1 + 53 54 61 1 + 53 54 62 1 + 53 54 63 1 + 53 54 64 1 + 53 54 65 1 + 53 54 66 1 + 53 54 67 1 + 53 54 68 1 + 53 54 69 1 + 53 54 70 1 + 53 54 71 1 + 53 54 72 1 + 53 54 73 1 + 53 54 74 1 + 53 54 75 1 + 53 54 76 1 + 53 54 77 1 + 53 54 78 1 + 53 54 79 1 + 53 54 80 1 + 53 54 81 1 + 53 54 82 1 + 53 54 83 1 + 53 54 84 0.997314 + 53 54 85 0.325363 + 53 55 41 0.00460294 + 53 55 42 0.736168 + 53 55 43 1 + 53 55 44 1 + 53 55 45 1 + 53 55 46 1 + 53 55 47 1 + 53 55 48 1 + 53 55 49 1 + 53 55 50 1 + 53 55 51 1 + 53 55 52 1 + 53 55 53 1 + 53 55 54 1 + 53 55 55 1 + 53 55 56 1 + 53 55 57 1 + 53 55 58 1 + 53 55 59 1 + 53 55 60 1 + 53 55 61 1 + 53 55 62 1 + 53 55 63 1 + 53 55 64 1 + 53 55 65 1 + 53 55 66 1 + 53 55 67 1 + 53 55 68 1 + 53 55 69 1 + 53 55 70 1 + 53 55 71 1 + 53 55 72 1 + 53 55 73 1 + 53 55 74 1 + 53 55 75 1 + 53 55 76 1 + 53 55 77 1 + 53 55 78 1 + 53 55 79 1 + 53 55 80 1 + 53 55 81 1 + 53 55 82 1 + 53 55 83 1 + 53 55 84 1 + 53 55 85 0.736168 + 53 55 86 0.00460294 + 53 56 41 0.134362 + 53 56 42 0.971405 + 53 56 43 1 + 53 56 44 1 + 53 56 45 1 + 53 56 46 1 + 53 56 47 1 + 53 56 48 1 + 53 56 49 1 + 53 56 50 1 + 53 56 51 1 + 53 56 52 1 + 53 56 53 1 + 53 56 54 1 + 53 56 55 1 + 53 56 56 1 + 53 56 57 1 + 53 56 58 1 + 53 56 59 1 + 53 56 60 1 + 53 56 61 1 + 53 56 62 1 + 53 56 63 1 + 53 56 64 1 + 53 56 65 1 + 53 56 66 1 + 53 56 67 1 + 53 56 68 1 + 53 56 69 1 + 53 56 70 1 + 53 56 71 1 + 53 56 72 1 + 53 56 73 1 + 53 56 74 1 + 53 56 75 1 + 53 56 76 1 + 53 56 77 1 + 53 56 78 1 + 53 56 79 1 + 53 56 80 1 + 53 56 81 1 + 53 56 82 1 + 53 56 83 1 + 53 56 84 1 + 53 56 85 0.971405 + 53 56 86 0.134362 + 53 57 41 0.42026 + 53 57 42 1 + 53 57 43 1 + 53 57 44 1 + 53 57 45 1 + 53 57 46 1 + 53 57 47 1 + 53 57 48 1 + 53 57 49 1 + 53 57 50 1 + 53 57 51 1 + 53 57 52 1 + 53 57 53 1 + 53 57 54 1 + 53 57 55 1 + 53 57 56 1 + 53 57 57 1 + 53 57 58 1 + 53 57 59 1 + 53 57 60 1 + 53 57 61 1 + 53 57 62 1 + 53 57 63 1 + 53 57 64 1 + 53 57 65 1 + 53 57 66 1 + 53 57 67 1 + 53 57 68 1 + 53 57 69 1 + 53 57 70 1 + 53 57 71 1 + 53 57 72 1 + 53 57 73 1 + 53 57 74 1 + 53 57 75 1 + 53 57 76 1 + 53 57 77 1 + 53 57 78 1 + 53 57 79 1 + 53 57 80 1 + 53 57 81 1 + 53 57 82 1 + 53 57 83 1 + 53 57 84 1 + 53 57 85 1 + 53 57 86 0.42026 + 53 58 40 4.51737e-05 + 53 58 41 0.686307 + 53 58 42 1 + 53 58 43 1 + 53 58 44 1 + 53 58 45 1 + 53 58 46 1 + 53 58 47 1 + 53 58 48 1 + 53 58 49 1 + 53 58 50 1 + 53 58 51 1 + 53 58 52 1 + 53 58 53 1 + 53 58 54 1 + 53 58 55 1 + 53 58 56 1 + 53 58 57 1 + 53 58 58 1 + 53 58 59 1 + 53 58 60 1 + 53 58 61 1 + 53 58 62 1 + 53 58 63 1 + 53 58 64 1 + 53 58 65 1 + 53 58 66 1 + 53 58 67 1 + 53 58 68 1 + 53 58 69 1 + 53 58 70 1 + 53 58 71 1 + 53 58 72 1 + 53 58 73 1 + 53 58 74 1 + 53 58 75 1 + 53 58 76 1 + 53 58 77 1 + 53 58 78 1 + 53 58 79 1 + 53 58 80 1 + 53 58 81 1 + 53 58 82 1 + 53 58 83 1 + 53 58 84 1 + 53 58 85 1 + 53 58 86 0.686307 + 53 58 87 4.51737e-05 + 53 59 40 0.0230554 + 53 59 41 0.882677 + 53 59 42 1 + 53 59 43 1 + 53 59 44 1 + 53 59 45 1 + 53 59 46 1 + 53 59 47 1 + 53 59 48 1 + 53 59 49 1 + 53 59 50 1 + 53 59 51 1 + 53 59 52 1 + 53 59 53 1 + 53 59 54 1 + 53 59 55 1 + 53 59 56 1 + 53 59 57 1 + 53 59 58 1 + 53 59 59 1 + 53 59 60 1 + 53 59 61 1 + 53 59 62 1 + 53 59 63 1 + 53 59 64 1 + 53 59 65 1 + 53 59 66 1 + 53 59 67 1 + 53 59 68 1 + 53 59 69 1 + 53 59 70 1 + 53 59 71 1 + 53 59 72 1 + 53 59 73 1 + 53 59 74 1 + 53 59 75 1 + 53 59 76 1 + 53 59 77 1 + 53 59 78 1 + 53 59 79 1 + 53 59 80 1 + 53 59 81 1 + 53 59 82 1 + 53 59 83 1 + 53 59 84 1 + 53 59 85 1 + 53 59 86 0.882677 + 53 59 87 0.0230554 + 53 60 40 0.106145 + 53 60 41 0.97359 + 53 60 42 1 + 53 60 43 1 + 53 60 44 1 + 53 60 45 1 + 53 60 46 1 + 53 60 47 1 + 53 60 48 1 + 53 60 49 1 + 53 60 50 1 + 53 60 51 1 + 53 60 52 1 + 53 60 53 1 + 53 60 54 1 + 53 60 55 1 + 53 60 56 1 + 53 60 57 1 + 53 60 58 1 + 53 60 59 1 + 53 60 60 1 + 53 60 61 1 + 53 60 62 1 + 53 60 63 1 + 53 60 64 1 + 53 60 65 1 + 53 60 66 1 + 53 60 67 1 + 53 60 68 1 + 53 60 69 1 + 53 60 70 1 + 53 60 71 1 + 53 60 72 1 + 53 60 73 1 + 53 60 74 1 + 53 60 75 1 + 53 60 76 1 + 53 60 77 1 + 53 60 78 1 + 53 60 79 1 + 53 60 80 1 + 53 60 81 1 + 53 60 82 1 + 53 60 83 1 + 53 60 84 1 + 53 60 85 1 + 53 60 86 0.97359 + 53 60 87 0.106145 + 53 61 40 0.210787 + 53 61 41 0.998593 + 53 61 42 1 + 53 61 43 1 + 53 61 44 1 + 53 61 45 1 + 53 61 46 1 + 53 61 47 1 + 53 61 48 1 + 53 61 49 1 + 53 61 50 1 + 53 61 51 1 + 53 61 52 1 + 53 61 53 1 + 53 61 54 1 + 53 61 55 1 + 53 61 56 1 + 53 61 57 1 + 53 61 58 1 + 53 61 59 1 + 53 61 60 1 + 53 61 61 1 + 53 61 62 1 + 53 61 63 1 + 53 61 64 1 + 53 61 65 1 + 53 61 66 1 + 53 61 67 1 + 53 61 68 1 + 53 61 69 1 + 53 61 70 1 + 53 61 71 1 + 53 61 72 1 + 53 61 73 1 + 53 61 74 1 + 53 61 75 1 + 53 61 76 1 + 53 61 77 1 + 53 61 78 1 + 53 61 79 1 + 53 61 80 1 + 53 61 81 1 + 53 61 82 1 + 53 61 83 1 + 53 61 84 1 + 53 61 85 1 + 53 61 86 0.998593 + 53 61 87 0.210787 + 53 62 40 0.295408 + 53 62 41 1 + 53 62 42 1 + 53 62 43 1 + 53 62 44 1 + 53 62 45 1 + 53 62 46 1 + 53 62 47 1 + 53 62 48 1 + 53 62 49 1 + 53 62 50 1 + 53 62 51 1 + 53 62 52 1 + 53 62 53 1 + 53 62 54 1 + 53 62 55 1 + 53 62 56 1 + 53 62 57 1 + 53 62 58 1 + 53 62 59 1 + 53 62 60 1 + 53 62 61 1 + 53 62 62 1 + 53 62 63 1 + 53 62 64 1 + 53 62 65 1 + 53 62 66 1 + 53 62 67 1 + 53 62 68 1 + 53 62 69 1 + 53 62 70 1 + 53 62 71 1 + 53 62 72 1 + 53 62 73 1 + 53 62 74 1 + 53 62 75 1 + 53 62 76 1 + 53 62 77 1 + 53 62 78 1 + 53 62 79 1 + 53 62 80 1 + 53 62 81 1 + 53 62 82 1 + 53 62 83 1 + 53 62 84 1 + 53 62 85 1 + 53 62 86 1 + 53 62 87 0.295408 + 53 63 40 0.338304 + 53 63 41 1 + 53 63 42 1 + 53 63 43 1 + 53 63 44 1 + 53 63 45 1 + 53 63 46 1 + 53 63 47 1 + 53 63 48 1 + 53 63 49 1 + 53 63 50 1 + 53 63 51 1 + 53 63 52 1 + 53 63 53 1 + 53 63 54 1 + 53 63 55 1 + 53 63 56 1 + 53 63 57 1 + 53 63 58 1 + 53 63 59 1 + 53 63 60 1 + 53 63 61 1 + 53 63 62 1 + 53 63 63 1 + 53 63 64 1 + 53 63 65 1 + 53 63 66 1 + 53 63 67 1 + 53 63 68 1 + 53 63 69 1 + 53 63 70 1 + 53 63 71 1 + 53 63 72 1 + 53 63 73 1 + 53 63 74 1 + 53 63 75 1 + 53 63 76 1 + 53 63 77 1 + 53 63 78 1 + 53 63 79 1 + 53 63 80 1 + 53 63 81 1 + 53 63 82 1 + 53 63 83 1 + 53 63 84 1 + 53 63 85 1 + 53 63 86 1 + 53 63 87 0.338304 + 53 64 40 0.338304 + 53 64 41 1 + 53 64 42 1 + 53 64 43 1 + 53 64 44 1 + 53 64 45 1 + 53 64 46 1 + 53 64 47 1 + 53 64 48 1 + 53 64 49 1 + 53 64 50 1 + 53 64 51 1 + 53 64 52 1 + 53 64 53 1 + 53 64 54 1 + 53 64 55 1 + 53 64 56 1 + 53 64 57 1 + 53 64 58 1 + 53 64 59 1 + 53 64 60 1 + 53 64 61 1 + 53 64 62 1 + 53 64 63 1 + 53 64 64 1 + 53 64 65 1 + 53 64 66 1 + 53 64 67 1 + 53 64 68 1 + 53 64 69 1 + 53 64 70 1 + 53 64 71 1 + 53 64 72 1 + 53 64 73 1 + 53 64 74 1 + 53 64 75 1 + 53 64 76 1 + 53 64 77 1 + 53 64 78 1 + 53 64 79 1 + 53 64 80 1 + 53 64 81 1 + 53 64 82 1 + 53 64 83 1 + 53 64 84 1 + 53 64 85 1 + 53 64 86 1 + 53 64 87 0.338304 + 53 65 40 0.295408 + 53 65 41 1 + 53 65 42 1 + 53 65 43 1 + 53 65 44 1 + 53 65 45 1 + 53 65 46 1 + 53 65 47 1 + 53 65 48 1 + 53 65 49 1 + 53 65 50 1 + 53 65 51 1 + 53 65 52 1 + 53 65 53 1 + 53 65 54 1 + 53 65 55 1 + 53 65 56 1 + 53 65 57 1 + 53 65 58 1 + 53 65 59 1 + 53 65 60 1 + 53 65 61 1 + 53 65 62 1 + 53 65 63 1 + 53 65 64 1 + 53 65 65 1 + 53 65 66 1 + 53 65 67 1 + 53 65 68 1 + 53 65 69 1 + 53 65 70 1 + 53 65 71 1 + 53 65 72 1 + 53 65 73 1 + 53 65 74 1 + 53 65 75 1 + 53 65 76 1 + 53 65 77 1 + 53 65 78 1 + 53 65 79 1 + 53 65 80 1 + 53 65 81 1 + 53 65 82 1 + 53 65 83 1 + 53 65 84 1 + 53 65 85 1 + 53 65 86 1 + 53 65 87 0.295408 + 53 66 40 0.210787 + 53 66 41 0.998593 + 53 66 42 1 + 53 66 43 1 + 53 66 44 1 + 53 66 45 1 + 53 66 46 1 + 53 66 47 1 + 53 66 48 1 + 53 66 49 1 + 53 66 50 1 + 53 66 51 1 + 53 66 52 1 + 53 66 53 1 + 53 66 54 1 + 53 66 55 1 + 53 66 56 1 + 53 66 57 1 + 53 66 58 1 + 53 66 59 1 + 53 66 60 1 + 53 66 61 1 + 53 66 62 1 + 53 66 63 1 + 53 66 64 1 + 53 66 65 1 + 53 66 66 1 + 53 66 67 1 + 53 66 68 1 + 53 66 69 1 + 53 66 70 1 + 53 66 71 1 + 53 66 72 1 + 53 66 73 1 + 53 66 74 1 + 53 66 75 1 + 53 66 76 1 + 53 66 77 1 + 53 66 78 1 + 53 66 79 1 + 53 66 80 1 + 53 66 81 1 + 53 66 82 1 + 53 66 83 1 + 53 66 84 1 + 53 66 85 1 + 53 66 86 0.998593 + 53 66 87 0.210787 + 53 67 40 0.106145 + 53 67 41 0.97359 + 53 67 42 1 + 53 67 43 1 + 53 67 44 1 + 53 67 45 1 + 53 67 46 1 + 53 67 47 1 + 53 67 48 1 + 53 67 49 1 + 53 67 50 1 + 53 67 51 1 + 53 67 52 1 + 53 67 53 1 + 53 67 54 1 + 53 67 55 1 + 53 67 56 1 + 53 67 57 1 + 53 67 58 1 + 53 67 59 1 + 53 67 60 1 + 53 67 61 1 + 53 67 62 1 + 53 67 63 1 + 53 67 64 1 + 53 67 65 1 + 53 67 66 1 + 53 67 67 1 + 53 67 68 1 + 53 67 69 1 + 53 67 70 1 + 53 67 71 1 + 53 67 72 1 + 53 67 73 1 + 53 67 74 1 + 53 67 75 1 + 53 67 76 1 + 53 67 77 1 + 53 67 78 1 + 53 67 79 1 + 53 67 80 1 + 53 67 81 1 + 53 67 82 1 + 53 67 83 1 + 53 67 84 1 + 53 67 85 1 + 53 67 86 0.97359 + 53 67 87 0.106145 + 53 68 40 0.0230554 + 53 68 41 0.882677 + 53 68 42 1 + 53 68 43 1 + 53 68 44 1 + 53 68 45 1 + 53 68 46 1 + 53 68 47 1 + 53 68 48 1 + 53 68 49 1 + 53 68 50 1 + 53 68 51 1 + 53 68 52 1 + 53 68 53 1 + 53 68 54 1 + 53 68 55 1 + 53 68 56 1 + 53 68 57 1 + 53 68 58 1 + 53 68 59 1 + 53 68 60 1 + 53 68 61 1 + 53 68 62 1 + 53 68 63 1 + 53 68 64 1 + 53 68 65 1 + 53 68 66 1 + 53 68 67 1 + 53 68 68 1 + 53 68 69 1 + 53 68 70 1 + 53 68 71 1 + 53 68 72 1 + 53 68 73 1 + 53 68 74 1 + 53 68 75 1 + 53 68 76 1 + 53 68 77 1 + 53 68 78 1 + 53 68 79 1 + 53 68 80 1 + 53 68 81 1 + 53 68 82 1 + 53 68 83 1 + 53 68 84 1 + 53 68 85 1 + 53 68 86 0.882677 + 53 68 87 0.0230554 + 53 69 40 4.51737e-05 + 53 69 41 0.686307 + 53 69 42 1 + 53 69 43 1 + 53 69 44 1 + 53 69 45 1 + 53 69 46 1 + 53 69 47 1 + 53 69 48 1 + 53 69 49 1 + 53 69 50 1 + 53 69 51 1 + 53 69 52 1 + 53 69 53 1 + 53 69 54 1 + 53 69 55 1 + 53 69 56 1 + 53 69 57 1 + 53 69 58 1 + 53 69 59 1 + 53 69 60 1 + 53 69 61 1 + 53 69 62 1 + 53 69 63 1 + 53 69 64 1 + 53 69 65 1 + 53 69 66 1 + 53 69 67 1 + 53 69 68 1 + 53 69 69 1 + 53 69 70 1 + 53 69 71 1 + 53 69 72 1 + 53 69 73 1 + 53 69 74 1 + 53 69 75 1 + 53 69 76 1 + 53 69 77 1 + 53 69 78 1 + 53 69 79 1 + 53 69 80 1 + 53 69 81 1 + 53 69 82 1 + 53 69 83 1 + 53 69 84 1 + 53 69 85 1 + 53 69 86 0.686307 + 53 69 87 4.51737e-05 + 53 70 41 0.42026 + 53 70 42 1 + 53 70 43 1 + 53 70 44 1 + 53 70 45 1 + 53 70 46 1 + 53 70 47 1 + 53 70 48 1 + 53 70 49 1 + 53 70 50 1 + 53 70 51 1 + 53 70 52 1 + 53 70 53 1 + 53 70 54 1 + 53 70 55 1 + 53 70 56 1 + 53 70 57 1 + 53 70 58 1 + 53 70 59 1 + 53 70 60 1 + 53 70 61 1 + 53 70 62 1 + 53 70 63 1 + 53 70 64 1 + 53 70 65 1 + 53 70 66 1 + 53 70 67 1 + 53 70 68 1 + 53 70 69 1 + 53 70 70 1 + 53 70 71 1 + 53 70 72 1 + 53 70 73 1 + 53 70 74 1 + 53 70 75 1 + 53 70 76 1 + 53 70 77 1 + 53 70 78 1 + 53 70 79 1 + 53 70 80 1 + 53 70 81 1 + 53 70 82 1 + 53 70 83 1 + 53 70 84 1 + 53 70 85 1 + 53 70 86 0.42026 + 53 71 41 0.134362 + 53 71 42 0.971405 + 53 71 43 1 + 53 71 44 1 + 53 71 45 1 + 53 71 46 1 + 53 71 47 1 + 53 71 48 1 + 53 71 49 1 + 53 71 50 1 + 53 71 51 1 + 53 71 52 1 + 53 71 53 1 + 53 71 54 1 + 53 71 55 1 + 53 71 56 1 + 53 71 57 1 + 53 71 58 1 + 53 71 59 1 + 53 71 60 1 + 53 71 61 1 + 53 71 62 1 + 53 71 63 1 + 53 71 64 1 + 53 71 65 1 + 53 71 66 1 + 53 71 67 1 + 53 71 68 1 + 53 71 69 1 + 53 71 70 1 + 53 71 71 1 + 53 71 72 1 + 53 71 73 1 + 53 71 74 1 + 53 71 75 1 + 53 71 76 1 + 53 71 77 1 + 53 71 78 1 + 53 71 79 1 + 53 71 80 1 + 53 71 81 1 + 53 71 82 1 + 53 71 83 1 + 53 71 84 1 + 53 71 85 0.971405 + 53 71 86 0.134362 + 53 72 41 0.00460294 + 53 72 42 0.736168 + 53 72 43 1 + 53 72 44 1 + 53 72 45 1 + 53 72 46 1 + 53 72 47 1 + 53 72 48 1 + 53 72 49 1 + 53 72 50 1 + 53 72 51 1 + 53 72 52 1 + 53 72 53 1 + 53 72 54 1 + 53 72 55 1 + 53 72 56 1 + 53 72 57 1 + 53 72 58 1 + 53 72 59 1 + 53 72 60 1 + 53 72 61 1 + 53 72 62 1 + 53 72 63 1 + 53 72 64 1 + 53 72 65 1 + 53 72 66 1 + 53 72 67 1 + 53 72 68 1 + 53 72 69 1 + 53 72 70 1 + 53 72 71 1 + 53 72 72 1 + 53 72 73 1 + 53 72 74 1 + 53 72 75 1 + 53 72 76 1 + 53 72 77 1 + 53 72 78 1 + 53 72 79 1 + 53 72 80 1 + 53 72 81 1 + 53 72 82 1 + 53 72 83 1 + 53 72 84 1 + 53 72 85 0.736168 + 53 72 86 0.00460294 + 53 73 42 0.325363 + 53 73 43 0.997314 + 53 73 44 1 + 53 73 45 1 + 53 73 46 1 + 53 73 47 1 + 53 73 48 1 + 53 73 49 1 + 53 73 50 1 + 53 73 51 1 + 53 73 52 1 + 53 73 53 1 + 53 73 54 1 + 53 73 55 1 + 53 73 56 1 + 53 73 57 1 + 53 73 58 1 + 53 73 59 1 + 53 73 60 1 + 53 73 61 1 + 53 73 62 1 + 53 73 63 1 + 53 73 64 1 + 53 73 65 1 + 53 73 66 1 + 53 73 67 1 + 53 73 68 1 + 53 73 69 1 + 53 73 70 1 + 53 73 71 1 + 53 73 72 1 + 53 73 73 1 + 53 73 74 1 + 53 73 75 1 + 53 73 76 1 + 53 73 77 1 + 53 73 78 1 + 53 73 79 1 + 53 73 80 1 + 53 73 81 1 + 53 73 82 1 + 53 73 83 1 + 53 73 84 0.997314 + 53 73 85 0.325363 + 53 74 42 0.0282569 + 53 74 43 0.820029 + 53 74 44 1 + 53 74 45 1 + 53 74 46 1 + 53 74 47 1 + 53 74 48 1 + 53 74 49 1 + 53 74 50 1 + 53 74 51 1 + 53 74 52 1 + 53 74 53 1 + 53 74 54 1 + 53 74 55 1 + 53 74 56 1 + 53 74 57 1 + 53 74 58 1 + 53 74 59 1 + 53 74 60 1 + 53 74 61 1 + 53 74 62 1 + 53 74 63 1 + 53 74 64 1 + 53 74 65 1 + 53 74 66 1 + 53 74 67 1 + 53 74 68 1 + 53 74 69 1 + 53 74 70 1 + 53 74 71 1 + 53 74 72 1 + 53 74 73 1 + 53 74 74 1 + 53 74 75 1 + 53 74 76 1 + 53 74 77 1 + 53 74 78 1 + 53 74 79 1 + 53 74 80 1 + 53 74 81 1 + 53 74 82 1 + 53 74 83 1 + 53 74 84 0.820029 + 53 74 85 0.0282569 + 53 75 43 0.320873 + 53 75 44 0.992776 + 53 75 45 1 + 53 75 46 1 + 53 75 47 1 + 53 75 48 1 + 53 75 49 1 + 53 75 50 1 + 53 75 51 1 + 53 75 52 1 + 53 75 53 1 + 53 75 54 1 + 53 75 55 1 + 53 75 56 1 + 53 75 57 1 + 53 75 58 1 + 53 75 59 1 + 53 75 60 1 + 53 75 61 1 + 53 75 62 1 + 53 75 63 1 + 53 75 64 1 + 53 75 65 1 + 53 75 66 1 + 53 75 67 1 + 53 75 68 1 + 53 75 69 1 + 53 75 70 1 + 53 75 71 1 + 53 75 72 1 + 53 75 73 1 + 53 75 74 1 + 53 75 75 1 + 53 75 76 1 + 53 75 77 1 + 53 75 78 1 + 53 75 79 1 + 53 75 80 1 + 53 75 81 1 + 53 75 82 1 + 53 75 83 0.992776 + 53 75 84 0.320873 + 53 76 43 0.0123857 + 53 76 44 0.701471 + 53 76 45 1 + 53 76 46 1 + 53 76 47 1 + 53 76 48 1 + 53 76 49 1 + 53 76 50 1 + 53 76 51 1 + 53 76 52 1 + 53 76 53 1 + 53 76 54 1 + 53 76 55 1 + 53 76 56 1 + 53 76 57 1 + 53 76 58 1 + 53 76 59 1 + 53 76 60 1 + 53 76 61 1 + 53 76 62 1 + 53 76 63 1 + 53 76 64 1 + 53 76 65 1 + 53 76 66 1 + 53 76 67 1 + 53 76 68 1 + 53 76 69 1 + 53 76 70 1 + 53 76 71 1 + 53 76 72 1 + 53 76 73 1 + 53 76 74 1 + 53 76 75 1 + 53 76 76 1 + 53 76 77 1 + 53 76 78 1 + 53 76 79 1 + 53 76 80 1 + 53 76 81 1 + 53 76 82 1 + 53 76 83 0.701471 + 53 76 84 0.0123857 + 53 77 44 0.129326 + 53 77 45 0.913417 + 53 77 46 1 + 53 77 47 1 + 53 77 48 1 + 53 77 49 1 + 53 77 50 1 + 53 77 51 1 + 53 77 52 1 + 53 77 53 1 + 53 77 54 1 + 53 77 55 1 + 53 77 56 1 + 53 77 57 1 + 53 77 58 1 + 53 77 59 1 + 53 77 60 1 + 53 77 61 1 + 53 77 62 1 + 53 77 63 1 + 53 77 64 1 + 53 77 65 1 + 53 77 66 1 + 53 77 67 1 + 53 77 68 1 + 53 77 69 1 + 53 77 70 1 + 53 77 71 1 + 53 77 72 1 + 53 77 73 1 + 53 77 74 1 + 53 77 75 1 + 53 77 76 1 + 53 77 77 1 + 53 77 78 1 + 53 77 79 1 + 53 77 80 1 + 53 77 81 1 + 53 77 82 0.913417 + 53 77 83 0.129326 + 53 78 45 0.315112 + 53 78 46 0.977331 + 53 78 47 1 + 53 78 48 1 + 53 78 49 1 + 53 78 50 1 + 53 78 51 1 + 53 78 52 1 + 53 78 53 1 + 53 78 54 1 + 53 78 55 1 + 53 78 56 1 + 53 78 57 1 + 53 78 58 1 + 53 78 59 1 + 53 78 60 1 + 53 78 61 1 + 53 78 62 1 + 53 78 63 1 + 53 78 64 1 + 53 78 65 1 + 53 78 66 1 + 53 78 67 1 + 53 78 68 1 + 53 78 69 1 + 53 78 70 1 + 53 78 71 1 + 53 78 72 1 + 53 78 73 1 + 53 78 74 1 + 53 78 75 1 + 53 78 76 1 + 53 78 77 1 + 53 78 78 1 + 53 78 79 1 + 53 78 80 1 + 53 78 81 0.977331 + 53 78 82 0.315112 + 53 79 45 0.00195783 + 53 79 46 0.459326 + 53 79 47 0.991434 + 53 79 48 1 + 53 79 49 1 + 53 79 50 1 + 53 79 51 1 + 53 79 52 1 + 53 79 53 1 + 53 79 54 1 + 53 79 55 1 + 53 79 56 1 + 53 79 57 1 + 53 79 58 1 + 53 79 59 1 + 53 79 60 1 + 53 79 61 1 + 53 79 62 1 + 53 79 63 1 + 53 79 64 1 + 53 79 65 1 + 53 79 66 1 + 53 79 67 1 + 53 79 68 1 + 53 79 69 1 + 53 79 70 1 + 53 79 71 1 + 53 79 72 1 + 53 79 73 1 + 53 79 74 1 + 53 79 75 1 + 53 79 76 1 + 53 79 77 1 + 53 79 78 1 + 53 79 79 1 + 53 79 80 0.991434 + 53 79 81 0.459326 + 53 79 82 0.00195783 + 53 80 46 0.00833029 + 53 80 47 0.510119 + 53 80 48 0.991434 + 53 80 49 1 + 53 80 50 1 + 53 80 51 1 + 53 80 52 1 + 53 80 53 1 + 53 80 54 1 + 53 80 55 1 + 53 80 56 1 + 53 80 57 1 + 53 80 58 1 + 53 80 59 1 + 53 80 60 1 + 53 80 61 1 + 53 80 62 1 + 53 80 63 1 + 53 80 64 1 + 53 80 65 1 + 53 80 66 1 + 53 80 67 1 + 53 80 68 1 + 53 80 69 1 + 53 80 70 1 + 53 80 71 1 + 53 80 72 1 + 53 80 73 1 + 53 80 74 1 + 53 80 75 1 + 53 80 76 1 + 53 80 77 1 + 53 80 78 1 + 53 80 79 0.991434 + 53 80 80 0.510119 + 53 80 81 0.00833029 + 53 81 47 0.00833029 + 53 81 48 0.459326 + 53 81 49 0.977331 + 53 81 50 1 + 53 81 51 1 + 53 81 52 1 + 53 81 53 1 + 53 81 54 1 + 53 81 55 1 + 53 81 56 1 + 53 81 57 1 + 53 81 58 1 + 53 81 59 1 + 53 81 60 1 + 53 81 61 1 + 53 81 62 1 + 53 81 63 1 + 53 81 64 1 + 53 81 65 1 + 53 81 66 1 + 53 81 67 1 + 53 81 68 1 + 53 81 69 1 + 53 81 70 1 + 53 81 71 1 + 53 81 72 1 + 53 81 73 1 + 53 81 74 1 + 53 81 75 1 + 53 81 76 1 + 53 81 77 1 + 53 81 78 0.977331 + 53 81 79 0.459326 + 53 81 80 0.00833029 + 53 82 48 0.00195783 + 53 82 49 0.315112 + 53 82 50 0.913417 + 53 82 51 1 + 53 82 52 1 + 53 82 53 1 + 53 82 54 1 + 53 82 55 1 + 53 82 56 1 + 53 82 57 1 + 53 82 58 1 + 53 82 59 1 + 53 82 60 1 + 53 82 61 1 + 53 82 62 1 + 53 82 63 1 + 53 82 64 1 + 53 82 65 1 + 53 82 66 1 + 53 82 67 1 + 53 82 68 1 + 53 82 69 1 + 53 82 70 1 + 53 82 71 1 + 53 82 72 1 + 53 82 73 1 + 53 82 74 1 + 53 82 75 1 + 53 82 76 1 + 53 82 77 0.913417 + 53 82 78 0.315112 + 53 82 79 0.00195783 + 53 83 50 0.129326 + 53 83 51 0.701471 + 53 83 52 0.992776 + 53 83 53 1 + 53 83 54 1 + 53 83 55 1 + 53 83 56 1 + 53 83 57 1 + 53 83 58 1 + 53 83 59 1 + 53 83 60 1 + 53 83 61 1 + 53 83 62 1 + 53 83 63 1 + 53 83 64 1 + 53 83 65 1 + 53 83 66 1 + 53 83 67 1 + 53 83 68 1 + 53 83 69 1 + 53 83 70 1 + 53 83 71 1 + 53 83 72 1 + 53 83 73 1 + 53 83 74 1 + 53 83 75 0.992776 + 53 83 76 0.701471 + 53 83 77 0.129326 + 53 84 51 0.0123857 + 53 84 52 0.320873 + 53 84 53 0.820029 + 53 84 54 0.997314 + 53 84 55 1 + 53 84 56 1 + 53 84 57 1 + 53 84 58 1 + 53 84 59 1 + 53 84 60 1 + 53 84 61 1 + 53 84 62 1 + 53 84 63 1 + 53 84 64 1 + 53 84 65 1 + 53 84 66 1 + 53 84 67 1 + 53 84 68 1 + 53 84 69 1 + 53 84 70 1 + 53 84 71 1 + 53 84 72 1 + 53 84 73 0.997314 + 53 84 74 0.820029 + 53 84 75 0.320873 + 53 84 76 0.0123857 + 53 85 53 0.0282569 + 53 85 54 0.325363 + 53 85 55 0.736168 + 53 85 56 0.971405 + 53 85 57 1 + 53 85 58 1 + 53 85 59 1 + 53 85 60 1 + 53 85 61 1 + 53 85 62 1 + 53 85 63 1 + 53 85 64 1 + 53 85 65 1 + 53 85 66 1 + 53 85 67 1 + 53 85 68 1 + 53 85 69 1 + 53 85 70 1 + 53 85 71 0.971405 + 53 85 72 0.736168 + 53 85 73 0.325363 + 53 85 74 0.0282569 + 53 86 55 0.00460294 + 53 86 56 0.134362 + 53 86 57 0.42026 + 53 86 58 0.686307 + 53 86 59 0.882677 + 53 86 60 0.97359 + 53 86 61 0.998593 + 53 86 62 1 + 53 86 63 1 + 53 86 64 1 + 53 86 65 1 + 53 86 66 0.998593 + 53 86 67 0.97359 + 53 86 68 0.882677 + 53 86 69 0.686307 + 53 86 70 0.42026 + 53 86 71 0.134362 + 53 86 72 0.00460294 + 53 87 58 4.51737e-05 + 53 87 59 0.0230554 + 53 87 60 0.106145 + 53 87 61 0.210787 + 53 87 62 0.295408 + 53 87 63 0.338304 + 53 87 64 0.338304 + 53 87 65 0.295408 + 53 87 66 0.210787 + 53 87 67 0.106145 + 53 87 68 0.0230554 + 53 87 69 4.51737e-05 + 54 40 57 0.013123 + 54 40 58 0.137253 + 54 40 59 0.338304 + 54 40 60 0.509102 + 54 40 61 0.63639 + 54 40 62 0.720869 + 54 40 63 0.762996 + 54 40 64 0.762996 + 54 40 65 0.720869 + 54 40 66 0.63639 + 54 40 67 0.509102 + 54 40 68 0.338304 + 54 40 69 0.137253 + 54 40 70 0.013123 + 54 41 54 0.0092981 + 54 41 55 0.205791 + 54 41 56 0.553699 + 54 41 57 0.848902 + 54 41 58 0.985777 + 54 41 59 1 + 54 41 60 1 + 54 41 61 1 + 54 41 62 1 + 54 41 63 1 + 54 41 64 1 + 54 41 65 1 + 54 41 66 1 + 54 41 67 1 + 54 41 68 1 + 54 41 69 0.985777 + 54 41 70 0.848902 + 54 41 71 0.553699 + 54 41 72 0.205791 + 54 41 73 0.0092981 + 54 42 52 0.0182812 + 54 42 53 0.325363 + 54 42 54 0.777432 + 54 42 55 0.990286 + 54 42 56 1 + 54 42 57 1 + 54 42 58 1 + 54 42 59 1 + 54 42 60 1 + 54 42 61 1 + 54 42 62 1 + 54 42 63 1 + 54 42 64 1 + 54 42 65 1 + 54 42 66 1 + 54 42 67 1 + 54 42 68 1 + 54 42 69 1 + 54 42 70 1 + 54 42 71 1 + 54 42 72 0.990286 + 54 42 73 0.777432 + 54 42 74 0.325363 + 54 42 75 0.0182812 + 54 43 50 0.00135226 + 54 43 51 0.23592 + 54 43 52 0.78197 + 54 43 53 0.997314 + 54 43 54 1 + 54 43 55 1 + 54 43 56 1 + 54 43 57 1 + 54 43 58 1 + 54 43 59 1 + 54 43 60 1 + 54 43 61 1 + 54 43 62 1 + 54 43 63 1 + 54 43 64 1 + 54 43 65 1 + 54 43 66 1 + 54 43 67 1 + 54 43 68 1 + 54 43 69 1 + 54 43 70 1 + 54 43 71 1 + 54 43 72 1 + 54 43 73 1 + 54 43 74 0.997314 + 54 43 75 0.78197 + 54 43 76 0.23592 + 54 43 77 0.00135226 + 54 44 49 0.0436378 + 54 44 50 0.559714 + 54 44 51 0.979001 + 54 44 52 1 + 54 44 53 1 + 54 44 54 1 + 54 44 55 1 + 54 44 56 1 + 54 44 57 1 + 54 44 58 1 + 54 44 59 1 + 54 44 60 1 + 54 44 61 1 + 54 44 62 1 + 54 44 63 1 + 54 44 64 1 + 54 44 65 1 + 54 44 66 1 + 54 44 67 1 + 54 44 68 1 + 54 44 69 1 + 54 44 70 1 + 54 44 71 1 + 54 44 72 1 + 54 44 73 1 + 54 44 74 1 + 54 44 75 1 + 54 44 76 0.979001 + 54 44 77 0.559714 + 54 44 78 0.0436378 + 54 45 48 0.129721 + 54 45 49 0.78779 + 54 45 50 0.999965 + 54 45 51 1 + 54 45 52 1 + 54 45 53 1 + 54 45 54 1 + 54 45 55 1 + 54 45 56 1 + 54 45 57 1 + 54 45 58 1 + 54 45 59 1 + 54 45 60 1 + 54 45 61 1 + 54 45 62 1 + 54 45 63 1 + 54 45 64 1 + 54 45 65 1 + 54 45 66 1 + 54 45 67 1 + 54 45 68 1 + 54 45 69 1 + 54 45 70 1 + 54 45 71 1 + 54 45 72 1 + 54 45 73 1 + 54 45 74 1 + 54 45 75 1 + 54 45 76 1 + 54 45 77 0.999965 + 54 45 78 0.78779 + 54 45 79 0.129721 + 54 46 47 0.192797 + 54 46 48 0.887171 + 54 46 49 1 + 54 46 50 1 + 54 46 51 1 + 54 46 52 1 + 54 46 53 1 + 54 46 54 1 + 54 46 55 1 + 54 46 56 1 + 54 46 57 1 + 54 46 58 1 + 54 46 59 1 + 54 46 60 1 + 54 46 61 1 + 54 46 62 1 + 54 46 63 1 + 54 46 64 1 + 54 46 65 1 + 54 46 66 1 + 54 46 67 1 + 54 46 68 1 + 54 46 69 1 + 54 46 70 1 + 54 46 71 1 + 54 46 72 1 + 54 46 73 1 + 54 46 74 1 + 54 46 75 1 + 54 46 76 1 + 54 46 77 1 + 54 46 78 1 + 54 46 79 0.887171 + 54 46 80 0.192797 + 54 47 46 0.192797 + 54 47 47 0.912465 + 54 47 48 1 + 54 47 49 1 + 54 47 50 1 + 54 47 51 1 + 54 47 52 1 + 54 47 53 1 + 54 47 54 1 + 54 47 55 1 + 54 47 56 1 + 54 47 57 1 + 54 47 58 1 + 54 47 59 1 + 54 47 60 1 + 54 47 61 1 + 54 47 62 1 + 54 47 63 1 + 54 47 64 1 + 54 47 65 1 + 54 47 66 1 + 54 47 67 1 + 54 47 68 1 + 54 47 69 1 + 54 47 70 1 + 54 47 71 1 + 54 47 72 1 + 54 47 73 1 + 54 47 74 1 + 54 47 75 1 + 54 47 76 1 + 54 47 77 1 + 54 47 78 1 + 54 47 79 1 + 54 47 80 0.912465 + 54 47 81 0.192797 + 54 48 45 0.129721 + 54 48 46 0.887171 + 54 48 47 1 + 54 48 48 1 + 54 48 49 1 + 54 48 50 1 + 54 48 51 1 + 54 48 52 1 + 54 48 53 1 + 54 48 54 1 + 54 48 55 1 + 54 48 56 1 + 54 48 57 1 + 54 48 58 1 + 54 48 59 1 + 54 48 60 1 + 54 48 61 1 + 54 48 62 1 + 54 48 63 1 + 54 48 64 1 + 54 48 65 1 + 54 48 66 1 + 54 48 67 1 + 54 48 68 1 + 54 48 69 1 + 54 48 70 1 + 54 48 71 1 + 54 48 72 1 + 54 48 73 1 + 54 48 74 1 + 54 48 75 1 + 54 48 76 1 + 54 48 77 1 + 54 48 78 1 + 54 48 79 1 + 54 48 80 1 + 54 48 81 0.887171 + 54 48 82 0.129721 + 54 49 44 0.0436378 + 54 49 45 0.78779 + 54 49 46 1 + 54 49 47 1 + 54 49 48 1 + 54 49 49 1 + 54 49 50 1 + 54 49 51 1 + 54 49 52 1 + 54 49 53 1 + 54 49 54 1 + 54 49 55 1 + 54 49 56 1 + 54 49 57 1 + 54 49 58 1 + 54 49 59 1 + 54 49 60 1 + 54 49 61 1 + 54 49 62 1 + 54 49 63 1 + 54 49 64 1 + 54 49 65 1 + 54 49 66 1 + 54 49 67 1 + 54 49 68 1 + 54 49 69 1 + 54 49 70 1 + 54 49 71 1 + 54 49 72 1 + 54 49 73 1 + 54 49 74 1 + 54 49 75 1 + 54 49 76 1 + 54 49 77 1 + 54 49 78 1 + 54 49 79 1 + 54 49 80 1 + 54 49 81 1 + 54 49 82 0.78779 + 54 49 83 0.0436378 + 54 50 43 0.00135226 + 54 50 44 0.559714 + 54 50 45 0.999965 + 54 50 46 1 + 54 50 47 1 + 54 50 48 1 + 54 50 49 1 + 54 50 50 1 + 54 50 51 1 + 54 50 52 1 + 54 50 53 1 + 54 50 54 1 + 54 50 55 1 + 54 50 56 1 + 54 50 57 1 + 54 50 58 1 + 54 50 59 1 + 54 50 60 1 + 54 50 61 1 + 54 50 62 1 + 54 50 63 1 + 54 50 64 1 + 54 50 65 1 + 54 50 66 1 + 54 50 67 1 + 54 50 68 1 + 54 50 69 1 + 54 50 70 1 + 54 50 71 1 + 54 50 72 1 + 54 50 73 1 + 54 50 74 1 + 54 50 75 1 + 54 50 76 1 + 54 50 77 1 + 54 50 78 1 + 54 50 79 1 + 54 50 80 1 + 54 50 81 1 + 54 50 82 0.999965 + 54 50 83 0.559714 + 54 50 84 0.00135226 + 54 51 43 0.23592 + 54 51 44 0.979001 + 54 51 45 1 + 54 51 46 1 + 54 51 47 1 + 54 51 48 1 + 54 51 49 1 + 54 51 50 1 + 54 51 51 1 + 54 51 52 1 + 54 51 53 1 + 54 51 54 1 + 54 51 55 1 + 54 51 56 1 + 54 51 57 1 + 54 51 58 1 + 54 51 59 1 + 54 51 60 1 + 54 51 61 1 + 54 51 62 1 + 54 51 63 1 + 54 51 64 1 + 54 51 65 1 + 54 51 66 1 + 54 51 67 1 + 54 51 68 1 + 54 51 69 1 + 54 51 70 1 + 54 51 71 1 + 54 51 72 1 + 54 51 73 1 + 54 51 74 1 + 54 51 75 1 + 54 51 76 1 + 54 51 77 1 + 54 51 78 1 + 54 51 79 1 + 54 51 80 1 + 54 51 81 1 + 54 51 82 1 + 54 51 83 0.979001 + 54 51 84 0.23592 + 54 52 42 0.0182812 + 54 52 43 0.78197 + 54 52 44 1 + 54 52 45 1 + 54 52 46 1 + 54 52 47 1 + 54 52 48 1 + 54 52 49 1 + 54 52 50 1 + 54 52 51 1 + 54 52 52 1 + 54 52 53 1 + 54 52 54 1 + 54 52 55 1 + 54 52 56 1 + 54 52 57 1 + 54 52 58 1 + 54 52 59 1 + 54 52 60 1 + 54 52 61 1 + 54 52 62 1 + 54 52 63 1 + 54 52 64 1 + 54 52 65 1 + 54 52 66 1 + 54 52 67 1 + 54 52 68 1 + 54 52 69 1 + 54 52 70 1 + 54 52 71 1 + 54 52 72 1 + 54 52 73 1 + 54 52 74 1 + 54 52 75 1 + 54 52 76 1 + 54 52 77 1 + 54 52 78 1 + 54 52 79 1 + 54 52 80 1 + 54 52 81 1 + 54 52 82 1 + 54 52 83 1 + 54 52 84 0.78197 + 54 52 85 0.0182812 + 54 53 42 0.325363 + 54 53 43 0.997314 + 54 53 44 1 + 54 53 45 1 + 54 53 46 1 + 54 53 47 1 + 54 53 48 1 + 54 53 49 1 + 54 53 50 1 + 54 53 51 1 + 54 53 52 1 + 54 53 53 1 + 54 53 54 1 + 54 53 55 1 + 54 53 56 1 + 54 53 57 1 + 54 53 58 1 + 54 53 59 1 + 54 53 60 1 + 54 53 61 1 + 54 53 62 1 + 54 53 63 1 + 54 53 64 1 + 54 53 65 1 + 54 53 66 1 + 54 53 67 1 + 54 53 68 1 + 54 53 69 1 + 54 53 70 1 + 54 53 71 1 + 54 53 72 1 + 54 53 73 1 + 54 53 74 1 + 54 53 75 1 + 54 53 76 1 + 54 53 77 1 + 54 53 78 1 + 54 53 79 1 + 54 53 80 1 + 54 53 81 1 + 54 53 82 1 + 54 53 83 1 + 54 53 84 0.997314 + 54 53 85 0.325363 + 54 54 41 0.0092981 + 54 54 42 0.777432 + 54 54 43 1 + 54 54 44 1 + 54 54 45 1 + 54 54 46 1 + 54 54 47 1 + 54 54 48 1 + 54 54 49 1 + 54 54 50 1 + 54 54 51 1 + 54 54 52 1 + 54 54 53 1 + 54 54 54 1 + 54 54 55 1 + 54 54 56 1 + 54 54 57 1 + 54 54 58 1 + 54 54 59 1 + 54 54 60 1 + 54 54 61 1 + 54 54 62 1 + 54 54 63 1 + 54 54 64 1 + 54 54 65 1 + 54 54 66 1 + 54 54 67 1 + 54 54 68 1 + 54 54 69 1 + 54 54 70 1 + 54 54 71 1 + 54 54 72 1 + 54 54 73 1 + 54 54 74 1 + 54 54 75 1 + 54 54 76 1 + 54 54 77 1 + 54 54 78 1 + 54 54 79 1 + 54 54 80 1 + 54 54 81 1 + 54 54 82 1 + 54 54 83 1 + 54 54 84 1 + 54 54 85 0.777432 + 54 54 86 0.0092981 + 54 55 41 0.205791 + 54 55 42 0.990286 + 54 55 43 1 + 54 55 44 1 + 54 55 45 1 + 54 55 46 1 + 54 55 47 1 + 54 55 48 1 + 54 55 49 1 + 54 55 50 1 + 54 55 51 1 + 54 55 52 1 + 54 55 53 1 + 54 55 54 1 + 54 55 55 1 + 54 55 56 1 + 54 55 57 1 + 54 55 58 1 + 54 55 59 1 + 54 55 60 1 + 54 55 61 1 + 54 55 62 1 + 54 55 63 1 + 54 55 64 1 + 54 55 65 1 + 54 55 66 1 + 54 55 67 1 + 54 55 68 1 + 54 55 69 1 + 54 55 70 1 + 54 55 71 1 + 54 55 72 1 + 54 55 73 1 + 54 55 74 1 + 54 55 75 1 + 54 55 76 1 + 54 55 77 1 + 54 55 78 1 + 54 55 79 1 + 54 55 80 1 + 54 55 81 1 + 54 55 82 1 + 54 55 83 1 + 54 55 84 1 + 54 55 85 0.990286 + 54 55 86 0.205791 + 54 56 41 0.553699 + 54 56 42 1 + 54 56 43 1 + 54 56 44 1 + 54 56 45 1 + 54 56 46 1 + 54 56 47 1 + 54 56 48 1 + 54 56 49 1 + 54 56 50 1 + 54 56 51 1 + 54 56 52 1 + 54 56 53 1 + 54 56 54 1 + 54 56 55 1 + 54 56 56 1 + 54 56 57 1 + 54 56 58 1 + 54 56 59 1 + 54 56 60 1 + 54 56 61 1 + 54 56 62 1 + 54 56 63 1 + 54 56 64 1 + 54 56 65 1 + 54 56 66 1 + 54 56 67 1 + 54 56 68 1 + 54 56 69 1 + 54 56 70 1 + 54 56 71 1 + 54 56 72 1 + 54 56 73 1 + 54 56 74 1 + 54 56 75 1 + 54 56 76 1 + 54 56 77 1 + 54 56 78 1 + 54 56 79 1 + 54 56 80 1 + 54 56 81 1 + 54 56 82 1 + 54 56 83 1 + 54 56 84 1 + 54 56 85 1 + 54 56 86 0.553699 + 54 57 40 0.013123 + 54 57 41 0.848902 + 54 57 42 1 + 54 57 43 1 + 54 57 44 1 + 54 57 45 1 + 54 57 46 1 + 54 57 47 1 + 54 57 48 1 + 54 57 49 1 + 54 57 50 1 + 54 57 51 1 + 54 57 52 1 + 54 57 53 1 + 54 57 54 1 + 54 57 55 1 + 54 57 56 1 + 54 57 57 1 + 54 57 58 1 + 54 57 59 1 + 54 57 60 1 + 54 57 61 1 + 54 57 62 1 + 54 57 63 1 + 54 57 64 1 + 54 57 65 1 + 54 57 66 1 + 54 57 67 1 + 54 57 68 1 + 54 57 69 1 + 54 57 70 1 + 54 57 71 1 + 54 57 72 1 + 54 57 73 1 + 54 57 74 1 + 54 57 75 1 + 54 57 76 1 + 54 57 77 1 + 54 57 78 1 + 54 57 79 1 + 54 57 80 1 + 54 57 81 1 + 54 57 82 1 + 54 57 83 1 + 54 57 84 1 + 54 57 85 1 + 54 57 86 0.848902 + 54 57 87 0.013123 + 54 58 40 0.137253 + 54 58 41 0.985777 + 54 58 42 1 + 54 58 43 1 + 54 58 44 1 + 54 58 45 1 + 54 58 46 1 + 54 58 47 1 + 54 58 48 1 + 54 58 49 1 + 54 58 50 1 + 54 58 51 1 + 54 58 52 1 + 54 58 53 1 + 54 58 54 1 + 54 58 55 1 + 54 58 56 1 + 54 58 57 1 + 54 58 58 1 + 54 58 59 1 + 54 58 60 1 + 54 58 61 1 + 54 58 62 1 + 54 58 63 1 + 54 58 64 1 + 54 58 65 1 + 54 58 66 1 + 54 58 67 1 + 54 58 68 1 + 54 58 69 1 + 54 58 70 1 + 54 58 71 1 + 54 58 72 1 + 54 58 73 1 + 54 58 74 1 + 54 58 75 1 + 54 58 76 1 + 54 58 77 1 + 54 58 78 1 + 54 58 79 1 + 54 58 80 1 + 54 58 81 1 + 54 58 82 1 + 54 58 83 1 + 54 58 84 1 + 54 58 85 1 + 54 58 86 0.985777 + 54 58 87 0.137253 + 54 59 40 0.338304 + 54 59 41 1 + 54 59 42 1 + 54 59 43 1 + 54 59 44 1 + 54 59 45 1 + 54 59 46 1 + 54 59 47 1 + 54 59 48 1 + 54 59 49 1 + 54 59 50 1 + 54 59 51 1 + 54 59 52 1 + 54 59 53 1 + 54 59 54 1 + 54 59 55 1 + 54 59 56 1 + 54 59 57 1 + 54 59 58 1 + 54 59 59 1 + 54 59 60 1 + 54 59 61 1 + 54 59 62 1 + 54 59 63 1 + 54 59 64 1 + 54 59 65 1 + 54 59 66 1 + 54 59 67 1 + 54 59 68 1 + 54 59 69 1 + 54 59 70 1 + 54 59 71 1 + 54 59 72 1 + 54 59 73 1 + 54 59 74 1 + 54 59 75 1 + 54 59 76 1 + 54 59 77 1 + 54 59 78 1 + 54 59 79 1 + 54 59 80 1 + 54 59 81 1 + 54 59 82 1 + 54 59 83 1 + 54 59 84 1 + 54 59 85 1 + 54 59 86 1 + 54 59 87 0.338304 + 54 60 40 0.509102 + 54 60 41 1 + 54 60 42 1 + 54 60 43 1 + 54 60 44 1 + 54 60 45 1 + 54 60 46 1 + 54 60 47 1 + 54 60 48 1 + 54 60 49 1 + 54 60 50 1 + 54 60 51 1 + 54 60 52 1 + 54 60 53 1 + 54 60 54 1 + 54 60 55 1 + 54 60 56 1 + 54 60 57 1 + 54 60 58 1 + 54 60 59 1 + 54 60 60 1 + 54 60 61 1 + 54 60 62 1 + 54 60 63 1 + 54 60 64 1 + 54 60 65 1 + 54 60 66 1 + 54 60 67 1 + 54 60 68 1 + 54 60 69 1 + 54 60 70 1 + 54 60 71 1 + 54 60 72 1 + 54 60 73 1 + 54 60 74 1 + 54 60 75 1 + 54 60 76 1 + 54 60 77 1 + 54 60 78 1 + 54 60 79 1 + 54 60 80 1 + 54 60 81 1 + 54 60 82 1 + 54 60 83 1 + 54 60 84 1 + 54 60 85 1 + 54 60 86 1 + 54 60 87 0.509102 + 54 61 40 0.63639 + 54 61 41 1 + 54 61 42 1 + 54 61 43 1 + 54 61 44 1 + 54 61 45 1 + 54 61 46 1 + 54 61 47 1 + 54 61 48 1 + 54 61 49 1 + 54 61 50 1 + 54 61 51 1 + 54 61 52 1 + 54 61 53 1 + 54 61 54 1 + 54 61 55 1 + 54 61 56 1 + 54 61 57 1 + 54 61 58 1 + 54 61 59 1 + 54 61 60 1 + 54 61 61 1 + 54 61 62 1 + 54 61 63 1 + 54 61 64 1 + 54 61 65 1 + 54 61 66 1 + 54 61 67 1 + 54 61 68 1 + 54 61 69 1 + 54 61 70 1 + 54 61 71 1 + 54 61 72 1 + 54 61 73 1 + 54 61 74 1 + 54 61 75 1 + 54 61 76 1 + 54 61 77 1 + 54 61 78 1 + 54 61 79 1 + 54 61 80 1 + 54 61 81 1 + 54 61 82 1 + 54 61 83 1 + 54 61 84 1 + 54 61 85 1 + 54 61 86 1 + 54 61 87 0.63639 + 54 62 40 0.720869 + 54 62 41 1 + 54 62 42 1 + 54 62 43 1 + 54 62 44 1 + 54 62 45 1 + 54 62 46 1 + 54 62 47 1 + 54 62 48 1 + 54 62 49 1 + 54 62 50 1 + 54 62 51 1 + 54 62 52 1 + 54 62 53 1 + 54 62 54 1 + 54 62 55 1 + 54 62 56 1 + 54 62 57 1 + 54 62 58 1 + 54 62 59 1 + 54 62 60 1 + 54 62 61 1 + 54 62 62 1 + 54 62 63 1 + 54 62 64 1 + 54 62 65 1 + 54 62 66 1 + 54 62 67 1 + 54 62 68 1 + 54 62 69 1 + 54 62 70 1 + 54 62 71 1 + 54 62 72 1 + 54 62 73 1 + 54 62 74 1 + 54 62 75 1 + 54 62 76 1 + 54 62 77 1 + 54 62 78 1 + 54 62 79 1 + 54 62 80 1 + 54 62 81 1 + 54 62 82 1 + 54 62 83 1 + 54 62 84 1 + 54 62 85 1 + 54 62 86 1 + 54 62 87 0.720869 + 54 63 40 0.762996 + 54 63 41 1 + 54 63 42 1 + 54 63 43 1 + 54 63 44 1 + 54 63 45 1 + 54 63 46 1 + 54 63 47 1 + 54 63 48 1 + 54 63 49 1 + 54 63 50 1 + 54 63 51 1 + 54 63 52 1 + 54 63 53 1 + 54 63 54 1 + 54 63 55 1 + 54 63 56 1 + 54 63 57 1 + 54 63 58 1 + 54 63 59 1 + 54 63 60 1 + 54 63 61 1 + 54 63 62 1 + 54 63 63 1 + 54 63 64 1 + 54 63 65 1 + 54 63 66 1 + 54 63 67 1 + 54 63 68 1 + 54 63 69 1 + 54 63 70 1 + 54 63 71 1 + 54 63 72 1 + 54 63 73 1 + 54 63 74 1 + 54 63 75 1 + 54 63 76 1 + 54 63 77 1 + 54 63 78 1 + 54 63 79 1 + 54 63 80 1 + 54 63 81 1 + 54 63 82 1 + 54 63 83 1 + 54 63 84 1 + 54 63 85 1 + 54 63 86 1 + 54 63 87 0.762996 + 54 64 40 0.762996 + 54 64 41 1 + 54 64 42 1 + 54 64 43 1 + 54 64 44 1 + 54 64 45 1 + 54 64 46 1 + 54 64 47 1 + 54 64 48 1 + 54 64 49 1 + 54 64 50 1 + 54 64 51 1 + 54 64 52 1 + 54 64 53 1 + 54 64 54 1 + 54 64 55 1 + 54 64 56 1 + 54 64 57 1 + 54 64 58 1 + 54 64 59 1 + 54 64 60 1 + 54 64 61 1 + 54 64 62 1 + 54 64 63 1 + 54 64 64 1 + 54 64 65 1 + 54 64 66 1 + 54 64 67 1 + 54 64 68 1 + 54 64 69 1 + 54 64 70 1 + 54 64 71 1 + 54 64 72 1 + 54 64 73 1 + 54 64 74 1 + 54 64 75 1 + 54 64 76 1 + 54 64 77 1 + 54 64 78 1 + 54 64 79 1 + 54 64 80 1 + 54 64 81 1 + 54 64 82 1 + 54 64 83 1 + 54 64 84 1 + 54 64 85 1 + 54 64 86 1 + 54 64 87 0.762996 + 54 65 40 0.720869 + 54 65 41 1 + 54 65 42 1 + 54 65 43 1 + 54 65 44 1 + 54 65 45 1 + 54 65 46 1 + 54 65 47 1 + 54 65 48 1 + 54 65 49 1 + 54 65 50 1 + 54 65 51 1 + 54 65 52 1 + 54 65 53 1 + 54 65 54 1 + 54 65 55 1 + 54 65 56 1 + 54 65 57 1 + 54 65 58 1 + 54 65 59 1 + 54 65 60 1 + 54 65 61 1 + 54 65 62 1 + 54 65 63 1 + 54 65 64 1 + 54 65 65 1 + 54 65 66 1 + 54 65 67 1 + 54 65 68 1 + 54 65 69 1 + 54 65 70 1 + 54 65 71 1 + 54 65 72 1 + 54 65 73 1 + 54 65 74 1 + 54 65 75 1 + 54 65 76 1 + 54 65 77 1 + 54 65 78 1 + 54 65 79 1 + 54 65 80 1 + 54 65 81 1 + 54 65 82 1 + 54 65 83 1 + 54 65 84 1 + 54 65 85 1 + 54 65 86 1 + 54 65 87 0.720869 + 54 66 40 0.63639 + 54 66 41 1 + 54 66 42 1 + 54 66 43 1 + 54 66 44 1 + 54 66 45 1 + 54 66 46 1 + 54 66 47 1 + 54 66 48 1 + 54 66 49 1 + 54 66 50 1 + 54 66 51 1 + 54 66 52 1 + 54 66 53 1 + 54 66 54 1 + 54 66 55 1 + 54 66 56 1 + 54 66 57 1 + 54 66 58 1 + 54 66 59 1 + 54 66 60 1 + 54 66 61 1 + 54 66 62 1 + 54 66 63 1 + 54 66 64 1 + 54 66 65 1 + 54 66 66 1 + 54 66 67 1 + 54 66 68 1 + 54 66 69 1 + 54 66 70 1 + 54 66 71 1 + 54 66 72 1 + 54 66 73 1 + 54 66 74 1 + 54 66 75 1 + 54 66 76 1 + 54 66 77 1 + 54 66 78 1 + 54 66 79 1 + 54 66 80 1 + 54 66 81 1 + 54 66 82 1 + 54 66 83 1 + 54 66 84 1 + 54 66 85 1 + 54 66 86 1 + 54 66 87 0.63639 + 54 67 40 0.509102 + 54 67 41 1 + 54 67 42 1 + 54 67 43 1 + 54 67 44 1 + 54 67 45 1 + 54 67 46 1 + 54 67 47 1 + 54 67 48 1 + 54 67 49 1 + 54 67 50 1 + 54 67 51 1 + 54 67 52 1 + 54 67 53 1 + 54 67 54 1 + 54 67 55 1 + 54 67 56 1 + 54 67 57 1 + 54 67 58 1 + 54 67 59 1 + 54 67 60 1 + 54 67 61 1 + 54 67 62 1 + 54 67 63 1 + 54 67 64 1 + 54 67 65 1 + 54 67 66 1 + 54 67 67 1 + 54 67 68 1 + 54 67 69 1 + 54 67 70 1 + 54 67 71 1 + 54 67 72 1 + 54 67 73 1 + 54 67 74 1 + 54 67 75 1 + 54 67 76 1 + 54 67 77 1 + 54 67 78 1 + 54 67 79 1 + 54 67 80 1 + 54 67 81 1 + 54 67 82 1 + 54 67 83 1 + 54 67 84 1 + 54 67 85 1 + 54 67 86 1 + 54 67 87 0.509102 + 54 68 40 0.338304 + 54 68 41 1 + 54 68 42 1 + 54 68 43 1 + 54 68 44 1 + 54 68 45 1 + 54 68 46 1 + 54 68 47 1 + 54 68 48 1 + 54 68 49 1 + 54 68 50 1 + 54 68 51 1 + 54 68 52 1 + 54 68 53 1 + 54 68 54 1 + 54 68 55 1 + 54 68 56 1 + 54 68 57 1 + 54 68 58 1 + 54 68 59 1 + 54 68 60 1 + 54 68 61 1 + 54 68 62 1 + 54 68 63 1 + 54 68 64 1 + 54 68 65 1 + 54 68 66 1 + 54 68 67 1 + 54 68 68 1 + 54 68 69 1 + 54 68 70 1 + 54 68 71 1 + 54 68 72 1 + 54 68 73 1 + 54 68 74 1 + 54 68 75 1 + 54 68 76 1 + 54 68 77 1 + 54 68 78 1 + 54 68 79 1 + 54 68 80 1 + 54 68 81 1 + 54 68 82 1 + 54 68 83 1 + 54 68 84 1 + 54 68 85 1 + 54 68 86 1 + 54 68 87 0.338304 + 54 69 40 0.137253 + 54 69 41 0.985777 + 54 69 42 1 + 54 69 43 1 + 54 69 44 1 + 54 69 45 1 + 54 69 46 1 + 54 69 47 1 + 54 69 48 1 + 54 69 49 1 + 54 69 50 1 + 54 69 51 1 + 54 69 52 1 + 54 69 53 1 + 54 69 54 1 + 54 69 55 1 + 54 69 56 1 + 54 69 57 1 + 54 69 58 1 + 54 69 59 1 + 54 69 60 1 + 54 69 61 1 + 54 69 62 1 + 54 69 63 1 + 54 69 64 1 + 54 69 65 1 + 54 69 66 1 + 54 69 67 1 + 54 69 68 1 + 54 69 69 1 + 54 69 70 1 + 54 69 71 1 + 54 69 72 1 + 54 69 73 1 + 54 69 74 1 + 54 69 75 1 + 54 69 76 1 + 54 69 77 1 + 54 69 78 1 + 54 69 79 1 + 54 69 80 1 + 54 69 81 1 + 54 69 82 1 + 54 69 83 1 + 54 69 84 1 + 54 69 85 1 + 54 69 86 0.985777 + 54 69 87 0.137253 + 54 70 40 0.013123 + 54 70 41 0.848902 + 54 70 42 1 + 54 70 43 1 + 54 70 44 1 + 54 70 45 1 + 54 70 46 1 + 54 70 47 1 + 54 70 48 1 + 54 70 49 1 + 54 70 50 1 + 54 70 51 1 + 54 70 52 1 + 54 70 53 1 + 54 70 54 1 + 54 70 55 1 + 54 70 56 1 + 54 70 57 1 + 54 70 58 1 + 54 70 59 1 + 54 70 60 1 + 54 70 61 1 + 54 70 62 1 + 54 70 63 1 + 54 70 64 1 + 54 70 65 1 + 54 70 66 1 + 54 70 67 1 + 54 70 68 1 + 54 70 69 1 + 54 70 70 1 + 54 70 71 1 + 54 70 72 1 + 54 70 73 1 + 54 70 74 1 + 54 70 75 1 + 54 70 76 1 + 54 70 77 1 + 54 70 78 1 + 54 70 79 1 + 54 70 80 1 + 54 70 81 1 + 54 70 82 1 + 54 70 83 1 + 54 70 84 1 + 54 70 85 1 + 54 70 86 0.848902 + 54 70 87 0.013123 + 54 71 41 0.553699 + 54 71 42 1 + 54 71 43 1 + 54 71 44 1 + 54 71 45 1 + 54 71 46 1 + 54 71 47 1 + 54 71 48 1 + 54 71 49 1 + 54 71 50 1 + 54 71 51 1 + 54 71 52 1 + 54 71 53 1 + 54 71 54 1 + 54 71 55 1 + 54 71 56 1 + 54 71 57 1 + 54 71 58 1 + 54 71 59 1 + 54 71 60 1 + 54 71 61 1 + 54 71 62 1 + 54 71 63 1 + 54 71 64 1 + 54 71 65 1 + 54 71 66 1 + 54 71 67 1 + 54 71 68 1 + 54 71 69 1 + 54 71 70 1 + 54 71 71 1 + 54 71 72 1 + 54 71 73 1 + 54 71 74 1 + 54 71 75 1 + 54 71 76 1 + 54 71 77 1 + 54 71 78 1 + 54 71 79 1 + 54 71 80 1 + 54 71 81 1 + 54 71 82 1 + 54 71 83 1 + 54 71 84 1 + 54 71 85 1 + 54 71 86 0.553699 + 54 72 41 0.205791 + 54 72 42 0.990286 + 54 72 43 1 + 54 72 44 1 + 54 72 45 1 + 54 72 46 1 + 54 72 47 1 + 54 72 48 1 + 54 72 49 1 + 54 72 50 1 + 54 72 51 1 + 54 72 52 1 + 54 72 53 1 + 54 72 54 1 + 54 72 55 1 + 54 72 56 1 + 54 72 57 1 + 54 72 58 1 + 54 72 59 1 + 54 72 60 1 + 54 72 61 1 + 54 72 62 1 + 54 72 63 1 + 54 72 64 1 + 54 72 65 1 + 54 72 66 1 + 54 72 67 1 + 54 72 68 1 + 54 72 69 1 + 54 72 70 1 + 54 72 71 1 + 54 72 72 1 + 54 72 73 1 + 54 72 74 1 + 54 72 75 1 + 54 72 76 1 + 54 72 77 1 + 54 72 78 1 + 54 72 79 1 + 54 72 80 1 + 54 72 81 1 + 54 72 82 1 + 54 72 83 1 + 54 72 84 1 + 54 72 85 0.990286 + 54 72 86 0.205791 + 54 73 41 0.0092981 + 54 73 42 0.777432 + 54 73 43 1 + 54 73 44 1 + 54 73 45 1 + 54 73 46 1 + 54 73 47 1 + 54 73 48 1 + 54 73 49 1 + 54 73 50 1 + 54 73 51 1 + 54 73 52 1 + 54 73 53 1 + 54 73 54 1 + 54 73 55 1 + 54 73 56 1 + 54 73 57 1 + 54 73 58 1 + 54 73 59 1 + 54 73 60 1 + 54 73 61 1 + 54 73 62 1 + 54 73 63 1 + 54 73 64 1 + 54 73 65 1 + 54 73 66 1 + 54 73 67 1 + 54 73 68 1 + 54 73 69 1 + 54 73 70 1 + 54 73 71 1 + 54 73 72 1 + 54 73 73 1 + 54 73 74 1 + 54 73 75 1 + 54 73 76 1 + 54 73 77 1 + 54 73 78 1 + 54 73 79 1 + 54 73 80 1 + 54 73 81 1 + 54 73 82 1 + 54 73 83 1 + 54 73 84 1 + 54 73 85 0.777432 + 54 73 86 0.0092981 + 54 74 42 0.325363 + 54 74 43 0.997314 + 54 74 44 1 + 54 74 45 1 + 54 74 46 1 + 54 74 47 1 + 54 74 48 1 + 54 74 49 1 + 54 74 50 1 + 54 74 51 1 + 54 74 52 1 + 54 74 53 1 + 54 74 54 1 + 54 74 55 1 + 54 74 56 1 + 54 74 57 1 + 54 74 58 1 + 54 74 59 1 + 54 74 60 1 + 54 74 61 1 + 54 74 62 1 + 54 74 63 1 + 54 74 64 1 + 54 74 65 1 + 54 74 66 1 + 54 74 67 1 + 54 74 68 1 + 54 74 69 1 + 54 74 70 1 + 54 74 71 1 + 54 74 72 1 + 54 74 73 1 + 54 74 74 1 + 54 74 75 1 + 54 74 76 1 + 54 74 77 1 + 54 74 78 1 + 54 74 79 1 + 54 74 80 1 + 54 74 81 1 + 54 74 82 1 + 54 74 83 1 + 54 74 84 0.997314 + 54 74 85 0.325363 + 54 75 42 0.0182812 + 54 75 43 0.78197 + 54 75 44 1 + 54 75 45 1 + 54 75 46 1 + 54 75 47 1 + 54 75 48 1 + 54 75 49 1 + 54 75 50 1 + 54 75 51 1 + 54 75 52 1 + 54 75 53 1 + 54 75 54 1 + 54 75 55 1 + 54 75 56 1 + 54 75 57 1 + 54 75 58 1 + 54 75 59 1 + 54 75 60 1 + 54 75 61 1 + 54 75 62 1 + 54 75 63 1 + 54 75 64 1 + 54 75 65 1 + 54 75 66 1 + 54 75 67 1 + 54 75 68 1 + 54 75 69 1 + 54 75 70 1 + 54 75 71 1 + 54 75 72 1 + 54 75 73 1 + 54 75 74 1 + 54 75 75 1 + 54 75 76 1 + 54 75 77 1 + 54 75 78 1 + 54 75 79 1 + 54 75 80 1 + 54 75 81 1 + 54 75 82 1 + 54 75 83 1 + 54 75 84 0.78197 + 54 75 85 0.0182812 + 54 76 43 0.23592 + 54 76 44 0.979001 + 54 76 45 1 + 54 76 46 1 + 54 76 47 1 + 54 76 48 1 + 54 76 49 1 + 54 76 50 1 + 54 76 51 1 + 54 76 52 1 + 54 76 53 1 + 54 76 54 1 + 54 76 55 1 + 54 76 56 1 + 54 76 57 1 + 54 76 58 1 + 54 76 59 1 + 54 76 60 1 + 54 76 61 1 + 54 76 62 1 + 54 76 63 1 + 54 76 64 1 + 54 76 65 1 + 54 76 66 1 + 54 76 67 1 + 54 76 68 1 + 54 76 69 1 + 54 76 70 1 + 54 76 71 1 + 54 76 72 1 + 54 76 73 1 + 54 76 74 1 + 54 76 75 1 + 54 76 76 1 + 54 76 77 1 + 54 76 78 1 + 54 76 79 1 + 54 76 80 1 + 54 76 81 1 + 54 76 82 1 + 54 76 83 0.979001 + 54 76 84 0.23592 + 54 77 43 0.00135226 + 54 77 44 0.559714 + 54 77 45 0.999965 + 54 77 46 1 + 54 77 47 1 + 54 77 48 1 + 54 77 49 1 + 54 77 50 1 + 54 77 51 1 + 54 77 52 1 + 54 77 53 1 + 54 77 54 1 + 54 77 55 1 + 54 77 56 1 + 54 77 57 1 + 54 77 58 1 + 54 77 59 1 + 54 77 60 1 + 54 77 61 1 + 54 77 62 1 + 54 77 63 1 + 54 77 64 1 + 54 77 65 1 + 54 77 66 1 + 54 77 67 1 + 54 77 68 1 + 54 77 69 1 + 54 77 70 1 + 54 77 71 1 + 54 77 72 1 + 54 77 73 1 + 54 77 74 1 + 54 77 75 1 + 54 77 76 1 + 54 77 77 1 + 54 77 78 1 + 54 77 79 1 + 54 77 80 1 + 54 77 81 1 + 54 77 82 0.999965 + 54 77 83 0.559714 + 54 77 84 0.00135226 + 54 78 44 0.0436378 + 54 78 45 0.78779 + 54 78 46 1 + 54 78 47 1 + 54 78 48 1 + 54 78 49 1 + 54 78 50 1 + 54 78 51 1 + 54 78 52 1 + 54 78 53 1 + 54 78 54 1 + 54 78 55 1 + 54 78 56 1 + 54 78 57 1 + 54 78 58 1 + 54 78 59 1 + 54 78 60 1 + 54 78 61 1 + 54 78 62 1 + 54 78 63 1 + 54 78 64 1 + 54 78 65 1 + 54 78 66 1 + 54 78 67 1 + 54 78 68 1 + 54 78 69 1 + 54 78 70 1 + 54 78 71 1 + 54 78 72 1 + 54 78 73 1 + 54 78 74 1 + 54 78 75 1 + 54 78 76 1 + 54 78 77 1 + 54 78 78 1 + 54 78 79 1 + 54 78 80 1 + 54 78 81 1 + 54 78 82 0.78779 + 54 78 83 0.0436378 + 54 79 45 0.129721 + 54 79 46 0.887171 + 54 79 47 1 + 54 79 48 1 + 54 79 49 1 + 54 79 50 1 + 54 79 51 1 + 54 79 52 1 + 54 79 53 1 + 54 79 54 1 + 54 79 55 1 + 54 79 56 1 + 54 79 57 1 + 54 79 58 1 + 54 79 59 1 + 54 79 60 1 + 54 79 61 1 + 54 79 62 1 + 54 79 63 1 + 54 79 64 1 + 54 79 65 1 + 54 79 66 1 + 54 79 67 1 + 54 79 68 1 + 54 79 69 1 + 54 79 70 1 + 54 79 71 1 + 54 79 72 1 + 54 79 73 1 + 54 79 74 1 + 54 79 75 1 + 54 79 76 1 + 54 79 77 1 + 54 79 78 1 + 54 79 79 1 + 54 79 80 1 + 54 79 81 0.887171 + 54 79 82 0.129721 + 54 80 46 0.192797 + 54 80 47 0.912465 + 54 80 48 1 + 54 80 49 1 + 54 80 50 1 + 54 80 51 1 + 54 80 52 1 + 54 80 53 1 + 54 80 54 1 + 54 80 55 1 + 54 80 56 1 + 54 80 57 1 + 54 80 58 1 + 54 80 59 1 + 54 80 60 1 + 54 80 61 1 + 54 80 62 1 + 54 80 63 1 + 54 80 64 1 + 54 80 65 1 + 54 80 66 1 + 54 80 67 1 + 54 80 68 1 + 54 80 69 1 + 54 80 70 1 + 54 80 71 1 + 54 80 72 1 + 54 80 73 1 + 54 80 74 1 + 54 80 75 1 + 54 80 76 1 + 54 80 77 1 + 54 80 78 1 + 54 80 79 1 + 54 80 80 0.912465 + 54 80 81 0.192797 + 54 81 47 0.192797 + 54 81 48 0.887171 + 54 81 49 1 + 54 81 50 1 + 54 81 51 1 + 54 81 52 1 + 54 81 53 1 + 54 81 54 1 + 54 81 55 1 + 54 81 56 1 + 54 81 57 1 + 54 81 58 1 + 54 81 59 1 + 54 81 60 1 + 54 81 61 1 + 54 81 62 1 + 54 81 63 1 + 54 81 64 1 + 54 81 65 1 + 54 81 66 1 + 54 81 67 1 + 54 81 68 1 + 54 81 69 1 + 54 81 70 1 + 54 81 71 1 + 54 81 72 1 + 54 81 73 1 + 54 81 74 1 + 54 81 75 1 + 54 81 76 1 + 54 81 77 1 + 54 81 78 1 + 54 81 79 0.887171 + 54 81 80 0.192797 + 54 82 48 0.129721 + 54 82 49 0.78779 + 54 82 50 0.999965 + 54 82 51 1 + 54 82 52 1 + 54 82 53 1 + 54 82 54 1 + 54 82 55 1 + 54 82 56 1 + 54 82 57 1 + 54 82 58 1 + 54 82 59 1 + 54 82 60 1 + 54 82 61 1 + 54 82 62 1 + 54 82 63 1 + 54 82 64 1 + 54 82 65 1 + 54 82 66 1 + 54 82 67 1 + 54 82 68 1 + 54 82 69 1 + 54 82 70 1 + 54 82 71 1 + 54 82 72 1 + 54 82 73 1 + 54 82 74 1 + 54 82 75 1 + 54 82 76 1 + 54 82 77 0.999965 + 54 82 78 0.78779 + 54 82 79 0.129721 + 54 83 49 0.0436378 + 54 83 50 0.559714 + 54 83 51 0.979001 + 54 83 52 1 + 54 83 53 1 + 54 83 54 1 + 54 83 55 1 + 54 83 56 1 + 54 83 57 1 + 54 83 58 1 + 54 83 59 1 + 54 83 60 1 + 54 83 61 1 + 54 83 62 1 + 54 83 63 1 + 54 83 64 1 + 54 83 65 1 + 54 83 66 1 + 54 83 67 1 + 54 83 68 1 + 54 83 69 1 + 54 83 70 1 + 54 83 71 1 + 54 83 72 1 + 54 83 73 1 + 54 83 74 1 + 54 83 75 1 + 54 83 76 0.979001 + 54 83 77 0.559714 + 54 83 78 0.0436378 + 54 84 50 0.00135226 + 54 84 51 0.23592 + 54 84 52 0.78197 + 54 84 53 0.997314 + 54 84 54 1 + 54 84 55 1 + 54 84 56 1 + 54 84 57 1 + 54 84 58 1 + 54 84 59 1 + 54 84 60 1 + 54 84 61 1 + 54 84 62 1 + 54 84 63 1 + 54 84 64 1 + 54 84 65 1 + 54 84 66 1 + 54 84 67 1 + 54 84 68 1 + 54 84 69 1 + 54 84 70 1 + 54 84 71 1 + 54 84 72 1 + 54 84 73 1 + 54 84 74 0.997314 + 54 84 75 0.78197 + 54 84 76 0.23592 + 54 84 77 0.00135226 + 54 85 52 0.0182812 + 54 85 53 0.325363 + 54 85 54 0.777432 + 54 85 55 0.990286 + 54 85 56 1 + 54 85 57 1 + 54 85 58 1 + 54 85 59 1 + 54 85 60 1 + 54 85 61 1 + 54 85 62 1 + 54 85 63 1 + 54 85 64 1 + 54 85 65 1 + 54 85 66 1 + 54 85 67 1 + 54 85 68 1 + 54 85 69 1 + 54 85 70 1 + 54 85 71 1 + 54 85 72 0.990286 + 54 85 73 0.777432 + 54 85 74 0.325363 + 54 85 75 0.0182812 + 54 86 54 0.0092981 + 54 86 55 0.205791 + 54 86 56 0.553699 + 54 86 57 0.848902 + 54 86 58 0.985777 + 54 86 59 1 + 54 86 60 1 + 54 86 61 1 + 54 86 62 1 + 54 86 63 1 + 54 86 64 1 + 54 86 65 1 + 54 86 66 1 + 54 86 67 1 + 54 86 68 1 + 54 86 69 0.985777 + 54 86 70 0.848902 + 54 86 71 0.553699 + 54 86 72 0.205791 + 54 86 73 0.0092981 + 54 87 57 0.013123 + 54 87 58 0.137253 + 54 87 59 0.338304 + 54 87 60 0.509102 + 54 87 61 0.63639 + 54 87 62 0.720869 + 54 87 63 0.762996 + 54 87 64 0.762996 + 54 87 65 0.720869 + 54 87 66 0.63639 + 54 87 67 0.509102 + 54 87 68 0.338304 + 54 87 69 0.137253 + 54 87 70 0.013123 + 55 39 60 0.00850155 + 55 39 61 0.0529903 + 55 39 62 0.10703 + 55 39 63 0.141143 + 55 39 64 0.141143 + 55 39 65 0.10703 + 55 39 66 0.0529903 + 55 39 67 0.00850155 + 55 40 56 0.036314 + 55 40 57 0.253138 + 55 40 58 0.509102 + 55 40 59 0.720869 + 55 40 60 0.880429 + 55 40 61 0.961214 + 55 40 62 0.990327 + 55 40 63 0.997684 + 55 40 64 0.997684 + 55 40 65 0.990327 + 55 40 66 0.961214 + 55 40 67 0.880429 + 55 40 68 0.720869 + 55 40 69 0.509102 + 55 40 70 0.253138 + 55 40 71 0.036314 + 55 41 53 0.00460294 + 55 41 54 0.205791 + 55 41 55 0.598003 + 55 41 56 0.913043 + 55 41 57 0.999295 + 55 41 58 1 + 55 41 59 1 + 55 41 60 1 + 55 41 61 1 + 55 41 62 1 + 55 41 63 1 + 55 41 64 1 + 55 41 65 1 + 55 41 66 1 + 55 41 67 1 + 55 41 68 1 + 55 41 69 1 + 55 41 70 0.999295 + 55 41 71 0.913043 + 55 41 72 0.598003 + 55 41 73 0.205791 + 55 41 74 0.00460294 + 55 42 51 0.00260739 + 55 42 52 0.240042 + 55 42 53 0.736168 + 55 42 54 0.990286 + 55 42 55 1 + 55 42 56 1 + 55 42 57 1 + 55 42 58 1 + 55 42 59 1 + 55 42 60 1 + 55 42 61 1 + 55 42 62 1 + 55 42 63 1 + 55 42 64 1 + 55 42 65 1 + 55 42 66 1 + 55 42 67 1 + 55 42 68 1 + 55 42 69 1 + 55 42 70 1 + 55 42 71 1 + 55 42 72 1 + 55 42 73 0.990286 + 55 42 74 0.736168 + 55 42 75 0.240042 + 55 42 76 0.00260739 + 55 43 50 0.103719 + 55 43 51 0.652868 + 55 43 52 0.988606 + 55 43 53 1 + 55 43 54 1 + 55 43 55 1 + 55 43 56 1 + 55 43 57 1 + 55 43 58 1 + 55 43 59 1 + 55 43 60 1 + 55 43 61 1 + 55 43 62 1 + 55 43 63 1 + 55 43 64 1 + 55 43 65 1 + 55 43 66 1 + 55 43 67 1 + 55 43 68 1 + 55 43 69 1 + 55 43 70 1 + 55 43 71 1 + 55 43 72 1 + 55 43 73 1 + 55 43 74 1 + 55 43 75 0.988606 + 55 43 76 0.652868 + 55 43 77 0.103719 + 55 44 48 0.00138601 + 55 44 49 0.316818 + 55 44 50 0.912283 + 55 44 51 1 + 55 44 52 1 + 55 44 53 1 + 55 44 54 1 + 55 44 55 1 + 55 44 56 1 + 55 44 57 1 + 55 44 58 1 + 55 44 59 1 + 55 44 60 1 + 55 44 61 1 + 55 44 62 1 + 55 44 63 1 + 55 44 64 1 + 55 44 65 1 + 55 44 66 1 + 55 44 67 1 + 55 44 68 1 + 55 44 69 1 + 55 44 70 1 + 55 44 71 1 + 55 44 72 1 + 55 44 73 1 + 55 44 74 1 + 55 44 75 1 + 55 44 76 1 + 55 44 77 0.912283 + 55 44 78 0.316818 + 55 44 79 0.00138601 + 55 45 47 0.0128488 + 55 45 48 0.51 + 55 45 49 0.986811 + 55 45 50 1 + 55 45 51 1 + 55 45 52 1 + 55 45 53 1 + 55 45 54 1 + 55 45 55 1 + 55 45 56 1 + 55 45 57 1 + 55 45 58 1 + 55 45 59 1 + 55 45 60 1 + 55 45 61 1 + 55 45 62 1 + 55 45 63 1 + 55 45 64 1 + 55 45 65 1 + 55 45 66 1 + 55 45 67 1 + 55 45 68 1 + 55 45 69 1 + 55 45 70 1 + 55 45 71 1 + 55 45 72 1 + 55 45 73 1 + 55 45 74 1 + 55 45 75 1 + 55 45 76 1 + 55 45 77 1 + 55 45 78 0.986811 + 55 45 79 0.51 + 55 45 80 0.0128488 + 55 46 46 0.0207198 + 55 46 47 0.611412 + 55 46 48 0.998538 + 55 46 49 1 + 55 46 50 1 + 55 46 51 1 + 55 46 52 1 + 55 46 53 1 + 55 46 54 1 + 55 46 55 1 + 55 46 56 1 + 55 46 57 1 + 55 46 58 1 + 55 46 59 1 + 55 46 60 1 + 55 46 61 1 + 55 46 62 1 + 55 46 63 1 + 55 46 64 1 + 55 46 65 1 + 55 46 66 1 + 55 46 67 1 + 55 46 68 1 + 55 46 69 1 + 55 46 70 1 + 55 46 71 1 + 55 46 72 1 + 55 46 73 1 + 55 46 74 1 + 55 46 75 1 + 55 46 76 1 + 55 46 77 1 + 55 46 78 1 + 55 46 79 0.998538 + 55 46 80 0.611412 + 55 46 81 0.0207198 + 55 47 45 0.0128488 + 55 47 46 0.611412 + 55 47 47 0.99961 + 55 47 48 1 + 55 47 49 1 + 55 47 50 1 + 55 47 51 1 + 55 47 52 1 + 55 47 53 1 + 55 47 54 1 + 55 47 55 1 + 55 47 56 1 + 55 47 57 1 + 55 47 58 1 + 55 47 59 1 + 55 47 60 1 + 55 47 61 1 + 55 47 62 1 + 55 47 63 1 + 55 47 64 1 + 55 47 65 1 + 55 47 66 1 + 55 47 67 1 + 55 47 68 1 + 55 47 69 1 + 55 47 70 1 + 55 47 71 1 + 55 47 72 1 + 55 47 73 1 + 55 47 74 1 + 55 47 75 1 + 55 47 76 1 + 55 47 77 1 + 55 47 78 1 + 55 47 79 1 + 55 47 80 0.99961 + 55 47 81 0.611412 + 55 47 82 0.0128488 + 55 48 44 0.00138601 + 55 48 45 0.51 + 55 48 46 0.998538 + 55 48 47 1 + 55 48 48 1 + 55 48 49 1 + 55 48 50 1 + 55 48 51 1 + 55 48 52 1 + 55 48 53 1 + 55 48 54 1 + 55 48 55 1 + 55 48 56 1 + 55 48 57 1 + 55 48 58 1 + 55 48 59 1 + 55 48 60 1 + 55 48 61 1 + 55 48 62 1 + 55 48 63 1 + 55 48 64 1 + 55 48 65 1 + 55 48 66 1 + 55 48 67 1 + 55 48 68 1 + 55 48 69 1 + 55 48 70 1 + 55 48 71 1 + 55 48 72 1 + 55 48 73 1 + 55 48 74 1 + 55 48 75 1 + 55 48 76 1 + 55 48 77 1 + 55 48 78 1 + 55 48 79 1 + 55 48 80 1 + 55 48 81 0.998538 + 55 48 82 0.51 + 55 48 83 0.00138601 + 55 49 44 0.316818 + 55 49 45 0.986811 + 55 49 46 1 + 55 49 47 1 + 55 49 48 1 + 55 49 49 1 + 55 49 50 1 + 55 49 51 1 + 55 49 52 1 + 55 49 53 1 + 55 49 54 1 + 55 49 55 1 + 55 49 56 1 + 55 49 57 1 + 55 49 58 1 + 55 49 59 1 + 55 49 60 1 + 55 49 61 1 + 55 49 62 1 + 55 49 63 1 + 55 49 64 1 + 55 49 65 1 + 55 49 66 1 + 55 49 67 1 + 55 49 68 1 + 55 49 69 1 + 55 49 70 1 + 55 49 71 1 + 55 49 72 1 + 55 49 73 1 + 55 49 74 1 + 55 49 75 1 + 55 49 76 1 + 55 49 77 1 + 55 49 78 1 + 55 49 79 1 + 55 49 80 1 + 55 49 81 1 + 55 49 82 0.986811 + 55 49 83 0.316818 + 55 50 43 0.103719 + 55 50 44 0.912283 + 55 50 45 1 + 55 50 46 1 + 55 50 47 1 + 55 50 48 1 + 55 50 49 1 + 55 50 50 1 + 55 50 51 1 + 55 50 52 1 + 55 50 53 1 + 55 50 54 1 + 55 50 55 1 + 55 50 56 1 + 55 50 57 1 + 55 50 58 1 + 55 50 59 1 + 55 50 60 1 + 55 50 61 1 + 55 50 62 1 + 55 50 63 1 + 55 50 64 1 + 55 50 65 1 + 55 50 66 1 + 55 50 67 1 + 55 50 68 1 + 55 50 69 1 + 55 50 70 1 + 55 50 71 1 + 55 50 72 1 + 55 50 73 1 + 55 50 74 1 + 55 50 75 1 + 55 50 76 1 + 55 50 77 1 + 55 50 78 1 + 55 50 79 1 + 55 50 80 1 + 55 50 81 1 + 55 50 82 1 + 55 50 83 0.912283 + 55 50 84 0.103719 + 55 51 42 0.00260739 + 55 51 43 0.652868 + 55 51 44 1 + 55 51 45 1 + 55 51 46 1 + 55 51 47 1 + 55 51 48 1 + 55 51 49 1 + 55 51 50 1 + 55 51 51 1 + 55 51 52 1 + 55 51 53 1 + 55 51 54 1 + 55 51 55 1 + 55 51 56 1 + 55 51 57 1 + 55 51 58 1 + 55 51 59 1 + 55 51 60 1 + 55 51 61 1 + 55 51 62 1 + 55 51 63 1 + 55 51 64 1 + 55 51 65 1 + 55 51 66 1 + 55 51 67 1 + 55 51 68 1 + 55 51 69 1 + 55 51 70 1 + 55 51 71 1 + 55 51 72 1 + 55 51 73 1 + 55 51 74 1 + 55 51 75 1 + 55 51 76 1 + 55 51 77 1 + 55 51 78 1 + 55 51 79 1 + 55 51 80 1 + 55 51 81 1 + 55 51 82 1 + 55 51 83 1 + 55 51 84 0.652868 + 55 51 85 0.00260739 + 55 52 42 0.240042 + 55 52 43 0.988606 + 55 52 44 1 + 55 52 45 1 + 55 52 46 1 + 55 52 47 1 + 55 52 48 1 + 55 52 49 1 + 55 52 50 1 + 55 52 51 1 + 55 52 52 1 + 55 52 53 1 + 55 52 54 1 + 55 52 55 1 + 55 52 56 1 + 55 52 57 1 + 55 52 58 1 + 55 52 59 1 + 55 52 60 1 + 55 52 61 1 + 55 52 62 1 + 55 52 63 1 + 55 52 64 1 + 55 52 65 1 + 55 52 66 1 + 55 52 67 1 + 55 52 68 1 + 55 52 69 1 + 55 52 70 1 + 55 52 71 1 + 55 52 72 1 + 55 52 73 1 + 55 52 74 1 + 55 52 75 1 + 55 52 76 1 + 55 52 77 1 + 55 52 78 1 + 55 52 79 1 + 55 52 80 1 + 55 52 81 1 + 55 52 82 1 + 55 52 83 1 + 55 52 84 0.988606 + 55 52 85 0.240042 + 55 53 41 0.00460294 + 55 53 42 0.736168 + 55 53 43 1 + 55 53 44 1 + 55 53 45 1 + 55 53 46 1 + 55 53 47 1 + 55 53 48 1 + 55 53 49 1 + 55 53 50 1 + 55 53 51 1 + 55 53 52 1 + 55 53 53 1 + 55 53 54 1 + 55 53 55 1 + 55 53 56 1 + 55 53 57 1 + 55 53 58 1 + 55 53 59 1 + 55 53 60 1 + 55 53 61 1 + 55 53 62 1 + 55 53 63 1 + 55 53 64 1 + 55 53 65 1 + 55 53 66 1 + 55 53 67 1 + 55 53 68 1 + 55 53 69 1 + 55 53 70 1 + 55 53 71 1 + 55 53 72 1 + 55 53 73 1 + 55 53 74 1 + 55 53 75 1 + 55 53 76 1 + 55 53 77 1 + 55 53 78 1 + 55 53 79 1 + 55 53 80 1 + 55 53 81 1 + 55 53 82 1 + 55 53 83 1 + 55 53 84 1 + 55 53 85 0.736168 + 55 53 86 0.00460294 + 55 54 41 0.205791 + 55 54 42 0.990286 + 55 54 43 1 + 55 54 44 1 + 55 54 45 1 + 55 54 46 1 + 55 54 47 1 + 55 54 48 1 + 55 54 49 1 + 55 54 50 1 + 55 54 51 1 + 55 54 52 1 + 55 54 53 1 + 55 54 54 1 + 55 54 55 1 + 55 54 56 1 + 55 54 57 1 + 55 54 58 1 + 55 54 59 1 + 55 54 60 1 + 55 54 61 1 + 55 54 62 1 + 55 54 63 1 + 55 54 64 1 + 55 54 65 1 + 55 54 66 1 + 55 54 67 1 + 55 54 68 1 + 55 54 69 1 + 55 54 70 1 + 55 54 71 1 + 55 54 72 1 + 55 54 73 1 + 55 54 74 1 + 55 54 75 1 + 55 54 76 1 + 55 54 77 1 + 55 54 78 1 + 55 54 79 1 + 55 54 80 1 + 55 54 81 1 + 55 54 82 1 + 55 54 83 1 + 55 54 84 1 + 55 54 85 0.990286 + 55 54 86 0.205791 + 55 55 41 0.598003 + 55 55 42 1 + 55 55 43 1 + 55 55 44 1 + 55 55 45 1 + 55 55 46 1 + 55 55 47 1 + 55 55 48 1 + 55 55 49 1 + 55 55 50 1 + 55 55 51 1 + 55 55 52 1 + 55 55 53 1 + 55 55 54 1 + 55 55 55 1 + 55 55 56 1 + 55 55 57 1 + 55 55 58 1 + 55 55 59 1 + 55 55 60 1 + 55 55 61 1 + 55 55 62 1 + 55 55 63 1 + 55 55 64 1 + 55 55 65 1 + 55 55 66 1 + 55 55 67 1 + 55 55 68 1 + 55 55 69 1 + 55 55 70 1 + 55 55 71 1 + 55 55 72 1 + 55 55 73 1 + 55 55 74 1 + 55 55 75 1 + 55 55 76 1 + 55 55 77 1 + 55 55 78 1 + 55 55 79 1 + 55 55 80 1 + 55 55 81 1 + 55 55 82 1 + 55 55 83 1 + 55 55 84 1 + 55 55 85 1 + 55 55 86 0.598003 + 55 56 40 0.036314 + 55 56 41 0.913043 + 55 56 42 1 + 55 56 43 1 + 55 56 44 1 + 55 56 45 1 + 55 56 46 1 + 55 56 47 1 + 55 56 48 1 + 55 56 49 1 + 55 56 50 1 + 55 56 51 1 + 55 56 52 1 + 55 56 53 1 + 55 56 54 1 + 55 56 55 1 + 55 56 56 1 + 55 56 57 1 + 55 56 58 1 + 55 56 59 1 + 55 56 60 1 + 55 56 61 1 + 55 56 62 1 + 55 56 63 1 + 55 56 64 1 + 55 56 65 1 + 55 56 66 1 + 55 56 67 1 + 55 56 68 1 + 55 56 69 1 + 55 56 70 1 + 55 56 71 1 + 55 56 72 1 + 55 56 73 1 + 55 56 74 1 + 55 56 75 1 + 55 56 76 1 + 55 56 77 1 + 55 56 78 1 + 55 56 79 1 + 55 56 80 1 + 55 56 81 1 + 55 56 82 1 + 55 56 83 1 + 55 56 84 1 + 55 56 85 1 + 55 56 86 0.913043 + 55 56 87 0.036314 + 55 57 40 0.253138 + 55 57 41 0.999295 + 55 57 42 1 + 55 57 43 1 + 55 57 44 1 + 55 57 45 1 + 55 57 46 1 + 55 57 47 1 + 55 57 48 1 + 55 57 49 1 + 55 57 50 1 + 55 57 51 1 + 55 57 52 1 + 55 57 53 1 + 55 57 54 1 + 55 57 55 1 + 55 57 56 1 + 55 57 57 1 + 55 57 58 1 + 55 57 59 1 + 55 57 60 1 + 55 57 61 1 + 55 57 62 1 + 55 57 63 1 + 55 57 64 1 + 55 57 65 1 + 55 57 66 1 + 55 57 67 1 + 55 57 68 1 + 55 57 69 1 + 55 57 70 1 + 55 57 71 1 + 55 57 72 1 + 55 57 73 1 + 55 57 74 1 + 55 57 75 1 + 55 57 76 1 + 55 57 77 1 + 55 57 78 1 + 55 57 79 1 + 55 57 80 1 + 55 57 81 1 + 55 57 82 1 + 55 57 83 1 + 55 57 84 1 + 55 57 85 1 + 55 57 86 0.999295 + 55 57 87 0.253138 + 55 58 40 0.509102 + 55 58 41 1 + 55 58 42 1 + 55 58 43 1 + 55 58 44 1 + 55 58 45 1 + 55 58 46 1 + 55 58 47 1 + 55 58 48 1 + 55 58 49 1 + 55 58 50 1 + 55 58 51 1 + 55 58 52 1 + 55 58 53 1 + 55 58 54 1 + 55 58 55 1 + 55 58 56 1 + 55 58 57 1 + 55 58 58 1 + 55 58 59 1 + 55 58 60 1 + 55 58 61 1 + 55 58 62 1 + 55 58 63 1 + 55 58 64 1 + 55 58 65 1 + 55 58 66 1 + 55 58 67 1 + 55 58 68 1 + 55 58 69 1 + 55 58 70 1 + 55 58 71 1 + 55 58 72 1 + 55 58 73 1 + 55 58 74 1 + 55 58 75 1 + 55 58 76 1 + 55 58 77 1 + 55 58 78 1 + 55 58 79 1 + 55 58 80 1 + 55 58 81 1 + 55 58 82 1 + 55 58 83 1 + 55 58 84 1 + 55 58 85 1 + 55 58 86 1 + 55 58 87 0.509102 + 55 59 40 0.720869 + 55 59 41 1 + 55 59 42 1 + 55 59 43 1 + 55 59 44 1 + 55 59 45 1 + 55 59 46 1 + 55 59 47 1 + 55 59 48 1 + 55 59 49 1 + 55 59 50 1 + 55 59 51 1 + 55 59 52 1 + 55 59 53 1 + 55 59 54 1 + 55 59 55 1 + 55 59 56 1 + 55 59 57 1 + 55 59 58 1 + 55 59 59 1 + 55 59 60 1 + 55 59 61 1 + 55 59 62 1 + 55 59 63 1 + 55 59 64 1 + 55 59 65 1 + 55 59 66 1 + 55 59 67 1 + 55 59 68 1 + 55 59 69 1 + 55 59 70 1 + 55 59 71 1 + 55 59 72 1 + 55 59 73 1 + 55 59 74 1 + 55 59 75 1 + 55 59 76 1 + 55 59 77 1 + 55 59 78 1 + 55 59 79 1 + 55 59 80 1 + 55 59 81 1 + 55 59 82 1 + 55 59 83 1 + 55 59 84 1 + 55 59 85 1 + 55 59 86 1 + 55 59 87 0.720869 + 55 60 39 0.00850155 + 55 60 40 0.880429 + 55 60 41 1 + 55 60 42 1 + 55 60 43 1 + 55 60 44 1 + 55 60 45 1 + 55 60 46 1 + 55 60 47 1 + 55 60 48 1 + 55 60 49 1 + 55 60 50 1 + 55 60 51 1 + 55 60 52 1 + 55 60 53 1 + 55 60 54 1 + 55 60 55 1 + 55 60 56 1 + 55 60 57 1 + 55 60 58 1 + 55 60 59 1 + 55 60 60 1 + 55 60 61 1 + 55 60 62 1 + 55 60 63 1 + 55 60 64 1 + 55 60 65 1 + 55 60 66 1 + 55 60 67 1 + 55 60 68 1 + 55 60 69 1 + 55 60 70 1 + 55 60 71 1 + 55 60 72 1 + 55 60 73 1 + 55 60 74 1 + 55 60 75 1 + 55 60 76 1 + 55 60 77 1 + 55 60 78 1 + 55 60 79 1 + 55 60 80 1 + 55 60 81 1 + 55 60 82 1 + 55 60 83 1 + 55 60 84 1 + 55 60 85 1 + 55 60 86 1 + 55 60 87 0.880429 + 55 60 88 0.00850155 + 55 61 39 0.0529903 + 55 61 40 0.961214 + 55 61 41 1 + 55 61 42 1 + 55 61 43 1 + 55 61 44 1 + 55 61 45 1 + 55 61 46 1 + 55 61 47 1 + 55 61 48 1 + 55 61 49 1 + 55 61 50 1 + 55 61 51 1 + 55 61 52 1 + 55 61 53 1 + 55 61 54 1 + 55 61 55 1 + 55 61 56 1 + 55 61 57 1 + 55 61 58 1 + 55 61 59 1 + 55 61 60 1 + 55 61 61 1 + 55 61 62 1 + 55 61 63 1 + 55 61 64 1 + 55 61 65 1 + 55 61 66 1 + 55 61 67 1 + 55 61 68 1 + 55 61 69 1 + 55 61 70 1 + 55 61 71 1 + 55 61 72 1 + 55 61 73 1 + 55 61 74 1 + 55 61 75 1 + 55 61 76 1 + 55 61 77 1 + 55 61 78 1 + 55 61 79 1 + 55 61 80 1 + 55 61 81 1 + 55 61 82 1 + 55 61 83 1 + 55 61 84 1 + 55 61 85 1 + 55 61 86 1 + 55 61 87 0.961214 + 55 61 88 0.0529903 + 55 62 39 0.10703 + 55 62 40 0.990327 + 55 62 41 1 + 55 62 42 1 + 55 62 43 1 + 55 62 44 1 + 55 62 45 1 + 55 62 46 1 + 55 62 47 1 + 55 62 48 1 + 55 62 49 1 + 55 62 50 1 + 55 62 51 1 + 55 62 52 1 + 55 62 53 1 + 55 62 54 1 + 55 62 55 1 + 55 62 56 1 + 55 62 57 1 + 55 62 58 1 + 55 62 59 1 + 55 62 60 1 + 55 62 61 1 + 55 62 62 1 + 55 62 63 1 + 55 62 64 1 + 55 62 65 1 + 55 62 66 1 + 55 62 67 1 + 55 62 68 1 + 55 62 69 1 + 55 62 70 1 + 55 62 71 1 + 55 62 72 1 + 55 62 73 1 + 55 62 74 1 + 55 62 75 1 + 55 62 76 1 + 55 62 77 1 + 55 62 78 1 + 55 62 79 1 + 55 62 80 1 + 55 62 81 1 + 55 62 82 1 + 55 62 83 1 + 55 62 84 1 + 55 62 85 1 + 55 62 86 1 + 55 62 87 0.990327 + 55 62 88 0.10703 + 55 63 39 0.141143 + 55 63 40 0.997684 + 55 63 41 1 + 55 63 42 1 + 55 63 43 1 + 55 63 44 1 + 55 63 45 1 + 55 63 46 1 + 55 63 47 1 + 55 63 48 1 + 55 63 49 1 + 55 63 50 1 + 55 63 51 1 + 55 63 52 1 + 55 63 53 1 + 55 63 54 1 + 55 63 55 1 + 55 63 56 1 + 55 63 57 1 + 55 63 58 1 + 55 63 59 1 + 55 63 60 1 + 55 63 61 1 + 55 63 62 1 + 55 63 63 1 + 55 63 64 1 + 55 63 65 1 + 55 63 66 1 + 55 63 67 1 + 55 63 68 1 + 55 63 69 1 + 55 63 70 1 + 55 63 71 1 + 55 63 72 1 + 55 63 73 1 + 55 63 74 1 + 55 63 75 1 + 55 63 76 1 + 55 63 77 1 + 55 63 78 1 + 55 63 79 1 + 55 63 80 1 + 55 63 81 1 + 55 63 82 1 + 55 63 83 1 + 55 63 84 1 + 55 63 85 1 + 55 63 86 1 + 55 63 87 0.997684 + 55 63 88 0.141143 + 55 64 39 0.141143 + 55 64 40 0.997684 + 55 64 41 1 + 55 64 42 1 + 55 64 43 1 + 55 64 44 1 + 55 64 45 1 + 55 64 46 1 + 55 64 47 1 + 55 64 48 1 + 55 64 49 1 + 55 64 50 1 + 55 64 51 1 + 55 64 52 1 + 55 64 53 1 + 55 64 54 1 + 55 64 55 1 + 55 64 56 1 + 55 64 57 1 + 55 64 58 1 + 55 64 59 1 + 55 64 60 1 + 55 64 61 1 + 55 64 62 1 + 55 64 63 1 + 55 64 64 1 + 55 64 65 1 + 55 64 66 1 + 55 64 67 1 + 55 64 68 1 + 55 64 69 1 + 55 64 70 1 + 55 64 71 1 + 55 64 72 1 + 55 64 73 1 + 55 64 74 1 + 55 64 75 1 + 55 64 76 1 + 55 64 77 1 + 55 64 78 1 + 55 64 79 1 + 55 64 80 1 + 55 64 81 1 + 55 64 82 1 + 55 64 83 1 + 55 64 84 1 + 55 64 85 1 + 55 64 86 1 + 55 64 87 0.997684 + 55 64 88 0.141143 + 55 65 39 0.10703 + 55 65 40 0.990327 + 55 65 41 1 + 55 65 42 1 + 55 65 43 1 + 55 65 44 1 + 55 65 45 1 + 55 65 46 1 + 55 65 47 1 + 55 65 48 1 + 55 65 49 1 + 55 65 50 1 + 55 65 51 1 + 55 65 52 1 + 55 65 53 1 + 55 65 54 1 + 55 65 55 1 + 55 65 56 1 + 55 65 57 1 + 55 65 58 1 + 55 65 59 1 + 55 65 60 1 + 55 65 61 1 + 55 65 62 1 + 55 65 63 1 + 55 65 64 1 + 55 65 65 1 + 55 65 66 1 + 55 65 67 1 + 55 65 68 1 + 55 65 69 1 + 55 65 70 1 + 55 65 71 1 + 55 65 72 1 + 55 65 73 1 + 55 65 74 1 + 55 65 75 1 + 55 65 76 1 + 55 65 77 1 + 55 65 78 1 + 55 65 79 1 + 55 65 80 1 + 55 65 81 1 + 55 65 82 1 + 55 65 83 1 + 55 65 84 1 + 55 65 85 1 + 55 65 86 1 + 55 65 87 0.990327 + 55 65 88 0.10703 + 55 66 39 0.0529903 + 55 66 40 0.961214 + 55 66 41 1 + 55 66 42 1 + 55 66 43 1 + 55 66 44 1 + 55 66 45 1 + 55 66 46 1 + 55 66 47 1 + 55 66 48 1 + 55 66 49 1 + 55 66 50 1 + 55 66 51 1 + 55 66 52 1 + 55 66 53 1 + 55 66 54 1 + 55 66 55 1 + 55 66 56 1 + 55 66 57 1 + 55 66 58 1 + 55 66 59 1 + 55 66 60 1 + 55 66 61 1 + 55 66 62 1 + 55 66 63 1 + 55 66 64 1 + 55 66 65 1 + 55 66 66 1 + 55 66 67 1 + 55 66 68 1 + 55 66 69 1 + 55 66 70 1 + 55 66 71 1 + 55 66 72 1 + 55 66 73 1 + 55 66 74 1 + 55 66 75 1 + 55 66 76 1 + 55 66 77 1 + 55 66 78 1 + 55 66 79 1 + 55 66 80 1 + 55 66 81 1 + 55 66 82 1 + 55 66 83 1 + 55 66 84 1 + 55 66 85 1 + 55 66 86 1 + 55 66 87 0.961214 + 55 66 88 0.0529903 + 55 67 39 0.00850155 + 55 67 40 0.880429 + 55 67 41 1 + 55 67 42 1 + 55 67 43 1 + 55 67 44 1 + 55 67 45 1 + 55 67 46 1 + 55 67 47 1 + 55 67 48 1 + 55 67 49 1 + 55 67 50 1 + 55 67 51 1 + 55 67 52 1 + 55 67 53 1 + 55 67 54 1 + 55 67 55 1 + 55 67 56 1 + 55 67 57 1 + 55 67 58 1 + 55 67 59 1 + 55 67 60 1 + 55 67 61 1 + 55 67 62 1 + 55 67 63 1 + 55 67 64 1 + 55 67 65 1 + 55 67 66 1 + 55 67 67 1 + 55 67 68 1 + 55 67 69 1 + 55 67 70 1 + 55 67 71 1 + 55 67 72 1 + 55 67 73 1 + 55 67 74 1 + 55 67 75 1 + 55 67 76 1 + 55 67 77 1 + 55 67 78 1 + 55 67 79 1 + 55 67 80 1 + 55 67 81 1 + 55 67 82 1 + 55 67 83 1 + 55 67 84 1 + 55 67 85 1 + 55 67 86 1 + 55 67 87 0.880429 + 55 67 88 0.00850155 + 55 68 40 0.720869 + 55 68 41 1 + 55 68 42 1 + 55 68 43 1 + 55 68 44 1 + 55 68 45 1 + 55 68 46 1 + 55 68 47 1 + 55 68 48 1 + 55 68 49 1 + 55 68 50 1 + 55 68 51 1 + 55 68 52 1 + 55 68 53 1 + 55 68 54 1 + 55 68 55 1 + 55 68 56 1 + 55 68 57 1 + 55 68 58 1 + 55 68 59 1 + 55 68 60 1 + 55 68 61 1 + 55 68 62 1 + 55 68 63 1 + 55 68 64 1 + 55 68 65 1 + 55 68 66 1 + 55 68 67 1 + 55 68 68 1 + 55 68 69 1 + 55 68 70 1 + 55 68 71 1 + 55 68 72 1 + 55 68 73 1 + 55 68 74 1 + 55 68 75 1 + 55 68 76 1 + 55 68 77 1 + 55 68 78 1 + 55 68 79 1 + 55 68 80 1 + 55 68 81 1 + 55 68 82 1 + 55 68 83 1 + 55 68 84 1 + 55 68 85 1 + 55 68 86 1 + 55 68 87 0.720869 + 55 69 40 0.509102 + 55 69 41 1 + 55 69 42 1 + 55 69 43 1 + 55 69 44 1 + 55 69 45 1 + 55 69 46 1 + 55 69 47 1 + 55 69 48 1 + 55 69 49 1 + 55 69 50 1 + 55 69 51 1 + 55 69 52 1 + 55 69 53 1 + 55 69 54 1 + 55 69 55 1 + 55 69 56 1 + 55 69 57 1 + 55 69 58 1 + 55 69 59 1 + 55 69 60 1 + 55 69 61 1 + 55 69 62 1 + 55 69 63 1 + 55 69 64 1 + 55 69 65 1 + 55 69 66 1 + 55 69 67 1 + 55 69 68 1 + 55 69 69 1 + 55 69 70 1 + 55 69 71 1 + 55 69 72 1 + 55 69 73 1 + 55 69 74 1 + 55 69 75 1 + 55 69 76 1 + 55 69 77 1 + 55 69 78 1 + 55 69 79 1 + 55 69 80 1 + 55 69 81 1 + 55 69 82 1 + 55 69 83 1 + 55 69 84 1 + 55 69 85 1 + 55 69 86 1 + 55 69 87 0.509102 + 55 70 40 0.253138 + 55 70 41 0.999295 + 55 70 42 1 + 55 70 43 1 + 55 70 44 1 + 55 70 45 1 + 55 70 46 1 + 55 70 47 1 + 55 70 48 1 + 55 70 49 1 + 55 70 50 1 + 55 70 51 1 + 55 70 52 1 + 55 70 53 1 + 55 70 54 1 + 55 70 55 1 + 55 70 56 1 + 55 70 57 1 + 55 70 58 1 + 55 70 59 1 + 55 70 60 1 + 55 70 61 1 + 55 70 62 1 + 55 70 63 1 + 55 70 64 1 + 55 70 65 1 + 55 70 66 1 + 55 70 67 1 + 55 70 68 1 + 55 70 69 1 + 55 70 70 1 + 55 70 71 1 + 55 70 72 1 + 55 70 73 1 + 55 70 74 1 + 55 70 75 1 + 55 70 76 1 + 55 70 77 1 + 55 70 78 1 + 55 70 79 1 + 55 70 80 1 + 55 70 81 1 + 55 70 82 1 + 55 70 83 1 + 55 70 84 1 + 55 70 85 1 + 55 70 86 0.999295 + 55 70 87 0.253138 + 55 71 40 0.036314 + 55 71 41 0.913043 + 55 71 42 1 + 55 71 43 1 + 55 71 44 1 + 55 71 45 1 + 55 71 46 1 + 55 71 47 1 + 55 71 48 1 + 55 71 49 1 + 55 71 50 1 + 55 71 51 1 + 55 71 52 1 + 55 71 53 1 + 55 71 54 1 + 55 71 55 1 + 55 71 56 1 + 55 71 57 1 + 55 71 58 1 + 55 71 59 1 + 55 71 60 1 + 55 71 61 1 + 55 71 62 1 + 55 71 63 1 + 55 71 64 1 + 55 71 65 1 + 55 71 66 1 + 55 71 67 1 + 55 71 68 1 + 55 71 69 1 + 55 71 70 1 + 55 71 71 1 + 55 71 72 1 + 55 71 73 1 + 55 71 74 1 + 55 71 75 1 + 55 71 76 1 + 55 71 77 1 + 55 71 78 1 + 55 71 79 1 + 55 71 80 1 + 55 71 81 1 + 55 71 82 1 + 55 71 83 1 + 55 71 84 1 + 55 71 85 1 + 55 71 86 0.913043 + 55 71 87 0.036314 + 55 72 41 0.598003 + 55 72 42 1 + 55 72 43 1 + 55 72 44 1 + 55 72 45 1 + 55 72 46 1 + 55 72 47 1 + 55 72 48 1 + 55 72 49 1 + 55 72 50 1 + 55 72 51 1 + 55 72 52 1 + 55 72 53 1 + 55 72 54 1 + 55 72 55 1 + 55 72 56 1 + 55 72 57 1 + 55 72 58 1 + 55 72 59 1 + 55 72 60 1 + 55 72 61 1 + 55 72 62 1 + 55 72 63 1 + 55 72 64 1 + 55 72 65 1 + 55 72 66 1 + 55 72 67 1 + 55 72 68 1 + 55 72 69 1 + 55 72 70 1 + 55 72 71 1 + 55 72 72 1 + 55 72 73 1 + 55 72 74 1 + 55 72 75 1 + 55 72 76 1 + 55 72 77 1 + 55 72 78 1 + 55 72 79 1 + 55 72 80 1 + 55 72 81 1 + 55 72 82 1 + 55 72 83 1 + 55 72 84 1 + 55 72 85 1 + 55 72 86 0.598003 + 55 73 41 0.205791 + 55 73 42 0.990286 + 55 73 43 1 + 55 73 44 1 + 55 73 45 1 + 55 73 46 1 + 55 73 47 1 + 55 73 48 1 + 55 73 49 1 + 55 73 50 1 + 55 73 51 1 + 55 73 52 1 + 55 73 53 1 + 55 73 54 1 + 55 73 55 1 + 55 73 56 1 + 55 73 57 1 + 55 73 58 1 + 55 73 59 1 + 55 73 60 1 + 55 73 61 1 + 55 73 62 1 + 55 73 63 1 + 55 73 64 1 + 55 73 65 1 + 55 73 66 1 + 55 73 67 1 + 55 73 68 1 + 55 73 69 1 + 55 73 70 1 + 55 73 71 1 + 55 73 72 1 + 55 73 73 1 + 55 73 74 1 + 55 73 75 1 + 55 73 76 1 + 55 73 77 1 + 55 73 78 1 + 55 73 79 1 + 55 73 80 1 + 55 73 81 1 + 55 73 82 1 + 55 73 83 1 + 55 73 84 1 + 55 73 85 0.990286 + 55 73 86 0.205791 + 55 74 41 0.00460294 + 55 74 42 0.736168 + 55 74 43 1 + 55 74 44 1 + 55 74 45 1 + 55 74 46 1 + 55 74 47 1 + 55 74 48 1 + 55 74 49 1 + 55 74 50 1 + 55 74 51 1 + 55 74 52 1 + 55 74 53 1 + 55 74 54 1 + 55 74 55 1 + 55 74 56 1 + 55 74 57 1 + 55 74 58 1 + 55 74 59 1 + 55 74 60 1 + 55 74 61 1 + 55 74 62 1 + 55 74 63 1 + 55 74 64 1 + 55 74 65 1 + 55 74 66 1 + 55 74 67 1 + 55 74 68 1 + 55 74 69 1 + 55 74 70 1 + 55 74 71 1 + 55 74 72 1 + 55 74 73 1 + 55 74 74 1 + 55 74 75 1 + 55 74 76 1 + 55 74 77 1 + 55 74 78 1 + 55 74 79 1 + 55 74 80 1 + 55 74 81 1 + 55 74 82 1 + 55 74 83 1 + 55 74 84 1 + 55 74 85 0.736168 + 55 74 86 0.00460294 + 55 75 42 0.240042 + 55 75 43 0.988606 + 55 75 44 1 + 55 75 45 1 + 55 75 46 1 + 55 75 47 1 + 55 75 48 1 + 55 75 49 1 + 55 75 50 1 + 55 75 51 1 + 55 75 52 1 + 55 75 53 1 + 55 75 54 1 + 55 75 55 1 + 55 75 56 1 + 55 75 57 1 + 55 75 58 1 + 55 75 59 1 + 55 75 60 1 + 55 75 61 1 + 55 75 62 1 + 55 75 63 1 + 55 75 64 1 + 55 75 65 1 + 55 75 66 1 + 55 75 67 1 + 55 75 68 1 + 55 75 69 1 + 55 75 70 1 + 55 75 71 1 + 55 75 72 1 + 55 75 73 1 + 55 75 74 1 + 55 75 75 1 + 55 75 76 1 + 55 75 77 1 + 55 75 78 1 + 55 75 79 1 + 55 75 80 1 + 55 75 81 1 + 55 75 82 1 + 55 75 83 1 + 55 75 84 0.988606 + 55 75 85 0.240042 + 55 76 42 0.00260739 + 55 76 43 0.652868 + 55 76 44 1 + 55 76 45 1 + 55 76 46 1 + 55 76 47 1 + 55 76 48 1 + 55 76 49 1 + 55 76 50 1 + 55 76 51 1 + 55 76 52 1 + 55 76 53 1 + 55 76 54 1 + 55 76 55 1 + 55 76 56 1 + 55 76 57 1 + 55 76 58 1 + 55 76 59 1 + 55 76 60 1 + 55 76 61 1 + 55 76 62 1 + 55 76 63 1 + 55 76 64 1 + 55 76 65 1 + 55 76 66 1 + 55 76 67 1 + 55 76 68 1 + 55 76 69 1 + 55 76 70 1 + 55 76 71 1 + 55 76 72 1 + 55 76 73 1 + 55 76 74 1 + 55 76 75 1 + 55 76 76 1 + 55 76 77 1 + 55 76 78 1 + 55 76 79 1 + 55 76 80 1 + 55 76 81 1 + 55 76 82 1 + 55 76 83 1 + 55 76 84 0.652868 + 55 76 85 0.00260739 + 55 77 43 0.103719 + 55 77 44 0.912283 + 55 77 45 1 + 55 77 46 1 + 55 77 47 1 + 55 77 48 1 + 55 77 49 1 + 55 77 50 1 + 55 77 51 1 + 55 77 52 1 + 55 77 53 1 + 55 77 54 1 + 55 77 55 1 + 55 77 56 1 + 55 77 57 1 + 55 77 58 1 + 55 77 59 1 + 55 77 60 1 + 55 77 61 1 + 55 77 62 1 + 55 77 63 1 + 55 77 64 1 + 55 77 65 1 + 55 77 66 1 + 55 77 67 1 + 55 77 68 1 + 55 77 69 1 + 55 77 70 1 + 55 77 71 1 + 55 77 72 1 + 55 77 73 1 + 55 77 74 1 + 55 77 75 1 + 55 77 76 1 + 55 77 77 1 + 55 77 78 1 + 55 77 79 1 + 55 77 80 1 + 55 77 81 1 + 55 77 82 1 + 55 77 83 0.912283 + 55 77 84 0.103719 + 55 78 44 0.316818 + 55 78 45 0.986811 + 55 78 46 1 + 55 78 47 1 + 55 78 48 1 + 55 78 49 1 + 55 78 50 1 + 55 78 51 1 + 55 78 52 1 + 55 78 53 1 + 55 78 54 1 + 55 78 55 1 + 55 78 56 1 + 55 78 57 1 + 55 78 58 1 + 55 78 59 1 + 55 78 60 1 + 55 78 61 1 + 55 78 62 1 + 55 78 63 1 + 55 78 64 1 + 55 78 65 1 + 55 78 66 1 + 55 78 67 1 + 55 78 68 1 + 55 78 69 1 + 55 78 70 1 + 55 78 71 1 + 55 78 72 1 + 55 78 73 1 + 55 78 74 1 + 55 78 75 1 + 55 78 76 1 + 55 78 77 1 + 55 78 78 1 + 55 78 79 1 + 55 78 80 1 + 55 78 81 1 + 55 78 82 0.986811 + 55 78 83 0.316818 + 55 79 44 0.00138601 + 55 79 45 0.51 + 55 79 46 0.998538 + 55 79 47 1 + 55 79 48 1 + 55 79 49 1 + 55 79 50 1 + 55 79 51 1 + 55 79 52 1 + 55 79 53 1 + 55 79 54 1 + 55 79 55 1 + 55 79 56 1 + 55 79 57 1 + 55 79 58 1 + 55 79 59 1 + 55 79 60 1 + 55 79 61 1 + 55 79 62 1 + 55 79 63 1 + 55 79 64 1 + 55 79 65 1 + 55 79 66 1 + 55 79 67 1 + 55 79 68 1 + 55 79 69 1 + 55 79 70 1 + 55 79 71 1 + 55 79 72 1 + 55 79 73 1 + 55 79 74 1 + 55 79 75 1 + 55 79 76 1 + 55 79 77 1 + 55 79 78 1 + 55 79 79 1 + 55 79 80 1 + 55 79 81 0.998538 + 55 79 82 0.51 + 55 79 83 0.00138601 + 55 80 45 0.0128488 + 55 80 46 0.611412 + 55 80 47 0.99961 + 55 80 48 1 + 55 80 49 1 + 55 80 50 1 + 55 80 51 1 + 55 80 52 1 + 55 80 53 1 + 55 80 54 1 + 55 80 55 1 + 55 80 56 1 + 55 80 57 1 + 55 80 58 1 + 55 80 59 1 + 55 80 60 1 + 55 80 61 1 + 55 80 62 1 + 55 80 63 1 + 55 80 64 1 + 55 80 65 1 + 55 80 66 1 + 55 80 67 1 + 55 80 68 1 + 55 80 69 1 + 55 80 70 1 + 55 80 71 1 + 55 80 72 1 + 55 80 73 1 + 55 80 74 1 + 55 80 75 1 + 55 80 76 1 + 55 80 77 1 + 55 80 78 1 + 55 80 79 1 + 55 80 80 0.99961 + 55 80 81 0.611412 + 55 80 82 0.0128488 + 55 81 46 0.0207198 + 55 81 47 0.611412 + 55 81 48 0.998538 + 55 81 49 1 + 55 81 50 1 + 55 81 51 1 + 55 81 52 1 + 55 81 53 1 + 55 81 54 1 + 55 81 55 1 + 55 81 56 1 + 55 81 57 1 + 55 81 58 1 + 55 81 59 1 + 55 81 60 1 + 55 81 61 1 + 55 81 62 1 + 55 81 63 1 + 55 81 64 1 + 55 81 65 1 + 55 81 66 1 + 55 81 67 1 + 55 81 68 1 + 55 81 69 1 + 55 81 70 1 + 55 81 71 1 + 55 81 72 1 + 55 81 73 1 + 55 81 74 1 + 55 81 75 1 + 55 81 76 1 + 55 81 77 1 + 55 81 78 1 + 55 81 79 0.998538 + 55 81 80 0.611412 + 55 81 81 0.0207198 + 55 82 47 0.0128488 + 55 82 48 0.51 + 55 82 49 0.986811 + 55 82 50 1 + 55 82 51 1 + 55 82 52 1 + 55 82 53 1 + 55 82 54 1 + 55 82 55 1 + 55 82 56 1 + 55 82 57 1 + 55 82 58 1 + 55 82 59 1 + 55 82 60 1 + 55 82 61 1 + 55 82 62 1 + 55 82 63 1 + 55 82 64 1 + 55 82 65 1 + 55 82 66 1 + 55 82 67 1 + 55 82 68 1 + 55 82 69 1 + 55 82 70 1 + 55 82 71 1 + 55 82 72 1 + 55 82 73 1 + 55 82 74 1 + 55 82 75 1 + 55 82 76 1 + 55 82 77 1 + 55 82 78 0.986811 + 55 82 79 0.51 + 55 82 80 0.0128488 + 55 83 48 0.00138601 + 55 83 49 0.316818 + 55 83 50 0.912283 + 55 83 51 1 + 55 83 52 1 + 55 83 53 1 + 55 83 54 1 + 55 83 55 1 + 55 83 56 1 + 55 83 57 1 + 55 83 58 1 + 55 83 59 1 + 55 83 60 1 + 55 83 61 1 + 55 83 62 1 + 55 83 63 1 + 55 83 64 1 + 55 83 65 1 + 55 83 66 1 + 55 83 67 1 + 55 83 68 1 + 55 83 69 1 + 55 83 70 1 + 55 83 71 1 + 55 83 72 1 + 55 83 73 1 + 55 83 74 1 + 55 83 75 1 + 55 83 76 1 + 55 83 77 0.912283 + 55 83 78 0.316818 + 55 83 79 0.00138601 + 55 84 50 0.103719 + 55 84 51 0.652868 + 55 84 52 0.988606 + 55 84 53 1 + 55 84 54 1 + 55 84 55 1 + 55 84 56 1 + 55 84 57 1 + 55 84 58 1 + 55 84 59 1 + 55 84 60 1 + 55 84 61 1 + 55 84 62 1 + 55 84 63 1 + 55 84 64 1 + 55 84 65 1 + 55 84 66 1 + 55 84 67 1 + 55 84 68 1 + 55 84 69 1 + 55 84 70 1 + 55 84 71 1 + 55 84 72 1 + 55 84 73 1 + 55 84 74 1 + 55 84 75 0.988606 + 55 84 76 0.652868 + 55 84 77 0.103719 + 55 85 51 0.00260739 + 55 85 52 0.240042 + 55 85 53 0.736168 + 55 85 54 0.990286 + 55 85 55 1 + 55 85 56 1 + 55 85 57 1 + 55 85 58 1 + 55 85 59 1 + 55 85 60 1 + 55 85 61 1 + 55 85 62 1 + 55 85 63 1 + 55 85 64 1 + 55 85 65 1 + 55 85 66 1 + 55 85 67 1 + 55 85 68 1 + 55 85 69 1 + 55 85 70 1 + 55 85 71 1 + 55 85 72 1 + 55 85 73 0.990286 + 55 85 74 0.736168 + 55 85 75 0.240042 + 55 85 76 0.00260739 + 55 86 53 0.00460294 + 55 86 54 0.205791 + 55 86 55 0.598003 + 55 86 56 0.913043 + 55 86 57 0.999295 + 55 86 58 1 + 55 86 59 1 + 55 86 60 1 + 55 86 61 1 + 55 86 62 1 + 55 86 63 1 + 55 86 64 1 + 55 86 65 1 + 55 86 66 1 + 55 86 67 1 + 55 86 68 1 + 55 86 69 1 + 55 86 70 0.999295 + 55 86 71 0.913043 + 55 86 72 0.598003 + 55 86 73 0.205791 + 55 86 74 0.00460294 + 55 87 56 0.036314 + 55 87 57 0.253138 + 55 87 58 0.509102 + 55 87 59 0.720869 + 55 87 60 0.880429 + 55 87 61 0.961214 + 55 87 62 0.990327 + 55 87 63 0.997684 + 55 87 64 0.997684 + 55 87 65 0.990327 + 55 87 66 0.961214 + 55 87 67 0.880429 + 55 87 68 0.720869 + 55 87 69 0.509102 + 55 87 70 0.253138 + 55 87 71 0.036314 + 55 88 60 0.00850155 + 55 88 61 0.0529903 + 55 88 62 0.10703 + 55 88 63 0.141143 + 55 88 64 0.141143 + 55 88 65 0.10703 + 55 88 66 0.0529903 + 55 88 67 0.00850155 + 56 39 58 0.00366907 + 56 39 59 0.0767609 + 56 39 60 0.221559 + 56 39 61 0.345113 + 56 39 62 0.42714 + 56 39 63 0.46805 + 56 39 64 0.46805 + 56 39 65 0.42714 + 56 39 66 0.345113 + 56 39 67 0.221559 + 56 39 68 0.0767609 + 56 39 69 0.00366907 + 56 40 55 0.036314 + 56 40 56 0.295471 + 56 40 57 0.594037 + 56 40 58 0.843357 + 56 40 59 0.979056 + 56 40 60 0.999993 + 56 40 61 1 + 56 40 62 1 + 56 40 63 1 + 56 40 64 1 + 56 40 65 1 + 56 40 66 1 + 56 40 67 0.999993 + 56 40 68 0.979056 + 56 40 69 0.843357 + 56 40 70 0.594037 + 56 40 71 0.295471 + 56 40 72 0.036314 + 56 41 52 3.07754e-05 + 56 41 53 0.134362 + 56 41 54 0.553699 + 56 41 55 0.913043 + 56 41 56 0.999937 + 56 41 57 1 + 56 41 58 1 + 56 41 59 1 + 56 41 60 1 + 56 41 61 1 + 56 41 62 1 + 56 41 63 1 + 56 41 64 1 + 56 41 65 1 + 56 41 66 1 + 56 41 67 1 + 56 41 68 1 + 56 41 69 1 + 56 41 70 1 + 56 41 71 0.999937 + 56 41 72 0.913043 + 56 41 73 0.553699 + 56 41 74 0.134362 + 56 41 75 3.07754e-05 + 56 42 51 0.104302 + 56 42 52 0.602276 + 56 42 53 0.971405 + 56 42 54 1 + 56 42 55 1 + 56 42 56 1 + 56 42 57 1 + 56 42 58 1 + 56 42 59 1 + 56 42 60 1 + 56 42 61 1 + 56 42 62 1 + 56 42 63 1 + 56 42 64 1 + 56 42 65 1 + 56 42 66 1 + 56 42 67 1 + 56 42 68 1 + 56 42 69 1 + 56 42 70 1 + 56 42 71 1 + 56 42 72 1 + 56 42 73 1 + 56 42 74 0.971405 + 56 42 75 0.602276 + 56 42 76 0.104302 + 56 43 49 0.0114126 + 56 43 50 0.41284 + 56 43 51 0.935026 + 56 43 52 1 + 56 43 53 1 + 56 43 54 1 + 56 43 55 1 + 56 43 56 1 + 56 43 57 1 + 56 43 58 1 + 56 43 59 1 + 56 43 60 1 + 56 43 61 1 + 56 43 62 1 + 56 43 63 1 + 56 43 64 1 + 56 43 65 1 + 56 43 66 1 + 56 43 67 1 + 56 43 68 1 + 56 43 69 1 + 56 43 70 1 + 56 43 71 1 + 56 43 72 1 + 56 43 73 1 + 56 43 74 1 + 56 43 75 1 + 56 43 76 0.935026 + 56 43 77 0.41284 + 56 43 78 0.0114126 + 56 44 48 0.0811434 + 56 44 49 0.702444 + 56 44 50 0.999058 + 56 44 51 1 + 56 44 52 1 + 56 44 53 1 + 56 44 54 1 + 56 44 55 1 + 56 44 56 1 + 56 44 57 1 + 56 44 58 1 + 56 44 59 1 + 56 44 60 1 + 56 44 61 1 + 56 44 62 1 + 56 44 63 1 + 56 44 64 1 + 56 44 65 1 + 56 44 66 1 + 56 44 67 1 + 56 44 68 1 + 56 44 69 1 + 56 44 70 1 + 56 44 71 1 + 56 44 72 1 + 56 44 73 1 + 56 44 74 1 + 56 44 75 1 + 56 44 76 1 + 56 44 77 0.999058 + 56 44 78 0.702444 + 56 44 79 0.0811434 + 56 45 47 0.16137 + 56 45 48 0.856237 + 56 45 49 1 + 56 45 50 1 + 56 45 51 1 + 56 45 52 1 + 56 45 53 1 + 56 45 54 1 + 56 45 55 1 + 56 45 56 1 + 56 45 57 1 + 56 45 58 1 + 56 45 59 1 + 56 45 60 1 + 56 45 61 1 + 56 45 62 1 + 56 45 63 1 + 56 45 64 1 + 56 45 65 1 + 56 45 66 1 + 56 45 67 1 + 56 45 68 1 + 56 45 69 1 + 56 45 70 1 + 56 45 71 1 + 56 45 72 1 + 56 45 73 1 + 56 45 74 1 + 56 45 75 1 + 56 45 76 1 + 56 45 77 1 + 56 45 78 1 + 56 45 79 0.856237 + 56 45 80 0.16137 + 56 46 46 0.194293 + 56 46 47 0.910969 + 56 46 48 1 + 56 46 49 1 + 56 46 50 1 + 56 46 51 1 + 56 46 52 1 + 56 46 53 1 + 56 46 54 1 + 56 46 55 1 + 56 46 56 1 + 56 46 57 1 + 56 46 58 1 + 56 46 59 1 + 56 46 60 1 + 56 46 61 1 + 56 46 62 1 + 56 46 63 1 + 56 46 64 1 + 56 46 65 1 + 56 46 66 1 + 56 46 67 1 + 56 46 68 1 + 56 46 69 1 + 56 46 70 1 + 56 46 71 1 + 56 46 72 1 + 56 46 73 1 + 56 46 74 1 + 56 46 75 1 + 56 46 76 1 + 56 46 77 1 + 56 46 78 1 + 56 46 79 1 + 56 46 80 0.910969 + 56 46 81 0.194293 + 56 47 45 0.16137 + 56 47 46 0.910969 + 56 47 47 1 + 56 47 48 1 + 56 47 49 1 + 56 47 50 1 + 56 47 51 1 + 56 47 52 1 + 56 47 53 1 + 56 47 54 1 + 56 47 55 1 + 56 47 56 1 + 56 47 57 1 + 56 47 58 1 + 56 47 59 1 + 56 47 60 1 + 56 47 61 1 + 56 47 62 1 + 56 47 63 1 + 56 47 64 1 + 56 47 65 1 + 56 47 66 1 + 56 47 67 1 + 56 47 68 1 + 56 47 69 1 + 56 47 70 1 + 56 47 71 1 + 56 47 72 1 + 56 47 73 1 + 56 47 74 1 + 56 47 75 1 + 56 47 76 1 + 56 47 77 1 + 56 47 78 1 + 56 47 79 1 + 56 47 80 1 + 56 47 81 0.910969 + 56 47 82 0.16137 + 56 48 44 0.0811434 + 56 48 45 0.856237 + 56 48 46 1 + 56 48 47 1 + 56 48 48 1 + 56 48 49 1 + 56 48 50 1 + 56 48 51 1 + 56 48 52 1 + 56 48 53 1 + 56 48 54 1 + 56 48 55 1 + 56 48 56 1 + 56 48 57 1 + 56 48 58 1 + 56 48 59 1 + 56 48 60 1 + 56 48 61 1 + 56 48 62 1 + 56 48 63 1 + 56 48 64 1 + 56 48 65 1 + 56 48 66 1 + 56 48 67 1 + 56 48 68 1 + 56 48 69 1 + 56 48 70 1 + 56 48 71 1 + 56 48 72 1 + 56 48 73 1 + 56 48 74 1 + 56 48 75 1 + 56 48 76 1 + 56 48 77 1 + 56 48 78 1 + 56 48 79 1 + 56 48 80 1 + 56 48 81 1 + 56 48 82 0.856237 + 56 48 83 0.0811434 + 56 49 43 0.0114126 + 56 49 44 0.702444 + 56 49 45 1 + 56 49 46 1 + 56 49 47 1 + 56 49 48 1 + 56 49 49 1 + 56 49 50 1 + 56 49 51 1 + 56 49 52 1 + 56 49 53 1 + 56 49 54 1 + 56 49 55 1 + 56 49 56 1 + 56 49 57 1 + 56 49 58 1 + 56 49 59 1 + 56 49 60 1 + 56 49 61 1 + 56 49 62 1 + 56 49 63 1 + 56 49 64 1 + 56 49 65 1 + 56 49 66 1 + 56 49 67 1 + 56 49 68 1 + 56 49 69 1 + 56 49 70 1 + 56 49 71 1 + 56 49 72 1 + 56 49 73 1 + 56 49 74 1 + 56 49 75 1 + 56 49 76 1 + 56 49 77 1 + 56 49 78 1 + 56 49 79 1 + 56 49 80 1 + 56 49 81 1 + 56 49 82 1 + 56 49 83 0.702444 + 56 49 84 0.0114126 + 56 50 43 0.41284 + 56 50 44 0.999058 + 56 50 45 1 + 56 50 46 1 + 56 50 47 1 + 56 50 48 1 + 56 50 49 1 + 56 50 50 1 + 56 50 51 1 + 56 50 52 1 + 56 50 53 1 + 56 50 54 1 + 56 50 55 1 + 56 50 56 1 + 56 50 57 1 + 56 50 58 1 + 56 50 59 1 + 56 50 60 1 + 56 50 61 1 + 56 50 62 1 + 56 50 63 1 + 56 50 64 1 + 56 50 65 1 + 56 50 66 1 + 56 50 67 1 + 56 50 68 1 + 56 50 69 1 + 56 50 70 1 + 56 50 71 1 + 56 50 72 1 + 56 50 73 1 + 56 50 74 1 + 56 50 75 1 + 56 50 76 1 + 56 50 77 1 + 56 50 78 1 + 56 50 79 1 + 56 50 80 1 + 56 50 81 1 + 56 50 82 1 + 56 50 83 0.999058 + 56 50 84 0.41284 + 56 51 42 0.104302 + 56 51 43 0.935026 + 56 51 44 1 + 56 51 45 1 + 56 51 46 1 + 56 51 47 1 + 56 51 48 1 + 56 51 49 1 + 56 51 50 1 + 56 51 51 1 + 56 51 52 1 + 56 51 53 1 + 56 51 54 1 + 56 51 55 1 + 56 51 56 1 + 56 51 57 1 + 56 51 58 1 + 56 51 59 1 + 56 51 60 1 + 56 51 61 1 + 56 51 62 1 + 56 51 63 1 + 56 51 64 1 + 56 51 65 1 + 56 51 66 1 + 56 51 67 1 + 56 51 68 1 + 56 51 69 1 + 56 51 70 1 + 56 51 71 1 + 56 51 72 1 + 56 51 73 1 + 56 51 74 1 + 56 51 75 1 + 56 51 76 1 + 56 51 77 1 + 56 51 78 1 + 56 51 79 1 + 56 51 80 1 + 56 51 81 1 + 56 51 82 1 + 56 51 83 1 + 56 51 84 0.935026 + 56 51 85 0.104302 + 56 52 41 3.07754e-05 + 56 52 42 0.602276 + 56 52 43 1 + 56 52 44 1 + 56 52 45 1 + 56 52 46 1 + 56 52 47 1 + 56 52 48 1 + 56 52 49 1 + 56 52 50 1 + 56 52 51 1 + 56 52 52 1 + 56 52 53 1 + 56 52 54 1 + 56 52 55 1 + 56 52 56 1 + 56 52 57 1 + 56 52 58 1 + 56 52 59 1 + 56 52 60 1 + 56 52 61 1 + 56 52 62 1 + 56 52 63 1 + 56 52 64 1 + 56 52 65 1 + 56 52 66 1 + 56 52 67 1 + 56 52 68 1 + 56 52 69 1 + 56 52 70 1 + 56 52 71 1 + 56 52 72 1 + 56 52 73 1 + 56 52 74 1 + 56 52 75 1 + 56 52 76 1 + 56 52 77 1 + 56 52 78 1 + 56 52 79 1 + 56 52 80 1 + 56 52 81 1 + 56 52 82 1 + 56 52 83 1 + 56 52 84 1 + 56 52 85 0.602276 + 56 52 86 3.07754e-05 + 56 53 41 0.134362 + 56 53 42 0.971405 + 56 53 43 1 + 56 53 44 1 + 56 53 45 1 + 56 53 46 1 + 56 53 47 1 + 56 53 48 1 + 56 53 49 1 + 56 53 50 1 + 56 53 51 1 + 56 53 52 1 + 56 53 53 1 + 56 53 54 1 + 56 53 55 1 + 56 53 56 1 + 56 53 57 1 + 56 53 58 1 + 56 53 59 1 + 56 53 60 1 + 56 53 61 1 + 56 53 62 1 + 56 53 63 1 + 56 53 64 1 + 56 53 65 1 + 56 53 66 1 + 56 53 67 1 + 56 53 68 1 + 56 53 69 1 + 56 53 70 1 + 56 53 71 1 + 56 53 72 1 + 56 53 73 1 + 56 53 74 1 + 56 53 75 1 + 56 53 76 1 + 56 53 77 1 + 56 53 78 1 + 56 53 79 1 + 56 53 80 1 + 56 53 81 1 + 56 53 82 1 + 56 53 83 1 + 56 53 84 1 + 56 53 85 0.971405 + 56 53 86 0.134362 + 56 54 41 0.553699 + 56 54 42 1 + 56 54 43 1 + 56 54 44 1 + 56 54 45 1 + 56 54 46 1 + 56 54 47 1 + 56 54 48 1 + 56 54 49 1 + 56 54 50 1 + 56 54 51 1 + 56 54 52 1 + 56 54 53 1 + 56 54 54 1 + 56 54 55 1 + 56 54 56 1 + 56 54 57 1 + 56 54 58 1 + 56 54 59 1 + 56 54 60 1 + 56 54 61 1 + 56 54 62 1 + 56 54 63 1 + 56 54 64 1 + 56 54 65 1 + 56 54 66 1 + 56 54 67 1 + 56 54 68 1 + 56 54 69 1 + 56 54 70 1 + 56 54 71 1 + 56 54 72 1 + 56 54 73 1 + 56 54 74 1 + 56 54 75 1 + 56 54 76 1 + 56 54 77 1 + 56 54 78 1 + 56 54 79 1 + 56 54 80 1 + 56 54 81 1 + 56 54 82 1 + 56 54 83 1 + 56 54 84 1 + 56 54 85 1 + 56 54 86 0.553699 + 56 55 40 0.036314 + 56 55 41 0.913043 + 56 55 42 1 + 56 55 43 1 + 56 55 44 1 + 56 55 45 1 + 56 55 46 1 + 56 55 47 1 + 56 55 48 1 + 56 55 49 1 + 56 55 50 1 + 56 55 51 1 + 56 55 52 1 + 56 55 53 1 + 56 55 54 1 + 56 55 55 1 + 56 55 56 1 + 56 55 57 1 + 56 55 58 1 + 56 55 59 1 + 56 55 60 1 + 56 55 61 1 + 56 55 62 1 + 56 55 63 1 + 56 55 64 1 + 56 55 65 1 + 56 55 66 1 + 56 55 67 1 + 56 55 68 1 + 56 55 69 1 + 56 55 70 1 + 56 55 71 1 + 56 55 72 1 + 56 55 73 1 + 56 55 74 1 + 56 55 75 1 + 56 55 76 1 + 56 55 77 1 + 56 55 78 1 + 56 55 79 1 + 56 55 80 1 + 56 55 81 1 + 56 55 82 1 + 56 55 83 1 + 56 55 84 1 + 56 55 85 1 + 56 55 86 0.913043 + 56 55 87 0.036314 + 56 56 40 0.295471 + 56 56 41 0.999937 + 56 56 42 1 + 56 56 43 1 + 56 56 44 1 + 56 56 45 1 + 56 56 46 1 + 56 56 47 1 + 56 56 48 1 + 56 56 49 1 + 56 56 50 1 + 56 56 51 1 + 56 56 52 1 + 56 56 53 1 + 56 56 54 1 + 56 56 55 1 + 56 56 56 1 + 56 56 57 1 + 56 56 58 1 + 56 56 59 1 + 56 56 60 1 + 56 56 61 1 + 56 56 62 1 + 56 56 63 1 + 56 56 64 1 + 56 56 65 1 + 56 56 66 1 + 56 56 67 1 + 56 56 68 1 + 56 56 69 1 + 56 56 70 1 + 56 56 71 1 + 56 56 72 1 + 56 56 73 1 + 56 56 74 1 + 56 56 75 1 + 56 56 76 1 + 56 56 77 1 + 56 56 78 1 + 56 56 79 1 + 56 56 80 1 + 56 56 81 1 + 56 56 82 1 + 56 56 83 1 + 56 56 84 1 + 56 56 85 1 + 56 56 86 0.999937 + 56 56 87 0.295471 + 56 57 40 0.594037 + 56 57 41 1 + 56 57 42 1 + 56 57 43 1 + 56 57 44 1 + 56 57 45 1 + 56 57 46 1 + 56 57 47 1 + 56 57 48 1 + 56 57 49 1 + 56 57 50 1 + 56 57 51 1 + 56 57 52 1 + 56 57 53 1 + 56 57 54 1 + 56 57 55 1 + 56 57 56 1 + 56 57 57 1 + 56 57 58 1 + 56 57 59 1 + 56 57 60 1 + 56 57 61 1 + 56 57 62 1 + 56 57 63 1 + 56 57 64 1 + 56 57 65 1 + 56 57 66 1 + 56 57 67 1 + 56 57 68 1 + 56 57 69 1 + 56 57 70 1 + 56 57 71 1 + 56 57 72 1 + 56 57 73 1 + 56 57 74 1 + 56 57 75 1 + 56 57 76 1 + 56 57 77 1 + 56 57 78 1 + 56 57 79 1 + 56 57 80 1 + 56 57 81 1 + 56 57 82 1 + 56 57 83 1 + 56 57 84 1 + 56 57 85 1 + 56 57 86 1 + 56 57 87 0.594037 + 56 58 39 0.00366907 + 56 58 40 0.843357 + 56 58 41 1 + 56 58 42 1 + 56 58 43 1 + 56 58 44 1 + 56 58 45 1 + 56 58 46 1 + 56 58 47 1 + 56 58 48 1 + 56 58 49 1 + 56 58 50 1 + 56 58 51 1 + 56 58 52 1 + 56 58 53 1 + 56 58 54 1 + 56 58 55 1 + 56 58 56 1 + 56 58 57 1 + 56 58 58 1 + 56 58 59 1 + 56 58 60 1 + 56 58 61 1 + 56 58 62 1 + 56 58 63 1 + 56 58 64 1 + 56 58 65 1 + 56 58 66 1 + 56 58 67 1 + 56 58 68 1 + 56 58 69 1 + 56 58 70 1 + 56 58 71 1 + 56 58 72 1 + 56 58 73 1 + 56 58 74 1 + 56 58 75 1 + 56 58 76 1 + 56 58 77 1 + 56 58 78 1 + 56 58 79 1 + 56 58 80 1 + 56 58 81 1 + 56 58 82 1 + 56 58 83 1 + 56 58 84 1 + 56 58 85 1 + 56 58 86 1 + 56 58 87 0.843357 + 56 58 88 0.00366907 + 56 59 39 0.0767609 + 56 59 40 0.979056 + 56 59 41 1 + 56 59 42 1 + 56 59 43 1 + 56 59 44 1 + 56 59 45 1 + 56 59 46 1 + 56 59 47 1 + 56 59 48 1 + 56 59 49 1 + 56 59 50 1 + 56 59 51 1 + 56 59 52 1 + 56 59 53 1 + 56 59 54 1 + 56 59 55 1 + 56 59 56 1 + 56 59 57 1 + 56 59 58 1 + 56 59 59 1 + 56 59 60 1 + 56 59 61 1 + 56 59 62 1 + 56 59 63 1 + 56 59 64 1 + 56 59 65 1 + 56 59 66 1 + 56 59 67 1 + 56 59 68 1 + 56 59 69 1 + 56 59 70 1 + 56 59 71 1 + 56 59 72 1 + 56 59 73 1 + 56 59 74 1 + 56 59 75 1 + 56 59 76 1 + 56 59 77 1 + 56 59 78 1 + 56 59 79 1 + 56 59 80 1 + 56 59 81 1 + 56 59 82 1 + 56 59 83 1 + 56 59 84 1 + 56 59 85 1 + 56 59 86 1 + 56 59 87 0.979056 + 56 59 88 0.0767609 + 56 60 39 0.221559 + 56 60 40 0.999993 + 56 60 41 1 + 56 60 42 1 + 56 60 43 1 + 56 60 44 1 + 56 60 45 1 + 56 60 46 1 + 56 60 47 1 + 56 60 48 1 + 56 60 49 1 + 56 60 50 1 + 56 60 51 1 + 56 60 52 1 + 56 60 53 1 + 56 60 54 1 + 56 60 55 1 + 56 60 56 1 + 56 60 57 1 + 56 60 58 1 + 56 60 59 1 + 56 60 60 1 + 56 60 61 1 + 56 60 62 1 + 56 60 63 1 + 56 60 64 1 + 56 60 65 1 + 56 60 66 1 + 56 60 67 1 + 56 60 68 1 + 56 60 69 1 + 56 60 70 1 + 56 60 71 1 + 56 60 72 1 + 56 60 73 1 + 56 60 74 1 + 56 60 75 1 + 56 60 76 1 + 56 60 77 1 + 56 60 78 1 + 56 60 79 1 + 56 60 80 1 + 56 60 81 1 + 56 60 82 1 + 56 60 83 1 + 56 60 84 1 + 56 60 85 1 + 56 60 86 1 + 56 60 87 0.999993 + 56 60 88 0.221559 + 56 61 39 0.345113 + 56 61 40 1 + 56 61 41 1 + 56 61 42 1 + 56 61 43 1 + 56 61 44 1 + 56 61 45 1 + 56 61 46 1 + 56 61 47 1 + 56 61 48 1 + 56 61 49 1 + 56 61 50 1 + 56 61 51 1 + 56 61 52 1 + 56 61 53 1 + 56 61 54 1 + 56 61 55 1 + 56 61 56 1 + 56 61 57 1 + 56 61 58 1 + 56 61 59 1 + 56 61 60 1 + 56 61 61 1 + 56 61 62 1 + 56 61 63 1 + 56 61 64 1 + 56 61 65 1 + 56 61 66 1 + 56 61 67 1 + 56 61 68 1 + 56 61 69 1 + 56 61 70 1 + 56 61 71 1 + 56 61 72 1 + 56 61 73 1 + 56 61 74 1 + 56 61 75 1 + 56 61 76 1 + 56 61 77 1 + 56 61 78 1 + 56 61 79 1 + 56 61 80 1 + 56 61 81 1 + 56 61 82 1 + 56 61 83 1 + 56 61 84 1 + 56 61 85 1 + 56 61 86 1 + 56 61 87 1 + 56 61 88 0.345113 + 56 62 39 0.42714 + 56 62 40 1 + 56 62 41 1 + 56 62 42 1 + 56 62 43 1 + 56 62 44 1 + 56 62 45 1 + 56 62 46 1 + 56 62 47 1 + 56 62 48 1 + 56 62 49 1 + 56 62 50 1 + 56 62 51 1 + 56 62 52 1 + 56 62 53 1 + 56 62 54 1 + 56 62 55 1 + 56 62 56 1 + 56 62 57 1 + 56 62 58 1 + 56 62 59 1 + 56 62 60 1 + 56 62 61 1 + 56 62 62 1 + 56 62 63 1 + 56 62 64 1 + 56 62 65 1 + 56 62 66 1 + 56 62 67 1 + 56 62 68 1 + 56 62 69 1 + 56 62 70 1 + 56 62 71 1 + 56 62 72 1 + 56 62 73 1 + 56 62 74 1 + 56 62 75 1 + 56 62 76 1 + 56 62 77 1 + 56 62 78 1 + 56 62 79 1 + 56 62 80 1 + 56 62 81 1 + 56 62 82 1 + 56 62 83 1 + 56 62 84 1 + 56 62 85 1 + 56 62 86 1 + 56 62 87 1 + 56 62 88 0.42714 + 56 63 39 0.46805 + 56 63 40 1 + 56 63 41 1 + 56 63 42 1 + 56 63 43 1 + 56 63 44 1 + 56 63 45 1 + 56 63 46 1 + 56 63 47 1 + 56 63 48 1 + 56 63 49 1 + 56 63 50 1 + 56 63 51 1 + 56 63 52 1 + 56 63 53 1 + 56 63 54 1 + 56 63 55 1 + 56 63 56 1 + 56 63 57 1 + 56 63 58 1 + 56 63 59 1 + 56 63 60 1 + 56 63 61 1 + 56 63 62 1 + 56 63 63 1 + 56 63 64 1 + 56 63 65 1 + 56 63 66 1 + 56 63 67 1 + 56 63 68 1 + 56 63 69 1 + 56 63 70 1 + 56 63 71 1 + 56 63 72 1 + 56 63 73 1 + 56 63 74 1 + 56 63 75 1 + 56 63 76 1 + 56 63 77 1 + 56 63 78 1 + 56 63 79 1 + 56 63 80 1 + 56 63 81 1 + 56 63 82 1 + 56 63 83 1 + 56 63 84 1 + 56 63 85 1 + 56 63 86 1 + 56 63 87 1 + 56 63 88 0.46805 + 56 64 39 0.46805 + 56 64 40 1 + 56 64 41 1 + 56 64 42 1 + 56 64 43 1 + 56 64 44 1 + 56 64 45 1 + 56 64 46 1 + 56 64 47 1 + 56 64 48 1 + 56 64 49 1 + 56 64 50 1 + 56 64 51 1 + 56 64 52 1 + 56 64 53 1 + 56 64 54 1 + 56 64 55 1 + 56 64 56 1 + 56 64 57 1 + 56 64 58 1 + 56 64 59 1 + 56 64 60 1 + 56 64 61 1 + 56 64 62 1 + 56 64 63 1 + 56 64 64 1 + 56 64 65 1 + 56 64 66 1 + 56 64 67 1 + 56 64 68 1 + 56 64 69 1 + 56 64 70 1 + 56 64 71 1 + 56 64 72 1 + 56 64 73 1 + 56 64 74 1 + 56 64 75 1 + 56 64 76 1 + 56 64 77 1 + 56 64 78 1 + 56 64 79 1 + 56 64 80 1 + 56 64 81 1 + 56 64 82 1 + 56 64 83 1 + 56 64 84 1 + 56 64 85 1 + 56 64 86 1 + 56 64 87 1 + 56 64 88 0.46805 + 56 65 39 0.42714 + 56 65 40 1 + 56 65 41 1 + 56 65 42 1 + 56 65 43 1 + 56 65 44 1 + 56 65 45 1 + 56 65 46 1 + 56 65 47 1 + 56 65 48 1 + 56 65 49 1 + 56 65 50 1 + 56 65 51 1 + 56 65 52 1 + 56 65 53 1 + 56 65 54 1 + 56 65 55 1 + 56 65 56 1 + 56 65 57 1 + 56 65 58 1 + 56 65 59 1 + 56 65 60 1 + 56 65 61 1 + 56 65 62 1 + 56 65 63 1 + 56 65 64 1 + 56 65 65 1 + 56 65 66 1 + 56 65 67 1 + 56 65 68 1 + 56 65 69 1 + 56 65 70 1 + 56 65 71 1 + 56 65 72 1 + 56 65 73 1 + 56 65 74 1 + 56 65 75 1 + 56 65 76 1 + 56 65 77 1 + 56 65 78 1 + 56 65 79 1 + 56 65 80 1 + 56 65 81 1 + 56 65 82 1 + 56 65 83 1 + 56 65 84 1 + 56 65 85 1 + 56 65 86 1 + 56 65 87 1 + 56 65 88 0.42714 + 56 66 39 0.345113 + 56 66 40 1 + 56 66 41 1 + 56 66 42 1 + 56 66 43 1 + 56 66 44 1 + 56 66 45 1 + 56 66 46 1 + 56 66 47 1 + 56 66 48 1 + 56 66 49 1 + 56 66 50 1 + 56 66 51 1 + 56 66 52 1 + 56 66 53 1 + 56 66 54 1 + 56 66 55 1 + 56 66 56 1 + 56 66 57 1 + 56 66 58 1 + 56 66 59 1 + 56 66 60 1 + 56 66 61 1 + 56 66 62 1 + 56 66 63 1 + 56 66 64 1 + 56 66 65 1 + 56 66 66 1 + 56 66 67 1 + 56 66 68 1 + 56 66 69 1 + 56 66 70 1 + 56 66 71 1 + 56 66 72 1 + 56 66 73 1 + 56 66 74 1 + 56 66 75 1 + 56 66 76 1 + 56 66 77 1 + 56 66 78 1 + 56 66 79 1 + 56 66 80 1 + 56 66 81 1 + 56 66 82 1 + 56 66 83 1 + 56 66 84 1 + 56 66 85 1 + 56 66 86 1 + 56 66 87 1 + 56 66 88 0.345113 + 56 67 39 0.221559 + 56 67 40 0.999993 + 56 67 41 1 + 56 67 42 1 + 56 67 43 1 + 56 67 44 1 + 56 67 45 1 + 56 67 46 1 + 56 67 47 1 + 56 67 48 1 + 56 67 49 1 + 56 67 50 1 + 56 67 51 1 + 56 67 52 1 + 56 67 53 1 + 56 67 54 1 + 56 67 55 1 + 56 67 56 1 + 56 67 57 1 + 56 67 58 1 + 56 67 59 1 + 56 67 60 1 + 56 67 61 1 + 56 67 62 1 + 56 67 63 1 + 56 67 64 1 + 56 67 65 1 + 56 67 66 1 + 56 67 67 1 + 56 67 68 1 + 56 67 69 1 + 56 67 70 1 + 56 67 71 1 + 56 67 72 1 + 56 67 73 1 + 56 67 74 1 + 56 67 75 1 + 56 67 76 1 + 56 67 77 1 + 56 67 78 1 + 56 67 79 1 + 56 67 80 1 + 56 67 81 1 + 56 67 82 1 + 56 67 83 1 + 56 67 84 1 + 56 67 85 1 + 56 67 86 1 + 56 67 87 0.999993 + 56 67 88 0.221559 + 56 68 39 0.0767609 + 56 68 40 0.979056 + 56 68 41 1 + 56 68 42 1 + 56 68 43 1 + 56 68 44 1 + 56 68 45 1 + 56 68 46 1 + 56 68 47 1 + 56 68 48 1 + 56 68 49 1 + 56 68 50 1 + 56 68 51 1 + 56 68 52 1 + 56 68 53 1 + 56 68 54 1 + 56 68 55 1 + 56 68 56 1 + 56 68 57 1 + 56 68 58 1 + 56 68 59 1 + 56 68 60 1 + 56 68 61 1 + 56 68 62 1 + 56 68 63 1 + 56 68 64 1 + 56 68 65 1 + 56 68 66 1 + 56 68 67 1 + 56 68 68 1 + 56 68 69 1 + 56 68 70 1 + 56 68 71 1 + 56 68 72 1 + 56 68 73 1 + 56 68 74 1 + 56 68 75 1 + 56 68 76 1 + 56 68 77 1 + 56 68 78 1 + 56 68 79 1 + 56 68 80 1 + 56 68 81 1 + 56 68 82 1 + 56 68 83 1 + 56 68 84 1 + 56 68 85 1 + 56 68 86 1 + 56 68 87 0.979056 + 56 68 88 0.0767609 + 56 69 39 0.00366907 + 56 69 40 0.843357 + 56 69 41 1 + 56 69 42 1 + 56 69 43 1 + 56 69 44 1 + 56 69 45 1 + 56 69 46 1 + 56 69 47 1 + 56 69 48 1 + 56 69 49 1 + 56 69 50 1 + 56 69 51 1 + 56 69 52 1 + 56 69 53 1 + 56 69 54 1 + 56 69 55 1 + 56 69 56 1 + 56 69 57 1 + 56 69 58 1 + 56 69 59 1 + 56 69 60 1 + 56 69 61 1 + 56 69 62 1 + 56 69 63 1 + 56 69 64 1 + 56 69 65 1 + 56 69 66 1 + 56 69 67 1 + 56 69 68 1 + 56 69 69 1 + 56 69 70 1 + 56 69 71 1 + 56 69 72 1 + 56 69 73 1 + 56 69 74 1 + 56 69 75 1 + 56 69 76 1 + 56 69 77 1 + 56 69 78 1 + 56 69 79 1 + 56 69 80 1 + 56 69 81 1 + 56 69 82 1 + 56 69 83 1 + 56 69 84 1 + 56 69 85 1 + 56 69 86 1 + 56 69 87 0.843357 + 56 69 88 0.00366907 + 56 70 40 0.594037 + 56 70 41 1 + 56 70 42 1 + 56 70 43 1 + 56 70 44 1 + 56 70 45 1 + 56 70 46 1 + 56 70 47 1 + 56 70 48 1 + 56 70 49 1 + 56 70 50 1 + 56 70 51 1 + 56 70 52 1 + 56 70 53 1 + 56 70 54 1 + 56 70 55 1 + 56 70 56 1 + 56 70 57 1 + 56 70 58 1 + 56 70 59 1 + 56 70 60 1 + 56 70 61 1 + 56 70 62 1 + 56 70 63 1 + 56 70 64 1 + 56 70 65 1 + 56 70 66 1 + 56 70 67 1 + 56 70 68 1 + 56 70 69 1 + 56 70 70 1 + 56 70 71 1 + 56 70 72 1 + 56 70 73 1 + 56 70 74 1 + 56 70 75 1 + 56 70 76 1 + 56 70 77 1 + 56 70 78 1 + 56 70 79 1 + 56 70 80 1 + 56 70 81 1 + 56 70 82 1 + 56 70 83 1 + 56 70 84 1 + 56 70 85 1 + 56 70 86 1 + 56 70 87 0.594037 + 56 71 40 0.295471 + 56 71 41 0.999937 + 56 71 42 1 + 56 71 43 1 + 56 71 44 1 + 56 71 45 1 + 56 71 46 1 + 56 71 47 1 + 56 71 48 1 + 56 71 49 1 + 56 71 50 1 + 56 71 51 1 + 56 71 52 1 + 56 71 53 1 + 56 71 54 1 + 56 71 55 1 + 56 71 56 1 + 56 71 57 1 + 56 71 58 1 + 56 71 59 1 + 56 71 60 1 + 56 71 61 1 + 56 71 62 1 + 56 71 63 1 + 56 71 64 1 + 56 71 65 1 + 56 71 66 1 + 56 71 67 1 + 56 71 68 1 + 56 71 69 1 + 56 71 70 1 + 56 71 71 1 + 56 71 72 1 + 56 71 73 1 + 56 71 74 1 + 56 71 75 1 + 56 71 76 1 + 56 71 77 1 + 56 71 78 1 + 56 71 79 1 + 56 71 80 1 + 56 71 81 1 + 56 71 82 1 + 56 71 83 1 + 56 71 84 1 + 56 71 85 1 + 56 71 86 0.999937 + 56 71 87 0.295471 + 56 72 40 0.036314 + 56 72 41 0.913043 + 56 72 42 1 + 56 72 43 1 + 56 72 44 1 + 56 72 45 1 + 56 72 46 1 + 56 72 47 1 + 56 72 48 1 + 56 72 49 1 + 56 72 50 1 + 56 72 51 1 + 56 72 52 1 + 56 72 53 1 + 56 72 54 1 + 56 72 55 1 + 56 72 56 1 + 56 72 57 1 + 56 72 58 1 + 56 72 59 1 + 56 72 60 1 + 56 72 61 1 + 56 72 62 1 + 56 72 63 1 + 56 72 64 1 + 56 72 65 1 + 56 72 66 1 + 56 72 67 1 + 56 72 68 1 + 56 72 69 1 + 56 72 70 1 + 56 72 71 1 + 56 72 72 1 + 56 72 73 1 + 56 72 74 1 + 56 72 75 1 + 56 72 76 1 + 56 72 77 1 + 56 72 78 1 + 56 72 79 1 + 56 72 80 1 + 56 72 81 1 + 56 72 82 1 + 56 72 83 1 + 56 72 84 1 + 56 72 85 1 + 56 72 86 0.913043 + 56 72 87 0.036314 + 56 73 41 0.553699 + 56 73 42 1 + 56 73 43 1 + 56 73 44 1 + 56 73 45 1 + 56 73 46 1 + 56 73 47 1 + 56 73 48 1 + 56 73 49 1 + 56 73 50 1 + 56 73 51 1 + 56 73 52 1 + 56 73 53 1 + 56 73 54 1 + 56 73 55 1 + 56 73 56 1 + 56 73 57 1 + 56 73 58 1 + 56 73 59 1 + 56 73 60 1 + 56 73 61 1 + 56 73 62 1 + 56 73 63 1 + 56 73 64 1 + 56 73 65 1 + 56 73 66 1 + 56 73 67 1 + 56 73 68 1 + 56 73 69 1 + 56 73 70 1 + 56 73 71 1 + 56 73 72 1 + 56 73 73 1 + 56 73 74 1 + 56 73 75 1 + 56 73 76 1 + 56 73 77 1 + 56 73 78 1 + 56 73 79 1 + 56 73 80 1 + 56 73 81 1 + 56 73 82 1 + 56 73 83 1 + 56 73 84 1 + 56 73 85 1 + 56 73 86 0.553699 + 56 74 41 0.134362 + 56 74 42 0.971405 + 56 74 43 1 + 56 74 44 1 + 56 74 45 1 + 56 74 46 1 + 56 74 47 1 + 56 74 48 1 + 56 74 49 1 + 56 74 50 1 + 56 74 51 1 + 56 74 52 1 + 56 74 53 1 + 56 74 54 1 + 56 74 55 1 + 56 74 56 1 + 56 74 57 1 + 56 74 58 1 + 56 74 59 1 + 56 74 60 1 + 56 74 61 1 + 56 74 62 1 + 56 74 63 1 + 56 74 64 1 + 56 74 65 1 + 56 74 66 1 + 56 74 67 1 + 56 74 68 1 + 56 74 69 1 + 56 74 70 1 + 56 74 71 1 + 56 74 72 1 + 56 74 73 1 + 56 74 74 1 + 56 74 75 1 + 56 74 76 1 + 56 74 77 1 + 56 74 78 1 + 56 74 79 1 + 56 74 80 1 + 56 74 81 1 + 56 74 82 1 + 56 74 83 1 + 56 74 84 1 + 56 74 85 0.971405 + 56 74 86 0.134362 + 56 75 41 3.07754e-05 + 56 75 42 0.602276 + 56 75 43 1 + 56 75 44 1 + 56 75 45 1 + 56 75 46 1 + 56 75 47 1 + 56 75 48 1 + 56 75 49 1 + 56 75 50 1 + 56 75 51 1 + 56 75 52 1 + 56 75 53 1 + 56 75 54 1 + 56 75 55 1 + 56 75 56 1 + 56 75 57 1 + 56 75 58 1 + 56 75 59 1 + 56 75 60 1 + 56 75 61 1 + 56 75 62 1 + 56 75 63 1 + 56 75 64 1 + 56 75 65 1 + 56 75 66 1 + 56 75 67 1 + 56 75 68 1 + 56 75 69 1 + 56 75 70 1 + 56 75 71 1 + 56 75 72 1 + 56 75 73 1 + 56 75 74 1 + 56 75 75 1 + 56 75 76 1 + 56 75 77 1 + 56 75 78 1 + 56 75 79 1 + 56 75 80 1 + 56 75 81 1 + 56 75 82 1 + 56 75 83 1 + 56 75 84 1 + 56 75 85 0.602276 + 56 75 86 3.07754e-05 + 56 76 42 0.104302 + 56 76 43 0.935026 + 56 76 44 1 + 56 76 45 1 + 56 76 46 1 + 56 76 47 1 + 56 76 48 1 + 56 76 49 1 + 56 76 50 1 + 56 76 51 1 + 56 76 52 1 + 56 76 53 1 + 56 76 54 1 + 56 76 55 1 + 56 76 56 1 + 56 76 57 1 + 56 76 58 1 + 56 76 59 1 + 56 76 60 1 + 56 76 61 1 + 56 76 62 1 + 56 76 63 1 + 56 76 64 1 + 56 76 65 1 + 56 76 66 1 + 56 76 67 1 + 56 76 68 1 + 56 76 69 1 + 56 76 70 1 + 56 76 71 1 + 56 76 72 1 + 56 76 73 1 + 56 76 74 1 + 56 76 75 1 + 56 76 76 1 + 56 76 77 1 + 56 76 78 1 + 56 76 79 1 + 56 76 80 1 + 56 76 81 1 + 56 76 82 1 + 56 76 83 1 + 56 76 84 0.935026 + 56 76 85 0.104302 + 56 77 43 0.41284 + 56 77 44 0.999058 + 56 77 45 1 + 56 77 46 1 + 56 77 47 1 + 56 77 48 1 + 56 77 49 1 + 56 77 50 1 + 56 77 51 1 + 56 77 52 1 + 56 77 53 1 + 56 77 54 1 + 56 77 55 1 + 56 77 56 1 + 56 77 57 1 + 56 77 58 1 + 56 77 59 1 + 56 77 60 1 + 56 77 61 1 + 56 77 62 1 + 56 77 63 1 + 56 77 64 1 + 56 77 65 1 + 56 77 66 1 + 56 77 67 1 + 56 77 68 1 + 56 77 69 1 + 56 77 70 1 + 56 77 71 1 + 56 77 72 1 + 56 77 73 1 + 56 77 74 1 + 56 77 75 1 + 56 77 76 1 + 56 77 77 1 + 56 77 78 1 + 56 77 79 1 + 56 77 80 1 + 56 77 81 1 + 56 77 82 1 + 56 77 83 0.999058 + 56 77 84 0.41284 + 56 78 43 0.0114126 + 56 78 44 0.702444 + 56 78 45 1 + 56 78 46 1 + 56 78 47 1 + 56 78 48 1 + 56 78 49 1 + 56 78 50 1 + 56 78 51 1 + 56 78 52 1 + 56 78 53 1 + 56 78 54 1 + 56 78 55 1 + 56 78 56 1 + 56 78 57 1 + 56 78 58 1 + 56 78 59 1 + 56 78 60 1 + 56 78 61 1 + 56 78 62 1 + 56 78 63 1 + 56 78 64 1 + 56 78 65 1 + 56 78 66 1 + 56 78 67 1 + 56 78 68 1 + 56 78 69 1 + 56 78 70 1 + 56 78 71 1 + 56 78 72 1 + 56 78 73 1 + 56 78 74 1 + 56 78 75 1 + 56 78 76 1 + 56 78 77 1 + 56 78 78 1 + 56 78 79 1 + 56 78 80 1 + 56 78 81 1 + 56 78 82 1 + 56 78 83 0.702444 + 56 78 84 0.0114126 + 56 79 44 0.0811434 + 56 79 45 0.856237 + 56 79 46 1 + 56 79 47 1 + 56 79 48 1 + 56 79 49 1 + 56 79 50 1 + 56 79 51 1 + 56 79 52 1 + 56 79 53 1 + 56 79 54 1 + 56 79 55 1 + 56 79 56 1 + 56 79 57 1 + 56 79 58 1 + 56 79 59 1 + 56 79 60 1 + 56 79 61 1 + 56 79 62 1 + 56 79 63 1 + 56 79 64 1 + 56 79 65 1 + 56 79 66 1 + 56 79 67 1 + 56 79 68 1 + 56 79 69 1 + 56 79 70 1 + 56 79 71 1 + 56 79 72 1 + 56 79 73 1 + 56 79 74 1 + 56 79 75 1 + 56 79 76 1 + 56 79 77 1 + 56 79 78 1 + 56 79 79 1 + 56 79 80 1 + 56 79 81 1 + 56 79 82 0.856237 + 56 79 83 0.0811434 + 56 80 45 0.16137 + 56 80 46 0.910969 + 56 80 47 1 + 56 80 48 1 + 56 80 49 1 + 56 80 50 1 + 56 80 51 1 + 56 80 52 1 + 56 80 53 1 + 56 80 54 1 + 56 80 55 1 + 56 80 56 1 + 56 80 57 1 + 56 80 58 1 + 56 80 59 1 + 56 80 60 1 + 56 80 61 1 + 56 80 62 1 + 56 80 63 1 + 56 80 64 1 + 56 80 65 1 + 56 80 66 1 + 56 80 67 1 + 56 80 68 1 + 56 80 69 1 + 56 80 70 1 + 56 80 71 1 + 56 80 72 1 + 56 80 73 1 + 56 80 74 1 + 56 80 75 1 + 56 80 76 1 + 56 80 77 1 + 56 80 78 1 + 56 80 79 1 + 56 80 80 1 + 56 80 81 0.910969 + 56 80 82 0.16137 + 56 81 46 0.194293 + 56 81 47 0.910969 + 56 81 48 1 + 56 81 49 1 + 56 81 50 1 + 56 81 51 1 + 56 81 52 1 + 56 81 53 1 + 56 81 54 1 + 56 81 55 1 + 56 81 56 1 + 56 81 57 1 + 56 81 58 1 + 56 81 59 1 + 56 81 60 1 + 56 81 61 1 + 56 81 62 1 + 56 81 63 1 + 56 81 64 1 + 56 81 65 1 + 56 81 66 1 + 56 81 67 1 + 56 81 68 1 + 56 81 69 1 + 56 81 70 1 + 56 81 71 1 + 56 81 72 1 + 56 81 73 1 + 56 81 74 1 + 56 81 75 1 + 56 81 76 1 + 56 81 77 1 + 56 81 78 1 + 56 81 79 1 + 56 81 80 0.910969 + 56 81 81 0.194293 + 56 82 47 0.16137 + 56 82 48 0.856237 + 56 82 49 1 + 56 82 50 1 + 56 82 51 1 + 56 82 52 1 + 56 82 53 1 + 56 82 54 1 + 56 82 55 1 + 56 82 56 1 + 56 82 57 1 + 56 82 58 1 + 56 82 59 1 + 56 82 60 1 + 56 82 61 1 + 56 82 62 1 + 56 82 63 1 + 56 82 64 1 + 56 82 65 1 + 56 82 66 1 + 56 82 67 1 + 56 82 68 1 + 56 82 69 1 + 56 82 70 1 + 56 82 71 1 + 56 82 72 1 + 56 82 73 1 + 56 82 74 1 + 56 82 75 1 + 56 82 76 1 + 56 82 77 1 + 56 82 78 1 + 56 82 79 0.856237 + 56 82 80 0.16137 + 56 83 48 0.0811434 + 56 83 49 0.702444 + 56 83 50 0.999058 + 56 83 51 1 + 56 83 52 1 + 56 83 53 1 + 56 83 54 1 + 56 83 55 1 + 56 83 56 1 + 56 83 57 1 + 56 83 58 1 + 56 83 59 1 + 56 83 60 1 + 56 83 61 1 + 56 83 62 1 + 56 83 63 1 + 56 83 64 1 + 56 83 65 1 + 56 83 66 1 + 56 83 67 1 + 56 83 68 1 + 56 83 69 1 + 56 83 70 1 + 56 83 71 1 + 56 83 72 1 + 56 83 73 1 + 56 83 74 1 + 56 83 75 1 + 56 83 76 1 + 56 83 77 0.999058 + 56 83 78 0.702444 + 56 83 79 0.0811434 + 56 84 49 0.0114126 + 56 84 50 0.41284 + 56 84 51 0.935026 + 56 84 52 1 + 56 84 53 1 + 56 84 54 1 + 56 84 55 1 + 56 84 56 1 + 56 84 57 1 + 56 84 58 1 + 56 84 59 1 + 56 84 60 1 + 56 84 61 1 + 56 84 62 1 + 56 84 63 1 + 56 84 64 1 + 56 84 65 1 + 56 84 66 1 + 56 84 67 1 + 56 84 68 1 + 56 84 69 1 + 56 84 70 1 + 56 84 71 1 + 56 84 72 1 + 56 84 73 1 + 56 84 74 1 + 56 84 75 1 + 56 84 76 0.935026 + 56 84 77 0.41284 + 56 84 78 0.0114126 + 56 85 51 0.104302 + 56 85 52 0.602276 + 56 85 53 0.971405 + 56 85 54 1 + 56 85 55 1 + 56 85 56 1 + 56 85 57 1 + 56 85 58 1 + 56 85 59 1 + 56 85 60 1 + 56 85 61 1 + 56 85 62 1 + 56 85 63 1 + 56 85 64 1 + 56 85 65 1 + 56 85 66 1 + 56 85 67 1 + 56 85 68 1 + 56 85 69 1 + 56 85 70 1 + 56 85 71 1 + 56 85 72 1 + 56 85 73 1 + 56 85 74 0.971405 + 56 85 75 0.602276 + 56 85 76 0.104302 + 56 86 52 3.07754e-05 + 56 86 53 0.134362 + 56 86 54 0.553699 + 56 86 55 0.913043 + 56 86 56 0.999937 + 56 86 57 1 + 56 86 58 1 + 56 86 59 1 + 56 86 60 1 + 56 86 61 1 + 56 86 62 1 + 56 86 63 1 + 56 86 64 1 + 56 86 65 1 + 56 86 66 1 + 56 86 67 1 + 56 86 68 1 + 56 86 69 1 + 56 86 70 1 + 56 86 71 0.999937 + 56 86 72 0.913043 + 56 86 73 0.553699 + 56 86 74 0.134362 + 56 86 75 3.07754e-05 + 56 87 55 0.036314 + 56 87 56 0.295471 + 56 87 57 0.594037 + 56 87 58 0.843357 + 56 87 59 0.979056 + 56 87 60 0.999993 + 56 87 61 1 + 56 87 62 1 + 56 87 63 1 + 56 87 64 1 + 56 87 65 1 + 56 87 66 1 + 56 87 67 0.999993 + 56 87 68 0.979056 + 56 87 69 0.843357 + 56 87 70 0.594037 + 56 87 71 0.295471 + 56 87 72 0.036314 + 56 88 58 0.00366907 + 56 88 59 0.0767609 + 56 88 60 0.221559 + 56 88 61 0.345113 + 56 88 62 0.42714 + 56 88 63 0.46805 + 56 88 64 0.46805 + 56 88 65 0.42714 + 56 88 66 0.345113 + 56 88 67 0.221559 + 56 88 68 0.0767609 + 56 88 69 0.00366907 + 57 39 57 0.00913973 + 57 39 58 0.142672 + 57 39 59 0.345113 + 57 39 60 0.508892 + 57 39 61 0.63101 + 57 39 62 0.712087 + 57 39 63 0.752526 + 57 39 64 0.752526 + 57 39 65 0.712087 + 57 39 66 0.63101 + 57 39 67 0.508892 + 57 39 68 0.345113 + 57 39 69 0.142672 + 57 39 70 0.00913973 + 57 40 54 0.013123 + 57 40 55 0.253138 + 57 40 56 0.594037 + 57 40 57 0.87979 + 57 40 58 0.996155 + 57 40 59 1 + 57 40 60 1 + 57 40 61 1 + 57 40 62 1 + 57 40 63 1 + 57 40 64 1 + 57 40 65 1 + 57 40 66 1 + 57 40 67 1 + 57 40 68 1 + 57 40 69 0.996155 + 57 40 70 0.87979 + 57 40 71 0.594037 + 57 40 72 0.253138 + 57 40 73 0.013123 + 57 41 52 0.0398206 + 57 41 53 0.42026 + 57 41 54 0.848902 + 57 41 55 0.999295 + 57 41 56 1 + 57 41 57 1 + 57 41 58 1 + 57 41 59 1 + 57 41 60 1 + 57 41 61 1 + 57 41 62 1 + 57 41 63 1 + 57 41 64 1 + 57 41 65 1 + 57 41 66 1 + 57 41 67 1 + 57 41 68 1 + 57 41 69 1 + 57 41 70 1 + 57 41 71 1 + 57 41 72 0.999295 + 57 41 73 0.848902 + 57 41 74 0.42026 + 57 41 75 0.0398206 + 57 42 50 0.0100187 + 57 42 51 0.370069 + 57 42 52 0.884209 + 57 42 53 1 + 57 42 54 1 + 57 42 55 1 + 57 42 56 1 + 57 42 57 1 + 57 42 58 1 + 57 42 59 1 + 57 42 60 1 + 57 42 61 1 + 57 42 62 1 + 57 42 63 1 + 57 42 64 1 + 57 42 65 1 + 57 42 66 1 + 57 42 67 1 + 57 42 68 1 + 57 42 69 1 + 57 42 70 1 + 57 42 71 1 + 57 42 72 1 + 57 42 73 1 + 57 42 74 1 + 57 42 75 0.884209 + 57 42 76 0.370069 + 57 42 77 0.0100187 + 57 43 49 0.132621 + 57 43 50 0.742086 + 57 43 51 0.999467 + 57 43 52 1 + 57 43 53 1 + 57 43 54 1 + 57 43 55 1 + 57 43 56 1 + 57 43 57 1 + 57 43 58 1 + 57 43 59 1 + 57 43 60 1 + 57 43 61 1 + 57 43 62 1 + 57 43 63 1 + 57 43 64 1 + 57 43 65 1 + 57 43 66 1 + 57 43 67 1 + 57 43 68 1 + 57 43 69 1 + 57 43 70 1 + 57 43 71 1 + 57 43 72 1 + 57 43 73 1 + 57 43 74 1 + 57 43 75 1 + 57 43 76 0.999467 + 57 43 77 0.742086 + 57 43 78 0.132621 + 57 44 47 0.000148631 + 57 44 48 0.315874 + 57 44 49 0.933296 + 57 44 50 1 + 57 44 51 1 + 57 44 52 1 + 57 44 53 1 + 57 44 54 1 + 57 44 55 1 + 57 44 56 1 + 57 44 57 1 + 57 44 58 1 + 57 44 59 1 + 57 44 60 1 + 57 44 61 1 + 57 44 62 1 + 57 44 63 1 + 57 44 64 1 + 57 44 65 1 + 57 44 66 1 + 57 44 67 1 + 57 44 68 1 + 57 44 69 1 + 57 44 70 1 + 57 44 71 1 + 57 44 72 1 + 57 44 73 1 + 57 44 74 1 + 57 44 75 1 + 57 44 76 1 + 57 44 77 1 + 57 44 78 0.933296 + 57 44 79 0.315874 + 57 44 80 0.000148631 + 57 45 46 0.00284305 + 57 45 47 0.458559 + 57 45 48 0.987756 + 57 45 49 1 + 57 45 50 1 + 57 45 51 1 + 57 45 52 1 + 57 45 53 1 + 57 45 54 1 + 57 45 55 1 + 57 45 56 1 + 57 45 57 1 + 57 45 58 1 + 57 45 59 1 + 57 45 60 1 + 57 45 61 1 + 57 45 62 1 + 57 45 63 1 + 57 45 64 1 + 57 45 65 1 + 57 45 66 1 + 57 45 67 1 + 57 45 68 1 + 57 45 69 1 + 57 45 70 1 + 57 45 71 1 + 57 45 72 1 + 57 45 73 1 + 57 45 74 1 + 57 45 75 1 + 57 45 76 1 + 57 45 77 1 + 57 45 78 1 + 57 45 79 0.987756 + 57 45 80 0.458559 + 57 45 81 0.00284305 + 57 46 45 0.00284305 + 57 46 46 0.510026 + 57 46 47 0.997087 + 57 46 48 1 + 57 46 49 1 + 57 46 50 1 + 57 46 51 1 + 57 46 52 1 + 57 46 53 1 + 57 46 54 1 + 57 46 55 1 + 57 46 56 1 + 57 46 57 1 + 57 46 58 1 + 57 46 59 1 + 57 46 60 1 + 57 46 61 1 + 57 46 62 1 + 57 46 63 1 + 57 46 64 1 + 57 46 65 1 + 57 46 66 1 + 57 46 67 1 + 57 46 68 1 + 57 46 69 1 + 57 46 70 1 + 57 46 71 1 + 57 46 72 1 + 57 46 73 1 + 57 46 74 1 + 57 46 75 1 + 57 46 76 1 + 57 46 77 1 + 57 46 78 1 + 57 46 79 1 + 57 46 80 0.997087 + 57 46 81 0.510026 + 57 46 82 0.00284305 + 57 47 44 0.000148631 + 57 47 45 0.458559 + 57 47 46 0.997087 + 57 47 47 1 + 57 47 48 1 + 57 47 49 1 + 57 47 50 1 + 57 47 51 1 + 57 47 52 1 + 57 47 53 1 + 57 47 54 1 + 57 47 55 1 + 57 47 56 1 + 57 47 57 1 + 57 47 58 1 + 57 47 59 1 + 57 47 60 1 + 57 47 61 1 + 57 47 62 1 + 57 47 63 1 + 57 47 64 1 + 57 47 65 1 + 57 47 66 1 + 57 47 67 1 + 57 47 68 1 + 57 47 69 1 + 57 47 70 1 + 57 47 71 1 + 57 47 72 1 + 57 47 73 1 + 57 47 74 1 + 57 47 75 1 + 57 47 76 1 + 57 47 77 1 + 57 47 78 1 + 57 47 79 1 + 57 47 80 1 + 57 47 81 0.997087 + 57 47 82 0.458559 + 57 47 83 0.000148631 + 57 48 44 0.315874 + 57 48 45 0.987756 + 57 48 46 1 + 57 48 47 1 + 57 48 48 1 + 57 48 49 1 + 57 48 50 1 + 57 48 51 1 + 57 48 52 1 + 57 48 53 1 + 57 48 54 1 + 57 48 55 1 + 57 48 56 1 + 57 48 57 1 + 57 48 58 1 + 57 48 59 1 + 57 48 60 1 + 57 48 61 1 + 57 48 62 1 + 57 48 63 1 + 57 48 64 1 + 57 48 65 1 + 57 48 66 1 + 57 48 67 1 + 57 48 68 1 + 57 48 69 1 + 57 48 70 1 + 57 48 71 1 + 57 48 72 1 + 57 48 73 1 + 57 48 74 1 + 57 48 75 1 + 57 48 76 1 + 57 48 77 1 + 57 48 78 1 + 57 48 79 1 + 57 48 80 1 + 57 48 81 1 + 57 48 82 0.987756 + 57 48 83 0.315874 + 57 49 43 0.132621 + 57 49 44 0.933296 + 57 49 45 1 + 57 49 46 1 + 57 49 47 1 + 57 49 48 1 + 57 49 49 1 + 57 49 50 1 + 57 49 51 1 + 57 49 52 1 + 57 49 53 1 + 57 49 54 1 + 57 49 55 1 + 57 49 56 1 + 57 49 57 1 + 57 49 58 1 + 57 49 59 1 + 57 49 60 1 + 57 49 61 1 + 57 49 62 1 + 57 49 63 1 + 57 49 64 1 + 57 49 65 1 + 57 49 66 1 + 57 49 67 1 + 57 49 68 1 + 57 49 69 1 + 57 49 70 1 + 57 49 71 1 + 57 49 72 1 + 57 49 73 1 + 57 49 74 1 + 57 49 75 1 + 57 49 76 1 + 57 49 77 1 + 57 49 78 1 + 57 49 79 1 + 57 49 80 1 + 57 49 81 1 + 57 49 82 1 + 57 49 83 0.933296 + 57 49 84 0.132621 + 57 50 42 0.0100187 + 57 50 43 0.742086 + 57 50 44 1 + 57 50 45 1 + 57 50 46 1 + 57 50 47 1 + 57 50 48 1 + 57 50 49 1 + 57 50 50 1 + 57 50 51 1 + 57 50 52 1 + 57 50 53 1 + 57 50 54 1 + 57 50 55 1 + 57 50 56 1 + 57 50 57 1 + 57 50 58 1 + 57 50 59 1 + 57 50 60 1 + 57 50 61 1 + 57 50 62 1 + 57 50 63 1 + 57 50 64 1 + 57 50 65 1 + 57 50 66 1 + 57 50 67 1 + 57 50 68 1 + 57 50 69 1 + 57 50 70 1 + 57 50 71 1 + 57 50 72 1 + 57 50 73 1 + 57 50 74 1 + 57 50 75 1 + 57 50 76 1 + 57 50 77 1 + 57 50 78 1 + 57 50 79 1 + 57 50 80 1 + 57 50 81 1 + 57 50 82 1 + 57 50 83 1 + 57 50 84 0.742086 + 57 50 85 0.0100187 + 57 51 42 0.370069 + 57 51 43 0.999467 + 57 51 44 1 + 57 51 45 1 + 57 51 46 1 + 57 51 47 1 + 57 51 48 1 + 57 51 49 1 + 57 51 50 1 + 57 51 51 1 + 57 51 52 1 + 57 51 53 1 + 57 51 54 1 + 57 51 55 1 + 57 51 56 1 + 57 51 57 1 + 57 51 58 1 + 57 51 59 1 + 57 51 60 1 + 57 51 61 1 + 57 51 62 1 + 57 51 63 1 + 57 51 64 1 + 57 51 65 1 + 57 51 66 1 + 57 51 67 1 + 57 51 68 1 + 57 51 69 1 + 57 51 70 1 + 57 51 71 1 + 57 51 72 1 + 57 51 73 1 + 57 51 74 1 + 57 51 75 1 + 57 51 76 1 + 57 51 77 1 + 57 51 78 1 + 57 51 79 1 + 57 51 80 1 + 57 51 81 1 + 57 51 82 1 + 57 51 83 1 + 57 51 84 0.999467 + 57 51 85 0.370069 + 57 52 41 0.0398206 + 57 52 42 0.884209 + 57 52 43 1 + 57 52 44 1 + 57 52 45 1 + 57 52 46 1 + 57 52 47 1 + 57 52 48 1 + 57 52 49 1 + 57 52 50 1 + 57 52 51 1 + 57 52 52 1 + 57 52 53 1 + 57 52 54 1 + 57 52 55 1 + 57 52 56 1 + 57 52 57 1 + 57 52 58 1 + 57 52 59 1 + 57 52 60 1 + 57 52 61 1 + 57 52 62 1 + 57 52 63 1 + 57 52 64 1 + 57 52 65 1 + 57 52 66 1 + 57 52 67 1 + 57 52 68 1 + 57 52 69 1 + 57 52 70 1 + 57 52 71 1 + 57 52 72 1 + 57 52 73 1 + 57 52 74 1 + 57 52 75 1 + 57 52 76 1 + 57 52 77 1 + 57 52 78 1 + 57 52 79 1 + 57 52 80 1 + 57 52 81 1 + 57 52 82 1 + 57 52 83 1 + 57 52 84 1 + 57 52 85 0.884209 + 57 52 86 0.0398206 + 57 53 41 0.42026 + 57 53 42 1 + 57 53 43 1 + 57 53 44 1 + 57 53 45 1 + 57 53 46 1 + 57 53 47 1 + 57 53 48 1 + 57 53 49 1 + 57 53 50 1 + 57 53 51 1 + 57 53 52 1 + 57 53 53 1 + 57 53 54 1 + 57 53 55 1 + 57 53 56 1 + 57 53 57 1 + 57 53 58 1 + 57 53 59 1 + 57 53 60 1 + 57 53 61 1 + 57 53 62 1 + 57 53 63 1 + 57 53 64 1 + 57 53 65 1 + 57 53 66 1 + 57 53 67 1 + 57 53 68 1 + 57 53 69 1 + 57 53 70 1 + 57 53 71 1 + 57 53 72 1 + 57 53 73 1 + 57 53 74 1 + 57 53 75 1 + 57 53 76 1 + 57 53 77 1 + 57 53 78 1 + 57 53 79 1 + 57 53 80 1 + 57 53 81 1 + 57 53 82 1 + 57 53 83 1 + 57 53 84 1 + 57 53 85 1 + 57 53 86 0.42026 + 57 54 40 0.013123 + 57 54 41 0.848902 + 57 54 42 1 + 57 54 43 1 + 57 54 44 1 + 57 54 45 1 + 57 54 46 1 + 57 54 47 1 + 57 54 48 1 + 57 54 49 1 + 57 54 50 1 + 57 54 51 1 + 57 54 52 1 + 57 54 53 1 + 57 54 54 1 + 57 54 55 1 + 57 54 56 1 + 57 54 57 1 + 57 54 58 1 + 57 54 59 1 + 57 54 60 1 + 57 54 61 1 + 57 54 62 1 + 57 54 63 1 + 57 54 64 1 + 57 54 65 1 + 57 54 66 1 + 57 54 67 1 + 57 54 68 1 + 57 54 69 1 + 57 54 70 1 + 57 54 71 1 + 57 54 72 1 + 57 54 73 1 + 57 54 74 1 + 57 54 75 1 + 57 54 76 1 + 57 54 77 1 + 57 54 78 1 + 57 54 79 1 + 57 54 80 1 + 57 54 81 1 + 57 54 82 1 + 57 54 83 1 + 57 54 84 1 + 57 54 85 1 + 57 54 86 0.848902 + 57 54 87 0.013123 + 57 55 40 0.253138 + 57 55 41 0.999295 + 57 55 42 1 + 57 55 43 1 + 57 55 44 1 + 57 55 45 1 + 57 55 46 1 + 57 55 47 1 + 57 55 48 1 + 57 55 49 1 + 57 55 50 1 + 57 55 51 1 + 57 55 52 1 + 57 55 53 1 + 57 55 54 1 + 57 55 55 1 + 57 55 56 1 + 57 55 57 1 + 57 55 58 1 + 57 55 59 1 + 57 55 60 1 + 57 55 61 1 + 57 55 62 1 + 57 55 63 1 + 57 55 64 1 + 57 55 65 1 + 57 55 66 1 + 57 55 67 1 + 57 55 68 1 + 57 55 69 1 + 57 55 70 1 + 57 55 71 1 + 57 55 72 1 + 57 55 73 1 + 57 55 74 1 + 57 55 75 1 + 57 55 76 1 + 57 55 77 1 + 57 55 78 1 + 57 55 79 1 + 57 55 80 1 + 57 55 81 1 + 57 55 82 1 + 57 55 83 1 + 57 55 84 1 + 57 55 85 1 + 57 55 86 0.999295 + 57 55 87 0.253138 + 57 56 40 0.594037 + 57 56 41 1 + 57 56 42 1 + 57 56 43 1 + 57 56 44 1 + 57 56 45 1 + 57 56 46 1 + 57 56 47 1 + 57 56 48 1 + 57 56 49 1 + 57 56 50 1 + 57 56 51 1 + 57 56 52 1 + 57 56 53 1 + 57 56 54 1 + 57 56 55 1 + 57 56 56 1 + 57 56 57 1 + 57 56 58 1 + 57 56 59 1 + 57 56 60 1 + 57 56 61 1 + 57 56 62 1 + 57 56 63 1 + 57 56 64 1 + 57 56 65 1 + 57 56 66 1 + 57 56 67 1 + 57 56 68 1 + 57 56 69 1 + 57 56 70 1 + 57 56 71 1 + 57 56 72 1 + 57 56 73 1 + 57 56 74 1 + 57 56 75 1 + 57 56 76 1 + 57 56 77 1 + 57 56 78 1 + 57 56 79 1 + 57 56 80 1 + 57 56 81 1 + 57 56 82 1 + 57 56 83 1 + 57 56 84 1 + 57 56 85 1 + 57 56 86 1 + 57 56 87 0.594037 + 57 57 39 0.00913973 + 57 57 40 0.87979 + 57 57 41 1 + 57 57 42 1 + 57 57 43 1 + 57 57 44 1 + 57 57 45 1 + 57 57 46 1 + 57 57 47 1 + 57 57 48 1 + 57 57 49 1 + 57 57 50 1 + 57 57 51 1 + 57 57 52 1 + 57 57 53 1 + 57 57 54 1 + 57 57 55 1 + 57 57 56 1 + 57 57 57 1 + 57 57 58 1 + 57 57 59 1 + 57 57 60 1 + 57 57 61 1 + 57 57 62 1 + 57 57 63 1 + 57 57 64 1 + 57 57 65 1 + 57 57 66 1 + 57 57 67 1 + 57 57 68 1 + 57 57 69 1 + 57 57 70 1 + 57 57 71 1 + 57 57 72 1 + 57 57 73 1 + 57 57 74 1 + 57 57 75 1 + 57 57 76 1 + 57 57 77 1 + 57 57 78 1 + 57 57 79 1 + 57 57 80 1 + 57 57 81 1 + 57 57 82 1 + 57 57 83 1 + 57 57 84 1 + 57 57 85 1 + 57 57 86 1 + 57 57 87 0.87979 + 57 57 88 0.00913973 + 57 58 39 0.142672 + 57 58 40 0.996155 + 57 58 41 1 + 57 58 42 1 + 57 58 43 1 + 57 58 44 1 + 57 58 45 1 + 57 58 46 1 + 57 58 47 1 + 57 58 48 1 + 57 58 49 1 + 57 58 50 1 + 57 58 51 1 + 57 58 52 1 + 57 58 53 1 + 57 58 54 1 + 57 58 55 1 + 57 58 56 1 + 57 58 57 1 + 57 58 58 1 + 57 58 59 1 + 57 58 60 1 + 57 58 61 1 + 57 58 62 1 + 57 58 63 1 + 57 58 64 1 + 57 58 65 1 + 57 58 66 1 + 57 58 67 1 + 57 58 68 1 + 57 58 69 1 + 57 58 70 1 + 57 58 71 1 + 57 58 72 1 + 57 58 73 1 + 57 58 74 1 + 57 58 75 1 + 57 58 76 1 + 57 58 77 1 + 57 58 78 1 + 57 58 79 1 + 57 58 80 1 + 57 58 81 1 + 57 58 82 1 + 57 58 83 1 + 57 58 84 1 + 57 58 85 1 + 57 58 86 1 + 57 58 87 0.996155 + 57 58 88 0.142672 + 57 59 39 0.345113 + 57 59 40 1 + 57 59 41 1 + 57 59 42 1 + 57 59 43 1 + 57 59 44 1 + 57 59 45 1 + 57 59 46 1 + 57 59 47 1 + 57 59 48 1 + 57 59 49 1 + 57 59 50 1 + 57 59 51 1 + 57 59 52 1 + 57 59 53 1 + 57 59 54 1 + 57 59 55 1 + 57 59 56 1 + 57 59 57 1 + 57 59 58 1 + 57 59 59 1 + 57 59 60 1 + 57 59 61 1 + 57 59 62 1 + 57 59 63 1 + 57 59 64 1 + 57 59 65 1 + 57 59 66 1 + 57 59 67 1 + 57 59 68 1 + 57 59 69 1 + 57 59 70 1 + 57 59 71 1 + 57 59 72 1 + 57 59 73 1 + 57 59 74 1 + 57 59 75 1 + 57 59 76 1 + 57 59 77 1 + 57 59 78 1 + 57 59 79 1 + 57 59 80 1 + 57 59 81 1 + 57 59 82 1 + 57 59 83 1 + 57 59 84 1 + 57 59 85 1 + 57 59 86 1 + 57 59 87 1 + 57 59 88 0.345113 + 57 60 39 0.508892 + 57 60 40 1 + 57 60 41 1 + 57 60 42 1 + 57 60 43 1 + 57 60 44 1 + 57 60 45 1 + 57 60 46 1 + 57 60 47 1 + 57 60 48 1 + 57 60 49 1 + 57 60 50 1 + 57 60 51 1 + 57 60 52 1 + 57 60 53 1 + 57 60 54 1 + 57 60 55 1 + 57 60 56 1 + 57 60 57 1 + 57 60 58 1 + 57 60 59 1 + 57 60 60 1 + 57 60 61 1 + 57 60 62 1 + 57 60 63 1 + 57 60 64 1 + 57 60 65 1 + 57 60 66 1 + 57 60 67 1 + 57 60 68 1 + 57 60 69 1 + 57 60 70 1 + 57 60 71 1 + 57 60 72 1 + 57 60 73 1 + 57 60 74 1 + 57 60 75 1 + 57 60 76 1 + 57 60 77 1 + 57 60 78 1 + 57 60 79 1 + 57 60 80 1 + 57 60 81 1 + 57 60 82 1 + 57 60 83 1 + 57 60 84 1 + 57 60 85 1 + 57 60 86 1 + 57 60 87 1 + 57 60 88 0.508892 + 57 61 39 0.63101 + 57 61 40 1 + 57 61 41 1 + 57 61 42 1 + 57 61 43 1 + 57 61 44 1 + 57 61 45 1 + 57 61 46 1 + 57 61 47 1 + 57 61 48 1 + 57 61 49 1 + 57 61 50 1 + 57 61 51 1 + 57 61 52 1 + 57 61 53 1 + 57 61 54 1 + 57 61 55 1 + 57 61 56 1 + 57 61 57 1 + 57 61 58 1 + 57 61 59 1 + 57 61 60 1 + 57 61 61 1 + 57 61 62 1 + 57 61 63 1 + 57 61 64 1 + 57 61 65 1 + 57 61 66 1 + 57 61 67 1 + 57 61 68 1 + 57 61 69 1 + 57 61 70 1 + 57 61 71 1 + 57 61 72 1 + 57 61 73 1 + 57 61 74 1 + 57 61 75 1 + 57 61 76 1 + 57 61 77 1 + 57 61 78 1 + 57 61 79 1 + 57 61 80 1 + 57 61 81 1 + 57 61 82 1 + 57 61 83 1 + 57 61 84 1 + 57 61 85 1 + 57 61 86 1 + 57 61 87 1 + 57 61 88 0.63101 + 57 62 39 0.712087 + 57 62 40 1 + 57 62 41 1 + 57 62 42 1 + 57 62 43 1 + 57 62 44 1 + 57 62 45 1 + 57 62 46 1 + 57 62 47 1 + 57 62 48 1 + 57 62 49 1 + 57 62 50 1 + 57 62 51 1 + 57 62 52 1 + 57 62 53 1 + 57 62 54 1 + 57 62 55 1 + 57 62 56 1 + 57 62 57 1 + 57 62 58 1 + 57 62 59 1 + 57 62 60 1 + 57 62 61 1 + 57 62 62 1 + 57 62 63 1 + 57 62 64 1 + 57 62 65 1 + 57 62 66 1 + 57 62 67 1 + 57 62 68 1 + 57 62 69 1 + 57 62 70 1 + 57 62 71 1 + 57 62 72 1 + 57 62 73 1 + 57 62 74 1 + 57 62 75 1 + 57 62 76 1 + 57 62 77 1 + 57 62 78 1 + 57 62 79 1 + 57 62 80 1 + 57 62 81 1 + 57 62 82 1 + 57 62 83 1 + 57 62 84 1 + 57 62 85 1 + 57 62 86 1 + 57 62 87 1 + 57 62 88 0.712087 + 57 63 39 0.752526 + 57 63 40 1 + 57 63 41 1 + 57 63 42 1 + 57 63 43 1 + 57 63 44 1 + 57 63 45 1 + 57 63 46 1 + 57 63 47 1 + 57 63 48 1 + 57 63 49 1 + 57 63 50 1 + 57 63 51 1 + 57 63 52 1 + 57 63 53 1 + 57 63 54 1 + 57 63 55 1 + 57 63 56 1 + 57 63 57 1 + 57 63 58 1 + 57 63 59 1 + 57 63 60 1 + 57 63 61 1 + 57 63 62 1 + 57 63 63 1 + 57 63 64 1 + 57 63 65 1 + 57 63 66 1 + 57 63 67 1 + 57 63 68 1 + 57 63 69 1 + 57 63 70 1 + 57 63 71 1 + 57 63 72 1 + 57 63 73 1 + 57 63 74 1 + 57 63 75 1 + 57 63 76 1 + 57 63 77 1 + 57 63 78 1 + 57 63 79 1 + 57 63 80 1 + 57 63 81 1 + 57 63 82 1 + 57 63 83 1 + 57 63 84 1 + 57 63 85 1 + 57 63 86 1 + 57 63 87 1 + 57 63 88 0.752526 + 57 64 39 0.752526 + 57 64 40 1 + 57 64 41 1 + 57 64 42 1 + 57 64 43 1 + 57 64 44 1 + 57 64 45 1 + 57 64 46 1 + 57 64 47 1 + 57 64 48 1 + 57 64 49 1 + 57 64 50 1 + 57 64 51 1 + 57 64 52 1 + 57 64 53 1 + 57 64 54 1 + 57 64 55 1 + 57 64 56 1 + 57 64 57 1 + 57 64 58 1 + 57 64 59 1 + 57 64 60 1 + 57 64 61 1 + 57 64 62 1 + 57 64 63 1 + 57 64 64 1 + 57 64 65 1 + 57 64 66 1 + 57 64 67 1 + 57 64 68 1 + 57 64 69 1 + 57 64 70 1 + 57 64 71 1 + 57 64 72 1 + 57 64 73 1 + 57 64 74 1 + 57 64 75 1 + 57 64 76 1 + 57 64 77 1 + 57 64 78 1 + 57 64 79 1 + 57 64 80 1 + 57 64 81 1 + 57 64 82 1 + 57 64 83 1 + 57 64 84 1 + 57 64 85 1 + 57 64 86 1 + 57 64 87 1 + 57 64 88 0.752526 + 57 65 39 0.712087 + 57 65 40 1 + 57 65 41 1 + 57 65 42 1 + 57 65 43 1 + 57 65 44 1 + 57 65 45 1 + 57 65 46 1 + 57 65 47 1 + 57 65 48 1 + 57 65 49 1 + 57 65 50 1 + 57 65 51 1 + 57 65 52 1 + 57 65 53 1 + 57 65 54 1 + 57 65 55 1 + 57 65 56 1 + 57 65 57 1 + 57 65 58 1 + 57 65 59 1 + 57 65 60 1 + 57 65 61 1 + 57 65 62 1 + 57 65 63 1 + 57 65 64 1 + 57 65 65 1 + 57 65 66 1 + 57 65 67 1 + 57 65 68 1 + 57 65 69 1 + 57 65 70 1 + 57 65 71 1 + 57 65 72 1 + 57 65 73 1 + 57 65 74 1 + 57 65 75 1 + 57 65 76 1 + 57 65 77 1 + 57 65 78 1 + 57 65 79 1 + 57 65 80 1 + 57 65 81 1 + 57 65 82 1 + 57 65 83 1 + 57 65 84 1 + 57 65 85 1 + 57 65 86 1 + 57 65 87 1 + 57 65 88 0.712087 + 57 66 39 0.63101 + 57 66 40 1 + 57 66 41 1 + 57 66 42 1 + 57 66 43 1 + 57 66 44 1 + 57 66 45 1 + 57 66 46 1 + 57 66 47 1 + 57 66 48 1 + 57 66 49 1 + 57 66 50 1 + 57 66 51 1 + 57 66 52 1 + 57 66 53 1 + 57 66 54 1 + 57 66 55 1 + 57 66 56 1 + 57 66 57 1 + 57 66 58 1 + 57 66 59 1 + 57 66 60 1 + 57 66 61 1 + 57 66 62 1 + 57 66 63 1 + 57 66 64 1 + 57 66 65 1 + 57 66 66 1 + 57 66 67 1 + 57 66 68 1 + 57 66 69 1 + 57 66 70 1 + 57 66 71 1 + 57 66 72 1 + 57 66 73 1 + 57 66 74 1 + 57 66 75 1 + 57 66 76 1 + 57 66 77 1 + 57 66 78 1 + 57 66 79 1 + 57 66 80 1 + 57 66 81 1 + 57 66 82 1 + 57 66 83 1 + 57 66 84 1 + 57 66 85 1 + 57 66 86 1 + 57 66 87 1 + 57 66 88 0.63101 + 57 67 39 0.508892 + 57 67 40 1 + 57 67 41 1 + 57 67 42 1 + 57 67 43 1 + 57 67 44 1 + 57 67 45 1 + 57 67 46 1 + 57 67 47 1 + 57 67 48 1 + 57 67 49 1 + 57 67 50 1 + 57 67 51 1 + 57 67 52 1 + 57 67 53 1 + 57 67 54 1 + 57 67 55 1 + 57 67 56 1 + 57 67 57 1 + 57 67 58 1 + 57 67 59 1 + 57 67 60 1 + 57 67 61 1 + 57 67 62 1 + 57 67 63 1 + 57 67 64 1 + 57 67 65 1 + 57 67 66 1 + 57 67 67 1 + 57 67 68 1 + 57 67 69 1 + 57 67 70 1 + 57 67 71 1 + 57 67 72 1 + 57 67 73 1 + 57 67 74 1 + 57 67 75 1 + 57 67 76 1 + 57 67 77 1 + 57 67 78 1 + 57 67 79 1 + 57 67 80 1 + 57 67 81 1 + 57 67 82 1 + 57 67 83 1 + 57 67 84 1 + 57 67 85 1 + 57 67 86 1 + 57 67 87 1 + 57 67 88 0.508892 + 57 68 39 0.345113 + 57 68 40 1 + 57 68 41 1 + 57 68 42 1 + 57 68 43 1 + 57 68 44 1 + 57 68 45 1 + 57 68 46 1 + 57 68 47 1 + 57 68 48 1 + 57 68 49 1 + 57 68 50 1 + 57 68 51 1 + 57 68 52 1 + 57 68 53 1 + 57 68 54 1 + 57 68 55 1 + 57 68 56 1 + 57 68 57 1 + 57 68 58 1 + 57 68 59 1 + 57 68 60 1 + 57 68 61 1 + 57 68 62 1 + 57 68 63 1 + 57 68 64 1 + 57 68 65 1 + 57 68 66 1 + 57 68 67 1 + 57 68 68 1 + 57 68 69 1 + 57 68 70 1 + 57 68 71 1 + 57 68 72 1 + 57 68 73 1 + 57 68 74 1 + 57 68 75 1 + 57 68 76 1 + 57 68 77 1 + 57 68 78 1 + 57 68 79 1 + 57 68 80 1 + 57 68 81 1 + 57 68 82 1 + 57 68 83 1 + 57 68 84 1 + 57 68 85 1 + 57 68 86 1 + 57 68 87 1 + 57 68 88 0.345113 + 57 69 39 0.142672 + 57 69 40 0.996155 + 57 69 41 1 + 57 69 42 1 + 57 69 43 1 + 57 69 44 1 + 57 69 45 1 + 57 69 46 1 + 57 69 47 1 + 57 69 48 1 + 57 69 49 1 + 57 69 50 1 + 57 69 51 1 + 57 69 52 1 + 57 69 53 1 + 57 69 54 1 + 57 69 55 1 + 57 69 56 1 + 57 69 57 1 + 57 69 58 1 + 57 69 59 1 + 57 69 60 1 + 57 69 61 1 + 57 69 62 1 + 57 69 63 1 + 57 69 64 1 + 57 69 65 1 + 57 69 66 1 + 57 69 67 1 + 57 69 68 1 + 57 69 69 1 + 57 69 70 1 + 57 69 71 1 + 57 69 72 1 + 57 69 73 1 + 57 69 74 1 + 57 69 75 1 + 57 69 76 1 + 57 69 77 1 + 57 69 78 1 + 57 69 79 1 + 57 69 80 1 + 57 69 81 1 + 57 69 82 1 + 57 69 83 1 + 57 69 84 1 + 57 69 85 1 + 57 69 86 1 + 57 69 87 0.996155 + 57 69 88 0.142672 + 57 70 39 0.00913973 + 57 70 40 0.87979 + 57 70 41 1 + 57 70 42 1 + 57 70 43 1 + 57 70 44 1 + 57 70 45 1 + 57 70 46 1 + 57 70 47 1 + 57 70 48 1 + 57 70 49 1 + 57 70 50 1 + 57 70 51 1 + 57 70 52 1 + 57 70 53 1 + 57 70 54 1 + 57 70 55 1 + 57 70 56 1 + 57 70 57 1 + 57 70 58 1 + 57 70 59 1 + 57 70 60 1 + 57 70 61 1 + 57 70 62 1 + 57 70 63 1 + 57 70 64 1 + 57 70 65 1 + 57 70 66 1 + 57 70 67 1 + 57 70 68 1 + 57 70 69 1 + 57 70 70 1 + 57 70 71 1 + 57 70 72 1 + 57 70 73 1 + 57 70 74 1 + 57 70 75 1 + 57 70 76 1 + 57 70 77 1 + 57 70 78 1 + 57 70 79 1 + 57 70 80 1 + 57 70 81 1 + 57 70 82 1 + 57 70 83 1 + 57 70 84 1 + 57 70 85 1 + 57 70 86 1 + 57 70 87 0.87979 + 57 70 88 0.00913973 + 57 71 40 0.594037 + 57 71 41 1 + 57 71 42 1 + 57 71 43 1 + 57 71 44 1 + 57 71 45 1 + 57 71 46 1 + 57 71 47 1 + 57 71 48 1 + 57 71 49 1 + 57 71 50 1 + 57 71 51 1 + 57 71 52 1 + 57 71 53 1 + 57 71 54 1 + 57 71 55 1 + 57 71 56 1 + 57 71 57 1 + 57 71 58 1 + 57 71 59 1 + 57 71 60 1 + 57 71 61 1 + 57 71 62 1 + 57 71 63 1 + 57 71 64 1 + 57 71 65 1 + 57 71 66 1 + 57 71 67 1 + 57 71 68 1 + 57 71 69 1 + 57 71 70 1 + 57 71 71 1 + 57 71 72 1 + 57 71 73 1 + 57 71 74 1 + 57 71 75 1 + 57 71 76 1 + 57 71 77 1 + 57 71 78 1 + 57 71 79 1 + 57 71 80 1 + 57 71 81 1 + 57 71 82 1 + 57 71 83 1 + 57 71 84 1 + 57 71 85 1 + 57 71 86 1 + 57 71 87 0.594037 + 57 72 40 0.253138 + 57 72 41 0.999295 + 57 72 42 1 + 57 72 43 1 + 57 72 44 1 + 57 72 45 1 + 57 72 46 1 + 57 72 47 1 + 57 72 48 1 + 57 72 49 1 + 57 72 50 1 + 57 72 51 1 + 57 72 52 1 + 57 72 53 1 + 57 72 54 1 + 57 72 55 1 + 57 72 56 1 + 57 72 57 1 + 57 72 58 1 + 57 72 59 1 + 57 72 60 1 + 57 72 61 1 + 57 72 62 1 + 57 72 63 1 + 57 72 64 1 + 57 72 65 1 + 57 72 66 1 + 57 72 67 1 + 57 72 68 1 + 57 72 69 1 + 57 72 70 1 + 57 72 71 1 + 57 72 72 1 + 57 72 73 1 + 57 72 74 1 + 57 72 75 1 + 57 72 76 1 + 57 72 77 1 + 57 72 78 1 + 57 72 79 1 + 57 72 80 1 + 57 72 81 1 + 57 72 82 1 + 57 72 83 1 + 57 72 84 1 + 57 72 85 1 + 57 72 86 0.999295 + 57 72 87 0.253138 + 57 73 40 0.013123 + 57 73 41 0.848902 + 57 73 42 1 + 57 73 43 1 + 57 73 44 1 + 57 73 45 1 + 57 73 46 1 + 57 73 47 1 + 57 73 48 1 + 57 73 49 1 + 57 73 50 1 + 57 73 51 1 + 57 73 52 1 + 57 73 53 1 + 57 73 54 1 + 57 73 55 1 + 57 73 56 1 + 57 73 57 1 + 57 73 58 1 + 57 73 59 1 + 57 73 60 1 + 57 73 61 1 + 57 73 62 1 + 57 73 63 1 + 57 73 64 1 + 57 73 65 1 + 57 73 66 1 + 57 73 67 1 + 57 73 68 1 + 57 73 69 1 + 57 73 70 1 + 57 73 71 1 + 57 73 72 1 + 57 73 73 1 + 57 73 74 1 + 57 73 75 1 + 57 73 76 1 + 57 73 77 1 + 57 73 78 1 + 57 73 79 1 + 57 73 80 1 + 57 73 81 1 + 57 73 82 1 + 57 73 83 1 + 57 73 84 1 + 57 73 85 1 + 57 73 86 0.848902 + 57 73 87 0.013123 + 57 74 41 0.42026 + 57 74 42 1 + 57 74 43 1 + 57 74 44 1 + 57 74 45 1 + 57 74 46 1 + 57 74 47 1 + 57 74 48 1 + 57 74 49 1 + 57 74 50 1 + 57 74 51 1 + 57 74 52 1 + 57 74 53 1 + 57 74 54 1 + 57 74 55 1 + 57 74 56 1 + 57 74 57 1 + 57 74 58 1 + 57 74 59 1 + 57 74 60 1 + 57 74 61 1 + 57 74 62 1 + 57 74 63 1 + 57 74 64 1 + 57 74 65 1 + 57 74 66 1 + 57 74 67 1 + 57 74 68 1 + 57 74 69 1 + 57 74 70 1 + 57 74 71 1 + 57 74 72 1 + 57 74 73 1 + 57 74 74 1 + 57 74 75 1 + 57 74 76 1 + 57 74 77 1 + 57 74 78 1 + 57 74 79 1 + 57 74 80 1 + 57 74 81 1 + 57 74 82 1 + 57 74 83 1 + 57 74 84 1 + 57 74 85 1 + 57 74 86 0.42026 + 57 75 41 0.0398206 + 57 75 42 0.884209 + 57 75 43 1 + 57 75 44 1 + 57 75 45 1 + 57 75 46 1 + 57 75 47 1 + 57 75 48 1 + 57 75 49 1 + 57 75 50 1 + 57 75 51 1 + 57 75 52 1 + 57 75 53 1 + 57 75 54 1 + 57 75 55 1 + 57 75 56 1 + 57 75 57 1 + 57 75 58 1 + 57 75 59 1 + 57 75 60 1 + 57 75 61 1 + 57 75 62 1 + 57 75 63 1 + 57 75 64 1 + 57 75 65 1 + 57 75 66 1 + 57 75 67 1 + 57 75 68 1 + 57 75 69 1 + 57 75 70 1 + 57 75 71 1 + 57 75 72 1 + 57 75 73 1 + 57 75 74 1 + 57 75 75 1 + 57 75 76 1 + 57 75 77 1 + 57 75 78 1 + 57 75 79 1 + 57 75 80 1 + 57 75 81 1 + 57 75 82 1 + 57 75 83 1 + 57 75 84 1 + 57 75 85 0.884209 + 57 75 86 0.0398206 + 57 76 42 0.370069 + 57 76 43 0.999467 + 57 76 44 1 + 57 76 45 1 + 57 76 46 1 + 57 76 47 1 + 57 76 48 1 + 57 76 49 1 + 57 76 50 1 + 57 76 51 1 + 57 76 52 1 + 57 76 53 1 + 57 76 54 1 + 57 76 55 1 + 57 76 56 1 + 57 76 57 1 + 57 76 58 1 + 57 76 59 1 + 57 76 60 1 + 57 76 61 1 + 57 76 62 1 + 57 76 63 1 + 57 76 64 1 + 57 76 65 1 + 57 76 66 1 + 57 76 67 1 + 57 76 68 1 + 57 76 69 1 + 57 76 70 1 + 57 76 71 1 + 57 76 72 1 + 57 76 73 1 + 57 76 74 1 + 57 76 75 1 + 57 76 76 1 + 57 76 77 1 + 57 76 78 1 + 57 76 79 1 + 57 76 80 1 + 57 76 81 1 + 57 76 82 1 + 57 76 83 1 + 57 76 84 0.999467 + 57 76 85 0.370069 + 57 77 42 0.0100187 + 57 77 43 0.742086 + 57 77 44 1 + 57 77 45 1 + 57 77 46 1 + 57 77 47 1 + 57 77 48 1 + 57 77 49 1 + 57 77 50 1 + 57 77 51 1 + 57 77 52 1 + 57 77 53 1 + 57 77 54 1 + 57 77 55 1 + 57 77 56 1 + 57 77 57 1 + 57 77 58 1 + 57 77 59 1 + 57 77 60 1 + 57 77 61 1 + 57 77 62 1 + 57 77 63 1 + 57 77 64 1 + 57 77 65 1 + 57 77 66 1 + 57 77 67 1 + 57 77 68 1 + 57 77 69 1 + 57 77 70 1 + 57 77 71 1 + 57 77 72 1 + 57 77 73 1 + 57 77 74 1 + 57 77 75 1 + 57 77 76 1 + 57 77 77 1 + 57 77 78 1 + 57 77 79 1 + 57 77 80 1 + 57 77 81 1 + 57 77 82 1 + 57 77 83 1 + 57 77 84 0.742086 + 57 77 85 0.0100187 + 57 78 43 0.132621 + 57 78 44 0.933296 + 57 78 45 1 + 57 78 46 1 + 57 78 47 1 + 57 78 48 1 + 57 78 49 1 + 57 78 50 1 + 57 78 51 1 + 57 78 52 1 + 57 78 53 1 + 57 78 54 1 + 57 78 55 1 + 57 78 56 1 + 57 78 57 1 + 57 78 58 1 + 57 78 59 1 + 57 78 60 1 + 57 78 61 1 + 57 78 62 1 + 57 78 63 1 + 57 78 64 1 + 57 78 65 1 + 57 78 66 1 + 57 78 67 1 + 57 78 68 1 + 57 78 69 1 + 57 78 70 1 + 57 78 71 1 + 57 78 72 1 + 57 78 73 1 + 57 78 74 1 + 57 78 75 1 + 57 78 76 1 + 57 78 77 1 + 57 78 78 1 + 57 78 79 1 + 57 78 80 1 + 57 78 81 1 + 57 78 82 1 + 57 78 83 0.933296 + 57 78 84 0.132621 + 57 79 44 0.315874 + 57 79 45 0.987756 + 57 79 46 1 + 57 79 47 1 + 57 79 48 1 + 57 79 49 1 + 57 79 50 1 + 57 79 51 1 + 57 79 52 1 + 57 79 53 1 + 57 79 54 1 + 57 79 55 1 + 57 79 56 1 + 57 79 57 1 + 57 79 58 1 + 57 79 59 1 + 57 79 60 1 + 57 79 61 1 + 57 79 62 1 + 57 79 63 1 + 57 79 64 1 + 57 79 65 1 + 57 79 66 1 + 57 79 67 1 + 57 79 68 1 + 57 79 69 1 + 57 79 70 1 + 57 79 71 1 + 57 79 72 1 + 57 79 73 1 + 57 79 74 1 + 57 79 75 1 + 57 79 76 1 + 57 79 77 1 + 57 79 78 1 + 57 79 79 1 + 57 79 80 1 + 57 79 81 1 + 57 79 82 0.987756 + 57 79 83 0.315874 + 57 80 44 0.000148631 + 57 80 45 0.458559 + 57 80 46 0.997087 + 57 80 47 1 + 57 80 48 1 + 57 80 49 1 + 57 80 50 1 + 57 80 51 1 + 57 80 52 1 + 57 80 53 1 + 57 80 54 1 + 57 80 55 1 + 57 80 56 1 + 57 80 57 1 + 57 80 58 1 + 57 80 59 1 + 57 80 60 1 + 57 80 61 1 + 57 80 62 1 + 57 80 63 1 + 57 80 64 1 + 57 80 65 1 + 57 80 66 1 + 57 80 67 1 + 57 80 68 1 + 57 80 69 1 + 57 80 70 1 + 57 80 71 1 + 57 80 72 1 + 57 80 73 1 + 57 80 74 1 + 57 80 75 1 + 57 80 76 1 + 57 80 77 1 + 57 80 78 1 + 57 80 79 1 + 57 80 80 1 + 57 80 81 0.997087 + 57 80 82 0.458559 + 57 80 83 0.000148631 + 57 81 45 0.00284305 + 57 81 46 0.510026 + 57 81 47 0.997087 + 57 81 48 1 + 57 81 49 1 + 57 81 50 1 + 57 81 51 1 + 57 81 52 1 + 57 81 53 1 + 57 81 54 1 + 57 81 55 1 + 57 81 56 1 + 57 81 57 1 + 57 81 58 1 + 57 81 59 1 + 57 81 60 1 + 57 81 61 1 + 57 81 62 1 + 57 81 63 1 + 57 81 64 1 + 57 81 65 1 + 57 81 66 1 + 57 81 67 1 + 57 81 68 1 + 57 81 69 1 + 57 81 70 1 + 57 81 71 1 + 57 81 72 1 + 57 81 73 1 + 57 81 74 1 + 57 81 75 1 + 57 81 76 1 + 57 81 77 1 + 57 81 78 1 + 57 81 79 1 + 57 81 80 0.997087 + 57 81 81 0.510026 + 57 81 82 0.00284305 + 57 82 46 0.00284305 + 57 82 47 0.458559 + 57 82 48 0.987756 + 57 82 49 1 + 57 82 50 1 + 57 82 51 1 + 57 82 52 1 + 57 82 53 1 + 57 82 54 1 + 57 82 55 1 + 57 82 56 1 + 57 82 57 1 + 57 82 58 1 + 57 82 59 1 + 57 82 60 1 + 57 82 61 1 + 57 82 62 1 + 57 82 63 1 + 57 82 64 1 + 57 82 65 1 + 57 82 66 1 + 57 82 67 1 + 57 82 68 1 + 57 82 69 1 + 57 82 70 1 + 57 82 71 1 + 57 82 72 1 + 57 82 73 1 + 57 82 74 1 + 57 82 75 1 + 57 82 76 1 + 57 82 77 1 + 57 82 78 1 + 57 82 79 0.987756 + 57 82 80 0.458559 + 57 82 81 0.00284305 + 57 83 47 0.000148631 + 57 83 48 0.315874 + 57 83 49 0.933296 + 57 83 50 1 + 57 83 51 1 + 57 83 52 1 + 57 83 53 1 + 57 83 54 1 + 57 83 55 1 + 57 83 56 1 + 57 83 57 1 + 57 83 58 1 + 57 83 59 1 + 57 83 60 1 + 57 83 61 1 + 57 83 62 1 + 57 83 63 1 + 57 83 64 1 + 57 83 65 1 + 57 83 66 1 + 57 83 67 1 + 57 83 68 1 + 57 83 69 1 + 57 83 70 1 + 57 83 71 1 + 57 83 72 1 + 57 83 73 1 + 57 83 74 1 + 57 83 75 1 + 57 83 76 1 + 57 83 77 1 + 57 83 78 0.933296 + 57 83 79 0.315874 + 57 83 80 0.000148631 + 57 84 49 0.132621 + 57 84 50 0.742086 + 57 84 51 0.999467 + 57 84 52 1 + 57 84 53 1 + 57 84 54 1 + 57 84 55 1 + 57 84 56 1 + 57 84 57 1 + 57 84 58 1 + 57 84 59 1 + 57 84 60 1 + 57 84 61 1 + 57 84 62 1 + 57 84 63 1 + 57 84 64 1 + 57 84 65 1 + 57 84 66 1 + 57 84 67 1 + 57 84 68 1 + 57 84 69 1 + 57 84 70 1 + 57 84 71 1 + 57 84 72 1 + 57 84 73 1 + 57 84 74 1 + 57 84 75 1 + 57 84 76 0.999467 + 57 84 77 0.742086 + 57 84 78 0.132621 + 57 85 50 0.0100187 + 57 85 51 0.370069 + 57 85 52 0.884209 + 57 85 53 1 + 57 85 54 1 + 57 85 55 1 + 57 85 56 1 + 57 85 57 1 + 57 85 58 1 + 57 85 59 1 + 57 85 60 1 + 57 85 61 1 + 57 85 62 1 + 57 85 63 1 + 57 85 64 1 + 57 85 65 1 + 57 85 66 1 + 57 85 67 1 + 57 85 68 1 + 57 85 69 1 + 57 85 70 1 + 57 85 71 1 + 57 85 72 1 + 57 85 73 1 + 57 85 74 1 + 57 85 75 0.884209 + 57 85 76 0.370069 + 57 85 77 0.0100187 + 57 86 52 0.0398206 + 57 86 53 0.42026 + 57 86 54 0.848902 + 57 86 55 0.999295 + 57 86 56 1 + 57 86 57 1 + 57 86 58 1 + 57 86 59 1 + 57 86 60 1 + 57 86 61 1 + 57 86 62 1 + 57 86 63 1 + 57 86 64 1 + 57 86 65 1 + 57 86 66 1 + 57 86 67 1 + 57 86 68 1 + 57 86 69 1 + 57 86 70 1 + 57 86 71 1 + 57 86 72 0.999295 + 57 86 73 0.848902 + 57 86 74 0.42026 + 57 86 75 0.0398206 + 57 87 54 0.013123 + 57 87 55 0.253138 + 57 87 56 0.594037 + 57 87 57 0.87979 + 57 87 58 0.996155 + 57 87 59 1 + 57 87 60 1 + 57 87 61 1 + 57 87 62 1 + 57 87 63 1 + 57 87 64 1 + 57 87 65 1 + 57 87 66 1 + 57 87 67 1 + 57 87 68 1 + 57 87 69 0.996155 + 57 87 70 0.87979 + 57 87 71 0.594037 + 57 87 72 0.253138 + 57 87 73 0.013123 + 57 88 57 0.00913973 + 57 88 58 0.142672 + 57 88 59 0.345113 + 57 88 60 0.508892 + 57 88 61 0.63101 + 57 88 62 0.712087 + 57 88 63 0.752526 + 57 88 64 0.752526 + 57 88 65 0.712087 + 57 88 66 0.63101 + 57 88 67 0.508892 + 57 88 68 0.345113 + 57 88 69 0.142672 + 57 88 70 0.00913973 + 58 38 61 0.000200097 + 58 38 62 0.0096893 + 58 38 63 0.0245266 + 58 38 64 0.0245266 + 58 38 65 0.0096893 + 58 38 66 0.000200097 + 58 39 56 0.00366907 + 58 39 57 0.142672 + 58 39 58 0.386161 + 58 39 59 0.590371 + 58 39 60 0.752526 + 58 39 61 0.873248 + 58 39 62 0.944047 + 58 39 63 0.969258 + 58 39 64 0.969258 + 58 39 65 0.944047 + 58 39 66 0.873248 + 58 39 67 0.752526 + 58 39 68 0.590371 + 58 39 69 0.386161 + 58 39 70 0.142672 + 58 39 71 0.00366907 + 58 40 53 4.51737e-05 + 58 40 54 0.137253 + 58 40 55 0.509102 + 58 40 56 0.843357 + 58 40 57 0.996155 + 58 40 58 1 + 58 40 59 1 + 58 40 60 1 + 58 40 61 1 + 58 40 62 1 + 58 40 63 1 + 58 40 64 1 + 58 40 65 1 + 58 40 66 1 + 58 40 67 1 + 58 40 68 1 + 58 40 69 1 + 58 40 70 0.996155 + 58 40 71 0.843357 + 58 40 72 0.509102 + 58 40 73 0.137253 + 58 40 74 4.51737e-05 + 58 41 51 0.000204528 + 58 41 52 0.204921 + 58 41 53 0.686307 + 58 41 54 0.985777 + 58 41 55 1 + 58 41 56 1 + 58 41 57 1 + 58 41 58 1 + 58 41 59 1 + 58 41 60 1 + 58 41 61 1 + 58 41 62 1 + 58 41 63 1 + 58 41 64 1 + 58 41 65 1 + 58 41 66 1 + 58 41 67 1 + 58 41 68 1 + 58 41 69 1 + 58 41 70 1 + 58 41 71 1 + 58 41 72 1 + 58 41 73 0.985777 + 58 41 74 0.686307 + 58 41 75 0.204921 + 58 41 76 0.000204528 + 58 42 50 0.105685 + 58 42 51 0.648356 + 58 42 52 0.991156 + 58 42 53 1 + 58 42 54 1 + 58 42 55 1 + 58 42 56 1 + 58 42 57 1 + 58 42 58 1 + 58 42 59 1 + 58 42 60 1 + 58 42 61 1 + 58 42 62 1 + 58 42 63 1 + 58 42 64 1 + 58 42 65 1 + 58 42 66 1 + 58 42 67 1 + 58 42 68 1 + 58 42 69 1 + 58 42 70 1 + 58 42 71 1 + 58 42 72 1 + 58 42 73 1 + 58 42 74 1 + 58 42 75 0.991156 + 58 42 76 0.648356 + 58 42 77 0.105685 + 58 43 48 0.00207515 + 58 43 49 0.364963 + 58 43 50 0.933643 + 58 43 51 1 + 58 43 52 1 + 58 43 53 1 + 58 43 54 1 + 58 43 55 1 + 58 43 56 1 + 58 43 57 1 + 58 43 58 1 + 58 43 59 1 + 58 43 60 1 + 58 43 61 1 + 58 43 62 1 + 58 43 63 1 + 58 43 64 1 + 58 43 65 1 + 58 43 66 1 + 58 43 67 1 + 58 43 68 1 + 58 43 69 1 + 58 43 70 1 + 58 43 71 1 + 58 43 72 1 + 58 43 73 1 + 58 43 74 1 + 58 43 75 1 + 58 43 76 1 + 58 43 77 0.933643 + 58 43 78 0.364963 + 58 43 79 0.00207515 + 58 44 47 0.0302985 + 58 44 48 0.610031 + 58 44 49 0.99787 + 58 44 50 1 + 58 44 51 1 + 58 44 52 1 + 58 44 53 1 + 58 44 54 1 + 58 44 55 1 + 58 44 56 1 + 58 44 57 1 + 58 44 58 1 + 58 44 59 1 + 58 44 60 1 + 58 44 61 1 + 58 44 62 1 + 58 44 63 1 + 58 44 64 1 + 58 44 65 1 + 58 44 66 1 + 58 44 67 1 + 58 44 68 1 + 58 44 69 1 + 58 44 70 1 + 58 44 71 1 + 58 44 72 1 + 58 44 73 1 + 58 44 74 1 + 58 44 75 1 + 58 44 76 1 + 58 44 77 1 + 58 44 78 0.99787 + 58 44 79 0.610031 + 58 44 80 0.0302985 + 58 45 46 0.0622884 + 58 45 47 0.747928 + 58 45 48 1 + 58 45 49 1 + 58 45 50 1 + 58 45 51 1 + 58 45 52 1 + 58 45 53 1 + 58 45 54 1 + 58 45 55 1 + 58 45 56 1 + 58 45 57 1 + 58 45 58 1 + 58 45 59 1 + 58 45 60 1 + 58 45 61 1 + 58 45 62 1 + 58 45 63 1 + 58 45 64 1 + 58 45 65 1 + 58 45 66 1 + 58 45 67 1 + 58 45 68 1 + 58 45 69 1 + 58 45 70 1 + 58 45 71 1 + 58 45 72 1 + 58 45 73 1 + 58 45 74 1 + 58 45 75 1 + 58 45 76 1 + 58 45 77 1 + 58 45 78 1 + 58 45 79 1 + 58 45 80 0.747928 + 58 45 81 0.0622884 + 58 46 45 0.0622884 + 58 46 46 0.787228 + 58 46 47 1 + 58 46 48 1 + 58 46 49 1 + 58 46 50 1 + 58 46 51 1 + 58 46 52 1 + 58 46 53 1 + 58 46 54 1 + 58 46 55 1 + 58 46 56 1 + 58 46 57 1 + 58 46 58 1 + 58 46 59 1 + 58 46 60 1 + 58 46 61 1 + 58 46 62 1 + 58 46 63 1 + 58 46 64 1 + 58 46 65 1 + 58 46 66 1 + 58 46 67 1 + 58 46 68 1 + 58 46 69 1 + 58 46 70 1 + 58 46 71 1 + 58 46 72 1 + 58 46 73 1 + 58 46 74 1 + 58 46 75 1 + 58 46 76 1 + 58 46 77 1 + 58 46 78 1 + 58 46 79 1 + 58 46 80 1 + 58 46 81 0.787228 + 58 46 82 0.0622884 + 58 47 44 0.0302985 + 58 47 45 0.747928 + 58 47 46 1 + 58 47 47 1 + 58 47 48 1 + 58 47 49 1 + 58 47 50 1 + 58 47 51 1 + 58 47 52 1 + 58 47 53 1 + 58 47 54 1 + 58 47 55 1 + 58 47 56 1 + 58 47 57 1 + 58 47 58 1 + 58 47 59 1 + 58 47 60 1 + 58 47 61 1 + 58 47 62 1 + 58 47 63 1 + 58 47 64 1 + 58 47 65 1 + 58 47 66 1 + 58 47 67 1 + 58 47 68 1 + 58 47 69 1 + 58 47 70 1 + 58 47 71 1 + 58 47 72 1 + 58 47 73 1 + 58 47 74 1 + 58 47 75 1 + 58 47 76 1 + 58 47 77 1 + 58 47 78 1 + 58 47 79 1 + 58 47 80 1 + 58 47 81 1 + 58 47 82 0.747928 + 58 47 83 0.0302985 + 58 48 43 0.00207515 + 58 48 44 0.610031 + 58 48 45 1 + 58 48 46 1 + 58 48 47 1 + 58 48 48 1 + 58 48 49 1 + 58 48 50 1 + 58 48 51 1 + 58 48 52 1 + 58 48 53 1 + 58 48 54 1 + 58 48 55 1 + 58 48 56 1 + 58 48 57 1 + 58 48 58 1 + 58 48 59 1 + 58 48 60 1 + 58 48 61 1 + 58 48 62 1 + 58 48 63 1 + 58 48 64 1 + 58 48 65 1 + 58 48 66 1 + 58 48 67 1 + 58 48 68 1 + 58 48 69 1 + 58 48 70 1 + 58 48 71 1 + 58 48 72 1 + 58 48 73 1 + 58 48 74 1 + 58 48 75 1 + 58 48 76 1 + 58 48 77 1 + 58 48 78 1 + 58 48 79 1 + 58 48 80 1 + 58 48 81 1 + 58 48 82 1 + 58 48 83 0.610031 + 58 48 84 0.00207515 + 58 49 43 0.364963 + 58 49 44 0.99787 + 58 49 45 1 + 58 49 46 1 + 58 49 47 1 + 58 49 48 1 + 58 49 49 1 + 58 49 50 1 + 58 49 51 1 + 58 49 52 1 + 58 49 53 1 + 58 49 54 1 + 58 49 55 1 + 58 49 56 1 + 58 49 57 1 + 58 49 58 1 + 58 49 59 1 + 58 49 60 1 + 58 49 61 1 + 58 49 62 1 + 58 49 63 1 + 58 49 64 1 + 58 49 65 1 + 58 49 66 1 + 58 49 67 1 + 58 49 68 1 + 58 49 69 1 + 58 49 70 1 + 58 49 71 1 + 58 49 72 1 + 58 49 73 1 + 58 49 74 1 + 58 49 75 1 + 58 49 76 1 + 58 49 77 1 + 58 49 78 1 + 58 49 79 1 + 58 49 80 1 + 58 49 81 1 + 58 49 82 1 + 58 49 83 0.99787 + 58 49 84 0.364963 + 58 50 42 0.105685 + 58 50 43 0.933643 + 58 50 44 1 + 58 50 45 1 + 58 50 46 1 + 58 50 47 1 + 58 50 48 1 + 58 50 49 1 + 58 50 50 1 + 58 50 51 1 + 58 50 52 1 + 58 50 53 1 + 58 50 54 1 + 58 50 55 1 + 58 50 56 1 + 58 50 57 1 + 58 50 58 1 + 58 50 59 1 + 58 50 60 1 + 58 50 61 1 + 58 50 62 1 + 58 50 63 1 + 58 50 64 1 + 58 50 65 1 + 58 50 66 1 + 58 50 67 1 + 58 50 68 1 + 58 50 69 1 + 58 50 70 1 + 58 50 71 1 + 58 50 72 1 + 58 50 73 1 + 58 50 74 1 + 58 50 75 1 + 58 50 76 1 + 58 50 77 1 + 58 50 78 1 + 58 50 79 1 + 58 50 80 1 + 58 50 81 1 + 58 50 82 1 + 58 50 83 1 + 58 50 84 0.933643 + 58 50 85 0.105685 + 58 51 41 0.000204528 + 58 51 42 0.648356 + 58 51 43 1 + 58 51 44 1 + 58 51 45 1 + 58 51 46 1 + 58 51 47 1 + 58 51 48 1 + 58 51 49 1 + 58 51 50 1 + 58 51 51 1 + 58 51 52 1 + 58 51 53 1 + 58 51 54 1 + 58 51 55 1 + 58 51 56 1 + 58 51 57 1 + 58 51 58 1 + 58 51 59 1 + 58 51 60 1 + 58 51 61 1 + 58 51 62 1 + 58 51 63 1 + 58 51 64 1 + 58 51 65 1 + 58 51 66 1 + 58 51 67 1 + 58 51 68 1 + 58 51 69 1 + 58 51 70 1 + 58 51 71 1 + 58 51 72 1 + 58 51 73 1 + 58 51 74 1 + 58 51 75 1 + 58 51 76 1 + 58 51 77 1 + 58 51 78 1 + 58 51 79 1 + 58 51 80 1 + 58 51 81 1 + 58 51 82 1 + 58 51 83 1 + 58 51 84 1 + 58 51 85 0.648356 + 58 51 86 0.000204528 + 58 52 41 0.204921 + 58 52 42 0.991156 + 58 52 43 1 + 58 52 44 1 + 58 52 45 1 + 58 52 46 1 + 58 52 47 1 + 58 52 48 1 + 58 52 49 1 + 58 52 50 1 + 58 52 51 1 + 58 52 52 1 + 58 52 53 1 + 58 52 54 1 + 58 52 55 1 + 58 52 56 1 + 58 52 57 1 + 58 52 58 1 + 58 52 59 1 + 58 52 60 1 + 58 52 61 1 + 58 52 62 1 + 58 52 63 1 + 58 52 64 1 + 58 52 65 1 + 58 52 66 1 + 58 52 67 1 + 58 52 68 1 + 58 52 69 1 + 58 52 70 1 + 58 52 71 1 + 58 52 72 1 + 58 52 73 1 + 58 52 74 1 + 58 52 75 1 + 58 52 76 1 + 58 52 77 1 + 58 52 78 1 + 58 52 79 1 + 58 52 80 1 + 58 52 81 1 + 58 52 82 1 + 58 52 83 1 + 58 52 84 1 + 58 52 85 0.991156 + 58 52 86 0.204921 + 58 53 40 4.51737e-05 + 58 53 41 0.686307 + 58 53 42 1 + 58 53 43 1 + 58 53 44 1 + 58 53 45 1 + 58 53 46 1 + 58 53 47 1 + 58 53 48 1 + 58 53 49 1 + 58 53 50 1 + 58 53 51 1 + 58 53 52 1 + 58 53 53 1 + 58 53 54 1 + 58 53 55 1 + 58 53 56 1 + 58 53 57 1 + 58 53 58 1 + 58 53 59 1 + 58 53 60 1 + 58 53 61 1 + 58 53 62 1 + 58 53 63 1 + 58 53 64 1 + 58 53 65 1 + 58 53 66 1 + 58 53 67 1 + 58 53 68 1 + 58 53 69 1 + 58 53 70 1 + 58 53 71 1 + 58 53 72 1 + 58 53 73 1 + 58 53 74 1 + 58 53 75 1 + 58 53 76 1 + 58 53 77 1 + 58 53 78 1 + 58 53 79 1 + 58 53 80 1 + 58 53 81 1 + 58 53 82 1 + 58 53 83 1 + 58 53 84 1 + 58 53 85 1 + 58 53 86 0.686307 + 58 53 87 4.51737e-05 + 58 54 40 0.137253 + 58 54 41 0.985777 + 58 54 42 1 + 58 54 43 1 + 58 54 44 1 + 58 54 45 1 + 58 54 46 1 + 58 54 47 1 + 58 54 48 1 + 58 54 49 1 + 58 54 50 1 + 58 54 51 1 + 58 54 52 1 + 58 54 53 1 + 58 54 54 1 + 58 54 55 1 + 58 54 56 1 + 58 54 57 1 + 58 54 58 1 + 58 54 59 1 + 58 54 60 1 + 58 54 61 1 + 58 54 62 1 + 58 54 63 1 + 58 54 64 1 + 58 54 65 1 + 58 54 66 1 + 58 54 67 1 + 58 54 68 1 + 58 54 69 1 + 58 54 70 1 + 58 54 71 1 + 58 54 72 1 + 58 54 73 1 + 58 54 74 1 + 58 54 75 1 + 58 54 76 1 + 58 54 77 1 + 58 54 78 1 + 58 54 79 1 + 58 54 80 1 + 58 54 81 1 + 58 54 82 1 + 58 54 83 1 + 58 54 84 1 + 58 54 85 1 + 58 54 86 0.985777 + 58 54 87 0.137253 + 58 55 40 0.509102 + 58 55 41 1 + 58 55 42 1 + 58 55 43 1 + 58 55 44 1 + 58 55 45 1 + 58 55 46 1 + 58 55 47 1 + 58 55 48 1 + 58 55 49 1 + 58 55 50 1 + 58 55 51 1 + 58 55 52 1 + 58 55 53 1 + 58 55 54 1 + 58 55 55 1 + 58 55 56 1 + 58 55 57 1 + 58 55 58 1 + 58 55 59 1 + 58 55 60 1 + 58 55 61 1 + 58 55 62 1 + 58 55 63 1 + 58 55 64 1 + 58 55 65 1 + 58 55 66 1 + 58 55 67 1 + 58 55 68 1 + 58 55 69 1 + 58 55 70 1 + 58 55 71 1 + 58 55 72 1 + 58 55 73 1 + 58 55 74 1 + 58 55 75 1 + 58 55 76 1 + 58 55 77 1 + 58 55 78 1 + 58 55 79 1 + 58 55 80 1 + 58 55 81 1 + 58 55 82 1 + 58 55 83 1 + 58 55 84 1 + 58 55 85 1 + 58 55 86 1 + 58 55 87 0.509102 + 58 56 39 0.00366907 + 58 56 40 0.843357 + 58 56 41 1 + 58 56 42 1 + 58 56 43 1 + 58 56 44 1 + 58 56 45 1 + 58 56 46 1 + 58 56 47 1 + 58 56 48 1 + 58 56 49 1 + 58 56 50 1 + 58 56 51 1 + 58 56 52 1 + 58 56 53 1 + 58 56 54 1 + 58 56 55 1 + 58 56 56 1 + 58 56 57 1 + 58 56 58 1 + 58 56 59 1 + 58 56 60 1 + 58 56 61 1 + 58 56 62 1 + 58 56 63 1 + 58 56 64 1 + 58 56 65 1 + 58 56 66 1 + 58 56 67 1 + 58 56 68 1 + 58 56 69 1 + 58 56 70 1 + 58 56 71 1 + 58 56 72 1 + 58 56 73 1 + 58 56 74 1 + 58 56 75 1 + 58 56 76 1 + 58 56 77 1 + 58 56 78 1 + 58 56 79 1 + 58 56 80 1 + 58 56 81 1 + 58 56 82 1 + 58 56 83 1 + 58 56 84 1 + 58 56 85 1 + 58 56 86 1 + 58 56 87 0.843357 + 58 56 88 0.00366907 + 58 57 39 0.142672 + 58 57 40 0.996155 + 58 57 41 1 + 58 57 42 1 + 58 57 43 1 + 58 57 44 1 + 58 57 45 1 + 58 57 46 1 + 58 57 47 1 + 58 57 48 1 + 58 57 49 1 + 58 57 50 1 + 58 57 51 1 + 58 57 52 1 + 58 57 53 1 + 58 57 54 1 + 58 57 55 1 + 58 57 56 1 + 58 57 57 1 + 58 57 58 1 + 58 57 59 1 + 58 57 60 1 + 58 57 61 1 + 58 57 62 1 + 58 57 63 1 + 58 57 64 1 + 58 57 65 1 + 58 57 66 1 + 58 57 67 1 + 58 57 68 1 + 58 57 69 1 + 58 57 70 1 + 58 57 71 1 + 58 57 72 1 + 58 57 73 1 + 58 57 74 1 + 58 57 75 1 + 58 57 76 1 + 58 57 77 1 + 58 57 78 1 + 58 57 79 1 + 58 57 80 1 + 58 57 81 1 + 58 57 82 1 + 58 57 83 1 + 58 57 84 1 + 58 57 85 1 + 58 57 86 1 + 58 57 87 0.996155 + 58 57 88 0.142672 + 58 58 39 0.386161 + 58 58 40 1 + 58 58 41 1 + 58 58 42 1 + 58 58 43 1 + 58 58 44 1 + 58 58 45 1 + 58 58 46 1 + 58 58 47 1 + 58 58 48 1 + 58 58 49 1 + 58 58 50 1 + 58 58 51 1 + 58 58 52 1 + 58 58 53 1 + 58 58 54 1 + 58 58 55 1 + 58 58 56 1 + 58 58 57 1 + 58 58 58 1 + 58 58 59 1 + 58 58 60 1 + 58 58 61 1 + 58 58 62 1 + 58 58 63 1 + 58 58 64 1 + 58 58 65 1 + 58 58 66 1 + 58 58 67 1 + 58 58 68 1 + 58 58 69 1 + 58 58 70 1 + 58 58 71 1 + 58 58 72 1 + 58 58 73 1 + 58 58 74 1 + 58 58 75 1 + 58 58 76 1 + 58 58 77 1 + 58 58 78 1 + 58 58 79 1 + 58 58 80 1 + 58 58 81 1 + 58 58 82 1 + 58 58 83 1 + 58 58 84 1 + 58 58 85 1 + 58 58 86 1 + 58 58 87 1 + 58 58 88 0.386161 + 58 59 39 0.590371 + 58 59 40 1 + 58 59 41 1 + 58 59 42 1 + 58 59 43 1 + 58 59 44 1 + 58 59 45 1 + 58 59 46 1 + 58 59 47 1 + 58 59 48 1 + 58 59 49 1 + 58 59 50 1 + 58 59 51 1 + 58 59 52 1 + 58 59 53 1 + 58 59 54 1 + 58 59 55 1 + 58 59 56 1 + 58 59 57 1 + 58 59 58 1 + 58 59 59 1 + 58 59 60 1 + 58 59 61 1 + 58 59 62 1 + 58 59 63 1 + 58 59 64 1 + 58 59 65 1 + 58 59 66 1 + 58 59 67 1 + 58 59 68 1 + 58 59 69 1 + 58 59 70 1 + 58 59 71 1 + 58 59 72 1 + 58 59 73 1 + 58 59 74 1 + 58 59 75 1 + 58 59 76 1 + 58 59 77 1 + 58 59 78 1 + 58 59 79 1 + 58 59 80 1 + 58 59 81 1 + 58 59 82 1 + 58 59 83 1 + 58 59 84 1 + 58 59 85 1 + 58 59 86 1 + 58 59 87 1 + 58 59 88 0.590371 + 58 60 39 0.752526 + 58 60 40 1 + 58 60 41 1 + 58 60 42 1 + 58 60 43 1 + 58 60 44 1 + 58 60 45 1 + 58 60 46 1 + 58 60 47 1 + 58 60 48 1 + 58 60 49 1 + 58 60 50 1 + 58 60 51 1 + 58 60 52 1 + 58 60 53 1 + 58 60 54 1 + 58 60 55 1 + 58 60 56 1 + 58 60 57 1 + 58 60 58 1 + 58 60 59 1 + 58 60 60 1 + 58 60 61 1 + 58 60 62 1 + 58 60 63 1 + 58 60 64 1 + 58 60 65 1 + 58 60 66 1 + 58 60 67 1 + 58 60 68 1 + 58 60 69 1 + 58 60 70 1 + 58 60 71 1 + 58 60 72 1 + 58 60 73 1 + 58 60 74 1 + 58 60 75 1 + 58 60 76 1 + 58 60 77 1 + 58 60 78 1 + 58 60 79 1 + 58 60 80 1 + 58 60 81 1 + 58 60 82 1 + 58 60 83 1 + 58 60 84 1 + 58 60 85 1 + 58 60 86 1 + 58 60 87 1 + 58 60 88 0.752526 + 58 61 38 0.000200097 + 58 61 39 0.873248 + 58 61 40 1 + 58 61 41 1 + 58 61 42 1 + 58 61 43 1 + 58 61 44 1 + 58 61 45 1 + 58 61 46 1 + 58 61 47 1 + 58 61 48 1 + 58 61 49 1 + 58 61 50 1 + 58 61 51 1 + 58 61 52 1 + 58 61 53 1 + 58 61 54 1 + 58 61 55 1 + 58 61 56 1 + 58 61 57 1 + 58 61 58 1 + 58 61 59 1 + 58 61 60 1 + 58 61 61 1 + 58 61 62 1 + 58 61 63 1 + 58 61 64 1 + 58 61 65 1 + 58 61 66 1 + 58 61 67 1 + 58 61 68 1 + 58 61 69 1 + 58 61 70 1 + 58 61 71 1 + 58 61 72 1 + 58 61 73 1 + 58 61 74 1 + 58 61 75 1 + 58 61 76 1 + 58 61 77 1 + 58 61 78 1 + 58 61 79 1 + 58 61 80 1 + 58 61 81 1 + 58 61 82 1 + 58 61 83 1 + 58 61 84 1 + 58 61 85 1 + 58 61 86 1 + 58 61 87 1 + 58 61 88 0.873248 + 58 61 89 0.000200097 + 58 62 38 0.0096893 + 58 62 39 0.944047 + 58 62 40 1 + 58 62 41 1 + 58 62 42 1 + 58 62 43 1 + 58 62 44 1 + 58 62 45 1 + 58 62 46 1 + 58 62 47 1 + 58 62 48 1 + 58 62 49 1 + 58 62 50 1 + 58 62 51 1 + 58 62 52 1 + 58 62 53 1 + 58 62 54 1 + 58 62 55 1 + 58 62 56 1 + 58 62 57 1 + 58 62 58 1 + 58 62 59 1 + 58 62 60 1 + 58 62 61 1 + 58 62 62 1 + 58 62 63 1 + 58 62 64 1 + 58 62 65 1 + 58 62 66 1 + 58 62 67 1 + 58 62 68 1 + 58 62 69 1 + 58 62 70 1 + 58 62 71 1 + 58 62 72 1 + 58 62 73 1 + 58 62 74 1 + 58 62 75 1 + 58 62 76 1 + 58 62 77 1 + 58 62 78 1 + 58 62 79 1 + 58 62 80 1 + 58 62 81 1 + 58 62 82 1 + 58 62 83 1 + 58 62 84 1 + 58 62 85 1 + 58 62 86 1 + 58 62 87 1 + 58 62 88 0.944047 + 58 62 89 0.0096893 + 58 63 38 0.0245266 + 58 63 39 0.969258 + 58 63 40 1 + 58 63 41 1 + 58 63 42 1 + 58 63 43 1 + 58 63 44 1 + 58 63 45 1 + 58 63 46 1 + 58 63 47 1 + 58 63 48 1 + 58 63 49 1 + 58 63 50 1 + 58 63 51 1 + 58 63 52 1 + 58 63 53 1 + 58 63 54 1 + 58 63 55 1 + 58 63 56 1 + 58 63 57 1 + 58 63 58 1 + 58 63 59 1 + 58 63 60 1 + 58 63 61 1 + 58 63 62 1 + 58 63 63 1 + 58 63 64 1 + 58 63 65 1 + 58 63 66 1 + 58 63 67 1 + 58 63 68 1 + 58 63 69 1 + 58 63 70 1 + 58 63 71 1 + 58 63 72 1 + 58 63 73 1 + 58 63 74 1 + 58 63 75 1 + 58 63 76 1 + 58 63 77 1 + 58 63 78 1 + 58 63 79 1 + 58 63 80 1 + 58 63 81 1 + 58 63 82 1 + 58 63 83 1 + 58 63 84 1 + 58 63 85 1 + 58 63 86 1 + 58 63 87 1 + 58 63 88 0.969258 + 58 63 89 0.0245266 + 58 64 38 0.0245266 + 58 64 39 0.969258 + 58 64 40 1 + 58 64 41 1 + 58 64 42 1 + 58 64 43 1 + 58 64 44 1 + 58 64 45 1 + 58 64 46 1 + 58 64 47 1 + 58 64 48 1 + 58 64 49 1 + 58 64 50 1 + 58 64 51 1 + 58 64 52 1 + 58 64 53 1 + 58 64 54 1 + 58 64 55 1 + 58 64 56 1 + 58 64 57 1 + 58 64 58 1 + 58 64 59 1 + 58 64 60 1 + 58 64 61 1 + 58 64 62 1 + 58 64 63 1 + 58 64 64 1 + 58 64 65 1 + 58 64 66 1 + 58 64 67 1 + 58 64 68 1 + 58 64 69 1 + 58 64 70 1 + 58 64 71 1 + 58 64 72 1 + 58 64 73 1 + 58 64 74 1 + 58 64 75 1 + 58 64 76 1 + 58 64 77 1 + 58 64 78 1 + 58 64 79 1 + 58 64 80 1 + 58 64 81 1 + 58 64 82 1 + 58 64 83 1 + 58 64 84 1 + 58 64 85 1 + 58 64 86 1 + 58 64 87 1 + 58 64 88 0.969258 + 58 64 89 0.0245266 + 58 65 38 0.0096893 + 58 65 39 0.944047 + 58 65 40 1 + 58 65 41 1 + 58 65 42 1 + 58 65 43 1 + 58 65 44 1 + 58 65 45 1 + 58 65 46 1 + 58 65 47 1 + 58 65 48 1 + 58 65 49 1 + 58 65 50 1 + 58 65 51 1 + 58 65 52 1 + 58 65 53 1 + 58 65 54 1 + 58 65 55 1 + 58 65 56 1 + 58 65 57 1 + 58 65 58 1 + 58 65 59 1 + 58 65 60 1 + 58 65 61 1 + 58 65 62 1 + 58 65 63 1 + 58 65 64 1 + 58 65 65 1 + 58 65 66 1 + 58 65 67 1 + 58 65 68 1 + 58 65 69 1 + 58 65 70 1 + 58 65 71 1 + 58 65 72 1 + 58 65 73 1 + 58 65 74 1 + 58 65 75 1 + 58 65 76 1 + 58 65 77 1 + 58 65 78 1 + 58 65 79 1 + 58 65 80 1 + 58 65 81 1 + 58 65 82 1 + 58 65 83 1 + 58 65 84 1 + 58 65 85 1 + 58 65 86 1 + 58 65 87 1 + 58 65 88 0.944047 + 58 65 89 0.0096893 + 58 66 38 0.000200097 + 58 66 39 0.873248 + 58 66 40 1 + 58 66 41 1 + 58 66 42 1 + 58 66 43 1 + 58 66 44 1 + 58 66 45 1 + 58 66 46 1 + 58 66 47 1 + 58 66 48 1 + 58 66 49 1 + 58 66 50 1 + 58 66 51 1 + 58 66 52 1 + 58 66 53 1 + 58 66 54 1 + 58 66 55 1 + 58 66 56 1 + 58 66 57 1 + 58 66 58 1 + 58 66 59 1 + 58 66 60 1 + 58 66 61 1 + 58 66 62 1 + 58 66 63 1 + 58 66 64 1 + 58 66 65 1 + 58 66 66 1 + 58 66 67 1 + 58 66 68 1 + 58 66 69 1 + 58 66 70 1 + 58 66 71 1 + 58 66 72 1 + 58 66 73 1 + 58 66 74 1 + 58 66 75 1 + 58 66 76 1 + 58 66 77 1 + 58 66 78 1 + 58 66 79 1 + 58 66 80 1 + 58 66 81 1 + 58 66 82 1 + 58 66 83 1 + 58 66 84 1 + 58 66 85 1 + 58 66 86 1 + 58 66 87 1 + 58 66 88 0.873248 + 58 66 89 0.000200097 + 58 67 39 0.752526 + 58 67 40 1 + 58 67 41 1 + 58 67 42 1 + 58 67 43 1 + 58 67 44 1 + 58 67 45 1 + 58 67 46 1 + 58 67 47 1 + 58 67 48 1 + 58 67 49 1 + 58 67 50 1 + 58 67 51 1 + 58 67 52 1 + 58 67 53 1 + 58 67 54 1 + 58 67 55 1 + 58 67 56 1 + 58 67 57 1 + 58 67 58 1 + 58 67 59 1 + 58 67 60 1 + 58 67 61 1 + 58 67 62 1 + 58 67 63 1 + 58 67 64 1 + 58 67 65 1 + 58 67 66 1 + 58 67 67 1 + 58 67 68 1 + 58 67 69 1 + 58 67 70 1 + 58 67 71 1 + 58 67 72 1 + 58 67 73 1 + 58 67 74 1 + 58 67 75 1 + 58 67 76 1 + 58 67 77 1 + 58 67 78 1 + 58 67 79 1 + 58 67 80 1 + 58 67 81 1 + 58 67 82 1 + 58 67 83 1 + 58 67 84 1 + 58 67 85 1 + 58 67 86 1 + 58 67 87 1 + 58 67 88 0.752526 + 58 68 39 0.590371 + 58 68 40 1 + 58 68 41 1 + 58 68 42 1 + 58 68 43 1 + 58 68 44 1 + 58 68 45 1 + 58 68 46 1 + 58 68 47 1 + 58 68 48 1 + 58 68 49 1 + 58 68 50 1 + 58 68 51 1 + 58 68 52 1 + 58 68 53 1 + 58 68 54 1 + 58 68 55 1 + 58 68 56 1 + 58 68 57 1 + 58 68 58 1 + 58 68 59 1 + 58 68 60 1 + 58 68 61 1 + 58 68 62 1 + 58 68 63 1 + 58 68 64 1 + 58 68 65 1 + 58 68 66 1 + 58 68 67 1 + 58 68 68 1 + 58 68 69 1 + 58 68 70 1 + 58 68 71 1 + 58 68 72 1 + 58 68 73 1 + 58 68 74 1 + 58 68 75 1 + 58 68 76 1 + 58 68 77 1 + 58 68 78 1 + 58 68 79 1 + 58 68 80 1 + 58 68 81 1 + 58 68 82 1 + 58 68 83 1 + 58 68 84 1 + 58 68 85 1 + 58 68 86 1 + 58 68 87 1 + 58 68 88 0.590371 + 58 69 39 0.386161 + 58 69 40 1 + 58 69 41 1 + 58 69 42 1 + 58 69 43 1 + 58 69 44 1 + 58 69 45 1 + 58 69 46 1 + 58 69 47 1 + 58 69 48 1 + 58 69 49 1 + 58 69 50 1 + 58 69 51 1 + 58 69 52 1 + 58 69 53 1 + 58 69 54 1 + 58 69 55 1 + 58 69 56 1 + 58 69 57 1 + 58 69 58 1 + 58 69 59 1 + 58 69 60 1 + 58 69 61 1 + 58 69 62 1 + 58 69 63 1 + 58 69 64 1 + 58 69 65 1 + 58 69 66 1 + 58 69 67 1 + 58 69 68 1 + 58 69 69 1 + 58 69 70 1 + 58 69 71 1 + 58 69 72 1 + 58 69 73 1 + 58 69 74 1 + 58 69 75 1 + 58 69 76 1 + 58 69 77 1 + 58 69 78 1 + 58 69 79 1 + 58 69 80 1 + 58 69 81 1 + 58 69 82 1 + 58 69 83 1 + 58 69 84 1 + 58 69 85 1 + 58 69 86 1 + 58 69 87 1 + 58 69 88 0.386161 + 58 70 39 0.142672 + 58 70 40 0.996155 + 58 70 41 1 + 58 70 42 1 + 58 70 43 1 + 58 70 44 1 + 58 70 45 1 + 58 70 46 1 + 58 70 47 1 + 58 70 48 1 + 58 70 49 1 + 58 70 50 1 + 58 70 51 1 + 58 70 52 1 + 58 70 53 1 + 58 70 54 1 + 58 70 55 1 + 58 70 56 1 + 58 70 57 1 + 58 70 58 1 + 58 70 59 1 + 58 70 60 1 + 58 70 61 1 + 58 70 62 1 + 58 70 63 1 + 58 70 64 1 + 58 70 65 1 + 58 70 66 1 + 58 70 67 1 + 58 70 68 1 + 58 70 69 1 + 58 70 70 1 + 58 70 71 1 + 58 70 72 1 + 58 70 73 1 + 58 70 74 1 + 58 70 75 1 + 58 70 76 1 + 58 70 77 1 + 58 70 78 1 + 58 70 79 1 + 58 70 80 1 + 58 70 81 1 + 58 70 82 1 + 58 70 83 1 + 58 70 84 1 + 58 70 85 1 + 58 70 86 1 + 58 70 87 0.996155 + 58 70 88 0.142672 + 58 71 39 0.00366907 + 58 71 40 0.843357 + 58 71 41 1 + 58 71 42 1 + 58 71 43 1 + 58 71 44 1 + 58 71 45 1 + 58 71 46 1 + 58 71 47 1 + 58 71 48 1 + 58 71 49 1 + 58 71 50 1 + 58 71 51 1 + 58 71 52 1 + 58 71 53 1 + 58 71 54 1 + 58 71 55 1 + 58 71 56 1 + 58 71 57 1 + 58 71 58 1 + 58 71 59 1 + 58 71 60 1 + 58 71 61 1 + 58 71 62 1 + 58 71 63 1 + 58 71 64 1 + 58 71 65 1 + 58 71 66 1 + 58 71 67 1 + 58 71 68 1 + 58 71 69 1 + 58 71 70 1 + 58 71 71 1 + 58 71 72 1 + 58 71 73 1 + 58 71 74 1 + 58 71 75 1 + 58 71 76 1 + 58 71 77 1 + 58 71 78 1 + 58 71 79 1 + 58 71 80 1 + 58 71 81 1 + 58 71 82 1 + 58 71 83 1 + 58 71 84 1 + 58 71 85 1 + 58 71 86 1 + 58 71 87 0.843357 + 58 71 88 0.00366907 + 58 72 40 0.509102 + 58 72 41 1 + 58 72 42 1 + 58 72 43 1 + 58 72 44 1 + 58 72 45 1 + 58 72 46 1 + 58 72 47 1 + 58 72 48 1 + 58 72 49 1 + 58 72 50 1 + 58 72 51 1 + 58 72 52 1 + 58 72 53 1 + 58 72 54 1 + 58 72 55 1 + 58 72 56 1 + 58 72 57 1 + 58 72 58 1 + 58 72 59 1 + 58 72 60 1 + 58 72 61 1 + 58 72 62 1 + 58 72 63 1 + 58 72 64 1 + 58 72 65 1 + 58 72 66 1 + 58 72 67 1 + 58 72 68 1 + 58 72 69 1 + 58 72 70 1 + 58 72 71 1 + 58 72 72 1 + 58 72 73 1 + 58 72 74 1 + 58 72 75 1 + 58 72 76 1 + 58 72 77 1 + 58 72 78 1 + 58 72 79 1 + 58 72 80 1 + 58 72 81 1 + 58 72 82 1 + 58 72 83 1 + 58 72 84 1 + 58 72 85 1 + 58 72 86 1 + 58 72 87 0.509102 + 58 73 40 0.137253 + 58 73 41 0.985777 + 58 73 42 1 + 58 73 43 1 + 58 73 44 1 + 58 73 45 1 + 58 73 46 1 + 58 73 47 1 + 58 73 48 1 + 58 73 49 1 + 58 73 50 1 + 58 73 51 1 + 58 73 52 1 + 58 73 53 1 + 58 73 54 1 + 58 73 55 1 + 58 73 56 1 + 58 73 57 1 + 58 73 58 1 + 58 73 59 1 + 58 73 60 1 + 58 73 61 1 + 58 73 62 1 + 58 73 63 1 + 58 73 64 1 + 58 73 65 1 + 58 73 66 1 + 58 73 67 1 + 58 73 68 1 + 58 73 69 1 + 58 73 70 1 + 58 73 71 1 + 58 73 72 1 + 58 73 73 1 + 58 73 74 1 + 58 73 75 1 + 58 73 76 1 + 58 73 77 1 + 58 73 78 1 + 58 73 79 1 + 58 73 80 1 + 58 73 81 1 + 58 73 82 1 + 58 73 83 1 + 58 73 84 1 + 58 73 85 1 + 58 73 86 0.985777 + 58 73 87 0.137253 + 58 74 40 4.51737e-05 + 58 74 41 0.686307 + 58 74 42 1 + 58 74 43 1 + 58 74 44 1 + 58 74 45 1 + 58 74 46 1 + 58 74 47 1 + 58 74 48 1 + 58 74 49 1 + 58 74 50 1 + 58 74 51 1 + 58 74 52 1 + 58 74 53 1 + 58 74 54 1 + 58 74 55 1 + 58 74 56 1 + 58 74 57 1 + 58 74 58 1 + 58 74 59 1 + 58 74 60 1 + 58 74 61 1 + 58 74 62 1 + 58 74 63 1 + 58 74 64 1 + 58 74 65 1 + 58 74 66 1 + 58 74 67 1 + 58 74 68 1 + 58 74 69 1 + 58 74 70 1 + 58 74 71 1 + 58 74 72 1 + 58 74 73 1 + 58 74 74 1 + 58 74 75 1 + 58 74 76 1 + 58 74 77 1 + 58 74 78 1 + 58 74 79 1 + 58 74 80 1 + 58 74 81 1 + 58 74 82 1 + 58 74 83 1 + 58 74 84 1 + 58 74 85 1 + 58 74 86 0.686307 + 58 74 87 4.51737e-05 + 58 75 41 0.204921 + 58 75 42 0.991156 + 58 75 43 1 + 58 75 44 1 + 58 75 45 1 + 58 75 46 1 + 58 75 47 1 + 58 75 48 1 + 58 75 49 1 + 58 75 50 1 + 58 75 51 1 + 58 75 52 1 + 58 75 53 1 + 58 75 54 1 + 58 75 55 1 + 58 75 56 1 + 58 75 57 1 + 58 75 58 1 + 58 75 59 1 + 58 75 60 1 + 58 75 61 1 + 58 75 62 1 + 58 75 63 1 + 58 75 64 1 + 58 75 65 1 + 58 75 66 1 + 58 75 67 1 + 58 75 68 1 + 58 75 69 1 + 58 75 70 1 + 58 75 71 1 + 58 75 72 1 + 58 75 73 1 + 58 75 74 1 + 58 75 75 1 + 58 75 76 1 + 58 75 77 1 + 58 75 78 1 + 58 75 79 1 + 58 75 80 1 + 58 75 81 1 + 58 75 82 1 + 58 75 83 1 + 58 75 84 1 + 58 75 85 0.991156 + 58 75 86 0.204921 + 58 76 41 0.000204528 + 58 76 42 0.648356 + 58 76 43 1 + 58 76 44 1 + 58 76 45 1 + 58 76 46 1 + 58 76 47 1 + 58 76 48 1 + 58 76 49 1 + 58 76 50 1 + 58 76 51 1 + 58 76 52 1 + 58 76 53 1 + 58 76 54 1 + 58 76 55 1 + 58 76 56 1 + 58 76 57 1 + 58 76 58 1 + 58 76 59 1 + 58 76 60 1 + 58 76 61 1 + 58 76 62 1 + 58 76 63 1 + 58 76 64 1 + 58 76 65 1 + 58 76 66 1 + 58 76 67 1 + 58 76 68 1 + 58 76 69 1 + 58 76 70 1 + 58 76 71 1 + 58 76 72 1 + 58 76 73 1 + 58 76 74 1 + 58 76 75 1 + 58 76 76 1 + 58 76 77 1 + 58 76 78 1 + 58 76 79 1 + 58 76 80 1 + 58 76 81 1 + 58 76 82 1 + 58 76 83 1 + 58 76 84 1 + 58 76 85 0.648356 + 58 76 86 0.000204528 + 58 77 42 0.105685 + 58 77 43 0.933643 + 58 77 44 1 + 58 77 45 1 + 58 77 46 1 + 58 77 47 1 + 58 77 48 1 + 58 77 49 1 + 58 77 50 1 + 58 77 51 1 + 58 77 52 1 + 58 77 53 1 + 58 77 54 1 + 58 77 55 1 + 58 77 56 1 + 58 77 57 1 + 58 77 58 1 + 58 77 59 1 + 58 77 60 1 + 58 77 61 1 + 58 77 62 1 + 58 77 63 1 + 58 77 64 1 + 58 77 65 1 + 58 77 66 1 + 58 77 67 1 + 58 77 68 1 + 58 77 69 1 + 58 77 70 1 + 58 77 71 1 + 58 77 72 1 + 58 77 73 1 + 58 77 74 1 + 58 77 75 1 + 58 77 76 1 + 58 77 77 1 + 58 77 78 1 + 58 77 79 1 + 58 77 80 1 + 58 77 81 1 + 58 77 82 1 + 58 77 83 1 + 58 77 84 0.933643 + 58 77 85 0.105685 + 58 78 43 0.364963 + 58 78 44 0.99787 + 58 78 45 1 + 58 78 46 1 + 58 78 47 1 + 58 78 48 1 + 58 78 49 1 + 58 78 50 1 + 58 78 51 1 + 58 78 52 1 + 58 78 53 1 + 58 78 54 1 + 58 78 55 1 + 58 78 56 1 + 58 78 57 1 + 58 78 58 1 + 58 78 59 1 + 58 78 60 1 + 58 78 61 1 + 58 78 62 1 + 58 78 63 1 + 58 78 64 1 + 58 78 65 1 + 58 78 66 1 + 58 78 67 1 + 58 78 68 1 + 58 78 69 1 + 58 78 70 1 + 58 78 71 1 + 58 78 72 1 + 58 78 73 1 + 58 78 74 1 + 58 78 75 1 + 58 78 76 1 + 58 78 77 1 + 58 78 78 1 + 58 78 79 1 + 58 78 80 1 + 58 78 81 1 + 58 78 82 1 + 58 78 83 0.99787 + 58 78 84 0.364963 + 58 79 43 0.00207515 + 58 79 44 0.610031 + 58 79 45 1 + 58 79 46 1 + 58 79 47 1 + 58 79 48 1 + 58 79 49 1 + 58 79 50 1 + 58 79 51 1 + 58 79 52 1 + 58 79 53 1 + 58 79 54 1 + 58 79 55 1 + 58 79 56 1 + 58 79 57 1 + 58 79 58 1 + 58 79 59 1 + 58 79 60 1 + 58 79 61 1 + 58 79 62 1 + 58 79 63 1 + 58 79 64 1 + 58 79 65 1 + 58 79 66 1 + 58 79 67 1 + 58 79 68 1 + 58 79 69 1 + 58 79 70 1 + 58 79 71 1 + 58 79 72 1 + 58 79 73 1 + 58 79 74 1 + 58 79 75 1 + 58 79 76 1 + 58 79 77 1 + 58 79 78 1 + 58 79 79 1 + 58 79 80 1 + 58 79 81 1 + 58 79 82 1 + 58 79 83 0.610031 + 58 79 84 0.00207515 + 58 80 44 0.0302985 + 58 80 45 0.747928 + 58 80 46 1 + 58 80 47 1 + 58 80 48 1 + 58 80 49 1 + 58 80 50 1 + 58 80 51 1 + 58 80 52 1 + 58 80 53 1 + 58 80 54 1 + 58 80 55 1 + 58 80 56 1 + 58 80 57 1 + 58 80 58 1 + 58 80 59 1 + 58 80 60 1 + 58 80 61 1 + 58 80 62 1 + 58 80 63 1 + 58 80 64 1 + 58 80 65 1 + 58 80 66 1 + 58 80 67 1 + 58 80 68 1 + 58 80 69 1 + 58 80 70 1 + 58 80 71 1 + 58 80 72 1 + 58 80 73 1 + 58 80 74 1 + 58 80 75 1 + 58 80 76 1 + 58 80 77 1 + 58 80 78 1 + 58 80 79 1 + 58 80 80 1 + 58 80 81 1 + 58 80 82 0.747928 + 58 80 83 0.0302985 + 58 81 45 0.0622884 + 58 81 46 0.787228 + 58 81 47 1 + 58 81 48 1 + 58 81 49 1 + 58 81 50 1 + 58 81 51 1 + 58 81 52 1 + 58 81 53 1 + 58 81 54 1 + 58 81 55 1 + 58 81 56 1 + 58 81 57 1 + 58 81 58 1 + 58 81 59 1 + 58 81 60 1 + 58 81 61 1 + 58 81 62 1 + 58 81 63 1 + 58 81 64 1 + 58 81 65 1 + 58 81 66 1 + 58 81 67 1 + 58 81 68 1 + 58 81 69 1 + 58 81 70 1 + 58 81 71 1 + 58 81 72 1 + 58 81 73 1 + 58 81 74 1 + 58 81 75 1 + 58 81 76 1 + 58 81 77 1 + 58 81 78 1 + 58 81 79 1 + 58 81 80 1 + 58 81 81 0.787228 + 58 81 82 0.0622884 + 58 82 46 0.0622884 + 58 82 47 0.747928 + 58 82 48 1 + 58 82 49 1 + 58 82 50 1 + 58 82 51 1 + 58 82 52 1 + 58 82 53 1 + 58 82 54 1 + 58 82 55 1 + 58 82 56 1 + 58 82 57 1 + 58 82 58 1 + 58 82 59 1 + 58 82 60 1 + 58 82 61 1 + 58 82 62 1 + 58 82 63 1 + 58 82 64 1 + 58 82 65 1 + 58 82 66 1 + 58 82 67 1 + 58 82 68 1 + 58 82 69 1 + 58 82 70 1 + 58 82 71 1 + 58 82 72 1 + 58 82 73 1 + 58 82 74 1 + 58 82 75 1 + 58 82 76 1 + 58 82 77 1 + 58 82 78 1 + 58 82 79 1 + 58 82 80 0.747928 + 58 82 81 0.0622884 + 58 83 47 0.0302985 + 58 83 48 0.610031 + 58 83 49 0.99787 + 58 83 50 1 + 58 83 51 1 + 58 83 52 1 + 58 83 53 1 + 58 83 54 1 + 58 83 55 1 + 58 83 56 1 + 58 83 57 1 + 58 83 58 1 + 58 83 59 1 + 58 83 60 1 + 58 83 61 1 + 58 83 62 1 + 58 83 63 1 + 58 83 64 1 + 58 83 65 1 + 58 83 66 1 + 58 83 67 1 + 58 83 68 1 + 58 83 69 1 + 58 83 70 1 + 58 83 71 1 + 58 83 72 1 + 58 83 73 1 + 58 83 74 1 + 58 83 75 1 + 58 83 76 1 + 58 83 77 1 + 58 83 78 0.99787 + 58 83 79 0.610031 + 58 83 80 0.0302985 + 58 84 48 0.00207515 + 58 84 49 0.364963 + 58 84 50 0.933643 + 58 84 51 1 + 58 84 52 1 + 58 84 53 1 + 58 84 54 1 + 58 84 55 1 + 58 84 56 1 + 58 84 57 1 + 58 84 58 1 + 58 84 59 1 + 58 84 60 1 + 58 84 61 1 + 58 84 62 1 + 58 84 63 1 + 58 84 64 1 + 58 84 65 1 + 58 84 66 1 + 58 84 67 1 + 58 84 68 1 + 58 84 69 1 + 58 84 70 1 + 58 84 71 1 + 58 84 72 1 + 58 84 73 1 + 58 84 74 1 + 58 84 75 1 + 58 84 76 1 + 58 84 77 0.933643 + 58 84 78 0.364963 + 58 84 79 0.00207515 + 58 85 50 0.105685 + 58 85 51 0.648356 + 58 85 52 0.991156 + 58 85 53 1 + 58 85 54 1 + 58 85 55 1 + 58 85 56 1 + 58 85 57 1 + 58 85 58 1 + 58 85 59 1 + 58 85 60 1 + 58 85 61 1 + 58 85 62 1 + 58 85 63 1 + 58 85 64 1 + 58 85 65 1 + 58 85 66 1 + 58 85 67 1 + 58 85 68 1 + 58 85 69 1 + 58 85 70 1 + 58 85 71 1 + 58 85 72 1 + 58 85 73 1 + 58 85 74 1 + 58 85 75 0.991156 + 58 85 76 0.648356 + 58 85 77 0.105685 + 58 86 51 0.000204528 + 58 86 52 0.204921 + 58 86 53 0.686307 + 58 86 54 0.985777 + 58 86 55 1 + 58 86 56 1 + 58 86 57 1 + 58 86 58 1 + 58 86 59 1 + 58 86 60 1 + 58 86 61 1 + 58 86 62 1 + 58 86 63 1 + 58 86 64 1 + 58 86 65 1 + 58 86 66 1 + 58 86 67 1 + 58 86 68 1 + 58 86 69 1 + 58 86 70 1 + 58 86 71 1 + 58 86 72 1 + 58 86 73 0.985777 + 58 86 74 0.686307 + 58 86 75 0.204921 + 58 86 76 0.000204528 + 58 87 53 4.51737e-05 + 58 87 54 0.137253 + 58 87 55 0.509102 + 58 87 56 0.843357 + 58 87 57 0.996155 + 58 87 58 1 + 58 87 59 1 + 58 87 60 1 + 58 87 61 1 + 58 87 62 1 + 58 87 63 1 + 58 87 64 1 + 58 87 65 1 + 58 87 66 1 + 58 87 67 1 + 58 87 68 1 + 58 87 69 1 + 58 87 70 0.996155 + 58 87 71 0.843357 + 58 87 72 0.509102 + 58 87 73 0.137253 + 58 87 74 4.51737e-05 + 58 88 56 0.00366907 + 58 88 57 0.142672 + 58 88 58 0.386161 + 58 88 59 0.590371 + 58 88 60 0.752526 + 58 88 61 0.873248 + 58 88 62 0.944047 + 58 88 63 0.969258 + 58 88 64 0.969258 + 58 88 65 0.944047 + 58 88 66 0.873248 + 58 88 67 0.752526 + 58 88 68 0.590371 + 58 88 69 0.386161 + 58 88 70 0.142672 + 58 88 71 0.00366907 + 58 89 61 0.000200097 + 58 89 62 0.0096893 + 58 89 63 0.0245266 + 58 89 64 0.0245266 + 58 89 65 0.0096893 + 58 89 66 0.000200097 + 59 38 60 0.00961546 + 59 38 61 0.0765779 + 59 38 62 0.153337 + 59 38 63 0.193067 + 59 38 64 0.193067 + 59 38 65 0.153337 + 59 38 66 0.0765779 + 59 38 67 0.00961546 + 59 39 56 0.0767609 + 59 39 57 0.345113 + 59 39 58 0.590371 + 59 39 59 0.792899 + 59 39 60 0.944121 + 59 39 61 0.99711 + 59 39 62 1 + 59 39 63 1 + 59 39 64 1 + 59 39 65 1 + 59 39 66 0.99711 + 59 39 67 0.944121 + 59 39 68 0.792899 + 59 39 69 0.590371 + 59 39 70 0.345113 + 59 39 71 0.0767609 + 59 40 53 0.0230554 + 59 40 54 0.338304 + 59 40 55 0.720869 + 59 40 56 0.979056 + 59 40 57 1 + 59 40 58 1 + 59 40 59 1 + 59 40 60 1 + 59 40 61 1 + 59 40 62 1 + 59 40 63 1 + 59 40 64 1 + 59 40 65 1 + 59 40 66 1 + 59 40 67 1 + 59 40 68 1 + 59 40 69 1 + 59 40 70 1 + 59 40 71 0.979056 + 59 40 72 0.720869 + 59 40 73 0.338304 + 59 40 74 0.0230554 + 59 41 51 0.0262369 + 59 41 52 0.42026 + 59 41 53 0.882677 + 59 41 54 1 + 59 41 55 1 + 59 41 56 1 + 59 41 57 1 + 59 41 58 1 + 59 41 59 1 + 59 41 60 1 + 59 41 61 1 + 59 41 62 1 + 59 41 63 1 + 59 41 64 1 + 59 41 65 1 + 59 41 66 1 + 59 41 67 1 + 59 41 68 1 + 59 41 69 1 + 59 41 70 1 + 59 41 71 1 + 59 41 72 1 + 59 41 73 1 + 59 41 74 0.882677 + 59 41 75 0.42026 + 59 41 76 0.0262369 + 59 42 49 0.000228244 + 59 42 50 0.28004 + 59 42 51 0.852122 + 59 42 52 1 + 59 42 53 1 + 59 42 54 1 + 59 42 55 1 + 59 42 56 1 + 59 42 57 1 + 59 42 58 1 + 59 42 59 1 + 59 42 60 1 + 59 42 61 1 + 59 42 62 1 + 59 42 63 1 + 59 42 64 1 + 59 42 65 1 + 59 42 66 1 + 59 42 67 1 + 59 42 68 1 + 59 42 69 1 + 59 42 70 1 + 59 42 71 1 + 59 42 72 1 + 59 42 73 1 + 59 42 74 1 + 59 42 75 1 + 59 42 76 0.852122 + 59 42 77 0.28004 + 59 42 78 0.000228244 + 59 43 48 0.0441313 + 59 43 49 0.606763 + 59 43 50 0.995674 + 59 43 51 1 + 59 43 52 1 + 59 43 53 1 + 59 43 54 1 + 59 43 55 1 + 59 43 56 1 + 59 43 57 1 + 59 43 58 1 + 59 43 59 1 + 59 43 60 1 + 59 43 61 1 + 59 43 62 1 + 59 43 63 1 + 59 43 64 1 + 59 43 65 1 + 59 43 66 1 + 59 43 67 1 + 59 43 68 1 + 59 43 69 1 + 59 43 70 1 + 59 43 71 1 + 59 43 72 1 + 59 43 73 1 + 59 43 74 1 + 59 43 75 1 + 59 43 76 1 + 59 43 77 0.995674 + 59 43 78 0.606763 + 59 43 79 0.0441313 + 59 44 47 0.133628 + 59 44 48 0.821374 + 59 44 49 1 + 59 44 50 1 + 59 44 51 1 + 59 44 52 1 + 59 44 53 1 + 59 44 54 1 + 59 44 55 1 + 59 44 56 1 + 59 44 57 1 + 59 44 58 1 + 59 44 59 1 + 59 44 60 1 + 59 44 61 1 + 59 44 62 1 + 59 44 63 1 + 59 44 64 1 + 59 44 65 1 + 59 44 66 1 + 59 44 67 1 + 59 44 68 1 + 59 44 69 1 + 59 44 70 1 + 59 44 71 1 + 59 44 72 1 + 59 44 73 1 + 59 44 74 1 + 59 44 75 1 + 59 44 76 1 + 59 44 77 1 + 59 44 78 1 + 59 44 79 0.821374 + 59 44 80 0.133628 + 59 45 46 0.196147 + 59 45 47 0.909115 + 59 45 48 1 + 59 45 49 1 + 59 45 50 1 + 59 45 51 1 + 59 45 52 1 + 59 45 53 1 + 59 45 54 1 + 59 45 55 1 + 59 45 56 1 + 59 45 57 1 + 59 45 58 1 + 59 45 59 1 + 59 45 60 1 + 59 45 61 1 + 59 45 62 1 + 59 45 63 1 + 59 45 64 1 + 59 45 65 1 + 59 45 66 1 + 59 45 67 1 + 59 45 68 1 + 59 45 69 1 + 59 45 70 1 + 59 45 71 1 + 59 45 72 1 + 59 45 73 1 + 59 45 74 1 + 59 45 75 1 + 59 45 76 1 + 59 45 77 1 + 59 45 78 1 + 59 45 79 1 + 59 45 80 0.909115 + 59 45 81 0.196147 + 59 46 45 0.196147 + 59 46 46 0.931469 + 59 46 47 1 + 59 46 48 1 + 59 46 49 1 + 59 46 50 1 + 59 46 51 1 + 59 46 52 1 + 59 46 53 1 + 59 46 54 1 + 59 46 55 1 + 59 46 56 1 + 59 46 57 1 + 59 46 58 1 + 59 46 59 1 + 59 46 60 1 + 59 46 61 1 + 59 46 62 1 + 59 46 63 1 + 59 46 64 1 + 59 46 65 1 + 59 46 66 1 + 59 46 67 1 + 59 46 68 1 + 59 46 69 1 + 59 46 70 1 + 59 46 71 1 + 59 46 72 1 + 59 46 73 1 + 59 46 74 1 + 59 46 75 1 + 59 46 76 1 + 59 46 77 1 + 59 46 78 1 + 59 46 79 1 + 59 46 80 1 + 59 46 81 0.931469 + 59 46 82 0.196147 + 59 47 44 0.133628 + 59 47 45 0.909115 + 59 47 46 1 + 59 47 47 1 + 59 47 48 1 + 59 47 49 1 + 59 47 50 1 + 59 47 51 1 + 59 47 52 1 + 59 47 53 1 + 59 47 54 1 + 59 47 55 1 + 59 47 56 1 + 59 47 57 1 + 59 47 58 1 + 59 47 59 1 + 59 47 60 1 + 59 47 61 1 + 59 47 62 1 + 59 47 63 1 + 59 47 64 1 + 59 47 65 1 + 59 47 66 1 + 59 47 67 1 + 59 47 68 1 + 59 47 69 1 + 59 47 70 1 + 59 47 71 1 + 59 47 72 1 + 59 47 73 1 + 59 47 74 1 + 59 47 75 1 + 59 47 76 1 + 59 47 77 1 + 59 47 78 1 + 59 47 79 1 + 59 47 80 1 + 59 47 81 1 + 59 47 82 0.909115 + 59 47 83 0.133628 + 59 48 43 0.0441313 + 59 48 44 0.821374 + 59 48 45 1 + 59 48 46 1 + 59 48 47 1 + 59 48 48 1 + 59 48 49 1 + 59 48 50 1 + 59 48 51 1 + 59 48 52 1 + 59 48 53 1 + 59 48 54 1 + 59 48 55 1 + 59 48 56 1 + 59 48 57 1 + 59 48 58 1 + 59 48 59 1 + 59 48 60 1 + 59 48 61 1 + 59 48 62 1 + 59 48 63 1 + 59 48 64 1 + 59 48 65 1 + 59 48 66 1 + 59 48 67 1 + 59 48 68 1 + 59 48 69 1 + 59 48 70 1 + 59 48 71 1 + 59 48 72 1 + 59 48 73 1 + 59 48 74 1 + 59 48 75 1 + 59 48 76 1 + 59 48 77 1 + 59 48 78 1 + 59 48 79 1 + 59 48 80 1 + 59 48 81 1 + 59 48 82 1 + 59 48 83 0.821374 + 59 48 84 0.0441313 + 59 49 42 0.000228244 + 59 49 43 0.606763 + 59 49 44 1 + 59 49 45 1 + 59 49 46 1 + 59 49 47 1 + 59 49 48 1 + 59 49 49 1 + 59 49 50 1 + 59 49 51 1 + 59 49 52 1 + 59 49 53 1 + 59 49 54 1 + 59 49 55 1 + 59 49 56 1 + 59 49 57 1 + 59 49 58 1 + 59 49 59 1 + 59 49 60 1 + 59 49 61 1 + 59 49 62 1 + 59 49 63 1 + 59 49 64 1 + 59 49 65 1 + 59 49 66 1 + 59 49 67 1 + 59 49 68 1 + 59 49 69 1 + 59 49 70 1 + 59 49 71 1 + 59 49 72 1 + 59 49 73 1 + 59 49 74 1 + 59 49 75 1 + 59 49 76 1 + 59 49 77 1 + 59 49 78 1 + 59 49 79 1 + 59 49 80 1 + 59 49 81 1 + 59 49 82 1 + 59 49 83 1 + 59 49 84 0.606763 + 59 49 85 0.000228244 + 59 50 42 0.28004 + 59 50 43 0.995674 + 59 50 44 1 + 59 50 45 1 + 59 50 46 1 + 59 50 47 1 + 59 50 48 1 + 59 50 49 1 + 59 50 50 1 + 59 50 51 1 + 59 50 52 1 + 59 50 53 1 + 59 50 54 1 + 59 50 55 1 + 59 50 56 1 + 59 50 57 1 + 59 50 58 1 + 59 50 59 1 + 59 50 60 1 + 59 50 61 1 + 59 50 62 1 + 59 50 63 1 + 59 50 64 1 + 59 50 65 1 + 59 50 66 1 + 59 50 67 1 + 59 50 68 1 + 59 50 69 1 + 59 50 70 1 + 59 50 71 1 + 59 50 72 1 + 59 50 73 1 + 59 50 74 1 + 59 50 75 1 + 59 50 76 1 + 59 50 77 1 + 59 50 78 1 + 59 50 79 1 + 59 50 80 1 + 59 50 81 1 + 59 50 82 1 + 59 50 83 1 + 59 50 84 0.995674 + 59 50 85 0.28004 + 59 51 41 0.0262369 + 59 51 42 0.852122 + 59 51 43 1 + 59 51 44 1 + 59 51 45 1 + 59 51 46 1 + 59 51 47 1 + 59 51 48 1 + 59 51 49 1 + 59 51 50 1 + 59 51 51 1 + 59 51 52 1 + 59 51 53 1 + 59 51 54 1 + 59 51 55 1 + 59 51 56 1 + 59 51 57 1 + 59 51 58 1 + 59 51 59 1 + 59 51 60 1 + 59 51 61 1 + 59 51 62 1 + 59 51 63 1 + 59 51 64 1 + 59 51 65 1 + 59 51 66 1 + 59 51 67 1 + 59 51 68 1 + 59 51 69 1 + 59 51 70 1 + 59 51 71 1 + 59 51 72 1 + 59 51 73 1 + 59 51 74 1 + 59 51 75 1 + 59 51 76 1 + 59 51 77 1 + 59 51 78 1 + 59 51 79 1 + 59 51 80 1 + 59 51 81 1 + 59 51 82 1 + 59 51 83 1 + 59 51 84 1 + 59 51 85 0.852122 + 59 51 86 0.0262369 + 59 52 41 0.42026 + 59 52 42 1 + 59 52 43 1 + 59 52 44 1 + 59 52 45 1 + 59 52 46 1 + 59 52 47 1 + 59 52 48 1 + 59 52 49 1 + 59 52 50 1 + 59 52 51 1 + 59 52 52 1 + 59 52 53 1 + 59 52 54 1 + 59 52 55 1 + 59 52 56 1 + 59 52 57 1 + 59 52 58 1 + 59 52 59 1 + 59 52 60 1 + 59 52 61 1 + 59 52 62 1 + 59 52 63 1 + 59 52 64 1 + 59 52 65 1 + 59 52 66 1 + 59 52 67 1 + 59 52 68 1 + 59 52 69 1 + 59 52 70 1 + 59 52 71 1 + 59 52 72 1 + 59 52 73 1 + 59 52 74 1 + 59 52 75 1 + 59 52 76 1 + 59 52 77 1 + 59 52 78 1 + 59 52 79 1 + 59 52 80 1 + 59 52 81 1 + 59 52 82 1 + 59 52 83 1 + 59 52 84 1 + 59 52 85 1 + 59 52 86 0.42026 + 59 53 40 0.0230554 + 59 53 41 0.882677 + 59 53 42 1 + 59 53 43 1 + 59 53 44 1 + 59 53 45 1 + 59 53 46 1 + 59 53 47 1 + 59 53 48 1 + 59 53 49 1 + 59 53 50 1 + 59 53 51 1 + 59 53 52 1 + 59 53 53 1 + 59 53 54 1 + 59 53 55 1 + 59 53 56 1 + 59 53 57 1 + 59 53 58 1 + 59 53 59 1 + 59 53 60 1 + 59 53 61 1 + 59 53 62 1 + 59 53 63 1 + 59 53 64 1 + 59 53 65 1 + 59 53 66 1 + 59 53 67 1 + 59 53 68 1 + 59 53 69 1 + 59 53 70 1 + 59 53 71 1 + 59 53 72 1 + 59 53 73 1 + 59 53 74 1 + 59 53 75 1 + 59 53 76 1 + 59 53 77 1 + 59 53 78 1 + 59 53 79 1 + 59 53 80 1 + 59 53 81 1 + 59 53 82 1 + 59 53 83 1 + 59 53 84 1 + 59 53 85 1 + 59 53 86 0.882677 + 59 53 87 0.0230554 + 59 54 40 0.338304 + 59 54 41 1 + 59 54 42 1 + 59 54 43 1 + 59 54 44 1 + 59 54 45 1 + 59 54 46 1 + 59 54 47 1 + 59 54 48 1 + 59 54 49 1 + 59 54 50 1 + 59 54 51 1 + 59 54 52 1 + 59 54 53 1 + 59 54 54 1 + 59 54 55 1 + 59 54 56 1 + 59 54 57 1 + 59 54 58 1 + 59 54 59 1 + 59 54 60 1 + 59 54 61 1 + 59 54 62 1 + 59 54 63 1 + 59 54 64 1 + 59 54 65 1 + 59 54 66 1 + 59 54 67 1 + 59 54 68 1 + 59 54 69 1 + 59 54 70 1 + 59 54 71 1 + 59 54 72 1 + 59 54 73 1 + 59 54 74 1 + 59 54 75 1 + 59 54 76 1 + 59 54 77 1 + 59 54 78 1 + 59 54 79 1 + 59 54 80 1 + 59 54 81 1 + 59 54 82 1 + 59 54 83 1 + 59 54 84 1 + 59 54 85 1 + 59 54 86 1 + 59 54 87 0.338304 + 59 55 40 0.720869 + 59 55 41 1 + 59 55 42 1 + 59 55 43 1 + 59 55 44 1 + 59 55 45 1 + 59 55 46 1 + 59 55 47 1 + 59 55 48 1 + 59 55 49 1 + 59 55 50 1 + 59 55 51 1 + 59 55 52 1 + 59 55 53 1 + 59 55 54 1 + 59 55 55 1 + 59 55 56 1 + 59 55 57 1 + 59 55 58 1 + 59 55 59 1 + 59 55 60 1 + 59 55 61 1 + 59 55 62 1 + 59 55 63 1 + 59 55 64 1 + 59 55 65 1 + 59 55 66 1 + 59 55 67 1 + 59 55 68 1 + 59 55 69 1 + 59 55 70 1 + 59 55 71 1 + 59 55 72 1 + 59 55 73 1 + 59 55 74 1 + 59 55 75 1 + 59 55 76 1 + 59 55 77 1 + 59 55 78 1 + 59 55 79 1 + 59 55 80 1 + 59 55 81 1 + 59 55 82 1 + 59 55 83 1 + 59 55 84 1 + 59 55 85 1 + 59 55 86 1 + 59 55 87 0.720869 + 59 56 39 0.0767609 + 59 56 40 0.979056 + 59 56 41 1 + 59 56 42 1 + 59 56 43 1 + 59 56 44 1 + 59 56 45 1 + 59 56 46 1 + 59 56 47 1 + 59 56 48 1 + 59 56 49 1 + 59 56 50 1 + 59 56 51 1 + 59 56 52 1 + 59 56 53 1 + 59 56 54 1 + 59 56 55 1 + 59 56 56 1 + 59 56 57 1 + 59 56 58 1 + 59 56 59 1 + 59 56 60 1 + 59 56 61 1 + 59 56 62 1 + 59 56 63 1 + 59 56 64 1 + 59 56 65 1 + 59 56 66 1 + 59 56 67 1 + 59 56 68 1 + 59 56 69 1 + 59 56 70 1 + 59 56 71 1 + 59 56 72 1 + 59 56 73 1 + 59 56 74 1 + 59 56 75 1 + 59 56 76 1 + 59 56 77 1 + 59 56 78 1 + 59 56 79 1 + 59 56 80 1 + 59 56 81 1 + 59 56 82 1 + 59 56 83 1 + 59 56 84 1 + 59 56 85 1 + 59 56 86 1 + 59 56 87 0.979056 + 59 56 88 0.0767609 + 59 57 39 0.345113 + 59 57 40 1 + 59 57 41 1 + 59 57 42 1 + 59 57 43 1 + 59 57 44 1 + 59 57 45 1 + 59 57 46 1 + 59 57 47 1 + 59 57 48 1 + 59 57 49 1 + 59 57 50 1 + 59 57 51 1 + 59 57 52 1 + 59 57 53 1 + 59 57 54 1 + 59 57 55 1 + 59 57 56 1 + 59 57 57 1 + 59 57 58 1 + 59 57 59 1 + 59 57 60 1 + 59 57 61 1 + 59 57 62 1 + 59 57 63 1 + 59 57 64 1 + 59 57 65 1 + 59 57 66 1 + 59 57 67 1 + 59 57 68 1 + 59 57 69 1 + 59 57 70 1 + 59 57 71 1 + 59 57 72 1 + 59 57 73 1 + 59 57 74 1 + 59 57 75 1 + 59 57 76 1 + 59 57 77 1 + 59 57 78 1 + 59 57 79 1 + 59 57 80 1 + 59 57 81 1 + 59 57 82 1 + 59 57 83 1 + 59 57 84 1 + 59 57 85 1 + 59 57 86 1 + 59 57 87 1 + 59 57 88 0.345113 + 59 58 39 0.590371 + 59 58 40 1 + 59 58 41 1 + 59 58 42 1 + 59 58 43 1 + 59 58 44 1 + 59 58 45 1 + 59 58 46 1 + 59 58 47 1 + 59 58 48 1 + 59 58 49 1 + 59 58 50 1 + 59 58 51 1 + 59 58 52 1 + 59 58 53 1 + 59 58 54 1 + 59 58 55 1 + 59 58 56 1 + 59 58 57 1 + 59 58 58 1 + 59 58 59 1 + 59 58 60 1 + 59 58 61 1 + 59 58 62 1 + 59 58 63 1 + 59 58 64 1 + 59 58 65 1 + 59 58 66 1 + 59 58 67 1 + 59 58 68 1 + 59 58 69 1 + 59 58 70 1 + 59 58 71 1 + 59 58 72 1 + 59 58 73 1 + 59 58 74 1 + 59 58 75 1 + 59 58 76 1 + 59 58 77 1 + 59 58 78 1 + 59 58 79 1 + 59 58 80 1 + 59 58 81 1 + 59 58 82 1 + 59 58 83 1 + 59 58 84 1 + 59 58 85 1 + 59 58 86 1 + 59 58 87 1 + 59 58 88 0.590371 + 59 59 39 0.792899 + 59 59 40 1 + 59 59 41 1 + 59 59 42 1 + 59 59 43 1 + 59 59 44 1 + 59 59 45 1 + 59 59 46 1 + 59 59 47 1 + 59 59 48 1 + 59 59 49 1 + 59 59 50 1 + 59 59 51 1 + 59 59 52 1 + 59 59 53 1 + 59 59 54 1 + 59 59 55 1 + 59 59 56 1 + 59 59 57 1 + 59 59 58 1 + 59 59 59 1 + 59 59 60 1 + 59 59 61 1 + 59 59 62 1 + 59 59 63 1 + 59 59 64 1 + 59 59 65 1 + 59 59 66 1 + 59 59 67 1 + 59 59 68 1 + 59 59 69 1 + 59 59 70 1 + 59 59 71 1 + 59 59 72 1 + 59 59 73 1 + 59 59 74 1 + 59 59 75 1 + 59 59 76 1 + 59 59 77 1 + 59 59 78 1 + 59 59 79 1 + 59 59 80 1 + 59 59 81 1 + 59 59 82 1 + 59 59 83 1 + 59 59 84 1 + 59 59 85 1 + 59 59 86 1 + 59 59 87 1 + 59 59 88 0.792899 + 59 60 38 0.00961546 + 59 60 39 0.944121 + 59 60 40 1 + 59 60 41 1 + 59 60 42 1 + 59 60 43 1 + 59 60 44 1 + 59 60 45 1 + 59 60 46 1 + 59 60 47 1 + 59 60 48 1 + 59 60 49 1 + 59 60 50 1 + 59 60 51 1 + 59 60 52 1 + 59 60 53 1 + 59 60 54 1 + 59 60 55 1 + 59 60 56 1 + 59 60 57 1 + 59 60 58 1 + 59 60 59 1 + 59 60 60 1 + 59 60 61 1 + 59 60 62 1 + 59 60 63 1 + 59 60 64 1 + 59 60 65 1 + 59 60 66 1 + 59 60 67 1 + 59 60 68 1 + 59 60 69 1 + 59 60 70 1 + 59 60 71 1 + 59 60 72 1 + 59 60 73 1 + 59 60 74 1 + 59 60 75 1 + 59 60 76 1 + 59 60 77 1 + 59 60 78 1 + 59 60 79 1 + 59 60 80 1 + 59 60 81 1 + 59 60 82 1 + 59 60 83 1 + 59 60 84 1 + 59 60 85 1 + 59 60 86 1 + 59 60 87 1 + 59 60 88 0.944121 + 59 60 89 0.00961546 + 59 61 38 0.0765779 + 59 61 39 0.99711 + 59 61 40 1 + 59 61 41 1 + 59 61 42 1 + 59 61 43 1 + 59 61 44 1 + 59 61 45 1 + 59 61 46 1 + 59 61 47 1 + 59 61 48 1 + 59 61 49 1 + 59 61 50 1 + 59 61 51 1 + 59 61 52 1 + 59 61 53 1 + 59 61 54 1 + 59 61 55 1 + 59 61 56 1 + 59 61 57 1 + 59 61 58 1 + 59 61 59 1 + 59 61 60 1 + 59 61 61 1 + 59 61 62 1 + 59 61 63 1 + 59 61 64 1 + 59 61 65 1 + 59 61 66 1 + 59 61 67 1 + 59 61 68 1 + 59 61 69 1 + 59 61 70 1 + 59 61 71 1 + 59 61 72 1 + 59 61 73 1 + 59 61 74 1 + 59 61 75 1 + 59 61 76 1 + 59 61 77 1 + 59 61 78 1 + 59 61 79 1 + 59 61 80 1 + 59 61 81 1 + 59 61 82 1 + 59 61 83 1 + 59 61 84 1 + 59 61 85 1 + 59 61 86 1 + 59 61 87 1 + 59 61 88 0.99711 + 59 61 89 0.0765779 + 59 62 38 0.153337 + 59 62 39 1 + 59 62 40 1 + 59 62 41 1 + 59 62 42 1 + 59 62 43 1 + 59 62 44 1 + 59 62 45 1 + 59 62 46 1 + 59 62 47 1 + 59 62 48 1 + 59 62 49 1 + 59 62 50 1 + 59 62 51 1 + 59 62 52 1 + 59 62 53 1 + 59 62 54 1 + 59 62 55 1 + 59 62 56 1 + 59 62 57 1 + 59 62 58 1 + 59 62 59 1 + 59 62 60 1 + 59 62 61 1 + 59 62 62 1 + 59 62 63 1 + 59 62 64 1 + 59 62 65 1 + 59 62 66 1 + 59 62 67 1 + 59 62 68 1 + 59 62 69 1 + 59 62 70 1 + 59 62 71 1 + 59 62 72 1 + 59 62 73 1 + 59 62 74 1 + 59 62 75 1 + 59 62 76 1 + 59 62 77 1 + 59 62 78 1 + 59 62 79 1 + 59 62 80 1 + 59 62 81 1 + 59 62 82 1 + 59 62 83 1 + 59 62 84 1 + 59 62 85 1 + 59 62 86 1 + 59 62 87 1 + 59 62 88 1 + 59 62 89 0.153337 + 59 63 38 0.193067 + 59 63 39 1 + 59 63 40 1 + 59 63 41 1 + 59 63 42 1 + 59 63 43 1 + 59 63 44 1 + 59 63 45 1 + 59 63 46 1 + 59 63 47 1 + 59 63 48 1 + 59 63 49 1 + 59 63 50 1 + 59 63 51 1 + 59 63 52 1 + 59 63 53 1 + 59 63 54 1 + 59 63 55 1 + 59 63 56 1 + 59 63 57 1 + 59 63 58 1 + 59 63 59 1 + 59 63 60 1 + 59 63 61 1 + 59 63 62 1 + 59 63 63 1 + 59 63 64 1 + 59 63 65 1 + 59 63 66 1 + 59 63 67 1 + 59 63 68 1 + 59 63 69 1 + 59 63 70 1 + 59 63 71 1 + 59 63 72 1 + 59 63 73 1 + 59 63 74 1 + 59 63 75 1 + 59 63 76 1 + 59 63 77 1 + 59 63 78 1 + 59 63 79 1 + 59 63 80 1 + 59 63 81 1 + 59 63 82 1 + 59 63 83 1 + 59 63 84 1 + 59 63 85 1 + 59 63 86 1 + 59 63 87 1 + 59 63 88 1 + 59 63 89 0.193067 + 59 64 38 0.193067 + 59 64 39 1 + 59 64 40 1 + 59 64 41 1 + 59 64 42 1 + 59 64 43 1 + 59 64 44 1 + 59 64 45 1 + 59 64 46 1 + 59 64 47 1 + 59 64 48 1 + 59 64 49 1 + 59 64 50 1 + 59 64 51 1 + 59 64 52 1 + 59 64 53 1 + 59 64 54 1 + 59 64 55 1 + 59 64 56 1 + 59 64 57 1 + 59 64 58 1 + 59 64 59 1 + 59 64 60 1 + 59 64 61 1 + 59 64 62 1 + 59 64 63 1 + 59 64 64 1 + 59 64 65 1 + 59 64 66 1 + 59 64 67 1 + 59 64 68 1 + 59 64 69 1 + 59 64 70 1 + 59 64 71 1 + 59 64 72 1 + 59 64 73 1 + 59 64 74 1 + 59 64 75 1 + 59 64 76 1 + 59 64 77 1 + 59 64 78 1 + 59 64 79 1 + 59 64 80 1 + 59 64 81 1 + 59 64 82 1 + 59 64 83 1 + 59 64 84 1 + 59 64 85 1 + 59 64 86 1 + 59 64 87 1 + 59 64 88 1 + 59 64 89 0.193067 + 59 65 38 0.153337 + 59 65 39 1 + 59 65 40 1 + 59 65 41 1 + 59 65 42 1 + 59 65 43 1 + 59 65 44 1 + 59 65 45 1 + 59 65 46 1 + 59 65 47 1 + 59 65 48 1 + 59 65 49 1 + 59 65 50 1 + 59 65 51 1 + 59 65 52 1 + 59 65 53 1 + 59 65 54 1 + 59 65 55 1 + 59 65 56 1 + 59 65 57 1 + 59 65 58 1 + 59 65 59 1 + 59 65 60 1 + 59 65 61 1 + 59 65 62 1 + 59 65 63 1 + 59 65 64 1 + 59 65 65 1 + 59 65 66 1 + 59 65 67 1 + 59 65 68 1 + 59 65 69 1 + 59 65 70 1 + 59 65 71 1 + 59 65 72 1 + 59 65 73 1 + 59 65 74 1 + 59 65 75 1 + 59 65 76 1 + 59 65 77 1 + 59 65 78 1 + 59 65 79 1 + 59 65 80 1 + 59 65 81 1 + 59 65 82 1 + 59 65 83 1 + 59 65 84 1 + 59 65 85 1 + 59 65 86 1 + 59 65 87 1 + 59 65 88 1 + 59 65 89 0.153337 + 59 66 38 0.0765779 + 59 66 39 0.99711 + 59 66 40 1 + 59 66 41 1 + 59 66 42 1 + 59 66 43 1 + 59 66 44 1 + 59 66 45 1 + 59 66 46 1 + 59 66 47 1 + 59 66 48 1 + 59 66 49 1 + 59 66 50 1 + 59 66 51 1 + 59 66 52 1 + 59 66 53 1 + 59 66 54 1 + 59 66 55 1 + 59 66 56 1 + 59 66 57 1 + 59 66 58 1 + 59 66 59 1 + 59 66 60 1 + 59 66 61 1 + 59 66 62 1 + 59 66 63 1 + 59 66 64 1 + 59 66 65 1 + 59 66 66 1 + 59 66 67 1 + 59 66 68 1 + 59 66 69 1 + 59 66 70 1 + 59 66 71 1 + 59 66 72 1 + 59 66 73 1 + 59 66 74 1 + 59 66 75 1 + 59 66 76 1 + 59 66 77 1 + 59 66 78 1 + 59 66 79 1 + 59 66 80 1 + 59 66 81 1 + 59 66 82 1 + 59 66 83 1 + 59 66 84 1 + 59 66 85 1 + 59 66 86 1 + 59 66 87 1 + 59 66 88 0.99711 + 59 66 89 0.0765779 + 59 67 38 0.00961546 + 59 67 39 0.944121 + 59 67 40 1 + 59 67 41 1 + 59 67 42 1 + 59 67 43 1 + 59 67 44 1 + 59 67 45 1 + 59 67 46 1 + 59 67 47 1 + 59 67 48 1 + 59 67 49 1 + 59 67 50 1 + 59 67 51 1 + 59 67 52 1 + 59 67 53 1 + 59 67 54 1 + 59 67 55 1 + 59 67 56 1 + 59 67 57 1 + 59 67 58 1 + 59 67 59 1 + 59 67 60 1 + 59 67 61 1 + 59 67 62 1 + 59 67 63 1 + 59 67 64 1 + 59 67 65 1 + 59 67 66 1 + 59 67 67 1 + 59 67 68 1 + 59 67 69 1 + 59 67 70 1 + 59 67 71 1 + 59 67 72 1 + 59 67 73 1 + 59 67 74 1 + 59 67 75 1 + 59 67 76 1 + 59 67 77 1 + 59 67 78 1 + 59 67 79 1 + 59 67 80 1 + 59 67 81 1 + 59 67 82 1 + 59 67 83 1 + 59 67 84 1 + 59 67 85 1 + 59 67 86 1 + 59 67 87 1 + 59 67 88 0.944121 + 59 67 89 0.00961546 + 59 68 39 0.792899 + 59 68 40 1 + 59 68 41 1 + 59 68 42 1 + 59 68 43 1 + 59 68 44 1 + 59 68 45 1 + 59 68 46 1 + 59 68 47 1 + 59 68 48 1 + 59 68 49 1 + 59 68 50 1 + 59 68 51 1 + 59 68 52 1 + 59 68 53 1 + 59 68 54 1 + 59 68 55 1 + 59 68 56 1 + 59 68 57 1 + 59 68 58 1 + 59 68 59 1 + 59 68 60 1 + 59 68 61 1 + 59 68 62 1 + 59 68 63 1 + 59 68 64 1 + 59 68 65 1 + 59 68 66 1 + 59 68 67 1 + 59 68 68 1 + 59 68 69 1 + 59 68 70 1 + 59 68 71 1 + 59 68 72 1 + 59 68 73 1 + 59 68 74 1 + 59 68 75 1 + 59 68 76 1 + 59 68 77 1 + 59 68 78 1 + 59 68 79 1 + 59 68 80 1 + 59 68 81 1 + 59 68 82 1 + 59 68 83 1 + 59 68 84 1 + 59 68 85 1 + 59 68 86 1 + 59 68 87 1 + 59 68 88 0.792899 + 59 69 39 0.590371 + 59 69 40 1 + 59 69 41 1 + 59 69 42 1 + 59 69 43 1 + 59 69 44 1 + 59 69 45 1 + 59 69 46 1 + 59 69 47 1 + 59 69 48 1 + 59 69 49 1 + 59 69 50 1 + 59 69 51 1 + 59 69 52 1 + 59 69 53 1 + 59 69 54 1 + 59 69 55 1 + 59 69 56 1 + 59 69 57 1 + 59 69 58 1 + 59 69 59 1 + 59 69 60 1 + 59 69 61 1 + 59 69 62 1 + 59 69 63 1 + 59 69 64 1 + 59 69 65 1 + 59 69 66 1 + 59 69 67 1 + 59 69 68 1 + 59 69 69 1 + 59 69 70 1 + 59 69 71 1 + 59 69 72 1 + 59 69 73 1 + 59 69 74 1 + 59 69 75 1 + 59 69 76 1 + 59 69 77 1 + 59 69 78 1 + 59 69 79 1 + 59 69 80 1 + 59 69 81 1 + 59 69 82 1 + 59 69 83 1 + 59 69 84 1 + 59 69 85 1 + 59 69 86 1 + 59 69 87 1 + 59 69 88 0.590371 + 59 70 39 0.345113 + 59 70 40 1 + 59 70 41 1 + 59 70 42 1 + 59 70 43 1 + 59 70 44 1 + 59 70 45 1 + 59 70 46 1 + 59 70 47 1 + 59 70 48 1 + 59 70 49 1 + 59 70 50 1 + 59 70 51 1 + 59 70 52 1 + 59 70 53 1 + 59 70 54 1 + 59 70 55 1 + 59 70 56 1 + 59 70 57 1 + 59 70 58 1 + 59 70 59 1 + 59 70 60 1 + 59 70 61 1 + 59 70 62 1 + 59 70 63 1 + 59 70 64 1 + 59 70 65 1 + 59 70 66 1 + 59 70 67 1 + 59 70 68 1 + 59 70 69 1 + 59 70 70 1 + 59 70 71 1 + 59 70 72 1 + 59 70 73 1 + 59 70 74 1 + 59 70 75 1 + 59 70 76 1 + 59 70 77 1 + 59 70 78 1 + 59 70 79 1 + 59 70 80 1 + 59 70 81 1 + 59 70 82 1 + 59 70 83 1 + 59 70 84 1 + 59 70 85 1 + 59 70 86 1 + 59 70 87 1 + 59 70 88 0.345113 + 59 71 39 0.0767609 + 59 71 40 0.979056 + 59 71 41 1 + 59 71 42 1 + 59 71 43 1 + 59 71 44 1 + 59 71 45 1 + 59 71 46 1 + 59 71 47 1 + 59 71 48 1 + 59 71 49 1 + 59 71 50 1 + 59 71 51 1 + 59 71 52 1 + 59 71 53 1 + 59 71 54 1 + 59 71 55 1 + 59 71 56 1 + 59 71 57 1 + 59 71 58 1 + 59 71 59 1 + 59 71 60 1 + 59 71 61 1 + 59 71 62 1 + 59 71 63 1 + 59 71 64 1 + 59 71 65 1 + 59 71 66 1 + 59 71 67 1 + 59 71 68 1 + 59 71 69 1 + 59 71 70 1 + 59 71 71 1 + 59 71 72 1 + 59 71 73 1 + 59 71 74 1 + 59 71 75 1 + 59 71 76 1 + 59 71 77 1 + 59 71 78 1 + 59 71 79 1 + 59 71 80 1 + 59 71 81 1 + 59 71 82 1 + 59 71 83 1 + 59 71 84 1 + 59 71 85 1 + 59 71 86 1 + 59 71 87 0.979056 + 59 71 88 0.0767609 + 59 72 40 0.720869 + 59 72 41 1 + 59 72 42 1 + 59 72 43 1 + 59 72 44 1 + 59 72 45 1 + 59 72 46 1 + 59 72 47 1 + 59 72 48 1 + 59 72 49 1 + 59 72 50 1 + 59 72 51 1 + 59 72 52 1 + 59 72 53 1 + 59 72 54 1 + 59 72 55 1 + 59 72 56 1 + 59 72 57 1 + 59 72 58 1 + 59 72 59 1 + 59 72 60 1 + 59 72 61 1 + 59 72 62 1 + 59 72 63 1 + 59 72 64 1 + 59 72 65 1 + 59 72 66 1 + 59 72 67 1 + 59 72 68 1 + 59 72 69 1 + 59 72 70 1 + 59 72 71 1 + 59 72 72 1 + 59 72 73 1 + 59 72 74 1 + 59 72 75 1 + 59 72 76 1 + 59 72 77 1 + 59 72 78 1 + 59 72 79 1 + 59 72 80 1 + 59 72 81 1 + 59 72 82 1 + 59 72 83 1 + 59 72 84 1 + 59 72 85 1 + 59 72 86 1 + 59 72 87 0.720869 + 59 73 40 0.338304 + 59 73 41 1 + 59 73 42 1 + 59 73 43 1 + 59 73 44 1 + 59 73 45 1 + 59 73 46 1 + 59 73 47 1 + 59 73 48 1 + 59 73 49 1 + 59 73 50 1 + 59 73 51 1 + 59 73 52 1 + 59 73 53 1 + 59 73 54 1 + 59 73 55 1 + 59 73 56 1 + 59 73 57 1 + 59 73 58 1 + 59 73 59 1 + 59 73 60 1 + 59 73 61 1 + 59 73 62 1 + 59 73 63 1 + 59 73 64 1 + 59 73 65 1 + 59 73 66 1 + 59 73 67 1 + 59 73 68 1 + 59 73 69 1 + 59 73 70 1 + 59 73 71 1 + 59 73 72 1 + 59 73 73 1 + 59 73 74 1 + 59 73 75 1 + 59 73 76 1 + 59 73 77 1 + 59 73 78 1 + 59 73 79 1 + 59 73 80 1 + 59 73 81 1 + 59 73 82 1 + 59 73 83 1 + 59 73 84 1 + 59 73 85 1 + 59 73 86 1 + 59 73 87 0.338304 + 59 74 40 0.0230554 + 59 74 41 0.882677 + 59 74 42 1 + 59 74 43 1 + 59 74 44 1 + 59 74 45 1 + 59 74 46 1 + 59 74 47 1 + 59 74 48 1 + 59 74 49 1 + 59 74 50 1 + 59 74 51 1 + 59 74 52 1 + 59 74 53 1 + 59 74 54 1 + 59 74 55 1 + 59 74 56 1 + 59 74 57 1 + 59 74 58 1 + 59 74 59 1 + 59 74 60 1 + 59 74 61 1 + 59 74 62 1 + 59 74 63 1 + 59 74 64 1 + 59 74 65 1 + 59 74 66 1 + 59 74 67 1 + 59 74 68 1 + 59 74 69 1 + 59 74 70 1 + 59 74 71 1 + 59 74 72 1 + 59 74 73 1 + 59 74 74 1 + 59 74 75 1 + 59 74 76 1 + 59 74 77 1 + 59 74 78 1 + 59 74 79 1 + 59 74 80 1 + 59 74 81 1 + 59 74 82 1 + 59 74 83 1 + 59 74 84 1 + 59 74 85 1 + 59 74 86 0.882677 + 59 74 87 0.0230554 + 59 75 41 0.42026 + 59 75 42 1 + 59 75 43 1 + 59 75 44 1 + 59 75 45 1 + 59 75 46 1 + 59 75 47 1 + 59 75 48 1 + 59 75 49 1 + 59 75 50 1 + 59 75 51 1 + 59 75 52 1 + 59 75 53 1 + 59 75 54 1 + 59 75 55 1 + 59 75 56 1 + 59 75 57 1 + 59 75 58 1 + 59 75 59 1 + 59 75 60 1 + 59 75 61 1 + 59 75 62 1 + 59 75 63 1 + 59 75 64 1 + 59 75 65 1 + 59 75 66 1 + 59 75 67 1 + 59 75 68 1 + 59 75 69 1 + 59 75 70 1 + 59 75 71 1 + 59 75 72 1 + 59 75 73 1 + 59 75 74 1 + 59 75 75 1 + 59 75 76 1 + 59 75 77 1 + 59 75 78 1 + 59 75 79 1 + 59 75 80 1 + 59 75 81 1 + 59 75 82 1 + 59 75 83 1 + 59 75 84 1 + 59 75 85 1 + 59 75 86 0.42026 + 59 76 41 0.0262369 + 59 76 42 0.852122 + 59 76 43 1 + 59 76 44 1 + 59 76 45 1 + 59 76 46 1 + 59 76 47 1 + 59 76 48 1 + 59 76 49 1 + 59 76 50 1 + 59 76 51 1 + 59 76 52 1 + 59 76 53 1 + 59 76 54 1 + 59 76 55 1 + 59 76 56 1 + 59 76 57 1 + 59 76 58 1 + 59 76 59 1 + 59 76 60 1 + 59 76 61 1 + 59 76 62 1 + 59 76 63 1 + 59 76 64 1 + 59 76 65 1 + 59 76 66 1 + 59 76 67 1 + 59 76 68 1 + 59 76 69 1 + 59 76 70 1 + 59 76 71 1 + 59 76 72 1 + 59 76 73 1 + 59 76 74 1 + 59 76 75 1 + 59 76 76 1 + 59 76 77 1 + 59 76 78 1 + 59 76 79 1 + 59 76 80 1 + 59 76 81 1 + 59 76 82 1 + 59 76 83 1 + 59 76 84 1 + 59 76 85 0.852122 + 59 76 86 0.0262369 + 59 77 42 0.28004 + 59 77 43 0.995674 + 59 77 44 1 + 59 77 45 1 + 59 77 46 1 + 59 77 47 1 + 59 77 48 1 + 59 77 49 1 + 59 77 50 1 + 59 77 51 1 + 59 77 52 1 + 59 77 53 1 + 59 77 54 1 + 59 77 55 1 + 59 77 56 1 + 59 77 57 1 + 59 77 58 1 + 59 77 59 1 + 59 77 60 1 + 59 77 61 1 + 59 77 62 1 + 59 77 63 1 + 59 77 64 1 + 59 77 65 1 + 59 77 66 1 + 59 77 67 1 + 59 77 68 1 + 59 77 69 1 + 59 77 70 1 + 59 77 71 1 + 59 77 72 1 + 59 77 73 1 + 59 77 74 1 + 59 77 75 1 + 59 77 76 1 + 59 77 77 1 + 59 77 78 1 + 59 77 79 1 + 59 77 80 1 + 59 77 81 1 + 59 77 82 1 + 59 77 83 1 + 59 77 84 0.995674 + 59 77 85 0.28004 + 59 78 42 0.000228244 + 59 78 43 0.606763 + 59 78 44 1 + 59 78 45 1 + 59 78 46 1 + 59 78 47 1 + 59 78 48 1 + 59 78 49 1 + 59 78 50 1 + 59 78 51 1 + 59 78 52 1 + 59 78 53 1 + 59 78 54 1 + 59 78 55 1 + 59 78 56 1 + 59 78 57 1 + 59 78 58 1 + 59 78 59 1 + 59 78 60 1 + 59 78 61 1 + 59 78 62 1 + 59 78 63 1 + 59 78 64 1 + 59 78 65 1 + 59 78 66 1 + 59 78 67 1 + 59 78 68 1 + 59 78 69 1 + 59 78 70 1 + 59 78 71 1 + 59 78 72 1 + 59 78 73 1 + 59 78 74 1 + 59 78 75 1 + 59 78 76 1 + 59 78 77 1 + 59 78 78 1 + 59 78 79 1 + 59 78 80 1 + 59 78 81 1 + 59 78 82 1 + 59 78 83 1 + 59 78 84 0.606763 + 59 78 85 0.000228244 + 59 79 43 0.0441313 + 59 79 44 0.821374 + 59 79 45 1 + 59 79 46 1 + 59 79 47 1 + 59 79 48 1 + 59 79 49 1 + 59 79 50 1 + 59 79 51 1 + 59 79 52 1 + 59 79 53 1 + 59 79 54 1 + 59 79 55 1 + 59 79 56 1 + 59 79 57 1 + 59 79 58 1 + 59 79 59 1 + 59 79 60 1 + 59 79 61 1 + 59 79 62 1 + 59 79 63 1 + 59 79 64 1 + 59 79 65 1 + 59 79 66 1 + 59 79 67 1 + 59 79 68 1 + 59 79 69 1 + 59 79 70 1 + 59 79 71 1 + 59 79 72 1 + 59 79 73 1 + 59 79 74 1 + 59 79 75 1 + 59 79 76 1 + 59 79 77 1 + 59 79 78 1 + 59 79 79 1 + 59 79 80 1 + 59 79 81 1 + 59 79 82 1 + 59 79 83 0.821374 + 59 79 84 0.0441313 + 59 80 44 0.133628 + 59 80 45 0.909115 + 59 80 46 1 + 59 80 47 1 + 59 80 48 1 + 59 80 49 1 + 59 80 50 1 + 59 80 51 1 + 59 80 52 1 + 59 80 53 1 + 59 80 54 1 + 59 80 55 1 + 59 80 56 1 + 59 80 57 1 + 59 80 58 1 + 59 80 59 1 + 59 80 60 1 + 59 80 61 1 + 59 80 62 1 + 59 80 63 1 + 59 80 64 1 + 59 80 65 1 + 59 80 66 1 + 59 80 67 1 + 59 80 68 1 + 59 80 69 1 + 59 80 70 1 + 59 80 71 1 + 59 80 72 1 + 59 80 73 1 + 59 80 74 1 + 59 80 75 1 + 59 80 76 1 + 59 80 77 1 + 59 80 78 1 + 59 80 79 1 + 59 80 80 1 + 59 80 81 1 + 59 80 82 0.909115 + 59 80 83 0.133628 + 59 81 45 0.196147 + 59 81 46 0.931469 + 59 81 47 1 + 59 81 48 1 + 59 81 49 1 + 59 81 50 1 + 59 81 51 1 + 59 81 52 1 + 59 81 53 1 + 59 81 54 1 + 59 81 55 1 + 59 81 56 1 + 59 81 57 1 + 59 81 58 1 + 59 81 59 1 + 59 81 60 1 + 59 81 61 1 + 59 81 62 1 + 59 81 63 1 + 59 81 64 1 + 59 81 65 1 + 59 81 66 1 + 59 81 67 1 + 59 81 68 1 + 59 81 69 1 + 59 81 70 1 + 59 81 71 1 + 59 81 72 1 + 59 81 73 1 + 59 81 74 1 + 59 81 75 1 + 59 81 76 1 + 59 81 77 1 + 59 81 78 1 + 59 81 79 1 + 59 81 80 1 + 59 81 81 0.931469 + 59 81 82 0.196147 + 59 82 46 0.196147 + 59 82 47 0.909115 + 59 82 48 1 + 59 82 49 1 + 59 82 50 1 + 59 82 51 1 + 59 82 52 1 + 59 82 53 1 + 59 82 54 1 + 59 82 55 1 + 59 82 56 1 + 59 82 57 1 + 59 82 58 1 + 59 82 59 1 + 59 82 60 1 + 59 82 61 1 + 59 82 62 1 + 59 82 63 1 + 59 82 64 1 + 59 82 65 1 + 59 82 66 1 + 59 82 67 1 + 59 82 68 1 + 59 82 69 1 + 59 82 70 1 + 59 82 71 1 + 59 82 72 1 + 59 82 73 1 + 59 82 74 1 + 59 82 75 1 + 59 82 76 1 + 59 82 77 1 + 59 82 78 1 + 59 82 79 1 + 59 82 80 0.909115 + 59 82 81 0.196147 + 59 83 47 0.133628 + 59 83 48 0.821374 + 59 83 49 1 + 59 83 50 1 + 59 83 51 1 + 59 83 52 1 + 59 83 53 1 + 59 83 54 1 + 59 83 55 1 + 59 83 56 1 + 59 83 57 1 + 59 83 58 1 + 59 83 59 1 + 59 83 60 1 + 59 83 61 1 + 59 83 62 1 + 59 83 63 1 + 59 83 64 1 + 59 83 65 1 + 59 83 66 1 + 59 83 67 1 + 59 83 68 1 + 59 83 69 1 + 59 83 70 1 + 59 83 71 1 + 59 83 72 1 + 59 83 73 1 + 59 83 74 1 + 59 83 75 1 + 59 83 76 1 + 59 83 77 1 + 59 83 78 1 + 59 83 79 0.821374 + 59 83 80 0.133628 + 59 84 48 0.0441313 + 59 84 49 0.606763 + 59 84 50 0.995674 + 59 84 51 1 + 59 84 52 1 + 59 84 53 1 + 59 84 54 1 + 59 84 55 1 + 59 84 56 1 + 59 84 57 1 + 59 84 58 1 + 59 84 59 1 + 59 84 60 1 + 59 84 61 1 + 59 84 62 1 + 59 84 63 1 + 59 84 64 1 + 59 84 65 1 + 59 84 66 1 + 59 84 67 1 + 59 84 68 1 + 59 84 69 1 + 59 84 70 1 + 59 84 71 1 + 59 84 72 1 + 59 84 73 1 + 59 84 74 1 + 59 84 75 1 + 59 84 76 1 + 59 84 77 0.995674 + 59 84 78 0.606763 + 59 84 79 0.0441313 + 59 85 49 0.000228244 + 59 85 50 0.28004 + 59 85 51 0.852122 + 59 85 52 1 + 59 85 53 1 + 59 85 54 1 + 59 85 55 1 + 59 85 56 1 + 59 85 57 1 + 59 85 58 1 + 59 85 59 1 + 59 85 60 1 + 59 85 61 1 + 59 85 62 1 + 59 85 63 1 + 59 85 64 1 + 59 85 65 1 + 59 85 66 1 + 59 85 67 1 + 59 85 68 1 + 59 85 69 1 + 59 85 70 1 + 59 85 71 1 + 59 85 72 1 + 59 85 73 1 + 59 85 74 1 + 59 85 75 1 + 59 85 76 0.852122 + 59 85 77 0.28004 + 59 85 78 0.000228244 + 59 86 51 0.0262369 + 59 86 52 0.42026 + 59 86 53 0.882677 + 59 86 54 1 + 59 86 55 1 + 59 86 56 1 + 59 86 57 1 + 59 86 58 1 + 59 86 59 1 + 59 86 60 1 + 59 86 61 1 + 59 86 62 1 + 59 86 63 1 + 59 86 64 1 + 59 86 65 1 + 59 86 66 1 + 59 86 67 1 + 59 86 68 1 + 59 86 69 1 + 59 86 70 1 + 59 86 71 1 + 59 86 72 1 + 59 86 73 1 + 59 86 74 0.882677 + 59 86 75 0.42026 + 59 86 76 0.0262369 + 59 87 53 0.0230554 + 59 87 54 0.338304 + 59 87 55 0.720869 + 59 87 56 0.979056 + 59 87 57 1 + 59 87 58 1 + 59 87 59 1 + 59 87 60 1 + 59 87 61 1 + 59 87 62 1 + 59 87 63 1 + 59 87 64 1 + 59 87 65 1 + 59 87 66 1 + 59 87 67 1 + 59 87 68 1 + 59 87 69 1 + 59 87 70 1 + 59 87 71 0.979056 + 59 87 72 0.720869 + 59 87 73 0.338304 + 59 87 74 0.0230554 + 59 88 56 0.0767609 + 59 88 57 0.345113 + 59 88 58 0.590371 + 59 88 59 0.792899 + 59 88 60 0.944121 + 59 88 61 0.99711 + 59 88 62 1 + 59 88 63 1 + 59 88 64 1 + 59 88 65 1 + 59 88 66 0.99711 + 59 88 67 0.944121 + 59 88 68 0.792899 + 59 88 69 0.590371 + 59 88 70 0.345113 + 59 88 71 0.0767609 + 59 89 60 0.00961546 + 59 89 61 0.0765779 + 59 89 62 0.153337 + 59 89 63 0.193067 + 59 89 64 0.193067 + 59 89 65 0.153337 + 59 89 66 0.0765779 + 59 89 67 0.00961546 + 60 38 59 0.00961546 + 60 38 60 0.11378 + 60 38 61 0.232735 + 60 38 62 0.311883 + 60 38 63 0.351365 + 60 38 64 0.351365 + 60 38 65 0.311883 + 60 38 66 0.232735 + 60 38 67 0.11378 + 60 38 68 0.00961546 + 60 39 55 0.00850155 + 60 39 56 0.221559 + 60 39 57 0.508892 + 60 39 58 0.752526 + 60 39 59 0.944121 + 60 39 60 0.999764 + 60 39 61 1 + 60 39 62 1 + 60 39 63 1 + 60 39 64 1 + 60 39 65 1 + 60 39 66 1 + 60 39 67 0.999764 + 60 39 68 0.944121 + 60 39 69 0.752526 + 60 39 70 0.508892 + 60 39 71 0.221559 + 60 39 72 0.00850155 + 60 40 53 0.106145 + 60 40 54 0.509102 + 60 40 55 0.880429 + 60 40 56 0.999993 + 60 40 57 1 + 60 40 58 1 + 60 40 59 1 + 60 40 60 1 + 60 40 61 1 + 60 40 62 1 + 60 40 63 1 + 60 40 64 1 + 60 40 65 1 + 60 40 66 1 + 60 40 67 1 + 60 40 68 1 + 60 40 69 1 + 60 40 70 1 + 60 40 71 0.999993 + 60 40 72 0.880429 + 60 40 73 0.509102 + 60 40 74 0.106145 + 60 41 51 0.106397 + 60 41 52 0.598003 + 60 41 53 0.97359 + 60 41 54 1 + 60 41 55 1 + 60 41 56 1 + 60 41 57 1 + 60 41 58 1 + 60 41 59 1 + 60 41 60 1 + 60 41 61 1 + 60 41 62 1 + 60 41 63 1 + 60 41 64 1 + 60 41 65 1 + 60 41 66 1 + 60 41 67 1 + 60 41 68 1 + 60 41 69 1 + 60 41 70 1 + 60 41 71 1 + 60 41 72 1 + 60 41 73 1 + 60 41 74 0.97359 + 60 41 75 0.598003 + 60 41 76 0.106397 + 60 42 49 0.0170305 + 60 42 50 0.462948 + 60 42 51 0.954076 + 60 42 52 1 + 60 42 53 1 + 60 42 54 1 + 60 42 55 1 + 60 42 56 1 + 60 42 57 1 + 60 42 58 1 + 60 42 59 1 + 60 42 60 1 + 60 42 61 1 + 60 42 62 1 + 60 42 63 1 + 60 42 64 1 + 60 42 65 1 + 60 42 66 1 + 60 42 67 1 + 60 42 68 1 + 60 42 69 1 + 60 42 70 1 + 60 42 71 1 + 60 42 72 1 + 60 42 73 1 + 60 42 74 1 + 60 42 75 1 + 60 42 76 0.954076 + 60 42 77 0.462948 + 60 42 78 0.0170305 + 60 43 48 0.134257 + 60 43 49 0.783221 + 60 43 50 1 + 60 43 51 1 + 60 43 52 1 + 60 43 53 1 + 60 43 54 1 + 60 43 55 1 + 60 43 56 1 + 60 43 57 1 + 60 43 58 1 + 60 43 59 1 + 60 43 60 1 + 60 43 61 1 + 60 43 62 1 + 60 43 63 1 + 60 43 64 1 + 60 43 65 1 + 60 43 66 1 + 60 43 67 1 + 60 43 68 1 + 60 43 69 1 + 60 43 70 1 + 60 43 71 1 + 60 43 72 1 + 60 43 73 1 + 60 43 74 1 + 60 43 75 1 + 60 43 76 1 + 60 43 77 1 + 60 43 78 0.783221 + 60 43 79 0.134257 + 60 44 47 0.27231 + 60 44 48 0.93166 + 60 44 49 1 + 60 44 50 1 + 60 44 51 1 + 60 44 52 1 + 60 44 53 1 + 60 44 54 1 + 60 44 55 1 + 60 44 56 1 + 60 44 57 1 + 60 44 58 1 + 60 44 59 1 + 60 44 60 1 + 60 44 61 1 + 60 44 62 1 + 60 44 63 1 + 60 44 64 1 + 60 44 65 1 + 60 44 66 1 + 60 44 67 1 + 60 44 68 1 + 60 44 69 1 + 60 44 70 1 + 60 44 71 1 + 60 44 72 1 + 60 44 73 1 + 60 44 74 1 + 60 44 75 1 + 60 44 76 1 + 60 44 77 1 + 60 44 78 1 + 60 44 79 0.93166 + 60 44 80 0.27231 + 60 45 46 0.358249 + 60 45 47 0.979426 + 60 45 48 1 + 60 45 49 1 + 60 45 50 1 + 60 45 51 1 + 60 45 52 1 + 60 45 53 1 + 60 45 54 1 + 60 45 55 1 + 60 45 56 1 + 60 45 57 1 + 60 45 58 1 + 60 45 59 1 + 60 45 60 1 + 60 45 61 1 + 60 45 62 1 + 60 45 63 1 + 60 45 64 1 + 60 45 65 1 + 60 45 66 1 + 60 45 67 1 + 60 45 68 1 + 60 45 69 1 + 60 45 70 1 + 60 45 71 1 + 60 45 72 1 + 60 45 73 1 + 60 45 74 1 + 60 45 75 1 + 60 45 76 1 + 60 45 77 1 + 60 45 78 1 + 60 45 79 1 + 60 45 80 0.979426 + 60 45 81 0.358249 + 60 46 45 0.358249 + 60 46 46 0.988806 + 60 46 47 1 + 60 46 48 1 + 60 46 49 1 + 60 46 50 1 + 60 46 51 1 + 60 46 52 1 + 60 46 53 1 + 60 46 54 1 + 60 46 55 1 + 60 46 56 1 + 60 46 57 1 + 60 46 58 1 + 60 46 59 1 + 60 46 60 1 + 60 46 61 1 + 60 46 62 1 + 60 46 63 1 + 60 46 64 1 + 60 46 65 1 + 60 46 66 1 + 60 46 67 1 + 60 46 68 1 + 60 46 69 1 + 60 46 70 1 + 60 46 71 1 + 60 46 72 1 + 60 46 73 1 + 60 46 74 1 + 60 46 75 1 + 60 46 76 1 + 60 46 77 1 + 60 46 78 1 + 60 46 79 1 + 60 46 80 1 + 60 46 81 0.988806 + 60 46 82 0.358249 + 60 47 44 0.27231 + 60 47 45 0.979426 + 60 47 46 1 + 60 47 47 1 + 60 47 48 1 + 60 47 49 1 + 60 47 50 1 + 60 47 51 1 + 60 47 52 1 + 60 47 53 1 + 60 47 54 1 + 60 47 55 1 + 60 47 56 1 + 60 47 57 1 + 60 47 58 1 + 60 47 59 1 + 60 47 60 1 + 60 47 61 1 + 60 47 62 1 + 60 47 63 1 + 60 47 64 1 + 60 47 65 1 + 60 47 66 1 + 60 47 67 1 + 60 47 68 1 + 60 47 69 1 + 60 47 70 1 + 60 47 71 1 + 60 47 72 1 + 60 47 73 1 + 60 47 74 1 + 60 47 75 1 + 60 47 76 1 + 60 47 77 1 + 60 47 78 1 + 60 47 79 1 + 60 47 80 1 + 60 47 81 1 + 60 47 82 0.979426 + 60 47 83 0.27231 + 60 48 43 0.134257 + 60 48 44 0.93166 + 60 48 45 1 + 60 48 46 1 + 60 48 47 1 + 60 48 48 1 + 60 48 49 1 + 60 48 50 1 + 60 48 51 1 + 60 48 52 1 + 60 48 53 1 + 60 48 54 1 + 60 48 55 1 + 60 48 56 1 + 60 48 57 1 + 60 48 58 1 + 60 48 59 1 + 60 48 60 1 + 60 48 61 1 + 60 48 62 1 + 60 48 63 1 + 60 48 64 1 + 60 48 65 1 + 60 48 66 1 + 60 48 67 1 + 60 48 68 1 + 60 48 69 1 + 60 48 70 1 + 60 48 71 1 + 60 48 72 1 + 60 48 73 1 + 60 48 74 1 + 60 48 75 1 + 60 48 76 1 + 60 48 77 1 + 60 48 78 1 + 60 48 79 1 + 60 48 80 1 + 60 48 81 1 + 60 48 82 1 + 60 48 83 0.93166 + 60 48 84 0.134257 + 60 49 42 0.0170305 + 60 49 43 0.783221 + 60 49 44 1 + 60 49 45 1 + 60 49 46 1 + 60 49 47 1 + 60 49 48 1 + 60 49 49 1 + 60 49 50 1 + 60 49 51 1 + 60 49 52 1 + 60 49 53 1 + 60 49 54 1 + 60 49 55 1 + 60 49 56 1 + 60 49 57 1 + 60 49 58 1 + 60 49 59 1 + 60 49 60 1 + 60 49 61 1 + 60 49 62 1 + 60 49 63 1 + 60 49 64 1 + 60 49 65 1 + 60 49 66 1 + 60 49 67 1 + 60 49 68 1 + 60 49 69 1 + 60 49 70 1 + 60 49 71 1 + 60 49 72 1 + 60 49 73 1 + 60 49 74 1 + 60 49 75 1 + 60 49 76 1 + 60 49 77 1 + 60 49 78 1 + 60 49 79 1 + 60 49 80 1 + 60 49 81 1 + 60 49 82 1 + 60 49 83 1 + 60 49 84 0.783221 + 60 49 85 0.0170305 + 60 50 42 0.462948 + 60 50 43 1 + 60 50 44 1 + 60 50 45 1 + 60 50 46 1 + 60 50 47 1 + 60 50 48 1 + 60 50 49 1 + 60 50 50 1 + 60 50 51 1 + 60 50 52 1 + 60 50 53 1 + 60 50 54 1 + 60 50 55 1 + 60 50 56 1 + 60 50 57 1 + 60 50 58 1 + 60 50 59 1 + 60 50 60 1 + 60 50 61 1 + 60 50 62 1 + 60 50 63 1 + 60 50 64 1 + 60 50 65 1 + 60 50 66 1 + 60 50 67 1 + 60 50 68 1 + 60 50 69 1 + 60 50 70 1 + 60 50 71 1 + 60 50 72 1 + 60 50 73 1 + 60 50 74 1 + 60 50 75 1 + 60 50 76 1 + 60 50 77 1 + 60 50 78 1 + 60 50 79 1 + 60 50 80 1 + 60 50 81 1 + 60 50 82 1 + 60 50 83 1 + 60 50 84 1 + 60 50 85 0.462948 + 60 51 41 0.106397 + 60 51 42 0.954076 + 60 51 43 1 + 60 51 44 1 + 60 51 45 1 + 60 51 46 1 + 60 51 47 1 + 60 51 48 1 + 60 51 49 1 + 60 51 50 1 + 60 51 51 1 + 60 51 52 1 + 60 51 53 1 + 60 51 54 1 + 60 51 55 1 + 60 51 56 1 + 60 51 57 1 + 60 51 58 1 + 60 51 59 1 + 60 51 60 1 + 60 51 61 1 + 60 51 62 1 + 60 51 63 1 + 60 51 64 1 + 60 51 65 1 + 60 51 66 1 + 60 51 67 1 + 60 51 68 1 + 60 51 69 1 + 60 51 70 1 + 60 51 71 1 + 60 51 72 1 + 60 51 73 1 + 60 51 74 1 + 60 51 75 1 + 60 51 76 1 + 60 51 77 1 + 60 51 78 1 + 60 51 79 1 + 60 51 80 1 + 60 51 81 1 + 60 51 82 1 + 60 51 83 1 + 60 51 84 1 + 60 51 85 0.954076 + 60 51 86 0.106397 + 60 52 41 0.598003 + 60 52 42 1 + 60 52 43 1 + 60 52 44 1 + 60 52 45 1 + 60 52 46 1 + 60 52 47 1 + 60 52 48 1 + 60 52 49 1 + 60 52 50 1 + 60 52 51 1 + 60 52 52 1 + 60 52 53 1 + 60 52 54 1 + 60 52 55 1 + 60 52 56 1 + 60 52 57 1 + 60 52 58 1 + 60 52 59 1 + 60 52 60 1 + 60 52 61 1 + 60 52 62 1 + 60 52 63 1 + 60 52 64 1 + 60 52 65 1 + 60 52 66 1 + 60 52 67 1 + 60 52 68 1 + 60 52 69 1 + 60 52 70 1 + 60 52 71 1 + 60 52 72 1 + 60 52 73 1 + 60 52 74 1 + 60 52 75 1 + 60 52 76 1 + 60 52 77 1 + 60 52 78 1 + 60 52 79 1 + 60 52 80 1 + 60 52 81 1 + 60 52 82 1 + 60 52 83 1 + 60 52 84 1 + 60 52 85 1 + 60 52 86 0.598003 + 60 53 40 0.106145 + 60 53 41 0.97359 + 60 53 42 1 + 60 53 43 1 + 60 53 44 1 + 60 53 45 1 + 60 53 46 1 + 60 53 47 1 + 60 53 48 1 + 60 53 49 1 + 60 53 50 1 + 60 53 51 1 + 60 53 52 1 + 60 53 53 1 + 60 53 54 1 + 60 53 55 1 + 60 53 56 1 + 60 53 57 1 + 60 53 58 1 + 60 53 59 1 + 60 53 60 1 + 60 53 61 1 + 60 53 62 1 + 60 53 63 1 + 60 53 64 1 + 60 53 65 1 + 60 53 66 1 + 60 53 67 1 + 60 53 68 1 + 60 53 69 1 + 60 53 70 1 + 60 53 71 1 + 60 53 72 1 + 60 53 73 1 + 60 53 74 1 + 60 53 75 1 + 60 53 76 1 + 60 53 77 1 + 60 53 78 1 + 60 53 79 1 + 60 53 80 1 + 60 53 81 1 + 60 53 82 1 + 60 53 83 1 + 60 53 84 1 + 60 53 85 1 + 60 53 86 0.97359 + 60 53 87 0.106145 + 60 54 40 0.509102 + 60 54 41 1 + 60 54 42 1 + 60 54 43 1 + 60 54 44 1 + 60 54 45 1 + 60 54 46 1 + 60 54 47 1 + 60 54 48 1 + 60 54 49 1 + 60 54 50 1 + 60 54 51 1 + 60 54 52 1 + 60 54 53 1 + 60 54 54 1 + 60 54 55 1 + 60 54 56 1 + 60 54 57 1 + 60 54 58 1 + 60 54 59 1 + 60 54 60 1 + 60 54 61 1 + 60 54 62 1 + 60 54 63 1 + 60 54 64 1 + 60 54 65 1 + 60 54 66 1 + 60 54 67 1 + 60 54 68 1 + 60 54 69 1 + 60 54 70 1 + 60 54 71 1 + 60 54 72 1 + 60 54 73 1 + 60 54 74 1 + 60 54 75 1 + 60 54 76 1 + 60 54 77 1 + 60 54 78 1 + 60 54 79 1 + 60 54 80 1 + 60 54 81 1 + 60 54 82 1 + 60 54 83 1 + 60 54 84 1 + 60 54 85 1 + 60 54 86 1 + 60 54 87 0.509102 + 60 55 39 0.00850155 + 60 55 40 0.880429 + 60 55 41 1 + 60 55 42 1 + 60 55 43 1 + 60 55 44 1 + 60 55 45 1 + 60 55 46 1 + 60 55 47 1 + 60 55 48 1 + 60 55 49 1 + 60 55 50 1 + 60 55 51 1 + 60 55 52 1 + 60 55 53 1 + 60 55 54 1 + 60 55 55 1 + 60 55 56 1 + 60 55 57 1 + 60 55 58 1 + 60 55 59 1 + 60 55 60 1 + 60 55 61 1 + 60 55 62 1 + 60 55 63 1 + 60 55 64 1 + 60 55 65 1 + 60 55 66 1 + 60 55 67 1 + 60 55 68 1 + 60 55 69 1 + 60 55 70 1 + 60 55 71 1 + 60 55 72 1 + 60 55 73 1 + 60 55 74 1 + 60 55 75 1 + 60 55 76 1 + 60 55 77 1 + 60 55 78 1 + 60 55 79 1 + 60 55 80 1 + 60 55 81 1 + 60 55 82 1 + 60 55 83 1 + 60 55 84 1 + 60 55 85 1 + 60 55 86 1 + 60 55 87 0.880429 + 60 55 88 0.00850155 + 60 56 39 0.221559 + 60 56 40 0.999993 + 60 56 41 1 + 60 56 42 1 + 60 56 43 1 + 60 56 44 1 + 60 56 45 1 + 60 56 46 1 + 60 56 47 1 + 60 56 48 1 + 60 56 49 1 + 60 56 50 1 + 60 56 51 1 + 60 56 52 1 + 60 56 53 1 + 60 56 54 1 + 60 56 55 1 + 60 56 56 1 + 60 56 57 1 + 60 56 58 1 + 60 56 59 1 + 60 56 60 1 + 60 56 61 1 + 60 56 62 1 + 60 56 63 1 + 60 56 64 1 + 60 56 65 1 + 60 56 66 1 + 60 56 67 1 + 60 56 68 1 + 60 56 69 1 + 60 56 70 1 + 60 56 71 1 + 60 56 72 1 + 60 56 73 1 + 60 56 74 1 + 60 56 75 1 + 60 56 76 1 + 60 56 77 1 + 60 56 78 1 + 60 56 79 1 + 60 56 80 1 + 60 56 81 1 + 60 56 82 1 + 60 56 83 1 + 60 56 84 1 + 60 56 85 1 + 60 56 86 1 + 60 56 87 0.999993 + 60 56 88 0.221559 + 60 57 39 0.508892 + 60 57 40 1 + 60 57 41 1 + 60 57 42 1 + 60 57 43 1 + 60 57 44 1 + 60 57 45 1 + 60 57 46 1 + 60 57 47 1 + 60 57 48 1 + 60 57 49 1 + 60 57 50 1 + 60 57 51 1 + 60 57 52 1 + 60 57 53 1 + 60 57 54 1 + 60 57 55 1 + 60 57 56 1 + 60 57 57 1 + 60 57 58 1 + 60 57 59 1 + 60 57 60 1 + 60 57 61 1 + 60 57 62 1 + 60 57 63 1 + 60 57 64 1 + 60 57 65 1 + 60 57 66 1 + 60 57 67 1 + 60 57 68 1 + 60 57 69 1 + 60 57 70 1 + 60 57 71 1 + 60 57 72 1 + 60 57 73 1 + 60 57 74 1 + 60 57 75 1 + 60 57 76 1 + 60 57 77 1 + 60 57 78 1 + 60 57 79 1 + 60 57 80 1 + 60 57 81 1 + 60 57 82 1 + 60 57 83 1 + 60 57 84 1 + 60 57 85 1 + 60 57 86 1 + 60 57 87 1 + 60 57 88 0.508892 + 60 58 39 0.752526 + 60 58 40 1 + 60 58 41 1 + 60 58 42 1 + 60 58 43 1 + 60 58 44 1 + 60 58 45 1 + 60 58 46 1 + 60 58 47 1 + 60 58 48 1 + 60 58 49 1 + 60 58 50 1 + 60 58 51 1 + 60 58 52 1 + 60 58 53 1 + 60 58 54 1 + 60 58 55 1 + 60 58 56 1 + 60 58 57 1 + 60 58 58 1 + 60 58 59 1 + 60 58 60 1 + 60 58 61 1 + 60 58 62 1 + 60 58 63 1 + 60 58 64 1 + 60 58 65 1 + 60 58 66 1 + 60 58 67 1 + 60 58 68 1 + 60 58 69 1 + 60 58 70 1 + 60 58 71 1 + 60 58 72 1 + 60 58 73 1 + 60 58 74 1 + 60 58 75 1 + 60 58 76 1 + 60 58 77 1 + 60 58 78 1 + 60 58 79 1 + 60 58 80 1 + 60 58 81 1 + 60 58 82 1 + 60 58 83 1 + 60 58 84 1 + 60 58 85 1 + 60 58 86 1 + 60 58 87 1 + 60 58 88 0.752526 + 60 59 38 0.00961546 + 60 59 39 0.944121 + 60 59 40 1 + 60 59 41 1 + 60 59 42 1 + 60 59 43 1 + 60 59 44 1 + 60 59 45 1 + 60 59 46 1 + 60 59 47 1 + 60 59 48 1 + 60 59 49 1 + 60 59 50 1 + 60 59 51 1 + 60 59 52 1 + 60 59 53 1 + 60 59 54 1 + 60 59 55 1 + 60 59 56 1 + 60 59 57 1 + 60 59 58 1 + 60 59 59 1 + 60 59 60 1 + 60 59 61 1 + 60 59 62 1 + 60 59 63 1 + 60 59 64 1 + 60 59 65 1 + 60 59 66 1 + 60 59 67 1 + 60 59 68 1 + 60 59 69 1 + 60 59 70 1 + 60 59 71 1 + 60 59 72 1 + 60 59 73 1 + 60 59 74 1 + 60 59 75 1 + 60 59 76 1 + 60 59 77 1 + 60 59 78 1 + 60 59 79 1 + 60 59 80 1 + 60 59 81 1 + 60 59 82 1 + 60 59 83 1 + 60 59 84 1 + 60 59 85 1 + 60 59 86 1 + 60 59 87 1 + 60 59 88 0.944121 + 60 59 89 0.00961546 + 60 60 38 0.11378 + 60 60 39 0.999764 + 60 60 40 1 + 60 60 41 1 + 60 60 42 1 + 60 60 43 1 + 60 60 44 1 + 60 60 45 1 + 60 60 46 1 + 60 60 47 1 + 60 60 48 1 + 60 60 49 1 + 60 60 50 1 + 60 60 51 1 + 60 60 52 1 + 60 60 53 1 + 60 60 54 1 + 60 60 55 1 + 60 60 56 1 + 60 60 57 1 + 60 60 58 1 + 60 60 59 1 + 60 60 60 1 + 60 60 61 1 + 60 60 62 1 + 60 60 63 1 + 60 60 64 1 + 60 60 65 1 + 60 60 66 1 + 60 60 67 1 + 60 60 68 1 + 60 60 69 1 + 60 60 70 1 + 60 60 71 1 + 60 60 72 1 + 60 60 73 1 + 60 60 74 1 + 60 60 75 1 + 60 60 76 1 + 60 60 77 1 + 60 60 78 1 + 60 60 79 1 + 60 60 80 1 + 60 60 81 1 + 60 60 82 1 + 60 60 83 1 + 60 60 84 1 + 60 60 85 1 + 60 60 86 1 + 60 60 87 1 + 60 60 88 0.999764 + 60 60 89 0.11378 + 60 61 38 0.232735 + 60 61 39 1 + 60 61 40 1 + 60 61 41 1 + 60 61 42 1 + 60 61 43 1 + 60 61 44 1 + 60 61 45 1 + 60 61 46 1 + 60 61 47 1 + 60 61 48 1 + 60 61 49 1 + 60 61 50 1 + 60 61 51 1 + 60 61 52 1 + 60 61 53 1 + 60 61 54 1 + 60 61 55 1 + 60 61 56 1 + 60 61 57 1 + 60 61 58 1 + 60 61 59 1 + 60 61 60 1 + 60 61 61 1 + 60 61 62 1 + 60 61 63 1 + 60 61 64 1 + 60 61 65 1 + 60 61 66 1 + 60 61 67 1 + 60 61 68 1 + 60 61 69 1 + 60 61 70 1 + 60 61 71 1 + 60 61 72 1 + 60 61 73 1 + 60 61 74 1 + 60 61 75 1 + 60 61 76 1 + 60 61 77 1 + 60 61 78 1 + 60 61 79 1 + 60 61 80 1 + 60 61 81 1 + 60 61 82 1 + 60 61 83 1 + 60 61 84 1 + 60 61 85 1 + 60 61 86 1 + 60 61 87 1 + 60 61 88 1 + 60 61 89 0.232735 + 60 62 38 0.311883 + 60 62 39 1 + 60 62 40 1 + 60 62 41 1 + 60 62 42 1 + 60 62 43 1 + 60 62 44 1 + 60 62 45 1 + 60 62 46 1 + 60 62 47 1 + 60 62 48 1 + 60 62 49 1 + 60 62 50 1 + 60 62 51 1 + 60 62 52 1 + 60 62 53 1 + 60 62 54 1 + 60 62 55 1 + 60 62 56 1 + 60 62 57 1 + 60 62 58 1 + 60 62 59 1 + 60 62 60 1 + 60 62 61 1 + 60 62 62 1 + 60 62 63 1 + 60 62 64 1 + 60 62 65 1 + 60 62 66 1 + 60 62 67 1 + 60 62 68 1 + 60 62 69 1 + 60 62 70 1 + 60 62 71 1 + 60 62 72 1 + 60 62 73 1 + 60 62 74 1 + 60 62 75 1 + 60 62 76 1 + 60 62 77 1 + 60 62 78 1 + 60 62 79 1 + 60 62 80 1 + 60 62 81 1 + 60 62 82 1 + 60 62 83 1 + 60 62 84 1 + 60 62 85 1 + 60 62 86 1 + 60 62 87 1 + 60 62 88 1 + 60 62 89 0.311883 + 60 63 38 0.351365 + 60 63 39 1 + 60 63 40 1 + 60 63 41 1 + 60 63 42 1 + 60 63 43 1 + 60 63 44 1 + 60 63 45 1 + 60 63 46 1 + 60 63 47 1 + 60 63 48 1 + 60 63 49 1 + 60 63 50 1 + 60 63 51 1 + 60 63 52 1 + 60 63 53 1 + 60 63 54 1 + 60 63 55 1 + 60 63 56 1 + 60 63 57 1 + 60 63 58 1 + 60 63 59 1 + 60 63 60 1 + 60 63 61 1 + 60 63 62 1 + 60 63 63 1 + 60 63 64 1 + 60 63 65 1 + 60 63 66 1 + 60 63 67 1 + 60 63 68 1 + 60 63 69 1 + 60 63 70 1 + 60 63 71 1 + 60 63 72 1 + 60 63 73 1 + 60 63 74 1 + 60 63 75 1 + 60 63 76 1 + 60 63 77 1 + 60 63 78 1 + 60 63 79 1 + 60 63 80 1 + 60 63 81 1 + 60 63 82 1 + 60 63 83 1 + 60 63 84 1 + 60 63 85 1 + 60 63 86 1 + 60 63 87 1 + 60 63 88 1 + 60 63 89 0.351365 + 60 64 38 0.351365 + 60 64 39 1 + 60 64 40 1 + 60 64 41 1 + 60 64 42 1 + 60 64 43 1 + 60 64 44 1 + 60 64 45 1 + 60 64 46 1 + 60 64 47 1 + 60 64 48 1 + 60 64 49 1 + 60 64 50 1 + 60 64 51 1 + 60 64 52 1 + 60 64 53 1 + 60 64 54 1 + 60 64 55 1 + 60 64 56 1 + 60 64 57 1 + 60 64 58 1 + 60 64 59 1 + 60 64 60 1 + 60 64 61 1 + 60 64 62 1 + 60 64 63 1 + 60 64 64 1 + 60 64 65 1 + 60 64 66 1 + 60 64 67 1 + 60 64 68 1 + 60 64 69 1 + 60 64 70 1 + 60 64 71 1 + 60 64 72 1 + 60 64 73 1 + 60 64 74 1 + 60 64 75 1 + 60 64 76 1 + 60 64 77 1 + 60 64 78 1 + 60 64 79 1 + 60 64 80 1 + 60 64 81 1 + 60 64 82 1 + 60 64 83 1 + 60 64 84 1 + 60 64 85 1 + 60 64 86 1 + 60 64 87 1 + 60 64 88 1 + 60 64 89 0.351365 + 60 65 38 0.311883 + 60 65 39 1 + 60 65 40 1 + 60 65 41 1 + 60 65 42 1 + 60 65 43 1 + 60 65 44 1 + 60 65 45 1 + 60 65 46 1 + 60 65 47 1 + 60 65 48 1 + 60 65 49 1 + 60 65 50 1 + 60 65 51 1 + 60 65 52 1 + 60 65 53 1 + 60 65 54 1 + 60 65 55 1 + 60 65 56 1 + 60 65 57 1 + 60 65 58 1 + 60 65 59 1 + 60 65 60 1 + 60 65 61 1 + 60 65 62 1 + 60 65 63 1 + 60 65 64 1 + 60 65 65 1 + 60 65 66 1 + 60 65 67 1 + 60 65 68 1 + 60 65 69 1 + 60 65 70 1 + 60 65 71 1 + 60 65 72 1 + 60 65 73 1 + 60 65 74 1 + 60 65 75 1 + 60 65 76 1 + 60 65 77 1 + 60 65 78 1 + 60 65 79 1 + 60 65 80 1 + 60 65 81 1 + 60 65 82 1 + 60 65 83 1 + 60 65 84 1 + 60 65 85 1 + 60 65 86 1 + 60 65 87 1 + 60 65 88 1 + 60 65 89 0.311883 + 60 66 38 0.232735 + 60 66 39 1 + 60 66 40 1 + 60 66 41 1 + 60 66 42 1 + 60 66 43 1 + 60 66 44 1 + 60 66 45 1 + 60 66 46 1 + 60 66 47 1 + 60 66 48 1 + 60 66 49 1 + 60 66 50 1 + 60 66 51 1 + 60 66 52 1 + 60 66 53 1 + 60 66 54 1 + 60 66 55 1 + 60 66 56 1 + 60 66 57 1 + 60 66 58 1 + 60 66 59 1 + 60 66 60 1 + 60 66 61 1 + 60 66 62 1 + 60 66 63 1 + 60 66 64 1 + 60 66 65 1 + 60 66 66 1 + 60 66 67 1 + 60 66 68 1 + 60 66 69 1 + 60 66 70 1 + 60 66 71 1 + 60 66 72 1 + 60 66 73 1 + 60 66 74 1 + 60 66 75 1 + 60 66 76 1 + 60 66 77 1 + 60 66 78 1 + 60 66 79 1 + 60 66 80 1 + 60 66 81 1 + 60 66 82 1 + 60 66 83 1 + 60 66 84 1 + 60 66 85 1 + 60 66 86 1 + 60 66 87 1 + 60 66 88 1 + 60 66 89 0.232735 + 60 67 38 0.11378 + 60 67 39 0.999764 + 60 67 40 1 + 60 67 41 1 + 60 67 42 1 + 60 67 43 1 + 60 67 44 1 + 60 67 45 1 + 60 67 46 1 + 60 67 47 1 + 60 67 48 1 + 60 67 49 1 + 60 67 50 1 + 60 67 51 1 + 60 67 52 1 + 60 67 53 1 + 60 67 54 1 + 60 67 55 1 + 60 67 56 1 + 60 67 57 1 + 60 67 58 1 + 60 67 59 1 + 60 67 60 1 + 60 67 61 1 + 60 67 62 1 + 60 67 63 1 + 60 67 64 1 + 60 67 65 1 + 60 67 66 1 + 60 67 67 1 + 60 67 68 1 + 60 67 69 1 + 60 67 70 1 + 60 67 71 1 + 60 67 72 1 + 60 67 73 1 + 60 67 74 1 + 60 67 75 1 + 60 67 76 1 + 60 67 77 1 + 60 67 78 1 + 60 67 79 1 + 60 67 80 1 + 60 67 81 1 + 60 67 82 1 + 60 67 83 1 + 60 67 84 1 + 60 67 85 1 + 60 67 86 1 + 60 67 87 1 + 60 67 88 0.999764 + 60 67 89 0.11378 + 60 68 38 0.00961546 + 60 68 39 0.944121 + 60 68 40 1 + 60 68 41 1 + 60 68 42 1 + 60 68 43 1 + 60 68 44 1 + 60 68 45 1 + 60 68 46 1 + 60 68 47 1 + 60 68 48 1 + 60 68 49 1 + 60 68 50 1 + 60 68 51 1 + 60 68 52 1 + 60 68 53 1 + 60 68 54 1 + 60 68 55 1 + 60 68 56 1 + 60 68 57 1 + 60 68 58 1 + 60 68 59 1 + 60 68 60 1 + 60 68 61 1 + 60 68 62 1 + 60 68 63 1 + 60 68 64 1 + 60 68 65 1 + 60 68 66 1 + 60 68 67 1 + 60 68 68 1 + 60 68 69 1 + 60 68 70 1 + 60 68 71 1 + 60 68 72 1 + 60 68 73 1 + 60 68 74 1 + 60 68 75 1 + 60 68 76 1 + 60 68 77 1 + 60 68 78 1 + 60 68 79 1 + 60 68 80 1 + 60 68 81 1 + 60 68 82 1 + 60 68 83 1 + 60 68 84 1 + 60 68 85 1 + 60 68 86 1 + 60 68 87 1 + 60 68 88 0.944121 + 60 68 89 0.00961546 + 60 69 39 0.752526 + 60 69 40 1 + 60 69 41 1 + 60 69 42 1 + 60 69 43 1 + 60 69 44 1 + 60 69 45 1 + 60 69 46 1 + 60 69 47 1 + 60 69 48 1 + 60 69 49 1 + 60 69 50 1 + 60 69 51 1 + 60 69 52 1 + 60 69 53 1 + 60 69 54 1 + 60 69 55 1 + 60 69 56 1 + 60 69 57 1 + 60 69 58 1 + 60 69 59 1 + 60 69 60 1 + 60 69 61 1 + 60 69 62 1 + 60 69 63 1 + 60 69 64 1 + 60 69 65 1 + 60 69 66 1 + 60 69 67 1 + 60 69 68 1 + 60 69 69 1 + 60 69 70 1 + 60 69 71 1 + 60 69 72 1 + 60 69 73 1 + 60 69 74 1 + 60 69 75 1 + 60 69 76 1 + 60 69 77 1 + 60 69 78 1 + 60 69 79 1 + 60 69 80 1 + 60 69 81 1 + 60 69 82 1 + 60 69 83 1 + 60 69 84 1 + 60 69 85 1 + 60 69 86 1 + 60 69 87 1 + 60 69 88 0.752526 + 60 70 39 0.508892 + 60 70 40 1 + 60 70 41 1 + 60 70 42 1 + 60 70 43 1 + 60 70 44 1 + 60 70 45 1 + 60 70 46 1 + 60 70 47 1 + 60 70 48 1 + 60 70 49 1 + 60 70 50 1 + 60 70 51 1 + 60 70 52 1 + 60 70 53 1 + 60 70 54 1 + 60 70 55 1 + 60 70 56 1 + 60 70 57 1 + 60 70 58 1 + 60 70 59 1 + 60 70 60 1 + 60 70 61 1 + 60 70 62 1 + 60 70 63 1 + 60 70 64 1 + 60 70 65 1 + 60 70 66 1 + 60 70 67 1 + 60 70 68 1 + 60 70 69 1 + 60 70 70 1 + 60 70 71 1 + 60 70 72 1 + 60 70 73 1 + 60 70 74 1 + 60 70 75 1 + 60 70 76 1 + 60 70 77 1 + 60 70 78 1 + 60 70 79 1 + 60 70 80 1 + 60 70 81 1 + 60 70 82 1 + 60 70 83 1 + 60 70 84 1 + 60 70 85 1 + 60 70 86 1 + 60 70 87 1 + 60 70 88 0.508892 + 60 71 39 0.221559 + 60 71 40 0.999993 + 60 71 41 1 + 60 71 42 1 + 60 71 43 1 + 60 71 44 1 + 60 71 45 1 + 60 71 46 1 + 60 71 47 1 + 60 71 48 1 + 60 71 49 1 + 60 71 50 1 + 60 71 51 1 + 60 71 52 1 + 60 71 53 1 + 60 71 54 1 + 60 71 55 1 + 60 71 56 1 + 60 71 57 1 + 60 71 58 1 + 60 71 59 1 + 60 71 60 1 + 60 71 61 1 + 60 71 62 1 + 60 71 63 1 + 60 71 64 1 + 60 71 65 1 + 60 71 66 1 + 60 71 67 1 + 60 71 68 1 + 60 71 69 1 + 60 71 70 1 + 60 71 71 1 + 60 71 72 1 + 60 71 73 1 + 60 71 74 1 + 60 71 75 1 + 60 71 76 1 + 60 71 77 1 + 60 71 78 1 + 60 71 79 1 + 60 71 80 1 + 60 71 81 1 + 60 71 82 1 + 60 71 83 1 + 60 71 84 1 + 60 71 85 1 + 60 71 86 1 + 60 71 87 0.999993 + 60 71 88 0.221559 + 60 72 39 0.00850155 + 60 72 40 0.880429 + 60 72 41 1 + 60 72 42 1 + 60 72 43 1 + 60 72 44 1 + 60 72 45 1 + 60 72 46 1 + 60 72 47 1 + 60 72 48 1 + 60 72 49 1 + 60 72 50 1 + 60 72 51 1 + 60 72 52 1 + 60 72 53 1 + 60 72 54 1 + 60 72 55 1 + 60 72 56 1 + 60 72 57 1 + 60 72 58 1 + 60 72 59 1 + 60 72 60 1 + 60 72 61 1 + 60 72 62 1 + 60 72 63 1 + 60 72 64 1 + 60 72 65 1 + 60 72 66 1 + 60 72 67 1 + 60 72 68 1 + 60 72 69 1 + 60 72 70 1 + 60 72 71 1 + 60 72 72 1 + 60 72 73 1 + 60 72 74 1 + 60 72 75 1 + 60 72 76 1 + 60 72 77 1 + 60 72 78 1 + 60 72 79 1 + 60 72 80 1 + 60 72 81 1 + 60 72 82 1 + 60 72 83 1 + 60 72 84 1 + 60 72 85 1 + 60 72 86 1 + 60 72 87 0.880429 + 60 72 88 0.00850155 + 60 73 40 0.509102 + 60 73 41 1 + 60 73 42 1 + 60 73 43 1 + 60 73 44 1 + 60 73 45 1 + 60 73 46 1 + 60 73 47 1 + 60 73 48 1 + 60 73 49 1 + 60 73 50 1 + 60 73 51 1 + 60 73 52 1 + 60 73 53 1 + 60 73 54 1 + 60 73 55 1 + 60 73 56 1 + 60 73 57 1 + 60 73 58 1 + 60 73 59 1 + 60 73 60 1 + 60 73 61 1 + 60 73 62 1 + 60 73 63 1 + 60 73 64 1 + 60 73 65 1 + 60 73 66 1 + 60 73 67 1 + 60 73 68 1 + 60 73 69 1 + 60 73 70 1 + 60 73 71 1 + 60 73 72 1 + 60 73 73 1 + 60 73 74 1 + 60 73 75 1 + 60 73 76 1 + 60 73 77 1 + 60 73 78 1 + 60 73 79 1 + 60 73 80 1 + 60 73 81 1 + 60 73 82 1 + 60 73 83 1 + 60 73 84 1 + 60 73 85 1 + 60 73 86 1 + 60 73 87 0.509102 + 60 74 40 0.106145 + 60 74 41 0.97359 + 60 74 42 1 + 60 74 43 1 + 60 74 44 1 + 60 74 45 1 + 60 74 46 1 + 60 74 47 1 + 60 74 48 1 + 60 74 49 1 + 60 74 50 1 + 60 74 51 1 + 60 74 52 1 + 60 74 53 1 + 60 74 54 1 + 60 74 55 1 + 60 74 56 1 + 60 74 57 1 + 60 74 58 1 + 60 74 59 1 + 60 74 60 1 + 60 74 61 1 + 60 74 62 1 + 60 74 63 1 + 60 74 64 1 + 60 74 65 1 + 60 74 66 1 + 60 74 67 1 + 60 74 68 1 + 60 74 69 1 + 60 74 70 1 + 60 74 71 1 + 60 74 72 1 + 60 74 73 1 + 60 74 74 1 + 60 74 75 1 + 60 74 76 1 + 60 74 77 1 + 60 74 78 1 + 60 74 79 1 + 60 74 80 1 + 60 74 81 1 + 60 74 82 1 + 60 74 83 1 + 60 74 84 1 + 60 74 85 1 + 60 74 86 0.97359 + 60 74 87 0.106145 + 60 75 41 0.598003 + 60 75 42 1 + 60 75 43 1 + 60 75 44 1 + 60 75 45 1 + 60 75 46 1 + 60 75 47 1 + 60 75 48 1 + 60 75 49 1 + 60 75 50 1 + 60 75 51 1 + 60 75 52 1 + 60 75 53 1 + 60 75 54 1 + 60 75 55 1 + 60 75 56 1 + 60 75 57 1 + 60 75 58 1 + 60 75 59 1 + 60 75 60 1 + 60 75 61 1 + 60 75 62 1 + 60 75 63 1 + 60 75 64 1 + 60 75 65 1 + 60 75 66 1 + 60 75 67 1 + 60 75 68 1 + 60 75 69 1 + 60 75 70 1 + 60 75 71 1 + 60 75 72 1 + 60 75 73 1 + 60 75 74 1 + 60 75 75 1 + 60 75 76 1 + 60 75 77 1 + 60 75 78 1 + 60 75 79 1 + 60 75 80 1 + 60 75 81 1 + 60 75 82 1 + 60 75 83 1 + 60 75 84 1 + 60 75 85 1 + 60 75 86 0.598003 + 60 76 41 0.106397 + 60 76 42 0.954076 + 60 76 43 1 + 60 76 44 1 + 60 76 45 1 + 60 76 46 1 + 60 76 47 1 + 60 76 48 1 + 60 76 49 1 + 60 76 50 1 + 60 76 51 1 + 60 76 52 1 + 60 76 53 1 + 60 76 54 1 + 60 76 55 1 + 60 76 56 1 + 60 76 57 1 + 60 76 58 1 + 60 76 59 1 + 60 76 60 1 + 60 76 61 1 + 60 76 62 1 + 60 76 63 1 + 60 76 64 1 + 60 76 65 1 + 60 76 66 1 + 60 76 67 1 + 60 76 68 1 + 60 76 69 1 + 60 76 70 1 + 60 76 71 1 + 60 76 72 1 + 60 76 73 1 + 60 76 74 1 + 60 76 75 1 + 60 76 76 1 + 60 76 77 1 + 60 76 78 1 + 60 76 79 1 + 60 76 80 1 + 60 76 81 1 + 60 76 82 1 + 60 76 83 1 + 60 76 84 1 + 60 76 85 0.954076 + 60 76 86 0.106397 + 60 77 42 0.462948 + 60 77 43 1 + 60 77 44 1 + 60 77 45 1 + 60 77 46 1 + 60 77 47 1 + 60 77 48 1 + 60 77 49 1 + 60 77 50 1 + 60 77 51 1 + 60 77 52 1 + 60 77 53 1 + 60 77 54 1 + 60 77 55 1 + 60 77 56 1 + 60 77 57 1 + 60 77 58 1 + 60 77 59 1 + 60 77 60 1 + 60 77 61 1 + 60 77 62 1 + 60 77 63 1 + 60 77 64 1 + 60 77 65 1 + 60 77 66 1 + 60 77 67 1 + 60 77 68 1 + 60 77 69 1 + 60 77 70 1 + 60 77 71 1 + 60 77 72 1 + 60 77 73 1 + 60 77 74 1 + 60 77 75 1 + 60 77 76 1 + 60 77 77 1 + 60 77 78 1 + 60 77 79 1 + 60 77 80 1 + 60 77 81 1 + 60 77 82 1 + 60 77 83 1 + 60 77 84 1 + 60 77 85 0.462948 + 60 78 42 0.0170305 + 60 78 43 0.783221 + 60 78 44 1 + 60 78 45 1 + 60 78 46 1 + 60 78 47 1 + 60 78 48 1 + 60 78 49 1 + 60 78 50 1 + 60 78 51 1 + 60 78 52 1 + 60 78 53 1 + 60 78 54 1 + 60 78 55 1 + 60 78 56 1 + 60 78 57 1 + 60 78 58 1 + 60 78 59 1 + 60 78 60 1 + 60 78 61 1 + 60 78 62 1 + 60 78 63 1 + 60 78 64 1 + 60 78 65 1 + 60 78 66 1 + 60 78 67 1 + 60 78 68 1 + 60 78 69 1 + 60 78 70 1 + 60 78 71 1 + 60 78 72 1 + 60 78 73 1 + 60 78 74 1 + 60 78 75 1 + 60 78 76 1 + 60 78 77 1 + 60 78 78 1 + 60 78 79 1 + 60 78 80 1 + 60 78 81 1 + 60 78 82 1 + 60 78 83 1 + 60 78 84 0.783221 + 60 78 85 0.0170305 + 60 79 43 0.134257 + 60 79 44 0.93166 + 60 79 45 1 + 60 79 46 1 + 60 79 47 1 + 60 79 48 1 + 60 79 49 1 + 60 79 50 1 + 60 79 51 1 + 60 79 52 1 + 60 79 53 1 + 60 79 54 1 + 60 79 55 1 + 60 79 56 1 + 60 79 57 1 + 60 79 58 1 + 60 79 59 1 + 60 79 60 1 + 60 79 61 1 + 60 79 62 1 + 60 79 63 1 + 60 79 64 1 + 60 79 65 1 + 60 79 66 1 + 60 79 67 1 + 60 79 68 1 + 60 79 69 1 + 60 79 70 1 + 60 79 71 1 + 60 79 72 1 + 60 79 73 1 + 60 79 74 1 + 60 79 75 1 + 60 79 76 1 + 60 79 77 1 + 60 79 78 1 + 60 79 79 1 + 60 79 80 1 + 60 79 81 1 + 60 79 82 1 + 60 79 83 0.93166 + 60 79 84 0.134257 + 60 80 44 0.27231 + 60 80 45 0.979426 + 60 80 46 1 + 60 80 47 1 + 60 80 48 1 + 60 80 49 1 + 60 80 50 1 + 60 80 51 1 + 60 80 52 1 + 60 80 53 1 + 60 80 54 1 + 60 80 55 1 + 60 80 56 1 + 60 80 57 1 + 60 80 58 1 + 60 80 59 1 + 60 80 60 1 + 60 80 61 1 + 60 80 62 1 + 60 80 63 1 + 60 80 64 1 + 60 80 65 1 + 60 80 66 1 + 60 80 67 1 + 60 80 68 1 + 60 80 69 1 + 60 80 70 1 + 60 80 71 1 + 60 80 72 1 + 60 80 73 1 + 60 80 74 1 + 60 80 75 1 + 60 80 76 1 + 60 80 77 1 + 60 80 78 1 + 60 80 79 1 + 60 80 80 1 + 60 80 81 1 + 60 80 82 0.979426 + 60 80 83 0.27231 + 60 81 45 0.358249 + 60 81 46 0.988806 + 60 81 47 1 + 60 81 48 1 + 60 81 49 1 + 60 81 50 1 + 60 81 51 1 + 60 81 52 1 + 60 81 53 1 + 60 81 54 1 + 60 81 55 1 + 60 81 56 1 + 60 81 57 1 + 60 81 58 1 + 60 81 59 1 + 60 81 60 1 + 60 81 61 1 + 60 81 62 1 + 60 81 63 1 + 60 81 64 1 + 60 81 65 1 + 60 81 66 1 + 60 81 67 1 + 60 81 68 1 + 60 81 69 1 + 60 81 70 1 + 60 81 71 1 + 60 81 72 1 + 60 81 73 1 + 60 81 74 1 + 60 81 75 1 + 60 81 76 1 + 60 81 77 1 + 60 81 78 1 + 60 81 79 1 + 60 81 80 1 + 60 81 81 0.988806 + 60 81 82 0.358249 + 60 82 46 0.358249 + 60 82 47 0.979426 + 60 82 48 1 + 60 82 49 1 + 60 82 50 1 + 60 82 51 1 + 60 82 52 1 + 60 82 53 1 + 60 82 54 1 + 60 82 55 1 + 60 82 56 1 + 60 82 57 1 + 60 82 58 1 + 60 82 59 1 + 60 82 60 1 + 60 82 61 1 + 60 82 62 1 + 60 82 63 1 + 60 82 64 1 + 60 82 65 1 + 60 82 66 1 + 60 82 67 1 + 60 82 68 1 + 60 82 69 1 + 60 82 70 1 + 60 82 71 1 + 60 82 72 1 + 60 82 73 1 + 60 82 74 1 + 60 82 75 1 + 60 82 76 1 + 60 82 77 1 + 60 82 78 1 + 60 82 79 1 + 60 82 80 0.979426 + 60 82 81 0.358249 + 60 83 47 0.27231 + 60 83 48 0.93166 + 60 83 49 1 + 60 83 50 1 + 60 83 51 1 + 60 83 52 1 + 60 83 53 1 + 60 83 54 1 + 60 83 55 1 + 60 83 56 1 + 60 83 57 1 + 60 83 58 1 + 60 83 59 1 + 60 83 60 1 + 60 83 61 1 + 60 83 62 1 + 60 83 63 1 + 60 83 64 1 + 60 83 65 1 + 60 83 66 1 + 60 83 67 1 + 60 83 68 1 + 60 83 69 1 + 60 83 70 1 + 60 83 71 1 + 60 83 72 1 + 60 83 73 1 + 60 83 74 1 + 60 83 75 1 + 60 83 76 1 + 60 83 77 1 + 60 83 78 1 + 60 83 79 0.93166 + 60 83 80 0.27231 + 60 84 48 0.134257 + 60 84 49 0.783221 + 60 84 50 1 + 60 84 51 1 + 60 84 52 1 + 60 84 53 1 + 60 84 54 1 + 60 84 55 1 + 60 84 56 1 + 60 84 57 1 + 60 84 58 1 + 60 84 59 1 + 60 84 60 1 + 60 84 61 1 + 60 84 62 1 + 60 84 63 1 + 60 84 64 1 + 60 84 65 1 + 60 84 66 1 + 60 84 67 1 + 60 84 68 1 + 60 84 69 1 + 60 84 70 1 + 60 84 71 1 + 60 84 72 1 + 60 84 73 1 + 60 84 74 1 + 60 84 75 1 + 60 84 76 1 + 60 84 77 1 + 60 84 78 0.783221 + 60 84 79 0.134257 + 60 85 49 0.0170305 + 60 85 50 0.462948 + 60 85 51 0.954076 + 60 85 52 1 + 60 85 53 1 + 60 85 54 1 + 60 85 55 1 + 60 85 56 1 + 60 85 57 1 + 60 85 58 1 + 60 85 59 1 + 60 85 60 1 + 60 85 61 1 + 60 85 62 1 + 60 85 63 1 + 60 85 64 1 + 60 85 65 1 + 60 85 66 1 + 60 85 67 1 + 60 85 68 1 + 60 85 69 1 + 60 85 70 1 + 60 85 71 1 + 60 85 72 1 + 60 85 73 1 + 60 85 74 1 + 60 85 75 1 + 60 85 76 0.954076 + 60 85 77 0.462948 + 60 85 78 0.0170305 + 60 86 51 0.106397 + 60 86 52 0.598003 + 60 86 53 0.97359 + 60 86 54 1 + 60 86 55 1 + 60 86 56 1 + 60 86 57 1 + 60 86 58 1 + 60 86 59 1 + 60 86 60 1 + 60 86 61 1 + 60 86 62 1 + 60 86 63 1 + 60 86 64 1 + 60 86 65 1 + 60 86 66 1 + 60 86 67 1 + 60 86 68 1 + 60 86 69 1 + 60 86 70 1 + 60 86 71 1 + 60 86 72 1 + 60 86 73 1 + 60 86 74 0.97359 + 60 86 75 0.598003 + 60 86 76 0.106397 + 60 87 53 0.106145 + 60 87 54 0.509102 + 60 87 55 0.880429 + 60 87 56 0.999993 + 60 87 57 1 + 60 87 58 1 + 60 87 59 1 + 60 87 60 1 + 60 87 61 1 + 60 87 62 1 + 60 87 63 1 + 60 87 64 1 + 60 87 65 1 + 60 87 66 1 + 60 87 67 1 + 60 87 68 1 + 60 87 69 1 + 60 87 70 1 + 60 87 71 0.999993 + 60 87 72 0.880429 + 60 87 73 0.509102 + 60 87 74 0.106145 + 60 88 55 0.00850155 + 60 88 56 0.221559 + 60 88 57 0.508892 + 60 88 58 0.752526 + 60 88 59 0.944121 + 60 88 60 0.999764 + 60 88 61 1 + 60 88 62 1 + 60 88 63 1 + 60 88 64 1 + 60 88 65 1 + 60 88 66 1 + 60 88 67 0.999764 + 60 88 68 0.944121 + 60 88 69 0.752526 + 60 88 70 0.508892 + 60 88 71 0.221559 + 60 88 72 0.00850155 + 60 89 59 0.00961546 + 60 89 60 0.11378 + 60 89 61 0.232735 + 60 89 62 0.311883 + 60 89 63 0.351365 + 60 89 64 0.351365 + 60 89 65 0.311883 + 60 89 66 0.232735 + 60 89 67 0.11378 + 60 89 68 0.00961546 + 61 38 58 0.000200097 + 61 38 59 0.0765779 + 61 38 60 0.232735 + 61 38 61 0.351365 + 61 38 62 0.430144 + 61 38 63 0.469442 + 61 38 64 0.469442 + 61 38 65 0.430144 + 61 38 66 0.351365 + 61 38 67 0.232735 + 61 38 68 0.0765779 + 61 38 69 0.000200097 + 61 39 55 0.0529903 + 61 39 56 0.345113 + 61 39 57 0.63101 + 61 39 58 0.873248 + 61 39 59 0.99711 + 61 39 60 1 + 61 39 61 1 + 61 39 62 1 + 61 39 63 1 + 61 39 64 1 + 61 39 65 1 + 61 39 66 1 + 61 39 67 1 + 61 39 68 0.99711 + 61 39 69 0.873248 + 61 39 70 0.63101 + 61 39 71 0.345113 + 61 39 72 0.0529903 + 61 40 52 9.9388e-05 + 61 40 53 0.210787 + 61 40 54 0.63639 + 61 40 55 0.961214 + 61 40 56 1 + 61 40 57 1 + 61 40 58 1 + 61 40 59 1 + 61 40 60 1 + 61 40 61 1 + 61 40 62 1 + 61 40 63 1 + 61 40 64 1 + 61 40 65 1 + 61 40 66 1 + 61 40 67 1 + 61 40 68 1 + 61 40 69 1 + 61 40 70 1 + 61 40 71 1 + 61 40 72 0.961214 + 61 40 73 0.63639 + 61 40 74 0.210787 + 61 40 75 9.9388e-05 + 61 41 51 0.203942 + 61 41 52 0.730298 + 61 41 53 0.998593 + 61 41 54 1 + 61 41 55 1 + 61 41 56 1 + 61 41 57 1 + 61 41 58 1 + 61 41 59 1 + 61 41 60 1 + 61 41 61 1 + 61 41 62 1 + 61 41 63 1 + 61 41 64 1 + 61 41 65 1 + 61 41 66 1 + 61 41 67 1 + 61 41 68 1 + 61 41 69 1 + 61 41 70 1 + 61 41 71 1 + 61 41 72 1 + 61 41 73 1 + 61 41 74 0.998593 + 61 41 75 0.730298 + 61 41 76 0.203942 + 61 42 49 0.061458 + 61 42 50 0.602307 + 61 42 51 0.992135 + 61 42 52 1 + 61 42 53 1 + 61 42 54 1 + 61 42 55 1 + 61 42 56 1 + 61 42 57 1 + 61 42 58 1 + 61 42 59 1 + 61 42 60 1 + 61 42 61 1 + 61 42 62 1 + 61 42 63 1 + 61 42 64 1 + 61 42 65 1 + 61 42 66 1 + 61 42 67 1 + 61 42 68 1 + 61 42 69 1 + 61 42 70 1 + 61 42 71 1 + 61 42 72 1 + 61 42 73 1 + 61 42 74 1 + 61 42 75 1 + 61 42 76 0.992135 + 61 42 77 0.602307 + 61 42 78 0.061458 + 61 43 48 0.234894 + 61 43 49 0.882567 + 61 43 50 1 + 61 43 51 1 + 61 43 52 1 + 61 43 53 1 + 61 43 54 1 + 61 43 55 1 + 61 43 56 1 + 61 43 57 1 + 61 43 58 1 + 61 43 59 1 + 61 43 60 1 + 61 43 61 1 + 61 43 62 1 + 61 43 63 1 + 61 43 64 1 + 61 43 65 1 + 61 43 66 1 + 61 43 67 1 + 61 43 68 1 + 61 43 69 1 + 61 43 70 1 + 61 43 71 1 + 61 43 72 1 + 61 43 73 1 + 61 43 74 1 + 61 43 75 1 + 61 43 76 1 + 61 43 77 1 + 61 43 78 0.882567 + 61 43 79 0.234894 + 61 44 46 7.7901e-05 + 61 44 47 0.408101 + 61 44 48 0.980027 + 61 44 49 1 + 61 44 50 1 + 61 44 51 1 + 61 44 52 1 + 61 44 53 1 + 61 44 54 1 + 61 44 55 1 + 61 44 56 1 + 61 44 57 1 + 61 44 58 1 + 61 44 59 1 + 61 44 60 1 + 61 44 61 1 + 61 44 62 1 + 61 44 63 1 + 61 44 64 1 + 61 44 65 1 + 61 44 66 1 + 61 44 67 1 + 61 44 68 1 + 61 44 69 1 + 61 44 70 1 + 61 44 71 1 + 61 44 72 1 + 61 44 73 1 + 61 44 74 1 + 61 44 75 1 + 61 44 76 1 + 61 44 77 1 + 61 44 78 1 + 61 44 79 0.980027 + 61 44 80 0.408101 + 61 44 81 7.7901e-05 + 61 45 45 0.0011128 + 61 45 46 0.509943 + 61 45 47 0.9989 + 61 45 48 1 + 61 45 49 1 + 61 45 50 1 + 61 45 51 1 + 61 45 52 1 + 61 45 53 1 + 61 45 54 1 + 61 45 55 1 + 61 45 56 1 + 61 45 57 1 + 61 45 58 1 + 61 45 59 1 + 61 45 60 1 + 61 45 61 1 + 61 45 62 1 + 61 45 63 1 + 61 45 64 1 + 61 45 65 1 + 61 45 66 1 + 61 45 67 1 + 61 45 68 1 + 61 45 69 1 + 61 45 70 1 + 61 45 71 1 + 61 45 72 1 + 61 45 73 1 + 61 45 74 1 + 61 45 75 1 + 61 45 76 1 + 61 45 77 1 + 61 45 78 1 + 61 45 79 1 + 61 45 80 0.9989 + 61 45 81 0.509943 + 61 45 82 0.0011128 + 61 46 44 7.7901e-05 + 61 46 45 0.509943 + 61 46 46 0.999903 + 61 46 47 1 + 61 46 48 1 + 61 46 49 1 + 61 46 50 1 + 61 46 51 1 + 61 46 52 1 + 61 46 53 1 + 61 46 54 1 + 61 46 55 1 + 61 46 56 1 + 61 46 57 1 + 61 46 58 1 + 61 46 59 1 + 61 46 60 1 + 61 46 61 1 + 61 46 62 1 + 61 46 63 1 + 61 46 64 1 + 61 46 65 1 + 61 46 66 1 + 61 46 67 1 + 61 46 68 1 + 61 46 69 1 + 61 46 70 1 + 61 46 71 1 + 61 46 72 1 + 61 46 73 1 + 61 46 74 1 + 61 46 75 1 + 61 46 76 1 + 61 46 77 1 + 61 46 78 1 + 61 46 79 1 + 61 46 80 1 + 61 46 81 0.999903 + 61 46 82 0.509943 + 61 46 83 7.7901e-05 + 61 47 44 0.408101 + 61 47 45 0.9989 + 61 47 46 1 + 61 47 47 1 + 61 47 48 1 + 61 47 49 1 + 61 47 50 1 + 61 47 51 1 + 61 47 52 1 + 61 47 53 1 + 61 47 54 1 + 61 47 55 1 + 61 47 56 1 + 61 47 57 1 + 61 47 58 1 + 61 47 59 1 + 61 47 60 1 + 61 47 61 1 + 61 47 62 1 + 61 47 63 1 + 61 47 64 1 + 61 47 65 1 + 61 47 66 1 + 61 47 67 1 + 61 47 68 1 + 61 47 69 1 + 61 47 70 1 + 61 47 71 1 + 61 47 72 1 + 61 47 73 1 + 61 47 74 1 + 61 47 75 1 + 61 47 76 1 + 61 47 77 1 + 61 47 78 1 + 61 47 79 1 + 61 47 80 1 + 61 47 81 1 + 61 47 82 0.9989 + 61 47 83 0.408101 + 61 48 43 0.234894 + 61 48 44 0.980027 + 61 48 45 1 + 61 48 46 1 + 61 48 47 1 + 61 48 48 1 + 61 48 49 1 + 61 48 50 1 + 61 48 51 1 + 61 48 52 1 + 61 48 53 1 + 61 48 54 1 + 61 48 55 1 + 61 48 56 1 + 61 48 57 1 + 61 48 58 1 + 61 48 59 1 + 61 48 60 1 + 61 48 61 1 + 61 48 62 1 + 61 48 63 1 + 61 48 64 1 + 61 48 65 1 + 61 48 66 1 + 61 48 67 1 + 61 48 68 1 + 61 48 69 1 + 61 48 70 1 + 61 48 71 1 + 61 48 72 1 + 61 48 73 1 + 61 48 74 1 + 61 48 75 1 + 61 48 76 1 + 61 48 77 1 + 61 48 78 1 + 61 48 79 1 + 61 48 80 1 + 61 48 81 1 + 61 48 82 1 + 61 48 83 0.980027 + 61 48 84 0.234894 + 61 49 42 0.061458 + 61 49 43 0.882567 + 61 49 44 1 + 61 49 45 1 + 61 49 46 1 + 61 49 47 1 + 61 49 48 1 + 61 49 49 1 + 61 49 50 1 + 61 49 51 1 + 61 49 52 1 + 61 49 53 1 + 61 49 54 1 + 61 49 55 1 + 61 49 56 1 + 61 49 57 1 + 61 49 58 1 + 61 49 59 1 + 61 49 60 1 + 61 49 61 1 + 61 49 62 1 + 61 49 63 1 + 61 49 64 1 + 61 49 65 1 + 61 49 66 1 + 61 49 67 1 + 61 49 68 1 + 61 49 69 1 + 61 49 70 1 + 61 49 71 1 + 61 49 72 1 + 61 49 73 1 + 61 49 74 1 + 61 49 75 1 + 61 49 76 1 + 61 49 77 1 + 61 49 78 1 + 61 49 79 1 + 61 49 80 1 + 61 49 81 1 + 61 49 82 1 + 61 49 83 1 + 61 49 84 0.882567 + 61 49 85 0.061458 + 61 50 42 0.602307 + 61 50 43 1 + 61 50 44 1 + 61 50 45 1 + 61 50 46 1 + 61 50 47 1 + 61 50 48 1 + 61 50 49 1 + 61 50 50 1 + 61 50 51 1 + 61 50 52 1 + 61 50 53 1 + 61 50 54 1 + 61 50 55 1 + 61 50 56 1 + 61 50 57 1 + 61 50 58 1 + 61 50 59 1 + 61 50 60 1 + 61 50 61 1 + 61 50 62 1 + 61 50 63 1 + 61 50 64 1 + 61 50 65 1 + 61 50 66 1 + 61 50 67 1 + 61 50 68 1 + 61 50 69 1 + 61 50 70 1 + 61 50 71 1 + 61 50 72 1 + 61 50 73 1 + 61 50 74 1 + 61 50 75 1 + 61 50 76 1 + 61 50 77 1 + 61 50 78 1 + 61 50 79 1 + 61 50 80 1 + 61 50 81 1 + 61 50 82 1 + 61 50 83 1 + 61 50 84 1 + 61 50 85 0.602307 + 61 51 41 0.203942 + 61 51 42 0.992135 + 61 51 43 1 + 61 51 44 1 + 61 51 45 1 + 61 51 46 1 + 61 51 47 1 + 61 51 48 1 + 61 51 49 1 + 61 51 50 1 + 61 51 51 1 + 61 51 52 1 + 61 51 53 1 + 61 51 54 1 + 61 51 55 1 + 61 51 56 1 + 61 51 57 1 + 61 51 58 1 + 61 51 59 1 + 61 51 60 1 + 61 51 61 1 + 61 51 62 1 + 61 51 63 1 + 61 51 64 1 + 61 51 65 1 + 61 51 66 1 + 61 51 67 1 + 61 51 68 1 + 61 51 69 1 + 61 51 70 1 + 61 51 71 1 + 61 51 72 1 + 61 51 73 1 + 61 51 74 1 + 61 51 75 1 + 61 51 76 1 + 61 51 77 1 + 61 51 78 1 + 61 51 79 1 + 61 51 80 1 + 61 51 81 1 + 61 51 82 1 + 61 51 83 1 + 61 51 84 1 + 61 51 85 0.992135 + 61 51 86 0.203942 + 61 52 40 9.9388e-05 + 61 52 41 0.730298 + 61 52 42 1 + 61 52 43 1 + 61 52 44 1 + 61 52 45 1 + 61 52 46 1 + 61 52 47 1 + 61 52 48 1 + 61 52 49 1 + 61 52 50 1 + 61 52 51 1 + 61 52 52 1 + 61 52 53 1 + 61 52 54 1 + 61 52 55 1 + 61 52 56 1 + 61 52 57 1 + 61 52 58 1 + 61 52 59 1 + 61 52 60 1 + 61 52 61 1 + 61 52 62 1 + 61 52 63 1 + 61 52 64 1 + 61 52 65 1 + 61 52 66 1 + 61 52 67 1 + 61 52 68 1 + 61 52 69 1 + 61 52 70 1 + 61 52 71 1 + 61 52 72 1 + 61 52 73 1 + 61 52 74 1 + 61 52 75 1 + 61 52 76 1 + 61 52 77 1 + 61 52 78 1 + 61 52 79 1 + 61 52 80 1 + 61 52 81 1 + 61 52 82 1 + 61 52 83 1 + 61 52 84 1 + 61 52 85 1 + 61 52 86 0.730298 + 61 52 87 9.9388e-05 + 61 53 40 0.210787 + 61 53 41 0.998593 + 61 53 42 1 + 61 53 43 1 + 61 53 44 1 + 61 53 45 1 + 61 53 46 1 + 61 53 47 1 + 61 53 48 1 + 61 53 49 1 + 61 53 50 1 + 61 53 51 1 + 61 53 52 1 + 61 53 53 1 + 61 53 54 1 + 61 53 55 1 + 61 53 56 1 + 61 53 57 1 + 61 53 58 1 + 61 53 59 1 + 61 53 60 1 + 61 53 61 1 + 61 53 62 1 + 61 53 63 1 + 61 53 64 1 + 61 53 65 1 + 61 53 66 1 + 61 53 67 1 + 61 53 68 1 + 61 53 69 1 + 61 53 70 1 + 61 53 71 1 + 61 53 72 1 + 61 53 73 1 + 61 53 74 1 + 61 53 75 1 + 61 53 76 1 + 61 53 77 1 + 61 53 78 1 + 61 53 79 1 + 61 53 80 1 + 61 53 81 1 + 61 53 82 1 + 61 53 83 1 + 61 53 84 1 + 61 53 85 1 + 61 53 86 0.998593 + 61 53 87 0.210787 + 61 54 40 0.63639 + 61 54 41 1 + 61 54 42 1 + 61 54 43 1 + 61 54 44 1 + 61 54 45 1 + 61 54 46 1 + 61 54 47 1 + 61 54 48 1 + 61 54 49 1 + 61 54 50 1 + 61 54 51 1 + 61 54 52 1 + 61 54 53 1 + 61 54 54 1 + 61 54 55 1 + 61 54 56 1 + 61 54 57 1 + 61 54 58 1 + 61 54 59 1 + 61 54 60 1 + 61 54 61 1 + 61 54 62 1 + 61 54 63 1 + 61 54 64 1 + 61 54 65 1 + 61 54 66 1 + 61 54 67 1 + 61 54 68 1 + 61 54 69 1 + 61 54 70 1 + 61 54 71 1 + 61 54 72 1 + 61 54 73 1 + 61 54 74 1 + 61 54 75 1 + 61 54 76 1 + 61 54 77 1 + 61 54 78 1 + 61 54 79 1 + 61 54 80 1 + 61 54 81 1 + 61 54 82 1 + 61 54 83 1 + 61 54 84 1 + 61 54 85 1 + 61 54 86 1 + 61 54 87 0.63639 + 61 55 39 0.0529903 + 61 55 40 0.961214 + 61 55 41 1 + 61 55 42 1 + 61 55 43 1 + 61 55 44 1 + 61 55 45 1 + 61 55 46 1 + 61 55 47 1 + 61 55 48 1 + 61 55 49 1 + 61 55 50 1 + 61 55 51 1 + 61 55 52 1 + 61 55 53 1 + 61 55 54 1 + 61 55 55 1 + 61 55 56 1 + 61 55 57 1 + 61 55 58 1 + 61 55 59 1 + 61 55 60 1 + 61 55 61 1 + 61 55 62 1 + 61 55 63 1 + 61 55 64 1 + 61 55 65 1 + 61 55 66 1 + 61 55 67 1 + 61 55 68 1 + 61 55 69 1 + 61 55 70 1 + 61 55 71 1 + 61 55 72 1 + 61 55 73 1 + 61 55 74 1 + 61 55 75 1 + 61 55 76 1 + 61 55 77 1 + 61 55 78 1 + 61 55 79 1 + 61 55 80 1 + 61 55 81 1 + 61 55 82 1 + 61 55 83 1 + 61 55 84 1 + 61 55 85 1 + 61 55 86 1 + 61 55 87 0.961214 + 61 55 88 0.0529903 + 61 56 39 0.345113 + 61 56 40 1 + 61 56 41 1 + 61 56 42 1 + 61 56 43 1 + 61 56 44 1 + 61 56 45 1 + 61 56 46 1 + 61 56 47 1 + 61 56 48 1 + 61 56 49 1 + 61 56 50 1 + 61 56 51 1 + 61 56 52 1 + 61 56 53 1 + 61 56 54 1 + 61 56 55 1 + 61 56 56 1 + 61 56 57 1 + 61 56 58 1 + 61 56 59 1 + 61 56 60 1 + 61 56 61 1 + 61 56 62 1 + 61 56 63 1 + 61 56 64 1 + 61 56 65 1 + 61 56 66 1 + 61 56 67 1 + 61 56 68 1 + 61 56 69 1 + 61 56 70 1 + 61 56 71 1 + 61 56 72 1 + 61 56 73 1 + 61 56 74 1 + 61 56 75 1 + 61 56 76 1 + 61 56 77 1 + 61 56 78 1 + 61 56 79 1 + 61 56 80 1 + 61 56 81 1 + 61 56 82 1 + 61 56 83 1 + 61 56 84 1 + 61 56 85 1 + 61 56 86 1 + 61 56 87 1 + 61 56 88 0.345113 + 61 57 39 0.63101 + 61 57 40 1 + 61 57 41 1 + 61 57 42 1 + 61 57 43 1 + 61 57 44 1 + 61 57 45 1 + 61 57 46 1 + 61 57 47 1 + 61 57 48 1 + 61 57 49 1 + 61 57 50 1 + 61 57 51 1 + 61 57 52 1 + 61 57 53 1 + 61 57 54 1 + 61 57 55 1 + 61 57 56 1 + 61 57 57 1 + 61 57 58 1 + 61 57 59 1 + 61 57 60 1 + 61 57 61 1 + 61 57 62 1 + 61 57 63 1 + 61 57 64 1 + 61 57 65 1 + 61 57 66 1 + 61 57 67 1 + 61 57 68 1 + 61 57 69 1 + 61 57 70 1 + 61 57 71 1 + 61 57 72 1 + 61 57 73 1 + 61 57 74 1 + 61 57 75 1 + 61 57 76 1 + 61 57 77 1 + 61 57 78 1 + 61 57 79 1 + 61 57 80 1 + 61 57 81 1 + 61 57 82 1 + 61 57 83 1 + 61 57 84 1 + 61 57 85 1 + 61 57 86 1 + 61 57 87 1 + 61 57 88 0.63101 + 61 58 38 0.000200097 + 61 58 39 0.873248 + 61 58 40 1 + 61 58 41 1 + 61 58 42 1 + 61 58 43 1 + 61 58 44 1 + 61 58 45 1 + 61 58 46 1 + 61 58 47 1 + 61 58 48 1 + 61 58 49 1 + 61 58 50 1 + 61 58 51 1 + 61 58 52 1 + 61 58 53 1 + 61 58 54 1 + 61 58 55 1 + 61 58 56 1 + 61 58 57 1 + 61 58 58 1 + 61 58 59 1 + 61 58 60 1 + 61 58 61 1 + 61 58 62 1 + 61 58 63 1 + 61 58 64 1 + 61 58 65 1 + 61 58 66 1 + 61 58 67 1 + 61 58 68 1 + 61 58 69 1 + 61 58 70 1 + 61 58 71 1 + 61 58 72 1 + 61 58 73 1 + 61 58 74 1 + 61 58 75 1 + 61 58 76 1 + 61 58 77 1 + 61 58 78 1 + 61 58 79 1 + 61 58 80 1 + 61 58 81 1 + 61 58 82 1 + 61 58 83 1 + 61 58 84 1 + 61 58 85 1 + 61 58 86 1 + 61 58 87 1 + 61 58 88 0.873248 + 61 58 89 0.000200097 + 61 59 38 0.0765779 + 61 59 39 0.99711 + 61 59 40 1 + 61 59 41 1 + 61 59 42 1 + 61 59 43 1 + 61 59 44 1 + 61 59 45 1 + 61 59 46 1 + 61 59 47 1 + 61 59 48 1 + 61 59 49 1 + 61 59 50 1 + 61 59 51 1 + 61 59 52 1 + 61 59 53 1 + 61 59 54 1 + 61 59 55 1 + 61 59 56 1 + 61 59 57 1 + 61 59 58 1 + 61 59 59 1 + 61 59 60 1 + 61 59 61 1 + 61 59 62 1 + 61 59 63 1 + 61 59 64 1 + 61 59 65 1 + 61 59 66 1 + 61 59 67 1 + 61 59 68 1 + 61 59 69 1 + 61 59 70 1 + 61 59 71 1 + 61 59 72 1 + 61 59 73 1 + 61 59 74 1 + 61 59 75 1 + 61 59 76 1 + 61 59 77 1 + 61 59 78 1 + 61 59 79 1 + 61 59 80 1 + 61 59 81 1 + 61 59 82 1 + 61 59 83 1 + 61 59 84 1 + 61 59 85 1 + 61 59 86 1 + 61 59 87 1 + 61 59 88 0.99711 + 61 59 89 0.0765779 + 61 60 38 0.232735 + 61 60 39 1 + 61 60 40 1 + 61 60 41 1 + 61 60 42 1 + 61 60 43 1 + 61 60 44 1 + 61 60 45 1 + 61 60 46 1 + 61 60 47 1 + 61 60 48 1 + 61 60 49 1 + 61 60 50 1 + 61 60 51 1 + 61 60 52 1 + 61 60 53 1 + 61 60 54 1 + 61 60 55 1 + 61 60 56 1 + 61 60 57 1 + 61 60 58 1 + 61 60 59 1 + 61 60 60 1 + 61 60 61 1 + 61 60 62 1 + 61 60 63 1 + 61 60 64 1 + 61 60 65 1 + 61 60 66 1 + 61 60 67 1 + 61 60 68 1 + 61 60 69 1 + 61 60 70 1 + 61 60 71 1 + 61 60 72 1 + 61 60 73 1 + 61 60 74 1 + 61 60 75 1 + 61 60 76 1 + 61 60 77 1 + 61 60 78 1 + 61 60 79 1 + 61 60 80 1 + 61 60 81 1 + 61 60 82 1 + 61 60 83 1 + 61 60 84 1 + 61 60 85 1 + 61 60 86 1 + 61 60 87 1 + 61 60 88 1 + 61 60 89 0.232735 + 61 61 38 0.351365 + 61 61 39 1 + 61 61 40 1 + 61 61 41 1 + 61 61 42 1 + 61 61 43 1 + 61 61 44 1 + 61 61 45 1 + 61 61 46 1 + 61 61 47 1 + 61 61 48 1 + 61 61 49 1 + 61 61 50 1 + 61 61 51 1 + 61 61 52 1 + 61 61 53 1 + 61 61 54 1 + 61 61 55 1 + 61 61 56 1 + 61 61 57 1 + 61 61 58 1 + 61 61 59 1 + 61 61 60 1 + 61 61 61 1 + 61 61 62 1 + 61 61 63 1 + 61 61 64 1 + 61 61 65 1 + 61 61 66 1 + 61 61 67 1 + 61 61 68 1 + 61 61 69 1 + 61 61 70 1 + 61 61 71 1 + 61 61 72 1 + 61 61 73 1 + 61 61 74 1 + 61 61 75 1 + 61 61 76 1 + 61 61 77 1 + 61 61 78 1 + 61 61 79 1 + 61 61 80 1 + 61 61 81 1 + 61 61 82 1 + 61 61 83 1 + 61 61 84 1 + 61 61 85 1 + 61 61 86 1 + 61 61 87 1 + 61 61 88 1 + 61 61 89 0.351365 + 61 62 38 0.430144 + 61 62 39 1 + 61 62 40 1 + 61 62 41 1 + 61 62 42 1 + 61 62 43 1 + 61 62 44 1 + 61 62 45 1 + 61 62 46 1 + 61 62 47 1 + 61 62 48 1 + 61 62 49 1 + 61 62 50 1 + 61 62 51 1 + 61 62 52 1 + 61 62 53 1 + 61 62 54 1 + 61 62 55 1 + 61 62 56 1 + 61 62 57 1 + 61 62 58 1 + 61 62 59 1 + 61 62 60 1 + 61 62 61 1 + 61 62 62 1 + 61 62 63 1 + 61 62 64 1 + 61 62 65 1 + 61 62 66 1 + 61 62 67 1 + 61 62 68 1 + 61 62 69 1 + 61 62 70 1 + 61 62 71 1 + 61 62 72 1 + 61 62 73 1 + 61 62 74 1 + 61 62 75 1 + 61 62 76 1 + 61 62 77 1 + 61 62 78 1 + 61 62 79 1 + 61 62 80 1 + 61 62 81 1 + 61 62 82 1 + 61 62 83 1 + 61 62 84 1 + 61 62 85 1 + 61 62 86 1 + 61 62 87 1 + 61 62 88 1 + 61 62 89 0.430144 + 61 63 38 0.469442 + 61 63 39 1 + 61 63 40 1 + 61 63 41 1 + 61 63 42 1 + 61 63 43 1 + 61 63 44 1 + 61 63 45 1 + 61 63 46 1 + 61 63 47 1 + 61 63 48 1 + 61 63 49 1 + 61 63 50 1 + 61 63 51 1 + 61 63 52 1 + 61 63 53 1 + 61 63 54 1 + 61 63 55 1 + 61 63 56 1 + 61 63 57 1 + 61 63 58 1 + 61 63 59 1 + 61 63 60 1 + 61 63 61 1 + 61 63 62 1 + 61 63 63 1 + 61 63 64 1 + 61 63 65 1 + 61 63 66 1 + 61 63 67 1 + 61 63 68 1 + 61 63 69 1 + 61 63 70 1 + 61 63 71 1 + 61 63 72 1 + 61 63 73 1 + 61 63 74 1 + 61 63 75 1 + 61 63 76 1 + 61 63 77 1 + 61 63 78 1 + 61 63 79 1 + 61 63 80 1 + 61 63 81 1 + 61 63 82 1 + 61 63 83 1 + 61 63 84 1 + 61 63 85 1 + 61 63 86 1 + 61 63 87 1 + 61 63 88 1 + 61 63 89 0.469442 + 61 64 38 0.469442 + 61 64 39 1 + 61 64 40 1 + 61 64 41 1 + 61 64 42 1 + 61 64 43 1 + 61 64 44 1 + 61 64 45 1 + 61 64 46 1 + 61 64 47 1 + 61 64 48 1 + 61 64 49 1 + 61 64 50 1 + 61 64 51 1 + 61 64 52 1 + 61 64 53 1 + 61 64 54 1 + 61 64 55 1 + 61 64 56 1 + 61 64 57 1 + 61 64 58 1 + 61 64 59 1 + 61 64 60 1 + 61 64 61 1 + 61 64 62 1 + 61 64 63 1 + 61 64 64 1 + 61 64 65 1 + 61 64 66 1 + 61 64 67 1 + 61 64 68 1 + 61 64 69 1 + 61 64 70 1 + 61 64 71 1 + 61 64 72 1 + 61 64 73 1 + 61 64 74 1 + 61 64 75 1 + 61 64 76 1 + 61 64 77 1 + 61 64 78 1 + 61 64 79 1 + 61 64 80 1 + 61 64 81 1 + 61 64 82 1 + 61 64 83 1 + 61 64 84 1 + 61 64 85 1 + 61 64 86 1 + 61 64 87 1 + 61 64 88 1 + 61 64 89 0.469442 + 61 65 38 0.430144 + 61 65 39 1 + 61 65 40 1 + 61 65 41 1 + 61 65 42 1 + 61 65 43 1 + 61 65 44 1 + 61 65 45 1 + 61 65 46 1 + 61 65 47 1 + 61 65 48 1 + 61 65 49 1 + 61 65 50 1 + 61 65 51 1 + 61 65 52 1 + 61 65 53 1 + 61 65 54 1 + 61 65 55 1 + 61 65 56 1 + 61 65 57 1 + 61 65 58 1 + 61 65 59 1 + 61 65 60 1 + 61 65 61 1 + 61 65 62 1 + 61 65 63 1 + 61 65 64 1 + 61 65 65 1 + 61 65 66 1 + 61 65 67 1 + 61 65 68 1 + 61 65 69 1 + 61 65 70 1 + 61 65 71 1 + 61 65 72 1 + 61 65 73 1 + 61 65 74 1 + 61 65 75 1 + 61 65 76 1 + 61 65 77 1 + 61 65 78 1 + 61 65 79 1 + 61 65 80 1 + 61 65 81 1 + 61 65 82 1 + 61 65 83 1 + 61 65 84 1 + 61 65 85 1 + 61 65 86 1 + 61 65 87 1 + 61 65 88 1 + 61 65 89 0.430144 + 61 66 38 0.351365 + 61 66 39 1 + 61 66 40 1 + 61 66 41 1 + 61 66 42 1 + 61 66 43 1 + 61 66 44 1 + 61 66 45 1 + 61 66 46 1 + 61 66 47 1 + 61 66 48 1 + 61 66 49 1 + 61 66 50 1 + 61 66 51 1 + 61 66 52 1 + 61 66 53 1 + 61 66 54 1 + 61 66 55 1 + 61 66 56 1 + 61 66 57 1 + 61 66 58 1 + 61 66 59 1 + 61 66 60 1 + 61 66 61 1 + 61 66 62 1 + 61 66 63 1 + 61 66 64 1 + 61 66 65 1 + 61 66 66 1 + 61 66 67 1 + 61 66 68 1 + 61 66 69 1 + 61 66 70 1 + 61 66 71 1 + 61 66 72 1 + 61 66 73 1 + 61 66 74 1 + 61 66 75 1 + 61 66 76 1 + 61 66 77 1 + 61 66 78 1 + 61 66 79 1 + 61 66 80 1 + 61 66 81 1 + 61 66 82 1 + 61 66 83 1 + 61 66 84 1 + 61 66 85 1 + 61 66 86 1 + 61 66 87 1 + 61 66 88 1 + 61 66 89 0.351365 + 61 67 38 0.232735 + 61 67 39 1 + 61 67 40 1 + 61 67 41 1 + 61 67 42 1 + 61 67 43 1 + 61 67 44 1 + 61 67 45 1 + 61 67 46 1 + 61 67 47 1 + 61 67 48 1 + 61 67 49 1 + 61 67 50 1 + 61 67 51 1 + 61 67 52 1 + 61 67 53 1 + 61 67 54 1 + 61 67 55 1 + 61 67 56 1 + 61 67 57 1 + 61 67 58 1 + 61 67 59 1 + 61 67 60 1 + 61 67 61 1 + 61 67 62 1 + 61 67 63 1 + 61 67 64 1 + 61 67 65 1 + 61 67 66 1 + 61 67 67 1 + 61 67 68 1 + 61 67 69 1 + 61 67 70 1 + 61 67 71 1 + 61 67 72 1 + 61 67 73 1 + 61 67 74 1 + 61 67 75 1 + 61 67 76 1 + 61 67 77 1 + 61 67 78 1 + 61 67 79 1 + 61 67 80 1 + 61 67 81 1 + 61 67 82 1 + 61 67 83 1 + 61 67 84 1 + 61 67 85 1 + 61 67 86 1 + 61 67 87 1 + 61 67 88 1 + 61 67 89 0.232735 + 61 68 38 0.0765779 + 61 68 39 0.99711 + 61 68 40 1 + 61 68 41 1 + 61 68 42 1 + 61 68 43 1 + 61 68 44 1 + 61 68 45 1 + 61 68 46 1 + 61 68 47 1 + 61 68 48 1 + 61 68 49 1 + 61 68 50 1 + 61 68 51 1 + 61 68 52 1 + 61 68 53 1 + 61 68 54 1 + 61 68 55 1 + 61 68 56 1 + 61 68 57 1 + 61 68 58 1 + 61 68 59 1 + 61 68 60 1 + 61 68 61 1 + 61 68 62 1 + 61 68 63 1 + 61 68 64 1 + 61 68 65 1 + 61 68 66 1 + 61 68 67 1 + 61 68 68 1 + 61 68 69 1 + 61 68 70 1 + 61 68 71 1 + 61 68 72 1 + 61 68 73 1 + 61 68 74 1 + 61 68 75 1 + 61 68 76 1 + 61 68 77 1 + 61 68 78 1 + 61 68 79 1 + 61 68 80 1 + 61 68 81 1 + 61 68 82 1 + 61 68 83 1 + 61 68 84 1 + 61 68 85 1 + 61 68 86 1 + 61 68 87 1 + 61 68 88 0.99711 + 61 68 89 0.0765779 + 61 69 38 0.000200097 + 61 69 39 0.873248 + 61 69 40 1 + 61 69 41 1 + 61 69 42 1 + 61 69 43 1 + 61 69 44 1 + 61 69 45 1 + 61 69 46 1 + 61 69 47 1 + 61 69 48 1 + 61 69 49 1 + 61 69 50 1 + 61 69 51 1 + 61 69 52 1 + 61 69 53 1 + 61 69 54 1 + 61 69 55 1 + 61 69 56 1 + 61 69 57 1 + 61 69 58 1 + 61 69 59 1 + 61 69 60 1 + 61 69 61 1 + 61 69 62 1 + 61 69 63 1 + 61 69 64 1 + 61 69 65 1 + 61 69 66 1 + 61 69 67 1 + 61 69 68 1 + 61 69 69 1 + 61 69 70 1 + 61 69 71 1 + 61 69 72 1 + 61 69 73 1 + 61 69 74 1 + 61 69 75 1 + 61 69 76 1 + 61 69 77 1 + 61 69 78 1 + 61 69 79 1 + 61 69 80 1 + 61 69 81 1 + 61 69 82 1 + 61 69 83 1 + 61 69 84 1 + 61 69 85 1 + 61 69 86 1 + 61 69 87 1 + 61 69 88 0.873248 + 61 69 89 0.000200097 + 61 70 39 0.63101 + 61 70 40 1 + 61 70 41 1 + 61 70 42 1 + 61 70 43 1 + 61 70 44 1 + 61 70 45 1 + 61 70 46 1 + 61 70 47 1 + 61 70 48 1 + 61 70 49 1 + 61 70 50 1 + 61 70 51 1 + 61 70 52 1 + 61 70 53 1 + 61 70 54 1 + 61 70 55 1 + 61 70 56 1 + 61 70 57 1 + 61 70 58 1 + 61 70 59 1 + 61 70 60 1 + 61 70 61 1 + 61 70 62 1 + 61 70 63 1 + 61 70 64 1 + 61 70 65 1 + 61 70 66 1 + 61 70 67 1 + 61 70 68 1 + 61 70 69 1 + 61 70 70 1 + 61 70 71 1 + 61 70 72 1 + 61 70 73 1 + 61 70 74 1 + 61 70 75 1 + 61 70 76 1 + 61 70 77 1 + 61 70 78 1 + 61 70 79 1 + 61 70 80 1 + 61 70 81 1 + 61 70 82 1 + 61 70 83 1 + 61 70 84 1 + 61 70 85 1 + 61 70 86 1 + 61 70 87 1 + 61 70 88 0.63101 + 61 71 39 0.345113 + 61 71 40 1 + 61 71 41 1 + 61 71 42 1 + 61 71 43 1 + 61 71 44 1 + 61 71 45 1 + 61 71 46 1 + 61 71 47 1 + 61 71 48 1 + 61 71 49 1 + 61 71 50 1 + 61 71 51 1 + 61 71 52 1 + 61 71 53 1 + 61 71 54 1 + 61 71 55 1 + 61 71 56 1 + 61 71 57 1 + 61 71 58 1 + 61 71 59 1 + 61 71 60 1 + 61 71 61 1 + 61 71 62 1 + 61 71 63 1 + 61 71 64 1 + 61 71 65 1 + 61 71 66 1 + 61 71 67 1 + 61 71 68 1 + 61 71 69 1 + 61 71 70 1 + 61 71 71 1 + 61 71 72 1 + 61 71 73 1 + 61 71 74 1 + 61 71 75 1 + 61 71 76 1 + 61 71 77 1 + 61 71 78 1 + 61 71 79 1 + 61 71 80 1 + 61 71 81 1 + 61 71 82 1 + 61 71 83 1 + 61 71 84 1 + 61 71 85 1 + 61 71 86 1 + 61 71 87 1 + 61 71 88 0.345113 + 61 72 39 0.0529903 + 61 72 40 0.961214 + 61 72 41 1 + 61 72 42 1 + 61 72 43 1 + 61 72 44 1 + 61 72 45 1 + 61 72 46 1 + 61 72 47 1 + 61 72 48 1 + 61 72 49 1 + 61 72 50 1 + 61 72 51 1 + 61 72 52 1 + 61 72 53 1 + 61 72 54 1 + 61 72 55 1 + 61 72 56 1 + 61 72 57 1 + 61 72 58 1 + 61 72 59 1 + 61 72 60 1 + 61 72 61 1 + 61 72 62 1 + 61 72 63 1 + 61 72 64 1 + 61 72 65 1 + 61 72 66 1 + 61 72 67 1 + 61 72 68 1 + 61 72 69 1 + 61 72 70 1 + 61 72 71 1 + 61 72 72 1 + 61 72 73 1 + 61 72 74 1 + 61 72 75 1 + 61 72 76 1 + 61 72 77 1 + 61 72 78 1 + 61 72 79 1 + 61 72 80 1 + 61 72 81 1 + 61 72 82 1 + 61 72 83 1 + 61 72 84 1 + 61 72 85 1 + 61 72 86 1 + 61 72 87 0.961214 + 61 72 88 0.0529903 + 61 73 40 0.63639 + 61 73 41 1 + 61 73 42 1 + 61 73 43 1 + 61 73 44 1 + 61 73 45 1 + 61 73 46 1 + 61 73 47 1 + 61 73 48 1 + 61 73 49 1 + 61 73 50 1 + 61 73 51 1 + 61 73 52 1 + 61 73 53 1 + 61 73 54 1 + 61 73 55 1 + 61 73 56 1 + 61 73 57 1 + 61 73 58 1 + 61 73 59 1 + 61 73 60 1 + 61 73 61 1 + 61 73 62 1 + 61 73 63 1 + 61 73 64 1 + 61 73 65 1 + 61 73 66 1 + 61 73 67 1 + 61 73 68 1 + 61 73 69 1 + 61 73 70 1 + 61 73 71 1 + 61 73 72 1 + 61 73 73 1 + 61 73 74 1 + 61 73 75 1 + 61 73 76 1 + 61 73 77 1 + 61 73 78 1 + 61 73 79 1 + 61 73 80 1 + 61 73 81 1 + 61 73 82 1 + 61 73 83 1 + 61 73 84 1 + 61 73 85 1 + 61 73 86 1 + 61 73 87 0.63639 + 61 74 40 0.210787 + 61 74 41 0.998593 + 61 74 42 1 + 61 74 43 1 + 61 74 44 1 + 61 74 45 1 + 61 74 46 1 + 61 74 47 1 + 61 74 48 1 + 61 74 49 1 + 61 74 50 1 + 61 74 51 1 + 61 74 52 1 + 61 74 53 1 + 61 74 54 1 + 61 74 55 1 + 61 74 56 1 + 61 74 57 1 + 61 74 58 1 + 61 74 59 1 + 61 74 60 1 + 61 74 61 1 + 61 74 62 1 + 61 74 63 1 + 61 74 64 1 + 61 74 65 1 + 61 74 66 1 + 61 74 67 1 + 61 74 68 1 + 61 74 69 1 + 61 74 70 1 + 61 74 71 1 + 61 74 72 1 + 61 74 73 1 + 61 74 74 1 + 61 74 75 1 + 61 74 76 1 + 61 74 77 1 + 61 74 78 1 + 61 74 79 1 + 61 74 80 1 + 61 74 81 1 + 61 74 82 1 + 61 74 83 1 + 61 74 84 1 + 61 74 85 1 + 61 74 86 0.998593 + 61 74 87 0.210787 + 61 75 40 9.9388e-05 + 61 75 41 0.730298 + 61 75 42 1 + 61 75 43 1 + 61 75 44 1 + 61 75 45 1 + 61 75 46 1 + 61 75 47 1 + 61 75 48 1 + 61 75 49 1 + 61 75 50 1 + 61 75 51 1 + 61 75 52 1 + 61 75 53 1 + 61 75 54 1 + 61 75 55 1 + 61 75 56 1 + 61 75 57 1 + 61 75 58 1 + 61 75 59 1 + 61 75 60 1 + 61 75 61 1 + 61 75 62 1 + 61 75 63 1 + 61 75 64 1 + 61 75 65 1 + 61 75 66 1 + 61 75 67 1 + 61 75 68 1 + 61 75 69 1 + 61 75 70 1 + 61 75 71 1 + 61 75 72 1 + 61 75 73 1 + 61 75 74 1 + 61 75 75 1 + 61 75 76 1 + 61 75 77 1 + 61 75 78 1 + 61 75 79 1 + 61 75 80 1 + 61 75 81 1 + 61 75 82 1 + 61 75 83 1 + 61 75 84 1 + 61 75 85 1 + 61 75 86 0.730298 + 61 75 87 9.9388e-05 + 61 76 41 0.203942 + 61 76 42 0.992135 + 61 76 43 1 + 61 76 44 1 + 61 76 45 1 + 61 76 46 1 + 61 76 47 1 + 61 76 48 1 + 61 76 49 1 + 61 76 50 1 + 61 76 51 1 + 61 76 52 1 + 61 76 53 1 + 61 76 54 1 + 61 76 55 1 + 61 76 56 1 + 61 76 57 1 + 61 76 58 1 + 61 76 59 1 + 61 76 60 1 + 61 76 61 1 + 61 76 62 1 + 61 76 63 1 + 61 76 64 1 + 61 76 65 1 + 61 76 66 1 + 61 76 67 1 + 61 76 68 1 + 61 76 69 1 + 61 76 70 1 + 61 76 71 1 + 61 76 72 1 + 61 76 73 1 + 61 76 74 1 + 61 76 75 1 + 61 76 76 1 + 61 76 77 1 + 61 76 78 1 + 61 76 79 1 + 61 76 80 1 + 61 76 81 1 + 61 76 82 1 + 61 76 83 1 + 61 76 84 1 + 61 76 85 0.992135 + 61 76 86 0.203942 + 61 77 42 0.602307 + 61 77 43 1 + 61 77 44 1 + 61 77 45 1 + 61 77 46 1 + 61 77 47 1 + 61 77 48 1 + 61 77 49 1 + 61 77 50 1 + 61 77 51 1 + 61 77 52 1 + 61 77 53 1 + 61 77 54 1 + 61 77 55 1 + 61 77 56 1 + 61 77 57 1 + 61 77 58 1 + 61 77 59 1 + 61 77 60 1 + 61 77 61 1 + 61 77 62 1 + 61 77 63 1 + 61 77 64 1 + 61 77 65 1 + 61 77 66 1 + 61 77 67 1 + 61 77 68 1 + 61 77 69 1 + 61 77 70 1 + 61 77 71 1 + 61 77 72 1 + 61 77 73 1 + 61 77 74 1 + 61 77 75 1 + 61 77 76 1 + 61 77 77 1 + 61 77 78 1 + 61 77 79 1 + 61 77 80 1 + 61 77 81 1 + 61 77 82 1 + 61 77 83 1 + 61 77 84 1 + 61 77 85 0.602307 + 61 78 42 0.061458 + 61 78 43 0.882567 + 61 78 44 1 + 61 78 45 1 + 61 78 46 1 + 61 78 47 1 + 61 78 48 1 + 61 78 49 1 + 61 78 50 1 + 61 78 51 1 + 61 78 52 1 + 61 78 53 1 + 61 78 54 1 + 61 78 55 1 + 61 78 56 1 + 61 78 57 1 + 61 78 58 1 + 61 78 59 1 + 61 78 60 1 + 61 78 61 1 + 61 78 62 1 + 61 78 63 1 + 61 78 64 1 + 61 78 65 1 + 61 78 66 1 + 61 78 67 1 + 61 78 68 1 + 61 78 69 1 + 61 78 70 1 + 61 78 71 1 + 61 78 72 1 + 61 78 73 1 + 61 78 74 1 + 61 78 75 1 + 61 78 76 1 + 61 78 77 1 + 61 78 78 1 + 61 78 79 1 + 61 78 80 1 + 61 78 81 1 + 61 78 82 1 + 61 78 83 1 + 61 78 84 0.882567 + 61 78 85 0.061458 + 61 79 43 0.234894 + 61 79 44 0.980027 + 61 79 45 1 + 61 79 46 1 + 61 79 47 1 + 61 79 48 1 + 61 79 49 1 + 61 79 50 1 + 61 79 51 1 + 61 79 52 1 + 61 79 53 1 + 61 79 54 1 + 61 79 55 1 + 61 79 56 1 + 61 79 57 1 + 61 79 58 1 + 61 79 59 1 + 61 79 60 1 + 61 79 61 1 + 61 79 62 1 + 61 79 63 1 + 61 79 64 1 + 61 79 65 1 + 61 79 66 1 + 61 79 67 1 + 61 79 68 1 + 61 79 69 1 + 61 79 70 1 + 61 79 71 1 + 61 79 72 1 + 61 79 73 1 + 61 79 74 1 + 61 79 75 1 + 61 79 76 1 + 61 79 77 1 + 61 79 78 1 + 61 79 79 1 + 61 79 80 1 + 61 79 81 1 + 61 79 82 1 + 61 79 83 0.980027 + 61 79 84 0.234894 + 61 80 44 0.408101 + 61 80 45 0.9989 + 61 80 46 1 + 61 80 47 1 + 61 80 48 1 + 61 80 49 1 + 61 80 50 1 + 61 80 51 1 + 61 80 52 1 + 61 80 53 1 + 61 80 54 1 + 61 80 55 1 + 61 80 56 1 + 61 80 57 1 + 61 80 58 1 + 61 80 59 1 + 61 80 60 1 + 61 80 61 1 + 61 80 62 1 + 61 80 63 1 + 61 80 64 1 + 61 80 65 1 + 61 80 66 1 + 61 80 67 1 + 61 80 68 1 + 61 80 69 1 + 61 80 70 1 + 61 80 71 1 + 61 80 72 1 + 61 80 73 1 + 61 80 74 1 + 61 80 75 1 + 61 80 76 1 + 61 80 77 1 + 61 80 78 1 + 61 80 79 1 + 61 80 80 1 + 61 80 81 1 + 61 80 82 0.9989 + 61 80 83 0.408101 + 61 81 44 7.7901e-05 + 61 81 45 0.509943 + 61 81 46 0.999903 + 61 81 47 1 + 61 81 48 1 + 61 81 49 1 + 61 81 50 1 + 61 81 51 1 + 61 81 52 1 + 61 81 53 1 + 61 81 54 1 + 61 81 55 1 + 61 81 56 1 + 61 81 57 1 + 61 81 58 1 + 61 81 59 1 + 61 81 60 1 + 61 81 61 1 + 61 81 62 1 + 61 81 63 1 + 61 81 64 1 + 61 81 65 1 + 61 81 66 1 + 61 81 67 1 + 61 81 68 1 + 61 81 69 1 + 61 81 70 1 + 61 81 71 1 + 61 81 72 1 + 61 81 73 1 + 61 81 74 1 + 61 81 75 1 + 61 81 76 1 + 61 81 77 1 + 61 81 78 1 + 61 81 79 1 + 61 81 80 1 + 61 81 81 0.999903 + 61 81 82 0.509943 + 61 81 83 7.7901e-05 + 61 82 45 0.0011128 + 61 82 46 0.509943 + 61 82 47 0.9989 + 61 82 48 1 + 61 82 49 1 + 61 82 50 1 + 61 82 51 1 + 61 82 52 1 + 61 82 53 1 + 61 82 54 1 + 61 82 55 1 + 61 82 56 1 + 61 82 57 1 + 61 82 58 1 + 61 82 59 1 + 61 82 60 1 + 61 82 61 1 + 61 82 62 1 + 61 82 63 1 + 61 82 64 1 + 61 82 65 1 + 61 82 66 1 + 61 82 67 1 + 61 82 68 1 + 61 82 69 1 + 61 82 70 1 + 61 82 71 1 + 61 82 72 1 + 61 82 73 1 + 61 82 74 1 + 61 82 75 1 + 61 82 76 1 + 61 82 77 1 + 61 82 78 1 + 61 82 79 1 + 61 82 80 0.9989 + 61 82 81 0.509943 + 61 82 82 0.0011128 + 61 83 46 7.7901e-05 + 61 83 47 0.408101 + 61 83 48 0.980027 + 61 83 49 1 + 61 83 50 1 + 61 83 51 1 + 61 83 52 1 + 61 83 53 1 + 61 83 54 1 + 61 83 55 1 + 61 83 56 1 + 61 83 57 1 + 61 83 58 1 + 61 83 59 1 + 61 83 60 1 + 61 83 61 1 + 61 83 62 1 + 61 83 63 1 + 61 83 64 1 + 61 83 65 1 + 61 83 66 1 + 61 83 67 1 + 61 83 68 1 + 61 83 69 1 + 61 83 70 1 + 61 83 71 1 + 61 83 72 1 + 61 83 73 1 + 61 83 74 1 + 61 83 75 1 + 61 83 76 1 + 61 83 77 1 + 61 83 78 1 + 61 83 79 0.980027 + 61 83 80 0.408101 + 61 83 81 7.7901e-05 + 61 84 48 0.234894 + 61 84 49 0.882567 + 61 84 50 1 + 61 84 51 1 + 61 84 52 1 + 61 84 53 1 + 61 84 54 1 + 61 84 55 1 + 61 84 56 1 + 61 84 57 1 + 61 84 58 1 + 61 84 59 1 + 61 84 60 1 + 61 84 61 1 + 61 84 62 1 + 61 84 63 1 + 61 84 64 1 + 61 84 65 1 + 61 84 66 1 + 61 84 67 1 + 61 84 68 1 + 61 84 69 1 + 61 84 70 1 + 61 84 71 1 + 61 84 72 1 + 61 84 73 1 + 61 84 74 1 + 61 84 75 1 + 61 84 76 1 + 61 84 77 1 + 61 84 78 0.882567 + 61 84 79 0.234894 + 61 85 49 0.061458 + 61 85 50 0.602307 + 61 85 51 0.992135 + 61 85 52 1 + 61 85 53 1 + 61 85 54 1 + 61 85 55 1 + 61 85 56 1 + 61 85 57 1 + 61 85 58 1 + 61 85 59 1 + 61 85 60 1 + 61 85 61 1 + 61 85 62 1 + 61 85 63 1 + 61 85 64 1 + 61 85 65 1 + 61 85 66 1 + 61 85 67 1 + 61 85 68 1 + 61 85 69 1 + 61 85 70 1 + 61 85 71 1 + 61 85 72 1 + 61 85 73 1 + 61 85 74 1 + 61 85 75 1 + 61 85 76 0.992135 + 61 85 77 0.602307 + 61 85 78 0.061458 + 61 86 51 0.203942 + 61 86 52 0.730298 + 61 86 53 0.998593 + 61 86 54 1 + 61 86 55 1 + 61 86 56 1 + 61 86 57 1 + 61 86 58 1 + 61 86 59 1 + 61 86 60 1 + 61 86 61 1 + 61 86 62 1 + 61 86 63 1 + 61 86 64 1 + 61 86 65 1 + 61 86 66 1 + 61 86 67 1 + 61 86 68 1 + 61 86 69 1 + 61 86 70 1 + 61 86 71 1 + 61 86 72 1 + 61 86 73 1 + 61 86 74 0.998593 + 61 86 75 0.730298 + 61 86 76 0.203942 + 61 87 52 9.9388e-05 + 61 87 53 0.210787 + 61 87 54 0.63639 + 61 87 55 0.961214 + 61 87 56 1 + 61 87 57 1 + 61 87 58 1 + 61 87 59 1 + 61 87 60 1 + 61 87 61 1 + 61 87 62 1 + 61 87 63 1 + 61 87 64 1 + 61 87 65 1 + 61 87 66 1 + 61 87 67 1 + 61 87 68 1 + 61 87 69 1 + 61 87 70 1 + 61 87 71 1 + 61 87 72 0.961214 + 61 87 73 0.63639 + 61 87 74 0.210787 + 61 87 75 9.9388e-05 + 61 88 55 0.0529903 + 61 88 56 0.345113 + 61 88 57 0.63101 + 61 88 58 0.873248 + 61 88 59 0.99711 + 61 88 60 1 + 61 88 61 1 + 61 88 62 1 + 61 88 63 1 + 61 88 64 1 + 61 88 65 1 + 61 88 66 1 + 61 88 67 1 + 61 88 68 0.99711 + 61 88 69 0.873248 + 61 88 70 0.63101 + 61 88 71 0.345113 + 61 88 72 0.0529903 + 61 89 58 0.000200097 + 61 89 59 0.0765779 + 61 89 60 0.232735 + 61 89 61 0.351365 + 61 89 62 0.430144 + 61 89 63 0.469442 + 61 89 64 0.469442 + 61 89 65 0.430144 + 61 89 66 0.351365 + 61 89 67 0.232735 + 61 89 68 0.0765779 + 61 89 69 0.000200097 + 62 38 58 0.0096893 + 62 38 59 0.153337 + 62 38 60 0.311883 + 62 38 61 0.430144 + 62 38 62 0.50868 + 62 38 63 0.547857 + 62 38 64 0.547857 + 62 38 65 0.50868 + 62 38 66 0.430144 + 62 38 67 0.311883 + 62 38 68 0.153337 + 62 38 69 0.0096893 + 62 39 55 0.10703 + 62 39 56 0.42714 + 62 39 57 0.712087 + 62 39 58 0.944047 + 62 39 59 1 + 62 39 60 1 + 62 39 61 1 + 62 39 62 1 + 62 39 63 1 + 62 39 64 1 + 62 39 65 1 + 62 39 66 1 + 62 39 67 1 + 62 39 68 1 + 62 39 69 0.944047 + 62 39 70 0.712087 + 62 39 71 0.42714 + 62 39 72 0.10703 + 62 40 52 0.00487084 + 62 40 53 0.295408 + 62 40 54 0.720869 + 62 40 55 0.990327 + 62 40 56 1 + 62 40 57 1 + 62 40 58 1 + 62 40 59 1 + 62 40 60 1 + 62 40 61 1 + 62 40 62 1 + 62 40 63 1 + 62 40 64 1 + 62 40 65 1 + 62 40 66 1 + 62 40 67 1 + 62 40 68 1 + 62 40 69 1 + 62 40 70 1 + 62 40 71 1 + 62 40 72 0.990327 + 62 40 73 0.720869 + 62 40 74 0.295408 + 62 40 75 0.00487084 + 62 41 50 0.000160193 + 62 41 51 0.286191 + 62 41 52 0.813363 + 62 41 53 1 + 62 41 54 1 + 62 41 55 1 + 62 41 56 1 + 62 41 57 1 + 62 41 58 1 + 62 41 59 1 + 62 41 60 1 + 62 41 61 1 + 62 41 62 1 + 62 41 63 1 + 62 41 64 1 + 62 41 65 1 + 62 41 66 1 + 62 41 67 1 + 62 41 68 1 + 62 41 69 1 + 62 41 70 1 + 62 41 71 1 + 62 41 72 1 + 62 41 73 1 + 62 41 74 1 + 62 41 75 0.813363 + 62 41 76 0.286191 + 62 41 77 0.000160193 + 62 42 49 0.10742 + 62 42 50 0.694555 + 62 42 51 0.99983 + 62 42 52 1 + 62 42 53 1 + 62 42 54 1 + 62 42 55 1 + 62 42 56 1 + 62 42 57 1 + 62 42 58 1 + 62 42 59 1 + 62 42 60 1 + 62 42 61 1 + 62 42 62 1 + 62 42 63 1 + 62 42 64 1 + 62 42 65 1 + 62 42 66 1 + 62 42 67 1 + 62 42 68 1 + 62 42 69 1 + 62 42 70 1 + 62 42 71 1 + 62 42 72 1 + 62 42 73 1 + 62 42 74 1 + 62 42 75 1 + 62 42 76 0.99983 + 62 42 77 0.694555 + 62 42 78 0.10742 + 62 43 48 0.317411 + 62 43 49 0.931908 + 62 43 50 1 + 62 43 51 1 + 62 43 52 1 + 62 43 53 1 + 62 43 54 1 + 62 43 55 1 + 62 43 56 1 + 62 43 57 1 + 62 43 58 1 + 62 43 59 1 + 62 43 60 1 + 62 43 61 1 + 62 43 62 1 + 62 43 63 1 + 62 43 64 1 + 62 43 65 1 + 62 43 66 1 + 62 43 67 1 + 62 43 68 1 + 62 43 69 1 + 62 43 70 1 + 62 43 71 1 + 62 43 72 1 + 62 43 73 1 + 62 43 74 1 + 62 43 75 1 + 62 43 76 1 + 62 43 77 1 + 62 43 78 0.931908 + 62 43 79 0.317411 + 62 44 46 0.00382379 + 62 44 47 0.509823 + 62 44 48 0.996238 + 62 44 49 1 + 62 44 50 1 + 62 44 51 1 + 62 44 52 1 + 62 44 53 1 + 62 44 54 1 + 62 44 55 1 + 62 44 56 1 + 62 44 57 1 + 62 44 58 1 + 62 44 59 1 + 62 44 60 1 + 62 44 61 1 + 62 44 62 1 + 62 44 63 1 + 62 44 64 1 + 62 44 65 1 + 62 44 66 1 + 62 44 67 1 + 62 44 68 1 + 62 44 69 1 + 62 44 70 1 + 62 44 71 1 + 62 44 72 1 + 62 44 73 1 + 62 44 74 1 + 62 44 75 1 + 62 44 76 1 + 62 44 77 1 + 62 44 78 1 + 62 44 79 0.996238 + 62 44 80 0.509823 + 62 44 81 0.00382379 + 62 45 45 0.00998524 + 62 45 46 0.613886 + 62 45 47 1 + 62 45 48 1 + 62 45 49 1 + 62 45 50 1 + 62 45 51 1 + 62 45 52 1 + 62 45 53 1 + 62 45 54 1 + 62 45 55 1 + 62 45 56 1 + 62 45 57 1 + 62 45 58 1 + 62 45 59 1 + 62 45 60 1 + 62 45 61 1 + 62 45 62 1 + 62 45 63 1 + 62 45 64 1 + 62 45 65 1 + 62 45 66 1 + 62 45 67 1 + 62 45 68 1 + 62 45 69 1 + 62 45 70 1 + 62 45 71 1 + 62 45 72 1 + 62 45 73 1 + 62 45 74 1 + 62 45 75 1 + 62 45 76 1 + 62 45 77 1 + 62 45 78 1 + 62 45 79 1 + 62 45 80 1 + 62 45 81 0.613886 + 62 45 82 0.00998524 + 62 46 44 0.00382379 + 62 46 45 0.613886 + 62 46 46 1 + 62 46 47 1 + 62 46 48 1 + 62 46 49 1 + 62 46 50 1 + 62 46 51 1 + 62 46 52 1 + 62 46 53 1 + 62 46 54 1 + 62 46 55 1 + 62 46 56 1 + 62 46 57 1 + 62 46 58 1 + 62 46 59 1 + 62 46 60 1 + 62 46 61 1 + 62 46 62 1 + 62 46 63 1 + 62 46 64 1 + 62 46 65 1 + 62 46 66 1 + 62 46 67 1 + 62 46 68 1 + 62 46 69 1 + 62 46 70 1 + 62 46 71 1 + 62 46 72 1 + 62 46 73 1 + 62 46 74 1 + 62 46 75 1 + 62 46 76 1 + 62 46 77 1 + 62 46 78 1 + 62 46 79 1 + 62 46 80 1 + 62 46 81 1 + 62 46 82 0.613886 + 62 46 83 0.00382379 + 62 47 44 0.509823 + 62 47 45 1 + 62 47 46 1 + 62 47 47 1 + 62 47 48 1 + 62 47 49 1 + 62 47 50 1 + 62 47 51 1 + 62 47 52 1 + 62 47 53 1 + 62 47 54 1 + 62 47 55 1 + 62 47 56 1 + 62 47 57 1 + 62 47 58 1 + 62 47 59 1 + 62 47 60 1 + 62 47 61 1 + 62 47 62 1 + 62 47 63 1 + 62 47 64 1 + 62 47 65 1 + 62 47 66 1 + 62 47 67 1 + 62 47 68 1 + 62 47 69 1 + 62 47 70 1 + 62 47 71 1 + 62 47 72 1 + 62 47 73 1 + 62 47 74 1 + 62 47 75 1 + 62 47 76 1 + 62 47 77 1 + 62 47 78 1 + 62 47 79 1 + 62 47 80 1 + 62 47 81 1 + 62 47 82 1 + 62 47 83 0.509823 + 62 48 43 0.317411 + 62 48 44 0.996238 + 62 48 45 1 + 62 48 46 1 + 62 48 47 1 + 62 48 48 1 + 62 48 49 1 + 62 48 50 1 + 62 48 51 1 + 62 48 52 1 + 62 48 53 1 + 62 48 54 1 + 62 48 55 1 + 62 48 56 1 + 62 48 57 1 + 62 48 58 1 + 62 48 59 1 + 62 48 60 1 + 62 48 61 1 + 62 48 62 1 + 62 48 63 1 + 62 48 64 1 + 62 48 65 1 + 62 48 66 1 + 62 48 67 1 + 62 48 68 1 + 62 48 69 1 + 62 48 70 1 + 62 48 71 1 + 62 48 72 1 + 62 48 73 1 + 62 48 74 1 + 62 48 75 1 + 62 48 76 1 + 62 48 77 1 + 62 48 78 1 + 62 48 79 1 + 62 48 80 1 + 62 48 81 1 + 62 48 82 1 + 62 48 83 0.996238 + 62 48 84 0.317411 + 62 49 42 0.10742 + 62 49 43 0.931908 + 62 49 44 1 + 62 49 45 1 + 62 49 46 1 + 62 49 47 1 + 62 49 48 1 + 62 49 49 1 + 62 49 50 1 + 62 49 51 1 + 62 49 52 1 + 62 49 53 1 + 62 49 54 1 + 62 49 55 1 + 62 49 56 1 + 62 49 57 1 + 62 49 58 1 + 62 49 59 1 + 62 49 60 1 + 62 49 61 1 + 62 49 62 1 + 62 49 63 1 + 62 49 64 1 + 62 49 65 1 + 62 49 66 1 + 62 49 67 1 + 62 49 68 1 + 62 49 69 1 + 62 49 70 1 + 62 49 71 1 + 62 49 72 1 + 62 49 73 1 + 62 49 74 1 + 62 49 75 1 + 62 49 76 1 + 62 49 77 1 + 62 49 78 1 + 62 49 79 1 + 62 49 80 1 + 62 49 81 1 + 62 49 82 1 + 62 49 83 1 + 62 49 84 0.931908 + 62 49 85 0.10742 + 62 50 41 0.000160193 + 62 50 42 0.694555 + 62 50 43 1 + 62 50 44 1 + 62 50 45 1 + 62 50 46 1 + 62 50 47 1 + 62 50 48 1 + 62 50 49 1 + 62 50 50 1 + 62 50 51 1 + 62 50 52 1 + 62 50 53 1 + 62 50 54 1 + 62 50 55 1 + 62 50 56 1 + 62 50 57 1 + 62 50 58 1 + 62 50 59 1 + 62 50 60 1 + 62 50 61 1 + 62 50 62 1 + 62 50 63 1 + 62 50 64 1 + 62 50 65 1 + 62 50 66 1 + 62 50 67 1 + 62 50 68 1 + 62 50 69 1 + 62 50 70 1 + 62 50 71 1 + 62 50 72 1 + 62 50 73 1 + 62 50 74 1 + 62 50 75 1 + 62 50 76 1 + 62 50 77 1 + 62 50 78 1 + 62 50 79 1 + 62 50 80 1 + 62 50 81 1 + 62 50 82 1 + 62 50 83 1 + 62 50 84 1 + 62 50 85 0.694555 + 62 50 86 0.000160193 + 62 51 41 0.286191 + 62 51 42 0.99983 + 62 51 43 1 + 62 51 44 1 + 62 51 45 1 + 62 51 46 1 + 62 51 47 1 + 62 51 48 1 + 62 51 49 1 + 62 51 50 1 + 62 51 51 1 + 62 51 52 1 + 62 51 53 1 + 62 51 54 1 + 62 51 55 1 + 62 51 56 1 + 62 51 57 1 + 62 51 58 1 + 62 51 59 1 + 62 51 60 1 + 62 51 61 1 + 62 51 62 1 + 62 51 63 1 + 62 51 64 1 + 62 51 65 1 + 62 51 66 1 + 62 51 67 1 + 62 51 68 1 + 62 51 69 1 + 62 51 70 1 + 62 51 71 1 + 62 51 72 1 + 62 51 73 1 + 62 51 74 1 + 62 51 75 1 + 62 51 76 1 + 62 51 77 1 + 62 51 78 1 + 62 51 79 1 + 62 51 80 1 + 62 51 81 1 + 62 51 82 1 + 62 51 83 1 + 62 51 84 1 + 62 51 85 0.99983 + 62 51 86 0.286191 + 62 52 40 0.00487084 + 62 52 41 0.813363 + 62 52 42 1 + 62 52 43 1 + 62 52 44 1 + 62 52 45 1 + 62 52 46 1 + 62 52 47 1 + 62 52 48 1 + 62 52 49 1 + 62 52 50 1 + 62 52 51 1 + 62 52 52 1 + 62 52 53 1 + 62 52 54 1 + 62 52 55 1 + 62 52 56 1 + 62 52 57 1 + 62 52 58 1 + 62 52 59 1 + 62 52 60 1 + 62 52 61 1 + 62 52 62 1 + 62 52 63 1 + 62 52 64 1 + 62 52 65 1 + 62 52 66 1 + 62 52 67 1 + 62 52 68 1 + 62 52 69 1 + 62 52 70 1 + 62 52 71 1 + 62 52 72 1 + 62 52 73 1 + 62 52 74 1 + 62 52 75 1 + 62 52 76 1 + 62 52 77 1 + 62 52 78 1 + 62 52 79 1 + 62 52 80 1 + 62 52 81 1 + 62 52 82 1 + 62 52 83 1 + 62 52 84 1 + 62 52 85 1 + 62 52 86 0.813363 + 62 52 87 0.00487084 + 62 53 40 0.295408 + 62 53 41 1 + 62 53 42 1 + 62 53 43 1 + 62 53 44 1 + 62 53 45 1 + 62 53 46 1 + 62 53 47 1 + 62 53 48 1 + 62 53 49 1 + 62 53 50 1 + 62 53 51 1 + 62 53 52 1 + 62 53 53 1 + 62 53 54 1 + 62 53 55 1 + 62 53 56 1 + 62 53 57 1 + 62 53 58 1 + 62 53 59 1 + 62 53 60 1 + 62 53 61 1 + 62 53 62 1 + 62 53 63 1 + 62 53 64 1 + 62 53 65 1 + 62 53 66 1 + 62 53 67 1 + 62 53 68 1 + 62 53 69 1 + 62 53 70 1 + 62 53 71 1 + 62 53 72 1 + 62 53 73 1 + 62 53 74 1 + 62 53 75 1 + 62 53 76 1 + 62 53 77 1 + 62 53 78 1 + 62 53 79 1 + 62 53 80 1 + 62 53 81 1 + 62 53 82 1 + 62 53 83 1 + 62 53 84 1 + 62 53 85 1 + 62 53 86 1 + 62 53 87 0.295408 + 62 54 40 0.720869 + 62 54 41 1 + 62 54 42 1 + 62 54 43 1 + 62 54 44 1 + 62 54 45 1 + 62 54 46 1 + 62 54 47 1 + 62 54 48 1 + 62 54 49 1 + 62 54 50 1 + 62 54 51 1 + 62 54 52 1 + 62 54 53 1 + 62 54 54 1 + 62 54 55 1 + 62 54 56 1 + 62 54 57 1 + 62 54 58 1 + 62 54 59 1 + 62 54 60 1 + 62 54 61 1 + 62 54 62 1 + 62 54 63 1 + 62 54 64 1 + 62 54 65 1 + 62 54 66 1 + 62 54 67 1 + 62 54 68 1 + 62 54 69 1 + 62 54 70 1 + 62 54 71 1 + 62 54 72 1 + 62 54 73 1 + 62 54 74 1 + 62 54 75 1 + 62 54 76 1 + 62 54 77 1 + 62 54 78 1 + 62 54 79 1 + 62 54 80 1 + 62 54 81 1 + 62 54 82 1 + 62 54 83 1 + 62 54 84 1 + 62 54 85 1 + 62 54 86 1 + 62 54 87 0.720869 + 62 55 39 0.10703 + 62 55 40 0.990327 + 62 55 41 1 + 62 55 42 1 + 62 55 43 1 + 62 55 44 1 + 62 55 45 1 + 62 55 46 1 + 62 55 47 1 + 62 55 48 1 + 62 55 49 1 + 62 55 50 1 + 62 55 51 1 + 62 55 52 1 + 62 55 53 1 + 62 55 54 1 + 62 55 55 1 + 62 55 56 1 + 62 55 57 1 + 62 55 58 1 + 62 55 59 1 + 62 55 60 1 + 62 55 61 1 + 62 55 62 1 + 62 55 63 1 + 62 55 64 1 + 62 55 65 1 + 62 55 66 1 + 62 55 67 1 + 62 55 68 1 + 62 55 69 1 + 62 55 70 1 + 62 55 71 1 + 62 55 72 1 + 62 55 73 1 + 62 55 74 1 + 62 55 75 1 + 62 55 76 1 + 62 55 77 1 + 62 55 78 1 + 62 55 79 1 + 62 55 80 1 + 62 55 81 1 + 62 55 82 1 + 62 55 83 1 + 62 55 84 1 + 62 55 85 1 + 62 55 86 1 + 62 55 87 0.990327 + 62 55 88 0.10703 + 62 56 39 0.42714 + 62 56 40 1 + 62 56 41 1 + 62 56 42 1 + 62 56 43 1 + 62 56 44 1 + 62 56 45 1 + 62 56 46 1 + 62 56 47 1 + 62 56 48 1 + 62 56 49 1 + 62 56 50 1 + 62 56 51 1 + 62 56 52 1 + 62 56 53 1 + 62 56 54 1 + 62 56 55 1 + 62 56 56 1 + 62 56 57 1 + 62 56 58 1 + 62 56 59 1 + 62 56 60 1 + 62 56 61 1 + 62 56 62 1 + 62 56 63 1 + 62 56 64 1 + 62 56 65 1 + 62 56 66 1 + 62 56 67 1 + 62 56 68 1 + 62 56 69 1 + 62 56 70 1 + 62 56 71 1 + 62 56 72 1 + 62 56 73 1 + 62 56 74 1 + 62 56 75 1 + 62 56 76 1 + 62 56 77 1 + 62 56 78 1 + 62 56 79 1 + 62 56 80 1 + 62 56 81 1 + 62 56 82 1 + 62 56 83 1 + 62 56 84 1 + 62 56 85 1 + 62 56 86 1 + 62 56 87 1 + 62 56 88 0.42714 + 62 57 39 0.712087 + 62 57 40 1 + 62 57 41 1 + 62 57 42 1 + 62 57 43 1 + 62 57 44 1 + 62 57 45 1 + 62 57 46 1 + 62 57 47 1 + 62 57 48 1 + 62 57 49 1 + 62 57 50 1 + 62 57 51 1 + 62 57 52 1 + 62 57 53 1 + 62 57 54 1 + 62 57 55 1 + 62 57 56 1 + 62 57 57 1 + 62 57 58 1 + 62 57 59 1 + 62 57 60 1 + 62 57 61 1 + 62 57 62 1 + 62 57 63 1 + 62 57 64 1 + 62 57 65 1 + 62 57 66 1 + 62 57 67 1 + 62 57 68 1 + 62 57 69 1 + 62 57 70 1 + 62 57 71 1 + 62 57 72 1 + 62 57 73 1 + 62 57 74 1 + 62 57 75 1 + 62 57 76 1 + 62 57 77 1 + 62 57 78 1 + 62 57 79 1 + 62 57 80 1 + 62 57 81 1 + 62 57 82 1 + 62 57 83 1 + 62 57 84 1 + 62 57 85 1 + 62 57 86 1 + 62 57 87 1 + 62 57 88 0.712087 + 62 58 38 0.0096893 + 62 58 39 0.944047 + 62 58 40 1 + 62 58 41 1 + 62 58 42 1 + 62 58 43 1 + 62 58 44 1 + 62 58 45 1 + 62 58 46 1 + 62 58 47 1 + 62 58 48 1 + 62 58 49 1 + 62 58 50 1 + 62 58 51 1 + 62 58 52 1 + 62 58 53 1 + 62 58 54 1 + 62 58 55 1 + 62 58 56 1 + 62 58 57 1 + 62 58 58 1 + 62 58 59 1 + 62 58 60 1 + 62 58 61 1 + 62 58 62 1 + 62 58 63 1 + 62 58 64 1 + 62 58 65 1 + 62 58 66 1 + 62 58 67 1 + 62 58 68 1 + 62 58 69 1 + 62 58 70 1 + 62 58 71 1 + 62 58 72 1 + 62 58 73 1 + 62 58 74 1 + 62 58 75 1 + 62 58 76 1 + 62 58 77 1 + 62 58 78 1 + 62 58 79 1 + 62 58 80 1 + 62 58 81 1 + 62 58 82 1 + 62 58 83 1 + 62 58 84 1 + 62 58 85 1 + 62 58 86 1 + 62 58 87 1 + 62 58 88 0.944047 + 62 58 89 0.0096893 + 62 59 38 0.153337 + 62 59 39 1 + 62 59 40 1 + 62 59 41 1 + 62 59 42 1 + 62 59 43 1 + 62 59 44 1 + 62 59 45 1 + 62 59 46 1 + 62 59 47 1 + 62 59 48 1 + 62 59 49 1 + 62 59 50 1 + 62 59 51 1 + 62 59 52 1 + 62 59 53 1 + 62 59 54 1 + 62 59 55 1 + 62 59 56 1 + 62 59 57 1 + 62 59 58 1 + 62 59 59 1 + 62 59 60 1 + 62 59 61 1 + 62 59 62 1 + 62 59 63 1 + 62 59 64 1 + 62 59 65 1 + 62 59 66 1 + 62 59 67 1 + 62 59 68 1 + 62 59 69 1 + 62 59 70 1 + 62 59 71 1 + 62 59 72 1 + 62 59 73 1 + 62 59 74 1 + 62 59 75 1 + 62 59 76 1 + 62 59 77 1 + 62 59 78 1 + 62 59 79 1 + 62 59 80 1 + 62 59 81 1 + 62 59 82 1 + 62 59 83 1 + 62 59 84 1 + 62 59 85 1 + 62 59 86 1 + 62 59 87 1 + 62 59 88 1 + 62 59 89 0.153337 + 62 60 38 0.311883 + 62 60 39 1 + 62 60 40 1 + 62 60 41 1 + 62 60 42 1 + 62 60 43 1 + 62 60 44 1 + 62 60 45 1 + 62 60 46 1 + 62 60 47 1 + 62 60 48 1 + 62 60 49 1 + 62 60 50 1 + 62 60 51 1 + 62 60 52 1 + 62 60 53 1 + 62 60 54 1 + 62 60 55 1 + 62 60 56 1 + 62 60 57 1 + 62 60 58 1 + 62 60 59 1 + 62 60 60 1 + 62 60 61 1 + 62 60 62 1 + 62 60 63 1 + 62 60 64 1 + 62 60 65 1 + 62 60 66 1 + 62 60 67 1 + 62 60 68 1 + 62 60 69 1 + 62 60 70 1 + 62 60 71 1 + 62 60 72 1 + 62 60 73 1 + 62 60 74 1 + 62 60 75 1 + 62 60 76 1 + 62 60 77 1 + 62 60 78 1 + 62 60 79 1 + 62 60 80 1 + 62 60 81 1 + 62 60 82 1 + 62 60 83 1 + 62 60 84 1 + 62 60 85 1 + 62 60 86 1 + 62 60 87 1 + 62 60 88 1 + 62 60 89 0.311883 + 62 61 38 0.430144 + 62 61 39 1 + 62 61 40 1 + 62 61 41 1 + 62 61 42 1 + 62 61 43 1 + 62 61 44 1 + 62 61 45 1 + 62 61 46 1 + 62 61 47 1 + 62 61 48 1 + 62 61 49 1 + 62 61 50 1 + 62 61 51 1 + 62 61 52 1 + 62 61 53 1 + 62 61 54 1 + 62 61 55 1 + 62 61 56 1 + 62 61 57 1 + 62 61 58 1 + 62 61 59 1 + 62 61 60 1 + 62 61 61 1 + 62 61 62 1 + 62 61 63 1 + 62 61 64 1 + 62 61 65 1 + 62 61 66 1 + 62 61 67 1 + 62 61 68 1 + 62 61 69 1 + 62 61 70 1 + 62 61 71 1 + 62 61 72 1 + 62 61 73 1 + 62 61 74 1 + 62 61 75 1 + 62 61 76 1 + 62 61 77 1 + 62 61 78 1 + 62 61 79 1 + 62 61 80 1 + 62 61 81 1 + 62 61 82 1 + 62 61 83 1 + 62 61 84 1 + 62 61 85 1 + 62 61 86 1 + 62 61 87 1 + 62 61 88 1 + 62 61 89 0.430144 + 62 62 38 0.50868 + 62 62 39 1 + 62 62 40 1 + 62 62 41 1 + 62 62 42 1 + 62 62 43 1 + 62 62 44 1 + 62 62 45 1 + 62 62 46 1 + 62 62 47 1 + 62 62 48 1 + 62 62 49 1 + 62 62 50 1 + 62 62 51 1 + 62 62 52 1 + 62 62 53 1 + 62 62 54 1 + 62 62 55 1 + 62 62 56 1 + 62 62 57 1 + 62 62 58 1 + 62 62 59 1 + 62 62 60 1 + 62 62 61 1 + 62 62 62 1 + 62 62 63 1 + 62 62 64 1 + 62 62 65 1 + 62 62 66 1 + 62 62 67 1 + 62 62 68 1 + 62 62 69 1 + 62 62 70 1 + 62 62 71 1 + 62 62 72 1 + 62 62 73 1 + 62 62 74 1 + 62 62 75 1 + 62 62 76 1 + 62 62 77 1 + 62 62 78 1 + 62 62 79 1 + 62 62 80 1 + 62 62 81 1 + 62 62 82 1 + 62 62 83 1 + 62 62 84 1 + 62 62 85 1 + 62 62 86 1 + 62 62 87 1 + 62 62 88 1 + 62 62 89 0.50868 + 62 63 38 0.547857 + 62 63 39 1 + 62 63 40 1 + 62 63 41 1 + 62 63 42 1 + 62 63 43 1 + 62 63 44 1 + 62 63 45 1 + 62 63 46 1 + 62 63 47 1 + 62 63 48 1 + 62 63 49 1 + 62 63 50 1 + 62 63 51 1 + 62 63 52 1 + 62 63 53 1 + 62 63 54 1 + 62 63 55 1 + 62 63 56 1 + 62 63 57 1 + 62 63 58 1 + 62 63 59 1 + 62 63 60 1 + 62 63 61 1 + 62 63 62 1 + 62 63 63 1 + 62 63 64 1 + 62 63 65 1 + 62 63 66 1 + 62 63 67 1 + 62 63 68 1 + 62 63 69 1 + 62 63 70 1 + 62 63 71 1 + 62 63 72 1 + 62 63 73 1 + 62 63 74 1 + 62 63 75 1 + 62 63 76 1 + 62 63 77 1 + 62 63 78 1 + 62 63 79 1 + 62 63 80 1 + 62 63 81 1 + 62 63 82 1 + 62 63 83 1 + 62 63 84 1 + 62 63 85 1 + 62 63 86 1 + 62 63 87 1 + 62 63 88 1 + 62 63 89 0.547857 + 62 64 38 0.547857 + 62 64 39 1 + 62 64 40 1 + 62 64 41 1 + 62 64 42 1 + 62 64 43 1 + 62 64 44 1 + 62 64 45 1 + 62 64 46 1 + 62 64 47 1 + 62 64 48 1 + 62 64 49 1 + 62 64 50 1 + 62 64 51 1 + 62 64 52 1 + 62 64 53 1 + 62 64 54 1 + 62 64 55 1 + 62 64 56 1 + 62 64 57 1 + 62 64 58 1 + 62 64 59 1 + 62 64 60 1 + 62 64 61 1 + 62 64 62 1 + 62 64 63 1 + 62 64 64 1 + 62 64 65 1 + 62 64 66 1 + 62 64 67 1 + 62 64 68 1 + 62 64 69 1 + 62 64 70 1 + 62 64 71 1 + 62 64 72 1 + 62 64 73 1 + 62 64 74 1 + 62 64 75 1 + 62 64 76 1 + 62 64 77 1 + 62 64 78 1 + 62 64 79 1 + 62 64 80 1 + 62 64 81 1 + 62 64 82 1 + 62 64 83 1 + 62 64 84 1 + 62 64 85 1 + 62 64 86 1 + 62 64 87 1 + 62 64 88 1 + 62 64 89 0.547857 + 62 65 38 0.50868 + 62 65 39 1 + 62 65 40 1 + 62 65 41 1 + 62 65 42 1 + 62 65 43 1 + 62 65 44 1 + 62 65 45 1 + 62 65 46 1 + 62 65 47 1 + 62 65 48 1 + 62 65 49 1 + 62 65 50 1 + 62 65 51 1 + 62 65 52 1 + 62 65 53 1 + 62 65 54 1 + 62 65 55 1 + 62 65 56 1 + 62 65 57 1 + 62 65 58 1 + 62 65 59 1 + 62 65 60 1 + 62 65 61 1 + 62 65 62 1 + 62 65 63 1 + 62 65 64 1 + 62 65 65 1 + 62 65 66 1 + 62 65 67 1 + 62 65 68 1 + 62 65 69 1 + 62 65 70 1 + 62 65 71 1 + 62 65 72 1 + 62 65 73 1 + 62 65 74 1 + 62 65 75 1 + 62 65 76 1 + 62 65 77 1 + 62 65 78 1 + 62 65 79 1 + 62 65 80 1 + 62 65 81 1 + 62 65 82 1 + 62 65 83 1 + 62 65 84 1 + 62 65 85 1 + 62 65 86 1 + 62 65 87 1 + 62 65 88 1 + 62 65 89 0.50868 + 62 66 38 0.430144 + 62 66 39 1 + 62 66 40 1 + 62 66 41 1 + 62 66 42 1 + 62 66 43 1 + 62 66 44 1 + 62 66 45 1 + 62 66 46 1 + 62 66 47 1 + 62 66 48 1 + 62 66 49 1 + 62 66 50 1 + 62 66 51 1 + 62 66 52 1 + 62 66 53 1 + 62 66 54 1 + 62 66 55 1 + 62 66 56 1 + 62 66 57 1 + 62 66 58 1 + 62 66 59 1 + 62 66 60 1 + 62 66 61 1 + 62 66 62 1 + 62 66 63 1 + 62 66 64 1 + 62 66 65 1 + 62 66 66 1 + 62 66 67 1 + 62 66 68 1 + 62 66 69 1 + 62 66 70 1 + 62 66 71 1 + 62 66 72 1 + 62 66 73 1 + 62 66 74 1 + 62 66 75 1 + 62 66 76 1 + 62 66 77 1 + 62 66 78 1 + 62 66 79 1 + 62 66 80 1 + 62 66 81 1 + 62 66 82 1 + 62 66 83 1 + 62 66 84 1 + 62 66 85 1 + 62 66 86 1 + 62 66 87 1 + 62 66 88 1 + 62 66 89 0.430144 + 62 67 38 0.311883 + 62 67 39 1 + 62 67 40 1 + 62 67 41 1 + 62 67 42 1 + 62 67 43 1 + 62 67 44 1 + 62 67 45 1 + 62 67 46 1 + 62 67 47 1 + 62 67 48 1 + 62 67 49 1 + 62 67 50 1 + 62 67 51 1 + 62 67 52 1 + 62 67 53 1 + 62 67 54 1 + 62 67 55 1 + 62 67 56 1 + 62 67 57 1 + 62 67 58 1 + 62 67 59 1 + 62 67 60 1 + 62 67 61 1 + 62 67 62 1 + 62 67 63 1 + 62 67 64 1 + 62 67 65 1 + 62 67 66 1 + 62 67 67 1 + 62 67 68 1 + 62 67 69 1 + 62 67 70 1 + 62 67 71 1 + 62 67 72 1 + 62 67 73 1 + 62 67 74 1 + 62 67 75 1 + 62 67 76 1 + 62 67 77 1 + 62 67 78 1 + 62 67 79 1 + 62 67 80 1 + 62 67 81 1 + 62 67 82 1 + 62 67 83 1 + 62 67 84 1 + 62 67 85 1 + 62 67 86 1 + 62 67 87 1 + 62 67 88 1 + 62 67 89 0.311883 + 62 68 38 0.153337 + 62 68 39 1 + 62 68 40 1 + 62 68 41 1 + 62 68 42 1 + 62 68 43 1 + 62 68 44 1 + 62 68 45 1 + 62 68 46 1 + 62 68 47 1 + 62 68 48 1 + 62 68 49 1 + 62 68 50 1 + 62 68 51 1 + 62 68 52 1 + 62 68 53 1 + 62 68 54 1 + 62 68 55 1 + 62 68 56 1 + 62 68 57 1 + 62 68 58 1 + 62 68 59 1 + 62 68 60 1 + 62 68 61 1 + 62 68 62 1 + 62 68 63 1 + 62 68 64 1 + 62 68 65 1 + 62 68 66 1 + 62 68 67 1 + 62 68 68 1 + 62 68 69 1 + 62 68 70 1 + 62 68 71 1 + 62 68 72 1 + 62 68 73 1 + 62 68 74 1 + 62 68 75 1 + 62 68 76 1 + 62 68 77 1 + 62 68 78 1 + 62 68 79 1 + 62 68 80 1 + 62 68 81 1 + 62 68 82 1 + 62 68 83 1 + 62 68 84 1 + 62 68 85 1 + 62 68 86 1 + 62 68 87 1 + 62 68 88 1 + 62 68 89 0.153337 + 62 69 38 0.0096893 + 62 69 39 0.944047 + 62 69 40 1 + 62 69 41 1 + 62 69 42 1 + 62 69 43 1 + 62 69 44 1 + 62 69 45 1 + 62 69 46 1 + 62 69 47 1 + 62 69 48 1 + 62 69 49 1 + 62 69 50 1 + 62 69 51 1 + 62 69 52 1 + 62 69 53 1 + 62 69 54 1 + 62 69 55 1 + 62 69 56 1 + 62 69 57 1 + 62 69 58 1 + 62 69 59 1 + 62 69 60 1 + 62 69 61 1 + 62 69 62 1 + 62 69 63 1 + 62 69 64 1 + 62 69 65 1 + 62 69 66 1 + 62 69 67 1 + 62 69 68 1 + 62 69 69 1 + 62 69 70 1 + 62 69 71 1 + 62 69 72 1 + 62 69 73 1 + 62 69 74 1 + 62 69 75 1 + 62 69 76 1 + 62 69 77 1 + 62 69 78 1 + 62 69 79 1 + 62 69 80 1 + 62 69 81 1 + 62 69 82 1 + 62 69 83 1 + 62 69 84 1 + 62 69 85 1 + 62 69 86 1 + 62 69 87 1 + 62 69 88 0.944047 + 62 69 89 0.0096893 + 62 70 39 0.712087 + 62 70 40 1 + 62 70 41 1 + 62 70 42 1 + 62 70 43 1 + 62 70 44 1 + 62 70 45 1 + 62 70 46 1 + 62 70 47 1 + 62 70 48 1 + 62 70 49 1 + 62 70 50 1 + 62 70 51 1 + 62 70 52 1 + 62 70 53 1 + 62 70 54 1 + 62 70 55 1 + 62 70 56 1 + 62 70 57 1 + 62 70 58 1 + 62 70 59 1 + 62 70 60 1 + 62 70 61 1 + 62 70 62 1 + 62 70 63 1 + 62 70 64 1 + 62 70 65 1 + 62 70 66 1 + 62 70 67 1 + 62 70 68 1 + 62 70 69 1 + 62 70 70 1 + 62 70 71 1 + 62 70 72 1 + 62 70 73 1 + 62 70 74 1 + 62 70 75 1 + 62 70 76 1 + 62 70 77 1 + 62 70 78 1 + 62 70 79 1 + 62 70 80 1 + 62 70 81 1 + 62 70 82 1 + 62 70 83 1 + 62 70 84 1 + 62 70 85 1 + 62 70 86 1 + 62 70 87 1 + 62 70 88 0.712087 + 62 71 39 0.42714 + 62 71 40 1 + 62 71 41 1 + 62 71 42 1 + 62 71 43 1 + 62 71 44 1 + 62 71 45 1 + 62 71 46 1 + 62 71 47 1 + 62 71 48 1 + 62 71 49 1 + 62 71 50 1 + 62 71 51 1 + 62 71 52 1 + 62 71 53 1 + 62 71 54 1 + 62 71 55 1 + 62 71 56 1 + 62 71 57 1 + 62 71 58 1 + 62 71 59 1 + 62 71 60 1 + 62 71 61 1 + 62 71 62 1 + 62 71 63 1 + 62 71 64 1 + 62 71 65 1 + 62 71 66 1 + 62 71 67 1 + 62 71 68 1 + 62 71 69 1 + 62 71 70 1 + 62 71 71 1 + 62 71 72 1 + 62 71 73 1 + 62 71 74 1 + 62 71 75 1 + 62 71 76 1 + 62 71 77 1 + 62 71 78 1 + 62 71 79 1 + 62 71 80 1 + 62 71 81 1 + 62 71 82 1 + 62 71 83 1 + 62 71 84 1 + 62 71 85 1 + 62 71 86 1 + 62 71 87 1 + 62 71 88 0.42714 + 62 72 39 0.10703 + 62 72 40 0.990327 + 62 72 41 1 + 62 72 42 1 + 62 72 43 1 + 62 72 44 1 + 62 72 45 1 + 62 72 46 1 + 62 72 47 1 + 62 72 48 1 + 62 72 49 1 + 62 72 50 1 + 62 72 51 1 + 62 72 52 1 + 62 72 53 1 + 62 72 54 1 + 62 72 55 1 + 62 72 56 1 + 62 72 57 1 + 62 72 58 1 + 62 72 59 1 + 62 72 60 1 + 62 72 61 1 + 62 72 62 1 + 62 72 63 1 + 62 72 64 1 + 62 72 65 1 + 62 72 66 1 + 62 72 67 1 + 62 72 68 1 + 62 72 69 1 + 62 72 70 1 + 62 72 71 1 + 62 72 72 1 + 62 72 73 1 + 62 72 74 1 + 62 72 75 1 + 62 72 76 1 + 62 72 77 1 + 62 72 78 1 + 62 72 79 1 + 62 72 80 1 + 62 72 81 1 + 62 72 82 1 + 62 72 83 1 + 62 72 84 1 + 62 72 85 1 + 62 72 86 1 + 62 72 87 0.990327 + 62 72 88 0.10703 + 62 73 40 0.720869 + 62 73 41 1 + 62 73 42 1 + 62 73 43 1 + 62 73 44 1 + 62 73 45 1 + 62 73 46 1 + 62 73 47 1 + 62 73 48 1 + 62 73 49 1 + 62 73 50 1 + 62 73 51 1 + 62 73 52 1 + 62 73 53 1 + 62 73 54 1 + 62 73 55 1 + 62 73 56 1 + 62 73 57 1 + 62 73 58 1 + 62 73 59 1 + 62 73 60 1 + 62 73 61 1 + 62 73 62 1 + 62 73 63 1 + 62 73 64 1 + 62 73 65 1 + 62 73 66 1 + 62 73 67 1 + 62 73 68 1 + 62 73 69 1 + 62 73 70 1 + 62 73 71 1 + 62 73 72 1 + 62 73 73 1 + 62 73 74 1 + 62 73 75 1 + 62 73 76 1 + 62 73 77 1 + 62 73 78 1 + 62 73 79 1 + 62 73 80 1 + 62 73 81 1 + 62 73 82 1 + 62 73 83 1 + 62 73 84 1 + 62 73 85 1 + 62 73 86 1 + 62 73 87 0.720869 + 62 74 40 0.295408 + 62 74 41 1 + 62 74 42 1 + 62 74 43 1 + 62 74 44 1 + 62 74 45 1 + 62 74 46 1 + 62 74 47 1 + 62 74 48 1 + 62 74 49 1 + 62 74 50 1 + 62 74 51 1 + 62 74 52 1 + 62 74 53 1 + 62 74 54 1 + 62 74 55 1 + 62 74 56 1 + 62 74 57 1 + 62 74 58 1 + 62 74 59 1 + 62 74 60 1 + 62 74 61 1 + 62 74 62 1 + 62 74 63 1 + 62 74 64 1 + 62 74 65 1 + 62 74 66 1 + 62 74 67 1 + 62 74 68 1 + 62 74 69 1 + 62 74 70 1 + 62 74 71 1 + 62 74 72 1 + 62 74 73 1 + 62 74 74 1 + 62 74 75 1 + 62 74 76 1 + 62 74 77 1 + 62 74 78 1 + 62 74 79 1 + 62 74 80 1 + 62 74 81 1 + 62 74 82 1 + 62 74 83 1 + 62 74 84 1 + 62 74 85 1 + 62 74 86 1 + 62 74 87 0.295408 + 62 75 40 0.00487084 + 62 75 41 0.813363 + 62 75 42 1 + 62 75 43 1 + 62 75 44 1 + 62 75 45 1 + 62 75 46 1 + 62 75 47 1 + 62 75 48 1 + 62 75 49 1 + 62 75 50 1 + 62 75 51 1 + 62 75 52 1 + 62 75 53 1 + 62 75 54 1 + 62 75 55 1 + 62 75 56 1 + 62 75 57 1 + 62 75 58 1 + 62 75 59 1 + 62 75 60 1 + 62 75 61 1 + 62 75 62 1 + 62 75 63 1 + 62 75 64 1 + 62 75 65 1 + 62 75 66 1 + 62 75 67 1 + 62 75 68 1 + 62 75 69 1 + 62 75 70 1 + 62 75 71 1 + 62 75 72 1 + 62 75 73 1 + 62 75 74 1 + 62 75 75 1 + 62 75 76 1 + 62 75 77 1 + 62 75 78 1 + 62 75 79 1 + 62 75 80 1 + 62 75 81 1 + 62 75 82 1 + 62 75 83 1 + 62 75 84 1 + 62 75 85 1 + 62 75 86 0.813363 + 62 75 87 0.00487084 + 62 76 41 0.286191 + 62 76 42 0.99983 + 62 76 43 1 + 62 76 44 1 + 62 76 45 1 + 62 76 46 1 + 62 76 47 1 + 62 76 48 1 + 62 76 49 1 + 62 76 50 1 + 62 76 51 1 + 62 76 52 1 + 62 76 53 1 + 62 76 54 1 + 62 76 55 1 + 62 76 56 1 + 62 76 57 1 + 62 76 58 1 + 62 76 59 1 + 62 76 60 1 + 62 76 61 1 + 62 76 62 1 + 62 76 63 1 + 62 76 64 1 + 62 76 65 1 + 62 76 66 1 + 62 76 67 1 + 62 76 68 1 + 62 76 69 1 + 62 76 70 1 + 62 76 71 1 + 62 76 72 1 + 62 76 73 1 + 62 76 74 1 + 62 76 75 1 + 62 76 76 1 + 62 76 77 1 + 62 76 78 1 + 62 76 79 1 + 62 76 80 1 + 62 76 81 1 + 62 76 82 1 + 62 76 83 1 + 62 76 84 1 + 62 76 85 0.99983 + 62 76 86 0.286191 + 62 77 41 0.000160193 + 62 77 42 0.694555 + 62 77 43 1 + 62 77 44 1 + 62 77 45 1 + 62 77 46 1 + 62 77 47 1 + 62 77 48 1 + 62 77 49 1 + 62 77 50 1 + 62 77 51 1 + 62 77 52 1 + 62 77 53 1 + 62 77 54 1 + 62 77 55 1 + 62 77 56 1 + 62 77 57 1 + 62 77 58 1 + 62 77 59 1 + 62 77 60 1 + 62 77 61 1 + 62 77 62 1 + 62 77 63 1 + 62 77 64 1 + 62 77 65 1 + 62 77 66 1 + 62 77 67 1 + 62 77 68 1 + 62 77 69 1 + 62 77 70 1 + 62 77 71 1 + 62 77 72 1 + 62 77 73 1 + 62 77 74 1 + 62 77 75 1 + 62 77 76 1 + 62 77 77 1 + 62 77 78 1 + 62 77 79 1 + 62 77 80 1 + 62 77 81 1 + 62 77 82 1 + 62 77 83 1 + 62 77 84 1 + 62 77 85 0.694555 + 62 77 86 0.000160193 + 62 78 42 0.10742 + 62 78 43 0.931908 + 62 78 44 1 + 62 78 45 1 + 62 78 46 1 + 62 78 47 1 + 62 78 48 1 + 62 78 49 1 + 62 78 50 1 + 62 78 51 1 + 62 78 52 1 + 62 78 53 1 + 62 78 54 1 + 62 78 55 1 + 62 78 56 1 + 62 78 57 1 + 62 78 58 1 + 62 78 59 1 + 62 78 60 1 + 62 78 61 1 + 62 78 62 1 + 62 78 63 1 + 62 78 64 1 + 62 78 65 1 + 62 78 66 1 + 62 78 67 1 + 62 78 68 1 + 62 78 69 1 + 62 78 70 1 + 62 78 71 1 + 62 78 72 1 + 62 78 73 1 + 62 78 74 1 + 62 78 75 1 + 62 78 76 1 + 62 78 77 1 + 62 78 78 1 + 62 78 79 1 + 62 78 80 1 + 62 78 81 1 + 62 78 82 1 + 62 78 83 1 + 62 78 84 0.931908 + 62 78 85 0.10742 + 62 79 43 0.317411 + 62 79 44 0.996238 + 62 79 45 1 + 62 79 46 1 + 62 79 47 1 + 62 79 48 1 + 62 79 49 1 + 62 79 50 1 + 62 79 51 1 + 62 79 52 1 + 62 79 53 1 + 62 79 54 1 + 62 79 55 1 + 62 79 56 1 + 62 79 57 1 + 62 79 58 1 + 62 79 59 1 + 62 79 60 1 + 62 79 61 1 + 62 79 62 1 + 62 79 63 1 + 62 79 64 1 + 62 79 65 1 + 62 79 66 1 + 62 79 67 1 + 62 79 68 1 + 62 79 69 1 + 62 79 70 1 + 62 79 71 1 + 62 79 72 1 + 62 79 73 1 + 62 79 74 1 + 62 79 75 1 + 62 79 76 1 + 62 79 77 1 + 62 79 78 1 + 62 79 79 1 + 62 79 80 1 + 62 79 81 1 + 62 79 82 1 + 62 79 83 0.996238 + 62 79 84 0.317411 + 62 80 44 0.509823 + 62 80 45 1 + 62 80 46 1 + 62 80 47 1 + 62 80 48 1 + 62 80 49 1 + 62 80 50 1 + 62 80 51 1 + 62 80 52 1 + 62 80 53 1 + 62 80 54 1 + 62 80 55 1 + 62 80 56 1 + 62 80 57 1 + 62 80 58 1 + 62 80 59 1 + 62 80 60 1 + 62 80 61 1 + 62 80 62 1 + 62 80 63 1 + 62 80 64 1 + 62 80 65 1 + 62 80 66 1 + 62 80 67 1 + 62 80 68 1 + 62 80 69 1 + 62 80 70 1 + 62 80 71 1 + 62 80 72 1 + 62 80 73 1 + 62 80 74 1 + 62 80 75 1 + 62 80 76 1 + 62 80 77 1 + 62 80 78 1 + 62 80 79 1 + 62 80 80 1 + 62 80 81 1 + 62 80 82 1 + 62 80 83 0.509823 + 62 81 44 0.00382379 + 62 81 45 0.613886 + 62 81 46 1 + 62 81 47 1 + 62 81 48 1 + 62 81 49 1 + 62 81 50 1 + 62 81 51 1 + 62 81 52 1 + 62 81 53 1 + 62 81 54 1 + 62 81 55 1 + 62 81 56 1 + 62 81 57 1 + 62 81 58 1 + 62 81 59 1 + 62 81 60 1 + 62 81 61 1 + 62 81 62 1 + 62 81 63 1 + 62 81 64 1 + 62 81 65 1 + 62 81 66 1 + 62 81 67 1 + 62 81 68 1 + 62 81 69 1 + 62 81 70 1 + 62 81 71 1 + 62 81 72 1 + 62 81 73 1 + 62 81 74 1 + 62 81 75 1 + 62 81 76 1 + 62 81 77 1 + 62 81 78 1 + 62 81 79 1 + 62 81 80 1 + 62 81 81 1 + 62 81 82 0.613886 + 62 81 83 0.00382379 + 62 82 45 0.00998524 + 62 82 46 0.613886 + 62 82 47 1 + 62 82 48 1 + 62 82 49 1 + 62 82 50 1 + 62 82 51 1 + 62 82 52 1 + 62 82 53 1 + 62 82 54 1 + 62 82 55 1 + 62 82 56 1 + 62 82 57 1 + 62 82 58 1 + 62 82 59 1 + 62 82 60 1 + 62 82 61 1 + 62 82 62 1 + 62 82 63 1 + 62 82 64 1 + 62 82 65 1 + 62 82 66 1 + 62 82 67 1 + 62 82 68 1 + 62 82 69 1 + 62 82 70 1 + 62 82 71 1 + 62 82 72 1 + 62 82 73 1 + 62 82 74 1 + 62 82 75 1 + 62 82 76 1 + 62 82 77 1 + 62 82 78 1 + 62 82 79 1 + 62 82 80 1 + 62 82 81 0.613886 + 62 82 82 0.00998524 + 62 83 46 0.00382379 + 62 83 47 0.509823 + 62 83 48 0.996238 + 62 83 49 1 + 62 83 50 1 + 62 83 51 1 + 62 83 52 1 + 62 83 53 1 + 62 83 54 1 + 62 83 55 1 + 62 83 56 1 + 62 83 57 1 + 62 83 58 1 + 62 83 59 1 + 62 83 60 1 + 62 83 61 1 + 62 83 62 1 + 62 83 63 1 + 62 83 64 1 + 62 83 65 1 + 62 83 66 1 + 62 83 67 1 + 62 83 68 1 + 62 83 69 1 + 62 83 70 1 + 62 83 71 1 + 62 83 72 1 + 62 83 73 1 + 62 83 74 1 + 62 83 75 1 + 62 83 76 1 + 62 83 77 1 + 62 83 78 1 + 62 83 79 0.996238 + 62 83 80 0.509823 + 62 83 81 0.00382379 + 62 84 48 0.317411 + 62 84 49 0.931908 + 62 84 50 1 + 62 84 51 1 + 62 84 52 1 + 62 84 53 1 + 62 84 54 1 + 62 84 55 1 + 62 84 56 1 + 62 84 57 1 + 62 84 58 1 + 62 84 59 1 + 62 84 60 1 + 62 84 61 1 + 62 84 62 1 + 62 84 63 1 + 62 84 64 1 + 62 84 65 1 + 62 84 66 1 + 62 84 67 1 + 62 84 68 1 + 62 84 69 1 + 62 84 70 1 + 62 84 71 1 + 62 84 72 1 + 62 84 73 1 + 62 84 74 1 + 62 84 75 1 + 62 84 76 1 + 62 84 77 1 + 62 84 78 0.931908 + 62 84 79 0.317411 + 62 85 49 0.10742 + 62 85 50 0.694555 + 62 85 51 0.99983 + 62 85 52 1 + 62 85 53 1 + 62 85 54 1 + 62 85 55 1 + 62 85 56 1 + 62 85 57 1 + 62 85 58 1 + 62 85 59 1 + 62 85 60 1 + 62 85 61 1 + 62 85 62 1 + 62 85 63 1 + 62 85 64 1 + 62 85 65 1 + 62 85 66 1 + 62 85 67 1 + 62 85 68 1 + 62 85 69 1 + 62 85 70 1 + 62 85 71 1 + 62 85 72 1 + 62 85 73 1 + 62 85 74 1 + 62 85 75 1 + 62 85 76 0.99983 + 62 85 77 0.694555 + 62 85 78 0.10742 + 62 86 50 0.000160193 + 62 86 51 0.286191 + 62 86 52 0.813363 + 62 86 53 1 + 62 86 54 1 + 62 86 55 1 + 62 86 56 1 + 62 86 57 1 + 62 86 58 1 + 62 86 59 1 + 62 86 60 1 + 62 86 61 1 + 62 86 62 1 + 62 86 63 1 + 62 86 64 1 + 62 86 65 1 + 62 86 66 1 + 62 86 67 1 + 62 86 68 1 + 62 86 69 1 + 62 86 70 1 + 62 86 71 1 + 62 86 72 1 + 62 86 73 1 + 62 86 74 1 + 62 86 75 0.813363 + 62 86 76 0.286191 + 62 86 77 0.000160193 + 62 87 52 0.00487084 + 62 87 53 0.295408 + 62 87 54 0.720869 + 62 87 55 0.990327 + 62 87 56 1 + 62 87 57 1 + 62 87 58 1 + 62 87 59 1 + 62 87 60 1 + 62 87 61 1 + 62 87 62 1 + 62 87 63 1 + 62 87 64 1 + 62 87 65 1 + 62 87 66 1 + 62 87 67 1 + 62 87 68 1 + 62 87 69 1 + 62 87 70 1 + 62 87 71 1 + 62 87 72 0.990327 + 62 87 73 0.720869 + 62 87 74 0.295408 + 62 87 75 0.00487084 + 62 88 55 0.10703 + 62 88 56 0.42714 + 62 88 57 0.712087 + 62 88 58 0.944047 + 62 88 59 1 + 62 88 60 1 + 62 88 61 1 + 62 88 62 1 + 62 88 63 1 + 62 88 64 1 + 62 88 65 1 + 62 88 66 1 + 62 88 67 1 + 62 88 68 1 + 62 88 69 0.944047 + 62 88 70 0.712087 + 62 88 71 0.42714 + 62 88 72 0.10703 + 62 89 58 0.0096893 + 62 89 59 0.153337 + 62 89 60 0.311883 + 62 89 61 0.430144 + 62 89 62 0.50868 + 62 89 63 0.547857 + 62 89 64 0.547857 + 62 89 65 0.50868 + 62 89 66 0.430144 + 62 89 67 0.311883 + 62 89 68 0.153337 + 62 89 69 0.0096893 + 63 38 58 0.0245266 + 63 38 59 0.193067 + 63 38 60 0.351365 + 63 38 61 0.469442 + 63 38 62 0.547857 + 63 38 63 0.586975 + 63 38 64 0.586975 + 63 38 65 0.547857 + 63 38 66 0.469442 + 63 38 67 0.351365 + 63 38 68 0.193067 + 63 38 69 0.0245266 + 63 39 55 0.141143 + 63 39 56 0.46805 + 63 39 57 0.752526 + 63 39 58 0.969258 + 63 39 59 1 + 63 39 60 1 + 63 39 61 1 + 63 39 62 1 + 63 39 63 1 + 63 39 64 1 + 63 39 65 1 + 63 39 66 1 + 63 39 67 1 + 63 39 68 1 + 63 39 69 0.969258 + 63 39 70 0.752526 + 63 39 71 0.46805 + 63 39 72 0.141143 + 63 40 52 0.012422 + 63 40 53 0.338304 + 63 40 54 0.762996 + 63 40 55 0.997684 + 63 40 56 1 + 63 40 57 1 + 63 40 58 1 + 63 40 59 1 + 63 40 60 1 + 63 40 61 1 + 63 40 62 1 + 63 40 63 1 + 63 40 64 1 + 63 40 65 1 + 63 40 66 1 + 63 40 67 1 + 63 40 68 1 + 63 40 69 1 + 63 40 70 1 + 63 40 71 1 + 63 40 72 0.997684 + 63 40 73 0.762996 + 63 40 74 0.338304 + 63 40 75 0.012422 + 63 41 50 0.00182891 + 63 41 51 0.330857 + 63 41 52 0.849603 + 63 41 53 1 + 63 41 54 1 + 63 41 55 1 + 63 41 56 1 + 63 41 57 1 + 63 41 58 1 + 63 41 59 1 + 63 41 60 1 + 63 41 61 1 + 63 41 62 1 + 63 41 63 1 + 63 41 64 1 + 63 41 65 1 + 63 41 66 1 + 63 41 67 1 + 63 41 68 1 + 63 41 69 1 + 63 41 70 1 + 63 41 71 1 + 63 41 72 1 + 63 41 73 1 + 63 41 74 1 + 63 41 75 0.849603 + 63 41 76 0.330857 + 63 41 77 0.00182891 + 63 42 49 0.135234 + 63 42 50 0.738943 + 63 42 51 1 + 63 42 52 1 + 63 42 53 1 + 63 42 54 1 + 63 42 55 1 + 63 42 56 1 + 63 42 57 1 + 63 42 58 1 + 63 42 59 1 + 63 42 60 1 + 63 42 61 1 + 63 42 62 1 + 63 42 63 1 + 63 42 64 1 + 63 42 65 1 + 63 42 66 1 + 63 42 67 1 + 63 42 68 1 + 63 42 69 1 + 63 42 70 1 + 63 42 71 1 + 63 42 72 1 + 63 42 73 1 + 63 42 74 1 + 63 42 75 1 + 63 42 76 1 + 63 42 77 0.738943 + 63 42 78 0.135234 + 63 43 48 0.363238 + 63 43 49 0.951583 + 63 43 50 1 + 63 43 51 1 + 63 43 52 1 + 63 43 53 1 + 63 43 54 1 + 63 43 55 1 + 63 43 56 1 + 63 43 57 1 + 63 43 58 1 + 63 43 59 1 + 63 43 60 1 + 63 43 61 1 + 63 43 62 1 + 63 43 63 1 + 63 43 64 1 + 63 43 65 1 + 63 43 66 1 + 63 43 67 1 + 63 43 68 1 + 63 43 69 1 + 63 43 70 1 + 63 43 71 1 + 63 43 72 1 + 63 43 73 1 + 63 43 74 1 + 63 43 75 1 + 63 43 76 1 + 63 43 77 1 + 63 43 78 0.951583 + 63 43 79 0.363238 + 63 44 46 0.00976158 + 63 44 47 0.561032 + 63 44 48 0.999595 + 63 44 49 1 + 63 44 50 1 + 63 44 51 1 + 63 44 52 1 + 63 44 53 1 + 63 44 54 1 + 63 44 55 1 + 63 44 56 1 + 63 44 57 1 + 63 44 58 1 + 63 44 59 1 + 63 44 60 1 + 63 44 61 1 + 63 44 62 1 + 63 44 63 1 + 63 44 64 1 + 63 44 65 1 + 63 44 66 1 + 63 44 67 1 + 63 44 68 1 + 63 44 69 1 + 63 44 70 1 + 63 44 71 1 + 63 44 72 1 + 63 44 73 1 + 63 44 74 1 + 63 44 75 1 + 63 44 76 1 + 63 44 77 1 + 63 44 78 1 + 63 44 79 0.999595 + 63 44 80 0.561032 + 63 44 81 0.00976158 + 63 45 45 0.0189458 + 63 45 46 0.661608 + 63 45 47 1 + 63 45 48 1 + 63 45 49 1 + 63 45 50 1 + 63 45 51 1 + 63 45 52 1 + 63 45 53 1 + 63 45 54 1 + 63 45 55 1 + 63 45 56 1 + 63 45 57 1 + 63 45 58 1 + 63 45 59 1 + 63 45 60 1 + 63 45 61 1 + 63 45 62 1 + 63 45 63 1 + 63 45 64 1 + 63 45 65 1 + 63 45 66 1 + 63 45 67 1 + 63 45 68 1 + 63 45 69 1 + 63 45 70 1 + 63 45 71 1 + 63 45 72 1 + 63 45 73 1 + 63 45 74 1 + 63 45 75 1 + 63 45 76 1 + 63 45 77 1 + 63 45 78 1 + 63 45 79 1 + 63 45 80 1 + 63 45 81 0.661608 + 63 45 82 0.0189458 + 63 46 44 0.00976158 + 63 46 45 0.661608 + 63 46 46 1 + 63 46 47 1 + 63 46 48 1 + 63 46 49 1 + 63 46 50 1 + 63 46 51 1 + 63 46 52 1 + 63 46 53 1 + 63 46 54 1 + 63 46 55 1 + 63 46 56 1 + 63 46 57 1 + 63 46 58 1 + 63 46 59 1 + 63 46 60 1 + 63 46 61 1 + 63 46 62 1 + 63 46 63 1 + 63 46 64 1 + 63 46 65 1 + 63 46 66 1 + 63 46 67 1 + 63 46 68 1 + 63 46 69 1 + 63 46 70 1 + 63 46 71 1 + 63 46 72 1 + 63 46 73 1 + 63 46 74 1 + 63 46 75 1 + 63 46 76 1 + 63 46 77 1 + 63 46 78 1 + 63 46 79 1 + 63 46 80 1 + 63 46 81 1 + 63 46 82 0.661608 + 63 46 83 0.00976158 + 63 47 44 0.561032 + 63 47 45 1 + 63 47 46 1 + 63 47 47 1 + 63 47 48 1 + 63 47 49 1 + 63 47 50 1 + 63 47 51 1 + 63 47 52 1 + 63 47 53 1 + 63 47 54 1 + 63 47 55 1 + 63 47 56 1 + 63 47 57 1 + 63 47 58 1 + 63 47 59 1 + 63 47 60 1 + 63 47 61 1 + 63 47 62 1 + 63 47 63 1 + 63 47 64 1 + 63 47 65 1 + 63 47 66 1 + 63 47 67 1 + 63 47 68 1 + 63 47 69 1 + 63 47 70 1 + 63 47 71 1 + 63 47 72 1 + 63 47 73 1 + 63 47 74 1 + 63 47 75 1 + 63 47 76 1 + 63 47 77 1 + 63 47 78 1 + 63 47 79 1 + 63 47 80 1 + 63 47 81 1 + 63 47 82 1 + 63 47 83 0.561032 + 63 48 43 0.363238 + 63 48 44 0.999595 + 63 48 45 1 + 63 48 46 1 + 63 48 47 1 + 63 48 48 1 + 63 48 49 1 + 63 48 50 1 + 63 48 51 1 + 63 48 52 1 + 63 48 53 1 + 63 48 54 1 + 63 48 55 1 + 63 48 56 1 + 63 48 57 1 + 63 48 58 1 + 63 48 59 1 + 63 48 60 1 + 63 48 61 1 + 63 48 62 1 + 63 48 63 1 + 63 48 64 1 + 63 48 65 1 + 63 48 66 1 + 63 48 67 1 + 63 48 68 1 + 63 48 69 1 + 63 48 70 1 + 63 48 71 1 + 63 48 72 1 + 63 48 73 1 + 63 48 74 1 + 63 48 75 1 + 63 48 76 1 + 63 48 77 1 + 63 48 78 1 + 63 48 79 1 + 63 48 80 1 + 63 48 81 1 + 63 48 82 1 + 63 48 83 0.999595 + 63 48 84 0.363238 + 63 49 42 0.135234 + 63 49 43 0.951583 + 63 49 44 1 + 63 49 45 1 + 63 49 46 1 + 63 49 47 1 + 63 49 48 1 + 63 49 49 1 + 63 49 50 1 + 63 49 51 1 + 63 49 52 1 + 63 49 53 1 + 63 49 54 1 + 63 49 55 1 + 63 49 56 1 + 63 49 57 1 + 63 49 58 1 + 63 49 59 1 + 63 49 60 1 + 63 49 61 1 + 63 49 62 1 + 63 49 63 1 + 63 49 64 1 + 63 49 65 1 + 63 49 66 1 + 63 49 67 1 + 63 49 68 1 + 63 49 69 1 + 63 49 70 1 + 63 49 71 1 + 63 49 72 1 + 63 49 73 1 + 63 49 74 1 + 63 49 75 1 + 63 49 76 1 + 63 49 77 1 + 63 49 78 1 + 63 49 79 1 + 63 49 80 1 + 63 49 81 1 + 63 49 82 1 + 63 49 83 1 + 63 49 84 0.951583 + 63 49 85 0.135234 + 63 50 41 0.00182891 + 63 50 42 0.738943 + 63 50 43 1 + 63 50 44 1 + 63 50 45 1 + 63 50 46 1 + 63 50 47 1 + 63 50 48 1 + 63 50 49 1 + 63 50 50 1 + 63 50 51 1 + 63 50 52 1 + 63 50 53 1 + 63 50 54 1 + 63 50 55 1 + 63 50 56 1 + 63 50 57 1 + 63 50 58 1 + 63 50 59 1 + 63 50 60 1 + 63 50 61 1 + 63 50 62 1 + 63 50 63 1 + 63 50 64 1 + 63 50 65 1 + 63 50 66 1 + 63 50 67 1 + 63 50 68 1 + 63 50 69 1 + 63 50 70 1 + 63 50 71 1 + 63 50 72 1 + 63 50 73 1 + 63 50 74 1 + 63 50 75 1 + 63 50 76 1 + 63 50 77 1 + 63 50 78 1 + 63 50 79 1 + 63 50 80 1 + 63 50 81 1 + 63 50 82 1 + 63 50 83 1 + 63 50 84 1 + 63 50 85 0.738943 + 63 50 86 0.00182891 + 63 51 41 0.330857 + 63 51 42 1 + 63 51 43 1 + 63 51 44 1 + 63 51 45 1 + 63 51 46 1 + 63 51 47 1 + 63 51 48 1 + 63 51 49 1 + 63 51 50 1 + 63 51 51 1 + 63 51 52 1 + 63 51 53 1 + 63 51 54 1 + 63 51 55 1 + 63 51 56 1 + 63 51 57 1 + 63 51 58 1 + 63 51 59 1 + 63 51 60 1 + 63 51 61 1 + 63 51 62 1 + 63 51 63 1 + 63 51 64 1 + 63 51 65 1 + 63 51 66 1 + 63 51 67 1 + 63 51 68 1 + 63 51 69 1 + 63 51 70 1 + 63 51 71 1 + 63 51 72 1 + 63 51 73 1 + 63 51 74 1 + 63 51 75 1 + 63 51 76 1 + 63 51 77 1 + 63 51 78 1 + 63 51 79 1 + 63 51 80 1 + 63 51 81 1 + 63 51 82 1 + 63 51 83 1 + 63 51 84 1 + 63 51 85 1 + 63 51 86 0.330857 + 63 52 40 0.012422 + 63 52 41 0.849603 + 63 52 42 1 + 63 52 43 1 + 63 52 44 1 + 63 52 45 1 + 63 52 46 1 + 63 52 47 1 + 63 52 48 1 + 63 52 49 1 + 63 52 50 1 + 63 52 51 1 + 63 52 52 1 + 63 52 53 1 + 63 52 54 1 + 63 52 55 1 + 63 52 56 1 + 63 52 57 1 + 63 52 58 1 + 63 52 59 1 + 63 52 60 1 + 63 52 61 1 + 63 52 62 1 + 63 52 63 1 + 63 52 64 1 + 63 52 65 1 + 63 52 66 1 + 63 52 67 1 + 63 52 68 1 + 63 52 69 1 + 63 52 70 1 + 63 52 71 1 + 63 52 72 1 + 63 52 73 1 + 63 52 74 1 + 63 52 75 1 + 63 52 76 1 + 63 52 77 1 + 63 52 78 1 + 63 52 79 1 + 63 52 80 1 + 63 52 81 1 + 63 52 82 1 + 63 52 83 1 + 63 52 84 1 + 63 52 85 1 + 63 52 86 0.849603 + 63 52 87 0.012422 + 63 53 40 0.338304 + 63 53 41 1 + 63 53 42 1 + 63 53 43 1 + 63 53 44 1 + 63 53 45 1 + 63 53 46 1 + 63 53 47 1 + 63 53 48 1 + 63 53 49 1 + 63 53 50 1 + 63 53 51 1 + 63 53 52 1 + 63 53 53 1 + 63 53 54 1 + 63 53 55 1 + 63 53 56 1 + 63 53 57 1 + 63 53 58 1 + 63 53 59 1 + 63 53 60 1 + 63 53 61 1 + 63 53 62 1 + 63 53 63 1 + 63 53 64 1 + 63 53 65 1 + 63 53 66 1 + 63 53 67 1 + 63 53 68 1 + 63 53 69 1 + 63 53 70 1 + 63 53 71 1 + 63 53 72 1 + 63 53 73 1 + 63 53 74 1 + 63 53 75 1 + 63 53 76 1 + 63 53 77 1 + 63 53 78 1 + 63 53 79 1 + 63 53 80 1 + 63 53 81 1 + 63 53 82 1 + 63 53 83 1 + 63 53 84 1 + 63 53 85 1 + 63 53 86 1 + 63 53 87 0.338304 + 63 54 40 0.762996 + 63 54 41 1 + 63 54 42 1 + 63 54 43 1 + 63 54 44 1 + 63 54 45 1 + 63 54 46 1 + 63 54 47 1 + 63 54 48 1 + 63 54 49 1 + 63 54 50 1 + 63 54 51 1 + 63 54 52 1 + 63 54 53 1 + 63 54 54 1 + 63 54 55 1 + 63 54 56 1 + 63 54 57 1 + 63 54 58 1 + 63 54 59 1 + 63 54 60 1 + 63 54 61 1 + 63 54 62 1 + 63 54 63 1 + 63 54 64 1 + 63 54 65 1 + 63 54 66 1 + 63 54 67 1 + 63 54 68 1 + 63 54 69 1 + 63 54 70 1 + 63 54 71 1 + 63 54 72 1 + 63 54 73 1 + 63 54 74 1 + 63 54 75 1 + 63 54 76 1 + 63 54 77 1 + 63 54 78 1 + 63 54 79 1 + 63 54 80 1 + 63 54 81 1 + 63 54 82 1 + 63 54 83 1 + 63 54 84 1 + 63 54 85 1 + 63 54 86 1 + 63 54 87 0.762996 + 63 55 39 0.141143 + 63 55 40 0.997684 + 63 55 41 1 + 63 55 42 1 + 63 55 43 1 + 63 55 44 1 + 63 55 45 1 + 63 55 46 1 + 63 55 47 1 + 63 55 48 1 + 63 55 49 1 + 63 55 50 1 + 63 55 51 1 + 63 55 52 1 + 63 55 53 1 + 63 55 54 1 + 63 55 55 1 + 63 55 56 1 + 63 55 57 1 + 63 55 58 1 + 63 55 59 1 + 63 55 60 1 + 63 55 61 1 + 63 55 62 1 + 63 55 63 1 + 63 55 64 1 + 63 55 65 1 + 63 55 66 1 + 63 55 67 1 + 63 55 68 1 + 63 55 69 1 + 63 55 70 1 + 63 55 71 1 + 63 55 72 1 + 63 55 73 1 + 63 55 74 1 + 63 55 75 1 + 63 55 76 1 + 63 55 77 1 + 63 55 78 1 + 63 55 79 1 + 63 55 80 1 + 63 55 81 1 + 63 55 82 1 + 63 55 83 1 + 63 55 84 1 + 63 55 85 1 + 63 55 86 1 + 63 55 87 0.997684 + 63 55 88 0.141143 + 63 56 39 0.46805 + 63 56 40 1 + 63 56 41 1 + 63 56 42 1 + 63 56 43 1 + 63 56 44 1 + 63 56 45 1 + 63 56 46 1 + 63 56 47 1 + 63 56 48 1 + 63 56 49 1 + 63 56 50 1 + 63 56 51 1 + 63 56 52 1 + 63 56 53 1 + 63 56 54 1 + 63 56 55 1 + 63 56 56 1 + 63 56 57 1 + 63 56 58 1 + 63 56 59 1 + 63 56 60 1 + 63 56 61 1 + 63 56 62 1 + 63 56 63 1 + 63 56 64 1 + 63 56 65 1 + 63 56 66 1 + 63 56 67 1 + 63 56 68 1 + 63 56 69 1 + 63 56 70 1 + 63 56 71 1 + 63 56 72 1 + 63 56 73 1 + 63 56 74 1 + 63 56 75 1 + 63 56 76 1 + 63 56 77 1 + 63 56 78 1 + 63 56 79 1 + 63 56 80 1 + 63 56 81 1 + 63 56 82 1 + 63 56 83 1 + 63 56 84 1 + 63 56 85 1 + 63 56 86 1 + 63 56 87 1 + 63 56 88 0.46805 + 63 57 39 0.752526 + 63 57 40 1 + 63 57 41 1 + 63 57 42 1 + 63 57 43 1 + 63 57 44 1 + 63 57 45 1 + 63 57 46 1 + 63 57 47 1 + 63 57 48 1 + 63 57 49 1 + 63 57 50 1 + 63 57 51 1 + 63 57 52 1 + 63 57 53 1 + 63 57 54 1 + 63 57 55 1 + 63 57 56 1 + 63 57 57 1 + 63 57 58 1 + 63 57 59 1 + 63 57 60 1 + 63 57 61 1 + 63 57 62 1 + 63 57 63 1 + 63 57 64 1 + 63 57 65 1 + 63 57 66 1 + 63 57 67 1 + 63 57 68 1 + 63 57 69 1 + 63 57 70 1 + 63 57 71 1 + 63 57 72 1 + 63 57 73 1 + 63 57 74 1 + 63 57 75 1 + 63 57 76 1 + 63 57 77 1 + 63 57 78 1 + 63 57 79 1 + 63 57 80 1 + 63 57 81 1 + 63 57 82 1 + 63 57 83 1 + 63 57 84 1 + 63 57 85 1 + 63 57 86 1 + 63 57 87 1 + 63 57 88 0.752526 + 63 58 38 0.0245266 + 63 58 39 0.969258 + 63 58 40 1 + 63 58 41 1 + 63 58 42 1 + 63 58 43 1 + 63 58 44 1 + 63 58 45 1 + 63 58 46 1 + 63 58 47 1 + 63 58 48 1 + 63 58 49 1 + 63 58 50 1 + 63 58 51 1 + 63 58 52 1 + 63 58 53 1 + 63 58 54 1 + 63 58 55 1 + 63 58 56 1 + 63 58 57 1 + 63 58 58 1 + 63 58 59 1 + 63 58 60 1 + 63 58 61 1 + 63 58 62 1 + 63 58 63 1 + 63 58 64 1 + 63 58 65 1 + 63 58 66 1 + 63 58 67 1 + 63 58 68 1 + 63 58 69 1 + 63 58 70 1 + 63 58 71 1 + 63 58 72 1 + 63 58 73 1 + 63 58 74 1 + 63 58 75 1 + 63 58 76 1 + 63 58 77 1 + 63 58 78 1 + 63 58 79 1 + 63 58 80 1 + 63 58 81 1 + 63 58 82 1 + 63 58 83 1 + 63 58 84 1 + 63 58 85 1 + 63 58 86 1 + 63 58 87 1 + 63 58 88 0.969258 + 63 58 89 0.0245266 + 63 59 38 0.193067 + 63 59 39 1 + 63 59 40 1 + 63 59 41 1 + 63 59 42 1 + 63 59 43 1 + 63 59 44 1 + 63 59 45 1 + 63 59 46 1 + 63 59 47 1 + 63 59 48 1 + 63 59 49 1 + 63 59 50 1 + 63 59 51 1 + 63 59 52 1 + 63 59 53 1 + 63 59 54 1 + 63 59 55 1 + 63 59 56 1 + 63 59 57 1 + 63 59 58 1 + 63 59 59 1 + 63 59 60 1 + 63 59 61 1 + 63 59 62 1 + 63 59 63 1 + 63 59 64 1 + 63 59 65 1 + 63 59 66 1 + 63 59 67 1 + 63 59 68 1 + 63 59 69 1 + 63 59 70 1 + 63 59 71 1 + 63 59 72 1 + 63 59 73 1 + 63 59 74 1 + 63 59 75 1 + 63 59 76 1 + 63 59 77 1 + 63 59 78 1 + 63 59 79 1 + 63 59 80 1 + 63 59 81 1 + 63 59 82 1 + 63 59 83 1 + 63 59 84 1 + 63 59 85 1 + 63 59 86 1 + 63 59 87 1 + 63 59 88 1 + 63 59 89 0.193067 + 63 60 38 0.351365 + 63 60 39 1 + 63 60 40 1 + 63 60 41 1 + 63 60 42 1 + 63 60 43 1 + 63 60 44 1 + 63 60 45 1 + 63 60 46 1 + 63 60 47 1 + 63 60 48 1 + 63 60 49 1 + 63 60 50 1 + 63 60 51 1 + 63 60 52 1 + 63 60 53 1 + 63 60 54 1 + 63 60 55 1 + 63 60 56 1 + 63 60 57 1 + 63 60 58 1 + 63 60 59 1 + 63 60 60 1 + 63 60 61 1 + 63 60 62 1 + 63 60 63 1 + 63 60 64 1 + 63 60 65 1 + 63 60 66 1 + 63 60 67 1 + 63 60 68 1 + 63 60 69 1 + 63 60 70 1 + 63 60 71 1 + 63 60 72 1 + 63 60 73 1 + 63 60 74 1 + 63 60 75 1 + 63 60 76 1 + 63 60 77 1 + 63 60 78 1 + 63 60 79 1 + 63 60 80 1 + 63 60 81 1 + 63 60 82 1 + 63 60 83 1 + 63 60 84 1 + 63 60 85 1 + 63 60 86 1 + 63 60 87 1 + 63 60 88 1 + 63 60 89 0.351365 + 63 61 38 0.469442 + 63 61 39 1 + 63 61 40 1 + 63 61 41 1 + 63 61 42 1 + 63 61 43 1 + 63 61 44 1 + 63 61 45 1 + 63 61 46 1 + 63 61 47 1 + 63 61 48 1 + 63 61 49 1 + 63 61 50 1 + 63 61 51 1 + 63 61 52 1 + 63 61 53 1 + 63 61 54 1 + 63 61 55 1 + 63 61 56 1 + 63 61 57 1 + 63 61 58 1 + 63 61 59 1 + 63 61 60 1 + 63 61 61 1 + 63 61 62 1 + 63 61 63 1 + 63 61 64 1 + 63 61 65 1 + 63 61 66 1 + 63 61 67 1 + 63 61 68 1 + 63 61 69 1 + 63 61 70 1 + 63 61 71 1 + 63 61 72 1 + 63 61 73 1 + 63 61 74 1 + 63 61 75 1 + 63 61 76 1 + 63 61 77 1 + 63 61 78 1 + 63 61 79 1 + 63 61 80 1 + 63 61 81 1 + 63 61 82 1 + 63 61 83 1 + 63 61 84 1 + 63 61 85 1 + 63 61 86 1 + 63 61 87 1 + 63 61 88 1 + 63 61 89 0.469442 + 63 62 38 0.547857 + 63 62 39 1 + 63 62 40 1 + 63 62 41 1 + 63 62 42 1 + 63 62 43 1 + 63 62 44 1 + 63 62 45 1 + 63 62 46 1 + 63 62 47 1 + 63 62 48 1 + 63 62 49 1 + 63 62 50 1 + 63 62 51 1 + 63 62 52 1 + 63 62 53 1 + 63 62 54 1 + 63 62 55 1 + 63 62 56 1 + 63 62 57 1 + 63 62 58 1 + 63 62 59 1 + 63 62 60 1 + 63 62 61 1 + 63 62 62 1 + 63 62 63 1 + 63 62 64 1 + 63 62 65 1 + 63 62 66 1 + 63 62 67 1 + 63 62 68 1 + 63 62 69 1 + 63 62 70 1 + 63 62 71 1 + 63 62 72 1 + 63 62 73 1 + 63 62 74 1 + 63 62 75 1 + 63 62 76 1 + 63 62 77 1 + 63 62 78 1 + 63 62 79 1 + 63 62 80 1 + 63 62 81 1 + 63 62 82 1 + 63 62 83 1 + 63 62 84 1 + 63 62 85 1 + 63 62 86 1 + 63 62 87 1 + 63 62 88 1 + 63 62 89 0.547857 + 63 63 38 0.586975 + 63 63 39 1 + 63 63 40 1 + 63 63 41 1 + 63 63 42 1 + 63 63 43 1 + 63 63 44 1 + 63 63 45 1 + 63 63 46 1 + 63 63 47 1 + 63 63 48 1 + 63 63 49 1 + 63 63 50 1 + 63 63 51 1 + 63 63 52 1 + 63 63 53 1 + 63 63 54 1 + 63 63 55 1 + 63 63 56 1 + 63 63 57 1 + 63 63 58 1 + 63 63 59 1 + 63 63 60 1 + 63 63 61 1 + 63 63 62 1 + 63 63 63 1 + 63 63 64 1 + 63 63 65 1 + 63 63 66 1 + 63 63 67 1 + 63 63 68 1 + 63 63 69 1 + 63 63 70 1 + 63 63 71 1 + 63 63 72 1 + 63 63 73 1 + 63 63 74 1 + 63 63 75 1 + 63 63 76 1 + 63 63 77 1 + 63 63 78 1 + 63 63 79 1 + 63 63 80 1 + 63 63 81 1 + 63 63 82 1 + 63 63 83 1 + 63 63 84 1 + 63 63 85 1 + 63 63 86 1 + 63 63 87 1 + 63 63 88 1 + 63 63 89 0.586975 + 63 64 38 0.586975 + 63 64 39 1 + 63 64 40 1 + 63 64 41 1 + 63 64 42 1 + 63 64 43 1 + 63 64 44 1 + 63 64 45 1 + 63 64 46 1 + 63 64 47 1 + 63 64 48 1 + 63 64 49 1 + 63 64 50 1 + 63 64 51 1 + 63 64 52 1 + 63 64 53 1 + 63 64 54 1 + 63 64 55 1 + 63 64 56 1 + 63 64 57 1 + 63 64 58 1 + 63 64 59 1 + 63 64 60 1 + 63 64 61 1 + 63 64 62 1 + 63 64 63 1 + 63 64 64 1 + 63 64 65 1 + 63 64 66 1 + 63 64 67 1 + 63 64 68 1 + 63 64 69 1 + 63 64 70 1 + 63 64 71 1 + 63 64 72 1 + 63 64 73 1 + 63 64 74 1 + 63 64 75 1 + 63 64 76 1 + 63 64 77 1 + 63 64 78 1 + 63 64 79 1 + 63 64 80 1 + 63 64 81 1 + 63 64 82 1 + 63 64 83 1 + 63 64 84 1 + 63 64 85 1 + 63 64 86 1 + 63 64 87 1 + 63 64 88 1 + 63 64 89 0.586975 + 63 65 38 0.547857 + 63 65 39 1 + 63 65 40 1 + 63 65 41 1 + 63 65 42 1 + 63 65 43 1 + 63 65 44 1 + 63 65 45 1 + 63 65 46 1 + 63 65 47 1 + 63 65 48 1 + 63 65 49 1 + 63 65 50 1 + 63 65 51 1 + 63 65 52 1 + 63 65 53 1 + 63 65 54 1 + 63 65 55 1 + 63 65 56 1 + 63 65 57 1 + 63 65 58 1 + 63 65 59 1 + 63 65 60 1 + 63 65 61 1 + 63 65 62 1 + 63 65 63 1 + 63 65 64 1 + 63 65 65 1 + 63 65 66 1 + 63 65 67 1 + 63 65 68 1 + 63 65 69 1 + 63 65 70 1 + 63 65 71 1 + 63 65 72 1 + 63 65 73 1 + 63 65 74 1 + 63 65 75 1 + 63 65 76 1 + 63 65 77 1 + 63 65 78 1 + 63 65 79 1 + 63 65 80 1 + 63 65 81 1 + 63 65 82 1 + 63 65 83 1 + 63 65 84 1 + 63 65 85 1 + 63 65 86 1 + 63 65 87 1 + 63 65 88 1 + 63 65 89 0.547857 + 63 66 38 0.469442 + 63 66 39 1 + 63 66 40 1 + 63 66 41 1 + 63 66 42 1 + 63 66 43 1 + 63 66 44 1 + 63 66 45 1 + 63 66 46 1 + 63 66 47 1 + 63 66 48 1 + 63 66 49 1 + 63 66 50 1 + 63 66 51 1 + 63 66 52 1 + 63 66 53 1 + 63 66 54 1 + 63 66 55 1 + 63 66 56 1 + 63 66 57 1 + 63 66 58 1 + 63 66 59 1 + 63 66 60 1 + 63 66 61 1 + 63 66 62 1 + 63 66 63 1 + 63 66 64 1 + 63 66 65 1 + 63 66 66 1 + 63 66 67 1 + 63 66 68 1 + 63 66 69 1 + 63 66 70 1 + 63 66 71 1 + 63 66 72 1 + 63 66 73 1 + 63 66 74 1 + 63 66 75 1 + 63 66 76 1 + 63 66 77 1 + 63 66 78 1 + 63 66 79 1 + 63 66 80 1 + 63 66 81 1 + 63 66 82 1 + 63 66 83 1 + 63 66 84 1 + 63 66 85 1 + 63 66 86 1 + 63 66 87 1 + 63 66 88 1 + 63 66 89 0.469442 + 63 67 38 0.351365 + 63 67 39 1 + 63 67 40 1 + 63 67 41 1 + 63 67 42 1 + 63 67 43 1 + 63 67 44 1 + 63 67 45 1 + 63 67 46 1 + 63 67 47 1 + 63 67 48 1 + 63 67 49 1 + 63 67 50 1 + 63 67 51 1 + 63 67 52 1 + 63 67 53 1 + 63 67 54 1 + 63 67 55 1 + 63 67 56 1 + 63 67 57 1 + 63 67 58 1 + 63 67 59 1 + 63 67 60 1 + 63 67 61 1 + 63 67 62 1 + 63 67 63 1 + 63 67 64 1 + 63 67 65 1 + 63 67 66 1 + 63 67 67 1 + 63 67 68 1 + 63 67 69 1 + 63 67 70 1 + 63 67 71 1 + 63 67 72 1 + 63 67 73 1 + 63 67 74 1 + 63 67 75 1 + 63 67 76 1 + 63 67 77 1 + 63 67 78 1 + 63 67 79 1 + 63 67 80 1 + 63 67 81 1 + 63 67 82 1 + 63 67 83 1 + 63 67 84 1 + 63 67 85 1 + 63 67 86 1 + 63 67 87 1 + 63 67 88 1 + 63 67 89 0.351365 + 63 68 38 0.193067 + 63 68 39 1 + 63 68 40 1 + 63 68 41 1 + 63 68 42 1 + 63 68 43 1 + 63 68 44 1 + 63 68 45 1 + 63 68 46 1 + 63 68 47 1 + 63 68 48 1 + 63 68 49 1 + 63 68 50 1 + 63 68 51 1 + 63 68 52 1 + 63 68 53 1 + 63 68 54 1 + 63 68 55 1 + 63 68 56 1 + 63 68 57 1 + 63 68 58 1 + 63 68 59 1 + 63 68 60 1 + 63 68 61 1 + 63 68 62 1 + 63 68 63 1 + 63 68 64 1 + 63 68 65 1 + 63 68 66 1 + 63 68 67 1 + 63 68 68 1 + 63 68 69 1 + 63 68 70 1 + 63 68 71 1 + 63 68 72 1 + 63 68 73 1 + 63 68 74 1 + 63 68 75 1 + 63 68 76 1 + 63 68 77 1 + 63 68 78 1 + 63 68 79 1 + 63 68 80 1 + 63 68 81 1 + 63 68 82 1 + 63 68 83 1 + 63 68 84 1 + 63 68 85 1 + 63 68 86 1 + 63 68 87 1 + 63 68 88 1 + 63 68 89 0.193067 + 63 69 38 0.0245266 + 63 69 39 0.969258 + 63 69 40 1 + 63 69 41 1 + 63 69 42 1 + 63 69 43 1 + 63 69 44 1 + 63 69 45 1 + 63 69 46 1 + 63 69 47 1 + 63 69 48 1 + 63 69 49 1 + 63 69 50 1 + 63 69 51 1 + 63 69 52 1 + 63 69 53 1 + 63 69 54 1 + 63 69 55 1 + 63 69 56 1 + 63 69 57 1 + 63 69 58 1 + 63 69 59 1 + 63 69 60 1 + 63 69 61 1 + 63 69 62 1 + 63 69 63 1 + 63 69 64 1 + 63 69 65 1 + 63 69 66 1 + 63 69 67 1 + 63 69 68 1 + 63 69 69 1 + 63 69 70 1 + 63 69 71 1 + 63 69 72 1 + 63 69 73 1 + 63 69 74 1 + 63 69 75 1 + 63 69 76 1 + 63 69 77 1 + 63 69 78 1 + 63 69 79 1 + 63 69 80 1 + 63 69 81 1 + 63 69 82 1 + 63 69 83 1 + 63 69 84 1 + 63 69 85 1 + 63 69 86 1 + 63 69 87 1 + 63 69 88 0.969258 + 63 69 89 0.0245266 + 63 70 39 0.752526 + 63 70 40 1 + 63 70 41 1 + 63 70 42 1 + 63 70 43 1 + 63 70 44 1 + 63 70 45 1 + 63 70 46 1 + 63 70 47 1 + 63 70 48 1 + 63 70 49 1 + 63 70 50 1 + 63 70 51 1 + 63 70 52 1 + 63 70 53 1 + 63 70 54 1 + 63 70 55 1 + 63 70 56 1 + 63 70 57 1 + 63 70 58 1 + 63 70 59 1 + 63 70 60 1 + 63 70 61 1 + 63 70 62 1 + 63 70 63 1 + 63 70 64 1 + 63 70 65 1 + 63 70 66 1 + 63 70 67 1 + 63 70 68 1 + 63 70 69 1 + 63 70 70 1 + 63 70 71 1 + 63 70 72 1 + 63 70 73 1 + 63 70 74 1 + 63 70 75 1 + 63 70 76 1 + 63 70 77 1 + 63 70 78 1 + 63 70 79 1 + 63 70 80 1 + 63 70 81 1 + 63 70 82 1 + 63 70 83 1 + 63 70 84 1 + 63 70 85 1 + 63 70 86 1 + 63 70 87 1 + 63 70 88 0.752526 + 63 71 39 0.46805 + 63 71 40 1 + 63 71 41 1 + 63 71 42 1 + 63 71 43 1 + 63 71 44 1 + 63 71 45 1 + 63 71 46 1 + 63 71 47 1 + 63 71 48 1 + 63 71 49 1 + 63 71 50 1 + 63 71 51 1 + 63 71 52 1 + 63 71 53 1 + 63 71 54 1 + 63 71 55 1 + 63 71 56 1 + 63 71 57 1 + 63 71 58 1 + 63 71 59 1 + 63 71 60 1 + 63 71 61 1 + 63 71 62 1 + 63 71 63 1 + 63 71 64 1 + 63 71 65 1 + 63 71 66 1 + 63 71 67 1 + 63 71 68 1 + 63 71 69 1 + 63 71 70 1 + 63 71 71 1 + 63 71 72 1 + 63 71 73 1 + 63 71 74 1 + 63 71 75 1 + 63 71 76 1 + 63 71 77 1 + 63 71 78 1 + 63 71 79 1 + 63 71 80 1 + 63 71 81 1 + 63 71 82 1 + 63 71 83 1 + 63 71 84 1 + 63 71 85 1 + 63 71 86 1 + 63 71 87 1 + 63 71 88 0.46805 + 63 72 39 0.141143 + 63 72 40 0.997684 + 63 72 41 1 + 63 72 42 1 + 63 72 43 1 + 63 72 44 1 + 63 72 45 1 + 63 72 46 1 + 63 72 47 1 + 63 72 48 1 + 63 72 49 1 + 63 72 50 1 + 63 72 51 1 + 63 72 52 1 + 63 72 53 1 + 63 72 54 1 + 63 72 55 1 + 63 72 56 1 + 63 72 57 1 + 63 72 58 1 + 63 72 59 1 + 63 72 60 1 + 63 72 61 1 + 63 72 62 1 + 63 72 63 1 + 63 72 64 1 + 63 72 65 1 + 63 72 66 1 + 63 72 67 1 + 63 72 68 1 + 63 72 69 1 + 63 72 70 1 + 63 72 71 1 + 63 72 72 1 + 63 72 73 1 + 63 72 74 1 + 63 72 75 1 + 63 72 76 1 + 63 72 77 1 + 63 72 78 1 + 63 72 79 1 + 63 72 80 1 + 63 72 81 1 + 63 72 82 1 + 63 72 83 1 + 63 72 84 1 + 63 72 85 1 + 63 72 86 1 + 63 72 87 0.997684 + 63 72 88 0.141143 + 63 73 40 0.762996 + 63 73 41 1 + 63 73 42 1 + 63 73 43 1 + 63 73 44 1 + 63 73 45 1 + 63 73 46 1 + 63 73 47 1 + 63 73 48 1 + 63 73 49 1 + 63 73 50 1 + 63 73 51 1 + 63 73 52 1 + 63 73 53 1 + 63 73 54 1 + 63 73 55 1 + 63 73 56 1 + 63 73 57 1 + 63 73 58 1 + 63 73 59 1 + 63 73 60 1 + 63 73 61 1 + 63 73 62 1 + 63 73 63 1 + 63 73 64 1 + 63 73 65 1 + 63 73 66 1 + 63 73 67 1 + 63 73 68 1 + 63 73 69 1 + 63 73 70 1 + 63 73 71 1 + 63 73 72 1 + 63 73 73 1 + 63 73 74 1 + 63 73 75 1 + 63 73 76 1 + 63 73 77 1 + 63 73 78 1 + 63 73 79 1 + 63 73 80 1 + 63 73 81 1 + 63 73 82 1 + 63 73 83 1 + 63 73 84 1 + 63 73 85 1 + 63 73 86 1 + 63 73 87 0.762996 + 63 74 40 0.338304 + 63 74 41 1 + 63 74 42 1 + 63 74 43 1 + 63 74 44 1 + 63 74 45 1 + 63 74 46 1 + 63 74 47 1 + 63 74 48 1 + 63 74 49 1 + 63 74 50 1 + 63 74 51 1 + 63 74 52 1 + 63 74 53 1 + 63 74 54 1 + 63 74 55 1 + 63 74 56 1 + 63 74 57 1 + 63 74 58 1 + 63 74 59 1 + 63 74 60 1 + 63 74 61 1 + 63 74 62 1 + 63 74 63 1 + 63 74 64 1 + 63 74 65 1 + 63 74 66 1 + 63 74 67 1 + 63 74 68 1 + 63 74 69 1 + 63 74 70 1 + 63 74 71 1 + 63 74 72 1 + 63 74 73 1 + 63 74 74 1 + 63 74 75 1 + 63 74 76 1 + 63 74 77 1 + 63 74 78 1 + 63 74 79 1 + 63 74 80 1 + 63 74 81 1 + 63 74 82 1 + 63 74 83 1 + 63 74 84 1 + 63 74 85 1 + 63 74 86 1 + 63 74 87 0.338304 + 63 75 40 0.012422 + 63 75 41 0.849603 + 63 75 42 1 + 63 75 43 1 + 63 75 44 1 + 63 75 45 1 + 63 75 46 1 + 63 75 47 1 + 63 75 48 1 + 63 75 49 1 + 63 75 50 1 + 63 75 51 1 + 63 75 52 1 + 63 75 53 1 + 63 75 54 1 + 63 75 55 1 + 63 75 56 1 + 63 75 57 1 + 63 75 58 1 + 63 75 59 1 + 63 75 60 1 + 63 75 61 1 + 63 75 62 1 + 63 75 63 1 + 63 75 64 1 + 63 75 65 1 + 63 75 66 1 + 63 75 67 1 + 63 75 68 1 + 63 75 69 1 + 63 75 70 1 + 63 75 71 1 + 63 75 72 1 + 63 75 73 1 + 63 75 74 1 + 63 75 75 1 + 63 75 76 1 + 63 75 77 1 + 63 75 78 1 + 63 75 79 1 + 63 75 80 1 + 63 75 81 1 + 63 75 82 1 + 63 75 83 1 + 63 75 84 1 + 63 75 85 1 + 63 75 86 0.849603 + 63 75 87 0.012422 + 63 76 41 0.330857 + 63 76 42 1 + 63 76 43 1 + 63 76 44 1 + 63 76 45 1 + 63 76 46 1 + 63 76 47 1 + 63 76 48 1 + 63 76 49 1 + 63 76 50 1 + 63 76 51 1 + 63 76 52 1 + 63 76 53 1 + 63 76 54 1 + 63 76 55 1 + 63 76 56 1 + 63 76 57 1 + 63 76 58 1 + 63 76 59 1 + 63 76 60 1 + 63 76 61 1 + 63 76 62 1 + 63 76 63 1 + 63 76 64 1 + 63 76 65 1 + 63 76 66 1 + 63 76 67 1 + 63 76 68 1 + 63 76 69 1 + 63 76 70 1 + 63 76 71 1 + 63 76 72 1 + 63 76 73 1 + 63 76 74 1 + 63 76 75 1 + 63 76 76 1 + 63 76 77 1 + 63 76 78 1 + 63 76 79 1 + 63 76 80 1 + 63 76 81 1 + 63 76 82 1 + 63 76 83 1 + 63 76 84 1 + 63 76 85 1 + 63 76 86 0.330857 + 63 77 41 0.00182891 + 63 77 42 0.738943 + 63 77 43 1 + 63 77 44 1 + 63 77 45 1 + 63 77 46 1 + 63 77 47 1 + 63 77 48 1 + 63 77 49 1 + 63 77 50 1 + 63 77 51 1 + 63 77 52 1 + 63 77 53 1 + 63 77 54 1 + 63 77 55 1 + 63 77 56 1 + 63 77 57 1 + 63 77 58 1 + 63 77 59 1 + 63 77 60 1 + 63 77 61 1 + 63 77 62 1 + 63 77 63 1 + 63 77 64 1 + 63 77 65 1 + 63 77 66 1 + 63 77 67 1 + 63 77 68 1 + 63 77 69 1 + 63 77 70 1 + 63 77 71 1 + 63 77 72 1 + 63 77 73 1 + 63 77 74 1 + 63 77 75 1 + 63 77 76 1 + 63 77 77 1 + 63 77 78 1 + 63 77 79 1 + 63 77 80 1 + 63 77 81 1 + 63 77 82 1 + 63 77 83 1 + 63 77 84 1 + 63 77 85 0.738943 + 63 77 86 0.00182891 + 63 78 42 0.135234 + 63 78 43 0.951583 + 63 78 44 1 + 63 78 45 1 + 63 78 46 1 + 63 78 47 1 + 63 78 48 1 + 63 78 49 1 + 63 78 50 1 + 63 78 51 1 + 63 78 52 1 + 63 78 53 1 + 63 78 54 1 + 63 78 55 1 + 63 78 56 1 + 63 78 57 1 + 63 78 58 1 + 63 78 59 1 + 63 78 60 1 + 63 78 61 1 + 63 78 62 1 + 63 78 63 1 + 63 78 64 1 + 63 78 65 1 + 63 78 66 1 + 63 78 67 1 + 63 78 68 1 + 63 78 69 1 + 63 78 70 1 + 63 78 71 1 + 63 78 72 1 + 63 78 73 1 + 63 78 74 1 + 63 78 75 1 + 63 78 76 1 + 63 78 77 1 + 63 78 78 1 + 63 78 79 1 + 63 78 80 1 + 63 78 81 1 + 63 78 82 1 + 63 78 83 1 + 63 78 84 0.951583 + 63 78 85 0.135234 + 63 79 43 0.363238 + 63 79 44 0.999595 + 63 79 45 1 + 63 79 46 1 + 63 79 47 1 + 63 79 48 1 + 63 79 49 1 + 63 79 50 1 + 63 79 51 1 + 63 79 52 1 + 63 79 53 1 + 63 79 54 1 + 63 79 55 1 + 63 79 56 1 + 63 79 57 1 + 63 79 58 1 + 63 79 59 1 + 63 79 60 1 + 63 79 61 1 + 63 79 62 1 + 63 79 63 1 + 63 79 64 1 + 63 79 65 1 + 63 79 66 1 + 63 79 67 1 + 63 79 68 1 + 63 79 69 1 + 63 79 70 1 + 63 79 71 1 + 63 79 72 1 + 63 79 73 1 + 63 79 74 1 + 63 79 75 1 + 63 79 76 1 + 63 79 77 1 + 63 79 78 1 + 63 79 79 1 + 63 79 80 1 + 63 79 81 1 + 63 79 82 1 + 63 79 83 0.999595 + 63 79 84 0.363238 + 63 80 44 0.561032 + 63 80 45 1 + 63 80 46 1 + 63 80 47 1 + 63 80 48 1 + 63 80 49 1 + 63 80 50 1 + 63 80 51 1 + 63 80 52 1 + 63 80 53 1 + 63 80 54 1 + 63 80 55 1 + 63 80 56 1 + 63 80 57 1 + 63 80 58 1 + 63 80 59 1 + 63 80 60 1 + 63 80 61 1 + 63 80 62 1 + 63 80 63 1 + 63 80 64 1 + 63 80 65 1 + 63 80 66 1 + 63 80 67 1 + 63 80 68 1 + 63 80 69 1 + 63 80 70 1 + 63 80 71 1 + 63 80 72 1 + 63 80 73 1 + 63 80 74 1 + 63 80 75 1 + 63 80 76 1 + 63 80 77 1 + 63 80 78 1 + 63 80 79 1 + 63 80 80 1 + 63 80 81 1 + 63 80 82 1 + 63 80 83 0.561032 + 63 81 44 0.00976158 + 63 81 45 0.661608 + 63 81 46 1 + 63 81 47 1 + 63 81 48 1 + 63 81 49 1 + 63 81 50 1 + 63 81 51 1 + 63 81 52 1 + 63 81 53 1 + 63 81 54 1 + 63 81 55 1 + 63 81 56 1 + 63 81 57 1 + 63 81 58 1 + 63 81 59 1 + 63 81 60 1 + 63 81 61 1 + 63 81 62 1 + 63 81 63 1 + 63 81 64 1 + 63 81 65 1 + 63 81 66 1 + 63 81 67 1 + 63 81 68 1 + 63 81 69 1 + 63 81 70 1 + 63 81 71 1 + 63 81 72 1 + 63 81 73 1 + 63 81 74 1 + 63 81 75 1 + 63 81 76 1 + 63 81 77 1 + 63 81 78 1 + 63 81 79 1 + 63 81 80 1 + 63 81 81 1 + 63 81 82 0.661608 + 63 81 83 0.00976158 + 63 82 45 0.0189458 + 63 82 46 0.661608 + 63 82 47 1 + 63 82 48 1 + 63 82 49 1 + 63 82 50 1 + 63 82 51 1 + 63 82 52 1 + 63 82 53 1 + 63 82 54 1 + 63 82 55 1 + 63 82 56 1 + 63 82 57 1 + 63 82 58 1 + 63 82 59 1 + 63 82 60 1 + 63 82 61 1 + 63 82 62 1 + 63 82 63 1 + 63 82 64 1 + 63 82 65 1 + 63 82 66 1 + 63 82 67 1 + 63 82 68 1 + 63 82 69 1 + 63 82 70 1 + 63 82 71 1 + 63 82 72 1 + 63 82 73 1 + 63 82 74 1 + 63 82 75 1 + 63 82 76 1 + 63 82 77 1 + 63 82 78 1 + 63 82 79 1 + 63 82 80 1 + 63 82 81 0.661608 + 63 82 82 0.0189458 + 63 83 46 0.00976158 + 63 83 47 0.561032 + 63 83 48 0.999595 + 63 83 49 1 + 63 83 50 1 + 63 83 51 1 + 63 83 52 1 + 63 83 53 1 + 63 83 54 1 + 63 83 55 1 + 63 83 56 1 + 63 83 57 1 + 63 83 58 1 + 63 83 59 1 + 63 83 60 1 + 63 83 61 1 + 63 83 62 1 + 63 83 63 1 + 63 83 64 1 + 63 83 65 1 + 63 83 66 1 + 63 83 67 1 + 63 83 68 1 + 63 83 69 1 + 63 83 70 1 + 63 83 71 1 + 63 83 72 1 + 63 83 73 1 + 63 83 74 1 + 63 83 75 1 + 63 83 76 1 + 63 83 77 1 + 63 83 78 1 + 63 83 79 0.999595 + 63 83 80 0.561032 + 63 83 81 0.00976158 + 63 84 48 0.363238 + 63 84 49 0.951583 + 63 84 50 1 + 63 84 51 1 + 63 84 52 1 + 63 84 53 1 + 63 84 54 1 + 63 84 55 1 + 63 84 56 1 + 63 84 57 1 + 63 84 58 1 + 63 84 59 1 + 63 84 60 1 + 63 84 61 1 + 63 84 62 1 + 63 84 63 1 + 63 84 64 1 + 63 84 65 1 + 63 84 66 1 + 63 84 67 1 + 63 84 68 1 + 63 84 69 1 + 63 84 70 1 + 63 84 71 1 + 63 84 72 1 + 63 84 73 1 + 63 84 74 1 + 63 84 75 1 + 63 84 76 1 + 63 84 77 1 + 63 84 78 0.951583 + 63 84 79 0.363238 + 63 85 49 0.135234 + 63 85 50 0.738943 + 63 85 51 1 + 63 85 52 1 + 63 85 53 1 + 63 85 54 1 + 63 85 55 1 + 63 85 56 1 + 63 85 57 1 + 63 85 58 1 + 63 85 59 1 + 63 85 60 1 + 63 85 61 1 + 63 85 62 1 + 63 85 63 1 + 63 85 64 1 + 63 85 65 1 + 63 85 66 1 + 63 85 67 1 + 63 85 68 1 + 63 85 69 1 + 63 85 70 1 + 63 85 71 1 + 63 85 72 1 + 63 85 73 1 + 63 85 74 1 + 63 85 75 1 + 63 85 76 1 + 63 85 77 0.738943 + 63 85 78 0.135234 + 63 86 50 0.00182891 + 63 86 51 0.330857 + 63 86 52 0.849603 + 63 86 53 1 + 63 86 54 1 + 63 86 55 1 + 63 86 56 1 + 63 86 57 1 + 63 86 58 1 + 63 86 59 1 + 63 86 60 1 + 63 86 61 1 + 63 86 62 1 + 63 86 63 1 + 63 86 64 1 + 63 86 65 1 + 63 86 66 1 + 63 86 67 1 + 63 86 68 1 + 63 86 69 1 + 63 86 70 1 + 63 86 71 1 + 63 86 72 1 + 63 86 73 1 + 63 86 74 1 + 63 86 75 0.849603 + 63 86 76 0.330857 + 63 86 77 0.00182891 + 63 87 52 0.012422 + 63 87 53 0.338304 + 63 87 54 0.762996 + 63 87 55 0.997684 + 63 87 56 1 + 63 87 57 1 + 63 87 58 1 + 63 87 59 1 + 63 87 60 1 + 63 87 61 1 + 63 87 62 1 + 63 87 63 1 + 63 87 64 1 + 63 87 65 1 + 63 87 66 1 + 63 87 67 1 + 63 87 68 1 + 63 87 69 1 + 63 87 70 1 + 63 87 71 1 + 63 87 72 0.997684 + 63 87 73 0.762996 + 63 87 74 0.338304 + 63 87 75 0.012422 + 63 88 55 0.141143 + 63 88 56 0.46805 + 63 88 57 0.752526 + 63 88 58 0.969258 + 63 88 59 1 + 63 88 60 1 + 63 88 61 1 + 63 88 62 1 + 63 88 63 1 + 63 88 64 1 + 63 88 65 1 + 63 88 66 1 + 63 88 67 1 + 63 88 68 1 + 63 88 69 0.969258 + 63 88 70 0.752526 + 63 88 71 0.46805 + 63 88 72 0.141143 + 63 89 58 0.0245266 + 63 89 59 0.193067 + 63 89 60 0.351365 + 63 89 61 0.469442 + 63 89 62 0.547857 + 63 89 63 0.586975 + 63 89 64 0.586975 + 63 89 65 0.547857 + 63 89 66 0.469442 + 63 89 67 0.351365 + 63 89 68 0.193067 + 63 89 69 0.0245266 + 64 38 58 0.0245266 + 64 38 59 0.193067 + 64 38 60 0.351365 + 64 38 61 0.469442 + 64 38 62 0.547857 + 64 38 63 0.586975 + 64 38 64 0.586975 + 64 38 65 0.547857 + 64 38 66 0.469442 + 64 38 67 0.351365 + 64 38 68 0.193067 + 64 38 69 0.0245266 + 64 39 55 0.141143 + 64 39 56 0.46805 + 64 39 57 0.752526 + 64 39 58 0.969258 + 64 39 59 1 + 64 39 60 1 + 64 39 61 1 + 64 39 62 1 + 64 39 63 1 + 64 39 64 1 + 64 39 65 1 + 64 39 66 1 + 64 39 67 1 + 64 39 68 1 + 64 39 69 0.969258 + 64 39 70 0.752526 + 64 39 71 0.46805 + 64 39 72 0.141143 + 64 40 52 0.012422 + 64 40 53 0.338304 + 64 40 54 0.762996 + 64 40 55 0.997684 + 64 40 56 1 + 64 40 57 1 + 64 40 58 1 + 64 40 59 1 + 64 40 60 1 + 64 40 61 1 + 64 40 62 1 + 64 40 63 1 + 64 40 64 1 + 64 40 65 1 + 64 40 66 1 + 64 40 67 1 + 64 40 68 1 + 64 40 69 1 + 64 40 70 1 + 64 40 71 1 + 64 40 72 0.997684 + 64 40 73 0.762996 + 64 40 74 0.338304 + 64 40 75 0.012422 + 64 41 50 0.00182891 + 64 41 51 0.330857 + 64 41 52 0.849603 + 64 41 53 1 + 64 41 54 1 + 64 41 55 1 + 64 41 56 1 + 64 41 57 1 + 64 41 58 1 + 64 41 59 1 + 64 41 60 1 + 64 41 61 1 + 64 41 62 1 + 64 41 63 1 + 64 41 64 1 + 64 41 65 1 + 64 41 66 1 + 64 41 67 1 + 64 41 68 1 + 64 41 69 1 + 64 41 70 1 + 64 41 71 1 + 64 41 72 1 + 64 41 73 1 + 64 41 74 1 + 64 41 75 0.849603 + 64 41 76 0.330857 + 64 41 77 0.00182891 + 64 42 49 0.135234 + 64 42 50 0.738943 + 64 42 51 1 + 64 42 52 1 + 64 42 53 1 + 64 42 54 1 + 64 42 55 1 + 64 42 56 1 + 64 42 57 1 + 64 42 58 1 + 64 42 59 1 + 64 42 60 1 + 64 42 61 1 + 64 42 62 1 + 64 42 63 1 + 64 42 64 1 + 64 42 65 1 + 64 42 66 1 + 64 42 67 1 + 64 42 68 1 + 64 42 69 1 + 64 42 70 1 + 64 42 71 1 + 64 42 72 1 + 64 42 73 1 + 64 42 74 1 + 64 42 75 1 + 64 42 76 1 + 64 42 77 0.738943 + 64 42 78 0.135234 + 64 43 48 0.363238 + 64 43 49 0.951583 + 64 43 50 1 + 64 43 51 1 + 64 43 52 1 + 64 43 53 1 + 64 43 54 1 + 64 43 55 1 + 64 43 56 1 + 64 43 57 1 + 64 43 58 1 + 64 43 59 1 + 64 43 60 1 + 64 43 61 1 + 64 43 62 1 + 64 43 63 1 + 64 43 64 1 + 64 43 65 1 + 64 43 66 1 + 64 43 67 1 + 64 43 68 1 + 64 43 69 1 + 64 43 70 1 + 64 43 71 1 + 64 43 72 1 + 64 43 73 1 + 64 43 74 1 + 64 43 75 1 + 64 43 76 1 + 64 43 77 1 + 64 43 78 0.951583 + 64 43 79 0.363238 + 64 44 46 0.00976158 + 64 44 47 0.561032 + 64 44 48 0.999595 + 64 44 49 1 + 64 44 50 1 + 64 44 51 1 + 64 44 52 1 + 64 44 53 1 + 64 44 54 1 + 64 44 55 1 + 64 44 56 1 + 64 44 57 1 + 64 44 58 1 + 64 44 59 1 + 64 44 60 1 + 64 44 61 1 + 64 44 62 1 + 64 44 63 1 + 64 44 64 1 + 64 44 65 1 + 64 44 66 1 + 64 44 67 1 + 64 44 68 1 + 64 44 69 1 + 64 44 70 1 + 64 44 71 1 + 64 44 72 1 + 64 44 73 1 + 64 44 74 1 + 64 44 75 1 + 64 44 76 1 + 64 44 77 1 + 64 44 78 1 + 64 44 79 0.999595 + 64 44 80 0.561032 + 64 44 81 0.00976158 + 64 45 45 0.0189458 + 64 45 46 0.661608 + 64 45 47 1 + 64 45 48 1 + 64 45 49 1 + 64 45 50 1 + 64 45 51 1 + 64 45 52 1 + 64 45 53 1 + 64 45 54 1 + 64 45 55 1 + 64 45 56 1 + 64 45 57 1 + 64 45 58 1 + 64 45 59 1 + 64 45 60 1 + 64 45 61 1 + 64 45 62 1 + 64 45 63 1 + 64 45 64 1 + 64 45 65 1 + 64 45 66 1 + 64 45 67 1 + 64 45 68 1 + 64 45 69 1 + 64 45 70 1 + 64 45 71 1 + 64 45 72 1 + 64 45 73 1 + 64 45 74 1 + 64 45 75 1 + 64 45 76 1 + 64 45 77 1 + 64 45 78 1 + 64 45 79 1 + 64 45 80 1 + 64 45 81 0.661608 + 64 45 82 0.0189458 + 64 46 44 0.00976158 + 64 46 45 0.661608 + 64 46 46 1 + 64 46 47 1 + 64 46 48 1 + 64 46 49 1 + 64 46 50 1 + 64 46 51 1 + 64 46 52 1 + 64 46 53 1 + 64 46 54 1 + 64 46 55 1 + 64 46 56 1 + 64 46 57 1 + 64 46 58 1 + 64 46 59 1 + 64 46 60 1 + 64 46 61 1 + 64 46 62 1 + 64 46 63 1 + 64 46 64 1 + 64 46 65 1 + 64 46 66 1 + 64 46 67 1 + 64 46 68 1 + 64 46 69 1 + 64 46 70 1 + 64 46 71 1 + 64 46 72 1 + 64 46 73 1 + 64 46 74 1 + 64 46 75 1 + 64 46 76 1 + 64 46 77 1 + 64 46 78 1 + 64 46 79 1 + 64 46 80 1 + 64 46 81 1 + 64 46 82 0.661608 + 64 46 83 0.00976158 + 64 47 44 0.561032 + 64 47 45 1 + 64 47 46 1 + 64 47 47 1 + 64 47 48 1 + 64 47 49 1 + 64 47 50 1 + 64 47 51 1 + 64 47 52 1 + 64 47 53 1 + 64 47 54 1 + 64 47 55 1 + 64 47 56 1 + 64 47 57 1 + 64 47 58 1 + 64 47 59 1 + 64 47 60 1 + 64 47 61 1 + 64 47 62 1 + 64 47 63 1 + 64 47 64 1 + 64 47 65 1 + 64 47 66 1 + 64 47 67 1 + 64 47 68 1 + 64 47 69 1 + 64 47 70 1 + 64 47 71 1 + 64 47 72 1 + 64 47 73 1 + 64 47 74 1 + 64 47 75 1 + 64 47 76 1 + 64 47 77 1 + 64 47 78 1 + 64 47 79 1 + 64 47 80 1 + 64 47 81 1 + 64 47 82 1 + 64 47 83 0.561032 + 64 48 43 0.363238 + 64 48 44 0.999595 + 64 48 45 1 + 64 48 46 1 + 64 48 47 1 + 64 48 48 1 + 64 48 49 1 + 64 48 50 1 + 64 48 51 1 + 64 48 52 1 + 64 48 53 1 + 64 48 54 1 + 64 48 55 1 + 64 48 56 1 + 64 48 57 1 + 64 48 58 1 + 64 48 59 1 + 64 48 60 1 + 64 48 61 1 + 64 48 62 1 + 64 48 63 1 + 64 48 64 1 + 64 48 65 1 + 64 48 66 1 + 64 48 67 1 + 64 48 68 1 + 64 48 69 1 + 64 48 70 1 + 64 48 71 1 + 64 48 72 1 + 64 48 73 1 + 64 48 74 1 + 64 48 75 1 + 64 48 76 1 + 64 48 77 1 + 64 48 78 1 + 64 48 79 1 + 64 48 80 1 + 64 48 81 1 + 64 48 82 1 + 64 48 83 0.999595 + 64 48 84 0.363238 + 64 49 42 0.135234 + 64 49 43 0.951583 + 64 49 44 1 + 64 49 45 1 + 64 49 46 1 + 64 49 47 1 + 64 49 48 1 + 64 49 49 1 + 64 49 50 1 + 64 49 51 1 + 64 49 52 1 + 64 49 53 1 + 64 49 54 1 + 64 49 55 1 + 64 49 56 1 + 64 49 57 1 + 64 49 58 1 + 64 49 59 1 + 64 49 60 1 + 64 49 61 1 + 64 49 62 1 + 64 49 63 1 + 64 49 64 1 + 64 49 65 1 + 64 49 66 1 + 64 49 67 1 + 64 49 68 1 + 64 49 69 1 + 64 49 70 1 + 64 49 71 1 + 64 49 72 1 + 64 49 73 1 + 64 49 74 1 + 64 49 75 1 + 64 49 76 1 + 64 49 77 1 + 64 49 78 1 + 64 49 79 1 + 64 49 80 1 + 64 49 81 1 + 64 49 82 1 + 64 49 83 1 + 64 49 84 0.951583 + 64 49 85 0.135234 + 64 50 41 0.00182891 + 64 50 42 0.738943 + 64 50 43 1 + 64 50 44 1 + 64 50 45 1 + 64 50 46 1 + 64 50 47 1 + 64 50 48 1 + 64 50 49 1 + 64 50 50 1 + 64 50 51 1 + 64 50 52 1 + 64 50 53 1 + 64 50 54 1 + 64 50 55 1 + 64 50 56 1 + 64 50 57 1 + 64 50 58 1 + 64 50 59 1 + 64 50 60 1 + 64 50 61 1 + 64 50 62 1 + 64 50 63 1 + 64 50 64 1 + 64 50 65 1 + 64 50 66 1 + 64 50 67 1 + 64 50 68 1 + 64 50 69 1 + 64 50 70 1 + 64 50 71 1 + 64 50 72 1 + 64 50 73 1 + 64 50 74 1 + 64 50 75 1 + 64 50 76 1 + 64 50 77 1 + 64 50 78 1 + 64 50 79 1 + 64 50 80 1 + 64 50 81 1 + 64 50 82 1 + 64 50 83 1 + 64 50 84 1 + 64 50 85 0.738943 + 64 50 86 0.00182891 + 64 51 41 0.330857 + 64 51 42 1 + 64 51 43 1 + 64 51 44 1 + 64 51 45 1 + 64 51 46 1 + 64 51 47 1 + 64 51 48 1 + 64 51 49 1 + 64 51 50 1 + 64 51 51 1 + 64 51 52 1 + 64 51 53 1 + 64 51 54 1 + 64 51 55 1 + 64 51 56 1 + 64 51 57 1 + 64 51 58 1 + 64 51 59 1 + 64 51 60 1 + 64 51 61 1 + 64 51 62 1 + 64 51 63 1 + 64 51 64 1 + 64 51 65 1 + 64 51 66 1 + 64 51 67 1 + 64 51 68 1 + 64 51 69 1 + 64 51 70 1 + 64 51 71 1 + 64 51 72 1 + 64 51 73 1 + 64 51 74 1 + 64 51 75 1 + 64 51 76 1 + 64 51 77 1 + 64 51 78 1 + 64 51 79 1 + 64 51 80 1 + 64 51 81 1 + 64 51 82 1 + 64 51 83 1 + 64 51 84 1 + 64 51 85 1 + 64 51 86 0.330857 + 64 52 40 0.012422 + 64 52 41 0.849603 + 64 52 42 1 + 64 52 43 1 + 64 52 44 1 + 64 52 45 1 + 64 52 46 1 + 64 52 47 1 + 64 52 48 1 + 64 52 49 1 + 64 52 50 1 + 64 52 51 1 + 64 52 52 1 + 64 52 53 1 + 64 52 54 1 + 64 52 55 1 + 64 52 56 1 + 64 52 57 1 + 64 52 58 1 + 64 52 59 1 + 64 52 60 1 + 64 52 61 1 + 64 52 62 1 + 64 52 63 1 + 64 52 64 1 + 64 52 65 1 + 64 52 66 1 + 64 52 67 1 + 64 52 68 1 + 64 52 69 1 + 64 52 70 1 + 64 52 71 1 + 64 52 72 1 + 64 52 73 1 + 64 52 74 1 + 64 52 75 1 + 64 52 76 1 + 64 52 77 1 + 64 52 78 1 + 64 52 79 1 + 64 52 80 1 + 64 52 81 1 + 64 52 82 1 + 64 52 83 1 + 64 52 84 1 + 64 52 85 1 + 64 52 86 0.849603 + 64 52 87 0.012422 + 64 53 40 0.338304 + 64 53 41 1 + 64 53 42 1 + 64 53 43 1 + 64 53 44 1 + 64 53 45 1 + 64 53 46 1 + 64 53 47 1 + 64 53 48 1 + 64 53 49 1 + 64 53 50 1 + 64 53 51 1 + 64 53 52 1 + 64 53 53 1 + 64 53 54 1 + 64 53 55 1 + 64 53 56 1 + 64 53 57 1 + 64 53 58 1 + 64 53 59 1 + 64 53 60 1 + 64 53 61 1 + 64 53 62 1 + 64 53 63 1 + 64 53 64 1 + 64 53 65 1 + 64 53 66 1 + 64 53 67 1 + 64 53 68 1 + 64 53 69 1 + 64 53 70 1 + 64 53 71 1 + 64 53 72 1 + 64 53 73 1 + 64 53 74 1 + 64 53 75 1 + 64 53 76 1 + 64 53 77 1 + 64 53 78 1 + 64 53 79 1 + 64 53 80 1 + 64 53 81 1 + 64 53 82 1 + 64 53 83 1 + 64 53 84 1 + 64 53 85 1 + 64 53 86 1 + 64 53 87 0.338304 + 64 54 40 0.762996 + 64 54 41 1 + 64 54 42 1 + 64 54 43 1 + 64 54 44 1 + 64 54 45 1 + 64 54 46 1 + 64 54 47 1 + 64 54 48 1 + 64 54 49 1 + 64 54 50 1 + 64 54 51 1 + 64 54 52 1 + 64 54 53 1 + 64 54 54 1 + 64 54 55 1 + 64 54 56 1 + 64 54 57 1 + 64 54 58 1 + 64 54 59 1 + 64 54 60 1 + 64 54 61 1 + 64 54 62 1 + 64 54 63 1 + 64 54 64 1 + 64 54 65 1 + 64 54 66 1 + 64 54 67 1 + 64 54 68 1 + 64 54 69 1 + 64 54 70 1 + 64 54 71 1 + 64 54 72 1 + 64 54 73 1 + 64 54 74 1 + 64 54 75 1 + 64 54 76 1 + 64 54 77 1 + 64 54 78 1 + 64 54 79 1 + 64 54 80 1 + 64 54 81 1 + 64 54 82 1 + 64 54 83 1 + 64 54 84 1 + 64 54 85 1 + 64 54 86 1 + 64 54 87 0.762996 + 64 55 39 0.141143 + 64 55 40 0.997684 + 64 55 41 1 + 64 55 42 1 + 64 55 43 1 + 64 55 44 1 + 64 55 45 1 + 64 55 46 1 + 64 55 47 1 + 64 55 48 1 + 64 55 49 1 + 64 55 50 1 + 64 55 51 1 + 64 55 52 1 + 64 55 53 1 + 64 55 54 1 + 64 55 55 1 + 64 55 56 1 + 64 55 57 1 + 64 55 58 1 + 64 55 59 1 + 64 55 60 1 + 64 55 61 1 + 64 55 62 1 + 64 55 63 1 + 64 55 64 1 + 64 55 65 1 + 64 55 66 1 + 64 55 67 1 + 64 55 68 1 + 64 55 69 1 + 64 55 70 1 + 64 55 71 1 + 64 55 72 1 + 64 55 73 1 + 64 55 74 1 + 64 55 75 1 + 64 55 76 1 + 64 55 77 1 + 64 55 78 1 + 64 55 79 1 + 64 55 80 1 + 64 55 81 1 + 64 55 82 1 + 64 55 83 1 + 64 55 84 1 + 64 55 85 1 + 64 55 86 1 + 64 55 87 0.997684 + 64 55 88 0.141143 + 64 56 39 0.46805 + 64 56 40 1 + 64 56 41 1 + 64 56 42 1 + 64 56 43 1 + 64 56 44 1 + 64 56 45 1 + 64 56 46 1 + 64 56 47 1 + 64 56 48 1 + 64 56 49 1 + 64 56 50 1 + 64 56 51 1 + 64 56 52 1 + 64 56 53 1 + 64 56 54 1 + 64 56 55 1 + 64 56 56 1 + 64 56 57 1 + 64 56 58 1 + 64 56 59 1 + 64 56 60 1 + 64 56 61 1 + 64 56 62 1 + 64 56 63 1 + 64 56 64 1 + 64 56 65 1 + 64 56 66 1 + 64 56 67 1 + 64 56 68 1 + 64 56 69 1 + 64 56 70 1 + 64 56 71 1 + 64 56 72 1 + 64 56 73 1 + 64 56 74 1 + 64 56 75 1 + 64 56 76 1 + 64 56 77 1 + 64 56 78 1 + 64 56 79 1 + 64 56 80 1 + 64 56 81 1 + 64 56 82 1 + 64 56 83 1 + 64 56 84 1 + 64 56 85 1 + 64 56 86 1 + 64 56 87 1 + 64 56 88 0.46805 + 64 57 39 0.752526 + 64 57 40 1 + 64 57 41 1 + 64 57 42 1 + 64 57 43 1 + 64 57 44 1 + 64 57 45 1 + 64 57 46 1 + 64 57 47 1 + 64 57 48 1 + 64 57 49 1 + 64 57 50 1 + 64 57 51 1 + 64 57 52 1 + 64 57 53 1 + 64 57 54 1 + 64 57 55 1 + 64 57 56 1 + 64 57 57 1 + 64 57 58 1 + 64 57 59 1 + 64 57 60 1 + 64 57 61 1 + 64 57 62 1 + 64 57 63 1 + 64 57 64 1 + 64 57 65 1 + 64 57 66 1 + 64 57 67 1 + 64 57 68 1 + 64 57 69 1 + 64 57 70 1 + 64 57 71 1 + 64 57 72 1 + 64 57 73 1 + 64 57 74 1 + 64 57 75 1 + 64 57 76 1 + 64 57 77 1 + 64 57 78 1 + 64 57 79 1 + 64 57 80 1 + 64 57 81 1 + 64 57 82 1 + 64 57 83 1 + 64 57 84 1 + 64 57 85 1 + 64 57 86 1 + 64 57 87 1 + 64 57 88 0.752526 + 64 58 38 0.0245266 + 64 58 39 0.969258 + 64 58 40 1 + 64 58 41 1 + 64 58 42 1 + 64 58 43 1 + 64 58 44 1 + 64 58 45 1 + 64 58 46 1 + 64 58 47 1 + 64 58 48 1 + 64 58 49 1 + 64 58 50 1 + 64 58 51 1 + 64 58 52 1 + 64 58 53 1 + 64 58 54 1 + 64 58 55 1 + 64 58 56 1 + 64 58 57 1 + 64 58 58 1 + 64 58 59 1 + 64 58 60 1 + 64 58 61 1 + 64 58 62 1 + 64 58 63 1 + 64 58 64 1 + 64 58 65 1 + 64 58 66 1 + 64 58 67 1 + 64 58 68 1 + 64 58 69 1 + 64 58 70 1 + 64 58 71 1 + 64 58 72 1 + 64 58 73 1 + 64 58 74 1 + 64 58 75 1 + 64 58 76 1 + 64 58 77 1 + 64 58 78 1 + 64 58 79 1 + 64 58 80 1 + 64 58 81 1 + 64 58 82 1 + 64 58 83 1 + 64 58 84 1 + 64 58 85 1 + 64 58 86 1 + 64 58 87 1 + 64 58 88 0.969258 + 64 58 89 0.0245266 + 64 59 38 0.193067 + 64 59 39 1 + 64 59 40 1 + 64 59 41 1 + 64 59 42 1 + 64 59 43 1 + 64 59 44 1 + 64 59 45 1 + 64 59 46 1 + 64 59 47 1 + 64 59 48 1 + 64 59 49 1 + 64 59 50 1 + 64 59 51 1 + 64 59 52 1 + 64 59 53 1 + 64 59 54 1 + 64 59 55 1 + 64 59 56 1 + 64 59 57 1 + 64 59 58 1 + 64 59 59 1 + 64 59 60 1 + 64 59 61 1 + 64 59 62 1 + 64 59 63 1 + 64 59 64 1 + 64 59 65 1 + 64 59 66 1 + 64 59 67 1 + 64 59 68 1 + 64 59 69 1 + 64 59 70 1 + 64 59 71 1 + 64 59 72 1 + 64 59 73 1 + 64 59 74 1 + 64 59 75 1 + 64 59 76 1 + 64 59 77 1 + 64 59 78 1 + 64 59 79 1 + 64 59 80 1 + 64 59 81 1 + 64 59 82 1 + 64 59 83 1 + 64 59 84 1 + 64 59 85 1 + 64 59 86 1 + 64 59 87 1 + 64 59 88 1 + 64 59 89 0.193067 + 64 60 38 0.351365 + 64 60 39 1 + 64 60 40 1 + 64 60 41 1 + 64 60 42 1 + 64 60 43 1 + 64 60 44 1 + 64 60 45 1 + 64 60 46 1 + 64 60 47 1 + 64 60 48 1 + 64 60 49 1 + 64 60 50 1 + 64 60 51 1 + 64 60 52 1 + 64 60 53 1 + 64 60 54 1 + 64 60 55 1 + 64 60 56 1 + 64 60 57 1 + 64 60 58 1 + 64 60 59 1 + 64 60 60 1 + 64 60 61 1 + 64 60 62 1 + 64 60 63 1 + 64 60 64 1 + 64 60 65 1 + 64 60 66 1 + 64 60 67 1 + 64 60 68 1 + 64 60 69 1 + 64 60 70 1 + 64 60 71 1 + 64 60 72 1 + 64 60 73 1 + 64 60 74 1 + 64 60 75 1 + 64 60 76 1 + 64 60 77 1 + 64 60 78 1 + 64 60 79 1 + 64 60 80 1 + 64 60 81 1 + 64 60 82 1 + 64 60 83 1 + 64 60 84 1 + 64 60 85 1 + 64 60 86 1 + 64 60 87 1 + 64 60 88 1 + 64 60 89 0.351365 + 64 61 38 0.469442 + 64 61 39 1 + 64 61 40 1 + 64 61 41 1 + 64 61 42 1 + 64 61 43 1 + 64 61 44 1 + 64 61 45 1 + 64 61 46 1 + 64 61 47 1 + 64 61 48 1 + 64 61 49 1 + 64 61 50 1 + 64 61 51 1 + 64 61 52 1 + 64 61 53 1 + 64 61 54 1 + 64 61 55 1 + 64 61 56 1 + 64 61 57 1 + 64 61 58 1 + 64 61 59 1 + 64 61 60 1 + 64 61 61 1 + 64 61 62 1 + 64 61 63 1 + 64 61 64 1 + 64 61 65 1 + 64 61 66 1 + 64 61 67 1 + 64 61 68 1 + 64 61 69 1 + 64 61 70 1 + 64 61 71 1 + 64 61 72 1 + 64 61 73 1 + 64 61 74 1 + 64 61 75 1 + 64 61 76 1 + 64 61 77 1 + 64 61 78 1 + 64 61 79 1 + 64 61 80 1 + 64 61 81 1 + 64 61 82 1 + 64 61 83 1 + 64 61 84 1 + 64 61 85 1 + 64 61 86 1 + 64 61 87 1 + 64 61 88 1 + 64 61 89 0.469442 + 64 62 38 0.547857 + 64 62 39 1 + 64 62 40 1 + 64 62 41 1 + 64 62 42 1 + 64 62 43 1 + 64 62 44 1 + 64 62 45 1 + 64 62 46 1 + 64 62 47 1 + 64 62 48 1 + 64 62 49 1 + 64 62 50 1 + 64 62 51 1 + 64 62 52 1 + 64 62 53 1 + 64 62 54 1 + 64 62 55 1 + 64 62 56 1 + 64 62 57 1 + 64 62 58 1 + 64 62 59 1 + 64 62 60 1 + 64 62 61 1 + 64 62 62 1 + 64 62 63 1 + 64 62 64 1 + 64 62 65 1 + 64 62 66 1 + 64 62 67 1 + 64 62 68 1 + 64 62 69 1 + 64 62 70 1 + 64 62 71 1 + 64 62 72 1 + 64 62 73 1 + 64 62 74 1 + 64 62 75 1 + 64 62 76 1 + 64 62 77 1 + 64 62 78 1 + 64 62 79 1 + 64 62 80 1 + 64 62 81 1 + 64 62 82 1 + 64 62 83 1 + 64 62 84 1 + 64 62 85 1 + 64 62 86 1 + 64 62 87 1 + 64 62 88 1 + 64 62 89 0.547857 + 64 63 38 0.586975 + 64 63 39 1 + 64 63 40 1 + 64 63 41 1 + 64 63 42 1 + 64 63 43 1 + 64 63 44 1 + 64 63 45 1 + 64 63 46 1 + 64 63 47 1 + 64 63 48 1 + 64 63 49 1 + 64 63 50 1 + 64 63 51 1 + 64 63 52 1 + 64 63 53 1 + 64 63 54 1 + 64 63 55 1 + 64 63 56 1 + 64 63 57 1 + 64 63 58 1 + 64 63 59 1 + 64 63 60 1 + 64 63 61 1 + 64 63 62 1 + 64 63 63 1 + 64 63 64 1 + 64 63 65 1 + 64 63 66 1 + 64 63 67 1 + 64 63 68 1 + 64 63 69 1 + 64 63 70 1 + 64 63 71 1 + 64 63 72 1 + 64 63 73 1 + 64 63 74 1 + 64 63 75 1 + 64 63 76 1 + 64 63 77 1 + 64 63 78 1 + 64 63 79 1 + 64 63 80 1 + 64 63 81 1 + 64 63 82 1 + 64 63 83 1 + 64 63 84 1 + 64 63 85 1 + 64 63 86 1 + 64 63 87 1 + 64 63 88 1 + 64 63 89 0.586975 + 64 64 38 0.586975 + 64 64 39 1 + 64 64 40 1 + 64 64 41 1 + 64 64 42 1 + 64 64 43 1 + 64 64 44 1 + 64 64 45 1 + 64 64 46 1 + 64 64 47 1 + 64 64 48 1 + 64 64 49 1 + 64 64 50 1 + 64 64 51 1 + 64 64 52 1 + 64 64 53 1 + 64 64 54 1 + 64 64 55 1 + 64 64 56 1 + 64 64 57 1 + 64 64 58 1 + 64 64 59 1 + 64 64 60 1 + 64 64 61 1 + 64 64 62 1 + 64 64 63 1 + 64 64 64 1 + 64 64 65 1 + 64 64 66 1 + 64 64 67 1 + 64 64 68 1 + 64 64 69 1 + 64 64 70 1 + 64 64 71 1 + 64 64 72 1 + 64 64 73 1 + 64 64 74 1 + 64 64 75 1 + 64 64 76 1 + 64 64 77 1 + 64 64 78 1 + 64 64 79 1 + 64 64 80 1 + 64 64 81 1 + 64 64 82 1 + 64 64 83 1 + 64 64 84 1 + 64 64 85 1 + 64 64 86 1 + 64 64 87 1 + 64 64 88 1 + 64 64 89 0.586975 + 64 65 38 0.547857 + 64 65 39 1 + 64 65 40 1 + 64 65 41 1 + 64 65 42 1 + 64 65 43 1 + 64 65 44 1 + 64 65 45 1 + 64 65 46 1 + 64 65 47 1 + 64 65 48 1 + 64 65 49 1 + 64 65 50 1 + 64 65 51 1 + 64 65 52 1 + 64 65 53 1 + 64 65 54 1 + 64 65 55 1 + 64 65 56 1 + 64 65 57 1 + 64 65 58 1 + 64 65 59 1 + 64 65 60 1 + 64 65 61 1 + 64 65 62 1 + 64 65 63 1 + 64 65 64 1 + 64 65 65 1 + 64 65 66 1 + 64 65 67 1 + 64 65 68 1 + 64 65 69 1 + 64 65 70 1 + 64 65 71 1 + 64 65 72 1 + 64 65 73 1 + 64 65 74 1 + 64 65 75 1 + 64 65 76 1 + 64 65 77 1 + 64 65 78 1 + 64 65 79 1 + 64 65 80 1 + 64 65 81 1 + 64 65 82 1 + 64 65 83 1 + 64 65 84 1 + 64 65 85 1 + 64 65 86 1 + 64 65 87 1 + 64 65 88 1 + 64 65 89 0.547857 + 64 66 38 0.469442 + 64 66 39 1 + 64 66 40 1 + 64 66 41 1 + 64 66 42 1 + 64 66 43 1 + 64 66 44 1 + 64 66 45 1 + 64 66 46 1 + 64 66 47 1 + 64 66 48 1 + 64 66 49 1 + 64 66 50 1 + 64 66 51 1 + 64 66 52 1 + 64 66 53 1 + 64 66 54 1 + 64 66 55 1 + 64 66 56 1 + 64 66 57 1 + 64 66 58 1 + 64 66 59 1 + 64 66 60 1 + 64 66 61 1 + 64 66 62 1 + 64 66 63 1 + 64 66 64 1 + 64 66 65 1 + 64 66 66 1 + 64 66 67 1 + 64 66 68 1 + 64 66 69 1 + 64 66 70 1 + 64 66 71 1 + 64 66 72 1 + 64 66 73 1 + 64 66 74 1 + 64 66 75 1 + 64 66 76 1 + 64 66 77 1 + 64 66 78 1 + 64 66 79 1 + 64 66 80 1 + 64 66 81 1 + 64 66 82 1 + 64 66 83 1 + 64 66 84 1 + 64 66 85 1 + 64 66 86 1 + 64 66 87 1 + 64 66 88 1 + 64 66 89 0.469442 + 64 67 38 0.351365 + 64 67 39 1 + 64 67 40 1 + 64 67 41 1 + 64 67 42 1 + 64 67 43 1 + 64 67 44 1 + 64 67 45 1 + 64 67 46 1 + 64 67 47 1 + 64 67 48 1 + 64 67 49 1 + 64 67 50 1 + 64 67 51 1 + 64 67 52 1 + 64 67 53 1 + 64 67 54 1 + 64 67 55 1 + 64 67 56 1 + 64 67 57 1 + 64 67 58 1 + 64 67 59 1 + 64 67 60 1 + 64 67 61 1 + 64 67 62 1 + 64 67 63 1 + 64 67 64 1 + 64 67 65 1 + 64 67 66 1 + 64 67 67 1 + 64 67 68 1 + 64 67 69 1 + 64 67 70 1 + 64 67 71 1 + 64 67 72 1 + 64 67 73 1 + 64 67 74 1 + 64 67 75 1 + 64 67 76 1 + 64 67 77 1 + 64 67 78 1 + 64 67 79 1 + 64 67 80 1 + 64 67 81 1 + 64 67 82 1 + 64 67 83 1 + 64 67 84 1 + 64 67 85 1 + 64 67 86 1 + 64 67 87 1 + 64 67 88 1 + 64 67 89 0.351365 + 64 68 38 0.193067 + 64 68 39 1 + 64 68 40 1 + 64 68 41 1 + 64 68 42 1 + 64 68 43 1 + 64 68 44 1 + 64 68 45 1 + 64 68 46 1 + 64 68 47 1 + 64 68 48 1 + 64 68 49 1 + 64 68 50 1 + 64 68 51 1 + 64 68 52 1 + 64 68 53 1 + 64 68 54 1 + 64 68 55 1 + 64 68 56 1 + 64 68 57 1 + 64 68 58 1 + 64 68 59 1 + 64 68 60 1 + 64 68 61 1 + 64 68 62 1 + 64 68 63 1 + 64 68 64 1 + 64 68 65 1 + 64 68 66 1 + 64 68 67 1 + 64 68 68 1 + 64 68 69 1 + 64 68 70 1 + 64 68 71 1 + 64 68 72 1 + 64 68 73 1 + 64 68 74 1 + 64 68 75 1 + 64 68 76 1 + 64 68 77 1 + 64 68 78 1 + 64 68 79 1 + 64 68 80 1 + 64 68 81 1 + 64 68 82 1 + 64 68 83 1 + 64 68 84 1 + 64 68 85 1 + 64 68 86 1 + 64 68 87 1 + 64 68 88 1 + 64 68 89 0.193067 + 64 69 38 0.0245266 + 64 69 39 0.969258 + 64 69 40 1 + 64 69 41 1 + 64 69 42 1 + 64 69 43 1 + 64 69 44 1 + 64 69 45 1 + 64 69 46 1 + 64 69 47 1 + 64 69 48 1 + 64 69 49 1 + 64 69 50 1 + 64 69 51 1 + 64 69 52 1 + 64 69 53 1 + 64 69 54 1 + 64 69 55 1 + 64 69 56 1 + 64 69 57 1 + 64 69 58 1 + 64 69 59 1 + 64 69 60 1 + 64 69 61 1 + 64 69 62 1 + 64 69 63 1 + 64 69 64 1 + 64 69 65 1 + 64 69 66 1 + 64 69 67 1 + 64 69 68 1 + 64 69 69 1 + 64 69 70 1 + 64 69 71 1 + 64 69 72 1 + 64 69 73 1 + 64 69 74 1 + 64 69 75 1 + 64 69 76 1 + 64 69 77 1 + 64 69 78 1 + 64 69 79 1 + 64 69 80 1 + 64 69 81 1 + 64 69 82 1 + 64 69 83 1 + 64 69 84 1 + 64 69 85 1 + 64 69 86 1 + 64 69 87 1 + 64 69 88 0.969258 + 64 69 89 0.0245266 + 64 70 39 0.752526 + 64 70 40 1 + 64 70 41 1 + 64 70 42 1 + 64 70 43 1 + 64 70 44 1 + 64 70 45 1 + 64 70 46 1 + 64 70 47 1 + 64 70 48 1 + 64 70 49 1 + 64 70 50 1 + 64 70 51 1 + 64 70 52 1 + 64 70 53 1 + 64 70 54 1 + 64 70 55 1 + 64 70 56 1 + 64 70 57 1 + 64 70 58 1 + 64 70 59 1 + 64 70 60 1 + 64 70 61 1 + 64 70 62 1 + 64 70 63 1 + 64 70 64 1 + 64 70 65 1 + 64 70 66 1 + 64 70 67 1 + 64 70 68 1 + 64 70 69 1 + 64 70 70 1 + 64 70 71 1 + 64 70 72 1 + 64 70 73 1 + 64 70 74 1 + 64 70 75 1 + 64 70 76 1 + 64 70 77 1 + 64 70 78 1 + 64 70 79 1 + 64 70 80 1 + 64 70 81 1 + 64 70 82 1 + 64 70 83 1 + 64 70 84 1 + 64 70 85 1 + 64 70 86 1 + 64 70 87 1 + 64 70 88 0.752526 + 64 71 39 0.46805 + 64 71 40 1 + 64 71 41 1 + 64 71 42 1 + 64 71 43 1 + 64 71 44 1 + 64 71 45 1 + 64 71 46 1 + 64 71 47 1 + 64 71 48 1 + 64 71 49 1 + 64 71 50 1 + 64 71 51 1 + 64 71 52 1 + 64 71 53 1 + 64 71 54 1 + 64 71 55 1 + 64 71 56 1 + 64 71 57 1 + 64 71 58 1 + 64 71 59 1 + 64 71 60 1 + 64 71 61 1 + 64 71 62 1 + 64 71 63 1 + 64 71 64 1 + 64 71 65 1 + 64 71 66 1 + 64 71 67 1 + 64 71 68 1 + 64 71 69 1 + 64 71 70 1 + 64 71 71 1 + 64 71 72 1 + 64 71 73 1 + 64 71 74 1 + 64 71 75 1 + 64 71 76 1 + 64 71 77 1 + 64 71 78 1 + 64 71 79 1 + 64 71 80 1 + 64 71 81 1 + 64 71 82 1 + 64 71 83 1 + 64 71 84 1 + 64 71 85 1 + 64 71 86 1 + 64 71 87 1 + 64 71 88 0.46805 + 64 72 39 0.141143 + 64 72 40 0.997684 + 64 72 41 1 + 64 72 42 1 + 64 72 43 1 + 64 72 44 1 + 64 72 45 1 + 64 72 46 1 + 64 72 47 1 + 64 72 48 1 + 64 72 49 1 + 64 72 50 1 + 64 72 51 1 + 64 72 52 1 + 64 72 53 1 + 64 72 54 1 + 64 72 55 1 + 64 72 56 1 + 64 72 57 1 + 64 72 58 1 + 64 72 59 1 + 64 72 60 1 + 64 72 61 1 + 64 72 62 1 + 64 72 63 1 + 64 72 64 1 + 64 72 65 1 + 64 72 66 1 + 64 72 67 1 + 64 72 68 1 + 64 72 69 1 + 64 72 70 1 + 64 72 71 1 + 64 72 72 1 + 64 72 73 1 + 64 72 74 1 + 64 72 75 1 + 64 72 76 1 + 64 72 77 1 + 64 72 78 1 + 64 72 79 1 + 64 72 80 1 + 64 72 81 1 + 64 72 82 1 + 64 72 83 1 + 64 72 84 1 + 64 72 85 1 + 64 72 86 1 + 64 72 87 0.997684 + 64 72 88 0.141143 + 64 73 40 0.762996 + 64 73 41 1 + 64 73 42 1 + 64 73 43 1 + 64 73 44 1 + 64 73 45 1 + 64 73 46 1 + 64 73 47 1 + 64 73 48 1 + 64 73 49 1 + 64 73 50 1 + 64 73 51 1 + 64 73 52 1 + 64 73 53 1 + 64 73 54 1 + 64 73 55 1 + 64 73 56 1 + 64 73 57 1 + 64 73 58 1 + 64 73 59 1 + 64 73 60 1 + 64 73 61 1 + 64 73 62 1 + 64 73 63 1 + 64 73 64 1 + 64 73 65 1 + 64 73 66 1 + 64 73 67 1 + 64 73 68 1 + 64 73 69 1 + 64 73 70 1 + 64 73 71 1 + 64 73 72 1 + 64 73 73 1 + 64 73 74 1 + 64 73 75 1 + 64 73 76 1 + 64 73 77 1 + 64 73 78 1 + 64 73 79 1 + 64 73 80 1 + 64 73 81 1 + 64 73 82 1 + 64 73 83 1 + 64 73 84 1 + 64 73 85 1 + 64 73 86 1 + 64 73 87 0.762996 + 64 74 40 0.338304 + 64 74 41 1 + 64 74 42 1 + 64 74 43 1 + 64 74 44 1 + 64 74 45 1 + 64 74 46 1 + 64 74 47 1 + 64 74 48 1 + 64 74 49 1 + 64 74 50 1 + 64 74 51 1 + 64 74 52 1 + 64 74 53 1 + 64 74 54 1 + 64 74 55 1 + 64 74 56 1 + 64 74 57 1 + 64 74 58 1 + 64 74 59 1 + 64 74 60 1 + 64 74 61 1 + 64 74 62 1 + 64 74 63 1 + 64 74 64 1 + 64 74 65 1 + 64 74 66 1 + 64 74 67 1 + 64 74 68 1 + 64 74 69 1 + 64 74 70 1 + 64 74 71 1 + 64 74 72 1 + 64 74 73 1 + 64 74 74 1 + 64 74 75 1 + 64 74 76 1 + 64 74 77 1 + 64 74 78 1 + 64 74 79 1 + 64 74 80 1 + 64 74 81 1 + 64 74 82 1 + 64 74 83 1 + 64 74 84 1 + 64 74 85 1 + 64 74 86 1 + 64 74 87 0.338304 + 64 75 40 0.012422 + 64 75 41 0.849603 + 64 75 42 1 + 64 75 43 1 + 64 75 44 1 + 64 75 45 1 + 64 75 46 1 + 64 75 47 1 + 64 75 48 1 + 64 75 49 1 + 64 75 50 1 + 64 75 51 1 + 64 75 52 1 + 64 75 53 1 + 64 75 54 1 + 64 75 55 1 + 64 75 56 1 + 64 75 57 1 + 64 75 58 1 + 64 75 59 1 + 64 75 60 1 + 64 75 61 1 + 64 75 62 1 + 64 75 63 1 + 64 75 64 1 + 64 75 65 1 + 64 75 66 1 + 64 75 67 1 + 64 75 68 1 + 64 75 69 1 + 64 75 70 1 + 64 75 71 1 + 64 75 72 1 + 64 75 73 1 + 64 75 74 1 + 64 75 75 1 + 64 75 76 1 + 64 75 77 1 + 64 75 78 1 + 64 75 79 1 + 64 75 80 1 + 64 75 81 1 + 64 75 82 1 + 64 75 83 1 + 64 75 84 1 + 64 75 85 1 + 64 75 86 0.849603 + 64 75 87 0.012422 + 64 76 41 0.330857 + 64 76 42 1 + 64 76 43 1 + 64 76 44 1 + 64 76 45 1 + 64 76 46 1 + 64 76 47 1 + 64 76 48 1 + 64 76 49 1 + 64 76 50 1 + 64 76 51 1 + 64 76 52 1 + 64 76 53 1 + 64 76 54 1 + 64 76 55 1 + 64 76 56 1 + 64 76 57 1 + 64 76 58 1 + 64 76 59 1 + 64 76 60 1 + 64 76 61 1 + 64 76 62 1 + 64 76 63 1 + 64 76 64 1 + 64 76 65 1 + 64 76 66 1 + 64 76 67 1 + 64 76 68 1 + 64 76 69 1 + 64 76 70 1 + 64 76 71 1 + 64 76 72 1 + 64 76 73 1 + 64 76 74 1 + 64 76 75 1 + 64 76 76 1 + 64 76 77 1 + 64 76 78 1 + 64 76 79 1 + 64 76 80 1 + 64 76 81 1 + 64 76 82 1 + 64 76 83 1 + 64 76 84 1 + 64 76 85 1 + 64 76 86 0.330857 + 64 77 41 0.00182891 + 64 77 42 0.738943 + 64 77 43 1 + 64 77 44 1 + 64 77 45 1 + 64 77 46 1 + 64 77 47 1 + 64 77 48 1 + 64 77 49 1 + 64 77 50 1 + 64 77 51 1 + 64 77 52 1 + 64 77 53 1 + 64 77 54 1 + 64 77 55 1 + 64 77 56 1 + 64 77 57 1 + 64 77 58 1 + 64 77 59 1 + 64 77 60 1 + 64 77 61 1 + 64 77 62 1 + 64 77 63 1 + 64 77 64 1 + 64 77 65 1 + 64 77 66 1 + 64 77 67 1 + 64 77 68 1 + 64 77 69 1 + 64 77 70 1 + 64 77 71 1 + 64 77 72 1 + 64 77 73 1 + 64 77 74 1 + 64 77 75 1 + 64 77 76 1 + 64 77 77 1 + 64 77 78 1 + 64 77 79 1 + 64 77 80 1 + 64 77 81 1 + 64 77 82 1 + 64 77 83 1 + 64 77 84 1 + 64 77 85 0.738943 + 64 77 86 0.00182891 + 64 78 42 0.135234 + 64 78 43 0.951583 + 64 78 44 1 + 64 78 45 1 + 64 78 46 1 + 64 78 47 1 + 64 78 48 1 + 64 78 49 1 + 64 78 50 1 + 64 78 51 1 + 64 78 52 1 + 64 78 53 1 + 64 78 54 1 + 64 78 55 1 + 64 78 56 1 + 64 78 57 1 + 64 78 58 1 + 64 78 59 1 + 64 78 60 1 + 64 78 61 1 + 64 78 62 1 + 64 78 63 1 + 64 78 64 1 + 64 78 65 1 + 64 78 66 1 + 64 78 67 1 + 64 78 68 1 + 64 78 69 1 + 64 78 70 1 + 64 78 71 1 + 64 78 72 1 + 64 78 73 1 + 64 78 74 1 + 64 78 75 1 + 64 78 76 1 + 64 78 77 1 + 64 78 78 1 + 64 78 79 1 + 64 78 80 1 + 64 78 81 1 + 64 78 82 1 + 64 78 83 1 + 64 78 84 0.951583 + 64 78 85 0.135234 + 64 79 43 0.363238 + 64 79 44 0.999595 + 64 79 45 1 + 64 79 46 1 + 64 79 47 1 + 64 79 48 1 + 64 79 49 1 + 64 79 50 1 + 64 79 51 1 + 64 79 52 1 + 64 79 53 1 + 64 79 54 1 + 64 79 55 1 + 64 79 56 1 + 64 79 57 1 + 64 79 58 1 + 64 79 59 1 + 64 79 60 1 + 64 79 61 1 + 64 79 62 1 + 64 79 63 1 + 64 79 64 1 + 64 79 65 1 + 64 79 66 1 + 64 79 67 1 + 64 79 68 1 + 64 79 69 1 + 64 79 70 1 + 64 79 71 1 + 64 79 72 1 + 64 79 73 1 + 64 79 74 1 + 64 79 75 1 + 64 79 76 1 + 64 79 77 1 + 64 79 78 1 + 64 79 79 1 + 64 79 80 1 + 64 79 81 1 + 64 79 82 1 + 64 79 83 0.999595 + 64 79 84 0.363238 + 64 80 44 0.561032 + 64 80 45 1 + 64 80 46 1 + 64 80 47 1 + 64 80 48 1 + 64 80 49 1 + 64 80 50 1 + 64 80 51 1 + 64 80 52 1 + 64 80 53 1 + 64 80 54 1 + 64 80 55 1 + 64 80 56 1 + 64 80 57 1 + 64 80 58 1 + 64 80 59 1 + 64 80 60 1 + 64 80 61 1 + 64 80 62 1 + 64 80 63 1 + 64 80 64 1 + 64 80 65 1 + 64 80 66 1 + 64 80 67 1 + 64 80 68 1 + 64 80 69 1 + 64 80 70 1 + 64 80 71 1 + 64 80 72 1 + 64 80 73 1 + 64 80 74 1 + 64 80 75 1 + 64 80 76 1 + 64 80 77 1 + 64 80 78 1 + 64 80 79 1 + 64 80 80 1 + 64 80 81 1 + 64 80 82 1 + 64 80 83 0.561032 + 64 81 44 0.00976158 + 64 81 45 0.661608 + 64 81 46 1 + 64 81 47 1 + 64 81 48 1 + 64 81 49 1 + 64 81 50 1 + 64 81 51 1 + 64 81 52 1 + 64 81 53 1 + 64 81 54 1 + 64 81 55 1 + 64 81 56 1 + 64 81 57 1 + 64 81 58 1 + 64 81 59 1 + 64 81 60 1 + 64 81 61 1 + 64 81 62 1 + 64 81 63 1 + 64 81 64 1 + 64 81 65 1 + 64 81 66 1 + 64 81 67 1 + 64 81 68 1 + 64 81 69 1 + 64 81 70 1 + 64 81 71 1 + 64 81 72 1 + 64 81 73 1 + 64 81 74 1 + 64 81 75 1 + 64 81 76 1 + 64 81 77 1 + 64 81 78 1 + 64 81 79 1 + 64 81 80 1 + 64 81 81 1 + 64 81 82 0.661608 + 64 81 83 0.00976158 + 64 82 45 0.0189458 + 64 82 46 0.661608 + 64 82 47 1 + 64 82 48 1 + 64 82 49 1 + 64 82 50 1 + 64 82 51 1 + 64 82 52 1 + 64 82 53 1 + 64 82 54 1 + 64 82 55 1 + 64 82 56 1 + 64 82 57 1 + 64 82 58 1 + 64 82 59 1 + 64 82 60 1 + 64 82 61 1 + 64 82 62 1 + 64 82 63 1 + 64 82 64 1 + 64 82 65 1 + 64 82 66 1 + 64 82 67 1 + 64 82 68 1 + 64 82 69 1 + 64 82 70 1 + 64 82 71 1 + 64 82 72 1 + 64 82 73 1 + 64 82 74 1 + 64 82 75 1 + 64 82 76 1 + 64 82 77 1 + 64 82 78 1 + 64 82 79 1 + 64 82 80 1 + 64 82 81 0.661608 + 64 82 82 0.0189458 + 64 83 46 0.00976158 + 64 83 47 0.561032 + 64 83 48 0.999595 + 64 83 49 1 + 64 83 50 1 + 64 83 51 1 + 64 83 52 1 + 64 83 53 1 + 64 83 54 1 + 64 83 55 1 + 64 83 56 1 + 64 83 57 1 + 64 83 58 1 + 64 83 59 1 + 64 83 60 1 + 64 83 61 1 + 64 83 62 1 + 64 83 63 1 + 64 83 64 1 + 64 83 65 1 + 64 83 66 1 + 64 83 67 1 + 64 83 68 1 + 64 83 69 1 + 64 83 70 1 + 64 83 71 1 + 64 83 72 1 + 64 83 73 1 + 64 83 74 1 + 64 83 75 1 + 64 83 76 1 + 64 83 77 1 + 64 83 78 1 + 64 83 79 0.999595 + 64 83 80 0.561032 + 64 83 81 0.00976158 + 64 84 48 0.363238 + 64 84 49 0.951583 + 64 84 50 1 + 64 84 51 1 + 64 84 52 1 + 64 84 53 1 + 64 84 54 1 + 64 84 55 1 + 64 84 56 1 + 64 84 57 1 + 64 84 58 1 + 64 84 59 1 + 64 84 60 1 + 64 84 61 1 + 64 84 62 1 + 64 84 63 1 + 64 84 64 1 + 64 84 65 1 + 64 84 66 1 + 64 84 67 1 + 64 84 68 1 + 64 84 69 1 + 64 84 70 1 + 64 84 71 1 + 64 84 72 1 + 64 84 73 1 + 64 84 74 1 + 64 84 75 1 + 64 84 76 1 + 64 84 77 1 + 64 84 78 0.951583 + 64 84 79 0.363238 + 64 85 49 0.135234 + 64 85 50 0.738943 + 64 85 51 1 + 64 85 52 1 + 64 85 53 1 + 64 85 54 1 + 64 85 55 1 + 64 85 56 1 + 64 85 57 1 + 64 85 58 1 + 64 85 59 1 + 64 85 60 1 + 64 85 61 1 + 64 85 62 1 + 64 85 63 1 + 64 85 64 1 + 64 85 65 1 + 64 85 66 1 + 64 85 67 1 + 64 85 68 1 + 64 85 69 1 + 64 85 70 1 + 64 85 71 1 + 64 85 72 1 + 64 85 73 1 + 64 85 74 1 + 64 85 75 1 + 64 85 76 1 + 64 85 77 0.738943 + 64 85 78 0.135234 + 64 86 50 0.00182891 + 64 86 51 0.330857 + 64 86 52 0.849603 + 64 86 53 1 + 64 86 54 1 + 64 86 55 1 + 64 86 56 1 + 64 86 57 1 + 64 86 58 1 + 64 86 59 1 + 64 86 60 1 + 64 86 61 1 + 64 86 62 1 + 64 86 63 1 + 64 86 64 1 + 64 86 65 1 + 64 86 66 1 + 64 86 67 1 + 64 86 68 1 + 64 86 69 1 + 64 86 70 1 + 64 86 71 1 + 64 86 72 1 + 64 86 73 1 + 64 86 74 1 + 64 86 75 0.849603 + 64 86 76 0.330857 + 64 86 77 0.00182891 + 64 87 52 0.012422 + 64 87 53 0.338304 + 64 87 54 0.762996 + 64 87 55 0.997684 + 64 87 56 1 + 64 87 57 1 + 64 87 58 1 + 64 87 59 1 + 64 87 60 1 + 64 87 61 1 + 64 87 62 1 + 64 87 63 1 + 64 87 64 1 + 64 87 65 1 + 64 87 66 1 + 64 87 67 1 + 64 87 68 1 + 64 87 69 1 + 64 87 70 1 + 64 87 71 1 + 64 87 72 0.997684 + 64 87 73 0.762996 + 64 87 74 0.338304 + 64 87 75 0.012422 + 64 88 55 0.141143 + 64 88 56 0.46805 + 64 88 57 0.752526 + 64 88 58 0.969258 + 64 88 59 1 + 64 88 60 1 + 64 88 61 1 + 64 88 62 1 + 64 88 63 1 + 64 88 64 1 + 64 88 65 1 + 64 88 66 1 + 64 88 67 1 + 64 88 68 1 + 64 88 69 0.969258 + 64 88 70 0.752526 + 64 88 71 0.46805 + 64 88 72 0.141143 + 64 89 58 0.0245266 + 64 89 59 0.193067 + 64 89 60 0.351365 + 64 89 61 0.469442 + 64 89 62 0.547857 + 64 89 63 0.586975 + 64 89 64 0.586975 + 64 89 65 0.547857 + 64 89 66 0.469442 + 64 89 67 0.351365 + 64 89 68 0.193067 + 64 89 69 0.0245266 + 65 38 58 0.0096893 + 65 38 59 0.153337 + 65 38 60 0.311883 + 65 38 61 0.430144 + 65 38 62 0.50868 + 65 38 63 0.547857 + 65 38 64 0.547857 + 65 38 65 0.50868 + 65 38 66 0.430144 + 65 38 67 0.311883 + 65 38 68 0.153337 + 65 38 69 0.0096893 + 65 39 55 0.10703 + 65 39 56 0.42714 + 65 39 57 0.712087 + 65 39 58 0.944047 + 65 39 59 1 + 65 39 60 1 + 65 39 61 1 + 65 39 62 1 + 65 39 63 1 + 65 39 64 1 + 65 39 65 1 + 65 39 66 1 + 65 39 67 1 + 65 39 68 1 + 65 39 69 0.944047 + 65 39 70 0.712087 + 65 39 71 0.42714 + 65 39 72 0.10703 + 65 40 52 0.00487084 + 65 40 53 0.295408 + 65 40 54 0.720869 + 65 40 55 0.990327 + 65 40 56 1 + 65 40 57 1 + 65 40 58 1 + 65 40 59 1 + 65 40 60 1 + 65 40 61 1 + 65 40 62 1 + 65 40 63 1 + 65 40 64 1 + 65 40 65 1 + 65 40 66 1 + 65 40 67 1 + 65 40 68 1 + 65 40 69 1 + 65 40 70 1 + 65 40 71 1 + 65 40 72 0.990327 + 65 40 73 0.720869 + 65 40 74 0.295408 + 65 40 75 0.00487084 + 65 41 50 0.000160193 + 65 41 51 0.286191 + 65 41 52 0.813363 + 65 41 53 1 + 65 41 54 1 + 65 41 55 1 + 65 41 56 1 + 65 41 57 1 + 65 41 58 1 + 65 41 59 1 + 65 41 60 1 + 65 41 61 1 + 65 41 62 1 + 65 41 63 1 + 65 41 64 1 + 65 41 65 1 + 65 41 66 1 + 65 41 67 1 + 65 41 68 1 + 65 41 69 1 + 65 41 70 1 + 65 41 71 1 + 65 41 72 1 + 65 41 73 1 + 65 41 74 1 + 65 41 75 0.813363 + 65 41 76 0.286191 + 65 41 77 0.000160193 + 65 42 49 0.10742 + 65 42 50 0.694555 + 65 42 51 0.99983 + 65 42 52 1 + 65 42 53 1 + 65 42 54 1 + 65 42 55 1 + 65 42 56 1 + 65 42 57 1 + 65 42 58 1 + 65 42 59 1 + 65 42 60 1 + 65 42 61 1 + 65 42 62 1 + 65 42 63 1 + 65 42 64 1 + 65 42 65 1 + 65 42 66 1 + 65 42 67 1 + 65 42 68 1 + 65 42 69 1 + 65 42 70 1 + 65 42 71 1 + 65 42 72 1 + 65 42 73 1 + 65 42 74 1 + 65 42 75 1 + 65 42 76 0.99983 + 65 42 77 0.694555 + 65 42 78 0.10742 + 65 43 48 0.317411 + 65 43 49 0.931908 + 65 43 50 1 + 65 43 51 1 + 65 43 52 1 + 65 43 53 1 + 65 43 54 1 + 65 43 55 1 + 65 43 56 1 + 65 43 57 1 + 65 43 58 1 + 65 43 59 1 + 65 43 60 1 + 65 43 61 1 + 65 43 62 1 + 65 43 63 1 + 65 43 64 1 + 65 43 65 1 + 65 43 66 1 + 65 43 67 1 + 65 43 68 1 + 65 43 69 1 + 65 43 70 1 + 65 43 71 1 + 65 43 72 1 + 65 43 73 1 + 65 43 74 1 + 65 43 75 1 + 65 43 76 1 + 65 43 77 1 + 65 43 78 0.931908 + 65 43 79 0.317411 + 65 44 46 0.00382379 + 65 44 47 0.509823 + 65 44 48 0.996238 + 65 44 49 1 + 65 44 50 1 + 65 44 51 1 + 65 44 52 1 + 65 44 53 1 + 65 44 54 1 + 65 44 55 1 + 65 44 56 1 + 65 44 57 1 + 65 44 58 1 + 65 44 59 1 + 65 44 60 1 + 65 44 61 1 + 65 44 62 1 + 65 44 63 1 + 65 44 64 1 + 65 44 65 1 + 65 44 66 1 + 65 44 67 1 + 65 44 68 1 + 65 44 69 1 + 65 44 70 1 + 65 44 71 1 + 65 44 72 1 + 65 44 73 1 + 65 44 74 1 + 65 44 75 1 + 65 44 76 1 + 65 44 77 1 + 65 44 78 1 + 65 44 79 0.996238 + 65 44 80 0.509823 + 65 44 81 0.00382379 + 65 45 45 0.00998524 + 65 45 46 0.613886 + 65 45 47 1 + 65 45 48 1 + 65 45 49 1 + 65 45 50 1 + 65 45 51 1 + 65 45 52 1 + 65 45 53 1 + 65 45 54 1 + 65 45 55 1 + 65 45 56 1 + 65 45 57 1 + 65 45 58 1 + 65 45 59 1 + 65 45 60 1 + 65 45 61 1 + 65 45 62 1 + 65 45 63 1 + 65 45 64 1 + 65 45 65 1 + 65 45 66 1 + 65 45 67 1 + 65 45 68 1 + 65 45 69 1 + 65 45 70 1 + 65 45 71 1 + 65 45 72 1 + 65 45 73 1 + 65 45 74 1 + 65 45 75 1 + 65 45 76 1 + 65 45 77 1 + 65 45 78 1 + 65 45 79 1 + 65 45 80 1 + 65 45 81 0.613886 + 65 45 82 0.00998524 + 65 46 44 0.00382379 + 65 46 45 0.613886 + 65 46 46 1 + 65 46 47 1 + 65 46 48 1 + 65 46 49 1 + 65 46 50 1 + 65 46 51 1 + 65 46 52 1 + 65 46 53 1 + 65 46 54 1 + 65 46 55 1 + 65 46 56 1 + 65 46 57 1 + 65 46 58 1 + 65 46 59 1 + 65 46 60 1 + 65 46 61 1 + 65 46 62 1 + 65 46 63 1 + 65 46 64 1 + 65 46 65 1 + 65 46 66 1 + 65 46 67 1 + 65 46 68 1 + 65 46 69 1 + 65 46 70 1 + 65 46 71 1 + 65 46 72 1 + 65 46 73 1 + 65 46 74 1 + 65 46 75 1 + 65 46 76 1 + 65 46 77 1 + 65 46 78 1 + 65 46 79 1 + 65 46 80 1 + 65 46 81 1 + 65 46 82 0.613886 + 65 46 83 0.00382379 + 65 47 44 0.509823 + 65 47 45 1 + 65 47 46 1 + 65 47 47 1 + 65 47 48 1 + 65 47 49 1 + 65 47 50 1 + 65 47 51 1 + 65 47 52 1 + 65 47 53 1 + 65 47 54 1 + 65 47 55 1 + 65 47 56 1 + 65 47 57 1 + 65 47 58 1 + 65 47 59 1 + 65 47 60 1 + 65 47 61 1 + 65 47 62 1 + 65 47 63 1 + 65 47 64 1 + 65 47 65 1 + 65 47 66 1 + 65 47 67 1 + 65 47 68 1 + 65 47 69 1 + 65 47 70 1 + 65 47 71 1 + 65 47 72 1 + 65 47 73 1 + 65 47 74 1 + 65 47 75 1 + 65 47 76 1 + 65 47 77 1 + 65 47 78 1 + 65 47 79 1 + 65 47 80 1 + 65 47 81 1 + 65 47 82 1 + 65 47 83 0.509823 + 65 48 43 0.317411 + 65 48 44 0.996238 + 65 48 45 1 + 65 48 46 1 + 65 48 47 1 + 65 48 48 1 + 65 48 49 1 + 65 48 50 1 + 65 48 51 1 + 65 48 52 1 + 65 48 53 1 + 65 48 54 1 + 65 48 55 1 + 65 48 56 1 + 65 48 57 1 + 65 48 58 1 + 65 48 59 1 + 65 48 60 1 + 65 48 61 1 + 65 48 62 1 + 65 48 63 1 + 65 48 64 1 + 65 48 65 1 + 65 48 66 1 + 65 48 67 1 + 65 48 68 1 + 65 48 69 1 + 65 48 70 1 + 65 48 71 1 + 65 48 72 1 + 65 48 73 1 + 65 48 74 1 + 65 48 75 1 + 65 48 76 1 + 65 48 77 1 + 65 48 78 1 + 65 48 79 1 + 65 48 80 1 + 65 48 81 1 + 65 48 82 1 + 65 48 83 0.996238 + 65 48 84 0.317411 + 65 49 42 0.10742 + 65 49 43 0.931908 + 65 49 44 1 + 65 49 45 1 + 65 49 46 1 + 65 49 47 1 + 65 49 48 1 + 65 49 49 1 + 65 49 50 1 + 65 49 51 1 + 65 49 52 1 + 65 49 53 1 + 65 49 54 1 + 65 49 55 1 + 65 49 56 1 + 65 49 57 1 + 65 49 58 1 + 65 49 59 1 + 65 49 60 1 + 65 49 61 1 + 65 49 62 1 + 65 49 63 1 + 65 49 64 1 + 65 49 65 1 + 65 49 66 1 + 65 49 67 1 + 65 49 68 1 + 65 49 69 1 + 65 49 70 1 + 65 49 71 1 + 65 49 72 1 + 65 49 73 1 + 65 49 74 1 + 65 49 75 1 + 65 49 76 1 + 65 49 77 1 + 65 49 78 1 + 65 49 79 1 + 65 49 80 1 + 65 49 81 1 + 65 49 82 1 + 65 49 83 1 + 65 49 84 0.931908 + 65 49 85 0.10742 + 65 50 41 0.000160193 + 65 50 42 0.694555 + 65 50 43 1 + 65 50 44 1 + 65 50 45 1 + 65 50 46 1 + 65 50 47 1 + 65 50 48 1 + 65 50 49 1 + 65 50 50 1 + 65 50 51 1 + 65 50 52 1 + 65 50 53 1 + 65 50 54 1 + 65 50 55 1 + 65 50 56 1 + 65 50 57 1 + 65 50 58 1 + 65 50 59 1 + 65 50 60 1 + 65 50 61 1 + 65 50 62 1 + 65 50 63 1 + 65 50 64 1 + 65 50 65 1 + 65 50 66 1 + 65 50 67 1 + 65 50 68 1 + 65 50 69 1 + 65 50 70 1 + 65 50 71 1 + 65 50 72 1 + 65 50 73 1 + 65 50 74 1 + 65 50 75 1 + 65 50 76 1 + 65 50 77 1 + 65 50 78 1 + 65 50 79 1 + 65 50 80 1 + 65 50 81 1 + 65 50 82 1 + 65 50 83 1 + 65 50 84 1 + 65 50 85 0.694555 + 65 50 86 0.000160193 + 65 51 41 0.286191 + 65 51 42 0.99983 + 65 51 43 1 + 65 51 44 1 + 65 51 45 1 + 65 51 46 1 + 65 51 47 1 + 65 51 48 1 + 65 51 49 1 + 65 51 50 1 + 65 51 51 1 + 65 51 52 1 + 65 51 53 1 + 65 51 54 1 + 65 51 55 1 + 65 51 56 1 + 65 51 57 1 + 65 51 58 1 + 65 51 59 1 + 65 51 60 1 + 65 51 61 1 + 65 51 62 1 + 65 51 63 1 + 65 51 64 1 + 65 51 65 1 + 65 51 66 1 + 65 51 67 1 + 65 51 68 1 + 65 51 69 1 + 65 51 70 1 + 65 51 71 1 + 65 51 72 1 + 65 51 73 1 + 65 51 74 1 + 65 51 75 1 + 65 51 76 1 + 65 51 77 1 + 65 51 78 1 + 65 51 79 1 + 65 51 80 1 + 65 51 81 1 + 65 51 82 1 + 65 51 83 1 + 65 51 84 1 + 65 51 85 0.99983 + 65 51 86 0.286191 + 65 52 40 0.00487084 + 65 52 41 0.813363 + 65 52 42 1 + 65 52 43 1 + 65 52 44 1 + 65 52 45 1 + 65 52 46 1 + 65 52 47 1 + 65 52 48 1 + 65 52 49 1 + 65 52 50 1 + 65 52 51 1 + 65 52 52 1 + 65 52 53 1 + 65 52 54 1 + 65 52 55 1 + 65 52 56 1 + 65 52 57 1 + 65 52 58 1 + 65 52 59 1 + 65 52 60 1 + 65 52 61 1 + 65 52 62 1 + 65 52 63 1 + 65 52 64 1 + 65 52 65 1 + 65 52 66 1 + 65 52 67 1 + 65 52 68 1 + 65 52 69 1 + 65 52 70 1 + 65 52 71 1 + 65 52 72 1 + 65 52 73 1 + 65 52 74 1 + 65 52 75 1 + 65 52 76 1 + 65 52 77 1 + 65 52 78 1 + 65 52 79 1 + 65 52 80 1 + 65 52 81 1 + 65 52 82 1 + 65 52 83 1 + 65 52 84 1 + 65 52 85 1 + 65 52 86 0.813363 + 65 52 87 0.00487084 + 65 53 40 0.295408 + 65 53 41 1 + 65 53 42 1 + 65 53 43 1 + 65 53 44 1 + 65 53 45 1 + 65 53 46 1 + 65 53 47 1 + 65 53 48 1 + 65 53 49 1 + 65 53 50 1 + 65 53 51 1 + 65 53 52 1 + 65 53 53 1 + 65 53 54 1 + 65 53 55 1 + 65 53 56 1 + 65 53 57 1 + 65 53 58 1 + 65 53 59 1 + 65 53 60 1 + 65 53 61 1 + 65 53 62 1 + 65 53 63 1 + 65 53 64 1 + 65 53 65 1 + 65 53 66 1 + 65 53 67 1 + 65 53 68 1 + 65 53 69 1 + 65 53 70 1 + 65 53 71 1 + 65 53 72 1 + 65 53 73 1 + 65 53 74 1 + 65 53 75 1 + 65 53 76 1 + 65 53 77 1 + 65 53 78 1 + 65 53 79 1 + 65 53 80 1 + 65 53 81 1 + 65 53 82 1 + 65 53 83 1 + 65 53 84 1 + 65 53 85 1 + 65 53 86 1 + 65 53 87 0.295408 + 65 54 40 0.720869 + 65 54 41 1 + 65 54 42 1 + 65 54 43 1 + 65 54 44 1 + 65 54 45 1 + 65 54 46 1 + 65 54 47 1 + 65 54 48 1 + 65 54 49 1 + 65 54 50 1 + 65 54 51 1 + 65 54 52 1 + 65 54 53 1 + 65 54 54 1 + 65 54 55 1 + 65 54 56 1 + 65 54 57 1 + 65 54 58 1 + 65 54 59 1 + 65 54 60 1 + 65 54 61 1 + 65 54 62 1 + 65 54 63 1 + 65 54 64 1 + 65 54 65 1 + 65 54 66 1 + 65 54 67 1 + 65 54 68 1 + 65 54 69 1 + 65 54 70 1 + 65 54 71 1 + 65 54 72 1 + 65 54 73 1 + 65 54 74 1 + 65 54 75 1 + 65 54 76 1 + 65 54 77 1 + 65 54 78 1 + 65 54 79 1 + 65 54 80 1 + 65 54 81 1 + 65 54 82 1 + 65 54 83 1 + 65 54 84 1 + 65 54 85 1 + 65 54 86 1 + 65 54 87 0.720869 + 65 55 39 0.10703 + 65 55 40 0.990327 + 65 55 41 1 + 65 55 42 1 + 65 55 43 1 + 65 55 44 1 + 65 55 45 1 + 65 55 46 1 + 65 55 47 1 + 65 55 48 1 + 65 55 49 1 + 65 55 50 1 + 65 55 51 1 + 65 55 52 1 + 65 55 53 1 + 65 55 54 1 + 65 55 55 1 + 65 55 56 1 + 65 55 57 1 + 65 55 58 1 + 65 55 59 1 + 65 55 60 1 + 65 55 61 1 + 65 55 62 1 + 65 55 63 1 + 65 55 64 1 + 65 55 65 1 + 65 55 66 1 + 65 55 67 1 + 65 55 68 1 + 65 55 69 1 + 65 55 70 1 + 65 55 71 1 + 65 55 72 1 + 65 55 73 1 + 65 55 74 1 + 65 55 75 1 + 65 55 76 1 + 65 55 77 1 + 65 55 78 1 + 65 55 79 1 + 65 55 80 1 + 65 55 81 1 + 65 55 82 1 + 65 55 83 1 + 65 55 84 1 + 65 55 85 1 + 65 55 86 1 + 65 55 87 0.990327 + 65 55 88 0.10703 + 65 56 39 0.42714 + 65 56 40 1 + 65 56 41 1 + 65 56 42 1 + 65 56 43 1 + 65 56 44 1 + 65 56 45 1 + 65 56 46 1 + 65 56 47 1 + 65 56 48 1 + 65 56 49 1 + 65 56 50 1 + 65 56 51 1 + 65 56 52 1 + 65 56 53 1 + 65 56 54 1 + 65 56 55 1 + 65 56 56 1 + 65 56 57 1 + 65 56 58 1 + 65 56 59 1 + 65 56 60 1 + 65 56 61 1 + 65 56 62 1 + 65 56 63 1 + 65 56 64 1 + 65 56 65 1 + 65 56 66 1 + 65 56 67 1 + 65 56 68 1 + 65 56 69 1 + 65 56 70 1 + 65 56 71 1 + 65 56 72 1 + 65 56 73 1 + 65 56 74 1 + 65 56 75 1 + 65 56 76 1 + 65 56 77 1 + 65 56 78 1 + 65 56 79 1 + 65 56 80 1 + 65 56 81 1 + 65 56 82 1 + 65 56 83 1 + 65 56 84 1 + 65 56 85 1 + 65 56 86 1 + 65 56 87 1 + 65 56 88 0.42714 + 65 57 39 0.712087 + 65 57 40 1 + 65 57 41 1 + 65 57 42 1 + 65 57 43 1 + 65 57 44 1 + 65 57 45 1 + 65 57 46 1 + 65 57 47 1 + 65 57 48 1 + 65 57 49 1 + 65 57 50 1 + 65 57 51 1 + 65 57 52 1 + 65 57 53 1 + 65 57 54 1 + 65 57 55 1 + 65 57 56 1 + 65 57 57 1 + 65 57 58 1 + 65 57 59 1 + 65 57 60 1 + 65 57 61 1 + 65 57 62 1 + 65 57 63 1 + 65 57 64 1 + 65 57 65 1 + 65 57 66 1 + 65 57 67 1 + 65 57 68 1 + 65 57 69 1 + 65 57 70 1 + 65 57 71 1 + 65 57 72 1 + 65 57 73 1 + 65 57 74 1 + 65 57 75 1 + 65 57 76 1 + 65 57 77 1 + 65 57 78 1 + 65 57 79 1 + 65 57 80 1 + 65 57 81 1 + 65 57 82 1 + 65 57 83 1 + 65 57 84 1 + 65 57 85 1 + 65 57 86 1 + 65 57 87 1 + 65 57 88 0.712087 + 65 58 38 0.0096893 + 65 58 39 0.944047 + 65 58 40 1 + 65 58 41 1 + 65 58 42 1 + 65 58 43 1 + 65 58 44 1 + 65 58 45 1 + 65 58 46 1 + 65 58 47 1 + 65 58 48 1 + 65 58 49 1 + 65 58 50 1 + 65 58 51 1 + 65 58 52 1 + 65 58 53 1 + 65 58 54 1 + 65 58 55 1 + 65 58 56 1 + 65 58 57 1 + 65 58 58 1 + 65 58 59 1 + 65 58 60 1 + 65 58 61 1 + 65 58 62 1 + 65 58 63 1 + 65 58 64 1 + 65 58 65 1 + 65 58 66 1 + 65 58 67 1 + 65 58 68 1 + 65 58 69 1 + 65 58 70 1 + 65 58 71 1 + 65 58 72 1 + 65 58 73 1 + 65 58 74 1 + 65 58 75 1 + 65 58 76 1 + 65 58 77 1 + 65 58 78 1 + 65 58 79 1 + 65 58 80 1 + 65 58 81 1 + 65 58 82 1 + 65 58 83 1 + 65 58 84 1 + 65 58 85 1 + 65 58 86 1 + 65 58 87 1 + 65 58 88 0.944047 + 65 58 89 0.0096893 + 65 59 38 0.153337 + 65 59 39 1 + 65 59 40 1 + 65 59 41 1 + 65 59 42 1 + 65 59 43 1 + 65 59 44 1 + 65 59 45 1 + 65 59 46 1 + 65 59 47 1 + 65 59 48 1 + 65 59 49 1 + 65 59 50 1 + 65 59 51 1 + 65 59 52 1 + 65 59 53 1 + 65 59 54 1 + 65 59 55 1 + 65 59 56 1 + 65 59 57 1 + 65 59 58 1 + 65 59 59 1 + 65 59 60 1 + 65 59 61 1 + 65 59 62 1 + 65 59 63 1 + 65 59 64 1 + 65 59 65 1 + 65 59 66 1 + 65 59 67 1 + 65 59 68 1 + 65 59 69 1 + 65 59 70 1 + 65 59 71 1 + 65 59 72 1 + 65 59 73 1 + 65 59 74 1 + 65 59 75 1 + 65 59 76 1 + 65 59 77 1 + 65 59 78 1 + 65 59 79 1 + 65 59 80 1 + 65 59 81 1 + 65 59 82 1 + 65 59 83 1 + 65 59 84 1 + 65 59 85 1 + 65 59 86 1 + 65 59 87 1 + 65 59 88 1 + 65 59 89 0.153337 + 65 60 38 0.311883 + 65 60 39 1 + 65 60 40 1 + 65 60 41 1 + 65 60 42 1 + 65 60 43 1 + 65 60 44 1 + 65 60 45 1 + 65 60 46 1 + 65 60 47 1 + 65 60 48 1 + 65 60 49 1 + 65 60 50 1 + 65 60 51 1 + 65 60 52 1 + 65 60 53 1 + 65 60 54 1 + 65 60 55 1 + 65 60 56 1 + 65 60 57 1 + 65 60 58 1 + 65 60 59 1 + 65 60 60 1 + 65 60 61 1 + 65 60 62 1 + 65 60 63 1 + 65 60 64 1 + 65 60 65 1 + 65 60 66 1 + 65 60 67 1 + 65 60 68 1 + 65 60 69 1 + 65 60 70 1 + 65 60 71 1 + 65 60 72 1 + 65 60 73 1 + 65 60 74 1 + 65 60 75 1 + 65 60 76 1 + 65 60 77 1 + 65 60 78 1 + 65 60 79 1 + 65 60 80 1 + 65 60 81 1 + 65 60 82 1 + 65 60 83 1 + 65 60 84 1 + 65 60 85 1 + 65 60 86 1 + 65 60 87 1 + 65 60 88 1 + 65 60 89 0.311883 + 65 61 38 0.430144 + 65 61 39 1 + 65 61 40 1 + 65 61 41 1 + 65 61 42 1 + 65 61 43 1 + 65 61 44 1 + 65 61 45 1 + 65 61 46 1 + 65 61 47 1 + 65 61 48 1 + 65 61 49 1 + 65 61 50 1 + 65 61 51 1 + 65 61 52 1 + 65 61 53 1 + 65 61 54 1 + 65 61 55 1 + 65 61 56 1 + 65 61 57 1 + 65 61 58 1 + 65 61 59 1 + 65 61 60 1 + 65 61 61 1 + 65 61 62 1 + 65 61 63 1 + 65 61 64 1 + 65 61 65 1 + 65 61 66 1 + 65 61 67 1 + 65 61 68 1 + 65 61 69 1 + 65 61 70 1 + 65 61 71 1 + 65 61 72 1 + 65 61 73 1 + 65 61 74 1 + 65 61 75 1 + 65 61 76 1 + 65 61 77 1 + 65 61 78 1 + 65 61 79 1 + 65 61 80 1 + 65 61 81 1 + 65 61 82 1 + 65 61 83 1 + 65 61 84 1 + 65 61 85 1 + 65 61 86 1 + 65 61 87 1 + 65 61 88 1 + 65 61 89 0.430144 + 65 62 38 0.50868 + 65 62 39 1 + 65 62 40 1 + 65 62 41 1 + 65 62 42 1 + 65 62 43 1 + 65 62 44 1 + 65 62 45 1 + 65 62 46 1 + 65 62 47 1 + 65 62 48 1 + 65 62 49 1 + 65 62 50 1 + 65 62 51 1 + 65 62 52 1 + 65 62 53 1 + 65 62 54 1 + 65 62 55 1 + 65 62 56 1 + 65 62 57 1 + 65 62 58 1 + 65 62 59 1 + 65 62 60 1 + 65 62 61 1 + 65 62 62 1 + 65 62 63 1 + 65 62 64 1 + 65 62 65 1 + 65 62 66 1 + 65 62 67 1 + 65 62 68 1 + 65 62 69 1 + 65 62 70 1 + 65 62 71 1 + 65 62 72 1 + 65 62 73 1 + 65 62 74 1 + 65 62 75 1 + 65 62 76 1 + 65 62 77 1 + 65 62 78 1 + 65 62 79 1 + 65 62 80 1 + 65 62 81 1 + 65 62 82 1 + 65 62 83 1 + 65 62 84 1 + 65 62 85 1 + 65 62 86 1 + 65 62 87 1 + 65 62 88 1 + 65 62 89 0.50868 + 65 63 38 0.547857 + 65 63 39 1 + 65 63 40 1 + 65 63 41 1 + 65 63 42 1 + 65 63 43 1 + 65 63 44 1 + 65 63 45 1 + 65 63 46 1 + 65 63 47 1 + 65 63 48 1 + 65 63 49 1 + 65 63 50 1 + 65 63 51 1 + 65 63 52 1 + 65 63 53 1 + 65 63 54 1 + 65 63 55 1 + 65 63 56 1 + 65 63 57 1 + 65 63 58 1 + 65 63 59 1 + 65 63 60 1 + 65 63 61 1 + 65 63 62 1 + 65 63 63 1 + 65 63 64 1 + 65 63 65 1 + 65 63 66 1 + 65 63 67 1 + 65 63 68 1 + 65 63 69 1 + 65 63 70 1 + 65 63 71 1 + 65 63 72 1 + 65 63 73 1 + 65 63 74 1 + 65 63 75 1 + 65 63 76 1 + 65 63 77 1 + 65 63 78 1 + 65 63 79 1 + 65 63 80 1 + 65 63 81 1 + 65 63 82 1 + 65 63 83 1 + 65 63 84 1 + 65 63 85 1 + 65 63 86 1 + 65 63 87 1 + 65 63 88 1 + 65 63 89 0.547857 + 65 64 38 0.547857 + 65 64 39 1 + 65 64 40 1 + 65 64 41 1 + 65 64 42 1 + 65 64 43 1 + 65 64 44 1 + 65 64 45 1 + 65 64 46 1 + 65 64 47 1 + 65 64 48 1 + 65 64 49 1 + 65 64 50 1 + 65 64 51 1 + 65 64 52 1 + 65 64 53 1 + 65 64 54 1 + 65 64 55 1 + 65 64 56 1 + 65 64 57 1 + 65 64 58 1 + 65 64 59 1 + 65 64 60 1 + 65 64 61 1 + 65 64 62 1 + 65 64 63 1 + 65 64 64 1 + 65 64 65 1 + 65 64 66 1 + 65 64 67 1 + 65 64 68 1 + 65 64 69 1 + 65 64 70 1 + 65 64 71 1 + 65 64 72 1 + 65 64 73 1 + 65 64 74 1 + 65 64 75 1 + 65 64 76 1 + 65 64 77 1 + 65 64 78 1 + 65 64 79 1 + 65 64 80 1 + 65 64 81 1 + 65 64 82 1 + 65 64 83 1 + 65 64 84 1 + 65 64 85 1 + 65 64 86 1 + 65 64 87 1 + 65 64 88 1 + 65 64 89 0.547857 + 65 65 38 0.50868 + 65 65 39 1 + 65 65 40 1 + 65 65 41 1 + 65 65 42 1 + 65 65 43 1 + 65 65 44 1 + 65 65 45 1 + 65 65 46 1 + 65 65 47 1 + 65 65 48 1 + 65 65 49 1 + 65 65 50 1 + 65 65 51 1 + 65 65 52 1 + 65 65 53 1 + 65 65 54 1 + 65 65 55 1 + 65 65 56 1 + 65 65 57 1 + 65 65 58 1 + 65 65 59 1 + 65 65 60 1 + 65 65 61 1 + 65 65 62 1 + 65 65 63 1 + 65 65 64 1 + 65 65 65 1 + 65 65 66 1 + 65 65 67 1 + 65 65 68 1 + 65 65 69 1 + 65 65 70 1 + 65 65 71 1 + 65 65 72 1 + 65 65 73 1 + 65 65 74 1 + 65 65 75 1 + 65 65 76 1 + 65 65 77 1 + 65 65 78 1 + 65 65 79 1 + 65 65 80 1 + 65 65 81 1 + 65 65 82 1 + 65 65 83 1 + 65 65 84 1 + 65 65 85 1 + 65 65 86 1 + 65 65 87 1 + 65 65 88 1 + 65 65 89 0.50868 + 65 66 38 0.430144 + 65 66 39 1 + 65 66 40 1 + 65 66 41 1 + 65 66 42 1 + 65 66 43 1 + 65 66 44 1 + 65 66 45 1 + 65 66 46 1 + 65 66 47 1 + 65 66 48 1 + 65 66 49 1 + 65 66 50 1 + 65 66 51 1 + 65 66 52 1 + 65 66 53 1 + 65 66 54 1 + 65 66 55 1 + 65 66 56 1 + 65 66 57 1 + 65 66 58 1 + 65 66 59 1 + 65 66 60 1 + 65 66 61 1 + 65 66 62 1 + 65 66 63 1 + 65 66 64 1 + 65 66 65 1 + 65 66 66 1 + 65 66 67 1 + 65 66 68 1 + 65 66 69 1 + 65 66 70 1 + 65 66 71 1 + 65 66 72 1 + 65 66 73 1 + 65 66 74 1 + 65 66 75 1 + 65 66 76 1 + 65 66 77 1 + 65 66 78 1 + 65 66 79 1 + 65 66 80 1 + 65 66 81 1 + 65 66 82 1 + 65 66 83 1 + 65 66 84 1 + 65 66 85 1 + 65 66 86 1 + 65 66 87 1 + 65 66 88 1 + 65 66 89 0.430144 + 65 67 38 0.311883 + 65 67 39 1 + 65 67 40 1 + 65 67 41 1 + 65 67 42 1 + 65 67 43 1 + 65 67 44 1 + 65 67 45 1 + 65 67 46 1 + 65 67 47 1 + 65 67 48 1 + 65 67 49 1 + 65 67 50 1 + 65 67 51 1 + 65 67 52 1 + 65 67 53 1 + 65 67 54 1 + 65 67 55 1 + 65 67 56 1 + 65 67 57 1 + 65 67 58 1 + 65 67 59 1 + 65 67 60 1 + 65 67 61 1 + 65 67 62 1 + 65 67 63 1 + 65 67 64 1 + 65 67 65 1 + 65 67 66 1 + 65 67 67 1 + 65 67 68 1 + 65 67 69 1 + 65 67 70 1 + 65 67 71 1 + 65 67 72 1 + 65 67 73 1 + 65 67 74 1 + 65 67 75 1 + 65 67 76 1 + 65 67 77 1 + 65 67 78 1 + 65 67 79 1 + 65 67 80 1 + 65 67 81 1 + 65 67 82 1 + 65 67 83 1 + 65 67 84 1 + 65 67 85 1 + 65 67 86 1 + 65 67 87 1 + 65 67 88 1 + 65 67 89 0.311883 + 65 68 38 0.153337 + 65 68 39 1 + 65 68 40 1 + 65 68 41 1 + 65 68 42 1 + 65 68 43 1 + 65 68 44 1 + 65 68 45 1 + 65 68 46 1 + 65 68 47 1 + 65 68 48 1 + 65 68 49 1 + 65 68 50 1 + 65 68 51 1 + 65 68 52 1 + 65 68 53 1 + 65 68 54 1 + 65 68 55 1 + 65 68 56 1 + 65 68 57 1 + 65 68 58 1 + 65 68 59 1 + 65 68 60 1 + 65 68 61 1 + 65 68 62 1 + 65 68 63 1 + 65 68 64 1 + 65 68 65 1 + 65 68 66 1 + 65 68 67 1 + 65 68 68 1 + 65 68 69 1 + 65 68 70 1 + 65 68 71 1 + 65 68 72 1 + 65 68 73 1 + 65 68 74 1 + 65 68 75 1 + 65 68 76 1 + 65 68 77 1 + 65 68 78 1 + 65 68 79 1 + 65 68 80 1 + 65 68 81 1 + 65 68 82 1 + 65 68 83 1 + 65 68 84 1 + 65 68 85 1 + 65 68 86 1 + 65 68 87 1 + 65 68 88 1 + 65 68 89 0.153337 + 65 69 38 0.0096893 + 65 69 39 0.944047 + 65 69 40 1 + 65 69 41 1 + 65 69 42 1 + 65 69 43 1 + 65 69 44 1 + 65 69 45 1 + 65 69 46 1 + 65 69 47 1 + 65 69 48 1 + 65 69 49 1 + 65 69 50 1 + 65 69 51 1 + 65 69 52 1 + 65 69 53 1 + 65 69 54 1 + 65 69 55 1 + 65 69 56 1 + 65 69 57 1 + 65 69 58 1 + 65 69 59 1 + 65 69 60 1 + 65 69 61 1 + 65 69 62 1 + 65 69 63 1 + 65 69 64 1 + 65 69 65 1 + 65 69 66 1 + 65 69 67 1 + 65 69 68 1 + 65 69 69 1 + 65 69 70 1 + 65 69 71 1 + 65 69 72 1 + 65 69 73 1 + 65 69 74 1 + 65 69 75 1 + 65 69 76 1 + 65 69 77 1 + 65 69 78 1 + 65 69 79 1 + 65 69 80 1 + 65 69 81 1 + 65 69 82 1 + 65 69 83 1 + 65 69 84 1 + 65 69 85 1 + 65 69 86 1 + 65 69 87 1 + 65 69 88 0.944047 + 65 69 89 0.0096893 + 65 70 39 0.712087 + 65 70 40 1 + 65 70 41 1 + 65 70 42 1 + 65 70 43 1 + 65 70 44 1 + 65 70 45 1 + 65 70 46 1 + 65 70 47 1 + 65 70 48 1 + 65 70 49 1 + 65 70 50 1 + 65 70 51 1 + 65 70 52 1 + 65 70 53 1 + 65 70 54 1 + 65 70 55 1 + 65 70 56 1 + 65 70 57 1 + 65 70 58 1 + 65 70 59 1 + 65 70 60 1 + 65 70 61 1 + 65 70 62 1 + 65 70 63 1 + 65 70 64 1 + 65 70 65 1 + 65 70 66 1 + 65 70 67 1 + 65 70 68 1 + 65 70 69 1 + 65 70 70 1 + 65 70 71 1 + 65 70 72 1 + 65 70 73 1 + 65 70 74 1 + 65 70 75 1 + 65 70 76 1 + 65 70 77 1 + 65 70 78 1 + 65 70 79 1 + 65 70 80 1 + 65 70 81 1 + 65 70 82 1 + 65 70 83 1 + 65 70 84 1 + 65 70 85 1 + 65 70 86 1 + 65 70 87 1 + 65 70 88 0.712087 + 65 71 39 0.42714 + 65 71 40 1 + 65 71 41 1 + 65 71 42 1 + 65 71 43 1 + 65 71 44 1 + 65 71 45 1 + 65 71 46 1 + 65 71 47 1 + 65 71 48 1 + 65 71 49 1 + 65 71 50 1 + 65 71 51 1 + 65 71 52 1 + 65 71 53 1 + 65 71 54 1 + 65 71 55 1 + 65 71 56 1 + 65 71 57 1 + 65 71 58 1 + 65 71 59 1 + 65 71 60 1 + 65 71 61 1 + 65 71 62 1 + 65 71 63 1 + 65 71 64 1 + 65 71 65 1 + 65 71 66 1 + 65 71 67 1 + 65 71 68 1 + 65 71 69 1 + 65 71 70 1 + 65 71 71 1 + 65 71 72 1 + 65 71 73 1 + 65 71 74 1 + 65 71 75 1 + 65 71 76 1 + 65 71 77 1 + 65 71 78 1 + 65 71 79 1 + 65 71 80 1 + 65 71 81 1 + 65 71 82 1 + 65 71 83 1 + 65 71 84 1 + 65 71 85 1 + 65 71 86 1 + 65 71 87 1 + 65 71 88 0.42714 + 65 72 39 0.10703 + 65 72 40 0.990327 + 65 72 41 1 + 65 72 42 1 + 65 72 43 1 + 65 72 44 1 + 65 72 45 1 + 65 72 46 1 + 65 72 47 1 + 65 72 48 1 + 65 72 49 1 + 65 72 50 1 + 65 72 51 1 + 65 72 52 1 + 65 72 53 1 + 65 72 54 1 + 65 72 55 1 + 65 72 56 1 + 65 72 57 1 + 65 72 58 1 + 65 72 59 1 + 65 72 60 1 + 65 72 61 1 + 65 72 62 1 + 65 72 63 1 + 65 72 64 1 + 65 72 65 1 + 65 72 66 1 + 65 72 67 1 + 65 72 68 1 + 65 72 69 1 + 65 72 70 1 + 65 72 71 1 + 65 72 72 1 + 65 72 73 1 + 65 72 74 1 + 65 72 75 1 + 65 72 76 1 + 65 72 77 1 + 65 72 78 1 + 65 72 79 1 + 65 72 80 1 + 65 72 81 1 + 65 72 82 1 + 65 72 83 1 + 65 72 84 1 + 65 72 85 1 + 65 72 86 1 + 65 72 87 0.990327 + 65 72 88 0.10703 + 65 73 40 0.720869 + 65 73 41 1 + 65 73 42 1 + 65 73 43 1 + 65 73 44 1 + 65 73 45 1 + 65 73 46 1 + 65 73 47 1 + 65 73 48 1 + 65 73 49 1 + 65 73 50 1 + 65 73 51 1 + 65 73 52 1 + 65 73 53 1 + 65 73 54 1 + 65 73 55 1 + 65 73 56 1 + 65 73 57 1 + 65 73 58 1 + 65 73 59 1 + 65 73 60 1 + 65 73 61 1 + 65 73 62 1 + 65 73 63 1 + 65 73 64 1 + 65 73 65 1 + 65 73 66 1 + 65 73 67 1 + 65 73 68 1 + 65 73 69 1 + 65 73 70 1 + 65 73 71 1 + 65 73 72 1 + 65 73 73 1 + 65 73 74 1 + 65 73 75 1 + 65 73 76 1 + 65 73 77 1 + 65 73 78 1 + 65 73 79 1 + 65 73 80 1 + 65 73 81 1 + 65 73 82 1 + 65 73 83 1 + 65 73 84 1 + 65 73 85 1 + 65 73 86 1 + 65 73 87 0.720869 + 65 74 40 0.295408 + 65 74 41 1 + 65 74 42 1 + 65 74 43 1 + 65 74 44 1 + 65 74 45 1 + 65 74 46 1 + 65 74 47 1 + 65 74 48 1 + 65 74 49 1 + 65 74 50 1 + 65 74 51 1 + 65 74 52 1 + 65 74 53 1 + 65 74 54 1 + 65 74 55 1 + 65 74 56 1 + 65 74 57 1 + 65 74 58 1 + 65 74 59 1 + 65 74 60 1 + 65 74 61 1 + 65 74 62 1 + 65 74 63 1 + 65 74 64 1 + 65 74 65 1 + 65 74 66 1 + 65 74 67 1 + 65 74 68 1 + 65 74 69 1 + 65 74 70 1 + 65 74 71 1 + 65 74 72 1 + 65 74 73 1 + 65 74 74 1 + 65 74 75 1 + 65 74 76 1 + 65 74 77 1 + 65 74 78 1 + 65 74 79 1 + 65 74 80 1 + 65 74 81 1 + 65 74 82 1 + 65 74 83 1 + 65 74 84 1 + 65 74 85 1 + 65 74 86 1 + 65 74 87 0.295408 + 65 75 40 0.00487084 + 65 75 41 0.813363 + 65 75 42 1 + 65 75 43 1 + 65 75 44 1 + 65 75 45 1 + 65 75 46 1 + 65 75 47 1 + 65 75 48 1 + 65 75 49 1 + 65 75 50 1 + 65 75 51 1 + 65 75 52 1 + 65 75 53 1 + 65 75 54 1 + 65 75 55 1 + 65 75 56 1 + 65 75 57 1 + 65 75 58 1 + 65 75 59 1 + 65 75 60 1 + 65 75 61 1 + 65 75 62 1 + 65 75 63 1 + 65 75 64 1 + 65 75 65 1 + 65 75 66 1 + 65 75 67 1 + 65 75 68 1 + 65 75 69 1 + 65 75 70 1 + 65 75 71 1 + 65 75 72 1 + 65 75 73 1 + 65 75 74 1 + 65 75 75 1 + 65 75 76 1 + 65 75 77 1 + 65 75 78 1 + 65 75 79 1 + 65 75 80 1 + 65 75 81 1 + 65 75 82 1 + 65 75 83 1 + 65 75 84 1 + 65 75 85 1 + 65 75 86 0.813363 + 65 75 87 0.00487084 + 65 76 41 0.286191 + 65 76 42 0.99983 + 65 76 43 1 + 65 76 44 1 + 65 76 45 1 + 65 76 46 1 + 65 76 47 1 + 65 76 48 1 + 65 76 49 1 + 65 76 50 1 + 65 76 51 1 + 65 76 52 1 + 65 76 53 1 + 65 76 54 1 + 65 76 55 1 + 65 76 56 1 + 65 76 57 1 + 65 76 58 1 + 65 76 59 1 + 65 76 60 1 + 65 76 61 1 + 65 76 62 1 + 65 76 63 1 + 65 76 64 1 + 65 76 65 1 + 65 76 66 1 + 65 76 67 1 + 65 76 68 1 + 65 76 69 1 + 65 76 70 1 + 65 76 71 1 + 65 76 72 1 + 65 76 73 1 + 65 76 74 1 + 65 76 75 1 + 65 76 76 1 + 65 76 77 1 + 65 76 78 1 + 65 76 79 1 + 65 76 80 1 + 65 76 81 1 + 65 76 82 1 + 65 76 83 1 + 65 76 84 1 + 65 76 85 0.99983 + 65 76 86 0.286191 + 65 77 41 0.000160193 + 65 77 42 0.694555 + 65 77 43 1 + 65 77 44 1 + 65 77 45 1 + 65 77 46 1 + 65 77 47 1 + 65 77 48 1 + 65 77 49 1 + 65 77 50 1 + 65 77 51 1 + 65 77 52 1 + 65 77 53 1 + 65 77 54 1 + 65 77 55 1 + 65 77 56 1 + 65 77 57 1 + 65 77 58 1 + 65 77 59 1 + 65 77 60 1 + 65 77 61 1 + 65 77 62 1 + 65 77 63 1 + 65 77 64 1 + 65 77 65 1 + 65 77 66 1 + 65 77 67 1 + 65 77 68 1 + 65 77 69 1 + 65 77 70 1 + 65 77 71 1 + 65 77 72 1 + 65 77 73 1 + 65 77 74 1 + 65 77 75 1 + 65 77 76 1 + 65 77 77 1 + 65 77 78 1 + 65 77 79 1 + 65 77 80 1 + 65 77 81 1 + 65 77 82 1 + 65 77 83 1 + 65 77 84 1 + 65 77 85 0.694555 + 65 77 86 0.000160193 + 65 78 42 0.10742 + 65 78 43 0.931908 + 65 78 44 1 + 65 78 45 1 + 65 78 46 1 + 65 78 47 1 + 65 78 48 1 + 65 78 49 1 + 65 78 50 1 + 65 78 51 1 + 65 78 52 1 + 65 78 53 1 + 65 78 54 1 + 65 78 55 1 + 65 78 56 1 + 65 78 57 1 + 65 78 58 1 + 65 78 59 1 + 65 78 60 1 + 65 78 61 1 + 65 78 62 1 + 65 78 63 1 + 65 78 64 1 + 65 78 65 1 + 65 78 66 1 + 65 78 67 1 + 65 78 68 1 + 65 78 69 1 + 65 78 70 1 + 65 78 71 1 + 65 78 72 1 + 65 78 73 1 + 65 78 74 1 + 65 78 75 1 + 65 78 76 1 + 65 78 77 1 + 65 78 78 1 + 65 78 79 1 + 65 78 80 1 + 65 78 81 1 + 65 78 82 1 + 65 78 83 1 + 65 78 84 0.931908 + 65 78 85 0.10742 + 65 79 43 0.317411 + 65 79 44 0.996238 + 65 79 45 1 + 65 79 46 1 + 65 79 47 1 + 65 79 48 1 + 65 79 49 1 + 65 79 50 1 + 65 79 51 1 + 65 79 52 1 + 65 79 53 1 + 65 79 54 1 + 65 79 55 1 + 65 79 56 1 + 65 79 57 1 + 65 79 58 1 + 65 79 59 1 + 65 79 60 1 + 65 79 61 1 + 65 79 62 1 + 65 79 63 1 + 65 79 64 1 + 65 79 65 1 + 65 79 66 1 + 65 79 67 1 + 65 79 68 1 + 65 79 69 1 + 65 79 70 1 + 65 79 71 1 + 65 79 72 1 + 65 79 73 1 + 65 79 74 1 + 65 79 75 1 + 65 79 76 1 + 65 79 77 1 + 65 79 78 1 + 65 79 79 1 + 65 79 80 1 + 65 79 81 1 + 65 79 82 1 + 65 79 83 0.996238 + 65 79 84 0.317411 + 65 80 44 0.509823 + 65 80 45 1 + 65 80 46 1 + 65 80 47 1 + 65 80 48 1 + 65 80 49 1 + 65 80 50 1 + 65 80 51 1 + 65 80 52 1 + 65 80 53 1 + 65 80 54 1 + 65 80 55 1 + 65 80 56 1 + 65 80 57 1 + 65 80 58 1 + 65 80 59 1 + 65 80 60 1 + 65 80 61 1 + 65 80 62 1 + 65 80 63 1 + 65 80 64 1 + 65 80 65 1 + 65 80 66 1 + 65 80 67 1 + 65 80 68 1 + 65 80 69 1 + 65 80 70 1 + 65 80 71 1 + 65 80 72 1 + 65 80 73 1 + 65 80 74 1 + 65 80 75 1 + 65 80 76 1 + 65 80 77 1 + 65 80 78 1 + 65 80 79 1 + 65 80 80 1 + 65 80 81 1 + 65 80 82 1 + 65 80 83 0.509823 + 65 81 44 0.00382379 + 65 81 45 0.613886 + 65 81 46 1 + 65 81 47 1 + 65 81 48 1 + 65 81 49 1 + 65 81 50 1 + 65 81 51 1 + 65 81 52 1 + 65 81 53 1 + 65 81 54 1 + 65 81 55 1 + 65 81 56 1 + 65 81 57 1 + 65 81 58 1 + 65 81 59 1 + 65 81 60 1 + 65 81 61 1 + 65 81 62 1 + 65 81 63 1 + 65 81 64 1 + 65 81 65 1 + 65 81 66 1 + 65 81 67 1 + 65 81 68 1 + 65 81 69 1 + 65 81 70 1 + 65 81 71 1 + 65 81 72 1 + 65 81 73 1 + 65 81 74 1 + 65 81 75 1 + 65 81 76 1 + 65 81 77 1 + 65 81 78 1 + 65 81 79 1 + 65 81 80 1 + 65 81 81 1 + 65 81 82 0.613886 + 65 81 83 0.00382379 + 65 82 45 0.00998524 + 65 82 46 0.613886 + 65 82 47 1 + 65 82 48 1 + 65 82 49 1 + 65 82 50 1 + 65 82 51 1 + 65 82 52 1 + 65 82 53 1 + 65 82 54 1 + 65 82 55 1 + 65 82 56 1 + 65 82 57 1 + 65 82 58 1 + 65 82 59 1 + 65 82 60 1 + 65 82 61 1 + 65 82 62 1 + 65 82 63 1 + 65 82 64 1 + 65 82 65 1 + 65 82 66 1 + 65 82 67 1 + 65 82 68 1 + 65 82 69 1 + 65 82 70 1 + 65 82 71 1 + 65 82 72 1 + 65 82 73 1 + 65 82 74 1 + 65 82 75 1 + 65 82 76 1 + 65 82 77 1 + 65 82 78 1 + 65 82 79 1 + 65 82 80 1 + 65 82 81 0.613886 + 65 82 82 0.00998524 + 65 83 46 0.00382379 + 65 83 47 0.509823 + 65 83 48 0.996238 + 65 83 49 1 + 65 83 50 1 + 65 83 51 1 + 65 83 52 1 + 65 83 53 1 + 65 83 54 1 + 65 83 55 1 + 65 83 56 1 + 65 83 57 1 + 65 83 58 1 + 65 83 59 1 + 65 83 60 1 + 65 83 61 1 + 65 83 62 1 + 65 83 63 1 + 65 83 64 1 + 65 83 65 1 + 65 83 66 1 + 65 83 67 1 + 65 83 68 1 + 65 83 69 1 + 65 83 70 1 + 65 83 71 1 + 65 83 72 1 + 65 83 73 1 + 65 83 74 1 + 65 83 75 1 + 65 83 76 1 + 65 83 77 1 + 65 83 78 1 + 65 83 79 0.996238 + 65 83 80 0.509823 + 65 83 81 0.00382379 + 65 84 48 0.317411 + 65 84 49 0.931908 + 65 84 50 1 + 65 84 51 1 + 65 84 52 1 + 65 84 53 1 + 65 84 54 1 + 65 84 55 1 + 65 84 56 1 + 65 84 57 1 + 65 84 58 1 + 65 84 59 1 + 65 84 60 1 + 65 84 61 1 + 65 84 62 1 + 65 84 63 1 + 65 84 64 1 + 65 84 65 1 + 65 84 66 1 + 65 84 67 1 + 65 84 68 1 + 65 84 69 1 + 65 84 70 1 + 65 84 71 1 + 65 84 72 1 + 65 84 73 1 + 65 84 74 1 + 65 84 75 1 + 65 84 76 1 + 65 84 77 1 + 65 84 78 0.931908 + 65 84 79 0.317411 + 65 85 49 0.10742 + 65 85 50 0.694555 + 65 85 51 0.99983 + 65 85 52 1 + 65 85 53 1 + 65 85 54 1 + 65 85 55 1 + 65 85 56 1 + 65 85 57 1 + 65 85 58 1 + 65 85 59 1 + 65 85 60 1 + 65 85 61 1 + 65 85 62 1 + 65 85 63 1 + 65 85 64 1 + 65 85 65 1 + 65 85 66 1 + 65 85 67 1 + 65 85 68 1 + 65 85 69 1 + 65 85 70 1 + 65 85 71 1 + 65 85 72 1 + 65 85 73 1 + 65 85 74 1 + 65 85 75 1 + 65 85 76 0.99983 + 65 85 77 0.694555 + 65 85 78 0.10742 + 65 86 50 0.000160193 + 65 86 51 0.286191 + 65 86 52 0.813363 + 65 86 53 1 + 65 86 54 1 + 65 86 55 1 + 65 86 56 1 + 65 86 57 1 + 65 86 58 1 + 65 86 59 1 + 65 86 60 1 + 65 86 61 1 + 65 86 62 1 + 65 86 63 1 + 65 86 64 1 + 65 86 65 1 + 65 86 66 1 + 65 86 67 1 + 65 86 68 1 + 65 86 69 1 + 65 86 70 1 + 65 86 71 1 + 65 86 72 1 + 65 86 73 1 + 65 86 74 1 + 65 86 75 0.813363 + 65 86 76 0.286191 + 65 86 77 0.000160193 + 65 87 52 0.00487084 + 65 87 53 0.295408 + 65 87 54 0.720869 + 65 87 55 0.990327 + 65 87 56 1 + 65 87 57 1 + 65 87 58 1 + 65 87 59 1 + 65 87 60 1 + 65 87 61 1 + 65 87 62 1 + 65 87 63 1 + 65 87 64 1 + 65 87 65 1 + 65 87 66 1 + 65 87 67 1 + 65 87 68 1 + 65 87 69 1 + 65 87 70 1 + 65 87 71 1 + 65 87 72 0.990327 + 65 87 73 0.720869 + 65 87 74 0.295408 + 65 87 75 0.00487084 + 65 88 55 0.10703 + 65 88 56 0.42714 + 65 88 57 0.712087 + 65 88 58 0.944047 + 65 88 59 1 + 65 88 60 1 + 65 88 61 1 + 65 88 62 1 + 65 88 63 1 + 65 88 64 1 + 65 88 65 1 + 65 88 66 1 + 65 88 67 1 + 65 88 68 1 + 65 88 69 0.944047 + 65 88 70 0.712087 + 65 88 71 0.42714 + 65 88 72 0.10703 + 65 89 58 0.0096893 + 65 89 59 0.153337 + 65 89 60 0.311883 + 65 89 61 0.430144 + 65 89 62 0.50868 + 65 89 63 0.547857 + 65 89 64 0.547857 + 65 89 65 0.50868 + 65 89 66 0.430144 + 65 89 67 0.311883 + 65 89 68 0.153337 + 65 89 69 0.0096893 + 66 38 58 0.000200097 + 66 38 59 0.0765779 + 66 38 60 0.232735 + 66 38 61 0.351365 + 66 38 62 0.430144 + 66 38 63 0.469442 + 66 38 64 0.469442 + 66 38 65 0.430144 + 66 38 66 0.351365 + 66 38 67 0.232735 + 66 38 68 0.0765779 + 66 38 69 0.000200097 + 66 39 55 0.0529903 + 66 39 56 0.345113 + 66 39 57 0.63101 + 66 39 58 0.873248 + 66 39 59 0.99711 + 66 39 60 1 + 66 39 61 1 + 66 39 62 1 + 66 39 63 1 + 66 39 64 1 + 66 39 65 1 + 66 39 66 1 + 66 39 67 1 + 66 39 68 0.99711 + 66 39 69 0.873248 + 66 39 70 0.63101 + 66 39 71 0.345113 + 66 39 72 0.0529903 + 66 40 52 9.9388e-05 + 66 40 53 0.210787 + 66 40 54 0.63639 + 66 40 55 0.961214 + 66 40 56 1 + 66 40 57 1 + 66 40 58 1 + 66 40 59 1 + 66 40 60 1 + 66 40 61 1 + 66 40 62 1 + 66 40 63 1 + 66 40 64 1 + 66 40 65 1 + 66 40 66 1 + 66 40 67 1 + 66 40 68 1 + 66 40 69 1 + 66 40 70 1 + 66 40 71 1 + 66 40 72 0.961214 + 66 40 73 0.63639 + 66 40 74 0.210787 + 66 40 75 9.9388e-05 + 66 41 51 0.203942 + 66 41 52 0.730298 + 66 41 53 0.998593 + 66 41 54 1 + 66 41 55 1 + 66 41 56 1 + 66 41 57 1 + 66 41 58 1 + 66 41 59 1 + 66 41 60 1 + 66 41 61 1 + 66 41 62 1 + 66 41 63 1 + 66 41 64 1 + 66 41 65 1 + 66 41 66 1 + 66 41 67 1 + 66 41 68 1 + 66 41 69 1 + 66 41 70 1 + 66 41 71 1 + 66 41 72 1 + 66 41 73 1 + 66 41 74 0.998593 + 66 41 75 0.730298 + 66 41 76 0.203942 + 66 42 49 0.061458 + 66 42 50 0.602307 + 66 42 51 0.992135 + 66 42 52 1 + 66 42 53 1 + 66 42 54 1 + 66 42 55 1 + 66 42 56 1 + 66 42 57 1 + 66 42 58 1 + 66 42 59 1 + 66 42 60 1 + 66 42 61 1 + 66 42 62 1 + 66 42 63 1 + 66 42 64 1 + 66 42 65 1 + 66 42 66 1 + 66 42 67 1 + 66 42 68 1 + 66 42 69 1 + 66 42 70 1 + 66 42 71 1 + 66 42 72 1 + 66 42 73 1 + 66 42 74 1 + 66 42 75 1 + 66 42 76 0.992135 + 66 42 77 0.602307 + 66 42 78 0.061458 + 66 43 48 0.234894 + 66 43 49 0.882567 + 66 43 50 1 + 66 43 51 1 + 66 43 52 1 + 66 43 53 1 + 66 43 54 1 + 66 43 55 1 + 66 43 56 1 + 66 43 57 1 + 66 43 58 1 + 66 43 59 1 + 66 43 60 1 + 66 43 61 1 + 66 43 62 1 + 66 43 63 1 + 66 43 64 1 + 66 43 65 1 + 66 43 66 1 + 66 43 67 1 + 66 43 68 1 + 66 43 69 1 + 66 43 70 1 + 66 43 71 1 + 66 43 72 1 + 66 43 73 1 + 66 43 74 1 + 66 43 75 1 + 66 43 76 1 + 66 43 77 1 + 66 43 78 0.882567 + 66 43 79 0.234894 + 66 44 46 7.7901e-05 + 66 44 47 0.408101 + 66 44 48 0.980027 + 66 44 49 1 + 66 44 50 1 + 66 44 51 1 + 66 44 52 1 + 66 44 53 1 + 66 44 54 1 + 66 44 55 1 + 66 44 56 1 + 66 44 57 1 + 66 44 58 1 + 66 44 59 1 + 66 44 60 1 + 66 44 61 1 + 66 44 62 1 + 66 44 63 1 + 66 44 64 1 + 66 44 65 1 + 66 44 66 1 + 66 44 67 1 + 66 44 68 1 + 66 44 69 1 + 66 44 70 1 + 66 44 71 1 + 66 44 72 1 + 66 44 73 1 + 66 44 74 1 + 66 44 75 1 + 66 44 76 1 + 66 44 77 1 + 66 44 78 1 + 66 44 79 0.980027 + 66 44 80 0.408101 + 66 44 81 7.7901e-05 + 66 45 45 0.0011128 + 66 45 46 0.509943 + 66 45 47 0.9989 + 66 45 48 1 + 66 45 49 1 + 66 45 50 1 + 66 45 51 1 + 66 45 52 1 + 66 45 53 1 + 66 45 54 1 + 66 45 55 1 + 66 45 56 1 + 66 45 57 1 + 66 45 58 1 + 66 45 59 1 + 66 45 60 1 + 66 45 61 1 + 66 45 62 1 + 66 45 63 1 + 66 45 64 1 + 66 45 65 1 + 66 45 66 1 + 66 45 67 1 + 66 45 68 1 + 66 45 69 1 + 66 45 70 1 + 66 45 71 1 + 66 45 72 1 + 66 45 73 1 + 66 45 74 1 + 66 45 75 1 + 66 45 76 1 + 66 45 77 1 + 66 45 78 1 + 66 45 79 1 + 66 45 80 0.9989 + 66 45 81 0.509943 + 66 45 82 0.0011128 + 66 46 44 7.7901e-05 + 66 46 45 0.509943 + 66 46 46 0.999903 + 66 46 47 1 + 66 46 48 1 + 66 46 49 1 + 66 46 50 1 + 66 46 51 1 + 66 46 52 1 + 66 46 53 1 + 66 46 54 1 + 66 46 55 1 + 66 46 56 1 + 66 46 57 1 + 66 46 58 1 + 66 46 59 1 + 66 46 60 1 + 66 46 61 1 + 66 46 62 1 + 66 46 63 1 + 66 46 64 1 + 66 46 65 1 + 66 46 66 1 + 66 46 67 1 + 66 46 68 1 + 66 46 69 1 + 66 46 70 1 + 66 46 71 1 + 66 46 72 1 + 66 46 73 1 + 66 46 74 1 + 66 46 75 1 + 66 46 76 1 + 66 46 77 1 + 66 46 78 1 + 66 46 79 1 + 66 46 80 1 + 66 46 81 0.999903 + 66 46 82 0.509943 + 66 46 83 7.7901e-05 + 66 47 44 0.408101 + 66 47 45 0.9989 + 66 47 46 1 + 66 47 47 1 + 66 47 48 1 + 66 47 49 1 + 66 47 50 1 + 66 47 51 1 + 66 47 52 1 + 66 47 53 1 + 66 47 54 1 + 66 47 55 1 + 66 47 56 1 + 66 47 57 1 + 66 47 58 1 + 66 47 59 1 + 66 47 60 1 + 66 47 61 1 + 66 47 62 1 + 66 47 63 1 + 66 47 64 1 + 66 47 65 1 + 66 47 66 1 + 66 47 67 1 + 66 47 68 1 + 66 47 69 1 + 66 47 70 1 + 66 47 71 1 + 66 47 72 1 + 66 47 73 1 + 66 47 74 1 + 66 47 75 1 + 66 47 76 1 + 66 47 77 1 + 66 47 78 1 + 66 47 79 1 + 66 47 80 1 + 66 47 81 1 + 66 47 82 0.9989 + 66 47 83 0.408101 + 66 48 43 0.234894 + 66 48 44 0.980027 + 66 48 45 1 + 66 48 46 1 + 66 48 47 1 + 66 48 48 1 + 66 48 49 1 + 66 48 50 1 + 66 48 51 1 + 66 48 52 1 + 66 48 53 1 + 66 48 54 1 + 66 48 55 1 + 66 48 56 1 + 66 48 57 1 + 66 48 58 1 + 66 48 59 1 + 66 48 60 1 + 66 48 61 1 + 66 48 62 1 + 66 48 63 1 + 66 48 64 1 + 66 48 65 1 + 66 48 66 1 + 66 48 67 1 + 66 48 68 1 + 66 48 69 1 + 66 48 70 1 + 66 48 71 1 + 66 48 72 1 + 66 48 73 1 + 66 48 74 1 + 66 48 75 1 + 66 48 76 1 + 66 48 77 1 + 66 48 78 1 + 66 48 79 1 + 66 48 80 1 + 66 48 81 1 + 66 48 82 1 + 66 48 83 0.980027 + 66 48 84 0.234894 + 66 49 42 0.061458 + 66 49 43 0.882567 + 66 49 44 1 + 66 49 45 1 + 66 49 46 1 + 66 49 47 1 + 66 49 48 1 + 66 49 49 1 + 66 49 50 1 + 66 49 51 1 + 66 49 52 1 + 66 49 53 1 + 66 49 54 1 + 66 49 55 1 + 66 49 56 1 + 66 49 57 1 + 66 49 58 1 + 66 49 59 1 + 66 49 60 1 + 66 49 61 1 + 66 49 62 1 + 66 49 63 1 + 66 49 64 1 + 66 49 65 1 + 66 49 66 1 + 66 49 67 1 + 66 49 68 1 + 66 49 69 1 + 66 49 70 1 + 66 49 71 1 + 66 49 72 1 + 66 49 73 1 + 66 49 74 1 + 66 49 75 1 + 66 49 76 1 + 66 49 77 1 + 66 49 78 1 + 66 49 79 1 + 66 49 80 1 + 66 49 81 1 + 66 49 82 1 + 66 49 83 1 + 66 49 84 0.882567 + 66 49 85 0.061458 + 66 50 42 0.602307 + 66 50 43 1 + 66 50 44 1 + 66 50 45 1 + 66 50 46 1 + 66 50 47 1 + 66 50 48 1 + 66 50 49 1 + 66 50 50 1 + 66 50 51 1 + 66 50 52 1 + 66 50 53 1 + 66 50 54 1 + 66 50 55 1 + 66 50 56 1 + 66 50 57 1 + 66 50 58 1 + 66 50 59 1 + 66 50 60 1 + 66 50 61 1 + 66 50 62 1 + 66 50 63 1 + 66 50 64 1 + 66 50 65 1 + 66 50 66 1 + 66 50 67 1 + 66 50 68 1 + 66 50 69 1 + 66 50 70 1 + 66 50 71 1 + 66 50 72 1 + 66 50 73 1 + 66 50 74 1 + 66 50 75 1 + 66 50 76 1 + 66 50 77 1 + 66 50 78 1 + 66 50 79 1 + 66 50 80 1 + 66 50 81 1 + 66 50 82 1 + 66 50 83 1 + 66 50 84 1 + 66 50 85 0.602307 + 66 51 41 0.203942 + 66 51 42 0.992135 + 66 51 43 1 + 66 51 44 1 + 66 51 45 1 + 66 51 46 1 + 66 51 47 1 + 66 51 48 1 + 66 51 49 1 + 66 51 50 1 + 66 51 51 1 + 66 51 52 1 + 66 51 53 1 + 66 51 54 1 + 66 51 55 1 + 66 51 56 1 + 66 51 57 1 + 66 51 58 1 + 66 51 59 1 + 66 51 60 1 + 66 51 61 1 + 66 51 62 1 + 66 51 63 1 + 66 51 64 1 + 66 51 65 1 + 66 51 66 1 + 66 51 67 1 + 66 51 68 1 + 66 51 69 1 + 66 51 70 1 + 66 51 71 1 + 66 51 72 1 + 66 51 73 1 + 66 51 74 1 + 66 51 75 1 + 66 51 76 1 + 66 51 77 1 + 66 51 78 1 + 66 51 79 1 + 66 51 80 1 + 66 51 81 1 + 66 51 82 1 + 66 51 83 1 + 66 51 84 1 + 66 51 85 0.992135 + 66 51 86 0.203942 + 66 52 40 9.9388e-05 + 66 52 41 0.730298 + 66 52 42 1 + 66 52 43 1 + 66 52 44 1 + 66 52 45 1 + 66 52 46 1 + 66 52 47 1 + 66 52 48 1 + 66 52 49 1 + 66 52 50 1 + 66 52 51 1 + 66 52 52 1 + 66 52 53 1 + 66 52 54 1 + 66 52 55 1 + 66 52 56 1 + 66 52 57 1 + 66 52 58 1 + 66 52 59 1 + 66 52 60 1 + 66 52 61 1 + 66 52 62 1 + 66 52 63 1 + 66 52 64 1 + 66 52 65 1 + 66 52 66 1 + 66 52 67 1 + 66 52 68 1 + 66 52 69 1 + 66 52 70 1 + 66 52 71 1 + 66 52 72 1 + 66 52 73 1 + 66 52 74 1 + 66 52 75 1 + 66 52 76 1 + 66 52 77 1 + 66 52 78 1 + 66 52 79 1 + 66 52 80 1 + 66 52 81 1 + 66 52 82 1 + 66 52 83 1 + 66 52 84 1 + 66 52 85 1 + 66 52 86 0.730298 + 66 52 87 9.9388e-05 + 66 53 40 0.210787 + 66 53 41 0.998593 + 66 53 42 1 + 66 53 43 1 + 66 53 44 1 + 66 53 45 1 + 66 53 46 1 + 66 53 47 1 + 66 53 48 1 + 66 53 49 1 + 66 53 50 1 + 66 53 51 1 + 66 53 52 1 + 66 53 53 1 + 66 53 54 1 + 66 53 55 1 + 66 53 56 1 + 66 53 57 1 + 66 53 58 1 + 66 53 59 1 + 66 53 60 1 + 66 53 61 1 + 66 53 62 1 + 66 53 63 1 + 66 53 64 1 + 66 53 65 1 + 66 53 66 1 + 66 53 67 1 + 66 53 68 1 + 66 53 69 1 + 66 53 70 1 + 66 53 71 1 + 66 53 72 1 + 66 53 73 1 + 66 53 74 1 + 66 53 75 1 + 66 53 76 1 + 66 53 77 1 + 66 53 78 1 + 66 53 79 1 + 66 53 80 1 + 66 53 81 1 + 66 53 82 1 + 66 53 83 1 + 66 53 84 1 + 66 53 85 1 + 66 53 86 0.998593 + 66 53 87 0.210787 + 66 54 40 0.63639 + 66 54 41 1 + 66 54 42 1 + 66 54 43 1 + 66 54 44 1 + 66 54 45 1 + 66 54 46 1 + 66 54 47 1 + 66 54 48 1 + 66 54 49 1 + 66 54 50 1 + 66 54 51 1 + 66 54 52 1 + 66 54 53 1 + 66 54 54 1 + 66 54 55 1 + 66 54 56 1 + 66 54 57 1 + 66 54 58 1 + 66 54 59 1 + 66 54 60 1 + 66 54 61 1 + 66 54 62 1 + 66 54 63 1 + 66 54 64 1 + 66 54 65 1 + 66 54 66 1 + 66 54 67 1 + 66 54 68 1 + 66 54 69 1 + 66 54 70 1 + 66 54 71 1 + 66 54 72 1 + 66 54 73 1 + 66 54 74 1 + 66 54 75 1 + 66 54 76 1 + 66 54 77 1 + 66 54 78 1 + 66 54 79 1 + 66 54 80 1 + 66 54 81 1 + 66 54 82 1 + 66 54 83 1 + 66 54 84 1 + 66 54 85 1 + 66 54 86 1 + 66 54 87 0.63639 + 66 55 39 0.0529903 + 66 55 40 0.961214 + 66 55 41 1 + 66 55 42 1 + 66 55 43 1 + 66 55 44 1 + 66 55 45 1 + 66 55 46 1 + 66 55 47 1 + 66 55 48 1 + 66 55 49 1 + 66 55 50 1 + 66 55 51 1 + 66 55 52 1 + 66 55 53 1 + 66 55 54 1 + 66 55 55 1 + 66 55 56 1 + 66 55 57 1 + 66 55 58 1 + 66 55 59 1 + 66 55 60 1 + 66 55 61 1 + 66 55 62 1 + 66 55 63 1 + 66 55 64 1 + 66 55 65 1 + 66 55 66 1 + 66 55 67 1 + 66 55 68 1 + 66 55 69 1 + 66 55 70 1 + 66 55 71 1 + 66 55 72 1 + 66 55 73 1 + 66 55 74 1 + 66 55 75 1 + 66 55 76 1 + 66 55 77 1 + 66 55 78 1 + 66 55 79 1 + 66 55 80 1 + 66 55 81 1 + 66 55 82 1 + 66 55 83 1 + 66 55 84 1 + 66 55 85 1 + 66 55 86 1 + 66 55 87 0.961214 + 66 55 88 0.0529903 + 66 56 39 0.345113 + 66 56 40 1 + 66 56 41 1 + 66 56 42 1 + 66 56 43 1 + 66 56 44 1 + 66 56 45 1 + 66 56 46 1 + 66 56 47 1 + 66 56 48 1 + 66 56 49 1 + 66 56 50 1 + 66 56 51 1 + 66 56 52 1 + 66 56 53 1 + 66 56 54 1 + 66 56 55 1 + 66 56 56 1 + 66 56 57 1 + 66 56 58 1 + 66 56 59 1 + 66 56 60 1 + 66 56 61 1 + 66 56 62 1 + 66 56 63 1 + 66 56 64 1 + 66 56 65 1 + 66 56 66 1 + 66 56 67 1 + 66 56 68 1 + 66 56 69 1 + 66 56 70 1 + 66 56 71 1 + 66 56 72 1 + 66 56 73 1 + 66 56 74 1 + 66 56 75 1 + 66 56 76 1 + 66 56 77 1 + 66 56 78 1 + 66 56 79 1 + 66 56 80 1 + 66 56 81 1 + 66 56 82 1 + 66 56 83 1 + 66 56 84 1 + 66 56 85 1 + 66 56 86 1 + 66 56 87 1 + 66 56 88 0.345113 + 66 57 39 0.63101 + 66 57 40 1 + 66 57 41 1 + 66 57 42 1 + 66 57 43 1 + 66 57 44 1 + 66 57 45 1 + 66 57 46 1 + 66 57 47 1 + 66 57 48 1 + 66 57 49 1 + 66 57 50 1 + 66 57 51 1 + 66 57 52 1 + 66 57 53 1 + 66 57 54 1 + 66 57 55 1 + 66 57 56 1 + 66 57 57 1 + 66 57 58 1 + 66 57 59 1 + 66 57 60 1 + 66 57 61 1 + 66 57 62 1 + 66 57 63 1 + 66 57 64 1 + 66 57 65 1 + 66 57 66 1 + 66 57 67 1 + 66 57 68 1 + 66 57 69 1 + 66 57 70 1 + 66 57 71 1 + 66 57 72 1 + 66 57 73 1 + 66 57 74 1 + 66 57 75 1 + 66 57 76 1 + 66 57 77 1 + 66 57 78 1 + 66 57 79 1 + 66 57 80 1 + 66 57 81 1 + 66 57 82 1 + 66 57 83 1 + 66 57 84 1 + 66 57 85 1 + 66 57 86 1 + 66 57 87 1 + 66 57 88 0.63101 + 66 58 38 0.000200097 + 66 58 39 0.873248 + 66 58 40 1 + 66 58 41 1 + 66 58 42 1 + 66 58 43 1 + 66 58 44 1 + 66 58 45 1 + 66 58 46 1 + 66 58 47 1 + 66 58 48 1 + 66 58 49 1 + 66 58 50 1 + 66 58 51 1 + 66 58 52 1 + 66 58 53 1 + 66 58 54 1 + 66 58 55 1 + 66 58 56 1 + 66 58 57 1 + 66 58 58 1 + 66 58 59 1 + 66 58 60 1 + 66 58 61 1 + 66 58 62 1 + 66 58 63 1 + 66 58 64 1 + 66 58 65 1 + 66 58 66 1 + 66 58 67 1 + 66 58 68 1 + 66 58 69 1 + 66 58 70 1 + 66 58 71 1 + 66 58 72 1 + 66 58 73 1 + 66 58 74 1 + 66 58 75 1 + 66 58 76 1 + 66 58 77 1 + 66 58 78 1 + 66 58 79 1 + 66 58 80 1 + 66 58 81 1 + 66 58 82 1 + 66 58 83 1 + 66 58 84 1 + 66 58 85 1 + 66 58 86 1 + 66 58 87 1 + 66 58 88 0.873248 + 66 58 89 0.000200097 + 66 59 38 0.0765779 + 66 59 39 0.99711 + 66 59 40 1 + 66 59 41 1 + 66 59 42 1 + 66 59 43 1 + 66 59 44 1 + 66 59 45 1 + 66 59 46 1 + 66 59 47 1 + 66 59 48 1 + 66 59 49 1 + 66 59 50 1 + 66 59 51 1 + 66 59 52 1 + 66 59 53 1 + 66 59 54 1 + 66 59 55 1 + 66 59 56 1 + 66 59 57 1 + 66 59 58 1 + 66 59 59 1 + 66 59 60 1 + 66 59 61 1 + 66 59 62 1 + 66 59 63 1 + 66 59 64 1 + 66 59 65 1 + 66 59 66 1 + 66 59 67 1 + 66 59 68 1 + 66 59 69 1 + 66 59 70 1 + 66 59 71 1 + 66 59 72 1 + 66 59 73 1 + 66 59 74 1 + 66 59 75 1 + 66 59 76 1 + 66 59 77 1 + 66 59 78 1 + 66 59 79 1 + 66 59 80 1 + 66 59 81 1 + 66 59 82 1 + 66 59 83 1 + 66 59 84 1 + 66 59 85 1 + 66 59 86 1 + 66 59 87 1 + 66 59 88 0.99711 + 66 59 89 0.0765779 + 66 60 38 0.232735 + 66 60 39 1 + 66 60 40 1 + 66 60 41 1 + 66 60 42 1 + 66 60 43 1 + 66 60 44 1 + 66 60 45 1 + 66 60 46 1 + 66 60 47 1 + 66 60 48 1 + 66 60 49 1 + 66 60 50 1 + 66 60 51 1 + 66 60 52 1 + 66 60 53 1 + 66 60 54 1 + 66 60 55 1 + 66 60 56 1 + 66 60 57 1 + 66 60 58 1 + 66 60 59 1 + 66 60 60 1 + 66 60 61 1 + 66 60 62 1 + 66 60 63 1 + 66 60 64 1 + 66 60 65 1 + 66 60 66 1 + 66 60 67 1 + 66 60 68 1 + 66 60 69 1 + 66 60 70 1 + 66 60 71 1 + 66 60 72 1 + 66 60 73 1 + 66 60 74 1 + 66 60 75 1 + 66 60 76 1 + 66 60 77 1 + 66 60 78 1 + 66 60 79 1 + 66 60 80 1 + 66 60 81 1 + 66 60 82 1 + 66 60 83 1 + 66 60 84 1 + 66 60 85 1 + 66 60 86 1 + 66 60 87 1 + 66 60 88 1 + 66 60 89 0.232735 + 66 61 38 0.351365 + 66 61 39 1 + 66 61 40 1 + 66 61 41 1 + 66 61 42 1 + 66 61 43 1 + 66 61 44 1 + 66 61 45 1 + 66 61 46 1 + 66 61 47 1 + 66 61 48 1 + 66 61 49 1 + 66 61 50 1 + 66 61 51 1 + 66 61 52 1 + 66 61 53 1 + 66 61 54 1 + 66 61 55 1 + 66 61 56 1 + 66 61 57 1 + 66 61 58 1 + 66 61 59 1 + 66 61 60 1 + 66 61 61 1 + 66 61 62 1 + 66 61 63 1 + 66 61 64 1 + 66 61 65 1 + 66 61 66 1 + 66 61 67 1 + 66 61 68 1 + 66 61 69 1 + 66 61 70 1 + 66 61 71 1 + 66 61 72 1 + 66 61 73 1 + 66 61 74 1 + 66 61 75 1 + 66 61 76 1 + 66 61 77 1 + 66 61 78 1 + 66 61 79 1 + 66 61 80 1 + 66 61 81 1 + 66 61 82 1 + 66 61 83 1 + 66 61 84 1 + 66 61 85 1 + 66 61 86 1 + 66 61 87 1 + 66 61 88 1 + 66 61 89 0.351365 + 66 62 38 0.430144 + 66 62 39 1 + 66 62 40 1 + 66 62 41 1 + 66 62 42 1 + 66 62 43 1 + 66 62 44 1 + 66 62 45 1 + 66 62 46 1 + 66 62 47 1 + 66 62 48 1 + 66 62 49 1 + 66 62 50 1 + 66 62 51 1 + 66 62 52 1 + 66 62 53 1 + 66 62 54 1 + 66 62 55 1 + 66 62 56 1 + 66 62 57 1 + 66 62 58 1 + 66 62 59 1 + 66 62 60 1 + 66 62 61 1 + 66 62 62 1 + 66 62 63 1 + 66 62 64 1 + 66 62 65 1 + 66 62 66 1 + 66 62 67 1 + 66 62 68 1 + 66 62 69 1 + 66 62 70 1 + 66 62 71 1 + 66 62 72 1 + 66 62 73 1 + 66 62 74 1 + 66 62 75 1 + 66 62 76 1 + 66 62 77 1 + 66 62 78 1 + 66 62 79 1 + 66 62 80 1 + 66 62 81 1 + 66 62 82 1 + 66 62 83 1 + 66 62 84 1 + 66 62 85 1 + 66 62 86 1 + 66 62 87 1 + 66 62 88 1 + 66 62 89 0.430144 + 66 63 38 0.469442 + 66 63 39 1 + 66 63 40 1 + 66 63 41 1 + 66 63 42 1 + 66 63 43 1 + 66 63 44 1 + 66 63 45 1 + 66 63 46 1 + 66 63 47 1 + 66 63 48 1 + 66 63 49 1 + 66 63 50 1 + 66 63 51 1 + 66 63 52 1 + 66 63 53 1 + 66 63 54 1 + 66 63 55 1 + 66 63 56 1 + 66 63 57 1 + 66 63 58 1 + 66 63 59 1 + 66 63 60 1 + 66 63 61 1 + 66 63 62 1 + 66 63 63 1 + 66 63 64 1 + 66 63 65 1 + 66 63 66 1 + 66 63 67 1 + 66 63 68 1 + 66 63 69 1 + 66 63 70 1 + 66 63 71 1 + 66 63 72 1 + 66 63 73 1 + 66 63 74 1 + 66 63 75 1 + 66 63 76 1 + 66 63 77 1 + 66 63 78 1 + 66 63 79 1 + 66 63 80 1 + 66 63 81 1 + 66 63 82 1 + 66 63 83 1 + 66 63 84 1 + 66 63 85 1 + 66 63 86 1 + 66 63 87 1 + 66 63 88 1 + 66 63 89 0.469442 + 66 64 38 0.469442 + 66 64 39 1 + 66 64 40 1 + 66 64 41 1 + 66 64 42 1 + 66 64 43 1 + 66 64 44 1 + 66 64 45 1 + 66 64 46 1 + 66 64 47 1 + 66 64 48 1 + 66 64 49 1 + 66 64 50 1 + 66 64 51 1 + 66 64 52 1 + 66 64 53 1 + 66 64 54 1 + 66 64 55 1 + 66 64 56 1 + 66 64 57 1 + 66 64 58 1 + 66 64 59 1 + 66 64 60 1 + 66 64 61 1 + 66 64 62 1 + 66 64 63 1 + 66 64 64 1 + 66 64 65 1 + 66 64 66 1 + 66 64 67 1 + 66 64 68 1 + 66 64 69 1 + 66 64 70 1 + 66 64 71 1 + 66 64 72 1 + 66 64 73 1 + 66 64 74 1 + 66 64 75 1 + 66 64 76 1 + 66 64 77 1 + 66 64 78 1 + 66 64 79 1 + 66 64 80 1 + 66 64 81 1 + 66 64 82 1 + 66 64 83 1 + 66 64 84 1 + 66 64 85 1 + 66 64 86 1 + 66 64 87 1 + 66 64 88 1 + 66 64 89 0.469442 + 66 65 38 0.430144 + 66 65 39 1 + 66 65 40 1 + 66 65 41 1 + 66 65 42 1 + 66 65 43 1 + 66 65 44 1 + 66 65 45 1 + 66 65 46 1 + 66 65 47 1 + 66 65 48 1 + 66 65 49 1 + 66 65 50 1 + 66 65 51 1 + 66 65 52 1 + 66 65 53 1 + 66 65 54 1 + 66 65 55 1 + 66 65 56 1 + 66 65 57 1 + 66 65 58 1 + 66 65 59 1 + 66 65 60 1 + 66 65 61 1 + 66 65 62 1 + 66 65 63 1 + 66 65 64 1 + 66 65 65 1 + 66 65 66 1 + 66 65 67 1 + 66 65 68 1 + 66 65 69 1 + 66 65 70 1 + 66 65 71 1 + 66 65 72 1 + 66 65 73 1 + 66 65 74 1 + 66 65 75 1 + 66 65 76 1 + 66 65 77 1 + 66 65 78 1 + 66 65 79 1 + 66 65 80 1 + 66 65 81 1 + 66 65 82 1 + 66 65 83 1 + 66 65 84 1 + 66 65 85 1 + 66 65 86 1 + 66 65 87 1 + 66 65 88 1 + 66 65 89 0.430144 + 66 66 38 0.351365 + 66 66 39 1 + 66 66 40 1 + 66 66 41 1 + 66 66 42 1 + 66 66 43 1 + 66 66 44 1 + 66 66 45 1 + 66 66 46 1 + 66 66 47 1 + 66 66 48 1 + 66 66 49 1 + 66 66 50 1 + 66 66 51 1 + 66 66 52 1 + 66 66 53 1 + 66 66 54 1 + 66 66 55 1 + 66 66 56 1 + 66 66 57 1 + 66 66 58 1 + 66 66 59 1 + 66 66 60 1 + 66 66 61 1 + 66 66 62 1 + 66 66 63 1 + 66 66 64 1 + 66 66 65 1 + 66 66 66 1 + 66 66 67 1 + 66 66 68 1 + 66 66 69 1 + 66 66 70 1 + 66 66 71 1 + 66 66 72 1 + 66 66 73 1 + 66 66 74 1 + 66 66 75 1 + 66 66 76 1 + 66 66 77 1 + 66 66 78 1 + 66 66 79 1 + 66 66 80 1 + 66 66 81 1 + 66 66 82 1 + 66 66 83 1 + 66 66 84 1 + 66 66 85 1 + 66 66 86 1 + 66 66 87 1 + 66 66 88 1 + 66 66 89 0.351365 + 66 67 38 0.232735 + 66 67 39 1 + 66 67 40 1 + 66 67 41 1 + 66 67 42 1 + 66 67 43 1 + 66 67 44 1 + 66 67 45 1 + 66 67 46 1 + 66 67 47 1 + 66 67 48 1 + 66 67 49 1 + 66 67 50 1 + 66 67 51 1 + 66 67 52 1 + 66 67 53 1 + 66 67 54 1 + 66 67 55 1 + 66 67 56 1 + 66 67 57 1 + 66 67 58 1 + 66 67 59 1 + 66 67 60 1 + 66 67 61 1 + 66 67 62 1 + 66 67 63 1 + 66 67 64 1 + 66 67 65 1 + 66 67 66 1 + 66 67 67 1 + 66 67 68 1 + 66 67 69 1 + 66 67 70 1 + 66 67 71 1 + 66 67 72 1 + 66 67 73 1 + 66 67 74 1 + 66 67 75 1 + 66 67 76 1 + 66 67 77 1 + 66 67 78 1 + 66 67 79 1 + 66 67 80 1 + 66 67 81 1 + 66 67 82 1 + 66 67 83 1 + 66 67 84 1 + 66 67 85 1 + 66 67 86 1 + 66 67 87 1 + 66 67 88 1 + 66 67 89 0.232735 + 66 68 38 0.0765779 + 66 68 39 0.99711 + 66 68 40 1 + 66 68 41 1 + 66 68 42 1 + 66 68 43 1 + 66 68 44 1 + 66 68 45 1 + 66 68 46 1 + 66 68 47 1 + 66 68 48 1 + 66 68 49 1 + 66 68 50 1 + 66 68 51 1 + 66 68 52 1 + 66 68 53 1 + 66 68 54 1 + 66 68 55 1 + 66 68 56 1 + 66 68 57 1 + 66 68 58 1 + 66 68 59 1 + 66 68 60 1 + 66 68 61 1 + 66 68 62 1 + 66 68 63 1 + 66 68 64 1 + 66 68 65 1 + 66 68 66 1 + 66 68 67 1 + 66 68 68 1 + 66 68 69 1 + 66 68 70 1 + 66 68 71 1 + 66 68 72 1 + 66 68 73 1 + 66 68 74 1 + 66 68 75 1 + 66 68 76 1 + 66 68 77 1 + 66 68 78 1 + 66 68 79 1 + 66 68 80 1 + 66 68 81 1 + 66 68 82 1 + 66 68 83 1 + 66 68 84 1 + 66 68 85 1 + 66 68 86 1 + 66 68 87 1 + 66 68 88 0.99711 + 66 68 89 0.0765779 + 66 69 38 0.000200097 + 66 69 39 0.873248 + 66 69 40 1 + 66 69 41 1 + 66 69 42 1 + 66 69 43 1 + 66 69 44 1 + 66 69 45 1 + 66 69 46 1 + 66 69 47 1 + 66 69 48 1 + 66 69 49 1 + 66 69 50 1 + 66 69 51 1 + 66 69 52 1 + 66 69 53 1 + 66 69 54 1 + 66 69 55 1 + 66 69 56 1 + 66 69 57 1 + 66 69 58 1 + 66 69 59 1 + 66 69 60 1 + 66 69 61 1 + 66 69 62 1 + 66 69 63 1 + 66 69 64 1 + 66 69 65 1 + 66 69 66 1 + 66 69 67 1 + 66 69 68 1 + 66 69 69 1 + 66 69 70 1 + 66 69 71 1 + 66 69 72 1 + 66 69 73 1 + 66 69 74 1 + 66 69 75 1 + 66 69 76 1 + 66 69 77 1 + 66 69 78 1 + 66 69 79 1 + 66 69 80 1 + 66 69 81 1 + 66 69 82 1 + 66 69 83 1 + 66 69 84 1 + 66 69 85 1 + 66 69 86 1 + 66 69 87 1 + 66 69 88 0.873248 + 66 69 89 0.000200097 + 66 70 39 0.63101 + 66 70 40 1 + 66 70 41 1 + 66 70 42 1 + 66 70 43 1 + 66 70 44 1 + 66 70 45 1 + 66 70 46 1 + 66 70 47 1 + 66 70 48 1 + 66 70 49 1 + 66 70 50 1 + 66 70 51 1 + 66 70 52 1 + 66 70 53 1 + 66 70 54 1 + 66 70 55 1 + 66 70 56 1 + 66 70 57 1 + 66 70 58 1 + 66 70 59 1 + 66 70 60 1 + 66 70 61 1 + 66 70 62 1 + 66 70 63 1 + 66 70 64 1 + 66 70 65 1 + 66 70 66 1 + 66 70 67 1 + 66 70 68 1 + 66 70 69 1 + 66 70 70 1 + 66 70 71 1 + 66 70 72 1 + 66 70 73 1 + 66 70 74 1 + 66 70 75 1 + 66 70 76 1 + 66 70 77 1 + 66 70 78 1 + 66 70 79 1 + 66 70 80 1 + 66 70 81 1 + 66 70 82 1 + 66 70 83 1 + 66 70 84 1 + 66 70 85 1 + 66 70 86 1 + 66 70 87 1 + 66 70 88 0.63101 + 66 71 39 0.345113 + 66 71 40 1 + 66 71 41 1 + 66 71 42 1 + 66 71 43 1 + 66 71 44 1 + 66 71 45 1 + 66 71 46 1 + 66 71 47 1 + 66 71 48 1 + 66 71 49 1 + 66 71 50 1 + 66 71 51 1 + 66 71 52 1 + 66 71 53 1 + 66 71 54 1 + 66 71 55 1 + 66 71 56 1 + 66 71 57 1 + 66 71 58 1 + 66 71 59 1 + 66 71 60 1 + 66 71 61 1 + 66 71 62 1 + 66 71 63 1 + 66 71 64 1 + 66 71 65 1 + 66 71 66 1 + 66 71 67 1 + 66 71 68 1 + 66 71 69 1 + 66 71 70 1 + 66 71 71 1 + 66 71 72 1 + 66 71 73 1 + 66 71 74 1 + 66 71 75 1 + 66 71 76 1 + 66 71 77 1 + 66 71 78 1 + 66 71 79 1 + 66 71 80 1 + 66 71 81 1 + 66 71 82 1 + 66 71 83 1 + 66 71 84 1 + 66 71 85 1 + 66 71 86 1 + 66 71 87 1 + 66 71 88 0.345113 + 66 72 39 0.0529903 + 66 72 40 0.961214 + 66 72 41 1 + 66 72 42 1 + 66 72 43 1 + 66 72 44 1 + 66 72 45 1 + 66 72 46 1 + 66 72 47 1 + 66 72 48 1 + 66 72 49 1 + 66 72 50 1 + 66 72 51 1 + 66 72 52 1 + 66 72 53 1 + 66 72 54 1 + 66 72 55 1 + 66 72 56 1 + 66 72 57 1 + 66 72 58 1 + 66 72 59 1 + 66 72 60 1 + 66 72 61 1 + 66 72 62 1 + 66 72 63 1 + 66 72 64 1 + 66 72 65 1 + 66 72 66 1 + 66 72 67 1 + 66 72 68 1 + 66 72 69 1 + 66 72 70 1 + 66 72 71 1 + 66 72 72 1 + 66 72 73 1 + 66 72 74 1 + 66 72 75 1 + 66 72 76 1 + 66 72 77 1 + 66 72 78 1 + 66 72 79 1 + 66 72 80 1 + 66 72 81 1 + 66 72 82 1 + 66 72 83 1 + 66 72 84 1 + 66 72 85 1 + 66 72 86 1 + 66 72 87 0.961214 + 66 72 88 0.0529903 + 66 73 40 0.63639 + 66 73 41 1 + 66 73 42 1 + 66 73 43 1 + 66 73 44 1 + 66 73 45 1 + 66 73 46 1 + 66 73 47 1 + 66 73 48 1 + 66 73 49 1 + 66 73 50 1 + 66 73 51 1 + 66 73 52 1 + 66 73 53 1 + 66 73 54 1 + 66 73 55 1 + 66 73 56 1 + 66 73 57 1 + 66 73 58 1 + 66 73 59 1 + 66 73 60 1 + 66 73 61 1 + 66 73 62 1 + 66 73 63 1 + 66 73 64 1 + 66 73 65 1 + 66 73 66 1 + 66 73 67 1 + 66 73 68 1 + 66 73 69 1 + 66 73 70 1 + 66 73 71 1 + 66 73 72 1 + 66 73 73 1 + 66 73 74 1 + 66 73 75 1 + 66 73 76 1 + 66 73 77 1 + 66 73 78 1 + 66 73 79 1 + 66 73 80 1 + 66 73 81 1 + 66 73 82 1 + 66 73 83 1 + 66 73 84 1 + 66 73 85 1 + 66 73 86 1 + 66 73 87 0.63639 + 66 74 40 0.210787 + 66 74 41 0.998593 + 66 74 42 1 + 66 74 43 1 + 66 74 44 1 + 66 74 45 1 + 66 74 46 1 + 66 74 47 1 + 66 74 48 1 + 66 74 49 1 + 66 74 50 1 + 66 74 51 1 + 66 74 52 1 + 66 74 53 1 + 66 74 54 1 + 66 74 55 1 + 66 74 56 1 + 66 74 57 1 + 66 74 58 1 + 66 74 59 1 + 66 74 60 1 + 66 74 61 1 + 66 74 62 1 + 66 74 63 1 + 66 74 64 1 + 66 74 65 1 + 66 74 66 1 + 66 74 67 1 + 66 74 68 1 + 66 74 69 1 + 66 74 70 1 + 66 74 71 1 + 66 74 72 1 + 66 74 73 1 + 66 74 74 1 + 66 74 75 1 + 66 74 76 1 + 66 74 77 1 + 66 74 78 1 + 66 74 79 1 + 66 74 80 1 + 66 74 81 1 + 66 74 82 1 + 66 74 83 1 + 66 74 84 1 + 66 74 85 1 + 66 74 86 0.998593 + 66 74 87 0.210787 + 66 75 40 9.9388e-05 + 66 75 41 0.730298 + 66 75 42 1 + 66 75 43 1 + 66 75 44 1 + 66 75 45 1 + 66 75 46 1 + 66 75 47 1 + 66 75 48 1 + 66 75 49 1 + 66 75 50 1 + 66 75 51 1 + 66 75 52 1 + 66 75 53 1 + 66 75 54 1 + 66 75 55 1 + 66 75 56 1 + 66 75 57 1 + 66 75 58 1 + 66 75 59 1 + 66 75 60 1 + 66 75 61 1 + 66 75 62 1 + 66 75 63 1 + 66 75 64 1 + 66 75 65 1 + 66 75 66 1 + 66 75 67 1 + 66 75 68 1 + 66 75 69 1 + 66 75 70 1 + 66 75 71 1 + 66 75 72 1 + 66 75 73 1 + 66 75 74 1 + 66 75 75 1 + 66 75 76 1 + 66 75 77 1 + 66 75 78 1 + 66 75 79 1 + 66 75 80 1 + 66 75 81 1 + 66 75 82 1 + 66 75 83 1 + 66 75 84 1 + 66 75 85 1 + 66 75 86 0.730298 + 66 75 87 9.9388e-05 + 66 76 41 0.203942 + 66 76 42 0.992135 + 66 76 43 1 + 66 76 44 1 + 66 76 45 1 + 66 76 46 1 + 66 76 47 1 + 66 76 48 1 + 66 76 49 1 + 66 76 50 1 + 66 76 51 1 + 66 76 52 1 + 66 76 53 1 + 66 76 54 1 + 66 76 55 1 + 66 76 56 1 + 66 76 57 1 + 66 76 58 1 + 66 76 59 1 + 66 76 60 1 + 66 76 61 1 + 66 76 62 1 + 66 76 63 1 + 66 76 64 1 + 66 76 65 1 + 66 76 66 1 + 66 76 67 1 + 66 76 68 1 + 66 76 69 1 + 66 76 70 1 + 66 76 71 1 + 66 76 72 1 + 66 76 73 1 + 66 76 74 1 + 66 76 75 1 + 66 76 76 1 + 66 76 77 1 + 66 76 78 1 + 66 76 79 1 + 66 76 80 1 + 66 76 81 1 + 66 76 82 1 + 66 76 83 1 + 66 76 84 1 + 66 76 85 0.992135 + 66 76 86 0.203942 + 66 77 42 0.602307 + 66 77 43 1 + 66 77 44 1 + 66 77 45 1 + 66 77 46 1 + 66 77 47 1 + 66 77 48 1 + 66 77 49 1 + 66 77 50 1 + 66 77 51 1 + 66 77 52 1 + 66 77 53 1 + 66 77 54 1 + 66 77 55 1 + 66 77 56 1 + 66 77 57 1 + 66 77 58 1 + 66 77 59 1 + 66 77 60 1 + 66 77 61 1 + 66 77 62 1 + 66 77 63 1 + 66 77 64 1 + 66 77 65 1 + 66 77 66 1 + 66 77 67 1 + 66 77 68 1 + 66 77 69 1 + 66 77 70 1 + 66 77 71 1 + 66 77 72 1 + 66 77 73 1 + 66 77 74 1 + 66 77 75 1 + 66 77 76 1 + 66 77 77 1 + 66 77 78 1 + 66 77 79 1 + 66 77 80 1 + 66 77 81 1 + 66 77 82 1 + 66 77 83 1 + 66 77 84 1 + 66 77 85 0.602307 + 66 78 42 0.061458 + 66 78 43 0.882567 + 66 78 44 1 + 66 78 45 1 + 66 78 46 1 + 66 78 47 1 + 66 78 48 1 + 66 78 49 1 + 66 78 50 1 + 66 78 51 1 + 66 78 52 1 + 66 78 53 1 + 66 78 54 1 + 66 78 55 1 + 66 78 56 1 + 66 78 57 1 + 66 78 58 1 + 66 78 59 1 + 66 78 60 1 + 66 78 61 1 + 66 78 62 1 + 66 78 63 1 + 66 78 64 1 + 66 78 65 1 + 66 78 66 1 + 66 78 67 1 + 66 78 68 1 + 66 78 69 1 + 66 78 70 1 + 66 78 71 1 + 66 78 72 1 + 66 78 73 1 + 66 78 74 1 + 66 78 75 1 + 66 78 76 1 + 66 78 77 1 + 66 78 78 1 + 66 78 79 1 + 66 78 80 1 + 66 78 81 1 + 66 78 82 1 + 66 78 83 1 + 66 78 84 0.882567 + 66 78 85 0.061458 + 66 79 43 0.234894 + 66 79 44 0.980027 + 66 79 45 1 + 66 79 46 1 + 66 79 47 1 + 66 79 48 1 + 66 79 49 1 + 66 79 50 1 + 66 79 51 1 + 66 79 52 1 + 66 79 53 1 + 66 79 54 1 + 66 79 55 1 + 66 79 56 1 + 66 79 57 1 + 66 79 58 1 + 66 79 59 1 + 66 79 60 1 + 66 79 61 1 + 66 79 62 1 + 66 79 63 1 + 66 79 64 1 + 66 79 65 1 + 66 79 66 1 + 66 79 67 1 + 66 79 68 1 + 66 79 69 1 + 66 79 70 1 + 66 79 71 1 + 66 79 72 1 + 66 79 73 1 + 66 79 74 1 + 66 79 75 1 + 66 79 76 1 + 66 79 77 1 + 66 79 78 1 + 66 79 79 1 + 66 79 80 1 + 66 79 81 1 + 66 79 82 1 + 66 79 83 0.980027 + 66 79 84 0.234894 + 66 80 44 0.408101 + 66 80 45 0.9989 + 66 80 46 1 + 66 80 47 1 + 66 80 48 1 + 66 80 49 1 + 66 80 50 1 + 66 80 51 1 + 66 80 52 1 + 66 80 53 1 + 66 80 54 1 + 66 80 55 1 + 66 80 56 1 + 66 80 57 1 + 66 80 58 1 + 66 80 59 1 + 66 80 60 1 + 66 80 61 1 + 66 80 62 1 + 66 80 63 1 + 66 80 64 1 + 66 80 65 1 + 66 80 66 1 + 66 80 67 1 + 66 80 68 1 + 66 80 69 1 + 66 80 70 1 + 66 80 71 1 + 66 80 72 1 + 66 80 73 1 + 66 80 74 1 + 66 80 75 1 + 66 80 76 1 + 66 80 77 1 + 66 80 78 1 + 66 80 79 1 + 66 80 80 1 + 66 80 81 1 + 66 80 82 0.9989 + 66 80 83 0.408101 + 66 81 44 7.7901e-05 + 66 81 45 0.509943 + 66 81 46 0.999903 + 66 81 47 1 + 66 81 48 1 + 66 81 49 1 + 66 81 50 1 + 66 81 51 1 + 66 81 52 1 + 66 81 53 1 + 66 81 54 1 + 66 81 55 1 + 66 81 56 1 + 66 81 57 1 + 66 81 58 1 + 66 81 59 1 + 66 81 60 1 + 66 81 61 1 + 66 81 62 1 + 66 81 63 1 + 66 81 64 1 + 66 81 65 1 + 66 81 66 1 + 66 81 67 1 + 66 81 68 1 + 66 81 69 1 + 66 81 70 1 + 66 81 71 1 + 66 81 72 1 + 66 81 73 1 + 66 81 74 1 + 66 81 75 1 + 66 81 76 1 + 66 81 77 1 + 66 81 78 1 + 66 81 79 1 + 66 81 80 1 + 66 81 81 0.999903 + 66 81 82 0.509943 + 66 81 83 7.7901e-05 + 66 82 45 0.0011128 + 66 82 46 0.509943 + 66 82 47 0.9989 + 66 82 48 1 + 66 82 49 1 + 66 82 50 1 + 66 82 51 1 + 66 82 52 1 + 66 82 53 1 + 66 82 54 1 + 66 82 55 1 + 66 82 56 1 + 66 82 57 1 + 66 82 58 1 + 66 82 59 1 + 66 82 60 1 + 66 82 61 1 + 66 82 62 1 + 66 82 63 1 + 66 82 64 1 + 66 82 65 1 + 66 82 66 1 + 66 82 67 1 + 66 82 68 1 + 66 82 69 1 + 66 82 70 1 + 66 82 71 1 + 66 82 72 1 + 66 82 73 1 + 66 82 74 1 + 66 82 75 1 + 66 82 76 1 + 66 82 77 1 + 66 82 78 1 + 66 82 79 1 + 66 82 80 0.9989 + 66 82 81 0.509943 + 66 82 82 0.0011128 + 66 83 46 7.7901e-05 + 66 83 47 0.408101 + 66 83 48 0.980027 + 66 83 49 1 + 66 83 50 1 + 66 83 51 1 + 66 83 52 1 + 66 83 53 1 + 66 83 54 1 + 66 83 55 1 + 66 83 56 1 + 66 83 57 1 + 66 83 58 1 + 66 83 59 1 + 66 83 60 1 + 66 83 61 1 + 66 83 62 1 + 66 83 63 1 + 66 83 64 1 + 66 83 65 1 + 66 83 66 1 + 66 83 67 1 + 66 83 68 1 + 66 83 69 1 + 66 83 70 1 + 66 83 71 1 + 66 83 72 1 + 66 83 73 1 + 66 83 74 1 + 66 83 75 1 + 66 83 76 1 + 66 83 77 1 + 66 83 78 1 + 66 83 79 0.980027 + 66 83 80 0.408101 + 66 83 81 7.7901e-05 + 66 84 48 0.234894 + 66 84 49 0.882567 + 66 84 50 1 + 66 84 51 1 + 66 84 52 1 + 66 84 53 1 + 66 84 54 1 + 66 84 55 1 + 66 84 56 1 + 66 84 57 1 + 66 84 58 1 + 66 84 59 1 + 66 84 60 1 + 66 84 61 1 + 66 84 62 1 + 66 84 63 1 + 66 84 64 1 + 66 84 65 1 + 66 84 66 1 + 66 84 67 1 + 66 84 68 1 + 66 84 69 1 + 66 84 70 1 + 66 84 71 1 + 66 84 72 1 + 66 84 73 1 + 66 84 74 1 + 66 84 75 1 + 66 84 76 1 + 66 84 77 1 + 66 84 78 0.882567 + 66 84 79 0.234894 + 66 85 49 0.061458 + 66 85 50 0.602307 + 66 85 51 0.992135 + 66 85 52 1 + 66 85 53 1 + 66 85 54 1 + 66 85 55 1 + 66 85 56 1 + 66 85 57 1 + 66 85 58 1 + 66 85 59 1 + 66 85 60 1 + 66 85 61 1 + 66 85 62 1 + 66 85 63 1 + 66 85 64 1 + 66 85 65 1 + 66 85 66 1 + 66 85 67 1 + 66 85 68 1 + 66 85 69 1 + 66 85 70 1 + 66 85 71 1 + 66 85 72 1 + 66 85 73 1 + 66 85 74 1 + 66 85 75 1 + 66 85 76 0.992135 + 66 85 77 0.602307 + 66 85 78 0.061458 + 66 86 51 0.203942 + 66 86 52 0.730298 + 66 86 53 0.998593 + 66 86 54 1 + 66 86 55 1 + 66 86 56 1 + 66 86 57 1 + 66 86 58 1 + 66 86 59 1 + 66 86 60 1 + 66 86 61 1 + 66 86 62 1 + 66 86 63 1 + 66 86 64 1 + 66 86 65 1 + 66 86 66 1 + 66 86 67 1 + 66 86 68 1 + 66 86 69 1 + 66 86 70 1 + 66 86 71 1 + 66 86 72 1 + 66 86 73 1 + 66 86 74 0.998593 + 66 86 75 0.730298 + 66 86 76 0.203942 + 66 87 52 9.9388e-05 + 66 87 53 0.210787 + 66 87 54 0.63639 + 66 87 55 0.961214 + 66 87 56 1 + 66 87 57 1 + 66 87 58 1 + 66 87 59 1 + 66 87 60 1 + 66 87 61 1 + 66 87 62 1 + 66 87 63 1 + 66 87 64 1 + 66 87 65 1 + 66 87 66 1 + 66 87 67 1 + 66 87 68 1 + 66 87 69 1 + 66 87 70 1 + 66 87 71 1 + 66 87 72 0.961214 + 66 87 73 0.63639 + 66 87 74 0.210787 + 66 87 75 9.9388e-05 + 66 88 55 0.0529903 + 66 88 56 0.345113 + 66 88 57 0.63101 + 66 88 58 0.873248 + 66 88 59 0.99711 + 66 88 60 1 + 66 88 61 1 + 66 88 62 1 + 66 88 63 1 + 66 88 64 1 + 66 88 65 1 + 66 88 66 1 + 66 88 67 1 + 66 88 68 0.99711 + 66 88 69 0.873248 + 66 88 70 0.63101 + 66 88 71 0.345113 + 66 88 72 0.0529903 + 66 89 58 0.000200097 + 66 89 59 0.0765779 + 66 89 60 0.232735 + 66 89 61 0.351365 + 66 89 62 0.430144 + 66 89 63 0.469442 + 66 89 64 0.469442 + 66 89 65 0.430144 + 66 89 66 0.351365 + 66 89 67 0.232735 + 66 89 68 0.0765779 + 66 89 69 0.000200097 + 67 38 59 0.00961546 + 67 38 60 0.11378 + 67 38 61 0.232735 + 67 38 62 0.311883 + 67 38 63 0.351365 + 67 38 64 0.351365 + 67 38 65 0.311883 + 67 38 66 0.232735 + 67 38 67 0.11378 + 67 38 68 0.00961546 + 67 39 55 0.00850155 + 67 39 56 0.221559 + 67 39 57 0.508892 + 67 39 58 0.752526 + 67 39 59 0.944121 + 67 39 60 0.999764 + 67 39 61 1 + 67 39 62 1 + 67 39 63 1 + 67 39 64 1 + 67 39 65 1 + 67 39 66 1 + 67 39 67 0.999764 + 67 39 68 0.944121 + 67 39 69 0.752526 + 67 39 70 0.508892 + 67 39 71 0.221559 + 67 39 72 0.00850155 + 67 40 53 0.106145 + 67 40 54 0.509102 + 67 40 55 0.880429 + 67 40 56 0.999993 + 67 40 57 1 + 67 40 58 1 + 67 40 59 1 + 67 40 60 1 + 67 40 61 1 + 67 40 62 1 + 67 40 63 1 + 67 40 64 1 + 67 40 65 1 + 67 40 66 1 + 67 40 67 1 + 67 40 68 1 + 67 40 69 1 + 67 40 70 1 + 67 40 71 0.999993 + 67 40 72 0.880429 + 67 40 73 0.509102 + 67 40 74 0.106145 + 67 41 51 0.106397 + 67 41 52 0.598003 + 67 41 53 0.97359 + 67 41 54 1 + 67 41 55 1 + 67 41 56 1 + 67 41 57 1 + 67 41 58 1 + 67 41 59 1 + 67 41 60 1 + 67 41 61 1 + 67 41 62 1 + 67 41 63 1 + 67 41 64 1 + 67 41 65 1 + 67 41 66 1 + 67 41 67 1 + 67 41 68 1 + 67 41 69 1 + 67 41 70 1 + 67 41 71 1 + 67 41 72 1 + 67 41 73 1 + 67 41 74 0.97359 + 67 41 75 0.598003 + 67 41 76 0.106397 + 67 42 49 0.0170305 + 67 42 50 0.462948 + 67 42 51 0.954076 + 67 42 52 1 + 67 42 53 1 + 67 42 54 1 + 67 42 55 1 + 67 42 56 1 + 67 42 57 1 + 67 42 58 1 + 67 42 59 1 + 67 42 60 1 + 67 42 61 1 + 67 42 62 1 + 67 42 63 1 + 67 42 64 1 + 67 42 65 1 + 67 42 66 1 + 67 42 67 1 + 67 42 68 1 + 67 42 69 1 + 67 42 70 1 + 67 42 71 1 + 67 42 72 1 + 67 42 73 1 + 67 42 74 1 + 67 42 75 1 + 67 42 76 0.954076 + 67 42 77 0.462948 + 67 42 78 0.0170305 + 67 43 48 0.134257 + 67 43 49 0.783221 + 67 43 50 1 + 67 43 51 1 + 67 43 52 1 + 67 43 53 1 + 67 43 54 1 + 67 43 55 1 + 67 43 56 1 + 67 43 57 1 + 67 43 58 1 + 67 43 59 1 + 67 43 60 1 + 67 43 61 1 + 67 43 62 1 + 67 43 63 1 + 67 43 64 1 + 67 43 65 1 + 67 43 66 1 + 67 43 67 1 + 67 43 68 1 + 67 43 69 1 + 67 43 70 1 + 67 43 71 1 + 67 43 72 1 + 67 43 73 1 + 67 43 74 1 + 67 43 75 1 + 67 43 76 1 + 67 43 77 1 + 67 43 78 0.783221 + 67 43 79 0.134257 + 67 44 47 0.27231 + 67 44 48 0.93166 + 67 44 49 1 + 67 44 50 1 + 67 44 51 1 + 67 44 52 1 + 67 44 53 1 + 67 44 54 1 + 67 44 55 1 + 67 44 56 1 + 67 44 57 1 + 67 44 58 1 + 67 44 59 1 + 67 44 60 1 + 67 44 61 1 + 67 44 62 1 + 67 44 63 1 + 67 44 64 1 + 67 44 65 1 + 67 44 66 1 + 67 44 67 1 + 67 44 68 1 + 67 44 69 1 + 67 44 70 1 + 67 44 71 1 + 67 44 72 1 + 67 44 73 1 + 67 44 74 1 + 67 44 75 1 + 67 44 76 1 + 67 44 77 1 + 67 44 78 1 + 67 44 79 0.93166 + 67 44 80 0.27231 + 67 45 46 0.358249 + 67 45 47 0.979426 + 67 45 48 1 + 67 45 49 1 + 67 45 50 1 + 67 45 51 1 + 67 45 52 1 + 67 45 53 1 + 67 45 54 1 + 67 45 55 1 + 67 45 56 1 + 67 45 57 1 + 67 45 58 1 + 67 45 59 1 + 67 45 60 1 + 67 45 61 1 + 67 45 62 1 + 67 45 63 1 + 67 45 64 1 + 67 45 65 1 + 67 45 66 1 + 67 45 67 1 + 67 45 68 1 + 67 45 69 1 + 67 45 70 1 + 67 45 71 1 + 67 45 72 1 + 67 45 73 1 + 67 45 74 1 + 67 45 75 1 + 67 45 76 1 + 67 45 77 1 + 67 45 78 1 + 67 45 79 1 + 67 45 80 0.979426 + 67 45 81 0.358249 + 67 46 45 0.358249 + 67 46 46 0.988806 + 67 46 47 1 + 67 46 48 1 + 67 46 49 1 + 67 46 50 1 + 67 46 51 1 + 67 46 52 1 + 67 46 53 1 + 67 46 54 1 + 67 46 55 1 + 67 46 56 1 + 67 46 57 1 + 67 46 58 1 + 67 46 59 1 + 67 46 60 1 + 67 46 61 1 + 67 46 62 1 + 67 46 63 1 + 67 46 64 1 + 67 46 65 1 + 67 46 66 1 + 67 46 67 1 + 67 46 68 1 + 67 46 69 1 + 67 46 70 1 + 67 46 71 1 + 67 46 72 1 + 67 46 73 1 + 67 46 74 1 + 67 46 75 1 + 67 46 76 1 + 67 46 77 1 + 67 46 78 1 + 67 46 79 1 + 67 46 80 1 + 67 46 81 0.988806 + 67 46 82 0.358249 + 67 47 44 0.27231 + 67 47 45 0.979426 + 67 47 46 1 + 67 47 47 1 + 67 47 48 1 + 67 47 49 1 + 67 47 50 1 + 67 47 51 1 + 67 47 52 1 + 67 47 53 1 + 67 47 54 1 + 67 47 55 1 + 67 47 56 1 + 67 47 57 1 + 67 47 58 1 + 67 47 59 1 + 67 47 60 1 + 67 47 61 1 + 67 47 62 1 + 67 47 63 1 + 67 47 64 1 + 67 47 65 1 + 67 47 66 1 + 67 47 67 1 + 67 47 68 1 + 67 47 69 1 + 67 47 70 1 + 67 47 71 1 + 67 47 72 1 + 67 47 73 1 + 67 47 74 1 + 67 47 75 1 + 67 47 76 1 + 67 47 77 1 + 67 47 78 1 + 67 47 79 1 + 67 47 80 1 + 67 47 81 1 + 67 47 82 0.979426 + 67 47 83 0.27231 + 67 48 43 0.134257 + 67 48 44 0.93166 + 67 48 45 1 + 67 48 46 1 + 67 48 47 1 + 67 48 48 1 + 67 48 49 1 + 67 48 50 1 + 67 48 51 1 + 67 48 52 1 + 67 48 53 1 + 67 48 54 1 + 67 48 55 1 + 67 48 56 1 + 67 48 57 1 + 67 48 58 1 + 67 48 59 1 + 67 48 60 1 + 67 48 61 1 + 67 48 62 1 + 67 48 63 1 + 67 48 64 1 + 67 48 65 1 + 67 48 66 1 + 67 48 67 1 + 67 48 68 1 + 67 48 69 1 + 67 48 70 1 + 67 48 71 1 + 67 48 72 1 + 67 48 73 1 + 67 48 74 1 + 67 48 75 1 + 67 48 76 1 + 67 48 77 1 + 67 48 78 1 + 67 48 79 1 + 67 48 80 1 + 67 48 81 1 + 67 48 82 1 + 67 48 83 0.93166 + 67 48 84 0.134257 + 67 49 42 0.0170305 + 67 49 43 0.783221 + 67 49 44 1 + 67 49 45 1 + 67 49 46 1 + 67 49 47 1 + 67 49 48 1 + 67 49 49 1 + 67 49 50 1 + 67 49 51 1 + 67 49 52 1 + 67 49 53 1 + 67 49 54 1 + 67 49 55 1 + 67 49 56 1 + 67 49 57 1 + 67 49 58 1 + 67 49 59 1 + 67 49 60 1 + 67 49 61 1 + 67 49 62 1 + 67 49 63 1 + 67 49 64 1 + 67 49 65 1 + 67 49 66 1 + 67 49 67 1 + 67 49 68 1 + 67 49 69 1 + 67 49 70 1 + 67 49 71 1 + 67 49 72 1 + 67 49 73 1 + 67 49 74 1 + 67 49 75 1 + 67 49 76 1 + 67 49 77 1 + 67 49 78 1 + 67 49 79 1 + 67 49 80 1 + 67 49 81 1 + 67 49 82 1 + 67 49 83 1 + 67 49 84 0.783221 + 67 49 85 0.0170305 + 67 50 42 0.462948 + 67 50 43 1 + 67 50 44 1 + 67 50 45 1 + 67 50 46 1 + 67 50 47 1 + 67 50 48 1 + 67 50 49 1 + 67 50 50 1 + 67 50 51 1 + 67 50 52 1 + 67 50 53 1 + 67 50 54 1 + 67 50 55 1 + 67 50 56 1 + 67 50 57 1 + 67 50 58 1 + 67 50 59 1 + 67 50 60 1 + 67 50 61 1 + 67 50 62 1 + 67 50 63 1 + 67 50 64 1 + 67 50 65 1 + 67 50 66 1 + 67 50 67 1 + 67 50 68 1 + 67 50 69 1 + 67 50 70 1 + 67 50 71 1 + 67 50 72 1 + 67 50 73 1 + 67 50 74 1 + 67 50 75 1 + 67 50 76 1 + 67 50 77 1 + 67 50 78 1 + 67 50 79 1 + 67 50 80 1 + 67 50 81 1 + 67 50 82 1 + 67 50 83 1 + 67 50 84 1 + 67 50 85 0.462948 + 67 51 41 0.106397 + 67 51 42 0.954076 + 67 51 43 1 + 67 51 44 1 + 67 51 45 1 + 67 51 46 1 + 67 51 47 1 + 67 51 48 1 + 67 51 49 1 + 67 51 50 1 + 67 51 51 1 + 67 51 52 1 + 67 51 53 1 + 67 51 54 1 + 67 51 55 1 + 67 51 56 1 + 67 51 57 1 + 67 51 58 1 + 67 51 59 1 + 67 51 60 1 + 67 51 61 1 + 67 51 62 1 + 67 51 63 1 + 67 51 64 1 + 67 51 65 1 + 67 51 66 1 + 67 51 67 1 + 67 51 68 1 + 67 51 69 1 + 67 51 70 1 + 67 51 71 1 + 67 51 72 1 + 67 51 73 1 + 67 51 74 1 + 67 51 75 1 + 67 51 76 1 + 67 51 77 1 + 67 51 78 1 + 67 51 79 1 + 67 51 80 1 + 67 51 81 1 + 67 51 82 1 + 67 51 83 1 + 67 51 84 1 + 67 51 85 0.954076 + 67 51 86 0.106397 + 67 52 41 0.598003 + 67 52 42 1 + 67 52 43 1 + 67 52 44 1 + 67 52 45 1 + 67 52 46 1 + 67 52 47 1 + 67 52 48 1 + 67 52 49 1 + 67 52 50 1 + 67 52 51 1 + 67 52 52 1 + 67 52 53 1 + 67 52 54 1 + 67 52 55 1 + 67 52 56 1 + 67 52 57 1 + 67 52 58 1 + 67 52 59 1 + 67 52 60 1 + 67 52 61 1 + 67 52 62 1 + 67 52 63 1 + 67 52 64 1 + 67 52 65 1 + 67 52 66 1 + 67 52 67 1 + 67 52 68 1 + 67 52 69 1 + 67 52 70 1 + 67 52 71 1 + 67 52 72 1 + 67 52 73 1 + 67 52 74 1 + 67 52 75 1 + 67 52 76 1 + 67 52 77 1 + 67 52 78 1 + 67 52 79 1 + 67 52 80 1 + 67 52 81 1 + 67 52 82 1 + 67 52 83 1 + 67 52 84 1 + 67 52 85 1 + 67 52 86 0.598003 + 67 53 40 0.106145 + 67 53 41 0.97359 + 67 53 42 1 + 67 53 43 1 + 67 53 44 1 + 67 53 45 1 + 67 53 46 1 + 67 53 47 1 + 67 53 48 1 + 67 53 49 1 + 67 53 50 1 + 67 53 51 1 + 67 53 52 1 + 67 53 53 1 + 67 53 54 1 + 67 53 55 1 + 67 53 56 1 + 67 53 57 1 + 67 53 58 1 + 67 53 59 1 + 67 53 60 1 + 67 53 61 1 + 67 53 62 1 + 67 53 63 1 + 67 53 64 1 + 67 53 65 1 + 67 53 66 1 + 67 53 67 1 + 67 53 68 1 + 67 53 69 1 + 67 53 70 1 + 67 53 71 1 + 67 53 72 1 + 67 53 73 1 + 67 53 74 1 + 67 53 75 1 + 67 53 76 1 + 67 53 77 1 + 67 53 78 1 + 67 53 79 1 + 67 53 80 1 + 67 53 81 1 + 67 53 82 1 + 67 53 83 1 + 67 53 84 1 + 67 53 85 1 + 67 53 86 0.97359 + 67 53 87 0.106145 + 67 54 40 0.509102 + 67 54 41 1 + 67 54 42 1 + 67 54 43 1 + 67 54 44 1 + 67 54 45 1 + 67 54 46 1 + 67 54 47 1 + 67 54 48 1 + 67 54 49 1 + 67 54 50 1 + 67 54 51 1 + 67 54 52 1 + 67 54 53 1 + 67 54 54 1 + 67 54 55 1 + 67 54 56 1 + 67 54 57 1 + 67 54 58 1 + 67 54 59 1 + 67 54 60 1 + 67 54 61 1 + 67 54 62 1 + 67 54 63 1 + 67 54 64 1 + 67 54 65 1 + 67 54 66 1 + 67 54 67 1 + 67 54 68 1 + 67 54 69 1 + 67 54 70 1 + 67 54 71 1 + 67 54 72 1 + 67 54 73 1 + 67 54 74 1 + 67 54 75 1 + 67 54 76 1 + 67 54 77 1 + 67 54 78 1 + 67 54 79 1 + 67 54 80 1 + 67 54 81 1 + 67 54 82 1 + 67 54 83 1 + 67 54 84 1 + 67 54 85 1 + 67 54 86 1 + 67 54 87 0.509102 + 67 55 39 0.00850155 + 67 55 40 0.880429 + 67 55 41 1 + 67 55 42 1 + 67 55 43 1 + 67 55 44 1 + 67 55 45 1 + 67 55 46 1 + 67 55 47 1 + 67 55 48 1 + 67 55 49 1 + 67 55 50 1 + 67 55 51 1 + 67 55 52 1 + 67 55 53 1 + 67 55 54 1 + 67 55 55 1 + 67 55 56 1 + 67 55 57 1 + 67 55 58 1 + 67 55 59 1 + 67 55 60 1 + 67 55 61 1 + 67 55 62 1 + 67 55 63 1 + 67 55 64 1 + 67 55 65 1 + 67 55 66 1 + 67 55 67 1 + 67 55 68 1 + 67 55 69 1 + 67 55 70 1 + 67 55 71 1 + 67 55 72 1 + 67 55 73 1 + 67 55 74 1 + 67 55 75 1 + 67 55 76 1 + 67 55 77 1 + 67 55 78 1 + 67 55 79 1 + 67 55 80 1 + 67 55 81 1 + 67 55 82 1 + 67 55 83 1 + 67 55 84 1 + 67 55 85 1 + 67 55 86 1 + 67 55 87 0.880429 + 67 55 88 0.00850155 + 67 56 39 0.221559 + 67 56 40 0.999993 + 67 56 41 1 + 67 56 42 1 + 67 56 43 1 + 67 56 44 1 + 67 56 45 1 + 67 56 46 1 + 67 56 47 1 + 67 56 48 1 + 67 56 49 1 + 67 56 50 1 + 67 56 51 1 + 67 56 52 1 + 67 56 53 1 + 67 56 54 1 + 67 56 55 1 + 67 56 56 1 + 67 56 57 1 + 67 56 58 1 + 67 56 59 1 + 67 56 60 1 + 67 56 61 1 + 67 56 62 1 + 67 56 63 1 + 67 56 64 1 + 67 56 65 1 + 67 56 66 1 + 67 56 67 1 + 67 56 68 1 + 67 56 69 1 + 67 56 70 1 + 67 56 71 1 + 67 56 72 1 + 67 56 73 1 + 67 56 74 1 + 67 56 75 1 + 67 56 76 1 + 67 56 77 1 + 67 56 78 1 + 67 56 79 1 + 67 56 80 1 + 67 56 81 1 + 67 56 82 1 + 67 56 83 1 + 67 56 84 1 + 67 56 85 1 + 67 56 86 1 + 67 56 87 0.999993 + 67 56 88 0.221559 + 67 57 39 0.508892 + 67 57 40 1 + 67 57 41 1 + 67 57 42 1 + 67 57 43 1 + 67 57 44 1 + 67 57 45 1 + 67 57 46 1 + 67 57 47 1 + 67 57 48 1 + 67 57 49 1 + 67 57 50 1 + 67 57 51 1 + 67 57 52 1 + 67 57 53 1 + 67 57 54 1 + 67 57 55 1 + 67 57 56 1 + 67 57 57 1 + 67 57 58 1 + 67 57 59 1 + 67 57 60 1 + 67 57 61 1 + 67 57 62 1 + 67 57 63 1 + 67 57 64 1 + 67 57 65 1 + 67 57 66 1 + 67 57 67 1 + 67 57 68 1 + 67 57 69 1 + 67 57 70 1 + 67 57 71 1 + 67 57 72 1 + 67 57 73 1 + 67 57 74 1 + 67 57 75 1 + 67 57 76 1 + 67 57 77 1 + 67 57 78 1 + 67 57 79 1 + 67 57 80 1 + 67 57 81 1 + 67 57 82 1 + 67 57 83 1 + 67 57 84 1 + 67 57 85 1 + 67 57 86 1 + 67 57 87 1 + 67 57 88 0.508892 + 67 58 39 0.752526 + 67 58 40 1 + 67 58 41 1 + 67 58 42 1 + 67 58 43 1 + 67 58 44 1 + 67 58 45 1 + 67 58 46 1 + 67 58 47 1 + 67 58 48 1 + 67 58 49 1 + 67 58 50 1 + 67 58 51 1 + 67 58 52 1 + 67 58 53 1 + 67 58 54 1 + 67 58 55 1 + 67 58 56 1 + 67 58 57 1 + 67 58 58 1 + 67 58 59 1 + 67 58 60 1 + 67 58 61 1 + 67 58 62 1 + 67 58 63 1 + 67 58 64 1 + 67 58 65 1 + 67 58 66 1 + 67 58 67 1 + 67 58 68 1 + 67 58 69 1 + 67 58 70 1 + 67 58 71 1 + 67 58 72 1 + 67 58 73 1 + 67 58 74 1 + 67 58 75 1 + 67 58 76 1 + 67 58 77 1 + 67 58 78 1 + 67 58 79 1 + 67 58 80 1 + 67 58 81 1 + 67 58 82 1 + 67 58 83 1 + 67 58 84 1 + 67 58 85 1 + 67 58 86 1 + 67 58 87 1 + 67 58 88 0.752526 + 67 59 38 0.00961546 + 67 59 39 0.944121 + 67 59 40 1 + 67 59 41 1 + 67 59 42 1 + 67 59 43 1 + 67 59 44 1 + 67 59 45 1 + 67 59 46 1 + 67 59 47 1 + 67 59 48 1 + 67 59 49 1 + 67 59 50 1 + 67 59 51 1 + 67 59 52 1 + 67 59 53 1 + 67 59 54 1 + 67 59 55 1 + 67 59 56 1 + 67 59 57 1 + 67 59 58 1 + 67 59 59 1 + 67 59 60 1 + 67 59 61 1 + 67 59 62 1 + 67 59 63 1 + 67 59 64 1 + 67 59 65 1 + 67 59 66 1 + 67 59 67 1 + 67 59 68 1 + 67 59 69 1 + 67 59 70 1 + 67 59 71 1 + 67 59 72 1 + 67 59 73 1 + 67 59 74 1 + 67 59 75 1 + 67 59 76 1 + 67 59 77 1 + 67 59 78 1 + 67 59 79 1 + 67 59 80 1 + 67 59 81 1 + 67 59 82 1 + 67 59 83 1 + 67 59 84 1 + 67 59 85 1 + 67 59 86 1 + 67 59 87 1 + 67 59 88 0.944121 + 67 59 89 0.00961546 + 67 60 38 0.11378 + 67 60 39 0.999764 + 67 60 40 1 + 67 60 41 1 + 67 60 42 1 + 67 60 43 1 + 67 60 44 1 + 67 60 45 1 + 67 60 46 1 + 67 60 47 1 + 67 60 48 1 + 67 60 49 1 + 67 60 50 1 + 67 60 51 1 + 67 60 52 1 + 67 60 53 1 + 67 60 54 1 + 67 60 55 1 + 67 60 56 1 + 67 60 57 1 + 67 60 58 1 + 67 60 59 1 + 67 60 60 1 + 67 60 61 1 + 67 60 62 1 + 67 60 63 1 + 67 60 64 1 + 67 60 65 1 + 67 60 66 1 + 67 60 67 1 + 67 60 68 1 + 67 60 69 1 + 67 60 70 1 + 67 60 71 1 + 67 60 72 1 + 67 60 73 1 + 67 60 74 1 + 67 60 75 1 + 67 60 76 1 + 67 60 77 1 + 67 60 78 1 + 67 60 79 1 + 67 60 80 1 + 67 60 81 1 + 67 60 82 1 + 67 60 83 1 + 67 60 84 1 + 67 60 85 1 + 67 60 86 1 + 67 60 87 1 + 67 60 88 0.999764 + 67 60 89 0.11378 + 67 61 38 0.232735 + 67 61 39 1 + 67 61 40 1 + 67 61 41 1 + 67 61 42 1 + 67 61 43 1 + 67 61 44 1 + 67 61 45 1 + 67 61 46 1 + 67 61 47 1 + 67 61 48 1 + 67 61 49 1 + 67 61 50 1 + 67 61 51 1 + 67 61 52 1 + 67 61 53 1 + 67 61 54 1 + 67 61 55 1 + 67 61 56 1 + 67 61 57 1 + 67 61 58 1 + 67 61 59 1 + 67 61 60 1 + 67 61 61 1 + 67 61 62 1 + 67 61 63 1 + 67 61 64 1 + 67 61 65 1 + 67 61 66 1 + 67 61 67 1 + 67 61 68 1 + 67 61 69 1 + 67 61 70 1 + 67 61 71 1 + 67 61 72 1 + 67 61 73 1 + 67 61 74 1 + 67 61 75 1 + 67 61 76 1 + 67 61 77 1 + 67 61 78 1 + 67 61 79 1 + 67 61 80 1 + 67 61 81 1 + 67 61 82 1 + 67 61 83 1 + 67 61 84 1 + 67 61 85 1 + 67 61 86 1 + 67 61 87 1 + 67 61 88 1 + 67 61 89 0.232735 + 67 62 38 0.311883 + 67 62 39 1 + 67 62 40 1 + 67 62 41 1 + 67 62 42 1 + 67 62 43 1 + 67 62 44 1 + 67 62 45 1 + 67 62 46 1 + 67 62 47 1 + 67 62 48 1 + 67 62 49 1 + 67 62 50 1 + 67 62 51 1 + 67 62 52 1 + 67 62 53 1 + 67 62 54 1 + 67 62 55 1 + 67 62 56 1 + 67 62 57 1 + 67 62 58 1 + 67 62 59 1 + 67 62 60 1 + 67 62 61 1 + 67 62 62 1 + 67 62 63 1 + 67 62 64 1 + 67 62 65 1 + 67 62 66 1 + 67 62 67 1 + 67 62 68 1 + 67 62 69 1 + 67 62 70 1 + 67 62 71 1 + 67 62 72 1 + 67 62 73 1 + 67 62 74 1 + 67 62 75 1 + 67 62 76 1 + 67 62 77 1 + 67 62 78 1 + 67 62 79 1 + 67 62 80 1 + 67 62 81 1 + 67 62 82 1 + 67 62 83 1 + 67 62 84 1 + 67 62 85 1 + 67 62 86 1 + 67 62 87 1 + 67 62 88 1 + 67 62 89 0.311883 + 67 63 38 0.351365 + 67 63 39 1 + 67 63 40 1 + 67 63 41 1 + 67 63 42 1 + 67 63 43 1 + 67 63 44 1 + 67 63 45 1 + 67 63 46 1 + 67 63 47 1 + 67 63 48 1 + 67 63 49 1 + 67 63 50 1 + 67 63 51 1 + 67 63 52 1 + 67 63 53 1 + 67 63 54 1 + 67 63 55 1 + 67 63 56 1 + 67 63 57 1 + 67 63 58 1 + 67 63 59 1 + 67 63 60 1 + 67 63 61 1 + 67 63 62 1 + 67 63 63 1 + 67 63 64 1 + 67 63 65 1 + 67 63 66 1 + 67 63 67 1 + 67 63 68 1 + 67 63 69 1 + 67 63 70 1 + 67 63 71 1 + 67 63 72 1 + 67 63 73 1 + 67 63 74 1 + 67 63 75 1 + 67 63 76 1 + 67 63 77 1 + 67 63 78 1 + 67 63 79 1 + 67 63 80 1 + 67 63 81 1 + 67 63 82 1 + 67 63 83 1 + 67 63 84 1 + 67 63 85 1 + 67 63 86 1 + 67 63 87 1 + 67 63 88 1 + 67 63 89 0.351365 + 67 64 38 0.351365 + 67 64 39 1 + 67 64 40 1 + 67 64 41 1 + 67 64 42 1 + 67 64 43 1 + 67 64 44 1 + 67 64 45 1 + 67 64 46 1 + 67 64 47 1 + 67 64 48 1 + 67 64 49 1 + 67 64 50 1 + 67 64 51 1 + 67 64 52 1 + 67 64 53 1 + 67 64 54 1 + 67 64 55 1 + 67 64 56 1 + 67 64 57 1 + 67 64 58 1 + 67 64 59 1 + 67 64 60 1 + 67 64 61 1 + 67 64 62 1 + 67 64 63 1 + 67 64 64 1 + 67 64 65 1 + 67 64 66 1 + 67 64 67 1 + 67 64 68 1 + 67 64 69 1 + 67 64 70 1 + 67 64 71 1 + 67 64 72 1 + 67 64 73 1 + 67 64 74 1 + 67 64 75 1 + 67 64 76 1 + 67 64 77 1 + 67 64 78 1 + 67 64 79 1 + 67 64 80 1 + 67 64 81 1 + 67 64 82 1 + 67 64 83 1 + 67 64 84 1 + 67 64 85 1 + 67 64 86 1 + 67 64 87 1 + 67 64 88 1 + 67 64 89 0.351365 + 67 65 38 0.311883 + 67 65 39 1 + 67 65 40 1 + 67 65 41 1 + 67 65 42 1 + 67 65 43 1 + 67 65 44 1 + 67 65 45 1 + 67 65 46 1 + 67 65 47 1 + 67 65 48 1 + 67 65 49 1 + 67 65 50 1 + 67 65 51 1 + 67 65 52 1 + 67 65 53 1 + 67 65 54 1 + 67 65 55 1 + 67 65 56 1 + 67 65 57 1 + 67 65 58 1 + 67 65 59 1 + 67 65 60 1 + 67 65 61 1 + 67 65 62 1 + 67 65 63 1 + 67 65 64 1 + 67 65 65 1 + 67 65 66 1 + 67 65 67 1 + 67 65 68 1 + 67 65 69 1 + 67 65 70 1 + 67 65 71 1 + 67 65 72 1 + 67 65 73 1 + 67 65 74 1 + 67 65 75 1 + 67 65 76 1 + 67 65 77 1 + 67 65 78 1 + 67 65 79 1 + 67 65 80 1 + 67 65 81 1 + 67 65 82 1 + 67 65 83 1 + 67 65 84 1 + 67 65 85 1 + 67 65 86 1 + 67 65 87 1 + 67 65 88 1 + 67 65 89 0.311883 + 67 66 38 0.232735 + 67 66 39 1 + 67 66 40 1 + 67 66 41 1 + 67 66 42 1 + 67 66 43 1 + 67 66 44 1 + 67 66 45 1 + 67 66 46 1 + 67 66 47 1 + 67 66 48 1 + 67 66 49 1 + 67 66 50 1 + 67 66 51 1 + 67 66 52 1 + 67 66 53 1 + 67 66 54 1 + 67 66 55 1 + 67 66 56 1 + 67 66 57 1 + 67 66 58 1 + 67 66 59 1 + 67 66 60 1 + 67 66 61 1 + 67 66 62 1 + 67 66 63 1 + 67 66 64 1 + 67 66 65 1 + 67 66 66 1 + 67 66 67 1 + 67 66 68 1 + 67 66 69 1 + 67 66 70 1 + 67 66 71 1 + 67 66 72 1 + 67 66 73 1 + 67 66 74 1 + 67 66 75 1 + 67 66 76 1 + 67 66 77 1 + 67 66 78 1 + 67 66 79 1 + 67 66 80 1 + 67 66 81 1 + 67 66 82 1 + 67 66 83 1 + 67 66 84 1 + 67 66 85 1 + 67 66 86 1 + 67 66 87 1 + 67 66 88 1 + 67 66 89 0.232735 + 67 67 38 0.11378 + 67 67 39 0.999764 + 67 67 40 1 + 67 67 41 1 + 67 67 42 1 + 67 67 43 1 + 67 67 44 1 + 67 67 45 1 + 67 67 46 1 + 67 67 47 1 + 67 67 48 1 + 67 67 49 1 + 67 67 50 1 + 67 67 51 1 + 67 67 52 1 + 67 67 53 1 + 67 67 54 1 + 67 67 55 1 + 67 67 56 1 + 67 67 57 1 + 67 67 58 1 + 67 67 59 1 + 67 67 60 1 + 67 67 61 1 + 67 67 62 1 + 67 67 63 1 + 67 67 64 1 + 67 67 65 1 + 67 67 66 1 + 67 67 67 1 + 67 67 68 1 + 67 67 69 1 + 67 67 70 1 + 67 67 71 1 + 67 67 72 1 + 67 67 73 1 + 67 67 74 1 + 67 67 75 1 + 67 67 76 1 + 67 67 77 1 + 67 67 78 1 + 67 67 79 1 + 67 67 80 1 + 67 67 81 1 + 67 67 82 1 + 67 67 83 1 + 67 67 84 1 + 67 67 85 1 + 67 67 86 1 + 67 67 87 1 + 67 67 88 0.999764 + 67 67 89 0.11378 + 67 68 38 0.00961546 + 67 68 39 0.944121 + 67 68 40 1 + 67 68 41 1 + 67 68 42 1 + 67 68 43 1 + 67 68 44 1 + 67 68 45 1 + 67 68 46 1 + 67 68 47 1 + 67 68 48 1 + 67 68 49 1 + 67 68 50 1 + 67 68 51 1 + 67 68 52 1 + 67 68 53 1 + 67 68 54 1 + 67 68 55 1 + 67 68 56 1 + 67 68 57 1 + 67 68 58 1 + 67 68 59 1 + 67 68 60 1 + 67 68 61 1 + 67 68 62 1 + 67 68 63 1 + 67 68 64 1 + 67 68 65 1 + 67 68 66 1 + 67 68 67 1 + 67 68 68 1 + 67 68 69 1 + 67 68 70 1 + 67 68 71 1 + 67 68 72 1 + 67 68 73 1 + 67 68 74 1 + 67 68 75 1 + 67 68 76 1 + 67 68 77 1 + 67 68 78 1 + 67 68 79 1 + 67 68 80 1 + 67 68 81 1 + 67 68 82 1 + 67 68 83 1 + 67 68 84 1 + 67 68 85 1 + 67 68 86 1 + 67 68 87 1 + 67 68 88 0.944121 + 67 68 89 0.00961546 + 67 69 39 0.752526 + 67 69 40 1 + 67 69 41 1 + 67 69 42 1 + 67 69 43 1 + 67 69 44 1 + 67 69 45 1 + 67 69 46 1 + 67 69 47 1 + 67 69 48 1 + 67 69 49 1 + 67 69 50 1 + 67 69 51 1 + 67 69 52 1 + 67 69 53 1 + 67 69 54 1 + 67 69 55 1 + 67 69 56 1 + 67 69 57 1 + 67 69 58 1 + 67 69 59 1 + 67 69 60 1 + 67 69 61 1 + 67 69 62 1 + 67 69 63 1 + 67 69 64 1 + 67 69 65 1 + 67 69 66 1 + 67 69 67 1 + 67 69 68 1 + 67 69 69 1 + 67 69 70 1 + 67 69 71 1 + 67 69 72 1 + 67 69 73 1 + 67 69 74 1 + 67 69 75 1 + 67 69 76 1 + 67 69 77 1 + 67 69 78 1 + 67 69 79 1 + 67 69 80 1 + 67 69 81 1 + 67 69 82 1 + 67 69 83 1 + 67 69 84 1 + 67 69 85 1 + 67 69 86 1 + 67 69 87 1 + 67 69 88 0.752526 + 67 70 39 0.508892 + 67 70 40 1 + 67 70 41 1 + 67 70 42 1 + 67 70 43 1 + 67 70 44 1 + 67 70 45 1 + 67 70 46 1 + 67 70 47 1 + 67 70 48 1 + 67 70 49 1 + 67 70 50 1 + 67 70 51 1 + 67 70 52 1 + 67 70 53 1 + 67 70 54 1 + 67 70 55 1 + 67 70 56 1 + 67 70 57 1 + 67 70 58 1 + 67 70 59 1 + 67 70 60 1 + 67 70 61 1 + 67 70 62 1 + 67 70 63 1 + 67 70 64 1 + 67 70 65 1 + 67 70 66 1 + 67 70 67 1 + 67 70 68 1 + 67 70 69 1 + 67 70 70 1 + 67 70 71 1 + 67 70 72 1 + 67 70 73 1 + 67 70 74 1 + 67 70 75 1 + 67 70 76 1 + 67 70 77 1 + 67 70 78 1 + 67 70 79 1 + 67 70 80 1 + 67 70 81 1 + 67 70 82 1 + 67 70 83 1 + 67 70 84 1 + 67 70 85 1 + 67 70 86 1 + 67 70 87 1 + 67 70 88 0.508892 + 67 71 39 0.221559 + 67 71 40 0.999993 + 67 71 41 1 + 67 71 42 1 + 67 71 43 1 + 67 71 44 1 + 67 71 45 1 + 67 71 46 1 + 67 71 47 1 + 67 71 48 1 + 67 71 49 1 + 67 71 50 1 + 67 71 51 1 + 67 71 52 1 + 67 71 53 1 + 67 71 54 1 + 67 71 55 1 + 67 71 56 1 + 67 71 57 1 + 67 71 58 1 + 67 71 59 1 + 67 71 60 1 + 67 71 61 1 + 67 71 62 1 + 67 71 63 1 + 67 71 64 1 + 67 71 65 1 + 67 71 66 1 + 67 71 67 1 + 67 71 68 1 + 67 71 69 1 + 67 71 70 1 + 67 71 71 1 + 67 71 72 1 + 67 71 73 1 + 67 71 74 1 + 67 71 75 1 + 67 71 76 1 + 67 71 77 1 + 67 71 78 1 + 67 71 79 1 + 67 71 80 1 + 67 71 81 1 + 67 71 82 1 + 67 71 83 1 + 67 71 84 1 + 67 71 85 1 + 67 71 86 1 + 67 71 87 0.999993 + 67 71 88 0.221559 + 67 72 39 0.00850155 + 67 72 40 0.880429 + 67 72 41 1 + 67 72 42 1 + 67 72 43 1 + 67 72 44 1 + 67 72 45 1 + 67 72 46 1 + 67 72 47 1 + 67 72 48 1 + 67 72 49 1 + 67 72 50 1 + 67 72 51 1 + 67 72 52 1 + 67 72 53 1 + 67 72 54 1 + 67 72 55 1 + 67 72 56 1 + 67 72 57 1 + 67 72 58 1 + 67 72 59 1 + 67 72 60 1 + 67 72 61 1 + 67 72 62 1 + 67 72 63 1 + 67 72 64 1 + 67 72 65 1 + 67 72 66 1 + 67 72 67 1 + 67 72 68 1 + 67 72 69 1 + 67 72 70 1 + 67 72 71 1 + 67 72 72 1 + 67 72 73 1 + 67 72 74 1 + 67 72 75 1 + 67 72 76 1 + 67 72 77 1 + 67 72 78 1 + 67 72 79 1 + 67 72 80 1 + 67 72 81 1 + 67 72 82 1 + 67 72 83 1 + 67 72 84 1 + 67 72 85 1 + 67 72 86 1 + 67 72 87 0.880429 + 67 72 88 0.00850155 + 67 73 40 0.509102 + 67 73 41 1 + 67 73 42 1 + 67 73 43 1 + 67 73 44 1 + 67 73 45 1 + 67 73 46 1 + 67 73 47 1 + 67 73 48 1 + 67 73 49 1 + 67 73 50 1 + 67 73 51 1 + 67 73 52 1 + 67 73 53 1 + 67 73 54 1 + 67 73 55 1 + 67 73 56 1 + 67 73 57 1 + 67 73 58 1 + 67 73 59 1 + 67 73 60 1 + 67 73 61 1 + 67 73 62 1 + 67 73 63 1 + 67 73 64 1 + 67 73 65 1 + 67 73 66 1 + 67 73 67 1 + 67 73 68 1 + 67 73 69 1 + 67 73 70 1 + 67 73 71 1 + 67 73 72 1 + 67 73 73 1 + 67 73 74 1 + 67 73 75 1 + 67 73 76 1 + 67 73 77 1 + 67 73 78 1 + 67 73 79 1 + 67 73 80 1 + 67 73 81 1 + 67 73 82 1 + 67 73 83 1 + 67 73 84 1 + 67 73 85 1 + 67 73 86 1 + 67 73 87 0.509102 + 67 74 40 0.106145 + 67 74 41 0.97359 + 67 74 42 1 + 67 74 43 1 + 67 74 44 1 + 67 74 45 1 + 67 74 46 1 + 67 74 47 1 + 67 74 48 1 + 67 74 49 1 + 67 74 50 1 + 67 74 51 1 + 67 74 52 1 + 67 74 53 1 + 67 74 54 1 + 67 74 55 1 + 67 74 56 1 + 67 74 57 1 + 67 74 58 1 + 67 74 59 1 + 67 74 60 1 + 67 74 61 1 + 67 74 62 1 + 67 74 63 1 + 67 74 64 1 + 67 74 65 1 + 67 74 66 1 + 67 74 67 1 + 67 74 68 1 + 67 74 69 1 + 67 74 70 1 + 67 74 71 1 + 67 74 72 1 + 67 74 73 1 + 67 74 74 1 + 67 74 75 1 + 67 74 76 1 + 67 74 77 1 + 67 74 78 1 + 67 74 79 1 + 67 74 80 1 + 67 74 81 1 + 67 74 82 1 + 67 74 83 1 + 67 74 84 1 + 67 74 85 1 + 67 74 86 0.97359 + 67 74 87 0.106145 + 67 75 41 0.598003 + 67 75 42 1 + 67 75 43 1 + 67 75 44 1 + 67 75 45 1 + 67 75 46 1 + 67 75 47 1 + 67 75 48 1 + 67 75 49 1 + 67 75 50 1 + 67 75 51 1 + 67 75 52 1 + 67 75 53 1 + 67 75 54 1 + 67 75 55 1 + 67 75 56 1 + 67 75 57 1 + 67 75 58 1 + 67 75 59 1 + 67 75 60 1 + 67 75 61 1 + 67 75 62 1 + 67 75 63 1 + 67 75 64 1 + 67 75 65 1 + 67 75 66 1 + 67 75 67 1 + 67 75 68 1 + 67 75 69 1 + 67 75 70 1 + 67 75 71 1 + 67 75 72 1 + 67 75 73 1 + 67 75 74 1 + 67 75 75 1 + 67 75 76 1 + 67 75 77 1 + 67 75 78 1 + 67 75 79 1 + 67 75 80 1 + 67 75 81 1 + 67 75 82 1 + 67 75 83 1 + 67 75 84 1 + 67 75 85 1 + 67 75 86 0.598003 + 67 76 41 0.106397 + 67 76 42 0.954076 + 67 76 43 1 + 67 76 44 1 + 67 76 45 1 + 67 76 46 1 + 67 76 47 1 + 67 76 48 1 + 67 76 49 1 + 67 76 50 1 + 67 76 51 1 + 67 76 52 1 + 67 76 53 1 + 67 76 54 1 + 67 76 55 1 + 67 76 56 1 + 67 76 57 1 + 67 76 58 1 + 67 76 59 1 + 67 76 60 1 + 67 76 61 1 + 67 76 62 1 + 67 76 63 1 + 67 76 64 1 + 67 76 65 1 + 67 76 66 1 + 67 76 67 1 + 67 76 68 1 + 67 76 69 1 + 67 76 70 1 + 67 76 71 1 + 67 76 72 1 + 67 76 73 1 + 67 76 74 1 + 67 76 75 1 + 67 76 76 1 + 67 76 77 1 + 67 76 78 1 + 67 76 79 1 + 67 76 80 1 + 67 76 81 1 + 67 76 82 1 + 67 76 83 1 + 67 76 84 1 + 67 76 85 0.954076 + 67 76 86 0.106397 + 67 77 42 0.462948 + 67 77 43 1 + 67 77 44 1 + 67 77 45 1 + 67 77 46 1 + 67 77 47 1 + 67 77 48 1 + 67 77 49 1 + 67 77 50 1 + 67 77 51 1 + 67 77 52 1 + 67 77 53 1 + 67 77 54 1 + 67 77 55 1 + 67 77 56 1 + 67 77 57 1 + 67 77 58 1 + 67 77 59 1 + 67 77 60 1 + 67 77 61 1 + 67 77 62 1 + 67 77 63 1 + 67 77 64 1 + 67 77 65 1 + 67 77 66 1 + 67 77 67 1 + 67 77 68 1 + 67 77 69 1 + 67 77 70 1 + 67 77 71 1 + 67 77 72 1 + 67 77 73 1 + 67 77 74 1 + 67 77 75 1 + 67 77 76 1 + 67 77 77 1 + 67 77 78 1 + 67 77 79 1 + 67 77 80 1 + 67 77 81 1 + 67 77 82 1 + 67 77 83 1 + 67 77 84 1 + 67 77 85 0.462948 + 67 78 42 0.0170305 + 67 78 43 0.783221 + 67 78 44 1 + 67 78 45 1 + 67 78 46 1 + 67 78 47 1 + 67 78 48 1 + 67 78 49 1 + 67 78 50 1 + 67 78 51 1 + 67 78 52 1 + 67 78 53 1 + 67 78 54 1 + 67 78 55 1 + 67 78 56 1 + 67 78 57 1 + 67 78 58 1 + 67 78 59 1 + 67 78 60 1 + 67 78 61 1 + 67 78 62 1 + 67 78 63 1 + 67 78 64 1 + 67 78 65 1 + 67 78 66 1 + 67 78 67 1 + 67 78 68 1 + 67 78 69 1 + 67 78 70 1 + 67 78 71 1 + 67 78 72 1 + 67 78 73 1 + 67 78 74 1 + 67 78 75 1 + 67 78 76 1 + 67 78 77 1 + 67 78 78 1 + 67 78 79 1 + 67 78 80 1 + 67 78 81 1 + 67 78 82 1 + 67 78 83 1 + 67 78 84 0.783221 + 67 78 85 0.0170305 + 67 79 43 0.134257 + 67 79 44 0.93166 + 67 79 45 1 + 67 79 46 1 + 67 79 47 1 + 67 79 48 1 + 67 79 49 1 + 67 79 50 1 + 67 79 51 1 + 67 79 52 1 + 67 79 53 1 + 67 79 54 1 + 67 79 55 1 + 67 79 56 1 + 67 79 57 1 + 67 79 58 1 + 67 79 59 1 + 67 79 60 1 + 67 79 61 1 + 67 79 62 1 + 67 79 63 1 + 67 79 64 1 + 67 79 65 1 + 67 79 66 1 + 67 79 67 1 + 67 79 68 1 + 67 79 69 1 + 67 79 70 1 + 67 79 71 1 + 67 79 72 1 + 67 79 73 1 + 67 79 74 1 + 67 79 75 1 + 67 79 76 1 + 67 79 77 1 + 67 79 78 1 + 67 79 79 1 + 67 79 80 1 + 67 79 81 1 + 67 79 82 1 + 67 79 83 0.93166 + 67 79 84 0.134257 + 67 80 44 0.27231 + 67 80 45 0.979426 + 67 80 46 1 + 67 80 47 1 + 67 80 48 1 + 67 80 49 1 + 67 80 50 1 + 67 80 51 1 + 67 80 52 1 + 67 80 53 1 + 67 80 54 1 + 67 80 55 1 + 67 80 56 1 + 67 80 57 1 + 67 80 58 1 + 67 80 59 1 + 67 80 60 1 + 67 80 61 1 + 67 80 62 1 + 67 80 63 1 + 67 80 64 1 + 67 80 65 1 + 67 80 66 1 + 67 80 67 1 + 67 80 68 1 + 67 80 69 1 + 67 80 70 1 + 67 80 71 1 + 67 80 72 1 + 67 80 73 1 + 67 80 74 1 + 67 80 75 1 + 67 80 76 1 + 67 80 77 1 + 67 80 78 1 + 67 80 79 1 + 67 80 80 1 + 67 80 81 1 + 67 80 82 0.979426 + 67 80 83 0.27231 + 67 81 45 0.358249 + 67 81 46 0.988806 + 67 81 47 1 + 67 81 48 1 + 67 81 49 1 + 67 81 50 1 + 67 81 51 1 + 67 81 52 1 + 67 81 53 1 + 67 81 54 1 + 67 81 55 1 + 67 81 56 1 + 67 81 57 1 + 67 81 58 1 + 67 81 59 1 + 67 81 60 1 + 67 81 61 1 + 67 81 62 1 + 67 81 63 1 + 67 81 64 1 + 67 81 65 1 + 67 81 66 1 + 67 81 67 1 + 67 81 68 1 + 67 81 69 1 + 67 81 70 1 + 67 81 71 1 + 67 81 72 1 + 67 81 73 1 + 67 81 74 1 + 67 81 75 1 + 67 81 76 1 + 67 81 77 1 + 67 81 78 1 + 67 81 79 1 + 67 81 80 1 + 67 81 81 0.988806 + 67 81 82 0.358249 + 67 82 46 0.358249 + 67 82 47 0.979426 + 67 82 48 1 + 67 82 49 1 + 67 82 50 1 + 67 82 51 1 + 67 82 52 1 + 67 82 53 1 + 67 82 54 1 + 67 82 55 1 + 67 82 56 1 + 67 82 57 1 + 67 82 58 1 + 67 82 59 1 + 67 82 60 1 + 67 82 61 1 + 67 82 62 1 + 67 82 63 1 + 67 82 64 1 + 67 82 65 1 + 67 82 66 1 + 67 82 67 1 + 67 82 68 1 + 67 82 69 1 + 67 82 70 1 + 67 82 71 1 + 67 82 72 1 + 67 82 73 1 + 67 82 74 1 + 67 82 75 1 + 67 82 76 1 + 67 82 77 1 + 67 82 78 1 + 67 82 79 1 + 67 82 80 0.979426 + 67 82 81 0.358249 + 67 83 47 0.27231 + 67 83 48 0.93166 + 67 83 49 1 + 67 83 50 1 + 67 83 51 1 + 67 83 52 1 + 67 83 53 1 + 67 83 54 1 + 67 83 55 1 + 67 83 56 1 + 67 83 57 1 + 67 83 58 1 + 67 83 59 1 + 67 83 60 1 + 67 83 61 1 + 67 83 62 1 + 67 83 63 1 + 67 83 64 1 + 67 83 65 1 + 67 83 66 1 + 67 83 67 1 + 67 83 68 1 + 67 83 69 1 + 67 83 70 1 + 67 83 71 1 + 67 83 72 1 + 67 83 73 1 + 67 83 74 1 + 67 83 75 1 + 67 83 76 1 + 67 83 77 1 + 67 83 78 1 + 67 83 79 0.93166 + 67 83 80 0.27231 + 67 84 48 0.134257 + 67 84 49 0.783221 + 67 84 50 1 + 67 84 51 1 + 67 84 52 1 + 67 84 53 1 + 67 84 54 1 + 67 84 55 1 + 67 84 56 1 + 67 84 57 1 + 67 84 58 1 + 67 84 59 1 + 67 84 60 1 + 67 84 61 1 + 67 84 62 1 + 67 84 63 1 + 67 84 64 1 + 67 84 65 1 + 67 84 66 1 + 67 84 67 1 + 67 84 68 1 + 67 84 69 1 + 67 84 70 1 + 67 84 71 1 + 67 84 72 1 + 67 84 73 1 + 67 84 74 1 + 67 84 75 1 + 67 84 76 1 + 67 84 77 1 + 67 84 78 0.783221 + 67 84 79 0.134257 + 67 85 49 0.0170305 + 67 85 50 0.462948 + 67 85 51 0.954076 + 67 85 52 1 + 67 85 53 1 + 67 85 54 1 + 67 85 55 1 + 67 85 56 1 + 67 85 57 1 + 67 85 58 1 + 67 85 59 1 + 67 85 60 1 + 67 85 61 1 + 67 85 62 1 + 67 85 63 1 + 67 85 64 1 + 67 85 65 1 + 67 85 66 1 + 67 85 67 1 + 67 85 68 1 + 67 85 69 1 + 67 85 70 1 + 67 85 71 1 + 67 85 72 1 + 67 85 73 1 + 67 85 74 1 + 67 85 75 1 + 67 85 76 0.954076 + 67 85 77 0.462948 + 67 85 78 0.0170305 + 67 86 51 0.106397 + 67 86 52 0.598003 + 67 86 53 0.97359 + 67 86 54 1 + 67 86 55 1 + 67 86 56 1 + 67 86 57 1 + 67 86 58 1 + 67 86 59 1 + 67 86 60 1 + 67 86 61 1 + 67 86 62 1 + 67 86 63 1 + 67 86 64 1 + 67 86 65 1 + 67 86 66 1 + 67 86 67 1 + 67 86 68 1 + 67 86 69 1 + 67 86 70 1 + 67 86 71 1 + 67 86 72 1 + 67 86 73 1 + 67 86 74 0.97359 + 67 86 75 0.598003 + 67 86 76 0.106397 + 67 87 53 0.106145 + 67 87 54 0.509102 + 67 87 55 0.880429 + 67 87 56 0.999993 + 67 87 57 1 + 67 87 58 1 + 67 87 59 1 + 67 87 60 1 + 67 87 61 1 + 67 87 62 1 + 67 87 63 1 + 67 87 64 1 + 67 87 65 1 + 67 87 66 1 + 67 87 67 1 + 67 87 68 1 + 67 87 69 1 + 67 87 70 1 + 67 87 71 0.999993 + 67 87 72 0.880429 + 67 87 73 0.509102 + 67 87 74 0.106145 + 67 88 55 0.00850155 + 67 88 56 0.221559 + 67 88 57 0.508892 + 67 88 58 0.752526 + 67 88 59 0.944121 + 67 88 60 0.999764 + 67 88 61 1 + 67 88 62 1 + 67 88 63 1 + 67 88 64 1 + 67 88 65 1 + 67 88 66 1 + 67 88 67 0.999764 + 67 88 68 0.944121 + 67 88 69 0.752526 + 67 88 70 0.508892 + 67 88 71 0.221559 + 67 88 72 0.00850155 + 67 89 59 0.00961546 + 67 89 60 0.11378 + 67 89 61 0.232735 + 67 89 62 0.311883 + 67 89 63 0.351365 + 67 89 64 0.351365 + 67 89 65 0.311883 + 67 89 66 0.232735 + 67 89 67 0.11378 + 67 89 68 0.00961546 + 68 38 60 0.00961546 + 68 38 61 0.0765779 + 68 38 62 0.153337 + 68 38 63 0.193067 + 68 38 64 0.193067 + 68 38 65 0.153337 + 68 38 66 0.0765779 + 68 38 67 0.00961546 + 68 39 56 0.0767609 + 68 39 57 0.345113 + 68 39 58 0.590371 + 68 39 59 0.792899 + 68 39 60 0.944121 + 68 39 61 0.99711 + 68 39 62 1 + 68 39 63 1 + 68 39 64 1 + 68 39 65 1 + 68 39 66 0.99711 + 68 39 67 0.944121 + 68 39 68 0.792899 + 68 39 69 0.590371 + 68 39 70 0.345113 + 68 39 71 0.0767609 + 68 40 53 0.0230554 + 68 40 54 0.338304 + 68 40 55 0.720869 + 68 40 56 0.979056 + 68 40 57 1 + 68 40 58 1 + 68 40 59 1 + 68 40 60 1 + 68 40 61 1 + 68 40 62 1 + 68 40 63 1 + 68 40 64 1 + 68 40 65 1 + 68 40 66 1 + 68 40 67 1 + 68 40 68 1 + 68 40 69 1 + 68 40 70 1 + 68 40 71 0.979056 + 68 40 72 0.720869 + 68 40 73 0.338304 + 68 40 74 0.0230554 + 68 41 51 0.0262369 + 68 41 52 0.42026 + 68 41 53 0.882677 + 68 41 54 1 + 68 41 55 1 + 68 41 56 1 + 68 41 57 1 + 68 41 58 1 + 68 41 59 1 + 68 41 60 1 + 68 41 61 1 + 68 41 62 1 + 68 41 63 1 + 68 41 64 1 + 68 41 65 1 + 68 41 66 1 + 68 41 67 1 + 68 41 68 1 + 68 41 69 1 + 68 41 70 1 + 68 41 71 1 + 68 41 72 1 + 68 41 73 1 + 68 41 74 0.882677 + 68 41 75 0.42026 + 68 41 76 0.0262369 + 68 42 49 0.000228244 + 68 42 50 0.28004 + 68 42 51 0.852122 + 68 42 52 1 + 68 42 53 1 + 68 42 54 1 + 68 42 55 1 + 68 42 56 1 + 68 42 57 1 + 68 42 58 1 + 68 42 59 1 + 68 42 60 1 + 68 42 61 1 + 68 42 62 1 + 68 42 63 1 + 68 42 64 1 + 68 42 65 1 + 68 42 66 1 + 68 42 67 1 + 68 42 68 1 + 68 42 69 1 + 68 42 70 1 + 68 42 71 1 + 68 42 72 1 + 68 42 73 1 + 68 42 74 1 + 68 42 75 1 + 68 42 76 0.852122 + 68 42 77 0.28004 + 68 42 78 0.000228244 + 68 43 48 0.0441313 + 68 43 49 0.606763 + 68 43 50 0.995674 + 68 43 51 1 + 68 43 52 1 + 68 43 53 1 + 68 43 54 1 + 68 43 55 1 + 68 43 56 1 + 68 43 57 1 + 68 43 58 1 + 68 43 59 1 + 68 43 60 1 + 68 43 61 1 + 68 43 62 1 + 68 43 63 1 + 68 43 64 1 + 68 43 65 1 + 68 43 66 1 + 68 43 67 1 + 68 43 68 1 + 68 43 69 1 + 68 43 70 1 + 68 43 71 1 + 68 43 72 1 + 68 43 73 1 + 68 43 74 1 + 68 43 75 1 + 68 43 76 1 + 68 43 77 0.995674 + 68 43 78 0.606763 + 68 43 79 0.0441313 + 68 44 47 0.133628 + 68 44 48 0.821374 + 68 44 49 1 + 68 44 50 1 + 68 44 51 1 + 68 44 52 1 + 68 44 53 1 + 68 44 54 1 + 68 44 55 1 + 68 44 56 1 + 68 44 57 1 + 68 44 58 1 + 68 44 59 1 + 68 44 60 1 + 68 44 61 1 + 68 44 62 1 + 68 44 63 1 + 68 44 64 1 + 68 44 65 1 + 68 44 66 1 + 68 44 67 1 + 68 44 68 1 + 68 44 69 1 + 68 44 70 1 + 68 44 71 1 + 68 44 72 1 + 68 44 73 1 + 68 44 74 1 + 68 44 75 1 + 68 44 76 1 + 68 44 77 1 + 68 44 78 1 + 68 44 79 0.821374 + 68 44 80 0.133628 + 68 45 46 0.196147 + 68 45 47 0.909115 + 68 45 48 1 + 68 45 49 1 + 68 45 50 1 + 68 45 51 1 + 68 45 52 1 + 68 45 53 1 + 68 45 54 1 + 68 45 55 1 + 68 45 56 1 + 68 45 57 1 + 68 45 58 1 + 68 45 59 1 + 68 45 60 1 + 68 45 61 1 + 68 45 62 1 + 68 45 63 1 + 68 45 64 1 + 68 45 65 1 + 68 45 66 1 + 68 45 67 1 + 68 45 68 1 + 68 45 69 1 + 68 45 70 1 + 68 45 71 1 + 68 45 72 1 + 68 45 73 1 + 68 45 74 1 + 68 45 75 1 + 68 45 76 1 + 68 45 77 1 + 68 45 78 1 + 68 45 79 1 + 68 45 80 0.909115 + 68 45 81 0.196147 + 68 46 45 0.196147 + 68 46 46 0.931469 + 68 46 47 1 + 68 46 48 1 + 68 46 49 1 + 68 46 50 1 + 68 46 51 1 + 68 46 52 1 + 68 46 53 1 + 68 46 54 1 + 68 46 55 1 + 68 46 56 1 + 68 46 57 1 + 68 46 58 1 + 68 46 59 1 + 68 46 60 1 + 68 46 61 1 + 68 46 62 1 + 68 46 63 1 + 68 46 64 1 + 68 46 65 1 + 68 46 66 1 + 68 46 67 1 + 68 46 68 1 + 68 46 69 1 + 68 46 70 1 + 68 46 71 1 + 68 46 72 1 + 68 46 73 1 + 68 46 74 1 + 68 46 75 1 + 68 46 76 1 + 68 46 77 1 + 68 46 78 1 + 68 46 79 1 + 68 46 80 1 + 68 46 81 0.931469 + 68 46 82 0.196147 + 68 47 44 0.133628 + 68 47 45 0.909115 + 68 47 46 1 + 68 47 47 1 + 68 47 48 1 + 68 47 49 1 + 68 47 50 1 + 68 47 51 1 + 68 47 52 1 + 68 47 53 1 + 68 47 54 1 + 68 47 55 1 + 68 47 56 1 + 68 47 57 1 + 68 47 58 1 + 68 47 59 1 + 68 47 60 1 + 68 47 61 1 + 68 47 62 1 + 68 47 63 1 + 68 47 64 1 + 68 47 65 1 + 68 47 66 1 + 68 47 67 1 + 68 47 68 1 + 68 47 69 1 + 68 47 70 1 + 68 47 71 1 + 68 47 72 1 + 68 47 73 1 + 68 47 74 1 + 68 47 75 1 + 68 47 76 1 + 68 47 77 1 + 68 47 78 1 + 68 47 79 1 + 68 47 80 1 + 68 47 81 1 + 68 47 82 0.909115 + 68 47 83 0.133628 + 68 48 43 0.0441313 + 68 48 44 0.821374 + 68 48 45 1 + 68 48 46 1 + 68 48 47 1 + 68 48 48 1 + 68 48 49 1 + 68 48 50 1 + 68 48 51 1 + 68 48 52 1 + 68 48 53 1 + 68 48 54 1 + 68 48 55 1 + 68 48 56 1 + 68 48 57 1 + 68 48 58 1 + 68 48 59 1 + 68 48 60 1 + 68 48 61 1 + 68 48 62 1 + 68 48 63 1 + 68 48 64 1 + 68 48 65 1 + 68 48 66 1 + 68 48 67 1 + 68 48 68 1 + 68 48 69 1 + 68 48 70 1 + 68 48 71 1 + 68 48 72 1 + 68 48 73 1 + 68 48 74 1 + 68 48 75 1 + 68 48 76 1 + 68 48 77 1 + 68 48 78 1 + 68 48 79 1 + 68 48 80 1 + 68 48 81 1 + 68 48 82 1 + 68 48 83 0.821374 + 68 48 84 0.0441313 + 68 49 42 0.000228244 + 68 49 43 0.606763 + 68 49 44 1 + 68 49 45 1 + 68 49 46 1 + 68 49 47 1 + 68 49 48 1 + 68 49 49 1 + 68 49 50 1 + 68 49 51 1 + 68 49 52 1 + 68 49 53 1 + 68 49 54 1 + 68 49 55 1 + 68 49 56 1 + 68 49 57 1 + 68 49 58 1 + 68 49 59 1 + 68 49 60 1 + 68 49 61 1 + 68 49 62 1 + 68 49 63 1 + 68 49 64 1 + 68 49 65 1 + 68 49 66 1 + 68 49 67 1 + 68 49 68 1 + 68 49 69 1 + 68 49 70 1 + 68 49 71 1 + 68 49 72 1 + 68 49 73 1 + 68 49 74 1 + 68 49 75 1 + 68 49 76 1 + 68 49 77 1 + 68 49 78 1 + 68 49 79 1 + 68 49 80 1 + 68 49 81 1 + 68 49 82 1 + 68 49 83 1 + 68 49 84 0.606763 + 68 49 85 0.000228244 + 68 50 42 0.28004 + 68 50 43 0.995674 + 68 50 44 1 + 68 50 45 1 + 68 50 46 1 + 68 50 47 1 + 68 50 48 1 + 68 50 49 1 + 68 50 50 1 + 68 50 51 1 + 68 50 52 1 + 68 50 53 1 + 68 50 54 1 + 68 50 55 1 + 68 50 56 1 + 68 50 57 1 + 68 50 58 1 + 68 50 59 1 + 68 50 60 1 + 68 50 61 1 + 68 50 62 1 + 68 50 63 1 + 68 50 64 1 + 68 50 65 1 + 68 50 66 1 + 68 50 67 1 + 68 50 68 1 + 68 50 69 1 + 68 50 70 1 + 68 50 71 1 + 68 50 72 1 + 68 50 73 1 + 68 50 74 1 + 68 50 75 1 + 68 50 76 1 + 68 50 77 1 + 68 50 78 1 + 68 50 79 1 + 68 50 80 1 + 68 50 81 1 + 68 50 82 1 + 68 50 83 1 + 68 50 84 0.995674 + 68 50 85 0.28004 + 68 51 41 0.0262369 + 68 51 42 0.852122 + 68 51 43 1 + 68 51 44 1 + 68 51 45 1 + 68 51 46 1 + 68 51 47 1 + 68 51 48 1 + 68 51 49 1 + 68 51 50 1 + 68 51 51 1 + 68 51 52 1 + 68 51 53 1 + 68 51 54 1 + 68 51 55 1 + 68 51 56 1 + 68 51 57 1 + 68 51 58 1 + 68 51 59 1 + 68 51 60 1 + 68 51 61 1 + 68 51 62 1 + 68 51 63 1 + 68 51 64 1 + 68 51 65 1 + 68 51 66 1 + 68 51 67 1 + 68 51 68 1 + 68 51 69 1 + 68 51 70 1 + 68 51 71 1 + 68 51 72 1 + 68 51 73 1 + 68 51 74 1 + 68 51 75 1 + 68 51 76 1 + 68 51 77 1 + 68 51 78 1 + 68 51 79 1 + 68 51 80 1 + 68 51 81 1 + 68 51 82 1 + 68 51 83 1 + 68 51 84 1 + 68 51 85 0.852122 + 68 51 86 0.0262369 + 68 52 41 0.42026 + 68 52 42 1 + 68 52 43 1 + 68 52 44 1 + 68 52 45 1 + 68 52 46 1 + 68 52 47 1 + 68 52 48 1 + 68 52 49 1 + 68 52 50 1 + 68 52 51 1 + 68 52 52 1 + 68 52 53 1 + 68 52 54 1 + 68 52 55 1 + 68 52 56 1 + 68 52 57 1 + 68 52 58 1 + 68 52 59 1 + 68 52 60 1 + 68 52 61 1 + 68 52 62 1 + 68 52 63 1 + 68 52 64 1 + 68 52 65 1 + 68 52 66 1 + 68 52 67 1 + 68 52 68 1 + 68 52 69 1 + 68 52 70 1 + 68 52 71 1 + 68 52 72 1 + 68 52 73 1 + 68 52 74 1 + 68 52 75 1 + 68 52 76 1 + 68 52 77 1 + 68 52 78 1 + 68 52 79 1 + 68 52 80 1 + 68 52 81 1 + 68 52 82 1 + 68 52 83 1 + 68 52 84 1 + 68 52 85 1 + 68 52 86 0.42026 + 68 53 40 0.0230554 + 68 53 41 0.882677 + 68 53 42 1 + 68 53 43 1 + 68 53 44 1 + 68 53 45 1 + 68 53 46 1 + 68 53 47 1 + 68 53 48 1 + 68 53 49 1 + 68 53 50 1 + 68 53 51 1 + 68 53 52 1 + 68 53 53 1 + 68 53 54 1 + 68 53 55 1 + 68 53 56 1 + 68 53 57 1 + 68 53 58 1 + 68 53 59 1 + 68 53 60 1 + 68 53 61 1 + 68 53 62 1 + 68 53 63 1 + 68 53 64 1 + 68 53 65 1 + 68 53 66 1 + 68 53 67 1 + 68 53 68 1 + 68 53 69 1 + 68 53 70 1 + 68 53 71 1 + 68 53 72 1 + 68 53 73 1 + 68 53 74 1 + 68 53 75 1 + 68 53 76 1 + 68 53 77 1 + 68 53 78 1 + 68 53 79 1 + 68 53 80 1 + 68 53 81 1 + 68 53 82 1 + 68 53 83 1 + 68 53 84 1 + 68 53 85 1 + 68 53 86 0.882677 + 68 53 87 0.0230554 + 68 54 40 0.338304 + 68 54 41 1 + 68 54 42 1 + 68 54 43 1 + 68 54 44 1 + 68 54 45 1 + 68 54 46 1 + 68 54 47 1 + 68 54 48 1 + 68 54 49 1 + 68 54 50 1 + 68 54 51 1 + 68 54 52 1 + 68 54 53 1 + 68 54 54 1 + 68 54 55 1 + 68 54 56 1 + 68 54 57 1 + 68 54 58 1 + 68 54 59 1 + 68 54 60 1 + 68 54 61 1 + 68 54 62 1 + 68 54 63 1 + 68 54 64 1 + 68 54 65 1 + 68 54 66 1 + 68 54 67 1 + 68 54 68 1 + 68 54 69 1 + 68 54 70 1 + 68 54 71 1 + 68 54 72 1 + 68 54 73 1 + 68 54 74 1 + 68 54 75 1 + 68 54 76 1 + 68 54 77 1 + 68 54 78 1 + 68 54 79 1 + 68 54 80 1 + 68 54 81 1 + 68 54 82 1 + 68 54 83 1 + 68 54 84 1 + 68 54 85 1 + 68 54 86 1 + 68 54 87 0.338304 + 68 55 40 0.720869 + 68 55 41 1 + 68 55 42 1 + 68 55 43 1 + 68 55 44 1 + 68 55 45 1 + 68 55 46 1 + 68 55 47 1 + 68 55 48 1 + 68 55 49 1 + 68 55 50 1 + 68 55 51 1 + 68 55 52 1 + 68 55 53 1 + 68 55 54 1 + 68 55 55 1 + 68 55 56 1 + 68 55 57 1 + 68 55 58 1 + 68 55 59 1 + 68 55 60 1 + 68 55 61 1 + 68 55 62 1 + 68 55 63 1 + 68 55 64 1 + 68 55 65 1 + 68 55 66 1 + 68 55 67 1 + 68 55 68 1 + 68 55 69 1 + 68 55 70 1 + 68 55 71 1 + 68 55 72 1 + 68 55 73 1 + 68 55 74 1 + 68 55 75 1 + 68 55 76 1 + 68 55 77 1 + 68 55 78 1 + 68 55 79 1 + 68 55 80 1 + 68 55 81 1 + 68 55 82 1 + 68 55 83 1 + 68 55 84 1 + 68 55 85 1 + 68 55 86 1 + 68 55 87 0.720869 + 68 56 39 0.0767609 + 68 56 40 0.979056 + 68 56 41 1 + 68 56 42 1 + 68 56 43 1 + 68 56 44 1 + 68 56 45 1 + 68 56 46 1 + 68 56 47 1 + 68 56 48 1 + 68 56 49 1 + 68 56 50 1 + 68 56 51 1 + 68 56 52 1 + 68 56 53 1 + 68 56 54 1 + 68 56 55 1 + 68 56 56 1 + 68 56 57 1 + 68 56 58 1 + 68 56 59 1 + 68 56 60 1 + 68 56 61 1 + 68 56 62 1 + 68 56 63 1 + 68 56 64 1 + 68 56 65 1 + 68 56 66 1 + 68 56 67 1 + 68 56 68 1 + 68 56 69 1 + 68 56 70 1 + 68 56 71 1 + 68 56 72 1 + 68 56 73 1 + 68 56 74 1 + 68 56 75 1 + 68 56 76 1 + 68 56 77 1 + 68 56 78 1 + 68 56 79 1 + 68 56 80 1 + 68 56 81 1 + 68 56 82 1 + 68 56 83 1 + 68 56 84 1 + 68 56 85 1 + 68 56 86 1 + 68 56 87 0.979056 + 68 56 88 0.0767609 + 68 57 39 0.345113 + 68 57 40 1 + 68 57 41 1 + 68 57 42 1 + 68 57 43 1 + 68 57 44 1 + 68 57 45 1 + 68 57 46 1 + 68 57 47 1 + 68 57 48 1 + 68 57 49 1 + 68 57 50 1 + 68 57 51 1 + 68 57 52 1 + 68 57 53 1 + 68 57 54 1 + 68 57 55 1 + 68 57 56 1 + 68 57 57 1 + 68 57 58 1 + 68 57 59 1 + 68 57 60 1 + 68 57 61 1 + 68 57 62 1 + 68 57 63 1 + 68 57 64 1 + 68 57 65 1 + 68 57 66 1 + 68 57 67 1 + 68 57 68 1 + 68 57 69 1 + 68 57 70 1 + 68 57 71 1 + 68 57 72 1 + 68 57 73 1 + 68 57 74 1 + 68 57 75 1 + 68 57 76 1 + 68 57 77 1 + 68 57 78 1 + 68 57 79 1 + 68 57 80 1 + 68 57 81 1 + 68 57 82 1 + 68 57 83 1 + 68 57 84 1 + 68 57 85 1 + 68 57 86 1 + 68 57 87 1 + 68 57 88 0.345113 + 68 58 39 0.590371 + 68 58 40 1 + 68 58 41 1 + 68 58 42 1 + 68 58 43 1 + 68 58 44 1 + 68 58 45 1 + 68 58 46 1 + 68 58 47 1 + 68 58 48 1 + 68 58 49 1 + 68 58 50 1 + 68 58 51 1 + 68 58 52 1 + 68 58 53 1 + 68 58 54 1 + 68 58 55 1 + 68 58 56 1 + 68 58 57 1 + 68 58 58 1 + 68 58 59 1 + 68 58 60 1 + 68 58 61 1 + 68 58 62 1 + 68 58 63 1 + 68 58 64 1 + 68 58 65 1 + 68 58 66 1 + 68 58 67 1 + 68 58 68 1 + 68 58 69 1 + 68 58 70 1 + 68 58 71 1 + 68 58 72 1 + 68 58 73 1 + 68 58 74 1 + 68 58 75 1 + 68 58 76 1 + 68 58 77 1 + 68 58 78 1 + 68 58 79 1 + 68 58 80 1 + 68 58 81 1 + 68 58 82 1 + 68 58 83 1 + 68 58 84 1 + 68 58 85 1 + 68 58 86 1 + 68 58 87 1 + 68 58 88 0.590371 + 68 59 39 0.792899 + 68 59 40 1 + 68 59 41 1 + 68 59 42 1 + 68 59 43 1 + 68 59 44 1 + 68 59 45 1 + 68 59 46 1 + 68 59 47 1 + 68 59 48 1 + 68 59 49 1 + 68 59 50 1 + 68 59 51 1 + 68 59 52 1 + 68 59 53 1 + 68 59 54 1 + 68 59 55 1 + 68 59 56 1 + 68 59 57 1 + 68 59 58 1 + 68 59 59 1 + 68 59 60 1 + 68 59 61 1 + 68 59 62 1 + 68 59 63 1 + 68 59 64 1 + 68 59 65 1 + 68 59 66 1 + 68 59 67 1 + 68 59 68 1 + 68 59 69 1 + 68 59 70 1 + 68 59 71 1 + 68 59 72 1 + 68 59 73 1 + 68 59 74 1 + 68 59 75 1 + 68 59 76 1 + 68 59 77 1 + 68 59 78 1 + 68 59 79 1 + 68 59 80 1 + 68 59 81 1 + 68 59 82 1 + 68 59 83 1 + 68 59 84 1 + 68 59 85 1 + 68 59 86 1 + 68 59 87 1 + 68 59 88 0.792899 + 68 60 38 0.00961546 + 68 60 39 0.944121 + 68 60 40 1 + 68 60 41 1 + 68 60 42 1 + 68 60 43 1 + 68 60 44 1 + 68 60 45 1 + 68 60 46 1 + 68 60 47 1 + 68 60 48 1 + 68 60 49 1 + 68 60 50 1 + 68 60 51 1 + 68 60 52 1 + 68 60 53 1 + 68 60 54 1 + 68 60 55 1 + 68 60 56 1 + 68 60 57 1 + 68 60 58 1 + 68 60 59 1 + 68 60 60 1 + 68 60 61 1 + 68 60 62 1 + 68 60 63 1 + 68 60 64 1 + 68 60 65 1 + 68 60 66 1 + 68 60 67 1 + 68 60 68 1 + 68 60 69 1 + 68 60 70 1 + 68 60 71 1 + 68 60 72 1 + 68 60 73 1 + 68 60 74 1 + 68 60 75 1 + 68 60 76 1 + 68 60 77 1 + 68 60 78 1 + 68 60 79 1 + 68 60 80 1 + 68 60 81 1 + 68 60 82 1 + 68 60 83 1 + 68 60 84 1 + 68 60 85 1 + 68 60 86 1 + 68 60 87 1 + 68 60 88 0.944121 + 68 60 89 0.00961546 + 68 61 38 0.0765779 + 68 61 39 0.99711 + 68 61 40 1 + 68 61 41 1 + 68 61 42 1 + 68 61 43 1 + 68 61 44 1 + 68 61 45 1 + 68 61 46 1 + 68 61 47 1 + 68 61 48 1 + 68 61 49 1 + 68 61 50 1 + 68 61 51 1 + 68 61 52 1 + 68 61 53 1 + 68 61 54 1 + 68 61 55 1 + 68 61 56 1 + 68 61 57 1 + 68 61 58 1 + 68 61 59 1 + 68 61 60 1 + 68 61 61 1 + 68 61 62 1 + 68 61 63 1 + 68 61 64 1 + 68 61 65 1 + 68 61 66 1 + 68 61 67 1 + 68 61 68 1 + 68 61 69 1 + 68 61 70 1 + 68 61 71 1 + 68 61 72 1 + 68 61 73 1 + 68 61 74 1 + 68 61 75 1 + 68 61 76 1 + 68 61 77 1 + 68 61 78 1 + 68 61 79 1 + 68 61 80 1 + 68 61 81 1 + 68 61 82 1 + 68 61 83 1 + 68 61 84 1 + 68 61 85 1 + 68 61 86 1 + 68 61 87 1 + 68 61 88 0.99711 + 68 61 89 0.0765779 + 68 62 38 0.153337 + 68 62 39 1 + 68 62 40 1 + 68 62 41 1 + 68 62 42 1 + 68 62 43 1 + 68 62 44 1 + 68 62 45 1 + 68 62 46 1 + 68 62 47 1 + 68 62 48 1 + 68 62 49 1 + 68 62 50 1 + 68 62 51 1 + 68 62 52 1 + 68 62 53 1 + 68 62 54 1 + 68 62 55 1 + 68 62 56 1 + 68 62 57 1 + 68 62 58 1 + 68 62 59 1 + 68 62 60 1 + 68 62 61 1 + 68 62 62 1 + 68 62 63 1 + 68 62 64 1 + 68 62 65 1 + 68 62 66 1 + 68 62 67 1 + 68 62 68 1 + 68 62 69 1 + 68 62 70 1 + 68 62 71 1 + 68 62 72 1 + 68 62 73 1 + 68 62 74 1 + 68 62 75 1 + 68 62 76 1 + 68 62 77 1 + 68 62 78 1 + 68 62 79 1 + 68 62 80 1 + 68 62 81 1 + 68 62 82 1 + 68 62 83 1 + 68 62 84 1 + 68 62 85 1 + 68 62 86 1 + 68 62 87 1 + 68 62 88 1 + 68 62 89 0.153337 + 68 63 38 0.193067 + 68 63 39 1 + 68 63 40 1 + 68 63 41 1 + 68 63 42 1 + 68 63 43 1 + 68 63 44 1 + 68 63 45 1 + 68 63 46 1 + 68 63 47 1 + 68 63 48 1 + 68 63 49 1 + 68 63 50 1 + 68 63 51 1 + 68 63 52 1 + 68 63 53 1 + 68 63 54 1 + 68 63 55 1 + 68 63 56 1 + 68 63 57 1 + 68 63 58 1 + 68 63 59 1 + 68 63 60 1 + 68 63 61 1 + 68 63 62 1 + 68 63 63 1 + 68 63 64 1 + 68 63 65 1 + 68 63 66 1 + 68 63 67 1 + 68 63 68 1 + 68 63 69 1 + 68 63 70 1 + 68 63 71 1 + 68 63 72 1 + 68 63 73 1 + 68 63 74 1 + 68 63 75 1 + 68 63 76 1 + 68 63 77 1 + 68 63 78 1 + 68 63 79 1 + 68 63 80 1 + 68 63 81 1 + 68 63 82 1 + 68 63 83 1 + 68 63 84 1 + 68 63 85 1 + 68 63 86 1 + 68 63 87 1 + 68 63 88 1 + 68 63 89 0.193067 + 68 64 38 0.193067 + 68 64 39 1 + 68 64 40 1 + 68 64 41 1 + 68 64 42 1 + 68 64 43 1 + 68 64 44 1 + 68 64 45 1 + 68 64 46 1 + 68 64 47 1 + 68 64 48 1 + 68 64 49 1 + 68 64 50 1 + 68 64 51 1 + 68 64 52 1 + 68 64 53 1 + 68 64 54 1 + 68 64 55 1 + 68 64 56 1 + 68 64 57 1 + 68 64 58 1 + 68 64 59 1 + 68 64 60 1 + 68 64 61 1 + 68 64 62 1 + 68 64 63 1 + 68 64 64 1 + 68 64 65 1 + 68 64 66 1 + 68 64 67 1 + 68 64 68 1 + 68 64 69 1 + 68 64 70 1 + 68 64 71 1 + 68 64 72 1 + 68 64 73 1 + 68 64 74 1 + 68 64 75 1 + 68 64 76 1 + 68 64 77 1 + 68 64 78 1 + 68 64 79 1 + 68 64 80 1 + 68 64 81 1 + 68 64 82 1 + 68 64 83 1 + 68 64 84 1 + 68 64 85 1 + 68 64 86 1 + 68 64 87 1 + 68 64 88 1 + 68 64 89 0.193067 + 68 65 38 0.153337 + 68 65 39 1 + 68 65 40 1 + 68 65 41 1 + 68 65 42 1 + 68 65 43 1 + 68 65 44 1 + 68 65 45 1 + 68 65 46 1 + 68 65 47 1 + 68 65 48 1 + 68 65 49 1 + 68 65 50 1 + 68 65 51 1 + 68 65 52 1 + 68 65 53 1 + 68 65 54 1 + 68 65 55 1 + 68 65 56 1 + 68 65 57 1 + 68 65 58 1 + 68 65 59 1 + 68 65 60 1 + 68 65 61 1 + 68 65 62 1 + 68 65 63 1 + 68 65 64 1 + 68 65 65 1 + 68 65 66 1 + 68 65 67 1 + 68 65 68 1 + 68 65 69 1 + 68 65 70 1 + 68 65 71 1 + 68 65 72 1 + 68 65 73 1 + 68 65 74 1 + 68 65 75 1 + 68 65 76 1 + 68 65 77 1 + 68 65 78 1 + 68 65 79 1 + 68 65 80 1 + 68 65 81 1 + 68 65 82 1 + 68 65 83 1 + 68 65 84 1 + 68 65 85 1 + 68 65 86 1 + 68 65 87 1 + 68 65 88 1 + 68 65 89 0.153337 + 68 66 38 0.0765779 + 68 66 39 0.99711 + 68 66 40 1 + 68 66 41 1 + 68 66 42 1 + 68 66 43 1 + 68 66 44 1 + 68 66 45 1 + 68 66 46 1 + 68 66 47 1 + 68 66 48 1 + 68 66 49 1 + 68 66 50 1 + 68 66 51 1 + 68 66 52 1 + 68 66 53 1 + 68 66 54 1 + 68 66 55 1 + 68 66 56 1 + 68 66 57 1 + 68 66 58 1 + 68 66 59 1 + 68 66 60 1 + 68 66 61 1 + 68 66 62 1 + 68 66 63 1 + 68 66 64 1 + 68 66 65 1 + 68 66 66 1 + 68 66 67 1 + 68 66 68 1 + 68 66 69 1 + 68 66 70 1 + 68 66 71 1 + 68 66 72 1 + 68 66 73 1 + 68 66 74 1 + 68 66 75 1 + 68 66 76 1 + 68 66 77 1 + 68 66 78 1 + 68 66 79 1 + 68 66 80 1 + 68 66 81 1 + 68 66 82 1 + 68 66 83 1 + 68 66 84 1 + 68 66 85 1 + 68 66 86 1 + 68 66 87 1 + 68 66 88 0.99711 + 68 66 89 0.0765779 + 68 67 38 0.00961546 + 68 67 39 0.944121 + 68 67 40 1 + 68 67 41 1 + 68 67 42 1 + 68 67 43 1 + 68 67 44 1 + 68 67 45 1 + 68 67 46 1 + 68 67 47 1 + 68 67 48 1 + 68 67 49 1 + 68 67 50 1 + 68 67 51 1 + 68 67 52 1 + 68 67 53 1 + 68 67 54 1 + 68 67 55 1 + 68 67 56 1 + 68 67 57 1 + 68 67 58 1 + 68 67 59 1 + 68 67 60 1 + 68 67 61 1 + 68 67 62 1 + 68 67 63 1 + 68 67 64 1 + 68 67 65 1 + 68 67 66 1 + 68 67 67 1 + 68 67 68 1 + 68 67 69 1 + 68 67 70 1 + 68 67 71 1 + 68 67 72 1 + 68 67 73 1 + 68 67 74 1 + 68 67 75 1 + 68 67 76 1 + 68 67 77 1 + 68 67 78 1 + 68 67 79 1 + 68 67 80 1 + 68 67 81 1 + 68 67 82 1 + 68 67 83 1 + 68 67 84 1 + 68 67 85 1 + 68 67 86 1 + 68 67 87 1 + 68 67 88 0.944121 + 68 67 89 0.00961546 + 68 68 39 0.792899 + 68 68 40 1 + 68 68 41 1 + 68 68 42 1 + 68 68 43 1 + 68 68 44 1 + 68 68 45 1 + 68 68 46 1 + 68 68 47 1 + 68 68 48 1 + 68 68 49 1 + 68 68 50 1 + 68 68 51 1 + 68 68 52 1 + 68 68 53 1 + 68 68 54 1 + 68 68 55 1 + 68 68 56 1 + 68 68 57 1 + 68 68 58 1 + 68 68 59 1 + 68 68 60 1 + 68 68 61 1 + 68 68 62 1 + 68 68 63 1 + 68 68 64 1 + 68 68 65 1 + 68 68 66 1 + 68 68 67 1 + 68 68 68 1 + 68 68 69 1 + 68 68 70 1 + 68 68 71 1 + 68 68 72 1 + 68 68 73 1 + 68 68 74 1 + 68 68 75 1 + 68 68 76 1 + 68 68 77 1 + 68 68 78 1 + 68 68 79 1 + 68 68 80 1 + 68 68 81 1 + 68 68 82 1 + 68 68 83 1 + 68 68 84 1 + 68 68 85 1 + 68 68 86 1 + 68 68 87 1 + 68 68 88 0.792899 + 68 69 39 0.590371 + 68 69 40 1 + 68 69 41 1 + 68 69 42 1 + 68 69 43 1 + 68 69 44 1 + 68 69 45 1 + 68 69 46 1 + 68 69 47 1 + 68 69 48 1 + 68 69 49 1 + 68 69 50 1 + 68 69 51 1 + 68 69 52 1 + 68 69 53 1 + 68 69 54 1 + 68 69 55 1 + 68 69 56 1 + 68 69 57 1 + 68 69 58 1 + 68 69 59 1 + 68 69 60 1 + 68 69 61 1 + 68 69 62 1 + 68 69 63 1 + 68 69 64 1 + 68 69 65 1 + 68 69 66 1 + 68 69 67 1 + 68 69 68 1 + 68 69 69 1 + 68 69 70 1 + 68 69 71 1 + 68 69 72 1 + 68 69 73 1 + 68 69 74 1 + 68 69 75 1 + 68 69 76 1 + 68 69 77 1 + 68 69 78 1 + 68 69 79 1 + 68 69 80 1 + 68 69 81 1 + 68 69 82 1 + 68 69 83 1 + 68 69 84 1 + 68 69 85 1 + 68 69 86 1 + 68 69 87 1 + 68 69 88 0.590371 + 68 70 39 0.345113 + 68 70 40 1 + 68 70 41 1 + 68 70 42 1 + 68 70 43 1 + 68 70 44 1 + 68 70 45 1 + 68 70 46 1 + 68 70 47 1 + 68 70 48 1 + 68 70 49 1 + 68 70 50 1 + 68 70 51 1 + 68 70 52 1 + 68 70 53 1 + 68 70 54 1 + 68 70 55 1 + 68 70 56 1 + 68 70 57 1 + 68 70 58 1 + 68 70 59 1 + 68 70 60 1 + 68 70 61 1 + 68 70 62 1 + 68 70 63 1 + 68 70 64 1 + 68 70 65 1 + 68 70 66 1 + 68 70 67 1 + 68 70 68 1 + 68 70 69 1 + 68 70 70 1 + 68 70 71 1 + 68 70 72 1 + 68 70 73 1 + 68 70 74 1 + 68 70 75 1 + 68 70 76 1 + 68 70 77 1 + 68 70 78 1 + 68 70 79 1 + 68 70 80 1 + 68 70 81 1 + 68 70 82 1 + 68 70 83 1 + 68 70 84 1 + 68 70 85 1 + 68 70 86 1 + 68 70 87 1 + 68 70 88 0.345113 + 68 71 39 0.0767609 + 68 71 40 0.979056 + 68 71 41 1 + 68 71 42 1 + 68 71 43 1 + 68 71 44 1 + 68 71 45 1 + 68 71 46 1 + 68 71 47 1 + 68 71 48 1 + 68 71 49 1 + 68 71 50 1 + 68 71 51 1 + 68 71 52 1 + 68 71 53 1 + 68 71 54 1 + 68 71 55 1 + 68 71 56 1 + 68 71 57 1 + 68 71 58 1 + 68 71 59 1 + 68 71 60 1 + 68 71 61 1 + 68 71 62 1 + 68 71 63 1 + 68 71 64 1 + 68 71 65 1 + 68 71 66 1 + 68 71 67 1 + 68 71 68 1 + 68 71 69 1 + 68 71 70 1 + 68 71 71 1 + 68 71 72 1 + 68 71 73 1 + 68 71 74 1 + 68 71 75 1 + 68 71 76 1 + 68 71 77 1 + 68 71 78 1 + 68 71 79 1 + 68 71 80 1 + 68 71 81 1 + 68 71 82 1 + 68 71 83 1 + 68 71 84 1 + 68 71 85 1 + 68 71 86 1 + 68 71 87 0.979056 + 68 71 88 0.0767609 + 68 72 40 0.720869 + 68 72 41 1 + 68 72 42 1 + 68 72 43 1 + 68 72 44 1 + 68 72 45 1 + 68 72 46 1 + 68 72 47 1 + 68 72 48 1 + 68 72 49 1 + 68 72 50 1 + 68 72 51 1 + 68 72 52 1 + 68 72 53 1 + 68 72 54 1 + 68 72 55 1 + 68 72 56 1 + 68 72 57 1 + 68 72 58 1 + 68 72 59 1 + 68 72 60 1 + 68 72 61 1 + 68 72 62 1 + 68 72 63 1 + 68 72 64 1 + 68 72 65 1 + 68 72 66 1 + 68 72 67 1 + 68 72 68 1 + 68 72 69 1 + 68 72 70 1 + 68 72 71 1 + 68 72 72 1 + 68 72 73 1 + 68 72 74 1 + 68 72 75 1 + 68 72 76 1 + 68 72 77 1 + 68 72 78 1 + 68 72 79 1 + 68 72 80 1 + 68 72 81 1 + 68 72 82 1 + 68 72 83 1 + 68 72 84 1 + 68 72 85 1 + 68 72 86 1 + 68 72 87 0.720869 + 68 73 40 0.338304 + 68 73 41 1 + 68 73 42 1 + 68 73 43 1 + 68 73 44 1 + 68 73 45 1 + 68 73 46 1 + 68 73 47 1 + 68 73 48 1 + 68 73 49 1 + 68 73 50 1 + 68 73 51 1 + 68 73 52 1 + 68 73 53 1 + 68 73 54 1 + 68 73 55 1 + 68 73 56 1 + 68 73 57 1 + 68 73 58 1 + 68 73 59 1 + 68 73 60 1 + 68 73 61 1 + 68 73 62 1 + 68 73 63 1 + 68 73 64 1 + 68 73 65 1 + 68 73 66 1 + 68 73 67 1 + 68 73 68 1 + 68 73 69 1 + 68 73 70 1 + 68 73 71 1 + 68 73 72 1 + 68 73 73 1 + 68 73 74 1 + 68 73 75 1 + 68 73 76 1 + 68 73 77 1 + 68 73 78 1 + 68 73 79 1 + 68 73 80 1 + 68 73 81 1 + 68 73 82 1 + 68 73 83 1 + 68 73 84 1 + 68 73 85 1 + 68 73 86 1 + 68 73 87 0.338304 + 68 74 40 0.0230554 + 68 74 41 0.882677 + 68 74 42 1 + 68 74 43 1 + 68 74 44 1 + 68 74 45 1 + 68 74 46 1 + 68 74 47 1 + 68 74 48 1 + 68 74 49 1 + 68 74 50 1 + 68 74 51 1 + 68 74 52 1 + 68 74 53 1 + 68 74 54 1 + 68 74 55 1 + 68 74 56 1 + 68 74 57 1 + 68 74 58 1 + 68 74 59 1 + 68 74 60 1 + 68 74 61 1 + 68 74 62 1 + 68 74 63 1 + 68 74 64 1 + 68 74 65 1 + 68 74 66 1 + 68 74 67 1 + 68 74 68 1 + 68 74 69 1 + 68 74 70 1 + 68 74 71 1 + 68 74 72 1 + 68 74 73 1 + 68 74 74 1 + 68 74 75 1 + 68 74 76 1 + 68 74 77 1 + 68 74 78 1 + 68 74 79 1 + 68 74 80 1 + 68 74 81 1 + 68 74 82 1 + 68 74 83 1 + 68 74 84 1 + 68 74 85 1 + 68 74 86 0.882677 + 68 74 87 0.0230554 + 68 75 41 0.42026 + 68 75 42 1 + 68 75 43 1 + 68 75 44 1 + 68 75 45 1 + 68 75 46 1 + 68 75 47 1 + 68 75 48 1 + 68 75 49 1 + 68 75 50 1 + 68 75 51 1 + 68 75 52 1 + 68 75 53 1 + 68 75 54 1 + 68 75 55 1 + 68 75 56 1 + 68 75 57 1 + 68 75 58 1 + 68 75 59 1 + 68 75 60 1 + 68 75 61 1 + 68 75 62 1 + 68 75 63 1 + 68 75 64 1 + 68 75 65 1 + 68 75 66 1 + 68 75 67 1 + 68 75 68 1 + 68 75 69 1 + 68 75 70 1 + 68 75 71 1 + 68 75 72 1 + 68 75 73 1 + 68 75 74 1 + 68 75 75 1 + 68 75 76 1 + 68 75 77 1 + 68 75 78 1 + 68 75 79 1 + 68 75 80 1 + 68 75 81 1 + 68 75 82 1 + 68 75 83 1 + 68 75 84 1 + 68 75 85 1 + 68 75 86 0.42026 + 68 76 41 0.0262369 + 68 76 42 0.852122 + 68 76 43 1 + 68 76 44 1 + 68 76 45 1 + 68 76 46 1 + 68 76 47 1 + 68 76 48 1 + 68 76 49 1 + 68 76 50 1 + 68 76 51 1 + 68 76 52 1 + 68 76 53 1 + 68 76 54 1 + 68 76 55 1 + 68 76 56 1 + 68 76 57 1 + 68 76 58 1 + 68 76 59 1 + 68 76 60 1 + 68 76 61 1 + 68 76 62 1 + 68 76 63 1 + 68 76 64 1 + 68 76 65 1 + 68 76 66 1 + 68 76 67 1 + 68 76 68 1 + 68 76 69 1 + 68 76 70 1 + 68 76 71 1 + 68 76 72 1 + 68 76 73 1 + 68 76 74 1 + 68 76 75 1 + 68 76 76 1 + 68 76 77 1 + 68 76 78 1 + 68 76 79 1 + 68 76 80 1 + 68 76 81 1 + 68 76 82 1 + 68 76 83 1 + 68 76 84 1 + 68 76 85 0.852122 + 68 76 86 0.0262369 + 68 77 42 0.28004 + 68 77 43 0.995674 + 68 77 44 1 + 68 77 45 1 + 68 77 46 1 + 68 77 47 1 + 68 77 48 1 + 68 77 49 1 + 68 77 50 1 + 68 77 51 1 + 68 77 52 1 + 68 77 53 1 + 68 77 54 1 + 68 77 55 1 + 68 77 56 1 + 68 77 57 1 + 68 77 58 1 + 68 77 59 1 + 68 77 60 1 + 68 77 61 1 + 68 77 62 1 + 68 77 63 1 + 68 77 64 1 + 68 77 65 1 + 68 77 66 1 + 68 77 67 1 + 68 77 68 1 + 68 77 69 1 + 68 77 70 1 + 68 77 71 1 + 68 77 72 1 + 68 77 73 1 + 68 77 74 1 + 68 77 75 1 + 68 77 76 1 + 68 77 77 1 + 68 77 78 1 + 68 77 79 1 + 68 77 80 1 + 68 77 81 1 + 68 77 82 1 + 68 77 83 1 + 68 77 84 0.995674 + 68 77 85 0.28004 + 68 78 42 0.000228244 + 68 78 43 0.606763 + 68 78 44 1 + 68 78 45 1 + 68 78 46 1 + 68 78 47 1 + 68 78 48 1 + 68 78 49 1 + 68 78 50 1 + 68 78 51 1 + 68 78 52 1 + 68 78 53 1 + 68 78 54 1 + 68 78 55 1 + 68 78 56 1 + 68 78 57 1 + 68 78 58 1 + 68 78 59 1 + 68 78 60 1 + 68 78 61 1 + 68 78 62 1 + 68 78 63 1 + 68 78 64 1 + 68 78 65 1 + 68 78 66 1 + 68 78 67 1 + 68 78 68 1 + 68 78 69 1 + 68 78 70 1 + 68 78 71 1 + 68 78 72 1 + 68 78 73 1 + 68 78 74 1 + 68 78 75 1 + 68 78 76 1 + 68 78 77 1 + 68 78 78 1 + 68 78 79 1 + 68 78 80 1 + 68 78 81 1 + 68 78 82 1 + 68 78 83 1 + 68 78 84 0.606763 + 68 78 85 0.000228244 + 68 79 43 0.0441313 + 68 79 44 0.821374 + 68 79 45 1 + 68 79 46 1 + 68 79 47 1 + 68 79 48 1 + 68 79 49 1 + 68 79 50 1 + 68 79 51 1 + 68 79 52 1 + 68 79 53 1 + 68 79 54 1 + 68 79 55 1 + 68 79 56 1 + 68 79 57 1 + 68 79 58 1 + 68 79 59 1 + 68 79 60 1 + 68 79 61 1 + 68 79 62 1 + 68 79 63 1 + 68 79 64 1 + 68 79 65 1 + 68 79 66 1 + 68 79 67 1 + 68 79 68 1 + 68 79 69 1 + 68 79 70 1 + 68 79 71 1 + 68 79 72 1 + 68 79 73 1 + 68 79 74 1 + 68 79 75 1 + 68 79 76 1 + 68 79 77 1 + 68 79 78 1 + 68 79 79 1 + 68 79 80 1 + 68 79 81 1 + 68 79 82 1 + 68 79 83 0.821374 + 68 79 84 0.0441313 + 68 80 44 0.133628 + 68 80 45 0.909115 + 68 80 46 1 + 68 80 47 1 + 68 80 48 1 + 68 80 49 1 + 68 80 50 1 + 68 80 51 1 + 68 80 52 1 + 68 80 53 1 + 68 80 54 1 + 68 80 55 1 + 68 80 56 1 + 68 80 57 1 + 68 80 58 1 + 68 80 59 1 + 68 80 60 1 + 68 80 61 1 + 68 80 62 1 + 68 80 63 1 + 68 80 64 1 + 68 80 65 1 + 68 80 66 1 + 68 80 67 1 + 68 80 68 1 + 68 80 69 1 + 68 80 70 1 + 68 80 71 1 + 68 80 72 1 + 68 80 73 1 + 68 80 74 1 + 68 80 75 1 + 68 80 76 1 + 68 80 77 1 + 68 80 78 1 + 68 80 79 1 + 68 80 80 1 + 68 80 81 1 + 68 80 82 0.909115 + 68 80 83 0.133628 + 68 81 45 0.196147 + 68 81 46 0.931469 + 68 81 47 1 + 68 81 48 1 + 68 81 49 1 + 68 81 50 1 + 68 81 51 1 + 68 81 52 1 + 68 81 53 1 + 68 81 54 1 + 68 81 55 1 + 68 81 56 1 + 68 81 57 1 + 68 81 58 1 + 68 81 59 1 + 68 81 60 1 + 68 81 61 1 + 68 81 62 1 + 68 81 63 1 + 68 81 64 1 + 68 81 65 1 + 68 81 66 1 + 68 81 67 1 + 68 81 68 1 + 68 81 69 1 + 68 81 70 1 + 68 81 71 1 + 68 81 72 1 + 68 81 73 1 + 68 81 74 1 + 68 81 75 1 + 68 81 76 1 + 68 81 77 1 + 68 81 78 1 + 68 81 79 1 + 68 81 80 1 + 68 81 81 0.931469 + 68 81 82 0.196147 + 68 82 46 0.196147 + 68 82 47 0.909115 + 68 82 48 1 + 68 82 49 1 + 68 82 50 1 + 68 82 51 1 + 68 82 52 1 + 68 82 53 1 + 68 82 54 1 + 68 82 55 1 + 68 82 56 1 + 68 82 57 1 + 68 82 58 1 + 68 82 59 1 + 68 82 60 1 + 68 82 61 1 + 68 82 62 1 + 68 82 63 1 + 68 82 64 1 + 68 82 65 1 + 68 82 66 1 + 68 82 67 1 + 68 82 68 1 + 68 82 69 1 + 68 82 70 1 + 68 82 71 1 + 68 82 72 1 + 68 82 73 1 + 68 82 74 1 + 68 82 75 1 + 68 82 76 1 + 68 82 77 1 + 68 82 78 1 + 68 82 79 1 + 68 82 80 0.909115 + 68 82 81 0.196147 + 68 83 47 0.133628 + 68 83 48 0.821374 + 68 83 49 1 + 68 83 50 1 + 68 83 51 1 + 68 83 52 1 + 68 83 53 1 + 68 83 54 1 + 68 83 55 1 + 68 83 56 1 + 68 83 57 1 + 68 83 58 1 + 68 83 59 1 + 68 83 60 1 + 68 83 61 1 + 68 83 62 1 + 68 83 63 1 + 68 83 64 1 + 68 83 65 1 + 68 83 66 1 + 68 83 67 1 + 68 83 68 1 + 68 83 69 1 + 68 83 70 1 + 68 83 71 1 + 68 83 72 1 + 68 83 73 1 + 68 83 74 1 + 68 83 75 1 + 68 83 76 1 + 68 83 77 1 + 68 83 78 1 + 68 83 79 0.821374 + 68 83 80 0.133628 + 68 84 48 0.0441313 + 68 84 49 0.606763 + 68 84 50 0.995674 + 68 84 51 1 + 68 84 52 1 + 68 84 53 1 + 68 84 54 1 + 68 84 55 1 + 68 84 56 1 + 68 84 57 1 + 68 84 58 1 + 68 84 59 1 + 68 84 60 1 + 68 84 61 1 + 68 84 62 1 + 68 84 63 1 + 68 84 64 1 + 68 84 65 1 + 68 84 66 1 + 68 84 67 1 + 68 84 68 1 + 68 84 69 1 + 68 84 70 1 + 68 84 71 1 + 68 84 72 1 + 68 84 73 1 + 68 84 74 1 + 68 84 75 1 + 68 84 76 1 + 68 84 77 0.995674 + 68 84 78 0.606763 + 68 84 79 0.0441313 + 68 85 49 0.000228244 + 68 85 50 0.28004 + 68 85 51 0.852122 + 68 85 52 1 + 68 85 53 1 + 68 85 54 1 + 68 85 55 1 + 68 85 56 1 + 68 85 57 1 + 68 85 58 1 + 68 85 59 1 + 68 85 60 1 + 68 85 61 1 + 68 85 62 1 + 68 85 63 1 + 68 85 64 1 + 68 85 65 1 + 68 85 66 1 + 68 85 67 1 + 68 85 68 1 + 68 85 69 1 + 68 85 70 1 + 68 85 71 1 + 68 85 72 1 + 68 85 73 1 + 68 85 74 1 + 68 85 75 1 + 68 85 76 0.852122 + 68 85 77 0.28004 + 68 85 78 0.000228244 + 68 86 51 0.0262369 + 68 86 52 0.42026 + 68 86 53 0.882677 + 68 86 54 1 + 68 86 55 1 + 68 86 56 1 + 68 86 57 1 + 68 86 58 1 + 68 86 59 1 + 68 86 60 1 + 68 86 61 1 + 68 86 62 1 + 68 86 63 1 + 68 86 64 1 + 68 86 65 1 + 68 86 66 1 + 68 86 67 1 + 68 86 68 1 + 68 86 69 1 + 68 86 70 1 + 68 86 71 1 + 68 86 72 1 + 68 86 73 1 + 68 86 74 0.882677 + 68 86 75 0.42026 + 68 86 76 0.0262369 + 68 87 53 0.0230554 + 68 87 54 0.338304 + 68 87 55 0.720869 + 68 87 56 0.979056 + 68 87 57 1 + 68 87 58 1 + 68 87 59 1 + 68 87 60 1 + 68 87 61 1 + 68 87 62 1 + 68 87 63 1 + 68 87 64 1 + 68 87 65 1 + 68 87 66 1 + 68 87 67 1 + 68 87 68 1 + 68 87 69 1 + 68 87 70 1 + 68 87 71 0.979056 + 68 87 72 0.720869 + 68 87 73 0.338304 + 68 87 74 0.0230554 + 68 88 56 0.0767609 + 68 88 57 0.345113 + 68 88 58 0.590371 + 68 88 59 0.792899 + 68 88 60 0.944121 + 68 88 61 0.99711 + 68 88 62 1 + 68 88 63 1 + 68 88 64 1 + 68 88 65 1 + 68 88 66 0.99711 + 68 88 67 0.944121 + 68 88 68 0.792899 + 68 88 69 0.590371 + 68 88 70 0.345113 + 68 88 71 0.0767609 + 68 89 60 0.00961546 + 68 89 61 0.0765779 + 68 89 62 0.153337 + 68 89 63 0.193067 + 68 89 64 0.193067 + 68 89 65 0.153337 + 68 89 66 0.0765779 + 68 89 67 0.00961546 + 69 38 61 0.000200097 + 69 38 62 0.0096893 + 69 38 63 0.0245266 + 69 38 64 0.0245266 + 69 38 65 0.0096893 + 69 38 66 0.000200097 + 69 39 56 0.00366907 + 69 39 57 0.142672 + 69 39 58 0.386161 + 69 39 59 0.590371 + 69 39 60 0.752526 + 69 39 61 0.873248 + 69 39 62 0.944047 + 69 39 63 0.969258 + 69 39 64 0.969258 + 69 39 65 0.944047 + 69 39 66 0.873248 + 69 39 67 0.752526 + 69 39 68 0.590371 + 69 39 69 0.386161 + 69 39 70 0.142672 + 69 39 71 0.00366907 + 69 40 53 4.51737e-05 + 69 40 54 0.137253 + 69 40 55 0.509102 + 69 40 56 0.843357 + 69 40 57 0.996155 + 69 40 58 1 + 69 40 59 1 + 69 40 60 1 + 69 40 61 1 + 69 40 62 1 + 69 40 63 1 + 69 40 64 1 + 69 40 65 1 + 69 40 66 1 + 69 40 67 1 + 69 40 68 1 + 69 40 69 1 + 69 40 70 0.996155 + 69 40 71 0.843357 + 69 40 72 0.509102 + 69 40 73 0.137253 + 69 40 74 4.51737e-05 + 69 41 51 0.000204528 + 69 41 52 0.204921 + 69 41 53 0.686307 + 69 41 54 0.985777 + 69 41 55 1 + 69 41 56 1 + 69 41 57 1 + 69 41 58 1 + 69 41 59 1 + 69 41 60 1 + 69 41 61 1 + 69 41 62 1 + 69 41 63 1 + 69 41 64 1 + 69 41 65 1 + 69 41 66 1 + 69 41 67 1 + 69 41 68 1 + 69 41 69 1 + 69 41 70 1 + 69 41 71 1 + 69 41 72 1 + 69 41 73 0.985777 + 69 41 74 0.686307 + 69 41 75 0.204921 + 69 41 76 0.000204528 + 69 42 50 0.105685 + 69 42 51 0.648356 + 69 42 52 0.991156 + 69 42 53 1 + 69 42 54 1 + 69 42 55 1 + 69 42 56 1 + 69 42 57 1 + 69 42 58 1 + 69 42 59 1 + 69 42 60 1 + 69 42 61 1 + 69 42 62 1 + 69 42 63 1 + 69 42 64 1 + 69 42 65 1 + 69 42 66 1 + 69 42 67 1 + 69 42 68 1 + 69 42 69 1 + 69 42 70 1 + 69 42 71 1 + 69 42 72 1 + 69 42 73 1 + 69 42 74 1 + 69 42 75 0.991156 + 69 42 76 0.648356 + 69 42 77 0.105685 + 69 43 48 0.00207515 + 69 43 49 0.364963 + 69 43 50 0.933643 + 69 43 51 1 + 69 43 52 1 + 69 43 53 1 + 69 43 54 1 + 69 43 55 1 + 69 43 56 1 + 69 43 57 1 + 69 43 58 1 + 69 43 59 1 + 69 43 60 1 + 69 43 61 1 + 69 43 62 1 + 69 43 63 1 + 69 43 64 1 + 69 43 65 1 + 69 43 66 1 + 69 43 67 1 + 69 43 68 1 + 69 43 69 1 + 69 43 70 1 + 69 43 71 1 + 69 43 72 1 + 69 43 73 1 + 69 43 74 1 + 69 43 75 1 + 69 43 76 1 + 69 43 77 0.933643 + 69 43 78 0.364963 + 69 43 79 0.00207515 + 69 44 47 0.0302985 + 69 44 48 0.610031 + 69 44 49 0.99787 + 69 44 50 1 + 69 44 51 1 + 69 44 52 1 + 69 44 53 1 + 69 44 54 1 + 69 44 55 1 + 69 44 56 1 + 69 44 57 1 + 69 44 58 1 + 69 44 59 1 + 69 44 60 1 + 69 44 61 1 + 69 44 62 1 + 69 44 63 1 + 69 44 64 1 + 69 44 65 1 + 69 44 66 1 + 69 44 67 1 + 69 44 68 1 + 69 44 69 1 + 69 44 70 1 + 69 44 71 1 + 69 44 72 1 + 69 44 73 1 + 69 44 74 1 + 69 44 75 1 + 69 44 76 1 + 69 44 77 1 + 69 44 78 0.99787 + 69 44 79 0.610031 + 69 44 80 0.0302985 + 69 45 46 0.0622884 + 69 45 47 0.747928 + 69 45 48 1 + 69 45 49 1 + 69 45 50 1 + 69 45 51 1 + 69 45 52 1 + 69 45 53 1 + 69 45 54 1 + 69 45 55 1 + 69 45 56 1 + 69 45 57 1 + 69 45 58 1 + 69 45 59 1 + 69 45 60 1 + 69 45 61 1 + 69 45 62 1 + 69 45 63 1 + 69 45 64 1 + 69 45 65 1 + 69 45 66 1 + 69 45 67 1 + 69 45 68 1 + 69 45 69 1 + 69 45 70 1 + 69 45 71 1 + 69 45 72 1 + 69 45 73 1 + 69 45 74 1 + 69 45 75 1 + 69 45 76 1 + 69 45 77 1 + 69 45 78 1 + 69 45 79 1 + 69 45 80 0.747928 + 69 45 81 0.0622884 + 69 46 45 0.0622884 + 69 46 46 0.787228 + 69 46 47 1 + 69 46 48 1 + 69 46 49 1 + 69 46 50 1 + 69 46 51 1 + 69 46 52 1 + 69 46 53 1 + 69 46 54 1 + 69 46 55 1 + 69 46 56 1 + 69 46 57 1 + 69 46 58 1 + 69 46 59 1 + 69 46 60 1 + 69 46 61 1 + 69 46 62 1 + 69 46 63 1 + 69 46 64 1 + 69 46 65 1 + 69 46 66 1 + 69 46 67 1 + 69 46 68 1 + 69 46 69 1 + 69 46 70 1 + 69 46 71 1 + 69 46 72 1 + 69 46 73 1 + 69 46 74 1 + 69 46 75 1 + 69 46 76 1 + 69 46 77 1 + 69 46 78 1 + 69 46 79 1 + 69 46 80 1 + 69 46 81 0.787228 + 69 46 82 0.0622884 + 69 47 44 0.0302985 + 69 47 45 0.747928 + 69 47 46 1 + 69 47 47 1 + 69 47 48 1 + 69 47 49 1 + 69 47 50 1 + 69 47 51 1 + 69 47 52 1 + 69 47 53 1 + 69 47 54 1 + 69 47 55 1 + 69 47 56 1 + 69 47 57 1 + 69 47 58 1 + 69 47 59 1 + 69 47 60 1 + 69 47 61 1 + 69 47 62 1 + 69 47 63 1 + 69 47 64 1 + 69 47 65 1 + 69 47 66 1 + 69 47 67 1 + 69 47 68 1 + 69 47 69 1 + 69 47 70 1 + 69 47 71 1 + 69 47 72 1 + 69 47 73 1 + 69 47 74 1 + 69 47 75 1 + 69 47 76 1 + 69 47 77 1 + 69 47 78 1 + 69 47 79 1 + 69 47 80 1 + 69 47 81 1 + 69 47 82 0.747928 + 69 47 83 0.0302985 + 69 48 43 0.00207515 + 69 48 44 0.610031 + 69 48 45 1 + 69 48 46 1 + 69 48 47 1 + 69 48 48 1 + 69 48 49 1 + 69 48 50 1 + 69 48 51 1 + 69 48 52 1 + 69 48 53 1 + 69 48 54 1 + 69 48 55 1 + 69 48 56 1 + 69 48 57 1 + 69 48 58 1 + 69 48 59 1 + 69 48 60 1 + 69 48 61 1 + 69 48 62 1 + 69 48 63 1 + 69 48 64 1 + 69 48 65 1 + 69 48 66 1 + 69 48 67 1 + 69 48 68 1 + 69 48 69 1 + 69 48 70 1 + 69 48 71 1 + 69 48 72 1 + 69 48 73 1 + 69 48 74 1 + 69 48 75 1 + 69 48 76 1 + 69 48 77 1 + 69 48 78 1 + 69 48 79 1 + 69 48 80 1 + 69 48 81 1 + 69 48 82 1 + 69 48 83 0.610031 + 69 48 84 0.00207515 + 69 49 43 0.364963 + 69 49 44 0.99787 + 69 49 45 1 + 69 49 46 1 + 69 49 47 1 + 69 49 48 1 + 69 49 49 1 + 69 49 50 1 + 69 49 51 1 + 69 49 52 1 + 69 49 53 1 + 69 49 54 1 + 69 49 55 1 + 69 49 56 1 + 69 49 57 1 + 69 49 58 1 + 69 49 59 1 + 69 49 60 1 + 69 49 61 1 + 69 49 62 1 + 69 49 63 1 + 69 49 64 1 + 69 49 65 1 + 69 49 66 1 + 69 49 67 1 + 69 49 68 1 + 69 49 69 1 + 69 49 70 1 + 69 49 71 1 + 69 49 72 1 + 69 49 73 1 + 69 49 74 1 + 69 49 75 1 + 69 49 76 1 + 69 49 77 1 + 69 49 78 1 + 69 49 79 1 + 69 49 80 1 + 69 49 81 1 + 69 49 82 1 + 69 49 83 0.99787 + 69 49 84 0.364963 + 69 50 42 0.105685 + 69 50 43 0.933643 + 69 50 44 1 + 69 50 45 1 + 69 50 46 1 + 69 50 47 1 + 69 50 48 1 + 69 50 49 1 + 69 50 50 1 + 69 50 51 1 + 69 50 52 1 + 69 50 53 1 + 69 50 54 1 + 69 50 55 1 + 69 50 56 1 + 69 50 57 1 + 69 50 58 1 + 69 50 59 1 + 69 50 60 1 + 69 50 61 1 + 69 50 62 1 + 69 50 63 1 + 69 50 64 1 + 69 50 65 1 + 69 50 66 1 + 69 50 67 1 + 69 50 68 1 + 69 50 69 1 + 69 50 70 1 + 69 50 71 1 + 69 50 72 1 + 69 50 73 1 + 69 50 74 1 + 69 50 75 1 + 69 50 76 1 + 69 50 77 1 + 69 50 78 1 + 69 50 79 1 + 69 50 80 1 + 69 50 81 1 + 69 50 82 1 + 69 50 83 1 + 69 50 84 0.933643 + 69 50 85 0.105685 + 69 51 41 0.000204528 + 69 51 42 0.648356 + 69 51 43 1 + 69 51 44 1 + 69 51 45 1 + 69 51 46 1 + 69 51 47 1 + 69 51 48 1 + 69 51 49 1 + 69 51 50 1 + 69 51 51 1 + 69 51 52 1 + 69 51 53 1 + 69 51 54 1 + 69 51 55 1 + 69 51 56 1 + 69 51 57 1 + 69 51 58 1 + 69 51 59 1 + 69 51 60 1 + 69 51 61 1 + 69 51 62 1 + 69 51 63 1 + 69 51 64 1 + 69 51 65 1 + 69 51 66 1 + 69 51 67 1 + 69 51 68 1 + 69 51 69 1 + 69 51 70 1 + 69 51 71 1 + 69 51 72 1 + 69 51 73 1 + 69 51 74 1 + 69 51 75 1 + 69 51 76 1 + 69 51 77 1 + 69 51 78 1 + 69 51 79 1 + 69 51 80 1 + 69 51 81 1 + 69 51 82 1 + 69 51 83 1 + 69 51 84 1 + 69 51 85 0.648356 + 69 51 86 0.000204528 + 69 52 41 0.204921 + 69 52 42 0.991156 + 69 52 43 1 + 69 52 44 1 + 69 52 45 1 + 69 52 46 1 + 69 52 47 1 + 69 52 48 1 + 69 52 49 1 + 69 52 50 1 + 69 52 51 1 + 69 52 52 1 + 69 52 53 1 + 69 52 54 1 + 69 52 55 1 + 69 52 56 1 + 69 52 57 1 + 69 52 58 1 + 69 52 59 1 + 69 52 60 1 + 69 52 61 1 + 69 52 62 1 + 69 52 63 1 + 69 52 64 1 + 69 52 65 1 + 69 52 66 1 + 69 52 67 1 + 69 52 68 1 + 69 52 69 1 + 69 52 70 1 + 69 52 71 1 + 69 52 72 1 + 69 52 73 1 + 69 52 74 1 + 69 52 75 1 + 69 52 76 1 + 69 52 77 1 + 69 52 78 1 + 69 52 79 1 + 69 52 80 1 + 69 52 81 1 + 69 52 82 1 + 69 52 83 1 + 69 52 84 1 + 69 52 85 0.991156 + 69 52 86 0.204921 + 69 53 40 4.51737e-05 + 69 53 41 0.686307 + 69 53 42 1 + 69 53 43 1 + 69 53 44 1 + 69 53 45 1 + 69 53 46 1 + 69 53 47 1 + 69 53 48 1 + 69 53 49 1 + 69 53 50 1 + 69 53 51 1 + 69 53 52 1 + 69 53 53 1 + 69 53 54 1 + 69 53 55 1 + 69 53 56 1 + 69 53 57 1 + 69 53 58 1 + 69 53 59 1 + 69 53 60 1 + 69 53 61 1 + 69 53 62 1 + 69 53 63 1 + 69 53 64 1 + 69 53 65 1 + 69 53 66 1 + 69 53 67 1 + 69 53 68 1 + 69 53 69 1 + 69 53 70 1 + 69 53 71 1 + 69 53 72 1 + 69 53 73 1 + 69 53 74 1 + 69 53 75 1 + 69 53 76 1 + 69 53 77 1 + 69 53 78 1 + 69 53 79 1 + 69 53 80 1 + 69 53 81 1 + 69 53 82 1 + 69 53 83 1 + 69 53 84 1 + 69 53 85 1 + 69 53 86 0.686307 + 69 53 87 4.51737e-05 + 69 54 40 0.137253 + 69 54 41 0.985777 + 69 54 42 1 + 69 54 43 1 + 69 54 44 1 + 69 54 45 1 + 69 54 46 1 + 69 54 47 1 + 69 54 48 1 + 69 54 49 1 + 69 54 50 1 + 69 54 51 1 + 69 54 52 1 + 69 54 53 1 + 69 54 54 1 + 69 54 55 1 + 69 54 56 1 + 69 54 57 1 + 69 54 58 1 + 69 54 59 1 + 69 54 60 1 + 69 54 61 1 + 69 54 62 1 + 69 54 63 1 + 69 54 64 1 + 69 54 65 1 + 69 54 66 1 + 69 54 67 1 + 69 54 68 1 + 69 54 69 1 + 69 54 70 1 + 69 54 71 1 + 69 54 72 1 + 69 54 73 1 + 69 54 74 1 + 69 54 75 1 + 69 54 76 1 + 69 54 77 1 + 69 54 78 1 + 69 54 79 1 + 69 54 80 1 + 69 54 81 1 + 69 54 82 1 + 69 54 83 1 + 69 54 84 1 + 69 54 85 1 + 69 54 86 0.985777 + 69 54 87 0.137253 + 69 55 40 0.509102 + 69 55 41 1 + 69 55 42 1 + 69 55 43 1 + 69 55 44 1 + 69 55 45 1 + 69 55 46 1 + 69 55 47 1 + 69 55 48 1 + 69 55 49 1 + 69 55 50 1 + 69 55 51 1 + 69 55 52 1 + 69 55 53 1 + 69 55 54 1 + 69 55 55 1 + 69 55 56 1 + 69 55 57 1 + 69 55 58 1 + 69 55 59 1 + 69 55 60 1 + 69 55 61 1 + 69 55 62 1 + 69 55 63 1 + 69 55 64 1 + 69 55 65 1 + 69 55 66 1 + 69 55 67 1 + 69 55 68 1 + 69 55 69 1 + 69 55 70 1 + 69 55 71 1 + 69 55 72 1 + 69 55 73 1 + 69 55 74 1 + 69 55 75 1 + 69 55 76 1 + 69 55 77 1 + 69 55 78 1 + 69 55 79 1 + 69 55 80 1 + 69 55 81 1 + 69 55 82 1 + 69 55 83 1 + 69 55 84 1 + 69 55 85 1 + 69 55 86 1 + 69 55 87 0.509102 + 69 56 39 0.00366907 + 69 56 40 0.843357 + 69 56 41 1 + 69 56 42 1 + 69 56 43 1 + 69 56 44 1 + 69 56 45 1 + 69 56 46 1 + 69 56 47 1 + 69 56 48 1 + 69 56 49 1 + 69 56 50 1 + 69 56 51 1 + 69 56 52 1 + 69 56 53 1 + 69 56 54 1 + 69 56 55 1 + 69 56 56 1 + 69 56 57 1 + 69 56 58 1 + 69 56 59 1 + 69 56 60 1 + 69 56 61 1 + 69 56 62 1 + 69 56 63 1 + 69 56 64 1 + 69 56 65 1 + 69 56 66 1 + 69 56 67 1 + 69 56 68 1 + 69 56 69 1 + 69 56 70 1 + 69 56 71 1 + 69 56 72 1 + 69 56 73 1 + 69 56 74 1 + 69 56 75 1 + 69 56 76 1 + 69 56 77 1 + 69 56 78 1 + 69 56 79 1 + 69 56 80 1 + 69 56 81 1 + 69 56 82 1 + 69 56 83 1 + 69 56 84 1 + 69 56 85 1 + 69 56 86 1 + 69 56 87 0.843357 + 69 56 88 0.00366907 + 69 57 39 0.142672 + 69 57 40 0.996155 + 69 57 41 1 + 69 57 42 1 + 69 57 43 1 + 69 57 44 1 + 69 57 45 1 + 69 57 46 1 + 69 57 47 1 + 69 57 48 1 + 69 57 49 1 + 69 57 50 1 + 69 57 51 1 + 69 57 52 1 + 69 57 53 1 + 69 57 54 1 + 69 57 55 1 + 69 57 56 1 + 69 57 57 1 + 69 57 58 1 + 69 57 59 1 + 69 57 60 1 + 69 57 61 1 + 69 57 62 1 + 69 57 63 1 + 69 57 64 1 + 69 57 65 1 + 69 57 66 1 + 69 57 67 1 + 69 57 68 1 + 69 57 69 1 + 69 57 70 1 + 69 57 71 1 + 69 57 72 1 + 69 57 73 1 + 69 57 74 1 + 69 57 75 1 + 69 57 76 1 + 69 57 77 1 + 69 57 78 1 + 69 57 79 1 + 69 57 80 1 + 69 57 81 1 + 69 57 82 1 + 69 57 83 1 + 69 57 84 1 + 69 57 85 1 + 69 57 86 1 + 69 57 87 0.996155 + 69 57 88 0.142672 + 69 58 39 0.386161 + 69 58 40 1 + 69 58 41 1 + 69 58 42 1 + 69 58 43 1 + 69 58 44 1 + 69 58 45 1 + 69 58 46 1 + 69 58 47 1 + 69 58 48 1 + 69 58 49 1 + 69 58 50 1 + 69 58 51 1 + 69 58 52 1 + 69 58 53 1 + 69 58 54 1 + 69 58 55 1 + 69 58 56 1 + 69 58 57 1 + 69 58 58 1 + 69 58 59 1 + 69 58 60 1 + 69 58 61 1 + 69 58 62 1 + 69 58 63 1 + 69 58 64 1 + 69 58 65 1 + 69 58 66 1 + 69 58 67 1 + 69 58 68 1 + 69 58 69 1 + 69 58 70 1 + 69 58 71 1 + 69 58 72 1 + 69 58 73 1 + 69 58 74 1 + 69 58 75 1 + 69 58 76 1 + 69 58 77 1 + 69 58 78 1 + 69 58 79 1 + 69 58 80 1 + 69 58 81 1 + 69 58 82 1 + 69 58 83 1 + 69 58 84 1 + 69 58 85 1 + 69 58 86 1 + 69 58 87 1 + 69 58 88 0.386161 + 69 59 39 0.590371 + 69 59 40 1 + 69 59 41 1 + 69 59 42 1 + 69 59 43 1 + 69 59 44 1 + 69 59 45 1 + 69 59 46 1 + 69 59 47 1 + 69 59 48 1 + 69 59 49 1 + 69 59 50 1 + 69 59 51 1 + 69 59 52 1 + 69 59 53 1 + 69 59 54 1 + 69 59 55 1 + 69 59 56 1 + 69 59 57 1 + 69 59 58 1 + 69 59 59 1 + 69 59 60 1 + 69 59 61 1 + 69 59 62 1 + 69 59 63 1 + 69 59 64 1 + 69 59 65 1 + 69 59 66 1 + 69 59 67 1 + 69 59 68 1 + 69 59 69 1 + 69 59 70 1 + 69 59 71 1 + 69 59 72 1 + 69 59 73 1 + 69 59 74 1 + 69 59 75 1 + 69 59 76 1 + 69 59 77 1 + 69 59 78 1 + 69 59 79 1 + 69 59 80 1 + 69 59 81 1 + 69 59 82 1 + 69 59 83 1 + 69 59 84 1 + 69 59 85 1 + 69 59 86 1 + 69 59 87 1 + 69 59 88 0.590371 + 69 60 39 0.752526 + 69 60 40 1 + 69 60 41 1 + 69 60 42 1 + 69 60 43 1 + 69 60 44 1 + 69 60 45 1 + 69 60 46 1 + 69 60 47 1 + 69 60 48 1 + 69 60 49 1 + 69 60 50 1 + 69 60 51 1 + 69 60 52 1 + 69 60 53 1 + 69 60 54 1 + 69 60 55 1 + 69 60 56 1 + 69 60 57 1 + 69 60 58 1 + 69 60 59 1 + 69 60 60 1 + 69 60 61 1 + 69 60 62 1 + 69 60 63 1 + 69 60 64 1 + 69 60 65 1 + 69 60 66 1 + 69 60 67 1 + 69 60 68 1 + 69 60 69 1 + 69 60 70 1 + 69 60 71 1 + 69 60 72 1 + 69 60 73 1 + 69 60 74 1 + 69 60 75 1 + 69 60 76 1 + 69 60 77 1 + 69 60 78 1 + 69 60 79 1 + 69 60 80 1 + 69 60 81 1 + 69 60 82 1 + 69 60 83 1 + 69 60 84 1 + 69 60 85 1 + 69 60 86 1 + 69 60 87 1 + 69 60 88 0.752526 + 69 61 38 0.000200097 + 69 61 39 0.873248 + 69 61 40 1 + 69 61 41 1 + 69 61 42 1 + 69 61 43 1 + 69 61 44 1 + 69 61 45 1 + 69 61 46 1 + 69 61 47 1 + 69 61 48 1 + 69 61 49 1 + 69 61 50 1 + 69 61 51 1 + 69 61 52 1 + 69 61 53 1 + 69 61 54 1 + 69 61 55 1 + 69 61 56 1 + 69 61 57 1 + 69 61 58 1 + 69 61 59 1 + 69 61 60 1 + 69 61 61 1 + 69 61 62 1 + 69 61 63 1 + 69 61 64 1 + 69 61 65 1 + 69 61 66 1 + 69 61 67 1 + 69 61 68 1 + 69 61 69 1 + 69 61 70 1 + 69 61 71 1 + 69 61 72 1 + 69 61 73 1 + 69 61 74 1 + 69 61 75 1 + 69 61 76 1 + 69 61 77 1 + 69 61 78 1 + 69 61 79 1 + 69 61 80 1 + 69 61 81 1 + 69 61 82 1 + 69 61 83 1 + 69 61 84 1 + 69 61 85 1 + 69 61 86 1 + 69 61 87 1 + 69 61 88 0.873248 + 69 61 89 0.000200097 + 69 62 38 0.0096893 + 69 62 39 0.944047 + 69 62 40 1 + 69 62 41 1 + 69 62 42 1 + 69 62 43 1 + 69 62 44 1 + 69 62 45 1 + 69 62 46 1 + 69 62 47 1 + 69 62 48 1 + 69 62 49 1 + 69 62 50 1 + 69 62 51 1 + 69 62 52 1 + 69 62 53 1 + 69 62 54 1 + 69 62 55 1 + 69 62 56 1 + 69 62 57 1 + 69 62 58 1 + 69 62 59 1 + 69 62 60 1 + 69 62 61 1 + 69 62 62 1 + 69 62 63 1 + 69 62 64 1 + 69 62 65 1 + 69 62 66 1 + 69 62 67 1 + 69 62 68 1 + 69 62 69 1 + 69 62 70 1 + 69 62 71 1 + 69 62 72 1 + 69 62 73 1 + 69 62 74 1 + 69 62 75 1 + 69 62 76 1 + 69 62 77 1 + 69 62 78 1 + 69 62 79 1 + 69 62 80 1 + 69 62 81 1 + 69 62 82 1 + 69 62 83 1 + 69 62 84 1 + 69 62 85 1 + 69 62 86 1 + 69 62 87 1 + 69 62 88 0.944047 + 69 62 89 0.0096893 + 69 63 38 0.0245266 + 69 63 39 0.969258 + 69 63 40 1 + 69 63 41 1 + 69 63 42 1 + 69 63 43 1 + 69 63 44 1 + 69 63 45 1 + 69 63 46 1 + 69 63 47 1 + 69 63 48 1 + 69 63 49 1 + 69 63 50 1 + 69 63 51 1 + 69 63 52 1 + 69 63 53 1 + 69 63 54 1 + 69 63 55 1 + 69 63 56 1 + 69 63 57 1 + 69 63 58 1 + 69 63 59 1 + 69 63 60 1 + 69 63 61 1 + 69 63 62 1 + 69 63 63 1 + 69 63 64 1 + 69 63 65 1 + 69 63 66 1 + 69 63 67 1 + 69 63 68 1 + 69 63 69 1 + 69 63 70 1 + 69 63 71 1 + 69 63 72 1 + 69 63 73 1 + 69 63 74 1 + 69 63 75 1 + 69 63 76 1 + 69 63 77 1 + 69 63 78 1 + 69 63 79 1 + 69 63 80 1 + 69 63 81 1 + 69 63 82 1 + 69 63 83 1 + 69 63 84 1 + 69 63 85 1 + 69 63 86 1 + 69 63 87 1 + 69 63 88 0.969258 + 69 63 89 0.0245266 + 69 64 38 0.0245266 + 69 64 39 0.969258 + 69 64 40 1 + 69 64 41 1 + 69 64 42 1 + 69 64 43 1 + 69 64 44 1 + 69 64 45 1 + 69 64 46 1 + 69 64 47 1 + 69 64 48 1 + 69 64 49 1 + 69 64 50 1 + 69 64 51 1 + 69 64 52 1 + 69 64 53 1 + 69 64 54 1 + 69 64 55 1 + 69 64 56 1 + 69 64 57 1 + 69 64 58 1 + 69 64 59 1 + 69 64 60 1 + 69 64 61 1 + 69 64 62 1 + 69 64 63 1 + 69 64 64 1 + 69 64 65 1 + 69 64 66 1 + 69 64 67 1 + 69 64 68 1 + 69 64 69 1 + 69 64 70 1 + 69 64 71 1 + 69 64 72 1 + 69 64 73 1 + 69 64 74 1 + 69 64 75 1 + 69 64 76 1 + 69 64 77 1 + 69 64 78 1 + 69 64 79 1 + 69 64 80 1 + 69 64 81 1 + 69 64 82 1 + 69 64 83 1 + 69 64 84 1 + 69 64 85 1 + 69 64 86 1 + 69 64 87 1 + 69 64 88 0.969258 + 69 64 89 0.0245266 + 69 65 38 0.0096893 + 69 65 39 0.944047 + 69 65 40 1 + 69 65 41 1 + 69 65 42 1 + 69 65 43 1 + 69 65 44 1 + 69 65 45 1 + 69 65 46 1 + 69 65 47 1 + 69 65 48 1 + 69 65 49 1 + 69 65 50 1 + 69 65 51 1 + 69 65 52 1 + 69 65 53 1 + 69 65 54 1 + 69 65 55 1 + 69 65 56 1 + 69 65 57 1 + 69 65 58 1 + 69 65 59 1 + 69 65 60 1 + 69 65 61 1 + 69 65 62 1 + 69 65 63 1 + 69 65 64 1 + 69 65 65 1 + 69 65 66 1 + 69 65 67 1 + 69 65 68 1 + 69 65 69 1 + 69 65 70 1 + 69 65 71 1 + 69 65 72 1 + 69 65 73 1 + 69 65 74 1 + 69 65 75 1 + 69 65 76 1 + 69 65 77 1 + 69 65 78 1 + 69 65 79 1 + 69 65 80 1 + 69 65 81 1 + 69 65 82 1 + 69 65 83 1 + 69 65 84 1 + 69 65 85 1 + 69 65 86 1 + 69 65 87 1 + 69 65 88 0.944047 + 69 65 89 0.0096893 + 69 66 38 0.000200097 + 69 66 39 0.873248 + 69 66 40 1 + 69 66 41 1 + 69 66 42 1 + 69 66 43 1 + 69 66 44 1 + 69 66 45 1 + 69 66 46 1 + 69 66 47 1 + 69 66 48 1 + 69 66 49 1 + 69 66 50 1 + 69 66 51 1 + 69 66 52 1 + 69 66 53 1 + 69 66 54 1 + 69 66 55 1 + 69 66 56 1 + 69 66 57 1 + 69 66 58 1 + 69 66 59 1 + 69 66 60 1 + 69 66 61 1 + 69 66 62 1 + 69 66 63 1 + 69 66 64 1 + 69 66 65 1 + 69 66 66 1 + 69 66 67 1 + 69 66 68 1 + 69 66 69 1 + 69 66 70 1 + 69 66 71 1 + 69 66 72 1 + 69 66 73 1 + 69 66 74 1 + 69 66 75 1 + 69 66 76 1 + 69 66 77 1 + 69 66 78 1 + 69 66 79 1 + 69 66 80 1 + 69 66 81 1 + 69 66 82 1 + 69 66 83 1 + 69 66 84 1 + 69 66 85 1 + 69 66 86 1 + 69 66 87 1 + 69 66 88 0.873248 + 69 66 89 0.000200097 + 69 67 39 0.752526 + 69 67 40 1 + 69 67 41 1 + 69 67 42 1 + 69 67 43 1 + 69 67 44 1 + 69 67 45 1 + 69 67 46 1 + 69 67 47 1 + 69 67 48 1 + 69 67 49 1 + 69 67 50 1 + 69 67 51 1 + 69 67 52 1 + 69 67 53 1 + 69 67 54 1 + 69 67 55 1 + 69 67 56 1 + 69 67 57 1 + 69 67 58 1 + 69 67 59 1 + 69 67 60 1 + 69 67 61 1 + 69 67 62 1 + 69 67 63 1 + 69 67 64 1 + 69 67 65 1 + 69 67 66 1 + 69 67 67 1 + 69 67 68 1 + 69 67 69 1 + 69 67 70 1 + 69 67 71 1 + 69 67 72 1 + 69 67 73 1 + 69 67 74 1 + 69 67 75 1 + 69 67 76 1 + 69 67 77 1 + 69 67 78 1 + 69 67 79 1 + 69 67 80 1 + 69 67 81 1 + 69 67 82 1 + 69 67 83 1 + 69 67 84 1 + 69 67 85 1 + 69 67 86 1 + 69 67 87 1 + 69 67 88 0.752526 + 69 68 39 0.590371 + 69 68 40 1 + 69 68 41 1 + 69 68 42 1 + 69 68 43 1 + 69 68 44 1 + 69 68 45 1 + 69 68 46 1 + 69 68 47 1 + 69 68 48 1 + 69 68 49 1 + 69 68 50 1 + 69 68 51 1 + 69 68 52 1 + 69 68 53 1 + 69 68 54 1 + 69 68 55 1 + 69 68 56 1 + 69 68 57 1 + 69 68 58 1 + 69 68 59 1 + 69 68 60 1 + 69 68 61 1 + 69 68 62 1 + 69 68 63 1 + 69 68 64 1 + 69 68 65 1 + 69 68 66 1 + 69 68 67 1 + 69 68 68 1 + 69 68 69 1 + 69 68 70 1 + 69 68 71 1 + 69 68 72 1 + 69 68 73 1 + 69 68 74 1 + 69 68 75 1 + 69 68 76 1 + 69 68 77 1 + 69 68 78 1 + 69 68 79 1 + 69 68 80 1 + 69 68 81 1 + 69 68 82 1 + 69 68 83 1 + 69 68 84 1 + 69 68 85 1 + 69 68 86 1 + 69 68 87 1 + 69 68 88 0.590371 + 69 69 39 0.386161 + 69 69 40 1 + 69 69 41 1 + 69 69 42 1 + 69 69 43 1 + 69 69 44 1 + 69 69 45 1 + 69 69 46 1 + 69 69 47 1 + 69 69 48 1 + 69 69 49 1 + 69 69 50 1 + 69 69 51 1 + 69 69 52 1 + 69 69 53 1 + 69 69 54 1 + 69 69 55 1 + 69 69 56 1 + 69 69 57 1 + 69 69 58 1 + 69 69 59 1 + 69 69 60 1 + 69 69 61 1 + 69 69 62 1 + 69 69 63 1 + 69 69 64 1 + 69 69 65 1 + 69 69 66 1 + 69 69 67 1 + 69 69 68 1 + 69 69 69 1 + 69 69 70 1 + 69 69 71 1 + 69 69 72 1 + 69 69 73 1 + 69 69 74 1 + 69 69 75 1 + 69 69 76 1 + 69 69 77 1 + 69 69 78 1 + 69 69 79 1 + 69 69 80 1 + 69 69 81 1 + 69 69 82 1 + 69 69 83 1 + 69 69 84 1 + 69 69 85 1 + 69 69 86 1 + 69 69 87 1 + 69 69 88 0.386161 + 69 70 39 0.142672 + 69 70 40 0.996155 + 69 70 41 1 + 69 70 42 1 + 69 70 43 1 + 69 70 44 1 + 69 70 45 1 + 69 70 46 1 + 69 70 47 1 + 69 70 48 1 + 69 70 49 1 + 69 70 50 1 + 69 70 51 1 + 69 70 52 1 + 69 70 53 1 + 69 70 54 1 + 69 70 55 1 + 69 70 56 1 + 69 70 57 1 + 69 70 58 1 + 69 70 59 1 + 69 70 60 1 + 69 70 61 1 + 69 70 62 1 + 69 70 63 1 + 69 70 64 1 + 69 70 65 1 + 69 70 66 1 + 69 70 67 1 + 69 70 68 1 + 69 70 69 1 + 69 70 70 1 + 69 70 71 1 + 69 70 72 1 + 69 70 73 1 + 69 70 74 1 + 69 70 75 1 + 69 70 76 1 + 69 70 77 1 + 69 70 78 1 + 69 70 79 1 + 69 70 80 1 + 69 70 81 1 + 69 70 82 1 + 69 70 83 1 + 69 70 84 1 + 69 70 85 1 + 69 70 86 1 + 69 70 87 0.996155 + 69 70 88 0.142672 + 69 71 39 0.00366907 + 69 71 40 0.843357 + 69 71 41 1 + 69 71 42 1 + 69 71 43 1 + 69 71 44 1 + 69 71 45 1 + 69 71 46 1 + 69 71 47 1 + 69 71 48 1 + 69 71 49 1 + 69 71 50 1 + 69 71 51 1 + 69 71 52 1 + 69 71 53 1 + 69 71 54 1 + 69 71 55 1 + 69 71 56 1 + 69 71 57 1 + 69 71 58 1 + 69 71 59 1 + 69 71 60 1 + 69 71 61 1 + 69 71 62 1 + 69 71 63 1 + 69 71 64 1 + 69 71 65 1 + 69 71 66 1 + 69 71 67 1 + 69 71 68 1 + 69 71 69 1 + 69 71 70 1 + 69 71 71 1 + 69 71 72 1 + 69 71 73 1 + 69 71 74 1 + 69 71 75 1 + 69 71 76 1 + 69 71 77 1 + 69 71 78 1 + 69 71 79 1 + 69 71 80 1 + 69 71 81 1 + 69 71 82 1 + 69 71 83 1 + 69 71 84 1 + 69 71 85 1 + 69 71 86 1 + 69 71 87 0.843357 + 69 71 88 0.00366907 + 69 72 40 0.509102 + 69 72 41 1 + 69 72 42 1 + 69 72 43 1 + 69 72 44 1 + 69 72 45 1 + 69 72 46 1 + 69 72 47 1 + 69 72 48 1 + 69 72 49 1 + 69 72 50 1 + 69 72 51 1 + 69 72 52 1 + 69 72 53 1 + 69 72 54 1 + 69 72 55 1 + 69 72 56 1 + 69 72 57 1 + 69 72 58 1 + 69 72 59 1 + 69 72 60 1 + 69 72 61 1 + 69 72 62 1 + 69 72 63 1 + 69 72 64 1 + 69 72 65 1 + 69 72 66 1 + 69 72 67 1 + 69 72 68 1 + 69 72 69 1 + 69 72 70 1 + 69 72 71 1 + 69 72 72 1 + 69 72 73 1 + 69 72 74 1 + 69 72 75 1 + 69 72 76 1 + 69 72 77 1 + 69 72 78 1 + 69 72 79 1 + 69 72 80 1 + 69 72 81 1 + 69 72 82 1 + 69 72 83 1 + 69 72 84 1 + 69 72 85 1 + 69 72 86 1 + 69 72 87 0.509102 + 69 73 40 0.137253 + 69 73 41 0.985777 + 69 73 42 1 + 69 73 43 1 + 69 73 44 1 + 69 73 45 1 + 69 73 46 1 + 69 73 47 1 + 69 73 48 1 + 69 73 49 1 + 69 73 50 1 + 69 73 51 1 + 69 73 52 1 + 69 73 53 1 + 69 73 54 1 + 69 73 55 1 + 69 73 56 1 + 69 73 57 1 + 69 73 58 1 + 69 73 59 1 + 69 73 60 1 + 69 73 61 1 + 69 73 62 1 + 69 73 63 1 + 69 73 64 1 + 69 73 65 1 + 69 73 66 1 + 69 73 67 1 + 69 73 68 1 + 69 73 69 1 + 69 73 70 1 + 69 73 71 1 + 69 73 72 1 + 69 73 73 1 + 69 73 74 1 + 69 73 75 1 + 69 73 76 1 + 69 73 77 1 + 69 73 78 1 + 69 73 79 1 + 69 73 80 1 + 69 73 81 1 + 69 73 82 1 + 69 73 83 1 + 69 73 84 1 + 69 73 85 1 + 69 73 86 0.985777 + 69 73 87 0.137253 + 69 74 40 4.51737e-05 + 69 74 41 0.686307 + 69 74 42 1 + 69 74 43 1 + 69 74 44 1 + 69 74 45 1 + 69 74 46 1 + 69 74 47 1 + 69 74 48 1 + 69 74 49 1 + 69 74 50 1 + 69 74 51 1 + 69 74 52 1 + 69 74 53 1 + 69 74 54 1 + 69 74 55 1 + 69 74 56 1 + 69 74 57 1 + 69 74 58 1 + 69 74 59 1 + 69 74 60 1 + 69 74 61 1 + 69 74 62 1 + 69 74 63 1 + 69 74 64 1 + 69 74 65 1 + 69 74 66 1 + 69 74 67 1 + 69 74 68 1 + 69 74 69 1 + 69 74 70 1 + 69 74 71 1 + 69 74 72 1 + 69 74 73 1 + 69 74 74 1 + 69 74 75 1 + 69 74 76 1 + 69 74 77 1 + 69 74 78 1 + 69 74 79 1 + 69 74 80 1 + 69 74 81 1 + 69 74 82 1 + 69 74 83 1 + 69 74 84 1 + 69 74 85 1 + 69 74 86 0.686307 + 69 74 87 4.51737e-05 + 69 75 41 0.204921 + 69 75 42 0.991156 + 69 75 43 1 + 69 75 44 1 + 69 75 45 1 + 69 75 46 1 + 69 75 47 1 + 69 75 48 1 + 69 75 49 1 + 69 75 50 1 + 69 75 51 1 + 69 75 52 1 + 69 75 53 1 + 69 75 54 1 + 69 75 55 1 + 69 75 56 1 + 69 75 57 1 + 69 75 58 1 + 69 75 59 1 + 69 75 60 1 + 69 75 61 1 + 69 75 62 1 + 69 75 63 1 + 69 75 64 1 + 69 75 65 1 + 69 75 66 1 + 69 75 67 1 + 69 75 68 1 + 69 75 69 1 + 69 75 70 1 + 69 75 71 1 + 69 75 72 1 + 69 75 73 1 + 69 75 74 1 + 69 75 75 1 + 69 75 76 1 + 69 75 77 1 + 69 75 78 1 + 69 75 79 1 + 69 75 80 1 + 69 75 81 1 + 69 75 82 1 + 69 75 83 1 + 69 75 84 1 + 69 75 85 0.991156 + 69 75 86 0.204921 + 69 76 41 0.000204528 + 69 76 42 0.648356 + 69 76 43 1 + 69 76 44 1 + 69 76 45 1 + 69 76 46 1 + 69 76 47 1 + 69 76 48 1 + 69 76 49 1 + 69 76 50 1 + 69 76 51 1 + 69 76 52 1 + 69 76 53 1 + 69 76 54 1 + 69 76 55 1 + 69 76 56 1 + 69 76 57 1 + 69 76 58 1 + 69 76 59 1 + 69 76 60 1 + 69 76 61 1 + 69 76 62 1 + 69 76 63 1 + 69 76 64 1 + 69 76 65 1 + 69 76 66 1 + 69 76 67 1 + 69 76 68 1 + 69 76 69 1 + 69 76 70 1 + 69 76 71 1 + 69 76 72 1 + 69 76 73 1 + 69 76 74 1 + 69 76 75 1 + 69 76 76 1 + 69 76 77 1 + 69 76 78 1 + 69 76 79 1 + 69 76 80 1 + 69 76 81 1 + 69 76 82 1 + 69 76 83 1 + 69 76 84 1 + 69 76 85 0.648356 + 69 76 86 0.000204528 + 69 77 42 0.105685 + 69 77 43 0.933643 + 69 77 44 1 + 69 77 45 1 + 69 77 46 1 + 69 77 47 1 + 69 77 48 1 + 69 77 49 1 + 69 77 50 1 + 69 77 51 1 + 69 77 52 1 + 69 77 53 1 + 69 77 54 1 + 69 77 55 1 + 69 77 56 1 + 69 77 57 1 + 69 77 58 1 + 69 77 59 1 + 69 77 60 1 + 69 77 61 1 + 69 77 62 1 + 69 77 63 1 + 69 77 64 1 + 69 77 65 1 + 69 77 66 1 + 69 77 67 1 + 69 77 68 1 + 69 77 69 1 + 69 77 70 1 + 69 77 71 1 + 69 77 72 1 + 69 77 73 1 + 69 77 74 1 + 69 77 75 1 + 69 77 76 1 + 69 77 77 1 + 69 77 78 1 + 69 77 79 1 + 69 77 80 1 + 69 77 81 1 + 69 77 82 1 + 69 77 83 1 + 69 77 84 0.933643 + 69 77 85 0.105685 + 69 78 43 0.364963 + 69 78 44 0.99787 + 69 78 45 1 + 69 78 46 1 + 69 78 47 1 + 69 78 48 1 + 69 78 49 1 + 69 78 50 1 + 69 78 51 1 + 69 78 52 1 + 69 78 53 1 + 69 78 54 1 + 69 78 55 1 + 69 78 56 1 + 69 78 57 1 + 69 78 58 1 + 69 78 59 1 + 69 78 60 1 + 69 78 61 1 + 69 78 62 1 + 69 78 63 1 + 69 78 64 1 + 69 78 65 1 + 69 78 66 1 + 69 78 67 1 + 69 78 68 1 + 69 78 69 1 + 69 78 70 1 + 69 78 71 1 + 69 78 72 1 + 69 78 73 1 + 69 78 74 1 + 69 78 75 1 + 69 78 76 1 + 69 78 77 1 + 69 78 78 1 + 69 78 79 1 + 69 78 80 1 + 69 78 81 1 + 69 78 82 1 + 69 78 83 0.99787 + 69 78 84 0.364963 + 69 79 43 0.00207515 + 69 79 44 0.610031 + 69 79 45 1 + 69 79 46 1 + 69 79 47 1 + 69 79 48 1 + 69 79 49 1 + 69 79 50 1 + 69 79 51 1 + 69 79 52 1 + 69 79 53 1 + 69 79 54 1 + 69 79 55 1 + 69 79 56 1 + 69 79 57 1 + 69 79 58 1 + 69 79 59 1 + 69 79 60 1 + 69 79 61 1 + 69 79 62 1 + 69 79 63 1 + 69 79 64 1 + 69 79 65 1 + 69 79 66 1 + 69 79 67 1 + 69 79 68 1 + 69 79 69 1 + 69 79 70 1 + 69 79 71 1 + 69 79 72 1 + 69 79 73 1 + 69 79 74 1 + 69 79 75 1 + 69 79 76 1 + 69 79 77 1 + 69 79 78 1 + 69 79 79 1 + 69 79 80 1 + 69 79 81 1 + 69 79 82 1 + 69 79 83 0.610031 + 69 79 84 0.00207515 + 69 80 44 0.0302985 + 69 80 45 0.747928 + 69 80 46 1 + 69 80 47 1 + 69 80 48 1 + 69 80 49 1 + 69 80 50 1 + 69 80 51 1 + 69 80 52 1 + 69 80 53 1 + 69 80 54 1 + 69 80 55 1 + 69 80 56 1 + 69 80 57 1 + 69 80 58 1 + 69 80 59 1 + 69 80 60 1 + 69 80 61 1 + 69 80 62 1 + 69 80 63 1 + 69 80 64 1 + 69 80 65 1 + 69 80 66 1 + 69 80 67 1 + 69 80 68 1 + 69 80 69 1 + 69 80 70 1 + 69 80 71 1 + 69 80 72 1 + 69 80 73 1 + 69 80 74 1 + 69 80 75 1 + 69 80 76 1 + 69 80 77 1 + 69 80 78 1 + 69 80 79 1 + 69 80 80 1 + 69 80 81 1 + 69 80 82 0.747928 + 69 80 83 0.0302985 + 69 81 45 0.0622884 + 69 81 46 0.787228 + 69 81 47 1 + 69 81 48 1 + 69 81 49 1 + 69 81 50 1 + 69 81 51 1 + 69 81 52 1 + 69 81 53 1 + 69 81 54 1 + 69 81 55 1 + 69 81 56 1 + 69 81 57 1 + 69 81 58 1 + 69 81 59 1 + 69 81 60 1 + 69 81 61 1 + 69 81 62 1 + 69 81 63 1 + 69 81 64 1 + 69 81 65 1 + 69 81 66 1 + 69 81 67 1 + 69 81 68 1 + 69 81 69 1 + 69 81 70 1 + 69 81 71 1 + 69 81 72 1 + 69 81 73 1 + 69 81 74 1 + 69 81 75 1 + 69 81 76 1 + 69 81 77 1 + 69 81 78 1 + 69 81 79 1 + 69 81 80 1 + 69 81 81 0.787228 + 69 81 82 0.0622884 + 69 82 46 0.0622884 + 69 82 47 0.747928 + 69 82 48 1 + 69 82 49 1 + 69 82 50 1 + 69 82 51 1 + 69 82 52 1 + 69 82 53 1 + 69 82 54 1 + 69 82 55 1 + 69 82 56 1 + 69 82 57 1 + 69 82 58 1 + 69 82 59 1 + 69 82 60 1 + 69 82 61 1 + 69 82 62 1 + 69 82 63 1 + 69 82 64 1 + 69 82 65 1 + 69 82 66 1 + 69 82 67 1 + 69 82 68 1 + 69 82 69 1 + 69 82 70 1 + 69 82 71 1 + 69 82 72 1 + 69 82 73 1 + 69 82 74 1 + 69 82 75 1 + 69 82 76 1 + 69 82 77 1 + 69 82 78 1 + 69 82 79 1 + 69 82 80 0.747928 + 69 82 81 0.0622884 + 69 83 47 0.0302985 + 69 83 48 0.610031 + 69 83 49 0.99787 + 69 83 50 1 + 69 83 51 1 + 69 83 52 1 + 69 83 53 1 + 69 83 54 1 + 69 83 55 1 + 69 83 56 1 + 69 83 57 1 + 69 83 58 1 + 69 83 59 1 + 69 83 60 1 + 69 83 61 1 + 69 83 62 1 + 69 83 63 1 + 69 83 64 1 + 69 83 65 1 + 69 83 66 1 + 69 83 67 1 + 69 83 68 1 + 69 83 69 1 + 69 83 70 1 + 69 83 71 1 + 69 83 72 1 + 69 83 73 1 + 69 83 74 1 + 69 83 75 1 + 69 83 76 1 + 69 83 77 1 + 69 83 78 0.99787 + 69 83 79 0.610031 + 69 83 80 0.0302985 + 69 84 48 0.00207515 + 69 84 49 0.364963 + 69 84 50 0.933643 + 69 84 51 1 + 69 84 52 1 + 69 84 53 1 + 69 84 54 1 + 69 84 55 1 + 69 84 56 1 + 69 84 57 1 + 69 84 58 1 + 69 84 59 1 + 69 84 60 1 + 69 84 61 1 + 69 84 62 1 + 69 84 63 1 + 69 84 64 1 + 69 84 65 1 + 69 84 66 1 + 69 84 67 1 + 69 84 68 1 + 69 84 69 1 + 69 84 70 1 + 69 84 71 1 + 69 84 72 1 + 69 84 73 1 + 69 84 74 1 + 69 84 75 1 + 69 84 76 1 + 69 84 77 0.933643 + 69 84 78 0.364963 + 69 84 79 0.00207515 + 69 85 50 0.105685 + 69 85 51 0.648356 + 69 85 52 0.991156 + 69 85 53 1 + 69 85 54 1 + 69 85 55 1 + 69 85 56 1 + 69 85 57 1 + 69 85 58 1 + 69 85 59 1 + 69 85 60 1 + 69 85 61 1 + 69 85 62 1 + 69 85 63 1 + 69 85 64 1 + 69 85 65 1 + 69 85 66 1 + 69 85 67 1 + 69 85 68 1 + 69 85 69 1 + 69 85 70 1 + 69 85 71 1 + 69 85 72 1 + 69 85 73 1 + 69 85 74 1 + 69 85 75 0.991156 + 69 85 76 0.648356 + 69 85 77 0.105685 + 69 86 51 0.000204528 + 69 86 52 0.204921 + 69 86 53 0.686307 + 69 86 54 0.985777 + 69 86 55 1 + 69 86 56 1 + 69 86 57 1 + 69 86 58 1 + 69 86 59 1 + 69 86 60 1 + 69 86 61 1 + 69 86 62 1 + 69 86 63 1 + 69 86 64 1 + 69 86 65 1 + 69 86 66 1 + 69 86 67 1 + 69 86 68 1 + 69 86 69 1 + 69 86 70 1 + 69 86 71 1 + 69 86 72 1 + 69 86 73 0.985777 + 69 86 74 0.686307 + 69 86 75 0.204921 + 69 86 76 0.000204528 + 69 87 53 4.51737e-05 + 69 87 54 0.137253 + 69 87 55 0.509102 + 69 87 56 0.843357 + 69 87 57 0.996155 + 69 87 58 1 + 69 87 59 1 + 69 87 60 1 + 69 87 61 1 + 69 87 62 1 + 69 87 63 1 + 69 87 64 1 + 69 87 65 1 + 69 87 66 1 + 69 87 67 1 + 69 87 68 1 + 69 87 69 1 + 69 87 70 0.996155 + 69 87 71 0.843357 + 69 87 72 0.509102 + 69 87 73 0.137253 + 69 87 74 4.51737e-05 + 69 88 56 0.00366907 + 69 88 57 0.142672 + 69 88 58 0.386161 + 69 88 59 0.590371 + 69 88 60 0.752526 + 69 88 61 0.873248 + 69 88 62 0.944047 + 69 88 63 0.969258 + 69 88 64 0.969258 + 69 88 65 0.944047 + 69 88 66 0.873248 + 69 88 67 0.752526 + 69 88 68 0.590371 + 69 88 69 0.386161 + 69 88 70 0.142672 + 69 88 71 0.00366907 + 69 89 61 0.000200097 + 69 89 62 0.0096893 + 69 89 63 0.0245266 + 69 89 64 0.0245266 + 69 89 65 0.0096893 + 69 89 66 0.000200097 + 70 39 57 0.00913973 + 70 39 58 0.142672 + 70 39 59 0.345113 + 70 39 60 0.508892 + 70 39 61 0.63101 + 70 39 62 0.712087 + 70 39 63 0.752526 + 70 39 64 0.752526 + 70 39 65 0.712087 + 70 39 66 0.63101 + 70 39 67 0.508892 + 70 39 68 0.345113 + 70 39 69 0.142672 + 70 39 70 0.00913973 + 70 40 54 0.013123 + 70 40 55 0.253138 + 70 40 56 0.594037 + 70 40 57 0.87979 + 70 40 58 0.996155 + 70 40 59 1 + 70 40 60 1 + 70 40 61 1 + 70 40 62 1 + 70 40 63 1 + 70 40 64 1 + 70 40 65 1 + 70 40 66 1 + 70 40 67 1 + 70 40 68 1 + 70 40 69 0.996155 + 70 40 70 0.87979 + 70 40 71 0.594037 + 70 40 72 0.253138 + 70 40 73 0.013123 + 70 41 52 0.0398206 + 70 41 53 0.42026 + 70 41 54 0.848902 + 70 41 55 0.999295 + 70 41 56 1 + 70 41 57 1 + 70 41 58 1 + 70 41 59 1 + 70 41 60 1 + 70 41 61 1 + 70 41 62 1 + 70 41 63 1 + 70 41 64 1 + 70 41 65 1 + 70 41 66 1 + 70 41 67 1 + 70 41 68 1 + 70 41 69 1 + 70 41 70 1 + 70 41 71 1 + 70 41 72 0.999295 + 70 41 73 0.848902 + 70 41 74 0.42026 + 70 41 75 0.0398206 + 70 42 50 0.0100187 + 70 42 51 0.370069 + 70 42 52 0.884209 + 70 42 53 1 + 70 42 54 1 + 70 42 55 1 + 70 42 56 1 + 70 42 57 1 + 70 42 58 1 + 70 42 59 1 + 70 42 60 1 + 70 42 61 1 + 70 42 62 1 + 70 42 63 1 + 70 42 64 1 + 70 42 65 1 + 70 42 66 1 + 70 42 67 1 + 70 42 68 1 + 70 42 69 1 + 70 42 70 1 + 70 42 71 1 + 70 42 72 1 + 70 42 73 1 + 70 42 74 1 + 70 42 75 0.884209 + 70 42 76 0.370069 + 70 42 77 0.0100187 + 70 43 49 0.132621 + 70 43 50 0.742086 + 70 43 51 0.999467 + 70 43 52 1 + 70 43 53 1 + 70 43 54 1 + 70 43 55 1 + 70 43 56 1 + 70 43 57 1 + 70 43 58 1 + 70 43 59 1 + 70 43 60 1 + 70 43 61 1 + 70 43 62 1 + 70 43 63 1 + 70 43 64 1 + 70 43 65 1 + 70 43 66 1 + 70 43 67 1 + 70 43 68 1 + 70 43 69 1 + 70 43 70 1 + 70 43 71 1 + 70 43 72 1 + 70 43 73 1 + 70 43 74 1 + 70 43 75 1 + 70 43 76 0.999467 + 70 43 77 0.742086 + 70 43 78 0.132621 + 70 44 47 0.000148631 + 70 44 48 0.315874 + 70 44 49 0.933296 + 70 44 50 1 + 70 44 51 1 + 70 44 52 1 + 70 44 53 1 + 70 44 54 1 + 70 44 55 1 + 70 44 56 1 + 70 44 57 1 + 70 44 58 1 + 70 44 59 1 + 70 44 60 1 + 70 44 61 1 + 70 44 62 1 + 70 44 63 1 + 70 44 64 1 + 70 44 65 1 + 70 44 66 1 + 70 44 67 1 + 70 44 68 1 + 70 44 69 1 + 70 44 70 1 + 70 44 71 1 + 70 44 72 1 + 70 44 73 1 + 70 44 74 1 + 70 44 75 1 + 70 44 76 1 + 70 44 77 1 + 70 44 78 0.933296 + 70 44 79 0.315874 + 70 44 80 0.000148631 + 70 45 46 0.00284305 + 70 45 47 0.458559 + 70 45 48 0.987756 + 70 45 49 1 + 70 45 50 1 + 70 45 51 1 + 70 45 52 1 + 70 45 53 1 + 70 45 54 1 + 70 45 55 1 + 70 45 56 1 + 70 45 57 1 + 70 45 58 1 + 70 45 59 1 + 70 45 60 1 + 70 45 61 1 + 70 45 62 1 + 70 45 63 1 + 70 45 64 1 + 70 45 65 1 + 70 45 66 1 + 70 45 67 1 + 70 45 68 1 + 70 45 69 1 + 70 45 70 1 + 70 45 71 1 + 70 45 72 1 + 70 45 73 1 + 70 45 74 1 + 70 45 75 1 + 70 45 76 1 + 70 45 77 1 + 70 45 78 1 + 70 45 79 0.987756 + 70 45 80 0.458559 + 70 45 81 0.00284305 + 70 46 45 0.00284305 + 70 46 46 0.510026 + 70 46 47 0.997087 + 70 46 48 1 + 70 46 49 1 + 70 46 50 1 + 70 46 51 1 + 70 46 52 1 + 70 46 53 1 + 70 46 54 1 + 70 46 55 1 + 70 46 56 1 + 70 46 57 1 + 70 46 58 1 + 70 46 59 1 + 70 46 60 1 + 70 46 61 1 + 70 46 62 1 + 70 46 63 1 + 70 46 64 1 + 70 46 65 1 + 70 46 66 1 + 70 46 67 1 + 70 46 68 1 + 70 46 69 1 + 70 46 70 1 + 70 46 71 1 + 70 46 72 1 + 70 46 73 1 + 70 46 74 1 + 70 46 75 1 + 70 46 76 1 + 70 46 77 1 + 70 46 78 1 + 70 46 79 1 + 70 46 80 0.997087 + 70 46 81 0.510026 + 70 46 82 0.00284305 + 70 47 44 0.000148631 + 70 47 45 0.458559 + 70 47 46 0.997087 + 70 47 47 1 + 70 47 48 1 + 70 47 49 1 + 70 47 50 1 + 70 47 51 1 + 70 47 52 1 + 70 47 53 1 + 70 47 54 1 + 70 47 55 1 + 70 47 56 1 + 70 47 57 1 + 70 47 58 1 + 70 47 59 1 + 70 47 60 1 + 70 47 61 1 + 70 47 62 1 + 70 47 63 1 + 70 47 64 1 + 70 47 65 1 + 70 47 66 1 + 70 47 67 1 + 70 47 68 1 + 70 47 69 1 + 70 47 70 1 + 70 47 71 1 + 70 47 72 1 + 70 47 73 1 + 70 47 74 1 + 70 47 75 1 + 70 47 76 1 + 70 47 77 1 + 70 47 78 1 + 70 47 79 1 + 70 47 80 1 + 70 47 81 0.997087 + 70 47 82 0.458559 + 70 47 83 0.000148631 + 70 48 44 0.315874 + 70 48 45 0.987756 + 70 48 46 1 + 70 48 47 1 + 70 48 48 1 + 70 48 49 1 + 70 48 50 1 + 70 48 51 1 + 70 48 52 1 + 70 48 53 1 + 70 48 54 1 + 70 48 55 1 + 70 48 56 1 + 70 48 57 1 + 70 48 58 1 + 70 48 59 1 + 70 48 60 1 + 70 48 61 1 + 70 48 62 1 + 70 48 63 1 + 70 48 64 1 + 70 48 65 1 + 70 48 66 1 + 70 48 67 1 + 70 48 68 1 + 70 48 69 1 + 70 48 70 1 + 70 48 71 1 + 70 48 72 1 + 70 48 73 1 + 70 48 74 1 + 70 48 75 1 + 70 48 76 1 + 70 48 77 1 + 70 48 78 1 + 70 48 79 1 + 70 48 80 1 + 70 48 81 1 + 70 48 82 0.987756 + 70 48 83 0.315874 + 70 49 43 0.132621 + 70 49 44 0.933296 + 70 49 45 1 + 70 49 46 1 + 70 49 47 1 + 70 49 48 1 + 70 49 49 1 + 70 49 50 1 + 70 49 51 1 + 70 49 52 1 + 70 49 53 1 + 70 49 54 1 + 70 49 55 1 + 70 49 56 1 + 70 49 57 1 + 70 49 58 1 + 70 49 59 1 + 70 49 60 1 + 70 49 61 1 + 70 49 62 1 + 70 49 63 1 + 70 49 64 1 + 70 49 65 1 + 70 49 66 1 + 70 49 67 1 + 70 49 68 1 + 70 49 69 1 + 70 49 70 1 + 70 49 71 1 + 70 49 72 1 + 70 49 73 1 + 70 49 74 1 + 70 49 75 1 + 70 49 76 1 + 70 49 77 1 + 70 49 78 1 + 70 49 79 1 + 70 49 80 1 + 70 49 81 1 + 70 49 82 1 + 70 49 83 0.933296 + 70 49 84 0.132621 + 70 50 42 0.0100187 + 70 50 43 0.742086 + 70 50 44 1 + 70 50 45 1 + 70 50 46 1 + 70 50 47 1 + 70 50 48 1 + 70 50 49 1 + 70 50 50 1 + 70 50 51 1 + 70 50 52 1 + 70 50 53 1 + 70 50 54 1 + 70 50 55 1 + 70 50 56 1 + 70 50 57 1 + 70 50 58 1 + 70 50 59 1 + 70 50 60 1 + 70 50 61 1 + 70 50 62 1 + 70 50 63 1 + 70 50 64 1 + 70 50 65 1 + 70 50 66 1 + 70 50 67 1 + 70 50 68 1 + 70 50 69 1 + 70 50 70 1 + 70 50 71 1 + 70 50 72 1 + 70 50 73 1 + 70 50 74 1 + 70 50 75 1 + 70 50 76 1 + 70 50 77 1 + 70 50 78 1 + 70 50 79 1 + 70 50 80 1 + 70 50 81 1 + 70 50 82 1 + 70 50 83 1 + 70 50 84 0.742086 + 70 50 85 0.0100187 + 70 51 42 0.370069 + 70 51 43 0.999467 + 70 51 44 1 + 70 51 45 1 + 70 51 46 1 + 70 51 47 1 + 70 51 48 1 + 70 51 49 1 + 70 51 50 1 + 70 51 51 1 + 70 51 52 1 + 70 51 53 1 + 70 51 54 1 + 70 51 55 1 + 70 51 56 1 + 70 51 57 1 + 70 51 58 1 + 70 51 59 1 + 70 51 60 1 + 70 51 61 1 + 70 51 62 1 + 70 51 63 1 + 70 51 64 1 + 70 51 65 1 + 70 51 66 1 + 70 51 67 1 + 70 51 68 1 + 70 51 69 1 + 70 51 70 1 + 70 51 71 1 + 70 51 72 1 + 70 51 73 1 + 70 51 74 1 + 70 51 75 1 + 70 51 76 1 + 70 51 77 1 + 70 51 78 1 + 70 51 79 1 + 70 51 80 1 + 70 51 81 1 + 70 51 82 1 + 70 51 83 1 + 70 51 84 0.999467 + 70 51 85 0.370069 + 70 52 41 0.0398206 + 70 52 42 0.884209 + 70 52 43 1 + 70 52 44 1 + 70 52 45 1 + 70 52 46 1 + 70 52 47 1 + 70 52 48 1 + 70 52 49 1 + 70 52 50 1 + 70 52 51 1 + 70 52 52 1 + 70 52 53 1 + 70 52 54 1 + 70 52 55 1 + 70 52 56 1 + 70 52 57 1 + 70 52 58 1 + 70 52 59 1 + 70 52 60 1 + 70 52 61 1 + 70 52 62 1 + 70 52 63 1 + 70 52 64 1 + 70 52 65 1 + 70 52 66 1 + 70 52 67 1 + 70 52 68 1 + 70 52 69 1 + 70 52 70 1 + 70 52 71 1 + 70 52 72 1 + 70 52 73 1 + 70 52 74 1 + 70 52 75 1 + 70 52 76 1 + 70 52 77 1 + 70 52 78 1 + 70 52 79 1 + 70 52 80 1 + 70 52 81 1 + 70 52 82 1 + 70 52 83 1 + 70 52 84 1 + 70 52 85 0.884209 + 70 52 86 0.0398206 + 70 53 41 0.42026 + 70 53 42 1 + 70 53 43 1 + 70 53 44 1 + 70 53 45 1 + 70 53 46 1 + 70 53 47 1 + 70 53 48 1 + 70 53 49 1 + 70 53 50 1 + 70 53 51 1 + 70 53 52 1 + 70 53 53 1 + 70 53 54 1 + 70 53 55 1 + 70 53 56 1 + 70 53 57 1 + 70 53 58 1 + 70 53 59 1 + 70 53 60 1 + 70 53 61 1 + 70 53 62 1 + 70 53 63 1 + 70 53 64 1 + 70 53 65 1 + 70 53 66 1 + 70 53 67 1 + 70 53 68 1 + 70 53 69 1 + 70 53 70 1 + 70 53 71 1 + 70 53 72 1 + 70 53 73 1 + 70 53 74 1 + 70 53 75 1 + 70 53 76 1 + 70 53 77 1 + 70 53 78 1 + 70 53 79 1 + 70 53 80 1 + 70 53 81 1 + 70 53 82 1 + 70 53 83 1 + 70 53 84 1 + 70 53 85 1 + 70 53 86 0.42026 + 70 54 40 0.013123 + 70 54 41 0.848902 + 70 54 42 1 + 70 54 43 1 + 70 54 44 1 + 70 54 45 1 + 70 54 46 1 + 70 54 47 1 + 70 54 48 1 + 70 54 49 1 + 70 54 50 1 + 70 54 51 1 + 70 54 52 1 + 70 54 53 1 + 70 54 54 1 + 70 54 55 1 + 70 54 56 1 + 70 54 57 1 + 70 54 58 1 + 70 54 59 1 + 70 54 60 1 + 70 54 61 1 + 70 54 62 1 + 70 54 63 1 + 70 54 64 1 + 70 54 65 1 + 70 54 66 1 + 70 54 67 1 + 70 54 68 1 + 70 54 69 1 + 70 54 70 1 + 70 54 71 1 + 70 54 72 1 + 70 54 73 1 + 70 54 74 1 + 70 54 75 1 + 70 54 76 1 + 70 54 77 1 + 70 54 78 1 + 70 54 79 1 + 70 54 80 1 + 70 54 81 1 + 70 54 82 1 + 70 54 83 1 + 70 54 84 1 + 70 54 85 1 + 70 54 86 0.848902 + 70 54 87 0.013123 + 70 55 40 0.253138 + 70 55 41 0.999295 + 70 55 42 1 + 70 55 43 1 + 70 55 44 1 + 70 55 45 1 + 70 55 46 1 + 70 55 47 1 + 70 55 48 1 + 70 55 49 1 + 70 55 50 1 + 70 55 51 1 + 70 55 52 1 + 70 55 53 1 + 70 55 54 1 + 70 55 55 1 + 70 55 56 1 + 70 55 57 1 + 70 55 58 1 + 70 55 59 1 + 70 55 60 1 + 70 55 61 1 + 70 55 62 1 + 70 55 63 1 + 70 55 64 1 + 70 55 65 1 + 70 55 66 1 + 70 55 67 1 + 70 55 68 1 + 70 55 69 1 + 70 55 70 1 + 70 55 71 1 + 70 55 72 1 + 70 55 73 1 + 70 55 74 1 + 70 55 75 1 + 70 55 76 1 + 70 55 77 1 + 70 55 78 1 + 70 55 79 1 + 70 55 80 1 + 70 55 81 1 + 70 55 82 1 + 70 55 83 1 + 70 55 84 1 + 70 55 85 1 + 70 55 86 0.999295 + 70 55 87 0.253138 + 70 56 40 0.594037 + 70 56 41 1 + 70 56 42 1 + 70 56 43 1 + 70 56 44 1 + 70 56 45 1 + 70 56 46 1 + 70 56 47 1 + 70 56 48 1 + 70 56 49 1 + 70 56 50 1 + 70 56 51 1 + 70 56 52 1 + 70 56 53 1 + 70 56 54 1 + 70 56 55 1 + 70 56 56 1 + 70 56 57 1 + 70 56 58 1 + 70 56 59 1 + 70 56 60 1 + 70 56 61 1 + 70 56 62 1 + 70 56 63 1 + 70 56 64 1 + 70 56 65 1 + 70 56 66 1 + 70 56 67 1 + 70 56 68 1 + 70 56 69 1 + 70 56 70 1 + 70 56 71 1 + 70 56 72 1 + 70 56 73 1 + 70 56 74 1 + 70 56 75 1 + 70 56 76 1 + 70 56 77 1 + 70 56 78 1 + 70 56 79 1 + 70 56 80 1 + 70 56 81 1 + 70 56 82 1 + 70 56 83 1 + 70 56 84 1 + 70 56 85 1 + 70 56 86 1 + 70 56 87 0.594037 + 70 57 39 0.00913973 + 70 57 40 0.87979 + 70 57 41 1 + 70 57 42 1 + 70 57 43 1 + 70 57 44 1 + 70 57 45 1 + 70 57 46 1 + 70 57 47 1 + 70 57 48 1 + 70 57 49 1 + 70 57 50 1 + 70 57 51 1 + 70 57 52 1 + 70 57 53 1 + 70 57 54 1 + 70 57 55 1 + 70 57 56 1 + 70 57 57 1 + 70 57 58 1 + 70 57 59 1 + 70 57 60 1 + 70 57 61 1 + 70 57 62 1 + 70 57 63 1 + 70 57 64 1 + 70 57 65 1 + 70 57 66 1 + 70 57 67 1 + 70 57 68 1 + 70 57 69 1 + 70 57 70 1 + 70 57 71 1 + 70 57 72 1 + 70 57 73 1 + 70 57 74 1 + 70 57 75 1 + 70 57 76 1 + 70 57 77 1 + 70 57 78 1 + 70 57 79 1 + 70 57 80 1 + 70 57 81 1 + 70 57 82 1 + 70 57 83 1 + 70 57 84 1 + 70 57 85 1 + 70 57 86 1 + 70 57 87 0.87979 + 70 57 88 0.00913973 + 70 58 39 0.142672 + 70 58 40 0.996155 + 70 58 41 1 + 70 58 42 1 + 70 58 43 1 + 70 58 44 1 + 70 58 45 1 + 70 58 46 1 + 70 58 47 1 + 70 58 48 1 + 70 58 49 1 + 70 58 50 1 + 70 58 51 1 + 70 58 52 1 + 70 58 53 1 + 70 58 54 1 + 70 58 55 1 + 70 58 56 1 + 70 58 57 1 + 70 58 58 1 + 70 58 59 1 + 70 58 60 1 + 70 58 61 1 + 70 58 62 1 + 70 58 63 1 + 70 58 64 1 + 70 58 65 1 + 70 58 66 1 + 70 58 67 1 + 70 58 68 1 + 70 58 69 1 + 70 58 70 1 + 70 58 71 1 + 70 58 72 1 + 70 58 73 1 + 70 58 74 1 + 70 58 75 1 + 70 58 76 1 + 70 58 77 1 + 70 58 78 1 + 70 58 79 1 + 70 58 80 1 + 70 58 81 1 + 70 58 82 1 + 70 58 83 1 + 70 58 84 1 + 70 58 85 1 + 70 58 86 1 + 70 58 87 0.996155 + 70 58 88 0.142672 + 70 59 39 0.345113 + 70 59 40 1 + 70 59 41 1 + 70 59 42 1 + 70 59 43 1 + 70 59 44 1 + 70 59 45 1 + 70 59 46 1 + 70 59 47 1 + 70 59 48 1 + 70 59 49 1 + 70 59 50 1 + 70 59 51 1 + 70 59 52 1 + 70 59 53 1 + 70 59 54 1 + 70 59 55 1 + 70 59 56 1 + 70 59 57 1 + 70 59 58 1 + 70 59 59 1 + 70 59 60 1 + 70 59 61 1 + 70 59 62 1 + 70 59 63 1 + 70 59 64 1 + 70 59 65 1 + 70 59 66 1 + 70 59 67 1 + 70 59 68 1 + 70 59 69 1 + 70 59 70 1 + 70 59 71 1 + 70 59 72 1 + 70 59 73 1 + 70 59 74 1 + 70 59 75 1 + 70 59 76 1 + 70 59 77 1 + 70 59 78 1 + 70 59 79 1 + 70 59 80 1 + 70 59 81 1 + 70 59 82 1 + 70 59 83 1 + 70 59 84 1 + 70 59 85 1 + 70 59 86 1 + 70 59 87 1 + 70 59 88 0.345113 + 70 60 39 0.508892 + 70 60 40 1 + 70 60 41 1 + 70 60 42 1 + 70 60 43 1 + 70 60 44 1 + 70 60 45 1 + 70 60 46 1 + 70 60 47 1 + 70 60 48 1 + 70 60 49 1 + 70 60 50 1 + 70 60 51 1 + 70 60 52 1 + 70 60 53 1 + 70 60 54 1 + 70 60 55 1 + 70 60 56 1 + 70 60 57 1 + 70 60 58 1 + 70 60 59 1 + 70 60 60 1 + 70 60 61 1 + 70 60 62 1 + 70 60 63 1 + 70 60 64 1 + 70 60 65 1 + 70 60 66 1 + 70 60 67 1 + 70 60 68 1 + 70 60 69 1 + 70 60 70 1 + 70 60 71 1 + 70 60 72 1 + 70 60 73 1 + 70 60 74 1 + 70 60 75 1 + 70 60 76 1 + 70 60 77 1 + 70 60 78 1 + 70 60 79 1 + 70 60 80 1 + 70 60 81 1 + 70 60 82 1 + 70 60 83 1 + 70 60 84 1 + 70 60 85 1 + 70 60 86 1 + 70 60 87 1 + 70 60 88 0.508892 + 70 61 39 0.63101 + 70 61 40 1 + 70 61 41 1 + 70 61 42 1 + 70 61 43 1 + 70 61 44 1 + 70 61 45 1 + 70 61 46 1 + 70 61 47 1 + 70 61 48 1 + 70 61 49 1 + 70 61 50 1 + 70 61 51 1 + 70 61 52 1 + 70 61 53 1 + 70 61 54 1 + 70 61 55 1 + 70 61 56 1 + 70 61 57 1 + 70 61 58 1 + 70 61 59 1 + 70 61 60 1 + 70 61 61 1 + 70 61 62 1 + 70 61 63 1 + 70 61 64 1 + 70 61 65 1 + 70 61 66 1 + 70 61 67 1 + 70 61 68 1 + 70 61 69 1 + 70 61 70 1 + 70 61 71 1 + 70 61 72 1 + 70 61 73 1 + 70 61 74 1 + 70 61 75 1 + 70 61 76 1 + 70 61 77 1 + 70 61 78 1 + 70 61 79 1 + 70 61 80 1 + 70 61 81 1 + 70 61 82 1 + 70 61 83 1 + 70 61 84 1 + 70 61 85 1 + 70 61 86 1 + 70 61 87 1 + 70 61 88 0.63101 + 70 62 39 0.712087 + 70 62 40 1 + 70 62 41 1 + 70 62 42 1 + 70 62 43 1 + 70 62 44 1 + 70 62 45 1 + 70 62 46 1 + 70 62 47 1 + 70 62 48 1 + 70 62 49 1 + 70 62 50 1 + 70 62 51 1 + 70 62 52 1 + 70 62 53 1 + 70 62 54 1 + 70 62 55 1 + 70 62 56 1 + 70 62 57 1 + 70 62 58 1 + 70 62 59 1 + 70 62 60 1 + 70 62 61 1 + 70 62 62 1 + 70 62 63 1 + 70 62 64 1 + 70 62 65 1 + 70 62 66 1 + 70 62 67 1 + 70 62 68 1 + 70 62 69 1 + 70 62 70 1 + 70 62 71 1 + 70 62 72 1 + 70 62 73 1 + 70 62 74 1 + 70 62 75 1 + 70 62 76 1 + 70 62 77 1 + 70 62 78 1 + 70 62 79 1 + 70 62 80 1 + 70 62 81 1 + 70 62 82 1 + 70 62 83 1 + 70 62 84 1 + 70 62 85 1 + 70 62 86 1 + 70 62 87 1 + 70 62 88 0.712087 + 70 63 39 0.752526 + 70 63 40 1 + 70 63 41 1 + 70 63 42 1 + 70 63 43 1 + 70 63 44 1 + 70 63 45 1 + 70 63 46 1 + 70 63 47 1 + 70 63 48 1 + 70 63 49 1 + 70 63 50 1 + 70 63 51 1 + 70 63 52 1 + 70 63 53 1 + 70 63 54 1 + 70 63 55 1 + 70 63 56 1 + 70 63 57 1 + 70 63 58 1 + 70 63 59 1 + 70 63 60 1 + 70 63 61 1 + 70 63 62 1 + 70 63 63 1 + 70 63 64 1 + 70 63 65 1 + 70 63 66 1 + 70 63 67 1 + 70 63 68 1 + 70 63 69 1 + 70 63 70 1 + 70 63 71 1 + 70 63 72 1 + 70 63 73 1 + 70 63 74 1 + 70 63 75 1 + 70 63 76 1 + 70 63 77 1 + 70 63 78 1 + 70 63 79 1 + 70 63 80 1 + 70 63 81 1 + 70 63 82 1 + 70 63 83 1 + 70 63 84 1 + 70 63 85 1 + 70 63 86 1 + 70 63 87 1 + 70 63 88 0.752526 + 70 64 39 0.752526 + 70 64 40 1 + 70 64 41 1 + 70 64 42 1 + 70 64 43 1 + 70 64 44 1 + 70 64 45 1 + 70 64 46 1 + 70 64 47 1 + 70 64 48 1 + 70 64 49 1 + 70 64 50 1 + 70 64 51 1 + 70 64 52 1 + 70 64 53 1 + 70 64 54 1 + 70 64 55 1 + 70 64 56 1 + 70 64 57 1 + 70 64 58 1 + 70 64 59 1 + 70 64 60 1 + 70 64 61 1 + 70 64 62 1 + 70 64 63 1 + 70 64 64 1 + 70 64 65 1 + 70 64 66 1 + 70 64 67 1 + 70 64 68 1 + 70 64 69 1 + 70 64 70 1 + 70 64 71 1 + 70 64 72 1 + 70 64 73 1 + 70 64 74 1 + 70 64 75 1 + 70 64 76 1 + 70 64 77 1 + 70 64 78 1 + 70 64 79 1 + 70 64 80 1 + 70 64 81 1 + 70 64 82 1 + 70 64 83 1 + 70 64 84 1 + 70 64 85 1 + 70 64 86 1 + 70 64 87 1 + 70 64 88 0.752526 + 70 65 39 0.712087 + 70 65 40 1 + 70 65 41 1 + 70 65 42 1 + 70 65 43 1 + 70 65 44 1 + 70 65 45 1 + 70 65 46 1 + 70 65 47 1 + 70 65 48 1 + 70 65 49 1 + 70 65 50 1 + 70 65 51 1 + 70 65 52 1 + 70 65 53 1 + 70 65 54 1 + 70 65 55 1 + 70 65 56 1 + 70 65 57 1 + 70 65 58 1 + 70 65 59 1 + 70 65 60 1 + 70 65 61 1 + 70 65 62 1 + 70 65 63 1 + 70 65 64 1 + 70 65 65 1 + 70 65 66 1 + 70 65 67 1 + 70 65 68 1 + 70 65 69 1 + 70 65 70 1 + 70 65 71 1 + 70 65 72 1 + 70 65 73 1 + 70 65 74 1 + 70 65 75 1 + 70 65 76 1 + 70 65 77 1 + 70 65 78 1 + 70 65 79 1 + 70 65 80 1 + 70 65 81 1 + 70 65 82 1 + 70 65 83 1 + 70 65 84 1 + 70 65 85 1 + 70 65 86 1 + 70 65 87 1 + 70 65 88 0.712087 + 70 66 39 0.63101 + 70 66 40 1 + 70 66 41 1 + 70 66 42 1 + 70 66 43 1 + 70 66 44 1 + 70 66 45 1 + 70 66 46 1 + 70 66 47 1 + 70 66 48 1 + 70 66 49 1 + 70 66 50 1 + 70 66 51 1 + 70 66 52 1 + 70 66 53 1 + 70 66 54 1 + 70 66 55 1 + 70 66 56 1 + 70 66 57 1 + 70 66 58 1 + 70 66 59 1 + 70 66 60 1 + 70 66 61 1 + 70 66 62 1 + 70 66 63 1 + 70 66 64 1 + 70 66 65 1 + 70 66 66 1 + 70 66 67 1 + 70 66 68 1 + 70 66 69 1 + 70 66 70 1 + 70 66 71 1 + 70 66 72 1 + 70 66 73 1 + 70 66 74 1 + 70 66 75 1 + 70 66 76 1 + 70 66 77 1 + 70 66 78 1 + 70 66 79 1 + 70 66 80 1 + 70 66 81 1 + 70 66 82 1 + 70 66 83 1 + 70 66 84 1 + 70 66 85 1 + 70 66 86 1 + 70 66 87 1 + 70 66 88 0.63101 + 70 67 39 0.508892 + 70 67 40 1 + 70 67 41 1 + 70 67 42 1 + 70 67 43 1 + 70 67 44 1 + 70 67 45 1 + 70 67 46 1 + 70 67 47 1 + 70 67 48 1 + 70 67 49 1 + 70 67 50 1 + 70 67 51 1 + 70 67 52 1 + 70 67 53 1 + 70 67 54 1 + 70 67 55 1 + 70 67 56 1 + 70 67 57 1 + 70 67 58 1 + 70 67 59 1 + 70 67 60 1 + 70 67 61 1 + 70 67 62 1 + 70 67 63 1 + 70 67 64 1 + 70 67 65 1 + 70 67 66 1 + 70 67 67 1 + 70 67 68 1 + 70 67 69 1 + 70 67 70 1 + 70 67 71 1 + 70 67 72 1 + 70 67 73 1 + 70 67 74 1 + 70 67 75 1 + 70 67 76 1 + 70 67 77 1 + 70 67 78 1 + 70 67 79 1 + 70 67 80 1 + 70 67 81 1 + 70 67 82 1 + 70 67 83 1 + 70 67 84 1 + 70 67 85 1 + 70 67 86 1 + 70 67 87 1 + 70 67 88 0.508892 + 70 68 39 0.345113 + 70 68 40 1 + 70 68 41 1 + 70 68 42 1 + 70 68 43 1 + 70 68 44 1 + 70 68 45 1 + 70 68 46 1 + 70 68 47 1 + 70 68 48 1 + 70 68 49 1 + 70 68 50 1 + 70 68 51 1 + 70 68 52 1 + 70 68 53 1 + 70 68 54 1 + 70 68 55 1 + 70 68 56 1 + 70 68 57 1 + 70 68 58 1 + 70 68 59 1 + 70 68 60 1 + 70 68 61 1 + 70 68 62 1 + 70 68 63 1 + 70 68 64 1 + 70 68 65 1 + 70 68 66 1 + 70 68 67 1 + 70 68 68 1 + 70 68 69 1 + 70 68 70 1 + 70 68 71 1 + 70 68 72 1 + 70 68 73 1 + 70 68 74 1 + 70 68 75 1 + 70 68 76 1 + 70 68 77 1 + 70 68 78 1 + 70 68 79 1 + 70 68 80 1 + 70 68 81 1 + 70 68 82 1 + 70 68 83 1 + 70 68 84 1 + 70 68 85 1 + 70 68 86 1 + 70 68 87 1 + 70 68 88 0.345113 + 70 69 39 0.142672 + 70 69 40 0.996155 + 70 69 41 1 + 70 69 42 1 + 70 69 43 1 + 70 69 44 1 + 70 69 45 1 + 70 69 46 1 + 70 69 47 1 + 70 69 48 1 + 70 69 49 1 + 70 69 50 1 + 70 69 51 1 + 70 69 52 1 + 70 69 53 1 + 70 69 54 1 + 70 69 55 1 + 70 69 56 1 + 70 69 57 1 + 70 69 58 1 + 70 69 59 1 + 70 69 60 1 + 70 69 61 1 + 70 69 62 1 + 70 69 63 1 + 70 69 64 1 + 70 69 65 1 + 70 69 66 1 + 70 69 67 1 + 70 69 68 1 + 70 69 69 1 + 70 69 70 1 + 70 69 71 1 + 70 69 72 1 + 70 69 73 1 + 70 69 74 1 + 70 69 75 1 + 70 69 76 1 + 70 69 77 1 + 70 69 78 1 + 70 69 79 1 + 70 69 80 1 + 70 69 81 1 + 70 69 82 1 + 70 69 83 1 + 70 69 84 1 + 70 69 85 1 + 70 69 86 1 + 70 69 87 0.996155 + 70 69 88 0.142672 + 70 70 39 0.00913973 + 70 70 40 0.87979 + 70 70 41 1 + 70 70 42 1 + 70 70 43 1 + 70 70 44 1 + 70 70 45 1 + 70 70 46 1 + 70 70 47 1 + 70 70 48 1 + 70 70 49 1 + 70 70 50 1 + 70 70 51 1 + 70 70 52 1 + 70 70 53 1 + 70 70 54 1 + 70 70 55 1 + 70 70 56 1 + 70 70 57 1 + 70 70 58 1 + 70 70 59 1 + 70 70 60 1 + 70 70 61 1 + 70 70 62 1 + 70 70 63 1 + 70 70 64 1 + 70 70 65 1 + 70 70 66 1 + 70 70 67 1 + 70 70 68 1 + 70 70 69 1 + 70 70 70 1 + 70 70 71 1 + 70 70 72 1 + 70 70 73 1 + 70 70 74 1 + 70 70 75 1 + 70 70 76 1 + 70 70 77 1 + 70 70 78 1 + 70 70 79 1 + 70 70 80 1 + 70 70 81 1 + 70 70 82 1 + 70 70 83 1 + 70 70 84 1 + 70 70 85 1 + 70 70 86 1 + 70 70 87 0.87979 + 70 70 88 0.00913973 + 70 71 40 0.594037 + 70 71 41 1 + 70 71 42 1 + 70 71 43 1 + 70 71 44 1 + 70 71 45 1 + 70 71 46 1 + 70 71 47 1 + 70 71 48 1 + 70 71 49 1 + 70 71 50 1 + 70 71 51 1 + 70 71 52 1 + 70 71 53 1 + 70 71 54 1 + 70 71 55 1 + 70 71 56 1 + 70 71 57 1 + 70 71 58 1 + 70 71 59 1 + 70 71 60 1 + 70 71 61 1 + 70 71 62 1 + 70 71 63 1 + 70 71 64 1 + 70 71 65 1 + 70 71 66 1 + 70 71 67 1 + 70 71 68 1 + 70 71 69 1 + 70 71 70 1 + 70 71 71 1 + 70 71 72 1 + 70 71 73 1 + 70 71 74 1 + 70 71 75 1 + 70 71 76 1 + 70 71 77 1 + 70 71 78 1 + 70 71 79 1 + 70 71 80 1 + 70 71 81 1 + 70 71 82 1 + 70 71 83 1 + 70 71 84 1 + 70 71 85 1 + 70 71 86 1 + 70 71 87 0.594037 + 70 72 40 0.253138 + 70 72 41 0.999295 + 70 72 42 1 + 70 72 43 1 + 70 72 44 1 + 70 72 45 1 + 70 72 46 1 + 70 72 47 1 + 70 72 48 1 + 70 72 49 1 + 70 72 50 1 + 70 72 51 1 + 70 72 52 1 + 70 72 53 1 + 70 72 54 1 + 70 72 55 1 + 70 72 56 1 + 70 72 57 1 + 70 72 58 1 + 70 72 59 1 + 70 72 60 1 + 70 72 61 1 + 70 72 62 1 + 70 72 63 1 + 70 72 64 1 + 70 72 65 1 + 70 72 66 1 + 70 72 67 1 + 70 72 68 1 + 70 72 69 1 + 70 72 70 1 + 70 72 71 1 + 70 72 72 1 + 70 72 73 1 + 70 72 74 1 + 70 72 75 1 + 70 72 76 1 + 70 72 77 1 + 70 72 78 1 + 70 72 79 1 + 70 72 80 1 + 70 72 81 1 + 70 72 82 1 + 70 72 83 1 + 70 72 84 1 + 70 72 85 1 + 70 72 86 0.999295 + 70 72 87 0.253138 + 70 73 40 0.013123 + 70 73 41 0.848902 + 70 73 42 1 + 70 73 43 1 + 70 73 44 1 + 70 73 45 1 + 70 73 46 1 + 70 73 47 1 + 70 73 48 1 + 70 73 49 1 + 70 73 50 1 + 70 73 51 1 + 70 73 52 1 + 70 73 53 1 + 70 73 54 1 + 70 73 55 1 + 70 73 56 1 + 70 73 57 1 + 70 73 58 1 + 70 73 59 1 + 70 73 60 1 + 70 73 61 1 + 70 73 62 1 + 70 73 63 1 + 70 73 64 1 + 70 73 65 1 + 70 73 66 1 + 70 73 67 1 + 70 73 68 1 + 70 73 69 1 + 70 73 70 1 + 70 73 71 1 + 70 73 72 1 + 70 73 73 1 + 70 73 74 1 + 70 73 75 1 + 70 73 76 1 + 70 73 77 1 + 70 73 78 1 + 70 73 79 1 + 70 73 80 1 + 70 73 81 1 + 70 73 82 1 + 70 73 83 1 + 70 73 84 1 + 70 73 85 1 + 70 73 86 0.848902 + 70 73 87 0.013123 + 70 74 41 0.42026 + 70 74 42 1 + 70 74 43 1 + 70 74 44 1 + 70 74 45 1 + 70 74 46 1 + 70 74 47 1 + 70 74 48 1 + 70 74 49 1 + 70 74 50 1 + 70 74 51 1 + 70 74 52 1 + 70 74 53 1 + 70 74 54 1 + 70 74 55 1 + 70 74 56 1 + 70 74 57 1 + 70 74 58 1 + 70 74 59 1 + 70 74 60 1 + 70 74 61 1 + 70 74 62 1 + 70 74 63 1 + 70 74 64 1 + 70 74 65 1 + 70 74 66 1 + 70 74 67 1 + 70 74 68 1 + 70 74 69 1 + 70 74 70 1 + 70 74 71 1 + 70 74 72 1 + 70 74 73 1 + 70 74 74 1 + 70 74 75 1 + 70 74 76 1 + 70 74 77 1 + 70 74 78 1 + 70 74 79 1 + 70 74 80 1 + 70 74 81 1 + 70 74 82 1 + 70 74 83 1 + 70 74 84 1 + 70 74 85 1 + 70 74 86 0.42026 + 70 75 41 0.0398206 + 70 75 42 0.884209 + 70 75 43 1 + 70 75 44 1 + 70 75 45 1 + 70 75 46 1 + 70 75 47 1 + 70 75 48 1 + 70 75 49 1 + 70 75 50 1 + 70 75 51 1 + 70 75 52 1 + 70 75 53 1 + 70 75 54 1 + 70 75 55 1 + 70 75 56 1 + 70 75 57 1 + 70 75 58 1 + 70 75 59 1 + 70 75 60 1 + 70 75 61 1 + 70 75 62 1 + 70 75 63 1 + 70 75 64 1 + 70 75 65 1 + 70 75 66 1 + 70 75 67 1 + 70 75 68 1 + 70 75 69 1 + 70 75 70 1 + 70 75 71 1 + 70 75 72 1 + 70 75 73 1 + 70 75 74 1 + 70 75 75 1 + 70 75 76 1 + 70 75 77 1 + 70 75 78 1 + 70 75 79 1 + 70 75 80 1 + 70 75 81 1 + 70 75 82 1 + 70 75 83 1 + 70 75 84 1 + 70 75 85 0.884209 + 70 75 86 0.0398206 + 70 76 42 0.370069 + 70 76 43 0.999467 + 70 76 44 1 + 70 76 45 1 + 70 76 46 1 + 70 76 47 1 + 70 76 48 1 + 70 76 49 1 + 70 76 50 1 + 70 76 51 1 + 70 76 52 1 + 70 76 53 1 + 70 76 54 1 + 70 76 55 1 + 70 76 56 1 + 70 76 57 1 + 70 76 58 1 + 70 76 59 1 + 70 76 60 1 + 70 76 61 1 + 70 76 62 1 + 70 76 63 1 + 70 76 64 1 + 70 76 65 1 + 70 76 66 1 + 70 76 67 1 + 70 76 68 1 + 70 76 69 1 + 70 76 70 1 + 70 76 71 1 + 70 76 72 1 + 70 76 73 1 + 70 76 74 1 + 70 76 75 1 + 70 76 76 1 + 70 76 77 1 + 70 76 78 1 + 70 76 79 1 + 70 76 80 1 + 70 76 81 1 + 70 76 82 1 + 70 76 83 1 + 70 76 84 0.999467 + 70 76 85 0.370069 + 70 77 42 0.0100187 + 70 77 43 0.742086 + 70 77 44 1 + 70 77 45 1 + 70 77 46 1 + 70 77 47 1 + 70 77 48 1 + 70 77 49 1 + 70 77 50 1 + 70 77 51 1 + 70 77 52 1 + 70 77 53 1 + 70 77 54 1 + 70 77 55 1 + 70 77 56 1 + 70 77 57 1 + 70 77 58 1 + 70 77 59 1 + 70 77 60 1 + 70 77 61 1 + 70 77 62 1 + 70 77 63 1 + 70 77 64 1 + 70 77 65 1 + 70 77 66 1 + 70 77 67 1 + 70 77 68 1 + 70 77 69 1 + 70 77 70 1 + 70 77 71 1 + 70 77 72 1 + 70 77 73 1 + 70 77 74 1 + 70 77 75 1 + 70 77 76 1 + 70 77 77 1 + 70 77 78 1 + 70 77 79 1 + 70 77 80 1 + 70 77 81 1 + 70 77 82 1 + 70 77 83 1 + 70 77 84 0.742086 + 70 77 85 0.0100187 + 70 78 43 0.132621 + 70 78 44 0.933296 + 70 78 45 1 + 70 78 46 1 + 70 78 47 1 + 70 78 48 1 + 70 78 49 1 + 70 78 50 1 + 70 78 51 1 + 70 78 52 1 + 70 78 53 1 + 70 78 54 1 + 70 78 55 1 + 70 78 56 1 + 70 78 57 1 + 70 78 58 1 + 70 78 59 1 + 70 78 60 1 + 70 78 61 1 + 70 78 62 1 + 70 78 63 1 + 70 78 64 1 + 70 78 65 1 + 70 78 66 1 + 70 78 67 1 + 70 78 68 1 + 70 78 69 1 + 70 78 70 1 + 70 78 71 1 + 70 78 72 1 + 70 78 73 1 + 70 78 74 1 + 70 78 75 1 + 70 78 76 1 + 70 78 77 1 + 70 78 78 1 + 70 78 79 1 + 70 78 80 1 + 70 78 81 1 + 70 78 82 1 + 70 78 83 0.933296 + 70 78 84 0.132621 + 70 79 44 0.315874 + 70 79 45 0.987756 + 70 79 46 1 + 70 79 47 1 + 70 79 48 1 + 70 79 49 1 + 70 79 50 1 + 70 79 51 1 + 70 79 52 1 + 70 79 53 1 + 70 79 54 1 + 70 79 55 1 + 70 79 56 1 + 70 79 57 1 + 70 79 58 1 + 70 79 59 1 + 70 79 60 1 + 70 79 61 1 + 70 79 62 1 + 70 79 63 1 + 70 79 64 1 + 70 79 65 1 + 70 79 66 1 + 70 79 67 1 + 70 79 68 1 + 70 79 69 1 + 70 79 70 1 + 70 79 71 1 + 70 79 72 1 + 70 79 73 1 + 70 79 74 1 + 70 79 75 1 + 70 79 76 1 + 70 79 77 1 + 70 79 78 1 + 70 79 79 1 + 70 79 80 1 + 70 79 81 1 + 70 79 82 0.987756 + 70 79 83 0.315874 + 70 80 44 0.000148631 + 70 80 45 0.458559 + 70 80 46 0.997087 + 70 80 47 1 + 70 80 48 1 + 70 80 49 1 + 70 80 50 1 + 70 80 51 1 + 70 80 52 1 + 70 80 53 1 + 70 80 54 1 + 70 80 55 1 + 70 80 56 1 + 70 80 57 1 + 70 80 58 1 + 70 80 59 1 + 70 80 60 1 + 70 80 61 1 + 70 80 62 1 + 70 80 63 1 + 70 80 64 1 + 70 80 65 1 + 70 80 66 1 + 70 80 67 1 + 70 80 68 1 + 70 80 69 1 + 70 80 70 1 + 70 80 71 1 + 70 80 72 1 + 70 80 73 1 + 70 80 74 1 + 70 80 75 1 + 70 80 76 1 + 70 80 77 1 + 70 80 78 1 + 70 80 79 1 + 70 80 80 1 + 70 80 81 0.997087 + 70 80 82 0.458559 + 70 80 83 0.000148631 + 70 81 45 0.00284305 + 70 81 46 0.510026 + 70 81 47 0.997087 + 70 81 48 1 + 70 81 49 1 + 70 81 50 1 + 70 81 51 1 + 70 81 52 1 + 70 81 53 1 + 70 81 54 1 + 70 81 55 1 + 70 81 56 1 + 70 81 57 1 + 70 81 58 1 + 70 81 59 1 + 70 81 60 1 + 70 81 61 1 + 70 81 62 1 + 70 81 63 1 + 70 81 64 1 + 70 81 65 1 + 70 81 66 1 + 70 81 67 1 + 70 81 68 1 + 70 81 69 1 + 70 81 70 1 + 70 81 71 1 + 70 81 72 1 + 70 81 73 1 + 70 81 74 1 + 70 81 75 1 + 70 81 76 1 + 70 81 77 1 + 70 81 78 1 + 70 81 79 1 + 70 81 80 0.997087 + 70 81 81 0.510026 + 70 81 82 0.00284305 + 70 82 46 0.00284305 + 70 82 47 0.458559 + 70 82 48 0.987756 + 70 82 49 1 + 70 82 50 1 + 70 82 51 1 + 70 82 52 1 + 70 82 53 1 + 70 82 54 1 + 70 82 55 1 + 70 82 56 1 + 70 82 57 1 + 70 82 58 1 + 70 82 59 1 + 70 82 60 1 + 70 82 61 1 + 70 82 62 1 + 70 82 63 1 + 70 82 64 1 + 70 82 65 1 + 70 82 66 1 + 70 82 67 1 + 70 82 68 1 + 70 82 69 1 + 70 82 70 1 + 70 82 71 1 + 70 82 72 1 + 70 82 73 1 + 70 82 74 1 + 70 82 75 1 + 70 82 76 1 + 70 82 77 1 + 70 82 78 1 + 70 82 79 0.987756 + 70 82 80 0.458559 + 70 82 81 0.00284305 + 70 83 47 0.000148631 + 70 83 48 0.315874 + 70 83 49 0.933296 + 70 83 50 1 + 70 83 51 1 + 70 83 52 1 + 70 83 53 1 + 70 83 54 1 + 70 83 55 1 + 70 83 56 1 + 70 83 57 1 + 70 83 58 1 + 70 83 59 1 + 70 83 60 1 + 70 83 61 1 + 70 83 62 1 + 70 83 63 1 + 70 83 64 1 + 70 83 65 1 + 70 83 66 1 + 70 83 67 1 + 70 83 68 1 + 70 83 69 1 + 70 83 70 1 + 70 83 71 1 + 70 83 72 1 + 70 83 73 1 + 70 83 74 1 + 70 83 75 1 + 70 83 76 1 + 70 83 77 1 + 70 83 78 0.933296 + 70 83 79 0.315874 + 70 83 80 0.000148631 + 70 84 49 0.132621 + 70 84 50 0.742086 + 70 84 51 0.999467 + 70 84 52 1 + 70 84 53 1 + 70 84 54 1 + 70 84 55 1 + 70 84 56 1 + 70 84 57 1 + 70 84 58 1 + 70 84 59 1 + 70 84 60 1 + 70 84 61 1 + 70 84 62 1 + 70 84 63 1 + 70 84 64 1 + 70 84 65 1 + 70 84 66 1 + 70 84 67 1 + 70 84 68 1 + 70 84 69 1 + 70 84 70 1 + 70 84 71 1 + 70 84 72 1 + 70 84 73 1 + 70 84 74 1 + 70 84 75 1 + 70 84 76 0.999467 + 70 84 77 0.742086 + 70 84 78 0.132621 + 70 85 50 0.0100187 + 70 85 51 0.370069 + 70 85 52 0.884209 + 70 85 53 1 + 70 85 54 1 + 70 85 55 1 + 70 85 56 1 + 70 85 57 1 + 70 85 58 1 + 70 85 59 1 + 70 85 60 1 + 70 85 61 1 + 70 85 62 1 + 70 85 63 1 + 70 85 64 1 + 70 85 65 1 + 70 85 66 1 + 70 85 67 1 + 70 85 68 1 + 70 85 69 1 + 70 85 70 1 + 70 85 71 1 + 70 85 72 1 + 70 85 73 1 + 70 85 74 1 + 70 85 75 0.884209 + 70 85 76 0.370069 + 70 85 77 0.0100187 + 70 86 52 0.0398206 + 70 86 53 0.42026 + 70 86 54 0.848902 + 70 86 55 0.999295 + 70 86 56 1 + 70 86 57 1 + 70 86 58 1 + 70 86 59 1 + 70 86 60 1 + 70 86 61 1 + 70 86 62 1 + 70 86 63 1 + 70 86 64 1 + 70 86 65 1 + 70 86 66 1 + 70 86 67 1 + 70 86 68 1 + 70 86 69 1 + 70 86 70 1 + 70 86 71 1 + 70 86 72 0.999295 + 70 86 73 0.848902 + 70 86 74 0.42026 + 70 86 75 0.0398206 + 70 87 54 0.013123 + 70 87 55 0.253138 + 70 87 56 0.594037 + 70 87 57 0.87979 + 70 87 58 0.996155 + 70 87 59 1 + 70 87 60 1 + 70 87 61 1 + 70 87 62 1 + 70 87 63 1 + 70 87 64 1 + 70 87 65 1 + 70 87 66 1 + 70 87 67 1 + 70 87 68 1 + 70 87 69 0.996155 + 70 87 70 0.87979 + 70 87 71 0.594037 + 70 87 72 0.253138 + 70 87 73 0.013123 + 70 88 57 0.00913973 + 70 88 58 0.142672 + 70 88 59 0.345113 + 70 88 60 0.508892 + 70 88 61 0.63101 + 70 88 62 0.712087 + 70 88 63 0.752526 + 70 88 64 0.752526 + 70 88 65 0.712087 + 70 88 66 0.63101 + 70 88 67 0.508892 + 70 88 68 0.345113 + 70 88 69 0.142672 + 70 88 70 0.00913973 + 71 39 58 0.00366907 + 71 39 59 0.0767609 + 71 39 60 0.221559 + 71 39 61 0.345113 + 71 39 62 0.42714 + 71 39 63 0.46805 + 71 39 64 0.46805 + 71 39 65 0.42714 + 71 39 66 0.345113 + 71 39 67 0.221559 + 71 39 68 0.0767609 + 71 39 69 0.00366907 + 71 40 55 0.036314 + 71 40 56 0.295471 + 71 40 57 0.594037 + 71 40 58 0.843357 + 71 40 59 0.979056 + 71 40 60 0.999993 + 71 40 61 1 + 71 40 62 1 + 71 40 63 1 + 71 40 64 1 + 71 40 65 1 + 71 40 66 1 + 71 40 67 0.999993 + 71 40 68 0.979056 + 71 40 69 0.843357 + 71 40 70 0.594037 + 71 40 71 0.295471 + 71 40 72 0.036314 + 71 41 52 3.07754e-05 + 71 41 53 0.134362 + 71 41 54 0.553699 + 71 41 55 0.913043 + 71 41 56 0.999937 + 71 41 57 1 + 71 41 58 1 + 71 41 59 1 + 71 41 60 1 + 71 41 61 1 + 71 41 62 1 + 71 41 63 1 + 71 41 64 1 + 71 41 65 1 + 71 41 66 1 + 71 41 67 1 + 71 41 68 1 + 71 41 69 1 + 71 41 70 1 + 71 41 71 0.999937 + 71 41 72 0.913043 + 71 41 73 0.553699 + 71 41 74 0.134362 + 71 41 75 3.07754e-05 + 71 42 51 0.104302 + 71 42 52 0.602276 + 71 42 53 0.971405 + 71 42 54 1 + 71 42 55 1 + 71 42 56 1 + 71 42 57 1 + 71 42 58 1 + 71 42 59 1 + 71 42 60 1 + 71 42 61 1 + 71 42 62 1 + 71 42 63 1 + 71 42 64 1 + 71 42 65 1 + 71 42 66 1 + 71 42 67 1 + 71 42 68 1 + 71 42 69 1 + 71 42 70 1 + 71 42 71 1 + 71 42 72 1 + 71 42 73 1 + 71 42 74 0.971405 + 71 42 75 0.602276 + 71 42 76 0.104302 + 71 43 49 0.0114126 + 71 43 50 0.41284 + 71 43 51 0.935026 + 71 43 52 1 + 71 43 53 1 + 71 43 54 1 + 71 43 55 1 + 71 43 56 1 + 71 43 57 1 + 71 43 58 1 + 71 43 59 1 + 71 43 60 1 + 71 43 61 1 + 71 43 62 1 + 71 43 63 1 + 71 43 64 1 + 71 43 65 1 + 71 43 66 1 + 71 43 67 1 + 71 43 68 1 + 71 43 69 1 + 71 43 70 1 + 71 43 71 1 + 71 43 72 1 + 71 43 73 1 + 71 43 74 1 + 71 43 75 1 + 71 43 76 0.935026 + 71 43 77 0.41284 + 71 43 78 0.0114126 + 71 44 48 0.0811434 + 71 44 49 0.702444 + 71 44 50 0.999058 + 71 44 51 1 + 71 44 52 1 + 71 44 53 1 + 71 44 54 1 + 71 44 55 1 + 71 44 56 1 + 71 44 57 1 + 71 44 58 1 + 71 44 59 1 + 71 44 60 1 + 71 44 61 1 + 71 44 62 1 + 71 44 63 1 + 71 44 64 1 + 71 44 65 1 + 71 44 66 1 + 71 44 67 1 + 71 44 68 1 + 71 44 69 1 + 71 44 70 1 + 71 44 71 1 + 71 44 72 1 + 71 44 73 1 + 71 44 74 1 + 71 44 75 1 + 71 44 76 1 + 71 44 77 0.999058 + 71 44 78 0.702444 + 71 44 79 0.0811434 + 71 45 47 0.16137 + 71 45 48 0.856237 + 71 45 49 1 + 71 45 50 1 + 71 45 51 1 + 71 45 52 1 + 71 45 53 1 + 71 45 54 1 + 71 45 55 1 + 71 45 56 1 + 71 45 57 1 + 71 45 58 1 + 71 45 59 1 + 71 45 60 1 + 71 45 61 1 + 71 45 62 1 + 71 45 63 1 + 71 45 64 1 + 71 45 65 1 + 71 45 66 1 + 71 45 67 1 + 71 45 68 1 + 71 45 69 1 + 71 45 70 1 + 71 45 71 1 + 71 45 72 1 + 71 45 73 1 + 71 45 74 1 + 71 45 75 1 + 71 45 76 1 + 71 45 77 1 + 71 45 78 1 + 71 45 79 0.856237 + 71 45 80 0.16137 + 71 46 46 0.194293 + 71 46 47 0.910969 + 71 46 48 1 + 71 46 49 1 + 71 46 50 1 + 71 46 51 1 + 71 46 52 1 + 71 46 53 1 + 71 46 54 1 + 71 46 55 1 + 71 46 56 1 + 71 46 57 1 + 71 46 58 1 + 71 46 59 1 + 71 46 60 1 + 71 46 61 1 + 71 46 62 1 + 71 46 63 1 + 71 46 64 1 + 71 46 65 1 + 71 46 66 1 + 71 46 67 1 + 71 46 68 1 + 71 46 69 1 + 71 46 70 1 + 71 46 71 1 + 71 46 72 1 + 71 46 73 1 + 71 46 74 1 + 71 46 75 1 + 71 46 76 1 + 71 46 77 1 + 71 46 78 1 + 71 46 79 1 + 71 46 80 0.910969 + 71 46 81 0.194293 + 71 47 45 0.16137 + 71 47 46 0.910969 + 71 47 47 1 + 71 47 48 1 + 71 47 49 1 + 71 47 50 1 + 71 47 51 1 + 71 47 52 1 + 71 47 53 1 + 71 47 54 1 + 71 47 55 1 + 71 47 56 1 + 71 47 57 1 + 71 47 58 1 + 71 47 59 1 + 71 47 60 1 + 71 47 61 1 + 71 47 62 1 + 71 47 63 1 + 71 47 64 1 + 71 47 65 1 + 71 47 66 1 + 71 47 67 1 + 71 47 68 1 + 71 47 69 1 + 71 47 70 1 + 71 47 71 1 + 71 47 72 1 + 71 47 73 1 + 71 47 74 1 + 71 47 75 1 + 71 47 76 1 + 71 47 77 1 + 71 47 78 1 + 71 47 79 1 + 71 47 80 1 + 71 47 81 0.910969 + 71 47 82 0.16137 + 71 48 44 0.0811434 + 71 48 45 0.856237 + 71 48 46 1 + 71 48 47 1 + 71 48 48 1 + 71 48 49 1 + 71 48 50 1 + 71 48 51 1 + 71 48 52 1 + 71 48 53 1 + 71 48 54 1 + 71 48 55 1 + 71 48 56 1 + 71 48 57 1 + 71 48 58 1 + 71 48 59 1 + 71 48 60 1 + 71 48 61 1 + 71 48 62 1 + 71 48 63 1 + 71 48 64 1 + 71 48 65 1 + 71 48 66 1 + 71 48 67 1 + 71 48 68 1 + 71 48 69 1 + 71 48 70 1 + 71 48 71 1 + 71 48 72 1 + 71 48 73 1 + 71 48 74 1 + 71 48 75 1 + 71 48 76 1 + 71 48 77 1 + 71 48 78 1 + 71 48 79 1 + 71 48 80 1 + 71 48 81 1 + 71 48 82 0.856237 + 71 48 83 0.0811434 + 71 49 43 0.0114126 + 71 49 44 0.702444 + 71 49 45 1 + 71 49 46 1 + 71 49 47 1 + 71 49 48 1 + 71 49 49 1 + 71 49 50 1 + 71 49 51 1 + 71 49 52 1 + 71 49 53 1 + 71 49 54 1 + 71 49 55 1 + 71 49 56 1 + 71 49 57 1 + 71 49 58 1 + 71 49 59 1 + 71 49 60 1 + 71 49 61 1 + 71 49 62 1 + 71 49 63 1 + 71 49 64 1 + 71 49 65 1 + 71 49 66 1 + 71 49 67 1 + 71 49 68 1 + 71 49 69 1 + 71 49 70 1 + 71 49 71 1 + 71 49 72 1 + 71 49 73 1 + 71 49 74 1 + 71 49 75 1 + 71 49 76 1 + 71 49 77 1 + 71 49 78 1 + 71 49 79 1 + 71 49 80 1 + 71 49 81 1 + 71 49 82 1 + 71 49 83 0.702444 + 71 49 84 0.0114126 + 71 50 43 0.41284 + 71 50 44 0.999058 + 71 50 45 1 + 71 50 46 1 + 71 50 47 1 + 71 50 48 1 + 71 50 49 1 + 71 50 50 1 + 71 50 51 1 + 71 50 52 1 + 71 50 53 1 + 71 50 54 1 + 71 50 55 1 + 71 50 56 1 + 71 50 57 1 + 71 50 58 1 + 71 50 59 1 + 71 50 60 1 + 71 50 61 1 + 71 50 62 1 + 71 50 63 1 + 71 50 64 1 + 71 50 65 1 + 71 50 66 1 + 71 50 67 1 + 71 50 68 1 + 71 50 69 1 + 71 50 70 1 + 71 50 71 1 + 71 50 72 1 + 71 50 73 1 + 71 50 74 1 + 71 50 75 1 + 71 50 76 1 + 71 50 77 1 + 71 50 78 1 + 71 50 79 1 + 71 50 80 1 + 71 50 81 1 + 71 50 82 1 + 71 50 83 0.999058 + 71 50 84 0.41284 + 71 51 42 0.104302 + 71 51 43 0.935026 + 71 51 44 1 + 71 51 45 1 + 71 51 46 1 + 71 51 47 1 + 71 51 48 1 + 71 51 49 1 + 71 51 50 1 + 71 51 51 1 + 71 51 52 1 + 71 51 53 1 + 71 51 54 1 + 71 51 55 1 + 71 51 56 1 + 71 51 57 1 + 71 51 58 1 + 71 51 59 1 + 71 51 60 1 + 71 51 61 1 + 71 51 62 1 + 71 51 63 1 + 71 51 64 1 + 71 51 65 1 + 71 51 66 1 + 71 51 67 1 + 71 51 68 1 + 71 51 69 1 + 71 51 70 1 + 71 51 71 1 + 71 51 72 1 + 71 51 73 1 + 71 51 74 1 + 71 51 75 1 + 71 51 76 1 + 71 51 77 1 + 71 51 78 1 + 71 51 79 1 + 71 51 80 1 + 71 51 81 1 + 71 51 82 1 + 71 51 83 1 + 71 51 84 0.935026 + 71 51 85 0.104302 + 71 52 41 3.07754e-05 + 71 52 42 0.602276 + 71 52 43 1 + 71 52 44 1 + 71 52 45 1 + 71 52 46 1 + 71 52 47 1 + 71 52 48 1 + 71 52 49 1 + 71 52 50 1 + 71 52 51 1 + 71 52 52 1 + 71 52 53 1 + 71 52 54 1 + 71 52 55 1 + 71 52 56 1 + 71 52 57 1 + 71 52 58 1 + 71 52 59 1 + 71 52 60 1 + 71 52 61 1 + 71 52 62 1 + 71 52 63 1 + 71 52 64 1 + 71 52 65 1 + 71 52 66 1 + 71 52 67 1 + 71 52 68 1 + 71 52 69 1 + 71 52 70 1 + 71 52 71 1 + 71 52 72 1 + 71 52 73 1 + 71 52 74 1 + 71 52 75 1 + 71 52 76 1 + 71 52 77 1 + 71 52 78 1 + 71 52 79 1 + 71 52 80 1 + 71 52 81 1 + 71 52 82 1 + 71 52 83 1 + 71 52 84 1 + 71 52 85 0.602276 + 71 52 86 3.07754e-05 + 71 53 41 0.134362 + 71 53 42 0.971405 + 71 53 43 1 + 71 53 44 1 + 71 53 45 1 + 71 53 46 1 + 71 53 47 1 + 71 53 48 1 + 71 53 49 1 + 71 53 50 1 + 71 53 51 1 + 71 53 52 1 + 71 53 53 1 + 71 53 54 1 + 71 53 55 1 + 71 53 56 1 + 71 53 57 1 + 71 53 58 1 + 71 53 59 1 + 71 53 60 1 + 71 53 61 1 + 71 53 62 1 + 71 53 63 1 + 71 53 64 1 + 71 53 65 1 + 71 53 66 1 + 71 53 67 1 + 71 53 68 1 + 71 53 69 1 + 71 53 70 1 + 71 53 71 1 + 71 53 72 1 + 71 53 73 1 + 71 53 74 1 + 71 53 75 1 + 71 53 76 1 + 71 53 77 1 + 71 53 78 1 + 71 53 79 1 + 71 53 80 1 + 71 53 81 1 + 71 53 82 1 + 71 53 83 1 + 71 53 84 1 + 71 53 85 0.971405 + 71 53 86 0.134362 + 71 54 41 0.553699 + 71 54 42 1 + 71 54 43 1 + 71 54 44 1 + 71 54 45 1 + 71 54 46 1 + 71 54 47 1 + 71 54 48 1 + 71 54 49 1 + 71 54 50 1 + 71 54 51 1 + 71 54 52 1 + 71 54 53 1 + 71 54 54 1 + 71 54 55 1 + 71 54 56 1 + 71 54 57 1 + 71 54 58 1 + 71 54 59 1 + 71 54 60 1 + 71 54 61 1 + 71 54 62 1 + 71 54 63 1 + 71 54 64 1 + 71 54 65 1 + 71 54 66 1 + 71 54 67 1 + 71 54 68 1 + 71 54 69 1 + 71 54 70 1 + 71 54 71 1 + 71 54 72 1 + 71 54 73 1 + 71 54 74 1 + 71 54 75 1 + 71 54 76 1 + 71 54 77 1 + 71 54 78 1 + 71 54 79 1 + 71 54 80 1 + 71 54 81 1 + 71 54 82 1 + 71 54 83 1 + 71 54 84 1 + 71 54 85 1 + 71 54 86 0.553699 + 71 55 40 0.036314 + 71 55 41 0.913043 + 71 55 42 1 + 71 55 43 1 + 71 55 44 1 + 71 55 45 1 + 71 55 46 1 + 71 55 47 1 + 71 55 48 1 + 71 55 49 1 + 71 55 50 1 + 71 55 51 1 + 71 55 52 1 + 71 55 53 1 + 71 55 54 1 + 71 55 55 1 + 71 55 56 1 + 71 55 57 1 + 71 55 58 1 + 71 55 59 1 + 71 55 60 1 + 71 55 61 1 + 71 55 62 1 + 71 55 63 1 + 71 55 64 1 + 71 55 65 1 + 71 55 66 1 + 71 55 67 1 + 71 55 68 1 + 71 55 69 1 + 71 55 70 1 + 71 55 71 1 + 71 55 72 1 + 71 55 73 1 + 71 55 74 1 + 71 55 75 1 + 71 55 76 1 + 71 55 77 1 + 71 55 78 1 + 71 55 79 1 + 71 55 80 1 + 71 55 81 1 + 71 55 82 1 + 71 55 83 1 + 71 55 84 1 + 71 55 85 1 + 71 55 86 0.913043 + 71 55 87 0.036314 + 71 56 40 0.295471 + 71 56 41 0.999937 + 71 56 42 1 + 71 56 43 1 + 71 56 44 1 + 71 56 45 1 + 71 56 46 1 + 71 56 47 1 + 71 56 48 1 + 71 56 49 1 + 71 56 50 1 + 71 56 51 1 + 71 56 52 1 + 71 56 53 1 + 71 56 54 1 + 71 56 55 1 + 71 56 56 1 + 71 56 57 1 + 71 56 58 1 + 71 56 59 1 + 71 56 60 1 + 71 56 61 1 + 71 56 62 1 + 71 56 63 1 + 71 56 64 1 + 71 56 65 1 + 71 56 66 1 + 71 56 67 1 + 71 56 68 1 + 71 56 69 1 + 71 56 70 1 + 71 56 71 1 + 71 56 72 1 + 71 56 73 1 + 71 56 74 1 + 71 56 75 1 + 71 56 76 1 + 71 56 77 1 + 71 56 78 1 + 71 56 79 1 + 71 56 80 1 + 71 56 81 1 + 71 56 82 1 + 71 56 83 1 + 71 56 84 1 + 71 56 85 1 + 71 56 86 0.999937 + 71 56 87 0.295471 + 71 57 40 0.594037 + 71 57 41 1 + 71 57 42 1 + 71 57 43 1 + 71 57 44 1 + 71 57 45 1 + 71 57 46 1 + 71 57 47 1 + 71 57 48 1 + 71 57 49 1 + 71 57 50 1 + 71 57 51 1 + 71 57 52 1 + 71 57 53 1 + 71 57 54 1 + 71 57 55 1 + 71 57 56 1 + 71 57 57 1 + 71 57 58 1 + 71 57 59 1 + 71 57 60 1 + 71 57 61 1 + 71 57 62 1 + 71 57 63 1 + 71 57 64 1 + 71 57 65 1 + 71 57 66 1 + 71 57 67 1 + 71 57 68 1 + 71 57 69 1 + 71 57 70 1 + 71 57 71 1 + 71 57 72 1 + 71 57 73 1 + 71 57 74 1 + 71 57 75 1 + 71 57 76 1 + 71 57 77 1 + 71 57 78 1 + 71 57 79 1 + 71 57 80 1 + 71 57 81 1 + 71 57 82 1 + 71 57 83 1 + 71 57 84 1 + 71 57 85 1 + 71 57 86 1 + 71 57 87 0.594037 + 71 58 39 0.00366907 + 71 58 40 0.843357 + 71 58 41 1 + 71 58 42 1 + 71 58 43 1 + 71 58 44 1 + 71 58 45 1 + 71 58 46 1 + 71 58 47 1 + 71 58 48 1 + 71 58 49 1 + 71 58 50 1 + 71 58 51 1 + 71 58 52 1 + 71 58 53 1 + 71 58 54 1 + 71 58 55 1 + 71 58 56 1 + 71 58 57 1 + 71 58 58 1 + 71 58 59 1 + 71 58 60 1 + 71 58 61 1 + 71 58 62 1 + 71 58 63 1 + 71 58 64 1 + 71 58 65 1 + 71 58 66 1 + 71 58 67 1 + 71 58 68 1 + 71 58 69 1 + 71 58 70 1 + 71 58 71 1 + 71 58 72 1 + 71 58 73 1 + 71 58 74 1 + 71 58 75 1 + 71 58 76 1 + 71 58 77 1 + 71 58 78 1 + 71 58 79 1 + 71 58 80 1 + 71 58 81 1 + 71 58 82 1 + 71 58 83 1 + 71 58 84 1 + 71 58 85 1 + 71 58 86 1 + 71 58 87 0.843357 + 71 58 88 0.00366907 + 71 59 39 0.0767609 + 71 59 40 0.979056 + 71 59 41 1 + 71 59 42 1 + 71 59 43 1 + 71 59 44 1 + 71 59 45 1 + 71 59 46 1 + 71 59 47 1 + 71 59 48 1 + 71 59 49 1 + 71 59 50 1 + 71 59 51 1 + 71 59 52 1 + 71 59 53 1 + 71 59 54 1 + 71 59 55 1 + 71 59 56 1 + 71 59 57 1 + 71 59 58 1 + 71 59 59 1 + 71 59 60 1 + 71 59 61 1 + 71 59 62 1 + 71 59 63 1 + 71 59 64 1 + 71 59 65 1 + 71 59 66 1 + 71 59 67 1 + 71 59 68 1 + 71 59 69 1 + 71 59 70 1 + 71 59 71 1 + 71 59 72 1 + 71 59 73 1 + 71 59 74 1 + 71 59 75 1 + 71 59 76 1 + 71 59 77 1 + 71 59 78 1 + 71 59 79 1 + 71 59 80 1 + 71 59 81 1 + 71 59 82 1 + 71 59 83 1 + 71 59 84 1 + 71 59 85 1 + 71 59 86 1 + 71 59 87 0.979056 + 71 59 88 0.0767609 + 71 60 39 0.221559 + 71 60 40 0.999993 + 71 60 41 1 + 71 60 42 1 + 71 60 43 1 + 71 60 44 1 + 71 60 45 1 + 71 60 46 1 + 71 60 47 1 + 71 60 48 1 + 71 60 49 1 + 71 60 50 1 + 71 60 51 1 + 71 60 52 1 + 71 60 53 1 + 71 60 54 1 + 71 60 55 1 + 71 60 56 1 + 71 60 57 1 + 71 60 58 1 + 71 60 59 1 + 71 60 60 1 + 71 60 61 1 + 71 60 62 1 + 71 60 63 1 + 71 60 64 1 + 71 60 65 1 + 71 60 66 1 + 71 60 67 1 + 71 60 68 1 + 71 60 69 1 + 71 60 70 1 + 71 60 71 1 + 71 60 72 1 + 71 60 73 1 + 71 60 74 1 + 71 60 75 1 + 71 60 76 1 + 71 60 77 1 + 71 60 78 1 + 71 60 79 1 + 71 60 80 1 + 71 60 81 1 + 71 60 82 1 + 71 60 83 1 + 71 60 84 1 + 71 60 85 1 + 71 60 86 1 + 71 60 87 0.999993 + 71 60 88 0.221559 + 71 61 39 0.345113 + 71 61 40 1 + 71 61 41 1 + 71 61 42 1 + 71 61 43 1 + 71 61 44 1 + 71 61 45 1 + 71 61 46 1 + 71 61 47 1 + 71 61 48 1 + 71 61 49 1 + 71 61 50 1 + 71 61 51 1 + 71 61 52 1 + 71 61 53 1 + 71 61 54 1 + 71 61 55 1 + 71 61 56 1 + 71 61 57 1 + 71 61 58 1 + 71 61 59 1 + 71 61 60 1 + 71 61 61 1 + 71 61 62 1 + 71 61 63 1 + 71 61 64 1 + 71 61 65 1 + 71 61 66 1 + 71 61 67 1 + 71 61 68 1 + 71 61 69 1 + 71 61 70 1 + 71 61 71 1 + 71 61 72 1 + 71 61 73 1 + 71 61 74 1 + 71 61 75 1 + 71 61 76 1 + 71 61 77 1 + 71 61 78 1 + 71 61 79 1 + 71 61 80 1 + 71 61 81 1 + 71 61 82 1 + 71 61 83 1 + 71 61 84 1 + 71 61 85 1 + 71 61 86 1 + 71 61 87 1 + 71 61 88 0.345113 + 71 62 39 0.42714 + 71 62 40 1 + 71 62 41 1 + 71 62 42 1 + 71 62 43 1 + 71 62 44 1 + 71 62 45 1 + 71 62 46 1 + 71 62 47 1 + 71 62 48 1 + 71 62 49 1 + 71 62 50 1 + 71 62 51 1 + 71 62 52 1 + 71 62 53 1 + 71 62 54 1 + 71 62 55 1 + 71 62 56 1 + 71 62 57 1 + 71 62 58 1 + 71 62 59 1 + 71 62 60 1 + 71 62 61 1 + 71 62 62 1 + 71 62 63 1 + 71 62 64 1 + 71 62 65 1 + 71 62 66 1 + 71 62 67 1 + 71 62 68 1 + 71 62 69 1 + 71 62 70 1 + 71 62 71 1 + 71 62 72 1 + 71 62 73 1 + 71 62 74 1 + 71 62 75 1 + 71 62 76 1 + 71 62 77 1 + 71 62 78 1 + 71 62 79 1 + 71 62 80 1 + 71 62 81 1 + 71 62 82 1 + 71 62 83 1 + 71 62 84 1 + 71 62 85 1 + 71 62 86 1 + 71 62 87 1 + 71 62 88 0.42714 + 71 63 39 0.46805 + 71 63 40 1 + 71 63 41 1 + 71 63 42 1 + 71 63 43 1 + 71 63 44 1 + 71 63 45 1 + 71 63 46 1 + 71 63 47 1 + 71 63 48 1 + 71 63 49 1 + 71 63 50 1 + 71 63 51 1 + 71 63 52 1 + 71 63 53 1 + 71 63 54 1 + 71 63 55 1 + 71 63 56 1 + 71 63 57 1 + 71 63 58 1 + 71 63 59 1 + 71 63 60 1 + 71 63 61 1 + 71 63 62 1 + 71 63 63 1 + 71 63 64 1 + 71 63 65 1 + 71 63 66 1 + 71 63 67 1 + 71 63 68 1 + 71 63 69 1 + 71 63 70 1 + 71 63 71 1 + 71 63 72 1 + 71 63 73 1 + 71 63 74 1 + 71 63 75 1 + 71 63 76 1 + 71 63 77 1 + 71 63 78 1 + 71 63 79 1 + 71 63 80 1 + 71 63 81 1 + 71 63 82 1 + 71 63 83 1 + 71 63 84 1 + 71 63 85 1 + 71 63 86 1 + 71 63 87 1 + 71 63 88 0.46805 + 71 64 39 0.46805 + 71 64 40 1 + 71 64 41 1 + 71 64 42 1 + 71 64 43 1 + 71 64 44 1 + 71 64 45 1 + 71 64 46 1 + 71 64 47 1 + 71 64 48 1 + 71 64 49 1 + 71 64 50 1 + 71 64 51 1 + 71 64 52 1 + 71 64 53 1 + 71 64 54 1 + 71 64 55 1 + 71 64 56 1 + 71 64 57 1 + 71 64 58 1 + 71 64 59 1 + 71 64 60 1 + 71 64 61 1 + 71 64 62 1 + 71 64 63 1 + 71 64 64 1 + 71 64 65 1 + 71 64 66 1 + 71 64 67 1 + 71 64 68 1 + 71 64 69 1 + 71 64 70 1 + 71 64 71 1 + 71 64 72 1 + 71 64 73 1 + 71 64 74 1 + 71 64 75 1 + 71 64 76 1 + 71 64 77 1 + 71 64 78 1 + 71 64 79 1 + 71 64 80 1 + 71 64 81 1 + 71 64 82 1 + 71 64 83 1 + 71 64 84 1 + 71 64 85 1 + 71 64 86 1 + 71 64 87 1 + 71 64 88 0.46805 + 71 65 39 0.42714 + 71 65 40 1 + 71 65 41 1 + 71 65 42 1 + 71 65 43 1 + 71 65 44 1 + 71 65 45 1 + 71 65 46 1 + 71 65 47 1 + 71 65 48 1 + 71 65 49 1 + 71 65 50 1 + 71 65 51 1 + 71 65 52 1 + 71 65 53 1 + 71 65 54 1 + 71 65 55 1 + 71 65 56 1 + 71 65 57 1 + 71 65 58 1 + 71 65 59 1 + 71 65 60 1 + 71 65 61 1 + 71 65 62 1 + 71 65 63 1 + 71 65 64 1 + 71 65 65 1 + 71 65 66 1 + 71 65 67 1 + 71 65 68 1 + 71 65 69 1 + 71 65 70 1 + 71 65 71 1 + 71 65 72 1 + 71 65 73 1 + 71 65 74 1 + 71 65 75 1 + 71 65 76 1 + 71 65 77 1 + 71 65 78 1 + 71 65 79 1 + 71 65 80 1 + 71 65 81 1 + 71 65 82 1 + 71 65 83 1 + 71 65 84 1 + 71 65 85 1 + 71 65 86 1 + 71 65 87 1 + 71 65 88 0.42714 + 71 66 39 0.345113 + 71 66 40 1 + 71 66 41 1 + 71 66 42 1 + 71 66 43 1 + 71 66 44 1 + 71 66 45 1 + 71 66 46 1 + 71 66 47 1 + 71 66 48 1 + 71 66 49 1 + 71 66 50 1 + 71 66 51 1 + 71 66 52 1 + 71 66 53 1 + 71 66 54 1 + 71 66 55 1 + 71 66 56 1 + 71 66 57 1 + 71 66 58 1 + 71 66 59 1 + 71 66 60 1 + 71 66 61 1 + 71 66 62 1 + 71 66 63 1 + 71 66 64 1 + 71 66 65 1 + 71 66 66 1 + 71 66 67 1 + 71 66 68 1 + 71 66 69 1 + 71 66 70 1 + 71 66 71 1 + 71 66 72 1 + 71 66 73 1 + 71 66 74 1 + 71 66 75 1 + 71 66 76 1 + 71 66 77 1 + 71 66 78 1 + 71 66 79 1 + 71 66 80 1 + 71 66 81 1 + 71 66 82 1 + 71 66 83 1 + 71 66 84 1 + 71 66 85 1 + 71 66 86 1 + 71 66 87 1 + 71 66 88 0.345113 + 71 67 39 0.221559 + 71 67 40 0.999993 + 71 67 41 1 + 71 67 42 1 + 71 67 43 1 + 71 67 44 1 + 71 67 45 1 + 71 67 46 1 + 71 67 47 1 + 71 67 48 1 + 71 67 49 1 + 71 67 50 1 + 71 67 51 1 + 71 67 52 1 + 71 67 53 1 + 71 67 54 1 + 71 67 55 1 + 71 67 56 1 + 71 67 57 1 + 71 67 58 1 + 71 67 59 1 + 71 67 60 1 + 71 67 61 1 + 71 67 62 1 + 71 67 63 1 + 71 67 64 1 + 71 67 65 1 + 71 67 66 1 + 71 67 67 1 + 71 67 68 1 + 71 67 69 1 + 71 67 70 1 + 71 67 71 1 + 71 67 72 1 + 71 67 73 1 + 71 67 74 1 + 71 67 75 1 + 71 67 76 1 + 71 67 77 1 + 71 67 78 1 + 71 67 79 1 + 71 67 80 1 + 71 67 81 1 + 71 67 82 1 + 71 67 83 1 + 71 67 84 1 + 71 67 85 1 + 71 67 86 1 + 71 67 87 0.999993 + 71 67 88 0.221559 + 71 68 39 0.0767609 + 71 68 40 0.979056 + 71 68 41 1 + 71 68 42 1 + 71 68 43 1 + 71 68 44 1 + 71 68 45 1 + 71 68 46 1 + 71 68 47 1 + 71 68 48 1 + 71 68 49 1 + 71 68 50 1 + 71 68 51 1 + 71 68 52 1 + 71 68 53 1 + 71 68 54 1 + 71 68 55 1 + 71 68 56 1 + 71 68 57 1 + 71 68 58 1 + 71 68 59 1 + 71 68 60 1 + 71 68 61 1 + 71 68 62 1 + 71 68 63 1 + 71 68 64 1 + 71 68 65 1 + 71 68 66 1 + 71 68 67 1 + 71 68 68 1 + 71 68 69 1 + 71 68 70 1 + 71 68 71 1 + 71 68 72 1 + 71 68 73 1 + 71 68 74 1 + 71 68 75 1 + 71 68 76 1 + 71 68 77 1 + 71 68 78 1 + 71 68 79 1 + 71 68 80 1 + 71 68 81 1 + 71 68 82 1 + 71 68 83 1 + 71 68 84 1 + 71 68 85 1 + 71 68 86 1 + 71 68 87 0.979056 + 71 68 88 0.0767609 + 71 69 39 0.00366907 + 71 69 40 0.843357 + 71 69 41 1 + 71 69 42 1 + 71 69 43 1 + 71 69 44 1 + 71 69 45 1 + 71 69 46 1 + 71 69 47 1 + 71 69 48 1 + 71 69 49 1 + 71 69 50 1 + 71 69 51 1 + 71 69 52 1 + 71 69 53 1 + 71 69 54 1 + 71 69 55 1 + 71 69 56 1 + 71 69 57 1 + 71 69 58 1 + 71 69 59 1 + 71 69 60 1 + 71 69 61 1 + 71 69 62 1 + 71 69 63 1 + 71 69 64 1 + 71 69 65 1 + 71 69 66 1 + 71 69 67 1 + 71 69 68 1 + 71 69 69 1 + 71 69 70 1 + 71 69 71 1 + 71 69 72 1 + 71 69 73 1 + 71 69 74 1 + 71 69 75 1 + 71 69 76 1 + 71 69 77 1 + 71 69 78 1 + 71 69 79 1 + 71 69 80 1 + 71 69 81 1 + 71 69 82 1 + 71 69 83 1 + 71 69 84 1 + 71 69 85 1 + 71 69 86 1 + 71 69 87 0.843357 + 71 69 88 0.00366907 + 71 70 40 0.594037 + 71 70 41 1 + 71 70 42 1 + 71 70 43 1 + 71 70 44 1 + 71 70 45 1 + 71 70 46 1 + 71 70 47 1 + 71 70 48 1 + 71 70 49 1 + 71 70 50 1 + 71 70 51 1 + 71 70 52 1 + 71 70 53 1 + 71 70 54 1 + 71 70 55 1 + 71 70 56 1 + 71 70 57 1 + 71 70 58 1 + 71 70 59 1 + 71 70 60 1 + 71 70 61 1 + 71 70 62 1 + 71 70 63 1 + 71 70 64 1 + 71 70 65 1 + 71 70 66 1 + 71 70 67 1 + 71 70 68 1 + 71 70 69 1 + 71 70 70 1 + 71 70 71 1 + 71 70 72 1 + 71 70 73 1 + 71 70 74 1 + 71 70 75 1 + 71 70 76 1 + 71 70 77 1 + 71 70 78 1 + 71 70 79 1 + 71 70 80 1 + 71 70 81 1 + 71 70 82 1 + 71 70 83 1 + 71 70 84 1 + 71 70 85 1 + 71 70 86 1 + 71 70 87 0.594037 + 71 71 40 0.295471 + 71 71 41 0.999937 + 71 71 42 1 + 71 71 43 1 + 71 71 44 1 + 71 71 45 1 + 71 71 46 1 + 71 71 47 1 + 71 71 48 1 + 71 71 49 1 + 71 71 50 1 + 71 71 51 1 + 71 71 52 1 + 71 71 53 1 + 71 71 54 1 + 71 71 55 1 + 71 71 56 1 + 71 71 57 1 + 71 71 58 1 + 71 71 59 1 + 71 71 60 1 + 71 71 61 1 + 71 71 62 1 + 71 71 63 1 + 71 71 64 1 + 71 71 65 1 + 71 71 66 1 + 71 71 67 1 + 71 71 68 1 + 71 71 69 1 + 71 71 70 1 + 71 71 71 1 + 71 71 72 1 + 71 71 73 1 + 71 71 74 1 + 71 71 75 1 + 71 71 76 1 + 71 71 77 1 + 71 71 78 1 + 71 71 79 1 + 71 71 80 1 + 71 71 81 1 + 71 71 82 1 + 71 71 83 1 + 71 71 84 1 + 71 71 85 1 + 71 71 86 0.999937 + 71 71 87 0.295471 + 71 72 40 0.036314 + 71 72 41 0.913043 + 71 72 42 1 + 71 72 43 1 + 71 72 44 1 + 71 72 45 1 + 71 72 46 1 + 71 72 47 1 + 71 72 48 1 + 71 72 49 1 + 71 72 50 1 + 71 72 51 1 + 71 72 52 1 + 71 72 53 1 + 71 72 54 1 + 71 72 55 1 + 71 72 56 1 + 71 72 57 1 + 71 72 58 1 + 71 72 59 1 + 71 72 60 1 + 71 72 61 1 + 71 72 62 1 + 71 72 63 1 + 71 72 64 1 + 71 72 65 1 + 71 72 66 1 + 71 72 67 1 + 71 72 68 1 + 71 72 69 1 + 71 72 70 1 + 71 72 71 1 + 71 72 72 1 + 71 72 73 1 + 71 72 74 1 + 71 72 75 1 + 71 72 76 1 + 71 72 77 1 + 71 72 78 1 + 71 72 79 1 + 71 72 80 1 + 71 72 81 1 + 71 72 82 1 + 71 72 83 1 + 71 72 84 1 + 71 72 85 1 + 71 72 86 0.913043 + 71 72 87 0.036314 + 71 73 41 0.553699 + 71 73 42 1 + 71 73 43 1 + 71 73 44 1 + 71 73 45 1 + 71 73 46 1 + 71 73 47 1 + 71 73 48 1 + 71 73 49 1 + 71 73 50 1 + 71 73 51 1 + 71 73 52 1 + 71 73 53 1 + 71 73 54 1 + 71 73 55 1 + 71 73 56 1 + 71 73 57 1 + 71 73 58 1 + 71 73 59 1 + 71 73 60 1 + 71 73 61 1 + 71 73 62 1 + 71 73 63 1 + 71 73 64 1 + 71 73 65 1 + 71 73 66 1 + 71 73 67 1 + 71 73 68 1 + 71 73 69 1 + 71 73 70 1 + 71 73 71 1 + 71 73 72 1 + 71 73 73 1 + 71 73 74 1 + 71 73 75 1 + 71 73 76 1 + 71 73 77 1 + 71 73 78 1 + 71 73 79 1 + 71 73 80 1 + 71 73 81 1 + 71 73 82 1 + 71 73 83 1 + 71 73 84 1 + 71 73 85 1 + 71 73 86 0.553699 + 71 74 41 0.134362 + 71 74 42 0.971405 + 71 74 43 1 + 71 74 44 1 + 71 74 45 1 + 71 74 46 1 + 71 74 47 1 + 71 74 48 1 + 71 74 49 1 + 71 74 50 1 + 71 74 51 1 + 71 74 52 1 + 71 74 53 1 + 71 74 54 1 + 71 74 55 1 + 71 74 56 1 + 71 74 57 1 + 71 74 58 1 + 71 74 59 1 + 71 74 60 1 + 71 74 61 1 + 71 74 62 1 + 71 74 63 1 + 71 74 64 1 + 71 74 65 1 + 71 74 66 1 + 71 74 67 1 + 71 74 68 1 + 71 74 69 1 + 71 74 70 1 + 71 74 71 1 + 71 74 72 1 + 71 74 73 1 + 71 74 74 1 + 71 74 75 1 + 71 74 76 1 + 71 74 77 1 + 71 74 78 1 + 71 74 79 1 + 71 74 80 1 + 71 74 81 1 + 71 74 82 1 + 71 74 83 1 + 71 74 84 1 + 71 74 85 0.971405 + 71 74 86 0.134362 + 71 75 41 3.07754e-05 + 71 75 42 0.602276 + 71 75 43 1 + 71 75 44 1 + 71 75 45 1 + 71 75 46 1 + 71 75 47 1 + 71 75 48 1 + 71 75 49 1 + 71 75 50 1 + 71 75 51 1 + 71 75 52 1 + 71 75 53 1 + 71 75 54 1 + 71 75 55 1 + 71 75 56 1 + 71 75 57 1 + 71 75 58 1 + 71 75 59 1 + 71 75 60 1 + 71 75 61 1 + 71 75 62 1 + 71 75 63 1 + 71 75 64 1 + 71 75 65 1 + 71 75 66 1 + 71 75 67 1 + 71 75 68 1 + 71 75 69 1 + 71 75 70 1 + 71 75 71 1 + 71 75 72 1 + 71 75 73 1 + 71 75 74 1 + 71 75 75 1 + 71 75 76 1 + 71 75 77 1 + 71 75 78 1 + 71 75 79 1 + 71 75 80 1 + 71 75 81 1 + 71 75 82 1 + 71 75 83 1 + 71 75 84 1 + 71 75 85 0.602276 + 71 75 86 3.07754e-05 + 71 76 42 0.104302 + 71 76 43 0.935026 + 71 76 44 1 + 71 76 45 1 + 71 76 46 1 + 71 76 47 1 + 71 76 48 1 + 71 76 49 1 + 71 76 50 1 + 71 76 51 1 + 71 76 52 1 + 71 76 53 1 + 71 76 54 1 + 71 76 55 1 + 71 76 56 1 + 71 76 57 1 + 71 76 58 1 + 71 76 59 1 + 71 76 60 1 + 71 76 61 1 + 71 76 62 1 + 71 76 63 1 + 71 76 64 1 + 71 76 65 1 + 71 76 66 1 + 71 76 67 1 + 71 76 68 1 + 71 76 69 1 + 71 76 70 1 + 71 76 71 1 + 71 76 72 1 + 71 76 73 1 + 71 76 74 1 + 71 76 75 1 + 71 76 76 1 + 71 76 77 1 + 71 76 78 1 + 71 76 79 1 + 71 76 80 1 + 71 76 81 1 + 71 76 82 1 + 71 76 83 1 + 71 76 84 0.935026 + 71 76 85 0.104302 + 71 77 43 0.41284 + 71 77 44 0.999058 + 71 77 45 1 + 71 77 46 1 + 71 77 47 1 + 71 77 48 1 + 71 77 49 1 + 71 77 50 1 + 71 77 51 1 + 71 77 52 1 + 71 77 53 1 + 71 77 54 1 + 71 77 55 1 + 71 77 56 1 + 71 77 57 1 + 71 77 58 1 + 71 77 59 1 + 71 77 60 1 + 71 77 61 1 + 71 77 62 1 + 71 77 63 1 + 71 77 64 1 + 71 77 65 1 + 71 77 66 1 + 71 77 67 1 + 71 77 68 1 + 71 77 69 1 + 71 77 70 1 + 71 77 71 1 + 71 77 72 1 + 71 77 73 1 + 71 77 74 1 + 71 77 75 1 + 71 77 76 1 + 71 77 77 1 + 71 77 78 1 + 71 77 79 1 + 71 77 80 1 + 71 77 81 1 + 71 77 82 1 + 71 77 83 0.999058 + 71 77 84 0.41284 + 71 78 43 0.0114126 + 71 78 44 0.702444 + 71 78 45 1 + 71 78 46 1 + 71 78 47 1 + 71 78 48 1 + 71 78 49 1 + 71 78 50 1 + 71 78 51 1 + 71 78 52 1 + 71 78 53 1 + 71 78 54 1 + 71 78 55 1 + 71 78 56 1 + 71 78 57 1 + 71 78 58 1 + 71 78 59 1 + 71 78 60 1 + 71 78 61 1 + 71 78 62 1 + 71 78 63 1 + 71 78 64 1 + 71 78 65 1 + 71 78 66 1 + 71 78 67 1 + 71 78 68 1 + 71 78 69 1 + 71 78 70 1 + 71 78 71 1 + 71 78 72 1 + 71 78 73 1 + 71 78 74 1 + 71 78 75 1 + 71 78 76 1 + 71 78 77 1 + 71 78 78 1 + 71 78 79 1 + 71 78 80 1 + 71 78 81 1 + 71 78 82 1 + 71 78 83 0.702444 + 71 78 84 0.0114126 + 71 79 44 0.0811434 + 71 79 45 0.856237 + 71 79 46 1 + 71 79 47 1 + 71 79 48 1 + 71 79 49 1 + 71 79 50 1 + 71 79 51 1 + 71 79 52 1 + 71 79 53 1 + 71 79 54 1 + 71 79 55 1 + 71 79 56 1 + 71 79 57 1 + 71 79 58 1 + 71 79 59 1 + 71 79 60 1 + 71 79 61 1 + 71 79 62 1 + 71 79 63 1 + 71 79 64 1 + 71 79 65 1 + 71 79 66 1 + 71 79 67 1 + 71 79 68 1 + 71 79 69 1 + 71 79 70 1 + 71 79 71 1 + 71 79 72 1 + 71 79 73 1 + 71 79 74 1 + 71 79 75 1 + 71 79 76 1 + 71 79 77 1 + 71 79 78 1 + 71 79 79 1 + 71 79 80 1 + 71 79 81 1 + 71 79 82 0.856237 + 71 79 83 0.0811434 + 71 80 45 0.16137 + 71 80 46 0.910969 + 71 80 47 1 + 71 80 48 1 + 71 80 49 1 + 71 80 50 1 + 71 80 51 1 + 71 80 52 1 + 71 80 53 1 + 71 80 54 1 + 71 80 55 1 + 71 80 56 1 + 71 80 57 1 + 71 80 58 1 + 71 80 59 1 + 71 80 60 1 + 71 80 61 1 + 71 80 62 1 + 71 80 63 1 + 71 80 64 1 + 71 80 65 1 + 71 80 66 1 + 71 80 67 1 + 71 80 68 1 + 71 80 69 1 + 71 80 70 1 + 71 80 71 1 + 71 80 72 1 + 71 80 73 1 + 71 80 74 1 + 71 80 75 1 + 71 80 76 1 + 71 80 77 1 + 71 80 78 1 + 71 80 79 1 + 71 80 80 1 + 71 80 81 0.910969 + 71 80 82 0.16137 + 71 81 46 0.194293 + 71 81 47 0.910969 + 71 81 48 1 + 71 81 49 1 + 71 81 50 1 + 71 81 51 1 + 71 81 52 1 + 71 81 53 1 + 71 81 54 1 + 71 81 55 1 + 71 81 56 1 + 71 81 57 1 + 71 81 58 1 + 71 81 59 1 + 71 81 60 1 + 71 81 61 1 + 71 81 62 1 + 71 81 63 1 + 71 81 64 1 + 71 81 65 1 + 71 81 66 1 + 71 81 67 1 + 71 81 68 1 + 71 81 69 1 + 71 81 70 1 + 71 81 71 1 + 71 81 72 1 + 71 81 73 1 + 71 81 74 1 + 71 81 75 1 + 71 81 76 1 + 71 81 77 1 + 71 81 78 1 + 71 81 79 1 + 71 81 80 0.910969 + 71 81 81 0.194293 + 71 82 47 0.16137 + 71 82 48 0.856237 + 71 82 49 1 + 71 82 50 1 + 71 82 51 1 + 71 82 52 1 + 71 82 53 1 + 71 82 54 1 + 71 82 55 1 + 71 82 56 1 + 71 82 57 1 + 71 82 58 1 + 71 82 59 1 + 71 82 60 1 + 71 82 61 1 + 71 82 62 1 + 71 82 63 1 + 71 82 64 1 + 71 82 65 1 + 71 82 66 1 + 71 82 67 1 + 71 82 68 1 + 71 82 69 1 + 71 82 70 1 + 71 82 71 1 + 71 82 72 1 + 71 82 73 1 + 71 82 74 1 + 71 82 75 1 + 71 82 76 1 + 71 82 77 1 + 71 82 78 1 + 71 82 79 0.856237 + 71 82 80 0.16137 + 71 83 48 0.0811434 + 71 83 49 0.702444 + 71 83 50 0.999058 + 71 83 51 1 + 71 83 52 1 + 71 83 53 1 + 71 83 54 1 + 71 83 55 1 + 71 83 56 1 + 71 83 57 1 + 71 83 58 1 + 71 83 59 1 + 71 83 60 1 + 71 83 61 1 + 71 83 62 1 + 71 83 63 1 + 71 83 64 1 + 71 83 65 1 + 71 83 66 1 + 71 83 67 1 + 71 83 68 1 + 71 83 69 1 + 71 83 70 1 + 71 83 71 1 + 71 83 72 1 + 71 83 73 1 + 71 83 74 1 + 71 83 75 1 + 71 83 76 1 + 71 83 77 0.999058 + 71 83 78 0.702444 + 71 83 79 0.0811434 + 71 84 49 0.0114126 + 71 84 50 0.41284 + 71 84 51 0.935026 + 71 84 52 1 + 71 84 53 1 + 71 84 54 1 + 71 84 55 1 + 71 84 56 1 + 71 84 57 1 + 71 84 58 1 + 71 84 59 1 + 71 84 60 1 + 71 84 61 1 + 71 84 62 1 + 71 84 63 1 + 71 84 64 1 + 71 84 65 1 + 71 84 66 1 + 71 84 67 1 + 71 84 68 1 + 71 84 69 1 + 71 84 70 1 + 71 84 71 1 + 71 84 72 1 + 71 84 73 1 + 71 84 74 1 + 71 84 75 1 + 71 84 76 0.935026 + 71 84 77 0.41284 + 71 84 78 0.0114126 + 71 85 51 0.104302 + 71 85 52 0.602276 + 71 85 53 0.971405 + 71 85 54 1 + 71 85 55 1 + 71 85 56 1 + 71 85 57 1 + 71 85 58 1 + 71 85 59 1 + 71 85 60 1 + 71 85 61 1 + 71 85 62 1 + 71 85 63 1 + 71 85 64 1 + 71 85 65 1 + 71 85 66 1 + 71 85 67 1 + 71 85 68 1 + 71 85 69 1 + 71 85 70 1 + 71 85 71 1 + 71 85 72 1 + 71 85 73 1 + 71 85 74 0.971405 + 71 85 75 0.602276 + 71 85 76 0.104302 + 71 86 52 3.07754e-05 + 71 86 53 0.134362 + 71 86 54 0.553699 + 71 86 55 0.913043 + 71 86 56 0.999937 + 71 86 57 1 + 71 86 58 1 + 71 86 59 1 + 71 86 60 1 + 71 86 61 1 + 71 86 62 1 + 71 86 63 1 + 71 86 64 1 + 71 86 65 1 + 71 86 66 1 + 71 86 67 1 + 71 86 68 1 + 71 86 69 1 + 71 86 70 1 + 71 86 71 0.999937 + 71 86 72 0.913043 + 71 86 73 0.553699 + 71 86 74 0.134362 + 71 86 75 3.07754e-05 + 71 87 55 0.036314 + 71 87 56 0.295471 + 71 87 57 0.594037 + 71 87 58 0.843357 + 71 87 59 0.979056 + 71 87 60 0.999993 + 71 87 61 1 + 71 87 62 1 + 71 87 63 1 + 71 87 64 1 + 71 87 65 1 + 71 87 66 1 + 71 87 67 0.999993 + 71 87 68 0.979056 + 71 87 69 0.843357 + 71 87 70 0.594037 + 71 87 71 0.295471 + 71 87 72 0.036314 + 71 88 58 0.00366907 + 71 88 59 0.0767609 + 71 88 60 0.221559 + 71 88 61 0.345113 + 71 88 62 0.42714 + 71 88 63 0.46805 + 71 88 64 0.46805 + 71 88 65 0.42714 + 71 88 66 0.345113 + 71 88 67 0.221559 + 71 88 68 0.0767609 + 71 88 69 0.00366907 + 72 39 60 0.00850155 + 72 39 61 0.0529903 + 72 39 62 0.10703 + 72 39 63 0.141143 + 72 39 64 0.141143 + 72 39 65 0.10703 + 72 39 66 0.0529903 + 72 39 67 0.00850155 + 72 40 56 0.036314 + 72 40 57 0.253138 + 72 40 58 0.509102 + 72 40 59 0.720869 + 72 40 60 0.880429 + 72 40 61 0.961214 + 72 40 62 0.990327 + 72 40 63 0.997684 + 72 40 64 0.997684 + 72 40 65 0.990327 + 72 40 66 0.961214 + 72 40 67 0.880429 + 72 40 68 0.720869 + 72 40 69 0.509102 + 72 40 70 0.253138 + 72 40 71 0.036314 + 72 41 53 0.00460294 + 72 41 54 0.205791 + 72 41 55 0.598003 + 72 41 56 0.913043 + 72 41 57 0.999295 + 72 41 58 1 + 72 41 59 1 + 72 41 60 1 + 72 41 61 1 + 72 41 62 1 + 72 41 63 1 + 72 41 64 1 + 72 41 65 1 + 72 41 66 1 + 72 41 67 1 + 72 41 68 1 + 72 41 69 1 + 72 41 70 0.999295 + 72 41 71 0.913043 + 72 41 72 0.598003 + 72 41 73 0.205791 + 72 41 74 0.00460294 + 72 42 51 0.00260739 + 72 42 52 0.240042 + 72 42 53 0.736168 + 72 42 54 0.990286 + 72 42 55 1 + 72 42 56 1 + 72 42 57 1 + 72 42 58 1 + 72 42 59 1 + 72 42 60 1 + 72 42 61 1 + 72 42 62 1 + 72 42 63 1 + 72 42 64 1 + 72 42 65 1 + 72 42 66 1 + 72 42 67 1 + 72 42 68 1 + 72 42 69 1 + 72 42 70 1 + 72 42 71 1 + 72 42 72 1 + 72 42 73 0.990286 + 72 42 74 0.736168 + 72 42 75 0.240042 + 72 42 76 0.00260739 + 72 43 50 0.103719 + 72 43 51 0.652868 + 72 43 52 0.988606 + 72 43 53 1 + 72 43 54 1 + 72 43 55 1 + 72 43 56 1 + 72 43 57 1 + 72 43 58 1 + 72 43 59 1 + 72 43 60 1 + 72 43 61 1 + 72 43 62 1 + 72 43 63 1 + 72 43 64 1 + 72 43 65 1 + 72 43 66 1 + 72 43 67 1 + 72 43 68 1 + 72 43 69 1 + 72 43 70 1 + 72 43 71 1 + 72 43 72 1 + 72 43 73 1 + 72 43 74 1 + 72 43 75 0.988606 + 72 43 76 0.652868 + 72 43 77 0.103719 + 72 44 48 0.00138601 + 72 44 49 0.316818 + 72 44 50 0.912283 + 72 44 51 1 + 72 44 52 1 + 72 44 53 1 + 72 44 54 1 + 72 44 55 1 + 72 44 56 1 + 72 44 57 1 + 72 44 58 1 + 72 44 59 1 + 72 44 60 1 + 72 44 61 1 + 72 44 62 1 + 72 44 63 1 + 72 44 64 1 + 72 44 65 1 + 72 44 66 1 + 72 44 67 1 + 72 44 68 1 + 72 44 69 1 + 72 44 70 1 + 72 44 71 1 + 72 44 72 1 + 72 44 73 1 + 72 44 74 1 + 72 44 75 1 + 72 44 76 1 + 72 44 77 0.912283 + 72 44 78 0.316818 + 72 44 79 0.00138601 + 72 45 47 0.0128488 + 72 45 48 0.51 + 72 45 49 0.986811 + 72 45 50 1 + 72 45 51 1 + 72 45 52 1 + 72 45 53 1 + 72 45 54 1 + 72 45 55 1 + 72 45 56 1 + 72 45 57 1 + 72 45 58 1 + 72 45 59 1 + 72 45 60 1 + 72 45 61 1 + 72 45 62 1 + 72 45 63 1 + 72 45 64 1 + 72 45 65 1 + 72 45 66 1 + 72 45 67 1 + 72 45 68 1 + 72 45 69 1 + 72 45 70 1 + 72 45 71 1 + 72 45 72 1 + 72 45 73 1 + 72 45 74 1 + 72 45 75 1 + 72 45 76 1 + 72 45 77 1 + 72 45 78 0.986811 + 72 45 79 0.51 + 72 45 80 0.0128488 + 72 46 46 0.0207198 + 72 46 47 0.611412 + 72 46 48 0.998538 + 72 46 49 1 + 72 46 50 1 + 72 46 51 1 + 72 46 52 1 + 72 46 53 1 + 72 46 54 1 + 72 46 55 1 + 72 46 56 1 + 72 46 57 1 + 72 46 58 1 + 72 46 59 1 + 72 46 60 1 + 72 46 61 1 + 72 46 62 1 + 72 46 63 1 + 72 46 64 1 + 72 46 65 1 + 72 46 66 1 + 72 46 67 1 + 72 46 68 1 + 72 46 69 1 + 72 46 70 1 + 72 46 71 1 + 72 46 72 1 + 72 46 73 1 + 72 46 74 1 + 72 46 75 1 + 72 46 76 1 + 72 46 77 1 + 72 46 78 1 + 72 46 79 0.998538 + 72 46 80 0.611412 + 72 46 81 0.0207198 + 72 47 45 0.0128488 + 72 47 46 0.611412 + 72 47 47 0.99961 + 72 47 48 1 + 72 47 49 1 + 72 47 50 1 + 72 47 51 1 + 72 47 52 1 + 72 47 53 1 + 72 47 54 1 + 72 47 55 1 + 72 47 56 1 + 72 47 57 1 + 72 47 58 1 + 72 47 59 1 + 72 47 60 1 + 72 47 61 1 + 72 47 62 1 + 72 47 63 1 + 72 47 64 1 + 72 47 65 1 + 72 47 66 1 + 72 47 67 1 + 72 47 68 1 + 72 47 69 1 + 72 47 70 1 + 72 47 71 1 + 72 47 72 1 + 72 47 73 1 + 72 47 74 1 + 72 47 75 1 + 72 47 76 1 + 72 47 77 1 + 72 47 78 1 + 72 47 79 1 + 72 47 80 0.99961 + 72 47 81 0.611412 + 72 47 82 0.0128488 + 72 48 44 0.00138601 + 72 48 45 0.51 + 72 48 46 0.998538 + 72 48 47 1 + 72 48 48 1 + 72 48 49 1 + 72 48 50 1 + 72 48 51 1 + 72 48 52 1 + 72 48 53 1 + 72 48 54 1 + 72 48 55 1 + 72 48 56 1 + 72 48 57 1 + 72 48 58 1 + 72 48 59 1 + 72 48 60 1 + 72 48 61 1 + 72 48 62 1 + 72 48 63 1 + 72 48 64 1 + 72 48 65 1 + 72 48 66 1 + 72 48 67 1 + 72 48 68 1 + 72 48 69 1 + 72 48 70 1 + 72 48 71 1 + 72 48 72 1 + 72 48 73 1 + 72 48 74 1 + 72 48 75 1 + 72 48 76 1 + 72 48 77 1 + 72 48 78 1 + 72 48 79 1 + 72 48 80 1 + 72 48 81 0.998538 + 72 48 82 0.51 + 72 48 83 0.00138601 + 72 49 44 0.316818 + 72 49 45 0.986811 + 72 49 46 1 + 72 49 47 1 + 72 49 48 1 + 72 49 49 1 + 72 49 50 1 + 72 49 51 1 + 72 49 52 1 + 72 49 53 1 + 72 49 54 1 + 72 49 55 1 + 72 49 56 1 + 72 49 57 1 + 72 49 58 1 + 72 49 59 1 + 72 49 60 1 + 72 49 61 1 + 72 49 62 1 + 72 49 63 1 + 72 49 64 1 + 72 49 65 1 + 72 49 66 1 + 72 49 67 1 + 72 49 68 1 + 72 49 69 1 + 72 49 70 1 + 72 49 71 1 + 72 49 72 1 + 72 49 73 1 + 72 49 74 1 + 72 49 75 1 + 72 49 76 1 + 72 49 77 1 + 72 49 78 1 + 72 49 79 1 + 72 49 80 1 + 72 49 81 1 + 72 49 82 0.986811 + 72 49 83 0.316818 + 72 50 43 0.103719 + 72 50 44 0.912283 + 72 50 45 1 + 72 50 46 1 + 72 50 47 1 + 72 50 48 1 + 72 50 49 1 + 72 50 50 1 + 72 50 51 1 + 72 50 52 1 + 72 50 53 1 + 72 50 54 1 + 72 50 55 1 + 72 50 56 1 + 72 50 57 1 + 72 50 58 1 + 72 50 59 1 + 72 50 60 1 + 72 50 61 1 + 72 50 62 1 + 72 50 63 1 + 72 50 64 1 + 72 50 65 1 + 72 50 66 1 + 72 50 67 1 + 72 50 68 1 + 72 50 69 1 + 72 50 70 1 + 72 50 71 1 + 72 50 72 1 + 72 50 73 1 + 72 50 74 1 + 72 50 75 1 + 72 50 76 1 + 72 50 77 1 + 72 50 78 1 + 72 50 79 1 + 72 50 80 1 + 72 50 81 1 + 72 50 82 1 + 72 50 83 0.912283 + 72 50 84 0.103719 + 72 51 42 0.00260739 + 72 51 43 0.652868 + 72 51 44 1 + 72 51 45 1 + 72 51 46 1 + 72 51 47 1 + 72 51 48 1 + 72 51 49 1 + 72 51 50 1 + 72 51 51 1 + 72 51 52 1 + 72 51 53 1 + 72 51 54 1 + 72 51 55 1 + 72 51 56 1 + 72 51 57 1 + 72 51 58 1 + 72 51 59 1 + 72 51 60 1 + 72 51 61 1 + 72 51 62 1 + 72 51 63 1 + 72 51 64 1 + 72 51 65 1 + 72 51 66 1 + 72 51 67 1 + 72 51 68 1 + 72 51 69 1 + 72 51 70 1 + 72 51 71 1 + 72 51 72 1 + 72 51 73 1 + 72 51 74 1 + 72 51 75 1 + 72 51 76 1 + 72 51 77 1 + 72 51 78 1 + 72 51 79 1 + 72 51 80 1 + 72 51 81 1 + 72 51 82 1 + 72 51 83 1 + 72 51 84 0.652868 + 72 51 85 0.00260739 + 72 52 42 0.240042 + 72 52 43 0.988606 + 72 52 44 1 + 72 52 45 1 + 72 52 46 1 + 72 52 47 1 + 72 52 48 1 + 72 52 49 1 + 72 52 50 1 + 72 52 51 1 + 72 52 52 1 + 72 52 53 1 + 72 52 54 1 + 72 52 55 1 + 72 52 56 1 + 72 52 57 1 + 72 52 58 1 + 72 52 59 1 + 72 52 60 1 + 72 52 61 1 + 72 52 62 1 + 72 52 63 1 + 72 52 64 1 + 72 52 65 1 + 72 52 66 1 + 72 52 67 1 + 72 52 68 1 + 72 52 69 1 + 72 52 70 1 + 72 52 71 1 + 72 52 72 1 + 72 52 73 1 + 72 52 74 1 + 72 52 75 1 + 72 52 76 1 + 72 52 77 1 + 72 52 78 1 + 72 52 79 1 + 72 52 80 1 + 72 52 81 1 + 72 52 82 1 + 72 52 83 1 + 72 52 84 0.988606 + 72 52 85 0.240042 + 72 53 41 0.00460294 + 72 53 42 0.736168 + 72 53 43 1 + 72 53 44 1 + 72 53 45 1 + 72 53 46 1 + 72 53 47 1 + 72 53 48 1 + 72 53 49 1 + 72 53 50 1 + 72 53 51 1 + 72 53 52 1 + 72 53 53 1 + 72 53 54 1 + 72 53 55 1 + 72 53 56 1 + 72 53 57 1 + 72 53 58 1 + 72 53 59 1 + 72 53 60 1 + 72 53 61 1 + 72 53 62 1 + 72 53 63 1 + 72 53 64 1 + 72 53 65 1 + 72 53 66 1 + 72 53 67 1 + 72 53 68 1 + 72 53 69 1 + 72 53 70 1 + 72 53 71 1 + 72 53 72 1 + 72 53 73 1 + 72 53 74 1 + 72 53 75 1 + 72 53 76 1 + 72 53 77 1 + 72 53 78 1 + 72 53 79 1 + 72 53 80 1 + 72 53 81 1 + 72 53 82 1 + 72 53 83 1 + 72 53 84 1 + 72 53 85 0.736168 + 72 53 86 0.00460294 + 72 54 41 0.205791 + 72 54 42 0.990286 + 72 54 43 1 + 72 54 44 1 + 72 54 45 1 + 72 54 46 1 + 72 54 47 1 + 72 54 48 1 + 72 54 49 1 + 72 54 50 1 + 72 54 51 1 + 72 54 52 1 + 72 54 53 1 + 72 54 54 1 + 72 54 55 1 + 72 54 56 1 + 72 54 57 1 + 72 54 58 1 + 72 54 59 1 + 72 54 60 1 + 72 54 61 1 + 72 54 62 1 + 72 54 63 1 + 72 54 64 1 + 72 54 65 1 + 72 54 66 1 + 72 54 67 1 + 72 54 68 1 + 72 54 69 1 + 72 54 70 1 + 72 54 71 1 + 72 54 72 1 + 72 54 73 1 + 72 54 74 1 + 72 54 75 1 + 72 54 76 1 + 72 54 77 1 + 72 54 78 1 + 72 54 79 1 + 72 54 80 1 + 72 54 81 1 + 72 54 82 1 + 72 54 83 1 + 72 54 84 1 + 72 54 85 0.990286 + 72 54 86 0.205791 + 72 55 41 0.598003 + 72 55 42 1 + 72 55 43 1 + 72 55 44 1 + 72 55 45 1 + 72 55 46 1 + 72 55 47 1 + 72 55 48 1 + 72 55 49 1 + 72 55 50 1 + 72 55 51 1 + 72 55 52 1 + 72 55 53 1 + 72 55 54 1 + 72 55 55 1 + 72 55 56 1 + 72 55 57 1 + 72 55 58 1 + 72 55 59 1 + 72 55 60 1 + 72 55 61 1 + 72 55 62 1 + 72 55 63 1 + 72 55 64 1 + 72 55 65 1 + 72 55 66 1 + 72 55 67 1 + 72 55 68 1 + 72 55 69 1 + 72 55 70 1 + 72 55 71 1 + 72 55 72 1 + 72 55 73 1 + 72 55 74 1 + 72 55 75 1 + 72 55 76 1 + 72 55 77 1 + 72 55 78 1 + 72 55 79 1 + 72 55 80 1 + 72 55 81 1 + 72 55 82 1 + 72 55 83 1 + 72 55 84 1 + 72 55 85 1 + 72 55 86 0.598003 + 72 56 40 0.036314 + 72 56 41 0.913043 + 72 56 42 1 + 72 56 43 1 + 72 56 44 1 + 72 56 45 1 + 72 56 46 1 + 72 56 47 1 + 72 56 48 1 + 72 56 49 1 + 72 56 50 1 + 72 56 51 1 + 72 56 52 1 + 72 56 53 1 + 72 56 54 1 + 72 56 55 1 + 72 56 56 1 + 72 56 57 1 + 72 56 58 1 + 72 56 59 1 + 72 56 60 1 + 72 56 61 1 + 72 56 62 1 + 72 56 63 1 + 72 56 64 1 + 72 56 65 1 + 72 56 66 1 + 72 56 67 1 + 72 56 68 1 + 72 56 69 1 + 72 56 70 1 + 72 56 71 1 + 72 56 72 1 + 72 56 73 1 + 72 56 74 1 + 72 56 75 1 + 72 56 76 1 + 72 56 77 1 + 72 56 78 1 + 72 56 79 1 + 72 56 80 1 + 72 56 81 1 + 72 56 82 1 + 72 56 83 1 + 72 56 84 1 + 72 56 85 1 + 72 56 86 0.913043 + 72 56 87 0.036314 + 72 57 40 0.253138 + 72 57 41 0.999295 + 72 57 42 1 + 72 57 43 1 + 72 57 44 1 + 72 57 45 1 + 72 57 46 1 + 72 57 47 1 + 72 57 48 1 + 72 57 49 1 + 72 57 50 1 + 72 57 51 1 + 72 57 52 1 + 72 57 53 1 + 72 57 54 1 + 72 57 55 1 + 72 57 56 1 + 72 57 57 1 + 72 57 58 1 + 72 57 59 1 + 72 57 60 1 + 72 57 61 1 + 72 57 62 1 + 72 57 63 1 + 72 57 64 1 + 72 57 65 1 + 72 57 66 1 + 72 57 67 1 + 72 57 68 1 + 72 57 69 1 + 72 57 70 1 + 72 57 71 1 + 72 57 72 1 + 72 57 73 1 + 72 57 74 1 + 72 57 75 1 + 72 57 76 1 + 72 57 77 1 + 72 57 78 1 + 72 57 79 1 + 72 57 80 1 + 72 57 81 1 + 72 57 82 1 + 72 57 83 1 + 72 57 84 1 + 72 57 85 1 + 72 57 86 0.999295 + 72 57 87 0.253138 + 72 58 40 0.509102 + 72 58 41 1 + 72 58 42 1 + 72 58 43 1 + 72 58 44 1 + 72 58 45 1 + 72 58 46 1 + 72 58 47 1 + 72 58 48 1 + 72 58 49 1 + 72 58 50 1 + 72 58 51 1 + 72 58 52 1 + 72 58 53 1 + 72 58 54 1 + 72 58 55 1 + 72 58 56 1 + 72 58 57 1 + 72 58 58 1 + 72 58 59 1 + 72 58 60 1 + 72 58 61 1 + 72 58 62 1 + 72 58 63 1 + 72 58 64 1 + 72 58 65 1 + 72 58 66 1 + 72 58 67 1 + 72 58 68 1 + 72 58 69 1 + 72 58 70 1 + 72 58 71 1 + 72 58 72 1 + 72 58 73 1 + 72 58 74 1 + 72 58 75 1 + 72 58 76 1 + 72 58 77 1 + 72 58 78 1 + 72 58 79 1 + 72 58 80 1 + 72 58 81 1 + 72 58 82 1 + 72 58 83 1 + 72 58 84 1 + 72 58 85 1 + 72 58 86 1 + 72 58 87 0.509102 + 72 59 40 0.720869 + 72 59 41 1 + 72 59 42 1 + 72 59 43 1 + 72 59 44 1 + 72 59 45 1 + 72 59 46 1 + 72 59 47 1 + 72 59 48 1 + 72 59 49 1 + 72 59 50 1 + 72 59 51 1 + 72 59 52 1 + 72 59 53 1 + 72 59 54 1 + 72 59 55 1 + 72 59 56 1 + 72 59 57 1 + 72 59 58 1 + 72 59 59 1 + 72 59 60 1 + 72 59 61 1 + 72 59 62 1 + 72 59 63 1 + 72 59 64 1 + 72 59 65 1 + 72 59 66 1 + 72 59 67 1 + 72 59 68 1 + 72 59 69 1 + 72 59 70 1 + 72 59 71 1 + 72 59 72 1 + 72 59 73 1 + 72 59 74 1 + 72 59 75 1 + 72 59 76 1 + 72 59 77 1 + 72 59 78 1 + 72 59 79 1 + 72 59 80 1 + 72 59 81 1 + 72 59 82 1 + 72 59 83 1 + 72 59 84 1 + 72 59 85 1 + 72 59 86 1 + 72 59 87 0.720869 + 72 60 39 0.00850155 + 72 60 40 0.880429 + 72 60 41 1 + 72 60 42 1 + 72 60 43 1 + 72 60 44 1 + 72 60 45 1 + 72 60 46 1 + 72 60 47 1 + 72 60 48 1 + 72 60 49 1 + 72 60 50 1 + 72 60 51 1 + 72 60 52 1 + 72 60 53 1 + 72 60 54 1 + 72 60 55 1 + 72 60 56 1 + 72 60 57 1 + 72 60 58 1 + 72 60 59 1 + 72 60 60 1 + 72 60 61 1 + 72 60 62 1 + 72 60 63 1 + 72 60 64 1 + 72 60 65 1 + 72 60 66 1 + 72 60 67 1 + 72 60 68 1 + 72 60 69 1 + 72 60 70 1 + 72 60 71 1 + 72 60 72 1 + 72 60 73 1 + 72 60 74 1 + 72 60 75 1 + 72 60 76 1 + 72 60 77 1 + 72 60 78 1 + 72 60 79 1 + 72 60 80 1 + 72 60 81 1 + 72 60 82 1 + 72 60 83 1 + 72 60 84 1 + 72 60 85 1 + 72 60 86 1 + 72 60 87 0.880429 + 72 60 88 0.00850155 + 72 61 39 0.0529903 + 72 61 40 0.961214 + 72 61 41 1 + 72 61 42 1 + 72 61 43 1 + 72 61 44 1 + 72 61 45 1 + 72 61 46 1 + 72 61 47 1 + 72 61 48 1 + 72 61 49 1 + 72 61 50 1 + 72 61 51 1 + 72 61 52 1 + 72 61 53 1 + 72 61 54 1 + 72 61 55 1 + 72 61 56 1 + 72 61 57 1 + 72 61 58 1 + 72 61 59 1 + 72 61 60 1 + 72 61 61 1 + 72 61 62 1 + 72 61 63 1 + 72 61 64 1 + 72 61 65 1 + 72 61 66 1 + 72 61 67 1 + 72 61 68 1 + 72 61 69 1 + 72 61 70 1 + 72 61 71 1 + 72 61 72 1 + 72 61 73 1 + 72 61 74 1 + 72 61 75 1 + 72 61 76 1 + 72 61 77 1 + 72 61 78 1 + 72 61 79 1 + 72 61 80 1 + 72 61 81 1 + 72 61 82 1 + 72 61 83 1 + 72 61 84 1 + 72 61 85 1 + 72 61 86 1 + 72 61 87 0.961214 + 72 61 88 0.0529903 + 72 62 39 0.10703 + 72 62 40 0.990327 + 72 62 41 1 + 72 62 42 1 + 72 62 43 1 + 72 62 44 1 + 72 62 45 1 + 72 62 46 1 + 72 62 47 1 + 72 62 48 1 + 72 62 49 1 + 72 62 50 1 + 72 62 51 1 + 72 62 52 1 + 72 62 53 1 + 72 62 54 1 + 72 62 55 1 + 72 62 56 1 + 72 62 57 1 + 72 62 58 1 + 72 62 59 1 + 72 62 60 1 + 72 62 61 1 + 72 62 62 1 + 72 62 63 1 + 72 62 64 1 + 72 62 65 1 + 72 62 66 1 + 72 62 67 1 + 72 62 68 1 + 72 62 69 1 + 72 62 70 1 + 72 62 71 1 + 72 62 72 1 + 72 62 73 1 + 72 62 74 1 + 72 62 75 1 + 72 62 76 1 + 72 62 77 1 + 72 62 78 1 + 72 62 79 1 + 72 62 80 1 + 72 62 81 1 + 72 62 82 1 + 72 62 83 1 + 72 62 84 1 + 72 62 85 1 + 72 62 86 1 + 72 62 87 0.990327 + 72 62 88 0.10703 + 72 63 39 0.141143 + 72 63 40 0.997684 + 72 63 41 1 + 72 63 42 1 + 72 63 43 1 + 72 63 44 1 + 72 63 45 1 + 72 63 46 1 + 72 63 47 1 + 72 63 48 1 + 72 63 49 1 + 72 63 50 1 + 72 63 51 1 + 72 63 52 1 + 72 63 53 1 + 72 63 54 1 + 72 63 55 1 + 72 63 56 1 + 72 63 57 1 + 72 63 58 1 + 72 63 59 1 + 72 63 60 1 + 72 63 61 1 + 72 63 62 1 + 72 63 63 1 + 72 63 64 1 + 72 63 65 1 + 72 63 66 1 + 72 63 67 1 + 72 63 68 1 + 72 63 69 1 + 72 63 70 1 + 72 63 71 1 + 72 63 72 1 + 72 63 73 1 + 72 63 74 1 + 72 63 75 1 + 72 63 76 1 + 72 63 77 1 + 72 63 78 1 + 72 63 79 1 + 72 63 80 1 + 72 63 81 1 + 72 63 82 1 + 72 63 83 1 + 72 63 84 1 + 72 63 85 1 + 72 63 86 1 + 72 63 87 0.997684 + 72 63 88 0.141143 + 72 64 39 0.141143 + 72 64 40 0.997684 + 72 64 41 1 + 72 64 42 1 + 72 64 43 1 + 72 64 44 1 + 72 64 45 1 + 72 64 46 1 + 72 64 47 1 + 72 64 48 1 + 72 64 49 1 + 72 64 50 1 + 72 64 51 1 + 72 64 52 1 + 72 64 53 1 + 72 64 54 1 + 72 64 55 1 + 72 64 56 1 + 72 64 57 1 + 72 64 58 1 + 72 64 59 1 + 72 64 60 1 + 72 64 61 1 + 72 64 62 1 + 72 64 63 1 + 72 64 64 1 + 72 64 65 1 + 72 64 66 1 + 72 64 67 1 + 72 64 68 1 + 72 64 69 1 + 72 64 70 1 + 72 64 71 1 + 72 64 72 1 + 72 64 73 1 + 72 64 74 1 + 72 64 75 1 + 72 64 76 1 + 72 64 77 1 + 72 64 78 1 + 72 64 79 1 + 72 64 80 1 + 72 64 81 1 + 72 64 82 1 + 72 64 83 1 + 72 64 84 1 + 72 64 85 1 + 72 64 86 1 + 72 64 87 0.997684 + 72 64 88 0.141143 + 72 65 39 0.10703 + 72 65 40 0.990327 + 72 65 41 1 + 72 65 42 1 + 72 65 43 1 + 72 65 44 1 + 72 65 45 1 + 72 65 46 1 + 72 65 47 1 + 72 65 48 1 + 72 65 49 1 + 72 65 50 1 + 72 65 51 1 + 72 65 52 1 + 72 65 53 1 + 72 65 54 1 + 72 65 55 1 + 72 65 56 1 + 72 65 57 1 + 72 65 58 1 + 72 65 59 1 + 72 65 60 1 + 72 65 61 1 + 72 65 62 1 + 72 65 63 1 + 72 65 64 1 + 72 65 65 1 + 72 65 66 1 + 72 65 67 1 + 72 65 68 1 + 72 65 69 1 + 72 65 70 1 + 72 65 71 1 + 72 65 72 1 + 72 65 73 1 + 72 65 74 1 + 72 65 75 1 + 72 65 76 1 + 72 65 77 1 + 72 65 78 1 + 72 65 79 1 + 72 65 80 1 + 72 65 81 1 + 72 65 82 1 + 72 65 83 1 + 72 65 84 1 + 72 65 85 1 + 72 65 86 1 + 72 65 87 0.990327 + 72 65 88 0.10703 + 72 66 39 0.0529903 + 72 66 40 0.961214 + 72 66 41 1 + 72 66 42 1 + 72 66 43 1 + 72 66 44 1 + 72 66 45 1 + 72 66 46 1 + 72 66 47 1 + 72 66 48 1 + 72 66 49 1 + 72 66 50 1 + 72 66 51 1 + 72 66 52 1 + 72 66 53 1 + 72 66 54 1 + 72 66 55 1 + 72 66 56 1 + 72 66 57 1 + 72 66 58 1 + 72 66 59 1 + 72 66 60 1 + 72 66 61 1 + 72 66 62 1 + 72 66 63 1 + 72 66 64 1 + 72 66 65 1 + 72 66 66 1 + 72 66 67 1 + 72 66 68 1 + 72 66 69 1 + 72 66 70 1 + 72 66 71 1 + 72 66 72 1 + 72 66 73 1 + 72 66 74 1 + 72 66 75 1 + 72 66 76 1 + 72 66 77 1 + 72 66 78 1 + 72 66 79 1 + 72 66 80 1 + 72 66 81 1 + 72 66 82 1 + 72 66 83 1 + 72 66 84 1 + 72 66 85 1 + 72 66 86 1 + 72 66 87 0.961214 + 72 66 88 0.0529903 + 72 67 39 0.00850155 + 72 67 40 0.880429 + 72 67 41 1 + 72 67 42 1 + 72 67 43 1 + 72 67 44 1 + 72 67 45 1 + 72 67 46 1 + 72 67 47 1 + 72 67 48 1 + 72 67 49 1 + 72 67 50 1 + 72 67 51 1 + 72 67 52 1 + 72 67 53 1 + 72 67 54 1 + 72 67 55 1 + 72 67 56 1 + 72 67 57 1 + 72 67 58 1 + 72 67 59 1 + 72 67 60 1 + 72 67 61 1 + 72 67 62 1 + 72 67 63 1 + 72 67 64 1 + 72 67 65 1 + 72 67 66 1 + 72 67 67 1 + 72 67 68 1 + 72 67 69 1 + 72 67 70 1 + 72 67 71 1 + 72 67 72 1 + 72 67 73 1 + 72 67 74 1 + 72 67 75 1 + 72 67 76 1 + 72 67 77 1 + 72 67 78 1 + 72 67 79 1 + 72 67 80 1 + 72 67 81 1 + 72 67 82 1 + 72 67 83 1 + 72 67 84 1 + 72 67 85 1 + 72 67 86 1 + 72 67 87 0.880429 + 72 67 88 0.00850155 + 72 68 40 0.720869 + 72 68 41 1 + 72 68 42 1 + 72 68 43 1 + 72 68 44 1 + 72 68 45 1 + 72 68 46 1 + 72 68 47 1 + 72 68 48 1 + 72 68 49 1 + 72 68 50 1 + 72 68 51 1 + 72 68 52 1 + 72 68 53 1 + 72 68 54 1 + 72 68 55 1 + 72 68 56 1 + 72 68 57 1 + 72 68 58 1 + 72 68 59 1 + 72 68 60 1 + 72 68 61 1 + 72 68 62 1 + 72 68 63 1 + 72 68 64 1 + 72 68 65 1 + 72 68 66 1 + 72 68 67 1 + 72 68 68 1 + 72 68 69 1 + 72 68 70 1 + 72 68 71 1 + 72 68 72 1 + 72 68 73 1 + 72 68 74 1 + 72 68 75 1 + 72 68 76 1 + 72 68 77 1 + 72 68 78 1 + 72 68 79 1 + 72 68 80 1 + 72 68 81 1 + 72 68 82 1 + 72 68 83 1 + 72 68 84 1 + 72 68 85 1 + 72 68 86 1 + 72 68 87 0.720869 + 72 69 40 0.509102 + 72 69 41 1 + 72 69 42 1 + 72 69 43 1 + 72 69 44 1 + 72 69 45 1 + 72 69 46 1 + 72 69 47 1 + 72 69 48 1 + 72 69 49 1 + 72 69 50 1 + 72 69 51 1 + 72 69 52 1 + 72 69 53 1 + 72 69 54 1 + 72 69 55 1 + 72 69 56 1 + 72 69 57 1 + 72 69 58 1 + 72 69 59 1 + 72 69 60 1 + 72 69 61 1 + 72 69 62 1 + 72 69 63 1 + 72 69 64 1 + 72 69 65 1 + 72 69 66 1 + 72 69 67 1 + 72 69 68 1 + 72 69 69 1 + 72 69 70 1 + 72 69 71 1 + 72 69 72 1 + 72 69 73 1 + 72 69 74 1 + 72 69 75 1 + 72 69 76 1 + 72 69 77 1 + 72 69 78 1 + 72 69 79 1 + 72 69 80 1 + 72 69 81 1 + 72 69 82 1 + 72 69 83 1 + 72 69 84 1 + 72 69 85 1 + 72 69 86 1 + 72 69 87 0.509102 + 72 70 40 0.253138 + 72 70 41 0.999295 + 72 70 42 1 + 72 70 43 1 + 72 70 44 1 + 72 70 45 1 + 72 70 46 1 + 72 70 47 1 + 72 70 48 1 + 72 70 49 1 + 72 70 50 1 + 72 70 51 1 + 72 70 52 1 + 72 70 53 1 + 72 70 54 1 + 72 70 55 1 + 72 70 56 1 + 72 70 57 1 + 72 70 58 1 + 72 70 59 1 + 72 70 60 1 + 72 70 61 1 + 72 70 62 1 + 72 70 63 1 + 72 70 64 1 + 72 70 65 1 + 72 70 66 1 + 72 70 67 1 + 72 70 68 1 + 72 70 69 1 + 72 70 70 1 + 72 70 71 1 + 72 70 72 1 + 72 70 73 1 + 72 70 74 1 + 72 70 75 1 + 72 70 76 1 + 72 70 77 1 + 72 70 78 1 + 72 70 79 1 + 72 70 80 1 + 72 70 81 1 + 72 70 82 1 + 72 70 83 1 + 72 70 84 1 + 72 70 85 1 + 72 70 86 0.999295 + 72 70 87 0.253138 + 72 71 40 0.036314 + 72 71 41 0.913043 + 72 71 42 1 + 72 71 43 1 + 72 71 44 1 + 72 71 45 1 + 72 71 46 1 + 72 71 47 1 + 72 71 48 1 + 72 71 49 1 + 72 71 50 1 + 72 71 51 1 + 72 71 52 1 + 72 71 53 1 + 72 71 54 1 + 72 71 55 1 + 72 71 56 1 + 72 71 57 1 + 72 71 58 1 + 72 71 59 1 + 72 71 60 1 + 72 71 61 1 + 72 71 62 1 + 72 71 63 1 + 72 71 64 1 + 72 71 65 1 + 72 71 66 1 + 72 71 67 1 + 72 71 68 1 + 72 71 69 1 + 72 71 70 1 + 72 71 71 1 + 72 71 72 1 + 72 71 73 1 + 72 71 74 1 + 72 71 75 1 + 72 71 76 1 + 72 71 77 1 + 72 71 78 1 + 72 71 79 1 + 72 71 80 1 + 72 71 81 1 + 72 71 82 1 + 72 71 83 1 + 72 71 84 1 + 72 71 85 1 + 72 71 86 0.913043 + 72 71 87 0.036314 + 72 72 41 0.598003 + 72 72 42 1 + 72 72 43 1 + 72 72 44 1 + 72 72 45 1 + 72 72 46 1 + 72 72 47 1 + 72 72 48 1 + 72 72 49 1 + 72 72 50 1 + 72 72 51 1 + 72 72 52 1 + 72 72 53 1 + 72 72 54 1 + 72 72 55 1 + 72 72 56 1 + 72 72 57 1 + 72 72 58 1 + 72 72 59 1 + 72 72 60 1 + 72 72 61 1 + 72 72 62 1 + 72 72 63 1 + 72 72 64 1 + 72 72 65 1 + 72 72 66 1 + 72 72 67 1 + 72 72 68 1 + 72 72 69 1 + 72 72 70 1 + 72 72 71 1 + 72 72 72 1 + 72 72 73 1 + 72 72 74 1 + 72 72 75 1 + 72 72 76 1 + 72 72 77 1 + 72 72 78 1 + 72 72 79 1 + 72 72 80 1 + 72 72 81 1 + 72 72 82 1 + 72 72 83 1 + 72 72 84 1 + 72 72 85 1 + 72 72 86 0.598003 + 72 73 41 0.205791 + 72 73 42 0.990286 + 72 73 43 1 + 72 73 44 1 + 72 73 45 1 + 72 73 46 1 + 72 73 47 1 + 72 73 48 1 + 72 73 49 1 + 72 73 50 1 + 72 73 51 1 + 72 73 52 1 + 72 73 53 1 + 72 73 54 1 + 72 73 55 1 + 72 73 56 1 + 72 73 57 1 + 72 73 58 1 + 72 73 59 1 + 72 73 60 1 + 72 73 61 1 + 72 73 62 1 + 72 73 63 1 + 72 73 64 1 + 72 73 65 1 + 72 73 66 1 + 72 73 67 1 + 72 73 68 1 + 72 73 69 1 + 72 73 70 1 + 72 73 71 1 + 72 73 72 1 + 72 73 73 1 + 72 73 74 1 + 72 73 75 1 + 72 73 76 1 + 72 73 77 1 + 72 73 78 1 + 72 73 79 1 + 72 73 80 1 + 72 73 81 1 + 72 73 82 1 + 72 73 83 1 + 72 73 84 1 + 72 73 85 0.990286 + 72 73 86 0.205791 + 72 74 41 0.00460294 + 72 74 42 0.736168 + 72 74 43 1 + 72 74 44 1 + 72 74 45 1 + 72 74 46 1 + 72 74 47 1 + 72 74 48 1 + 72 74 49 1 + 72 74 50 1 + 72 74 51 1 + 72 74 52 1 + 72 74 53 1 + 72 74 54 1 + 72 74 55 1 + 72 74 56 1 + 72 74 57 1 + 72 74 58 1 + 72 74 59 1 + 72 74 60 1 + 72 74 61 1 + 72 74 62 1 + 72 74 63 1 + 72 74 64 1 + 72 74 65 1 + 72 74 66 1 + 72 74 67 1 + 72 74 68 1 + 72 74 69 1 + 72 74 70 1 + 72 74 71 1 + 72 74 72 1 + 72 74 73 1 + 72 74 74 1 + 72 74 75 1 + 72 74 76 1 + 72 74 77 1 + 72 74 78 1 + 72 74 79 1 + 72 74 80 1 + 72 74 81 1 + 72 74 82 1 + 72 74 83 1 + 72 74 84 1 + 72 74 85 0.736168 + 72 74 86 0.00460294 + 72 75 42 0.240042 + 72 75 43 0.988606 + 72 75 44 1 + 72 75 45 1 + 72 75 46 1 + 72 75 47 1 + 72 75 48 1 + 72 75 49 1 + 72 75 50 1 + 72 75 51 1 + 72 75 52 1 + 72 75 53 1 + 72 75 54 1 + 72 75 55 1 + 72 75 56 1 + 72 75 57 1 + 72 75 58 1 + 72 75 59 1 + 72 75 60 1 + 72 75 61 1 + 72 75 62 1 + 72 75 63 1 + 72 75 64 1 + 72 75 65 1 + 72 75 66 1 + 72 75 67 1 + 72 75 68 1 + 72 75 69 1 + 72 75 70 1 + 72 75 71 1 + 72 75 72 1 + 72 75 73 1 + 72 75 74 1 + 72 75 75 1 + 72 75 76 1 + 72 75 77 1 + 72 75 78 1 + 72 75 79 1 + 72 75 80 1 + 72 75 81 1 + 72 75 82 1 + 72 75 83 1 + 72 75 84 0.988606 + 72 75 85 0.240042 + 72 76 42 0.00260739 + 72 76 43 0.652868 + 72 76 44 1 + 72 76 45 1 + 72 76 46 1 + 72 76 47 1 + 72 76 48 1 + 72 76 49 1 + 72 76 50 1 + 72 76 51 1 + 72 76 52 1 + 72 76 53 1 + 72 76 54 1 + 72 76 55 1 + 72 76 56 1 + 72 76 57 1 + 72 76 58 1 + 72 76 59 1 + 72 76 60 1 + 72 76 61 1 + 72 76 62 1 + 72 76 63 1 + 72 76 64 1 + 72 76 65 1 + 72 76 66 1 + 72 76 67 1 + 72 76 68 1 + 72 76 69 1 + 72 76 70 1 + 72 76 71 1 + 72 76 72 1 + 72 76 73 1 + 72 76 74 1 + 72 76 75 1 + 72 76 76 1 + 72 76 77 1 + 72 76 78 1 + 72 76 79 1 + 72 76 80 1 + 72 76 81 1 + 72 76 82 1 + 72 76 83 1 + 72 76 84 0.652868 + 72 76 85 0.00260739 + 72 77 43 0.103719 + 72 77 44 0.912283 + 72 77 45 1 + 72 77 46 1 + 72 77 47 1 + 72 77 48 1 + 72 77 49 1 + 72 77 50 1 + 72 77 51 1 + 72 77 52 1 + 72 77 53 1 + 72 77 54 1 + 72 77 55 1 + 72 77 56 1 + 72 77 57 1 + 72 77 58 1 + 72 77 59 1 + 72 77 60 1 + 72 77 61 1 + 72 77 62 1 + 72 77 63 1 + 72 77 64 1 + 72 77 65 1 + 72 77 66 1 + 72 77 67 1 + 72 77 68 1 + 72 77 69 1 + 72 77 70 1 + 72 77 71 1 + 72 77 72 1 + 72 77 73 1 + 72 77 74 1 + 72 77 75 1 + 72 77 76 1 + 72 77 77 1 + 72 77 78 1 + 72 77 79 1 + 72 77 80 1 + 72 77 81 1 + 72 77 82 1 + 72 77 83 0.912283 + 72 77 84 0.103719 + 72 78 44 0.316818 + 72 78 45 0.986811 + 72 78 46 1 + 72 78 47 1 + 72 78 48 1 + 72 78 49 1 + 72 78 50 1 + 72 78 51 1 + 72 78 52 1 + 72 78 53 1 + 72 78 54 1 + 72 78 55 1 + 72 78 56 1 + 72 78 57 1 + 72 78 58 1 + 72 78 59 1 + 72 78 60 1 + 72 78 61 1 + 72 78 62 1 + 72 78 63 1 + 72 78 64 1 + 72 78 65 1 + 72 78 66 1 + 72 78 67 1 + 72 78 68 1 + 72 78 69 1 + 72 78 70 1 + 72 78 71 1 + 72 78 72 1 + 72 78 73 1 + 72 78 74 1 + 72 78 75 1 + 72 78 76 1 + 72 78 77 1 + 72 78 78 1 + 72 78 79 1 + 72 78 80 1 + 72 78 81 1 + 72 78 82 0.986811 + 72 78 83 0.316818 + 72 79 44 0.00138601 + 72 79 45 0.51 + 72 79 46 0.998538 + 72 79 47 1 + 72 79 48 1 + 72 79 49 1 + 72 79 50 1 + 72 79 51 1 + 72 79 52 1 + 72 79 53 1 + 72 79 54 1 + 72 79 55 1 + 72 79 56 1 + 72 79 57 1 + 72 79 58 1 + 72 79 59 1 + 72 79 60 1 + 72 79 61 1 + 72 79 62 1 + 72 79 63 1 + 72 79 64 1 + 72 79 65 1 + 72 79 66 1 + 72 79 67 1 + 72 79 68 1 + 72 79 69 1 + 72 79 70 1 + 72 79 71 1 + 72 79 72 1 + 72 79 73 1 + 72 79 74 1 + 72 79 75 1 + 72 79 76 1 + 72 79 77 1 + 72 79 78 1 + 72 79 79 1 + 72 79 80 1 + 72 79 81 0.998538 + 72 79 82 0.51 + 72 79 83 0.00138601 + 72 80 45 0.0128488 + 72 80 46 0.611412 + 72 80 47 0.99961 + 72 80 48 1 + 72 80 49 1 + 72 80 50 1 + 72 80 51 1 + 72 80 52 1 + 72 80 53 1 + 72 80 54 1 + 72 80 55 1 + 72 80 56 1 + 72 80 57 1 + 72 80 58 1 + 72 80 59 1 + 72 80 60 1 + 72 80 61 1 + 72 80 62 1 + 72 80 63 1 + 72 80 64 1 + 72 80 65 1 + 72 80 66 1 + 72 80 67 1 + 72 80 68 1 + 72 80 69 1 + 72 80 70 1 + 72 80 71 1 + 72 80 72 1 + 72 80 73 1 + 72 80 74 1 + 72 80 75 1 + 72 80 76 1 + 72 80 77 1 + 72 80 78 1 + 72 80 79 1 + 72 80 80 0.99961 + 72 80 81 0.611412 + 72 80 82 0.0128488 + 72 81 46 0.0207198 + 72 81 47 0.611412 + 72 81 48 0.998538 + 72 81 49 1 + 72 81 50 1 + 72 81 51 1 + 72 81 52 1 + 72 81 53 1 + 72 81 54 1 + 72 81 55 1 + 72 81 56 1 + 72 81 57 1 + 72 81 58 1 + 72 81 59 1 + 72 81 60 1 + 72 81 61 1 + 72 81 62 1 + 72 81 63 1 + 72 81 64 1 + 72 81 65 1 + 72 81 66 1 + 72 81 67 1 + 72 81 68 1 + 72 81 69 1 + 72 81 70 1 + 72 81 71 1 + 72 81 72 1 + 72 81 73 1 + 72 81 74 1 + 72 81 75 1 + 72 81 76 1 + 72 81 77 1 + 72 81 78 1 + 72 81 79 0.998538 + 72 81 80 0.611412 + 72 81 81 0.0207198 + 72 82 47 0.0128488 + 72 82 48 0.51 + 72 82 49 0.986811 + 72 82 50 1 + 72 82 51 1 + 72 82 52 1 + 72 82 53 1 + 72 82 54 1 + 72 82 55 1 + 72 82 56 1 + 72 82 57 1 + 72 82 58 1 + 72 82 59 1 + 72 82 60 1 + 72 82 61 1 + 72 82 62 1 + 72 82 63 1 + 72 82 64 1 + 72 82 65 1 + 72 82 66 1 + 72 82 67 1 + 72 82 68 1 + 72 82 69 1 + 72 82 70 1 + 72 82 71 1 + 72 82 72 1 + 72 82 73 1 + 72 82 74 1 + 72 82 75 1 + 72 82 76 1 + 72 82 77 1 + 72 82 78 0.986811 + 72 82 79 0.51 + 72 82 80 0.0128488 + 72 83 48 0.00138601 + 72 83 49 0.316818 + 72 83 50 0.912283 + 72 83 51 1 + 72 83 52 1 + 72 83 53 1 + 72 83 54 1 + 72 83 55 1 + 72 83 56 1 + 72 83 57 1 + 72 83 58 1 + 72 83 59 1 + 72 83 60 1 + 72 83 61 1 + 72 83 62 1 + 72 83 63 1 + 72 83 64 1 + 72 83 65 1 + 72 83 66 1 + 72 83 67 1 + 72 83 68 1 + 72 83 69 1 + 72 83 70 1 + 72 83 71 1 + 72 83 72 1 + 72 83 73 1 + 72 83 74 1 + 72 83 75 1 + 72 83 76 1 + 72 83 77 0.912283 + 72 83 78 0.316818 + 72 83 79 0.00138601 + 72 84 50 0.103719 + 72 84 51 0.652868 + 72 84 52 0.988606 + 72 84 53 1 + 72 84 54 1 + 72 84 55 1 + 72 84 56 1 + 72 84 57 1 + 72 84 58 1 + 72 84 59 1 + 72 84 60 1 + 72 84 61 1 + 72 84 62 1 + 72 84 63 1 + 72 84 64 1 + 72 84 65 1 + 72 84 66 1 + 72 84 67 1 + 72 84 68 1 + 72 84 69 1 + 72 84 70 1 + 72 84 71 1 + 72 84 72 1 + 72 84 73 1 + 72 84 74 1 + 72 84 75 0.988606 + 72 84 76 0.652868 + 72 84 77 0.103719 + 72 85 51 0.00260739 + 72 85 52 0.240042 + 72 85 53 0.736168 + 72 85 54 0.990286 + 72 85 55 1 + 72 85 56 1 + 72 85 57 1 + 72 85 58 1 + 72 85 59 1 + 72 85 60 1 + 72 85 61 1 + 72 85 62 1 + 72 85 63 1 + 72 85 64 1 + 72 85 65 1 + 72 85 66 1 + 72 85 67 1 + 72 85 68 1 + 72 85 69 1 + 72 85 70 1 + 72 85 71 1 + 72 85 72 1 + 72 85 73 0.990286 + 72 85 74 0.736168 + 72 85 75 0.240042 + 72 85 76 0.00260739 + 72 86 53 0.00460294 + 72 86 54 0.205791 + 72 86 55 0.598003 + 72 86 56 0.913043 + 72 86 57 0.999295 + 72 86 58 1 + 72 86 59 1 + 72 86 60 1 + 72 86 61 1 + 72 86 62 1 + 72 86 63 1 + 72 86 64 1 + 72 86 65 1 + 72 86 66 1 + 72 86 67 1 + 72 86 68 1 + 72 86 69 1 + 72 86 70 0.999295 + 72 86 71 0.913043 + 72 86 72 0.598003 + 72 86 73 0.205791 + 72 86 74 0.00460294 + 72 87 56 0.036314 + 72 87 57 0.253138 + 72 87 58 0.509102 + 72 87 59 0.720869 + 72 87 60 0.880429 + 72 87 61 0.961214 + 72 87 62 0.990327 + 72 87 63 0.997684 + 72 87 64 0.997684 + 72 87 65 0.990327 + 72 87 66 0.961214 + 72 87 67 0.880429 + 72 87 68 0.720869 + 72 87 69 0.509102 + 72 87 70 0.253138 + 72 87 71 0.036314 + 72 88 60 0.00850155 + 72 88 61 0.0529903 + 72 88 62 0.10703 + 72 88 63 0.141143 + 72 88 64 0.141143 + 72 88 65 0.10703 + 72 88 66 0.0529903 + 72 88 67 0.00850155 + 73 40 57 0.013123 + 73 40 58 0.137253 + 73 40 59 0.338304 + 73 40 60 0.509102 + 73 40 61 0.63639 + 73 40 62 0.720869 + 73 40 63 0.762996 + 73 40 64 0.762996 + 73 40 65 0.720869 + 73 40 66 0.63639 + 73 40 67 0.509102 + 73 40 68 0.338304 + 73 40 69 0.137253 + 73 40 70 0.013123 + 73 41 54 0.0092981 + 73 41 55 0.205791 + 73 41 56 0.553699 + 73 41 57 0.848902 + 73 41 58 0.985777 + 73 41 59 1 + 73 41 60 1 + 73 41 61 1 + 73 41 62 1 + 73 41 63 1 + 73 41 64 1 + 73 41 65 1 + 73 41 66 1 + 73 41 67 1 + 73 41 68 1 + 73 41 69 0.985777 + 73 41 70 0.848902 + 73 41 71 0.553699 + 73 41 72 0.205791 + 73 41 73 0.0092981 + 73 42 52 0.0182812 + 73 42 53 0.325363 + 73 42 54 0.777432 + 73 42 55 0.990286 + 73 42 56 1 + 73 42 57 1 + 73 42 58 1 + 73 42 59 1 + 73 42 60 1 + 73 42 61 1 + 73 42 62 1 + 73 42 63 1 + 73 42 64 1 + 73 42 65 1 + 73 42 66 1 + 73 42 67 1 + 73 42 68 1 + 73 42 69 1 + 73 42 70 1 + 73 42 71 1 + 73 42 72 0.990286 + 73 42 73 0.777432 + 73 42 74 0.325363 + 73 42 75 0.0182812 + 73 43 50 0.00135226 + 73 43 51 0.23592 + 73 43 52 0.78197 + 73 43 53 0.997314 + 73 43 54 1 + 73 43 55 1 + 73 43 56 1 + 73 43 57 1 + 73 43 58 1 + 73 43 59 1 + 73 43 60 1 + 73 43 61 1 + 73 43 62 1 + 73 43 63 1 + 73 43 64 1 + 73 43 65 1 + 73 43 66 1 + 73 43 67 1 + 73 43 68 1 + 73 43 69 1 + 73 43 70 1 + 73 43 71 1 + 73 43 72 1 + 73 43 73 1 + 73 43 74 0.997314 + 73 43 75 0.78197 + 73 43 76 0.23592 + 73 43 77 0.00135226 + 73 44 49 0.0436378 + 73 44 50 0.559714 + 73 44 51 0.979001 + 73 44 52 1 + 73 44 53 1 + 73 44 54 1 + 73 44 55 1 + 73 44 56 1 + 73 44 57 1 + 73 44 58 1 + 73 44 59 1 + 73 44 60 1 + 73 44 61 1 + 73 44 62 1 + 73 44 63 1 + 73 44 64 1 + 73 44 65 1 + 73 44 66 1 + 73 44 67 1 + 73 44 68 1 + 73 44 69 1 + 73 44 70 1 + 73 44 71 1 + 73 44 72 1 + 73 44 73 1 + 73 44 74 1 + 73 44 75 1 + 73 44 76 0.979001 + 73 44 77 0.559714 + 73 44 78 0.0436378 + 73 45 48 0.129721 + 73 45 49 0.78779 + 73 45 50 0.999965 + 73 45 51 1 + 73 45 52 1 + 73 45 53 1 + 73 45 54 1 + 73 45 55 1 + 73 45 56 1 + 73 45 57 1 + 73 45 58 1 + 73 45 59 1 + 73 45 60 1 + 73 45 61 1 + 73 45 62 1 + 73 45 63 1 + 73 45 64 1 + 73 45 65 1 + 73 45 66 1 + 73 45 67 1 + 73 45 68 1 + 73 45 69 1 + 73 45 70 1 + 73 45 71 1 + 73 45 72 1 + 73 45 73 1 + 73 45 74 1 + 73 45 75 1 + 73 45 76 1 + 73 45 77 0.999965 + 73 45 78 0.78779 + 73 45 79 0.129721 + 73 46 47 0.192797 + 73 46 48 0.887171 + 73 46 49 1 + 73 46 50 1 + 73 46 51 1 + 73 46 52 1 + 73 46 53 1 + 73 46 54 1 + 73 46 55 1 + 73 46 56 1 + 73 46 57 1 + 73 46 58 1 + 73 46 59 1 + 73 46 60 1 + 73 46 61 1 + 73 46 62 1 + 73 46 63 1 + 73 46 64 1 + 73 46 65 1 + 73 46 66 1 + 73 46 67 1 + 73 46 68 1 + 73 46 69 1 + 73 46 70 1 + 73 46 71 1 + 73 46 72 1 + 73 46 73 1 + 73 46 74 1 + 73 46 75 1 + 73 46 76 1 + 73 46 77 1 + 73 46 78 1 + 73 46 79 0.887171 + 73 46 80 0.192797 + 73 47 46 0.192797 + 73 47 47 0.912465 + 73 47 48 1 + 73 47 49 1 + 73 47 50 1 + 73 47 51 1 + 73 47 52 1 + 73 47 53 1 + 73 47 54 1 + 73 47 55 1 + 73 47 56 1 + 73 47 57 1 + 73 47 58 1 + 73 47 59 1 + 73 47 60 1 + 73 47 61 1 + 73 47 62 1 + 73 47 63 1 + 73 47 64 1 + 73 47 65 1 + 73 47 66 1 + 73 47 67 1 + 73 47 68 1 + 73 47 69 1 + 73 47 70 1 + 73 47 71 1 + 73 47 72 1 + 73 47 73 1 + 73 47 74 1 + 73 47 75 1 + 73 47 76 1 + 73 47 77 1 + 73 47 78 1 + 73 47 79 1 + 73 47 80 0.912465 + 73 47 81 0.192797 + 73 48 45 0.129721 + 73 48 46 0.887171 + 73 48 47 1 + 73 48 48 1 + 73 48 49 1 + 73 48 50 1 + 73 48 51 1 + 73 48 52 1 + 73 48 53 1 + 73 48 54 1 + 73 48 55 1 + 73 48 56 1 + 73 48 57 1 + 73 48 58 1 + 73 48 59 1 + 73 48 60 1 + 73 48 61 1 + 73 48 62 1 + 73 48 63 1 + 73 48 64 1 + 73 48 65 1 + 73 48 66 1 + 73 48 67 1 + 73 48 68 1 + 73 48 69 1 + 73 48 70 1 + 73 48 71 1 + 73 48 72 1 + 73 48 73 1 + 73 48 74 1 + 73 48 75 1 + 73 48 76 1 + 73 48 77 1 + 73 48 78 1 + 73 48 79 1 + 73 48 80 1 + 73 48 81 0.887171 + 73 48 82 0.129721 + 73 49 44 0.0436378 + 73 49 45 0.78779 + 73 49 46 1 + 73 49 47 1 + 73 49 48 1 + 73 49 49 1 + 73 49 50 1 + 73 49 51 1 + 73 49 52 1 + 73 49 53 1 + 73 49 54 1 + 73 49 55 1 + 73 49 56 1 + 73 49 57 1 + 73 49 58 1 + 73 49 59 1 + 73 49 60 1 + 73 49 61 1 + 73 49 62 1 + 73 49 63 1 + 73 49 64 1 + 73 49 65 1 + 73 49 66 1 + 73 49 67 1 + 73 49 68 1 + 73 49 69 1 + 73 49 70 1 + 73 49 71 1 + 73 49 72 1 + 73 49 73 1 + 73 49 74 1 + 73 49 75 1 + 73 49 76 1 + 73 49 77 1 + 73 49 78 1 + 73 49 79 1 + 73 49 80 1 + 73 49 81 1 + 73 49 82 0.78779 + 73 49 83 0.0436378 + 73 50 43 0.00135226 + 73 50 44 0.559714 + 73 50 45 0.999965 + 73 50 46 1 + 73 50 47 1 + 73 50 48 1 + 73 50 49 1 + 73 50 50 1 + 73 50 51 1 + 73 50 52 1 + 73 50 53 1 + 73 50 54 1 + 73 50 55 1 + 73 50 56 1 + 73 50 57 1 + 73 50 58 1 + 73 50 59 1 + 73 50 60 1 + 73 50 61 1 + 73 50 62 1 + 73 50 63 1 + 73 50 64 1 + 73 50 65 1 + 73 50 66 1 + 73 50 67 1 + 73 50 68 1 + 73 50 69 1 + 73 50 70 1 + 73 50 71 1 + 73 50 72 1 + 73 50 73 1 + 73 50 74 1 + 73 50 75 1 + 73 50 76 1 + 73 50 77 1 + 73 50 78 1 + 73 50 79 1 + 73 50 80 1 + 73 50 81 1 + 73 50 82 0.999965 + 73 50 83 0.559714 + 73 50 84 0.00135226 + 73 51 43 0.23592 + 73 51 44 0.979001 + 73 51 45 1 + 73 51 46 1 + 73 51 47 1 + 73 51 48 1 + 73 51 49 1 + 73 51 50 1 + 73 51 51 1 + 73 51 52 1 + 73 51 53 1 + 73 51 54 1 + 73 51 55 1 + 73 51 56 1 + 73 51 57 1 + 73 51 58 1 + 73 51 59 1 + 73 51 60 1 + 73 51 61 1 + 73 51 62 1 + 73 51 63 1 + 73 51 64 1 + 73 51 65 1 + 73 51 66 1 + 73 51 67 1 + 73 51 68 1 + 73 51 69 1 + 73 51 70 1 + 73 51 71 1 + 73 51 72 1 + 73 51 73 1 + 73 51 74 1 + 73 51 75 1 + 73 51 76 1 + 73 51 77 1 + 73 51 78 1 + 73 51 79 1 + 73 51 80 1 + 73 51 81 1 + 73 51 82 1 + 73 51 83 0.979001 + 73 51 84 0.23592 + 73 52 42 0.0182812 + 73 52 43 0.78197 + 73 52 44 1 + 73 52 45 1 + 73 52 46 1 + 73 52 47 1 + 73 52 48 1 + 73 52 49 1 + 73 52 50 1 + 73 52 51 1 + 73 52 52 1 + 73 52 53 1 + 73 52 54 1 + 73 52 55 1 + 73 52 56 1 + 73 52 57 1 + 73 52 58 1 + 73 52 59 1 + 73 52 60 1 + 73 52 61 1 + 73 52 62 1 + 73 52 63 1 + 73 52 64 1 + 73 52 65 1 + 73 52 66 1 + 73 52 67 1 + 73 52 68 1 + 73 52 69 1 + 73 52 70 1 + 73 52 71 1 + 73 52 72 1 + 73 52 73 1 + 73 52 74 1 + 73 52 75 1 + 73 52 76 1 + 73 52 77 1 + 73 52 78 1 + 73 52 79 1 + 73 52 80 1 + 73 52 81 1 + 73 52 82 1 + 73 52 83 1 + 73 52 84 0.78197 + 73 52 85 0.0182812 + 73 53 42 0.325363 + 73 53 43 0.997314 + 73 53 44 1 + 73 53 45 1 + 73 53 46 1 + 73 53 47 1 + 73 53 48 1 + 73 53 49 1 + 73 53 50 1 + 73 53 51 1 + 73 53 52 1 + 73 53 53 1 + 73 53 54 1 + 73 53 55 1 + 73 53 56 1 + 73 53 57 1 + 73 53 58 1 + 73 53 59 1 + 73 53 60 1 + 73 53 61 1 + 73 53 62 1 + 73 53 63 1 + 73 53 64 1 + 73 53 65 1 + 73 53 66 1 + 73 53 67 1 + 73 53 68 1 + 73 53 69 1 + 73 53 70 1 + 73 53 71 1 + 73 53 72 1 + 73 53 73 1 + 73 53 74 1 + 73 53 75 1 + 73 53 76 1 + 73 53 77 1 + 73 53 78 1 + 73 53 79 1 + 73 53 80 1 + 73 53 81 1 + 73 53 82 1 + 73 53 83 1 + 73 53 84 0.997314 + 73 53 85 0.325363 + 73 54 41 0.0092981 + 73 54 42 0.777432 + 73 54 43 1 + 73 54 44 1 + 73 54 45 1 + 73 54 46 1 + 73 54 47 1 + 73 54 48 1 + 73 54 49 1 + 73 54 50 1 + 73 54 51 1 + 73 54 52 1 + 73 54 53 1 + 73 54 54 1 + 73 54 55 1 + 73 54 56 1 + 73 54 57 1 + 73 54 58 1 + 73 54 59 1 + 73 54 60 1 + 73 54 61 1 + 73 54 62 1 + 73 54 63 1 + 73 54 64 1 + 73 54 65 1 + 73 54 66 1 + 73 54 67 1 + 73 54 68 1 + 73 54 69 1 + 73 54 70 1 + 73 54 71 1 + 73 54 72 1 + 73 54 73 1 + 73 54 74 1 + 73 54 75 1 + 73 54 76 1 + 73 54 77 1 + 73 54 78 1 + 73 54 79 1 + 73 54 80 1 + 73 54 81 1 + 73 54 82 1 + 73 54 83 1 + 73 54 84 1 + 73 54 85 0.777432 + 73 54 86 0.0092981 + 73 55 41 0.205791 + 73 55 42 0.990286 + 73 55 43 1 + 73 55 44 1 + 73 55 45 1 + 73 55 46 1 + 73 55 47 1 + 73 55 48 1 + 73 55 49 1 + 73 55 50 1 + 73 55 51 1 + 73 55 52 1 + 73 55 53 1 + 73 55 54 1 + 73 55 55 1 + 73 55 56 1 + 73 55 57 1 + 73 55 58 1 + 73 55 59 1 + 73 55 60 1 + 73 55 61 1 + 73 55 62 1 + 73 55 63 1 + 73 55 64 1 + 73 55 65 1 + 73 55 66 1 + 73 55 67 1 + 73 55 68 1 + 73 55 69 1 + 73 55 70 1 + 73 55 71 1 + 73 55 72 1 + 73 55 73 1 + 73 55 74 1 + 73 55 75 1 + 73 55 76 1 + 73 55 77 1 + 73 55 78 1 + 73 55 79 1 + 73 55 80 1 + 73 55 81 1 + 73 55 82 1 + 73 55 83 1 + 73 55 84 1 + 73 55 85 0.990286 + 73 55 86 0.205791 + 73 56 41 0.553699 + 73 56 42 1 + 73 56 43 1 + 73 56 44 1 + 73 56 45 1 + 73 56 46 1 + 73 56 47 1 + 73 56 48 1 + 73 56 49 1 + 73 56 50 1 + 73 56 51 1 + 73 56 52 1 + 73 56 53 1 + 73 56 54 1 + 73 56 55 1 + 73 56 56 1 + 73 56 57 1 + 73 56 58 1 + 73 56 59 1 + 73 56 60 1 + 73 56 61 1 + 73 56 62 1 + 73 56 63 1 + 73 56 64 1 + 73 56 65 1 + 73 56 66 1 + 73 56 67 1 + 73 56 68 1 + 73 56 69 1 + 73 56 70 1 + 73 56 71 1 + 73 56 72 1 + 73 56 73 1 + 73 56 74 1 + 73 56 75 1 + 73 56 76 1 + 73 56 77 1 + 73 56 78 1 + 73 56 79 1 + 73 56 80 1 + 73 56 81 1 + 73 56 82 1 + 73 56 83 1 + 73 56 84 1 + 73 56 85 1 + 73 56 86 0.553699 + 73 57 40 0.013123 + 73 57 41 0.848902 + 73 57 42 1 + 73 57 43 1 + 73 57 44 1 + 73 57 45 1 + 73 57 46 1 + 73 57 47 1 + 73 57 48 1 + 73 57 49 1 + 73 57 50 1 + 73 57 51 1 + 73 57 52 1 + 73 57 53 1 + 73 57 54 1 + 73 57 55 1 + 73 57 56 1 + 73 57 57 1 + 73 57 58 1 + 73 57 59 1 + 73 57 60 1 + 73 57 61 1 + 73 57 62 1 + 73 57 63 1 + 73 57 64 1 + 73 57 65 1 + 73 57 66 1 + 73 57 67 1 + 73 57 68 1 + 73 57 69 1 + 73 57 70 1 + 73 57 71 1 + 73 57 72 1 + 73 57 73 1 + 73 57 74 1 + 73 57 75 1 + 73 57 76 1 + 73 57 77 1 + 73 57 78 1 + 73 57 79 1 + 73 57 80 1 + 73 57 81 1 + 73 57 82 1 + 73 57 83 1 + 73 57 84 1 + 73 57 85 1 + 73 57 86 0.848902 + 73 57 87 0.013123 + 73 58 40 0.137253 + 73 58 41 0.985777 + 73 58 42 1 + 73 58 43 1 + 73 58 44 1 + 73 58 45 1 + 73 58 46 1 + 73 58 47 1 + 73 58 48 1 + 73 58 49 1 + 73 58 50 1 + 73 58 51 1 + 73 58 52 1 + 73 58 53 1 + 73 58 54 1 + 73 58 55 1 + 73 58 56 1 + 73 58 57 1 + 73 58 58 1 + 73 58 59 1 + 73 58 60 1 + 73 58 61 1 + 73 58 62 1 + 73 58 63 1 + 73 58 64 1 + 73 58 65 1 + 73 58 66 1 + 73 58 67 1 + 73 58 68 1 + 73 58 69 1 + 73 58 70 1 + 73 58 71 1 + 73 58 72 1 + 73 58 73 1 + 73 58 74 1 + 73 58 75 1 + 73 58 76 1 + 73 58 77 1 + 73 58 78 1 + 73 58 79 1 + 73 58 80 1 + 73 58 81 1 + 73 58 82 1 + 73 58 83 1 + 73 58 84 1 + 73 58 85 1 + 73 58 86 0.985777 + 73 58 87 0.137253 + 73 59 40 0.338304 + 73 59 41 1 + 73 59 42 1 + 73 59 43 1 + 73 59 44 1 + 73 59 45 1 + 73 59 46 1 + 73 59 47 1 + 73 59 48 1 + 73 59 49 1 + 73 59 50 1 + 73 59 51 1 + 73 59 52 1 + 73 59 53 1 + 73 59 54 1 + 73 59 55 1 + 73 59 56 1 + 73 59 57 1 + 73 59 58 1 + 73 59 59 1 + 73 59 60 1 + 73 59 61 1 + 73 59 62 1 + 73 59 63 1 + 73 59 64 1 + 73 59 65 1 + 73 59 66 1 + 73 59 67 1 + 73 59 68 1 + 73 59 69 1 + 73 59 70 1 + 73 59 71 1 + 73 59 72 1 + 73 59 73 1 + 73 59 74 1 + 73 59 75 1 + 73 59 76 1 + 73 59 77 1 + 73 59 78 1 + 73 59 79 1 + 73 59 80 1 + 73 59 81 1 + 73 59 82 1 + 73 59 83 1 + 73 59 84 1 + 73 59 85 1 + 73 59 86 1 + 73 59 87 0.338304 + 73 60 40 0.509102 + 73 60 41 1 + 73 60 42 1 + 73 60 43 1 + 73 60 44 1 + 73 60 45 1 + 73 60 46 1 + 73 60 47 1 + 73 60 48 1 + 73 60 49 1 + 73 60 50 1 + 73 60 51 1 + 73 60 52 1 + 73 60 53 1 + 73 60 54 1 + 73 60 55 1 + 73 60 56 1 + 73 60 57 1 + 73 60 58 1 + 73 60 59 1 + 73 60 60 1 + 73 60 61 1 + 73 60 62 1 + 73 60 63 1 + 73 60 64 1 + 73 60 65 1 + 73 60 66 1 + 73 60 67 1 + 73 60 68 1 + 73 60 69 1 + 73 60 70 1 + 73 60 71 1 + 73 60 72 1 + 73 60 73 1 + 73 60 74 1 + 73 60 75 1 + 73 60 76 1 + 73 60 77 1 + 73 60 78 1 + 73 60 79 1 + 73 60 80 1 + 73 60 81 1 + 73 60 82 1 + 73 60 83 1 + 73 60 84 1 + 73 60 85 1 + 73 60 86 1 + 73 60 87 0.509102 + 73 61 40 0.63639 + 73 61 41 1 + 73 61 42 1 + 73 61 43 1 + 73 61 44 1 + 73 61 45 1 + 73 61 46 1 + 73 61 47 1 + 73 61 48 1 + 73 61 49 1 + 73 61 50 1 + 73 61 51 1 + 73 61 52 1 + 73 61 53 1 + 73 61 54 1 + 73 61 55 1 + 73 61 56 1 + 73 61 57 1 + 73 61 58 1 + 73 61 59 1 + 73 61 60 1 + 73 61 61 1 + 73 61 62 1 + 73 61 63 1 + 73 61 64 1 + 73 61 65 1 + 73 61 66 1 + 73 61 67 1 + 73 61 68 1 + 73 61 69 1 + 73 61 70 1 + 73 61 71 1 + 73 61 72 1 + 73 61 73 1 + 73 61 74 1 + 73 61 75 1 + 73 61 76 1 + 73 61 77 1 + 73 61 78 1 + 73 61 79 1 + 73 61 80 1 + 73 61 81 1 + 73 61 82 1 + 73 61 83 1 + 73 61 84 1 + 73 61 85 1 + 73 61 86 1 + 73 61 87 0.63639 + 73 62 40 0.720869 + 73 62 41 1 + 73 62 42 1 + 73 62 43 1 + 73 62 44 1 + 73 62 45 1 + 73 62 46 1 + 73 62 47 1 + 73 62 48 1 + 73 62 49 1 + 73 62 50 1 + 73 62 51 1 + 73 62 52 1 + 73 62 53 1 + 73 62 54 1 + 73 62 55 1 + 73 62 56 1 + 73 62 57 1 + 73 62 58 1 + 73 62 59 1 + 73 62 60 1 + 73 62 61 1 + 73 62 62 1 + 73 62 63 1 + 73 62 64 1 + 73 62 65 1 + 73 62 66 1 + 73 62 67 1 + 73 62 68 1 + 73 62 69 1 + 73 62 70 1 + 73 62 71 1 + 73 62 72 1 + 73 62 73 1 + 73 62 74 1 + 73 62 75 1 + 73 62 76 1 + 73 62 77 1 + 73 62 78 1 + 73 62 79 1 + 73 62 80 1 + 73 62 81 1 + 73 62 82 1 + 73 62 83 1 + 73 62 84 1 + 73 62 85 1 + 73 62 86 1 + 73 62 87 0.720869 + 73 63 40 0.762996 + 73 63 41 1 + 73 63 42 1 + 73 63 43 1 + 73 63 44 1 + 73 63 45 1 + 73 63 46 1 + 73 63 47 1 + 73 63 48 1 + 73 63 49 1 + 73 63 50 1 + 73 63 51 1 + 73 63 52 1 + 73 63 53 1 + 73 63 54 1 + 73 63 55 1 + 73 63 56 1 + 73 63 57 1 + 73 63 58 1 + 73 63 59 1 + 73 63 60 1 + 73 63 61 1 + 73 63 62 1 + 73 63 63 1 + 73 63 64 1 + 73 63 65 1 + 73 63 66 1 + 73 63 67 1 + 73 63 68 1 + 73 63 69 1 + 73 63 70 1 + 73 63 71 1 + 73 63 72 1 + 73 63 73 1 + 73 63 74 1 + 73 63 75 1 + 73 63 76 1 + 73 63 77 1 + 73 63 78 1 + 73 63 79 1 + 73 63 80 1 + 73 63 81 1 + 73 63 82 1 + 73 63 83 1 + 73 63 84 1 + 73 63 85 1 + 73 63 86 1 + 73 63 87 0.762996 + 73 64 40 0.762996 + 73 64 41 1 + 73 64 42 1 + 73 64 43 1 + 73 64 44 1 + 73 64 45 1 + 73 64 46 1 + 73 64 47 1 + 73 64 48 1 + 73 64 49 1 + 73 64 50 1 + 73 64 51 1 + 73 64 52 1 + 73 64 53 1 + 73 64 54 1 + 73 64 55 1 + 73 64 56 1 + 73 64 57 1 + 73 64 58 1 + 73 64 59 1 + 73 64 60 1 + 73 64 61 1 + 73 64 62 1 + 73 64 63 1 + 73 64 64 1 + 73 64 65 1 + 73 64 66 1 + 73 64 67 1 + 73 64 68 1 + 73 64 69 1 + 73 64 70 1 + 73 64 71 1 + 73 64 72 1 + 73 64 73 1 + 73 64 74 1 + 73 64 75 1 + 73 64 76 1 + 73 64 77 1 + 73 64 78 1 + 73 64 79 1 + 73 64 80 1 + 73 64 81 1 + 73 64 82 1 + 73 64 83 1 + 73 64 84 1 + 73 64 85 1 + 73 64 86 1 + 73 64 87 0.762996 + 73 65 40 0.720869 + 73 65 41 1 + 73 65 42 1 + 73 65 43 1 + 73 65 44 1 + 73 65 45 1 + 73 65 46 1 + 73 65 47 1 + 73 65 48 1 + 73 65 49 1 + 73 65 50 1 + 73 65 51 1 + 73 65 52 1 + 73 65 53 1 + 73 65 54 1 + 73 65 55 1 + 73 65 56 1 + 73 65 57 1 + 73 65 58 1 + 73 65 59 1 + 73 65 60 1 + 73 65 61 1 + 73 65 62 1 + 73 65 63 1 + 73 65 64 1 + 73 65 65 1 + 73 65 66 1 + 73 65 67 1 + 73 65 68 1 + 73 65 69 1 + 73 65 70 1 + 73 65 71 1 + 73 65 72 1 + 73 65 73 1 + 73 65 74 1 + 73 65 75 1 + 73 65 76 1 + 73 65 77 1 + 73 65 78 1 + 73 65 79 1 + 73 65 80 1 + 73 65 81 1 + 73 65 82 1 + 73 65 83 1 + 73 65 84 1 + 73 65 85 1 + 73 65 86 1 + 73 65 87 0.720869 + 73 66 40 0.63639 + 73 66 41 1 + 73 66 42 1 + 73 66 43 1 + 73 66 44 1 + 73 66 45 1 + 73 66 46 1 + 73 66 47 1 + 73 66 48 1 + 73 66 49 1 + 73 66 50 1 + 73 66 51 1 + 73 66 52 1 + 73 66 53 1 + 73 66 54 1 + 73 66 55 1 + 73 66 56 1 + 73 66 57 1 + 73 66 58 1 + 73 66 59 1 + 73 66 60 1 + 73 66 61 1 + 73 66 62 1 + 73 66 63 1 + 73 66 64 1 + 73 66 65 1 + 73 66 66 1 + 73 66 67 1 + 73 66 68 1 + 73 66 69 1 + 73 66 70 1 + 73 66 71 1 + 73 66 72 1 + 73 66 73 1 + 73 66 74 1 + 73 66 75 1 + 73 66 76 1 + 73 66 77 1 + 73 66 78 1 + 73 66 79 1 + 73 66 80 1 + 73 66 81 1 + 73 66 82 1 + 73 66 83 1 + 73 66 84 1 + 73 66 85 1 + 73 66 86 1 + 73 66 87 0.63639 + 73 67 40 0.509102 + 73 67 41 1 + 73 67 42 1 + 73 67 43 1 + 73 67 44 1 + 73 67 45 1 + 73 67 46 1 + 73 67 47 1 + 73 67 48 1 + 73 67 49 1 + 73 67 50 1 + 73 67 51 1 + 73 67 52 1 + 73 67 53 1 + 73 67 54 1 + 73 67 55 1 + 73 67 56 1 + 73 67 57 1 + 73 67 58 1 + 73 67 59 1 + 73 67 60 1 + 73 67 61 1 + 73 67 62 1 + 73 67 63 1 + 73 67 64 1 + 73 67 65 1 + 73 67 66 1 + 73 67 67 1 + 73 67 68 1 + 73 67 69 1 + 73 67 70 1 + 73 67 71 1 + 73 67 72 1 + 73 67 73 1 + 73 67 74 1 + 73 67 75 1 + 73 67 76 1 + 73 67 77 1 + 73 67 78 1 + 73 67 79 1 + 73 67 80 1 + 73 67 81 1 + 73 67 82 1 + 73 67 83 1 + 73 67 84 1 + 73 67 85 1 + 73 67 86 1 + 73 67 87 0.509102 + 73 68 40 0.338304 + 73 68 41 1 + 73 68 42 1 + 73 68 43 1 + 73 68 44 1 + 73 68 45 1 + 73 68 46 1 + 73 68 47 1 + 73 68 48 1 + 73 68 49 1 + 73 68 50 1 + 73 68 51 1 + 73 68 52 1 + 73 68 53 1 + 73 68 54 1 + 73 68 55 1 + 73 68 56 1 + 73 68 57 1 + 73 68 58 1 + 73 68 59 1 + 73 68 60 1 + 73 68 61 1 + 73 68 62 1 + 73 68 63 1 + 73 68 64 1 + 73 68 65 1 + 73 68 66 1 + 73 68 67 1 + 73 68 68 1 + 73 68 69 1 + 73 68 70 1 + 73 68 71 1 + 73 68 72 1 + 73 68 73 1 + 73 68 74 1 + 73 68 75 1 + 73 68 76 1 + 73 68 77 1 + 73 68 78 1 + 73 68 79 1 + 73 68 80 1 + 73 68 81 1 + 73 68 82 1 + 73 68 83 1 + 73 68 84 1 + 73 68 85 1 + 73 68 86 1 + 73 68 87 0.338304 + 73 69 40 0.137253 + 73 69 41 0.985777 + 73 69 42 1 + 73 69 43 1 + 73 69 44 1 + 73 69 45 1 + 73 69 46 1 + 73 69 47 1 + 73 69 48 1 + 73 69 49 1 + 73 69 50 1 + 73 69 51 1 + 73 69 52 1 + 73 69 53 1 + 73 69 54 1 + 73 69 55 1 + 73 69 56 1 + 73 69 57 1 + 73 69 58 1 + 73 69 59 1 + 73 69 60 1 + 73 69 61 1 + 73 69 62 1 + 73 69 63 1 + 73 69 64 1 + 73 69 65 1 + 73 69 66 1 + 73 69 67 1 + 73 69 68 1 + 73 69 69 1 + 73 69 70 1 + 73 69 71 1 + 73 69 72 1 + 73 69 73 1 + 73 69 74 1 + 73 69 75 1 + 73 69 76 1 + 73 69 77 1 + 73 69 78 1 + 73 69 79 1 + 73 69 80 1 + 73 69 81 1 + 73 69 82 1 + 73 69 83 1 + 73 69 84 1 + 73 69 85 1 + 73 69 86 0.985777 + 73 69 87 0.137253 + 73 70 40 0.013123 + 73 70 41 0.848902 + 73 70 42 1 + 73 70 43 1 + 73 70 44 1 + 73 70 45 1 + 73 70 46 1 + 73 70 47 1 + 73 70 48 1 + 73 70 49 1 + 73 70 50 1 + 73 70 51 1 + 73 70 52 1 + 73 70 53 1 + 73 70 54 1 + 73 70 55 1 + 73 70 56 1 + 73 70 57 1 + 73 70 58 1 + 73 70 59 1 + 73 70 60 1 + 73 70 61 1 + 73 70 62 1 + 73 70 63 1 + 73 70 64 1 + 73 70 65 1 + 73 70 66 1 + 73 70 67 1 + 73 70 68 1 + 73 70 69 1 + 73 70 70 1 + 73 70 71 1 + 73 70 72 1 + 73 70 73 1 + 73 70 74 1 + 73 70 75 1 + 73 70 76 1 + 73 70 77 1 + 73 70 78 1 + 73 70 79 1 + 73 70 80 1 + 73 70 81 1 + 73 70 82 1 + 73 70 83 1 + 73 70 84 1 + 73 70 85 1 + 73 70 86 0.848902 + 73 70 87 0.013123 + 73 71 41 0.553699 + 73 71 42 1 + 73 71 43 1 + 73 71 44 1 + 73 71 45 1 + 73 71 46 1 + 73 71 47 1 + 73 71 48 1 + 73 71 49 1 + 73 71 50 1 + 73 71 51 1 + 73 71 52 1 + 73 71 53 1 + 73 71 54 1 + 73 71 55 1 + 73 71 56 1 + 73 71 57 1 + 73 71 58 1 + 73 71 59 1 + 73 71 60 1 + 73 71 61 1 + 73 71 62 1 + 73 71 63 1 + 73 71 64 1 + 73 71 65 1 + 73 71 66 1 + 73 71 67 1 + 73 71 68 1 + 73 71 69 1 + 73 71 70 1 + 73 71 71 1 + 73 71 72 1 + 73 71 73 1 + 73 71 74 1 + 73 71 75 1 + 73 71 76 1 + 73 71 77 1 + 73 71 78 1 + 73 71 79 1 + 73 71 80 1 + 73 71 81 1 + 73 71 82 1 + 73 71 83 1 + 73 71 84 1 + 73 71 85 1 + 73 71 86 0.553699 + 73 72 41 0.205791 + 73 72 42 0.990286 + 73 72 43 1 + 73 72 44 1 + 73 72 45 1 + 73 72 46 1 + 73 72 47 1 + 73 72 48 1 + 73 72 49 1 + 73 72 50 1 + 73 72 51 1 + 73 72 52 1 + 73 72 53 1 + 73 72 54 1 + 73 72 55 1 + 73 72 56 1 + 73 72 57 1 + 73 72 58 1 + 73 72 59 1 + 73 72 60 1 + 73 72 61 1 + 73 72 62 1 + 73 72 63 1 + 73 72 64 1 + 73 72 65 1 + 73 72 66 1 + 73 72 67 1 + 73 72 68 1 + 73 72 69 1 + 73 72 70 1 + 73 72 71 1 + 73 72 72 1 + 73 72 73 1 + 73 72 74 1 + 73 72 75 1 + 73 72 76 1 + 73 72 77 1 + 73 72 78 1 + 73 72 79 1 + 73 72 80 1 + 73 72 81 1 + 73 72 82 1 + 73 72 83 1 + 73 72 84 1 + 73 72 85 0.990286 + 73 72 86 0.205791 + 73 73 41 0.0092981 + 73 73 42 0.777432 + 73 73 43 1 + 73 73 44 1 + 73 73 45 1 + 73 73 46 1 + 73 73 47 1 + 73 73 48 1 + 73 73 49 1 + 73 73 50 1 + 73 73 51 1 + 73 73 52 1 + 73 73 53 1 + 73 73 54 1 + 73 73 55 1 + 73 73 56 1 + 73 73 57 1 + 73 73 58 1 + 73 73 59 1 + 73 73 60 1 + 73 73 61 1 + 73 73 62 1 + 73 73 63 1 + 73 73 64 1 + 73 73 65 1 + 73 73 66 1 + 73 73 67 1 + 73 73 68 1 + 73 73 69 1 + 73 73 70 1 + 73 73 71 1 + 73 73 72 1 + 73 73 73 1 + 73 73 74 1 + 73 73 75 1 + 73 73 76 1 + 73 73 77 1 + 73 73 78 1 + 73 73 79 1 + 73 73 80 1 + 73 73 81 1 + 73 73 82 1 + 73 73 83 1 + 73 73 84 1 + 73 73 85 0.777432 + 73 73 86 0.0092981 + 73 74 42 0.325363 + 73 74 43 0.997314 + 73 74 44 1 + 73 74 45 1 + 73 74 46 1 + 73 74 47 1 + 73 74 48 1 + 73 74 49 1 + 73 74 50 1 + 73 74 51 1 + 73 74 52 1 + 73 74 53 1 + 73 74 54 1 + 73 74 55 1 + 73 74 56 1 + 73 74 57 1 + 73 74 58 1 + 73 74 59 1 + 73 74 60 1 + 73 74 61 1 + 73 74 62 1 + 73 74 63 1 + 73 74 64 1 + 73 74 65 1 + 73 74 66 1 + 73 74 67 1 + 73 74 68 1 + 73 74 69 1 + 73 74 70 1 + 73 74 71 1 + 73 74 72 1 + 73 74 73 1 + 73 74 74 1 + 73 74 75 1 + 73 74 76 1 + 73 74 77 1 + 73 74 78 1 + 73 74 79 1 + 73 74 80 1 + 73 74 81 1 + 73 74 82 1 + 73 74 83 1 + 73 74 84 0.997314 + 73 74 85 0.325363 + 73 75 42 0.0182812 + 73 75 43 0.78197 + 73 75 44 1 + 73 75 45 1 + 73 75 46 1 + 73 75 47 1 + 73 75 48 1 + 73 75 49 1 + 73 75 50 1 + 73 75 51 1 + 73 75 52 1 + 73 75 53 1 + 73 75 54 1 + 73 75 55 1 + 73 75 56 1 + 73 75 57 1 + 73 75 58 1 + 73 75 59 1 + 73 75 60 1 + 73 75 61 1 + 73 75 62 1 + 73 75 63 1 + 73 75 64 1 + 73 75 65 1 + 73 75 66 1 + 73 75 67 1 + 73 75 68 1 + 73 75 69 1 + 73 75 70 1 + 73 75 71 1 + 73 75 72 1 + 73 75 73 1 + 73 75 74 1 + 73 75 75 1 + 73 75 76 1 + 73 75 77 1 + 73 75 78 1 + 73 75 79 1 + 73 75 80 1 + 73 75 81 1 + 73 75 82 1 + 73 75 83 1 + 73 75 84 0.78197 + 73 75 85 0.0182812 + 73 76 43 0.23592 + 73 76 44 0.979001 + 73 76 45 1 + 73 76 46 1 + 73 76 47 1 + 73 76 48 1 + 73 76 49 1 + 73 76 50 1 + 73 76 51 1 + 73 76 52 1 + 73 76 53 1 + 73 76 54 1 + 73 76 55 1 + 73 76 56 1 + 73 76 57 1 + 73 76 58 1 + 73 76 59 1 + 73 76 60 1 + 73 76 61 1 + 73 76 62 1 + 73 76 63 1 + 73 76 64 1 + 73 76 65 1 + 73 76 66 1 + 73 76 67 1 + 73 76 68 1 + 73 76 69 1 + 73 76 70 1 + 73 76 71 1 + 73 76 72 1 + 73 76 73 1 + 73 76 74 1 + 73 76 75 1 + 73 76 76 1 + 73 76 77 1 + 73 76 78 1 + 73 76 79 1 + 73 76 80 1 + 73 76 81 1 + 73 76 82 1 + 73 76 83 0.979001 + 73 76 84 0.23592 + 73 77 43 0.00135226 + 73 77 44 0.559714 + 73 77 45 0.999965 + 73 77 46 1 + 73 77 47 1 + 73 77 48 1 + 73 77 49 1 + 73 77 50 1 + 73 77 51 1 + 73 77 52 1 + 73 77 53 1 + 73 77 54 1 + 73 77 55 1 + 73 77 56 1 + 73 77 57 1 + 73 77 58 1 + 73 77 59 1 + 73 77 60 1 + 73 77 61 1 + 73 77 62 1 + 73 77 63 1 + 73 77 64 1 + 73 77 65 1 + 73 77 66 1 + 73 77 67 1 + 73 77 68 1 + 73 77 69 1 + 73 77 70 1 + 73 77 71 1 + 73 77 72 1 + 73 77 73 1 + 73 77 74 1 + 73 77 75 1 + 73 77 76 1 + 73 77 77 1 + 73 77 78 1 + 73 77 79 1 + 73 77 80 1 + 73 77 81 1 + 73 77 82 0.999965 + 73 77 83 0.559714 + 73 77 84 0.00135226 + 73 78 44 0.0436378 + 73 78 45 0.78779 + 73 78 46 1 + 73 78 47 1 + 73 78 48 1 + 73 78 49 1 + 73 78 50 1 + 73 78 51 1 + 73 78 52 1 + 73 78 53 1 + 73 78 54 1 + 73 78 55 1 + 73 78 56 1 + 73 78 57 1 + 73 78 58 1 + 73 78 59 1 + 73 78 60 1 + 73 78 61 1 + 73 78 62 1 + 73 78 63 1 + 73 78 64 1 + 73 78 65 1 + 73 78 66 1 + 73 78 67 1 + 73 78 68 1 + 73 78 69 1 + 73 78 70 1 + 73 78 71 1 + 73 78 72 1 + 73 78 73 1 + 73 78 74 1 + 73 78 75 1 + 73 78 76 1 + 73 78 77 1 + 73 78 78 1 + 73 78 79 1 + 73 78 80 1 + 73 78 81 1 + 73 78 82 0.78779 + 73 78 83 0.0436378 + 73 79 45 0.129721 + 73 79 46 0.887171 + 73 79 47 1 + 73 79 48 1 + 73 79 49 1 + 73 79 50 1 + 73 79 51 1 + 73 79 52 1 + 73 79 53 1 + 73 79 54 1 + 73 79 55 1 + 73 79 56 1 + 73 79 57 1 + 73 79 58 1 + 73 79 59 1 + 73 79 60 1 + 73 79 61 1 + 73 79 62 1 + 73 79 63 1 + 73 79 64 1 + 73 79 65 1 + 73 79 66 1 + 73 79 67 1 + 73 79 68 1 + 73 79 69 1 + 73 79 70 1 + 73 79 71 1 + 73 79 72 1 + 73 79 73 1 + 73 79 74 1 + 73 79 75 1 + 73 79 76 1 + 73 79 77 1 + 73 79 78 1 + 73 79 79 1 + 73 79 80 1 + 73 79 81 0.887171 + 73 79 82 0.129721 + 73 80 46 0.192797 + 73 80 47 0.912465 + 73 80 48 1 + 73 80 49 1 + 73 80 50 1 + 73 80 51 1 + 73 80 52 1 + 73 80 53 1 + 73 80 54 1 + 73 80 55 1 + 73 80 56 1 + 73 80 57 1 + 73 80 58 1 + 73 80 59 1 + 73 80 60 1 + 73 80 61 1 + 73 80 62 1 + 73 80 63 1 + 73 80 64 1 + 73 80 65 1 + 73 80 66 1 + 73 80 67 1 + 73 80 68 1 + 73 80 69 1 + 73 80 70 1 + 73 80 71 1 + 73 80 72 1 + 73 80 73 1 + 73 80 74 1 + 73 80 75 1 + 73 80 76 1 + 73 80 77 1 + 73 80 78 1 + 73 80 79 1 + 73 80 80 0.912465 + 73 80 81 0.192797 + 73 81 47 0.192797 + 73 81 48 0.887171 + 73 81 49 1 + 73 81 50 1 + 73 81 51 1 + 73 81 52 1 + 73 81 53 1 + 73 81 54 1 + 73 81 55 1 + 73 81 56 1 + 73 81 57 1 + 73 81 58 1 + 73 81 59 1 + 73 81 60 1 + 73 81 61 1 + 73 81 62 1 + 73 81 63 1 + 73 81 64 1 + 73 81 65 1 + 73 81 66 1 + 73 81 67 1 + 73 81 68 1 + 73 81 69 1 + 73 81 70 1 + 73 81 71 1 + 73 81 72 1 + 73 81 73 1 + 73 81 74 1 + 73 81 75 1 + 73 81 76 1 + 73 81 77 1 + 73 81 78 1 + 73 81 79 0.887171 + 73 81 80 0.192797 + 73 82 48 0.129721 + 73 82 49 0.78779 + 73 82 50 0.999965 + 73 82 51 1 + 73 82 52 1 + 73 82 53 1 + 73 82 54 1 + 73 82 55 1 + 73 82 56 1 + 73 82 57 1 + 73 82 58 1 + 73 82 59 1 + 73 82 60 1 + 73 82 61 1 + 73 82 62 1 + 73 82 63 1 + 73 82 64 1 + 73 82 65 1 + 73 82 66 1 + 73 82 67 1 + 73 82 68 1 + 73 82 69 1 + 73 82 70 1 + 73 82 71 1 + 73 82 72 1 + 73 82 73 1 + 73 82 74 1 + 73 82 75 1 + 73 82 76 1 + 73 82 77 0.999965 + 73 82 78 0.78779 + 73 82 79 0.129721 + 73 83 49 0.0436378 + 73 83 50 0.559714 + 73 83 51 0.979001 + 73 83 52 1 + 73 83 53 1 + 73 83 54 1 + 73 83 55 1 + 73 83 56 1 + 73 83 57 1 + 73 83 58 1 + 73 83 59 1 + 73 83 60 1 + 73 83 61 1 + 73 83 62 1 + 73 83 63 1 + 73 83 64 1 + 73 83 65 1 + 73 83 66 1 + 73 83 67 1 + 73 83 68 1 + 73 83 69 1 + 73 83 70 1 + 73 83 71 1 + 73 83 72 1 + 73 83 73 1 + 73 83 74 1 + 73 83 75 1 + 73 83 76 0.979001 + 73 83 77 0.559714 + 73 83 78 0.0436378 + 73 84 50 0.00135226 + 73 84 51 0.23592 + 73 84 52 0.78197 + 73 84 53 0.997314 + 73 84 54 1 + 73 84 55 1 + 73 84 56 1 + 73 84 57 1 + 73 84 58 1 + 73 84 59 1 + 73 84 60 1 + 73 84 61 1 + 73 84 62 1 + 73 84 63 1 + 73 84 64 1 + 73 84 65 1 + 73 84 66 1 + 73 84 67 1 + 73 84 68 1 + 73 84 69 1 + 73 84 70 1 + 73 84 71 1 + 73 84 72 1 + 73 84 73 1 + 73 84 74 0.997314 + 73 84 75 0.78197 + 73 84 76 0.23592 + 73 84 77 0.00135226 + 73 85 52 0.0182812 + 73 85 53 0.325363 + 73 85 54 0.777432 + 73 85 55 0.990286 + 73 85 56 1 + 73 85 57 1 + 73 85 58 1 + 73 85 59 1 + 73 85 60 1 + 73 85 61 1 + 73 85 62 1 + 73 85 63 1 + 73 85 64 1 + 73 85 65 1 + 73 85 66 1 + 73 85 67 1 + 73 85 68 1 + 73 85 69 1 + 73 85 70 1 + 73 85 71 1 + 73 85 72 0.990286 + 73 85 73 0.777432 + 73 85 74 0.325363 + 73 85 75 0.0182812 + 73 86 54 0.0092981 + 73 86 55 0.205791 + 73 86 56 0.553699 + 73 86 57 0.848902 + 73 86 58 0.985777 + 73 86 59 1 + 73 86 60 1 + 73 86 61 1 + 73 86 62 1 + 73 86 63 1 + 73 86 64 1 + 73 86 65 1 + 73 86 66 1 + 73 86 67 1 + 73 86 68 1 + 73 86 69 0.985777 + 73 86 70 0.848902 + 73 86 71 0.553699 + 73 86 72 0.205791 + 73 86 73 0.0092981 + 73 87 57 0.013123 + 73 87 58 0.137253 + 73 87 59 0.338304 + 73 87 60 0.509102 + 73 87 61 0.63639 + 73 87 62 0.720869 + 73 87 63 0.762996 + 73 87 64 0.762996 + 73 87 65 0.720869 + 73 87 66 0.63639 + 73 87 67 0.509102 + 73 87 68 0.338304 + 73 87 69 0.137253 + 73 87 70 0.013123 + 74 40 58 4.51737e-05 + 74 40 59 0.0230554 + 74 40 60 0.106145 + 74 40 61 0.210787 + 74 40 62 0.295408 + 74 40 63 0.338304 + 74 40 64 0.338304 + 74 40 65 0.295408 + 74 40 66 0.210787 + 74 40 67 0.106145 + 74 40 68 0.0230554 + 74 40 69 4.51737e-05 + 74 41 55 0.00460294 + 74 41 56 0.134362 + 74 41 57 0.42026 + 74 41 58 0.686307 + 74 41 59 0.882677 + 74 41 60 0.97359 + 74 41 61 0.998593 + 74 41 62 1 + 74 41 63 1 + 74 41 64 1 + 74 41 65 1 + 74 41 66 0.998593 + 74 41 67 0.97359 + 74 41 68 0.882677 + 74 41 69 0.686307 + 74 41 70 0.42026 + 74 41 71 0.134362 + 74 41 72 0.00460294 + 74 42 53 0.0282569 + 74 42 54 0.325363 + 74 42 55 0.736168 + 74 42 56 0.971405 + 74 42 57 1 + 74 42 58 1 + 74 42 59 1 + 74 42 60 1 + 74 42 61 1 + 74 42 62 1 + 74 42 63 1 + 74 42 64 1 + 74 42 65 1 + 74 42 66 1 + 74 42 67 1 + 74 42 68 1 + 74 42 69 1 + 74 42 70 1 + 74 42 71 0.971405 + 74 42 72 0.736168 + 74 42 73 0.325363 + 74 42 74 0.0282569 + 74 43 51 0.0123857 + 74 43 52 0.320873 + 74 43 53 0.820029 + 74 43 54 0.997314 + 74 43 55 1 + 74 43 56 1 + 74 43 57 1 + 74 43 58 1 + 74 43 59 1 + 74 43 60 1 + 74 43 61 1 + 74 43 62 1 + 74 43 63 1 + 74 43 64 1 + 74 43 65 1 + 74 43 66 1 + 74 43 67 1 + 74 43 68 1 + 74 43 69 1 + 74 43 70 1 + 74 43 71 1 + 74 43 72 1 + 74 43 73 0.997314 + 74 43 74 0.820029 + 74 43 75 0.320873 + 74 43 76 0.0123857 + 74 44 50 0.129326 + 74 44 51 0.701471 + 74 44 52 0.992776 + 74 44 53 1 + 74 44 54 1 + 74 44 55 1 + 74 44 56 1 + 74 44 57 1 + 74 44 58 1 + 74 44 59 1 + 74 44 60 1 + 74 44 61 1 + 74 44 62 1 + 74 44 63 1 + 74 44 64 1 + 74 44 65 1 + 74 44 66 1 + 74 44 67 1 + 74 44 68 1 + 74 44 69 1 + 74 44 70 1 + 74 44 71 1 + 74 44 72 1 + 74 44 73 1 + 74 44 74 1 + 74 44 75 0.992776 + 74 44 76 0.701471 + 74 44 77 0.129326 + 74 45 48 0.00195783 + 74 45 49 0.315112 + 74 45 50 0.913417 + 74 45 51 1 + 74 45 52 1 + 74 45 53 1 + 74 45 54 1 + 74 45 55 1 + 74 45 56 1 + 74 45 57 1 + 74 45 58 1 + 74 45 59 1 + 74 45 60 1 + 74 45 61 1 + 74 45 62 1 + 74 45 63 1 + 74 45 64 1 + 74 45 65 1 + 74 45 66 1 + 74 45 67 1 + 74 45 68 1 + 74 45 69 1 + 74 45 70 1 + 74 45 71 1 + 74 45 72 1 + 74 45 73 1 + 74 45 74 1 + 74 45 75 1 + 74 45 76 1 + 74 45 77 0.913417 + 74 45 78 0.315112 + 74 45 79 0.00195783 + 74 46 47 0.00833029 + 74 46 48 0.459326 + 74 46 49 0.977331 + 74 46 50 1 + 74 46 51 1 + 74 46 52 1 + 74 46 53 1 + 74 46 54 1 + 74 46 55 1 + 74 46 56 1 + 74 46 57 1 + 74 46 58 1 + 74 46 59 1 + 74 46 60 1 + 74 46 61 1 + 74 46 62 1 + 74 46 63 1 + 74 46 64 1 + 74 46 65 1 + 74 46 66 1 + 74 46 67 1 + 74 46 68 1 + 74 46 69 1 + 74 46 70 1 + 74 46 71 1 + 74 46 72 1 + 74 46 73 1 + 74 46 74 1 + 74 46 75 1 + 74 46 76 1 + 74 46 77 1 + 74 46 78 0.977331 + 74 46 79 0.459326 + 74 46 80 0.00833029 + 74 47 46 0.00833029 + 74 47 47 0.510119 + 74 47 48 0.991434 + 74 47 49 1 + 74 47 50 1 + 74 47 51 1 + 74 47 52 1 + 74 47 53 1 + 74 47 54 1 + 74 47 55 1 + 74 47 56 1 + 74 47 57 1 + 74 47 58 1 + 74 47 59 1 + 74 47 60 1 + 74 47 61 1 + 74 47 62 1 + 74 47 63 1 + 74 47 64 1 + 74 47 65 1 + 74 47 66 1 + 74 47 67 1 + 74 47 68 1 + 74 47 69 1 + 74 47 70 1 + 74 47 71 1 + 74 47 72 1 + 74 47 73 1 + 74 47 74 1 + 74 47 75 1 + 74 47 76 1 + 74 47 77 1 + 74 47 78 1 + 74 47 79 0.991434 + 74 47 80 0.510119 + 74 47 81 0.00833029 + 74 48 45 0.00195783 + 74 48 46 0.459326 + 74 48 47 0.991434 + 74 48 48 1 + 74 48 49 1 + 74 48 50 1 + 74 48 51 1 + 74 48 52 1 + 74 48 53 1 + 74 48 54 1 + 74 48 55 1 + 74 48 56 1 + 74 48 57 1 + 74 48 58 1 + 74 48 59 1 + 74 48 60 1 + 74 48 61 1 + 74 48 62 1 + 74 48 63 1 + 74 48 64 1 + 74 48 65 1 + 74 48 66 1 + 74 48 67 1 + 74 48 68 1 + 74 48 69 1 + 74 48 70 1 + 74 48 71 1 + 74 48 72 1 + 74 48 73 1 + 74 48 74 1 + 74 48 75 1 + 74 48 76 1 + 74 48 77 1 + 74 48 78 1 + 74 48 79 1 + 74 48 80 0.991434 + 74 48 81 0.459326 + 74 48 82 0.00195783 + 74 49 45 0.315112 + 74 49 46 0.977331 + 74 49 47 1 + 74 49 48 1 + 74 49 49 1 + 74 49 50 1 + 74 49 51 1 + 74 49 52 1 + 74 49 53 1 + 74 49 54 1 + 74 49 55 1 + 74 49 56 1 + 74 49 57 1 + 74 49 58 1 + 74 49 59 1 + 74 49 60 1 + 74 49 61 1 + 74 49 62 1 + 74 49 63 1 + 74 49 64 1 + 74 49 65 1 + 74 49 66 1 + 74 49 67 1 + 74 49 68 1 + 74 49 69 1 + 74 49 70 1 + 74 49 71 1 + 74 49 72 1 + 74 49 73 1 + 74 49 74 1 + 74 49 75 1 + 74 49 76 1 + 74 49 77 1 + 74 49 78 1 + 74 49 79 1 + 74 49 80 1 + 74 49 81 0.977331 + 74 49 82 0.315112 + 74 50 44 0.129326 + 74 50 45 0.913417 + 74 50 46 1 + 74 50 47 1 + 74 50 48 1 + 74 50 49 1 + 74 50 50 1 + 74 50 51 1 + 74 50 52 1 + 74 50 53 1 + 74 50 54 1 + 74 50 55 1 + 74 50 56 1 + 74 50 57 1 + 74 50 58 1 + 74 50 59 1 + 74 50 60 1 + 74 50 61 1 + 74 50 62 1 + 74 50 63 1 + 74 50 64 1 + 74 50 65 1 + 74 50 66 1 + 74 50 67 1 + 74 50 68 1 + 74 50 69 1 + 74 50 70 1 + 74 50 71 1 + 74 50 72 1 + 74 50 73 1 + 74 50 74 1 + 74 50 75 1 + 74 50 76 1 + 74 50 77 1 + 74 50 78 1 + 74 50 79 1 + 74 50 80 1 + 74 50 81 1 + 74 50 82 0.913417 + 74 50 83 0.129326 + 74 51 43 0.0123857 + 74 51 44 0.701471 + 74 51 45 1 + 74 51 46 1 + 74 51 47 1 + 74 51 48 1 + 74 51 49 1 + 74 51 50 1 + 74 51 51 1 + 74 51 52 1 + 74 51 53 1 + 74 51 54 1 + 74 51 55 1 + 74 51 56 1 + 74 51 57 1 + 74 51 58 1 + 74 51 59 1 + 74 51 60 1 + 74 51 61 1 + 74 51 62 1 + 74 51 63 1 + 74 51 64 1 + 74 51 65 1 + 74 51 66 1 + 74 51 67 1 + 74 51 68 1 + 74 51 69 1 + 74 51 70 1 + 74 51 71 1 + 74 51 72 1 + 74 51 73 1 + 74 51 74 1 + 74 51 75 1 + 74 51 76 1 + 74 51 77 1 + 74 51 78 1 + 74 51 79 1 + 74 51 80 1 + 74 51 81 1 + 74 51 82 1 + 74 51 83 0.701471 + 74 51 84 0.0123857 + 74 52 43 0.320873 + 74 52 44 0.992776 + 74 52 45 1 + 74 52 46 1 + 74 52 47 1 + 74 52 48 1 + 74 52 49 1 + 74 52 50 1 + 74 52 51 1 + 74 52 52 1 + 74 52 53 1 + 74 52 54 1 + 74 52 55 1 + 74 52 56 1 + 74 52 57 1 + 74 52 58 1 + 74 52 59 1 + 74 52 60 1 + 74 52 61 1 + 74 52 62 1 + 74 52 63 1 + 74 52 64 1 + 74 52 65 1 + 74 52 66 1 + 74 52 67 1 + 74 52 68 1 + 74 52 69 1 + 74 52 70 1 + 74 52 71 1 + 74 52 72 1 + 74 52 73 1 + 74 52 74 1 + 74 52 75 1 + 74 52 76 1 + 74 52 77 1 + 74 52 78 1 + 74 52 79 1 + 74 52 80 1 + 74 52 81 1 + 74 52 82 1 + 74 52 83 0.992776 + 74 52 84 0.320873 + 74 53 42 0.0282569 + 74 53 43 0.820029 + 74 53 44 1 + 74 53 45 1 + 74 53 46 1 + 74 53 47 1 + 74 53 48 1 + 74 53 49 1 + 74 53 50 1 + 74 53 51 1 + 74 53 52 1 + 74 53 53 1 + 74 53 54 1 + 74 53 55 1 + 74 53 56 1 + 74 53 57 1 + 74 53 58 1 + 74 53 59 1 + 74 53 60 1 + 74 53 61 1 + 74 53 62 1 + 74 53 63 1 + 74 53 64 1 + 74 53 65 1 + 74 53 66 1 + 74 53 67 1 + 74 53 68 1 + 74 53 69 1 + 74 53 70 1 + 74 53 71 1 + 74 53 72 1 + 74 53 73 1 + 74 53 74 1 + 74 53 75 1 + 74 53 76 1 + 74 53 77 1 + 74 53 78 1 + 74 53 79 1 + 74 53 80 1 + 74 53 81 1 + 74 53 82 1 + 74 53 83 1 + 74 53 84 0.820029 + 74 53 85 0.0282569 + 74 54 42 0.325363 + 74 54 43 0.997314 + 74 54 44 1 + 74 54 45 1 + 74 54 46 1 + 74 54 47 1 + 74 54 48 1 + 74 54 49 1 + 74 54 50 1 + 74 54 51 1 + 74 54 52 1 + 74 54 53 1 + 74 54 54 1 + 74 54 55 1 + 74 54 56 1 + 74 54 57 1 + 74 54 58 1 + 74 54 59 1 + 74 54 60 1 + 74 54 61 1 + 74 54 62 1 + 74 54 63 1 + 74 54 64 1 + 74 54 65 1 + 74 54 66 1 + 74 54 67 1 + 74 54 68 1 + 74 54 69 1 + 74 54 70 1 + 74 54 71 1 + 74 54 72 1 + 74 54 73 1 + 74 54 74 1 + 74 54 75 1 + 74 54 76 1 + 74 54 77 1 + 74 54 78 1 + 74 54 79 1 + 74 54 80 1 + 74 54 81 1 + 74 54 82 1 + 74 54 83 1 + 74 54 84 0.997314 + 74 54 85 0.325363 + 74 55 41 0.00460294 + 74 55 42 0.736168 + 74 55 43 1 + 74 55 44 1 + 74 55 45 1 + 74 55 46 1 + 74 55 47 1 + 74 55 48 1 + 74 55 49 1 + 74 55 50 1 + 74 55 51 1 + 74 55 52 1 + 74 55 53 1 + 74 55 54 1 + 74 55 55 1 + 74 55 56 1 + 74 55 57 1 + 74 55 58 1 + 74 55 59 1 + 74 55 60 1 + 74 55 61 1 + 74 55 62 1 + 74 55 63 1 + 74 55 64 1 + 74 55 65 1 + 74 55 66 1 + 74 55 67 1 + 74 55 68 1 + 74 55 69 1 + 74 55 70 1 + 74 55 71 1 + 74 55 72 1 + 74 55 73 1 + 74 55 74 1 + 74 55 75 1 + 74 55 76 1 + 74 55 77 1 + 74 55 78 1 + 74 55 79 1 + 74 55 80 1 + 74 55 81 1 + 74 55 82 1 + 74 55 83 1 + 74 55 84 1 + 74 55 85 0.736168 + 74 55 86 0.00460294 + 74 56 41 0.134362 + 74 56 42 0.971405 + 74 56 43 1 + 74 56 44 1 + 74 56 45 1 + 74 56 46 1 + 74 56 47 1 + 74 56 48 1 + 74 56 49 1 + 74 56 50 1 + 74 56 51 1 + 74 56 52 1 + 74 56 53 1 + 74 56 54 1 + 74 56 55 1 + 74 56 56 1 + 74 56 57 1 + 74 56 58 1 + 74 56 59 1 + 74 56 60 1 + 74 56 61 1 + 74 56 62 1 + 74 56 63 1 + 74 56 64 1 + 74 56 65 1 + 74 56 66 1 + 74 56 67 1 + 74 56 68 1 + 74 56 69 1 + 74 56 70 1 + 74 56 71 1 + 74 56 72 1 + 74 56 73 1 + 74 56 74 1 + 74 56 75 1 + 74 56 76 1 + 74 56 77 1 + 74 56 78 1 + 74 56 79 1 + 74 56 80 1 + 74 56 81 1 + 74 56 82 1 + 74 56 83 1 + 74 56 84 1 + 74 56 85 0.971405 + 74 56 86 0.134362 + 74 57 41 0.42026 + 74 57 42 1 + 74 57 43 1 + 74 57 44 1 + 74 57 45 1 + 74 57 46 1 + 74 57 47 1 + 74 57 48 1 + 74 57 49 1 + 74 57 50 1 + 74 57 51 1 + 74 57 52 1 + 74 57 53 1 + 74 57 54 1 + 74 57 55 1 + 74 57 56 1 + 74 57 57 1 + 74 57 58 1 + 74 57 59 1 + 74 57 60 1 + 74 57 61 1 + 74 57 62 1 + 74 57 63 1 + 74 57 64 1 + 74 57 65 1 + 74 57 66 1 + 74 57 67 1 + 74 57 68 1 + 74 57 69 1 + 74 57 70 1 + 74 57 71 1 + 74 57 72 1 + 74 57 73 1 + 74 57 74 1 + 74 57 75 1 + 74 57 76 1 + 74 57 77 1 + 74 57 78 1 + 74 57 79 1 + 74 57 80 1 + 74 57 81 1 + 74 57 82 1 + 74 57 83 1 + 74 57 84 1 + 74 57 85 1 + 74 57 86 0.42026 + 74 58 40 4.51737e-05 + 74 58 41 0.686307 + 74 58 42 1 + 74 58 43 1 + 74 58 44 1 + 74 58 45 1 + 74 58 46 1 + 74 58 47 1 + 74 58 48 1 + 74 58 49 1 + 74 58 50 1 + 74 58 51 1 + 74 58 52 1 + 74 58 53 1 + 74 58 54 1 + 74 58 55 1 + 74 58 56 1 + 74 58 57 1 + 74 58 58 1 + 74 58 59 1 + 74 58 60 1 + 74 58 61 1 + 74 58 62 1 + 74 58 63 1 + 74 58 64 1 + 74 58 65 1 + 74 58 66 1 + 74 58 67 1 + 74 58 68 1 + 74 58 69 1 + 74 58 70 1 + 74 58 71 1 + 74 58 72 1 + 74 58 73 1 + 74 58 74 1 + 74 58 75 1 + 74 58 76 1 + 74 58 77 1 + 74 58 78 1 + 74 58 79 1 + 74 58 80 1 + 74 58 81 1 + 74 58 82 1 + 74 58 83 1 + 74 58 84 1 + 74 58 85 1 + 74 58 86 0.686307 + 74 58 87 4.51737e-05 + 74 59 40 0.0230554 + 74 59 41 0.882677 + 74 59 42 1 + 74 59 43 1 + 74 59 44 1 + 74 59 45 1 + 74 59 46 1 + 74 59 47 1 + 74 59 48 1 + 74 59 49 1 + 74 59 50 1 + 74 59 51 1 + 74 59 52 1 + 74 59 53 1 + 74 59 54 1 + 74 59 55 1 + 74 59 56 1 + 74 59 57 1 + 74 59 58 1 + 74 59 59 1 + 74 59 60 1 + 74 59 61 1 + 74 59 62 1 + 74 59 63 1 + 74 59 64 1 + 74 59 65 1 + 74 59 66 1 + 74 59 67 1 + 74 59 68 1 + 74 59 69 1 + 74 59 70 1 + 74 59 71 1 + 74 59 72 1 + 74 59 73 1 + 74 59 74 1 + 74 59 75 1 + 74 59 76 1 + 74 59 77 1 + 74 59 78 1 + 74 59 79 1 + 74 59 80 1 + 74 59 81 1 + 74 59 82 1 + 74 59 83 1 + 74 59 84 1 + 74 59 85 1 + 74 59 86 0.882677 + 74 59 87 0.0230554 + 74 60 40 0.106145 + 74 60 41 0.97359 + 74 60 42 1 + 74 60 43 1 + 74 60 44 1 + 74 60 45 1 + 74 60 46 1 + 74 60 47 1 + 74 60 48 1 + 74 60 49 1 + 74 60 50 1 + 74 60 51 1 + 74 60 52 1 + 74 60 53 1 + 74 60 54 1 + 74 60 55 1 + 74 60 56 1 + 74 60 57 1 + 74 60 58 1 + 74 60 59 1 + 74 60 60 1 + 74 60 61 1 + 74 60 62 1 + 74 60 63 1 + 74 60 64 1 + 74 60 65 1 + 74 60 66 1 + 74 60 67 1 + 74 60 68 1 + 74 60 69 1 + 74 60 70 1 + 74 60 71 1 + 74 60 72 1 + 74 60 73 1 + 74 60 74 1 + 74 60 75 1 + 74 60 76 1 + 74 60 77 1 + 74 60 78 1 + 74 60 79 1 + 74 60 80 1 + 74 60 81 1 + 74 60 82 1 + 74 60 83 1 + 74 60 84 1 + 74 60 85 1 + 74 60 86 0.97359 + 74 60 87 0.106145 + 74 61 40 0.210787 + 74 61 41 0.998593 + 74 61 42 1 + 74 61 43 1 + 74 61 44 1 + 74 61 45 1 + 74 61 46 1 + 74 61 47 1 + 74 61 48 1 + 74 61 49 1 + 74 61 50 1 + 74 61 51 1 + 74 61 52 1 + 74 61 53 1 + 74 61 54 1 + 74 61 55 1 + 74 61 56 1 + 74 61 57 1 + 74 61 58 1 + 74 61 59 1 + 74 61 60 1 + 74 61 61 1 + 74 61 62 1 + 74 61 63 1 + 74 61 64 1 + 74 61 65 1 + 74 61 66 1 + 74 61 67 1 + 74 61 68 1 + 74 61 69 1 + 74 61 70 1 + 74 61 71 1 + 74 61 72 1 + 74 61 73 1 + 74 61 74 1 + 74 61 75 1 + 74 61 76 1 + 74 61 77 1 + 74 61 78 1 + 74 61 79 1 + 74 61 80 1 + 74 61 81 1 + 74 61 82 1 + 74 61 83 1 + 74 61 84 1 + 74 61 85 1 + 74 61 86 0.998593 + 74 61 87 0.210787 + 74 62 40 0.295408 + 74 62 41 1 + 74 62 42 1 + 74 62 43 1 + 74 62 44 1 + 74 62 45 1 + 74 62 46 1 + 74 62 47 1 + 74 62 48 1 + 74 62 49 1 + 74 62 50 1 + 74 62 51 1 + 74 62 52 1 + 74 62 53 1 + 74 62 54 1 + 74 62 55 1 + 74 62 56 1 + 74 62 57 1 + 74 62 58 1 + 74 62 59 1 + 74 62 60 1 + 74 62 61 1 + 74 62 62 1 + 74 62 63 1 + 74 62 64 1 + 74 62 65 1 + 74 62 66 1 + 74 62 67 1 + 74 62 68 1 + 74 62 69 1 + 74 62 70 1 + 74 62 71 1 + 74 62 72 1 + 74 62 73 1 + 74 62 74 1 + 74 62 75 1 + 74 62 76 1 + 74 62 77 1 + 74 62 78 1 + 74 62 79 1 + 74 62 80 1 + 74 62 81 1 + 74 62 82 1 + 74 62 83 1 + 74 62 84 1 + 74 62 85 1 + 74 62 86 1 + 74 62 87 0.295408 + 74 63 40 0.338304 + 74 63 41 1 + 74 63 42 1 + 74 63 43 1 + 74 63 44 1 + 74 63 45 1 + 74 63 46 1 + 74 63 47 1 + 74 63 48 1 + 74 63 49 1 + 74 63 50 1 + 74 63 51 1 + 74 63 52 1 + 74 63 53 1 + 74 63 54 1 + 74 63 55 1 + 74 63 56 1 + 74 63 57 1 + 74 63 58 1 + 74 63 59 1 + 74 63 60 1 + 74 63 61 1 + 74 63 62 1 + 74 63 63 1 + 74 63 64 1 + 74 63 65 1 + 74 63 66 1 + 74 63 67 1 + 74 63 68 1 + 74 63 69 1 + 74 63 70 1 + 74 63 71 1 + 74 63 72 1 + 74 63 73 1 + 74 63 74 1 + 74 63 75 1 + 74 63 76 1 + 74 63 77 1 + 74 63 78 1 + 74 63 79 1 + 74 63 80 1 + 74 63 81 1 + 74 63 82 1 + 74 63 83 1 + 74 63 84 1 + 74 63 85 1 + 74 63 86 1 + 74 63 87 0.338304 + 74 64 40 0.338304 + 74 64 41 1 + 74 64 42 1 + 74 64 43 1 + 74 64 44 1 + 74 64 45 1 + 74 64 46 1 + 74 64 47 1 + 74 64 48 1 + 74 64 49 1 + 74 64 50 1 + 74 64 51 1 + 74 64 52 1 + 74 64 53 1 + 74 64 54 1 + 74 64 55 1 + 74 64 56 1 + 74 64 57 1 + 74 64 58 1 + 74 64 59 1 + 74 64 60 1 + 74 64 61 1 + 74 64 62 1 + 74 64 63 1 + 74 64 64 1 + 74 64 65 1 + 74 64 66 1 + 74 64 67 1 + 74 64 68 1 + 74 64 69 1 + 74 64 70 1 + 74 64 71 1 + 74 64 72 1 + 74 64 73 1 + 74 64 74 1 + 74 64 75 1 + 74 64 76 1 + 74 64 77 1 + 74 64 78 1 + 74 64 79 1 + 74 64 80 1 + 74 64 81 1 + 74 64 82 1 + 74 64 83 1 + 74 64 84 1 + 74 64 85 1 + 74 64 86 1 + 74 64 87 0.338304 + 74 65 40 0.295408 + 74 65 41 1 + 74 65 42 1 + 74 65 43 1 + 74 65 44 1 + 74 65 45 1 + 74 65 46 1 + 74 65 47 1 + 74 65 48 1 + 74 65 49 1 + 74 65 50 1 + 74 65 51 1 + 74 65 52 1 + 74 65 53 1 + 74 65 54 1 + 74 65 55 1 + 74 65 56 1 + 74 65 57 1 + 74 65 58 1 + 74 65 59 1 + 74 65 60 1 + 74 65 61 1 + 74 65 62 1 + 74 65 63 1 + 74 65 64 1 + 74 65 65 1 + 74 65 66 1 + 74 65 67 1 + 74 65 68 1 + 74 65 69 1 + 74 65 70 1 + 74 65 71 1 + 74 65 72 1 + 74 65 73 1 + 74 65 74 1 + 74 65 75 1 + 74 65 76 1 + 74 65 77 1 + 74 65 78 1 + 74 65 79 1 + 74 65 80 1 + 74 65 81 1 + 74 65 82 1 + 74 65 83 1 + 74 65 84 1 + 74 65 85 1 + 74 65 86 1 + 74 65 87 0.295408 + 74 66 40 0.210787 + 74 66 41 0.998593 + 74 66 42 1 + 74 66 43 1 + 74 66 44 1 + 74 66 45 1 + 74 66 46 1 + 74 66 47 1 + 74 66 48 1 + 74 66 49 1 + 74 66 50 1 + 74 66 51 1 + 74 66 52 1 + 74 66 53 1 + 74 66 54 1 + 74 66 55 1 + 74 66 56 1 + 74 66 57 1 + 74 66 58 1 + 74 66 59 1 + 74 66 60 1 + 74 66 61 1 + 74 66 62 1 + 74 66 63 1 + 74 66 64 1 + 74 66 65 1 + 74 66 66 1 + 74 66 67 1 + 74 66 68 1 + 74 66 69 1 + 74 66 70 1 + 74 66 71 1 + 74 66 72 1 + 74 66 73 1 + 74 66 74 1 + 74 66 75 1 + 74 66 76 1 + 74 66 77 1 + 74 66 78 1 + 74 66 79 1 + 74 66 80 1 + 74 66 81 1 + 74 66 82 1 + 74 66 83 1 + 74 66 84 1 + 74 66 85 1 + 74 66 86 0.998593 + 74 66 87 0.210787 + 74 67 40 0.106145 + 74 67 41 0.97359 + 74 67 42 1 + 74 67 43 1 + 74 67 44 1 + 74 67 45 1 + 74 67 46 1 + 74 67 47 1 + 74 67 48 1 + 74 67 49 1 + 74 67 50 1 + 74 67 51 1 + 74 67 52 1 + 74 67 53 1 + 74 67 54 1 + 74 67 55 1 + 74 67 56 1 + 74 67 57 1 + 74 67 58 1 + 74 67 59 1 + 74 67 60 1 + 74 67 61 1 + 74 67 62 1 + 74 67 63 1 + 74 67 64 1 + 74 67 65 1 + 74 67 66 1 + 74 67 67 1 + 74 67 68 1 + 74 67 69 1 + 74 67 70 1 + 74 67 71 1 + 74 67 72 1 + 74 67 73 1 + 74 67 74 1 + 74 67 75 1 + 74 67 76 1 + 74 67 77 1 + 74 67 78 1 + 74 67 79 1 + 74 67 80 1 + 74 67 81 1 + 74 67 82 1 + 74 67 83 1 + 74 67 84 1 + 74 67 85 1 + 74 67 86 0.97359 + 74 67 87 0.106145 + 74 68 40 0.0230554 + 74 68 41 0.882677 + 74 68 42 1 + 74 68 43 1 + 74 68 44 1 + 74 68 45 1 + 74 68 46 1 + 74 68 47 1 + 74 68 48 1 + 74 68 49 1 + 74 68 50 1 + 74 68 51 1 + 74 68 52 1 + 74 68 53 1 + 74 68 54 1 + 74 68 55 1 + 74 68 56 1 + 74 68 57 1 + 74 68 58 1 + 74 68 59 1 + 74 68 60 1 + 74 68 61 1 + 74 68 62 1 + 74 68 63 1 + 74 68 64 1 + 74 68 65 1 + 74 68 66 1 + 74 68 67 1 + 74 68 68 1 + 74 68 69 1 + 74 68 70 1 + 74 68 71 1 + 74 68 72 1 + 74 68 73 1 + 74 68 74 1 + 74 68 75 1 + 74 68 76 1 + 74 68 77 1 + 74 68 78 1 + 74 68 79 1 + 74 68 80 1 + 74 68 81 1 + 74 68 82 1 + 74 68 83 1 + 74 68 84 1 + 74 68 85 1 + 74 68 86 0.882677 + 74 68 87 0.0230554 + 74 69 40 4.51737e-05 + 74 69 41 0.686307 + 74 69 42 1 + 74 69 43 1 + 74 69 44 1 + 74 69 45 1 + 74 69 46 1 + 74 69 47 1 + 74 69 48 1 + 74 69 49 1 + 74 69 50 1 + 74 69 51 1 + 74 69 52 1 + 74 69 53 1 + 74 69 54 1 + 74 69 55 1 + 74 69 56 1 + 74 69 57 1 + 74 69 58 1 + 74 69 59 1 + 74 69 60 1 + 74 69 61 1 + 74 69 62 1 + 74 69 63 1 + 74 69 64 1 + 74 69 65 1 + 74 69 66 1 + 74 69 67 1 + 74 69 68 1 + 74 69 69 1 + 74 69 70 1 + 74 69 71 1 + 74 69 72 1 + 74 69 73 1 + 74 69 74 1 + 74 69 75 1 + 74 69 76 1 + 74 69 77 1 + 74 69 78 1 + 74 69 79 1 + 74 69 80 1 + 74 69 81 1 + 74 69 82 1 + 74 69 83 1 + 74 69 84 1 + 74 69 85 1 + 74 69 86 0.686307 + 74 69 87 4.51737e-05 + 74 70 41 0.42026 + 74 70 42 1 + 74 70 43 1 + 74 70 44 1 + 74 70 45 1 + 74 70 46 1 + 74 70 47 1 + 74 70 48 1 + 74 70 49 1 + 74 70 50 1 + 74 70 51 1 + 74 70 52 1 + 74 70 53 1 + 74 70 54 1 + 74 70 55 1 + 74 70 56 1 + 74 70 57 1 + 74 70 58 1 + 74 70 59 1 + 74 70 60 1 + 74 70 61 1 + 74 70 62 1 + 74 70 63 1 + 74 70 64 1 + 74 70 65 1 + 74 70 66 1 + 74 70 67 1 + 74 70 68 1 + 74 70 69 1 + 74 70 70 1 + 74 70 71 1 + 74 70 72 1 + 74 70 73 1 + 74 70 74 1 + 74 70 75 1 + 74 70 76 1 + 74 70 77 1 + 74 70 78 1 + 74 70 79 1 + 74 70 80 1 + 74 70 81 1 + 74 70 82 1 + 74 70 83 1 + 74 70 84 1 + 74 70 85 1 + 74 70 86 0.42026 + 74 71 41 0.134362 + 74 71 42 0.971405 + 74 71 43 1 + 74 71 44 1 + 74 71 45 1 + 74 71 46 1 + 74 71 47 1 + 74 71 48 1 + 74 71 49 1 + 74 71 50 1 + 74 71 51 1 + 74 71 52 1 + 74 71 53 1 + 74 71 54 1 + 74 71 55 1 + 74 71 56 1 + 74 71 57 1 + 74 71 58 1 + 74 71 59 1 + 74 71 60 1 + 74 71 61 1 + 74 71 62 1 + 74 71 63 1 + 74 71 64 1 + 74 71 65 1 + 74 71 66 1 + 74 71 67 1 + 74 71 68 1 + 74 71 69 1 + 74 71 70 1 + 74 71 71 1 + 74 71 72 1 + 74 71 73 1 + 74 71 74 1 + 74 71 75 1 + 74 71 76 1 + 74 71 77 1 + 74 71 78 1 + 74 71 79 1 + 74 71 80 1 + 74 71 81 1 + 74 71 82 1 + 74 71 83 1 + 74 71 84 1 + 74 71 85 0.971405 + 74 71 86 0.134362 + 74 72 41 0.00460294 + 74 72 42 0.736168 + 74 72 43 1 + 74 72 44 1 + 74 72 45 1 + 74 72 46 1 + 74 72 47 1 + 74 72 48 1 + 74 72 49 1 + 74 72 50 1 + 74 72 51 1 + 74 72 52 1 + 74 72 53 1 + 74 72 54 1 + 74 72 55 1 + 74 72 56 1 + 74 72 57 1 + 74 72 58 1 + 74 72 59 1 + 74 72 60 1 + 74 72 61 1 + 74 72 62 1 + 74 72 63 1 + 74 72 64 1 + 74 72 65 1 + 74 72 66 1 + 74 72 67 1 + 74 72 68 1 + 74 72 69 1 + 74 72 70 1 + 74 72 71 1 + 74 72 72 1 + 74 72 73 1 + 74 72 74 1 + 74 72 75 1 + 74 72 76 1 + 74 72 77 1 + 74 72 78 1 + 74 72 79 1 + 74 72 80 1 + 74 72 81 1 + 74 72 82 1 + 74 72 83 1 + 74 72 84 1 + 74 72 85 0.736168 + 74 72 86 0.00460294 + 74 73 42 0.325363 + 74 73 43 0.997314 + 74 73 44 1 + 74 73 45 1 + 74 73 46 1 + 74 73 47 1 + 74 73 48 1 + 74 73 49 1 + 74 73 50 1 + 74 73 51 1 + 74 73 52 1 + 74 73 53 1 + 74 73 54 1 + 74 73 55 1 + 74 73 56 1 + 74 73 57 1 + 74 73 58 1 + 74 73 59 1 + 74 73 60 1 + 74 73 61 1 + 74 73 62 1 + 74 73 63 1 + 74 73 64 1 + 74 73 65 1 + 74 73 66 1 + 74 73 67 1 + 74 73 68 1 + 74 73 69 1 + 74 73 70 1 + 74 73 71 1 + 74 73 72 1 + 74 73 73 1 + 74 73 74 1 + 74 73 75 1 + 74 73 76 1 + 74 73 77 1 + 74 73 78 1 + 74 73 79 1 + 74 73 80 1 + 74 73 81 1 + 74 73 82 1 + 74 73 83 1 + 74 73 84 0.997314 + 74 73 85 0.325363 + 74 74 42 0.0282569 + 74 74 43 0.820029 + 74 74 44 1 + 74 74 45 1 + 74 74 46 1 + 74 74 47 1 + 74 74 48 1 + 74 74 49 1 + 74 74 50 1 + 74 74 51 1 + 74 74 52 1 + 74 74 53 1 + 74 74 54 1 + 74 74 55 1 + 74 74 56 1 + 74 74 57 1 + 74 74 58 1 + 74 74 59 1 + 74 74 60 1 + 74 74 61 1 + 74 74 62 1 + 74 74 63 1 + 74 74 64 1 + 74 74 65 1 + 74 74 66 1 + 74 74 67 1 + 74 74 68 1 + 74 74 69 1 + 74 74 70 1 + 74 74 71 1 + 74 74 72 1 + 74 74 73 1 + 74 74 74 1 + 74 74 75 1 + 74 74 76 1 + 74 74 77 1 + 74 74 78 1 + 74 74 79 1 + 74 74 80 1 + 74 74 81 1 + 74 74 82 1 + 74 74 83 1 + 74 74 84 0.820029 + 74 74 85 0.0282569 + 74 75 43 0.320873 + 74 75 44 0.992776 + 74 75 45 1 + 74 75 46 1 + 74 75 47 1 + 74 75 48 1 + 74 75 49 1 + 74 75 50 1 + 74 75 51 1 + 74 75 52 1 + 74 75 53 1 + 74 75 54 1 + 74 75 55 1 + 74 75 56 1 + 74 75 57 1 + 74 75 58 1 + 74 75 59 1 + 74 75 60 1 + 74 75 61 1 + 74 75 62 1 + 74 75 63 1 + 74 75 64 1 + 74 75 65 1 + 74 75 66 1 + 74 75 67 1 + 74 75 68 1 + 74 75 69 1 + 74 75 70 1 + 74 75 71 1 + 74 75 72 1 + 74 75 73 1 + 74 75 74 1 + 74 75 75 1 + 74 75 76 1 + 74 75 77 1 + 74 75 78 1 + 74 75 79 1 + 74 75 80 1 + 74 75 81 1 + 74 75 82 1 + 74 75 83 0.992776 + 74 75 84 0.320873 + 74 76 43 0.0123857 + 74 76 44 0.701471 + 74 76 45 1 + 74 76 46 1 + 74 76 47 1 + 74 76 48 1 + 74 76 49 1 + 74 76 50 1 + 74 76 51 1 + 74 76 52 1 + 74 76 53 1 + 74 76 54 1 + 74 76 55 1 + 74 76 56 1 + 74 76 57 1 + 74 76 58 1 + 74 76 59 1 + 74 76 60 1 + 74 76 61 1 + 74 76 62 1 + 74 76 63 1 + 74 76 64 1 + 74 76 65 1 + 74 76 66 1 + 74 76 67 1 + 74 76 68 1 + 74 76 69 1 + 74 76 70 1 + 74 76 71 1 + 74 76 72 1 + 74 76 73 1 + 74 76 74 1 + 74 76 75 1 + 74 76 76 1 + 74 76 77 1 + 74 76 78 1 + 74 76 79 1 + 74 76 80 1 + 74 76 81 1 + 74 76 82 1 + 74 76 83 0.701471 + 74 76 84 0.0123857 + 74 77 44 0.129326 + 74 77 45 0.913417 + 74 77 46 1 + 74 77 47 1 + 74 77 48 1 + 74 77 49 1 + 74 77 50 1 + 74 77 51 1 + 74 77 52 1 + 74 77 53 1 + 74 77 54 1 + 74 77 55 1 + 74 77 56 1 + 74 77 57 1 + 74 77 58 1 + 74 77 59 1 + 74 77 60 1 + 74 77 61 1 + 74 77 62 1 + 74 77 63 1 + 74 77 64 1 + 74 77 65 1 + 74 77 66 1 + 74 77 67 1 + 74 77 68 1 + 74 77 69 1 + 74 77 70 1 + 74 77 71 1 + 74 77 72 1 + 74 77 73 1 + 74 77 74 1 + 74 77 75 1 + 74 77 76 1 + 74 77 77 1 + 74 77 78 1 + 74 77 79 1 + 74 77 80 1 + 74 77 81 1 + 74 77 82 0.913417 + 74 77 83 0.129326 + 74 78 45 0.315112 + 74 78 46 0.977331 + 74 78 47 1 + 74 78 48 1 + 74 78 49 1 + 74 78 50 1 + 74 78 51 1 + 74 78 52 1 + 74 78 53 1 + 74 78 54 1 + 74 78 55 1 + 74 78 56 1 + 74 78 57 1 + 74 78 58 1 + 74 78 59 1 + 74 78 60 1 + 74 78 61 1 + 74 78 62 1 + 74 78 63 1 + 74 78 64 1 + 74 78 65 1 + 74 78 66 1 + 74 78 67 1 + 74 78 68 1 + 74 78 69 1 + 74 78 70 1 + 74 78 71 1 + 74 78 72 1 + 74 78 73 1 + 74 78 74 1 + 74 78 75 1 + 74 78 76 1 + 74 78 77 1 + 74 78 78 1 + 74 78 79 1 + 74 78 80 1 + 74 78 81 0.977331 + 74 78 82 0.315112 + 74 79 45 0.00195783 + 74 79 46 0.459326 + 74 79 47 0.991434 + 74 79 48 1 + 74 79 49 1 + 74 79 50 1 + 74 79 51 1 + 74 79 52 1 + 74 79 53 1 + 74 79 54 1 + 74 79 55 1 + 74 79 56 1 + 74 79 57 1 + 74 79 58 1 + 74 79 59 1 + 74 79 60 1 + 74 79 61 1 + 74 79 62 1 + 74 79 63 1 + 74 79 64 1 + 74 79 65 1 + 74 79 66 1 + 74 79 67 1 + 74 79 68 1 + 74 79 69 1 + 74 79 70 1 + 74 79 71 1 + 74 79 72 1 + 74 79 73 1 + 74 79 74 1 + 74 79 75 1 + 74 79 76 1 + 74 79 77 1 + 74 79 78 1 + 74 79 79 1 + 74 79 80 0.991434 + 74 79 81 0.459326 + 74 79 82 0.00195783 + 74 80 46 0.00833029 + 74 80 47 0.510119 + 74 80 48 0.991434 + 74 80 49 1 + 74 80 50 1 + 74 80 51 1 + 74 80 52 1 + 74 80 53 1 + 74 80 54 1 + 74 80 55 1 + 74 80 56 1 + 74 80 57 1 + 74 80 58 1 + 74 80 59 1 + 74 80 60 1 + 74 80 61 1 + 74 80 62 1 + 74 80 63 1 + 74 80 64 1 + 74 80 65 1 + 74 80 66 1 + 74 80 67 1 + 74 80 68 1 + 74 80 69 1 + 74 80 70 1 + 74 80 71 1 + 74 80 72 1 + 74 80 73 1 + 74 80 74 1 + 74 80 75 1 + 74 80 76 1 + 74 80 77 1 + 74 80 78 1 + 74 80 79 0.991434 + 74 80 80 0.510119 + 74 80 81 0.00833029 + 74 81 47 0.00833029 + 74 81 48 0.459326 + 74 81 49 0.977331 + 74 81 50 1 + 74 81 51 1 + 74 81 52 1 + 74 81 53 1 + 74 81 54 1 + 74 81 55 1 + 74 81 56 1 + 74 81 57 1 + 74 81 58 1 + 74 81 59 1 + 74 81 60 1 + 74 81 61 1 + 74 81 62 1 + 74 81 63 1 + 74 81 64 1 + 74 81 65 1 + 74 81 66 1 + 74 81 67 1 + 74 81 68 1 + 74 81 69 1 + 74 81 70 1 + 74 81 71 1 + 74 81 72 1 + 74 81 73 1 + 74 81 74 1 + 74 81 75 1 + 74 81 76 1 + 74 81 77 1 + 74 81 78 0.977331 + 74 81 79 0.459326 + 74 81 80 0.00833029 + 74 82 48 0.00195783 + 74 82 49 0.315112 + 74 82 50 0.913417 + 74 82 51 1 + 74 82 52 1 + 74 82 53 1 + 74 82 54 1 + 74 82 55 1 + 74 82 56 1 + 74 82 57 1 + 74 82 58 1 + 74 82 59 1 + 74 82 60 1 + 74 82 61 1 + 74 82 62 1 + 74 82 63 1 + 74 82 64 1 + 74 82 65 1 + 74 82 66 1 + 74 82 67 1 + 74 82 68 1 + 74 82 69 1 + 74 82 70 1 + 74 82 71 1 + 74 82 72 1 + 74 82 73 1 + 74 82 74 1 + 74 82 75 1 + 74 82 76 1 + 74 82 77 0.913417 + 74 82 78 0.315112 + 74 82 79 0.00195783 + 74 83 50 0.129326 + 74 83 51 0.701471 + 74 83 52 0.992776 + 74 83 53 1 + 74 83 54 1 + 74 83 55 1 + 74 83 56 1 + 74 83 57 1 + 74 83 58 1 + 74 83 59 1 + 74 83 60 1 + 74 83 61 1 + 74 83 62 1 + 74 83 63 1 + 74 83 64 1 + 74 83 65 1 + 74 83 66 1 + 74 83 67 1 + 74 83 68 1 + 74 83 69 1 + 74 83 70 1 + 74 83 71 1 + 74 83 72 1 + 74 83 73 1 + 74 83 74 1 + 74 83 75 0.992776 + 74 83 76 0.701471 + 74 83 77 0.129326 + 74 84 51 0.0123857 + 74 84 52 0.320873 + 74 84 53 0.820029 + 74 84 54 0.997314 + 74 84 55 1 + 74 84 56 1 + 74 84 57 1 + 74 84 58 1 + 74 84 59 1 + 74 84 60 1 + 74 84 61 1 + 74 84 62 1 + 74 84 63 1 + 74 84 64 1 + 74 84 65 1 + 74 84 66 1 + 74 84 67 1 + 74 84 68 1 + 74 84 69 1 + 74 84 70 1 + 74 84 71 1 + 74 84 72 1 + 74 84 73 0.997314 + 74 84 74 0.820029 + 74 84 75 0.320873 + 74 84 76 0.0123857 + 74 85 53 0.0282569 + 74 85 54 0.325363 + 74 85 55 0.736168 + 74 85 56 0.971405 + 74 85 57 1 + 74 85 58 1 + 74 85 59 1 + 74 85 60 1 + 74 85 61 1 + 74 85 62 1 + 74 85 63 1 + 74 85 64 1 + 74 85 65 1 + 74 85 66 1 + 74 85 67 1 + 74 85 68 1 + 74 85 69 1 + 74 85 70 1 + 74 85 71 0.971405 + 74 85 72 0.736168 + 74 85 73 0.325363 + 74 85 74 0.0282569 + 74 86 55 0.00460294 + 74 86 56 0.134362 + 74 86 57 0.42026 + 74 86 58 0.686307 + 74 86 59 0.882677 + 74 86 60 0.97359 + 74 86 61 0.998593 + 74 86 62 1 + 74 86 63 1 + 74 86 64 1 + 74 86 65 1 + 74 86 66 0.998593 + 74 86 67 0.97359 + 74 86 68 0.882677 + 74 86 69 0.686307 + 74 86 70 0.42026 + 74 86 71 0.134362 + 74 86 72 0.00460294 + 74 87 58 4.51737e-05 + 74 87 59 0.0230554 + 74 87 60 0.106145 + 74 87 61 0.210787 + 74 87 62 0.295408 + 74 87 63 0.338304 + 74 87 64 0.338304 + 74 87 65 0.295408 + 74 87 66 0.210787 + 74 87 67 0.106145 + 74 87 68 0.0230554 + 74 87 69 4.51737e-05 + 75 40 61 9.9388e-05 + 75 40 62 0.00487084 + 75 40 63 0.012422 + 75 40 64 0.012422 + 75 40 65 0.00487084 + 75 40 66 9.9388e-05 + 75 41 56 3.07754e-05 + 75 41 57 0.0398206 + 75 41 58 0.204921 + 75 41 59 0.42026 + 75 41 60 0.598003 + 75 41 61 0.730298 + 75 41 62 0.813363 + 75 41 63 0.849603 + 75 41 64 0.849603 + 75 41 65 0.813363 + 75 41 66 0.730298 + 75 41 67 0.598003 + 75 41 68 0.42026 + 75 41 69 0.204921 + 75 41 70 0.0398206 + 75 41 71 3.07754e-05 + 75 42 54 0.0182812 + 75 42 55 0.240042 + 75 42 56 0.602276 + 75 42 57 0.884209 + 75 42 58 0.991156 + 75 42 59 1 + 75 42 60 1 + 75 42 61 1 + 75 42 62 1 + 75 42 63 1 + 75 42 64 1 + 75 42 65 1 + 75 42 66 1 + 75 42 67 1 + 75 42 68 1 + 75 42 69 0.991156 + 75 42 70 0.884209 + 75 42 71 0.602276 + 75 42 72 0.240042 + 75 42 73 0.0182812 + 75 43 52 0.0199 + 75 43 53 0.320873 + 75 43 54 0.78197 + 75 43 55 0.988606 + 75 43 56 1 + 75 43 57 1 + 75 43 58 1 + 75 43 59 1 + 75 43 60 1 + 75 43 61 1 + 75 43 62 1 + 75 43 63 1 + 75 43 64 1 + 75 43 65 1 + 75 43 66 1 + 75 43 67 1 + 75 43 68 1 + 75 43 69 1 + 75 43 70 1 + 75 43 71 1 + 75 43 72 0.988606 + 75 43 73 0.78197 + 75 43 74 0.320873 + 75 43 75 0.0199 + 75 44 50 0.00062971 + 75 44 51 0.194777 + 75 44 52 0.744636 + 75 44 53 0.992776 + 75 44 54 1 + 75 44 55 1 + 75 44 56 1 + 75 44 57 1 + 75 44 58 1 + 75 44 59 1 + 75 44 60 1 + 75 44 61 1 + 75 44 62 1 + 75 44 63 1 + 75 44 64 1 + 75 44 65 1 + 75 44 66 1 + 75 44 67 1 + 75 44 68 1 + 75 44 69 1 + 75 44 70 1 + 75 44 71 1 + 75 44 72 1 + 75 44 73 1 + 75 44 74 0.992776 + 75 44 75 0.744636 + 75 44 76 0.194777 + 75 44 77 0.00062971 + 75 45 49 0.0216196 + 75 45 50 0.459682 + 75 45 51 0.952748 + 75 45 52 1 + 75 45 53 1 + 75 45 54 1 + 75 45 55 1 + 75 45 56 1 + 75 45 57 1 + 75 45 58 1 + 75 45 59 1 + 75 45 60 1 + 75 45 61 1 + 75 45 62 1 + 75 45 63 1 + 75 45 64 1 + 75 45 65 1 + 75 45 66 1 + 75 45 67 1 + 75 45 68 1 + 75 45 69 1 + 75 45 70 1 + 75 45 71 1 + 75 45 72 1 + 75 45 73 1 + 75 45 74 1 + 75 45 75 1 + 75 45 76 0.952748 + 75 45 77 0.459682 + 75 45 78 0.0216196 + 75 46 48 0.0602217 + 75 46 49 0.659059 + 75 46 50 0.995483 + 75 46 51 1 + 75 46 52 1 + 75 46 53 1 + 75 46 54 1 + 75 46 55 1 + 75 46 56 1 + 75 46 57 1 + 75 46 58 1 + 75 46 59 1 + 75 46 60 1 + 75 46 61 1 + 75 46 62 1 + 75 46 63 1 + 75 46 64 1 + 75 46 65 1 + 75 46 66 1 + 75 46 67 1 + 75 46 68 1 + 75 46 69 1 + 75 46 70 1 + 75 46 71 1 + 75 46 72 1 + 75 46 73 1 + 75 46 74 1 + 75 46 75 1 + 75 46 76 1 + 75 46 77 0.995483 + 75 46 78 0.659059 + 75 46 79 0.0602217 + 75 47 47 0.0791732 + 75 47 48 0.749996 + 75 47 49 0.999874 + 75 47 50 1 + 75 47 51 1 + 75 47 52 1 + 75 47 53 1 + 75 47 54 1 + 75 47 55 1 + 75 47 56 1 + 75 47 57 1 + 75 47 58 1 + 75 47 59 1 + 75 47 60 1 + 75 47 61 1 + 75 47 62 1 + 75 47 63 1 + 75 47 64 1 + 75 47 65 1 + 75 47 66 1 + 75 47 67 1 + 75 47 68 1 + 75 47 69 1 + 75 47 70 1 + 75 47 71 1 + 75 47 72 1 + 75 47 73 1 + 75 47 74 1 + 75 47 75 1 + 75 47 76 1 + 75 47 77 1 + 75 47 78 0.999874 + 75 47 79 0.749996 + 75 47 80 0.0791732 + 75 48 46 0.0602217 + 75 48 47 0.749996 + 75 48 48 0.999998 + 75 48 49 1 + 75 48 50 1 + 75 48 51 1 + 75 48 52 1 + 75 48 53 1 + 75 48 54 1 + 75 48 55 1 + 75 48 56 1 + 75 48 57 1 + 75 48 58 1 + 75 48 59 1 + 75 48 60 1 + 75 48 61 1 + 75 48 62 1 + 75 48 63 1 + 75 48 64 1 + 75 48 65 1 + 75 48 66 1 + 75 48 67 1 + 75 48 68 1 + 75 48 69 1 + 75 48 70 1 + 75 48 71 1 + 75 48 72 1 + 75 48 73 1 + 75 48 74 1 + 75 48 75 1 + 75 48 76 1 + 75 48 77 1 + 75 48 78 1 + 75 48 79 0.999998 + 75 48 80 0.749996 + 75 48 81 0.0602217 + 75 49 45 0.0216196 + 75 49 46 0.659059 + 75 49 47 0.999874 + 75 49 48 1 + 75 49 49 1 + 75 49 50 1 + 75 49 51 1 + 75 49 52 1 + 75 49 53 1 + 75 49 54 1 + 75 49 55 1 + 75 49 56 1 + 75 49 57 1 + 75 49 58 1 + 75 49 59 1 + 75 49 60 1 + 75 49 61 1 + 75 49 62 1 + 75 49 63 1 + 75 49 64 1 + 75 49 65 1 + 75 49 66 1 + 75 49 67 1 + 75 49 68 1 + 75 49 69 1 + 75 49 70 1 + 75 49 71 1 + 75 49 72 1 + 75 49 73 1 + 75 49 74 1 + 75 49 75 1 + 75 49 76 1 + 75 49 77 1 + 75 49 78 1 + 75 49 79 1 + 75 49 80 0.999874 + 75 49 81 0.659059 + 75 49 82 0.0216196 + 75 50 44 0.00062971 + 75 50 45 0.459682 + 75 50 46 0.995483 + 75 50 47 1 + 75 50 48 1 + 75 50 49 1 + 75 50 50 1 + 75 50 51 1 + 75 50 52 1 + 75 50 53 1 + 75 50 54 1 + 75 50 55 1 + 75 50 56 1 + 75 50 57 1 + 75 50 58 1 + 75 50 59 1 + 75 50 60 1 + 75 50 61 1 + 75 50 62 1 + 75 50 63 1 + 75 50 64 1 + 75 50 65 1 + 75 50 66 1 + 75 50 67 1 + 75 50 68 1 + 75 50 69 1 + 75 50 70 1 + 75 50 71 1 + 75 50 72 1 + 75 50 73 1 + 75 50 74 1 + 75 50 75 1 + 75 50 76 1 + 75 50 77 1 + 75 50 78 1 + 75 50 79 1 + 75 50 80 1 + 75 50 81 0.995483 + 75 50 82 0.459682 + 75 50 83 0.00062971 + 75 51 44 0.194777 + 75 51 45 0.952748 + 75 51 46 1 + 75 51 47 1 + 75 51 48 1 + 75 51 49 1 + 75 51 50 1 + 75 51 51 1 + 75 51 52 1 + 75 51 53 1 + 75 51 54 1 + 75 51 55 1 + 75 51 56 1 + 75 51 57 1 + 75 51 58 1 + 75 51 59 1 + 75 51 60 1 + 75 51 61 1 + 75 51 62 1 + 75 51 63 1 + 75 51 64 1 + 75 51 65 1 + 75 51 66 1 + 75 51 67 1 + 75 51 68 1 + 75 51 69 1 + 75 51 70 1 + 75 51 71 1 + 75 51 72 1 + 75 51 73 1 + 75 51 74 1 + 75 51 75 1 + 75 51 76 1 + 75 51 77 1 + 75 51 78 1 + 75 51 79 1 + 75 51 80 1 + 75 51 81 1 + 75 51 82 0.952748 + 75 51 83 0.194777 + 75 52 43 0.0199 + 75 52 44 0.744636 + 75 52 45 1 + 75 52 46 1 + 75 52 47 1 + 75 52 48 1 + 75 52 49 1 + 75 52 50 1 + 75 52 51 1 + 75 52 52 1 + 75 52 53 1 + 75 52 54 1 + 75 52 55 1 + 75 52 56 1 + 75 52 57 1 + 75 52 58 1 + 75 52 59 1 + 75 52 60 1 + 75 52 61 1 + 75 52 62 1 + 75 52 63 1 + 75 52 64 1 + 75 52 65 1 + 75 52 66 1 + 75 52 67 1 + 75 52 68 1 + 75 52 69 1 + 75 52 70 1 + 75 52 71 1 + 75 52 72 1 + 75 52 73 1 + 75 52 74 1 + 75 52 75 1 + 75 52 76 1 + 75 52 77 1 + 75 52 78 1 + 75 52 79 1 + 75 52 80 1 + 75 52 81 1 + 75 52 82 1 + 75 52 83 0.744636 + 75 52 84 0.0199 + 75 53 43 0.320873 + 75 53 44 0.992776 + 75 53 45 1 + 75 53 46 1 + 75 53 47 1 + 75 53 48 1 + 75 53 49 1 + 75 53 50 1 + 75 53 51 1 + 75 53 52 1 + 75 53 53 1 + 75 53 54 1 + 75 53 55 1 + 75 53 56 1 + 75 53 57 1 + 75 53 58 1 + 75 53 59 1 + 75 53 60 1 + 75 53 61 1 + 75 53 62 1 + 75 53 63 1 + 75 53 64 1 + 75 53 65 1 + 75 53 66 1 + 75 53 67 1 + 75 53 68 1 + 75 53 69 1 + 75 53 70 1 + 75 53 71 1 + 75 53 72 1 + 75 53 73 1 + 75 53 74 1 + 75 53 75 1 + 75 53 76 1 + 75 53 77 1 + 75 53 78 1 + 75 53 79 1 + 75 53 80 1 + 75 53 81 1 + 75 53 82 1 + 75 53 83 0.992776 + 75 53 84 0.320873 + 75 54 42 0.0182812 + 75 54 43 0.78197 + 75 54 44 1 + 75 54 45 1 + 75 54 46 1 + 75 54 47 1 + 75 54 48 1 + 75 54 49 1 + 75 54 50 1 + 75 54 51 1 + 75 54 52 1 + 75 54 53 1 + 75 54 54 1 + 75 54 55 1 + 75 54 56 1 + 75 54 57 1 + 75 54 58 1 + 75 54 59 1 + 75 54 60 1 + 75 54 61 1 + 75 54 62 1 + 75 54 63 1 + 75 54 64 1 + 75 54 65 1 + 75 54 66 1 + 75 54 67 1 + 75 54 68 1 + 75 54 69 1 + 75 54 70 1 + 75 54 71 1 + 75 54 72 1 + 75 54 73 1 + 75 54 74 1 + 75 54 75 1 + 75 54 76 1 + 75 54 77 1 + 75 54 78 1 + 75 54 79 1 + 75 54 80 1 + 75 54 81 1 + 75 54 82 1 + 75 54 83 1 + 75 54 84 0.78197 + 75 54 85 0.0182812 + 75 55 42 0.240042 + 75 55 43 0.988606 + 75 55 44 1 + 75 55 45 1 + 75 55 46 1 + 75 55 47 1 + 75 55 48 1 + 75 55 49 1 + 75 55 50 1 + 75 55 51 1 + 75 55 52 1 + 75 55 53 1 + 75 55 54 1 + 75 55 55 1 + 75 55 56 1 + 75 55 57 1 + 75 55 58 1 + 75 55 59 1 + 75 55 60 1 + 75 55 61 1 + 75 55 62 1 + 75 55 63 1 + 75 55 64 1 + 75 55 65 1 + 75 55 66 1 + 75 55 67 1 + 75 55 68 1 + 75 55 69 1 + 75 55 70 1 + 75 55 71 1 + 75 55 72 1 + 75 55 73 1 + 75 55 74 1 + 75 55 75 1 + 75 55 76 1 + 75 55 77 1 + 75 55 78 1 + 75 55 79 1 + 75 55 80 1 + 75 55 81 1 + 75 55 82 1 + 75 55 83 1 + 75 55 84 0.988606 + 75 55 85 0.240042 + 75 56 41 3.07754e-05 + 75 56 42 0.602276 + 75 56 43 1 + 75 56 44 1 + 75 56 45 1 + 75 56 46 1 + 75 56 47 1 + 75 56 48 1 + 75 56 49 1 + 75 56 50 1 + 75 56 51 1 + 75 56 52 1 + 75 56 53 1 + 75 56 54 1 + 75 56 55 1 + 75 56 56 1 + 75 56 57 1 + 75 56 58 1 + 75 56 59 1 + 75 56 60 1 + 75 56 61 1 + 75 56 62 1 + 75 56 63 1 + 75 56 64 1 + 75 56 65 1 + 75 56 66 1 + 75 56 67 1 + 75 56 68 1 + 75 56 69 1 + 75 56 70 1 + 75 56 71 1 + 75 56 72 1 + 75 56 73 1 + 75 56 74 1 + 75 56 75 1 + 75 56 76 1 + 75 56 77 1 + 75 56 78 1 + 75 56 79 1 + 75 56 80 1 + 75 56 81 1 + 75 56 82 1 + 75 56 83 1 + 75 56 84 1 + 75 56 85 0.602276 + 75 56 86 3.07754e-05 + 75 57 41 0.0398206 + 75 57 42 0.884209 + 75 57 43 1 + 75 57 44 1 + 75 57 45 1 + 75 57 46 1 + 75 57 47 1 + 75 57 48 1 + 75 57 49 1 + 75 57 50 1 + 75 57 51 1 + 75 57 52 1 + 75 57 53 1 + 75 57 54 1 + 75 57 55 1 + 75 57 56 1 + 75 57 57 1 + 75 57 58 1 + 75 57 59 1 + 75 57 60 1 + 75 57 61 1 + 75 57 62 1 + 75 57 63 1 + 75 57 64 1 + 75 57 65 1 + 75 57 66 1 + 75 57 67 1 + 75 57 68 1 + 75 57 69 1 + 75 57 70 1 + 75 57 71 1 + 75 57 72 1 + 75 57 73 1 + 75 57 74 1 + 75 57 75 1 + 75 57 76 1 + 75 57 77 1 + 75 57 78 1 + 75 57 79 1 + 75 57 80 1 + 75 57 81 1 + 75 57 82 1 + 75 57 83 1 + 75 57 84 1 + 75 57 85 0.884209 + 75 57 86 0.0398206 + 75 58 41 0.204921 + 75 58 42 0.991156 + 75 58 43 1 + 75 58 44 1 + 75 58 45 1 + 75 58 46 1 + 75 58 47 1 + 75 58 48 1 + 75 58 49 1 + 75 58 50 1 + 75 58 51 1 + 75 58 52 1 + 75 58 53 1 + 75 58 54 1 + 75 58 55 1 + 75 58 56 1 + 75 58 57 1 + 75 58 58 1 + 75 58 59 1 + 75 58 60 1 + 75 58 61 1 + 75 58 62 1 + 75 58 63 1 + 75 58 64 1 + 75 58 65 1 + 75 58 66 1 + 75 58 67 1 + 75 58 68 1 + 75 58 69 1 + 75 58 70 1 + 75 58 71 1 + 75 58 72 1 + 75 58 73 1 + 75 58 74 1 + 75 58 75 1 + 75 58 76 1 + 75 58 77 1 + 75 58 78 1 + 75 58 79 1 + 75 58 80 1 + 75 58 81 1 + 75 58 82 1 + 75 58 83 1 + 75 58 84 1 + 75 58 85 0.991156 + 75 58 86 0.204921 + 75 59 41 0.42026 + 75 59 42 1 + 75 59 43 1 + 75 59 44 1 + 75 59 45 1 + 75 59 46 1 + 75 59 47 1 + 75 59 48 1 + 75 59 49 1 + 75 59 50 1 + 75 59 51 1 + 75 59 52 1 + 75 59 53 1 + 75 59 54 1 + 75 59 55 1 + 75 59 56 1 + 75 59 57 1 + 75 59 58 1 + 75 59 59 1 + 75 59 60 1 + 75 59 61 1 + 75 59 62 1 + 75 59 63 1 + 75 59 64 1 + 75 59 65 1 + 75 59 66 1 + 75 59 67 1 + 75 59 68 1 + 75 59 69 1 + 75 59 70 1 + 75 59 71 1 + 75 59 72 1 + 75 59 73 1 + 75 59 74 1 + 75 59 75 1 + 75 59 76 1 + 75 59 77 1 + 75 59 78 1 + 75 59 79 1 + 75 59 80 1 + 75 59 81 1 + 75 59 82 1 + 75 59 83 1 + 75 59 84 1 + 75 59 85 1 + 75 59 86 0.42026 + 75 60 41 0.598003 + 75 60 42 1 + 75 60 43 1 + 75 60 44 1 + 75 60 45 1 + 75 60 46 1 + 75 60 47 1 + 75 60 48 1 + 75 60 49 1 + 75 60 50 1 + 75 60 51 1 + 75 60 52 1 + 75 60 53 1 + 75 60 54 1 + 75 60 55 1 + 75 60 56 1 + 75 60 57 1 + 75 60 58 1 + 75 60 59 1 + 75 60 60 1 + 75 60 61 1 + 75 60 62 1 + 75 60 63 1 + 75 60 64 1 + 75 60 65 1 + 75 60 66 1 + 75 60 67 1 + 75 60 68 1 + 75 60 69 1 + 75 60 70 1 + 75 60 71 1 + 75 60 72 1 + 75 60 73 1 + 75 60 74 1 + 75 60 75 1 + 75 60 76 1 + 75 60 77 1 + 75 60 78 1 + 75 60 79 1 + 75 60 80 1 + 75 60 81 1 + 75 60 82 1 + 75 60 83 1 + 75 60 84 1 + 75 60 85 1 + 75 60 86 0.598003 + 75 61 40 9.9388e-05 + 75 61 41 0.730298 + 75 61 42 1 + 75 61 43 1 + 75 61 44 1 + 75 61 45 1 + 75 61 46 1 + 75 61 47 1 + 75 61 48 1 + 75 61 49 1 + 75 61 50 1 + 75 61 51 1 + 75 61 52 1 + 75 61 53 1 + 75 61 54 1 + 75 61 55 1 + 75 61 56 1 + 75 61 57 1 + 75 61 58 1 + 75 61 59 1 + 75 61 60 1 + 75 61 61 1 + 75 61 62 1 + 75 61 63 1 + 75 61 64 1 + 75 61 65 1 + 75 61 66 1 + 75 61 67 1 + 75 61 68 1 + 75 61 69 1 + 75 61 70 1 + 75 61 71 1 + 75 61 72 1 + 75 61 73 1 + 75 61 74 1 + 75 61 75 1 + 75 61 76 1 + 75 61 77 1 + 75 61 78 1 + 75 61 79 1 + 75 61 80 1 + 75 61 81 1 + 75 61 82 1 + 75 61 83 1 + 75 61 84 1 + 75 61 85 1 + 75 61 86 0.730298 + 75 61 87 9.9388e-05 + 75 62 40 0.00487084 + 75 62 41 0.813363 + 75 62 42 1 + 75 62 43 1 + 75 62 44 1 + 75 62 45 1 + 75 62 46 1 + 75 62 47 1 + 75 62 48 1 + 75 62 49 1 + 75 62 50 1 + 75 62 51 1 + 75 62 52 1 + 75 62 53 1 + 75 62 54 1 + 75 62 55 1 + 75 62 56 1 + 75 62 57 1 + 75 62 58 1 + 75 62 59 1 + 75 62 60 1 + 75 62 61 1 + 75 62 62 1 + 75 62 63 1 + 75 62 64 1 + 75 62 65 1 + 75 62 66 1 + 75 62 67 1 + 75 62 68 1 + 75 62 69 1 + 75 62 70 1 + 75 62 71 1 + 75 62 72 1 + 75 62 73 1 + 75 62 74 1 + 75 62 75 1 + 75 62 76 1 + 75 62 77 1 + 75 62 78 1 + 75 62 79 1 + 75 62 80 1 + 75 62 81 1 + 75 62 82 1 + 75 62 83 1 + 75 62 84 1 + 75 62 85 1 + 75 62 86 0.813363 + 75 62 87 0.00487084 + 75 63 40 0.012422 + 75 63 41 0.849603 + 75 63 42 1 + 75 63 43 1 + 75 63 44 1 + 75 63 45 1 + 75 63 46 1 + 75 63 47 1 + 75 63 48 1 + 75 63 49 1 + 75 63 50 1 + 75 63 51 1 + 75 63 52 1 + 75 63 53 1 + 75 63 54 1 + 75 63 55 1 + 75 63 56 1 + 75 63 57 1 + 75 63 58 1 + 75 63 59 1 + 75 63 60 1 + 75 63 61 1 + 75 63 62 1 + 75 63 63 1 + 75 63 64 1 + 75 63 65 1 + 75 63 66 1 + 75 63 67 1 + 75 63 68 1 + 75 63 69 1 + 75 63 70 1 + 75 63 71 1 + 75 63 72 1 + 75 63 73 1 + 75 63 74 1 + 75 63 75 1 + 75 63 76 1 + 75 63 77 1 + 75 63 78 1 + 75 63 79 1 + 75 63 80 1 + 75 63 81 1 + 75 63 82 1 + 75 63 83 1 + 75 63 84 1 + 75 63 85 1 + 75 63 86 0.849603 + 75 63 87 0.012422 + 75 64 40 0.012422 + 75 64 41 0.849603 + 75 64 42 1 + 75 64 43 1 + 75 64 44 1 + 75 64 45 1 + 75 64 46 1 + 75 64 47 1 + 75 64 48 1 + 75 64 49 1 + 75 64 50 1 + 75 64 51 1 + 75 64 52 1 + 75 64 53 1 + 75 64 54 1 + 75 64 55 1 + 75 64 56 1 + 75 64 57 1 + 75 64 58 1 + 75 64 59 1 + 75 64 60 1 + 75 64 61 1 + 75 64 62 1 + 75 64 63 1 + 75 64 64 1 + 75 64 65 1 + 75 64 66 1 + 75 64 67 1 + 75 64 68 1 + 75 64 69 1 + 75 64 70 1 + 75 64 71 1 + 75 64 72 1 + 75 64 73 1 + 75 64 74 1 + 75 64 75 1 + 75 64 76 1 + 75 64 77 1 + 75 64 78 1 + 75 64 79 1 + 75 64 80 1 + 75 64 81 1 + 75 64 82 1 + 75 64 83 1 + 75 64 84 1 + 75 64 85 1 + 75 64 86 0.849603 + 75 64 87 0.012422 + 75 65 40 0.00487084 + 75 65 41 0.813363 + 75 65 42 1 + 75 65 43 1 + 75 65 44 1 + 75 65 45 1 + 75 65 46 1 + 75 65 47 1 + 75 65 48 1 + 75 65 49 1 + 75 65 50 1 + 75 65 51 1 + 75 65 52 1 + 75 65 53 1 + 75 65 54 1 + 75 65 55 1 + 75 65 56 1 + 75 65 57 1 + 75 65 58 1 + 75 65 59 1 + 75 65 60 1 + 75 65 61 1 + 75 65 62 1 + 75 65 63 1 + 75 65 64 1 + 75 65 65 1 + 75 65 66 1 + 75 65 67 1 + 75 65 68 1 + 75 65 69 1 + 75 65 70 1 + 75 65 71 1 + 75 65 72 1 + 75 65 73 1 + 75 65 74 1 + 75 65 75 1 + 75 65 76 1 + 75 65 77 1 + 75 65 78 1 + 75 65 79 1 + 75 65 80 1 + 75 65 81 1 + 75 65 82 1 + 75 65 83 1 + 75 65 84 1 + 75 65 85 1 + 75 65 86 0.813363 + 75 65 87 0.00487084 + 75 66 40 9.9388e-05 + 75 66 41 0.730298 + 75 66 42 1 + 75 66 43 1 + 75 66 44 1 + 75 66 45 1 + 75 66 46 1 + 75 66 47 1 + 75 66 48 1 + 75 66 49 1 + 75 66 50 1 + 75 66 51 1 + 75 66 52 1 + 75 66 53 1 + 75 66 54 1 + 75 66 55 1 + 75 66 56 1 + 75 66 57 1 + 75 66 58 1 + 75 66 59 1 + 75 66 60 1 + 75 66 61 1 + 75 66 62 1 + 75 66 63 1 + 75 66 64 1 + 75 66 65 1 + 75 66 66 1 + 75 66 67 1 + 75 66 68 1 + 75 66 69 1 + 75 66 70 1 + 75 66 71 1 + 75 66 72 1 + 75 66 73 1 + 75 66 74 1 + 75 66 75 1 + 75 66 76 1 + 75 66 77 1 + 75 66 78 1 + 75 66 79 1 + 75 66 80 1 + 75 66 81 1 + 75 66 82 1 + 75 66 83 1 + 75 66 84 1 + 75 66 85 1 + 75 66 86 0.730298 + 75 66 87 9.9388e-05 + 75 67 41 0.598003 + 75 67 42 1 + 75 67 43 1 + 75 67 44 1 + 75 67 45 1 + 75 67 46 1 + 75 67 47 1 + 75 67 48 1 + 75 67 49 1 + 75 67 50 1 + 75 67 51 1 + 75 67 52 1 + 75 67 53 1 + 75 67 54 1 + 75 67 55 1 + 75 67 56 1 + 75 67 57 1 + 75 67 58 1 + 75 67 59 1 + 75 67 60 1 + 75 67 61 1 + 75 67 62 1 + 75 67 63 1 + 75 67 64 1 + 75 67 65 1 + 75 67 66 1 + 75 67 67 1 + 75 67 68 1 + 75 67 69 1 + 75 67 70 1 + 75 67 71 1 + 75 67 72 1 + 75 67 73 1 + 75 67 74 1 + 75 67 75 1 + 75 67 76 1 + 75 67 77 1 + 75 67 78 1 + 75 67 79 1 + 75 67 80 1 + 75 67 81 1 + 75 67 82 1 + 75 67 83 1 + 75 67 84 1 + 75 67 85 1 + 75 67 86 0.598003 + 75 68 41 0.42026 + 75 68 42 1 + 75 68 43 1 + 75 68 44 1 + 75 68 45 1 + 75 68 46 1 + 75 68 47 1 + 75 68 48 1 + 75 68 49 1 + 75 68 50 1 + 75 68 51 1 + 75 68 52 1 + 75 68 53 1 + 75 68 54 1 + 75 68 55 1 + 75 68 56 1 + 75 68 57 1 + 75 68 58 1 + 75 68 59 1 + 75 68 60 1 + 75 68 61 1 + 75 68 62 1 + 75 68 63 1 + 75 68 64 1 + 75 68 65 1 + 75 68 66 1 + 75 68 67 1 + 75 68 68 1 + 75 68 69 1 + 75 68 70 1 + 75 68 71 1 + 75 68 72 1 + 75 68 73 1 + 75 68 74 1 + 75 68 75 1 + 75 68 76 1 + 75 68 77 1 + 75 68 78 1 + 75 68 79 1 + 75 68 80 1 + 75 68 81 1 + 75 68 82 1 + 75 68 83 1 + 75 68 84 1 + 75 68 85 1 + 75 68 86 0.42026 + 75 69 41 0.204921 + 75 69 42 0.991156 + 75 69 43 1 + 75 69 44 1 + 75 69 45 1 + 75 69 46 1 + 75 69 47 1 + 75 69 48 1 + 75 69 49 1 + 75 69 50 1 + 75 69 51 1 + 75 69 52 1 + 75 69 53 1 + 75 69 54 1 + 75 69 55 1 + 75 69 56 1 + 75 69 57 1 + 75 69 58 1 + 75 69 59 1 + 75 69 60 1 + 75 69 61 1 + 75 69 62 1 + 75 69 63 1 + 75 69 64 1 + 75 69 65 1 + 75 69 66 1 + 75 69 67 1 + 75 69 68 1 + 75 69 69 1 + 75 69 70 1 + 75 69 71 1 + 75 69 72 1 + 75 69 73 1 + 75 69 74 1 + 75 69 75 1 + 75 69 76 1 + 75 69 77 1 + 75 69 78 1 + 75 69 79 1 + 75 69 80 1 + 75 69 81 1 + 75 69 82 1 + 75 69 83 1 + 75 69 84 1 + 75 69 85 0.991156 + 75 69 86 0.204921 + 75 70 41 0.0398206 + 75 70 42 0.884209 + 75 70 43 1 + 75 70 44 1 + 75 70 45 1 + 75 70 46 1 + 75 70 47 1 + 75 70 48 1 + 75 70 49 1 + 75 70 50 1 + 75 70 51 1 + 75 70 52 1 + 75 70 53 1 + 75 70 54 1 + 75 70 55 1 + 75 70 56 1 + 75 70 57 1 + 75 70 58 1 + 75 70 59 1 + 75 70 60 1 + 75 70 61 1 + 75 70 62 1 + 75 70 63 1 + 75 70 64 1 + 75 70 65 1 + 75 70 66 1 + 75 70 67 1 + 75 70 68 1 + 75 70 69 1 + 75 70 70 1 + 75 70 71 1 + 75 70 72 1 + 75 70 73 1 + 75 70 74 1 + 75 70 75 1 + 75 70 76 1 + 75 70 77 1 + 75 70 78 1 + 75 70 79 1 + 75 70 80 1 + 75 70 81 1 + 75 70 82 1 + 75 70 83 1 + 75 70 84 1 + 75 70 85 0.884209 + 75 70 86 0.0398206 + 75 71 41 3.07754e-05 + 75 71 42 0.602276 + 75 71 43 1 + 75 71 44 1 + 75 71 45 1 + 75 71 46 1 + 75 71 47 1 + 75 71 48 1 + 75 71 49 1 + 75 71 50 1 + 75 71 51 1 + 75 71 52 1 + 75 71 53 1 + 75 71 54 1 + 75 71 55 1 + 75 71 56 1 + 75 71 57 1 + 75 71 58 1 + 75 71 59 1 + 75 71 60 1 + 75 71 61 1 + 75 71 62 1 + 75 71 63 1 + 75 71 64 1 + 75 71 65 1 + 75 71 66 1 + 75 71 67 1 + 75 71 68 1 + 75 71 69 1 + 75 71 70 1 + 75 71 71 1 + 75 71 72 1 + 75 71 73 1 + 75 71 74 1 + 75 71 75 1 + 75 71 76 1 + 75 71 77 1 + 75 71 78 1 + 75 71 79 1 + 75 71 80 1 + 75 71 81 1 + 75 71 82 1 + 75 71 83 1 + 75 71 84 1 + 75 71 85 0.602276 + 75 71 86 3.07754e-05 + 75 72 42 0.240042 + 75 72 43 0.988606 + 75 72 44 1 + 75 72 45 1 + 75 72 46 1 + 75 72 47 1 + 75 72 48 1 + 75 72 49 1 + 75 72 50 1 + 75 72 51 1 + 75 72 52 1 + 75 72 53 1 + 75 72 54 1 + 75 72 55 1 + 75 72 56 1 + 75 72 57 1 + 75 72 58 1 + 75 72 59 1 + 75 72 60 1 + 75 72 61 1 + 75 72 62 1 + 75 72 63 1 + 75 72 64 1 + 75 72 65 1 + 75 72 66 1 + 75 72 67 1 + 75 72 68 1 + 75 72 69 1 + 75 72 70 1 + 75 72 71 1 + 75 72 72 1 + 75 72 73 1 + 75 72 74 1 + 75 72 75 1 + 75 72 76 1 + 75 72 77 1 + 75 72 78 1 + 75 72 79 1 + 75 72 80 1 + 75 72 81 1 + 75 72 82 1 + 75 72 83 1 + 75 72 84 0.988606 + 75 72 85 0.240042 + 75 73 42 0.0182812 + 75 73 43 0.78197 + 75 73 44 1 + 75 73 45 1 + 75 73 46 1 + 75 73 47 1 + 75 73 48 1 + 75 73 49 1 + 75 73 50 1 + 75 73 51 1 + 75 73 52 1 + 75 73 53 1 + 75 73 54 1 + 75 73 55 1 + 75 73 56 1 + 75 73 57 1 + 75 73 58 1 + 75 73 59 1 + 75 73 60 1 + 75 73 61 1 + 75 73 62 1 + 75 73 63 1 + 75 73 64 1 + 75 73 65 1 + 75 73 66 1 + 75 73 67 1 + 75 73 68 1 + 75 73 69 1 + 75 73 70 1 + 75 73 71 1 + 75 73 72 1 + 75 73 73 1 + 75 73 74 1 + 75 73 75 1 + 75 73 76 1 + 75 73 77 1 + 75 73 78 1 + 75 73 79 1 + 75 73 80 1 + 75 73 81 1 + 75 73 82 1 + 75 73 83 1 + 75 73 84 0.78197 + 75 73 85 0.0182812 + 75 74 43 0.320873 + 75 74 44 0.992776 + 75 74 45 1 + 75 74 46 1 + 75 74 47 1 + 75 74 48 1 + 75 74 49 1 + 75 74 50 1 + 75 74 51 1 + 75 74 52 1 + 75 74 53 1 + 75 74 54 1 + 75 74 55 1 + 75 74 56 1 + 75 74 57 1 + 75 74 58 1 + 75 74 59 1 + 75 74 60 1 + 75 74 61 1 + 75 74 62 1 + 75 74 63 1 + 75 74 64 1 + 75 74 65 1 + 75 74 66 1 + 75 74 67 1 + 75 74 68 1 + 75 74 69 1 + 75 74 70 1 + 75 74 71 1 + 75 74 72 1 + 75 74 73 1 + 75 74 74 1 + 75 74 75 1 + 75 74 76 1 + 75 74 77 1 + 75 74 78 1 + 75 74 79 1 + 75 74 80 1 + 75 74 81 1 + 75 74 82 1 + 75 74 83 0.992776 + 75 74 84 0.320873 + 75 75 43 0.0199 + 75 75 44 0.744636 + 75 75 45 1 + 75 75 46 1 + 75 75 47 1 + 75 75 48 1 + 75 75 49 1 + 75 75 50 1 + 75 75 51 1 + 75 75 52 1 + 75 75 53 1 + 75 75 54 1 + 75 75 55 1 + 75 75 56 1 + 75 75 57 1 + 75 75 58 1 + 75 75 59 1 + 75 75 60 1 + 75 75 61 1 + 75 75 62 1 + 75 75 63 1 + 75 75 64 1 + 75 75 65 1 + 75 75 66 1 + 75 75 67 1 + 75 75 68 1 + 75 75 69 1 + 75 75 70 1 + 75 75 71 1 + 75 75 72 1 + 75 75 73 1 + 75 75 74 1 + 75 75 75 1 + 75 75 76 1 + 75 75 77 1 + 75 75 78 1 + 75 75 79 1 + 75 75 80 1 + 75 75 81 1 + 75 75 82 1 + 75 75 83 0.744636 + 75 75 84 0.0199 + 75 76 44 0.194777 + 75 76 45 0.952748 + 75 76 46 1 + 75 76 47 1 + 75 76 48 1 + 75 76 49 1 + 75 76 50 1 + 75 76 51 1 + 75 76 52 1 + 75 76 53 1 + 75 76 54 1 + 75 76 55 1 + 75 76 56 1 + 75 76 57 1 + 75 76 58 1 + 75 76 59 1 + 75 76 60 1 + 75 76 61 1 + 75 76 62 1 + 75 76 63 1 + 75 76 64 1 + 75 76 65 1 + 75 76 66 1 + 75 76 67 1 + 75 76 68 1 + 75 76 69 1 + 75 76 70 1 + 75 76 71 1 + 75 76 72 1 + 75 76 73 1 + 75 76 74 1 + 75 76 75 1 + 75 76 76 1 + 75 76 77 1 + 75 76 78 1 + 75 76 79 1 + 75 76 80 1 + 75 76 81 1 + 75 76 82 0.952748 + 75 76 83 0.194777 + 75 77 44 0.00062971 + 75 77 45 0.459682 + 75 77 46 0.995483 + 75 77 47 1 + 75 77 48 1 + 75 77 49 1 + 75 77 50 1 + 75 77 51 1 + 75 77 52 1 + 75 77 53 1 + 75 77 54 1 + 75 77 55 1 + 75 77 56 1 + 75 77 57 1 + 75 77 58 1 + 75 77 59 1 + 75 77 60 1 + 75 77 61 1 + 75 77 62 1 + 75 77 63 1 + 75 77 64 1 + 75 77 65 1 + 75 77 66 1 + 75 77 67 1 + 75 77 68 1 + 75 77 69 1 + 75 77 70 1 + 75 77 71 1 + 75 77 72 1 + 75 77 73 1 + 75 77 74 1 + 75 77 75 1 + 75 77 76 1 + 75 77 77 1 + 75 77 78 1 + 75 77 79 1 + 75 77 80 1 + 75 77 81 0.995483 + 75 77 82 0.459682 + 75 77 83 0.00062971 + 75 78 45 0.0216196 + 75 78 46 0.659059 + 75 78 47 0.999874 + 75 78 48 1 + 75 78 49 1 + 75 78 50 1 + 75 78 51 1 + 75 78 52 1 + 75 78 53 1 + 75 78 54 1 + 75 78 55 1 + 75 78 56 1 + 75 78 57 1 + 75 78 58 1 + 75 78 59 1 + 75 78 60 1 + 75 78 61 1 + 75 78 62 1 + 75 78 63 1 + 75 78 64 1 + 75 78 65 1 + 75 78 66 1 + 75 78 67 1 + 75 78 68 1 + 75 78 69 1 + 75 78 70 1 + 75 78 71 1 + 75 78 72 1 + 75 78 73 1 + 75 78 74 1 + 75 78 75 1 + 75 78 76 1 + 75 78 77 1 + 75 78 78 1 + 75 78 79 1 + 75 78 80 0.999874 + 75 78 81 0.659059 + 75 78 82 0.0216196 + 75 79 46 0.0602217 + 75 79 47 0.749996 + 75 79 48 0.999998 + 75 79 49 1 + 75 79 50 1 + 75 79 51 1 + 75 79 52 1 + 75 79 53 1 + 75 79 54 1 + 75 79 55 1 + 75 79 56 1 + 75 79 57 1 + 75 79 58 1 + 75 79 59 1 + 75 79 60 1 + 75 79 61 1 + 75 79 62 1 + 75 79 63 1 + 75 79 64 1 + 75 79 65 1 + 75 79 66 1 + 75 79 67 1 + 75 79 68 1 + 75 79 69 1 + 75 79 70 1 + 75 79 71 1 + 75 79 72 1 + 75 79 73 1 + 75 79 74 1 + 75 79 75 1 + 75 79 76 1 + 75 79 77 1 + 75 79 78 1 + 75 79 79 0.999998 + 75 79 80 0.749996 + 75 79 81 0.0602217 + 75 80 47 0.0791732 + 75 80 48 0.749996 + 75 80 49 0.999874 + 75 80 50 1 + 75 80 51 1 + 75 80 52 1 + 75 80 53 1 + 75 80 54 1 + 75 80 55 1 + 75 80 56 1 + 75 80 57 1 + 75 80 58 1 + 75 80 59 1 + 75 80 60 1 + 75 80 61 1 + 75 80 62 1 + 75 80 63 1 + 75 80 64 1 + 75 80 65 1 + 75 80 66 1 + 75 80 67 1 + 75 80 68 1 + 75 80 69 1 + 75 80 70 1 + 75 80 71 1 + 75 80 72 1 + 75 80 73 1 + 75 80 74 1 + 75 80 75 1 + 75 80 76 1 + 75 80 77 1 + 75 80 78 0.999874 + 75 80 79 0.749996 + 75 80 80 0.0791732 + 75 81 48 0.0602217 + 75 81 49 0.659059 + 75 81 50 0.995483 + 75 81 51 1 + 75 81 52 1 + 75 81 53 1 + 75 81 54 1 + 75 81 55 1 + 75 81 56 1 + 75 81 57 1 + 75 81 58 1 + 75 81 59 1 + 75 81 60 1 + 75 81 61 1 + 75 81 62 1 + 75 81 63 1 + 75 81 64 1 + 75 81 65 1 + 75 81 66 1 + 75 81 67 1 + 75 81 68 1 + 75 81 69 1 + 75 81 70 1 + 75 81 71 1 + 75 81 72 1 + 75 81 73 1 + 75 81 74 1 + 75 81 75 1 + 75 81 76 1 + 75 81 77 0.995483 + 75 81 78 0.659059 + 75 81 79 0.0602217 + 75 82 49 0.0216196 + 75 82 50 0.459682 + 75 82 51 0.952748 + 75 82 52 1 + 75 82 53 1 + 75 82 54 1 + 75 82 55 1 + 75 82 56 1 + 75 82 57 1 + 75 82 58 1 + 75 82 59 1 + 75 82 60 1 + 75 82 61 1 + 75 82 62 1 + 75 82 63 1 + 75 82 64 1 + 75 82 65 1 + 75 82 66 1 + 75 82 67 1 + 75 82 68 1 + 75 82 69 1 + 75 82 70 1 + 75 82 71 1 + 75 82 72 1 + 75 82 73 1 + 75 82 74 1 + 75 82 75 1 + 75 82 76 0.952748 + 75 82 77 0.459682 + 75 82 78 0.0216196 + 75 83 50 0.00062971 + 75 83 51 0.194777 + 75 83 52 0.744636 + 75 83 53 0.992776 + 75 83 54 1 + 75 83 55 1 + 75 83 56 1 + 75 83 57 1 + 75 83 58 1 + 75 83 59 1 + 75 83 60 1 + 75 83 61 1 + 75 83 62 1 + 75 83 63 1 + 75 83 64 1 + 75 83 65 1 + 75 83 66 1 + 75 83 67 1 + 75 83 68 1 + 75 83 69 1 + 75 83 70 1 + 75 83 71 1 + 75 83 72 1 + 75 83 73 1 + 75 83 74 0.992776 + 75 83 75 0.744636 + 75 83 76 0.194777 + 75 83 77 0.00062971 + 75 84 52 0.0199 + 75 84 53 0.320873 + 75 84 54 0.78197 + 75 84 55 0.988606 + 75 84 56 1 + 75 84 57 1 + 75 84 58 1 + 75 84 59 1 + 75 84 60 1 + 75 84 61 1 + 75 84 62 1 + 75 84 63 1 + 75 84 64 1 + 75 84 65 1 + 75 84 66 1 + 75 84 67 1 + 75 84 68 1 + 75 84 69 1 + 75 84 70 1 + 75 84 71 1 + 75 84 72 0.988606 + 75 84 73 0.78197 + 75 84 74 0.320873 + 75 84 75 0.0199 + 75 85 54 0.0182812 + 75 85 55 0.240042 + 75 85 56 0.602276 + 75 85 57 0.884209 + 75 85 58 0.991156 + 75 85 59 1 + 75 85 60 1 + 75 85 61 1 + 75 85 62 1 + 75 85 63 1 + 75 85 64 1 + 75 85 65 1 + 75 85 66 1 + 75 85 67 1 + 75 85 68 1 + 75 85 69 0.991156 + 75 85 70 0.884209 + 75 85 71 0.602276 + 75 85 72 0.240042 + 75 85 73 0.0182812 + 75 86 56 3.07754e-05 + 75 86 57 0.0398206 + 75 86 58 0.204921 + 75 86 59 0.42026 + 75 86 60 0.598003 + 75 86 61 0.730298 + 75 86 62 0.813363 + 75 86 63 0.849603 + 75 86 64 0.849603 + 75 86 65 0.813363 + 75 86 66 0.730298 + 75 86 67 0.598003 + 75 86 68 0.42026 + 75 86 69 0.204921 + 75 86 70 0.0398206 + 75 86 71 3.07754e-05 + 75 87 61 9.9388e-05 + 75 87 62 0.00487084 + 75 87 63 0.012422 + 75 87 64 0.012422 + 75 87 65 0.00487084 + 75 87 66 9.9388e-05 + 76 41 58 0.000204528 + 76 41 59 0.0262369 + 76 41 60 0.106397 + 76 41 61 0.203942 + 76 41 62 0.286191 + 76 41 63 0.330857 + 76 41 64 0.330857 + 76 41 65 0.286191 + 76 41 66 0.203942 + 76 41 67 0.106397 + 76 41 68 0.0262369 + 76 41 69 0.000204528 + 76 42 55 0.00260739 + 76 42 56 0.104302 + 76 42 57 0.370069 + 76 42 58 0.648356 + 76 42 59 0.852122 + 76 42 60 0.954076 + 76 42 61 0.992135 + 76 42 62 0.99983 + 76 42 63 1 + 76 42 64 1 + 76 42 65 0.99983 + 76 42 66 0.992135 + 76 42 67 0.954076 + 76 42 68 0.852122 + 76 42 69 0.648356 + 76 42 70 0.370069 + 76 42 71 0.104302 + 76 42 72 0.00260739 + 76 43 53 0.0123857 + 76 43 54 0.23592 + 76 43 55 0.652868 + 76 43 56 0.935026 + 76 43 57 0.999467 + 76 43 58 1 + 76 43 59 1 + 76 43 60 1 + 76 43 61 1 + 76 43 62 1 + 76 43 63 1 + 76 43 64 1 + 76 43 65 1 + 76 43 66 1 + 76 43 67 1 + 76 43 68 1 + 76 43 69 1 + 76 43 70 0.999467 + 76 43 71 0.935026 + 76 43 72 0.652868 + 76 43 73 0.23592 + 76 43 74 0.0123857 + 76 44 51 0.00193335 + 76 44 52 0.194777 + 76 44 53 0.701471 + 76 44 54 0.979001 + 76 44 55 1 + 76 44 56 1 + 76 44 57 1 + 76 44 58 1 + 76 44 59 1 + 76 44 60 1 + 76 44 61 1 + 76 44 62 1 + 76 44 63 1 + 76 44 64 1 + 76 44 65 1 + 76 44 66 1 + 76 44 67 1 + 76 44 68 1 + 76 44 69 1 + 76 44 70 1 + 76 44 71 1 + 76 44 72 1 + 76 44 73 0.979001 + 76 44 74 0.701471 + 76 44 75 0.194777 + 76 44 76 0.00193335 + 76 45 50 0.0443033 + 76 45 51 0.51002 + 76 45 52 0.952748 + 76 45 53 1 + 76 45 54 1 + 76 45 55 1 + 76 45 56 1 + 76 45 57 1 + 76 45 58 1 + 76 45 59 1 + 76 45 60 1 + 76 45 61 1 + 76 45 62 1 + 76 45 63 1 + 76 45 64 1 + 76 45 65 1 + 76 45 66 1 + 76 45 67 1 + 76 45 68 1 + 76 45 69 1 + 76 45 70 1 + 76 45 71 1 + 76 45 72 1 + 76 45 73 1 + 76 45 74 1 + 76 45 75 0.952748 + 76 45 76 0.51002 + 76 45 77 0.0443033 + 76 46 49 0.127131 + 76 46 50 0.749071 + 76 46 51 0.99797 + 76 46 52 1 + 76 46 53 1 + 76 46 54 1 + 76 46 55 1 + 76 46 56 1 + 76 46 57 1 + 76 46 58 1 + 76 46 59 1 + 76 46 60 1 + 76 46 61 1 + 76 46 62 1 + 76 46 63 1 + 76 46 64 1 + 76 46 65 1 + 76 46 66 1 + 76 46 67 1 + 76 46 68 1 + 76 46 69 1 + 76 46 70 1 + 76 46 71 1 + 76 46 72 1 + 76 46 73 1 + 76 46 74 1 + 76 46 75 1 + 76 46 76 0.99797 + 76 46 77 0.749071 + 76 46 78 0.127131 + 76 47 48 0.190365 + 76 47 49 0.860729 + 76 47 50 1 + 76 47 51 1 + 76 47 52 1 + 76 47 53 1 + 76 47 54 1 + 76 47 55 1 + 76 47 56 1 + 76 47 57 1 + 76 47 58 1 + 76 47 59 1 + 76 47 60 1 + 76 47 61 1 + 76 47 62 1 + 76 47 63 1 + 76 47 64 1 + 76 47 65 1 + 76 47 66 1 + 76 47 67 1 + 76 47 68 1 + 76 47 69 1 + 76 47 70 1 + 76 47 71 1 + 76 47 72 1 + 76 47 73 1 + 76 47 74 1 + 76 47 75 1 + 76 47 76 1 + 76 47 77 1 + 76 47 78 0.860729 + 76 47 79 0.190365 + 76 48 47 0.190365 + 76 48 48 0.889603 + 76 48 49 1 + 76 48 50 1 + 76 48 51 1 + 76 48 52 1 + 76 48 53 1 + 76 48 54 1 + 76 48 55 1 + 76 48 56 1 + 76 48 57 1 + 76 48 58 1 + 76 48 59 1 + 76 48 60 1 + 76 48 61 1 + 76 48 62 1 + 76 48 63 1 + 76 48 64 1 + 76 48 65 1 + 76 48 66 1 + 76 48 67 1 + 76 48 68 1 + 76 48 69 1 + 76 48 70 1 + 76 48 71 1 + 76 48 72 1 + 76 48 73 1 + 76 48 74 1 + 76 48 75 1 + 76 48 76 1 + 76 48 77 1 + 76 48 78 1 + 76 48 79 0.889603 + 76 48 80 0.190365 + 76 49 46 0.127131 + 76 49 47 0.860729 + 76 49 48 1 + 76 49 49 1 + 76 49 50 1 + 76 49 51 1 + 76 49 52 1 + 76 49 53 1 + 76 49 54 1 + 76 49 55 1 + 76 49 56 1 + 76 49 57 1 + 76 49 58 1 + 76 49 59 1 + 76 49 60 1 + 76 49 61 1 + 76 49 62 1 + 76 49 63 1 + 76 49 64 1 + 76 49 65 1 + 76 49 66 1 + 76 49 67 1 + 76 49 68 1 + 76 49 69 1 + 76 49 70 1 + 76 49 71 1 + 76 49 72 1 + 76 49 73 1 + 76 49 74 1 + 76 49 75 1 + 76 49 76 1 + 76 49 77 1 + 76 49 78 1 + 76 49 79 1 + 76 49 80 0.860729 + 76 49 81 0.127131 + 76 50 45 0.0443033 + 76 50 46 0.749071 + 76 50 47 1 + 76 50 48 1 + 76 50 49 1 + 76 50 50 1 + 76 50 51 1 + 76 50 52 1 + 76 50 53 1 + 76 50 54 1 + 76 50 55 1 + 76 50 56 1 + 76 50 57 1 + 76 50 58 1 + 76 50 59 1 + 76 50 60 1 + 76 50 61 1 + 76 50 62 1 + 76 50 63 1 + 76 50 64 1 + 76 50 65 1 + 76 50 66 1 + 76 50 67 1 + 76 50 68 1 + 76 50 69 1 + 76 50 70 1 + 76 50 71 1 + 76 50 72 1 + 76 50 73 1 + 76 50 74 1 + 76 50 75 1 + 76 50 76 1 + 76 50 77 1 + 76 50 78 1 + 76 50 79 1 + 76 50 80 1 + 76 50 81 0.749071 + 76 50 82 0.0443033 + 76 51 44 0.00193335 + 76 51 45 0.51002 + 76 51 46 0.99797 + 76 51 47 1 + 76 51 48 1 + 76 51 49 1 + 76 51 50 1 + 76 51 51 1 + 76 51 52 1 + 76 51 53 1 + 76 51 54 1 + 76 51 55 1 + 76 51 56 1 + 76 51 57 1 + 76 51 58 1 + 76 51 59 1 + 76 51 60 1 + 76 51 61 1 + 76 51 62 1 + 76 51 63 1 + 76 51 64 1 + 76 51 65 1 + 76 51 66 1 + 76 51 67 1 + 76 51 68 1 + 76 51 69 1 + 76 51 70 1 + 76 51 71 1 + 76 51 72 1 + 76 51 73 1 + 76 51 74 1 + 76 51 75 1 + 76 51 76 1 + 76 51 77 1 + 76 51 78 1 + 76 51 79 1 + 76 51 80 1 + 76 51 81 0.99797 + 76 51 82 0.51002 + 76 51 83 0.00193335 + 76 52 44 0.194777 + 76 52 45 0.952748 + 76 52 46 1 + 76 52 47 1 + 76 52 48 1 + 76 52 49 1 + 76 52 50 1 + 76 52 51 1 + 76 52 52 1 + 76 52 53 1 + 76 52 54 1 + 76 52 55 1 + 76 52 56 1 + 76 52 57 1 + 76 52 58 1 + 76 52 59 1 + 76 52 60 1 + 76 52 61 1 + 76 52 62 1 + 76 52 63 1 + 76 52 64 1 + 76 52 65 1 + 76 52 66 1 + 76 52 67 1 + 76 52 68 1 + 76 52 69 1 + 76 52 70 1 + 76 52 71 1 + 76 52 72 1 + 76 52 73 1 + 76 52 74 1 + 76 52 75 1 + 76 52 76 1 + 76 52 77 1 + 76 52 78 1 + 76 52 79 1 + 76 52 80 1 + 76 52 81 1 + 76 52 82 0.952748 + 76 52 83 0.194777 + 76 53 43 0.0123857 + 76 53 44 0.701471 + 76 53 45 1 + 76 53 46 1 + 76 53 47 1 + 76 53 48 1 + 76 53 49 1 + 76 53 50 1 + 76 53 51 1 + 76 53 52 1 + 76 53 53 1 + 76 53 54 1 + 76 53 55 1 + 76 53 56 1 + 76 53 57 1 + 76 53 58 1 + 76 53 59 1 + 76 53 60 1 + 76 53 61 1 + 76 53 62 1 + 76 53 63 1 + 76 53 64 1 + 76 53 65 1 + 76 53 66 1 + 76 53 67 1 + 76 53 68 1 + 76 53 69 1 + 76 53 70 1 + 76 53 71 1 + 76 53 72 1 + 76 53 73 1 + 76 53 74 1 + 76 53 75 1 + 76 53 76 1 + 76 53 77 1 + 76 53 78 1 + 76 53 79 1 + 76 53 80 1 + 76 53 81 1 + 76 53 82 1 + 76 53 83 0.701471 + 76 53 84 0.0123857 + 76 54 43 0.23592 + 76 54 44 0.979001 + 76 54 45 1 + 76 54 46 1 + 76 54 47 1 + 76 54 48 1 + 76 54 49 1 + 76 54 50 1 + 76 54 51 1 + 76 54 52 1 + 76 54 53 1 + 76 54 54 1 + 76 54 55 1 + 76 54 56 1 + 76 54 57 1 + 76 54 58 1 + 76 54 59 1 + 76 54 60 1 + 76 54 61 1 + 76 54 62 1 + 76 54 63 1 + 76 54 64 1 + 76 54 65 1 + 76 54 66 1 + 76 54 67 1 + 76 54 68 1 + 76 54 69 1 + 76 54 70 1 + 76 54 71 1 + 76 54 72 1 + 76 54 73 1 + 76 54 74 1 + 76 54 75 1 + 76 54 76 1 + 76 54 77 1 + 76 54 78 1 + 76 54 79 1 + 76 54 80 1 + 76 54 81 1 + 76 54 82 1 + 76 54 83 0.979001 + 76 54 84 0.23592 + 76 55 42 0.00260739 + 76 55 43 0.652868 + 76 55 44 1 + 76 55 45 1 + 76 55 46 1 + 76 55 47 1 + 76 55 48 1 + 76 55 49 1 + 76 55 50 1 + 76 55 51 1 + 76 55 52 1 + 76 55 53 1 + 76 55 54 1 + 76 55 55 1 + 76 55 56 1 + 76 55 57 1 + 76 55 58 1 + 76 55 59 1 + 76 55 60 1 + 76 55 61 1 + 76 55 62 1 + 76 55 63 1 + 76 55 64 1 + 76 55 65 1 + 76 55 66 1 + 76 55 67 1 + 76 55 68 1 + 76 55 69 1 + 76 55 70 1 + 76 55 71 1 + 76 55 72 1 + 76 55 73 1 + 76 55 74 1 + 76 55 75 1 + 76 55 76 1 + 76 55 77 1 + 76 55 78 1 + 76 55 79 1 + 76 55 80 1 + 76 55 81 1 + 76 55 82 1 + 76 55 83 1 + 76 55 84 0.652868 + 76 55 85 0.00260739 + 76 56 42 0.104302 + 76 56 43 0.935026 + 76 56 44 1 + 76 56 45 1 + 76 56 46 1 + 76 56 47 1 + 76 56 48 1 + 76 56 49 1 + 76 56 50 1 + 76 56 51 1 + 76 56 52 1 + 76 56 53 1 + 76 56 54 1 + 76 56 55 1 + 76 56 56 1 + 76 56 57 1 + 76 56 58 1 + 76 56 59 1 + 76 56 60 1 + 76 56 61 1 + 76 56 62 1 + 76 56 63 1 + 76 56 64 1 + 76 56 65 1 + 76 56 66 1 + 76 56 67 1 + 76 56 68 1 + 76 56 69 1 + 76 56 70 1 + 76 56 71 1 + 76 56 72 1 + 76 56 73 1 + 76 56 74 1 + 76 56 75 1 + 76 56 76 1 + 76 56 77 1 + 76 56 78 1 + 76 56 79 1 + 76 56 80 1 + 76 56 81 1 + 76 56 82 1 + 76 56 83 1 + 76 56 84 0.935026 + 76 56 85 0.104302 + 76 57 42 0.370069 + 76 57 43 0.999467 + 76 57 44 1 + 76 57 45 1 + 76 57 46 1 + 76 57 47 1 + 76 57 48 1 + 76 57 49 1 + 76 57 50 1 + 76 57 51 1 + 76 57 52 1 + 76 57 53 1 + 76 57 54 1 + 76 57 55 1 + 76 57 56 1 + 76 57 57 1 + 76 57 58 1 + 76 57 59 1 + 76 57 60 1 + 76 57 61 1 + 76 57 62 1 + 76 57 63 1 + 76 57 64 1 + 76 57 65 1 + 76 57 66 1 + 76 57 67 1 + 76 57 68 1 + 76 57 69 1 + 76 57 70 1 + 76 57 71 1 + 76 57 72 1 + 76 57 73 1 + 76 57 74 1 + 76 57 75 1 + 76 57 76 1 + 76 57 77 1 + 76 57 78 1 + 76 57 79 1 + 76 57 80 1 + 76 57 81 1 + 76 57 82 1 + 76 57 83 1 + 76 57 84 0.999467 + 76 57 85 0.370069 + 76 58 41 0.000204528 + 76 58 42 0.648356 + 76 58 43 1 + 76 58 44 1 + 76 58 45 1 + 76 58 46 1 + 76 58 47 1 + 76 58 48 1 + 76 58 49 1 + 76 58 50 1 + 76 58 51 1 + 76 58 52 1 + 76 58 53 1 + 76 58 54 1 + 76 58 55 1 + 76 58 56 1 + 76 58 57 1 + 76 58 58 1 + 76 58 59 1 + 76 58 60 1 + 76 58 61 1 + 76 58 62 1 + 76 58 63 1 + 76 58 64 1 + 76 58 65 1 + 76 58 66 1 + 76 58 67 1 + 76 58 68 1 + 76 58 69 1 + 76 58 70 1 + 76 58 71 1 + 76 58 72 1 + 76 58 73 1 + 76 58 74 1 + 76 58 75 1 + 76 58 76 1 + 76 58 77 1 + 76 58 78 1 + 76 58 79 1 + 76 58 80 1 + 76 58 81 1 + 76 58 82 1 + 76 58 83 1 + 76 58 84 1 + 76 58 85 0.648356 + 76 58 86 0.000204528 + 76 59 41 0.0262369 + 76 59 42 0.852122 + 76 59 43 1 + 76 59 44 1 + 76 59 45 1 + 76 59 46 1 + 76 59 47 1 + 76 59 48 1 + 76 59 49 1 + 76 59 50 1 + 76 59 51 1 + 76 59 52 1 + 76 59 53 1 + 76 59 54 1 + 76 59 55 1 + 76 59 56 1 + 76 59 57 1 + 76 59 58 1 + 76 59 59 1 + 76 59 60 1 + 76 59 61 1 + 76 59 62 1 + 76 59 63 1 + 76 59 64 1 + 76 59 65 1 + 76 59 66 1 + 76 59 67 1 + 76 59 68 1 + 76 59 69 1 + 76 59 70 1 + 76 59 71 1 + 76 59 72 1 + 76 59 73 1 + 76 59 74 1 + 76 59 75 1 + 76 59 76 1 + 76 59 77 1 + 76 59 78 1 + 76 59 79 1 + 76 59 80 1 + 76 59 81 1 + 76 59 82 1 + 76 59 83 1 + 76 59 84 1 + 76 59 85 0.852122 + 76 59 86 0.0262369 + 76 60 41 0.106397 + 76 60 42 0.954076 + 76 60 43 1 + 76 60 44 1 + 76 60 45 1 + 76 60 46 1 + 76 60 47 1 + 76 60 48 1 + 76 60 49 1 + 76 60 50 1 + 76 60 51 1 + 76 60 52 1 + 76 60 53 1 + 76 60 54 1 + 76 60 55 1 + 76 60 56 1 + 76 60 57 1 + 76 60 58 1 + 76 60 59 1 + 76 60 60 1 + 76 60 61 1 + 76 60 62 1 + 76 60 63 1 + 76 60 64 1 + 76 60 65 1 + 76 60 66 1 + 76 60 67 1 + 76 60 68 1 + 76 60 69 1 + 76 60 70 1 + 76 60 71 1 + 76 60 72 1 + 76 60 73 1 + 76 60 74 1 + 76 60 75 1 + 76 60 76 1 + 76 60 77 1 + 76 60 78 1 + 76 60 79 1 + 76 60 80 1 + 76 60 81 1 + 76 60 82 1 + 76 60 83 1 + 76 60 84 1 + 76 60 85 0.954076 + 76 60 86 0.106397 + 76 61 41 0.203942 + 76 61 42 0.992135 + 76 61 43 1 + 76 61 44 1 + 76 61 45 1 + 76 61 46 1 + 76 61 47 1 + 76 61 48 1 + 76 61 49 1 + 76 61 50 1 + 76 61 51 1 + 76 61 52 1 + 76 61 53 1 + 76 61 54 1 + 76 61 55 1 + 76 61 56 1 + 76 61 57 1 + 76 61 58 1 + 76 61 59 1 + 76 61 60 1 + 76 61 61 1 + 76 61 62 1 + 76 61 63 1 + 76 61 64 1 + 76 61 65 1 + 76 61 66 1 + 76 61 67 1 + 76 61 68 1 + 76 61 69 1 + 76 61 70 1 + 76 61 71 1 + 76 61 72 1 + 76 61 73 1 + 76 61 74 1 + 76 61 75 1 + 76 61 76 1 + 76 61 77 1 + 76 61 78 1 + 76 61 79 1 + 76 61 80 1 + 76 61 81 1 + 76 61 82 1 + 76 61 83 1 + 76 61 84 1 + 76 61 85 0.992135 + 76 61 86 0.203942 + 76 62 41 0.286191 + 76 62 42 0.99983 + 76 62 43 1 + 76 62 44 1 + 76 62 45 1 + 76 62 46 1 + 76 62 47 1 + 76 62 48 1 + 76 62 49 1 + 76 62 50 1 + 76 62 51 1 + 76 62 52 1 + 76 62 53 1 + 76 62 54 1 + 76 62 55 1 + 76 62 56 1 + 76 62 57 1 + 76 62 58 1 + 76 62 59 1 + 76 62 60 1 + 76 62 61 1 + 76 62 62 1 + 76 62 63 1 + 76 62 64 1 + 76 62 65 1 + 76 62 66 1 + 76 62 67 1 + 76 62 68 1 + 76 62 69 1 + 76 62 70 1 + 76 62 71 1 + 76 62 72 1 + 76 62 73 1 + 76 62 74 1 + 76 62 75 1 + 76 62 76 1 + 76 62 77 1 + 76 62 78 1 + 76 62 79 1 + 76 62 80 1 + 76 62 81 1 + 76 62 82 1 + 76 62 83 1 + 76 62 84 1 + 76 62 85 0.99983 + 76 62 86 0.286191 + 76 63 41 0.330857 + 76 63 42 1 + 76 63 43 1 + 76 63 44 1 + 76 63 45 1 + 76 63 46 1 + 76 63 47 1 + 76 63 48 1 + 76 63 49 1 + 76 63 50 1 + 76 63 51 1 + 76 63 52 1 + 76 63 53 1 + 76 63 54 1 + 76 63 55 1 + 76 63 56 1 + 76 63 57 1 + 76 63 58 1 + 76 63 59 1 + 76 63 60 1 + 76 63 61 1 + 76 63 62 1 + 76 63 63 1 + 76 63 64 1 + 76 63 65 1 + 76 63 66 1 + 76 63 67 1 + 76 63 68 1 + 76 63 69 1 + 76 63 70 1 + 76 63 71 1 + 76 63 72 1 + 76 63 73 1 + 76 63 74 1 + 76 63 75 1 + 76 63 76 1 + 76 63 77 1 + 76 63 78 1 + 76 63 79 1 + 76 63 80 1 + 76 63 81 1 + 76 63 82 1 + 76 63 83 1 + 76 63 84 1 + 76 63 85 1 + 76 63 86 0.330857 + 76 64 41 0.330857 + 76 64 42 1 + 76 64 43 1 + 76 64 44 1 + 76 64 45 1 + 76 64 46 1 + 76 64 47 1 + 76 64 48 1 + 76 64 49 1 + 76 64 50 1 + 76 64 51 1 + 76 64 52 1 + 76 64 53 1 + 76 64 54 1 + 76 64 55 1 + 76 64 56 1 + 76 64 57 1 + 76 64 58 1 + 76 64 59 1 + 76 64 60 1 + 76 64 61 1 + 76 64 62 1 + 76 64 63 1 + 76 64 64 1 + 76 64 65 1 + 76 64 66 1 + 76 64 67 1 + 76 64 68 1 + 76 64 69 1 + 76 64 70 1 + 76 64 71 1 + 76 64 72 1 + 76 64 73 1 + 76 64 74 1 + 76 64 75 1 + 76 64 76 1 + 76 64 77 1 + 76 64 78 1 + 76 64 79 1 + 76 64 80 1 + 76 64 81 1 + 76 64 82 1 + 76 64 83 1 + 76 64 84 1 + 76 64 85 1 + 76 64 86 0.330857 + 76 65 41 0.286191 + 76 65 42 0.99983 + 76 65 43 1 + 76 65 44 1 + 76 65 45 1 + 76 65 46 1 + 76 65 47 1 + 76 65 48 1 + 76 65 49 1 + 76 65 50 1 + 76 65 51 1 + 76 65 52 1 + 76 65 53 1 + 76 65 54 1 + 76 65 55 1 + 76 65 56 1 + 76 65 57 1 + 76 65 58 1 + 76 65 59 1 + 76 65 60 1 + 76 65 61 1 + 76 65 62 1 + 76 65 63 1 + 76 65 64 1 + 76 65 65 1 + 76 65 66 1 + 76 65 67 1 + 76 65 68 1 + 76 65 69 1 + 76 65 70 1 + 76 65 71 1 + 76 65 72 1 + 76 65 73 1 + 76 65 74 1 + 76 65 75 1 + 76 65 76 1 + 76 65 77 1 + 76 65 78 1 + 76 65 79 1 + 76 65 80 1 + 76 65 81 1 + 76 65 82 1 + 76 65 83 1 + 76 65 84 1 + 76 65 85 0.99983 + 76 65 86 0.286191 + 76 66 41 0.203942 + 76 66 42 0.992135 + 76 66 43 1 + 76 66 44 1 + 76 66 45 1 + 76 66 46 1 + 76 66 47 1 + 76 66 48 1 + 76 66 49 1 + 76 66 50 1 + 76 66 51 1 + 76 66 52 1 + 76 66 53 1 + 76 66 54 1 + 76 66 55 1 + 76 66 56 1 + 76 66 57 1 + 76 66 58 1 + 76 66 59 1 + 76 66 60 1 + 76 66 61 1 + 76 66 62 1 + 76 66 63 1 + 76 66 64 1 + 76 66 65 1 + 76 66 66 1 + 76 66 67 1 + 76 66 68 1 + 76 66 69 1 + 76 66 70 1 + 76 66 71 1 + 76 66 72 1 + 76 66 73 1 + 76 66 74 1 + 76 66 75 1 + 76 66 76 1 + 76 66 77 1 + 76 66 78 1 + 76 66 79 1 + 76 66 80 1 + 76 66 81 1 + 76 66 82 1 + 76 66 83 1 + 76 66 84 1 + 76 66 85 0.992135 + 76 66 86 0.203942 + 76 67 41 0.106397 + 76 67 42 0.954076 + 76 67 43 1 + 76 67 44 1 + 76 67 45 1 + 76 67 46 1 + 76 67 47 1 + 76 67 48 1 + 76 67 49 1 + 76 67 50 1 + 76 67 51 1 + 76 67 52 1 + 76 67 53 1 + 76 67 54 1 + 76 67 55 1 + 76 67 56 1 + 76 67 57 1 + 76 67 58 1 + 76 67 59 1 + 76 67 60 1 + 76 67 61 1 + 76 67 62 1 + 76 67 63 1 + 76 67 64 1 + 76 67 65 1 + 76 67 66 1 + 76 67 67 1 + 76 67 68 1 + 76 67 69 1 + 76 67 70 1 + 76 67 71 1 + 76 67 72 1 + 76 67 73 1 + 76 67 74 1 + 76 67 75 1 + 76 67 76 1 + 76 67 77 1 + 76 67 78 1 + 76 67 79 1 + 76 67 80 1 + 76 67 81 1 + 76 67 82 1 + 76 67 83 1 + 76 67 84 1 + 76 67 85 0.954076 + 76 67 86 0.106397 + 76 68 41 0.0262369 + 76 68 42 0.852122 + 76 68 43 1 + 76 68 44 1 + 76 68 45 1 + 76 68 46 1 + 76 68 47 1 + 76 68 48 1 + 76 68 49 1 + 76 68 50 1 + 76 68 51 1 + 76 68 52 1 + 76 68 53 1 + 76 68 54 1 + 76 68 55 1 + 76 68 56 1 + 76 68 57 1 + 76 68 58 1 + 76 68 59 1 + 76 68 60 1 + 76 68 61 1 + 76 68 62 1 + 76 68 63 1 + 76 68 64 1 + 76 68 65 1 + 76 68 66 1 + 76 68 67 1 + 76 68 68 1 + 76 68 69 1 + 76 68 70 1 + 76 68 71 1 + 76 68 72 1 + 76 68 73 1 + 76 68 74 1 + 76 68 75 1 + 76 68 76 1 + 76 68 77 1 + 76 68 78 1 + 76 68 79 1 + 76 68 80 1 + 76 68 81 1 + 76 68 82 1 + 76 68 83 1 + 76 68 84 1 + 76 68 85 0.852122 + 76 68 86 0.0262369 + 76 69 41 0.000204528 + 76 69 42 0.648356 + 76 69 43 1 + 76 69 44 1 + 76 69 45 1 + 76 69 46 1 + 76 69 47 1 + 76 69 48 1 + 76 69 49 1 + 76 69 50 1 + 76 69 51 1 + 76 69 52 1 + 76 69 53 1 + 76 69 54 1 + 76 69 55 1 + 76 69 56 1 + 76 69 57 1 + 76 69 58 1 + 76 69 59 1 + 76 69 60 1 + 76 69 61 1 + 76 69 62 1 + 76 69 63 1 + 76 69 64 1 + 76 69 65 1 + 76 69 66 1 + 76 69 67 1 + 76 69 68 1 + 76 69 69 1 + 76 69 70 1 + 76 69 71 1 + 76 69 72 1 + 76 69 73 1 + 76 69 74 1 + 76 69 75 1 + 76 69 76 1 + 76 69 77 1 + 76 69 78 1 + 76 69 79 1 + 76 69 80 1 + 76 69 81 1 + 76 69 82 1 + 76 69 83 1 + 76 69 84 1 + 76 69 85 0.648356 + 76 69 86 0.000204528 + 76 70 42 0.370069 + 76 70 43 0.999467 + 76 70 44 1 + 76 70 45 1 + 76 70 46 1 + 76 70 47 1 + 76 70 48 1 + 76 70 49 1 + 76 70 50 1 + 76 70 51 1 + 76 70 52 1 + 76 70 53 1 + 76 70 54 1 + 76 70 55 1 + 76 70 56 1 + 76 70 57 1 + 76 70 58 1 + 76 70 59 1 + 76 70 60 1 + 76 70 61 1 + 76 70 62 1 + 76 70 63 1 + 76 70 64 1 + 76 70 65 1 + 76 70 66 1 + 76 70 67 1 + 76 70 68 1 + 76 70 69 1 + 76 70 70 1 + 76 70 71 1 + 76 70 72 1 + 76 70 73 1 + 76 70 74 1 + 76 70 75 1 + 76 70 76 1 + 76 70 77 1 + 76 70 78 1 + 76 70 79 1 + 76 70 80 1 + 76 70 81 1 + 76 70 82 1 + 76 70 83 1 + 76 70 84 0.999467 + 76 70 85 0.370069 + 76 71 42 0.104302 + 76 71 43 0.935026 + 76 71 44 1 + 76 71 45 1 + 76 71 46 1 + 76 71 47 1 + 76 71 48 1 + 76 71 49 1 + 76 71 50 1 + 76 71 51 1 + 76 71 52 1 + 76 71 53 1 + 76 71 54 1 + 76 71 55 1 + 76 71 56 1 + 76 71 57 1 + 76 71 58 1 + 76 71 59 1 + 76 71 60 1 + 76 71 61 1 + 76 71 62 1 + 76 71 63 1 + 76 71 64 1 + 76 71 65 1 + 76 71 66 1 + 76 71 67 1 + 76 71 68 1 + 76 71 69 1 + 76 71 70 1 + 76 71 71 1 + 76 71 72 1 + 76 71 73 1 + 76 71 74 1 + 76 71 75 1 + 76 71 76 1 + 76 71 77 1 + 76 71 78 1 + 76 71 79 1 + 76 71 80 1 + 76 71 81 1 + 76 71 82 1 + 76 71 83 1 + 76 71 84 0.935026 + 76 71 85 0.104302 + 76 72 42 0.00260739 + 76 72 43 0.652868 + 76 72 44 1 + 76 72 45 1 + 76 72 46 1 + 76 72 47 1 + 76 72 48 1 + 76 72 49 1 + 76 72 50 1 + 76 72 51 1 + 76 72 52 1 + 76 72 53 1 + 76 72 54 1 + 76 72 55 1 + 76 72 56 1 + 76 72 57 1 + 76 72 58 1 + 76 72 59 1 + 76 72 60 1 + 76 72 61 1 + 76 72 62 1 + 76 72 63 1 + 76 72 64 1 + 76 72 65 1 + 76 72 66 1 + 76 72 67 1 + 76 72 68 1 + 76 72 69 1 + 76 72 70 1 + 76 72 71 1 + 76 72 72 1 + 76 72 73 1 + 76 72 74 1 + 76 72 75 1 + 76 72 76 1 + 76 72 77 1 + 76 72 78 1 + 76 72 79 1 + 76 72 80 1 + 76 72 81 1 + 76 72 82 1 + 76 72 83 1 + 76 72 84 0.652868 + 76 72 85 0.00260739 + 76 73 43 0.23592 + 76 73 44 0.979001 + 76 73 45 1 + 76 73 46 1 + 76 73 47 1 + 76 73 48 1 + 76 73 49 1 + 76 73 50 1 + 76 73 51 1 + 76 73 52 1 + 76 73 53 1 + 76 73 54 1 + 76 73 55 1 + 76 73 56 1 + 76 73 57 1 + 76 73 58 1 + 76 73 59 1 + 76 73 60 1 + 76 73 61 1 + 76 73 62 1 + 76 73 63 1 + 76 73 64 1 + 76 73 65 1 + 76 73 66 1 + 76 73 67 1 + 76 73 68 1 + 76 73 69 1 + 76 73 70 1 + 76 73 71 1 + 76 73 72 1 + 76 73 73 1 + 76 73 74 1 + 76 73 75 1 + 76 73 76 1 + 76 73 77 1 + 76 73 78 1 + 76 73 79 1 + 76 73 80 1 + 76 73 81 1 + 76 73 82 1 + 76 73 83 0.979001 + 76 73 84 0.23592 + 76 74 43 0.0123857 + 76 74 44 0.701471 + 76 74 45 1 + 76 74 46 1 + 76 74 47 1 + 76 74 48 1 + 76 74 49 1 + 76 74 50 1 + 76 74 51 1 + 76 74 52 1 + 76 74 53 1 + 76 74 54 1 + 76 74 55 1 + 76 74 56 1 + 76 74 57 1 + 76 74 58 1 + 76 74 59 1 + 76 74 60 1 + 76 74 61 1 + 76 74 62 1 + 76 74 63 1 + 76 74 64 1 + 76 74 65 1 + 76 74 66 1 + 76 74 67 1 + 76 74 68 1 + 76 74 69 1 + 76 74 70 1 + 76 74 71 1 + 76 74 72 1 + 76 74 73 1 + 76 74 74 1 + 76 74 75 1 + 76 74 76 1 + 76 74 77 1 + 76 74 78 1 + 76 74 79 1 + 76 74 80 1 + 76 74 81 1 + 76 74 82 1 + 76 74 83 0.701471 + 76 74 84 0.0123857 + 76 75 44 0.194777 + 76 75 45 0.952748 + 76 75 46 1 + 76 75 47 1 + 76 75 48 1 + 76 75 49 1 + 76 75 50 1 + 76 75 51 1 + 76 75 52 1 + 76 75 53 1 + 76 75 54 1 + 76 75 55 1 + 76 75 56 1 + 76 75 57 1 + 76 75 58 1 + 76 75 59 1 + 76 75 60 1 + 76 75 61 1 + 76 75 62 1 + 76 75 63 1 + 76 75 64 1 + 76 75 65 1 + 76 75 66 1 + 76 75 67 1 + 76 75 68 1 + 76 75 69 1 + 76 75 70 1 + 76 75 71 1 + 76 75 72 1 + 76 75 73 1 + 76 75 74 1 + 76 75 75 1 + 76 75 76 1 + 76 75 77 1 + 76 75 78 1 + 76 75 79 1 + 76 75 80 1 + 76 75 81 1 + 76 75 82 0.952748 + 76 75 83 0.194777 + 76 76 44 0.00193335 + 76 76 45 0.51002 + 76 76 46 0.99797 + 76 76 47 1 + 76 76 48 1 + 76 76 49 1 + 76 76 50 1 + 76 76 51 1 + 76 76 52 1 + 76 76 53 1 + 76 76 54 1 + 76 76 55 1 + 76 76 56 1 + 76 76 57 1 + 76 76 58 1 + 76 76 59 1 + 76 76 60 1 + 76 76 61 1 + 76 76 62 1 + 76 76 63 1 + 76 76 64 1 + 76 76 65 1 + 76 76 66 1 + 76 76 67 1 + 76 76 68 1 + 76 76 69 1 + 76 76 70 1 + 76 76 71 1 + 76 76 72 1 + 76 76 73 1 + 76 76 74 1 + 76 76 75 1 + 76 76 76 1 + 76 76 77 1 + 76 76 78 1 + 76 76 79 1 + 76 76 80 1 + 76 76 81 0.99797 + 76 76 82 0.51002 + 76 76 83 0.00193335 + 76 77 45 0.0443033 + 76 77 46 0.749071 + 76 77 47 1 + 76 77 48 1 + 76 77 49 1 + 76 77 50 1 + 76 77 51 1 + 76 77 52 1 + 76 77 53 1 + 76 77 54 1 + 76 77 55 1 + 76 77 56 1 + 76 77 57 1 + 76 77 58 1 + 76 77 59 1 + 76 77 60 1 + 76 77 61 1 + 76 77 62 1 + 76 77 63 1 + 76 77 64 1 + 76 77 65 1 + 76 77 66 1 + 76 77 67 1 + 76 77 68 1 + 76 77 69 1 + 76 77 70 1 + 76 77 71 1 + 76 77 72 1 + 76 77 73 1 + 76 77 74 1 + 76 77 75 1 + 76 77 76 1 + 76 77 77 1 + 76 77 78 1 + 76 77 79 1 + 76 77 80 1 + 76 77 81 0.749071 + 76 77 82 0.0443033 + 76 78 46 0.127131 + 76 78 47 0.860729 + 76 78 48 1 + 76 78 49 1 + 76 78 50 1 + 76 78 51 1 + 76 78 52 1 + 76 78 53 1 + 76 78 54 1 + 76 78 55 1 + 76 78 56 1 + 76 78 57 1 + 76 78 58 1 + 76 78 59 1 + 76 78 60 1 + 76 78 61 1 + 76 78 62 1 + 76 78 63 1 + 76 78 64 1 + 76 78 65 1 + 76 78 66 1 + 76 78 67 1 + 76 78 68 1 + 76 78 69 1 + 76 78 70 1 + 76 78 71 1 + 76 78 72 1 + 76 78 73 1 + 76 78 74 1 + 76 78 75 1 + 76 78 76 1 + 76 78 77 1 + 76 78 78 1 + 76 78 79 1 + 76 78 80 0.860729 + 76 78 81 0.127131 + 76 79 47 0.190365 + 76 79 48 0.889603 + 76 79 49 1 + 76 79 50 1 + 76 79 51 1 + 76 79 52 1 + 76 79 53 1 + 76 79 54 1 + 76 79 55 1 + 76 79 56 1 + 76 79 57 1 + 76 79 58 1 + 76 79 59 1 + 76 79 60 1 + 76 79 61 1 + 76 79 62 1 + 76 79 63 1 + 76 79 64 1 + 76 79 65 1 + 76 79 66 1 + 76 79 67 1 + 76 79 68 1 + 76 79 69 1 + 76 79 70 1 + 76 79 71 1 + 76 79 72 1 + 76 79 73 1 + 76 79 74 1 + 76 79 75 1 + 76 79 76 1 + 76 79 77 1 + 76 79 78 1 + 76 79 79 0.889603 + 76 79 80 0.190365 + 76 80 48 0.190365 + 76 80 49 0.860729 + 76 80 50 1 + 76 80 51 1 + 76 80 52 1 + 76 80 53 1 + 76 80 54 1 + 76 80 55 1 + 76 80 56 1 + 76 80 57 1 + 76 80 58 1 + 76 80 59 1 + 76 80 60 1 + 76 80 61 1 + 76 80 62 1 + 76 80 63 1 + 76 80 64 1 + 76 80 65 1 + 76 80 66 1 + 76 80 67 1 + 76 80 68 1 + 76 80 69 1 + 76 80 70 1 + 76 80 71 1 + 76 80 72 1 + 76 80 73 1 + 76 80 74 1 + 76 80 75 1 + 76 80 76 1 + 76 80 77 1 + 76 80 78 0.860729 + 76 80 79 0.190365 + 76 81 49 0.127131 + 76 81 50 0.749071 + 76 81 51 0.99797 + 76 81 52 1 + 76 81 53 1 + 76 81 54 1 + 76 81 55 1 + 76 81 56 1 + 76 81 57 1 + 76 81 58 1 + 76 81 59 1 + 76 81 60 1 + 76 81 61 1 + 76 81 62 1 + 76 81 63 1 + 76 81 64 1 + 76 81 65 1 + 76 81 66 1 + 76 81 67 1 + 76 81 68 1 + 76 81 69 1 + 76 81 70 1 + 76 81 71 1 + 76 81 72 1 + 76 81 73 1 + 76 81 74 1 + 76 81 75 1 + 76 81 76 0.99797 + 76 81 77 0.749071 + 76 81 78 0.127131 + 76 82 50 0.0443033 + 76 82 51 0.51002 + 76 82 52 0.952748 + 76 82 53 1 + 76 82 54 1 + 76 82 55 1 + 76 82 56 1 + 76 82 57 1 + 76 82 58 1 + 76 82 59 1 + 76 82 60 1 + 76 82 61 1 + 76 82 62 1 + 76 82 63 1 + 76 82 64 1 + 76 82 65 1 + 76 82 66 1 + 76 82 67 1 + 76 82 68 1 + 76 82 69 1 + 76 82 70 1 + 76 82 71 1 + 76 82 72 1 + 76 82 73 1 + 76 82 74 1 + 76 82 75 0.952748 + 76 82 76 0.51002 + 76 82 77 0.0443033 + 76 83 51 0.00193335 + 76 83 52 0.194777 + 76 83 53 0.701471 + 76 83 54 0.979001 + 76 83 55 1 + 76 83 56 1 + 76 83 57 1 + 76 83 58 1 + 76 83 59 1 + 76 83 60 1 + 76 83 61 1 + 76 83 62 1 + 76 83 63 1 + 76 83 64 1 + 76 83 65 1 + 76 83 66 1 + 76 83 67 1 + 76 83 68 1 + 76 83 69 1 + 76 83 70 1 + 76 83 71 1 + 76 83 72 1 + 76 83 73 0.979001 + 76 83 74 0.701471 + 76 83 75 0.194777 + 76 83 76 0.00193335 + 76 84 53 0.0123857 + 76 84 54 0.23592 + 76 84 55 0.652868 + 76 84 56 0.935026 + 76 84 57 0.999467 + 76 84 58 1 + 76 84 59 1 + 76 84 60 1 + 76 84 61 1 + 76 84 62 1 + 76 84 63 1 + 76 84 64 1 + 76 84 65 1 + 76 84 66 1 + 76 84 67 1 + 76 84 68 1 + 76 84 69 1 + 76 84 70 0.999467 + 76 84 71 0.935026 + 76 84 72 0.652868 + 76 84 73 0.23592 + 76 84 74 0.0123857 + 76 85 55 0.00260739 + 76 85 56 0.104302 + 76 85 57 0.370069 + 76 85 58 0.648356 + 76 85 59 0.852122 + 76 85 60 0.954076 + 76 85 61 0.992135 + 76 85 62 0.99983 + 76 85 63 1 + 76 85 64 1 + 76 85 65 0.99983 + 76 85 66 0.992135 + 76 85 67 0.954076 + 76 85 68 0.852122 + 76 85 69 0.648356 + 76 85 70 0.370069 + 76 85 71 0.104302 + 76 85 72 0.00260739 + 76 86 58 0.000204528 + 76 86 59 0.0262369 + 76 86 60 0.106397 + 76 86 61 0.203942 + 76 86 62 0.286191 + 76 86 63 0.330857 + 76 86 64 0.330857 + 76 86 65 0.286191 + 76 86 66 0.203942 + 76 86 67 0.106397 + 76 86 68 0.0262369 + 76 86 69 0.000204528 + 77 41 62 0.000160193 + 77 41 63 0.00182891 + 77 41 64 0.00182891 + 77 41 65 0.000160193 + 77 42 57 0.0100187 + 77 42 58 0.105685 + 77 42 59 0.28004 + 77 42 60 0.462948 + 77 42 61 0.602307 + 77 42 62 0.694555 + 77 42 63 0.738943 + 77 42 64 0.738943 + 77 42 65 0.694555 + 77 42 66 0.602307 + 77 42 67 0.462948 + 77 42 68 0.28004 + 77 42 69 0.105685 + 77 42 70 0.0100187 + 77 43 54 0.00135226 + 77 43 55 0.103719 + 77 43 56 0.41284 + 77 43 57 0.742086 + 77 43 58 0.933643 + 77 43 59 0.995674 + 77 43 60 1 + 77 43 61 1 + 77 43 62 1 + 77 43 63 1 + 77 43 64 1 + 77 43 65 1 + 77 43 66 1 + 77 43 67 1 + 77 43 68 0.995674 + 77 43 69 0.933643 + 77 43 70 0.742086 + 77 43 71 0.41284 + 77 43 72 0.103719 + 77 43 73 0.00135226 + 77 44 52 0.00062971 + 77 44 53 0.129326 + 77 44 54 0.559714 + 77 44 55 0.912283 + 77 44 56 0.999058 + 77 44 57 1 + 77 44 58 1 + 77 44 59 1 + 77 44 60 1 + 77 44 61 1 + 77 44 62 1 + 77 44 63 1 + 77 44 64 1 + 77 44 65 1 + 77 44 66 1 + 77 44 67 1 + 77 44 68 1 + 77 44 69 1 + 77 44 70 1 + 77 44 71 0.999058 + 77 44 72 0.912283 + 77 44 73 0.559714 + 77 44 74 0.129326 + 77 44 75 0.00062971 + 77 45 51 0.0443033 + 77 45 52 0.459682 + 77 45 53 0.913417 + 77 45 54 0.999965 + 77 45 55 1 + 77 45 56 1 + 77 45 57 1 + 77 45 58 1 + 77 45 59 1 + 77 45 60 1 + 77 45 61 1 + 77 45 62 1 + 77 45 63 1 + 77 45 64 1 + 77 45 65 1 + 77 45 66 1 + 77 45 67 1 + 77 45 68 1 + 77 45 69 1 + 77 45 70 1 + 77 45 71 1 + 77 45 72 1 + 77 45 73 0.999965 + 77 45 74 0.913417 + 77 45 75 0.459682 + 77 45 76 0.0443033 + 77 46 49 1.68961e-05 + 77 46 50 0.156902 + 77 46 51 0.749071 + 77 46 52 0.995483 + 77 46 53 1 + 77 46 54 1 + 77 46 55 1 + 77 46 56 1 + 77 46 57 1 + 77 46 58 1 + 77 46 59 1 + 77 46 60 1 + 77 46 61 1 + 77 46 62 1 + 77 46 63 1 + 77 46 64 1 + 77 46 65 1 + 77 46 66 1 + 77 46 67 1 + 77 46 68 1 + 77 46 69 1 + 77 46 70 1 + 77 46 71 1 + 77 46 72 1 + 77 46 73 1 + 77 46 74 1 + 77 46 75 0.995483 + 77 46 76 0.749071 + 77 46 77 0.156902 + 77 46 78 1.68961e-05 + 77 47 48 0.00101852 + 77 47 49 0.269165 + 77 47 50 0.88976 + 77 47 51 1 + 77 47 52 1 + 77 47 53 1 + 77 47 54 1 + 77 47 55 1 + 77 47 56 1 + 77 47 57 1 + 77 47 58 1 + 77 47 59 1 + 77 47 60 1 + 77 47 61 1 + 77 47 62 1 + 77 47 63 1 + 77 47 64 1 + 77 47 65 1 + 77 47 66 1 + 77 47 67 1 + 77 47 68 1 + 77 47 69 1 + 77 47 70 1 + 77 47 71 1 + 77 47 72 1 + 77 47 73 1 + 77 47 74 1 + 77 47 75 1 + 77 47 76 1 + 77 47 77 0.88976 + 77 47 78 0.269165 + 77 47 79 0.00101852 + 77 48 47 0.00101852 + 77 48 48 0.313512 + 77 48 49 0.934786 + 77 48 50 1 + 77 48 51 1 + 77 48 52 1 + 77 48 53 1 + 77 48 54 1 + 77 48 55 1 + 77 48 56 1 + 77 48 57 1 + 77 48 58 1 + 77 48 59 1 + 77 48 60 1 + 77 48 61 1 + 77 48 62 1 + 77 48 63 1 + 77 48 64 1 + 77 48 65 1 + 77 48 66 1 + 77 48 67 1 + 77 48 68 1 + 77 48 69 1 + 77 48 70 1 + 77 48 71 1 + 77 48 72 1 + 77 48 73 1 + 77 48 74 1 + 77 48 75 1 + 77 48 76 1 + 77 48 77 1 + 77 48 78 0.934786 + 77 48 79 0.313512 + 77 48 80 0.00101852 + 77 49 46 1.68961e-05 + 77 49 47 0.269165 + 77 49 48 0.934786 + 77 49 49 1 + 77 49 50 1 + 77 49 51 1 + 77 49 52 1 + 77 49 53 1 + 77 49 54 1 + 77 49 55 1 + 77 49 56 1 + 77 49 57 1 + 77 49 58 1 + 77 49 59 1 + 77 49 60 1 + 77 49 61 1 + 77 49 62 1 + 77 49 63 1 + 77 49 64 1 + 77 49 65 1 + 77 49 66 1 + 77 49 67 1 + 77 49 68 1 + 77 49 69 1 + 77 49 70 1 + 77 49 71 1 + 77 49 72 1 + 77 49 73 1 + 77 49 74 1 + 77 49 75 1 + 77 49 76 1 + 77 49 77 1 + 77 49 78 1 + 77 49 79 0.934786 + 77 49 80 0.269165 + 77 49 81 1.68961e-05 + 77 50 46 0.156902 + 77 50 47 0.88976 + 77 50 48 1 + 77 50 49 1 + 77 50 50 1 + 77 50 51 1 + 77 50 52 1 + 77 50 53 1 + 77 50 54 1 + 77 50 55 1 + 77 50 56 1 + 77 50 57 1 + 77 50 58 1 + 77 50 59 1 + 77 50 60 1 + 77 50 61 1 + 77 50 62 1 + 77 50 63 1 + 77 50 64 1 + 77 50 65 1 + 77 50 66 1 + 77 50 67 1 + 77 50 68 1 + 77 50 69 1 + 77 50 70 1 + 77 50 71 1 + 77 50 72 1 + 77 50 73 1 + 77 50 74 1 + 77 50 75 1 + 77 50 76 1 + 77 50 77 1 + 77 50 78 1 + 77 50 79 1 + 77 50 80 0.88976 + 77 50 81 0.156902 + 77 51 45 0.0443033 + 77 51 46 0.749071 + 77 51 47 1 + 77 51 48 1 + 77 51 49 1 + 77 51 50 1 + 77 51 51 1 + 77 51 52 1 + 77 51 53 1 + 77 51 54 1 + 77 51 55 1 + 77 51 56 1 + 77 51 57 1 + 77 51 58 1 + 77 51 59 1 + 77 51 60 1 + 77 51 61 1 + 77 51 62 1 + 77 51 63 1 + 77 51 64 1 + 77 51 65 1 + 77 51 66 1 + 77 51 67 1 + 77 51 68 1 + 77 51 69 1 + 77 51 70 1 + 77 51 71 1 + 77 51 72 1 + 77 51 73 1 + 77 51 74 1 + 77 51 75 1 + 77 51 76 1 + 77 51 77 1 + 77 51 78 1 + 77 51 79 1 + 77 51 80 1 + 77 51 81 0.749071 + 77 51 82 0.0443033 + 77 52 44 0.00062971 + 77 52 45 0.459682 + 77 52 46 0.995483 + 77 52 47 1 + 77 52 48 1 + 77 52 49 1 + 77 52 50 1 + 77 52 51 1 + 77 52 52 1 + 77 52 53 1 + 77 52 54 1 + 77 52 55 1 + 77 52 56 1 + 77 52 57 1 + 77 52 58 1 + 77 52 59 1 + 77 52 60 1 + 77 52 61 1 + 77 52 62 1 + 77 52 63 1 + 77 52 64 1 + 77 52 65 1 + 77 52 66 1 + 77 52 67 1 + 77 52 68 1 + 77 52 69 1 + 77 52 70 1 + 77 52 71 1 + 77 52 72 1 + 77 52 73 1 + 77 52 74 1 + 77 52 75 1 + 77 52 76 1 + 77 52 77 1 + 77 52 78 1 + 77 52 79 1 + 77 52 80 1 + 77 52 81 0.995483 + 77 52 82 0.459682 + 77 52 83 0.00062971 + 77 53 44 0.129326 + 77 53 45 0.913417 + 77 53 46 1 + 77 53 47 1 + 77 53 48 1 + 77 53 49 1 + 77 53 50 1 + 77 53 51 1 + 77 53 52 1 + 77 53 53 1 + 77 53 54 1 + 77 53 55 1 + 77 53 56 1 + 77 53 57 1 + 77 53 58 1 + 77 53 59 1 + 77 53 60 1 + 77 53 61 1 + 77 53 62 1 + 77 53 63 1 + 77 53 64 1 + 77 53 65 1 + 77 53 66 1 + 77 53 67 1 + 77 53 68 1 + 77 53 69 1 + 77 53 70 1 + 77 53 71 1 + 77 53 72 1 + 77 53 73 1 + 77 53 74 1 + 77 53 75 1 + 77 53 76 1 + 77 53 77 1 + 77 53 78 1 + 77 53 79 1 + 77 53 80 1 + 77 53 81 1 + 77 53 82 0.913417 + 77 53 83 0.129326 + 77 54 43 0.00135226 + 77 54 44 0.559714 + 77 54 45 0.999965 + 77 54 46 1 + 77 54 47 1 + 77 54 48 1 + 77 54 49 1 + 77 54 50 1 + 77 54 51 1 + 77 54 52 1 + 77 54 53 1 + 77 54 54 1 + 77 54 55 1 + 77 54 56 1 + 77 54 57 1 + 77 54 58 1 + 77 54 59 1 + 77 54 60 1 + 77 54 61 1 + 77 54 62 1 + 77 54 63 1 + 77 54 64 1 + 77 54 65 1 + 77 54 66 1 + 77 54 67 1 + 77 54 68 1 + 77 54 69 1 + 77 54 70 1 + 77 54 71 1 + 77 54 72 1 + 77 54 73 1 + 77 54 74 1 + 77 54 75 1 + 77 54 76 1 + 77 54 77 1 + 77 54 78 1 + 77 54 79 1 + 77 54 80 1 + 77 54 81 1 + 77 54 82 0.999965 + 77 54 83 0.559714 + 77 54 84 0.00135226 + 77 55 43 0.103719 + 77 55 44 0.912283 + 77 55 45 1 + 77 55 46 1 + 77 55 47 1 + 77 55 48 1 + 77 55 49 1 + 77 55 50 1 + 77 55 51 1 + 77 55 52 1 + 77 55 53 1 + 77 55 54 1 + 77 55 55 1 + 77 55 56 1 + 77 55 57 1 + 77 55 58 1 + 77 55 59 1 + 77 55 60 1 + 77 55 61 1 + 77 55 62 1 + 77 55 63 1 + 77 55 64 1 + 77 55 65 1 + 77 55 66 1 + 77 55 67 1 + 77 55 68 1 + 77 55 69 1 + 77 55 70 1 + 77 55 71 1 + 77 55 72 1 + 77 55 73 1 + 77 55 74 1 + 77 55 75 1 + 77 55 76 1 + 77 55 77 1 + 77 55 78 1 + 77 55 79 1 + 77 55 80 1 + 77 55 81 1 + 77 55 82 1 + 77 55 83 0.912283 + 77 55 84 0.103719 + 77 56 43 0.41284 + 77 56 44 0.999058 + 77 56 45 1 + 77 56 46 1 + 77 56 47 1 + 77 56 48 1 + 77 56 49 1 + 77 56 50 1 + 77 56 51 1 + 77 56 52 1 + 77 56 53 1 + 77 56 54 1 + 77 56 55 1 + 77 56 56 1 + 77 56 57 1 + 77 56 58 1 + 77 56 59 1 + 77 56 60 1 + 77 56 61 1 + 77 56 62 1 + 77 56 63 1 + 77 56 64 1 + 77 56 65 1 + 77 56 66 1 + 77 56 67 1 + 77 56 68 1 + 77 56 69 1 + 77 56 70 1 + 77 56 71 1 + 77 56 72 1 + 77 56 73 1 + 77 56 74 1 + 77 56 75 1 + 77 56 76 1 + 77 56 77 1 + 77 56 78 1 + 77 56 79 1 + 77 56 80 1 + 77 56 81 1 + 77 56 82 1 + 77 56 83 0.999058 + 77 56 84 0.41284 + 77 57 42 0.0100187 + 77 57 43 0.742086 + 77 57 44 1 + 77 57 45 1 + 77 57 46 1 + 77 57 47 1 + 77 57 48 1 + 77 57 49 1 + 77 57 50 1 + 77 57 51 1 + 77 57 52 1 + 77 57 53 1 + 77 57 54 1 + 77 57 55 1 + 77 57 56 1 + 77 57 57 1 + 77 57 58 1 + 77 57 59 1 + 77 57 60 1 + 77 57 61 1 + 77 57 62 1 + 77 57 63 1 + 77 57 64 1 + 77 57 65 1 + 77 57 66 1 + 77 57 67 1 + 77 57 68 1 + 77 57 69 1 + 77 57 70 1 + 77 57 71 1 + 77 57 72 1 + 77 57 73 1 + 77 57 74 1 + 77 57 75 1 + 77 57 76 1 + 77 57 77 1 + 77 57 78 1 + 77 57 79 1 + 77 57 80 1 + 77 57 81 1 + 77 57 82 1 + 77 57 83 1 + 77 57 84 0.742086 + 77 57 85 0.0100187 + 77 58 42 0.105685 + 77 58 43 0.933643 + 77 58 44 1 + 77 58 45 1 + 77 58 46 1 + 77 58 47 1 + 77 58 48 1 + 77 58 49 1 + 77 58 50 1 + 77 58 51 1 + 77 58 52 1 + 77 58 53 1 + 77 58 54 1 + 77 58 55 1 + 77 58 56 1 + 77 58 57 1 + 77 58 58 1 + 77 58 59 1 + 77 58 60 1 + 77 58 61 1 + 77 58 62 1 + 77 58 63 1 + 77 58 64 1 + 77 58 65 1 + 77 58 66 1 + 77 58 67 1 + 77 58 68 1 + 77 58 69 1 + 77 58 70 1 + 77 58 71 1 + 77 58 72 1 + 77 58 73 1 + 77 58 74 1 + 77 58 75 1 + 77 58 76 1 + 77 58 77 1 + 77 58 78 1 + 77 58 79 1 + 77 58 80 1 + 77 58 81 1 + 77 58 82 1 + 77 58 83 1 + 77 58 84 0.933643 + 77 58 85 0.105685 + 77 59 42 0.28004 + 77 59 43 0.995674 + 77 59 44 1 + 77 59 45 1 + 77 59 46 1 + 77 59 47 1 + 77 59 48 1 + 77 59 49 1 + 77 59 50 1 + 77 59 51 1 + 77 59 52 1 + 77 59 53 1 + 77 59 54 1 + 77 59 55 1 + 77 59 56 1 + 77 59 57 1 + 77 59 58 1 + 77 59 59 1 + 77 59 60 1 + 77 59 61 1 + 77 59 62 1 + 77 59 63 1 + 77 59 64 1 + 77 59 65 1 + 77 59 66 1 + 77 59 67 1 + 77 59 68 1 + 77 59 69 1 + 77 59 70 1 + 77 59 71 1 + 77 59 72 1 + 77 59 73 1 + 77 59 74 1 + 77 59 75 1 + 77 59 76 1 + 77 59 77 1 + 77 59 78 1 + 77 59 79 1 + 77 59 80 1 + 77 59 81 1 + 77 59 82 1 + 77 59 83 1 + 77 59 84 0.995674 + 77 59 85 0.28004 + 77 60 42 0.462948 + 77 60 43 1 + 77 60 44 1 + 77 60 45 1 + 77 60 46 1 + 77 60 47 1 + 77 60 48 1 + 77 60 49 1 + 77 60 50 1 + 77 60 51 1 + 77 60 52 1 + 77 60 53 1 + 77 60 54 1 + 77 60 55 1 + 77 60 56 1 + 77 60 57 1 + 77 60 58 1 + 77 60 59 1 + 77 60 60 1 + 77 60 61 1 + 77 60 62 1 + 77 60 63 1 + 77 60 64 1 + 77 60 65 1 + 77 60 66 1 + 77 60 67 1 + 77 60 68 1 + 77 60 69 1 + 77 60 70 1 + 77 60 71 1 + 77 60 72 1 + 77 60 73 1 + 77 60 74 1 + 77 60 75 1 + 77 60 76 1 + 77 60 77 1 + 77 60 78 1 + 77 60 79 1 + 77 60 80 1 + 77 60 81 1 + 77 60 82 1 + 77 60 83 1 + 77 60 84 1 + 77 60 85 0.462948 + 77 61 42 0.602307 + 77 61 43 1 + 77 61 44 1 + 77 61 45 1 + 77 61 46 1 + 77 61 47 1 + 77 61 48 1 + 77 61 49 1 + 77 61 50 1 + 77 61 51 1 + 77 61 52 1 + 77 61 53 1 + 77 61 54 1 + 77 61 55 1 + 77 61 56 1 + 77 61 57 1 + 77 61 58 1 + 77 61 59 1 + 77 61 60 1 + 77 61 61 1 + 77 61 62 1 + 77 61 63 1 + 77 61 64 1 + 77 61 65 1 + 77 61 66 1 + 77 61 67 1 + 77 61 68 1 + 77 61 69 1 + 77 61 70 1 + 77 61 71 1 + 77 61 72 1 + 77 61 73 1 + 77 61 74 1 + 77 61 75 1 + 77 61 76 1 + 77 61 77 1 + 77 61 78 1 + 77 61 79 1 + 77 61 80 1 + 77 61 81 1 + 77 61 82 1 + 77 61 83 1 + 77 61 84 1 + 77 61 85 0.602307 + 77 62 41 0.000160193 + 77 62 42 0.694555 + 77 62 43 1 + 77 62 44 1 + 77 62 45 1 + 77 62 46 1 + 77 62 47 1 + 77 62 48 1 + 77 62 49 1 + 77 62 50 1 + 77 62 51 1 + 77 62 52 1 + 77 62 53 1 + 77 62 54 1 + 77 62 55 1 + 77 62 56 1 + 77 62 57 1 + 77 62 58 1 + 77 62 59 1 + 77 62 60 1 + 77 62 61 1 + 77 62 62 1 + 77 62 63 1 + 77 62 64 1 + 77 62 65 1 + 77 62 66 1 + 77 62 67 1 + 77 62 68 1 + 77 62 69 1 + 77 62 70 1 + 77 62 71 1 + 77 62 72 1 + 77 62 73 1 + 77 62 74 1 + 77 62 75 1 + 77 62 76 1 + 77 62 77 1 + 77 62 78 1 + 77 62 79 1 + 77 62 80 1 + 77 62 81 1 + 77 62 82 1 + 77 62 83 1 + 77 62 84 1 + 77 62 85 0.694555 + 77 62 86 0.000160193 + 77 63 41 0.00182891 + 77 63 42 0.738943 + 77 63 43 1 + 77 63 44 1 + 77 63 45 1 + 77 63 46 1 + 77 63 47 1 + 77 63 48 1 + 77 63 49 1 + 77 63 50 1 + 77 63 51 1 + 77 63 52 1 + 77 63 53 1 + 77 63 54 1 + 77 63 55 1 + 77 63 56 1 + 77 63 57 1 + 77 63 58 1 + 77 63 59 1 + 77 63 60 1 + 77 63 61 1 + 77 63 62 1 + 77 63 63 1 + 77 63 64 1 + 77 63 65 1 + 77 63 66 1 + 77 63 67 1 + 77 63 68 1 + 77 63 69 1 + 77 63 70 1 + 77 63 71 1 + 77 63 72 1 + 77 63 73 1 + 77 63 74 1 + 77 63 75 1 + 77 63 76 1 + 77 63 77 1 + 77 63 78 1 + 77 63 79 1 + 77 63 80 1 + 77 63 81 1 + 77 63 82 1 + 77 63 83 1 + 77 63 84 1 + 77 63 85 0.738943 + 77 63 86 0.00182891 + 77 64 41 0.00182891 + 77 64 42 0.738943 + 77 64 43 1 + 77 64 44 1 + 77 64 45 1 + 77 64 46 1 + 77 64 47 1 + 77 64 48 1 + 77 64 49 1 + 77 64 50 1 + 77 64 51 1 + 77 64 52 1 + 77 64 53 1 + 77 64 54 1 + 77 64 55 1 + 77 64 56 1 + 77 64 57 1 + 77 64 58 1 + 77 64 59 1 + 77 64 60 1 + 77 64 61 1 + 77 64 62 1 + 77 64 63 1 + 77 64 64 1 + 77 64 65 1 + 77 64 66 1 + 77 64 67 1 + 77 64 68 1 + 77 64 69 1 + 77 64 70 1 + 77 64 71 1 + 77 64 72 1 + 77 64 73 1 + 77 64 74 1 + 77 64 75 1 + 77 64 76 1 + 77 64 77 1 + 77 64 78 1 + 77 64 79 1 + 77 64 80 1 + 77 64 81 1 + 77 64 82 1 + 77 64 83 1 + 77 64 84 1 + 77 64 85 0.738943 + 77 64 86 0.00182891 + 77 65 41 0.000160193 + 77 65 42 0.694555 + 77 65 43 1 + 77 65 44 1 + 77 65 45 1 + 77 65 46 1 + 77 65 47 1 + 77 65 48 1 + 77 65 49 1 + 77 65 50 1 + 77 65 51 1 + 77 65 52 1 + 77 65 53 1 + 77 65 54 1 + 77 65 55 1 + 77 65 56 1 + 77 65 57 1 + 77 65 58 1 + 77 65 59 1 + 77 65 60 1 + 77 65 61 1 + 77 65 62 1 + 77 65 63 1 + 77 65 64 1 + 77 65 65 1 + 77 65 66 1 + 77 65 67 1 + 77 65 68 1 + 77 65 69 1 + 77 65 70 1 + 77 65 71 1 + 77 65 72 1 + 77 65 73 1 + 77 65 74 1 + 77 65 75 1 + 77 65 76 1 + 77 65 77 1 + 77 65 78 1 + 77 65 79 1 + 77 65 80 1 + 77 65 81 1 + 77 65 82 1 + 77 65 83 1 + 77 65 84 1 + 77 65 85 0.694555 + 77 65 86 0.000160193 + 77 66 42 0.602307 + 77 66 43 1 + 77 66 44 1 + 77 66 45 1 + 77 66 46 1 + 77 66 47 1 + 77 66 48 1 + 77 66 49 1 + 77 66 50 1 + 77 66 51 1 + 77 66 52 1 + 77 66 53 1 + 77 66 54 1 + 77 66 55 1 + 77 66 56 1 + 77 66 57 1 + 77 66 58 1 + 77 66 59 1 + 77 66 60 1 + 77 66 61 1 + 77 66 62 1 + 77 66 63 1 + 77 66 64 1 + 77 66 65 1 + 77 66 66 1 + 77 66 67 1 + 77 66 68 1 + 77 66 69 1 + 77 66 70 1 + 77 66 71 1 + 77 66 72 1 + 77 66 73 1 + 77 66 74 1 + 77 66 75 1 + 77 66 76 1 + 77 66 77 1 + 77 66 78 1 + 77 66 79 1 + 77 66 80 1 + 77 66 81 1 + 77 66 82 1 + 77 66 83 1 + 77 66 84 1 + 77 66 85 0.602307 + 77 67 42 0.462948 + 77 67 43 1 + 77 67 44 1 + 77 67 45 1 + 77 67 46 1 + 77 67 47 1 + 77 67 48 1 + 77 67 49 1 + 77 67 50 1 + 77 67 51 1 + 77 67 52 1 + 77 67 53 1 + 77 67 54 1 + 77 67 55 1 + 77 67 56 1 + 77 67 57 1 + 77 67 58 1 + 77 67 59 1 + 77 67 60 1 + 77 67 61 1 + 77 67 62 1 + 77 67 63 1 + 77 67 64 1 + 77 67 65 1 + 77 67 66 1 + 77 67 67 1 + 77 67 68 1 + 77 67 69 1 + 77 67 70 1 + 77 67 71 1 + 77 67 72 1 + 77 67 73 1 + 77 67 74 1 + 77 67 75 1 + 77 67 76 1 + 77 67 77 1 + 77 67 78 1 + 77 67 79 1 + 77 67 80 1 + 77 67 81 1 + 77 67 82 1 + 77 67 83 1 + 77 67 84 1 + 77 67 85 0.462948 + 77 68 42 0.28004 + 77 68 43 0.995674 + 77 68 44 1 + 77 68 45 1 + 77 68 46 1 + 77 68 47 1 + 77 68 48 1 + 77 68 49 1 + 77 68 50 1 + 77 68 51 1 + 77 68 52 1 + 77 68 53 1 + 77 68 54 1 + 77 68 55 1 + 77 68 56 1 + 77 68 57 1 + 77 68 58 1 + 77 68 59 1 + 77 68 60 1 + 77 68 61 1 + 77 68 62 1 + 77 68 63 1 + 77 68 64 1 + 77 68 65 1 + 77 68 66 1 + 77 68 67 1 + 77 68 68 1 + 77 68 69 1 + 77 68 70 1 + 77 68 71 1 + 77 68 72 1 + 77 68 73 1 + 77 68 74 1 + 77 68 75 1 + 77 68 76 1 + 77 68 77 1 + 77 68 78 1 + 77 68 79 1 + 77 68 80 1 + 77 68 81 1 + 77 68 82 1 + 77 68 83 1 + 77 68 84 0.995674 + 77 68 85 0.28004 + 77 69 42 0.105685 + 77 69 43 0.933643 + 77 69 44 1 + 77 69 45 1 + 77 69 46 1 + 77 69 47 1 + 77 69 48 1 + 77 69 49 1 + 77 69 50 1 + 77 69 51 1 + 77 69 52 1 + 77 69 53 1 + 77 69 54 1 + 77 69 55 1 + 77 69 56 1 + 77 69 57 1 + 77 69 58 1 + 77 69 59 1 + 77 69 60 1 + 77 69 61 1 + 77 69 62 1 + 77 69 63 1 + 77 69 64 1 + 77 69 65 1 + 77 69 66 1 + 77 69 67 1 + 77 69 68 1 + 77 69 69 1 + 77 69 70 1 + 77 69 71 1 + 77 69 72 1 + 77 69 73 1 + 77 69 74 1 + 77 69 75 1 + 77 69 76 1 + 77 69 77 1 + 77 69 78 1 + 77 69 79 1 + 77 69 80 1 + 77 69 81 1 + 77 69 82 1 + 77 69 83 1 + 77 69 84 0.933643 + 77 69 85 0.105685 + 77 70 42 0.0100187 + 77 70 43 0.742086 + 77 70 44 1 + 77 70 45 1 + 77 70 46 1 + 77 70 47 1 + 77 70 48 1 + 77 70 49 1 + 77 70 50 1 + 77 70 51 1 + 77 70 52 1 + 77 70 53 1 + 77 70 54 1 + 77 70 55 1 + 77 70 56 1 + 77 70 57 1 + 77 70 58 1 + 77 70 59 1 + 77 70 60 1 + 77 70 61 1 + 77 70 62 1 + 77 70 63 1 + 77 70 64 1 + 77 70 65 1 + 77 70 66 1 + 77 70 67 1 + 77 70 68 1 + 77 70 69 1 + 77 70 70 1 + 77 70 71 1 + 77 70 72 1 + 77 70 73 1 + 77 70 74 1 + 77 70 75 1 + 77 70 76 1 + 77 70 77 1 + 77 70 78 1 + 77 70 79 1 + 77 70 80 1 + 77 70 81 1 + 77 70 82 1 + 77 70 83 1 + 77 70 84 0.742086 + 77 70 85 0.0100187 + 77 71 43 0.41284 + 77 71 44 0.999058 + 77 71 45 1 + 77 71 46 1 + 77 71 47 1 + 77 71 48 1 + 77 71 49 1 + 77 71 50 1 + 77 71 51 1 + 77 71 52 1 + 77 71 53 1 + 77 71 54 1 + 77 71 55 1 + 77 71 56 1 + 77 71 57 1 + 77 71 58 1 + 77 71 59 1 + 77 71 60 1 + 77 71 61 1 + 77 71 62 1 + 77 71 63 1 + 77 71 64 1 + 77 71 65 1 + 77 71 66 1 + 77 71 67 1 + 77 71 68 1 + 77 71 69 1 + 77 71 70 1 + 77 71 71 1 + 77 71 72 1 + 77 71 73 1 + 77 71 74 1 + 77 71 75 1 + 77 71 76 1 + 77 71 77 1 + 77 71 78 1 + 77 71 79 1 + 77 71 80 1 + 77 71 81 1 + 77 71 82 1 + 77 71 83 0.999058 + 77 71 84 0.41284 + 77 72 43 0.103719 + 77 72 44 0.912283 + 77 72 45 1 + 77 72 46 1 + 77 72 47 1 + 77 72 48 1 + 77 72 49 1 + 77 72 50 1 + 77 72 51 1 + 77 72 52 1 + 77 72 53 1 + 77 72 54 1 + 77 72 55 1 + 77 72 56 1 + 77 72 57 1 + 77 72 58 1 + 77 72 59 1 + 77 72 60 1 + 77 72 61 1 + 77 72 62 1 + 77 72 63 1 + 77 72 64 1 + 77 72 65 1 + 77 72 66 1 + 77 72 67 1 + 77 72 68 1 + 77 72 69 1 + 77 72 70 1 + 77 72 71 1 + 77 72 72 1 + 77 72 73 1 + 77 72 74 1 + 77 72 75 1 + 77 72 76 1 + 77 72 77 1 + 77 72 78 1 + 77 72 79 1 + 77 72 80 1 + 77 72 81 1 + 77 72 82 1 + 77 72 83 0.912283 + 77 72 84 0.103719 + 77 73 43 0.00135226 + 77 73 44 0.559714 + 77 73 45 0.999965 + 77 73 46 1 + 77 73 47 1 + 77 73 48 1 + 77 73 49 1 + 77 73 50 1 + 77 73 51 1 + 77 73 52 1 + 77 73 53 1 + 77 73 54 1 + 77 73 55 1 + 77 73 56 1 + 77 73 57 1 + 77 73 58 1 + 77 73 59 1 + 77 73 60 1 + 77 73 61 1 + 77 73 62 1 + 77 73 63 1 + 77 73 64 1 + 77 73 65 1 + 77 73 66 1 + 77 73 67 1 + 77 73 68 1 + 77 73 69 1 + 77 73 70 1 + 77 73 71 1 + 77 73 72 1 + 77 73 73 1 + 77 73 74 1 + 77 73 75 1 + 77 73 76 1 + 77 73 77 1 + 77 73 78 1 + 77 73 79 1 + 77 73 80 1 + 77 73 81 1 + 77 73 82 0.999965 + 77 73 83 0.559714 + 77 73 84 0.00135226 + 77 74 44 0.129326 + 77 74 45 0.913417 + 77 74 46 1 + 77 74 47 1 + 77 74 48 1 + 77 74 49 1 + 77 74 50 1 + 77 74 51 1 + 77 74 52 1 + 77 74 53 1 + 77 74 54 1 + 77 74 55 1 + 77 74 56 1 + 77 74 57 1 + 77 74 58 1 + 77 74 59 1 + 77 74 60 1 + 77 74 61 1 + 77 74 62 1 + 77 74 63 1 + 77 74 64 1 + 77 74 65 1 + 77 74 66 1 + 77 74 67 1 + 77 74 68 1 + 77 74 69 1 + 77 74 70 1 + 77 74 71 1 + 77 74 72 1 + 77 74 73 1 + 77 74 74 1 + 77 74 75 1 + 77 74 76 1 + 77 74 77 1 + 77 74 78 1 + 77 74 79 1 + 77 74 80 1 + 77 74 81 1 + 77 74 82 0.913417 + 77 74 83 0.129326 + 77 75 44 0.00062971 + 77 75 45 0.459682 + 77 75 46 0.995483 + 77 75 47 1 + 77 75 48 1 + 77 75 49 1 + 77 75 50 1 + 77 75 51 1 + 77 75 52 1 + 77 75 53 1 + 77 75 54 1 + 77 75 55 1 + 77 75 56 1 + 77 75 57 1 + 77 75 58 1 + 77 75 59 1 + 77 75 60 1 + 77 75 61 1 + 77 75 62 1 + 77 75 63 1 + 77 75 64 1 + 77 75 65 1 + 77 75 66 1 + 77 75 67 1 + 77 75 68 1 + 77 75 69 1 + 77 75 70 1 + 77 75 71 1 + 77 75 72 1 + 77 75 73 1 + 77 75 74 1 + 77 75 75 1 + 77 75 76 1 + 77 75 77 1 + 77 75 78 1 + 77 75 79 1 + 77 75 80 1 + 77 75 81 0.995483 + 77 75 82 0.459682 + 77 75 83 0.00062971 + 77 76 45 0.0443033 + 77 76 46 0.749071 + 77 76 47 1 + 77 76 48 1 + 77 76 49 1 + 77 76 50 1 + 77 76 51 1 + 77 76 52 1 + 77 76 53 1 + 77 76 54 1 + 77 76 55 1 + 77 76 56 1 + 77 76 57 1 + 77 76 58 1 + 77 76 59 1 + 77 76 60 1 + 77 76 61 1 + 77 76 62 1 + 77 76 63 1 + 77 76 64 1 + 77 76 65 1 + 77 76 66 1 + 77 76 67 1 + 77 76 68 1 + 77 76 69 1 + 77 76 70 1 + 77 76 71 1 + 77 76 72 1 + 77 76 73 1 + 77 76 74 1 + 77 76 75 1 + 77 76 76 1 + 77 76 77 1 + 77 76 78 1 + 77 76 79 1 + 77 76 80 1 + 77 76 81 0.749071 + 77 76 82 0.0443033 + 77 77 46 0.156902 + 77 77 47 0.88976 + 77 77 48 1 + 77 77 49 1 + 77 77 50 1 + 77 77 51 1 + 77 77 52 1 + 77 77 53 1 + 77 77 54 1 + 77 77 55 1 + 77 77 56 1 + 77 77 57 1 + 77 77 58 1 + 77 77 59 1 + 77 77 60 1 + 77 77 61 1 + 77 77 62 1 + 77 77 63 1 + 77 77 64 1 + 77 77 65 1 + 77 77 66 1 + 77 77 67 1 + 77 77 68 1 + 77 77 69 1 + 77 77 70 1 + 77 77 71 1 + 77 77 72 1 + 77 77 73 1 + 77 77 74 1 + 77 77 75 1 + 77 77 76 1 + 77 77 77 1 + 77 77 78 1 + 77 77 79 1 + 77 77 80 0.88976 + 77 77 81 0.156902 + 77 78 46 1.68961e-05 + 77 78 47 0.269165 + 77 78 48 0.934786 + 77 78 49 1 + 77 78 50 1 + 77 78 51 1 + 77 78 52 1 + 77 78 53 1 + 77 78 54 1 + 77 78 55 1 + 77 78 56 1 + 77 78 57 1 + 77 78 58 1 + 77 78 59 1 + 77 78 60 1 + 77 78 61 1 + 77 78 62 1 + 77 78 63 1 + 77 78 64 1 + 77 78 65 1 + 77 78 66 1 + 77 78 67 1 + 77 78 68 1 + 77 78 69 1 + 77 78 70 1 + 77 78 71 1 + 77 78 72 1 + 77 78 73 1 + 77 78 74 1 + 77 78 75 1 + 77 78 76 1 + 77 78 77 1 + 77 78 78 1 + 77 78 79 0.934786 + 77 78 80 0.269165 + 77 78 81 1.68961e-05 + 77 79 47 0.00101852 + 77 79 48 0.313512 + 77 79 49 0.934786 + 77 79 50 1 + 77 79 51 1 + 77 79 52 1 + 77 79 53 1 + 77 79 54 1 + 77 79 55 1 + 77 79 56 1 + 77 79 57 1 + 77 79 58 1 + 77 79 59 1 + 77 79 60 1 + 77 79 61 1 + 77 79 62 1 + 77 79 63 1 + 77 79 64 1 + 77 79 65 1 + 77 79 66 1 + 77 79 67 1 + 77 79 68 1 + 77 79 69 1 + 77 79 70 1 + 77 79 71 1 + 77 79 72 1 + 77 79 73 1 + 77 79 74 1 + 77 79 75 1 + 77 79 76 1 + 77 79 77 1 + 77 79 78 0.934786 + 77 79 79 0.313512 + 77 79 80 0.00101852 + 77 80 48 0.00101852 + 77 80 49 0.269165 + 77 80 50 0.88976 + 77 80 51 1 + 77 80 52 1 + 77 80 53 1 + 77 80 54 1 + 77 80 55 1 + 77 80 56 1 + 77 80 57 1 + 77 80 58 1 + 77 80 59 1 + 77 80 60 1 + 77 80 61 1 + 77 80 62 1 + 77 80 63 1 + 77 80 64 1 + 77 80 65 1 + 77 80 66 1 + 77 80 67 1 + 77 80 68 1 + 77 80 69 1 + 77 80 70 1 + 77 80 71 1 + 77 80 72 1 + 77 80 73 1 + 77 80 74 1 + 77 80 75 1 + 77 80 76 1 + 77 80 77 0.88976 + 77 80 78 0.269165 + 77 80 79 0.00101852 + 77 81 49 1.68961e-05 + 77 81 50 0.156902 + 77 81 51 0.749071 + 77 81 52 0.995483 + 77 81 53 1 + 77 81 54 1 + 77 81 55 1 + 77 81 56 1 + 77 81 57 1 + 77 81 58 1 + 77 81 59 1 + 77 81 60 1 + 77 81 61 1 + 77 81 62 1 + 77 81 63 1 + 77 81 64 1 + 77 81 65 1 + 77 81 66 1 + 77 81 67 1 + 77 81 68 1 + 77 81 69 1 + 77 81 70 1 + 77 81 71 1 + 77 81 72 1 + 77 81 73 1 + 77 81 74 1 + 77 81 75 0.995483 + 77 81 76 0.749071 + 77 81 77 0.156902 + 77 81 78 1.68961e-05 + 77 82 51 0.0443033 + 77 82 52 0.459682 + 77 82 53 0.913417 + 77 82 54 0.999965 + 77 82 55 1 + 77 82 56 1 + 77 82 57 1 + 77 82 58 1 + 77 82 59 1 + 77 82 60 1 + 77 82 61 1 + 77 82 62 1 + 77 82 63 1 + 77 82 64 1 + 77 82 65 1 + 77 82 66 1 + 77 82 67 1 + 77 82 68 1 + 77 82 69 1 + 77 82 70 1 + 77 82 71 1 + 77 82 72 1 + 77 82 73 0.999965 + 77 82 74 0.913417 + 77 82 75 0.459682 + 77 82 76 0.0443033 + 77 83 52 0.00062971 + 77 83 53 0.129326 + 77 83 54 0.559714 + 77 83 55 0.912283 + 77 83 56 0.999058 + 77 83 57 1 + 77 83 58 1 + 77 83 59 1 + 77 83 60 1 + 77 83 61 1 + 77 83 62 1 + 77 83 63 1 + 77 83 64 1 + 77 83 65 1 + 77 83 66 1 + 77 83 67 1 + 77 83 68 1 + 77 83 69 1 + 77 83 70 1 + 77 83 71 0.999058 + 77 83 72 0.912283 + 77 83 73 0.559714 + 77 83 74 0.129326 + 77 83 75 0.00062971 + 77 84 54 0.00135226 + 77 84 55 0.103719 + 77 84 56 0.41284 + 77 84 57 0.742086 + 77 84 58 0.933643 + 77 84 59 0.995674 + 77 84 60 1 + 77 84 61 1 + 77 84 62 1 + 77 84 63 1 + 77 84 64 1 + 77 84 65 1 + 77 84 66 1 + 77 84 67 1 + 77 84 68 0.995674 + 77 84 69 0.933643 + 77 84 70 0.742086 + 77 84 71 0.41284 + 77 84 72 0.103719 + 77 84 73 0.00135226 + 77 85 57 0.0100187 + 77 85 58 0.105685 + 77 85 59 0.28004 + 77 85 60 0.462948 + 77 85 61 0.602307 + 77 85 62 0.694555 + 77 85 63 0.738943 + 77 85 64 0.738943 + 77 85 65 0.694555 + 77 85 66 0.602307 + 77 85 67 0.462948 + 77 85 68 0.28004 + 77 85 69 0.105685 + 77 85 70 0.0100187 + 77 86 62 0.000160193 + 77 86 63 0.00182891 + 77 86 64 0.00182891 + 77 86 65 0.000160193 + 78 42 59 0.000228244 + 78 42 60 0.0170305 + 78 42 61 0.061458 + 78 42 62 0.10742 + 78 42 63 0.135234 + 78 42 64 0.135234 + 78 42 65 0.10742 + 78 42 66 0.061458 + 78 42 67 0.0170305 + 78 42 68 0.000228244 + 78 43 56 0.0114126 + 78 43 57 0.132621 + 78 43 58 0.364963 + 78 43 59 0.606763 + 78 43 60 0.783221 + 78 43 61 0.882567 + 78 43 62 0.931908 + 78 43 63 0.951583 + 78 43 64 0.951583 + 78 43 65 0.931908 + 78 43 66 0.882567 + 78 43 67 0.783221 + 78 43 68 0.606763 + 78 43 69 0.364963 + 78 43 70 0.132621 + 78 43 71 0.0114126 + 78 44 54 0.0436378 + 78 44 55 0.316818 + 78 44 56 0.702444 + 78 44 57 0.933296 + 78 44 58 0.99787 + 78 44 59 1 + 78 44 60 1 + 78 44 61 1 + 78 44 62 1 + 78 44 63 1 + 78 44 64 1 + 78 44 65 1 + 78 44 66 1 + 78 44 67 1 + 78 44 68 1 + 78 44 69 0.99787 + 78 44 70 0.933296 + 78 44 71 0.702444 + 78 44 72 0.316818 + 78 44 73 0.0436378 + 78 45 52 0.0216196 + 78 45 53 0.315112 + 78 45 54 0.78779 + 78 45 55 0.986811 + 78 45 56 1 + 78 45 57 1 + 78 45 58 1 + 78 45 59 1 + 78 45 60 1 + 78 45 61 1 + 78 45 62 1 + 78 45 63 1 + 78 45 64 1 + 78 45 65 1 + 78 45 66 1 + 78 45 67 1 + 78 45 68 1 + 78 45 69 1 + 78 45 70 1 + 78 45 71 1 + 78 45 72 0.986811 + 78 45 73 0.78779 + 78 45 74 0.315112 + 78 45 75 0.0216196 + 78 46 50 1.68961e-05 + 78 46 51 0.127131 + 78 46 52 0.659059 + 78 46 53 0.977331 + 78 46 54 1 + 78 46 55 1 + 78 46 56 1 + 78 46 57 1 + 78 46 58 1 + 78 46 59 1 + 78 46 60 1 + 78 46 61 1 + 78 46 62 1 + 78 46 63 1 + 78 46 64 1 + 78 46 65 1 + 78 46 66 1 + 78 46 67 1 + 78 46 68 1 + 78 46 69 1 + 78 46 70 1 + 78 46 71 1 + 78 46 72 1 + 78 46 73 1 + 78 46 74 0.977331 + 78 46 75 0.659059 + 78 46 76 0.127131 + 78 46 77 1.68961e-05 + 78 47 49 0.00261469 + 78 47 50 0.269165 + 78 47 51 0.860729 + 78 47 52 0.999874 + 78 47 53 1 + 78 47 54 1 + 78 47 55 1 + 78 47 56 1 + 78 47 57 1 + 78 47 58 1 + 78 47 59 1 + 78 47 60 1 + 78 47 61 1 + 78 47 62 1 + 78 47 63 1 + 78 47 64 1 + 78 47 65 1 + 78 47 66 1 + 78 47 67 1 + 78 47 68 1 + 78 47 69 1 + 78 47 70 1 + 78 47 71 1 + 78 47 72 1 + 78 47 73 1 + 78 47 74 1 + 78 47 75 0.999874 + 78 47 76 0.860729 + 78 47 77 0.269165 + 78 47 78 0.00261469 + 78 48 48 0.0053362 + 78 48 49 0.360555 + 78 48 50 0.934786 + 78 48 51 1 + 78 48 52 1 + 78 48 53 1 + 78 48 54 1 + 78 48 55 1 + 78 48 56 1 + 78 48 57 1 + 78 48 58 1 + 78 48 59 1 + 78 48 60 1 + 78 48 61 1 + 78 48 62 1 + 78 48 63 1 + 78 48 64 1 + 78 48 65 1 + 78 48 66 1 + 78 48 67 1 + 78 48 68 1 + 78 48 69 1 + 78 48 70 1 + 78 48 71 1 + 78 48 72 1 + 78 48 73 1 + 78 48 74 1 + 78 48 75 1 + 78 48 76 1 + 78 48 77 0.934786 + 78 48 78 0.360555 + 78 48 79 0.0053362 + 78 49 47 0.00261469 + 78 49 48 0.360555 + 78 49 49 0.95165 + 78 49 50 1 + 78 49 51 1 + 78 49 52 1 + 78 49 53 1 + 78 49 54 1 + 78 49 55 1 + 78 49 56 1 + 78 49 57 1 + 78 49 58 1 + 78 49 59 1 + 78 49 60 1 + 78 49 61 1 + 78 49 62 1 + 78 49 63 1 + 78 49 64 1 + 78 49 65 1 + 78 49 66 1 + 78 49 67 1 + 78 49 68 1 + 78 49 69 1 + 78 49 70 1 + 78 49 71 1 + 78 49 72 1 + 78 49 73 1 + 78 49 74 1 + 78 49 75 1 + 78 49 76 1 + 78 49 77 1 + 78 49 78 0.95165 + 78 49 79 0.360555 + 78 49 80 0.00261469 + 78 50 46 1.68961e-05 + 78 50 47 0.269165 + 78 50 48 0.934786 + 78 50 49 1 + 78 50 50 1 + 78 50 51 1 + 78 50 52 1 + 78 50 53 1 + 78 50 54 1 + 78 50 55 1 + 78 50 56 1 + 78 50 57 1 + 78 50 58 1 + 78 50 59 1 + 78 50 60 1 + 78 50 61 1 + 78 50 62 1 + 78 50 63 1 + 78 50 64 1 + 78 50 65 1 + 78 50 66 1 + 78 50 67 1 + 78 50 68 1 + 78 50 69 1 + 78 50 70 1 + 78 50 71 1 + 78 50 72 1 + 78 50 73 1 + 78 50 74 1 + 78 50 75 1 + 78 50 76 1 + 78 50 77 1 + 78 50 78 1 + 78 50 79 0.934786 + 78 50 80 0.269165 + 78 50 81 1.68961e-05 + 78 51 46 0.127131 + 78 51 47 0.860729 + 78 51 48 1 + 78 51 49 1 + 78 51 50 1 + 78 51 51 1 + 78 51 52 1 + 78 51 53 1 + 78 51 54 1 + 78 51 55 1 + 78 51 56 1 + 78 51 57 1 + 78 51 58 1 + 78 51 59 1 + 78 51 60 1 + 78 51 61 1 + 78 51 62 1 + 78 51 63 1 + 78 51 64 1 + 78 51 65 1 + 78 51 66 1 + 78 51 67 1 + 78 51 68 1 + 78 51 69 1 + 78 51 70 1 + 78 51 71 1 + 78 51 72 1 + 78 51 73 1 + 78 51 74 1 + 78 51 75 1 + 78 51 76 1 + 78 51 77 1 + 78 51 78 1 + 78 51 79 1 + 78 51 80 0.860729 + 78 51 81 0.127131 + 78 52 45 0.0216196 + 78 52 46 0.659059 + 78 52 47 0.999874 + 78 52 48 1 + 78 52 49 1 + 78 52 50 1 + 78 52 51 1 + 78 52 52 1 + 78 52 53 1 + 78 52 54 1 + 78 52 55 1 + 78 52 56 1 + 78 52 57 1 + 78 52 58 1 + 78 52 59 1 + 78 52 60 1 + 78 52 61 1 + 78 52 62 1 + 78 52 63 1 + 78 52 64 1 + 78 52 65 1 + 78 52 66 1 + 78 52 67 1 + 78 52 68 1 + 78 52 69 1 + 78 52 70 1 + 78 52 71 1 + 78 52 72 1 + 78 52 73 1 + 78 52 74 1 + 78 52 75 1 + 78 52 76 1 + 78 52 77 1 + 78 52 78 1 + 78 52 79 1 + 78 52 80 0.999874 + 78 52 81 0.659059 + 78 52 82 0.0216196 + 78 53 45 0.315112 + 78 53 46 0.977331 + 78 53 47 1 + 78 53 48 1 + 78 53 49 1 + 78 53 50 1 + 78 53 51 1 + 78 53 52 1 + 78 53 53 1 + 78 53 54 1 + 78 53 55 1 + 78 53 56 1 + 78 53 57 1 + 78 53 58 1 + 78 53 59 1 + 78 53 60 1 + 78 53 61 1 + 78 53 62 1 + 78 53 63 1 + 78 53 64 1 + 78 53 65 1 + 78 53 66 1 + 78 53 67 1 + 78 53 68 1 + 78 53 69 1 + 78 53 70 1 + 78 53 71 1 + 78 53 72 1 + 78 53 73 1 + 78 53 74 1 + 78 53 75 1 + 78 53 76 1 + 78 53 77 1 + 78 53 78 1 + 78 53 79 1 + 78 53 80 1 + 78 53 81 0.977331 + 78 53 82 0.315112 + 78 54 44 0.0436378 + 78 54 45 0.78779 + 78 54 46 1 + 78 54 47 1 + 78 54 48 1 + 78 54 49 1 + 78 54 50 1 + 78 54 51 1 + 78 54 52 1 + 78 54 53 1 + 78 54 54 1 + 78 54 55 1 + 78 54 56 1 + 78 54 57 1 + 78 54 58 1 + 78 54 59 1 + 78 54 60 1 + 78 54 61 1 + 78 54 62 1 + 78 54 63 1 + 78 54 64 1 + 78 54 65 1 + 78 54 66 1 + 78 54 67 1 + 78 54 68 1 + 78 54 69 1 + 78 54 70 1 + 78 54 71 1 + 78 54 72 1 + 78 54 73 1 + 78 54 74 1 + 78 54 75 1 + 78 54 76 1 + 78 54 77 1 + 78 54 78 1 + 78 54 79 1 + 78 54 80 1 + 78 54 81 1 + 78 54 82 0.78779 + 78 54 83 0.0436378 + 78 55 44 0.316818 + 78 55 45 0.986811 + 78 55 46 1 + 78 55 47 1 + 78 55 48 1 + 78 55 49 1 + 78 55 50 1 + 78 55 51 1 + 78 55 52 1 + 78 55 53 1 + 78 55 54 1 + 78 55 55 1 + 78 55 56 1 + 78 55 57 1 + 78 55 58 1 + 78 55 59 1 + 78 55 60 1 + 78 55 61 1 + 78 55 62 1 + 78 55 63 1 + 78 55 64 1 + 78 55 65 1 + 78 55 66 1 + 78 55 67 1 + 78 55 68 1 + 78 55 69 1 + 78 55 70 1 + 78 55 71 1 + 78 55 72 1 + 78 55 73 1 + 78 55 74 1 + 78 55 75 1 + 78 55 76 1 + 78 55 77 1 + 78 55 78 1 + 78 55 79 1 + 78 55 80 1 + 78 55 81 1 + 78 55 82 0.986811 + 78 55 83 0.316818 + 78 56 43 0.0114126 + 78 56 44 0.702444 + 78 56 45 1 + 78 56 46 1 + 78 56 47 1 + 78 56 48 1 + 78 56 49 1 + 78 56 50 1 + 78 56 51 1 + 78 56 52 1 + 78 56 53 1 + 78 56 54 1 + 78 56 55 1 + 78 56 56 1 + 78 56 57 1 + 78 56 58 1 + 78 56 59 1 + 78 56 60 1 + 78 56 61 1 + 78 56 62 1 + 78 56 63 1 + 78 56 64 1 + 78 56 65 1 + 78 56 66 1 + 78 56 67 1 + 78 56 68 1 + 78 56 69 1 + 78 56 70 1 + 78 56 71 1 + 78 56 72 1 + 78 56 73 1 + 78 56 74 1 + 78 56 75 1 + 78 56 76 1 + 78 56 77 1 + 78 56 78 1 + 78 56 79 1 + 78 56 80 1 + 78 56 81 1 + 78 56 82 1 + 78 56 83 0.702444 + 78 56 84 0.0114126 + 78 57 43 0.132621 + 78 57 44 0.933296 + 78 57 45 1 + 78 57 46 1 + 78 57 47 1 + 78 57 48 1 + 78 57 49 1 + 78 57 50 1 + 78 57 51 1 + 78 57 52 1 + 78 57 53 1 + 78 57 54 1 + 78 57 55 1 + 78 57 56 1 + 78 57 57 1 + 78 57 58 1 + 78 57 59 1 + 78 57 60 1 + 78 57 61 1 + 78 57 62 1 + 78 57 63 1 + 78 57 64 1 + 78 57 65 1 + 78 57 66 1 + 78 57 67 1 + 78 57 68 1 + 78 57 69 1 + 78 57 70 1 + 78 57 71 1 + 78 57 72 1 + 78 57 73 1 + 78 57 74 1 + 78 57 75 1 + 78 57 76 1 + 78 57 77 1 + 78 57 78 1 + 78 57 79 1 + 78 57 80 1 + 78 57 81 1 + 78 57 82 1 + 78 57 83 0.933296 + 78 57 84 0.132621 + 78 58 43 0.364963 + 78 58 44 0.99787 + 78 58 45 1 + 78 58 46 1 + 78 58 47 1 + 78 58 48 1 + 78 58 49 1 + 78 58 50 1 + 78 58 51 1 + 78 58 52 1 + 78 58 53 1 + 78 58 54 1 + 78 58 55 1 + 78 58 56 1 + 78 58 57 1 + 78 58 58 1 + 78 58 59 1 + 78 58 60 1 + 78 58 61 1 + 78 58 62 1 + 78 58 63 1 + 78 58 64 1 + 78 58 65 1 + 78 58 66 1 + 78 58 67 1 + 78 58 68 1 + 78 58 69 1 + 78 58 70 1 + 78 58 71 1 + 78 58 72 1 + 78 58 73 1 + 78 58 74 1 + 78 58 75 1 + 78 58 76 1 + 78 58 77 1 + 78 58 78 1 + 78 58 79 1 + 78 58 80 1 + 78 58 81 1 + 78 58 82 1 + 78 58 83 0.99787 + 78 58 84 0.364963 + 78 59 42 0.000228244 + 78 59 43 0.606763 + 78 59 44 1 + 78 59 45 1 + 78 59 46 1 + 78 59 47 1 + 78 59 48 1 + 78 59 49 1 + 78 59 50 1 + 78 59 51 1 + 78 59 52 1 + 78 59 53 1 + 78 59 54 1 + 78 59 55 1 + 78 59 56 1 + 78 59 57 1 + 78 59 58 1 + 78 59 59 1 + 78 59 60 1 + 78 59 61 1 + 78 59 62 1 + 78 59 63 1 + 78 59 64 1 + 78 59 65 1 + 78 59 66 1 + 78 59 67 1 + 78 59 68 1 + 78 59 69 1 + 78 59 70 1 + 78 59 71 1 + 78 59 72 1 + 78 59 73 1 + 78 59 74 1 + 78 59 75 1 + 78 59 76 1 + 78 59 77 1 + 78 59 78 1 + 78 59 79 1 + 78 59 80 1 + 78 59 81 1 + 78 59 82 1 + 78 59 83 1 + 78 59 84 0.606763 + 78 59 85 0.000228244 + 78 60 42 0.0170305 + 78 60 43 0.783221 + 78 60 44 1 + 78 60 45 1 + 78 60 46 1 + 78 60 47 1 + 78 60 48 1 + 78 60 49 1 + 78 60 50 1 + 78 60 51 1 + 78 60 52 1 + 78 60 53 1 + 78 60 54 1 + 78 60 55 1 + 78 60 56 1 + 78 60 57 1 + 78 60 58 1 + 78 60 59 1 + 78 60 60 1 + 78 60 61 1 + 78 60 62 1 + 78 60 63 1 + 78 60 64 1 + 78 60 65 1 + 78 60 66 1 + 78 60 67 1 + 78 60 68 1 + 78 60 69 1 + 78 60 70 1 + 78 60 71 1 + 78 60 72 1 + 78 60 73 1 + 78 60 74 1 + 78 60 75 1 + 78 60 76 1 + 78 60 77 1 + 78 60 78 1 + 78 60 79 1 + 78 60 80 1 + 78 60 81 1 + 78 60 82 1 + 78 60 83 1 + 78 60 84 0.783221 + 78 60 85 0.0170305 + 78 61 42 0.061458 + 78 61 43 0.882567 + 78 61 44 1 + 78 61 45 1 + 78 61 46 1 + 78 61 47 1 + 78 61 48 1 + 78 61 49 1 + 78 61 50 1 + 78 61 51 1 + 78 61 52 1 + 78 61 53 1 + 78 61 54 1 + 78 61 55 1 + 78 61 56 1 + 78 61 57 1 + 78 61 58 1 + 78 61 59 1 + 78 61 60 1 + 78 61 61 1 + 78 61 62 1 + 78 61 63 1 + 78 61 64 1 + 78 61 65 1 + 78 61 66 1 + 78 61 67 1 + 78 61 68 1 + 78 61 69 1 + 78 61 70 1 + 78 61 71 1 + 78 61 72 1 + 78 61 73 1 + 78 61 74 1 + 78 61 75 1 + 78 61 76 1 + 78 61 77 1 + 78 61 78 1 + 78 61 79 1 + 78 61 80 1 + 78 61 81 1 + 78 61 82 1 + 78 61 83 1 + 78 61 84 0.882567 + 78 61 85 0.061458 + 78 62 42 0.10742 + 78 62 43 0.931908 + 78 62 44 1 + 78 62 45 1 + 78 62 46 1 + 78 62 47 1 + 78 62 48 1 + 78 62 49 1 + 78 62 50 1 + 78 62 51 1 + 78 62 52 1 + 78 62 53 1 + 78 62 54 1 + 78 62 55 1 + 78 62 56 1 + 78 62 57 1 + 78 62 58 1 + 78 62 59 1 + 78 62 60 1 + 78 62 61 1 + 78 62 62 1 + 78 62 63 1 + 78 62 64 1 + 78 62 65 1 + 78 62 66 1 + 78 62 67 1 + 78 62 68 1 + 78 62 69 1 + 78 62 70 1 + 78 62 71 1 + 78 62 72 1 + 78 62 73 1 + 78 62 74 1 + 78 62 75 1 + 78 62 76 1 + 78 62 77 1 + 78 62 78 1 + 78 62 79 1 + 78 62 80 1 + 78 62 81 1 + 78 62 82 1 + 78 62 83 1 + 78 62 84 0.931908 + 78 62 85 0.10742 + 78 63 42 0.135234 + 78 63 43 0.951583 + 78 63 44 1 + 78 63 45 1 + 78 63 46 1 + 78 63 47 1 + 78 63 48 1 + 78 63 49 1 + 78 63 50 1 + 78 63 51 1 + 78 63 52 1 + 78 63 53 1 + 78 63 54 1 + 78 63 55 1 + 78 63 56 1 + 78 63 57 1 + 78 63 58 1 + 78 63 59 1 + 78 63 60 1 + 78 63 61 1 + 78 63 62 1 + 78 63 63 1 + 78 63 64 1 + 78 63 65 1 + 78 63 66 1 + 78 63 67 1 + 78 63 68 1 + 78 63 69 1 + 78 63 70 1 + 78 63 71 1 + 78 63 72 1 + 78 63 73 1 + 78 63 74 1 + 78 63 75 1 + 78 63 76 1 + 78 63 77 1 + 78 63 78 1 + 78 63 79 1 + 78 63 80 1 + 78 63 81 1 + 78 63 82 1 + 78 63 83 1 + 78 63 84 0.951583 + 78 63 85 0.135234 + 78 64 42 0.135234 + 78 64 43 0.951583 + 78 64 44 1 + 78 64 45 1 + 78 64 46 1 + 78 64 47 1 + 78 64 48 1 + 78 64 49 1 + 78 64 50 1 + 78 64 51 1 + 78 64 52 1 + 78 64 53 1 + 78 64 54 1 + 78 64 55 1 + 78 64 56 1 + 78 64 57 1 + 78 64 58 1 + 78 64 59 1 + 78 64 60 1 + 78 64 61 1 + 78 64 62 1 + 78 64 63 1 + 78 64 64 1 + 78 64 65 1 + 78 64 66 1 + 78 64 67 1 + 78 64 68 1 + 78 64 69 1 + 78 64 70 1 + 78 64 71 1 + 78 64 72 1 + 78 64 73 1 + 78 64 74 1 + 78 64 75 1 + 78 64 76 1 + 78 64 77 1 + 78 64 78 1 + 78 64 79 1 + 78 64 80 1 + 78 64 81 1 + 78 64 82 1 + 78 64 83 1 + 78 64 84 0.951583 + 78 64 85 0.135234 + 78 65 42 0.10742 + 78 65 43 0.931908 + 78 65 44 1 + 78 65 45 1 + 78 65 46 1 + 78 65 47 1 + 78 65 48 1 + 78 65 49 1 + 78 65 50 1 + 78 65 51 1 + 78 65 52 1 + 78 65 53 1 + 78 65 54 1 + 78 65 55 1 + 78 65 56 1 + 78 65 57 1 + 78 65 58 1 + 78 65 59 1 + 78 65 60 1 + 78 65 61 1 + 78 65 62 1 + 78 65 63 1 + 78 65 64 1 + 78 65 65 1 + 78 65 66 1 + 78 65 67 1 + 78 65 68 1 + 78 65 69 1 + 78 65 70 1 + 78 65 71 1 + 78 65 72 1 + 78 65 73 1 + 78 65 74 1 + 78 65 75 1 + 78 65 76 1 + 78 65 77 1 + 78 65 78 1 + 78 65 79 1 + 78 65 80 1 + 78 65 81 1 + 78 65 82 1 + 78 65 83 1 + 78 65 84 0.931908 + 78 65 85 0.10742 + 78 66 42 0.061458 + 78 66 43 0.882567 + 78 66 44 1 + 78 66 45 1 + 78 66 46 1 + 78 66 47 1 + 78 66 48 1 + 78 66 49 1 + 78 66 50 1 + 78 66 51 1 + 78 66 52 1 + 78 66 53 1 + 78 66 54 1 + 78 66 55 1 + 78 66 56 1 + 78 66 57 1 + 78 66 58 1 + 78 66 59 1 + 78 66 60 1 + 78 66 61 1 + 78 66 62 1 + 78 66 63 1 + 78 66 64 1 + 78 66 65 1 + 78 66 66 1 + 78 66 67 1 + 78 66 68 1 + 78 66 69 1 + 78 66 70 1 + 78 66 71 1 + 78 66 72 1 + 78 66 73 1 + 78 66 74 1 + 78 66 75 1 + 78 66 76 1 + 78 66 77 1 + 78 66 78 1 + 78 66 79 1 + 78 66 80 1 + 78 66 81 1 + 78 66 82 1 + 78 66 83 1 + 78 66 84 0.882567 + 78 66 85 0.061458 + 78 67 42 0.0170305 + 78 67 43 0.783221 + 78 67 44 1 + 78 67 45 1 + 78 67 46 1 + 78 67 47 1 + 78 67 48 1 + 78 67 49 1 + 78 67 50 1 + 78 67 51 1 + 78 67 52 1 + 78 67 53 1 + 78 67 54 1 + 78 67 55 1 + 78 67 56 1 + 78 67 57 1 + 78 67 58 1 + 78 67 59 1 + 78 67 60 1 + 78 67 61 1 + 78 67 62 1 + 78 67 63 1 + 78 67 64 1 + 78 67 65 1 + 78 67 66 1 + 78 67 67 1 + 78 67 68 1 + 78 67 69 1 + 78 67 70 1 + 78 67 71 1 + 78 67 72 1 + 78 67 73 1 + 78 67 74 1 + 78 67 75 1 + 78 67 76 1 + 78 67 77 1 + 78 67 78 1 + 78 67 79 1 + 78 67 80 1 + 78 67 81 1 + 78 67 82 1 + 78 67 83 1 + 78 67 84 0.783221 + 78 67 85 0.0170305 + 78 68 42 0.000228244 + 78 68 43 0.606763 + 78 68 44 1 + 78 68 45 1 + 78 68 46 1 + 78 68 47 1 + 78 68 48 1 + 78 68 49 1 + 78 68 50 1 + 78 68 51 1 + 78 68 52 1 + 78 68 53 1 + 78 68 54 1 + 78 68 55 1 + 78 68 56 1 + 78 68 57 1 + 78 68 58 1 + 78 68 59 1 + 78 68 60 1 + 78 68 61 1 + 78 68 62 1 + 78 68 63 1 + 78 68 64 1 + 78 68 65 1 + 78 68 66 1 + 78 68 67 1 + 78 68 68 1 + 78 68 69 1 + 78 68 70 1 + 78 68 71 1 + 78 68 72 1 + 78 68 73 1 + 78 68 74 1 + 78 68 75 1 + 78 68 76 1 + 78 68 77 1 + 78 68 78 1 + 78 68 79 1 + 78 68 80 1 + 78 68 81 1 + 78 68 82 1 + 78 68 83 1 + 78 68 84 0.606763 + 78 68 85 0.000228244 + 78 69 43 0.364963 + 78 69 44 0.99787 + 78 69 45 1 + 78 69 46 1 + 78 69 47 1 + 78 69 48 1 + 78 69 49 1 + 78 69 50 1 + 78 69 51 1 + 78 69 52 1 + 78 69 53 1 + 78 69 54 1 + 78 69 55 1 + 78 69 56 1 + 78 69 57 1 + 78 69 58 1 + 78 69 59 1 + 78 69 60 1 + 78 69 61 1 + 78 69 62 1 + 78 69 63 1 + 78 69 64 1 + 78 69 65 1 + 78 69 66 1 + 78 69 67 1 + 78 69 68 1 + 78 69 69 1 + 78 69 70 1 + 78 69 71 1 + 78 69 72 1 + 78 69 73 1 + 78 69 74 1 + 78 69 75 1 + 78 69 76 1 + 78 69 77 1 + 78 69 78 1 + 78 69 79 1 + 78 69 80 1 + 78 69 81 1 + 78 69 82 1 + 78 69 83 0.99787 + 78 69 84 0.364963 + 78 70 43 0.132621 + 78 70 44 0.933296 + 78 70 45 1 + 78 70 46 1 + 78 70 47 1 + 78 70 48 1 + 78 70 49 1 + 78 70 50 1 + 78 70 51 1 + 78 70 52 1 + 78 70 53 1 + 78 70 54 1 + 78 70 55 1 + 78 70 56 1 + 78 70 57 1 + 78 70 58 1 + 78 70 59 1 + 78 70 60 1 + 78 70 61 1 + 78 70 62 1 + 78 70 63 1 + 78 70 64 1 + 78 70 65 1 + 78 70 66 1 + 78 70 67 1 + 78 70 68 1 + 78 70 69 1 + 78 70 70 1 + 78 70 71 1 + 78 70 72 1 + 78 70 73 1 + 78 70 74 1 + 78 70 75 1 + 78 70 76 1 + 78 70 77 1 + 78 70 78 1 + 78 70 79 1 + 78 70 80 1 + 78 70 81 1 + 78 70 82 1 + 78 70 83 0.933296 + 78 70 84 0.132621 + 78 71 43 0.0114126 + 78 71 44 0.702444 + 78 71 45 1 + 78 71 46 1 + 78 71 47 1 + 78 71 48 1 + 78 71 49 1 + 78 71 50 1 + 78 71 51 1 + 78 71 52 1 + 78 71 53 1 + 78 71 54 1 + 78 71 55 1 + 78 71 56 1 + 78 71 57 1 + 78 71 58 1 + 78 71 59 1 + 78 71 60 1 + 78 71 61 1 + 78 71 62 1 + 78 71 63 1 + 78 71 64 1 + 78 71 65 1 + 78 71 66 1 + 78 71 67 1 + 78 71 68 1 + 78 71 69 1 + 78 71 70 1 + 78 71 71 1 + 78 71 72 1 + 78 71 73 1 + 78 71 74 1 + 78 71 75 1 + 78 71 76 1 + 78 71 77 1 + 78 71 78 1 + 78 71 79 1 + 78 71 80 1 + 78 71 81 1 + 78 71 82 1 + 78 71 83 0.702444 + 78 71 84 0.0114126 + 78 72 44 0.316818 + 78 72 45 0.986811 + 78 72 46 1 + 78 72 47 1 + 78 72 48 1 + 78 72 49 1 + 78 72 50 1 + 78 72 51 1 + 78 72 52 1 + 78 72 53 1 + 78 72 54 1 + 78 72 55 1 + 78 72 56 1 + 78 72 57 1 + 78 72 58 1 + 78 72 59 1 + 78 72 60 1 + 78 72 61 1 + 78 72 62 1 + 78 72 63 1 + 78 72 64 1 + 78 72 65 1 + 78 72 66 1 + 78 72 67 1 + 78 72 68 1 + 78 72 69 1 + 78 72 70 1 + 78 72 71 1 + 78 72 72 1 + 78 72 73 1 + 78 72 74 1 + 78 72 75 1 + 78 72 76 1 + 78 72 77 1 + 78 72 78 1 + 78 72 79 1 + 78 72 80 1 + 78 72 81 1 + 78 72 82 0.986811 + 78 72 83 0.316818 + 78 73 44 0.0436378 + 78 73 45 0.78779 + 78 73 46 1 + 78 73 47 1 + 78 73 48 1 + 78 73 49 1 + 78 73 50 1 + 78 73 51 1 + 78 73 52 1 + 78 73 53 1 + 78 73 54 1 + 78 73 55 1 + 78 73 56 1 + 78 73 57 1 + 78 73 58 1 + 78 73 59 1 + 78 73 60 1 + 78 73 61 1 + 78 73 62 1 + 78 73 63 1 + 78 73 64 1 + 78 73 65 1 + 78 73 66 1 + 78 73 67 1 + 78 73 68 1 + 78 73 69 1 + 78 73 70 1 + 78 73 71 1 + 78 73 72 1 + 78 73 73 1 + 78 73 74 1 + 78 73 75 1 + 78 73 76 1 + 78 73 77 1 + 78 73 78 1 + 78 73 79 1 + 78 73 80 1 + 78 73 81 1 + 78 73 82 0.78779 + 78 73 83 0.0436378 + 78 74 45 0.315112 + 78 74 46 0.977331 + 78 74 47 1 + 78 74 48 1 + 78 74 49 1 + 78 74 50 1 + 78 74 51 1 + 78 74 52 1 + 78 74 53 1 + 78 74 54 1 + 78 74 55 1 + 78 74 56 1 + 78 74 57 1 + 78 74 58 1 + 78 74 59 1 + 78 74 60 1 + 78 74 61 1 + 78 74 62 1 + 78 74 63 1 + 78 74 64 1 + 78 74 65 1 + 78 74 66 1 + 78 74 67 1 + 78 74 68 1 + 78 74 69 1 + 78 74 70 1 + 78 74 71 1 + 78 74 72 1 + 78 74 73 1 + 78 74 74 1 + 78 74 75 1 + 78 74 76 1 + 78 74 77 1 + 78 74 78 1 + 78 74 79 1 + 78 74 80 1 + 78 74 81 0.977331 + 78 74 82 0.315112 + 78 75 45 0.0216196 + 78 75 46 0.659059 + 78 75 47 0.999874 + 78 75 48 1 + 78 75 49 1 + 78 75 50 1 + 78 75 51 1 + 78 75 52 1 + 78 75 53 1 + 78 75 54 1 + 78 75 55 1 + 78 75 56 1 + 78 75 57 1 + 78 75 58 1 + 78 75 59 1 + 78 75 60 1 + 78 75 61 1 + 78 75 62 1 + 78 75 63 1 + 78 75 64 1 + 78 75 65 1 + 78 75 66 1 + 78 75 67 1 + 78 75 68 1 + 78 75 69 1 + 78 75 70 1 + 78 75 71 1 + 78 75 72 1 + 78 75 73 1 + 78 75 74 1 + 78 75 75 1 + 78 75 76 1 + 78 75 77 1 + 78 75 78 1 + 78 75 79 1 + 78 75 80 0.999874 + 78 75 81 0.659059 + 78 75 82 0.0216196 + 78 76 46 0.127131 + 78 76 47 0.860729 + 78 76 48 1 + 78 76 49 1 + 78 76 50 1 + 78 76 51 1 + 78 76 52 1 + 78 76 53 1 + 78 76 54 1 + 78 76 55 1 + 78 76 56 1 + 78 76 57 1 + 78 76 58 1 + 78 76 59 1 + 78 76 60 1 + 78 76 61 1 + 78 76 62 1 + 78 76 63 1 + 78 76 64 1 + 78 76 65 1 + 78 76 66 1 + 78 76 67 1 + 78 76 68 1 + 78 76 69 1 + 78 76 70 1 + 78 76 71 1 + 78 76 72 1 + 78 76 73 1 + 78 76 74 1 + 78 76 75 1 + 78 76 76 1 + 78 76 77 1 + 78 76 78 1 + 78 76 79 1 + 78 76 80 0.860729 + 78 76 81 0.127131 + 78 77 46 1.68961e-05 + 78 77 47 0.269165 + 78 77 48 0.934786 + 78 77 49 1 + 78 77 50 1 + 78 77 51 1 + 78 77 52 1 + 78 77 53 1 + 78 77 54 1 + 78 77 55 1 + 78 77 56 1 + 78 77 57 1 + 78 77 58 1 + 78 77 59 1 + 78 77 60 1 + 78 77 61 1 + 78 77 62 1 + 78 77 63 1 + 78 77 64 1 + 78 77 65 1 + 78 77 66 1 + 78 77 67 1 + 78 77 68 1 + 78 77 69 1 + 78 77 70 1 + 78 77 71 1 + 78 77 72 1 + 78 77 73 1 + 78 77 74 1 + 78 77 75 1 + 78 77 76 1 + 78 77 77 1 + 78 77 78 1 + 78 77 79 0.934786 + 78 77 80 0.269165 + 78 77 81 1.68961e-05 + 78 78 47 0.00261469 + 78 78 48 0.360555 + 78 78 49 0.95165 + 78 78 50 1 + 78 78 51 1 + 78 78 52 1 + 78 78 53 1 + 78 78 54 1 + 78 78 55 1 + 78 78 56 1 + 78 78 57 1 + 78 78 58 1 + 78 78 59 1 + 78 78 60 1 + 78 78 61 1 + 78 78 62 1 + 78 78 63 1 + 78 78 64 1 + 78 78 65 1 + 78 78 66 1 + 78 78 67 1 + 78 78 68 1 + 78 78 69 1 + 78 78 70 1 + 78 78 71 1 + 78 78 72 1 + 78 78 73 1 + 78 78 74 1 + 78 78 75 1 + 78 78 76 1 + 78 78 77 1 + 78 78 78 0.95165 + 78 78 79 0.360555 + 78 78 80 0.00261469 + 78 79 48 0.0053362 + 78 79 49 0.360555 + 78 79 50 0.934786 + 78 79 51 1 + 78 79 52 1 + 78 79 53 1 + 78 79 54 1 + 78 79 55 1 + 78 79 56 1 + 78 79 57 1 + 78 79 58 1 + 78 79 59 1 + 78 79 60 1 + 78 79 61 1 + 78 79 62 1 + 78 79 63 1 + 78 79 64 1 + 78 79 65 1 + 78 79 66 1 + 78 79 67 1 + 78 79 68 1 + 78 79 69 1 + 78 79 70 1 + 78 79 71 1 + 78 79 72 1 + 78 79 73 1 + 78 79 74 1 + 78 79 75 1 + 78 79 76 1 + 78 79 77 0.934786 + 78 79 78 0.360555 + 78 79 79 0.0053362 + 78 80 49 0.00261469 + 78 80 50 0.269165 + 78 80 51 0.860729 + 78 80 52 0.999874 + 78 80 53 1 + 78 80 54 1 + 78 80 55 1 + 78 80 56 1 + 78 80 57 1 + 78 80 58 1 + 78 80 59 1 + 78 80 60 1 + 78 80 61 1 + 78 80 62 1 + 78 80 63 1 + 78 80 64 1 + 78 80 65 1 + 78 80 66 1 + 78 80 67 1 + 78 80 68 1 + 78 80 69 1 + 78 80 70 1 + 78 80 71 1 + 78 80 72 1 + 78 80 73 1 + 78 80 74 1 + 78 80 75 0.999874 + 78 80 76 0.860729 + 78 80 77 0.269165 + 78 80 78 0.00261469 + 78 81 50 1.68961e-05 + 78 81 51 0.127131 + 78 81 52 0.659059 + 78 81 53 0.977331 + 78 81 54 1 + 78 81 55 1 + 78 81 56 1 + 78 81 57 1 + 78 81 58 1 + 78 81 59 1 + 78 81 60 1 + 78 81 61 1 + 78 81 62 1 + 78 81 63 1 + 78 81 64 1 + 78 81 65 1 + 78 81 66 1 + 78 81 67 1 + 78 81 68 1 + 78 81 69 1 + 78 81 70 1 + 78 81 71 1 + 78 81 72 1 + 78 81 73 1 + 78 81 74 0.977331 + 78 81 75 0.659059 + 78 81 76 0.127131 + 78 81 77 1.68961e-05 + 78 82 52 0.0216196 + 78 82 53 0.315112 + 78 82 54 0.78779 + 78 82 55 0.986811 + 78 82 56 1 + 78 82 57 1 + 78 82 58 1 + 78 82 59 1 + 78 82 60 1 + 78 82 61 1 + 78 82 62 1 + 78 82 63 1 + 78 82 64 1 + 78 82 65 1 + 78 82 66 1 + 78 82 67 1 + 78 82 68 1 + 78 82 69 1 + 78 82 70 1 + 78 82 71 1 + 78 82 72 0.986811 + 78 82 73 0.78779 + 78 82 74 0.315112 + 78 82 75 0.0216196 + 78 83 54 0.0436378 + 78 83 55 0.316818 + 78 83 56 0.702444 + 78 83 57 0.933296 + 78 83 58 0.99787 + 78 83 59 1 + 78 83 60 1 + 78 83 61 1 + 78 83 62 1 + 78 83 63 1 + 78 83 64 1 + 78 83 65 1 + 78 83 66 1 + 78 83 67 1 + 78 83 68 1 + 78 83 69 0.99787 + 78 83 70 0.933296 + 78 83 71 0.702444 + 78 83 72 0.316818 + 78 83 73 0.0436378 + 78 84 56 0.0114126 + 78 84 57 0.132621 + 78 84 58 0.364963 + 78 84 59 0.606763 + 78 84 60 0.783221 + 78 84 61 0.882567 + 78 84 62 0.931908 + 78 84 63 0.951583 + 78 84 64 0.951583 + 78 84 65 0.931908 + 78 84 66 0.882567 + 78 84 67 0.783221 + 78 84 68 0.606763 + 78 84 69 0.364963 + 78 84 70 0.132621 + 78 84 71 0.0114126 + 78 85 59 0.000228244 + 78 85 60 0.0170305 + 78 85 61 0.061458 + 78 85 62 0.10742 + 78 85 63 0.135234 + 78 85 64 0.135234 + 78 85 65 0.10742 + 78 85 66 0.061458 + 78 85 67 0.0170305 + 78 85 68 0.000228244 + 79 43 58 0.00207515 + 79 43 59 0.0441313 + 79 43 60 0.134257 + 79 43 61 0.234894 + 79 43 62 0.317411 + 79 43 63 0.363238 + 79 43 64 0.363238 + 79 43 65 0.317411 + 79 43 66 0.234894 + 79 43 67 0.134257 + 79 43 68 0.0441313 + 79 43 69 0.00207515 + 79 44 55 0.00138601 + 79 44 56 0.0811434 + 79 44 57 0.315874 + 79 44 58 0.610031 + 79 44 59 0.821374 + 79 44 60 0.93166 + 79 44 61 0.980027 + 79 44 62 0.996238 + 79 44 63 0.999595 + 79 44 64 0.999595 + 79 44 65 0.996238 + 79 44 66 0.980027 + 79 44 67 0.93166 + 79 44 68 0.821374 + 79 44 69 0.610031 + 79 44 70 0.315874 + 79 44 71 0.0811434 + 79 44 72 0.00138601 + 79 45 53 0.00195783 + 79 45 54 0.129721 + 79 45 55 0.51 + 79 45 56 0.856237 + 79 45 57 0.987756 + 79 45 58 1 + 79 45 59 1 + 79 45 60 1 + 79 45 61 1 + 79 45 62 1 + 79 45 63 1 + 79 45 64 1 + 79 45 65 1 + 79 45 66 1 + 79 45 67 1 + 79 45 68 1 + 79 45 69 1 + 79 45 70 0.987756 + 79 45 71 0.856237 + 79 45 72 0.51 + 79 45 73 0.129721 + 79 45 74 0.00195783 + 79 46 52 0.0602217 + 79 46 53 0.459326 + 79 46 54 0.887171 + 79 46 55 0.998538 + 79 46 56 1 + 79 46 57 1 + 79 46 58 1 + 79 46 59 1 + 79 46 60 1 + 79 46 61 1 + 79 46 62 1 + 79 46 63 1 + 79 46 64 1 + 79 46 65 1 + 79 46 66 1 + 79 46 67 1 + 79 46 68 1 + 79 46 69 1 + 79 46 70 1 + 79 46 71 1 + 79 46 72 0.998538 + 79 46 73 0.887171 + 79 46 74 0.459326 + 79 46 75 0.0602217 + 79 47 50 0.00101852 + 79 47 51 0.190365 + 79 47 52 0.749996 + 79 47 53 0.991434 + 79 47 54 1 + 79 47 55 1 + 79 47 56 1 + 79 47 57 1 + 79 47 58 1 + 79 47 59 1 + 79 47 60 1 + 79 47 61 1 + 79 47 62 1 + 79 47 63 1 + 79 47 64 1 + 79 47 65 1 + 79 47 66 1 + 79 47 67 1 + 79 47 68 1 + 79 47 69 1 + 79 47 70 1 + 79 47 71 1 + 79 47 72 1 + 79 47 73 1 + 79 47 74 0.991434 + 79 47 75 0.749996 + 79 47 76 0.190365 + 79 47 77 0.00101852 + 79 48 49 0.0053362 + 79 48 50 0.313512 + 79 48 51 0.889603 + 79 48 52 0.999998 + 79 48 53 1 + 79 48 54 1 + 79 48 55 1 + 79 48 56 1 + 79 48 57 1 + 79 48 58 1 + 79 48 59 1 + 79 48 60 1 + 79 48 61 1 + 79 48 62 1 + 79 48 63 1 + 79 48 64 1 + 79 48 65 1 + 79 48 66 1 + 79 48 67 1 + 79 48 68 1 + 79 48 69 1 + 79 48 70 1 + 79 48 71 1 + 79 48 72 1 + 79 48 73 1 + 79 48 74 1 + 79 48 75 0.999998 + 79 48 76 0.889603 + 79 48 77 0.313512 + 79 48 78 0.0053362 + 79 49 48 0.0053362 + 79 49 49 0.360555 + 79 49 50 0.934786 + 79 49 51 1 + 79 49 52 1 + 79 49 53 1 + 79 49 54 1 + 79 49 55 1 + 79 49 56 1 + 79 49 57 1 + 79 49 58 1 + 79 49 59 1 + 79 49 60 1 + 79 49 61 1 + 79 49 62 1 + 79 49 63 1 + 79 49 64 1 + 79 49 65 1 + 79 49 66 1 + 79 49 67 1 + 79 49 68 1 + 79 49 69 1 + 79 49 70 1 + 79 49 71 1 + 79 49 72 1 + 79 49 73 1 + 79 49 74 1 + 79 49 75 1 + 79 49 76 1 + 79 49 77 0.934786 + 79 49 78 0.360555 + 79 49 79 0.0053362 + 79 50 47 0.00101852 + 79 50 48 0.313512 + 79 50 49 0.934786 + 79 50 50 1 + 79 50 51 1 + 79 50 52 1 + 79 50 53 1 + 79 50 54 1 + 79 50 55 1 + 79 50 56 1 + 79 50 57 1 + 79 50 58 1 + 79 50 59 1 + 79 50 60 1 + 79 50 61 1 + 79 50 62 1 + 79 50 63 1 + 79 50 64 1 + 79 50 65 1 + 79 50 66 1 + 79 50 67 1 + 79 50 68 1 + 79 50 69 1 + 79 50 70 1 + 79 50 71 1 + 79 50 72 1 + 79 50 73 1 + 79 50 74 1 + 79 50 75 1 + 79 50 76 1 + 79 50 77 1 + 79 50 78 0.934786 + 79 50 79 0.313512 + 79 50 80 0.00101852 + 79 51 47 0.190365 + 79 51 48 0.889603 + 79 51 49 1 + 79 51 50 1 + 79 51 51 1 + 79 51 52 1 + 79 51 53 1 + 79 51 54 1 + 79 51 55 1 + 79 51 56 1 + 79 51 57 1 + 79 51 58 1 + 79 51 59 1 + 79 51 60 1 + 79 51 61 1 + 79 51 62 1 + 79 51 63 1 + 79 51 64 1 + 79 51 65 1 + 79 51 66 1 + 79 51 67 1 + 79 51 68 1 + 79 51 69 1 + 79 51 70 1 + 79 51 71 1 + 79 51 72 1 + 79 51 73 1 + 79 51 74 1 + 79 51 75 1 + 79 51 76 1 + 79 51 77 1 + 79 51 78 1 + 79 51 79 0.889603 + 79 51 80 0.190365 + 79 52 46 0.0602217 + 79 52 47 0.749996 + 79 52 48 0.999998 + 79 52 49 1 + 79 52 50 1 + 79 52 51 1 + 79 52 52 1 + 79 52 53 1 + 79 52 54 1 + 79 52 55 1 + 79 52 56 1 + 79 52 57 1 + 79 52 58 1 + 79 52 59 1 + 79 52 60 1 + 79 52 61 1 + 79 52 62 1 + 79 52 63 1 + 79 52 64 1 + 79 52 65 1 + 79 52 66 1 + 79 52 67 1 + 79 52 68 1 + 79 52 69 1 + 79 52 70 1 + 79 52 71 1 + 79 52 72 1 + 79 52 73 1 + 79 52 74 1 + 79 52 75 1 + 79 52 76 1 + 79 52 77 1 + 79 52 78 1 + 79 52 79 0.999998 + 79 52 80 0.749996 + 79 52 81 0.0602217 + 79 53 45 0.00195783 + 79 53 46 0.459326 + 79 53 47 0.991434 + 79 53 48 1 + 79 53 49 1 + 79 53 50 1 + 79 53 51 1 + 79 53 52 1 + 79 53 53 1 + 79 53 54 1 + 79 53 55 1 + 79 53 56 1 + 79 53 57 1 + 79 53 58 1 + 79 53 59 1 + 79 53 60 1 + 79 53 61 1 + 79 53 62 1 + 79 53 63 1 + 79 53 64 1 + 79 53 65 1 + 79 53 66 1 + 79 53 67 1 + 79 53 68 1 + 79 53 69 1 + 79 53 70 1 + 79 53 71 1 + 79 53 72 1 + 79 53 73 1 + 79 53 74 1 + 79 53 75 1 + 79 53 76 1 + 79 53 77 1 + 79 53 78 1 + 79 53 79 1 + 79 53 80 0.991434 + 79 53 81 0.459326 + 79 53 82 0.00195783 + 79 54 45 0.129721 + 79 54 46 0.887171 + 79 54 47 1 + 79 54 48 1 + 79 54 49 1 + 79 54 50 1 + 79 54 51 1 + 79 54 52 1 + 79 54 53 1 + 79 54 54 1 + 79 54 55 1 + 79 54 56 1 + 79 54 57 1 + 79 54 58 1 + 79 54 59 1 + 79 54 60 1 + 79 54 61 1 + 79 54 62 1 + 79 54 63 1 + 79 54 64 1 + 79 54 65 1 + 79 54 66 1 + 79 54 67 1 + 79 54 68 1 + 79 54 69 1 + 79 54 70 1 + 79 54 71 1 + 79 54 72 1 + 79 54 73 1 + 79 54 74 1 + 79 54 75 1 + 79 54 76 1 + 79 54 77 1 + 79 54 78 1 + 79 54 79 1 + 79 54 80 1 + 79 54 81 0.887171 + 79 54 82 0.129721 + 79 55 44 0.00138601 + 79 55 45 0.51 + 79 55 46 0.998538 + 79 55 47 1 + 79 55 48 1 + 79 55 49 1 + 79 55 50 1 + 79 55 51 1 + 79 55 52 1 + 79 55 53 1 + 79 55 54 1 + 79 55 55 1 + 79 55 56 1 + 79 55 57 1 + 79 55 58 1 + 79 55 59 1 + 79 55 60 1 + 79 55 61 1 + 79 55 62 1 + 79 55 63 1 + 79 55 64 1 + 79 55 65 1 + 79 55 66 1 + 79 55 67 1 + 79 55 68 1 + 79 55 69 1 + 79 55 70 1 + 79 55 71 1 + 79 55 72 1 + 79 55 73 1 + 79 55 74 1 + 79 55 75 1 + 79 55 76 1 + 79 55 77 1 + 79 55 78 1 + 79 55 79 1 + 79 55 80 1 + 79 55 81 0.998538 + 79 55 82 0.51 + 79 55 83 0.00138601 + 79 56 44 0.0811434 + 79 56 45 0.856237 + 79 56 46 1 + 79 56 47 1 + 79 56 48 1 + 79 56 49 1 + 79 56 50 1 + 79 56 51 1 + 79 56 52 1 + 79 56 53 1 + 79 56 54 1 + 79 56 55 1 + 79 56 56 1 + 79 56 57 1 + 79 56 58 1 + 79 56 59 1 + 79 56 60 1 + 79 56 61 1 + 79 56 62 1 + 79 56 63 1 + 79 56 64 1 + 79 56 65 1 + 79 56 66 1 + 79 56 67 1 + 79 56 68 1 + 79 56 69 1 + 79 56 70 1 + 79 56 71 1 + 79 56 72 1 + 79 56 73 1 + 79 56 74 1 + 79 56 75 1 + 79 56 76 1 + 79 56 77 1 + 79 56 78 1 + 79 56 79 1 + 79 56 80 1 + 79 56 81 1 + 79 56 82 0.856237 + 79 56 83 0.0811434 + 79 57 44 0.315874 + 79 57 45 0.987756 + 79 57 46 1 + 79 57 47 1 + 79 57 48 1 + 79 57 49 1 + 79 57 50 1 + 79 57 51 1 + 79 57 52 1 + 79 57 53 1 + 79 57 54 1 + 79 57 55 1 + 79 57 56 1 + 79 57 57 1 + 79 57 58 1 + 79 57 59 1 + 79 57 60 1 + 79 57 61 1 + 79 57 62 1 + 79 57 63 1 + 79 57 64 1 + 79 57 65 1 + 79 57 66 1 + 79 57 67 1 + 79 57 68 1 + 79 57 69 1 + 79 57 70 1 + 79 57 71 1 + 79 57 72 1 + 79 57 73 1 + 79 57 74 1 + 79 57 75 1 + 79 57 76 1 + 79 57 77 1 + 79 57 78 1 + 79 57 79 1 + 79 57 80 1 + 79 57 81 1 + 79 57 82 0.987756 + 79 57 83 0.315874 + 79 58 43 0.00207515 + 79 58 44 0.610031 + 79 58 45 1 + 79 58 46 1 + 79 58 47 1 + 79 58 48 1 + 79 58 49 1 + 79 58 50 1 + 79 58 51 1 + 79 58 52 1 + 79 58 53 1 + 79 58 54 1 + 79 58 55 1 + 79 58 56 1 + 79 58 57 1 + 79 58 58 1 + 79 58 59 1 + 79 58 60 1 + 79 58 61 1 + 79 58 62 1 + 79 58 63 1 + 79 58 64 1 + 79 58 65 1 + 79 58 66 1 + 79 58 67 1 + 79 58 68 1 + 79 58 69 1 + 79 58 70 1 + 79 58 71 1 + 79 58 72 1 + 79 58 73 1 + 79 58 74 1 + 79 58 75 1 + 79 58 76 1 + 79 58 77 1 + 79 58 78 1 + 79 58 79 1 + 79 58 80 1 + 79 58 81 1 + 79 58 82 1 + 79 58 83 0.610031 + 79 58 84 0.00207515 + 79 59 43 0.0441313 + 79 59 44 0.821374 + 79 59 45 1 + 79 59 46 1 + 79 59 47 1 + 79 59 48 1 + 79 59 49 1 + 79 59 50 1 + 79 59 51 1 + 79 59 52 1 + 79 59 53 1 + 79 59 54 1 + 79 59 55 1 + 79 59 56 1 + 79 59 57 1 + 79 59 58 1 + 79 59 59 1 + 79 59 60 1 + 79 59 61 1 + 79 59 62 1 + 79 59 63 1 + 79 59 64 1 + 79 59 65 1 + 79 59 66 1 + 79 59 67 1 + 79 59 68 1 + 79 59 69 1 + 79 59 70 1 + 79 59 71 1 + 79 59 72 1 + 79 59 73 1 + 79 59 74 1 + 79 59 75 1 + 79 59 76 1 + 79 59 77 1 + 79 59 78 1 + 79 59 79 1 + 79 59 80 1 + 79 59 81 1 + 79 59 82 1 + 79 59 83 0.821374 + 79 59 84 0.0441313 + 79 60 43 0.134257 + 79 60 44 0.93166 + 79 60 45 1 + 79 60 46 1 + 79 60 47 1 + 79 60 48 1 + 79 60 49 1 + 79 60 50 1 + 79 60 51 1 + 79 60 52 1 + 79 60 53 1 + 79 60 54 1 + 79 60 55 1 + 79 60 56 1 + 79 60 57 1 + 79 60 58 1 + 79 60 59 1 + 79 60 60 1 + 79 60 61 1 + 79 60 62 1 + 79 60 63 1 + 79 60 64 1 + 79 60 65 1 + 79 60 66 1 + 79 60 67 1 + 79 60 68 1 + 79 60 69 1 + 79 60 70 1 + 79 60 71 1 + 79 60 72 1 + 79 60 73 1 + 79 60 74 1 + 79 60 75 1 + 79 60 76 1 + 79 60 77 1 + 79 60 78 1 + 79 60 79 1 + 79 60 80 1 + 79 60 81 1 + 79 60 82 1 + 79 60 83 0.93166 + 79 60 84 0.134257 + 79 61 43 0.234894 + 79 61 44 0.980027 + 79 61 45 1 + 79 61 46 1 + 79 61 47 1 + 79 61 48 1 + 79 61 49 1 + 79 61 50 1 + 79 61 51 1 + 79 61 52 1 + 79 61 53 1 + 79 61 54 1 + 79 61 55 1 + 79 61 56 1 + 79 61 57 1 + 79 61 58 1 + 79 61 59 1 + 79 61 60 1 + 79 61 61 1 + 79 61 62 1 + 79 61 63 1 + 79 61 64 1 + 79 61 65 1 + 79 61 66 1 + 79 61 67 1 + 79 61 68 1 + 79 61 69 1 + 79 61 70 1 + 79 61 71 1 + 79 61 72 1 + 79 61 73 1 + 79 61 74 1 + 79 61 75 1 + 79 61 76 1 + 79 61 77 1 + 79 61 78 1 + 79 61 79 1 + 79 61 80 1 + 79 61 81 1 + 79 61 82 1 + 79 61 83 0.980027 + 79 61 84 0.234894 + 79 62 43 0.317411 + 79 62 44 0.996238 + 79 62 45 1 + 79 62 46 1 + 79 62 47 1 + 79 62 48 1 + 79 62 49 1 + 79 62 50 1 + 79 62 51 1 + 79 62 52 1 + 79 62 53 1 + 79 62 54 1 + 79 62 55 1 + 79 62 56 1 + 79 62 57 1 + 79 62 58 1 + 79 62 59 1 + 79 62 60 1 + 79 62 61 1 + 79 62 62 1 + 79 62 63 1 + 79 62 64 1 + 79 62 65 1 + 79 62 66 1 + 79 62 67 1 + 79 62 68 1 + 79 62 69 1 + 79 62 70 1 + 79 62 71 1 + 79 62 72 1 + 79 62 73 1 + 79 62 74 1 + 79 62 75 1 + 79 62 76 1 + 79 62 77 1 + 79 62 78 1 + 79 62 79 1 + 79 62 80 1 + 79 62 81 1 + 79 62 82 1 + 79 62 83 0.996238 + 79 62 84 0.317411 + 79 63 43 0.363238 + 79 63 44 0.999595 + 79 63 45 1 + 79 63 46 1 + 79 63 47 1 + 79 63 48 1 + 79 63 49 1 + 79 63 50 1 + 79 63 51 1 + 79 63 52 1 + 79 63 53 1 + 79 63 54 1 + 79 63 55 1 + 79 63 56 1 + 79 63 57 1 + 79 63 58 1 + 79 63 59 1 + 79 63 60 1 + 79 63 61 1 + 79 63 62 1 + 79 63 63 1 + 79 63 64 1 + 79 63 65 1 + 79 63 66 1 + 79 63 67 1 + 79 63 68 1 + 79 63 69 1 + 79 63 70 1 + 79 63 71 1 + 79 63 72 1 + 79 63 73 1 + 79 63 74 1 + 79 63 75 1 + 79 63 76 1 + 79 63 77 1 + 79 63 78 1 + 79 63 79 1 + 79 63 80 1 + 79 63 81 1 + 79 63 82 1 + 79 63 83 0.999595 + 79 63 84 0.363238 + 79 64 43 0.363238 + 79 64 44 0.999595 + 79 64 45 1 + 79 64 46 1 + 79 64 47 1 + 79 64 48 1 + 79 64 49 1 + 79 64 50 1 + 79 64 51 1 + 79 64 52 1 + 79 64 53 1 + 79 64 54 1 + 79 64 55 1 + 79 64 56 1 + 79 64 57 1 + 79 64 58 1 + 79 64 59 1 + 79 64 60 1 + 79 64 61 1 + 79 64 62 1 + 79 64 63 1 + 79 64 64 1 + 79 64 65 1 + 79 64 66 1 + 79 64 67 1 + 79 64 68 1 + 79 64 69 1 + 79 64 70 1 + 79 64 71 1 + 79 64 72 1 + 79 64 73 1 + 79 64 74 1 + 79 64 75 1 + 79 64 76 1 + 79 64 77 1 + 79 64 78 1 + 79 64 79 1 + 79 64 80 1 + 79 64 81 1 + 79 64 82 1 + 79 64 83 0.999595 + 79 64 84 0.363238 + 79 65 43 0.317411 + 79 65 44 0.996238 + 79 65 45 1 + 79 65 46 1 + 79 65 47 1 + 79 65 48 1 + 79 65 49 1 + 79 65 50 1 + 79 65 51 1 + 79 65 52 1 + 79 65 53 1 + 79 65 54 1 + 79 65 55 1 + 79 65 56 1 + 79 65 57 1 + 79 65 58 1 + 79 65 59 1 + 79 65 60 1 + 79 65 61 1 + 79 65 62 1 + 79 65 63 1 + 79 65 64 1 + 79 65 65 1 + 79 65 66 1 + 79 65 67 1 + 79 65 68 1 + 79 65 69 1 + 79 65 70 1 + 79 65 71 1 + 79 65 72 1 + 79 65 73 1 + 79 65 74 1 + 79 65 75 1 + 79 65 76 1 + 79 65 77 1 + 79 65 78 1 + 79 65 79 1 + 79 65 80 1 + 79 65 81 1 + 79 65 82 1 + 79 65 83 0.996238 + 79 65 84 0.317411 + 79 66 43 0.234894 + 79 66 44 0.980027 + 79 66 45 1 + 79 66 46 1 + 79 66 47 1 + 79 66 48 1 + 79 66 49 1 + 79 66 50 1 + 79 66 51 1 + 79 66 52 1 + 79 66 53 1 + 79 66 54 1 + 79 66 55 1 + 79 66 56 1 + 79 66 57 1 + 79 66 58 1 + 79 66 59 1 + 79 66 60 1 + 79 66 61 1 + 79 66 62 1 + 79 66 63 1 + 79 66 64 1 + 79 66 65 1 + 79 66 66 1 + 79 66 67 1 + 79 66 68 1 + 79 66 69 1 + 79 66 70 1 + 79 66 71 1 + 79 66 72 1 + 79 66 73 1 + 79 66 74 1 + 79 66 75 1 + 79 66 76 1 + 79 66 77 1 + 79 66 78 1 + 79 66 79 1 + 79 66 80 1 + 79 66 81 1 + 79 66 82 1 + 79 66 83 0.980027 + 79 66 84 0.234894 + 79 67 43 0.134257 + 79 67 44 0.93166 + 79 67 45 1 + 79 67 46 1 + 79 67 47 1 + 79 67 48 1 + 79 67 49 1 + 79 67 50 1 + 79 67 51 1 + 79 67 52 1 + 79 67 53 1 + 79 67 54 1 + 79 67 55 1 + 79 67 56 1 + 79 67 57 1 + 79 67 58 1 + 79 67 59 1 + 79 67 60 1 + 79 67 61 1 + 79 67 62 1 + 79 67 63 1 + 79 67 64 1 + 79 67 65 1 + 79 67 66 1 + 79 67 67 1 + 79 67 68 1 + 79 67 69 1 + 79 67 70 1 + 79 67 71 1 + 79 67 72 1 + 79 67 73 1 + 79 67 74 1 + 79 67 75 1 + 79 67 76 1 + 79 67 77 1 + 79 67 78 1 + 79 67 79 1 + 79 67 80 1 + 79 67 81 1 + 79 67 82 1 + 79 67 83 0.93166 + 79 67 84 0.134257 + 79 68 43 0.0441313 + 79 68 44 0.821374 + 79 68 45 1 + 79 68 46 1 + 79 68 47 1 + 79 68 48 1 + 79 68 49 1 + 79 68 50 1 + 79 68 51 1 + 79 68 52 1 + 79 68 53 1 + 79 68 54 1 + 79 68 55 1 + 79 68 56 1 + 79 68 57 1 + 79 68 58 1 + 79 68 59 1 + 79 68 60 1 + 79 68 61 1 + 79 68 62 1 + 79 68 63 1 + 79 68 64 1 + 79 68 65 1 + 79 68 66 1 + 79 68 67 1 + 79 68 68 1 + 79 68 69 1 + 79 68 70 1 + 79 68 71 1 + 79 68 72 1 + 79 68 73 1 + 79 68 74 1 + 79 68 75 1 + 79 68 76 1 + 79 68 77 1 + 79 68 78 1 + 79 68 79 1 + 79 68 80 1 + 79 68 81 1 + 79 68 82 1 + 79 68 83 0.821374 + 79 68 84 0.0441313 + 79 69 43 0.00207515 + 79 69 44 0.610031 + 79 69 45 1 + 79 69 46 1 + 79 69 47 1 + 79 69 48 1 + 79 69 49 1 + 79 69 50 1 + 79 69 51 1 + 79 69 52 1 + 79 69 53 1 + 79 69 54 1 + 79 69 55 1 + 79 69 56 1 + 79 69 57 1 + 79 69 58 1 + 79 69 59 1 + 79 69 60 1 + 79 69 61 1 + 79 69 62 1 + 79 69 63 1 + 79 69 64 1 + 79 69 65 1 + 79 69 66 1 + 79 69 67 1 + 79 69 68 1 + 79 69 69 1 + 79 69 70 1 + 79 69 71 1 + 79 69 72 1 + 79 69 73 1 + 79 69 74 1 + 79 69 75 1 + 79 69 76 1 + 79 69 77 1 + 79 69 78 1 + 79 69 79 1 + 79 69 80 1 + 79 69 81 1 + 79 69 82 1 + 79 69 83 0.610031 + 79 69 84 0.00207515 + 79 70 44 0.315874 + 79 70 45 0.987756 + 79 70 46 1 + 79 70 47 1 + 79 70 48 1 + 79 70 49 1 + 79 70 50 1 + 79 70 51 1 + 79 70 52 1 + 79 70 53 1 + 79 70 54 1 + 79 70 55 1 + 79 70 56 1 + 79 70 57 1 + 79 70 58 1 + 79 70 59 1 + 79 70 60 1 + 79 70 61 1 + 79 70 62 1 + 79 70 63 1 + 79 70 64 1 + 79 70 65 1 + 79 70 66 1 + 79 70 67 1 + 79 70 68 1 + 79 70 69 1 + 79 70 70 1 + 79 70 71 1 + 79 70 72 1 + 79 70 73 1 + 79 70 74 1 + 79 70 75 1 + 79 70 76 1 + 79 70 77 1 + 79 70 78 1 + 79 70 79 1 + 79 70 80 1 + 79 70 81 1 + 79 70 82 0.987756 + 79 70 83 0.315874 + 79 71 44 0.0811434 + 79 71 45 0.856237 + 79 71 46 1 + 79 71 47 1 + 79 71 48 1 + 79 71 49 1 + 79 71 50 1 + 79 71 51 1 + 79 71 52 1 + 79 71 53 1 + 79 71 54 1 + 79 71 55 1 + 79 71 56 1 + 79 71 57 1 + 79 71 58 1 + 79 71 59 1 + 79 71 60 1 + 79 71 61 1 + 79 71 62 1 + 79 71 63 1 + 79 71 64 1 + 79 71 65 1 + 79 71 66 1 + 79 71 67 1 + 79 71 68 1 + 79 71 69 1 + 79 71 70 1 + 79 71 71 1 + 79 71 72 1 + 79 71 73 1 + 79 71 74 1 + 79 71 75 1 + 79 71 76 1 + 79 71 77 1 + 79 71 78 1 + 79 71 79 1 + 79 71 80 1 + 79 71 81 1 + 79 71 82 0.856237 + 79 71 83 0.0811434 + 79 72 44 0.00138601 + 79 72 45 0.51 + 79 72 46 0.998538 + 79 72 47 1 + 79 72 48 1 + 79 72 49 1 + 79 72 50 1 + 79 72 51 1 + 79 72 52 1 + 79 72 53 1 + 79 72 54 1 + 79 72 55 1 + 79 72 56 1 + 79 72 57 1 + 79 72 58 1 + 79 72 59 1 + 79 72 60 1 + 79 72 61 1 + 79 72 62 1 + 79 72 63 1 + 79 72 64 1 + 79 72 65 1 + 79 72 66 1 + 79 72 67 1 + 79 72 68 1 + 79 72 69 1 + 79 72 70 1 + 79 72 71 1 + 79 72 72 1 + 79 72 73 1 + 79 72 74 1 + 79 72 75 1 + 79 72 76 1 + 79 72 77 1 + 79 72 78 1 + 79 72 79 1 + 79 72 80 1 + 79 72 81 0.998538 + 79 72 82 0.51 + 79 72 83 0.00138601 + 79 73 45 0.129721 + 79 73 46 0.887171 + 79 73 47 1 + 79 73 48 1 + 79 73 49 1 + 79 73 50 1 + 79 73 51 1 + 79 73 52 1 + 79 73 53 1 + 79 73 54 1 + 79 73 55 1 + 79 73 56 1 + 79 73 57 1 + 79 73 58 1 + 79 73 59 1 + 79 73 60 1 + 79 73 61 1 + 79 73 62 1 + 79 73 63 1 + 79 73 64 1 + 79 73 65 1 + 79 73 66 1 + 79 73 67 1 + 79 73 68 1 + 79 73 69 1 + 79 73 70 1 + 79 73 71 1 + 79 73 72 1 + 79 73 73 1 + 79 73 74 1 + 79 73 75 1 + 79 73 76 1 + 79 73 77 1 + 79 73 78 1 + 79 73 79 1 + 79 73 80 1 + 79 73 81 0.887171 + 79 73 82 0.129721 + 79 74 45 0.00195783 + 79 74 46 0.459326 + 79 74 47 0.991434 + 79 74 48 1 + 79 74 49 1 + 79 74 50 1 + 79 74 51 1 + 79 74 52 1 + 79 74 53 1 + 79 74 54 1 + 79 74 55 1 + 79 74 56 1 + 79 74 57 1 + 79 74 58 1 + 79 74 59 1 + 79 74 60 1 + 79 74 61 1 + 79 74 62 1 + 79 74 63 1 + 79 74 64 1 + 79 74 65 1 + 79 74 66 1 + 79 74 67 1 + 79 74 68 1 + 79 74 69 1 + 79 74 70 1 + 79 74 71 1 + 79 74 72 1 + 79 74 73 1 + 79 74 74 1 + 79 74 75 1 + 79 74 76 1 + 79 74 77 1 + 79 74 78 1 + 79 74 79 1 + 79 74 80 0.991434 + 79 74 81 0.459326 + 79 74 82 0.00195783 + 79 75 46 0.0602217 + 79 75 47 0.749996 + 79 75 48 0.999998 + 79 75 49 1 + 79 75 50 1 + 79 75 51 1 + 79 75 52 1 + 79 75 53 1 + 79 75 54 1 + 79 75 55 1 + 79 75 56 1 + 79 75 57 1 + 79 75 58 1 + 79 75 59 1 + 79 75 60 1 + 79 75 61 1 + 79 75 62 1 + 79 75 63 1 + 79 75 64 1 + 79 75 65 1 + 79 75 66 1 + 79 75 67 1 + 79 75 68 1 + 79 75 69 1 + 79 75 70 1 + 79 75 71 1 + 79 75 72 1 + 79 75 73 1 + 79 75 74 1 + 79 75 75 1 + 79 75 76 1 + 79 75 77 1 + 79 75 78 1 + 79 75 79 0.999998 + 79 75 80 0.749996 + 79 75 81 0.0602217 + 79 76 47 0.190365 + 79 76 48 0.889603 + 79 76 49 1 + 79 76 50 1 + 79 76 51 1 + 79 76 52 1 + 79 76 53 1 + 79 76 54 1 + 79 76 55 1 + 79 76 56 1 + 79 76 57 1 + 79 76 58 1 + 79 76 59 1 + 79 76 60 1 + 79 76 61 1 + 79 76 62 1 + 79 76 63 1 + 79 76 64 1 + 79 76 65 1 + 79 76 66 1 + 79 76 67 1 + 79 76 68 1 + 79 76 69 1 + 79 76 70 1 + 79 76 71 1 + 79 76 72 1 + 79 76 73 1 + 79 76 74 1 + 79 76 75 1 + 79 76 76 1 + 79 76 77 1 + 79 76 78 1 + 79 76 79 0.889603 + 79 76 80 0.190365 + 79 77 47 0.00101852 + 79 77 48 0.313512 + 79 77 49 0.934786 + 79 77 50 1 + 79 77 51 1 + 79 77 52 1 + 79 77 53 1 + 79 77 54 1 + 79 77 55 1 + 79 77 56 1 + 79 77 57 1 + 79 77 58 1 + 79 77 59 1 + 79 77 60 1 + 79 77 61 1 + 79 77 62 1 + 79 77 63 1 + 79 77 64 1 + 79 77 65 1 + 79 77 66 1 + 79 77 67 1 + 79 77 68 1 + 79 77 69 1 + 79 77 70 1 + 79 77 71 1 + 79 77 72 1 + 79 77 73 1 + 79 77 74 1 + 79 77 75 1 + 79 77 76 1 + 79 77 77 1 + 79 77 78 0.934786 + 79 77 79 0.313512 + 79 77 80 0.00101852 + 79 78 48 0.0053362 + 79 78 49 0.360555 + 79 78 50 0.934786 + 79 78 51 1 + 79 78 52 1 + 79 78 53 1 + 79 78 54 1 + 79 78 55 1 + 79 78 56 1 + 79 78 57 1 + 79 78 58 1 + 79 78 59 1 + 79 78 60 1 + 79 78 61 1 + 79 78 62 1 + 79 78 63 1 + 79 78 64 1 + 79 78 65 1 + 79 78 66 1 + 79 78 67 1 + 79 78 68 1 + 79 78 69 1 + 79 78 70 1 + 79 78 71 1 + 79 78 72 1 + 79 78 73 1 + 79 78 74 1 + 79 78 75 1 + 79 78 76 1 + 79 78 77 0.934786 + 79 78 78 0.360555 + 79 78 79 0.0053362 + 79 79 49 0.0053362 + 79 79 50 0.313512 + 79 79 51 0.889603 + 79 79 52 0.999998 + 79 79 53 1 + 79 79 54 1 + 79 79 55 1 + 79 79 56 1 + 79 79 57 1 + 79 79 58 1 + 79 79 59 1 + 79 79 60 1 + 79 79 61 1 + 79 79 62 1 + 79 79 63 1 + 79 79 64 1 + 79 79 65 1 + 79 79 66 1 + 79 79 67 1 + 79 79 68 1 + 79 79 69 1 + 79 79 70 1 + 79 79 71 1 + 79 79 72 1 + 79 79 73 1 + 79 79 74 1 + 79 79 75 0.999998 + 79 79 76 0.889603 + 79 79 77 0.313512 + 79 79 78 0.0053362 + 79 80 50 0.00101852 + 79 80 51 0.190365 + 79 80 52 0.749996 + 79 80 53 0.991434 + 79 80 54 1 + 79 80 55 1 + 79 80 56 1 + 79 80 57 1 + 79 80 58 1 + 79 80 59 1 + 79 80 60 1 + 79 80 61 1 + 79 80 62 1 + 79 80 63 1 + 79 80 64 1 + 79 80 65 1 + 79 80 66 1 + 79 80 67 1 + 79 80 68 1 + 79 80 69 1 + 79 80 70 1 + 79 80 71 1 + 79 80 72 1 + 79 80 73 1 + 79 80 74 0.991434 + 79 80 75 0.749996 + 79 80 76 0.190365 + 79 80 77 0.00101852 + 79 81 52 0.0602217 + 79 81 53 0.459326 + 79 81 54 0.887171 + 79 81 55 0.998538 + 79 81 56 1 + 79 81 57 1 + 79 81 58 1 + 79 81 59 1 + 79 81 60 1 + 79 81 61 1 + 79 81 62 1 + 79 81 63 1 + 79 81 64 1 + 79 81 65 1 + 79 81 66 1 + 79 81 67 1 + 79 81 68 1 + 79 81 69 1 + 79 81 70 1 + 79 81 71 1 + 79 81 72 0.998538 + 79 81 73 0.887171 + 79 81 74 0.459326 + 79 81 75 0.0602217 + 79 82 53 0.00195783 + 79 82 54 0.129721 + 79 82 55 0.51 + 79 82 56 0.856237 + 79 82 57 0.987756 + 79 82 58 1 + 79 82 59 1 + 79 82 60 1 + 79 82 61 1 + 79 82 62 1 + 79 82 63 1 + 79 82 64 1 + 79 82 65 1 + 79 82 66 1 + 79 82 67 1 + 79 82 68 1 + 79 82 69 1 + 79 82 70 0.987756 + 79 82 71 0.856237 + 79 82 72 0.51 + 79 82 73 0.129721 + 79 82 74 0.00195783 + 79 83 55 0.00138601 + 79 83 56 0.0811434 + 79 83 57 0.315874 + 79 83 58 0.610031 + 79 83 59 0.821374 + 79 83 60 0.93166 + 79 83 61 0.980027 + 79 83 62 0.996238 + 79 83 63 0.999595 + 79 83 64 0.999595 + 79 83 65 0.996238 + 79 83 66 0.980027 + 79 83 67 0.93166 + 79 83 68 0.821374 + 79 83 69 0.610031 + 79 83 70 0.315874 + 79 83 71 0.0811434 + 79 83 72 0.00138601 + 79 84 58 0.00207515 + 79 84 59 0.0441313 + 79 84 60 0.134257 + 79 84 61 0.234894 + 79 84 62 0.317411 + 79 84 63 0.363238 + 79 84 64 0.363238 + 79 84 65 0.317411 + 79 84 66 0.234894 + 79 84 67 0.134257 + 79 84 68 0.0441313 + 79 84 69 0.00207515 + 80 44 57 0.000148631 + 80 44 58 0.0302985 + 80 44 59 0.133628 + 80 44 60 0.27231 + 80 44 61 0.408101 + 80 44 62 0.509823 + 80 44 63 0.561032 + 80 44 64 0.561032 + 80 44 65 0.509823 + 80 44 66 0.408101 + 80 44 67 0.27231 + 80 44 68 0.133628 + 80 44 69 0.0302985 + 80 44 70 0.000148631 + 80 45 55 0.0128488 + 80 45 56 0.16137 + 80 45 57 0.458559 + 80 45 58 0.747928 + 80 45 59 0.909115 + 80 45 60 0.979426 + 80 45 61 0.9989 + 80 45 62 1 + 80 45 63 1 + 80 45 64 1 + 80 45 65 1 + 80 45 66 0.9989 + 80 45 67 0.979426 + 80 45 68 0.909115 + 80 45 69 0.747928 + 80 45 70 0.458559 + 80 45 71 0.16137 + 80 45 72 0.0128488 + 80 46 53 0.00833029 + 80 46 54 0.192797 + 80 46 55 0.611412 + 80 46 56 0.910969 + 80 46 57 0.997087 + 80 46 58 1 + 80 46 59 1 + 80 46 60 1 + 80 46 61 1 + 80 46 62 1 + 80 46 63 1 + 80 46 64 1 + 80 46 65 1 + 80 46 66 1 + 80 46 67 1 + 80 46 68 1 + 80 46 69 1 + 80 46 70 0.997087 + 80 46 71 0.910969 + 80 46 72 0.611412 + 80 46 73 0.192797 + 80 46 74 0.00833029 + 80 47 52 0.0791732 + 80 47 53 0.510119 + 80 47 54 0.912465 + 80 47 55 0.99961 + 80 47 56 1 + 80 47 57 1 + 80 47 58 1 + 80 47 59 1 + 80 47 60 1 + 80 47 61 1 + 80 47 62 1 + 80 47 63 1 + 80 47 64 1 + 80 47 65 1 + 80 47 66 1 + 80 47 67 1 + 80 47 68 1 + 80 47 69 1 + 80 47 70 1 + 80 47 71 1 + 80 47 72 0.99961 + 80 47 73 0.912465 + 80 47 74 0.510119 + 80 47 75 0.0791732 + 80 48 50 0.00101852 + 80 48 51 0.190365 + 80 48 52 0.749996 + 80 48 53 0.991434 + 80 48 54 1 + 80 48 55 1 + 80 48 56 1 + 80 48 57 1 + 80 48 58 1 + 80 48 59 1 + 80 48 60 1 + 80 48 61 1 + 80 48 62 1 + 80 48 63 1 + 80 48 64 1 + 80 48 65 1 + 80 48 66 1 + 80 48 67 1 + 80 48 68 1 + 80 48 69 1 + 80 48 70 1 + 80 48 71 1 + 80 48 72 1 + 80 48 73 1 + 80 48 74 0.991434 + 80 48 75 0.749996 + 80 48 76 0.190365 + 80 48 77 0.00101852 + 80 49 49 0.00261469 + 80 49 50 0.269165 + 80 49 51 0.860729 + 80 49 52 0.999874 + 80 49 53 1 + 80 49 54 1 + 80 49 55 1 + 80 49 56 1 + 80 49 57 1 + 80 49 58 1 + 80 49 59 1 + 80 49 60 1 + 80 49 61 1 + 80 49 62 1 + 80 49 63 1 + 80 49 64 1 + 80 49 65 1 + 80 49 66 1 + 80 49 67 1 + 80 49 68 1 + 80 49 69 1 + 80 49 70 1 + 80 49 71 1 + 80 49 72 1 + 80 49 73 1 + 80 49 74 1 + 80 49 75 0.999874 + 80 49 76 0.860729 + 80 49 77 0.269165 + 80 49 78 0.00261469 + 80 50 48 0.00101852 + 80 50 49 0.269165 + 80 50 50 0.88976 + 80 50 51 1 + 80 50 52 1 + 80 50 53 1 + 80 50 54 1 + 80 50 55 1 + 80 50 56 1 + 80 50 57 1 + 80 50 58 1 + 80 50 59 1 + 80 50 60 1 + 80 50 61 1 + 80 50 62 1 + 80 50 63 1 + 80 50 64 1 + 80 50 65 1 + 80 50 66 1 + 80 50 67 1 + 80 50 68 1 + 80 50 69 1 + 80 50 70 1 + 80 50 71 1 + 80 50 72 1 + 80 50 73 1 + 80 50 74 1 + 80 50 75 1 + 80 50 76 1 + 80 50 77 0.88976 + 80 50 78 0.269165 + 80 50 79 0.00101852 + 80 51 48 0.190365 + 80 51 49 0.860729 + 80 51 50 1 + 80 51 51 1 + 80 51 52 1 + 80 51 53 1 + 80 51 54 1 + 80 51 55 1 + 80 51 56 1 + 80 51 57 1 + 80 51 58 1 + 80 51 59 1 + 80 51 60 1 + 80 51 61 1 + 80 51 62 1 + 80 51 63 1 + 80 51 64 1 + 80 51 65 1 + 80 51 66 1 + 80 51 67 1 + 80 51 68 1 + 80 51 69 1 + 80 51 70 1 + 80 51 71 1 + 80 51 72 1 + 80 51 73 1 + 80 51 74 1 + 80 51 75 1 + 80 51 76 1 + 80 51 77 1 + 80 51 78 0.860729 + 80 51 79 0.190365 + 80 52 47 0.0791732 + 80 52 48 0.749996 + 80 52 49 0.999874 + 80 52 50 1 + 80 52 51 1 + 80 52 52 1 + 80 52 53 1 + 80 52 54 1 + 80 52 55 1 + 80 52 56 1 + 80 52 57 1 + 80 52 58 1 + 80 52 59 1 + 80 52 60 1 + 80 52 61 1 + 80 52 62 1 + 80 52 63 1 + 80 52 64 1 + 80 52 65 1 + 80 52 66 1 + 80 52 67 1 + 80 52 68 1 + 80 52 69 1 + 80 52 70 1 + 80 52 71 1 + 80 52 72 1 + 80 52 73 1 + 80 52 74 1 + 80 52 75 1 + 80 52 76 1 + 80 52 77 1 + 80 52 78 0.999874 + 80 52 79 0.749996 + 80 52 80 0.0791732 + 80 53 46 0.00833029 + 80 53 47 0.510119 + 80 53 48 0.991434 + 80 53 49 1 + 80 53 50 1 + 80 53 51 1 + 80 53 52 1 + 80 53 53 1 + 80 53 54 1 + 80 53 55 1 + 80 53 56 1 + 80 53 57 1 + 80 53 58 1 + 80 53 59 1 + 80 53 60 1 + 80 53 61 1 + 80 53 62 1 + 80 53 63 1 + 80 53 64 1 + 80 53 65 1 + 80 53 66 1 + 80 53 67 1 + 80 53 68 1 + 80 53 69 1 + 80 53 70 1 + 80 53 71 1 + 80 53 72 1 + 80 53 73 1 + 80 53 74 1 + 80 53 75 1 + 80 53 76 1 + 80 53 77 1 + 80 53 78 1 + 80 53 79 0.991434 + 80 53 80 0.510119 + 80 53 81 0.00833029 + 80 54 46 0.192797 + 80 54 47 0.912465 + 80 54 48 1 + 80 54 49 1 + 80 54 50 1 + 80 54 51 1 + 80 54 52 1 + 80 54 53 1 + 80 54 54 1 + 80 54 55 1 + 80 54 56 1 + 80 54 57 1 + 80 54 58 1 + 80 54 59 1 + 80 54 60 1 + 80 54 61 1 + 80 54 62 1 + 80 54 63 1 + 80 54 64 1 + 80 54 65 1 + 80 54 66 1 + 80 54 67 1 + 80 54 68 1 + 80 54 69 1 + 80 54 70 1 + 80 54 71 1 + 80 54 72 1 + 80 54 73 1 + 80 54 74 1 + 80 54 75 1 + 80 54 76 1 + 80 54 77 1 + 80 54 78 1 + 80 54 79 1 + 80 54 80 0.912465 + 80 54 81 0.192797 + 80 55 45 0.0128488 + 80 55 46 0.611412 + 80 55 47 0.99961 + 80 55 48 1 + 80 55 49 1 + 80 55 50 1 + 80 55 51 1 + 80 55 52 1 + 80 55 53 1 + 80 55 54 1 + 80 55 55 1 + 80 55 56 1 + 80 55 57 1 + 80 55 58 1 + 80 55 59 1 + 80 55 60 1 + 80 55 61 1 + 80 55 62 1 + 80 55 63 1 + 80 55 64 1 + 80 55 65 1 + 80 55 66 1 + 80 55 67 1 + 80 55 68 1 + 80 55 69 1 + 80 55 70 1 + 80 55 71 1 + 80 55 72 1 + 80 55 73 1 + 80 55 74 1 + 80 55 75 1 + 80 55 76 1 + 80 55 77 1 + 80 55 78 1 + 80 55 79 1 + 80 55 80 0.99961 + 80 55 81 0.611412 + 80 55 82 0.0128488 + 80 56 45 0.16137 + 80 56 46 0.910969 + 80 56 47 1 + 80 56 48 1 + 80 56 49 1 + 80 56 50 1 + 80 56 51 1 + 80 56 52 1 + 80 56 53 1 + 80 56 54 1 + 80 56 55 1 + 80 56 56 1 + 80 56 57 1 + 80 56 58 1 + 80 56 59 1 + 80 56 60 1 + 80 56 61 1 + 80 56 62 1 + 80 56 63 1 + 80 56 64 1 + 80 56 65 1 + 80 56 66 1 + 80 56 67 1 + 80 56 68 1 + 80 56 69 1 + 80 56 70 1 + 80 56 71 1 + 80 56 72 1 + 80 56 73 1 + 80 56 74 1 + 80 56 75 1 + 80 56 76 1 + 80 56 77 1 + 80 56 78 1 + 80 56 79 1 + 80 56 80 1 + 80 56 81 0.910969 + 80 56 82 0.16137 + 80 57 44 0.000148631 + 80 57 45 0.458559 + 80 57 46 0.997087 + 80 57 47 1 + 80 57 48 1 + 80 57 49 1 + 80 57 50 1 + 80 57 51 1 + 80 57 52 1 + 80 57 53 1 + 80 57 54 1 + 80 57 55 1 + 80 57 56 1 + 80 57 57 1 + 80 57 58 1 + 80 57 59 1 + 80 57 60 1 + 80 57 61 1 + 80 57 62 1 + 80 57 63 1 + 80 57 64 1 + 80 57 65 1 + 80 57 66 1 + 80 57 67 1 + 80 57 68 1 + 80 57 69 1 + 80 57 70 1 + 80 57 71 1 + 80 57 72 1 + 80 57 73 1 + 80 57 74 1 + 80 57 75 1 + 80 57 76 1 + 80 57 77 1 + 80 57 78 1 + 80 57 79 1 + 80 57 80 1 + 80 57 81 0.997087 + 80 57 82 0.458559 + 80 57 83 0.000148631 + 80 58 44 0.0302985 + 80 58 45 0.747928 + 80 58 46 1 + 80 58 47 1 + 80 58 48 1 + 80 58 49 1 + 80 58 50 1 + 80 58 51 1 + 80 58 52 1 + 80 58 53 1 + 80 58 54 1 + 80 58 55 1 + 80 58 56 1 + 80 58 57 1 + 80 58 58 1 + 80 58 59 1 + 80 58 60 1 + 80 58 61 1 + 80 58 62 1 + 80 58 63 1 + 80 58 64 1 + 80 58 65 1 + 80 58 66 1 + 80 58 67 1 + 80 58 68 1 + 80 58 69 1 + 80 58 70 1 + 80 58 71 1 + 80 58 72 1 + 80 58 73 1 + 80 58 74 1 + 80 58 75 1 + 80 58 76 1 + 80 58 77 1 + 80 58 78 1 + 80 58 79 1 + 80 58 80 1 + 80 58 81 1 + 80 58 82 0.747928 + 80 58 83 0.0302985 + 80 59 44 0.133628 + 80 59 45 0.909115 + 80 59 46 1 + 80 59 47 1 + 80 59 48 1 + 80 59 49 1 + 80 59 50 1 + 80 59 51 1 + 80 59 52 1 + 80 59 53 1 + 80 59 54 1 + 80 59 55 1 + 80 59 56 1 + 80 59 57 1 + 80 59 58 1 + 80 59 59 1 + 80 59 60 1 + 80 59 61 1 + 80 59 62 1 + 80 59 63 1 + 80 59 64 1 + 80 59 65 1 + 80 59 66 1 + 80 59 67 1 + 80 59 68 1 + 80 59 69 1 + 80 59 70 1 + 80 59 71 1 + 80 59 72 1 + 80 59 73 1 + 80 59 74 1 + 80 59 75 1 + 80 59 76 1 + 80 59 77 1 + 80 59 78 1 + 80 59 79 1 + 80 59 80 1 + 80 59 81 1 + 80 59 82 0.909115 + 80 59 83 0.133628 + 80 60 44 0.27231 + 80 60 45 0.979426 + 80 60 46 1 + 80 60 47 1 + 80 60 48 1 + 80 60 49 1 + 80 60 50 1 + 80 60 51 1 + 80 60 52 1 + 80 60 53 1 + 80 60 54 1 + 80 60 55 1 + 80 60 56 1 + 80 60 57 1 + 80 60 58 1 + 80 60 59 1 + 80 60 60 1 + 80 60 61 1 + 80 60 62 1 + 80 60 63 1 + 80 60 64 1 + 80 60 65 1 + 80 60 66 1 + 80 60 67 1 + 80 60 68 1 + 80 60 69 1 + 80 60 70 1 + 80 60 71 1 + 80 60 72 1 + 80 60 73 1 + 80 60 74 1 + 80 60 75 1 + 80 60 76 1 + 80 60 77 1 + 80 60 78 1 + 80 60 79 1 + 80 60 80 1 + 80 60 81 1 + 80 60 82 0.979426 + 80 60 83 0.27231 + 80 61 44 0.408101 + 80 61 45 0.9989 + 80 61 46 1 + 80 61 47 1 + 80 61 48 1 + 80 61 49 1 + 80 61 50 1 + 80 61 51 1 + 80 61 52 1 + 80 61 53 1 + 80 61 54 1 + 80 61 55 1 + 80 61 56 1 + 80 61 57 1 + 80 61 58 1 + 80 61 59 1 + 80 61 60 1 + 80 61 61 1 + 80 61 62 1 + 80 61 63 1 + 80 61 64 1 + 80 61 65 1 + 80 61 66 1 + 80 61 67 1 + 80 61 68 1 + 80 61 69 1 + 80 61 70 1 + 80 61 71 1 + 80 61 72 1 + 80 61 73 1 + 80 61 74 1 + 80 61 75 1 + 80 61 76 1 + 80 61 77 1 + 80 61 78 1 + 80 61 79 1 + 80 61 80 1 + 80 61 81 1 + 80 61 82 0.9989 + 80 61 83 0.408101 + 80 62 44 0.509823 + 80 62 45 1 + 80 62 46 1 + 80 62 47 1 + 80 62 48 1 + 80 62 49 1 + 80 62 50 1 + 80 62 51 1 + 80 62 52 1 + 80 62 53 1 + 80 62 54 1 + 80 62 55 1 + 80 62 56 1 + 80 62 57 1 + 80 62 58 1 + 80 62 59 1 + 80 62 60 1 + 80 62 61 1 + 80 62 62 1 + 80 62 63 1 + 80 62 64 1 + 80 62 65 1 + 80 62 66 1 + 80 62 67 1 + 80 62 68 1 + 80 62 69 1 + 80 62 70 1 + 80 62 71 1 + 80 62 72 1 + 80 62 73 1 + 80 62 74 1 + 80 62 75 1 + 80 62 76 1 + 80 62 77 1 + 80 62 78 1 + 80 62 79 1 + 80 62 80 1 + 80 62 81 1 + 80 62 82 1 + 80 62 83 0.509823 + 80 63 44 0.561032 + 80 63 45 1 + 80 63 46 1 + 80 63 47 1 + 80 63 48 1 + 80 63 49 1 + 80 63 50 1 + 80 63 51 1 + 80 63 52 1 + 80 63 53 1 + 80 63 54 1 + 80 63 55 1 + 80 63 56 1 + 80 63 57 1 + 80 63 58 1 + 80 63 59 1 + 80 63 60 1 + 80 63 61 1 + 80 63 62 1 + 80 63 63 1 + 80 63 64 1 + 80 63 65 1 + 80 63 66 1 + 80 63 67 1 + 80 63 68 1 + 80 63 69 1 + 80 63 70 1 + 80 63 71 1 + 80 63 72 1 + 80 63 73 1 + 80 63 74 1 + 80 63 75 1 + 80 63 76 1 + 80 63 77 1 + 80 63 78 1 + 80 63 79 1 + 80 63 80 1 + 80 63 81 1 + 80 63 82 1 + 80 63 83 0.561032 + 80 64 44 0.561032 + 80 64 45 1 + 80 64 46 1 + 80 64 47 1 + 80 64 48 1 + 80 64 49 1 + 80 64 50 1 + 80 64 51 1 + 80 64 52 1 + 80 64 53 1 + 80 64 54 1 + 80 64 55 1 + 80 64 56 1 + 80 64 57 1 + 80 64 58 1 + 80 64 59 1 + 80 64 60 1 + 80 64 61 1 + 80 64 62 1 + 80 64 63 1 + 80 64 64 1 + 80 64 65 1 + 80 64 66 1 + 80 64 67 1 + 80 64 68 1 + 80 64 69 1 + 80 64 70 1 + 80 64 71 1 + 80 64 72 1 + 80 64 73 1 + 80 64 74 1 + 80 64 75 1 + 80 64 76 1 + 80 64 77 1 + 80 64 78 1 + 80 64 79 1 + 80 64 80 1 + 80 64 81 1 + 80 64 82 1 + 80 64 83 0.561032 + 80 65 44 0.509823 + 80 65 45 1 + 80 65 46 1 + 80 65 47 1 + 80 65 48 1 + 80 65 49 1 + 80 65 50 1 + 80 65 51 1 + 80 65 52 1 + 80 65 53 1 + 80 65 54 1 + 80 65 55 1 + 80 65 56 1 + 80 65 57 1 + 80 65 58 1 + 80 65 59 1 + 80 65 60 1 + 80 65 61 1 + 80 65 62 1 + 80 65 63 1 + 80 65 64 1 + 80 65 65 1 + 80 65 66 1 + 80 65 67 1 + 80 65 68 1 + 80 65 69 1 + 80 65 70 1 + 80 65 71 1 + 80 65 72 1 + 80 65 73 1 + 80 65 74 1 + 80 65 75 1 + 80 65 76 1 + 80 65 77 1 + 80 65 78 1 + 80 65 79 1 + 80 65 80 1 + 80 65 81 1 + 80 65 82 1 + 80 65 83 0.509823 + 80 66 44 0.408101 + 80 66 45 0.9989 + 80 66 46 1 + 80 66 47 1 + 80 66 48 1 + 80 66 49 1 + 80 66 50 1 + 80 66 51 1 + 80 66 52 1 + 80 66 53 1 + 80 66 54 1 + 80 66 55 1 + 80 66 56 1 + 80 66 57 1 + 80 66 58 1 + 80 66 59 1 + 80 66 60 1 + 80 66 61 1 + 80 66 62 1 + 80 66 63 1 + 80 66 64 1 + 80 66 65 1 + 80 66 66 1 + 80 66 67 1 + 80 66 68 1 + 80 66 69 1 + 80 66 70 1 + 80 66 71 1 + 80 66 72 1 + 80 66 73 1 + 80 66 74 1 + 80 66 75 1 + 80 66 76 1 + 80 66 77 1 + 80 66 78 1 + 80 66 79 1 + 80 66 80 1 + 80 66 81 1 + 80 66 82 0.9989 + 80 66 83 0.408101 + 80 67 44 0.27231 + 80 67 45 0.979426 + 80 67 46 1 + 80 67 47 1 + 80 67 48 1 + 80 67 49 1 + 80 67 50 1 + 80 67 51 1 + 80 67 52 1 + 80 67 53 1 + 80 67 54 1 + 80 67 55 1 + 80 67 56 1 + 80 67 57 1 + 80 67 58 1 + 80 67 59 1 + 80 67 60 1 + 80 67 61 1 + 80 67 62 1 + 80 67 63 1 + 80 67 64 1 + 80 67 65 1 + 80 67 66 1 + 80 67 67 1 + 80 67 68 1 + 80 67 69 1 + 80 67 70 1 + 80 67 71 1 + 80 67 72 1 + 80 67 73 1 + 80 67 74 1 + 80 67 75 1 + 80 67 76 1 + 80 67 77 1 + 80 67 78 1 + 80 67 79 1 + 80 67 80 1 + 80 67 81 1 + 80 67 82 0.979426 + 80 67 83 0.27231 + 80 68 44 0.133628 + 80 68 45 0.909115 + 80 68 46 1 + 80 68 47 1 + 80 68 48 1 + 80 68 49 1 + 80 68 50 1 + 80 68 51 1 + 80 68 52 1 + 80 68 53 1 + 80 68 54 1 + 80 68 55 1 + 80 68 56 1 + 80 68 57 1 + 80 68 58 1 + 80 68 59 1 + 80 68 60 1 + 80 68 61 1 + 80 68 62 1 + 80 68 63 1 + 80 68 64 1 + 80 68 65 1 + 80 68 66 1 + 80 68 67 1 + 80 68 68 1 + 80 68 69 1 + 80 68 70 1 + 80 68 71 1 + 80 68 72 1 + 80 68 73 1 + 80 68 74 1 + 80 68 75 1 + 80 68 76 1 + 80 68 77 1 + 80 68 78 1 + 80 68 79 1 + 80 68 80 1 + 80 68 81 1 + 80 68 82 0.909115 + 80 68 83 0.133628 + 80 69 44 0.0302985 + 80 69 45 0.747928 + 80 69 46 1 + 80 69 47 1 + 80 69 48 1 + 80 69 49 1 + 80 69 50 1 + 80 69 51 1 + 80 69 52 1 + 80 69 53 1 + 80 69 54 1 + 80 69 55 1 + 80 69 56 1 + 80 69 57 1 + 80 69 58 1 + 80 69 59 1 + 80 69 60 1 + 80 69 61 1 + 80 69 62 1 + 80 69 63 1 + 80 69 64 1 + 80 69 65 1 + 80 69 66 1 + 80 69 67 1 + 80 69 68 1 + 80 69 69 1 + 80 69 70 1 + 80 69 71 1 + 80 69 72 1 + 80 69 73 1 + 80 69 74 1 + 80 69 75 1 + 80 69 76 1 + 80 69 77 1 + 80 69 78 1 + 80 69 79 1 + 80 69 80 1 + 80 69 81 1 + 80 69 82 0.747928 + 80 69 83 0.0302985 + 80 70 44 0.000148631 + 80 70 45 0.458559 + 80 70 46 0.997087 + 80 70 47 1 + 80 70 48 1 + 80 70 49 1 + 80 70 50 1 + 80 70 51 1 + 80 70 52 1 + 80 70 53 1 + 80 70 54 1 + 80 70 55 1 + 80 70 56 1 + 80 70 57 1 + 80 70 58 1 + 80 70 59 1 + 80 70 60 1 + 80 70 61 1 + 80 70 62 1 + 80 70 63 1 + 80 70 64 1 + 80 70 65 1 + 80 70 66 1 + 80 70 67 1 + 80 70 68 1 + 80 70 69 1 + 80 70 70 1 + 80 70 71 1 + 80 70 72 1 + 80 70 73 1 + 80 70 74 1 + 80 70 75 1 + 80 70 76 1 + 80 70 77 1 + 80 70 78 1 + 80 70 79 1 + 80 70 80 1 + 80 70 81 0.997087 + 80 70 82 0.458559 + 80 70 83 0.000148631 + 80 71 45 0.16137 + 80 71 46 0.910969 + 80 71 47 1 + 80 71 48 1 + 80 71 49 1 + 80 71 50 1 + 80 71 51 1 + 80 71 52 1 + 80 71 53 1 + 80 71 54 1 + 80 71 55 1 + 80 71 56 1 + 80 71 57 1 + 80 71 58 1 + 80 71 59 1 + 80 71 60 1 + 80 71 61 1 + 80 71 62 1 + 80 71 63 1 + 80 71 64 1 + 80 71 65 1 + 80 71 66 1 + 80 71 67 1 + 80 71 68 1 + 80 71 69 1 + 80 71 70 1 + 80 71 71 1 + 80 71 72 1 + 80 71 73 1 + 80 71 74 1 + 80 71 75 1 + 80 71 76 1 + 80 71 77 1 + 80 71 78 1 + 80 71 79 1 + 80 71 80 1 + 80 71 81 0.910969 + 80 71 82 0.16137 + 80 72 45 0.0128488 + 80 72 46 0.611412 + 80 72 47 0.99961 + 80 72 48 1 + 80 72 49 1 + 80 72 50 1 + 80 72 51 1 + 80 72 52 1 + 80 72 53 1 + 80 72 54 1 + 80 72 55 1 + 80 72 56 1 + 80 72 57 1 + 80 72 58 1 + 80 72 59 1 + 80 72 60 1 + 80 72 61 1 + 80 72 62 1 + 80 72 63 1 + 80 72 64 1 + 80 72 65 1 + 80 72 66 1 + 80 72 67 1 + 80 72 68 1 + 80 72 69 1 + 80 72 70 1 + 80 72 71 1 + 80 72 72 1 + 80 72 73 1 + 80 72 74 1 + 80 72 75 1 + 80 72 76 1 + 80 72 77 1 + 80 72 78 1 + 80 72 79 1 + 80 72 80 0.99961 + 80 72 81 0.611412 + 80 72 82 0.0128488 + 80 73 46 0.192797 + 80 73 47 0.912465 + 80 73 48 1 + 80 73 49 1 + 80 73 50 1 + 80 73 51 1 + 80 73 52 1 + 80 73 53 1 + 80 73 54 1 + 80 73 55 1 + 80 73 56 1 + 80 73 57 1 + 80 73 58 1 + 80 73 59 1 + 80 73 60 1 + 80 73 61 1 + 80 73 62 1 + 80 73 63 1 + 80 73 64 1 + 80 73 65 1 + 80 73 66 1 + 80 73 67 1 + 80 73 68 1 + 80 73 69 1 + 80 73 70 1 + 80 73 71 1 + 80 73 72 1 + 80 73 73 1 + 80 73 74 1 + 80 73 75 1 + 80 73 76 1 + 80 73 77 1 + 80 73 78 1 + 80 73 79 1 + 80 73 80 0.912465 + 80 73 81 0.192797 + 80 74 46 0.00833029 + 80 74 47 0.510119 + 80 74 48 0.991434 + 80 74 49 1 + 80 74 50 1 + 80 74 51 1 + 80 74 52 1 + 80 74 53 1 + 80 74 54 1 + 80 74 55 1 + 80 74 56 1 + 80 74 57 1 + 80 74 58 1 + 80 74 59 1 + 80 74 60 1 + 80 74 61 1 + 80 74 62 1 + 80 74 63 1 + 80 74 64 1 + 80 74 65 1 + 80 74 66 1 + 80 74 67 1 + 80 74 68 1 + 80 74 69 1 + 80 74 70 1 + 80 74 71 1 + 80 74 72 1 + 80 74 73 1 + 80 74 74 1 + 80 74 75 1 + 80 74 76 1 + 80 74 77 1 + 80 74 78 1 + 80 74 79 0.991434 + 80 74 80 0.510119 + 80 74 81 0.00833029 + 80 75 47 0.0791732 + 80 75 48 0.749996 + 80 75 49 0.999874 + 80 75 50 1 + 80 75 51 1 + 80 75 52 1 + 80 75 53 1 + 80 75 54 1 + 80 75 55 1 + 80 75 56 1 + 80 75 57 1 + 80 75 58 1 + 80 75 59 1 + 80 75 60 1 + 80 75 61 1 + 80 75 62 1 + 80 75 63 1 + 80 75 64 1 + 80 75 65 1 + 80 75 66 1 + 80 75 67 1 + 80 75 68 1 + 80 75 69 1 + 80 75 70 1 + 80 75 71 1 + 80 75 72 1 + 80 75 73 1 + 80 75 74 1 + 80 75 75 1 + 80 75 76 1 + 80 75 77 1 + 80 75 78 0.999874 + 80 75 79 0.749996 + 80 75 80 0.0791732 + 80 76 48 0.190365 + 80 76 49 0.860729 + 80 76 50 1 + 80 76 51 1 + 80 76 52 1 + 80 76 53 1 + 80 76 54 1 + 80 76 55 1 + 80 76 56 1 + 80 76 57 1 + 80 76 58 1 + 80 76 59 1 + 80 76 60 1 + 80 76 61 1 + 80 76 62 1 + 80 76 63 1 + 80 76 64 1 + 80 76 65 1 + 80 76 66 1 + 80 76 67 1 + 80 76 68 1 + 80 76 69 1 + 80 76 70 1 + 80 76 71 1 + 80 76 72 1 + 80 76 73 1 + 80 76 74 1 + 80 76 75 1 + 80 76 76 1 + 80 76 77 1 + 80 76 78 0.860729 + 80 76 79 0.190365 + 80 77 48 0.00101852 + 80 77 49 0.269165 + 80 77 50 0.88976 + 80 77 51 1 + 80 77 52 1 + 80 77 53 1 + 80 77 54 1 + 80 77 55 1 + 80 77 56 1 + 80 77 57 1 + 80 77 58 1 + 80 77 59 1 + 80 77 60 1 + 80 77 61 1 + 80 77 62 1 + 80 77 63 1 + 80 77 64 1 + 80 77 65 1 + 80 77 66 1 + 80 77 67 1 + 80 77 68 1 + 80 77 69 1 + 80 77 70 1 + 80 77 71 1 + 80 77 72 1 + 80 77 73 1 + 80 77 74 1 + 80 77 75 1 + 80 77 76 1 + 80 77 77 0.88976 + 80 77 78 0.269165 + 80 77 79 0.00101852 + 80 78 49 0.00261469 + 80 78 50 0.269165 + 80 78 51 0.860729 + 80 78 52 0.999874 + 80 78 53 1 + 80 78 54 1 + 80 78 55 1 + 80 78 56 1 + 80 78 57 1 + 80 78 58 1 + 80 78 59 1 + 80 78 60 1 + 80 78 61 1 + 80 78 62 1 + 80 78 63 1 + 80 78 64 1 + 80 78 65 1 + 80 78 66 1 + 80 78 67 1 + 80 78 68 1 + 80 78 69 1 + 80 78 70 1 + 80 78 71 1 + 80 78 72 1 + 80 78 73 1 + 80 78 74 1 + 80 78 75 0.999874 + 80 78 76 0.860729 + 80 78 77 0.269165 + 80 78 78 0.00261469 + 80 79 50 0.00101852 + 80 79 51 0.190365 + 80 79 52 0.749996 + 80 79 53 0.991434 + 80 79 54 1 + 80 79 55 1 + 80 79 56 1 + 80 79 57 1 + 80 79 58 1 + 80 79 59 1 + 80 79 60 1 + 80 79 61 1 + 80 79 62 1 + 80 79 63 1 + 80 79 64 1 + 80 79 65 1 + 80 79 66 1 + 80 79 67 1 + 80 79 68 1 + 80 79 69 1 + 80 79 70 1 + 80 79 71 1 + 80 79 72 1 + 80 79 73 1 + 80 79 74 0.991434 + 80 79 75 0.749996 + 80 79 76 0.190365 + 80 79 77 0.00101852 + 80 80 52 0.0791732 + 80 80 53 0.510119 + 80 80 54 0.912465 + 80 80 55 0.99961 + 80 80 56 1 + 80 80 57 1 + 80 80 58 1 + 80 80 59 1 + 80 80 60 1 + 80 80 61 1 + 80 80 62 1 + 80 80 63 1 + 80 80 64 1 + 80 80 65 1 + 80 80 66 1 + 80 80 67 1 + 80 80 68 1 + 80 80 69 1 + 80 80 70 1 + 80 80 71 1 + 80 80 72 0.99961 + 80 80 73 0.912465 + 80 80 74 0.510119 + 80 80 75 0.0791732 + 80 81 53 0.00833029 + 80 81 54 0.192797 + 80 81 55 0.611412 + 80 81 56 0.910969 + 80 81 57 0.997087 + 80 81 58 1 + 80 81 59 1 + 80 81 60 1 + 80 81 61 1 + 80 81 62 1 + 80 81 63 1 + 80 81 64 1 + 80 81 65 1 + 80 81 66 1 + 80 81 67 1 + 80 81 68 1 + 80 81 69 1 + 80 81 70 0.997087 + 80 81 71 0.910969 + 80 81 72 0.611412 + 80 81 73 0.192797 + 80 81 74 0.00833029 + 80 82 55 0.0128488 + 80 82 56 0.16137 + 80 82 57 0.458559 + 80 82 58 0.747928 + 80 82 59 0.909115 + 80 82 60 0.979426 + 80 82 61 0.9989 + 80 82 62 1 + 80 82 63 1 + 80 82 64 1 + 80 82 65 1 + 80 82 66 0.9989 + 80 82 67 0.979426 + 80 82 68 0.909115 + 80 82 69 0.747928 + 80 82 70 0.458559 + 80 82 71 0.16137 + 80 82 72 0.0128488 + 80 83 57 0.000148631 + 80 83 58 0.0302985 + 80 83 59 0.133628 + 80 83 60 0.27231 + 80 83 61 0.408101 + 80 83 62 0.509823 + 80 83 63 0.561032 + 80 83 64 0.561032 + 80 83 65 0.509823 + 80 83 66 0.408101 + 80 83 67 0.27231 + 80 83 68 0.133628 + 80 83 69 0.0302985 + 80 83 70 0.000148631 + 81 44 61 7.7901e-05 + 81 44 62 0.00382379 + 81 44 63 0.00976158 + 81 44 64 0.00976158 + 81 44 65 0.00382379 + 81 44 66 7.7901e-05 + 81 45 57 0.00284305 + 81 45 58 0.0622884 + 81 45 59 0.196147 + 81 45 60 0.358249 + 81 45 61 0.509943 + 81 45 62 0.613886 + 81 45 63 0.661608 + 81 45 64 0.661608 + 81 45 65 0.613886 + 81 45 66 0.509943 + 81 45 67 0.358249 + 81 45 68 0.196147 + 81 45 69 0.0622884 + 81 45 70 0.00284305 + 81 46 55 0.0207198 + 81 46 56 0.194293 + 81 46 57 0.510026 + 81 46 58 0.787228 + 81 46 59 0.931469 + 81 46 60 0.988806 + 81 46 61 0.999903 + 81 46 62 1 + 81 46 63 1 + 81 46 64 1 + 81 46 65 1 + 81 46 66 0.999903 + 81 46 67 0.988806 + 81 46 68 0.931469 + 81 46 69 0.787228 + 81 46 70 0.510026 + 81 46 71 0.194293 + 81 46 72 0.0207198 + 81 47 53 0.00833029 + 81 47 54 0.192797 + 81 47 55 0.611412 + 81 47 56 0.910969 + 81 47 57 0.997087 + 81 47 58 1 + 81 47 59 1 + 81 47 60 1 + 81 47 61 1 + 81 47 62 1 + 81 47 63 1 + 81 47 64 1 + 81 47 65 1 + 81 47 66 1 + 81 47 67 1 + 81 47 68 1 + 81 47 69 1 + 81 47 70 0.997087 + 81 47 71 0.910969 + 81 47 72 0.611412 + 81 47 73 0.192797 + 81 47 74 0.00833029 + 81 48 52 0.0602217 + 81 48 53 0.459326 + 81 48 54 0.887171 + 81 48 55 0.998538 + 81 48 56 1 + 81 48 57 1 + 81 48 58 1 + 81 48 59 1 + 81 48 60 1 + 81 48 61 1 + 81 48 62 1 + 81 48 63 1 + 81 48 64 1 + 81 48 65 1 + 81 48 66 1 + 81 48 67 1 + 81 48 68 1 + 81 48 69 1 + 81 48 70 1 + 81 48 71 1 + 81 48 72 0.998538 + 81 48 73 0.887171 + 81 48 74 0.459326 + 81 48 75 0.0602217 + 81 49 50 1.68961e-05 + 81 49 51 0.127131 + 81 49 52 0.659059 + 81 49 53 0.977331 + 81 49 54 1 + 81 49 55 1 + 81 49 56 1 + 81 49 57 1 + 81 49 58 1 + 81 49 59 1 + 81 49 60 1 + 81 49 61 1 + 81 49 62 1 + 81 49 63 1 + 81 49 64 1 + 81 49 65 1 + 81 49 66 1 + 81 49 67 1 + 81 49 68 1 + 81 49 69 1 + 81 49 70 1 + 81 49 71 1 + 81 49 72 1 + 81 49 73 1 + 81 49 74 0.977331 + 81 49 75 0.659059 + 81 49 76 0.127131 + 81 49 77 1.68961e-05 + 81 50 49 1.68961e-05 + 81 50 50 0.156902 + 81 50 51 0.749071 + 81 50 52 0.995483 + 81 50 53 1 + 81 50 54 1 + 81 50 55 1 + 81 50 56 1 + 81 50 57 1 + 81 50 58 1 + 81 50 59 1 + 81 50 60 1 + 81 50 61 1 + 81 50 62 1 + 81 50 63 1 + 81 50 64 1 + 81 50 65 1 + 81 50 66 1 + 81 50 67 1 + 81 50 68 1 + 81 50 69 1 + 81 50 70 1 + 81 50 71 1 + 81 50 72 1 + 81 50 73 1 + 81 50 74 1 + 81 50 75 0.995483 + 81 50 76 0.749071 + 81 50 77 0.156902 + 81 50 78 1.68961e-05 + 81 51 49 0.127131 + 81 51 50 0.749071 + 81 51 51 0.99797 + 81 51 52 1 + 81 51 53 1 + 81 51 54 1 + 81 51 55 1 + 81 51 56 1 + 81 51 57 1 + 81 51 58 1 + 81 51 59 1 + 81 51 60 1 + 81 51 61 1 + 81 51 62 1 + 81 51 63 1 + 81 51 64 1 + 81 51 65 1 + 81 51 66 1 + 81 51 67 1 + 81 51 68 1 + 81 51 69 1 + 81 51 70 1 + 81 51 71 1 + 81 51 72 1 + 81 51 73 1 + 81 51 74 1 + 81 51 75 1 + 81 51 76 0.99797 + 81 51 77 0.749071 + 81 51 78 0.127131 + 81 52 48 0.0602217 + 81 52 49 0.659059 + 81 52 50 0.995483 + 81 52 51 1 + 81 52 52 1 + 81 52 53 1 + 81 52 54 1 + 81 52 55 1 + 81 52 56 1 + 81 52 57 1 + 81 52 58 1 + 81 52 59 1 + 81 52 60 1 + 81 52 61 1 + 81 52 62 1 + 81 52 63 1 + 81 52 64 1 + 81 52 65 1 + 81 52 66 1 + 81 52 67 1 + 81 52 68 1 + 81 52 69 1 + 81 52 70 1 + 81 52 71 1 + 81 52 72 1 + 81 52 73 1 + 81 52 74 1 + 81 52 75 1 + 81 52 76 1 + 81 52 77 0.995483 + 81 52 78 0.659059 + 81 52 79 0.0602217 + 81 53 47 0.00833029 + 81 53 48 0.459326 + 81 53 49 0.977331 + 81 53 50 1 + 81 53 51 1 + 81 53 52 1 + 81 53 53 1 + 81 53 54 1 + 81 53 55 1 + 81 53 56 1 + 81 53 57 1 + 81 53 58 1 + 81 53 59 1 + 81 53 60 1 + 81 53 61 1 + 81 53 62 1 + 81 53 63 1 + 81 53 64 1 + 81 53 65 1 + 81 53 66 1 + 81 53 67 1 + 81 53 68 1 + 81 53 69 1 + 81 53 70 1 + 81 53 71 1 + 81 53 72 1 + 81 53 73 1 + 81 53 74 1 + 81 53 75 1 + 81 53 76 1 + 81 53 77 1 + 81 53 78 0.977331 + 81 53 79 0.459326 + 81 53 80 0.00833029 + 81 54 47 0.192797 + 81 54 48 0.887171 + 81 54 49 1 + 81 54 50 1 + 81 54 51 1 + 81 54 52 1 + 81 54 53 1 + 81 54 54 1 + 81 54 55 1 + 81 54 56 1 + 81 54 57 1 + 81 54 58 1 + 81 54 59 1 + 81 54 60 1 + 81 54 61 1 + 81 54 62 1 + 81 54 63 1 + 81 54 64 1 + 81 54 65 1 + 81 54 66 1 + 81 54 67 1 + 81 54 68 1 + 81 54 69 1 + 81 54 70 1 + 81 54 71 1 + 81 54 72 1 + 81 54 73 1 + 81 54 74 1 + 81 54 75 1 + 81 54 76 1 + 81 54 77 1 + 81 54 78 1 + 81 54 79 0.887171 + 81 54 80 0.192797 + 81 55 46 0.0207198 + 81 55 47 0.611412 + 81 55 48 0.998538 + 81 55 49 1 + 81 55 50 1 + 81 55 51 1 + 81 55 52 1 + 81 55 53 1 + 81 55 54 1 + 81 55 55 1 + 81 55 56 1 + 81 55 57 1 + 81 55 58 1 + 81 55 59 1 + 81 55 60 1 + 81 55 61 1 + 81 55 62 1 + 81 55 63 1 + 81 55 64 1 + 81 55 65 1 + 81 55 66 1 + 81 55 67 1 + 81 55 68 1 + 81 55 69 1 + 81 55 70 1 + 81 55 71 1 + 81 55 72 1 + 81 55 73 1 + 81 55 74 1 + 81 55 75 1 + 81 55 76 1 + 81 55 77 1 + 81 55 78 1 + 81 55 79 0.998538 + 81 55 80 0.611412 + 81 55 81 0.0207198 + 81 56 46 0.194293 + 81 56 47 0.910969 + 81 56 48 1 + 81 56 49 1 + 81 56 50 1 + 81 56 51 1 + 81 56 52 1 + 81 56 53 1 + 81 56 54 1 + 81 56 55 1 + 81 56 56 1 + 81 56 57 1 + 81 56 58 1 + 81 56 59 1 + 81 56 60 1 + 81 56 61 1 + 81 56 62 1 + 81 56 63 1 + 81 56 64 1 + 81 56 65 1 + 81 56 66 1 + 81 56 67 1 + 81 56 68 1 + 81 56 69 1 + 81 56 70 1 + 81 56 71 1 + 81 56 72 1 + 81 56 73 1 + 81 56 74 1 + 81 56 75 1 + 81 56 76 1 + 81 56 77 1 + 81 56 78 1 + 81 56 79 1 + 81 56 80 0.910969 + 81 56 81 0.194293 + 81 57 45 0.00284305 + 81 57 46 0.510026 + 81 57 47 0.997087 + 81 57 48 1 + 81 57 49 1 + 81 57 50 1 + 81 57 51 1 + 81 57 52 1 + 81 57 53 1 + 81 57 54 1 + 81 57 55 1 + 81 57 56 1 + 81 57 57 1 + 81 57 58 1 + 81 57 59 1 + 81 57 60 1 + 81 57 61 1 + 81 57 62 1 + 81 57 63 1 + 81 57 64 1 + 81 57 65 1 + 81 57 66 1 + 81 57 67 1 + 81 57 68 1 + 81 57 69 1 + 81 57 70 1 + 81 57 71 1 + 81 57 72 1 + 81 57 73 1 + 81 57 74 1 + 81 57 75 1 + 81 57 76 1 + 81 57 77 1 + 81 57 78 1 + 81 57 79 1 + 81 57 80 0.997087 + 81 57 81 0.510026 + 81 57 82 0.00284305 + 81 58 45 0.0622884 + 81 58 46 0.787228 + 81 58 47 1 + 81 58 48 1 + 81 58 49 1 + 81 58 50 1 + 81 58 51 1 + 81 58 52 1 + 81 58 53 1 + 81 58 54 1 + 81 58 55 1 + 81 58 56 1 + 81 58 57 1 + 81 58 58 1 + 81 58 59 1 + 81 58 60 1 + 81 58 61 1 + 81 58 62 1 + 81 58 63 1 + 81 58 64 1 + 81 58 65 1 + 81 58 66 1 + 81 58 67 1 + 81 58 68 1 + 81 58 69 1 + 81 58 70 1 + 81 58 71 1 + 81 58 72 1 + 81 58 73 1 + 81 58 74 1 + 81 58 75 1 + 81 58 76 1 + 81 58 77 1 + 81 58 78 1 + 81 58 79 1 + 81 58 80 1 + 81 58 81 0.787228 + 81 58 82 0.0622884 + 81 59 45 0.196147 + 81 59 46 0.931469 + 81 59 47 1 + 81 59 48 1 + 81 59 49 1 + 81 59 50 1 + 81 59 51 1 + 81 59 52 1 + 81 59 53 1 + 81 59 54 1 + 81 59 55 1 + 81 59 56 1 + 81 59 57 1 + 81 59 58 1 + 81 59 59 1 + 81 59 60 1 + 81 59 61 1 + 81 59 62 1 + 81 59 63 1 + 81 59 64 1 + 81 59 65 1 + 81 59 66 1 + 81 59 67 1 + 81 59 68 1 + 81 59 69 1 + 81 59 70 1 + 81 59 71 1 + 81 59 72 1 + 81 59 73 1 + 81 59 74 1 + 81 59 75 1 + 81 59 76 1 + 81 59 77 1 + 81 59 78 1 + 81 59 79 1 + 81 59 80 1 + 81 59 81 0.931469 + 81 59 82 0.196147 + 81 60 45 0.358249 + 81 60 46 0.988806 + 81 60 47 1 + 81 60 48 1 + 81 60 49 1 + 81 60 50 1 + 81 60 51 1 + 81 60 52 1 + 81 60 53 1 + 81 60 54 1 + 81 60 55 1 + 81 60 56 1 + 81 60 57 1 + 81 60 58 1 + 81 60 59 1 + 81 60 60 1 + 81 60 61 1 + 81 60 62 1 + 81 60 63 1 + 81 60 64 1 + 81 60 65 1 + 81 60 66 1 + 81 60 67 1 + 81 60 68 1 + 81 60 69 1 + 81 60 70 1 + 81 60 71 1 + 81 60 72 1 + 81 60 73 1 + 81 60 74 1 + 81 60 75 1 + 81 60 76 1 + 81 60 77 1 + 81 60 78 1 + 81 60 79 1 + 81 60 80 1 + 81 60 81 0.988806 + 81 60 82 0.358249 + 81 61 44 7.7901e-05 + 81 61 45 0.509943 + 81 61 46 0.999903 + 81 61 47 1 + 81 61 48 1 + 81 61 49 1 + 81 61 50 1 + 81 61 51 1 + 81 61 52 1 + 81 61 53 1 + 81 61 54 1 + 81 61 55 1 + 81 61 56 1 + 81 61 57 1 + 81 61 58 1 + 81 61 59 1 + 81 61 60 1 + 81 61 61 1 + 81 61 62 1 + 81 61 63 1 + 81 61 64 1 + 81 61 65 1 + 81 61 66 1 + 81 61 67 1 + 81 61 68 1 + 81 61 69 1 + 81 61 70 1 + 81 61 71 1 + 81 61 72 1 + 81 61 73 1 + 81 61 74 1 + 81 61 75 1 + 81 61 76 1 + 81 61 77 1 + 81 61 78 1 + 81 61 79 1 + 81 61 80 1 + 81 61 81 0.999903 + 81 61 82 0.509943 + 81 61 83 7.7901e-05 + 81 62 44 0.00382379 + 81 62 45 0.613886 + 81 62 46 1 + 81 62 47 1 + 81 62 48 1 + 81 62 49 1 + 81 62 50 1 + 81 62 51 1 + 81 62 52 1 + 81 62 53 1 + 81 62 54 1 + 81 62 55 1 + 81 62 56 1 + 81 62 57 1 + 81 62 58 1 + 81 62 59 1 + 81 62 60 1 + 81 62 61 1 + 81 62 62 1 + 81 62 63 1 + 81 62 64 1 + 81 62 65 1 + 81 62 66 1 + 81 62 67 1 + 81 62 68 1 + 81 62 69 1 + 81 62 70 1 + 81 62 71 1 + 81 62 72 1 + 81 62 73 1 + 81 62 74 1 + 81 62 75 1 + 81 62 76 1 + 81 62 77 1 + 81 62 78 1 + 81 62 79 1 + 81 62 80 1 + 81 62 81 1 + 81 62 82 0.613886 + 81 62 83 0.00382379 + 81 63 44 0.00976158 + 81 63 45 0.661608 + 81 63 46 1 + 81 63 47 1 + 81 63 48 1 + 81 63 49 1 + 81 63 50 1 + 81 63 51 1 + 81 63 52 1 + 81 63 53 1 + 81 63 54 1 + 81 63 55 1 + 81 63 56 1 + 81 63 57 1 + 81 63 58 1 + 81 63 59 1 + 81 63 60 1 + 81 63 61 1 + 81 63 62 1 + 81 63 63 1 + 81 63 64 1 + 81 63 65 1 + 81 63 66 1 + 81 63 67 1 + 81 63 68 1 + 81 63 69 1 + 81 63 70 1 + 81 63 71 1 + 81 63 72 1 + 81 63 73 1 + 81 63 74 1 + 81 63 75 1 + 81 63 76 1 + 81 63 77 1 + 81 63 78 1 + 81 63 79 1 + 81 63 80 1 + 81 63 81 1 + 81 63 82 0.661608 + 81 63 83 0.00976158 + 81 64 44 0.00976158 + 81 64 45 0.661608 + 81 64 46 1 + 81 64 47 1 + 81 64 48 1 + 81 64 49 1 + 81 64 50 1 + 81 64 51 1 + 81 64 52 1 + 81 64 53 1 + 81 64 54 1 + 81 64 55 1 + 81 64 56 1 + 81 64 57 1 + 81 64 58 1 + 81 64 59 1 + 81 64 60 1 + 81 64 61 1 + 81 64 62 1 + 81 64 63 1 + 81 64 64 1 + 81 64 65 1 + 81 64 66 1 + 81 64 67 1 + 81 64 68 1 + 81 64 69 1 + 81 64 70 1 + 81 64 71 1 + 81 64 72 1 + 81 64 73 1 + 81 64 74 1 + 81 64 75 1 + 81 64 76 1 + 81 64 77 1 + 81 64 78 1 + 81 64 79 1 + 81 64 80 1 + 81 64 81 1 + 81 64 82 0.661608 + 81 64 83 0.00976158 + 81 65 44 0.00382379 + 81 65 45 0.613886 + 81 65 46 1 + 81 65 47 1 + 81 65 48 1 + 81 65 49 1 + 81 65 50 1 + 81 65 51 1 + 81 65 52 1 + 81 65 53 1 + 81 65 54 1 + 81 65 55 1 + 81 65 56 1 + 81 65 57 1 + 81 65 58 1 + 81 65 59 1 + 81 65 60 1 + 81 65 61 1 + 81 65 62 1 + 81 65 63 1 + 81 65 64 1 + 81 65 65 1 + 81 65 66 1 + 81 65 67 1 + 81 65 68 1 + 81 65 69 1 + 81 65 70 1 + 81 65 71 1 + 81 65 72 1 + 81 65 73 1 + 81 65 74 1 + 81 65 75 1 + 81 65 76 1 + 81 65 77 1 + 81 65 78 1 + 81 65 79 1 + 81 65 80 1 + 81 65 81 1 + 81 65 82 0.613886 + 81 65 83 0.00382379 + 81 66 44 7.7901e-05 + 81 66 45 0.509943 + 81 66 46 0.999903 + 81 66 47 1 + 81 66 48 1 + 81 66 49 1 + 81 66 50 1 + 81 66 51 1 + 81 66 52 1 + 81 66 53 1 + 81 66 54 1 + 81 66 55 1 + 81 66 56 1 + 81 66 57 1 + 81 66 58 1 + 81 66 59 1 + 81 66 60 1 + 81 66 61 1 + 81 66 62 1 + 81 66 63 1 + 81 66 64 1 + 81 66 65 1 + 81 66 66 1 + 81 66 67 1 + 81 66 68 1 + 81 66 69 1 + 81 66 70 1 + 81 66 71 1 + 81 66 72 1 + 81 66 73 1 + 81 66 74 1 + 81 66 75 1 + 81 66 76 1 + 81 66 77 1 + 81 66 78 1 + 81 66 79 1 + 81 66 80 1 + 81 66 81 0.999903 + 81 66 82 0.509943 + 81 66 83 7.7901e-05 + 81 67 45 0.358249 + 81 67 46 0.988806 + 81 67 47 1 + 81 67 48 1 + 81 67 49 1 + 81 67 50 1 + 81 67 51 1 + 81 67 52 1 + 81 67 53 1 + 81 67 54 1 + 81 67 55 1 + 81 67 56 1 + 81 67 57 1 + 81 67 58 1 + 81 67 59 1 + 81 67 60 1 + 81 67 61 1 + 81 67 62 1 + 81 67 63 1 + 81 67 64 1 + 81 67 65 1 + 81 67 66 1 + 81 67 67 1 + 81 67 68 1 + 81 67 69 1 + 81 67 70 1 + 81 67 71 1 + 81 67 72 1 + 81 67 73 1 + 81 67 74 1 + 81 67 75 1 + 81 67 76 1 + 81 67 77 1 + 81 67 78 1 + 81 67 79 1 + 81 67 80 1 + 81 67 81 0.988806 + 81 67 82 0.358249 + 81 68 45 0.196147 + 81 68 46 0.931469 + 81 68 47 1 + 81 68 48 1 + 81 68 49 1 + 81 68 50 1 + 81 68 51 1 + 81 68 52 1 + 81 68 53 1 + 81 68 54 1 + 81 68 55 1 + 81 68 56 1 + 81 68 57 1 + 81 68 58 1 + 81 68 59 1 + 81 68 60 1 + 81 68 61 1 + 81 68 62 1 + 81 68 63 1 + 81 68 64 1 + 81 68 65 1 + 81 68 66 1 + 81 68 67 1 + 81 68 68 1 + 81 68 69 1 + 81 68 70 1 + 81 68 71 1 + 81 68 72 1 + 81 68 73 1 + 81 68 74 1 + 81 68 75 1 + 81 68 76 1 + 81 68 77 1 + 81 68 78 1 + 81 68 79 1 + 81 68 80 1 + 81 68 81 0.931469 + 81 68 82 0.196147 + 81 69 45 0.0622884 + 81 69 46 0.787228 + 81 69 47 1 + 81 69 48 1 + 81 69 49 1 + 81 69 50 1 + 81 69 51 1 + 81 69 52 1 + 81 69 53 1 + 81 69 54 1 + 81 69 55 1 + 81 69 56 1 + 81 69 57 1 + 81 69 58 1 + 81 69 59 1 + 81 69 60 1 + 81 69 61 1 + 81 69 62 1 + 81 69 63 1 + 81 69 64 1 + 81 69 65 1 + 81 69 66 1 + 81 69 67 1 + 81 69 68 1 + 81 69 69 1 + 81 69 70 1 + 81 69 71 1 + 81 69 72 1 + 81 69 73 1 + 81 69 74 1 + 81 69 75 1 + 81 69 76 1 + 81 69 77 1 + 81 69 78 1 + 81 69 79 1 + 81 69 80 1 + 81 69 81 0.787228 + 81 69 82 0.0622884 + 81 70 45 0.00284305 + 81 70 46 0.510026 + 81 70 47 0.997087 + 81 70 48 1 + 81 70 49 1 + 81 70 50 1 + 81 70 51 1 + 81 70 52 1 + 81 70 53 1 + 81 70 54 1 + 81 70 55 1 + 81 70 56 1 + 81 70 57 1 + 81 70 58 1 + 81 70 59 1 + 81 70 60 1 + 81 70 61 1 + 81 70 62 1 + 81 70 63 1 + 81 70 64 1 + 81 70 65 1 + 81 70 66 1 + 81 70 67 1 + 81 70 68 1 + 81 70 69 1 + 81 70 70 1 + 81 70 71 1 + 81 70 72 1 + 81 70 73 1 + 81 70 74 1 + 81 70 75 1 + 81 70 76 1 + 81 70 77 1 + 81 70 78 1 + 81 70 79 1 + 81 70 80 0.997087 + 81 70 81 0.510026 + 81 70 82 0.00284305 + 81 71 46 0.194293 + 81 71 47 0.910969 + 81 71 48 1 + 81 71 49 1 + 81 71 50 1 + 81 71 51 1 + 81 71 52 1 + 81 71 53 1 + 81 71 54 1 + 81 71 55 1 + 81 71 56 1 + 81 71 57 1 + 81 71 58 1 + 81 71 59 1 + 81 71 60 1 + 81 71 61 1 + 81 71 62 1 + 81 71 63 1 + 81 71 64 1 + 81 71 65 1 + 81 71 66 1 + 81 71 67 1 + 81 71 68 1 + 81 71 69 1 + 81 71 70 1 + 81 71 71 1 + 81 71 72 1 + 81 71 73 1 + 81 71 74 1 + 81 71 75 1 + 81 71 76 1 + 81 71 77 1 + 81 71 78 1 + 81 71 79 1 + 81 71 80 0.910969 + 81 71 81 0.194293 + 81 72 46 0.0207198 + 81 72 47 0.611412 + 81 72 48 0.998538 + 81 72 49 1 + 81 72 50 1 + 81 72 51 1 + 81 72 52 1 + 81 72 53 1 + 81 72 54 1 + 81 72 55 1 + 81 72 56 1 + 81 72 57 1 + 81 72 58 1 + 81 72 59 1 + 81 72 60 1 + 81 72 61 1 + 81 72 62 1 + 81 72 63 1 + 81 72 64 1 + 81 72 65 1 + 81 72 66 1 + 81 72 67 1 + 81 72 68 1 + 81 72 69 1 + 81 72 70 1 + 81 72 71 1 + 81 72 72 1 + 81 72 73 1 + 81 72 74 1 + 81 72 75 1 + 81 72 76 1 + 81 72 77 1 + 81 72 78 1 + 81 72 79 0.998538 + 81 72 80 0.611412 + 81 72 81 0.0207198 + 81 73 47 0.192797 + 81 73 48 0.887171 + 81 73 49 1 + 81 73 50 1 + 81 73 51 1 + 81 73 52 1 + 81 73 53 1 + 81 73 54 1 + 81 73 55 1 + 81 73 56 1 + 81 73 57 1 + 81 73 58 1 + 81 73 59 1 + 81 73 60 1 + 81 73 61 1 + 81 73 62 1 + 81 73 63 1 + 81 73 64 1 + 81 73 65 1 + 81 73 66 1 + 81 73 67 1 + 81 73 68 1 + 81 73 69 1 + 81 73 70 1 + 81 73 71 1 + 81 73 72 1 + 81 73 73 1 + 81 73 74 1 + 81 73 75 1 + 81 73 76 1 + 81 73 77 1 + 81 73 78 1 + 81 73 79 0.887171 + 81 73 80 0.192797 + 81 74 47 0.00833029 + 81 74 48 0.459326 + 81 74 49 0.977331 + 81 74 50 1 + 81 74 51 1 + 81 74 52 1 + 81 74 53 1 + 81 74 54 1 + 81 74 55 1 + 81 74 56 1 + 81 74 57 1 + 81 74 58 1 + 81 74 59 1 + 81 74 60 1 + 81 74 61 1 + 81 74 62 1 + 81 74 63 1 + 81 74 64 1 + 81 74 65 1 + 81 74 66 1 + 81 74 67 1 + 81 74 68 1 + 81 74 69 1 + 81 74 70 1 + 81 74 71 1 + 81 74 72 1 + 81 74 73 1 + 81 74 74 1 + 81 74 75 1 + 81 74 76 1 + 81 74 77 1 + 81 74 78 0.977331 + 81 74 79 0.459326 + 81 74 80 0.00833029 + 81 75 48 0.0602217 + 81 75 49 0.659059 + 81 75 50 0.995483 + 81 75 51 1 + 81 75 52 1 + 81 75 53 1 + 81 75 54 1 + 81 75 55 1 + 81 75 56 1 + 81 75 57 1 + 81 75 58 1 + 81 75 59 1 + 81 75 60 1 + 81 75 61 1 + 81 75 62 1 + 81 75 63 1 + 81 75 64 1 + 81 75 65 1 + 81 75 66 1 + 81 75 67 1 + 81 75 68 1 + 81 75 69 1 + 81 75 70 1 + 81 75 71 1 + 81 75 72 1 + 81 75 73 1 + 81 75 74 1 + 81 75 75 1 + 81 75 76 1 + 81 75 77 0.995483 + 81 75 78 0.659059 + 81 75 79 0.0602217 + 81 76 49 0.127131 + 81 76 50 0.749071 + 81 76 51 0.99797 + 81 76 52 1 + 81 76 53 1 + 81 76 54 1 + 81 76 55 1 + 81 76 56 1 + 81 76 57 1 + 81 76 58 1 + 81 76 59 1 + 81 76 60 1 + 81 76 61 1 + 81 76 62 1 + 81 76 63 1 + 81 76 64 1 + 81 76 65 1 + 81 76 66 1 + 81 76 67 1 + 81 76 68 1 + 81 76 69 1 + 81 76 70 1 + 81 76 71 1 + 81 76 72 1 + 81 76 73 1 + 81 76 74 1 + 81 76 75 1 + 81 76 76 0.99797 + 81 76 77 0.749071 + 81 76 78 0.127131 + 81 77 49 1.68961e-05 + 81 77 50 0.156902 + 81 77 51 0.749071 + 81 77 52 0.995483 + 81 77 53 1 + 81 77 54 1 + 81 77 55 1 + 81 77 56 1 + 81 77 57 1 + 81 77 58 1 + 81 77 59 1 + 81 77 60 1 + 81 77 61 1 + 81 77 62 1 + 81 77 63 1 + 81 77 64 1 + 81 77 65 1 + 81 77 66 1 + 81 77 67 1 + 81 77 68 1 + 81 77 69 1 + 81 77 70 1 + 81 77 71 1 + 81 77 72 1 + 81 77 73 1 + 81 77 74 1 + 81 77 75 0.995483 + 81 77 76 0.749071 + 81 77 77 0.156902 + 81 77 78 1.68961e-05 + 81 78 50 1.68961e-05 + 81 78 51 0.127131 + 81 78 52 0.659059 + 81 78 53 0.977331 + 81 78 54 1 + 81 78 55 1 + 81 78 56 1 + 81 78 57 1 + 81 78 58 1 + 81 78 59 1 + 81 78 60 1 + 81 78 61 1 + 81 78 62 1 + 81 78 63 1 + 81 78 64 1 + 81 78 65 1 + 81 78 66 1 + 81 78 67 1 + 81 78 68 1 + 81 78 69 1 + 81 78 70 1 + 81 78 71 1 + 81 78 72 1 + 81 78 73 1 + 81 78 74 0.977331 + 81 78 75 0.659059 + 81 78 76 0.127131 + 81 78 77 1.68961e-05 + 81 79 52 0.0602217 + 81 79 53 0.459326 + 81 79 54 0.887171 + 81 79 55 0.998538 + 81 79 56 1 + 81 79 57 1 + 81 79 58 1 + 81 79 59 1 + 81 79 60 1 + 81 79 61 1 + 81 79 62 1 + 81 79 63 1 + 81 79 64 1 + 81 79 65 1 + 81 79 66 1 + 81 79 67 1 + 81 79 68 1 + 81 79 69 1 + 81 79 70 1 + 81 79 71 1 + 81 79 72 0.998538 + 81 79 73 0.887171 + 81 79 74 0.459326 + 81 79 75 0.0602217 + 81 80 53 0.00833029 + 81 80 54 0.192797 + 81 80 55 0.611412 + 81 80 56 0.910969 + 81 80 57 0.997087 + 81 80 58 1 + 81 80 59 1 + 81 80 60 1 + 81 80 61 1 + 81 80 62 1 + 81 80 63 1 + 81 80 64 1 + 81 80 65 1 + 81 80 66 1 + 81 80 67 1 + 81 80 68 1 + 81 80 69 1 + 81 80 70 0.997087 + 81 80 71 0.910969 + 81 80 72 0.611412 + 81 80 73 0.192797 + 81 80 74 0.00833029 + 81 81 55 0.0207198 + 81 81 56 0.194293 + 81 81 57 0.510026 + 81 81 58 0.787228 + 81 81 59 0.931469 + 81 81 60 0.988806 + 81 81 61 0.999903 + 81 81 62 1 + 81 81 63 1 + 81 81 64 1 + 81 81 65 1 + 81 81 66 0.999903 + 81 81 67 0.988806 + 81 81 68 0.931469 + 81 81 69 0.787228 + 81 81 70 0.510026 + 81 81 71 0.194293 + 81 81 72 0.0207198 + 81 82 57 0.00284305 + 81 82 58 0.0622884 + 81 82 59 0.196147 + 81 82 60 0.358249 + 81 82 61 0.509943 + 81 82 62 0.613886 + 81 82 63 0.661608 + 81 82 64 0.661608 + 81 82 65 0.613886 + 81 82 66 0.509943 + 81 82 67 0.358249 + 81 82 68 0.196147 + 81 82 69 0.0622884 + 81 82 70 0.00284305 + 81 83 61 7.7901e-05 + 81 83 62 0.00382379 + 81 83 63 0.00976158 + 81 83 64 0.00976158 + 81 83 65 0.00382379 + 81 83 66 7.7901e-05 + 82 45 61 0.0011128 + 82 45 62 0.00998524 + 82 45 63 0.0189458 + 82 45 64 0.0189458 + 82 45 65 0.00998524 + 82 45 66 0.0011128 + 82 46 57 0.00284305 + 82 46 58 0.0622884 + 82 46 59 0.196147 + 82 46 60 0.358249 + 82 46 61 0.509943 + 82 46 62 0.613886 + 82 46 63 0.661608 + 82 46 64 0.661608 + 82 46 65 0.613886 + 82 46 66 0.509943 + 82 46 67 0.358249 + 82 46 68 0.196147 + 82 46 69 0.0622884 + 82 46 70 0.00284305 + 82 47 55 0.0128488 + 82 47 56 0.16137 + 82 47 57 0.458559 + 82 47 58 0.747928 + 82 47 59 0.909115 + 82 47 60 0.979426 + 82 47 61 0.9989 + 82 47 62 1 + 82 47 63 1 + 82 47 64 1 + 82 47 65 1 + 82 47 66 0.9989 + 82 47 67 0.979426 + 82 47 68 0.909115 + 82 47 69 0.747928 + 82 47 70 0.458559 + 82 47 71 0.16137 + 82 47 72 0.0128488 + 82 48 53 0.00195783 + 82 48 54 0.129721 + 82 48 55 0.51 + 82 48 56 0.856237 + 82 48 57 0.987756 + 82 48 58 1 + 82 48 59 1 + 82 48 60 1 + 82 48 61 1 + 82 48 62 1 + 82 48 63 1 + 82 48 64 1 + 82 48 65 1 + 82 48 66 1 + 82 48 67 1 + 82 48 68 1 + 82 48 69 1 + 82 48 70 0.987756 + 82 48 71 0.856237 + 82 48 72 0.51 + 82 48 73 0.129721 + 82 48 74 0.00195783 + 82 49 52 0.0216196 + 82 49 53 0.315112 + 82 49 54 0.78779 + 82 49 55 0.986811 + 82 49 56 1 + 82 49 57 1 + 82 49 58 1 + 82 49 59 1 + 82 49 60 1 + 82 49 61 1 + 82 49 62 1 + 82 49 63 1 + 82 49 64 1 + 82 49 65 1 + 82 49 66 1 + 82 49 67 1 + 82 49 68 1 + 82 49 69 1 + 82 49 70 1 + 82 49 71 1 + 82 49 72 0.986811 + 82 49 73 0.78779 + 82 49 74 0.315112 + 82 49 75 0.0216196 + 82 50 51 0.0443033 + 82 50 52 0.459682 + 82 50 53 0.913417 + 82 50 54 0.999965 + 82 50 55 1 + 82 50 56 1 + 82 50 57 1 + 82 50 58 1 + 82 50 59 1 + 82 50 60 1 + 82 50 61 1 + 82 50 62 1 + 82 50 63 1 + 82 50 64 1 + 82 50 65 1 + 82 50 66 1 + 82 50 67 1 + 82 50 68 1 + 82 50 69 1 + 82 50 70 1 + 82 50 71 1 + 82 50 72 1 + 82 50 73 0.999965 + 82 50 74 0.913417 + 82 50 75 0.459682 + 82 50 76 0.0443033 + 82 51 50 0.0443033 + 82 51 51 0.51002 + 82 51 52 0.952748 + 82 51 53 1 + 82 51 54 1 + 82 51 55 1 + 82 51 56 1 + 82 51 57 1 + 82 51 58 1 + 82 51 59 1 + 82 51 60 1 + 82 51 61 1 + 82 51 62 1 + 82 51 63 1 + 82 51 64 1 + 82 51 65 1 + 82 51 66 1 + 82 51 67 1 + 82 51 68 1 + 82 51 69 1 + 82 51 70 1 + 82 51 71 1 + 82 51 72 1 + 82 51 73 1 + 82 51 74 1 + 82 51 75 0.952748 + 82 51 76 0.51002 + 82 51 77 0.0443033 + 82 52 49 0.0216196 + 82 52 50 0.459682 + 82 52 51 0.952748 + 82 52 52 1 + 82 52 53 1 + 82 52 54 1 + 82 52 55 1 + 82 52 56 1 + 82 52 57 1 + 82 52 58 1 + 82 52 59 1 + 82 52 60 1 + 82 52 61 1 + 82 52 62 1 + 82 52 63 1 + 82 52 64 1 + 82 52 65 1 + 82 52 66 1 + 82 52 67 1 + 82 52 68 1 + 82 52 69 1 + 82 52 70 1 + 82 52 71 1 + 82 52 72 1 + 82 52 73 1 + 82 52 74 1 + 82 52 75 1 + 82 52 76 0.952748 + 82 52 77 0.459682 + 82 52 78 0.0216196 + 82 53 48 0.00195783 + 82 53 49 0.315112 + 82 53 50 0.913417 + 82 53 51 1 + 82 53 52 1 + 82 53 53 1 + 82 53 54 1 + 82 53 55 1 + 82 53 56 1 + 82 53 57 1 + 82 53 58 1 + 82 53 59 1 + 82 53 60 1 + 82 53 61 1 + 82 53 62 1 + 82 53 63 1 + 82 53 64 1 + 82 53 65 1 + 82 53 66 1 + 82 53 67 1 + 82 53 68 1 + 82 53 69 1 + 82 53 70 1 + 82 53 71 1 + 82 53 72 1 + 82 53 73 1 + 82 53 74 1 + 82 53 75 1 + 82 53 76 1 + 82 53 77 0.913417 + 82 53 78 0.315112 + 82 53 79 0.00195783 + 82 54 48 0.129721 + 82 54 49 0.78779 + 82 54 50 0.999965 + 82 54 51 1 + 82 54 52 1 + 82 54 53 1 + 82 54 54 1 + 82 54 55 1 + 82 54 56 1 + 82 54 57 1 + 82 54 58 1 + 82 54 59 1 + 82 54 60 1 + 82 54 61 1 + 82 54 62 1 + 82 54 63 1 + 82 54 64 1 + 82 54 65 1 + 82 54 66 1 + 82 54 67 1 + 82 54 68 1 + 82 54 69 1 + 82 54 70 1 + 82 54 71 1 + 82 54 72 1 + 82 54 73 1 + 82 54 74 1 + 82 54 75 1 + 82 54 76 1 + 82 54 77 0.999965 + 82 54 78 0.78779 + 82 54 79 0.129721 + 82 55 47 0.0128488 + 82 55 48 0.51 + 82 55 49 0.986811 + 82 55 50 1 + 82 55 51 1 + 82 55 52 1 + 82 55 53 1 + 82 55 54 1 + 82 55 55 1 + 82 55 56 1 + 82 55 57 1 + 82 55 58 1 + 82 55 59 1 + 82 55 60 1 + 82 55 61 1 + 82 55 62 1 + 82 55 63 1 + 82 55 64 1 + 82 55 65 1 + 82 55 66 1 + 82 55 67 1 + 82 55 68 1 + 82 55 69 1 + 82 55 70 1 + 82 55 71 1 + 82 55 72 1 + 82 55 73 1 + 82 55 74 1 + 82 55 75 1 + 82 55 76 1 + 82 55 77 1 + 82 55 78 0.986811 + 82 55 79 0.51 + 82 55 80 0.0128488 + 82 56 47 0.16137 + 82 56 48 0.856237 + 82 56 49 1 + 82 56 50 1 + 82 56 51 1 + 82 56 52 1 + 82 56 53 1 + 82 56 54 1 + 82 56 55 1 + 82 56 56 1 + 82 56 57 1 + 82 56 58 1 + 82 56 59 1 + 82 56 60 1 + 82 56 61 1 + 82 56 62 1 + 82 56 63 1 + 82 56 64 1 + 82 56 65 1 + 82 56 66 1 + 82 56 67 1 + 82 56 68 1 + 82 56 69 1 + 82 56 70 1 + 82 56 71 1 + 82 56 72 1 + 82 56 73 1 + 82 56 74 1 + 82 56 75 1 + 82 56 76 1 + 82 56 77 1 + 82 56 78 1 + 82 56 79 0.856237 + 82 56 80 0.16137 + 82 57 46 0.00284305 + 82 57 47 0.458559 + 82 57 48 0.987756 + 82 57 49 1 + 82 57 50 1 + 82 57 51 1 + 82 57 52 1 + 82 57 53 1 + 82 57 54 1 + 82 57 55 1 + 82 57 56 1 + 82 57 57 1 + 82 57 58 1 + 82 57 59 1 + 82 57 60 1 + 82 57 61 1 + 82 57 62 1 + 82 57 63 1 + 82 57 64 1 + 82 57 65 1 + 82 57 66 1 + 82 57 67 1 + 82 57 68 1 + 82 57 69 1 + 82 57 70 1 + 82 57 71 1 + 82 57 72 1 + 82 57 73 1 + 82 57 74 1 + 82 57 75 1 + 82 57 76 1 + 82 57 77 1 + 82 57 78 1 + 82 57 79 0.987756 + 82 57 80 0.458559 + 82 57 81 0.00284305 + 82 58 46 0.0622884 + 82 58 47 0.747928 + 82 58 48 1 + 82 58 49 1 + 82 58 50 1 + 82 58 51 1 + 82 58 52 1 + 82 58 53 1 + 82 58 54 1 + 82 58 55 1 + 82 58 56 1 + 82 58 57 1 + 82 58 58 1 + 82 58 59 1 + 82 58 60 1 + 82 58 61 1 + 82 58 62 1 + 82 58 63 1 + 82 58 64 1 + 82 58 65 1 + 82 58 66 1 + 82 58 67 1 + 82 58 68 1 + 82 58 69 1 + 82 58 70 1 + 82 58 71 1 + 82 58 72 1 + 82 58 73 1 + 82 58 74 1 + 82 58 75 1 + 82 58 76 1 + 82 58 77 1 + 82 58 78 1 + 82 58 79 1 + 82 58 80 0.747928 + 82 58 81 0.0622884 + 82 59 46 0.196147 + 82 59 47 0.909115 + 82 59 48 1 + 82 59 49 1 + 82 59 50 1 + 82 59 51 1 + 82 59 52 1 + 82 59 53 1 + 82 59 54 1 + 82 59 55 1 + 82 59 56 1 + 82 59 57 1 + 82 59 58 1 + 82 59 59 1 + 82 59 60 1 + 82 59 61 1 + 82 59 62 1 + 82 59 63 1 + 82 59 64 1 + 82 59 65 1 + 82 59 66 1 + 82 59 67 1 + 82 59 68 1 + 82 59 69 1 + 82 59 70 1 + 82 59 71 1 + 82 59 72 1 + 82 59 73 1 + 82 59 74 1 + 82 59 75 1 + 82 59 76 1 + 82 59 77 1 + 82 59 78 1 + 82 59 79 1 + 82 59 80 0.909115 + 82 59 81 0.196147 + 82 60 46 0.358249 + 82 60 47 0.979426 + 82 60 48 1 + 82 60 49 1 + 82 60 50 1 + 82 60 51 1 + 82 60 52 1 + 82 60 53 1 + 82 60 54 1 + 82 60 55 1 + 82 60 56 1 + 82 60 57 1 + 82 60 58 1 + 82 60 59 1 + 82 60 60 1 + 82 60 61 1 + 82 60 62 1 + 82 60 63 1 + 82 60 64 1 + 82 60 65 1 + 82 60 66 1 + 82 60 67 1 + 82 60 68 1 + 82 60 69 1 + 82 60 70 1 + 82 60 71 1 + 82 60 72 1 + 82 60 73 1 + 82 60 74 1 + 82 60 75 1 + 82 60 76 1 + 82 60 77 1 + 82 60 78 1 + 82 60 79 1 + 82 60 80 0.979426 + 82 60 81 0.358249 + 82 61 45 0.0011128 + 82 61 46 0.509943 + 82 61 47 0.9989 + 82 61 48 1 + 82 61 49 1 + 82 61 50 1 + 82 61 51 1 + 82 61 52 1 + 82 61 53 1 + 82 61 54 1 + 82 61 55 1 + 82 61 56 1 + 82 61 57 1 + 82 61 58 1 + 82 61 59 1 + 82 61 60 1 + 82 61 61 1 + 82 61 62 1 + 82 61 63 1 + 82 61 64 1 + 82 61 65 1 + 82 61 66 1 + 82 61 67 1 + 82 61 68 1 + 82 61 69 1 + 82 61 70 1 + 82 61 71 1 + 82 61 72 1 + 82 61 73 1 + 82 61 74 1 + 82 61 75 1 + 82 61 76 1 + 82 61 77 1 + 82 61 78 1 + 82 61 79 1 + 82 61 80 0.9989 + 82 61 81 0.509943 + 82 61 82 0.0011128 + 82 62 45 0.00998524 + 82 62 46 0.613886 + 82 62 47 1 + 82 62 48 1 + 82 62 49 1 + 82 62 50 1 + 82 62 51 1 + 82 62 52 1 + 82 62 53 1 + 82 62 54 1 + 82 62 55 1 + 82 62 56 1 + 82 62 57 1 + 82 62 58 1 + 82 62 59 1 + 82 62 60 1 + 82 62 61 1 + 82 62 62 1 + 82 62 63 1 + 82 62 64 1 + 82 62 65 1 + 82 62 66 1 + 82 62 67 1 + 82 62 68 1 + 82 62 69 1 + 82 62 70 1 + 82 62 71 1 + 82 62 72 1 + 82 62 73 1 + 82 62 74 1 + 82 62 75 1 + 82 62 76 1 + 82 62 77 1 + 82 62 78 1 + 82 62 79 1 + 82 62 80 1 + 82 62 81 0.613886 + 82 62 82 0.00998524 + 82 63 45 0.0189458 + 82 63 46 0.661608 + 82 63 47 1 + 82 63 48 1 + 82 63 49 1 + 82 63 50 1 + 82 63 51 1 + 82 63 52 1 + 82 63 53 1 + 82 63 54 1 + 82 63 55 1 + 82 63 56 1 + 82 63 57 1 + 82 63 58 1 + 82 63 59 1 + 82 63 60 1 + 82 63 61 1 + 82 63 62 1 + 82 63 63 1 + 82 63 64 1 + 82 63 65 1 + 82 63 66 1 + 82 63 67 1 + 82 63 68 1 + 82 63 69 1 + 82 63 70 1 + 82 63 71 1 + 82 63 72 1 + 82 63 73 1 + 82 63 74 1 + 82 63 75 1 + 82 63 76 1 + 82 63 77 1 + 82 63 78 1 + 82 63 79 1 + 82 63 80 1 + 82 63 81 0.661608 + 82 63 82 0.0189458 + 82 64 45 0.0189458 + 82 64 46 0.661608 + 82 64 47 1 + 82 64 48 1 + 82 64 49 1 + 82 64 50 1 + 82 64 51 1 + 82 64 52 1 + 82 64 53 1 + 82 64 54 1 + 82 64 55 1 + 82 64 56 1 + 82 64 57 1 + 82 64 58 1 + 82 64 59 1 + 82 64 60 1 + 82 64 61 1 + 82 64 62 1 + 82 64 63 1 + 82 64 64 1 + 82 64 65 1 + 82 64 66 1 + 82 64 67 1 + 82 64 68 1 + 82 64 69 1 + 82 64 70 1 + 82 64 71 1 + 82 64 72 1 + 82 64 73 1 + 82 64 74 1 + 82 64 75 1 + 82 64 76 1 + 82 64 77 1 + 82 64 78 1 + 82 64 79 1 + 82 64 80 1 + 82 64 81 0.661608 + 82 64 82 0.0189458 + 82 65 45 0.00998524 + 82 65 46 0.613886 + 82 65 47 1 + 82 65 48 1 + 82 65 49 1 + 82 65 50 1 + 82 65 51 1 + 82 65 52 1 + 82 65 53 1 + 82 65 54 1 + 82 65 55 1 + 82 65 56 1 + 82 65 57 1 + 82 65 58 1 + 82 65 59 1 + 82 65 60 1 + 82 65 61 1 + 82 65 62 1 + 82 65 63 1 + 82 65 64 1 + 82 65 65 1 + 82 65 66 1 + 82 65 67 1 + 82 65 68 1 + 82 65 69 1 + 82 65 70 1 + 82 65 71 1 + 82 65 72 1 + 82 65 73 1 + 82 65 74 1 + 82 65 75 1 + 82 65 76 1 + 82 65 77 1 + 82 65 78 1 + 82 65 79 1 + 82 65 80 1 + 82 65 81 0.613886 + 82 65 82 0.00998524 + 82 66 45 0.0011128 + 82 66 46 0.509943 + 82 66 47 0.9989 + 82 66 48 1 + 82 66 49 1 + 82 66 50 1 + 82 66 51 1 + 82 66 52 1 + 82 66 53 1 + 82 66 54 1 + 82 66 55 1 + 82 66 56 1 + 82 66 57 1 + 82 66 58 1 + 82 66 59 1 + 82 66 60 1 + 82 66 61 1 + 82 66 62 1 + 82 66 63 1 + 82 66 64 1 + 82 66 65 1 + 82 66 66 1 + 82 66 67 1 + 82 66 68 1 + 82 66 69 1 + 82 66 70 1 + 82 66 71 1 + 82 66 72 1 + 82 66 73 1 + 82 66 74 1 + 82 66 75 1 + 82 66 76 1 + 82 66 77 1 + 82 66 78 1 + 82 66 79 1 + 82 66 80 0.9989 + 82 66 81 0.509943 + 82 66 82 0.0011128 + 82 67 46 0.358249 + 82 67 47 0.979426 + 82 67 48 1 + 82 67 49 1 + 82 67 50 1 + 82 67 51 1 + 82 67 52 1 + 82 67 53 1 + 82 67 54 1 + 82 67 55 1 + 82 67 56 1 + 82 67 57 1 + 82 67 58 1 + 82 67 59 1 + 82 67 60 1 + 82 67 61 1 + 82 67 62 1 + 82 67 63 1 + 82 67 64 1 + 82 67 65 1 + 82 67 66 1 + 82 67 67 1 + 82 67 68 1 + 82 67 69 1 + 82 67 70 1 + 82 67 71 1 + 82 67 72 1 + 82 67 73 1 + 82 67 74 1 + 82 67 75 1 + 82 67 76 1 + 82 67 77 1 + 82 67 78 1 + 82 67 79 1 + 82 67 80 0.979426 + 82 67 81 0.358249 + 82 68 46 0.196147 + 82 68 47 0.909115 + 82 68 48 1 + 82 68 49 1 + 82 68 50 1 + 82 68 51 1 + 82 68 52 1 + 82 68 53 1 + 82 68 54 1 + 82 68 55 1 + 82 68 56 1 + 82 68 57 1 + 82 68 58 1 + 82 68 59 1 + 82 68 60 1 + 82 68 61 1 + 82 68 62 1 + 82 68 63 1 + 82 68 64 1 + 82 68 65 1 + 82 68 66 1 + 82 68 67 1 + 82 68 68 1 + 82 68 69 1 + 82 68 70 1 + 82 68 71 1 + 82 68 72 1 + 82 68 73 1 + 82 68 74 1 + 82 68 75 1 + 82 68 76 1 + 82 68 77 1 + 82 68 78 1 + 82 68 79 1 + 82 68 80 0.909115 + 82 68 81 0.196147 + 82 69 46 0.0622884 + 82 69 47 0.747928 + 82 69 48 1 + 82 69 49 1 + 82 69 50 1 + 82 69 51 1 + 82 69 52 1 + 82 69 53 1 + 82 69 54 1 + 82 69 55 1 + 82 69 56 1 + 82 69 57 1 + 82 69 58 1 + 82 69 59 1 + 82 69 60 1 + 82 69 61 1 + 82 69 62 1 + 82 69 63 1 + 82 69 64 1 + 82 69 65 1 + 82 69 66 1 + 82 69 67 1 + 82 69 68 1 + 82 69 69 1 + 82 69 70 1 + 82 69 71 1 + 82 69 72 1 + 82 69 73 1 + 82 69 74 1 + 82 69 75 1 + 82 69 76 1 + 82 69 77 1 + 82 69 78 1 + 82 69 79 1 + 82 69 80 0.747928 + 82 69 81 0.0622884 + 82 70 46 0.00284305 + 82 70 47 0.458559 + 82 70 48 0.987756 + 82 70 49 1 + 82 70 50 1 + 82 70 51 1 + 82 70 52 1 + 82 70 53 1 + 82 70 54 1 + 82 70 55 1 + 82 70 56 1 + 82 70 57 1 + 82 70 58 1 + 82 70 59 1 + 82 70 60 1 + 82 70 61 1 + 82 70 62 1 + 82 70 63 1 + 82 70 64 1 + 82 70 65 1 + 82 70 66 1 + 82 70 67 1 + 82 70 68 1 + 82 70 69 1 + 82 70 70 1 + 82 70 71 1 + 82 70 72 1 + 82 70 73 1 + 82 70 74 1 + 82 70 75 1 + 82 70 76 1 + 82 70 77 1 + 82 70 78 1 + 82 70 79 0.987756 + 82 70 80 0.458559 + 82 70 81 0.00284305 + 82 71 47 0.16137 + 82 71 48 0.856237 + 82 71 49 1 + 82 71 50 1 + 82 71 51 1 + 82 71 52 1 + 82 71 53 1 + 82 71 54 1 + 82 71 55 1 + 82 71 56 1 + 82 71 57 1 + 82 71 58 1 + 82 71 59 1 + 82 71 60 1 + 82 71 61 1 + 82 71 62 1 + 82 71 63 1 + 82 71 64 1 + 82 71 65 1 + 82 71 66 1 + 82 71 67 1 + 82 71 68 1 + 82 71 69 1 + 82 71 70 1 + 82 71 71 1 + 82 71 72 1 + 82 71 73 1 + 82 71 74 1 + 82 71 75 1 + 82 71 76 1 + 82 71 77 1 + 82 71 78 1 + 82 71 79 0.856237 + 82 71 80 0.16137 + 82 72 47 0.0128488 + 82 72 48 0.51 + 82 72 49 0.986811 + 82 72 50 1 + 82 72 51 1 + 82 72 52 1 + 82 72 53 1 + 82 72 54 1 + 82 72 55 1 + 82 72 56 1 + 82 72 57 1 + 82 72 58 1 + 82 72 59 1 + 82 72 60 1 + 82 72 61 1 + 82 72 62 1 + 82 72 63 1 + 82 72 64 1 + 82 72 65 1 + 82 72 66 1 + 82 72 67 1 + 82 72 68 1 + 82 72 69 1 + 82 72 70 1 + 82 72 71 1 + 82 72 72 1 + 82 72 73 1 + 82 72 74 1 + 82 72 75 1 + 82 72 76 1 + 82 72 77 1 + 82 72 78 0.986811 + 82 72 79 0.51 + 82 72 80 0.0128488 + 82 73 48 0.129721 + 82 73 49 0.78779 + 82 73 50 0.999965 + 82 73 51 1 + 82 73 52 1 + 82 73 53 1 + 82 73 54 1 + 82 73 55 1 + 82 73 56 1 + 82 73 57 1 + 82 73 58 1 + 82 73 59 1 + 82 73 60 1 + 82 73 61 1 + 82 73 62 1 + 82 73 63 1 + 82 73 64 1 + 82 73 65 1 + 82 73 66 1 + 82 73 67 1 + 82 73 68 1 + 82 73 69 1 + 82 73 70 1 + 82 73 71 1 + 82 73 72 1 + 82 73 73 1 + 82 73 74 1 + 82 73 75 1 + 82 73 76 1 + 82 73 77 0.999965 + 82 73 78 0.78779 + 82 73 79 0.129721 + 82 74 48 0.00195783 + 82 74 49 0.315112 + 82 74 50 0.913417 + 82 74 51 1 + 82 74 52 1 + 82 74 53 1 + 82 74 54 1 + 82 74 55 1 + 82 74 56 1 + 82 74 57 1 + 82 74 58 1 + 82 74 59 1 + 82 74 60 1 + 82 74 61 1 + 82 74 62 1 + 82 74 63 1 + 82 74 64 1 + 82 74 65 1 + 82 74 66 1 + 82 74 67 1 + 82 74 68 1 + 82 74 69 1 + 82 74 70 1 + 82 74 71 1 + 82 74 72 1 + 82 74 73 1 + 82 74 74 1 + 82 74 75 1 + 82 74 76 1 + 82 74 77 0.913417 + 82 74 78 0.315112 + 82 74 79 0.00195783 + 82 75 49 0.0216196 + 82 75 50 0.459682 + 82 75 51 0.952748 + 82 75 52 1 + 82 75 53 1 + 82 75 54 1 + 82 75 55 1 + 82 75 56 1 + 82 75 57 1 + 82 75 58 1 + 82 75 59 1 + 82 75 60 1 + 82 75 61 1 + 82 75 62 1 + 82 75 63 1 + 82 75 64 1 + 82 75 65 1 + 82 75 66 1 + 82 75 67 1 + 82 75 68 1 + 82 75 69 1 + 82 75 70 1 + 82 75 71 1 + 82 75 72 1 + 82 75 73 1 + 82 75 74 1 + 82 75 75 1 + 82 75 76 0.952748 + 82 75 77 0.459682 + 82 75 78 0.0216196 + 82 76 50 0.0443033 + 82 76 51 0.51002 + 82 76 52 0.952748 + 82 76 53 1 + 82 76 54 1 + 82 76 55 1 + 82 76 56 1 + 82 76 57 1 + 82 76 58 1 + 82 76 59 1 + 82 76 60 1 + 82 76 61 1 + 82 76 62 1 + 82 76 63 1 + 82 76 64 1 + 82 76 65 1 + 82 76 66 1 + 82 76 67 1 + 82 76 68 1 + 82 76 69 1 + 82 76 70 1 + 82 76 71 1 + 82 76 72 1 + 82 76 73 1 + 82 76 74 1 + 82 76 75 0.952748 + 82 76 76 0.51002 + 82 76 77 0.0443033 + 82 77 51 0.0443033 + 82 77 52 0.459682 + 82 77 53 0.913417 + 82 77 54 0.999965 + 82 77 55 1 + 82 77 56 1 + 82 77 57 1 + 82 77 58 1 + 82 77 59 1 + 82 77 60 1 + 82 77 61 1 + 82 77 62 1 + 82 77 63 1 + 82 77 64 1 + 82 77 65 1 + 82 77 66 1 + 82 77 67 1 + 82 77 68 1 + 82 77 69 1 + 82 77 70 1 + 82 77 71 1 + 82 77 72 1 + 82 77 73 0.999965 + 82 77 74 0.913417 + 82 77 75 0.459682 + 82 77 76 0.0443033 + 82 78 52 0.0216196 + 82 78 53 0.315112 + 82 78 54 0.78779 + 82 78 55 0.986811 + 82 78 56 1 + 82 78 57 1 + 82 78 58 1 + 82 78 59 1 + 82 78 60 1 + 82 78 61 1 + 82 78 62 1 + 82 78 63 1 + 82 78 64 1 + 82 78 65 1 + 82 78 66 1 + 82 78 67 1 + 82 78 68 1 + 82 78 69 1 + 82 78 70 1 + 82 78 71 1 + 82 78 72 0.986811 + 82 78 73 0.78779 + 82 78 74 0.315112 + 82 78 75 0.0216196 + 82 79 53 0.00195783 + 82 79 54 0.129721 + 82 79 55 0.51 + 82 79 56 0.856237 + 82 79 57 0.987756 + 82 79 58 1 + 82 79 59 1 + 82 79 60 1 + 82 79 61 1 + 82 79 62 1 + 82 79 63 1 + 82 79 64 1 + 82 79 65 1 + 82 79 66 1 + 82 79 67 1 + 82 79 68 1 + 82 79 69 1 + 82 79 70 0.987756 + 82 79 71 0.856237 + 82 79 72 0.51 + 82 79 73 0.129721 + 82 79 74 0.00195783 + 82 80 55 0.0128488 + 82 80 56 0.16137 + 82 80 57 0.458559 + 82 80 58 0.747928 + 82 80 59 0.909115 + 82 80 60 0.979426 + 82 80 61 0.9989 + 82 80 62 1 + 82 80 63 1 + 82 80 64 1 + 82 80 65 1 + 82 80 66 0.9989 + 82 80 67 0.979426 + 82 80 68 0.909115 + 82 80 69 0.747928 + 82 80 70 0.458559 + 82 80 71 0.16137 + 82 80 72 0.0128488 + 82 81 57 0.00284305 + 82 81 58 0.0622884 + 82 81 59 0.196147 + 82 81 60 0.358249 + 82 81 61 0.509943 + 82 81 62 0.613886 + 82 81 63 0.661608 + 82 81 64 0.661608 + 82 81 65 0.613886 + 82 81 66 0.509943 + 82 81 67 0.358249 + 82 81 68 0.196147 + 82 81 69 0.0622884 + 82 81 70 0.00284305 + 82 82 61 0.0011128 + 82 82 62 0.00998524 + 82 82 63 0.0189458 + 82 82 64 0.0189458 + 82 82 65 0.00998524 + 82 82 66 0.0011128 + 83 46 61 7.7901e-05 + 83 46 62 0.00382379 + 83 46 63 0.00976158 + 83 46 64 0.00976158 + 83 46 65 0.00382379 + 83 46 66 7.7901e-05 + 83 47 57 0.000148631 + 83 47 58 0.0302985 + 83 47 59 0.133628 + 83 47 60 0.27231 + 83 47 61 0.408101 + 83 47 62 0.509823 + 83 47 63 0.561032 + 83 47 64 0.561032 + 83 47 65 0.509823 + 83 47 66 0.408101 + 83 47 67 0.27231 + 83 47 68 0.133628 + 83 47 69 0.0302985 + 83 47 70 0.000148631 + 83 48 55 0.00138601 + 83 48 56 0.0811434 + 83 48 57 0.315874 + 83 48 58 0.610031 + 83 48 59 0.821374 + 83 48 60 0.93166 + 83 48 61 0.980027 + 83 48 62 0.996238 + 83 48 63 0.999595 + 83 48 64 0.999595 + 83 48 65 0.996238 + 83 48 66 0.980027 + 83 48 67 0.93166 + 83 48 68 0.821374 + 83 48 69 0.610031 + 83 48 70 0.315874 + 83 48 71 0.0811434 + 83 48 72 0.00138601 + 83 49 54 0.0436378 + 83 49 55 0.316818 + 83 49 56 0.702444 + 83 49 57 0.933296 + 83 49 58 0.99787 + 83 49 59 1 + 83 49 60 1 + 83 49 61 1 + 83 49 62 1 + 83 49 63 1 + 83 49 64 1 + 83 49 65 1 + 83 49 66 1 + 83 49 67 1 + 83 49 68 1 + 83 49 69 0.99787 + 83 49 70 0.933296 + 83 49 71 0.702444 + 83 49 72 0.316818 + 83 49 73 0.0436378 + 83 50 52 0.00062971 + 83 50 53 0.129326 + 83 50 54 0.559714 + 83 50 55 0.912283 + 83 50 56 0.999058 + 83 50 57 1 + 83 50 58 1 + 83 50 59 1 + 83 50 60 1 + 83 50 61 1 + 83 50 62 1 + 83 50 63 1 + 83 50 64 1 + 83 50 65 1 + 83 50 66 1 + 83 50 67 1 + 83 50 68 1 + 83 50 69 1 + 83 50 70 1 + 83 50 71 0.999058 + 83 50 72 0.912283 + 83 50 73 0.559714 + 83 50 74 0.129326 + 83 50 75 0.00062971 + 83 51 51 0.00193335 + 83 51 52 0.194777 + 83 51 53 0.701471 + 83 51 54 0.979001 + 83 51 55 1 + 83 51 56 1 + 83 51 57 1 + 83 51 58 1 + 83 51 59 1 + 83 51 60 1 + 83 51 61 1 + 83 51 62 1 + 83 51 63 1 + 83 51 64 1 + 83 51 65 1 + 83 51 66 1 + 83 51 67 1 + 83 51 68 1 + 83 51 69 1 + 83 51 70 1 + 83 51 71 1 + 83 51 72 1 + 83 51 73 0.979001 + 83 51 74 0.701471 + 83 51 75 0.194777 + 83 51 76 0.00193335 + 83 52 50 0.00062971 + 83 52 51 0.194777 + 83 52 52 0.744636 + 83 52 53 0.992776 + 83 52 54 1 + 83 52 55 1 + 83 52 56 1 + 83 52 57 1 + 83 52 58 1 + 83 52 59 1 + 83 52 60 1 + 83 52 61 1 + 83 52 62 1 + 83 52 63 1 + 83 52 64 1 + 83 52 65 1 + 83 52 66 1 + 83 52 67 1 + 83 52 68 1 + 83 52 69 1 + 83 52 70 1 + 83 52 71 1 + 83 52 72 1 + 83 52 73 1 + 83 52 74 0.992776 + 83 52 75 0.744636 + 83 52 76 0.194777 + 83 52 77 0.00062971 + 83 53 50 0.129326 + 83 53 51 0.701471 + 83 53 52 0.992776 + 83 53 53 1 + 83 53 54 1 + 83 53 55 1 + 83 53 56 1 + 83 53 57 1 + 83 53 58 1 + 83 53 59 1 + 83 53 60 1 + 83 53 61 1 + 83 53 62 1 + 83 53 63 1 + 83 53 64 1 + 83 53 65 1 + 83 53 66 1 + 83 53 67 1 + 83 53 68 1 + 83 53 69 1 + 83 53 70 1 + 83 53 71 1 + 83 53 72 1 + 83 53 73 1 + 83 53 74 1 + 83 53 75 0.992776 + 83 53 76 0.701471 + 83 53 77 0.129326 + 83 54 49 0.0436378 + 83 54 50 0.559714 + 83 54 51 0.979001 + 83 54 52 1 + 83 54 53 1 + 83 54 54 1 + 83 54 55 1 + 83 54 56 1 + 83 54 57 1 + 83 54 58 1 + 83 54 59 1 + 83 54 60 1 + 83 54 61 1 + 83 54 62 1 + 83 54 63 1 + 83 54 64 1 + 83 54 65 1 + 83 54 66 1 + 83 54 67 1 + 83 54 68 1 + 83 54 69 1 + 83 54 70 1 + 83 54 71 1 + 83 54 72 1 + 83 54 73 1 + 83 54 74 1 + 83 54 75 1 + 83 54 76 0.979001 + 83 54 77 0.559714 + 83 54 78 0.0436378 + 83 55 48 0.00138601 + 83 55 49 0.316818 + 83 55 50 0.912283 + 83 55 51 1 + 83 55 52 1 + 83 55 53 1 + 83 55 54 1 + 83 55 55 1 + 83 55 56 1 + 83 55 57 1 + 83 55 58 1 + 83 55 59 1 + 83 55 60 1 + 83 55 61 1 + 83 55 62 1 + 83 55 63 1 + 83 55 64 1 + 83 55 65 1 + 83 55 66 1 + 83 55 67 1 + 83 55 68 1 + 83 55 69 1 + 83 55 70 1 + 83 55 71 1 + 83 55 72 1 + 83 55 73 1 + 83 55 74 1 + 83 55 75 1 + 83 55 76 1 + 83 55 77 0.912283 + 83 55 78 0.316818 + 83 55 79 0.00138601 + 83 56 48 0.0811434 + 83 56 49 0.702444 + 83 56 50 0.999058 + 83 56 51 1 + 83 56 52 1 + 83 56 53 1 + 83 56 54 1 + 83 56 55 1 + 83 56 56 1 + 83 56 57 1 + 83 56 58 1 + 83 56 59 1 + 83 56 60 1 + 83 56 61 1 + 83 56 62 1 + 83 56 63 1 + 83 56 64 1 + 83 56 65 1 + 83 56 66 1 + 83 56 67 1 + 83 56 68 1 + 83 56 69 1 + 83 56 70 1 + 83 56 71 1 + 83 56 72 1 + 83 56 73 1 + 83 56 74 1 + 83 56 75 1 + 83 56 76 1 + 83 56 77 0.999058 + 83 56 78 0.702444 + 83 56 79 0.0811434 + 83 57 47 0.000148631 + 83 57 48 0.315874 + 83 57 49 0.933296 + 83 57 50 1 + 83 57 51 1 + 83 57 52 1 + 83 57 53 1 + 83 57 54 1 + 83 57 55 1 + 83 57 56 1 + 83 57 57 1 + 83 57 58 1 + 83 57 59 1 + 83 57 60 1 + 83 57 61 1 + 83 57 62 1 + 83 57 63 1 + 83 57 64 1 + 83 57 65 1 + 83 57 66 1 + 83 57 67 1 + 83 57 68 1 + 83 57 69 1 + 83 57 70 1 + 83 57 71 1 + 83 57 72 1 + 83 57 73 1 + 83 57 74 1 + 83 57 75 1 + 83 57 76 1 + 83 57 77 1 + 83 57 78 0.933296 + 83 57 79 0.315874 + 83 57 80 0.000148631 + 83 58 47 0.0302985 + 83 58 48 0.610031 + 83 58 49 0.99787 + 83 58 50 1 + 83 58 51 1 + 83 58 52 1 + 83 58 53 1 + 83 58 54 1 + 83 58 55 1 + 83 58 56 1 + 83 58 57 1 + 83 58 58 1 + 83 58 59 1 + 83 58 60 1 + 83 58 61 1 + 83 58 62 1 + 83 58 63 1 + 83 58 64 1 + 83 58 65 1 + 83 58 66 1 + 83 58 67 1 + 83 58 68 1 + 83 58 69 1 + 83 58 70 1 + 83 58 71 1 + 83 58 72 1 + 83 58 73 1 + 83 58 74 1 + 83 58 75 1 + 83 58 76 1 + 83 58 77 1 + 83 58 78 0.99787 + 83 58 79 0.610031 + 83 58 80 0.0302985 + 83 59 47 0.133628 + 83 59 48 0.821374 + 83 59 49 1 + 83 59 50 1 + 83 59 51 1 + 83 59 52 1 + 83 59 53 1 + 83 59 54 1 + 83 59 55 1 + 83 59 56 1 + 83 59 57 1 + 83 59 58 1 + 83 59 59 1 + 83 59 60 1 + 83 59 61 1 + 83 59 62 1 + 83 59 63 1 + 83 59 64 1 + 83 59 65 1 + 83 59 66 1 + 83 59 67 1 + 83 59 68 1 + 83 59 69 1 + 83 59 70 1 + 83 59 71 1 + 83 59 72 1 + 83 59 73 1 + 83 59 74 1 + 83 59 75 1 + 83 59 76 1 + 83 59 77 1 + 83 59 78 1 + 83 59 79 0.821374 + 83 59 80 0.133628 + 83 60 47 0.27231 + 83 60 48 0.93166 + 83 60 49 1 + 83 60 50 1 + 83 60 51 1 + 83 60 52 1 + 83 60 53 1 + 83 60 54 1 + 83 60 55 1 + 83 60 56 1 + 83 60 57 1 + 83 60 58 1 + 83 60 59 1 + 83 60 60 1 + 83 60 61 1 + 83 60 62 1 + 83 60 63 1 + 83 60 64 1 + 83 60 65 1 + 83 60 66 1 + 83 60 67 1 + 83 60 68 1 + 83 60 69 1 + 83 60 70 1 + 83 60 71 1 + 83 60 72 1 + 83 60 73 1 + 83 60 74 1 + 83 60 75 1 + 83 60 76 1 + 83 60 77 1 + 83 60 78 1 + 83 60 79 0.93166 + 83 60 80 0.27231 + 83 61 46 7.7901e-05 + 83 61 47 0.408101 + 83 61 48 0.980027 + 83 61 49 1 + 83 61 50 1 + 83 61 51 1 + 83 61 52 1 + 83 61 53 1 + 83 61 54 1 + 83 61 55 1 + 83 61 56 1 + 83 61 57 1 + 83 61 58 1 + 83 61 59 1 + 83 61 60 1 + 83 61 61 1 + 83 61 62 1 + 83 61 63 1 + 83 61 64 1 + 83 61 65 1 + 83 61 66 1 + 83 61 67 1 + 83 61 68 1 + 83 61 69 1 + 83 61 70 1 + 83 61 71 1 + 83 61 72 1 + 83 61 73 1 + 83 61 74 1 + 83 61 75 1 + 83 61 76 1 + 83 61 77 1 + 83 61 78 1 + 83 61 79 0.980027 + 83 61 80 0.408101 + 83 61 81 7.7901e-05 + 83 62 46 0.00382379 + 83 62 47 0.509823 + 83 62 48 0.996238 + 83 62 49 1 + 83 62 50 1 + 83 62 51 1 + 83 62 52 1 + 83 62 53 1 + 83 62 54 1 + 83 62 55 1 + 83 62 56 1 + 83 62 57 1 + 83 62 58 1 + 83 62 59 1 + 83 62 60 1 + 83 62 61 1 + 83 62 62 1 + 83 62 63 1 + 83 62 64 1 + 83 62 65 1 + 83 62 66 1 + 83 62 67 1 + 83 62 68 1 + 83 62 69 1 + 83 62 70 1 + 83 62 71 1 + 83 62 72 1 + 83 62 73 1 + 83 62 74 1 + 83 62 75 1 + 83 62 76 1 + 83 62 77 1 + 83 62 78 1 + 83 62 79 0.996238 + 83 62 80 0.509823 + 83 62 81 0.00382379 + 83 63 46 0.00976158 + 83 63 47 0.561032 + 83 63 48 0.999595 + 83 63 49 1 + 83 63 50 1 + 83 63 51 1 + 83 63 52 1 + 83 63 53 1 + 83 63 54 1 + 83 63 55 1 + 83 63 56 1 + 83 63 57 1 + 83 63 58 1 + 83 63 59 1 + 83 63 60 1 + 83 63 61 1 + 83 63 62 1 + 83 63 63 1 + 83 63 64 1 + 83 63 65 1 + 83 63 66 1 + 83 63 67 1 + 83 63 68 1 + 83 63 69 1 + 83 63 70 1 + 83 63 71 1 + 83 63 72 1 + 83 63 73 1 + 83 63 74 1 + 83 63 75 1 + 83 63 76 1 + 83 63 77 1 + 83 63 78 1 + 83 63 79 0.999595 + 83 63 80 0.561032 + 83 63 81 0.00976158 + 83 64 46 0.00976158 + 83 64 47 0.561032 + 83 64 48 0.999595 + 83 64 49 1 + 83 64 50 1 + 83 64 51 1 + 83 64 52 1 + 83 64 53 1 + 83 64 54 1 + 83 64 55 1 + 83 64 56 1 + 83 64 57 1 + 83 64 58 1 + 83 64 59 1 + 83 64 60 1 + 83 64 61 1 + 83 64 62 1 + 83 64 63 1 + 83 64 64 1 + 83 64 65 1 + 83 64 66 1 + 83 64 67 1 + 83 64 68 1 + 83 64 69 1 + 83 64 70 1 + 83 64 71 1 + 83 64 72 1 + 83 64 73 1 + 83 64 74 1 + 83 64 75 1 + 83 64 76 1 + 83 64 77 1 + 83 64 78 1 + 83 64 79 0.999595 + 83 64 80 0.561032 + 83 64 81 0.00976158 + 83 65 46 0.00382379 + 83 65 47 0.509823 + 83 65 48 0.996238 + 83 65 49 1 + 83 65 50 1 + 83 65 51 1 + 83 65 52 1 + 83 65 53 1 + 83 65 54 1 + 83 65 55 1 + 83 65 56 1 + 83 65 57 1 + 83 65 58 1 + 83 65 59 1 + 83 65 60 1 + 83 65 61 1 + 83 65 62 1 + 83 65 63 1 + 83 65 64 1 + 83 65 65 1 + 83 65 66 1 + 83 65 67 1 + 83 65 68 1 + 83 65 69 1 + 83 65 70 1 + 83 65 71 1 + 83 65 72 1 + 83 65 73 1 + 83 65 74 1 + 83 65 75 1 + 83 65 76 1 + 83 65 77 1 + 83 65 78 1 + 83 65 79 0.996238 + 83 65 80 0.509823 + 83 65 81 0.00382379 + 83 66 46 7.7901e-05 + 83 66 47 0.408101 + 83 66 48 0.980027 + 83 66 49 1 + 83 66 50 1 + 83 66 51 1 + 83 66 52 1 + 83 66 53 1 + 83 66 54 1 + 83 66 55 1 + 83 66 56 1 + 83 66 57 1 + 83 66 58 1 + 83 66 59 1 + 83 66 60 1 + 83 66 61 1 + 83 66 62 1 + 83 66 63 1 + 83 66 64 1 + 83 66 65 1 + 83 66 66 1 + 83 66 67 1 + 83 66 68 1 + 83 66 69 1 + 83 66 70 1 + 83 66 71 1 + 83 66 72 1 + 83 66 73 1 + 83 66 74 1 + 83 66 75 1 + 83 66 76 1 + 83 66 77 1 + 83 66 78 1 + 83 66 79 0.980027 + 83 66 80 0.408101 + 83 66 81 7.7901e-05 + 83 67 47 0.27231 + 83 67 48 0.93166 + 83 67 49 1 + 83 67 50 1 + 83 67 51 1 + 83 67 52 1 + 83 67 53 1 + 83 67 54 1 + 83 67 55 1 + 83 67 56 1 + 83 67 57 1 + 83 67 58 1 + 83 67 59 1 + 83 67 60 1 + 83 67 61 1 + 83 67 62 1 + 83 67 63 1 + 83 67 64 1 + 83 67 65 1 + 83 67 66 1 + 83 67 67 1 + 83 67 68 1 + 83 67 69 1 + 83 67 70 1 + 83 67 71 1 + 83 67 72 1 + 83 67 73 1 + 83 67 74 1 + 83 67 75 1 + 83 67 76 1 + 83 67 77 1 + 83 67 78 1 + 83 67 79 0.93166 + 83 67 80 0.27231 + 83 68 47 0.133628 + 83 68 48 0.821374 + 83 68 49 1 + 83 68 50 1 + 83 68 51 1 + 83 68 52 1 + 83 68 53 1 + 83 68 54 1 + 83 68 55 1 + 83 68 56 1 + 83 68 57 1 + 83 68 58 1 + 83 68 59 1 + 83 68 60 1 + 83 68 61 1 + 83 68 62 1 + 83 68 63 1 + 83 68 64 1 + 83 68 65 1 + 83 68 66 1 + 83 68 67 1 + 83 68 68 1 + 83 68 69 1 + 83 68 70 1 + 83 68 71 1 + 83 68 72 1 + 83 68 73 1 + 83 68 74 1 + 83 68 75 1 + 83 68 76 1 + 83 68 77 1 + 83 68 78 1 + 83 68 79 0.821374 + 83 68 80 0.133628 + 83 69 47 0.0302985 + 83 69 48 0.610031 + 83 69 49 0.99787 + 83 69 50 1 + 83 69 51 1 + 83 69 52 1 + 83 69 53 1 + 83 69 54 1 + 83 69 55 1 + 83 69 56 1 + 83 69 57 1 + 83 69 58 1 + 83 69 59 1 + 83 69 60 1 + 83 69 61 1 + 83 69 62 1 + 83 69 63 1 + 83 69 64 1 + 83 69 65 1 + 83 69 66 1 + 83 69 67 1 + 83 69 68 1 + 83 69 69 1 + 83 69 70 1 + 83 69 71 1 + 83 69 72 1 + 83 69 73 1 + 83 69 74 1 + 83 69 75 1 + 83 69 76 1 + 83 69 77 1 + 83 69 78 0.99787 + 83 69 79 0.610031 + 83 69 80 0.0302985 + 83 70 47 0.000148631 + 83 70 48 0.315874 + 83 70 49 0.933296 + 83 70 50 1 + 83 70 51 1 + 83 70 52 1 + 83 70 53 1 + 83 70 54 1 + 83 70 55 1 + 83 70 56 1 + 83 70 57 1 + 83 70 58 1 + 83 70 59 1 + 83 70 60 1 + 83 70 61 1 + 83 70 62 1 + 83 70 63 1 + 83 70 64 1 + 83 70 65 1 + 83 70 66 1 + 83 70 67 1 + 83 70 68 1 + 83 70 69 1 + 83 70 70 1 + 83 70 71 1 + 83 70 72 1 + 83 70 73 1 + 83 70 74 1 + 83 70 75 1 + 83 70 76 1 + 83 70 77 1 + 83 70 78 0.933296 + 83 70 79 0.315874 + 83 70 80 0.000148631 + 83 71 48 0.0811434 + 83 71 49 0.702444 + 83 71 50 0.999058 + 83 71 51 1 + 83 71 52 1 + 83 71 53 1 + 83 71 54 1 + 83 71 55 1 + 83 71 56 1 + 83 71 57 1 + 83 71 58 1 + 83 71 59 1 + 83 71 60 1 + 83 71 61 1 + 83 71 62 1 + 83 71 63 1 + 83 71 64 1 + 83 71 65 1 + 83 71 66 1 + 83 71 67 1 + 83 71 68 1 + 83 71 69 1 + 83 71 70 1 + 83 71 71 1 + 83 71 72 1 + 83 71 73 1 + 83 71 74 1 + 83 71 75 1 + 83 71 76 1 + 83 71 77 0.999058 + 83 71 78 0.702444 + 83 71 79 0.0811434 + 83 72 48 0.00138601 + 83 72 49 0.316818 + 83 72 50 0.912283 + 83 72 51 1 + 83 72 52 1 + 83 72 53 1 + 83 72 54 1 + 83 72 55 1 + 83 72 56 1 + 83 72 57 1 + 83 72 58 1 + 83 72 59 1 + 83 72 60 1 + 83 72 61 1 + 83 72 62 1 + 83 72 63 1 + 83 72 64 1 + 83 72 65 1 + 83 72 66 1 + 83 72 67 1 + 83 72 68 1 + 83 72 69 1 + 83 72 70 1 + 83 72 71 1 + 83 72 72 1 + 83 72 73 1 + 83 72 74 1 + 83 72 75 1 + 83 72 76 1 + 83 72 77 0.912283 + 83 72 78 0.316818 + 83 72 79 0.00138601 + 83 73 49 0.0436378 + 83 73 50 0.559714 + 83 73 51 0.979001 + 83 73 52 1 + 83 73 53 1 + 83 73 54 1 + 83 73 55 1 + 83 73 56 1 + 83 73 57 1 + 83 73 58 1 + 83 73 59 1 + 83 73 60 1 + 83 73 61 1 + 83 73 62 1 + 83 73 63 1 + 83 73 64 1 + 83 73 65 1 + 83 73 66 1 + 83 73 67 1 + 83 73 68 1 + 83 73 69 1 + 83 73 70 1 + 83 73 71 1 + 83 73 72 1 + 83 73 73 1 + 83 73 74 1 + 83 73 75 1 + 83 73 76 0.979001 + 83 73 77 0.559714 + 83 73 78 0.0436378 + 83 74 50 0.129326 + 83 74 51 0.701471 + 83 74 52 0.992776 + 83 74 53 1 + 83 74 54 1 + 83 74 55 1 + 83 74 56 1 + 83 74 57 1 + 83 74 58 1 + 83 74 59 1 + 83 74 60 1 + 83 74 61 1 + 83 74 62 1 + 83 74 63 1 + 83 74 64 1 + 83 74 65 1 + 83 74 66 1 + 83 74 67 1 + 83 74 68 1 + 83 74 69 1 + 83 74 70 1 + 83 74 71 1 + 83 74 72 1 + 83 74 73 1 + 83 74 74 1 + 83 74 75 0.992776 + 83 74 76 0.701471 + 83 74 77 0.129326 + 83 75 50 0.00062971 + 83 75 51 0.194777 + 83 75 52 0.744636 + 83 75 53 0.992776 + 83 75 54 1 + 83 75 55 1 + 83 75 56 1 + 83 75 57 1 + 83 75 58 1 + 83 75 59 1 + 83 75 60 1 + 83 75 61 1 + 83 75 62 1 + 83 75 63 1 + 83 75 64 1 + 83 75 65 1 + 83 75 66 1 + 83 75 67 1 + 83 75 68 1 + 83 75 69 1 + 83 75 70 1 + 83 75 71 1 + 83 75 72 1 + 83 75 73 1 + 83 75 74 0.992776 + 83 75 75 0.744636 + 83 75 76 0.194777 + 83 75 77 0.00062971 + 83 76 51 0.00193335 + 83 76 52 0.194777 + 83 76 53 0.701471 + 83 76 54 0.979001 + 83 76 55 1 + 83 76 56 1 + 83 76 57 1 + 83 76 58 1 + 83 76 59 1 + 83 76 60 1 + 83 76 61 1 + 83 76 62 1 + 83 76 63 1 + 83 76 64 1 + 83 76 65 1 + 83 76 66 1 + 83 76 67 1 + 83 76 68 1 + 83 76 69 1 + 83 76 70 1 + 83 76 71 1 + 83 76 72 1 + 83 76 73 0.979001 + 83 76 74 0.701471 + 83 76 75 0.194777 + 83 76 76 0.00193335 + 83 77 52 0.00062971 + 83 77 53 0.129326 + 83 77 54 0.559714 + 83 77 55 0.912283 + 83 77 56 0.999058 + 83 77 57 1 + 83 77 58 1 + 83 77 59 1 + 83 77 60 1 + 83 77 61 1 + 83 77 62 1 + 83 77 63 1 + 83 77 64 1 + 83 77 65 1 + 83 77 66 1 + 83 77 67 1 + 83 77 68 1 + 83 77 69 1 + 83 77 70 1 + 83 77 71 0.999058 + 83 77 72 0.912283 + 83 77 73 0.559714 + 83 77 74 0.129326 + 83 77 75 0.00062971 + 83 78 54 0.0436378 + 83 78 55 0.316818 + 83 78 56 0.702444 + 83 78 57 0.933296 + 83 78 58 0.99787 + 83 78 59 1 + 83 78 60 1 + 83 78 61 1 + 83 78 62 1 + 83 78 63 1 + 83 78 64 1 + 83 78 65 1 + 83 78 66 1 + 83 78 67 1 + 83 78 68 1 + 83 78 69 0.99787 + 83 78 70 0.933296 + 83 78 71 0.702444 + 83 78 72 0.316818 + 83 78 73 0.0436378 + 83 79 55 0.00138601 + 83 79 56 0.0811434 + 83 79 57 0.315874 + 83 79 58 0.610031 + 83 79 59 0.821374 + 83 79 60 0.93166 + 83 79 61 0.980027 + 83 79 62 0.996238 + 83 79 63 0.999595 + 83 79 64 0.999595 + 83 79 65 0.996238 + 83 79 66 0.980027 + 83 79 67 0.93166 + 83 79 68 0.821374 + 83 79 69 0.610031 + 83 79 70 0.315874 + 83 79 71 0.0811434 + 83 79 72 0.00138601 + 83 80 57 0.000148631 + 83 80 58 0.0302985 + 83 80 59 0.133628 + 83 80 60 0.27231 + 83 80 61 0.408101 + 83 80 62 0.509823 + 83 80 63 0.561032 + 83 80 64 0.561032 + 83 80 65 0.509823 + 83 80 66 0.408101 + 83 80 67 0.27231 + 83 80 68 0.133628 + 83 80 69 0.0302985 + 83 80 70 0.000148631 + 83 81 61 7.7901e-05 + 83 81 62 0.00382379 + 83 81 63 0.00976158 + 83 81 64 0.00976158 + 83 81 65 0.00382379 + 83 81 66 7.7901e-05 + 84 48 58 0.00207515 + 84 48 59 0.0441313 + 84 48 60 0.134257 + 84 48 61 0.234894 + 84 48 62 0.317411 + 84 48 63 0.363238 + 84 48 64 0.363238 + 84 48 65 0.317411 + 84 48 66 0.234894 + 84 48 67 0.134257 + 84 48 68 0.0441313 + 84 48 69 0.00207515 + 84 49 56 0.0114126 + 84 49 57 0.132621 + 84 49 58 0.364963 + 84 49 59 0.606763 + 84 49 60 0.783221 + 84 49 61 0.882567 + 84 49 62 0.931908 + 84 49 63 0.951583 + 84 49 64 0.951583 + 84 49 65 0.931908 + 84 49 66 0.882567 + 84 49 67 0.783221 + 84 49 68 0.606763 + 84 49 69 0.364963 + 84 49 70 0.132621 + 84 49 71 0.0114126 + 84 50 54 0.00135226 + 84 50 55 0.103719 + 84 50 56 0.41284 + 84 50 57 0.742086 + 84 50 58 0.933643 + 84 50 59 0.995674 + 84 50 60 1 + 84 50 61 1 + 84 50 62 1 + 84 50 63 1 + 84 50 64 1 + 84 50 65 1 + 84 50 66 1 + 84 50 67 1 + 84 50 68 0.995674 + 84 50 69 0.933643 + 84 50 70 0.742086 + 84 50 71 0.41284 + 84 50 72 0.103719 + 84 50 73 0.00135226 + 84 51 53 0.0123857 + 84 51 54 0.23592 + 84 51 55 0.652868 + 84 51 56 0.935026 + 84 51 57 0.999467 + 84 51 58 1 + 84 51 59 1 + 84 51 60 1 + 84 51 61 1 + 84 51 62 1 + 84 51 63 1 + 84 51 64 1 + 84 51 65 1 + 84 51 66 1 + 84 51 67 1 + 84 51 68 1 + 84 51 69 1 + 84 51 70 0.999467 + 84 51 71 0.935026 + 84 51 72 0.652868 + 84 51 73 0.23592 + 84 51 74 0.0123857 + 84 52 52 0.0199 + 84 52 53 0.320873 + 84 52 54 0.78197 + 84 52 55 0.988606 + 84 52 56 1 + 84 52 57 1 + 84 52 58 1 + 84 52 59 1 + 84 52 60 1 + 84 52 61 1 + 84 52 62 1 + 84 52 63 1 + 84 52 64 1 + 84 52 65 1 + 84 52 66 1 + 84 52 67 1 + 84 52 68 1 + 84 52 69 1 + 84 52 70 1 + 84 52 71 1 + 84 52 72 0.988606 + 84 52 73 0.78197 + 84 52 74 0.320873 + 84 52 75 0.0199 + 84 53 51 0.0123857 + 84 53 52 0.320873 + 84 53 53 0.820029 + 84 53 54 0.997314 + 84 53 55 1 + 84 53 56 1 + 84 53 57 1 + 84 53 58 1 + 84 53 59 1 + 84 53 60 1 + 84 53 61 1 + 84 53 62 1 + 84 53 63 1 + 84 53 64 1 + 84 53 65 1 + 84 53 66 1 + 84 53 67 1 + 84 53 68 1 + 84 53 69 1 + 84 53 70 1 + 84 53 71 1 + 84 53 72 1 + 84 53 73 0.997314 + 84 53 74 0.820029 + 84 53 75 0.320873 + 84 53 76 0.0123857 + 84 54 50 0.00135226 + 84 54 51 0.23592 + 84 54 52 0.78197 + 84 54 53 0.997314 + 84 54 54 1 + 84 54 55 1 + 84 54 56 1 + 84 54 57 1 + 84 54 58 1 + 84 54 59 1 + 84 54 60 1 + 84 54 61 1 + 84 54 62 1 + 84 54 63 1 + 84 54 64 1 + 84 54 65 1 + 84 54 66 1 + 84 54 67 1 + 84 54 68 1 + 84 54 69 1 + 84 54 70 1 + 84 54 71 1 + 84 54 72 1 + 84 54 73 1 + 84 54 74 0.997314 + 84 54 75 0.78197 + 84 54 76 0.23592 + 84 54 77 0.00135226 + 84 55 50 0.103719 + 84 55 51 0.652868 + 84 55 52 0.988606 + 84 55 53 1 + 84 55 54 1 + 84 55 55 1 + 84 55 56 1 + 84 55 57 1 + 84 55 58 1 + 84 55 59 1 + 84 55 60 1 + 84 55 61 1 + 84 55 62 1 + 84 55 63 1 + 84 55 64 1 + 84 55 65 1 + 84 55 66 1 + 84 55 67 1 + 84 55 68 1 + 84 55 69 1 + 84 55 70 1 + 84 55 71 1 + 84 55 72 1 + 84 55 73 1 + 84 55 74 1 + 84 55 75 0.988606 + 84 55 76 0.652868 + 84 55 77 0.103719 + 84 56 49 0.0114126 + 84 56 50 0.41284 + 84 56 51 0.935026 + 84 56 52 1 + 84 56 53 1 + 84 56 54 1 + 84 56 55 1 + 84 56 56 1 + 84 56 57 1 + 84 56 58 1 + 84 56 59 1 + 84 56 60 1 + 84 56 61 1 + 84 56 62 1 + 84 56 63 1 + 84 56 64 1 + 84 56 65 1 + 84 56 66 1 + 84 56 67 1 + 84 56 68 1 + 84 56 69 1 + 84 56 70 1 + 84 56 71 1 + 84 56 72 1 + 84 56 73 1 + 84 56 74 1 + 84 56 75 1 + 84 56 76 0.935026 + 84 56 77 0.41284 + 84 56 78 0.0114126 + 84 57 49 0.132621 + 84 57 50 0.742086 + 84 57 51 0.999467 + 84 57 52 1 + 84 57 53 1 + 84 57 54 1 + 84 57 55 1 + 84 57 56 1 + 84 57 57 1 + 84 57 58 1 + 84 57 59 1 + 84 57 60 1 + 84 57 61 1 + 84 57 62 1 + 84 57 63 1 + 84 57 64 1 + 84 57 65 1 + 84 57 66 1 + 84 57 67 1 + 84 57 68 1 + 84 57 69 1 + 84 57 70 1 + 84 57 71 1 + 84 57 72 1 + 84 57 73 1 + 84 57 74 1 + 84 57 75 1 + 84 57 76 0.999467 + 84 57 77 0.742086 + 84 57 78 0.132621 + 84 58 48 0.00207515 + 84 58 49 0.364963 + 84 58 50 0.933643 + 84 58 51 1 + 84 58 52 1 + 84 58 53 1 + 84 58 54 1 + 84 58 55 1 + 84 58 56 1 + 84 58 57 1 + 84 58 58 1 + 84 58 59 1 + 84 58 60 1 + 84 58 61 1 + 84 58 62 1 + 84 58 63 1 + 84 58 64 1 + 84 58 65 1 + 84 58 66 1 + 84 58 67 1 + 84 58 68 1 + 84 58 69 1 + 84 58 70 1 + 84 58 71 1 + 84 58 72 1 + 84 58 73 1 + 84 58 74 1 + 84 58 75 1 + 84 58 76 1 + 84 58 77 0.933643 + 84 58 78 0.364963 + 84 58 79 0.00207515 + 84 59 48 0.0441313 + 84 59 49 0.606763 + 84 59 50 0.995674 + 84 59 51 1 + 84 59 52 1 + 84 59 53 1 + 84 59 54 1 + 84 59 55 1 + 84 59 56 1 + 84 59 57 1 + 84 59 58 1 + 84 59 59 1 + 84 59 60 1 + 84 59 61 1 + 84 59 62 1 + 84 59 63 1 + 84 59 64 1 + 84 59 65 1 + 84 59 66 1 + 84 59 67 1 + 84 59 68 1 + 84 59 69 1 + 84 59 70 1 + 84 59 71 1 + 84 59 72 1 + 84 59 73 1 + 84 59 74 1 + 84 59 75 1 + 84 59 76 1 + 84 59 77 0.995674 + 84 59 78 0.606763 + 84 59 79 0.0441313 + 84 60 48 0.134257 + 84 60 49 0.783221 + 84 60 50 1 + 84 60 51 1 + 84 60 52 1 + 84 60 53 1 + 84 60 54 1 + 84 60 55 1 + 84 60 56 1 + 84 60 57 1 + 84 60 58 1 + 84 60 59 1 + 84 60 60 1 + 84 60 61 1 + 84 60 62 1 + 84 60 63 1 + 84 60 64 1 + 84 60 65 1 + 84 60 66 1 + 84 60 67 1 + 84 60 68 1 + 84 60 69 1 + 84 60 70 1 + 84 60 71 1 + 84 60 72 1 + 84 60 73 1 + 84 60 74 1 + 84 60 75 1 + 84 60 76 1 + 84 60 77 1 + 84 60 78 0.783221 + 84 60 79 0.134257 + 84 61 48 0.234894 + 84 61 49 0.882567 + 84 61 50 1 + 84 61 51 1 + 84 61 52 1 + 84 61 53 1 + 84 61 54 1 + 84 61 55 1 + 84 61 56 1 + 84 61 57 1 + 84 61 58 1 + 84 61 59 1 + 84 61 60 1 + 84 61 61 1 + 84 61 62 1 + 84 61 63 1 + 84 61 64 1 + 84 61 65 1 + 84 61 66 1 + 84 61 67 1 + 84 61 68 1 + 84 61 69 1 + 84 61 70 1 + 84 61 71 1 + 84 61 72 1 + 84 61 73 1 + 84 61 74 1 + 84 61 75 1 + 84 61 76 1 + 84 61 77 1 + 84 61 78 0.882567 + 84 61 79 0.234894 + 84 62 48 0.317411 + 84 62 49 0.931908 + 84 62 50 1 + 84 62 51 1 + 84 62 52 1 + 84 62 53 1 + 84 62 54 1 + 84 62 55 1 + 84 62 56 1 + 84 62 57 1 + 84 62 58 1 + 84 62 59 1 + 84 62 60 1 + 84 62 61 1 + 84 62 62 1 + 84 62 63 1 + 84 62 64 1 + 84 62 65 1 + 84 62 66 1 + 84 62 67 1 + 84 62 68 1 + 84 62 69 1 + 84 62 70 1 + 84 62 71 1 + 84 62 72 1 + 84 62 73 1 + 84 62 74 1 + 84 62 75 1 + 84 62 76 1 + 84 62 77 1 + 84 62 78 0.931908 + 84 62 79 0.317411 + 84 63 48 0.363238 + 84 63 49 0.951583 + 84 63 50 1 + 84 63 51 1 + 84 63 52 1 + 84 63 53 1 + 84 63 54 1 + 84 63 55 1 + 84 63 56 1 + 84 63 57 1 + 84 63 58 1 + 84 63 59 1 + 84 63 60 1 + 84 63 61 1 + 84 63 62 1 + 84 63 63 1 + 84 63 64 1 + 84 63 65 1 + 84 63 66 1 + 84 63 67 1 + 84 63 68 1 + 84 63 69 1 + 84 63 70 1 + 84 63 71 1 + 84 63 72 1 + 84 63 73 1 + 84 63 74 1 + 84 63 75 1 + 84 63 76 1 + 84 63 77 1 + 84 63 78 0.951583 + 84 63 79 0.363238 + 84 64 48 0.363238 + 84 64 49 0.951583 + 84 64 50 1 + 84 64 51 1 + 84 64 52 1 + 84 64 53 1 + 84 64 54 1 + 84 64 55 1 + 84 64 56 1 + 84 64 57 1 + 84 64 58 1 + 84 64 59 1 + 84 64 60 1 + 84 64 61 1 + 84 64 62 1 + 84 64 63 1 + 84 64 64 1 + 84 64 65 1 + 84 64 66 1 + 84 64 67 1 + 84 64 68 1 + 84 64 69 1 + 84 64 70 1 + 84 64 71 1 + 84 64 72 1 + 84 64 73 1 + 84 64 74 1 + 84 64 75 1 + 84 64 76 1 + 84 64 77 1 + 84 64 78 0.951583 + 84 64 79 0.363238 + 84 65 48 0.317411 + 84 65 49 0.931908 + 84 65 50 1 + 84 65 51 1 + 84 65 52 1 + 84 65 53 1 + 84 65 54 1 + 84 65 55 1 + 84 65 56 1 + 84 65 57 1 + 84 65 58 1 + 84 65 59 1 + 84 65 60 1 + 84 65 61 1 + 84 65 62 1 + 84 65 63 1 + 84 65 64 1 + 84 65 65 1 + 84 65 66 1 + 84 65 67 1 + 84 65 68 1 + 84 65 69 1 + 84 65 70 1 + 84 65 71 1 + 84 65 72 1 + 84 65 73 1 + 84 65 74 1 + 84 65 75 1 + 84 65 76 1 + 84 65 77 1 + 84 65 78 0.931908 + 84 65 79 0.317411 + 84 66 48 0.234894 + 84 66 49 0.882567 + 84 66 50 1 + 84 66 51 1 + 84 66 52 1 + 84 66 53 1 + 84 66 54 1 + 84 66 55 1 + 84 66 56 1 + 84 66 57 1 + 84 66 58 1 + 84 66 59 1 + 84 66 60 1 + 84 66 61 1 + 84 66 62 1 + 84 66 63 1 + 84 66 64 1 + 84 66 65 1 + 84 66 66 1 + 84 66 67 1 + 84 66 68 1 + 84 66 69 1 + 84 66 70 1 + 84 66 71 1 + 84 66 72 1 + 84 66 73 1 + 84 66 74 1 + 84 66 75 1 + 84 66 76 1 + 84 66 77 1 + 84 66 78 0.882567 + 84 66 79 0.234894 + 84 67 48 0.134257 + 84 67 49 0.783221 + 84 67 50 1 + 84 67 51 1 + 84 67 52 1 + 84 67 53 1 + 84 67 54 1 + 84 67 55 1 + 84 67 56 1 + 84 67 57 1 + 84 67 58 1 + 84 67 59 1 + 84 67 60 1 + 84 67 61 1 + 84 67 62 1 + 84 67 63 1 + 84 67 64 1 + 84 67 65 1 + 84 67 66 1 + 84 67 67 1 + 84 67 68 1 + 84 67 69 1 + 84 67 70 1 + 84 67 71 1 + 84 67 72 1 + 84 67 73 1 + 84 67 74 1 + 84 67 75 1 + 84 67 76 1 + 84 67 77 1 + 84 67 78 0.783221 + 84 67 79 0.134257 + 84 68 48 0.0441313 + 84 68 49 0.606763 + 84 68 50 0.995674 + 84 68 51 1 + 84 68 52 1 + 84 68 53 1 + 84 68 54 1 + 84 68 55 1 + 84 68 56 1 + 84 68 57 1 + 84 68 58 1 + 84 68 59 1 + 84 68 60 1 + 84 68 61 1 + 84 68 62 1 + 84 68 63 1 + 84 68 64 1 + 84 68 65 1 + 84 68 66 1 + 84 68 67 1 + 84 68 68 1 + 84 68 69 1 + 84 68 70 1 + 84 68 71 1 + 84 68 72 1 + 84 68 73 1 + 84 68 74 1 + 84 68 75 1 + 84 68 76 1 + 84 68 77 0.995674 + 84 68 78 0.606763 + 84 68 79 0.0441313 + 84 69 48 0.00207515 + 84 69 49 0.364963 + 84 69 50 0.933643 + 84 69 51 1 + 84 69 52 1 + 84 69 53 1 + 84 69 54 1 + 84 69 55 1 + 84 69 56 1 + 84 69 57 1 + 84 69 58 1 + 84 69 59 1 + 84 69 60 1 + 84 69 61 1 + 84 69 62 1 + 84 69 63 1 + 84 69 64 1 + 84 69 65 1 + 84 69 66 1 + 84 69 67 1 + 84 69 68 1 + 84 69 69 1 + 84 69 70 1 + 84 69 71 1 + 84 69 72 1 + 84 69 73 1 + 84 69 74 1 + 84 69 75 1 + 84 69 76 1 + 84 69 77 0.933643 + 84 69 78 0.364963 + 84 69 79 0.00207515 + 84 70 49 0.132621 + 84 70 50 0.742086 + 84 70 51 0.999467 + 84 70 52 1 + 84 70 53 1 + 84 70 54 1 + 84 70 55 1 + 84 70 56 1 + 84 70 57 1 + 84 70 58 1 + 84 70 59 1 + 84 70 60 1 + 84 70 61 1 + 84 70 62 1 + 84 70 63 1 + 84 70 64 1 + 84 70 65 1 + 84 70 66 1 + 84 70 67 1 + 84 70 68 1 + 84 70 69 1 + 84 70 70 1 + 84 70 71 1 + 84 70 72 1 + 84 70 73 1 + 84 70 74 1 + 84 70 75 1 + 84 70 76 0.999467 + 84 70 77 0.742086 + 84 70 78 0.132621 + 84 71 49 0.0114126 + 84 71 50 0.41284 + 84 71 51 0.935026 + 84 71 52 1 + 84 71 53 1 + 84 71 54 1 + 84 71 55 1 + 84 71 56 1 + 84 71 57 1 + 84 71 58 1 + 84 71 59 1 + 84 71 60 1 + 84 71 61 1 + 84 71 62 1 + 84 71 63 1 + 84 71 64 1 + 84 71 65 1 + 84 71 66 1 + 84 71 67 1 + 84 71 68 1 + 84 71 69 1 + 84 71 70 1 + 84 71 71 1 + 84 71 72 1 + 84 71 73 1 + 84 71 74 1 + 84 71 75 1 + 84 71 76 0.935026 + 84 71 77 0.41284 + 84 71 78 0.0114126 + 84 72 50 0.103719 + 84 72 51 0.652868 + 84 72 52 0.988606 + 84 72 53 1 + 84 72 54 1 + 84 72 55 1 + 84 72 56 1 + 84 72 57 1 + 84 72 58 1 + 84 72 59 1 + 84 72 60 1 + 84 72 61 1 + 84 72 62 1 + 84 72 63 1 + 84 72 64 1 + 84 72 65 1 + 84 72 66 1 + 84 72 67 1 + 84 72 68 1 + 84 72 69 1 + 84 72 70 1 + 84 72 71 1 + 84 72 72 1 + 84 72 73 1 + 84 72 74 1 + 84 72 75 0.988606 + 84 72 76 0.652868 + 84 72 77 0.103719 + 84 73 50 0.00135226 + 84 73 51 0.23592 + 84 73 52 0.78197 + 84 73 53 0.997314 + 84 73 54 1 + 84 73 55 1 + 84 73 56 1 + 84 73 57 1 + 84 73 58 1 + 84 73 59 1 + 84 73 60 1 + 84 73 61 1 + 84 73 62 1 + 84 73 63 1 + 84 73 64 1 + 84 73 65 1 + 84 73 66 1 + 84 73 67 1 + 84 73 68 1 + 84 73 69 1 + 84 73 70 1 + 84 73 71 1 + 84 73 72 1 + 84 73 73 1 + 84 73 74 0.997314 + 84 73 75 0.78197 + 84 73 76 0.23592 + 84 73 77 0.00135226 + 84 74 51 0.0123857 + 84 74 52 0.320873 + 84 74 53 0.820029 + 84 74 54 0.997314 + 84 74 55 1 + 84 74 56 1 + 84 74 57 1 + 84 74 58 1 + 84 74 59 1 + 84 74 60 1 + 84 74 61 1 + 84 74 62 1 + 84 74 63 1 + 84 74 64 1 + 84 74 65 1 + 84 74 66 1 + 84 74 67 1 + 84 74 68 1 + 84 74 69 1 + 84 74 70 1 + 84 74 71 1 + 84 74 72 1 + 84 74 73 0.997314 + 84 74 74 0.820029 + 84 74 75 0.320873 + 84 74 76 0.0123857 + 84 75 52 0.0199 + 84 75 53 0.320873 + 84 75 54 0.78197 + 84 75 55 0.988606 + 84 75 56 1 + 84 75 57 1 + 84 75 58 1 + 84 75 59 1 + 84 75 60 1 + 84 75 61 1 + 84 75 62 1 + 84 75 63 1 + 84 75 64 1 + 84 75 65 1 + 84 75 66 1 + 84 75 67 1 + 84 75 68 1 + 84 75 69 1 + 84 75 70 1 + 84 75 71 1 + 84 75 72 0.988606 + 84 75 73 0.78197 + 84 75 74 0.320873 + 84 75 75 0.0199 + 84 76 53 0.0123857 + 84 76 54 0.23592 + 84 76 55 0.652868 + 84 76 56 0.935026 + 84 76 57 0.999467 + 84 76 58 1 + 84 76 59 1 + 84 76 60 1 + 84 76 61 1 + 84 76 62 1 + 84 76 63 1 + 84 76 64 1 + 84 76 65 1 + 84 76 66 1 + 84 76 67 1 + 84 76 68 1 + 84 76 69 1 + 84 76 70 0.999467 + 84 76 71 0.935026 + 84 76 72 0.652868 + 84 76 73 0.23592 + 84 76 74 0.0123857 + 84 77 54 0.00135226 + 84 77 55 0.103719 + 84 77 56 0.41284 + 84 77 57 0.742086 + 84 77 58 0.933643 + 84 77 59 0.995674 + 84 77 60 1 + 84 77 61 1 + 84 77 62 1 + 84 77 63 1 + 84 77 64 1 + 84 77 65 1 + 84 77 66 1 + 84 77 67 1 + 84 77 68 0.995674 + 84 77 69 0.933643 + 84 77 70 0.742086 + 84 77 71 0.41284 + 84 77 72 0.103719 + 84 77 73 0.00135226 + 84 78 56 0.0114126 + 84 78 57 0.132621 + 84 78 58 0.364963 + 84 78 59 0.606763 + 84 78 60 0.783221 + 84 78 61 0.882567 + 84 78 62 0.931908 + 84 78 63 0.951583 + 84 78 64 0.951583 + 84 78 65 0.931908 + 84 78 66 0.882567 + 84 78 67 0.783221 + 84 78 68 0.606763 + 84 78 69 0.364963 + 84 78 70 0.132621 + 84 78 71 0.0114126 + 84 79 58 0.00207515 + 84 79 59 0.0441313 + 84 79 60 0.134257 + 84 79 61 0.234894 + 84 79 62 0.317411 + 84 79 63 0.363238 + 84 79 64 0.363238 + 84 79 65 0.317411 + 84 79 66 0.234894 + 84 79 67 0.134257 + 84 79 68 0.0441313 + 84 79 69 0.00207515 + 85 49 59 0.000228244 + 85 49 60 0.0170305 + 85 49 61 0.061458 + 85 49 62 0.10742 + 85 49 63 0.135234 + 85 49 64 0.135234 + 85 49 65 0.10742 + 85 49 66 0.061458 + 85 49 67 0.0170305 + 85 49 68 0.000228244 + 85 50 57 0.0100187 + 85 50 58 0.105685 + 85 50 59 0.28004 + 85 50 60 0.462948 + 85 50 61 0.602307 + 85 50 62 0.694555 + 85 50 63 0.738943 + 85 50 64 0.738943 + 85 50 65 0.694555 + 85 50 66 0.602307 + 85 50 67 0.462948 + 85 50 68 0.28004 + 85 50 69 0.105685 + 85 50 70 0.0100187 + 85 51 55 0.00260739 + 85 51 56 0.104302 + 85 51 57 0.370069 + 85 51 58 0.648356 + 85 51 59 0.852122 + 85 51 60 0.954076 + 85 51 61 0.992135 + 85 51 62 0.99983 + 85 51 63 1 + 85 51 64 1 + 85 51 65 0.99983 + 85 51 66 0.992135 + 85 51 67 0.954076 + 85 51 68 0.852122 + 85 51 69 0.648356 + 85 51 70 0.370069 + 85 51 71 0.104302 + 85 51 72 0.00260739 + 85 52 54 0.0182812 + 85 52 55 0.240042 + 85 52 56 0.602276 + 85 52 57 0.884209 + 85 52 58 0.991156 + 85 52 59 1 + 85 52 60 1 + 85 52 61 1 + 85 52 62 1 + 85 52 63 1 + 85 52 64 1 + 85 52 65 1 + 85 52 66 1 + 85 52 67 1 + 85 52 68 1 + 85 52 69 0.991156 + 85 52 70 0.884209 + 85 52 71 0.602276 + 85 52 72 0.240042 + 85 52 73 0.0182812 + 85 53 53 0.0282569 + 85 53 54 0.325363 + 85 53 55 0.736168 + 85 53 56 0.971405 + 85 53 57 1 + 85 53 58 1 + 85 53 59 1 + 85 53 60 1 + 85 53 61 1 + 85 53 62 1 + 85 53 63 1 + 85 53 64 1 + 85 53 65 1 + 85 53 66 1 + 85 53 67 1 + 85 53 68 1 + 85 53 69 1 + 85 53 70 1 + 85 53 71 0.971405 + 85 53 72 0.736168 + 85 53 73 0.325363 + 85 53 74 0.0282569 + 85 54 52 0.0182812 + 85 54 53 0.325363 + 85 54 54 0.777432 + 85 54 55 0.990286 + 85 54 56 1 + 85 54 57 1 + 85 54 58 1 + 85 54 59 1 + 85 54 60 1 + 85 54 61 1 + 85 54 62 1 + 85 54 63 1 + 85 54 64 1 + 85 54 65 1 + 85 54 66 1 + 85 54 67 1 + 85 54 68 1 + 85 54 69 1 + 85 54 70 1 + 85 54 71 1 + 85 54 72 0.990286 + 85 54 73 0.777432 + 85 54 74 0.325363 + 85 54 75 0.0182812 + 85 55 51 0.00260739 + 85 55 52 0.240042 + 85 55 53 0.736168 + 85 55 54 0.990286 + 85 55 55 1 + 85 55 56 1 + 85 55 57 1 + 85 55 58 1 + 85 55 59 1 + 85 55 60 1 + 85 55 61 1 + 85 55 62 1 + 85 55 63 1 + 85 55 64 1 + 85 55 65 1 + 85 55 66 1 + 85 55 67 1 + 85 55 68 1 + 85 55 69 1 + 85 55 70 1 + 85 55 71 1 + 85 55 72 1 + 85 55 73 0.990286 + 85 55 74 0.736168 + 85 55 75 0.240042 + 85 55 76 0.00260739 + 85 56 51 0.104302 + 85 56 52 0.602276 + 85 56 53 0.971405 + 85 56 54 1 + 85 56 55 1 + 85 56 56 1 + 85 56 57 1 + 85 56 58 1 + 85 56 59 1 + 85 56 60 1 + 85 56 61 1 + 85 56 62 1 + 85 56 63 1 + 85 56 64 1 + 85 56 65 1 + 85 56 66 1 + 85 56 67 1 + 85 56 68 1 + 85 56 69 1 + 85 56 70 1 + 85 56 71 1 + 85 56 72 1 + 85 56 73 1 + 85 56 74 0.971405 + 85 56 75 0.602276 + 85 56 76 0.104302 + 85 57 50 0.0100187 + 85 57 51 0.370069 + 85 57 52 0.884209 + 85 57 53 1 + 85 57 54 1 + 85 57 55 1 + 85 57 56 1 + 85 57 57 1 + 85 57 58 1 + 85 57 59 1 + 85 57 60 1 + 85 57 61 1 + 85 57 62 1 + 85 57 63 1 + 85 57 64 1 + 85 57 65 1 + 85 57 66 1 + 85 57 67 1 + 85 57 68 1 + 85 57 69 1 + 85 57 70 1 + 85 57 71 1 + 85 57 72 1 + 85 57 73 1 + 85 57 74 1 + 85 57 75 0.884209 + 85 57 76 0.370069 + 85 57 77 0.0100187 + 85 58 50 0.105685 + 85 58 51 0.648356 + 85 58 52 0.991156 + 85 58 53 1 + 85 58 54 1 + 85 58 55 1 + 85 58 56 1 + 85 58 57 1 + 85 58 58 1 + 85 58 59 1 + 85 58 60 1 + 85 58 61 1 + 85 58 62 1 + 85 58 63 1 + 85 58 64 1 + 85 58 65 1 + 85 58 66 1 + 85 58 67 1 + 85 58 68 1 + 85 58 69 1 + 85 58 70 1 + 85 58 71 1 + 85 58 72 1 + 85 58 73 1 + 85 58 74 1 + 85 58 75 0.991156 + 85 58 76 0.648356 + 85 58 77 0.105685 + 85 59 49 0.000228244 + 85 59 50 0.28004 + 85 59 51 0.852122 + 85 59 52 1 + 85 59 53 1 + 85 59 54 1 + 85 59 55 1 + 85 59 56 1 + 85 59 57 1 + 85 59 58 1 + 85 59 59 1 + 85 59 60 1 + 85 59 61 1 + 85 59 62 1 + 85 59 63 1 + 85 59 64 1 + 85 59 65 1 + 85 59 66 1 + 85 59 67 1 + 85 59 68 1 + 85 59 69 1 + 85 59 70 1 + 85 59 71 1 + 85 59 72 1 + 85 59 73 1 + 85 59 74 1 + 85 59 75 1 + 85 59 76 0.852122 + 85 59 77 0.28004 + 85 59 78 0.000228244 + 85 60 49 0.0170305 + 85 60 50 0.462948 + 85 60 51 0.954076 + 85 60 52 1 + 85 60 53 1 + 85 60 54 1 + 85 60 55 1 + 85 60 56 1 + 85 60 57 1 + 85 60 58 1 + 85 60 59 1 + 85 60 60 1 + 85 60 61 1 + 85 60 62 1 + 85 60 63 1 + 85 60 64 1 + 85 60 65 1 + 85 60 66 1 + 85 60 67 1 + 85 60 68 1 + 85 60 69 1 + 85 60 70 1 + 85 60 71 1 + 85 60 72 1 + 85 60 73 1 + 85 60 74 1 + 85 60 75 1 + 85 60 76 0.954076 + 85 60 77 0.462948 + 85 60 78 0.0170305 + 85 61 49 0.061458 + 85 61 50 0.602307 + 85 61 51 0.992135 + 85 61 52 1 + 85 61 53 1 + 85 61 54 1 + 85 61 55 1 + 85 61 56 1 + 85 61 57 1 + 85 61 58 1 + 85 61 59 1 + 85 61 60 1 + 85 61 61 1 + 85 61 62 1 + 85 61 63 1 + 85 61 64 1 + 85 61 65 1 + 85 61 66 1 + 85 61 67 1 + 85 61 68 1 + 85 61 69 1 + 85 61 70 1 + 85 61 71 1 + 85 61 72 1 + 85 61 73 1 + 85 61 74 1 + 85 61 75 1 + 85 61 76 0.992135 + 85 61 77 0.602307 + 85 61 78 0.061458 + 85 62 49 0.10742 + 85 62 50 0.694555 + 85 62 51 0.99983 + 85 62 52 1 + 85 62 53 1 + 85 62 54 1 + 85 62 55 1 + 85 62 56 1 + 85 62 57 1 + 85 62 58 1 + 85 62 59 1 + 85 62 60 1 + 85 62 61 1 + 85 62 62 1 + 85 62 63 1 + 85 62 64 1 + 85 62 65 1 + 85 62 66 1 + 85 62 67 1 + 85 62 68 1 + 85 62 69 1 + 85 62 70 1 + 85 62 71 1 + 85 62 72 1 + 85 62 73 1 + 85 62 74 1 + 85 62 75 1 + 85 62 76 0.99983 + 85 62 77 0.694555 + 85 62 78 0.10742 + 85 63 49 0.135234 + 85 63 50 0.738943 + 85 63 51 1 + 85 63 52 1 + 85 63 53 1 + 85 63 54 1 + 85 63 55 1 + 85 63 56 1 + 85 63 57 1 + 85 63 58 1 + 85 63 59 1 + 85 63 60 1 + 85 63 61 1 + 85 63 62 1 + 85 63 63 1 + 85 63 64 1 + 85 63 65 1 + 85 63 66 1 + 85 63 67 1 + 85 63 68 1 + 85 63 69 1 + 85 63 70 1 + 85 63 71 1 + 85 63 72 1 + 85 63 73 1 + 85 63 74 1 + 85 63 75 1 + 85 63 76 1 + 85 63 77 0.738943 + 85 63 78 0.135234 + 85 64 49 0.135234 + 85 64 50 0.738943 + 85 64 51 1 + 85 64 52 1 + 85 64 53 1 + 85 64 54 1 + 85 64 55 1 + 85 64 56 1 + 85 64 57 1 + 85 64 58 1 + 85 64 59 1 + 85 64 60 1 + 85 64 61 1 + 85 64 62 1 + 85 64 63 1 + 85 64 64 1 + 85 64 65 1 + 85 64 66 1 + 85 64 67 1 + 85 64 68 1 + 85 64 69 1 + 85 64 70 1 + 85 64 71 1 + 85 64 72 1 + 85 64 73 1 + 85 64 74 1 + 85 64 75 1 + 85 64 76 1 + 85 64 77 0.738943 + 85 64 78 0.135234 + 85 65 49 0.10742 + 85 65 50 0.694555 + 85 65 51 0.99983 + 85 65 52 1 + 85 65 53 1 + 85 65 54 1 + 85 65 55 1 + 85 65 56 1 + 85 65 57 1 + 85 65 58 1 + 85 65 59 1 + 85 65 60 1 + 85 65 61 1 + 85 65 62 1 + 85 65 63 1 + 85 65 64 1 + 85 65 65 1 + 85 65 66 1 + 85 65 67 1 + 85 65 68 1 + 85 65 69 1 + 85 65 70 1 + 85 65 71 1 + 85 65 72 1 + 85 65 73 1 + 85 65 74 1 + 85 65 75 1 + 85 65 76 0.99983 + 85 65 77 0.694555 + 85 65 78 0.10742 + 85 66 49 0.061458 + 85 66 50 0.602307 + 85 66 51 0.992135 + 85 66 52 1 + 85 66 53 1 + 85 66 54 1 + 85 66 55 1 + 85 66 56 1 + 85 66 57 1 + 85 66 58 1 + 85 66 59 1 + 85 66 60 1 + 85 66 61 1 + 85 66 62 1 + 85 66 63 1 + 85 66 64 1 + 85 66 65 1 + 85 66 66 1 + 85 66 67 1 + 85 66 68 1 + 85 66 69 1 + 85 66 70 1 + 85 66 71 1 + 85 66 72 1 + 85 66 73 1 + 85 66 74 1 + 85 66 75 1 + 85 66 76 0.992135 + 85 66 77 0.602307 + 85 66 78 0.061458 + 85 67 49 0.0170305 + 85 67 50 0.462948 + 85 67 51 0.954076 + 85 67 52 1 + 85 67 53 1 + 85 67 54 1 + 85 67 55 1 + 85 67 56 1 + 85 67 57 1 + 85 67 58 1 + 85 67 59 1 + 85 67 60 1 + 85 67 61 1 + 85 67 62 1 + 85 67 63 1 + 85 67 64 1 + 85 67 65 1 + 85 67 66 1 + 85 67 67 1 + 85 67 68 1 + 85 67 69 1 + 85 67 70 1 + 85 67 71 1 + 85 67 72 1 + 85 67 73 1 + 85 67 74 1 + 85 67 75 1 + 85 67 76 0.954076 + 85 67 77 0.462948 + 85 67 78 0.0170305 + 85 68 49 0.000228244 + 85 68 50 0.28004 + 85 68 51 0.852122 + 85 68 52 1 + 85 68 53 1 + 85 68 54 1 + 85 68 55 1 + 85 68 56 1 + 85 68 57 1 + 85 68 58 1 + 85 68 59 1 + 85 68 60 1 + 85 68 61 1 + 85 68 62 1 + 85 68 63 1 + 85 68 64 1 + 85 68 65 1 + 85 68 66 1 + 85 68 67 1 + 85 68 68 1 + 85 68 69 1 + 85 68 70 1 + 85 68 71 1 + 85 68 72 1 + 85 68 73 1 + 85 68 74 1 + 85 68 75 1 + 85 68 76 0.852122 + 85 68 77 0.28004 + 85 68 78 0.000228244 + 85 69 50 0.105685 + 85 69 51 0.648356 + 85 69 52 0.991156 + 85 69 53 1 + 85 69 54 1 + 85 69 55 1 + 85 69 56 1 + 85 69 57 1 + 85 69 58 1 + 85 69 59 1 + 85 69 60 1 + 85 69 61 1 + 85 69 62 1 + 85 69 63 1 + 85 69 64 1 + 85 69 65 1 + 85 69 66 1 + 85 69 67 1 + 85 69 68 1 + 85 69 69 1 + 85 69 70 1 + 85 69 71 1 + 85 69 72 1 + 85 69 73 1 + 85 69 74 1 + 85 69 75 0.991156 + 85 69 76 0.648356 + 85 69 77 0.105685 + 85 70 50 0.0100187 + 85 70 51 0.370069 + 85 70 52 0.884209 + 85 70 53 1 + 85 70 54 1 + 85 70 55 1 + 85 70 56 1 + 85 70 57 1 + 85 70 58 1 + 85 70 59 1 + 85 70 60 1 + 85 70 61 1 + 85 70 62 1 + 85 70 63 1 + 85 70 64 1 + 85 70 65 1 + 85 70 66 1 + 85 70 67 1 + 85 70 68 1 + 85 70 69 1 + 85 70 70 1 + 85 70 71 1 + 85 70 72 1 + 85 70 73 1 + 85 70 74 1 + 85 70 75 0.884209 + 85 70 76 0.370069 + 85 70 77 0.0100187 + 85 71 51 0.104302 + 85 71 52 0.602276 + 85 71 53 0.971405 + 85 71 54 1 + 85 71 55 1 + 85 71 56 1 + 85 71 57 1 + 85 71 58 1 + 85 71 59 1 + 85 71 60 1 + 85 71 61 1 + 85 71 62 1 + 85 71 63 1 + 85 71 64 1 + 85 71 65 1 + 85 71 66 1 + 85 71 67 1 + 85 71 68 1 + 85 71 69 1 + 85 71 70 1 + 85 71 71 1 + 85 71 72 1 + 85 71 73 1 + 85 71 74 0.971405 + 85 71 75 0.602276 + 85 71 76 0.104302 + 85 72 51 0.00260739 + 85 72 52 0.240042 + 85 72 53 0.736168 + 85 72 54 0.990286 + 85 72 55 1 + 85 72 56 1 + 85 72 57 1 + 85 72 58 1 + 85 72 59 1 + 85 72 60 1 + 85 72 61 1 + 85 72 62 1 + 85 72 63 1 + 85 72 64 1 + 85 72 65 1 + 85 72 66 1 + 85 72 67 1 + 85 72 68 1 + 85 72 69 1 + 85 72 70 1 + 85 72 71 1 + 85 72 72 1 + 85 72 73 0.990286 + 85 72 74 0.736168 + 85 72 75 0.240042 + 85 72 76 0.00260739 + 85 73 52 0.0182812 + 85 73 53 0.325363 + 85 73 54 0.777432 + 85 73 55 0.990286 + 85 73 56 1 + 85 73 57 1 + 85 73 58 1 + 85 73 59 1 + 85 73 60 1 + 85 73 61 1 + 85 73 62 1 + 85 73 63 1 + 85 73 64 1 + 85 73 65 1 + 85 73 66 1 + 85 73 67 1 + 85 73 68 1 + 85 73 69 1 + 85 73 70 1 + 85 73 71 1 + 85 73 72 0.990286 + 85 73 73 0.777432 + 85 73 74 0.325363 + 85 73 75 0.0182812 + 85 74 53 0.0282569 + 85 74 54 0.325363 + 85 74 55 0.736168 + 85 74 56 0.971405 + 85 74 57 1 + 85 74 58 1 + 85 74 59 1 + 85 74 60 1 + 85 74 61 1 + 85 74 62 1 + 85 74 63 1 + 85 74 64 1 + 85 74 65 1 + 85 74 66 1 + 85 74 67 1 + 85 74 68 1 + 85 74 69 1 + 85 74 70 1 + 85 74 71 0.971405 + 85 74 72 0.736168 + 85 74 73 0.325363 + 85 74 74 0.0282569 + 85 75 54 0.0182812 + 85 75 55 0.240042 + 85 75 56 0.602276 + 85 75 57 0.884209 + 85 75 58 0.991156 + 85 75 59 1 + 85 75 60 1 + 85 75 61 1 + 85 75 62 1 + 85 75 63 1 + 85 75 64 1 + 85 75 65 1 + 85 75 66 1 + 85 75 67 1 + 85 75 68 1 + 85 75 69 0.991156 + 85 75 70 0.884209 + 85 75 71 0.602276 + 85 75 72 0.240042 + 85 75 73 0.0182812 + 85 76 55 0.00260739 + 85 76 56 0.104302 + 85 76 57 0.370069 + 85 76 58 0.648356 + 85 76 59 0.852122 + 85 76 60 0.954076 + 85 76 61 0.992135 + 85 76 62 0.99983 + 85 76 63 1 + 85 76 64 1 + 85 76 65 0.99983 + 85 76 66 0.992135 + 85 76 67 0.954076 + 85 76 68 0.852122 + 85 76 69 0.648356 + 85 76 70 0.370069 + 85 76 71 0.104302 + 85 76 72 0.00260739 + 85 77 57 0.0100187 + 85 77 58 0.105685 + 85 77 59 0.28004 + 85 77 60 0.462948 + 85 77 61 0.602307 + 85 77 62 0.694555 + 85 77 63 0.738943 + 85 77 64 0.738943 + 85 77 65 0.694555 + 85 77 66 0.602307 + 85 77 67 0.462948 + 85 77 68 0.28004 + 85 77 69 0.105685 + 85 77 70 0.0100187 + 85 78 59 0.000228244 + 85 78 60 0.0170305 + 85 78 61 0.061458 + 85 78 62 0.10742 + 85 78 63 0.135234 + 85 78 64 0.135234 + 85 78 65 0.10742 + 85 78 66 0.061458 + 85 78 67 0.0170305 + 85 78 68 0.000228244 + 86 50 62 0.000160193 + 86 50 63 0.00182891 + 86 50 64 0.00182891 + 86 50 65 0.000160193 + 86 51 58 0.000204528 + 86 51 59 0.0262369 + 86 51 60 0.106397 + 86 51 61 0.203942 + 86 51 62 0.286191 + 86 51 63 0.330857 + 86 51 64 0.330857 + 86 51 65 0.286191 + 86 51 66 0.203942 + 86 51 67 0.106397 + 86 51 68 0.0262369 + 86 51 69 0.000204528 + 86 52 56 3.07754e-05 + 86 52 57 0.0398206 + 86 52 58 0.204921 + 86 52 59 0.42026 + 86 52 60 0.598003 + 86 52 61 0.730298 + 86 52 62 0.813363 + 86 52 63 0.849603 + 86 52 64 0.849603 + 86 52 65 0.813363 + 86 52 66 0.730298 + 86 52 67 0.598003 + 86 52 68 0.42026 + 86 52 69 0.204921 + 86 52 70 0.0398206 + 86 52 71 3.07754e-05 + 86 53 55 0.00460294 + 86 53 56 0.134362 + 86 53 57 0.42026 + 86 53 58 0.686307 + 86 53 59 0.882677 + 86 53 60 0.97359 + 86 53 61 0.998593 + 86 53 62 1 + 86 53 63 1 + 86 53 64 1 + 86 53 65 1 + 86 53 66 0.998593 + 86 53 67 0.97359 + 86 53 68 0.882677 + 86 53 69 0.686307 + 86 53 70 0.42026 + 86 53 71 0.134362 + 86 53 72 0.00460294 + 86 54 54 0.0092981 + 86 54 55 0.205791 + 86 54 56 0.553699 + 86 54 57 0.848902 + 86 54 58 0.985777 + 86 54 59 1 + 86 54 60 1 + 86 54 61 1 + 86 54 62 1 + 86 54 63 1 + 86 54 64 1 + 86 54 65 1 + 86 54 66 1 + 86 54 67 1 + 86 54 68 1 + 86 54 69 0.985777 + 86 54 70 0.848902 + 86 54 71 0.553699 + 86 54 72 0.205791 + 86 54 73 0.0092981 + 86 55 53 0.00460294 + 86 55 54 0.205791 + 86 55 55 0.598003 + 86 55 56 0.913043 + 86 55 57 0.999295 + 86 55 58 1 + 86 55 59 1 + 86 55 60 1 + 86 55 61 1 + 86 55 62 1 + 86 55 63 1 + 86 55 64 1 + 86 55 65 1 + 86 55 66 1 + 86 55 67 1 + 86 55 68 1 + 86 55 69 1 + 86 55 70 0.999295 + 86 55 71 0.913043 + 86 55 72 0.598003 + 86 55 73 0.205791 + 86 55 74 0.00460294 + 86 56 52 3.07754e-05 + 86 56 53 0.134362 + 86 56 54 0.553699 + 86 56 55 0.913043 + 86 56 56 0.999937 + 86 56 57 1 + 86 56 58 1 + 86 56 59 1 + 86 56 60 1 + 86 56 61 1 + 86 56 62 1 + 86 56 63 1 + 86 56 64 1 + 86 56 65 1 + 86 56 66 1 + 86 56 67 1 + 86 56 68 1 + 86 56 69 1 + 86 56 70 1 + 86 56 71 0.999937 + 86 56 72 0.913043 + 86 56 73 0.553699 + 86 56 74 0.134362 + 86 56 75 3.07754e-05 + 86 57 52 0.0398206 + 86 57 53 0.42026 + 86 57 54 0.848902 + 86 57 55 0.999295 + 86 57 56 1 + 86 57 57 1 + 86 57 58 1 + 86 57 59 1 + 86 57 60 1 + 86 57 61 1 + 86 57 62 1 + 86 57 63 1 + 86 57 64 1 + 86 57 65 1 + 86 57 66 1 + 86 57 67 1 + 86 57 68 1 + 86 57 69 1 + 86 57 70 1 + 86 57 71 1 + 86 57 72 0.999295 + 86 57 73 0.848902 + 86 57 74 0.42026 + 86 57 75 0.0398206 + 86 58 51 0.000204528 + 86 58 52 0.204921 + 86 58 53 0.686307 + 86 58 54 0.985777 + 86 58 55 1 + 86 58 56 1 + 86 58 57 1 + 86 58 58 1 + 86 58 59 1 + 86 58 60 1 + 86 58 61 1 + 86 58 62 1 + 86 58 63 1 + 86 58 64 1 + 86 58 65 1 + 86 58 66 1 + 86 58 67 1 + 86 58 68 1 + 86 58 69 1 + 86 58 70 1 + 86 58 71 1 + 86 58 72 1 + 86 58 73 0.985777 + 86 58 74 0.686307 + 86 58 75 0.204921 + 86 58 76 0.000204528 + 86 59 51 0.0262369 + 86 59 52 0.42026 + 86 59 53 0.882677 + 86 59 54 1 + 86 59 55 1 + 86 59 56 1 + 86 59 57 1 + 86 59 58 1 + 86 59 59 1 + 86 59 60 1 + 86 59 61 1 + 86 59 62 1 + 86 59 63 1 + 86 59 64 1 + 86 59 65 1 + 86 59 66 1 + 86 59 67 1 + 86 59 68 1 + 86 59 69 1 + 86 59 70 1 + 86 59 71 1 + 86 59 72 1 + 86 59 73 1 + 86 59 74 0.882677 + 86 59 75 0.42026 + 86 59 76 0.0262369 + 86 60 51 0.106397 + 86 60 52 0.598003 + 86 60 53 0.97359 + 86 60 54 1 + 86 60 55 1 + 86 60 56 1 + 86 60 57 1 + 86 60 58 1 + 86 60 59 1 + 86 60 60 1 + 86 60 61 1 + 86 60 62 1 + 86 60 63 1 + 86 60 64 1 + 86 60 65 1 + 86 60 66 1 + 86 60 67 1 + 86 60 68 1 + 86 60 69 1 + 86 60 70 1 + 86 60 71 1 + 86 60 72 1 + 86 60 73 1 + 86 60 74 0.97359 + 86 60 75 0.598003 + 86 60 76 0.106397 + 86 61 51 0.203942 + 86 61 52 0.730298 + 86 61 53 0.998593 + 86 61 54 1 + 86 61 55 1 + 86 61 56 1 + 86 61 57 1 + 86 61 58 1 + 86 61 59 1 + 86 61 60 1 + 86 61 61 1 + 86 61 62 1 + 86 61 63 1 + 86 61 64 1 + 86 61 65 1 + 86 61 66 1 + 86 61 67 1 + 86 61 68 1 + 86 61 69 1 + 86 61 70 1 + 86 61 71 1 + 86 61 72 1 + 86 61 73 1 + 86 61 74 0.998593 + 86 61 75 0.730298 + 86 61 76 0.203942 + 86 62 50 0.000160193 + 86 62 51 0.286191 + 86 62 52 0.813363 + 86 62 53 1 + 86 62 54 1 + 86 62 55 1 + 86 62 56 1 + 86 62 57 1 + 86 62 58 1 + 86 62 59 1 + 86 62 60 1 + 86 62 61 1 + 86 62 62 1 + 86 62 63 1 + 86 62 64 1 + 86 62 65 1 + 86 62 66 1 + 86 62 67 1 + 86 62 68 1 + 86 62 69 1 + 86 62 70 1 + 86 62 71 1 + 86 62 72 1 + 86 62 73 1 + 86 62 74 1 + 86 62 75 0.813363 + 86 62 76 0.286191 + 86 62 77 0.000160193 + 86 63 50 0.00182891 + 86 63 51 0.330857 + 86 63 52 0.849603 + 86 63 53 1 + 86 63 54 1 + 86 63 55 1 + 86 63 56 1 + 86 63 57 1 + 86 63 58 1 + 86 63 59 1 + 86 63 60 1 + 86 63 61 1 + 86 63 62 1 + 86 63 63 1 + 86 63 64 1 + 86 63 65 1 + 86 63 66 1 + 86 63 67 1 + 86 63 68 1 + 86 63 69 1 + 86 63 70 1 + 86 63 71 1 + 86 63 72 1 + 86 63 73 1 + 86 63 74 1 + 86 63 75 0.849603 + 86 63 76 0.330857 + 86 63 77 0.00182891 + 86 64 50 0.00182891 + 86 64 51 0.330857 + 86 64 52 0.849603 + 86 64 53 1 + 86 64 54 1 + 86 64 55 1 + 86 64 56 1 + 86 64 57 1 + 86 64 58 1 + 86 64 59 1 + 86 64 60 1 + 86 64 61 1 + 86 64 62 1 + 86 64 63 1 + 86 64 64 1 + 86 64 65 1 + 86 64 66 1 + 86 64 67 1 + 86 64 68 1 + 86 64 69 1 + 86 64 70 1 + 86 64 71 1 + 86 64 72 1 + 86 64 73 1 + 86 64 74 1 + 86 64 75 0.849603 + 86 64 76 0.330857 + 86 64 77 0.00182891 + 86 65 50 0.000160193 + 86 65 51 0.286191 + 86 65 52 0.813363 + 86 65 53 1 + 86 65 54 1 + 86 65 55 1 + 86 65 56 1 + 86 65 57 1 + 86 65 58 1 + 86 65 59 1 + 86 65 60 1 + 86 65 61 1 + 86 65 62 1 + 86 65 63 1 + 86 65 64 1 + 86 65 65 1 + 86 65 66 1 + 86 65 67 1 + 86 65 68 1 + 86 65 69 1 + 86 65 70 1 + 86 65 71 1 + 86 65 72 1 + 86 65 73 1 + 86 65 74 1 + 86 65 75 0.813363 + 86 65 76 0.286191 + 86 65 77 0.000160193 + 86 66 51 0.203942 + 86 66 52 0.730298 + 86 66 53 0.998593 + 86 66 54 1 + 86 66 55 1 + 86 66 56 1 + 86 66 57 1 + 86 66 58 1 + 86 66 59 1 + 86 66 60 1 + 86 66 61 1 + 86 66 62 1 + 86 66 63 1 + 86 66 64 1 + 86 66 65 1 + 86 66 66 1 + 86 66 67 1 + 86 66 68 1 + 86 66 69 1 + 86 66 70 1 + 86 66 71 1 + 86 66 72 1 + 86 66 73 1 + 86 66 74 0.998593 + 86 66 75 0.730298 + 86 66 76 0.203942 + 86 67 51 0.106397 + 86 67 52 0.598003 + 86 67 53 0.97359 + 86 67 54 1 + 86 67 55 1 + 86 67 56 1 + 86 67 57 1 + 86 67 58 1 + 86 67 59 1 + 86 67 60 1 + 86 67 61 1 + 86 67 62 1 + 86 67 63 1 + 86 67 64 1 + 86 67 65 1 + 86 67 66 1 + 86 67 67 1 + 86 67 68 1 + 86 67 69 1 + 86 67 70 1 + 86 67 71 1 + 86 67 72 1 + 86 67 73 1 + 86 67 74 0.97359 + 86 67 75 0.598003 + 86 67 76 0.106397 + 86 68 51 0.0262369 + 86 68 52 0.42026 + 86 68 53 0.882677 + 86 68 54 1 + 86 68 55 1 + 86 68 56 1 + 86 68 57 1 + 86 68 58 1 + 86 68 59 1 + 86 68 60 1 + 86 68 61 1 + 86 68 62 1 + 86 68 63 1 + 86 68 64 1 + 86 68 65 1 + 86 68 66 1 + 86 68 67 1 + 86 68 68 1 + 86 68 69 1 + 86 68 70 1 + 86 68 71 1 + 86 68 72 1 + 86 68 73 1 + 86 68 74 0.882677 + 86 68 75 0.42026 + 86 68 76 0.0262369 + 86 69 51 0.000204528 + 86 69 52 0.204921 + 86 69 53 0.686307 + 86 69 54 0.985777 + 86 69 55 1 + 86 69 56 1 + 86 69 57 1 + 86 69 58 1 + 86 69 59 1 + 86 69 60 1 + 86 69 61 1 + 86 69 62 1 + 86 69 63 1 + 86 69 64 1 + 86 69 65 1 + 86 69 66 1 + 86 69 67 1 + 86 69 68 1 + 86 69 69 1 + 86 69 70 1 + 86 69 71 1 + 86 69 72 1 + 86 69 73 0.985777 + 86 69 74 0.686307 + 86 69 75 0.204921 + 86 69 76 0.000204528 + 86 70 52 0.0398206 + 86 70 53 0.42026 + 86 70 54 0.848902 + 86 70 55 0.999295 + 86 70 56 1 + 86 70 57 1 + 86 70 58 1 + 86 70 59 1 + 86 70 60 1 + 86 70 61 1 + 86 70 62 1 + 86 70 63 1 + 86 70 64 1 + 86 70 65 1 + 86 70 66 1 + 86 70 67 1 + 86 70 68 1 + 86 70 69 1 + 86 70 70 1 + 86 70 71 1 + 86 70 72 0.999295 + 86 70 73 0.848902 + 86 70 74 0.42026 + 86 70 75 0.0398206 + 86 71 52 3.07754e-05 + 86 71 53 0.134362 + 86 71 54 0.553699 + 86 71 55 0.913043 + 86 71 56 0.999937 + 86 71 57 1 + 86 71 58 1 + 86 71 59 1 + 86 71 60 1 + 86 71 61 1 + 86 71 62 1 + 86 71 63 1 + 86 71 64 1 + 86 71 65 1 + 86 71 66 1 + 86 71 67 1 + 86 71 68 1 + 86 71 69 1 + 86 71 70 1 + 86 71 71 0.999937 + 86 71 72 0.913043 + 86 71 73 0.553699 + 86 71 74 0.134362 + 86 71 75 3.07754e-05 + 86 72 53 0.00460294 + 86 72 54 0.205791 + 86 72 55 0.598003 + 86 72 56 0.913043 + 86 72 57 0.999295 + 86 72 58 1 + 86 72 59 1 + 86 72 60 1 + 86 72 61 1 + 86 72 62 1 + 86 72 63 1 + 86 72 64 1 + 86 72 65 1 + 86 72 66 1 + 86 72 67 1 + 86 72 68 1 + 86 72 69 1 + 86 72 70 0.999295 + 86 72 71 0.913043 + 86 72 72 0.598003 + 86 72 73 0.205791 + 86 72 74 0.00460294 + 86 73 54 0.0092981 + 86 73 55 0.205791 + 86 73 56 0.553699 + 86 73 57 0.848902 + 86 73 58 0.985777 + 86 73 59 1 + 86 73 60 1 + 86 73 61 1 + 86 73 62 1 + 86 73 63 1 + 86 73 64 1 + 86 73 65 1 + 86 73 66 1 + 86 73 67 1 + 86 73 68 1 + 86 73 69 0.985777 + 86 73 70 0.848902 + 86 73 71 0.553699 + 86 73 72 0.205791 + 86 73 73 0.0092981 + 86 74 55 0.00460294 + 86 74 56 0.134362 + 86 74 57 0.42026 + 86 74 58 0.686307 + 86 74 59 0.882677 + 86 74 60 0.97359 + 86 74 61 0.998593 + 86 74 62 1 + 86 74 63 1 + 86 74 64 1 + 86 74 65 1 + 86 74 66 0.998593 + 86 74 67 0.97359 + 86 74 68 0.882677 + 86 74 69 0.686307 + 86 74 70 0.42026 + 86 74 71 0.134362 + 86 74 72 0.00460294 + 86 75 56 3.07754e-05 + 86 75 57 0.0398206 + 86 75 58 0.204921 + 86 75 59 0.42026 + 86 75 60 0.598003 + 86 75 61 0.730298 + 86 75 62 0.813363 + 86 75 63 0.849603 + 86 75 64 0.849603 + 86 75 65 0.813363 + 86 75 66 0.730298 + 86 75 67 0.598003 + 86 75 68 0.42026 + 86 75 69 0.204921 + 86 75 70 0.0398206 + 86 75 71 3.07754e-05 + 86 76 58 0.000204528 + 86 76 59 0.0262369 + 86 76 60 0.106397 + 86 76 61 0.203942 + 86 76 62 0.286191 + 86 76 63 0.330857 + 86 76 64 0.330857 + 86 76 65 0.286191 + 86 76 66 0.203942 + 86 76 67 0.106397 + 86 76 68 0.0262369 + 86 76 69 0.000204528 + 86 77 62 0.000160193 + 86 77 63 0.00182891 + 86 77 64 0.00182891 + 86 77 65 0.000160193 + 87 52 61 9.9388e-05 + 87 52 62 0.00487084 + 87 52 63 0.012422 + 87 52 64 0.012422 + 87 52 65 0.00487084 + 87 52 66 9.9388e-05 + 87 53 58 4.51737e-05 + 87 53 59 0.0230554 + 87 53 60 0.106145 + 87 53 61 0.210787 + 87 53 62 0.295408 + 87 53 63 0.338304 + 87 53 64 0.338304 + 87 53 65 0.295408 + 87 53 66 0.210787 + 87 53 67 0.106145 + 87 53 68 0.0230554 + 87 53 69 4.51737e-05 + 87 54 57 0.013123 + 87 54 58 0.137253 + 87 54 59 0.338304 + 87 54 60 0.509102 + 87 54 61 0.63639 + 87 54 62 0.720869 + 87 54 63 0.762996 + 87 54 64 0.762996 + 87 54 65 0.720869 + 87 54 66 0.63639 + 87 54 67 0.509102 + 87 54 68 0.338304 + 87 54 69 0.137253 + 87 54 70 0.013123 + 87 55 56 0.036314 + 87 55 57 0.253138 + 87 55 58 0.509102 + 87 55 59 0.720869 + 87 55 60 0.880429 + 87 55 61 0.961214 + 87 55 62 0.990327 + 87 55 63 0.997684 + 87 55 64 0.997684 + 87 55 65 0.990327 + 87 55 66 0.961214 + 87 55 67 0.880429 + 87 55 68 0.720869 + 87 55 69 0.509102 + 87 55 70 0.253138 + 87 55 71 0.036314 + 87 56 55 0.036314 + 87 56 56 0.295471 + 87 56 57 0.594037 + 87 56 58 0.843357 + 87 56 59 0.979056 + 87 56 60 0.999993 + 87 56 61 1 + 87 56 62 1 + 87 56 63 1 + 87 56 64 1 + 87 56 65 1 + 87 56 66 1 + 87 56 67 0.999993 + 87 56 68 0.979056 + 87 56 69 0.843357 + 87 56 70 0.594037 + 87 56 71 0.295471 + 87 56 72 0.036314 + 87 57 54 0.013123 + 87 57 55 0.253138 + 87 57 56 0.594037 + 87 57 57 0.87979 + 87 57 58 0.996155 + 87 57 59 1 + 87 57 60 1 + 87 57 61 1 + 87 57 62 1 + 87 57 63 1 + 87 57 64 1 + 87 57 65 1 + 87 57 66 1 + 87 57 67 1 + 87 57 68 1 + 87 57 69 0.996155 + 87 57 70 0.87979 + 87 57 71 0.594037 + 87 57 72 0.253138 + 87 57 73 0.013123 + 87 58 53 4.51737e-05 + 87 58 54 0.137253 + 87 58 55 0.509102 + 87 58 56 0.843357 + 87 58 57 0.996155 + 87 58 58 1 + 87 58 59 1 + 87 58 60 1 + 87 58 61 1 + 87 58 62 1 + 87 58 63 1 + 87 58 64 1 + 87 58 65 1 + 87 58 66 1 + 87 58 67 1 + 87 58 68 1 + 87 58 69 1 + 87 58 70 0.996155 + 87 58 71 0.843357 + 87 58 72 0.509102 + 87 58 73 0.137253 + 87 58 74 4.51737e-05 + 87 59 53 0.0230554 + 87 59 54 0.338304 + 87 59 55 0.720869 + 87 59 56 0.979056 + 87 59 57 1 + 87 59 58 1 + 87 59 59 1 + 87 59 60 1 + 87 59 61 1 + 87 59 62 1 + 87 59 63 1 + 87 59 64 1 + 87 59 65 1 + 87 59 66 1 + 87 59 67 1 + 87 59 68 1 + 87 59 69 1 + 87 59 70 1 + 87 59 71 0.979056 + 87 59 72 0.720869 + 87 59 73 0.338304 + 87 59 74 0.0230554 + 87 60 53 0.106145 + 87 60 54 0.509102 + 87 60 55 0.880429 + 87 60 56 0.999993 + 87 60 57 1 + 87 60 58 1 + 87 60 59 1 + 87 60 60 1 + 87 60 61 1 + 87 60 62 1 + 87 60 63 1 + 87 60 64 1 + 87 60 65 1 + 87 60 66 1 + 87 60 67 1 + 87 60 68 1 + 87 60 69 1 + 87 60 70 1 + 87 60 71 0.999993 + 87 60 72 0.880429 + 87 60 73 0.509102 + 87 60 74 0.106145 + 87 61 52 9.9388e-05 + 87 61 53 0.210787 + 87 61 54 0.63639 + 87 61 55 0.961214 + 87 61 56 1 + 87 61 57 1 + 87 61 58 1 + 87 61 59 1 + 87 61 60 1 + 87 61 61 1 + 87 61 62 1 + 87 61 63 1 + 87 61 64 1 + 87 61 65 1 + 87 61 66 1 + 87 61 67 1 + 87 61 68 1 + 87 61 69 1 + 87 61 70 1 + 87 61 71 1 + 87 61 72 0.961214 + 87 61 73 0.63639 + 87 61 74 0.210787 + 87 61 75 9.9388e-05 + 87 62 52 0.00487084 + 87 62 53 0.295408 + 87 62 54 0.720869 + 87 62 55 0.990327 + 87 62 56 1 + 87 62 57 1 + 87 62 58 1 + 87 62 59 1 + 87 62 60 1 + 87 62 61 1 + 87 62 62 1 + 87 62 63 1 + 87 62 64 1 + 87 62 65 1 + 87 62 66 1 + 87 62 67 1 + 87 62 68 1 + 87 62 69 1 + 87 62 70 1 + 87 62 71 1 + 87 62 72 0.990327 + 87 62 73 0.720869 + 87 62 74 0.295408 + 87 62 75 0.00487084 + 87 63 52 0.012422 + 87 63 53 0.338304 + 87 63 54 0.762996 + 87 63 55 0.997684 + 87 63 56 1 + 87 63 57 1 + 87 63 58 1 + 87 63 59 1 + 87 63 60 1 + 87 63 61 1 + 87 63 62 1 + 87 63 63 1 + 87 63 64 1 + 87 63 65 1 + 87 63 66 1 + 87 63 67 1 + 87 63 68 1 + 87 63 69 1 + 87 63 70 1 + 87 63 71 1 + 87 63 72 0.997684 + 87 63 73 0.762996 + 87 63 74 0.338304 + 87 63 75 0.012422 + 87 64 52 0.012422 + 87 64 53 0.338304 + 87 64 54 0.762996 + 87 64 55 0.997684 + 87 64 56 1 + 87 64 57 1 + 87 64 58 1 + 87 64 59 1 + 87 64 60 1 + 87 64 61 1 + 87 64 62 1 + 87 64 63 1 + 87 64 64 1 + 87 64 65 1 + 87 64 66 1 + 87 64 67 1 + 87 64 68 1 + 87 64 69 1 + 87 64 70 1 + 87 64 71 1 + 87 64 72 0.997684 + 87 64 73 0.762996 + 87 64 74 0.338304 + 87 64 75 0.012422 + 87 65 52 0.00487084 + 87 65 53 0.295408 + 87 65 54 0.720869 + 87 65 55 0.990327 + 87 65 56 1 + 87 65 57 1 + 87 65 58 1 + 87 65 59 1 + 87 65 60 1 + 87 65 61 1 + 87 65 62 1 + 87 65 63 1 + 87 65 64 1 + 87 65 65 1 + 87 65 66 1 + 87 65 67 1 + 87 65 68 1 + 87 65 69 1 + 87 65 70 1 + 87 65 71 1 + 87 65 72 0.990327 + 87 65 73 0.720869 + 87 65 74 0.295408 + 87 65 75 0.00487084 + 87 66 52 9.9388e-05 + 87 66 53 0.210787 + 87 66 54 0.63639 + 87 66 55 0.961214 + 87 66 56 1 + 87 66 57 1 + 87 66 58 1 + 87 66 59 1 + 87 66 60 1 + 87 66 61 1 + 87 66 62 1 + 87 66 63 1 + 87 66 64 1 + 87 66 65 1 + 87 66 66 1 + 87 66 67 1 + 87 66 68 1 + 87 66 69 1 + 87 66 70 1 + 87 66 71 1 + 87 66 72 0.961214 + 87 66 73 0.63639 + 87 66 74 0.210787 + 87 66 75 9.9388e-05 + 87 67 53 0.106145 + 87 67 54 0.509102 + 87 67 55 0.880429 + 87 67 56 0.999993 + 87 67 57 1 + 87 67 58 1 + 87 67 59 1 + 87 67 60 1 + 87 67 61 1 + 87 67 62 1 + 87 67 63 1 + 87 67 64 1 + 87 67 65 1 + 87 67 66 1 + 87 67 67 1 + 87 67 68 1 + 87 67 69 1 + 87 67 70 1 + 87 67 71 0.999993 + 87 67 72 0.880429 + 87 67 73 0.509102 + 87 67 74 0.106145 + 87 68 53 0.0230554 + 87 68 54 0.338304 + 87 68 55 0.720869 + 87 68 56 0.979056 + 87 68 57 1 + 87 68 58 1 + 87 68 59 1 + 87 68 60 1 + 87 68 61 1 + 87 68 62 1 + 87 68 63 1 + 87 68 64 1 + 87 68 65 1 + 87 68 66 1 + 87 68 67 1 + 87 68 68 1 + 87 68 69 1 + 87 68 70 1 + 87 68 71 0.979056 + 87 68 72 0.720869 + 87 68 73 0.338304 + 87 68 74 0.0230554 + 87 69 53 4.51737e-05 + 87 69 54 0.137253 + 87 69 55 0.509102 + 87 69 56 0.843357 + 87 69 57 0.996155 + 87 69 58 1 + 87 69 59 1 + 87 69 60 1 + 87 69 61 1 + 87 69 62 1 + 87 69 63 1 + 87 69 64 1 + 87 69 65 1 + 87 69 66 1 + 87 69 67 1 + 87 69 68 1 + 87 69 69 1 + 87 69 70 0.996155 + 87 69 71 0.843357 + 87 69 72 0.509102 + 87 69 73 0.137253 + 87 69 74 4.51737e-05 + 87 70 54 0.013123 + 87 70 55 0.253138 + 87 70 56 0.594037 + 87 70 57 0.87979 + 87 70 58 0.996155 + 87 70 59 1 + 87 70 60 1 + 87 70 61 1 + 87 70 62 1 + 87 70 63 1 + 87 70 64 1 + 87 70 65 1 + 87 70 66 1 + 87 70 67 1 + 87 70 68 1 + 87 70 69 0.996155 + 87 70 70 0.87979 + 87 70 71 0.594037 + 87 70 72 0.253138 + 87 70 73 0.013123 + 87 71 55 0.036314 + 87 71 56 0.295471 + 87 71 57 0.594037 + 87 71 58 0.843357 + 87 71 59 0.979056 + 87 71 60 0.999993 + 87 71 61 1 + 87 71 62 1 + 87 71 63 1 + 87 71 64 1 + 87 71 65 1 + 87 71 66 1 + 87 71 67 0.999993 + 87 71 68 0.979056 + 87 71 69 0.843357 + 87 71 70 0.594037 + 87 71 71 0.295471 + 87 71 72 0.036314 + 87 72 56 0.036314 + 87 72 57 0.253138 + 87 72 58 0.509102 + 87 72 59 0.720869 + 87 72 60 0.880429 + 87 72 61 0.961214 + 87 72 62 0.990327 + 87 72 63 0.997684 + 87 72 64 0.997684 + 87 72 65 0.990327 + 87 72 66 0.961214 + 87 72 67 0.880429 + 87 72 68 0.720869 + 87 72 69 0.509102 + 87 72 70 0.253138 + 87 72 71 0.036314 + 87 73 57 0.013123 + 87 73 58 0.137253 + 87 73 59 0.338304 + 87 73 60 0.509102 + 87 73 61 0.63639 + 87 73 62 0.720869 + 87 73 63 0.762996 + 87 73 64 0.762996 + 87 73 65 0.720869 + 87 73 66 0.63639 + 87 73 67 0.509102 + 87 73 68 0.338304 + 87 73 69 0.137253 + 87 73 70 0.013123 + 87 74 58 4.51737e-05 + 87 74 59 0.0230554 + 87 74 60 0.106145 + 87 74 61 0.210787 + 87 74 62 0.295408 + 87 74 63 0.338304 + 87 74 64 0.338304 + 87 74 65 0.295408 + 87 74 66 0.210787 + 87 74 67 0.106145 + 87 74 68 0.0230554 + 87 74 69 4.51737e-05 + 87 75 61 9.9388e-05 + 87 75 62 0.00487084 + 87 75 63 0.012422 + 87 75 64 0.012422 + 87 75 65 0.00487084 + 87 75 66 9.9388e-05 + 88 55 60 0.00850155 + 88 55 61 0.0529903 + 88 55 62 0.10703 + 88 55 63 0.141143 + 88 55 64 0.141143 + 88 55 65 0.10703 + 88 55 66 0.0529903 + 88 55 67 0.00850155 + 88 56 58 0.00366907 + 88 56 59 0.0767609 + 88 56 60 0.221559 + 88 56 61 0.345113 + 88 56 62 0.42714 + 88 56 63 0.46805 + 88 56 64 0.46805 + 88 56 65 0.42714 + 88 56 66 0.345113 + 88 56 67 0.221559 + 88 56 68 0.0767609 + 88 56 69 0.00366907 + 88 57 57 0.00913973 + 88 57 58 0.142672 + 88 57 59 0.345113 + 88 57 60 0.508892 + 88 57 61 0.63101 + 88 57 62 0.712087 + 88 57 63 0.752526 + 88 57 64 0.752526 + 88 57 65 0.712087 + 88 57 66 0.63101 + 88 57 67 0.508892 + 88 57 68 0.345113 + 88 57 69 0.142672 + 88 57 70 0.00913973 + 88 58 56 0.00366907 + 88 58 57 0.142672 + 88 58 58 0.386161 + 88 58 59 0.590371 + 88 58 60 0.752526 + 88 58 61 0.873248 + 88 58 62 0.944047 + 88 58 63 0.969258 + 88 58 64 0.969258 + 88 58 65 0.944047 + 88 58 66 0.873248 + 88 58 67 0.752526 + 88 58 68 0.590371 + 88 58 69 0.386161 + 88 58 70 0.142672 + 88 58 71 0.00366907 + 88 59 56 0.0767609 + 88 59 57 0.345113 + 88 59 58 0.590371 + 88 59 59 0.792899 + 88 59 60 0.944121 + 88 59 61 0.99711 + 88 59 62 1 + 88 59 63 1 + 88 59 64 1 + 88 59 65 1 + 88 59 66 0.99711 + 88 59 67 0.944121 + 88 59 68 0.792899 + 88 59 69 0.590371 + 88 59 70 0.345113 + 88 59 71 0.0767609 + 88 60 55 0.00850155 + 88 60 56 0.221559 + 88 60 57 0.508892 + 88 60 58 0.752526 + 88 60 59 0.944121 + 88 60 60 0.999764 + 88 60 61 1 + 88 60 62 1 + 88 60 63 1 + 88 60 64 1 + 88 60 65 1 + 88 60 66 1 + 88 60 67 0.999764 + 88 60 68 0.944121 + 88 60 69 0.752526 + 88 60 70 0.508892 + 88 60 71 0.221559 + 88 60 72 0.00850155 + 88 61 55 0.0529903 + 88 61 56 0.345113 + 88 61 57 0.63101 + 88 61 58 0.873248 + 88 61 59 0.99711 + 88 61 60 1 + 88 61 61 1 + 88 61 62 1 + 88 61 63 1 + 88 61 64 1 + 88 61 65 1 + 88 61 66 1 + 88 61 67 1 + 88 61 68 0.99711 + 88 61 69 0.873248 + 88 61 70 0.63101 + 88 61 71 0.345113 + 88 61 72 0.0529903 + 88 62 55 0.10703 + 88 62 56 0.42714 + 88 62 57 0.712087 + 88 62 58 0.944047 + 88 62 59 1 + 88 62 60 1 + 88 62 61 1 + 88 62 62 1 + 88 62 63 1 + 88 62 64 1 + 88 62 65 1 + 88 62 66 1 + 88 62 67 1 + 88 62 68 1 + 88 62 69 0.944047 + 88 62 70 0.712087 + 88 62 71 0.42714 + 88 62 72 0.10703 + 88 63 55 0.141143 + 88 63 56 0.46805 + 88 63 57 0.752526 + 88 63 58 0.969258 + 88 63 59 1 + 88 63 60 1 + 88 63 61 1 + 88 63 62 1 + 88 63 63 1 + 88 63 64 1 + 88 63 65 1 + 88 63 66 1 + 88 63 67 1 + 88 63 68 1 + 88 63 69 0.969258 + 88 63 70 0.752526 + 88 63 71 0.46805 + 88 63 72 0.141143 + 88 64 55 0.141143 + 88 64 56 0.46805 + 88 64 57 0.752526 + 88 64 58 0.969258 + 88 64 59 1 + 88 64 60 1 + 88 64 61 1 + 88 64 62 1 + 88 64 63 1 + 88 64 64 1 + 88 64 65 1 + 88 64 66 1 + 88 64 67 1 + 88 64 68 1 + 88 64 69 0.969258 + 88 64 70 0.752526 + 88 64 71 0.46805 + 88 64 72 0.141143 + 88 65 55 0.10703 + 88 65 56 0.42714 + 88 65 57 0.712087 + 88 65 58 0.944047 + 88 65 59 1 + 88 65 60 1 + 88 65 61 1 + 88 65 62 1 + 88 65 63 1 + 88 65 64 1 + 88 65 65 1 + 88 65 66 1 + 88 65 67 1 + 88 65 68 1 + 88 65 69 0.944047 + 88 65 70 0.712087 + 88 65 71 0.42714 + 88 65 72 0.10703 + 88 66 55 0.0529903 + 88 66 56 0.345113 + 88 66 57 0.63101 + 88 66 58 0.873248 + 88 66 59 0.99711 + 88 66 60 1 + 88 66 61 1 + 88 66 62 1 + 88 66 63 1 + 88 66 64 1 + 88 66 65 1 + 88 66 66 1 + 88 66 67 1 + 88 66 68 0.99711 + 88 66 69 0.873248 + 88 66 70 0.63101 + 88 66 71 0.345113 + 88 66 72 0.0529903 + 88 67 55 0.00850155 + 88 67 56 0.221559 + 88 67 57 0.508892 + 88 67 58 0.752526 + 88 67 59 0.944121 + 88 67 60 0.999764 + 88 67 61 1 + 88 67 62 1 + 88 67 63 1 + 88 67 64 1 + 88 67 65 1 + 88 67 66 1 + 88 67 67 0.999764 + 88 67 68 0.944121 + 88 67 69 0.752526 + 88 67 70 0.508892 + 88 67 71 0.221559 + 88 67 72 0.00850155 + 88 68 56 0.0767609 + 88 68 57 0.345113 + 88 68 58 0.590371 + 88 68 59 0.792899 + 88 68 60 0.944121 + 88 68 61 0.99711 + 88 68 62 1 + 88 68 63 1 + 88 68 64 1 + 88 68 65 1 + 88 68 66 0.99711 + 88 68 67 0.944121 + 88 68 68 0.792899 + 88 68 69 0.590371 + 88 68 70 0.345113 + 88 68 71 0.0767609 + 88 69 56 0.00366907 + 88 69 57 0.142672 + 88 69 58 0.386161 + 88 69 59 0.590371 + 88 69 60 0.752526 + 88 69 61 0.873248 + 88 69 62 0.944047 + 88 69 63 0.969258 + 88 69 64 0.969258 + 88 69 65 0.944047 + 88 69 66 0.873248 + 88 69 67 0.752526 + 88 69 68 0.590371 + 88 69 69 0.386161 + 88 69 70 0.142672 + 88 69 71 0.00366907 + 88 70 57 0.00913973 + 88 70 58 0.142672 + 88 70 59 0.345113 + 88 70 60 0.508892 + 88 70 61 0.63101 + 88 70 62 0.712087 + 88 70 63 0.752526 + 88 70 64 0.752526 + 88 70 65 0.712087 + 88 70 66 0.63101 + 88 70 67 0.508892 + 88 70 68 0.345113 + 88 70 69 0.142672 + 88 70 70 0.00913973 + 88 71 58 0.00366907 + 88 71 59 0.0767609 + 88 71 60 0.221559 + 88 71 61 0.345113 + 88 71 62 0.42714 + 88 71 63 0.46805 + 88 71 64 0.46805 + 88 71 65 0.42714 + 88 71 66 0.345113 + 88 71 67 0.221559 + 88 71 68 0.0767609 + 88 71 69 0.00366907 + 88 72 60 0.00850155 + 88 72 61 0.0529903 + 88 72 62 0.10703 + 88 72 63 0.141143 + 88 72 64 0.141143 + 88 72 65 0.10703 + 88 72 66 0.0529903 + 88 72 67 0.00850155 + 89 58 61 0.000200097 + 89 58 62 0.0096893 + 89 58 63 0.0245266 + 89 58 64 0.0245266 + 89 58 65 0.0096893 + 89 58 66 0.000200097 + 89 59 60 0.00961546 + 89 59 61 0.0765779 + 89 59 62 0.153337 + 89 59 63 0.193067 + 89 59 64 0.193067 + 89 59 65 0.153337 + 89 59 66 0.0765779 + 89 59 67 0.00961546 + 89 60 59 0.00961546 + 89 60 60 0.11378 + 89 60 61 0.232735 + 89 60 62 0.311883 + 89 60 63 0.351365 + 89 60 64 0.351365 + 89 60 65 0.311883 + 89 60 66 0.232735 + 89 60 67 0.11378 + 89 60 68 0.00961546 + 89 61 58 0.000200097 + 89 61 59 0.0765779 + 89 61 60 0.232735 + 89 61 61 0.351365 + 89 61 62 0.430144 + 89 61 63 0.469442 + 89 61 64 0.469442 + 89 61 65 0.430144 + 89 61 66 0.351365 + 89 61 67 0.232735 + 89 61 68 0.0765779 + 89 61 69 0.000200097 + 89 62 58 0.0096893 + 89 62 59 0.153337 + 89 62 60 0.311883 + 89 62 61 0.430144 + 89 62 62 0.50868 + 89 62 63 0.547857 + 89 62 64 0.547857 + 89 62 65 0.50868 + 89 62 66 0.430144 + 89 62 67 0.311883 + 89 62 68 0.153337 + 89 62 69 0.0096893 + 89 63 58 0.0245266 + 89 63 59 0.193067 + 89 63 60 0.351365 + 89 63 61 0.469442 + 89 63 62 0.547857 + 89 63 63 0.586975 + 89 63 64 0.586975 + 89 63 65 0.547857 + 89 63 66 0.469442 + 89 63 67 0.351365 + 89 63 68 0.193067 + 89 63 69 0.0245266 + 89 64 58 0.0245266 + 89 64 59 0.193067 + 89 64 60 0.351365 + 89 64 61 0.469442 + 89 64 62 0.547857 + 89 64 63 0.586975 + 89 64 64 0.586975 + 89 64 65 0.547857 + 89 64 66 0.469442 + 89 64 67 0.351365 + 89 64 68 0.193067 + 89 64 69 0.0245266 + 89 65 58 0.0096893 + 89 65 59 0.153337 + 89 65 60 0.311883 + 89 65 61 0.430144 + 89 65 62 0.50868 + 89 65 63 0.547857 + 89 65 64 0.547857 + 89 65 65 0.50868 + 89 65 66 0.430144 + 89 65 67 0.311883 + 89 65 68 0.153337 + 89 65 69 0.0096893 + 89 66 58 0.000200097 + 89 66 59 0.0765779 + 89 66 60 0.232735 + 89 66 61 0.351365 + 89 66 62 0.430144 + 89 66 63 0.469442 + 89 66 64 0.469442 + 89 66 65 0.430144 + 89 66 66 0.351365 + 89 66 67 0.232735 + 89 66 68 0.0765779 + 89 66 69 0.000200097 + 89 67 59 0.00961546 + 89 67 60 0.11378 + 89 67 61 0.232735 + 89 67 62 0.311883 + 89 67 63 0.351365 + 89 67 64 0.351365 + 89 67 65 0.311883 + 89 67 66 0.232735 + 89 67 67 0.11378 + 89 67 68 0.00961546 + 89 68 60 0.00961546 + 89 68 61 0.0765779 + 89 68 62 0.153337 + 89 68 63 0.193067 + 89 68 64 0.193067 + 89 68 65 0.153337 + 89 68 66 0.0765779 + 89 68 67 0.00961546 + 89 69 61 0.000200097 + 89 69 62 0.0096893 + 89 69 63 0.0245266 + 89 69 64 0.0245266 + 89 69 65 0.0096893 + 89 69 66 0.000200097 diff --git a/test_3d/vof_value-16.dat b/test_3d/vof_value-16.dat new file mode 100644 index 000000000..c09b2a64d --- /dev/null +++ b/test_3d/vof_value-16.dat @@ -0,0 +1,280 @@ + 4 6 7 0.000604815 + 4 6 8 0.000604815 + 4 7 6 0.000604815 + 4 7 7 0.0972269 + 4 7 8 0.0972269 + 4 7 9 0.000604815 + 4 8 6 0.000604815 + 4 8 7 0.0972269 + 4 8 8 0.0972269 + 4 8 9 0.000604815 + 4 9 7 0.000604815 + 4 9 8 0.000604815 + 5 5 6 0.00815012 + 5 5 7 0.100462 + 5 5 8 0.100462 + 5 5 9 0.00815012 + 5 6 5 0.00815012 + 5 6 6 0.362607 + 5 6 7 0.746182 + 5 6 8 0.746182 + 5 6 9 0.362607 + 5 6 10 0.00815012 + 5 7 5 0.100462 + 5 7 6 0.746182 + 5 7 7 0.996095 + 5 7 8 0.996095 + 5 7 9 0.746182 + 5 7 10 0.100462 + 5 8 5 0.100462 + 5 8 6 0.746182 + 5 8 7 0.996095 + 5 8 8 0.996095 + 5 8 9 0.746182 + 5 8 10 0.100462 + 5 9 5 0.00815012 + 5 9 6 0.362607 + 5 9 7 0.746182 + 5 9 8 0.746182 + 5 9 9 0.362607 + 5 9 10 0.00815012 + 5 10 6 0.00815012 + 5 10 7 0.100462 + 5 10 8 0.100462 + 5 10 9 0.00815012 + 6 4 7 0.000604815 + 6 4 8 0.000604815 + 6 5 5 0.00815012 + 6 5 6 0.362607 + 6 5 7 0.746182 + 6 5 8 0.746182 + 6 5 9 0.362607 + 6 5 10 0.00815012 + 6 6 5 0.362607 + 6 6 6 0.982944 + 6 6 7 1 + 6 6 8 1 + 6 6 9 0.982944 + 6 6 10 0.362607 + 6 7 4 0.000604815 + 6 7 5 0.746182 + 6 7 6 1 + 6 7 7 1 + 6 7 8 1 + 6 7 9 1 + 6 7 10 0.746182 + 6 7 11 0.000604815 + 6 8 4 0.000604815 + 6 8 5 0.746182 + 6 8 6 1 + 6 8 7 1 + 6 8 8 1 + 6 8 9 1 + 6 8 10 0.746182 + 6 8 11 0.000604815 + 6 9 5 0.362607 + 6 9 6 0.982944 + 6 9 7 1 + 6 9 8 1 + 6 9 9 0.982944 + 6 9 10 0.362607 + 6 10 5 0.00815012 + 6 10 6 0.362607 + 6 10 7 0.746182 + 6 10 8 0.746182 + 6 10 9 0.362607 + 6 10 10 0.00815012 + 6 11 7 0.000604815 + 6 11 8 0.000604815 + 7 4 6 0.000604815 + 7 4 7 0.0972269 + 7 4 8 0.0972269 + 7 4 9 0.000604815 + 7 5 5 0.100462 + 7 5 6 0.746182 + 7 5 7 0.996095 + 7 5 8 0.996095 + 7 5 9 0.746182 + 7 5 10 0.100462 + 7 6 4 0.000604815 + 7 6 5 0.746182 + 7 6 6 1 + 7 6 7 1 + 7 6 8 1 + 7 6 9 1 + 7 6 10 0.746182 + 7 6 11 0.000604815 + 7 7 4 0.0972269 + 7 7 5 0.996095 + 7 7 6 1 + 7 7 7 1 + 7 7 8 1 + 7 7 9 1 + 7 7 10 0.996095 + 7 7 11 0.0972269 + 7 8 4 0.0972269 + 7 8 5 0.996095 + 7 8 6 1 + 7 8 7 1 + 7 8 8 1 + 7 8 9 1 + 7 8 10 0.996095 + 7 8 11 0.0972269 + 7 9 4 0.000604815 + 7 9 5 0.746182 + 7 9 6 1 + 7 9 7 1 + 7 9 8 1 + 7 9 9 1 + 7 9 10 0.746182 + 7 9 11 0.000604815 + 7 10 5 0.100462 + 7 10 6 0.746182 + 7 10 7 0.996095 + 7 10 8 0.996095 + 7 10 9 0.746182 + 7 10 10 0.100462 + 7 11 6 0.000604815 + 7 11 7 0.0972269 + 7 11 8 0.0972269 + 7 11 9 0.000604815 + 8 4 6 0.000604815 + 8 4 7 0.0972269 + 8 4 8 0.0972269 + 8 4 9 0.000604815 + 8 5 5 0.100462 + 8 5 6 0.746182 + 8 5 7 0.996095 + 8 5 8 0.996095 + 8 5 9 0.746182 + 8 5 10 0.100462 + 8 6 4 0.000604815 + 8 6 5 0.746182 + 8 6 6 1 + 8 6 7 1 + 8 6 8 1 + 8 6 9 1 + 8 6 10 0.746182 + 8 6 11 0.000604815 + 8 7 4 0.0972269 + 8 7 5 0.996095 + 8 7 6 1 + 8 7 7 1 + 8 7 8 1 + 8 7 9 1 + 8 7 10 0.996095 + 8 7 11 0.0972269 + 8 8 4 0.0972269 + 8 8 5 0.996095 + 8 8 6 1 + 8 8 7 1 + 8 8 8 1 + 8 8 9 1 + 8 8 10 0.996095 + 8 8 11 0.0972269 + 8 9 4 0.000604815 + 8 9 5 0.746182 + 8 9 6 1 + 8 9 7 1 + 8 9 8 1 + 8 9 9 1 + 8 9 10 0.746182 + 8 9 11 0.000604815 + 8 10 5 0.100462 + 8 10 6 0.746182 + 8 10 7 0.996095 + 8 10 8 0.996095 + 8 10 9 0.746182 + 8 10 10 0.100462 + 8 11 6 0.000604815 + 8 11 7 0.0972269 + 8 11 8 0.0972269 + 8 11 9 0.000604815 + 9 4 7 0.000604815 + 9 4 8 0.000604815 + 9 5 5 0.00815012 + 9 5 6 0.362607 + 9 5 7 0.746182 + 9 5 8 0.746182 + 9 5 9 0.362607 + 9 5 10 0.00815012 + 9 6 5 0.362607 + 9 6 6 0.982944 + 9 6 7 1 + 9 6 8 1 + 9 6 9 0.982944 + 9 6 10 0.362607 + 9 7 4 0.000604815 + 9 7 5 0.746182 + 9 7 6 1 + 9 7 7 1 + 9 7 8 1 + 9 7 9 1 + 9 7 10 0.746182 + 9 7 11 0.000604815 + 9 8 4 0.000604815 + 9 8 5 0.746182 + 9 8 6 1 + 9 8 7 1 + 9 8 8 1 + 9 8 9 1 + 9 8 10 0.746182 + 9 8 11 0.000604815 + 9 9 5 0.362607 + 9 9 6 0.982944 + 9 9 7 1 + 9 9 8 1 + 9 9 9 0.982944 + 9 9 10 0.362607 + 9 10 5 0.00815012 + 9 10 6 0.362607 + 9 10 7 0.746182 + 9 10 8 0.746182 + 9 10 9 0.362607 + 9 10 10 0.00815012 + 9 11 7 0.000604815 + 9 11 8 0.000604815 + 10 5 6 0.00815012 + 10 5 7 0.100462 + 10 5 8 0.100462 + 10 5 9 0.00815012 + 10 6 5 0.00815012 + 10 6 6 0.362607 + 10 6 7 0.746182 + 10 6 8 0.746182 + 10 6 9 0.362607 + 10 6 10 0.00815012 + 10 7 5 0.100462 + 10 7 6 0.746182 + 10 7 7 0.996095 + 10 7 8 0.996095 + 10 7 9 0.746182 + 10 7 10 0.100462 + 10 8 5 0.100462 + 10 8 6 0.746182 + 10 8 7 0.996095 + 10 8 8 0.996095 + 10 8 9 0.746182 + 10 8 10 0.100462 + 10 9 5 0.00815012 + 10 9 6 0.362607 + 10 9 7 0.746182 + 10 9 8 0.746182 + 10 9 9 0.362607 + 10 9 10 0.00815012 + 10 10 6 0.00815012 + 10 10 7 0.100462 + 10 10 8 0.100462 + 10 10 9 0.00815012 + 11 6 7 0.000604815 + 11 6 8 0.000604815 + 11 7 6 0.000604815 + 11 7 7 0.0972269 + 11 7 8 0.0972269 + 11 7 9 0.000604815 + 11 8 6 0.000604815 + 11 8 7 0.0972269 + 11 8 8 0.0972269 + 11 8 9 0.000604815 + 11 9 7 0.000604815 + 11 9 8 0.000604815 diff --git a/test_3d/vof_value-32.dat b/test_3d/vof_value-32.dat new file mode 100644 index 000000000..1d143e425 --- /dev/null +++ b/test_3d/vof_value-32.dat @@ -0,0 +1,1472 @@ + 9 13 15 0.00483852 + 9 13 16 0.00483852 + 9 14 14 0.0547709 + 9 14 15 0.187714 + 9 14 16 0.187714 + 9 14 17 0.0547709 + 9 15 13 0.00483852 + 9 15 14 0.187714 + 9 15 15 0.347616 + 9 15 16 0.347616 + 9 15 17 0.187714 + 9 15 18 0.00483852 + 9 16 13 0.00483852 + 9 16 14 0.187714 + 9 16 15 0.347616 + 9 16 16 0.347616 + 9 16 17 0.187714 + 9 16 18 0.00483852 + 9 17 14 0.0547709 + 9 17 15 0.187714 + 9 17 16 0.187714 + 9 17 17 0.0547709 + 9 18 15 0.00483852 + 9 18 16 0.00483852 + 10 12 13 0.0157633 + 10 12 14 0.165281 + 10 12 15 0.3171 + 10 12 16 0.3171 + 10 12 17 0.165281 + 10 12 18 0.0157633 + 10 13 12 0.0157633 + 10 13 13 0.319867 + 10 13 14 0.680775 + 10 13 15 0.849851 + 10 13 16 0.849851 + 10 13 17 0.680775 + 10 13 18 0.319867 + 10 13 19 0.0157633 + 10 14 12 0.165281 + 10 14 13 0.680775 + 10 14 14 0.968757 + 10 14 15 1 + 10 14 16 1 + 10 14 17 0.968757 + 10 14 18 0.680775 + 10 14 19 0.165281 + 10 15 12 0.3171 + 10 15 13 0.849851 + 10 15 14 1 + 10 15 15 1 + 10 15 16 1 + 10 15 17 1 + 10 15 18 0.849851 + 10 15 19 0.3171 + 10 16 12 0.3171 + 10 16 13 0.849851 + 10 16 14 1 + 10 16 15 1 + 10 16 16 1 + 10 16 17 1 + 10 16 18 0.849851 + 10 16 19 0.3171 + 10 17 12 0.165281 + 10 17 13 0.680775 + 10 17 14 0.968757 + 10 17 15 1 + 10 17 16 1 + 10 17 17 0.968757 + 10 17 18 0.680775 + 10 17 19 0.165281 + 10 18 12 0.0157633 + 10 18 13 0.319867 + 10 18 14 0.680775 + 10 18 15 0.849851 + 10 18 16 0.849851 + 10 18 17 0.680775 + 10 18 18 0.319867 + 10 18 19 0.0157633 + 10 19 13 0.0157633 + 10 19 14 0.165281 + 10 19 15 0.3171 + 10 19 16 0.3171 + 10 19 17 0.165281 + 10 19 18 0.0157633 + 11 11 13 0.065201 + 11 11 14 0.306934 + 11 11 15 0.49676 + 11 11 16 0.49676 + 11 11 17 0.306934 + 11 11 18 0.065201 + 11 12 12 0.156919 + 11 12 13 0.69838 + 11 12 14 0.957892 + 11 12 15 0.998555 + 11 12 16 0.998555 + 11 12 17 0.957892 + 11 12 18 0.69838 + 11 12 19 0.156919 + 11 13 11 0.065201 + 11 13 12 0.69838 + 11 13 13 0.995784 + 11 13 14 1 + 11 13 15 1 + 11 13 16 1 + 11 13 17 1 + 11 13 18 0.995784 + 11 13 19 0.69838 + 11 13 20 0.065201 + 11 14 11 0.306934 + 11 14 12 0.957892 + 11 14 13 1 + 11 14 14 1 + 11 14 15 1 + 11 14 16 1 + 11 14 17 1 + 11 14 18 1 + 11 14 19 0.957892 + 11 14 20 0.306934 + 11 15 11 0.49676 + 11 15 12 0.998555 + 11 15 13 1 + 11 15 14 1 + 11 15 15 1 + 11 15 16 1 + 11 15 17 1 + 11 15 18 1 + 11 15 19 0.998555 + 11 15 20 0.49676 + 11 16 11 0.49676 + 11 16 12 0.998555 + 11 16 13 1 + 11 16 14 1 + 11 16 15 1 + 11 16 16 1 + 11 16 17 1 + 11 16 18 1 + 11 16 19 0.998555 + 11 16 20 0.49676 + 11 17 11 0.306934 + 11 17 12 0.957892 + 11 17 13 1 + 11 17 14 1 + 11 17 15 1 + 11 17 16 1 + 11 17 17 1 + 11 17 18 1 + 11 17 19 0.957892 + 11 17 20 0.306934 + 11 18 11 0.065201 + 11 18 12 0.69838 + 11 18 13 0.995784 + 11 18 14 1 + 11 18 15 1 + 11 18 16 1 + 11 18 17 1 + 11 18 18 0.995784 + 11 18 19 0.69838 + 11 18 20 0.065201 + 11 19 12 0.156919 + 11 19 13 0.69838 + 11 19 14 0.957892 + 11 19 15 0.998555 + 11 19 16 0.998555 + 11 19 17 0.957892 + 11 19 18 0.69838 + 11 19 19 0.156919 + 11 20 13 0.065201 + 11 20 14 0.306934 + 11 20 15 0.49676 + 11 20 16 0.49676 + 11 20 17 0.306934 + 11 20 18 0.065201 + 12 10 13 0.0157633 + 12 10 14 0.165281 + 12 10 15 0.3171 + 12 10 16 0.3171 + 12 10 17 0.165281 + 12 10 18 0.0157633 + 12 11 12 0.156919 + 12 11 13 0.69838 + 12 11 14 0.957892 + 12 11 15 0.998555 + 12 11 16 0.998555 + 12 11 17 0.957892 + 12 11 18 0.69838 + 12 11 19 0.156919 + 12 12 11 0.156919 + 12 12 12 0.863553 + 12 12 13 1 + 12 12 14 1 + 12 12 15 1 + 12 12 16 1 + 12 12 17 1 + 12 12 18 1 + 12 12 19 0.863553 + 12 12 20 0.156919 + 12 13 10 0.0157633 + 12 13 11 0.69838 + 12 13 12 1 + 12 13 13 1 + 12 13 14 1 + 12 13 15 1 + 12 13 16 1 + 12 13 17 1 + 12 13 18 1 + 12 13 19 1 + 12 13 20 0.69838 + 12 13 21 0.0157633 + 12 14 10 0.165281 + 12 14 11 0.957892 + 12 14 12 1 + 12 14 13 1 + 12 14 14 1 + 12 14 15 1 + 12 14 16 1 + 12 14 17 1 + 12 14 18 1 + 12 14 19 1 + 12 14 20 0.957892 + 12 14 21 0.165281 + 12 15 10 0.3171 + 12 15 11 0.998555 + 12 15 12 1 + 12 15 13 1 + 12 15 14 1 + 12 15 15 1 + 12 15 16 1 + 12 15 17 1 + 12 15 18 1 + 12 15 19 1 + 12 15 20 0.998555 + 12 15 21 0.3171 + 12 16 10 0.3171 + 12 16 11 0.998555 + 12 16 12 1 + 12 16 13 1 + 12 16 14 1 + 12 16 15 1 + 12 16 16 1 + 12 16 17 1 + 12 16 18 1 + 12 16 19 1 + 12 16 20 0.998555 + 12 16 21 0.3171 + 12 17 10 0.165281 + 12 17 11 0.957892 + 12 17 12 1 + 12 17 13 1 + 12 17 14 1 + 12 17 15 1 + 12 17 16 1 + 12 17 17 1 + 12 17 18 1 + 12 17 19 1 + 12 17 20 0.957892 + 12 17 21 0.165281 + 12 18 10 0.0157633 + 12 18 11 0.69838 + 12 18 12 1 + 12 18 13 1 + 12 18 14 1 + 12 18 15 1 + 12 18 16 1 + 12 18 17 1 + 12 18 18 1 + 12 18 19 1 + 12 18 20 0.69838 + 12 18 21 0.0157633 + 12 19 11 0.156919 + 12 19 12 0.863553 + 12 19 13 1 + 12 19 14 1 + 12 19 15 1 + 12 19 16 1 + 12 19 17 1 + 12 19 18 1 + 12 19 19 0.863553 + 12 19 20 0.156919 + 12 20 12 0.156919 + 12 20 13 0.69838 + 12 20 14 0.957892 + 12 20 15 0.998555 + 12 20 16 0.998555 + 12 20 17 0.957892 + 12 20 18 0.69838 + 12 20 19 0.156919 + 12 21 13 0.0157633 + 12 21 14 0.165281 + 12 21 15 0.3171 + 12 21 16 0.3171 + 12 21 17 0.165281 + 12 21 18 0.0157633 + 13 9 15 0.00483852 + 13 9 16 0.00483852 + 13 10 12 0.0157633 + 13 10 13 0.319867 + 13 10 14 0.680775 + 13 10 15 0.849851 + 13 10 16 0.849851 + 13 10 17 0.680775 + 13 10 18 0.319867 + 13 10 19 0.0157633 + 13 11 11 0.065201 + 13 11 12 0.69838 + 13 11 13 0.995784 + 13 11 14 1 + 13 11 15 1 + 13 11 16 1 + 13 11 17 1 + 13 11 18 0.995784 + 13 11 19 0.69838 + 13 11 20 0.065201 + 13 12 10 0.0157633 + 13 12 11 0.69838 + 13 12 12 1 + 13 12 13 1 + 13 12 14 1 + 13 12 15 1 + 13 12 16 1 + 13 12 17 1 + 13 12 18 1 + 13 12 19 1 + 13 12 20 0.69838 + 13 12 21 0.0157633 + 13 13 10 0.319867 + 13 13 11 0.995784 + 13 13 12 1 + 13 13 13 1 + 13 13 14 1 + 13 13 15 1 + 13 13 16 1 + 13 13 17 1 + 13 13 18 1 + 13 13 19 1 + 13 13 20 0.995784 + 13 13 21 0.319867 + 13 14 10 0.680775 + 13 14 11 1 + 13 14 12 1 + 13 14 13 1 + 13 14 14 1 + 13 14 15 1 + 13 14 16 1 + 13 14 17 1 + 13 14 18 1 + 13 14 19 1 + 13 14 20 1 + 13 14 21 0.680775 + 13 15 9 0.00483852 + 13 15 10 0.849851 + 13 15 11 1 + 13 15 12 1 + 13 15 13 1 + 13 15 14 1 + 13 15 15 1 + 13 15 16 1 + 13 15 17 1 + 13 15 18 1 + 13 15 19 1 + 13 15 20 1 + 13 15 21 0.849851 + 13 15 22 0.00483852 + 13 16 9 0.00483852 + 13 16 10 0.849851 + 13 16 11 1 + 13 16 12 1 + 13 16 13 1 + 13 16 14 1 + 13 16 15 1 + 13 16 16 1 + 13 16 17 1 + 13 16 18 1 + 13 16 19 1 + 13 16 20 1 + 13 16 21 0.849851 + 13 16 22 0.00483852 + 13 17 10 0.680775 + 13 17 11 1 + 13 17 12 1 + 13 17 13 1 + 13 17 14 1 + 13 17 15 1 + 13 17 16 1 + 13 17 17 1 + 13 17 18 1 + 13 17 19 1 + 13 17 20 1 + 13 17 21 0.680775 + 13 18 10 0.319867 + 13 18 11 0.995784 + 13 18 12 1 + 13 18 13 1 + 13 18 14 1 + 13 18 15 1 + 13 18 16 1 + 13 18 17 1 + 13 18 18 1 + 13 18 19 1 + 13 18 20 0.995784 + 13 18 21 0.319867 + 13 19 10 0.0157633 + 13 19 11 0.69838 + 13 19 12 1 + 13 19 13 1 + 13 19 14 1 + 13 19 15 1 + 13 19 16 1 + 13 19 17 1 + 13 19 18 1 + 13 19 19 1 + 13 19 20 0.69838 + 13 19 21 0.0157633 + 13 20 11 0.065201 + 13 20 12 0.69838 + 13 20 13 0.995784 + 13 20 14 1 + 13 20 15 1 + 13 20 16 1 + 13 20 17 1 + 13 20 18 0.995784 + 13 20 19 0.69838 + 13 20 20 0.065201 + 13 21 12 0.0157633 + 13 21 13 0.319867 + 13 21 14 0.680775 + 13 21 15 0.849851 + 13 21 16 0.849851 + 13 21 17 0.680775 + 13 21 18 0.319867 + 13 21 19 0.0157633 + 13 22 15 0.00483852 + 13 22 16 0.00483852 + 14 9 14 0.0547709 + 14 9 15 0.187714 + 14 9 16 0.187714 + 14 9 17 0.0547709 + 14 10 12 0.165281 + 14 10 13 0.680775 + 14 10 14 0.968757 + 14 10 15 1 + 14 10 16 1 + 14 10 17 0.968757 + 14 10 18 0.680775 + 14 10 19 0.165281 + 14 11 11 0.306934 + 14 11 12 0.957892 + 14 11 13 1 + 14 11 14 1 + 14 11 15 1 + 14 11 16 1 + 14 11 17 1 + 14 11 18 1 + 14 11 19 0.957892 + 14 11 20 0.306934 + 14 12 10 0.165281 + 14 12 11 0.957892 + 14 12 12 1 + 14 12 13 1 + 14 12 14 1 + 14 12 15 1 + 14 12 16 1 + 14 12 17 1 + 14 12 18 1 + 14 12 19 1 + 14 12 20 0.957892 + 14 12 21 0.165281 + 14 13 10 0.680775 + 14 13 11 1 + 14 13 12 1 + 14 13 13 1 + 14 13 14 1 + 14 13 15 1 + 14 13 16 1 + 14 13 17 1 + 14 13 18 1 + 14 13 19 1 + 14 13 20 1 + 14 13 21 0.680775 + 14 14 9 0.0547709 + 14 14 10 0.968757 + 14 14 11 1 + 14 14 12 1 + 14 14 13 1 + 14 14 14 1 + 14 14 15 1 + 14 14 16 1 + 14 14 17 1 + 14 14 18 1 + 14 14 19 1 + 14 14 20 1 + 14 14 21 0.968757 + 14 14 22 0.0547709 + 14 15 9 0.187714 + 14 15 10 1 + 14 15 11 1 + 14 15 12 1 + 14 15 13 1 + 14 15 14 1 + 14 15 15 1 + 14 15 16 1 + 14 15 17 1 + 14 15 18 1 + 14 15 19 1 + 14 15 20 1 + 14 15 21 1 + 14 15 22 0.187714 + 14 16 9 0.187714 + 14 16 10 1 + 14 16 11 1 + 14 16 12 1 + 14 16 13 1 + 14 16 14 1 + 14 16 15 1 + 14 16 16 1 + 14 16 17 1 + 14 16 18 1 + 14 16 19 1 + 14 16 20 1 + 14 16 21 1 + 14 16 22 0.187714 + 14 17 9 0.0547709 + 14 17 10 0.968757 + 14 17 11 1 + 14 17 12 1 + 14 17 13 1 + 14 17 14 1 + 14 17 15 1 + 14 17 16 1 + 14 17 17 1 + 14 17 18 1 + 14 17 19 1 + 14 17 20 1 + 14 17 21 0.968757 + 14 17 22 0.0547709 + 14 18 10 0.680775 + 14 18 11 1 + 14 18 12 1 + 14 18 13 1 + 14 18 14 1 + 14 18 15 1 + 14 18 16 1 + 14 18 17 1 + 14 18 18 1 + 14 18 19 1 + 14 18 20 1 + 14 18 21 0.680775 + 14 19 10 0.165281 + 14 19 11 0.957892 + 14 19 12 1 + 14 19 13 1 + 14 19 14 1 + 14 19 15 1 + 14 19 16 1 + 14 19 17 1 + 14 19 18 1 + 14 19 19 1 + 14 19 20 0.957892 + 14 19 21 0.165281 + 14 20 11 0.306934 + 14 20 12 0.957892 + 14 20 13 1 + 14 20 14 1 + 14 20 15 1 + 14 20 16 1 + 14 20 17 1 + 14 20 18 1 + 14 20 19 0.957892 + 14 20 20 0.306934 + 14 21 12 0.165281 + 14 21 13 0.680775 + 14 21 14 0.968757 + 14 21 15 1 + 14 21 16 1 + 14 21 17 0.968757 + 14 21 18 0.680775 + 14 21 19 0.165281 + 14 22 14 0.0547709 + 14 22 15 0.187714 + 14 22 16 0.187714 + 14 22 17 0.0547709 + 15 9 13 0.00483852 + 15 9 14 0.187714 + 15 9 15 0.347616 + 15 9 16 0.347616 + 15 9 17 0.187714 + 15 9 18 0.00483852 + 15 10 12 0.3171 + 15 10 13 0.849851 + 15 10 14 1 + 15 10 15 1 + 15 10 16 1 + 15 10 17 1 + 15 10 18 0.849851 + 15 10 19 0.3171 + 15 11 11 0.49676 + 15 11 12 0.998555 + 15 11 13 1 + 15 11 14 1 + 15 11 15 1 + 15 11 16 1 + 15 11 17 1 + 15 11 18 1 + 15 11 19 0.998555 + 15 11 20 0.49676 + 15 12 10 0.3171 + 15 12 11 0.998555 + 15 12 12 1 + 15 12 13 1 + 15 12 14 1 + 15 12 15 1 + 15 12 16 1 + 15 12 17 1 + 15 12 18 1 + 15 12 19 1 + 15 12 20 0.998555 + 15 12 21 0.3171 + 15 13 9 0.00483852 + 15 13 10 0.849851 + 15 13 11 1 + 15 13 12 1 + 15 13 13 1 + 15 13 14 1 + 15 13 15 1 + 15 13 16 1 + 15 13 17 1 + 15 13 18 1 + 15 13 19 1 + 15 13 20 1 + 15 13 21 0.849851 + 15 13 22 0.00483852 + 15 14 9 0.187714 + 15 14 10 1 + 15 14 11 1 + 15 14 12 1 + 15 14 13 1 + 15 14 14 1 + 15 14 15 1 + 15 14 16 1 + 15 14 17 1 + 15 14 18 1 + 15 14 19 1 + 15 14 20 1 + 15 14 21 1 + 15 14 22 0.187714 + 15 15 9 0.347616 + 15 15 10 1 + 15 15 11 1 + 15 15 12 1 + 15 15 13 1 + 15 15 14 1 + 15 15 15 1 + 15 15 16 1 + 15 15 17 1 + 15 15 18 1 + 15 15 19 1 + 15 15 20 1 + 15 15 21 1 + 15 15 22 0.347616 + 15 16 9 0.347616 + 15 16 10 1 + 15 16 11 1 + 15 16 12 1 + 15 16 13 1 + 15 16 14 1 + 15 16 15 1 + 15 16 16 1 + 15 16 17 1 + 15 16 18 1 + 15 16 19 1 + 15 16 20 1 + 15 16 21 1 + 15 16 22 0.347616 + 15 17 9 0.187714 + 15 17 10 1 + 15 17 11 1 + 15 17 12 1 + 15 17 13 1 + 15 17 14 1 + 15 17 15 1 + 15 17 16 1 + 15 17 17 1 + 15 17 18 1 + 15 17 19 1 + 15 17 20 1 + 15 17 21 1 + 15 17 22 0.187714 + 15 18 9 0.00483852 + 15 18 10 0.849851 + 15 18 11 1 + 15 18 12 1 + 15 18 13 1 + 15 18 14 1 + 15 18 15 1 + 15 18 16 1 + 15 18 17 1 + 15 18 18 1 + 15 18 19 1 + 15 18 20 1 + 15 18 21 0.849851 + 15 18 22 0.00483852 + 15 19 10 0.3171 + 15 19 11 0.998555 + 15 19 12 1 + 15 19 13 1 + 15 19 14 1 + 15 19 15 1 + 15 19 16 1 + 15 19 17 1 + 15 19 18 1 + 15 19 19 1 + 15 19 20 0.998555 + 15 19 21 0.3171 + 15 20 11 0.49676 + 15 20 12 0.998555 + 15 20 13 1 + 15 20 14 1 + 15 20 15 1 + 15 20 16 1 + 15 20 17 1 + 15 20 18 1 + 15 20 19 0.998555 + 15 20 20 0.49676 + 15 21 12 0.3171 + 15 21 13 0.849851 + 15 21 14 1 + 15 21 15 1 + 15 21 16 1 + 15 21 17 1 + 15 21 18 0.849851 + 15 21 19 0.3171 + 15 22 13 0.00483852 + 15 22 14 0.187714 + 15 22 15 0.347616 + 15 22 16 0.347616 + 15 22 17 0.187714 + 15 22 18 0.00483852 + 16 9 13 0.00483852 + 16 9 14 0.187714 + 16 9 15 0.347616 + 16 9 16 0.347616 + 16 9 17 0.187714 + 16 9 18 0.00483852 + 16 10 12 0.3171 + 16 10 13 0.849851 + 16 10 14 1 + 16 10 15 1 + 16 10 16 1 + 16 10 17 1 + 16 10 18 0.849851 + 16 10 19 0.3171 + 16 11 11 0.49676 + 16 11 12 0.998555 + 16 11 13 1 + 16 11 14 1 + 16 11 15 1 + 16 11 16 1 + 16 11 17 1 + 16 11 18 1 + 16 11 19 0.998555 + 16 11 20 0.49676 + 16 12 10 0.3171 + 16 12 11 0.998555 + 16 12 12 1 + 16 12 13 1 + 16 12 14 1 + 16 12 15 1 + 16 12 16 1 + 16 12 17 1 + 16 12 18 1 + 16 12 19 1 + 16 12 20 0.998555 + 16 12 21 0.3171 + 16 13 9 0.00483852 + 16 13 10 0.849851 + 16 13 11 1 + 16 13 12 1 + 16 13 13 1 + 16 13 14 1 + 16 13 15 1 + 16 13 16 1 + 16 13 17 1 + 16 13 18 1 + 16 13 19 1 + 16 13 20 1 + 16 13 21 0.849851 + 16 13 22 0.00483852 + 16 14 9 0.187714 + 16 14 10 1 + 16 14 11 1 + 16 14 12 1 + 16 14 13 1 + 16 14 14 1 + 16 14 15 1 + 16 14 16 1 + 16 14 17 1 + 16 14 18 1 + 16 14 19 1 + 16 14 20 1 + 16 14 21 1 + 16 14 22 0.187714 + 16 15 9 0.347616 + 16 15 10 1 + 16 15 11 1 + 16 15 12 1 + 16 15 13 1 + 16 15 14 1 + 16 15 15 1 + 16 15 16 1 + 16 15 17 1 + 16 15 18 1 + 16 15 19 1 + 16 15 20 1 + 16 15 21 1 + 16 15 22 0.347616 + 16 16 9 0.347616 + 16 16 10 1 + 16 16 11 1 + 16 16 12 1 + 16 16 13 1 + 16 16 14 1 + 16 16 15 1 + 16 16 16 1 + 16 16 17 1 + 16 16 18 1 + 16 16 19 1 + 16 16 20 1 + 16 16 21 1 + 16 16 22 0.347616 + 16 17 9 0.187714 + 16 17 10 1 + 16 17 11 1 + 16 17 12 1 + 16 17 13 1 + 16 17 14 1 + 16 17 15 1 + 16 17 16 1 + 16 17 17 1 + 16 17 18 1 + 16 17 19 1 + 16 17 20 1 + 16 17 21 1 + 16 17 22 0.187714 + 16 18 9 0.00483852 + 16 18 10 0.849851 + 16 18 11 1 + 16 18 12 1 + 16 18 13 1 + 16 18 14 1 + 16 18 15 1 + 16 18 16 1 + 16 18 17 1 + 16 18 18 1 + 16 18 19 1 + 16 18 20 1 + 16 18 21 0.849851 + 16 18 22 0.00483852 + 16 19 10 0.3171 + 16 19 11 0.998555 + 16 19 12 1 + 16 19 13 1 + 16 19 14 1 + 16 19 15 1 + 16 19 16 1 + 16 19 17 1 + 16 19 18 1 + 16 19 19 1 + 16 19 20 0.998555 + 16 19 21 0.3171 + 16 20 11 0.49676 + 16 20 12 0.998555 + 16 20 13 1 + 16 20 14 1 + 16 20 15 1 + 16 20 16 1 + 16 20 17 1 + 16 20 18 1 + 16 20 19 0.998555 + 16 20 20 0.49676 + 16 21 12 0.3171 + 16 21 13 0.849851 + 16 21 14 1 + 16 21 15 1 + 16 21 16 1 + 16 21 17 1 + 16 21 18 0.849851 + 16 21 19 0.3171 + 16 22 13 0.00483852 + 16 22 14 0.187714 + 16 22 15 0.347616 + 16 22 16 0.347616 + 16 22 17 0.187714 + 16 22 18 0.00483852 + 17 9 14 0.0547709 + 17 9 15 0.187714 + 17 9 16 0.187714 + 17 9 17 0.0547709 + 17 10 12 0.165281 + 17 10 13 0.680775 + 17 10 14 0.968757 + 17 10 15 1 + 17 10 16 1 + 17 10 17 0.968757 + 17 10 18 0.680775 + 17 10 19 0.165281 + 17 11 11 0.306934 + 17 11 12 0.957892 + 17 11 13 1 + 17 11 14 1 + 17 11 15 1 + 17 11 16 1 + 17 11 17 1 + 17 11 18 1 + 17 11 19 0.957892 + 17 11 20 0.306934 + 17 12 10 0.165281 + 17 12 11 0.957892 + 17 12 12 1 + 17 12 13 1 + 17 12 14 1 + 17 12 15 1 + 17 12 16 1 + 17 12 17 1 + 17 12 18 1 + 17 12 19 1 + 17 12 20 0.957892 + 17 12 21 0.165281 + 17 13 10 0.680775 + 17 13 11 1 + 17 13 12 1 + 17 13 13 1 + 17 13 14 1 + 17 13 15 1 + 17 13 16 1 + 17 13 17 1 + 17 13 18 1 + 17 13 19 1 + 17 13 20 1 + 17 13 21 0.680775 + 17 14 9 0.0547709 + 17 14 10 0.968757 + 17 14 11 1 + 17 14 12 1 + 17 14 13 1 + 17 14 14 1 + 17 14 15 1 + 17 14 16 1 + 17 14 17 1 + 17 14 18 1 + 17 14 19 1 + 17 14 20 1 + 17 14 21 0.968757 + 17 14 22 0.0547709 + 17 15 9 0.187714 + 17 15 10 1 + 17 15 11 1 + 17 15 12 1 + 17 15 13 1 + 17 15 14 1 + 17 15 15 1 + 17 15 16 1 + 17 15 17 1 + 17 15 18 1 + 17 15 19 1 + 17 15 20 1 + 17 15 21 1 + 17 15 22 0.187714 + 17 16 9 0.187714 + 17 16 10 1 + 17 16 11 1 + 17 16 12 1 + 17 16 13 1 + 17 16 14 1 + 17 16 15 1 + 17 16 16 1 + 17 16 17 1 + 17 16 18 1 + 17 16 19 1 + 17 16 20 1 + 17 16 21 1 + 17 16 22 0.187714 + 17 17 9 0.0547709 + 17 17 10 0.968757 + 17 17 11 1 + 17 17 12 1 + 17 17 13 1 + 17 17 14 1 + 17 17 15 1 + 17 17 16 1 + 17 17 17 1 + 17 17 18 1 + 17 17 19 1 + 17 17 20 1 + 17 17 21 0.968757 + 17 17 22 0.0547709 + 17 18 10 0.680775 + 17 18 11 1 + 17 18 12 1 + 17 18 13 1 + 17 18 14 1 + 17 18 15 1 + 17 18 16 1 + 17 18 17 1 + 17 18 18 1 + 17 18 19 1 + 17 18 20 1 + 17 18 21 0.680775 + 17 19 10 0.165281 + 17 19 11 0.957892 + 17 19 12 1 + 17 19 13 1 + 17 19 14 1 + 17 19 15 1 + 17 19 16 1 + 17 19 17 1 + 17 19 18 1 + 17 19 19 1 + 17 19 20 0.957892 + 17 19 21 0.165281 + 17 20 11 0.306934 + 17 20 12 0.957892 + 17 20 13 1 + 17 20 14 1 + 17 20 15 1 + 17 20 16 1 + 17 20 17 1 + 17 20 18 1 + 17 20 19 0.957892 + 17 20 20 0.306934 + 17 21 12 0.165281 + 17 21 13 0.680775 + 17 21 14 0.968757 + 17 21 15 1 + 17 21 16 1 + 17 21 17 0.968757 + 17 21 18 0.680775 + 17 21 19 0.165281 + 17 22 14 0.0547709 + 17 22 15 0.187714 + 17 22 16 0.187714 + 17 22 17 0.0547709 + 18 9 15 0.00483852 + 18 9 16 0.00483852 + 18 10 12 0.0157633 + 18 10 13 0.319867 + 18 10 14 0.680775 + 18 10 15 0.849851 + 18 10 16 0.849851 + 18 10 17 0.680775 + 18 10 18 0.319867 + 18 10 19 0.0157633 + 18 11 11 0.065201 + 18 11 12 0.69838 + 18 11 13 0.995784 + 18 11 14 1 + 18 11 15 1 + 18 11 16 1 + 18 11 17 1 + 18 11 18 0.995784 + 18 11 19 0.69838 + 18 11 20 0.065201 + 18 12 10 0.0157633 + 18 12 11 0.69838 + 18 12 12 1 + 18 12 13 1 + 18 12 14 1 + 18 12 15 1 + 18 12 16 1 + 18 12 17 1 + 18 12 18 1 + 18 12 19 1 + 18 12 20 0.69838 + 18 12 21 0.0157633 + 18 13 10 0.319867 + 18 13 11 0.995784 + 18 13 12 1 + 18 13 13 1 + 18 13 14 1 + 18 13 15 1 + 18 13 16 1 + 18 13 17 1 + 18 13 18 1 + 18 13 19 1 + 18 13 20 0.995784 + 18 13 21 0.319867 + 18 14 10 0.680775 + 18 14 11 1 + 18 14 12 1 + 18 14 13 1 + 18 14 14 1 + 18 14 15 1 + 18 14 16 1 + 18 14 17 1 + 18 14 18 1 + 18 14 19 1 + 18 14 20 1 + 18 14 21 0.680775 + 18 15 9 0.00483852 + 18 15 10 0.849851 + 18 15 11 1 + 18 15 12 1 + 18 15 13 1 + 18 15 14 1 + 18 15 15 1 + 18 15 16 1 + 18 15 17 1 + 18 15 18 1 + 18 15 19 1 + 18 15 20 1 + 18 15 21 0.849851 + 18 15 22 0.00483852 + 18 16 9 0.00483852 + 18 16 10 0.849851 + 18 16 11 1 + 18 16 12 1 + 18 16 13 1 + 18 16 14 1 + 18 16 15 1 + 18 16 16 1 + 18 16 17 1 + 18 16 18 1 + 18 16 19 1 + 18 16 20 1 + 18 16 21 0.849851 + 18 16 22 0.00483852 + 18 17 10 0.680775 + 18 17 11 1 + 18 17 12 1 + 18 17 13 1 + 18 17 14 1 + 18 17 15 1 + 18 17 16 1 + 18 17 17 1 + 18 17 18 1 + 18 17 19 1 + 18 17 20 1 + 18 17 21 0.680775 + 18 18 10 0.319867 + 18 18 11 0.995784 + 18 18 12 1 + 18 18 13 1 + 18 18 14 1 + 18 18 15 1 + 18 18 16 1 + 18 18 17 1 + 18 18 18 1 + 18 18 19 1 + 18 18 20 0.995784 + 18 18 21 0.319867 + 18 19 10 0.0157633 + 18 19 11 0.69838 + 18 19 12 1 + 18 19 13 1 + 18 19 14 1 + 18 19 15 1 + 18 19 16 1 + 18 19 17 1 + 18 19 18 1 + 18 19 19 1 + 18 19 20 0.69838 + 18 19 21 0.0157633 + 18 20 11 0.065201 + 18 20 12 0.69838 + 18 20 13 0.995784 + 18 20 14 1 + 18 20 15 1 + 18 20 16 1 + 18 20 17 1 + 18 20 18 0.995784 + 18 20 19 0.69838 + 18 20 20 0.065201 + 18 21 12 0.0157633 + 18 21 13 0.319867 + 18 21 14 0.680775 + 18 21 15 0.849851 + 18 21 16 0.849851 + 18 21 17 0.680775 + 18 21 18 0.319867 + 18 21 19 0.0157633 + 18 22 15 0.00483852 + 18 22 16 0.00483852 + 19 10 13 0.0157633 + 19 10 14 0.165281 + 19 10 15 0.3171 + 19 10 16 0.3171 + 19 10 17 0.165281 + 19 10 18 0.0157633 + 19 11 12 0.156919 + 19 11 13 0.69838 + 19 11 14 0.957892 + 19 11 15 0.998555 + 19 11 16 0.998555 + 19 11 17 0.957892 + 19 11 18 0.69838 + 19 11 19 0.156919 + 19 12 11 0.156919 + 19 12 12 0.863553 + 19 12 13 1 + 19 12 14 1 + 19 12 15 1 + 19 12 16 1 + 19 12 17 1 + 19 12 18 1 + 19 12 19 0.863553 + 19 12 20 0.156919 + 19 13 10 0.0157633 + 19 13 11 0.69838 + 19 13 12 1 + 19 13 13 1 + 19 13 14 1 + 19 13 15 1 + 19 13 16 1 + 19 13 17 1 + 19 13 18 1 + 19 13 19 1 + 19 13 20 0.69838 + 19 13 21 0.0157633 + 19 14 10 0.165281 + 19 14 11 0.957892 + 19 14 12 1 + 19 14 13 1 + 19 14 14 1 + 19 14 15 1 + 19 14 16 1 + 19 14 17 1 + 19 14 18 1 + 19 14 19 1 + 19 14 20 0.957892 + 19 14 21 0.165281 + 19 15 10 0.3171 + 19 15 11 0.998555 + 19 15 12 1 + 19 15 13 1 + 19 15 14 1 + 19 15 15 1 + 19 15 16 1 + 19 15 17 1 + 19 15 18 1 + 19 15 19 1 + 19 15 20 0.998555 + 19 15 21 0.3171 + 19 16 10 0.3171 + 19 16 11 0.998555 + 19 16 12 1 + 19 16 13 1 + 19 16 14 1 + 19 16 15 1 + 19 16 16 1 + 19 16 17 1 + 19 16 18 1 + 19 16 19 1 + 19 16 20 0.998555 + 19 16 21 0.3171 + 19 17 10 0.165281 + 19 17 11 0.957892 + 19 17 12 1 + 19 17 13 1 + 19 17 14 1 + 19 17 15 1 + 19 17 16 1 + 19 17 17 1 + 19 17 18 1 + 19 17 19 1 + 19 17 20 0.957892 + 19 17 21 0.165281 + 19 18 10 0.0157633 + 19 18 11 0.69838 + 19 18 12 1 + 19 18 13 1 + 19 18 14 1 + 19 18 15 1 + 19 18 16 1 + 19 18 17 1 + 19 18 18 1 + 19 18 19 1 + 19 18 20 0.69838 + 19 18 21 0.0157633 + 19 19 11 0.156919 + 19 19 12 0.863553 + 19 19 13 1 + 19 19 14 1 + 19 19 15 1 + 19 19 16 1 + 19 19 17 1 + 19 19 18 1 + 19 19 19 0.863553 + 19 19 20 0.156919 + 19 20 12 0.156919 + 19 20 13 0.69838 + 19 20 14 0.957892 + 19 20 15 0.998555 + 19 20 16 0.998555 + 19 20 17 0.957892 + 19 20 18 0.69838 + 19 20 19 0.156919 + 19 21 13 0.0157633 + 19 21 14 0.165281 + 19 21 15 0.3171 + 19 21 16 0.3171 + 19 21 17 0.165281 + 19 21 18 0.0157633 + 20 11 13 0.065201 + 20 11 14 0.306934 + 20 11 15 0.49676 + 20 11 16 0.49676 + 20 11 17 0.306934 + 20 11 18 0.065201 + 20 12 12 0.156919 + 20 12 13 0.69838 + 20 12 14 0.957892 + 20 12 15 0.998555 + 20 12 16 0.998555 + 20 12 17 0.957892 + 20 12 18 0.69838 + 20 12 19 0.156919 + 20 13 11 0.065201 + 20 13 12 0.69838 + 20 13 13 0.995784 + 20 13 14 1 + 20 13 15 1 + 20 13 16 1 + 20 13 17 1 + 20 13 18 0.995784 + 20 13 19 0.69838 + 20 13 20 0.065201 + 20 14 11 0.306934 + 20 14 12 0.957892 + 20 14 13 1 + 20 14 14 1 + 20 14 15 1 + 20 14 16 1 + 20 14 17 1 + 20 14 18 1 + 20 14 19 0.957892 + 20 14 20 0.306934 + 20 15 11 0.49676 + 20 15 12 0.998555 + 20 15 13 1 + 20 15 14 1 + 20 15 15 1 + 20 15 16 1 + 20 15 17 1 + 20 15 18 1 + 20 15 19 0.998555 + 20 15 20 0.49676 + 20 16 11 0.49676 + 20 16 12 0.998555 + 20 16 13 1 + 20 16 14 1 + 20 16 15 1 + 20 16 16 1 + 20 16 17 1 + 20 16 18 1 + 20 16 19 0.998555 + 20 16 20 0.49676 + 20 17 11 0.306934 + 20 17 12 0.957892 + 20 17 13 1 + 20 17 14 1 + 20 17 15 1 + 20 17 16 1 + 20 17 17 1 + 20 17 18 1 + 20 17 19 0.957892 + 20 17 20 0.306934 + 20 18 11 0.065201 + 20 18 12 0.69838 + 20 18 13 0.995784 + 20 18 14 1 + 20 18 15 1 + 20 18 16 1 + 20 18 17 1 + 20 18 18 0.995784 + 20 18 19 0.69838 + 20 18 20 0.065201 + 20 19 12 0.156919 + 20 19 13 0.69838 + 20 19 14 0.957892 + 20 19 15 0.998555 + 20 19 16 0.998555 + 20 19 17 0.957892 + 20 19 18 0.69838 + 20 19 19 0.156919 + 20 20 13 0.065201 + 20 20 14 0.306934 + 20 20 15 0.49676 + 20 20 16 0.49676 + 20 20 17 0.306934 + 20 20 18 0.065201 + 21 12 13 0.0157633 + 21 12 14 0.165281 + 21 12 15 0.3171 + 21 12 16 0.3171 + 21 12 17 0.165281 + 21 12 18 0.0157633 + 21 13 12 0.0157633 + 21 13 13 0.319867 + 21 13 14 0.680775 + 21 13 15 0.849851 + 21 13 16 0.849851 + 21 13 17 0.680775 + 21 13 18 0.319867 + 21 13 19 0.0157633 + 21 14 12 0.165281 + 21 14 13 0.680775 + 21 14 14 0.968757 + 21 14 15 1 + 21 14 16 1 + 21 14 17 0.968757 + 21 14 18 0.680775 + 21 14 19 0.165281 + 21 15 12 0.3171 + 21 15 13 0.849851 + 21 15 14 1 + 21 15 15 1 + 21 15 16 1 + 21 15 17 1 + 21 15 18 0.849851 + 21 15 19 0.3171 + 21 16 12 0.3171 + 21 16 13 0.849851 + 21 16 14 1 + 21 16 15 1 + 21 16 16 1 + 21 16 17 1 + 21 16 18 0.849851 + 21 16 19 0.3171 + 21 17 12 0.165281 + 21 17 13 0.680775 + 21 17 14 0.968757 + 21 17 15 1 + 21 17 16 1 + 21 17 17 0.968757 + 21 17 18 0.680775 + 21 17 19 0.165281 + 21 18 12 0.0157633 + 21 18 13 0.319867 + 21 18 14 0.680775 + 21 18 15 0.849851 + 21 18 16 0.849851 + 21 18 17 0.680775 + 21 18 18 0.319867 + 21 18 19 0.0157633 + 21 19 13 0.0157633 + 21 19 14 0.165281 + 21 19 15 0.3171 + 21 19 16 0.3171 + 21 19 17 0.165281 + 21 19 18 0.0157633 + 22 13 15 0.00483852 + 22 13 16 0.00483852 + 22 14 14 0.0547709 + 22 14 15 0.187714 + 22 14 16 0.187714 + 22 14 17 0.0547709 + 22 15 13 0.00483852 + 22 15 14 0.187714 + 22 15 15 0.347616 + 22 15 16 0.347616 + 22 15 17 0.187714 + 22 15 18 0.00483852 + 22 16 13 0.00483852 + 22 16 14 0.187714 + 22 16 15 0.347616 + 22 16 16 0.347616 + 22 16 17 0.187714 + 22 16 18 0.00483852 + 22 17 14 0.0547709 + 22 17 15 0.187714 + 22 17 16 0.187714 + 22 17 17 0.0547709 + 22 18 15 0.00483852 + 22 18 16 0.00483852 diff --git a/test_3d/vof_value-64.dat b/test_3d/vof_value-64.dat new file mode 100644 index 000000000..20c643cc4 --- /dev/null +++ b/test_3d/vof_value-64.dat @@ -0,0 +1,10336 @@ + 19 27 30 0.00768648 + 19 27 31 0.0310217 + 19 27 32 0.0310217 + 19 27 33 0.00768648 + 19 28 28 0.00114247 + 19 28 29 0.0710269 + 19 28 30 0.213322 + 19 28 31 0.294975 + 19 28 32 0.294975 + 19 28 33 0.213322 + 19 28 34 0.0710269 + 19 28 35 0.00114247 + 19 29 28 0.0710269 + 19 29 29 0.294975 + 19 29 30 0.456675 + 19 29 31 0.536741 + 19 29 32 0.536741 + 19 29 33 0.456675 + 19 29 34 0.294975 + 19 29 35 0.0710269 + 19 30 27 0.00768648 + 19 30 28 0.213322 + 19 30 29 0.456675 + 19 30 30 0.616297 + 19 30 31 0.695354 + 19 30 32 0.695354 + 19 30 33 0.616297 + 19 30 34 0.456675 + 19 30 35 0.213322 + 19 30 36 0.00768648 + 19 31 27 0.0310217 + 19 31 28 0.294975 + 19 31 29 0.536741 + 19 31 30 0.695354 + 19 31 31 0.773921 + 19 31 32 0.773921 + 19 31 33 0.695354 + 19 31 34 0.536741 + 19 31 35 0.294975 + 19 31 36 0.0310217 + 19 32 27 0.0310217 + 19 32 28 0.294975 + 19 32 29 0.536741 + 19 32 30 0.695354 + 19 32 31 0.773921 + 19 32 32 0.773921 + 19 32 33 0.695354 + 19 32 34 0.536741 + 19 32 35 0.294975 + 19 32 36 0.0310217 + 19 33 27 0.00768648 + 19 33 28 0.213322 + 19 33 29 0.456675 + 19 33 30 0.616297 + 19 33 31 0.695354 + 19 33 32 0.695354 + 19 33 33 0.616297 + 19 33 34 0.456675 + 19 33 35 0.213322 + 19 33 36 0.00768648 + 19 34 28 0.0710269 + 19 34 29 0.294975 + 19 34 30 0.456675 + 19 34 31 0.536741 + 19 34 32 0.536741 + 19 34 33 0.456675 + 19 34 34 0.294975 + 19 34 35 0.0710269 + 19 35 28 0.00114247 + 19 35 29 0.0710269 + 19 35 30 0.213322 + 19 35 31 0.294975 + 19 35 32 0.294975 + 19 35 33 0.213322 + 19 35 34 0.0710269 + 19 35 35 0.00114247 + 19 36 30 0.00768648 + 19 36 31 0.0310217 + 19 36 32 0.0310217 + 19 36 33 0.00768648 + 20 25 29 0.00330518 + 20 25 30 0.0387924 + 20 25 31 0.0773797 + 20 25 32 0.0773797 + 20 25 33 0.0387924 + 20 25 34 0.00330518 + 20 26 27 0.000575367 + 20 26 28 0.0743091 + 20 26 29 0.277158 + 20 26 30 0.452189 + 20 26 31 0.539246 + 20 26 32 0.539246 + 20 26 33 0.452189 + 20 26 34 0.277158 + 20 26 35 0.0743091 + 20 26 36 0.000575367 + 20 27 26 0.000575367 + 20 27 27 0.12736 + 20 27 28 0.452189 + 20 27 29 0.711413 + 20 27 30 0.873392 + 20 27 31 0.933984 + 20 27 32 0.933984 + 20 27 33 0.873392 + 20 27 34 0.711413 + 20 27 35 0.452189 + 20 27 36 0.12736 + 20 27 37 0.000575367 + 20 28 26 0.0743091 + 20 28 27 0.452189 + 20 28 28 0.795409 + 20 28 29 0.977321 + 20 28 30 0.999999 + 20 28 31 1 + 20 28 32 1 + 20 28 33 0.999999 + 20 28 34 0.977321 + 20 28 35 0.795409 + 20 28 36 0.452189 + 20 28 37 0.0743091 + 20 29 25 0.00330518 + 20 29 26 0.277158 + 20 29 27 0.711413 + 20 29 28 0.977321 + 20 29 29 1 + 20 29 30 1 + 20 29 31 1 + 20 29 32 1 + 20 29 33 1 + 20 29 34 1 + 20 29 35 0.977321 + 20 29 36 0.711413 + 20 29 37 0.277158 + 20 29 38 0.00330518 + 20 30 25 0.0387924 + 20 30 26 0.452189 + 20 30 27 0.873392 + 20 30 28 0.999999 + 20 30 29 1 + 20 30 30 1 + 20 30 31 1 + 20 30 32 1 + 20 30 33 1 + 20 30 34 1 + 20 30 35 0.999999 + 20 30 36 0.873392 + 20 30 37 0.452189 + 20 30 38 0.0387924 + 20 31 25 0.0773797 + 20 31 26 0.539246 + 20 31 27 0.933984 + 20 31 28 1 + 20 31 29 1 + 20 31 30 1 + 20 31 31 1 + 20 31 32 1 + 20 31 33 1 + 20 31 34 1 + 20 31 35 1 + 20 31 36 0.933984 + 20 31 37 0.539246 + 20 31 38 0.0773797 + 20 32 25 0.0773797 + 20 32 26 0.539246 + 20 32 27 0.933984 + 20 32 28 1 + 20 32 29 1 + 20 32 30 1 + 20 32 31 1 + 20 32 32 1 + 20 32 33 1 + 20 32 34 1 + 20 32 35 1 + 20 32 36 0.933984 + 20 32 37 0.539246 + 20 32 38 0.0773797 + 20 33 25 0.0387924 + 20 33 26 0.452189 + 20 33 27 0.873392 + 20 33 28 0.999999 + 20 33 29 1 + 20 33 30 1 + 20 33 31 1 + 20 33 32 1 + 20 33 33 1 + 20 33 34 1 + 20 33 35 0.999999 + 20 33 36 0.873392 + 20 33 37 0.452189 + 20 33 38 0.0387924 + 20 34 25 0.00330518 + 20 34 26 0.277158 + 20 34 27 0.711413 + 20 34 28 0.977321 + 20 34 29 1 + 20 34 30 1 + 20 34 31 1 + 20 34 32 1 + 20 34 33 1 + 20 34 34 1 + 20 34 35 0.977321 + 20 34 36 0.711413 + 20 34 37 0.277158 + 20 34 38 0.00330518 + 20 35 26 0.0743091 + 20 35 27 0.452189 + 20 35 28 0.795409 + 20 35 29 0.977321 + 20 35 30 0.999999 + 20 35 31 1 + 20 35 32 1 + 20 35 33 0.999999 + 20 35 34 0.977321 + 20 35 35 0.795409 + 20 35 36 0.452189 + 20 35 37 0.0743091 + 20 36 26 0.000575367 + 20 36 27 0.12736 + 20 36 28 0.452189 + 20 36 29 0.711413 + 20 36 30 0.873392 + 20 36 31 0.933984 + 20 36 32 0.933984 + 20 36 33 0.873392 + 20 36 34 0.711413 + 20 36 35 0.452189 + 20 36 36 0.12736 + 20 36 37 0.000575367 + 20 37 27 0.000575367 + 20 37 28 0.0743091 + 20 37 29 0.277158 + 20 37 30 0.452189 + 20 37 31 0.539246 + 20 37 32 0.539246 + 20 37 33 0.452189 + 20 37 34 0.277158 + 20 37 35 0.0743091 + 20 37 36 0.000575367 + 20 38 29 0.00330518 + 20 38 30 0.0387924 + 20 38 31 0.0773797 + 20 38 32 0.0773797 + 20 38 33 0.0387924 + 20 38 34 0.00330518 + 21 24 28 0.0180042 + 21 24 29 0.12727 + 21 24 30 0.264178 + 21 24 31 0.350849 + 21 24 32 0.350849 + 21 24 33 0.264178 + 21 24 34 0.12727 + 21 24 35 0.0180042 + 21 25 26 0.00154821 + 21 25 27 0.124558 + 21 25 28 0.446726 + 21 25 29 0.72694 + 21 25 30 0.876433 + 21 25 31 0.929166 + 21 25 32 0.929166 + 21 25 33 0.876433 + 21 25 34 0.72694 + 21 25 35 0.446726 + 21 25 36 0.124558 + 21 25 37 0.00154821 + 21 26 25 0.00154821 + 21 26 26 0.188742 + 21 26 27 0.635968 + 21 26 28 0.932236 + 21 26 29 0.998895 + 21 26 30 1 + 21 26 31 1 + 21 26 32 1 + 21 26 33 1 + 21 26 34 0.998895 + 21 26 35 0.932236 + 21 26 36 0.635968 + 21 26 37 0.188742 + 21 26 38 0.00154821 + 21 27 25 0.124558 + 21 27 26 0.635968 + 21 27 27 0.969751 + 21 27 28 1 + 21 27 29 1 + 21 27 30 1 + 21 27 31 1 + 21 27 32 1 + 21 27 33 1 + 21 27 34 1 + 21 27 35 1 + 21 27 36 0.969751 + 21 27 37 0.635968 + 21 27 38 0.124558 + 21 28 24 0.0180042 + 21 28 25 0.446726 + 21 28 26 0.932236 + 21 28 27 1 + 21 28 28 1 + 21 28 29 1 + 21 28 30 1 + 21 28 31 1 + 21 28 32 1 + 21 28 33 1 + 21 28 34 1 + 21 28 35 1 + 21 28 36 1 + 21 28 37 0.932236 + 21 28 38 0.446726 + 21 28 39 0.0180042 + 21 29 24 0.12727 + 21 29 25 0.72694 + 21 29 26 0.998895 + 21 29 27 1 + 21 29 28 1 + 21 29 29 1 + 21 29 30 1 + 21 29 31 1 + 21 29 32 1 + 21 29 33 1 + 21 29 34 1 + 21 29 35 1 + 21 29 36 1 + 21 29 37 0.998895 + 21 29 38 0.72694 + 21 29 39 0.12727 + 21 30 24 0.264178 + 21 30 25 0.876433 + 21 30 26 1 + 21 30 27 1 + 21 30 28 1 + 21 30 29 1 + 21 30 30 1 + 21 30 31 1 + 21 30 32 1 + 21 30 33 1 + 21 30 34 1 + 21 30 35 1 + 21 30 36 1 + 21 30 37 1 + 21 30 38 0.876433 + 21 30 39 0.264178 + 21 31 24 0.350849 + 21 31 25 0.929166 + 21 31 26 1 + 21 31 27 1 + 21 31 28 1 + 21 31 29 1 + 21 31 30 1 + 21 31 31 1 + 21 31 32 1 + 21 31 33 1 + 21 31 34 1 + 21 31 35 1 + 21 31 36 1 + 21 31 37 1 + 21 31 38 0.929166 + 21 31 39 0.350849 + 21 32 24 0.350849 + 21 32 25 0.929166 + 21 32 26 1 + 21 32 27 1 + 21 32 28 1 + 21 32 29 1 + 21 32 30 1 + 21 32 31 1 + 21 32 32 1 + 21 32 33 1 + 21 32 34 1 + 21 32 35 1 + 21 32 36 1 + 21 32 37 1 + 21 32 38 0.929166 + 21 32 39 0.350849 + 21 33 24 0.264178 + 21 33 25 0.876433 + 21 33 26 1 + 21 33 27 1 + 21 33 28 1 + 21 33 29 1 + 21 33 30 1 + 21 33 31 1 + 21 33 32 1 + 21 33 33 1 + 21 33 34 1 + 21 33 35 1 + 21 33 36 1 + 21 33 37 1 + 21 33 38 0.876433 + 21 33 39 0.264178 + 21 34 24 0.12727 + 21 34 25 0.72694 + 21 34 26 0.998895 + 21 34 27 1 + 21 34 28 1 + 21 34 29 1 + 21 34 30 1 + 21 34 31 1 + 21 34 32 1 + 21 34 33 1 + 21 34 34 1 + 21 34 35 1 + 21 34 36 1 + 21 34 37 0.998895 + 21 34 38 0.72694 + 21 34 39 0.12727 + 21 35 24 0.0180042 + 21 35 25 0.446726 + 21 35 26 0.932236 + 21 35 27 1 + 21 35 28 1 + 21 35 29 1 + 21 35 30 1 + 21 35 31 1 + 21 35 32 1 + 21 35 33 1 + 21 35 34 1 + 21 35 35 1 + 21 35 36 1 + 21 35 37 0.932236 + 21 35 38 0.446726 + 21 35 39 0.0180042 + 21 36 25 0.124558 + 21 36 26 0.635968 + 21 36 27 0.969751 + 21 36 28 1 + 21 36 29 1 + 21 36 30 1 + 21 36 31 1 + 21 36 32 1 + 21 36 33 1 + 21 36 34 1 + 21 36 35 1 + 21 36 36 0.969751 + 21 36 37 0.635968 + 21 36 38 0.124558 + 21 37 25 0.00154821 + 21 37 26 0.188742 + 21 37 27 0.635968 + 21 37 28 0.932236 + 21 37 29 0.998895 + 21 37 30 1 + 21 37 31 1 + 21 37 32 1 + 21 37 33 1 + 21 37 34 0.998895 + 21 37 35 0.932236 + 21 37 36 0.635968 + 21 37 37 0.188742 + 21 37 38 0.00154821 + 21 38 26 0.00154821 + 21 38 27 0.124558 + 21 38 28 0.446726 + 21 38 29 0.72694 + 21 38 30 0.876433 + 21 38 31 0.929166 + 21 38 32 0.929166 + 21 38 33 0.876433 + 21 38 34 0.72694 + 21 38 35 0.446726 + 21 38 36 0.124558 + 21 38 37 0.00154821 + 21 39 28 0.0180042 + 21 39 29 0.12727 + 21 39 30 0.264178 + 21 39 31 0.350849 + 21 39 32 0.350849 + 21 39 33 0.264178 + 21 39 34 0.12727 + 21 39 35 0.0180042 + 22 22 30 0.0001391 + 22 22 31 0.00361638 + 22 22 32 0.00361638 + 22 22 33 0.0001391 + 22 23 27 0.00160611 + 22 23 28 0.0778651 + 22 23 29 0.259926 + 22 23 30 0.440876 + 22 23 31 0.544992 + 22 23 32 0.544992 + 22 23 33 0.440876 + 22 23 34 0.259926 + 22 23 35 0.0778651 + 22 23 36 0.00160611 + 22 24 26 0.0423361 + 22 24 27 0.347021 + 22 24 28 0.734594 + 22 24 29 0.928659 + 22 24 30 0.988961 + 22 24 31 0.999479 + 22 24 32 0.999479 + 22 24 33 0.988961 + 22 24 34 0.928659 + 22 24 35 0.734594 + 22 24 36 0.347021 + 22 24 37 0.0423361 + 22 25 25 0.07507 + 22 25 26 0.544006 + 22 25 27 0.93137 + 22 25 28 0.999882 + 22 25 29 1 + 22 25 30 1 + 22 25 31 1 + 22 25 32 1 + 22 25 33 1 + 22 25 34 1 + 22 25 35 0.999882 + 22 25 36 0.93137 + 22 25 37 0.544006 + 22 25 38 0.07507 + 22 26 24 0.0423361 + 22 26 25 0.544006 + 22 26 26 0.966273 + 22 26 27 1 + 22 26 28 1 + 22 26 29 1 + 22 26 30 1 + 22 26 31 1 + 22 26 32 1 + 22 26 33 1 + 22 26 34 1 + 22 26 35 1 + 22 26 36 1 + 22 26 37 0.966273 + 22 26 38 0.544006 + 22 26 39 0.0423361 + 22 27 23 0.00160611 + 22 27 24 0.347021 + 22 27 25 0.93137 + 22 27 26 1 + 22 27 27 1 + 22 27 28 1 + 22 27 29 1 + 22 27 30 1 + 22 27 31 1 + 22 27 32 1 + 22 27 33 1 + 22 27 34 1 + 22 27 35 1 + 22 27 36 1 + 22 27 37 1 + 22 27 38 0.93137 + 22 27 39 0.347021 + 22 27 40 0.00160611 + 22 28 23 0.0778651 + 22 28 24 0.734594 + 22 28 25 0.999882 + 22 28 26 1 + 22 28 27 1 + 22 28 28 1 + 22 28 29 1 + 22 28 30 1 + 22 28 31 1 + 22 28 32 1 + 22 28 33 1 + 22 28 34 1 + 22 28 35 1 + 22 28 36 1 + 22 28 37 1 + 22 28 38 0.999882 + 22 28 39 0.734594 + 22 28 40 0.0778651 + 22 29 23 0.259926 + 22 29 24 0.928659 + 22 29 25 1 + 22 29 26 1 + 22 29 27 1 + 22 29 28 1 + 22 29 29 1 + 22 29 30 1 + 22 29 31 1 + 22 29 32 1 + 22 29 33 1 + 22 29 34 1 + 22 29 35 1 + 22 29 36 1 + 22 29 37 1 + 22 29 38 1 + 22 29 39 0.928659 + 22 29 40 0.259926 + 22 30 22 0.0001391 + 22 30 23 0.440876 + 22 30 24 0.988961 + 22 30 25 1 + 22 30 26 1 + 22 30 27 1 + 22 30 28 1 + 22 30 29 1 + 22 30 30 1 + 22 30 31 1 + 22 30 32 1 + 22 30 33 1 + 22 30 34 1 + 22 30 35 1 + 22 30 36 1 + 22 30 37 1 + 22 30 38 1 + 22 30 39 0.988961 + 22 30 40 0.440876 + 22 30 41 0.0001391 + 22 31 22 0.00361638 + 22 31 23 0.544992 + 22 31 24 0.999479 + 22 31 25 1 + 22 31 26 1 + 22 31 27 1 + 22 31 28 1 + 22 31 29 1 + 22 31 30 1 + 22 31 31 1 + 22 31 32 1 + 22 31 33 1 + 22 31 34 1 + 22 31 35 1 + 22 31 36 1 + 22 31 37 1 + 22 31 38 1 + 22 31 39 0.999479 + 22 31 40 0.544992 + 22 31 41 0.00361638 + 22 32 22 0.00361638 + 22 32 23 0.544992 + 22 32 24 0.999479 + 22 32 25 1 + 22 32 26 1 + 22 32 27 1 + 22 32 28 1 + 22 32 29 1 + 22 32 30 1 + 22 32 31 1 + 22 32 32 1 + 22 32 33 1 + 22 32 34 1 + 22 32 35 1 + 22 32 36 1 + 22 32 37 1 + 22 32 38 1 + 22 32 39 0.999479 + 22 32 40 0.544992 + 22 32 41 0.00361638 + 22 33 22 0.0001391 + 22 33 23 0.440876 + 22 33 24 0.988961 + 22 33 25 1 + 22 33 26 1 + 22 33 27 1 + 22 33 28 1 + 22 33 29 1 + 22 33 30 1 + 22 33 31 1 + 22 33 32 1 + 22 33 33 1 + 22 33 34 1 + 22 33 35 1 + 22 33 36 1 + 22 33 37 1 + 22 33 38 1 + 22 33 39 0.988961 + 22 33 40 0.440876 + 22 33 41 0.0001391 + 22 34 23 0.259926 + 22 34 24 0.928659 + 22 34 25 1 + 22 34 26 1 + 22 34 27 1 + 22 34 28 1 + 22 34 29 1 + 22 34 30 1 + 22 34 31 1 + 22 34 32 1 + 22 34 33 1 + 22 34 34 1 + 22 34 35 1 + 22 34 36 1 + 22 34 37 1 + 22 34 38 1 + 22 34 39 0.928659 + 22 34 40 0.259926 + 22 35 23 0.0778651 + 22 35 24 0.734594 + 22 35 25 0.999882 + 22 35 26 1 + 22 35 27 1 + 22 35 28 1 + 22 35 29 1 + 22 35 30 1 + 22 35 31 1 + 22 35 32 1 + 22 35 33 1 + 22 35 34 1 + 22 35 35 1 + 22 35 36 1 + 22 35 37 1 + 22 35 38 0.999882 + 22 35 39 0.734594 + 22 35 40 0.0778651 + 22 36 23 0.00160611 + 22 36 24 0.347021 + 22 36 25 0.93137 + 22 36 26 1 + 22 36 27 1 + 22 36 28 1 + 22 36 29 1 + 22 36 30 1 + 22 36 31 1 + 22 36 32 1 + 22 36 33 1 + 22 36 34 1 + 22 36 35 1 + 22 36 36 1 + 22 36 37 1 + 22 36 38 0.93137 + 22 36 39 0.347021 + 22 36 40 0.00160611 + 22 37 24 0.0423361 + 22 37 25 0.544006 + 22 37 26 0.966273 + 22 37 27 1 + 22 37 28 1 + 22 37 29 1 + 22 37 30 1 + 22 37 31 1 + 22 37 32 1 + 22 37 33 1 + 22 37 34 1 + 22 37 35 1 + 22 37 36 1 + 22 37 37 0.966273 + 22 37 38 0.544006 + 22 37 39 0.0423361 + 22 38 25 0.07507 + 22 38 26 0.544006 + 22 38 27 0.93137 + 22 38 28 0.999882 + 22 38 29 1 + 22 38 30 1 + 22 38 31 1 + 22 38 32 1 + 22 38 33 1 + 22 38 34 1 + 22 38 35 0.999882 + 22 38 36 0.93137 + 22 38 37 0.544006 + 22 38 38 0.07507 + 22 39 26 0.0423361 + 22 39 27 0.347021 + 22 39 28 0.734594 + 22 39 29 0.928659 + 22 39 30 0.988961 + 22 39 31 0.999479 + 22 39 32 0.999479 + 22 39 33 0.988961 + 22 39 34 0.928659 + 22 39 35 0.734594 + 22 39 36 0.347021 + 22 39 37 0.0423361 + 22 40 27 0.00160611 + 22 40 28 0.0778651 + 22 40 29 0.259926 + 22 40 30 0.440876 + 22 40 31 0.544992 + 22 40 32 0.544992 + 22 40 33 0.440876 + 22 40 34 0.259926 + 22 40 35 0.0778651 + 22 40 36 0.00160611 + 22 41 30 0.0001391 + 22 41 31 0.00361638 + 22 41 32 0.00361638 + 22 41 33 0.0001391 + 23 22 27 0.00160611 + 23 22 28 0.0778651 + 23 22 29 0.259926 + 23 22 30 0.440876 + 23 22 31 0.544992 + 23 22 32 0.544992 + 23 22 33 0.440876 + 23 22 34 0.259926 + 23 22 35 0.0778651 + 23 22 36 0.00160611 + 23 23 26 0.0757442 + 23 23 27 0.442652 + 23 23 28 0.815054 + 23 23 29 0.964837 + 23 23 30 0.998589 + 23 23 31 1 + 23 23 32 1 + 23 23 33 0.998589 + 23 23 34 0.964837 + 23 23 35 0.815054 + 23 23 36 0.442652 + 23 23 37 0.0757442 + 23 24 24 0.000326836 + 23 24 25 0.181053 + 23 24 26 0.737155 + 23 24 27 0.985714 + 23 24 28 1 + 23 24 29 1 + 23 24 30 1 + 23 24 31 1 + 23 24 32 1 + 23 24 33 1 + 23 24 34 1 + 23 24 35 1 + 23 24 36 0.985714 + 23 24 37 0.737155 + 23 24 38 0.181053 + 23 24 39 0.000326836 + 23 25 24 0.181053 + 23 25 25 0.817847 + 23 25 26 0.999435 + 23 25 27 1 + 23 25 28 1 + 23 25 29 1 + 23 25 30 1 + 23 25 31 1 + 23 25 32 1 + 23 25 33 1 + 23 25 34 1 + 23 25 35 1 + 23 25 36 1 + 23 25 37 0.999435 + 23 25 38 0.817847 + 23 25 39 0.181053 + 23 26 23 0.0757442 + 23 26 24 0.737155 + 23 26 25 0.999435 + 23 26 26 1 + 23 26 27 1 + 23 26 28 1 + 23 26 29 1 + 23 26 30 1 + 23 26 31 1 + 23 26 32 1 + 23 26 33 1 + 23 26 34 1 + 23 26 35 1 + 23 26 36 1 + 23 26 37 1 + 23 26 38 0.999435 + 23 26 39 0.737155 + 23 26 40 0.0757442 + 23 27 22 0.00160611 + 23 27 23 0.442652 + 23 27 24 0.985714 + 23 27 25 1 + 23 27 26 1 + 23 27 27 1 + 23 27 28 1 + 23 27 29 1 + 23 27 30 1 + 23 27 31 1 + 23 27 32 1 + 23 27 33 1 + 23 27 34 1 + 23 27 35 1 + 23 27 36 1 + 23 27 37 1 + 23 27 38 1 + 23 27 39 0.985714 + 23 27 40 0.442652 + 23 27 41 0.00160611 + 23 28 22 0.0778651 + 23 28 23 0.815054 + 23 28 24 1 + 23 28 25 1 + 23 28 26 1 + 23 28 27 1 + 23 28 28 1 + 23 28 29 1 + 23 28 30 1 + 23 28 31 1 + 23 28 32 1 + 23 28 33 1 + 23 28 34 1 + 23 28 35 1 + 23 28 36 1 + 23 28 37 1 + 23 28 38 1 + 23 28 39 1 + 23 28 40 0.815054 + 23 28 41 0.0778651 + 23 29 22 0.259926 + 23 29 23 0.964837 + 23 29 24 1 + 23 29 25 1 + 23 29 26 1 + 23 29 27 1 + 23 29 28 1 + 23 29 29 1 + 23 29 30 1 + 23 29 31 1 + 23 29 32 1 + 23 29 33 1 + 23 29 34 1 + 23 29 35 1 + 23 29 36 1 + 23 29 37 1 + 23 29 38 1 + 23 29 39 1 + 23 29 40 0.964837 + 23 29 41 0.259926 + 23 30 22 0.440876 + 23 30 23 0.998589 + 23 30 24 1 + 23 30 25 1 + 23 30 26 1 + 23 30 27 1 + 23 30 28 1 + 23 30 29 1 + 23 30 30 1 + 23 30 31 1 + 23 30 32 1 + 23 30 33 1 + 23 30 34 1 + 23 30 35 1 + 23 30 36 1 + 23 30 37 1 + 23 30 38 1 + 23 30 39 1 + 23 30 40 0.998589 + 23 30 41 0.440876 + 23 31 22 0.544992 + 23 31 23 1 + 23 31 24 1 + 23 31 25 1 + 23 31 26 1 + 23 31 27 1 + 23 31 28 1 + 23 31 29 1 + 23 31 30 1 + 23 31 31 1 + 23 31 32 1 + 23 31 33 1 + 23 31 34 1 + 23 31 35 1 + 23 31 36 1 + 23 31 37 1 + 23 31 38 1 + 23 31 39 1 + 23 31 40 1 + 23 31 41 0.544992 + 23 32 22 0.544992 + 23 32 23 1 + 23 32 24 1 + 23 32 25 1 + 23 32 26 1 + 23 32 27 1 + 23 32 28 1 + 23 32 29 1 + 23 32 30 1 + 23 32 31 1 + 23 32 32 1 + 23 32 33 1 + 23 32 34 1 + 23 32 35 1 + 23 32 36 1 + 23 32 37 1 + 23 32 38 1 + 23 32 39 1 + 23 32 40 1 + 23 32 41 0.544992 + 23 33 22 0.440876 + 23 33 23 0.998589 + 23 33 24 1 + 23 33 25 1 + 23 33 26 1 + 23 33 27 1 + 23 33 28 1 + 23 33 29 1 + 23 33 30 1 + 23 33 31 1 + 23 33 32 1 + 23 33 33 1 + 23 33 34 1 + 23 33 35 1 + 23 33 36 1 + 23 33 37 1 + 23 33 38 1 + 23 33 39 1 + 23 33 40 0.998589 + 23 33 41 0.440876 + 23 34 22 0.259926 + 23 34 23 0.964837 + 23 34 24 1 + 23 34 25 1 + 23 34 26 1 + 23 34 27 1 + 23 34 28 1 + 23 34 29 1 + 23 34 30 1 + 23 34 31 1 + 23 34 32 1 + 23 34 33 1 + 23 34 34 1 + 23 34 35 1 + 23 34 36 1 + 23 34 37 1 + 23 34 38 1 + 23 34 39 1 + 23 34 40 0.964837 + 23 34 41 0.259926 + 23 35 22 0.0778651 + 23 35 23 0.815054 + 23 35 24 1 + 23 35 25 1 + 23 35 26 1 + 23 35 27 1 + 23 35 28 1 + 23 35 29 1 + 23 35 30 1 + 23 35 31 1 + 23 35 32 1 + 23 35 33 1 + 23 35 34 1 + 23 35 35 1 + 23 35 36 1 + 23 35 37 1 + 23 35 38 1 + 23 35 39 1 + 23 35 40 0.815054 + 23 35 41 0.0778651 + 23 36 22 0.00160611 + 23 36 23 0.442652 + 23 36 24 0.985714 + 23 36 25 1 + 23 36 26 1 + 23 36 27 1 + 23 36 28 1 + 23 36 29 1 + 23 36 30 1 + 23 36 31 1 + 23 36 32 1 + 23 36 33 1 + 23 36 34 1 + 23 36 35 1 + 23 36 36 1 + 23 36 37 1 + 23 36 38 1 + 23 36 39 0.985714 + 23 36 40 0.442652 + 23 36 41 0.00160611 + 23 37 23 0.0757442 + 23 37 24 0.737155 + 23 37 25 0.999435 + 23 37 26 1 + 23 37 27 1 + 23 37 28 1 + 23 37 29 1 + 23 37 30 1 + 23 37 31 1 + 23 37 32 1 + 23 37 33 1 + 23 37 34 1 + 23 37 35 1 + 23 37 36 1 + 23 37 37 1 + 23 37 38 0.999435 + 23 37 39 0.737155 + 23 37 40 0.0757442 + 23 38 24 0.181053 + 23 38 25 0.817847 + 23 38 26 0.999435 + 23 38 27 1 + 23 38 28 1 + 23 38 29 1 + 23 38 30 1 + 23 38 31 1 + 23 38 32 1 + 23 38 33 1 + 23 38 34 1 + 23 38 35 1 + 23 38 36 1 + 23 38 37 0.999435 + 23 38 38 0.817847 + 23 38 39 0.181053 + 23 39 24 0.000326836 + 23 39 25 0.181053 + 23 39 26 0.737155 + 23 39 27 0.985714 + 23 39 28 1 + 23 39 29 1 + 23 39 30 1 + 23 39 31 1 + 23 39 32 1 + 23 39 33 1 + 23 39 34 1 + 23 39 35 1 + 23 39 36 0.985714 + 23 39 37 0.737155 + 23 39 38 0.181053 + 23 39 39 0.000326836 + 23 40 26 0.0757442 + 23 40 27 0.442652 + 23 40 28 0.815054 + 23 40 29 0.964837 + 23 40 30 0.998589 + 23 40 31 1 + 23 40 32 1 + 23 40 33 0.998589 + 23 40 34 0.964837 + 23 40 35 0.815054 + 23 40 36 0.442652 + 23 40 37 0.0757442 + 23 41 27 0.00160611 + 23 41 28 0.0778651 + 23 41 29 0.259926 + 23 41 30 0.440876 + 23 41 31 0.544992 + 23 41 32 0.544992 + 23 41 33 0.440876 + 23 41 34 0.259926 + 23 41 35 0.0778651 + 23 41 36 0.00160611 + 24 21 28 0.0180042 + 24 21 29 0.12727 + 24 21 30 0.264178 + 24 21 31 0.350849 + 24 21 32 0.350849 + 24 21 33 0.264178 + 24 21 34 0.12727 + 24 21 35 0.0180042 + 24 22 26 0.0423361 + 24 22 27 0.347021 + 24 22 28 0.734594 + 24 22 29 0.928659 + 24 22 30 0.988961 + 24 22 31 0.999479 + 24 22 32 0.999479 + 24 22 33 0.988961 + 24 22 34 0.928659 + 24 22 35 0.734594 + 24 22 36 0.347021 + 24 22 37 0.0423361 + 24 23 24 0.000326836 + 24 23 25 0.181053 + 24 23 26 0.737155 + 24 23 27 0.985714 + 24 23 28 1 + 24 23 29 1 + 24 23 30 1 + 24 23 31 1 + 24 23 32 1 + 24 23 33 1 + 24 23 34 1 + 24 23 35 1 + 24 23 36 0.985714 + 24 23 37 0.737155 + 24 23 38 0.181053 + 24 23 39 0.000326836 + 24 24 23 0.000326836 + 24 24 24 0.256165 + 24 24 25 0.884086 + 24 24 26 1 + 24 24 27 1 + 24 24 28 1 + 24 24 29 1 + 24 24 30 1 + 24 24 31 1 + 24 24 32 1 + 24 24 33 1 + 24 24 34 1 + 24 24 35 1 + 24 24 36 1 + 24 24 37 1 + 24 24 38 0.884086 + 24 24 39 0.256165 + 24 24 40 0.000326836 + 24 25 23 0.181053 + 24 25 24 0.884086 + 24 25 25 1 + 24 25 26 1 + 24 25 27 1 + 24 25 28 1 + 24 25 29 1 + 24 25 30 1 + 24 25 31 1 + 24 25 32 1 + 24 25 33 1 + 24 25 34 1 + 24 25 35 1 + 24 25 36 1 + 24 25 37 1 + 24 25 38 1 + 24 25 39 0.884086 + 24 25 40 0.181053 + 24 26 22 0.0423361 + 24 26 23 0.737155 + 24 26 24 1 + 24 26 25 1 + 24 26 26 1 + 24 26 27 1 + 24 26 28 1 + 24 26 29 1 + 24 26 30 1 + 24 26 31 1 + 24 26 32 1 + 24 26 33 1 + 24 26 34 1 + 24 26 35 1 + 24 26 36 1 + 24 26 37 1 + 24 26 38 1 + 24 26 39 1 + 24 26 40 0.737155 + 24 26 41 0.0423361 + 24 27 22 0.347021 + 24 27 23 0.985714 + 24 27 24 1 + 24 27 25 1 + 24 27 26 1 + 24 27 27 1 + 24 27 28 1 + 24 27 29 1 + 24 27 30 1 + 24 27 31 1 + 24 27 32 1 + 24 27 33 1 + 24 27 34 1 + 24 27 35 1 + 24 27 36 1 + 24 27 37 1 + 24 27 38 1 + 24 27 39 1 + 24 27 40 0.985714 + 24 27 41 0.347021 + 24 28 21 0.0180042 + 24 28 22 0.734594 + 24 28 23 1 + 24 28 24 1 + 24 28 25 1 + 24 28 26 1 + 24 28 27 1 + 24 28 28 1 + 24 28 29 1 + 24 28 30 1 + 24 28 31 1 + 24 28 32 1 + 24 28 33 1 + 24 28 34 1 + 24 28 35 1 + 24 28 36 1 + 24 28 37 1 + 24 28 38 1 + 24 28 39 1 + 24 28 40 1 + 24 28 41 0.734594 + 24 28 42 0.0180042 + 24 29 21 0.12727 + 24 29 22 0.928659 + 24 29 23 1 + 24 29 24 1 + 24 29 25 1 + 24 29 26 1 + 24 29 27 1 + 24 29 28 1 + 24 29 29 1 + 24 29 30 1 + 24 29 31 1 + 24 29 32 1 + 24 29 33 1 + 24 29 34 1 + 24 29 35 1 + 24 29 36 1 + 24 29 37 1 + 24 29 38 1 + 24 29 39 1 + 24 29 40 1 + 24 29 41 0.928659 + 24 29 42 0.12727 + 24 30 21 0.264178 + 24 30 22 0.988961 + 24 30 23 1 + 24 30 24 1 + 24 30 25 1 + 24 30 26 1 + 24 30 27 1 + 24 30 28 1 + 24 30 29 1 + 24 30 30 1 + 24 30 31 1 + 24 30 32 1 + 24 30 33 1 + 24 30 34 1 + 24 30 35 1 + 24 30 36 1 + 24 30 37 1 + 24 30 38 1 + 24 30 39 1 + 24 30 40 1 + 24 30 41 0.988961 + 24 30 42 0.264178 + 24 31 21 0.350849 + 24 31 22 0.999479 + 24 31 23 1 + 24 31 24 1 + 24 31 25 1 + 24 31 26 1 + 24 31 27 1 + 24 31 28 1 + 24 31 29 1 + 24 31 30 1 + 24 31 31 1 + 24 31 32 1 + 24 31 33 1 + 24 31 34 1 + 24 31 35 1 + 24 31 36 1 + 24 31 37 1 + 24 31 38 1 + 24 31 39 1 + 24 31 40 1 + 24 31 41 0.999479 + 24 31 42 0.350849 + 24 32 21 0.350849 + 24 32 22 0.999479 + 24 32 23 1 + 24 32 24 1 + 24 32 25 1 + 24 32 26 1 + 24 32 27 1 + 24 32 28 1 + 24 32 29 1 + 24 32 30 1 + 24 32 31 1 + 24 32 32 1 + 24 32 33 1 + 24 32 34 1 + 24 32 35 1 + 24 32 36 1 + 24 32 37 1 + 24 32 38 1 + 24 32 39 1 + 24 32 40 1 + 24 32 41 0.999479 + 24 32 42 0.350849 + 24 33 21 0.264178 + 24 33 22 0.988961 + 24 33 23 1 + 24 33 24 1 + 24 33 25 1 + 24 33 26 1 + 24 33 27 1 + 24 33 28 1 + 24 33 29 1 + 24 33 30 1 + 24 33 31 1 + 24 33 32 1 + 24 33 33 1 + 24 33 34 1 + 24 33 35 1 + 24 33 36 1 + 24 33 37 1 + 24 33 38 1 + 24 33 39 1 + 24 33 40 1 + 24 33 41 0.988961 + 24 33 42 0.264178 + 24 34 21 0.12727 + 24 34 22 0.928659 + 24 34 23 1 + 24 34 24 1 + 24 34 25 1 + 24 34 26 1 + 24 34 27 1 + 24 34 28 1 + 24 34 29 1 + 24 34 30 1 + 24 34 31 1 + 24 34 32 1 + 24 34 33 1 + 24 34 34 1 + 24 34 35 1 + 24 34 36 1 + 24 34 37 1 + 24 34 38 1 + 24 34 39 1 + 24 34 40 1 + 24 34 41 0.928659 + 24 34 42 0.12727 + 24 35 21 0.0180042 + 24 35 22 0.734594 + 24 35 23 1 + 24 35 24 1 + 24 35 25 1 + 24 35 26 1 + 24 35 27 1 + 24 35 28 1 + 24 35 29 1 + 24 35 30 1 + 24 35 31 1 + 24 35 32 1 + 24 35 33 1 + 24 35 34 1 + 24 35 35 1 + 24 35 36 1 + 24 35 37 1 + 24 35 38 1 + 24 35 39 1 + 24 35 40 1 + 24 35 41 0.734594 + 24 35 42 0.0180042 + 24 36 22 0.347021 + 24 36 23 0.985714 + 24 36 24 1 + 24 36 25 1 + 24 36 26 1 + 24 36 27 1 + 24 36 28 1 + 24 36 29 1 + 24 36 30 1 + 24 36 31 1 + 24 36 32 1 + 24 36 33 1 + 24 36 34 1 + 24 36 35 1 + 24 36 36 1 + 24 36 37 1 + 24 36 38 1 + 24 36 39 1 + 24 36 40 0.985714 + 24 36 41 0.347021 + 24 37 22 0.0423361 + 24 37 23 0.737155 + 24 37 24 1 + 24 37 25 1 + 24 37 26 1 + 24 37 27 1 + 24 37 28 1 + 24 37 29 1 + 24 37 30 1 + 24 37 31 1 + 24 37 32 1 + 24 37 33 1 + 24 37 34 1 + 24 37 35 1 + 24 37 36 1 + 24 37 37 1 + 24 37 38 1 + 24 37 39 1 + 24 37 40 0.737155 + 24 37 41 0.0423361 + 24 38 23 0.181053 + 24 38 24 0.884086 + 24 38 25 1 + 24 38 26 1 + 24 38 27 1 + 24 38 28 1 + 24 38 29 1 + 24 38 30 1 + 24 38 31 1 + 24 38 32 1 + 24 38 33 1 + 24 38 34 1 + 24 38 35 1 + 24 38 36 1 + 24 38 37 1 + 24 38 38 1 + 24 38 39 0.884086 + 24 38 40 0.181053 + 24 39 23 0.000326836 + 24 39 24 0.256165 + 24 39 25 0.884086 + 24 39 26 1 + 24 39 27 1 + 24 39 28 1 + 24 39 29 1 + 24 39 30 1 + 24 39 31 1 + 24 39 32 1 + 24 39 33 1 + 24 39 34 1 + 24 39 35 1 + 24 39 36 1 + 24 39 37 1 + 24 39 38 0.884086 + 24 39 39 0.256165 + 24 39 40 0.000326836 + 24 40 24 0.000326836 + 24 40 25 0.181053 + 24 40 26 0.737155 + 24 40 27 0.985714 + 24 40 28 1 + 24 40 29 1 + 24 40 30 1 + 24 40 31 1 + 24 40 32 1 + 24 40 33 1 + 24 40 34 1 + 24 40 35 1 + 24 40 36 0.985714 + 24 40 37 0.737155 + 24 40 38 0.181053 + 24 40 39 0.000326836 + 24 41 26 0.0423361 + 24 41 27 0.347021 + 24 41 28 0.734594 + 24 41 29 0.928659 + 24 41 30 0.988961 + 24 41 31 0.999479 + 24 41 32 0.999479 + 24 41 33 0.988961 + 24 41 34 0.928659 + 24 41 35 0.734594 + 24 41 36 0.347021 + 24 41 37 0.0423361 + 24 42 28 0.0180042 + 24 42 29 0.12727 + 24 42 30 0.264178 + 24 42 31 0.350849 + 24 42 32 0.350849 + 24 42 33 0.264178 + 24 42 34 0.12727 + 24 42 35 0.0180042 + 25 20 29 0.00330518 + 25 20 30 0.0387924 + 25 20 31 0.0773797 + 25 20 32 0.0773797 + 25 20 33 0.0387924 + 25 20 34 0.00330518 + 25 21 26 0.00154821 + 25 21 27 0.124558 + 25 21 28 0.446726 + 25 21 29 0.72694 + 25 21 30 0.876433 + 25 21 31 0.929166 + 25 21 32 0.929166 + 25 21 33 0.876433 + 25 21 34 0.72694 + 25 21 35 0.446726 + 25 21 36 0.124558 + 25 21 37 0.00154821 + 25 22 25 0.07507 + 25 22 26 0.544006 + 25 22 27 0.93137 + 25 22 28 0.999882 + 25 22 29 1 + 25 22 30 1 + 25 22 31 1 + 25 22 32 1 + 25 22 33 1 + 25 22 34 1 + 25 22 35 0.999882 + 25 22 36 0.93137 + 25 22 37 0.544006 + 25 22 38 0.07507 + 25 23 24 0.181053 + 25 23 25 0.817847 + 25 23 26 0.999435 + 25 23 27 1 + 25 23 28 1 + 25 23 29 1 + 25 23 30 1 + 25 23 31 1 + 25 23 32 1 + 25 23 33 1 + 25 23 34 1 + 25 23 35 1 + 25 23 36 1 + 25 23 37 0.999435 + 25 23 38 0.817847 + 25 23 39 0.181053 + 25 24 23 0.181053 + 25 24 24 0.884086 + 25 24 25 1 + 25 24 26 1 + 25 24 27 1 + 25 24 28 1 + 25 24 29 1 + 25 24 30 1 + 25 24 31 1 + 25 24 32 1 + 25 24 33 1 + 25 24 34 1 + 25 24 35 1 + 25 24 36 1 + 25 24 37 1 + 25 24 38 1 + 25 24 39 0.884086 + 25 24 40 0.181053 + 25 25 22 0.07507 + 25 25 23 0.817847 + 25 25 24 1 + 25 25 25 1 + 25 25 26 1 + 25 25 27 1 + 25 25 28 1 + 25 25 29 1 + 25 25 30 1 + 25 25 31 1 + 25 25 32 1 + 25 25 33 1 + 25 25 34 1 + 25 25 35 1 + 25 25 36 1 + 25 25 37 1 + 25 25 38 1 + 25 25 39 1 + 25 25 40 0.817847 + 25 25 41 0.07507 + 25 26 21 0.00154821 + 25 26 22 0.544006 + 25 26 23 0.999435 + 25 26 24 1 + 25 26 25 1 + 25 26 26 1 + 25 26 27 1 + 25 26 28 1 + 25 26 29 1 + 25 26 30 1 + 25 26 31 1 + 25 26 32 1 + 25 26 33 1 + 25 26 34 1 + 25 26 35 1 + 25 26 36 1 + 25 26 37 1 + 25 26 38 1 + 25 26 39 1 + 25 26 40 0.999435 + 25 26 41 0.544006 + 25 26 42 0.00154821 + 25 27 21 0.124558 + 25 27 22 0.93137 + 25 27 23 1 + 25 27 24 1 + 25 27 25 1 + 25 27 26 1 + 25 27 27 1 + 25 27 28 1 + 25 27 29 1 + 25 27 30 1 + 25 27 31 1 + 25 27 32 1 + 25 27 33 1 + 25 27 34 1 + 25 27 35 1 + 25 27 36 1 + 25 27 37 1 + 25 27 38 1 + 25 27 39 1 + 25 27 40 1 + 25 27 41 0.93137 + 25 27 42 0.124558 + 25 28 21 0.446726 + 25 28 22 0.999882 + 25 28 23 1 + 25 28 24 1 + 25 28 25 1 + 25 28 26 1 + 25 28 27 1 + 25 28 28 1 + 25 28 29 1 + 25 28 30 1 + 25 28 31 1 + 25 28 32 1 + 25 28 33 1 + 25 28 34 1 + 25 28 35 1 + 25 28 36 1 + 25 28 37 1 + 25 28 38 1 + 25 28 39 1 + 25 28 40 1 + 25 28 41 0.999882 + 25 28 42 0.446726 + 25 29 20 0.00330518 + 25 29 21 0.72694 + 25 29 22 1 + 25 29 23 1 + 25 29 24 1 + 25 29 25 1 + 25 29 26 1 + 25 29 27 1 + 25 29 28 1 + 25 29 29 1 + 25 29 30 1 + 25 29 31 1 + 25 29 32 1 + 25 29 33 1 + 25 29 34 1 + 25 29 35 1 + 25 29 36 1 + 25 29 37 1 + 25 29 38 1 + 25 29 39 1 + 25 29 40 1 + 25 29 41 1 + 25 29 42 0.72694 + 25 29 43 0.00330518 + 25 30 20 0.0387924 + 25 30 21 0.876433 + 25 30 22 1 + 25 30 23 1 + 25 30 24 1 + 25 30 25 1 + 25 30 26 1 + 25 30 27 1 + 25 30 28 1 + 25 30 29 1 + 25 30 30 1 + 25 30 31 1 + 25 30 32 1 + 25 30 33 1 + 25 30 34 1 + 25 30 35 1 + 25 30 36 1 + 25 30 37 1 + 25 30 38 1 + 25 30 39 1 + 25 30 40 1 + 25 30 41 1 + 25 30 42 0.876433 + 25 30 43 0.0387924 + 25 31 20 0.0773797 + 25 31 21 0.929166 + 25 31 22 1 + 25 31 23 1 + 25 31 24 1 + 25 31 25 1 + 25 31 26 1 + 25 31 27 1 + 25 31 28 1 + 25 31 29 1 + 25 31 30 1 + 25 31 31 1 + 25 31 32 1 + 25 31 33 1 + 25 31 34 1 + 25 31 35 1 + 25 31 36 1 + 25 31 37 1 + 25 31 38 1 + 25 31 39 1 + 25 31 40 1 + 25 31 41 1 + 25 31 42 0.929166 + 25 31 43 0.0773797 + 25 32 20 0.0773797 + 25 32 21 0.929166 + 25 32 22 1 + 25 32 23 1 + 25 32 24 1 + 25 32 25 1 + 25 32 26 1 + 25 32 27 1 + 25 32 28 1 + 25 32 29 1 + 25 32 30 1 + 25 32 31 1 + 25 32 32 1 + 25 32 33 1 + 25 32 34 1 + 25 32 35 1 + 25 32 36 1 + 25 32 37 1 + 25 32 38 1 + 25 32 39 1 + 25 32 40 1 + 25 32 41 1 + 25 32 42 0.929166 + 25 32 43 0.0773797 + 25 33 20 0.0387924 + 25 33 21 0.876433 + 25 33 22 1 + 25 33 23 1 + 25 33 24 1 + 25 33 25 1 + 25 33 26 1 + 25 33 27 1 + 25 33 28 1 + 25 33 29 1 + 25 33 30 1 + 25 33 31 1 + 25 33 32 1 + 25 33 33 1 + 25 33 34 1 + 25 33 35 1 + 25 33 36 1 + 25 33 37 1 + 25 33 38 1 + 25 33 39 1 + 25 33 40 1 + 25 33 41 1 + 25 33 42 0.876433 + 25 33 43 0.0387924 + 25 34 20 0.00330518 + 25 34 21 0.72694 + 25 34 22 1 + 25 34 23 1 + 25 34 24 1 + 25 34 25 1 + 25 34 26 1 + 25 34 27 1 + 25 34 28 1 + 25 34 29 1 + 25 34 30 1 + 25 34 31 1 + 25 34 32 1 + 25 34 33 1 + 25 34 34 1 + 25 34 35 1 + 25 34 36 1 + 25 34 37 1 + 25 34 38 1 + 25 34 39 1 + 25 34 40 1 + 25 34 41 1 + 25 34 42 0.72694 + 25 34 43 0.00330518 + 25 35 21 0.446726 + 25 35 22 0.999882 + 25 35 23 1 + 25 35 24 1 + 25 35 25 1 + 25 35 26 1 + 25 35 27 1 + 25 35 28 1 + 25 35 29 1 + 25 35 30 1 + 25 35 31 1 + 25 35 32 1 + 25 35 33 1 + 25 35 34 1 + 25 35 35 1 + 25 35 36 1 + 25 35 37 1 + 25 35 38 1 + 25 35 39 1 + 25 35 40 1 + 25 35 41 0.999882 + 25 35 42 0.446726 + 25 36 21 0.124558 + 25 36 22 0.93137 + 25 36 23 1 + 25 36 24 1 + 25 36 25 1 + 25 36 26 1 + 25 36 27 1 + 25 36 28 1 + 25 36 29 1 + 25 36 30 1 + 25 36 31 1 + 25 36 32 1 + 25 36 33 1 + 25 36 34 1 + 25 36 35 1 + 25 36 36 1 + 25 36 37 1 + 25 36 38 1 + 25 36 39 1 + 25 36 40 1 + 25 36 41 0.93137 + 25 36 42 0.124558 + 25 37 21 0.00154821 + 25 37 22 0.544006 + 25 37 23 0.999435 + 25 37 24 1 + 25 37 25 1 + 25 37 26 1 + 25 37 27 1 + 25 37 28 1 + 25 37 29 1 + 25 37 30 1 + 25 37 31 1 + 25 37 32 1 + 25 37 33 1 + 25 37 34 1 + 25 37 35 1 + 25 37 36 1 + 25 37 37 1 + 25 37 38 1 + 25 37 39 1 + 25 37 40 0.999435 + 25 37 41 0.544006 + 25 37 42 0.00154821 + 25 38 22 0.07507 + 25 38 23 0.817847 + 25 38 24 1 + 25 38 25 1 + 25 38 26 1 + 25 38 27 1 + 25 38 28 1 + 25 38 29 1 + 25 38 30 1 + 25 38 31 1 + 25 38 32 1 + 25 38 33 1 + 25 38 34 1 + 25 38 35 1 + 25 38 36 1 + 25 38 37 1 + 25 38 38 1 + 25 38 39 1 + 25 38 40 0.817847 + 25 38 41 0.07507 + 25 39 23 0.181053 + 25 39 24 0.884086 + 25 39 25 1 + 25 39 26 1 + 25 39 27 1 + 25 39 28 1 + 25 39 29 1 + 25 39 30 1 + 25 39 31 1 + 25 39 32 1 + 25 39 33 1 + 25 39 34 1 + 25 39 35 1 + 25 39 36 1 + 25 39 37 1 + 25 39 38 1 + 25 39 39 0.884086 + 25 39 40 0.181053 + 25 40 24 0.181053 + 25 40 25 0.817847 + 25 40 26 0.999435 + 25 40 27 1 + 25 40 28 1 + 25 40 29 1 + 25 40 30 1 + 25 40 31 1 + 25 40 32 1 + 25 40 33 1 + 25 40 34 1 + 25 40 35 1 + 25 40 36 1 + 25 40 37 0.999435 + 25 40 38 0.817847 + 25 40 39 0.181053 + 25 41 25 0.07507 + 25 41 26 0.544006 + 25 41 27 0.93137 + 25 41 28 0.999882 + 25 41 29 1 + 25 41 30 1 + 25 41 31 1 + 25 41 32 1 + 25 41 33 1 + 25 41 34 1 + 25 41 35 0.999882 + 25 41 36 0.93137 + 25 41 37 0.544006 + 25 41 38 0.07507 + 25 42 26 0.00154821 + 25 42 27 0.124558 + 25 42 28 0.446726 + 25 42 29 0.72694 + 25 42 30 0.876433 + 25 42 31 0.929166 + 25 42 32 0.929166 + 25 42 33 0.876433 + 25 42 34 0.72694 + 25 42 35 0.446726 + 25 42 36 0.124558 + 25 42 37 0.00154821 + 25 43 29 0.00330518 + 25 43 30 0.0387924 + 25 43 31 0.0773797 + 25 43 32 0.0773797 + 25 43 33 0.0387924 + 25 43 34 0.00330518 + 26 20 27 0.000575367 + 26 20 28 0.0743091 + 26 20 29 0.277158 + 26 20 30 0.452189 + 26 20 31 0.539246 + 26 20 32 0.539246 + 26 20 33 0.452189 + 26 20 34 0.277158 + 26 20 35 0.0743091 + 26 20 36 0.000575367 + 26 21 25 0.00154821 + 26 21 26 0.188742 + 26 21 27 0.635968 + 26 21 28 0.932236 + 26 21 29 0.998895 + 26 21 30 1 + 26 21 31 1 + 26 21 32 1 + 26 21 33 1 + 26 21 34 0.998895 + 26 21 35 0.932236 + 26 21 36 0.635968 + 26 21 37 0.188742 + 26 21 38 0.00154821 + 26 22 24 0.0423361 + 26 22 25 0.544006 + 26 22 26 0.966273 + 26 22 27 1 + 26 22 28 1 + 26 22 29 1 + 26 22 30 1 + 26 22 31 1 + 26 22 32 1 + 26 22 33 1 + 26 22 34 1 + 26 22 35 1 + 26 22 36 1 + 26 22 37 0.966273 + 26 22 38 0.544006 + 26 22 39 0.0423361 + 26 23 23 0.0757442 + 26 23 24 0.737155 + 26 23 25 0.999435 + 26 23 26 1 + 26 23 27 1 + 26 23 28 1 + 26 23 29 1 + 26 23 30 1 + 26 23 31 1 + 26 23 32 1 + 26 23 33 1 + 26 23 34 1 + 26 23 35 1 + 26 23 36 1 + 26 23 37 1 + 26 23 38 0.999435 + 26 23 39 0.737155 + 26 23 40 0.0757442 + 26 24 22 0.0423361 + 26 24 23 0.737155 + 26 24 24 1 + 26 24 25 1 + 26 24 26 1 + 26 24 27 1 + 26 24 28 1 + 26 24 29 1 + 26 24 30 1 + 26 24 31 1 + 26 24 32 1 + 26 24 33 1 + 26 24 34 1 + 26 24 35 1 + 26 24 36 1 + 26 24 37 1 + 26 24 38 1 + 26 24 39 1 + 26 24 40 0.737155 + 26 24 41 0.0423361 + 26 25 21 0.00154821 + 26 25 22 0.544006 + 26 25 23 0.999435 + 26 25 24 1 + 26 25 25 1 + 26 25 26 1 + 26 25 27 1 + 26 25 28 1 + 26 25 29 1 + 26 25 30 1 + 26 25 31 1 + 26 25 32 1 + 26 25 33 1 + 26 25 34 1 + 26 25 35 1 + 26 25 36 1 + 26 25 37 1 + 26 25 38 1 + 26 25 39 1 + 26 25 40 0.999435 + 26 25 41 0.544006 + 26 25 42 0.00154821 + 26 26 21 0.188742 + 26 26 22 0.966273 + 26 26 23 1 + 26 26 24 1 + 26 26 25 1 + 26 26 26 1 + 26 26 27 1 + 26 26 28 1 + 26 26 29 1 + 26 26 30 1 + 26 26 31 1 + 26 26 32 1 + 26 26 33 1 + 26 26 34 1 + 26 26 35 1 + 26 26 36 1 + 26 26 37 1 + 26 26 38 1 + 26 26 39 1 + 26 26 40 1 + 26 26 41 0.966273 + 26 26 42 0.188742 + 26 27 20 0.000575367 + 26 27 21 0.635968 + 26 27 22 1 + 26 27 23 1 + 26 27 24 1 + 26 27 25 1 + 26 27 26 1 + 26 27 27 1 + 26 27 28 1 + 26 27 29 1 + 26 27 30 1 + 26 27 31 1 + 26 27 32 1 + 26 27 33 1 + 26 27 34 1 + 26 27 35 1 + 26 27 36 1 + 26 27 37 1 + 26 27 38 1 + 26 27 39 1 + 26 27 40 1 + 26 27 41 1 + 26 27 42 0.635968 + 26 27 43 0.000575367 + 26 28 20 0.0743091 + 26 28 21 0.932236 + 26 28 22 1 + 26 28 23 1 + 26 28 24 1 + 26 28 25 1 + 26 28 26 1 + 26 28 27 1 + 26 28 28 1 + 26 28 29 1 + 26 28 30 1 + 26 28 31 1 + 26 28 32 1 + 26 28 33 1 + 26 28 34 1 + 26 28 35 1 + 26 28 36 1 + 26 28 37 1 + 26 28 38 1 + 26 28 39 1 + 26 28 40 1 + 26 28 41 1 + 26 28 42 0.932236 + 26 28 43 0.0743091 + 26 29 20 0.277158 + 26 29 21 0.998895 + 26 29 22 1 + 26 29 23 1 + 26 29 24 1 + 26 29 25 1 + 26 29 26 1 + 26 29 27 1 + 26 29 28 1 + 26 29 29 1 + 26 29 30 1 + 26 29 31 1 + 26 29 32 1 + 26 29 33 1 + 26 29 34 1 + 26 29 35 1 + 26 29 36 1 + 26 29 37 1 + 26 29 38 1 + 26 29 39 1 + 26 29 40 1 + 26 29 41 1 + 26 29 42 0.998895 + 26 29 43 0.277158 + 26 30 20 0.452189 + 26 30 21 1 + 26 30 22 1 + 26 30 23 1 + 26 30 24 1 + 26 30 25 1 + 26 30 26 1 + 26 30 27 1 + 26 30 28 1 + 26 30 29 1 + 26 30 30 1 + 26 30 31 1 + 26 30 32 1 + 26 30 33 1 + 26 30 34 1 + 26 30 35 1 + 26 30 36 1 + 26 30 37 1 + 26 30 38 1 + 26 30 39 1 + 26 30 40 1 + 26 30 41 1 + 26 30 42 1 + 26 30 43 0.452189 + 26 31 20 0.539246 + 26 31 21 1 + 26 31 22 1 + 26 31 23 1 + 26 31 24 1 + 26 31 25 1 + 26 31 26 1 + 26 31 27 1 + 26 31 28 1 + 26 31 29 1 + 26 31 30 1 + 26 31 31 1 + 26 31 32 1 + 26 31 33 1 + 26 31 34 1 + 26 31 35 1 + 26 31 36 1 + 26 31 37 1 + 26 31 38 1 + 26 31 39 1 + 26 31 40 1 + 26 31 41 1 + 26 31 42 1 + 26 31 43 0.539246 + 26 32 20 0.539246 + 26 32 21 1 + 26 32 22 1 + 26 32 23 1 + 26 32 24 1 + 26 32 25 1 + 26 32 26 1 + 26 32 27 1 + 26 32 28 1 + 26 32 29 1 + 26 32 30 1 + 26 32 31 1 + 26 32 32 1 + 26 32 33 1 + 26 32 34 1 + 26 32 35 1 + 26 32 36 1 + 26 32 37 1 + 26 32 38 1 + 26 32 39 1 + 26 32 40 1 + 26 32 41 1 + 26 32 42 1 + 26 32 43 0.539246 + 26 33 20 0.452189 + 26 33 21 1 + 26 33 22 1 + 26 33 23 1 + 26 33 24 1 + 26 33 25 1 + 26 33 26 1 + 26 33 27 1 + 26 33 28 1 + 26 33 29 1 + 26 33 30 1 + 26 33 31 1 + 26 33 32 1 + 26 33 33 1 + 26 33 34 1 + 26 33 35 1 + 26 33 36 1 + 26 33 37 1 + 26 33 38 1 + 26 33 39 1 + 26 33 40 1 + 26 33 41 1 + 26 33 42 1 + 26 33 43 0.452189 + 26 34 20 0.277158 + 26 34 21 0.998895 + 26 34 22 1 + 26 34 23 1 + 26 34 24 1 + 26 34 25 1 + 26 34 26 1 + 26 34 27 1 + 26 34 28 1 + 26 34 29 1 + 26 34 30 1 + 26 34 31 1 + 26 34 32 1 + 26 34 33 1 + 26 34 34 1 + 26 34 35 1 + 26 34 36 1 + 26 34 37 1 + 26 34 38 1 + 26 34 39 1 + 26 34 40 1 + 26 34 41 1 + 26 34 42 0.998895 + 26 34 43 0.277158 + 26 35 20 0.0743091 + 26 35 21 0.932236 + 26 35 22 1 + 26 35 23 1 + 26 35 24 1 + 26 35 25 1 + 26 35 26 1 + 26 35 27 1 + 26 35 28 1 + 26 35 29 1 + 26 35 30 1 + 26 35 31 1 + 26 35 32 1 + 26 35 33 1 + 26 35 34 1 + 26 35 35 1 + 26 35 36 1 + 26 35 37 1 + 26 35 38 1 + 26 35 39 1 + 26 35 40 1 + 26 35 41 1 + 26 35 42 0.932236 + 26 35 43 0.0743091 + 26 36 20 0.000575367 + 26 36 21 0.635968 + 26 36 22 1 + 26 36 23 1 + 26 36 24 1 + 26 36 25 1 + 26 36 26 1 + 26 36 27 1 + 26 36 28 1 + 26 36 29 1 + 26 36 30 1 + 26 36 31 1 + 26 36 32 1 + 26 36 33 1 + 26 36 34 1 + 26 36 35 1 + 26 36 36 1 + 26 36 37 1 + 26 36 38 1 + 26 36 39 1 + 26 36 40 1 + 26 36 41 1 + 26 36 42 0.635968 + 26 36 43 0.000575367 + 26 37 21 0.188742 + 26 37 22 0.966273 + 26 37 23 1 + 26 37 24 1 + 26 37 25 1 + 26 37 26 1 + 26 37 27 1 + 26 37 28 1 + 26 37 29 1 + 26 37 30 1 + 26 37 31 1 + 26 37 32 1 + 26 37 33 1 + 26 37 34 1 + 26 37 35 1 + 26 37 36 1 + 26 37 37 1 + 26 37 38 1 + 26 37 39 1 + 26 37 40 1 + 26 37 41 0.966273 + 26 37 42 0.188742 + 26 38 21 0.00154821 + 26 38 22 0.544006 + 26 38 23 0.999435 + 26 38 24 1 + 26 38 25 1 + 26 38 26 1 + 26 38 27 1 + 26 38 28 1 + 26 38 29 1 + 26 38 30 1 + 26 38 31 1 + 26 38 32 1 + 26 38 33 1 + 26 38 34 1 + 26 38 35 1 + 26 38 36 1 + 26 38 37 1 + 26 38 38 1 + 26 38 39 1 + 26 38 40 0.999435 + 26 38 41 0.544006 + 26 38 42 0.00154821 + 26 39 22 0.0423361 + 26 39 23 0.737155 + 26 39 24 1 + 26 39 25 1 + 26 39 26 1 + 26 39 27 1 + 26 39 28 1 + 26 39 29 1 + 26 39 30 1 + 26 39 31 1 + 26 39 32 1 + 26 39 33 1 + 26 39 34 1 + 26 39 35 1 + 26 39 36 1 + 26 39 37 1 + 26 39 38 1 + 26 39 39 1 + 26 39 40 0.737155 + 26 39 41 0.0423361 + 26 40 23 0.0757442 + 26 40 24 0.737155 + 26 40 25 0.999435 + 26 40 26 1 + 26 40 27 1 + 26 40 28 1 + 26 40 29 1 + 26 40 30 1 + 26 40 31 1 + 26 40 32 1 + 26 40 33 1 + 26 40 34 1 + 26 40 35 1 + 26 40 36 1 + 26 40 37 1 + 26 40 38 0.999435 + 26 40 39 0.737155 + 26 40 40 0.0757442 + 26 41 24 0.0423361 + 26 41 25 0.544006 + 26 41 26 0.966273 + 26 41 27 1 + 26 41 28 1 + 26 41 29 1 + 26 41 30 1 + 26 41 31 1 + 26 41 32 1 + 26 41 33 1 + 26 41 34 1 + 26 41 35 1 + 26 41 36 1 + 26 41 37 0.966273 + 26 41 38 0.544006 + 26 41 39 0.0423361 + 26 42 25 0.00154821 + 26 42 26 0.188742 + 26 42 27 0.635968 + 26 42 28 0.932236 + 26 42 29 0.998895 + 26 42 30 1 + 26 42 31 1 + 26 42 32 1 + 26 42 33 1 + 26 42 34 0.998895 + 26 42 35 0.932236 + 26 42 36 0.635968 + 26 42 37 0.188742 + 26 42 38 0.00154821 + 26 43 27 0.000575367 + 26 43 28 0.0743091 + 26 43 29 0.277158 + 26 43 30 0.452189 + 26 43 31 0.539246 + 26 43 32 0.539246 + 26 43 33 0.452189 + 26 43 34 0.277158 + 26 43 35 0.0743091 + 26 43 36 0.000575367 + 27 19 30 0.00768648 + 27 19 31 0.0310217 + 27 19 32 0.0310217 + 27 19 33 0.00768648 + 27 20 26 0.000575367 + 27 20 27 0.12736 + 27 20 28 0.452189 + 27 20 29 0.711413 + 27 20 30 0.873392 + 27 20 31 0.933984 + 27 20 32 0.933984 + 27 20 33 0.873392 + 27 20 34 0.711413 + 27 20 35 0.452189 + 27 20 36 0.12736 + 27 20 37 0.000575367 + 27 21 25 0.124558 + 27 21 26 0.635968 + 27 21 27 0.969751 + 27 21 28 1 + 27 21 29 1 + 27 21 30 1 + 27 21 31 1 + 27 21 32 1 + 27 21 33 1 + 27 21 34 1 + 27 21 35 1 + 27 21 36 0.969751 + 27 21 37 0.635968 + 27 21 38 0.124558 + 27 22 23 0.00160611 + 27 22 24 0.347021 + 27 22 25 0.93137 + 27 22 26 1 + 27 22 27 1 + 27 22 28 1 + 27 22 29 1 + 27 22 30 1 + 27 22 31 1 + 27 22 32 1 + 27 22 33 1 + 27 22 34 1 + 27 22 35 1 + 27 22 36 1 + 27 22 37 1 + 27 22 38 0.93137 + 27 22 39 0.347021 + 27 22 40 0.00160611 + 27 23 22 0.00160611 + 27 23 23 0.442652 + 27 23 24 0.985714 + 27 23 25 1 + 27 23 26 1 + 27 23 27 1 + 27 23 28 1 + 27 23 29 1 + 27 23 30 1 + 27 23 31 1 + 27 23 32 1 + 27 23 33 1 + 27 23 34 1 + 27 23 35 1 + 27 23 36 1 + 27 23 37 1 + 27 23 38 1 + 27 23 39 0.985714 + 27 23 40 0.442652 + 27 23 41 0.00160611 + 27 24 22 0.347021 + 27 24 23 0.985714 + 27 24 24 1 + 27 24 25 1 + 27 24 26 1 + 27 24 27 1 + 27 24 28 1 + 27 24 29 1 + 27 24 30 1 + 27 24 31 1 + 27 24 32 1 + 27 24 33 1 + 27 24 34 1 + 27 24 35 1 + 27 24 36 1 + 27 24 37 1 + 27 24 38 1 + 27 24 39 1 + 27 24 40 0.985714 + 27 24 41 0.347021 + 27 25 21 0.124558 + 27 25 22 0.93137 + 27 25 23 1 + 27 25 24 1 + 27 25 25 1 + 27 25 26 1 + 27 25 27 1 + 27 25 28 1 + 27 25 29 1 + 27 25 30 1 + 27 25 31 1 + 27 25 32 1 + 27 25 33 1 + 27 25 34 1 + 27 25 35 1 + 27 25 36 1 + 27 25 37 1 + 27 25 38 1 + 27 25 39 1 + 27 25 40 1 + 27 25 41 0.93137 + 27 25 42 0.124558 + 27 26 20 0.000575367 + 27 26 21 0.635968 + 27 26 22 1 + 27 26 23 1 + 27 26 24 1 + 27 26 25 1 + 27 26 26 1 + 27 26 27 1 + 27 26 28 1 + 27 26 29 1 + 27 26 30 1 + 27 26 31 1 + 27 26 32 1 + 27 26 33 1 + 27 26 34 1 + 27 26 35 1 + 27 26 36 1 + 27 26 37 1 + 27 26 38 1 + 27 26 39 1 + 27 26 40 1 + 27 26 41 1 + 27 26 42 0.635968 + 27 26 43 0.000575367 + 27 27 20 0.12736 + 27 27 21 0.969751 + 27 27 22 1 + 27 27 23 1 + 27 27 24 1 + 27 27 25 1 + 27 27 26 1 + 27 27 27 1 + 27 27 28 1 + 27 27 29 1 + 27 27 30 1 + 27 27 31 1 + 27 27 32 1 + 27 27 33 1 + 27 27 34 1 + 27 27 35 1 + 27 27 36 1 + 27 27 37 1 + 27 27 38 1 + 27 27 39 1 + 27 27 40 1 + 27 27 41 1 + 27 27 42 0.969751 + 27 27 43 0.12736 + 27 28 20 0.452189 + 27 28 21 1 + 27 28 22 1 + 27 28 23 1 + 27 28 24 1 + 27 28 25 1 + 27 28 26 1 + 27 28 27 1 + 27 28 28 1 + 27 28 29 1 + 27 28 30 1 + 27 28 31 1 + 27 28 32 1 + 27 28 33 1 + 27 28 34 1 + 27 28 35 1 + 27 28 36 1 + 27 28 37 1 + 27 28 38 1 + 27 28 39 1 + 27 28 40 1 + 27 28 41 1 + 27 28 42 1 + 27 28 43 0.452189 + 27 29 20 0.711413 + 27 29 21 1 + 27 29 22 1 + 27 29 23 1 + 27 29 24 1 + 27 29 25 1 + 27 29 26 1 + 27 29 27 1 + 27 29 28 1 + 27 29 29 1 + 27 29 30 1 + 27 29 31 1 + 27 29 32 1 + 27 29 33 1 + 27 29 34 1 + 27 29 35 1 + 27 29 36 1 + 27 29 37 1 + 27 29 38 1 + 27 29 39 1 + 27 29 40 1 + 27 29 41 1 + 27 29 42 1 + 27 29 43 0.711413 + 27 30 19 0.00768648 + 27 30 20 0.873392 + 27 30 21 1 + 27 30 22 1 + 27 30 23 1 + 27 30 24 1 + 27 30 25 1 + 27 30 26 1 + 27 30 27 1 + 27 30 28 1 + 27 30 29 1 + 27 30 30 1 + 27 30 31 1 + 27 30 32 1 + 27 30 33 1 + 27 30 34 1 + 27 30 35 1 + 27 30 36 1 + 27 30 37 1 + 27 30 38 1 + 27 30 39 1 + 27 30 40 1 + 27 30 41 1 + 27 30 42 1 + 27 30 43 0.873392 + 27 30 44 0.00768648 + 27 31 19 0.0310217 + 27 31 20 0.933984 + 27 31 21 1 + 27 31 22 1 + 27 31 23 1 + 27 31 24 1 + 27 31 25 1 + 27 31 26 1 + 27 31 27 1 + 27 31 28 1 + 27 31 29 1 + 27 31 30 1 + 27 31 31 1 + 27 31 32 1 + 27 31 33 1 + 27 31 34 1 + 27 31 35 1 + 27 31 36 1 + 27 31 37 1 + 27 31 38 1 + 27 31 39 1 + 27 31 40 1 + 27 31 41 1 + 27 31 42 1 + 27 31 43 0.933984 + 27 31 44 0.0310217 + 27 32 19 0.0310217 + 27 32 20 0.933984 + 27 32 21 1 + 27 32 22 1 + 27 32 23 1 + 27 32 24 1 + 27 32 25 1 + 27 32 26 1 + 27 32 27 1 + 27 32 28 1 + 27 32 29 1 + 27 32 30 1 + 27 32 31 1 + 27 32 32 1 + 27 32 33 1 + 27 32 34 1 + 27 32 35 1 + 27 32 36 1 + 27 32 37 1 + 27 32 38 1 + 27 32 39 1 + 27 32 40 1 + 27 32 41 1 + 27 32 42 1 + 27 32 43 0.933984 + 27 32 44 0.0310217 + 27 33 19 0.00768648 + 27 33 20 0.873392 + 27 33 21 1 + 27 33 22 1 + 27 33 23 1 + 27 33 24 1 + 27 33 25 1 + 27 33 26 1 + 27 33 27 1 + 27 33 28 1 + 27 33 29 1 + 27 33 30 1 + 27 33 31 1 + 27 33 32 1 + 27 33 33 1 + 27 33 34 1 + 27 33 35 1 + 27 33 36 1 + 27 33 37 1 + 27 33 38 1 + 27 33 39 1 + 27 33 40 1 + 27 33 41 1 + 27 33 42 1 + 27 33 43 0.873392 + 27 33 44 0.00768648 + 27 34 20 0.711413 + 27 34 21 1 + 27 34 22 1 + 27 34 23 1 + 27 34 24 1 + 27 34 25 1 + 27 34 26 1 + 27 34 27 1 + 27 34 28 1 + 27 34 29 1 + 27 34 30 1 + 27 34 31 1 + 27 34 32 1 + 27 34 33 1 + 27 34 34 1 + 27 34 35 1 + 27 34 36 1 + 27 34 37 1 + 27 34 38 1 + 27 34 39 1 + 27 34 40 1 + 27 34 41 1 + 27 34 42 1 + 27 34 43 0.711413 + 27 35 20 0.452189 + 27 35 21 1 + 27 35 22 1 + 27 35 23 1 + 27 35 24 1 + 27 35 25 1 + 27 35 26 1 + 27 35 27 1 + 27 35 28 1 + 27 35 29 1 + 27 35 30 1 + 27 35 31 1 + 27 35 32 1 + 27 35 33 1 + 27 35 34 1 + 27 35 35 1 + 27 35 36 1 + 27 35 37 1 + 27 35 38 1 + 27 35 39 1 + 27 35 40 1 + 27 35 41 1 + 27 35 42 1 + 27 35 43 0.452189 + 27 36 20 0.12736 + 27 36 21 0.969751 + 27 36 22 1 + 27 36 23 1 + 27 36 24 1 + 27 36 25 1 + 27 36 26 1 + 27 36 27 1 + 27 36 28 1 + 27 36 29 1 + 27 36 30 1 + 27 36 31 1 + 27 36 32 1 + 27 36 33 1 + 27 36 34 1 + 27 36 35 1 + 27 36 36 1 + 27 36 37 1 + 27 36 38 1 + 27 36 39 1 + 27 36 40 1 + 27 36 41 1 + 27 36 42 0.969751 + 27 36 43 0.12736 + 27 37 20 0.000575367 + 27 37 21 0.635968 + 27 37 22 1 + 27 37 23 1 + 27 37 24 1 + 27 37 25 1 + 27 37 26 1 + 27 37 27 1 + 27 37 28 1 + 27 37 29 1 + 27 37 30 1 + 27 37 31 1 + 27 37 32 1 + 27 37 33 1 + 27 37 34 1 + 27 37 35 1 + 27 37 36 1 + 27 37 37 1 + 27 37 38 1 + 27 37 39 1 + 27 37 40 1 + 27 37 41 1 + 27 37 42 0.635968 + 27 37 43 0.000575367 + 27 38 21 0.124558 + 27 38 22 0.93137 + 27 38 23 1 + 27 38 24 1 + 27 38 25 1 + 27 38 26 1 + 27 38 27 1 + 27 38 28 1 + 27 38 29 1 + 27 38 30 1 + 27 38 31 1 + 27 38 32 1 + 27 38 33 1 + 27 38 34 1 + 27 38 35 1 + 27 38 36 1 + 27 38 37 1 + 27 38 38 1 + 27 38 39 1 + 27 38 40 1 + 27 38 41 0.93137 + 27 38 42 0.124558 + 27 39 22 0.347021 + 27 39 23 0.985714 + 27 39 24 1 + 27 39 25 1 + 27 39 26 1 + 27 39 27 1 + 27 39 28 1 + 27 39 29 1 + 27 39 30 1 + 27 39 31 1 + 27 39 32 1 + 27 39 33 1 + 27 39 34 1 + 27 39 35 1 + 27 39 36 1 + 27 39 37 1 + 27 39 38 1 + 27 39 39 1 + 27 39 40 0.985714 + 27 39 41 0.347021 + 27 40 22 0.00160611 + 27 40 23 0.442652 + 27 40 24 0.985714 + 27 40 25 1 + 27 40 26 1 + 27 40 27 1 + 27 40 28 1 + 27 40 29 1 + 27 40 30 1 + 27 40 31 1 + 27 40 32 1 + 27 40 33 1 + 27 40 34 1 + 27 40 35 1 + 27 40 36 1 + 27 40 37 1 + 27 40 38 1 + 27 40 39 0.985714 + 27 40 40 0.442652 + 27 40 41 0.00160611 + 27 41 23 0.00160611 + 27 41 24 0.347021 + 27 41 25 0.93137 + 27 41 26 1 + 27 41 27 1 + 27 41 28 1 + 27 41 29 1 + 27 41 30 1 + 27 41 31 1 + 27 41 32 1 + 27 41 33 1 + 27 41 34 1 + 27 41 35 1 + 27 41 36 1 + 27 41 37 1 + 27 41 38 0.93137 + 27 41 39 0.347021 + 27 41 40 0.00160611 + 27 42 25 0.124558 + 27 42 26 0.635968 + 27 42 27 0.969751 + 27 42 28 1 + 27 42 29 1 + 27 42 30 1 + 27 42 31 1 + 27 42 32 1 + 27 42 33 1 + 27 42 34 1 + 27 42 35 1 + 27 42 36 0.969751 + 27 42 37 0.635968 + 27 42 38 0.124558 + 27 43 26 0.000575367 + 27 43 27 0.12736 + 27 43 28 0.452189 + 27 43 29 0.711413 + 27 43 30 0.873392 + 27 43 31 0.933984 + 27 43 32 0.933984 + 27 43 33 0.873392 + 27 43 34 0.711413 + 27 43 35 0.452189 + 27 43 36 0.12736 + 27 43 37 0.000575367 + 27 44 30 0.00768648 + 27 44 31 0.0310217 + 27 44 32 0.0310217 + 27 44 33 0.00768648 + 28 19 28 0.00114247 + 28 19 29 0.0710269 + 28 19 30 0.213322 + 28 19 31 0.294975 + 28 19 32 0.294975 + 28 19 33 0.213322 + 28 19 34 0.0710269 + 28 19 35 0.00114247 + 28 20 26 0.0743091 + 28 20 27 0.452189 + 28 20 28 0.795409 + 28 20 29 0.977321 + 28 20 30 0.999999 + 28 20 31 1 + 28 20 32 1 + 28 20 33 0.999999 + 28 20 34 0.977321 + 28 20 35 0.795409 + 28 20 36 0.452189 + 28 20 37 0.0743091 + 28 21 24 0.0180042 + 28 21 25 0.446726 + 28 21 26 0.932236 + 28 21 27 1 + 28 21 28 1 + 28 21 29 1 + 28 21 30 1 + 28 21 31 1 + 28 21 32 1 + 28 21 33 1 + 28 21 34 1 + 28 21 35 1 + 28 21 36 1 + 28 21 37 0.932236 + 28 21 38 0.446726 + 28 21 39 0.0180042 + 28 22 23 0.0778651 + 28 22 24 0.734594 + 28 22 25 0.999882 + 28 22 26 1 + 28 22 27 1 + 28 22 28 1 + 28 22 29 1 + 28 22 30 1 + 28 22 31 1 + 28 22 32 1 + 28 22 33 1 + 28 22 34 1 + 28 22 35 1 + 28 22 36 1 + 28 22 37 1 + 28 22 38 0.999882 + 28 22 39 0.734594 + 28 22 40 0.0778651 + 28 23 22 0.0778651 + 28 23 23 0.815054 + 28 23 24 1 + 28 23 25 1 + 28 23 26 1 + 28 23 27 1 + 28 23 28 1 + 28 23 29 1 + 28 23 30 1 + 28 23 31 1 + 28 23 32 1 + 28 23 33 1 + 28 23 34 1 + 28 23 35 1 + 28 23 36 1 + 28 23 37 1 + 28 23 38 1 + 28 23 39 1 + 28 23 40 0.815054 + 28 23 41 0.0778651 + 28 24 21 0.0180042 + 28 24 22 0.734594 + 28 24 23 1 + 28 24 24 1 + 28 24 25 1 + 28 24 26 1 + 28 24 27 1 + 28 24 28 1 + 28 24 29 1 + 28 24 30 1 + 28 24 31 1 + 28 24 32 1 + 28 24 33 1 + 28 24 34 1 + 28 24 35 1 + 28 24 36 1 + 28 24 37 1 + 28 24 38 1 + 28 24 39 1 + 28 24 40 1 + 28 24 41 0.734594 + 28 24 42 0.0180042 + 28 25 21 0.446726 + 28 25 22 0.999882 + 28 25 23 1 + 28 25 24 1 + 28 25 25 1 + 28 25 26 1 + 28 25 27 1 + 28 25 28 1 + 28 25 29 1 + 28 25 30 1 + 28 25 31 1 + 28 25 32 1 + 28 25 33 1 + 28 25 34 1 + 28 25 35 1 + 28 25 36 1 + 28 25 37 1 + 28 25 38 1 + 28 25 39 1 + 28 25 40 1 + 28 25 41 0.999882 + 28 25 42 0.446726 + 28 26 20 0.0743091 + 28 26 21 0.932236 + 28 26 22 1 + 28 26 23 1 + 28 26 24 1 + 28 26 25 1 + 28 26 26 1 + 28 26 27 1 + 28 26 28 1 + 28 26 29 1 + 28 26 30 1 + 28 26 31 1 + 28 26 32 1 + 28 26 33 1 + 28 26 34 1 + 28 26 35 1 + 28 26 36 1 + 28 26 37 1 + 28 26 38 1 + 28 26 39 1 + 28 26 40 1 + 28 26 41 1 + 28 26 42 0.932236 + 28 26 43 0.0743091 + 28 27 20 0.452189 + 28 27 21 1 + 28 27 22 1 + 28 27 23 1 + 28 27 24 1 + 28 27 25 1 + 28 27 26 1 + 28 27 27 1 + 28 27 28 1 + 28 27 29 1 + 28 27 30 1 + 28 27 31 1 + 28 27 32 1 + 28 27 33 1 + 28 27 34 1 + 28 27 35 1 + 28 27 36 1 + 28 27 37 1 + 28 27 38 1 + 28 27 39 1 + 28 27 40 1 + 28 27 41 1 + 28 27 42 1 + 28 27 43 0.452189 + 28 28 19 0.00114247 + 28 28 20 0.795409 + 28 28 21 1 + 28 28 22 1 + 28 28 23 1 + 28 28 24 1 + 28 28 25 1 + 28 28 26 1 + 28 28 27 1 + 28 28 28 1 + 28 28 29 1 + 28 28 30 1 + 28 28 31 1 + 28 28 32 1 + 28 28 33 1 + 28 28 34 1 + 28 28 35 1 + 28 28 36 1 + 28 28 37 1 + 28 28 38 1 + 28 28 39 1 + 28 28 40 1 + 28 28 41 1 + 28 28 42 1 + 28 28 43 0.795409 + 28 28 44 0.00114247 + 28 29 19 0.0710269 + 28 29 20 0.977321 + 28 29 21 1 + 28 29 22 1 + 28 29 23 1 + 28 29 24 1 + 28 29 25 1 + 28 29 26 1 + 28 29 27 1 + 28 29 28 1 + 28 29 29 1 + 28 29 30 1 + 28 29 31 1 + 28 29 32 1 + 28 29 33 1 + 28 29 34 1 + 28 29 35 1 + 28 29 36 1 + 28 29 37 1 + 28 29 38 1 + 28 29 39 1 + 28 29 40 1 + 28 29 41 1 + 28 29 42 1 + 28 29 43 0.977321 + 28 29 44 0.0710269 + 28 30 19 0.213322 + 28 30 20 0.999999 + 28 30 21 1 + 28 30 22 1 + 28 30 23 1 + 28 30 24 1 + 28 30 25 1 + 28 30 26 1 + 28 30 27 1 + 28 30 28 1 + 28 30 29 1 + 28 30 30 1 + 28 30 31 1 + 28 30 32 1 + 28 30 33 1 + 28 30 34 1 + 28 30 35 1 + 28 30 36 1 + 28 30 37 1 + 28 30 38 1 + 28 30 39 1 + 28 30 40 1 + 28 30 41 1 + 28 30 42 1 + 28 30 43 0.999999 + 28 30 44 0.213322 + 28 31 19 0.294975 + 28 31 20 1 + 28 31 21 1 + 28 31 22 1 + 28 31 23 1 + 28 31 24 1 + 28 31 25 1 + 28 31 26 1 + 28 31 27 1 + 28 31 28 1 + 28 31 29 1 + 28 31 30 1 + 28 31 31 1 + 28 31 32 1 + 28 31 33 1 + 28 31 34 1 + 28 31 35 1 + 28 31 36 1 + 28 31 37 1 + 28 31 38 1 + 28 31 39 1 + 28 31 40 1 + 28 31 41 1 + 28 31 42 1 + 28 31 43 1 + 28 31 44 0.294975 + 28 32 19 0.294975 + 28 32 20 1 + 28 32 21 1 + 28 32 22 1 + 28 32 23 1 + 28 32 24 1 + 28 32 25 1 + 28 32 26 1 + 28 32 27 1 + 28 32 28 1 + 28 32 29 1 + 28 32 30 1 + 28 32 31 1 + 28 32 32 1 + 28 32 33 1 + 28 32 34 1 + 28 32 35 1 + 28 32 36 1 + 28 32 37 1 + 28 32 38 1 + 28 32 39 1 + 28 32 40 1 + 28 32 41 1 + 28 32 42 1 + 28 32 43 1 + 28 32 44 0.294975 + 28 33 19 0.213322 + 28 33 20 0.999999 + 28 33 21 1 + 28 33 22 1 + 28 33 23 1 + 28 33 24 1 + 28 33 25 1 + 28 33 26 1 + 28 33 27 1 + 28 33 28 1 + 28 33 29 1 + 28 33 30 1 + 28 33 31 1 + 28 33 32 1 + 28 33 33 1 + 28 33 34 1 + 28 33 35 1 + 28 33 36 1 + 28 33 37 1 + 28 33 38 1 + 28 33 39 1 + 28 33 40 1 + 28 33 41 1 + 28 33 42 1 + 28 33 43 0.999999 + 28 33 44 0.213322 + 28 34 19 0.0710269 + 28 34 20 0.977321 + 28 34 21 1 + 28 34 22 1 + 28 34 23 1 + 28 34 24 1 + 28 34 25 1 + 28 34 26 1 + 28 34 27 1 + 28 34 28 1 + 28 34 29 1 + 28 34 30 1 + 28 34 31 1 + 28 34 32 1 + 28 34 33 1 + 28 34 34 1 + 28 34 35 1 + 28 34 36 1 + 28 34 37 1 + 28 34 38 1 + 28 34 39 1 + 28 34 40 1 + 28 34 41 1 + 28 34 42 1 + 28 34 43 0.977321 + 28 34 44 0.0710269 + 28 35 19 0.00114247 + 28 35 20 0.795409 + 28 35 21 1 + 28 35 22 1 + 28 35 23 1 + 28 35 24 1 + 28 35 25 1 + 28 35 26 1 + 28 35 27 1 + 28 35 28 1 + 28 35 29 1 + 28 35 30 1 + 28 35 31 1 + 28 35 32 1 + 28 35 33 1 + 28 35 34 1 + 28 35 35 1 + 28 35 36 1 + 28 35 37 1 + 28 35 38 1 + 28 35 39 1 + 28 35 40 1 + 28 35 41 1 + 28 35 42 1 + 28 35 43 0.795409 + 28 35 44 0.00114247 + 28 36 20 0.452189 + 28 36 21 1 + 28 36 22 1 + 28 36 23 1 + 28 36 24 1 + 28 36 25 1 + 28 36 26 1 + 28 36 27 1 + 28 36 28 1 + 28 36 29 1 + 28 36 30 1 + 28 36 31 1 + 28 36 32 1 + 28 36 33 1 + 28 36 34 1 + 28 36 35 1 + 28 36 36 1 + 28 36 37 1 + 28 36 38 1 + 28 36 39 1 + 28 36 40 1 + 28 36 41 1 + 28 36 42 1 + 28 36 43 0.452189 + 28 37 20 0.0743091 + 28 37 21 0.932236 + 28 37 22 1 + 28 37 23 1 + 28 37 24 1 + 28 37 25 1 + 28 37 26 1 + 28 37 27 1 + 28 37 28 1 + 28 37 29 1 + 28 37 30 1 + 28 37 31 1 + 28 37 32 1 + 28 37 33 1 + 28 37 34 1 + 28 37 35 1 + 28 37 36 1 + 28 37 37 1 + 28 37 38 1 + 28 37 39 1 + 28 37 40 1 + 28 37 41 1 + 28 37 42 0.932236 + 28 37 43 0.0743091 + 28 38 21 0.446726 + 28 38 22 0.999882 + 28 38 23 1 + 28 38 24 1 + 28 38 25 1 + 28 38 26 1 + 28 38 27 1 + 28 38 28 1 + 28 38 29 1 + 28 38 30 1 + 28 38 31 1 + 28 38 32 1 + 28 38 33 1 + 28 38 34 1 + 28 38 35 1 + 28 38 36 1 + 28 38 37 1 + 28 38 38 1 + 28 38 39 1 + 28 38 40 1 + 28 38 41 0.999882 + 28 38 42 0.446726 + 28 39 21 0.0180042 + 28 39 22 0.734594 + 28 39 23 1 + 28 39 24 1 + 28 39 25 1 + 28 39 26 1 + 28 39 27 1 + 28 39 28 1 + 28 39 29 1 + 28 39 30 1 + 28 39 31 1 + 28 39 32 1 + 28 39 33 1 + 28 39 34 1 + 28 39 35 1 + 28 39 36 1 + 28 39 37 1 + 28 39 38 1 + 28 39 39 1 + 28 39 40 1 + 28 39 41 0.734594 + 28 39 42 0.0180042 + 28 40 22 0.0778651 + 28 40 23 0.815054 + 28 40 24 1 + 28 40 25 1 + 28 40 26 1 + 28 40 27 1 + 28 40 28 1 + 28 40 29 1 + 28 40 30 1 + 28 40 31 1 + 28 40 32 1 + 28 40 33 1 + 28 40 34 1 + 28 40 35 1 + 28 40 36 1 + 28 40 37 1 + 28 40 38 1 + 28 40 39 1 + 28 40 40 0.815054 + 28 40 41 0.0778651 + 28 41 23 0.0778651 + 28 41 24 0.734594 + 28 41 25 0.999882 + 28 41 26 1 + 28 41 27 1 + 28 41 28 1 + 28 41 29 1 + 28 41 30 1 + 28 41 31 1 + 28 41 32 1 + 28 41 33 1 + 28 41 34 1 + 28 41 35 1 + 28 41 36 1 + 28 41 37 1 + 28 41 38 0.999882 + 28 41 39 0.734594 + 28 41 40 0.0778651 + 28 42 24 0.0180042 + 28 42 25 0.446726 + 28 42 26 0.932236 + 28 42 27 1 + 28 42 28 1 + 28 42 29 1 + 28 42 30 1 + 28 42 31 1 + 28 42 32 1 + 28 42 33 1 + 28 42 34 1 + 28 42 35 1 + 28 42 36 1 + 28 42 37 0.932236 + 28 42 38 0.446726 + 28 42 39 0.0180042 + 28 43 26 0.0743091 + 28 43 27 0.452189 + 28 43 28 0.795409 + 28 43 29 0.977321 + 28 43 30 0.999999 + 28 43 31 1 + 28 43 32 1 + 28 43 33 0.999999 + 28 43 34 0.977321 + 28 43 35 0.795409 + 28 43 36 0.452189 + 28 43 37 0.0743091 + 28 44 28 0.00114247 + 28 44 29 0.0710269 + 28 44 30 0.213322 + 28 44 31 0.294975 + 28 44 32 0.294975 + 28 44 33 0.213322 + 28 44 34 0.0710269 + 28 44 35 0.00114247 + 29 19 28 0.0710269 + 29 19 29 0.294975 + 29 19 30 0.456675 + 29 19 31 0.536741 + 29 19 32 0.536741 + 29 19 33 0.456675 + 29 19 34 0.294975 + 29 19 35 0.0710269 + 29 20 25 0.00330518 + 29 20 26 0.277158 + 29 20 27 0.711413 + 29 20 28 0.977321 + 29 20 29 1 + 29 20 30 1 + 29 20 31 1 + 29 20 32 1 + 29 20 33 1 + 29 20 34 1 + 29 20 35 0.977321 + 29 20 36 0.711413 + 29 20 37 0.277158 + 29 20 38 0.00330518 + 29 21 24 0.12727 + 29 21 25 0.72694 + 29 21 26 0.998895 + 29 21 27 1 + 29 21 28 1 + 29 21 29 1 + 29 21 30 1 + 29 21 31 1 + 29 21 32 1 + 29 21 33 1 + 29 21 34 1 + 29 21 35 1 + 29 21 36 1 + 29 21 37 0.998895 + 29 21 38 0.72694 + 29 21 39 0.12727 + 29 22 23 0.259926 + 29 22 24 0.928659 + 29 22 25 1 + 29 22 26 1 + 29 22 27 1 + 29 22 28 1 + 29 22 29 1 + 29 22 30 1 + 29 22 31 1 + 29 22 32 1 + 29 22 33 1 + 29 22 34 1 + 29 22 35 1 + 29 22 36 1 + 29 22 37 1 + 29 22 38 1 + 29 22 39 0.928659 + 29 22 40 0.259926 + 29 23 22 0.259926 + 29 23 23 0.964837 + 29 23 24 1 + 29 23 25 1 + 29 23 26 1 + 29 23 27 1 + 29 23 28 1 + 29 23 29 1 + 29 23 30 1 + 29 23 31 1 + 29 23 32 1 + 29 23 33 1 + 29 23 34 1 + 29 23 35 1 + 29 23 36 1 + 29 23 37 1 + 29 23 38 1 + 29 23 39 1 + 29 23 40 0.964837 + 29 23 41 0.259926 + 29 24 21 0.12727 + 29 24 22 0.928659 + 29 24 23 1 + 29 24 24 1 + 29 24 25 1 + 29 24 26 1 + 29 24 27 1 + 29 24 28 1 + 29 24 29 1 + 29 24 30 1 + 29 24 31 1 + 29 24 32 1 + 29 24 33 1 + 29 24 34 1 + 29 24 35 1 + 29 24 36 1 + 29 24 37 1 + 29 24 38 1 + 29 24 39 1 + 29 24 40 1 + 29 24 41 0.928659 + 29 24 42 0.12727 + 29 25 20 0.00330518 + 29 25 21 0.72694 + 29 25 22 1 + 29 25 23 1 + 29 25 24 1 + 29 25 25 1 + 29 25 26 1 + 29 25 27 1 + 29 25 28 1 + 29 25 29 1 + 29 25 30 1 + 29 25 31 1 + 29 25 32 1 + 29 25 33 1 + 29 25 34 1 + 29 25 35 1 + 29 25 36 1 + 29 25 37 1 + 29 25 38 1 + 29 25 39 1 + 29 25 40 1 + 29 25 41 1 + 29 25 42 0.72694 + 29 25 43 0.00330518 + 29 26 20 0.277158 + 29 26 21 0.998895 + 29 26 22 1 + 29 26 23 1 + 29 26 24 1 + 29 26 25 1 + 29 26 26 1 + 29 26 27 1 + 29 26 28 1 + 29 26 29 1 + 29 26 30 1 + 29 26 31 1 + 29 26 32 1 + 29 26 33 1 + 29 26 34 1 + 29 26 35 1 + 29 26 36 1 + 29 26 37 1 + 29 26 38 1 + 29 26 39 1 + 29 26 40 1 + 29 26 41 1 + 29 26 42 0.998895 + 29 26 43 0.277158 + 29 27 20 0.711413 + 29 27 21 1 + 29 27 22 1 + 29 27 23 1 + 29 27 24 1 + 29 27 25 1 + 29 27 26 1 + 29 27 27 1 + 29 27 28 1 + 29 27 29 1 + 29 27 30 1 + 29 27 31 1 + 29 27 32 1 + 29 27 33 1 + 29 27 34 1 + 29 27 35 1 + 29 27 36 1 + 29 27 37 1 + 29 27 38 1 + 29 27 39 1 + 29 27 40 1 + 29 27 41 1 + 29 27 42 1 + 29 27 43 0.711413 + 29 28 19 0.0710269 + 29 28 20 0.977321 + 29 28 21 1 + 29 28 22 1 + 29 28 23 1 + 29 28 24 1 + 29 28 25 1 + 29 28 26 1 + 29 28 27 1 + 29 28 28 1 + 29 28 29 1 + 29 28 30 1 + 29 28 31 1 + 29 28 32 1 + 29 28 33 1 + 29 28 34 1 + 29 28 35 1 + 29 28 36 1 + 29 28 37 1 + 29 28 38 1 + 29 28 39 1 + 29 28 40 1 + 29 28 41 1 + 29 28 42 1 + 29 28 43 0.977321 + 29 28 44 0.0710269 + 29 29 19 0.294975 + 29 29 20 1 + 29 29 21 1 + 29 29 22 1 + 29 29 23 1 + 29 29 24 1 + 29 29 25 1 + 29 29 26 1 + 29 29 27 1 + 29 29 28 1 + 29 29 29 1 + 29 29 30 1 + 29 29 31 1 + 29 29 32 1 + 29 29 33 1 + 29 29 34 1 + 29 29 35 1 + 29 29 36 1 + 29 29 37 1 + 29 29 38 1 + 29 29 39 1 + 29 29 40 1 + 29 29 41 1 + 29 29 42 1 + 29 29 43 1 + 29 29 44 0.294975 + 29 30 19 0.456675 + 29 30 20 1 + 29 30 21 1 + 29 30 22 1 + 29 30 23 1 + 29 30 24 1 + 29 30 25 1 + 29 30 26 1 + 29 30 27 1 + 29 30 28 1 + 29 30 29 1 + 29 30 30 1 + 29 30 31 1 + 29 30 32 1 + 29 30 33 1 + 29 30 34 1 + 29 30 35 1 + 29 30 36 1 + 29 30 37 1 + 29 30 38 1 + 29 30 39 1 + 29 30 40 1 + 29 30 41 1 + 29 30 42 1 + 29 30 43 1 + 29 30 44 0.456675 + 29 31 19 0.536741 + 29 31 20 1 + 29 31 21 1 + 29 31 22 1 + 29 31 23 1 + 29 31 24 1 + 29 31 25 1 + 29 31 26 1 + 29 31 27 1 + 29 31 28 1 + 29 31 29 1 + 29 31 30 1 + 29 31 31 1 + 29 31 32 1 + 29 31 33 1 + 29 31 34 1 + 29 31 35 1 + 29 31 36 1 + 29 31 37 1 + 29 31 38 1 + 29 31 39 1 + 29 31 40 1 + 29 31 41 1 + 29 31 42 1 + 29 31 43 1 + 29 31 44 0.536741 + 29 32 19 0.536741 + 29 32 20 1 + 29 32 21 1 + 29 32 22 1 + 29 32 23 1 + 29 32 24 1 + 29 32 25 1 + 29 32 26 1 + 29 32 27 1 + 29 32 28 1 + 29 32 29 1 + 29 32 30 1 + 29 32 31 1 + 29 32 32 1 + 29 32 33 1 + 29 32 34 1 + 29 32 35 1 + 29 32 36 1 + 29 32 37 1 + 29 32 38 1 + 29 32 39 1 + 29 32 40 1 + 29 32 41 1 + 29 32 42 1 + 29 32 43 1 + 29 32 44 0.536741 + 29 33 19 0.456675 + 29 33 20 1 + 29 33 21 1 + 29 33 22 1 + 29 33 23 1 + 29 33 24 1 + 29 33 25 1 + 29 33 26 1 + 29 33 27 1 + 29 33 28 1 + 29 33 29 1 + 29 33 30 1 + 29 33 31 1 + 29 33 32 1 + 29 33 33 1 + 29 33 34 1 + 29 33 35 1 + 29 33 36 1 + 29 33 37 1 + 29 33 38 1 + 29 33 39 1 + 29 33 40 1 + 29 33 41 1 + 29 33 42 1 + 29 33 43 1 + 29 33 44 0.456675 + 29 34 19 0.294975 + 29 34 20 1 + 29 34 21 1 + 29 34 22 1 + 29 34 23 1 + 29 34 24 1 + 29 34 25 1 + 29 34 26 1 + 29 34 27 1 + 29 34 28 1 + 29 34 29 1 + 29 34 30 1 + 29 34 31 1 + 29 34 32 1 + 29 34 33 1 + 29 34 34 1 + 29 34 35 1 + 29 34 36 1 + 29 34 37 1 + 29 34 38 1 + 29 34 39 1 + 29 34 40 1 + 29 34 41 1 + 29 34 42 1 + 29 34 43 1 + 29 34 44 0.294975 + 29 35 19 0.0710269 + 29 35 20 0.977321 + 29 35 21 1 + 29 35 22 1 + 29 35 23 1 + 29 35 24 1 + 29 35 25 1 + 29 35 26 1 + 29 35 27 1 + 29 35 28 1 + 29 35 29 1 + 29 35 30 1 + 29 35 31 1 + 29 35 32 1 + 29 35 33 1 + 29 35 34 1 + 29 35 35 1 + 29 35 36 1 + 29 35 37 1 + 29 35 38 1 + 29 35 39 1 + 29 35 40 1 + 29 35 41 1 + 29 35 42 1 + 29 35 43 0.977321 + 29 35 44 0.0710269 + 29 36 20 0.711413 + 29 36 21 1 + 29 36 22 1 + 29 36 23 1 + 29 36 24 1 + 29 36 25 1 + 29 36 26 1 + 29 36 27 1 + 29 36 28 1 + 29 36 29 1 + 29 36 30 1 + 29 36 31 1 + 29 36 32 1 + 29 36 33 1 + 29 36 34 1 + 29 36 35 1 + 29 36 36 1 + 29 36 37 1 + 29 36 38 1 + 29 36 39 1 + 29 36 40 1 + 29 36 41 1 + 29 36 42 1 + 29 36 43 0.711413 + 29 37 20 0.277158 + 29 37 21 0.998895 + 29 37 22 1 + 29 37 23 1 + 29 37 24 1 + 29 37 25 1 + 29 37 26 1 + 29 37 27 1 + 29 37 28 1 + 29 37 29 1 + 29 37 30 1 + 29 37 31 1 + 29 37 32 1 + 29 37 33 1 + 29 37 34 1 + 29 37 35 1 + 29 37 36 1 + 29 37 37 1 + 29 37 38 1 + 29 37 39 1 + 29 37 40 1 + 29 37 41 1 + 29 37 42 0.998895 + 29 37 43 0.277158 + 29 38 20 0.00330518 + 29 38 21 0.72694 + 29 38 22 1 + 29 38 23 1 + 29 38 24 1 + 29 38 25 1 + 29 38 26 1 + 29 38 27 1 + 29 38 28 1 + 29 38 29 1 + 29 38 30 1 + 29 38 31 1 + 29 38 32 1 + 29 38 33 1 + 29 38 34 1 + 29 38 35 1 + 29 38 36 1 + 29 38 37 1 + 29 38 38 1 + 29 38 39 1 + 29 38 40 1 + 29 38 41 1 + 29 38 42 0.72694 + 29 38 43 0.00330518 + 29 39 21 0.12727 + 29 39 22 0.928659 + 29 39 23 1 + 29 39 24 1 + 29 39 25 1 + 29 39 26 1 + 29 39 27 1 + 29 39 28 1 + 29 39 29 1 + 29 39 30 1 + 29 39 31 1 + 29 39 32 1 + 29 39 33 1 + 29 39 34 1 + 29 39 35 1 + 29 39 36 1 + 29 39 37 1 + 29 39 38 1 + 29 39 39 1 + 29 39 40 1 + 29 39 41 0.928659 + 29 39 42 0.12727 + 29 40 22 0.259926 + 29 40 23 0.964837 + 29 40 24 1 + 29 40 25 1 + 29 40 26 1 + 29 40 27 1 + 29 40 28 1 + 29 40 29 1 + 29 40 30 1 + 29 40 31 1 + 29 40 32 1 + 29 40 33 1 + 29 40 34 1 + 29 40 35 1 + 29 40 36 1 + 29 40 37 1 + 29 40 38 1 + 29 40 39 1 + 29 40 40 0.964837 + 29 40 41 0.259926 + 29 41 23 0.259926 + 29 41 24 0.928659 + 29 41 25 1 + 29 41 26 1 + 29 41 27 1 + 29 41 28 1 + 29 41 29 1 + 29 41 30 1 + 29 41 31 1 + 29 41 32 1 + 29 41 33 1 + 29 41 34 1 + 29 41 35 1 + 29 41 36 1 + 29 41 37 1 + 29 41 38 1 + 29 41 39 0.928659 + 29 41 40 0.259926 + 29 42 24 0.12727 + 29 42 25 0.72694 + 29 42 26 0.998895 + 29 42 27 1 + 29 42 28 1 + 29 42 29 1 + 29 42 30 1 + 29 42 31 1 + 29 42 32 1 + 29 42 33 1 + 29 42 34 1 + 29 42 35 1 + 29 42 36 1 + 29 42 37 0.998895 + 29 42 38 0.72694 + 29 42 39 0.12727 + 29 43 25 0.00330518 + 29 43 26 0.277158 + 29 43 27 0.711413 + 29 43 28 0.977321 + 29 43 29 1 + 29 43 30 1 + 29 43 31 1 + 29 43 32 1 + 29 43 33 1 + 29 43 34 1 + 29 43 35 0.977321 + 29 43 36 0.711413 + 29 43 37 0.277158 + 29 43 38 0.00330518 + 29 44 28 0.0710269 + 29 44 29 0.294975 + 29 44 30 0.456675 + 29 44 31 0.536741 + 29 44 32 0.536741 + 29 44 33 0.456675 + 29 44 34 0.294975 + 29 44 35 0.0710269 + 30 19 27 0.00768648 + 30 19 28 0.213322 + 30 19 29 0.456675 + 30 19 30 0.616297 + 30 19 31 0.695354 + 30 19 32 0.695354 + 30 19 33 0.616297 + 30 19 34 0.456675 + 30 19 35 0.213322 + 30 19 36 0.00768648 + 30 20 25 0.0387924 + 30 20 26 0.452189 + 30 20 27 0.873392 + 30 20 28 0.999999 + 30 20 29 1 + 30 20 30 1 + 30 20 31 1 + 30 20 32 1 + 30 20 33 1 + 30 20 34 1 + 30 20 35 0.999999 + 30 20 36 0.873392 + 30 20 37 0.452189 + 30 20 38 0.0387924 + 30 21 24 0.264178 + 30 21 25 0.876433 + 30 21 26 1 + 30 21 27 1 + 30 21 28 1 + 30 21 29 1 + 30 21 30 1 + 30 21 31 1 + 30 21 32 1 + 30 21 33 1 + 30 21 34 1 + 30 21 35 1 + 30 21 36 1 + 30 21 37 1 + 30 21 38 0.876433 + 30 21 39 0.264178 + 30 22 22 0.0001391 + 30 22 23 0.440876 + 30 22 24 0.988961 + 30 22 25 1 + 30 22 26 1 + 30 22 27 1 + 30 22 28 1 + 30 22 29 1 + 30 22 30 1 + 30 22 31 1 + 30 22 32 1 + 30 22 33 1 + 30 22 34 1 + 30 22 35 1 + 30 22 36 1 + 30 22 37 1 + 30 22 38 1 + 30 22 39 0.988961 + 30 22 40 0.440876 + 30 22 41 0.0001391 + 30 23 22 0.440876 + 30 23 23 0.998589 + 30 23 24 1 + 30 23 25 1 + 30 23 26 1 + 30 23 27 1 + 30 23 28 1 + 30 23 29 1 + 30 23 30 1 + 30 23 31 1 + 30 23 32 1 + 30 23 33 1 + 30 23 34 1 + 30 23 35 1 + 30 23 36 1 + 30 23 37 1 + 30 23 38 1 + 30 23 39 1 + 30 23 40 0.998589 + 30 23 41 0.440876 + 30 24 21 0.264178 + 30 24 22 0.988961 + 30 24 23 1 + 30 24 24 1 + 30 24 25 1 + 30 24 26 1 + 30 24 27 1 + 30 24 28 1 + 30 24 29 1 + 30 24 30 1 + 30 24 31 1 + 30 24 32 1 + 30 24 33 1 + 30 24 34 1 + 30 24 35 1 + 30 24 36 1 + 30 24 37 1 + 30 24 38 1 + 30 24 39 1 + 30 24 40 1 + 30 24 41 0.988961 + 30 24 42 0.264178 + 30 25 20 0.0387924 + 30 25 21 0.876433 + 30 25 22 1 + 30 25 23 1 + 30 25 24 1 + 30 25 25 1 + 30 25 26 1 + 30 25 27 1 + 30 25 28 1 + 30 25 29 1 + 30 25 30 1 + 30 25 31 1 + 30 25 32 1 + 30 25 33 1 + 30 25 34 1 + 30 25 35 1 + 30 25 36 1 + 30 25 37 1 + 30 25 38 1 + 30 25 39 1 + 30 25 40 1 + 30 25 41 1 + 30 25 42 0.876433 + 30 25 43 0.0387924 + 30 26 20 0.452189 + 30 26 21 1 + 30 26 22 1 + 30 26 23 1 + 30 26 24 1 + 30 26 25 1 + 30 26 26 1 + 30 26 27 1 + 30 26 28 1 + 30 26 29 1 + 30 26 30 1 + 30 26 31 1 + 30 26 32 1 + 30 26 33 1 + 30 26 34 1 + 30 26 35 1 + 30 26 36 1 + 30 26 37 1 + 30 26 38 1 + 30 26 39 1 + 30 26 40 1 + 30 26 41 1 + 30 26 42 1 + 30 26 43 0.452189 + 30 27 19 0.00768648 + 30 27 20 0.873392 + 30 27 21 1 + 30 27 22 1 + 30 27 23 1 + 30 27 24 1 + 30 27 25 1 + 30 27 26 1 + 30 27 27 1 + 30 27 28 1 + 30 27 29 1 + 30 27 30 1 + 30 27 31 1 + 30 27 32 1 + 30 27 33 1 + 30 27 34 1 + 30 27 35 1 + 30 27 36 1 + 30 27 37 1 + 30 27 38 1 + 30 27 39 1 + 30 27 40 1 + 30 27 41 1 + 30 27 42 1 + 30 27 43 0.873392 + 30 27 44 0.00768648 + 30 28 19 0.213322 + 30 28 20 0.999999 + 30 28 21 1 + 30 28 22 1 + 30 28 23 1 + 30 28 24 1 + 30 28 25 1 + 30 28 26 1 + 30 28 27 1 + 30 28 28 1 + 30 28 29 1 + 30 28 30 1 + 30 28 31 1 + 30 28 32 1 + 30 28 33 1 + 30 28 34 1 + 30 28 35 1 + 30 28 36 1 + 30 28 37 1 + 30 28 38 1 + 30 28 39 1 + 30 28 40 1 + 30 28 41 1 + 30 28 42 1 + 30 28 43 0.999999 + 30 28 44 0.213322 + 30 29 19 0.456675 + 30 29 20 1 + 30 29 21 1 + 30 29 22 1 + 30 29 23 1 + 30 29 24 1 + 30 29 25 1 + 30 29 26 1 + 30 29 27 1 + 30 29 28 1 + 30 29 29 1 + 30 29 30 1 + 30 29 31 1 + 30 29 32 1 + 30 29 33 1 + 30 29 34 1 + 30 29 35 1 + 30 29 36 1 + 30 29 37 1 + 30 29 38 1 + 30 29 39 1 + 30 29 40 1 + 30 29 41 1 + 30 29 42 1 + 30 29 43 1 + 30 29 44 0.456675 + 30 30 19 0.616297 + 30 30 20 1 + 30 30 21 1 + 30 30 22 1 + 30 30 23 1 + 30 30 24 1 + 30 30 25 1 + 30 30 26 1 + 30 30 27 1 + 30 30 28 1 + 30 30 29 1 + 30 30 30 1 + 30 30 31 1 + 30 30 32 1 + 30 30 33 1 + 30 30 34 1 + 30 30 35 1 + 30 30 36 1 + 30 30 37 1 + 30 30 38 1 + 30 30 39 1 + 30 30 40 1 + 30 30 41 1 + 30 30 42 1 + 30 30 43 1 + 30 30 44 0.616297 + 30 31 19 0.695354 + 30 31 20 1 + 30 31 21 1 + 30 31 22 1 + 30 31 23 1 + 30 31 24 1 + 30 31 25 1 + 30 31 26 1 + 30 31 27 1 + 30 31 28 1 + 30 31 29 1 + 30 31 30 1 + 30 31 31 1 + 30 31 32 1 + 30 31 33 1 + 30 31 34 1 + 30 31 35 1 + 30 31 36 1 + 30 31 37 1 + 30 31 38 1 + 30 31 39 1 + 30 31 40 1 + 30 31 41 1 + 30 31 42 1 + 30 31 43 1 + 30 31 44 0.695354 + 30 32 19 0.695354 + 30 32 20 1 + 30 32 21 1 + 30 32 22 1 + 30 32 23 1 + 30 32 24 1 + 30 32 25 1 + 30 32 26 1 + 30 32 27 1 + 30 32 28 1 + 30 32 29 1 + 30 32 30 1 + 30 32 31 1 + 30 32 32 1 + 30 32 33 1 + 30 32 34 1 + 30 32 35 1 + 30 32 36 1 + 30 32 37 1 + 30 32 38 1 + 30 32 39 1 + 30 32 40 1 + 30 32 41 1 + 30 32 42 1 + 30 32 43 1 + 30 32 44 0.695354 + 30 33 19 0.616297 + 30 33 20 1 + 30 33 21 1 + 30 33 22 1 + 30 33 23 1 + 30 33 24 1 + 30 33 25 1 + 30 33 26 1 + 30 33 27 1 + 30 33 28 1 + 30 33 29 1 + 30 33 30 1 + 30 33 31 1 + 30 33 32 1 + 30 33 33 1 + 30 33 34 1 + 30 33 35 1 + 30 33 36 1 + 30 33 37 1 + 30 33 38 1 + 30 33 39 1 + 30 33 40 1 + 30 33 41 1 + 30 33 42 1 + 30 33 43 1 + 30 33 44 0.616297 + 30 34 19 0.456675 + 30 34 20 1 + 30 34 21 1 + 30 34 22 1 + 30 34 23 1 + 30 34 24 1 + 30 34 25 1 + 30 34 26 1 + 30 34 27 1 + 30 34 28 1 + 30 34 29 1 + 30 34 30 1 + 30 34 31 1 + 30 34 32 1 + 30 34 33 1 + 30 34 34 1 + 30 34 35 1 + 30 34 36 1 + 30 34 37 1 + 30 34 38 1 + 30 34 39 1 + 30 34 40 1 + 30 34 41 1 + 30 34 42 1 + 30 34 43 1 + 30 34 44 0.456675 + 30 35 19 0.213322 + 30 35 20 0.999999 + 30 35 21 1 + 30 35 22 1 + 30 35 23 1 + 30 35 24 1 + 30 35 25 1 + 30 35 26 1 + 30 35 27 1 + 30 35 28 1 + 30 35 29 1 + 30 35 30 1 + 30 35 31 1 + 30 35 32 1 + 30 35 33 1 + 30 35 34 1 + 30 35 35 1 + 30 35 36 1 + 30 35 37 1 + 30 35 38 1 + 30 35 39 1 + 30 35 40 1 + 30 35 41 1 + 30 35 42 1 + 30 35 43 0.999999 + 30 35 44 0.213322 + 30 36 19 0.00768648 + 30 36 20 0.873392 + 30 36 21 1 + 30 36 22 1 + 30 36 23 1 + 30 36 24 1 + 30 36 25 1 + 30 36 26 1 + 30 36 27 1 + 30 36 28 1 + 30 36 29 1 + 30 36 30 1 + 30 36 31 1 + 30 36 32 1 + 30 36 33 1 + 30 36 34 1 + 30 36 35 1 + 30 36 36 1 + 30 36 37 1 + 30 36 38 1 + 30 36 39 1 + 30 36 40 1 + 30 36 41 1 + 30 36 42 1 + 30 36 43 0.873392 + 30 36 44 0.00768648 + 30 37 20 0.452189 + 30 37 21 1 + 30 37 22 1 + 30 37 23 1 + 30 37 24 1 + 30 37 25 1 + 30 37 26 1 + 30 37 27 1 + 30 37 28 1 + 30 37 29 1 + 30 37 30 1 + 30 37 31 1 + 30 37 32 1 + 30 37 33 1 + 30 37 34 1 + 30 37 35 1 + 30 37 36 1 + 30 37 37 1 + 30 37 38 1 + 30 37 39 1 + 30 37 40 1 + 30 37 41 1 + 30 37 42 1 + 30 37 43 0.452189 + 30 38 20 0.0387924 + 30 38 21 0.876433 + 30 38 22 1 + 30 38 23 1 + 30 38 24 1 + 30 38 25 1 + 30 38 26 1 + 30 38 27 1 + 30 38 28 1 + 30 38 29 1 + 30 38 30 1 + 30 38 31 1 + 30 38 32 1 + 30 38 33 1 + 30 38 34 1 + 30 38 35 1 + 30 38 36 1 + 30 38 37 1 + 30 38 38 1 + 30 38 39 1 + 30 38 40 1 + 30 38 41 1 + 30 38 42 0.876433 + 30 38 43 0.0387924 + 30 39 21 0.264178 + 30 39 22 0.988961 + 30 39 23 1 + 30 39 24 1 + 30 39 25 1 + 30 39 26 1 + 30 39 27 1 + 30 39 28 1 + 30 39 29 1 + 30 39 30 1 + 30 39 31 1 + 30 39 32 1 + 30 39 33 1 + 30 39 34 1 + 30 39 35 1 + 30 39 36 1 + 30 39 37 1 + 30 39 38 1 + 30 39 39 1 + 30 39 40 1 + 30 39 41 0.988961 + 30 39 42 0.264178 + 30 40 22 0.440876 + 30 40 23 0.998589 + 30 40 24 1 + 30 40 25 1 + 30 40 26 1 + 30 40 27 1 + 30 40 28 1 + 30 40 29 1 + 30 40 30 1 + 30 40 31 1 + 30 40 32 1 + 30 40 33 1 + 30 40 34 1 + 30 40 35 1 + 30 40 36 1 + 30 40 37 1 + 30 40 38 1 + 30 40 39 1 + 30 40 40 0.998589 + 30 40 41 0.440876 + 30 41 22 0.0001391 + 30 41 23 0.440876 + 30 41 24 0.988961 + 30 41 25 1 + 30 41 26 1 + 30 41 27 1 + 30 41 28 1 + 30 41 29 1 + 30 41 30 1 + 30 41 31 1 + 30 41 32 1 + 30 41 33 1 + 30 41 34 1 + 30 41 35 1 + 30 41 36 1 + 30 41 37 1 + 30 41 38 1 + 30 41 39 0.988961 + 30 41 40 0.440876 + 30 41 41 0.0001391 + 30 42 24 0.264178 + 30 42 25 0.876433 + 30 42 26 1 + 30 42 27 1 + 30 42 28 1 + 30 42 29 1 + 30 42 30 1 + 30 42 31 1 + 30 42 32 1 + 30 42 33 1 + 30 42 34 1 + 30 42 35 1 + 30 42 36 1 + 30 42 37 1 + 30 42 38 0.876433 + 30 42 39 0.264178 + 30 43 25 0.0387924 + 30 43 26 0.452189 + 30 43 27 0.873392 + 30 43 28 0.999999 + 30 43 29 1 + 30 43 30 1 + 30 43 31 1 + 30 43 32 1 + 30 43 33 1 + 30 43 34 1 + 30 43 35 0.999999 + 30 43 36 0.873392 + 30 43 37 0.452189 + 30 43 38 0.0387924 + 30 44 27 0.00768648 + 30 44 28 0.213322 + 30 44 29 0.456675 + 30 44 30 0.616297 + 30 44 31 0.695354 + 30 44 32 0.695354 + 30 44 33 0.616297 + 30 44 34 0.456675 + 30 44 35 0.213322 + 30 44 36 0.00768648 + 31 19 27 0.0310217 + 31 19 28 0.294975 + 31 19 29 0.536741 + 31 19 30 0.695354 + 31 19 31 0.773921 + 31 19 32 0.773921 + 31 19 33 0.695354 + 31 19 34 0.536741 + 31 19 35 0.294975 + 31 19 36 0.0310217 + 31 20 25 0.0773797 + 31 20 26 0.539246 + 31 20 27 0.933984 + 31 20 28 1 + 31 20 29 1 + 31 20 30 1 + 31 20 31 1 + 31 20 32 1 + 31 20 33 1 + 31 20 34 1 + 31 20 35 1 + 31 20 36 0.933984 + 31 20 37 0.539246 + 31 20 38 0.0773797 + 31 21 24 0.350849 + 31 21 25 0.929166 + 31 21 26 1 + 31 21 27 1 + 31 21 28 1 + 31 21 29 1 + 31 21 30 1 + 31 21 31 1 + 31 21 32 1 + 31 21 33 1 + 31 21 34 1 + 31 21 35 1 + 31 21 36 1 + 31 21 37 1 + 31 21 38 0.929166 + 31 21 39 0.350849 + 31 22 22 0.00361638 + 31 22 23 0.544992 + 31 22 24 0.999479 + 31 22 25 1 + 31 22 26 1 + 31 22 27 1 + 31 22 28 1 + 31 22 29 1 + 31 22 30 1 + 31 22 31 1 + 31 22 32 1 + 31 22 33 1 + 31 22 34 1 + 31 22 35 1 + 31 22 36 1 + 31 22 37 1 + 31 22 38 1 + 31 22 39 0.999479 + 31 22 40 0.544992 + 31 22 41 0.00361638 + 31 23 22 0.544992 + 31 23 23 1 + 31 23 24 1 + 31 23 25 1 + 31 23 26 1 + 31 23 27 1 + 31 23 28 1 + 31 23 29 1 + 31 23 30 1 + 31 23 31 1 + 31 23 32 1 + 31 23 33 1 + 31 23 34 1 + 31 23 35 1 + 31 23 36 1 + 31 23 37 1 + 31 23 38 1 + 31 23 39 1 + 31 23 40 1 + 31 23 41 0.544992 + 31 24 21 0.350849 + 31 24 22 0.999479 + 31 24 23 1 + 31 24 24 1 + 31 24 25 1 + 31 24 26 1 + 31 24 27 1 + 31 24 28 1 + 31 24 29 1 + 31 24 30 1 + 31 24 31 1 + 31 24 32 1 + 31 24 33 1 + 31 24 34 1 + 31 24 35 1 + 31 24 36 1 + 31 24 37 1 + 31 24 38 1 + 31 24 39 1 + 31 24 40 1 + 31 24 41 0.999479 + 31 24 42 0.350849 + 31 25 20 0.0773797 + 31 25 21 0.929166 + 31 25 22 1 + 31 25 23 1 + 31 25 24 1 + 31 25 25 1 + 31 25 26 1 + 31 25 27 1 + 31 25 28 1 + 31 25 29 1 + 31 25 30 1 + 31 25 31 1 + 31 25 32 1 + 31 25 33 1 + 31 25 34 1 + 31 25 35 1 + 31 25 36 1 + 31 25 37 1 + 31 25 38 1 + 31 25 39 1 + 31 25 40 1 + 31 25 41 1 + 31 25 42 0.929166 + 31 25 43 0.0773797 + 31 26 20 0.539246 + 31 26 21 1 + 31 26 22 1 + 31 26 23 1 + 31 26 24 1 + 31 26 25 1 + 31 26 26 1 + 31 26 27 1 + 31 26 28 1 + 31 26 29 1 + 31 26 30 1 + 31 26 31 1 + 31 26 32 1 + 31 26 33 1 + 31 26 34 1 + 31 26 35 1 + 31 26 36 1 + 31 26 37 1 + 31 26 38 1 + 31 26 39 1 + 31 26 40 1 + 31 26 41 1 + 31 26 42 1 + 31 26 43 0.539246 + 31 27 19 0.0310217 + 31 27 20 0.933984 + 31 27 21 1 + 31 27 22 1 + 31 27 23 1 + 31 27 24 1 + 31 27 25 1 + 31 27 26 1 + 31 27 27 1 + 31 27 28 1 + 31 27 29 1 + 31 27 30 1 + 31 27 31 1 + 31 27 32 1 + 31 27 33 1 + 31 27 34 1 + 31 27 35 1 + 31 27 36 1 + 31 27 37 1 + 31 27 38 1 + 31 27 39 1 + 31 27 40 1 + 31 27 41 1 + 31 27 42 1 + 31 27 43 0.933984 + 31 27 44 0.0310217 + 31 28 19 0.294975 + 31 28 20 1 + 31 28 21 1 + 31 28 22 1 + 31 28 23 1 + 31 28 24 1 + 31 28 25 1 + 31 28 26 1 + 31 28 27 1 + 31 28 28 1 + 31 28 29 1 + 31 28 30 1 + 31 28 31 1 + 31 28 32 1 + 31 28 33 1 + 31 28 34 1 + 31 28 35 1 + 31 28 36 1 + 31 28 37 1 + 31 28 38 1 + 31 28 39 1 + 31 28 40 1 + 31 28 41 1 + 31 28 42 1 + 31 28 43 1 + 31 28 44 0.294975 + 31 29 19 0.536741 + 31 29 20 1 + 31 29 21 1 + 31 29 22 1 + 31 29 23 1 + 31 29 24 1 + 31 29 25 1 + 31 29 26 1 + 31 29 27 1 + 31 29 28 1 + 31 29 29 1 + 31 29 30 1 + 31 29 31 1 + 31 29 32 1 + 31 29 33 1 + 31 29 34 1 + 31 29 35 1 + 31 29 36 1 + 31 29 37 1 + 31 29 38 1 + 31 29 39 1 + 31 29 40 1 + 31 29 41 1 + 31 29 42 1 + 31 29 43 1 + 31 29 44 0.536741 + 31 30 19 0.695354 + 31 30 20 1 + 31 30 21 1 + 31 30 22 1 + 31 30 23 1 + 31 30 24 1 + 31 30 25 1 + 31 30 26 1 + 31 30 27 1 + 31 30 28 1 + 31 30 29 1 + 31 30 30 1 + 31 30 31 1 + 31 30 32 1 + 31 30 33 1 + 31 30 34 1 + 31 30 35 1 + 31 30 36 1 + 31 30 37 1 + 31 30 38 1 + 31 30 39 1 + 31 30 40 1 + 31 30 41 1 + 31 30 42 1 + 31 30 43 1 + 31 30 44 0.695354 + 31 31 19 0.773921 + 31 31 20 1 + 31 31 21 1 + 31 31 22 1 + 31 31 23 1 + 31 31 24 1 + 31 31 25 1 + 31 31 26 1 + 31 31 27 1 + 31 31 28 1 + 31 31 29 1 + 31 31 30 1 + 31 31 31 1 + 31 31 32 1 + 31 31 33 1 + 31 31 34 1 + 31 31 35 1 + 31 31 36 1 + 31 31 37 1 + 31 31 38 1 + 31 31 39 1 + 31 31 40 1 + 31 31 41 1 + 31 31 42 1 + 31 31 43 1 + 31 31 44 0.773921 + 31 32 19 0.773921 + 31 32 20 1 + 31 32 21 1 + 31 32 22 1 + 31 32 23 1 + 31 32 24 1 + 31 32 25 1 + 31 32 26 1 + 31 32 27 1 + 31 32 28 1 + 31 32 29 1 + 31 32 30 1 + 31 32 31 1 + 31 32 32 1 + 31 32 33 1 + 31 32 34 1 + 31 32 35 1 + 31 32 36 1 + 31 32 37 1 + 31 32 38 1 + 31 32 39 1 + 31 32 40 1 + 31 32 41 1 + 31 32 42 1 + 31 32 43 1 + 31 32 44 0.773921 + 31 33 19 0.695354 + 31 33 20 1 + 31 33 21 1 + 31 33 22 1 + 31 33 23 1 + 31 33 24 1 + 31 33 25 1 + 31 33 26 1 + 31 33 27 1 + 31 33 28 1 + 31 33 29 1 + 31 33 30 1 + 31 33 31 1 + 31 33 32 1 + 31 33 33 1 + 31 33 34 1 + 31 33 35 1 + 31 33 36 1 + 31 33 37 1 + 31 33 38 1 + 31 33 39 1 + 31 33 40 1 + 31 33 41 1 + 31 33 42 1 + 31 33 43 1 + 31 33 44 0.695354 + 31 34 19 0.536741 + 31 34 20 1 + 31 34 21 1 + 31 34 22 1 + 31 34 23 1 + 31 34 24 1 + 31 34 25 1 + 31 34 26 1 + 31 34 27 1 + 31 34 28 1 + 31 34 29 1 + 31 34 30 1 + 31 34 31 1 + 31 34 32 1 + 31 34 33 1 + 31 34 34 1 + 31 34 35 1 + 31 34 36 1 + 31 34 37 1 + 31 34 38 1 + 31 34 39 1 + 31 34 40 1 + 31 34 41 1 + 31 34 42 1 + 31 34 43 1 + 31 34 44 0.536741 + 31 35 19 0.294975 + 31 35 20 1 + 31 35 21 1 + 31 35 22 1 + 31 35 23 1 + 31 35 24 1 + 31 35 25 1 + 31 35 26 1 + 31 35 27 1 + 31 35 28 1 + 31 35 29 1 + 31 35 30 1 + 31 35 31 1 + 31 35 32 1 + 31 35 33 1 + 31 35 34 1 + 31 35 35 1 + 31 35 36 1 + 31 35 37 1 + 31 35 38 1 + 31 35 39 1 + 31 35 40 1 + 31 35 41 1 + 31 35 42 1 + 31 35 43 1 + 31 35 44 0.294975 + 31 36 19 0.0310217 + 31 36 20 0.933984 + 31 36 21 1 + 31 36 22 1 + 31 36 23 1 + 31 36 24 1 + 31 36 25 1 + 31 36 26 1 + 31 36 27 1 + 31 36 28 1 + 31 36 29 1 + 31 36 30 1 + 31 36 31 1 + 31 36 32 1 + 31 36 33 1 + 31 36 34 1 + 31 36 35 1 + 31 36 36 1 + 31 36 37 1 + 31 36 38 1 + 31 36 39 1 + 31 36 40 1 + 31 36 41 1 + 31 36 42 1 + 31 36 43 0.933984 + 31 36 44 0.0310217 + 31 37 20 0.539246 + 31 37 21 1 + 31 37 22 1 + 31 37 23 1 + 31 37 24 1 + 31 37 25 1 + 31 37 26 1 + 31 37 27 1 + 31 37 28 1 + 31 37 29 1 + 31 37 30 1 + 31 37 31 1 + 31 37 32 1 + 31 37 33 1 + 31 37 34 1 + 31 37 35 1 + 31 37 36 1 + 31 37 37 1 + 31 37 38 1 + 31 37 39 1 + 31 37 40 1 + 31 37 41 1 + 31 37 42 1 + 31 37 43 0.539246 + 31 38 20 0.0773797 + 31 38 21 0.929166 + 31 38 22 1 + 31 38 23 1 + 31 38 24 1 + 31 38 25 1 + 31 38 26 1 + 31 38 27 1 + 31 38 28 1 + 31 38 29 1 + 31 38 30 1 + 31 38 31 1 + 31 38 32 1 + 31 38 33 1 + 31 38 34 1 + 31 38 35 1 + 31 38 36 1 + 31 38 37 1 + 31 38 38 1 + 31 38 39 1 + 31 38 40 1 + 31 38 41 1 + 31 38 42 0.929166 + 31 38 43 0.0773797 + 31 39 21 0.350849 + 31 39 22 0.999479 + 31 39 23 1 + 31 39 24 1 + 31 39 25 1 + 31 39 26 1 + 31 39 27 1 + 31 39 28 1 + 31 39 29 1 + 31 39 30 1 + 31 39 31 1 + 31 39 32 1 + 31 39 33 1 + 31 39 34 1 + 31 39 35 1 + 31 39 36 1 + 31 39 37 1 + 31 39 38 1 + 31 39 39 1 + 31 39 40 1 + 31 39 41 0.999479 + 31 39 42 0.350849 + 31 40 22 0.544992 + 31 40 23 1 + 31 40 24 1 + 31 40 25 1 + 31 40 26 1 + 31 40 27 1 + 31 40 28 1 + 31 40 29 1 + 31 40 30 1 + 31 40 31 1 + 31 40 32 1 + 31 40 33 1 + 31 40 34 1 + 31 40 35 1 + 31 40 36 1 + 31 40 37 1 + 31 40 38 1 + 31 40 39 1 + 31 40 40 1 + 31 40 41 0.544992 + 31 41 22 0.00361638 + 31 41 23 0.544992 + 31 41 24 0.999479 + 31 41 25 1 + 31 41 26 1 + 31 41 27 1 + 31 41 28 1 + 31 41 29 1 + 31 41 30 1 + 31 41 31 1 + 31 41 32 1 + 31 41 33 1 + 31 41 34 1 + 31 41 35 1 + 31 41 36 1 + 31 41 37 1 + 31 41 38 1 + 31 41 39 0.999479 + 31 41 40 0.544992 + 31 41 41 0.00361638 + 31 42 24 0.350849 + 31 42 25 0.929166 + 31 42 26 1 + 31 42 27 1 + 31 42 28 1 + 31 42 29 1 + 31 42 30 1 + 31 42 31 1 + 31 42 32 1 + 31 42 33 1 + 31 42 34 1 + 31 42 35 1 + 31 42 36 1 + 31 42 37 1 + 31 42 38 0.929166 + 31 42 39 0.350849 + 31 43 25 0.0773797 + 31 43 26 0.539246 + 31 43 27 0.933984 + 31 43 28 1 + 31 43 29 1 + 31 43 30 1 + 31 43 31 1 + 31 43 32 1 + 31 43 33 1 + 31 43 34 1 + 31 43 35 1 + 31 43 36 0.933984 + 31 43 37 0.539246 + 31 43 38 0.0773797 + 31 44 27 0.0310217 + 31 44 28 0.294975 + 31 44 29 0.536741 + 31 44 30 0.695354 + 31 44 31 0.773921 + 31 44 32 0.773921 + 31 44 33 0.695354 + 31 44 34 0.536741 + 31 44 35 0.294975 + 31 44 36 0.0310217 + 32 19 27 0.0310217 + 32 19 28 0.294975 + 32 19 29 0.536741 + 32 19 30 0.695354 + 32 19 31 0.773921 + 32 19 32 0.773921 + 32 19 33 0.695354 + 32 19 34 0.536741 + 32 19 35 0.294975 + 32 19 36 0.0310217 + 32 20 25 0.0773797 + 32 20 26 0.539246 + 32 20 27 0.933984 + 32 20 28 1 + 32 20 29 1 + 32 20 30 1 + 32 20 31 1 + 32 20 32 1 + 32 20 33 1 + 32 20 34 1 + 32 20 35 1 + 32 20 36 0.933984 + 32 20 37 0.539246 + 32 20 38 0.0773797 + 32 21 24 0.350849 + 32 21 25 0.929166 + 32 21 26 1 + 32 21 27 1 + 32 21 28 1 + 32 21 29 1 + 32 21 30 1 + 32 21 31 1 + 32 21 32 1 + 32 21 33 1 + 32 21 34 1 + 32 21 35 1 + 32 21 36 1 + 32 21 37 1 + 32 21 38 0.929166 + 32 21 39 0.350849 + 32 22 22 0.00361638 + 32 22 23 0.544992 + 32 22 24 0.999479 + 32 22 25 1 + 32 22 26 1 + 32 22 27 1 + 32 22 28 1 + 32 22 29 1 + 32 22 30 1 + 32 22 31 1 + 32 22 32 1 + 32 22 33 1 + 32 22 34 1 + 32 22 35 1 + 32 22 36 1 + 32 22 37 1 + 32 22 38 1 + 32 22 39 0.999479 + 32 22 40 0.544992 + 32 22 41 0.00361638 + 32 23 22 0.544992 + 32 23 23 1 + 32 23 24 1 + 32 23 25 1 + 32 23 26 1 + 32 23 27 1 + 32 23 28 1 + 32 23 29 1 + 32 23 30 1 + 32 23 31 1 + 32 23 32 1 + 32 23 33 1 + 32 23 34 1 + 32 23 35 1 + 32 23 36 1 + 32 23 37 1 + 32 23 38 1 + 32 23 39 1 + 32 23 40 1 + 32 23 41 0.544992 + 32 24 21 0.350849 + 32 24 22 0.999479 + 32 24 23 1 + 32 24 24 1 + 32 24 25 1 + 32 24 26 1 + 32 24 27 1 + 32 24 28 1 + 32 24 29 1 + 32 24 30 1 + 32 24 31 1 + 32 24 32 1 + 32 24 33 1 + 32 24 34 1 + 32 24 35 1 + 32 24 36 1 + 32 24 37 1 + 32 24 38 1 + 32 24 39 1 + 32 24 40 1 + 32 24 41 0.999479 + 32 24 42 0.350849 + 32 25 20 0.0773797 + 32 25 21 0.929166 + 32 25 22 1 + 32 25 23 1 + 32 25 24 1 + 32 25 25 1 + 32 25 26 1 + 32 25 27 1 + 32 25 28 1 + 32 25 29 1 + 32 25 30 1 + 32 25 31 1 + 32 25 32 1 + 32 25 33 1 + 32 25 34 1 + 32 25 35 1 + 32 25 36 1 + 32 25 37 1 + 32 25 38 1 + 32 25 39 1 + 32 25 40 1 + 32 25 41 1 + 32 25 42 0.929166 + 32 25 43 0.0773797 + 32 26 20 0.539246 + 32 26 21 1 + 32 26 22 1 + 32 26 23 1 + 32 26 24 1 + 32 26 25 1 + 32 26 26 1 + 32 26 27 1 + 32 26 28 1 + 32 26 29 1 + 32 26 30 1 + 32 26 31 1 + 32 26 32 1 + 32 26 33 1 + 32 26 34 1 + 32 26 35 1 + 32 26 36 1 + 32 26 37 1 + 32 26 38 1 + 32 26 39 1 + 32 26 40 1 + 32 26 41 1 + 32 26 42 1 + 32 26 43 0.539246 + 32 27 19 0.0310217 + 32 27 20 0.933984 + 32 27 21 1 + 32 27 22 1 + 32 27 23 1 + 32 27 24 1 + 32 27 25 1 + 32 27 26 1 + 32 27 27 1 + 32 27 28 1 + 32 27 29 1 + 32 27 30 1 + 32 27 31 1 + 32 27 32 1 + 32 27 33 1 + 32 27 34 1 + 32 27 35 1 + 32 27 36 1 + 32 27 37 1 + 32 27 38 1 + 32 27 39 1 + 32 27 40 1 + 32 27 41 1 + 32 27 42 1 + 32 27 43 0.933984 + 32 27 44 0.0310217 + 32 28 19 0.294975 + 32 28 20 1 + 32 28 21 1 + 32 28 22 1 + 32 28 23 1 + 32 28 24 1 + 32 28 25 1 + 32 28 26 1 + 32 28 27 1 + 32 28 28 1 + 32 28 29 1 + 32 28 30 1 + 32 28 31 1 + 32 28 32 1 + 32 28 33 1 + 32 28 34 1 + 32 28 35 1 + 32 28 36 1 + 32 28 37 1 + 32 28 38 1 + 32 28 39 1 + 32 28 40 1 + 32 28 41 1 + 32 28 42 1 + 32 28 43 1 + 32 28 44 0.294975 + 32 29 19 0.536741 + 32 29 20 1 + 32 29 21 1 + 32 29 22 1 + 32 29 23 1 + 32 29 24 1 + 32 29 25 1 + 32 29 26 1 + 32 29 27 1 + 32 29 28 1 + 32 29 29 1 + 32 29 30 1 + 32 29 31 1 + 32 29 32 1 + 32 29 33 1 + 32 29 34 1 + 32 29 35 1 + 32 29 36 1 + 32 29 37 1 + 32 29 38 1 + 32 29 39 1 + 32 29 40 1 + 32 29 41 1 + 32 29 42 1 + 32 29 43 1 + 32 29 44 0.536741 + 32 30 19 0.695354 + 32 30 20 1 + 32 30 21 1 + 32 30 22 1 + 32 30 23 1 + 32 30 24 1 + 32 30 25 1 + 32 30 26 1 + 32 30 27 1 + 32 30 28 1 + 32 30 29 1 + 32 30 30 1 + 32 30 31 1 + 32 30 32 1 + 32 30 33 1 + 32 30 34 1 + 32 30 35 1 + 32 30 36 1 + 32 30 37 1 + 32 30 38 1 + 32 30 39 1 + 32 30 40 1 + 32 30 41 1 + 32 30 42 1 + 32 30 43 1 + 32 30 44 0.695354 + 32 31 19 0.773921 + 32 31 20 1 + 32 31 21 1 + 32 31 22 1 + 32 31 23 1 + 32 31 24 1 + 32 31 25 1 + 32 31 26 1 + 32 31 27 1 + 32 31 28 1 + 32 31 29 1 + 32 31 30 1 + 32 31 31 1 + 32 31 32 1 + 32 31 33 1 + 32 31 34 1 + 32 31 35 1 + 32 31 36 1 + 32 31 37 1 + 32 31 38 1 + 32 31 39 1 + 32 31 40 1 + 32 31 41 1 + 32 31 42 1 + 32 31 43 1 + 32 31 44 0.773921 + 32 32 19 0.773921 + 32 32 20 1 + 32 32 21 1 + 32 32 22 1 + 32 32 23 1 + 32 32 24 1 + 32 32 25 1 + 32 32 26 1 + 32 32 27 1 + 32 32 28 1 + 32 32 29 1 + 32 32 30 1 + 32 32 31 1 + 32 32 32 1 + 32 32 33 1 + 32 32 34 1 + 32 32 35 1 + 32 32 36 1 + 32 32 37 1 + 32 32 38 1 + 32 32 39 1 + 32 32 40 1 + 32 32 41 1 + 32 32 42 1 + 32 32 43 1 + 32 32 44 0.773921 + 32 33 19 0.695354 + 32 33 20 1 + 32 33 21 1 + 32 33 22 1 + 32 33 23 1 + 32 33 24 1 + 32 33 25 1 + 32 33 26 1 + 32 33 27 1 + 32 33 28 1 + 32 33 29 1 + 32 33 30 1 + 32 33 31 1 + 32 33 32 1 + 32 33 33 1 + 32 33 34 1 + 32 33 35 1 + 32 33 36 1 + 32 33 37 1 + 32 33 38 1 + 32 33 39 1 + 32 33 40 1 + 32 33 41 1 + 32 33 42 1 + 32 33 43 1 + 32 33 44 0.695354 + 32 34 19 0.536741 + 32 34 20 1 + 32 34 21 1 + 32 34 22 1 + 32 34 23 1 + 32 34 24 1 + 32 34 25 1 + 32 34 26 1 + 32 34 27 1 + 32 34 28 1 + 32 34 29 1 + 32 34 30 1 + 32 34 31 1 + 32 34 32 1 + 32 34 33 1 + 32 34 34 1 + 32 34 35 1 + 32 34 36 1 + 32 34 37 1 + 32 34 38 1 + 32 34 39 1 + 32 34 40 1 + 32 34 41 1 + 32 34 42 1 + 32 34 43 1 + 32 34 44 0.536741 + 32 35 19 0.294975 + 32 35 20 1 + 32 35 21 1 + 32 35 22 1 + 32 35 23 1 + 32 35 24 1 + 32 35 25 1 + 32 35 26 1 + 32 35 27 1 + 32 35 28 1 + 32 35 29 1 + 32 35 30 1 + 32 35 31 1 + 32 35 32 1 + 32 35 33 1 + 32 35 34 1 + 32 35 35 1 + 32 35 36 1 + 32 35 37 1 + 32 35 38 1 + 32 35 39 1 + 32 35 40 1 + 32 35 41 1 + 32 35 42 1 + 32 35 43 1 + 32 35 44 0.294975 + 32 36 19 0.0310217 + 32 36 20 0.933984 + 32 36 21 1 + 32 36 22 1 + 32 36 23 1 + 32 36 24 1 + 32 36 25 1 + 32 36 26 1 + 32 36 27 1 + 32 36 28 1 + 32 36 29 1 + 32 36 30 1 + 32 36 31 1 + 32 36 32 1 + 32 36 33 1 + 32 36 34 1 + 32 36 35 1 + 32 36 36 1 + 32 36 37 1 + 32 36 38 1 + 32 36 39 1 + 32 36 40 1 + 32 36 41 1 + 32 36 42 1 + 32 36 43 0.933984 + 32 36 44 0.0310217 + 32 37 20 0.539246 + 32 37 21 1 + 32 37 22 1 + 32 37 23 1 + 32 37 24 1 + 32 37 25 1 + 32 37 26 1 + 32 37 27 1 + 32 37 28 1 + 32 37 29 1 + 32 37 30 1 + 32 37 31 1 + 32 37 32 1 + 32 37 33 1 + 32 37 34 1 + 32 37 35 1 + 32 37 36 1 + 32 37 37 1 + 32 37 38 1 + 32 37 39 1 + 32 37 40 1 + 32 37 41 1 + 32 37 42 1 + 32 37 43 0.539246 + 32 38 20 0.0773797 + 32 38 21 0.929166 + 32 38 22 1 + 32 38 23 1 + 32 38 24 1 + 32 38 25 1 + 32 38 26 1 + 32 38 27 1 + 32 38 28 1 + 32 38 29 1 + 32 38 30 1 + 32 38 31 1 + 32 38 32 1 + 32 38 33 1 + 32 38 34 1 + 32 38 35 1 + 32 38 36 1 + 32 38 37 1 + 32 38 38 1 + 32 38 39 1 + 32 38 40 1 + 32 38 41 1 + 32 38 42 0.929166 + 32 38 43 0.0773797 + 32 39 21 0.350849 + 32 39 22 0.999479 + 32 39 23 1 + 32 39 24 1 + 32 39 25 1 + 32 39 26 1 + 32 39 27 1 + 32 39 28 1 + 32 39 29 1 + 32 39 30 1 + 32 39 31 1 + 32 39 32 1 + 32 39 33 1 + 32 39 34 1 + 32 39 35 1 + 32 39 36 1 + 32 39 37 1 + 32 39 38 1 + 32 39 39 1 + 32 39 40 1 + 32 39 41 0.999479 + 32 39 42 0.350849 + 32 40 22 0.544992 + 32 40 23 1 + 32 40 24 1 + 32 40 25 1 + 32 40 26 1 + 32 40 27 1 + 32 40 28 1 + 32 40 29 1 + 32 40 30 1 + 32 40 31 1 + 32 40 32 1 + 32 40 33 1 + 32 40 34 1 + 32 40 35 1 + 32 40 36 1 + 32 40 37 1 + 32 40 38 1 + 32 40 39 1 + 32 40 40 1 + 32 40 41 0.544992 + 32 41 22 0.00361638 + 32 41 23 0.544992 + 32 41 24 0.999479 + 32 41 25 1 + 32 41 26 1 + 32 41 27 1 + 32 41 28 1 + 32 41 29 1 + 32 41 30 1 + 32 41 31 1 + 32 41 32 1 + 32 41 33 1 + 32 41 34 1 + 32 41 35 1 + 32 41 36 1 + 32 41 37 1 + 32 41 38 1 + 32 41 39 0.999479 + 32 41 40 0.544992 + 32 41 41 0.00361638 + 32 42 24 0.350849 + 32 42 25 0.929166 + 32 42 26 1 + 32 42 27 1 + 32 42 28 1 + 32 42 29 1 + 32 42 30 1 + 32 42 31 1 + 32 42 32 1 + 32 42 33 1 + 32 42 34 1 + 32 42 35 1 + 32 42 36 1 + 32 42 37 1 + 32 42 38 0.929166 + 32 42 39 0.350849 + 32 43 25 0.0773797 + 32 43 26 0.539246 + 32 43 27 0.933984 + 32 43 28 1 + 32 43 29 1 + 32 43 30 1 + 32 43 31 1 + 32 43 32 1 + 32 43 33 1 + 32 43 34 1 + 32 43 35 1 + 32 43 36 0.933984 + 32 43 37 0.539246 + 32 43 38 0.0773797 + 32 44 27 0.0310217 + 32 44 28 0.294975 + 32 44 29 0.536741 + 32 44 30 0.695354 + 32 44 31 0.773921 + 32 44 32 0.773921 + 32 44 33 0.695354 + 32 44 34 0.536741 + 32 44 35 0.294975 + 32 44 36 0.0310217 + 33 19 27 0.00768648 + 33 19 28 0.213322 + 33 19 29 0.456675 + 33 19 30 0.616297 + 33 19 31 0.695354 + 33 19 32 0.695354 + 33 19 33 0.616297 + 33 19 34 0.456675 + 33 19 35 0.213322 + 33 19 36 0.00768648 + 33 20 25 0.0387924 + 33 20 26 0.452189 + 33 20 27 0.873392 + 33 20 28 0.999999 + 33 20 29 1 + 33 20 30 1 + 33 20 31 1 + 33 20 32 1 + 33 20 33 1 + 33 20 34 1 + 33 20 35 0.999999 + 33 20 36 0.873392 + 33 20 37 0.452189 + 33 20 38 0.0387924 + 33 21 24 0.264178 + 33 21 25 0.876433 + 33 21 26 1 + 33 21 27 1 + 33 21 28 1 + 33 21 29 1 + 33 21 30 1 + 33 21 31 1 + 33 21 32 1 + 33 21 33 1 + 33 21 34 1 + 33 21 35 1 + 33 21 36 1 + 33 21 37 1 + 33 21 38 0.876433 + 33 21 39 0.264178 + 33 22 22 0.0001391 + 33 22 23 0.440876 + 33 22 24 0.988961 + 33 22 25 1 + 33 22 26 1 + 33 22 27 1 + 33 22 28 1 + 33 22 29 1 + 33 22 30 1 + 33 22 31 1 + 33 22 32 1 + 33 22 33 1 + 33 22 34 1 + 33 22 35 1 + 33 22 36 1 + 33 22 37 1 + 33 22 38 1 + 33 22 39 0.988961 + 33 22 40 0.440876 + 33 22 41 0.0001391 + 33 23 22 0.440876 + 33 23 23 0.998589 + 33 23 24 1 + 33 23 25 1 + 33 23 26 1 + 33 23 27 1 + 33 23 28 1 + 33 23 29 1 + 33 23 30 1 + 33 23 31 1 + 33 23 32 1 + 33 23 33 1 + 33 23 34 1 + 33 23 35 1 + 33 23 36 1 + 33 23 37 1 + 33 23 38 1 + 33 23 39 1 + 33 23 40 0.998589 + 33 23 41 0.440876 + 33 24 21 0.264178 + 33 24 22 0.988961 + 33 24 23 1 + 33 24 24 1 + 33 24 25 1 + 33 24 26 1 + 33 24 27 1 + 33 24 28 1 + 33 24 29 1 + 33 24 30 1 + 33 24 31 1 + 33 24 32 1 + 33 24 33 1 + 33 24 34 1 + 33 24 35 1 + 33 24 36 1 + 33 24 37 1 + 33 24 38 1 + 33 24 39 1 + 33 24 40 1 + 33 24 41 0.988961 + 33 24 42 0.264178 + 33 25 20 0.0387924 + 33 25 21 0.876433 + 33 25 22 1 + 33 25 23 1 + 33 25 24 1 + 33 25 25 1 + 33 25 26 1 + 33 25 27 1 + 33 25 28 1 + 33 25 29 1 + 33 25 30 1 + 33 25 31 1 + 33 25 32 1 + 33 25 33 1 + 33 25 34 1 + 33 25 35 1 + 33 25 36 1 + 33 25 37 1 + 33 25 38 1 + 33 25 39 1 + 33 25 40 1 + 33 25 41 1 + 33 25 42 0.876433 + 33 25 43 0.0387924 + 33 26 20 0.452189 + 33 26 21 1 + 33 26 22 1 + 33 26 23 1 + 33 26 24 1 + 33 26 25 1 + 33 26 26 1 + 33 26 27 1 + 33 26 28 1 + 33 26 29 1 + 33 26 30 1 + 33 26 31 1 + 33 26 32 1 + 33 26 33 1 + 33 26 34 1 + 33 26 35 1 + 33 26 36 1 + 33 26 37 1 + 33 26 38 1 + 33 26 39 1 + 33 26 40 1 + 33 26 41 1 + 33 26 42 1 + 33 26 43 0.452189 + 33 27 19 0.00768648 + 33 27 20 0.873392 + 33 27 21 1 + 33 27 22 1 + 33 27 23 1 + 33 27 24 1 + 33 27 25 1 + 33 27 26 1 + 33 27 27 1 + 33 27 28 1 + 33 27 29 1 + 33 27 30 1 + 33 27 31 1 + 33 27 32 1 + 33 27 33 1 + 33 27 34 1 + 33 27 35 1 + 33 27 36 1 + 33 27 37 1 + 33 27 38 1 + 33 27 39 1 + 33 27 40 1 + 33 27 41 1 + 33 27 42 1 + 33 27 43 0.873392 + 33 27 44 0.00768648 + 33 28 19 0.213322 + 33 28 20 0.999999 + 33 28 21 1 + 33 28 22 1 + 33 28 23 1 + 33 28 24 1 + 33 28 25 1 + 33 28 26 1 + 33 28 27 1 + 33 28 28 1 + 33 28 29 1 + 33 28 30 1 + 33 28 31 1 + 33 28 32 1 + 33 28 33 1 + 33 28 34 1 + 33 28 35 1 + 33 28 36 1 + 33 28 37 1 + 33 28 38 1 + 33 28 39 1 + 33 28 40 1 + 33 28 41 1 + 33 28 42 1 + 33 28 43 0.999999 + 33 28 44 0.213322 + 33 29 19 0.456675 + 33 29 20 1 + 33 29 21 1 + 33 29 22 1 + 33 29 23 1 + 33 29 24 1 + 33 29 25 1 + 33 29 26 1 + 33 29 27 1 + 33 29 28 1 + 33 29 29 1 + 33 29 30 1 + 33 29 31 1 + 33 29 32 1 + 33 29 33 1 + 33 29 34 1 + 33 29 35 1 + 33 29 36 1 + 33 29 37 1 + 33 29 38 1 + 33 29 39 1 + 33 29 40 1 + 33 29 41 1 + 33 29 42 1 + 33 29 43 1 + 33 29 44 0.456675 + 33 30 19 0.616297 + 33 30 20 1 + 33 30 21 1 + 33 30 22 1 + 33 30 23 1 + 33 30 24 1 + 33 30 25 1 + 33 30 26 1 + 33 30 27 1 + 33 30 28 1 + 33 30 29 1 + 33 30 30 1 + 33 30 31 1 + 33 30 32 1 + 33 30 33 1 + 33 30 34 1 + 33 30 35 1 + 33 30 36 1 + 33 30 37 1 + 33 30 38 1 + 33 30 39 1 + 33 30 40 1 + 33 30 41 1 + 33 30 42 1 + 33 30 43 1 + 33 30 44 0.616297 + 33 31 19 0.695354 + 33 31 20 1 + 33 31 21 1 + 33 31 22 1 + 33 31 23 1 + 33 31 24 1 + 33 31 25 1 + 33 31 26 1 + 33 31 27 1 + 33 31 28 1 + 33 31 29 1 + 33 31 30 1 + 33 31 31 1 + 33 31 32 1 + 33 31 33 1 + 33 31 34 1 + 33 31 35 1 + 33 31 36 1 + 33 31 37 1 + 33 31 38 1 + 33 31 39 1 + 33 31 40 1 + 33 31 41 1 + 33 31 42 1 + 33 31 43 1 + 33 31 44 0.695354 + 33 32 19 0.695354 + 33 32 20 1 + 33 32 21 1 + 33 32 22 1 + 33 32 23 1 + 33 32 24 1 + 33 32 25 1 + 33 32 26 1 + 33 32 27 1 + 33 32 28 1 + 33 32 29 1 + 33 32 30 1 + 33 32 31 1 + 33 32 32 1 + 33 32 33 1 + 33 32 34 1 + 33 32 35 1 + 33 32 36 1 + 33 32 37 1 + 33 32 38 1 + 33 32 39 1 + 33 32 40 1 + 33 32 41 1 + 33 32 42 1 + 33 32 43 1 + 33 32 44 0.695354 + 33 33 19 0.616297 + 33 33 20 1 + 33 33 21 1 + 33 33 22 1 + 33 33 23 1 + 33 33 24 1 + 33 33 25 1 + 33 33 26 1 + 33 33 27 1 + 33 33 28 1 + 33 33 29 1 + 33 33 30 1 + 33 33 31 1 + 33 33 32 1 + 33 33 33 1 + 33 33 34 1 + 33 33 35 1 + 33 33 36 1 + 33 33 37 1 + 33 33 38 1 + 33 33 39 1 + 33 33 40 1 + 33 33 41 1 + 33 33 42 1 + 33 33 43 1 + 33 33 44 0.616297 + 33 34 19 0.456675 + 33 34 20 1 + 33 34 21 1 + 33 34 22 1 + 33 34 23 1 + 33 34 24 1 + 33 34 25 1 + 33 34 26 1 + 33 34 27 1 + 33 34 28 1 + 33 34 29 1 + 33 34 30 1 + 33 34 31 1 + 33 34 32 1 + 33 34 33 1 + 33 34 34 1 + 33 34 35 1 + 33 34 36 1 + 33 34 37 1 + 33 34 38 1 + 33 34 39 1 + 33 34 40 1 + 33 34 41 1 + 33 34 42 1 + 33 34 43 1 + 33 34 44 0.456675 + 33 35 19 0.213322 + 33 35 20 0.999999 + 33 35 21 1 + 33 35 22 1 + 33 35 23 1 + 33 35 24 1 + 33 35 25 1 + 33 35 26 1 + 33 35 27 1 + 33 35 28 1 + 33 35 29 1 + 33 35 30 1 + 33 35 31 1 + 33 35 32 1 + 33 35 33 1 + 33 35 34 1 + 33 35 35 1 + 33 35 36 1 + 33 35 37 1 + 33 35 38 1 + 33 35 39 1 + 33 35 40 1 + 33 35 41 1 + 33 35 42 1 + 33 35 43 0.999999 + 33 35 44 0.213322 + 33 36 19 0.00768648 + 33 36 20 0.873392 + 33 36 21 1 + 33 36 22 1 + 33 36 23 1 + 33 36 24 1 + 33 36 25 1 + 33 36 26 1 + 33 36 27 1 + 33 36 28 1 + 33 36 29 1 + 33 36 30 1 + 33 36 31 1 + 33 36 32 1 + 33 36 33 1 + 33 36 34 1 + 33 36 35 1 + 33 36 36 1 + 33 36 37 1 + 33 36 38 1 + 33 36 39 1 + 33 36 40 1 + 33 36 41 1 + 33 36 42 1 + 33 36 43 0.873392 + 33 36 44 0.00768648 + 33 37 20 0.452189 + 33 37 21 1 + 33 37 22 1 + 33 37 23 1 + 33 37 24 1 + 33 37 25 1 + 33 37 26 1 + 33 37 27 1 + 33 37 28 1 + 33 37 29 1 + 33 37 30 1 + 33 37 31 1 + 33 37 32 1 + 33 37 33 1 + 33 37 34 1 + 33 37 35 1 + 33 37 36 1 + 33 37 37 1 + 33 37 38 1 + 33 37 39 1 + 33 37 40 1 + 33 37 41 1 + 33 37 42 1 + 33 37 43 0.452189 + 33 38 20 0.0387924 + 33 38 21 0.876433 + 33 38 22 1 + 33 38 23 1 + 33 38 24 1 + 33 38 25 1 + 33 38 26 1 + 33 38 27 1 + 33 38 28 1 + 33 38 29 1 + 33 38 30 1 + 33 38 31 1 + 33 38 32 1 + 33 38 33 1 + 33 38 34 1 + 33 38 35 1 + 33 38 36 1 + 33 38 37 1 + 33 38 38 1 + 33 38 39 1 + 33 38 40 1 + 33 38 41 1 + 33 38 42 0.876433 + 33 38 43 0.0387924 + 33 39 21 0.264178 + 33 39 22 0.988961 + 33 39 23 1 + 33 39 24 1 + 33 39 25 1 + 33 39 26 1 + 33 39 27 1 + 33 39 28 1 + 33 39 29 1 + 33 39 30 1 + 33 39 31 1 + 33 39 32 1 + 33 39 33 1 + 33 39 34 1 + 33 39 35 1 + 33 39 36 1 + 33 39 37 1 + 33 39 38 1 + 33 39 39 1 + 33 39 40 1 + 33 39 41 0.988961 + 33 39 42 0.264178 + 33 40 22 0.440876 + 33 40 23 0.998589 + 33 40 24 1 + 33 40 25 1 + 33 40 26 1 + 33 40 27 1 + 33 40 28 1 + 33 40 29 1 + 33 40 30 1 + 33 40 31 1 + 33 40 32 1 + 33 40 33 1 + 33 40 34 1 + 33 40 35 1 + 33 40 36 1 + 33 40 37 1 + 33 40 38 1 + 33 40 39 1 + 33 40 40 0.998589 + 33 40 41 0.440876 + 33 41 22 0.0001391 + 33 41 23 0.440876 + 33 41 24 0.988961 + 33 41 25 1 + 33 41 26 1 + 33 41 27 1 + 33 41 28 1 + 33 41 29 1 + 33 41 30 1 + 33 41 31 1 + 33 41 32 1 + 33 41 33 1 + 33 41 34 1 + 33 41 35 1 + 33 41 36 1 + 33 41 37 1 + 33 41 38 1 + 33 41 39 0.988961 + 33 41 40 0.440876 + 33 41 41 0.0001391 + 33 42 24 0.264178 + 33 42 25 0.876433 + 33 42 26 1 + 33 42 27 1 + 33 42 28 1 + 33 42 29 1 + 33 42 30 1 + 33 42 31 1 + 33 42 32 1 + 33 42 33 1 + 33 42 34 1 + 33 42 35 1 + 33 42 36 1 + 33 42 37 1 + 33 42 38 0.876433 + 33 42 39 0.264178 + 33 43 25 0.0387924 + 33 43 26 0.452189 + 33 43 27 0.873392 + 33 43 28 0.999999 + 33 43 29 1 + 33 43 30 1 + 33 43 31 1 + 33 43 32 1 + 33 43 33 1 + 33 43 34 1 + 33 43 35 0.999999 + 33 43 36 0.873392 + 33 43 37 0.452189 + 33 43 38 0.0387924 + 33 44 27 0.00768648 + 33 44 28 0.213322 + 33 44 29 0.456675 + 33 44 30 0.616297 + 33 44 31 0.695354 + 33 44 32 0.695354 + 33 44 33 0.616297 + 33 44 34 0.456675 + 33 44 35 0.213322 + 33 44 36 0.00768648 + 34 19 28 0.0710269 + 34 19 29 0.294975 + 34 19 30 0.456675 + 34 19 31 0.536741 + 34 19 32 0.536741 + 34 19 33 0.456675 + 34 19 34 0.294975 + 34 19 35 0.0710269 + 34 20 25 0.00330518 + 34 20 26 0.277158 + 34 20 27 0.711413 + 34 20 28 0.977321 + 34 20 29 1 + 34 20 30 1 + 34 20 31 1 + 34 20 32 1 + 34 20 33 1 + 34 20 34 1 + 34 20 35 0.977321 + 34 20 36 0.711413 + 34 20 37 0.277158 + 34 20 38 0.00330518 + 34 21 24 0.12727 + 34 21 25 0.72694 + 34 21 26 0.998895 + 34 21 27 1 + 34 21 28 1 + 34 21 29 1 + 34 21 30 1 + 34 21 31 1 + 34 21 32 1 + 34 21 33 1 + 34 21 34 1 + 34 21 35 1 + 34 21 36 1 + 34 21 37 0.998895 + 34 21 38 0.72694 + 34 21 39 0.12727 + 34 22 23 0.259926 + 34 22 24 0.928659 + 34 22 25 1 + 34 22 26 1 + 34 22 27 1 + 34 22 28 1 + 34 22 29 1 + 34 22 30 1 + 34 22 31 1 + 34 22 32 1 + 34 22 33 1 + 34 22 34 1 + 34 22 35 1 + 34 22 36 1 + 34 22 37 1 + 34 22 38 1 + 34 22 39 0.928659 + 34 22 40 0.259926 + 34 23 22 0.259926 + 34 23 23 0.964837 + 34 23 24 1 + 34 23 25 1 + 34 23 26 1 + 34 23 27 1 + 34 23 28 1 + 34 23 29 1 + 34 23 30 1 + 34 23 31 1 + 34 23 32 1 + 34 23 33 1 + 34 23 34 1 + 34 23 35 1 + 34 23 36 1 + 34 23 37 1 + 34 23 38 1 + 34 23 39 1 + 34 23 40 0.964837 + 34 23 41 0.259926 + 34 24 21 0.12727 + 34 24 22 0.928659 + 34 24 23 1 + 34 24 24 1 + 34 24 25 1 + 34 24 26 1 + 34 24 27 1 + 34 24 28 1 + 34 24 29 1 + 34 24 30 1 + 34 24 31 1 + 34 24 32 1 + 34 24 33 1 + 34 24 34 1 + 34 24 35 1 + 34 24 36 1 + 34 24 37 1 + 34 24 38 1 + 34 24 39 1 + 34 24 40 1 + 34 24 41 0.928659 + 34 24 42 0.12727 + 34 25 20 0.00330518 + 34 25 21 0.72694 + 34 25 22 1 + 34 25 23 1 + 34 25 24 1 + 34 25 25 1 + 34 25 26 1 + 34 25 27 1 + 34 25 28 1 + 34 25 29 1 + 34 25 30 1 + 34 25 31 1 + 34 25 32 1 + 34 25 33 1 + 34 25 34 1 + 34 25 35 1 + 34 25 36 1 + 34 25 37 1 + 34 25 38 1 + 34 25 39 1 + 34 25 40 1 + 34 25 41 1 + 34 25 42 0.72694 + 34 25 43 0.00330518 + 34 26 20 0.277158 + 34 26 21 0.998895 + 34 26 22 1 + 34 26 23 1 + 34 26 24 1 + 34 26 25 1 + 34 26 26 1 + 34 26 27 1 + 34 26 28 1 + 34 26 29 1 + 34 26 30 1 + 34 26 31 1 + 34 26 32 1 + 34 26 33 1 + 34 26 34 1 + 34 26 35 1 + 34 26 36 1 + 34 26 37 1 + 34 26 38 1 + 34 26 39 1 + 34 26 40 1 + 34 26 41 1 + 34 26 42 0.998895 + 34 26 43 0.277158 + 34 27 20 0.711413 + 34 27 21 1 + 34 27 22 1 + 34 27 23 1 + 34 27 24 1 + 34 27 25 1 + 34 27 26 1 + 34 27 27 1 + 34 27 28 1 + 34 27 29 1 + 34 27 30 1 + 34 27 31 1 + 34 27 32 1 + 34 27 33 1 + 34 27 34 1 + 34 27 35 1 + 34 27 36 1 + 34 27 37 1 + 34 27 38 1 + 34 27 39 1 + 34 27 40 1 + 34 27 41 1 + 34 27 42 1 + 34 27 43 0.711413 + 34 28 19 0.0710269 + 34 28 20 0.977321 + 34 28 21 1 + 34 28 22 1 + 34 28 23 1 + 34 28 24 1 + 34 28 25 1 + 34 28 26 1 + 34 28 27 1 + 34 28 28 1 + 34 28 29 1 + 34 28 30 1 + 34 28 31 1 + 34 28 32 1 + 34 28 33 1 + 34 28 34 1 + 34 28 35 1 + 34 28 36 1 + 34 28 37 1 + 34 28 38 1 + 34 28 39 1 + 34 28 40 1 + 34 28 41 1 + 34 28 42 1 + 34 28 43 0.977321 + 34 28 44 0.0710269 + 34 29 19 0.294975 + 34 29 20 1 + 34 29 21 1 + 34 29 22 1 + 34 29 23 1 + 34 29 24 1 + 34 29 25 1 + 34 29 26 1 + 34 29 27 1 + 34 29 28 1 + 34 29 29 1 + 34 29 30 1 + 34 29 31 1 + 34 29 32 1 + 34 29 33 1 + 34 29 34 1 + 34 29 35 1 + 34 29 36 1 + 34 29 37 1 + 34 29 38 1 + 34 29 39 1 + 34 29 40 1 + 34 29 41 1 + 34 29 42 1 + 34 29 43 1 + 34 29 44 0.294975 + 34 30 19 0.456675 + 34 30 20 1 + 34 30 21 1 + 34 30 22 1 + 34 30 23 1 + 34 30 24 1 + 34 30 25 1 + 34 30 26 1 + 34 30 27 1 + 34 30 28 1 + 34 30 29 1 + 34 30 30 1 + 34 30 31 1 + 34 30 32 1 + 34 30 33 1 + 34 30 34 1 + 34 30 35 1 + 34 30 36 1 + 34 30 37 1 + 34 30 38 1 + 34 30 39 1 + 34 30 40 1 + 34 30 41 1 + 34 30 42 1 + 34 30 43 1 + 34 30 44 0.456675 + 34 31 19 0.536741 + 34 31 20 1 + 34 31 21 1 + 34 31 22 1 + 34 31 23 1 + 34 31 24 1 + 34 31 25 1 + 34 31 26 1 + 34 31 27 1 + 34 31 28 1 + 34 31 29 1 + 34 31 30 1 + 34 31 31 1 + 34 31 32 1 + 34 31 33 1 + 34 31 34 1 + 34 31 35 1 + 34 31 36 1 + 34 31 37 1 + 34 31 38 1 + 34 31 39 1 + 34 31 40 1 + 34 31 41 1 + 34 31 42 1 + 34 31 43 1 + 34 31 44 0.536741 + 34 32 19 0.536741 + 34 32 20 1 + 34 32 21 1 + 34 32 22 1 + 34 32 23 1 + 34 32 24 1 + 34 32 25 1 + 34 32 26 1 + 34 32 27 1 + 34 32 28 1 + 34 32 29 1 + 34 32 30 1 + 34 32 31 1 + 34 32 32 1 + 34 32 33 1 + 34 32 34 1 + 34 32 35 1 + 34 32 36 1 + 34 32 37 1 + 34 32 38 1 + 34 32 39 1 + 34 32 40 1 + 34 32 41 1 + 34 32 42 1 + 34 32 43 1 + 34 32 44 0.536741 + 34 33 19 0.456675 + 34 33 20 1 + 34 33 21 1 + 34 33 22 1 + 34 33 23 1 + 34 33 24 1 + 34 33 25 1 + 34 33 26 1 + 34 33 27 1 + 34 33 28 1 + 34 33 29 1 + 34 33 30 1 + 34 33 31 1 + 34 33 32 1 + 34 33 33 1 + 34 33 34 1 + 34 33 35 1 + 34 33 36 1 + 34 33 37 1 + 34 33 38 1 + 34 33 39 1 + 34 33 40 1 + 34 33 41 1 + 34 33 42 1 + 34 33 43 1 + 34 33 44 0.456675 + 34 34 19 0.294975 + 34 34 20 1 + 34 34 21 1 + 34 34 22 1 + 34 34 23 1 + 34 34 24 1 + 34 34 25 1 + 34 34 26 1 + 34 34 27 1 + 34 34 28 1 + 34 34 29 1 + 34 34 30 1 + 34 34 31 1 + 34 34 32 1 + 34 34 33 1 + 34 34 34 1 + 34 34 35 1 + 34 34 36 1 + 34 34 37 1 + 34 34 38 1 + 34 34 39 1 + 34 34 40 1 + 34 34 41 1 + 34 34 42 1 + 34 34 43 1 + 34 34 44 0.294975 + 34 35 19 0.0710269 + 34 35 20 0.977321 + 34 35 21 1 + 34 35 22 1 + 34 35 23 1 + 34 35 24 1 + 34 35 25 1 + 34 35 26 1 + 34 35 27 1 + 34 35 28 1 + 34 35 29 1 + 34 35 30 1 + 34 35 31 1 + 34 35 32 1 + 34 35 33 1 + 34 35 34 1 + 34 35 35 1 + 34 35 36 1 + 34 35 37 1 + 34 35 38 1 + 34 35 39 1 + 34 35 40 1 + 34 35 41 1 + 34 35 42 1 + 34 35 43 0.977321 + 34 35 44 0.0710269 + 34 36 20 0.711413 + 34 36 21 1 + 34 36 22 1 + 34 36 23 1 + 34 36 24 1 + 34 36 25 1 + 34 36 26 1 + 34 36 27 1 + 34 36 28 1 + 34 36 29 1 + 34 36 30 1 + 34 36 31 1 + 34 36 32 1 + 34 36 33 1 + 34 36 34 1 + 34 36 35 1 + 34 36 36 1 + 34 36 37 1 + 34 36 38 1 + 34 36 39 1 + 34 36 40 1 + 34 36 41 1 + 34 36 42 1 + 34 36 43 0.711413 + 34 37 20 0.277158 + 34 37 21 0.998895 + 34 37 22 1 + 34 37 23 1 + 34 37 24 1 + 34 37 25 1 + 34 37 26 1 + 34 37 27 1 + 34 37 28 1 + 34 37 29 1 + 34 37 30 1 + 34 37 31 1 + 34 37 32 1 + 34 37 33 1 + 34 37 34 1 + 34 37 35 1 + 34 37 36 1 + 34 37 37 1 + 34 37 38 1 + 34 37 39 1 + 34 37 40 1 + 34 37 41 1 + 34 37 42 0.998895 + 34 37 43 0.277158 + 34 38 20 0.00330518 + 34 38 21 0.72694 + 34 38 22 1 + 34 38 23 1 + 34 38 24 1 + 34 38 25 1 + 34 38 26 1 + 34 38 27 1 + 34 38 28 1 + 34 38 29 1 + 34 38 30 1 + 34 38 31 1 + 34 38 32 1 + 34 38 33 1 + 34 38 34 1 + 34 38 35 1 + 34 38 36 1 + 34 38 37 1 + 34 38 38 1 + 34 38 39 1 + 34 38 40 1 + 34 38 41 1 + 34 38 42 0.72694 + 34 38 43 0.00330518 + 34 39 21 0.12727 + 34 39 22 0.928659 + 34 39 23 1 + 34 39 24 1 + 34 39 25 1 + 34 39 26 1 + 34 39 27 1 + 34 39 28 1 + 34 39 29 1 + 34 39 30 1 + 34 39 31 1 + 34 39 32 1 + 34 39 33 1 + 34 39 34 1 + 34 39 35 1 + 34 39 36 1 + 34 39 37 1 + 34 39 38 1 + 34 39 39 1 + 34 39 40 1 + 34 39 41 0.928659 + 34 39 42 0.12727 + 34 40 22 0.259926 + 34 40 23 0.964837 + 34 40 24 1 + 34 40 25 1 + 34 40 26 1 + 34 40 27 1 + 34 40 28 1 + 34 40 29 1 + 34 40 30 1 + 34 40 31 1 + 34 40 32 1 + 34 40 33 1 + 34 40 34 1 + 34 40 35 1 + 34 40 36 1 + 34 40 37 1 + 34 40 38 1 + 34 40 39 1 + 34 40 40 0.964837 + 34 40 41 0.259926 + 34 41 23 0.259926 + 34 41 24 0.928659 + 34 41 25 1 + 34 41 26 1 + 34 41 27 1 + 34 41 28 1 + 34 41 29 1 + 34 41 30 1 + 34 41 31 1 + 34 41 32 1 + 34 41 33 1 + 34 41 34 1 + 34 41 35 1 + 34 41 36 1 + 34 41 37 1 + 34 41 38 1 + 34 41 39 0.928659 + 34 41 40 0.259926 + 34 42 24 0.12727 + 34 42 25 0.72694 + 34 42 26 0.998895 + 34 42 27 1 + 34 42 28 1 + 34 42 29 1 + 34 42 30 1 + 34 42 31 1 + 34 42 32 1 + 34 42 33 1 + 34 42 34 1 + 34 42 35 1 + 34 42 36 1 + 34 42 37 0.998895 + 34 42 38 0.72694 + 34 42 39 0.12727 + 34 43 25 0.00330518 + 34 43 26 0.277158 + 34 43 27 0.711413 + 34 43 28 0.977321 + 34 43 29 1 + 34 43 30 1 + 34 43 31 1 + 34 43 32 1 + 34 43 33 1 + 34 43 34 1 + 34 43 35 0.977321 + 34 43 36 0.711413 + 34 43 37 0.277158 + 34 43 38 0.00330518 + 34 44 28 0.0710269 + 34 44 29 0.294975 + 34 44 30 0.456675 + 34 44 31 0.536741 + 34 44 32 0.536741 + 34 44 33 0.456675 + 34 44 34 0.294975 + 34 44 35 0.0710269 + 35 19 28 0.00114247 + 35 19 29 0.0710269 + 35 19 30 0.213322 + 35 19 31 0.294975 + 35 19 32 0.294975 + 35 19 33 0.213322 + 35 19 34 0.0710269 + 35 19 35 0.00114247 + 35 20 26 0.0743091 + 35 20 27 0.452189 + 35 20 28 0.795409 + 35 20 29 0.977321 + 35 20 30 0.999999 + 35 20 31 1 + 35 20 32 1 + 35 20 33 0.999999 + 35 20 34 0.977321 + 35 20 35 0.795409 + 35 20 36 0.452189 + 35 20 37 0.0743091 + 35 21 24 0.0180042 + 35 21 25 0.446726 + 35 21 26 0.932236 + 35 21 27 1 + 35 21 28 1 + 35 21 29 1 + 35 21 30 1 + 35 21 31 1 + 35 21 32 1 + 35 21 33 1 + 35 21 34 1 + 35 21 35 1 + 35 21 36 1 + 35 21 37 0.932236 + 35 21 38 0.446726 + 35 21 39 0.0180042 + 35 22 23 0.0778651 + 35 22 24 0.734594 + 35 22 25 0.999882 + 35 22 26 1 + 35 22 27 1 + 35 22 28 1 + 35 22 29 1 + 35 22 30 1 + 35 22 31 1 + 35 22 32 1 + 35 22 33 1 + 35 22 34 1 + 35 22 35 1 + 35 22 36 1 + 35 22 37 1 + 35 22 38 0.999882 + 35 22 39 0.734594 + 35 22 40 0.0778651 + 35 23 22 0.0778651 + 35 23 23 0.815054 + 35 23 24 1 + 35 23 25 1 + 35 23 26 1 + 35 23 27 1 + 35 23 28 1 + 35 23 29 1 + 35 23 30 1 + 35 23 31 1 + 35 23 32 1 + 35 23 33 1 + 35 23 34 1 + 35 23 35 1 + 35 23 36 1 + 35 23 37 1 + 35 23 38 1 + 35 23 39 1 + 35 23 40 0.815054 + 35 23 41 0.0778651 + 35 24 21 0.0180042 + 35 24 22 0.734594 + 35 24 23 1 + 35 24 24 1 + 35 24 25 1 + 35 24 26 1 + 35 24 27 1 + 35 24 28 1 + 35 24 29 1 + 35 24 30 1 + 35 24 31 1 + 35 24 32 1 + 35 24 33 1 + 35 24 34 1 + 35 24 35 1 + 35 24 36 1 + 35 24 37 1 + 35 24 38 1 + 35 24 39 1 + 35 24 40 1 + 35 24 41 0.734594 + 35 24 42 0.0180042 + 35 25 21 0.446726 + 35 25 22 0.999882 + 35 25 23 1 + 35 25 24 1 + 35 25 25 1 + 35 25 26 1 + 35 25 27 1 + 35 25 28 1 + 35 25 29 1 + 35 25 30 1 + 35 25 31 1 + 35 25 32 1 + 35 25 33 1 + 35 25 34 1 + 35 25 35 1 + 35 25 36 1 + 35 25 37 1 + 35 25 38 1 + 35 25 39 1 + 35 25 40 1 + 35 25 41 0.999882 + 35 25 42 0.446726 + 35 26 20 0.0743091 + 35 26 21 0.932236 + 35 26 22 1 + 35 26 23 1 + 35 26 24 1 + 35 26 25 1 + 35 26 26 1 + 35 26 27 1 + 35 26 28 1 + 35 26 29 1 + 35 26 30 1 + 35 26 31 1 + 35 26 32 1 + 35 26 33 1 + 35 26 34 1 + 35 26 35 1 + 35 26 36 1 + 35 26 37 1 + 35 26 38 1 + 35 26 39 1 + 35 26 40 1 + 35 26 41 1 + 35 26 42 0.932236 + 35 26 43 0.0743091 + 35 27 20 0.452189 + 35 27 21 1 + 35 27 22 1 + 35 27 23 1 + 35 27 24 1 + 35 27 25 1 + 35 27 26 1 + 35 27 27 1 + 35 27 28 1 + 35 27 29 1 + 35 27 30 1 + 35 27 31 1 + 35 27 32 1 + 35 27 33 1 + 35 27 34 1 + 35 27 35 1 + 35 27 36 1 + 35 27 37 1 + 35 27 38 1 + 35 27 39 1 + 35 27 40 1 + 35 27 41 1 + 35 27 42 1 + 35 27 43 0.452189 + 35 28 19 0.00114247 + 35 28 20 0.795409 + 35 28 21 1 + 35 28 22 1 + 35 28 23 1 + 35 28 24 1 + 35 28 25 1 + 35 28 26 1 + 35 28 27 1 + 35 28 28 1 + 35 28 29 1 + 35 28 30 1 + 35 28 31 1 + 35 28 32 1 + 35 28 33 1 + 35 28 34 1 + 35 28 35 1 + 35 28 36 1 + 35 28 37 1 + 35 28 38 1 + 35 28 39 1 + 35 28 40 1 + 35 28 41 1 + 35 28 42 1 + 35 28 43 0.795409 + 35 28 44 0.00114247 + 35 29 19 0.0710269 + 35 29 20 0.977321 + 35 29 21 1 + 35 29 22 1 + 35 29 23 1 + 35 29 24 1 + 35 29 25 1 + 35 29 26 1 + 35 29 27 1 + 35 29 28 1 + 35 29 29 1 + 35 29 30 1 + 35 29 31 1 + 35 29 32 1 + 35 29 33 1 + 35 29 34 1 + 35 29 35 1 + 35 29 36 1 + 35 29 37 1 + 35 29 38 1 + 35 29 39 1 + 35 29 40 1 + 35 29 41 1 + 35 29 42 1 + 35 29 43 0.977321 + 35 29 44 0.0710269 + 35 30 19 0.213322 + 35 30 20 0.999999 + 35 30 21 1 + 35 30 22 1 + 35 30 23 1 + 35 30 24 1 + 35 30 25 1 + 35 30 26 1 + 35 30 27 1 + 35 30 28 1 + 35 30 29 1 + 35 30 30 1 + 35 30 31 1 + 35 30 32 1 + 35 30 33 1 + 35 30 34 1 + 35 30 35 1 + 35 30 36 1 + 35 30 37 1 + 35 30 38 1 + 35 30 39 1 + 35 30 40 1 + 35 30 41 1 + 35 30 42 1 + 35 30 43 0.999999 + 35 30 44 0.213322 + 35 31 19 0.294975 + 35 31 20 1 + 35 31 21 1 + 35 31 22 1 + 35 31 23 1 + 35 31 24 1 + 35 31 25 1 + 35 31 26 1 + 35 31 27 1 + 35 31 28 1 + 35 31 29 1 + 35 31 30 1 + 35 31 31 1 + 35 31 32 1 + 35 31 33 1 + 35 31 34 1 + 35 31 35 1 + 35 31 36 1 + 35 31 37 1 + 35 31 38 1 + 35 31 39 1 + 35 31 40 1 + 35 31 41 1 + 35 31 42 1 + 35 31 43 1 + 35 31 44 0.294975 + 35 32 19 0.294975 + 35 32 20 1 + 35 32 21 1 + 35 32 22 1 + 35 32 23 1 + 35 32 24 1 + 35 32 25 1 + 35 32 26 1 + 35 32 27 1 + 35 32 28 1 + 35 32 29 1 + 35 32 30 1 + 35 32 31 1 + 35 32 32 1 + 35 32 33 1 + 35 32 34 1 + 35 32 35 1 + 35 32 36 1 + 35 32 37 1 + 35 32 38 1 + 35 32 39 1 + 35 32 40 1 + 35 32 41 1 + 35 32 42 1 + 35 32 43 1 + 35 32 44 0.294975 + 35 33 19 0.213322 + 35 33 20 0.999999 + 35 33 21 1 + 35 33 22 1 + 35 33 23 1 + 35 33 24 1 + 35 33 25 1 + 35 33 26 1 + 35 33 27 1 + 35 33 28 1 + 35 33 29 1 + 35 33 30 1 + 35 33 31 1 + 35 33 32 1 + 35 33 33 1 + 35 33 34 1 + 35 33 35 1 + 35 33 36 1 + 35 33 37 1 + 35 33 38 1 + 35 33 39 1 + 35 33 40 1 + 35 33 41 1 + 35 33 42 1 + 35 33 43 0.999999 + 35 33 44 0.213322 + 35 34 19 0.0710269 + 35 34 20 0.977321 + 35 34 21 1 + 35 34 22 1 + 35 34 23 1 + 35 34 24 1 + 35 34 25 1 + 35 34 26 1 + 35 34 27 1 + 35 34 28 1 + 35 34 29 1 + 35 34 30 1 + 35 34 31 1 + 35 34 32 1 + 35 34 33 1 + 35 34 34 1 + 35 34 35 1 + 35 34 36 1 + 35 34 37 1 + 35 34 38 1 + 35 34 39 1 + 35 34 40 1 + 35 34 41 1 + 35 34 42 1 + 35 34 43 0.977321 + 35 34 44 0.0710269 + 35 35 19 0.00114247 + 35 35 20 0.795409 + 35 35 21 1 + 35 35 22 1 + 35 35 23 1 + 35 35 24 1 + 35 35 25 1 + 35 35 26 1 + 35 35 27 1 + 35 35 28 1 + 35 35 29 1 + 35 35 30 1 + 35 35 31 1 + 35 35 32 1 + 35 35 33 1 + 35 35 34 1 + 35 35 35 1 + 35 35 36 1 + 35 35 37 1 + 35 35 38 1 + 35 35 39 1 + 35 35 40 1 + 35 35 41 1 + 35 35 42 1 + 35 35 43 0.795409 + 35 35 44 0.00114247 + 35 36 20 0.452189 + 35 36 21 1 + 35 36 22 1 + 35 36 23 1 + 35 36 24 1 + 35 36 25 1 + 35 36 26 1 + 35 36 27 1 + 35 36 28 1 + 35 36 29 1 + 35 36 30 1 + 35 36 31 1 + 35 36 32 1 + 35 36 33 1 + 35 36 34 1 + 35 36 35 1 + 35 36 36 1 + 35 36 37 1 + 35 36 38 1 + 35 36 39 1 + 35 36 40 1 + 35 36 41 1 + 35 36 42 1 + 35 36 43 0.452189 + 35 37 20 0.0743091 + 35 37 21 0.932236 + 35 37 22 1 + 35 37 23 1 + 35 37 24 1 + 35 37 25 1 + 35 37 26 1 + 35 37 27 1 + 35 37 28 1 + 35 37 29 1 + 35 37 30 1 + 35 37 31 1 + 35 37 32 1 + 35 37 33 1 + 35 37 34 1 + 35 37 35 1 + 35 37 36 1 + 35 37 37 1 + 35 37 38 1 + 35 37 39 1 + 35 37 40 1 + 35 37 41 1 + 35 37 42 0.932236 + 35 37 43 0.0743091 + 35 38 21 0.446726 + 35 38 22 0.999882 + 35 38 23 1 + 35 38 24 1 + 35 38 25 1 + 35 38 26 1 + 35 38 27 1 + 35 38 28 1 + 35 38 29 1 + 35 38 30 1 + 35 38 31 1 + 35 38 32 1 + 35 38 33 1 + 35 38 34 1 + 35 38 35 1 + 35 38 36 1 + 35 38 37 1 + 35 38 38 1 + 35 38 39 1 + 35 38 40 1 + 35 38 41 0.999882 + 35 38 42 0.446726 + 35 39 21 0.0180042 + 35 39 22 0.734594 + 35 39 23 1 + 35 39 24 1 + 35 39 25 1 + 35 39 26 1 + 35 39 27 1 + 35 39 28 1 + 35 39 29 1 + 35 39 30 1 + 35 39 31 1 + 35 39 32 1 + 35 39 33 1 + 35 39 34 1 + 35 39 35 1 + 35 39 36 1 + 35 39 37 1 + 35 39 38 1 + 35 39 39 1 + 35 39 40 1 + 35 39 41 0.734594 + 35 39 42 0.0180042 + 35 40 22 0.0778651 + 35 40 23 0.815054 + 35 40 24 1 + 35 40 25 1 + 35 40 26 1 + 35 40 27 1 + 35 40 28 1 + 35 40 29 1 + 35 40 30 1 + 35 40 31 1 + 35 40 32 1 + 35 40 33 1 + 35 40 34 1 + 35 40 35 1 + 35 40 36 1 + 35 40 37 1 + 35 40 38 1 + 35 40 39 1 + 35 40 40 0.815054 + 35 40 41 0.0778651 + 35 41 23 0.0778651 + 35 41 24 0.734594 + 35 41 25 0.999882 + 35 41 26 1 + 35 41 27 1 + 35 41 28 1 + 35 41 29 1 + 35 41 30 1 + 35 41 31 1 + 35 41 32 1 + 35 41 33 1 + 35 41 34 1 + 35 41 35 1 + 35 41 36 1 + 35 41 37 1 + 35 41 38 0.999882 + 35 41 39 0.734594 + 35 41 40 0.0778651 + 35 42 24 0.0180042 + 35 42 25 0.446726 + 35 42 26 0.932236 + 35 42 27 1 + 35 42 28 1 + 35 42 29 1 + 35 42 30 1 + 35 42 31 1 + 35 42 32 1 + 35 42 33 1 + 35 42 34 1 + 35 42 35 1 + 35 42 36 1 + 35 42 37 0.932236 + 35 42 38 0.446726 + 35 42 39 0.0180042 + 35 43 26 0.0743091 + 35 43 27 0.452189 + 35 43 28 0.795409 + 35 43 29 0.977321 + 35 43 30 0.999999 + 35 43 31 1 + 35 43 32 1 + 35 43 33 0.999999 + 35 43 34 0.977321 + 35 43 35 0.795409 + 35 43 36 0.452189 + 35 43 37 0.0743091 + 35 44 28 0.00114247 + 35 44 29 0.0710269 + 35 44 30 0.213322 + 35 44 31 0.294975 + 35 44 32 0.294975 + 35 44 33 0.213322 + 35 44 34 0.0710269 + 35 44 35 0.00114247 + 36 19 30 0.00768648 + 36 19 31 0.0310217 + 36 19 32 0.0310217 + 36 19 33 0.00768648 + 36 20 26 0.000575367 + 36 20 27 0.12736 + 36 20 28 0.452189 + 36 20 29 0.711413 + 36 20 30 0.873392 + 36 20 31 0.933984 + 36 20 32 0.933984 + 36 20 33 0.873392 + 36 20 34 0.711413 + 36 20 35 0.452189 + 36 20 36 0.12736 + 36 20 37 0.000575367 + 36 21 25 0.124558 + 36 21 26 0.635968 + 36 21 27 0.969751 + 36 21 28 1 + 36 21 29 1 + 36 21 30 1 + 36 21 31 1 + 36 21 32 1 + 36 21 33 1 + 36 21 34 1 + 36 21 35 1 + 36 21 36 0.969751 + 36 21 37 0.635968 + 36 21 38 0.124558 + 36 22 23 0.00160611 + 36 22 24 0.347021 + 36 22 25 0.93137 + 36 22 26 1 + 36 22 27 1 + 36 22 28 1 + 36 22 29 1 + 36 22 30 1 + 36 22 31 1 + 36 22 32 1 + 36 22 33 1 + 36 22 34 1 + 36 22 35 1 + 36 22 36 1 + 36 22 37 1 + 36 22 38 0.93137 + 36 22 39 0.347021 + 36 22 40 0.00160611 + 36 23 22 0.00160611 + 36 23 23 0.442652 + 36 23 24 0.985714 + 36 23 25 1 + 36 23 26 1 + 36 23 27 1 + 36 23 28 1 + 36 23 29 1 + 36 23 30 1 + 36 23 31 1 + 36 23 32 1 + 36 23 33 1 + 36 23 34 1 + 36 23 35 1 + 36 23 36 1 + 36 23 37 1 + 36 23 38 1 + 36 23 39 0.985714 + 36 23 40 0.442652 + 36 23 41 0.00160611 + 36 24 22 0.347021 + 36 24 23 0.985714 + 36 24 24 1 + 36 24 25 1 + 36 24 26 1 + 36 24 27 1 + 36 24 28 1 + 36 24 29 1 + 36 24 30 1 + 36 24 31 1 + 36 24 32 1 + 36 24 33 1 + 36 24 34 1 + 36 24 35 1 + 36 24 36 1 + 36 24 37 1 + 36 24 38 1 + 36 24 39 1 + 36 24 40 0.985714 + 36 24 41 0.347021 + 36 25 21 0.124558 + 36 25 22 0.93137 + 36 25 23 1 + 36 25 24 1 + 36 25 25 1 + 36 25 26 1 + 36 25 27 1 + 36 25 28 1 + 36 25 29 1 + 36 25 30 1 + 36 25 31 1 + 36 25 32 1 + 36 25 33 1 + 36 25 34 1 + 36 25 35 1 + 36 25 36 1 + 36 25 37 1 + 36 25 38 1 + 36 25 39 1 + 36 25 40 1 + 36 25 41 0.93137 + 36 25 42 0.124558 + 36 26 20 0.000575367 + 36 26 21 0.635968 + 36 26 22 1 + 36 26 23 1 + 36 26 24 1 + 36 26 25 1 + 36 26 26 1 + 36 26 27 1 + 36 26 28 1 + 36 26 29 1 + 36 26 30 1 + 36 26 31 1 + 36 26 32 1 + 36 26 33 1 + 36 26 34 1 + 36 26 35 1 + 36 26 36 1 + 36 26 37 1 + 36 26 38 1 + 36 26 39 1 + 36 26 40 1 + 36 26 41 1 + 36 26 42 0.635968 + 36 26 43 0.000575367 + 36 27 20 0.12736 + 36 27 21 0.969751 + 36 27 22 1 + 36 27 23 1 + 36 27 24 1 + 36 27 25 1 + 36 27 26 1 + 36 27 27 1 + 36 27 28 1 + 36 27 29 1 + 36 27 30 1 + 36 27 31 1 + 36 27 32 1 + 36 27 33 1 + 36 27 34 1 + 36 27 35 1 + 36 27 36 1 + 36 27 37 1 + 36 27 38 1 + 36 27 39 1 + 36 27 40 1 + 36 27 41 1 + 36 27 42 0.969751 + 36 27 43 0.12736 + 36 28 20 0.452189 + 36 28 21 1 + 36 28 22 1 + 36 28 23 1 + 36 28 24 1 + 36 28 25 1 + 36 28 26 1 + 36 28 27 1 + 36 28 28 1 + 36 28 29 1 + 36 28 30 1 + 36 28 31 1 + 36 28 32 1 + 36 28 33 1 + 36 28 34 1 + 36 28 35 1 + 36 28 36 1 + 36 28 37 1 + 36 28 38 1 + 36 28 39 1 + 36 28 40 1 + 36 28 41 1 + 36 28 42 1 + 36 28 43 0.452189 + 36 29 20 0.711413 + 36 29 21 1 + 36 29 22 1 + 36 29 23 1 + 36 29 24 1 + 36 29 25 1 + 36 29 26 1 + 36 29 27 1 + 36 29 28 1 + 36 29 29 1 + 36 29 30 1 + 36 29 31 1 + 36 29 32 1 + 36 29 33 1 + 36 29 34 1 + 36 29 35 1 + 36 29 36 1 + 36 29 37 1 + 36 29 38 1 + 36 29 39 1 + 36 29 40 1 + 36 29 41 1 + 36 29 42 1 + 36 29 43 0.711413 + 36 30 19 0.00768648 + 36 30 20 0.873392 + 36 30 21 1 + 36 30 22 1 + 36 30 23 1 + 36 30 24 1 + 36 30 25 1 + 36 30 26 1 + 36 30 27 1 + 36 30 28 1 + 36 30 29 1 + 36 30 30 1 + 36 30 31 1 + 36 30 32 1 + 36 30 33 1 + 36 30 34 1 + 36 30 35 1 + 36 30 36 1 + 36 30 37 1 + 36 30 38 1 + 36 30 39 1 + 36 30 40 1 + 36 30 41 1 + 36 30 42 1 + 36 30 43 0.873392 + 36 30 44 0.00768648 + 36 31 19 0.0310217 + 36 31 20 0.933984 + 36 31 21 1 + 36 31 22 1 + 36 31 23 1 + 36 31 24 1 + 36 31 25 1 + 36 31 26 1 + 36 31 27 1 + 36 31 28 1 + 36 31 29 1 + 36 31 30 1 + 36 31 31 1 + 36 31 32 1 + 36 31 33 1 + 36 31 34 1 + 36 31 35 1 + 36 31 36 1 + 36 31 37 1 + 36 31 38 1 + 36 31 39 1 + 36 31 40 1 + 36 31 41 1 + 36 31 42 1 + 36 31 43 0.933984 + 36 31 44 0.0310217 + 36 32 19 0.0310217 + 36 32 20 0.933984 + 36 32 21 1 + 36 32 22 1 + 36 32 23 1 + 36 32 24 1 + 36 32 25 1 + 36 32 26 1 + 36 32 27 1 + 36 32 28 1 + 36 32 29 1 + 36 32 30 1 + 36 32 31 1 + 36 32 32 1 + 36 32 33 1 + 36 32 34 1 + 36 32 35 1 + 36 32 36 1 + 36 32 37 1 + 36 32 38 1 + 36 32 39 1 + 36 32 40 1 + 36 32 41 1 + 36 32 42 1 + 36 32 43 0.933984 + 36 32 44 0.0310217 + 36 33 19 0.00768648 + 36 33 20 0.873392 + 36 33 21 1 + 36 33 22 1 + 36 33 23 1 + 36 33 24 1 + 36 33 25 1 + 36 33 26 1 + 36 33 27 1 + 36 33 28 1 + 36 33 29 1 + 36 33 30 1 + 36 33 31 1 + 36 33 32 1 + 36 33 33 1 + 36 33 34 1 + 36 33 35 1 + 36 33 36 1 + 36 33 37 1 + 36 33 38 1 + 36 33 39 1 + 36 33 40 1 + 36 33 41 1 + 36 33 42 1 + 36 33 43 0.873392 + 36 33 44 0.00768648 + 36 34 20 0.711413 + 36 34 21 1 + 36 34 22 1 + 36 34 23 1 + 36 34 24 1 + 36 34 25 1 + 36 34 26 1 + 36 34 27 1 + 36 34 28 1 + 36 34 29 1 + 36 34 30 1 + 36 34 31 1 + 36 34 32 1 + 36 34 33 1 + 36 34 34 1 + 36 34 35 1 + 36 34 36 1 + 36 34 37 1 + 36 34 38 1 + 36 34 39 1 + 36 34 40 1 + 36 34 41 1 + 36 34 42 1 + 36 34 43 0.711413 + 36 35 20 0.452189 + 36 35 21 1 + 36 35 22 1 + 36 35 23 1 + 36 35 24 1 + 36 35 25 1 + 36 35 26 1 + 36 35 27 1 + 36 35 28 1 + 36 35 29 1 + 36 35 30 1 + 36 35 31 1 + 36 35 32 1 + 36 35 33 1 + 36 35 34 1 + 36 35 35 1 + 36 35 36 1 + 36 35 37 1 + 36 35 38 1 + 36 35 39 1 + 36 35 40 1 + 36 35 41 1 + 36 35 42 1 + 36 35 43 0.452189 + 36 36 20 0.12736 + 36 36 21 0.969751 + 36 36 22 1 + 36 36 23 1 + 36 36 24 1 + 36 36 25 1 + 36 36 26 1 + 36 36 27 1 + 36 36 28 1 + 36 36 29 1 + 36 36 30 1 + 36 36 31 1 + 36 36 32 1 + 36 36 33 1 + 36 36 34 1 + 36 36 35 1 + 36 36 36 1 + 36 36 37 1 + 36 36 38 1 + 36 36 39 1 + 36 36 40 1 + 36 36 41 1 + 36 36 42 0.969751 + 36 36 43 0.12736 + 36 37 20 0.000575367 + 36 37 21 0.635968 + 36 37 22 1 + 36 37 23 1 + 36 37 24 1 + 36 37 25 1 + 36 37 26 1 + 36 37 27 1 + 36 37 28 1 + 36 37 29 1 + 36 37 30 1 + 36 37 31 1 + 36 37 32 1 + 36 37 33 1 + 36 37 34 1 + 36 37 35 1 + 36 37 36 1 + 36 37 37 1 + 36 37 38 1 + 36 37 39 1 + 36 37 40 1 + 36 37 41 1 + 36 37 42 0.635968 + 36 37 43 0.000575367 + 36 38 21 0.124558 + 36 38 22 0.93137 + 36 38 23 1 + 36 38 24 1 + 36 38 25 1 + 36 38 26 1 + 36 38 27 1 + 36 38 28 1 + 36 38 29 1 + 36 38 30 1 + 36 38 31 1 + 36 38 32 1 + 36 38 33 1 + 36 38 34 1 + 36 38 35 1 + 36 38 36 1 + 36 38 37 1 + 36 38 38 1 + 36 38 39 1 + 36 38 40 1 + 36 38 41 0.93137 + 36 38 42 0.124558 + 36 39 22 0.347021 + 36 39 23 0.985714 + 36 39 24 1 + 36 39 25 1 + 36 39 26 1 + 36 39 27 1 + 36 39 28 1 + 36 39 29 1 + 36 39 30 1 + 36 39 31 1 + 36 39 32 1 + 36 39 33 1 + 36 39 34 1 + 36 39 35 1 + 36 39 36 1 + 36 39 37 1 + 36 39 38 1 + 36 39 39 1 + 36 39 40 0.985714 + 36 39 41 0.347021 + 36 40 22 0.00160611 + 36 40 23 0.442652 + 36 40 24 0.985714 + 36 40 25 1 + 36 40 26 1 + 36 40 27 1 + 36 40 28 1 + 36 40 29 1 + 36 40 30 1 + 36 40 31 1 + 36 40 32 1 + 36 40 33 1 + 36 40 34 1 + 36 40 35 1 + 36 40 36 1 + 36 40 37 1 + 36 40 38 1 + 36 40 39 0.985714 + 36 40 40 0.442652 + 36 40 41 0.00160611 + 36 41 23 0.00160611 + 36 41 24 0.347021 + 36 41 25 0.93137 + 36 41 26 1 + 36 41 27 1 + 36 41 28 1 + 36 41 29 1 + 36 41 30 1 + 36 41 31 1 + 36 41 32 1 + 36 41 33 1 + 36 41 34 1 + 36 41 35 1 + 36 41 36 1 + 36 41 37 1 + 36 41 38 0.93137 + 36 41 39 0.347021 + 36 41 40 0.00160611 + 36 42 25 0.124558 + 36 42 26 0.635968 + 36 42 27 0.969751 + 36 42 28 1 + 36 42 29 1 + 36 42 30 1 + 36 42 31 1 + 36 42 32 1 + 36 42 33 1 + 36 42 34 1 + 36 42 35 1 + 36 42 36 0.969751 + 36 42 37 0.635968 + 36 42 38 0.124558 + 36 43 26 0.000575367 + 36 43 27 0.12736 + 36 43 28 0.452189 + 36 43 29 0.711413 + 36 43 30 0.873392 + 36 43 31 0.933984 + 36 43 32 0.933984 + 36 43 33 0.873392 + 36 43 34 0.711413 + 36 43 35 0.452189 + 36 43 36 0.12736 + 36 43 37 0.000575367 + 36 44 30 0.00768648 + 36 44 31 0.0310217 + 36 44 32 0.0310217 + 36 44 33 0.00768648 + 37 20 27 0.000575367 + 37 20 28 0.0743091 + 37 20 29 0.277158 + 37 20 30 0.452189 + 37 20 31 0.539246 + 37 20 32 0.539246 + 37 20 33 0.452189 + 37 20 34 0.277158 + 37 20 35 0.0743091 + 37 20 36 0.000575367 + 37 21 25 0.00154821 + 37 21 26 0.188742 + 37 21 27 0.635968 + 37 21 28 0.932236 + 37 21 29 0.998895 + 37 21 30 1 + 37 21 31 1 + 37 21 32 1 + 37 21 33 1 + 37 21 34 0.998895 + 37 21 35 0.932236 + 37 21 36 0.635968 + 37 21 37 0.188742 + 37 21 38 0.00154821 + 37 22 24 0.0423361 + 37 22 25 0.544006 + 37 22 26 0.966273 + 37 22 27 1 + 37 22 28 1 + 37 22 29 1 + 37 22 30 1 + 37 22 31 1 + 37 22 32 1 + 37 22 33 1 + 37 22 34 1 + 37 22 35 1 + 37 22 36 1 + 37 22 37 0.966273 + 37 22 38 0.544006 + 37 22 39 0.0423361 + 37 23 23 0.0757442 + 37 23 24 0.737155 + 37 23 25 0.999435 + 37 23 26 1 + 37 23 27 1 + 37 23 28 1 + 37 23 29 1 + 37 23 30 1 + 37 23 31 1 + 37 23 32 1 + 37 23 33 1 + 37 23 34 1 + 37 23 35 1 + 37 23 36 1 + 37 23 37 1 + 37 23 38 0.999435 + 37 23 39 0.737155 + 37 23 40 0.0757442 + 37 24 22 0.0423361 + 37 24 23 0.737155 + 37 24 24 1 + 37 24 25 1 + 37 24 26 1 + 37 24 27 1 + 37 24 28 1 + 37 24 29 1 + 37 24 30 1 + 37 24 31 1 + 37 24 32 1 + 37 24 33 1 + 37 24 34 1 + 37 24 35 1 + 37 24 36 1 + 37 24 37 1 + 37 24 38 1 + 37 24 39 1 + 37 24 40 0.737155 + 37 24 41 0.0423361 + 37 25 21 0.00154821 + 37 25 22 0.544006 + 37 25 23 0.999435 + 37 25 24 1 + 37 25 25 1 + 37 25 26 1 + 37 25 27 1 + 37 25 28 1 + 37 25 29 1 + 37 25 30 1 + 37 25 31 1 + 37 25 32 1 + 37 25 33 1 + 37 25 34 1 + 37 25 35 1 + 37 25 36 1 + 37 25 37 1 + 37 25 38 1 + 37 25 39 1 + 37 25 40 0.999435 + 37 25 41 0.544006 + 37 25 42 0.00154821 + 37 26 21 0.188742 + 37 26 22 0.966273 + 37 26 23 1 + 37 26 24 1 + 37 26 25 1 + 37 26 26 1 + 37 26 27 1 + 37 26 28 1 + 37 26 29 1 + 37 26 30 1 + 37 26 31 1 + 37 26 32 1 + 37 26 33 1 + 37 26 34 1 + 37 26 35 1 + 37 26 36 1 + 37 26 37 1 + 37 26 38 1 + 37 26 39 1 + 37 26 40 1 + 37 26 41 0.966273 + 37 26 42 0.188742 + 37 27 20 0.000575367 + 37 27 21 0.635968 + 37 27 22 1 + 37 27 23 1 + 37 27 24 1 + 37 27 25 1 + 37 27 26 1 + 37 27 27 1 + 37 27 28 1 + 37 27 29 1 + 37 27 30 1 + 37 27 31 1 + 37 27 32 1 + 37 27 33 1 + 37 27 34 1 + 37 27 35 1 + 37 27 36 1 + 37 27 37 1 + 37 27 38 1 + 37 27 39 1 + 37 27 40 1 + 37 27 41 1 + 37 27 42 0.635968 + 37 27 43 0.000575367 + 37 28 20 0.0743091 + 37 28 21 0.932236 + 37 28 22 1 + 37 28 23 1 + 37 28 24 1 + 37 28 25 1 + 37 28 26 1 + 37 28 27 1 + 37 28 28 1 + 37 28 29 1 + 37 28 30 1 + 37 28 31 1 + 37 28 32 1 + 37 28 33 1 + 37 28 34 1 + 37 28 35 1 + 37 28 36 1 + 37 28 37 1 + 37 28 38 1 + 37 28 39 1 + 37 28 40 1 + 37 28 41 1 + 37 28 42 0.932236 + 37 28 43 0.0743091 + 37 29 20 0.277158 + 37 29 21 0.998895 + 37 29 22 1 + 37 29 23 1 + 37 29 24 1 + 37 29 25 1 + 37 29 26 1 + 37 29 27 1 + 37 29 28 1 + 37 29 29 1 + 37 29 30 1 + 37 29 31 1 + 37 29 32 1 + 37 29 33 1 + 37 29 34 1 + 37 29 35 1 + 37 29 36 1 + 37 29 37 1 + 37 29 38 1 + 37 29 39 1 + 37 29 40 1 + 37 29 41 1 + 37 29 42 0.998895 + 37 29 43 0.277158 + 37 30 20 0.452189 + 37 30 21 1 + 37 30 22 1 + 37 30 23 1 + 37 30 24 1 + 37 30 25 1 + 37 30 26 1 + 37 30 27 1 + 37 30 28 1 + 37 30 29 1 + 37 30 30 1 + 37 30 31 1 + 37 30 32 1 + 37 30 33 1 + 37 30 34 1 + 37 30 35 1 + 37 30 36 1 + 37 30 37 1 + 37 30 38 1 + 37 30 39 1 + 37 30 40 1 + 37 30 41 1 + 37 30 42 1 + 37 30 43 0.452189 + 37 31 20 0.539246 + 37 31 21 1 + 37 31 22 1 + 37 31 23 1 + 37 31 24 1 + 37 31 25 1 + 37 31 26 1 + 37 31 27 1 + 37 31 28 1 + 37 31 29 1 + 37 31 30 1 + 37 31 31 1 + 37 31 32 1 + 37 31 33 1 + 37 31 34 1 + 37 31 35 1 + 37 31 36 1 + 37 31 37 1 + 37 31 38 1 + 37 31 39 1 + 37 31 40 1 + 37 31 41 1 + 37 31 42 1 + 37 31 43 0.539246 + 37 32 20 0.539246 + 37 32 21 1 + 37 32 22 1 + 37 32 23 1 + 37 32 24 1 + 37 32 25 1 + 37 32 26 1 + 37 32 27 1 + 37 32 28 1 + 37 32 29 1 + 37 32 30 1 + 37 32 31 1 + 37 32 32 1 + 37 32 33 1 + 37 32 34 1 + 37 32 35 1 + 37 32 36 1 + 37 32 37 1 + 37 32 38 1 + 37 32 39 1 + 37 32 40 1 + 37 32 41 1 + 37 32 42 1 + 37 32 43 0.539246 + 37 33 20 0.452189 + 37 33 21 1 + 37 33 22 1 + 37 33 23 1 + 37 33 24 1 + 37 33 25 1 + 37 33 26 1 + 37 33 27 1 + 37 33 28 1 + 37 33 29 1 + 37 33 30 1 + 37 33 31 1 + 37 33 32 1 + 37 33 33 1 + 37 33 34 1 + 37 33 35 1 + 37 33 36 1 + 37 33 37 1 + 37 33 38 1 + 37 33 39 1 + 37 33 40 1 + 37 33 41 1 + 37 33 42 1 + 37 33 43 0.452189 + 37 34 20 0.277158 + 37 34 21 0.998895 + 37 34 22 1 + 37 34 23 1 + 37 34 24 1 + 37 34 25 1 + 37 34 26 1 + 37 34 27 1 + 37 34 28 1 + 37 34 29 1 + 37 34 30 1 + 37 34 31 1 + 37 34 32 1 + 37 34 33 1 + 37 34 34 1 + 37 34 35 1 + 37 34 36 1 + 37 34 37 1 + 37 34 38 1 + 37 34 39 1 + 37 34 40 1 + 37 34 41 1 + 37 34 42 0.998895 + 37 34 43 0.277158 + 37 35 20 0.0743091 + 37 35 21 0.932236 + 37 35 22 1 + 37 35 23 1 + 37 35 24 1 + 37 35 25 1 + 37 35 26 1 + 37 35 27 1 + 37 35 28 1 + 37 35 29 1 + 37 35 30 1 + 37 35 31 1 + 37 35 32 1 + 37 35 33 1 + 37 35 34 1 + 37 35 35 1 + 37 35 36 1 + 37 35 37 1 + 37 35 38 1 + 37 35 39 1 + 37 35 40 1 + 37 35 41 1 + 37 35 42 0.932236 + 37 35 43 0.0743091 + 37 36 20 0.000575367 + 37 36 21 0.635968 + 37 36 22 1 + 37 36 23 1 + 37 36 24 1 + 37 36 25 1 + 37 36 26 1 + 37 36 27 1 + 37 36 28 1 + 37 36 29 1 + 37 36 30 1 + 37 36 31 1 + 37 36 32 1 + 37 36 33 1 + 37 36 34 1 + 37 36 35 1 + 37 36 36 1 + 37 36 37 1 + 37 36 38 1 + 37 36 39 1 + 37 36 40 1 + 37 36 41 1 + 37 36 42 0.635968 + 37 36 43 0.000575367 + 37 37 21 0.188742 + 37 37 22 0.966273 + 37 37 23 1 + 37 37 24 1 + 37 37 25 1 + 37 37 26 1 + 37 37 27 1 + 37 37 28 1 + 37 37 29 1 + 37 37 30 1 + 37 37 31 1 + 37 37 32 1 + 37 37 33 1 + 37 37 34 1 + 37 37 35 1 + 37 37 36 1 + 37 37 37 1 + 37 37 38 1 + 37 37 39 1 + 37 37 40 1 + 37 37 41 0.966273 + 37 37 42 0.188742 + 37 38 21 0.00154821 + 37 38 22 0.544006 + 37 38 23 0.999435 + 37 38 24 1 + 37 38 25 1 + 37 38 26 1 + 37 38 27 1 + 37 38 28 1 + 37 38 29 1 + 37 38 30 1 + 37 38 31 1 + 37 38 32 1 + 37 38 33 1 + 37 38 34 1 + 37 38 35 1 + 37 38 36 1 + 37 38 37 1 + 37 38 38 1 + 37 38 39 1 + 37 38 40 0.999435 + 37 38 41 0.544006 + 37 38 42 0.00154821 + 37 39 22 0.0423361 + 37 39 23 0.737155 + 37 39 24 1 + 37 39 25 1 + 37 39 26 1 + 37 39 27 1 + 37 39 28 1 + 37 39 29 1 + 37 39 30 1 + 37 39 31 1 + 37 39 32 1 + 37 39 33 1 + 37 39 34 1 + 37 39 35 1 + 37 39 36 1 + 37 39 37 1 + 37 39 38 1 + 37 39 39 1 + 37 39 40 0.737155 + 37 39 41 0.0423361 + 37 40 23 0.0757442 + 37 40 24 0.737155 + 37 40 25 0.999435 + 37 40 26 1 + 37 40 27 1 + 37 40 28 1 + 37 40 29 1 + 37 40 30 1 + 37 40 31 1 + 37 40 32 1 + 37 40 33 1 + 37 40 34 1 + 37 40 35 1 + 37 40 36 1 + 37 40 37 1 + 37 40 38 0.999435 + 37 40 39 0.737155 + 37 40 40 0.0757442 + 37 41 24 0.0423361 + 37 41 25 0.544006 + 37 41 26 0.966273 + 37 41 27 1 + 37 41 28 1 + 37 41 29 1 + 37 41 30 1 + 37 41 31 1 + 37 41 32 1 + 37 41 33 1 + 37 41 34 1 + 37 41 35 1 + 37 41 36 1 + 37 41 37 0.966273 + 37 41 38 0.544006 + 37 41 39 0.0423361 + 37 42 25 0.00154821 + 37 42 26 0.188742 + 37 42 27 0.635968 + 37 42 28 0.932236 + 37 42 29 0.998895 + 37 42 30 1 + 37 42 31 1 + 37 42 32 1 + 37 42 33 1 + 37 42 34 0.998895 + 37 42 35 0.932236 + 37 42 36 0.635968 + 37 42 37 0.188742 + 37 42 38 0.00154821 + 37 43 27 0.000575367 + 37 43 28 0.0743091 + 37 43 29 0.277158 + 37 43 30 0.452189 + 37 43 31 0.539246 + 37 43 32 0.539246 + 37 43 33 0.452189 + 37 43 34 0.277158 + 37 43 35 0.0743091 + 37 43 36 0.000575367 + 38 20 29 0.00330518 + 38 20 30 0.0387924 + 38 20 31 0.0773797 + 38 20 32 0.0773797 + 38 20 33 0.0387924 + 38 20 34 0.00330518 + 38 21 26 0.00154821 + 38 21 27 0.124558 + 38 21 28 0.446726 + 38 21 29 0.72694 + 38 21 30 0.876433 + 38 21 31 0.929166 + 38 21 32 0.929166 + 38 21 33 0.876433 + 38 21 34 0.72694 + 38 21 35 0.446726 + 38 21 36 0.124558 + 38 21 37 0.00154821 + 38 22 25 0.07507 + 38 22 26 0.544006 + 38 22 27 0.93137 + 38 22 28 0.999882 + 38 22 29 1 + 38 22 30 1 + 38 22 31 1 + 38 22 32 1 + 38 22 33 1 + 38 22 34 1 + 38 22 35 0.999882 + 38 22 36 0.93137 + 38 22 37 0.544006 + 38 22 38 0.07507 + 38 23 24 0.181053 + 38 23 25 0.817847 + 38 23 26 0.999435 + 38 23 27 1 + 38 23 28 1 + 38 23 29 1 + 38 23 30 1 + 38 23 31 1 + 38 23 32 1 + 38 23 33 1 + 38 23 34 1 + 38 23 35 1 + 38 23 36 1 + 38 23 37 0.999435 + 38 23 38 0.817847 + 38 23 39 0.181053 + 38 24 23 0.181053 + 38 24 24 0.884086 + 38 24 25 1 + 38 24 26 1 + 38 24 27 1 + 38 24 28 1 + 38 24 29 1 + 38 24 30 1 + 38 24 31 1 + 38 24 32 1 + 38 24 33 1 + 38 24 34 1 + 38 24 35 1 + 38 24 36 1 + 38 24 37 1 + 38 24 38 1 + 38 24 39 0.884086 + 38 24 40 0.181053 + 38 25 22 0.07507 + 38 25 23 0.817847 + 38 25 24 1 + 38 25 25 1 + 38 25 26 1 + 38 25 27 1 + 38 25 28 1 + 38 25 29 1 + 38 25 30 1 + 38 25 31 1 + 38 25 32 1 + 38 25 33 1 + 38 25 34 1 + 38 25 35 1 + 38 25 36 1 + 38 25 37 1 + 38 25 38 1 + 38 25 39 1 + 38 25 40 0.817847 + 38 25 41 0.07507 + 38 26 21 0.00154821 + 38 26 22 0.544006 + 38 26 23 0.999435 + 38 26 24 1 + 38 26 25 1 + 38 26 26 1 + 38 26 27 1 + 38 26 28 1 + 38 26 29 1 + 38 26 30 1 + 38 26 31 1 + 38 26 32 1 + 38 26 33 1 + 38 26 34 1 + 38 26 35 1 + 38 26 36 1 + 38 26 37 1 + 38 26 38 1 + 38 26 39 1 + 38 26 40 0.999435 + 38 26 41 0.544006 + 38 26 42 0.00154821 + 38 27 21 0.124558 + 38 27 22 0.93137 + 38 27 23 1 + 38 27 24 1 + 38 27 25 1 + 38 27 26 1 + 38 27 27 1 + 38 27 28 1 + 38 27 29 1 + 38 27 30 1 + 38 27 31 1 + 38 27 32 1 + 38 27 33 1 + 38 27 34 1 + 38 27 35 1 + 38 27 36 1 + 38 27 37 1 + 38 27 38 1 + 38 27 39 1 + 38 27 40 1 + 38 27 41 0.93137 + 38 27 42 0.124558 + 38 28 21 0.446726 + 38 28 22 0.999882 + 38 28 23 1 + 38 28 24 1 + 38 28 25 1 + 38 28 26 1 + 38 28 27 1 + 38 28 28 1 + 38 28 29 1 + 38 28 30 1 + 38 28 31 1 + 38 28 32 1 + 38 28 33 1 + 38 28 34 1 + 38 28 35 1 + 38 28 36 1 + 38 28 37 1 + 38 28 38 1 + 38 28 39 1 + 38 28 40 1 + 38 28 41 0.999882 + 38 28 42 0.446726 + 38 29 20 0.00330518 + 38 29 21 0.72694 + 38 29 22 1 + 38 29 23 1 + 38 29 24 1 + 38 29 25 1 + 38 29 26 1 + 38 29 27 1 + 38 29 28 1 + 38 29 29 1 + 38 29 30 1 + 38 29 31 1 + 38 29 32 1 + 38 29 33 1 + 38 29 34 1 + 38 29 35 1 + 38 29 36 1 + 38 29 37 1 + 38 29 38 1 + 38 29 39 1 + 38 29 40 1 + 38 29 41 1 + 38 29 42 0.72694 + 38 29 43 0.00330518 + 38 30 20 0.0387924 + 38 30 21 0.876433 + 38 30 22 1 + 38 30 23 1 + 38 30 24 1 + 38 30 25 1 + 38 30 26 1 + 38 30 27 1 + 38 30 28 1 + 38 30 29 1 + 38 30 30 1 + 38 30 31 1 + 38 30 32 1 + 38 30 33 1 + 38 30 34 1 + 38 30 35 1 + 38 30 36 1 + 38 30 37 1 + 38 30 38 1 + 38 30 39 1 + 38 30 40 1 + 38 30 41 1 + 38 30 42 0.876433 + 38 30 43 0.0387924 + 38 31 20 0.0773797 + 38 31 21 0.929166 + 38 31 22 1 + 38 31 23 1 + 38 31 24 1 + 38 31 25 1 + 38 31 26 1 + 38 31 27 1 + 38 31 28 1 + 38 31 29 1 + 38 31 30 1 + 38 31 31 1 + 38 31 32 1 + 38 31 33 1 + 38 31 34 1 + 38 31 35 1 + 38 31 36 1 + 38 31 37 1 + 38 31 38 1 + 38 31 39 1 + 38 31 40 1 + 38 31 41 1 + 38 31 42 0.929166 + 38 31 43 0.0773797 + 38 32 20 0.0773797 + 38 32 21 0.929166 + 38 32 22 1 + 38 32 23 1 + 38 32 24 1 + 38 32 25 1 + 38 32 26 1 + 38 32 27 1 + 38 32 28 1 + 38 32 29 1 + 38 32 30 1 + 38 32 31 1 + 38 32 32 1 + 38 32 33 1 + 38 32 34 1 + 38 32 35 1 + 38 32 36 1 + 38 32 37 1 + 38 32 38 1 + 38 32 39 1 + 38 32 40 1 + 38 32 41 1 + 38 32 42 0.929166 + 38 32 43 0.0773797 + 38 33 20 0.0387924 + 38 33 21 0.876433 + 38 33 22 1 + 38 33 23 1 + 38 33 24 1 + 38 33 25 1 + 38 33 26 1 + 38 33 27 1 + 38 33 28 1 + 38 33 29 1 + 38 33 30 1 + 38 33 31 1 + 38 33 32 1 + 38 33 33 1 + 38 33 34 1 + 38 33 35 1 + 38 33 36 1 + 38 33 37 1 + 38 33 38 1 + 38 33 39 1 + 38 33 40 1 + 38 33 41 1 + 38 33 42 0.876433 + 38 33 43 0.0387924 + 38 34 20 0.00330518 + 38 34 21 0.72694 + 38 34 22 1 + 38 34 23 1 + 38 34 24 1 + 38 34 25 1 + 38 34 26 1 + 38 34 27 1 + 38 34 28 1 + 38 34 29 1 + 38 34 30 1 + 38 34 31 1 + 38 34 32 1 + 38 34 33 1 + 38 34 34 1 + 38 34 35 1 + 38 34 36 1 + 38 34 37 1 + 38 34 38 1 + 38 34 39 1 + 38 34 40 1 + 38 34 41 1 + 38 34 42 0.72694 + 38 34 43 0.00330518 + 38 35 21 0.446726 + 38 35 22 0.999882 + 38 35 23 1 + 38 35 24 1 + 38 35 25 1 + 38 35 26 1 + 38 35 27 1 + 38 35 28 1 + 38 35 29 1 + 38 35 30 1 + 38 35 31 1 + 38 35 32 1 + 38 35 33 1 + 38 35 34 1 + 38 35 35 1 + 38 35 36 1 + 38 35 37 1 + 38 35 38 1 + 38 35 39 1 + 38 35 40 1 + 38 35 41 0.999882 + 38 35 42 0.446726 + 38 36 21 0.124558 + 38 36 22 0.93137 + 38 36 23 1 + 38 36 24 1 + 38 36 25 1 + 38 36 26 1 + 38 36 27 1 + 38 36 28 1 + 38 36 29 1 + 38 36 30 1 + 38 36 31 1 + 38 36 32 1 + 38 36 33 1 + 38 36 34 1 + 38 36 35 1 + 38 36 36 1 + 38 36 37 1 + 38 36 38 1 + 38 36 39 1 + 38 36 40 1 + 38 36 41 0.93137 + 38 36 42 0.124558 + 38 37 21 0.00154821 + 38 37 22 0.544006 + 38 37 23 0.999435 + 38 37 24 1 + 38 37 25 1 + 38 37 26 1 + 38 37 27 1 + 38 37 28 1 + 38 37 29 1 + 38 37 30 1 + 38 37 31 1 + 38 37 32 1 + 38 37 33 1 + 38 37 34 1 + 38 37 35 1 + 38 37 36 1 + 38 37 37 1 + 38 37 38 1 + 38 37 39 1 + 38 37 40 0.999435 + 38 37 41 0.544006 + 38 37 42 0.00154821 + 38 38 22 0.07507 + 38 38 23 0.817847 + 38 38 24 1 + 38 38 25 1 + 38 38 26 1 + 38 38 27 1 + 38 38 28 1 + 38 38 29 1 + 38 38 30 1 + 38 38 31 1 + 38 38 32 1 + 38 38 33 1 + 38 38 34 1 + 38 38 35 1 + 38 38 36 1 + 38 38 37 1 + 38 38 38 1 + 38 38 39 1 + 38 38 40 0.817847 + 38 38 41 0.07507 + 38 39 23 0.181053 + 38 39 24 0.884086 + 38 39 25 1 + 38 39 26 1 + 38 39 27 1 + 38 39 28 1 + 38 39 29 1 + 38 39 30 1 + 38 39 31 1 + 38 39 32 1 + 38 39 33 1 + 38 39 34 1 + 38 39 35 1 + 38 39 36 1 + 38 39 37 1 + 38 39 38 1 + 38 39 39 0.884086 + 38 39 40 0.181053 + 38 40 24 0.181053 + 38 40 25 0.817847 + 38 40 26 0.999435 + 38 40 27 1 + 38 40 28 1 + 38 40 29 1 + 38 40 30 1 + 38 40 31 1 + 38 40 32 1 + 38 40 33 1 + 38 40 34 1 + 38 40 35 1 + 38 40 36 1 + 38 40 37 0.999435 + 38 40 38 0.817847 + 38 40 39 0.181053 + 38 41 25 0.07507 + 38 41 26 0.544006 + 38 41 27 0.93137 + 38 41 28 0.999882 + 38 41 29 1 + 38 41 30 1 + 38 41 31 1 + 38 41 32 1 + 38 41 33 1 + 38 41 34 1 + 38 41 35 0.999882 + 38 41 36 0.93137 + 38 41 37 0.544006 + 38 41 38 0.07507 + 38 42 26 0.00154821 + 38 42 27 0.124558 + 38 42 28 0.446726 + 38 42 29 0.72694 + 38 42 30 0.876433 + 38 42 31 0.929166 + 38 42 32 0.929166 + 38 42 33 0.876433 + 38 42 34 0.72694 + 38 42 35 0.446726 + 38 42 36 0.124558 + 38 42 37 0.00154821 + 38 43 29 0.00330518 + 38 43 30 0.0387924 + 38 43 31 0.0773797 + 38 43 32 0.0773797 + 38 43 33 0.0387924 + 38 43 34 0.00330518 + 39 21 28 0.0180042 + 39 21 29 0.12727 + 39 21 30 0.264178 + 39 21 31 0.350849 + 39 21 32 0.350849 + 39 21 33 0.264178 + 39 21 34 0.12727 + 39 21 35 0.0180042 + 39 22 26 0.0423361 + 39 22 27 0.347021 + 39 22 28 0.734594 + 39 22 29 0.928659 + 39 22 30 0.988961 + 39 22 31 0.999479 + 39 22 32 0.999479 + 39 22 33 0.988961 + 39 22 34 0.928659 + 39 22 35 0.734594 + 39 22 36 0.347021 + 39 22 37 0.0423361 + 39 23 24 0.000326836 + 39 23 25 0.181053 + 39 23 26 0.737155 + 39 23 27 0.985714 + 39 23 28 1 + 39 23 29 1 + 39 23 30 1 + 39 23 31 1 + 39 23 32 1 + 39 23 33 1 + 39 23 34 1 + 39 23 35 1 + 39 23 36 0.985714 + 39 23 37 0.737155 + 39 23 38 0.181053 + 39 23 39 0.000326836 + 39 24 23 0.000326836 + 39 24 24 0.256165 + 39 24 25 0.884086 + 39 24 26 1 + 39 24 27 1 + 39 24 28 1 + 39 24 29 1 + 39 24 30 1 + 39 24 31 1 + 39 24 32 1 + 39 24 33 1 + 39 24 34 1 + 39 24 35 1 + 39 24 36 1 + 39 24 37 1 + 39 24 38 0.884086 + 39 24 39 0.256165 + 39 24 40 0.000326836 + 39 25 23 0.181053 + 39 25 24 0.884086 + 39 25 25 1 + 39 25 26 1 + 39 25 27 1 + 39 25 28 1 + 39 25 29 1 + 39 25 30 1 + 39 25 31 1 + 39 25 32 1 + 39 25 33 1 + 39 25 34 1 + 39 25 35 1 + 39 25 36 1 + 39 25 37 1 + 39 25 38 1 + 39 25 39 0.884086 + 39 25 40 0.181053 + 39 26 22 0.0423361 + 39 26 23 0.737155 + 39 26 24 1 + 39 26 25 1 + 39 26 26 1 + 39 26 27 1 + 39 26 28 1 + 39 26 29 1 + 39 26 30 1 + 39 26 31 1 + 39 26 32 1 + 39 26 33 1 + 39 26 34 1 + 39 26 35 1 + 39 26 36 1 + 39 26 37 1 + 39 26 38 1 + 39 26 39 1 + 39 26 40 0.737155 + 39 26 41 0.0423361 + 39 27 22 0.347021 + 39 27 23 0.985714 + 39 27 24 1 + 39 27 25 1 + 39 27 26 1 + 39 27 27 1 + 39 27 28 1 + 39 27 29 1 + 39 27 30 1 + 39 27 31 1 + 39 27 32 1 + 39 27 33 1 + 39 27 34 1 + 39 27 35 1 + 39 27 36 1 + 39 27 37 1 + 39 27 38 1 + 39 27 39 1 + 39 27 40 0.985714 + 39 27 41 0.347021 + 39 28 21 0.0180042 + 39 28 22 0.734594 + 39 28 23 1 + 39 28 24 1 + 39 28 25 1 + 39 28 26 1 + 39 28 27 1 + 39 28 28 1 + 39 28 29 1 + 39 28 30 1 + 39 28 31 1 + 39 28 32 1 + 39 28 33 1 + 39 28 34 1 + 39 28 35 1 + 39 28 36 1 + 39 28 37 1 + 39 28 38 1 + 39 28 39 1 + 39 28 40 1 + 39 28 41 0.734594 + 39 28 42 0.0180042 + 39 29 21 0.12727 + 39 29 22 0.928659 + 39 29 23 1 + 39 29 24 1 + 39 29 25 1 + 39 29 26 1 + 39 29 27 1 + 39 29 28 1 + 39 29 29 1 + 39 29 30 1 + 39 29 31 1 + 39 29 32 1 + 39 29 33 1 + 39 29 34 1 + 39 29 35 1 + 39 29 36 1 + 39 29 37 1 + 39 29 38 1 + 39 29 39 1 + 39 29 40 1 + 39 29 41 0.928659 + 39 29 42 0.12727 + 39 30 21 0.264178 + 39 30 22 0.988961 + 39 30 23 1 + 39 30 24 1 + 39 30 25 1 + 39 30 26 1 + 39 30 27 1 + 39 30 28 1 + 39 30 29 1 + 39 30 30 1 + 39 30 31 1 + 39 30 32 1 + 39 30 33 1 + 39 30 34 1 + 39 30 35 1 + 39 30 36 1 + 39 30 37 1 + 39 30 38 1 + 39 30 39 1 + 39 30 40 1 + 39 30 41 0.988961 + 39 30 42 0.264178 + 39 31 21 0.350849 + 39 31 22 0.999479 + 39 31 23 1 + 39 31 24 1 + 39 31 25 1 + 39 31 26 1 + 39 31 27 1 + 39 31 28 1 + 39 31 29 1 + 39 31 30 1 + 39 31 31 1 + 39 31 32 1 + 39 31 33 1 + 39 31 34 1 + 39 31 35 1 + 39 31 36 1 + 39 31 37 1 + 39 31 38 1 + 39 31 39 1 + 39 31 40 1 + 39 31 41 0.999479 + 39 31 42 0.350849 + 39 32 21 0.350849 + 39 32 22 0.999479 + 39 32 23 1 + 39 32 24 1 + 39 32 25 1 + 39 32 26 1 + 39 32 27 1 + 39 32 28 1 + 39 32 29 1 + 39 32 30 1 + 39 32 31 1 + 39 32 32 1 + 39 32 33 1 + 39 32 34 1 + 39 32 35 1 + 39 32 36 1 + 39 32 37 1 + 39 32 38 1 + 39 32 39 1 + 39 32 40 1 + 39 32 41 0.999479 + 39 32 42 0.350849 + 39 33 21 0.264178 + 39 33 22 0.988961 + 39 33 23 1 + 39 33 24 1 + 39 33 25 1 + 39 33 26 1 + 39 33 27 1 + 39 33 28 1 + 39 33 29 1 + 39 33 30 1 + 39 33 31 1 + 39 33 32 1 + 39 33 33 1 + 39 33 34 1 + 39 33 35 1 + 39 33 36 1 + 39 33 37 1 + 39 33 38 1 + 39 33 39 1 + 39 33 40 1 + 39 33 41 0.988961 + 39 33 42 0.264178 + 39 34 21 0.12727 + 39 34 22 0.928659 + 39 34 23 1 + 39 34 24 1 + 39 34 25 1 + 39 34 26 1 + 39 34 27 1 + 39 34 28 1 + 39 34 29 1 + 39 34 30 1 + 39 34 31 1 + 39 34 32 1 + 39 34 33 1 + 39 34 34 1 + 39 34 35 1 + 39 34 36 1 + 39 34 37 1 + 39 34 38 1 + 39 34 39 1 + 39 34 40 1 + 39 34 41 0.928659 + 39 34 42 0.12727 + 39 35 21 0.0180042 + 39 35 22 0.734594 + 39 35 23 1 + 39 35 24 1 + 39 35 25 1 + 39 35 26 1 + 39 35 27 1 + 39 35 28 1 + 39 35 29 1 + 39 35 30 1 + 39 35 31 1 + 39 35 32 1 + 39 35 33 1 + 39 35 34 1 + 39 35 35 1 + 39 35 36 1 + 39 35 37 1 + 39 35 38 1 + 39 35 39 1 + 39 35 40 1 + 39 35 41 0.734594 + 39 35 42 0.0180042 + 39 36 22 0.347021 + 39 36 23 0.985714 + 39 36 24 1 + 39 36 25 1 + 39 36 26 1 + 39 36 27 1 + 39 36 28 1 + 39 36 29 1 + 39 36 30 1 + 39 36 31 1 + 39 36 32 1 + 39 36 33 1 + 39 36 34 1 + 39 36 35 1 + 39 36 36 1 + 39 36 37 1 + 39 36 38 1 + 39 36 39 1 + 39 36 40 0.985714 + 39 36 41 0.347021 + 39 37 22 0.0423361 + 39 37 23 0.737155 + 39 37 24 1 + 39 37 25 1 + 39 37 26 1 + 39 37 27 1 + 39 37 28 1 + 39 37 29 1 + 39 37 30 1 + 39 37 31 1 + 39 37 32 1 + 39 37 33 1 + 39 37 34 1 + 39 37 35 1 + 39 37 36 1 + 39 37 37 1 + 39 37 38 1 + 39 37 39 1 + 39 37 40 0.737155 + 39 37 41 0.0423361 + 39 38 23 0.181053 + 39 38 24 0.884086 + 39 38 25 1 + 39 38 26 1 + 39 38 27 1 + 39 38 28 1 + 39 38 29 1 + 39 38 30 1 + 39 38 31 1 + 39 38 32 1 + 39 38 33 1 + 39 38 34 1 + 39 38 35 1 + 39 38 36 1 + 39 38 37 1 + 39 38 38 1 + 39 38 39 0.884086 + 39 38 40 0.181053 + 39 39 23 0.000326836 + 39 39 24 0.256165 + 39 39 25 0.884086 + 39 39 26 1 + 39 39 27 1 + 39 39 28 1 + 39 39 29 1 + 39 39 30 1 + 39 39 31 1 + 39 39 32 1 + 39 39 33 1 + 39 39 34 1 + 39 39 35 1 + 39 39 36 1 + 39 39 37 1 + 39 39 38 0.884086 + 39 39 39 0.256165 + 39 39 40 0.000326836 + 39 40 24 0.000326836 + 39 40 25 0.181053 + 39 40 26 0.737155 + 39 40 27 0.985714 + 39 40 28 1 + 39 40 29 1 + 39 40 30 1 + 39 40 31 1 + 39 40 32 1 + 39 40 33 1 + 39 40 34 1 + 39 40 35 1 + 39 40 36 0.985714 + 39 40 37 0.737155 + 39 40 38 0.181053 + 39 40 39 0.000326836 + 39 41 26 0.0423361 + 39 41 27 0.347021 + 39 41 28 0.734594 + 39 41 29 0.928659 + 39 41 30 0.988961 + 39 41 31 0.999479 + 39 41 32 0.999479 + 39 41 33 0.988961 + 39 41 34 0.928659 + 39 41 35 0.734594 + 39 41 36 0.347021 + 39 41 37 0.0423361 + 39 42 28 0.0180042 + 39 42 29 0.12727 + 39 42 30 0.264178 + 39 42 31 0.350849 + 39 42 32 0.350849 + 39 42 33 0.264178 + 39 42 34 0.12727 + 39 42 35 0.0180042 + 40 22 27 0.00160611 + 40 22 28 0.0778651 + 40 22 29 0.259926 + 40 22 30 0.440876 + 40 22 31 0.544992 + 40 22 32 0.544992 + 40 22 33 0.440876 + 40 22 34 0.259926 + 40 22 35 0.0778651 + 40 22 36 0.00160611 + 40 23 26 0.0757442 + 40 23 27 0.442652 + 40 23 28 0.815054 + 40 23 29 0.964837 + 40 23 30 0.998589 + 40 23 31 1 + 40 23 32 1 + 40 23 33 0.998589 + 40 23 34 0.964837 + 40 23 35 0.815054 + 40 23 36 0.442652 + 40 23 37 0.0757442 + 40 24 24 0.000326836 + 40 24 25 0.181053 + 40 24 26 0.737155 + 40 24 27 0.985714 + 40 24 28 1 + 40 24 29 1 + 40 24 30 1 + 40 24 31 1 + 40 24 32 1 + 40 24 33 1 + 40 24 34 1 + 40 24 35 1 + 40 24 36 0.985714 + 40 24 37 0.737155 + 40 24 38 0.181053 + 40 24 39 0.000326836 + 40 25 24 0.181053 + 40 25 25 0.817847 + 40 25 26 0.999435 + 40 25 27 1 + 40 25 28 1 + 40 25 29 1 + 40 25 30 1 + 40 25 31 1 + 40 25 32 1 + 40 25 33 1 + 40 25 34 1 + 40 25 35 1 + 40 25 36 1 + 40 25 37 0.999435 + 40 25 38 0.817847 + 40 25 39 0.181053 + 40 26 23 0.0757442 + 40 26 24 0.737155 + 40 26 25 0.999435 + 40 26 26 1 + 40 26 27 1 + 40 26 28 1 + 40 26 29 1 + 40 26 30 1 + 40 26 31 1 + 40 26 32 1 + 40 26 33 1 + 40 26 34 1 + 40 26 35 1 + 40 26 36 1 + 40 26 37 1 + 40 26 38 0.999435 + 40 26 39 0.737155 + 40 26 40 0.0757442 + 40 27 22 0.00160611 + 40 27 23 0.442652 + 40 27 24 0.985714 + 40 27 25 1 + 40 27 26 1 + 40 27 27 1 + 40 27 28 1 + 40 27 29 1 + 40 27 30 1 + 40 27 31 1 + 40 27 32 1 + 40 27 33 1 + 40 27 34 1 + 40 27 35 1 + 40 27 36 1 + 40 27 37 1 + 40 27 38 1 + 40 27 39 0.985714 + 40 27 40 0.442652 + 40 27 41 0.00160611 + 40 28 22 0.0778651 + 40 28 23 0.815054 + 40 28 24 1 + 40 28 25 1 + 40 28 26 1 + 40 28 27 1 + 40 28 28 1 + 40 28 29 1 + 40 28 30 1 + 40 28 31 1 + 40 28 32 1 + 40 28 33 1 + 40 28 34 1 + 40 28 35 1 + 40 28 36 1 + 40 28 37 1 + 40 28 38 1 + 40 28 39 1 + 40 28 40 0.815054 + 40 28 41 0.0778651 + 40 29 22 0.259926 + 40 29 23 0.964837 + 40 29 24 1 + 40 29 25 1 + 40 29 26 1 + 40 29 27 1 + 40 29 28 1 + 40 29 29 1 + 40 29 30 1 + 40 29 31 1 + 40 29 32 1 + 40 29 33 1 + 40 29 34 1 + 40 29 35 1 + 40 29 36 1 + 40 29 37 1 + 40 29 38 1 + 40 29 39 1 + 40 29 40 0.964837 + 40 29 41 0.259926 + 40 30 22 0.440876 + 40 30 23 0.998589 + 40 30 24 1 + 40 30 25 1 + 40 30 26 1 + 40 30 27 1 + 40 30 28 1 + 40 30 29 1 + 40 30 30 1 + 40 30 31 1 + 40 30 32 1 + 40 30 33 1 + 40 30 34 1 + 40 30 35 1 + 40 30 36 1 + 40 30 37 1 + 40 30 38 1 + 40 30 39 1 + 40 30 40 0.998589 + 40 30 41 0.440876 + 40 31 22 0.544992 + 40 31 23 1 + 40 31 24 1 + 40 31 25 1 + 40 31 26 1 + 40 31 27 1 + 40 31 28 1 + 40 31 29 1 + 40 31 30 1 + 40 31 31 1 + 40 31 32 1 + 40 31 33 1 + 40 31 34 1 + 40 31 35 1 + 40 31 36 1 + 40 31 37 1 + 40 31 38 1 + 40 31 39 1 + 40 31 40 1 + 40 31 41 0.544992 + 40 32 22 0.544992 + 40 32 23 1 + 40 32 24 1 + 40 32 25 1 + 40 32 26 1 + 40 32 27 1 + 40 32 28 1 + 40 32 29 1 + 40 32 30 1 + 40 32 31 1 + 40 32 32 1 + 40 32 33 1 + 40 32 34 1 + 40 32 35 1 + 40 32 36 1 + 40 32 37 1 + 40 32 38 1 + 40 32 39 1 + 40 32 40 1 + 40 32 41 0.544992 + 40 33 22 0.440876 + 40 33 23 0.998589 + 40 33 24 1 + 40 33 25 1 + 40 33 26 1 + 40 33 27 1 + 40 33 28 1 + 40 33 29 1 + 40 33 30 1 + 40 33 31 1 + 40 33 32 1 + 40 33 33 1 + 40 33 34 1 + 40 33 35 1 + 40 33 36 1 + 40 33 37 1 + 40 33 38 1 + 40 33 39 1 + 40 33 40 0.998589 + 40 33 41 0.440876 + 40 34 22 0.259926 + 40 34 23 0.964837 + 40 34 24 1 + 40 34 25 1 + 40 34 26 1 + 40 34 27 1 + 40 34 28 1 + 40 34 29 1 + 40 34 30 1 + 40 34 31 1 + 40 34 32 1 + 40 34 33 1 + 40 34 34 1 + 40 34 35 1 + 40 34 36 1 + 40 34 37 1 + 40 34 38 1 + 40 34 39 1 + 40 34 40 0.964837 + 40 34 41 0.259926 + 40 35 22 0.0778651 + 40 35 23 0.815054 + 40 35 24 1 + 40 35 25 1 + 40 35 26 1 + 40 35 27 1 + 40 35 28 1 + 40 35 29 1 + 40 35 30 1 + 40 35 31 1 + 40 35 32 1 + 40 35 33 1 + 40 35 34 1 + 40 35 35 1 + 40 35 36 1 + 40 35 37 1 + 40 35 38 1 + 40 35 39 1 + 40 35 40 0.815054 + 40 35 41 0.0778651 + 40 36 22 0.00160611 + 40 36 23 0.442652 + 40 36 24 0.985714 + 40 36 25 1 + 40 36 26 1 + 40 36 27 1 + 40 36 28 1 + 40 36 29 1 + 40 36 30 1 + 40 36 31 1 + 40 36 32 1 + 40 36 33 1 + 40 36 34 1 + 40 36 35 1 + 40 36 36 1 + 40 36 37 1 + 40 36 38 1 + 40 36 39 0.985714 + 40 36 40 0.442652 + 40 36 41 0.00160611 + 40 37 23 0.0757442 + 40 37 24 0.737155 + 40 37 25 0.999435 + 40 37 26 1 + 40 37 27 1 + 40 37 28 1 + 40 37 29 1 + 40 37 30 1 + 40 37 31 1 + 40 37 32 1 + 40 37 33 1 + 40 37 34 1 + 40 37 35 1 + 40 37 36 1 + 40 37 37 1 + 40 37 38 0.999435 + 40 37 39 0.737155 + 40 37 40 0.0757442 + 40 38 24 0.181053 + 40 38 25 0.817847 + 40 38 26 0.999435 + 40 38 27 1 + 40 38 28 1 + 40 38 29 1 + 40 38 30 1 + 40 38 31 1 + 40 38 32 1 + 40 38 33 1 + 40 38 34 1 + 40 38 35 1 + 40 38 36 1 + 40 38 37 0.999435 + 40 38 38 0.817847 + 40 38 39 0.181053 + 40 39 24 0.000326836 + 40 39 25 0.181053 + 40 39 26 0.737155 + 40 39 27 0.985714 + 40 39 28 1 + 40 39 29 1 + 40 39 30 1 + 40 39 31 1 + 40 39 32 1 + 40 39 33 1 + 40 39 34 1 + 40 39 35 1 + 40 39 36 0.985714 + 40 39 37 0.737155 + 40 39 38 0.181053 + 40 39 39 0.000326836 + 40 40 26 0.0757442 + 40 40 27 0.442652 + 40 40 28 0.815054 + 40 40 29 0.964837 + 40 40 30 0.998589 + 40 40 31 1 + 40 40 32 1 + 40 40 33 0.998589 + 40 40 34 0.964837 + 40 40 35 0.815054 + 40 40 36 0.442652 + 40 40 37 0.0757442 + 40 41 27 0.00160611 + 40 41 28 0.0778651 + 40 41 29 0.259926 + 40 41 30 0.440876 + 40 41 31 0.544992 + 40 41 32 0.544992 + 40 41 33 0.440876 + 40 41 34 0.259926 + 40 41 35 0.0778651 + 40 41 36 0.00160611 + 41 22 30 0.0001391 + 41 22 31 0.00361638 + 41 22 32 0.00361638 + 41 22 33 0.0001391 + 41 23 27 0.00160611 + 41 23 28 0.0778651 + 41 23 29 0.259926 + 41 23 30 0.440876 + 41 23 31 0.544992 + 41 23 32 0.544992 + 41 23 33 0.440876 + 41 23 34 0.259926 + 41 23 35 0.0778651 + 41 23 36 0.00160611 + 41 24 26 0.0423361 + 41 24 27 0.347021 + 41 24 28 0.734594 + 41 24 29 0.928659 + 41 24 30 0.988961 + 41 24 31 0.999479 + 41 24 32 0.999479 + 41 24 33 0.988961 + 41 24 34 0.928659 + 41 24 35 0.734594 + 41 24 36 0.347021 + 41 24 37 0.0423361 + 41 25 25 0.07507 + 41 25 26 0.544006 + 41 25 27 0.93137 + 41 25 28 0.999882 + 41 25 29 1 + 41 25 30 1 + 41 25 31 1 + 41 25 32 1 + 41 25 33 1 + 41 25 34 1 + 41 25 35 0.999882 + 41 25 36 0.93137 + 41 25 37 0.544006 + 41 25 38 0.07507 + 41 26 24 0.0423361 + 41 26 25 0.544006 + 41 26 26 0.966273 + 41 26 27 1 + 41 26 28 1 + 41 26 29 1 + 41 26 30 1 + 41 26 31 1 + 41 26 32 1 + 41 26 33 1 + 41 26 34 1 + 41 26 35 1 + 41 26 36 1 + 41 26 37 0.966273 + 41 26 38 0.544006 + 41 26 39 0.0423361 + 41 27 23 0.00160611 + 41 27 24 0.347021 + 41 27 25 0.93137 + 41 27 26 1 + 41 27 27 1 + 41 27 28 1 + 41 27 29 1 + 41 27 30 1 + 41 27 31 1 + 41 27 32 1 + 41 27 33 1 + 41 27 34 1 + 41 27 35 1 + 41 27 36 1 + 41 27 37 1 + 41 27 38 0.93137 + 41 27 39 0.347021 + 41 27 40 0.00160611 + 41 28 23 0.0778651 + 41 28 24 0.734594 + 41 28 25 0.999882 + 41 28 26 1 + 41 28 27 1 + 41 28 28 1 + 41 28 29 1 + 41 28 30 1 + 41 28 31 1 + 41 28 32 1 + 41 28 33 1 + 41 28 34 1 + 41 28 35 1 + 41 28 36 1 + 41 28 37 1 + 41 28 38 0.999882 + 41 28 39 0.734594 + 41 28 40 0.0778651 + 41 29 23 0.259926 + 41 29 24 0.928659 + 41 29 25 1 + 41 29 26 1 + 41 29 27 1 + 41 29 28 1 + 41 29 29 1 + 41 29 30 1 + 41 29 31 1 + 41 29 32 1 + 41 29 33 1 + 41 29 34 1 + 41 29 35 1 + 41 29 36 1 + 41 29 37 1 + 41 29 38 1 + 41 29 39 0.928659 + 41 29 40 0.259926 + 41 30 22 0.0001391 + 41 30 23 0.440876 + 41 30 24 0.988961 + 41 30 25 1 + 41 30 26 1 + 41 30 27 1 + 41 30 28 1 + 41 30 29 1 + 41 30 30 1 + 41 30 31 1 + 41 30 32 1 + 41 30 33 1 + 41 30 34 1 + 41 30 35 1 + 41 30 36 1 + 41 30 37 1 + 41 30 38 1 + 41 30 39 0.988961 + 41 30 40 0.440876 + 41 30 41 0.0001391 + 41 31 22 0.00361638 + 41 31 23 0.544992 + 41 31 24 0.999479 + 41 31 25 1 + 41 31 26 1 + 41 31 27 1 + 41 31 28 1 + 41 31 29 1 + 41 31 30 1 + 41 31 31 1 + 41 31 32 1 + 41 31 33 1 + 41 31 34 1 + 41 31 35 1 + 41 31 36 1 + 41 31 37 1 + 41 31 38 1 + 41 31 39 0.999479 + 41 31 40 0.544992 + 41 31 41 0.00361638 + 41 32 22 0.00361638 + 41 32 23 0.544992 + 41 32 24 0.999479 + 41 32 25 1 + 41 32 26 1 + 41 32 27 1 + 41 32 28 1 + 41 32 29 1 + 41 32 30 1 + 41 32 31 1 + 41 32 32 1 + 41 32 33 1 + 41 32 34 1 + 41 32 35 1 + 41 32 36 1 + 41 32 37 1 + 41 32 38 1 + 41 32 39 0.999479 + 41 32 40 0.544992 + 41 32 41 0.00361638 + 41 33 22 0.0001391 + 41 33 23 0.440876 + 41 33 24 0.988961 + 41 33 25 1 + 41 33 26 1 + 41 33 27 1 + 41 33 28 1 + 41 33 29 1 + 41 33 30 1 + 41 33 31 1 + 41 33 32 1 + 41 33 33 1 + 41 33 34 1 + 41 33 35 1 + 41 33 36 1 + 41 33 37 1 + 41 33 38 1 + 41 33 39 0.988961 + 41 33 40 0.440876 + 41 33 41 0.0001391 + 41 34 23 0.259926 + 41 34 24 0.928659 + 41 34 25 1 + 41 34 26 1 + 41 34 27 1 + 41 34 28 1 + 41 34 29 1 + 41 34 30 1 + 41 34 31 1 + 41 34 32 1 + 41 34 33 1 + 41 34 34 1 + 41 34 35 1 + 41 34 36 1 + 41 34 37 1 + 41 34 38 1 + 41 34 39 0.928659 + 41 34 40 0.259926 + 41 35 23 0.0778651 + 41 35 24 0.734594 + 41 35 25 0.999882 + 41 35 26 1 + 41 35 27 1 + 41 35 28 1 + 41 35 29 1 + 41 35 30 1 + 41 35 31 1 + 41 35 32 1 + 41 35 33 1 + 41 35 34 1 + 41 35 35 1 + 41 35 36 1 + 41 35 37 1 + 41 35 38 0.999882 + 41 35 39 0.734594 + 41 35 40 0.0778651 + 41 36 23 0.00160611 + 41 36 24 0.347021 + 41 36 25 0.93137 + 41 36 26 1 + 41 36 27 1 + 41 36 28 1 + 41 36 29 1 + 41 36 30 1 + 41 36 31 1 + 41 36 32 1 + 41 36 33 1 + 41 36 34 1 + 41 36 35 1 + 41 36 36 1 + 41 36 37 1 + 41 36 38 0.93137 + 41 36 39 0.347021 + 41 36 40 0.00160611 + 41 37 24 0.0423361 + 41 37 25 0.544006 + 41 37 26 0.966273 + 41 37 27 1 + 41 37 28 1 + 41 37 29 1 + 41 37 30 1 + 41 37 31 1 + 41 37 32 1 + 41 37 33 1 + 41 37 34 1 + 41 37 35 1 + 41 37 36 1 + 41 37 37 0.966273 + 41 37 38 0.544006 + 41 37 39 0.0423361 + 41 38 25 0.07507 + 41 38 26 0.544006 + 41 38 27 0.93137 + 41 38 28 0.999882 + 41 38 29 1 + 41 38 30 1 + 41 38 31 1 + 41 38 32 1 + 41 38 33 1 + 41 38 34 1 + 41 38 35 0.999882 + 41 38 36 0.93137 + 41 38 37 0.544006 + 41 38 38 0.07507 + 41 39 26 0.0423361 + 41 39 27 0.347021 + 41 39 28 0.734594 + 41 39 29 0.928659 + 41 39 30 0.988961 + 41 39 31 0.999479 + 41 39 32 0.999479 + 41 39 33 0.988961 + 41 39 34 0.928659 + 41 39 35 0.734594 + 41 39 36 0.347021 + 41 39 37 0.0423361 + 41 40 27 0.00160611 + 41 40 28 0.0778651 + 41 40 29 0.259926 + 41 40 30 0.440876 + 41 40 31 0.544992 + 41 40 32 0.544992 + 41 40 33 0.440876 + 41 40 34 0.259926 + 41 40 35 0.0778651 + 41 40 36 0.00160611 + 41 41 30 0.0001391 + 41 41 31 0.00361638 + 41 41 32 0.00361638 + 41 41 33 0.0001391 + 42 24 28 0.0180042 + 42 24 29 0.12727 + 42 24 30 0.264178 + 42 24 31 0.350849 + 42 24 32 0.350849 + 42 24 33 0.264178 + 42 24 34 0.12727 + 42 24 35 0.0180042 + 42 25 26 0.00154821 + 42 25 27 0.124558 + 42 25 28 0.446726 + 42 25 29 0.72694 + 42 25 30 0.876433 + 42 25 31 0.929166 + 42 25 32 0.929166 + 42 25 33 0.876433 + 42 25 34 0.72694 + 42 25 35 0.446726 + 42 25 36 0.124558 + 42 25 37 0.00154821 + 42 26 25 0.00154821 + 42 26 26 0.188742 + 42 26 27 0.635968 + 42 26 28 0.932236 + 42 26 29 0.998895 + 42 26 30 1 + 42 26 31 1 + 42 26 32 1 + 42 26 33 1 + 42 26 34 0.998895 + 42 26 35 0.932236 + 42 26 36 0.635968 + 42 26 37 0.188742 + 42 26 38 0.00154821 + 42 27 25 0.124558 + 42 27 26 0.635968 + 42 27 27 0.969751 + 42 27 28 1 + 42 27 29 1 + 42 27 30 1 + 42 27 31 1 + 42 27 32 1 + 42 27 33 1 + 42 27 34 1 + 42 27 35 1 + 42 27 36 0.969751 + 42 27 37 0.635968 + 42 27 38 0.124558 + 42 28 24 0.0180042 + 42 28 25 0.446726 + 42 28 26 0.932236 + 42 28 27 1 + 42 28 28 1 + 42 28 29 1 + 42 28 30 1 + 42 28 31 1 + 42 28 32 1 + 42 28 33 1 + 42 28 34 1 + 42 28 35 1 + 42 28 36 1 + 42 28 37 0.932236 + 42 28 38 0.446726 + 42 28 39 0.0180042 + 42 29 24 0.12727 + 42 29 25 0.72694 + 42 29 26 0.998895 + 42 29 27 1 + 42 29 28 1 + 42 29 29 1 + 42 29 30 1 + 42 29 31 1 + 42 29 32 1 + 42 29 33 1 + 42 29 34 1 + 42 29 35 1 + 42 29 36 1 + 42 29 37 0.998895 + 42 29 38 0.72694 + 42 29 39 0.12727 + 42 30 24 0.264178 + 42 30 25 0.876433 + 42 30 26 1 + 42 30 27 1 + 42 30 28 1 + 42 30 29 1 + 42 30 30 1 + 42 30 31 1 + 42 30 32 1 + 42 30 33 1 + 42 30 34 1 + 42 30 35 1 + 42 30 36 1 + 42 30 37 1 + 42 30 38 0.876433 + 42 30 39 0.264178 + 42 31 24 0.350849 + 42 31 25 0.929166 + 42 31 26 1 + 42 31 27 1 + 42 31 28 1 + 42 31 29 1 + 42 31 30 1 + 42 31 31 1 + 42 31 32 1 + 42 31 33 1 + 42 31 34 1 + 42 31 35 1 + 42 31 36 1 + 42 31 37 1 + 42 31 38 0.929166 + 42 31 39 0.350849 + 42 32 24 0.350849 + 42 32 25 0.929166 + 42 32 26 1 + 42 32 27 1 + 42 32 28 1 + 42 32 29 1 + 42 32 30 1 + 42 32 31 1 + 42 32 32 1 + 42 32 33 1 + 42 32 34 1 + 42 32 35 1 + 42 32 36 1 + 42 32 37 1 + 42 32 38 0.929166 + 42 32 39 0.350849 + 42 33 24 0.264178 + 42 33 25 0.876433 + 42 33 26 1 + 42 33 27 1 + 42 33 28 1 + 42 33 29 1 + 42 33 30 1 + 42 33 31 1 + 42 33 32 1 + 42 33 33 1 + 42 33 34 1 + 42 33 35 1 + 42 33 36 1 + 42 33 37 1 + 42 33 38 0.876433 + 42 33 39 0.264178 + 42 34 24 0.12727 + 42 34 25 0.72694 + 42 34 26 0.998895 + 42 34 27 1 + 42 34 28 1 + 42 34 29 1 + 42 34 30 1 + 42 34 31 1 + 42 34 32 1 + 42 34 33 1 + 42 34 34 1 + 42 34 35 1 + 42 34 36 1 + 42 34 37 0.998895 + 42 34 38 0.72694 + 42 34 39 0.12727 + 42 35 24 0.0180042 + 42 35 25 0.446726 + 42 35 26 0.932236 + 42 35 27 1 + 42 35 28 1 + 42 35 29 1 + 42 35 30 1 + 42 35 31 1 + 42 35 32 1 + 42 35 33 1 + 42 35 34 1 + 42 35 35 1 + 42 35 36 1 + 42 35 37 0.932236 + 42 35 38 0.446726 + 42 35 39 0.0180042 + 42 36 25 0.124558 + 42 36 26 0.635968 + 42 36 27 0.969751 + 42 36 28 1 + 42 36 29 1 + 42 36 30 1 + 42 36 31 1 + 42 36 32 1 + 42 36 33 1 + 42 36 34 1 + 42 36 35 1 + 42 36 36 0.969751 + 42 36 37 0.635968 + 42 36 38 0.124558 + 42 37 25 0.00154821 + 42 37 26 0.188742 + 42 37 27 0.635968 + 42 37 28 0.932236 + 42 37 29 0.998895 + 42 37 30 1 + 42 37 31 1 + 42 37 32 1 + 42 37 33 1 + 42 37 34 0.998895 + 42 37 35 0.932236 + 42 37 36 0.635968 + 42 37 37 0.188742 + 42 37 38 0.00154821 + 42 38 26 0.00154821 + 42 38 27 0.124558 + 42 38 28 0.446726 + 42 38 29 0.72694 + 42 38 30 0.876433 + 42 38 31 0.929166 + 42 38 32 0.929166 + 42 38 33 0.876433 + 42 38 34 0.72694 + 42 38 35 0.446726 + 42 38 36 0.124558 + 42 38 37 0.00154821 + 42 39 28 0.0180042 + 42 39 29 0.12727 + 42 39 30 0.264178 + 42 39 31 0.350849 + 42 39 32 0.350849 + 42 39 33 0.264178 + 42 39 34 0.12727 + 42 39 35 0.0180042 + 43 25 29 0.00330518 + 43 25 30 0.0387924 + 43 25 31 0.0773797 + 43 25 32 0.0773797 + 43 25 33 0.0387924 + 43 25 34 0.00330518 + 43 26 27 0.000575367 + 43 26 28 0.0743091 + 43 26 29 0.277158 + 43 26 30 0.452189 + 43 26 31 0.539246 + 43 26 32 0.539246 + 43 26 33 0.452189 + 43 26 34 0.277158 + 43 26 35 0.0743091 + 43 26 36 0.000575367 + 43 27 26 0.000575367 + 43 27 27 0.12736 + 43 27 28 0.452189 + 43 27 29 0.711413 + 43 27 30 0.873392 + 43 27 31 0.933984 + 43 27 32 0.933984 + 43 27 33 0.873392 + 43 27 34 0.711413 + 43 27 35 0.452189 + 43 27 36 0.12736 + 43 27 37 0.000575367 + 43 28 26 0.0743091 + 43 28 27 0.452189 + 43 28 28 0.795409 + 43 28 29 0.977321 + 43 28 30 0.999999 + 43 28 31 1 + 43 28 32 1 + 43 28 33 0.999999 + 43 28 34 0.977321 + 43 28 35 0.795409 + 43 28 36 0.452189 + 43 28 37 0.0743091 + 43 29 25 0.00330518 + 43 29 26 0.277158 + 43 29 27 0.711413 + 43 29 28 0.977321 + 43 29 29 1 + 43 29 30 1 + 43 29 31 1 + 43 29 32 1 + 43 29 33 1 + 43 29 34 1 + 43 29 35 0.977321 + 43 29 36 0.711413 + 43 29 37 0.277158 + 43 29 38 0.00330518 + 43 30 25 0.0387924 + 43 30 26 0.452189 + 43 30 27 0.873392 + 43 30 28 0.999999 + 43 30 29 1 + 43 30 30 1 + 43 30 31 1 + 43 30 32 1 + 43 30 33 1 + 43 30 34 1 + 43 30 35 0.999999 + 43 30 36 0.873392 + 43 30 37 0.452189 + 43 30 38 0.0387924 + 43 31 25 0.0773797 + 43 31 26 0.539246 + 43 31 27 0.933984 + 43 31 28 1 + 43 31 29 1 + 43 31 30 1 + 43 31 31 1 + 43 31 32 1 + 43 31 33 1 + 43 31 34 1 + 43 31 35 1 + 43 31 36 0.933984 + 43 31 37 0.539246 + 43 31 38 0.0773797 + 43 32 25 0.0773797 + 43 32 26 0.539246 + 43 32 27 0.933984 + 43 32 28 1 + 43 32 29 1 + 43 32 30 1 + 43 32 31 1 + 43 32 32 1 + 43 32 33 1 + 43 32 34 1 + 43 32 35 1 + 43 32 36 0.933984 + 43 32 37 0.539246 + 43 32 38 0.0773797 + 43 33 25 0.0387924 + 43 33 26 0.452189 + 43 33 27 0.873392 + 43 33 28 0.999999 + 43 33 29 1 + 43 33 30 1 + 43 33 31 1 + 43 33 32 1 + 43 33 33 1 + 43 33 34 1 + 43 33 35 0.999999 + 43 33 36 0.873392 + 43 33 37 0.452189 + 43 33 38 0.0387924 + 43 34 25 0.00330518 + 43 34 26 0.277158 + 43 34 27 0.711413 + 43 34 28 0.977321 + 43 34 29 1 + 43 34 30 1 + 43 34 31 1 + 43 34 32 1 + 43 34 33 1 + 43 34 34 1 + 43 34 35 0.977321 + 43 34 36 0.711413 + 43 34 37 0.277158 + 43 34 38 0.00330518 + 43 35 26 0.0743091 + 43 35 27 0.452189 + 43 35 28 0.795409 + 43 35 29 0.977321 + 43 35 30 0.999999 + 43 35 31 1 + 43 35 32 1 + 43 35 33 0.999999 + 43 35 34 0.977321 + 43 35 35 0.795409 + 43 35 36 0.452189 + 43 35 37 0.0743091 + 43 36 26 0.000575367 + 43 36 27 0.12736 + 43 36 28 0.452189 + 43 36 29 0.711413 + 43 36 30 0.873392 + 43 36 31 0.933984 + 43 36 32 0.933984 + 43 36 33 0.873392 + 43 36 34 0.711413 + 43 36 35 0.452189 + 43 36 36 0.12736 + 43 36 37 0.000575367 + 43 37 27 0.000575367 + 43 37 28 0.0743091 + 43 37 29 0.277158 + 43 37 30 0.452189 + 43 37 31 0.539246 + 43 37 32 0.539246 + 43 37 33 0.452189 + 43 37 34 0.277158 + 43 37 35 0.0743091 + 43 37 36 0.000575367 + 43 38 29 0.00330518 + 43 38 30 0.0387924 + 43 38 31 0.0773797 + 43 38 32 0.0773797 + 43 38 33 0.0387924 + 43 38 34 0.00330518 + 44 27 30 0.00768648 + 44 27 31 0.0310217 + 44 27 32 0.0310217 + 44 27 33 0.00768648 + 44 28 28 0.00114247 + 44 28 29 0.0710269 + 44 28 30 0.213322 + 44 28 31 0.294975 + 44 28 32 0.294975 + 44 28 33 0.213322 + 44 28 34 0.0710269 + 44 28 35 0.00114247 + 44 29 28 0.0710269 + 44 29 29 0.294975 + 44 29 30 0.456675 + 44 29 31 0.536741 + 44 29 32 0.536741 + 44 29 33 0.456675 + 44 29 34 0.294975 + 44 29 35 0.0710269 + 44 30 27 0.00768648 + 44 30 28 0.213322 + 44 30 29 0.456675 + 44 30 30 0.616297 + 44 30 31 0.695354 + 44 30 32 0.695354 + 44 30 33 0.616297 + 44 30 34 0.456675 + 44 30 35 0.213322 + 44 30 36 0.00768648 + 44 31 27 0.0310217 + 44 31 28 0.294975 + 44 31 29 0.536741 + 44 31 30 0.695354 + 44 31 31 0.773921 + 44 31 32 0.773921 + 44 31 33 0.695354 + 44 31 34 0.536741 + 44 31 35 0.294975 + 44 31 36 0.0310217 + 44 32 27 0.0310217 + 44 32 28 0.294975 + 44 32 29 0.536741 + 44 32 30 0.695354 + 44 32 31 0.773921 + 44 32 32 0.773921 + 44 32 33 0.695354 + 44 32 34 0.536741 + 44 32 35 0.294975 + 44 32 36 0.0310217 + 44 33 27 0.00768648 + 44 33 28 0.213322 + 44 33 29 0.456675 + 44 33 30 0.616297 + 44 33 31 0.695354 + 44 33 32 0.695354 + 44 33 33 0.616297 + 44 33 34 0.456675 + 44 33 35 0.213322 + 44 33 36 0.00768648 + 44 34 28 0.0710269 + 44 34 29 0.294975 + 44 34 30 0.456675 + 44 34 31 0.536741 + 44 34 32 0.536741 + 44 34 33 0.456675 + 44 34 34 0.294975 + 44 34 35 0.0710269 + 44 35 28 0.00114247 + 44 35 29 0.0710269 + 44 35 30 0.213322 + 44 35 31 0.294975 + 44 35 32 0.294975 + 44 35 33 0.213322 + 44 35 34 0.0710269 + 44 35 35 0.00114247 + 44 36 30 0.00768648 + 44 36 31 0.0310217 + 44 36 32 0.0310217 + 44 36 33 0.00768648 From d257a2980713b154c6b4cd0ee554f291769d6c09 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Tue, 1 Oct 2024 21:47:06 -0700 Subject: [PATCH 21/29] did cleaning for tests --- src/incflo.cpp | 4 +++- src/incflo_apply_predictor.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/incflo.cpp b/src/incflo.cpp index b806f4be3..c6189c9ad 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -156,9 +156,11 @@ void incflo::Evolve() printGridSummary(amrex::OutStream(), 0, finest_level); } } + if(m_vof_advect_tracer){ get_volume_of_fluid()->output_droplet(m_cur_time,m_nstep); // get_volume_of_fluid()->apply_velocity_field(m_cur_time,m_nstep); - if (writeNow()){ + } + if (writeNow()&& m_vof_advect_tracer){ get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); get_volume_of_fluid()->write_tecplot_surface(m_cur_time,m_nstep); } diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index fb7115f91..98d04f99a 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -224,7 +224,7 @@ void incflo::ApplyPredictor (bool incremental_projection) #endif // use vof to advect tracer - if (!incremental_projection) + if (!incremental_projection && m_vof_advect_tracer) tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), GetVecOfConstPtrs(w_mac))); From 7109fd1d7c52482d87f427effb8808a8148cae8a Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Wed, 2 Oct 2024 14:55:24 -0700 Subject: [PATCH 22/29] correct lid_drven_cavity input --- test_3d/benchmark.lid_driven_cavity | 1 - 1 file changed, 1 deletion(-) diff --git a/test_3d/benchmark.lid_driven_cavity b/test_3d/benchmark.lid_driven_cavity index 4f63a6fe1..990f46e13 100644 --- a/test_3d/benchmark.lid_driven_cavity +++ b/test_3d/benchmark.lid_driven_cavity @@ -32,7 +32,6 @@ incflo.mu = 1000. # Dynamic viscosity coefficient #.......................................# amr.n_cell = 128 128 8 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 64 64 8 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # From cee17373074fe22afaaba3670a2915332beb24dd Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 4 Oct 2024 08:37:30 -0700 Subject: [PATCH 23/29] clean bugs for ccproj based VOF --- ...ncflo_compute_MAC_projected_velocities.cpp | 52 +- .../incflo_compute_advection_term.cpp | 2 +- src/incflo_compute_forces.cpp | 618 ++++---- src/incflo_update_density.cpp | 3 + src/prob/prob_init_fluid.cpp | 10 +- src/vof/VolumeOfFluid.cpp | 1284 ++++++++--------- test_3d/inputs.droplet | 8 +- 7 files changed, 991 insertions(+), 986 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index 0ba9aae1a..0d5b69619 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -180,49 +180,49 @@ incflo::compute_MAC_projected_velocities ( //add surface tension if(m_vof_advect_tracer && m_use_cc_proj) get_volume_of_fluid ()->velocity_face_source(lev,0.5*l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), - AMREX_D_DECL(nullptr, nullptr, nullptr)); + AMREX_D_DECL(nullptr, nullptr, nullptr)); if(0){ //The following is only used for testing the pure advection of VOF algorithm -//Average the cell-centered velocity to face center as MAC velocity +//Average the cell-centered velocity to face center as MAC velocity #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(*vel[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, Box const& ybx = mfi.nodaltilebox(1);, - Box const& zbx = mfi.nodaltilebox(2);); - Array4 const& velocity = vel[lev]->const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = u_mac[lev]->array(mfi);, - Array4 const& yfv = v_mac[lev]->array(mfi);, - Array4 const& zfv = w_mac[lev]->array(mfi);); - AMREX_D_TERM( + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& velocity = vel[lev]->const_array(mfi); + AMREX_D_TERM(Array4 const& xfv = u_mac[lev]->array(mfi);, + Array4 const& yfv = v_mac[lev]->array(mfi);, + Array4 const& zfv = w_mac[lev]->array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - xfv(i,j,k) = .5*(velocity(i,j,k,0)+velocity(i-1,j,k,0)); - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) = .5*(velocity(i,j,k,0)+velocity(i-1,j,k,0)); + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - yfv(i,j,k) = .5*(velocity(i,j,k,1)+velocity(i,j-1,k,1)); - });, + yfv(i,j,k) = .5*(velocity(i,j,k,1)+velocity(i,j-1,k,1)); + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - zfv(i,j,k) = .5*(velocity(i,j,k,2)+velocity(i,j,k-1,2)); + zfv(i,j,k) = .5*(velocity(i,j,k,2)+velocity(i,j,k-1,2)); }); - ) // end AMREX_D_TERM - - } - return; + ) // end AMREX_D_TERM + + } + return; }//test - } + } Vector > mac_vec(finest_level+1); for (int lev=0; lev <= finest_level; ++lev) diff --git a/src/convection/incflo_compute_advection_term.cpp b/src/convection/incflo_compute_advection_term.cpp index 47614d7c3..85bd4207f 100644 --- a/src/convection/incflo_compute_advection_term.cpp +++ b/src/convection/incflo_compute_advection_term.cpp @@ -139,7 +139,7 @@ incflo::compute_convective_term (Vector const& conv_u, // and compute the tracer forcing terms for the first time if (m_advection_type != "MOL") { - compute_vel_forces(vel_forces, vel, density, tracer, tracer); + compute_vel_forces(vel_forces, vel, density, tracer, tracer, true, true); if (m_godunov_include_diff_in_forcing) { diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index ec13e68a8..0aab79415 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -41,7 +41,7 @@ void incflo::compute_vel_forces (Vector const& vel_forces, Vector const& tracer_old, Vector const& tracer_new, bool include_pressure_gradient, - bool include_SF) + bool include_SF) { for (int lev = 0; lev <= finest_level; ++lev) compute_vel_forces_on_level (lev, *vel_forces[lev], *velocity[lev], *density[lev], @@ -55,7 +55,7 @@ void incflo::compute_vel_forces_on_level (int lev, const MultiFab& tracer_old, const MultiFab& tracer_new, bool include_pressure_gradient, - bool include_SF) + bool include_SF) { GpuArray l_gravity{m_gravity[0],m_gravity[1],m_gravity[2]}; GpuArray l_gp0{m_gp0[0], m_gp0[1], m_gp0[2]}; @@ -150,262 +150,262 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } -/////////////////////////////////////////////////////////////////////////// - // add surface tension - // surface tension = sigma*kappa*grad(VOF)/rho - // sigma: surface tension coefficient - // kappa: curvature of the interface - // grad(VOF): gradient of VOF field variable - // rho: density - - //fixme: we just consider the surface tension for first tracer +/////////////////////////////////////////////////////////////////////////// + // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + + //fixme: we just consider the surface tension for first tracer if (m_vof_advect_tracer && m_sigma[0]!=0.&&!m_use_cc_proj&&include_SF){ - - VolumeOfFluid* vof_p = get_volume_of_fluid (); - - //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and - // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. - //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. - // the node-centered SF is finally averaged to cell center. - //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). - //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - - int choice = 3; - - - const auto& ba = density.boxArray(); + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); const auto& dm = density.DistributionMap(); const auto& fact = density.Factory(); Array face_val{AMREX_D_DECL( - MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), dm, 1, 0, MFInfo(), fact))}; - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); if (choice==1) { - // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. - // The cell-centered force is then obtained by averaging the face-centered value. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM( - Box const& xbx = surroundingNodes(bx,0);, - Box const& ybx = surroundingNodes(bx,1);, - Box const& zbx = surroundingNodes(bx,2);); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - AMREX_D_TERM( + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - // immediately calculate the cell-centered surface tension force using the face-centered value - // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., - // xbx, ybx, zbx) for cell faces in the beginning. - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - }); - } - } + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } else if (choice ==2){ // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. // The face-centered values are then averaged to the cell node. - // Finally, the nodal values are averaged to the cell center. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then - // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the - // repeated calculation of face-centered values at cell faces which are shared by two tiles. - AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, Box const& ybx = mfi.nodaltilebox(1);, - Box const& zbx = mfi.nodaltilebox(2);); - Array4 const& tra = tracer_new.const_array(mfi); + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - - AMREX_D_TERM( + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - } + ) // end AMREX_D_TERM + + } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - AMREX_D_TERM( - Box const& xvbx = surroundingNodes(vbx,0);, - Box const& yvbx = surroundingNodes(vbx,1);, - Box const& zvbx = surroundingNodes(vbx,2);); - AMREX_D_TERM( - Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - Array4 const& nv = node_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - nv(i,j,k,dim)=0.; - int nt=0; - for (int detj = 0; detj < 2; ++detj) + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in{i, j, k}; - in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; - if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); - nt++; - } -#if AMREX_SPACEDIM == 3 - else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); - nt++; - } -#endif - } - if(nt>0) nv(i,j,k,dim)/= Real(nt); - } - }); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } +#if AMREX_SPACEDIM == 3 + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } +#endif + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ #if AMREX_SPACEDIM==2 /* 2D */ vel_f(i,j,k,dim) -= Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); forarr(i,j,k,dim) =-Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); -#else /* 3D */ +#else /* 3D */ vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) @@ -414,124 +414,124 @@ void incflo::compute_vel_forces_on_level (int lev, + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); -#endif - } - }); - } - } - else if (choice ==3){ - MultiFab center_val(ba,dm,2,0,MFInfo(), fact); +#endif + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - /* if(i==8&&j==8&&k==8){ - Print()<<"zbx "<<"low "< -2; --detk) -#endif - for (int detj = 0; detj > -2; --detj) + { + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) +#endif + for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //if (vbx.contains(in[0],in[1],in[2])){ - // averaging VOF to nodes - nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); - nt++; - //averaging kappa to nodes - if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ - nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); - nkap++; - } - //averaging density to nodes - nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); - if(nkap>0) - nv(i,j,k,0)/= Real(nkap); - else - nv(i,j,k,0)=0.; - nv(i,j,k,1)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 2); - //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); - Array4 const& center = center_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array gradVof{0.}; - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - int ng=0; -#if AMREX_SPACEDIM==3 - for (int detj = 0; detj < 2; ++detj) -#endif + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + int ng=0; +#if AMREX_SPACEDIM==3 + for (int detj = 0; detj < 2; ++detj) +#endif for (int deti = 0; deti < 2; ++deti){ - Array in0{i, j, k},in1{i, j, k}; - in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; -#if AMREX_SPACEDIM==3 + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; +#if AMREX_SPACEDIM==3 in0[oct[dim][1]]+=detj,in1[oct[dim][1]]+=detj; -#endif - in1[dim] +=1; - gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- - nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; - ng++; - } - gradVof[dim]/=Real(ng); - /*Array in0{i, j, k},in1{i, j, k}; - in1[dim] +=1,in0[dim] -=1;; - gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ - } - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ +#endif + in1[dim] +=1; + gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + ng++; + } + gradVof[dim]/=Real(ng); + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ if(kappa(i,j,k,0)!=VOF_NODATA){ - vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - } + vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - } - }); - - - } - } + forarr(i,j,k,dim) = 0.; + } + } + }); + + + } + } else if (choice ==4) { - //cell-centered surface tension force + //cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -540,36 +540,36 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Box const& bx = mfi.tilebox(); Array4 const& vel_f = vel_forces.array(mfi); Array4 const& rho = density.const_array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if(kappa(i,j,k,0)!=VOF_NODATA){ + { + if(kappa(i,j,k,0)!=VOF_NODATA){ Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); - //note: the minus sign is used because of the way curvature is calculated - AMREX_D_TERM( - vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - AMREX_D_TERM( - forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - } + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - }); - } - - } - - - - - }// end if (m_vof_advect_tracer) + forarr(i,j,k,dim) = 0.; + } + }); + } + + } + + + + + }// end if (m_vof_advect_tracer) } diff --git a/src/incflo_update_density.cpp b/src/incflo_update_density.cpp index 3ee933944..c36802265 100644 --- a/src/incflo_update_density.cpp +++ b/src/incflo_update_density.cpp @@ -67,6 +67,9 @@ void incflo::update_density (StepType step_type) } else { for (int lev = 0; lev <= finest_level; lev++) { + if (m_vof_advect_tracer){ + MultiFab::Copy(m_leveldata[lev]->density, m_leveldata[lev]->density_o, 0, 0, 1, m_leveldata[lev]->density_o.nGrow()); + } MultiFab::Copy(m_leveldata[lev]->density_nph, m_leveldata[lev]->density_o, 0, 0, 1, ng); } } diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 6ea3c38b1..d095aebbf 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -207,13 +207,15 @@ void incflo::prob_init_fluid (int lev) if (1109 == m_probtype) { get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); - ld.tracer_o.FillBoundary(geom[lev].periodicity()); - if (m_vof_advect_tracer){ + ld.tracer_o.FillBoundary(geom[lev].periodicity()); + if (m_vof_advect_tracer){ update_vof_density (lev, get_density_new(),get_tracer_new()); MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); fillpatch_density(lev, m_t_new[lev], ld.density_o, 3); - } - + MultiFab::Copy(ld.density_nph, ld.density, 0, 0, 1, ld.density.nGrow()); + fillpatch_density(lev, m_t_new[lev], ld.density_nph, 3); + } + } } diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index bfd79ab7c..66d2ac7c0 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -58,7 +58,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -66,12 +66,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -93,7 +93,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -123,17 +123,17 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); //fixme - force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); - } + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); + } } static XDim3 edge[12][2] = { @@ -290,12 +290,12 @@ struct Segment{ //vof, tag Array vars; // Constructor to initialize the Segment - Segment(int n, + Segment(int n, #if AMREX_SPACEDIM==2 /* 2D */ - Array const& nodes, + Array const& nodes, #else /* 3D */ Array const& nodes, -#endif +#endif XDim3 m, Real a, Array v, int ns=0) : nnodes(n), mv (m), alpha(a), vars(v) { for (int i = 0; i < n; ++i) @@ -310,12 +310,12 @@ static void add_segment (XDim3 const & center, GpuArray co /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m <<"vof"<<" "< nodecutface; + Array nodecutface; Real x, y, h=dx[0]; - int n=0, nnodecutface; + int n=0, nnodecutface; if (fabs (m.y) > EPS) { y = (alpha - m.x)/m.y; if (y >= 0. && y <= 1.) { @@ -339,18 +339,18 @@ static void add_segment (XDim3 const & center, GpuArray co if (x >= 0. && x <= 1.) { nodecutface[n].x = center.x + h*(x - 0.5); nodecutface[n].y = center.y - h/2.; nodecutface[n++].z = 0.; } - } + } nnodecutface = n; if (n > 2) { /*check if there are duplicated points*/ int i,j; bool ok[n]; for (i=0; i co if (!ok[i]){ if (i!=n-1) for (j=i+1; j nodecutface; @@ -461,8 +461,8 @@ static void add_segment (XDim3 const & center, GpuArray co nt += nnodecutface; segments.emplace_back(nnodecutface, nodecutface, m, alpha, vars, 3); } /* cut face must be divided into 2 quadrilateral/triangular faces */ - -#endif + +#endif } /** @@ -505,7 +505,7 @@ Real line_area (Array &m, Real alpha) a = alpha1 - n.x; if (a > 0.) v -= a*a; - + a = alpha1 - n.y; if (a > 0.) v -= a*a; @@ -522,17 +522,17 @@ Real line_area (Array &m, Real alpha) * @c: a volume fraction. * * Returns: the value @alpha such that the area of a square cell - * lying under the line defined by @m.@x = @alpha is equal to @c. + * lying under the line defined by @m.@x = @alpha is equal to @c. */ Real line_alpha (XDim3 & m, Real c) { Real alpha, m1, m2, v1; - + m1 = fabs (m.x); m2 = fabs (m.y); if (m1 > m2) { v1 = m1; m1 = m2; m2 = v1; } - + v1 = m1/2.; if (c <= v1/m2) alpha = sqrt (2.*c*m1*m2); @@ -610,7 +610,7 @@ void line_center (XDim3 const & m, Real alpha, Real a, XDim3 & p) p.y -= b*b*(alpha + 2.*n.y); p.x -= b*b*b; } - + p.x /= 6.*n.x*n.x*n.y*a; p.y /= 6.*n.x*n.y*n.y*a; @@ -1060,7 +1060,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -1068,12 +1068,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -1086,36 +1086,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -1137,7 +1137,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -1156,32 +1156,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -1194,8 +1194,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -1206,14 +1206,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -1221,23 +1221,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2]={0.}, hd[2]={0.}; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { @@ -1250,7 +1250,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1258,16 +1258,16 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, slope = hd[0]*hd[0] + hd[1]*hd[1]; (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 (&m.x)[oc[d][1]] = - hd[1]; -#endif - } - - } +#endif + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1369,13 +1369,13 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1460,25 +1460,25 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1536,9 +1536,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1554,7 +1554,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1583,43 +1583,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1634,11 +1634,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1685,17 +1685,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER || AMREX_SPACEDIM==2 @@ -1703,11 +1703,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1721,146 +1721,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); /*if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1871,11 +1871,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1912,19 +1912,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - //fixme: need to change for BCs + MFInfo(), v_incflo->Factory(lev)); + //fixme: need to change for BCs kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1932,42 +1932,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if ((i==4||i==11)&&j==9&&k==0){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1975,84 +1975,84 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); + { + auto fvol = vof_arr(i,j,k,0); /*if ((i==4||i==11)&&j==11&&k==0){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fixme: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + // diffuse curvatures int iter = 0; if (iter >0){ MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); - //fixme: need to change for BCs - temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); while (iter--){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -2060,47 +2060,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /*if ((i==4||i==11)&&j==11&&k==0){ - int dddd; - Print()<<"------------"< kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -2129,47 +2129,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -2194,27 +2194,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -2224,31 +2224,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, m_total_flux[lev].setVal(0.0); vof_total_flux[lev].setVal(0.0); MultiFab const * U_MF = dir < 1? u_mac[lev]: -#if AMREX_SPACEDIM == 3 +#if AMREX_SPACEDIM == 3 dir >= 2? w_mac[lev]: -#endif - v_mac[lev]; +#endif + v_mac[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2464,22 +2464,22 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, // add surface tension force (F) to the MAC velocity at the center of cell faces. // F = dt*sigma*kappa*grad(VOF)/rho // Umac <- Uma-F, note minus sign before F because of the way which curvature being calculated. -// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. -// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// grad(VOF) is also estimated at the face center using the center-difference method for two cells // i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0]. // u_mac/v_mac/w_mac stores the face-centered velocity (MAC). // // gu_mac/gv_mac/gw_mac stores the face-centered value of F/dt (i.e., sigma*kappa*grad(VOF)/rho) // gu_mac/gv_mac/gw_mac will be averaged to the cell center when correcting the cell-centered velocity -// after final cell-centered projection. -void +// after final cell-centered projection. +void VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, MultiFab& w_mac), AMREX_D_DECL(MultiFab* gu_mac, MultiFab* gv_mac, MultiFab* gw_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); - auto const& dx = geom.CellSizeArray(); + auto const& dx = geom.CellSizeArray(); Real sigma = v_incflo->m_sigma[0]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2489,71 +2489,71 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u Box const& bx = mfi.tilebox(); Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); + Box const& zbx = mfi.nodaltilebox(2); Array4 const& rho = ld.density.const_array(mfi); - Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); Array4 const& kap = kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, - Array4 const& vmac = v_mac.array(mfi);, - Array4 const& wmac = w_mac.array(mfi);); + AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, + Array4 const& vmac = v_mac.array(mfi);, + Array4 const& wmac = w_mac.array(mfi);); AMREX_D_TERM(Array4 gumac;, Array4 gvmac;,Array4 gwmac;); AMREX_D_TERM(if(gu_mac) gumac = gu_mac->array(mfi);, - if(gv_mac) gvmac = gv_mac->array(mfi);, - if(gw_mac) gwmac = gw_mac->array(mfi);); + if(gv_mac) gvmac = gv_mac->array(mfi);, + if(gw_mac) gwmac = gw_mac->array(mfi);); ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - //Print()< center1{AMREX_D_DECL((problo[0]+.5), (problo[1]+.75), - (problo[2]+.35))}; + (problo[2]+.35))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); - - Array radii{AMREX_D_DECL(.2, .3, .25)}; - EB2::EllipsoidIF my_ellipsoid(radii, center, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + + Array radii{AMREX_D_DECL(.2, .3, .25)}; + EB2::EllipsoidIF my_ellipsoid(radii, center, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2619,7 +2619,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (0.5*(problo[2]+probhi[2])-.2))}; Array high{AMREX_D_DECL((0.5*(problo[0]+probhi[0])+.2), (0.5*(problo[1]+probhi[1])+.2), - (0.5*(problo[2]+probhi[2])+.2))}; + (0.5*(problo[2]+probhi[2])+.2))}; auto my_box= EB2::BoxIF( low, high, fluid_is_inside); //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); auto my_box1= EB2::rotate(my_box, .3, 0); @@ -2630,7 +2630,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Generate GeometryShop //auto gshop = EB2::makeShop(two); //auto gshop = EB2::makeShop(my_box); - auto gshop = EB2::makeShop(my_box); + auto gshop = EB2::makeShop(my_box); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2644,18 +2644,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } - else + } + else #endif { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2665,18 +2665,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-32.dat"; + std::string filename = "vof_value-32.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2686,37 +2686,37 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - } - infile.close(); + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1] + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1] #if AMREX_SPACEDIM==2 &&vout[n].k==7) -#else - &&vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]) +#else + &&vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]) #endif - { - //if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ -#if AMREX_SPACEDIM==2 + { + //if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ +#if AMREX_SPACEDIM==2 tracer(vout[n].i,vout[n].j,0,0)=vout[n].vof; -#else - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; -#endif - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept +#else + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; +#endif + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2742,15 +2742,15 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. tracer_vof_update(lev, a_tracer, height[lev]); - curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - int n_tag=domain_tag_droplets (finest_level, v_incflo->grids,v_incflo->geom, - v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); + curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + int n_tag=domain_tag_droplets (finest_level, v_incflo->grids,v_incflo->geom, + v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); } @@ -2798,11 +2798,11 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0, k=0; -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -2822,7 +2822,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("< 0) { // std::ofstream TecplotFile; @@ -2840,30 +2840,30 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); //output variables TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\"" -#if AMREX_SPACEDIM==3 - <<", \"m_z\"" +#if AMREX_SPACEDIM==3 + <<", \"m_z\"" #endif - <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; + <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); - TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_use_cc_proj; + bool m_use_cc_proj=v_incflo->m_use_cc_proj; auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); Box const& domain = geom.Domain(); @@ -2954,35 +2954,35 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(m_use_cc_proj?AMREX_SPACEDIM+1:AMREX_SPACEDIM+2)<<"-" - <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" + <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& pa_nd = ld.p_nd.const_array(mfi); - Array4 const& pa_cc = ld.p_cc.const_array(mfi); - Array4 const& pa_mac = ld.mac_phi.const_array(mfi); + Array4 const& pa_cc = ld.p_cc.const_array(mfi); + Array4 const& pa_mac = ld.mac_phi.const_array(mfi); Array4 const& tracer = ld.tracer.const_array(mfi); Array4 const& vel = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); - Array4 const& density_arr = ld.density.const_array(mfi); - Array4 const& force_arr = force[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); int nn=0, k=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z +1; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y +1; ++j) { for (int i = lo.x; i <= hi.x +1; ++i) { TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; @@ -2993,13 +2993,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write presure - int nt=m_use_cc_proj?0:1; -#if AMREX_SPACEDIM==3 + int nt=m_use_cc_proj?0:1; +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z+nt; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y+nt; ++j) { for (int i = lo.x; i <= hi.x+nt; ++i) { TecplotFile << (m_use_cc_proj?pa_cc(i,j,k):pa_nd(i,j,k))<<" "; @@ -3010,11 +3010,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - - //write VOF -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + + //write VOF +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tracer(i,j,k,0)<<" "; @@ -3025,12 +3025,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write velocity for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << vel(i,j,k,dim)<<" "; @@ -3041,14 +3041,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write variables of the normal direction of the interface for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << mv(i,j,k,dim)<<" "; @@ -3059,13 +3059,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write alpha of the interface #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << al(i,j,k)<<" "; @@ -3076,12 +3076,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write id of the droplets or bubbles -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tag_arr(i,j,k)<<" "; @@ -3092,14 +3092,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write height function values for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -3108,12 +3108,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << ht_arr(i,j,k,dim)<<" "; @@ -3124,11 +3124,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << kappa_arr(i,j,k)<<" "; @@ -3139,11 +3139,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write density -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << density_arr(i,j,k)<<" "; @@ -3154,13 +3154,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write force vector for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << force_arr(i,j,k,dim)<<" "; @@ -3171,9 +3171,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// - + TecplotFile <<"\n"; } // end MFIter @@ -3348,7 +3348,7 @@ int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector cons ,ort2=ORTHOGONAL_COMPONENT(ort1);//2nd transverse direction for (int n=0;n<2;n++){ int k0=dim_limit[n][d],gd=k0+(n==0?-1:1); - for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ + for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ #if AMREX_SPACEDIM==2 /*2D*/ Real tag_cell=(d==0?tag_arr(k0,i0,0):tag_arr(i0,k0,0)); if(tag_cell > 0){ @@ -3356,7 +3356,7 @@ int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector cons if(tag_gcell > 0) touching_regions (tag_cell, tag_gcell, touch); } -#else /*3D */ +#else /*3D */ for(int j0=ijk_min[ort2];j0<=ijk_max[ort2];j0++){ Real tag_cell=(d==0?tag_arr(k0,i0,j0): d==1?tag_arr(j0,k0,i0): @@ -3369,8 +3369,8 @@ int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector cons touching_regions (tag_cell, tag_gcell, touch); } }// end for-loop for searching cells in the boundaries. -#endif - } +#endif + } }// end for-loop for low and high boundary }// end for-loop for AMREX_SPACEDIM } @@ -3475,7 +3475,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3496,7 +3496,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3536,15 +3536,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3565,11 +3565,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3585,13 +3585,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< 0 -incflo.cfl = 0.2 # CFL factor +#incflo.fixed_dt = .00217391 # Use this constant dt if > 0 +incflo.cfl = 0.1 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 20 # Steps between plot files +amr.plot_int = 4 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -27,7 +27,7 @@ incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) incflo.mu = 1.0e-3 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 -incflo.mu_s = 2.0 +incflo.mu_s = 2. incflo.ro_s = 1000.0 incflo.sigma = 10. From 1868861548250bfe34dc9279ef3bcddf348d24f2 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 4 Oct 2024 08:38:41 -0700 Subject: [PATCH 24/29] clean bugs for ccproj based VOF --- ...ncflo_compute_MAC_projected_velocities.cpp | 52 +- src/incflo_compute_forces.cpp | 618 ++++---- src/incflo_update_density.cpp | 6 +- src/prob/prob_init_fluid.cpp | 12 +- src/vof/VolumeOfFluid.cpp | 1284 ++++++++--------- 5 files changed, 986 insertions(+), 986 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index 0d5b69619..0ba9aae1a 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -180,49 +180,49 @@ incflo::compute_MAC_projected_velocities ( //add surface tension if(m_vof_advect_tracer && m_use_cc_proj) get_volume_of_fluid ()->velocity_face_source(lev,0.5*l_dt, AMREX_D_DECL(*u_mac[lev], *v_mac[lev], *w_mac[lev]), - AMREX_D_DECL(nullptr, nullptr, nullptr)); + AMREX_D_DECL(nullptr, nullptr, nullptr)); if(0){ //The following is only used for testing the pure advection of VOF algorithm -//Average the cell-centered velocity to face center as MAC velocity +//Average the cell-centered velocity to face center as MAC velocity #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(*vel[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, Box const& ybx = mfi.nodaltilebox(1);, - Box const& zbx = mfi.nodaltilebox(2);); - Array4 const& velocity = vel[lev]->const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = u_mac[lev]->array(mfi);, - Array4 const& yfv = v_mac[lev]->array(mfi);, - Array4 const& zfv = w_mac[lev]->array(mfi);); - AMREX_D_TERM( + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& velocity = vel[lev]->const_array(mfi); + AMREX_D_TERM(Array4 const& xfv = u_mac[lev]->array(mfi);, + Array4 const& yfv = v_mac[lev]->array(mfi);, + Array4 const& zfv = w_mac[lev]->array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - xfv(i,j,k) = .5*(velocity(i,j,k,0)+velocity(i-1,j,k,0)); - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) = .5*(velocity(i,j,k,0)+velocity(i-1,j,k,0)); + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - yfv(i,j,k) = .5*(velocity(i,j,k,1)+velocity(i,j-1,k,1)); - });, + yfv(i,j,k) = .5*(velocity(i,j,k,1)+velocity(i,j-1,k,1)); + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - zfv(i,j,k) = .5*(velocity(i,j,k,2)+velocity(i,j,k-1,2)); + zfv(i,j,k) = .5*(velocity(i,j,k,2)+velocity(i,j,k-1,2)); }); - ) // end AMREX_D_TERM - - } - return; + ) // end AMREX_D_TERM + + } + return; }//test - } + } Vector > mac_vec(finest_level+1); for (int lev=0; lev <= finest_level; ++lev) diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index 0aab79415..ec13e68a8 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -41,7 +41,7 @@ void incflo::compute_vel_forces (Vector const& vel_forces, Vector const& tracer_old, Vector const& tracer_new, bool include_pressure_gradient, - bool include_SF) + bool include_SF) { for (int lev = 0; lev <= finest_level; ++lev) compute_vel_forces_on_level (lev, *vel_forces[lev], *velocity[lev], *density[lev], @@ -55,7 +55,7 @@ void incflo::compute_vel_forces_on_level (int lev, const MultiFab& tracer_old, const MultiFab& tracer_new, bool include_pressure_gradient, - bool include_SF) + bool include_SF) { GpuArray l_gravity{m_gravity[0],m_gravity[1],m_gravity[2]}; GpuArray l_gp0{m_gp0[0], m_gp0[1], m_gp0[2]}; @@ -150,262 +150,262 @@ void incflo::compute_vel_forces_on_level (int lev, }); } } -/////////////////////////////////////////////////////////////////////////// - // add surface tension - // surface tension = sigma*kappa*grad(VOF)/rho - // sigma: surface tension coefficient - // kappa: curvature of the interface - // grad(VOF): gradient of VOF field variable - // rho: density - - //fixme: we just consider the surface tension for first tracer +/////////////////////////////////////////////////////////////////////////// + // add surface tension + // surface tension = sigma*kappa*grad(VOF)/rho + // sigma: surface tension coefficient + // kappa: curvature of the interface + // grad(VOF): gradient of VOF field variable + // rho: density + + //fixme: we just consider the surface tension for first tracer if (m_vof_advect_tracer && m_sigma[0]!=0.&&!m_use_cc_proj&&include_SF){ - - VolumeOfFluid* vof_p = get_volume_of_fluid (); - - //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and - // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. - //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. - // the node-centered SF is finally averaged to cell center. - //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged + + VolumeOfFluid* vof_p = get_volume_of_fluid (); + + //choice 1: The original cell-centered kappa and rho are averaged to face center. Grad(VOF) and + // surface tension (SF) are calculated at face center. Then the face-centered SF is finally averaged to cell center. + //choice 2: Similar to choice 1, SF is estimated at the face center and then averaged to the cell nodes. + // the node-centered SF is finally averaged to cell center. + //Choice 3: The original cell-centered rho and VOF are averaged to nodes. The node-centered rho is averaged // to cell center. grad(VOF) is estimated at the center of the cell edge and then averaged to the cell center. // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). - //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - - int choice = 3; - - - const auto& ba = density.boxArray(); + //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). + + int choice = 3; + + + const auto& ba = density.boxArray(); const auto& dm = density.DistributionMap(); const auto& fact = density.Factory(); Array face_val{AMREX_D_DECL( - MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), + MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(0)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(1)), dm, 1, 0, MFInfo(), fact), MultiFab(amrex::convert(ba,IntVect::TheDimensionVector(2)), dm, 1, 0, MFInfo(), fact))}; - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, AMREX_SPACEDIM+1, 0 , MFInfo(), fact); if (choice==1) { - // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. - // The cell-centered force is then obtained by averaging the face-centered value. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. + // The cell-centered force is then obtained by averaging the face-centered value. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()). - Box const& bx = mfi.tilebox(); - AMREX_D_TERM( - Box const& xbx = surroundingNodes(bx,0);, - Box const& ybx = surroundingNodes(bx,1);, - Box const& zbx = surroundingNodes(bx,2);); - Array4 const& tra = tracer_new.const_array(mfi); + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()). + Box const& bx = mfi.tilebox(); + AMREX_D_TERM( + Box const& xbx = surroundingNodes(bx,0);, + Box const& ybx = surroundingNodes(bx,1);, + Box const& zbx = surroundingNodes(bx,2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - AMREX_D_TERM( + AMREX_D_TERM(Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - // immediately calculate the cell-centered surface tension force using the face-centered value - // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., - // xbx, ybx, zbx) for cell faces in the beginning. - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + ) // end AMREX_D_TERM + + // immediately calculate the cell-centered surface tension force using the face-centered value + // If we uncomment the following, we must use surroundingNodes() to define the index space (i.e., + // xbx, ybx, zbx) for cell faces in the beginning. + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, - forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, - forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); - }); - } - } + { + + AMREX_D_TERM(vel_f(i,j,k,0) -= Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + vel_f(i,j,k,1) -= Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + vel_f(i,j,k,2) -= Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + AMREX_D_TERM(forarr(i,j,k,0) = -Real(0.5)*(xfv(i,j,k,0)+xfv(i+1,j,k,0));, + forarr(i,j,k,1) = -Real(0.5)*(yfv(i,j,k,0)+yfv(i,j+1,k,0));, + forarr(i,j,k,2) = -Real(0.5)*(zfv(i,j,k,0)+zfv(i,j,k+1,0));); + }); + } + } else if (choice ==2){ // kappa, rho, and grad(VOF) are first averaged to the center of cell faces. // The face-centered values are then averaged to the cell node. - // Finally, the nodal values are averaged to the cell center. - average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); + // Finally, the nodal values are averaged to the cell center. + average_cellcenter_to_face(GetArrOfPtrs(face_val), density, Geom(lev)); for (int idim = 0; idim < AMREX_SPACEDIM; ++idim) { face_val[idim].invert(m_sigma[0], 0); } - + #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { + { // Note nodaltilebox will not include the nodal index beyond boundaries between neighboring - // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented - // out), we must create index space for the face-centered values of the tiled region - // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then - // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the - // repeated calculation of face-centered values at cell faces which are shared by two tiles. - AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, + // titles. Therefore,if we want to use face values (i.e., face_val) immediately below (commented + // out), we must create index space for the face-centered values of the tiled region + // (i.e., surroundingNodes()).Since we currently calculate all face values in all boxes and then + // convert them to node-centered value, it is better that we use (nodaltilebox()) to avoid the + // repeated calculation of face-centered values at cell faces which are shared by two tiles. + AMREX_D_TERM(Box const& xbx = mfi.nodaltilebox(0);, Box const& ybx = mfi.nodaltilebox(1);, - Box const& zbx = mfi.nodaltilebox(2);); - Array4 const& tra = tracer_new.const_array(mfi); + Box const& zbx = mfi.nodaltilebox(2);); + Array4 const& tra = tracer_new.const_array(mfi); Array4 const& kap = vof_p->kappa[lev].const_array(mfi); - AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - - AMREX_D_TERM( + AMREX_D_TERM( Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + + AMREX_D_TERM( ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; - });, - ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + xfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i-1,j,k,0))/dx[0]; + });, + ParallelFor(ybx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j-1,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j-1,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j-1,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j-1,k,0)!=VOF_NODATA) kaf=kap(i,j-1,k); - else + else kaf=0.; - yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; - });, - ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + yfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j-1,k,0))/dx[1]; + });, + ParallelFor(zbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i,j,k-1,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i,j,k-1,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i,j,k-1,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i,j,k-1,0)!=VOF_NODATA) kaf=kap(i,j,k-1); - else + else kaf=0.; - zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; - + zfv(i,j,k) *= kaf*(tra(i,j,k,0)-tra(i,j,k-1,0))/dx[2]; + }); - ) // end AMREX_D_TERM - - } + ) // end AMREX_D_TERM + + } static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - AMREX_D_TERM( - Box const& xvbx = surroundingNodes(vbx,0);, - Box const& yvbx = surroundingNodes(vbx,1);, - Box const& zvbx = surroundingNodes(vbx,2);); - AMREX_D_TERM( - Array4 const& xfv = face_val[0].array(mfi);, - Array4 const& yfv = face_val[1].array(mfi);, - Array4 const& zfv = face_val[2].array(mfi);); - Array4 const& nv = node_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + AMREX_D_TERM( + Box const& xvbx = surroundingNodes(vbx,0);, + Box const& yvbx = surroundingNodes(vbx,1);, + Box const& zvbx = surroundingNodes(vbx,2);); + AMREX_D_TERM( + Array4 const& xfv = face_val[0].array(mfi);, + Array4 const& yfv = face_val[1].array(mfi);, + Array4 const& zfv = face_val[2].array(mfi);); + Array4 const& nv = node_val.array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - nv(i,j,k,dim)=0.; - int nt=0; - for (int detj = 0; detj < 2; ++detj) + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + nv(i,j,k,dim)=0.; + int nt=0; + for (int detj = 0; detj < 2; ++detj) for (int deti = 0; deti < 2; ++deti){ - Array in{i, j, k}; - in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; - if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); - nt++; - } - else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); - nt++; - } -#if AMREX_SPACEDIM == 3 - else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ - nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); - nt++; - } -#endif - } - if(nt>0) nv(i,j,k,dim)/= Real(nt); - } - }); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); + Array in{i, j, k}; + in[oct[dim][0]]-=deti,in[oct[dim][1]]-=detj; + if (dim==0&& xvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= xfv(in[0],in[1],in[2]); + nt++; + } + else if (dim==1&& yvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= yfv(in[0],in[1],in[2]); + nt++; + } +#if AMREX_SPACEDIM == 3 + else if (dim==2&& zvbx.contains(in[0],in[1],in[2])){ + nv(i,j,k,dim)+= zfv(in[0],in[1],in[2]); + nt++; + } +#endif + } + if(nt>0) nv(i,j,k,dim)/= Real(nt); + } + }); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + { + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ #if AMREX_SPACEDIM==2 /* 2D */ vel_f(i,j,k,dim) -= Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); forarr(i,j,k,dim) =-Real(0.25)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim)); -#else /* 3D */ +#else /* 3D */ vel_f(i,j,k,dim) -= Real(0.125)*(nv(i,j ,k ,dim) + nv(i+1,j ,k ,dim) + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) @@ -414,124 +414,124 @@ void incflo::compute_vel_forces_on_level (int lev, + nv(i,j+1,k ,dim) + nv(i+1,j+1,k ,dim) + nv(i,j ,k+1,dim) + nv(i+1,j ,k+1,dim) + nv(i,j+1,k+1,dim) + nv(i+1,j+1,k+1,dim)); -#endif - } - }); - } - } - else if (choice ==3){ - MultiFab center_val(ba,dm,2,0,MFInfo(), fact); +#endif + } + }); + } + } + else if (choice ==3){ + MultiFab center_val(ba,dm,2,0,MFInfo(), fact); static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - /* if(i==8&&j==8&&k==8){ - Print()<<"zbx "<<"low "< -2; --detk) -#endif - for (int detj = 0; detj > -2; --detj) + { + /* if(i==8&&j==8&&k==8){ + Print()<<"zbx "<<"low "< -2; --detk) +#endif + for (int detj = 0; detj > -2; --detj) for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //if (vbx.contains(in[0],in[1],in[2])){ - // averaging VOF to nodes - nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); - nt++; - //averaging kappa to nodes - if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ - nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); - nkap++; - } - //averaging density to nodes - nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); - if(nkap>0) - nv(i,j,k,0)/= Real(nkap); - else - nv(i,j,k,0)=0.; - nv(i,j,k,1)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 2); - //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); + Array in{i+deti,j+detj,k+detk}; + //if (vbx.contains(in[0],in[1],in[2])){ + // averaging VOF to nodes + nv(i,j,k,AMREX_SPACEDIM)+= tra(in[0],in[1],in[2]); + nt++; + //averaging kappa to nodes + if(kappa(in[0],in[1],in[2],0)!=VOF_NODATA){ + nv(i,j,k,0)+= kappa(in[0],in[1],in[2],0); + nkap++; + } + //averaging density to nodes + nv(i,j,k,1)+= rho(in[0],in[1],in[2],0); + nrho++; + //} + } + if(nt>0) nv(i,j,k,AMREX_SPACEDIM)/= Real(nt); + if(nkap>0) + nv(i,j,k,0)/= Real(nkap); + else + nv(i,j,k,0)=0.; + nv(i,j,k,1)/= Real(nrho); + }); + } + average_node_to_cellcenter(center_val, 0, node_val, 0, 2); + //MultiFab::Copy(density, center_val , 1, 0, 1, density.nGrow()); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(vel_forces,TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& bx = mfi.tilebox(); - //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() - //See the previous comments for calculating face-centered value. - Box const& nbx = surroundingNodes(bx); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& rho = density.const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); - Array4 const& vel_f = vel_forces.array(mfi); - Array4 const& center = center_val.array(mfi); + { + Box const& bx = mfi.tilebox(); + //We will immediately use the nodal values so we must use surroundingNodes()instead of nodaltilebox() + //See the previous comments for calculating face-centered value. + Box const& nbx = surroundingNodes(bx); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& rho = density.const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& vel_f = vel_forces.array(mfi); + Array4 const& center = center_val.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array gradVof{0.}; - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ - int ng=0; -#if AMREX_SPACEDIM==3 - for (int detj = 0; detj < 2; ++detj) -#endif + { + Array gradVof{0.}; + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ + int ng=0; +#if AMREX_SPACEDIM==3 + for (int detj = 0; detj < 2; ++detj) +#endif for (int deti = 0; deti < 2; ++deti){ - Array in0{i, j, k},in1{i, j, k}; - in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; -#if AMREX_SPACEDIM==3 + Array in0{i, j, k},in1{i, j, k}; + in0[oct[dim][0]]+=deti,in1[oct[dim][0]]+=deti; +#if AMREX_SPACEDIM==3 in0[oct[dim][1]]+=detj,in1[oct[dim][1]]+=detj; -#endif - in1[dim] +=1; - gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- - nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; - ng++; - } - gradVof[dim]/=Real(ng); - /*Array in0{i, j, k},in1{i, j, k}; - in1[dim] +=1,in0[dim] -=1;; - gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ - } - for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ +#endif + in1[dim] +=1; + gradVof[dim] +=(nv(in1[0],in1[1],in1[2],AMREX_SPACEDIM)- + nv(in0[0],in0[1],in0[2],AMREX_SPACEDIM))/dx[dim]; + ng++; + } + gradVof[dim]/=Real(ng); + /*Array in0{i, j, k},in1{i, j, k}; + in1[dim] +=1,in0[dim] -=1;; + gradVof[dim] = Real(0.5)*(tra(in1[0],in1[1],in1[2],0)-tra(in0[0],in0[1],in0[2],0))/dx[dim];*/ + } + for (int dim = 0; dim < AMREX_SPACEDIM; ++dim){ if(kappa(i,j,k,0)!=VOF_NODATA){ - vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; - } + vel_f(i,j,k,dim) -= m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + forarr(i,j,k,dim) =-m_sigma[0]*kappa(i,j,k,0)/center(i,j,k,1)*gradVof[dim]; + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - } - }); - - - } - } + forarr(i,j,k,dim) = 0.; + } + } + }); + + + } + } else if (choice ==4) { - //cell-centered surface tension force + //cell-centered surface tension force #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -540,36 +540,36 @@ static int oct[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Box const& bx = mfi.tilebox(); Array4 const& vel_f = vel_forces.array(mfi); Array4 const& rho = density.const_array(mfi); - Array4 const& tra = tracer_new.const_array(mfi); - Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); - Array4 const& forarr = vof_p->force[lev].array(mfi); + Array4 const& tra = tracer_new.const_array(mfi); + Array4 const& kappa = vof_p->kappa[lev].const_array(mfi); + Array4 const& forarr = vof_p->force[lev].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if(kappa(i,j,k,0)!=VOF_NODATA){ + { + if(kappa(i,j,k,0)!=VOF_NODATA){ Real sig_kappa = m_sigma[0]*kappa(i,j,k,0)/rho(i,j,k); - //note: the minus sign is used because of the way curvature is calculated - AMREX_D_TERM( - vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - AMREX_D_TERM( - forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, - forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, - forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); - - } + //note: the minus sign is used because of the way curvature is calculated + AMREX_D_TERM( + vel_f(i,j,k,0) -= Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + vel_f(i,j,k,1) -= Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + vel_f(i,j,k,2) -= Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + AMREX_D_TERM( + forarr(i,j,k,0) = -Real(0.5)*(tra(i+1,j,k,0)-tra(i-1,j,k,0))/dx[0]*sig_kappa;, + forarr(i,j,k,1) = -Real(0.5)*(tra(i,j+1,k,0)-tra(i,j-1,k,0))/dx[1]*sig_kappa;, + forarr(i,j,k,2) = -Real(0.5)*(tra(i,j,k+1,0)-tra(i,j,k-1,0))/dx[2]*sig_kappa;); + + } else { for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) - forarr(i,j,k,dim) = 0.; - } - }); - } - - } - - - - - }// end if (m_vof_advect_tracer) + forarr(i,j,k,dim) = 0.; + } + }); + } + + } + + + + + }// end if (m_vof_advect_tracer) } diff --git a/src/incflo_update_density.cpp b/src/incflo_update_density.cpp index c36802265..7a16830a8 100644 --- a/src/incflo_update_density.cpp +++ b/src/incflo_update_density.cpp @@ -67,9 +67,9 @@ void incflo::update_density (StepType step_type) } else { for (int lev = 0; lev <= finest_level; lev++) { - if (m_vof_advect_tracer){ - MultiFab::Copy(m_leveldata[lev]->density, m_leveldata[lev]->density_o, 0, 0, 1, m_leveldata[lev]->density_o.nGrow()); - } + if (m_vof_advect_tracer){ + MultiFab::Copy(m_leveldata[lev]->density, m_leveldata[lev]->density_o, 0, 0, 1, m_leveldata[lev]->density_o.nGrow()); + } MultiFab::Copy(m_leveldata[lev]->density_nph, m_leveldata[lev]->density_o, 0, 0, 1, ng); } } diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index d095aebbf..09ed07bf3 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -207,15 +207,15 @@ void incflo::prob_init_fluid (int lev) if (1109 == m_probtype) { get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); - ld.tracer_o.FillBoundary(geom[lev].periodicity()); - if (m_vof_advect_tracer){ + ld.tracer_o.FillBoundary(geom[lev].periodicity()); + if (m_vof_advect_tracer){ update_vof_density (lev, get_density_new(),get_tracer_new()); MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); fillpatch_density(lev, m_t_new[lev], ld.density_o, 3); - MultiFab::Copy(ld.density_nph, ld.density, 0, 0, 1, ld.density.nGrow()); - fillpatch_density(lev, m_t_new[lev], ld.density_nph, 3); - } - + MultiFab::Copy(ld.density_nph, ld.density, 0, 0, 1, ld.density.nGrow()); + fillpatch_density(lev, m_t_new[lev], ld.density_nph, 3); + } + } } diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 66d2ac7c0..bfd79ab7c 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -58,7 +58,7 @@ void range_add_value (VofRange & r, Real val) /** * range_update: * @r: a #VofRange. - * + * * Updates the fields of @r. */ void range_update (VofRange & r) @@ -66,12 +66,12 @@ void range_update (VofRange & r) if (r.n > 0) { if (r.sum2 - r.sum*r.sum/(Real) r.n >= 0.) r.stddev = sqrt ((r.sum2 - r.sum*r.sum/(Real) r.n) - /(Real) r.n); + /(Real) r.n); else r.stddev = 0.; r.mean = r.sum/(Real) r.n; } - else + else r.min = r.max = r.mean = r.stddev = 0.; } @@ -93,7 +93,7 @@ static void domain_range_reduce ( VofRange & s) { double in[5]; - double out[5] = { std::numeric_limits::max(), + double out[5] = { std::numeric_limits::max(), std::numeric_limits::lowest(), 0., 0., 0. }; MPI_Op op; @@ -123,17 +123,17 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) for (int lev = 0; lev <= finest_level; ++lev){ normal.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); alpha.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - Array new_height={ + tag.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + Array new_height={ MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)), MultiFab(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)) }; - height.emplace_back(std::move(new_height)); - kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); - force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + height.emplace_back(std::move(new_height)); + kappa.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); + force.emplace_back(v_incflo->grids[lev], v_incflo->dmap[lev], AMREX_SPACEDIM, v_incflo->nghost_state(), MFInfo(), v_incflo->Factory(lev)); //fixme - force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); - } + force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); + } } static XDim3 edge[12][2] = { @@ -290,12 +290,12 @@ struct Segment{ //vof, tag Array vars; // Constructor to initialize the Segment - Segment(int n, + Segment(int n, #if AMREX_SPACEDIM==2 /* 2D */ - Array const& nodes, + Array const& nodes, #else /* 3D */ Array const& nodes, -#endif +#endif XDim3 m, Real a, Array v, int ns=0) : nnodes(n), mv (m), alpha(a), vars(v) { for (int i = 0; i < n; ++i) @@ -310,12 +310,12 @@ static void add_segment (XDim3 const & center, GpuArray co /*Print() <<" add_segment "<< *o<<" "<<" vector "<<*m <<"vof"<<" "< nodecutface; + Array nodecutface; Real x, y, h=dx[0]; - int n=0, nnodecutface; + int n=0, nnodecutface; if (fabs (m.y) > EPS) { y = (alpha - m.x)/m.y; if (y >= 0. && y <= 1.) { @@ -339,18 +339,18 @@ static void add_segment (XDim3 const & center, GpuArray co if (x >= 0. && x <= 1.) { nodecutface[n].x = center.x + h*(x - 0.5); nodecutface[n].y = center.y - h/2.; nodecutface[n++].z = 0.; } - } + } nnodecutface = n; if (n > 2) { /*check if there are duplicated points*/ int i,j; bool ok[n]; for (i=0; i co if (!ok[i]){ if (i!=n-1) for (j=i+1; j nodecutface; @@ -461,8 +461,8 @@ static void add_segment (XDim3 const & center, GpuArray co nt += nnodecutface; segments.emplace_back(nnodecutface, nodecutface, m, alpha, vars, 3); } /* cut face must be divided into 2 quadrilateral/triangular faces */ - -#endif + +#endif } /** @@ -505,7 +505,7 @@ Real line_area (Array &m, Real alpha) a = alpha1 - n.x; if (a > 0.) v -= a*a; - + a = alpha1 - n.y; if (a > 0.) v -= a*a; @@ -522,17 +522,17 @@ Real line_area (Array &m, Real alpha) * @c: a volume fraction. * * Returns: the value @alpha such that the area of a square cell - * lying under the line defined by @m.@x = @alpha is equal to @c. + * lying under the line defined by @m.@x = @alpha is equal to @c. */ Real line_alpha (XDim3 & m, Real c) { Real alpha, m1, m2, v1; - + m1 = fabs (m.x); m2 = fabs (m.y); if (m1 > m2) { v1 = m1; m1 = m2; m2 = v1; } - + v1 = m1/2.; if (c <= v1/m2) alpha = sqrt (2.*c*m1*m2); @@ -610,7 +610,7 @@ void line_center (XDim3 const & m, Real alpha, Real a, XDim3 & p) p.y -= b*b*(alpha + 2.*n.y); p.x -= b*b*b; } - + p.x /= 6.*n.x*n.x*n.y*a; p.y /= 6.*n.x*n.y*n.y*a; @@ -1060,7 +1060,7 @@ bool interface_cell (int const i, int const j, int const k, static int half_height (Array cell, Array4 const & fv, int d, - Real & H, int & n, Array range) + Real & H, int & n, Array range) { int s = 0, dim=d/2; n = 0; @@ -1068,12 +1068,12 @@ static int half_height (Array cell, Array4 const & fv, int while (n < HMAX && !s) { Real f = fv (cell[0],cell[1],cell[2],0); if (!CELL_IS_FULL(f)) { /* interfacial cell */ - // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ + // if (f > EPS && f < 1. - EPS) { /* interfacial cell */ //hit the boundary - if (cell[dim]range[1]) - return 2; - H += f; - n++; + if (cell[dim]range[1]) + return 2; + H += f; + n++; } else /* full or empty cell */ s = (f - 0.5)>0.? 1.: -1; @@ -1086,36 +1086,36 @@ static int half_height (Array cell, Array4 const & fv, int static void height_propagation (Array cell, int dim, Array4 const & fv, Array4 const & hght, Array range, Real orientation) -{ +{ for (int d = 1; d >= -1; d-=2, orientation = - orientation) { - Array neighbor=cell; + Array neighbor=cell; Real H = hght(cell[0],cell[1],cell[2],dim); - neighbor[dim]+=d; + neighbor[dim]+=d; bool interface = !CELL_IS_FULL(fv(neighbor[0],neighbor[1],neighbor[2],0));//false; - while (fabs (H) < DMAX - 1.&& !interface && - neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { + while (fabs (H) < DMAX - 1.&& !interface && + neighbor[dim]>=range[0]&& neighbor[dim]<=range[1]) { H -= orientation; hght(neighbor[0],neighbor[1],neighbor[2],dim) = H; - auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); + auto fvol = fv(neighbor[0],neighbor[1],neighbor[2],0); interface = !CELL_IS_FULL(fvol); neighbor[dim]+=d; } } } -void calculate_height(int i, int j, int k, int dim, Array4 const & vof, +void calculate_height(int i, int j, int k, int dim, Array4 const & vof, Array4 const & hb, Array4 const & ht, Array range) { Real H = vof(i,j,k,0); - Array cell={i,j,k}; - // top part of the column + Array cell={i,j,k}; + // top part of the column int nt, st = half_height (cell, vof, 2*dim, H, nt, range); if (!st) /* still an interfacial cell */ - return; - // bottom part of the column + return; + // bottom part of the column int nb, sb = half_height (cell, vof, 2*dim + 1, H, nb, range); if (!sb) /* still an interfacial cell */ - return; + return; if (sb != 2 && st != 2) { if (st*sb > 0) /* the column does not cross the interface */ return; @@ -1137,7 +1137,7 @@ void calculate_height(int i, int j, int k, int dim, Array4 const & v } } -static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, +static Array4 const * boundary_hit (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht) { if (hb(i,j,k,d)!= VOF_NODATA && hb(i,j,k,d)> BOUNDARY_HIT/2.) @@ -1156,32 +1156,32 @@ static void height_propagation_from_boundary (Array cell, int dim, int cell[dim]+=(d % 2 ? 1 : -1); Real H0=hght(cell[0],cell[1],cell[2],dim); while ( H0!=VOF_NODATA && H0 > BOUNDARY_HIT/2. && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); - H0=hght(cell[0],cell[1],cell[2],dim); + H0=hght(cell[0],cell[1],cell[2],dim); } /* propagate to non-interfacial cells up to DMAX */ - auto fvol = fv(cell[0],cell[1],cell[2],0); + auto fvol = fv(cell[0],cell[1],cell[2],0); bool interface = !CELL_IS_FULL(fvol); - while (fabs (H) < DMAX - 1. && !interface && - cell[dim]>=range[0]&&cell[dim]<=range[1]) { + while (fabs (H) < DMAX - 1. && !interface && + cell[dim]>=range[0]&&cell[dim]<=range[1]) { H += orientation; hght(cell[0],cell[1],cell[2],dim) = H; cell[dim]+=(d % 2 ? 1 : -1); } } -Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, +Array4 const * closest_height (int i,int j,int k, int d, Array4 const & hb, Array4 const & ht, Real * orientation) { Array4 const * hv = nullptr; Real o = 0.; if (hb(i,j,k,d)!=VOF_NODATA) { hv = &hb; o = 1.; - if (ht(i,j,k,d)!=VOF_NODATA && - fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { + if (ht(i,j,k,d)!=VOF_NODATA && + fabs (ht(i,j,k,d)) < fabs (hb(i,j,k,d))) { hv = & ht; o = -1.; } } @@ -1194,8 +1194,8 @@ Array4 const * closest_height (int i,int j,int k, int d, Array4 const * h , int d, Real * x) +static Real neighboring_column (int i,int j,int k, int c, + Array4 const * h , int d, Real * x) { Array neighbor={i,j,k}; neighbor[d/2]+=d%2?-1:1; @@ -1206,14 +1206,14 @@ static Real neighboring_column (int i,int j,int k, int c, } return VOF_NODATA; } -/* +/* The function is similar to neighboring_column(). The difference is that neighboring_column_corner() returns height @h of the neighboring column in direction @(d[0], d[1]). kind of corner neighbors */ -static Real neighboring_column_corner (int i,int j,int k, int c, - Array4 const * h, int * d, Real (*x)[2]) +static Real neighboring_column_corner (int i,int j,int k, int c, + Array4 const * h, int * d, Real (*x)[2]) { Array neighbor={i,j,k}; neighbor[d[0]/2]+=d[0]%2?-1:1; @@ -1221,23 +1221,23 @@ static Real neighboring_column_corner (int i,int j,int k, int c, Real height=(*h)(neighbor[0],neighbor[1],neighbor[2],c); if (height!=VOF_NODATA) { (*x)[0] = d[0] % 2 ? -1. : 1.; - (*x)[1] = d[1] % 2 ? -1. : 1.; - return height; + (*x)[1] = d[1] % 2 ? -1. : 1.; + return height; } - else + else return VOF_NODATA; } -static bool height_normal (int i,int j,int k, Array4 const & hb, +static bool height_normal (int i,int j,int k, Array4 const & hb, Array4 const & ht, XDim3 & m ) { Real slope = VOF_NODATA; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; - for (int d = 0; d < AMREX_SPACEDIM; d++){ + for (int d = 0; d < AMREX_SPACEDIM; d++){ Real orientation; - Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); - if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { + Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); + if (hv != nullptr && fabs ((*hv)(i,j,k,d) <= 1.)) { Real H = (*hv)(i,j,k,d); Real x[2], h[2][2]={0.}, hd[2]={0.}; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { @@ -1250,7 +1250,7 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, x[1] = - x[1]; Real det = x[0]*x[1]*(x[0] - x[1]), a = x[1]*(h[nd][0] - H), b = x[0]*(h[nd][1] - H); hd[nd] = (x[0]*b - x[1]*a)/det; - } + } if (h[0][0] == VOF_NODATA || h[0][1] == VOF_NODATA || h[1][0] == VOF_NODATA || h[1][1] == VOF_NODATA) continue; @@ -1258,16 +1258,16 @@ static bool height_normal (int i,int j,int k, Array4 const & hb, slope = hd[0]*hd[0] + hd[1]*hd[1]; (&m.x)[d] = orientation; (&m.x)[oc[d][0]] = - hd[0]; -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 (&m.x)[oc[d][1]] = - hd[1]; -#endif - } - - } +#endif + } + + } } //Print()<<"-------slope---"< dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa) +bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1369,13 +1369,13 @@ bool curvature_along_direction (int i,int j,int k, int d, GpuArray dx, - Array4 const & hb, - Array4 const & ht, - Real & kappa, Vector &interface) +bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray dx, + Array4 const & hb, + Array4 const & ht, + Real & kappa, Vector &interface) { Real x[AMREX_SPACEDIM==3?9:3], h[AMREX_SPACEDIM==3?9:3]; - Real orientation; + Real orientation; static int oc[3][2] = { { 1, 2 }, { 0, 2 }, { 0, 1 } }; Array4 const * hv = closest_height (i,j,k,d,hb,ht,&orientation); if (!hv) { - bool loop=true; + bool loop=true; /* no data for either directions, look four neighbors to collect potential interface positions */ - for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) - for (int ndd = 0; ndd < 2; ndd++) { + for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1) && loop; nd++) + for (int ndd = 0; ndd < 2; ndd++) { Array neighbor={i,j,k}; - neighbor[oc[d][nd]]+=ndd%2?-1:1; + neighbor[oc[d][nd]]+=ndd%2?-1:1; hv = closest_height (neighbor[0],neighbor[1],neighbor[2],d,hb,ht,&orientation); - if (hv){ - loop = false; - break; - } - } - if (!hv) /* give up */ + if (hv){ + loop = false; + break; + } + } + if (!hv) /* give up */ return false; } else if (fabs((*hv)(i,j,k,d))>1.) - return false; + return false; int n=0; for (int nd = 0; nd < (AMREX_SPACEDIM==3?2:1); nd++) { h[n] = neighboring_column (i, j, k, d, hv, 2*oc[d][nd], &x[n]); @@ -1460,25 +1460,25 @@ bool curvature_along_direction_new (int i,int j,int k, int d, GpuArray &c) @@ -1536,9 +1536,9 @@ static void orientation (VofVector m, Array &c) for (i = 0; i < AMREX_SPACEDIM - 1; i++) for (j = 0; j < AMREX_SPACEDIM - 1 - i; j++) if (fabs (m[c[j + 1]]) > fabs (m[c[j]])) { - int tmp = c[j]; - c[j] = c[j + 1]; - c[j + 1] = tmp; + int tmp = c[j]; + c[j] = c[j + 1]; + c[j + 1] = tmp; } } @@ -1554,7 +1554,7 @@ static int independent_positions (Vector &interface) for (i = 0; i < j && !depends; i++) { Real d2 = 0.; for (int c = 0; c < AMREX_SPACEDIM; c++) - d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); + d2 += (interface[i][c] - interface[j][c])*(interface[i][c] - interface[j][c]); depends = d2 < 0.5*0.5; } ni += !depends; @@ -1583,43 +1583,43 @@ static int independent_positions (Vector &interface) * contained in @(i,j,k), or %VOF_NODATA if the HF method could not * compute a consistent curvature. */ -Real height_curvature_combined (int i,int j,int k, GpuArray dx, - Array4 const & hb, +Real height_curvature_combined (int i,int j,int k, GpuArray dx, + Array4 const & hb, Array4 const & ht, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; Array try_dir; for (int d = 0; d < AMREX_SPACEDIM; d++) m[d] = mv(i,j,k,d); - orientation (m, try_dir); /* sort directions according to normal */ + orientation (m, try_dir); /* sort directions according to normal */ Real kappa = 0.; Vector interface; for (int d = 0; d < AMREX_SPACEDIM; d++) /* try each direction */ if (curvature_along_direction_new (i, j, k, try_dir[d], dx, hb, ht, kappa, interface)) - return kappa; + return kappa; /* Could not compute curvature from the simple algorithm along any direction: * Try parabola fitting of the collected interface positions */ if (independent_positions (interface) < 3*(AMREX_SPACEDIM - 1)) - return VOF_NODATA; + return VOF_NODATA; ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - + ////#if AMREX_SPACEDIM==2 //// parabola_fit_add (&fit, &fc.x, PARABOLA_FIT_CENTER_WEIGHT); ////#elif !PARABOLA_SIMPLER @@ -1634,11 +1634,11 @@ Real height_curvature_combined (int i,int j,int k, GpuArray dx, +Real curvature_fit (int i,int j,int k, GpuArray dx, Array4 const & vof, - Array4 const & mv, - Array4 const & alpha) + Array4 const & mv, + Array4 const & alpha) { - VofVector m; + VofVector m; for (int d = 0; d < AMREX_SPACEDIM; d++) - m[d] = mv(i,j,k,d); + m[d] = mv(i,j,k,d); ParabolaFit fit; XDim3 mx={AMREX_D_DECL(m[0],m[1],m[2])},p; - + Real area=plane_area_center (mx, alpha(i,j,k,0),p); - //shift the coordinates of the center of the interfacial segment - //by using the center of the cube. plane_area_center() gives the + //shift the coordinates of the center of the interfacial segment + //by using the center of the cube. plane_area_center() gives the //coordinates of area center with the coordinate origin as (0.,0.,0.) - //After shifting, the origin becomes cell center. + //After shifting, the origin becomes cell center. for (int c = 0; c < AMREX_SPACEDIM; c++) (&p.x)[c] -= 0.5; // initialize the parameters for parabola fit parabola_fit_init (fit, p, mx); - // add the center of the segment with the area of the segment as weight + // add the center of the segment with the area of the segment as weight parabola_fit_add (fit, {AMREX_D_DECL(p.x,p.y,p.z)}, area); int di=0,dj=0,dk=0; #if AMREX_SPACEDIM==3 @@ -1685,17 +1685,17 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, #endif for (dj = -2; dj <= 2; dj++) for (di = -2; di <= 2; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; Real fvol=vof(ni,nj,nk,0); - if (!CELL_IS_FULL(fvol)){ - mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); - } - } + if (!CELL_IS_FULL(fvol)){ + mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } + } parabola_fit_solve (fit); Real kappa = parabola_fit_curvature (fit, 2.)/dx[0]; # if PARABOLA_SIMPLER || AMREX_SPACEDIM==2 @@ -1703,11 +1703,11 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, # else int nn=6; # endif - for (int c = 0; c < nn; c++) + for (int c = 0; c < nn; c++) delete[] fit.M[c]; // Delete each row delete[] fit.M; // Delete the array of pointers - return kappa; -} + return kappa; +} ////////////////////////////////////////////////////////////////////////////////////////////////// /////// /////// Update VOF properties including height values and normal direction @@ -1721,146 +1721,146 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); auto const& probhi = geom.ProbHiArray(); -/////////////////////////////////////////////////// -// update height using vof field +/////////////////////////////////////////////////// +// update height using vof field /////////////////////////////////////////////////// for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ - + height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling - //an option is to use similar way as MPI's implementation. - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { + height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); + //fix me: have not thought of a way to deal with the MFIter with tiling + //an option is to use similar way as MPI's implementation. + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); - Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; + Array range ={bx.smallEnd()[dim], bx.bigEnd()[dim]}; Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& hb_arr = height[0].array(mfi); Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - if (!CELL_IS_FULL(fvol)){ - calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); - }// end if + { + auto fvol = vof_arr(i,j,k,0); + if (!CELL_IS_FULL(fvol)){ + calculate_height(i, j, k, dim, vof_arr, hb_arr, ht_arr, range); + }// end if }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); - + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); + //deal with the situation where interface goes across the MPI or periodic boundaries. if(1){ - for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ + for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { /*fix me: no titling*/ Box const& bx = mfi.validbox(); - Array face_min_max; + Array face_min_max; Array4 const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); - Array4 const& vof_arr = vof_mf.const_array(mfi); + Array4 const& ht_arr = height[1].array(mfi); + Array4 const& vof_arr = vof_mf.const_array(mfi); //search the cells on each boundary of the validbox - //we do it by creating a new indexing space (i.e., bbx) with a constant - //value for one coordinate direction. i.e., for +X face of the box, we can - // set i=imax and just vary j and k index. - Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; + //we do it by creating a new indexing space (i.e., bbx) with a constant + //value for one coordinate direction. i.e., for +X face of the box, we can + // set i=imax and just vary j and k index. + Array range = {bx.smallEnd()[dim],bx.bigEnd()[dim]}; auto ijk_min= bx.smallEnd(); auto ijk_max= bx.bigEnd(); //only loop through cells on two faces in the axis (defined by 'dim') - for (int nn = 0; nn < 2; nn++){ + for (int nn = 0; nn < 2; nn++){ //Note: we use the notation of Gerris for the direction of the Box (i.e.,FttDirection) -// FACE direction = 0,1,2,3,4,5 in 3D +// FACE direction = 0,1,2,3,4,5 in 3D // X+ (Right):0, X- (Left):1, Y+ (Top): 2, Y- (Bottom): 3, Z+ (Front): 4, Z- (Back):5 // direction%2=0 means the positive direction of a given axis direction (i.e.,int direction/2) -// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) +// direction%2=1 means the negative direction of a given axis direction (i.e.,int direction/2) // Axis direction = 0 (X-axis), 1(Y-axis), 2(Z-axis) // therefore, 'nn=0' here means the positive direction. - ijk_min[dim]= range[nn?0:1]; - ijk_max[dim]= range[nn?0:1]; + ijk_min[dim]= range[nn?0:1]; + ijk_max[dim]= range[nn?0:1]; Box bbx(ijk_min, ijk_max); -// loop through the cells on the face of the box ('bbx') - ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - Array cell={i,j,k}, ghost=cell; - ghost[dim]+=nn%2?-1:1; - Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); - /*if (i==7 && j==0 && k==5){ - AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); - if(h==hn){ - // the column crosses the interface - // propagate column height correction from one side (or PE) to the other - Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); - Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); +// loop through the cells on the face of the box ('bbx') + ParallelFor(bbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + Array cell={i,j,k}, ghost=cell; + ghost[dim]+=nn%2?-1:1; + Array4 const * h=boundary_hit (i,j,k, dim, hb_arr,ht_arr); + /*if (i==7 && j==0 && k==5){ + AllPrint()<<"test_height_function "<<"hb "< const *hn=boundary_hit (ghost[0],ghost[1],ghost[2], dim, hb_arr,ht_arr); + if(h==hn){ + // the column crosses the interface + // propagate column height correction from one side (or PE) to the other + Real orientation = (nn%2 ? -1:1)*(h == &hb_arr ? 1 : -1); + Real h_ghost=(*h)(ghost[0],ghost[1],ghost[2],dim); Real Hn = h_ghost + 0.5 + (orientation - 1.)/2. - 2.*BOUNDARY_HIT; (*h)(i,j,k,dim) += Hn; - height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); - } - else{ - // the column does not cross the interface - Real hgh=(*h)(cell[0],cell[1],cell[2],dim); - while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && - hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { - (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; - cell[dim]+=nn%2?1:-1; - } - } - } - else{ + height_propagation_from_boundary (cell, dim, 2*dim+nn, vof_arr, *h, range, h == &hb_arr ? 1 : -1); + } + else{ + // the column does not cross the interface + Real hgh=(*h)(cell[0],cell[1],cell[2],dim); + while (!CELL_IS_BOUNDARY(cell,bx.smallEnd(),bx.bigEnd()) && + hgh!= VOF_NODATA && hgh> BOUNDARY_HIT/2.) { + (*h)(cell[0],cell[1],cell[2],dim) = VOF_NODATA; + cell[dim]+=nn%2?1:-1; + } + } + } + else{ // column did not hit a boundary, propagate height across PE boundary */ if (hb_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); + height_propagation (ghost, dim, vof_arr, hb_arr, range, 1.); if (ht_arr(ghost[0],ghost[1],ghost[2],dim)!= VOF_NODATA) - height_propagation (ghost, dim, vof_arr, ht_arr, range, -1.); - } - //Print()<<"face_loop "<<"i "< const& hb_arr = height[0].array(mfi); - Array4 const& ht_arr = height[1].array(mfi); + Array4 const& ht_arr = height[1].array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) - hb_arr(i,j,k,dim)= VOF_NODATA; - if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) - ht_arr(i,j,k,dim)= VOF_NODATA; - }); - } // end MFIter - //fix me: temporary solution for MPI boundaries - height[0].FillBoundary(geom.periodicity()); - height[1].FillBoundary(geom.periodicity()); + if (hb_arr(i,j,k,dim)!= VOF_NODATA && hb_arr(i,j,k,dim)> BOUNDARY_HIT/2) + hb_arr(i,j,k,dim)= VOF_NODATA; + if (ht_arr(i,j,k,dim)!= VOF_NODATA && ht_arr(i,j,k,dim)> BOUNDARY_HIT/2) + ht_arr(i,j,k,dim)= VOF_NODATA; + }); + } // end MFIter + //fix me: temporary solution for MPI boundaries + height[0].FillBoundary(geom.periodicity()); + height[1].FillBoundary(geom.periodicity()); }//end for dim -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha -///////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////// for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].array(mfi); Array4 const& al = alpha[lev].array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); - Array4 const& ht_arr = height[1].const_array(mfi); + Array4 const& ht_arr = height[1].const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { XDim3 m={0.,0.,0.}; - auto fvol = vof_arr(i,j,k,0); + auto fvol = vof_arr(i,j,k,0); THRESHOLD(fvol); /*if (i==5&&j==6&&k==8){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ -// if(1){ + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!height_normal (i,j,k, hb_arr, ht_arr, m)){ +// if(1){ if (!interface_cell (i,j,k, vof_arr, fvol)) { AMREX_D_TERM(mv(i,j,k,0) = Real(0.);, mv(i,j,k,1) = Real(0.);, @@ -1871,11 +1871,11 @@ if(1){ AMREX_D_PICK( ,Real f[3][3];, Real f[3][3][3];) stencil (i,j,k, vof_arr, f); mycs (f, &m.x); - } - } + } + } Real n = 0.; for (int d = 0; d < AMREX_SPACEDIM; d++) - n += fabs ((&m.x)[d]); + n += fabs ((&m.x)[d]); if (n > 0.) for (int d = 0; d < AMREX_SPACEDIM; d++) mv(i,j,k,d)= (&m.x)[d]/n; @@ -1912,19 +1912,19 @@ if(1){ /////////////////////////////////////////////////////////////////////////////////////////////// void VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array & height, MultiFab & kappa) -{ +{ Geometry const& geom =v_incflo->geom[lev]; auto const& dx = geom.CellSizeArray(); auto const& problo = geom.ProbLoArray(); - auto const& probhi = geom.ProbHiArray(); + auto const& probhi = geom.ProbHiArray(); MultiFab n_max(v_incflo->grids[lev], v_incflo->dmap[lev], 1, v_incflo->nghost_state(), - MFInfo(), v_incflo->Factory(lev)); - //fixme: need to change for BCs + MFInfo(), v_incflo->Factory(lev)); + //fixme: need to change for BCs kappa.setVal(VOF_NODATA,0,1,v_incflo->nghost_state()); - n_max.setVal(-1.0); -// use height function method to calculate curvature - for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + n_max.setVal(-1.0); +// use height function method to calculate curvature + for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& vof_arr = vof_mf.const_array(mfi); @@ -1932,42 +1932,42 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); - Array4 const& nmax_arr = n_max.array(mfi); + Array4 const& nmax_arr = n_max.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); - Real kappa0; - if (!CELL_IS_FULL(fvol)){ + { + auto fvol = vof_arr(i,j,k,0); + Real kappa0; + if (!CELL_IS_FULL(fvol)){ /* if ((i==4||i==11)&&j==9&&k==0){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ + int dddd; + Print()<<"------------"<<"\n"; + }*/ if (curvature_along_direction(i, j, k, dim, dx, hb_arr, ht_arr, kappa0)) { if (fabs (mv(i,j,k,dim)) > nmax_arr(i,j,k,0)) { kappa_arr(i,j,k,0) = kappa0; nmax_arr(i,j,k,0) = fabs (mv(i,j,k,dim)); } - //propagate the curvature + //propagate the curvature Real orientation; - Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); + Array4 const * hv = closest_height (i,j,k,dim,hb_arr,ht_arr,&orientation); for (int d = 0; d <= 1; d++) { - Array neighbor={i,j,k}; + Array neighbor={i,j,k}; neighbor[dim]+=d?-1:1; - int *np=&neighbor[0]; - while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && - !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && - closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { - if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { + int *np=&neighbor[0]; + while (!CELL_IS_BOUNDARY(neighbor,bx.smallEnd(),bx.bigEnd()) && + !CELL_IS_FULL(vof_arr(*np,*(np+1),*(np+2),0)) && + closest_height (*np,*(np+1),*(np+2),dim,hb_arr,ht_arr,&orientation) == hv) { + if (fabs (mv(*np,*(np+1),*(np+2),dim)) > nmax_arr(*np,*(np+1),*(np+2),0)) { kappa_arr(*np,*(np+1),*(np+2),0) = kappa0; nmax_arr(*np,*(np+1),*(np+2),0) = fabs (mv(*np,*(np+1),*(np+2),dim)); } neighbor[dim]+=d?-1:1; } } - } - } - }); // ParallelFor - }//end MFIter + } + } + }); // ParallelFor + }//end MFIter } //remaining_curvatures @@ -1975,84 +1975,84 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - auto fvol = vof_arr(i,j,k,0); + { + auto fvol = vof_arr(i,j,k,0); /*if ((i==4||i==11)&&j==11&&k==0){ - int dddd; - Print()<<"------------"<<"\n"; - }*/ - if (!CELL_IS_FULL(fvol)){ - if (kappa_arr(i,j,k,0)==VOF_NODATA){ - // try height function and paraboloid fitting + int dddd; + Print()<<"------------"<<"\n"; + }*/ + if (!CELL_IS_FULL(fvol)){ + if (kappa_arr(i,j,k,0)==VOF_NODATA){ + // try height function and paraboloid fitting Real kappa0= height_curvature_combined (i,j,k, dx,hb_arr,ht_arr,mv,alpha_arr); - if (kappa0!=VOF_NODATA) - kappa_arr(i,j,k,0)=kappa0; - //else - // try particle method (defined in partstr.H) - //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); - } - } - }); // ParallelFor - }//end MFIter + if (kappa0!=VOF_NODATA) + kappa_arr(i,j,k,0)=kappa0; + //else + // try particle method (defined in partstr.H) + //kappa_arr(i,j,k,0)= partstr_curvature (i,j,k,dx,problo,vof_arr,mv,alpha_arr); + } + } + }); // ParallelFor + }//end MFIter //!!!!!!!!fixme: a temporary solution for the curvature!!!!!!!!!!! // fill value of ghost cells (BCs, MPI info.) - kappa.FillBoundary(geom.periodicity()); - + kappa.FillBoundary(geom.periodicity()); + // diffuse curvatures int iter = 0; if (iter >0){ MultiFab temp_K(kappa.boxArray(), kappa.DistributionMap(),1,kappa.nGrow()); - //fixme: need to change for BCs - temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); + //fixme: need to change for BCs + temp_K.setVal(VOF_NODATA,0,1,kappa.nGrow()); while (iter--){ for (MFIter mfi(vof_mf,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); Array4 const& temp_arr = temp_K.array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if (kappa_arr(i,j,k,0)!=VOF_NODATA) - temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); - else{ - Real sa=0., s=0.; + { + if (kappa_arr(i,j,k,0)!=VOF_NODATA) + temp_arr(i,j,k,0)=kappa_arr(i,j,k,0); + else{ + Real sa=0., s=0.; /*#if AMREX_SPACEDIM==3 for (int dk = -1; dk <= 1; dk++) #endif for (int dj = -1; dj <= 1; dj++) for (int di = -1; di <= 1; di++) - if (di != 0|| dj != 0|| dk != 0) { - int ni=i+di,nj=j+dj,nk=k+dk; - if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ - s += kappa_arr(ni,nj,nk,0); - sa += 1.; - } - }*/ + if (di != 0|| dj != 0|| dk != 0) { + int ni=i+di,nj=j+dj,nk=k+dk; + if (kappa_arr(ni,nj,nk,0)!=VOF_NODATA){ + s += kappa_arr(ni,nj,nk,0); + sa += 1.; + } + }*/ Arraynei; - for (int c = 0; c < AMREX_SPACEDIM; c++){ - nei[0]=i,nei[1]=j,nei[2]=k; - for (int di = -1; di <= 1; di+=2){ - nei[c]=(c==0?i:c==1?j:k)+di; - if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ - s += kappa_arr(nei[0],nei[1],nei[2],0); - sa += 1.; - } - } - } - if (sa > 0.) + for (int c = 0; c < AMREX_SPACEDIM; c++){ + nei[0]=i,nei[1]=j,nei[2]=k; + for (int di = -1; di <= 1; di+=2){ + nei[c]=(c==0?i:c==1?j:k)+di; + if (kappa_arr(nei[0],nei[1],nei[2],0)!=VOF_NODATA){ + s += kappa_arr(nei[0],nei[1],nei[2],0); + sa += 1.; + } + } + } + if (sa > 0.) temp_arr(i,j,k,0)=s/sa; - else - temp_arr(i,j,k,0)=VOF_NODATA; - } - }); // ParallelFor - }//end MFIter + else + temp_arr(i,j,k,0)=VOF_NODATA; + } + }); // ParallelFor + }//end MFIter } - MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); + MultiFab::Copy(kappa, temp_K, 0, 0, 1, kappa.nGrow()); } //fit_curvatures using paraboloid fitting of the centroids of the //reconstructed interface segments @@ -2060,47 +2060,47 @@ VolumeOfFluid::curvature_calculation (int lev, MultiFab & vof_mf, Array const& vof_arr = vof_mf.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& hb_arr = height[0].const_array(mfi); Array4 const& ht_arr = height[1].const_array(mfi); Array4 const& kappa_arr = kappa.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { /*if ((i==4||i==11)&&j==11&&k==0){ - int dddd; - Print()<<"------------"< kout,removed_elements; + } + }; + Vector kout,removed_elements; Box const& domain = geom.Domain(); - IntVect half= (domain.smallEnd()+domain.bigEnd())/2; + IntVect half= (domain.smallEnd()+domain.bigEnd())/2; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -2129,47 +2129,47 @@ if (0){ Box const& bx = mfi.tilebox(); const auto lo = lbound(bx); const auto hi = ubound(bx); - + Array4 const& vof_arr = vof_mf.const_array(mfi); - Array4 const& mv = normal[lev].const_array(mfi); - Array4 const& alpha_arr = alpha[lev].const_array(mfi); + Array4 const& mv = normal[lev].const_array(mfi); + Array4 const& alpha_arr = alpha[lev].const_array(mfi); Array4 const& kappa_arr = kappa.const_array(mfi); for (int k = lo.z; k <= hi.z; ++k) { for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { /* if(i==6&&j==4&&k==7) - Print() <<" ---- "<<"("<0? 0.:180.); - Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); - Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); - /* Print() <<" ---- "<<"("<0? 0.:180.); + Real nnxy=(p.x>0.?1.:-1.)*sqrt(p.x*p.x+p.y*p.y); + Real angle =acos(nnxy/nn)*180./PI+(p.z>0? 0.:180.); + /* Print() <<" ---- "<<"("< 1){ @@ -2194,27 +2194,27 @@ if (0){ // Create the MPI datatype MPI_Type_create_struct(6, lengths, disp, types, &mpi_kappa_type); MPI_Type_commit(&mpi_kappa_type); - + // Gather data from all processes Vector recvcounts(nprocs); Vector displs(nprocs, 0); MPI_Gather(&nn, 1, MPI_INT, recvcounts.data(), 1, MPI_INT, 0, MPI_COMM_WORLD); - for (int i = 1; i < nprocs; ++i) + for (int i = 1; i < nprocs; ++i) displs[i] = displs[i-1] + recvcounts[i-1]; - + Vector all_data(displs[nprocs-1] + recvcounts[nprocs-1]); - int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); - MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), - recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); - kout=all_data; - } - - if (myproc==0){ + int kk=sizeof(KappaPrint),tt=sizeof(XDim3), dd=sizeof(all_data); + MPI_Gatherv(kout.data(), kout.size(), mpi_kappa_type, all_data.data(), + recvcounts.data(), displs.data(), mpi_kappa_type, 0, MPI_COMM_WORLD); + kout=all_data; + } + + if (myproc==0){ // Sort the vector by center.x from high to low std::sort(kout.begin(), kout.end(), [](const KappaPrint& a, const KappaPrint& b) { return a.center.x > b.center.x; }); - + // Use remove_if and copy elements that match center.y<0. to removed_elements auto it = std::remove_if(kout.begin(), kout.end(), [&](const KappaPrint& kp) { if (kp.center.z < 0.) { @@ -2224,31 +2224,31 @@ if (0){ return false; }); // Erase the removed elements from the original vector - kout.erase(it, kout.end()); + kout.erase(it, kout.end()); // Append the removed elements back to the original vector kout.insert(kout.end(), removed_elements.begin(), removed_elements.end()); - - + + Print()<<"# of interfacial cells"< const& tracer, m_total_flux[lev].setVal(0.0); vof_total_flux[lev].setVal(0.0); MultiFab const * U_MF = dir < 1? u_mac[lev]: -#if AMREX_SPACEDIM == 3 +#if AMREX_SPACEDIM == 3 dir >= 2? w_mac[lev]: -#endif - v_mac[lev]; +#endif + v_mac[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2464,22 +2464,22 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, // add surface tension force (F) to the MAC velocity at the center of cell faces. // F = dt*sigma*kappa*grad(VOF)/rho // Umac <- Uma-F, note minus sign before F because of the way which curvature being calculated. -// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered +// kappa and rho need to be estimated at the cell face center. The simple average of the cell-centered // values of two neighboring cells dilimited by the face is used to calculate the face-centered value. -// grad(VOF) is also estimated at the face center using the center-difference method for two cells +// grad(VOF) is also estimated at the face center using the center-difference method for two cells // i.e., in x-dir, grad(VOF)= (VOFcell[1]-VOFcell[0])/dx[0]. // u_mac/v_mac/w_mac stores the face-centered velocity (MAC). // // gu_mac/gv_mac/gw_mac stores the face-centered value of F/dt (i.e., sigma*kappa*grad(VOF)/rho) // gu_mac/gv_mac/gw_mac will be averaged to the cell center when correcting the cell-centered velocity -// after final cell-centered projection. -void +// after final cell-centered projection. +void VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u_mac, MultiFab& v_mac, MultiFab& w_mac), AMREX_D_DECL(MultiFab* gu_mac, MultiFab* gv_mac, MultiFab* gw_mac)) { auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); - auto const& dx = geom.CellSizeArray(); + auto const& dx = geom.CellSizeArray(); Real sigma = v_incflo->m_sigma[0]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2489,71 +2489,71 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u Box const& bx = mfi.tilebox(); Box const& xbx = mfi.nodaltilebox(0); Box const& ybx = mfi.nodaltilebox(1); - Box const& zbx = mfi.nodaltilebox(2); + Box const& zbx = mfi.nodaltilebox(2); Array4 const& rho = ld.density.const_array(mfi); - Array4 const& tra = ld.tracer.const_array(mfi); + Array4 const& tra = ld.tracer.const_array(mfi); Array4 const& kap = kappa[lev].const_array(mfi); - AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, - Array4 const& vmac = v_mac.array(mfi);, - Array4 const& wmac = w_mac.array(mfi);); + AMREX_D_TERM(Array4 const& umac = u_mac.array(mfi);, + Array4 const& vmac = v_mac.array(mfi);, + Array4 const& wmac = w_mac.array(mfi);); AMREX_D_TERM(Array4 gumac;, Array4 gvmac;,Array4 gwmac;); AMREX_D_TERM(if(gu_mac) gumac = gu_mac->array(mfi);, - if(gv_mac) gvmac = gv_mac->array(mfi);, - if(gw_mac) gwmac = gw_mac->array(mfi);); + if(gv_mac) gvmac = gv_mac->array(mfi);, + if(gw_mac) gwmac = gw_mac->array(mfi);); ParallelFor(xbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real kaf; - if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) - kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); - else if (kap(i,j,k,0)!=VOF_NODATA) - kaf=kap(i,j,k); - else if (kap(i-1,j,k,0)!=VOF_NODATA) + if(kap(i,j,k,0)!=VOF_NODATA && kap(i-1,j,k,0)!=VOF_NODATA) + kaf=Real(0.5)*(kap(i,j,k,0)+kap(i-1,j,k,0)); + else if (kap(i,j,k,0)!=VOF_NODATA) + kaf=kap(i,j,k); + else if (kap(i-1,j,k,0)!=VOF_NODATA) kaf=kap(i-1,j,k); - else + else kaf=0.; - // density estimated at the face center, time increment is half of the timestep, i.e., dt/2 - //Print()< center1{AMREX_D_DECL((problo[0]+.5), (problo[1]+.75), - (problo[2]+.35))}; + (problo[2]+.35))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), - 0.5*(problo[2]+probhi[2]))}; + 0.5*(problo[2]+probhi[2]))}; Real radius = .2; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); - EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); - - Array radii{AMREX_D_DECL(.2, .3, .25)}; - EB2::EllipsoidIF my_ellipsoid(radii, center, fluid_is_inside); + EB2::SphereIF my_sphere1(radius, center1, fluid_is_inside); + + Array radii{AMREX_D_DECL(.2, .3, .25)}; + EB2::EllipsoidIF my_ellipsoid(radii, center, fluid_is_inside); // Initialise cylinder parameters int direction = 2; @@ -2619,7 +2619,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (0.5*(problo[2]+probhi[2])-.2))}; Array high{AMREX_D_DECL((0.5*(problo[0]+probhi[0])+.2), (0.5*(problo[1]+probhi[1])+.2), - (0.5*(problo[2]+probhi[2])+.2))}; + (0.5*(problo[2]+probhi[2])+.2))}; auto my_box= EB2::BoxIF( low, high, fluid_is_inside); //auto my_box= EB2::rotate(EB2::BoxIF( low, high, fluid_is_inside), .3, 1); auto my_box1= EB2::rotate(my_box, .3, 0); @@ -2630,7 +2630,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Generate GeometryShop //auto gshop = EB2::makeShop(two); //auto gshop = EB2::makeShop(my_box); - auto gshop = EB2::makeShop(my_box); + auto gshop = EB2::makeShop(my_box); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2644,18 +2644,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); } - } - else + } + else #endif { struct VOFPrint{ - Real vof; + Real vof; int i,j,k; // Default constructor VOFPrint() : vof(0), i(0), j(0), k(0) {} // Constructor to initialize the VOFPrint - VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} + VOFPrint(Real ka,int i, int j, int k): vof(ka),i(i),j(j),k(k){} // Copy assignment operator VOFPrint& operator=(const VOFPrint& other) { if (this != &other) { // self-assignment check @@ -2665,18 +2665,18 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) k = other.k; } return *this; - } - }; - Vector vout; + } + }; + Vector vout; // Define the file name - std::string filename = "vof_value-32.dat"; + std::string filename = "vof_value-32.dat"; // Open the file std::ifstream infile(filename); - + if (!infile) { std::cerr << "Unable to open file " << filename << std::endl; - exit; - } + exit; + } // Read the file line by line std::string line; while (std::getline(infile, line)) { @@ -2686,37 +2686,37 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) if (!(iss >> i >> j >> k >> value)) { std::cerr << "Error reading line: " << line << std::endl; continue; - } + } vout.emplace_back(value,i,j,k); - } - infile.close(); + } + infile.close(); #ifdef AMRE_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif for (MFIter mfi(a_tracer,TilingIfNotGPU()); mfi.isValid(); ++mfi) { //Box const& vbx = mfi.validbox(); - Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); + Box const& vbx = amrex::grow(mfi.tilebox(),a_tracer.nGrow()); auto const& tracer = a_tracer.array(mfi); - - for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& - vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1] + + for(int n=0;n=vbx.smallEnd()[0]&&vout[n].i<=vbx.bigEnd()[0]&& + vout[n].j>=vbx.smallEnd()[1]&&vout[n].j<=vbx.bigEnd()[1] #if AMREX_SPACEDIM==2 &&vout[n].k==7) -#else - &&vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]) +#else + &&vout[n].k>=vbx.smallEnd()[2]&&vout[n].k<=vbx.bigEnd()[2]) #endif - { - //if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ -#if AMREX_SPACEDIM==2 + { + //if(vbx.contains(vout[n].i,vout[n].j,vout[n].k)){ +#if AMREX_SPACEDIM==2 tracer(vout[n].i,vout[n].j,0,0)=vout[n].vof; -#else - tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; -#endif - } - - /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept +#else + tracer(vout[n].i,vout[n].j,vout[n].k,0)=vout[n].vof; +#endif + } + + /*amrex::ParallelFor(vbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = problo[0] + Real(i+0.5)*dx[0]; Real y = problo[1] + Real(j+0.5)*dx[1]; @@ -2742,15 +2742,15 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) else tracer(i,j,k) = 0.5-rs; });*/ } - + } // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. tracer_vof_update(lev, a_tracer, height[lev]); - curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); - int n_tag=domain_tag_droplets (finest_level, v_incflo->grids,v_incflo->geom, - v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); + curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); + int n_tag=domain_tag_droplets (finest_level, v_incflo->grids,v_incflo->geom, + v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); } @@ -2798,11 +2798,11 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); Vector segments; int totalnodes = 0, k=0; -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { @@ -2822,7 +2822,7 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) (&p.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+(&p.x)[dim]); (¢er.x)[dim] = problo[dim] + dx[dim]*((dim<1?i:dim<2?j:k)+Real(0.5)); } - Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; + Array vars={fvol,tag_arr(i,j,k),kappa_arr(i,j,k)}; /* Print() << " ijk index " <<"("< 0) { // std::ofstream TecplotFile; @@ -2840,30 +2840,30 @@ VolumeOfFluid::write_tecplot_surface(Real time, int nstep) TecplotFile << (AMREX_SPACEDIM== 2 ? "VARIABLES = \"X\", \"Y\"":"VARIABLES = \"X\", \"Y\", \"Z\""); //output variables TecplotFile <<", \"F\""<<", \"m_x\""<<", \"m_y\"" -#if AMREX_SPACEDIM==3 - <<", \"m_z\"" +#if AMREX_SPACEDIM==3 + <<", \"m_z\"" #endif - <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; + <<", \"alpha\""<<", \"tag\""<<", \"kappa\""<<"\n"; std::string zonetitle=("Level_"+std::to_string(lev)+ "_Box_" +std::to_string(mfi.index())+ "_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); - TecplotFile <<", DATAPACKING=POINT"<<", NODES="<m_use_cc_proj; + bool m_use_cc_proj=v_incflo->m_use_cc_proj; auto& ld = *v_incflo->m_leveldata[lev]; Geometry const& geom = v_incflo->Geom(lev); Box const& domain = geom.Domain(); @@ -2954,35 +2954,35 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) auto const& ijk_min= bx.smallEnd(); auto const& ijk_max= bx.bigEnd(); std::string zonetitle=("Level_"+std::to_string(lev)+"_Box_"+std::to_string(mfi.index()) - +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); + +"_Proc_"+std::to_string(myproc)+"_step_"+std::to_string(nstep)); TecplotFile <<(std::string("ZONE T=")+zonetitle); for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(m_use_cc_proj?AMREX_SPACEDIM+1:AMREX_SPACEDIM+2)<<"-" - <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" + <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" <<", SOLUTIONTIME="< const& pa_nd = ld.p_nd.const_array(mfi); - Array4 const& pa_cc = ld.p_cc.const_array(mfi); - Array4 const& pa_mac = ld.mac_phi.const_array(mfi); + Array4 const& pa_cc = ld.p_cc.const_array(mfi); + Array4 const& pa_mac = ld.mac_phi.const_array(mfi); Array4 const& tracer = ld.tracer.const_array(mfi); Array4 const& vel = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); Array4 const& tag_arr = tag[lev].const_array(mfi); - Array4 const& hb_arr = height[lev][0].const_array(mfi); - Array4 const& ht_arr = height[lev][1].const_array(mfi); - Array4 const& kappa_arr = kappa[lev].const_array(mfi); - Array4 const& density_arr = ld.density.const_array(mfi); - Array4 const& force_arr = force[lev].const_array(mfi); + Array4 const& hb_arr = height[lev][0].const_array(mfi); + Array4 const& ht_arr = height[lev][1].const_array(mfi); + Array4 const& kappa_arr = kappa[lev].const_array(mfi); + Array4 const& density_arr = ld.density.const_array(mfi); + Array4 const& force_arr = force[lev].const_array(mfi); int nn=0, k=0; //write coordinate variables for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z +1; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y +1; ++j) { for (int i = lo.x; i <= hi.x +1; ++i) { TecplotFile << (problo[dim]+dx[dim]*(dim<1?i:dim<2?j:k))<<" "; @@ -2993,13 +2993,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write presure - int nt=m_use_cc_proj?0:1; -#if AMREX_SPACEDIM==3 + int nt=m_use_cc_proj?0:1; +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z+nt; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y+nt; ++j) { for (int i = lo.x; i <= hi.x+nt; ++i) { TecplotFile << (m_use_cc_proj?pa_cc(i,j,k):pa_nd(i,j,k))<<" "; @@ -3010,11 +3010,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - - //write VOF -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + + //write VOF +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tracer(i,j,k,0)<<" "; @@ -3025,12 +3025,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write velocity for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << vel(i,j,k,dim)<<" "; @@ -3041,14 +3041,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write variables of the normal direction of the interface for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << mv(i,j,k,dim)<<" "; @@ -3059,13 +3059,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// //write alpha of the interface #if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << al(i,j,k)<<" "; @@ -3076,12 +3076,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write id of the droplets or bubbles -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) -#endif +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << tag_arr(i,j,k)<<" "; @@ -3092,14 +3092,14 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write height function values for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 - for (k = lo.z; k <= hi.z; ++k) +#if AMREX_SPACEDIM==3 + for (k = lo.z; k <= hi.z; ++k) #endif for (int j = lo.y; j <= hi.y; ++j) { - for (int i = lo.x; i <= hi.x; ++i) { + for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << hb_arr(i,j,k,dim)<<" "; ++nn; if (nn > 100) { @@ -3108,12 +3108,12 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << ht_arr(i,j,k,dim)<<" "; @@ -3124,11 +3124,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - }// + }// //write curvature -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << kappa_arr(i,j,k)<<" "; @@ -3139,11 +3139,11 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write density -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << density_arr(i,j,k)<<" "; @@ -3154,13 +3154,13 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + //write force vector for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) { -#if AMREX_SPACEDIM==3 +#if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z; ++k) -#endif +#endif for (int j = lo.y; j <= hi.y; ++j) { for (int i = lo.x; i <= hi.x; ++i) { TecplotFile << force_arr(i,j,k,dim)<<" "; @@ -3171,9 +3171,9 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } } } - + }// - + TecplotFile <<"\n"; } // end MFIter @@ -3348,7 +3348,7 @@ int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector cons ,ort2=ORTHOGONAL_COMPONENT(ort1);//2nd transverse direction for (int n=0;n<2;n++){ int k0=dim_limit[n][d],gd=k0+(n==0?-1:1); - for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ + for(int i0=ijk_min[ort1];i0<=ijk_max[ort1];i0++){ #if AMREX_SPACEDIM==2 /*2D*/ Real tag_cell=(d==0?tag_arr(k0,i0,0):tag_arr(i0,k0,0)); if(tag_cell > 0){ @@ -3356,7 +3356,7 @@ int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector cons if(tag_gcell > 0) touching_regions (tag_cell, tag_gcell, touch); } -#else /*3D */ +#else /*3D */ for(int j0=ijk_min[ort2];j0<=ijk_max[ort2];j0++){ Real tag_cell=(d==0?tag_arr(k0,i0,j0): d==1?tag_arr(j0,k0,i0): @@ -3369,8 +3369,8 @@ int VolumeOfFluid::domain_tag_droplets (int finest_level, Vector cons touching_regions (tag_cell, tag_gcell, touch); } }// end for-loop for searching cells in the boundaries. -#endif - } +#endif + } }// end for-loop for low and high boundary }// end for-loop for AMREX_SPACEDIM } @@ -3475,7 +3475,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Real vtop[n_tag], range[AMREX_SPACEDIM][2][n_tag]; for (int n = 0; n < n_tag; n++){ ncell[n]=0; vols[n] = 0.; vels[n] = 0.; surfA[n]=0.; vtop[n] = 0.; - range_init (kappa_range[n]); + range_init (kappa_range[n]); for(int d = 0; d < AMREX_SPACEDIM; d++) { mcent[d][n]=0.; range_init (s[d][n]); @@ -3496,7 +3496,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) Array4 const& vel_arr = ld.velocity.const_array(mfi); Array4 const& mv = normal[lev].const_array(mfi); Array4 const& al = alpha[lev].const_array(mfi); - Array4 const& ka = kappa[lev].const_array(mfi); + Array4 const& ka = kappa[lev].const_array(mfi); //fix me: not compatible with GPUs // ParallelFor(bx, [&] AMREX_GPU_DEVICE (int i, int j, int k) noexcept // { @@ -3536,15 +3536,15 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); for(int d = 0; d < AMREX_SPACEDIM; d++) range_add_value (s[d][itag-1], (&p.x)[d]); - // do statistics of the curvature data - range_add_value (kappa_range[itag-1], ka(i,j,k,0)); + // do statistics of the curvature data + range_add_value (kappa_range[itag-1], ka(i,j,k,0)); } } // }); }}} //end of the ijk-loop }//end MFIter - for (int n = 0; n < n_tag; n++) + for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs if (ParallelDescriptor::NProcs()> 1){ @@ -3565,11 +3565,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) domain_range_reduce(s[d][n]); } - // sum curvature info. - for (int n = 0; n < n_tag; n++){ + // sum curvature info. + for (int n = 0; n < n_tag; n++){ domain_range_reduce(kappa_range[n]); - range_update (kappa_range[n]); - } + range_update (kappa_range[n]); + } } //////////////////////////////////////////////////////////////////// ////// @@ -3585,13 +3585,13 @@ if (0){ cube_min,cube_max; //theoretical centroid of regid body movement for (int d = 0; d < AMREX_SPACEDIM; d++){ - o[d] = o0[d]+1.0*time; + o[d] = o0[d]+1.0*time; cube_min[d]=o[d]-lencube*.5; cube_max[d]=o[d]+lencube*.5; int np=cube_min[d]/(probhi[d]-problo[d]); cube_min[d]-=np*(probhi[d]-problo[d]); np=cube_max[d]/(probhi[d]-problo[d]); - cube_max[d]-=np*(probhi[d]-problo[d]); + cube_max[d]-=np*(probhi[d]-problo[d]); } Print()<<"cube center"< Date: Mon, 7 Oct 2024 16:26:45 -0700 Subject: [PATCH 25/29] update for conservative advection scheme --- ...ncflo_compute_MAC_projected_velocities.cpp | 2 +- .../incflo_compute_advection_term.cpp | 16 ++--- src/incflo.H | 2 + src/incflo_apply_predictor.cpp | 17 +++--- src/incflo_update_density.cpp | 58 +++++++++++++++++-- src/projection/incflo_apply_cc_projection.cpp | 4 +- src/setup/init.cpp | 7 ++- test_3d/inputs.droplet | 6 +- 8 files changed, 85 insertions(+), 27 deletions(-) diff --git a/src/convection/incflo_compute_MAC_projected_velocities.cpp b/src/convection/incflo_compute_MAC_projected_velocities.cpp index 0ba9aae1a..e8f44055d 100644 --- a/src/convection/incflo_compute_MAC_projected_velocities.cpp +++ b/src/convection/incflo_compute_MAC_projected_velocities.cpp @@ -98,7 +98,7 @@ incflo::compute_MAC_projected_velocities ( LPInfo lp_info; lp_info.setMaxCoarseningLevel(m_mac_mg_max_coarsening_level); #ifndef AMREX_USE_EB - if (m_constant_density) { + if (m_constant_density&&!m_vof_advect_tracer) { Vector ba; Vector dm; for (auto const& ir : inv_rho) { diff --git a/src/convection/incflo_compute_advection_term.cpp b/src/convection/incflo_compute_advection_term.cpp index 85bd4207f..d1e449ffa 100644 --- a/src/convection/incflo_compute_advection_term.cpp +++ b/src/convection/incflo_compute_advection_term.cpp @@ -66,7 +66,7 @@ incflo::compute_convective_term (Vector const& conv_u, // Make one flux MF at each level to hold all the fluxes (velocity, density, tracers) int n_flux_comp = AMREX_SPACEDIM; - if (!m_constant_density) n_flux_comp += 1; + if (!m_constant_density&&!m_update_density_from_vof) n_flux_comp += 1; if ( m_advect_tracer) n_flux_comp += m_ntrac; // This will hold state on faces @@ -139,7 +139,7 @@ incflo::compute_convective_term (Vector const& conv_u, // and compute the tracer forcing terms for the first time if (m_advection_type != "MOL") { - compute_vel_forces(vel_forces, vel, density, tracer, tracer, true, true); + compute_vel_forces(vel_forces, vel, density, tracer, tracer); if (m_godunov_include_diff_in_forcing) { @@ -319,7 +319,7 @@ incflo::compute_convective_term (Vector const& conv_u, Multiply(vel_nph, rho_nph, 0, n, 1, 1); } } - + //vel_nph.setVal(0.); if (m_advect_tracer && (m_ntrac>0)) { trac_nph.setVal(0.); fillphysbc_tracer(lev, time_nph, trac_nph, 1); @@ -446,7 +446,7 @@ incflo::compute_convective_term (Vector const& conv_u, // ************************************************************************ // Density // ************************************************************************ - if (!m_constant_density) + if (!m_constant_density&&!m_update_density_from_vof) { face_comp = AMREX_SPACEDIM; ncomp = 1; @@ -512,7 +512,7 @@ incflo::compute_convective_term (Vector const& conv_u, }); } - if (m_constant_density) + if (m_constant_density||m_update_density_from_vof) face_comp = AMREX_SPACEDIM; else face_comp = AMREX_SPACEDIM+1; @@ -663,7 +663,7 @@ incflo::compute_convective_term (Vector const& conv_u, // Note: density is always updated conservatively -- we do not provide an option for // updating density convectively - if (!m_constant_density) + if (!m_constant_density&&!m_update_density_from_vof) { int flux_comp = AMREX_SPACEDIM; //Was this OMP intentionally left off? @@ -705,7 +705,7 @@ incflo::compute_convective_term (Vector const& conv_u, if (m_advect_tracer && m_ntrac > 0) { - int flux_comp = (m_constant_density) ? AMREX_SPACEDIM : AMREX_SPACEDIM+1; + int flux_comp = (m_constant_density||m_update_density_from_vof) ? AMREX_SPACEDIM : AMREX_SPACEDIM+1; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -783,7 +783,7 @@ incflo::compute_convective_term (Vector const& conv_u, bc_vel, lev); // density - if (!m_constant_density) { + if (!m_constant_density&&!m_update_density_from_vof) { auto const& bc_den = get_density_bcrec_device_ptr(); redistribute_term(mfi, *conv_r[lev], drdt_tmp, *density[lev], bc_den, lev); diff --git a/src/incflo.H b/src/incflo.H index ef990b41d..ba0bfb880 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -567,6 +567,8 @@ private: // VOF advection parameters bool m_vof_advect_tracer = false; + //Use VOF to update the density + bool m_update_density_from_vof = false; // density of the phase represented by VOF=1 amrex::Vector m_ro_s; // surface tension diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index 98d04f99a..d0f897e6b 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -125,11 +125,6 @@ void incflo::ApplyPredictor (bool incremental_projection) compute_viscosity(GetVecOfPtrs(vel_eta), get_density_old(), get_velocity_old(),get_tracer_old(), m_cur_time, 1); - //when VOF method is used to advect the tracer, density and viscosity of each cell will - // depend the VOF field value of the cell. - if (m_vof_advect_tracer) - for (int lev = 0; lev <= finest_level; ++lev) - update_vof_density (lev, get_density_old(),get_tracer_old()); // ************************************************************************************* // Compute explicit viscous term @@ -181,6 +176,11 @@ void incflo::ApplyPredictor (bool incremental_projection) GetVecOfPtrs(vel_forces), GetVecOfPtrs(tra_forces), m_cur_time); +// use vof to advect tracer + if (!incremental_projection && m_vof_advect_tracer) + tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), + GetVecOfConstPtrs(w_mac))); + // ************************************************************************************* // Update density // ************************************************************************************* @@ -224,8 +224,7 @@ void incflo::ApplyPredictor (bool incremental_projection) #endif // use vof to advect tracer - if (!incremental_projection && m_vof_advect_tracer) - tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), - GetVecOfConstPtrs(w_mac))); - +// if (!incremental_projection && m_vof_advect_tracer) +// tracer_vof_advection(get_tracer_new (), AMREX_D_DECL(GetVecOfConstPtrs(u_mac), GetVecOfConstPtrs(v_mac), +// GetVecOfConstPtrs(w_mac))); } diff --git a/src/incflo_update_density.cpp b/src/incflo_update_density.cpp index 7a16830a8..a11f7feea 100644 --- a/src/incflo_update_density.cpp +++ b/src/incflo_update_density.cpp @@ -2,6 +2,46 @@ using namespace amrex; +void diffuse_density(int lev, Vector const& density) +{ + const auto& ba = density[lev]->boxArray(); + const auto& dm = density[lev]->DistributionMap(); + const auto& fact = density[lev]->Factory(); + // store the nodal values (the last component stores the node-centered VOF) + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0 , MFInfo(), fact); + MultiFab center_val(ba,dm,1,0,MFInfo(), fact); + return; +#ifdef _OPENMP +#pragma omp parallel if (Gpu::notInLaunchRegion()) +#endif + for (MFIter mfi(*density[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + { + Box const& nbx = surroundingNodes(mfi.tilebox()); + Box const& vbx = mfi.validbox(); + Array4 const& nv = node_val.array(mfi); + Array4 const& rho = density[lev]->const_array(mfi); + ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + nv(i,j,k,0)=0.; + int nt=0, nrho=0, detk; +#if AMREX_SPACEDIM==3 + for (detk = 0; detk > -2; --detk) +#endif + for (int detj = 0; detj > -2; --detj) + for (int deti = 0; deti > -2; --deti) { + Array in{i+deti,j+detj,k+detk}; + //averaging density to nodes + nv(i,j,k,0)+= rho(in[0],in[1],in[2],0); + nrho++; + } + nv(i,j,k,1)/= Real(nrho); + }); + } + //average_node_to_cellcenter(center_val, 0, node_val, 0, 0); + // Copy(*density[lev], center_val , 0, 0, 1, 0); + +} + void incflo::update_density (StepType step_type) { BL_PROFILE("incflo::update_density"); @@ -14,6 +54,11 @@ void incflo::update_density (StepType step_type) { for (int lev = 0; lev <= finest_level; lev++) { + if(m_update_density_from_vof){ + update_vof_density (lev, get_density_new(),get_tracer_new()); + diffuse_density(lev, get_density_new()); + } + else{ auto& ld = *m_leveldata[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -39,6 +84,7 @@ void incflo::update_density (StepType step_type) }); } } // mfi + } } // lev // Average down solution @@ -67,10 +113,14 @@ void incflo::update_density (StepType step_type) } else { for (int lev = 0; lev <= finest_level; lev++) { - if (m_vof_advect_tracer){ - MultiFab::Copy(m_leveldata[lev]->density, m_leveldata[lev]->density_o, 0, 0, 1, m_leveldata[lev]->density_o.nGrow()); - } - MultiFab::Copy(m_leveldata[lev]->density_nph, m_leveldata[lev]->density_o, 0, 0, 1, ng); + if (m_vof_advect_tracer){ + //when VOF method is used to advect the tracer, density and viscosity of each cell will + //depend the VOF field value of the cell. + //fixme + update_vof_density (lev, get_density_new(),get_tracer_old()); + //MultiFab::Copy(m_leveldata[lev]->density, m_leveldata[lev]->density_o, 0, 0, 1, m_leveldata[lev]->density_o.nGrow()); + } + MultiFab::Copy(m_leveldata[lev]->density_nph, m_leveldata[lev]->density_o, 0, 0, 1, ng); } } } diff --git a/src/projection/incflo_apply_cc_projection.cpp b/src/projection/incflo_apply_cc_projection.cpp index ac3cfa336..0f7d688d8 100644 --- a/src/projection/incflo_apply_cc_projection.cpp +++ b/src/projection/incflo_apply_cc_projection.cpp @@ -313,7 +313,7 @@ void incflo::ApplyCCProjection (Vector density, macproj->setDomainBC(bclo, bchi); } else { #ifndef AMREX_USE_EB - if (m_constant_density) { + if (m_constant_density&&!m_vof_advect_tracer) { macproj->updateBeta(scaling_factor/m_ro_0); // unnecessary unless m_ro_0 changes. } else #endif @@ -354,7 +354,7 @@ void incflo::ApplyCCProjection (Vector density, get_velocity_bcrec(), get_velocity_bcrec_device_ptr()); #else - average_ccvel_to_mac( mac_vec[lev], *vel[lev]); + average_ccvel_to_mac( mac_vec[lev], *vel[lev]); #endif diff --git a/src/setup/init.cpp b/src/setup/init.cpp index ed40494d2..5a79345ab 100644 --- a/src/setup/init.cpp +++ b/src/setup/init.cpp @@ -167,6 +167,11 @@ void incflo::ReadParameters () m_sigma.resize(m_ntrac, 0.); pp.queryarr("sigma", m_sigma, 0, m_ntrac ); } + if(m_vof_advect_tracer){ + m_update_density_from_vof = true; + m_constant_density = false; + } + } // end prefix incflo ReadIOParameters(); @@ -503,7 +508,7 @@ incflo::InitialRedistribution () MultiFab::Copy(ld.velocity_o, ld.velocity, 0, 0, AMREX_SPACEDIM, ld.velocity.nGrow()); fillpatch_velocity(lev, m_t_new[lev], ld.velocity_o, 3); - if (!m_constant_density) + if (!m_constant_density||m_vof_advect_tracer) { ld.density.FillBoundary(geom[lev].periodicity()); MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 375ca342e..1f16e7212 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -14,7 +14,7 @@ incflo.cfl = 0.1 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 4 # Steps between plot files +amr.plot_int = 10 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -27,6 +27,7 @@ incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) incflo.mu = 1.0e-3 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 +incflo.constant_density = 0 incflo.mu_s = 2. incflo.ro_s = 1000.0 incflo.sigma = 10. @@ -80,7 +81,8 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 incflo.use_cc_proj = 1 -incflo.advect_momentum = 0 +incflo.advect_momentum =1 +incflo.diffusion_type = 2 incflo.godunov_include_diff_in_forcing = 1 incflo.use_mac_phi_in_godunov = 0 incflo.godunov_use_forces_in_trans = 0 From 4fefd68db19ccd062db63fc1cc58ec02293d914b Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 11 Oct 2024 18:43:35 -0700 Subject: [PATCH 26/29] implement filtering of VOF for high density ratio flows --- src/incflo.H | 6 ++- src/incflo_update_density.cpp | 62 +++++++---------------- src/prob/prob_init_fluid.cpp | 2 +- src/setup/init.cpp | 1 + src/vof/VolumeOfFluid.H | 2 + src/vof/VolumeOfFluid.cpp | 82 ++++++++++++++++++++++++------ src/vof/incflo_vof.cpp | 51 +++---------------- test_2d/inputs.capillarywave | 93 +++++++++++++++++++++++++++++++++++ test_2d/inputs.droplet | 15 ++++-- test_3d/delete.sh | 3 ++ test_3d/inputs.droplet | 33 +++++++------ 11 files changed, 224 insertions(+), 126 deletions(-) create mode 100644 test_2d/inputs.capillarywave create mode 100755 test_3d/delete.sh diff --git a/src/incflo.H b/src/incflo.H index ba0bfb880..f2dcf85bb 100644 --- a/src/incflo.H +++ b/src/incflo.H @@ -227,8 +227,7 @@ public: AMREX_D_DECL(amrex::Vector const& u_mac, amrex::Vector const& v_mac, amrex::Vector const& w_mac)); - void update_vof_density (int lev, amrex::Vector const& density, - amrex::Vector const& tracer); + void update_vof_density (int lev, amrex::MultiFab & density, amrex::MultiFab & tracer); [[nodiscard]] amrex::Array @@ -565,6 +564,9 @@ private: amrex::Real m_papa_reg = 0.0; amrex::Real m_eta_0 = 0.0; + //the number of averaging process for density + int m_number_of_averaging = 0; + // VOF advection parameters bool m_vof_advect_tracer = false; //Use VOF to update the density diff --git a/src/incflo_update_density.cpp b/src/incflo_update_density.cpp index a11f7feea..8df10b7d5 100644 --- a/src/incflo_update_density.cpp +++ b/src/incflo_update_density.cpp @@ -2,46 +2,6 @@ using namespace amrex; -void diffuse_density(int lev, Vector const& density) -{ - const auto& ba = density[lev]->boxArray(); - const auto& dm = density[lev]->DistributionMap(); - const auto& fact = density[lev]->Factory(); - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0 , MFInfo(), fact); - MultiFab center_val(ba,dm,1,0,MFInfo(), fact); - return; -#ifdef _OPENMP -#pragma omp parallel if (Gpu::notInLaunchRegion()) -#endif - for (MFIter mfi(*density[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Box const& vbx = mfi.validbox(); - Array4 const& nv = node_val.array(mfi); - Array4 const& rho = density[lev]->const_array(mfi); - ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - nv(i,j,k,0)=0.; - int nt=0, nrho=0, detk; -#if AMREX_SPACEDIM==3 - for (detk = 0; detk > -2; --detk) -#endif - for (int detj = 0; detj > -2; --detj) - for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //averaging density to nodes - nv(i,j,k,0)+= rho(in[0],in[1],in[2],0); - nrho++; - } - nv(i,j,k,1)/= Real(nrho); - }); - } - //average_node_to_cellcenter(center_val, 0, node_val, 0, 0); - // Copy(*density[lev], center_val , 0, 0, 1, 0); - -} - void incflo::update_density (StepType step_type) { BL_PROFILE("incflo::update_density"); @@ -54,12 +14,23 @@ void incflo::update_density (StepType step_type) { for (int lev = 0; lev <= finest_level; lev++) { + auto& ld = *m_leveldata[lev]; + if(m_update_density_from_vof){ - update_vof_density (lev, get_density_new(),get_tracer_new()); - diffuse_density(lev, get_density_new()); + //diffuse the VOF by averaging + const auto& ba = ld.tracer.boxArray(); + const auto& dm = ld.tracer.DistributionMap(); + const auto& fact = ld.tracer.Factory(); + MultiFab tracer_df(ba,dm,1,ld.tracer.nGrow(),MFInfo(), fact); + MultiFab::Copy(tracer_df, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); + for (int i=0;ivariable_filtered(tracer_df); + //fixme: BCs + tracer_df.FillBoundary(geom[lev].periodicity()); + } + update_vof_density (lev, ld.density, tracer_df); } else{ - auto& ld = *m_leveldata[lev]; #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -113,14 +84,15 @@ void incflo::update_density (StepType step_type) } else { for (int lev = 0; lev <= finest_level; lev++) { + auto& ld = *m_leveldata[lev]; if (m_vof_advect_tracer){ //when VOF method is used to advect the tracer, density and viscosity of each cell will //depend the VOF field value of the cell. //fixme - update_vof_density (lev, get_density_new(),get_tracer_old()); + update_vof_density (lev, ld.density, ld.tracer); //MultiFab::Copy(m_leveldata[lev]->density, m_leveldata[lev]->density_o, 0, 0, 1, m_leveldata[lev]->density_o.nGrow()); } - MultiFab::Copy(m_leveldata[lev]->density_nph, m_leveldata[lev]->density_o, 0, 0, 1, ng); + MultiFab::Copy(ld.density_nph, ld.density_o, 0, 0, 1, ng); } } } diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 09ed07bf3..4652d2f9d 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -209,7 +209,7 @@ void incflo::prob_init_fluid (int lev) MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); ld.tracer_o.FillBoundary(geom[lev].periodicity()); if (m_vof_advect_tracer){ - update_vof_density (lev, get_density_new(),get_tracer_new()); + update_vof_density (lev, ld.density,ld.tracer); MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); fillpatch_density(lev, m_t_new[lev], ld.density_o, 3); MultiFab::Copy(ld.density_nph, ld.density, 0, 0, 1, ld.density.nGrow()); diff --git a/src/setup/init.cpp b/src/setup/init.cpp index 5a79345ab..8b7ddc0cc 100644 --- a/src/setup/init.cpp +++ b/src/setup/init.cpp @@ -171,6 +171,7 @@ void incflo::ReadParameters () m_update_density_from_vof = true; m_constant_density = false; } + pp.query("number_of_averaging", m_number_of_averaging); } // end prefix incflo diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index fc67c4d17..c669e7f4e 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -26,6 +26,7 @@ public: void velocity_face_source(int lev,amrex::Real dt, AMREX_D_DECL(amrex::MultiFab& u_mac, amrex::MultiFab& v_mac, amrex::MultiFab& w_mac), AMREX_D_DECL(amrex::MultiFab* sfu_mac, amrex::MultiFab* sfv_mac, amrex::MultiFab* sfw_mac)); + void variable_filtered (amrex::MultiFab& variable); // normal vector of interface amrex::Vector normal; @@ -50,6 +51,7 @@ private: incflo* v_incflo; //incflo object int finest_level; int n_tag = 0; +int output_drop_frequence = 1; }; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index bfd79ab7c..03734aed6 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -135,6 +135,9 @@ VolumeOfFluid::VolumeOfFluid (incflo* a_incflo) : v_incflo(a_incflo) force[lev].setVal(0,0,AMREX_SPACEDIM,v_incflo->nghost_state()); } + ParmParse pp("incflo"); + pp.query("output_drop_frequence", output_drop_frequence); + } static XDim3 edge[12][2] = { {{0.,0.,0.},{1.,0.,0.}},{{0.,0.,1.},{1.,0.,1.}},{{0.,1.,1.},{1.,1.,1.}},{{0.,1.,0.},{1.,1.,0.}}, @@ -1644,8 +1647,8 @@ Real height_curvature_combined (int i,int j,int k, GpuArray const& nv = node_val.array(mfi); + Array4 const& var = variable.const_array(mfi); + ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + nv(i,j,k,0)=0.; + int nt=0, nrho=0, detk; +#if AMREX_SPACEDIM==3 + for (detk = 0; detk > -2; --detk) +#endif + for (int detj = 0; detj > -2; --detj) + for (int deti = 0; deti > -2; --deti) { + Array in{i+deti,j+detj,k+detk}; + //averaging to nodes + nv(i,j,k,0)+= var(in[0],in[1],in[2],0); + nrho++; + } + nv(i,j,k,0)/= Real(nrho); + // Print()<maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2995,7 +3044,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) } }// - //write presure + //write pressure int nt=m_use_cc_proj?0:1; #if AMREX_SPACEDIM==3 for (k = lo.z; k <= hi.z+nt; ++k) @@ -3451,7 +3500,8 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) int myproc = ParallelDescriptor::MyProc(); int nprocs = ParallelDescriptor::NProcs(); const std::string& filename = "droplet_his.dat"; - + if(nstep%output_drop_frequence!=0) + return; for (int lev = 0; lev <= finest_level; ++lev) { auto& ld = *v_incflo->m_leveldata[lev]; @@ -3534,8 +3584,11 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) /* convert the coord. of the center to the global sys*/ for (int d = 0; d < AMREX_SPACEDIM; d++) (&p.x)[d] = problo[d] + dx[d]*((d<1?i:d<2?j:k)+(&p.x)[d]); - for(int d = 0; d < AMREX_SPACEDIM; d++) + for(int d = 0; d < AMREX_SPACEDIM; d++){ + //fixme: just for testing + if (fabs(p.x) const& tracer, } void -incflo::update_vof_density (int lev, Vector const& density,Vector const& tracer) +incflo::update_vof_density (int lev, MultiFab & density, MultiFab & tracer) { -// for (int lev = 0; lev <= finest_level; ++lev) { #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif - for (MFIter mfi(*tracer[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) + for (MFIter mfi(density,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.growntilebox(1); - Array4 const& density_arr = density[lev]->array(mfi); - Array4 const& tracer_arr = tracer[lev]->const_array(mfi); + Array4 const& density_arr = density.array(mfi); + Array4 const& tracer_arr = tracer.const_array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { //fixme: we use the property of the tracer 0. // Print()< const& density,VectorFillBoundary(geom[lev].periodicity()); -if(0){ - const auto& ba = density[lev]->boxArray(); - const auto& dm = density[lev]->DistributionMap(); - const auto& fact = density[lev]->Factory(); - // store the nodal values (the last component stores the node-centered VOF) - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0 , MFInfo(), fact); - MultiFab center_val(ba,dm,1,0,MFInfo(), fact); -#ifdef _OPENMP -#pragma omp parallel if (Gpu::notInLaunchRegion()) -#endif - for (MFIter mfi(*density[lev],TilingIfNotGPU()); mfi.isValid(); ++mfi) - { - Box const& nbx = surroundingNodes(mfi.tilebox()); - Array4 const& nv = node_val.array(mfi); - Array4 const& rho = density[lev]->const_array(mfi); - ParallelFor(nbx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - - // calculate the node-centered VOF - nv(i,j,k,0)=0.; - int nrho=0; - for (int detk = 0; detk > -2; --detk) - for (int detj = 0; detj > -2; --detj) - for (int deti = 0; deti > -2; --deti) { - Array in{i+deti,j+detj,k+detk}; - //averaging density to nodes - nv(i,j,k,0)+= rho(in[0],in[1],in[2],0); - nrho++; - //} - } - nv(i,j,k,0)/= Real(nrho); - }); - } - average_node_to_cellcenter(center_val, 0, node_val, 0, 1); - MultiFab::Copy(*density[lev], center_val , 0, 0, 1, 0); - //fixme: BCs - density[lev]->FillBoundary(geom[lev].periodicity()); - } -// } + density.FillBoundary(geom[lev].periodicity()); + } diff --git a/test_2d/inputs.capillarywave b/test_2d/inputs.capillarywave new file mode 100644 index 000000000..1a953499b --- /dev/null +++ b/test_2d/inputs.capillarywave @@ -0,0 +1,93 @@ +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# SIMULATION STOP # +#.......................................# +stop_time = 2.2426211256 # Max (simulated) time to evolve +max_step = 20000 # Max number of time steps +steady_state = 0 # Steady-state solver? + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# TIME STEP COMPUTATION # +#.......................................# +#incflo.fixed_dt = .1 # Use this constant dt if > 0 +incflo.cfl = 0.002 # CFL factor + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INPUT AND OUTPUT # +#.......................................# +amr.plot_int = 10 # Steps between plot files +amr.check_int = 1000 # Steps between checkpoint files +amr.restart = "" # Checkpoint to restart from + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# PHYSICS # +#.......................................# +incflo.gravity = 0. 0. # Gravitational force (3D) +incflo.ro_0 = 1.0 # Reference density +incflo.ntrac = 1 +incflo.fluid_model = "newtonian" # Fluid model (rheology) +incflo.mu = 0.0182571749236 # Dynamic viscosity coefficient +incflo.vof_advect_tracer= 1 +incflo.mu_s = 0.0182571749236 +incflo.ro_s = 1 +incflo.sigma = 1. + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# ADAPTIVE MESH REFINEMENT # +#.......................................# +amr.n_cell = 64 192 # Grid cells at coarsest AMRlevel +amr.max_level = 0 # Max AMR level in hierarchy +amr.max_grid_size = 128 384 + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# GEOMETRY # +#.......................................# +geometry.prob_lo = -.5 -1.5 # Lo corner coordinates +geometry.prob_hi = .5 1.5 # Hi corner coordinates +geometry.is_periodic = 1 0 # Periodicity x y z (0/1) +geometry.coord_sys = 0 + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INITIAL CONDITIONS # +#.......................................# +incflo.probtype = 1109 # +incflo.ic_u = 0. +incflo.ic_v = 0. +incflo.ic_w = 0. +# Boundary conditions +ylo.type = "sw" +#ylo.pressure = 0. +yhi.type = "sw" +#yhi.pressure = 0. +#xlo.type = "po" +#xlo.pressure = 0. +#xhi.type = "po" +#xhi.pressure = 0.0 +#zlo.type = "po" +#zlo.pressure = 0. +#zhi.type = "po" +#zhi.pressure = 0.0 + + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# NUMERICAL PARAMETERS # +#.......................................# +incflo.steady_state_tol = 1.e-5 # Tolerance for steady-state +amrex.fpe_trap_invalid = 1 # Trap NaNs + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# VERBOSITY # +#.......................................# +incflo.verbose = 2 # incflo_level +incflo.vof_init_with_eb = 1 +amrex.fpe_trap_overflow=1 +incflo.use_cc_proj = 1 +incflo.advect_momentum = 1 +incflo.number_of_averaging = 0 +incflo.diffusion_type = 2 +incflo.output_drop_frequence = 6 +incflo.godunov_include_diff_in_forcing = 1 +incflo.use_mac_phi_in_godunov = 0 +incflo.godunov_use_forces_in_trans = 0 +incflo.initial_iterations =0 +incflo.do_initial_proj = 0 +amrex.fpe_trap_zero=1 diff --git a/test_2d/inputs.droplet b/test_2d/inputs.droplet index e7bd2b09c..0baf54069 100644 --- a/test_2d/inputs.droplet +++ b/test_2d/inputs.droplet @@ -2,7 +2,7 @@ # SIMULATION STOP # #.......................................# stop_time = 8 # Max (simulated) time to evolve -max_step = 10000 # Max number of time steps +max_step = 10000 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -36,7 +36,7 @@ incflo.sigma = 10. #.......................................# amr.n_cell = 32 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 64 64 +amr.max_grid_size = 32 32 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # @@ -44,7 +44,7 @@ amr.max_grid_size = 64 64 geometry.prob_lo = 0. 0. # Lo corner coordinates geometry.prob_hi = 1. 1. # Hi corner coordinates geometry.is_periodic = 0 0 # Periodicity x y z (0/1) -geometry.coord_sys = 1 +geometry.coord_sys = 0 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INITIAL CONDITIONS # @@ -80,4 +80,13 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 amrex.fpe_trap_overflow=1 +incflo.use_cc_proj = 1 +incflo.advect_momentum = 1 +incflo.number_of_averaging = 3 +incflo.diffusion_type = 2 +incflo.godunov_include_diff_in_forcing = 1 +incflo.use_mac_phi_in_godunov = 0 +incflo.godunov_use_forces_in_trans = 0 +incflo.initial_iterations =0 +incflo.do_initial_proj = 0 amrex.fpe_trap_zero=1 diff --git a/test_3d/delete.sh b/test_3d/delete.sh new file mode 100755 index 000000000..2352e7096 --- /dev/null +++ b/test_3d/delete.sh @@ -0,0 +1,3 @@ +rm plt* -rf +rm chk* -rf +rm tecplot* -f diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 1f16e7212..81191bc89 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -9,12 +9,12 @@ steady_state = 0 # Steady-state solver? # TIME STEP COMPUTATION # #.......................................# #incflo.fixed_dt = .00217391 # Use this constant dt if > 0 -incflo.cfl = 0.1 # CFL factor +incflo.cfl = 0.05 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 10 # Steps between plot files +amr.plot_int = 6 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -44,7 +44,7 @@ amr.max_grid_size = 128 128 128 #.......................................# geometry.prob_lo = 0. 0. 0. # Lo corner coordinates geometry.prob_hi = 1. 1. 1. # Hi corner coordinates -geometry.is_periodic = 0 0 0 # Periodicity x y z (0/1) +geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -55,18 +55,18 @@ incflo.ic_u = 0. incflo.ic_v = 0. incflo.ic_w = 0. # Boundary conditions -ylo.type = "po" -ylo.pressure = 0. -yhi.type = "po" -yhi.pressure = 0. -xlo.type = "po" -xlo.pressure = 0. -xhi.type = "po" -xhi.pressure = 0.0 -zlo.type = "po" -zlo.pressure = 0. -zhi.type = "po" -zhi.pressure = 0.0 +#ylo.type = "po" +#ylo.pressure = 0. +#yhi.type = "po" +#yhi.pressure = 0. +#xlo.type = "po" +#xlo.pressure = 0. +#xhi.type = "po" +#xhi.pressure = 0.0 +#zlo.type = "po" +#zlo.pressure = 0. +#zhi.type = "po" +#zhi.pressure = 0.0 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -81,7 +81,8 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 incflo.use_cc_proj = 1 -incflo.advect_momentum =1 +incflo.advect_momentum = 0 +incflo.number_of_averaging = 3 incflo.diffusion_type = 2 incflo.godunov_include_diff_in_forcing = 1 incflo.use_mac_phi_in_godunov = 0 From b166381eb6ea882f461b4dc4fbe585cddef9ccc7 Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Fri, 25 Oct 2024 23:27:16 -0700 Subject: [PATCH 27/29] cleaned bugs and complete capillary wave test --- .../boundary_conditions.cpp | 20 ++++-- src/incflo.cpp | 3 +- src/incflo_compute_dt.cpp | 7 +- src/incflo_compute_forces.cpp | 4 +- src/prob/prob_init_fluid.cpp | 38 +++++----- src/vof/VolumeOfFluid.cpp | 69 ++++++++++++------- test_2d/delete.sh | 3 + test_2d/inputs.capillarywave | 25 ++++--- .../inputs.dropflight | 62 ++++++++++------- test_3d/inputs.droplet | 49 +++++++------ 10 files changed, 169 insertions(+), 111 deletions(-) create mode 100755 test_2d/delete.sh rename test_2d/inputs.droplet => test_3d/inputs.dropflight (62%) diff --git a/src/boundary_conditions/boundary_conditions.cpp b/src/boundary_conditions/boundary_conditions.cpp index 8cdbb2624..30dbb27c8 100644 --- a/src/boundary_conditions/boundary_conditions.cpp +++ b/src/boundary_conditions/boundary_conditions.cpp @@ -34,13 +34,18 @@ void incflo::init_bcs () m_bc_type[ori] = BC::pressure_inflow; pp.get("pressure", m_bc_pressure[ori]); - + pp.queryarr("tracer", m_bc_tracer[ori], 0, m_ntrac); // Set mathematical BCs here also AMREX_D_TERM(m_bcrec_velocity[0].set(ori, BCType::foextrap);, m_bcrec_velocity[1].set(ori, BCType::foextrap);, m_bcrec_velocity[2].set(ori, BCType::foextrap);); m_bcrec_density[0].set(ori, BCType::foextrap); - for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } + + if ( pp.contains("tracer") ) { + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::ext_dir); } + } else { + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } + } } else if (bc_type == "pressure_outflow" || bc_type == "po") { @@ -49,13 +54,20 @@ void incflo::init_bcs () m_bc_type[ori] = BC::pressure_outflow; pp.get("pressure", m_bc_pressure[ori]); - + pp.queryarr("tracer", m_bc_tracer[ori], 0, m_ntrac); // Set mathematical BCs here also AMREX_D_TERM(m_bcrec_velocity[0].set(ori, BCType::foextrap);, m_bcrec_velocity[1].set(ori, BCType::foextrap);, m_bcrec_velocity[2].set(ori, BCType::foextrap);); m_bcrec_density[0].set(ori, BCType::foextrap); - for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } + + if ( pp.contains("tracer") ) { + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::ext_dir); } + } else { + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } + } + + } else if (bc_type == "mass_inflow" || bc_type == "mi") { diff --git a/src/incflo.cpp b/src/incflo.cpp index c6189c9ad..05373205c 100644 --- a/src/incflo.cpp +++ b/src/incflo.cpp @@ -158,7 +158,8 @@ void incflo::Evolve() } if(m_vof_advect_tracer){ get_volume_of_fluid()->output_droplet(m_cur_time,m_nstep); - // get_volume_of_fluid()->apply_velocity_field(m_cur_time,m_nstep); + //if (m_nstep<10) + //get_volume_of_fluid()->apply_velocity_field(m_cur_time,m_nstep); } if (writeNow()&& m_vof_advect_tracer){ get_volume_of_fluid()->WriteTecPlotFile (m_cur_time,m_nstep); diff --git a/src/incflo_compute_dt.cpp b/src/incflo_compute_dt.cpp index db3df0a0f..57a957302 100644 --- a/src/incflo_compute_dt.cpp +++ b/src/incflo_compute_dt.cpp @@ -48,8 +48,11 @@ void incflo::ComputeDt (int initialization, bool explicit_diffusion) // Make a temporary here to hold vel_forces MultiFab vel_forces(grids[lev], dmap[lev], AMREX_SPACEDIM, 0); - - compute_vel_forces_on_level (lev, vel_forces, vel, rho, tra_o, tra); + if(m_vof_advect_tracer) + //to include the capillary stability requirement, the last flag is TRUE + compute_vel_forces_on_level (lev, vel_forces, vel, rho, tra_o, tra,true,true); + else + compute_vel_forces_on_level (lev, vel_forces, vel, rho, tra_o, tra); #ifdef AMREX_USE_EB if (!vel.isAllRegular()) { diff --git a/src/incflo_compute_forces.cpp b/src/incflo_compute_forces.cpp index ec13e68a8..a4f8c018b 100644 --- a/src/incflo_compute_forces.cpp +++ b/src/incflo_compute_forces.cpp @@ -159,7 +159,7 @@ void incflo::compute_vel_forces_on_level (int lev, // rho: density //fixme: we just consider the surface tension for first tracer - if (m_vof_advect_tracer && m_sigma[0]!=0.&&!m_use_cc_proj&&include_SF){ + if (m_vof_advect_tracer && m_sigma[0]!=0./*&&!m_use_cc_proj*/&&include_SF){ VolumeOfFluid* vof_p = get_volume_of_fluid (); @@ -172,7 +172,7 @@ void incflo::compute_vel_forces_on_level (int lev, // finally, SF is calculated using original cell-centered kappa, averaged rho, and averaged grad(VOF). //Choice 4: SF is calculated using original cell-centered kappa, rho and center-difference for grad(VOF). - int choice = 3; + int choice = 4; const auto& ba = density.boxArray(); diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index 4652d2f9d..bee367088 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -26,6 +26,20 @@ void incflo::prob_init_fluid (int lev) ld.tracer.setVal(m_ic_t[comp], comp, 1); } + if (1109 == m_probtype) { + get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); + MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); + ld.tracer_o.FillBoundary(geom[lev].periodicity()); + if (m_vof_advect_tracer){ + update_vof_density (lev, ld.density,ld.tracer); + MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); + fillpatch_density(lev, m_t_new[lev], ld.density_o, 3); + MultiFab::Copy(ld.density_nph, ld.density, 0, 0, 1, ld.density.nGrow()); + fillpatch_density(lev, m_t_new[lev], ld.density_nph, 3); + } + + } + for (MFIter mfi(ld.density); mfi.isValid(); ++mfi) { const Box& vbx = mfi.validbox(); @@ -191,11 +205,11 @@ void incflo::prob_init_fluid (int lev) } else if (1109 == m_probtype) { - /*init_droplet(vbx, gbx, + init_droplet(vbx, gbx, ld.velocity.array(mfi), ld.density.array(mfi), ld.tracer.array(mfi), - domain, dx, problo, probhi);*/ + domain, dx, problo, probhi); } else @@ -204,19 +218,7 @@ void incflo::prob_init_fluid (int lev) }; } - if (1109 == m_probtype) { - get_volume_of_fluid ()->tracer_vof_init_fraction(lev, ld.tracer); - MultiFab::Copy(ld.tracer_o, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); - ld.tracer_o.FillBoundary(geom[lev].periodicity()); - if (m_vof_advect_tracer){ - update_vof_density (lev, ld.density,ld.tracer); - MultiFab::Copy(ld.density_o, ld.density, 0, 0, 1, ld.density.nGrow()); - fillpatch_density(lev, m_t_new[lev], ld.density_o, 3); - MultiFab::Copy(ld.density_nph, ld.density, 0, 0, 1, ld.density.nGrow()); - fillpatch_density(lev, m_t_new[lev], ld.density_nph, 3); - } - } } void incflo::init_rotating_flow (Box const& vbx, Box const& /*gbx*/, @@ -1162,7 +1164,7 @@ void incflo::init_burggraf (Box const& vbx, Box const& /*gbx*/, void incflo::init_droplet (Box const& vbx, Box const& /*gbx*/, Array4 const& vel, Array4 const& /*density*/, - Array4 const& /*tracer*/, + Array4 const& tracer, Box const& /*domain*/, GpuArray const& dx, GpuArray const& /*problo*/, @@ -1174,10 +1176,12 @@ void incflo::init_droplet (Box const& vbx, Box const& /*gbx*/, Real y = Real(j+0.5)*dx[1]; Real z = Real(k+0.5)*dx[2]; Real pi = 3.14159265357; - vel(i,j,k,0) = 1.;//2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); - vel(i,j,k,1) = 0.;//-sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); + if (tracer(i,j,k)>1e-4) { + vel(i,j,k,0) = 0.;//2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); + vel(i,j,k,1) = -200.;//-sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); #if (AMREX_SPACEDIM == 3) vel(i,j,k,2) = 0.;//-sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*0./3.); #endif + } }); } diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 03734aed6..239be73d8 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -2559,7 +2559,7 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u } -void VolumeOfFluid:: variable_filtered(MultiFab & variable) +void VolumeOfFluid:: variable_filtered (MultiFab & variable) { const auto& ba = variable.boxArray(); const auto& dm = variable.DistributionMap(); @@ -2605,7 +2605,7 @@ void VolumeOfFluid:: variable_filtered(MultiFab & variable) ///////////////////////////////////////////////////////////////////////////////// Real myFunction(AMREX_D_DECL(Real x, Real y, Real z)) { - return y - 0.01*cos (2.*3.14159265357*x); + return y - 0.0025*cos (2.*3.14159265357*x); } void @@ -2627,13 +2627,13 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) /* Array center{AMREX_D_DECL((problo[0]+.45), (problo[1]+.1), (problo[2]+.45))};*/ - Array center1{AMREX_D_DECL((problo[0]+.5), - (problo[1]+.75), - (problo[2]+.35))}; + Array center1{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), + (problo[1]+30.e-4), + 0.5*(problo[2]+probhi[2]))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), 0.5*(problo[2]+probhi[2]))}; - Real radius = .2; //5.0*dx[0]; + Real radius = 20e-4; //5.0*dx[0]; bool fluid_is_inside = true; EB2::SphereIF my_sphere(radius, center, fluid_is_inside); @@ -2679,7 +2679,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) // Generate GeometryShop //auto gshop = EB2::makeShop(two); //auto gshop = EB2::makeShop(my_box); - auto gshop = EB2::makeShop(my_sin); + auto gshop = EB2::makeShop(my_sphere1); //auto gshop = EB2::makeShop(my_cyl); int max_level = v_incflo->maxLevel(); EB2::Build(gshop, v_incflo->Geom(max_level), max_level, max_level); @@ -2688,7 +2688,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) auto fact = amrex::makeEBFabFactory(geom, a_tracer.boxArray(), a_tracer.DistributionMap(), {1,1,0}, EBSupport::volume); auto const& volfrac = fact->getVolFrac(); - MultiFab::Copy(a_tracer, volfrac, 0, 0, 1, 1); + MultiFab::Copy(a_tracer, volfrac, 0, 0, 1, 0); if (lev == v_incflo->finestLevel()) { EB2::IndexSpace::pop(); @@ -2793,6 +2793,8 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) } } + a_tracer.FillBoundary(geom.periodicity()); + // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. @@ -2800,7 +2802,19 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) curvature_calculation(lev, a_tracer, height[lev], kappa[lev]); int n_tag=domain_tag_droplets (finest_level, v_incflo->grids,v_incflo->geom, v_incflo->get_tracer_new (),GetVecOfPtrs(tag)); - + //for (MFIter mfi(a_tracer); mfi.isValid(); ++mfi) + //{ + // Box const& bx = mfi.validbox(); + // Box const& bxg = amrex::grow(bx,a_tracer.nGrow()); + // Array4 const& vof = a_tracer.array(mfi); + // ParallelFor(bxg, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + // { + // Real ff=vof(i,j,k); + // + // if (i==6&&j==-1&&k==5) + // Print() <<"("< const& vel = ld.velocity.array(mfi); + Array4 const& tracer = ld.tracer.array(mfi); ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { Real x = Real(i+0.5)*dx[0]; Real y = Real(j+0.5)*dx[1]; Real z = Real(k+0.5)*dx[2]; Real pi = 3.14159265357; + if (tracer(i,j,k)>1e-4) { // vel(i,j,k,0) = 2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*time/3.); // vel(i,j,k,1) = -sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*time/3.); - vel(i,j,k,0) = sin(pi*x)*sin(pi*x)*sin(2*pi*y)*cos(pi*time/8.); - vel(i,j,k,1) =-sin(pi*y)*sin(pi*y)*sin(2*pi*x)*cos(pi*time/8.); + vel(i,j,k,0) = 0.;//sin(pi*x)*sin(pi*x)*sin(2*pi*y)*cos(pi*time/8.); + vel(i,j,k,1) =100.; //-sin(pi*y)*sin(pi*y)*sin(2*pi*x)*cos(pi*time/8.); #if (AMREX_SPACEDIM == 3) - vel(i,j,k,2) = -sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*time/3.); + vel(i,j,k,2) = 0.;//-sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*time/3.); #endif + } }); }//end MFIter } //end lev diff --git a/test_2d/delete.sh b/test_2d/delete.sh new file mode 100755 index 000000000..2352e7096 --- /dev/null +++ b/test_2d/delete.sh @@ -0,0 +1,3 @@ +rm plt* -rf +rm chk* -rf +rm tecplot* -f diff --git a/test_2d/inputs.capillarywave b/test_2d/inputs.capillarywave index 1a953499b..56cfb9544 100644 --- a/test_2d/inputs.capillarywave +++ b/test_2d/inputs.capillarywave @@ -1,7 +1,9 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 2.2426211256 # Max (simulated) time to evolve +#stop_time = 2.2426211256 +stop_time = 1.588293017 # Max (simulated) time to evolve +#stop_time =1.66481717925811447992 max_step = 20000 # Max number of time steps steady_state = 0 # Steady-state solver? @@ -14,7 +16,7 @@ incflo.cfl = 0.002 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 10 # Steps between plot files +amr.plot_int = 1000 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from @@ -25,18 +27,23 @@ incflo.gravity = 0. 0. # Gravitational force (3D) incflo.ro_0 = 1.0 # Reference density incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) -incflo.mu = 0.0182571749236 # Dynamic viscosity coefficient +incflo.mu = 0.0182574185835055 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 -incflo.mu_s = 0.0182571749236 -incflo.ro_s = 1 +#incflo.mu_s = 0.0182574185835055 +#incflo.ro_s = 1.0 +incflo.mu_s = 0.000327650582754835 +incflo.ro_s = .0012 +#incflo.mu_s = 0.0182574185835055 +#incflo.ro_s = .1 + incflo.sigma = 1. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 64 192 # Grid cells at coarsest AMRlevel +amr.n_cell = 256 768 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 128 384 +amr.max_grid_size = 256 768 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # @@ -81,10 +88,10 @@ incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 amrex.fpe_trap_overflow=1 incflo.use_cc_proj = 1 -incflo.advect_momentum = 1 +incflo.advect_momentum = 0 incflo.number_of_averaging = 0 incflo.diffusion_type = 2 -incflo.output_drop_frequence = 6 +incflo.output_drop_frequence = 60 incflo.godunov_include_diff_in_forcing = 1 incflo.use_mac_phi_in_godunov = 0 incflo.godunov_use_forces_in_trans = 0 diff --git a/test_2d/inputs.droplet b/test_3d/inputs.dropflight similarity index 62% rename from test_2d/inputs.droplet rename to test_3d/inputs.dropflight index 0baf54069..3a74fb904 100644 --- a/test_2d/inputs.droplet +++ b/test_3d/inputs.dropflight @@ -1,49 +1,56 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 8 # Max (simulated) time to evolve -max_step = 10000 # Max number of time steps +#stop_time = 2.2426211256 +stop_time = 100e-6 # Max (simulated) time to evolve +#stop_time =1.66481717925811447992 +#max_step = 5 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # TIME STEP COMPUTATION # #.......................................# -#incflo.fixed_dt = .1 # Use this constant dt if > 0 +#incflo.fixed_dt = 1e-7 # Use this constant dt if > 0 incflo.cfl = 0.1 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 5 # Steps between plot files +amr.plot_int = 300 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # PHYSICS # #.......................................# -incflo.gravity = 0. 0. # Gravitational force (3D) -incflo.ro_0 = 1.0 # Reference density +incflo.gravity = 0. 0. 0. # Gravitational force (3D) +incflo.ro_0 = 1.0e-3 # Reference density incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) -incflo.mu = 1.e-3 # Dynamic viscosity coefficient +incflo.mu = 1.8e-4 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 -incflo.mu_s = 1.0 -incflo.ro_s = 1000.0 -incflo.sigma = 10. +#incflo.mu_s = 0.0182574185835055 +#incflo.ro_s = 1.0 +incflo.mu_s = 1e-2 +incflo.ro_s = 1. +#incflo.mu_s = 0.0182574185835055 +#incflo.ro_s = .1 + +incflo.sigma = 72. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 32 32 # Grid cells at coarsest AMRlevel +amr.n_cell = 32 32 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 32 32 +amr.max_grid_size = 64 128 64 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # #.......................................# -geometry.prob_lo = 0. 0. # Lo corner coordinates -geometry.prob_hi = 1. 1. # Hi corner coordinates -geometry.is_periodic = 0 0 # Periodicity x y z (0/1) +geometry.prob_lo = -60.e-4 0. -60.e-4 # Lo corner coordinates +geometry.prob_hi = 60.e-4 120.e-4 60.e-4 # Hi corner coordinates +geometry.is_periodic = 0 0 0 # Periodicity x y z (0/1) geometry.coord_sys = 0 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -54,17 +61,19 @@ incflo.ic_u = 0. incflo.ic_v = 0. incflo.ic_w = 0. # Boundary conditions -ylo.type = "po" -ylo.pressure = 0. +ylo.type = "nsw" +#ylo.pressure = 0. +ylo.tracer =0. yhi.type = "po" -yhi.pressure = 0. -xlo.type = "po" -xlo.pressure = 0. -xhi.type = "po" -xhi.pressure = 0.0 -#zlo.type = "po" +yhi.pressure = 0. +yhi.tracer = 0. +xlo.type = "sw" +#xlo.pressure = 0. +xhi.type = "sw" +#xhi.pressure = 0.0 +zlo.type = "sw" #zlo.pressure = 0. -#zhi.type = "po" +zhi.type = "sw" #zhi.pressure = 0.0 @@ -81,9 +90,10 @@ incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 amrex.fpe_trap_overflow=1 incflo.use_cc_proj = 1 -incflo.advect_momentum = 1 -incflo.number_of_averaging = 3 +incflo.advect_momentum = 0 +incflo.number_of_averaging = 0 incflo.diffusion_type = 2 +incflo.output_drop_frequence = 5 incflo.godunov_include_diff_in_forcing = 1 incflo.use_mac_phi_in_godunov = 0 incflo.godunov_use_forces_in_trans = 0 diff --git a/test_3d/inputs.droplet b/test_3d/inputs.droplet index 81191bc89..0baf54069 100644 --- a/test_3d/inputs.droplet +++ b/test_3d/inputs.droplet @@ -1,51 +1,50 @@ #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # SIMULATION STOP # #.......................................# -stop_time = 6 # Max (simulated) time to evolve -max_step = 10000 # Max number of time steps +stop_time = 8 # Max (simulated) time to evolve +max_step = 10000 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # TIME STEP COMPUTATION # #.......................................# -#incflo.fixed_dt = .00217391 # Use this constant dt if > 0 -incflo.cfl = 0.05 # CFL factor +#incflo.fixed_dt = .1 # Use this constant dt if > 0 +incflo.cfl = 0.1 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 6 # Steps between plot files +amr.plot_int = 5 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # PHYSICS # #.......................................# -incflo.gravity = 0. 0. 0. # Gravitational force (3D) +incflo.gravity = 0. 0. # Gravitational force (3D) incflo.ro_0 = 1.0 # Reference density incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) -incflo.mu = 1.0e-3 # Dynamic viscosity coefficient +incflo.mu = 1.e-3 # Dynamic viscosity coefficient incflo.vof_advect_tracer= 1 -incflo.constant_density = 0 -incflo.mu_s = 2. +incflo.mu_s = 1.0 incflo.ro_s = 1000.0 incflo.sigma = 10. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 32 32 32 # Grid cells at coarsest AMRlevel +amr.n_cell = 32 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy -amr.max_grid_size = 128 128 128 +amr.max_grid_size = 32 32 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # GEOMETRY # #.......................................# -geometry.prob_lo = 0. 0. 0. # Lo corner coordinates -geometry.prob_hi = 1. 1. 1. # Hi corner coordinates -geometry.is_periodic = 1 1 1 # Periodicity x y z (0/1) - +geometry.prob_lo = 0. 0. # Lo corner coordinates +geometry.prob_hi = 1. 1. # Hi corner coordinates +geometry.is_periodic = 0 0 # Periodicity x y z (0/1) +geometry.coord_sys = 0 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INITIAL CONDITIONS # @@ -55,14 +54,14 @@ incflo.ic_u = 0. incflo.ic_v = 0. incflo.ic_w = 0. # Boundary conditions -#ylo.type = "po" -#ylo.pressure = 0. -#yhi.type = "po" -#yhi.pressure = 0. -#xlo.type = "po" -#xlo.pressure = 0. -#xhi.type = "po" -#xhi.pressure = 0.0 +ylo.type = "po" +ylo.pressure = 0. +yhi.type = "po" +yhi.pressure = 0. +xlo.type = "po" +xlo.pressure = 0. +xhi.type = "po" +xhi.pressure = 0.0 #zlo.type = "po" #zlo.pressure = 0. #zhi.type = "po" @@ -80,8 +79,9 @@ amrex.fpe_trap_invalid = 1 # Trap NaNs #.......................................# incflo.verbose = 2 # incflo_level incflo.vof_init_with_eb = 1 +amrex.fpe_trap_overflow=1 incflo.use_cc_proj = 1 -incflo.advect_momentum = 0 +incflo.advect_momentum = 1 incflo.number_of_averaging = 3 incflo.diffusion_type = 2 incflo.godunov_include_diff_in_forcing = 1 @@ -89,5 +89,4 @@ incflo.use_mac_phi_in_godunov = 0 incflo.godunov_use_forces_in_trans = 0 incflo.initial_iterations =0 incflo.do_initial_proj = 0 -amrex.fpe_trap_overflow=1 amrex.fpe_trap_zero=1 From 947ffd6269de97feec80432b2c24702c06b6e4df Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Wed, 6 Nov 2024 14:58:09 -0800 Subject: [PATCH 28/29] ready for drop flight test --- .../boundary_conditions.cpp | 27 ++++- .../incflo_compute_advection_term.cpp | 2 +- src/incflo_apply_corrector.cpp | 2 +- src/incflo_apply_predictor.cpp | 2 +- src/incflo_update_density.cpp | 4 +- src/incflo_update_velocity.cpp | 2 +- src/prob/prob_init_fluid.cpp | 12 +- src/projection/incflo_apply_cc_projection.cpp | 2 +- src/vof/VolumeOfFluid.H | 2 +- src/vof/VolumeOfFluid.cpp | 106 +++++++++++------- src/vof/incflo_vof.cpp | 4 +- test_3d/inputs.dropflight | 37 +++--- 12 files changed, 127 insertions(+), 75 deletions(-) diff --git a/src/boundary_conditions/boundary_conditions.cpp b/src/boundary_conditions/boundary_conditions.cpp index 30dbb27c8..360e424d6 100644 --- a/src/boundary_conditions/boundary_conditions.cpp +++ b/src/boundary_conditions/boundary_conditions.cpp @@ -40,10 +40,14 @@ void incflo::init_bcs () m_bcrec_velocity[1].set(ori, BCType::foextrap);, m_bcrec_velocity[2].set(ori, BCType::foextrap);); m_bcrec_density[0].set(ori, BCType::foextrap); - + //when the VOF method is used, the default BC for tracer (i.e., the keyword 'tracer' + //is not explicitly included in the bcid) is symmetrical. if ( pp.contains("tracer") ) { for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::ext_dir); } - } else { + }else if(m_vof_advect_tracer){ + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::reflect_even); } + } + else { for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } } } @@ -59,11 +63,22 @@ void incflo::init_bcs () AMREX_D_TERM(m_bcrec_velocity[0].set(ori, BCType::foextrap);, m_bcrec_velocity[1].set(ori, BCType::foextrap);, m_bcrec_velocity[2].set(ori, BCType::foextrap);); + // Only normal oriection has reflect_even + //for (int dim = 0; dim < AMREX_SPACEDIM; dim++){ + //if (dim !=ori.coordDir()) + // m_bcrec_velocity[ori.coordDir()].set(ori, BCType::reflect_even); + //else + // m_bcrec_velocity[dim].set(ori, BCType::ext_dir); + //} m_bcrec_density[0].set(ori, BCType::foextrap); - + //when the VOF method is used, the default BC for tracer (i.e., the keyword 'tracer' + //is not explicitly included in the bcid) is symmetrical. if ( pp.contains("tracer") ) { for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::ext_dir); } - } else { + }else if(m_vof_advect_tracer){ + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::reflect_even); } + } + else { for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } } @@ -144,8 +159,12 @@ void incflo::init_bcs () m_bcrec_velocity[1].set(ori, BCType::ext_dir);, m_bcrec_velocity[2].set(ori, BCType::ext_dir);); m_bcrec_density[0].set(ori, BCType::foextrap); + //when the VOF method is used, the default BC for tracer (i.e., the keyword 'tracer' + //is not explicitly included in the bcid) is symmetrical. if ( pp.contains("tracer") ) { for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::ext_dir); } + }else if(m_vof_advect_tracer){ + for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::reflect_even); } } else { for (auto& b : m_bcrec_tracer) { b.set(ori, BCType::foextrap); } } diff --git a/src/convection/incflo_compute_advection_term.cpp b/src/convection/incflo_compute_advection_term.cpp index d1e449ffa..ea25d508e 100644 --- a/src/convection/incflo_compute_advection_term.cpp +++ b/src/convection/incflo_compute_advection_term.cpp @@ -139,7 +139,7 @@ incflo::compute_convective_term (Vector const& conv_u, // and compute the tracer forcing terms for the first time if (m_advection_type != "MOL") { - compute_vel_forces(vel_forces, vel, density, tracer, tracer); + compute_vel_forces(vel_forces, vel, density, tracer, tracer, m_use_cc_proj?false:true); if (m_godunov_include_diff_in_forcing) { diff --git a/src/incflo_apply_corrector.cpp b/src/incflo_apply_corrector.cpp index 0ebfc38ff..a0a45e7ee 100644 --- a/src/incflo_apply_corrector.cpp +++ b/src/incflo_apply_corrector.cpp @@ -117,7 +117,7 @@ void incflo::ApplyCorrector() bool include_pressure_gradient = !(m_use_mac_phi_in_godunov); compute_vel_forces(GetVecOfPtrs(vel_forces), get_velocity_new_const(), get_density_new_const(), get_tracer_new_const(), get_tracer_new_const(), - include_pressure_gradient); + include_pressure_gradient, m_use_cc_proj?false:true); compute_MAC_projected_velocities(get_velocity_new_const(), get_density_new_const(), AMREX_D_DECL(GetVecOfPtrs(u_mac), GetVecOfPtrs(v_mac), GetVecOfPtrs(w_mac)), GetVecOfPtrs(vel_forces), new_time); diff --git a/src/incflo_apply_predictor.cpp b/src/incflo_apply_predictor.cpp index d0f897e6b..0ed7551f2 100644 --- a/src/incflo_apply_predictor.cpp +++ b/src/incflo_apply_predictor.cpp @@ -153,7 +153,7 @@ void incflo::ApplyPredictor (bool incremental_projection) bool include_pressure_gradient = !(m_use_mac_phi_in_godunov); compute_vel_forces(GetVecOfPtrs(vel_forces), get_velocity_old_const(), get_density_old_const(), get_tracer_old_const(), get_tracer_old_const(), - include_pressure_gradient); + include_pressure_gradient, m_use_cc_proj?false:true); // ********************************************************************************************** // Compute the MAC-projected velocities at all levels diff --git a/src/incflo_update_density.cpp b/src/incflo_update_density.cpp index 8df10b7d5..f77c22846 100644 --- a/src/incflo_update_density.cpp +++ b/src/incflo_update_density.cpp @@ -24,9 +24,7 @@ void incflo::update_density (StepType step_type) MultiFab tracer_df(ba,dm,1,ld.tracer.nGrow(),MFInfo(), fact); MultiFab::Copy(tracer_df, ld.tracer, 0, 0, 1, ld.tracer.nGrow()); for (int i=0;ivariable_filtered(tracer_df); - //fixme: BCs - tracer_df.FillBoundary(geom[lev].periodicity()); + get_volume_of_fluid()->variable_filtered(lev, tracer_df); } update_vof_density (lev, ld.density, tracer_df); } diff --git a/src/incflo_update_velocity.cpp b/src/incflo_update_velocity.cpp index c8a0cd1ea..b42104935 100644 --- a/src/incflo_update_velocity.cpp +++ b/src/incflo_update_velocity.cpp @@ -18,7 +18,7 @@ void incflo::update_velocity (StepType step_type, Vector& vel_eta, Vec // and using the half-time density // ************************************************************************************* compute_vel_forces(GetVecOfPtrs(vel_forces), get_velocity_old_const(), - get_density_nph_const(), get_tracer_old_const(), get_tracer_new_const()); + get_density_nph_const(), get_tracer_old_const(), get_tracer_new_const(),true, m_use_cc_proj?false:true); // ************************************************************************************* // Update the velocity diff --git a/src/prob/prob_init_fluid.cpp b/src/prob/prob_init_fluid.cpp index bee367088..605f85699 100644 --- a/src/prob/prob_init_fluid.cpp +++ b/src/prob/prob_init_fluid.cpp @@ -1177,11 +1177,15 @@ void incflo::init_droplet (Box const& vbx, Box const& /*gbx*/, Real z = Real(k+0.5)*dx[2]; Real pi = 3.14159265357; if (tracer(i,j,k)>1e-4) { - vel(i,j,k,0) = 0.;//2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); - vel(i,j,k,1) = -200.;//-sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); + vel(i,j,k,0) = m_ic_u;//2*sin(2.*pi*y)*sin(pi*x)*sin(pi*x)*sin(2*pi*z)*cos(pi*0./3.); + vel(i,j,k,1) = m_ic_v;//-sin(2.*pi*x)*sin(pi*y)*sin(pi*y)*sin(2*pi*z)*cos(pi*0./3.); #if (AMREX_SPACEDIM == 3) - vel(i,j,k,2) = 0.;//-sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*0./3.); + vel(i,j,k,2) = m_ic_w;//-sin(2.*pi*x)*sin(pi*z)*sin(pi*z)*sin(2*pi*y)*cos(pi*0./3.); #endif - } + } + else { + AMREX_D_TERM(vel(i,j,k,0) = 0.;,vel(i,j,k,1) = 0.;,vel(i,j,k,2) = 0.;); + } + }); } diff --git a/src/projection/incflo_apply_cc_projection.cpp b/src/projection/incflo_apply_cc_projection.cpp index 0f7d688d8..892d9832d 100644 --- a/src/projection/incflo_apply_cc_projection.cpp +++ b/src/projection/incflo_apply_cc_projection.cpp @@ -415,7 +415,7 @@ void incflo::ApplyCCProjection (Vector density, average_mac_to_ccvel(GetArrOfPtrs(m_fluxes[lev]),*cc_gphi[lev]); //#endif } - // computer the cell-centered surface tension term (see note in VolumeOfFluid:: velocity_face_source) + // compute the cell-centered surface tension term (see note in VolumeOfFluid:: velocity_face_source) VolumeOfFluid* vof_p = get_volume_of_fluid (); if(m_vof_advect_tracer) for (int lev=0; lev <= finest_level; ++lev) diff --git a/src/vof/VolumeOfFluid.H b/src/vof/VolumeOfFluid.H index c669e7f4e..27ba0a563 100644 --- a/src/vof/VolumeOfFluid.H +++ b/src/vof/VolumeOfFluid.H @@ -26,7 +26,7 @@ public: void velocity_face_source(int lev,amrex::Real dt, AMREX_D_DECL(amrex::MultiFab& u_mac, amrex::MultiFab& v_mac, amrex::MultiFab& w_mac), AMREX_D_DECL(amrex::MultiFab* sfu_mac, amrex::MultiFab* sfv_mac, amrex::MultiFab* sfw_mac)); - void variable_filtered (amrex::MultiFab& variable); + void variable_filtered (int lev, amrex::MultiFab& variable); // normal vector of interface amrex::Vector normal; diff --git a/src/vof/VolumeOfFluid.cpp b/src/vof/VolumeOfFluid.cpp index 239be73d8..ddb6fdfe7 100644 --- a/src/vof/VolumeOfFluid.cpp +++ b/src/vof/VolumeOfFluid.cpp @@ -1693,10 +1693,13 @@ Real curvature_fit (int i,int j,int k, GpuArray dx, Real fvol=vof(ni,nj,nk,0); if (!CELL_IS_FULL(fvol)){ mx={AMREX_D_DECL(mv(ni,nj,nk,0),mv(ni,nj,nk,1),mv(ni,nj,nk,2))}; - area=plane_area_center (mx, alpha(ni,nj,nk,0),p); - for (int c = 0; c < AMREX_SPACEDIM; c++) - (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; - parabola_fit_add (fit, {p.x,p.y,p.z}, area); + //fixme: the ghost cells in the physical boundary are not considerred. + if (mx.x!=VOF_NODATA){ + area=plane_area_center (mx, alpha(ni,nj,nk,0),p); + for (int c = 0; c < AMREX_SPACEDIM; c++) + (&p.x)[c] += (c==0?di:c==1?dj:dk) - 0.5; + parabola_fit_add (fit, {p.x,p.y,p.z}, area); + } } } parabola_fit_solve (fit); @@ -1731,7 +1734,7 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array height[0].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); height[1].setVal(VOF_NODATA,dim,1,v_incflo->nghost_state()); - //fix me: have not thought of a way to deal with the MFIter with tiling + //fixme: have not thought of a way to deal with the MFIter with tiling //an option is to use similar way as MPI's implementation. for (MFIter mfi(vof_mf); mfi.isValid(); ++mfi) { Box const& bx = mfi.validbox(); @@ -1748,7 +1751,7 @@ VolumeOfFluid::tracer_vof_update (int lev, MultiFab & vof_mf, Array }); //end ParallelFor } //end MFIter - //fix me: temporary solution for MPI boundaries + //fixme: temporary solution for MPI boundaries height[0].FillBoundary(geom.periodicity()); height[1].FillBoundary(geom.periodicity()); @@ -1842,7 +1845,8 @@ if(1){ height[1].FillBoundary(geom.periodicity()); }//end for dim - + //fixme: need to change for BCs + normal[lev].setVal(VOF_NODATA,0,AMREX_SPACEDIM,v_incflo->nghost_state()); ///////////////////////////////////////////////////////////////////////////////////////// //update the normal and alpha ///////////////////////////////////////////////////////////////////////////////////////// @@ -1889,10 +1893,11 @@ if(1){ } for (int d = 0; d < AMREX_SPACEDIM; d++) (&m.x)[d]= mv(i,j,k,d); - /* Print() <<" normal direction "<< m.x<<" "< const& tracer, // i.e., loop through the node-centered MultiFab. ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - /* if (i==4 &&j==8 &&k==4&& v_incflo->m_cur_time>1.99) { - Print() <<" vof_advection---dir "< 0); /* if (fabs (un) > 0.51) { Real x = Real(i+0.5)*dx[0]; @@ -2364,7 +2360,6 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, Print()<< "Warning: CFL "< index={i,j,k}, // store upwinding index index_d={i,j,k}; // store downwinding index @@ -2381,17 +2376,27 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, mv(index[0],index[1],index[2],2) )}; Real alpha_v = al(index[0],index[1],index[2]); - if (un < 0.) { + if (i==15 &&j==0 &&k==15&& dir==1/*v_incflo->m_nstep==1975*/) { + AllPrint() <<" vof_advection---dir "< q0={AMREX_D_DECL(0.,0.,0.)},q1={AMREX_D_DECL(1.,1.,1.)}; - q0[dir]=1.-fabs(un); - for (int dd = 0; dd < AMREX_SPACEDIM; dd++) { + } + Array q0={AMREX_D_DECL(0.,0.,0.)},q1={AMREX_D_DECL(1.,1.,1.)}; + q0[dir]=1.-fabs(un); + for (int dd = 0; dd < AMREX_SPACEDIM; dd++) { alpha_v -= m_v[dd]*q0[dd]; m_v[dd] *= q1[dd] - q0[dd]; - } - cf = plane_volume (m_v, alpha_v); + } + cf = plane_volume (m_v, alpha_v); + } + else + cf = fvol; } //Make sure we just update the cells in the valid box //upwinding cells @@ -2451,15 +2456,16 @@ VolumeOfFluid::tracer_vof_advection(Vector const& tracer, <<"vof_flux"<<" "<FillBoundary(geom.periodicity()); + v_incflo->fillphysbc_tracer(lev, 0., *tracer[lev], 1); // update the normal and alpha of the plane in each interface cell after each sweep tracer_vof_update (lev, *tracer[lev], height[lev]); }// end i-,j-,k-sweep: calculation of vof advection - curvature_calculation (lev, *tracer[lev], height[lev], kappa[lev]); + curvature_calculation (lev, *tracer[lev], height[lev], kappa[lev]); }// end lev start = (start + 1) % AMREX_SPACEDIM; @@ -2559,13 +2565,14 @@ VolumeOfFluid:: velocity_face_source (int lev, Real dt, AMREX_D_DECL(MultiFab& u } -void VolumeOfFluid:: variable_filtered (MultiFab & variable) +void VolumeOfFluid:: variable_filtered (int lev, MultiFab & variable) { + Geometry const& geom = v_incflo->Geom(lev); const auto& ba = variable.boxArray(); const auto& dm = variable.DistributionMap(); const auto& fact = variable.Factory(); - MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0 , MFInfo(), fact); - MultiFab center_val(ba,dm,1,0,MFInfo(), fact); + MultiFab node_val(amrex::convert(ba,IntVect::TheNodeVector()),dm, 1, 0, MFInfo(), fact); + MultiFab center_val(ba,dm,1,1,MFInfo(), fact); #ifdef _OPENMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -2595,6 +2602,8 @@ void VolumeOfFluid:: variable_filtered (MultiFab & variable) } average_node_to_cellcenter(center_val, 0, node_val, 0, 1,0); Copy(variable, center_val , 0, 0, 1, 0); + //fixme: BCs + variable.FillBoundary(geom.periodicity()); } @@ -2615,6 +2624,8 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) int vof_init_with_eb = 1; ParmParse pp("incflo"); pp.query("vof_init_with_eb", vof_init_with_eb); + Real distance=0.; + pp.query("offset",distance); Geometry const& geom = v_incflo->Geom(lev); auto const& dx = geom.CellSizeArray(); @@ -2628,7 +2639,7 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) (problo[1]+.1), (problo[2]+.45))};*/ Array center1{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), - (problo[1]+30.e-4), + (problo[1]+distance), 0.5*(problo[2]+probhi[2]))}; Array center{AMREX_D_DECL(0.5*(problo[0]+probhi[0]), 0.5*(problo[1]+probhi[1]), @@ -2793,8 +2804,9 @@ VolumeOfFluid::tracer_vof_init_fraction (int lev, MultiFab& a_tracer) } } + //fixme: boundary conditions a_tracer.FillBoundary(geom.periodicity()); - + v_incflo->fillphysbc_tracer(lev, 0., a_tracer, 1); // Once vof tracer is initialized, we calculate the normal direction and alpha of the plane segment // intersecting each interface cell. @@ -2986,7 +2998,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) #if AMREX_SPACEDIM==3 ", \"f_z\""<< #endif - "\n"; + ", \"ftol\""<<"\n"; for (int lev = 0; lev <= finest_level; ++lev) { bool m_use_cc_proj=v_incflo->m_use_cc_proj; @@ -3023,7 +3035,7 @@ void VolumeOfFluid::WriteTecPlotFile(Real time, int nstep) for (int dim = 0; dim < AMREX_SPACEDIM; ++dim) TecplotFile <<", "<<(IJK[dim]+std::string("="))<<(ijk_max[dim]-ijk_min[dim]+2); TecplotFile <<", DATAPACKING=BLOCK"<<", VARLOCATION=(["<<(m_use_cc_proj?AMREX_SPACEDIM+1:AMREX_SPACEDIM+2)<<"-" - <<(AMREX_SPACEDIM==3?24:19)<<"]=CELLCENTERED)" + <<(AMREX_SPACEDIM==3?25:20)<<"]=CELLCENTERED)" << std::scientific << std::setprecision(6) <<", SOLUTIONTIME="< 100) { + TecplotFile <<"\n"; + nn=0; + } + } + } TecplotFile <<"\n"; } // end MFIter @@ -3616,7 +3644,7 @@ void VolumeOfFluid::output_droplet (Real time, int nstep) for (int n = 0; n < n_tag; n++) range_update (kappa_range[n]); // the rest of the algorithm deals with parallel BCs - if (ParallelDescriptor::NProcs()> 1){ + if (ParallelDescriptor::NProcs()> 1 && n_tag > 0){ Real sum[n_tag]; /*sum number of cells of each drop from different pid*/ ParallelDescriptor::ReduceIntSum(ncell,n_tag); @@ -3847,6 +3875,7 @@ if (0){ } // Write data to file + if (ndrops > 0) outputFile << std::scientific << std::setprecision(8) << time << ", "< 0) + outputFile <<"\n"; outputFile.close(); } } // end lev diff --git a/src/vof/incflo_vof.cpp b/src/vof/incflo_vof.cpp index 0a8cfee0c..c714e8e42 100644 --- a/src/vof/incflo_vof.cpp +++ b/src/vof/incflo_vof.cpp @@ -32,9 +32,7 @@ incflo::update_vof_density (int lev, MultiFab & density, MultiFab & tracer) }); } //fixme: BCs - density.FillBoundary(geom[lev].periodicity()); - - + density.FillBoundary(geom[lev].periodicity()); } diff --git a/test_3d/inputs.dropflight b/test_3d/inputs.dropflight index 3a74fb904..78ada9501 100644 --- a/test_3d/inputs.dropflight +++ b/test_3d/inputs.dropflight @@ -4,7 +4,7 @@ #stop_time = 2.2426211256 stop_time = 100e-6 # Max (simulated) time to evolve #stop_time =1.66481717925811447992 -#max_step = 5 # Max number of time steps +#max_step = 100 # Max number of time steps steady_state = 0 # Steady-state solver? #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# @@ -16,15 +16,15 @@ incflo.cfl = 0.1 # CFL factor #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # INPUT AND OUTPUT # #.......................................# -amr.plot_int = 300 # Steps between plot files +amr.plot_int = 400 # Steps between plot files amr.check_int = 1000 # Steps between checkpoint files amr.restart = "" # Checkpoint to restart from - +amr.plt_p = 1 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # PHYSICS # #.......................................# incflo.gravity = 0. 0. 0. # Gravitational force (3D) -incflo.ro_0 = 1.0e-3 # Reference density +incflo.ro_0 = 1.0e-3 # Reference density incflo.ntrac = 1 incflo.fluid_model = "newtonian" # Fluid model (rheology) incflo.mu = 1.8e-4 # Dynamic viscosity coefficient @@ -41,7 +41,7 @@ incflo.sigma = 72. #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # #.......................................# -amr.n_cell = 32 32 32 # Grid cells at coarsest AMRlevel +amr.n_cell = 32 64 32 # Grid cells at coarsest AMRlevel amr.max_level = 0 # Max AMR level in hierarchy amr.max_grid_size = 64 128 64 @@ -49,7 +49,7 @@ amr.max_grid_size = 64 128 64 # GEOMETRY # #.......................................# geometry.prob_lo = -60.e-4 0. -60.e-4 # Lo corner coordinates -geometry.prob_hi = 60.e-4 120.e-4 60.e-4 # Hi corner coordinates +geometry.prob_hi = 60.e-4 240.e-4 60.e-4 # Hi corner coordinates geometry.is_periodic = 0 0 0 # Periodicity x y z (0/1) geometry.coord_sys = 0 @@ -58,22 +58,25 @@ geometry.coord_sys = 0 #.......................................# incflo.probtype = 1109 # incflo.ic_u = 0. -incflo.ic_v = 0. +incflo.ic_v = 100. incflo.ic_w = 0. +incflo.offset = 35e-4 # Boundary conditions -ylo.type = "nsw" -#ylo.pressure = 0. -ylo.tracer =0. +ylo.type = "mi" +#ylo.tracer = 0 +#ylo.pressure = 0 +ylo.velocity = 0. .1 0. yhi.type = "po" -yhi.pressure = 0. -yhi.tracer = 0. -xlo.type = "sw" +#yhi.velocity =0. .1 0. +yhi.pressure = 0. +#yhi.tracer = 0. +xlo.type = "nsw" #xlo.pressure = 0. -xhi.type = "sw" +xhi.type = "nsw" #xhi.pressure = 0.0 -zlo.type = "sw" +zlo.type = "nsw" #zlo.pressure = 0. -zhi.type = "sw" +zhi.type = "nsw" #zhi.pressure = 0.0 @@ -93,7 +96,7 @@ incflo.use_cc_proj = 1 incflo.advect_momentum = 0 incflo.number_of_averaging = 0 incflo.diffusion_type = 2 -incflo.output_drop_frequence = 5 +incflo.output_drop_frequence = 10 incflo.godunov_include_diff_in_forcing = 1 incflo.use_mac_phi_in_godunov = 0 incflo.godunov_use_forces_in_trans = 0 From 41cde1705b852071ea3d1af6490acae58d1762cf Mon Sep 17 00:00:00 2001 From: Hua Tan Date: Wed, 6 Nov 2024 21:10:33 -0800 Subject: [PATCH 29/29] fix the bug of io.cpp caused by VOF implementation --- src/rheology/incflo_rheology.cpp | 1 - src/utilities/io.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rheology/incflo_rheology.cpp b/src/rheology/incflo_rheology.cpp index 5b5980049..6e8bea297 100644 --- a/src/rheology/incflo_rheology.cpp +++ b/src/rheology/incflo_rheology.cpp @@ -89,7 +89,6 @@ void incflo::compute_viscosity_at_level (int /*lev*/, eta_arr(i,j,k) = m_mu*(1.-tracer_arr(i,j,k,0))+m_mu_s[0]*tracer_arr(i,j,k,0); }); } - } } else diff --git a/src/utilities/io.cpp b/src/utilities/io.cpp index 4f4e811c3..5a148a6d0 100644 --- a/src/utilities/io.cpp +++ b/src/utilities/io.cpp @@ -597,6 +597,7 @@ void incflo::WritePlotVariables(Vector vars, const std::string& plo &vel_eta, &m_leveldata[lev]->density, &m_leveldata[lev]->velocity, + &m_leveldata[lev]->tracer, Geom(lev), m_cur_time, 0); }