MeshKernel
Orthogonalizer.hpp
1 //---- GPL ---------------------------------------------------------------------
2 //
3 // Copyright (C) Stichting Deltares, 2011-2021.
4 //
5 // This program is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation version 3.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 //
17 // contact: delft3d.support@deltares.nl
18 // Stichting Deltares
19 // P.O. Box 177
20 // 2600 MH Delft, The Netherlands
21 //
22 // All indications and logos of, and references to, "Delft3D" and "Deltares"
23 // are registered trademarks of Stichting Deltares, and remain the property of
24 // Stichting Deltares. All rights reserved.
25 //
26 //------------------------------------------------------------------------------
27 
28 #pragma once
29 
30 #include <vector>
31 
32 #include "MeshKernel/Definitions.hpp"
33 
34 namespace meshkernel
35 {
36  class Mesh2D;
37 
42  {
43 
44  public:
46  explicit Orthogonalizer(Mesh2D& mesh);
47 
49  void Compute();
50 
55  [[nodiscard]] double GetWeight(UInt node, UInt connectedNode) const
56  {
57  return m_weights[node][connectedNode];
58  }
59 
64  [[nodiscard]] double GetRightHandSide(UInt node, UInt connectedNode) const
65  {
66  return m_rhs[node][connectedNode];
67  }
68 
69  private:
73  bool AspectRatio(const Mesh2D& mesh);
74 
75  Mesh2D& m_mesh;
76  std::vector<double> m_aspectRatios;
77  std::vector<std::vector<double>> m_weights;
78  std::vector<std::vector<double>> m_rhs;
79  };
80 } // namespace meshkernel
meshkernel::Orthogonalizer::GetWeight
double GetWeight(UInt node, UInt connectedNode) const
Gets the weight for a certain node and connected node.
Definition: Orthogonalizer.hpp:55
meshkernel::Mesh2D
A class derived from Mesh, which describes unstructures 2d meshes.
Definition: Mesh2D.hpp:55
meshkernel::Orthogonalizer
Orthogonalizion (optimize the aspect ratios) and mesh smoothing (optimize internal face angles or are...
Definition: Orthogonalizer.hpp:41
meshkernel::Orthogonalizer::Orthogonalizer
Orthogonalizer(Mesh2D &mesh)
Constructor.
meshkernel
Contains the logic of the C++ static library.
Definition: AveragingInterpolation.hpp:36
meshkernel::UInt
std::uint32_t UInt
Integer type used when indexing mesh graph entities.
Definition: Definitions.hpp:38
meshkernel::Orthogonalizer::GetRightHandSide
double GetRightHandSide(UInt node, UInt connectedNode) const
Gets the weight for a certain node and connected node.
Definition: Orthogonalizer.hpp:64
meshkernel::Orthogonalizer::Compute
void Compute()
Computes the smoother weights and the right hans side.