00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef OPM_AUTODIFF_GRIDHELPERS_HEADER_INCLUDED
00022 #define OPM_AUTODIFF_GRIDHELPERS_HEADER_INCLUDED
00023
00024 #include <functional>
00025
00026 #include <opm/core/grid.h>
00027 #include <opm/core/grid/GridHelpers.hpp>
00028
00029 #include <opm/common/utility/platform_dependent/disable_warnings.h>
00030
00031 #include <Eigen/Eigen>
00032 #include <Eigen/Sparse>
00033
00034 #include <boost/range/iterator_range.hpp>
00035
00036 #ifdef HAVE_OPM_GRID
00037 #include <dune/grid/CpGrid.hpp>
00038 #include <dune/grid/cpgrid/GridHelpers.hpp>
00039 #include <dune/grid/polyhedralgrid.hh>
00040 #endif
00041
00042 #include <opm/common/utility/platform_dependent/reenable_warnings.h>
00043
00044
00045 namespace Opm
00046 {
00047
00048 namespace AutoDiffGrid
00049 {
00050
00054 template<class T>
00055 struct ADFaceCellTraits
00056 {
00057 };
00058
00060 Eigen::Array<double, Eigen::Dynamic, 1>
00061 cellCentroidsZToEigen(const UnstructuredGrid& grid);
00062
00064 template<class T>
00065 struct ADCell2FacesTraits
00066 : public Opm::UgGridHelpers::Cell2FacesTraits<T>
00067 {
00068 };
00069
00074 void extractInternalFaces(const UnstructuredGrid& grid,
00075 Eigen::Array<int, Eigen::Dynamic, 1>& internal_faces,
00076 Eigen::Array<int, Eigen::Dynamic, 2, Eigen::RowMajor>& nbi);
00077
00078 }
00079 }
00080
00081 #ifdef HAVE_OPM_GRID
00082 namespace Opm
00083 {
00084
00085 namespace AutoDiffGrid
00086 {
00087
00090 Eigen::Array<double, Eigen::Dynamic, 1>
00091 cellCentroidsZToEigen(const Dune::CpGrid& grid);
00092
00093 template<>
00094 struct ADCell2FacesTraits<Dune::CpGrid>
00095 {
00096 typedef Dune::cpgrid::Cell2FacesContainer Type;
00097 };
00098
00103 void extractInternalFaces(const Dune::CpGrid& grid,
00104 Eigen::Array<int, Eigen::Dynamic, 1>& internal_faces,
00105 Eigen::Array<int, Eigen::Dynamic, 2, Eigen::RowMajor>& nbi);
00106
00107 template<>
00108 struct ADFaceCellTraits<Dune::CpGrid>
00109 : public Opm::UgGridHelpers::FaceCellTraits<Dune::CpGrid>
00110 {};
00112 ADFaceCellTraits<Dune::CpGrid>::Type
00113 faceCellsToEigen(const Dune::CpGrid& grid);
00114 }
00115 }
00116
00117 #endif
00118 namespace Opm
00119 {
00120 namespace AutoDiffGrid
00121 {
00122
00123 using Opm::UgGridHelpers::SparseTableView;
00124 using Opm::UgGridHelpers::numCells;
00125 using Opm::UgGridHelpers::faceCells;
00126 using Opm::UgGridHelpers::numFaces;
00127 using Opm::UgGridHelpers::dimensions;
00128 using Opm::UgGridHelpers::cartDims;
00129 using Opm::UgGridHelpers::globalCell;
00130 using Opm::UgGridHelpers::cell2Faces;
00131 using Opm::UgGridHelpers::increment;
00132 using Opm::UgGridHelpers::getCoordinate;
00133 using Opm::UgGridHelpers::numCellFaces;
00134 using Opm::UgGridHelpers::beginFaceCentroids;
00135 using Opm::UgGridHelpers::beginCellCentroids;
00136 using Opm::UgGridHelpers::cellCentroid;
00137 using Opm::UgGridHelpers::faceCentroid;
00138 using Opm::UgGridHelpers::beginCellVolumes;
00139 using Opm::UgGridHelpers::cellVolume;
00140
00141 template<>
00142 struct ADFaceCellTraits<UnstructuredGrid>
00143 {
00144 typedef Eigen::Array<int, Eigen::Dynamic, 2, Eigen::RowMajor> Type;
00145 };
00146
00147 #ifdef HAVE_OPM_GRID
00148
00149 template< int dim, int dimworld >
00150 struct ADFaceCellTraits< Dune::PolyhedralGrid< dim, dimworld > >
00151 : public ADFaceCellTraits<UnstructuredGrid>
00152 {
00153 };
00154 #endif
00155
00156
00158 ADFaceCellTraits<UnstructuredGrid>::Type
00159 faceCellsToEigen(const UnstructuredGrid& grid);
00160
00161 }
00162 }
00163
00164 #endif