jacobi.template
Loading...
Searching...
No Matches
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
14class ParMesh: public Mesh
15{
16public:
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
75private:
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
101 bool CheckInterfaceExchange() const;
102 bool CheckInterfaceAdd_InPlace() const;
103 bool CheckInterfaceAdd() const;
104
105
106public:
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
133private:
134 // Don't use &_icomm ==> Error
135 MPI_Comm const _icomm;
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
Definition geom.h:14
void Generate_VectorAdd()
Definition par_geom.cpp:191
void Visualize(std::vector< double > const &v) const override
Definition par_geom.cpp:549
std::vector< int > _v_l2g
vertices: local to global mapping
Definition par_geom.h:138
int _numprocs
number of MPI processes
Definition par_geom.h:136
MPI_Comm const _icomm
MPI communicator for the group of processes.
Definition par_geom.h:135
std::vector< int > _sendcounts
number of data to send to each MPI rank (the same as for recv)
Definition par_geom.h:148
bool CheckInterfaceAdd_InPlace() const
Definition par_geom.cpp:437
bool CheckInterfaceExchange() const
Definition par_geom.cpp:405
std::vector< int > _gloc_itf
global index of interface vertex lk
Definition par_geom.h:153
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
std::vector< int > ReadElementSubdomains(std::string const &dname)
Definition par_geom.cpp:74
double dscapr(std::vector< double > const &x, std::vector< double > const &y) const
Definition par_geom.h:57
std::map< int, int > _v_g2l
vertices: global to local mapping
Definition par_geom.h:140
bool CheckInterfaceExchange_InPlace() const
Definition par_geom.cpp:376
ParMesh & operator=(ParMesh const &)=delete
virtual ~ParMesh()
Definition par_geom.cpp:32
std::vector< double > _sendbuf
send buffer a n d receiving buffer (MPI_IN_PLACE)
Definition par_geom.h:147
ParMesh(ParMesh const &)=default
int _myrank
my MPI rank
Definition par_geom.h:137
std::vector< int > _loc_itf
local index of interface vertex lk
Definition par_geom.h:152
int MyRank() const
Definition par_geom.h:111
std::map< int, int > _t_g2l
triangles: global to local mapping
Definition par_geom.h:141
void VecAccu(std::vector< double > &w) const
Definition par_geom.cpp:516
int NumProcs() const
Definition par_geom.h:120
std::vector< int > _t_l2g
triangles: local to global mapping
Definition par_geom.h:139
bool CheckInterfaceAdd() const
Definition par_geom.cpp:473
MPI_Comm GetCommunicator() const
Definition par_geom.h:128
std::vector< int > _valence
valence of local vertices, i.e. number of subdomains they belong to
Definition par_geom.h:145
void Transform_Local2Global_Vertex(int myrank, std::vector< int > const &t2d)
Definition par_geom.cpp:105
std::vector< int > _buf2loc
local indices of sendbuffer positions (the same as for recv)
Definition par_geom.h:154
double par_scalar(vector< double > const &x, vector< double > const &y, MPI_Comm const &icomm)
Definition vdop.cpp:77