Branch data Line data Source code
1 : : //-----------------------------------C++-------------------------------------//
2 : : // File: src/algs/TFIMapping.hpp
3 : : // Wednesday February 11 10:50 2011
4 : : // Brief: TFIMapping class definition: generate the all-quad mesh by
5 : : // TFI mapping. Before using this class, four edges should have already
6 : : // been meshed by EdgeMesher
7 : : //---------------------------------------------------------------------------//
8 : :
9 : :
10 : : #ifndef MESHKIT_TFIMAPPING_HPP
11 : : #define MESHKIT_TFIMAPPING_HPP
12 : :
13 : : #include <stdlib.h>
14 : : #include <stdio.h>
15 : : #include <assert.h>
16 : : #include <string>
17 : : #include <iostream>
18 : : #include <fstream>
19 : : #include <string.h>
20 : : #include <limits.h>
21 : :
22 : : #include <iGeom.h>
23 : : #include "Global.hpp"
24 : : #include "meshkit/MKCore.hpp"
25 : : #include "meshkit/SizingFunction.hpp"
26 : : #include "moab/ReadUtilIface.hpp"
27 : : #include <iMesh.h>
28 : : #include <set>
29 : : #include <iRel.h>
30 : : #include <vector>
31 : :
32 : : #include "meshkit/MeshScheme.hpp"
33 : :
34 : : using namespace std;
35 : :
36 : : namespace MeshKit {
37 : : //===========================================================================//
38 : : /*!
39 : : * \class TFIMapping
40 : : * \brief Generate the all-Quad mesh by TFI mapping
41 : : *
42 : : * TFIMapping generates the all-quad mesh by trans-finite interpolation with
43 : : * i, j parameters
44 : : */
45 : : //===========================================================================//
46 : : class TFIMapping: public MeshScheme {
47 : : public:
48 : :
49 : : TFIMapping(MKCore *mk_core, const MEntVector &me_vec);
50 : : ~TFIMapping();
51 : :
52 : : virtual void setup_this();
53 : : virtual void execute_this();
54 : :
55 : : /**\brief Get class name */
56 : 961 : static const char* name()
57 : : {
58 : 961 : return "TFIMapping";
59 : : }
60 : :
61 : : /**\brief Function returning whether this scheme can mesh entities of t
62 : : * the specified dimension.
63 : : *\param dim entity dimension
64 : : */
65 : 160 : static bool can_mesh(iBase_EntityType dim)
66 : : {
67 : 160 : return iBase_FACE == dim;
68 : : }
69 : :
70 : : /** \brief Function returning whether this scheme can mesh the specified entity
71 : : *
72 : : * Used by MeshOpFactory to find scheme for an entity.
73 : : * \param me ModelEnt being queried
74 : : * \return If true, this scheme can mesh the specified ModelEnt
75 : : */
76 : 0 : static bool can_mesh(ModelEnt *me)
77 : : {
78 : 0 : return canmesh_region(me);
79 : : }
80 : :
81 : : /**\brief Get list of mesh entity types that can be generated.
82 : : *\return array terminated with \c moab::MBMAXTYPE
83 : : */
84 : : static const moab::EntityType* output_types();
85 : :
86 : : /** \brief Return the mesh entity types operated on by this scheme
87 : : * \return array terminated with \c moab::MBMAXTYPE
88 : : */
89 : 0 : virtual const moab::EntityType* mesh_types_arr() const
90 : : {
91 : 0 : return output_types();
92 : : }
93 : : void skip_improve()
94 : : {
95 : : _shapeImprove = false;// by default it is true, but sometimes we need to skip it
96 : : }
97 : :
98 : : private:
99 : :
100 : : bool _shapeImprove;
101 : : //implement the transfinite interpolation between (pt_0s, pt_1s) and (pt_r0, pt_r1)
102 : : void parametricTFI3D(double *pts, double r, double s, double pt_0s[3], double pt_1s[3], double pt_r0[3], double pt_r1[3]);
103 : :
104 : : //generate the mesh on the linking surface
105 : : int SurfMapping(ModelEnt *ent);
106 : :
107 : : //generate the mesh on the cylinder-like linking surface
108 : : int cylinderSurfMapping(ModelEnt *ent);
109 : :
110 : : // transform from source line to target line, such that
111 : : // target= A * ( source - 2*sc + tc) + sc
112 : : void computeTransformation(Vector3D & A, Vector3D & B, Vector3D & C, Vector3D & D,
113 : : Matrix3D & transMatrix);
114 : :
115 : : void SurfImprove(iBase_EntityHandle surface, iBase_EntitySetHandle surfMesh, iBase_EntityType entity_type);
116 : :
117 : : //smooth the quadrilateral mesh on the linking surface
118 : : void SmoothWinslow(std::vector<iBase_EntityHandle> &List_i, std::vector<iBase_EntityHandle> &List_ii, std::vector<
119 : : iBase_EntityHandle> &List_j, std::vector<iBase_EntityHandle> &List_jj, std::vector<iBase_EntityHandle> &InteriorNodes,
120 : : std::vector<iBase_EntityHandle> &quads, iBase_TagHandle &taghandle, ModelEnt *ent);
121 : :
122 : : };
123 : :
124 : : }
125 : :
126 : : #endif
127 : :
|