aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Carpet/Carpet/src/Initialise.cc4
-rw-r--r--Carpet/Carpet/src/Recompose.cc16
-rw-r--r--Carpet/Carpet/src/SetupGH.cc4
-rw-r--r--Carpet/Carpet/src/modes.cc6
-rw-r--r--Carpet/CarpetIOHDF5/src/Recover.cc8
-rw-r--r--Carpet/CarpetInterp/src/interp.cc10
-rw-r--r--Carpet/CarpetLib/src/dh.cc6
-rw-r--r--Carpet/CarpetLib/src/gh.cc66
-rw-r--r--Carpet/CarpetLib/src/gh.hh38
-rw-r--r--Carpet/CarpetReduce/src/mask_carpet.cc8
-rw-r--r--Carpet/CarpetRegrid/src/automatic.cc4
11 files changed, 94 insertions, 76 deletions
diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc
index 8d6003ee9..25f0a4b75 100644
--- a/Carpet/Carpet/src/Initialise.cc
+++ b/Carpet/Carpet/src/Initialise.cc
@@ -111,8 +111,8 @@ namespace Carpet {
// Write grid structure to file
OutputGridStructure
(cgh, m,
- vhh.at(m)->extents, vhh.at(m)->outer_boundaries,
- vhh.at(m)->processors);
+ vhh.at(m)->extents(), vhh.at(m)->outer_boundaries(),
+ vhh.at(m)->processors());
} // loop over maps
}
diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc
index 2991e8200..269606c8b 100644
--- a/Carpet/Carpet/src/Recompose.cc
+++ b/Carpet/Carpet/src/Recompose.cc
@@ -133,9 +133,9 @@ namespace Carpet {
bool did_change = false;
BEGIN_MAP_LOOP(cgh, CCTK_GF) {
- gh<dim>::rexts bbsss = vhh.at(map)->extents;
- gh<dim>::rbnds obss = vhh.at(map)->outer_boundaries;
- gh<dim>::rprocs pss = vhh.at(map)->processors;
+ gh<dim>::rexts bbsss = vhh.at(map)->extents();
+ gh<dim>::rbnds obss = vhh.at(map)->outer_boundaries();
+ gh<dim>::rprocs pss = vhh.at(map)->processors();
// Check whether to recompose
CCTK_INT const do_recompose
@@ -187,8 +187,8 @@ namespace Carpet {
for (int ml=0; ml<hh.mglevels(rl,c); ++ml) {
const int convfact = ipow(mgfact, ml);
const int levfact = ipow(reffact, rl);
- const ivect lower = hh.extents.at(rl).at(c).at(ml).lower();
- const ivect upper = hh.extents.at(rl).at(c).at(ml).upper();
+ const ivect lower = hh.extents().at(rl).at(c).at(ml).lower();
+ const ivect upper = hh.extents().at(rl).at(c).at(ml).upper();
assert (all(lower * levfact % maxreflevelfact == 0));
assert (all(upper * levfact % maxreflevelfact == 0));
assert (all(((upper - lower) * levfact / maxreflevelfact)
@@ -196,7 +196,7 @@ namespace Carpet {
cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]"
<< " exterior: "
<< "proc "
- << hh.processors.at(rl).at(c)
+ << hh.processors().at(rl).at(c)
<< " "
<< lower * levfact / maxreflevelfact
<< " : "
@@ -215,8 +215,8 @@ namespace Carpet {
for (int ml=0; ml<hh.mglevels(rl,c); ++ml) {
const rvect origin = origin_space.at(0);
const rvect delta = delta_space;
- const ivect lower = hh.extents.at(rl).at(c).at(ml).lower();
- const ivect upper = hh.extents.at(rl).at(c).at(ml).upper();
+ const ivect lower = hh.extents().at(rl).at(c).at(ml).lower();
+ const ivect upper = hh.extents().at(rl).at(c).at(ml).upper();
const int convfact = ipow(mgfact, ml);
const int levfact = ipow(reffact, rl);
cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]"
diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc
index 71df9289d..8adbdc568 100644
--- a/Carpet/Carpet/src/SetupGH.cc
+++ b/Carpet/Carpet/src/SetupGH.cc
@@ -774,8 +774,8 @@ namespace Carpet {
const int rl = 0;
for (int c=0; c<vhh.at(m)->components(rl); ++c) {
for (int ml=0; ml<vhh.at(m)->mglevels(rl,c); ++ml) {
- const ivect lower = vhh.at(m)->extents.at(rl).at(c).at(ml).lower();
- const ivect upper = vhh.at(m)->extents.at(rl).at(c).at(ml).upper();
+ const ivect lower = vhh.at(m)->extents().at(rl).at(c).at(ml).lower();
+ const ivect upper = vhh.at(m)->extents().at(rl).at(c).at(ml).upper();
const int convfact = ipow(mgfact, ml);
assert (all(lower % maxreflevelfact == 0));
assert (all(upper % maxreflevelfact == 0));
diff --git a/Carpet/Carpet/src/modes.cc b/Carpet/Carpet/src/modes.cc
index 99820ee04..46e2dc184 100644
--- a/Carpet/Carpet/src/modes.cc
+++ b/Carpet/Carpet/src/modes.cc
@@ -95,8 +95,8 @@ namespace Carpet {
const int m = 0;
const int c = CCTK_MyProc(cgh);
- const ibbox& base = arrdata.at(group).at(m).hh->bases.at(rl).at(ml);
- const bbvect& obnds = arrdata.at(group).at(m).hh->outer_boundaries.at(rl).at(c);
+ const ibbox& base = arrdata.at(group).at(m).hh->bases().at(rl).at(ml);
+ const bbvect& obnds = arrdata.at(group).at(m).hh->outer_boundaries().at(rl).at(c);
const ibbox& ext = arrdata.at(group).at(m).dd->boxes.at(rl).at(c).at(ml).exterior;
ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones))
@@ -349,7 +349,7 @@ namespace Carpet {
// Set cGH fields
const ibbox& baseext = vdd.at(map)->bases.at(reflevel).at(mglevel).exterior;
- const bbvect& obnds = vhh.at(map)->outer_boundaries.at(reflevel).at(component);
+ const bbvect& obnds = vhh.at(map)->outer_boundaries().at(reflevel).at(component);
const ibbox& ext = vdd.at(map)->boxes.at(reflevel).at(component).at(mglevel).exterior;
ivect::ref(cgh->cctk_lsh) = ext.shape() / ext.stride();
diff --git a/Carpet/CarpetIOHDF5/src/Recover.cc b/Carpet/CarpetIOHDF5/src/Recover.cc
index 20520624e..f6e7fed61 100644
--- a/Carpet/CarpetIOHDF5/src/Recover.cc
+++ b/Carpet/CarpetIOHDF5/src/Recover.cc
@@ -553,8 +553,8 @@ int ReadVar (const cGH* const cctkGH, const int vindex,
assert(grouptype == CCTK_ARRAY || grouptype == CCTK_SCALAR);
if (grouptype == CCTK_SCALAR)
{
- lb[0] = arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component);
- ub[0] = arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component);
+ lb[0] = arrdata.at(group).at(Carpet::map).hh->processors().at(reflevel).at(component);
+ ub[0] = arrdata.at(group).at(Carpet::map).hh->processors().at(reflevel).at(component);
for(int i=1;i<dim;i++)
{
lb[i]=0;
@@ -565,10 +565,10 @@ int ReadVar (const cGH* const cctkGH, const int vindex,
{
const int newlb = lb[gpdim-1] +
(ub[gpdim-1]-lb[gpdim-1]+1)*
- (arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component));
+ (arrdata.at(group).at(Carpet::map).hh->processors().at(reflevel).at(component));
const int newub = ub[gpdim-1] +
(ub[gpdim-1]-lb[gpdim-1]+1)*
- (arrdata.at(group).at(Carpet::map).hh->processors.at(reflevel).at(component));
+ (arrdata.at(group).at(Carpet::map).hh->processors().at(reflevel).at(component));
lb[gpdim-1] = newlb;
ub[gpdim-1] = newub;
}
diff --git a/Carpet/CarpetInterp/src/interp.cc b/Carpet/CarpetInterp/src/interp.cc
index c5b90a410..ba9b01873 100644
--- a/Carpet/CarpetInterp/src/interp.cc
+++ b/Carpet/CarpetInterp/src/interp.cc
@@ -279,11 +279,11 @@ namespace CarpetInterp {
int const fact = maxreflevelfact / ipow(reffact, rl) * ipow(mgfact, mglevel);
ivect const ipos = ivect(floor((pos - lower) / (delta * fact) + 0.5)) * fact;
- assert (all(ipos % vhh.at(m)->bases.at(rl).at(ml).stride() == 0));
+ assert (all(ipos % vhh.at(m)->bases().at(rl).at(ml).stride() == 0));
// TODO: use something faster than a linear search
for (int c=0; c<vhh.at(m)->components(rl); ++c) {
- if (vhh.at(m)->extents.at(rl).at(c).at(ml).contains(ipos)) {
+ if (vhh.at(m)->extents().at(rl).at(c).at(ml).contains(ipos)) {
rlev.at(n) = rl;
home.at(n) = c;
goto found;
@@ -360,7 +360,7 @@ namespace CarpetInterp {
for (int rl=minrl; rl<maxrl; ++rl) {
for (int c=0; c<vhh.at(m)->components(rl); ++c) {
allcoords.at(ind_prc(p,m,rl,c)).change_processor
- (state, vhh.at(m)->processors.at(rl).at(c));
+ (state, vhh.at(m)->processors().at(rl).at(c));
}
}
}
@@ -383,7 +383,7 @@ namespace CarpetInterp {
ivect const str (1);
ibbox const extent (lo, up-str, str);
alloutputs.at(ind_prc(p,m,rl,c)).allocate
- (extent, vhh.at(m)->processors.at(rl).at(c));
+ (extent, vhh.at(m)->processors().at(rl).at(c));
ivect const slo (0);
ivect sup (1);
@@ -391,7 +391,7 @@ namespace CarpetInterp {
ivect const sstr (1);
ibbox const sextent (lo, up-str, str);
allstatuses.at(ind_prc(p,m,rl,c)).allocate
- (sextent, vhh.at(m)->processors.at(rl).at(c));
+ (sextent, vhh.at(m)->processors().at(rl).at(c));
}
}
}
diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc
index 13a780a18..0502342d3 100644
--- a/Carpet/CarpetLib/src/dh.cc
+++ b/Carpet/CarpetLib/src/dh.cc
@@ -93,7 +93,7 @@ void dh<D>::allocate_bboxes() {
for (int c=0; c<h.components(rl); ++c) {
boxes.at(rl).at(c).resize(h.mglevels(rl,c));
for (int ml=0; ml<h.mglevels(rl,c); ++ml) {
- const ibbox intr = h.extents.at(rl).at(c).at(ml);
+ const ibbox intr = h.extents().at(rl).at(c).at(ml);
dboxes & b = boxes.at(rl).at(c).at(ml);
// Interior
@@ -107,8 +107,8 @@ void dh<D>::allocate_bboxes() {
// the exterior is redundant)
ivect ldist(lghosts), udist(ughosts);
for (int d=0; d<D; ++d) {
- if (h.outer_boundaries.at(rl).at(c)[d][0]) ldist[d] = 0;
- if (h.outer_boundaries.at(rl).at(c)[d][1]) udist[d] = 0;
+ if (h.outer_boundaries().at(rl).at(c)[d][0]) ldist[d] = 0;
+ if (h.outer_boundaries().at(rl).at(c)[d][1]) udist[d] = 0;
}
b.exterior = intr.expand(ldist, udist);
diff --git a/Carpet/CarpetLib/src/gh.cc b/Carpet/CarpetLib/src/gh.cc
index 26f831337..bce6afc92 100644
--- a/Carpet/CarpetLib/src/gh.cc
+++ b/Carpet/CarpetLib/src/gh.cc
@@ -41,9 +41,9 @@ void gh<D>::recompose (const rexts& exts,
{
DECLARE_CCTK_PARAMETERS;
- extents = exts;
- outer_boundaries = outer_bounds;
- processors = procs;
+ _extents = exts;
+ _outer_boundaries = outer_bounds;
+ _processors = procs;
// Consistency checks
@@ -76,11 +76,11 @@ void gh<D>::recompose (const rexts& exts,
template<int D>
void gh<D>::check_processor_number_consistency () {
for (int rl=0; rl<reflevels(); ++rl) {
- assert (processors.size() == extents.size());
- assert (outer_boundaries.size() == extents.size());
+ assert (processors().size() == extents().size());
+ assert (outer_boundaries().size() == extents().size());
for (int c=0; c<components(rl); ++c) {
- assert (processors.at(rl).size() == extents.at(rl).size());
- assert (outer_boundaries.at(rl).size() == extents.at(rl).size());
+ assert (processors().at(rl).size() == extents().at(rl).size());
+ assert (outer_boundaries().at(rl).size() == extents().at(rl).size());
}
}
}
@@ -91,14 +91,14 @@ void gh<D>::check_multigrid_consistency () {
for (int c=0; c<components(rl); ++c) {
assert (mglevels(rl,c)>0);
for (int ml=1; ml<mglevels(rl,c); ++ml) {
- assert (all(extents.at(rl).at(c).at(ml).stride()
- == ivect(mgfact) * extents.at(rl).at(c).at(ml-1).stride()));
+ assert (all(extents().at(rl).at(c).at(ml).stride()
+ == ivect(mgfact) * extents().at(rl).at(c).at(ml-1).stride()));
// TODO: put the check back in, taking outer boundaries into
// account
#if 0
- assert (extents.at(rl).at(c).at(ml)
- .contracted_for(extents.at(rl).at(c).at(ml-1))
- .is_contained_in(extents.at(rl).at(c).at(ml-1)));
+ assert (extents().at(rl).at(c).at(ml)
+ .contracted_for(extents().at(rl).at(c).at(ml-1))
+ .is_contained_in(extents().at(rl).at(c).at(ml-1)));
#endif
}
}
@@ -111,12 +111,12 @@ void gh<D>::check_component_consistency () {
assert (components(rl)>0);
for (int c=0; c<components(rl); ++c) {
for (int ml=0; ml<mglevels(rl,c); ++ml) {
- ibbox &b = extents.at(rl).at(c).at(ml);
- ibbox &b0 = extents.at(rl).at(0).at(ml);
+ const ibbox &b = extents().at(rl).at(c).at(ml);
+ const ibbox &b0 = extents().at(rl).at(0).at(ml);
assert (all(b.stride() == b0.stride()));
assert (b.is_aligned_with(b0));
for (int cc=c+1; cc<components(rl); ++cc) {
- assert ((b & extents.at(rl).at(cc).at(ml)).empty());
+ assert ((b & extents().at(rl).at(cc).at(ml)).empty());
}
}
}
@@ -130,7 +130,7 @@ void gh<D>::check_base_grid_extent () {
// TODO: put the check back in, taking outer boundaries into
// account
#if 0
- assert (extents.at(0).at(c).at(0).is_contained_in(baseextent));
+ assert (extents().at(0).at(c).at(0).is_contained_in(baseextent));
#endif
}
}
@@ -139,19 +139,19 @@ void gh<D>::check_base_grid_extent () {
template<int D>
void gh<D>::check_refinement_levels () {
for (int rl=1; rl<reflevels(); ++rl) {
- assert (all(extents.at(rl-1).at(0).at(0).stride()
- == ivect(reffact) * extents.at(rl).at(0).at(0).stride()));
+ assert (all(extents().at(rl-1).at(0).at(0).stride()
+ == ivect(reffact) * extents().at(rl).at(0).at(0).stride()));
// Check contained-ness:
// first take all coarse grids ...
bboxset<int,D> all;
for (int c=0; c<components(rl-1); ++c) {
- all |= extents.at(rl-1).at(c).at(0);
+ all |= extents().at(rl-1).at(c).at(0);
}
// ... remember their size ...
const int sz = all.size();
// ... then add the coarsified fine grids ...
for (int c=0; c<components(rl); ++c) {
- all |= extents.at(rl).at(c).at(0).contracted_for(extents.at(rl-1).at(0).at(0));
+ all |= extents().at(rl).at(c).at(0).contracted_for(extents().at(rl-1).at(0).at(0));
}
// ... and then check the sizes:
assert (all.size() == sz);
@@ -160,17 +160,17 @@ void gh<D>::check_refinement_levels () {
template<int D>
void gh<D>::calculate_base_extents_of_all_levels () {
- bases.resize(reflevels());
+ _bases.resize(reflevels());
for (int rl=0; rl<reflevels(); ++rl) {
if (components(rl)==0) {
- bases.at(rl).resize(0);
+ _bases.at(rl).resize(0);
} else {
- bases.at(rl).resize(mglevels(rl,0));
+ _bases.at(rl).resize(mglevels(rl,0));
for (int ml=0; ml<mglevels(rl,0); ++ml) {
- bases.at(rl).at(ml) = ibbox();
- ibbox &bb = bases.at(rl).at(ml);
+ _bases.at(rl).at(ml) = ibbox();
+ ibbox &bb = _bases.at(rl).at(ml);
for (int c=0; c<components(rl); ++c) {
- bb = bb.expanded_containing(extents.at(rl).at(c).at(ml));
+ bb = bb.expanded_containing(extents().at(rl).at(c).at(ml));
}
}
}
@@ -222,9 +222,9 @@ void gh<D>::do_output_bboxes (ostream& os) const {
os << endl;
os << "gh bboxes:" << endl;
os << "rl=" << rl << " c=" << c << " ml=" << ml << endl;
- os << "extent=" << extents.at(rl).at(c).at(ml) << endl;
- os << "outer_boundary=" << outer_boundaries.at(rl).at(c) << endl;
- os << "processor=" << processors.at(rl).at(c) << endl;
+ os << "extent=" << extents().at(rl).at(c).at(ml) << endl;
+ os << "outer_boundary=" << outer_boundaries().at(rl).at(c) << endl;
+ os << "processor=" << processors().at(rl).at(c) << endl;
}
}
}
@@ -238,7 +238,7 @@ void gh<D>::do_output_bases (ostream& os) const {
os << endl;
os << "gh bases:" << endl;
os << "rl=" << rl << " ml=" << ml << endl;
- os << "base=" << bases.at(rl).at(ml) << endl;
+ os << "base=" << bases().at(rl).at(ml) << endl;
}
}
}
@@ -249,9 +249,9 @@ ostream& gh<D>::output (ostream& os) const {
os << "gh<" << D << ">:"
<< "reffactor=" << reffact << ",refcentering=" << refcent << ","
<< "mgfactor=" << mgfact << ",mgcentering=" << mgcent << ","
- << "extents=" << extents << ","
- << "outer_boundaries=" << outer_boundaries << ","
- << "processors=" << processors << ","
+ << "extents=" << extents() << ","
+ << "outer_boundaries=" << outer_boundaries() << ","
+ << "processors=" << processors() << ","
<< "dhs={";
int cnt=0;
for (typename list<dh<D>*>::const_iterator d = dhs.begin();
diff --git a/Carpet/CarpetLib/src/gh.hh b/Carpet/CarpetLib/src/gh.hh
index 0bad3540a..462564f5c 100644
--- a/Carpet/CarpetLib/src/gh.hh
+++ b/Carpet/CarpetLib/src/gh.hh
@@ -62,14 +62,15 @@ public: // should be readonly
const centering mgcent; // default (vertex or cell centered)
const ibbox baseextent;
- vector<vector<ibbox> > bases; // [rl][ml]
- // TODO: invent structure for this
- rexts extents; // extents of all grids
- rbnds outer_boundaries; // boundary descriptions of all grids
- rprocs processors; // processor numbers of all grids
private:
+ vector<vector<ibbox> > _bases; // [rl][ml]
+ // TODO: invent structure for this
+ rexts _extents; // extents of all grids
+ rbnds _outer_boundaries; // boundary descriptions of all grids
+ rprocs _processors; // processor numbers of all grids
+
list<th<D>*> ths; // list of all time hierarchies
list<dh<D>*> dhs; // list of all data hierarchies
@@ -87,26 +88,42 @@ public:
void recompose (const rexts& exts, const rbnds& outer_bounds,
const rprocs& procs,
const bool do_prolongate);
+
+ const rexts & extents() const {
+ return _extents;
+ }
+
+ const rbnds & outer_boundaries() const {
+ return _outer_boundaries;
+ }
+
+ const rprocs & processors() const {
+ return _processors;
+ }
+
+ const vector<vector<ibbox> > & bases() const {
+ return _bases;
+ }
// Accessors
int reflevels () const {
- return (int)extents.size();
+ return (int)_extents.size();
}
int components (const int rl) const {
- return (int)extents.at(rl).size();
+ return (int)_extents.at(rl).size();
}
int mglevels (const int rl, const int c) const {
- return (int)extents.at(rl).at(c).size();
+ return (int)_extents.at(rl).at(c).size();
}
bvect outer_boundary (const int rl, const int c) const {
- return outer_boundaries.at(rl).at(c);
+ return _outer_boundaries.at(rl).at(c);
}
int proc (const int rl, const int c) const {
- return processors.at(rl).at(c);
+ return _processors.at(rl).at(c);
}
bool is_local (const int rl, const int c) const {
@@ -137,6 +154,7 @@ private:
void calculate_base_extents_of_all_levels ();
void do_output_bboxes (ostream& os) const;
void do_output_bases (ostream& os) const;
+
};
diff --git a/Carpet/CarpetReduce/src/mask_carpet.cc b/Carpet/CarpetReduce/src/mask_carpet.cc
index 7a223d693..912fbda8a 100644
--- a/Carpet/CarpetReduce/src/mask_carpet.cc
+++ b/Carpet/CarpetReduce/src/mask_carpet.cc
@@ -50,22 +50,22 @@ namespace CarpetMask {
gh<dim> const & hh = *vhh.at(Carpet::map);
dh<dim> const & dd = *vdd.at(Carpet::map);
- ibbox const & base = hh.bases.at(reflevel).at(mglevel);
+ ibbox const & base = hh.bases().at(reflevel).at(mglevel);
// Calculate the union of all refined regions
ibset refined;
for (int c=0; c<hh.components(reflevel); ++c) {
- refined |= hh.extents.at(reflevel).at(c).at(mglevel);
+ refined |= hh.extents().at(reflevel).at(c).at(mglevel);
}
refined.normalize();
// Calculate the union of all coarse regions
ibset parent;
for (int c=0; c<hh.components(reflevel-1); ++c) {
-// parent |= hh.extents.at(reflevel-1).at(c).at(mglevel).expanded_for(base);
- parent |= hh.extents.at(reflevel-1).at(c).at(mglevel).expand(ivect(reffact-1),ivect(reffact-1)).contracted_for(base);
+// parent |= hh.extents().at(reflevel-1).at(c).at(mglevel).expanded_for(base);
+ parent |= hh.extents().at(reflevel-1).at(c).at(mglevel).expand(ivect(reffact-1),ivect(reffact-1)).contracted_for(base);
}
parent.normalize();
diff --git a/Carpet/CarpetRegrid/src/automatic.cc b/Carpet/CarpetRegrid/src/automatic.cc
index 775175db1..8549b3875 100644
--- a/Carpet/CarpetRegrid/src/automatic.cc
+++ b/Carpet/CarpetRegrid/src/automatic.cc
@@ -125,7 +125,7 @@ namespace CarpetRegrid {
list<ibbox> bbl;
for (int c=0; c<hh.components(rl); ++c) {
- const ibbox region = hh.extents.at(rl).at(c).at(ml);
+ const ibbox region = hh.extents().at(rl).at(c).at(ml);
assert (! region.empty());
const data<CCTK_REAL,dim>& errordata = *errorgf(tl,rl,c,ml);
@@ -162,7 +162,7 @@ namespace CarpetRegrid {
// Create obs from bbs
obs.resize (bbs.size());
for (size_t c=0; c<bbs.size(); ++c) {
- assert (hh.bases.size()>0 && hh.bases.at(0).size()>0);
+ assert (hh.bases().size()>0 && hh.bases().at(0).size()>0);
obs.at(c) = zip ((vect<bool,2> (*) (bool, bool)) &vect<bool,2>::make,
bbs.at(c).lower() == hh.baseextent.lower(),
bbs.at(c).upper() == hh.baseextent.upper());