Dear Timo,
depends on what you understand under outflow.
In the problem I am trying to model, I have one injection well and one
production well. The wells are essentially boundaries of a 2D rectangle.
Water is injected on one boundary, while oil+water mix is extracted on
the opposite one. I was thinking of setting on the production well a
constant pressure and zero relative saturation derivative (dSn/dx = 0,
which of course implies dSw/dx = 0). So this is a combination of
Dirichlet for pressure and Neumann for saturation. I am not quite sure
that this is the best way to model this sort of thing. If you have your
thoughts, I would appreciate them. I do not think that I can fix the
saturation on the production well, because I am studying a nonstationary
situation in which water gradually pushes out oil.
For Neumann what we expect from the function “neumann” in the problem
class that it returns a boundary flux for both equations
(NumEqVector). By “flux" I mean the entire term in the divergence.
Sorry, I am having trouble understanding how that can be applied to the
term with the saturation. But since I currently want to set it to zero,
probably it does not matter.
AFAIK, if you want some mixed Dirichlet/Neumann condition, i.e. fix
the pressure + enforce a flux for the second equation, you need to
convert the Dirichlet condition to a Robin condition and implement it
in “neumann”.
Yes, so I was told by DuMux: "Mixed boundary conditions. Use pure
boundary conditions by converting Dirichlet BCs to Robin BCs". But how
exactly do I do that? I do not see this kind of thing in the examples
(or I do not know what to look for). Is it the addRobinFluxDerivatives()
call that I should implement somehow?
Best regards,
Dmitry
On 25.03.2020 22:10, Timo Koch wrote:
Dear Dmitry,
depends on what you understand under outflow. The outflow boundary
condition is not implemented anymore for the implicit 2p model —
exactly for the reason you mention: it’s not really clear what it means.
I’m wondering why you don’t get an error. I’ll open an issue so that
we look at that and that users get a better error message in the future.
I guess you know better which condition you want in your example, but
generally you have two options in Dumux:
You can set Dirichlet (setAllDirichlet()), depending on your chosen
formulation that means setting e.g. pn and Sw., or you can set
Neumann/Robin (setAllNeumann).
For Neumann what we expect from the function “neumann” in the problem
class that it returns a boundary flux for both equations (NumEqVector).
By “flux" I mean the entire term in the divergence. You can look at
the documentation for the 2p model:
https://dumux.org/doxygen/3.1/a18570.html for the equations implemented.
AFAIK, if you want some mixed Dirichlet/Neumann condition, i.e. fix
the pressure + enforce a flux for the second equation, you need to
convert the Dirichlet condition to a Robin condition and implement it
in “neumann”.
Neumann in Dumux also includes “solution-dependent” fluxes (i.e.
Robin/Cauchy-type boundary conditions). But depending on your setup,
just setting one saturation to 0/1 at the outlet may also give you a
good result.
Best regards,
Timo
--
_________________________________________________
Timo Koch phone: +49 711 685 64676
IWS, Universität Stuttgart fax: +49 711 685 60430
Pfaffenwaldring 61 email: timo.k...@iws.uni-stuttgart.de
<mailto:timo.k...@iws.uni-stuttgart.de>
D-70569 Stuttgart url: www.iws.uni-stuttgart.de/en/lh2/
<http://www.iws.uni-stuttgart.de/en/lh2/>
_________________________________________________
On 25. Mar 2020, at 18:39, Dmitry Pavlov <dmitry.pav...@outlook.com
<mailto:dmitry.pav...@outlook.com>> wrote:
Dear Martin,
Thank you! So I was not basing quite on the right model/example for
my task.
I changed the model to dumux/porousmediumflow/2p, and am now having
another problem with the outflow condition:
setOutflow(Indices::saturationIdx). It worked with the sequential
model, however, to be honest, I do not quite understand what it
really means. I would have understood (mathematically/physically) a
Neumann condition that the derivative of the saturation on the outlet
boundary must be zero, but I suspect setOutflow is a different thing,
and I never saw a Neumann condition on saturation in DuMux examples
in any form.
Anyway, setOutflow() seemed to work with the sequential model, but
with the implicit model, it immediately results in
Assemble: ...
dumux/dumux/discretization/cellcentered/tpfa/elementvolumevariables.hh:322:
int Dumux::CCTpfaElementVolumeVariables<GVV,
false>::getLocalIdx_(int) const ... Assertion `it !=
volVarIndices_.end() && "Could not find the current volume variables
for volVarIdx!"' failed.
When I remove setOutflow(), and set e. g. Dirichlet conditions on
both ends, the assertion failure is gone, so I guess that
setOutflow() causes trouble.
Could you recommend how do I specify the outflow boundary condition
in my case?
Best regards,
Dmitry
On 25.03.2020 20:12, Martin Schneider wrote:
Dear Dmitry,
but then I don't see the point why you want to use a compositional
model.
Couldn't you simply use the dumux/porousmediumflow/2p model?
Best regards,
Martin
On 25.03.20 18:02, Dmitry Pavlov wrote:
Dear Martin,
Thank you for a quick reply. I am currently dealing with a
two-phase two-component Darcy flow of water and oil. Both liquids
are incompressible and have constant viscosity. Gravity, thermal
transfer and diffusion are not considered. Custom functions are
provided for capillary pressure, relative permeability for water,
and relative permeability for oil. Is more information needed?
Initially, I wrote my program basing on the example
test/porousmediumflow/2p/sequential/test_mpfa2p, and it worked; now
I am exploring the implicit method option.
Best regards,
Dmitry
On 25.03.2020 19:50, Martin Schneider wrote:
Dear Dmitry,
the compositional models in Dumux take into account diffusion
effects between the different fluid phases,
which is why you can't use an immiscible fluidsystem.
Could you maybe send some more details about your equations you
want to solve
and about the phases and components that are involved.
Best regards,
Martin
On 25.03.20 17:36, Dmitry Pavlov wrote:
Dear Martin,
Following your advice, I decided to try an implicit model of my
problem, namely a PorousMediumFlowProblem, following the example
in tests/porousmediumflow/2pnc/implicit/diffusion.
I managed to compile it, but am getting a runtime error upon the
start and, honestly, have no idea what to do about it. I will
appreciate any pointers.
For convenience, I will describe my task again. I am trying to
simulate a two-phase two-component flow on a 2D rectangular area
with one border being the influx and the opposite one being the
outflow (setOutflow()). Two other two borders are walls, of
course, with setAllNeumann().
The fluid system is realized as a TwoPImmiscible of two
OnePLiquid-s. The first of the liquids is the wetting phase, the
second is the nonwetting phase.
Now, the error that I am getting is
Dune reported error: Dune::InvalidStateException
[binaryDiffusionCoefficient:.../dumux/dumux/material/fluidsystems/2pimmiscible.hh:462]:
Binary diffusion coefficients of components are meaningless if
immiscibility is assumed
I never any "binary diffusion coefficients" directly in my files,
so it comes from the method.
I have doubts about the following line of my program
values.setState(Indices::bothPhases);
which is present in dirichletAtPos(), neumannAtPos(), and
initialAtPos() implementation. I do not really understand what
does this setState() setting mean, so I kind of guessed.
Am I on the right path at all here? I can provide more details,
of course, if that helps to understand what is going on.
Best regards,
Dmitry
On 23.03.2020 20:59, Martin Schneider wrote:
Dear Dmitry,
most of the Dumux users are using the fully-coupled (implicit)
models.
The sequential methods have not really been further developed
(at least the discretization schemes)
over the last few years.
However, if you want to use the MPFA-L method you have to use
the sequential method.
The implicit models only support the MPFA-O scheme.
Best regards,
Martin
On 23.03.20 18:53, Dmitry Pavlov wrote:
Dear Martin,
I guess not, I took the first one that worked, after numerous
failed attempts with other methods taken from random examples,
though the said attempts might have failed because of me being
a non-experienced user, and not because of the nature of the
methods. Would you suggest to use an implicit method instead?
Best regards,
Dmitry
On 23.03.2020 20:48, Martin Schneider wrote:
Dear Dmitry,
if I remember correctly, the sequential MPFA-L scheme requires
that each vertex is surrounded by 4 quadrilaterals (in 2D).
If this is not the case, the construction of interaction
volumes fails.
Is there any reason why you are using the sequential method?
Best regards,
Martin
On 23.03.20 18:42, Dmitry Pavlov wrote:
Dear Kilian,
1.) You should be able to use more recent versions of gmsh if you go to File ->
Export. If you name your grid *.msh
there will be an option to chose the older Version II ASCII format, readable by
Dumux.
Thank you!
2.) Have you tried an unstructured grid with quadrilaterals? According to the
header where the error comes from,
only quadrilaterals are supported (at least, this is what some comments in the
code suggest). You can force gmsh to
use only quads (also unstructured ones).
I just tried an unstructured quad grid and got the same
error. However, a gmsh-generated structured quad grid went
fine, which means that there is no trouble with gmsh itself.
Good news: using FVPressureTwoPAdaptive instead of
FvMpfaL2dPressureTwoP allowed me to use an gmsh-generated
unstructured grid (both triangular and quadrilateral). I am
wondering whether MPFA-L in DuMux "officially" requires a
structured quad grid.
Best regards,
Dmitry
_______________________________________________
Dumux mailing list
Dumux@listserv.uni-stuttgart.de <mailto: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