From 5e04ec1448aec71f8e61fdf478db2bb59bd1db74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atgeirr=20Fl=C3=B8=20Rasmussen?= Date: Thu, 6 Dec 2012 10:18:57 +0100 Subject: [PATCH] Modify precision for quadrature depending on use of CVI method. --- .../transport/reorder/TransportModelTracerTofDiscGal.cpp | 9 ++++++++- .../transport/reorder/TransportModelTracerTofDiscGal.hpp | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/opm/core/transport/reorder/TransportModelTracerTofDiscGal.cpp b/opm/core/transport/reorder/TransportModelTracerTofDiscGal.cpp index 073018bfa..f65fe91dc 100644 --- a/opm/core/transport/reorder/TransportModelTracerTofDiscGal.cpp +++ b/opm/core/transport/reorder/TransportModelTracerTofDiscGal.cpp @@ -133,6 +133,12 @@ namespace Opm coord_(grid.dimensions), velocity_(grid.dimensions) { + // A note about the use_cvi_ member variable: + // In principle, we should not need it, since the choice of velocity + // interpolation is made below, but we may need to use higher order + // quadrature to exploit CVI, so we store the choice. + // An alternative would be to add a virtual method isConstant() to + // the VelocityInterpolationInterface. if (use_cvi) { velocity_interpolation_.reset(new VelocityInterpolationECVI(grid)); } else { @@ -253,7 +259,8 @@ namespace Opm // Compute cell jacobian contribution. We use Fortran ordering // for jac_, i.e. rows cycling fastest. { - CellQuadrature quad(grid_, cell, 2*degree_ - 1); + const int deg_needed = use_cvi_ ? 2*degree_ : 2*degree_ - 1; + CellQuadrature quad(grid_, cell, deg_needed); for (int quad_pt = 0; quad_pt < quad.numQuadPts(); ++quad_pt) { // b_i (v \cdot \grad b_j) quad.quadPtCoord(quad_pt, &coord_[0]); diff --git a/opm/core/transport/reorder/TransportModelTracerTofDiscGal.hpp b/opm/core/transport/reorder/TransportModelTracerTofDiscGal.hpp index 006c37fe1..d088fff5a 100644 --- a/opm/core/transport/reorder/TransportModelTracerTofDiscGal.hpp +++ b/opm/core/transport/reorder/TransportModelTracerTofDiscGal.hpp @@ -84,6 +84,7 @@ namespace Opm const UnstructuredGrid& grid_; boost::shared_ptr velocity_interpolation_; + bool use_cvi_; const double* darcyflux_; // one flux per grid face const double* porevolume_; // one volume per cell const double* source_; // one volumetric source term per cell