<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
Hello all but especially Matt,
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">I am trying to build this "non-manifold" DMplex that has already been brought up in these two threads:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2021-December/045091.html" id="LPlnk984292" class="OWAAutoLink">https://lists.mcs.anl.gov/pipermail/petsc-users/2021-December/045091.html</a></div>
<div class="ContentPasted0"><span style=""><a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2021-October/044743.html" id="LPlnk670528" class="OWAAutoLink">https://lists.mcs.anl.gov/pipermail/petsc-users/2021-October/044743.html</a></span><br>
</div>
<div class="ContentPasted0"><br>
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">In this new thread I'm opening as in the two above, the background is solving elasticity with FEM using a mixture of solid, shells/plates and/or beam/truss elements.</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">My first attempt was to create a cube and a line connecting one of the cube's corners to a point in Gmsh (cube-line.geo and cube-line-geo.png) and then mesh this geometry so as to have a single hex8 and a single line2, both defined
 using 9 nodes. (cube-line.msh and cube-line-mesh.png).</div>
<div class="ContentPasted0">But DMPlexCreateGmshFromFile() did not pick up the line2 element because there's this logic that "cell" means "element with topological dimension equal to that of the mesh", i.e. 3.</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">So, I then tried to create the DM from a DAG with the same information that could have been parsed from the msh file:</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">    PetscInt num_points[4] = {9, 1, 0, 1};</div>
<div class="ContentPasted0">    PetscInt cone_size[11] = {8,</div>
<div class="ContentPasted0">                              0, 0, 0, 0, 0, 0, 0, 0, 0,</div>
<div class="ContentPasted0">                              2};</div>
<div class="ContentPasted0">    PetscInt cones[11] = {3,4,2,1,7,5,6,8,</div>
<div class="ContentPasted0">                          6,9};</div>
<div class="ContentPasted0">    PetscInt cone_orientations[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};</div>
<div class="ContentPasted0">    PetscReal vertex_coords[3*9] = {</div>
<div class="ContentPasted0">      0, 0, 1,</div>
<div class="ContentPasted0">      0, 0, 0,</div>
<div class="ContentPasted0">      0, 1, 1,</div>
<div class="ContentPasted0">      0, 1, 0,</div>
<div class="ContentPasted0">      1, 0, 1,</div>
<div class="ContentPasted0">      1, 0, 0,</div>
<div class="ContentPasted0">      1, 1, 1,</div>
<div class="ContentPasted0">      1, 1, 0,</div>
<div class="ContentPasted0">      2, 0, 0</div>
<div class="ContentPasted0">    };</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">    DM dm;</div>
<div class="ContentPasted0">    PetscCall(DMCreate(PETSC_COMM_WORLD, &dm));</div>
<div class="ContentPasted0">    PetscCall(PetscObjectSetName((PetscObject)dm, "cubeline-fromdag"));</div>
<div class="ContentPasted0">    PetscCall(DMSetType(dm, DMPLEX));</div>
<div class="ContentPasted0">    PetscCall(DMSetDimension(dm, 3));</div>
<div class="ContentPasted1">    PetscCall(DMPlexCreateFromDAG(dm, 3, num_points, cone_size, cones, cone_orientations, vertex_coords));<br class="ContentPasted1">
<br class="ContentPasted0">
</div>
<div class="ContentPasted0">The DM is now created successfully. With some slight modifications in DMPlexVTKGetCellType_Internal() I can even get a VTK out of the DM which shows the geometry I intended to have (cube-line-dag.vtk and cube-line-vtk.png).</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">However, when I want to interpolate the DM I get an error which is not the same as the one given in the existing threads:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">[0]PETSC ERROR: Argument out of range</div>
<div class="ContentPasted0">[0]PETSC ERROR: Cone position 1 of point 10 is not in the valid range [0, 1)</div>
<div class="ContentPasted0">[0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble shooting.</div>
<div class="ContentPasted0">[0]PETSC ERROR: Petsc Development GIT revision: v3.20.1-96-g294d477ba62  GIT Date: 2023-10-31 00:56:56 -0500</div>
<div class="ContentPasted0">[0]PETSC ERROR: ./main on a arch-linux-c-debug named tom by gtheler Wed Nov  1 16:17:15 2023</div>
<div class="ContentPasted0">[0]PETSC ERROR: Configure options </div>
<div class="ContentPasted0">[0]PETSC ERROR: #1 DMPlexInsertCone() at /home/gtheler/libs/petsc/src/dm/impls/plex/plex.c:3384</div>
<div class="ContentPasted0">[0]PETSC ERROR: #2 DMPlexInterpolateFaces_Internal() at /home/gtheler/libs/petsc/src/dm/impls/plex/plexinterpolate.c:691</div>
<div class="ContentPasted0">[0]PETSC ERROR: #3 DMPlexInterpolate() at /home/gtheler/libs/petsc/src/dm/impls/plex/plexinterpolate.c:1499</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">I tried to understand a little bit what was going on and the first thing I noticed is that the depth returned by DMPlexGetDepth() is 1 even when I created the DM with an explicit depth of 3.</div>
<div class="ContentPasted0">Thus, I then hardcoded the depth to 3 in DMPlexInterpolateFaces_Internal() and it went a little bit further but failed during stratification:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">[0]PETSC ERROR: Petsc has generated inconsistent data</div>
<div class="ContentPasted0">[0]PETSC ERROR: New depth 3 range [11,19) overlaps with depth 1 range [11,19)</div>
<div class="ContentPasted0">[0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble shooting.</div>
<div class="ContentPasted0">[0]PETSC ERROR: Petsc Development GIT revision: v3.20.1-96-g294d477ba62  GIT Date: 2023-10-31 00:56:56 -0500</div>
<div class="ContentPasted0">[0]PETSC ERROR: ./main on a arch-linux-c-debug named tom by gtheler Wed Nov  1 16:19:40 2023</div>
<div class="ContentPasted0">[0]PETSC ERROR: Configure options </div>
<div class="ContentPasted0">[0]PETSC ERROR: #1 DMPlexCreateDepthStratum() at /home/gtheler/libs/petsc/src/dm/impls/plex/plex.c:4232</div>
<div class="ContentPasted0">[0]PETSC ERROR: #2 DMPlexStratify() at /home/gtheler/libs/petsc/src/dm/impls/plex/plex.c:4356</div>
<div class="ContentPasted0">[0]PETSC ERROR: #3 DMPlexInterpolateFaces_Internal() at /home/gtheler/libs/petsc/src/dm/impls/plex/plexinterpolate.c:711</div>
<div class="ContentPasted0">[0]PETSC ERROR: #4 DMPlexInterpolate() at /home/gtheler/libs/petsc/src/dm/impls/plex/plexinterpolate.c:1499</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">Find also attached cube-line.c </div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">I followed the old thread on the archives.</div>
<div class="ContentPasted0">Here, Matt suggests that "if you assign cell types, you can even get Plex to automatically interpolate.":
</div>
<div class="ContentPasted0"><a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2021-December/045100.html" id="LPlnk298424">https://lists.mcs.anl.gov/pipermail/petsc-users/2021-December/045100.html</a></div>
<div class="ContentPasted0"><br>
</div>
<div class="ContentPasted0">But here he says it won't work because "We use depth in the DAG as a proxy for cell dimension, but this will no longer work <span style="">if faces are not part of a volume."</span></div>
<div class="ContentPasted0"><a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2021-October/044785.html" id="LPlnk883695">https://lists.mcs.anl.gov/pipermail/petsc-users/2021-October/044785.html</a></div>
<div class="ContentPasted0"><br>
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">Questions:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> 1. Is it ok to read back a depth of 1 instead of 3 or is this something that could be fixed?</div>
<div class="ContentPasted0"> 2. Is there a way to make the interpolation algorithm able to handle this kind of DAGs?</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">Thanks</div>
<div class="ContentPasted0">--</div>
<div class="ContentPasted0">jeremy</div>
<br>
</div>
</body>
</html>