<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Dec 1, 2017 at 5:50 AM, Matteo Semplice <span dir="ltr"><<a href="mailto:matteo.semplice@unito.it" target="_blank">matteo.semplice@unito.it</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF">
    <p>Thanks for the fix!</p>
    <p>(If you need a volunteer for testing the bug-fix, drop me a line)<br>
    </p>
    </div></blockquote><div>Cool. Its in next, and in </div><div><br></div><div>  <a href="https://bitbucket.org/petsc/petsc/branch/knepley/fix-plex-fvm-adjacency">https://bitbucket.org/petsc/petsc/branch/knepley/fix-plex-fvm-adjacency</a></div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div bgcolor="#FFFFFF">Best,<br>
        Matteo<div><div class="gmail-h5"><br>
    <br>
    <div class="gmail-m_1051752934641907621moz-cite-prefix">On 30/11/2017 13:46, Matthew Knepley
      wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">Thanks for finding this bug. I guess no one has
        been making matrices with FVM. I will fix this internally, but
        here
        <div>is a workaround which makes the code go for now.</div>
        <div><br>
        </div>
        <div>  Thanks,</div>
        <div><br>
        </div>
        <div>     Matt</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Wed, Nov 29, 2017 at 6:36 AM, Matteo
          Semplice <span dir="ltr"><<a href="mailto:matteo.semplice@unito.it" target="_blank">matteo.semplice@unito.it</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div bgcolor="#FFFFFF">
              <p><br>
              </p>
              <br>
              <div class="gmail-m_1051752934641907621m_-3237254272824140482moz-cite-prefix">On
                29/11/2017 12:46, Matthew Knepley wrote:<br>
              </div>
              <blockquote type="cite">
                <div dir="ltr">
                  <div class="gmail_extra">
                    <div class="gmail_quote"><span>On Wed, Nov
                        29, 2017 at 2:26 AM, Matteo Semplice <span dir="ltr"><<a href="mailto:matteo.semplice@unito.it" target="_blank">matteo.semplice@unito.it</a>></span>
                        wrote:<br>
                        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                          <div bgcolor="#FFFFFF"> On 25/11/2017 02:05,
                            Matthew Knepley wrote:<br>
                            <blockquote type="cite">
                              <div dir="ltr">
                                <div class="gmail_extra">
                                  <div class="gmail_quote">On Fri, Nov
                                    24, 2017 at 4:21 PM, Matteo Semplice
                                    <span dir="ltr"><<a href="mailto:matteo.semplice@unito.it" target="_blank">matteo.semplice@unito.it</a>></span>
                                    wrote:<br>
                                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi.<br>
                                      <br>
                                      The manual for DMCreateMatrix says
                                      "Notes: This properly preallocates
                                      the number of nonzeros in the
                                      sparse matrix so you do not need
                                      to do it yourself", so I got the
                                      impression that one does not need
                                      to call the preallocation routine
                                      for the matrix and indeed in most
                                      examples listed in the manual page
                                      for DMCreateMatrix this is not
                                      done or (KSP tutorial ex4) it is
                                      called declaring 0 entries per
                                      row.<br>
                                      <br>
                                      However, if read in a mesh in a
                                      DMPlex ore create a DMDA and then
                                      call DMCreateMatrix, the resulting
                                      matrix errors out when I call
                                      MatSetValues. I have currently
                                      followed the suggestion of the
                                      error message and call
                                      MatSetOption(A,
                                      MAT_NEW_NONZERO_ALLOCATION_ERR<wbr>,
                                      PETSC_FALSE), but I'd like to fix
                                      this properly.<br>
                                    </blockquote>
                                    <div><br>
                                    </div>
                                    <div>It sounds like your nonzero
                                      pattern does not obey the
                                      topology. What nonzero pattern are
                                      you trying to input?</div>
                                  </div>
                                </div>
                              </div>
                            </blockquote>
                            <br>
                            Hi.<br>
                            <br>
                                The problem with the DMDA was a bug in
                            our code. Sorry for the noise.<br>
                            <br>
                            On the other hand, with the DMPLex, I still
                            experience problems. It's a FV code and I
                            reduced it to the case of the simple case of
                            a laplacian operator: I need non-diagonal
                            entries at (i,j) if cell i and cell j have a
                            common face. <br>
                            Here below is my code that reads in a grid
                            of 4 cells (unit square divided by the
                            diagonals), create a section with 1 dof per
                            cell, creates a matrix and assembles it.</div>
                        </blockquote>
                        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                          <div bgcolor="#FFFFFF"><tt><br>
                            </tt><tt>  ierr =
                              DMPlexCreateFromFile(PETSC_COM<wbr>M_WORLD,
                              "square1.msh", PETSC_TRUE,
                              &dm);CHKERRQ(ierr);</tt></div>
                        </blockquote>
                        <div><br>
                        </div>
                      </span>
                      <div>Can you show me the mesh?</div>
                      <div><br>
                      </div>
                      <div>         ierr = DMViewFromOptions(dm, NULL,
                        "-dm_view");CHKERRQ(ierr);</div>
                      <div><br>
                      </div>
                      <div>and then run with -dm_view
                        ::ascii_info_detail</div>
                      <span>
                        <div><br>
                        </div>
                        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                          <div bgcolor="#FFFFFF"><tt><br>
                            </tt><tt>  ierr =
                              DMPlexSetAdjacencyUseCone(dm, PETSC_TRUE);
                              CHKERRQ(ierr);</tt><tt><br>
                            </tt><tt>  ierr =
                              DMPlexSetAdjacencyUseClosure(d<wbr>m,
                              PETSC_FALSE); CHKERRQ(ierr);</tt></div>
                        </blockquote>
                        <div><br>
                        </div>
                      </span>
                      <div>This looks like the right FVM adjacency, but
                        your matrix is diagonal it appears below. TS
                        ex11</div>
                      <div>has an identical call, but produces the
                        correct matrix, which is why I want to look at
                        your mesh.</div>
                    </div>
                  </div>
                </div>
              </blockquote>
              <br>
              I have put the DMViewFromOptions call after the
              SetAdjacency calls and this is the output:<br>
              <br>
              <tt>matteo@signalkuppe:~/software/<wbr>petscMplex$
                ./mplexMatrix -dm_view ::ascii_info_detail</tt><tt><br>
              </tt><tt>DM Object: 1 MPI processes</tt><tt><br>
              </tt><tt>  type: plex</tt><tt><br>
              </tt><tt>Mesh 'DM_0x557496ad8380_0':</tt><tt><br>
              </tt><tt>orientation is missing</tt><tt><br>
              </tt><tt>cap --> base:</tt><tt><br>
              </tt><tt>[0] Max sizes cone: 3 support: 4</tt><tt><br>
              </tt><tt>[0]: 4 ----> 9</tt><tt><br>
              </tt><tt>[0]: 4 ----> 11</tt><tt><br>
              </tt><tt>[0]: 4 ----> 12</tt><tt><br>
              </tt><tt>[0]: 5 ----> 10</tt><tt><br>
              </tt><tt>[0]: 5 ----> 11</tt><tt><br>
              </tt><tt>[0]: 5 ----> 15</tt><tt><br>
              </tt><tt>[0]: 6 ----> 14</tt><tt><br>
              </tt><tt>[0]: 6 ----> 15</tt><tt><br>
              </tt><tt>[0]: 6 ----> 16</tt><tt><br>
              </tt><tt>[0]: 7 ----> 12</tt><tt><br>
              </tt><tt>[0]: 7 ----> 13</tt><tt><br>
              </tt><tt>[0]: 7 ----> 16</tt><tt><br>
              </tt><tt>[0]: 8 ----> 9</tt><tt><br>
              </tt><tt>[0]: 8 ----> 10</tt><tt><br>
              </tt><tt>[0]: 8 ----> 13</tt><tt><br>
              </tt><tt>[0]: 8 ----> 14</tt><tt><br>
              </tt><tt>[0]: 9 ----> 0</tt><tt><br>
              </tt><tt>[0]: 9 ----> 1</tt><tt><br>
              </tt><tt>[0]: 10 ----> 0</tt><tt><br>
              </tt><tt>[0]: 10 ----> 2</tt><tt><br>
              </tt><tt>[0]: 11 ----> 0</tt><tt><br>
              </tt><tt>[0]: 12 ----> 1</tt><tt><br>
              </tt><tt>[0]: 13 ----> 1</tt><tt><br>
              </tt><tt>[0]: 13 ----> 3</tt><tt><br>
              </tt><tt>[0]: 14 ----> 2</tt><tt><br>
              </tt><tt>[0]: 14 ----> 3</tt><tt><br>
              </tt><tt>[0]: 15 ----> 2</tt><tt><br>
              </tt><tt>[0]: 16 ----> 3</tt><tt><br>
              </tt><tt>base <-- cap:</tt><tt><br>
              </tt><tt>[0]: 0 <---- 9 (0)</tt><tt><br>
              </tt><tt>[0]: 0 <---- 10 (0)</tt><tt><br>
              </tt><tt>[0]: 0 <---- 11 (0)</tt><tt><br>
              </tt><tt>[0]: 1 <---- 12 (0)</tt><tt><br>
              </tt><tt>[0]: 1 <---- 13 (0)</tt><tt><br>
              </tt><tt>[0]: 1 <---- 9 (-2)</tt><tt><br>
              </tt><tt>[0]: 2 <---- 10 (-2)</tt><tt><br>
              </tt><tt>[0]: 2 <---- 14 (0)</tt><tt><br>
              </tt><tt>[0]: 2 <---- 15 (0)</tt><tt><br>
              </tt><tt>[0]: 3 <---- 14 (-2)</tt><tt><br>
              </tt><tt>[0]: 3 <---- 13 (-2)</tt><tt><br>
              </tt><tt>[0]: 3 <---- 16 (0)</tt><tt><br>
              </tt><tt>[0]: 9 <---- 4 (0)</tt><tt><br>
              </tt><tt>[0]: 9 <---- 8 (0)</tt><tt><br>
              </tt><tt>[0]: 10 <---- 8 (0)</tt><tt><br>
              </tt><tt>[0]: 10 <---- 5 (0)</tt><tt><br>
              </tt><tt>[0]: 11 <---- 5 (0)</tt><tt><br>
              </tt><tt>[0]: 11 <---- 4 (0)</tt><tt><br>
              </tt><tt>[0]: 12 <---- 4 (0)</tt><tt><br>
              </tt><tt>[0]: 12 <---- 7 (0)</tt><tt><br>
              </tt><tt>[0]: 13 <---- 7 (0)</tt><tt><br>
              </tt><tt>[0]: 13 <---- 8 (0)</tt><tt><br>
              </tt><tt>[0]: 14 <---- 8 (0)</tt><tt><br>
              </tt><tt>[0]: 14 <---- 6 (0)</tt><tt><br>
              </tt><tt>[0]: 15 <---- 6 (0)</tt><tt><br>
              </tt><tt>[0]: 15 <---- 5 (0)</tt><tt><br>
              </tt><tt>[0]: 16 <---- 7 (0)</tt><tt><br>
              </tt><tt>[0]: 16 <---- 6 (0)</tt><tt><br>
              </tt><tt>coordinates with 1 fields</tt><tt><br>
              </tt><tt>  field 0 with 2 components</tt><tt><br>
              </tt><tt>Process 0:</tt><tt><br>
              </tt><tt>  (   4) dim  2 offset   0 0. 0.</tt><tt><br>
              </tt><tt>  (   5) dim  2 offset   2 0. 1.</tt><tt><br>
              </tt><tt>  (   6) dim  2 offset   4 1. 1.</tt><tt><br>
              </tt><tt>  (   7) dim  2 offset   6 1. 0.</tt><tt><br>
              </tt><tt>  (   8) dim  2 offset   8 0.5 0.5</tt><tt><br>
              </tt><br>
              For the records, the mesh is loaded from the (gmsh
              generated) file<br>
              <br>
              <tt>==== square1.msh =====</tt><tt><br>
              </tt><tt>$MeshFormat</tt><tt><br>
              </tt><tt>2.2 0 8</tt><tt><br>
              </tt><tt>$EndMeshFormat</tt><tt><br>
              </tt><tt>$Nodes</tt><tt><br>
              </tt><tt>5</tt><tt><br>
              </tt><tt>1 0 0 0</tt><tt><br>
              </tt><tt>2 0 1 0</tt><tt><br>
              </tt><tt>3 1 1 0</tt><tt><br>
              </tt><tt>4 1 0 0</tt><tt><br>
              </tt><tt>5 0.5 0.5 0</tt><tt><br>
              </tt><tt>$EndNodes</tt><tt><br>
              </tt><tt>$Elements</tt><tt><br>
              </tt><tt>12</tt><tt><br>
              </tt><tt>1 15 2 0 1 1</tt><tt><br>
              </tt><tt>2 15 2 0 2 2</tt><tt><br>
              </tt><tt>3 15 2 0 3 3</tt><tt><br>
              </tt><tt>4 15 2 0 4 4</tt><tt><br>
              </tt><tt>5 1 2 0 1 4 3</tt><tt><br>
              </tt><tt>6 1 2 0 2 3 2</tt><tt><br>
              </tt><tt>7 1 2 0 3 2 1</tt><tt><br>
              </tt><tt>8 1 2 0 4 1 4</tt><tt><br>
              </tt><tt>9 2 2 0 6 1 5 2</tt><tt><br>
              </tt><tt>10 2 2 0 6 1 4 5</tt><tt><br>
              </tt><tt>11 2 2 0 6 2 5 3</tt><tt><br>
              </tt><tt>12 2 2 0 6 3 5 4</tt><tt><br>
              </tt><tt>$EndElements</tt><tt><br>
              </tt><tt>===================</tt><tt><br>
              </tt><br>
              Thanks,<br>
                  Matteo<br>
              <br>
              <br>
            </div>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        <div class="gmail-m_1051752934641907621gmail_signature">
          <div dir="ltr">
            <div>
              <div dir="ltr">
                <div>What most experimenters take for granted before
                  they begin their experiments is infinitely more
                  interesting than any results to which their
                  experiments lead.<br>
                  -- Norbert Wiener</div>
                <div><br>
                </div>
                <div><a href="http://www.caam.rice.edu/%7Emk51/" target="_blank">https://www.cse.buffalo.edu/~<wbr>knepley/</a><br>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </div></div></div>

</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.caam.rice.edu/~mk51/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div>
</div></div>