G+Smo
24.08.0
Geometry + Simulation Modules
|
Class which enables iteration over all elements of a parameter domain.
The gsDomainIterator
It also includes some additional functionality which is typically used when assembling the system matrix for numerically solving a PDE.
Note that the features of the gsDomainIterator strongly depend on the underlying basis. Hence the gsBasis is given as an input argument to the constructor.
An example of the typical use of gsDomainIterator (remark: replace the constructor by the constructor of the actually used derived class):
gsDomainIterator domIter( basis ); // constructor for (; domIter.good(); domIter.next() ) // loop over all elements { // Your source code using domIter.centerPoint(); domIter.lowerCorner(); domIter.upperCorner(); }
Public Types | |
typedef memory::shared_ptr < gsDomainIterator > | Ptr |
Shared pointer for gsDomainIterator. | |
typedef memory::unique_ptr < gsDomainIterator > | uPtr |
Unique pointer for gsDomainIterator. | |
Public Member Functions | |
virtual void | adjacent (const gsVector< bool > &, gsDomainIterator &) |
const gsVector< T > & | centerPoint () const |
Returns the center of the current element. More... | |
short_t | dim () const |
Return dimension of the elements. | |
T | getCellSize () const |
Return the diagonal of the element. | |
T | getMaxCellLength () const |
Return the length of the largest edge of the element. | |
T | getMinCellLength () const |
Return the length of the smallest edge of the element. | |
virtual const T | getPerpendicularCellSize () const |
Returns the perpendicular cell size of boundary iterator. More... | |
bool | good () const |
Is the iterator still pointing to a valid element? | |
gsDomainIterator (const gsBasis< T > &basisParam, const boxSide &s=boundary::none) | |
Constructor using a basis. | |
size_t | id () const |
Returns the element id. | |
virtual const gsVector< T > & | lowerCorner () const |
Returns the lower corner of the current element. More... | |
virtual bool | next ()=0 |
Proceeds to the next element. More... | |
virtual bool | next (index_t increment)=0 |
Proceeds to the next element (skipping increment elements). | |
virtual size_t | numElements () const |
Returns the number of elements. | |
virtual void | reset () |
Resets the iterator so that it points to the first element. | |
virtual const gsVector< T > & | upperCorner () const |
Returns the upper corner of the current element. More... | |
T | volume () const |
Return the volume of the element. | |
Public Attributes | |
gsVector< T > | center |
Coordinates of a central point in the element (in the parameter domain). | |
Protected Attributes | |
const gsBasis< T > * | m_basis |
The basis on which the domain iterator is defined. | |
bool | m_isGood |
|
inlinevirtual |
Updates other with and adjacent element
|
inline |
Returns the center of the current element.
The current element is a d-dimensional hypercube. The coordinates of its upper corner is returned as a gsVector of length d.
E.g., if the current two-dimensional element is defined by [a,b]x[c,d], then [b,d] is returned (see also lowerCorner()).
|
inlinevirtual |
Returns the perpendicular cell size of boundary iterator.
Only works for boundary iterators. Returns the length from the boundary side to the parallel side not on the boundary.
Reimplemented in gsTensorDomainBoundaryIterator< T, D, uiter >.
|
inlinevirtual |
Returns the lower corner of the current element.
The current element is a d-dimensional hypercube. The coordinates of its lower corner is returned as a gsVector of length d.
E.g., if the current two-dimensional element is defined by [a,b]x[c,d], then [a,c] is returned (see also upperCorner()).
Reimplemented in gsTensorDomainIterator< T, D >, gsTensorDomainBoundaryIterator< T, D, uiter >, gsHDomainIterator< T, d >, and gsHDomainBoundaryIterator< T, d >.
|
pure virtual |
Proceeds to the next element.
The function returns true if there are still elements remaining that have not been treated.
For the typical usage of this function, see the example in the documentation of gsDomainIterator.
Implemented in gsTensorDomainBoundaryIterator< T, D, uiter >, gsTensorDomainIterator< T, D >, gsHDomainBoundaryIterator< T, d >, and gsHDomainIterator< T, d >.
|
inlinevirtual |
Returns the upper corner of the current element.
The current element is a d-dimensional hypercube. The coordinates of its upper corner is returned as a gsVector of length d.
E.g., if the current two-dimensional element is defined by [a,b]x[c,d], then [b,d] is returned (see also lowerCorner()).
Reimplemented in gsTensorDomainIterator< T, D >, gsTensorDomainBoundaryIterator< T, D, uiter >, gsHDomainIterator< T, d >, and gsHDomainBoundaryIterator< T, d >.
|
protected |
Flag indicating whether the domain iterator is "good". If it is "good", the iterator can continue to the next element.