In ParaView there is currently no way to color the side of an element. Only
point/nodal data or cell/element data can be plotted. The normal way to get
around this is to do something like the ExodusII file format does which has
separate "cells" for boundaries (e.g. 2D boundary cells for 3D domains).



On Sat, May 13, 2017 at 1:31 AM, Julian Andrej <[email protected]> wrote:

> Maybe you could just project a DG function with a certain value on the
> corresponding boundary and then write the result with your preferred
> IO?
>
> On Fri, May 12, 2017 at 11:18 PM, Shayan Hoshyari <[email protected]>
> wrote:
> > Hi,
> >
> > I have this incomplete piece of code. It is definitely an overkill, but I
> > thought it might help.
> >
> > *********************************************************
> >
> > struct Face
> > {
> >     uint bdry_id;
> >     libMesh::ElemType type;
> >     std::vector<uint> nodes;
> >
> >     Face(const uint _id, const libMesh::ElemType type_in,
> > std::vector<uint>& nodes_in):
> >         bdry_id(_id), type(type_in), nodes(nodes_in)
> >         {}
> > };
> >
> > void write_bdry_ids(libMesh::ReplicatedMesh &_mesh)
> > {
> >     // Vector of boundary faces
> >     std::vector<Face*> _faces_bdry;
> >     typedef std::vector<Face*>::iterator face_iterator;
> >
> >
> >     /*
> >      *   Loop over all elements to find the boundary faces
> >      */
> >     for(auto el = _mesh.active_elements_begin();
> >         el !=  _mesh.active_elements_end() ;
> >         ++el)
> >     {
> >         const Elem* elem = *el;
> >         const unsigned int elem_id = elem->id();
> >
> >         for (uint side=0; side<elem->n_sides(); side++)
> >         {
> >             // get side and its nodes
> >             std::vector<uint> nodes_side;
> >             UniquePtr<Elem> elem_side = elem->side(side);
> >             std::vector<boundary_id_type> bdry_ids;
> >
> >             // if the side is on boundary
> >             if (elem->neighbor(side) == NULL)
> >             {
> >
> >                 _mesh.boundary_info->boundary_ids(elem, side, bdry_ids);
> >                 int bdry_id;
> >
> >                 // Check boundary ids
> >                 if(bdry_ids.size()>0)  bdry_id=bdry_ids.front();
> >                 else bdry_id = -2000000;
> >
> >                 // Create the face
> >                 for (uint node_id=0 ; node_id < elem_side->n_nodes() ;
> > node_id++)
> >                 {
> >                     const Node &node = *elem_side->get_node(node_id);
> >                     nodes_side.push_back(node.id());
> >                 }
> >                 Face *fc = new Face(bdry_id, elem_side->type()
> ,nodes_side);
> >                 _faces_bdry.push_back(fc);
> >
> >             } // End of boundary face
> >         } // End of element sides
> >     } // End of elements
> >
> >     /*
> >      * Find vertices on the boundary
> >      */
> >     std::set<uint> bdry_verts;
> >     std::map<uint, uint> map_vert_old_to_new;
> >     std::vector<uint>   map_vert_new_to_old;
> >
> >     for(face_iterator fc = _faces_bdry.begin() ; fc !=
> > _faces_bdry.end();    ++fc)
> >     {
> >         const Face *face = *fc;
> >
> >         // record the nodes
> >         for (auto it = face->nodes.begin(); it != face->nodes.end() ;
> ++it)
> >         {
> >             bdry_verts.insert(*it);
> >         }
> >     } // Found all verts on the boundary
> >
> >     /*
> >      * Give index on the vertices on the boundary
> >      */
> >     {
> >         std::set<uint>::iterator it = bdry_verts.begin();
> >         const std::set<uint>::iterator it_end = bdry_verts.end();
> >         uint inew = 0, iold;
> >         for(; it != it_end ; ++it, ++inew)
> >         {
> >             iold = *it;
> >             map_vert_old_to_new.insert( std::make_pair(iold, inew) );
> >             map_vert_new_to_old.push_back( iold );
> >         }
> >     }
> >
> >     /*
> >      * Create a mesh using the old mesh
> >      */
> >     uint n_points = map_vert_new_to_old.size();
> >     ReplicatedMesh ms(_mesh.comm());
> >
> >     // Set mesh dimensions
> >     ms.set_mesh_dimension(2);
> >
> >     // Add the vertices to the mesh
> >     ms.reserve_nodes ( n_points );
> >     for (uint pn=0 ; pn < n_points ; pn++)
> >     {
> >         const uint po = map_vert_new_to_old[pn];
> >         const Point &pointn = _mesh.point(po);
> >         ms.add_point (pointn, pn);
> >     }
> >
> >     // Add the elements to the mesh
> >     uint face_id = 0;
> >     for(face_iterator fc = _faces_bdry.begin() ; fc !=
> > _faces_bdry.end();    ++fc, ++face_id)
> >     {
> >         const Face *face = *fc;
> >
> >         Elem * elem = Elem::build(face->type).release();
> >         elem->set_id(face_id);
> >         elem = ms.add_elem(elem);
> >         elem->subdomain_id() = 1;
> >
> >         libmesh_assert( elem->n_nodes() == face->nodes.size() );
> >         for (uint i=0; i<elem->n_nodes(); i++)
> >         {
> >             const uint node_id = map_vert_old_to_new[ face->nodes[i] ];
> >             elem->set_node(i) = ms.node_ptr(node_id);
> >         }
> >     }
> >
> >     /*
> >      * Write the old mesh
> >      */
> >     // 1- Create a equation_systems and add a system to it
> >     //    Set the solution of the system according to _face_bdry->bdry_id
> >     // 2- Write ms, and the system using any IO in libmesh.
> >
> > } // All done
> >
> >
> > *********************************************************
> >
> > Cheers,
> > --
> > Shayan Hoshyari
> > MASC MECH Student
> > UBC, Canada
> > http://tetra.mech.ubc.ca/projects/ANSLab/
> >
> > On Fri, May 12, 2017 at 12:17 PM, Salazar De Troya, Miguel <
> > [email protected]> wrote:
> >
> >> Hi
> >>
> >> I want to visualize the boundary id’s on paraview to make sure I am
> >> marking them correctly. I want to see the face of a certain element
> with a
> >> color that corresponds to its boundary id. Is there a quick way to do
> this?
> >> Are there other software that allow such visualization?
> >>
> >> Thanks
> >> Miguel
> >> ------------------------------------------------------------
> >> ------------------
> >> Check out the vibrant tech community on one of the world's most
> >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> >> _______________________________________________
> >> Libmesh-users mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/libmesh-users
> >>
> >
> >
> >
> > --
> > Shayan Hoshyari
> > ------------------------------------------------------------
> ------------------
> > Check out the vibrant tech community on one of the world's most
> > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > _______________________________________________
> > Libmesh-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/libmesh-users
>
>
>
> --
> Julian Andrej
>
> Chair of Automatic Control
> Faculty of Engineering
> Kiel University
> Kaiserstrasse 2 | 24143 Kiel | Germany
>
> L: Room F-116
> T: +49(0)431 880-6121
> F: +49(0)431 880-6278
> [email protected] | http://www.control.tf.uni-kiel.de
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Libmesh-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/libmesh-users
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to