/* Copyright 2013 SINTEF ICT, Applied Mathematics. This file is part of the Open Porous Media project (OPM). OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OPM. If not, see . */ #ifndef OPM_GEOPROPS_HEADER_INCLUDED #define OPM_GEOPROPS_HEADER_INCLUDED #include #include #include namespace Opm { /// Class containing static geological properties that are /// derived from grid and petrophysical properties: /// - pore volume /// - transmissibilities /// - gravity potentials class DerivedGeology { public: typedef Eigen::ArrayXd Vector; /// Construct contained derived geological properties /// from grid and property information. template DerivedGeology(const UnstructuredGrid& grid, const Props& props , const double* grav = 0) : pvol_ (grid.number_of_cells) , trans_(grid.number_of_faces) , gpot_ (Vector::Zero(grid.cell_facepos[ grid.number_of_cells ], 1)) , z_(grid.number_of_cells) { // Pore volume const typename Vector::Index nc = grid.number_of_cells; std::transform(grid.cell_volumes, grid.cell_volumes + nc, props.porosity(), pvol_.data(), std::multiplies()); // Transmissibility Vector htrans(grid.cell_facepos[nc]); UnstructuredGrid* ug = const_cast(& grid); tpfa_htrans_compute(ug, props.permeability(), htrans.data()); tpfa_trans_compute (ug, htrans.data() , trans_.data()); // Compute z coordinates for (int c = 0; c