From 65764ce6f21c2ca980651fdef8aee18df4856780 Mon Sep 17 00:00:00 2001 From: Liu Ming Date: Fri, 10 Jan 2014 17:53:54 +0800 Subject: [PATCH] add a private member cmax_ to store the max concentration for per cell. --- .../fullyimplicit/.AutoDiffBlock.hpp.swp | Bin 0 -> 16384 bytes .../FullyImplicitCompressiblePolymerSolver.cpp | 16 +++++++--------- .../FullyImplicitCompressiblePolymerSolver.hpp | 6 +++--- .../FullyImplicitTwophasePolymerSolver.cpp | 16 +++++++--------- .../FullyImplicitTwophasePolymerSolver.hpp | 6 +++--- 5 files changed, 20 insertions(+), 24 deletions(-) create mode 100644 opm/polymer/fullyimplicit/.AutoDiffBlock.hpp.swp diff --git a/opm/polymer/fullyimplicit/.AutoDiffBlock.hpp.swp b/opm/polymer/fullyimplicit/.AutoDiffBlock.hpp.swp new file mode 100644 index 0000000000000000000000000000000000000000..5fce83a022031f678262bf8c54008a49d4c0e374 GIT binary patch literal 16384 zcmeHNON<;x8E)(l?0^YMPMr9`Qnb6w&g`xw5*%xl@jmPk-iLN)<5&opnx5*Nvb(!F z)!jRuSOz5=B3`*5aX}z)0x2gR3d#Wq3B&;uBn~`sMhaXxZ~_D0UtQfjGf5o81qpR) zznz(`uD|~J>VH&K*I?z@-VQz4Uh!~!#Pi-f`^$sZPyh5>{!!11RH$;k{~p&ss$0w9 zolmV^So`#o4|ukd7=26nSx0Kq$x~@MkRPe|xTBMZv7G2|65&4oF24tP7*14_gvwW0 zr<-SbQw720Q2V#rqa=AidreWpK*PW^1LwR8Ypd4P&wt|M^!Q^((}m6VhJl8GhJl8G zhJl8GhJl8GhJl8G|8oYiHhGz>HhGz>HhGz>HhGz>HhGz>Hh zGz>HhyaNMb=y^}!{?~XtjrafM`v3l;p7(3uSHLU4*MU9Y4DgE&d){||Zv#W%Jn*M; zp7&$mM}P)afMuWsoC5y%AzcLYvDNE)j!q>(t0Bq&uc$c07Hf#-yjpZpV- zArTKLU2J>&iyJAf1)WGEGHpKlxkbt}9m~u%sp6qJQNvt>Rof{oWFwK0N-1f1T)h^f z0}@as8yP9<3N1=CO>|DNltY$|Gam%W@(u~#muWgDrR-(erd^#$h(mKs1Nk~mGn4yJ zl#I-B6Q}6(3C@yeGbg0a&*Lvop?o;8y-E4_h)grmNv3p6DzIuaa{lpo_=9;sql-%|s&76sKoM$F84Ft+}quv~KNyh0Z82uX-^^3oF*%k`}GnFNG1U z+3)FM3qv{0LT!7**W1;f)4nj4OhpoAUUmhVRodgU(6JFwJyh9PyAez;R!`lf)s+^l zS*+rSzF;BmOYH2^Ps{bXUK!K zRoV=3G)Wo=st0YV)i!n0)Sh^PV%E0tEC~RIG6)xY)OPLS7j56i0^+zMLuu3r`gH=U z8mnvsS4b1s9=n!hvy@SOQY12??$o0T>&XO$%`p?_(EyPKz4LXLM{p|kR@Teoc4f8SnuFL=cs-PQH$k+y;;bl2&zTV=BBjmuyonMl_5O9mAHD&Oyvdza8r_ zjYrBKRRa2>av)N1$aYumFn6?yj zaKi}O=U9yZRu8C)Udp%k3#&jjNQ6P`C`P}IV4)1MR-yT{&6X*Eqo#9%vEu4QWOTBN zuw_GyyyHt3Nb8~C9E1ad!eAH>b+uDn7$YX=e$BC%OzAZ;L5wTWhv1d)^Nz?!>@0yY}6V;7`OlZ0esqZ)>#Qia?1 zL$+@4GRRek^buQ8Mg33>j4+cH#?x7Eao_g1lu~|@%|IMsIHkbDi?qh#5tC#P!i`x9 zLXypva2`#8F!e|$Mxr}IL|ko&O#Kle7I@m@=syrCOb)YzY!t~1UuWp5w5a?A10rs7 zgDOLWOBK&IbgiU~UOKNww;GqqkP$R)<(yLCcpwP1k#6A_MXoh;Y;>O3E>&}q2L-TV zykYw(ldOw*O_`f1&8M8Lj#@*NBGSXrtA4S674dQ=3RDCjptI}Q)a+tX5$pxkV#{EN zK!+R;Wv0!7RVh7d#7;U@(daQ;XsXs+S*6Cj?HP&TO<^6ykYI)-jGbUih5R;cAs$yE zYV&kf&Z;aFsxP{(ab$P15Vrf0&QeDCIsJ^&tQ_y6r*Mzj5WCJR*ouL%FvI0Y4-w>X zG#4QU##d!QH5Haz2Jr5BF#;dj@g?mg5ta`s_QMZExc%IQfy`w&LcW==3?!f`X-FVv4piwGMkfzwP>_Khx24-Q9j=4Y37esN8fWKls0%>@_ zdEy9x3Ke->kwF?35tuGuoq$u{E$-<8N_e8?CVq=ZiW3TvA+acuCUwb>Ti)ii$Ds}~ zG>u<6kB8R!S|kw_>*wi0$+068>7D0+XdhKL5JDK_M|SGYKOVp~0)S2T=?GmKOzN%% ztWD~)DdurL@;O!%6$jiR+_Hnwfd8lfug0mEI0XvJJMhI(pj37*0mJ(mQ8lFtxz} kJzZ5A7{$9*?)`1C?=!PwU+hs~U%rs%Hm~_5K&_MaZ!}ZYBme*a literal 0 HcmV?d00001 diff --git a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp index e7f71dbb6..c5bf17752 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp +++ b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.cpp @@ -175,6 +175,7 @@ namespace { , ops_ (grid) , wops_ (wells) , grav_ (gravityOperator(grid_, ops_, geo_)) + , cmax_(V::Zero(grid.number_of_cells)) , rq_ (fluid.numPhases() + 1) , residual_ ( { std::vector(fluid.numPhases() + 1, ADB::null()), ADB::null(), @@ -454,18 +455,16 @@ namespace { - V + ADB FullyImplicitCompressiblePolymerSolver:: - computeCmax(const PolymerBlackoilState& x) const + computeCmax(const ADB& c) { - const int nc = c.value().size(); - const V cmax = Eigen::Map(& x.maxconcentration()[0], nc); - const V c = Eigen::Map(& x.concentration()[0], nc); + const int nc = grid_.number_of_cells; for (int i = 0; i < nc; ++i) { - cmax(i) = std::max(cmax(i), c(i)); + cmax_(i) = std::max(cmax_(i), c.value()(i)); } - return cmax; + return ADB::constant(cmax_, c.blockPattern()); } void @@ -493,8 +492,7 @@ namespace { const V trans = subset(geo_.transmissibility(), ops_.internal_faces); const std::vector kr = computeRelPerm(state); const double dead_pore_vol = polymer_props_ad_.deadPoreVol(); - const V cmax_v = computeCmax(x); - const ADB cmax = ADB::constant(cmax_v, state.concentration.blockPattern()); + const ADB cmax = computeCmax(state.concentration); const ADB ads = polymer_props_ad_.adsorption(state.concentration, cmax); const ADB krw_eff = polymer_props_ad_.effectiveRelPerm(state.concentration, cmax, kr[0], state.saturation[0]); const ADB mc = computeMc(state); diff --git a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp index 77d1348ec..c61d46ce4 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp +++ b/opm/polymer/fullyimplicit/FullyImplicitCompressiblePolymerSolver.hpp @@ -130,7 +130,7 @@ namespace Opm { HelperOps ops_; const WellOps wops_; const M grav_; - + V cmax_; std::vector rq_; // The mass_balance vector has one element for each active phase, @@ -191,8 +191,8 @@ namespace Opm { computeFracFlow(const ADB& kro, const ADB& krw_eff, const ADB& c) const; - V - computeCmax(const PolymerBlackoilState& x) const; + ADB + computeCmax(const ADB& c); ADB computeMc(const SolutionState& state) const; ADB diff --git a/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.cpp b/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.cpp index a1e4fa730..d1c503c02 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.cpp +++ b/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.cpp @@ -104,6 +104,7 @@ namespace { , ops_(grid) , wops_(wells) , mob_(std::vector(fluid.numPhases() + 1, ADB::null())) + , cmax_(V::Zero(grid.number_of_cells)) , residual_( { std::vector(fluid.numPhases() + 1, ADB::null()), ADB::null(), ADB::null()}) { } @@ -343,18 +344,16 @@ namespace { } - V + ADB FullyImplicitTwophasePolymerSolver:: - computeCmax(const PolymerState& x) const + computeCmax(const ADB& c) { - const int nc = c.value().size(); - const V cmax = Eigen::Map(& x.maxconcentration()[0], nc); - const V c = Eigen::Map(& x.concentration()[0], nc); + const int nc = grid_.number_of_cells; for (int i = 0; i < nc; ++i) { - cmax(i) = std::max(cmax(i), c(i)); + cmax_(i) = std::max(cmax_(i), c.value()(i)); } - return cmax; + return ADB::constant(cmax_, c.blockPattern()); } @@ -374,8 +373,7 @@ namespace { const V trans = subset(transmissibility(), ops_.internal_faces); const std::vector kr = computeRelPerm(state); - const V cmax_v = computeCmax(x); - const ADB cmax = ADB::constant(cmax, state.concentration.blockPattern()); + const ADB cmax = computeCmax(state.concentration); const ADB ads = polymer_props_ad_.adsorption(state.concentration, cmax); const ADB krw_eff = polymer_props_ad_.effectiveRelPerm(state.concentration, cmax, kr[0], state.saturation[0]); const ADB mc = computeMc(state); diff --git a/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.hpp b/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.hpp index 1a6c5e438..5bfe7d7c7 100644 --- a/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.hpp +++ b/opm/polymer/fullyimplicit/FullyImplicitTwophasePolymerSolver.hpp @@ -61,7 +61,7 @@ namespace Opm { HelperOps ops_; const WellOps wops_; std::vector mob_; - + V cmax_; struct { std::vector mass_balance; ADB well_eq; @@ -114,8 +114,8 @@ namespace Opm { const std::vector& polymer_inflow_c, const SolutionState& state) const; - V - computeCmax(const PolymerState& x) const; + ADB + computeCmax(const ADB& c); ADB computeMc(const SolutionState& state) const; ADB