SheafSystem  0.0.0.0
sec_ed_invertible.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 
22 #include "SheafSystem/sec_ed_invertible.h"
23 
24 #include "SheafSystem/array_cylindrical_point_locator.h"
25 #include "SheafSystem/assert_contract.h"
26 #include "SheafSystem/chart_point.h"
27 #include "SheafSystem/chart_point_3d.h"
28 #include "SheafSystem/d_array_point_locator.h"
29 #include "SheafSystem/db0_point_locator.h"
30 #include "SheafSystem/d_tree_point_locator.h"
31 #include "SheafSystem/d_uniform_point_locator.h"
32 #include "SheafSystem/namespace_poset.h"
33 #include "SheafSystem/poset.h"
34 #include "SheafSystem/poset_path.h"
35 #include "SheafSystem/sec_at0.h"
36 #include "SheafSystem/sec_at1_space.h"
37 #include "SheafSystem/sec_rep_descriptor.h"
38 #include "SheafSystem/sec_rep_space.h"
39 #include "SheafSystem/section_eval_iterator.h"
40 #include "SheafSystem/section_evaluator.h"
41 #include "SheafSystem/sheaf.h"
42 
43 using namespace std;
44 using namespace geometry; // Workaround for MS C++ bug.
45 
46 // ===========================================================
47 // SEC_ED_INVERTIBLE FACET
48 // ===========================================================
49 
50 // PUBLIC MEMBER FUNCTIONS
51 
54  : _inverter(0)
55 {
56 
57  // Preconditions:
58 
59  // Body:
60 
61 
62 
63  // Postconditions:
64 
65  ensure(invariant());
66  ensure(!is_invertible());
67 
68 }
69 
71 sec_ed_invertible(const sec_ed& xother)
72  : _inverter(0)
73 {
74 
75  // Preconditions:
76 
77  require(precondition_of(attach_to_state(same args)));
78 
79  // Body:
80 
81  attach_to_state(&xother);
82 
83  // Postconditions:
84 
85  ensure(postcondition_of(attach_to_state(&xother)));
86  ensure(!is_invertible());
87 
88  // Exit:
89 
90  return;
91 }
92 
95  : _inverter(0)
96 {
97 
98  // Preconditions:
99 
100  require(precondition_of(attach_to_state(same args)));
101 
102  // Body:
103 
104  attach_to_state(xhost, xindex);
105 
106  // Postconditions:
107 
108  ensure(postcondition_of(attach_to_state(same args)));
109  ensure(!is_invertible());
110 
111 }
112 
114 sec_ed_invertible(sec_rep_space* xhost, const std::string& xname)
115  : _inverter(0)
116 {
117 
118  // Preconditions:
119 
120  require(precondition_of(attach_to_state(same args)));
121 
122  // Body:
123 
124  attach_to_state(xhost, xname);
125 
126  // Postconditions:
127 
128  ensure(postcondition_of(attach_to_state(same args)));
129  ensure(!is_invertible());
130 }
131 
132 
135  const poset_path& xpath,
136  bool xauto_access)
137  : _inverter(0)
138 {
139 
140  // Preconditions:
141 
142  require(precondition_of(attach_to_state(xnamespace, xpath, xauto_access)));
143 
144  // Body:
145 
146  attach_to_state(xnamespace, xpath, xauto_access);
147 
148  // Postconditions:
149 
150  ensure(postcondition_of(attach_to_state(xnamespace, xpath, xauto_access)));
151  ensure(!is_invertible());
152 
153  // Exit:
154 
155  return;
156 }
157 
162 {
163  // Preconditions:
164 
165  require(is_ancestor_of(&xother));
166  require(precondition_of(attach_to_state(&xother)));
167 
168  // Body:
169 
170  attach_to_state(&xother);
171 
172  // Postconditions:
173 
174  ensure(postcondition_of(attach_to_state(&xother)));
175 
176  // Exit:
177 
178  return *this;
179 }
180 
185 {
186  // Preconditions:
187 
188  require(precondition_of(attach_to_state(&xother)));
189 
190  // Body:
191 
192  attach_to_state(&xother);
193 
194  // Postconditions:
195 
196  ensure(postcondition_of(attach_to_state(&xother)));
197 
198  // Exit:
199 
200  return *this;
201 }
202 
206 operator=(const ed& xfiber)
207 {
208  // Preconditions:
209 
210  require(precondition_of(sec_vd::operator=(xfiber)));
211 
212  // Body:
213 
214  sec_vd::operator=(xfiber);
215 
216  // Postconditions:
217 
218  ensure(postcondition_of(sec_vd::operator=(xfiber)));
219 
220  // Exit:
221 
222  return *this;
223 }
224 
228 operator=(const ed_lite& xfiber)
229 {
230  // Preconditions:
231 
232  require(precondition_of(sec_vd::operator=(xfiber)));
233 
234  // Body:
235 
236  sec_vd::operator=(xfiber);
237 
238  // Postconditions:
239 
240  ensure(postcondition_of(sec_vd::operator=(xfiber)));
241 
242  // Exit:
243 
244  return *this;
245 }
246 
247 
250 {
251  // Preconditions:
252 
253  // Body:
254 
255  if(_inverter != 0)
256  {
257  delete _inverter;
258  }
259 
260  return;
261 }
262 
263 bool
265 is_uniform() const
266 {
267  bool result;
268 
269  // Preconditions:
270 
271  require(state_is_read_accessible());
272 
273  // Body:
274 
275  result = schema().rep().name() == "vertex_block_uniform";
276 
277  // Postconditions:
278 
279 
280  // Exit:
281 
282  return result;
283 }
284 
285 bool&
288 {
289 
290  // Preconditions:
291 
292 
293  // Body:
294 
295  static bool result = true;
296 
297  // Postconditions:
298 
299 
300  // Exit:
301 
302  return result;
303 }
304 
305 void
307 initialize_point_locator(bool xauto_access)
308 {
309  // Preconditions:
310 
311  require(xauto_access || state_is_read_accessible());
312 
313  if(xauto_access)
314  {
315  get_read_access();
316  }
317 
318  require(!is_invertible());
319  require((1 <= schema(xauto_access).df()) && (schema(xauto_access).df() <= 3));
320 
321  // Body:
322 
323  if(is_uniform())
324  {
326  }
327  else if(use_d_array_point_locator())
328  {
330  }
331  else
332  {
334  }
335 
336  if(xauto_access)
337  {
338  release_access();
339  }
340 
341  // Postconditions:
342 
343  ensure(is_invertible());
344 
345  // Exit:
346 
347  return;
348 }
349 
350 void
353 {
354  // Preconditions:
355 
356  require(xauto_access || state_is_read_accessible());
357  require(!is_invertible());
358  require((1 <= schema().df()) && (schema().df() <= 3));
359 
360  // Body:
361 
362  if(xauto_access)
363  {
364  get_read_access();
365  }
366 
367  switch(schema().df())
368  {
369  case 1:
370  switch(schema().db())
371  {
372  case 0:
373  _inverter = new geometry::db0_point_locator<1>(*this);
374  break;
375  default:
376  _inverter = new geometry::d_array_point_locator<1, 1>(*this);
377  break;
378  }
379  break;
380  case 2:
381  switch(schema().db())
382  {
383  case 0:
384  _inverter = new geometry::db0_point_locator<2>(*this);
385  break;
386  default:
387  _inverter = new geometry::d_array_point_locator<2, 2>(*this);
388  break;
389  }
390  break;
391  case 3:
392  switch(schema().db())
393  {
394  case 0:
395  _inverter = new geometry::db0_point_locator<3>(*this);
396  break;
397  case 2:
398  _inverter = new geometry::array_cylindrical_point_locator(*this);
399  break;
400  default:
401  _inverter = new geometry::d_array_point_locator<3, 3>(*this);
402  break;
403  }
404 
405  break;
406  }
407 
408  if(xauto_access)
409  {
410  release_access();
411  }
412 
413  // Postconditions:
414 
415  ensure(is_invertible());
416 
417  // Exit:
418 
419  return;
420 }
421 
422 void
424 initialize_d_array_point_locator(const block<size_type>& xbin_ub, bool xauto_access)
425 {
426  // Preconditions:
427 
428  require(xauto_access || state_is_read_accessible());
429  require(!is_invertible());
430  require((1 <= schema().df()) && (schema().df() <= 3));
431  require(xbin_ub.ct() >= schema().df());
432  require_for_all(i, 0, xbin_ub.ct(), xbin_ub[i] > 0);
433 
434  // Body:
435 
436  if(xauto_access)
437  {
438  get_read_access();
439  }
440 
441  switch(schema().df())
442  {
443  case 1:
444  switch(schema().db())
445  {
446  case 0:
447  _inverter = new geometry::db0_point_locator<1>(*this, xbin_ub);
448  break;
449  default:
450  _inverter = new geometry::d_array_point_locator<1, 1>(*this, xbin_ub);
451  break;
452  }
453  break;
454  case 2:
455  switch(schema().db())
456  {
457  case 0:
458  _inverter = new geometry::db0_point_locator<2>(*this, xbin_ub);
459  break;
460  default:
461  _inverter = new geometry::d_array_point_locator<2, 2>(*this, xbin_ub);
462  break;
463  }
464  break;
465 
466  case 3:
467  switch(schema().db())
468  {
469  case 0:
470  _inverter = new geometry::db0_point_locator<3>(*this, xbin_ub);
471  break;
472  default:
473  _inverter = new geometry::d_array_point_locator<3, 3>(*this, xbin_ub);
474  break;
475  }
476  break;
477  }
478 
479  if(xauto_access)
480  {
481  release_access();
482  }
483 
484  // Postconditions:
485 
486  ensure(is_invertible());
487 
488  // Exit:
489 
490  return;
491 }
492 
493 void
496 {
497  // Preconditions:
498 
499  require(xauto_access || state_is_read_accessible());
500  require(!is_invertible());
501  require((1 <= schema().df()) && (schema().df() <= 3));
502 
503  // Body:
504 
505  if(xauto_access)
506  {
507  get_read_access();
508  }
509 
510  switch(schema().df())
511  {
512  case 1:
513  _inverter = new geometry::d_tree_point_locator<1, 1>(*this);
514  break;
515 
516  case 2:
517  _inverter = new geometry::d_tree_point_locator<2, 2>(*this);
518  break;
519 
520  case 3:
521  _inverter = new geometry::d_tree_point_locator<3, 3>(*this);
522  break;
523  }
524 
525  if(xauto_access)
526  {
527  release_access();
528  }
529 
530  // Postconditions:
531 
532  ensure(is_invertible());
533 
534  // Exit:
535 
536  return;
537 }
538 
539 void
541 initialize_d_tree_point_locator(size_type xdepth, bool xauto_access)
542 {
543  // Preconditions:
544 
545  require(xauto_access || state_is_read_accessible());
546  require(!is_invertible());
547  require((1 <= schema().df()) && (schema().df() <= 3));
548  require(xdepth > 0);
549 
550  // Body:
551 
552  if(xauto_access)
553  {
554  get_read_access();
555  }
556 
557  switch(schema().df())
558  {
559  case 1:
560  _inverter = new geometry::d_tree_point_locator<1, 1>(*this, xdepth);
561  break;
562 
563  case 2:
564  _inverter = new geometry::d_tree_point_locator<2, 2>(*this, xdepth);
565  break;
566 
567  case 3:
568  _inverter = new geometry::d_tree_point_locator<3, 3>(*this, xdepth);
569  break;
570  }
571 
572  if(xauto_access)
573  {
574  release_access();
575  }
576 
577  // Postconditions:
578 
579  ensure(is_invertible());
580 
581  // Exit:
582 
583  return;
584 }
585 
586 void
589 {
590  // Preconditions:
591 
592  require(xauto_access || state_is_read_accessible());
593  require(!is_invertible());
594  require((1 <= schema().df()) && (schema().df() <= 3));
595 
596  // Body:
597 
598  if(xauto_access)
599  {
600  get_read_access();
601  }
602 
603  switch(schema().df())
604  {
605  case 1:
606  _inverter = new geometry::d_uniform_point_locator<1, 1>(*this);
607  break;
608 
609  case 2:
610  _inverter = new geometry::d_uniform_point_locator<2, 2>(*this);
611  break;
612 
613  case 3:
614  _inverter = new geometry::d_uniform_point_locator<3, 3>(*this);
615  break;
616  }
617 
618  if(xauto_access)
619  {
620  release_access();
621  }
622 
623  // Postconditions:
624 
625 
626  // Exit:
627 
628  return;
629 }
630 
631 void
634 {
635  // Preconditions:
636 
637  require(is_invertible());
638 
639  // Body:
640 
641  _inverter->update();
642 
643  // Postconditions:
644 
645 
646  // Exit:
647 
648  return;
649 }
650 
651 bool
654 {
655  bool result;
656 
657  // Preconditions:
658 
659 
660  // Body:
661 
664 
665  result = (_inverter != 0);
666 
667  // Postconditions:
668 
669 
670  // Exit:
671 
672  return result;
673 }
674 
677 inverter() const
678 {
679 
680  // Preconditions:
681 
682  require(is_invertible());
683 
684  // Body:
685 
686  const geometry::point_locator& result = *_inverter;
687 
688  // Postconditions:
689 
690 
691  // Exit:
692 
693  return result;
694 }
695 
696 
699 point_at_value(const ed& xr)
700 {
701  chart_point* result;
702 
703  // Preconditions:
704 
705  require(xr.state_is_read_accessible());
706  require(xr.d() == schema().df());
707 
708  // Body:
709 
710  // Make a new chart point to return as the result.
711 
712  result = chart_point::new_chart_point(schema().db());
713 
714  point_at_value_pa(xr, *result);
715 
716  // Postconditions:
717 
718  ensure(invariant());
719  ensure(result != 0);
720 
721  // Exit:
722 
723  return result;
724 }
725 
726 
727 void
729 point_at_value_pa(const ed& xr, chart_point& xresult)
730 {
731  // Preconditions:
732 
733  require(xr.state_is_read_accessible());
734  require(xr.d() == schema().df());
735 
736  // Body:
737 
738  const sec_vd_dof_type* lr_dofs =
739  reinterpret_cast<const sec_vd_dof_type*>(xr.dof_map().dof_tuple());
740 
741  point_at_value_ua(lr_dofs, xr.d(), xresult);
742 
743  // Postconditions:
744 
745  ensure(unexecutable(xresult.is_valid() ?
746  xresult.chart() contains xvalue at xresult.local_coord() :
747  no chart contains xvalue));
748 
749  // Exit:
750 
751  return;
752 }
753 
754 
755 void
758  size_type xvalue_ub,
759  chart_point& xresult)
760 {
761  // Preconditions:
762 
763  require(xvalue != 0);
764  require(xvalue_ub >= schema().df());
765  require(xresult.db() >= schema().db());
766  require(is_invertible());
767 
768  // Body:
769 
770  _inverter->point_at_value(xvalue, xvalue_ub, xresult);
771 
772  // Postconditions:
773 
774  ensure(unexecutable(xresult.is_valid() ?
775  xresult.chart() contains xvalue at xresult.local_coord() :
776  no chart contains xvalue));
777 
778  // Exit:
779 }
780 
781 
782 void
785  size_type xvalue_ub,
786  block<chart_point_3d>& xresult)
787 {
788  // Preconditions:
789 
790  require(xvalue != 0);
791  require(xvalue_ub >= schema().df());
792  require(schema().db() <= 3);
793  require(is_invertible());
794 
795  define_old_variable(int old_xresult_ct = xresult.ct());
796 
797  // Body:
798 
799  _inverter->all_points_at_value(xvalue, xvalue_ub, xresult);
800 
801  // Postconditions:
802 
803  ensure(xresult.ct() >= old_xresult_ct);
804  ensure_for_all(i, old_xresult_ct, xresult.ct(), xresult[i].is_valid());
805 
806  // Exit:
807 }
808 
809 
810 void
813  size_type xvalue_ub,
814  block<branch_point_pair>& xresult)
815 {
816  // Preconditions:
817 
818  require(xvalue != 0);
819  require(xvalue_ub >= schema().df());
820  require(schema().db() <= 3);
821  require(is_invertible());
822 
823  define_old_variable(int old_xresult_ct = xresult.ct());
824 
825  // Body:
826 
827  _inverter->branch_points_at_value(xvalue, xvalue_ub, xresult);
828 
829  // Postconditions:
830 
831  ensure(xresult.ct() >= old_xresult_ct);
832  ensure_for_all(i, old_xresult_ct, xresult.ct(),
833  host()->contains_member(xresult[i].first, true));
834  ensure_for_all(i, old_xresult_ct, xresult.ct(), xresult[i].second.is_valid());
835 
836  // Exit:
837 }
838 
839 // PROTECTED MEMBER FUNCTIONS
840 
841 void
844 {
845  // Preconditions:
846 
847 
848  // Body:
849 
851 
852  if(_inverter != 0)
853  {
854  delete _inverter;
855  _inverter = 0;
856  }
857 
858  // Postconditions:
859 
860  ensure(!is_invertible());
861 
862  // Exit:
863 
864  return;
865 }
866 
867 
868 // ===========================================================
869 // ANY FACET
870 // ===========================================================
871 
872 // PUBLIC MEMBER FUNCTIONS
873 
876 clone() const
877 {
878  // Preconditions:
879 
880 
881  // Body:
882 
883  sec_ed_invertible *result = new sec_ed_invertible();
884 
885  // Postconditions:
886 
887  ensure(result != 0);
888 
889  return result;
890 
891 }
892 
893 bool
895 is_ancestor_of(const any* xother) const
896 {
897 
898  // Preconditions:
899 
900  require(xother != 0);
901 
902  // Body:
903 
904  // If other may be dynamically cast to the type of this then this is an
905  // ancestor of xother.
906 
907  bool result = dynamic_cast<const sec_ed_invertible*>(xother) != 0;
908 
909  // Postconditions:
910 
911  // ensure(invariant());
912 
913  // Exit:
914 
915  return result;
916 
917 }
918 
919 bool
921 invariant() const
922 {
923  bool result = true;
924 
925  // Body:
926 
927  if (invariant_check())
928  {
929  // Must satisfy base class invariant
930 
931  invariance(sec_ed::invariant());
932 
933  // Prevent recursive calls to invariant
934 
936 
937  // Finished, turn invariant checking back on.
938 
940  }
941 
942  // Exit:
943 
944  return result;
945 }
virtual void update()=0
Updates the search structure to the current values of coordinates().
virtual void point_at_value(const sec_vd_value_type *xvalue, size_type xvalue_ub, chart_point &xresult)=0
Finds a chart point at which coordinates() has value xvalue.
int df() const
The dimension of the restricted fiber.
virtual int db() const
The dimension of the restricted base.
static chart_point * new_chart_point(int xdb)
Factory method; creates a chart point with db() == xdb.
Definition: chart_point.cc:43
size_type ct() const
The number of items currently in use.
virtual void initialize_d_array_point_locator(bool xauto_access)
Initializes search structure using d_array_point_locater with bin_ub computed from size of mesh...
virtual array_poset_dof_map & dof_map(bool xrequire_write_access=false)
The map from client_ids to dof values for this poset member (mutable version)
Definition: tuple.cc:589
An abstract point location query in domains with global coordinate dimension DC and local coordinate ...
The default name space; a poset which contains other posets as members.
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
virtual void initialize_point_locator(bool xauto_access)
Initializes point locater search structure using default values.
virtual int db() const =0
The dimension of this chart.
Definition: chart_point.cc:141
bool is_invertible() const
True if this can be inverted.
virtual void all_points_at_value(const sec_vd_value_type *xvalue, size_type xvalue_ub, block< chart_point_3d > &xresult)=0
Finds all chart points at which coordinates() has value xvalue and appends them to xresult...
A path defined by a poset name and a member name separated by a forward slash (&#39;/&#39;). For example: "cell_definitions/triangle".
Definition: poset_path.h:48
bool is_ancestor_of(const any *other) const
True if other conforms to current.
virtual bool invariant() const
Class invariant.
STL namespace.
virtual void point_at_value_pa(const ed &xvalue, chart_point &xresult)
Finds a chart point which is the preimage in this of xvalue; pre-allocated version.
A point in chart space.
Definition: chart_point.h:52
virtual void point_at_value_ua(const sec_vd_dof_type *xvalue, size_type xvalue_ub, chart_point &xresult)
Finds a chart point which is the preimage in this of xvalue; unattached version.
virtual void get_read_access() const
Get read access to the state associated with this.
host_type * host() const
The poset this is a member of.
Definition: sec_at1.cc:525
virtual void initialize_d_tree_point_locator(bool xauto_access)
Initializes search structure using d_tree_point_locater with depth computed from the size of the mesh...
std::string name() const
A name for this.
bool is_valid() const
True if this ia a valid point in a chart.
Definition: chart_point.cc:303
virtual void release_access(bool xall=false) const
Release access. If xall is true, release all levels of access. Otherwise, release one level of access...
virtual void initialize_d_uniform_point_locator(bool xauto_access)
Initializes search structure using d_uniform_point_locater.
virtual chart_point * point_at_value(const ed &xr)
Finds a chart point which is the preimage in this of xr; auto-allocated version.
A section of a fiber bundle with a d-dimensional Euclidean vector space fiber.
Definition: sec_ed.h:47
Abstract base class with useful features for all objects.
Definition: any.h:39
An abstract invertible section of a fiber bundle with a d-dimensional base space and a d-dimensional ...
Euclidean vector space of dimension d (volatile version).
Definition: ed.h:44
A point location query in domains with global coordinate dimension DC and local coordinate dimension ...
virtual void all_points_at_value_ua(const sec_vd_value_type *xvalue, size_type xvalue_ub, block< chart_point_3d > &xresult)
Finds all chart points at which this has value xvalue and appends them to xresult. Note that charts overlap at their boundaries and hence if xvalue lies on a boundary it is contained in more than one chart.
sec_ed_invertible()
Default constructor.
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
A point location query in domains with global coordinate dimension dc and local coordinate dimension ...
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
virtual bool contains_member(pod_index_type xmbr_hub_id, bool xauto_access=true) const
True if some version of this poset contains poset member with hub id xmbr_hub_id. ...
virtual void attach_handle_data_members()
Initializes handle data members when attaching to a different member in the same host.
virtual sec_vd & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(xother).
Definition: sec_vd.cc:282
void disable_invariant_check() const
Disable invariant check. Intended for preventing recursive calls to invariant and for suppressing inv...
Definition: any.h:97
A point location query in domains with uniform global coordinates of dimension dc and local coordinat...
virtual void * dof_tuple()
The dof tuple (mutable version).
bool invariant_check() const
True if invariant checking is enabled.
Definition: any.h:79
Euclidean vector space of dimension d (peresistent version).
Definition: ed.h:210
virtual section_space_schema_member & schema()
The restricted schema for this (mutable version).
bool invariant() const
Class invariant.
Definition: sec_ed.cc:590
virtual sec_ed_invertible * clone() const
Make a new handle, no state instance of current.
int db() const
The dimension of the base space component.
bool is_uniform() const
True if this is a uniform coordinate field.
virtual int d() const
Dimension of this as a vector space.
Definition: vd.cc:1017
virtual void branch_points_at_value_ua(const sec_vd_value_type *xvalue, size_type xvalue_ub, block< branch_point_pair > &xresult)
Finds one chart point in each branch at which this has value xvalue and appends them to xresult...
int df() const
The dimension of the fiber space component.
const geometry::point_locator & inverter() const
The search structure used for inversion.
void attach_to_state(const namespace_poset *xns, const poset_path &xpath, bool xauto_access=true)
Attach to the state specified by path xpath in the namespace xns.
An abstract client handle for a member of a poset.
static bool & use_d_array_point_locator()
If true default inverter initialization uses d_array_point_locator other wise uses d_tree_point_locat...
double sec_vd_dof_type
The type of degree of freedom in the section space.
Definition: fiber_bundle.h:78
virtual void update_inversion()
Updates search structure to current value of this.
sec_rep_descriptor & rep()
The representation for section spaces on this schema (mutable version).
virtual void branch_points_at_value(const sec_vd_value_type *xvalue, size_type xvalue_ub, block< branch_point_pair > &xresult)=0
Finds one chart point in each branch at which coordinates() has value xvalue and appends them to xres...
Namespace for geometry component of sheaf system.
Definition: field_vd.h:54
vd_value_type sec_vd_value_type
The type of component in the value of a section at a point.
Definition: fiber_bundle.h:73
void enable_invariant_check() const
Enable invariant checking.
Definition: any.h:87
virtual coord_type local_coord(int xi) const =0
The xi-th local coordinate of this point.
Definition: chart_point.cc:163
virtual sec_ed_invertible & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
A point location query in domains with global coordinate dimension DC and local coordinate dimension ...
void attach_handle_data_members()
Initializes data members introduced by this handle.
Definition: sec_tuple.cc:581
An abstract point location query in domains with global coordinate dimension dc and local coordinate ...
Definition: point_locator.h:52
A handle for a poset whose members are numerical representations of sections of a fiber bundle...
Definition: sec_rep_space.h:61