LCOV - code coverage report
Current view: top level - algs/PostBL/meshkit - PostBL.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                 :            : #ifndef MESHKIT_PostBL_HPP
       2                 :            : #define MESHKIT_PostBL_HPP
       3                 :            : 
       4                 :            : #include <cassert>
       5                 :            : #include <string>
       6                 :            : #include <vector>
       7                 :            : #include <set>
       8                 :            : #include <math.h>
       9                 :            : #include <iomanip>
      10                 :            : 
      11                 :            : #include "meshkit/Types.hpp"
      12                 :            : #include "meshkit/Error.hpp"
      13                 :            : #include "meshkit/MeshScheme.hpp"
      14                 :            : #include "meshkit/ModelEnt.hpp"
      15                 :            : #include "meshkit/MKCore.hpp"
      16                 :            : #include "meshkit/SizingFunction.hpp"
      17                 :            : #include "meshkit/RegisterMeshOp.hpp"
      18                 :            : 
      19                 :            : #include "meshkit/LocalSet.hpp"
      20                 :            : #include "meshkit/LocalTag.hpp"
      21                 :            : #include "meshkit/Matrix.hpp"
      22                 :            : 
      23                 :            : #include "meshkit/iMesh.hpp"
      24                 :            : #include "meshkit/iGeom.hpp"
      25                 :            : #include "MBCN.h"
      26                 :            : 
      27                 :            : #include "meshkit/SimpleArray.hpp"
      28                 :            : #include "meshkit/parser.hpp"
      29                 :            : #include "meshkit/clock.hpp"
      30                 :            : #include "meshkit/mstream.hpp"
      31                 :            : 
      32                 :            : #include "MBiMesh.hpp"
      33                 :            : #include "moab/Interface.hpp"
      34                 :            : #include "moab/Range.hpp"
      35                 :            : #include "moab/CartVect.hpp"
      36                 :            : 
      37                 :            : 
      38                 :            : #include "moab/Skinner.hpp"
      39                 :            : #include "moab/AdaptiveKDTree.hpp"
      40                 :            : #include "moab/Matrix3.hpp"
      41                 :            : #include "moab/verdict/VerdictWrapper.hpp"
      42                 :            : #include "moab/ReadUtilIface.hpp"
      43                 :            : 
      44                 :            : 
      45                 :            : /*!
      46                 :            :  * \class PostBL
      47                 :            :  * \brief Options and Keywords Used in PostBL Algorithm
      48                 :            :  *
      49                 :            :  *  RUNNING: Postmesh Boundary Layer Tool can be run using the test_postbl executable in test/algs directory
      50                 :            :  example:-  test_postbl <name>.inp, where, <name> is the name of the input file containing the keywords below:
      51                 :            :  - bias    \verbatim      <double>    bias b/w different layers of boundary layer is always greater than zero. \endverbatim
      52                 :            :  - meshfile \verbatim     <string>    input mesh file name support by moab reader. \endverbatim
      53                 :            :  - surfaces  \verbatim    <integer>   id of the surface on which boundary layer needs to be created.  \endverbatim
      54                 :            :  - neumannset  \verbatim  <integer>   id of the neumann set on which boundary layer needs to be created.  \endverbatim
      55                 :            :  - material    \verbatim  <integer>   material id to which the newly created hexes will be assigned, default is 999999. \endverbatim
      56                 :            :  - thickness  \verbatim   <double>    boundary layer thickness. \endverbatim
      57                 :            :  - debug     \verbatim    <1 or 0>    print all the debug o/p if set to 1. A .log file is always created.  \endverbatim
      58                 :            :  - outfile   \verbatim    <string>    name of output mesh file, can be any format that is supported by moab.  \endverbatim
      59                 :            :  - end        \verbatim               this marks the end of input file for boundary layer generation.  \endverbatim
      60                 :            :  - Sample keyword file can be found here: data/test_postbl.inp
      61                 :            : */
      62                 :            : 
      63                 :            : namespace MeshKit {
      64                 :            : 
      65                 :            : #define DEFAULT_TEST_POSTBL  "test_postbl.inp"
      66                 :            : 
      67                 :            :   class MKCore;
      68                 :            : 
      69                 :            :   class PostBL : public MeshScheme
      70                 :            :   {
      71                 :            :   public:
      72                 :            :     /* \brief Constructor
      73                 :            :      *
      74                 :            :      * Create a new PostBL instance
      75                 :            :      * \param impl the iGeom instance handle for the Geom
      76                 :            :      */
      77                 :            :     PostBL(MKCore *mk, const MEntVector &me_vec);
      78                 :            : 
      79                 :            :     /* \brief Destructor
      80                 :            :      */
      81                 :            :     virtual ~PostBL();
      82                 :            : 
      83                 :            :     /**\brief Get class name */
      84                 :            :     static const char* name();
      85                 :            : 
      86                 :            :     /**\brief Function returning whether this scheme can mesh entities of t
      87                 :            :      *        the specified dimension.
      88                 :            :      *\param dim entity dimension
      89                 :            :      */
      90                 :            :     static bool can_mesh(iBase_EntityType dim);
      91                 :            : 
      92                 :            :     /** \brief Function returning whether this scheme can mesh the specified entity
      93                 :            :      *
      94                 :            :      * Used by MeshOpFactory to find scheme for an entity.
      95                 :            :      * \param me ModelEnt being queried
      96                 :            :      * \return If true, this scheme can mesh the specified ModelEnt
      97                 :            :      */
      98                 :            :     static bool can_mesh(ModelEnt *me);
      99                 :            : 
     100                 :            :     /**\brief Get list of mesh entity types that can be generated.
     101                 :            :      *\return array terminated with \c moab::MBMAXTYPE
     102                 :            :      */
     103                 :            :     static const moab::EntityType* output_types();
     104                 :            : 
     105                 :            :     /** \brief Return the mesh entity types operated on by this scheme
     106                 :            :      * \return array terminated with \c moab::MBMAXTYPE
     107                 :            :      */
     108                 :            :     virtual const moab::EntityType* mesh_types_arr() const;
     109                 :            : 
     110                 :            :     /** \brief Re-implemented here so we can check topological dimension of model_ent
     111                 :            :      * \param model_ent ModelEnt being added
     112                 :            :      */
     113                 :            :     virtual bool add_modelent(ModelEnt *model_ent);
     114                 :            : 
     115                 :            :     //! Setup is a no-op, but must be provided since it's pure virtual
     116                 :            :     virtual void setup_this();
     117                 :            : 
     118                 :            :     //! execute PostBL graph node
     119                 :            :     virtual void execute_this();
     120                 :            : 
     121                 :            : 
     122                 :            :     /** \brief Improved algorithm
     123                 :            :      */
     124                 :            :     void Algo2 ();
     125                 :            : 
     126                 :            :     /** \brief Prepare input/output files for reading/writing
     127                 :            :      *  command line args and testdir for default test case
     128                 :            :      * \param TestDir directory where test will be located and command line arguments.
     129                 :            :      */
     130                 :            :     void PrepareIO (int argc, char *argv[], std::string TestDir);
     131                 :            : 
     132                 :            :     /** \brief get the normals given connectivity of a quad
     133                 :            :      * \param conn connectivity array type EntityHandle
     134                 :            :      *  \param v return normal vector
     135                 :            :      */
     136                 :            :     void get_normal_quad (std::vector<moab::EntityHandle>conn, moab::CartVect &v)   ;
     137                 :            : 
     138                 :            :     /** \brief get the normals given connectivity of a quad
     139                 :            :      * \param conn connectivity array type moab::EntityHandle
     140                 :            :      *  \param v return normal vector
     141                 :            :      */
     142                 :            :     void get_normal_edge (std::vector<moab::EntityHandle>conn, moab::CartVect AB, moab::CartVect &v);
     143                 :            : 
     144                 :            :     /** \brief compute determinant of jacobian of a hex element
     145                 :            :      *  \param conn connectivity array
     146                 :            :      *  \param offset passed when conn array has connectivity of more than one element
     147                 :            :      *  \param  detJ is returned
     148                 :            :      */
     149                 :            :     void get_det_jacobian (std::vector<moab::EntityHandle> conn, int offset, double &detJ);
     150                 :            : 
     151                 :            :     /** \brief compute edge length from the vertex specified
     152                 :            :      *  \param vector of quads/edges
     153                 :            :      *  \param vertex specified
     154                 :            :      *  \param  o/p edge length
     155                 :            :      */
     156                 :            :     void find_min_edge_length (moab::Range, moab::EntityHandle, moab::Range, double &e_len);
     157                 :            :     
     158                 :            :     /** \brief push the bulk mesh after creating the normals
     159                 :            :      */
     160                 :            :     int push_bulk_mesh(VerdictWrapper vw);
     161                 :            :     
     162                 :            :     /** \brief compute the normal for each node of the boundary layer specified
     163                 :            :      */
     164                 :            :     int compute_normals();
     165                 :            :     
     166                 :            :     /** \brief create boundary layer elements after pushing the bulk mesh
     167                 :            :      */
     168                 :            :     int create_bl_elements(VerdictWrapper vw);
     169                 :            : 
     170                 :            :   private:
     171                 :            :     //! iGeom Impl for calling geometry creation/manipulation operations
     172                 :            :     iGeom *igeom;
     173                 :            : 
     174                 :            :     //! iMesh Impl for calling mesh creation/manipulation operations
     175                 :            :     iMesh *imesh;
     176                 :            : 
     177                 :            :     //! MOAB Impl for calling mesh creation/manipulation operations
     178                 :            :     moab::Interface *mb;
     179                 :            :     moab::Tag GDTag, GIDTag, NTag, MTag, STag, FTag, MNTag, MatIDTag, BLNodeIDTag;
     180                 :            :     std::vector<moab::EntityHandle> old_hex, new_vert, conn, qconn, tri_conn, tet_conn;
     181                 :            :     std::vector<moab::EntityHandle> adj_qconn, 
     182                 :            :             old_hex_conn, adj_hex_nodes1;
     183                 :            :     moab::CartVect surf_normal;
     184                 :            :     moab::Range quads, nodes,edges, fixmat_ents;
     185                 :            :     double coords_new_quad[3];
     186                 :            :     double coords_old_quad[3];    
     187                 :            :     moab::EntityHandle hex, hex1, hex2;
     188                 :            :     moab::Range::iterator mset_it, set_it;
     189                 :            :     moab::EntityHandle mthis_set, geom_set;
     190                 :            :     moab::Range sets, n_sets, m_sets;
     191                 :            :     
     192                 :            :     
     193                 :            :     // ! parser related
     194                 :            :     bool debug, hybrid, check_bl_edge_length;
     195                 :            :     // !! file Input
     196                 :            :     std::ifstream m_FileInput;
     197                 :            :     mstream m_LogFile;
     198                 :            :     std::string szInputString;
     199                 :            :     std::string szComment;
     200                 :            :     int MAXCHARS, m_nLineNumber;
     201                 :            :     // all_bl is the vector storing the number of materials a particular boundary layer node is attached to
     202                 :            :     std::vector<int> blmaterial_id, all_bl;
     203                 :            :     
     204                 :            :     // ! variables to parse
     205                 :            :     std::string m_InputFile, m_MeshFile, m_OutFile, m_LogName, m_MeshType;
     206                 :            :     int m_SurfId, m_NeumannSet, m_Material, m_HConn, hex27;
     207                 :            :     double m_Thickness, m_MinEdgeLength;
     208                 :            :     int m_Intervals, m_JacCalls, tri_sch, fixmat;
     209                 :            :     double m_Bias, m_JLo, m_JHi;
     210                 :            :     // ! variable for hex and tet meshes
     211                 :            :     int m_Conn, m_BElemNodes;
     212                 :            :     int m_GD, m_BLDim;
     213                 :            :     std::string m_Card;
     214                 :            :     int err;
     215                 :            : 
     216                 :            :     // ! error handlers
     217                 :            :     enum ErrorStates { INVALIDINPUT};
     218                 :            :     void IOErrorHandler (ErrorStates) const;
     219                 :            :   };
     220                 :            : 
     221                 :        502 :   inline const char* PostBL::name()
     222                 :            :   {
     223                 :        502 :     return "PostBL";
     224                 :            :   }
     225                 :            : 
     226                 :        160 :   inline bool PostBL::can_mesh(iBase_EntityType)
     227                 :            :   {
     228                 :        160 :     return false;
     229                 :            :   }
     230                 :            : 
     231                 :          0 :   inline bool PostBL::can_mesh(ModelEnt *)
     232                 :            :   {
     233                 :          0 :     return true;
     234                 :            :   }
     235                 :            : 
     236                 :          0 :   inline const moab::EntityType* PostBL::mesh_types_arr() const
     237                 :            :   {
     238                 :          0 :     return output_types();
     239                 :            :   }
     240                 :            : 
     241                 :            : } // namespace MeshKit
     242                 :            : #endif

Generated by: LCOV version 1.11