Commit aef1f483 authored by Chris Cantwell's avatar Chris Cantwell
Browse files

Merge branch 'master' into fix/FilterOutput

parents 9e4e2161 5ad9fac1
///////////////////////////////////////////////////////////////////////////////
//
// File Tau.hpp
//
// For more information, please see: http://www.nektar.info
//
// The MIT License
//
// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
// Department of Aeronautics, Imperial College London (UK), and Scientific
// Computing and Imaging Institute, University of Utah (USA).
//
// License for the specific language governing rights and limitations under
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
// Description: wrapper of functions around TAU routines
//
///////////////////////////////////////////////////////////////////////////////
#ifndef NEKTAR_LIB_UTILITIES_BASICUTILS_TAU_HPP
#define NEKTAR_LIB_UTILITIES_BASICUTILS_TAU_HPP
namespace Tau
{
extern "C"
{
void Tau_start(const char *name);
void Tau_stop(const char *name);
}
Start(std::string name)
{
Tau_start(name.c_str());
}
Stop(std::string name)
{
Tau_stop(name.c_str());
}
}
#endif //NEKTAR_LIB_UTILITIES_BASICUTILS_TAU_HPP
......@@ -54,6 +54,14 @@ namespace Nektar
"Must set factor in BLPoints key");
if (fabs(r-1.0) < 1e-6)
{
NekDouble tmp = 2.0/(npts-1.0);
for (unsigned int i = 0; i < npts; ++i)
{
m_points[0][i] = -1.0 + i * tmp;
}
}
else
{
NekDouble a = 2.0 * (1.0-r) / (1.0 - pow(r,(double)npts));
m_points[0][0] = -1.0;
......@@ -65,14 +73,6 @@ namespace Nektar
m_points[0][npts-1] = 1.0;
}
else
{
NekDouble tmp = 2.0/(npts-1.0);
for (unsigned int i = 0; i < npts; ++i)
{
m_points[0][i] = -1.0 + i * tmp;
}
}
if (m_pointsKey.GetPointsType() == eBoundaryLayerPointsRev)
{
......
......@@ -82,7 +82,7 @@ int main(int argc, char *argv[])
hidden.add_options()
("input-file", po::value<string>(), "Input filename");
po::options_description cmdline_options;
po::options_description cmdline_options("Command-line options");
cmdline_options.add(hidden).add(desc);
po::options_description visible("Allowed options");
......
......@@ -14,6 +14,7 @@ ADD_UTILITIES_EXECUTABLE(ProbeFld util-extra ProbeFld.cpp)
ADD_UTILITIES_EXECUTABLE(XmlToTecplot util XmlToTecplot.cpp)
ADD_UTILITIES_EXECUTABLE(XmlToTecplotWireFrame util XmlToTecplotWireFrame.cpp)
ADD_UTILITIES_EXECUTABLE(XmlToVtk util XmlToVtk.cpp)
ADD_UTILITIES_EXECUTABLE(Fld2DTo2D5 util Fld2DTo2D5.cpp)
# Generate list of available solvers
FILE(GLOB dir_list "*")
......
#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <vector>
#include <MultiRegions/ExpList.h>
#include <MultiRegions/ExpList1D.h>
#include <MultiRegions/ExpList2D.h>
#include <MultiRegions/ExpList2DHomogeneous1D.h>
#include <MultiRegions/ExpList3DHomogeneous1D.h>
#include <MultiRegions/ExpList3DHomogeneous2D.h>
using namespace Nektar;
int main(int argc, char *argv[])
{
int i,j,k;
if(argc != 6)
{
fprintf(stderr,
"Usage: Fld2DTo2D5 2dmeshfile 2dfieldfile 3dmeshfile 3dfieldfile outfield\n");
exit(1);
}
string datasave(argv[5]);
string mesh2d(argv[1]);
string mesh3d(argv[3]);
//create 2d session
LibUtilities::SessionReaderSharedPtr vSession2d
= LibUtilities::SessionReader::CreateInstance(2, argv);
std::vector<std::string> filenames;
filenames.push_back(mesh3d);
//create 3D session
LibUtilities::SessionReaderSharedPtr vSession3d
= LibUtilities::SessionReader::CreateInstance(2, argv, filenames, vSession2d->GetComm());
SpatialDomains::MeshGraphSharedPtr graphShPt2d = SpatialDomains::MeshGraph::Read(vSession2d);
SpatialDomains::MeshGraphSharedPtr graphShPt3d = SpatialDomains::MeshGraph::Read(vSession3d);
//2D
string field2dfile(argv[2]);
vector<LibUtilities::FieldDefinitionsSharedPtr> field2ddef;
vector<vector<NekDouble> > field2ddata;
LibUtilities::Import(field2dfile,field2ddef,field2ddata);
//3D
string field3dfile(argv[4]);
vector<LibUtilities::FieldDefinitionsSharedPtr> field3ddef;
vector<vector<NekDouble> > field3ddata;
LibUtilities::Import(field3dfile,field3ddef,field3ddata);
vector<vector<NekDouble> > field3ddatanew(field3ddef.size());
// Set up Expansion information
vector< vector<LibUtilities::PointsType> > pointstype2d;
vector< vector<LibUtilities::PointsType> > pointstype3d;
for(i = 0; i < field2ddef.size(); ++i)
{
vector<LibUtilities::PointsType> ptype2d;
for(j = 0; j < 2; ++j)
{
ptype2d.push_back(LibUtilities::ePolyEvenlySpaced);
}
pointstype2d.push_back(ptype2d);
}
graphShPt2d->SetExpansions(field2ddef,pointstype2d);
for(i = 0; i < field3ddef.size(); ++i)
{
vector<LibUtilities::PointsType> ptype3d;
for(j = 0; j < 2; ++j)
{
ptype3d.push_back(LibUtilities::ePolyEvenlySpaced);
}
pointstype3d.push_back(ptype3d);
}
graphShPt3d->SetExpansions(field3ddef,pointstype3d);
bool useFFT = false;
bool dealiasing = false;
// Define Expansion
//int expdim2d = graphShPt2d->GetMeshDimension();
int nfields2d = field2ddef[0]->m_fields.size();
//int expdim3d = graphShPt3d->GetMeshDimension();
int nfields3d = field3ddef[0]->m_fields.size();
//Gen 2d
Array<OneD, MultiRegions::ExpListSharedPtr> Exp2d(nfields2d);
MultiRegions::ExpList2DSharedPtr Exp2D;
Exp2D = MemoryManager<MultiRegions::ExpList2D>::AllocateSharedPtr(vSession2d,graphShPt2d);
Exp2d[0] = Exp2D;
for(i = 1; i < nfields2d; ++i)
{
Exp2d[i] = MemoryManager<MultiRegions::ExpList2D>::AllocateSharedPtr(*Exp2D);
}
//Gen 3d
Array<OneD, MultiRegions::ExpListSharedPtr> Exp3d(nfields3d);
MultiRegions::ExpList3DHomogeneous1DSharedPtr Exp3DH1;
// Define Homogeneous expansion
int nplanes;
//vSession3d->LoadParameter("HomModesZ",nplanes,field3ddef[0]->m_numModes[2]);
nplanes = field3ddef[0]->m_numModes[2];
cout<< nplanes << endl;
// nplanes + 1 points
const LibUtilities::PointsKey Pkey(nplanes,LibUtilities::ePolyEvenlySpaced);
const LibUtilities::BasisKey Bkey(field3ddef[0]->m_basis[2],nplanes,Pkey);
NekDouble lz = field3ddef[0]->m_homogeneousLengths[0];
Exp3DH1 = MemoryManager<MultiRegions::ExpList3DHomogeneous1D>::AllocateSharedPtr(vSession3d,Bkey,lz,useFFT,dealiasing,graphShPt3d);
Exp3d[0] = Exp3DH1;
for(j = 1; j < nfields3d; ++j)
{
Exp3d[j] = MemoryManager<MultiRegions::ExpList3DHomogeneous1D>::AllocateSharedPtr(*Exp3DH1);
}
k=0;
for(j = 0; j < nfields2d; ++j)
{
if (j< nfields2d-1)
{
for(int i = 0; i < field2ddata.size(); ++i)
{
Exp2d[j]->ExtractDataToCoeffs(
field2ddef[i],
field2ddata[i],
field2ddef[i]->m_fields[j],
Exp3d[j]->GetPlane(k)->UpdateCoeffs());
}
}
if (j==nfields2d-1)
{
for(int i = 0; i < field2ddata.size(); ++i)
{
Exp2d[j]->ExtractDataToCoeffs(
field2ddef[i],
field2ddata[i],
field2ddef[i]->m_fields[j],
Exp3d[j+1]->GetPlane(k)->UpdateCoeffs());
}
}
}
Array<OneD, Array<OneD, NekDouble> > fieldcoeffs(vSession3d->GetVariables().size());
for(j = 0; j < fieldcoeffs.num_elements(); ++j)
{
fieldcoeffs[j] = Exp3d[j]->UpdateCoeffs();
for(int i = 0; i < field3ddef.size(); ++i)
{
Exp3d[0]->AppendFieldData(field3ddef[i], field3ddatanew[i],fieldcoeffs[j]);
}
}
LibUtilities::Write(datasave,field3ddef,field3ddatanew);
return 0;
}
// Only for 2d to 2d5 Hui Xu 23 Aug 2013
......@@ -45,3 +45,5 @@ ENDIF (NEKTAR_USE_VTK)
ADD_UTILITIES_EXECUTABLE(MeshConvert util ${MeshConvertSources} ${MeshConvertHeaders})
#ADD_NEKTAR_TEST(MeshConvert_CubePer)
#ADD_NEKTAR_TEST_LENGTHY(MeshConvert_StraightRW)
......@@ -440,6 +440,10 @@ namespace Nektar
Array<OneD, NekDouble> x(nq*nq);
Array<OneD, NekDouble> y(nq*nq);
Array<OneD, NekDouble> z(nq*nq);
Array<OneD, NekDouble> xc(nq*nq);
Array<OneD, NekDouble> yc(nq*nq);
Array<OneD, NekDouble> zc(nq*nq);
ASSERTL0(nq > 2, "Number of points must be greater than 2.");
......@@ -504,28 +508,28 @@ namespace Nektar
B0, B1, LibUtilities::eNodalTriElec, geom);
Array<OneD, NekDouble> coord(2);
tri->GetCoords(x,y,z);
tri->GetCoords(xc,yc,zc);
nquad = nq*(nq+1)/2;
for (int j = 0; j < nquad; ++j)
{
coord[0] = xnodal[j];
coord[1] = ynodal[j];
x[j] = stdtri->PhysEvaluate(coord, x);
x[j] = stdtri->PhysEvaluate(coord, xc);
}
for (int j = 0; j < nquad; ++j)
{
coord[0] = xnodal[j];
coord[1] = ynodal[j];
y[j] = stdtri->PhysEvaluate(coord, y);
y[j] = stdtri->PhysEvaluate(coord, yc);
}
for (int j = 0; j < nquad; ++j)
{
coord[0] = xnodal[j];
coord[1] = ynodal[j];
z[j] = stdtri->PhysEvaluate(coord, z);
z[j] = stdtri->PhysEvaluate(coord, zc);
}
}
else if (e->GetConf().e == eQuadrilateral)
......
<?xml version="1.0" encoding="utf-8"?>
<test>
<description> Meshconvert with Periodic Boundary condition and Boundary Layer </description>
<executable>MeshConvert</executable>
<parameters> -m peralign:dir=y:surf1=3:surf2=5 -m bl:surf=4,6:layers=4:r=3:nq=7 cube.dat cube_nek.xml </parameters>
<files>
<file description="Input File">cube.dat</file>
</files>
<metrics>
<metric type="file" id="1">
<file filename="cube_nek.xml">
<sha1>a92cce580691c38d1b7a33f4d1ced3a3ad3f4c2d</sha1>
</file>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8"?>
<test>
<description> Meshconvert with Spherigons and variable Boundary Layer </description>
<executable>MeshConvert</executable>
<parameters> -m spherigon:surf=10:surf=13 -m spherigon:surf=8:surf=9 -m bl:surf=3,10,13:layers=4:r="1.7*( 1-x/0.3 )+1":nq=7 -m bl:surf=2,8,9:layers=4:r="1.7*(1-(x-0.27)/0.078)+1":nq=7 SL_NEK.dat StraightRWGeom.xml </parameters>
<files>
<file description="Input File">SL_NEK.dat</file>
</files>
<metrics>
<metric type="file" id="1">
<file filename="StraightRWGeom.xml">
<sha1>72a34f2f0895058700c64f671ed67006bd2cb40f</sha1>
</file>
</metric>
</metrics>
</test>
This diff is collapsed.
TITLE = "cube"
VARIABLES = "X"
"Y"
"Z"
ZONE T="Region 1"
STRANDID=1, SOLUTIONTIME=0
Nodes=67, Faces=332, Elements=135, ZONETYPE=FEPolyhedron
DATAPACKING=BLOCK
TotalNumFaceNodes=1052, NumConnectedBoundaryFaces=0, TotalNumBoundaryConnections=0
DT=(DOUBLE DOUBLE DOUBLE )
1.000000000E-01 5.000000000E-02 7.080222317E-02 1.000000000E-01 1.000000000E-01
0.000000000E+00 5.000000000E-02 2.500000000E-02 5.000000000E-02 2.500000000E-02
3.622696301E-02 7.080222317E-02 0.000000000E+00 0.000000000E+00 5.000000000E-02
1.000000000E-01 0.000000000E+00 1.000000000E-01 1.000000000E-01 3.622696301E-02
0.000000000E+00 7.500000000E-02 7.500000000E-02 0.000000000E+00 0.000000000E+00
1.000000000E-01 0.000000000E+00 0.000000000E+00 0.000000000E+00 0.000000000E+00
5.000000000E-02 2.500000000E-02 5.000000000E-02 2.500000000E-02 7.500000000E-02
1.000000000E-01 1.000000000E-01 0.000000000E+00 7.500000000E-02 0.000000000E+00
3.125001250E-02 1.000000000E-01 5.000000000E-02 1.000000000E-01 5.000000000E-02
0.000000000E+00 2.500000000E-02 5.000000000E-02 2.500000000E-02 0.000000000E+00
5.000000000E-02 1.000000000E-01 0.000000000E+00 1.000000000E-01 7.500000000E-02
7.500000000E-02 5.000000000E-02 1.000000000E-01 0.000000000E+00 2.500000000E-02
5.000000000E-02 2.500000000E-02 7.500000000E-02 1.000000000E-01 0.000000000E+00
0.000000000E+00 7.500000000E-02
1.000000000E-01 1.000000000E-01 1.000000000E-01 1.000000000E-01 5.000000000E-02
0.000000000E+00 0.000000000E+00 2.500000000E-02 5.000000000E-02 7.500000000E-02
-1.387778781E-17 1.387778781E-17 5.000000000E-02 2.500000000E-02 1.000000000E-01
1.000000000E-01 1.000000000E-01 0.000000000E+00 0.000000000E+00 1.000000000E-01
5.000000000E-02 7.500000000E-02 2.500000000E-02 0.000000000E+00 0.000000000E+00
0.000000000E+00 1.000000000E-01 1.000000000E-01 5.000000000E-02 2.500000000E-02
0.000000000E+00 2.500000000E-02 5.000000000E-02 7.500000000E-02 2.500000000E-02
5.000000000E-02 5.000000000E-02 7.495755076E-02 7.500000000E-02 7.462157194E-02
4.374999902E-02 1.000000000E-01 1.000000000E-01 5.000000000E-02 0.000000000E+00
0.000000000E+00 2.500000000E-02 5.000000000E-02 7.500000000E-02 5.000000000E-02
1.000000000E-01 1.000000000E-01 1.000000000E-01 0.000000000E+00 7.500000000E-02
2.500000000E-02 0.000000000E+00 0.000000000E+00 0.000000000E+00 2.500000000E-02
5.000000000E-02 7.500000000E-02 2.500000000E-02 5.000000000E-02 1.000000000E-01
5.000000000E-02 7.500000000E-02
1.665000059E-02 1.665000059E-02 4.172475158E-02 5.000000000E-02 1.665000059E-02
8.334999941E-02 8.334999941E-02 8.334999941E-02 8.334999941E-02 8.334999941E-02
5.000000000E-02 4.172475158E-02 8.334999941E-02 6.481739841E-02 8.334999941E-02
8.334999941E-02 8.334999941E-02 5.000000000E-02 8.334999941E-02 5.000000000E-02
5.000000000E-02 1.665000059E-02 8.334999941E-02 5.000000000E-02 1.665000059E-02
1.665000059E-02 5.000000000E-02 1.665000059E-02 1.665000059E-02 3.517979951E-02
1.665000059E-02 1.665000059E-02 1.665000059E-02 1.665000059E-02 1.665000059E-02
5.000000000E-02 8.334999941E-02 3.514061860E-02 8.334999941E-02 6.481216853E-02
5.833749984E-02 0.000000000E+00 0.000000000E+00 0.000000000E+00 1.000000000E-01
1.000000000E-01 1.000000000E-01 1.000000000E-01 1.000000000E-01 1.000000000E-01
1.000000000E-01 1.000000000E-01 1.000000000E-01 1.000000000E-01 0.000000000E+00
1.000000000E-01 0.000000000E+00 0.000000000E+00 0.000000000E+00 0.000000000E+00
0.000000000E+00 0.000000000E+00 0.000000000E+00 1.000000000E-01 0.000000000E+00
0.000000000E+00 1.000000000E-01
# node count per face
3 3 3 4 4 4 4 3 3 4
3 3 3 3 3 3 3 3 3 4
3 4 3 3 3 4 4 3 3 3
3 3 3 3 3 3 3 3 3 4
4 4 3 3 4 4 3 4 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 4 3
3 3 3 3 3 4 3 4 3 4
3 4 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 4 4 3 3 3 3 4 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 4 4 3 4 4 3 3
3 3 3 3 3 4 4 3 3 3
4 3 3 3 3 3 3 3 3 4
3 3 4 3 4 4 4 3 3 3
3 3 3 3 3 3 3 3 3 4
4 3 3 4 3 3 3 4 4 3
4 3 3 4 3 3 3 3 4 3
3 4 4 4 3 3 3 3 3 3
3 3 4 3 3 4 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 4 4 3 3 3 3 3
3 3 3 4 3 4 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 4 3 3 3 4 3 3 3
3 3 3 3 3 3 3 3 4 3
3 4
# face nodes
1 22 3 3 2 22 2 1 22 43
55 22 2 42 55 22 1 43 62 34
2 65 62 34 28 28 2 34 1 5
22 44 55 22 5 1 4 22 22 4
5 2 22 34 34 22 3 34 2 3
3 4 22 34 2 20 28 34 20 34
20 3 55 62 34 22 29 28 34 66
62 34 29 36 22 5 36 22 4 5
33 22 61 55 22 33 61 44 5 33
33 22 3 3 33 34 33 34 22 36
4 3 36 22 3 28 27 34 34 20
27 34 38 27 28 34 38 34 38 29
33 3 20 34 33 20 61 62 34 33
44 63 35 5 58 63 35 26 5 26
35 29 34 32 66 60 32 29 60 62
34 32 33 5 35 61 63 35 33 33
22 36 33 5 36 36 3 39 36 39
22 3 39 22 33 3 39 39 22 33
3 39 4 36 4 39 18 5 35 18
26 35 41 20 3 41 33 20 41 3
33 20 27 38 34 38 20 34 21 38
34 29 21 41 20 34 41 34 33 61
60 32 33 33 32 34 41 21 29 41
34 21 41 29 34 41 32 34 41 32
29 60 63 35 32 33 35 32 57 63
35 31 31 32 35 57 60 32 31 26
31 35 59 60 32 25 25 29 32 31
25 32 35 36 5 33 36 35 15 4
39 15 3 39 39 36 33 39 41 33
41 3 39 16 4 39 39 36 16 12
35 26 12 18 35 18 35 36 41 34
38 41 20 38 41 39 20 3 39 20
20 38 40 20 27 40 41 38 21 41
33 32 32 21 29 41 32 21 32 21
30 32 30 29 11 35 32 11 35 33
32 33 11 12 31 35 31 35 11 32
31 11 32 30 25 32 25 11 41 33
36 41 35 33 41 36 35 15 20 39
16 15 39 36 41 39 36 39 37 37
16 39 12 36 35 12 36 18 41 38
40 41 20 40 41 9 39 20 9 39
41 9 20 27 40 10 20 40 10 20
10 27 17 10 27 20 17 10 41 21
40 41 11 32 41 33 11 41 30 32
41 21 30 12 23 35 35 23 36 12
23 36 41 11 35 12 11 35 32 30
24 32 25 24 32 24 11 41 23 36
41 35 23 51 67 39 15 52 67 39
16 15 9 39 15 9 20 41 36 9
36 9 39 64 67 39 37 36 23 37
23 39 36 37 39 23 18 23 36 12
18 23 41 40 10 41 10 20 9 15
10 15 10 20 20 10 9 41 9 10
17 10 40 15 17 10 41 13 40 41
21 13 41 11 30 32 30 11 41 14
21 41 30 14 41 35 12 41 23 12
41 12 11 24 11 30 36 9 23 41
23 9 48 67 39 9 48 51 15 9
9 23 39 56 67 39 23 64 56 23
37 19 36 23 19 37 23 18 23 19
12 7 23 18 7 23 41 10 13 13
40 10 51 49 10 15 48 49 10 9
9 10 8 41 8 9 41 10 8 53
49 10 17 17 13 10 41 14 13 41
14 11 11 30 14 7 23 11 12 11
23 41 11 23 24 14 11 48 56 23
9 9 8 23 41 8 23 54 56 23
19 7 19 23 50 49 10 13 48 47
8 9 49 47 8 10 41 13 8 13
8 10 41 8 14 13 8 14 41 7
23 41 7 11 11 8 14 41 11 8
24 11 8 24 8 14 24 6 8 8
14 6 56 47 8 23 45 56 23 7
7 23 8 41 8 7 50 47 8 13
13 6 8 7 11 8 11 6 8 46
47 8 6 45 47 8 7 6 7 8
1 5 44 42 4 5 1 5 4 36
58 44 5 26 26 5 18 4 16 36
36 18 5 37 36 16 52 64 37 16
19 36 37 19 18 36 19 37 64 54
26 31 57 58 59 57 31 25 26 18
12 31 26 12 31 11 25 11 31 12
24 25 11 18 7 12 11 12 7 7
18 19 54 45 7 19 24 11 6 7
6 11 6 7 45 46 43 42 55 65
43 62 42 44 55 43 55 62 66 65
62 44 61 55 61 62 55 44 58 63
66 62 60 61 44 63 61 60 62 61
63 60 57 60 63 58 57 63 59 66
60 57 59 60 1 2 3 42 43 2
1 28 2 43 65 4 1 3 2 28
20 2 20 3 27 20 28 4 3 15
20 15 3 4 15 16 27 17 20 16
15 51 52 15 20 17 53 51 15 17
52 51 67 64 52 67 51 48 67 64
67 56 48 51 49 51 53 49 48 56
67 54 64 56 53 50 49 48 49 47
48 47 56 45 54 56 50 47 49 50
46 47 45 56 47 46 45 47 65 66
29 28 27 28 38 28 29 38 29 21
38 25 29 66 59 27 38 40 21 29
30 29 25 30 21 40 38 25 24 30
17 27 40 13 40 21 21 30 14 13
17 40 14 13 21 24 14 30 17 13
50 53 24 6 14 6 13 14 46 50
13 6
# left elements
7 1 1 2 4 10 3 8 5 13
7 12 6 6 9 15 8 8 19 20
18 11 12 15 24 20 13 14 19 14
15 25 17 16 30 17 18 19 19 33
21 38 28 35 22 22 41 23 43 24
25 25 26 44 43 27 27 28 46 49
32 44 30 48 51 34 32 32 36 52
34 34 34 35 53 36 55 37 57 40
56 39 58 59 47 60 62 42 63 44
49 45 45 46 46 65 51 48 49 61
66 50 51 71 53 72 54 54 57 55
71 75 57 57 58 59 63 74 78 61
62 81 83 64 65 84 70 66 81 67
67 68 85 69 88 69 90 91 74 72
72 73 73 84 74 94 76 77 77 78
78 97 79 80 86 81 98 82 100 83
83 101 84 103 87 86 89 87 87 107
89 103 108 109 95 108 109 93 111 111
95 96 96 113 97 98 99 99 101 100
116 102 116 103 107 106 104 105 114 119
117 107 120 109 112 110 110 111 123 125
114 127 115 116 128 118 128 120 119 120
129 121 130 122 130 123 123 131 124 125
126 127 130 132 129 134 134 135 133 134
4 5 12 21 28 45 47 64 82 100
101 115 38 40 46 56 59 75 77 102
110 116 126 131 134 135 2 3 4 10
11 13 20 21 22 23 33 36 37 38
39 40 1 2 3 7 8 9 16 42
61 62 69 79 89 106 79 82 97 99
104 106 113 115 117 118 125 126 128 132
133 135 11 17 18 31 39 50 54 58
70 76 88 90 92 107 108 112 117 124
129 132
# right elements
1 6 2 10 2 3 11 3 4 4
5 5 10 14 6 7 9 16 9 10
11 22 24 12 13 13 23 26 14 20
27 15 16 30 17 18 31 29 32 20
23 21 21 22 39 33 23 36 24 41
27 43 25 26 26 42 45 47 28 29
29 29 50 30 31 31 48 52 33 33
53 51 35 52 35 37 36 38 37 37
38 40 39 40 41 41 42 61 43 63
44 62 64 56 65 47 48 66 67 49
50 68 70 52 54 53 72 58 55 74
55 56 75 59 76 77 60 60 60 80
79 63 64 82 73 65 66 85 67 80
87 88 68 68 69 89 70 71 71 91
92 93 78 73 94 75 95 76 95 96
93 79 82 97 80 96 81 99 83 98
99 84 102 85 85 104 86 86 105 88
106 90 90 91 91 92 92 94 93 94
112 98 114 97 104 113 113 115 100 115
101 110 102 119 103 104 118 118 105 105
106 117 108 122 109 121 111 121 112 113
125 114 126 126 117 125 118 119 128 122
120 127 121 123 122 131 124 124 129 133
133 133 127 128 132 130 131 132 135 135
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0