42 int startIndx,
int endIndx,
bool dynamic) :
59 for (
int i = 1; i <= nPoints; i++ ) {
72 int nPoints_xi1 = ( int ) floor( sqrt(
double ( nPoints ) ) );
73 int nPoints_xi2 = nPoints_xi1;
74 FloatArray coords_xi1, weights1, coords_xi2, weights2;
77 this->
gaussPoints.resize( nPoints_xi1 * nPoints_xi2 );
79 for (
int i = 1; i <= nPoints_xi1; i++ ) {
80 for (
int j = 1; j <= nPoints_xi2; j++ ) {
83 weights1.
at ( i ) *weights2.
at ( j ), mode);
96 int nPoints_xi1 = ( int ) floor(
cbrt(
double ( nPoints ) ) + 0.5);
97 int nPoints_xi2 = nPoints_xi1;
98 int nPoints_xi3 = nPoints_xi1;
99 FloatArray coords_xi1, weights1, coords_xi2, weights2, coords_xi3, weights3;
103 this->
gaussPoints.resize( nPoints_xi1 * nPoints_xi2 * nPoints_xi3 );
105 for (
int i = 1; i <= nPoints_xi1; i++ ) {
106 for (
int j = 1; j <= nPoints_xi2; j++ ) {
107 for (
int k = 1; k <= nPoints_xi3; k++ ) {
110 weights1.
at ( i ) *weights2.
at ( j ) *weights3.
at ( k ), mode);
123 OOFEM_ERROR(
"unsupported number of IPs (%d)", nPoints);
137 if ( approxOrder <= 1 ) {
141 requiredNIP = ( int ) ceil( ( (
double ) approxOrder + 3.0 ) / 2. );
142 if ( requiredNIP > 6 ) {
167 coords_xi = {-1.0, 1.0};
168 weights = {1.0, 1.0};
172 coords_xi = {-1.0, 0.0, 1.0};
173 weights = {0.333333333333333, 1.333333333333333, 0.333333333333333};
181 weights = { 0.166666666666667,
207 weights = { 0.066666666666667,
214 OOFEM_LOG_WARNING(
"Unsupported number of IPs (%d) for LobattoIR, using 6 ips instead.", nPoints);
virtual int getRequiredNumberOfIntegrationPoints(integrationDomain dType, int approxOrder)
Abstract service.
virtual int SetUpPointsOnTriangle(int nPoints, MaterialMode mode)
Sets up receiver's integration points on triangular (area coords) integration domain.
integrationDomain
Used by integrator class to supply integration points for proper domain to be integrated (Area...
virtual ~LobattoIntegrationRule()
Destructor.
integrationDomain intdomain
Integration domain.
virtual int SetUpPointsOnSquare(int nPoints, MaterialMode mode)
Sets up receiver's integration points on unit square integration domain.
double & at(int i)
Coefficient access function.
virtual int SetUpPointsOnCube(int nPoints, MaterialMode mode)
Sets up receiver's integration points on unit cube integration domain.
Abstract base class for all finite elements.
MaterialMode
Type representing material mode of integration point.
virtual int SetUpPointsOnLine(int nPoints, MaterialMode mode)
Sets up receiver's integration points on unit line integration domain.
Abstract base class representing integration rule.
#define OOFEM_LOG_WARNING(...)
static void giveLineCoordsAndWeights(int nPoints, FloatArray &coords_xi, FloatArray &weights)
Class representing vector of real numbers.
double cbrt(double x)
Returns the cubic root of x.
int giveNumberOfIntegrationPoints() const
Returns number of integration points of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
Class representing integration point in finite element program.
std::vector< GaussPoint * > gaussPoints
Array containing integration points.
LobattoIntegrationRule(int n, Element *e, int startIndx, int endIndx, bool dynamic)
Constructor.