template<short_t d, class T>
class gismo::gsDPatch< d, T >
Constructs the D-Patch, from which the transformation matrix can be called.
- Template Parameters
-
|
void | _computeEVs () override |
| Corrects the EVs.
|
|
virtual void | _computeMapper () |
| Calculates the mapper. More...
|
|
virtual void | _computeSmoothMatrix () |
| Calculates the smooth matrix.
|
|
void | _countDoFs () override |
| Initializes the matrix, the basis and the mappers.
|
|
virtual void | _getLowestCorners (std::vector< patchCorner > &pcorners, index_t n=3) const |
| From a list of patchCorners pcorners, get the lowest n corners. More...
|
|
virtual void | _getLowestIndices (std::vector< std::pair< index_t, index_t >> &indices, index_t n=3) const |
| From a list of tuples (patch,index), get the lowest n tuples. More...
|
|
virtual const index_t | _getValence (patchCorner corner) const |
| Gets the valence. More...
|
|
virtual void | _handleBoundary (patchSide side) |
| Handles a boundary in the global matrix. More...
|
|
virtual void | _handleInterface (boundaryInterface iface) |
| Handles an interface in the global matrix. More...
|
|
virtual void | _handleInterior () |
| Handles the interior in the global matrix. More...
|
|
virtual void | _handleRegularCorner (patchCorner pcorner) |
| Handles a regular corner. More...
|
|
virtual void | _handleVertex (patchCorner pcorner) |
| Handles a vertex in the global matrix. More...
|
|
virtual const index_t | _indexFromSides (index_t index1, const patchSide side1, index_t index2, const patchSide side2) |
| Computes the index of a basis function using sides as reference. More...
|
|
virtual const index_t | _indexFromVert (const index_t index, const patchCorner corner, const patchSide side, const index_t offsets=0) const |
| Computes the index of a basis function taking one corner and one side as reference. More...
|
|
void | _initBasis () override |
| Initializes the basis.
|
|
virtual void | _initChecks () |
| Prepares the THB basis if needed. More...
|
|
virtual void | _initialize () |
| Initializes the class:
|
|
virtual void | _initMappers () |
| Initializes the matrix, the basis and the mappers.
|
|
virtual void | _initMatrix () |
| Initializes the matrix.
|
|
void | _initTHB () override |
| Initializes the matrix, the basis and the mappers.
|
|
virtual const bool | _isInteriorVertex (patchCorner corner) const |
| Determines whether the specified corner is interior vertex. More...
|
|
gsMatrix< T > | _makePi (index_t valence) |
| Makes the Pi matrix. More...
|
|
void | _makeTHB () override |
| Prints which DoFs have been handled and which have been eliminated. More...
|
|
virtual void | _performChecks (bool basis) |
| Performs checks on sides, vertices and bases.
|
|
gsMatrix< T > | _preCoefficients (const gsMultiPatch< T > &patches) override |
| Computes the C1 coefficients for pre-multiplication to make the multipatch. More...
|
|
virtual void | _removeLowestCorners (std::vector< patchCorner > &pcorners, index_t n=3) const |
| From a list of patchCorners pcorners, remove all but the lowest n corners. More...
|
|
virtual void | _removeLowestIndices (std::vector< std::pair< index_t, index_t >> &indices, index_t n=3) const |
| From a list of tuples (patch,index), remove all but the lowest n tuples. More...
|
|
virtual void | _resetChecks (bool basis) |
| Resets checks on sides, vertices and bases.
|
|
virtual const index_t | _sideIndex (index_t patch, boxSide bside) const |
| Computes global index of the side. More...
|
|
virtual const index_t | _sideIndex (patchSide pside) const |
| Computes global index of the side. More...
|
|
virtual const std::pair
< index_t, bool > | _vertexData (const patchCorner corner) const |
| Returns the valence and whether a corner is interior or boundary. More...
|
|
virtual const index_t | _vertIndex (index_t patch, boxCorner corner) const |
| Computes global index of the corner. More...
|
|
virtual const index_t | _vertIndex (patchCorner pcorner) const |
| Computes global index of the corner. More...
|
|
virtual void | _whichHandled () |
| Prints which DoFs have been handled and which have been eliminated.
|
|
virtual std::vector< bool > | getSharpCorners (T tol=1e-2) const |
| Checks if corners are sharp or not. More...
|
|
Handles a vertex in the global matrix.
We use the following notation convention (per patch!): b00 is the basis function at the vertex b10 is the basis function next to the vertex along the first interface that connects to the vertex b20 is the basis function next to b10 along the first interface that connects to the vertex etc.
b01 is the basis function next to the vertex along the second interface that connects to the vertex b02 is the basis function next to b01 along the second interface that connects to the vertex etc.
b11 is the basis function with offset 1 from both interfaces and from the vertex itself b22 is the basis function with offset 2 from both interfaces and from the vertex itself etc.
There are different options. a) Boundary vertices i) Valence 1: b00, b10, b01 and b00 all get weight 1.0 w.r.t the same basis function in the local basis ii) Valence 2: This case contains an interface between two patches. We use index k to denote the row basis functions along the interface. So k=0 corresponds to the basis functions on the boundary and k=1 corresponds to the basis functions with offset 1 from the boundaries. Using this convention, the functions bk1 in the local basis, are coupled to bk1 in the global basis with weight 1. The functions bk0 in the local basis (on the considered patch) are coupled to bk1 in the global basis with weight 0.5. The functions bk0 in the local basis (on the other patch) are coupled to bk1 (on the considered patch) in the global basis with weight 0.5. iii)Valence 3: In this case, the matched vertices on all the adjacent patches are treated in one go! Note that all the basis functions corresponding to the vertex (b00) on all patches are matched! We couple the b00 functions of all patches (in the local basis) with weight 1/4 to the b00 of the adjacent patch with the lowest number in the global basis. Then, the b11 on the considered patch is coupled with weight 1 to itself and with weight 0.25 to the b00s of the other patches. Then, we will handle the vertices where an interface and a boundary meet (there are two of these). For the patch corners that are on an interface, we find the b11 and b10 vertices (orthogonal to the interface) and we give all b10s weight 0.5 w.r.t. the b11s in the global basis (on both patches). Lastly, we add weight 0.5 for the b10s along the boundaries (so only for two patches) to the (matched) b00 basis function (all b00s refer to the same dof in the global basis). b) Interior vertices (all valences): i) b11 gets weight 1.0 w.r.t the same basis function in the local basis ii) all associated b00s in the local basis get weight 1/valence w.r.t. b11 in the global basis iii)the b10 and b01 in the local basis get weight 1/2 w.r.t. b11 in the global basis
- Parameters
-
[in] | pcorner | The patchcorner Handles an interface in the global matrix |
Gives all the DoFs that have offset 1 (orthogonal) from the interface weight 1.0 w.r.t itself. All the DoFs ON the interface (on both patches) will have weight 0.5 to the DoF with offset 1. This interface handling excludes the indices that are in the 0 and 1 ring around vertices.
- Parameters
-
[in] | iface | The interface Handles a boundary in the global matrix |
Handles all DoFs on the boundary with unit-weight, except the ones in the 0 and 1 rings around the vertices.
- Parameters
-
[in] | side | The boundary side Handles the interior in the global matrix |
Gives all left-over DoFs, which are in the interior, weight 1 w.r.t. itself Prints which DoFs have been handled and which have been eliminated Handles a regular corner
- Parameters
-
Reimplemented from gsDPatchBase< d, T >.
|
protectedvirtualinherited |
Handles a vertex in the global matrix.
We use the following notation convention (per patch!): b00 is the basis function at the vertex b10 is the basis function next to the vertex along the first interface that connects to the vertex b20 is the basis function next to b10 along the first interface that connects to the vertex etc.
b01 is the basis function next to the vertex along the second interface that connects to the vertex b02 is the basis function next to b01 along the second interface that connects to the vertex etc.
b11 is the basis function with offset 1 from both interfaces and from the vertex itself b22 is the basis function with offset 2 from both interfaces and from the vertex itself etc.
There are different options. a) Boundary vertices i) Valence 1: b00, b10, b01 and b00 all get weight 1.0 w.r.t the same basis function in the local basis ii) Valence 2: This case contains an interface between two patches. We use index k to denote the row basis functions along the interface. So k=0 corresponds to the basis functions on the boundary and k=1 corresponds to the basis functions with offset 1 from the boundaries. Using this convention, the functions bk1 in the local basis, are coupled to bk1 in the global basis with weight 1. The functions bk0 in the local basis (on the considered patch) are coupled to bk1 in the global basis with weight 0.5. The functions bk0 in the local basis (on the other patch) are coupled to bk1 (on the considered patch) in the global basis with weight 0.5. iii)Valence 3: In this case, the matched vertices on all the adjacent patches are treated in one go! Note that all the basis functions corresponding to the vertex (b00) on all patches are matched! We couple the b00 functions of all patches (in the local basis) with weight 1/4 to the b00 of the adjacent patch with the lowest number in the global basis. Then, the b11 on the considered patch is coupled with weight 1 to itself and with weight 0.25 to the b00s of the other patches. Then, we will handle the vertices where an interface and a boundary meet (there are two of these). For the patch corners that are on an interface, we find the b11 and b10 vertices (orthogonal to the interface) and we give all b10s weight 0.5 w.r.t. the b11s in the global basis (on both patches). Lastly, we add weight 0.5 for the b10s along the boundaries (so only for two patches) to the (matched) b00 basis function (all b00s refer to the same dof in the global basis). b) Interior vertices (all valences): i) b11 gets weight 1.0 w.r.t the same basis function in the local basis ii) all associated b00s in the local basis get weight 1/valence w.r.t. b11 in the global basis iii)the b10 and b01 in the local basis get weight 1/2 w.r.t. b11 in the global basis
- Parameters
-
[in] | pcorner | The patchcorner |
|
protectedvirtualinherited |
Prepares the THB basis if needed.
This function constructs THB refinements on the places where they are needed, i.e. around EVs. It also constructs the transfer matrix (m_tMatrix) forms the transformation between the original B-spline basis and the THB-Spline basis. Computes D-Patch smoothing
Given a basis with THB refinement around the EVs, this function computes the D-Patch smoothing Makes the Pi matrix
This matrix is used to transform the coefficients of the D-Patch smoothing matrix
- Parameters
-
- Returns
- Matrix for smoothing around an EV} Initializes the matrix, the basis and the mappers