Hi Dennis,

Thanks a lot for your prompt reply!

How do I pass the assembler to the matrix subproblem? Shall I rewrite the 
constructor of matrix subproblem or there is another option?

Or shall I write the loop through elements in the main(), where I have an 
instance of the assembler?

Best regards,
Nikolai
________________________________
From: Dennis Gläser <[email protected]>
Sent: Sunday, October 27, 2019 4:36:16 PM
To: [email protected]; Nikolai Andrianov
Subject: Re: [DuMuX] Calculate the flux at fracture-matrix interfaces


Hi Nikolai,


I suppose you meant 3.0? To my knowledge this feature was not available in 2.12.


In any case, the reason for this error is because the coupling manager stores 
the data from the coupled domain that is required for flux computations. 
Currently, this requires the coupling manager to be bound to an element, just 
as you do for the ElementVolumeVariables etc. So, for example, computing fluxes 
across an element of the matrix domain would require the following "bind" calls 
beforehand:


couplingManager.bindCouplingContext(matrixDomainId, matrixElement, assembler);

fvGeometry.bind(matrixElement);

elemVolVars.bind(matrixElement, fvGeometry, matrixSolution);

elemFluxVarsCache.bind(matrixElement, fvGeometry, elemVolVars);


I suppose the last three lines are in your code already. The only thing you are 
currently missing is the binding of the coupling manager (first line). It needs 
the domain id of the element you are binding it too, the element itself and 
(unfortunately) the assembler. We are not happy with this dependency, 
especially because it requires the assembler to be passed to it.


We have found a solution to get around the necessity to call 
"bindCouplingContext()", but this is still on a development branch though and 
will be incorporated until the next release. Until then, you will have to bind 
the coupling manager prior to element-local computations, sorry about that.


I hope this works!


Best wishes,
Dennis





On 27.10.19 13:11, Nikolai Andrianov wrote:

Dear experts,


I would like to calculate the flux across the fracture-matrix interfaces, but 
get a runtime error when using the code below (a part of my matrixproblem.hh):

                FluxVariables fluxVars;
                fluxVars.init(*this, element, fvGeometry, elemVolVars, scvf, 
elemFluxVarsCache);

                if (couplingManager().isOnInteriorBoundary(element, scvf))
                {
                        Scalar flux = 
fluxVars.advectiveFlux(FluidSystem::phase0Idx, upwindTerm);    // <-- Runtime 
error here
                        std::cout << ", flux=" << flux << std::endl;
                        mfFlux += flux;
                }

The code successfully prints the flux for a first scvf but gives the following 
error message on a second scvf: "Assertion `std::find(s.begin(), s.end(), 
lowDimElemIdx) != s.end()' failed.'

The error message occurs in couplingManager().getLowDimVolVars(). It seems that 
the low-dimensional element can be found, but the corresponding volume 
variables cannot be linked.

Appreciate your help 😊

Thanks,
Nikolai

PS I am (still) using Dumux 2.12..





_______________________________________________
Dumux mailing list
[email protected]<mailto:[email protected]>
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux

_______________________________________________
Dumux mailing list
[email protected]
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux

Reply via email to