[petsc-users] Jacobian matrix for dual porosity model

Adrian Croucher a.croucher at auckland.ac.nz
Tue Jun 20 22:41:44 CDT 2017


On 16/06/17 11:37, Adrian Croucher wrote:
> On 16/06/17 01:19, Matthew Knepley wrote:
>>
>>     Thanks for those ideas, very helpful.
>>
>>     If I try this approach (forming whole Jacobian matrix and using
>>     PCFieldSplit Schur), I guess I will first need to set up a
>>     modified DMPlex for the whole fracture + matrix mesh- so I can
>>     use it to create vectors and the Jacobian matrix (with the right
>>     sparsity pattern), and also to work out the coloring for finite
>>     differencing.
>>
>>     Would that be straight-forward to do? Currently my DM just comes
>>     from DMPlexCreateFromFile(). Presumably you can use
>>     DMPlexInsertCone() or similar to add points into it?
>>
>>
>> You can certainly modify the mesh. I need to get a better idea what 
>> kind of modification, and then
>> I can suggest a way to do it. What do you start with, and what 
>> exactly do you want to add?
>>
>>
> The way dual porosity is normally implemented in a finite volume 
> context is to add an extra matrix rock cell 'inside' each of the 
> original cells (which now represent the fractures, and have their 
> volumes reduced accordingly), with a connection between the fracture 
> cell and its corresponding matrix rock cell, so fluid can flow between 
> them.
>
> More generally there can be multiple matrix rock cells for each 
> fracture cell, in which case further matrix rock cells are nested 
> inside the first one, again with connections between them. There are 
> formulae for computing the appropriate effective matrix rock cell 
> volumes and connection areas, typically based on a 'fracture spacing' 
> parameter which determines how fractured the rock is.
>
> So in a DMPlex context it would mean somehow adding extra DAG points 
> representing the internal cells and faces for each of the original 
> cells. I'm not sure how that would be done.

I've been having a go at this- copying the cones and supports from the 
original DM into a new DM, which will represent the topology of the dual 
porosity mesh, but adding one new cell for each original cell, and a 
face connecting the two. I've based my attempt loosely on some of the 
stuff in SplitFaces() in TS ex11.c.

It isn't working though, as yet- when I construct the new DM and view 
it, the numbers of cells, faces etc. don't make sense, and the depth 
label says it's got 7 strata, where it should still just have 4 like the 
original DM.

I may have just messed it up somehow, but it occurred to me that maybe 
DMPlex won't like having bits of its DAG having different depths? With 
what I've been trying, the dual porosity parts of the mesh would just 
specify DAG points representing the new cells and the corresponding 
faces, but not for any edges or vertices of those faces. I hoped that 
would be sufficient for generating the nonzero structure of the Jacobian 
matrix. But I don't know if DMPlex will allow a DAG like that?

- Adrian

-- 
Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
University of Auckland, New Zealand
email: a.croucher at auckland.ac.nz
tel: +64 (0)9 923 4611

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170621/c25dee99/attachment.html>


More information about the petsc-users mailing list