From ebe60bc5d7b86b89469a9edb9da0ee3c70de9b18 Mon Sep 17 00:00:00 2001 From: Kai Bao Date: Mon, 18 Apr 2016 15:32:47 +0200 Subject: [PATCH] puting WellModel before Implementation in the template. --- opm/autodiff/BlackoilModel.hpp | 4 +- opm/autodiff/BlackoilModelBase.hpp | 2 +- opm/autodiff/BlackoilModelBase_impl.hpp | 244 ++++++++++++------------ opm/autodiff/BlackoilSolventModel.hpp | 6 +- 4 files changed, 130 insertions(+), 126 deletions(-) diff --git a/opm/autodiff/BlackoilModel.hpp b/opm/autodiff/BlackoilModel.hpp index 4a349c516..d4473fed6 100644 --- a/opm/autodiff/BlackoilModel.hpp +++ b/opm/autodiff/BlackoilModel.hpp @@ -41,10 +41,10 @@ namespace Opm { /// It uses automatic differentiation via the class AutoDiffBlock /// to simplify assembly of the jacobian matrix. template - class BlackoilModel : public BlackoilModelBase, StandardWells> + class BlackoilModel : public BlackoilModelBase > { public: - typedef BlackoilModelBase, StandardWells> Base; + typedef BlackoilModelBase > Base; /// Construct the model. It will retain references to the /// arguments of this functions, and they are expected to diff --git a/opm/autodiff/BlackoilModelBase.hpp b/opm/autodiff/BlackoilModelBase.hpp index fc4a493e1..2c61960d1 100644 --- a/opm/autodiff/BlackoilModelBase.hpp +++ b/opm/autodiff/BlackoilModelBase.hpp @@ -105,7 +105,7 @@ namespace Opm { /// to simplify assembly of the jacobian matrix. /// \tparam Grid UnstructuredGrid or CpGrid. /// \tparam Implementation Provides concrete state types. - template + template class BlackoilModelBase { public: diff --git a/opm/autodiff/BlackoilModelBase_impl.hpp b/opm/autodiff/BlackoilModelBase_impl.hpp index 0afbe6fe2..a97a3e079 100644 --- a/opm/autodiff/BlackoilModelBase_impl.hpp +++ b/opm/autodiff/BlackoilModelBase_impl.hpp @@ -143,8 +143,8 @@ namespace detail { } // namespace detail - template - BlackoilModelBase:: + template + BlackoilModelBase:: BlackoilModelBase(const ModelParameters& param, const Grid& grid , const BlackoilPropsAdInterface& fluid, @@ -217,9 +217,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: prepareStep(const double dt, ReservoirState& reservoir_state, WellState& /* well_state */) @@ -234,10 +234,10 @@ namespace detail { - template + template template IterationReport - BlackoilModelBase:: + BlackoilModelBase:: nonlinearIteration(const int iteration, const double dt, NonlinearSolverType& nonlinear_solver, @@ -289,9 +289,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: afterStep(const double /* dt */, ReservoirState& /* reservoir_state */, WellState& /* well_state */) @@ -303,9 +303,9 @@ namespace detail { - template + template int - BlackoilModelBase:: + BlackoilModelBase:: sizeNonLinear() const { return residual_.sizeNonLinear(); @@ -315,9 +315,9 @@ namespace detail { - template + template int - BlackoilModelBase:: + BlackoilModelBase:: linearIterationsLastSolve() const { return linsolver_.iterations(); @@ -327,9 +327,9 @@ namespace detail { - template + template bool - BlackoilModelBase:: + BlackoilModelBase:: terminalOutputEnabled() const { return terminal_output_; @@ -339,9 +339,9 @@ namespace detail { - template + template int - BlackoilModelBase:: + BlackoilModelBase:: numPhases() const { return fluid_.numPhases(); @@ -351,9 +351,9 @@ namespace detail { - template + template int - BlackoilModelBase:: + BlackoilModelBase:: numMaterials() const { return material_name_.size(); @@ -363,9 +363,9 @@ namespace detail { - template + template const std::string& - BlackoilModelBase:: + BlackoilModelBase:: materialName(int material_index) const { assert(material_index < numMaterials()); @@ -376,9 +376,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: setThresholdPressures(const std::vector& threshold_pressures) { const int num_faces = AutoDiffGrid::numFaces(grid_); @@ -407,8 +407,8 @@ namespace detail { - template - BlackoilModelBase:: + template + BlackoilModelBase:: ReservoirResidualQuant::ReservoirResidualQuant() : accum(2, ADB::null()) , mflux( ADB::null()) @@ -422,9 +422,9 @@ namespace detail { - template + template int - BlackoilModelBase::numWellVars() const + BlackoilModelBase::numWellVars() const { // For each well, we have a bhp variable, and one flux per phase. const int nw = stdWells().localWellsActive() ? wells().number_of_wells : 0; @@ -435,9 +435,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: makeConstantState(SolutionState& state) const { // HACK: throw away the derivatives. this may not be the most @@ -465,9 +465,9 @@ namespace detail { - template - typename BlackoilModelBase::SolutionState - BlackoilModelBase:: + template + typename BlackoilModelBase::SolutionState + BlackoilModelBase:: variableState(const ReservoirState& x, const WellState& xw) const { @@ -480,9 +480,9 @@ namespace detail { - template + template std::vector - BlackoilModelBase:: + BlackoilModelBase:: variableStateInitials(const ReservoirState& x, const WellState& xw) const { @@ -503,9 +503,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: variableReservoirStateInitials(const ReservoirState& x, std::vector& vars0) const { using namespace Opm::AutoDiffGrid; @@ -542,10 +542,10 @@ namespace detail { - template + template void - BlackoilModelBase:: - variableWellStateInitials(const WellState& xw, std::vector& vars0) const + BlackoilModelBase:: + variableWellStateInitials(const WellState& xw, std::vector& vars0) const { // Initial well rates. if ( stdWells().localWellsActive() ) @@ -577,9 +577,9 @@ namespace detail { - template + template std::vector - BlackoilModelBase:: + BlackoilModelBase:: variableStateIndices() const { assert(active_[Oil]); @@ -601,9 +601,9 @@ namespace detail { - template + template std::vector - BlackoilModelBase:: + BlackoilModelBase:: variableWellStateIndices() const { // Black oil model standard is 5 equation. @@ -620,9 +620,9 @@ namespace detail { - template - typename BlackoilModelBase::SolutionState - BlackoilModelBase:: + template + typename BlackoilModelBase::SolutionState + BlackoilModelBase:: variableStateExtractVars(const ReservoirState& x, const std::vector& indices, std::vector& vars) const @@ -693,9 +693,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: variableStateExtractWellsVars(const std::vector& indices, std::vector& vars, SolutionState& state) const @@ -711,9 +711,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: computeAccum(const SolutionState& state, const int aix ) { @@ -774,8 +774,9 @@ namespace detail { - template - void BlackoilModelBase:: + template + void + BlackoilModelBase:: computeWellConnectionPressures(const SolutionState& state, const WellState& xw) { @@ -808,9 +809,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: assemble(const ReservoirState& reservoir_state, WellState& well_state, const bool initial_assembly) @@ -886,9 +887,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: assembleMassBalanceEq(const SolutionState& state) { // Compute b_p and the accumulation term b_p*s_p for each phase, @@ -954,9 +955,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: updateEquationsScaling() { ADB::V B; const Opm::PhaseUsage& pu = fluid_.phaseUsage(); @@ -988,9 +989,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: addWellContributionToMassBalanceEq(const std::vector& cq_s, const SolutionState&, const WellState&) @@ -1015,9 +1016,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: extractWellPerfProperties(const SolutionState&, std::vector& mob_perfcells, std::vector& b_perfcells) const @@ -1044,9 +1045,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: addWellFluxEq(const std::vector& cq_s, const SolutionState& state) { @@ -1072,8 +1073,9 @@ namespace detail { - template - bool BlackoilModelBase:: + template + bool + BlackoilModelBase:: isVFPActive() const { if( ! localWellsActive() ) { @@ -1107,8 +1109,9 @@ namespace detail { - template - bool BlackoilModelBase:: + template + bool + BlackoilModelBase:: solveWellEq(const std::vector& mob_perfcells, const std::vector& b_perfcells, SolutionState& state, @@ -1215,8 +1218,9 @@ namespace detail { - template - void BlackoilModelBase:: + template + void + BlackoilModelBase:: addWellControlEq(const SolutionState& state, const WellState& xw, const V& aliveWells) @@ -1382,9 +1386,9 @@ namespace detail { - template + template V - BlackoilModelBase:: + BlackoilModelBase:: solveJacobianSystem() const { return linsolver_.computeNewtonIncrement(residual_); @@ -1495,9 +1499,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: updateState(const V& dx, ReservoirState& reservoir_state, WellState& well_state) @@ -1824,9 +1828,9 @@ namespace detail { - template + template std::vector - BlackoilModelBase:: + BlackoilModelBase:: computeRelPerm(const SolutionState& state) const { using namespace Opm::AutoDiffGrid; @@ -1854,9 +1858,9 @@ namespace detail { - template + template std::vector - BlackoilModelBase:: + BlackoilModelBase:: computePressures(const ADB& po, const ADB& sw, const ADB& so, @@ -1891,9 +1895,9 @@ namespace detail { - template + template V - BlackoilModelBase:: + BlackoilModelBase:: computeGasPressure(const V& po, const V& sw, const V& so, @@ -1909,16 +1913,16 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: computeMassFlux(const int actph , const V& transi, const ADB& kr , const ADB& mu , const ADB& rho , const ADB& phasePressure, - const SolutionState& state) + const SolutionState& state) { // Compute and store mobilities. const ADB tr_mult = transMult(state.pressure); @@ -1943,9 +1947,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: applyThresholdPressures(ADB& dp) { // We support reversible threshold pressures only. @@ -1976,9 +1980,9 @@ namespace detail { - template + template std::vector - BlackoilModelBase:: + BlackoilModelBase:: computeResidualNorms() const { std::vector residualNorms; @@ -2017,9 +2021,9 @@ namespace detail { } - template + template double - BlackoilModelBase:: + BlackoilModelBase:: relativeChange(const SimulationDataContainer& previous, const SimulationDataContainer& current ) const { @@ -2058,9 +2062,9 @@ namespace detail { } } - template + template double - BlackoilModelBase:: + BlackoilModelBase:: convergenceReduction(const Eigen::Array& B, const Eigen::Array& tempV, const Eigen::Array& R, @@ -2145,9 +2149,9 @@ namespace detail { - template + template bool - BlackoilModelBase:: + BlackoilModelBase:: getConvergence(const double dt, const int iteration) { const double tol_mb = param_.tolerance_mb_; @@ -2270,9 +2274,9 @@ namespace detail { - template + template bool - BlackoilModelBase:: + BlackoilModelBase:: getWellConvergence(const int iteration) { const double tol_wells = param_.tolerance_wells_; @@ -2350,9 +2354,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: fluidViscosity(const int phase, const ADB& p , const ADB& temp , @@ -2376,9 +2380,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: fluidReciprocFVF(const int phase, const ADB& p , const ADB& temp , @@ -2402,9 +2406,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: fluidDensity(const int phase, const ADB& b, const ADB& rs, @@ -2426,9 +2430,9 @@ namespace detail { - template + template V - BlackoilModelBase:: + BlackoilModelBase:: fluidRsSat(const V& p, const V& satOil, const std::vector& cells) const @@ -2440,9 +2444,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: fluidRsSat(const ADB& p, const ADB& satOil, const std::vector& cells) const @@ -2454,9 +2458,9 @@ namespace detail { - template + template V - BlackoilModelBase:: + BlackoilModelBase:: fluidRvSat(const V& p, const V& satOil, const std::vector& cells) const @@ -2468,9 +2472,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: fluidRvSat(const ADB& p, const ADB& satOil, const std::vector& cells) const @@ -2482,9 +2486,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: poroMult(const ADB& p) const { const int n = p.size(); @@ -2513,9 +2517,9 @@ namespace detail { - template + template ADB - BlackoilModelBase:: + BlackoilModelBase:: transMult(const ADB& p) const { const int n = p.size(); @@ -2544,9 +2548,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: classifyCondition(const ReservoirState& state) { using namespace Opm::AutoDiffGrid; @@ -2585,9 +2589,9 @@ namespace detail { - template + template void - BlackoilModelBase:: + BlackoilModelBase:: updatePrimalVariableFromState(const ReservoirState& state) { using namespace Opm::AutoDiffGrid; @@ -2636,9 +2640,9 @@ namespace detail { /// Update the phaseCondition_ member based on the primalVariable_ member. - template + template void - BlackoilModelBase:: + BlackoilModelBase:: updatePhaseCondFromPrimalVariable() { if (! active_[Gas]) { @@ -2677,9 +2681,9 @@ namespace detail { // TODO: only kept for now due to flow_multisegment // will be removed soon - template + template void - BlackoilModelBase:: + BlackoilModelBase:: updateWellState(const V& dwells, WellState& well_state) { diff --git a/opm/autodiff/BlackoilSolventModel.hpp b/opm/autodiff/BlackoilSolventModel.hpp index a7f80740e..ddc3aa40c 100644 --- a/opm/autodiff/BlackoilSolventModel.hpp +++ b/opm/autodiff/BlackoilSolventModel.hpp @@ -36,18 +36,18 @@ namespace Opm { /// It uses automatic differentiation via the class AutoDiffBlock /// to simplify assembly of the jacobian matrix. template - class BlackoilSolventModel : public BlackoilModelBase, StandardWellsSolvent> + class BlackoilSolventModel : public BlackoilModelBase > { public: // --------- Types and enums --------- - typedef BlackoilModelBase, StandardWellsSolvent> Base; + typedef BlackoilModelBase > Base; typedef typename Base::ReservoirState ReservoirState; typedef typename Base::WellState WellState; // The next line requires C++11 support available in g++ 4.7. // friend Base; - friend class BlackoilModelBase, StandardWellsSolvent>; + friend class BlackoilModelBase >; /// Construct the model. It will retain references to the /// arguments of this functions, and they are expected to