diff --git a/opm/autodiff/StandardWellsDense.hpp b/opm/autodiff/StandardWellsDense.hpp index 50285c64e..b9c2a522c 100644 --- a/opm/autodiff/StandardWellsDense.hpp +++ b/opm/autodiff/StandardWellsDense.hpp @@ -23,6 +23,8 @@ #ifndef OPM_STANDARDWELLSDENSE_HEADER_INCLUDED #define OPM_STANDARDWELLSDENSE_HEADER_INCLUDED +#include + #include #include @@ -69,7 +71,9 @@ enum WellVariablePositions { template class StandardWellsDense { public: - + // --------- Ebos property system stuff ------- + typedef typename TTAG(EclFlowProblem) TypeTag; + typedef typename GET_PROP_TYPE(TypeTag, ElementContext) ElementContext; // --------- Types --------- typedef WellStateFullyImplicitBlackoilDense WellState; typedef BlackoilModelParameters ModelParameters; diff --git a/opm/autodiff/StandardWellsDense_impl.hpp b/opm/autodiff/StandardWellsDense_impl.hpp index d3a951574..7cd4dc582 100644 --- a/opm/autodiff/StandardWellsDense_impl.hpp +++ b/opm/autodiff/StandardWellsDense_impl.hpp @@ -934,15 +934,24 @@ namespace Opm { std::vector< Vector > B( np, Vector( nc ) ); std::vector< Vector > R2( np, Vector( nc ) ); std::vector< Vector > tempV( np, Vector( nc ) ); + auto& grid = ebosSimulator.gridManager().grid(); + const auto& gridView = grid.leafGridView(); + ElementContext elemCtx(ebosSimulator); + const auto& elemEndIt = gridView.template end(); - for ( int idx = 0; idx < np; ++idx ) + for (auto elemIt = gridView.template begin(); + elemIt != elemEndIt; ++elemIt) { - Vector& B_idx = B[ idx ]; - const int ebosPhaseIdx = flowPhaseToEbosPhaseIdx(idx); + elemCtx.updatePrimaryStencil(*elemIt); + elemCtx.updatePrimaryIntensiveQuantities(/*timeIdx=*/0); - for (int cell_idx = 0; cell_idx < nc; ++cell_idx) { - const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0)); - const auto& fs = intQuants.fluidState(); + const auto& intQuants = elemCtx.intensiveQuantities(/*spaceIdx=*/0, /*timeIdx=*/0); + const auto& fs = intQuants.fluidState(); + + for ( int idx = 0; idx < np; ++idx ) + { + Vector& B_idx = B[ idx ]; + const int ebosPhaseIdx = flowPhaseToEbosPhaseIdx(idx); B_idx [cell_idx] = 1 / fs.invB(ebosPhaseIdx).value(); }