const bool colorize = false);
/**
- * Generate a grid consisting of a channel with a cylinder where the length
- * and the height of the channel can be defined by the user. This generator is
- * a generalized version of GridGenerator::channel_with_cylinder. It can be
- * used for benchmarking Navier-Stokes solvers for various flows around a
- * cylinder cases in 2D or 3D. The main limitation of this generator is that
- * the diameter of the cylinder is fixed at one and that the dimensions of the
- * channel must be an integer multiple of this diameter. Consequently, the
- * length before the cylinder
- * (length_pre, $L_{pre}$), the length after the cylinder (length_post,
- * $L_{post}$) and the half height of the channel (half_height, $H$) must be
- * integer values. The geometry consists of a channel of size $[-L_{pre}, -H]
- * \times [L_{post}, H] \times [0, W] $ (where the $z$ dimension is omitted in
- * 2d) with a cylinder, parallel to the $z$ axis with diameter $1$, centered
- * at $(0, 0, 0)$. The channel has three distinct regions: <ol>
+ * Generate a grid consisting of a channel with a cylinder where the length,
+ * the height and the depth (in 3D) of the channel can be defined by the user.
+ * This generator is a generalized version of
+ * GridGenerator::channel_with_cylinder. It can be used for benchmarking
+ * Navier-Stokes solvers for various flows around a cylinder cases in 2D or
+ * 3D. The main limitation of this generator is that the diameter of the
+ * cylinder is fixed at one and that the dimensions of the channel along the x
+ * and y dimensions must be an integer multiple of this diameter.
+ * Consequently, the length before the cylinder
+ * ($L_{pre}$), the length after the cylinder ($L_{post}$), the height below
+ * ($H_{below}$) and the height above ($H_{above}$) must be integer values.
+ * The depth of the channel ($W$) can be any real positive number. The
+ * geometry consists of a channel of size $[-L_{pre}, -H_{below}] \times
+ * [L_{post}, H_{above}] \times [0, W] $ (where the $z$ dimension is omitted
+ * in 2d) with a cylinder, parallel to the $z$ axis with diameter $1$,
+ * centered at $(0, 0, 0)$. The channel has three distinct regions: <ol>
* <li>If @p n_shells is greater than zero, then there are that many shells
* centered around the cylinder,</li>
* <li>a blending region between the shells and the rest of the
* <li>a bulk region consisting of Cartesian cells.</li>
* </ol>
* Here is an example of a grid (without additional global refinement)
- * where the arguments were length_pre=8, length_post=16, half_height=8 and
+ * where the arguments were {8,16,8,8} and
* the default arguments are used for the number of shells and skewness:
*
* @image html custom_channel_with_cylinder.png
* @param tria Triangulation to be created. Must be empty upon calling this
* function.
*
- * @param half_height The half height of the channel (y- to 0 or 0 to y+).
+ * @param lengths_and_heights A vector containing the distance of the domain to the center of the cylinder.
+ * The vector must contain 4 unsigned integers which consist in the length (in
+ * number of cylinder diameter) before the cylinder, after the cylinder, below
+ * the cylinder and above the cylinder.
*
- * @param length_pre The length of the channel from the left side (x-) to the center of the cylinder (0)
+ * @param depth The depth of the simulation domain (in 3D, the z axis)
*
- * @param length_post The length of the channel from the cylinder (0) to the right side (x+)
+ * @param depth_division The number of division along the z axis
*
* @param shell_region_radius Radius of the layer of shells around the cylinder.
* This value should be between larger than 0.5 (the radius of the cylinder)
*
* @param n_shells Number of shells to use in the shell layer.
*
- * @param depth The depth of the simulation domaine (in 3D, the z axis)
- *
- * @param depth_division The number of division along the z axis
- *
* @param skewness Parameter controlling how close the shells are
* to the cylinder: see the mathematical definition given in
* GridGenerator::concentric_hyper_shells.
*/
template <int dim>
void
- custom_channel_with_cylinder(Triangulation<dim> &tria,
- const unsigned int half_height,
- const unsigned int length_pre,
- const unsigned int length_post,
- const double depth = 1,
- const unsigned int depth_division = 1,
- const double shell_region_radius = 0.75,
- const unsigned int n_shells = 2,
- const double skewness = 2.0,
- const bool use_transfinite_region = false,
- const bool colorize = false);
+ custom_channel_with_cylinder(
+ Triangulation<dim> &tria,
+ const std::vector<unsigned int> lengths_and_heights,
+ const double depth = 1,
+ const unsigned int depth_division = 1,
+ const double shell_region_radius = 0.75,
+ const unsigned int n_shells = 2,
+ const double skewness = 2.0,
+ const bool use_transfinite_region = false,
+ const bool colorize = false);
/**
* A general @p dim -dimensional cell (a segment if dim is 1, a quadrilateral
template <>
void
custom_channel_with_cylinder(Triangulation<1> &,
- const unsigned int,
- const unsigned int,
- const unsigned int,
+ const std::vector<unsigned int>,
const double,
unsigned int,
const double,
template <>
void
- custom_channel_with_cylinder(Triangulation<2> &tria,
- const unsigned int half_height,
- const unsigned int length_pre,
- const unsigned int length_post,
- const double,
- unsigned int,
- const double shell_region_radius,
- const unsigned int n_shells,
- const double skewness,
- const bool use_transfinite_region,
- const bool colorize)
+ custom_channel_with_cylinder(
+ Triangulation<2> &tria,
+ const std::vector<unsigned int> lengths_and_heights,
+ const double,
+ unsigned int,
+ const double shell_region_radius,
+ const unsigned int n_shells,
+ const double skewness,
+ const bool use_transfinite_region,
+ const bool colorize)
{
const types::manifold_id polar_manifold_id = 0;
const types::manifold_id tfi_manifold_id = 1;
// The number of repetitions is chosen to ensure that the cylinder
// occupies four cells.
+ const unsigned int length_pre = lengths_and_heights[0];
+ const unsigned int length_post = lengths_and_heights[1];
+ const unsigned int height_below = lengths_and_heights[2];
+ const unsigned int height_above = lengths_and_heights[3];
+
const unsigned int length_repetitions = length_pre + length_post;
- const unsigned int height_repetitions = 2 * half_height;
+ const unsigned int height_repetitions = height_above + height_below;
// We begin by setting up a grid that is length_repetition by
// height_repetitions cells. These cells are all square
GridGenerator::subdivided_hyper_rectangle(
bulk_tria,
{(length_repetitions), height_repetitions},
- Point<2>(-double(length_pre), -double(half_height)),
- Point<2>(double(length_post), double(half_height)));
+ Point<2>(-double(length_pre), -double(height_below)),
+ Point<2>(double(length_post), double(height_above)));
// bulk_tria now looks like this:
//
else if (face->manifold_id() == polar_manifold_id)
face->set_boundary_id(2);
// bottom side
- else if (std::abs(center[1] - (-static_cast<double>(half_height))) <
- 1e-10)
+ else if (std::abs(center[1] -
+ (-static_cast<double>(height_below))) < 1e-10)
face->set_boundary_id(3);
// top side
else
template <>
void
- custom_channel_with_cylinder(Triangulation<3> &tria,
- const unsigned int half_height,
- const unsigned int length_pre,
- const unsigned int length_post,
- const double depth,
- unsigned int depth_division,
- const double shell_region_radius,
- const unsigned int n_shells,
- const double skewness,
- const bool use_transfinite_region,
- const bool colorize)
+ custom_channel_with_cylinder(
+ Triangulation<3> &tria,
+ const std::vector<unsigned int> lengths_and_heights,
+ const double depth,
+ unsigned int depth_division,
+ const double shell_region_radius,
+ const unsigned int n_shells,
+ const double skewness,
+ const bool use_transfinite_region,
+ const bool colorize)
{
Triangulation<2> tria_2;
custom_channel_with_cylinder(tria_2,
- half_height,
- length_pre,
- length_post,
+ lengths_and_heights,
depth,
depth_division,
shell_region_radius,
else if (name == "custom_channel_with_cylinder")
parse_and_create<dim,
dim,
- unsigned int,
- unsigned int,
- unsigned int,
+ std::vector<unsigned int>,
double,
unsigned int,
double,
Triangulation<d> tr;
GridGenerator::custom_channel_with_cylinder(
- tr, 4, 3, 5, 1, 2, 0.75, 4, 2, true, true);
+ tr, {3, 5, 4, 4}, 1, 2, 0.75, 4, 2, true, true);
GridOut gout;
gout.write_vtk(tr, os);
const unsigned int d = 3;
Triangulation<d> tr;
GridGenerator::custom_channel_with_cylinder(
- tr, 4, 3, 5, 1, 2, 0.75, 4, 2, true, true);
+ tr, {3, 5, 4, 4}, 1, 2, 0.75, 4, 2, true, true);
GridOut gout;
gout.write_vtk(tr, os);
}
-9.18485e-17 -0.500000 0
0.353553 -0.353553 0
-CELLS 196 788
+CELLS 204 812
4 10 9 0 1
4 11 10 1 2
4 12 11 2 3
4 86 85 29 30
4 87 86 30 31
4 80 87 31 39
+2 1 0
+2 2 1
+2 3 2
+2 4 3
+2 5 4
+2 6 5
+2 7 6
+2 8 7
2 17 8
2 26 17
2 35 26
2 119 111
2 119 118
-CELL_TYPES 196
+CELL_TYPES 204
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
-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 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 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
-CELL_DATA 196
+CELL_DATA 204
SCALARS MaterialID int 1
LOOKUP_TABLE default
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 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
-1 1 1 1 1 1 1 4 4 4 4 4 4 4 1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2 -1 2 2 -1 2 -1 2 -1 2 -1 -1 2 -1 2
+3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 4 4 4 4 4 4 4 1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2 -1 2 2 -1 2 -1 2 -1 2 -1 -1 2 -1 2
SCALARS ManifoldID int 1
LOOKUP_TABLE default
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 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 1 1 1 1 1 1 1 1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 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
+-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 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
# vtk DataFile Version 3.0
Triangulation generated with deal.II
-9.18485e-17 -0.500000 1.00000
0.353553 -0.353553 1.00000
-CELLS 596 2980
+CELLS 604 3020
8 10 9 0 1 130 129 120 121
8 11 10 1 2 131 130 121 122
8 12 11 2 3 132 131 122 123
8 86 85 29 30 206 205 149 150
8 87 86 30 31 207 206 150 151
8 80 87 31 39 200 207 151 159
+4 1 121 120 0
+4 2 122 121 1
+4 3 123 122 2
+4 4 124 123 3
+4 5 125 124 4
+4 6 126 125 5
+4 7 127 126 6
+4 8 128 127 7
4 10 9 0 1
4 11 10 1 2
4 12 11 2 3
2 239 238
2 239 231
-CELL_TYPES 596
+CELL_TYPES 604
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
-9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
+9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
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 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 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
-CELL_DATA 596
+CELL_DATA 604
SCALARS MaterialID int 1
LOOKUP_TABLE default
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 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
-5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 1 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 2 -1 5 2 5 -1 2 -1 5 2 -1 5 2 -1 5 2 -1 5 2 -1 5 2 -1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
+3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 1 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 1 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 5 -1 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 -1 -1 5 2 -1 5 2 5 -1 2 -1 5 2 -1 5 2 -1 5 2 -1 5 2 -1 5 2 -1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
0 0 0 0 -1 -1 0 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 -1 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 0 -1 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
SCALARS ManifoldID int 1
LOOKUP_TABLE default
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 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 1 1 1 1 1 1 1 1
--1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 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 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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 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
+-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 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 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 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 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
1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 1 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0