00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef OPM_FLOWMAINSOLVENT_HEADER_INCLUDED
00022 #define OPM_FLOWMAINSOLVENT_HEADER_INCLUDED
00023
00024
00025
00026 #include <opm/autodiff/FlowMain.hpp>
00027 #include <opm/autodiff/SolventPropsAdFromDeck.hpp>
00028
00029
00030
00031 namespace Opm
00032 {
00033
00034
00035 template <class Grid, class Simulator>
00036 class FlowMainSolvent : public FlowMainBase<FlowMainSolvent<Grid, Simulator>, Grid, Simulator>
00037 {
00038 protected:
00039 using Base = FlowMainBase<FlowMainSolvent<Grid, Simulator>, Grid, Simulator>;
00040 friend Base;
00041
00042
00043 std::unique_ptr<SolventPropsAdFromDeck> solvent_props_;
00044
00045
00046
00047
00048
00049 void printStartupMessage()
00050 {
00051 if (Base::output_cout_) {
00052 const std::string version = moduleVersionName();
00053 std::cout << "**********************************************************************\n";
00054 std::cout << "* *\n";
00055 std::cout << "* This is Flow-Solvent (version " << version << ")"
00056 << std::string(18 - version.size(), ' ') << "*\n";
00057 std::cout << "* *\n";
00058 std::cout << "* Flow-Solvent is a simulator for fully implicit three-phase, *\n";
00059 std::cout << "* four-component (black-oil + solvent) flow, and is part of OPM. *\n";
00060 std::cout << "* For more information see http://opm-project.org *\n";
00061 std::cout << "* *\n";
00062 std::cout << "**********************************************************************\n\n";
00063 }
00064 }
00065
00066
00067
00068
00069
00070
00071
00072 void setupGridAndProps()
00073 {
00074 Base::setupGridAndProps();
00075
00076 const Grid& grid = Base::grid_init_->grid();
00077 solvent_props_.reset(new SolventPropsAdFromDeck(*Base::deck_,
00078 *Base::eclipse_state_,
00079 UgGridHelpers::numCells(grid),
00080 UgGridHelpers::globalCell(grid)));
00081 }
00082
00083
00084
00085
00086
00087
00088
00089
00090 void createSimulator()
00091 {
00092
00093 Base::simulator_.reset(new Simulator(Base::param_,
00094 Base::grid_init_->grid(),
00095 *Base::geoprops_,
00096 *Base::fluidprops_,
00097 *solvent_props_,
00098 Base::rock_comp_->isActive() ? Base::rock_comp_.get() : nullptr,
00099 *Base::fis_solver_,
00100 Base::gravity_.data(),
00101 Base::deck_->hasKeyword("DISGAS"),
00102 Base::deck_->hasKeyword("VAPOIL"),
00103 Base::eclipse_state_,
00104 *Base::output_writer_,
00105 Base::deck_,
00106 Base::threshold_pressures_,
00107 Base::deck_->hasKeyword("SOLVENT")));
00108 }
00109
00110 void setupLinearSolver()
00111 {
00112
00113 if (Base::deck_->hasKeyword("SOLVENT") && !Base::param_.has("require_full_sparsity_pattern") ) {
00114 Base::param_.insertParameter("require_full_sparsity_pattern","true");
00115 }
00116 Base::setupLinearSolver();
00117 }
00118
00119 };
00120
00121
00122 }
00123
00124
00125 #endif // OPM_FLOWMAINSOLVENT_HEADER_INCLUDED