20 #ifndef OPM_ANISOTROPICEIKONAL_HEADER_INCLUDED 21 #define OPM_ANISOTROPICEIKONAL_HEADER_INCLUDED 23 #include <opm/core/utility/SparseTable.hpp> 28 #include <opm/common/utility/platform_dependent/disable_warnings.h> 30 #include <boost/version.hpp> 32 #define BOOST_HEAP_AVAILABLE ((BOOST_VERSION / 100 % 1000) >= 49) 34 #if BOOST_HEAP_AVAILABLE 35 #include <boost/heap/fibonacci_heap.hpp> 38 #include <opm/common/utility/platform_dependent/reenable_warnings.h> 41 struct UnstructuredGrid;
61 void solve(
const double* metric,
62 const std::vector<int>& startcells,
63 std::vector<double>& solution);
65 #if BOOST_HEAP_AVAILABLE 67 const UnstructuredGrid& grid_;
71 std::vector<char> is_accepted_;
72 std::set<int> accepted_front_;
75 std::vector<double> grid_radius_;
76 std::vector<double> aniso_ratio_;
77 const double safety_factor_;
80 typedef std::pair<double, int> ValueAndCell;
81 typedef boost::heap::compare<std::greater<ValueAndCell>> Comparator;
82 typedef boost::heap::fibonacci_heap<ValueAndCell, Comparator> Heap;
84 typedef Heap::handle_type HeapHandle;
85 std::map<int, HeapHandle> considered_handles_;
86 std::vector<char> is_considered_;
88 bool isClose(
const int c1,
const int c2)
const;
89 double computeValue(
const int cell,
const double* metric,
const double* solution)
const;
90 double computeValueUpdate(
const int cell,
const double* metric,
const double* solution,
const int new_cell)
const;
91 double computeFromLine(
const int cell,
const int from,
const double* metric,
const double* solution)
const;
92 double computeFromTri(
const int cell,
const int n0,
const int n1,
const double* metric,
const double* solution)
const;
94 const ValueAndCell& topConsidered()
const;
95 void pushConsidered(
const ValueAndCell& vc);
98 void computeGridRadius();
99 void computeAnisoRatio(
const double* metric);
100 #endif // BOOST_HEAP_AVAILABLE 106 #endif // OPM_ANISOTROPICEIKONAL_HEADER_INCLUDED AnisotropicEikonal2d(const UnstructuredGrid &grid)
Construct solver.
Definition: AnisotropicEikonal.cpp:449
Definition: AnisotropicEikonal.cpp:446
A solver for the anisotropic eikonal equation: where M(x) is a symmetric positive definite matrix...
Definition: AnisotropicEikonal.hpp:50
void solve(const double *metric, const std::vector< int > &startcells, std::vector< double > &solution)
Solve the eikonal equation.
Definition: AnisotropicEikonal.cpp:454