Go to the documentation of this file.
45FEI1dQuad :: evalN(
double ksi)
47 return {ksi * ( ksi - 1. ) * 0.5, ksi * ( 1. + ksi ) * 0.5, ( 1. - ksi * ksi )};
54 answer =
evalN(lcoords[0]);
56 double ksi = lcoords.
at(1);
60 answer.
at(1) = ksi * ( ksi - 1. ) * 0.5;
61 answer.
at(2) = ksi * ( 1. + ksi ) * 0.5;
62 answer.
at(3) = ( 1. - ksi * ksi );
66std::pair<double, FloatMatrixF<1,3>>
73 double J = 1. / 2. * ( 2 * ksi - 1 ) * x1 + 1. / 2. * ( 2 * ksi + 1 ) * x2 - 2. * ksi * x3;
76 ( -1. / 2. + ksi ) / J,
77 ( 1. / 2. + ksi ) / J,
88 double ksi = lcoords.
at(1);
92 answer.
at(1, 1) = ( -1. / 2. + ksi ) / J;
93 answer.
at(1, 2) = ( 1. / 2. + ksi ) / J;
94 answer.
at(1, 3) = -2. * ksi / J;
104 this->
evalN(n, lcoords, cellgeo);
117 double a = 0.5 * ( x1 + x2 ) - x3;
118 double b = 0.5 * ( x2 - x1 );
119 double c = x3 - coords.
at(1);
122 if ( fabs(a) < 1.e-6 ) {
123 double ksi = ( 2.0 * coords.
at(1) - ( x1 + x2 ) ) / ( x2 - x1 );
124 answer.
at(1) =
clamp(ksi, -1., 1.);
125 return fabs(ksi) <= 1.0;
127 double ksi1 = ( -b + sqrt(b * b - 4. * a * c) ) / ( 2. * a );
128 double ksi2 = ( -b - sqrt(b * b - 4. * a * c) ) / ( 2. * a );
130 if ( ( fabs(ksi1) <= 1. ) && ( fabs(ksi2) <= 1. ) ) {
133 }
else if ( fabs(ksi1) <= 1. ) {
136 }
else if ( fabs(ksi2) <= 1. ) {
152 double ksi = lcoords.
at(1);
154 double J = 1. / 2. * ( 2 * ksi - 1 ) * x1 + 1. / 2. * ( 2 * ksi + 1 ) * x2 - 2. * ksi * x3;
172 this->
evalN(answer, lcoords, cellgeo);
175double FEI1dQuad :: boundaryEdgeGiveTransformationJacobian(
int boundary,
const FloatArray &lcoords,
const FEICellGeometry &cellgeo)
const
double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
static FloatArrayF< 3 > evalN(double ksi)
void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
virtual const FloatArray giveVertexCoordinates(int i) const =0
void zero()
Zeroes all coefficients of receiver.
void resize(Index rows, Index cols)
void zero()
Zeroes all coefficient of receiver.
double at(std::size_t i, std::size_t j) const
double clamp(int a, int lower, int upper)
Returns the clamped value of a between upper and lower.
This page is part of the
OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak
Bořek Patzák
Project e-mail:
oofem@fsv.cvut.cz
Generated at for OOFEM by
doxygen
1.15.0 written by Dimitri van Heesch,
© 1997-2011