v0.9.2
Files | Functions
Vectors (Vec)

Creating and scattering vectors on the mesh for given problem. More...

Collaboration diagram for Vectors (Vec):

Files

file  VecManager.hpp
 Interface managing vectorsManaging problems, build and partitioning.
 

Functions

MoFEMErrorCode MoFEM::VecManager::vecCreateSeq (const std::string &name, RowColData rc, Vec *V) const
 create local vector for problem More...
 
MoFEMErrorCode MoFEM::VecManager::vecCreateGhost (const std::string &name, RowColData rc, Vec *V) const
 create ghost vector for problem (collective)collective - need to be run on all processors in communicator More...
 
MoFEMErrorCode MoFEM::VecManager::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)User specify what name of field on one problem is scattered to another. More...
 
MoFEMErrorCode MoFEM::VecManager::vecScatterCreate (Vec xin, const std::string &x_problem, RowColData x_rc, Vec yin, const std::string &y_problem, RowColData y_rc, VecScatter *newctx) const
 create scatter for vectors form one to another problem (collective) More...
 
MoFEMErrorCode MoFEM::VecManager::setLocalGhostVector (const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to meshdatabase More...
 
MoFEMErrorCode MoFEM::VecManager::setLocalGhostVector (const std::string &name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to meshdatabase More...
 
MoFEMErrorCode MoFEM::VecManager::setGlobalGhostVector (const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator More...
 
MoFEMErrorCode MoFEM::VecManager::setGlobalGhostVector (const std::string &name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator More...
 
MoFEMErrorCode MoFEM::VecManager::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. More...
 
MoFEMErrorCode MoFEM::VecManager::setOtherLocalGhostVector (const std::string &name, 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. More...
 
MoFEMErrorCode MoFEM::VecManager::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)collective - need tu be run on all processors in communicator. More...
 
MoFEMErrorCode MoFEM::VecManager::setOtherGlobalGhostVector (const std::string &name, 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)collective - need tu be run on all processors in communicator. More...
 

Create vectors

DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::VecCreateSeq (const std::string &name, RowColData rc, Vec *V) const
 create local vector for problem More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::VecCreateGhost (const std::string &name, RowColData rc, Vec *V) const
 create ghost vector for problem (collective)collective - need to be run on all processors in communicator More...
 

Create IS

DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::ISCreateProblemFieldAndRank (const std::string &problem, RowColData rc, const std::string &field, int min_coeff_idx, int max_coeff_idx, IS *is, int verb=-1) const
 create IS for given problem, field and rank range (collective) More...
 

Scatter vectors

DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::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, int verb=-1) const
 create scatter for vectors form one to another problem (collective)User specify what name of field on one problem is scattered to another. More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::VecScatterCreate (Vec xin, const std::string &x_problem, RowColData x_rc, Vec yin, const std::string &y_problem, RowColData y_rc, VecScatter *newctx, int verb=-1) const
 create scatter for vectors form one to another problem (collective) More...
 

Set vector and mesh values

DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_local_ghost_vector (const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to meshdatabase More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_local_ghost_vector (const std::string &name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to meshdatabase More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_global_ghost_vector (const Problem *problem_ptr, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_global_ghost_vector (const std::string &name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode) const
 set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_local_ghost_vector (const Problem *problem_ptr, const std::string &fiel_name, const std::string &cpy_field_name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode, int verb=-1)
 Copy vector to field which is not part of the problem. More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_local_ghost_vector (const std::string &name, const std::string &field_name, const std::string &cpy_field_name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode, int verb=-1)
 Copy vector to field which is not part of the problem. More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_global_ghost_vector (const Problem *problem_ptr, const std::string &field_name, const std::string &cpy_field_name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode, int verb=-1)
 Copy vector to field which is not part of the problem (collective)collective - need tu be run on all processors in communicator. More...
 
DEPRECATED MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_global_ghost_vector (const std::string &name, const std::string &field_name, const std::string &cpy_field_name, RowColData rc, Vec V, InsertMode mode, ScatterMode scatter_mode, int verb=-1)
 Copy vector to field which is not part of the problem (collective)collective - need tu be run on all processors in communicator. More...
 

Detailed Description

Creating and scattering vectors on the mesh for given problem.

Function Documentation

◆ ISCreateProblemFieldAndRank()

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::ISCreateProblemFieldAndRank ( const std::string &  problem,
RowColData  rc,
const std::string &  field,
int  min_coeff_idx,
int  max_coeff_idx,
IS *  is,
int  verb = -1 
) const

create IS for given problem, field and rank range (collective)

Deprecated:
Use ISManager
Parameters
problemname
rcROW or COL
fieldname
min_coeff_idx
max_coeff_idx
Return values
isout value

Definition at line 141 of file DeprecatedCoreInterface.cpp.

143  {
144  return getInterface<ISManager>()->isCreateProblemFieldAndRank(
145  problem, rc, field, min_coeff_idx, max_coeff_idx, is);
146 }

◆ set_global_ghost_vector() [1/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_global_ghost_vector ( const Problem problem_ptr,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator

Deprecated:
use VecManager
Parameters
pointerto porblem struture
RowColDatafor row or column (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 194 of file DeprecatedCoreInterface.cpp.

196  {
197  return getInterface<VecManager>()->setGlobalGhostVector(problem_ptr, rc, V,
198  mode, scatter_mode);
199 }

◆ set_global_ghost_vector() [2/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_global_ghost_vector ( const std::string &  name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator

Deprecated:
use VecManager
Parameters
nameof the problem
RowColDatafor row or column (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 200 of file DeprecatedCoreInterface.cpp.

202  {
203  return getInterface<VecManager>()->setGlobalGhostVector(name, rc, V, mode,
204  scatter_mode);
205 }

◆ set_local_ghost_vector() [1/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_local_ghost_vector ( const Problem problem_ptr,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to meshdatabase

Deprecated:
use VecManager
Parameters
pointerto problem struture
RowColDatafor row or column:e (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities from V vector.

SCATTER_FORWARD set vector V from data field entities

Definition at line 182 of file DeprecatedCoreInterface.cpp.

184  {
185  return getInterface<VecManager>()->setLocalGhostVector(problem_ptr, rc, V,
186  mode, scatter_mode);
187 }

◆ set_local_ghost_vector() [2/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_local_ghost_vector ( const std::string &  name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to meshdatabase

Deprecated:
use VecManager
Parameters
nameof the problem
RowColDatafor row or column:e (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities from V vector.

SCATTER_FORWARD set vector V from data field entities

Definition at line 188 of file DeprecatedCoreInterface.cpp.

190  {
191  return getInterface<VecManager>()->setLocalGhostVector(name, rc, V, mode,
192  scatter_mode);
193 }

◆ set_other_global_ghost_vector() [1/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_global_ghost_vector ( const Problem problem_ptr,
const std::string &  field_name,
const std::string &  cpy_field_name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode,
int  verb = -1 
)

Copy vector to field which is not part of the problem (collective)collective - need tu be run on all processors in communicator.

Deprecated:
use VecManager
Parameters
problem_ptrpointer to problem
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 220 of file DeprecatedCoreInterface.cpp.

223  {
224  return getInterface<VecManager>()->setOtherGlobalGhostVector(
225  problem_ptr, field_name, cpy_field_name, rc, V, mode, scatter_mode);
226 }

◆ set_other_global_ghost_vector() [2/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_global_ghost_vector ( const std::string &  name,
const std::string &  field_name,
const std::string &  cpy_field_name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode,
int  verb = -1 
)

Copy vector to field which is not part of the problem (collective)collective - need tu be run on all processors in communicator.

Deprecated:
use VecManager
Parameters
nameproblem name
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 227 of file DeprecatedCoreInterface.cpp.

230  {
231  return getInterface<VecManager>()->setOtherGlobalGhostVector(
232  name, field_name, cpy_field_name, rc, V, mode, scatter_mode);
233 }

◆ set_other_local_ghost_vector() [1/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_local_ghost_vector ( const Problem problem_ptr,
const std::string &  fiel_name,
const std::string &  cpy_field_name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode,
int  verb = -1 
)

Copy vector to field which is not part of the problem.

Deprecated:
use VecManager
Parameters
pointerto poroblem multi_index
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 206 of file DeprecatedCoreInterface.cpp.

209  {
210  return getInterface<VecManager>()->setOtherLocalGhostVector(
211  problem_ptr, field_name, cpy_field_name, rc, V, mode, scatter_mode);
212 }

◆ set_other_local_ghost_vector() [2/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::set_other_local_ghost_vector ( const std::string &  name,
const std::string &  field_name,
const std::string &  cpy_field_name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode,
int  verb = -1 
)

Copy vector to field which is not part of the problem.

Deprecated:
use VecManager
Parameters
nameproblem name
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 213 of file DeprecatedCoreInterface.cpp.

216  {
217  return getInterface<VecManager>()->setOtherLocalGhostVector(
218  name, field_name, cpy_field_name, rc, V, mode, scatter_mode);
219 }

◆ setGlobalGhostVector() [1/2]

MoFEMErrorCode MoFEM::VecManager::setGlobalGhostVector ( const Problem problem_ptr,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator

Parameters
pointerto porblem struture
RowColDatafor row or column (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 286 of file VecManager.cpp.

288  {
291  DofsByGlobalIdx;
292  DofsByGlobalIdx *dofs;
293  DofIdx nb_dofs;
294  switch (rc) {
295  case ROW:
296  nb_dofs = problem_ptr->getNbDofsRow();
297  dofs = const_cast<DofsByGlobalIdx *>(
298  &problem_ptr->numeredDofsRows->get<PetscGlobalIdx_mi_tag>());
299  break;
300  case COL:
301  nb_dofs = problem_ptr->getNbDofsCol();
302  dofs = const_cast<DofsByGlobalIdx *>(
303  &problem_ptr->numeredDofsCols->get<PetscGlobalIdx_mi_tag>());
304  break;
305  default:
306  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
307  }
308  DofsByGlobalIdx::iterator miit = dofs->lower_bound(0);
309  DofsByGlobalIdx::iterator hi_miit = dofs->upper_bound(nb_dofs);
310  switch (scatter_mode) {
311  case SCATTER_REVERSE: {
312  VecScatter ctx;
313  Vec V_glob;
314  CHKERR VecScatterCreateToAll(V, &ctx, &V_glob);
315  CHKERR VecScatterBegin(ctx, V, V_glob, INSERT_VALUES, SCATTER_FORWARD);
316  CHKERR VecScatterEnd(ctx, V, V_glob, INSERT_VALUES, SCATTER_FORWARD);
317  int size;
318  CHKERR VecGetSize(V_glob, &size);
319  if (size != nb_dofs) {
320  SETERRQ(
321  PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
322  "data inconsistency: nb. of dofs and declared nb. dofs in database");
323  }
324  PetscScalar *array;
325  CHKERR VecGetArray(V_glob, &array);
326  switch (mode) {
327  case INSERT_VALUES:
328  for (; miit != hi_miit; miit++)
329  (*miit)->getFieldData() = array[(*miit)->getPetscGlobalDofIdx()];
330  break;
331  case ADD_VALUES:
332  for (; miit != hi_miit; miit++)
333  (*miit)->getFieldData() += array[(*miit)->getPetscGlobalDofIdx()];
334  break;
335  default:
336  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
337  }
338  CHKERR VecRestoreArray(V_glob, &array);
339  CHKERR VecScatterDestroy(&ctx);
340  CHKERR VecDestroy(&V_glob);
341  break;
342  }
343  default:
344  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
345  }
347 }
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
#define CHKERR
Inline error check.
Definition: definitions.h:602
int DofIdx
Index of DOF.
Definition: Types.hpp:29
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ setGlobalGhostVector() [2/2]

MoFEMErrorCode MoFEM::VecManager::setGlobalGhostVector ( const std::string &  name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to mesh database (collective)collective - need tu be run on all processors in communicator

Parameters
nameof the problem
RowColDatafor row or column (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 350 of file VecManager.cpp.

352  {
353  const MoFEM::Interface &m_field = cOre;
354  const Problem *problem_ptr;
356  CHKERR m_field.get_problem(name, &problem_ptr);
357  CHKERR setGlobalGhostVector(problem_ptr, rc, V, mode, scatter_mode);
359 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
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)collective - need tu be run on all processors ...
Definition: VecManager.cpp:286
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual const Problem * get_problem(const std::string &problem_name) const =0
Get the problem object.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ setLocalGhostVector() [1/2]

MoFEMErrorCode MoFEM::VecManager::setLocalGhostVector ( const Problem problem_ptr,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to meshdatabase

Parameters
pointerto problem struture
RowColDatafor row or column:e (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities from V vector.

SCATTER_FORWARD set vector V from data field entities

Definition at line 184 of file VecManager.cpp.

187  {
190  DofIdx nb_local_dofs, nb_ghost_dofs;
191  switch (rc) {
192  case ROW:
193  nb_local_dofs = problem_ptr->getNbLocalDofsRow();
194  nb_ghost_dofs = problem_ptr->getNbGhostDofsRow();
195  dofs = const_cast<NumeredDofEntityByLocalIdx *>(
196  &problem_ptr->numeredDofsRows->get<PetscLocalIdx_mi_tag>());
197  break;
198  case COL:
199  nb_local_dofs = problem_ptr->getNbLocalDofsCol();
200  nb_ghost_dofs = problem_ptr->getNbGhostDofsCol();
201  dofs = const_cast<NumeredDofEntityByLocalIdx *>(
202  &problem_ptr->numeredDofsCols->get<PetscLocalIdx_mi_tag>());
203  break;
204  default:
205  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
206  }
207  Vec Vlocal;
208  CHKERR VecGhostGetLocalForm(V, &Vlocal);
209  int size;
210  CHKERR VecGetLocalSize(V, &size);
211  if (size != nb_local_dofs) {
212  SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
213  "data inconsistency: check ghost vector, problem with nb. of "
214  "local nodes %d != %d",
215  size, nb_local_dofs);
216  }
217  CHKERR VecGetLocalSize(Vlocal, &size);
218  if (size != nb_local_dofs + nb_ghost_dofs) {
219  SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
220  "data inconsistency: check ghost vector, problem with nb. of "
221  "ghost nodes %d != ",
222  size, nb_local_dofs + nb_ghost_dofs);
223  }
224  NumeredDofEntityByLocalIdx::iterator miit = dofs->lower_bound(0);
225  NumeredDofEntityByLocalIdx::iterator hi_miit =
226  dofs->upper_bound(nb_local_dofs + nb_ghost_dofs);
227  DofIdx ii = 0;
228  switch (scatter_mode) {
229  case SCATTER_FORWARD: {
230  PetscScalar *array;
231  CHKERR VecGetArray(Vlocal, &array);
232  switch (mode) {
233  case INSERT_VALUES:
234  for (; miit != hi_miit; ++miit, ++ii)
235  array[ii] = (*miit)->getFieldData();
236  break;
237  case ADD_VALUES:
238  for (; miit != hi_miit; ++miit, ++ii)
239  array[ii] += (*miit)->getFieldData();
240  break;
241  default:
242  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
243  }
244  CHKERR VecRestoreArray(Vlocal, &array);
245  }; break;
246  case SCATTER_REVERSE: {
247  const PetscScalar *array;
248  CHKERR VecGetArrayRead(Vlocal, &array);
249  switch (mode) {
250  case INSERT_VALUES:
251  for (; miit != hi_miit; ++miit, ++ii) {
252  // std::cerr << *miit << std::endl;
253  // std::cerr << array[ii] << std::endl;
254  (*miit)->getFieldData() = array[ii];
255  }
256  break;
257  case ADD_VALUES:
258  for (; miit != hi_miit; ++miit, ++ii)
259  (*miit)->getFieldData() += array[ii];
260  break;
261  default:
262  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
263  }
264  CHKERR VecRestoreArrayRead(Vlocal, &array);
265  }; break;
266  default:
267  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
268  }
269  CHKERR VecGhostRestoreLocalForm(V, &Vlocal);
271 }
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
NumeredDofEntity_multiIndex::index< PetscLocalIdx_mi_tag >::type NumeredDofEntityByLocalIdx
Numbered DoF multi-index by local index.
#define CHKERR
Inline error check.
Definition: definitions.h:602
int DofIdx
Index of DOF.
Definition: Types.hpp:29
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ setLocalGhostVector() [2/2]

MoFEMErrorCode MoFEM::VecManager::setLocalGhostVector ( const std::string &  name,
RowColData  rc,
Vec  V,
InsertMode  mode,
ScatterMode  scatter_mode 
) const

set values of vector from/to meshdatabase

Parameters
nameof the problem
RowColDatafor row or column:e (i.e. Row,Col)
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities from V vector.

SCATTER_FORWARD set vector V from data field entities

Definition at line 273 of file VecManager.cpp.

276  {
277  const MoFEM::Interface &m_field = cOre;
278  const Problem *problem_ptr;
280  CHKERR m_field.get_problem(name, &problem_ptr);
281  CHKERR setLocalGhostVector(problem_ptr, rc, V, mode, scatter_mode);
283 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
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:184
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual const Problem * get_problem(const std::string &problem_name) const =0
Get the problem object.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ setOtherGlobalGhostVector() [1/2]

MoFEMErrorCode MoFEM::VecManager::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)collective - need tu be run on all processors in communicator.

Parameters
problem_ptrpointer to problem
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 519 of file VecManager.cpp.

522  {
523  const MoFEM::Interface &m_field = cOre;
524  auto fields_ptr = m_field.get_fields();
525  auto dofs_ptr = m_field.get_dofs();
526  auto *field_ents = m_field.get_field_ents();
528  typedef NumeredDofEntityByFieldName DofsByName;
529  DofsByName *dofs;
530  DofIdx nb_dofs;
531  switch (rc) {
532  case ROW:
533  nb_dofs = problem_ptr->getNbDofsRow();
534  dofs = const_cast<DofsByName *>(
535  &problem_ptr->numeredDofsRows->get<FieldName_mi_tag>());
536  break;
537  case COL:
538  nb_dofs = problem_ptr->getNbDofsCol();
539  dofs = const_cast<DofsByName *>(
540  &problem_ptr->numeredDofsCols->get<FieldName_mi_tag>());
541  break;
542  default:
543  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "not implemented");
544  }
545  auto cpy_fit = fields_ptr->get<FieldName_mi_tag>().find(cpy_field_name);
546  if (cpy_fit == fields_ptr->get<FieldName_mi_tag>().end()) {
547  SETERRQ1(PETSC_COMM_SELF, MOFEM_NOT_FOUND,
548  "cpy field < %s > not found, (top tip: check spelling)",
549  cpy_field_name.c_str());
550  }
551  auto miit = dofs->lower_bound(field_name);
552  if (miit == dofs->end()) {
553  SETERRQ1(PETSC_COMM_SELF, MOFEM_NOT_FOUND,
554  "problem field < %s > not found, (top tip: check spelling)",
555  field_name.c_str());
556  }
557  auto hi_miit = dofs->upper_bound(field_name);
558  if ((*miit)->getSpace() != (*cpy_fit)->getSpace()) {
559  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
560  "fields have to have same space");
561  }
562  if ((*miit)->getNbOfCoeffs() != (*cpy_fit)->getNbOfCoeffs()) {
563  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
564  "fields have to have same rank");
565  }
566  switch (scatter_mode) {
567  case SCATTER_REVERSE: {
568  Vec V_glob;
569  VecScatter ctx;
570  CHKERR VecScatterCreateToAll(V, &ctx, &V_glob);
571  CHKERR VecScatterBegin(ctx, V, V_glob, INSERT_VALUES, SCATTER_FORWARD);
572  CHKERR VecScatterEnd(ctx, V, V_glob, INSERT_VALUES, SCATTER_FORWARD);
573  int size;
574  CHKERR VecGetSize(V_glob, &size);
575  if (size != nb_dofs)
576  SETERRQ(
577  PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
578  "data inconsistency: nb. of dofs and declared nb. dofs in database");
579  PetscScalar *array;
580  CHKERR VecGetArray(V_glob, &array);
581 
582  if (mode == INSERT_VALUES)
583  CHKERR SetOtherGlobalGhostVector<INSERT_VALUES>()(
584  dofs_ptr, array, miit, hi_miit, cpy_field_name);
585  else if (mode == ADD_VALUES)
586  CHKERR SetOtherGlobalGhostVector<ADD_VALUES>()(dofs_ptr, array, miit,
587  hi_miit, cpy_field_name);
588  else
589  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
590  "Operation mode not implemented");
591 
592  CHKERR VecRestoreArray(V_glob, &array);
593  CHKERR VecDestroy(&V_glob);
594  CHKERR VecScatterDestroy(&ctx);
595  } break;
596  case SCATTER_FORWARD: {
597  for (; miit != hi_miit; miit++) {
598  auto diiiit =
599  dofs_ptr->get<Composite_Name_And_Ent_And_EntDofIdx_mi_tag>().find(
600  boost::make_tuple(cpy_field_name, (*miit)->getEnt(),
601  (*miit)->getEntDofIdx()));
602  if (diiiit ==
603  dofs_ptr->get<Composite_Name_And_Ent_And_EntDofIdx_mi_tag>().end()) {
604  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
605  "No data to fill the vector (top tip: you want scatter forward "
606  "or scatter reverse?)");
607  }
608  CHKERR VecSetValue(V, (*miit)->getPetscGlobalDofIdx(),
609  (*diiiit)->getFieldData(), mode);
610  }
611  CHKERR VecAssemblyBegin(V);
612  CHKERR VecAssemblyEnd(V);
613  } break;
614  default:
615  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
616  }
618 }
NumeredDofEntity_multiIndex::index< FieldName_mi_tag >::type NumeredDofEntityByFieldName
Numbered DoF multi-index by field name.
Deprecated interface functions.
virtual const DofEntity_multiIndex * get_dofs() const =0
Get the dofs object.
virtual const Field_multiIndex * get_fields() const =0
Get the fields object.
virtual const FieldEntity_multiIndex * get_field_ents() const =0
Get the field ents object.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
#define CHKERR
Inline error check.
Definition: definitions.h:602
int DofIdx
Index of DOF.
Definition: Types.hpp:29
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ setOtherGlobalGhostVector() [2/2]

MoFEMErrorCode MoFEM::VecManager::setOtherGlobalGhostVector ( const std::string &  name,
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)collective - need tu be run on all processors in communicator.

Deprecated:
VecManager
Parameters
nameproblem name
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 620 of file VecManager.cpp.

623  {
624  const MoFEM::Interface &m_field = cOre;
625  const Problem *problem_ptr;
627  CHKERR m_field.get_problem(name, &problem_ptr);
628  CHKERR setOtherGlobalGhostVector(problem_ptr, field_name, cpy_field_name, rc,
629  V, mode, scatter_mode);
631 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual const Problem * get_problem(const std::string &problem_name) const =0
Get the problem object.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413
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)collective - need tu be run on all ...
Definition: VecManager.cpp:519

◆ setOtherLocalGhostVector() [1/2]

MoFEMErrorCode MoFEM::VecManager::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.

Parameters
pointerto problem multi_index
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 390 of file VecManager.cpp.

393  {
394  const MoFEM::Interface &m_field = cOre;
395  auto fields_ptr = m_field.get_fields();
396  auto dofs_ptr = m_field.get_dofs();
399  DofsByName *dofs;
400  switch (rc) {
401  case ROW:
402  dofs = const_cast<DofsByName *>(
403  &problem_ptr->numeredDofsRows->get<FieldName_mi_tag>());
404  break;
405  case COL:
406  dofs = const_cast<DofsByName *>(
407  &problem_ptr->numeredDofsCols->get<FieldName_mi_tag>());
408  break;
409  default:
410  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
411  }
412  Field_multiIndex::index<FieldName_mi_tag>::type::iterator cpy_fit =
413  fields_ptr->get<FieldName_mi_tag>().find(cpy_field_name);
414  if (cpy_fit == fields_ptr->get<FieldName_mi_tag>().end()) {
415  SETERRQ1(PETSC_COMM_SELF, MOFEM_NOT_FOUND,
416  "cpy field < %s > not found, (top tip: check spelling)",
417  cpy_field_name.c_str());
418  }
419  DofsByName::iterator miit = dofs->lower_bound(field_name);
420  if (miit == dofs->end()) {
421  SETERRQ1(PETSC_COMM_SELF, MOFEM_NOT_FOUND,
422  "cpy field < %s > not found, (top tip: check spelling)",
423  field_name.c_str());
424  }
425  DofsByName::iterator hi_miit = dofs->upper_bound(field_name);
426  if ((*miit)->getSpace() != (*cpy_fit)->getSpace()) {
427  SETERRQ4(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
428  "fields have to have same space (%s) %s != (%s) %s",
429  (*miit)->getName().c_str(), FieldSpaceNames[(*miit)->getSpace()],
430  cpy_field_name.c_str(), FieldSpaceNames[(*cpy_fit)->getSpace()]);
431  }
432  if ((*miit)->getNbOfCoeffs() != (*cpy_fit)->getNbOfCoeffs()) {
433  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
434  "fields have to have same rank");
435  }
436 
437  switch (scatter_mode) {
438  case SCATTER_REVERSE: {
439 
440  PetscScalar *array;
441  CHKERR VecGetArray(V, &array);
442  if (mode == INSERT_VALUES)
443  CHKERR SetOtherLocalGhostVector<INSERT_VALUES>()(dofs_ptr, array, miit,
444  hi_miit, cpy_field_name);
445  else if (mode == ADD_VALUES)
446  CHKERR SetOtherLocalGhostVector<ADD_VALUES>()(dofs_ptr, array, miit,
447  hi_miit, cpy_field_name);
448  else
449  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
450  "Operation mode not implemented");
451  CHKERR VecRestoreArray(V, &array);
452  } break;
453  case SCATTER_FORWARD: {
454  for (; miit != hi_miit; miit++) {
455  if (!miit->get()->getHasLocalIndex())
456  continue;
457  DofEntity_multiIndex::index<
458  Composite_Name_And_Ent_And_EntDofIdx_mi_tag>::type::iterator diiiit;
459  diiiit =
460  dofs_ptr->get<Composite_Name_And_Ent_And_EntDofIdx_mi_tag>().find(
461  boost::make_tuple(cpy_field_name, (*miit)->getEnt(),
462  (*miit)->getEntDofIdx()));
463  if (diiiit ==
464  dofs_ptr->get<Composite_Name_And_Ent_And_EntDofIdx_mi_tag>().end()) {
465  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
466  "no data to fill the vector (top tip: you want scatter forward "
467  "or scatter reverse?)");
468  }
469  CHKERR VecSetValue(V, (*miit)->getPetscGlobalDofIdx(),
470  (*diiiit)->getFieldData(), mode);
471  }
472  CHKERR VecAssemblyBegin(V);
473  CHKERR VecAssemblyEnd(V);
474  } break;
475  default:
476  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "not implemented");
477  }
479 }
Deprecated interface functions.
virtual const DofEntity_multiIndex * get_dofs() const =0
Get the dofs object.
virtual const Field_multiIndex * get_fields() const =0
Get the fields object.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
static const char *const FieldSpaceNames[]
Definition: definitions.h:184
#define CHKERR
Inline error check.
Definition: definitions.h:602
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ setOtherLocalGhostVector() [2/2]

MoFEMErrorCode MoFEM::VecManager::setOtherLocalGhostVector ( const std::string &  name,
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.

Parameters
nameproblem name
field_namefield name used for indexing petsc vectors used in the problem
cpy_fieldfield name where data from vector are stored
RowColDatafor row or column
Vvector
modesee petsc manual for VecSetValue (ADD_VALUES or INSERT_VALUES)
scatter_modesee petsc manual for ScatterMode (The available modes are: SCATTER_FORWARD or SCATTER_REVERSE)

SCATTER_REVERSE set data to field entities form V vector.

Definition at line 481 of file VecManager.cpp.

484  {
485  const MoFEM::Interface &m_field = cOre;
486  const Problem *problem_ptr;
488  CHKERR m_field.get_problem(name, &problem_ptr);
489  CHKERR setOtherLocalGhostVector(problem_ptr, field_name, cpy_field_name, rc,
490  V, mode, scatter_mode);
492 }
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:390
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual const Problem * get_problem(const std::string &problem_name) const =0
Get the problem object.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ vecCreateGhost()

MoFEMErrorCode MoFEM::VecManager::vecCreateGhost ( const std::string &  name,
RowColData  rc,
Vec *  V 
) const

create ghost vector for problem (collective)collective - need to be run on all processors in communicator

Parameters
nameproblem name
RowColDataspecify what data is taken from Row, Col or Data
Vecthe vector where data is stored

Definition at line 59 of file VecManager.cpp.

60  {
61  const MoFEM::Interface &m_field = cOre;
62  const Problem *problem_ptr;
64  CHKERR m_field.get_problem(name, &problem_ptr);
65  DofIdx nb_dofs, nb_local_dofs, nb_ghost_dofs;
67  switch (rc) {
68  case ROW:
69  nb_dofs = problem_ptr->getNbDofsRow();
70  nb_local_dofs = problem_ptr->getNbLocalDofsRow();
71  nb_ghost_dofs = problem_ptr->getNbGhostDofsRow();
72  dofs = const_cast<NumeredDofEntityByLocalIdx *>(
73  &problem_ptr->numeredDofsRows->get<PetscLocalIdx_mi_tag>());
74  break;
75  case COL:
76  nb_dofs = problem_ptr->getNbDofsCol();
77  nb_local_dofs = problem_ptr->getNbLocalDofsCol();
78  nb_ghost_dofs = problem_ptr->getNbGhostDofsCol();
79  dofs = const_cast<NumeredDofEntityByLocalIdx *>(
80  &problem_ptr->numeredDofsCols->get<PetscLocalIdx_mi_tag>());
81  break;
82  default:
83  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
84  }
85  // get ghost dofs
86  auto miit = dofs->lower_bound(nb_local_dofs);
87  auto hi_miit = dofs->upper_bound(nb_local_dofs + nb_ghost_dofs);
88  int count = std::distance(miit, hi_miit);
89  if (count != nb_ghost_dofs) {
90  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "data inconsistency");
91  }
92  std::vector<DofIdx> ghost_idx(count);
93  for (auto vit = ghost_idx.begin(); miit != hi_miit; ++miit, ++vit) {
94  *vit = (*miit)->petscGloablDofIdx;
95  }
96  CHKERR ::VecCreateGhost(PETSC_COMM_WORLD, nb_local_dofs, nb_dofs,
97  nb_ghost_dofs, &ghost_idx[0], V);
99 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
NumeredDofEntity_multiIndex::index< PetscLocalIdx_mi_tag >::type NumeredDofEntityByLocalIdx
Numbered DoF multi-index by local index.
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual const Problem * get_problem(const std::string &problem_name) const =0
Get the problem object.
int DofIdx
Index of DOF.
Definition: Types.hpp:29
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ VecCreateGhost()

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::VecCreateGhost ( const std::string &  name,
RowColData  rc,
Vec *  V 
) const

create ghost vector for problem (collective)collective - need to be run on all processors in communicator

Deprecated:
use VecManager
Parameters
nameproblem name
RowColDataspecify what data is taken from Row, Col or Data
Vecthe vector where data is stored

Definition at line 130 of file DeprecatedCoreInterface.cpp.

132  {
133  return getInterface<VecManager>()->vecCreateGhost(name, rc, V);
134 }

◆ vecCreateSeq()

MoFEMErrorCode MoFEM::VecManager::vecCreateSeq ( const std::string &  name,
RowColData  rc,
Vec *  V 
) const

create local vector for problem

Parameters
nameproblem name
RowColDataspecify what data is taken from Row, Col or Data
Vecthe vector where data is stored

Definition at line 36 of file VecManager.cpp.

37  {
38  const MoFEM::Interface &m_field = cOre;
39  const Problem *problem_ptr;
41  CHKERR m_field.get_problem(name, &problem_ptr);
42  DofIdx nb_local_dofs, nb_ghost_dofs;
43  switch (rc) {
44  case ROW:
45  nb_local_dofs = problem_ptr->getNbLocalDofsRow();
46  nb_ghost_dofs = problem_ptr->getNbGhostDofsRow();
47  break;
48  case COL:
49  nb_local_dofs = problem_ptr->getNbLocalDofsCol();
50  nb_ghost_dofs = problem_ptr->getNbGhostDofsCol();
51  break;
52  default:
53  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not implemented");
54  }
55  CHKERR ::VecCreateSeq(PETSC_COMM_SELF, nb_local_dofs + nb_ghost_dofs, V);
57 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
#define CHKERR
Inline error check.
Definition: definitions.h:602
virtual const Problem * get_problem(const std::string &problem_name) const =0
Get the problem object.
int DofIdx
Index of DOF.
Definition: Types.hpp:29
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ VecCreateSeq()

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::VecCreateSeq ( const std::string &  name,
RowColData  rc,
Vec *  V 
) const

create local vector for problem

Deprecated:
use VecManager
Parameters
nameproblem name
RowColDataspecify what data is taken from Row, Col or Data
Vecthe vector where data is stored

Definition at line 125 of file DeprecatedCoreInterface.cpp.

127  {
128  return getInterface<VecManager>()->vecCreateSeq(name, rc, V);
129 }

◆ vecScatterCreate() [1/2]

MoFEMErrorCode MoFEM::VecManager::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)User specify what name of field on one problem is scattered to another.

Parameters
xinvector
x_probleproblem name
x_fieldname
yinvector
y_problemproblem name
y_field_name
Return values
newctxscatter

Definition at line 112 of file VecManager.cpp.

116  {
117  const MoFEM::Interface &m_field = cOre;
119  std::vector<int> idx(0), idy(0);
120  CHKERR m_field.getInterface<ISManager>()
121  ->isCreateFromProblemFieldToOtherProblemField(
122  x_problem, x_field_name, x_rc, y_problem, y_field_name, y_rc, idx,
123  idy);
124  IS ix, iy;
125  CHKERR ISCreateGeneral(PETSC_COMM_WORLD, idx.size(), &idx[0],
126  PETSC_USE_POINTER, &ix);
127  CHKERR ISCreateGeneral(PETSC_COMM_WORLD, idy.size(), &idy[0],
128  PETSC_USE_POINTER, &iy);
129  CHKERR ::VecScatterCreate(xin, ix, yin, iy, newctx);
130  CHKERR ISDestroy(&ix);
131  CHKERR ISDestroy(&iy);
133 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
MoFEMErrorCode getInterface(const MOFEMuuid &uuid, IFACE *&iface) const
Get interface by uuid and return reference to pointer of interface.
#define CHKERR
Inline error check.
Definition: definitions.h:602
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ vecScatterCreate() [2/2]

MoFEMErrorCode MoFEM::VecManager::vecScatterCreate ( Vec  xin,
const std::string &  x_problem,
RowColData  x_rc,
Vec  yin,
const std::string &  y_problem,
RowColData  y_rc,
VecScatter *  newctx 
) const

create scatter for vectors form one to another problem (collective)

Parameters
xinvector
x_probleproblem name
yinvector
y_problemproblem name
Return values
newctxscatter

Definition at line 135 of file VecManager.cpp.

137  {
138  const MoFEM::Interface &m_field = cOre;
140  std::vector<int> idx(0), idy(0);
141  CHKERR m_field.getInterface<ISManager>()->isCreateFromProblemToOtherProblem(
142  x_problem, x_rc, y_problem, y_rc, idx, idy);
143  IS ix, iy;
144  CHKERR ISCreateGeneral(PETSC_COMM_WORLD, idx.size(), &idx[0],
145  PETSC_USE_POINTER, &ix);
146  CHKERR ISCreateGeneral(PETSC_COMM_WORLD, idy.size(), &idy[0],
147  PETSC_USE_POINTER, &iy);
148  if (dEbug) {
149  ISView(ix, PETSC_VIEWER_STDOUT_WORLD);
150  ISView(iy, PETSC_VIEWER_STDOUT_WORLD);
151  }
152  CHKERR ::VecScatterCreate(xin, ix, yin, iy, newctx);
153  CHKERR ISDestroy(&ix);
154  CHKERR ISDestroy(&iy);
156 }
Deprecated interface functions.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:483
const MoFEM::Interface & cOre
Definition: VecManager.hpp:41
MoFEMErrorCode getInterface(const MOFEMuuid &uuid, IFACE *&iface) const
Get interface by uuid and return reference to pointer of interface.
#define CHKERR
Inline error check.
Definition: definitions.h:602
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:413

◆ VecScatterCreate() [1/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::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,
int  verb = -1 
) const

create scatter for vectors form one to another problem (collective)User specify what name of field on one problem is scattered to another.

Deprecated:
use VecManager
Parameters
xinvector
x_probleproblem name
x_fieldname
yinvector
y_problemproblem name
y_field_name
Return values
newctxscatter

Definition at line 166 of file DeprecatedCoreInterface.cpp.

170  {
171  return getInterface<VecManager>()->vecScatterCreate(
172  xin, x_problem, x_field_name, x_rc, yin, y_problem, y_field_name, y_rc,
173  newctx);
174 }

◆ VecScatterCreate() [2/2]

MoFEMErrorCode MoFEM::DeprecatedCoreInterface::VecScatterCreate ( Vec  xin,
const std::string &  x_problem,
RowColData  x_rc,
Vec  yin,
const std::string &  y_problem,
RowColData  y_rc,
VecScatter *  newctx,
int  verb = -1 
) const

create scatter for vectors form one to another problem (collective)

Deprecated:
use VecManager
Parameters
xinvector
x_probleproblem name
yinvector
y_problemproblem name
Return values
newctxscatter

Definition at line 175 of file DeprecatedCoreInterface.cpp.

178  {
179  return getInterface<VecManager>()->vecScatterCreate(xin, x_problem, x_rc, yin,
180  y_problem, y_rc, newctx);
181 }