opm-common
RigEclipseWellLogExtractor.hpp
1 //
3 // Copyright (C) Statoil ASA
4 // Copyright (C) Ceetron Solutions AS
5 //
6 // ResInsight is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
12 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 // FITNESS FOR A PARTICULAR PURPOSE.
14 //
15 // See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
16 // for more details.
17 //
19 
20 #pragma once
21 
22 #include <external/resinsight/ReservoirDataModel/RigWellLogExtractor.h>
23 #include <external/resinsight/LibGeometry/cvfBoundingBoxTree.h>
24 #include <opm/input/eclipse/EclipseState/Grid/EclipseGrid.hpp>
25 #include <opm/input/eclipse/Schedule/ScheduleGrid.hpp>
26 
27 namespace Opm {
28 class EclipseGrid;
29 class ScheduleGrid;
30 }
31 
32 namespace external {
33 
34 class RigEclipseCaseData;
35 class RigWellPath;
36 class RigResultAccessor;
37 
38 namespace cvf
39 {
40 class BoundingBox;
41 }
42 
43 
44 //==================================================================================================
46 //==================================================================================================
47 class RigEclipseWellLogExtractor : public RigWellLogExtractor
48 {
49 public:
50  RigEclipseWellLogExtractor( const RigWellPath* wellpath, const Opm::EclipseGrid& grid, cvf::ref<cvf::BoundingBoxTree>& cellSearchTree);
51 
52  cvf::ref<cvf::BoundingBoxTree> getCellSearchTree();
53 private:
54  void calculateIntersection();
55  std::vector<size_t> findCloseCellIndices( const cvf::BoundingBox& bb );
56  cvf::Vec3d
57  calculateLengthInCell( size_t cellIndex, const cvf::Vec3d& startPoint, const cvf::Vec3d& endPoint ) const override;
58 
59  cvf::Vec3d calculateLengthInCell( const std::array<cvf::Vec3d, 8>& hexCorners,
60  const cvf::Vec3d& startPoint,
61  const cvf::Vec3d& endPoint ) const;
62 
63  void hexCornersOpmToResinsight( cvf::Vec3d hexCorners[8],
64  size_t cellIndex ) const;
65 
66  void findCellLocalXYZ( const std::array<cvf::Vec3d, 8>& hexCorners,
67  cvf::Vec3d& localXdirection,
68  cvf::Vec3d& localYdirection,
69  cvf::Vec3d& localZdirection ) const;
70  void buildCellSearchTree();
71  void findIntersectingCells( const cvf::BoundingBox& inputBB, std::vector<size_t>* cellIndices ) const;
72  void computeCachedData();
73 
74  const Opm::EclipseGrid& m_grid;
75  cvf::ref<cvf::BoundingBoxTree> m_cellSearchTree;
76 };
77 } //namespace external
Definition: RigEclipseWellLogExtractor.cpp:42
About cell information and dimension: The actual grid information is held in a pointer to an ERT ecl_...
Definition: EclipseGrid.hpp:62
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Definition: RigEclipseWellLogExtractor.hpp:47