From: benkirk Date: Fri, 15 Aug 2003 19:17:25 +0000 (+0000) Subject: added support for 3D xda meshes X-Git-Tag: v8.0.0~16267 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f45239e782fd4591761a162efc1c2d982aca29ae;p=dealii.git added support for 3D xda meshes git-svn-id: https://svn.dealii.org/trunk@7943 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/source/grid/grid_in.cc b/deal.II/deal.II/source/grid/grid_in.cc index 4a6485a96f..060e970347 100644 --- a/deal.II/deal.II/source/grid/grid_in.cc +++ b/deal.II/deal.II/source/grid/grid_in.cc @@ -363,7 +363,18 @@ void GridIn::read_dbmesh (std::istream &in) template -void GridIn::read_xda (std::istream &in) +void GridIn::read_xda (std::istream &) +{ + Assert (false, ExcNotImplemented()); +} + + + +// 2D XDA meshes +#if deal_II_dimension == 2 + +template <> +void GridIn<2>::read_xda (std::istream &in) { Assert (tria != 0, ExcNoTriangulationSelected()); AssertThrow (in, ExcIO()); @@ -388,7 +399,7 @@ void GridIn::read_xda (std::istream &in) getline (in, line); // set up array of cells - std::vector > cells (n_cells); + std::vector > cells (n_cells); SubCellData subcelldata; for (unsigned int cell=0; cell::read_xda (std::istream &in) // should still be input here, // so check this: AssertThrow (in, ExcIO()); + Assert (GeometryInfo<2>::vertices_per_cell == 4, + ExcInternalError()); - for (unsigned int i=0; i::vertices_per_cell; ++i) + for (unsigned int i=0; i<4; ++i) in >> cells[cell].vertices[i]; }; + + // set up array of vertices + std::vector > vertices (n_vertices); + for (unsigned int vertex=0; vertex> x[0] >> x[1] >> x[2]; + + // store vertex + for (unsigned int d=0; d<2; ++d) + vertices[vertex](d) = x[d]; + }; + AssertThrow (in, ExcIO()); + + // do some clean-up on vertices... + delete_unused_vertices (vertices, cells, subcelldata); + // ... and cells + GridReordering<2>::reorder_cells (cells); + tria->create_triangulation (vertices, cells, subcelldata); +} + +#endif // #if deal_II_dimension == 2 + + + +// 3-D XDA meshes +#if deal_II_dimension == 3 + +template <> +void GridIn<3>::read_xda (std::istream &in) +{ + Assert (tria != 0, ExcNoTriangulationSelected()); + AssertThrow (in, ExcIO()); + + static const unsigned int xda_to_dealII_map[] = {0,1,5,4,3,2,6,7}; + + std::string line; + // skip comments at start of file + getline (in, line); + + + unsigned int n_vertices; + unsigned int n_cells; + + // read cells, throw away rest of line + in >> n_cells; + getline (in, line); + + in >> n_vertices; + getline (in, line); + + // ignore following 8 lines + for (unsigned int i=0; i<8; ++i) + getline (in, line); + + // set up array of cells + std::vector > cells (n_cells); + SubCellData subcelldata; + + for (unsigned int cell=0; cell::vertices_per_cell == 8, + ExcInternalError()); + + unsigned int xda_ordered_nodes[8]; + + for (unsigned int i=0; i<8; ++i) + in >> xda_ordered_nodes[i]; + + for (unsigned int i=0; i<8; i++) + cells[cell].vertices[i] = xda_ordered_nodes[xda_to_dealII_map[i]]; + }; + + // set up array of vertices - std::vector > vertices (n_vertices); + std::vector > vertices (n_vertices); for (unsigned int vertex=0; vertex::read_xda (std::istream &in) in >> x[0] >> x[1] >> x[2]; // store vertex - for (unsigned int d=0; d::read_xda (std::istream &in) // do some clean-up on vertices... delete_unused_vertices (vertices, cells, subcelldata); // ... and cells - GridReordering::reorder_cells (cells); + GridReordering<3>::reorder_cells (cells); tria->create_triangulation (vertices, cells, subcelldata); } +#endif // #if deal_II_dimension == 3 +