1#ifndef VIENNASHE_UTIL_DUMP_DEVICE_MESH_HPP
2#define VIENNASHE_UTIL_DUMP_DEVICE_MESH_HPP
20#include "viennagrid/forwards.hpp"
27 template <
typename DeviceT,
typename IndexT >
32 typedef typename DeviceT::mesh_type MeshType;
33 typedef typename viennagrid::result_of::point<MeshType>::type PointType;
34 typedef typename viennagrid::result_of::cell<MeshType>::type CellType;
36 typedef typename viennagrid::result_of::const_vertex_range<MeshType>::type VertexContainer;
37 typedef typename viennagrid::result_of::const_cell_range<MeshType>::type CellContainer;
39 typedef typename viennagrid::result_of::const_vertex_range<CellType>::type VertexOnCellContainer;
40 typedef typename viennagrid::result_of::iterator<VertexOnCellContainer>::type VertexOnCellIterator;
42 if (vertices == 0)
throw std::invalid_argument(
"vertices = NULL !");
43 if (cells == 0)
throw std::invalid_argument(
"cells = NULL !");
47 const size_t dim = PointType::dim;
50 num_vertices =
static_cast<IndexT
>(grid_vertices.size());
51 num_cells =
static_cast<IndexT
>(grid_cells.size());
54 for (std::size_t i = 0; i < grid_vertices.size(); ++i)
56 for (std::size_t j = 0; j < dim; ++j) vertices[i][j] = viennagrid::point(grid_vertices[i])[j];
60 for (std::size_t i = 0; i < grid_cells.size(); ++i)
62 VertexOnCellContainer vertices_on_cell(grid_cells[i]);
64 for (VertexOnCellIterator vit = vertices_on_cell.begin(); vit != vertices_on_cell.end(); ++vit, ++j)
66 cells[i][j] =
static_cast<IndexT
>(vit->id().get());
MeshT const & mesh() const
Returns the underlying mesh.
Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and highe...
Contains the definition of a device class independent of the actual macroscopic model to be solved.
Contains forward declarations and definition of small classes that must be defined at an early stage.
void dump_mesh(DeviceT const &device, double **vertices, IndexT &num_vertices, IndexT **cells, IndexT &num_cells)
The main ViennaSHE namespace. All functionality resides inside this namespace.