26 template <
short_t d,
class T>
39 template <
short_t d,
class T>
45 template <
short_t d,
class T>
57 GISMO_ASSERT(m_basis!=
nullptr,
"basis is not a gsHTensorBasis");
62 m_center = (m_coords.col(1) + m_coords.col(0))/2;
63 m_indices = _computeIndices(m_coords,m_center);
66 template <
short_t d,
class T>
69 m_indices(low,upp,level),
80 template <
short_t d,
class T>
94 template <
short_t d,
class T>
104 GISMO_ENSURE(indices.size()==2*d+1,
"Index size is wrong");
108 low[k] = indices[k+1];
109 upp[k] = indices[k+d+1];
119 template <
short_t d,
class T>
125 template <
short_t d,
class T>
128 operator=(
give(other));
131 template <
short_t d,
class T>
136 m_indices = other.m_indices;
138 m_coords = other.m_coords;
139 m_center = other.m_center;
140 m_basis = other.m_basis;
141 m_error = other.m_error;
142 m_error_ref = other.m_error_ref;
143 m_error_crs = other.m_error_crs;
144 m_marked = other.m_marked;
145 m_index = other.m_index;
150 template <
short_t d,
class T>
153 m_indices =
give(other.m_indices);
154 m_pid =
give(other.m_pid);
155 m_coords =
give(other.m_coords);
156 m_center =
give(other.m_center);
157 m_basis =
give(other.m_basis);
158 m_error =
give(other.m_error);
159 m_error_ref =
give(other.m_error_ref);
160 m_error_crs =
give(other.m_error_crs);
161 m_marked =
give(other.m_marked);
162 m_index =
give(other.m_index);
166 template <
short_t d,
class T>
179 return gsHBoxIsContained<d,T>()(*
this,other);
183 template <
short_t d,
class T>
195 return gsHBoxContains<d,T>()(*
this,other);
198 template <
short_t d,
class T>
202 res &= this->patch() == other.
patch();
203 res &= this->level() == other.
level();
204 for (
index_t i=0; i!=d && res; i++)
206 res &= this->lowerIndex().at(i) == other.
lowerIndex().at(i);
207 res &= this->upperIndex().at(i) == other.
upperIndex().at(i);
212 template <
short_t d,
class T>
215 return m_basis->getLevelAtPoint(this->getCenter()) == this->level();
218 template <
short_t d,
class T>
221 return m_basis->getLevelAtPoint(this->getCenter()) >= this->level();
224 template <
short_t d,
class T>
227 return m_basis->getLevelAtPoint(this->getCenter());
230 template <
short_t d,
class T>
233 GISMO_ASSERT(m_coords.size()!=0,
"Coordinates have not been computed! Please call computeCoordinates()");
237 template <
short_t d,
class T>
241 if (m_center.size()==0)
242 this->computeCenter();
246 template <
short_t d,
class T>
249 GISMO_ASSERT(m_coords.size()!=0,
"Coordinates have not been computed! Please call computeCoordinates()");
250 return m_coords.col(0);
253 template <
short_t d,
class T>
256 GISMO_ASSERT(m_coords.size()!=0,
"Coordinates have not been computed! Please call computeCoordinates()");
257 return m_coords.col(1);
260 template <
short_t d,
class T>
263 return (upperCorner() - lowerCorner()).norm();
266 template <
short_t d,
class T>
269 return (upperCorner() - lowerCorner()).minCoeff();
272 template <
short_t d,
class T>
275 return (upperCorner() - lowerCorner()).maxCoeff();
278 template <
short_t d,
class T>
280 template <
short_t d,
class T>
283 template <
short_t d,
class T>
286 template <
short_t d,
class T>
289 template <
short_t d,
class T>
295 template <
short_t d,
class T>
298 this->setError(error);
299 m_error_ref= math::pow(1./2.,alpha*m_basis->maxDegree()+beta) * error ;
300 m_error_crs= math::pow(2.,alpha*m_basis->maxDegree()+beta) * error ;
303 template <
short_t d,
class T>
306 template <
short_t d,
class T>
309 template <
short_t d,
class T>
312 template <
short_t d,
class T>
315 return m_error-m_error_ref;
318 template <
short_t d,
class T>
321 return m_error_crs-m_error;
324 template <
short_t d,
class T>
327 template <
short_t d,
class T>
330 template <
short_t d,
class T>
333 template <
short_t d,
class T>
336 template <
short_t d,
class T>
339 template <
short_t d,
class T>
342 template <
short_t d,
class T>
345 GISMO_ENSURE(this->level()>0,
"Box is at ground level and has no parent");
350 template <
short_t d,
class T>
355 GISMO_ASSERT(k >= 0,
"Requested ancestor k = "<<k<<
" should be greater than or equal to 0");
356 GISMO_ASSERT(lvl >= 0,
"Level lvl = "<<lvl<<
" should be larger than 0");
370 GISMO_ERROR(
"Cannot find ancestor with index k="<<k<<
" on level l="<<lvl<<
". Something went wrong?");
373 template <
short_t d,
class T>
381 template <
short_t d,
class T>
386 GISMO_ASSERT(k >= 0,
"Requested descendant k = "<<k<<
" should be larger than or equal to 0");
387 GISMO_ASSERT(lvl >= 0,
"Level lvl = "<<lvl<<
" should be larger than 0");
388 Container descendants(std::pow(std::pow(2,d),k-lvl));
390 descendants.push_back(*
this);
392 descendants = this->getChildren();
395 Container tmp = this->getChildren();
396 for (
index_t k_tmp = lvl+1; k_tmp!=k; k_tmp++)
400 for (Iterator it=tmp.begin(); it!=tmp.end(); it++)
402 Container tmp2 = it->getChildren();
403 for (Iterator it2=tmp2.begin(); it2!=tmp2.end(); it2++)
404 descendants.push_back(*it2);
412 template <
short_t d,
class T>
415 auto isthis = [
this](
const gsHBox<d,T> & other) {
return gsHBoxEqual<d,T>()(other,*
this); };
416 gsHBox<d,T> parent = this->getParent();
417 typename gsHBox<d,T>::Container children = parent.getChildren();
418 Iterator toErase = std::find_if(children.begin(),children.end(),isthis);
419 if (toErase!=children.end())
420 children.erase(toErase);
426 template <
short_t d,
class T>
430 container.push_back(*
this);
434 template <
short_t d,
class T>
437 HContainer container;
438 container.resize(this->level()+1);
439 container.at(this->level()).push_back(*
this);
443 template <
short_t d,
class T>
446 this->computeCenter();
450 m_basis->tensorLevel(lvl).active_into(m_center,acts);
458 Container tmpContainer;
459 for (
index_t act = 0; act!=acts.rows(); act++)
461 support = m_basis->tensorLevel(lvl).support(acts(act,0));
462 aabb = _computeIndices(support,lvl);
468 for (cIterator it = tmpContainer.begin(); it!=tmpContainer.end(); it++)
469 container.push_back(*it);
472 Container container2 = _makeUnique(container);
476 template <
short_t d,
class T>
480 GISMO_ASSERT(k <= lvl,
"Ancestor must be requested from a level lower than the current level (k <= l), but k="<<k<<
" and lvl="<<lvl);
483 return this->getSupportExtension();
492 template <
short_t d,
class T>
496 Container neighborhood;
503 extension = this->getMultiLevelSupportExtension(k);
506 for (Iterator it = extension.begin(); it!=extension.end(); it++)
510 neighborhood.push_back(*it);
516 template <
short_t d,
class T>
520 Container neighborhood;
521 Container parents, extension;
528 extension = this->getMultiLevelSupportExtension(k);
530 parents = _getParents(extension);
532 for (Iterator it = parents.begin(); it!=parents.end(); it++)
536 neighborhood.push_back(*it);
543 template <
short_t d,
class T>
548 result = this->getNeighborhood<gsHNeighborhood::T>(m);
550 result = this->getNeighborhood<gsHNeighborhood::H>(m);
552 GISMO_ERROR(
"Basis type should be gsTHBSplineBasis or gsHBSplineBasis");
556 template <
short_t d,
class T>
565 Container extension, children, childExtension, descendants, result;
566 index_t targetLvl = this->level() + m;
568 children = this->getChildren();
569 for (
typename gsHBox<d,T>::Iterator child=children.begin(); child!=children.end(); child++)
571 childExtension = child->getSupportExtension();
582 for (
typename gsHBox<d,T>::Iterator eIt = extension.begin(); eIt!=extension.end(); eIt++)
584 descendants = eIt->getDescendants(targetLvl);
585 result.insert(result.end(), descendants.begin(), descendants.end());
590 template <
short_t d,
class T>
599 Container descendants, result;
600 descendants = this->getCextension(m);
602 for (
typename gsHBox<d,T>::Iterator dIt = descendants.begin(); dIt!=descendants.end(); dIt++)
604 dIt->computeCenter();
605 if (dIt->levelInCenter()>=dIt->level())
606 result.push_back(*dIt);
611 template <
short_t d,
class T>
614 os <<
"Cell on patch "<<m_pid
615 <<
" on level "<<m_indices.level<<
". "
617 <<
"("<<m_indices.first.transpose()<<
")"
619 <<
"("<<m_indices.second.transpose()<<
")";
620 if (m_coords.cols()!=0)
622 os <<
"\nKnot values:\n"
623 <<
"("<<m_coords.col(0).transpose()<<
")"
625 <<
"("<<m_coords.col(1).transpose()<<
")";
627 os <<
"\nmarked = "<<m_marked<<
"";
628 os <<
"\nerror = "<<m_error<<
"";
632 template <
short_t d,
class T>
635 m_coords.resize(d,2);
640 const gsKnotVector<T> & kv = m_basis->tensorLevel(m_indices.level).knots(i);
641 low[i] = kv.
uValue(m_indices.first.at(i));
642 upp[i] = kv.
uValue(m_indices.second.at(i));
644 m_coords.col(0) = low;
645 m_coords.col(1) = upp;
648 template <
short_t d,
class T>
651 this->computeCoordinates();
652 m_center = (m_coords.col(0) + m_coords.col(1))/2;
655 template <
short_t d,
class T>
658 m_indices = _computeIndices(m_coords);
661 template <
short_t d,
class T>
662 gsAABB<d, index_t> gsHBox<d, T>::_computeIndices(
const gsMatrix<T> & coords,
index_t level)
664 typename gsHBox<d,T>::point low,upp;
668 const gsKnotVector<T> & kv = m_basis->tensorLevel(level).knots(j);
669 int k1 = (std::upper_bound(kv.domainUBegin(), kv.domainUEnd(),
670 coords(j,0) ) - 1).uIndex();
671 int k2 = (std::upper_bound(kv.domainUBegin(), kv.domainUEnd()+1,
672 coords(j,1) ) - 1).uIndex();
685 return gsAABB<d, index_t>(low,upp,level);
688 template <
short_t d,
class T>
689 gsAABB<d, index_t> gsHBox<d, T>::_computeIndices(
const gsMatrix<T> & coords)
691 gsMatrix<T> center = (coords.col(0) + coords.col(1))/2;
692 index_t level = m_basis->getLevelAtPoint(center);
693 return _computeIndices(coords,level);
696 template <
short_t d,
class T>
697 gsAABB<d, index_t> gsHBox<d, T>::_computeIndices(
const gsMatrix<T> & coords,
const gsMatrix<T> & center)
699 index_t level = m_basis->getLevelAtPoint(center);
700 return _computeIndices(coords,level);
703 template <
short_t d,
class T>
704 gsAABB<d, index_t> gsHBox<d, T>::_elevateBox(
const gsAABB<d, index_t> & box)
const
706 typename gsHBox<d,T>::point low,upp;
709 low.at(i) = box.first .at(i) / 2;
710 upp.at(i) = box.second.at(i) / 2 + (
index_t)(box.second.at(i) % 2 != 0);
712 return gsAABB<d, index_t>(low,upp,box.level-1);
715 template <
short_t d,
class T>
716 gsAABB<d, index_t> gsHBox<d, T>::_lowerBox(
const gsAABB<d, index_t> & box)
const
718 typename gsHBox<d,T>::point low,upp;
721 low.at(i) = box.first .at(i) * 2;
722 upp.at(i) = box.second.at(i) * 2;
724 return gsAABB<d, index_t>(low,upp,box.level+1);
727 template <
short_t d,
class T>
728 typename gsHBox<d,T>::HContainer gsHBox<d, T>::_getParents(HContainer & container)
const
731 result.resize(container.size()-1);
734 GISMO_ASSERT(container[0].size()==0,
"Boxes at level 0 cannot have a parent. Did something go wrong? You can run check() to see if the boxes are allocated coorectly");
736 HIterator resIt = result.begin();
737 for (HIterator hit = std::next(container.begin()); hit!=container.end(); hit++, resIt++)
738 for (Iterator it=hit->begin(); it!=hit->end(); it++)
739 resIt->push_back(it->getParent());
744 template <
short_t d,
class T>
745 typename gsHBox<d,T>::Container gsHBox<d, T>::_getParents(Container & container)
const
748 for (Iterator it=container.begin(); it!=container.end(); it++)
749 result.push_back(it->getParent());
755 template <
short_t d,
class T>
758 point low, upp, cur, curupp, ones;
760 cur = low = this->lowerIndex();
761 upp = this->upperIndex();
769 result.push_back(
gsHBox<d,T>(cur,curupp,this->level(),m_basis,m_pid));
775 template <
short_t d,
class T>
778 std::vector<index_t> result(5);
779 result[0] = this->level();
780 result[1] = this->lowerIndex()[0];
781 result[2] = this->lowerIndex()[1];
782 result[3] = this->upperIndex()[0];
783 result[4] = this->upperIndex()[1];
787 template <
short_t d,
class T>
790 GISMO_ASSERT(targetLevel > this->level(),
"Target level must be larger than the current level, but "<<targetLevel<<
"=<"<<this->level());
791 std::vector<index_t> result(2*d+1);
792 index_t diff = targetLevel - this->level();
793 result[0] = this->level() + diff;
794 index_t lowerIndex, upperIndex, degree;
797 degree = m_basis->degree(i);
800 if (degree % 2 == 1 && degree>1)
802 lowerIndex = this->lowerIndex()[i]*std::pow(2,diff);
803 ( lowerIndex < (degree-1)/2-1 ? lowerIndex=0 : lowerIndex-=(degree-1)/2-1 );
804 result[i+1] = lowerIndex;
805 upperIndex = this->upperIndex()[i]*std::pow(2,diff);
807 result[d+i+1] = upperIndex;
811 lowerIndex = this->lowerIndex()[i]*std::pow(2,diff);
812 ( lowerIndex < (degree-1)/2 ? lowerIndex=0 : lowerIndex-=(degree-1)/2 );
813 result[i+1] = lowerIndex;
814 upperIndex = this->upperIndex()[i]*std::pow(2,diff);
816 result[d+i+1] = upperIndex;
822 template <
short_t d,
class T>
825 GISMO_ASSERT(targetLevel < this->level(),
"Target level must be smaller than the current level, but "<<targetLevel<<
">="<<this->level());
826 std::vector<index_t> result(2*d+1);
827 index_t diff = this->level() - targetLevel;
828 result[0] = this->level() - diff;
831 result[i+1] = this->lowerIndex()[i]/std::pow(2,diff);
832 result[d+i+1] = this->upperIndex()[i]/std::pow(2,diff);
838 template <
short_t d,
class T>
839 typename gsHBox<d,T>::HContainer
gsHBox<d, T>::boxUnion(
const HContainer & container1,
const HContainer & container2)
const
841 HContainer result, region1, region2;
843 region1 = container1;
844 region2 = container2;
846 index_t lmax = std::max(region1.size(),region2.size());
847 region1.resize(lmax);
848 region2.resize(lmax);
851 for (
index_t l = 0; l!=lmax; l++)
852 result[l] = _boxUnion(region1[l],region2[l]);
857 template <
short_t d,
class T>
858 typename gsHBox<d, T>::Container gsHBox<d, T>::_boxUnion(
const Container & container1,
const Container & container2)
const
915 return gsHBoxUtils<d,T>::Union(container1,container2);
918 template <
short_t d,
class T>
919 typename gsHBox<d, T>::Container gsHBox<d, T>::_makeUnique(
const Container & container)
const
938 return gsHBoxUtils<d,T>::Unique(container);
941 template <
short_t d,
class T>
944 return (m_indices.first.array() >=0).any() && (m_indices.second.array() >=0).any();
947 template <
short_t d,
class T>
950 std::function<bool(const gsHBox<d,T> &)> pred = [](
const gsHBox<d,T> & box) {
return !(box.
good()); };
951 cIterator beg = std::remove_if(container.begin(),container.end(),pred);
952 container.erase(beg,container.end());
959 template<
short_t d,
class T>
960 class gsXml<
gsHBox<d,T> >
964 typedef gsHBox<d,T> Object;
966 GSXML_COMMON_FUNCTIONS(Object);
967 static std::string tag () {
return "HBox"; }
970 GSXML_GET_POINTER(Object);
972 static void get_into (gsXmlNode * node, Object & obj)
974 gsXmlNode * tmp = node->first_node(
"box");
977 std::vector<index_t> box;
978 box.push_back(atoi( tmp->first_attribute(
"level")->value() ));
980 std::istringstream str;
982 str.str( tmp->value() );
984 for(
unsigned i = 0; i < 2*d; i++)
990 if (tmp->first_attribute(
"patch"))
992 index_t patch = atoi(tmp->first_attribute(
"patch")->value());
993 obj = gsHBox<d,T>(box,
nullptr,patch);
996 obj = gsHBox<d,T>(box,
nullptr);
999 static gsXmlNode * put (
const Object & obj,
1002 gsXmlNode * tmp =
makeNode(
"HBox", data);
1003 tmp->append_attribute(
makeAttribute(
"type",internal::gsXml<Object>::type().c_str(), data) );
1006 gsMatrix<index_t> box(1,2*d);
1007 box.leftCols(d) = obj.lowerIndex().transpose();
1008 box.rightCols(d) = obj.upperIndex().transpose();
1010 mat->append_attribute(
makeAttribute(
"level", obj.level(), data));
1011 if (obj.patch()!=-1)
1012 mat->append_attribute(
makeAttribute(
"patch", obj.patch(), data));
1013 tmp->append_node(mat);
Re-implements gsDomainIterator for iteration over all boundary elements of a hierarchical parameter d...
Definition: gsHDomain.h:24
const point & upperIndex() const
Gets the upper index of the box.
Definition: gsHBox.hpp:281
bool isContained(const gsHBox< d, T > &other) const
Checks if the other cell is contained in this cell.
Definition: gsHBox.hpp:167
T projectedErrorRef() const
The error contribution of *this when it is refined.
Definition: gsHBox.hpp:307
Container getHneighborhood(index_t m)
Gets the H-neighborhood.
Definition: gsHBox.hpp:493
void clean(Container &container) const
Cleans the container from bad elements (see good())
Definition: gsHBox.hpp:948
gsVector< T, d > lowerCorner() const
Gets the lower corner of the box.
Definition: gsHBox.hpp:247
T projectedErrorCrs() const
The error contribution of *this when it is coarsened.
Definition: gsHBox.hpp:310
Container getMultiLevelSupportExtension(index_t k)
Gets the multi-level support extension.
Definition: gsHBox.hpp:477
void setIndex(index_t index)
Assigns an index to the object.
Definition: gsHBox.hpp:325
bool isActive() const
Determines if the box is active on its current level.
Definition: gsHBox.hpp:213
bool isSame(const gsHBox< d, T > &other) const
Determines whether the this box is the same as the other box.
Definition: gsHBox.hpp:199
Container getTneighborhood(index_t m)
Gets the T-neighborhood.
Definition: gsHBox.hpp:517
gsHBox< d, T > & operator=(const gsHBox< d, T > &other)
Assignment operator.
Definition: gsHBox.hpp:132
bool marked() const
Returns whether the element is marked or not.
Definition: gsHBox.hpp:337
A hierarchical B-spline basis of parametric dimension d.
Definition: gsHBSplineBasis.h:35
void setAndProjectError(T error, index_t alpha=2, index_t beta=0)
Sets the error of the object and compute the projection of the error on a finer mesh. The projection is performed based on a theoretical rate of convergence of alpha*p+beta.
Definition: gsHBox.hpp:296
void setMark(bool mark)
Sets the mark.
Definition: gsHBox.hpp:340
This class provides a Hierarchical Box (gsHBox)
Definition: gsHBox.h:54
index_t levelInCenter() const
Gets the level in the center of the object.
Definition: gsHBox.hpp:225
RefBox toBox() const
Returns a box representation of the object.
Definition: gsHBox.hpp:776
T getMaxCellLength() const
Return the length of the largest edge of the element.
Definition: gsHBox.hpp:273
index_t level() const
Gets the level of the object.
Definition: gsHBox.hpp:287
S give(S &x)
Definition: gsMemory.h:266
const gsMatrix< T > & getCoordinates() const
Gets the coordinates of the box (first column lower corner, second column higher corner).
Definition: gsHBox.hpp:231
#define index_t
Definition: gsConfig.h:32
#define GISMO_ENSURE(cond, message)
Definition: gsDebug.h:102
void computeCoordinates() const
Computes the parametric coordinates of this.
Definition: gsHBox.hpp:633
Container getDescendants(index_t k) const
Gets the descendants of the object on level k.
Definition: gsHBox.hpp:382
Provides combinatorial unitilies.
#define GISMO_ASSERT(cond, message)
Definition: gsDebug.h:89
gsHBox()
Default constructor.
Definition: gsHBox.hpp:27
Provides declaration of THBSplineBasis class.
index_t patch() const
Gets the patch ID of the object.
Definition: gsHBox.hpp:284
std::string to_string(const unsigned &i)
Helper to convert small unsigned to string.
Definition: gsXml.cpp:74
Class representing a (scalar) hierarchical tensor basis of functions .
Definition: gsHTensorBasis.h:74
Container toUnitBoxes() const
Returns unit boxes representation of the object.
Definition: gsHBox.hpp:756
Container getChildren() const
Gets the children of the object.
Definition: gsHBox.hpp:374
T projectedSetBack() const
Gives the projected set-back that can be expected for this.
Definition: gsHBox.hpp:319
gsVector< T, d > upperCorner() const
Gets the upper corner of the box.
Definition: gsHBox.hpp:254
void setError(T error)
Sets the error of the object.
Definition: gsHBox.hpp:290
T projectedImprovement() const
Gives the projected improvement that can be expected for this.
Definition: gsHBox.hpp:313
gsXmlAttribute * makeAttribute(const std::string &name, const std::string &value, gsXmlTree &data)
Helper to allocate XML attribute.
Definition: gsXml.cpp:37
T getMinCellLength() const
Return the length of the smallest edge of the element.
Definition: gsHBox.hpp:267
std::ostream & print(std::ostream &os) const
Prints the object.
Definition: gsHBox.hpp:612
gsXmlNode * makeNode(const std::string &name, gsXmlTree &data)
Helper to allocate XML node.
Definition: gsXml.cpp:54
gsHBox< d, T > getAncestor(index_t k) const
Gets the ancestor of the object on level k.
Definition: gsHBox.hpp:351
index_t index() const
Gets the index stored in the object.
Definition: gsHBox.hpp:328
T uValue(const size_t &i) const
Provides the knot with unique index i.
Definition: gsKnotVector.h:264
const gsMatrix< T > & getCenter() const
Gets the center of the box.
Definition: gsHBox.hpp:238
void computeCenter() const
Computes the center of this.
Definition: gsHBox.hpp:649
Container toContainer()
Returns a container representation of the object.
Definition: gsHBox.hpp:427
bool good() const
Checks if the box has positive indices.
Definition: gsHBox.hpp:942
Container getCextension(index_t m)
Gets the Coarsening extension, which is the coarsening neighborhood before checking for active elemen...
Definition: gsHBox.hpp:557
gsXmlNode * putMatrixToXml(gsMatrix< T > const &mat, gsXmlTree &data, std::string name="Matrix")
Helper to insert matrices into XML.
Definition: gsXml.hpp:103
Container getSupportExtension()
Gets the support extension.
Definition: gsHBox.hpp:444
gsHBox< d, T > getParent() const
Gets the parent of the object.
Definition: gsHBox.hpp:343
const gsVector< T > & upperCorner() const
Returns the upper corner of the current element.
Definition: gsHDomainIterator.h:122
HContainer toHContainer()
Returns a hierarchical container representation of the object.
Definition: gsHBox.hpp:435
T at(const size_t &i) const
Returns the value of the i - th knot (counted with repetitions).
Definition: gsKnotVector.h:865
bool nextLexicographic(Vec &cur, const Vec &size)
Iterates through a tensor lattice with the given size. Updates cur and returns true if another entry ...
Definition: gsCombinatorics.h:196
const gsBasis< T > * m_basis
The basis on which the domain iterator is defined.
Definition: gsDomainIterator.h:219
gsHBox< d, T >::Container getNeighborhood(index_t m)
Gets the neighborhood.
Definition: gsHBox.h:422
#define GISMO_ERROR(message)
Definition: gsDebug.h:118
Class for representing a knot vector.
Definition: gsKnotVector.h:79
T getCellSize() const
Return the diagonal of the element.
Definition: gsHBox.hpp:261
const point & lowerIndex() const
Gets the lower index of the box.
Definition: gsHBox.hpp:279
Truncated hierarchical B-spline basis.
Definition: gsTHBSplineBasis.h:35
The gsHBoxUtils provide basic utilities to modify HBoxes.
Definition: gsHBoxUtils.h:45
Declarations of the class gsAABB, i.e., the axis-aligned bounding box.
Provides declaration of HBSplineBasis class.
Provides declaration of input/output XML utilities struct.
void mark()
Marks this element for refinement.
Definition: gsHBox.hpp:331
void unmark()
Unmarks this element for refinement.
Definition: gsHBox.hpp:334
bool isActiveOrContained() const
Determines if active or contained in the active elemebt. In other words; checks if the level of this ...
Definition: gsHBox.hpp:219
Container getCneighborhood(index_t m)
Gets the Coarsening neighborhood.
Definition: gsHBox.hpp:591
bool contains(const gsHBox< d, T > &other) const
Checks if the other cell is contains in this cell.
Definition: gsHBox.hpp:184
const gsVector< T > & lowerCorner() const
Returns the lower corner of the current element.
Definition: gsHDomainIterator.h:120
T error() const
Gets the error stored in the object.
Definition: gsHBox.hpp:304