<div dir="ltr"><div>Hi Matt, this is a follow-up to the previous question:</div><div><br></div><div>I have created a short code as below to create a sub-dm on the surface, extracted from the original volume dmplex:</div><div><br></div><div>-------------------------------------</div><div>    call DMClone(dm_origin, dm_wall, ierr);CHKERRA(ierr)<br><br>    ! label for face sets<br>    call DMGetLabel(dm_wall, "Face Sets", label_facesets, ierr);CHKERRA(ierr)<br>    call DMPlexLabelComplete(dm_wall, label_facesets, ierr);CHKERRA(ierr)<br><br>    ! label for vertex on surface<br>    call DMCreateLabel(dm_wall, "Wall", ierr);CHKERRA(ierr)<br>    call DMGetLabel(dm_wall, "Wall", label_surf, ierr);CHKERRA(ierr)<br>    call DMPlexGetChart(dm_wall, ist, iend, ierr);CHKERRA(ierr)<br>    do i=ist,iend<br>      call DMLabelGetValue(label_facesets, i, val, ierr);CHKERRA(ierr)<br>      if(val .eq. ID_wall) then<br>        call DMLabelSetValue(label_surf, i, ID_wall, ierr);CHKERRA(ierr)<br>      endif<br>    enddo<br>    call DMPlexLabelComplete(dm_wall, label_surf, ierr);CHKERRA(ierr)<br><br>    ! create submesh<br>    call DMPlexCreateSubmesh(dm_wall, label_surf, ID_wall, PETSC_TRUE, dm_sub, ierr);CHKERRA(ierr)<br>    call DMPlexGetSubpointMap(dm_sub, label_sub, ierr);CHKERRA(ierr)<br></div><div><div>-------------------------------------</div><br class="gmail-Apple-interchange-newline"></div><div>It is a bit unclear how to map the vector on each vertex of the original volume dm (dm_wall) into the subdm (dm_sub). The function DMPlexGetSubpointMap() seems to create a subpointMap (label_sub) for this mapping, but it is hard to get an idea how to use that DMLabel for the mapping. Shall I create DMCreateInterpolation()? But it uses Mat and Vec to define mapping rule. Could I ask for any comments?</div><div><br></div><div>Thanks,</div><div>Mike</div><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br>Yes, you can use DMPlexCreateSubmesh() (and friends depending on exactly what kind of submesh you want). This will allow you to create a vector over only this mesh, and map your volumetric solution to that subvector. Then you can view the subvector (which pulls in the submesh).<div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 1, 2022 at 10:59 PM Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I would create a sub-DM containing only the part you want to view.<br>
<br>
Mike Michell <<a href="mailto:mi.mike1021@gmail.com" target="_blank">mi.mike1021@gmail.com</a>> writes:<br>
<br>
> Hi,<br>
><br>
> I am a user of DMPlex object in 3D grid topology. Currently the solution<br>
> field is printed out using viewer PETSCVIEWERVTK in .vtu format. By doing<br>
> that the entire volume components are written in the file. I was wondering<br>
> if there is an option that I can tell PETSc viewer to print out only<br>
> surface component, instead of the entire volume.<br>
><br>
> Best,<br>
> Mike<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><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.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div>
</blockquote></div></div>