|
OOFEM 3.0
|
#include <fei3dhexaquad.h>
Public Member Functions | |
| FEI3dHexaQuad () | |
| integrationDomain | giveIntegrationDomain (const Element_Geometry_Type) const override |
| const Element_Geometry_Type | giveGeometryType () const override |
| const Element_Geometry_Type | giveBoundaryGeometryType (int boundary) const override |
| integrationDomain | giveBoundaryIntegrationDomain (int ib, const Element_Geometry_Type) const override |
| Returns boundary integration domain. | |
| integrationDomain | giveBoundarySurfaceIntegrationDomain (int isurf, const Element_Geometry_Type) const override |
| Returns boundary integration domain. | |
| integrationDomain | giveBoundaryEdgeIntegrationDomain (int iedge, const Element_Geometry_Type) const override |
| Returns boundary integration domain. | |
| double | giveCharacteristicLength (const FEICellGeometry &cellgeo) const |
| void | evalN (FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | evaldNdx (FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | evaldNdxi (FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | local2global (FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| int | global2local (FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| int | giveNumberOfNodes (const Element_Geometry_Type) const override |
| void | edgeEvalN (FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | edgeEvaldNdx (FloatMatrix &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | edgeLocal2global (FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | edgeGiveTransformationJacobian (int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| IntArray | computeLocalEdgeMapping (int iedge) const override |
| void | surfaceEvalN (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | surfaceEvalNormal (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | surfaceEvaldNdx (FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | surfaceLocal2global (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | surfaceGiveTransformationJacobian (int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| IntArray | computeLocalSurfaceMapping (int iSurf) const override |
| double | evalNXIntegral (int iEdge, const FEICellGeometry &cellgeo) const override |
| void | giveJacobianMatrixAt (FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| std::unique_ptr< IntegrationRule > | giveIntegrationRule (int order, const Element_Geometry_Type) const override |
| std::unique_ptr< IntegrationRule > | giveBoundaryIntegrationRule (int order, int boundary, const Element_Geometry_Type) const override |
| Public Member Functions inherited from oofem::FEInterpolation3d | |
| FEInterpolation3d (int o) | |
| int | giveNsd (const Element_Geometry_Type) const override |
| virtual double | giveVolume (const FEICellGeometry &cellgeo) const |
| IntArray | boundaryEdgeGiveNodes (int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override |
| void | boundaryEdgeEvalN (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | boundaryEdgeGiveTransformationJacobian (int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | boundaryEdgeLocal2Global (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | boundaryEdgeEvalNormal (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | boundarySurfaceEvalN (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | boundarySurfaceEvaldNdx (FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | boundarySurfaceEvalNormal (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | boundarySurfaceLocal2global (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | boundarySurfaceGiveTransformationJacobian (int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| FloatMatrixF< 3, 3 > | surfaceGiveJacobianMatrixAt (int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| IntArray | boundaryGiveNodes (int boundary, const Element_Geometry_Type) const override |
| void | boundaryEvalN (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | boundaryEvalNormal (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| double | boundaryGiveTransformationJacobian (int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| void | boundaryLocal2Global (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override |
| virtual double | edgeEvalNormal (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| virtual void | edgeEvaldNdxi (FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| IntArray | computeEdgeMapping (const IntArray &elemNodes, int iedge) const |
| void | surfaceEvaldNdxi (FloatMatrix &answer, const FloatArray &lcoords) const override |
| void | surfaceEvald2Ndxi2 (FloatMatrix &answer, const FloatArray &lcoords) const override |
| virtual std::tuple< FloatArrayF< 3 >, FloatArrayF< 3 > > | surfaceEvalBaseVectorsAt (int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| virtual std::tuple< double, FloatArrayF< 3 > > | surfaceEvalUnitNormal (int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| IntArray | computeSurfaceMapping (const IntArray &elemNodes, int isurf) const |
| std::unique_ptr< IntegrationRule > | giveBoundaryEdgeIntegrationRule (int order, int boundary, const Element_Geometry_Type) const override |
| std::unique_ptr< IntegrationRule > | giveBoundaryIntegrationRule (int _order, int boundary, const Element_Geometry_Type) const override |
| IntArray | boundarySurfaceGiveNodes (int boundary, Element_Geometry_Type, bool includeHierarchical=false) const override |
| Public Member Functions inherited from oofem::FEInterpolation | |
| FEInterpolation (int o) | |
| virtual | ~FEInterpolation ()=default |
| virtual void | initializeFrom (InputRecord &ir, ParameterManager &pm, int elnum, int priority) |
| Initializes receiver according to object description stored in input record. | |
| virtual void | postInitialize (ParameterManager &pm, int elnum) |
| int | giveInterpolationOrder () const |
| virtual void | giveCellDofMans (IntArray &nodes, IntArray &internalDofMans, Element *elem) const |
| Returns list of element nodes (and list of internal dof managers) (including on edges and surfaces) defining the approximation. | |
| virtual void | evald2Ndx2 (FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| virtual void | giveLocalNodeCoords (FloatMatrix &answer, const Element_Geometry_Type) const |
| virtual double | giveTransformationJacobian (const FloatArray &lcoords, const FEICellGeometry &cellgeo) const |
| virtual std::unique_ptr< IntegrationRule > | giveBoundarySurfaceIntegrationRule (int order, int boundary, const Element_Geometry_Type) const |
| virtual int | giveKnotSpanBasisFuncMask (const IntArray &knotSpan, IntArray &mask) const |
| virtual int | giveNumberOfKnotSpanBasisFunctions (const IntArray &knotSpan) const |
| virtual bool | hasSubPatchFormulation () const |
| virtual const FloatArray * | giveKnotVector () const |
| virtual int | giveNumberOfKnotSpans (int dim) const |
| virtual const FloatArray * | giveKnotValues (int dim) const |
| virtual const IntArray * | giveKnotMultiplicity (int dim) const |
| virtual int | giveNumberOfEdges (const Element_Geometry_Type) const |
| virtual void | initializeCell (Element *e) const |
| std::string | errorInfo (const char *func) const |
Static Public Member Functions | |
| static FloatArrayF< 20 > | evalN (const FloatArrayF< 3 > &lcoords) |
| static std::pair< double, FloatMatrixF< 3, 20 > > | evaldNdx (const FloatArrayF< 3 > &lcoords, const FEICellGeometry &cellgeo) |
| static FloatMatrixF< 3, 20 > | evaldNdxi (const FloatArrayF< 3 > &lcoords) |
Additional Inherited Members | |
| Protected Attributes inherited from oofem::FEInterpolation | |
| int | order = 0 |
Class representing implementation of quadratic hexahedra interpolation class. *** numbering like T3d *** *** numbering like T3d *** *** numbering of nodes *** *** numbering of surfs ***
zeta 1 ^ 9 2 +-----|--+--------+ +-----------------+ /| | /| /| /| / | | / | / | / |
12+ | o 10+ | / | 1 / | / | | / | / | / | 4 / 17+ 11 | 3 / +18 / | (3) / | +-----—+-----—+ | +--------------—+ | | | | | | | | | | | | +--—|–o------> eta | (6) | | 4 | | | / 13 | | | | | | | 5 +—/-—+–|--—+ 6 | +--------—|--—+ 20+ / o +19 / | / 5 | / | / / | / | / | / |16+ / | +14 | / (2) | / | / / | / | / | / |/ L ksi |/ |/ |/ +-----—+-----—+ +--------------—+ 8 15 7
Definition at line 70 of file fei3dhexaquad.h.
|
inline |
Definition at line 73 of file fei3dhexaquad.h.
References oofem::FEInterpolation3d::FEInterpolation3d().
Referenced by oofem::FEI3dHexaTriQuad::FEI3dHexaTriQuad().
|
overridevirtual |
Implements oofem::FEInterpolation3d.
Definition at line 427 of file fei3dhexaquad.C.
Referenced by edgeEvaldNdx(), edgeGiveTransformationJacobian(), and edgeLocal2global().
|
overridevirtual |
Implements oofem::FEInterpolation3d.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 594 of file fei3dhexaquad.C.
References OOFEM_ERROR.
Referenced by evalNXIntegral(), surfaceEvaldNdx(), surfaceEvalNormal(), and surfaceLocal2global().
|
overridevirtual |
Evaluates the matrix of derivatives of edge interpolation functions (shape functions) at given point. These derivatives are in global coordinate system (where the nodal coordinates are defined)
| answer | Contains resulting matrix of derivatives, the member at i,j position contains value of dNj/dxi. |
| iedge | Determines the edge number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Definition at line 401 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), computeLocalEdgeMapping(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::FloatMatrix::resize(), and oofem::FloatMatrix::setColumn().
|
overridevirtual |
Evaluates the array of edge interpolation functions (shape functions) at given point.
| answer | Contains resulting array of evaluated interpolation functions. |
| iedge | Edge number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Definition at line 382 of file fei3dhexaquad.C.
References oofem::FloatArray::at(), and oofem::FloatArray::resize().
|
overridevirtual |
Evaluates the edge jacobian of transformation between local and global coordinates.
| iedge | Determines edge number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Definition at line 415 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), computeLocalEdgeMapping(), oofem::FloatArray::computeNorm(), and oofem::FEICellGeometry::giveVertexCoordinates().
|
overridevirtual |
Evaluates edge global coordinates from given local ones. These derivatives are in global coordinate system (where the nodal coordinates are defined).
| answer | Contains resulting global coordinates. |
| iedge | Determines edge number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Definition at line 391 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), oofem::FloatArray::clear(), computeLocalEdgeMapping(), and oofem::FEICellGeometry::giveVertexCoordinates().
|
static |
Definition at line 270 of file fei3dhexaquad.C.
References oofem::det(), oofem::dot(), oofem::dotT(), evaldNdxi(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::inv(), and oofem::FloatMatrixF< N, M >::setColumn().
Referenced by evaldNdx(), and surfaceEvaldNdx().
|
overridevirtual |
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point. These derivatives are in global coordinate system (where the nodal coordinates are defined)
| answer | Contains resulting matrix of derivatives, the member at i,j position contains value of dNi/dxj. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 284 of file fei3dhexaquad.C.
References oofem::FloatMatrix::beProductOf(), evaldNdx(), evaldNdxi(), oofem::FloatMatrix::giveDeterminant(), oofem::FloatMatrix::giveNumberOfRows(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::inv(), oofem::FloatMatrix::resize(), and oofem::FloatMatrix::setColumn().
|
static |
Definition at line 118 of file fei3dhexaquad.C.
Referenced by evaldNdx(), evaldNdx(), evaldNdxi(), and giveJacobianMatrixAt().
|
overridevirtual |
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point. These derivatives are wrt local (parent) coordinate system
| answer | Contains resulting matrix of derivatives, the member at i,j position contains value of dNi/dxij. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Reimplemented from oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 191 of file fei3dhexaquad.C.
References oofem::FloatArray::at(), oofem::FloatMatrix::at(), evaldNdxi(), and oofem::FloatMatrix::resize().
|
static |
Definition at line 46 of file fei3dhexaquad.C.
Referenced by evalN(), and local2global().
|
overridevirtual |
Evaluates the array of interpolation functions (shape functions) at given point.
| answer | Contains resulting array of evaluated interpolation functions. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 78 of file fei3dhexaquad.C.
References oofem::FloatArray::at(), evalN(), and oofem::FloatArray::resize().
|
overridevirtual |
Computes the integral \( \int_S n \cdot x \mathrm{d}s \).
| boundary | Boundary number. |
| cellgeo | Underlying cell geometry. |
Reimplemented from oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 693 of file fei3dhexaquad.C.
References computeLocalSurfaceMapping(), and oofem::FEICellGeometry::giveVertexCoordinates().
|
inlineoverridevirtual |
Returns boundary integration domain.
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 81 of file fei3dhexaquad.h.
References oofem::_Line.
|
inlineoverridevirtual |
Returns boundary geometry type
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 77 of file fei3dhexaquad.h.
|
inlineoverridevirtual |
Returns boundary integration domain.
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 79 of file fei3dhexaquad.h.
References oofem::_Square.
|
overridevirtual |
Sets up a suitable integration rule for integrating over the requested boundary. The required polynomial order for the determinant of the jacobian is added automatically.
| order | Polynomial order of the integrand (should NOT including determinant of jacobian). |
| boundary | Boundary number. |
Reimplemented from oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 778 of file fei3dhexaquad.C.
References oofem::_Square, and oofem::FEInterpolation::order.
|
inlineoverridevirtual |
Returns boundary integration domain.
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 80 of file fei3dhexaquad.h.
References oofem::_Square.
| double oofem::FEI3dHexaQuad::giveCharacteristicLength | ( | const FEICellGeometry & | cellgeo | ) | const |
Definition at line 317 of file fei3dhexaquad.C.
References oofem::distance(), and oofem::FEICellGeometry::giveVertexCoordinates().
Referenced by global2local().
|
inlineoverridevirtual |
Returns the geometry type fo the interpolator.
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 76 of file fei3dhexaquad.h.
|
inlineoverridevirtual |
Returns the integration domain of the interpolator.
Implements oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 75 of file fei3dhexaquad.h.
References oofem::_Cube.
|
overridevirtual |
Sets up a suitable integration rule for numerical integrating over volume. The required polynomial order for the determinant of the jacobian is added automatically.
| order | Polynomial order of integrand (should NOT including determinant of jacobian). |
Reimplemented from oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 769 of file fei3dhexaquad.C.
References oofem::_Cube, and oofem::FEInterpolation::order.
|
overridevirtual |
Gives the jacobian matrix at the local coordinates.
| jacobianMatrix | The requested matrix. |
| lcoords | Local coordinates. |
| cellgeo | Element geometry. |
Reimplemented from oofem::FEInterpolation.
Definition at line 679 of file fei3dhexaquad.C.
References evaldNdxi(), oofem::FloatMatrix::giveNumberOfRows(), oofem::FloatMatrix::resize(), and oofem::FloatMatrix::setColumn().
Referenced by global2local().
|
inlineoverridevirtual |
Returns the number of geometric nodes of the receiver.
Reimplemented from oofem::FEInterpolation.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 95 of file fei3dhexaquad.h.
|
overridevirtual |
Evaluates local coordinates from given global ones. If local coordinates cannot be found (generate elements, or point far outside geometry, then the center coordinate will be used as a last resort, and the return value will be zero.
| answer | Contains evaluated local coordinates. |
| gcoords | Array containing global coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation.
Definition at line 329 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), oofem::FloatArray::beDifferenceOf(), oofem::FloatArray::computeNorm(), giveCharacteristicLength(), giveJacobianMatrixAt(), oofem::FloatArray::giveSize(), local2global(), POINT_TOL, oofem::FloatArray::resize(), oofem::FloatMatrix::solveForRhs(), and oofem::FloatArray::zero().
|
overridevirtual |
Evaluates global coordinates from given local ones.
| answer | Contains resulting global coordinates. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation.
Definition at line 306 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), oofem::FloatArray::clear(), evalN(), oofem::FloatArray::giveSize(), and oofem::FEICellGeometry::giveVertexCoordinates().
Referenced by global2local().
|
overridevirtual |
Evaluates the matrix of derivatives of edge interpolation functions (shape functions) at given point. These derivatives are in global coordinate system (where the nodal coordinates are defined).
| answer | Contains resulting matrix of derivatives, the member at i,j position contains value of dNj/dxi. |
| isurf | Determines the surface number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Reimplemented from oofem::FEInterpolation3d.
Definition at line 476 of file fei3dhexaquad.C.
References oofem::FloatArray::at(), oofem::FloatMatrix::at(), computeLocalSurfaceMapping(), evaldNdx(), OOFEM_ERROR, oofem::FloatMatrix::resize(), and oofem::Vec3().
|
overridevirtual |
Evaluates the array of edge interpolation functions (shape functions) at given point.
| answer | Contains resulting array of evaluated interpolation functions. |
| isurf | Surface number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 459 of file fei3dhexaquad.C.
References oofem::FloatArray::at(), and oofem::FloatArray::resize().
Referenced by surfaceLocal2global().
|
overridevirtual |
Evaluates the normal out of the surface at given point.
| answer | Contains resulting normal vector. |
| isurf | Determines the surface number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Reimplemented from oofem::FEInterpolation3d.
Reimplemented in oofem::FEI3dHexaTriQuad.
Definition at line 531 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), oofem::FloatArray::beVectorProductOf(), computeLocalSurfaceMapping(), oofem::FEICellGeometry::giveVertexCoordinates(), and oofem::FloatArray::normalize_giveNorm().
Referenced by surfaceGiveTransformationJacobian().
|
overridevirtual |
Evaluates the edge jacobian of transformation between local and global coordinates.
| isurf | Determines the surface number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Definition at line 585 of file fei3dhexaquad.C.
References surfaceEvalNormal().
|
overridevirtual |
Evaluates edge global coordinates from given local ones. These derivatives are in global coordinate system (where the nodal coordinates are defined).
| answer | Contains resulting global coordinates. |
| isurf | Determines the surface number. |
| lcoords | Array containing (local) coordinates. |
| cellgeo | Underlying cell geometry. |
Implements oofem::FEInterpolation3d.
Definition at line 568 of file fei3dhexaquad.C.
References oofem::FloatArray::add(), oofem::FloatArray::at(), oofem::FloatArray::clear(), computeLocalSurfaceMapping(), oofem::FloatArray::giveSize(), oofem::FEICellGeometry::giveVertexCoordinates(), and surfaceEvalN().