Branch data Line data Source code
1 : : /**
2 : : * MOAB, a Mesh-Oriented datABase, is a software component for creating,
3 : : * storing and accessing finite element mesh data.
4 : : *
5 : : * Copyright 2008 Sandia Corporation. Under the terms of Contract
6 : : * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
7 : : * retains certain rights in this software.
8 : : *
9 : : * This library is free software; you can redistribute it and/or
10 : : * modify it under the terms of the GNU Lesser General Public
11 : : * License as published by the Free Software Foundation; either
12 : : * version 2.1 of the License, or (at your option) any later version.
13 : : *
14 : : */
15 : :
16 : : #ifndef SWEPT_ELEMENT_SEQUENCE
17 : : #define SWEPT_ELEMENT_SEQUENCE
18 : :
19 : : //
20 : : // Class: SweptElementSequence
21 : : //
22 : : // Purpose: represent a swept element of mesh
23 : : //
24 : :
25 : : #include "ElementSequence.hpp"
26 : : #include "ScdElementData.hpp"
27 : :
28 : : namespace moab
29 : : {
30 : :
31 : : class SweptElementSeq : public ElementSequence
32 : : {
33 : : public:
34 : : //! constructor
35 : : SweptElementSeq( EntityHandle start_handle, const int imin, const int jmin, const int kmin, const int imax,
36 : : const int jmax, const int kmax, const int* Cq );
37 : :
38 : : virtual ~SweptElementSeq();
39 : :
40 : : ScdElementData* sdata()
41 : : {
42 : : return reinterpret_cast< ScdElementData* >( data() );
43 : : }
44 : 0 : ScdElementData const* sdata() const
45 : : {
46 : 0 : return reinterpret_cast< const ScdElementData* >( data() );
47 : : }
48 : :
49 : : //! get handle of vertex at i, j, k
50 : : EntityHandle get_vertex( const int i, const int j, const int k ) const
51 : : {
52 : : return get_vertex( HomCoord( i, j, k ) );
53 : : }
54 : :
55 : : //! get handle of vertex at homogeneous coords
56 : : inline EntityHandle get_vertex( const HomCoord& coords ) const
57 : : {
58 : : return sdata()->get_vertex( coords );
59 : : }
60 : :
61 : : //! get handle of element at i, j, k
62 : : EntityHandle get_element( const int i, const int j, const int k ) const
63 : : {
64 : : return sdata()->get_element( i, j, k );
65 : : }
66 : :
67 : : //! get handle of element at homogeneous coords
68 : : EntityHandle get_element( const HomCoord& coords ) const
69 : : {
70 : : return sdata()->get_element( coords.i(), coords.j(), coords.k() );
71 : : }
72 : :
73 : : //! get min params for this element
74 : : const HomCoord& min_params() const
75 : : {
76 : : return sdata()->min_params();
77 : : }
78 : : void min_params( HomCoord& coords ) const
79 : : {
80 : : coords = min_params();
81 : : }
82 : : void min_params( int& i, int& j, int& k ) const
83 : : {
84 : : i = min_params().i();
85 : : j = min_params().j();
86 : : k = min_params().k();
87 : : }
88 : :
89 : : //! get max params for this element
90 : : const HomCoord& max_params() const
91 : : {
92 : : return sdata()->max_params();
93 : : }
94 : : void max_params( HomCoord& coords ) const
95 : : {
96 : : coords = max_params();
97 : : }
98 : : void max_params( int& i, int& j, int& k ) const
99 : : {
100 : : i = max_params().i();
101 : : j = max_params().j();
102 : : k = max_params().k();
103 : : }
104 : :
105 : : //! get the number of vertices in each direction, inclusive
106 : : void param_extents( int& di, int& dj, int& dk ) const
107 : : {
108 : : sdata()->param_extents( di, dj, dk );
109 : : }
110 : :
111 : : //! given a handle, get the corresponding parameters
112 : 0 : ErrorCode get_params( const EntityHandle ehandle, int& i, int& j, int& k ) const
113 : : {
114 : 0 : return sdata()->get_params( ehandle, i, j, k );
115 : : }
116 : :
117 : : //! convenience functions for parameter extents
118 : : int i_min() const
119 : : {
120 : : return min_params().i();
121 : : }
122 : : int j_min() const
123 : : {
124 : : return min_params().j();
125 : : }
126 : : int k_min() const
127 : : {
128 : : return min_params().k();
129 : : }
130 : : int i_max() const
131 : : {
132 : : return max_params().i();
133 : : }
134 : : int j_max() const
135 : : {
136 : : return max_params().j();
137 : : }
138 : : int k_max() const
139 : : {
140 : : return max_params().k();
141 : : }
142 : :
143 : : //! test the bounding vertex sequences and determine whether they fully
144 : : //! define the vertices covering this element block's parameter space
145 : : inline bool boundary_complete() const
146 : : {
147 : : return sdata()->boundary_complete();
148 : : }
149 : :
150 : : //! test whether this sequence contains these parameters
151 : : bool contains( const int i, const int j, const int k ) const
152 : : {
153 : : return sdata()->contains( HomCoord( i, j, k ) );
154 : : }
155 : : inline bool contains( const HomCoord& coords ) const
156 : : {
157 : : return sdata()->contains( coords );
158 : : }
159 : :
160 : : //! get connectivity of an entity given entity's parameters
161 : 0 : ErrorCode get_params_connectivity( const int i, const int j, const int k,
162 : : std::vector< EntityHandle >& connectivity ) const
163 : : {
164 : 0 : return sdata()->get_params_connectivity( i, j, k, connectivity );
165 : : }
166 : :
167 : : /***************** Methods from ElementSeq *****************/
168 : :
169 : : virtual ErrorCode get_connectivity( EntityHandle handle, std::vector< EntityHandle >& connect,
170 : : bool topological = false ) const;
171 : :
172 : : virtual ErrorCode get_connectivity( EntityHandle handle, EntityHandle const*& connect, int& connect_length,
173 : : bool topological = false, std::vector< EntityHandle >* storage = 0 ) const;
174 : :
175 : : virtual ErrorCode set_connectivity( EntityHandle handle, EntityHandle const* connect, int connect_length );
176 : :
177 : : virtual EntityHandle* get_connectivity_array();
178 : :
179 : : /***************** Methods from EntitySequence *****************/
180 : :
181 : : /* Replace the ElementSequence implementation of this method with
182 : : * one that always returns zero, because we cannot re-use handles
183 : : * that are within a ScdElementData
184 : : */
185 : : virtual int values_per_entity() const;
186 : :
187 : : virtual EntitySequence* split( EntityHandle here );
188 : :
189 : : virtual SequenceData* create_data_subset( EntityHandle start_handle, EntityHandle end_handle ) const;
190 : :
191 : : virtual void get_const_memory_use( unsigned long& bytes_per_entity, unsigned long& size_of_sequence ) const;
192 : :
193 : : protected:
194 : 0 : SweptElementSeq( SweptElementSeq& split_from, EntityHandle here ) : ElementSequence( split_from, here ) {}
195 : : };
196 : :
197 : : } // namespace moab
198 : :
199 : : #endif
|