Hi Georg,
unfortunately, this will not work. We have that
residual = storage + inner_flux + boundary_flux + sources
Once we have that residual = 0, we can say
boundary_flux = - (storage + inner_flux + sources)
which is what I just suggested to calculate.
However, if you impose
boundary_flux = - (storage + inner_flux + sources)
as a boundary condition, you will have that
residual = storage + inner_flux - (storage + inner_flux + sources) +
sources = 0
for all possible solutions. While this sounds great, this means that we
will get all zeros in the corresponding matrix row since the residual
doesn't depend anymore on the solution.
In other words, the outflow condition has to be used with care. But you
might have already noticed this...
Kind regards
Bernd
On 04/07/2016 04:20 PM, [email protected] wrote:
Hi again!
For the outflow boundary condition, also computeFlux is used on the
boundary. I am not 100% sure but since this is just an approximation
it would probably be better to rewrite the evalOutflowSegment-function
of the boxlocalresidual according to your explanations?
Kind regards
Georg
*Von:*Dumux [mailto:[email protected]] *Im
Auftrag von *Bernd Flemisch
*Gesendet:* Donnerstag, 7. April 2016 15:56
*An:* DuMuX User Forum
*Betreff:* Re: [DuMuX] flux calculation with compute flux
Hi Georg,
sorry for the long silence.
I agree that it should be easier to calculate the fluxes from outside
the local residual. As you suggest, this could be made possible by a
static computeFlux function. We are currently on the way of rethinking
and -working the whole volVars/fluxVars stuff. We see that we can
incorporate your suggestion.
Until then, you can have a look at the function
calculateFluxAcrossLayer in dumux/freeflow/stokes/model.hh:98ff. While
this will not work for the boundary, you can use stuff from there. In
particular, after the line
this->localResidual().evalFluxes(element, elemVolVars);
you are safe to calculate the computeFlux function for the boundary faces.
That said, computeFlux for a boundary face in the box method will be
just an approximation by using the finite element gradient on the
boundary. To get the "real" flux in terms of the exact
mass/volume/energy that is flowing out of the domain, one has to
evaluate the residual for the entire control volume _without_ the
boundary terms. That means that one has to add up the contributions
from the subcontrol volumes. For your multidomain scenario and if you
want to calculate the fluxes across a part of the coupling boundary,
these fluxes should be the result of the routine globalResidual found
in dumux/implicit/model.hh where the model is a subdomain model. This
doesn't see the coupling, which means that no boundary terms are
calculated on the coupling boundary, which is what you want
Kind regards
Bernd
On 03/15/2016 03:06 PM, [email protected]
<mailto:[email protected]> wrote:
Hello Dumux,
I tried to calculate the fluxes over a certain part of the
boundary of the model domain. For this purpose I used an
ElementIterator to iterate over the elements of the grid. In each
element I iterate over the intersections and in each intersection
over the vertices. With information from the IntersectionIterator
and the vertex index I can get the boundary face index and the
boundary face position. I test whether I am at the desired
location on the grid and then calculate the local residual of the
corresponding element. This works just fine.
The idea was to use the computeFlux-function of the local residual
afterwards with the corresponding boundary face index and
onBoundary=true to get the flux over the boundary. However, this
will not work because the fluidState is not defined when the local
fluxVariables are constructed and this will cause Valgrind to
complain.
To me it came as a surprise that it is not possible to use the
computeFlux-function outside the localresidual since this is quite
an important quantity to access when traversing the grid. I see
that several people have tried just the same approach but
commented the code afterwards, probably for the reasons mentioned
above. The workaround which was used instead is to locally
construct the fluxVariables of the element and then do just the
same flux calculation as in the localresidual. This way, one is
forced to copy code and have code which does exactly the same in
two different locations. I think this should be improved and the
fluxes over the interfaces should be readily available when
iterating over the grid.
The solution to this problem would be to add a second
computeFlux-function to the local residual. This function would
get all the parameters needed for the flux calculation without the
need to touch the private functions of the local residual. This
would be a public version of computeFlux (the current computeFlux
function is private in nature since it can’t be called outside the
local residual without causing problems and maybe should be set
private for consistency).
I believe the problem is the same for all (implicit) models. I
attached my code which is specific to my multidomain/fuel cell
model. The first function is called in the multidomain problem.
The computeFlux-Function is part of the localresidual.
These are just some ideas. Please let me know what you think.
Best regards
Georg Futter
——————————————————————————
*German Aerospace Center *(DLR)
Institute of Engineering Thermodynamics | Computational
Electrochemistry | Pfaffenwaldring 38-40 | 70569 Stuttgart
Dipl.-Ing. *Georg Futter* | Ph.D. student
Telefon 0711/6862-8135 | [email protected]
<mailto:[email protected]>
www.DLR.de <http://www.DLR.de>
_______________________________________________
Dumux mailing list
[email protected]
<mailto:[email protected]>
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux
--
_______________________________________________________________
Bernd Flemisch phone: +49 711 685 69162
IWS, Universität Stuttgart fax: +49 711 685 60430
Pfaffenwaldring 61 email:[email protected]
<mailto:[email protected]>
D-70569 Stuttgart url:www.hydrosys.uni-stuttgart.de
<http://www.hydrosys.uni-stuttgart.de>
_______________________________________________________________
_______________________________________________
Dumux mailing list
[email protected]
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux
--
_______________________________________________________________
Bernd Flemisch phone: +49 711 685 69162
IWS, Universität Stuttgart fax: +49 711 685 60430
Pfaffenwaldring 61 email: [email protected]
D-70569 Stuttgart url: www.hydrosys.uni-stuttgart.de
_______________________________________________________________
_______________________________________________
Dumux mailing list
[email protected]
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux