generate_half_hyper_ball,
1,
2)
+ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(generate_cylinder_overloads,
+ generate_cylinder,
+ 0,
+ 2)
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(generate_hyper_shell_overloads,
generate_hyper_shell,
3,
+ const char generate_cylinder_docstring[] =
+ "Create a dim dimensional cylinder where the x-axis serves as the axis \n"
+ "of the cylinder. For the purposes of this function, a cylinder is \n"
+ "defined as a (dim - 1) dimensional disk of given radius, extruded \n"
+ "along the axis of the cylinder (which is the first coordinate \n"
+ "direction). Consequently, in three dimensions, the cylinder extends \n"
+ "from x=-half_length to x=+half_length and its projection into the \n"
+ "yz-plane is a circle of radius radius. In two dimensions, the \n"
+ "cylinder is a rectangle from x=-half_length to x=+half_length and \n"
+ "from y=-radius to y=radius. \n";
+
+
+
const char generate_hyper_cube_with_cylindrical_hole_docstring[] =
"This function produces a square in the xy-plane with a cylindrical \n"
"hole in the middle. In 3d, this geometry is extruded in z direction \n"
generate_half_hyper_ball_overloads(
boost::python::args("self", "center", "radius"),
generate_half_hyper_ball_docstring))
+ .def("generate_cylinder",
+ &TriangulationWrapper::generate_cylinder,
+ generate_cylinder_overloads(
+ boost::python::args("self", "radius", "half_length"),
+ generate_cylinder_docstring))
.def("generate_hyper_shell",
&TriangulationWrapper::generate_hyper_shell,
generate_hyper_shell_overloads(boost::python::args("self",
+ template <int dim>
+ void
+ generate_cylinder(const double radius,
+ const double half_length,
+ void *triangulation)
+ {
+ Triangulation<dim> *tria =
+ static_cast<Triangulation<dim> *>(triangulation);
+ tria->clear();
+ GridGenerator::cylinder(*tria, radius, half_length);
+ }
+
+
+
template <int dim, int spacedim>
void
scale(const double scaling_factor, void *triangulation)
+ void
+ TriangulationWrapper::generate_cylinder(const double radius,
+ const double half_length)
+ {
+ AssertThrow(
+ dim == spacedim,
+ ExcMessage(
+ "This function is only implemented for dim equal to spacedim."));
+ if (dim == 2)
+ internal::generate_cylinder<2>(radius, half_length, triangulation);
+ else
+ internal::generate_cylinder<3>(radius, half_length, triangulation);
+ }
+
+
+
void
TriangulationWrapper::generate_hyper_cube_with_cylindrical_hole(
const double inner_radius,
n_cells = triangulation.n_active_cells()
self.assertEqual(n_cells, n_cells_ref)
+ def test_cylinder(self):
+ for dim in self.dim:
+ triangulation = Triangulation(dim[0])
+ if (dim[0] == '2D'):
+ n_cells_ref = 1
+ else:
+ n_cells_ref = 10
+ triangulation.generate_cylinder()
+ n_cells = triangulation.n_active_cells()
+ self.assertEqual(n_cells, n_cells_ref)
+
def test_shift_and_merge(self):
for dim in self.dim:
triangulation_1 = self.build_hyper_cube_triangulation(dim)