SheafSystem  0.0.0.0
structured_block_3d_crg_interval.cc
Go to the documentation of this file.
1 
2 //
3 // Copyright (c) 2014 Limit Point Systems, Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 
20 
21 #include "SheafSystem/structured_block_3d_crg_interval.h"
22 
23 #include "SheafSystem/assert_contract.h"
24 #include "SheafSystem/base_space_poset.h"
25 #include "SheafSystem/constant_index_space_interval.h"
26 #include "SheafSystem/error_message.h"
27 #include "SheafSystem/explicit_index_space_interval.h"
28 #include "SheafSystem/factory.h"
29 #include "SheafSystem/offset_index_space_handle.h"
30 #include "SheafSystem/offset_index_space_state.h"
31 #include "SheafSystem/list_index_space_handle.h"
32 #include "SheafSystem/list_index_space_state.h"
33 #include "SheafSystem/ijk_adjacency_index_space_interval.h"
34 #include "SheafSystem/ijk_connectivity_index_space_interval.h"
35 #include "SheafSystem/ijk_product_structure.h"
36 #include "SheafSystem/index_space_iterator.h"
37 #include "SheafSystem/section_space_schema_member.h"
38 #include "SheafSystem/std_iomanip.h"
39 #include "SheafSystem/std_string.h"
40 #include "SheafSystem/std_sstream.h"
41 #include "SheafSystem/structured_block_3d.h"
42 
43 using namespace std;
44 using namespace fiber_bundle; // Workaround for MS C++ bug.
45 
46 // ===========================================================
47 // STRUCTURED_BLOCK_3D_CRG_INTERVAL FACET
48 // ===========================================================
49 
50 // PUBLIC DATA MEMBERS
51 
54 {
55  _i_size = 0;
56  _j_size = 0;
57  _k_size = 0;
58  _jk_size = 0;
59 
60  _i_vertex_size = 0;
61  _j_vertex_size = 0;
62  _k_vertex_size = 0;
63  _jk_vertex_size = 0;
64 
65  _zone_begin = 0;
66  _zone_size = 0;
67 
68  _vertex_begin = 0;
69  _vertex_size = 0;
70 
71  // Postconditions:
72 
73  ensure(invariant());
74  ensure(!is_initialized());
75 
76  return;
77 }
78 
81 {
82  // Preconditions:
83 
84  // Body:
85 
86  if(is_valid(_lower_covers_begin))
87  {
88  // Delete the block interval.
89 
90  _id_spaces->delete_space(_lower_covers_begin);
91 
92  // Delete the zones interval.
93 
94  _id_spaces->delete_space(_lower_covers_begin + 1);
95 
96  // Delete the vertices interval.
97 
98  _id_spaces->delete_space(_lower_covers_begin + 1 + _zone_size);
99  }
100 
101  if(is_valid(_upper_covers_begin))
102  {
103  // Delete the block interval.
104 
105  _id_spaces->delete_space(_upper_covers_begin);
106 
107  // Delete the zones interval.
108 
109  _id_spaces->delete_space(_upper_covers_begin + 1);
110 
111  // Delete the vertices interval.
112 
113  _id_spaces->delete_space(_upper_covers_begin + 1 + _zone_size);
114  }
115 
116  // Postconditions:
117 
118  // Exit:
119 
120  return;
121 }
122 
125 i_size() const
126 {
127  return _i_size;
128 }
129 
132 j_size() const
133 {
134  return _j_size;
135 }
136 
139 k_size() const
140 {
141  return _k_size;
142 }
143 
144 
145 // PROTECTED DATA MEMBERS
146 
150 {
151  // Preconditions:
152 
153  require((0 <= xi) && (xi <= i_size()));
154  require((0 <= xj) && (xj <= j_size()));
155  require((0 <= xk) && (xk <= k_size()));
156 
157  // Body:
158 
159  pod_index_type result =
160  (xi*_j_vertex_size + xj)*_k_vertex_size + xk + _vertex_begin;
161 
162  // Postconditions:
163 
164  ensure(contains_member(result));
165 
166  // Exit:
167 
168  return result;
169 }
170 
171 // PRIVATE DATA MEMBERS
172 
173 
174 // ===========================================================
175 // HOMOGENEOUS_BLOCK FACET
176 // ===========================================================
177 
178 // PUBLIC DATA MEMBERS
179 
180 // PROTECTED DATA MEMBERS
181 
182 // PRIVATE DATA MEMBERS
183 
184 
185 // ===========================================================
186 // ZONES FACET
187 // ===========================================================
188 
189 // PUBLIC DATA MEMBERS
190 
191 // PROTECTED DATA MEMBERS
192 
193 void
196 {
197  // Preconditions:
198 
199  require(id_spaces_initialized());
200  require(local_id_space_initialized());
201  require(!zones_initialized());
202 
203  // Body:
204 
205  // Construct the zone id space.
206 
207  const string& lzone_id_space_name =
208  section_space_schema_member::intersection_id_space_name(xhost.d_cells(3),
209  interval_member());
210 
211  _zones_space_id =
212  offset_index_space_state::new_space(*_id_spaces,
213  lzone_id_space_name,
214  _zone_begin,
215  _zone_size).index();
216 
217  _zones_initialized = true;
218 
219  // Construct the product structure for the zone id space.
220 
221  ijk_product_structure lzone_structure(_i_size, _j_size, _k_size);
222  _id_spaces->new_product_structure(_zones_space_id, lzone_structure);
223 
224  // Postconditions:
225 
226  ensure(zones_initialized());
227  ensure(id_spaces().has_product_structure(zones_space_id()));
228  ensure(id_spaces().product_structure_conforms_to<ijk_product_structure>(_zones_space_id));
229 
230  // Exit:
231 
232  return;
233 }
234 
235 // PRIVATE DATA MEMBERS
236 
237 
238 // ===========================================================
239 // VERTICES FACET
240 // ===========================================================
241 
242 // PUBLIC DATA MEMBERS
243 
244 // PROTECTED DATA MEMBERS
245 
246 void
249 {
250  // Preconditions:
251 
252  require(id_spaces_initialized());
253  require(local_id_space_initialized());
254  require(!vertices_initialized());
255 
256  // Body:
257 
258  // Construct the vertex id space.
259 
260  const string& lvertex_id_space_name =
261  section_space_schema_member::intersection_id_space_name(xhost.d_cells(0),
262  interval_member());
263 
264  _vertices_space_id =
265  offset_index_space_state::new_space(*_id_spaces,
266  lvertex_id_space_name,
267  _vertex_begin,
268  _vertex_size).index();
269 
270  _vertices_initialized = true;
271 
272  // Construct the product structure for the vertex id space.
273 
274  ijk_product_structure lvertex_structure(_i_vertex_size, _j_vertex_size, _k_vertex_size);
275  _id_spaces->new_product_structure(_vertices_space_id, lvertex_structure);
276 
277  // Postconditions:
278 
279  ensure(vertices_initialized());
280  ensure(id_spaces().has_product_structure(vertices_space_id()));
281  ensure(id_spaces().product_structure_conforms_to<ijk_product_structure>(_vertices_space_id));
282 
283  // Exit:
284 
285  return;
286 }
287 
288 // PRIVATE DATA MEMBERS
289 
290 
291 // ===========================================================
292 // BASE_SPACE_CRG_INTERVAL FACET
293 // ===========================================================
294 
295 // PUBLIC DATA MEMBERS
296 
297 int
299 db(pod_index_type xmbr_id) const
300 {
301  // Preconditions:
302 
303  require(contains_member(xmbr_id));
304 
305  // Body:
306 
307  static const int ldb[MEMBER_CLASS_END] =
308  {
309  3, 3, 0
310  };
311 
312  int result = ldb[member_class(xmbr_id)];
313 
314  // Postconditions:
315 
316 
317  // Exit:
318 
319  return result;
320 }
321 
324 d_cells_space_id(int xd) const
325 {
326  // Preconditions:
327 
328  // Body:
329 
330  pod_index_type result;
331 
332  switch(xd)
333  {
334  case 0:
335  result = _vertices_space_id;
336  break;
337 
338  case 3:
339  result = _zones_space_id;
340  break;
341 
342  default:
343  result = invalid_pod_index();
344  break;
345  }
346 
347  // Postconditions:
348 
349  // Exit:
350 
351  return result;
352 }
353 
354 // PROTECTED DATA MEMBERS
355 
356 // PRIVATE DATA MEMBERS
357 
358 
359 // ===========================================================
360 // BLOCK VERTICES FACET
361 // ===========================================================
362 
363 // PUBLIC DATA MEMBERS
364 
365 // PROTECTED DATA MEMBERS
366 
367 void
370 {
371  // Preconditions:
372 
373  require(!block_vertices_initialized());
374  require(vertices_initialized());
375 
376  // Body:
377 
378  // Construct the block vertices id space.
379 
380  list_index_space_handle lblock_vertices_id_space =
381  list_index_space_state::new_space(*_id_spaces,
382  block_vertices_name(),
383  false);
384 
385  _block_vertices_space_id = lblock_vertices_id_space.index();
386 
387  // Insert the private data into the id space.
388 
389  int I = i_size();
390  int J = j_size();
391  int K = k_size();
392 
393  // (0,0,0); client id 0
394 
395  lblock_vertices_id_space.push_back(_vertex_begin);
396 
397  // (I,0,0); client id 1.
398 
399  lblock_vertices_id_space.push_back(vertex_id(I, 0, 0));
400 
401  // (I,J,0); client id 2.
402 
403  lblock_vertices_id_space.push_back(vertex_id(I, J, 0));
404 
405  // (0,J,0); client id 3;
406 
407  lblock_vertices_id_space.push_back(vertex_id(0, J, 0));
408 
409  // (0,0,K); client id 4
410 
411  lblock_vertices_id_space.push_back(vertex_id(0, 0, K));
412 
413  // (I,0,K); client id 5.
414 
415  lblock_vertices_id_space.push_back(vertex_id(I, 0, K));
416 
417  // (I,J,K); client id 6.
418 
419  lblock_vertices_id_space.push_back(vertex_id(I, J, K));
420 
421  // (0,J,K); client id 7;
422 
423  lblock_vertices_id_space.push_back(vertex_id(0, J, K));
424 
425  // The block vertices is initialized.
426 
427  _block_vertices_initialized = true;
428 
429  // Postconditions:
430 
431  ensure(block_vertices_initialized());
432 
433  // Exit:
434 
435  return;
436 }
437 
438 // PRIVATE DATA MEMBERS
439 
440 
441 // ===========================================================
442 // IMPLICIT_CRG_INTERVAL FACET
443 // ===========================================================
444 
445 // PUBLIC DATA MEMBERS
446 
447 // PROTECTED DATA MEMBERS
448 
449 // PRIVATE DATA MEMBERS
450 
451 
452 // ===========================================================
453 // CRG_INTERVAL FACET
454 // ===========================================================
455 
456 // PUBLIC DATA MEMBERS
457 
458 // PROTECTED DATA MEMBERS
459 
460 // PRIVATE DATA MEMBERS
461 
462 
463 // ===========================================================
464 // INTERVAL FACET
465 // ===========================================================
466 
467 // PUBLIC DATA MEMBERS
468 
469 void
471 get_size(size_type xi_size, size_type xj_size, size_type xk_size, size_type& result)
472 {
473  // Preconditions:
474 
475 
476  // Body:
477 
478  size_type lzone_size = xi_size*xj_size*xk_size;
479  size_type lvertex_size = (xi_size + 1)*(xj_size + 1)*(xk_size + 1);
480 
481  result = 1 + lzone_size + lvertex_size;
482 
483  // Postconditions:
484 
485 
486  // Exit:
487 
488  return;
489 }
490 
491 // PROTECTED DATA MEMBERS
492 
493 // PRIVATE DATA MEMBERS
494 
495 
496 // ===========================================================
497 // COVER SET FACET
498 // ===========================================================
499 
500 // PUBLIC DATA MEMBERS
501 
502 // PROTECTED DATA MEMBERS
503 
504 void
507 {
508  // Preconditions:
509 
510  require(id_spaces_initialized());
511  require(local_id_space_initialized());
512  require(!covers_initialized(LOWER));
513 
514  // Body:
515 
516  // Construct the lower cover of the block.
517  //
518  // The lower cover of the block is initialized to an id space that contains
519  // all the zones.
520 
521  _lower_covers_begin =
522  explicit_index_space_interval::new_space(*_id_spaces, 1).begin();
523 
524  offset_index_space_state::new_space(*_id_spaces,
525  _lower_covers_begin,
526  implicit_cover_name(LOWER, interval_member()),
527  _zone_begin,
528  _zone_size);
529 
530  // Construct the lower cover of the zones.
531  //
532  // The lower cover of the zones is initialized to the nodal connectivity.
533  // The user may change the lower cover of the zones by using the explicit
534  // overrides in crg_range. However, the underlineing connectivity id space
535  // interval will remain in the id space family. For that reason, we can
536  // set the connectivity begin to beginning of the connectivity id space
537  // interval created below.
538 
539  _connectivity_begin =
540  ijk_connectivity_index_space_interval::new_space(*_id_spaces,
541  _zone_size,
542  _vertex_begin,
543  _j_size,
544  _k_size).begin();
545 
546  // Construct the lower cover of the vertices.
547  //
548  // The lower cover of the vertices is initialized to bottom.
549 
550  constant_index_space_interval::new_space(*_id_spaces,
551  _vertex_size,
552  BOTTOM_INDEX);
553 
554  // The lower cover is initialized.
555 
556  _lower_covers_initialized = true;
557 
558  // Posconditions:
559 
560  ensure(covers_initialized(LOWER));
561 
562  // Exit:
563 
564  return;
565 }
566 
567 void
570 {
571  // Preconditions:
572 
573  require(id_spaces_initialized());
574  require(local_id_space_initialized());
575  require(!covers_initialized(UPPER));
576 
577  // Body:
578 
579  // Construct the upper cover of the block
580  //
581  // The upper cover of block is initialized to an empty explicit id space.
582 
583  _upper_covers_begin =
584  explicit_index_space_interval::new_space(*_id_spaces, 1).begin();
585 
586  list_index_space_state::new_space(*_id_spaces,
587  _upper_covers_begin,
588  explicit_cover_name(UPPER, interval_member()),
589  false);
590 
591  // Construct the upper cover of the zones.
592  //
593  // The upper cover of the zones is initialized to the block.
594 
595  constant_index_space_interval::new_space(*_id_spaces,
596  _zone_size,
597  interval_member());
598 
599  // Construct the upper cover of the vertices.
600  //
601  // The upper cover of the vertices is initialized to the zonal adjacency.
602  // The user may change the upper cover of the vertices by using the explicit
603  // overrides in crg_range. However, the underlineing adjacency id space
604  // interval will remain in the id space family. For that reason, we can
605  // set the adjacency begin to the beginning of the adjacency id space
606  // interval created below.
607 
608  _adjacency_begin =
609  ijk_adjacency_index_space_interval::new_space(*_id_spaces,
610  _vertex_size,
611  _zone_begin,
612  _i_size,
613  _j_size,
614  _k_size).begin();
615 
616  // The upper cover is initialized.
617 
618  _upper_covers_initialized = true;
619 
620  // Posconditions:
621 
622  ensure(covers_initialized(UPPER));
623 
624  // Exit:
625 
626  return;
627 }
628 
629 // PRIVATE DATA MEMBERS
630 
631 
632 // ===========================================================
633 // DOF_TUPLE_ID FACET
634 // ===========================================================
635 
636 // PUBLIC DATA MEMBERS
637 
638 void
641  size_type xi_size,
642  size_type xj_size,
643  size_type xk_size,
644  block<pod_index_type>& result)
645 {
646  // Preconditions:
647 
648 
649  // Body:
650 
651  result.reserve(MEMBER_CLASS_END);
652  result.set_ct(MEMBER_CLASS_END);
653 
654 
655  result[BLOCK] = structured_block_3d::new_row_dof_map(xhost, xi_size, xj_size, xk_size, true).hub_pod();
656  result[ZONE] = base_space_member::new_row_dof_map(xhost, "hex_nodes", true).hub_pod();
657  result[VERTEX] = base_space_member::new_row_dof_map(xhost, "point", true).hub_pod();
658 
659  // Postconditions:
660 
661 
662  // Exit:
663 
664  return;
665 }
666 
667 // PROTECTED DATA MEMBERS
668 
669 // PRIVATE DATA MEMBERS
670 
671 
672 // ===========================================================
673 // PRIVATE_DATA FACET
674 // ===========================================================
675 
676 // PUBLIC DATA MEMBERS
677 
678 void
681  size_type xj_size,
682  size_type xk_size,
683  block<pod_index_type>& result)
684 {
685  // Preconditions:
686 
687  // Body:
688 
689  result.reserve(5);
690  result.set_ct(5);
691 
692  result[0] = xi_size;
693  result[1] = xj_size;
694  result[2] = xk_size;
695  result[3] = 0;
696  result[4] = 0;
697 
698  // Postconditions:
699 
700  // Exit:
701 
702  return;
703 }
704 
705 // PROTECTED DATA MEMBERS
706 
710 {
711  return 3;
712 }
713 
714 void
717 {
718  // Preconditions:
719 
720  // Body:
721 
722  xdata.push_back(_i_size);
723  xdata.push_back(_j_size);
724  xdata.push_back(_k_size);
725 
726  // Postconditions:
727 
728  ensure(xdata.ct() == implicit_private_data_size());
729 
730  // Exit:
731 
732  return;
733 }
734 
735 void
738 {
739  // Preconditions:
740 
741  // Body:
742 
743  _i_size = xdata[0];
744  _j_size = xdata[1];
745  _k_size = xdata[2];
746 
747  _jk_size = _j_size*_k_size;
748 
749  _i_vertex_size = _i_size + 1;
750  _j_vertex_size = _j_size + 1;
751  _k_vertex_size = _k_size + 1;
752  _jk_vertex_size = _j_vertex_size*_k_vertex_size;
753 
754  _zone_begin = implicit_begin();
755  _zone_size = _i_size*_j_size*_k_size;
756 
757  _vertex_begin = _zone_begin + _zone_size;
758  _vertex_size = _i_vertex_size*_jk_vertex_size;
759 
760  // Postconditions:
761 
762  ensure(invariant());
763 
764  // Exit:
765 
766  return;
767 }
768 
769 // PRIVATE DATA MEMBERS
770 
771 
772 // ===========================================================
773 // FINIALIZE FACET
774 // ===========================================================
775 
776 // PUBLIC DATA MEMBERS
777 
778 void
781 {
782  // Preconditions:
783 
784  require(dynamic_cast<base_space_poset*>(&xhost) != 0);
785  require(xhost.state_is_read_accessible());
786 
787  // Body:
788 
789  base_space_poset& lhost = dynamic_cast<base_space_poset&>(xhost);
790 
791  // Initialize the zone id space.
792 
793  initialize_zones(lhost);
794 
795  // Initialize the vertex id space.
796 
797  initialize_vertices(lhost);
798 
799  // Initialize block vertices id space.
800 
801  initialize_block_vertices();
802 
803  // Initialize the cover id spaces.
804 
805  initialize_covers();
806 
807  // Now this can be inserted in the standard subposets (d-cells, etc).
808 
809  lhost.insert_interval_in_standard_subposets(*this);
810 
811  // Insert the vertices into the upper cover of bottom.
812 
813  xhost.append_upper_cover_of_bottom(_vertex_begin,
814  _vertex_begin + _vertex_size);
815 
816  homogeneous_block_crg_interval::finalize(xhost);
817 
818  // Postconditions:
819 
820  ensure(invariant());
821  ensure(is_initialized());
822 
823  // Exit:
824 
825  return;
826 }
827 
828 // PROTECTED DATA MEMBERS
829 
830 // PRIVATE DATA MEMBERS
831 
832 
833 // ===========================================================
834 // FACTORY FACET
835 // ===========================================================
836 
837 // PUBLIC DATA MEMBERS
838 
839 const std::string&
841 class_name() const
842 {
843  static const string result("structured_block_3d_crg_interval");
844  return result;
845 }
846 
847 // PROTECTED DATA MEMBERS
848 
849 // PRIVATE DATA MEMBERS
850 
851 bool
852 fiber_bundle::structured_block_3d_crg_interval::
853 make_prototype()
854 {
855  // Preconditions:
856 
857 
858  // Body:
859 
861 
862  interval_factory().insert_prototype(lproto);
863 
864  // Postconditions:
865 
866 
867  // Exit:
868 
869  return true;
870 }
871 
872 // ===========================================================
873 // ANY FACET
874 // ===========================================================
875 
876 // PUBLIC DATA MEMBERS
877 
878 bool
880 is_ancestor_of(const any* other) const
881 {
882 
883  // Preconditions:
884 
885  require(other != 0);
886 
887  // Body:
888 
889  // True if other conforms to this
890 
891  bool result = dynamic_cast<const structured_block_3d_crg_interval*>(other) != 0;
892 
893  // Postconditions:
894 
895  return result;
896 }
897 
900 clone() const
901 {
902  // Preconditions:
903 
904  // Body:
905 
907 
908  // Postconditions:
909 
910  ensure(result != 0);
911  ensure(is_same_type(result));
912 
913  // Exit:
914 
915  return result;
916 }
917 
918 bool
920 invariant() const
921 {
922  bool result = true;
923 
924  if(invariant_check())
925  {
926  // Prevent recursive calls to invariant
927 
928  disable_invariant_check();
929 
930  // Must satisfy base class invariant
931 
932  invariance(homogeneous_block_crg_interval::invariant());
933 
934  // Invariances for this class:
935 
936  invariance(dof_tuple_ids_initialized() ? is_valid(block_dof_tuple_id()) : true);
937  invariance(dof_tuple_ids_initialized() ? is_valid(zone_dof_tuple_id()) : true);
938  invariance(dof_tuple_ids_initialized() ? is_valid(vertex_dof_tuple_id()) : true);
939 
940  // Finished, turn invariant checking back on.
941 
942  enable_invariant_check();
943  }
944 
945  // Exit
946 
947  return result;
948 }
949 
950 // PROTECTED DATA MEMBERS
951 
952 // PRIVATE DATA MEMBERS
953 
954 
955 // ===========================================================
956 // NON-MEMBER FUNCTIONS
957 // ===========================================================
958 
void initialize_zones(base_space_poset &xhost)
Initialize the zones id space.
virtual pod_index_type d_cells_space_id(int xd) const
The id space index for the cells of dimension xd. Returns invalid_pod_index() if there is no id space...
virtual void finalize(poset_state_handle &xhost)
Finialize the initialization of this crg interval in the host xhost.
A 3D implementation of abstract_product_structure.
virtual pod_type index() const
Index of this space.
size_type ct() const
The number of items currently in use.
virtual void initialize_lower_covers()
Initialize the lower covers for this interval.
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
subposet & d_cells(int xd)
The subposet containing the cells of dimension xd (mutable version).
virtual void put_implicit_private_data(const block< pod_index_type > &xdata)
Initializes this using private data xdata.
A client handle for a general, abstract partially order set.
An map implementation of class scattered_insertion_index_space_handle. This representation is intende...
virtual structured_block_3d_crg_interval * clone() const
Virtual constructor, makes a new instance of the same type as this.
STL namespace.
void reserve(index_type xub)
Makes ub() at least xub; if new storage is allocated, it is uninitialized.
virtual int db(pod_index_type xmbr_id) const
The dimension of the member with id xmbr_id. Does not require access to dof tuple.
void append_upper_cover_of_bottom(pod_index_type xmbr_hub_begin, pod_index_type xmbr_hub_end)
Appends the interval of hub ids [xmbr_hub_begin, xmbr_hub_end) to the upper cover of bottom...
size_type i_size() const
The number of zones in the i direction in this block.
Abstract base class with useful features for all objects.
Definition: any.h:39
The lattice of closed cells of a cellular space; a lattice representation of a computational mesh...
static void get_private_data(size_type xi_size, size_type xj_size, size_type xk_size, block< pod_index_type > &result)
The private data for an instance with parameter xi_size.
void push_back(const_reference_type item)
Insert item at the end of the items in the auto_block.
void initialize_block_vertices()
Initialize the block vertices id space.
void set_ct(size_type xct)
Sets ct() == xct.
static void get_dof_tuple_ids(poset_state_handle &xhost, size_type xi_size, size_type xj_size, size_type xk_size, block< pod_index_type > &result)
The dof tuple ids for an instance created with parameter xi_size.
pod_index_type vertex_id(pod_index_type xi, pod_index_type xj, pod_index_type xk) const
The index of the vertex identified by tuple (xi, xj, xk).
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
const bool UPPER
Selector for upper cover.
Definition: sheaf.h:72
size_type k_size() const
The number of zones in the k direction in this block.
virtual size_type implicit_private_data_size() const
The size of the private data.
const bool LOWER
Selector for lower cover.
Definition: sheaf.h:67
size_type j_size() const
The number of zones in the j direction in this block.
virtual const std::string & class_name() const
The name of this class; provided to satisfy factory template.
virtual void initialize_upper_covers()
Initialize the upper cover for this interval.
virtual bool is_ancestor_of(const any *other) const
Conformance test; true if other conforms to this.
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
void initialize_vertices(base_space_poset &xhost)
Initialize the vertex id space.
void push_back(const scoped_index &xhub_id)
Make the next id in this space equivalent to xhub_id in the hub id space. synonym for push_back(xhub_...
virtual void get_implicit_private_data(block< pod_index_type > &xdata) const
The private data for this instance.
SHEAF_DLL_SPEC bool is_valid(pod_index_type xpod_index)
True if an only if xpod_index is valid.
Definition: pod_types.cc:37
Emulator for a interval of implicit base space members representing a 3 dimensional structured block...
Namespace for the fiber_bundles component of the sheaf system.
SHEAF_DLL_SPEC pod_index_type invalid_pod_index()
The invalid pod index value.
Definition: pod_types.cc:31
static void get_size(size_type xi_size, size_type xj_size, size_type xk_size, size_type &result)
The size for an instance created with parameter xi_size.