From: Ralf Hartmann Date: Fri, 30 Sep 2005 16:38:27 +0000 (+0000) Subject: GridIn::read_netcdf now also reads boundary markers. X-Git-Tag: v8.0.0~13042 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=947ac31e83c287414c03dc185a3018482edaf78a;p=dealii.git GridIn::read_netcdf now also reads boundary markers. git-svn-id: https://svn.dealii.org/trunk@11561 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 65f2b93e2c..85e78bb77c 100644 --- a/deal.II/deal.II/source/grid/grid_in.cc +++ b/deal.II/deal.II/source/grid/grid_in.cc @@ -1135,7 +1135,97 @@ void GridIn<3>::read_netcdf (const std::string &filename) for (unsigned int i=0; iis_valid(), ExcIO()); + const unsigned int n_markers=marker_dim->size(); + + NcVar *marker_var=nc.get_var("marker"); + AssertThrow(marker_var->is_valid(), ExcIO()); + AssertThrow(marker_var->num_dims()==1, ExcIO()); + AssertThrow(static_cast( + marker_var->get_dim(0)->size())==n_markers, ExcIO()); + + std::vector marker(n_markers); + // use &* to convert + // vector::iterator to int * + marker_var->get(&*marker.begin(), n_markers); + + if (output) + { + std::cout << "marker: "; + for (unsigned int i=0; iis_valid(), ExcIO()); + const unsigned int n_bquads=bquads_dim->size(); + + NcVar *bmarker_var=nc.get_var("boundarymarker_of_surfaces"); + AssertThrow(bmarker_var->is_valid(), ExcIO()); + AssertThrow(bmarker_var->num_dims()==1, ExcIO()); + AssertThrow(static_cast( + bmarker_var->get_dim(0)->size())==n_bquads, ExcIO()); + + std::vector bmarker(n_bquads); + bmarker_var->get(&*bmarker.begin(), n_bquads); + // we only handle boundary + // indicators that fit into an + // unsigned char. Also, we don't + // take 255 as it denotes an + // internal face + for (unsigned int i=0; iis_valid(), ExcIO()); + const unsigned int vertices_per_quad=quad_vertices_dim->size(); + AssertThrow(vertices_per_quad==GeometryInfo::vertices_per_face, ExcIO()); + + NcVar *bvertex_indices_var=nc.get_var("points_of_surfacequadrilaterals"); + AssertThrow(bvertex_indices_var->is_valid(), ExcIO()); + AssertThrow(bvertex_indices_var->num_dims()==2, ExcIO()); + AssertThrow(static_cast( + bvertex_indices_var->get_dim(0)->size())==n_bquads, ExcIO()); + AssertThrow(static_cast( + bvertex_indices_var->get_dim(1)->size())== + GeometryInfo::vertices_per_face, ExcIO()); + + std::vector bvertex_indices(n_bquads*vertices_per_quad); + bvertex_indices_var->get(&*bvertex_indices.begin(), n_bquads, vertices_per_quad); + + if (output) + { + std::cout << "bquads: "; + for (unsigned int i=0; i::vertices_per_face; ++v) + std::cout << bvertex_indices[ + i*GeometryInfo::vertices_per_face+v] << " "; + std::cout << std::endl; + } + } + SubCellData subcelldata; + subcelldata.boundary_quads.resize(n_bquads); + for (unsigned int i=0; i::vertices_per_face; ++v) + subcelldata.boundary_quads[i].vertices[v]=bvertex_indices[ + i*GeometryInfo::vertices_per_face+v]; + subcelldata.boundary_quads[i].material_id=bmarker[i]; + } + GridTools::delete_unused_vertices(vertices, cells, subcelldata); if (switch_y_z) GridReordering::invert_all_cells_of_negative_grid (vertices, cells);