53IntArray Tr2Shell7 :: orderingDofTypes = {1, 2, 3, 8, 9, 10, 15, 16, 17, 22, 23, 24, 29, 30, 31, 36, 37, 38,
54 4, 5, 6, 11, 12, 13, 18, 19, 20, 25, 26, 27, 32, 33, 34, 39, 40, 41,
55 7, 14, 21, 28, 35, 42};
56IntArray Tr2Shell7 :: orderingNodes = {1, 2, 3, 19, 20, 21, 37, 4, 5, 6, 22, 23, 24, 38, 7, 8, 9, 25, 26, 27, 39,
57 10, 11, 12, 28, 29, 30, 40, 13, 14, 15, 31, 32, 33, 41, 16, 17, 18,
59IntArray Tr2Shell7 :: orderingEdgeNodes = {1, 2, 3, 10, 11, 12, 19, 4, 5, 6, 13, 14, 15, 20, 7, 8, 9, 16, 17, 18, 21};
69Tr2Shell7 :: giveOrderingDofTypes()
const
75Tr2Shell7 :: giveOrderingNodes()
const
80Tr2Shell7 :: giveOrderingEdgeNodes()
const
90Tr2Shell7 :: computeGaussPoints()
99 OOFEM_ERROR(
"Tr2Shell7 only supports layered cross section");
116 if (bNodes.
at(1)==1 && bNodes.
at(2)==2 && bNodes.
at(3)==4) {
119 }
else if (bNodes.
at(1)==2 && bNodes.
at(2)==3 && bNodes.
at(3)==5) {
122 }
else if (bNodes.
at(1)==3 && bNodes.
at(2)==1 && bNodes.
at(3)==6) {
128 }
else if (bNodes.
giveSize() == 6) {
137 for (
int i=1; i<=localloc.
giveSize(); i++) {
138 locationArray.
at(i)=eloc.
at(localloc.
at(i));
139 dofIdArray->
at(i) = dofID.
at(localloc.
at(i));
145Tr2Shell7 :: giveEdgeDofMapping(
IntArray &answer,
int iEdge)
const
153 answer = {1, 2, 3, 8, 9, 10, 22, 23, 24, 4, 5, 6, 11, 12, 13, 25, 26, 27, 7, 14, 28};
154 }
else if ( iEdge == 2 ) {
155 answer = { 8, 9, 10, 15, 16, 17, 29, 30, 31, 11, 12, 13, 18, 19, 20, 32, 33, 34, 14, 21, 35};
156 }
else if ( iEdge == 3 ) {
157 answer = { 15, 16, 17, 1, 2, 3, 36, 37, 38, 18, 19, 20, 4, 5, 6, 39, 40, 41, 21, 7, 42};
165Tr2Shell7 :: giveSurfaceDofMapping(
IntArray &answer,
int iSurf)
const
168 for (
int i = 1; i <= 42; i++ ) {
194Tr2Shell7 :: computeVolumeAroundLayer(
GaussPoint *gp,
int layer)
198 double detJ =
det(Gcov) * 0.5 * this->
layeredCS->giveLayerThickness(layer);
207 answer.
resize(ndofs, ndofs);
208 for (
int i = 1; i <= ndofs; i++ ) {
209 for (
int j = 1; j <= 18; j++ ) {
210 if ( fabs( matrix1.
at(i, j) ) > 1.0e-12 ) {
211 double diff = ( matrix1.
at(i, j) - matrix2.
at(i, j) );
212 double relDiff = diff / matrix1.
at(i, j);
213 if ( fabs(relDiff) < 1.0e-4 ) {
214 answer.
at(i, j) = 0.0;
215 }
else if ( fabs(diff) < 1.0e3 ) {
216 answer.
at(i, j) = 0.0;
218 answer.
at(i, j) = relDiff;
221 answer.
at(i, j) = -1.0;
#define REGISTER_Element(class)
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
int numberOfDofMans
Number of dofmanagers.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
double computeNorm() const
void beColumnOf(const FloatMatrix &mat, int col)
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
void resize(Index rows, Index cols)
double at(std::size_t i, std::size_t j) const
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
double giveWeight()
Returns integration weight of receiver.
Shell7Base(int n, Domain *d)
FloatMatrixF< 3, 3 > evalInitialCovarBaseVectorsAt(const FloatArrayF< 3 > &lCoords)
LayeredCrossSection * layeredCS
void giveSurfaceDofMapping(IntArray &answer, int iSurf) const override
static IntArray orderingDofTypes
static IntArray orderingEdgeNodes
static FEI3dTrQuad interpolation
void giveEdgeDofMapping(IntArray &answer, int iEdge) const override
static IntArray orderingNodes
double det(const FloatMatrixF< 2, 2 > &mat)
Computes the determinant.