<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">When using a DM, we can also visualize meshes (DMDA, DMPLEX) and vectors defined on them with GLVIS <a href="https://glvis.org/" class="">https://glvis.org/</a>, which I find quite useful for quick debugging.<div class=""><br class=""><div class="">It popups an X window and uses OpenGL for interactive visualization. It needs the GLVis server up and running. Users of PETSc can configure with --download-glvis</div><div class=""><br class=""></div><div class="">Once configure, in a separate terminal, run</div><div class="">$ $PETSC_DIR/$PETSC_ARCH/bin/glvis # GLVIS server</div><div class=""><br class=""></div><div class="">In a simulation, one can then do (provided vectors have been obtained from a DM)</div><div class=""><br class=""></div><div class="">$ ./mytsapp -vec_view glvis # visualize time evolution of the solution</div><div class=""><br class=""></div><div class="">$./mysnesapp -snes_monitor_residual # visualize residual at each nonlinear iteration on a grid</div><div class=""><br class=""></div><div class="">$ ./mydmapp -dm_view glvis # visualize the mesh</div><div class=""><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Data can also be dumped (ASCII only, this is a limitation of GLVis) and visualized later with either GLVis itself or VisIt.</div><div class=""><br class=""></div><div class="">Attached the screenshot of the popup window for</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures;" class="">$ cd src/dm/impls/plex/examples/tests</span></div></div><div style="margin: 0px; font-stretch: normal; line-height: normal;" class=""><span style="font-variant-ligatures: no-common-ligatures;" class="">$ ./ex1 -filename ${PETSC_DIR}/share/petsc/datafiles/meshes/surfacesphere_bin.msh -dm_plex_gmsh_spacedim 3 -dm_view glvis</span></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><img apple-inline="yes" id="8BAF8B40-69F8-434D-88C8-39FB4DC466A7" width="602" height="631" src="cid:6A9BB541-8791-4254-9EAA-455109B15F42@home" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jul 26, 2019, at 4:05 AM, Smith, Barry F. via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" class="">petsc-dev@mcs.anl.gov</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><br class="">   The PETSc paradigm for this is <br class=""><br class="">    DMView(dm, viewer);   /* save mesh info <br class="">    VecView(vec,viewer);   <br class=""><br class="">    Which has basic variants<br class=""><br class="">   DMView(dm, viewer);   /* save mesh info <br class="">   VecView(vec,viewer);   <br class="">   VecView(vec,viewer);   <br class="">   ...<br class=""><br class="">   and<br class=""><br class="">    VecView(vec,viewer);   <br class="">    ...<br class=""><br class="">   User simply changes the viewer to select a large variety of viewers (from X to Visit: in theory). Of course in the introductory tutorial it will be a "simple" viewer but it is important to still have the flexible usage because the user must learn the correct paradigm and how trivial it is to switch viewers (in theory but not neccessarily in practice yet). <br class=""><br class="">   Since the vec knows about the associated DM, passing the DM separately should be optional<br class=""><br class="">1)    We don't support this paradigm completely consistently/properly for all viewers/dm combinations (we should)<br class=""><br class="">2)    For some combinations we have additional functionality to make it easier to manage the relationship between the mesh and the vector<br class="">       a) For example with the Matlab binary viewer and and DA it <br class="">             i) saves  the DA object (dof, dimensions, periodicity information, ...) as a Matlab struct so it can be easily be manipulated in <br class="">               Matlab. But there is no such saving for loading into Python. <br class="">            ii) saves a .info file that users can use with PetscBinaryBinaryReadMatlab.m that automatically reshapes the vector as a Matlab <br class="">                multi-dimensional array of the appropriate shape. Nothing similar for Python<br class="">        b) for DA vectors and binary and ASCII viewers it automatically calls DAGlobalToNatural() so the user is given the vector in the "right ordering"<br class="">        c) In theory much of this could could be used for viewing from Matlab with the Matlab engine, regular binary files, HDF matlab format files and <br class="">             sockets, but the plumbing is not set up. Also python<br class=""><br class="">  3)   What to do once the data is "in the visualizer", for example sample python scripts, Matlab scripts, Visit directions, .... We totally lack the <br class="">         directions and the scripts.<br class=""><br class="">  So maybe there are at least two tasks (issues?) that come with this question <br class=""><br class="">I) make the paradigm more uniform and add the functionality needed to the viewers for for more combinations.<br class=""><br class="">II) add scripts and documentation for the usage.<br class=""><br class="">  For the beginner example I would use DMDA with <br class="">     a) binary viewer for Python (plus needed utilities for reshaping automatically like Matlab) and displaying and <br class="">     b) matlab binary viewer for Matlab with script to show plotting<br class=""><br class="">  For DMPLEX we need something similar (same paradigm) but with some mesh loader and etc. I would only do this for Python (and just have docs saying it is possible for Matlab but the mesh loaders/displayers have to be written.)<br class=""><br class=""><br class="">  Barry<br class=""><br class="">A related note. For users not using a DM, the viewer defaults to a simple 1d output of the vectors. For users of their own mesh data structure (DMSHELL) they would be provide a viewer with DMShellSetView() (doesn't exist yet, but should) and if they need to also manipulate the vector in the viewer they would use VecSetOperation(VECOP_VIEW = 33, VECOP_LOAD = 41). This is an more advanced topic.<br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class="">On Jul 25, 2019, at 11:48 AM, Jed Brown via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" class="">petsc-dev@mcs.anl.gov</a>> wrote:<br class=""><br class="">Dave May via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" class="">petsc-dev@mcs.anl.gov</a>> writes:<br class=""><br class=""><blockquote type="cite" class="">I'd describe how to use the binary dump and how to generate vtk files.<br class=""><br class="">The first is the most universal as it's completely generic and does not<br class="">depend on a dm, thus users with their own mesh data structure and or don't<br class="">have a mesh at all can use it. Would be worth while also providing a<br class="">minimal python+mathplotlib script which loads the data and spits out a PDF<br class="">so folks don't have to depend on matlab.<br class=""></blockquote><br class="">If you have a parallel example that doesn't use DM, you're gonna have a<br class="">lot of bookkeeping to plot the data after loading the vector.  Seems<br class="">like a distraction that will trap a lot of people in the minutia instead<br class="">of the big picture.<br class=""></blockquote><br class=""></div></div></blockquote></div><br class=""></div></div></div></body></html>