<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 16/06/17 01:19, Matthew Knepley
wrote:<br>
</div>
<blockquote
cite="mid:CAMYG4Gmpw5UsAhYGna=XiOKYcU_oV3hW7N=29DwRe10xVPatdA@mail.gmail.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote"><br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks for those ideas, very helpful.<br>
<br>
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.<br>
<br>
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?</blockquote>
<div><br>
</div>
<div>You can certainly modify the mesh. I need to get a
better idea what kind of modification, and then</div>
<div>I can suggest a way to do it. What do you start with,
and what exactly do you want to add?</div>
<div><br>
</div>
<br>
</div>
</div>
</div>
</blockquote>
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.<br>
<br>
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.<br>
<br>
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.<br>
<br>
<br>
Another approach, which might be easier, would be not to construct a
DM for the whole dual-porosity mesh, but create the Jacobian matrix
as a MatNest, with the fracture cell part created using
DMCreateMatrix() as now, with the original DM, and the other parts
of the Jacobian (representing fracture-matrix and matrix-matrix
interactions) created 'by hand'- because of the local
one-dimensional nature of the matrix rock cell parts of the mesh,
these would be just a bunch of block diagonal matrices anyway.<br>
<br>
I've just been looking at SNES example ex70.c where something a bit
like this is done.<br>
<br>
I think once the Jacobian matrix is created, you can create a
coloring for finite differencing on it just from the matrix itself,
and don't actually need a corresponding DM. So this approach might
work, without needing to construct a dual-porosity DM.<br>
<br>
- Adrian<br>
<pre class="moz-signature" cols="72">--
Dr Adrian Croucher
Senior Research Fellow
Department of Engineering Science
University of Auckland, New Zealand
email: <a class="moz-txt-link-abbreviated" href="mailto:a.croucher@auckland.ac.nz">a.croucher@auckland.ac.nz</a>
tel: +64 (</pre>
</body>
</html>