LCOV - code coverage report
Current view: top level - geom/Cholla - ChollaSkinTool.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 65 85 76.5 %
Date: 2020-06-30 00:58:45 Functions: 5 6 83.3 %
Branches: 63 112 56.2 %

           Branch data     Line data    Source code
       1                 :            : //- Class:       ChollaSkinTool
       2                 :            : //- Description: Creates a skin defined by facets and points, depending on the
       3                 :            : //-              dimensionality of the desired skin.
       4                 :            : //- Owner:       Steve Owen
       5                 :            : //- Checked by:
       6                 :            : //- Version:
       7                 :            : #include "ChollaSkinTool.hpp"
       8                 :            : #include "FacetEntity.hpp"
       9                 :            : #include "TDGeomFacet.hpp"
      10                 :            : #include "CastTo.hpp"
      11                 :            : #include "ChollaSurface.hpp"
      12                 :            : #include "ChollaCurve.hpp"
      13                 :            : #include "CubitFacetEdge.hpp"
      14                 :            : #include "TDFacetBoundaryEdge.hpp"
      15                 :            : #include "ChollaDebug.hpp"
      16                 :            : #include "GfxDebug.hpp"
      17                 :            : 
      18                 :            : static int mydebug = 0;
      19                 :            : //==================================================================================
      20                 :            : //Function:  ChollaSkinTool (PUBLIC) (constructor)
      21                 :            : //==================================================================================
      22                 :        396 : ChollaSkinTool::ChollaSkinTool()
      23                 :            : {
      24                 :        396 : }
      25                 :            : //==================================================================================
      26                 :            : //Function:  ~ChollaSkinTool (PUBLIC) (destructor)
      27                 :            : //==================================================================================
      28                 :        396 : ChollaSkinTool::~ChollaSkinTool()
      29                 :            : {
      30                 :        396 : }
      31                 :            : 
      32                 :            : //==================================================================================
      33                 :            : //Function:  skin_1d  (PUBLIC)
      34                 :            : //Description:  creates a skin of the given facet entities.
      35                 :            : //==================================================================================
      36                 :          0 : CubitStatus ChollaSkinTool::skin_1d(DLIList<FacetEntity*> &facet_list,
      37                 :            :                                    ChollaCurve *&facet_curve_mesh_ptr)
      38                 :            : {
      39                 :          0 :   CubitStatus rv = CUBIT_SUCCESS;
      40                 :            :   
      41                 :            :   // create a ChollaCurve if we have to (only if this is a 1D facet)
      42                 :            :   
      43         [ #  # ]:          0 :   if (!facet_curve_mesh_ptr)
      44                 :            :   {
      45                 :          0 :     FacetEntity *edge_ptr = facet_list.get();
      46                 :          0 :     TDGeomFacet *td_gm = TDGeomFacet::get_geom_facet( edge_ptr );
      47         [ #  # ]:          0 :     facet_curve_mesh_ptr = new ChollaCurve( td_gm->get_block_id() );
      48                 :            :     
      49                 :            :     // associate all of the tooldata on the faces of this surf with the 
      50                 :            :     // new ChollaCurve
      51                 :            :     
      52                 :            :     int ii;
      53         [ #  # ]:          0 :     for (ii=0; ii<facet_list.size(); ii++)
      54                 :            :     {
      55                 :          0 :       edge_ptr = facet_list.get_and_step();
      56                 :          0 :       facet_curve_mesh_ptr->add_facet( edge_ptr );
      57                 :          0 :       td_gm = TDGeomFacet::get_geom_facet( edge_ptr );
      58                 :          0 :       td_gm->add_cholla_curve( facet_curve_mesh_ptr );
      59                 :            :     }
      60                 :            :   }
      61                 :            :   
      62                 :            :   // Note: the start and end points of this curve will be defined in 
      63                 :            :   // ChollaCurve::split_curve.  The BlockPointMesh objects at these points
      64                 :            :   // will be defined in MeshGeometryCreator::classify_node
      65                 :            :   
      66                 :          0 :   return rv;
      67                 :            : }
      68                 :            : 
      69                 :            : //==================================================================================
      70                 :            : //Function:  skin_2d  (PUBLIC)
      71                 :            : //Description:  creates a skin of the given mesh entities.
      72                 :            : //==================================================================================
      73                 :        396 : CubitStatus ChollaSkinTool::skin_2d(DLIList<FacetEntity*> &facet_list,
      74                 :            :                                    ChollaSurface *&facet_surface_mesh_ptr)
      75                 :            : {
      76         [ -  + ]:        396 :   if(facet_list.size() == 0){
      77                 :          0 :     return CUBIT_SUCCESS;
      78                 :            :   }
      79                 :            :   
      80                 :        396 :   int debugflag=0;
      81         [ -  + ]:        396 :   if (debugflag)
      82                 :            :   {
      83                 :          0 :     dcolor(CUBIT_YELLOW_INDEX);
      84                 :          0 :     dldraw( facet_list );
      85                 :          0 :     dview();
      86                 :          0 :     dcolor(CUBIT_RED_INDEX);
      87                 :            :   }
      88                 :        396 :   CubitStatus rv = CUBIT_SUCCESS;
      89                 :            :   int block_id;
      90                 :            : 
      91                 :            :   // create a ChollaSurface if we have to (only if this is a 2D model)
      92                 :            : 
      93                 :        396 :   FacetEntity *face_ptr = facet_list.get();
      94                 :        396 :   TDGeomFacet *td_gm = TDGeomFacet::get_geom_facet( face_ptr );
      95                 :        396 :   block_id = td_gm->get_block_id();
      96         [ +  + ]:        396 :   if (!facet_surface_mesh_ptr)
      97                 :            :   {
      98         [ +  - ]:         88 :     facet_surface_mesh_ptr = new ChollaSurface(block_id);
      99                 :            : 
     100                 :            :     // associate all of the tooldata on the faces of this surf with the new ChollaSurface
     101                 :            : 
     102                 :            :     int ii;
     103         [ +  + ]:       1144 :     for (ii=0; ii<facet_list.size(); ii++)
     104                 :            :     {
     105                 :       1056 :       face_ptr = facet_list.get_and_step();
     106                 :       1056 :       facet_surface_mesh_ptr->add_facet( face_ptr );
     107                 :       1056 :       td_gm = TDGeomFacet::get_geom_facet( face_ptr );
     108                 :       1056 :       td_gm->add_cholla_surf( facet_surface_mesh_ptr );
     109                 :       1056 :       td_gm->set_hit_flag( facet_surface_mesh_ptr->get_id() );
     110                 :            :     }
     111                 :            :   }
     112                 :            : 
     113                 :            :   // create a single ChollaCurve for this surface (assumes one loop of edges)
     114                 :            : 
     115         [ +  - ]:        396 :   ChollaCurve *fcm_ptr = new ChollaCurve( block_id );
     116                 :        396 :   facet_surface_mesh_ptr->add_curve( fcm_ptr );
     117                 :        396 :   fcm_ptr->add_surface( facet_surface_mesh_ptr );
     118                 :            : 
     119                 :            :   // loop through all faces on this surface searching for the boundary edges
     120                 :            : 
     121                 :            :   int jj, kk, ll;
     122         [ +  + ]:       2420 :   for ( kk = 0; kk < facet_list.size(); kk++)
     123                 :            :   {
     124         [ +  - ]:       2024 :     face_ptr = facet_list.get_and_step();
     125         [ +  - ]:       2024 :     DLIList<CubitFacetEdge*> edge_list;
     126         [ +  - ]:       2024 :     face_ptr->edges( edge_list );
     127                 :            : 
     128                 :            :     // loop through each edge on this face searching for boundary edges
     129                 :            : 
     130 [ +  - ][ +  + ]:       8096 :     for (jj=edge_list.size(); jj > 0; jj--)
     131                 :            :     {
     132         [ +  - ]:       6072 :       CubitFacetEdge *edge_ptr = edge_list.get_and_step();
     133                 :            : 
     134                 :            :       // check if this edge has already been processed from an adjacent surface.
     135                 :            :       // If it has, then tool data would have already been defined at this edge
     136                 :            :       // and by definition would be at the boundary (only tooldatas on edges
     137                 :            :       // at the boundary ofa surface are created)
     138                 :            : 
     139         [ +  - ]:       6072 :       TDGeomFacet *td_gm_edge = TDGeomFacet::get_geom_facet(edge_ptr);
     140                 :       6072 :       int on_boundary = 0;
     141         [ +  + ]:       6072 :       if (td_gm_edge != NULL)
     142                 :            :       { 
     143                 :       1188 :         on_boundary = 1;
     144                 :            : 
     145                 :            :         // check for internal C-zero edge
     146                 :            : 
     147 [ +  - ][ +  + ]:       1188 :         if (edge_ptr->num_adj_facets() == 2)
     148                 :            :         {
     149                 :            :           TDFacetBoundaryEdge *td_fbe = 
     150         [ +  - ]:       1056 :             TDFacetBoundaryEdge::get_facet_boundary_edge( edge_ptr );
     151         [ +  - ]:       1056 :           if (td_fbe != NULL)
     152                 :            :           {
     153 [ +  - ][ -  + ]:       1056 :             if (td_fbe->is_internal_edge())
     154                 :            :             {
     155                 :       1188 :               on_boundary = 0;
     156                 :            :             }
     157                 :            :           }
     158                 :            :         } 
     159                 :            :       }
     160                 :            : 
     161                 :            :       // check for general case where no tool data yet defined
     162                 :            : 
     163                 :            :       else 
     164                 :            :       {
     165         [ +  - ]:       4884 :         DLIList<FacetEntity*> adj_face_list;
     166                 :            : 
     167                 :            :         // check the adjacent faces to this edge.  If only one adjacent face, then
     168                 :            :         // it is on the boundary.  If more than one face, then the other face(s)
     169                 :            :         // must be associated with a surface other than facet_surface_mesh_ptr
     170                 :            :         // in order to be on the boundary
     171                 :            : 
     172         [ +  - ]:       4884 :         edge_ptr->get_parents( adj_face_list );
     173 [ +  - ][ +  + ]:       4884 :         if (adj_face_list.size() <= 1)
     174                 :            :         {
     175                 :        220 :           on_boundary = 1;
     176                 :            :         }
     177                 :            :         else
     178                 :            :         {
     179 [ +  - ][ +  + ]:      13992 :           for (ll=adj_face_list.size(); ll> 0 && !on_boundary; ll--)
                 [ +  - ]
     180                 :            :           {
     181         [ +  - ]:       9328 :             FacetEntity *adj_face_ptr = adj_face_list.get_and_step();
     182         [ +  + ]:       9328 :             if (adj_face_ptr != face_ptr)
     183                 :            :             {
     184         [ +  - ]:       4664 :               TDGeomFacet *td_gm_adjface = TDGeomFacet::get_geom_facet(adj_face_ptr);
     185         [ +  - ]:       4664 :               DLIList<ChollaSurface*> surf_list;
     186         [ +  - ]:       4664 :               td_gm_adjface->get_cholla_surfs( surf_list );
     187                 :            : 
     188                 :            :               // if it doesn't have an associated surface yet, then it is 
     189                 :            :               // a neighboring surface that has not been defined yet (this
     190                 :            :               // should only occur for the 2D case)
     191                 :            :                        
     192 [ +  - ][ -  + ]:       4664 :               if (surf_list.size() == 0)
     193                 :            :               {
     194                 :          0 :                 on_boundary = 1;
     195                 :            :               }
     196                 :            :               else
     197                 :            :               {
     198                 :            : 
     199                 :            :                 // there should only be one surface associated with
     200                 :            :                 // each face - otherwise we've screwed up somewhere  
     201                 :            : 
     202 [ +  - ][ -  + ]:       4664 :                 assert ( surf_list.size() == 1 );
     203                 :            : 
     204                 :            :                 // if the surface is not the same as the current surface
     205                 :            :                 // then we are at the boundary
     206                 :            : 
     207         [ +  - ]:       4664 :                 ChollaSurface *check_bsm_ptr = surf_list.get();
     208         [ -  + ]:       4664 :                 if (facet_surface_mesh_ptr != check_bsm_ptr)
     209                 :            :                 {
     210                 :          0 :                   on_boundary = 1;
     211                 :            :                 }
     212         [ +  - ]:       4664 :               }
     213                 :            :             }
     214                 :            :           }
     215         [ +  - ]:       4884 :         }
     216                 :            :       }
     217         [ +  + ]:       6072 :       if (on_boundary)
     218                 :            :       {
     219                 :            :         // create a tool data if needed
     220                 :            : 
     221         [ +  + ]:       1408 :         if (td_gm_edge == NULL)
     222                 :            :         {
     223         [ +  - ]:        220 :           TDGeomFacet::add_geom_facet(edge_ptr, -1); 
     224         [ +  - ]:        220 :           td_gm_edge = TDGeomFacet::get_geom_facet( edge_ptr );
     225         [ +  - ]:        220 :           edge_ptr->set_as_feature();
     226                 :            :         }
     227                 :            : 
     228                 :            :         // add the pointer to this surface onto the edge tool data
     229                 :            : 
     230         [ +  - ]:       1408 :         td_gm_edge->add_cholla_surf( facet_surface_mesh_ptr );
     231                 :            : 
     232                 :            :         // add this edge to the curve
     233                 :            : 
     234         [ +  - ]:       1408 :         fcm_ptr->add_facet( edge_ptr );
     235         [ -  + ]:       1408 :         if (mydebug)
     236         [ #  # ]:          0 :           dedraw(edge_ptr);
     237                 :            :       }
     238                 :            :     }
     239         [ +  - ]:       2024 :   }
     240                 :            : 
     241                 :        396 :   return rv;
     242 [ +  - ][ +  - ]:       6540 : }
     243                 :            : 
     244                 :            :        
     245                 :            :               
     246                 :            :   
     247                 :            : 
     248                 :            :       

Generated by: LCOV version 1.11