63HTSelement :: giveDofManDofIDMask(
int inode,
IntArray &answer)
const
69 answer = {D_u_edge_const, D_u_edge_lin, D_v_edge_const, D_v_edge_lin};
77 StructuralElement :: postInitialize();
84HTSelement :: computeGaussPoints()
97HTSelement :: computeCenterOfGravity()
99 double area = 0, sX = 0, sY = 0;
100 double aX, aY, bX, bY;
111 area += ( bX - aX ) * ( bY + aY ) / 2;
113 sY += ( ( aX * aX ) + ( bX - aX ) * aX + ( bX - aX ) * ( bX - aX ) / 3 ) * ( bY - aY ) / 2.0;
114 sX += ( ( aY * aY ) + ( bY - aY ) * aY + ( bY - aY ) * ( bY - aY ) / 3 ) * ( bX - aX ) / 2.0;
122HTSelement :: giveSideNode(
int elementSideNumber,
int nodeNumber)
124 int firstNodeNumber = elementSideNumber;
125 int secondNodeNumber = elementSideNumber + 1;
127 secondNodeNumber = 1;
129 if ( nodeNumber == 1 ) {
130 return this->
giveNode(firstNodeNumber);
131 }
else if ( nodeNumber == 2 ) {
132 return this->
giveNode(secondNodeNumber);
141HTSelement :: computeVolumeAroundSide(
GaussPoint *gp,
int elemSideNumber)
149HTSelement :: giveSideLength(
int sideNumber)
158 return sqrt(dx * dx + dy * dy);
163HTSelement :: computeStiffnessMatrix(
FloatMatrix &answer, MatResponseMode rMode,
187 for (
int l = 0; l < 4; l++ ) {
188 A(k, l + i * 4) = Aedge(k, l);
228HTSelement :: computePrescribedDisplacementLoadVectorAt(
FloatArray &answer,
TimeStep *tStep, ValueModeType mode)
275HTSelement :: computeOutwardNormalMatrix(
FloatMatrix &answer,
int sideNumber)
277 double Ax = this->
giveSideNode(sideNumber, 1)->giveCoordinate(1);
278 double Bx = this->
giveSideNode(sideNumber, 2)->giveCoordinate(1);
279 double Ay = this->
giveSideNode(sideNumber, 1)->giveCoordinate(2);
280 double By = this->
giveSideNode(sideNumber, 2)->giveCoordinate(2);
284 answer.
at(1, 1) = answer.
at(2, 3) = ( By - Ay );
285 answer.
at(1, 3) = answer.
at(2, 2) = -( Bx - Ax );
286 double norm = sqrt( answer.
at(1, 1) * answer.
at(1, 1) + answer.
at(2, 2) * answer.
at(2, 2) );
333 double Ax = ( this->
giveSideNode(sideNumber, 1)->giveCoordinate(1) ) -
cgX;
334 double Bx = this->
giveSideNode(sideNumber, 2)->giveCoordinate(1) -
cgX;
336 double x = ( Bx - Ax ) * t + Ax;
338 double Ay = this->
giveSideNode(sideNumber, 1)->giveCoordinate(2) -
cgY;
339 double By = this->
giveSideNode(sideNumber, 2)->giveCoordinate(2) -
cgY;
340 double y = ( By - Ay ) * t + Ay;
375 this->
uv10(uv, x, y);
379 this->
uv11(uv, x, y);
383 this->
uv12(uv, x, y);
405 double Ax = this->
giveSideNode(sideNumber, 1)->giveCoordinate(1);
406 double Bx = this->
giveSideNode(sideNumber, 2)->giveCoordinate(1);
408 double x = ( Bx - Ax ) * t + Ax -
cgX;
410 double Ay = this->
giveSideNode(sideNumber, 1)->giveCoordinate(2);
411 double By = this->
giveSideNode(sideNumber, 2)->giveCoordinate(2);
412 double y = ( By - Ay ) * t + Ay -
cgY;
458 this->
sv10(sv, x, y);
463 this->
sv11(sv, x, y);
468 this->
sv12(sv, x, y);
607 answer(0) = -2 *
mu * x;
609 answer(2) = 2 *
mu * y;
616 answer(1) = -2 *
mu * y;
617 answer(2) = 2 *
mu * x;
631 answer(0) = -( 1 / 3.0 ) * x * x * x *
mu / ( 2 *
mu +
lambda ) + x * y * y;
632 answer(1) = -( 1 / 3.0 ) * y * y * y * (
lambda +
mu ) / ( 2 *
mu +
lambda );
638 answer(0) = -3 * x * x * y * ( 2 *
mu +
lambda ) / ( 2 *
lambda + 3 *
mu ) + y * y * y;
646 answer(1) = x * x * x + 3 * x * y * y * ( -
lambda - 2 *
mu ) / ( 2 *
lambda + 3 *
mu );
652 answer(0) = -( 1 / 3.0 ) * x * x * x * (
lambda +
mu ) / ( 2 *
mu +
lambda );
653 answer(1) = x * x * y - ( 1 / 3.0 ) * y * y * y *
mu / ( 2 *
mu +
lambda );
661 answer(2) = 2 *
mu * x * y;
685 answer(2) = 2 *
mu * x * y;
690HTSelement :: sv13(
FloatArray &answer,
double x,
double y)
692 answer(0) = ( 6 * x * x * y * y * mu + x * x * x * x * lambda - 2 * y * y * y * y * mu - y * y * y * y * lambda ) / lambda;
693 answer(1) = -4 * x * x * x * y * ( lambda + mu ) / lambda;
697HTSelement :: uv13(FloatArray &answer,
double x,
double y)
699 answer(0) = x * y * ( y * y * mu + x * x * lambda ) / lambda;
700 answer(1) = 0.5 * x * x * ( lambda + mu ) * ( x * x - 3 * y * y ) / lambda;
704HTSelement :: uv15(
FloatArray &answer,
double x,
double y)
706 answer(0) = -0.5 * y * y * ( lambda + mu ) * ( 3 * x * x - y * y ) / lambda;
707 answer(1) = x * y * ( x * x * mu + y * y * lambda ) / lambda;
711HTSelement :: uv16(
FloatArray &answer,
double x,
double y)
713 answer(0) = -4 * x * y * y * y * ( lambda + mu ) / lambda;
714 answer(1) = -( -6 * x * x * y * y * mu - y * y * y * y * lambda + x * x * x * x * lambda + 2 * x * x * x * x * mu ) / lambda;
718HTSelement :: sv13(
FloatArray &answer,
double x,
double y)
720 answer(0) = 4 * mu * x * ( 6 * y * y * mu + x * x * lambda + 3 * y * y * lambda ) / lambda;
721 answer(1) = -4 * mu * x * ( 3 * x * x * lambda + 2 * x * x * mu - 3 * lambda * y * y ) / lambda;
722 answer(2) = -4 * mu * y * ( 2 * y * y * mu + y * y * lambda + 3 * x * x * lambda ) / lambda;
726HTSelement :: sv14(
FloatArray &answer,
double x,
double y)
728 answer(0) = mu * y * ( 2 * y * y * mu + 3 * x * x * lambda + lambda * y * y ) / lambda;
729 answer(1) = -mu * y * ( 9 * x * x * lambda + 6 * x * x * mu - lambda * y * y ) / lambda;
730 answer(2) = mu * x * ( 3 * x * x * lambda - 3 * y * y * lambda + 2 * x * x * mu ) / lambda;
734HTSelement :: sv15(
FloatArray &answer,
double x,
double y)
736 answer(0) = mu * x * ( -9 * y * y * lambda - 6 * y * y * mu + lambda * x * x ) / lambda;
737 answer(1) = mu * x * ( 3 * y * y * lambda + 2 * x * x * mu + lambda * x * x ) / lambda;
738 answer(2) = -mu * y * ( -3 * y * y * lambda - 2 * y * y * mu + 3 * x * x * lambda ) / lambda;
742HTSelement :: sv16(
FloatArray &answer,
double x,
double y)
744 answer(0) = 4 * y * mu * ( -3 * y * y * lambda - 2 * y * y * mu + 3 * lambda * x * x ) / lambda;
745 answer(1) = 4 * mu * y * ( y * y * lambda + 6 * x * x * mu + 3 * lambda * x * x ) / lambda;
746 answer(2) = -4 * mu * x * ( x * x * lambda + 2 * x * x * mu + 3 * y * y * lambda ) / lambda;
750HTSelement :: uv17(
FloatArray &answer,
double x,
double y)
752 answer(0) = x * ( 2 * x * x * x * x * lambda + x * x * x * x * mu - 5 * y * y * y * y * mu - 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
753 answer(1) = -10 * x * x * y * ( lambda + mu ) * ( x * x - y * y ) / ( 2 * lambda + mu );
757HTSelement :: uv18(
FloatArray &answer,
double x,
double y)
759 answer(0) = ( 1 / 5.0 ) * y * ( 10 * x * x * y * y * mu - y * y * y * y * lambda - 2 * y * y * y * y * mu + 5 * x * x * x * x * lambda ) / lambda;
760 answer(1) = ( 2 / 5.0 ) * x * x * x * ( lambda + mu ) * ( -5 * y * y + x * x ) / lambda;
764HTSelement :: uv19(
FloatArray &answer,
double x,
double y)
766 answer(0) = -( 2 / 5.0 ) * y * y * y * ( lambda + mu ) * ( 5 * x * x - y * y ) / lambda;
767 answer(1) = -( 1 / 5.0 ) * x * ( x * x * x * x * lambda + 2 * x * x * x * x * mu - 5 * y * y * y * y * lambda - 10 * x * x * y * y * mu ) / lambda;
771HTSelement :: uv20(
FloatArray &answer,
double x,
double y)
773 answer(0) = 10 * x * y * y * ( lambda + mu ) * ( -y * y + x * x ) / ( 2 * lambda + mu );
774 answer(1) = -y * ( 5 * x * x * x * x * mu - 2 * y * y * y * y * lambda - y * y * y * y * mu + 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
778HTSelement :: sv17(
FloatArray &answer,
double x,
double y)
780 answer(0) = 5 * mu * ( -6 * x * x * y * y * lambda + 3 * x * x * x * x * lambda + 2 * x * x * x * x * mu - 2 * y * y * y * y * mu - lambda * y * y * y * y ) / ( 2 * lambda + mu );
781 answer(1) = -5 * mu * ( 5 * x * x * x * x * lambda - 18 * x * x * y * y * lambda + 4 * x * x * x * x * mu - 12 * x * x * y * y * mu + lambda * y * y * y * y ) / ( 2 * lambda + mu );
782 answer(2) = -20 * mu * x * y * ( 3 * x * x * lambda + 2 * x * x * mu - y * y * lambda ) / ( 2 * lambda + mu );
786HTSelement :: sv18(
FloatArray &answer,
double x,
double y)
788 answer(0) = 4 * mu * x * y * ( 2 * y * y * mu + x * x * lambda + lambda * y * y ) / lambda;
789 answer(1) = -4 * mu * x * y * ( 3 * x * x * lambda + 2 * x * x * mu - lambda * y * y ) / lambda;
790 answer(2) = mu * ( 3 * x * x * x * x * lambda + 2 * x * x * x * x * mu - y * y * y * y * lambda - 2 * y * y * y * y * mu - 6 * x * x * y * y * lambda ) / lambda;
794HTSelement :: sv19(
FloatArray &answer,
double x,
double y)
796 answer(0) = 4 * mu * x * y * ( -3 * y * y * lambda - 2 * y * y * mu + lambda * x * x ) / lambda;
797 answer(1) = 4 * mu * x * y * ( 2 * x * x * mu + y * y * lambda + lambda * x * x ) / lambda;
798 answer(2) = -mu * ( 6 * x * x * y * y * lambda + x * x * x * x * lambda + 2 * x * x * x * x * mu - 3 * y * y * y * y * lambda - 2 * y * y * y * y * mu ) / lambda;
802HTSelement :: sv20(
FloatArray &answer,
double x,
double y)
804 answer(0) = -5 * mu * ( -18 * x * x * y * y * lambda + 5 * y * y * y * y * lambda - 12 * x * x * y * y * mu + 4 * y * y * y * y * mu + lambda * x * x * x * x ) / ( 2 * lambda + mu );
805 answer(1) = -5 * mu * ( 6 * x * x * y * y * lambda - 3 * y * y * y * y * lambda - 2 * y * y * y * y * mu + 2 * x * x * x * x * mu + lambda * x * x * x * x ) / ( 2 * lambda + mu );
806 answer(2) = 20 * mu * x * y * ( -3 * y * y * lambda + x * x * lambda - 2 * y * y * mu ) / ( 2 * lambda + mu );
810HTSelement :: uv21(
FloatArray &answer,
double x,
double y)
812 answer(0) = ( -15 * x * x * y * y * y * y * mu - 15 * x * x * x * x * y * y * lambda + 2 * x * x * x * x * x * x * lambda + x * x * x * x * x * x * mu + y * y * y * y * y * y * lambda + \
813 2 * y * y * y * y * y * y * mu ) / ( 2 * lambda + mu );
814 answer(1) = -4 * x * x * x * y * ( lambda + mu ) * ( -5 * y * y + 3 * x * x ) / ( 2 * lambda + mu );
818HTSelement :: uv22(
FloatArray &answer,
double x,
double y)
820 answer(0) = ( 1 / 3.0 ) * x * y * ( -10 * x * x * y * y * lambda - 3 * y * y * y * y * mu + 6 * x * x * x * x * lambda + 3 * x * x * x * x * mu ) / ( 2 * lambda + mu );
821 answer(1) = 0.5 * x * x * ( lambda + mu ) * ( 5 * y * y * y * y + x * x * x * x - 10 * x * x * y * y ) / ( 2 * lambda + mu );
825HTSelement :: uv23(
FloatArray &answer,
double x,
double y)
827 answer(0) = 0.5 * y * y * ( lambda + mu ) * ( y * y * y * y + 5 * x * x * x * x - 10 * x * x * y * y ) / ( 2 * lambda + mu );
828 answer(1) = -( 1 / 3.0 ) * x * y * ( -6 * y * y * y * y * lambda - 3 * y * y * y * y * mu + 3 * x * x * x * x * mu + 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
832HTSelement :: uv24(
FloatArray &answer,
double x,
double y)
834 answer(0) = 4 * x * y * y * y * ( lambda + mu ) * ( 5 * x * x - 3 * y * y ) / ( 2 * lambda + mu );
835 answer(1) = ( 2 * y * y * y * y * y * y * lambda + y * y * y * y * y * y * mu + x * x * x * x * x * x * lambda + 2 * x * x * x * x * x * x * mu - 15 * x * x * x * x * y * y * mu - \
836 15 * x * x * y * y * y * y * lambda ) / ( 2 * lambda + mu );
840HTSelement :: sv21(
FloatArray &answer,
double x,
double y)
842 answer(0) = 6 * mu * x * ( 3 * x * x * x * x * lambda + 2 * x * x * x * x * mu - 10 * y * y * y * y * mu - 10 * x * x * y * y * lambda - 5 * lambda * y * y * y * y ) / ( 2 * lambda + mu );
843 answer(1) = -6 * mu * x * ( -30 * x * x * y * y * lambda + 5 * x * x * x * x * lambda - 20 * x * x * y * y * mu + 4 * x * x * x * x * mu + 5 * lambda * y * y * y * y ) / ( 2 * lambda + mu );
844 answer(2) = -6 * mu * y * ( -y * y * y * y * lambda - 2 * y * y * y * y * mu + 15 * x * x * x * x * lambda - 10 * x * x * y * y * lambda + 10 * x * x * x * x * mu ) / ( 2 * lambda + mu );
848HTSelement :: sv22(
FloatArray &answer,
double x,
double y)
850 answer(0) = mu * y * ( -10 * x * x * y * y * lambda - 2 * y * y * y * y * mu + 15 * x * x * x * x * lambda + 10 * x * x * x * x * mu - lambda * y * y * y * y ) / ( 2 * lambda + mu );
851 answer(1) = -mu * y * ( -30 * x * x * y * y * lambda + 25 * x * x * x * x * lambda - 20 * x * x * y * y * mu + 20 * x * x * x * x * mu + lambda * y * y * y * y ) / ( 2 * lambda + mu );
852 answer(2) = mu * x * ( -30 * x * x * y * y * lambda + 5 * x * x * x * x * lambda + 4 * x * x * x * x * mu + 5 * y * y * y * y * lambda - 20 * x * x * y * y * mu ) / ( 2 * lambda + mu );
856HTSelement :: sv23(
FloatArray &answer,
double x,
double y)
858 answer(0) = -mu * x * ( 25 * y * y * y * y * lambda - 30 * x * x * y * y * lambda + 20 * y * y * y * y * mu - 20 * x * x * y * y * mu + lambda * x * x * x * x ) / ( 2 * lambda + mu );
859 answer(1) = -mu * x * ( 2 * x * x * x * x * mu - 15 * y * y * y * y * lambda - 10 * y * y * y * y * mu + 10 * x * x * y * y * lambda + lambda * x * x * x * x ) / ( 2 * lambda + mu );
860 answer(2) = mu * y * ( 5 * x * x * x * x * lambda + 5 * y * y * y * y * lambda + 4 * y * y * y * y * mu - 30 * x * x * y * y * lambda - 20 * x * x * y * y * mu ) / ( 2 * lambda + mu );
864HTSelement :: sv24(
FloatArray &answer,
double x,
double y)
866 answer(0) = -6 * mu * y * ( -30 * x * x * y * y * lambda + 5 * y * y * y * y * lambda - 20 * x * x * y * y * mu + 4 * y * y * y * y * mu + 5 * lambda * x * x * x * x ) / ( 2 * lambda + mu );
867 answer(1) = -6 * mu * y * ( 10 * x * x * x * x * mu - 3 * y * y * y * y * lambda - 2 * y * y * y * y * mu + 10 * x * x * y * y * lambda + 5 * lambda * x * x * x * x ) / ( 2 * lambda + mu );
868 answer(2) = 6 * mu * x * ( -15 * y * y * y * y * lambda - 10 * y * y * y * y * mu + x * x * x * x * lambda + 2 * x * x * x * x * mu + 10 * x * x * y * y * lambda ) / ( 2 * lambda + mu );
875 answer(0) = -5 * x * x * x * x + 30 * x * x * y * y - 5 * y * y * y * y;
876 answer(1) = 20 * x * x * x * y - 20 * x * y * y * y;
882 answer(0) = 2 *
mu * ( -20 * x * x * x + 60 * x * y * y );
883 answer(1) = 2 *
mu * ( 20 * x * x * x - 60 * x * y * y );
884 answer(2) =
mu * ( 120 * x * x * y - 40 * y * y * y );
#define REGISTER_Element(class)
double giveCoordinate(int i) const
Node * giveNode(int i) const
int numberOfDofMans
Number of dofmanagers.
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
virtual IntegrationRule * giveIntegrationRule(int i)
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
bool containsOnlyZeroes() const
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void beTProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
void add(const FloatMatrix &a)
void resize(Index rows, Index cols)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void beTranspositionOf(const FloatMatrix &src)
void zero()
Zeroes all coefficient of receiver.
bool beInverseOf(const FloatMatrix &src)
double at(std::size_t i, std::size_t j) const
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
double giveWeight()
Returns integration weight of receiver.
void computePuVectorAt(FloatArray &answer, FloatMatrix N, FloatArray u, GaussPoint *gp, int sideNumber)
void sv1(FloatArray &answer, double x, double y)
double u_gammaConst(GaussPoint *gp)
void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep) override
void uv11(FloatArray &answer, double x, double y)
double computeVolumeAroundSide(GaussPoint *gp, int elemSideNumber)
void sv7(FloatArray &answer, double x, double y)
void uv9(FloatArray &answer, double x, double y)
void computeAMatrixAt(FloatMatrix &answer, FloatMatrix N, GaussPoint *gp, int sideNumber)
void uv1(FloatArray &answer, double x, double y)
void computeSvMatrixAt(FloatMatrix &answer, GaussPoint *gp, int sideNumber)
void sv3(FloatArray &answer, double x, double y)
void computeFMatrixAt(FloatMatrix &answer, FloatMatrix N, GaussPoint *gp, int sideNumber)
void sv10(FloatArray &answer, double x, double y)
void uv12(FloatArray &answer, double x, double y)
void uv8(FloatArray &answer, double x, double y)
void sv8(FloatArray &answer, double x, double y)
void uv6(FloatArray &answer, double x, double y)
void sv4(FloatArray &answer, double x, double y)
void uv4(FloatArray &answer, double x, double y)
void computeUgammaMatrixAt(FloatMatrix &answer, GaussPoint *gp)
void postInitialize() override
Performs post initialization steps.
double u_gammaLin(GaussPoint *gp)
void computeCenterOfGravity()
void sv25_4(FloatArray &answer, double x, double y)
void uv3(FloatArray &answer, double x, double y)
double giveSideLength(int sideNumber)
void sv11(FloatArray &answer, double x, double y)
void uv25_4(FloatArray &answer, double x, double y)
void computeUvMatrixAt(FloatMatrix &answer, GaussPoint *gp, int sideNubmer)
void computeOutwardNormalMatrix(FloatMatrix &answer, int sideNumber)
Node * giveSideNode(int elementSideNumber, int nodeNumber)
void uv10(FloatArray &answer, double x, double y)
void sv9(FloatArray &answer, double x, double y)
void uv7(FloatArray &answer, double x, double y)
void uv5(FloatArray &answer, double x, double y)
void sv6(FloatArray &answer, double x, double y)
void sv12(FloatArray &answer, double x, double y)
void sv5(FloatArray &answer, double x, double y)
StructuralElement(int n, Domain *d)
double norm(const FloatArray &x)