jacobi.template
par_geom.h
Go to the documentation of this file.
1 #ifndef PAR_GEOM_FILE
2 #define PAR_GEOM_FILE
3 #include "geom.h"
4 #include "vdop.h"
5 #include <array>
6 #include <functional> // function; C++11
7 #include <iostream>
8 #include <map>
9 #include <memory> // shared_ptr
10 #include <mpi.h> // MPI
11 #include <string>
12 #include <vector>
13 
14 class ParMesh: public Mesh
15 {
16 public:
26  explicit ParMesh(int ndim, int nvert_e = 0, int ndof_e = 0, int nedge_e = 0, MPI_Comm const &icomm = MPI_COMM_WORLD);
27 
28  ParMesh(ParMesh const &) = default;
29 
30  ParMesh &operator=(ParMesh const &) = delete;
31 
32 
39  virtual ~ParMesh();
40 
48  explicit ParMesh(std::string const &sname, MPI_Comm const &icomm = MPI_COMM_WORLD);
49 
50  void VecAccu(std::vector<double> &w) const;
51 
57  double dscapr(std::vector<double> const &x, std::vector<double> const &y) const
58  {
59  return par_scalar(x, y, _icomm);
60  }
61 
73  void Visualize(std::vector<double> const &v) const override;
74 
75 private:
83  std::vector<int> ReadElementSubdomains(std::string const &dname);
84 
85 
92  void Transform_Local2Global_Vertex(int myrank, std::vector<int> const &t2d);
93 
94 
98  void Generate_VectorAdd();
99 
100  bool CheckInterfaceExchange_InPlace() const;
101  bool CheckInterfaceExchange() const;
102  bool CheckInterfaceAdd_InPlace() const;
103  bool CheckInterfaceAdd() const;
104 
105 
106 public:
111  int MyRank() const
112  {
113  return _myrank;
114  }
115 
120  int NumProcs() const
121  {
122  return _numprocs;
123  }
124 
128  MPI_Comm GetCommunicator() const
129  {
130  return _icomm;
131  }
132 
133 private:
134  // Don't use &_icomm ==> Error
135  MPI_Comm const _icomm;
136  int _numprocs;
137  int _myrank;
138  std::vector<int> _v_l2g;
139  std::vector<int> _t_l2g;
140  std::map<int, int> _v_g2l;
141  std::map<int, int> _t_g2l;
142 
143  //std::vector<int> e_l2g; //!< edges: local to global mapping
144 
145  std::vector<int> _valence;
146  // MPI_Alltoallv needs:
147  mutable std::vector<double> _sendbuf;
148  std::vector<int> _sendcounts;
149  std::vector<int> _sdispls;
150  //
151  // We need to map the interface vertices onto the sendbuffer:
152  std::vector<int> _loc_itf;
153  std::vector<int> _gloc_itf;
154  std::vector<int> _buf2loc;
155 
156 
157 };
158 
159 
160 #endif
ParMesh::ReadElementSubdomains
std::vector< int > ReadElementSubdomains(std::string const &dname)
Definition: par_geom.cpp:74
ParMesh::_sdispls
std::vector< int > _sdispls
offset of data to send to each MPI rank wrt. _senbuffer (the same as for recv)
Definition: par_geom.h:149
ParMesh::CheckInterfaceExchange
bool CheckInterfaceExchange() const
Definition: par_geom.cpp:405
ParMesh::Visualize
void Visualize(std::vector< double > const &v) const override
Definition: par_geom.cpp:549
ParMesh::_icomm
const MPI_Comm _icomm
MPI communicator for the group of processes.
Definition: par_geom.h:135
ParMesh::CheckInterfaceExchange_InPlace
bool CheckInterfaceExchange_InPlace() const
Definition: par_geom.cpp:376
ParMesh::_valence
std::vector< int > _valence
valence of local vertices, i.e. number of subdomains they belong to
Definition: par_geom.h:145
ParMesh::_sendcounts
std::vector< int > _sendcounts
number of data to send to each MPI rank (the same as for recv)
Definition: par_geom.h:148
ParMesh::dscapr
double dscapr(std::vector< double > const &x, std::vector< double > const &y) const
Definition: par_geom.h:57
Mesh
Definition: geom.h:13
ParMesh::_t_g2l
std::map< int, int > _t_g2l
triangles: global to local mapping
Definition: par_geom.h:141
ParMesh::GetCommunicator
MPI_Comm GetCommunicator() const
Definition: par_geom.h:128
v
v
Definition: ascii_read_meshvector.m:40
ParMesh::_loc_itf
std::vector< int > _loc_itf
local index of interface vertex lk
Definition: par_geom.h:152
ParMesh::_t_l2g
std::vector< int > _t_l2g
triangles: local to global mapping
Definition: par_geom.h:139
ParMesh::NumProcs
int NumProcs() const
Definition: par_geom.h:120
par_scalar
double par_scalar(vector< double > const &x, vector< double > const &y, MPI_Comm const &icomm)
Definition: vdop.cpp:77
ParMesh::_v_g2l
std::map< int, int > _v_g2l
vertices: global to local mapping
Definition: par_geom.h:140
ParMesh::_gloc_itf
std::vector< int > _gloc_itf
global index of interface vertex lk
Definition: par_geom.h:153
vdop.h
ParMesh::CheckInterfaceAdd
bool CheckInterfaceAdd() const
Definition: par_geom.cpp:473
ParMesh::_numprocs
int _numprocs
number of MPI processes
Definition: par_geom.h:136
ndim
ndim
Definition: ascii_read_meshvector.m:23
geom.h
ParMesh::_buf2loc
std::vector< int > _buf2loc
local indices of sendbuffer positions (the same as for recv)
Definition: par_geom.h:154
ParMesh::VecAccu
void VecAccu(std::vector< double > &w) const
Definition: par_geom.cpp:516
ParMesh::_myrank
int _myrank
my MPI rank
Definition: par_geom.h:137
ParMesh::_v_l2g
std::vector< int > _v_l2g
vertices: local to global mapping
Definition: par_geom.h:138
ParMesh::operator=
ParMesh & operator=(ParMesh const &)=delete
ParMesh::MyRank
int MyRank() const
Definition: par_geom.h:111
ParMesh::Transform_Local2Global_Vertex
void Transform_Local2Global_Vertex(int myrank, std::vector< int > const &t2d)
Definition: par_geom.cpp:105
ParMesh
Definition: par_geom.h:14
ParMesh::Generate_VectorAdd
void Generate_VectorAdd()
Definition: par_geom.cpp:191
ParMesh::CheckInterfaceAdd_InPlace
bool CheckInterfaceAdd_InPlace() const
Definition: par_geom.cpp:437
nvert_e
nvert_e
Definition: ascii_write_mesh.m:26
ParMesh::ParMesh
ParMesh(int ndim, int nvert_e=0, int ndof_e=0, int nedge_e=0, MPI_Comm const &icomm=MPI_COMM_WORLD)
Definition: par_geom.cpp:21
ParMesh::_sendbuf
std::vector< double > _sendbuf
send buffer a n d receiving buffer (MPI_IN_PLACE)
Definition: par_geom.h:147
ParMesh::~ParMesh
virtual ~ParMesh()
Definition: par_geom.cpp:32