LCOV - code coverage report
Current view: top level - algs/Sweep/meshkit - OneToOneSwept.hpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 4 8 50.0 %
Date: 2020-07-01 15:24:36 Functions: 2 4 50.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : //-----------------------------------C++-------------------------------------//
       2                 :            : // File: src/algs/OneToOneSwept.hpp
       3                 :            : // Wednesday February 11 10:50 2011
       4                 :            : // Brief: OneToOneSwept class definition: generate the all-hexahedral mesh by
       5                 :            : //        general sweeping 
       6                 :            : //---------------------------------------------------------------------------//
       7                 :            : 
       8                 :            : 
       9                 :            : #ifndef MESHKIT_ONETOONESWEPT_HPP
      10                 :            : #define MESHKIT_ONETOONESWEPT_HPP
      11                 :            : 
      12                 :            : #include <stdlib.h>
      13                 :            : #include <stdio.h>
      14                 :            : #include <assert.h>
      15                 :            : #include <string>
      16                 :            : #include <iostream>
      17                 :            : #include <fstream>
      18                 :            : #include <string.h>
      19                 :            : #include <limits.h>
      20                 :            : #include <math.h>
      21                 :            : 
      22                 :            : #include "Global.hpp"
      23                 :            : #include "meshkit/MKCore.hpp"
      24                 :            : #include "meshkit/ModelEnt.hpp"
      25                 :            : #include "meshkit/SizingFunction.hpp"
      26                 :            : 
      27                 :            : #include <iMesh.h>
      28                 :            : #include <iGeom.h>
      29                 :            : #include <iRel.h>
      30                 :            : #include <vector>
      31                 :            : #include <set>
      32                 :            : #include <list>
      33                 :            : 
      34                 :            : #include "meshkit/MeshScheme.hpp"
      35                 :            : 
      36                 :            : using namespace std;
      37                 :            : 
      38                 :            : namespace MeshKit {
      39                 :            : //===========================================================================//
      40                 :            : /*!
      41                 :            :  * \class OneToOneSwept
      42                 :            :  * \brief Generate the all-hexahedral mesh by sweeping
      43                 :            :  *
      44                 :            :  * OneToOneSwept generates the all-hexahedral mesh by sweeping the source mesh
      45                 :            :  * to the target surface
      46                 :            :  */
      47                 :            : //===========================================================================//
      48                 :            : 
      49                 :            : class OneToOneSwept: public MeshScheme {
      50                 :            : public:
      51                 :            : 
      52                 :            :   OneToOneSwept(MKCore *mk_core, const MEntVector &me_vec);
      53                 :            :   ~OneToOneSwept();
      54                 :            : 
      55                 :            :   virtual void setup_this();
      56                 :            :   virtual void execute_this();
      57                 :            : 
      58                 :            :   /**\brief Get class name */
      59                 :       1005 :   static const char* name()
      60                 :            :   {
      61                 :       1005 :     return "OneToOneSwept";
      62                 :            :   }
      63                 :            : 
      64                 :            :   /**\brief Function returning whether this scheme can mesh entities of t
      65                 :            :    *        the specified dimension.
      66                 :            :    *\param dim entity dimension
      67                 :            :    */
      68                 :        160 :   static bool can_mesh(iBase_EntityType dim)
      69                 :            :   {
      70                 :        160 :     return iBase_REGION == dim;
      71                 :            :   }
      72                 :            : 
      73                 :            :   /** \brief Function returning whether this scheme can mesh the specified entity
      74                 :            :    *
      75                 :            :    * Used by MeshOpFactory to find scheme for an entity.
      76                 :            :    * \param me ModelEnt being queried
      77                 :            :    * \return If true, this scheme can mesh the specified ModelEnt
      78                 :            :    */
      79                 :          0 :   static bool can_mesh(ModelEnt *me)
      80                 :            :   {
      81                 :          0 :     return canmesh_region(me);
      82                 :            :   }
      83                 :            : 
      84                 :            :   /**\brief Get list of mesh entity types that can be generated.
      85                 :            :    *\return array terminated with \c moab::MBMAXTYPE
      86                 :            :    */
      87                 :            :   static const moab::EntityType* output_types();
      88                 :            : 
      89                 :            :   /** \brief Return the mesh entity types operated on by this scheme
      90                 :            :    * \return array terminated with \c moab::MBMAXTYPE
      91                 :            :    */
      92                 :          0 :   virtual const moab::EntityType* mesh_types_arr() const
      93                 :            :   {
      94                 :          0 :     return output_types();
      95                 :            :   }
      96                 :            : 
      97                 :            :   //specify the source surface for OneToOneSwept class
      98                 :            :   void SetSourceSurface(int index);
      99                 :            : 
     100                 :            :   //specify the target surface for OneToOneSwept class
     101                 :            :   void SetTargetSurface(int index);
     102                 :            : 
     103                 :            : private:
     104                 :            : #ifdef HAVE_ARMADILLO
     105                 :            :   void SurfMeshHarmonic(iBase_EntityHandle vol, vector<iBase_EntityHandle> &newNodehandle);
     106                 :            : #endif
     107                 :            :   //determine whether the source surface is concave or multi-connected
     108                 :            :   bool isConcave();
     109                 :            : 
     110                 :            :   void BuildLateralBoundaryLayers(ModelEnt * me, std::vector<moab::EntityHandle> & layers);
     111                 :            : 
     112                 :            :   moab::ErrorCode NodeAbove(moab::EntityHandle node1, moab::EntityHandle node2, moab::Range & quadsOnLateralSurfaces,
     113                 :            :       moab::EntityHandle & node3, moab::EntityHandle & node4);
     114                 :            : 
     115                 :            :   moab::ErrorCode FourthNodeInQuad(moab::EntityHandle node1, moab::EntityHandle node2, moab::EntityHandle node3,
     116                 :            :       moab::Range & quadsOnLateralSurfaces, moab::EntityHandle & node4);
     117                 :            : 
     118                 :            :   //function for all-quad meshing on the target surface
     119                 :            :   int TargetSurfProjection(std::vector<moab::EntityHandle> & boundLayers);
     120                 :            : 
     121                 :            :   // to compute node positions in the interior of volume, numLayers-1 times
     122                 :            :   // use similar code to TargetSurfProjection, but do not project on surface...
     123                 :            :   int ProjectInteriorLayers(std::vector<moab::EntityHandle> & boundLayers, vector<vector<Vertex> > &linkVertexList);
     124                 :            : 
     125                 :            :   //create the hexahedral elements between the source surface and target surface
     126                 :            :   int CreateElements(vector<vector<Vertex> > &linkVertexList);
     127                 :            : 
     128                 :            :   // input: list of nodes on source, boundary center, list of nodes on target, target center
     129                 :            :   // output: 3x3 matrix A such that
     130                 :            :   //  target= A * ( source - 2*sc + tc) + sc
     131                 :            :   void computeTransformationFromSourceToTarget(std::vector<Vector3D> & sNodes, Vector3D & sc,
     132                 :            :       std::vector<Vector3D> & tNodes, Vector3D & tc, Matrix3D & transMatrix);
     133                 :            : 
     134                 :            : #ifdef HAVE_MESQUITE
     135                 :            :   //target surface mesh by Mesquite
     136                 :            :   void SurfMeshOptimization();
     137                 :            : #endif
     138                 :            : 
     139                 :            : private:
     140                 :            :   //private member variable
     141                 :            :   iBase_EntityHandle sourceSurface;
     142                 :            :   iBase_EntityHandle targetSurface;
     143                 :            :   iBase_EntityHandle volume;
     144                 :            :   moab::Interface *mb;
     145                 :            :   int numLayers;
     146                 :            :   int numLoops;
     147                 :            :   int sizeBLayer;
     148                 :            :   iGeom * igeom_inst;
     149                 :            :   int index_src, index_tar;
     150                 :            :   iBase_TagHandle geom_id_tag;
     151                 :            : 
     152                 :            :   std::vector<Vertex> NodeList; //mesh nodes on the source surface
     153                 :            :   std::vector<Vertex> TVertexList; //mesh nodes on the target surface
     154                 :            : 
     155                 :            :   std::vector<Face> FaceList;
     156                 :            :   iBase_EntitySetHandle volumeSet;
     157                 :            : 
     158                 :            :   std::set<moab::EntityHandle> markedMoabEnts;
     159                 :            : };
     160                 :            : 
     161                 :            : }
     162                 :            : 
     163                 :            : #endif
     164                 :            : 

Generated by: LCOV version 1.11