53 OOFEM_ERROR(
"FEI3dTrLin :: evaldNdx - Not supported");
88 this->
evalN(n, lcoords, cellgeo);
90 for (
int i = 1; i <= 3; ++i ) {
95#define POINT_TOL 1.e-3
99 OOFEM_ERROR(
"FEI3dTrLin :: global2local - Not supported");
108 OOFEM_ERROR(
"FEI3dTrLin :: giveJacobianMatrixAt - Not supported");
115 double xi = lcoords.
at(1);
117 answer.
at(1) = ( 1. - xi ) * 0.5;
118 answer.
at(2) = ( 1. + xi ) * 0.5;
127 OOFEM_ERROR(
"FEI3dTrLin :: edgeEvaldNdx - Not supported");
147 for (
int i = 0; i <
N.giveSize(); ++i ) {
158 OOFEM_ERROR(
"FEI3dTrLin :: edgeGiveTransformationJacobian - Not supported");
164FEI3dTrLin :: computeLocalEdgeMapping(
int iedge)
const
168 }
else if ( iedge == 2 ) {
170 }
else if ( iedge == 3 ) {
173 throw std::range_error(
"invalid edge number");
182 OOFEM_ERROR(
"FEI3dTrLin :: edgeComputeLength - Not supported");
190 answer.
at(1) = lcoords.
at(1);
191 answer.
at(2) = lcoords.
at(2);
192 answer.
at(3) = 1. - lcoords.
at(1) - lcoords.
at(2);
204 for (
int i = 1; i <= 3; ++i ) {
205 answer.
at(i, 1) = dndxi.at(i);
206 answer.
at(i, 2) = dndeta.
at(i);
216 answer.
at(1, 1) = 0.;
217 answer.
at(2, 1) = 0.;
218 answer.
at(3, 1) = 0.;
221 answer.
at(1, 2) = 0.;
222 answer.
at(2, 2) = 0.;
223 answer.
at(3, 2) = 0.;
226 answer.
at(1, 3) = 0.;
227 answer.
at(2, 3) = 0.;
228 answer.
at(3, 3) = 0.;
236FEI3dTrLin :: surfaceLocal2global(
FloatArray &answer,
int isurf,
244 for (
int i = 1; i <=
N.giveSize(); ++i ) {
253 OOFEM_ERROR(
"FEI3dTrLin :: surfaceEvaldNdx - Not supported");
265 for (
int i = 0; i < 3; ++i ) {
291 jacobianMatrix.
resize(3, 3);
292 jacobianMatrix.
at(1, 1) = G1.
at(1);
293 jacobianMatrix.
at(1, 2) = G2.
at(1);
294 jacobianMatrix.
at(1, 3) = G3.
at(1);
295 jacobianMatrix.
at(2, 1) = G1.
at(2);
296 jacobianMatrix.
at(2, 2) = G2.
at(2);
297 jacobianMatrix.
at(2, 3) = G3.
at(2);
298 jacobianMatrix.
at(3, 1) = G1.
at(3);
299 jacobianMatrix.
at(3, 2) = G2.
at(3);
300 jacobianMatrix.
at(3, 3) = G3.
at(3);
306 OOFEM_ERROR(
"FEI3dTrLin :: surfaceGiveTransformationJacobian - Not supported yet");
311FEI3dTrLin :: computeLocalSurfaceMapping(
int isurf)
const
318std::unique_ptr<IntegrationRule>
321 auto iRule = std::make_unique<GaussIntegrationRule>(1,
nullptr);
322 int points = iRule->getRequiredNumberOfIntegrationPoints(
_Triangle,
order);
323 iRule->SetUpPointsOnTriangle(points, _Unknown);
324 return std::move(iRule);
327std::unique_ptr<IntegrationRule>
331 OOFEM_ERROR(
"FEI3dTrLin :: giveBoundaryIntegrationRule - Not supported");
IntArray computeLocalEdgeMapping(int iedge) const override
void surfaceEvaldNdxi(FloatMatrix &answer, const FloatArray &lcoords) const override
void giveDerivativeXi(FloatArray &n, const FloatArray &lcoords) const
void surfaceEvalBaseVectorsAt(FloatArray &G1, FloatArray &G2, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
void giveDerivativeEta(FloatArray &n, const FloatArray &lcoords) const
void edgeEvalN(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void surfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
virtual const FloatArray giveVertexCoordinates(int i) const =0
double computeNorm() const
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
void add(const FloatArray &src)
void resize(Index rows, Index cols)
double at(std::size_t i, std::size_t j) const