Yes, Dmitry, please do consider Bernd's suggestions. It would be appreciated by more than one.
Best regards On Fri, Mar 18, 2022, 2:24 AM Dmitry Pavlov <dmitry.pav...@outlook.com> wrote: > Bernd, > > > Thank you. I will check with my managers regarding what I can do about > publishing the code. The completeFluidState in my code is not a branch, but > a method in a dedicated VolumeVariables variant which is assigned to the > Problem via TypeTag. One "potential complication" that I can see is that > the code in its present form is not going to be accepted into DuMux source > because it does not comply with DuMux's C++ guidelines (that happened > before with my merge requests). So either I will have to re-write it, or > someone else will, or it will stay as an example/prototype outside DuMux > source tree. > > > To elaborate on my statement about complications with 2pnc PVS model: > imagine that at one moment, you have a two-phase configuration: > > > pressure, saturation, (n-2) mole fractions in one of the phases > > > and then you run the Newton method, and then the Newton method orders to > increase the pressure, leaving other variables intact: > > > pressure + delta, saturation, (n-2) mole fractions in one of the phases > > > It can happen that with the increased pressure, the two-phase > configuration is to become one-phase. It is very hard, if possible, to > figure that basing just on (n-2) mole fractions and the saturation. The > saturation without the (original, two-phase-compatible) pressure is > meaningless. And the old value or pressure is "lost" at this point. How to > even guess the total mole fractions in this situation? I do not know. > > > I imagine that a very intricate relay between the Newton method and > PrimaryVariableSwitch could, in principle, allow to slowly approach the > phase transition point and then change the primary variables... but there > is no need to do that in presence of "classic" flash that works so well and > converges so well. (I also have to say that figuring out the fluid state > from the "pressure, saturation, n-2 mole fractions" is a big convergence > pain). > > > > Best regards, > > > Dmitry > > > > > On 3/18/22 09:57, Flemisch, Bernd wrote: > > Hi Dmitry, > > > thank you for your report, this is very valuable! > > > It would be even more valuable and highly appreciated if you decide to add > your model to DuMux. As far as I can see, this would in essence add the > Michelsen test and your flash calculation. And the completeFluidState > method would branch depending on whether the traditional "PVS" or the new > "flash" model is used. Right? Or do you see potential complications? > > > I consider your statement > > "The primary variables. Those must be the pressure and n-1 (overall) mole > fractions. I do not think that it is possible at all to implement a > two-phase compositional model with the usual primary variables of the 2pnc > model" > > very bold. The 2pnc PVS model is standard which has been used > successfully not only in DuMux to simulate two-phase compositional flow for > many years. > > > Nevertheless, I certainly acknowledge the fact that a flash-based model > might be superior for particular applications. With the drawback on > computational performance due to the more expensive flash calculations for > one Newton step. > > > In total, I would heartily encourage you to contribute your model! > > > Kind regards > > Bernd > > > -- > _________________________________________________________________ > > Bernd Flemisch > IWS, Universität Stuttgart phone: +49 711 685 69162 > Pfaffenwaldring 61 email: be...@iws.uni-stuttgart.de > D-70569 Stuttgart url: www.iws.uni-stuttgart.de/en/lh2/ > _________________________________________________________________ > ------------------------------ > *Von:* DuMux <dumux-boun...@listserv.uni-stuttgart.de> > <dumux-boun...@listserv.uni-stuttgart.de> im Auftrag von Dmitry Pavlov > <dmitry.pav...@outlook.com> <dmitry.pav...@outlook.com> > *Gesendet:* Donnerstag, 17. März 2022 23:20:09 > *An:* dumux@listserv.uni-stuttgart.de > *Betreff:* [DuMux] Oil-gas compositional simulation in DuMux > > > Hello, > > This is for anybody who will be wondering someday whether the two-phase > oil-gas compositional model is doable in DuMux. The short answer is yes. > > The numerical algorithms required for such a model are described in many > sources (e.g. [1]) and implemented in ECLIPSE and a lot of other programs, > including the open-source MRST [2]. > > > Now, what is required for implementing the two-phase compositional model > in DuMux: > > 1. The primary variables. Those must be the pressure and n-1 (overall) > mole fractions. I do not think that it is possible at all to implement a > two-phase compositional model with the usual primary variables of the 2pnc > model [3] (pressure, saturation, n-2 mole fractions). But the good news is > that DuMux, for the most part, does not care about what is stored in the > primary variables. So it is possible to just treat 2pnc's primary variables > as the pressure and n-1 (overall) mole fractions. The only thing that must > be redesigned for that to work is VolumeVariables and, in particular, > completeFluidState() method that builds the FluidState from the primary > variables. > > 2. In order to build the FluidState from the primary variables, one needs > two algorithms: the Michelsen stability test (it decides whether we have > one-phase or two-phase composition with this pressure and temperature) and > the two-phase flash algorithm (it calculates the mole fractions for each > phase from overall mole fractions). Those algorithms are not present in > DuMux. DuMux has constraint solvers called MiscibleMultiPhaseComposition > and NcpFlash, but they will not work for this kind of problem. Only the > "classic" flash algorithm works. One has to implement the Michelsen test > and flash in the aforementioned completeFluidState() replacement. These > algorithms, in turn, require an implementation of equation of state (EOS), > usually Peng-Robinson (PR). > > 3. Good news: DuMux has a completely suitable implementation PR EOS! One > pitfall is that the default behavior of PR in DuMux is "too correct" in its > handling of single-root case, which causes Michelsen test to fail. A flag > "handleUnphysicalPhase" was added to computeMolarVolume() method to allow > to simplify the calculation and make it suitable for Michelsen test [4]. > > 4. Switching of primary variables. Actually, no, this one is not needed at > all. The built-in TwoPNCPrimaryVariableSwitch is not suitable for this > problem; it is possible to implement a custom PrimaryVariableSwitch which > would be based of the Michelsen test, but it creates more problems than it > solves. To be specific, it reduces performance and worsens Newton > convergence and gives nothing in return. Phase presence in FluidState is > updated in completeFluidState() and it is fine. > > > One must be cautious about the performance because DuMux tends to call the > computationally expensive completeFluidState() more often than it is needed > to do the job [5]. At least EnableGridVolumeVariablesCache and > EnableGridFluxVariablesCache should be turned on to avoid unnecessary > recalculations. Also, PrimaryVariableSwitch should be disabled, as said > above. Finally, if the box method is used, DuMux calls completeFluidState() > on every scv connected to every node, which on a 2D grid is 4x the number > of nodes, while in principle, it is possible to complete the task by making > 1x the number of nodes calls. Maybe a rewrite of GridVolumeVariables will > help to achieve that. For now, oil-gas simulation in DuMux is inferior to > MRST in performance. While MRST works on a much slower engine (Matlab), it > does not waste time on 4x recalculations, and also uses automatic > differentiation, while DuMux uses slow numerical differentiation. One the > other hand, DuMux, unlike MRST, can be parallelized via both MPI and > threads [6]. > > > This is it, thank you for attention. > > > Regards, > > Dmitry > > > > [1] https://store.spe.org/Phase-Behavior-P46.aspx > [2] > https://www.sintef.no/contentassets/2551f5f85547478590ceca14bc13ad51/compositional.html > [3] https://dumux.org/docs/doxygen/master/a18414.html > [4] > https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/-/merge_requests/2831 > [5] https://listserv.uni-stuttgart.de/pipermail/dumux/2021q4/002811.html > [6] > https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/-/merge_requests/2640 > > _______________________________________________ > DuMux mailing list > DuMux@listserv.uni-stuttgart.de > https://listserv.uni-stuttgart.de/mailman/listinfo/dumux >
_______________________________________________ DuMux mailing list DuMux@listserv.uni-stuttgart.de https://listserv.uni-stuttgart.de/mailman/listinfo/dumux