v0.13.1
VecManager.hpp
Go to the documentation of this file.
1/** \file VecManager.hpp
2 * \brief Interface managing vectors
3 * \ingroup mofem_vectors
4 *
5 * Managing problems, build and partitioning.
6 *
7 */
8
9#ifndef __VECMANAGER_HPP__
10#define __VECMANAGER_HPP__
11
12#include "UnknownInterface.hpp"
13
14namespace MoFEM {
15
16/**
17 * \brief Vector manager is used to create vectors
18 * \mofem_vectors
19 *
20 * Managing Vectors, creation, scatter, etc.
21 *
22 */
24
25 MoFEMErrorCode query_interface(boost::typeindex::type_index type_index,
26 UnknownInterface **iface) const;
27
29 bool dEbug;
30
31 VecManager(const MoFEM::Core &core);
32
33 ~VecManager() = default;
34
35 /** \brief create local vector for problem
36 * \ingroup mofem_vectors
37 *
38 * \param name problem name
39 * \param RowColData specify what data is taken from Row, Col or Data
40 * \param Vec the vector where data is stored
41 */
42 MoFEMErrorCode vecCreateSeq(const std::string name, RowColData rc,
43 Vec *V) const;
44
45 /**
46 * \brief create ghost vector for problem (collective)
47 * \ingroup mofem_vectors
48
49 collective - need to be run on all processors in communicator
50
51 * \param name problem name
52 * \param RowColData specify what data is taken from Row, Col or Data
53 * \param Vec the vector where data is stored
54 */
55 MoFEMErrorCode vecCreateGhost(const std::string name, RowColData rc,
56 Vec *V) const;
57
58 /** @copydoc MoFEM::VecManager::vecCreateGhost
59 */
60 MoFEMErrorCode vecCreateGhost(const std::string name, RowColData rc,
61 SmartPetscObj<Vec> &v_ptr) const;
62
63 /**
64 * \brief create scatter for vectors form one to another problem (collective)
65 * \ingroup mofem_vectors
66 *
67 * User specify what name of field on one problem is scattered to another.
68 *
69 * \ingroup mofem_vectors
70 *
71 * \param xin vector
72 * \param x_proble problem name
73 * \param x_field name
74 * \param yin vector
75 * \param y_problem problem name
76 * \param y_field_name
77 * \retval newctx scatter
78
79 */
80 MoFEMErrorCode vecScatterCreate(Vec xin, const std::string x_problem,
81 const std::string x_field_name,
82 RowColData x_rc, Vec yin,
83 const std::string y_problem,
84 const std::string y_field_name,
85 RowColData y_rc, VecScatter *newctx) const;
86
87 /** @copydoc MoFEM::VecManager::vecScatterCreate
88 */
90 vecScatterCreate(Vec xin, const std::string x_problem,
91 const std::string x_field_name, RowColData x_rc, Vec yin,
92 const std::string y_problem, const std::string y_field_name,
93 RowColData y_rc,
94 SmartPetscObj<VecScatter> &smart_newctx) const;
95
96 /**
97 * \brief create scatter for vectors from one to another problem (collective)
98 * \ingroup mofem_vectors
99 *
100 * \param xin vector
101 * \param x_proble problem name
102 * \param yin vector
103 * \param y_problem problem name
104 * \retval newctx scatter
105
106 */
107 MoFEMErrorCode vecScatterCreate(Vec xin, const std::string x_problem,
108 RowColData x_rc, Vec yin,
109 const std::string y_problem, RowColData y_rc,
110 VecScatter *newctx) const;
111
112 /** @copydoc MoFEM::VecManager::vecScatterCreate
113 */
115 vecScatterCreate(Vec xin, const std::string x_problem, RowColData x_rc,
116 Vec yin, const std::string y_problem, RowColData y_rc,
117 SmartPetscObj<VecScatter> &smart_newctx) const;
118
119 /**
120 * \brief set values of vector from/to meshdatabase
121 * \ingroup mofem_vectors
122 *
123 * \param pointer to problem struture
124 * \param RowColData for row or column:e (i.e. Row,Col)
125 * \param V vector
126 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
127 * \param scatter_mode see petsc manual for ScatterMode (The available modes
128 * are: SCATTER_FORWARD or SCATTER_REVERSE)
129 *
130 * SCATTER_REVERSE set data to field entities from V vector.
131 *
132 * SCATTER_FORWARD set vector V from data field entities
133 *
134 */
136 Vec V, InsertMode mode,
137 ScatterMode scatter_mode) const;
138
139 /**
140 * \brief set values of vector from/to meshdatabase
141 * \ingroup mofem_vectors
142 *
143 * \param name of the problem
144 * \param RowColData for row or column:e (i.e. Row,Col)
145 * \param V vector
146 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
147 * \param scatter_mode see petsc manual for ScatterMode (The available modes
148 * are: SCATTER_FORWARD or SCATTER_REVERSE)
149 *
150 * SCATTER_REVERSE set data to field entities from V vector.
151 *
152 * SCATTER_FORWARD set vector V from data field entities
153 *
154 */
155 MoFEMErrorCode setLocalGhostVector(const std::string name, RowColData rc,
156 Vec V, InsertMode mode,
157 ScatterMode scatter_mode) const;
158
159 /**
160 * \brief set values of vector from/to mesh database (collective)
161 * \ingroup mofem_vectors
162
163 collective - need tu be run on all processors in communicator
164
165 * \param pointer to porblem struture
166 * \param RowColData for row or column (i.e. Row,Col)
167 * \param V vector
168 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
169 * \param scatter_mode see petsc manual for ScatterMode (The available modes
170 are: SCATTER_FORWARD or SCATTER_REVERSE)
171 *
172 * SCATTER_REVERSE set data to field entities form V vector.
173 *
174 */
176 Vec V, InsertMode mode,
177 ScatterMode scatter_mode) const;
178
179 /**
180 * \brief set values of vector from/to mesh database (collective)
181 * \ingroup mofem_vectors
182
183 collective - need tu be run on all processors in communicator
184
185 * \param name of the problem
186 * \param RowColData for row or column (i.e. Row,Col)
187 * \param V vector
188 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
189 * \param scatter_mode see petsc manual for ScatterMode (The available modes
190 are: SCATTER_FORWARD or SCATTER_REVERSE)
191 *
192 * SCATTER_REVERSE set data to field entities form V vector.
193 *
194 */
195 MoFEMErrorCode setGlobalGhostVector(const std::string name, RowColData rc,
196 Vec V, InsertMode mode,
197 ScatterMode scatter_mode) const;
198
199 /**
200 * \brief Copy vector to field which is not part of the problem
201 * \ingroup mofem_vectors
202 *
203 * \param pointer to problem multi_index
204 * \param field_name field name used for indexing petsc vectors used in the
205 * problem \param cpy_field field name where data from vector are stored
206 * \param RowColData for row or column
207 * \param V vector
208 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
209 * \param scatter_mode see petsc manual for ScatterMode (The available modes
210 * are: SCATTER_FORWARD or SCATTER_REVERSE)
211 *
212 * SCATTER_REVERSE set data to field entities form V vector.
213 *
214 */
216 const std::string field_name,
217 const std::string cpy_field_name,
218 RowColData rc, Vec V, InsertMode mode,
219 ScatterMode scatter_mode) const;
220
221 /**
222 * \brief Copy vector to field which is not part of the problem
223 * \ingroup mofem_vectors
224 *
225 * \param name problem name
226 * \param field_name field name used for indexing petsc vectors used in the
227 * problem \param cpy_field field name where data from vector are stored
228 * \param RowColData for row or column
229 * \param V vector
230 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
231 * \param scatter_mode see petsc manual for ScatterMode (The available modes
232 * are: SCATTER_FORWARD or SCATTER_REVERSE)
233 *
234 * SCATTER_REVERSE set data to field entities form V vector.
235 *
236 */
237 MoFEMErrorCode setOtherLocalGhostVector(const std::string name,
238 const std::string field_name,
239 const std::string cpy_field_name,
240 RowColData rc, Vec V, InsertMode mode,
241 ScatterMode scatter_mode) const;
242
243 /** \brief Copy vector to field which is not part of the problem (collective)
244 * \ingroup mofem_vectors
245
246 collective - need tu be run on all processors in communicator
247
248 * \param problem_ptr pointer to problem
249 * \param field_name field name used for indexing petsc vectors used in the
250 problem
251 * \param cpy_field field name where data from vector are stored
252 * \param RowColData for row or column
253 * \param V vector
254 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
255 * \param scatter_mode see petsc manual for ScatterMode (The available modes
256 are: SCATTER_FORWARD or SCATTER_REVERSE)
257 *
258 * SCATTER_REVERSE set data to field entities form V vector.
259 *
260 */
262 const std::string field_name,
263 const std::string cpy_field_name,
264 RowColData rc, Vec V,
265 InsertMode mode,
266 ScatterMode scatter_mode) const;
267
268 /** \deprecated VecManager
269 * \brief Copy vector to field which is not part of the problem (collective)
270 * \ingroup mofem_vectors
271
272 collective - need tu be run on all processors in communicator
273
274 * \param name problem name
275 * \param field_name field name used for indexing petsc vectors used in the
276 problem
277 * \param cpy_field field name where data from vector are stored
278 * \param RowColData for row or column
279 * \param V vector
280 * \param mode see petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
281 * \param scatter_mode see petsc manual for ScatterMode (The available modes
282 are: SCATTER_FORWARD or SCATTER_REVERSE)
283 *
284 * SCATTER_REVERSE set data to field entities form V vector.
285 *
286 */
287 MoFEMErrorCode setOtherGlobalGhostVector(const std::string name,
288 const std::string field_name,
289 const std::string cpy_field_name,
290 RowColData rc, Vec V,
291 InsertMode mode,
292 ScatterMode scatter_mode) const;
293};
294
295} // namespace MoFEM
296
297#endif //__VECMANAGER_HPP__
298
299/**
300 * \defgroup mofem_vectors Vectors (Vec)
301 * \brief Creating and scattering vectors on the mesh for given problem
302 *
303 * \ingroup mofem
304 **/
MoFEM interface.
RowColData
RowColData.
Definition: definitions.h:123
MoFEMErrorCode vecCreateGhost(const std::string name, RowColData rc, Vec *V) const
create ghost vector for problem (collective)
Definition: VecManager.cpp:66
MoFEMErrorCode setOtherLocalGhostVector(const Problem *problem_ptr, const std::string field_name, const std::string cpy_field_name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
Copy vector to field which is not part of the problem.
Definition: VecManager.cpp:416
MoFEMErrorCode setGlobalGhostVector(const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
set values of vector from/to mesh database (collective)
Definition: VecManager.cpp:304
MoFEMErrorCode vecScatterCreate(Vec xin, const std::string x_problem, const std::string x_field_name, RowColData x_rc, Vec yin, const std::string y_problem, const std::string y_field_name, RowColData y_rc, VecScatter *newctx) const
create scatter for vectors form one to another problem (collective)
Definition: VecManager.cpp:131
MoFEMErrorCode vecCreateSeq(const std::string name, RowColData rc, Vec *V) const
create local vector for problem
Definition: VecManager.cpp:40
MoFEMErrorCode setLocalGhostVector(const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
set values of vector from/to meshdatabase
Definition: VecManager.cpp:202
MoFEMErrorCode setOtherGlobalGhostVector(const Problem *problem_ptr, const std::string field_name, const std::string cpy_field_name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
Copy vector to field which is not part of the problem (collective)
Definition: VecManager.cpp:547
const FTensor::Tensor2< T, Dim, Dim > Vec
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
implementation of Data Operators for Forces and Sources
Definition: MoFEM.hpp:24
constexpr auto field_name
Core (interface) class.
Definition: Core.hpp:82
Deprecated interface functions.
keeps basic data about problem
base class for all interface classes
Vector manager is used to create vectors \mofem_vectors.
Definition: VecManager.hpp:23
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
Definition: VecManager.cpp:10
const MoFEM::Interface & cOre
Definition: VecManager.hpp:28
VecManager(const MoFEM::Core &core)
Definition: VecManager.cpp:16
~VecManager()=default