OGS
NumLib::anonymous_namespace{DOFTableUtil.cpp} Namespace Reference

Functions

template<typename CalculateNorm >
double norm (GlobalVector const &x, unsigned const global_component, LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh, CalculateNorm calculate_norm)
 
double norm1 (GlobalVector const &x, unsigned const global_component, LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh)
 
double norm2 (GlobalVector const &x, unsigned const global_component, LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh)
 
double normInfinity (GlobalVector const &x, unsigned const global_component, LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh)
 

Function Documentation

◆ norm()

template<typename CalculateNorm >
double NumLib::anonymous_namespace{DOFTableUtil.cpp}::norm ( GlobalVector const &  x,
unsigned const  global_component,
LocalToGlobalIndexMap const &  dof_table,
MeshLib::Mesh const &  mesh,
CalculateNorm  calculate_norm 
)

Definition at line 20 of file DOFTableUtil.cpp.

23 {
24 #ifdef USE_PETSC
25  x.setLocalAccessibleVector();
26 #endif
27 
28  double res = 0.0;
29  auto const& ms = dof_table.getMeshSubset(global_component);
30 
31  assert(ms.getMeshID() == mesh.getID());
32  for (MeshLib::Node const* node : ms.getNodes())
33  {
34  auto const value = getNonGhostNodalValue(
35  x, mesh, dof_table, node->getID(), global_component);
36  res = calculate_norm(res, value);
37  }
38  return res;
39 }
double getNonGhostNodalValue(GlobalVector const &x, MeshLib::Mesh const &mesh, NumLib::LocalToGlobalIndexMap const &dof_table, std::size_t const node_id, std::size_t const global_component_id)

References MeshLib::Mesh::getID(), NumLib::LocalToGlobalIndexMap::getMeshSubset(), and NumLib::getNonGhostNodalValue().

◆ norm1()

double NumLib::anonymous_namespace{DOFTableUtil.cpp}::norm1 ( GlobalVector const &  x,
unsigned const  global_component,
LocalToGlobalIndexMap const &  dof_table,
MeshLib::Mesh const &  mesh 
)

Definition at line 41 of file DOFTableUtil.cpp.

43 {
44  double res =
45  norm(x, global_component, dof_table, mesh,
46  [](double res, double value) { return res + std::abs(value); });
47 
48 #ifdef USE_PETSC
49  double global_result = 0.0;
50  MPI_Allreduce(&res, &global_result, 1, MPI_DOUBLE, MPI_SUM,
51  PETSC_COMM_WORLD);
52  res = global_result;
53 #endif
54  return res;
55 }
double norm(GlobalVector const &x, unsigned const global_component, MathLib::VecNormType norm_type, LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh)

References NumLib::norm().

Referenced by NumLib::norm().

◆ norm2()

double NumLib::anonymous_namespace{DOFTableUtil.cpp}::norm2 ( GlobalVector const &  x,
unsigned const  global_component,
LocalToGlobalIndexMap const &  dof_table,
MeshLib::Mesh const &  mesh 
)

Definition at line 57 of file DOFTableUtil.cpp.

59 {
60  double res =
61  norm(x, global_component, dof_table, mesh,
62  [](double res, double value) { return res + value * value; });
63 
64 #ifdef USE_PETSC
65  double global_result = 0.0;
66  MPI_Allreduce(&res, &global_result, 1, MPI_DOUBLE, MPI_SUM,
67  PETSC_COMM_WORLD);
68  res = global_result;
69 #endif
70  return std::sqrt(res);
71 }

References NumLib::norm().

Referenced by NumLib::norm().

◆ normInfinity()

double NumLib::anonymous_namespace{DOFTableUtil.cpp}::normInfinity ( GlobalVector const &  x,
unsigned const  global_component,
LocalToGlobalIndexMap const &  dof_table,
MeshLib::Mesh const &  mesh 
)

Definition at line 73 of file DOFTableUtil.cpp.

76 {
77  double res = norm(x, global_component, dof_table, mesh,
78  [](double res, double value)
79  { return std::max(res, std::abs(value)); });
80 
81 #ifdef USE_PETSC
82  double global_result = 0.0;
83  MPI_Allreduce(&res, &global_result, 1, MPI_DOUBLE, MPI_MAX,
84  PETSC_COMM_WORLD);
85  res = global_result;
86 #endif
87  return res;
88 }

References NumLib::norm().

Referenced by NumLib::norm().