DOLFIN
DOLFIN C++ interface
Loading...
Searching...
No Matches
LocalMeshData.h
1// Copyright (C) 2008 Ola Skavhaug
2//
3// This file is part of DOLFIN.
4//
5// DOLFIN is free software: you can redistribute it and/or modify
6// it under the terms of the GNU Lesser General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// DOLFIN is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU Lesser General Public License for more details.
14//
15// You should have received a copy of the GNU Lesser General Public License
16// along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
17//
18// Modified by Anders Logg, 2008-2009.
19//
20// First added: 2008-11-28
21// Last changed: 2013-02-18
22//
23// Modified by Anders Logg, 2008-2009.
24// Modified by Kent-Andre Mardal, 2011.
25
26#ifndef __LOCAL_MESH_DATA_H
27#define __LOCAL_MESH_DATA_H
28
29#include <cstdint>
30#include <map>
31#include <vector>
32#include <boost/multi_array.hpp>
33#include <dolfin/common/MPI.h>
34#include <dolfin/common/Variable.h>
35#include "CellType.h"
36
37namespace dolfin
38{
39
40 class Mesh;
41
43
57
58 class LocalMeshData : public Variable
59 {
60 public:
61
63 explicit LocalMeshData(const MPI_Comm mpi_comm);
64
66 explicit LocalMeshData(const Mesh& mesh);
67
70
73 void check() const;
74
76 std::string str(bool verbose) const;
77
79 void clear();
80
82 void extract_mesh_data(const Mesh& mesh);
83
86 void broadcast_mesh_data(const MPI_Comm mpi_comm);
87
89 void receive_mesh_data(const MPI_Comm mpi_comm);
90
92 void reorder();
93
95 struct Geometry
96 {
99
101 int dim;
102
105
107 boost::multi_array<double, 2> vertex_coordinates;
108
111 std::vector<std::int64_t> vertex_indices;
112
114 void clear()
115 {
116 dim = -1;
118 vertex_coordinates.resize(boost::extents[0][0]);
119 vertex_indices.clear();
120 }
121
123 void unpack_vertex_coordinates(const std::vector<double>& values);
124 };
125
128
130 struct Topology
131 {
134
136 int dim;
137
139 std::int64_t num_global_cells;
140
143
145 boost::multi_array<std::int64_t, 2> cell_vertices;
146
148 std::vector<std::int64_t> global_cell_indices;
149
151 std::vector<int> cell_partition;
152
154 std::vector<std::size_t> cell_weight;
155
156 // FIXME: this should replace the need for num_vertices_per_cell
157 // and tdim
160
162 void clear()
163 {
164 dim = -1;
165 num_global_cells = -1;
167 cell_vertices.resize(boost::extents[0][0]);
168 global_cell_indices.clear();
169 cell_partition.clear();
170 cell_weight.clear();
171 }
172
174 void unpack_cell_vertices(const std::vector<std::int64_t>& values);
175
176 };
177
180
182 std::map<std::size_t, std::vector<std::pair<std::pair<std::size_t,
183 std::size_t>, std::size_t>>> domain_data;
184
186 MPI_Comm mpi_comm() const
187 { return _mpi_comm.comm(); }
188
189 private:
190
191 // MPI communicator
192 dolfin::MPI::Comm _mpi_comm;
193
194 };
195
196}
197
198#endif
Type
Enum for different cell types.
Definition CellType.h:51
This class stores mesh data on a local processor corresponding to a portion of a (larger) global mesh...
Definition LocalMeshData.h:59
Geometry geometry
Geometry data.
Definition LocalMeshData.h:127
MPI_Comm mpi_comm() const
Return MPI communicator.
Definition LocalMeshData.h:186
std::map< std::size_t, std::vector< std::pair< std::pair< std::size_t, std::size_t >, std::size_t > > > domain_data
Mesh domain data [dim](line, (cell_index, local_index, value))
Definition LocalMeshData.h:183
Topology topology
Holder for topology data.
Definition LocalMeshData.h:179
void broadcast_mesh_data(const MPI_Comm mpi_comm)
Definition LocalMeshData.cpp:171
std::string str(bool verbose) const
Return informal string representation (pretty-print)
Definition LocalMeshData.cpp:69
void clear()
Clear all data.
Definition LocalMeshData.cpp:118
void receive_mesh_data(const MPI_Comm mpi_comm)
Receive mesh data from main process.
Definition LocalMeshData.cpp:251
~LocalMeshData()
Destructor.
Definition LocalMeshData.cpp:55
void check() const
Definition LocalMeshData.cpp:60
void extract_mesh_data(const Mesh &mesh)
Copy data from mesh.
Definition LocalMeshData.cpp:125
void reorder()
Reorder cell data.
Definition LocalMeshData.cpp:327
Definition MPI.h:77
MPI_Comm comm() const
Return the underlying MPI_Comm object.
Definition MPI.cpp:117
Definition Mesh.h:84
Common base class for DOLFIN variables.
Definition Variable.h:36
Definition adapt.h:30
Holder for geometry data.
Definition LocalMeshData.h:96
boost::multi_array< double, 2 > vertex_coordinates
Coordinates for all vertices stored on local processor.
Definition LocalMeshData.h:107
Geometry()
Constructor.
Definition LocalMeshData.h:98
std::vector< std::int64_t > vertex_indices
Definition LocalMeshData.h:111
void unpack_vertex_coordinates(const std::vector< double > &values)
Unpack received vertex coordinates.
Definition LocalMeshData.cpp:295
void clear()
Clear data.
Definition LocalMeshData.h:114
int dim
Geometric dimension.
Definition LocalMeshData.h:101
std::int64_t num_global_vertices
Global number of vertices.
Definition LocalMeshData.h:104
Holder for topology data.
Definition LocalMeshData.h:131
std::vector< std::int64_t > global_cell_indices
Global cell numbers for all cells stored on local processor.
Definition LocalMeshData.h:148
std::vector< std::size_t > cell_weight
Optional weight for each cell for partitioning.
Definition LocalMeshData.h:154
std::int64_t num_global_cells
Global number of cells.
Definition LocalMeshData.h:139
boost::multi_array< std::int64_t, 2 > cell_vertices
Global vertex indices for all cells stored on local processor.
Definition LocalMeshData.h:145
CellType::Type cell_type
Cell type.
Definition LocalMeshData.h:159
void clear()
Clear data.
Definition LocalMeshData.h:162
int dim
Topological dimension.
Definition LocalMeshData.h:136
Topology()
Constructor.
Definition LocalMeshData.h:133
int num_vertices_per_cell
Number of vertices per cell.
Definition LocalMeshData.h:142
void unpack_cell_vertices(const std::vector< std::int64_t > &values)
Unpack received cell vertices.
Definition LocalMeshData.cpp:310
std::vector< int > cell_partition
Optional process owner for each cell in global_cell_indices.
Definition LocalMeshData.h:151