SheafSystem  0.0.0.0
visualization_iterator_4_3.cc
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 
18 // Implementation for class visualization_iterator_4_3
19 
20 
21 #include "SheafSystem/visualization_iterator_4_3.h"
22 
23 #include "SheafSystem/assert_contract.h"
24 #include "SheafSystem/base_space_member.h"
25 #include "SheafSystem/binary_section_space_schema_member.h"
26 #include "SheafSystem/eval_family.h"
27 #include "SheafSystem/sec_rep_descriptor.h"
28 #include "SheafSystem/section_evaluator.h"
29 #include "SheafSystem/section_space_schema_member.h"
30 #include "SheafSystem/sec_vd.h"
31 #include "SheafSystem/std_limits.h"
32 #include "SheafSystem/structured_block_1d.h"
33 #include "SheafSystem/structured_block_2d.h"
34 #include "SheafSystem/structured_block_3d.h"
35 #include "SheafSystem/subposet_member_iterator.h"
36 #include "SheafSystem/uniform_eval_family.h"
37 #include "vtkDoubleArray.h"
38 #include "vtkIdTypeArray.h"
39 
40 //#define DIAGNOSTIC_OUTPUT 1
41 
42 // Workaround for MS Visual C++
43 using namespace tool;
44 using namespace std;
45 using namespace unordered;
46 
47 // ===========================================================
48 // ANY FACET
49 // ===========================================================
50 
51 
53 bool
55 is_ancestor_of(const any* xother) const
56 {
57  // Preconditions:
58 
59  // Body:
60 
61  bool result = dynamic_cast<const visualization_iterator_4_3*>(xother) != 0;
62 
63  // Postconditions:
64 
65  // Exit
66 
67  return result;
68 }
69 
70 
71 
75 clone() const
76 {
77  // Preconditions:
78 
79  // Body:
80 
81  visualization_iterator_4_3* cthis = const_cast<visualization_iterator_4_3*>(this);
84 
85  // Postconditions:
86 
87  //ensure(invariant());
88  ensure(result != 0);
89 
90  // Exit
91 
92  return result;
93 }
94 
96 bool
98 invariant() const
99 {
100  bool result = true;
101 
102  // Preconditions:
103 
104  // Body:
105 
106 
107  if(invariant_check())
108  {
109  invariance(visualization_iterator::invariant());
110 
111  disable_invariant_check();
112 
113  invariance(order() == BIORDER);
114  invariance(is_initialized() ?
115  coordinates_schema().rep().evaluator_family_name() == "uniform" :
116  true);
117  invariance((is_initialized() && has_property()) ?
118  !property_schema().rep().eval_is_above_disc() :
119  true);
120 
121  // Finished, turn invariant checking back on.
122 
123  enable_invariant_check();
124  }
125 
126  // Postconditions:
127 
128  // Exit
129 
130  return result;
131 }
132 
133 
134 // ===========================================================
135 // DEPTH_FIRST_ITERATOR FACET
136 // ===========================================================
137 
139 void
141 next(bool xtruncate)
142 {
143  // Preconditions:
144 
145  require(!is_done());
146 
147  // Body:
148 
149  bool ltruncate = xtruncate;
150 
151  // Traverse the graph gathering coord and prop disc members until
152  // we have enough context to evaluate the coordinates at the
153  // the property disc points or until the trversal is done.
154 
155  visualization_iterator::next(ltruncate);
156 
157  while(!is_done())
158  {
159  if(action() == PREVISIT_ACTION)
160  {
161  if(_above.vis_eval)
162  {
168 
169  _coord_state.down_set.push_back(_index);
170  }
171  else
172  {
173  // Store all members below the elements for
174  // unmarking in postvisit action.
175 
176  _vis_state.down_set.push_back(_index);
177  }
178 
179  _at.vis_eval = _vis_state.eval_sp.contains_member(_index);
180  _at.vis_disc = _vis_state.disc_sp.contains_member(_index);
181  _at.coord_eval = _coord_state.eval_sp.contains_member(_index);
182  _at.prop_disc = _prop_state.disc_sp.contains_member(_index);
183 
184  if(_at.vis_eval)
185  {
186  // $$SCRIBBLE eval-sp: same issue as rep _1_1.
187 
188  _above.vis_eval = false;
189 
190  _vis_state.set_evaluation_member(_index);
191  _vis_state.initialize_order_correction();
192  _vis_state.discretization_members.set_ct(0);
193  _vis_state.down_set.set_ct(0);
194  }
195 
196  if(_at.vis_disc)
197  {
198  _vis_state.gather_discretization_member(_index, greater_index());
199  _vis_state.local_id++;
200 
201  ltruncate = true;
202  }
203 
204  if(_at.coord_eval)
205  {
206  // $$SCRIBBLE eval-sp: see comment in rep_4_2.
207 
208  _coord_state.set_and_attach_evaluation_member(_index);
209  _coord_state.discretization_members.set_ct(0);
210  _coord_state.gather_discretization_member(_index);
211  _coord_state.local_id++;
212  _coord_state.dofs.set_ct(0);
213  }
214 
215  if(_at.prop_disc)
216  {
217  _prop_state.discretization_members.set_ct(0);
218  _prop_state.gather_discretization_member(_index);
219  }
220 
221  }
222  else if(action() == POSTVISIT_ACTION)
223  {
224  _at.vis_eval = _vis_state.eval_sp.contains_member(_index);
225 
226  if(_at.vis_eval)
227  {
228  // $$SCRIBBLE eval-sp: see comment in rep_4_2.
229 
230  clear_down_set();
231  _above.vis_eval = true;
232  break;
233  }
234 
235  // If we invoke visualization_iterator::next() from the postvisit action,
236  // the truncation flag will be ignored, since you can only truncate
237  // in the previsit action. But just to be specific, we'll set it false no
238  // matter what we've done here.
239 
240  ltruncate = false;
241  }
242  else
243  {
244  post_fatal_error_message("unrecognized action");
245  }
246 
247  visualization_iterator::next(ltruncate);
248  } // end while(!is_done())
249 
250  // Postconditions:
251 
252  ensure(invariant());
253  ensure(!is_done() ? action() == POSTVISIT_ACTION : true);
254 
255  // Exit
256 
257  return;
258 }
259 
260 // ===========================================================
261 // VISUALIZATION_ITERATOR FACET
262 // ===========================================================
263 
264 
266 void
268 set_vtk_data(const sec_vd& xcoords,
269  const sec_vd& xprop,
270  vtkDoubleArray* xvtk_pt_coords,
271  vtkDoubleArray* xvtk_prop,
272  int xprop_tensor_rank,
273  block<int>& xvtk_cell_types,
274  block<vtkIdType>& xvtk_cell_connectivity,
275  block<int>& xvtk_cell_type_map,
276  vtkIdTypeArray* xvtk_pt_label_ids,
277  vtkIdTypeArray* xvtk_cell_label_ids)
278 {
279  // Preconditions:
280 
281  require(xcoords.state_is_read_accessible());
282  require(xcoords.schema().is_same_state(&coordinates_schema()));
283 
284  require(has_property());
285  require(xprop.state_is_read_accessible());
286  require(xprop.schema().is_same_state(&property_schema()));
287 
289 
290  require(xcoords.schema().df() <= 3);
291 
292 
293  // Body:
294 
295 #ifdef DIAGNOSTIC_OUTPUT
296 
297  cout << "id: " << index()
298  << " eval_id: " << _vis_state.eval_id
299  << endl;
300 #endif
301 
302  if(_coord_state.dofs.ct() == 0)
303  {
304  // The dofs have not been gathered for this coord eval member.
305 
306  _coord_state.gather_dofs(xcoords);
307  }
308 
309  typedef unordered_map<pod_index_type, pod_index_type> map_type;
310  typedef map_type::const_iterator iterator_type;
311 
312  int lprop_df = xprop.schema().df();
313  block<discretization_context>& ldisc_mbrs = _vis_state.discretization_members;
314  size_type ldisc_ct = ldisc_mbrs.ct();
315  map_type* lmap = _vis_state.disc_to_seq_map;
316 
317  const index_space_handle& ldisc_id_space =
318  xcoords.schema().discretization_id_space();
319 
320  // Transfer the cell label ids.
321 
322  pod_index_type lvtk_cell_id =
323  _use_cell_top_ids ?
324  _vis_state.eval_id.hub_pod() :
325  xcoords.schema().evaluation().id_space().pod(_vis_state.eval_id);
326 
327  xvtk_cell_label_ids->InsertNextValue(lvtk_cell_id);
328 
329  // Transfer the cell type.
330 
331  xvtk_cell_types.push_back(xvtk_cell_type_map[_vis_state.eval_type_id]);
332 
333  // Transfer the connectivity count.
334 
335  xvtk_cell_connectivity.push_back(ldisc_ct);
336 
337  for(size_type i=0; i<ldisc_ct; ++i)
338  {
339  discretization_context& ldisc_mbr = ldisc_mbrs[i];
340  scoped_index ldisc_id = ldisc_mbr.disc_id;
341  pod_index_type ldisc_pod = ldisc_id.hub_pod();
342  iterator_type lmap_itr = lmap->find(ldisc_pod);
343 
344 #ifdef DIAGNOSTIC_OUTPUT
345 
346  cout << "\tdisc_id: " << setw(6) << ldisc_id;
347 #endif
348 
349  pod_index_type lseq_id;
350 
351  if(lmap_itr == lmap->end())
352  {
353  // Haven't visited this vertex before.
354  // Create a seq id for it.
355 
356  lseq_id = _vis_state.next_seq_id++;
357  (*lmap)[ldisc_pod] = lseq_id;
358 
359 #ifdef DIAGNOSTIC_OUTPUT
360 
361  cout << " seq_id:" << setw(6) << lseq_id;
362 #endif
363 
364  // Transfer the coordinate data;
365  // must evaluate coordintes section at vertices.
366 
367  // Get the local coordinates of the vertex in the element.
368 
369  chart_point_3d ldisc_pt;
370  ldisc_pt.put_chart_id(ldisc_mbr.eval_id);
371 
372  _vis_state.eval->local_coordinates(ldisc_mbr.local_id,
373  ldisc_pt.local_coords(),
374  3);
375 
376  // Unrefine from the element to the coord eval.
377 
380 
381  _coord_state.eval_mbr->unrefine_point_pa(ldisc_pt, ldisc_pt);
382 
383  // Evaluate the global coordinate section.
384 
385  _coord_state.eval->value_at_coord(_coord_state.dofs.base(),
386  _coord_state.dofs.ct(),
387  ldisc_pt.local_coords(),
388  3,
389  _coord_dofs,
390  _coord_state.df);
391 
392  xvtk_pt_coords->SetTuple(lseq_id, _coord_dofs);
393 
394  // Transfer the point label ids.
395 
396  pod_index_type lvtk_pt_id =
397  _use_point_top_ids ?
398  ldisc_id.hub_pod() : ldisc_id_space.pod(ldisc_id);
399 
400  xvtk_pt_label_ids->SetValue(lseq_id, lvtk_pt_id);
401 
402 #ifdef DIAGNOSTIC_OUTPUT
403 
404  cout << " coords: "
405  << setw(6) << _coord_dofs[0]
406  << setw(6) << _coord_dofs[1]
407  << setw(6) << _coord_dofs[2];
408 #endif
409  }
410  else
411  {
412  lseq_id = lmap_itr->second;
413 
414 #ifdef DIAGNOSTIC_OUTPUT
415 
416  cout << " seq_id:" << setw(6) << lseq_id;
417 #endif
418 
419  }
420 
421 #ifdef DIAGNOSTIC_OUTPUT
422 
423  cout << endl;
424 #endif
425 
426  // Transfer the connectivity.
427 
428  xvtk_cell_connectivity.push_back(lseq_id);
429 
430  }
431 
432  // Transfer the property data
433 
434  scoped_index lprop_disc_id = _prop_state.discretization_members[0].disc_id;
435 
436  using fiber_bundle::vd_algebra::operator*;
437 
438  xprop.get_fiber(lprop_disc_id, _prop_dofs,
439  static_cast<size_type>(PROP_DOFS_UB)*sizeof(sec_vd_dof_type), false);
440 
441 #ifdef DIAGNOSTIC_OUTPUT
442 
443  cout << "\tprop seq id: " << setw(6) << _cell_seq_id;
444  cout << " prop: " << setw(10) << _prop_dofs[0] << endl;
445 #endif
446 
447  put_prop_dofs(_prop_dofs, lprop_df, xprop_tensor_rank, xvtk_prop, _cell_seq_id++);
448 
449  assertion(_cell_seq_id == xvtk_cell_types.ct());
450 
451  // Postconditions:
452 
453 
454  // Exit:
455 
456  return;
457 }
458 
460 void
462 set_vtk_data(const sec_vd& xcoords,
463  vtkDoubleArray* xvtk_pt_coords,
464  block<int>& xvtk_cell_types,
465  block<vtkIdType>& xvtk_cell_connectivity,
466  block<int>& xvtk_cell_type_map,
467  vtkIdTypeArray* xvtk_pt_label_ids,
468  vtkIdTypeArray* xvtk_cell_label_ids)
469 {
470  // Preconditions:
471 
472  require(xcoords.state_is_read_accessible());
473  require(xcoords.schema().is_same_state(&coordinates_schema()));
474 
476 
477  require(xcoords.schema().df() <= 3);
478 
479 
480  // Body:
481 
482 #ifdef DIAGNOSTIC_OUTPUT
483 
484  cout << "id: " << index()
485  << " eval_id: " << _vis_state.eval_id
486  << endl;
487 #endif
488 
489  if(_coord_state.dofs.ct() == 0)
490  {
491  // The dofs have not been gathered for this coord eval member.
492 
493  _coord_state.gather_dofs(xcoords);
494  }
495 
496  typedef unordered_map<pod_index_type, pod_index_type> map_type;
497  typedef map_type::const_iterator iterator_type;
498 
499  block<discretization_context>& ldisc_mbrs = _vis_state.discretization_members;
500  size_type ldisc_ct = ldisc_mbrs.ct();
501  map_type* lmap = _vis_state.disc_to_seq_map;
502 
503  // Transfer the cell type.
504 
505  xvtk_cell_types.push_back(xvtk_cell_type_map[_vis_state.eval_type_id]);
506 
507  // Transfer the connectivity count.
508 
509  xvtk_cell_connectivity.push_back(ldisc_ct);
510 
511  for(size_type i=0; i<ldisc_ct; ++i)
512  {
513  discretization_context& ldisc_mbr = ldisc_mbrs[i];
514  scoped_index ldisc_id = ldisc_mbr.disc_id;
515  pod_index_type ldisc_pod = ldisc_id.hub_pod();
516  iterator_type lmap_itr = lmap->find(ldisc_pod);
517 
518 #ifdef DIAGNOSTIC_OUTPUT
519 
520  cout << "\tdisc_id: " << setw(6) << ldisc_id;
521 #endif
522 
523  pod_index_type lseq_id;
524 
525  if(lmap_itr == lmap->end())
526  {
527  // Haven't visited this vertex before.
528  // Create a seq id for it.
529 
530  lseq_id = _vis_state.next_seq_id++;
531  (*lmap)[ldisc_pod] = lseq_id;
532 
533 #ifdef DIAGNOSTIC_OUTPUT
534 
535  cout << " seq_id:" << setw(6) << lseq_id;
536 #endif
537 
538  // Transfer the coordinate data;
539  // must evaluate coordintes section at vertices.
540 
541  // Get the local coordinates of the vertex in the element.
542 
543  chart_point_3d ldisc_pt;
544  ldisc_pt.put_chart_id(ldisc_mbr.eval_id);
545 
546  _vis_state.eval->local_coordinates(ldisc_mbr.local_id,
547  ldisc_pt.local_coords(),
548  3);
549 
550  // Unrefine from the element to the coord eval.
551 
554 
555  _coord_state.eval_mbr->unrefine_point_pa(ldisc_pt, ldisc_pt);
556 
557  // Evaluate the global coordinate section.
558 
559  _coord_state.eval->value_at_coord(_coord_state.dofs.base(),
560  _coord_state.dofs.ct(),
561  ldisc_pt.local_coords(),
562  3,
563  _coord_dofs,
564  _coord_state.df);
565 
566  xvtk_pt_coords->SetTuple(lseq_id, _coord_dofs);
567 
568 #ifdef DIAGNOSTIC_OUTPUT
569 
570  cout << " coords: "
571  << setw(6) << _coord_dofs[0]
572  << setw(6) << _coord_dofs[1]
573  << setw(6) << _coord_dofs[2];
574 #endif
575  }
576  else
577  {
578  lseq_id = lmap_itr->second;
579 
580 #ifdef DIAGNOSTIC_OUTPUT
581 
582  cout << " seq_id:" << setw(6) << lseq_id;
583 #endif
584 
585  }
586 
587 #ifdef DIAGNOSTIC_OUTPUT
588 
589  cout << endl;
590 #endif
591 
592  // Transfer the connectivity.
593 
594  xvtk_cell_connectivity.push_back(lseq_id);
595 
596  }
597 
598  // Postconditions:
599 
600 
601  // Exit:
602 
603  return;
604 }
605 
607 void
609 set_vtk_data(const sec_vd& xprop, vtkDoubleArray* xvtk_prop, int xprop_tensor_rank)
610 {
611  // Preconditions:
612 
613  require(has_property());
614  require(xprop.state_is_read_accessible());
615  require(xprop.schema().is_same_state(&property_schema()));
616 
617  // Body:
618 
619 #ifdef DIAGNOSTIC_OUTPUT
620 #endif
621 
622  // Transfer the property data
623 
624  scoped_index lprop_disc_id = _prop_state.discretization_members[0].disc_id;
625 
626  xprop.get_fiber(lprop_disc_id, _prop_dofs,
627  static_cast<size_type>(PROP_DOFS_UB)*sizeof(sec_vd_dof_type), false);
628 
629 #ifdef DIAGNOSTIC_OUTPUT
630 
631  cout << "\tid: " << index() << " eval_id: " << _vis_state.eval_id;
632  cout << " prop seq id: " << setw(6) << _cell_seq_id;
633  cout << " prop: " << setw(10) << _prop_dofs[0] << endl;
634 #endif
635 
636  int lprop_df = xprop.schema().df();
637  put_prop_dofs(_prop_dofs, lprop_df, xprop_tensor_rank, xvtk_prop, _cell_seq_id++);
638 
639  // Postconditions:
640 
641 
642  // Exit:
643 
644  return;
645 }
646 
647 // ===========================================================
648 // VISUALIZATION_ITERATOR_4_3 FACET
649 // ===========================================================
650 
655 {
656  // Preconditions:
657 
658 
659  // Body:
660 
661  // Postconditions:
662 
663  ensure(!is_initialized());
664 
665  // Exit:
666 
667  return;
668 }
669 
673  const section_space_schema_member& xproperty_schema)
675 {
676 
677  // Preconditions:
678 
679  require(xcoordinates_schema.state_is_read_accessible());
680  require(xcoordinates_schema.base_space().schema().conforms_to(base_space_member::standard_schema_path()));
681  require(xproperty_schema.state_is_read_accessible());
682  require(xproperty_schema.base_space().le(&xcoordinates_schema.base_space()));
683  require(xcoordinates_schema.rep().evaluator_family_name() == "uniform");
684  require(!xproperty_schema.rep().eval_is_above_disc());
685  require(!(xcoordinates_schema.rep().path() == "sec_rep_descriptors/vertex_cells_dlinear"));
686  require(!(xproperty_schema.rep().path() == "sec_rep_descriptors/vertex_cells_dlinear"));
687 
688  // Body:
689 
690  put_anchor(xcoordinates_schema, xproperty_schema);
691  reset();
692 
693  // Postconditions:
694 
695  ensure(invariant());
696  ensure(is_initialized());
697  ensure(coordinates_schema().is_same_state(&xcoordinates_schema));
698  ensure(coordinates_schema().is_same_type(&xcoordinates_schema));
699  ensure(coordinates_schema().version() == xcoordinates_schema.version());
700  ensure(has_property());
701  ensure(property_schema().is_same_state(&xproperty_schema));
702  ensure(property_schema().is_same_type(&xproperty_schema));
703  ensure(property_schema().version() == xproperty_schema.version());
704  ensure(descending());
705  ensure(!strict());
706  ensure(unexecutable(!is_done() implies this is first member));
707 
708  return;
709 }
710 
714 {
715  // Preconditions:
716 
717  // Body:
718 
719  // Postconditions:
720 
721 }
722 
723 // ===========================================================
724 // PROTECTED MEMBER FUNCTIONS
725 // ===========================================================
726 
727 // =============================================================================
728 // PRIVATE MEMBER FUNCTIONS
729 // =============================================================================
730 
731 
scoped_index eval_id
The eval member the disc member is contained in.
A context for discretization members. Intended for implementing various iterators, especially concurrent iterations over multiple sections.
scoped_index disc_id
The global index of the disc member.
std::string evaluator_family_name() const
The name of the evaluator family.
int version(bool xunalias=true) const
The (possibly aliased) version of this component. The version of the host used when evaluating proper...
size_type ct() const
The number of items currently in use.
virtual bool is_initialized() const
True if this has been initialized for iteration with respect to a specific anchor.
A point in a 3D chart space.
poset_path path(bool xauto_access=true) const
A path to this component.
bool conforms_to(const schema_poset_member &xother) const
True if the dofs defined by this agree in type and in order with the dofs defined by xother...
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
void get_fiber(pod_index_type xdisc_id, vd_lite &xfiber) const
Sets xfiber to the fiber referred to by discretization id xdisc_id.
Definition: sec_vd.cc:1087
subposet & evaluation()
The evaluation subposet for section spaces on this schema (mutable version).
virtual bool is_ancestor_of(const any *xother) const
True if other conforms to this.
virtual void set_vtk_data(const sec_vd &xcoords, const sec_vd &xprop, vtkDoubleArray *xvtk_pt_coords, vtkDoubleArray *xvtk_prop, int xprop_tensor_rank, block< int > &xvtk_cell_types, block< vtkIdType > &xvtk_cell_connectivity, block< int > &xvtk_cell_type_map, vtkIdTypeArray *xvtk_pt_label_ids, vtkIdTypeArray *xvtk_cell_label_ids)
Transfers coordinate and property data to vtk data structures.
bool has_property() const
True if this visualization has a property section.
STL namespace.
bool is_same_state(const poset_state_handle *xhost, pod_index_type xhub_id) const
True is this is attached to state with hub id xhub_id in host xhost.
void put_chart_id(pod_index_type xchart)
Sets chart_id() to xchart_id.
Definition: chart_point.cc:103
An abstract handle to a space of alternate integer identifiers (aliases) for a subset of a hub set of...
virtual pod_type pod(pod_type xid) const
The pod index in this space equivalent to xid in the hub id space.
Namespace for the tools component of the sheaf system.
Abstract base class with useful features for all objects.
Definition: any.h:39
void push_back(const_reference_type item)
Insert item at the end of the items in the auto_block.
bool eval_is_above_disc() const
True is the evaluation subposet is strictly above the discretization subposet.
int local_id
The local index of the disc member with respect to the eval member.
const section_space_schema_member & coordinates_schema() const
The coordinates field schema member which is being iterated over.
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
bool invariant() const
The class invariant.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
bool descending() const
True if iterating over down set of anchor.
bool le(pod_index_type xother_index) const
True if this is less than or equal to the member with index xother_index.
void next()
Makes this the next member of the subset.
bool invariant() const
The class invariant.
visualization_iterator_4_3()
Creates an uninitialized iterator.
virtual pod_type pod(pod_type xid) const =0
The pod index in this space equivalent to xid in the hub id space.
coord_type * local_coords()
The array of local coordinates.
A section of a fiber bundle with a d-dimensional vector space fiber.
Definition: sec_vd.h:54
bool is_done() const
True if iteration finished.
const scattered_insertion_index_space_handle & id_space() const
The id space for the members of with this (const version).
Definition: subposet.cc:508
static const poset_path & standard_schema_path()
The path of the schema required by this class.
pod_type hub_pod(pod_type xid) const
The pod index in the unglued hub id space equivalent to xid in this id space; synonym for unglued_hub...
void first()
Moves this to the first member of the iteration.
Abstract iterator over the schema of both the coordinates and property sections of a visualization...
virtual void put_anchor(const section_space_schema_member &xcoords_schema, const section_space_schema_member &xprop_schema)
Reinitializes anchor() to iterate over xcoord_schema and xprop_schema.
total_poset_member & base_space()
The base space component of this (mutable version).
const index_space_handle & discretization_id_space() const
The id space for the discretization members in the down set of the base space of this (const version)...
virtual section_space_schema_member & schema()
The restricted schema for this (mutable version).
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
A client handle for a poset member which has been prepared for use as a schema for a section space...
virtual void reset(bool xreset_markers=true)
Restarts the iteration over the down set of anchor().
const section_space_schema_member & property_schema() const
The property field schema member which is being iterated over.
int df() const
The dimension of the fiber space component.
double sec_vd_dof_type
The type of degree of freedom in the section space.
Definition: fiber_bundle.h:78
sec_rep_descriptor & rep()
The representation for section spaces on this schema (mutable version).
virtual visualization_iterator_4_3 * clone() const
Make a new instance of the same type as this.
virtual schema_poset_member & schema()
The schema for this member (mutable version).
bool is_same_type(const any *other) const
True if other is the same type as this.
Definition: any.cc:79
A visualization iterator for uniform coordinates and property section with evaluation at elements and...
bool strict() const
True if iterating over xstrict up/down set of anchor.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
Definition: scoped_index.h:710