<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>