52 answer.
at(1) = 0.5 * ( 1. - w ) * ( 1. - u - v );
53 answer.
at(2) = 0.5 * ( 1. - w ) * u;
54 answer.
at(3) = 0.5 * ( 1. - w ) * v;
55 answer.
at(4) = 0.5 * ( 1. + w ) * ( 1. - u - v );
56 answer.
at(5) = 0.5 * ( 1. + w ) * u;
57 answer.
at(6) = 0.5 * ( 1. + w ) * v;
68 for (
int i = 1; i <= 6; i++ ) {
84 this->
evalN(n, lcoords, cellgeo);
87 for (
int i = 1; i <= 6; i++ ) {
101 #define POINT_TOL 1.e-3 108 double convergence_limit, error = 0.0;
118 for (
int nite = 0; nite < 10; nite++ ) {
125 if ( error < convergence_limit ) {
136 if ( error > convergence_limit ) {
138 answer = {1. / 3., 1. / 3., 1. / 3.};
144 for (
int i = 1; i <= answer.
giveSize(); i++ ) {
175 for (
int i = 1; i <= 6; i++ ) {
192 dN.
at(1, 1) = -0.5 * ( 1. - w );
193 dN.
at(2, 1) = 0.5 * ( 1. - w );
195 dN.
at(4, 1) = -0.5 * ( 1. + w );
196 dN.
at(5, 1) = 0.5 * ( 1. + w );
199 dN.
at(1, 2) = -0.5 * ( 1. - w );
201 dN.
at(3, 2) = 0.5 * ( 1. - w );
202 dN.
at(4, 2) = -0.5 * ( 1. + w );
204 dN.
at(6, 2) = 0.5 * ( 1. + w );
206 dN.
at(1, 3) = -0.5 * ( 1. - u - v );
207 dN.
at(2, 3) = -0.5 * u;
208 dN.
at(3, 3) = -0.5 * v;
209 dN.
at(4, 3) = 0.5 * ( 1. - u - v );
210 dN.
at(5, 3) = 0.5 * u;
211 dN.
at(6, 3) = 0.5 * v;
218 double ksi = lcoords.
at(1);
220 answer.
at(1) = ( 1. - ksi ) * 0.5;
221 answer.
at(2) = ( 1. - ksi ) * 0.5;
239 this->
edgeEvalN(n, iedge, lcoords, cellgeo);
242 for (
int i = 1; i <= n.
giveSize(); ++i ) {
253 }
else if ( iedge == 2 ) {
255 }
else if ( iedge == 3 ) {
257 }
else if ( iedge == 4 ) {
259 }
else if ( iedge == 5 ) {
261 }
else if ( iedge == 6 ) {
263 }
else if ( iedge == 7 ) {
265 }
else if ( iedge == 8 ) {
267 }
else if ( iedge == 9 ) {
286 double ksi = lcoords.
at(1);
287 double eta = lcoords.
at(2);
293 answer.
at(3) = 1.0 - ksi - eta;
296 answer.
at(1) = ( 1. + ksi ) * ( 1. + eta ) * 0.25;
297 answer.
at(2) = ( 1. - ksi ) * ( 1. + eta ) * 0.25;
298 answer.
at(3) = ( 1. - ksi ) * ( 1. - eta ) * 0.25;
299 answer.
at(4) = ( 1. + ksi ) * ( 1. - eta ) * 0.25;
315 for (
int i = 1; i <= n.
giveSize(); ++i ) {
326 }
else if ( isurf == 2 ) {
328 }
else if ( isurf == 3 ) {
329 nodes = {1, 2, 5, 4};
330 }
else if ( isurf == 4 ) {
331 nodes = {2, 3, 6, 5};
332 }
else if ( isurf == 5 ) {
333 nodes = {3, 1, 4, 6};
357 int pointsTriangle = 1;
367 if ( boundary <= 2 ) {
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
virtual void edgeEvalN(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of edge interpolation functions (shape functions) at given point.
virtual void surfaceLocal2global(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
virtual double giveCharacteristicLength(const FEICellGeometry &cellgeo) const
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates local coordinates from given global ones.
virtual IntegrationRule * giveIntegrationRule(int order)
Sets up a suitable integration rule for numerical integrating over volume.
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the determinant of the transformation.
double & at(int i)
Coefficient access function.
virtual const FloatArray * giveVertexCoordinates(int i) const =0
virtual int SetUpPointsOnWedge(int nPointsTri, int nPointsDepth, MaterialMode mode)
Sets up receiver's integration points on a wedge integration domain.
Class representing a general abstraction for cell geometry.
void clear()
Clears receiver (zero size).
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates global coordinates from given local ones.
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
virtual int SetUpPointsOnSquare(int, MaterialMode mode)
Sets up receiver's integration points on unit square integration domain.
Class implementing an array of integers.
virtual double edgeGiveTransformationJacobian(int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
int & at(int i)
Coefficient access function.
Abstract base class representing integration rule.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
double distance(const FloatArray &x) const
Computes the distance between position represented by receiver and position given as parameter...
virtual void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Gives the jacobian matrix at the local coordinates.
double at(int i, int j) const
Coefficient access function.
virtual double surfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
virtual void edgeEvaldNdx(FloatMatrix &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of edge interpolation functions (shape functions) at given point...
virtual void edgeLocal2global(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual int getRequiredNumberOfIntegrationPoints(integrationDomain dType, int approxOrder)
Abstract service.
void giveLocalDerivative(FloatMatrix &dN, const FloatArray &lcoords)
virtual IntegrationRule * giveBoundaryIntegrationRule(int order, int boundary)
Sets up a suitable integration rule for integrating over the requested boundary.
void zero()
Zeroes all coefficients of receiver.
void setColumn(const FloatArray &src, int c)
Sets the values of the matrix in specified column.
virtual int SetUpPointsOnTriangle(int, MaterialMode mode)
Sets up receiver's integration points on triangular (area coords) integration domain.
virtual void surfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of edge interpolation functions (shape functions) at given point.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
#define OOFEM_WARNING(...)
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
void add(const FloatArray &src)
Adds array src to receiver.
virtual void computeLocalSurfaceMapping(IntArray &nodes, int iSurf)
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.