BEM++  2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
accuracy_options.hpp
1 // Copyright (C) 2011-2012 by the BEM++ Authors
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
9 //
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
12 //
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 // THE SOFTWARE.
20 
21 #ifndef fiber_accuracy_options_hpp
22 #define fiber_accuracy_options_hpp
23 
24 #include "../common/common.hpp"
25 
26 #include "quadrature_options.hpp"
27 
28 #include <limits>
29 #include <utility>
30 #include <vector>
31 
32 namespace Fiber
33 {
34 
39 {
40 public:
50 };
51 
54 {
55 public:
61 
69  AccuracyOptionsEx(const AccuracyOptions& oldStyleOpts);
70 
73  const QuadratureOptions& singleRegular() const;
74 
89  const QuadratureOptions& singleRegular(double normalizedDistance) const;
90 
100  void setSingleRegular(int accuracyOrder, bool relativeToDefault = true);
101 
121  void setSingleRegular(double maxNormalizedDistance1, int accuracyOrder1,
122  int accuracyOrder2, bool relativeToDefault = true);
123 
145  void setSingleRegular(double maxNormalizedDistance1, int accuracyOrder1,
146  double maxNormalizedDistance2, int accuracyOrder2,
147  int accuracyOrder3, bool relativeToDefault = true);
148 
172  void setSingleRegular(double maxNormalizedDistance1, int accuracyOrder1,
173  double maxNormalizedDistance2, int accuracyOrder2,
174  double maxNormalizedDistance3, int accuracyOrder3,
175  int accuracyOrder4, bool relativeToDefault = true);
176 
202  void setSingleRegular(double maxNormalizedDistance1, int accuracyOrder1,
203  double maxNormalizedDistance2, int accuracyOrder2,
204  double maxNormalizedDistance3, int accuracyOrder3,
205  double maxNormalizedDistance4, int accuracyOrder4,
206  int accuracyOrder5, bool relativeToDefault = true);
207 
208  void setSingleRegular(const std::vector<double>& maxNormalizedDistances,
209  const std::vector<int>& accuracyOrders,
210  bool relativeToDefault = true);
211 
221  const QuadratureOptions& doubleRegular(double normalizedDistance) const;
222 
232  void setDoubleRegular(int accuracyOrder, bool relativeToDefault = true);
233 
251  void setDoubleRegular(double maxNormalizedDistance1, int accuracyOrder1,
252  int accuracyOrder2, bool relativeToDefault = true);
253 
273  void setDoubleRegular(double maxNormalizedDistance1, int accuracyOrder1,
274  double maxNormalizedDistance2, int accuracyOrder2,
275  int accuracyOrder3, bool relativeToDefault = true);
276 
298  void setDoubleRegular(double maxNormalizedDistance1, int accuracyOrder1,
299  double maxNormalizedDistance2, int accuracyOrder2,
300  double maxNormalizedDistance3, int accuracyOrder3,
301  int accuracyOrder4, bool relativeToDefault = true);
302 
326  void setDoubleRegular(double maxNormalizedDistance1, int accuracyOrder1,
327  double maxNormalizedDistance2, int accuracyOrder2,
328  double maxNormalizedDistance3, int accuracyOrder3,
329  double maxNormalizedDistance4, int accuracyOrder4,
330  int accuracyOrder5, bool relativeToDefault = true);
331 
332  void setDoubleRegular(const std::vector<double>& maxNormalizedDistances,
333  const std::vector<int>& accuracyOrders,
334  bool relativeToDefault = true);
335 
338  const QuadratureOptions& doubleSingular() const;
339 
348  void setDoubleSingular(int accuracyOrder, bool relativeToDefault = true);
349 
350 private:
352  std::vector<std::pair<double, QuadratureOptions> > m_singleRegular;
353  std::vector<std::pair<double, QuadratureOptions> > m_doubleRegular;
354  QuadratureOptions m_doubleSingular;
356 };
357 
358 } // namespace Fiber
359 
360 #endif
QuadratureOptions doubleSingular
Options controlling integration of singular functions on pairs of elements.
Definition: accuracy_options.hpp:49
void setSingleRegular(int accuracyOrder, bool relativeToDefault=true)
Set the options controlling integration of functions on single elements.
Definition: accuracy_options.cpp:86
QuadratureOptions doubleRegular
Options controlling integration of regular functions on pairs of elements.
Definition: accuracy_options.hpp:46
QuadratureOptions singleRegular
Options controlling integration of regular functions on single elements.
Definition: accuracy_options.hpp:43
Old-style options controlling quadrature accuracy.
Definition: accuracy_options.hpp:38
const QuadratureOptions & doubleRegular(double normalizedDistance) const
Return the options controlling integration of regular functions on pairs of elements.
Definition: accuracy_options.cpp:202
New-style options controlling quadrature accuracy.
Definition: accuracy_options.hpp:53
const QuadratureOptions & doubleSingular() const
Return the options controlling integration of singular functions on pairs of elements.
Definition: accuracy_options.cpp:329
const QuadratureOptions & singleRegular() const
Return the options controlling integration of regular functions on single elements.
Definition: accuracy_options.cpp:70
Options controlling the order of numerical quadrature.
Definition: quadrature_options.hpp:36
AccuracyOptionsEx()
Constructor.
Definition: accuracy_options.cpp:53
void setDoubleSingular(int accuracyOrder, bool relativeToDefault=true)
Set the options controlling integration of singular functions on pairs of elements.
Definition: accuracy_options.cpp:334
void setDoubleRegular(int accuracyOrder, bool relativeToDefault=true)
Set the options controlling integration of regular functions on pairs of elements.
Definition: accuracy_options.cpp:213