53 OOFEM_ERROR(
"FEI3dQuadLin :: evaldNdx - Not supported");
69 this->
evalN(n, lcoords, cellgeo);
71 for (
int i = 1; i <= 4; ++i ) {
76#define POINT_TOL 1.e-3
80 OOFEM_ERROR(
"FEI3dQuadLin :: global2local - Not supported");
95 OOFEM_ERROR(
"FEI3dQuadLin :: giveJacobianMatrixAt - Not supported");
102 double xi = lcoords.
at(1);
104 answer.
at(1) = ( 1. - xi ) * 0.5;
105 answer.
at(2) = ( 1. + xi ) * 0.5;
114 OOFEM_ERROR(
"FEI3dQuadLin :: edgeEvaldNdx - Not supported");
126FEI3dQuadLin :: edgeLocal2global(
FloatArray &answer,
int iedge,
134 for (
int i = 0; i <
N.giveSize(); ++i ) {
145 OOFEM_ERROR(
"FEI3dQuadLin :: edgeGiveTransformationJacobian - Not supported");
151FEI3dQuadLin :: computeLocalEdgeMapping(
int iedge)
const
155 }
else if ( iedge == 2 ) {
157 }
else if ( iedge == 3 ) {
159 }
else if ( iedge == 4 ) {
162 throw std::range_error(
"invalid edge number");
171 OOFEM_ERROR(
"FEI3dQuadLin :: edgeComputeLength - Not supported");
178 double ksi = lcoords[0];
179 double eta = lcoords[1];
182 answer.
at(1) = ( 1. + ksi ) * ( 1. + eta ) * 0.25;
183 answer.
at(2) = ( 1. - ksi ) * ( 1. + eta ) * 0.25;
184 answer.
at(3) = ( 1. - ksi ) * ( 1. - eta ) * 0.25;
185 answer.
at(4) = ( 1. + ksi ) * ( 1. - eta ) * 0.25;
191 const double ksi = lcoords[0];
192 const double eta = lcoords[1];
196 answer.
at(1, 1) = 0.25 * ( 1. + eta );
197 answer.
at(2, 1) = -0.25 * ( 1. + eta );
198 answer.
at(3, 1) = -0.25 * ( 1. - eta );
199 answer.
at(4, 1) = 0.25 * ( 1. - eta );
202 answer.
at(1, 2) = 0.25 * ( 1. + ksi );
203 answer.
at(2, 2) = 0.25 * ( 1. - ksi );
204 answer.
at(3, 2) = -0.25 * ( 1. - ksi );
205 answer.
at(4, 2) = -0.25 * ( 1. + ksi );
216 answer.
at(1, 1) = 0.;
217 answer.
at(2, 1) = 0.;
218 answer.
at(3, 1) = 0.;
219 answer.
at(4, 1) = 0.;
222 answer.
at(1, 2) = 0.;
223 answer.
at(2, 2) = 0.;
224 answer.
at(3, 2) = 0.;
225 answer.
at(4, 2) = 0.;
228 answer.
at(1, 3) = 0.25;
229 answer.
at(2, 3) = -0.25;
230 answer.
at(3, 3) = 0.25;
231 answer.
at(4, 3) = -0.25;
239FEI3dQuadLin :: surfaceLocal2global(
FloatArray &answer,
int isurf,
247 for (
int i = 1; i <=
N.giveSize(); ++i ) {
256 OOFEM_ERROR(
"FEI3dQuadLin :: surfaceEvaldNdx - Not supported");
268 for (
int i = 0; i < 4; ++i ) {
294 jacobianMatrix.
resize(3, 3);
295 jacobianMatrix.
at(1, 1) = G1.
at(1);
296 jacobianMatrix.
at(1, 2) = G2.
at(1);
297 jacobianMatrix.
at(1, 3) = G3.
at(1);
298 jacobianMatrix.
at(2, 1) = G1.
at(2);
299 jacobianMatrix.
at(2, 2) = G2.
at(2);
300 jacobianMatrix.
at(2, 3) = G3.
at(2);
301 jacobianMatrix.
at(3, 1) = G1.
at(3);
302 jacobianMatrix.
at(3, 2) = G2.
at(3);
303 jacobianMatrix.
at(3, 3) = G3.
at(3);
309 OOFEM_ERROR(
"FEI3dQuadLin :: surfaceGiveTransformationJacobian - Not supported yet");
314FEI3dQuadLin :: computeLocalSurfaceMapping(
int isurf)
const
322std::unique_ptr<IntegrationRule>
325 auto iRule = std::make_unique<GaussIntegrationRule>(1,
nullptr);
326 int points = iRule->getRequiredNumberOfIntegrationPoints(
_Square,
order);
327 iRule->SetUpPointsOnSquare(points, _Unknown);
328 return std::move(iRule);
331std::unique_ptr<IntegrationRule>
335 OOFEM_ERROR(
"FEI3dQuadLin :: giveBoundaryIntegrationRule - Not supported");
344 OOFEM_ERROR(
"FEI3dQuadLin :: giveArea - Not supported");
void surfaceEvalBaseVectorsAt(FloatArray &G1, FloatArray &G2, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
void edgeEvalN(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void surfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void surfaceEvaldNdxi(FloatMatrix &answer, const FloatArray &lcoords) const override
double surfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
IntArray computeLocalEdgeMapping(int iedge) const override
void evalN(FloatArray &answer, 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